summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryenatch <yenatch@gmail.com>2013-09-09 01:21:36 -0400
committeryenatch <yenatch@gmail.com>2013-09-09 01:21:36 -0400
commit53b7926f5e2c06384f228dccd03c70c960ae16b0 (patch)
tree3563d2499a1cbc26f563fd92247a611b41ffef8e
parentee04a2fcd9c0da06f8d960c4627d6d2276e7de23 (diff)
move multiplication/division functions into common/math.asm
-rw-r--r--common/math.asm76
-rw-r--r--main.asm76
2 files changed, 77 insertions, 75 deletions
diff --git a/common/math.asm b/common/math.asm
new file mode 100644
index 000000000..87a00c412
--- /dev/null
+++ b/common/math.asm
@@ -0,0 +1,76 @@
+SimpleMultiply: ; 3105
+; Return a * c.
+ and a
+ ret z
+
+ push bc
+ ld b, a
+ xor a
+.loop
+ add c
+ dec b
+ jr nz, .loop
+ pop bc
+ ret
+; 3110
+
+
+SimpleDivide: ; 3110
+; Divide a by c. Return quotient b and remainder a.
+ ld b, 0
+.loop
+ inc b
+ sub c
+ jr nc, .loop
+ dec b
+ add c
+ ret
+; 3119
+
+
+Multiply: ; 3119
+; Multiply hMultiplicand (3 bytes) by hMultiplier. Result in hProduct.
+; All values are big endian.
+ push hl
+ push bc
+
+ callab _Multiply
+
+ pop bc
+ pop hl
+ ret
+; 3124
+
+
+Divide: ; 3124
+; Divide hDividend length b (max 4 bytes) by hDivisor. Result in hQuotient.
+; All values are big endian.
+ push hl
+ push de
+ push bc
+ ld a, [hROMBank]
+ push af
+ ld a, BANK(_Divide)
+ rst Bankswitch
+
+ call _Divide
+
+ pop af
+ rst Bankswitch
+ pop bc
+ pop de
+ pop hl
+ ret
+; 3136
+
+
+SubtractSigned: ; 3136
+; Return a - b, sign in carry.
+ sub b
+ ret nc
+ cpl
+ add 1
+ scf
+ ret
+; 313d
+
diff --git a/main.asm b/main.asm
index 7dfdbc060..f805a700e 100644
--- a/main.asm
+++ b/main.asm
@@ -861,81 +861,7 @@ AddNTimes: ; 0x30fe
; 0x3105
-SimpleMultiply: ; 3105
-; Return a * c.
- and a
- ret z
-
- push bc
- ld b, a
- xor a
-.loop
- add c
- dec b
- jr nz, .loop
- pop bc
- ret
-; 3110
-
-
-SimpleDivide: ; 3110
-; Divide a by c. Return quotient b and remainder a.
- ld b, 0
-.loop
- inc b
- sub c
- jr nc, .loop
- dec b
- add c
- ret
-; 3119
-
-
-Multiply: ; 3119
-; Multiply hMultiplicand (3 bytes) by hMultiplier. Result in hProduct.
-; All values are big endian.
- push hl
- push bc
-
- callab _Multiply
-
- pop bc
- pop hl
- ret
-; 3124
-
-
-Divide: ; 3124
-; Divide hDividend length b (max 4 bytes) by hDivisor. Result in hQuotient.
-; All values are big endian.
- push hl
- push de
- push bc
- ld a, [hROMBank]
- push af
- ld a, BANK(_Divide)
- rst Bankswitch
-
- call _Divide
-
- pop af
- rst Bankswitch
- pop bc
- pop de
- pop hl
- ret
-; 3136
-
-
-SubtractSigned: ; 3136
-; Return a - b, sign in carry.
- sub b
- ret nc
- cpl
- add 1
- scf
- ret
-; 313d
+INCLUDE "common/math.asm"
PrintLetterDelay: ; 313d