[FC][Trainer扩容方法]
时间:2016.10.2
作者:FlameCyclone
工具:Hxd_1.7.7.0;FCEUX_2.3.3;普通ROM一个
方法:
先引用《任天堂产品系统文件》
NES文件格式
.NES文件为模拟用来储存NES卡带的映像。下面是一个.NES文件的结构。
偏移 | 字节数 | 内容 |
0-3 | 4 | 字符串“NES^Z”用来识别.NES文件 |
4 | 1 | 16kB ROM的数目 |
5 | 1 | 8kB VROM的数目 |
6 | 1 | D0:1=垂直镜像,0=水平镜像 |
|
| D1:1=有电池记忆,SRAM地址$6000-$7FFF |
|
| D2:1=在$7000-$71FF有一个512字节的trainer |
|
| D3:1=4屏幕VRAM布局 |
|
| D4-D7:ROM Mapper的低4位 |
7 | 1 | D0-D3:保留,必须是0(准备作为副Mapper号^_^) |
|
| D4-D7:ROM Mapper的高4位 |
8-F | 8 | 保留,必须是0 |
16- | 16KxM | ROM段升序排列,如果存在trainer,它的512字节摆在ROM段之前 |
-EOF | 8KxN | VROM段, 升序排列 |
如上表,当ROM文件头第6个字节的D2位=1时,ROM有512字节的trainer放在ROM段之前,于是我想到在trainer上做修改,为ROM增加512字节空白空间,接下来看操作。
比方我们为洛克人4扩容,使用FCEUX打开后观察C000到FFFF,你会发现根本没有空间可以写其他东西,唯一的办法就是扩容。
使用Hxd打开洛克人4的ROM:
修改第06字节为44,将光标移动到地址0010再插入512字节:
保存文件,Trainer扩容到此完成。
用FCEUX打开ROM: 文件正常运行:
打开帮助->信息记录:
与源文件相比较,多了个‘有作弊’属性,其他与源文件没有丝毫差异。
然后打开调试->十六进制编辑器,跳转到地址7000:
地址7000-71FF就是之前在ROM程序段增加的512个空白字节。
为了验证是否能够作为扩容空间使用,接下来做一个按键修改测试:
查找到洛克人按键地址为0016,血量为B0,生命数为A1,然后做一个按选择键补满血量和生命数的修改。
打开调试->调试器:
添加0016的写断点:
程序暂停了:
打开Hxd:
写上如下程序:
95 14 94 16 48 A5 16 C9 20 D0 08 A9 09 85 A1 A9 9C 85 B0 68 60
将其覆盖插入到地址0010并保存文件:
删除当前目录下的模拟器进度后重新打开ROM:
再次查看地址7000:
内容已经变化了.
继续0016写断点:
添加C3B2的执行断点:
跳转到按键程序地址修改其跳转到7000:
取消断点:
单击运行测试游戏:
生命数剩余2:
先去受点伤:
再按选择键:
血量满了,按开始键看看生命数,同样,生命也满了:
保存ROM即可:
以上便是FC的Trainer扩容方法,教程到此结束。
转载请注明出处:
FlameCyclone.ys168.com