714 lines
No EOL
11 KiB
Text
714 lines
No EOL
11 KiB
Text
.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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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
|
|
%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 |