about summary refs log tree commit diff stats
path: root/103screen.subx
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2020-05-28 22:41:26 -0700
committerKartik Agaram <vc@akkartik.com>2020-05-28 22:41:26 -0700
commitb22fa8afd813270cfb4639c8bdd9a685488af7f2 (patch)
treef49e225b7bba0f1a763d66de8f8e43d52b423268 /103screen.subx
parent583a966d3e0b0f0e0fa9166986c877fda0643196 (diff)
downloadmu-b22fa8afd813270cfb4639c8bdd9a685488af7f2.tar.gz
6423 - done with sample app 'print-file'
Observations:
  - the orchestration from 'in' to 'addr-in' to '_in-addr' to 'in-addr'
    is quite painful. Once to turn a handle into its address, once to turn
    a handle into the address of its payload, and a third time to switch
    a variable out of the overloaded 'eax' variable to make room for read-byte-buffered.
  - I'm starting to use SubX as an escape hatch for features missing in Mu:
    - access to syscalls (which pass args in registers)
    - access to global variables
Diffstat (limited to '103screen.subx')
-rw-r--r--103screen.subx25
1 files changed, 25 insertions, 0 deletions
diff --git a/103screen.subx b/103screen.subx
index 75753a1d..944fd4aa 100644
--- a/103screen.subx
+++ b/103screen.subx
@@ -134,6 +134,31 @@ $print-string:end:
     5d/pop-to-ebp
     c3/return
 
+print-byte:  # c: byte
+    # . prologue
+    55/push-ebp
+    89/<- %ebp 4/r32/esp
+    #
+    (write-byte-buffered Stdout *(ebp+8))
+$print-byte:end:
+    # . epilogue
+    89/<- %esp 5/r32/ebp
+    5d/pop-to-ebp
+    c3/return
+
+# just because Mu has no support for global variables yet
+flush-stdout:
+    # . prologue
+    55/push-ebp
+    89/<- %ebp 4/r32/esp
+    #
+    (flush Stdout)
+$flush-stdout:end:
+    # . epilogue
+    89/<- %esp 5/r32/ebp
+    5d/pop-to-ebp
+    c3/return
+
 print-int32-to-screen:  # n: int
     # . prologue
     55/push-ebp