858 lines
12 KiB
JavaScript
858 lines
12 KiB
JavaScript
; -------------------------------------------------
|
|
; PROJECT "itest"
|
|
; -------------------------------------------------
|
|
|
|
include "../../../jasm/cregs.inc.jsm"
|
|
|
|
; -------------------------------------------------
|
|
xmem
|
|
msg: dc "Hallo", 0
|
|
xram: db 256
|
|
|
|
cmem 0
|
|
cram: db 256
|
|
|
|
reg_revision: equ 0x00
|
|
reg_testid: equ 0x01
|
|
|
|
; -------------------------------------------------
|
|
code
|
|
org 0x000
|
|
reset: jmp start
|
|
|
|
; -------------------------------------------------
|
|
org 0x001
|
|
int_vec: jmp isr
|
|
|
|
; -------------------------------------------------
|
|
org 0x010
|
|
|
|
start: call init
|
|
cin R0, (cpu_revision)
|
|
xout (reg_revision), R0
|
|
|
|
; Test 0
|
|
call test0
|
|
|
|
; Test 1
|
|
mov R0, 1
|
|
xout (reg_testid), R0
|
|
call test1
|
|
|
|
; Test 2
|
|
mov R0, 2
|
|
xout (reg_testid), R0
|
|
call test2
|
|
|
|
; Test 3
|
|
mov R0, 3
|
|
xout (reg_testid), R0
|
|
call test3
|
|
|
|
; Test 4
|
|
mov R0, 4
|
|
xout (reg_testid), R0
|
|
call test4
|
|
|
|
; Test 5
|
|
mov R0, 5
|
|
xout (reg_testid), R0
|
|
call test5
|
|
|
|
; Test 6
|
|
mov R0, 6
|
|
xout (reg_testid), R0
|
|
call test6
|
|
|
|
; Test 7
|
|
mov R0, 7
|
|
xout (reg_testid), R0
|
|
call test7
|
|
|
|
; Test 8
|
|
mov R0, 8
|
|
xout (reg_testid), R0
|
|
call test8
|
|
|
|
; Test 9
|
|
mov R0, 9
|
|
xout (reg_testid), R0
|
|
call test9
|
|
|
|
; Test 10
|
|
mov R0, 10
|
|
xout (reg_testid), R0
|
|
call test10
|
|
|
|
; Test 11
|
|
mov R0, 11
|
|
xout (reg_testid), R0
|
|
call test11
|
|
|
|
; Test 12
|
|
mov R0, 12
|
|
xout (reg_testid), R0
|
|
call test12
|
|
|
|
; End of test
|
|
mov R0, 0xFF
|
|
xout (reg_testid), R0
|
|
|
|
jmp ok
|
|
|
|
; -------------------------------------------------
|
|
init: mov R0, 0
|
|
mov R1, 0
|
|
mov R2, 0
|
|
mov R3, 0
|
|
mov R4, 0
|
|
mov R5, 0
|
|
mov R6, 0
|
|
mov R7, 0
|
|
mov R8, 0
|
|
mov R9, 0
|
|
mov R10, 0
|
|
mov R11, 0
|
|
mov R12, 0
|
|
mov R13, 0
|
|
mov R14, 0
|
|
mov R15, 0
|
|
ret
|
|
|
|
; -------------------------------------------------
|
|
; MOV|R|K
|
|
; MOV|R|R
|
|
test0: mov R0, 0x10
|
|
cmp R0, 0x10
|
|
jne error
|
|
add R0, 1
|
|
|
|
mov R1, R0
|
|
cmp R1, 0x11
|
|
jne error
|
|
add R1, 1
|
|
|
|
mov R2, R1
|
|
cmp R2, 0x12
|
|
jne error
|
|
add R2, 1
|
|
|
|
mov R3, R2
|
|
cmp R3, 0x13
|
|
jne error
|
|
add R3, 1
|
|
|
|
mov R4, R3
|
|
cmp R4, 0x14
|
|
jne error
|
|
add R4, 1
|
|
|
|
mov R5, R4
|
|
cmp R5, 0x15
|
|
jne error
|
|
add R5, 1
|
|
|
|
mov R6, R5
|
|
cmp R6, 0x16
|
|
jne error
|
|
add R6, 1
|
|
|
|
mov R7, R6
|
|
cmp R7, 0x17
|
|
jne error
|
|
add R7, 1
|
|
|
|
mov R8, R7
|
|
cmp R8, 0x18
|
|
jne error
|
|
add R8, 1
|
|
|
|
mov R9, R8
|
|
cmp R9, 0x19
|
|
jne error
|
|
add R9, 1
|
|
|
|
mov R10, R9
|
|
cmp R10, 0x1A
|
|
jne error
|
|
add R10, 1
|
|
|
|
mov R11, R10
|
|
cmp R11, 0x1B
|
|
jne error
|
|
add R11, 1
|
|
|
|
mov R12, R11
|
|
cmp R12, 0x1C
|
|
jne error
|
|
add R12, 1
|
|
|
|
mov R13, R12
|
|
cmp R13, 0x1D
|
|
jne error
|
|
add R13, 1
|
|
|
|
mov R14, R13
|
|
cmp R14, 0x1E
|
|
jne error
|
|
add R14, 1
|
|
|
|
mov R15, R14
|
|
cmp R15, 0x1F
|
|
jne error
|
|
add R15, 1
|
|
|
|
ret
|
|
|
|
; -------------------------------------------------
|
|
; Instruction test
|
|
; TST|R
|
|
; CMP|R|K
|
|
; JNZ|K
|
|
; JC|K
|
|
; JNE|K
|
|
; JLT|K
|
|
; JGT|K
|
|
; JLE|K
|
|
; JGE|K
|
|
; JMP|K
|
|
test1: mov R0, 0 ; R0 <= 0
|
|
tst R0
|
|
jnz error
|
|
jc error
|
|
cmp R0, 0
|
|
jne error
|
|
jlt error
|
|
jgt error
|
|
jle t1_ok10
|
|
jmp error
|
|
|
|
t1_ok10: jeq t1_ok20
|
|
jmp error
|
|
|
|
t1_ok20: jge t1_ok30
|
|
jmp error
|
|
|
|
t1_ok30: cmp R0, 0x55
|
|
jeq error
|
|
jlt t1_ok40
|
|
jmp error
|
|
|
|
t1_ok40: jle t1_ok50
|
|
jmp error
|
|
|
|
t1_ok50: jge error
|
|
jgt error
|
|
|
|
mov R0, 0x55 ; R0 <= 0xAA
|
|
tst R0
|
|
jz error
|
|
jc error
|
|
|
|
cmp R0, 0xAA
|
|
jeq error
|
|
jne t1_ok60
|
|
jmp error
|
|
|
|
t1_ok60: jlt t1_ok70
|
|
jmp error
|
|
|
|
t1_ok70: jle t1_ok80
|
|
jmp error
|
|
|
|
t1_ok80: jgt error
|
|
|
|
cmp R0, 0x55
|
|
jeq t1_ok90
|
|
jmp error
|
|
|
|
t1_ok90: jne error
|
|
jlt error
|
|
|
|
jle t1_ok100
|
|
jmp error
|
|
|
|
t1_ok100: jgt error
|
|
jge t1_ok110
|
|
jmp error
|
|
|
|
t1_ok110: mov R0, 0xAA ; R0 <= 0x55
|
|
tst R0
|
|
jz error
|
|
jc error
|
|
|
|
cmp R0, 0x55
|
|
jeq error
|
|
jne t1_ok120
|
|
jmp error
|
|
|
|
t1_ok120: jgt t1_ok130
|
|
jmp error
|
|
|
|
t1_ok130: jge t1_ok140
|
|
jmp error
|
|
|
|
t1_ok140: jlt error
|
|
jle error
|
|
|
|
ret
|
|
|
|
; -------------------------------------------------
|
|
; ADD|R|K
|
|
; ADDC|R|K
|
|
; ToDo: ADD|R|R
|
|
; ToDo: ADDC|R|R
|
|
; CMP|R|R
|
|
test2: mov R0, 0
|
|
mov R1, 0
|
|
mov R2, R0
|
|
mov R3, R1
|
|
|
|
t2_loop: add R0, 0x01
|
|
addc R1, 0x00
|
|
add R2, 1
|
|
cmp R2, 0
|
|
jne t2_L1
|
|
add R3, 1
|
|
cmp R3, 0x02
|
|
t2_L1: jne t2_loop
|
|
cmp R0, R2
|
|
jne error
|
|
cmp R1, R3
|
|
jne error
|
|
mov R0, 0
|
|
|
|
ret
|
|
|
|
; -------------------------------------------------
|
|
; SUB|R|K
|
|
; SUBC|R|K
|
|
; ToDo: SUB|R|R
|
|
; ToDo: SUBC|R|R
|
|
; CMP|R|R
|
|
test3: mov R0, 0x00
|
|
mov R1, 0x03
|
|
mov R2, R0
|
|
mov R3, R1
|
|
|
|
t3_loop: sub R0, 0x01
|
|
subc R1, 0x00
|
|
sub R2, 1
|
|
cmp R2, 0xFF
|
|
jne t3_L1
|
|
sub R3, 1
|
|
cmp R3, 0x00
|
|
t3_L1: jne t3_loop
|
|
cmp R0, R2
|
|
jne error
|
|
cmp R1, R3
|
|
jne error
|
|
mov R0, 0
|
|
|
|
ret
|
|
; -------------------------------------------------
|
|
; SUB|K|R
|
|
; SUB|R|R
|
|
; SUBC|R|R
|
|
; SUBC|K|R
|
|
; CMP|R|R
|
|
test4: mov R0, 0x03
|
|
mov R1, 0x05
|
|
sub 0x05, R0
|
|
sub R1, 0x03
|
|
cmp R0, R1
|
|
jne error
|
|
mov R0, 0x03
|
|
mov R1, 0x05
|
|
sub R0, R1
|
|
subc 0, R0
|
|
cmp R0, 0x01
|
|
jne error
|
|
add R0, 0
|
|
subc R1, R0
|
|
cmp R1, 0x04
|
|
jne error
|
|
mov R0, 0
|
|
|
|
ret
|
|
|
|
; -------------------------------------------------
|
|
; MOVC|R|Ri
|
|
; MOVC|R|Ki
|
|
; MOVC|Ri|R
|
|
; MOVC|Ri|K
|
|
; MOVC|Ki|R
|
|
test5: mov R0, 1
|
|
movc (cram+0x5A), R0
|
|
dec R0
|
|
movc (cram+0), R0
|
|
movc R1, (cram+0x5A)
|
|
movc (R1), 0xA5
|
|
movc R0, (R1)
|
|
movc R1, (R1)
|
|
add R1, 0xFF-0xA5
|
|
movc R0, (R1)
|
|
t5_loop1: movc (R0), R0
|
|
movc R2, (R0)
|
|
cmp R2, R0
|
|
jne error
|
|
movc (R2), R1
|
|
movc R2, (R2)
|
|
cmp R2, R1
|
|
jne error
|
|
dec R1
|
|
inc R0
|
|
jnz t5_loop1
|
|
|
|
ret
|
|
|
|
; -------------------------------------------------
|
|
; MOVX|R|Ri
|
|
; MOVX|R|Ki
|
|
; MOVX|Ri|R
|
|
; MOVX|Ri|K
|
|
; MOVX|Ki|R
|
|
test6: mov R0, 1
|
|
movx (xram+0x5A), R0
|
|
dec R0
|
|
movx (xram+0), R0
|
|
movx R1, (xram+0x5A)
|
|
movx (R1), 0xA5
|
|
movx R0, (R1)
|
|
movx R1, (R1)
|
|
add R1, 0xFF-0xA5
|
|
movx R0, (R1)
|
|
t6_loop1: movx (R0), R0
|
|
movx R2, (R0)
|
|
cmp R2, R0
|
|
jne error
|
|
movx (R2), R1
|
|
movx R2, (R2)
|
|
cmp R2, R1
|
|
jne error
|
|
dec R1
|
|
inc R0
|
|
jnz t6_loop1
|
|
|
|
ret
|
|
|
|
; -------------------------------------------------
|
|
; PUSH|R
|
|
; POP|R
|
|
test7: mov R0, 0xAA
|
|
mov R1, 0
|
|
t7_loop1: push R0
|
|
inc R0
|
|
dec R1
|
|
jnz t7_loop1
|
|
t7_loop2: pop R0
|
|
dec R1
|
|
jnz t7_loop2
|
|
cmp R0, 0xAA
|
|
jne error
|
|
|
|
ret
|
|
|
|
; -------------------------------------------------
|
|
; JMP|K
|
|
; CALL|K
|
|
; RET
|
|
test8: mov R0, 0x55
|
|
push R0
|
|
mov R0, 0
|
|
mov R1, 0xFF
|
|
call t8_rec
|
|
pop R0
|
|
cmp R0, 0x55
|
|
jne error
|
|
|
|
; Stack manipulations 1
|
|
mov R0, return1'high
|
|
mov R1, return1'low
|
|
cout (cpu_stack_high), R0
|
|
push R1
|
|
|
|
mov R0, init'high
|
|
mov R1, init'low
|
|
cout (cpu_stack_high), R0
|
|
push R1
|
|
ret
|
|
|
|
; Stack manipulations 2
|
|
return1: mov R0, return2'high
|
|
mov R1, return2'low
|
|
cout (cpu_stack_high), R0
|
|
push R1
|
|
|
|
mov R0, init'high
|
|
mov R1, init'low
|
|
cout (cpu_stack_high), R0
|
|
push R1
|
|
return2: ret
|
|
|
|
t8_rec: cmp R0, R1
|
|
jeq ex_t8_rec
|
|
inc R0
|
|
jmp t8_rstub
|
|
ex_t8_rec: dec R0
|
|
dec R1
|
|
ret
|
|
|
|
t8_rstub: call t8_rec
|
|
jmp ex_t8_rec
|
|
|
|
; -------------------------------------------------
|
|
; SWAP|R
|
|
; SHL|R
|
|
; SHR|R
|
|
; ROL|R
|
|
; ROR|R
|
|
; ROLC|R
|
|
; RORC|R
|
|
test9: mov R0, 0xA5 ; SWAP test
|
|
mov R1, 0x5A
|
|
swap R0
|
|
cmp R0, 0x5A
|
|
jne error
|
|
swap R0
|
|
cmp R0, 0xA5
|
|
jne error
|
|
mov R0, 0xD2
|
|
swap R0
|
|
cmp R0, 0x2D
|
|
jne error
|
|
swap R1
|
|
cmp R0, 0x2D
|
|
jne error
|
|
cmp R1, 0xA5
|
|
jne error
|
|
|
|
mov R0, 0x2D
|
|
shl R0 ; SHL test
|
|
cmp R0, 0x5A
|
|
jne error
|
|
shl R0
|
|
cmp R0, 0xB4
|
|
jne error
|
|
shl R0
|
|
cmp R0, 0x68
|
|
jne error
|
|
shl R0
|
|
cmp R0, 0xD0
|
|
jne error
|
|
shl R0
|
|
cmp R0, 0xA0
|
|
jne error
|
|
shl R0
|
|
cmp R0, 0x40
|
|
jne error
|
|
shl R0
|
|
cmp R0, 0x80
|
|
jne error
|
|
shl R0
|
|
cmp R0, 0x00
|
|
jne error
|
|
|
|
mov R1, 0x84
|
|
shr R1 ; SHR test
|
|
cmp R1, 0x42
|
|
jne error
|
|
shr R1
|
|
cmp R1, 0x21
|
|
jne error
|
|
shr R1
|
|
cmp R1, 0x10
|
|
jne error
|
|
shr R1
|
|
cmp R1, 0x08
|
|
jne error
|
|
shr R1
|
|
cmp R1, 0x04
|
|
jne error
|
|
shr R1
|
|
cmp R1, 0x02
|
|
jne error
|
|
shr R1
|
|
cmp R1, 0x01
|
|
jne error
|
|
shr R1
|
|
cmp R1, 0x00
|
|
jne error
|
|
|
|
mov R0, 0xC5 ; ROL test
|
|
rol R0
|
|
cmp R0, 0x8B
|
|
jne error
|
|
rol R0
|
|
cmp R0, 0x17
|
|
jne error
|
|
rol R0
|
|
cmp R0, 0x2E
|
|
jne error
|
|
rol R0
|
|
cmp R0, 0x5C
|
|
jne error
|
|
rol R0
|
|
cmp R0, 0xB8
|
|
jne error
|
|
rol R0
|
|
cmp R0, 0x71
|
|
jne error
|
|
rol R0
|
|
cmp R0, 0xE2
|
|
jne error
|
|
rol R0
|
|
cmp R0, 0xC5
|
|
jne error
|
|
|
|
mov R1, 0x63 ; ROR test
|
|
ror R1
|
|
cmp R1, 0xB1
|
|
jne error
|
|
ror R1
|
|
cmp R1, 0xD8
|
|
jne error
|
|
ror R1
|
|
cmp R1, 0x6C
|
|
jne error
|
|
ror R1
|
|
cmp R1, 0x36
|
|
jne error
|
|
ror R1
|
|
cmp R1, 0x1B
|
|
jne error
|
|
ror R1
|
|
cmp R1, 0x8D
|
|
jne error
|
|
ror R1
|
|
cmp R1, 0xC6
|
|
jne error
|
|
ror R1
|
|
cmp R1, 0x63
|
|
jne error
|
|
|
|
|
|
xor R0, R0 ; ROLC generate
|
|
mov R0, 0xC5
|
|
rolc R0
|
|
push R0
|
|
rolc R0
|
|
push R0
|
|
rolc R0
|
|
push R0
|
|
rolc R0
|
|
push R0
|
|
rolc R0
|
|
push R0
|
|
rolc R0
|
|
push R0
|
|
rolc R0
|
|
push R0
|
|
rolc R0
|
|
push R0
|
|
rolc R0
|
|
|
|
cmp R0, 0xC5 ; ROLC verify
|
|
jne error
|
|
pop R0
|
|
cmp R0, 0x62
|
|
jne error
|
|
pop R0
|
|
cmp R0, 0xB1
|
|
jne error
|
|
pop R0
|
|
cmp R0, 0x58
|
|
jne error
|
|
pop R0
|
|
cmp R0, 0xAC
|
|
jne error
|
|
pop R0
|
|
cmp R0, 0x56
|
|
jne error
|
|
pop R0
|
|
cmp R0, 0x2B
|
|
jne error
|
|
pop R0
|
|
cmp R0, 0x15
|
|
jne error
|
|
pop R0
|
|
cmp R0, 0x8A
|
|
jne error
|
|
|
|
xor R1, R1 ; RORC generate
|
|
mov R1, 0x63
|
|
rorc R1
|
|
push R1
|
|
rorc R1
|
|
push R1
|
|
rorc R1
|
|
push R1
|
|
rorc R1
|
|
push R1
|
|
rorc R1
|
|
push R1
|
|
rorc R1
|
|
push R1
|
|
rorc R1
|
|
push R1
|
|
rorc R1
|
|
push R1
|
|
rorc R1
|
|
|
|
cmp R1, 0x63 ; RORC verify
|
|
jne error
|
|
pop R1
|
|
cmp R1, 0xC6
|
|
jne error
|
|
pop R1
|
|
cmp R1, 0x8C
|
|
jne error
|
|
pop R1
|
|
cmp R1, 0x19
|
|
jne error
|
|
pop R1
|
|
cmp R1, 0x33
|
|
jne error
|
|
pop R1
|
|
cmp R1, 0x66
|
|
jne error
|
|
pop R1
|
|
cmp R1, 0xCC
|
|
jne error
|
|
pop R1
|
|
cmp R1, 0x98
|
|
jne error
|
|
pop R1
|
|
cmp R1, 0x31
|
|
jne error
|
|
|
|
ret
|
|
|
|
; -------------------------------------------------
|
|
; AND|R|R
|
|
; AND|R|K
|
|
; OR|R|R
|
|
; OR|R|K
|
|
; XOR|R|R
|
|
; XOR|R|K
|
|
test10: mov R0, 0xA5 ; AND
|
|
swap R0
|
|
push R0
|
|
and R0, 0x0F
|
|
cmp R0, 0x0A
|
|
jne error
|
|
pop R0
|
|
push R0
|
|
and R0, 0x0F
|
|
cmp R0, 0x0A
|
|
pop R1
|
|
jne error
|
|
swap R1
|
|
mov R2, 0x0F
|
|
and R1, R2
|
|
cmp R1, 0x05
|
|
jne error
|
|
|
|
mov R0, 0x05 ; OR
|
|
mov R2, 0xA0
|
|
swap R0
|
|
or R2, R0
|
|
cmp R2, 0xF0
|
|
jne error
|
|
swap R0
|
|
or R0, 0x50
|
|
cmp R0, 0x55
|
|
jne error
|
|
|
|
mov R1, 0x01
|
|
mov R0, 0x01
|
|
xor R0, 0x01
|
|
jnz error
|
|
xor R0, R1
|
|
cmp R0, 0x01
|
|
jne error
|
|
|
|
ret
|
|
|
|
; -------------------------------------------------
|
|
test11:
|
|
mov R0, 0x03
|
|
cout (cpu_int_ctrl), R0
|
|
|
|
xin R0, (2)
|
|
or R0, 1
|
|
xout (2), R0
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
xin R0, (2)
|
|
and R0, 0xFE
|
|
xout (2), R0
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
|
|
cin R0, (cpu_int_ctrl)
|
|
or R0, 0x80
|
|
cout (cpu_int_ctrl), R0
|
|
nop
|
|
cin R0, (cpu_int_ctrl)
|
|
or R0, 0x80
|
|
cout (cpu_int_ctrl), R0
|
|
nop
|
|
cin R0, (cpu_int_ctrl)
|
|
or R0, 0x80
|
|
cout (cpu_int_ctrl), R0
|
|
nop
|
|
cin R0, (cpu_int_ctrl)
|
|
or R0, 0x80
|
|
cout (cpu_int_ctrl), R0
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
ret
|
|
|
|
; -------------------------------------------------
|
|
; Tests clrc, setc
|
|
test12: sub R0, 0
|
|
jc error
|
|
setc
|
|
jnc error
|
|
nop
|
|
sub R0, 0
|
|
jc error
|
|
|
|
mov R0, 0
|
|
clrc
|
|
jc error
|
|
setc
|
|
jnc error
|
|
nop
|
|
clrc
|
|
jc error
|
|
ret
|
|
|
|
; -------------------------------------------------
|
|
isr: inc R14
|
|
reti
|
|
|
|
; -------------------------------------------------
|
|
org 0x3FF
|
|
error: jmp error
|
|
|
|
; -------------------------------------------------
|
|
org 0x2FF
|
|
ok: jmp ok
|
|
|
|
; -------------------------------------------------
|
|
|