merge
This commit is contained in:
commit
9d0ffdfb1d
255
femto.tal
255
femto.tal
|
@ -49,7 +49,6 @@
|
||||||
( - search&replace )
|
( - search&replace )
|
||||||
( - tab support? )
|
( - tab support? )
|
||||||
( - windows line-ending support (CRLF) )
|
( - windows line-ending support (CRLF) )
|
||||||
|
|
||||||
( FIXME: )
|
( FIXME: )
|
||||||
( - stop using bytes for row/col/etc. )
|
( - stop using bytes for row/col/etc. )
|
||||||
( - consider storing absolute cursor instead )
|
( - consider storing absolute cursor instead )
|
||||||
|
@ -67,9 +66,13 @@
|
||||||
|
|
||||||
%quit! { #01 .System/halt DEO }
|
%quit! { #01 .System/halt DEO }
|
||||||
|
|
||||||
|
( zero page )
|
||||||
|
|0000
|
||||||
|
|
||||||
( startup )
|
( startup )
|
||||||
|0100 ;startup JMP2
|
|0100 ;startup JMP2
|
||||||
|
|
||||||
|
( code to run on startup )
|
||||||
@startup ;read-filename .Console/vector DEO2 BRK
|
@startup ;read-filename .Console/vector DEO2 BRK
|
||||||
|
|
||||||
( ERROR HANDLING )
|
( ERROR HANDLING )
|
||||||
|
@ -89,7 +92,7 @@
|
||||||
|
|
||||||
@open-file ( filename* -> )
|
@open-file ( filename* -> )
|
||||||
.File/name DEO2
|
.File/name DEO2
|
||||||
#8000 .File/length DEO2
|
#f000 .File/length DEO2
|
||||||
;buffer/data .File/read DEO2
|
;buffer/data .File/read DEO2
|
||||||
|
|
||||||
.File/success DEI2 #0000 GTH2 ,&ok JCN
|
.File/success DEI2 #0000 GTH2 ,&ok JCN
|
||||||
|
@ -100,7 +103,7 @@
|
||||||
JMP2r
|
JMP2r
|
||||||
|
|
||||||
@setup-terminal-size ( -> )
|
@setup-terminal-size ( -> )
|
||||||
( ;setup-80x24 JSR2 JMP2r )
|
( ;setup-80x24 JMP2 )
|
||||||
#03e7 #03e7 ;term-move-cursor JSR2
|
#03e7 #03e7 ;term-move-cursor JSR2
|
||||||
;term-get-cursor-position JSR2
|
;term-get-cursor-position JSR2
|
||||||
;tmp/data ;tmp/pos STA2
|
;tmp/data ;tmp/pos STA2
|
||||||
|
@ -188,7 +191,7 @@
|
||||||
;draw-statusbar JSR2 ;draw-cursor JSR2
|
;draw-statusbar JSR2 ;draw-cursor JSR2
|
||||||
,&skip JMP
|
,&skip JMP
|
||||||
&next-line #0000 ;cursor/col STA2
|
&next-line #0000 ;cursor/col STA2
|
||||||
;cursor/row LDA2k INC2 SWP2 STA2
|
;inc-row JSR2
|
||||||
;ensure-visible-cursor JSR2
|
;ensure-visible-cursor JSR2
|
||||||
;draw-cursor JSR2
|
;draw-cursor JSR2
|
||||||
&skip BRK
|
&skip BRK
|
||||||
|
@ -203,8 +206,8 @@
|
||||||
|
|
||||||
@up ( -> )
|
@up ( -> )
|
||||||
;cur-abs-row JSR2 #0000 EQU2 ,&done JCN
|
;cur-abs-row JSR2 #0000 EQU2 ,&done JCN
|
||||||
;cur-row JSR2 #0001 LTH2 ,&screen-up JCN
|
;cur-rel-row JSR2 #0001 LTH2 ,&screen-up JCN
|
||||||
;cursor/row LDA2k #0001 SUB2 SWP2 STA2
|
;dec-row JSR2
|
||||||
;draw-statusbar JSR2
|
;draw-statusbar JSR2
|
||||||
;draw-cursor JSR2 BRK
|
;draw-cursor JSR2 BRK
|
||||||
&screen-up
|
&screen-up
|
||||||
|
@ -215,7 +218,7 @@
|
||||||
|
|
||||||
@down ( -> )
|
@down ( -> )
|
||||||
;cur-abs-row JSR2 ;last-abs-row JSR2 EQU2 ,&done JCN
|
;cur-abs-row JSR2 ;last-abs-row JSR2 EQU2 ,&done JCN
|
||||||
;cursor/row LDA2k INC2 SWP2 STA2
|
;inc-row JSR2
|
||||||
;ensure-visible-cursor JSR2
|
;ensure-visible-cursor JSR2
|
||||||
;draw-statusbar JSR2
|
;draw-statusbar JSR2
|
||||||
;draw-cursor JSR2 BRK
|
;draw-cursor JSR2 BRK
|
||||||
|
@ -230,14 +233,12 @@
|
||||||
;buffer/line-offset STA2
|
;buffer/line-offset STA2
|
||||||
;ensure-visible-cursor JSR2
|
;ensure-visible-cursor JSR2
|
||||||
;draw-all JSR2 BRK
|
;draw-all JSR2 BRK
|
||||||
&near-bof POP2 POP2 &xyz
|
&near-bof POP2 POP2
|
||||||
;buffer/data ;buffer/offset STA2
|
;zero-row JSR2
|
||||||
#0000 ;buffer/line-offset STA2
|
#0000 ;cursor/col STA2
|
||||||
#0000 ;cursor/row STA2
|
|
||||||
#0000 ;cursor/col STA2
|
|
||||||
;draw-all JSR2 BRK
|
;draw-all JSR2 BRK
|
||||||
&at-bof
|
&at-bof
|
||||||
#0000 ;cursor/row STA2
|
;zero-row JSR2
|
||||||
#0000 ;cursor/col STA2
|
#0000 ;cursor/col STA2
|
||||||
;draw-cursor JSR2 BRK
|
;draw-cursor JSR2 BRK
|
||||||
|
|
||||||
|
@ -250,9 +251,7 @@
|
||||||
;ensure-visible-cursor JSR2
|
;ensure-visible-cursor JSR2
|
||||||
;draw-all JSR2 BRK
|
;draw-all JSR2 BRK
|
||||||
&near-eof
|
&near-eof
|
||||||
;buffer/line-count LDA2
|
;buffer/line-count LDA2 #0001 SUB2 ;set-abs-row JSR2
|
||||||
;buffer/line-offset LDA2 INC2
|
|
||||||
SUB2 ;cursor/row STA2
|
|
||||||
;cur-len JSR2 ;cursor/col STA2
|
;cur-len JSR2 ;cursor/col STA2
|
||||||
;draw-cursor JSR2 BRK
|
;draw-cursor JSR2 BRK
|
||||||
|
|
||||||
|
@ -266,11 +265,24 @@
|
||||||
;draw-all JSR2
|
;draw-all JSR2
|
||||||
BRK
|
BRK
|
||||||
|
|
||||||
|
@insert-tab ( -> )
|
||||||
|
;config/insert-tabs LDA ,&use-tabs JCN
|
||||||
|
#0000 ;config/tab-width LDA2 SUB2
|
||||||
|
&loop
|
||||||
|
DUP2 #0000 EQU2 ,&done JCN
|
||||||
|
#20 ;cur-pos JSR2 ;shift-right JSR2
|
||||||
|
INC2 ,&loop JMP
|
||||||
|
&done
|
||||||
|
;cur-col JSR2 ;config/tab-width LDA2 ADD2 ;cursor/col STA2
|
||||||
|
;draw-all JSR2 BRK
|
||||||
|
&use-tabs
|
||||||
|
#09 ;insert JMP2
|
||||||
|
|
||||||
( TODO: handle last line )
|
( TODO: handle last line )
|
||||||
@newline ( c^ -> )
|
@newline ( c^ -> )
|
||||||
#0a ;cur-pos JSR2 ;shift-right JSR2
|
#0a ;cur-pos JSR2 ;shift-right JSR2
|
||||||
#0000 ;cursor/col STA2
|
#0000 ;cursor/col STA2
|
||||||
;cursor/row LDA2k INC2 SWP2 STA2
|
;inc-row JSR2
|
||||||
;buffer/line-count LDA2k INC2 SWP2 STA2
|
;buffer/line-count LDA2k INC2 SWP2 STA2
|
||||||
;ensure-visible-cursor JSR2
|
;ensure-visible-cursor JSR2
|
||||||
;draw-all JSR2
|
;draw-all JSR2
|
||||||
|
@ -332,10 +344,8 @@
|
||||||
;draw-all JSR2 BRK
|
;draw-all JSR2 BRK
|
||||||
|
|
||||||
@goto-start ( -> )
|
@goto-start ( -> )
|
||||||
;buffer/data ;buffer/offset STA2
|
;zero-row JSR2
|
||||||
#0000 ;buffer/line-offset STA2
|
|
||||||
#0000 ;cursor/col STA2
|
#0000 ;cursor/col STA2
|
||||||
#0000 ;cursor/row STA2
|
|
||||||
;draw-all JSR2
|
;draw-all JSR2
|
||||||
BRK
|
BRK
|
||||||
|
|
||||||
|
@ -360,11 +370,11 @@
|
||||||
;buffer/line-offset STA2 ( n o [n-o] )
|
;buffer/line-offset STA2 ( n o [n-o] )
|
||||||
;abs-line JSR2 ;buffer/offset STA2 ( n [n-o] )
|
;abs-line JSR2 ;buffer/offset STA2 ( n [n-o] )
|
||||||
#0000 ;cursor/col STA2 ( n [n-o] )
|
#0000 ;cursor/col STA2 ( n [n-o] )
|
||||||
POP2 STH2r ;cursor/row STA2 ( )
|
POP2 STH2r ;cursor/row STA2
|
||||||
JMP2r
|
JMP2r
|
||||||
|
|
||||||
@ensure-visible-cursor
|
@ensure-visible-cursor
|
||||||
;cur-row JSR2 ;term/rows LDA2 LTH2 ,&noop JCN
|
;cur-rel-row JSR2 ;term/rows LDA2 LTH2 ,&noop JCN
|
||||||
;cur-abs-row JSR2 ;jump-to-line JSR2
|
;cur-abs-row JSR2 ;jump-to-line JSR2
|
||||||
;draw-all JSR2
|
;draw-all JSR2
|
||||||
&noop JMP2r
|
&noop JMP2r
|
||||||
|
@ -387,7 +397,7 @@
|
||||||
BRK
|
BRK
|
||||||
|
|
||||||
@move-to-message-line ( -> )
|
@move-to-message-line ( -> )
|
||||||
#0002 ;term/rows LDA2 #0002 ADD2 ;term-move-cursor JSR2 JMP2r
|
#0002 ;term/rows LDA2 #0002 ADD2 ;term-move-cursor JMP2
|
||||||
|
|
||||||
( TODO: filename prmopt )
|
( TODO: filename prmopt )
|
||||||
@save ( -> )
|
@save ( -> )
|
||||||
|
@ -414,6 +424,7 @@
|
||||||
.Console/read DEI #04 EQU ( C-d ) ;delete JCN2
|
.Console/read DEI #04 EQU ( C-d ) ;delete JCN2
|
||||||
.Console/read DEI #05 EQU ( C-e ) ;eol JCN2
|
.Console/read DEI #05 EQU ( C-e ) ;eol JCN2
|
||||||
.Console/read DEI #06 EQU ( C-f ) ;forward JCN2
|
.Console/read DEI #06 EQU ( C-f ) ;forward JCN2
|
||||||
|
.Console/read DEI #09 EQU ( \t ) ;insert-tab JCN2
|
||||||
.Console/read DEI #0c EQU ( C-l ) ;refresh JCN2
|
.Console/read DEI #0c EQU ( C-l ) ;refresh JCN2
|
||||||
.Console/read DEI #0d EQU ( \r ) ;newline JCN2
|
.Console/read DEI #0d EQU ( \r ) ;newline JCN2
|
||||||
.Console/read DEI #0e EQU ( C-n ) ;down JCN2
|
.Console/read DEI #0e EQU ( C-n ) ;down JCN2
|
||||||
|
@ -440,6 +451,9 @@
|
||||||
LIT '; emit INC2 ( col+1 ) ;emit-dec2 JSR2
|
LIT '; emit INC2 ( col+1 ) ;emit-dec2 JSR2
|
||||||
LIT 'H emit JMP2r
|
LIT 'H emit JMP2r
|
||||||
|
|
||||||
|
@term-move-right ( n* -> )
|
||||||
|
ansi ;emit-dec2 JSR2 LIT 'C emit JMP2r
|
||||||
|
|
||||||
@term-get-cursor-position ( -> )
|
@term-get-cursor-position ( -> )
|
||||||
ansi LIT '6 emit LIT 'n emit JMP2r
|
ansi LIT '6 emit LIT 'n emit JMP2r
|
||||||
|
|
||||||
|
@ -447,12 +461,13 @@
|
||||||
ansi LIT '2 emit LIT 'J emit JMP2r
|
ansi LIT '2 emit LIT 'J emit JMP2r
|
||||||
|
|
||||||
@draw-cursor ( -> )
|
@draw-cursor ( -> )
|
||||||
;cur-col JSR2 ;cur-row JSR2
|
;cur-w-col JSR2 ;term/lmargin LDA2 ADD2
|
||||||
;term-move-cursor JSR2 JMP2r
|
;cur-rel-row JSR2
|
||||||
|
;term-move-cursor JMP2
|
||||||
|
|
||||||
@draw-statusbar ( -> )
|
@draw-statusbar ( -> )
|
||||||
#0000 ;term/rows LDA2 ;term-move-cursor JSR2
|
#0000 ;term/rows LDA2 ;term-move-cursor JSR2
|
||||||
ansi LIT '7 emit LIT 'm emit
|
;emit-color-reverse JSR2
|
||||||
LIT2r 2018
|
LIT2r 2018
|
||||||
;term/cols LDA2 #0000
|
;term/cols LDA2 #0000
|
||||||
&loop GTH2k ,&continue JCN ,&done JMP
|
&loop GTH2k ,&continue JCN ,&done JMP
|
||||||
|
@ -476,29 +491,74 @@
|
||||||
;cur-abs-row JSR2 INC2 ;emit-dec2 JSR2
|
;cur-abs-row JSR2 INC2 ;emit-dec2 JSR2
|
||||||
LIT ') emit
|
LIT ') emit
|
||||||
|
|
||||||
ansi LIT '0 emit LIT 'm emit
|
;emit-reset JSR2
|
||||||
JMP2r
|
JMP2r
|
||||||
|
|
||||||
|
@draw-linenum ( n* -> )
|
||||||
|
;emit-reset JSR2
|
||||||
|
ansi ;config/color LDA2 emit emit LIT 'm emit
|
||||||
|
;emit-dec2-pad JSR2
|
||||||
|
ansi LIT2 'm '0 emit emit JMP2r
|
||||||
|
|
||||||
|
@emit-tab ( -> )
|
||||||
|
#0000 ;config/tab-width LDA2 SUB2
|
||||||
|
LIT2r 2018
|
||||||
|
&loop ORAk ,&next JCN POP2 POP2r JMP2r
|
||||||
|
&next DEOkr INC2 ,&loop JMP
|
||||||
|
|
||||||
|
@emit-red ( -> )
|
||||||
|
ansi LIT '3 emit LIT '1 emit LIT 'm emit JMP2r
|
||||||
|
|
||||||
|
@emit-reset ( -> )
|
||||||
|
ansi LIT '0 emit LIT 'm emit JMP2r
|
||||||
|
|
||||||
|
@emit-red-dollar ( -> )
|
||||||
|
;emit-red JSR2 LIT '$ emit ;emit-reset JMP2
|
||||||
|
|
||||||
|
@emit-color-reverse ( -> )
|
||||||
|
ansi ;config/color LDA2 emit emit LIT2 '7 '; emit emit LIT 'm emit JMP2r
|
||||||
|
|
||||||
@draw-all ( -> )
|
@draw-all ( -> )
|
||||||
;term-erase-all JSR2
|
;term-erase-all JSR2
|
||||||
#0000 #0000 ;term-move-cursor JSR2
|
#0000 #0000 ;term-move-cursor JSR2
|
||||||
#0001 STH2
|
;buffer/line-offset LDA2 STH2 LIT2r 0001 ( [k line-offset] )
|
||||||
;buffer/offset LDA2
|
;buffer/offset LDA2
|
||||||
&loop
|
&bol
|
||||||
LDAk #00 EQU ,&eof JCN
|
ADD2kr STH2r ;draw-linenum JSR2
|
||||||
LDAk #0a EQU ,&eol JCN
|
;term/lmargin LDA2 INC2 ,&x STR2
|
||||||
LDAk emit INC2 ,&loop JMP
|
( TODO: use this for cursor-line highlighting and long line support )
|
||||||
&eol INC2r STH2kr ;term/rows LDA2 GTH2 ,&done JCN
|
( STH2kr ;cursor/row LDA2 INC2 NEQ2 ,&loop JCN
|
||||||
cr nl INC2 ,&loop JMP
|
;emit-color-reverse JSR2 )
|
||||||
|
&loop ( offset [k line-offset] )
|
||||||
|
LDAk #00 EQU ,&eof JCN
|
||||||
|
LDAk #0a EQU ,&eol JCN
|
||||||
|
,&x LDR2 ;term/cols LDA2
|
||||||
|
LTH2k ,&ok JCN
|
||||||
|
GTH2 ,&skip JCN
|
||||||
|
;emit-red-dollar JSR2 ,&x LDR2 INC2 ,&x STR2
|
||||||
|
&skip INC2
|
||||||
|
,&loop JMP
|
||||||
|
&ok POP2 POP2
|
||||||
|
LDAk #09 EQU ,&do-tab JCN
|
||||||
|
LDAk emit INC2 ,&x LDR2 INC2 ,&x STR2
|
||||||
|
,&loop JMP
|
||||||
|
&eol INC2r
|
||||||
|
STH2kr ;term/rows LDA2 GTH2 ,&done JCN
|
||||||
|
cr nl INC2 ,&bol JMP
|
||||||
|
&do-tab ;emit-tab JSR2 INC2
|
||||||
|
;config/tab-width LDA2 ,&x LDR2 ADD2 ,&x STR2
|
||||||
|
,&loop JMP
|
||||||
|
[ &x $2 ]
|
||||||
&eof
|
&eof
|
||||||
ansi LIT '3 emit LIT '1 emit LIT 'm emit
|
;emit-red JSR2
|
||||||
&eof-loop
|
&eof-loop
|
||||||
STH2kr ;term/rows LDA2 GTH2 ,&done JCN
|
STH2kr ;term/rows LDA2 GTH2 ,&done JCN
|
||||||
cr nl
|
cr nl
|
||||||
|
;term/lmargin LDA2 ;term-move-right JSR2
|
||||||
LIT '~ emit INC2r
|
LIT '~ emit INC2r
|
||||||
,&eof-loop JMP
|
,&eof-loop JMP
|
||||||
&done POP2 POP2r
|
&done POP2 POP2r POP2r
|
||||||
ansi LIT '0 emit LIT 'm emit
|
;emit-reset JSR2
|
||||||
;draw-statusbar JSR2
|
;draw-statusbar JSR2
|
||||||
;draw-cursor JSR2
|
;draw-cursor JSR2
|
||||||
JMP2r
|
JMP2r
|
||||||
|
@ -517,18 +577,33 @@
|
||||||
&eof POP2 JMP2r
|
&eof POP2 JMP2r
|
||||||
|
|
||||||
@cur-len ( -> n* )
|
@cur-len ( -> n* )
|
||||||
;cur-line JSR2 ;line-len JSR2 JMP2r
|
;cur-line JSR2 ;line-len JMP2
|
||||||
|
|
||||||
@cur-last ( -> n* )
|
@cur-last ( -> n* )
|
||||||
;cur-line JSR2 ;line-len JSR2 #0001 SUB2 JMP2r
|
;cur-line JSR2 ;line-len JSR2 #0001 SUB2 JMP2r
|
||||||
|
|
||||||
|
@cur-width ( -> n* )
|
||||||
|
;cur-line JSR2 ;line-width JMP2
|
||||||
|
|
||||||
|
@cur-w-last ( -> n* )
|
||||||
|
;cur-line JSR2 ;line-width JSR2 #0001 SUB2 JMP2r
|
||||||
|
|
||||||
@line-len ( s* -> n* )
|
@line-len ( s* -> n* )
|
||||||
#0000 STH2
|
#0000 STH2
|
||||||
&loop LDAk #00 EQU ,&end JCN
|
&loop LDAk #00 EQU ,&end JCN
|
||||||
LDAk #0a EQU ,&end JCN
|
LDAk #0a EQU ,&end JCN
|
||||||
INC2 INC2r ,&loop JMP
|
INC2 INC2r ,&loop JMP
|
||||||
&end POP2 STH2r JMP2r
|
&end POP2 STH2r JMP2r
|
||||||
|
|
||||||
|
@line-width ( s* -> n* )
|
||||||
|
#0000 STH2
|
||||||
|
&loop LDAk #00 EQU ,&done JCN
|
||||||
|
LDAk #0a EQU ,&done JCN
|
||||||
|
LDAk #09 EQU ,&tabs JCN
|
||||||
|
INC2 INC2r ,&loop JMP
|
||||||
|
&tabs #0004 ADD2 ,&loop JMP
|
||||||
|
&done POP2 STH2r JMP2r
|
||||||
|
|
||||||
@abs-line ( y* -> s* )
|
@abs-line ( y* -> s* )
|
||||||
#0000 SWP2 SUB2 STH2 ( [-y] )
|
#0000 SWP2 SUB2 STH2 ( [-y] )
|
||||||
;buffer/data ( addr )
|
;buffer/data ( addr )
|
||||||
|
@ -558,13 +633,13 @@
|
||||||
¬-found ;rel-line-error ;error! JMP2
|
¬-found ;rel-line-error ;error! JMP2
|
||||||
|
|
||||||
@cur-line ( -> s* )
|
@cur-line ( -> s* )
|
||||||
;cur-row JSR2 ;rel-line JSR2 JMP2r
|
;cur-rel-row JSR2 ;rel-line JMP2
|
||||||
|
|
||||||
@cur-pos ( -> s* )
|
@cur-pos ( -> s* )
|
||||||
;cur-line JSR2 ;cur-col JSR2 ADD2 JMP2r
|
;cur-line JSR2 ;cur-col JSR2 ADD2 JMP2r
|
||||||
|
|
||||||
@cur-abs-row ( -> n* )
|
@cur-abs-row ( -> n* )
|
||||||
;cur-row JSR2 ;buffer/line-offset LDA2 ADD2 JMP2r
|
;cur-rel-row JSR2 ;buffer/line-offset LDA2 ADD2 JMP2r
|
||||||
|
|
||||||
@last-abs-row ( -> n* )
|
@last-abs-row ( -> n* )
|
||||||
;buffer/line-count LDA2 #0001 SUB2 JMP2r
|
;buffer/line-count LDA2 #0001 SUB2 JMP2r
|
||||||
|
@ -580,7 +655,7 @@
|
||||||
&done NIP2 DUP2 ( addr addr [prev^] )
|
&done NIP2 DUP2 ( addr addr [prev^] )
|
||||||
STHr ROT ROT ( addr prev^ addr )
|
STHr ROT ROT ( addr prev^ addr )
|
||||||
STA INC2 ( addr+1 )
|
STA INC2 ( addr+1 )
|
||||||
;buffer/limit STA2 ( )
|
;buffer/limit STA2 ( )
|
||||||
JMP2r
|
JMP2r
|
||||||
|
|
||||||
( TODO: change last/addr order and GTH -> LTH to remove hack )
|
( TODO: change last/addr order and GTH -> LTH to remove hack )
|
||||||
|
@ -593,19 +668,42 @@
|
||||||
ROT ROT ( last addr+1 c1^ addr )
|
ROT ROT ( last addr+1 c1^ addr )
|
||||||
STA ,&loop JMP ( last addr+1 )
|
STA ,&loop JMP ( last addr+1 )
|
||||||
&done POP2 ( last )
|
&done POP2 ( last )
|
||||||
;buffer/limit STA2 ( )
|
;buffer/limit STA2 ( )
|
||||||
#00 ;buffer/limit LDA2 STA ( ensure null termination )
|
#00 ;buffer/limit LDA2 STA ( ensure null termination )
|
||||||
JMP2r
|
JMP2r
|
||||||
|
|
||||||
( TODO: should be using cur-col and cur-row almost everywhere )
|
|
||||||
( otherwise, bugs! )
|
|
||||||
|
|
||||||
@cur-col ( -> col* )
|
@cur-col ( -> col* )
|
||||||
;cursor/col LDA2 ;cur-len JSR2 ;min2 JSR2 JMP2r
|
;cursor/col LDA2 ;cur-len JSR2 ;min2 JMP2
|
||||||
|
|
||||||
@cur-row ( -> row* )
|
@cur-w-col ( -> col* )
|
||||||
|
LIT2r 0000 ( [0] )
|
||||||
|
;cur-line JSR2 DUP2 ;cur-col JSR2 ADD2 SWP2 ( lim s [0] )
|
||||||
|
&loop GTH2k ,&next JCN
|
||||||
|
POP2 POP2 STH2r JMP2r
|
||||||
|
&next LDAk #09 EQU ,&tabs JCN INC2 INC2r ,&loop JMP
|
||||||
|
&tabs INC2 ;config/tab-width LDA2 STH2 ADD2r ,&loop JMP
|
||||||
|
|
||||||
|
@cur-rel-row ( -> row* )
|
||||||
;cursor/row LDA2 JMP2r
|
;cursor/row LDA2 JMP2r
|
||||||
|
|
||||||
|
@set-abs-row ( n* -> )
|
||||||
|
;buffer/line-offset LDA2 SUB2 ;cursor/row STA2 JMP2r
|
||||||
|
|
||||||
|
@set-rel-row ( n* -> )
|
||||||
|
;cursor/row STA2 JMP2r
|
||||||
|
|
||||||
|
@zero-row ( -> )
|
||||||
|
;buffer/data ;buffer/offset STA2
|
||||||
|
#0000 ;buffer/line-offset STA2
|
||||||
|
#0000 ;cursor/row STA2
|
||||||
|
JMP2r
|
||||||
|
|
||||||
|
@inc-row ( -> )
|
||||||
|
;cursor/row LDA2k INC2 SWP2 STA2 JMP2r
|
||||||
|
|
||||||
|
@dec-row ( -> )
|
||||||
|
;cursor/row LDA2k #0001 SUB2 SWP2 STA2
|
||||||
|
|
||||||
@last-pos ( -> addr* )
|
@last-pos ( -> addr* )
|
||||||
;buffer/limit LDA2 #0001 SUB2 JMP2r
|
;buffer/limit LDA2 #0001 SUB2 JMP2r
|
||||||
|
|
||||||
|
@ -621,11 +719,14 @@
|
||||||
@mod-div2 ( x^ y^ -> x%d x/y )
|
@mod-div2 ( x^ y^ -> x%d x/y )
|
||||||
DIV2k STH2k MUL2 SUB2 STH2r JMP2r
|
DIV2k STH2k MUL2 SUB2 STH2r JMP2r
|
||||||
|
|
||||||
( @emit
|
@base-10-width ( n* -> w* )
|
||||||
&short ( s* -> ) SWP ,&byte JSR
|
LIT2r 0000 ( n [0] )
|
||||||
&byte ( b^ -> ) DUP #04 SFT ,&nib JSR
|
&loop ( n [w] )
|
||||||
&nib ( n^ -> ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO
|
DUP2 #0000 EQU2 ,&done JCN ( n [w] )
|
||||||
JMP2r )
|
#000a DIV2 ( n/10 [w] )
|
||||||
|
INC2r ,&loop JMP ( n/10 [w+1] )
|
||||||
|
&done ( 0 [w] )
|
||||||
|
POP2 STH2r JMP2r
|
||||||
|
|
||||||
@emit-digit ( n^ -> )
|
@emit-digit ( n^ -> )
|
||||||
LIT '0 ADD emit JMP2r
|
LIT '0 ADD emit JMP2r
|
||||||
|
@ -636,7 +737,7 @@
|
||||||
,&do1 JMP
|
,&do1 JMP
|
||||||
&do3 #64 ;mod-div JSR2 ;emit-digit JSR2
|
&do3 #64 ;mod-div JSR2 ;emit-digit JSR2
|
||||||
&do2 #0a ;mod-div JSR2 ;emit-digit JSR2
|
&do2 #0a ;mod-div JSR2 ;emit-digit JSR2
|
||||||
&do1 ;emit-digit JSR2 JMP2r
|
&do1 ;emit-digit JMP2
|
||||||
|
|
||||||
@emit-dec2 ( n* -> )
|
@emit-dec2 ( n* -> )
|
||||||
DUP2 #270f GTH2 ,&do5 JCN
|
DUP2 #270f GTH2 ,&do5 JCN
|
||||||
|
@ -648,7 +749,21 @@
|
||||||
&do4 #03e8 ;mod-div2 JSR2 NIP ;emit-digit JSR2
|
&do4 #03e8 ;mod-div2 JSR2 NIP ;emit-digit JSR2
|
||||||
&do3 #0064 ;mod-div2 JSR2 NIP ;emit-digit JSR2
|
&do3 #0064 ;mod-div2 JSR2 NIP ;emit-digit JSR2
|
||||||
&do2 #000a ;mod-div2 JSR2 NIP ;emit-digit JSR2
|
&do2 #000a ;mod-div2 JSR2 NIP ;emit-digit JSR2
|
||||||
&do1 NIP ;emit-digit JSR2 JMP2r
|
&do1 NIP ;emit-digit JMP2
|
||||||
|
|
||||||
|
@emit-dec2-pad ( n* -> )
|
||||||
|
LIT2r 2018 ( preload #20 .Console/write into rst )
|
||||||
|
DUP2 #270f GTH2 ,&do5 JCN DEOkr
|
||||||
|
DUP2 #03e7 GTH2 ,&do4 JCN DEOkr
|
||||||
|
DUP2 #0063 GTH2 ,&do3 JCN DEOkr
|
||||||
|
DUP2 #0009 GTH2 ,&do2 JCN DEOkr
|
||||||
|
,&do1 JMP
|
||||||
|
&do5 #2710 ;mod-div2 JSR2 NIP ;emit-digit JSR2
|
||||||
|
&do4 #03e8 ;mod-div2 JSR2 NIP ;emit-digit JSR2
|
||||||
|
&do3 #0064 ;mod-div2 JSR2 NIP ;emit-digit JSR2
|
||||||
|
&do2 #000a ;mod-div2 JSR2 NIP ;emit-digit JSR2
|
||||||
|
&do1 NIP ;emit-digit JSR2
|
||||||
|
DEOr JMP2r
|
||||||
|
|
||||||
@messages [ &input-error "input 20 "error 00
|
@messages [ &input-error "input 20 "error 00
|
||||||
&bytes 20 "bytes, 00
|
&bytes 20 "bytes, 00
|
||||||
|
@ -662,7 +777,31 @@
|
||||||
&data $100 ]
|
&data $100 ]
|
||||||
|
|
||||||
@term [ &cols 0050
|
@term [ &cols 0050
|
||||||
&rows 0018 ]
|
&rows 0018
|
||||||
|
&lmargin 0006 ]
|
||||||
|
|
||||||
|
@prompt [ &vector $2
|
||||||
|
&string $40 ]
|
||||||
|
|
||||||
|
( COLORS )
|
||||||
|
( )
|
||||||
|
( SHORT STRING NAME )
|
||||||
|
( 3033 "30" black )
|
||||||
|
( 3133 "31" red )
|
||||||
|
( 3233 "32" green )
|
||||||
|
( 3333 "33" yellow )
|
||||||
|
( 3433 "34" blue )
|
||||||
|
( 3533 "35" magenta )
|
||||||
|
( 3633 "36" cyan )
|
||||||
|
( 3733 "37" white )
|
||||||
|
( 3030 "00" default )
|
||||||
|
( )
|
||||||
|
( digits are reversed )
|
||||||
|
( to emit from stack in )
|
||||||
|
( last-in-first-out order )
|
||||||
|
@config [ &tab-width 0004
|
||||||
|
&insert-tabs 01
|
||||||
|
&color 3333 ]
|
||||||
|
|
||||||
( relative cursor positions, e.g. 0 to cols-1 )
|
( relative cursor positions, e.g. 0 to cols-1 )
|
||||||
@cursor [ &col 0000 &row 0000 ]
|
@cursor [ &col 0000 &row 0000 ]
|
||||||
|
@ -670,7 +809,7 @@
|
||||||
( did we just see ESC? )
|
( did we just see ESC? )
|
||||||
@saw-esc 00
|
@saw-esc 00
|
||||||
|
|
||||||
( )
|
( )
|
||||||
@filename $80
|
@filename $80
|
||||||
|
|
||||||
( |1ffc )
|
( |1ffc )
|
||||||
|
@ -680,4 +819,4 @@
|
||||||
&offset :buffer/data
|
&offset :buffer/data
|
||||||
&line-count 0000
|
&line-count 0000
|
||||||
&line-offset 0000
|
&line-offset 0000
|
||||||
&data $8000 ]
|
&data $f000 ]
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
for NAME in about.txt math32.tal test-math32.tal tester.py primes32.tal regex.tal repl-regex.tal test-regex.tal grep.tal femto.tal femto.txt femto rainbow.tal drums.tal drums2.tal bfloat16.tal fixed.tal tal-mode1.png; do
|
for NAME in about.txt math32.tal test-math32.tal tester.py primes32.tal regex.tal repl-regex.tal test-regex.tal grep.tal femto.tal femto.txt femto rainbow.tal drums.tal drums2.tal bfloat16.tal fixed.tal tal-mode1.png tal.nanorc; do
|
||||||
echo "-> $NAME"
|
echo "-> $NAME"
|
||||||
cp $NAME /var/www/plastic-idolatry.com/html/erik/nxu
|
cp $NAME /var/www/plastic-idolatry.com/html/erik/nxu
|
||||||
done
|
done
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
# basic syntax for the uxntal assembly language
|
||||||
|
#
|
||||||
|
# mostly sticks to ANSI colors with a few exceptions
|
||||||
|
#
|
||||||
|
# comments are known to not handle nesting correctly.
|
||||||
|
# it's not possible to express nested comments using
|
||||||
|
# just start and end regexes.
|
||||||
|
|
||||||
|
# use this syntax for .tal files
|
||||||
|
syntax tal ".*\.tal"
|
||||||
|
|
||||||
|
# characters to insert when comments requested
|
||||||
|
comment "( | )"
|
||||||
|
|
||||||
|
# raw values
|
||||||
|
color pink "\"[^ ]+"
|
||||||
|
color pink "'[^ ]"
|
||||||
|
color pink "\<[0-9a-f]{2}{1,2}\>"
|
||||||
|
|
||||||
|
# literals
|
||||||
|
color bold,green "#[0-9a-f]{2}{1,2}\>"
|
||||||
|
|
||||||
|
# absolute addresses
|
||||||
|
color bold,yellow "(;&?|\.)\S+"
|
||||||
|
color bold,orange ",&?\S+"
|
||||||
|
color bold,orange "/\S+"
|
||||||
|
|
||||||
|
# relative pads
|
||||||
|
color yellow "\$[0-9a-f]{1,4}\>"
|
||||||
|
|
||||||
|
# instructions
|
||||||
|
color bold,cyan "\<(BRK|LIT|INC|POP|DUP|NIP|SWP|OVR|ROT|EQU|NEQ|GTH|LTH|JMP|JCN|JSR|STH|LDZ|STZ|LDR|STR|LDA|STA|DEI|DEO|ADD|SUB|MUL|DIV|AND|ORA|EOR|SFT)2?k?r?\>"
|
||||||
|
|
||||||
|
# label definitions
|
||||||
|
color bold,blue "(^|\s)(@|&)\S+"
|
||||||
|
|
||||||
|
# macros
|
||||||
|
color bold,magenta "%\S+"
|
||||||
|
|
||||||
|
# absolute pads
|
||||||
|
color yellow "\|[0-9a-f]{2}{1,2}\>"
|
||||||
|
|
||||||
|
# comments
|
||||||
|
color red start="\(\s" end="\s\)"
|
Loading…
Reference in New Issue