From b751763331ddbe0171695379bfa31c1d7e7628e9 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Fri, 15 Sep 2023 16:10:12 -0400 Subject: [PATCH] zipoff.com as a standalone Forth executable, with stub --- build.bat | 2 +- game.jrt | 8 ++++---- text.jrt | 11 ++++++----- zipoff.com | Bin 0 -> 14517 bytes zipoff.jrt | 18 ++++++++++++++++-- zipstub.seg | Bin 0 -> 732 bytes 6 files changed, 27 insertions(+), 12 deletions(-) create mode 100755 zipoff.com create mode 100755 zipstub.seg diff --git a/build.bat b/build.bat index 7828e6a..2064a36 100755 --- a/build.bat +++ b/build.bat @@ -1,2 +1,2 @@ -assemble.com < game.jrt +zipoff.com < game.jrt diff --git a/game.jrt b/game.jrt index 44cee71..42cafc5 100755 --- a/game.jrt +++ b/game.jrt @@ -1,9 +1,9 @@ -s" zipoff.jrt" loadfile s" text.jrt" loadfile key fill-page -nextline nextline nextline -t" Hello, inline assembler!" draw-text nextline -t" What a lovely day it is!" draw-text +( nextline nextline nextline ) +t" Hello, inline assembler!" draw-text ( nextline ) +( t" What a lovely day it is!" draw-text ) +terminate diff --git a/text.jrt b/text.jrt index 80e0e8e..f3b9bd0 100755 --- a/text.jrt +++ b/text.jrt @@ -18,17 +18,18 @@ NEXT 0 VAR, textpos -: textx textpos @ pagew % ; -: texty textpos @ pagew / ; -: textx! texty pagew * + textpos ! ; -: texty! pagew * textx + textpos ! ; -: nextline texty 1+ pagew * textpos ! ; +:t textx textpos @ pagew % ; +:t texty textpos @ pagew / ; +:t textx! texty pagew * + textpos ! ; +:t texty! pagew * textx + textpos ! ; +:t nextline texty 1+ pagew * textpos ! ; : PREP-TEXTCOPY-XY PREP-TEXTCOPY ADD SI textpos @+ ; :ASM draw-text ( s -- ) + INT 3 # MOV BX SI POP SI PREP-TEXTCOPY-XY diff --git a/zipoff.com b/zipoff.com new file mode 100755 index 0000000000000000000000000000000000000000..eafd1a8bf385428a8ec1c52d14ca31e64e835a49 GIT binary patch literal 14517 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 target lit ' FINISHCREATE , ' return , tcomp| ; immediate -: t" target begin key dup [ key " lit ] != while >t repeat ; +: t" target begin key dup [ key " lit ] != while >t repeat 0 >t drop ; s" logic.jrt" loadfile +var comfilename + +: readcom ( filename ) open 0x100 target! + begin dup fgetc dup EOF != while >t repeat drop close ; + +:init comfilename @ readcom ; + +: writeenv ( comfile wrapper -- ) + swap comfilename ! + dup type cr writeself + comfilename @ dup type cr writecom ; + +here s", zipstub.seg" s" zipoff.com" writeenv diff --git a/zipstub.seg b/zipstub.seg new file mode 100755 index 0000000000000000000000000000000000000000..3105d9f46ae199ddb24961c5870335a74804523a GIT binary patch literal 732 zcmX|Mm()EG=T1Toen_T(mflEO!X!$?Ad3xp1Y0mBq3)0mU>8Mg58Cw z{+S>6o1L2I)TB<2%)jxEjlcFF#!?vKOs?0lGzI1pVhTWnVbggPsDMsIwHk){GkY;K z8d)lsD-ed+IF=4G+06f?_aKirlL40pkYCdqjEm6P^K-`BSx@0PD0W_fitNHJsJIz5 zt>}?xU1>%%IQErvWSjg6dasPPCHuckj$$l)NrINJI4)N%EsL#*6OwLyQqo>2}W= zHX7(IbWUPAVt1BYhPupZqpUsD?UAkx*=p0i(6^1;l;d+`P6Rztr$8E2(#M92d z?6uVU9qV5={KN7MFLpoAEiYaOo>+Iz@Y!!xXfKE-UFebF!`PA+cLIKg+>6zHi!V*Y R*