From 222afb247d592201dc228108232e3347c762db87 Mon Sep 17 00:00:00 2001 From: luckytyphlosion Date: Sun, 26 Jul 2015 17:04:24 -0400 Subject: tmlearn macro. Also multiple_divide documentation and fix improper wram comment. --- engine/multiply_divide.asm | 176 ++++++++++++++++++++++----------------------- 1 file changed, 88 insertions(+), 88 deletions(-) (limited to 'engine') diff --git a/engine/multiply_divide.asm b/engine/multiply_divide.asm index e55ab430..7726a2db 100755 --- a/engine/multiply_divide.asm +++ b/engine/multiply_divide.asm @@ -2,142 +2,142 @@ _Multiply: ; 37d41 (d:7d41) ld a, $8 ld b, a xor a - ld [H_DIVIDEND], a ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - ld [$ff9b], a - ld [H_SAVEDNUMTOPRINT], a - ld [$ff9d], a - ld [$ff9e], a -.asm_37d4f - ld a, [H_REMAINDER] ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) + ld [H_PRODUCT], a ; $ff95 + ld [H_MULTIPLYBUFFER], a ; $ff9b + ld [H_MULTIPLYBUFFER+1], a ; $ff9c + ld [H_MULTIPLYBUFFER+2], a ; $ff9d + ld [H_MULTIPLYBUFFER+3], a ; $ff9e +.multiplyLoop + ld a, [H_MULTIPLIER] ; $ff99 srl a - ld [H_REMAINDER], a ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - jr nc, .asm_37d77 - ld a, [$ff9e] + ld [H_MULTIPLIER], a ; $ff99 + jr nc, .smallMultiplier ; less than $80 +; code to possibly multiply the multiplicand by 2 and divide the multiplier by 2? + ld a, [H_MULTIPLYBUFFER+3] ld c, a - ld a, [$ff98] + ld a, [H_MULTIPLICAND+2] add c - ld [$ff9e], a - ld a, [$ff9d] + ld [H_MULTIPLYBUFFER+3], a + ld a, [H_MULTIPLYBUFFER+2] ld c, a - ld a, [$ff97] + ld a, [H_MULTIPLICAND+1] adc c - ld [$ff9d], a - ld a, [H_SAVEDNUMTOPRINT] + ld [H_MULTIPLYBUFFER+2], a + ld a, [H_MULTIPLYBUFFER+1] ; $ff9c ld c, a - ld a, [H_NUMTOPRINT] ; (aliases: H_MULTIPLICAND) + ld a, [H_MULTIPLICAND] ; $ff96 adc c - ld [H_SAVEDNUMTOPRINT], a - ld a, [$ff9b] + ld [H_MULTIPLYDBUFFER+1], a ; $ff9c + ld a, [H_MULTIPLYBUFFER] ld c, a - ld a, [H_DIVIDEND] ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) + ld a, [H_PRODUCT] ; $ff95 adc c - ld [$ff9b], a -.asm_37d77 + ld [H_MULTIPLYBUFFER], a +.smallMultiplier dec b - jr z, .asm_37d94 - ld a, [$ff98] + jr z, .done + ld a, [H_MULTIPLICAND] sla a - ld [$ff98], a - ld a, [$ff97] + ld [H_MULTIPLICAND+2], a + ld a, [H_MULTIPLICAND+1] rl a - ld [$ff97], a - ld a, [H_NUMTOPRINT] ; (aliases: H_MULTIPLICAND) + ld [H_MULTIPLICAND+1], a + ld a, [H_MULTIPLICAND] ; $ff96 rl a - ld [H_NUMTOPRINT], a ; (aliases: H_MULTIPLICAND) - ld a, [H_DIVIDEND] ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) + ld [H_MULTIPLICAND], a ; $ff96 + ld a, [H_PRODUCT] ; $ff95 rl a - ld [H_DIVIDEND], a ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - jr .asm_37d4f -.asm_37d94 - ld a, [$ff9e] - ld [$ff98], a - ld a, [$ff9d] - ld [$ff97], a - ld a, [H_SAVEDNUMTOPRINT] - ld [H_NUMTOPRINT], a ; (aliases: H_MULTIPLICAND) - ld a, [$ff9b] - ld [H_DIVIDEND], a ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) + ld [H_PRODUCT], a ; $ff95 + jr .multiplyLoop +.done + ld a, [H_MULTIPLYBUFFER+3] + ld [H_PRODUCT+3], a + ld a, [H_MULTIPLYBUFFER+2] + ld [H_PRODUCT+2], a + ld a, [H_MULTIPLYBUFFER+1] ; $ff9c + ld [H_PRODUCT+1], a ; $ff96 + ld [H_PRODUCT], a ; $ff95 ret _Divide: ; 37da5 (d:7da5) xor a - ld [$ff9a], a - ld [$ff9b], a - ld [H_SAVEDNUMTOPRINT], a - ld [$ff9d], a - ld [$ff9e], a + ld [H_DIVIDEBUFFER], a ; ff9a + ld [H_DIVIDEBUFFER+1], a ; ff9b + ld [H_DIVIDEBUFFER+2], a ; ff9c + ld [H_DIVIDEBUFFER+3], a ; ff9d + ld [H_DIVIDEBUFFER+4], a ; ff9e ld a, $9 ld e, a .asm_37db3 - ld a, [$ff9a] + ld a, [H_DIVIDEBUFFER] ld c, a - ld a, [H_NUMTOPRINT] ; (aliases: H_MULTIPLICAND) + ld a, [H_DIVIDEND+1] ; $ff96 sub c ld d, a - ld a, [H_REMAINDER] ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) + ld a, [H_DIVISOR] ; $ff99 ld c, a - ld a, [H_DIVIDEND] ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) + ld a, [H_DIVIDEND] ; $ff95 sbc c jr c, .asm_37dce - ld [H_DIVIDEND], a ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) + ld [H_DIVIDEND], a ; $ff95 ld a, d - ld [H_NUMTOPRINT], a ; (aliases: H_MULTIPLICAND) - ld a, [$ff9e] + ld [H_DIVIDEND+1], a ; $ff96 + ld a, [H_DIVIDEBUFFER+4] inc a - ld [$ff9e], a + ld [H_DIVIDEBUFFER+4], a jr .asm_37db3 .asm_37dce - ld a, b + ld a, b cp $1 - jr z, .asm_37e18 - ld a, [$ff9e] + jr z, .done + ld a, [H_DIVIDEBUFFER+4] sla a - ld [$ff9e], a - ld a, [$ff9d] + ld [H_DIVIDEBUFFER+4], a + ld a, [H_DIVIDEBUFFER+3] rl a - ld [$ff9d], a - ld a, [H_SAVEDNUMTOPRINT] + ld [H_DIVIDEBUFFER+3], a + ld a, [H_DIVIDEBUFFER+2] ; $ff9c rl a - ld [H_SAVEDNUMTOPRINT], a - ld a, [$ff9b] + ld [H_DIVIDEBUFFER+2], a ; $ff9c + ld a, [H_DIVIDEBUFFER+1] rl a - ld [$ff9b], a + ld [H_DIVIDEBUFFER+1], a dec e jr nz, .asm_37e04 ld a, $8 ld e, a - ld a, [$ff9a] - ld [H_REMAINDER], a ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) + ld a, [H_DIVIDEBUFFER] + ld [H_DIVISOR], a ; $ff99 xor a - ld [$ff9a], a - ld a, [H_NUMTOPRINT] ; (aliases: H_MULTIPLICAND) - ld [H_DIVIDEND], a ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) - ld a, [$ff97] - ld [H_NUMTOPRINT], a ; (aliases: H_MULTIPLICAND) - ld a, [$ff98] - ld [$ff97], a + ld [H_DIVIDEBUFFER], a + ld a, [H_DIVIDEND+1] ; $ff96 + ld [H_DIVIDEND], a ; $ff95 + ld a, [H_DIVIDEND+2] + ld [H_DIVIDEND+1], a ; $ff96 + ld a, [H_DIVIDEND+3] + ld [H_DIVIDEND+2], a .asm_37e04 ld a, e cp $1 jr nz, .asm_37e0a dec b .asm_37e0a - ld a, [H_REMAINDER] ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) + ld a, [H_DIVIDEND+4] ; $ff99 srl a - ld [H_REMAINDER], a ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - ld a, [$ff9a] + ld [H_REMAINDER], a ; $ff99 + ld a, [H_DIVIDEBUFFER] rr a - ld [$ff9a], a + ld [H_DIVIDEBUFFER], a jr .asm_37db3 -.asm_37e18 - ld a, [H_NUMTOPRINT] ; (aliases: H_MULTIPLICAND) - ld [H_REMAINDER], a ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) - ld a, [$ff9e] - ld [$ff98], a - ld a, [$ff9d] - ld [$ff97], a - ld a, [H_SAVEDNUMTOPRINT] - ld [H_NUMTOPRINT], a ; (aliases: H_MULTIPLICAND) - ld a, [$ff9b] - ld [H_DIVIDEND], a ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) +.done + ld a, [H_DIVIDEND+1] ; $ff96 + ld [H_REMAINDER], a ; $ff99 + ld a, [H_DIVIDEBUFFER+4] + ld [H_QUOTIENT+3], a + ld a, [H_DIVIDEBUFFER+3] + ld [H_QUOTIENT+2], a + ld a, [H_DIVIDEBUFFER+2] ; $ff9c + ld [H_QUOTIENT+1], a ; $ff96 + ld a, [H_DIVIDEBUFFER+1] + ld [H_QUOTIENT], a ; $ff95 ret -- cgit v1.3.1-sl0p From 088f40842f68098193c4185bf3f6a07582590dc5 Mon Sep 17 00:00:00 2001 From: luckytyphlosion Date: Sun, 26 Jul 2015 18:19:34 -0400 Subject: Bugfixes. Fix some building issues and multiply_divide.asm --- data/baseStats/caterpie.asm | 1 - data/baseStats/ditto.asm | 1 - data/baseStats/kakuna.asm | 1 - data/baseStats/magikarp.asm | 1 - data/baseStats/metapod.asm | 1 - data/baseStats/weedle.asm | 3 +- engine/multiply_divide.asm | 100 ++++++++++++++++++++++---------------------- 7 files changed, 51 insertions(+), 57 deletions(-) (limited to 'engine') diff --git a/data/baseStats/caterpie.asm b/data/baseStats/caterpie.asm index 22e613ec..975f31a1 100755 --- a/data/baseStats/caterpie.asm +++ b/data/baseStats/caterpie.asm @@ -27,4 +27,3 @@ db 0 ; growth rate tmlearn 0 tmlearn 0 db 0 ; padding -b 0 ; padding diff --git a/data/baseStats/ditto.asm b/data/baseStats/ditto.asm index b40e4b17..88def477 100755 --- a/data/baseStats/ditto.asm +++ b/data/baseStats/ditto.asm @@ -27,4 +27,3 @@ db 0 ; growth rate tmlearn 0 tmlearn 0 db 0 ; padding -b 0 ; padding diff --git a/data/baseStats/kakuna.asm b/data/baseStats/kakuna.asm index c6b90ed8..4ee90925 100755 --- a/data/baseStats/kakuna.asm +++ b/data/baseStats/kakuna.asm @@ -27,4 +27,3 @@ db 0 ; growth rate tmlearn 0 tmlearn 0 db 0 ; padding -b 0 ; padding diff --git a/data/baseStats/magikarp.asm b/data/baseStats/magikarp.asm index b5f6018b..95f72547 100755 --- a/data/baseStats/magikarp.asm +++ b/data/baseStats/magikarp.asm @@ -27,4 +27,3 @@ db 5 ; growth rate tmlearn 0 tmlearn 0 db 0 ; padding -b 0 ; padding diff --git a/data/baseStats/metapod.asm b/data/baseStats/metapod.asm index 1e773a0f..981bbbfb 100755 --- a/data/baseStats/metapod.asm +++ b/data/baseStats/metapod.asm @@ -27,4 +27,3 @@ db 0 ; growth rate tmlearn 0 tmlearn 0 db 0 ; padding -b 0 ; padding diff --git a/data/baseStats/weedle.asm b/data/baseStats/weedle.asm index 04a7c74e..8d565d10 100755 --- a/data/baseStats/weedle.asm +++ b/data/baseStats/weedle.asm @@ -26,5 +26,4 @@ db 0 ; growth rate tmlearn 0 tmlearn 0 tmlearn 0 -db 0 ; padding -b 0 ; padding +db 0 ; padding \ No newline at end of file diff --git a/engine/multiply_divide.asm b/engine/multiply_divide.asm index 7726a2db..e6e6e89c 100755 --- a/engine/multiply_divide.asm +++ b/engine/multiply_divide.asm @@ -2,17 +2,16 @@ _Multiply: ; 37d41 (d:7d41) ld a, $8 ld b, a xor a - ld [H_PRODUCT], a ; $ff95 - ld [H_MULTIPLYBUFFER], a ; $ff9b - ld [H_MULTIPLYBUFFER+1], a ; $ff9c - ld [H_MULTIPLYBUFFER+2], a ; $ff9d - ld [H_MULTIPLYBUFFER+3], a ; $ff9e -.multiplyLoop - ld a, [H_MULTIPLIER] ; $ff99 + ld [H_PRODUCT], a + ld [H_MULTIPLYBUFFER], a + ld [H_MULTIPLYBUFFER+1], a + ld [H_MULTIPLYBUFFER+2], a + ld [H_MULTIPLYBUFFER+3], a +.loop + ld a, [H_MULTIPLIER] srl a - ld [H_MULTIPLIER], a ; $ff99 - jr nc, .smallMultiplier ; less than $80 -; code to possibly multiply the multiplicand by 2 and divide the multiplier by 2? + ld [H_MULTIPLIER], a ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) + jr nc, .smallMultiplier ld a, [H_MULTIPLYBUFFER+3] ld c, a ld a, [H_MULTIPLICAND+2] @@ -23,82 +22,83 @@ _Multiply: ; 37d41 (d:7d41) ld a, [H_MULTIPLICAND+1] adc c ld [H_MULTIPLYBUFFER+2], a - ld a, [H_MULTIPLYBUFFER+1] ; $ff9c + ld a, [H_MULTIPLYBUFFER+1] ld c, a - ld a, [H_MULTIPLICAND] ; $ff96 + ld a, [H_MULTIPLICAND] ; (aliases: H_MULTIPLICAND) adc c - ld [H_MULTIPLYDBUFFER+1], a ; $ff9c + ld [H_MULTIPLYBUFFER+1], a ld a, [H_MULTIPLYBUFFER] ld c, a - ld a, [H_PRODUCT] ; $ff95 + ld a, [H_PRODUCT] ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) adc c ld [H_MULTIPLYBUFFER], a .smallMultiplier dec b jr z, .done - ld a, [H_MULTIPLICAND] + ld a, [H_MULTIPLICAND+2] sla a ld [H_MULTIPLICAND+2], a ld a, [H_MULTIPLICAND+1] rl a ld [H_MULTIPLICAND+1], a - ld a, [H_MULTIPLICAND] ; $ff96 + ld a, [H_MULTIPLICAND] rl a - ld [H_MULTIPLICAND], a ; $ff96 - ld a, [H_PRODUCT] ; $ff95 + ld [H_MULTIPLICAND], a + ld a, [H_PRODUCT] rl a - ld [H_PRODUCT], a ; $ff95 - jr .multiplyLoop + ld [H_PRODUCT], a + jr .loop .done ld a, [H_MULTIPLYBUFFER+3] ld [H_PRODUCT+3], a ld a, [H_MULTIPLYBUFFER+2] ld [H_PRODUCT+2], a - ld a, [H_MULTIPLYBUFFER+1] ; $ff9c - ld [H_PRODUCT+1], a ; $ff96 - ld [H_PRODUCT], a ; $ff95 + ld a, [H_MULTIPLYBUFFER+1] + ld [H_PRODUCT+1], a + ld a, [H_MULTIPLYBUFFER] + ld [H_PRODUCT], a ret _Divide: ; 37da5 (d:7da5) xor a - ld [H_DIVIDEBUFFER], a ; ff9a - ld [H_DIVIDEBUFFER+1], a ; ff9b - ld [H_DIVIDEBUFFER+2], a ; ff9c - ld [H_DIVIDEBUFFER+3], a ; ff9d - ld [H_DIVIDEBUFFER+4], a ; ff9e + ld [H_DIVIDEBUFFER], a + ld [H_DIVIDEBUFFER+1], a + ld [H_DIVIDEBUFFER+2], a + ld [H_DIVIDEBUFFER+3], a + ld [H_DIVIDEBUFFER+4], a ld a, $9 ld e, a .asm_37db3 ld a, [H_DIVIDEBUFFER] ld c, a - ld a, [H_DIVIDEND+1] ; $ff96 + ld a, [H_DIVIDEND+1] ; (aliases: H_MULTIPLICAND) sub c ld d, a - ld a, [H_DIVISOR] ; $ff99 + ld a, [H_DIVISOR] ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld c, a - ld a, [H_DIVIDEND] ; $ff95 + ld a, [H_DIVIDEND] ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) sbc c jr c, .asm_37dce - ld [H_DIVIDEND], a ; $ff95 + ld [H_DIVIDEND], a ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) ld a, d - ld [H_DIVIDEND+1], a ; $ff96 + ld [H_DIVIDEND+1], a ; (aliases: H_MULTIPLICAND) ld a, [H_DIVIDEBUFFER+4] inc a ld [H_DIVIDEBUFFER+4], a jr .asm_37db3 .asm_37dce - ld a, b + ld a, b cp $1 - jr z, .done + jr z, .asm_37e18 ld a, [H_DIVIDEBUFFER+4] sla a ld [H_DIVIDEBUFFER+4], a ld a, [H_DIVIDEBUFFER+3] rl a ld [H_DIVIDEBUFFER+3], a - ld a, [H_DIVIDEBUFFER+2] ; $ff9c + ld a, [H_DIVIDEBUFFER+2] rl a - ld [H_DIVIDEBUFFER+2], a ; $ff9c + ld [H_DIVIDEBUFFER+2], a ld a, [H_DIVIDEBUFFER+1] rl a ld [H_DIVIDEBUFFER+1], a @@ -107,13 +107,13 @@ _Divide: ; 37da5 (d:7da5) ld a, $8 ld e, a ld a, [H_DIVIDEBUFFER] - ld [H_DIVISOR], a ; $ff99 + ld [H_DIVISOR], a ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) xor a ld [H_DIVIDEBUFFER], a - ld a, [H_DIVIDEND+1] ; $ff96 - ld [H_DIVIDEND], a ; $ff95 + ld a, [H_DIVIDEND+1] ; (aliases: H_MULTIPLICAND) + ld [H_DIVIDEND], a ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) 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 [H_DIVIDEND+2], a .asm_37e04 @@ -122,22 +122,22 @@ _Divide: ; 37da5 (d:7da5) jr nz, .asm_37e0a dec b .asm_37e0a - ld a, [H_DIVIDEND+4] ; $ff99 + ld a, [H_DIVISOR] ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) srl a - ld [H_REMAINDER], a ; $ff99 + ld [H_DIVISOR], a ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld a, [H_DIVIDEBUFFER] rr a ld [H_DIVIDEBUFFER], a jr .asm_37db3 -.done - ld a, [H_DIVIDEND+1] ; $ff96 - ld [H_REMAINDER], a ; $ff99 +.asm_37e18 + ld a, [H_DIVIDEND+1] ; (aliases: H_MULTIPLICAND) + ld [H_REMAINDER], a ; (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN) ld a, [H_DIVIDEBUFFER+4] ld [H_QUOTIENT+3], a ld a, [H_DIVIDEBUFFER+3] ld [H_QUOTIENT+2], a - ld a, [H_DIVIDEBUFFER+2] ; $ff9c - ld [H_QUOTIENT+1], a ; $ff96 + ld a, [H_DIVIDEBUFFER+2] + ld [H_QUOTIENT+1], a ; (aliases: H_MULTIPLICAND) ld a, [H_DIVIDEBUFFER+1] - ld [H_QUOTIENT], a ; $ff95 - ret + ld [H_DIVIDEND], a ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT) + ret \ No newline at end of file -- cgit v1.3.1-sl0p