diff options
author | Rangi <remy.oukaour+rangi42@gmail.com> | 2018-04-04 23:56:40 -0400 |
---|---|---|
committer | Rangi <remy.oukaour+rangi42@gmail.com> | 2018-04-04 23:56:40 -0400 |
commit | 81306889e33c599f8015bc4e653929bb7de00967 (patch) | |
tree | 7a812968ba565a13ef400cdcb5230e6e8185a1ec /engine/math/get_square_root.asm | |
parent | 145efc13535fbc9d8ab2786d29209d97aebf0481 (diff) | |
parent | f750d4f4185529cfb440ac7825d202ebcf160766 (diff) |
Merge branch 'master' of https://github.com/pret/pokecrystal
Diffstat (limited to 'engine/math/get_square_root.asm')
-rw-r--r-- | engine/math/get_square_root.asm | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/engine/math/get_square_root.asm b/engine/math/get_square_root.asm new file mode 100644 index 000000000..412fd04ff --- /dev/null +++ b/engine/math/get_square_root.asm @@ -0,0 +1,32 @@ +NUM_SQUARE_ROOTS EQU 255 + +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 NUM_SQUARE_ROOTS + 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 +x = 1 +rept NUM_SQUARE_ROOTS + dw x * x +x = x + 1 +endr |