about summary refs log tree commit diff stats
path: root/101screen.subx
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-06-12 21:28:43 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-06-12 21:41:02 -0700
commitb78bff9307de43e7d7f1dc66b4f367b3d3d81449 (patch)
tree6d2a04ceada2bc7f72b00ab7fcdb60e34b70d588 /101screen.subx
parent0dda332ce36f751b8431fd30cbf7f42501e85800 (diff)
downloadmu-b78bff9307de43e7d7f1dc66b4f367b3d3d81449.tar.gz
extract a helper to render fonts outside video RAM
Diffstat (limited to '101screen.subx')
-rw-r--r--101screen.subx35
1 files changed, 24 insertions, 11 deletions
diff --git a/101screen.subx b/101screen.subx
index 2aab293d..22ce490c 100644
--- a/101screen.subx
+++ b/101screen.subx
@@ -9,30 +9,43 @@ pixel-on-real-screen:  # x: int, y: int, color: int
     # . prologue
     55/push-ebp
     89/<- %ebp 4/r32/esp
+    #
+    (pixel-on-screen-buffer *Video-memory-addr *(ebp+8) *(ebp+0xc) *(ebp+0x10))
+$pixel-on-real-screen:end:
+    # . epilogue
+    89/<- %esp 5/r32/ebp
+    5d/pop-to-ebp
+    c3/return
+
+# 'buffer' here is not a valid Mu type: a naked address without a length.
+pixel-on-screen-buffer:  # buffer: (addr byte), x: int, y: int, color: int
+    # . prologue
+    55/push-ebp
+    89/<- %ebp 4/r32/esp
     # . save registers
     50/push-eax
     51/push-ecx
     # bounds checks
-    8b/-> *(ebp+8) 0/r32/eax
+    8b/-> *(ebp+0xc) 0/r32/eax
     3d/compare-eax-and 0/imm32
-    7c/jump-if-< $pixel-on-real-screen:end/disp8
+    7c/jump-if-< $pixel-on-screen-buffer:end/disp8
     3d/compare-eax-and 0x400/imm32/screen-width=1024
-    7d/jump-if->= $pixel-on-real-screen:end/disp8
-    8b/-> *(ebp+0xc) 0/r32/eax
+    7d/jump-if->= $pixel-on-screen-buffer:end/disp8
+    8b/-> *(ebp+0x10) 0/r32/eax
     3d/compare-eax-and 0/imm32
-    7c/jump-if-< $pixel-on-real-screen:end/disp8
+    7c/jump-if-< $pixel-on-screen-buffer:end/disp8
     3d/compare-eax-and 0x300/imm32/screen-height=768
-    7d/jump-if->= $pixel-on-real-screen:end/disp8
+    7d/jump-if->= $pixel-on-screen-buffer:end/disp8
     # eax = y*1024 + x
-    8b/-> *(ebp+0xc) 0/r32/eax
+    8b/-> *(ebp+0x10) 0/r32/eax
     c1/shift 4/subop/left %eax 0xa/imm8
-    03/add-> *(ebp+8) 0/r32/eax
+    03/add-> *(ebp+0xc) 0/r32/eax
     # eax += location of frame buffer
-    03/add-> *Video-memory-addr 0/r32/eax
+    03/add-> *(ebp+8) 0/r32/eax
     # *eax = color
-    8b/-> *(ebp+0x10) 1/r32/ecx
+    8b/-> *(ebp+0x14) 1/r32/ecx
     88/byte<- *eax 1/r32/CL
-$pixel-on-real-screen:end:
+$pixel-on-screen-buffer:end:
     # . restore registers
     59/pop-to-ecx
     58/pop-to-eax