summaryrefslogtreecommitdiff
path: root/tb
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2022-12-15 00:41:05 -0600
committerAlejandro Soto <alejandro@34project.org>2022-12-16 16:29:10 -0600
commit7bf965b755b667f7da05e0995c2f09c54a8a2f11 (patch)
tree6695c6f9aecd84bdc542261d4bc32d73ef050ea8 /tb
parentae7fd6a060c9bb1ce9db83f8eb23fa19e8fa0e7a (diff)
Implement swi (system call)
Diffstat (limited to '')
-rw-r--r--tb/sim/syscall.S17
-rw-r--r--tb/sim/syscall.py2
2 files changed, 19 insertions, 0 deletions
diff --git a/tb/sim/syscall.S b/tb/sim/syscall.S
new file mode 100644
index 0000000..a1f7422
--- /dev/null
+++ b/tb/sim/syscall.S
@@ -0,0 +1,17 @@
+.global reset
+reset:
+ # Switch to user mode
+ mov r0, lr
+ mrs r1, cpsr
+ bic r1, r1, #0b1111
+ msr cpsr_fxc, r1
+ mov lr, r0
+
+ mov r0, #123
+ swi #0
+ mov pc, lr
+
+.global swi
+swi:
+ add r0, r0, #1
+ movs pc, r14
diff --git a/tb/sim/syscall.py b/tb/sim/syscall.py
new file mode 100644
index 0000000..cfb9859
--- /dev/null
+++ b/tb/sim/syscall.py
@@ -0,0 +1,2 @@
+def final():
+ assert_reg(r0, 124)