å 責äºé
åäŸã®é ã80幎代ã«çãŸããå€ãã®äººã ã®ããã«ãç§ã«ã¯Dendyãã¬ãã£ãã¯ã¹ããããŸããã è¯ãäžåœäººã«ãã£ãŠç§ãã¡ã«èŽãããæªåé«ãã¹ãã£ãŒããŒã«ãã£ãŠé åžãããæ¥æ¬ã®ãã¡ãã³ã³ã®ã¯ããŒã³ã¯ã80幎代ã®å€ãã®åäŸæ代ãæããè²ã§å¡ããŸããã äœåºŠããç§ããããŸã§åºãæããŠããã²ãŒã ã調ã¹ãŠãèãããããã¹ãŠã®ç§å¯ãèŠã€ããŸããïŒãããŠããã°ãã°ãç§å¯ãš100,500 + 1ã²ãŒã ãæž¡ãããšãã粟ç¥ã§æåãªã¿ã€ãã«ã®æ¬ããªãããã®äŸ¡å€ã¯ãŒãã§ããïŒãç§ã¯ãããããã¬ã€ãããã£ãã§ããŸããŸããããããæ°ããã¬ãã«ãæ°ããç§å¯ãæ°ããæ©äŒããããŸãã
äžéšã®ã²ãŒã ã«ã¯çµã¿èŸŒã¿ã®ã¬ãã«ãšãã£ã¿ãŒïŒããšãã°ãBattle CityãFire'n'Iceãå¥åSolomon's Key 2ïŒãçšæãããŠããŸãããããã¡ãããããã®ã»ãšãã©ã¯ãã®ãããªæ©äŒãæäŸããŠããŸããã§ããã ç§ã¯ïŒåœç¶ïŒïŒæ°ããã¹ãŒããŒããªãªãã©ã¶ãŒãºã§ãã¬ã€ãããã£ãïŒãããã©ã®ããã«ç§ã¯äžåœäººãæãæãã§ãããã圌ã¯99ãã9ã1ã«ãŒããªããžã§ãªãªãŒã¹ããã¬ãã«A-1ãB-1ã... Z-1ã¯äžå¯èœã§ããåæ Œããããå ã®ã¬ãã«ã®è€è£œã§ããããã¯ã¹ãã£ãå€æŽãããŸããïŒãDuck Tales 1ã2ãããã³ä»ã®å€ãã®ãã®ã
ã³ã³ãã¥ãŒã¿ãŒã®åºçŸãšã²ãŒã ã®ãšãã¥ã¬ãŒãã®å¯èœæ§ã«ãããç§ã®å€¢ã®ãã³ãã«ã®çµããã«å ãæãããåžæãç§ã®äžã«å¿ã³èŸŒã¿å§ããŸããã ããŸããŸãªã²ãŒã ãšãã£ã¿ãŒãç»å Žãå§ããŸãããROMãã¡ã€ã«ã瀺ãã ãã§ååã§ãã²ãŒã ã®ç§å¯ãšèœãšãç©Žããã¹ãŠèŠãããšãã§ããã ãã§ãªããç¬èªã®ãã®ãè¿œå ããããšãã§ããŸãã
äžæ¹ãäžéšã®ã²ãŒã ã®ç·šéè ã¯Googleã®æåã®ãªã³ã¯ã«ã»ãšãã©ãããŸããããä»ã®ç·šéè ã¯ã©ããé ãã«é ããŠããŸããïŒãããããŸã ããã«ããŸããïŒããŸãã¯ãŸã£ãããããŸããã§ããã ãæ°ã«å ¥ãã®ã²ãŒã ã®ã»ãšãã©ã®ãšãã£ã¿ãŒãèŠã€ããã®ã§ããã«ã·ã£çåã®ãšãã£ã¿ãŒãèŠã€ããããšãã§ããŸããã§ããã ã¯ããDOSããŒãžã§ã³çšã®ãšãã£ã¿ãŒãSNESçšã®ãšãã£ã¿ãŒããããŸãããç§èªèº«ã®NESããŒãžã§ã³ã«ã¯ãã®ãããªå®ç©ããããŸããã§ããã
NESãšãã®ãšãã¥ã¬ãŒã·ã§ã³ã«é¢ããããŸããŸãªçš®é¡ã®ãªãœãŒã¹ã¯ãç§ã®ç解ã«å±ããããšãããŸãæãã§ããããnoobã¬ãã«ã®ã©ããã«çãŸããŸããã
ãããŠããã€ãŠããã€ãŠãªãã»ã©æãæ¥æ²¡ã®1æéã§ãã¢ã¹ã¯ã¯ã§ãã«ããåŒã£åŒµããHEXãšãã£ã¿ãŒãšãããã¬ãŒã§ãšãã¥ã¬ãŒã¿ãŒãéããROMã«å«ãŸããŠããç¥ç§çãªãã€ãã»ããã調ã¹å§ããŸããã
ç§ã¯å§ããŸãã...ããããç§ãããã«è©±ãå§ããåã«ãç§ã¯æ³šæããŸãïŒ
å°é家ã®ããã«ã«ããã®äžã«è¡ãããšã¯æšå¥šãããŸããã åå¿è ã®ããã©ãã·ã¥ãæ¹æ³ãèæ ®ãããŠããŸãïŒ ããªãã®ç¥çµç³»ã¯äžå¯éçã«æå·ãåããå¯èœæ§ããããŸãïŒ èŠåããã
æ¬è³ªãæãäžãã
HEXãšãã£ã¿ãŒã§èšå®ããããã€ããšãåœæäžæã ã£ã6502ããã»ããµãŒåœä»€ã®ã»ãããèŠããšãæ²ããã£ãã§ãã ãã®å šäœåã¯äœãæ確ã«ããŸããã§ããã ããããç®ã¯æããŠãããæã¯ããŠããã äœã§ããããç 究ãå§ããŸãã
NESããããŒ
ãããè¡šé¢ã«ããæåã®ãã®ã§ãã 圌ããå§ããŸãããã
ããããŒã®ãµã€ãºã¯16ãã€ãã§ã眲åã«å ããŠãROMãã¡ã€ã«ã«é¢ããæè¡æ å ±ããããŸãã ROMãã¡ã€ã«èªäœã¯ã1ã€ã®ãã¡ã€ã«å ã®ããŒã¿ãšæè¡æ å ±ã®çµã¿åããã§ãã ããããŒã®å éšãèŠãŠãã ããã
4E 45 53 1A 08 00 21 00 00 00 00 00 00 00 00 00
4ãã€ãïŒçœ²åNES->;
1ãã€ãïŒ16 KB PRG-ROMãã³ã¯ã®æ°ã
1ãã€ãïŒ8 KB CHR-ROMãã³ã¯ã®æ°ã
2ãã€ãïŒãã©ã°ã
1ãã€ãïŒ8 kB PRG-R A Mãã³ã¯ã®æ°ã
2ãã€ãïŒãã©ã°ã
æ®ãã®ããŒã«ã¯ãŒãã§ãã
ãã©ã°ã«ã¯ããããªã¡ã¢ãªã®æäœã«é¢ããç¹å®ã®æ å ±ãå ã®ããŒããŠã§ã¢ã®ãããããªãŒãã®ååšãããããŒãããã³ãã®ä»ã®é¢å¿ã®ãªãæè¡æ å ±ãæ ŒçŽãããŸãïŒãã®ç¹å®ã®ã±ãŒã¹ã§ã¯å¿ èŠãªãããã説æããŸããïŒã
ããããŒãããããããŒïŒ2ïŒããããŒçªå·ãæã€ãã€ãã¯6åã®5ãã€ããš7ãã€ãã§æ§æãããŠããŸãïŒãš8 16 kB PRG-ROMãã³ã¯ãããããšãããããŸãã ä»ã®ãã¹ãŠãæ¬ èœããŠããŸãã
ããã¥ã¡ã³ããŒã·ã§ã³ãããPRG-ROMãã³ã¯ã¯å®éã«ã¯ã³ãŒã+ CPUã«ãã£ãŠçŽæ¥äœ¿çšãããä»»æã®ããŒã¿ã§ããããšãããããŸãã CHR-ROMãã³ã¯ã¯ããããªãµãã·ã¹ãã ïŒPPUïŒã®ããŒã¿ã§ãã CPUã¯ãããã«çŽæ¥æ¥ç¶ã§ããŸããã
åäžã®CHR-ROMããªãå Žåãã©ã®ããã«ããŠç»åãååŸããŸããïŒ éåžžã«ç°¡åïŒPRGã§ã¯ãPPUã¡ã¢ãªã«åžžã«ã³ããŒãããããŒã¿ãä¿åããŸãã äžäŸ¿ã§ããïŒ ã¯ã ãããããã®ããŒã¿ã«é¢ããŠã¯ãããæå³ã§ã¯ããã匷åã§ãã
ããã«ãMapperïŒ2ã¯å®éã«ã¯ãæ©èœã¯åãã§ãããæ§é ãç°ãªãè€æ°ã®ç°ãªãããããŒãæå³ããããšãããããŸããUNROMãšUOROMãUxROMã®ååã§çµåãããŠããŸãã éãã¯PRG-ROMãã³ã¯ã®æ°ã®ã¿ã§ããæåã¯8ãã³ã¯ã2çªç®ã¯-16ã§ãããããã®å ŽåããæåŸã®ãã³ã¯ã¯RAMã®æåŸã«åºå®ããïŒ$ C000- $ FFFFïŒãæ®ãã®7ïŒãŸãã¯2çªç®ã®å Žåã¯15ïŒãåãæ¿ããããšãã§ããŸã$ 8000- $ BFFFã®ã¡ã¢ãªé åã«ã
ããã¯ãã¹ãŠãçŸæç¹ã§ã¯è³¢æãªããšãäœãäŒããŠããªãæè¡æ å ±ã§ãã
猶詰ãè²·ãã ã
ãããã£ãŠãROMãã¡ã€ã«ã9ã€ã®ã³ã³ããŒãã³ãïŒããããŒãš8ã€ã®ãã³ã¯ïŒã«åå²ã§ããŸãã èŠåºããç·šéããŠãæå³ããããŸããã ãšãã¥ã¬ãŒã¿ããã°ã©ã ã®æ å ±ã¯ããã«ä¿åãããŠããŸãããéè¡ã®ç·šéæ¹æ³ã¯ããããŸããã 第äžã«ãéè¡ã«ã¯å³å¯ãªæ§é ããªãïŒããšãã°ãã³ãŒããšãªãœãŒã¹ãã»ã¯ã·ã§ã³ã«ããPE圢åŒã®ããã«ïŒãããŒã¿ãã³ãŒããšã©ã³ãã ã«æ··åšãããããšãã§ããŸãã ãã¶ããç§ãã¡ã¯ãŸã£ãã幞éã§ã¯ãªãã£ãããããããã¬ãã«ãæ§ç¯ããããã®ããŒã¿ã¯å®è¡å¯èœãªã³ãŒãã«ãã£ãŠåœ¢æãããŸãã
ããããç§ãã¡ã¯ãªãã·ã§ã³ãç解ããŸããããã€ããªããªããžå šäœããå¿ èŠãªãã®ãã©ã®ããã«ååŸããŸããïŒ
- æãè€éã§ããããæãæ®éçãªãã®ã§ããã·ãŒã±ã³ã·ã£ã«ãªããŒã¹ã³ãŒããããã¬ãŒã ãã®æ¹æ³ã䜿çšãããšãå¿ èŠãªãã®ã«ç¢ºå®ã«å°éããã³ãŒãã®äœææ¹æ³ã«é¢ããè¿œå æ å ±ã®åœ¢ã§ããŒãã¹ãåŸãããŸãã ãã€ãã¹é¢ã¯æããã§ããéã«å€ãã®æéãè²»ãããŸãããããã¯ããã»ã©æªãããšã§ã¯ãããŸããããŸã äœãç¥ããªããããã¢ã»ã³ãã©ãŒãšããŸããŸãªããã°ã©ãã³ã°ãããªãã¯ãã®ç 究ã«90ïŒ ã®æéãè²»ããããšã«ãªããŸãã ã€ãŸã å¹çã¯çŽ10ïŒ ã§ãã ååã§ã¯ãããŸããã
- RAMã調ã¹ãã¡ã¢ãªã«ã¢ã¯ã»ã¹ããããã®ãã¬ãŒã¯ãã€ã³ãããããã°ããŸãïŒä»¥äžãåç §ïŒã ãã®æ¹æ³ã¯ãã§ã«åªããŠããŸãã 調æ»ããã¡ã¢ãªã¯æ¯èŒçå°ãªãã64 KBã®äœ¿çšå¯èœãªã¡ã¢ãªã®ãã¡ãååã¯ROMãã¡ã€ã«ãããã³ã¯ã«ç§»åãããã®ååã¯IOããŒãã«ãã£ãŠäºçŽãŸãã¯äœ¿çšãããŠããŸãã ãããŠæåŸã«ãæ®ãã®ååã¯ãŸã ååã«åã£ãŠããŸãã ååã¯PPUã®IOããŒãã§ããïŒå€ãã¯ãããŸããããååã¯ãã©ãŒãªã³ã°ãããŠããŸãïŒããã1ã€ã¯2 kBã®4ã€ã®éšåã«åå²ãããŸãã æåã®éšåã¯ã³ãŒãã§äœ¿çšãããå®éã®RAMã§ãæ®ãã®3ã€ã¯æåã®éšåã®ãã©ãŒã§ãã ãããã£ãŠãåŠç¿çšã«2 kBã®ã¡ã¢ãªãæ®ã£ãŠãããããã¯ç§ã®ç®ã§çŽæ¥åŠç¿ã§ããŸãã ã¡ãœããã®å¹çã¯ããé«ãã§ãããªããªã ç®ã®åã«ã©ã€ãããŒã¿ããããå®è¡æã«å€æŽããŠçµæã確èªã§ããŸãã
- èªã¿åãããŒã¿ã®èª¿æ»ã å¥ã®ã¬ãã«ã«ç§»åãããšãããŸãã¯å¥ã®éšå±ã«ç§»åãããšãã«ãROMãã¡ã€ã«ããèªã¿åãããããŒã¿ã調ã¹ãŸãã æãåºãããã«ãããªã³ã¹ãªããã«ã·ã£ã§ã¯ãåã¬ãã«ã¯éšå±ã«åå²ããããã®éã§å®è¡ãããŸãã
- ãFlayerãã¡ãœããã¯ãBruteforceãã§ãã1ãã€ããé£ç¶çã«å€æŽããçµæã®ã¹ã¯ãªãŒã³ã·ã§ãããæ®ãããªãã¹ã¯ãªãŒã³ã·ã§ããã調æ»ããã®ãã説æããŸãã
å¿ èŠãªéã®ææãæºåãã調æ»ã«é²ã¿ãŸãã ç§ãã¡ã¯éã®é åºã§åŠç¿ããŸããåçŽãªãã®ããåŠç¿ãããã®ïŒã¹ã¯ãªãŒã³ã·ã§ãããèŠãã ãïŒããè€éãªãã®ïŒãããã¬ãŒã®ãªã¹ãã調ã¹ãïŒãŸã§ã§ãã
ããŒã«ã§æŠè£ ïŒ
- ãã«ããŒãŠãŒãã£ãªãã£ãäœæããããã®ãæ°ã«å ¥ãã®PLã ããã¯äœã§ãããŸããŸããã VS2010ã®äžéšãšããŠC ++ã䜿çšããŸããã
- ãããã¬ãŒãåãããšãã¥ã¬ãŒã¿ãŒã FCEUXãšãã¥ã¬ãŒã¿ãŒã®ããŸããŸãªãã©ã³ãã®ããŒãžã§ã³ã䜿çšããŸããã FCEUXããã³FCEUXDSPã æåã®ãã®ã«ã¯ãéåžžã«åçŽãªããšãè¡ãããšãã§ããåçŽãªäžåšçšãªãããã¬ãŒããããŸãã 2çªç®ã®ãã®ã«ã¯ãã¡ã¢ãªã®ãããã°ãšåŠç¿ã®ããã®éåžžã«åŒ·åãªããŒã«ããããŸãããæ®å¿µãªãããã°ãã°ã¯ã©ãã·ã¥ãããããåçŽãªã±ãŒã¹ã§ã¯æåã®ãã®ã«é ŒããŸããã
- ä»»æã®16é²ãšãã£ã¿ãŒã WinHEXã䜿çšããŸãããããã«ããããã¡ã€ã«ãä¿åããã«å®è¡ã§ããŸãïŒä»»æã®ãã€ããç·šéããŠCtrl + EãæŒããŸãïŒã
- ã³ãŒãã®ãã«ãã«ã€ããŠã¯ãNESããŒãããŒããŒã§IDAProã䜿çšã§ããŸãã cah4e3ããããŒãããŒããŒã䜿çšã§ããŸãã ãããã圌女ããå¥è·¡ãæåŸ
ããªãã§ãã ããããªããªã å®è¡äžã®éè¡ã¯åçã«å€æŽãããæ£ããã³ãŒãã¯æåŸã®éè¡ããã®ã¿ã«ãªããŸãã
å§ããåã«ãUxROMãšã¯äœããèŠãŠã¿ãŸãããã
äžè¬çã«èšãã°ãããããŒã¯ãšãã¥ã¬ãŒã¿ãŒã®èŠ³ç¹ããã¯ã¢ã«ãŽãªãºã ã§ãããéã®èŠ³ç¹ããã¯ã¡ã¢ãªãŒå ã®ãã³ã¯ã®åãæ¿ããåŠçããäžçš®ã®ã³ã³ãããŒã©ãŒã§ãã
æåïŒãªã圌ã¯ãããããŠããã®ã§ããïŒ
第äºã«ïŒåœŒã¯ã©ããã£ãŠãããããã®ã§ããïŒ
æåã®è³ªåãžã®çãã¯ç°¡åã§ãïŒããã»ããµãã¢ãã¬ã¹ã§ããRAMã¯å€ããªãã64 kBã ãã§ãã³ãŒããšããŒã¿ã ãã§ãªããå ¥å/åºåããŒãã ãã§ãªããä»ã®ãã®ïŒãããæ ŒçŽãããŠããäžæ®çºæ§ã¡ã¢ãªãªã©ïŒãããã·ã¥ããå¿ èŠããããŸãäžéšã®ã²ãŒã ã®äžéçµæïŒã ã³ãŒããå®è¡ãããšãã¡ã¢ãªå ã®ãã¹ãŠã®ããŒã¿ãäœæ¥ã«å¿ èŠãšãªãããã§ã¯ãªããããåçŽã«ãããé€å€ããŠãç¹å®ã®æç¹ã§ããéèŠãªå Žæã«é 眮ããããšãã§ããŸãã ROMã¡ã¢ãªã®é£ã«ãã³ã³ãããŒã©ãã«ãŒããªããžã«ã€ã³ã¹ããŒã«ãããŠãããã³ãã³ãã§ãã¢ãã¬ã¹ã¡ã¢ãªå ã®ç®çã®ããŒã¹ã衚瀺ããŸãã ã²ãŒã ã®è€éãã«å¿ããŠããããã®ã³ã³ãããŒã©ãŒã¯å å¡«éãç°ãªããŸããã äžæ¹ãäžåœäººã¯ãã®ããžãã¹ãæééãã«åŒãåããå€ãã®ç°ãªãïŒé©åãªãããã§ãªãïŒããããŒãæãä»ããŸããã ããã«ãããå€æ°ã®ãã«ãã²ãŒã ããããŸãã
2çªç®ã®è³ªåã§ã¯ãUxROMããããŒã®æäœã®ã¿ãèæ ®ããŸããæ®ãã¯ä»ã¯èå³ãåŒããã®ã§ã¯ãªãããã§ãã ããããŒã¯æåŸã®ãã³ã¯ïŒïŒ07ãŸãã¯ïŒ0FïŒãååŸããã¢ãã¬ã¹$ C000- $ FFFFã«é 眮ããŠããã以äžè§ŠããŸããã ä»ã®ãã¹ãŠã®ãã³ã¯ã¯ããã³ã¯çªå·ã®ã¹ããŒã¹$ C000- $ FFFFïŒïŒ00-ïŒ06ãŸãã¯ïŒ00-ïŒ0EïŒã®ä»»æã®ã¢ãã¬ã¹ã«èšé²ããåŸïŒäžè¬çãªå ŽåïŒãå¿ èŠã«å¿ããŠå«ãŸããŸãã ãã ããããã¯æ¬¡ã®ããã«æ£ããè¡ãããŸããã¢ãã¬ã¹$ FFF0 + Nã«ãNãæžã蟌ãŸããŸãïŒNã¯ãã³ã¯çªå·ïŒããã®çµæãã¢ãã¬ã¹$ 8000- $ BFFFã«ãç®çã®ãã³ã¯ã®å 容ã衚瀺ãããŸãã
ç¶ãwithã§åãå»ã¿ãŸãã ã¡ãœããçªå·4ã
ãããè¡ãããã«ã1ãã€ãïŒåçŽãªå¢åïŒãã€ã++ïŒãå€æŽããå¥ã®ãã¡ã€ã«ã«ä¿åãããšãã¥ã¬ãŒã¿ãŒã§åä¿¡ããROMãèµ·åããã¹ã¯ãªãŒã³ã·ã§ãããæ®ã£ãŠãšãã¥ã¬ãŒã¿ãŒãéããå°ããªãŠãŒãã£ãªãã£ãäœæããŸããã
ã¹ã¯ãªãŒã³ã·ã§ããã®æ°ãæžããã®ãè³¢æã§ãããªããªãã 130,000ãè¶ ããã¹ã¯ãªãŒã³ã·ã§ãããåŠç¿ããã«ã¯ã倧éæãªã¹ã¯ãªãŒã³ã·ã§ããã§ããå°é£ã§ãã
PRG-ROMãã³ã¯ããæã£ãŠããªãã®ã§ããããã®ããã€ãã¯ããããç§ãã¡ã«ãšã£ãŠèå³ã®ãªãã¿ã€ã«ãä¿åããŠããŸãã ããããé€å€ããããšããŸãã
ä»»æã®ã¿ã€ã«ãšãã£ã¿ãŒã䜿çšããŠããã®äžã®ROMãã¡ã€ã«ãéããŸãã ç§ã¯Tile Layer Proã䜿çšããŸãããããã¯éåžžã«å€ãããã°ã©ã ã§ããããã®ããžãã¹ãç¥ã£ãŠããŸãã ããã¯æ¬¡ã®ãããªãã®ã§ã ïŒã²ãŒã ã®ãã¡ã€ãã«ãã¡ã³ã¿ãžãŒã®ã¹ã¯ãªãŒã³ã·ã§ããã¿ã€ã«ïŒã ããã°ã©ã ãŠã£ã³ããŠã®ã¹ããŒã¿ã¹è¡ã¯ãåã¿ã€ã«ã®ãªãã»ããã瀺ããŸãã ããŒã¿ãŠã£ã³ããŠãã¹ã¯ããŒã«ããŠãã¿ã€ã«ãæããã«çµäºããã°ã©ãã£ãã¯ã¹ã®èŠ³ç¹ããã®ãã¬ããŒãžãããŒã¿ãå§ãŸããã€ã³ããŸã§ã¹ã¯ããŒã«ã§ããŸãã ã¹ã¯ããŒã«ãããšãæåã®2ã€ã®ãã³ã¯ãã°ã©ãã£ãã¯ã§ããããšãããããŸãã ããããã¹ããããã6ã€ã®éè¡ãæ®ããŸãã ãã§ã«ãå¯äžã96 kBã é£ããã§ãããããã§ãç°¡åã§ãã
ããã ãã®æ¹æ³ã§å¿ èŠãªããŒã¿ãã©ã®ããã«èŠã€ããããšãã§ããŸããïŒ éåžžã«ç°¡åã§ããã¹ã¯ãªãŒã³ã·ã§ãããäžç®èŠãã ãã§ãäžéšã®ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯ãéšå±ã®ãããã¯ãåŸã ã«å€æŽãããŸãã éšå±ã¯ãããã10x3ãããã¯ã§æ§æããã30åã®ã¹ã¯ãªãŒã³ã·ã§ãããé£ç¶ããŠããŸããé£æ¥ãããã¯ãä»ã®ãããã¯ã«å€æŽããå¿ èŠããããŸããããšãã°ããã³ã³ã¯ãªãŒãããããã¯ãåãªã©ã«äº€æã§ããŸãã
䞊ã¹æ¿ããŠãŒãã£ãªãã£ãå芳è ã®ã©ããã§éå§ããROMããèªã¿åã£ãããŒã¿ã®èª¿æ»ã«é²ã¿ãŸãã
猶ã®èãå äžã§åããŸãã ã¡ãœããçªå·3ã
ãã®æ¹æ³ã¯åã®æ¹æ³ãšäŒŒãŠããŸããã調æ»ããããŒã¿ã®éãå€§å¹ ã«åæžããŸãã ã©ããã£ãŠïŒ
FCEUXDSPã«ã¯ãèªã¿åã£ãããŒã¿ãé£æ¥ãããã¡ã€ã«ã«ä¿åããããŒã«ããããŸãã [éå§]ãã¿ã³ãš[äžæåæ¢]ãã¿ã³ãæŒãéãèªã¿åãããããŒã¿ã¯ãå ã®ãã¡ã€ã«ã«ä¿åãããŠããå Žæã®ãã¡ã€ã«ã«æ£ç¢ºã«é 眮ãããŸãã ãããã£ãŠãããŒã¿åºå®ãã€ã¢ãã°ãéãã[éå§]ãã¯ãªãã¯ããŠãããéšå±ããå¥ã®éšå±ã«ã²ãŒã ãå®è¡ãã[äžæåæ¢]ãæŒããŠãåã®æ®µèœãšåæ§ã«ãèšé²ãããããŒã¿ã調ã¹ãŸãã ãã®ããŒã¿ã¯å€§å¹ ã«å°ãªããªããŸãã å®éãã³ãŒãèªäœã¯ã泚æãã¹ãç¹ã瀺ããŠãããŸãã ãããŠã100ãã€ããŸãã¯2ãã€ãã®äœæ¥ãæŽçããã®ã¯æäœæ¥ã§ãããããŸããã
ããã«ã€ããŠã¯ãäžæåæ¢ãããããã³ã«è¡ããã³ãŒããŒãå ¥ããŠã6502ããã»ããµã®æ瀺ã«é¢ããããã¥ã¡ã³ããéãããšãææ¡ããŸãã
æ¹æ³çªå·2ã䜿çšããåã«ãæµãšç¥ãåãããšã¯å®³ã«ãªããŸããã
å 容ç©ã調ã¹ãããã«é¡åŸ®é¡ã眮ããŸãã æªéã¯æãããŠããã»ã©ã²ã©ããã®ã§ã¯ãããŸããã
6502ããã»ããµã«ã¯ã ææžåãããåœä»€ã56ãããããŸããã®ã§ãå°ãªããšã1æ¯ã®ã³ãŒããŒã§ååã«èª¬æã§ããŸãã
ã³ãŒããããã«ç解ããã®ã¯é£ããã®ã§ãåŠç¿çšã®ç°¡åãªCã©ã€ã¯ãªèšèªãæãã€ããã®ã§ãããã«ã¢ã»ã³ããªã·ãŒããç°¡åã«ç¿»èš³ã§ããŸãã
ãŸããããã¥ã¡ã³ãããããã€ãã®ãã€ã³ãã匷調ããŸãã
- ã¢ãã¬ã¹æå®ã«ã¯ãçŽæ¥ã¬ãžã¹ã¿<->ã¡ã¢ãªïŒIMMïŒã䜿çšã§ããŸãïŒLDA $ 00; STA $ 00;
- ã€ã³ããã¯ã¹ã¬ãžã¹ã¿ãçŽæ¥å«ãïŒã¬ãžã¹ã¿<->ã¡ã¢ãª+ã€ã³ããã¯ã¹ïŒLDA $ 0000ãX; STA $ 0000ãY;
- ã€ã³ããã¯ã¹ã¬ãžã¹ã¿ãå«ãéæ¥ïŒã¬ãžã¹ã¿<->ãã€ã³ã¿+ã€ã³ããã¯ã¹ïŒLDAïŒ$ 00ïŒãX; STAïŒ$ 00ïŒãY;
éæ¥ã¢ãã¬ã¹æå®ã§ã¯ãããã»ããµã¯2ã€ã®ã»ã«ïŒæåã®ã¡ã¢ãªããŒãž$ 00- $ FFå ïŒãã16ããããã€ã³ã¿ãŒãæœåºããã€ã³ããã¯ã¹ã¬ãžã¹ã¿ã®å€ãããã«è¿œå ããååŸããã¢ãã¬ã¹ã®ã»ã«ãæäœããŸãã
ããããã次ã®æ¬äŒŒã³ãŒãèŠåãäœæããŸãã
- å€æ°ã$ XXXXïŒXXXXã¯ãã®ã¢ãã¬ã¹ïŒãšããŠç€ºããŸãã
- çŽæ¥ã¢ãã¬ã¹æå®ã#XXXX [Y]ãšããŠç€ºããŸãïŒXXXXã¯ã¢ãã¬ã¹æå®å ã®ã¢ãã¬ã¹ã§ãïŒã ã¢ããã°ïŒ*ïŒïŒchar *ïŒïŒXXXX + YïŒïŒ= A;
- éæ¥ã¢ãã¬ã¹æå®ã¯ã$ XXXX [Y]ïŒCã®é åãšã®å®å šãªé¡äŒŒïŒãšããŠç€ºãããŸãã
- æã£ãŠããæé ã¯ãã¹ãŠåãã§ãïŒchar sub_XXXXïŒïŒ{}ã NESã«ã¯åŒæ°ãæž¡ãããã®èŠåããªããããåŒæ°ã¯ãããŸããã ååãšããŠãããŒã¿ã¯ã¬ãžã¹ã¿ãŸãã¯å€æ°ãä»ããŠéä¿¡ãããŸãã
- ã¬ãžã¹ã¿ã«ã¯å ã®ååïŒAãXãYïŒããããŸãã
- 8ãããã®æ°å€ã¯ãHEXã§#XXãšããŠèšè¿°ãããŸãã
ç°¡åãªéè¡åãæ¿ãã³ãŒããååŸããŸãã
$F2D3:84 41 STY $0041 = #$00 $F2D5:A8 TAY $F2D6:8D D1 06 STA $06D1 = #$06 $F2D9:99 F0 FF STA $FFF0,Y @ $FFF0 = #$00 $F2DC:A4 41 LDY $0041 = #$00 $F2DE:60 RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
è¡ããšã«ç¿»èš³ããŠã¿ãŸãããïŒ
char switch_bank() // A { $0041 = Y; // Y Y = A; $06D1 = A; // #FFF0[Y] = A; // $FFF0+N N ( N - ) Y = $0041; // Y return A; }
ããã§ã¯ããã£ãšè€éãªã³ãŒããèŠãŠã¿ãŸãããã
;; PPU $F302:20 D3 F2 JSR $F2D3 $F305:8E 06 20 STX $2006 = #$41 $F308:A9 00 LDA #$00 $F30A:8D 06 20 STA $2006 = #$41 $F30D:A2 10 LDX #$10 $F30F:A0 00 LDY #$00 $F311:B1 17 LDA ($17),Y @ $020E = #$03 $F313:8D 07 20 STA $2007 = #$00 $F316:C8 INY $F317:D0 F8 BNE $F311 $F319:E6 18 INC $0018 = #$02 $F31B:CA DEX $F31C:D0 F1 BNE $F30F $F31E:4C 10 D0 JMP $D010 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
翻蚳ã®æåã®æ®µéïŒ
char sub_F302() { sub_F2D3(); // switch bank. Bank counter in A register // $2006 â PPU Address register // $2007 â PPU data write // $2006 // ( , ) // 2007 // PPU. PPU // 1. $2006 = X; // $2006 = #00 // X = #10; label_F30F: Y = #00; label_F311: // $0017:$0018 // , , PPU $2007 = $0017[Y]; Y++; if ( Y != #00 ) goto label_F311; $0018++; X--; if ( X != #00 ) goto label_F30F; return sub_F2D3(#05); // 5- }
ãããŠã翻蚳ã®æçµæ®µéïŒ
void WriteDataIntoPPU(char Bank, char PPULine) { switch_bank(Bank); // switch bank. PPUADDRESS = PPULine; // PPUADDRESS = #00; // for(X = #10; X > 0; X--) { for(Y = #00; Y <= #FF; Y++) { PPUDATA = $Tiles[Y]; } $Tiles += #100; // } return switch_bank5(); }
2ã€ã®ç°¡åãªæé ã§ãèªã¿ã«ããïŒåå¿è åãïŒã¢ã»ã³ãã©ãŒãªã¹ããããããããã³ãŒãã«æžãçŽããŸããã switch_bank5ããã·ãŒãžã£ã¯èæ ®ããŸããã§ãããã¬ãžã¹ã¿Aã«çªå·ïŒ05ãå²ãåœãŠãããã®äžè¬çãªã³ãŒãããããsub_F2D3ãã³ã¯ã¹ã€ããã³ã°ããã·ãŒãžã£ãåŒã³åºãããŸãã ã³ãŒããèªã¿åãå¯èœãªã³ãŒãã«å€æãããšãã«èªååãéçºããã«ã¯ã3ã€ã®æé ãããã€ãè¡ãã ãã§ååã§ããã çŽ10ã5ã7 KBã®ããã¹ããã¡ã€ã«ãèç©ããåŸãã³ãŒãã翻蚳ããå¿ èŠããªããªããŸããããã¹ãŠãé ã®äžã§èªç¶ã«èµ·ããå§ããŸããã
ç§ãã¡ã¯è±æãšãã£ã³ãã£ãŒæéã«æž¡ããŸã
第2ç« ã§ã¯ãæåŸã®2ã€ã®æ¹æ³ã«ç²ŸéããNESã®ç¥ç§çãªäžçã«æ·±ãå ¥ã蟌ã¿ãŸãã æåŸã«ãæåã®3ã€ã®æ¹æ³ãçµã¿åãããããšã§ãå¿ èŠãªããŒã¿ãèŠã€ããããšãã§ããŸãã 4çªç®ã¯æãããªæ¬ ç¹ã®ããã«ç Žæ£ãããŸãã
ããªãããªãã¯ããã説æããŸãããïŒããšãã質åã®åºçŸãæ³å®ããŠãç§ã¯ããã«çããŸãïŒäž»é¡ã調ã¹ããšããçµæãäžããããšãã§ãããã¹ãŠã®æ¹æ³ã¯è¯ãã§ãã ç§ãã¡ã®å Žåããã®æ¹æ³ã¯ãã³ãŒãã®èéã«å ¥ããã«éãçªãåºããŠãã©ãã¯ããã¯ã¹ã調ã¹ãå Žåã«åœ¹ç«ã¡ãŸããããç¹ã«çµæãäžããŠãã ããã ãã®æ¹æ³ã«ã¯ããã«ãŒããã©ãŒã¹ã®æãããªå©ç¹ããããŸãã äœããã®æ¹æ³ã§ãç§ãã¡ã¯äœãã«ã€ãŸãããŸãã