about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--baremetal/103grapheme.subx4
-rw-r--r--baremetal/501draw-text.mu14
-rw-r--r--baremetal/504test-screen.mu5
3 files changed, 23 insertions, 0 deletions
diff --git a/baremetal/103grapheme.subx b/baremetal/103grapheme.subx
index 4ee423d7..6f2ac0d1 100644
--- a/baremetal/103grapheme.subx
+++ b/baremetal/103grapheme.subx
@@ -49,7 +49,11 @@ draw-grapheme-on-real-screen:  # g: grapheme, x: int, y: int, color: int
         {
           73/jump-if-not-CF break/disp8
           (pixel-on-real-screen %eax %edx *(ebp+0x14))
+          eb/jump $draw-grapheme:continue/disp8
         }
+        # otherwise draw a black pixel
+        (pixel-on-real-screen %eax %edx 0)
+$draw-grapheme:continue:
         # --x
         48/decrement-eax
         #
diff --git a/baremetal/501draw-text.mu b/baremetal/501draw-text.mu
index 5ab280db..dd55d7a1 100644
--- a/baremetal/501draw-text.mu
+++ b/baremetal/501draw-text.mu
@@ -158,6 +158,20 @@ fn draw-text-wrapping-right-then-down screen: (addr screen), text: (addr array b
   return xcurr, ycurr
 }
 
+fn move-cursor-rightward-and-downward screen: (addr screen), xmin: int, xmax: int {
+  var cursor-x/eax: int <- copy 0
+  var cursor-y/ecx: int <- copy 0
+  cursor-x, cursor-y <- cursor-position screen
+  cursor-x <- add 8  # font-width
+  compare cursor-x, xmax
+  {
+    break-if-<
+    cursor-x <- copy xmin
+    cursor-y <- add 0x10  # font-height
+  }
+  set-cursor-position screen, cursor-x, cursor-y
+}
+
 fn draw-text-wrapping-right-then-down-over-full-screen screen: (addr screen), text: (addr array byte), x: int, y: int, color: int -> _/eax: int, _/ecx: int {
   var cursor-x/eax: int <- copy 0
   var cursor-y/ecx: int <- copy 0
diff --git a/baremetal/504test-screen.mu b/baremetal/504test-screen.mu
index 428d172c..db8f9eea 100644
--- a/baremetal/504test-screen.mu
+++ b/baremetal/504test-screen.mu
@@ -42,12 +42,14 @@ fn check-screen-row-from screen-on-stack: (addr screen), x: int, y: int, expecte
       draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, msg, 3  # 3=cyan
       draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, ": expected '", 3
       draw-grapheme-at-cursor 0, expected-grapheme, 3
+      move-cursor-rightward-and-downward 0, 0, 0x400
       draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, "' at (", 3
       draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0, x, 3
       draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, ", ", 3
       draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0, y, 3
       draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, ") but observed '", 3
       draw-grapheme-at-cursor 0, g, 3
+      move-cursor-rightward-and-downward 0, 0, 0x400
       draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, "'", 3
     }
     idx <- increment
@@ -106,12 +108,14 @@ fn check-screen-row-in-color-from screen-on-stack: (addr screen), fg: int, y: in
         draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, msg, 3  # 3=cyan
         draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, ": expected '", 3
         draw-grapheme-at-cursor 0, expected-grapheme, 3
+        move-cursor-rightward-and-downward 0, 0, 0x400
         draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, "' at (", 3
         draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0, x, 3
         draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, ", ", 3
         draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0, y, 3
         draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, ") but observed '", 3
         draw-grapheme-at-cursor 0, g, 3
+        move-cursor-rightward-and-downward 0, 0, 0x400
         draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, "'", 3
       }
       $check-screen-row-in-color-from:compare-colors: {
@@ -126,6 +130,7 @@ fn check-screen-row-in-color-from screen-on-stack: (addr screen), fg: int, y: in
         draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, msg, 3  # 3=cyan
         draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, ": expected '", 3
         draw-grapheme-at-cursor 0, expected-grapheme, 3
+        move-cursor-rightward-and-downward 0, 0, 0x400
         draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, "' at (", 3
         draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0, x, 3
         draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0, ", ", 3