7491 - baremetal: draw ASCII text to screen

This commit is contained in:
Kartik Agaram 2021-01-09 18:28:27 -08:00
parent 7f8770ae08
commit 0518944e37
3 changed files with 41 additions and 0 deletions

View File

@ -0,0 +1,11 @@
# TODO: bring this back
__check-mu-array-bounds: # index: int, elem-size: int, arr-size: int, function-name: (addr array byte), array-name: (addr array byte)
# . prologue
55/push-ebp
89/<- %ebp 4/r32/esp
$__check-mu-array-bounds:end:
# . epilogue
89/<- %esp 5/r32/ebp
5d/pop-to-ebp
c3/return

View File

@ -0,0 +1,16 @@
fn draw-text-rightward screen: (addr screen), _text: (addr array byte), x: int, y: int, color: int {
var text/esi: (addr array byte) <- copy _text
var len/ecx: int <- length text
var i/edx: int <- copy 0
{
compare i, len
break-if->=
var g/eax: (addr byte) <- index text, i
var g2/eax: byte <- copy-byte *g
var g3/eax: grapheme <- copy g2
draw-grapheme screen, g3, x, y, color
add-to x, 8 # font-width
i <- increment
loop
}
}

14
baremetal/ex5.mu Normal file
View File

@ -0,0 +1,14 @@
# Draw an ASCII string using the built-in font (GNU unifont)
#
# To build a disk image:
# ./translate_mu_baremetal baremetal/ex5.mu # emits disk.img
# To run:
# qemu-system-i386 disk.img
# Or:
# bochs -f baremetal/boot.bochsrc # boot.bochsrc loads disk.img
#
# Expected output: text in green near the top-left corner of screen
fn main {
draw-text-rightward 0, "hello from baremetal Mu!", 0x10, 0x10, 0xa
}