about summary refs log tree commit diff stats
path: root/ex7.mu
diff options
context:
space:
mode:
Diffstat (limited to 'ex7.mu')
-rw-r--r--ex7.mu46
1 files changed, 46 insertions, 0 deletions
diff --git a/ex7.mu b/ex7.mu
new file mode 100644
index 00000000..30e3c1bc
--- /dev/null
+++ b/ex7.mu
@@ -0,0 +1,46 @@
+# Cursor-based motions.
+#
+# To build a disk image:
+#   ./translate_mu_baremetal baremetal/ex7.mu     # emits disk.img
+# To run:
+#   qemu-system-i386 disk.img
+# Or:
+#   bochs -f baremetal/boot.bochsrc               # boot.bochsrc loads disk.img
+#
+# Expected output: an interactive game a bit like "snakes". Try pressing h, j,
+# k, l.
+
+fn main {
+  var space/eax: grapheme <- copy 0x20
+  set-cursor-position 0/screen, 0, 0
+  {
+    show-cursor 0/screen, space
+    var key/eax: byte <- read-key 0/keyboard
+    {
+      compare key, 0x68/h
+      break-if-!=
+      draw-code-point-at-cursor 0/screen, 0x2d/dash, 0x31/fg, 0/bg
+      move-cursor-left 0
+    }
+    {
+      compare key, 0x6a/j
+      break-if-!=
+      draw-code-point-at-cursor 0/screen, 0x7c/vertical-bar, 0x31/fg, 0/bg
+      move-cursor-down 0
+    }
+    {
+      compare key, 0x6b/k
+      break-if-!=
+      draw-code-point-at-cursor 0/screen, 0x7c/vertical-bar, 0x31/fg, 0/bg
+      move-cursor-up 0
+    }
+    {
+      compare key, 0x6c/l
+      break-if-!=
+      var g/eax: code-point <- copy 0x2d/dash
+      draw-code-point-at-cursor 0/screen, 0x2d/dash, 0x31/fg, 0/bg
+      move-cursor-right 0
+    }
+    loop
+  }
+}