aboutsummaryrefslogtreecommitdiff
path: root/sim/testsuite/d30v-elf/tick.s
diff options
context:
space:
mode:
Diffstat (limited to 'sim/testsuite/d30v-elf/tick.s')
-rw-r--r--sim/testsuite/d30v-elf/tick.s51
1 files changed, 51 insertions, 0 deletions
diff --git a/sim/testsuite/d30v-elf/tick.s b/sim/testsuite/d30v-elf/tick.s
new file mode 100644
index 0000000..d834ca7
--- /dev/null
+++ b/sim/testsuite/d30v-elf/tick.s
@@ -0,0 +1,51 @@
+ .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"