From cbf9ecfb1e245c8d44b07ca2c39640f9609fc01c Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sat, 2 Jan 2021 10:03:27 -0500 Subject: [PATCH] Make NL, renamed to NL> a bit simpler It doesn't require emitting words anymore. The rename to NL> is linked to the upcoming commit. --- arch/z80/trs80/xcomp.fs | 2 +- blk.fs | 19 +++++++++---------- cvm/stage.bin | Bin 4963 -> 4962 bytes doc/dict.txt | 9 ++++----- doc/impl.txt | 7 +++++-- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/arch/z80/trs80/xcomp.fs b/arch/z80/trs80/xcomp.fs index 9839c2e..ee37f89 100644 --- a/arch/z80/trs80/xcomp.fs +++ b/arch/z80/trs80/xcomp.fs @@ -15,6 +15,6 @@ RS_ADDR 0x80 - CONSTANT SYSVARS ( Update LATEST ) PC ORG @ 8 + ! ( TRS-80 wants CR-only newlines ) -," ' CR ' NL **! BLK$ FD$ " EOT, +," 13 0x50 RAM+ C! BLK$ FD$ " EOT, ORG @ |M 2 PC! 2 PC! H@ |M 2 PC! 2 PC! diff --git a/blk.fs b/blk.fs index 398e7c1..78ddd74 100644 --- a/blk.fs +++ b/blk.fs @@ -450,7 +450,7 @@ VARIABLE L1 VARIABLE L2 VARIABLE L3 VARIABLE L4 ( We divide by 2 because each PC represents a word. ) : PC H@ ORG @ - 1 RSHIFT ; ( ----- 052 ) -: _oor ." arg out of range: " .X SPC ." PC: " PC .X NL ABORT ; +: _oor ." arg out of range: " .X SPC ." PC: " PC .X NL> ABORT ; : _r8c DUP 7 > IF _oor THEN ; : _r32c DUP 31 > IF _oor THEN ; : _r16+c _r32c DUP 16 < IF _oor THEN ; @@ -610,7 +610,7 @@ See doc/ed.txt 1 7 LOADR+ ( ----- 106 ) CREATE ACC 0 , -: _LIST ." Block " DUP . NL LIST ; +: _LIST ." Block " DUP . NL> LIST ; : L BLK> @ _LIST ; : B BLK> @ 1- BLK@ L ; : N BLK> @ 1+ BLK@ L ; @@ -1717,9 +1717,8 @@ with "390 LOAD" ( ----- 356 ) SYSVARS 0x53 + :** EMIT : STYPE C@+ ( a len ) 0 DO C@+ EMIT LOOP DROP ; -: BS 8 EMIT ; : CR 13 EMIT ; -: CRLF CR 10 EMIT ; : SPC 32 EMIT ; -SYSVARS 0x0a + :** NL +: BS 8 EMIT ; : SPC 32 EMIT ; +: NL> 0x50 RAM+ C@ ?DUP IF EMIT ELSE 13 EMIT 10 EMIT THEN ; : ERR STYPE ABORT ; : (uflw) LIT" stack underflow" ERR ; XCURRENT @ _xapply ORG @ 0x06 ( stable ABI uflw ) + ! @@ -1968,7 +1967,7 @@ SYSVARS 0x0c + :** C<* DROP ( a ) 8 0 DO C@+ DUP 0x20 0x7e =><= NOT IF DROP '.' THEN EMIT - LOOP NL ; + LOOP NL> ; : DUMP ( n a -- ) SWAP 8 /MOD SWAP IF 1+ THEN 0 DO _ LOOP ; @@ -2038,14 +2037,14 @@ SYSVARS 0x55 + :** KEY? 64 I * BLK( + DUP 64 + SWAP DO I C@ DUP 0x1f > IF EMIT ELSE DROP LEAVE THEN LOOP - NL + NL> LOOP ; ( ----- 383 ) : INTERPRET BEGIN WORD DUP @ 0x0401 = ( EOT ) IF DROP EXIT THEN FIND NOT IF (parse) ELSE EXECUTE THEN - C THEN AGAIN ; ( Read from BOOT C< PTR and inc it. ) : (boot<) @@ -2085,13 +2084,13 @@ SYSVARS 0x55 + :** KEY? 0x02 RAM+ CURRENT* ! CURRENT @ 0x2e RAM+ ! ( 2e == BOOT C< PTR ) 0 0x08 RAM+ ! ( 08 == C<* override ) + 0 0x50 RAM+ C! ( NL> ) ['] (emit) ['] EMIT **! ['] (key?) ['] KEY? **! - ['] CRLF ['] NL **! ['] (boot<) ['] C<* **! ( boot< always has a char waiting. 06 == C (main) ; XCURRENT @ _xapply ORG @ 0x04 ( stable ABI BOOT ) + ! 1 4 LOADR+ ( ----- 391 ) diff --git a/cvm/stage.bin b/cvm/stage.bin index b317698956b2312795d59053628c18aa1f9b1bff..0d09fdcffa883437c38ad4e8466568c01e7eb609 100644 GIT binary patch delta 1713 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 aZa8mi(WudWq?PhQxFc-!4fe83Q_Fvf6KY2Q diff --git a/doc/dict.txt b/doc/dict.txt index 4b7a79c..fba8d23 100644 --- a/doc/dict.txt +++ b/doc/dict.txt @@ -253,21 +253,20 @@ KEY? -- c? f Polls the keyboard for a key. If a key is pressed, f is true and c is the char. Other- wise, f is false and c is *not* on the stack. KEY -- c Get char c from direct input +NL> -- Emit newline PC! c a -- Spit c to port a PC@ a -- c Fetch c from port a +SPC -- Emit space character WORD -- a Read one word from buffered input and push its addr. Always null terminated. If ASCII EOT is encountered, a will point to it (it is cons- idered a word). -There are also ascii const emitters: -BS CR LF SPC CRLF - KEY? and EMIT are ialiases to (key?) and (emit) (see TTY proto- col in protocol.txt). KEY is a loop over KEY?. -NL is an ialias that points to CRLF by default and that should -generally be used when we want to emit a newline. +NL> spits CRLF by default, but can be configured to spit an +alternate newline char. See impl.txt. # Disk diff --git a/doc/impl.txt b/doc/impl.txt index f242843..1f086fb 100644 --- a/doc/impl.txt +++ b/doc/impl.txt @@ -162,8 +162,8 @@ SYSVARS FUTURE USES +3c BLK(* +02 CURRENT +3e ~C!* +04 HERE +41 ~C!ERR +06 C character ++0a FUTURE USES +51 CURRENTPTR +0c C<* +53 EMIT ialias +0e WORDBUF +55 KEY? ialias +2e BOOT C< PTR +57 FUTURE USES @@ -201,6 +201,9 @@ Register usage is arch-dependent, see boot code for details. this byte to a nonzero value. Otherwise, stays at zero. Has to be reset to zero manually after an error. +NL> is a single byte. If zero (default), NL> spits CR/LF. Other- +wise, it spits the value of RAM+50. + DRIVERS section is reserved for recipe-specific drivers. FUTURE USES section is unused for now.