You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.7 KiB
80 lines
1.7 KiB
.include "instr.inc"
|
|
.text
|
|
|
|
.global _start
|
|
_start:
|
|
# Check if the program is running from the right address
|
|
push_pc
|
|
pop_r3
|
|
cp_r3 _start
|
|
jp_eq main
|
|
ld_r2_r3
|
|
add_r2 (str_wrong_address - _start)
|
|
jp PrintStr
|
|
|
|
main:
|
|
ld_r2 str_intro
|
|
call PrintStr
|
|
|
|
# Ask for input, continue if user confirms
|
|
ld_r2 mem_input
|
|
ld_r3 7
|
|
call ReadStr
|
|
|
|
ldr_r0 mem_input
|
|
cp_r0 'Y'
|
|
jp_eq check
|
|
cp_r0 'y'
|
|
jp_eq check
|
|
cp_r0 ('Y' + '\n' * 0x100)
|
|
jp_eq check
|
|
cp_r0 ('y' + '\n' * 0x100)
|
|
jp_eq check
|
|
|
|
# The user hasn't confirmed
|
|
ld_r2 str_aborted
|
|
call PrintStr
|
|
ret
|
|
|
|
check:
|
|
copr 0x66
|
|
loop:
|
|
copr 0x64
|
|
call 0x3009
|
|
copr 0x65
|
|
cp_r0 2
|
|
jp_eq fail
|
|
cp_r0 1
|
|
jp_eq loop
|
|
ret
|
|
|
|
fail:
|
|
ld_r2 str_unsuccessful
|
|
call PrintStr
|
|
ret
|
|
|
|
str_intro:
|
|
.ascii "Glitch Research Laboratory Math Coprocessor\n"
|
|
.ascii "Testing Software: Function SQRT\n"
|
|
.ascii "\n"
|
|
.ascii "This program will test the SQRT function of the math module.\n"
|
|
.ascii "This function, executable with CALL 0x3009, should compute the\n"
|
|
.ascii "integer part of sqrt(R0) and return it in R0 (preserving R1-R3).\n"
|
|
.ascii "\n"
|
|
.ascii "Math module results will be compared with the coprocessor.\n"
|
|
.ascii "Note - if math module is not loaded, this test might crash the machine!\n"
|
|
.ascii "Report any bugs to administrator: ax.arwen@glitchlabsresearch.internal\n"
|
|
.ascii "\n"
|
|
.ascii "Continue with running the test (Y/N): \0"
|
|
|
|
str_aborted:
|
|
.ascii "Aborted.\n\0"
|
|
|
|
str_unsuccessful:
|
|
.ascii "Test was unsuccessful.\n\0"
|
|
|
|
str_wrong_address:
|
|
.ascii "Please load this program at address $2000.\n\0"
|
|
|
|
mem_input:
|
|
.ascii "________\0"
|
|
|