.load 0x1740 @define EXT_MOV 0xE0 ## @define wimm_in_dreg_immoffw 0x10 ## @define wimm_in_dreg_regoff 0x11 ## @define wimm_in_dreg_immoffb 0x12 @define bimm_in_dreg_immoffw 0x13 @define bimm_in_dreg_regoff 0x14 @define bimm_in_dreg_immoffb 0x15 ## @define wdreg_in_dreg_immoffw 0x16 ## @define wdreg_in_dreg_regoff 0x17 ## @define wdreg_in_dreg_immoffb 0x18 @define bdreg_in_dreg_immoffw 0x19 @define bdreg_in_dreg_regoff 0x1A @define bdreg_in_dreg_immoffb 0x1B @define wimm_in_mem_immoffw 0x30 @define wimm_in_mem_regoff 0x31 @define wimm_in_mem_immoffb 0x32 @define bimm_in_mem_immoffw 0x33 @define bimm_in_mem_regoff 0x34 @define bimm_in_mem_immoffb 0x35 @define wdreg_immoffw_in_dreg 0x40 @define wdreg_regoff_in_dreg 0x41 @define wdreg_immoffb_in_dreg 0x42 @define bdreg_immoffw_in_dreg 0x43 @define bdreg_regoff_in_dreg 0x44 @define bdreg_immoffb_in_dreg 0x45 @define wmem_immoffw_in_reg 0x50 @define wmem_regoff_in_reg 0x51 @define wmem_immoffb_in_reg 0x52 @define bmem_immoffw_in_reg 0x53 @define bmem_regoff_in_reg 0x54 @define bmem_immoffb_in_reg 0x55 @define wdreg_immoffw_in_reg 0x56 @define wdreg_regoff_in_reg 0x57 @define wdreg_immoffb_in_reg 0x58 @define bdreg_immoffw_in_reg 0x59 @define bdreg_regoff_in_reg 0x5A @define bdreg_immoffb_in_reg 0x5B @define _IP 0x00 @define _SP 0x01 @define _FP 0x02 @define _RV 0x03 @define _PP 0x04 @define _FL 0x05 @define _ACC 0x06 @define _S1 0x07 @define _S2 0x08 @define _S3 0x09 @define _R1 0x0A @define _R2 0x0B @define _R3 0x0C @define _R4 0x0D @define _R5 0x0E @define _R6 0x0F @define _R7 0x10 @define _R8 0x11 @define _R9 0x12 @define _R10 0x13 .code mov R5, 0x00 ## R5 is the test counter mov R6, 0x00 ## R6 is used as flag set if one test fails mov R10, 0xE0 ## Clear the screen int 0x30 ## -- ## debug_break ## ------ Test 1 ------ debug_break inc R5 mov R1, 0x3000 inc R8 omov *R1, 0xFAAA, word 0x02 ## %low EXT_MOV wimm_in_dreg_immoffw _R1 0xFA 0xAA 0x00 0x02 add R1, 0x02 mov R1, ACC mov ACC, *R1 jeq $test_1_passed, 0xFAAA push 0 call $test_failed inc R6 test_1_passed: ## ------ Test 2 ------ ## debug_break inc R5 mov R1, 0x3000 mov R2, 0x03 omov *R1, 0xFAAA, R2 ## %low EXT_MOV wimm_in_dreg_regoff _R1 0xFA 0xAA _R2 add R1, 0x03 mov R1, ACC mov ACC, *R1 jeq $test_2_passed, 0xFAAA push 0 call $test_failed inc R6 test_2_passed: ## ------ Test 3 ------ ## debug_break inc R5 mov R1, 0x3000 omov *R1, 0xFAAA, 0x04 ## %low EXT_MOV wimm_in_dreg_immoffb _R1 0xFA 0xAA 0x04 add R1, 0x04 mov R1, ACC mov ACC, *R1 jeq $test_3_passed, 0xFAAA push 0 call $test_failed inc R6 test_3_passed: ## ------ Test 4 ------ ## debug_break inc R5 mov R1, 0x3000 omovb *R1, 0xEE, word 0x06 ## %low EXT_MOV bimm_in_dreg_immoffw _R1 0xEE 0x00 0x06 add R1, 0x06 mov R1, ACC movb ACC, *R1 jeq $test_4_passed, 0xEE push 0 call $test_failed inc R6 test_4_passed: ## ------ Test 5 ------ ## debug_break inc R5 mov R1, 0x3000 mov R2, 0x06 omovb *R1, 0x11, R2 ## %low EXT_MOV bimm_in_dreg_regoff _R1 0x11 _R2 add R1, 0x06 mov R1, ACC movb ACC, *R1 jeq $test_5_passed, 0x11 push 0 call $test_failed inc R6 test_5_passed: ## ------ Test 6 ------ ## debug_break inc R5 mov R1, 0x3000 omovb *R1, 0x22, 0x08 ## %low EXT_MOV bimm_in_dreg_immoffb _R1 0x22 0x08 add R1, 0x08 mov R1, ACC movb ACC, *R1 jeq $test_6_passed, 0x22 push 0 call $test_failed inc R6 test_6_passed: ## ------ Test 7 ------ ## debug_break inc R5 mov R1, 0x5000 mov R3, 0x4000 mov *R3, 0x33 omov *R1, *R3, word 0x0A ## %low EXT_MOV wdreg_in_dreg_immoffw _R1 _R3 0x00 0x0A add R1, 0x0A mov R1, ACC mov ACC, *R1 jeq $test_7_passed, 0x33 push 0 call $test_failed inc R6 test_7_passed: ## ------ Test 8 ------ ## debug_break inc R5 mov R1, 0x5000 mov R3, 0x4000 mov *R3, 0x44 mov R2, 0x0C omov *R1, *R3, R2 ## %low EXT_MOV wdreg_in_dreg_regoff _R1 _R3 _R2 add R1, 0x0C mov R1, ACC mov ACC, *R1 jeq $test_8_passed, 0x44 push 0 call $test_failed inc R6 test_8_passed: ## ------ Test 9 ------ ## debug_break inc R5 mov R1, 0x5000 mov R3, 0x4000 mov *R3, 0x55 omov *R1, *R3, 0x0E ## %low EXT_MOV wdreg_in_dreg_immoffb _R1 _R3 0x0E add R1, 0x0E mov R1, ACC mov ACC, *R1 jeq $test_9_passed, 0x55 push 0 call $test_failed inc R6 test_9_passed: ## ------ Test 10 ------ ## debug_break inc R5 mov R1, 0x6000 mov R3, 0x5000 movb *R3, 0x66 omovb *R1, *R3, word 0x10 ## %low EXT_MOV bdreg_in_dreg_immoffw _R1 _R3 0x00 0x10 add R1, 0x10 mov R1, ACC movb ACC, *R1 jeq $test_10_passed, 0x66 push 0 call $test_failed inc R6 test_10_passed: ## ------ Test 11 ------ ## debug_break inc R5 mov R1, 0x6000 mov R3, 0x5000 movb *R3, 0x77 mov R2, 0x12 omovb *R1, *R3, R2 ## %low EXT_MOV bdreg_in_dreg_regoff _R1 _R3 _R2 add R1, 0x12 mov R1, ACC movb ACC, *R1 jeq $test_11_passed, 0x77 push 0 call $test_failed inc R6 test_11_passed: ## ------ Test 12 ------ ## debug_break inc R5 mov R1, 0x6000 mov R3, 0x5000 movb *R3, 0x88 omovb *R1, *R3, 0x14 ## %low EXT_MOV bdreg_in_dreg_immoffb _R1 _R3 0x14 add R1, 0x14 mov R1, ACC movb ACC, *R1 jeq $test_12_passed, 0x88 push 0 call $test_failed inc R6 test_12_passed: ## ------ Test 13 ------ ## debug_break inc R5 omov [0x7000], 0xAA99, word 0x16 ## %low EXT_MOV wimm_in_mem_immoffw 0x70 0x00 0xAA 0x99 0x00 0x16 mov R1, 0x7000 add R1, 0x16 mov R1, ACC mov ACC, *R1 jeq $test_13_passed, 0xAA99 push 0 call $test_failed inc R6 test_13_passed: ## ------ Test 14 ------ ## debug_break inc R5 mov R2, 0x18 omov [0x7000], 0xAAAA, R2 ## %low EXT_MOV wimm_in_mem_regoff 0x70 0x00 0xAA 0xAA _R2 mov R1, 0x7000 add R1, 0x18 mov R1, ACC mov ACC, *R1 jeq $test_14_passed, 0xAAAA push 0 call $test_failed inc R6 test_14_passed: ## ------ Test 15 ------ ## debug_break inc R5 omov [0x7000], 0xAABB, 0x1A ## %low EXT_MOV wimm_in_mem_immoffb 0x70 0x00 0xAA 0xBB 0x1A mov R1, 0x7000 add R1, 0x1A mov R1, ACC mov ACC, *R1 jeq $test_15_passed, 0xAABB push 0 call $test_failed inc R6 test_15_passed: ## ------ Test 16 ------ ## debug_break inc R5 omovb [0x8000], 0xCC, word 0x1C ## %low EXT_MOV bimm_in_mem_immoffw 0x80 0x00 0xCC 0x00 0x1C mov R1, 0x8000 add R1, 0x1C mov R1, ACC movb ACC, *R1 jeq $test_16_passed, 0xCC push 0 call $test_failed inc R6 test_16_passed: ## ------ Test 17 ------ ## debug_break inc R5 mov R2, 0x1E omovb [0x8000], 0xDD, R2 ## %low EXT_MOV bimm_in_mem_regoff 0x80 0x00 0xDD _R2 mov R1, 0x8000 add R1, 0x1E mov R1, ACC movb ACC, *R1 jeq $test_17_passed, 0xDD push 0 call $test_failed inc R6 test_17_passed: ## ------ Test 18 ------ ## debug_break inc R5 omovb [0x8000], 0xEE, 0x20 ## %low EXT_MOV bimm_in_mem_immoffb 0x80 0x00 0xEE 0x20 mov R1, 0x8000 add R1, 0x20 mov R1, ACC movb ACC, *R1 jeq $test_18_passed, 0xEE push 0 call $test_failed inc R6 test_18_passed: ## ------ Test 19 ------ ## debug_break inc R5 mov R1, 0x9000 mov R3, 0xA000 mov [0xA022], 0x66 movo *R1, *R3, word 0x22 ## %low EXT_MOV wdreg_immoffw_in_dreg _R1 _R3 0x00 0x22 mov ACC, *R1 jeq $test_19_passed, 0x66 push 0 call $test_failed inc R6 test_19_passed: ## ------ Test 20 ------ ## debug_break inc R5 mov R1, 0x9000 mov R3, 0xA000 mov [0xA033], 0x77 mov R2, 0x33 movo *R1, *R3, R2 ## %low EXT_MOV wdreg_regoff_in_dreg _R1 _R3 _R2 mov ACC, *R1 jeq $test_20_passed, 0x77 push 0 call $test_failed inc R6 test_20_passed: ## ------ Test 21 ------ ## debug_break inc R5 mov R1, 0x9000 mov R3, 0xA000 mov [0xA044], 0x88 movo *R1, *R3, 0x44 ## %low EXT_MOV wdreg_immoffb_in_dreg _R1 _R3 0x44 mov ACC, *R1 jeq $test_21_passed, 0x88 push 0 call $test_failed inc R6 test_21_passed: ## ------ Test 22 ------ ## debug_break inc R5 mov R1, 0xA000 mov R3, 0xB000 movb [0xB055], 0x99 movbo *R1, *R3, word 0x55 ## %low EXT_MOV bdreg_immoffw_in_dreg _R1 _R3 0x00 0x55 movb ACC, *R1 jeq $test_22_passed, 0x99 push 0 call $test_failed inc R6 test_22_passed: ## ------ Test 23 ------ ## debug_break inc R5 mov R1, 0xA000 mov R3, 0xB000 movb [0xB066], 0xAA mov R2, 0x66 movbo *R1, *R3, R2 ## %low EXT_MOV bdreg_regoff_in_dreg _R1 _R3 _R2 movb ACC, *R1 jeq $test_23_passed, 0xAA push 0 call $test_failed inc R6 test_23_passed: ## ------ Test 24 ------ ## debug_break inc R5 mov R1, 0xA000 mov R3, 0xB000 movb [0xB077], 0xBB movbo *R1, *R3, 0x77 ## %low EXT_MOV bdreg_immoffb_in_dreg _R1 _R3 0x77 movb ACC, *R1 jeq $test_24_passed, 0xBB push 0 call $test_failed inc R6 test_24_passed: ## ------ Test 25 ------ ## debug_break inc R5 mov [0xC088], 0xCC movo R1, [0xC000], word 0x88 ## %low EXT_MOV wmem_immoffw_in_reg _R1 0xC0 0x00 0x00 0x88 mov ACC, R1 jeq $test_25_passed, 0xCC push 0 call $test_failed inc R6 test_25_passed: ## ------ Test 26 ------ ## debug_break inc R5 mov [0xC099], 0xDD mov R2, 0x99 movo R1, [0xC000], R2 ## %low EXT_MOV wmem_regoff_in_reg _R1 0xC0 0x00 _R2 mov ACC, R1 jeq $test_26_passed, 0xDD push 0 call $test_failed inc R6 test_26_passed: ## ------ Test 27 ------ ## debug_break inc R5 mov [0xC0AA], 0xEE movo R1, [0xC000], 0xAA ## %low EXT_MOV wmem_immoffb_in_reg _R1 0xC0 0x00 0xAA mov ACC, R1 jeq $test_27_passed, 0xEE push 0 call $test_failed inc R6 test_27_passed: ## ------ Test 28 ------ ## debug_break inc R5 movb [0xD099], 0x11 movbo R1, [0xD000], word 0x99 ## %low EXT_MOV bmem_immoffw_in_reg _R1 0xD0 0x00 0x00 0x99 mov ACC, R1 jeq $test_28_passed, 0x11 push 0 call $test_failed inc R6 test_28_passed: ## ------ Test 29 ------ ## debug_break inc R5 movb [0xD0AA], 0x22 mov R2, 0xAA movbo R1, [0xD000], R2 ## %low EXT_MOV bmem_regoff_in_reg _R1 0xD0 0x00 _R2 mov ACC, R1 jeq $test_29_passed, 0x22 push 0 call $test_failed inc R6 test_29_passed: ## ------ Test 30 ------ ## debug_break inc R5 movb [0xD0BB], 0x33 movbo R1, [0xD000], 0xBB ## %low EXT_MOV bmem_immoffb_in_reg _R1 0xD0 0x00 0xBB mov ACC, R1 jeq $test_30_passed, 0x33 push 0 call $test_failed inc R6 test_30_passed: ## ------ Test 31 ------ ## debug_break inc R5 mov R3, 0x4000 mov [0x40CC], 0x44 movo R1, *R3, word 0xCC ## %low EXT_MOV wdreg_immoffw_in_reg _R1 _R3 0x00 0xCC mov ACC, R1 jeq $test_31_passed, 0x44 push 0 call $test_failed inc R6 test_31_passed: ## ------ Test 32 ------ ## debug_break inc R5 mov R3, 0x4000 mov [0x40DD], 0x55 mov R2, 0xDD movo R1, *R3, R2 ## %low EXT_MOV wdreg_regoff_in_reg _R1 _R3 _R2 mov ACC, R1 jeq $test_32_passed, 0x55 push 0 call $test_failed inc R6 test_32_passed: ## ------ Test 33 ------ ## debug_break inc R5 mov R3, 0x4000 mov [0x40EE], 0x66 movo R1, *R3, 0xEE ## %low EXT_MOV wdreg_immoffb_in_reg _R1 _R3 0xEE mov ACC, R1 jeq $test_33_passed, 0x66 push 0 call $test_failed inc R6 test_33_passed: ## ------ Test 34 ------ ## debug_break inc R5 mov R3, 0x5000 movb [0x5011], 0x77 movbo R1, *R3, word 0x11 ## %low EXT_MOV bdreg_immoffw_in_reg _R1 _R3 0x00 0x11 mov ACC, R1 jeq $test_34_passed, 0x77 push 0 call $test_failed inc R6 test_34_passed: ## ------ Test 35 ------ ## debug_break inc R5 mov R3, 0x5000 movb [0x5022], 0x88 mov R2, 0x22 movbo R1, *R3, R2 ## %low EXT_MOV bdreg_regoff_in_reg _R1 _R3 _R2 mov ACC, R1 jeq $test_35_passed, 0x88 push 0 call $test_failed inc R6 test_35_passed: ## ------ Test 36 ------ ## debug_break inc R5 mov R3, 0x5000 movb [0x5033], 0x99 movbo R1, *R3, 0x33 ## %low EXT_MOV bdreg_immoffb_in_reg _R1 _R3 0x33 mov ACC, R1 jeq $test_36_passed, 0x99 push 0 call $test_failed inc R6 test_36_passed: ## ------- END ------- debug_break movb ACC, [$test_count] sub ACC, R6 mov R6, ACC mov R10, 0x03 mov R9, $tests_pass_str int 0x30 mov R10, 0x01 mov R9, 32 int 0x30 mov R10, 0x04 mov R9, R6 int 0x30 mov R10, 0x01 mov R9, 47 int 0x30 mov R10, 0x04 movb R9, [$test_count] int 0x30 mov R10, 0x02 int 0x30 end: jmp $end hlt test_failed: mov R10, 0x03 mov R9, $test_fail_str int 0x30 mov R10, 0x01 mov R9, 32 int 0x30 mov R10, 0x04 mov R9, R5 int 0x30 mov R10, 0x02 int 0x30 ret .data $test_fail_str "FAIL: Test" $tests_pass_str "Tests passed:" $test_count 36