Cleaned up `engine/routines`, in favor of moving files into more appropriate directories. predef-related routines are now in top-level `engine`. `rtc/delete_save_change_clock.asm` has been split into both `menus/delete_save.asm` and `rtc/reset_password.asm`. Made a new subdirectory: * engine/math: Contains all generic math-related routines.
33 lines
515 B
NASM
33 lines
515 B
NASM
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
|