optimizations
This commit is contained in:
parent
83e790a9b2
commit
17d0aea884
|
@ -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
|
||||
|
|
52
term.tal
52
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% )
|
||||
|
|
Loading…
Reference in New Issue