If statement gbz80-IF语句

If statement gbz80-IF语句,if-statement,machine-code,gameboy,If Statement,Machine Code,Gameboy,我正在VisualboyAdvance上用Z80进行编码,我不知道如何做任何形式的IF语句 我制作了一个脚本,从0xC3A0开始增加屏幕上每个磁贴的值。屏幕数据在0xC507结束 我的代码如下: d322|21A0C3|LD HL,C3A0h d325|34 |INC (HL) d326|23 |INC HL d327|00 |NOP . . . d340|00 |NOP d341|C325D3|JP

我正在VisualboyAdvance上用Z80进行编码,我不知道如何做任何形式的IF语句

我制作了一个脚本,从0xC3A0开始增加屏幕上每个磁贴的值。屏幕数据在0xC507结束

我的代码如下:

    d322|21A0C3|LD HL,C3A0h
    d325|34    |INC (HL)
    d326|23    |INC HL
    d327|00    |NOP
    .
    .
    .
    d340|00    |NOP
    d341|C325D3|JP D325h
正如您所见,它不断循环,最终通过增加核心函数使游戏崩溃。我想有一种方法使它在HL达到0xC507时使用0xC9(Ret)

任何帮助都将不胜感激


如果你能向我解释你提供的陈述是如何起作用的,那就太好了。机器代码对我来说是陌生的。

请勿使用Visual Boy Advance

其Game Boy仿真精度非常差,尤其是内存访问定时,这是许多商用ROM的一个大问题:

它还存在许多安全漏洞。堆栈缓冲区溢出,使攻击者能够控制您的计算机。以下是其中之一:

根据您的调试需要使用BGB,它具有一个优秀的调试器,其准确性非常好

退出循环的条件必须在跳转指令上完成,如下所示:

01 67 01         ld   bc,0167            ;0xC507 - 0xC3A0
21 A0 C3         ld   hl,C3A0            ;start of the area we wish to increment
:loop_start
34               inc (hl)                ;(hl) ++
23               inc hl                  ;hl ++
0B               dec  bc                 ;bc --
78               ld   a,b
B1               or   c
20 F9            jr   nz,[loop_start]    ;if(bc ≠ 0), loop to :loop_start
...