Bugfixes.

Fix some building issues and multiply_divide.asm
This commit is contained in:
luckytyphlosion 2015-07-26 18:19:34 -04:00
parent 222afb247d
commit 088f40842f
7 changed files with 51 additions and 57 deletions

View file

@ -27,4 +27,3 @@ db 0 ; growth rate
tmlearn 0 tmlearn 0
tmlearn 0 tmlearn 0
db 0 ; padding db 0 ; padding
b 0 ; padding

View file

@ -27,4 +27,3 @@ db 0 ; growth rate
tmlearn 0 tmlearn 0
tmlearn 0 tmlearn 0
db 0 ; padding db 0 ; padding
b 0 ; padding

View file

@ -27,4 +27,3 @@ db 0 ; growth rate
tmlearn 0 tmlearn 0
tmlearn 0 tmlearn 0
db 0 ; padding db 0 ; padding
b 0 ; padding

View file

@ -27,4 +27,3 @@ db 5 ; growth rate
tmlearn 0 tmlearn 0
tmlearn 0 tmlearn 0
db 0 ; padding db 0 ; padding
b 0 ; padding

View file

@ -27,4 +27,3 @@ db 0 ; growth rate
tmlearn 0 tmlearn 0
tmlearn 0 tmlearn 0
db 0 ; padding db 0 ; padding
b 0 ; padding

View file

@ -27,4 +27,3 @@ db 0 ; growth rate
tmlearn 0 tmlearn 0
tmlearn 0 tmlearn 0
db 0 ; padding db 0 ; padding
b 0 ; padding

View file

@ -2,17 +2,16 @@ _Multiply: ; 37d41 (d:7d41)
ld a, $8 ld a, $8
ld b, a ld b, a
xor a xor a
ld [H_PRODUCT], a ; $ff95 ld [H_PRODUCT], a
ld [H_MULTIPLYBUFFER], a ; $ff9b ld [H_MULTIPLYBUFFER], a
ld [H_MULTIPLYBUFFER+1], a ; $ff9c ld [H_MULTIPLYBUFFER+1], a
ld [H_MULTIPLYBUFFER+2], a ; $ff9d ld [H_MULTIPLYBUFFER+2], a
ld [H_MULTIPLYBUFFER+3], a ; $ff9e ld [H_MULTIPLYBUFFER+3], a
.multiplyLoop .loop
ld a, [H_MULTIPLIER] ; $ff99 ld a, [H_MULTIPLIER]
srl a srl a
ld [H_MULTIPLIER], a ; $ff99 ld [H_MULTIPLIER], a ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
jr nc, .smallMultiplier ; less than $80 jr nc, .smallMultiplier
; code to possibly multiply the multiplicand by 2 and divide the multiplier by 2?
ld a, [H_MULTIPLYBUFFER+3] ld a, [H_MULTIPLYBUFFER+3]
ld c, a ld c, a
ld a, [H_MULTIPLICAND+2] ld a, [H_MULTIPLICAND+2]
@ -23,65 +22,66 @@ _Multiply: ; 37d41 (d:7d41)
ld a, [H_MULTIPLICAND+1] ld a, [H_MULTIPLICAND+1]
adc c adc c
ld [H_MULTIPLYBUFFER+2], a ld [H_MULTIPLYBUFFER+2], a
ld a, [H_MULTIPLYBUFFER+1] ; $ff9c ld a, [H_MULTIPLYBUFFER+1]
ld c, a ld c, a
ld a, [H_MULTIPLICAND] ; $ff96 ld a, [H_MULTIPLICAND] ; (aliases: H_MULTIPLICAND)
adc c adc c
ld [H_MULTIPLYDBUFFER+1], a ; $ff9c ld [H_MULTIPLYBUFFER+1], a
ld a, [H_MULTIPLYBUFFER] ld a, [H_MULTIPLYBUFFER]
ld c, a ld c, a
ld a, [H_PRODUCT] ; $ff95 ld a, [H_PRODUCT] ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
adc c adc c
ld [H_MULTIPLYBUFFER], a ld [H_MULTIPLYBUFFER], a
.smallMultiplier .smallMultiplier
dec b dec b
jr z, .done jr z, .done
ld a, [H_MULTIPLICAND] ld a, [H_MULTIPLICAND+2]
sla a sla a
ld [H_MULTIPLICAND+2], a ld [H_MULTIPLICAND+2], a
ld a, [H_MULTIPLICAND+1] ld a, [H_MULTIPLICAND+1]
rl a rl a
ld [H_MULTIPLICAND+1], a ld [H_MULTIPLICAND+1], a
ld a, [H_MULTIPLICAND] ; $ff96 ld a, [H_MULTIPLICAND]
rl a rl a
ld [H_MULTIPLICAND], a ; $ff96 ld [H_MULTIPLICAND], a
ld a, [H_PRODUCT] ; $ff95 ld a, [H_PRODUCT]
rl a rl a
ld [H_PRODUCT], a ; $ff95 ld [H_PRODUCT], a
jr .multiplyLoop jr .loop
.done .done
ld a, [H_MULTIPLYBUFFER+3] ld a, [H_MULTIPLYBUFFER+3]
ld [H_PRODUCT+3], a ld [H_PRODUCT+3], a
ld a, [H_MULTIPLYBUFFER+2] ld a, [H_MULTIPLYBUFFER+2]
ld [H_PRODUCT+2], a ld [H_PRODUCT+2], a
ld a, [H_MULTIPLYBUFFER+1] ; $ff9c ld a, [H_MULTIPLYBUFFER+1]
ld [H_PRODUCT+1], a ; $ff96 ld [H_PRODUCT+1], a
ld [H_PRODUCT], a ; $ff95 ld a, [H_MULTIPLYBUFFER]
ld [H_PRODUCT], a
ret ret
_Divide: ; 37da5 (d:7da5) _Divide: ; 37da5 (d:7da5)
xor a xor a
ld [H_DIVIDEBUFFER], a ; ff9a ld [H_DIVIDEBUFFER], a
ld [H_DIVIDEBUFFER+1], a ; ff9b ld [H_DIVIDEBUFFER+1], a
ld [H_DIVIDEBUFFER+2], a ; ff9c ld [H_DIVIDEBUFFER+2], a
ld [H_DIVIDEBUFFER+3], a ; ff9d ld [H_DIVIDEBUFFER+3], a
ld [H_DIVIDEBUFFER+4], a ; ff9e ld [H_DIVIDEBUFFER+4], a
ld a, $9 ld a, $9
ld e, a ld e, a
.asm_37db3 .asm_37db3
ld a, [H_DIVIDEBUFFER] ld a, [H_DIVIDEBUFFER]
ld c, a ld c, a
ld a, [H_DIVIDEND+1] ; $ff96 ld a, [H_DIVIDEND+1] ; (aliases: H_MULTIPLICAND)
sub c sub c
ld d, a ld d, a
ld a, [H_DIVISOR] ; $ff99 ld a, [H_DIVISOR] ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
ld c, a ld c, a
ld a, [H_DIVIDEND] ; $ff95 ld a, [H_DIVIDEND] ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
sbc c sbc c
jr c, .asm_37dce jr c, .asm_37dce
ld [H_DIVIDEND], a ; $ff95 ld [H_DIVIDEND], a ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
ld a, d ld a, d
ld [H_DIVIDEND+1], a ; $ff96 ld [H_DIVIDEND+1], a ; (aliases: H_MULTIPLICAND)
ld a, [H_DIVIDEBUFFER+4] ld a, [H_DIVIDEBUFFER+4]
inc a inc a
ld [H_DIVIDEBUFFER+4], a ld [H_DIVIDEBUFFER+4], a
@ -89,16 +89,16 @@ _Divide: ; 37da5 (d:7da5)
.asm_37dce .asm_37dce
ld a, b ld a, b
cp $1 cp $1
jr z, .done jr z, .asm_37e18
ld a, [H_DIVIDEBUFFER+4] ld a, [H_DIVIDEBUFFER+4]
sla a sla a
ld [H_DIVIDEBUFFER+4], a ld [H_DIVIDEBUFFER+4], a
ld a, [H_DIVIDEBUFFER+3] ld a, [H_DIVIDEBUFFER+3]
rl a rl a
ld [H_DIVIDEBUFFER+3], a ld [H_DIVIDEBUFFER+3], a
ld a, [H_DIVIDEBUFFER+2] ; $ff9c ld a, [H_DIVIDEBUFFER+2]
rl a rl a
ld [H_DIVIDEBUFFER+2], a ; $ff9c ld [H_DIVIDEBUFFER+2], a
ld a, [H_DIVIDEBUFFER+1] ld a, [H_DIVIDEBUFFER+1]
rl a rl a
ld [H_DIVIDEBUFFER+1], a ld [H_DIVIDEBUFFER+1], a
@ -107,13 +107,13 @@ _Divide: ; 37da5 (d:7da5)
ld a, $8 ld a, $8
ld e, a ld e, a
ld a, [H_DIVIDEBUFFER] ld a, [H_DIVIDEBUFFER]
ld [H_DIVISOR], a ; $ff99 ld [H_DIVISOR], a ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
xor a xor a
ld [H_DIVIDEBUFFER], a ld [H_DIVIDEBUFFER], a
ld a, [H_DIVIDEND+1] ; $ff96 ld a, [H_DIVIDEND+1] ; (aliases: H_MULTIPLICAND)
ld [H_DIVIDEND], a ; $ff95 ld [H_DIVIDEND], a ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
ld a, [H_DIVIDEND+2] ld a, [H_DIVIDEND+2]
ld [H_DIVIDEND+1], a ; $ff96 ld [H_DIVIDEND+1], a ; (aliases: H_MULTIPLICAND)
ld a, [H_DIVIDEND+3] ld a, [H_DIVIDEND+3]
ld [H_DIVIDEND+2], a ld [H_DIVIDEND+2], a
.asm_37e04 .asm_37e04
@ -122,22 +122,22 @@ _Divide: ; 37da5 (d:7da5)
jr nz, .asm_37e0a jr nz, .asm_37e0a
dec b dec b
.asm_37e0a .asm_37e0a
ld a, [H_DIVIDEND+4] ; $ff99 ld a, [H_DIVISOR] ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
srl a srl a
ld [H_REMAINDER], a ; $ff99 ld [H_DIVISOR], a ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
ld a, [H_DIVIDEBUFFER] ld a, [H_DIVIDEBUFFER]
rr a rr a
ld [H_DIVIDEBUFFER], a ld [H_DIVIDEBUFFER], a
jr .asm_37db3 jr .asm_37db3
.done .asm_37e18
ld a, [H_DIVIDEND+1] ; $ff96 ld a, [H_DIVIDEND+1] ; (aliases: H_MULTIPLICAND)
ld [H_REMAINDER], a ; $ff99 ld [H_REMAINDER], a ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
ld a, [H_DIVIDEBUFFER+4] ld a, [H_DIVIDEBUFFER+4]
ld [H_QUOTIENT+3], a ld [H_QUOTIENT+3], a
ld a, [H_DIVIDEBUFFER+3] ld a, [H_DIVIDEBUFFER+3]
ld [H_QUOTIENT+2], a ld [H_QUOTIENT+2], a
ld a, [H_DIVIDEBUFFER+2] ; $ff9c ld a, [H_DIVIDEBUFFER+2]
ld [H_QUOTIENT+1], a ; $ff96 ld [H_QUOTIENT+1], a ; (aliases: H_MULTIPLICAND)
ld a, [H_DIVIDEBUFFER+1] ld a, [H_DIVIDEBUFFER+1]
ld [H_QUOTIENT], a ; $ff95 ld [H_DIVIDEND], a ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
ret ret