117 lines
1.9 KiB
Plaintext
117 lines
1.9 KiB
Plaintext
segment p 0000
|
|
br 0x0000$0800 always // reset vector
|
|
reti always
|
|
data 0000
|
|
reti always
|
|
data 0000
|
|
br 0x0000$5000 always // int0
|
|
data 0000
|
|
data 0000
|
|
data 0000
|
|
data 0000
|
|
data 0000
|
|
data 0000
|
|
reti always // int1
|
|
data 0000
|
|
data 0000
|
|
data 0000
|
|
data 0000
|
|
data 0000
|
|
data 0000
|
|
data 0000
|
|
reti always // int2
|
|
|
|
segment p 0800 // init
|
|
mov 0x$f000 sp // set stack pointer
|
|
mov 0x$0180 mod3 // enable interrupt
|
|
load 0x0082u8 page // configure ICU
|
|
mov 0x$4000 r0
|
|
mov r0 [page:0x000eu8]
|
|
mov r0 [page:0x0010u8]
|
|
mov r0 [page:0x0006u8] // enable apbp as int0
|
|
br 0x0000$1000 always
|
|
|
|
segment p 1000 // Main loop
|
|
load 0x0000u8 page
|
|
|
|
mov 0x$80CC r0 // transfer APBP register
|
|
mov [r0++] r1
|
|
mov r1 [page:0x0005u8]
|
|
modr [r0++]
|
|
mov [r0++] r1
|
|
mov r1 [page:0x0006u8]
|
|
modr [r0++]
|
|
mov [r0++] r1
|
|
mov r1 [page:0x0007u8]
|
|
modr [r0++]
|
|
mov [r0++] r1
|
|
mov r1 [page:0x0008u8]
|
|
modr [r0++]
|
|
mov [r0++] r1
|
|
mov r1 [page:0x0009u8]
|
|
modr [r0++]
|
|
mov [r0++] r1
|
|
mov r1 [page:0x000au8]
|
|
modr [r0++]
|
|
mov [r0++] r1
|
|
mov r1 [page:0x000bu8]
|
|
modr [r0++]
|
|
|
|
|
|
mov [page:0x0000u8] b0l // get signal
|
|
br 0x0000$1000 eq // loop back if no signal
|
|
|
|
mov [page:0x0001u8] b0l // get command type
|
|
|
|
cmpv 0x$0000 b0l
|
|
br 0x0000$2000 eq
|
|
|
|
cmpv 0x$0001 b0l
|
|
br 0x0000$3000 eq
|
|
|
|
br 0x0000$4000 always
|
|
|
|
segment p 2000 // read
|
|
mov [page:0x0002u8] r0
|
|
mov [r0] r1
|
|
mov r1 [page:0x0003u8]
|
|
br 0x0000$4000 always
|
|
|
|
segment p 3000 // write
|
|
mov [page:0x0002u8] r0
|
|
mov [page:0x0003u8] r1
|
|
mov r1 [r0]
|
|
br 0x0000$4000 always
|
|
|
|
segment p 4000 // end
|
|
clr b0 always
|
|
mov b0l [page:0x0000u8] // clear signal
|
|
br 0x0000$1000 always
|
|
|
|
segment p 5000 // interrupt handler
|
|
mov 0x$4000 r5
|
|
mov 0x$8202 r4
|
|
mov r5 [r4] // ack
|
|
mov 0x$0004 r4
|
|
mov [r4] r5
|
|
modr [r5++]
|
|
mov r5 [r4]
|
|
reti always
|
|
|
|
|
|
|
|
|
|
segment d 0000 // signal area
|
|
data 0000 // 0, Start signal
|
|
data 0000 // 1, Operation type
|
|
data 0000 // 2, Address
|
|
data 0000 // 3, Data
|
|
data 0000 // 4, interrupt counter
|
|
data 0000 // 5, 80CC
|
|
data 0000 // 6, 80CE
|
|
data 0000 // 7, 80D0
|
|
data 0000 // 8, 80D2
|
|
data 0000 // 9, 80D4
|
|
data 0000 // A, 80D6
|
|
data 0000 // B, 80D8
|