.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"