diff options
Diffstat (limited to 'engine/bcd.asm')
-rw-r--r-- | engine/bcd.asm | 62 |
1 files changed, 33 insertions, 29 deletions
diff --git a/engine/bcd.asm b/engine/bcd.asm index 2d0b43df..d84e504b 100644 --- a/engine/bcd.asm +++ b/engine/bcd.asm @@ -1,14 +1,17 @@ +; divide hMoney by hDivideBCDDivisor +; return output in hDivideBCDQuotient (same as hDivideBCDDivisor) +; used only to halve player money upon losing a fight DivideBCDPredef:: DivideBCDPredef2:: -DivideBCDPredef3:: +DivideBCDPredef3:: ; only used function DivideBCDPredef4:: call GetPredefRegisters DivideBCD:: xor a ld [hDivideBCDBuffer], a - ld [hDivideBCDBuffer+1], a - ld [hDivideBCDBuffer+2], a + ld [hDivideBCDBuffer + 1], a + ld [hDivideBCDBuffer + 2], a ld d, $1 .mulBy10Loop ; multiply the divisor by 10 until the leading digit is nonzero @@ -21,25 +24,26 @@ DivideBCD:: swap a and $f0 ld b, a - ld a, [hDivideBCDDivisor+1] + ld a, [hDivideBCDDivisor + 1] swap a - ld [hDivideBCDDivisor+1], a + ld [hDivideBCDDivisor + 1], a and $f or b ld [hDivideBCDDivisor], a - ld a, [hDivideBCDDivisor+1] + ld a, [hDivideBCDDivisor + 1] and $f0 ld b, a - ld a, [hDivideBCDDivisor+2] + ld a, [hDivideBCDDivisor + 2] swap a - ld [hDivideBCDDivisor+2], a + ld [hDivideBCDDivisor + 2], a and $f or b - ld [hDivideBCDDivisor+1], a - ld a, [hDivideBCDDivisor+2] + ld [hDivideBCDDivisor + 1], a + ld a, [hDivideBCDDivisor + 2] and $f0 - ld [hDivideBCDDivisor+2], a + ld [hDivideBCDDivisor + 2], a jr .mulBy10Loop + .next push de push de @@ -67,16 +71,16 @@ DivideBCD:: ld a, b swap a and $f0 - ld [hDivideBCDBuffer+1], a + ld [hDivideBCDBuffer + 1], a dec d jr z, .next2 push de call DivideBCD_divDivisorBy10 call DivideBCD_getNextDigit pop de - ld a, [hDivideBCDBuffer+1] + ld a, [hDivideBCDBuffer + 1] or b - ld [hDivideBCDBuffer+1], a + ld [hDivideBCDBuffer + 1], a dec d jr z, .next2 push de @@ -86,23 +90,23 @@ DivideBCD:: ld a, b swap a and $f0 - ld [hDivideBCDBuffer+2], a + ld [hDivideBCDBuffer + 2], a dec d jr z, .next2 push de call DivideBCD_divDivisorBy10 call DivideBCD_getNextDigit pop de - ld a, [hDivideBCDBuffer+2] + ld a, [hDivideBCDBuffer + 2] or b - ld [hDivideBCDBuffer+2], a + ld [hDivideBCDBuffer + 2], a .next2 ld a, [hDivideBCDBuffer] ld [hDivideBCDQuotient], a ; the same memory location as hDivideBCDDivisor - ld a, [hDivideBCDBuffer+1] - ld [hDivideBCDQuotient+1], a - ld a, [hDivideBCDBuffer+2] - ld [hDivideBCDQuotient+2], a + ld a, [hDivideBCDBuffer + 1] + ld [hDivideBCDQuotient + 1], a + ld a, [hDivideBCDBuffer + 2] + ld [hDivideBCDQuotient + 2], a pop de ld a, $6 sub d @@ -117,17 +121,17 @@ DivideBCD:: ret DivideBCD_divDivisorBy10: - ld a, [hDivideBCDDivisor+2] + ld a, [hDivideBCDDivisor + 2] swap a and $f ld b, a - ld a, [hDivideBCDDivisor+1] + ld a, [hDivideBCDDivisor + 1] swap a - ld [hDivideBCDDivisor+1], a + ld [hDivideBCDDivisor + 1], a and $f0 or b - ld [hDivideBCDDivisor+2], a - ld a, [hDivideBCDDivisor+1] + ld [hDivideBCDDivisor + 2], a + ld a, [hDivideBCDDivisor + 1] and $f ld b, a ld a, [hDivideBCDDivisor] @@ -135,7 +139,7 @@ DivideBCD_divDivisorBy10: ld [hDivideBCDDivisor], a and $f0 or b - ld [hDivideBCDDivisor+1], a + ld [hDivideBCDDivisor + 1], a ld a, [hDivideBCDDivisor] and $f ld [hDivideBCDDivisor], a @@ -151,8 +155,8 @@ DivideBCD_getNextDigit: pop bc ret c inc b - ld de, hMoney+2 ; since SubBCD works starting from the least significant digit - ld hl, hDivideBCDDivisor+2 + ld de, hMoney + 2 ; since SubBCD works starting from the least significant digit + ld hl, hDivideBCDDivisor + 2 push bc call SubBCD pop bc |