DragonVM/extra/dss/tests/extmov_unit_tests.dss

751 lines
No EOL
12 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
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