ref: 767cc1376b076db56a6773d49a129d6acc6a5378
parent: 37355aef99a0172fe3cf260b2368af8fac8cc60a
author: yenatch <[email protected]>
date: Thu Feb 28 12:28:35 EST 2013
GetSquareRoot
--- a/main.asm
+++ b/main.asm
@@ -4805,7 +4805,39 @@
ret
; 0x12e1b
-INCBIN "baserom.gbc",$12e1b,$13d96 - $12e1b
+INCBIN "baserom.gbc",$12e1b,$13b87 - $12e1b
+
+GetSquareRoot: ; 13b87
+; Return the square root of de in b.
+
+; Rather than calculating the result, we take the index of the
+; first value in a table of squares that isn't lower than de.
+
+ ld hl, Squares
+ ld b, 0
+.loop
+; Make sure we don't go past the end of the table.
+ inc b
+ ld a, b
+ cp $ff
+ ret z
+
+; Iterate over the table until b**2 >= de.
+ ld a, [hli]
+ sub e
+ ld a, [hli]
+ sbc d
+
+ jr c, .loop
+ ret
+
+Squares: ; 13b98
+root set 1
+ rept $ff
+ dw root*root
+root set root+1
+ endr
+; 13d96
SECTION "bank5",DATA,BANK[$5]