From 77f6c2664affb0e05a1e3130aca4f40eaec337e6 Mon Sep 17 00:00:00 2001 From: burniouf Date: Sat, 29 Apr 2023 13:47:59 +0200 Subject: [PATCH] KERNEL : more terminal fixes --- .Docs/TERM.md | 166 ++++++++++++++++++------------------- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes .Floppies/ProDOSFX.BOOT.po | Bin 143360 -> 143360 bytes SYS/KERNEL.S.TERMX.txt | 160 +++++++++++++++++++---------------- 4 files changed, 173 insertions(+), 153 deletions(-) diff --git a/.Docs/TERM.md b/.Docs/TERM.md index 7e61802c..db5f783a 100644 --- a/.Docs/TERM.md +++ b/.Docs/TERM.md @@ -4,89 +4,89 @@ A2osX terminal capabilities are based off of the standard VT-100 Terminal. This applies to users connected via Super Serial Cards, Telnet (via TelnetD server daemon) and the Apple console (physical keyboard/screen). All programs can use this facility to create rich interactive text mode applications. This includes both programs written in Assembly or Scripts written for the Shell (SH). The table below lists the codes you can use in your applications and their function. Consult the A2osX Shell Developers Guide for information on using these codes in scripts. Note, the Apple Console implementation only supports a subset of the VT-100 codes, these are noted in the last column as OK. -| Esc Sequence | Description | DEC Code | A2osX TERM | -|---------------|-------------|----------|------------| -|Esc[20h |Set new line mode|LMN|OK| -|Esc[?1h |Set cursor key to application|DECCKM|| -|Esc[?3h |Set number of columns to 132|DECCOLM|| -|Esc[?4h |Set smooth scrolling|DECSCLM|| -|Esc[?5h |Set reverse video on screen|DECSCNM|OK| -|Esc[?6h |Set origin to relative|DECOM|| -|Esc[?7h |Set auto-wrap mode|DECAWM|OK| -|Esc[?8h |Set auto-repeat mode|DECARM|| -|Esc[?9h |Set interlacing mode|DECINLM|| -|Esc[20l |Set line feed mode|LMN|OK| -|Esc[?1l |Set cursor key to cursor|DECCKM|| -|Esc[?2l |Set VT52 (versus ANSI) |DECANM|| -|Esc[?3l |Set number of columns to 80|DECCOLM || -|Esc[?4l |Set jump scrolling| DECSCLM || -|Esc[?5l |Set normal video on screen| DECSCNM |OK| -|Esc[?6l |Set origin to absolute| DECOM || -|Esc[?7l |Reset auto-wrap mode| DECAWM |OK| -|Esc[?8l |Reset auto-repeat mode| DECARM || -|Esc[?9l |Reset interlacing mode| DECINLM || -|Esc= |Set alternate keypad mode| DECKPAM || -|Esc> |Set numeric keypad mode| DECKPNM || -|Esc(A |Set United Kingdom G0 character set| setukg0 |OK| -|Esc)A |Set United Kingdom G1 character set| setukg1 |OK| -|Esc(B |Set United States G0 character set| setusg0 |OK| -|Esc)B |Set United States G1 character set| setusg1 |OK| -|Esc(0 |Set G0 special chars. & line set| setspecg0 |OK| -|Esc)0 |Set G1 special chars. & line set| setspecg1 |OK| -|Esc(1 |Set G0 alternate character ROM| setaltg0 |OK| -|Esc)1 |Set G1 alternate character ROM| setaltg1 |OK| -|Esc(2 |Set G0 alt char ROM and spec. graphics| setaltspecg0 |OK| -|Esc)2 |Set G1 alt char ROM and spec. graphics| setaltspecg1 |OK| -|EscN |Set single shift 2| SS2 -|EscO |Set single shift 3| SS3 -|Esc[m |Turn off character attributes| SGR0 |OK| -|Esc[0m |Turn off character attributes| SGR0 |OK| -|Esc[1m |Turn bold mode on| SGR1 || -|Esc[2m |Turn low intensity mode on| SGR2 || -|Esc[4m |Turn underline mode on| SGR4 || -|Esc[5m |Turn blinking mode on| SGR5 || -|Esc[7m |Turn reverse video on| SGR7 |OK| -|Esc[8m |Turn invisible text mode on| SGR8 || -|Esc[FG;BGm |Set Text Color to FG and BG ||OK| -|Esc[Line;Liner |Set top and bottom lines of a window| DECSTBM |OK| -|Esc[ValueA |Move cursor up n lines| CUU |OK| -|Esc[ValueB |Move cursor down n lines| CUD |OK| -|Esc[ValueC |Move cursor right n lines| CUF |OK| -|Esc[ValueD |Move cursor left n lines| CUB |OK| -|Esc[H |Move cursor to upper left corner| CUP |OK| -|Esc[Line;ColH |Move cursor to screen location v,h| CUP |OK| -|Esc[f |Move cursor to upper left corner| HVP|OK| -|Esc[Line;Colf |Move cursor to screen location v,h| HVP|OK| -|EscD |Move/scroll window up one line| IND |OK| -|EscE |Move to next line| NEL |OK| -|EscM |Move/scroll window down one line| RI |OK| -|Esc7 |Save cursor position and attributes| DECSC | OK | -|Esc8 |Restore cursor position and attributes| DECSC | OK | -|EscH |Set a tab at the current column| HTS || -|Esc[g |Clear a tab at the current column| TBC|| -|Esc[0g |Clear a tab at the current column| TBC|| -|Esc[3g |Clear all tabs| TBC|| -|Esc#3 |Double-height letters, top half| DECDHL || -|Esc#4 |Double-height letters, bottom half| DECDHL|| -|Esc#5 |Single width, single height letters| DECSWL|| -|Esc#6 |Double width, single height letters| DECDWL|| -|Esc[K |Clear line from cursor right| EL0 |OK| -|Esc[0K |Clear line from cursor right| EL0 |OK| -|Esc[1K |Clear line from cursor left | EL1 |OK| -|Esc[2K |Clear entire line| EL2 |OK| -|Esc[J |Clear screen from cursor down| ED0 |OK| -|Esc[0J |Clear screen from cursor down | ED0 |OK| -|Esc[1J |Clear screen from cursor up | ED1 |OK| -|Esc[2J |Clear entire screen | ED2 |OK| -|Esc5n |Device status report | DSR || -|Esc0n |Response: terminal is OK | DSR|| -|Esc3n |Response: terminal is not OK | DSR|| -|Esc6n |Get cursor position | DSR |OK| -|EscLine;ColR |Response: cursor is at v,h | CPR |OK| -|Esc[c |Identify what terminal type | DA || -|Esc[0c |Identify what terminal type (another)| DA|| -|Esc[?1;Value0c |Response: terminal type code n | DA || -|Escc |Reset terminal to initial state| RIS |OK| +| Esc Sequence | Description | DEC Code | A2osX TERM | Comment | +|---------------|-------------|----------|------------|------------| +|Esc[20h |Set new line mode|LMN|OK|| +|Esc[?1h |Set cursor key to application|DECCKM|| | +|Esc[?3h |Set number of columns to 132|DECCOLM|| | +|Esc[?4h |Set smooth scrolling|DECSCLM|| | +|Esc[?5h |Set reverse video on screen|DECSCNM|OK| | +|Esc[?6h |Set origin to relative|DECOM|| | +|Esc[?7h |Set auto-wrap mode|DECAWM|OK| | +|Esc[?8h |Set auto-repeat mode|DECARM|| | +|Esc[?9h |Set interlacing mode|DECINLM|| | +|Esc[20l |Reset line feed mode|LMN|OK| | +|Esc[?1l |Reset cursor key to cursor|DECCKM|| | +|Esc[?2l |Reset VT52 (versus ANSI) |DECANM|| | +|Esc[?3l |Reset number of columns to 80|DECCOLM || | +|Esc[?4l |Reset jump scrolling| DECSCLM || | +|Esc[?5l |Reset normal video on screen| DECSCNM |OK|| +|Esc[?6l |Reset origin to absolute| DECOM || | +|Esc[?7l |Reset auto-wrap mode| DECAWM |OK|| +|Esc[?8l |Reset auto-repeat mode| DECARM || | +|Esc[?9l |Reset interlacing mode| DECINLM ||| +|Esc= |Set alternate keypad mode| DECKPAM ||| +|Esc> |Set numeric keypad mode| DECKPNM ||| +|Esc(A |Set United Kingdom G0 character set| setukg0 |OK|| +|Esc)A |Set United Kingdom G1 character set| setukg1 |OK|| +|Esc(B |Set United States G0 character set| setusg0 |OK|| +|Esc)B |Set United States G1 character set| setusg1 |OK|| +|Esc(0 |Set G0 special chars. & line set| setspecg0 |OK|| +|Esc)0 |Set G1 special chars. & line set| setspecg1 |OK|| +|Esc(1 |Set G0 alternate character ROM| setaltg0 |OK|| +|Esc)1 |Set G1 alternate character ROM| setaltg1 |OK|| +|Esc(2 |Set G0 alt char ROM and spec. graphics| setaltspecg0 |OK|| +|Esc)2 |Set G1 alt char ROM and spec. graphics| setaltspecg1 |OK|| +|EscN |Set single shift 2| SS2 ||| +|EscO |Set single shift 3| SS3 ||| +|Esc[m |Turn off character attributes| SGR0 |OK|| +|Esc[0m |Turn off character attributes| SGR0 |OK|| +|Esc[1m |Turn bold mode on| SGR1 || | +|Esc[2m |Turn low intensity mode on| SGR2 || | +|Esc[4m |Turn underline mode on| SGR4 || | +|Esc[5m |Turn blinking mode on| SGR5 || | +|Esc[7m |Turn reverse video on| SGR7 |OK|| +|Esc[8m |Turn invisible text mode on| SGR8 ||| +|Esc[FG;BGm |Set Text Color to FG and BG ||OK|| +|Esc[Line;Liner |Set top and bottom lines of a window| DECSTBM |OK| | +|Esc[ValueA |Move cursor up n lines| CUU |OK|| +|Esc[ValueB |Move cursor down n lines| CUD |OK|| +|Esc[ValueC |Move cursor right n pos| CUF |OK| | +|Esc[ValueD |Move cursor left n pos| CUB |OK|| +|Esc[H |Move cursor to upper left corner| CUP |OK| | +|Esc[Line;ColH |Move cursor to screen location v,h| CUP |OK|| +|Esc[f |Move cursor to upper left corner| HVP|OK| | +|Esc[Line;Colf |Move cursor to screen location v,h| HVP|OK| | +|EscD |Move/scroll window up one line| IND |OK|| +|EscE |Move to next line| NEL |OK|| +|EscM |Move/scroll window down one line| RI |OK|| +|Esc7 |Save cursor position and attributes| DECSC | OK || +|Esc8 |Restore cursor position and attributes| DECRC | OK || +|EscH |Set a tab at the current column| HTS ||| +|Esc[g |Clear a tab at the current column| TBC|| | +|Esc[0g |Clear a tab at the current column| TBC|| | +|Esc[3g |Clear all tabs| TBC||| +|Esc#3 |Double-height letters, top half| DECDHL ||| +|Esc#4 |Double-height letters, bottom half| DECDHL|| | +|Esc#5 |Single width, single height letters| DECSWL|| | +|Esc#6 |Double width, single height letters| DECDWL|| | +|Esc[K |Clear line from cursor right| EL0 |OK|| +|Esc[0K |Clear line from cursor right| EL0 |OK|| +|Esc[1K |Clear line from cursor left | EL1 |OK|| +|Esc[2K |Clear entire line| EL2 |OK|| +|Esc[J |Clear screen from cursor down| ED0 |OK|| +|Esc[0J |Clear screen from cursor down | ED0 |OK|| +|Esc[1J |Clear screen from cursor up | ED1 |OK|| +|Esc[2J |Clear entire screen | ED2 |OK|| +|Esc5n |Device status report | DSR ||| +|Esc0n |Response: terminal is OK | DSR|| | +|Esc3n |Response: terminal is not OK | DSR|| | +|Esc6n |Get cursor position | DSR |OK|| +|EscLine;ColR |Response: cursor is at v,h | CPR |OK|| +|Esc[c |Identify what terminal type | DA ||| +|Esc[0c |Identify what terminal type (another)| DA|| | +|Esc[?1;Value0c |Response: terminal type code n | DA ||| +|Escc |Reset terminal to initial state| RIS |OK|| ## License A2osX is licensed under the GNU General Public License. diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 2682a70136cb4026c86113dc84bfc38f9523a76b..111e5a0e56e0c8666394d7f0ddb49285c4fc6f6c 100644 GIT binary patch delta 19455 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 LWiJbNWN-aHR9lsB delta 19393 zcmZ`>2|!fU`aiQV0|TMNr9WKTgcKoS{hKtdL9Wic^a3T2BR`rQ(Rj+iy7V5bgRv8=iixCAQ?4k4AWPPt_#h#-0P{m`_r@&#{=wz974@P1USA z6WrP#aMI`3J}>23VSl>pb>7c;nf)mhk2&E%kfu zYF^lUZ}T(F!iK#~s?I1&LsVb>cE2W1n9(yky@k>GHJGW;q=8F!xNOU7Qb~k?wyH{R zsqu4YY*Mx5K^Gx=1JhmVXWMRW8n#rj!kUZC?q{O8Bvr#t3!9p697$-c3SlzUH+Quh zYsqX$Z#mTx-ZFL%`_rb31ujZp>(}Nd&FLq}*a}L5q*FWGkA>P*g4)tzE~d2~X(v=# zT3%2#d!Cu-s%_wNKgfTAci*?CtR;AN;&Wr4t9b6o=iYn{gxizUZ#!up3sWZQ?7BXq zJ*LU4D(vhOdw8GLu5R+IGV}%7O-=66Z3wi8a~A^ln2Vz&g`&;HFxt|LUL0%J2#-Bi zm8{ERWAqJC7v4;=UoscBRk0hX+lZ6)$d<8vZuSuHAv2go7`LZwB6BdaJi93XzdrP_ zc2cl$cfIHCBc|Q;Uc2WCH*c=rYzNO}f@Qp#!|6vKYiBE(srZR@eC2`N@9%bRxw6}> zrODVC)n~RFPr#4D?$wNr%!V-8bK$JseywU+v+_)4Yri){09@VC+CLnws^XjftO|v2 z%avO+X9`;Tb*v?z`S;l7KVqBz$~@h66Sypv!M#!3r0ls5g8sxYY_MO?-o6JWyNgez zv0sBwVF9ZW?rLUQHtF7r>d;!6G?M?col*OQzxG}b(&&g!wd3ZswAAlyVcqsM-8^=) zexmX@miCYA6~3n+71MQfE-fR%=t z%v*QvIeW8z1ZdaR1bjW~XB-n=+EZTy|I&4*wUL5vYZDSCo$L4Oo4Vbtued`Q6E;_P zYw!9K_KR%-T+!as+MxO0wbtXkEyFk5Y^|TT7si}!&IL|QBZcvMoAZF1bamsT&-=wq zBahs?*${j3>!j&9299MurL+2=QqB=|^oYpwOjsn%MN$y81! ze5So!+r76o0c53hpJ`*nzogaQm*3&h+8GTQL%9S(TV@%}S;hb-55_6>$f@qHKhqi& zinH{W&$USk4UIjcoeOuH&S-C|)aRJtmGm*acg;w;H1c$~B zm7r^fSc#^-Uuwg3w)U#eZN*K`Q2eDf%I*063l{_%UHGMTWaT^i`JbQmU*9i`X>U=R zm#AvhEt(~$R&(-XoF@q1skZ+Px>fb>2D-VpSrOZ;gsye1ooa|h$fOXItZAcLtyZux z9XizwZuZ}H_UmMmd|!OPcVCt2fZsmhUsssG#b7Qlsk)YWoYji6cC<@Lzv`>A+U*)4 z{6N(wkZFZ2?N#;%Tie@^u;iS%xFmUgO4iCb>lS7fKCnDTp;EhPm6}8Chue?0zt;Xs zyZV6T03^w_iOmO^v{mlxaxL9{Ry)fr>Oix$_epx?toA!aCH?R#?Ht8cDt@gMhV43N z*Y0j@X%n^{T)bfyo%gkN0W=-|T06yk>%k+t4lW6Ev_T)ZpU> zJ4R;;*A8Yc>S(es*)DekZCq5lxC!;_q`S^(C)u9wfc2Aju5nJ+iP!J5UpqFnUudg> zyEb$Jt~GE~b-l^lR@Jbm<-R@}cxq>d;M*zuL4D3^qs^bd=*~sA!~gajiS7c`I~T=x z!zIl>uMJepp-azevnuCwH7vUD^qj5>XKnUh`S>Pe?y+^PTGX)U#LgI%{ikC-_N&EB z-kpmYZC#sve%&=2<_D%RZV+;vS7&z}nBCPk)qbV;!SS6_I@fi+&}r{%RvnqtHF;{+ zQ<+^SeSVhivTi<=4L8@|CcA5LT99rgcr8GKmN;t^(yU?=OzL72Op+!5LGrtvvUSh>>TC>;n4e1+6s$?k{($`>_2Qr*@x!&e`>c54?ZLUeuHT;biX; z`VP0Yp{*ZWs{ioP3A@6=LT@}IgO zqPt^V_AiInuU7cwP{*<=Z{f8=9i>ePP!Kj8hI&xwqa_!$IpbbF41qnN2h!tWTXC)8 zz;~DWhs(?$*M&fM57OkaB=bk~{6($Rc#9?EN+ZS*toN7!NNt7iTA30hQ&sc3n9H)0z2n(v0t1Ika6>f8`Lf-}$zimVPD3 zxX4xv83&5c-?j$Plb5u~igncUvNqMb{xB?`6JT=o)0{+w%UUB{eOa46ULwH`$rRZM z8E+p`NcwvLSoN#3yzJLcujlPt*IERO=+(>GrNa*&hAxqPUj1QxxIZYyJM+Nd!yX>y zJQTm-)n;xS$f(q7!o`%aK&6H4427?t~W`JK5HCThuD=DaHuPWuKhRQ z>O|Ew-D$|XH=-fqKo#)q31Pw$SG2P$J$i-MUSVPHftnuMH|DIH^|d_*HuiiI2v?+M z`??nMo(HUw6#fHtD5}wY8+hq6xC~d$(9% z?53WUAo$tbV=mj$v(U0I=xS|`U2~Q6^pA?&(i7)#brZYY+@tLe5(q7A6r z(&JUvYZY%~V+03;t z4E_zWeQU9+zYXg574A8=-AxEMVy?O(eBZnMLU9|){=V12m8<@S#XjQsjbT0KgY03F z4eBKQ9YX7Xix5C}T-C-hi+$d^uRo><&4r8gEJ{w=f3AaHxOM(JwHE|Du%(w*3&O^i zw`Xv|)<=5kxAq)(xCexiQa*^)G3LbE5BJ!AY^h~8LJMI(fnW#t@#8;w>1Vs9vbe3x zR^0wb&w;Hy&p!;S4Z?nFFscthF9g?D_w3r-+oagKrMEMf(L+&v7;;n=t9rLz+xl>i zs~D0I`)_*(CXWX3xlZ+8yu2O)2OhMHl316)NN*6kwx#x+nx4x3jeK$;Knk6yy;TQU zJ>(E$_u-bFt($x6xAe9T5~Em}%Vx1GhsMpl+f~`&M~b=mpWoPH=G407TiD1}7x9Zh zuKJoD_V31?;@HaS9v^L=wcj(gx+h=VcMoL4VA$vp0_B^k+E8<*aNp&Q5gUVRL$)0O zh1wL&YDO_`46O}=gco|Cy63Urx+X#j=rHU!^TZ!W&Eo+;ZP_4MWql0vLw zaWf^T`3O-oqs+x;mUg@Upv?(T#COlq>DmHSP3q1)5xPm;s=IZ6s=EIy(dEsRP7=EF zdv$*(r1J)v|B8+uI8eh;9XnqbZPHzKl4}c!v3Gf0819$^`y75upH#e%|kglX# zVIJ{^f@JuS3mWBkn%hqT(*6q9IZNQ{5w{Zt;Ax&RlpYUyn5Pb< zC%`P`cMKeJqgcd=xpL?gXxpO5%J^M z#F>K|7~KXF2W7dX%*e2&WNu@A5}o44A^+RyiqII-ygT?vm$rE3mFywp1m=~TA!I2K za)*$mK**zCg@Oo zE9HQWmm*=dvtfWPMZ%oFp)-ff9ZHu1;m)CSDG=@&LSGOsMZ&xx4d4ct;O@Vnvx)B+ zN|yqmcqrYLbV!If9w8k@Zh9jn1~3XR8W0N@)BQ$@weKDukJ-`zHEpp|ngRTIf_Ps%e8pG`lS+TYyY+=yXrf5aBsj(YRpw%IZiE$#AElasGk@)kWzA zIkT-Pg;pC1nx~+4U(u{I-Ax;mqG5vJ9_X`jnQI@v5=G-uV8Mswre`DFe8s3^BgUZ6 z1&RS)TWLHN4T^;lmk>iKa4B8o{MRUG z92Sj=`=z#EkF^SG0+l9Q$0yXS=jw$0gT`pZP{o5X{|z#K5WZ68UnTMI(pN*%>XK?} zA~M&|?OHKFu~F8%_7=@;NViEIyjdC?Q2ZtrNpDw<)ZNRMI2W zT9}`lnvTqma$gjdR-`U2S)E*wx@L9$igKje&Q&lp$hJ!@*eVT#H1e3N{|;&T>AHVH zL@;wdE^Ge;AL>Kpp@n%{%fV6JI~9%A%);skakVL_sYur-cYAW6Th>;_Ch%YM2c2kk z-v!)OtVX7%q**Mwr{!6mk!NY*!xNsRQ{2UP#dCC(yBJW}BKZP>E4_R{>WYP><*{p# zevfSTM5JqFrUOzNkRU3-)u#R2^gQqi(~EMfameEUv((DP(DQjPQ2FX=YZB5OR5Y$! zwiX#WxMg9A9C->uCucIw$pv}*TVYM26>Ce7u1nEaQoao7UQ{$zl&nSGhq%$Btz%=? z#vt=yI@tqc?*aQj&gLxA(o+jkYi!8)k}EYUH?1ZO8DDm#!2+sDM}}TkT0vG#4l*7Y zOe(BdfQ+vUq7@a^+=+}wCE93t<^mu_Bjd4KJH{a0ac=XGuhPFf#1W%kgD&9Egw)!U ztfK1VltL8n`hYVfJ8qUkChQHGr-y~`CiA6H^&dqeogO5bf&x#-G3wZ+tXa9ReIZky z?Ddnf*WZ%8{x+8&;vITMFNQ1LWsAh;@;{)NGelMz{j-GQ}kDU3dsxPqU|7Moc=WUw5+rmvYPMbJP5dJ zav(mwP*`nz&40-y3;K$F?7Dz9FK4ie92uH_hmHWVkeVD3E+FyAEcAD|~n~ zXBUIKu5#TgBS%gdiS+-IbxS~AKk%U-aV84+=On;Tuis=RCyX77d@66S zyS3HQXb@EYyDUi}8ulme$Qk?H4S*_$- z)yRpUu|_HFAeB}ypjK%eD=Fh}sIU7igUud{u(mo9W|I<$72G){9+^Cq)^U{WfCCLI z!+3G#*6~Q^t>hWT2S_Z#j6*s$HKihB$gMQU7NLV_`8Aoy5avotPpi2d z8H7Qk?3z1}G2E4uIWxcJUSx=nXq9rZD9ou@j0};k{R(nwmLX%5E2(f=LCtbx9PUa> zD=erfL*@~KXz8hiMJYKCuSU9&N~t0+Mk_~EXXoZr zlRl+-Jn|m}ol|ENI66}f1 za*QU#)y@Y!k>}(APBwUYVS@*4>{1{7RAnkJ7oZqO=3;xNC}HI;SP2o!7Px1slZ`%I zo?|@HXUJqoFq!m}uV@*O1r%0!*wC;$l&p|p#T}TmH-j0~ikC9jOxz=bW0 zxh&q<6uLWQzIVCsrT@^1?v-~#pSUNa1$7S}rY})iC)l2lM4Jzn6L{+a-l|*3EfiQf z;Qwg_kFcff@aVlDChP;&_&B6r%>4zb`7UJ^Wjh$_$X5A%%p&8!%L&MHIafy-QwDTq z!tuy!B{N~^iq%jlBK<1XAG(i6LFM#IgJ_vo;i3)8`pilm_p@xUqzp3J11y@H8BM=d zW)P1&)-%gUO8JblGjdQsI$^12lU%WQHZhK{m=Y3^Pcyq-=ZF{ma}L|-TfjCe z*HuD4C^Kc_KniGej(}QI?mhu&_9+{YZa=d(td4eREDTLT`UB91?V^xU4#HNjt^|2^ zI(e{t@&zZCe={y!GM5*DOVmn85{%6uC!518*Q`Uj9=2xJqOh0gJby9NzxQt8tw_I1A6*Kd4(vkiG zQwt(59(i4KS`q0l$!3A%^S#^!T<&>AUY*SSSD_1wB6xu9=LLnwkIWA2kw^Cv_pblX zY_Pnk&__mz9+lVr#@{~IB{w;P{ugvQ$nejlRG6M&p+i(keWRIl4XQz z{Y_a$coEP)4-LHSZ20fYF?>=C7ctw>s%!&QwdfH6BnG+{-5GT9|?$Nh}W*$0#OBOon+*9%xEOw%h2@ zU~#;8D%XqqEh`z0B2rLLiYwbx##UJ5ozB#j3KHms0y4N2T?ev+nW<`I=L^HK;CKFl z>d0AH+1V)IcIfOlo8q&u&e>pT_9&jiV=pMrF>eAIo=^W1B1X+9P`MW2fkn)^E_nbX z=2Ogo@Nhh^vngifShLe}k$x#ymL=|Z6t--T z8rBJf1uXYZjwe)y%elHyWwbR+j7(TL;7?}1v^)?%zl!^mJvo)D_>)rwkl2$`JTl); z{|plY{MV`=iLp4~<8q5&WcWHdN)Uy_f5@XAlt(2X--qDRDMuU{R;7XpOIp_8ioj}G zEkNphSY8!1E;^*;!I1^%oR-ICvZm%1!6Tocc0g=SW?~bk*qdbmwm8K0e?&Gs^oNKT zU{gP!g+z9fl-Nc?!$qNTyUe4(sl<+3l<;}np@bBDh9`z3CmrP~1@9cBQf?8El#-&; z&^UD1le8`zjwe0{7kw&saTdm>Tv!yAmMu)4jeMV0K}k_UR<0>uT%DSehIG#`0_?m^ zOkYU7Y?T_G9U4;2&~I4@GCVi5X}8?e!kZ@Z;E^go-5xHBVXrJp4$I9_hBvjc83#QX z#5r+UCM;#m9FX4I=5lj4GH%rNbWcC)d4;PK5w_zSuSwQ{v zE>mLx@;@bSvUbUyCf$EQEq2QBJ{LIbL$+#)p{`VXByTvM@SJNoO;-*V17kmz?Qv$X zsq*JoXIHGqhMB(PTV=@EK@xo>Np#!Svau47-+8!ntoQV6sD8fT#xj39;Gk@2w;p)n z3;vGYF+#L>dtKy#D?R4~Ut+|d%FC)or2k&dsqrZI3UGJ4dPvWXABcs#Y~=qxxm!Xl z50LC7Wu?fkfAEL|r1=4O`u*q-X5a} zuyyQcpe8sY@P>nD0{9fxhAoaAZKB{moDJ6aZPHqat1YZ3SzUpQe-5@+9LwZ49sT2+ z!9g(=JqnRpTHVgt0!oWv3NY zC(jsB9f86P^rdJ~2sf!&;6e212BoD=nSfZ*y6E{InxzI1_46(n_6aEli#XMgK_W zq%msg@i1UCpEQ==n#S-+gRJtTBA;}4oIGhk)>gJ`E&lO;V>tgr$*9UCU@}}Zj2g== z2HKm(|4nzDjZF&g)+X>tjTrpP*7ig`dDvt%U)%msQj)ms?|4k*zOtmK>8jzPIW~>) zgt{V~tIAE4n&({Z(_jG9{vnxaDFIoOSzOu?w}Z4SF~d^N=58AZE?DY0vhj0i|7bC+ zGLLJbfH63nio93}Ed@1QP36L-Y=YXqnBK+{$|nx1}(bvkSP>l^s721Amz3(KE5|`tNS~ z&KNN?*sE9;ls%7lmB^e~R6~^~j)7`$fgHUHY3>+N2r9i*f88QJU+7}GWen_sOX=P* z;&8=%jDMJ7xx{2b8E0Z#AqP`x>f+J`_ibinwa+TxxTKi+cUi^o;wr`s zsxZiT53@jHi7f+a)08#$Lha>O1AGVhL08KbCRDRzaA-j_tKS5j<#oQ9&l0qShKQmi zrfx`QuSd8Vkt6RMiF8|e_uzV3EW#%CD18t{`EUOlO#>Tfy9lo=ACnRc3f)295ycR% zf5Ozfp0GTje*9@M!05M=sRM^U1hgqi&dNr^8)-zG7&Y@ru9I~_ZE9g`^}TDBEel7w zT|D1}KE?B-Yg9g5R{B8o;?k0ZP?f3Kp$1v8Y#}G;o?!$y#%baKSNW{Gc$@j+_1Fzg zfJ0VzFWJI->h{PvWiMCR+$uXLJ#Emo>DT6Jc_@qEKug_-y!Q_{N!myK+6VWlgopm; zK?HWL9FP1C4sL~0j!v~)-NPZ8-wT7AVS#ta;=d>hd58-c*6k27-nnB*pDIZ&^$!mi zjeZg#ddBzgY-D^1_&aNbG`9B{dmWtECMpG<{}G-rUy*Hilnq}8Z$)n%4hQM4%EL1< zwmNgZbe3a$-NBjdsuJgbH=VSBof*z<%qLvP3ERpm*71!hrI>E7b@ zfn{WV$2EZA#q|s*BI9QxuXp7rW?90=4*gwM?|X31R&NsWeV6^ONRr@4>&`3 z7W4gxx20wm$Za1>ZANyOJ?v98yx5j@GWZ-K;4``^QS`6;obOZmGx7xR;^j-eEcIuB z#Mj`kuhr6%7;J)xF!a3Id2RuBeVKeW@SSj7g)?nx#A*sfAl5UUPVhP zmX%ubs9Ta4sJKjpB+)qcdl(4s9UPkgyo9_e8$~*9`QJcnxV)?||KK#Iby{f!>=(Hu z%OT(W#70W43;tP6w|lIx5FIzYMqD{~KXyZqL(Xm(M4QNf}zI3)ui*a>?g^7>s4 z|0p;t(*FT;DC1x^^ZILm4&PttZ!)@cco(9eUtlrF(?g|!mB9`%1JpEbtmr>Mqu~db zZW^gD(Q7pWDaPQgfipCz1RVIb!$YqDKS{$qrQs=F^6+7NxTm+qQMT!QWL8PY&rjpD zT%BZegGMTmVvO|Tv0}8sM1PnJC-??`7z4rN?2SCl8ZZsip;7S4Cr~5RN$wUtIxvV% zA19iP!J1o7)yyGu!#FWud6-7d_5*K`kWK&*q4Mwz*GR9+rElA^VHX${q2a|NJN-q5 zC_e4LI3W2BcNvk%MvQQdNI=0OsbV}-`!Qe=c!c#F%@}}}$HUwHF}$N=VR(wHk;kk) zUc<{n8}dvX7z2A+5+CDOFrMRF#@HNVbeOpSPGcu(q-rQqKZ)Cr6{5FkqBdM)R2mm#zu!?g7=2Z!wpwFttFI zy<|WP$%JrHG~cC%B2y5{xf10059ez4e-Nw$$;QEc&TK2Z3EaTvwLIjUcg}2S zFPfWQw0tG(EmgpSZRAoWt7c5t0~PYB8KARFwvo}b(rG~mVW})wvzd9Aeq|8N(OWb_ zPq6*!2J8;gun*Bt>{dEuqBvSnFDWxsw~Ys+{!!VzP#84881`M+4wfZ((t&vQ{HH8c z0<5Sfz`y0IQP@uU%0w|Vtr6n#)?@bIC!xQTr)$erR8&t}U9xiVk_FYv;ma=Mw~NPz zq`f4T@Dvp$iD6TpmM4L?7){*FmS=h2g7lo^d~14~H6vq8RC*l5v0wA8%2{^P%1L72 zv^{LdI#_m+asBq*I-9B05h&8KkhVvkeK5C6#GCiiFDHosquVu&NOyoQ_K<@v9<;&& zAgrK}=Lzkk;giLX$`=OBuJ2+hN&AoQAwI1m0h+oUayXNZ?_o}K#J;YFPag0xbBO#p z!r9++#6>0uH}6eStiQrzZun99_GCDnJI4HNv>un^2`Zz&S7pH_)aI?JU>|Lj%g1o9 z^SC#^!BV+Nh5Y}+7r+UL$HG3D2Lwgn$^VbX+uVDmcew2b5|CtRuXhKc8ooNwpORVF zko$X@Q9IeL6!l;F>1|?U$op*NGJ?m4nt?jyBd(Y5F%6so>H8BNzrLTkq(&*9p5|7R z6CZ44pASR<&&4bSopBi?rKv9l4}v~EXF)udsIYtm_l~`}aOpsK2+KU+oV){oe|gQw zA_V!K=My{A<)Z(Vvwa(p+q2gqT%K*OhsM&FC_u5*c-VeDm^F;z@bey^bq zP89<^u5fbdRSkV+s+c_bf11>a)yvotD`y{CZL+3MuO2nVL4)_1d_eFI8mdngEy^D? zbY!v^qWnoiGm^#W9zVl%6-+I@cE^tfL&{M`XIamb$<=bHg}2q&Pie`)B~De!*mrlyfj zN)gR8E>-l6LT=7?0L}sIHIYu?Ce>7;l9r~5)=-rjFQecrnVko3vL+W+N8Dc#9~T#a zMyhFNsyM<=!$0+A=j^eOh3ROx8@-qci$+U_rHQf8I^GQNu6O5`uzY+yZW$D*r}NXq z2zO6Df3O#=PZNV?50ksa)uzJtVcsrx{D^9pkCQYL8GK#tcn6c8g9IUzmz`admyi4n zPo#^cNk+K|PBAvlXJ;L`$j{{HKEEidC_5dQ0$h9L<`v{5XCsrDPEQw&wm{c5_Mwz- zkaPUBxM}bh7d)82UdBd*(xd5OkXCxujtFBn;R=C%1wZcLT>mi9!8+0`?Pz!TLKrK^`mAb+s?u~Var5hDi1pkX8Vk@v538j!?wXQPafn?qhhLnO3@Vnm9ut(qq%asdVx$J_bF~#qq|V zcp4fUV+lx*Cvu$Fj|L|PB+@+i4`#xXhBQk5;l@}8nPiG2Gmd1&lgtE?nMg8|Nak3Q zIgVtGCz&>qIe}zik~#5E=A?N&(*N5@cZp(hQMm6Igp$T64e0DSe$mi9{mDsKaVToC z${3T9l`9rzdKIN-=cX44CAPTol9el$l`dH_e}1`j;li?VYguW9Fm7xd4Ud@mg@22%buCGQlYXrxKh-a5}*m1WzM4li)0ZZzuQ;g0l(EAvl-dJc9EHo=$K9 z!G#1D5j=z7nFP-wcs9Xv2%byuodn-S@H~R=CiotLiwQ0vcs{`k2wq5VDZ%#=yolh% z1TP_YDZ%# z68t#9PY_HA-brvH!A}zWFM@Xw{1m}Y6Z{OpO$0wna5KTr5xkq=7J~N>yqDlsg4+n* zNAP}v+X+5E@bd&8B)Eg%PJ&+`_}>I~5&R;-hY0Q__%Oje1iwV^%LMlle1zav2tG>i zF@ld1{3^k(5&SyAZxH+@!T%xn1i^g-pCtG#g5M_i9fIE__!Pl*g5M+fzXZQe@CO8c zNbpAle@yTv1b<5KX@Wl^_;Z5K5c~zfUlM$l;I9b&n&5K;pC|Ymg1;sBJAy9|e39Tw z1YaijdxEbJe3jt;5!_Gk4+Q^6@J|H)Oz<^=uM_+W!M_sx8^JdS{+-}I2>z4czX-lr zhZWnf0-yw_0BV2+;0DkFbO3jN2S5+-1b6|40lWb|0AGL~zyL4;OaOmC0Kg0g1Xut; zfM7rfAQTV=5CGwT2tXtt3NRcn0x%K~4Tu4Z0*nU40>%KW01*%ehzBG95&=nov4C-a z@c8Kxqv$XcLC-B?grcgC`vDIC)&kZ6)&u?lco47w@DQL9Pz9(4JPfD-Yy{K- z2w)RnGhhp#4)6$IE1({*4e%&nJD>sZ7+?qBpMb{!PXH)jC!i7VB;a3wU4W+mPXnF- zGy$FkGy|Rk>;|*|_5k(*S^;fhXCDx!+;*Z zOMsUFy?`TtR{%!=#{kCxuL52JybgE+@Fw6tfD?c|z)8ScfVTnf0Nw?h0@wlX0saek zAMgR-L%>IXj{%|R1|^1NjtpRB8y+(#fEY{+I!=zkp3Zu~k-;IZzCgwQ)fwa%R$D@pF~F7S z>IL}fIR*syxYma_`gk)iu(>j@Ffg-#)&1EHSEmC~7v$(0?jPhG3^b0-lYy1Ni5;x$ z2SS-PNLg60OOR)nE69axen8Vsv4WL-Kv(99P!`0%XTk7A5?!567(|Vpv%jAk&^VR^ zU=S=|0xPTd|Cj;Hn4HKeoSe)c&tPf==1U*~K^qbX0gm3T;Nbk<#30E~qz_hR&;a(F z88EEGgF_sHLP7&TE(U==vlti|t}_CanE^xoF(U_v!8BQrEm>IpKL*$=$#aWw5g!u^ z3mZGfWJUqm&58o|omtd0G_@u(hDdG}WP8lGD9mEfBPM1SH}}nqTz?rCJ!50>@bdNn zb2c-+`_Ino>mLA-`oYE<7#tEB79J596&({B2NeCxxP(!PDLxU%{KvRVhLJ@!DJ3;6 zJtH$KJ0~|Uzo4+FxTLhKyrQzIx~8_SetKaqWB+Cawh+c;N{luVjm<5sZS5VMUEMvs fef<+APMSPr>a^)IW&$1df^k^_ delta 18822 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 diff --git a/SYS/KERNEL.S.TERMX.txt b/SYS/KERNEL.S.TERMX.txt index 84c7fdb7..addb82b6 100644 --- a/SYS/KERNEL.S.TERMX.txt +++ b/SYS/KERNEL.S.TERMX.txt @@ -242,7 +242,7 @@ TERMX.READ bit bActive is screen active? .72 ldy #S.DCB.TTY.OUTTAIL sta (ZPDCBPtr),y pla - + ldy .8+1 sta CLRWRITEAUX sta (ZPBufPtr),y @@ -339,42 +339,43 @@ TERMX.CIN jsr TERM.GetBufByte *-------------------------------------- .8 jsr SetCharAtCurPos *-------------------------------------- -TERMX.FS ldy #S.DCB.TTY.CH +TERMX.FS ldy #S.DCB.TTY.bDECAWM + lda (ZPDCBPtr),y + asl + + .HS 89 BIT IMM + +TERMX.CUF clc + + php + + ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y inc sta (ZPDCBPtr),y cmp #80 - bcc TERMX.BS.8 + bcc .7 - ldy #S.DCB.TTY.bDECAWM - lda (ZPDCBPtr),y - bpl TERMX.BS.8 + plp + bcc .8 jmp TERMX.NEL + +.7 plp + +.8 clc + rts *-------------------------------------- -TERMX.BS ldy #S.DCB.TTY.CH +TERMX.BS +TERMX.CUB ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y - beq TERMX.BS.1 + beq TERMX.BS.8 dec sta (ZPDCBPtr),y TERMX.BS.8 clc rts - -TERMX.BS.1 ldy #S.DCB.TTY.CV - lda (ZPDCBPtr),y - beq .2 - - dec - sta (ZPDCBPtr),y - - lda #79 - ldy #S.DCB.TTY.CH - sta (ZPDCBPtr),y - -.2 clc - rts *-------------------------------------- TERMX.DEL ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y @@ -453,9 +454,10 @@ TERMX.SETM.0 lda #0 TERMX.SETM ldy #S.DCB.TTY.M sta (ZPDCBPtr),y ldy #S.DCB.TTY.INBUF - lda #S.DCB.TTY.INBUF + tya sta (ZPDCBPtr),y - clc + +TERMX.SETM.8 clc rts *-------------------------------------- TERMX.CSI ldy #S.DCB.TTY.INBUF @@ -471,12 +473,9 @@ TERMX.CSI ldy #S.DCB.TTY.INBUF bcs TERMX.CSI.Exec cpy #S.DCB.TTY.INBUF.MAX-1 buffer full? - bne .8 + bne TERMX.SETM.8 - jsr TERMX.M0 - -.8 clc - rts + jmp TERMX.SETM.0 TERMX.CSI.Exec stz CsiH stz CsiPCnt @@ -516,7 +515,7 @@ TERMX.CSI.Exec stz CsiH cmp #';' beq .1 -.5 jsr TERMX.M0 +.5 jsr TERMX.SETM.0 lda (ZPPtr2) ldx #CsiCodes.Cnt-1 @@ -589,7 +588,7 @@ TERMX.RM clc ldy #S.DCB.TTY.bCURON plp - lda #0 + ror sta (ZPDCBPtr),y bmi .80 @@ -610,7 +609,7 @@ TERMX.RM clc .99 clc rts *-------------------------------------- -TERMX.SGR ldx CsiPCnt +TERMX.SGR lda CsiPCnt beq .10 ldx #0 @@ -621,11 +620,10 @@ TERMX.SGR ldx CsiPCnt jsr .10 bra .7 -.2 eor #7 +.2 cmp #7 bne .7 - ldy #S.DCB.TTY.bNORMAL - sta (ZPDCBPtr),y + jsr .11 .7 inx dec CsiPCnt @@ -634,10 +632,15 @@ TERMX.SGR ldx CsiPCnt .8 clc rts -.10 lda #$80 +.10 sec + .HS 90 BCC +.11 clc + + lda #0 + ror ldy #S.DCB.TTY.bNORMAL sta (ZPDCBPtr),y - clc + rts *-------------------------------------- TERMX.DSR ldx CsiPCnt @@ -679,7 +682,7 @@ TERMX.DECSTBM lda #0 ldy CsiP beq .9 - + dey cpy #24 bcs .9 @@ -688,7 +691,7 @@ TERMX.DECSTBM lda #0 ldy CsiP+1 beq .9 - + dey cpy #24 bcs .9 @@ -732,10 +735,10 @@ TERMX.CUx ldy #1 .8 clc rts -.80 .DA TERMX.IND - .DA TERMX.RI - .DA TERMX.FS - .DA TERMX.BS +.80 .DA TERMX.CUU + .DA TERMX.CUD + .DA TERMX.CUF + .DA TERMX.CUB *-------------------------------------- TERMX.CUP TERMX.HVP lda CsiPCnt @@ -854,7 +857,7 @@ TERMX.IAC ldy #S.DCB.TTY.INBUF .DA TERMX.IAC.DO .DA TERMX.IAC.DONT *-------------------------------------- -TERMX.IAC.SB ldy #S.DCB.TTY.INBUF+2 +TERMX.IAC.SB ldy #S.DCB.TTY.INBUF+2 lda (ZPDCBPtr),y Get SUBCMD in A cmp #TN.O.TTYPE @@ -873,7 +876,7 @@ TERMX.IAC.SB ldy #S.DCB.TTY.INBUF+2 cpx #SB.IS.TTYPE.LEN bne .1 -TERMX.IAC.SB.9 bra TERMX.M0 +TERMX.IAC.SB.9 jmp TERMX.SETM.0 *-------------------------------------- TERMX.IAC.WILL ldx #WILLDO.CNT-1 @@ -891,7 +894,7 @@ TERMX.IAC.WILL ldx #WILLDO.CNT-1 dex bpl .2 - bra TERMX.M0 + jmp TERMX.SETM.0 .7 ldx #DO bra TERMX.IAC.SendAX @@ -912,7 +915,7 @@ TERMX.IAC.DO ldx #DOWILL.CNT-1 dex bpl .2 - bra TERMX.M0 + jmp TERMX.SETM.0 .7 ldx #WILL .HS 2C BIT ABS @@ -931,11 +934,7 @@ TERMX.IAC.SendAX jsr TERMX.COUT pla jsr TERMX.COUT -*-------------------------------------- -TERMX.M0 lda #0 - ldy #S.DCB.TTY.M - sta (ZPDCBPtr),y - rts + jmp TERMX.SETM.0 *-------------------------------------- TERMX.RIS ldy #S.DCB.TTY.M @@ -945,7 +944,7 @@ TERMX.RIS ldy #S.DCB.TTY.M cpy #S.DCB.TTY.INBUF+1 bne .1 - jmp TERMX.ED0 Erase Screen + jmp TERMX.ED2 Erase Screen *-------------------------------------- TERMX.ENQ ldx #0 @@ -965,7 +964,12 @@ TERMX.LF ldy #S.DCB.TTY.bLNM TERMX.NEL jsr TERMX.CR -TERMX.IND ldy #S.DCB.TTY.CV +TERMX.IND sec scroll + .HS 90 BCC +TERMX.CUD clc no scroll + + php + ldy #S.DCB.TTY.CV lda (ZPDCBPtr),y ldy #S.DCB.TTY.SCROLLBOT cmp (ZPDCBPtr),y @@ -975,10 +979,15 @@ TERMX.IND ldy #S.DCB.TTY.CV ldy #S.DCB.TTY.CV sta (ZPDCBPtr),y - clc + plp + +.8 clc rts -.1 ldy #S.DCB.TTY.SCROLLTOP +.1 plp + bcc .8 + + ldy #S.DCB.TTY.SCROLLTOP lda (ZPDCBPtr),y tax @@ -1000,13 +1009,13 @@ TERMX.EL ldx CsiPCnt lda CsiP beq TERMX.EL0 Erase EOL - + cmp #1 beq TERMX.EL1 Erase SOL cmp #2 Erase Line beq TERMX.EL2 - + TERMX.EL.8 clc rts *-------------------------------------- @@ -1069,7 +1078,12 @@ TERMX.DECRC jsr TERMX.CUROFF sta (ZPDCBPtr),y rts *-------------------------------------- -TERMX.RI ldy #S.DCB.TTY.SCROLLTOP +TERMX.RI sec scroll + .HS 90 BCC +TERMX.CUU clc no scroll + php + + ldy #S.DCB.TTY.SCROLLTOP lda (ZPDCBPtr),y ldy #S.DCB.TTY.CV @@ -1079,10 +1093,16 @@ TERMX.RI ldy #S.DCB.TTY.SCROLLTOP lda (ZPDCBPtr),y dec sta (ZPDCBPtr),y - clc + + plp + +.8 clc rts -.1 ldy #S.DCB.TTY.SCROLLBOT +.1 plp + bcc .8 + + ldy #S.DCB.TTY.SCROLLBOT lda (ZPDCBPtr),y tax @@ -1191,7 +1211,7 @@ TERMX.COUT pha save char *-------------------------------------- TERMX.ED ldx CsiPCnt beq TERMX.ED0 - + .1 lda CsiP beq TERMX.ED0 @@ -1204,24 +1224,24 @@ TERMX.ED ldx CsiPCnt clc rts *-------------------------------------- -TERMX.ED1 ldy #S.DCB.TTY.CV +TERMX.ED0 ldy #S.DCB.TTY.CV Erase Cursor -> Bottom sta (ZPDCBPtr),y tax - bra TERMX.ED0.1 + bra TERMX.ED.1 -TERMX.ED2 ldx #0 +TERMX.ED1 ldx #0 Erase Top -> Cursor ldy #S.DCB.TTY.CV sta (ZPDCBPtr),y tay - bra TERMX.ED0.2 + bra TERMX.ED.2 TERMX.FF jsr TERMX.HOME -TERMX.ED0 ldx #0 +TERMX.ED2 ldx #0 Erase Screen -TERMX.ED0.1 ldy #24 +TERMX.ED.1 ldy #24 -TERMX.ED0.2 sty .1+1 +TERMX.ED.2 sty .1+1 .1 cpx #$ff SELF MODIFIED beq .9 @@ -1449,7 +1469,7 @@ SetCharAtYX sty ZPTmpX bit bActive bmi SetCharAtY.SCR1 - + rts SetCharAtY.SCR sty ZPTmpX