From 64a24f36e0022abe3e1825ce8dce24e0baedfa09 Mon Sep 17 00:00:00 2001 From: d6 Date: Mon, 23 Jan 2023 11:14:45 -0500 Subject: [PATCH] wip erase --- term.tal | 64 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 11 deletions(-) diff --git a/term.tal b/term.tal index 46e7814..20e62d3 100644 --- a/term.tal +++ b/term.tal @@ -67,6 +67,15 @@ ( return ) BRK +@bol-addr ( -> addr* ) + .cols LDZ2 .cur-y LDZ2 MUL2 JMP2r + +@cur-addr ( -> addr* ) + ;bol-addr JSR2 .cur-x LDZ2 ADD2 JMP2r + +@eol-addr ( -> addr* ) + .cols LDZ2 .cur-y LDZ2 INC2 MUL2 JMP2r + @min ( x* y* -> min* ) LTH2k JMP SWP2 POP2 JMP2r @@ -161,17 +170,17 @@ @end-arg ( c^ -> ) ;on-read .Console/vect DEO2 - DUP LIT "h EQU ;exec-noop JCN2 ( enable line wrap ) - DUP LIT "l EQU ;exec-noop JCN2 ( disable line wrap ) - DUP LIT "m EQU ;exec-noop JCN2 ( set attr ) - DUP LIT "n EQU ;exec-noop JCN2 ( get status ) - DUP LIT "H EQU ;exec-move JCN2 ( move cursor ) - DUP LIT "A EQU ;exec-up JCN2 ( up ) - DUP LIT "B EQU ;exec-down JCN2 ( down ) - DUP LIT "C EQU ;exec-forward JCN2 ( forward ) - DUP LIT "D EQU ;exec-back JCN2 ( back ) - DUP LIT "J EQU ;exec-noop JCN2 ( erase line ) - DUP LIT "K EQU ;exec-noop JCN2 ( erase screen ) + DUP LIT "h EQU ;exec-noop JCN2 ( enable line wrap ) + DUP LIT "l EQU ;exec-noop JCN2 ( disable line wrap ) + DUP LIT "m EQU ;exec-noop JCN2 ( set attr ) + DUP LIT "n EQU ;exec-status JCN2 ( get status ) + DUP LIT "H EQU ;exec-move JCN2 ( move cursor ) + DUP LIT "A EQU ;exec-up JCN2 ( up ) + DUP LIT "B EQU ;exec-down JCN2 ( down ) + DUP LIT "C EQU ;exec-forward JCN2 ( forward ) + DUP LIT "D EQU ;exec-back JCN2 ( back ) + DUP LIT "J EQU ;exec-erase-line JCN2 ( erase line ) + DUP LIT "K EQU ;exec-noop JCN2 ( erase screen ) POP BRK @exec-noop ( c^ -> ) @@ -180,11 +189,44 @@ @exec1 ( addr* -> ) STH2 #0001 ;read-arg-1 JSR2 STH2r JSR2 BRK +@exec-status + POP #0000 ;read-arg-1 JSR2 #0006 NEQ2 ,&done + #1b .Console/w DEO + LIT "[ .Console/w DEO + LIT "4 .Console/w DEO + LIT "0 .Console/w DEO + LIT "; .Console/w DEO + LIT "7 .Console/w DEO + LIT "9 .Console/w DEO + LIT "R .Console/w DEO + &done BRK + @exec-up POP ;up-n ;exec1 JMP2 @exec-down POP ;down-n ;exec1 JMP2 @exec-forward POP ;forward-n ;exec1 JMP2 @exec-back POP ;back-n ;exec1 JMP2 +@exec-erase-line + POP #0000 ;read-arg-1 JSR2 + DUP2 #0000 ,&erase-to-end JCN + DUP2 #0001 ,&erase-from-start JCN + ;bol-addr JSR2 ;eol-addr JSR2 ;erase JSR2 BRK + + &erase-to-end + ;cur-addr JSR2 INC2 ;eol-addr JSR2 ;erase JSR2 BRK + &erase-from-start + ;bol-addr JSR2 ;cur-addr JSR2 INC2 ;erase JSR2 BRK + +( TODO: needs to be smarter -- need to redraw tiles and keep x/y coords ) + +@erase ( start* end* -> ) + OVR2 SWP2 SUB2 STH2 ( start* [count*] ) + #20 ROT ROT ( 20 start* [count*] ) + &loop + STAk INC2r + STH2kr ORA ,&loop JCN + POP2r POP2 POP JMP2r + @exec-move ( c^ -> ) POP LIT2r ffff #0001 ;read-arg-1 JSR2 STH2kr ADD2 ( row )