blob: d834ca7af9b3f032b17b360571b3e2db09b5f9fb [file] [log] [blame]
.globl _start
#
# NOTE: Registers r10-r11 are reserved for the interrupt handler
# while the others can be used by the main loop/start code.
_start:
# patch the external interrupt handlers entry
add r1, r0, handler
ldw r2, @(r1, 0)
ldw r3, @(r1, 4)
add r1, r0, 0xfffff138
stw r2, @(r1, 0)
stw r3, @(r1, 4)
# enable external interrupts - cr0 == PSW
mvfsys r2, cr0
or r2, r0, 0x04000000
mvtsys cr0, r2
# wait for flag to be set
loop:
add r2, r0, flag
ldw r3, @(r2, 0)
bratzr r3, loop
# clear the flag
stw r0, @(r2, 0)
add r2, r0, tick
# putstr
.long 0x0e000001, 0x00f00000
bra loop
# finished
add r2, r0, r0 || nop
.long 0x0e000004, 0x00f00000
handler:
jmp real_handler
real_handler:
add r10, r0, 1
add r11, r0, flag
stb r10, @(r11,0)
reit
flag: .long 0
tick: .ascii "Tick\r\n"