admin管理员组

文章数量:1568308

2024年7月26日发(作者:)

然后查找原来的切PRG程序,原来的为STA $8000 STY $A000机器码8D 00 80

8C 00 A0:

修改为JSR $FFE3机器码20 E3 FF:

接下来把原来的命名表镜像方式也改一下,查找STA $9000机器码8D 00 90:

一共找到2处,都改为STA $A000机器码8D 00 A0:

然后保存文件:

接下来用FCEUX打开rom:

发现是花屏,这当然了,到这里只完成了PRG和命名表镜像的转换,CHR还没有

转,所以是花屏.

接下来转CHR:

删除前面的断点,添加一个B000- EFFF的写断点:

结果如下:

这里写入B000-CFFF是将CHR映射到图形表的0000-0FFF,转换成mapper4的

上页1KB*4可以这样写:

LDA #$82

STA $8000

LDA $07F7

STA $8001

LDA #$83

STA $8000

LDA $07F8

STA $8001

LDA #$84

STA $8000

LDA $07F9

STA $8001

LDA #$85

STA $8000

LDA $07FA

STA $8001

编译后机器码为:

A9 82 8D 00 80 AD F7 07 8D 01 80 A9 83 8D 00 80 AD F8 07 8D 01 80 A9 84 8D

00 80 AD F9 07 8D 01 80 A9 85 8D 00 80 AD FA 07 8D 01 80 A9 80 8D 00 80 AD FB 07

8D 01 80

写入D000-EFFF是将CHR映射到图形表的1000-1FFF,转换成mapper4的上页

2KB*2可以这样写:

LDA #$80

STA $8000

LDA $07FB

STA $8001

LDA #$81

STA $8000

LDA $07FD

STA $8001

编译后机器码为:

A9 80 8D 00 80 AD FB 07 8D 01 80 A9 81 8D 00 80 AD FD 07 8D 01 80

然后把上面两段程序写上去覆盖原来的切CHR程序:

多出的未覆盖的用NOP覆盖:

由于这个游戏使用了SRAM,那么应该找个地方开启SRAM,鄙人测试后发现,

使用SRAM的程序

是在CHR切换之后才执行的,这里鄙人为了方便就把SRAM启用程序写在

CHR切换程序的后面吧,反正这里刚刚好有空间,开启SRAM的程序写法很简单,可

以这样写:

LDA #$80

STA $A001

编译后机器码为:

A9 80 8D 01 A0

把SRAM启用程序加上去:

然后保存文件:

然后取消原来的断点,单击运行:

发现标题显示正常了:

进入游戏,发现这里有个些地方是花屏:

这是什么原因呢?鄙人猜是某段程序调用CHR切换时不是从CHR切换程序开

始调用,而是CHR切换程序的某个部分,已知CHR程序是C212-C280:

添加一个C212-C280的执行断点:

结果发现有一处比较奇怪:

这里写入07FE的数据后跳转到C246,原来的C246是什么呢?

找个原版未转换的rom来看看就知道了:

这下子就知道C246是什么了,这里就是跳转到切换CHR的下页,由于鄙人刚

刚把原切CHR的程序修改成了mapper的切CHR程序,原来跳转的位置肯定不正

确,轻则花屏,重则死机,修改一下让其跳转到切下页的程序位置就行了,回到转换

mapper的这个rom的调试器,查看一下:

得知切换CHR下页的程序地址是C23E,回到十六进制编辑器,把跳转改成JMP

$C23E机器码4C 3E C2:

然后双击取消断点,单击运行:

之后运行效果如下:

用VirtuaNES_Plus_160123打开效果如下:

本文标签: 程序发现转换切换跳转