From 17d0aea884adc3403015336c5bd2f5c91efb1ba5 Mon Sep 17 00:00:00 2001 From: d6 Date: Mon, 20 Feb 2023 10:51:31 -0500 Subject: [PATCH] optimizations --- cp437.tal | 1 + term.tal | 52 ++++++++++++++++++++++++---------------------------- 2 files changed, 25 insertions(+), 28 deletions(-) diff --git a/cp437.tal b/cp437.tal index 0a4647c..9fcab35 100644 --- a/cp437.tal +++ b/cp437.tal @@ -30,6 +30,7 @@ 00 00 00 24 66 ff 66 24 00 00 00 00 00 00 00 00 00 00 10 10 38 38 7c 7c fe fe 00 00 00 00 00 00 00 00 fe fe 7c 7c 38 38 10 10 00 00 00 00 00 00 +&space 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 78 78 78 30 30 00 30 30 00 00 00 00 00 00 00 66 66 66 24 00 00 00 00 00 00 00 00 00 00 00 diff --git a/term.tal b/term.tal index 6ac3134..eb94fd4 100644 --- a/term.tal +++ b/term.tal @@ -197,8 +197,7 @@ #01 .visual-bell STZ ( draw border ) - draw-border - JMP2r + !draw-border @update-dimensions ( -> ) ( set col-bytes, frequently needed ) @@ -219,13 +218,13 @@ ;&path .File1/name DEO2 #0006 .File1/len DEO2 ;&r .File1/r DEO2 - .File1/ok DEI2 ORA #01 JCN JMP2r + .File1/ok DEI2 ORA #01 [ JCN JMP2r ] ,&r LDR2 .System/r DEO2 ,&g LDR2 .System/g DEO2 ,&b LDR2 .System/b DEO2 #0002 .File1/len DEO2 ;&x .File1/r DEO2 - .File1/ok DEI2 ORA #01 JCN JMP2r + .File1/ok DEI2 ORA #01 [ JCN JMP2r ] #00 ,&x LDR .cols STZ2 #00 ,&y LDR .rows STZ2 JMP2r [ &path ".theme $1 &r $2 &g $2 &b $2 &x $1 &y $1 ] @@ -246,10 +245,10 @@ .col-bytes LDZ2 .rows LDZ2 MUL2 ;cells ADD2 JMP2r @min ( x* y* -> min* ) - LTH2k JMP SWP2 POP2 JMP2r + LTH2k [ JMP SWP2 ] POP2 JMP2r @max ( x* y* -> max* ) - LTH2k JMP SWP2 NIP2 JMP2r + LTH2k [ JMP SWP2 ] NIP2 JMP2r ( signed max ) ( #8000 < #8001 < ... < #ffff < #0000 < #0001 < ... < #7fff ) @@ -258,8 +257,7 @@ ( initialize screen cells and prepare for first draw ) @init-screen ( -> ) - first-addr limit-addr #0200 !init - + first-addr limit-addr #0200 ( fall-through ) @init ( start* limit* cell* -> ) STH2 EQU2k ?&skip ( start* limit* [cell*] ) #01 .dirty STZ OVR2 ( start* limit* start* [cell*] ) @@ -280,7 +278,7 @@ .Screen/y DEO2 JMP2r ( ; s/y<-y ) @draw-border ( -> ) - #0200 ;cp437 ADD2 .Screen/addr DEO2 + ;cp437/space .Screen/addr DEO2 #04 .Screen/sprite #0000 draw-border/row #0008 draw-border/row @@ -288,7 +286,7 @@ .Screen/y DEI2 #0008 ADD2 draw-border/row #0000 draw-border/col #0008 draw-border/col - .cols LDZ2 #0008 MUL2 #0010 ADD2 draw-border/col + .cols LDZ2 #30 SFT2 #0010 ADD2 draw-border/col .Screen/x DEI2 #0008 ADD2 draw-border/col #00 .Screen/auto DEO POP2 !screen-to-cursor @@ -303,7 +301,7 @@ .Screen/x DEO2 #0000 .Screen/y DEO2 #02 .Screen/auto DEO - #0000 .rows LDZ2 #0003 MUL2 INC2 #0002 DIV2 #0004 ADD2 SUB2 STH2 + #0000 .rows LDZ2 #0003 MUL2 INC2 #01 SFT2 #0004 ADD2 SUB2 STH2 !&loop &loop ( 04 sprite^ [-count] ) @@ -423,7 +421,7 @@ &yloop ( yn* y* [addr* x*] ) OVR2 OVR2 INC2 GTH2 STH .cols LDZ2 ( yn* y* cols* [addr* x* last^] ) lit-last-x INC2 ( yn* y* cols* xn* [addr* x* last^] ) - STHr JMP SWP2 POP2 STH2r ( yn* y* xlim* x* [addr*] ) + STHr [ JMP SWP2 ] POP2 STH2r ( yn* y* xlim* x* [addr*] ) &xloop ( yn* y* xlim* x* [addr*] ) STH2kr LDA2 highlight-cell ( yn* y* xlim* x* [addr*] ) .Screen/x DEI2k #0008 ADD2 ROT DEO2 ( yn* y* xlim* x* [addr*] ) @@ -440,7 +438,7 @@ #0010 LTH2k ?&y0 SUB2 #000c DIV2 .max-y LDZ2 !min &y0 POP2 POP2 #0000 JMP2r @x-point-to-col ( x* -> col* ) - #0010 LTH2k ?&x0 SUB2 #0008 DIV2 .max-x LDZ2 !min &x0 POP2 POP2 #0000 JMP2r + #0010 LTH2k ?&x0 SUB2 #03 SFT2 .max-x LDZ2 !min &x0 POP2 POP2 #0000 JMP2r @point-to-coord ( x* y* -> row* col* ) y-point-to-row SWP2 !x-point-to-col @@ -498,7 +496,7 @@ &yloop ( yn* y* [x*] ) OVR2 OVR2 INC2 GTH2 STH .max-x LDZ2 ( yn* y* maxx* [x* last^] ) lit-last-x ( yn* y* maxx* xlast* [x* last^] ) - STHr JMP SWP2 POP2 STH2r ( yn* y* x1* x* ) + STHr [ JMP SWP2 ] POP2 STH2r ( yn* y* x1* x* ) copy-line ( yn* y* ) LIT2r 0000 INC2 GTH2k ?&next !&done ( yn* y+1* [0*] ) &next ( ) @@ -568,15 +566,13 @@ JMP2r ( ) &redraw ( ) .lastmouse-x LDZ2 .lastmouse-y LDZ2 ( lx* ly* ) - #0200 ;cp437 ADD2 draw-at ( ) - .is-lit LDZ #00 EQU ?&next - update-selection - #01 .dirty STZ - &next + ;cp437/space draw-at ( ) + .is-lit LDZ #00 EQU ?&next ( ) + update-selection #01 .dirty STZ ( ) + &next ( ) .Mouse/x DEI2 .Mouse/y DEI2 ( x* y* ) .lastmouse-y STZ2 .lastmouse-x STZ2 ( ) - draw-pointer - !screen-to-cursor ( ) + draw-pointer !screen-to-cursor ( ) @on-mouse ( -> BRK ) .lastmouse-st LDZ ( last ) @@ -912,8 +908,7 @@ POP2 JMP2r &erase-full POP2 first-addr limit-addr !erase &erase-to-end POP2 bol-addr limit-addr !erase - &erase-from-start POP2 first-addr eol-addr !erase - + &erase-from-start POP2 first-addr eol-addr ( fall-through ) @erase ( start* end* -> ) #0200 !init @exec-cup ( c^ -> BRK ) @@ -1230,8 +1225,8 @@ #000a MUL2 STH2r ADD2 ( addr* value*10+digit ) SWP2 STA2 BRK -@read-arg-1 ( default* -> n* ) ;args LDA2 !max -@read-arg-2 ( default* -> n* ) ;args INC2 INC2 LDA2 !max +@read-arg-1 ( default* -> n* ) ;args/arg1 LDA2 !max +@read-arg-2 ( default* -> n* ) ;args/arg2 ( INC2 INC2 ) LDA2 !max @reset-args ( -> ) ;args ;args/pos STA2 @@ -1245,11 +1240,11 @@ LITr 00 ( n [0] ) &read ( n [k] ) #000a DIV2k STH2k MUL2 SUB2 STH2r INCr ( n%10 n/10 [k+1] ) - ORAk ,&read JCN + ORAk ?&read POP2 ( top element was 0000 ) &write ( n0 n1 ... nk [k+1] ) NIP #30 ADD .Console/w DEO LITr 01 SUBr ( n0 ... n{k-1} [k] ) - STHkr ,&write JCN + STHkr ?&write POPr JMP2r @debug-log "debug_term.log 00 @@ -1264,7 +1259,8 @@ ;scratch ;scratch/pos STA2 JMP2r ( store up to 8 arguments for control sequences ) -@args $10 &pos $2 +( @args $10 &pos $2 ) +@args [ &arg1 $2 &arg2 $2 &rest $c &pos $2 ] ( 256 chars x 2 tiles/char x 8 bytes/tile = 4096 bytes ) ( second tile only uses top 50% )