A9VG电玩部落论坛

 找回密码
 注册
搜索
12
返回列表 发新帖
楼主: ly63

[原创][HACK]FC/NES版《魂斗罗》日、美版无闪烁无敌 静态修改金手指与HACK ROM

[复制链接]

精华
0
帖子
62
威望
0 点
积分
62 点
种子
10 点
注册时间
2012-3-3
最后登录
2024-4-28
发表于 2012-4-19 07:04  ·  丹麦 | 显示全部楼层
本帖最后由 绫波贩子 于 2012-4-19 07:47 编辑
ly63 发表于 2012-4-18 02:58
RTS指令是不能乱用的,应该分析程序的走向,分析各种可能的分支,不是所有时候都能提前用RTS让程序返回的 ...


哦,这是不是说即使追到了子程序的跳转命令也不要急着把命令直接RTS掉。而是应该看一下子程序执行后是否回到主程序,以及对各个寄存器有没有影响等再决定要不要直接杀掉?这样的话如果子程序里含有多个条件跳转的话是不是得一条条往下追?

晚上按照上面的思路改了一下掉坑,用的是梦幻岛下的美版魂斗罗1(和ly63兄用的rom似乎不全一样)。一开始是想找第一关开始时跳下飞机那个子程序的入口,后来想了想每次死人后接续的人其实都是从天上掉下来,看来追这个比较容易。在00AE(半透明时间)处下写断点,死一个人后中断发生,向上翻页找到程序入口是$DAD1。

然后用63兄的方法找控制“死”的子程序,果然很快找到了,入口是$D54A,在这里下执行断点,然后跳次坑试一试,果然也发生了中断,看来掉坑死也调用了同一个子程序。

接下来就是找$D54A是从哪里跳转过来的了,这里我用了保险但是比较慢的方法——trace logger,设定logger输出到文本,在跳下坑的时候启动logger,触底死亡之后停止。用写字板打开文本查找“$D54A”,如下:

$D542:BD 1A 03  LDA $031A,X @ $031A = #$EA A:00 X:00 Y:00 P:nvUbdIZC
$D545:C9 E8     CMP #$E8                   A:EA X:00 Y:00 P:NvUbdIzC
$D547:B0 01     BCS $D54A                  A:EA X:00 Y:00 P:nvUbdIzC
$D54A:A9 52     LDA #$52                   A:EA X:00 Y:00 P:nvUbdIzC
$D54C:20 6B C1  JSR $C16B

可以看出$D547通过寄存器A和#$E8的大小比较结果条件跳转执行$D54A的子程序。如果一开始我投机一点的话,可以在$D54A下执行断点,中断后往上翻翻观察一下有没有跳转判断(其实就隔了一个字节 )。

然后我开始想如何让程序转去执行$DAD1,开头是想动$D547来着,后来发现BCS指令用的是相对寻址,只能找附近一百多字节距离内的地址,没法通过直接改地址跳转;要想换JMP类的绝对寻址的话两个字节又不够用。正苦恼着,突然想起来加上63兄的中枪不死的修改,其实$D54A是不会再用到了,于是把$D54A开始的 A9 50 20改为 4C D1 DA (JMP $DAD1),存盘退出。

第一关试验一下,掉坑里后倒是会从天上再跳下来,生命数也不减,但子弹就换成了初始的白豆。在AA(子弹代码)处下写断点,再掉一次坑触发中断。发现有一段初始化子弹的代码:
LDA #$00     A900
STA $AA       95AA
LDA #$00     A900
改成A9 13 95 AA A9 00,再跳沟出来后直接快散弹枪装备。

所用工具:FCEUXD SP 1.07,WINHEX 16.4

精华
0
帖子
478
威望
0 点
积分
629 点
种子
12 点
注册时间
2008-3-13
最后登录
2024-2-11
 楼主| 发表于 2012-4-19 20:59  ·  吉林 | 显示全部楼层
绫波贩子 发表于 2012-4-19 07:04
哦,这是不是说即使追到了子程序的跳转命令也不要急着把命令直接RTS掉。而是应该看一下子程序执行后是否 ...

呵呵,你还真执着啊,干的不错哦~

不过你的HACK还可以更优化一些,只要再改动一点点,就能实现掉沟后不丢失原有武器:

在$D54A处,再多向后跳转4字节就OK了,不必再改其它位置。

07:D54A:4C D5 DA    JMP $DAD5
...
...

该用户已被禁言

流放者(禁止发言)

♥ 正義聯盟 ♥

精华
1
帖子
40950
威望
2 点
积分
42917 点
种子
0 点
注册时间
2008-11-16
最后登录
2012-12-25
发表于 2012-4-19 21:18  ·  辽宁 | 显示全部楼层
   ly63兄 真是修改神人啊~~~

精华
0
帖子
62
威望
0 点
积分
62 点
种子
10 点
注册时间
2012-3-3
最后登录
2024-4-28
发表于 2012-4-19 21:24  ·  丹麦 | 显示全部楼层
ly63 发表于 2012-4-19 20:59
呵呵,你还真执着啊,干的不错哦~

不过你的HACK还可以更优化一些,只要再改动一点点,就能实现掉沟后不 ...

对啊,直接把清$AA的两个指令跳过去就可以了,脑筋又僵化了...

很久没有改rom了,主要是没人指点,总摸不到门道,翻来覆去总在NOP水平上...

63兄的讲解很详细,思路也很清楚,现在的论坛里遇到这样的高手很难得,所以抓紧机会多学两手:-)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|A9VG电玩部落 川公网安备 51019002005286号

GMT+8, 2024-5-1 16:21 , Processed in 0.146839 second(s), 12 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部