From 55e35d0761fca9e08d3c4361d8068116b5b5e670 Mon Sep 17 00:00:00 2001 From: d6 Date: Mon, 30 Jan 2023 22:05:47 -0500 Subject: [PATCH] convert to JCI/JMI/JSI --- term.tal | 418 +++++++++++++++++++++++++++---------------------------- 1 file changed, 209 insertions(+), 209 deletions(-) diff --git a/term.tal b/term.tal index 37b09ae..e28c563 100644 --- a/term.tal +++ b/term.tal @@ -104,11 +104,11 @@ #07bf .System/r DEO2 #07bf .System/g DEO2 #07bf .System/b DEO2 - ;load-theme JSR2 + load-theme ( set starting tint: reverse=0, bg=0, fg=2 ) #02 .attr STZ - ;update-tint JSR2 + update-tint ( set initial modes ) #01 .irm STZ ( insert and move right ) @@ -117,7 +117,7 @@ #00 .paste STZ ( bracketed paste is off ) ( clear screen for initial draw ) - ;clear-screen JSR2 + clear-screen ( set up interrupts ) ;redraw .Screen/vect DEO2 ( set up screen ) @@ -127,7 +127,7 @@ ( set to 01 to enable debug log ) #00 .debug STZ - .debug LDZ ,&continue JCN BRK &continue + .debug LDZ ?&continue BRK &continue #99 #010e DEO ;debug-log .File/name DEO2 #01 .File/append DEO @@ -174,57 +174,57 @@ #4220 STH2kr STA2 ( y* x* [addr*] ) INC2r INC2r ( y* x* [addr+2*] ) INC2 DUP2 .cols LDZ2 ( y* x+1* x+1* cols* [addr+2*] ) - LTH2 ,&xloop JCN ( y* x+1* [addr+2*] ) + LTH2 ?&xloop ( y* x+1* [addr+2*] ) POP2 ( y* [addr*] ) INC2 DUP2 .rows LDZ2 ( y+1* y+1* rows* [addr*] ) - LTH2 ,&yloop JCN ( y+1* [addr*] ) + LTH2 ?&yloop ( y+1* [addr*] ) POP2 POP2r JMP2r ( ) @redraw - .dirty? LDZ #00 EQU ,&done JCN + .dirty? LDZ #00 EQU ?&done ;cells STH2 ( [addr*] ) #0000 DUP2 .Screen/y DEO2 &yloop #0000 DUP2 .Screen/x DEO2 &xloop - STH2kr LDA2 ;draw-cell JSR2 + STH2kr LDA2 draw-cell .Screen/x DEI2k #0008 ADD2 ROT DEO2 INC2 INC2r INC2r - DUP2 .cols LDZ2 LTH2 ,&xloop JCN + DUP2 .cols LDZ2 LTH2 ?&xloop POP2 .Screen/y DEI2k #0008 ADD2 ROT DEO2 INC2 - DUP2 .rows LDZ2 LTH2 ,&yloop JCN + DUP2 .rows LDZ2 LTH2 ?&yloop POP2 POP2r - ;draw-cursor JSR2 + draw-cursor #00 .dirty? STZ &done BRK @clear-cursor .cur-x LDZ2 #30 SFT2 .Screen/x DEO2 .cur-y LDZ2 #30 SFT2 .Screen/y DEO2 - ;cur-addr JSR2 LDA2 - ;draw-cell JMP2 + cur-addr LDA2 + !draw-cell @draw-cursor .cur-x LDZ2 #30 SFT2 .Screen/x DEO2 .cur-y LDZ2 #30 SFT2 .Screen/y DEO2 - ;cur-addr JSR2 LDA2 - .tcem LDZ #00 EQU ,&skip JCN - SWP ;reverse-tint JSR2 SWP + cur-addr LDA2 + .tcem LDZ #00 EQU ?&skip + SWP reverse-tint SWP &skip - ;draw-cell JMP2 + !draw-cell @on-button ( -> ) .lastkey LDZ ( last^ ) .Controller/button DEI ( last^ button^ ) STHk EOR ( last-xor-button^ [button^] ) STHr AND ( last-xor-button&button^ ) - DUP #10 AND #00 EQU ,&no-n JCN LIT "A ,arrow JSR - &no-n DUP #20 AND #00 EQU ,&no-s JCN LIT "B ,arrow JSR - &no-s DUP #40 AND #00 EQU ,&no-w JCN LIT "D ,arrow JSR - &no-w DUP #80 AND #00 EQU ,&no-e JCN LIT "C ,arrow JSR + DUP #10 AND #00 EQU ?&no-n LIT "A arrow + &no-n DUP #20 AND #00 EQU ?&no-s LIT "B arrow + &no-s DUP #40 AND #00 EQU ?&no-w LIT "D arrow + &no-w DUP #80 AND #00 EQU ?&no-e LIT "C arrow &no-e POP .Controller/button DEI .lastkey STZ BRK ( send ESC [ $c ) @@ -234,21 +234,21 @@ JMP2r @on-key ( -> ) - .Controller/key DEI ,&ok JCN ,on-button JMP - &ok ,alt? JSR ,on-alt-key JCN - ,ctrl? JSR ,on-ctrl-key JCN + .Controller/key DEI ?&ok !on-button + &ok alt ?on-alt-key + ctrl ?on-ctrl-key .Controller/key DEI - DUP #08 NEQ ,&done JCN + DUP #08 NEQ ?&done POP #7f ( send DEL instead of BS ) &done .Console/w DEO BRK -@ctrl? ( -> is-down? ) .Controller/button DEI #01 AND JMP2r -@alt? ( -> is-down? ) .Controller/button DEI #02 AND JMP2r +@ctrl ( -> is-down? ) .Controller/button DEI #01 AND JMP2r +@alt ( -> is-down? ) .Controller/button DEI #02 AND JMP2r ( alt-XYZ emits ESC and then emits XYZ ) @on-alt-key ( -> ) #1b .Console/w DEO - ,ctrl? JSR ,on-ctrl-key JCN + ctrl ?on-ctrl-key .Controller/key DEI .Console/w DEO BRK ( ctrl-$n emits: ) @@ -257,48 +257,48 @@ ( ` <= $n <= #ff -> $n #60 SUB ) @on-ctrl-key ( -> ) .Controller/key DEI - DUP LIT "@ LTH ,&done JCN - DUP LIT "` LTH ,&c1 JCN - LIT "` SUB ,&done JMP + DUP LIT "@ LTH ?&done + DUP LIT "` LTH ?&c1 + LIT "` SUB !&done &c1 LIT "@ SUB &done .Console/w DEO BRK @on-read-priv .Console/r DEI - DUP LIT "; EQU ;next-arg JCN2 - DUP LIT "0 LTH ;end-arg-priv JCN2 - DUP LIT "9 GTH ;end-arg-priv JCN2 - ;add-to-arg JMP2 + DUP LIT "; EQU ?next-arg + DUP LIT "0 LTH ?end-arg-priv + DUP LIT "9 GTH ?end-arg-priv + !add-to-arg @start-priv POP ;on-read-priv .Console/vect DEO2 BRK @on-read-csi ( -> ) .Console/r DEI - DUP LIT "? EQU ;start-priv JCN2 - DUP LIT "; EQU ;next-arg JCN2 - DUP LIT "0 LTH ;end-arg JCN2 - DUP LIT "9 GTH ;end-arg JCN2 - ;add-to-arg JMP2 + DUP LIT "? EQU ?start-priv + DUP LIT "; EQU ?next-arg + DUP LIT "0 LTH ?end-arg + DUP LIT "9 GTH ?end-arg + !add-to-arg @debug-arg ( n* -> ) - &short SWP ,&byte JSR - &byte DUP #04 SFT ,&char JSR - &char #0f AND DUP #09 GTH #27 MUL ADD #30 ADD ;scratch-write JSR2 + &short SWP debug-arg/byte + &byte DUP #04 SFT debug-arg/char + &char #0f AND DUP #09 GTH #27 MUL ADD #30 ADD scratch-write JMP2r @debug-args ( -> ) ;args/pos LDA2 ;args &loop - #20 ;scratch-write JSR2 - LDA2k ;debug-arg/short JSR2 INC2 INC2 - LTH2k ,&done JCN ,&loop JMP + #20 scratch-write + LDA2k debug-arg/short INC2 INC2 + LTH2k ?&done !&loop &done POP2 POP2 JMP2r @debug-priv ( c^ -> ) - .debug LDZ ,&continue JCN POP JMP2r &continue - ;reset-scratch JSR2 + .debug LDZ ?&continue POP JMP2r &continue + reset-scratch ;scratch-write STH2 LIT "1 STH2kr JSR2 LIT "b STH2kr JSR2 @@ -306,67 +306,67 @@ LIT "[ STH2kr JSR2 #20 STH2kr JSR2 LIT "? STH2kr JSR2 - ;debug-args JSR2 + debug-args #20 STH2kr JSR2 STH2kr JSR2 #0a STH2r JSR2 - ;scratch-len JSR2 .File/len DEO2 + scratch-len .File/len DEO2 ;scratch .File/w DEO2 JMP2r @end-arg-priv ( c^ -> ) ;on-read .Console/vect DEO2 - DUP LIT "h EQU ,exec-priv-set-or-unset JCN - DUP LIT "l EQU ,exec-priv-set-or-unset JCN - DUP ,debug-priv JSR + DUP LIT "h EQU ?exec-priv-set-or-unset + DUP LIT "l EQU ?exec-priv-set-or-unset + DUP debug-priv ( TODO: handle these ) POP BRK @exec-priv-set-or-unset ( c^ -> ) - #0001 ;read-arg-1 JSR2 ( c^ n* ) - DUP2 #0019 NEQ2 ,&!25 JCN POP2 .tcem ,&change JMP - &!25 DUP2 #07d4 NEQ2 ,&!2004 JCN POP2 .paste ,&change JMP - &!2004 POP2 ;debug-priv JSR2 BRK + #0001 read-arg-1 ( c^ n* ) + DUP2 #0019 NEQ2 ?&!25 POP2 .tcem !&change + &!25 DUP2 #07d4 NEQ2 ?&!2004 POP2 .paste !&change + &!2004 POP2 debug-priv BRK &change SWP LIT "h EQU SWP STZ BRK ( h is set, l is unset ) @debug-csi ( c^ -> ) - .debug LDZ ,&continue JCN POP JMP2r &continue - ;reset-scratch JSR2 + .debug LDZ ?&continue POP JMP2r &continue + reset-scratch ;scratch-write STH2 LIT "1 STH2kr JSR2 LIT "b STH2kr JSR2 #20 STH2kr JSR2 LIT "[ STH2kr JSR2 - ;debug-args JSR2 + debug-args #20 STH2kr JSR2 STH2kr JSR2 #0a STH2r JSR2 - ;scratch-len JSR2 .File/len DEO2 + scratch-len .File/len DEO2 ;scratch .File/w DEO2 JMP2r @end-arg ( c^ -> ) ;on-read .Console/vect DEO2 -( DUP ,debug-csi JSR ) - DUP LIT "d EQU ;exec-move-row JCN2 ( move cursor to row ) - DUP LIT "h EQU ;exec-set-mode JCN2 ( enable line wrap ) - DUP LIT "l EQU ;exec-reset-mode JCN2 ( disable line wrap ) - DUP LIT "m EQU ;exec-set-attr JCN2 ( set attr ) - DUP LIT "n EQU ;exec-status JCN2 ( get status ) - DUP LIT "@ EQU ;exec-insert-blanks JCN2 ( insert blank characters ) - DUP LIT "A EQU ;exec-up JCN2 ( up ) - DUP LIT "B EQU ;exec-down JCN2 ( down ) - DUP LIT "C EQU ;exec-forward JCN2 ( forward ) - DUP LIT "D EQU ;exec-back JCN2 ( back ) - DUP LIT "G EQU ;exec-move-col JCN2 ( move cursor to col ) - DUP LIT "H EQU ;exec-move JCN2 ( move cursor ) - DUP LIT "I EQU ;exec-forward-tabs JCN2 ( forward by tab stops ) - DUP LIT "J EQU ;exec-erase-screen JCN2 ( erase screen ) - DUP LIT "K EQU ;exec-erase-line JCN2 ( erase line ) - DUP LIT "L EQU ;exec-insert-lines JCN2 ( insert blank lines ) - DUP LIT "M EQU ;exec-delete-lines JCN2 ( delete n lines ) - DUP LIT "P EQU ;exec-delete-chars JCN2 ( delete n chars ) - ;debug-csi JSR2 BRK +( DUP debug-csi ) + DUP LIT "d EQU ?exec-move-row ( move cursor to row ) + DUP LIT "h EQU ?exec-set-mode ( enable line wrap ) + DUP LIT "l EQU ?exec-reset-mode ( disable line wrap ) + DUP LIT "m EQU ?exec-set-attr ( set attr ) + DUP LIT "n EQU ?exec-status ( get status ) + DUP LIT "@ EQU ?exec-insert-blanks ( insert blank characters ) + DUP LIT "A EQU ?exec-up ( up ) + DUP LIT "B EQU ?exec-down ( down ) + DUP LIT "C EQU ?exec-forward ( forward ) + DUP LIT "D EQU ?exec-back ( back ) + DUP LIT "G EQU ?exec-move-col ( move cursor to col ) + DUP LIT "H EQU ?exec-move ( move cursor ) + DUP LIT "I EQU ?exec-forward-tabs ( forward by tab stops ) + DUP LIT "J EQU ?exec-erase-screen ( erase screen ) + DUP LIT "K EQU ?exec-erase-line ( erase line ) + DUP LIT "L EQU ?exec-insert-lines ( insert blank lines ) + DUP LIT "M EQU ?exec-delete-lines ( delete n lines ) + DUP LIT "P EQU ?exec-delete-chars ( delete n chars ) + debug-csi BRK @exec-noop ( c^ -> ) POP BRK @@ -374,45 +374,45 @@ ( set mode ) ( TODO: insert/replace, line wrap, etc. ) @exec-set-mode ( c^ -> ) - POP #0001 ;read-arg-1 JSR2 - DUP2 #0004 NEQ2 ,&!irm JCN POP2 .irm ,&set JMP - &!irm DUP2 #0007 NEQ2 ,&!awm JCN POP2 .awm ,&set JMP + POP #0001 read-arg-1 + DUP2 #0004 NEQ2 ?&!irm POP2 .irm !&set + &!irm DUP2 #0007 NEQ2 ?&!awm POP2 .awm !&set &!awm POP2 BRK &set #01 SWP STZ BRK @exec-reset-mode ( c^ -> ) - POP #0001 ;read-arg-1 JSR2 - DUP2 #0004 NEQ2 ,&!irm JCN POP2 .irm ,&reset JMP - &!irm DUP2 #0007 NEQ2 ,&!awm JCN POP2 .awm ,&reset JMP + POP #0001 read-arg-1 + DUP2 #0004 NEQ2 ?&!irm POP2 .irm !&reset + &!irm DUP2 #0007 NEQ2 ?&!awm POP2 .awm !&reset &!awm POP2 BRK &reset #00 SWP STZ BRK @read-attr ( attr* -> ) - DUP2 #0000 NEQ2 ,&!0 JCN #02 .attr STZ ,&done JMP ( reset ) - &!0 DUP2 #0001 NEQ2 ,&!1 JCN #03 ,&set-fg JMP ( bright ) - &!1 DUP2 #0002 NEQ2 ,&!2 JCN #01 ,&set-fg JMP ( dim ) - &!2 DUP2 #0007 NEQ2 ,&!7 JCN .attr LDZk #80 ORA SWP STZ ,&done JMP ( reverse ) - &!7 ,&ignored JMP + DUP2 #0000 NEQ2 ?&!0 #02 .attr STZ !&done ( reset ) + &!0 DUP2 #0001 NEQ2 ?&!1 #03 !&set-fg ( bright ) + &!1 DUP2 #0002 NEQ2 ?&!2 #01 !&set-fg ( dim ) + &!2 DUP2 #0007 NEQ2 ?&!7 .attr LDZk #80 ORA SWP STZ !&done ( reverse ) + &!7 !&ignored &set-fg .attr LDZ #fc AND ORA .attr STZ - &done ;update-tint JSR2 + &done update-tint &ignored POP2 JMP2r @exec-set-attr ( c^ -> ) POP ;args/pos LDA2 ;args &loop - LDA2k ;read-attr JSR2 + LDA2k read-attr INC2 INC2 - LTH2k ,&done JCN ,&loop JMP + LTH2k ?&done !&loop &done POP2 POP2 BRK @exec1 ( addr* -> ) - STH2 #0001 ;read-arg-1 JSR2 STH2r JSR2 BRK + STH2 #0001 read-arg-1 STH2r JSR2 BRK @exec-status - POP #0000 ;read-arg-1 JSR2 #0006 NEQ2 ,&done + POP #0000 read-arg-1 #0006 NEQ2 ,&done #1b .Console/w DEO LIT "[ .Console/w DEO LIT "4 .Console/w DEO @@ -423,50 +423,50 @@ LIT "R .Console/w DEO &done BRK -@exec-up POP ;up-n ;exec1 JMP2 -@exec-down POP ;down-n ;exec1 JMP2 -@exec-forward POP ;forward-n ;exec1 JMP2 -@exec-back POP ;back-n ;exec1 JMP2 -@exec-insert-blanks POP ;insert-n-spaces ;exec1 JMP2 -@exec-delete-lines POP ;delete-n-lines ;exec1 JMP2 -@exec-delete-chars POP ;delete-n-chars ;exec1 JMP2 -@exec-insert-lines POP ;insert-n-lines ;exec1 JMP2 -@exec-forward-tabs POP ;forward-n-tabs ;exec1 JMP2 +@exec-up POP ;up-n !exec1 +@exec-down POP ;down-n !exec1 +@exec-forward POP ;forward-n !exec1 +@exec-back POP ;back-n !exec1 +@exec-insert-blanks POP ;insert-n-spaces !exec1 +@exec-delete-lines POP ;delete-n-lines !exec1 +@exec-delete-chars POP ;delete-n-chars !exec1 +@exec-insert-lines POP ;insert-n-lines !exec1 +@exec-forward-tabs POP ;forward-n-tabs !exec1 @exec-erase-line - POP #0000 ;read-arg-1 JSR2 - DUP2 #0000 EQU2 ,&erase-to-end JCN - DUP2 #0001 EQU2 ,&erase-from-start JCN - DUP2 #0002 EQU2 ,&erase-full JCN + POP #0000 read-arg-1 + DUP2 #0000 EQU2 ?&erase-to-end + DUP2 #0001 EQU2 ?&erase-from-start + DUP2 #0002 EQU2 ?&erase-full POP2 BRK &erase-full - POP2 ;bol-addr JSR2 ;eol-addr JSR2 ;erase JSR2 BRK + POP2 bol-addr eol-addr erase BRK &erase-to-end - POP2 ;cur-addr JSR2 ;eol-addr JSR2 ;erase JSR2 BRK + POP2 cur-addr eol-addr erase BRK &erase-from-start - POP2 ;bol-addr JSR2 ;cur-addr JSR2 ;erase JSR2 BRK + POP2 bol-addr cur-addr erase BRK @exec-erase-screen - POP #0000 ;read-arg-1 JSR2 - DUP2 #0000 EQU2 ,&erase-to-end JCN - DUP2 #0001 EQU2 ,&erase-from-start JCN - DUP2 #0002 EQU2 ,&erase-full JCN + POP #0000 read-arg-1 + DUP2 #0000 EQU2 ?&erase-to-end + DUP2 #0001 EQU2 ?&erase-from-start + DUP2 #0002 EQU2 ?&erase-full POP2 BRK &erase-full - POP2 ;first-addr JSR2 ;limit-addr JSR2 ;erase JSR2 BRK + POP2 first-addr limit-addr erase BRK &erase-to-end - POP2 ;bol-addr JSR2 ;limit-addr JSR2 ;erase JSR2 BRK + POP2 bol-addr limit-addr erase BRK &erase-from-start - POP2 ;first-addr JSR2 ;eol-addr JSR2 ;erase JSR2 BRK + POP2 first-addr eol-addr erase BRK ( TODO: needs to be smarter -- need to redraw tiles and keep x/y coords ) @erase ( start* end* -> ) - EQU2k ,&skip JCN ( start* end* ) + EQU2k ?&skip ( start* end* ) OVR2 SWP2 ( start* start* end* ) SUB2 STH2 #4220 SWP2 ( 4220 start* [count*] ) &loop ( 4220 addr* [i*] ) STA2k INC2 INC2 INC2r INC2r ( 4220 addr+2* [i+1*] ) - ORAkr STHr ,&loop JCN ( 4220 addr+2* [i+2*] ) + ORAkr STHr ?&loop ( 4220 addr+2* [i+2*] ) POP2r POP2 POP2 ( ) #01 .dirty? STZ ( ; FIXME just redraw affected tiles ) JMP2r ( ) @@ -474,24 +474,24 @@ @exec-move-row ( c^ -> ) POP - #0001 ;read-arg-1 JSR2 #0001 SUB2 ( row ) + #0001 read-arg-1 #0001 SUB2 ( row ) .cur-x LDZ2 ( col ) - ;goto JSR2 BRK + goto BRK @exec-move-col ( c^ -> ) POP .cur-y LDZ2 ( row ) - #0001 ;read-arg-2 JSR2 #0001 SUB2 ( col ) - ;goto JSR2 BRK + #0001 read-arg-2 #0001 SUB2 ( col ) + goto BRK @exec-move ( c^ -> ) POP - #0001 ;read-arg-1 JSR2 #0001 SUB2 ( row ) - #0001 ;read-arg-2 JSR2 #0001 SUB2 ( col ) - ;goto JSR2 BRK + #0001 read-arg-1 #0001 SUB2 ( row ) + #0001 read-arg-2 #0001 SUB2 ( col ) + goto BRK @debug-esc ( c^ -> ) - .debug LDZ ,&continue JCN POP JMP2r &continue + .debug LDZ ?&continue POP JMP2r &continue ;scratch STH2 LIT "1 STH2kr STA INC2r LIT "b STH2kr STA INC2r @@ -503,43 +503,43 @@ JMP2r @on-read-esc ( -> ) - .Console/r DEI LIT "[ EQU ;start-csi JCN2 - .Console/r DEI ,debug-esc JSR + .Console/r DEI LIT "[ EQU ?start-csi + .Console/r DEI debug-esc ;on-read .Console/vect DEO2 - ;on-read JMP2 + !on-read @start-csi ( -> ) - ;reset-args JSR2 + reset-args ;on-read-csi .Console/vect DEO2 BRK @on-read .Console/r DEI - DUP ,&ok JCN POP BRK + DUP ?&ok POP BRK &ok ( #42 .tint STZ ) - ;read JMP2 + !read @read ( c^ -> ) - DUP #20 LTH ;read-ctrl JCN2 - DUP #7f EQU ;read-del JCN2 - ;read-printable JMP2 + DUP #20 LTH ?read-ctrl + DUP #7f EQU ?read-del + !read-printable @read-ctrl ( c^ -> ) - DUP #07 EQU ;read-bel JCN2 - DUP #08 EQU ;read-bs JCN2 - DUP #09 EQU ;read-tab JCN2 - DUP #0a EQU ;read-nl JCN2 - DUP #0d EQU ;read-cr JCN2 - DUP #1b EQU ;read-esc JCN2 + DUP #07 EQU ?read-bel + DUP #08 EQU ?read-bs + DUP #09 EQU ?read-tab + DUP #0a EQU ?read-nl + DUP #0d EQU ?read-cr + DUP #1b EQU ?read-esc @read-bel ( 07 -> ) POP BRK ( TODO: flash terminal ) @read-bs ( 08 -> ) POP - ;clear-cursor JSR2 - #0001 ;back-n JSR2 - ;draw-cursor JSR2 + clear-cursor + #0001 back-n + draw-cursor JMP2r @read-esc ( 1b -> ) @@ -555,147 +555,147 @@ NIP #07 AND #08 SUB ( i=(xlo&7)-8^ ) &loop ( i^ ) .tint LDZ #20 DUP2 ( i^ cell* cell* ) - ;cur-addr JSR2 STA2 ( i^ cell* ; addr<-cell ) - ;draw-cell JSR2 ( i^ ) - ;forward JSR2 ( i^ ) - INC DUP ,&loop JCN ( i+1^ ) + cur-addr STA2 ( i^ cell* ; addr<-cell ) + draw-cell ( i^ ) + forward ( i^ ) + INC DUP ?&loop ( i+1^ ) POP BRK ( ) @read-cr ( 0d -> ) - POP ;clear-cursor JSR2 #0000 .cur-x STZ2 BRK + POP clear-cursor #0000 .cur-x STZ2 BRK @at-max-y ( -> true? ) .cur-y LDZ2 .max-y LDZ2 EQU2 JMP2r @read-nl ( 0a -> ) - POP ;clear-cursor JSR2 - ,at-max-y JSR ;scroll JCN2 ;down JSR2 BRK + POP clear-cursor + at-max-y ?scroll down BRK @read-printable ( c -> ) - .tint LDZ SWP DUP2 ;cur-addr JSR2 STA2 - ;draw-cell JSR2 - ;forward JSR2 BRK + .tint LDZ SWP DUP2 cur-addr STA2 + draw-cell + forward BRK @goto ( y* x* -> ) - ;clear-cursor JSR2 - .max-x LDZ2 ;min JSR2 .cur-x STZ2 - .max-y LDZ2 ;min JSR2 .cur-y STZ2 - ;draw-cursor JMP2 + clear-cursor + .max-x LDZ2 min .cur-x STZ2 + .max-y LDZ2 min .cur-y STZ2 + !draw-cursor @forward-n ( n* -> ) - ;clear-cursor JSR2 - .cur-x LDZ2 ADD2 .max-x LDZ2 ;min JSR2 .cur-x STZ2 - ;draw-cursor JMP2 + clear-cursor + .cur-x LDZ2 ADD2 .max-x LDZ2 min .cur-x STZ2 + !draw-cursor @forward ( -> ) - #0001 ,forward-n JMP + #0001 !forward-n @back-n ( n* -> ) - ;clear-cursor JSR2 - .cur-x LDZ2 GTH2k ,&zero JCN - SWP2 SUB2 ,&done JMP + clear-cursor + .cur-x LDZ2 GTH2k ?&zero + SWP2 SUB2 !&done &zero POP2 POP2 #0000 - &done .cur-x STZ2 ;draw-cursor JMP2 + &done .cur-x STZ2 !draw-cursor @up-n ( n* -> ) - ;clear-cursor JSR2 - .cur-y LDZ2 GTH2k ,&zero JCN - SWP2 SUB2 ,&done JMP + clear-cursor + .cur-y LDZ2 GTH2k ?&zero + SWP2 SUB2 !&done &zero POP2 POP2 #0000 - &done .cur-y STZ2 ;draw-cursor JMP2 + &done .cur-y STZ2 !draw-cursor @down-n ( n* -> ) - ;clear-cursor JSR2 - .cur-y LDZ2 ADD2 .max-y LDZ2 ;min JSR2 .cur-y STZ2 - ;draw-cursor JMP2 + clear-cursor + .cur-y LDZ2 ADD2 .max-y LDZ2 min .cur-y STZ2 + !draw-cursor @down ( -> ) - #0001 ,down-n JMP + #0001 !down-n ( @insert ( c^ -> ) - .attr LDZ SWP ,insert-cell JMP + .attr LDZ SWP !insert-cell @insert-cell ( cell* -> ) - .irm LDZ #00 EQU ,&replace JCN ( cell* ) - ;eol-addr JSR2 #0001 SUB2 ( cell* last=eol-1* ) - ;cur-addr JSR2 ( cell* last* cur* ) + .irm LDZ #00 EQU ?&replace ( cell* ) + eol-addr #0001 SUB2 ( cell* last=eol-1* ) + cur-addr ( cell* last* cur* ) &loop ( cell* last* pos* ) LDA2k OVR2 INC2 STA2 ( cell* last* pos* ; pos+1<-pos ) - INC2 LTH2k ,&loop JCN ( cell* last pos+1* ) + INC2 LTH2k ?&loop ( cell* last pos+1* ) POP2 POP2 ( cell* ) &replace ( cell* ) - ;cur-addr JSR2 STA2 JMP2r ( ) ) + cur-addr STA2 JMP2r ( ) ) @forward-n-tabs ( n* -> ) #0001 SUB2 #0008 MUL2 ( i=(n-1)8* ) #0008 .cur-x LDZ2 #0007 AND2 SUB2 ( i* 8-cur%8* ) - ADD2 ;forward-n JMP2 ( ) + ADD2 !forward-n ( ) @insert-n-lines ( n* -> ) .col-bytes LDZ2 MUL2 STH2 ( [i*] ) - ;bol-addr JSR2 ( bound* [i*] ) - ;limit-addr JSR2 STH2kr ( bound* limit* i* [i*] ) + bol-addr ( bound* [i*] ) + limit-addr STH2kr ( bound* limit* i* [i*] ) INC2 INC2 SUB2 ( bound* start=limit-i-2* [i*] ) &loop ( bound* pos* [i*] ) LDA2k OVR2 STH2kr ADD2 ( bound* pos* x* pos+i* [i*] ) STA2 ( bound* pos* [i*] ; pos+i<-x ) #4220 OVR2 STA2 ( bound* pos* [i*] ; pos<-4220 ) #0002 SUB2 ( bound* pos-2* [i*] ) - GTH2k #00 EQU ,&loop JCN ( bound* pos-2* [i*] ) + GTH2k #00 EQU ?&loop ( bound* pos-2* [i*] ) POP2 POP2 POP2r ( ) #01 .dirty? STZ JMP2r ( ) @insert-n-spaces ( n* -> ) STH2 ( [n*] ) - .irm LDZ #00 EQU ,&replace JCN ( [n*] ) - ;eol-addr JSR2 #0001 SUB2 ( last* [n*] ) + .irm LDZ #00 EQU ?&replace ( [n*] ) + eol-addr #0001 SUB2 ( last* [n*] ) STH2kr DUP2 ADD2 SUB2 ( start=last-2n* [n*] ) - ;cur-addr JSR2 SWP2 ( end* start* [n*] ) + cur-addr SWP2 ( end* start* [n*] ) DUP2kr ADD2r ( end* start* [n* 2n*] ) &loop ( end* pos* [n* 2n*] ) LDA2k OVR2 STH2kr ADD2 ( end* pos* x* pos+2n* ) STA2 #0002 SUB2 ( end* pos-2* [n* 2n*] ) - GTH2k #00 EQU ,&loop JCN ( end* pos-2* [n* 2n*] ) + GTH2k #00 EQU ?&loop ( end* pos-2* [n* 2n*] ) POP2 POP2 POP2r ( [n*] ) &replace ( [n*] ) LIT2r 0000 SWP2r SUB2r ( [-n*] ) - #4220 ;cur-addr JSR2 ( 4220 cur* [-n*] ) + #4220 cur-addr ( 4220 cur* [-n*] ) &loop2 ( 4220 pos* [-i*] ) STA2k INC2 INC2 INC2r ( 4220 pos+2* [-i+1*] ) - ORAkr STHr ,&loop2 JCN ( 4220 pos+2* [-i+1*] ) + ORAkr STHr ?&loop2 ( 4220 pos+2* [-i+1*] ) POP2 POP2 POP2r ( ) #01 .dirty? STZ JMP2r ( ) ( starts with cursor pos ) @delete-n-chars ( n* -> ) DUP2 ADD2 STH2 ( [i=2n*] ) - ;eol-addr JSR2 STH2kr SUB2 ( limit=eol-i* [i*] ) - ;cur-addr JSR2 ( limit* start* [i*] ) + eol-addr STH2kr SUB2 ( limit=eol-i* [i*] ) + cur-addr ( limit* start* [i*] ) &loop ( limit* pos* [n*] ) DUP2 STH2kr ADD2 LDA2k ( limit* pos* pos+i* x* [i*] ) #4220 ROT2 STA2 ( limit* pos* x* [i*] ; pos+i<-4220 ) OVR2 STA2 INC2 INC2 ( limit* pos+2* [i*] ; pos<-x ) - GTH2k ,&loop JCN ( limit* pos+2* [i*] ) + GTH2k ?&loop ( limit* pos+2* [i*] ) POP2 POP2 POP2r ( ) #01 .dirty? STZ JMP2r ( ) ( starts below current line ) @delete-n-lines ( n* -> ) .col-bytes LDZ2 MUL2 STH2 ( [n*] ) - ;limit-addr JSR2 STH2kr SUB2 ( limit* [n*] ) - ;eol-addr JSR2 ( limit* start* [n*] ) - ,delete-n-chars/loop JMP + limit-addr STH2kr SUB2 ( limit* [n*] ) + eol-addr ( limit* start* [n*] ) + !delete-n-chars/loop @scroll - ;limit-addr JSR2 STH2 + limit-addr STH2 ;cells .col-bytes LDZ2 ADD2 STH2 &loop STH2kr LDA2 #4220 STH2kr STA2 STH2kr .col-bytes LDZ2 SUB2 STA2 - INC2r INC2r GTH2kr STHr ,&loop JCN + INC2r INC2r GTH2kr STHr ?&loop POP2r POP2r #01 .dirty? STZ - ;draw-cursor JSR2 BRK + draw-cursor BRK ( 0 <= index < 128 ) @load-tile ( index^ -> ) @@ -709,7 +709,7 @@ ( - B: background [0:black, 1:dim, 2:normal, 3:bright] ) @update-tint ( -> ) .attr LDZ - DUP #80 LTH ,&ok JCN + DUP #80 LTH ?&ok #80 EOR DUP #02 SFT SWP #20 SFT #0c AND ORA &ok #40 ORA .tint STZ JMP2r @@ -724,9 +724,9 @@ ( cell* = tint^ c^ ) @draw-cell ( cell* -> ) SWP STH ( c^ [tint^] ) - DUP #80 LTH ,&draw JCN ( c^ [tint^] ) + DUP #80 LTH ?&draw ( c^ [tint^] ) #80 SUB ( c-80^ [tint^] ) - &draw ;load-tile JSR2 ( [tint^] ) + &draw load-tile ( [tint^] ) STHr .Screen/sprite DEO ( ) JMP2r ( ) @@ -742,15 +742,15 @@ SWP2 STA2 BRK @read-arg-1 ( default* -> n* ) - ;args LDA2 ;max JMP2 + ;args LDA2 !max @read-arg-2 ( default* -> n* ) - ;args INC2 INC2 LDA2 ;max JMP2 + ;args INC2 INC2 LDA2 !max @reset-args ( -> ) ;args ;args/pos STA2 #0000 ;args LITr f8 &loop STA2k INC2 INC2 - INCr STHkr ,&loop JCN + INCr STHkr ?&loop POPr POP2 POP2 JMP2r @debug-log "debug_term.log 00