about summary refs log tree commit diff stats
path: root/apps/ex13.mu
diff options
context:
space:
mode:
Diffstat (limited to 'apps/ex13.mu')
-rw-r--r--apps/ex13.mu23
1 files changed, 23 insertions, 0 deletions
diff --git a/apps/ex13.mu b/apps/ex13.mu
new file mode 100644
index 00000000..3e890785
--- /dev/null
+++ b/apps/ex13.mu
@@ -0,0 +1,23 @@
+# Load an image from disk and display it on screen.
+#
+# Build the code disk:
+#   $ ./translate apps/ex13.mu                       # generates code.img
+# Load a pbm, pgm or ppm image (no more than 255 levels) in the data disk
+#   $ dd if=/dev/zero of=data.img count=20160
+#   $ dd if=___ of=data.img conv=notrunc
+# Run:
+#   $ qemu-system-i386 -hda code.img -hdb data.img
+
+fn main screen: (addr screen), keyboard: (addr keyboard), data-disk: (addr disk) {
+  var img-storage: image
+  var img/esi: (addr image) <- address img-storage
+  load-image img, data-disk
+  render-image screen, img, 0/x, 0/y, 0x300/width, 0x300/height
+}
+
+fn load-image self: (addr image), data-disk: (addr disk) {
+  var s-storage: (stream byte 0x200000)  # 512* 0x1000 sectors
+  var s/ebx: (addr stream byte) <- address s-storage
+  load-sectors data-disk, 0/lba, 0x1000/sectors, s
+  initialize-image self, s
+}