èæ¯
ã¬ãã ããŒããŠã§ã¢ã®æ奜家ã§ããç§ã¯ããã€ãŠè±åœã®è²©å£²è ãã ZX Spectrum+ ãè³Œå ¥ããŸããã ã³ã³ãã¥ãŒã¿ãŒèªäœã«å梱ãããŠãããã²ãŒã ã®å ¥ã£ããªãŒãã£ãª ã«ã»ãã (説ææžä»ãã®å ã®ããã±ãŒãžã«å ¥ã£ãŠãã) ãšãç¹å¥ãªããŒã¯ã®ãªãã«ã»ããã«èšé²ãããããã°ã©ã ãããã€ãåãåããŸããã é©ããããšã«ã40 幎åã®ã«ã»ããã®ããŒã¿ã¯æ£åžžã«èªã¿èŸŒãããšãã§ããããããã»ãŒãã¹ãŠã®ã²ãŒã ãšããã°ã©ã ãããŠã³ããŒãããããšãã§ããŸããã
ããããããã€ãã®ã«ã»ããã§ã¯ãæããã« ZX Spectrum ã³ã³ãã¥ãŒã¿ãŒã«ãã£ãŠäœæããããã®ã§ã¯ãªãé²é³ãèŠã€ãããŸããã ãããã¯å®å
šã«ç°ãªã£ãŠèãããŸãããŸããåè¿°ã®ã³ã³ãã¥ãŒã¿ãŒããã®é²é³ãšã¯ç°ãªãããã¹ãŠã®ããã°ã©ã ãã²ãŒã ã®é²é³ã«éåžžååšããçã BASIC ããŒãããŒããŒããå§ãŸã£ãŠããŸããã§ããã
ãã°ããã®éããã®ããšãç§ãæ©ãŸããŠããŸãããç§ã¯ãããã®äžã«äœãé ãããŠããã®ããç¥ãããã£ãã®ã§ãã ãªãŒãã£ãªä¿¡å·ããã€ãã®ã·ãŒã±ã³ã¹ãšããŠèªã¿åãããšãã§ããã°ãä¿¡å·ã®èµ·æºã瀺ãæåãªã©ããã®äžã«æ¢ãããšãã§ããŸãã äžçš®ã®ã¬ããèå€åŠã
ä»ãããããã«ã»ããèªäœã®ã©ãã«ãèŠãŠåŸ®ç¬ãã§ããŸã£ãã®ã¯ã
çãã¯ãã£ãšç®ã®åã«ãã£ã
å·ŠåŽã®ã«ã»ããã®ã©ãã«ã«ã¯ TRS-80 ã³ã³ãã¥ãŒã¿ãŒã®ååããããã¡ãŒã«ãŒåã®ããäžã«ãç±³åœ Radio Shack 補ããšèšèŒãããŠããŸãã
ïŒæåŸãŸã§é°è¬ãç¥ãããå Žåã¯ããã¿ãã¬ãé¿ããŠãã ããïŒ
é³å£°ä¿¡å·ã®æ¯èŒ
ãŸããé³å£°é²é³ãããžã¿ã«åããŸãããã ã©ã®ãããªé³ããèãããšãã§ããŸãã
ãããŠãã€ãã®ããã«ãZX Spectrum ã³ã³ãã¥ãŒã¿ãŒããã®é²é³ã¯æ¬¡ã®ããã«èãããŸãã
ã©ã¡ãã®å Žåããé²é³ã®åãã«ãããã ãã€ãããããŒã³ - åãåšæ³¢æ°ã®é³ïŒæåã®é²é³ã§ã¯ 1 ç§æªæºã§ãããåºå¥ã§ããŸãïŒã ãã€ããã ããŒã³ã¯ãã³ã³ãã¥ãŒã¿ã«ããŒã¿ã®åä¿¡ã®æºåãããããä¿¡å·ãéããŸãã äžè¬ã«ãåã³ã³ãã¥ãŒã¿ã¯ãä¿¡å·ã®åœ¢ç¶ãšåšæ³¢æ°ã«ãã£ãŠãç¬èªã®ããã€ããã ããŒã³ã®ã¿ãèªèããŸãã
ä¿¡å·ã®åœ¢ç¶èªäœã«ã€ããŠäœãèšãå¿ èŠããããŸãã ããšãã°ãZX Spectrum ã§ã¯ããã®åœ¢ç¶ã¯é·æ¹åœ¢ã§ãã
ãã€ããã ããŒã³ãæ€åºããããšãZX Spectrum ã¯ç»é¢ã®å¢çã«èµ€ãšéã®ããŒã亀äºã«è¡šç€ºããŠãä¿¡å·ãèªèãããããšã瀺ããŸãã ãã€ãããããŒã³çµäº ã·ã³ã¯ããã«ã¹ãã³ã³ãã¥ãŒã¿ãŒã«ããŒã¿ã®åä¿¡ãéå§ããä¿¡å·ãéããŸãã (ãã€ããã ããŒã³ãšããã«ç¶ãããŒã¿ãšæ¯èŒããŠ) æç¶æéãçãã®ãç¹åŸŽã§ã (å³ãåç
§)
åæãã«ã¹ãåä¿¡ããåŸãã³ã³ãã¥ãŒã¿ãŒã¯ä¿¡å·ã®åç«ã¡äžãã/ç«ã¡äžãããèšé²ãããã®æç¶æéã枬å®ããŸãã æéãç¹å®ã®å¶éæªæºã®å Žåãããã 1 ãã¡ã¢ãªã«æžã蟌ãŸãããã以å€ã®å Žå㯠0 ãã¡ã¢ãªã«æžã蟌ãŸããŸãããããã¯ãã€ãã«åéãããN ãã€ããåä¿¡ããããŸã§ããã»ã¹ãç¹°ãè¿ãããŸãã æ°å€ N ã¯éåžžãããŠã³ããŒãããããã¡ã€ã«ã®ããããŒããååŸãããŸãã èªã¿èŸŒã¿ã·ãŒã±ã³ã¹ã¯æ¬¡ã®ãšããã§ãã
- ãã€ãããããŒã³
- ããã㌠(åºå®é·)ãããŠã³ããŒããããããŒã¿ã®ãµã€ãº (N)ããã¡ã€ã«åãã¿ã€ããå«ãŸããŸã
- ãã€ãããããŒã³
- ããŒã¿ãã®ãã®
ããŒã¿ãæ£ããããŒããããŠããããšã確èªããããã«ãZX Spectrum ã¯ãããã ããªãã£ãã€ã (ããªã㣠ãã€ã)ããã¡ã€ã«ãä¿åãããšãã«ãæžã蟌ãŸããããŒã¿ã®ãã¹ãŠã®ãã€ãã XOR æŒç®ããããšã«ãã£ãŠèšç®ãããŸãã ãã¡ã€ã«ãèªã¿èŸŒãéãã³ã³ãã¥ãŒã¿ã¯åä¿¡ããããŒã¿ããããªãã£ãã€ããèšç®ãããã®çµæãä¿åãããããŒã¿ãšç°ãªãå Žåã«ã¯ããR ããŒãããŒããšã©ãŒããšãããšã©ãŒã¡ãã»ãŒãžã衚瀺ããŸãã å³å¯ã«èšãã°ãã³ã³ãã¥ãŒã¿ãŒã¯ãèªã¿åãæã«ãã«ã¹ãèªèã§ããªãå ŽåïŒãã«ã¹ãæ¬ èœããŠãããããã«ã¹ã®æç¶æéãç¹å®ã®å¶éã«å¯Ÿå¿ããŠããªãå ŽåïŒããã®ã¡ãã»ãŒãžãããæ©ãçºè¡ããããšãã§ããŸãã
ããã§ã¯ãæªç¥ã®ä¿¡å·ãã©ã®ãããªãã®ããèŠãŠã¿ãŸãããã
ããããã€ãããããŒã³ã§ãã ä¿¡å·ã®åœ¢ç¶ã¯å€§ããç°ãªããŸãããä¿¡å·ãç¹å®ã®åšæ³¢æ°ã®çããã«ã¹ã®ç¹°ãè¿ãã§æ§æãããŠããããšã¯æããã§ãã ãµã³ããªã³ã°åšæ³¢æ° 44100 Hz ã§ã¯ããããŒã¯ãéã®è·é¢ã¯çŽ 48 ãµã³ãã«ã§ã (ããã¯ãåšæ³¢æ° ~918 Hz ã«çžåœããŸã)ããã®æ°åãèŠããŠãããŸãããã
ããŒã¿ã®æçãèŠãŠã¿ãŸãããã
åã
ã®ãã«ã¹éã®è·é¢ã枬å®ãããšããé·ãããã«ã¹éã®è·é¢ã¯äŸç¶ãšããŠçŽ 48 ãµã³ãã«ãçããã«ã¹éã®è·é¢ã¯çŽ 24 ãµã³ãã«ã§ããããšãããããŸãã å°ãå
ãèŠãŠãæçµçã«ã¯ãåšæ³¢æ° 918 Hz ã®ãåºæºããã«ã¹ããã¡ã€ã«ã®æåããæåŸãŸã§ç¶ç¶çã«ç¶ãããšãå€æãããšèšããããšæããŸãã ããŒã¿ãéä¿¡ãããšãã«ãåºæºãã«ã¹ã®éã«è¿œå ã®ãã«ã¹ãçºçããå Žåããããããã 1 ãšã¿ãªãããã以å€ã®å Žå㯠0 ãšã¿ãªãããšãã§ããŸãã
åæãã«ã¹ã«ã€ããŠã¯ã©ãã§ãã? ããŒã¿ã®å é ãèŠãŠã¿ãŸãããã
ãã€ããã ããŒã³ãçµäºããããã«ããŒã¿ãéå§ãããŸãã å°ãåŸãããã€ãã®ç°ãªããªãŒãã£ãªé²é³ãåæããçµæãããŒã¿ã®æåã®ãã€ããåžžã«åãã§ããããšãããããŸãã (10100101bãA5h)ã ã³ã³ãã¥ãŒã¿ã¯ãããŒã¿ãåä¿¡ããåŸã«èªã¿åããéå§ããå ŽåããããŸãã
åæãã€ãã®æåŸã® 1 çªç®ã®çŽåŸã®æåã®åºæºãã«ã¹ã®ã·ããã«ã泚ç®ããŠãã ããã ãã®åé¡ã¯ãããŒã¿èªèããã°ã©ã ã®éçºããã»ã¹ã®ããªãåŸã«ãªã£ãŠããã¡ã€ã«ã®å é ã®ããŒã¿ãå®å®ããŠèªã¿åãããšãã§ããªãããšãå€æããŸããã
次ã«ããªãŒãã£ãª ãã¡ã€ã«ãåŠçããŠããŒã¿ãããŒãããã¢ã«ãŽãªãºã ã説æããŠã¿ãŸãããã
ããŒã¿ã®ããŒã
ãŸããã¢ã«ãŽãªãºã ãåçŽã«ããããã®ããã€ãã®ä»®å®ãèŠãŠã¿ãŸãããã
- WAV 圢åŒã®ãã¡ã€ã«ã®ã¿ãèæ ®ããŸãã
- ãªãŒãã£ãª ãã¡ã€ã«ã¯ãã€ããã ããŒã³ã§å§ãŸãå¿ èŠããããå é ã«ç¡é³éšåãå«ãŸããŠããŠã¯ãªããŸãã
- ãœãŒã¹ ãã¡ã€ã«ã®ãµã³ããªã³ã° ã¬ãŒã㯠44100 Hz ã§ããå¿ èŠããããŸãã ãã®å Žåã48 åã®ãµã³ãã«ã®åºæºãã«ã¹éã®è·é¢ã¯ãã§ã«æ±ºå®ãããŠãããããã°ã©ã ã§èšç®ããå¿ èŠã¯ãããŸããã
- ãµã³ãã«åœ¢åŒã¯ä»»æ (8/16 ããã/æµ®åå°æ°ç¹) ã«ããããšãã§ããŸããèªã¿åãæã«åžæãã圢åŒã«å€æã§ããããã§ãã
- ãœãŒã¹ ãã¡ã€ã«ã¯æ¯å¹ ã«ãã£ãŠæ£èŠåãããŠãããšä»®å®ããŸããããã«ãããçµæãå®å®ããŸãã
èªã¿åãã¢ã«ãŽãªãºã ã¯æ¬¡ã®ããã«ãªããŸãã
- ãã¡ã€ã«ãã¡ã¢ãªã«èªã¿èŸŒã¿ãåæã«ãµã³ãã«åœ¢åŒã 8 ãããã«å€æããŸãã
- ãªãŒãã£ãª ããŒã¿å ã®æåã®ãã«ã¹ã®äœçœ®ãç¹å®ããŸãã ãããè¡ãã«ã¯ãæ倧æ¯å¹ ãæã€ãµã³ãã«ã®æ°ãèšç®ããå¿ èŠããããŸãã ç°¡åã«ããããã«ãäžåºŠæåã§èšç®ããŸãã ãããå€æ° prev_pos ã«ä¿åããŸãããã
- æåŸã®ãã«ã¹ã®äœçœ®ã« 48 ãå ç®ããŸã (pos := prev_pos + 48)
- äœçœ®ã 48 å¢ãããŠã次ã®åºæºãã«ã¹ã®äœçœ®ã«å°éã§ãããšã¯éããªããã (ããŒãã®æ¬ é¥ãããŒã ãã©ã€ã ã¡ã«ããºã ã®äžå®å®ãªåäœãªã©)ãpos ãã«ã¹ã®äœçœ®ã調æŽããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãå°ããªããŒã¿ (pos-8;pos+8) ãååŸãããã®ããŒã¿ã®æ倧æ¯å¹ å€ãèŠã€ããŸãã æ倧å€ã«å¯Ÿå¿ããäœçœ®ã pos ã«ä¿åãããŸãã ããã§ã8 = 48/6 ã¯å®éšçã«åŸãããå®æ°ã§ãããããã«ããæ£ããæ倧å€ã決å®ãããè¿ãã«ããä»ã®ã€ã³ãã«ã¹ã«åœ±é¿ãäžããªãããšãä¿èšŒãããŸãã éåžžã«æªãã±ãŒã¹ãšããŠããã«ã¹éã®è·é¢ã 48 ããã¯ããã«å°ããã倧ããå Žåããã«ã¹ã®åŒ·å¶æ€çŽ¢ãå®è£ ãããå¯èœæ§ããããŸããããã®èšäºã®ç¯å²å ã§ãããã«ã€ããŠã¯ã¢ã«ãŽãªãºã ã§èª¬æããŸããã
- åã®ã¹ãããã§ãåºæºãã«ã¹ãèŠã€ãã£ããã©ããã確èªããããšãå¿ èŠã§ãã ã€ãŸããåã«æ倧å€ãæ¢ãã ãã§ã¯ããã®ã»ã°ã¡ã³ãã«ã€ã³ãã«ã¹ãååšããããšã¯ä¿èšŒãããŸããã ç§ã®ææ°ã®èªã¿åãããã°ã©ã ã®å®è£ ã§ã¯ãã»ã°ã¡ã³ãã®æ倧æ¯å¹ å€ãšæå°æ¯å¹ å€ã®å·®ããã§ãã¯ãããããç¹å®ã®å¶éãè¶ ããå Žåã«ã€ã³ãã«ã¹ã®ååšãã«ãŠã³ãããŸãã åé¡ã¯ãåºæºãã«ã¹ãèŠã€ãããªãå Žåã«ã©ãããããšããããšã§ããããŸãã ãªãã·ã§ã³ã¯ 2 ã€ãããŸããããŒã¿ãçµäºããŠæ²é»ãç¶ããããããèªã¿åããšã©ãŒãšèŠãªããã®ã©ã¡ããã§ãã ãã ããã¢ã«ãŽãªãºã ãåçŽåããããã«ãããçç¥ããŸãã
- 次ã®ã¹ãããã§ã¯ãããŒã¿ ãã«ã¹ (ããã 0 ãŸã㯠1) ã®ååšãå€æããå¿ èŠããããŸãããã®ããã«ãã»ã°ã¡ã³ãã®äžå€® (prev_pos;pos) middle_pos ããmiddle_pos := (prev_pos+pos)/2 ã«çãããšããŸããã»ã°ã¡ã³ãäžã® middle_pos ã®è¿å (middle_pos-8;middle_pos +8) ã§ãæ倧æ¯å¹ ãšæå°æ¯å¹ ãèšç®ããŠã¿ãŸãããã ãããã®å·®ã 10 ãè¶ ããå Žåã¯ãããã 1 ãçµæã«æžã蟌ã¿ããã以å€ã®å Žå㯠0 ãæžã蟌ã¿ãŸãã10 ã¯å®éšçã«åŸãããå®æ°ã§ãã
- çŸåšäœçœ®ã prev_pos ã«ä¿åããŸã (prev_pos := pos)
- ãã¡ã€ã«å šäœãèªã¿åããŸã§ã¹ããã 3 ããç¹°ãè¿ããŸãã
- çµæã®ãããé åã¯ãã€ãã®ã»ãããšããŠä¿åããå¿ èŠããããŸãã èªã¿åãæã«åæãã€ããèæ ®ããŠããªãããããããæ°ã¯ 8 ã®åæ°ã§ã¯ãªãå¯èœæ§ããããå¿ èŠãªããã ãªãã»ãããäžæã§ãã ãã®ã¢ã«ãŽãªãºã ã®æåã®å®è£ ã§ã¯ãåæãã€ãã®ååšãç¥ããªãã£ããããåã«ç°ãªããªãã»ãã ãããæ°ã§ 8 ã€ã®ãã¡ã€ã«ãä¿åããŸããã ãã®ãã¡ã® 5 ã€ã«æ£ããããŒã¿ãå«ãŸããŠããŸããã æåŸã®ã¢ã«ãŽãªãºã ã§ã¯ãAXNUMXh ãŸã§ã®ãã¹ãŠã®ããããåçŽã«åé€ããã ãã§ãæ£ããåºåãã¡ã€ã«ãããã«ååŸã§ããããã«ãªããŸãã
Ruby ã®ã¢ã«ãŽãªãºã ãèå³ã®ããæ¹åã
ããã°ã©ã ãæžãèšèªãšã㊠Ruby ãéžãã ã®ã¯âŠ ã»ãšãã©ã®å Žåãããã䜿ã£ãŠããã°ã©ã ãäœæããŸãã ãã®ãªãã·ã§ã³ã¯é«æ§èœã§ã¯ãããŸããããèªã¿åãé床ãã§ããã ãéããããšããã¿ã¹ã¯ã«ã¯ããã ãã®äŸ¡å€ã¯ãããŸããã
# ÐÑпПлÑзÑеЌ gem 'wavefile'
require 'wavefile'
reader = WaveFile::Reader.new('input.wav')
samples = []
format = WaveFile::Format.new(:mono, :pcm_8, 44100)
# ЧОÑаеЌ WAV Ñайл, кПМвеÑÑОÑÑеЌ в ÑПÑÐŒÐ°Ñ Mono, 8 bit
# ÐаÑÑОв samples бÑÐŽÐµÑ ÑПÑÑПÑÑÑ ÐžÐ· Ð±Ð°Ð¹Ñ ÑП зМаÑеМОÑЌО 0-255
reader.each_buffer(10000) do |buffer|
samples += buffer.convert(format).samples
end
# ÐПзОÑÐžÑ Ð¿ÐµÑвПгП ОЌпÑлÑÑа (вЌеÑÑП 0)
prev_pos = 0
# РаÑÑÑПÑМОе ÐŒÐµÐ¶ÐŽÑ ÐžÐŒÐ¿ÑлÑÑаЌО
distance = 48
# ÐМаÑеМОе ÑаÑÑÑПÑÐœÐžÑ ÐŽÐ»Ñ ÐŸÐºÑеÑÑМПÑÑО пПОÑка лПкалÑМПгП ЌакÑОЌÑЌа
delta = (distance / 6).floor
# ÐОÑÑ Ð±ÑЎеЌ ÑПÑ
ÑаМÑÑÑ Ð² вОЎе ÑÑÑПкО Оз "0" О "1"
bits = ""
loop do
# РаÑÑÑОÑÑваеЌ пПзОÑÐžÑ ÑлеЎÑÑÑегП ОЌпÑлÑÑа
pos = prev_pos + distance
# ÐÑÑ
ПЎОЌ Оз ÑОкла еÑлО ЎаММÑе закПМÑОлОÑÑ
break if pos + delta >= samples.size
# ÐПÑÑекÑОÑÑеЌ пПзОÑÐžÑ pos ПбМаÑÑжеМОеЌ ЌакÑОЌÑЌа Ма ПÑÑезке [pos - delta;pos + delta]
(pos - delta..pos + delta).each { |p| pos = p if samples[p] > samples[pos] }
# ÐаÑ
ПЎОЌ ÑеÑÐµÐŽÐžÐœÑ ÐŸÑÑезка [prev_pos;pos]
middle_pos = ((prev_pos + pos) / 2).floor
# ÐеÑеЌ ПкÑеÑÑМПÑÑÑ Ð² ÑеÑеЎОМе
sample = samples[middle_pos - delta..middle_pos + delta]
# ÐпÑеЎелÑеЌ Ð±ÐžÑ ÐºÐ°Ðº "1" еÑлО ÑазМОÑа ÐŒÐµÐ¶ÐŽÑ ÐŒÐ°ÐºÑОЌалÑÐœÑÐŒ О ЌОМОЌалÑÐœÑÐŒ зМаÑеМОеЌ Ма ПÑÑезке пÑевÑÑÐ°ÐµÑ 10
bit = sample.max - sample.min > 10
bits += bit ? "1" : "0"
end
# ÐпÑеЎелÑеЌ ÑОМÑ
ÑП-Ð±Ð°Ð¹Ñ Ðž заЌеМÑеЌ вÑе пÑеЎÑеÑÑвÑÑÑОе бОÑÑ ÐœÐ° 256 Ð±ÐžÑ ÐœÑлей (ÑПглаÑМП ÑпеÑОÑОкаÑОО ÑПÑЌаÑа)
bits.gsub! /^[01]*?10100101/, ("0" * 256) + "10100101"
# СПÑ
ÑаМÑеЌ вÑÑ
ПЎМПй Ñайл, ÑпакПвÑÐ²Ð°Ñ Ð±ÐžÑÑ Ð² байÑÑ
File.write "output.cas", [bits].pack("B*")
çµæ
ã¢ã«ãŽãªãºã ãšå®æ°ã®ããã€ãã®ããªãšãŒã·ã§ã³ãè©Šããçµæãéåžžã«èå³æ·±ããã®ãåŸãããšãã§ããã®ã¯å¹žéã§ããã
ãããã£ãŠãæååããå€æãããšãã°ã©ããããããããããã°ã©ã ãã§ããŸããã ãã ããçªçµæ¬æã«ã¯ããŒã¯ãŒãããããŸããã ãã¹ãŠã®ããŒã¯ãŒãã¯ãã€ããšããŠãšã³ã³ãŒããããŸã (åå€ > 80h)ã 次ã«ã80 幎代ã®ã©ã®ã³ã³ãã¥ãŒã¿ããã®åœ¢åŒã§ããã°ã©ã ãä¿åã§ãããã調ã¹ãå¿
èŠããããŸãã
å®éããã㯠BASIC ããã°ã©ã ã«éåžžã«äŒŒãŠããŸãã ZX Spectrum ã³ã³ãã¥ãŒã¿ãŒã¯ãããã°ã©ã ãã»ãŒåã圢åŒã§ã¡ã¢ãªã«ä¿åããããã°ã©ã ãããŒãã«ä¿åããŸãã 念ã®ããããŒã¯ãŒãã調ã¹ãŠã¿ãŸãã
ãŸããåœæ人æ°ã®ãã£ã AtariãCommodore 64ããã®ä»ããã€ãã®ã³ã³ãã¥ãŒã¿ãŒã® BASIC ããŒã¯ãŒãããã§ãã¯ããããã¥ã¡ã³ããèŠã€ããããšãã§ããŸããããæåããŸããã§ãããã¬ãã ã³ã³ãã¥ãŒã¿ãŒã®çš®é¡ã«é¢ããç§ã®ç¥èã¯ããã»ã©åºããªãããšãå€æããŸããã
ããããç§ã¯è¡ãããšã«ããŸãã
ã³ã³ãã¥ãŒã¿ãŒã¿ã³ãã£/ã©ãžãªã·ã£ã㯠TRS-80
èšäºã®åé ã§äŸãšããŠæããåé¡ã®é³å£°é²é³ã¯ã次ã®ãããªã³ã³ãã¥ãŒã¿ã§äœæãããå¯èœæ§ãéåžžã«é«ãã§ãã
ãã®ã³ã³ãã¥ãŒã¿ãŒãšãã®çš®é¡ (ã¢ãã« I/ã¢ãã« III/ã¢ãã« IV ãªã©) ã¯ããã€ãŠéåžžã«äººæ°ããã£ãããšãããããŸãã (ãã¡ãããã·ã¢ã§ã¯ãããŸãã)ã 圌ãã䜿çšããããã»ããµãZ80ã§ããããšã¯æ³šç®ã«å€ããŸãã ãã®ã³ã³ãã¥ãŒã¿ã«ã€ããŠã¯ãã€ã³ã¿ãŒãããã§èŠã€ããããšãã§ããŸã
ãšãã¥ã¬ãŒã¿ãããŠã³ããŒãããŸãã
ç§ãèŠã€ããŸãã
CAS ãã¡ã€ã«åœ¢åŒ (åæãã€ããååšããããããŒãé€ããŠãæ¢ã«æå ã«ãã£ãããŒãããã®ããŒã¿ãå°ããã€ã³ããŒãããã®ã§ããããšãå€æ) ãç解ããåŸã次ã®ãã¡ã€ã«ãäœæããŸãããããã°ã©ã ã«ããã€ãã®å€æŽãå ããããšã§ããšãã¥ã¬ãŒã¿ (TRS-80 ã¢ãã« III) ã§åäœããæ£åžžã«åäœãã CAS ãã¡ã€ã«ãåºåããããšãã§ããŸããã
æåã®ãã«ã¹ãšåºæºãââã«ã¹éã®è·é¢ãèªå決å®ããå€æãŠãŒãã£ãªãã£ã®ææ°ããŒãžã§ã³ã GEM ããã±ãŒãžãšããŠèšèšããŸããããœãŒã¹ ã³ãŒãã¯æ¬¡ã®å Žæã§å
¥æã§ããŸãã
ãŸãšã
ç§ãã¡ãæ©ãã§ããéã¯ãéå»ãžã®é åçãªæ ãšãªããŸãããæçµçã«çããèŠã€ããããããšãå¬ããæããŸãã ãšããããç§ã¯:
- ZX Spectrumã§ããŒã¿ãä¿åãããã©ãŒããããèãåºãããªãŒãã£ãªã«ã»ããããããŒã¿ãä¿å/èªã¿åºãããã®å èµROMã«ãŒãã³ãç 究ããŸããã
- ç§ã¯ TRS-80 ã³ã³ãã¥ãŒã¿ãšãã®çš®é¡ã«ã€ããŠç¥ãããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãç 究ãããµã³ãã« ããã°ã©ã ã調ã¹ããã·ã³ ã³ãŒãã§ãããã°ãè¡ãæ©äŒããåŸãŸãã (çµå±ã®ãšãããZ80 ããŒã¢ããã¯ã¯ãã¹ãŠç§ã«éŠŽæã¿ããããŸãã)ã
- ãªãŒãã£ãªé²é³ã CAS 圢åŒã«å€æããããã®æ¬æ ŒçãªãŠãŒãã£ãªãã£ãäœæããŸãããããã«ããããå ¬åŒããŠãŒãã£ãªãã£ã§ã¯èªèãããªãããŒã¿ãèªã¿åãããšãã§ããŸã
åºæïŒ habr.com