about summary refs log tree commit diff stats
path: root/apps/ex13.mu
blob: 3e890785bac1dc4019fe07ecffd9399169067758 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
}