ç 究è ãå¿ èŠãšãããã®ã®ã»ãšãã©ã¯ããã§ã«ã²ãŒã ã®ãããã°ã«é©ããFCEUXãšãã¥ã¬ãŒã¿ãŒã«ãããŸãã ããã¥ã¡ã³ãã¯ãããã°ã»ã¯ã·ã§ã³ã培åºçã«ç 究ããå¿ èŠããããããããã®åããŒã«ã¯ç 究è ã«ãšã£ãŠæçšã§ãããããããäºãã«äœ¿çšããèœåã¯ããã«ãŒã®èœåãé«ããŸãã
ãã ããããã¥ã¡ã³ãã®å説æã¯è¡ããŸãããããšãã¥ã¬ãŒã¿ã®æ©èœãäžååã§æ°ããæ©èœãè¿œå ããå¿ èŠãããå ŽåããŸãã¯ã²ãŒã ã³ãŒãã®é·ãç 究ããã€ãã¹ããŠãROMãã¡ã€ã«ã§å¿ èŠãªãã®ãçŽæ¥èŠã€ããç°åžžãªæ¹æ³ãããå Žåã«çŠç¹ãåœãŠãŸãã
Luaã¹ã¯ãªããã®äœ¿çš
å®éã泚æãåŒãããã«å³ã«ç€ºãããŠããæåã®æ¹æ³ã¯ãã€ã³ã¿ããªã¿ãšãã¥ã¬ãŒã¿ã«çµã¿èŸŒãŸããLuaã¹ã¯ãªããã䜿çšããŠè£å©ããŒã«ãäœæããããšã§ãã
äžèšã®äŸã§ã¯ãã²ãŒã ã®ç 究ïŒããã³å¿ èŠã«å¿ããŠäžæ£è¡çºïŒã®ããã«ããšãã¥ã¬ãŒã¿ãŒã«ãã£ãŠæç»ãããç»åã®äžã«ç»é¢äžã«ç»åã衚瀺ãããªã©ããã®ã¹ã¯ãªããæ©èœã䜿çšãããŸã ã
ãããã£ãŠãç 究è ã¯éåžžã®ãã¬ãŒã€ãŒãã¢ã¯ã»ã¹ã§ããªããã®ã«æ°ä»ãããšãã§ããŸããããšãã°ãäžã®3ã€ã®é ããããã€ã€ã¢ã³ãã®ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯ããã¬ãŒã€ãŒã¯æåã®2ã€ã«ãããžã£ã³ãã§ããã3ã€ç®ãååŸããããšãããã®ååšãæšæž¬ããããšãã§ããŸããã ãDuck Tales 2ãã«ã¯ãäžè¬ã«ã²ãŒã ã¬ãã«ã®å€åŽã«ãããããªå®ç³ããããŸãã
ç»é¢ã«è¿œå ããŒã¿ã衚瀺ããã¹ã¯ãªããã®ãã1ã€ã®äŸã¯ãããžã£ã³ã°ã«ããã¯ãã®æãè¿ãå®ç³ãžã®ã³ã³ãã¹ã§ãã
åœç¶ãRAMãŸãã¯ROMã²ãŒã ããã®æ å ±ã®èŠèŠåã ããã¹ã¯ãªããã®å¯èœæ§ã§ã¯ãããŸããã
å¥ã®é »ç¹ã«äœ¿çšãããæ©èœã¯ãã²ãŒã ã³ãŒãã§äœãèµ·ãã£ãŠããããèšé²ããããšã§ããããšãã°ã 解åããããŒã¿ã解åããçŽåŸã«ãã³ãããã¹ã¯ãªãããã³ãã¬ãŒãã§ãïŒSMDã²ãŒã ã®å Žåãååã¯NESã«ãé©çšãããŸãïŒã
ããŠããšãã¥ã¬ãŒã¿ã«ãã§ã«å«ãŸããŠããTasEditorããŒã¹ãããŒã¯ãšãã£ã¿ãªã©ã Luaã¹ã¯ãªããã§æ¬æ ŒçãªãŠãŒãã£ãªãã£ãäœæããããšãçŠæ¢ãã人ã¯ããŸããã
ãŸããç§ã®æèŠã§ã¯ãã²ãŒã ãã¬ã€ãå€æŽããããã«ã²ãŒã ããŒã¿ãã¹ã¯ãªããã«ãã£ãŠå³åº§ã«ä¿®æ£ãããå Žåã ã¹ã¯ãªããå ã®ã²ãŒã ã³ãŒããéšåçã«æžãæãããšããèãã¯éå°è©äŸ¡ãããŠããŸãã ãNew Ghostbusters 2ãã®æµãä¿®æ£ãããã®ãããªã¹ã¯ãªããã®æŠå¿µå®èšŒïŒ
ãã ããç¹å®ã®ã²ãŒã ã®è€éãªåŠçãæ°ããããã¯ã¡ãœããã®äœæã«ã¯ã次ã®ã¡ãœããã®äœ¿çšãæ€èšãã䟡å€ããããŸãã
ãšãã¥ã¬ãŒã¿ãŒã®ãœãŒã¹ã³ãŒãã®å€æŽ
å®çžŸã®ãµããŒãã 3Dã¬ã³ããªã³ã° ã æ¹åãããã°ã©ãã£ãã¯ã¹ããšãã¥ã¬ãŒã¿ãŒã«è¿œå ãããªã©ãã²ãŒã ã®ç 究ã«é¢é£ããªãããŸããŸãªãããã¯ã«ã€ããŠæ³åããäœå°ããããŸãããèšäºã®ç¯å²å ã«çãŸãããã«ããŸãã
ãªããŒã¹ãšã³ãžãã¢ãªã³ã°ã®å¯èœæ§ãåäžãããããã«ãšãã¥ã¬ãŒã¿ãæ¡åŒµããæ¹åã®1ã€ã¯ã å¯èœãªéãå€ãã®å éšæ©èœãLuaã©ã€ãã©ãªã«æå ¥ããããšã§ãã ãµã€ã¯ã«ã®2çªç®ã®èšäºã§ã¯ ãæ°ããæ©èœã®ãã¢å šäœãã¹ã¯ããŒã«ããããšã§ããŠãããŒãµã«ïŒããããã²ãŒã ã®æ¢çŽ¢ã«é©ããïŒç 究ããŒã«ãäœæããæ¹æ³ãæ¢ã«ç€ºããŸããã
ãšãã¥ã¬ãŒã¿ã®ææ°ããŒãžã§ã³ã§ã¯ãŸã å©çšã§ããªãããã1ã€ã®åçŽã§äŸ¿å©ãªäŸã¯ãã¡ã¢ãªã¹ã¯ãªããããPPUãå€æŽããæ©èœã§ãã
ãšãã¥ã¬ãŒã¿ã®å€æŽã䜿çšããŠãç¹å®ã®ã²ãŒã çšã®ãšãã£ã¿ãåã蟌ã¿ããã®å Žã§å®è¡ããå ããããå€æŽã確èªããããšãã§ããŸãã
ã²ãŒã ã³ãŒãã®éçåæçšã¹ã¯ãªãã
å€æŽã®åã®2ã€ã®ã«ããŽãªã¯ãå®è¡äžã®ã²ãŒã ã®åçåæã«é¢ãããã®ã§ããã ãã ããã»ãšãã©ã®ç 究ã¯ãã²ãŒã ã®ROMãã¡ã€ã«ã®éçåæïŒãŸãã¯ããããã®ããŒã¿ã®ãã³ãïŒã§ãã
ãã®ã³ãŒãåæã®ã¡ã€ã³ããã°ã©ã ã¯ã IDA Interactive Disassemblerã§ãã ã¢ã»ã³ãã©6502ããµããŒãããŸãããnes圢åŒã®ãã¡ã€ã«ãæ£ããããŠã³ããŒã ããããã®ãã©ã°ã€ã³ãšãããŠã³ããŒããããã¡ã€ã«ãã³ãŒã ã³ãŒãã«å€æããã«ãŒãã³ã¢ã¯ã·ã§ã³ãèªååããã¹ã¯ãªããã»ããã®äž¡æ¹ãå¿ èŠã§ãã NESã²ãŒã ã®ç 究ã«åºæã®äžé£ã®ã¹ã¯ãªãããããã«ãŸãšããããŠããŸã ã
IDAã¹ã¯ãªããèªäœã¯ãçµã¿èŸŒã¿ã®idcãŸãã¯pythonã³ãã³ãèšèªã§èšè¿°ã§ããŸãããããã®å Žåããããã¹ããšãã£ã¿ãŒãšã¹ã¿ãã£ã§éãããšããå§ãããŸããã»ãšãã©ã®å Žåãããã¯ãIDAã¹ã¯ãªããã®æäœã«åœ¹ç«ã€IDAã³ãã³ãã®ç解ãšããã®ãããªã¹ã¯ãªããã®èšè¿°æ¹æ³ãåŠã¶ã®ã«åœ¹ç«ã¡ãŸãã ããã¯ããã€ãããã€ã³ã¿ãŒã«çµåããããããã€ãã®ã«ãŒã«ã«åŸã£ãŠé åãå²ãåœãŠãããããªã©ãåæ§ã®ã¢ã¯ã·ã§ã³ãæ°çŸåå®è¡ããå¿ èŠãããå Žåã«éåžžã«äŸ¿å©ã§ãã
ã²ãŒã ããŒã¿ã®éçåæããŒã«
IDAã¯ã³ãŒãåæã®ããã®åªããããŒã«ã§ãããããäžéšã®ã²ãŒã ç 究ã®é人ã¯ã²ãŒã ãç 究ãä¿®æ£ããã ãã§ååã§ãããšããèããã»ã©åªããŠããŸãã ãã ããã³ã³ãã€ã«ããã³ã¡ã³ãããããœãŒã¹ã«å解ãããã²ãŒã ã§ãã£ãŠããã¬ãã«ãã°ã©ãã£ãã¯ã«ãŒãããã£ã©ã¯ã¿ãŒã¢ãã¡ãŒã·ã§ã³ãªã©ã®ã²ãŒã ããŒã¿ãå€æŽããããšã¯å°é£ã§ãã æ®å¿µãªãããã²ãŒã ã®ããŒã¿åœ¢åŒã¯ãã°ãã°ã²ãŒã ããšã«å€§ããç°ãªããããã»ãšãã©ã®ã²ãŒã ã«é©ãããŠãããŒãµã«ããŒã«ãäœæããããšã¯éåžžã«å°é£ã§ãã
ã¿ã€ã«ããããšãã£ã¿ãŒ
ã°ã©ãã£ãã¯ãã³ã¯ãä¿åããããã®åœ¢åŒïŒã°ã©ãã£ãã¯ãä¿åããæäœã¬ãã«ïŒã¯ãã¹ãŠã®NESã²ãŒã ã®æšæºã§ãããããå€ãã®ã¿ã€ã«ããããšãã£ã¿ãŒããããŸããããã®äžã«ãã¢ããªã±ãŒã·ã§ã³ã§ãããã®ã¿ã€ã«ãã¬ã³ããªã³ã°ã§ããåäžã®ã©ã€ãã©ãªãèŠã€ãããŸããã§ããã
ãã®ãããªããã°ã©ã ã¯ãCHR-ROMïŒã°ã©ãã£ãã¯ã¹ã®ãã³ã¯å šäœïŒã®ååšäžã§ã²ãŒã ã®ã°ã©ãã£ãã¯ã¹ã¿ã€ã«ãç·šéã§ããŸãã ä»ã®ã²ãŒã ã§ã¯ãCHR-RAMã䜿çšãããŸã-ã¿ã€ã«ã®ãããªã¡ã¢ãªã¯ãããŒã¿ãšã³ãŒããšãšãã«ãã³ã¯ããéšåçã«èªã¿åããããããªã¡ã¢ãªã«ã³ããŒãããŸãïŒæã«ã¯éåžžã«é£ããæ¹æ³ã§ãããããŒã¿å§çž®ã«é¢ããèšäºã§èª¬æããæ¹ãè¯ãã§ãããïŒã
ããé«ãã¬ãã«ã§ã¯ãã²ãŒã ã¯ãã§ã«éåžžã«ç°ãªã£ãŠãããããäžè¬çãªç·šéããã°ã©ã ã¯ã»ãšãã©ãããŸãããåããšã³ãžã³ã§è€æ°ã®ã²ãŒã ãã«ããŒããæ倧ã®ãšãã£ã¿ãŒãããŸãã èšäºã®æåŸã«ããŠãããŒãµã«ã¬ãã«ã®ãšãã£ã¿ãŒãäœæããè©Šã¿ã«ã€ããŠèª¬æããŸãããã®éããããã®ã¢ã€ãã¢ãå®è£ ããã²ãŒã ããŠãŒãã£ãªãã£ã§ããŒã¿ãæ€çŽ¢ããæ¹æ³ã«ã€ããŠãããäžè¬çãªã¢ã€ãã¢ã玹ä»ããŸãã
å®è£ èšèªãšããŠãç§ã¯pythonã䜿çšããŸããããã¯ãããã€ãã®æšæž¬ããã°ããç°¡åã«ç¢ºèªã§ããããšãæã«ã¯ã€ã³ã¿ã©ã¯ãã£ãã¢ãŒãã§çŽæ¥ç¢ºèªããããšãã§ãããšããäºå®ã®ããã§ãã
Corrapt ROM
å®éããã®ã¢ã€ãã¢ã¯ãµã€ã¯ã«ã®2çªç®ã®èšäºã§ãã -ROMã§1ãã€ããå€æŽããããã®ãã¹ãŠã®å¯èœãªãªãã·ã§ã³ã䞊ã¹æ¿ããŠããããç»é¢ã«ã©ã®ããã«åœ±é¿ãããã確èªãããšãã²ãŒã ã®å éšæ§é ãæ確ã«ããã®ã«åœ¹ç«ã¡ãŸãã ãã®åŸãã²ãŒã ãšãã£ã¿ãŒã®ç°¡åãªããŒãžã§ã³ãäœæããããšãå¯èœã§ã-æåŸã«è¡ãããšãªããç»é¢ãæ§ç¯ããããããã¬ãã«ã®ãããã¯ç»åã®ã»ãããæºåãããããã®ç»åèªäœãROMããŒã¿ããã©ã®ããã«æ§ç¯ããããã®æ¹æ³ã§çºèŠããããããã®ç»åã®é åã衚瀺ããå¿ èŠããããŸã
ãããã¯æ€çŽ¢
å察åŽããè¡ãããšãã§ããŸãã
ç»é¢ã«è¡šç€ºãããèæ¯ã¯ãåºå®PPUã¢ãã¬ã¹ã®ãããªã¡ã¢ãªã¿ã€ã«ã®ã€ã³ããã¯ã¹ã®é åã«ãã£ãŠèšå®ãããŸããNESã«ã¯ãPPUèšå®ã«å¿ããŠããŸããŸãªæ¹æ³ã§è¡šç€ºã§ãã4ã€ã®ç»é¢ããããŸãã ç»é¢ã«äœã衚瀺ããããã¯åé¡ã§ã¯ãªããåæã®ããã«ããŒããããããŒãžãååŸããã ãã§ãã
æåã®ç»é¢ïŒååããŒãã«ïŒã¯ãPPUã¢ãã¬ã¹$ 2000- $ 23BFã«ãããŸãã FCEUXãšãã¥ã¬ãŒã¿ãŒã®å 容ã¯ã [ ãããã°]â[ååããŒãã«ãã¥ãŒã¢ãŒ]ãŠã£ã³ããŠã§è¡šç€ºã§ããŸãã
ãŸãããŠã£ã³ããŠDebugâHex EditorãViewâPPU Memoryã®ãã€ã圢åŒã§ãïŒã¢ãã¬ã¹$ 2000ã«ç§»åããŸãïŒã
ããã§ããããªã¡ã¢ãªå šäœããã³ãã§ããŸããããã¯ãåæã«åœ¹ç«ã¡ãŸãïŒ [ãã¡ã€ã«]â[ãã¡ã€ã«ã«ãã³ã]â[PPUã¡ã¢ãª] ïŒã
ããã¯ãå°ããª8x8ãã¯ã»ã«ã®ãããªã¡ã¢ãªã¿ã€ã«ã®960ã€ã³ããã¯ã¹ã®é åã§ãã åæã«ãå€æ°ã®ã²ãŒã ãéã«ãªã£ãåŸãã²ãŒã ç»é¢ã¯å€ãã®å Žåã16x16ãŸãã¯32x32ãã¯ã»ã«ãªã©ã®å€§ããªãããã¯ã§èšè¿°ãããããšãç¥ãããŠããŸãã ãããã£ãŠãç¹å®ã®ãããã¯ãµã€ãºãæ³å®ãããšïŒæåã¯æãæšæºçãªãã®-ã¹ã¯ãªãŒã³ã·ã§ããã§èµ€æ ã§åŒ·èª¿è¡šç€ºãããŠãã2x2ã¿ã€ã«ãè©ŠããŠã¿ãŸãïŒãç»é¢ã®ããŒã¿ãã»ã¯ã·ã§ã³ã«åå²ã§ããŸããåã»ã¯ã·ã§ã³ã«ã¯1ã€ã®ãããã¯ã®èª¬æãå«ãŸããŸãã
ããã«ãããç»é¢ã«ååšãããã¹ãŠã®ãããã¯ã®ãªã¹ãã衚瀺ãããŸãã ããã«ããã£ã©ã¯ã¿ãŒã¹ãã©ã€ãã«é¢ããæ å ±ãæããªãïŒã¹ãã©ã€ãã¯ç°ãªãæ¹æ³ã§æç»ãããïŒãããã¯ã®ãã¯ãªãŒã³ãªãèšè¿°ããããã¢ãã¡ãŒã·ã§ã³ãšã¯ç¡é¢ä¿ã§ãïŒã»ãšãã©ã®å Žåãèæ¯ã¢ãã¡ãŒã·ã§ã³ã¯ãã¬ãããŸãã¯ãããªã¡ã¢ãªèªäœã®å€æŽã䜿çšããŠè¡ãããååããŒãã«ã®ã¿ã€ã«çªå·ã¯å€æŽãããŸããïŒã ãã ãããããã¯çªå·ã¯ããããŸããã
ç»é¢ã«ã¯ãããã¯ã®èª¬æããããŸãããROMå ã®ãããã¯ã®é åºã¯ããããŸããã ããã«ããããããããããã¯ã®èšè¿°ãæ£ç¢ºã«ã©ãã«ããããããçšåºŠã®ç¢ºçã§æšæž¬ã§ããŸãã ãã®ã¢ã«ãŽãªãºã ã¯æ¬¡ã®ãšããã§ãã
1. ROMå šäœã調ã¹ããããã¯ãæ€åºããããã¹ãŠã®ã¢ãã¬ã¹ãããŒã¯ããŸããããã®çªå·ãç¶æããŸãïŒå®éã®çªå·ã¯ç°ãªãå Žåãããããããã¯éã®éãã®ã¿ã«æ³šæããããšãéèŠã§ãïŒã
2. ROMã§ãæãå€ãã®DIFFERENTãããã¯ãèŠã€ããé åãèŠã€ããŸãã ã»ãšãã©ã®å Žåãããã¯ãŸãã«ãããã¯ã®èª¬æã§ãã
https://gist.github.com/spiiin/500262e8d9da86f10a093bbb41833360
ãããã£ãŠãã²ãŒã å ã§2x2ã®ãããã¯ãé çªã«ä¿åããããšãã§ããŸãã
ããã¯ãã§ã«æªãããšã§ã¯ãããŸããããã¢ã«ãŽãªãºã ã®çµæãæ ¹æ¬çã«æ¹åããæ¹æ³ããããŸãã å®éãROMã«æ ŒçŽããåºæ¬çãªãããã¯ãµã€ãºãšæ¹æ³ã¯éãããŠããããããã¹ãŠã䞊ã¹æ¿ããããšãã§ããŸãã
ã¡ã€ã³ãããã¯ãµã€ãºïŒ2x2ã4x2ã2x4ãããã³4x4ã§ãããå¿ èŠã«å¿ããŠä»ã®ãµã€ãºãç°¡åã«è¿œå ã§ããŸãã
ããããROMã«æ ŒçŽããæ¹æ³ãå°ãè€éã«ããããšã§ããããã¯ãç·åœ¢é åãšæçåãããé åã®äž¡æ¹ã«æ ŒçŽã§ããŸãïŒ Structure of Arrays ãç¥ç§°SoAïŒã æåã«ããããã¯ã®æåã®éšåã®ã¿ã®é åãROMã«æ ŒçŽããããã®åŸã«æ¬¡ã®éšåã®é åãç¶ããŸãã ã»ãšãã©ã®å Žåããã®ãããªé åã¯æ¬¡ã ã«æ ŒçŽãããŸãããé åã®å é éã®ã®ã£ããã¯ãããã¯æ°ã«çãããªããŸãã ROMã§ãã®ãããªSoAã¢ã¬ã€ãèŠã€ããã«ã¯ããã¹ãŠã®ãªãã·ã§ã³ãåæããããšã§é·ãã調ã¹ãå¿ èŠããããŸãïŒå€ãã®å Žåãã²ãŒã ã¯ãããã256ãããã¯ã䜿çšããããããã®æ°ãããã§ãã¯ãéå§ããåŸã ã«æžããå¿ èŠããããŸãïŒã
ã²ãŒã ãç¹å®ã®ã¿ã€ãã®ãããã¯ã䜿çšãã確çã®ã¿ã«äŸåããŠãããããããã¯ããªãæ··ä¹±ããŠããããã«èŠããŸãããå®éã«ã¯ããŠãŒãã£ãªãã£ã¯ãã¹ããããã²ãŒã ã®80-90ïŒ ã§ãããã¯ãèŠã€ããŸãïŒ
https://github.com/spiiin/NesBlockFinder
ããã«ãéåžžãšã¯ç°ãªãæ§é ïŒéãããã¯ïŒã®ã²ãŒã ããã£ã«ã¿ãŒã§é€å€ããŠããã詳ãã調ã¹ãããšãã§ããŸãã
CDLãã¡ã€ã«ã®æ¯èŒ
ãšãã¥ã¬ãŒã¿FCEUXã¯ããšãã¥ã¬ãŒã·ã§ã³äžã«ãåãã€ããã³ãŒããšããŠè§£éãããã©ã®ãã€ããããŒã¿ãšããŠè§£éãããããèšé²ã§ããŸãïŒã¡ãã¥ãŒãããã°âã³ãŒã/ããŒã¿ãã¬ãŒ... ïŒã ãã®æ©èœã¯ããèªäœæçšã§ããããšãã¥ã¬ãŒã¿ã®ä»ã®ãããã°æ©èœãšç·å¯ã«çµ±åãããŠããŸãããã®ã¢ãŒãããªã³ã«ããŠãä»ã®ãããã°ãŠã£ã³ããŠãã©ã®ããã«å€åãããã確èªããŠãã ããã ãã ãããã®ç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠèª¬æããããšæããŸãã ãã®ãããªcdlãã¡ã€ã«ã2ã€ä¿åãããšã1ã€ã¯ã¹ã¿ãã£ã¢ã¯ã·ã§ã³ãå®è¡ãããåã«ããã1ã€ã¯å®äºçŽåŸã«ã2ã€ã®ãã®ãããªãã¡ã€ã«ã®éãã¯ã¢ã¯ã·ã§ã³äžã«äœ¿çšãããããŒã¿ïŒãŸãã¯ã³ãŒãïŒã®ã¿ã衚瀺ããŸãã é©åãªã«ãããªãã«ããã枬å®ãããã€ãã³ãéã®é©åãª2ã€ã®æç¹ãéžæããã ãã§å¿ èŠãªããŒã¿ãæ€çŽ¢ã§ããŸãã
ãã¡ã€ã«åœ¢åŒã¯ãæ¯èŒã¹ã¯ãªããã®ããã«éåžžã«åçŽã§ãããå€ãã®å©ç¹ãããããå¯èœæ§ããããŸãããã®äžã§ãéåžžãåå¥ã®ãããã°æ¹æ³è«ãæ§ç¯ã§ããŸãã
ã³ã³ãã¬ããµãŒ/ãã³ã³ãã¬ããµãŒ
ãã®ãããã¯ã¯2ã3段èœã§é瀺ããããšã¯ã§ããŸããããŸããNESã²ãŒã ã®ã¿ã®ã³ã³ããã¹ãã§ã¯ããŸãã«ãåçŽããããããå¥ã®èšäºã«å€ããŸãã
ãŠãããŒãµã«CadEditorã¬ãã«ãšãã£ã¿ãŒ
å®éããã®ããã°ã©ã ã¯æåã«ã²ãŒã ãChipïŒDaleãïŒ Cãããã¢ã³ãããŒã«ãšãã£ã¿ãŒ ïŒã®ã¬ãã«ã衚瀺ããããã«äœæããããã®åŸããªã¯ãšã¹ãã«å¿ããŠãšãã£ã¿ãŒã«åäœæãããæçµçã«ä»ã®Capcomã²ãŒã ïŒãDarkwing DuckãããDuckããã€ã«ãº1-2 "ã"ãã€ã«ã¹ãã³ "ã"ãªãã«ããŒã¡ã€ã "ïŒã
åŸã«ããããã®ã²ãŒã ã®ãããã¯ã¬ããªã³ã°ã®åçã¯ä»ã®å€ãã®ã²ãŒã ã®ã¬ãã«ãæŽçããæ¹æ³ãšéåžžã«äŒŒãŠããããšãå€æããŸããããæªéã¯è©³çŽ°ã«ãããŸã-åã²ãŒã ã®å°ããªéãã¯ããããã®æ§é ã®çµã¿åããã䜿çšããããã«ããšãã£ã¿ãŒã®å éšæ§é ãå¯èœãªéãæè»ã«èšè¿°ããããšãå¿ èŠãšããŸããšãã£ã¿ãŒèªäœã®ã«ãŒãã«ãå€æŽããã«ãæ¬æ¥æå³ãããŠããªãã£ãã²ãŒã ã®ã¬ãã«åœ¢åŒãèšè¿°ããŸãã
ãšãã£ã¿ãŒã®æ±çšæ§ãæäŸãããæ©èœã¯ãããããã²ãŒã èšå®ã§ãã ãããã¯ãç¹å®ã®ã²ãŒã ã®ããŒã¿ãããŒãããæ¹æ³ãèšè¿°ããCïŒèšèªã®ã¹ã¯ãªãããã¡ã€ã«ã§ãã ãªãæ£ç¢ºã«CïŒãªã®ãïŒ ãšãã£ã¿ãŒã¯æ¢ã«ãã®èšèªã§æžãããŠãããããã«ããã³ãŒããå€æŽããã«ã«ãŒãã«ããæ§æã«ç°¡åã«è»¢éã§ããŸãããããã¯Luaãªã©ã®ããå€å žçãªã¹ã¯ãªããèšèªã䜿çšããå Žåã«è¡ãå¿ èŠããããŸãã
åçŽãªèšå®ãã¡ã€ã«ã®ä»£ããã«æ¬æ Œçãªèšèªã䜿çšãããšãå¿ èŠãªè€éãã®ããŒã¿ãããŒãããã³ä¿åããããã®æ©èœãèšå®ã§èšè¿°ã§ããŸãã ã¹ã¯ãªããã¯éåžžã®ããã¹ããã¡ã€ã«ã§ãããå¿ èŠã«å¿ããŠãæ¢åã®æ§æããã³ãã¬ãŒããšããŠäœ¿çšããŠããšãã£ã¿ãŒãåã³ã³ãã€ã«ããã«ç¬èªã®æ§æãäœæã§ããŸãã ãšãã£ã¿ãŒã«ã¯60çš®é¡ã®ã²ãŒã ã®çŽ500åã®æ§æãå«ãŸããŠããŸãããã®ãã¡ã®çŽ100åã¯ãåå ããŠããªããšãã£ã¿ãŒã®ãŠãŒã¶ãŒã«ãã£ãŠäœæããããã®ã§ãã
ãã ããçŸæç¹ã§ã¯ããŠãããŒãµã«ãšãã£ã¿ãŒãäœæããããšããŠãããšãã£ã¿ãŒèªäœãå€æŽããªããšèª¬æã§ããªãã²ãŒã ãèŠã€ãããŸãïŒãã ããå€ãã®ã²ãŒã ã¯æ¢ã«ãã®æ¹æ³ã§è¿œå ã§ããŸãïŒã ãã®ãããªã²ãŒã ã«é¢ããæ å ±ãéåžžãšã¯ç°ãªãæ§é ã§åéããããã«ãç§ã¯ããå°ãé²ãã§ããšãã£ã¿ãŒèªäœãPythonã®ã©ã€ãã©ãªãŒãšããŠäœ¿çšããã²ãŒã ã«ãšãã£ã¿ãŒãè¿œå ããåã«ã²ãŒã ã®åœ¢åŒã調ã¹ãç¹å®ã®ã²ãŒã ã®ã¬ãã«ãæ§ç¯ããæ£ããç解ããã¹ããå§ããŸããã ãããJupyterããŒãããã¯ã®åœ¢åŒã§å®è£ ããŸãããããã¯ãã€ã³ã¿ã©ã¯ãã£ãã¢ãŒãã§ã®ã³ãŒãã®èšè¿°æ¹æ³ã䟿å©ã ããã§ãã
åºæ¬çãªã¿ã€ã«ãã倧ããªã²ãŒã æ§é ãã³ã³ãã€ã«ããçµæãšããŠã¬ãã«å šäœãçµã¿ç«ãŠãããšã¯ãæ°åã®ããŒã¹ã®ããºã«ãçµã¿ç«ãŠãããšã«äŒŒãŠãããæçµçã«åããŒã¹ããã®å Žæã«ãããšãã«åãåã³ãäžããŸãã
次ã®èšäºã§ã¯ããã®ãããªè±å¯ãªæè¡æ å ±ã¯åãäžããŸãããæšæºã¬ãã«ä»¥å€ã®æ§é ã§ã²ãŒã ã¬ãã«ãçµã¿ç«ãŠãããæšæºãããã¯ã¢ãŒããã¯ãã£ã®éåžžãšã¯ç°ãªãå€æŽãè¡ã£ããããäŸã玹ä»ããŸãã ãŸããã³ã¡ã³ãã§NESã®ã²ãŒã ã«ååãä»ããããšãã§ããŸãããã®ã¬ãã«åœ¢åŒã¯ããªãã«ãšã£ãŠèå³æ·±ããã®ã§ããããããç§ãããã調ã¹ãŸãã