You've already forked pokecrystal-board
mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-09-08 08:13:02 -07:00
Use labels instead of constants for HRAM
Use explicit ldh instruction to access HRAM locations, don't rely on optimizing ld
This commit is contained in:
@@ -4,41 +4,41 @@ _Multiply::
|
||||
ld b, a
|
||||
|
||||
xor a
|
||||
ld [hProduct], a
|
||||
ld [hMathBuffer + 1], a
|
||||
ld [hMathBuffer + 2], a
|
||||
ld [hMathBuffer + 3], a
|
||||
ld [hMathBuffer + 4], a
|
||||
ldh [hProduct], a
|
||||
ldh [hMathBuffer + 1], a
|
||||
ldh [hMathBuffer + 2], a
|
||||
ldh [hMathBuffer + 3], a
|
||||
ldh [hMathBuffer + 4], a
|
||||
|
||||
.loop
|
||||
ld a, [hMultiplier]
|
||||
ldh a, [hMultiplier]
|
||||
srl a
|
||||
ld [hMultiplier], a
|
||||
ldh [hMultiplier], a
|
||||
jr nc, .next
|
||||
|
||||
ld a, [hMathBuffer + 4]
|
||||
ldh a, [hMathBuffer + 4]
|
||||
ld c, a
|
||||
ld a, [hMultiplicand + 2]
|
||||
ldh a, [hMultiplicand + 2]
|
||||
add c
|
||||
ld [hMathBuffer + 4], a
|
||||
ldh [hMathBuffer + 4], a
|
||||
|
||||
ld a, [hMathBuffer + 3]
|
||||
ldh a, [hMathBuffer + 3]
|
||||
ld c, a
|
||||
ld a, [hMultiplicand + 1]
|
||||
ldh a, [hMultiplicand + 1]
|
||||
adc c
|
||||
ld [hMathBuffer + 3], a
|
||||
ldh [hMathBuffer + 3], a
|
||||
|
||||
ld a, [hMathBuffer + 2]
|
||||
ldh a, [hMathBuffer + 2]
|
||||
ld c, a
|
||||
ld a, [hMultiplicand + 0]
|
||||
ldh a, [hMultiplicand + 0]
|
||||
adc c
|
||||
ld [hMathBuffer + 2], a
|
||||
ldh [hMathBuffer + 2], a
|
||||
|
||||
ld a, [hMathBuffer + 1]
|
||||
ldh a, [hMathBuffer + 1]
|
||||
ld c, a
|
||||
ld a, [hProduct]
|
||||
ldh a, [hProduct]
|
||||
adc c
|
||||
ld [hMathBuffer + 1], a
|
||||
ldh [hMathBuffer + 1], a
|
||||
|
||||
.next
|
||||
dec b
|
||||
@@ -46,71 +46,71 @@ _Multiply::
|
||||
|
||||
; hMultiplicand <<= 1
|
||||
|
||||
ld a, [hMultiplicand + 2]
|
||||
ldh a, [hMultiplicand + 2]
|
||||
add a
|
||||
ld [hMultiplicand + 2], a
|
||||
ldh [hMultiplicand + 2], a
|
||||
|
||||
ld a, [hMultiplicand + 1]
|
||||
ldh a, [hMultiplicand + 1]
|
||||
rla
|
||||
ld [hMultiplicand + 1], a
|
||||
ldh [hMultiplicand + 1], a
|
||||
|
||||
ld a, [hMultiplicand + 0]
|
||||
ldh a, [hMultiplicand + 0]
|
||||
rla
|
||||
ld [hMultiplicand + 0], a
|
||||
ldh [hMultiplicand + 0], a
|
||||
|
||||
ld a, [hProduct]
|
||||
ldh a, [hProduct]
|
||||
rla
|
||||
ld [hProduct], a
|
||||
ldh [hProduct], a
|
||||
|
||||
jr .loop
|
||||
|
||||
.done
|
||||
ld a, [hMathBuffer + 4]
|
||||
ld [hProduct + 3], a
|
||||
ldh a, [hMathBuffer + 4]
|
||||
ldh [hProduct + 3], a
|
||||
|
||||
ld a, [hMathBuffer + 3]
|
||||
ld [hProduct + 2], a
|
||||
ldh a, [hMathBuffer + 3]
|
||||
ldh [hProduct + 2], a
|
||||
|
||||
ld a, [hMathBuffer + 2]
|
||||
ld [hProduct + 1], a
|
||||
ldh a, [hMathBuffer + 2]
|
||||
ldh [hProduct + 1], a
|
||||
|
||||
ld a, [hMathBuffer + 1]
|
||||
ld [hProduct + 0], a
|
||||
ldh a, [hMathBuffer + 1]
|
||||
ldh [hProduct + 0], a
|
||||
|
||||
ret
|
||||
|
||||
_Divide::
|
||||
xor a
|
||||
ld [hMathBuffer + 0], a
|
||||
ld [hMathBuffer + 1], a
|
||||
ld [hMathBuffer + 2], a
|
||||
ld [hMathBuffer + 3], a
|
||||
ld [hMathBuffer + 4], a
|
||||
ldh [hMathBuffer + 0], a
|
||||
ldh [hMathBuffer + 1], a
|
||||
ldh [hMathBuffer + 2], a
|
||||
ldh [hMathBuffer + 3], a
|
||||
ldh [hMathBuffer + 4], a
|
||||
|
||||
ld a, 9
|
||||
ld e, a
|
||||
|
||||
.loop
|
||||
ld a, [hMathBuffer + 0]
|
||||
ldh a, [hMathBuffer + 0]
|
||||
ld c, a
|
||||
ld a, [hDividend + 1]
|
||||
ldh a, [hDividend + 1]
|
||||
sub c
|
||||
ld d, a
|
||||
|
||||
ld a, [hDivisor]
|
||||
ldh a, [hDivisor]
|
||||
ld c, a
|
||||
ld a, [hDividend + 0]
|
||||
ldh a, [hDividend + 0]
|
||||
sbc c
|
||||
jr c, .next
|
||||
|
||||
ld [hDividend + 0], a
|
||||
ldh [hDividend + 0], a
|
||||
|
||||
ld a, d
|
||||
ld [hDividend + 1], a
|
||||
ldh [hDividend + 1], a
|
||||
|
||||
ld a, [hMathBuffer + 4]
|
||||
ldh a, [hMathBuffer + 4]
|
||||
inc a
|
||||
ld [hMathBuffer + 4], a
|
||||
ldh [hMathBuffer + 4], a
|
||||
|
||||
jr .loop
|
||||
|
||||
@@ -119,39 +119,39 @@ _Divide::
|
||||
cp 1
|
||||
jr z, .done
|
||||
|
||||
ld a, [hMathBuffer + 4]
|
||||
ldh a, [hMathBuffer + 4]
|
||||
add a
|
||||
ld [hMathBuffer + 4], a
|
||||
ldh [hMathBuffer + 4], a
|
||||
|
||||
ld a, [hMathBuffer + 3]
|
||||
ldh a, [hMathBuffer + 3]
|
||||
rla
|
||||
ld [hMathBuffer + 3], a
|
||||
ldh [hMathBuffer + 3], a
|
||||
|
||||
ld a, [hMathBuffer + 2]
|
||||
ldh a, [hMathBuffer + 2]
|
||||
rla
|
||||
ld [hMathBuffer + 2], a
|
||||
ldh [hMathBuffer + 2], a
|
||||
|
||||
ld a, [hMathBuffer + 1]
|
||||
ldh a, [hMathBuffer + 1]
|
||||
rla
|
||||
ld [hMathBuffer + 1], a
|
||||
ldh [hMathBuffer + 1], a
|
||||
|
||||
dec e
|
||||
jr nz, .next2
|
||||
|
||||
ld e, 8
|
||||
ld a, [hMathBuffer + 0]
|
||||
ld [hDivisor], a
|
||||
ldh a, [hMathBuffer + 0]
|
||||
ldh [hDivisor], a
|
||||
xor a
|
||||
ld [hMathBuffer + 0], a
|
||||
ldh [hMathBuffer + 0], a
|
||||
|
||||
ld a, [hDividend + 1]
|
||||
ld [hDividend + 0], a
|
||||
ldh a, [hDividend + 1]
|
||||
ldh [hDividend + 0], a
|
||||
|
||||
ld a, [hDividend + 2]
|
||||
ld [hDividend + 1], a
|
||||
ldh a, [hDividend + 2]
|
||||
ldh [hDividend + 1], a
|
||||
|
||||
ld a, [hDividend + 3]
|
||||
ld [hDividend + 2], a
|
||||
ldh a, [hDividend + 3]
|
||||
ldh [hDividend + 2], a
|
||||
|
||||
.next2
|
||||
ld a, e
|
||||
@@ -160,30 +160,30 @@ _Divide::
|
||||
dec b
|
||||
|
||||
.okay
|
||||
ld a, [hDivisor]
|
||||
ldh a, [hDivisor]
|
||||
srl a
|
||||
ld [hDivisor], a
|
||||
ldh [hDivisor], a
|
||||
|
||||
ld a, [hMathBuffer + 0]
|
||||
ldh a, [hMathBuffer + 0]
|
||||
rr a
|
||||
ld [hMathBuffer + 0], a
|
||||
ldh [hMathBuffer + 0], a
|
||||
|
||||
jr .loop
|
||||
|
||||
.done
|
||||
ld a, [hDividend + 1]
|
||||
ld [hDivisor], a
|
||||
ldh a, [hDividend + 1]
|
||||
ldh [hDivisor], a
|
||||
|
||||
ld a, [hMathBuffer + 4]
|
||||
ld [hDividend + 3], a
|
||||
ldh a, [hMathBuffer + 4]
|
||||
ldh [hDividend + 3], a
|
||||
|
||||
ld a, [hMathBuffer + 3]
|
||||
ld [hDividend + 2], a
|
||||
ldh a, [hMathBuffer + 3]
|
||||
ldh [hDividend + 2], a
|
||||
|
||||
ld a, [hMathBuffer + 2]
|
||||
ld [hDividend + 1], a
|
||||
ldh a, [hMathBuffer + 2]
|
||||
ldh [hDividend + 1], a
|
||||
|
||||
ld a, [hMathBuffer + 1]
|
||||
ld [hDividend + 0], a
|
||||
ldh a, [hMathBuffer + 1]
|
||||
ldh [hDividend + 0], a
|
||||
|
||||
ret
|
||||
|
@@ -23,9 +23,9 @@ _PrintNum::
|
||||
|
||||
.main
|
||||
xor a
|
||||
ld [hPrintNum1], a
|
||||
ld [hPrintNum2], a
|
||||
ld [hPrintNum3], a
|
||||
ldh [hPrintNum1], a
|
||||
ldh [hPrintNum2], a
|
||||
ldh [hPrintNum3], a
|
||||
ld a, b
|
||||
and $f
|
||||
cp 1
|
||||
@@ -35,26 +35,26 @@ _PrintNum::
|
||||
; maximum 3 bytes
|
||||
.long
|
||||
ld a, [de]
|
||||
ld [hPrintNum2], a
|
||||
ldh [hPrintNum2], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [hPrintNum3], a
|
||||
ldh [hPrintNum3], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [hPrintNum4], a
|
||||
ldh [hPrintNum4], a
|
||||
jr .start
|
||||
|
||||
.word
|
||||
ld a, [de]
|
||||
ld [hPrintNum3], a
|
||||
ldh [hPrintNum3], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [hPrintNum4], a
|
||||
ldh [hPrintNum4], a
|
||||
jr .start
|
||||
|
||||
.byte
|
||||
ld a, [de]
|
||||
ld [hPrintNum4], a
|
||||
ldh [hPrintNum4], a
|
||||
|
||||
.start
|
||||
push de
|
||||
@@ -81,51 +81,51 @@ _PrintNum::
|
||||
|
||||
.seven
|
||||
ld a, HIGH(1000000 >> 8)
|
||||
ld [hPrintNum5], a
|
||||
ldh [hPrintNum5], a
|
||||
ld a, HIGH(1000000) ; mid
|
||||
ld [hPrintNum6], a
|
||||
ldh [hPrintNum6], a
|
||||
ld a, LOW(1000000)
|
||||
ld [hPrintNum7], a
|
||||
ldh [hPrintNum7], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
.six
|
||||
ld a, HIGH(100000 >> 8)
|
||||
ld [hPrintNum5], a
|
||||
ldh [hPrintNum5], a
|
||||
ld a, HIGH(100000) ; mid
|
||||
ld [hPrintNum6], a
|
||||
ldh [hPrintNum6], a
|
||||
ld a, LOW(100000)
|
||||
ld [hPrintNum7], a
|
||||
ldh [hPrintNum7], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
.five
|
||||
xor a ; HIGH(10000 >> 8)
|
||||
ld [hPrintNum5], a
|
||||
ldh [hPrintNum5], a
|
||||
ld a, HIGH(10000) ; mid
|
||||
ld [hPrintNum6], a
|
||||
ldh [hPrintNum6], a
|
||||
ld a, LOW(10000)
|
||||
ld [hPrintNum7], a
|
||||
ldh [hPrintNum7], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
.four
|
||||
xor a ; HIGH(1000 >> 8)
|
||||
ld [hPrintNum5], a
|
||||
ldh [hPrintNum5], a
|
||||
ld a, HIGH(1000) ; mid
|
||||
ld [hPrintNum6], a
|
||||
ldh [hPrintNum6], a
|
||||
ld a, LOW(1000)
|
||||
ld [hPrintNum7], a
|
||||
ldh [hPrintNum7], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
.three
|
||||
xor a ; HIGH(100 >> 8)
|
||||
ld [hPrintNum5], a
|
||||
ldh [hPrintNum5], a
|
||||
xor a ; HIGH(100) ; mid
|
||||
ld [hPrintNum6], a
|
||||
ldh [hPrintNum6], a
|
||||
ld a, LOW(100)
|
||||
ld [hPrintNum7], a
|
||||
ldh [hPrintNum7], a
|
||||
call .PrintDigit
|
||||
call .AdvancePointer
|
||||
|
||||
@@ -133,11 +133,11 @@ _PrintNum::
|
||||
dec e
|
||||
jr nz, .two_skip
|
||||
ld a, "0"
|
||||
ld [hPrintNum1], a
|
||||
ldh [hPrintNum1], a
|
||||
.two_skip
|
||||
|
||||
ld c, 0
|
||||
ld a, [hPrintNum4]
|
||||
ldh a, [hPrintNum4]
|
||||
.mod_10
|
||||
cp 10
|
||||
jr c, .modded_10
|
||||
@@ -147,7 +147,7 @@ _PrintNum::
|
||||
.modded_10
|
||||
|
||||
ld b, a
|
||||
ld a, [hPrintNum1]
|
||||
ldh a, [hPrintNum1]
|
||||
or c
|
||||
jr nz, .money
|
||||
call .PrintLeadingZero
|
||||
@@ -160,7 +160,7 @@ _PrintNum::
|
||||
add c
|
||||
ld [hl], a
|
||||
pop af
|
||||
ld [hPrintNum1], a
|
||||
ldh [hPrintNum1], a
|
||||
inc e
|
||||
dec e
|
||||
jr nz, .money_leading_zero
|
||||
@@ -180,7 +180,7 @@ _PrintNum::
|
||||
|
||||
.PrintYen:
|
||||
push af
|
||||
ld a, [hPrintNum1]
|
||||
ldh a, [hPrintNum1]
|
||||
and a
|
||||
jr nz, .stop
|
||||
bit 5, d
|
||||
@@ -197,68 +197,68 @@ _PrintNum::
|
||||
dec e
|
||||
jr nz, .ok
|
||||
ld a, "0"
|
||||
ld [hPrintNum1], a
|
||||
ldh [hPrintNum1], a
|
||||
.ok
|
||||
ld c, 0
|
||||
.loop
|
||||
ld a, [hPrintNum5]
|
||||
ldh a, [hPrintNum5]
|
||||
ld b, a
|
||||
ld a, [hPrintNum2]
|
||||
ld [hPrintNum8], a
|
||||
ldh a, [hPrintNum2]
|
||||
ldh [hPrintNum8], a
|
||||
cp b
|
||||
jr c, .skip1
|
||||
sub b
|
||||
ld [hPrintNum2], a
|
||||
ld a, [hPrintNum6]
|
||||
ldh [hPrintNum2], a
|
||||
ldh a, [hPrintNum6]
|
||||
ld b, a
|
||||
ld a, [hPrintNum3]
|
||||
ld [hPrintNum9], a
|
||||
ldh a, [hPrintNum3]
|
||||
ldh [hPrintNum9], a
|
||||
cp b
|
||||
jr nc, .skip2
|
||||
ld a, [hPrintNum2]
|
||||
ldh a, [hPrintNum2]
|
||||
or 0
|
||||
jr z, .skip3
|
||||
dec a
|
||||
ld [hPrintNum2], a
|
||||
ld a, [hPrintNum3]
|
||||
ldh [hPrintNum2], a
|
||||
ldh a, [hPrintNum3]
|
||||
.skip2
|
||||
sub b
|
||||
ld [hPrintNum3], a
|
||||
ld a, [hPrintNum7]
|
||||
ldh [hPrintNum3], a
|
||||
ldh a, [hPrintNum7]
|
||||
ld b, a
|
||||
ld a, [hPrintNum4]
|
||||
ld [hPrintNum10], a
|
||||
ldh a, [hPrintNum4]
|
||||
ldh [hPrintNum10], a
|
||||
cp b
|
||||
jr nc, .skip4
|
||||
ld a, [hPrintNum3]
|
||||
ldh a, [hPrintNum3]
|
||||
and a
|
||||
jr nz, .skip5
|
||||
ld a, [hPrintNum2]
|
||||
ldh a, [hPrintNum2]
|
||||
and a
|
||||
jr z, .skip6
|
||||
dec a
|
||||
ld [hPrintNum2], a
|
||||
ldh [hPrintNum2], a
|
||||
xor a
|
||||
.skip5
|
||||
dec a
|
||||
ld [hPrintNum3], a
|
||||
ld a, [hPrintNum4]
|
||||
ldh [hPrintNum3], a
|
||||
ldh a, [hPrintNum4]
|
||||
.skip4
|
||||
sub b
|
||||
ld [hPrintNum4], a
|
||||
ldh [hPrintNum4], a
|
||||
inc c
|
||||
jr .loop
|
||||
.skip6
|
||||
ld a, [hPrintNum9]
|
||||
ld [hPrintNum3], a
|
||||
ldh a, [hPrintNum9]
|
||||
ldh [hPrintNum3], a
|
||||
.skip3
|
||||
ld a, [hPrintNum8]
|
||||
ld [hPrintNum2], a
|
||||
ldh a, [hPrintNum8]
|
||||
ldh [hPrintNum2], a
|
||||
.skip1
|
||||
ld a, [hPrintNum1]
|
||||
ldh a, [hPrintNum1]
|
||||
or c
|
||||
jr z, .PrintLeadingZero
|
||||
ld a, [hPrintNum1]
|
||||
ldh a, [hPrintNum1]
|
||||
and a
|
||||
jr nz, .done
|
||||
bit 5, d
|
||||
@@ -270,7 +270,7 @@ _PrintNum::
|
||||
ld a, "0"
|
||||
add c
|
||||
ld [hl], a
|
||||
ld [hPrintNum1], a
|
||||
ldh [hPrintNum1], a
|
||||
inc e
|
||||
dec e
|
||||
ret nz
|
||||
@@ -292,7 +292,7 @@ _PrintNum::
|
||||
jr nz, .inc
|
||||
bit 6, d ; left alignment or right alignment?
|
||||
jr z, .inc
|
||||
ld a, [hPrintNum1]
|
||||
ldh a, [hPrintNum1]
|
||||
and a
|
||||
ret z
|
||||
.inc
|
||||
|
Reference in New Issue
Block a user