我正在制作一个Gameboy模拟器,我目前仍然坚持使用bootrom的这段代码:
0x00E0 – LD HL, $0x0104 # point to Nintendo Logo in cartridge
0x00E3 – LD DE, $0x00A8 # point to Nintendo Logo in boot ROM
0x00E6 – LD A, (DE) # load next byte to compare to
0x00E7 – INC DE # point to next byte
0x00E8 – CP (HL) # compare bytes
0x00E9 – JRNZ .+0xfe # jump to 0x00E9 if no match (lock up)
0x00EB – INC HL # point to next byte
0x00EC – LD A, L # …
0x00ED – CP $0x34 # test if end of comparison
0x00EF – JRNZ +.0xf5 # if not the end, jump back to 0x00E6
问题在于,通过将内存地址0x00ED
与内存地址L
进行比较,0x34
对它进行了测试。
内存地址0x34
等于0x11
,读取的最后一个字节位于内存地址133
,但增加HL
变为134
,因此L
等于34
,内存地址34
是问题所在的0x11
。它应该在那里结束但它早于0x110
结束,这使得L
等于0x10
并且等于0x11
。
所以我的问题是你怎么能解决这个问题。提前谢谢。