| .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" |