diff options
Diffstat (limited to 'ex7.mu')
-rw-r--r-- | ex7.mu | 46 |
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 + } +} |