求助吧里研究过一代反汇编代码的大神啊
超级马里奥吧
全部回复
仅看楼主
level 1
册发哥 楼主
0000: 78 SEI 禁止中断
0001: D8 CLD 清除十进制运算标志D
0002: A9 40 LDA #$40 $40赋值给A
0004: 8D 00 20 STA $2000 A的内容赋值给地址$2000,为$40
0007: A2 FF LDX #$FF $FF赋值给X
0009: 9A TXS X的值给S,为$FF
000A: AD 02 20 LDA $2002 $2002中的数据$00给A
000D: 10 FB BPL $000A
判断A的高位,为1继续,为0转到$000A
这是超级马里奥第一代nes文件的反汇编,我加了点注释,有问题请轻喷。
根据我的理解,fc模拟器运行时,nes是加载到内存8000开始的地方。然后开始执行上述代码,可是我单帧运行fc模拟器,观察内存的变化,发现$2000地址处的数据始终为0,可是我感觉应该变为$40。
是不是我哪里理解有错误,请大神指教啊。
2012年11月27日 02点11分 1
level 12
@CYB_LAOCAO @jixun66 懂这个的太少了,我帮你叫两位
2012年11月27日 02点11分 2
2012年11月27日 02点11分
呵呵。谢了谢了,搞不懂就有种纠结的感觉。
2012年11月27日 03点11分
下次记得at上本人……(光速逃)
2012年11月27日 07点11分
e .....
2012年11月27日 07点11分
level 13
NES文件的运行并不总是从$8000运行的,而是根据ROM $800A-$800F(CPU $FFFA-$FFFF)决定。这里NMI(non maskable interrupt)是从$8082运行,而起始的init routine则是从$8000.
关于你的问题:$2000是PPU有关的地址,这个内存并不是“写入值就变化”的那种内存,所以不能用内存Watch工具来观察。似乎这个只能通过了解NES图像处理的知识来判断是什么。
有关知识:wiki
点nesdev点com/w/index点php/PPU_registers
2012年11月27日 07点11分 3
那个被百度囧掉的东西是: $FFFA一一$FFFF
2012年11月27日 08点11分
level 1
册发哥 楼主
谢谢各位了,我回去看看
2012年11月27日 08点11分 5
1