From 2f59db6766f1617ebb1c6a48eb8a45e0f9d301d0 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Sun, 26 Sep 2021 23:07:36 -0400 Subject: [PATCH] Implement string constants, buffers, macro barriers macro barriers are a hack to say "this form does its own macroexpansion internally" so that we can have state-smart macros that expand to different values depending on if they are being used in code or in a function definition. This seems like a real bad design choice but I can't think of a better one right now! (not quite true: the better design choice is to allow forms to return opgens, and then define a :bytes form that returns the address of the generated thing. :bytes could be understood by :buffer directly. But that's... complicated.) --- UdpDebug.dsk | Bin 143360 -> 143360 bytes neutgs/init.fnl | 4 ++-- ssc/iigs/u2-debug.fnl | 14 +++++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/UdpDebug.dsk b/UdpDebug.dsk index aa496e0fbc4e44a9df8ba4a16e722afc08b3fd0c..ed231ed9ee3c91e12a494918a7c0d41124f6a0ae 100644 GIT binary patch delta 599 zcmZ8dziU%b82#RTFD8;e3zpW1!W>MK0CsWcEtjD1;hv>S%geU=^jrPnn?O-7fHa zhZ9kAzu8jH-U~m)bZS2tJ?L{4h6ez@BKJ7(2U%#I=mQi3fp@rOIl*Tx0+o`QLaZx2n5&;Y(R{}Q+>b4H<=fq-n zHL`^_Sob^qzy=eA<#%lDX(H&YXgpS^$@E+-Y!UBai50Af4SvwMG^6Yt3(4y=?Izu1 z;}MI`5Ya0$eA(+>qpi2>Vx!SmqsPN`Eu{IdeKka_M*Z>4nf8>aKBh`^(xb!qEJzI6r04W!0d3eSC$5x(v7F`v5(eU;T~6 hk{?wMAK`oZC(56ymZYW%>38VoY9D2HX?00>^9T9S=9&Ni diff --git a/neutgs/init.fnl b/neutgs/init.fnl index 851e545..be8bdf1 100644 --- a/neutgs/init.fnl +++ b/neutgs/init.fnl @@ -17,11 +17,11 @@ 5 0x0100 ; desk manager 9 0x0100) ; ADB - (asm pascalhex (db 5) hexbuf (bytes " ")) + (buffer hexbuf (cstr " ")) (fn printnum (num) (long! (ref hexbuf) (HexIt num)) - (WriteString (far-ref pascalhex))) + (WriteCString (far-ref hexbuf))) (asm event-buffer) (global word event-what) diff --git a/ssc/iigs/u2-debug.fnl b/ssc/iigs/u2-debug.fnl index 0ecc33c..07813a3 100644 --- a/ssc/iigs/u2-debug.fnl +++ b/ssc/iigs/u2-debug.fnl @@ -22,15 +22,24 @@ (sec) (xce))) ; re-enter emulation mode (require ssc.stdlib) + (require ssc.iigs.toolbox) (require ssc.iigs.uthernet2) + (macro out [#(! (WriteLine (far-ref (pstr [$2]))))]) + + (buffer hexbuf (cstr " ")) + (fn printnum (num) + (long! (ref hexbuf) (HexIt num)) + (WriteCString (far-ref hexbuf))) + (global word u2-debug-server-connected 0) (fn u2-init-debug-server () + (out "Starting server") (u2-reset) (u2-udp-server-start 6502) (set! u2-debug-server-connected 0)) - (asm u2-debug-buffer (bytes [(string.rep "\x00" 1500)])) + (buffer u2-debug-buffer 1500) (predef-fn u2-debug-server-poll () void far) @@ -83,6 +92,7 @@ (when (> size 0) (let (msgid (u2-read) cmd (u2-read)) + (printnum msgid) (out "Got message!") (u2-read-buf (ref u2-debug-buffer) (- size 2)) (u2-rx-complete) (when (not u2-debug-server-connected) @@ -91,6 +101,8 @@ (u2-debug-server-cmd msgid cmd))))) (fn debug-server-loop () + (TextStartUp) + (IMStartUp) (u2-init-debug-server) (while true (u2-debug-server-poll))) )