; divide hMoney by hDivideBCDDivisor ; return output in hDivideBCDQuotient (same as hDivideBCDDivisor) ; used only to halve player money upon losing a fight DivideBCDPredef:: DivideBCDPredef2:: DivideBCDPredef3:: ; only used function DivideBCDPredef4:: call GetPredefRegisters DivideBCD:: xor a ld [hDivideBCDBuffer], a ld [hDivideBCDBuffer + 1], a ld [hDivideBCDBuffer + 2], a ld d, $1 .loop1 ld a, [hDivideBCDDivisor] and $f0 jr nz, .go inc d ld a, [hDivideBCDDivisor] swap a and $f0 ld b, a ld a, [hDivideBCDDivisor + 1] swap a ld [hDivideBCDDivisor + 1], a and $f or b ld [hDivideBCDDivisor], a ld a, [hDivideBCDDivisor + 1] and $f0 ld b, a ld a, [hDivideBCDDivisor + 2] swap a ld [hDivideBCDDivisor + 2], a and $f or b ld [hDivideBCDDivisor + 1], a ld a, [hDivideBCDDivisor + 2] and $f0 ld [hDivideBCDDivisor + 2], a jr .loop1 .go push de push de call DivideBCD_f686 pop de ld a, b swap a and $f0 ld [hDivideBCDBuffer], a dec d jr z, .skip push de call DivideBCD_f65d call DivideBCD_f686 pop de ld a, [hDivideBCDBuffer] or b ld [hDivideBCDBuffer], a dec d jr z, .skip push de call DivideBCD_f65d call DivideBCD_f686 pop de ld a, b swap a and $f0 ld [hDivideBCDBuffer + 1], a dec d jr z, .skip push de call DivideBCD_f65d call DivideBCD_f686 pop de ld a, [hDivideBCDBuffer + 1] or b ld [hDivideBCDBuffer + 1], a dec d jr z, .skip push de call DivideBCD_f65d call DivideBCD_f686 pop de ld a, b swap a and $f0 ld [hDivideBCDBuffer + 2], a dec d jr z, .skip push de call DivideBCD_f65d call DivideBCD_f686 pop de ld a, [hDivideBCDBuffer + 2] or b ld [hDivideBCDBuffer + 2], a .skip ld a, [hDivideBCDBuffer] ld [hDivideBCDQuotient], a ld a, [hDivideBCDBuffer + 1] ld [hDivideBCDQuotient + 1], a ld a, [hDivideBCDBuffer + 2] ld [hDivideBCDQuotient + 2], a pop de ld a, $6 sub d and a ret z .loop2 push af call DivideBCD_f65d pop af dec a jr nz, .loop2 ret DivideBCD_f65d: ld a, [hDivideBCDDivisor + 2] swap a and $f ld b, a ld a, [hDivideBCDDivisor + 1] swap a ld [hDivideBCDDivisor + 1], a and $f0 or b ld [hDivideBCDDivisor + 2], a ld a, [hDivideBCDDivisor + 1] and $f ld b, a ld a, [hDivideBCDDivisor] swap a ld [hDivideBCDDivisor], a and $f0 or b ld [hDivideBCDDivisor + 1], a ld a, [hDivideBCDDivisor] and $f ld [hDivideBCDDivisor], a ret DivideBCD_f686: ld bc, $3 .asm_f689 ld de, hMoney ld hl, hDivideBCDDivisor push bc call StringCmp pop bc ret c inc b ld de, hMoney + 2 ld hl, hDivideBCDDivisor + 2 push bc call SubBCD pop bc jr .asm_f689 AddBCDPredef:: call GetPredefRegisters AddBCD:: and a ld b, c .add ld a, [de] adc [hl] daa ld [de], a dec de dec hl dec c jr nz, .add jr nc, .done ld a, $99 inc de .fill ld [de], a inc de dec b jr nz, .fill .done ret SubBCDPredef:: call GetPredefRegisters SubBCD:: and a ld b, c .sub ld a, [de] sbc [hl] daa ld [de], a dec de dec hl dec c jr nz, .sub jr nc, .done ld a, $00 inc de .fill ld [de], a inc de dec b jr nz, .fill scf .done ret