diff options
Diffstat (limited to 'baremetal/500text-screen.mu')
-rw-r--r-- | baremetal/500text-screen.mu | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/baremetal/500text-screen.mu b/baremetal/500text-screen.mu index fbc2ef43..f5cd4125 100644 --- a/baremetal/500text-screen.mu +++ b/baremetal/500text-screen.mu @@ -112,11 +112,11 @@ fn cursor-position screen: (addr screen) -> _/eax: int, _/ecx: int { return *cursor-x-addr, *cursor-y-addr } -fn set-cursor-position screen: (addr screen), x: int, y: int, g: grapheme { +fn set-cursor-position screen: (addr screen), x: int, y: int { { compare screen, 0 break-if-!= - set-cursor-position-on-real-screen x, y, g + set-cursor-position-on-real-screen x, y return } # fake screen @@ -157,11 +157,20 @@ fn set-cursor-position screen: (addr screen), x: int, y: int, g: grapheme { dest <- get screen-addr, cursor-y src <- copy y copy-to *dest, src - # +} + +fn show-cursor screen: (addr screen), g: grapheme { + { + compare screen, 0 + break-if-!= + show-cursor-on-real-screen g + return + } + # fake screen var cursor-x/eax: int <- copy 0 var cursor-y/ecx: int <- copy 0 - cursor-x, cursor-y <- cursor-position screen-addr - draw-grapheme screen-addr, g, cursor-x, cursor-y, 0 # cursor color not tracked for fake screen + cursor-x, cursor-y <- cursor-position screen + draw-grapheme screen, g, cursor-x, cursor-y, 0 # cursor color not tracked for fake screen } fn clear-screen screen: (addr screen) { @@ -173,7 +182,7 @@ fn clear-screen screen: (addr screen) { } # fake screen var space/edi: grapheme <- copy 0x20 - set-cursor-position screen, 0, 0, space + set-cursor-position screen, 0, 0 var screen-addr/esi: (addr screen) <- copy screen var y/eax: int <- copy 1 var height/ecx: (addr int) <- get screen-addr, height @@ -192,7 +201,7 @@ fn clear-screen screen: (addr screen) { y <- increment loop } - set-cursor-position screen, 0, 0, space + set-cursor-position screen, 0, 0 } # there's no grapheme that guarantees to cover every pixel, so we'll bump down |