diff options
author | Kartik Agaram <vc@akkartik.com> | 2020-05-28 22:41:26 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2020-05-28 22:41:26 -0700 |
commit | b22fa8afd813270cfb4639c8bdd9a685488af7f2 (patch) | |
tree | f49e225b7bba0f1a763d66de8f8e43d52b423268 /103screen.subx | |
parent | 583a966d3e0b0f0e0fa9166986c877fda0643196 (diff) | |
download | mu-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.subx | 25 |
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 |