early version of goto-line working
This commit is contained in:
parent
df971a1fc8
commit
f64806dbd4
55
femto.tal
55
femto.tal
|
@ -58,8 +58,6 @@
|
||||||
|0100
|
|0100
|
||||||
;read-filename .Console/vector DEO2
|
;read-filename .Console/vector DEO2
|
||||||
|
|
||||||
( ;demo-path ;open-file JSR2 )
|
|
||||||
|
|
||||||
( use this if hardcoding to 80x24 )
|
( use this if hardcoding to 80x24 )
|
||||||
( ;setup-80x24 JSR2 )
|
( ;setup-80x24 JSR2 )
|
||||||
|
|
||||||
|
@ -244,6 +242,29 @@
|
||||||
;draw-all JSR2
|
;draw-all JSR2
|
||||||
BRK
|
BRK
|
||||||
|
|
||||||
|
@goto-line ( -> )
|
||||||
|
#0060 ;jump-to-line JSR2
|
||||||
|
;draw-all JSR2 BRK
|
||||||
|
|
||||||
|
@jump-to-line ( n* -> )
|
||||||
|
;term/rows LDA2 #0002 DIV2 LTH2k ( n rows/2 n<rows/2? ) ,&early JCN
|
||||||
|
OVR2 SWP2 SUB2 ( n n-rows/2 )
|
||||||
|
;buffer/line-count LDA2 ( n n-rows/2 lines )
|
||||||
|
;term/rows LDA2 SUB2 ( n n-rows/2 lines-rows )
|
||||||
|
GTH2k ( n n-rows/2 lines-rows n-rows/2>lines-rows? )
|
||||||
|
,&late JCN ( n n-rows/2 lines-rows )
|
||||||
|
POP2 ,&finish JMP
|
||||||
|
&early ( n rows/2 )
|
||||||
|
POP2 ,&finish JCN
|
||||||
|
&late ( n n-rows/2 lines-rows )
|
||||||
|
NIP2 ,&finish JCN
|
||||||
|
&finish ( n o )
|
||||||
|
SUB2k STH2
|
||||||
|
;abs-line JSR2 ;buffer/offset STA2
|
||||||
|
#00 ;cursor/col STA
|
||||||
|
POP2 STH2r NIP ;cursor/row STA
|
||||||
|
JMP2r
|
||||||
|
|
||||||
( TODO: M-v for page up and M-> for goto end )
|
( TODO: M-v for page up and M-> for goto end )
|
||||||
( M-f and M-b for next/previous word )
|
( M-f and M-b for next/previous word )
|
||||||
( M-n and M-p for next/previous paragraph )
|
( M-n and M-p for next/previous paragraph )
|
||||||
|
@ -252,6 +273,7 @@
|
||||||
#00 ;saw-esc STA
|
#00 ;saw-esc STA
|
||||||
.Console/read DEI LIT '< EQU ( M-< ) ;goto-start JCN2
|
.Console/read DEI LIT '< EQU ( M-< ) ;goto-start JCN2
|
||||||
.Console/read DEI LIT '> EQU ( M-> ) ;goto-end JCN2
|
.Console/read DEI LIT '> EQU ( M-> ) ;goto-end JCN2
|
||||||
|
.Console/read DEI LIT 'g EQU ( M-g ) ;goto-line JCN2
|
||||||
BRK
|
BRK
|
||||||
|
|
||||||
( TODO: C-g or C-h for help )
|
( TODO: C-g or C-h for help )
|
||||||
|
@ -337,6 +359,19 @@
|
||||||
INC2 INC2r ,&loop JMP
|
INC2 INC2r ,&loop JMP
|
||||||
&end POP2 STH2r JMP2r
|
&end POP2 STH2r JMP2r
|
||||||
|
|
||||||
|
@abs-line ( y* -> s* )
|
||||||
|
#0000 SWP2 SUB2 STH2 ( [-y] )
|
||||||
|
;buffer/data LDA2 ( addr )
|
||||||
|
&newline ( addr [-y] )
|
||||||
|
STH2kr ORA ,&loop JCN ,&done JMP
|
||||||
|
&loop ( addr [-y] )
|
||||||
|
LDAk #00 EQU ,¬-found JCN ( addr [-y] )
|
||||||
|
LDAk #0a EQU ,&found JCN ( addr [-y] )
|
||||||
|
INC2 ,&loop JMP ( addr+1 [-y] )
|
||||||
|
&found INC2 INC2r ( addr+1 [-y+1] ) ,&newline JMP
|
||||||
|
&done POP2r JMP2r
|
||||||
|
¬-found POP2 POP2r #0000 JMP2r
|
||||||
|
|
||||||
( line number relative to the offset, starting at 0 )
|
( line number relative to the offset, starting at 0 )
|
||||||
@rel-line ( y^ -> s* )
|
@rel-line ( y^ -> s* )
|
||||||
#00 SWP SUB STH ( [-y] )
|
#00 SWP SUB STH ( [-y] )
|
||||||
|
@ -435,13 +470,14 @@
|
||||||
&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 JSR2 JMP2r
|
||||||
|
|
||||||
@tmp [ &pos :tmp/data &data $100 ]
|
|
||||||
@term [ &cols 0050 &rows 0018 ] ( 80x24 )
|
|
||||||
|
|
||||||
@input-error "input 20 "error 00
|
@input-error "input 20 "error 00
|
||||||
@demo-path "math32.tal 00
|
|
||||||
|
|
||||||
( col is 0-79, row is 0-23 )
|
@tmp [ &pos :tmp/data
|
||||||
|
&data $100 ]
|
||||||
|
|
||||||
|
@term [ &cols 0050
|
||||||
|
&rows 0018 ]
|
||||||
|
|
||||||
@cursor [ &col 00 &row 00 ]
|
@cursor [ &col 00 &row 00 ]
|
||||||
|
|
||||||
( did we just see ESC? )
|
( did we just see ESC? )
|
||||||
|
@ -450,4 +486,7 @@
|
||||||
( |1ffc )
|
( |1ffc )
|
||||||
( offset is address of the first visible line )
|
( offset is address of the first visible line )
|
||||||
( size is total size of data in bytes )
|
( size is total size of data in bytes )
|
||||||
@buffer [ &limit 0000 &offset :buffer/data &data $8000 ]
|
@buffer [ &limit 0000
|
||||||
|
&offset :buffer/data
|
||||||
|
&line-count 0000
|
||||||
|
&data $8000 ]
|
||||||
|
|
Loading…
Reference in New Issue