Files
Lucina3DS/externals/teakra/hwtest/dspapbptester/firm/source
2025-02-06 22:24:29 +08:00

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