From b7c014bb01635f7229496774c3d8dcfdfb513bea Mon Sep 17 00:00:00 2001 From: d6 Date: Sun, 12 Feb 2023 13:00:49 -0500 Subject: [PATCH] more optimizations from neauoire --- term.tal | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/term.tal b/term.tal index 4822098..de42159 100644 --- a/term.tal +++ b/term.tal @@ -284,7 +284,7 @@ .flash LDZk #01 SUB SWP STZ ( ; flash<-flash-1 ) #0000 DUP2 .lit-click-x STZ2 .lit-click-y STZ2 .max-x LDZ2 .lit-drag-x STZ2 .max-y LDZ2 .lit-drag-y STZ2 - redraw-selection clear-selection JMP2r + redraw-selection !clear-selection @screen-to-cell ( row* col* -> ) #30 SFT2 ( width ) #0008 ( border ) ADD2 .Screen/x DEO2 @@ -362,7 +362,7 @@ @redraw-selection ( -> ) lit-first-y .cols LDZ2 MUL2 ( y0*cols* ) - lit-first-x ADD2 #0002 MUL2 ( 2(y0*cols+x0)* ) + lit-first-x ADD2 #10 SFT2 ( 2(y0*cols+x0)* ) ;cells ADD2 STH2 ( [addr*] ) lit-last-y INC2 lit-first-y ( yn* y0* [addr*] ) DUP2 lit-first-x STH2k ( yn* y0* x0* [addr* x0*] ) @@ -384,8 +384,8 @@ JMP2r ( ) @point-to-coord ( x* y* -> row* col* ) - DUP2 #0008 SUB2 min #000c DIV2 .max-y LDZ2 min SWP2 ( row=(y-8)/12* x* ) - DUP2 #0008 SUB2 min #0008 DIV2 .max-x LDZ2 min JMP2r ( row* col=(x-8)/8* ) + DUP2 #0008 SUB2 min #000c DIV2 .max-y LDZ2 min SWP2 ( row=(y-8)/12* x* ) + DUP2 #0008 SUB2 min #03 SFT2 .max-x LDZ2 !min ( row* col=(x-8)/8* ) @start-selection ( -> ) #01 .is-lit STZ ( ) @@ -402,8 +402,8 @@ @find-natural-end ( y* -> xend* ) DUP2 .cols LDZ2 MUL2 ( y* y*cols* ) - #0002 MUL2 ;cells ADD2 INC2 ( y* edge* ) - DUP2 .max-x LDZ2 #0002 MUL2 ADD2 ( y* edge* start=edge+2cols* ) + #10 SFT2 ;cells ADD2 INC2 ( y* edge* ) + DUP2 .max-x LDZ2 #10 SFT2 ADD2 ( y* edge* start=edge+2cols* ) &loop ( y* edge* addr* ) LDAk ?&done ( y* edge* addr* ) #0002 SUB2 LTH2k ?&loop ( y* edge* addr-2* ) @@ -415,7 +415,7 @@ STH2 STH2 DUP2 find-natural-end ( y* xend* [x0* x1*] ) STH2r min ( y* xlim=min(xend,x1)* [x0*] ) OVR2 .cols LDZ2 MUL2 ( y* xlim* y*cols* [x0*] ) - STH2kr ADD2 #0002 MUL2 ;cells ADD2 ( y* xlim* addr* [x0*] ) + STH2kr ADD2 #10 SFT2 ;cells ADD2 ( y* xlim* addr* [x0*] ) INC2 STH2 SWP2r STH2r ( y* xlim* x0* [addr+1*] ) SUB2 INC2 #0000 SWP2 SUB2 ( y* -count* [addr+1*] ) &loop ( y* -i* [pos*] ) @@ -449,8 +449,8 @@ JMP2r ( ) @handle-selection ( -> ) - selection-is-empty ?&skip copy-selection &skip !clear-selection - + selection-is-empty ?&skip copy-selection + &skip ( fall through to clear-selection ) @clear-selection ( -> ) #00 .is-lit STZ #00 .is-lit-flip STZ @@ -511,8 +511,7 @@ .Mouse/x DEI2 .Mouse/y DEI2 ( x* y* ) .lastmouse-y STZ2 .lastmouse-x STZ2 ( ) draw-pointer - screen-to-cursor ( ) - JMP2r ( ) + !screen-to-cursor ( ) @on-mouse ( -> BRK ) .lastmouse-st LDZ ( last ) @@ -848,12 +847,12 @@ .Console/r DEI DUP debug-read DUP ?&ok POP BRK - &ok !read - -@read ( c^ -> BRK ) + &ok DUP #20 LTH ?read-ctrl DUP #7f EQU ?read-del - !read-printable + ( read printable ) + .tint LDZ SWP DUP2 insert-cell + draw-cell forward BRK @read-ctrl ( c^ -> BRK ) DUP #07 EQU ?read-bel @@ -902,9 +901,6 @@ @read-nl ( 0a -> BRK ) POP clear-cursor at-max-y ?scroll down BRK -@read-printable ( c^ -> BRK ) - .tint LDZ SWP DUP2 insert-cell draw-cell forward BRK - @goto ( y* x* -> ) clear-cursor .max-x LDZ2 min .cur-x STZ2 @@ -953,7 +949,7 @@ cur-addr STA2 JMP2r ( ) @forward-n-tabs ( n* -> ) - dec-floor #0008 MUL2 ( i=(n-1)8* ) + dec-floor #30 SFT2 ( i=(n-1)8* ) #0008 .cur-x LDZ2 #0007 AND2 SUB2 ( i* 8-cur%8* ) ADD2 !forward-n ( ) @@ -1107,7 +1103,7 @@ LITr 00 ( n [0] ) &read ( n [k] ) #000a DIV2k STH2k MUL2 SUB2 STH2r INCr ( n%10 n/10 [k+1] ) - DUP2 ORA ,&read JCN + ORAk ,&read JCN 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] )