将 HL 指向的数字或 A 中的数字转换为的奖励预例程。
这行得通,这只是裁剪前导零的问题。
ConvertNumberHLPoint::
ld a, [hl]
ConvertNumberA::
ld h, 0
ld l, a
ConvertNumberHL::
; Get the number in hl as text in de
ld bc, -10000
call .one
ld bc, -1000
call .one
ld bc, -100
call .one
ld bc, -10
call .one
ld c, -1
.one
ld a, "0"-1
.two
inc a
add hl, bc
jr c, .two
push bc;
push af;
ld a, b;
cpl;
ld b, a;
ld a, c;
cpl;
ld c, a;
inc bc;
call c, .carry;
pop af;
add hl, bc;
pop bc;
ld [de], a
inc de
ret
.carry;
dec bc;
ret;
如果在 LR35902 上存在 sbc hl, bc 这样的操作码,就像在 Z80 上一样,则可以用它替换以空白注释结尾的行;
--。相反,我们备份 bc 和 af,反转 bc 并递增它(二进制补码),然后,为了 SBC 指令中的进位功能,如果设置了进位,则再次递增它,然后取消备份 af,将 hl 添加到two 的补码 bc,最后取消备份 bc。