同样是之前那个帖子的第一个问题涉及到的一个ROM(80KB改过地图有2代元素),它用的是一个比较基础的切bank方式,Mapper1。在我比较详细了解Mapper后,我发现Mapper1可能是切bank最谜的一个方式:
1.我自己把这个硬重置输入数据到SRAM的程序复制到了我自己的hack里,发现在一开始,程序是从$0000开始执行的,即读取到了一个BRK,跳转到了$FF00,执行输入程序。这是Mapper 1 的固定起始地址吗?如果在实际上执行,可能不能直接读到BRK,就会有问题吗?
2.Mapper 1中对$8000,$A000,$C000和$E000设置了只写寄存器,当中每个寄存器最多用到D4,D7-D5不会用到,但在程序的一开始就用了一个LDA #$80 STA $8000,并且删了就不能正常运行...难道我查阅的帖子不全?
3.对于输入到SRAM的8KB数据,是完全可以放在最后一个bank里,游戏中的$C000-$DFFF的,但是FCEUX可能会把3个PROM强制填充16KB的FF,导致游戏无法运行,这有什么解决方案吗...
以下是关于游戏本身的问题:
4.对于那个ROM和2代一类改版,都可以在城堡关过关结算时间,但我经过调试发现问题不简单:
(1)最终它们都会通过$8E16的默认跳转程序跳到减时间的程序,但是和一般拉旗过关的不同地址,程序相同;而那个ROM会有一个$D31D的子程序入口,后面的代码我就理解不能了,ASL还改成了NOP,很是迷惑...
(2)程序里有涉及到$0747,通过查阅Memory map,根本理解不了那个“master”是什么意思,就还是不知道这个内存地址是干嘛的...
1.我自己把这个硬重置输入数据到SRAM的程序复制到了我自己的hack里,发现在一开始,程序是从$0000开始执行的,即读取到了一个BRK,跳转到了$FF00,执行输入程序。这是Mapper 1 的固定起始地址吗?如果在实际上执行,可能不能直接读到BRK,就会有问题吗?
2.Mapper 1中对$8000,$A000,$C000和$E000设置了只写寄存器,当中每个寄存器最多用到D4,D7-D5不会用到,但在程序的一开始就用了一个LDA #$80 STA $8000,并且删了就不能正常运行...难道我查阅的帖子不全?
3.对于输入到SRAM的8KB数据,是完全可以放在最后一个bank里,游戏中的$C000-$DFFF的,但是FCEUX可能会把3个PROM强制填充16KB的FF,导致游戏无法运行,这有什么解决方案吗...
以下是关于游戏本身的问题:
4.对于那个ROM和2代一类改版,都可以在城堡关过关结算时间,但我经过调试发现问题不简单:
(1)最终它们都会通过$8E16的默认跳转程序跳到减时间的程序,但是和一般拉旗过关的不同地址,程序相同;而那个ROM会有一个$D31D的子程序入口,后面的代码我就理解不能了,ASL还改成了NOP,很是迷惑...
(2)程序里有涉及到$0747,通过查阅Memory map,根本理解不了那个“master”是什么意思,就还是不知道这个内存地址是干嘛的...