about summary refs log tree commit diff stats
path: root/subx/019syscalls.cc
diff options
context:
space:
mode:
Diffstat (limited to 'subx/019syscalls.cc')
-rw-r--r--subx/019syscalls.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/subx/019syscalls.cc b/subx/019syscalls.cc
new file mode 100644
index 00000000..96c11ee0
--- /dev/null
+++ b/subx/019syscalls.cc
@@ -0,0 +1,19 @@
+:(before "End Single-Byte Opcodes")
+case 0xcd: {  // int imm8 (software interrupt)
+  uint8_t code = next();
+  if (code != 0x80) {
+    raise << "Unimplemented interrupt code " << HEXBYTE << code << '\n' << end();
+    raise << "  Only `int 80h` supported for now.\n" << end();
+    break;
+  }
+  process_int80();
+  break;
+}
+
+:(code)
+void process_int80() {
+  switch (Reg[EAX].u) {
+  case 1:
+    exit(Reg[EBX].u);
+  }
+}