qq244740700 发表于 2010-11-16 22:40:28

FC按键得到某效果的修改问题

今天我又看了shinwa大哥的《FC游戏按键得到某效果的修改教程》的教程,看完后也试着改一下,但很遗憾失败了,对我打击非常大,有点想不开的感觉。
我该的是Name=彩虹岛
         [小宝石全齐]ON=54F,FF
   我想改成按选择键小宝石全齐的效果,已知按键内存为00F7
   然后就将改成
   再然后改成
   最可耻的是最后竟然弹出这幅令我精神失常的图
   其实我早就知道不怎么能可能成功的了,因为我不明白shinwa博客里写的 48 C9 20 D0 05 A9 7F 8D 1E 04684C 7E FD 其中我不明白48 C9 D0 8D 68 4C这些机器码,有哪位会的教教小弟我,最好指出我上述修改有错的地方。万分感谢!!

疾风之狼 发表于 2010-11-16 23:01:52

从图片来看,你的4C C0 FF跳转地址好像写错了,应该写4C 00 FD。{:4_112:}

还有从图片来看键值好像是存放在寄存器Y,所以C9 20应修改为C0 20。

48 C9 20 D0 05 A9 7F 8D 1E 04684C 7E FD

机械码      机械码指令解释

48            PHA            A入栈(可以理解成保存寄存器A里的数据)

C9 20         CMP #$20对比寄存器A与20(20是SELECT的按键值)

D0 05         BNE #$05   如果不相等就跳过5个字节,相等的话继续运行,其实就是判断有没有按SELECT键.

A9 7F          LDA #$7F   把7F送入寄存器A(7F是体力满的时候的数值,这一段也可以理解成mov a,7fh)

8D 1E 04   STA $041e 把寄存器A的数据写入地址041e(这个时候寄存器A的数据是7F)

68               PLA             A出栈(还原寄存器A在保存的时候的数据)

4C 7E FD   JMP $fd7e跳转到地址fd7e,返回到原来的程序

他博客里不是有上面机械码指令解释么?

湘西小人物 发表于 2010-11-16 23:08:59

{:4_121:}图太小

克罗诺亚 发表于 2010-11-16 23:11:39

累加器进栈指令 PHA

   PHA是隐含寻址方式的单字节指令,操作码是 48

   功能是把累加器A的内容按堆栈指针S所指示的位置送入堆栈,然后堆栈指针减1

累加器出栈指令 PLA

   PLA是隐含寻址方式的单字节指令,操作码是 68

   功能是先让堆栈指针S+1,然后取加过1的S所指向的单元的内容,把它送累加器A

比较指令

CMP--累加器和存储器比较

CMP #$data C9 立即寻址

JMP--无条件转移指令

符号码格式 指令操作码 寻址方式
JMP$data16 4C 绝对寻址

2. 条件转移指令

BEQ $data16 F0 相对寻址 如果标志位Z=1则转移,否则继续
BNE $data16 D0 相对寻址 如果标志位Z=0则转移,否则继续
BCS $data16 B0 相对寻址 如果标志位C=1则转移,否则继续
BCC $data16 90 相对寻址 如果标志位C=0则转移,否则继续
BMI $data16 30 相对寻址 如果标志位N=1则转移,否则继续
BPL $data16 10 相对寻址 如果标志位N=0则转移,否则继续
BVS $data16 70 相对寻址 如果标志位V=1则转移,否则继续
BVC $data16 50 相对寻址 如果标志位V=0则转移,否则继续

STA--将累加器的内容送入存储器 A--M
STA $addr16 8D 绝对寻址

湘西小人物 发表于 2010-11-16 23:15:38

4# 克罗诺亚


看不懂{:4_106:}

克罗诺亚 发表于 2010-11-16 23:19:53

5# 湘西小人物


LS竟然隐身。{:4_114:}
BCS $data16 B0 相对寻址 如果标志位C=1则转移,否则继续
BCC $data16 90 相对寻址 如果标志位C=0则转移,否则继续

这两条也挺好用,比较大小的。

qq244740700 发表于 2010-11-17 17:55:33

感谢各位大哥 帮忙!!谢谢{:4_104:}

qq244740700 发表于 2010-11-17 20:52:50

2# 疾风之狼


修改成功!!谢谢狼大大
页: [1]
查看完整版本: FC按键得到某效果的修改问题