From 58ab6745896469298451f891556f460b690c075d Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Sat, 26 May 2018 22:49:12 -0400 Subject: [PATCH] add FillChar routine to support ESC #8 --- ansi.asm | 137 +++++++++++++++++++++++++++++++ ansi.mac | 245 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ vt100.c | 4 + 3 files changed, 386 insertions(+) create mode 100644 ansi.mac diff --git a/ansi.asm b/ansi.asm index 1d9777a..6578b3d 100644 --- a/ansi.asm +++ b/ansi.asm @@ -1,8 +1,14 @@ case on + mcopy ansi.mac dummy start end +RDMAINRAM gequ $E0C002 ; Read from main memory +RDCARDRAM gequ $E0C003 ; Read from auxiliary memory +WRMAINRAM gequ $E0C004 ; Write to main memory +WRCARDRAM gequ $E0C005 ; Write to auxiliary memory + tables privdata ; @@ -641,6 +647,137 @@ exit anop end +; FillChar(char, andMask, xorMask) + gen on +FillChar START + + using tables + + subroutine (2:char,2:andMask,2:xorMask),(16:cdata) + +xx equ andMask +yy equ xorMask + + lda 2,.d + _ldy &r + ago .h +.d + aif &len<>4,.e + ldx &r+2 + ldy &r + ago .h +.e + aif &len<>10,.g + ldy #&r + ldx #^&r + ago .h +.g + mnote 'Not a valid return length',16 + mexit +.h + aif &totallen=0,.i + lda &worklen+3 + sta &worklen+&totallen+3 + lda &worklen+1 + sta &worklen+&totallen+1 +.i + pld + tsc + clc + adc #&worklen+&totallen + tcs + aif &len=0,.j + tya +.j + plb + rtl + mend + + macro +&l lreturn &r +&l anop + lclc &len + aif c:&r,.a + lclc &r +&r setc 0 +&len setc 0 + ago .h +.a +&len amid &r,2,1 + aif "&len"=":",.b +&len amid &r,1,2 +&r amid &r,4,l:&r-3 + ago .c +.b +&len amid &r,1,1 +&r amid &r,3,l:&r-2 +.c + aif &len<>2,.d + _ldy &r + ago .h +.d + aif &len<>4,.e + ldx &r+2 + ldy &r + ago .h +.e + aif &len<>10,.g + ldy #&r + ldx #^&r + ago .h +.g + mnote 'Not a valid return length',16 + mexit +.h + aif &totallen=0,.i + lda &worklen+1 + sta &worklen+&totallen+1 +.i + pld + tsc + clc + adc #&worklen+&totallen + tcs + aif &len=0,.j + tya +.j + rts + mend + diff --git a/vt100.c b/vt100.c index 52eb52b..56a8000 100644 --- a/vt100.c +++ b/vt100.c @@ -21,6 +21,7 @@ extern unsigned buffer_size; extern void ReverseScrollRegion(unsigned, unsigned); extern void ScrollRegion(unsigned, unsigned); extern void PrintChar(unsigned x, unsigned y, unsigned the_char, unsigned andMask, unsigned eorMask); +extern void FillChar(unsigned the_char, unsigned andMask, unsigned eorMask); extern void ClearScreen(void); extern void ClearScreen2(unsigned start, unsigned end); @@ -547,6 +548,9 @@ void vt100_process(const unsigned char *buffer, unsigned buffer_size) { case st_pound: /* #8 -> fill with Es */ + if (c == '8') { + FillChar('E', 0xffff, 0x0000); + } state = st_text; break; case st_lparen: case st_rparen: