From 9aea9939ee082749c29afed0cf5fb412d48442d4 Mon Sep 17 00:00:00 2001 From: burniouf Date: Sat, 22 Apr 2023 20:58:37 +0200 Subject: [PATCH] **LOT of mods*** TESTING REQUESTED around....everything :-) --- .Docs/TERM.md | 172 ++++++------ .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/CC.S.txt | 2 +- BIN/EDIT.S.CTRL.txt | 102 +++---- BIN/EDIT.S.DLG.txt | 366 ++++++++++++++----------- BIN/EDIT.S.IO.txt | 2 +- BIN/EDIT.S.SCRN.txt | 132 ++++----- BIN/EDIT.S.txt | 49 ++-- BIN/FORTH.S.CL.txt | 129 +++++---- BIN/FORTH.S.txt | 11 +- BIN/GOPHER.S.txt | 4 +- BIN/IRC.S.txt | 11 +- BIN/LSDEV.S.txt | 21 +- BIN/SH.S.CL.txt | 210 ++++++++------- BIN/SH.S.CMD.txt | 6 + BIN/SH.S.txt | 25 +- INC/A2osX.I.txt | 1 - INC/LIBTCPIP.I.txt | 27 +- LIB/LIBTCPIP.S.SKT.txt | 105 +++++--- LIB/LIBTCPIP.S.TCP.txt | 104 ++++--- LIB/LIBTUI.S.CTX.txt | 5 +- LIB/LIBTUI.S.IO.txt | 43 ++- LIB/LIBTUI.S.OBJ.txt | 8 +- LIB/LIBTUI.S.TLINE.txt | 2 +- LIB/LIBTUI.S.txt | 6 +- ProDOS.FX/ProDOS.S.LDR.txt | 198 +++++++++----- ROOT/asmtest/TESTTUI.S.txt | 11 +- SYS/KERNEL.S.DEF.txt | 4 +- SYS/KERNEL.S.DEV.txt | 4 +- SYS/KERNEL.S.DRV.txt | 69 +++-- SYS/KERNEL.S.INIT.txt | 23 +- SYS/KERNEL.S.TERM.txt | 2 +- SYS/KERNEL.S.TERMX.txt | 536 +++++++++++++++++++------------------ 33 files changed, 1312 insertions(+), 1078 deletions(-) diff --git a/.Docs/TERM.md b/.Docs/TERM.md index 4d7cbd05..7e61802c 100644 --- a/.Docs/TERM.md +++ b/.Docs/TERM.md @@ -1,94 +1,92 @@ # A2osX Terminal Codes Guide -### Updated February 10, 2020 +### Updated Apr. 15, 2023 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 || -|Esc[ValueB |Move cursor down n lines| CUD || -|Esc[ValueC |Move cursor right n lines| CUF|| -|Esc[ValueD |Move cursor left n lines| CUB || -|Esc[H |Move cursor to upper left corner| cursorhome|| -|Esc[;H |Move cursor to upper left corner| cursorhome|| -|Esc[Line;ColumnH |Move cursor to screen location v,h| CUP |OK| -|Esc[f |Move cursor to upper left corner| hvhome || -|Esc[;f |Move cursor to upper left corner| hvhome || -|Esc[Line;Columnf |Move cursor to screen location v,h| CUP|| -|EscD |Move/scroll window up one line| IND || -|EscM |Move/scroll window down one line| RI || -|EscE |Move to next line| NEL || -|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;ColumnR |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 | +|---------------|-------------|----------|------------| +|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| ## License A2osX is licensed under the GNU General Public License. @@ -107,4 +105,4 @@ The full A2osX license can be found **[Here](../LICENSE)**. ## Copyright -Copyright 2015 - 2019, Remy Gibert and the A2osX contributors. +Copyright 2015 - 2023, Remy Gibert and the A2osX contributors. diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index b13773a72af8ff912e5ab399d30407fcea3310e8..7a89a39b7481c7f5d27f1906bf6c996be988ac3f 100644 GIT binary patch delta 550698 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 z*Q!T2>S?Q8Y^#shRv(OTcv1pU;sD>UV|dNxi%K44B@a_c>(X!iYi8ECj&)wMu*UUS z=Rtw@=xmICE5tu1{hUI0<`$Z-p}KpFH{Z8xD8W1NVBmQ9eR&EqP=0QJMUD$`myh)~2x*&1WB4Ly?gmwxoKMDp!O5A<=R)`03S} zL$R=@>xR{dI|_pq`~?9J009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI Q5C8!XkOb6qmb)$g4>&b6UH||9 delta 443799 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

u3`tQbh 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 z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2teTfhrpA*A6~Tm E57il|4gdfE diff --git a/BIN/CC.S.txt b/BIN/CC.S.txt index b69a3ca3..30f89ebe 100644 --- a/BIN/CC.S.txt +++ b/BIN/CC.S.txt @@ -692,7 +692,7 @@ ENV.LIB .AZ "LIB" LIB.O .AZ ".o" *-------------------------------------- CC.EscChars .AS "abefnrtv" - .HS 5C27223F + .HS 5C27223F \'"? CC.EscChars.Cnt .EQ *-CC.EscChars CC.EscCodes .HS 07081B0C0A0D090B .HS 5C27223F diff --git a/BIN/EDIT.S.CTRL.txt b/BIN/EDIT.S.CTRL.txt index c904fe0d..52d72628 100644 --- a/BIN/EDIT.S.CTRL.txt +++ b/BIN/EDIT.S.CTRL.txt @@ -36,6 +36,7 @@ Ctrl.DEL jsr BUF.ComputeCOffset jsr Ctrl.BS bcs .9 + jmp Ctrl.Z .8 clc @@ -255,60 +256,40 @@ Ctrl.L jsr BUF.GetLine *-------------------------------------- Ctrl.CR lda #C.CR jsr BUF.InsertA - bcs .99 + bcs .9 - jsr SCRN.LineBufInitEdit CEOL - - >STZ.G FileX >INCW.G FileY + >STZ.G FileX + >LDA.G ScreenX + beq .1 + + jmp SCRN.UpdateViewPort +*-------------------------------------- +.1 jsr SCRN.LineBufInitEdit +CEOL + jsr SCRN.LineBufOut + bcs .9 + + >LDA.G CurY + >CMP.G ViewPortHm1 + bne .2 bottom line ? + + jmp SCRN.UpdateViewPort +*-------------------------------------- +.2 inc + >STA.G CurY >STZ.G CurX - - >LDA.G CurY - >CMP.G ViewPortHm1 - bne .1 - - jsr SCRN.LineBufOut Bottom line, CEOL... - bcs .99 - - jmp SCRN.UpdateViewPort ...and scroll - -.1 dec - >CMP.G ViewPortHm1 - beq .6 No scroll needed - - >PUSHW LineBufPtr - >PUSHW L.SEQ.SCROLLCURDN - - >LDA.G CurY - inc - inc - >PUSHA - >LDA.G ScreenH - dec - >PUSHA - >PUSHBI 2 - jsr SCRN.LineBufSprintf - -.99 bcs .9 - - >PUSHW LineBufPtr - >PUSHW L.SEQ.SCROLLRGN - >LDA.G ScreenH - dec - >PUSHA - >PUSHBI 1 - jsr SCRN.LineBufSprintf + + jsr SCRN.InsLineAtCurY bcs .9 -.6 jsr SCRN.LineBufOut - bcs .9 - - >INC.G CurY - jsr BUF.ComputeCOffset jsr SCRN.UpdateCurrentLine + bcs .9 + jmp SCRN.GotoCurXCurY +* jmp SCRN.UpdateViewPort + .9 rts *-------------------------------------- Ctrl.O ldy #FileY+1 @@ -405,24 +386,7 @@ Ctrl.Y jsr BUF.GetNextLine tya Y = line length >STA.G FileX - >LDA.G FileY - sec - >SBC.G ViewPortHm1 - tax - >LDA.G FileY+1 - sbc #0 - bcs .2 - - >LDA.G FileY - tax - lda #0 - -.2 >STA.G ScreenY+1 - dey - txa - sta (pData),y - - jmp SCRN.UpdateMainAndStatus + jmp SCRN.UpdateViewPort *-------------------------------------- Ctrl.F >LDYA L.DLG.FIND jsr DLG.Open @@ -600,6 +564,7 @@ Ctrl.D jsr BUF.DelSel bcs Ctrl.D.8 jsr BUF.ResetSel + jsr SCRN.CursorAdjust jsr SCRN.UpdateViewPort jsr SCRN.UnSaved will update TopBar @@ -648,18 +613,17 @@ Ctrl.Z jsr BUF.ComputeCOffset jsr SCRN.ResetScrollRgn bcs .9 - jsr SCRN.UpdateCurrentLine - bcs .9 - jsr SCRN.UpdateLast bcs .9 .8 jsr SCRN.UpdateCurrentLine bcs .9 -.80 jsr SCRN.UnSaved - jsr SCRN.GotoCurXCurY - jmp SCRN.UpdateStatusBar +.80 jsr SCRN.CursorAdjust + jsr SCRN.UpdateViewPort + jsr SCRN.UnSaved will update TopBar + jmp SCRN.UpdateMainAndStatus + .9 rts *-------------------------------------- MAN diff --git a/BIN/EDIT.S.DLG.txt b/BIN/EDIT.S.DLG.txt index 8130c9b1..9f930e6c 100644 --- a/BIN/EDIT.S.DLG.txt +++ b/BIN/EDIT.S.DLG.txt @@ -8,64 +8,65 @@ DLG.Open >STYA ZPPTR2 lda #0 >SYSCALL GetMem bcs .99 - + >STYA ZPPTR1 txa >STA.G hDLG - + ldy #0 - + .1 lda (ZPPTR2),y sta (ZPPTR1),y iny tya cmp (ZPPTR2) bne .1 - + jsr DLG.SetOrigin sty TmpByte - + jsr SCRN.GotoXY bcs .9 - - ldy #S.DLG.Title - jsr DLG.DrawBar + + jsr DLG.DrawTBar .99 bcs .9 - + jsr SCRN.LineBufInitDLG - + ldy #S.DLG.W lda (ZPPTR1),y dec + dec tax - + lda #C.SPACE + .3 jsr SCRN.ToLineBuf dex bne .3 jsr DLG.VBarToLineBuf - + ldy #S.DLG.H lda (ZPPTR1),y dec dec tax - + .4 phx inc TmpByte - + ldy #S.DLG.X lda (ZPPTR1),y tax ldy TmpByte jsr SCRN.GotoXY bcs .9 - + jsr SCRN.LineBufOut bcs .9 - + plx dex bne .4 @@ -75,42 +76,42 @@ DLG.Open >STYA ZPPTR2 ldy #S.DLG.X lda (ZPPTR1),y tax - + ldy TmpByte jsr SCRN.GotoXY bcs .9 - - ldy #S.DLG.Status - jsr DLG.DrawBar + + jsr DLG.DrawSBar bcs .9 jmp DLG.CTRL.DrawAll -.9 rts +.9 rts *-------------------------------------- DLG.Run jsr IO.GetCh bcs .9 - + cmp #3 beq .8 - + cmp #C.CR beq .8 cmp #C.TAB beq DLG.NextFocus + pha - + ldy #S.DLG.Focus lda (ZPPTR1),y get actual focused Ctrl tay - + pla jsr DLG.CTRL.CharIn - + bra DLG.Run - + .8 clc .9 rts *-------------------------------------- @@ -119,7 +120,7 @@ DLG.NextFocus ldy #S.DLG.Focus pha save it... tax - + .1 inx next one .2 txa @@ -137,50 +138,50 @@ DLG.NextFocus ldy #S.DLG.Focus txa ldy #S.DLG.Focus sta (ZPPTR1),y - + pla get old focused phx save new focused jsr DLG.CTRL.Focus - + pla jsr DLG.CTRL.Focus jmp DLG.Run *-------------------------------------- DLG.Close ldy #S.DLG.Y lda (ZPPTR1),y - + sta TmpByte - + >LDA.G ScreenY clc ldy #S.DLG.Y adc (ZPPTR1),y sta TmpIndex - + >LDA.G ScreenY+1 adc #0 sta TmpIndex+1 ldy #S.DLG.H lda (ZPPTR1),y - + jsr SCRN.UpdateMain.1 bcs .9 >LDA.G hDLG >SYSCALL FreeMem - + >STZ.G hDLG clc -.9 rts +.9 rts *-------------------------------------- DLG.CTRL.DrawAll ldy #S.DLG.Ctrls - + .5 lda (ZPPTR1),y beq .8 - + phy jsr DLG.CTRL.Draw ply @@ -192,7 +193,7 @@ DLG.CTRL.DrawAll .8 ldy #S.DLG.Focus lda (ZPPTR1),y jmp DLG.CTRL.Focus - + .9 rts *-------------------------------------- DLG.CTRL.Draw sty TmpByte Y=CtrlID @@ -208,24 +209,24 @@ DLG.CTRL.Draw.LBL jsr DLG.CTRL.GotoOrg bcs .9 - + ldy TmpByte CtrlID lda (ZPPTR1),y tay - + iny iny iny .1 lda (ZPPTR1),y beq .8 - + jsr SCRN.ToLineBuf iny bra .1 - + .8 jmp SCRN.LineBufOut - + .9 rts *-------------------------------------- DLG.CTRL.Draw.TB @@ -233,17 +234,17 @@ DLG.CTRL.Draw.TB jsr DLG.CTRL.GotoOrg bcs .9 - + ldy TmpByte lda (ZPPTR1),y tay - + iny iny iny - + iny - + iny lda (ZPPTR1),y @@ -252,38 +253,38 @@ DLG.CTRL.Draw.TB >SYSCALL GetMemPtr >STYA ZPPTR2 - + lda #C.SPACE jsr SCRN.ToLineBuf ldy #0 - + .1 lda (ZPPTR2),y beq .2 jsr SCRN.ToLineBuf iny bra .1 - + .2 tya tax - + ldy TmpByte lda (ZPPTR1),y tay - + iny iny iny - + txa sta (ZPPTR1),y CURPOS iny - -.3 txa + +.3 txa eor (ZPPTR1),y MAXCHAR beq .8 - + lda #C.SPACE jsr SCRN.ToLineBuf inx @@ -291,7 +292,7 @@ DLG.CTRL.Draw.TB .8 lda #C.SPACE jsr SCRN.ToLineBuf - + jmp SCRN.LineBufOut .9 rts *-------------------------------------- @@ -300,55 +301,62 @@ DLG.CTRL.Draw.OL jsr DLG.CTRL.GotoOrg bcs .9 - + ldy TmpByte lda (ZPPTR1),y tay S.DLG.Ctrl.OL - - iny X + + iny X iny Y iny shortcut - + iny varptr lda (ZPPTR1),y phy tay lda (pData),y ply - + iny value - + eor (ZPPTR1),y tax - + iny label - - lda #"(" + + lda #'(' jsr SCRN.ToLineBuf - lda #"o" - cpx #0 + lda #C.SO + jsr SCRN.ToLineBuf + + lda #'`' + cpx #0 beq .2 lda #C.SPACE - + .2 jsr SCRN.ToLineBuf - lda #")" + + lda #C.SI + jsr SCRN.ToLineBuf + + lda #')' jsr SCRN.ToLineBuf lda #C.SPACE jsr SCRN.ToLineBuf - + .3 lda (ZPPTR1),y beq .4 jsr SCRN.ToLineBuf iny bra .3 - + .4 lda #C.SPACE jsr SCRN.ToLineBuf - + .8 jmp SCRN.LineBufOut .9 rts @@ -358,27 +366,27 @@ DLG.CTRL.Draw.BUT jsr DLG.CTRL.GotoOrg bcs .9 - + ldy TmpByte CtrlID lda (ZPPTR1),y tay - + iny iny iny - + iny - + lda #C.SPACE - jsr SCRN.ToLineBuf + jsr SCRN.ToLineBuf .1 lda (ZPPTR1),y beq .8 - + jsr SCRN.ToLineBuf iny bra .1 - + .8 lda #C.SPACE jsr SCRN.ToLineBuf @@ -386,7 +394,7 @@ DLG.CTRL.Draw.BUT .9 rts *-------------------------------------- DLG.CTRL.Focus sta TmpByte A=CtrlID - + tay lda (ZPPTR1),y Ctrl Definition tay @@ -400,28 +408,28 @@ DLG.CTRL.Focus.LBL rts DLG.CTRL.Focus.TB jsr SCRN.LineBufInitTB - + jsr DLG.CTRL.GotoOrg - + ldy #S.DLG.Focus lda (ZPPTR1),y eor TmpByte bne .1 sec - + .1 lda #C.SPACE bcc .2 lda #'[' .2 jsr SCRN.ToLineBuf jsr DLG.CTRL.GotoEnd - + ldy #S.DLG.Focus lda (ZPPTR1),y eor TmpByte bne .3 sec - + .3 lda #C.SPACE bcc .4 lda #']' @@ -432,68 +440,68 @@ DLG.CTRL.Focus.TB ldy TmpByte CtrlID lda (ZPPTR1),y tay - + iny skip Ctrl Type lda (ZPPTR1),y clc - + ldy #S.DLG.X adc (ZPPTR1),y pha - + ldy TmpByte CtrlID lda (ZPPTR1),y tay - + iny iny iny pla - + sec +1 adc (ZPPTR1),y tax - + ldy TmpByte CtrlID lda (ZPPTR1),y tay - + iny skip Ctrl Type iny skip X - + lda (ZPPTR1),y clc ldy #S.DLG.Y adc (ZPPTR1),y - + tay - + jmp SCRN.GotoXY DLG.CTRL.Focus.OL jsr SCRN.LineBufInitLBL - + jsr DLG.CTRL.GotoOrg - + ldy #S.DLG.Focus lda (ZPPTR1),y eor TmpByte bne .1 sec - + .1 lda #'(' bcc .2 lda #'[' .2 jsr SCRN.ToLineBuf jsr DLG.CTRL.GotoEnd - + ldy #S.DLG.Focus lda (ZPPTR1),y eor TmpByte bne .3 sec - + .3 lda #')' bcc .4 lda #']' @@ -503,31 +511,31 @@ DLG.CTRL.Focus.OL jsr SCRN.ToLineBuf jsr SCRN.ToLineBuf jmp SCRN.LineBufOut - + DLG.CTRL.Focus.BUT jsr SCRN.LineBufInitBut - + jsr DLG.CTRL.GotoOrg - + ldy #S.DLG.Focus lda (ZPPTR1),y eor TmpByte bne .1 sec - + .1 lda #C.SPACE bcc .2 lda #'[' .2 jsr SCRN.ToLineBuf jsr DLG.CTRL.GotoEnd - + ldy #S.DLG.Focus lda (ZPPTR1),y eor TmpByte bne .3 sec - + .3 lda #C.SPACE bcc .4 lda #']' @@ -538,45 +546,45 @@ DLG.CTRL.Focus.BUT DLG.CTRL.GotoOrg clc .HS B0 BCS -DLG.CTRL.GotoEnd +DLG.CTRL.GotoEnd sec php - + ldy TmpByte CtrlID lda (ZPPTR1),y tay - + iny skip Ctrl Type lda (ZPPTR1),y clc - + ldy #S.DLG.X adc (ZPPTR1),y plp bcc .1 - + >PUSHA jsr DLG.CTRL.GetWitdh clc adc (pStack) inc pStack - + .1 tax - + ldy TmpByte CtrlID lda (ZPPTR1),y tay - + iny skip Ctrl Type iny skip X - + lda (ZPPTR1),y clc ldy #S.DLG.Y adc (ZPPTR1),y - + tay - + DLG.CTRL.GotoXY >PUSHW LineBufPtr >PUSHW L.MSG.GOTOXY tya @@ -588,41 +596,41 @@ DLG.CTRL.GotoXY >PUSHW LineBufPtr >PUSHA >PUSHBI 2 >SYSCALL SPrintF - + .2 lda (LineBufPtr) beq .8 inc LineBufPtr bne .2 inc LineBufPtr+1 bra .2 - -.8 rts + +.8 rts *-------------------------------------- DLG.SetOrigin ldy #S.DLG.X lda (ZPPTR1),y bne .1 - + >LDA.G ScreenW ldy #S.DLG.W sec sbc (ZPPTR1),y - + lsr - + ldy #S.DLG.X sta (ZPPTR1),y - + .1 tax ldy #S.DLG.Y lda (ZPPTR1),y bne .2 - + >LDA.G ViewPortHm1 ldy #S.DLG.H sec sbc (ZPPTR1),y - + lsr ldy #S.DLG.Y sta (ZPPTR1),y @@ -635,12 +643,12 @@ DLG.CTRL.GetWitdh ldy TmpByte CtrlID lda (ZPPTR1),y tay - + lda (ZPPTR1),y tax - + jmp (J.DLG.CTRL.GetWitdh,x) -*-------------------------------------- +*-------------------------------------- DLG.CTRL.GetWitdh.LBL clc rts @@ -661,35 +669,35 @@ DLG.CTRL.GetWitdh.OL iny iny iny - + ldx #0 - + .1 inx iny lda (ZPPTR1),y bne .1 - + txa rts - + DLG.CTRL.GetWitdh.BUT iny iny iny - + ldx #0 - + .1 inx iny lda (ZPPTR1),y bne .1 - + txa rts *-------------------------------------- DLG.CTRL.CharIn sty TmpByte A=CtrlID pha - + lda (ZPPTR1),y Ctrl Definition tay lda (ZPPTR1),y Ctrl Type @@ -704,10 +712,10 @@ DLG.CTRL.CharIn.LBL DLG.CTRL.CharIn.TB cmp #C.DEL beq .5 - + cmp #C.SPACE bcc .9 - + pha iny @@ -717,13 +725,13 @@ DLG.CTRL.CharIn.TB iny cmp (ZPPTR1),y MAXCHAR beq .7 - + pha - + inc dey sta (ZPPTR1),y CURPOS - + iny iny @@ -747,7 +755,7 @@ DLG.CTRL.CharIn.TB >SYSCALL PutChar clc rts - + .5 iny iny iny @@ -775,12 +783,12 @@ DLG.CTRL.CharIn.TB >SYSCALL PutChar clc rts - + .7 pla .8 clc rts - + .9 sec rts *-------------------------------------- @@ -802,9 +810,9 @@ DLG.CTRL.CharIn.OL ply sta (pData),y - + jmp DLG.CTRL.DrawAll - + .8 clc rts *-------------------------------------- @@ -812,40 +820,72 @@ DLG.CTRL.CharIn.BUT clc rts *-------------------------------------- -DLG.DrawBar phy - jsr SCRN.LineBufInitDLGBar - +DLG.DrawTBar ldx #SEQ.DLG.TBAR-SEQS + jsr SCRN.LineBufInit + ldy #S.DLG.W lda (ZPPTR1),y + dec + dec tax - ply + ldy #S.DLG.Title lda (ZPPTR1),y tay - + .1 lda (ZPPTR1),y beq .11 jsr SCRN.ToLineBuf dex + beq .3 + iny bra .1 - + .11 lda #C.SPACE - + .2 jsr SCRN.ToLineBuf dex bne .2 - - ldy #0 -.3 lda SEQ.NORM,y - beq .4 +.3 ldx #SEQ.DLG.TBAR.E-SEQS + jsr SCRN.SEQS.ToLineBuf + +.4 jmp SCRN.LineBufOut +*-------------------------------------- +DLG.DrawSBar ldx #SEQ.DLG.SBAR-SEQS + jsr SCRN.LineBufInit + + ldy #S.DLG.W + lda (ZPPTR1),y + dec + dec + tax + + ldy #S.DLG.Status + lda (ZPPTR1),y + tay + +.1 lda (ZPPTR1),y + beq .11 jsr SCRN.ToLineBuf - iny - bra .3 + dex + beq .3 + iny + bra .1 + +.11 lda #C.SPACE + +.2 jsr SCRN.ToLineBuf + dex + bne .2 + +.3 ldx #SEQ.DLG.SBAR.E-SEQS + jsr SCRN.SEQS.ToLineBuf + .4 jmp SCRN.LineBufOut *-------------------------------------- DLG.VBarToLineBuf @@ -857,7 +897,7 @@ DLG.VBarToLineBuf jsr SCRN.ToLineBuf iny bra .1 - + .8 rts *-------------------------------------- MAN diff --git a/BIN/EDIT.S.IO.txt b/BIN/EDIT.S.IO.txt index 0e5d3eb3..22ca2987 100644 --- a/BIN/EDIT.S.IO.txt +++ b/BIN/EDIT.S.IO.txt @@ -57,7 +57,7 @@ IO.GetCh.1 tax rts *-------------------------------------- .11 lda (pData) #EscBufferPtr - cmp #15 + cmp #21 bcc .10 .19 >STZ.G bEscMode diff --git a/BIN/EDIT.S.SCRN.txt b/BIN/EDIT.S.SCRN.txt index 04784420..5c8a8c92 100644 --- a/BIN/EDIT.S.SCRN.txt +++ b/BIN/EDIT.S.SCRN.txt @@ -9,22 +9,8 @@ SCRN.Init >PUSHW L.SEQ.INIT >PUSHBI 1 >SYSCALL PrintF bcs SCRN.Init.9 - - jmp SCRN.Home -*-------------------------------------- -SCRN.Repaint lda #$ff - >STA.G bUpdateTop - >STA.G bUpdateStatus - - jsr SCRN.UpdateTopBar - bcs SCRN.Init.9 - - jsr SCRN.GotoCurXCurY - bcs SCRN.Init.9 - - jmp SCRN.UpdateMainAndStatus - -SCRN.Init.9 rts + + jsr SCRN.ResetScrollRgn *-------------------------------------- SCRN.Home lda #0 @@ -35,6 +21,53 @@ SCRN.Home lda #0 cpy #CurY+1 bne .1 + + rts +*-------------------------------------- +SCRN.Repaint jsr SCRN.GotoCurXCurY + bcs SCRN.Init.9 + + lda #$ff + >STA.G bUpdateStatus + + jsr SCRN.UpdateTopBar + bcs SCRN.Init.9 + + jmp SCRN.UpdateMainAndStatus + +SCRN.Init.8 clc +SCRN.Init.9 rts +*-------------------------------------- +SCRN.InsLineAtCurY + >LDA.G CurY + >CMP.G ViewPortHm1 + beq .8 + + jsr SCRN.GotoCurXCurY + bcs .9 + + >PUSHW L.SEQ.SCROLLCURDN + >LDA.G CurY + inc + inc + >PUSHA + >LDA.G ScreenH + dec + >PUSHA + >PUSHBI 2 + >SYSCALL PrintF + bcs .9 + + jsr SCRN.ResetScrollRgn + + +.8 clc +.9 rts +*-------------------------------------- +SCRN.DelLineAtCurY + + + clc rts *-------------------------------------- SCRN.ResetScrollRgn @@ -47,42 +80,18 @@ SCRN.ResetScrollRgn rts *-------------------------------------- SCRN.UnSaved >LDA.G bUnSaved - bne SCRN.UpdateTopBar.8 + bne SCRN.Init.8 dec - sta (pData),y + sta (pData),y bUnSaved *-------------------------------------- SCRN.UpdateTopBar - >LDA.G bUpdateTop - bmi SCRN.UpdateTopBar.1 -SCRN.UpdateTopBar.8 - clc - rts - -SCRN.UpdateTopBar.1 - lda #0 - sta (pData),y - - jsr SCRN.LineBufInitBar - ldx #SEQ.CURSAVE-SEQS - jsr SCRN.SEQS.ToLineBuf + jsr SCRN.LineBufInit ldy #1 jsr SCRN.LineBufGotoLineY - bcs .9 - - >LDA.G ScreenW - tax - - lda #C.SPACE - -.1 jsr SCRN.ToLineBuf - dex - bne .1 - - lda #C.CR - jsr SCRN.ToLineBuf + jsr SCRN.ResetBar >PUSHW LineBufPtr >PUSHW L.MSG.TOPBAR @@ -111,7 +120,6 @@ SCRN.UpdateTopBar.1 jmp SCRN.LineBufOut -.8 clc .9 rts *-------------------------------------- SCRN.UpdateViewPort @@ -189,6 +197,7 @@ SCRN.UpdateViewPort jsr SCRN.scrollUp ...and move content one line up bcc .41 + .9 rts .6 >LDA.G FileX @@ -251,6 +260,7 @@ SCRN.UpdateMain.1 bne .4 inc TmpIndex+1 + .4 dec TmpCount bne .1 @@ -261,7 +271,7 @@ SCRN.UpdateMain.1 jsr SCRN.GotoXY bcs SCRN.UpdateMain.9 - >PUSHW L.SEQ.CEOL + >PUSHW L.SEQ.EDIT >PUSHBI 0 >SYSCALL PrintF bcs SCRN.UpdateMain.9 @@ -356,6 +366,7 @@ SCRN.UpdateLineAtBufPtr .5 lda (BufPtr) cmp #'\' beq .50 + cmp #'%' bne .51 @@ -413,7 +424,7 @@ SCRN.UpdateStatusBar sta (pData),y jsr SCRN.ResetStatusBar - + >PUSHW LineBufPtr >PUSHW L.MSG.STATUSBAR @@ -451,15 +462,16 @@ SCRN.UpdateStatusBar .9 rts *-------------------------------------- SCRN.ResetStatusBar - jsr SCRN.LineBufInitBar - ldx #SEQ.CURSAVE-SEQS - jsr SCRN.SEQS.ToLineBuf + jsr SCRN.LineBufInit >LDA.G ScreenH tay jsr SCRN.LineBufGotoLineY +SCRN.ResetBar ldx #SEQ.BAR-SEQS + jsr SCRN.SEQS.ToLineBuf + >LDA.G ScreenW tax @@ -483,9 +495,9 @@ SCRN.CursorAdjust .2 tya >CMP.G FileX bcs .8 - + >STA.G FileX - + .8 clc rts *-------------------------------------- @@ -555,40 +567,26 @@ SCRN.scrollDn >PUSHW L.SEQ.SCROLLDN .9 rts *-------------------------------------- SCRN.LineBufInitBar - phx ldx #SEQ.BAR-SEQS bra SCRN.LineBufInit -SCRN.LineBufInitDLGBar - phx - ldx #SEQ.DLG.BAR-SEQS - bra SCRN.LineBufInit SCRN.LineBufInitDLG - phx ldx #SEQ.DLG-SEQS bra SCRN.LineBufInit SCRN.LineBufInitLBL - phx ldx #SEQ.DLG.LBL-SEQS bra SCRN.LineBufInit SCRN.LineBufInitTB - phx ldx #SEQ.DLG.TB-SEQS bra SCRN.LineBufInit SCRN.LineBufInitBut - phx ldx #SEQ.DLG.BUT-SEQS bra SCRN.LineBufInit SCRN.LineBufInitEdit - phx ldx #SEQ.EDIT-SEQS SCRN.LineBufInit >LDYA.G LineBufBase >STYA LineBufPtr - - jsr SCRN.SEQS.ToLineBuf - plx - rts *-------------------------------------- SCRN.SEQS.ToLineBuf lda SEQS,x @@ -597,6 +595,7 @@ SCRN.SEQS.ToLineBuf inx lda SEQS,x bne .1 + rts *-------------------------------------- SCRN.LineBufGotoLineY @@ -625,6 +624,7 @@ SCRN.LineBufSprintf SCRN.ToLineBuf sta (LineBufPtr) inc LineBufPtr bne .8 + inc LineBufPtr+1 .8 rts *-------------------------------------- diff --git a/BIN/EDIT.S.txt b/BIN/EDIT.S.txt index 1f465481..37e3d8f0 100644 --- a/BIN/EDIT.S.txt +++ b/BIN/EDIT.S.txt @@ -69,7 +69,7 @@ L.SEQ.SCROLLUP .DA SEQ.SCROLLUP L.SEQ.SCROLLDN .DA SEQ.SCROLLDN L.SEQ.SCROLLCURUP .DA SEQ.SCROLLCURUP L.SEQ.SCROLLCURDN .DA SEQ.SCROLLCURDN -L.SEQ.CEOL .DA SEQ.CEOL +L.SEQ.EDIT .DA SEQ.EDIT L.MSG.TERMCAP .DA MSG.TERMCAP L.MSG.TOPBAR .DA MSG.TOPBAR L.MSG.FILETYPES .DA MSG.TXTCR @@ -147,18 +147,13 @@ CS.INIT.RTS rts *-------------------------------------- CS.RUN >PUSHW L.MSG.TERMCAP >PUSHBI 0 - >SYSCALL PrintF Send Query for term W & H + >SYSCALL PrintF Send Query for term W & H bcs CS.INIT.RTS .1 jsr IO.GetCh bcs CS.INIT.RTS -* beq .11 - -* >SYSCALL PutChar -* bcs CS.INIT.RTS - -.11 >LDA.G ScreenW Wait for Response from terminal for W & H + >LDA.G ScreenW Wait for Response from terminal for W & H beq .1 jsr SCRN.Init @@ -260,7 +255,6 @@ CS.DOEVENT lda (pEvent) asl bpl .9 - >STA.G bUpdateTop >STA.G bUpdateStatus .9 sec @@ -304,16 +298,25 @@ CS.QUIT ldy #hLineBuf CS.END SEQS .EQ * SEQ.BAR .CZ "\e[7m\e[37;40m" -SEQ.DLG.BAR .CS "\e[0m\e[37;40m" - .DA #C.SO,#'x',#C.SI +SEQ.DLG.TBAR .CS "\e[0m\e[93;104m" + .DA #C.SO,#'l',#C.SI .CZ "\e[7m\e[37;40m" -SEQ.DLG .CS "\e[30;46m" +SEQ.DLG.TBAR.E .CS "\e[0m\e[93;104m" + .DA #C.SO,#'k',#C.SI + .DA #0 +SEQ.DLG .CS "\e[93;104m" .DA #C.SO,#'x',#C.SI .DA #0 -SEQ.DLG.VBAR .CS "\e[37;40m" +SEQ.DLG.VBAR .CS "\e[93;104m" .DA #C.SO,#'x',#C.SI .DA #0 -SEQ.DLG.LBL .CZ "\e[0m\e[30;46m" +SEQ.DLG.SBAR .CS "\e[0m\e[93;104m" + .DA #C.SO,#'m',#C.SI + .CZ "\e[7m\e[37;40m" +SEQ.DLG.SBAR.E .CS "\e[0m\e[93;104m" + .DA #C.SO,#'j',#C.SI + .DA #0 +SEQ.DLG.LBL .CZ "\e[0m\e[30;104m" SEQ.DLG.TB .CZ "\e[0m\e[93;44m" SEQ.DLG.BUT .CZ "\e[7m\e[93;44m" SEQ.EDIT .CS "\e[0m\e[93;44m" +CEOL @@ -323,12 +326,16 @@ SEQ.INV .CZ "\e[7m" SEQ.CURSAVE .CZ "\e7" SEQ.CURRESTORE .CZ "\e8" *-------------------------------------- -SEQ.RESET .CZ "\ec" -SEQ.INIT .CS "\ec\e(B\e)0" -SEQ.SCROLLRGN .CZ "\e[?7l\e[2;%dr" -SEQ.SCROLLCURUP .CS "\e[?7l\e[%d;%dr" +SEQ.INIT .CS "\ec" + .CS "\e(B" font select + .CS "\e)0" font select + .CZ "\e[?7l" Disable Line Wrap +SEQ.RESET .CZ "\ec\e[?7h" Enable Line Wrap +*-------------------------------------- +SEQ.SCROLLRGN .CZ "\e[2;%dr" +SEQ.SCROLLCURUP .CS "\e[%d;%dr" SEQ.SCROLLUP .CZ "\eD" -SEQ.SCROLLCURDN .CS "\e[?7l\e[%d;%dr" +SEQ.SCROLLCURDN .CS "\e[%d;%dr" SEQ.SCROLLDN .CZ "\eM" *-------------------------------------- MSG.TERMCAP .CZ "\r\n\e[999;999H\e[6n" @@ -371,7 +378,7 @@ MSG.HELP .PS "All commands:" MSG.NEWFILE .AZ "newfile" EscChars .AS "DABC" EscChars.Cnt .EQ *-EscChars -EscAscii .DA #C.BS,#C.VT,#C.LF,#C.FS +EscAscii .DA #C.BS,#C.VT,#C.LF,#21 *-------------------------------------- S.DLG.Size .EQ 0 S.DLG.X .EQ 1 @@ -495,7 +502,7 @@ bEscMode .BS 1 bCSIMode .BS 1 bExit .BS 1 bUnSaved .BS 1 -bUpdateTop .BS 1 + bUpdateStatus .BS 1 hFileName .BS 1 diff --git a/BIN/FORTH.S.CL.txt b/BIN/FORTH.S.CL.txt index 0fbe3fd6..937cc6c1 100644 --- a/BIN/FORTH.S.CL.txt +++ b/BIN/FORTH.S.CL.txt @@ -14,9 +14,8 @@ CL.READN0X >PUSHW ZPCLBuf >PUSHBI 1 >SYSCALL SPrintF bcs .9 - - lda #$ff - sta CL.bReady + + dec CL.bReady * clc .9 rts *-------------------------------------- @@ -39,14 +38,15 @@ CL.CHARIN tax dex bpl .1 -.8 rts invalid \e[ sequence +.8 clc + rts invalid \e[ sequence .2 lda CL.MaxCnt bne .3 - + lda EscChars.Remap,x bra CL.READN0A - + .3 txa asl tax @@ -63,7 +63,7 @@ CL.CHARIN tax .5 lda CL.MaxCnt beq CL.READN0X - + cpx #C.SPACE bcc CL.CHARIN.CTRL @@ -74,12 +74,11 @@ CL.CHARIN tax *-------------------------------------- lda CL.Len beq .8 - + lda CL.Ptr beq .8 - lda #C.BS - >SYSCALL PutChar + jsr CL.BS.OUT dec CL.Ptr jmp CL.DEL @@ -101,26 +100,30 @@ CL.Insert ldy CL.Len txa sta (ZPCLBuf),y - inc CL.Ptr >SYSCALL PutChar + bcs .9 + + inc CL.Ptr + jsr CL.PrintEOL + bcs .9 lda CL.MaxCnt dec MaxCnt = 1, don't wait for CR bne .8 - lda #$ff - sta CL.bReady + dec CL.bReady .8 clc - rts + +.9 rts *-------------------------------------- CL.CHARIN.CTRL cpx #C.CR - beq .8 + beq .70 cpx #C.EOF - beq .9 + beq .71 cpx #3 Ctrl-C beq CL.CLR @@ -134,14 +137,13 @@ CL.CHARIN.CTRL cpx #C.CR bne .8 jmp CL.SUPPR - -.8 jsr CheckLFAfterCR + +.70 jsr CheckLFAfterCR bcs .9 - lda #$ff - sta CL.bReady +.71 dec CL.bReady - clc +.8 clc .9 rts *-------------------------------------- CL.CLR lda (ZPCLBuf) @@ -151,12 +153,12 @@ CL.CLR lda (ZPCLBuf) cmp CL.Len beq .2 - inc - sta CL.Ptr + inc CL.Ptr - lda #C.FS - >SYSCALL PutChar - bra .1 + jsr CL.FS.OUT + bcc .1 + + rts .2 ldy #0 @@ -170,9 +172,9 @@ CL.CLR lda (ZPCLBuf) *-------------------------------------- CL.Reset lda #0 sta (ZPCLBuf) - + CL.Reset.1 ldx #CL.Ptr - + .1 stz 0,x inx cpx #CL.bEscMode+1 @@ -181,38 +183,45 @@ CL.Reset.1 ldx #CL.Ptr >LDYA ZPCLBuf >STYA ZPCLBufPtr +CL.Reset.8 clc rts *-------------------------------------- CL.BS lda CL.Ptr - beq .9 + beq CL.Reset.8 dec CL.Ptr - lda #C.BS +CL.BS.OUT lda #C.BS >SYSCALL PutChar -.9 rts + rts *-------------------------------------- -CL.NAK lda CL.Ptr +CL.FS lda CL.Ptr cmp CL.Len - beq .9 + beq CL.Reset.8 inc sta CL.Ptr - lda #C.FS - >SYSCALL PutChar +CL.FS.OUT lda #C.ESC + >SYSCALL PutChar -.9 rts + lda #'[' + >SYSCALL PutChar + + lda #'C' + >SYSCALL PutChar + + rts *-------------------------------------- * Erase char UNDER cursor *-------------------------------------- CL.SUPPR lda CL.Len - beq CL.PrintEOL.8 + beq CL.Reset.8 lda CL.Ptr cmp CL.Len - beq CL.PrintEOL.8 + beq CL.Reset.8 *-------------------------------------- CL.DEL ldy CL.Ptr @@ -226,38 +235,42 @@ CL.DEL ldy CL.Ptr dec CL.Len *-------------------------------------- -CL.PrintEOL lda CL.Ptr +CL.PrintEOL ldy CL.Ptr -.1 cmp CL.Len - beq .2 +.1 cpy CL.Len + beq .8 - pha - tay + phy lda (ZPCLBuf),y >SYSCALL PutChar - pla - inc + ply + bcs .9 + + iny bra .1 .2 lda #C.SPACE >SYSCALL PutChar - lda CL.Ptr + bcs .9 -.3 cmp CL.Len - beq .4 + jsr CL.BS.OUT + bcs .9 - pha - lda #C.BS - >SYSCALL PutChar - pla - inc + ldy CL.Ptr + +.3 cpy CL.Len + beq .8 + + phy + jsr CL.BS.OUT + ply + bcs .9 + + iny bra .3 - -.4 lda #C.BS - >SYSCALL PutChar -CL.PrintEOL.8 clc - rts +.8 clc +.9 rts *-------------------------------------- CL.Print ldy #S.PS.hStdOut lda (pPS),y diff --git a/BIN/FORTH.S.txt b/BIN/FORTH.S.txt index 2426d433..0115a015 100644 --- a/BIN/FORTH.S.txt +++ b/BIN/FORTH.S.txt @@ -101,7 +101,7 @@ L.FMT.int32 .DA FMT.int32 J.ESC .DA CL.BS left arrow .DA HIS.GetNext .DA HIS.GetPrev - .DA CL.NAK right arrow + .DA CL.FS right arrow L.KEYWORDS .DA KEYWORDS I.KEYWORDS .DA GFX.TEXT .DA GFX.GR @@ -411,8 +411,8 @@ CS.RUN.LOOP >SLEEP .7 cmp #MLI.E.EOF beq .8 - cmp #3 - beq .99 + cmp #24 Ctrl-X + beq .8 pha >LDA.G hFile @@ -461,10 +461,11 @@ CS.FORTH.Run jsr CL.Reset .1 >SYSCALL GetChar bcs .9 I/O error -.2 cmp #3 Ctrl-C +.2 cmp #24 Ctrl-X beq .9 CS jsr CL.CHARIN + bcs .9 bit CL.bReady Something to execute ? bpl .1 @@ -938,7 +939,7 @@ OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace *-------------------------------------- EscChars .AS 'DBAC' EscChars.Cnt .EQ *-EscChars -EscChars.Remap .DA #C.BS,#C.VT,#C.LF,#C.FS +EscChars.Remap .DA #C.BS,#C.VT,#C.LF,#21 *-------------------------------------- KEYWORDS .AT "TEXT" .AT "GR" diff --git a/BIN/GOPHER.S.txt b/BIN/GOPHER.S.txt index c26d2b5b..243fc4ae 100644 --- a/BIN/GOPHER.S.txt +++ b/BIN/GOPHER.S.txt @@ -165,7 +165,9 @@ CS.RUN.LOOP0 jsr CS.Scr.SetStatusConn jsr CS.Scr.SetBuf jsr CS.Scr.SetStatusOkErr *-------------------------------------- -CS.RUN.LOOP lda hSCR +CS.RUN.LOOP >SLEEP + + lda hSCR >LIBCALL hLIBTUI,LIBTUI.Exec bcs CS.RUN.LOOP.9 diff --git a/BIN/IRC.S.txt b/BIN/IRC.S.txt index 1206eb8c..b8d57cbf 100644 --- a/BIN/IRC.S.txt +++ b/BIN/IRC.S.txt @@ -980,8 +980,15 @@ CS.RUN.CHARIN.RIGHT inc sta TextPtr - lda #C.FS + lda #C.ESC >SYSCALL PutChar + + lda #'[' + >SYSCALL PutChar + + lda #'C' + >SYSCALL PutChar + .9 rts *-------------------------------------- CS.DOEVENT lda (pEvent) @@ -1054,7 +1061,7 @@ MSG.NULL .HS 00 *-------------------------------------- EscChars .AS 'DBAC' EscChars.Cnt .EQ *-EscChars -EscChars.Remap .DA #C.BS,#C.VT,#C.LF,#C.FS +EscChars.Remap .DA #C.BS,#C.VT,#C.LF,#21 *-------------------------------------- IRC.REP.NOIDENT .AZ "*** No Ident response" IRC.REP.JOIN .AZ "JOIN" diff --git a/BIN/LSDEV.S.txt b/BIN/LSDEV.S.txt index aa963f76..4f09d8ab 100644 --- a/BIN/LSDEV.S.txt +++ b/BIN/LSDEV.S.txt @@ -113,12 +113,12 @@ DumpFD.BDEV >PUSHW L.MSG.DEV adc /S.FD.DEV >PUSHYA - ldy #S.FD.DEV.DRVPTR+1 + ldy #S.FD.DEV.BUSPTR+1 >PUSHB (ZPFDPtr),y dey >PUSHB (ZPFDPtr),y - >PUSHBI 7 + >PUSHBI 8 >SYSCALL PrintF bcs .9 @@ -223,6 +223,17 @@ DumpFD.PIPE >PUSHW L.MSG.PIPE DumpFD.T ldx Index >PUSHB hFDs,x + ldy #S.FD.DEV.BUSID + lda (ZPFDPtr),y + asl + asl + asl + asl + + iny #S.FD.DEV.DEVID + ora (ZPFDPtr),y + >PUSHA + lda (ZPFDPtr) S.FD.T tax >PUSHW L.FD.T,x @@ -246,10 +257,10 @@ CS.QUIT clc rts *-------------------------------------- CS.END -MSG0 .CZ "hFD Type Name Addr Status Typ/Sub IDString Version Size (BLK)" -MSG.DEV .CZ "%3d %4s %12s %H " +MSG0 .CZ "hFD ID Type Name Addr Status TP.ST IDString Version Size (BLK)" +MSG.DEV .CZ "%3d %h %4s %12s %H " MSG.DEV.ERR .CZ "[%h] Device Error.\r\n" -MSG.DEV.DIB .CZ "%s $%h/$%h %16S %03d.%03d " +MSG.DEV.DIB .CZ "%s %h.%h %16S %3d.%3d " MSG.DEV.B .CZ "%10u\r\n" MSG.DEV.C .CZ "n/a\r\n" MSG.PIPE .CZ "%3d %5s %s\r\n" diff --git a/BIN/SH.S.CL.txt b/BIN/SH.S.CL.txt index a26c56f8..bc372150 100644 --- a/BIN/SH.S.CL.txt +++ b/BIN/SH.S.CL.txt @@ -54,20 +54,21 @@ CL.CHARIN tax sta (pData),y Y=bEscMode txa - ldx #EscChars.Cnt-1 + ldx #IN.EscCharsCnt-1 -.1 cmp EscChars,x +.1 cmp IN.EscChars,x beq .2 dex bpl .1 -.8 rts invalid \e[ sequence +.8 clc + rts invalid \e[ sequence .2 >LDA.G CL.MaxCnt bne .3 - lda EscChars.Remap,x + lda IN.EscCodes,x bra CL.READN0A .3 txa @@ -103,10 +104,15 @@ CL.CHARIN tax >LDA.G CL.bSilent bmi .6 - lda #C.BS + jsr CL.BS.OUT + + lda #C.SPACE >SYSCALL PutChar + + jsr CL.BS.OUT .6 >DEC.G CL.Ptr + jmp CL.DEL *-------------------------------------- CL.Insert >LDA.G CL.Len @@ -163,17 +169,18 @@ CL.CHARIN.CTRL cpx #C.CR cpx #C.EOF beq .19 - cpx #3 Ctrl-C - beq CL.CLR - cpx #C.TAB bne .1 jmp HIS.Select .1 cpx #26 Ctrl-Z + beq CL.SUPPR + + cpx #3 Ctrl-C bne .8 - jmp CL.SUPPR + + jmp CL.CLR .18 jsr CheckLFAfterCR Check for any extra LF bcs .9 @@ -184,6 +191,98 @@ CL.CHARIN.CTRL cpx #C.CR .8 clc .9 rts *-------------------------------------- +* Erase char UNDER cursor +*-------------------------------------- +CL.SUPPR >LDA.G CL.Len + beq CL.PrintEOL.8 + + >LDA.G CL.Ptr + >CMP.G CL.Len + beq CL.PrintEOL.8 +*-------------------------------------- +CL.DEL pha CL.Ptr + +.1 ply + iny + lda (ZPCLBuf),y + dey + sta (ZPCLBuf),y + iny + phy + tya + + >CMP.G CL.Len + bne .1 + + pla + + >DEC.G CL.Len + + >LDA.G CL.bSilent + bmi CL.PrintEOL.8 +*-------------------------------------- +CL.PrintEOL >LDA.G CL.Ptr + + >CMP.G CL.Len + beq CL.PrintEOL.8 + +.1 pha + tay + lda (ZPCLBuf),y + >SYSCALL PutChar + pla + inc + >CMP.G CL.Len + bne .1 + + lda #C.SPACE + >SYSCALL PutChar + >LDA.G CL.Ptr + +.3 >CMP.G CL.Len + beq .4 + + pha + jsr CL.BS.OUT + pla + inc + bra .3 + +.4 jmp CL.BS.OUT + +CL.PrintEOL.8 clc + rts +*-------------------------------------- +CL.BS >LDA.G CL.Ptr + beq CL.BS.8 + + dec + sta (pData),y + + >LDA.G CL.bSilent + bpl CL.BS.OUT + +CL.BS.8 clc + rts + +CL.BS.OUT lda #C.BS + >SYSCALL PutChar + + rts +*-------------------------------------- +CL.FS >LDA.G CL.Ptr + >CMP.G CL.Len + beq CL.BS.8 + + inc + >STA.G CL.Ptr + + >LDA.G CL.bSilent + bmi CL.BS.8 + +CL.FS.OUT >LDYA L.MSG.FS + jmp PrintYANoCR +*-------------------------------------- CL.CLR >STZ.G HIS.Ptr CL.CLR.1 lda (ZPCLBuf) @@ -198,8 +297,8 @@ CL.CLR.1 lda (ZPCLBuf) inc >STA.G CL.Ptr - lda #C.FS - >SYSCALL PutChar + + jsr CL.FS.OUT bra .1 .2 ldy #0 @@ -239,95 +338,6 @@ CL.ReadReset lda #$ff sta (pData),y rts *-------------------------------------- -CL.BS >LDA.G CL.Ptr - beq .9 - - dec - sta (pData),y - - >LDA.G CL.bSilent - bmi .9 - - lda #C.BS - >SYSCALL PutChar -.9 rts -*-------------------------------------- -CL.NAK >LDA.G CL.Ptr - >CMP.G CL.Len - beq .9 - - inc - >STA.G CL.Ptr - - >LDA.G CL.bSilent - bmi .9 - - lda #C.FS - >SYSCALL PutChar - -.9 rts -*-------------------------------------- -* Erase char UNDER cursor -*-------------------------------------- -CL.SUPPR >LDA.G CL.Len - beq CL.PrintEOL.8 - >LDA.G CL.Ptr - >CMP.G CL.Len - beq CL.PrintEOL.8 -*-------------------------------------- -CL.DEL pha -.1 ply - iny - lda (ZPCLBuf),y - dey - sta (ZPCLBuf),y - iny - phy - tya - - >CMP.G CL.Len - bne .1 - - pla - - >DEC.G CL.Len - - >LDA.G CL.bSilent - bmi CL.PrintEOL.8 -*-------------------------------------- -CL.PrintEOL >LDA.G CL.Ptr - -.1 >CMP.G CL.Len - beq .2 - - pha - tay - lda (ZPCLBuf),y - >SYSCALL PutChar - pla - inc - bra .1 - -.2 lda #C.SPACE - >SYSCALL PutChar - >LDA.G CL.Ptr - -.3 >CMP.G CL.Len - beq .4 - - pha - lda #C.BS - >SYSCALL PutChar - pla - inc - bra .3 - -.4 lda #C.BS - >SYSCALL PutChar - -CL.PrintEOL.8 clc - rts -*-------------------------------------- MAN SAVE usr/src/bin/sh.s.cl LOAD usr/src/bin/sh.s diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index 1eb79863..46a75444 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -171,6 +171,7 @@ CMD.CD.YA >PUSHYA >PUSHWZ Allocate >SYSCALL RealPath bcs CMD.POPD.RTS + >STYA ZPPtr1 stx ZPTmpW Save hMem @@ -563,6 +564,7 @@ CMD.REN lda (ZPArgVBufPtr) >SYSCALL GetMem bcs .90 + >STYA ZPPtr2 stx ZPTmpW+1 @@ -630,6 +632,7 @@ CMD.FUNCTION lda (ZPArgVBufPtr) jsr CORE.ArgV.Next nothing after function name beq .10 + cmp #'{' bne .9 @@ -1109,6 +1112,7 @@ CMD.NEXT.LIST.TOKEN lda (pData),y sta ZPPtr1+1 ldy #0 + .10 jsr GetPtr1NextChar beq .3 @@ -1117,11 +1121,13 @@ CMD.NEXT.LIST.TOKEN sta (ZPCLBuf),y iny + .1 jsr GetPtr1NextChar beq .3 cmp #C.SPACE beq .3 + sta (ZPCLBuf),y iny bra .1 diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index 1d118785..b8cf8ae9 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -130,13 +130,14 @@ L.MSG.BATCHERR .DA MSG.BATCHERR L.MSG.ERROR .DA MSG.ERROR L.MSG.PID .DA MSG.PID L.MSG.ALIAS .DA MSG.ALIAS +L.MSG.FS .DA MSG.FS L.FMT.DATE .DA FMT.DATE L.FMT.Long .DA FMT.Long L.FMT.Byte .DA FMT.Byte -J.ESC .DA CL.BS left arrow +J.ESC .DA CL.BS .DA HIS.GetPrev up .DA HIS.GetNext down - .DA CL.NAK right + .DA CL.FS L.CD.. .DA CD.. L.IN .DA IN L.CMD .DA CMD @@ -623,6 +624,7 @@ MSG.ERROR .CS "[$%h]:%s." MSG.ECHOCRLF .CZ "\r\n" MSG.PID .CZ "PID=%d\r\n" MSG.ALIAS .CZ '%s = "%s"\r\n' +MSG.FS .CZ "\e[C" *-------------------------------------- FMT.DATE .AZ "%A, %B %d %Y %H:%M:%S" FMT.Long .AZ "%L" @@ -634,9 +636,22 @@ PS1 .AZ "${PS1}" HOME .AZ "${HOME}" EXECC .AZ "%s -C %s" *-------------------------------------- -EscChars .AS "DABC" -EscChars.Cnt .EQ *-EscChars -EscChars.Remap .DA #C.BS,#C.VT,#C.LF,#C.FS +IN.EscChars .AS "DABC" +IN.EscCharsCnt .EQ *-EscChars +IN.EscCodes .DA #C.BS,#C.VT,#C.LF,#21 +*-------------------------------------- +* \e[1~ - Home +* \e[2~ - Insert +* \e[3~ - Delete +* \e[4~ - End +* \e[5~ - PgUp +* \e[6~ - PgDn +*-------------------------------------- +OUT.EscChars .AS "abefnrtv" + .HS 5C27223F \'"? +OUT.EscCharsCnt .EQ *-OUT.EscChars +OUT.EscCodes .HS 07081B0C0A0D090B + .HS 5C27223F *-------------------------------------- CD.. .AZ ".." *-------------------------------------- diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 3f4ef779..6b760362 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -147,7 +147,6 @@ C.SO .EQ 14 C.SI .EQ 15 C.XON .EQ 17 C.XOFF .EQ 19 -C.FS .EQ 21 C.ESC .EQ 27 C.SPACE .EQ 32 C.DEL .EQ 127 diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index 886d7cdd..c21857a9 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -180,22 +180,23 @@ S.SOCKET.TCP.S.TIMEWT .EQ 11 S.SOCKET.TCP.O .EQ S.SOCKET+1 * S.SOCKET.TCP.INSEQNUM .EQ S.SOCKET+2 Recv:Last SEQ received from remote -S.SOCKET.TCP.OUTNEXTSEQ .EQ S.SOCKET+6 Send:Next SEQ to send -S.SOCKET.TCP.OUTSENTSEQ .EQ S.SOCKET+10 Send:SEQ sent not yet ACKed (retransmit) +S.SOCKET.TCP.INACKNUM .EQ S.SOCKET+6 +S.SOCKET.TCP.OUTNEXTSEQ .EQ S.SOCKET+10 Send:Next SEQ to send +S.SOCKET.TCP.OUTSENTSEQ .EQ S.SOCKET+14 Send:SEQ sent not yet ACKed (retransmit) * -S.SOCKET.TCP.INTAIL .EQ S.SOCKET+14 -S.SOCKET.TCP.INHEAD .EQ S.SOCKET+16 -S.SOCKET.TCP.INFREE .EQ S.SOCKET+18 -S.SOCKET.TCP.INUSED .EQ S.SOCKET+20 +S.SOCKET.TCP.INTAIL .EQ S.SOCKET+18 +S.SOCKET.TCP.INHEAD .EQ S.SOCKET+20 +S.SOCKET.TCP.INFREE .EQ S.SOCKET+22 +S.SOCKET.TCP.INUSED .EQ S.SOCKET+24 * -S.SOCKET.TCP.OUTTAIL .EQ S.SOCKET+22 -S.SOCKET.TCP.OUTTAILSENT .EQ S.SOCKET+24 -S.SOCKET.TCP.OUTHEAD .EQ S.SOCKET+26 -S.SOCKET.TCP.OUTFREE .EQ S.SOCKET+28 -S.SOCKET.TCP.OUTTOSEND .EQ S.SOCKET+30 -S.SOCKET.TCP.OUTUSED .EQ S.SOCKET+32 +S.SOCKET.TCP.OUTTAIL .EQ S.SOCKET+26 +S.SOCKET.TCP.OUTTAILSENT .EQ S.SOCKET+28 +S.SOCKET.TCP.OUTHEAD .EQ S.SOCKET+30 +S.SOCKET.TCP.OUTFREE .EQ S.SOCKET+32 +S.SOCKET.TCP.OUTTOSEND .EQ S.SOCKET+34 +S.SOCKET.TCP.OUTUSED .EQ S.SOCKET+36 * -S.SOCKET.TCP .EQ S.SOCKET+34 +S.SOCKET.TCP .EQ S.SOCKET+38 *-------------------------------------- MAN SAVE inc/libtcpip.i diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 9a7f69ce..fa80c5d0 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -333,16 +333,16 @@ SKT.shutdown pha ldy #S.SOCKET.TCP.S lda (ZPPtrSKT),y - cmp #S.SOCKET.TCP.S.CLOSING + cmp #S.SOCKET.TCP.S.CLWAIT bne .10 - inc S.SOCKET.TCP.S.TIMEWT + lda #S.SOCKET.TCP.S.TIMEWT sta (ZPPtrSKT),y pla clc rts - +*-------------------------------------- .10 pla jsr SKT.GetTCB ldy #S.SOCKET.TCP.S @@ -350,15 +350,15 @@ SKT.shutdown pha cmp #S.SOCKET.TCP.S.ESTBLSH bne .1 - jsr SKT.SendOptFIN + jsr SKT.OUT.SendFINACK lda #S.SOCKET.TCP.S.FINWT1 jmp SKT.StoreTCB.S -.1 cmp #S.SOCKET.TCP.S.CLWAIT +.1 cmp #S.SOCKET.TCP.S.FINWT2 bne .2 - jsr SKT.SendOptFIN + jsr SKT.OUT.SendFINACK lda #S.SOCKET.TCP.S.LASTACK jmp SKT.StoreTCB.S @@ -390,19 +390,6 @@ SKT.shutdown.HQ jsr SKT.GetFromQueue >SYSCALL2 freemem * clc rts -*-------------------------------------- -SKT.SendOptFIN lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK - jsr TCP.OUT.SendOptA Send FIN/ACK - - ldx #3 - -.1 inc SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x - bne .8 - - dex - bpl .1 - -.8 rts */-------------------------------------- * # Read (STREAM) * ## C @@ -419,12 +406,14 @@ SKT.SendOptFIN lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK *\-------------------------------------- SKT.Read jsr SKT.PullhFDDataInPtrLen + jsr SKT.GetTCB + ldy #S.SOCKET.TCP.INUSED lda (ZPPtrSKT),y tax iny ora (ZPPtrSKT),y - beq .7 no data, go check SKT status + beq .8 no data, go check SKT status cpx ZPDataInLen XA = Data in pipe lda (ZPPtrSKT),y @@ -436,13 +425,6 @@ SKT.Read jsr SKT.PullhFDDataInPtrLen sta ZPDataInLen+1 bra SKT.GetDataFromSktIn -.7 ldy #S.SOCKET.TCP.O - lda (ZPPtrSKT),y - and #S.TCP.OPTIONS.ACK - beq .8 - - jmp TCP.OUT.SendOptA - .8 jsr SKT.CheckStream bcs .99 I/O error @@ -457,7 +439,6 @@ SKT.Read jsr SKT.PullhFDDataInPtrLen * Y,A = bytes read *-------------------------------------- SKT.GetDataFromSktIn - jsr SKT.GetTCB ldy #S.SOCKET.SQ.hInMem lda (ZPPtrSKT),y .DO AUXPIPE=1 @@ -473,6 +454,7 @@ SKT.GetDataFromSktIn jsr SKT.GetNotDataInLen pha + .DO AUXPIPE=1 jsr SKT.SetupZPCode .FIN @@ -525,11 +507,15 @@ SKT.GetDataFromSktIn ldx #S.SOCKET.TCP.INUSED jsr SKT.SubDataInLenAtSktX - jsr SKT.StoreTCB - jsr TCP.SetSocketTCPO.ACK ACK=1 -> send WSIZE + lda ZPDataInLen + ldy ZPDataInLen+1 + ldx #S.SOCKET.TCP.INACKNUM + jsr TCP.AddAYToSktCacheAtX -* lda #S.TCP.OPTIONS.ACK -* jsr TCP.OUT.SendOptA + jsr SKT.StoreTCB + + lda #S.TCP.OPTIONS.ACK + jsr TCP.SetSocketTCPO >LDYA ZPDataInLen clc @@ -576,6 +562,7 @@ SKT.AddDataToSktIn .2 inx bne .3 + pla inc beq .8 @@ -586,10 +573,12 @@ SKT.AddDataToSktIn sta (ZPTmpPtr1),y inc ZPDataInPtr bne .4 + inc ZPDataInPtr+1 .4 iny bne .2 + .DO AUXPIPE=1 sta CLRWRITEAUX .FIN @@ -676,6 +665,7 @@ SKT.AddDataToSktOut jsr SKT.GetNotDataInLen pha + .1 .DO AUXPIPE=1 sta SETWRITEAUX .FIN @@ -694,6 +684,7 @@ SKT.AddDataToSktOut inc ZPDataInPtr bne .4 + inc ZPDataInPtr+1 .4 iny @@ -816,6 +807,7 @@ SKT.GetDataFromSktOut .3 iny bne .1 + inc ZPTmpPtr1+1 inc SKT.Cache+S.SOCKET.TCP.OUTTAILSENT+1 lda SKT.Cache+S.SOCKET.TCP.OUTTAILSENT+1 @@ -837,7 +829,7 @@ SKT.GetDataFromSktOut clc rts */-------------------------------------- -* # RecvFrom (RAW,DGRAM,SEQPKT) +* # RecvFrom (RAW,DGRAM) * ## C * `hMem recvfrom(hFD fd, struct sockaddr *addr);` * ## ASM @@ -874,12 +866,36 @@ SKT.Recv clc cmp #S.SOCKET.T.SEQPKT bcc .10 RAW,DGRAM - bne .99 STREAM + bne .98 STREAM jsr SKT.GetFromQueue SEQPKT - bcc .1 + bcs .1 - jsr SKT.CheckTCP + pha + >SYSCALL2 GetMemPtr + >STYA ZPFrameInPtr + + jsr TCP.IN.SetDataInPtrAndLen + + jsr SKT.GetTCB + + lda ZPDataInLen + ldy ZPDataInLen+1 + ldx #S.SOCKET.TCP.INACKNUM + jsr TCP.AddAYToSktCacheAtX + + jsr SKT.StoreTCB + + lda #S.TCP.OPTIONS.ACK +* jsr TCP.OUT.SendOptA + jsr TCP.SetSocketTCPO + + pla + plp + clc + rts + +.1 jsr SKT.CheckTCP bcs .91 .90 lda #E.NODATA @@ -887,10 +903,15 @@ SKT.Recv clc sec rts +.98 plp +.99 lda #ERR.SKT.BAD + sec + rts +*-------------------------------------- .10 jsr SKT.GetFromQueue bcs .90 -.1 plp if CS, RecvFrom + plp if CS, RecvFrom bcc .9 CC, Recv : Exit with CC and A=hFrame pha @@ -937,11 +958,6 @@ SKT.Recv clc pla clc .9 rts - -.99 lda #ERR.SKT.BAD - plp - sec - rts */-------------------------------------- * # SendTo (RAW,DGRAM,SEQPKT) * ## C @@ -976,6 +992,8 @@ SKT.Send jsr SKT.PullhFDDataInPtrLen ldy #S.SOCKET.T lda (ZPPtrSKT),y + cmp #S.SOCKET.T.STREAM + bcs * tax jmp (J.SKT.send,x) *-------------------------------------- @@ -985,12 +1003,14 @@ SKT.Send.RAW ldy #S.SOCKET.PROTO >LDYA ZPDataInLen jsr FRM.NewIP bcc SKT.Send.8 + rts *-------------------------------------- SKT.Send.DGRAM ldx #S.IP.PROTOCOL.UDP >LDYA ZPDataInLen jsr FRM.NewIP bcs SKT.Send.9 + jsr SKT.SetFrameOutTCPUDPPorts SKT.Send.8 jsr SKT.SetFrameOutDstIP @@ -1478,6 +1498,7 @@ SKT.CopyDataInToOut sta (ZPDataOutPtr),y iny bne .1 + inc ZPDataInPtr+1 inc ZPDataOutPtr+1 bne .1 diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index e9371f77..cea7b7ee 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -97,7 +97,7 @@ TCP.IN.JMP.SYNSENT .9 lda #S.TCP.OPTIONS.RST jsr TCP.OUT.SendOptA Send RST - + jmp TCP.IN.RST *-------------------------------------- TCP.IN.JMP.SYNRCVD @@ -137,7 +137,9 @@ TCP.IN.JMP.ESTBLSH lda (ZPFrameInPtr),y and #S.TCP.OPTIONS.ACK Remote side ACKed data ? beq .4 +*-------------------------------------- * Ack sent data +*-------------------------------------- ldy #S.TCP.ACKNUM+3 Get new ACK number from FrameIn... ldx #3 Substract old ACK from socket @@ -153,7 +155,7 @@ TCP.IN.JMP.ESTBLSH dex bpl .1 - bcc .70 ACK > SENT SEQ ???? + bcc .7 ACK > SENT SEQ ???? lda TmpDWord+3 ldx TmpDWord+2 @@ -189,7 +191,9 @@ TCP.IN.JMP.ESTBLSH sta SKT.Cache+S.SOCKET.TCP.OUTUSED+1 jsr SKT.StoreTCB +*-------------------------------------- * Store incoming data +*-------------------------------------- .4 jsr TCP.IN.SetDataInPtrAndLen lda ZPDataInLen Incoming Data in this frame ? ora ZPDataInLen+1 @@ -228,9 +232,6 @@ TCP.IN.JMP.ESTBLSH jsr TCP.AddAYToSktCacheAtX jsr SKT.StoreTCB update socket -* bra .7 - -.70 jsr TCP.SetSocketTCPO.ACK ...and ack data .7 ldy #S.TCP.OPTIONS lda (ZPFrameInPtr),y @@ -238,8 +239,10 @@ TCP.IN.JMP.ESTBLSH beq .8 jsr TCP.IN.ACKTheFIN - - lda #S.SOCKET.TCP.S.CLWAIT + + jsr SKT.OUT.SendFINACK + + lda #S.SOCKET.TCP.S.LASTACK jmp SKT.StoreTCB.S .8 ldy #S.SOCKET.TCP.O @@ -267,16 +270,14 @@ TCP.IN.JMP.LASTACK ldy #S.TCP.OPTIONS only accept ACK packet lda (ZPFrameInPtr),y bit #S.TCP.OPTIONS.ACK - beq .8 + beq TCP.IN.JMP.CLWAIT + + jsr SKT.GetTCB * jsr TCP.OUT.SendACK - ldy #S.SOCKET.TCP.S - lda #S.SOCKET.TCP.S.TIMEWT - sta (ZPPtrSKT),y - -.8 clc - rts + lda #S.SOCKET.TCP.S.CLWAIT + jmp SKT.StoreTCB.S *-------------------------------------- TCP.IN.JMP.FINWT1 ldy #S.TCP.OPTIONS FIN sent, accept ACK or FIN/ACK packet @@ -323,6 +324,7 @@ TCP.IN.ACKTheSYN .3 lda (ZPFrameInPtr),y Set OUTACK=SEQ+1 for new socket... adc #0 sta SKT.Cache+S.SOCKET.TCP.INSEQNUM,x + sta SKT.Cache+S.SOCKET.TCP.INACKNUM,x dey dex bpl .3 @@ -332,24 +334,13 @@ TCP.IN.ACKTheSYN TCP.IN.ACKTheFIN ldx #3 -.1 inc SKT.Cache+S.SOCKET.TCP.INSEQNUM,x +.1 inc SKT.Cache+S.SOCKET.TCP.INACKNUM,x bne .2 dex bpl .1 .2 rts - - -* ldx #3 - -*.3 inc SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x -* bne .4 - -* dex -* bpl .3 - -*.4 rts *-------------------------------------- TCP.IN.SetDataInPtrAndLen ldy #S.IP.TOTAL.LENGTH+1 @@ -421,16 +412,24 @@ TCP.SENDCLOSE ldx #0 beq .4 cmp #S.SOCKET.TCP.S.ESTBLSH - bne .2 + bne .3 cpx #S.SOCKET.T.SEQPKT - beq .8 + beq .2 - jsr SKT.GetTCB jsr TCP.OUT bra .8 + +.2 ldy #S.SOCKET.TCP.O + lda (ZPPtrSKT),y + and #S.TCP.OPTIONS.ACK + beq .8 + + jsr SKT.GetTCB + jsr TCP.OUT.SendOpt + bra .8 -.2 cmp #S.SOCKET.TCP.S.OPENED +.3 cmp #S.SOCKET.TCP.S.OPENED bne .8 jsr SKT.GetTCB @@ -484,17 +483,20 @@ TCP.SENDCLOSE.PIPE .FIN .8 rts *-------------------------------------- -TCP.OUT lda SKT.Cache+S.SOCKET.TCP.OUTTOSEND+1 +TCP.OUT jsr SKT.GetTCB + + lda SKT.Cache+S.SOCKET.TCP.OUTTOSEND+1 ldy SKT.Cache+S.SOCKET.TCP.OUTTOSEND bne .1 tax bne .1 + * Y,A=0 : no data to send ldy #S.SOCKET.TCP.O lda (ZPPtrSKT),y - bne TCP.OUT.SendOptA a least an option... + bne TCP.OUT.SendOpt a least an option... clc No data, no flag....exit .9 rts @@ -529,12 +531,27 @@ TCP.OUT.SEQSEND ldy #S.TCP.WINDOW jmp SKT.StoreTCB exits with CC *-------------------------------------- +SKT.OUT.SendFINACK + lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK + jsr TCP.OUT.SendOptA Send FIN/ACK + bcs .9 + + ldx #3 + +.1 inc SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x + bne .9 + + dex + bpl .1 + +.9 rts +*-------------------------------------- TCP.OUT.SendACK lda #S.TCP.OPTIONS.ACK TCP.OUT.SendOptA jsr TCP.SetSocketTCPO - >LDYAI 0 +TCP.OUT.SendOpt >LDYAI 0 jsr TCP.NewFrame bcs TCP.OUT.Send.RTS @@ -552,15 +569,22 @@ TCP.OUT.SendOptA ldy #S.SOCKET.TCP.O lda (ZPPtrSKT),y -TCP.OUT.Send ldy #S.TCP.OPTIONS + sec DONT Queue if fail + .HS 90 BCC + +TCP.OUT.Send clc Queue if fail + + php + + ldy #S.TCP.OPTIONS sta (ZPFrameOutPtr),y - bit #S.TCP.OPTIONS.ACK - beq .2 +* bit #S.TCP.OPTIONS.ACK +* beq .2 ldx #3 ldy #S.TCP.ACKNUM+3 -.1 lda SKT.Cache+S.SOCKET.TCP.INSEQNUM,x +.1 lda SKT.Cache+S.SOCKET.TCP.INACKNUM,x sta (ZPFrameOutPtr),y dey dex @@ -575,11 +599,11 @@ TCP.OUT.Send ldy #S.TCP.OPTIONS dex bpl .3 - clc -* sec DONT Queue if fail + plp Get back Queue status jsr FRM.SendIP bcs TCP.OUT.Send.RTS + ldy #S.SOCKET.TCP.O lda #0 sta (ZPPtrSKT),y @@ -588,8 +612,6 @@ TCP.OUT.Send ldy #S.TCP.OPTIONS TCP.OUT.Send.RTS rts *-------------------------------------- -TCP.SetSocketTCPO.ACK - lda #S.TCP.OPTIONS.ACK TCP.SetSocketTCPO ldy #S.SOCKET.TCP.O ora (ZPPtrSKT),y diff --git a/LIB/LIBTUI.S.CTX.txt b/LIB/LIBTUI.S.CTX.txt index dcc3a0a3..6a6afef7 100644 --- a/LIB/LIBTUI.S.CTX.txt +++ b/LIB/LIBTUI.S.CTX.txt @@ -34,9 +34,7 @@ CTX.Init >LDYA L.SEQ.INIT jsr IO.GetC.Reset -.1 >SLEEP - - jsr IO.GetC +.1 jsr IO.GetC bcs .98 .2 ldy #S.CTX.W @@ -50,7 +48,6 @@ CTX.Init >LDYA L.SEQ.INIT bne .1 lda #80 - ldy #S.CTX.W sta (ZPCtxPtr),y diff --git a/LIB/LIBTUI.S.IO.txt b/LIB/LIBTUI.S.IO.txt index a87b0fda..71d5f19d 100644 --- a/LIB/LIBTUI.S.IO.txt +++ b/LIB/LIBTUI.S.IO.txt @@ -2,26 +2,7 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -IO.GetC ldx ZPCtxPtr - phx - ldx ZPCtxPtr+1 - phx - ldx ZPObjPtr - phx - ldx ZPObjPtr+1 - phx - - jsr IO.GetChar - - plx - stx ZPObjPtr+1 - plx - stx ZPObjPtr - plx - stx ZPCtxPtr+1 - plx - stx ZPCtxPtr - +IO.GetC jsr IO.GetChar bcs .9 tax @@ -241,7 +222,16 @@ IO.GetC.ToBuf ldy #S.CTX.InBufPtr .9 rts *-------------------------------------- -IO.GetChar >SYSCALL GetChar +IO.GetChar ldx ZPCtxPtr + phx + ldx ZPCtxPtr+1 + phx + ldx ZPObjPtr + phx + ldx ZPObjPtr+1 + phx + + >SYSCALL GetChar bcs .9 cmp #C.CR @@ -261,7 +251,16 @@ IO.GetChar >SYSCALL GetChar .8 lda #C.CR -.9 rts +.9 plx + stx ZPObjPtr+1 + plx + stx ZPObjPtr + plx + stx ZPCtxPtr+1 + plx + stx ZPCtxPtr + + rts *-------------------------------------- IO.fputs ldx ZPCtxPtr phx diff --git a/LIB/LIBTUI.S.OBJ.txt b/LIB/LIBTUI.S.OBJ.txt index 06614156..ce98cfcf 100644 --- a/LIB/LIBTUI.S.OBJ.txt +++ b/LIB/LIBTUI.S.OBJ.txt @@ -185,9 +185,7 @@ OBJ.Exec >PUSHA hOBJ jsr LIB.GetCTX -.1 >SLEEP - - jsr IO.GetC +.1 jsr IO.GetC bcs .9 cmp #EV.RESIZE @@ -764,7 +762,7 @@ OBJ.CurUpdPos ldy #S.OBJ.F OBJ.CurOn ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bEdit -* beq .8 + beq .8 ldy #S.OBJ.S lda (ZPObjPtr),y S.OBJ.S.bActive @@ -805,7 +803,7 @@ OBJ.CurOn ldy #S.OBJ.F OBJ.CurOff ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bEdit -* beq .8 + beq .8 ldy #S.OBJ.S lda (ZPObjPtr),y S.OBJ.S.bActive diff --git a/LIB/LIBTUI.S.TLINE.txt b/LIB/LIBTUI.S.TLINE.txt index b5ca7403..f283ad78 100644 --- a/LIB/LIBTUI.S.TLINE.txt +++ b/LIB/LIBTUI.S.TLINE.txt @@ -54,7 +54,7 @@ TLINE.Run ldy #S.OBJ.S cmp #C.BS beq TLINE.RUN.BS - cmp #C.FS + cmp #21 Forward Space beq TLINE.RUN.FS .9 lda #0 diff --git a/LIB/LIBTUI.S.txt b/LIB/LIBTUI.S.txt index c348ee99..1995b15f 100644 --- a/LIB/LIBTUI.S.txt +++ b/LIB/LIBTUI.S.txt @@ -266,7 +266,7 @@ LIB.Destroy ldx ZPObjPtr jsr OBJ.Destroy pla - >SYSCALL FreeMem + >SYSCALL2 FreeMem ply .2 iny @@ -280,7 +280,7 @@ LIB.Destroy ldx ZPObjPtr .3 jsr .7 pla - >SYSCALL FreeMem + >SYSCALL2 FreeMem plx stx ZPObjPtr+1 @@ -336,7 +336,7 @@ hLineBuf .BS 1 LineBuf .BS 2 *-------------------------------------- ESC.In .AS "DABC" -ESC.Out .DA #C.BS,#C.VT,#C.LF,#C.FS +ESC.Out .DA #C.BS,#C.VT,#C.LF,#21 *-------------------------------------- FMT.ESCCSI.R .AZ "%d;%d" *-------------------------------------- diff --git a/ProDOS.FX/ProDOS.S.LDR.txt b/ProDOS.FX/ProDOS.S.LDR.txt index be9d9037..7ca70ea2 100644 --- a/ProDOS.FX/ProDOS.S.LDR.txt +++ b/ProDOS.FX/ProDOS.S.LDR.txt @@ -673,7 +673,7 @@ LDR.BlkDevScan bit RROMBNK2 write protect lc ram. stz LDR.SlotDevType-1,x jsr LDR.CheckDiskID - bcs .8 if no ProDOS device in this slot. + bcs .4 if no ProDOS device in this slot. ldy #$ff lda (idxl),y check last byte of $Cn rom (y = $ff) @@ -686,35 +686,31 @@ LDR.BlkDevScan bit RROMBNK2 write protect lc ram. sta LDR.driveradr+1 sec 2 devices jsr LDR.AddBlkDevs - bra .7 + bra .4 .2 cmp #$FF if = $FF then 13 sector disk II. - beq .8 ignore if 13 sector boot ROM + beq .4 ignore if 13 sector boot ROM ldy #$07 check for a smartport device. lda (idxl),y bne .3 no smartport jsr LDR.AddSPDevs - bra .7 + bra .4 .3 ldy #$FE BLK device... lda (idxl),y get attributes. and #$03 verify it provides read and status calls. cmp #$03 - bne .7 assume it's an off-brand disk + bne .4 assume it's an off-brand disk - lda (idxl),y get back ID byte - lsr - lsr - lsr - lsr - sta devid ->DEV LIST NIBBLE + jsr LDR.SetDevID and #$3 Device count minus 1 inc ldx LDR.SlotIdx sta LDR.SlotDevCnt-1,x + dec LDR.SlotDevType-1,x set as BlockDeb tax iny $CnFF @@ -726,13 +722,10 @@ LDR.BlkDevScan bit RROMBNK2 write protect lc ram. cpx #2 CS if 2 devs or more jsr LDR.AddBlkDevs install 1 or 2 devices from this slot. -.7 - -.8 dec idxl+1 next lower slot. +.4 dec idxl+1 next lower slot. dec LDR.SlotIdx have all slots been checked ? bne .1 *-------------------------------------- -LDR.AddExtraDevs * stz idxl lda #$C7 sta idxl+1 @@ -740,7 +733,7 @@ LDR.AddExtraDevs lda #7 sta LDR.SlotIdx -.1 ldx LDR.SlotIdx +.5 ldx LDR.SlotIdx lda LDR.SlotDevType-1,x beq .8 @@ -748,11 +741,17 @@ LDR.AddExtraDevs cmp #3 bcc .8 - jsr LDR.AddExtraSPDevs + bit LDR.SlotDevType-1,x + bpl .6 type = smartport + + jsr LDR.AddExtraBLKDevs + bra .8 + +.6 jsr LDR.AddExtraSPDevs .8 dec idxl+1 dec LDR.SlotIdx - bne .1 + bne .5 LDR.AddExtraDevs.RTS rts @@ -797,8 +796,9 @@ LDR.AddSPDevs jsr LDR.SetDevID setup the devid byte from attributes jsr LDR.SPStatusCall status of Cocoon : A = device = 2 for SCSI -.2 lda #0 set unit# = 0 - jsr LDR.SPStatusCall + lda #0 set unit# = 0 + +.2 jsr LDR.SPStatusCall lda LDR.SPStatusBuf Device count beq LDR.AddExtraDevs.RTS no devices, so done. @@ -856,19 +856,84 @@ LDR.AddBlkDevs php how many drives (carry). lda LDR.driveradr get high address of device driver. sta DEVPTRS,y device driver table 1. bcc .2 branch if single drive. + sta DEVPTRS+16,y device driver table 2. .2 lda LDR.driveradr+1 sta DEVPTRS+1,y bcc .3 + sta DEVPTRS+17,y .3 LDR.AddBlkDevs.RTS rts *-------------------------------------- +LDR.AddExtraBLKDevs + dec + dec + sta LDR.DevCnt + + jsr LDR.SetDevID set up device attributes + + jsr LDR.FindFreeDevPtr + bcs .9 + +.1 cpy #$10 + bcc .2 must be Drive 1 + +.10 jsr LDR.FindFreeDevPtrNext + bcc .1 + + rts + +.2 lda LDR.DevCnt + dec + beq .4 only one to add + + tya + ora #$10 + tay + + lda DEVPTRS,y device driver table 1 + cmp #nodevice + bne .10 + + lda DEVPTRS+1,y + cmp /nodevice + bne .10 Drive 1 & 2 free + + jsr LDR.AddY2DEVLST Y = index in DEVPTRS + jsr .8 + + tya + and #$F + tay + +.4 jsr LDR.AddY2DEVLST Y = index in DEVPTRS + +.8 phy + + ldy #$ff + + lda (idxl),y BLK entry point + + ply + sta DEVPTRS,y + lda idxl+1 + sta DEVPTRS+1,y + +* clc + +.9 rts +*-------------------------------------- LDR.AddExtraSPDevs - ldy #$FF get smartport address. + jsr LDR.SetDevID set up device attributes + + iny ldy #$fe from SetDevID + +* ldy #$FF + lda (idxl),y clc adc #$03 add 3 for smartport call @@ -876,8 +941,6 @@ LDR.AddExtraSPDevs lda idxl+1 sta LDR.SPVect+2 - jsr LDR.SetDevID set up device attributes - lda #0 jsr LDR.SPStatusCall do a status call on smartport itself @@ -898,34 +961,10 @@ LDR.AddExtraSPDevs lda LDR.SPStatusBuf is this a block device? bpl .2 - jsr LDR.MountSPDevs + jsr LDR.FindFreeDevPtr bcs .8 -.2 inc LDR.SPStatus.U - - dec LDR.DevCnt - bne .1 - -.8 rts -*-------------------------------------- -LDR.MountSPDevs ldx #LDR.DEVPTRS.CNT-1 - -.1 ldy LDR.DEVPTRS.IDX,x - lda DEVPTRS,y device driver table 1 - cmp #nodevice - bne .2 - - lda DEVPTRS+1,y - cmp /nodevice - beq .3 - -.2 dex - bpl .1 - - sec - rts - -.3 jsr LDR.LCBNK1 + jsr LDR.LCBNK1 tya divide index by 2 lsr @@ -942,23 +981,19 @@ LDR.MountSPDevs ldx #LDR.DEVPTRS.CNT-1 bit RROMBNK2 write protect lc ram. - inc DEVCNT - ldx DEVCNT - tya - - asl convert to DSSS0000 - asl - asl - - ora devid include device attributes - sta DEVLST,x in the active device list. + jsr LDR.AddY2DEVLST lda #XDOS.SPREMAP - sta DEVPTRS,y device driver table 1 + sta DEVPTRS,y lda /XDOS.SPREMAP sta DEVPTRS+1,y - clc - rts + +.2 inc LDR.SPStatus.U + + dec LDR.DevCnt + bne .1 + +.8 rts *-------------------------------------- LDR.SPStatusCall sta LDR.SPStatus.U @@ -1008,6 +1043,28 @@ LDR.CheckDiskID ldy #5 bra .8 *-------------------------------------- +LDR.FindFreeDevPtr + ldx #LDR.DEVPTRS.CNT-1 +LDR.FindFreeDevPtrNext + +.1 ldy LDR.DEVPTRS.IDX,x + lda DEVPTRS,y device driver table 1 + cmp #nodevice + bne .2 + + lda DEVPTRS+1,y + cmp /nodevice + beq .8 + +.2 dex + bpl .1 + + sec + rts + +.8 clc + rts +*-------------------------------------- LDR.SetDevID ldy #$FE check attributes byte. lda (idxl),y @@ -1018,6 +1075,19 @@ LDR.SetDevID ldy #$FE check attributes byte. sta devid rts *-------------------------------------- +LDR.AddY2DEVLST inc DEVCNT + ldx DEVCNT + tya + + asl convert to DSSS0000 + asl + asl + + ora devid include device attributes + sta DEVLST,x in the active device list. + + rts +*-------------------------------------- LDR.Scr80Init phx Save LDR.MSG jsr LDR.IsIIc @@ -1322,14 +1392,14 @@ LDR.SPStatus.U .DA #$00 unit number (code for smartport stat) LDR.DEVPTRS.CNT .EQ 14 -LDR.DEVPTRS.IDX .DA #$16 S3D2 +LDR.DEVPTRS.IDX .DA #$16 S3D2 /RAM + .DA #$06 S3D1 .DA #$12 S1D2 .DA #$02 S1D1 .DA #$14 S2D2 .DA #$04 S2D1 .DA #$18 S4D2 .DA #$08 S4D1 - .DA #$06 S3D1 .DA #$1A S5D2 .DA #$0A S5D1 .DA #$1C S6D2 diff --git a/ROOT/asmtest/TESTTUI.S.txt b/ROOT/asmtest/TESTTUI.S.txt index d39db64b..47fe10bc 100644 --- a/ROOT/asmtest/TESTTUI.S.txt +++ b/ROOT/asmtest/TESTTUI.S.txt @@ -68,7 +68,7 @@ CS.INIT >LDYA L.LIBTUI CS.INIT.RTS rts *-------------------------------------- -CS.RUN >LIBCALL hLIBTUI,LIBTUI.Init +CS.RUN >LIBCALL hLIBTUI,LIBTUI.Init bcs CS.RUN.RTS sta hCTX @@ -100,9 +100,14 @@ CS.RUN >LIBCALL hLIBTUI,LIBTUI.Init *-------------------------------------- CS.RUN.LOOP lda hSCRN >LIBCALL hLIBTUI,LIBTUI.Exec - bcs .9 + bcc .10 + + tay + beq CS.RUN.LOOP + + rts - cmp #EV.RESIZE +.10 cmp #EV.RESIZE bne .1 jsr CS.SCRN.Draw diff --git a/SYS/KERNEL.S.DEF.txt b/SYS/KERNEL.S.DEF.txt index 6ab1980e..912bf060 100644 --- a/SYS/KERNEL.S.DEF.txt +++ b/SYS/KERNEL.S.DEF.txt @@ -206,8 +206,8 @@ S.DCB.TTY.bCURON .EQ 9 S.DCB.TTY.bTITLE .EQ 10 S.DCB.TTY.bNORMAL .EQ 11 -S.DCB.TTY.bLINEWRAP .EQ 12 -S.DCB.TTY.bCRLF .EQ 13 +S.DCB.TTY.bDECAWM .EQ 12 +S.DCB.TTY.bLNM .EQ 13 S.DCB.TTY.bG0G1 .EQ 14 S.DCB.TTY.bG0G1ALT .EQ 15 diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index 27c83e1e..47035721 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -133,10 +133,10 @@ K.MKDev jsr SHARED.PullP2P1 ptr2=name,ptr1=fd lda (pFD),y bne .5 - lda /DRV.SmartPort + lda /DRV.SP sta (pFD),y dey - lda #DRV.SmartPort + lda #DRV.SP sta (pFD),y .5 jsr DEV.GetPDrv diff --git a/SYS/KERNEL.S.DRV.txt b/SYS/KERNEL.S.DRV.txt index 5d32df8b..9d239fc4 100644 --- a/SYS/KERNEL.S.DRV.txt +++ b/SYS/KERNEL.S.DRV.txt @@ -7,7 +7,8 @@ NEW *-------------------------------------- DRV.DiskII cld cpx #IOCTL.FORMAT - bcs DRV.RamDrive.9 + bcs DRV.BadCall + >STYA pIOCTL jmp (.1,x) @@ -27,33 +28,35 @@ DRV.DiskII.DIB .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ .DA #0 .DA K.VER *-------------------------------------- -* DRV.RamDrive +* DRV.RAM * X = IOCTL * Y,A = PTR to S.IOCTL *-------------------------------------- -DRV.RamDrive cld +DRV.RAM cld cpx #IOCTL.CONTROL - bcs DRV.RamDrive.9 + bcs DRV.BadCall + >STYA pIOCTL jmp (.1,x) -.1 .DA DRV.RamDrive.S + +.1 .DA DRV.RAM.S .DA DRV.BLK READ .DA DRV.BLK WRITE .DA DRV.BLK FORMAT -DRV.RamDrive.9 jmp A2osX.BadCall + +DRV.BadCall jmp A2osX.BadCall *-------------------------------------- -DRV.RamDrive.S jsr DRV.Blk +DRV.RAM.S jsr DRV.Blk bcs .9 - stx DRV.RamDrive.DIB+S.DIB.SIZE - sty DRV.RamDrive.DIB+S.DIB.SIZE+1 - >LDYAI DRV.RamDrive.DIB + stx DRV.RAM.DIB+S.DIB.SIZE + sty DRV.RAM.DIB+S.DIB.SIZE+1 + >LDYAI DRV.RAM.DIB jmp DRV.STATUS.YA .9 rts *-------------------------------------- -DRV.RamDrive.DIB - .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ +DRV.RAM.DIB .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ .BS 3 .PS "ProDOS /RAM Disk" .DA #S.DIB.T.RAM @@ -66,14 +69,28 @@ DRV.RamDrive.DIB *-------------------------------------- DRV.BlkDev cld cpx #IOCTL.CONTROL - bcs DRV.RamDrive.9 + bcs DRV.BadCall + >STYA pIOCTL jmp (.1,x) + .1 .DA DRV.BlkDev.S .DA DRV.BLK READ .DA DRV.BLK WRITE .DA DRV.BLK FORMAT *-------------------------------------- +DRV.RSP cld + cpx #IOCTL.CONTROL + bcs DRV.BadCall + + >STYA pIOCTL + jmp (.1,x) + +.1 .DA DRV.RSP.S + .DA DRV.BLK READ + .DA DRV.BLK WRITE + .DA DRV.BLK FORMAT +*-------------------------------------- DRV.BlkDev.S jsr DRV.Blk bcs .9 @@ -91,12 +108,31 @@ DRV.BlkDev.DIB .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ .DA #0 .DA K.VER *-------------------------------------- +DRV.RSP.S jsr DRV.Blk + bcs .9 + + stx DRV.RSP.DIB+S.DIB.SIZE + sty DRV.RSP.DIB+S.DIB.SIZE+1 + + >LDYAI DRV.RSP.DIB + jmp DRV.STATUS.YA + +.9 rts +*-------------------------------------- +DRV.RSP.DIB .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ + .BS 3 + .PS "Remapped SP Dev " + .DA #S.DIB.T.PRODOS + .DA #0 + .DA K.VER +*-------------------------------------- * IOCTL to BLK protocol converter * in : pIOCTL *-------------------------------------- DRV.BLK txa lsr sta DRV.BLK.P CMD + ldy #S.FD.DEV.DEVID Drive 1, or 2 lda (pFD),y dec O or 1 @@ -147,7 +183,7 @@ DRV.BLK.P .BS 6 *-------------------------------------- * Smartport Driver *-------------------------------------- -DRV.SmartPort cld +DRV.SP cld >STYA pIOCTL >STYA .3 smartport Params @@ -155,7 +191,7 @@ DRV.SmartPort cld lsr sta .2 tax - lda DRV.SmartPort.Cnt,x + lda DRV.SP.Cnt,x sta (pIOCTL) S.IOCTL.CNT ldy #S.FD.DEV.DEVID @@ -179,8 +215,7 @@ DRV.SmartPort cld jsr GO.A2osX rts -DRV.SmartPort.Cnt - .HS 03030301030101010404 +DRV.SP.Cnt .HS 03030301030101010404 *-------------------------------------- * NULL DEVICE * - OPEN,WRITE,CLOSE always succeed. diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 66f27996..2cd02e3f 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -268,7 +268,7 @@ KConfigLoad >LDYAI MSG.KCREAD lda A2osX.FSID beq .99 - >LDYAI MSG.PRODOSFX + >LDYAI MSG.FX jsr PrintFYA .99 rts @@ -716,7 +716,7 @@ DevMgrInit >LDYAI MSG.DEV lda #A2osX.S.DII bra .7 Go mark slot as USED -.3 bcs .53 > $D0, Some BLK remapped DRV +.3 bcs .53 > $D0, Some SP remapped DRV cmp #$C0 bcs .4 $C0 .. $CF, in slot ROM @@ -755,6 +755,7 @@ DevMgrInit >LDYAI MSG.DEV bmi .80 jmp .1 + .80 clc rts *-------------------------------------- @@ -768,6 +769,9 @@ DevMgr.USR ldx #4 .HS 2C BIT ABS *-------------------------------------- DevMgr.BLK ldx #6 + .HS 2C BIT ABS +*-------------------------------------- +DevMgr.RSP ldx #10 bra DevMgr.AddBDev *-------------------------------------- DevMgr.SP ldy #$ff @@ -777,9 +781,6 @@ DevMgr.SP ldy #$ff sta FD.BDEV+S.FD.DEV.BUSPTR ldx #8 - .HS 2C BIT ABS - -DevMgr.RSP ldx #10 *-------------------------------------- DevMgr.AddBDev >LDYA DRV.BLKDEVX,x >STYA FD.BDEV+S.FD.DEV.DRVPTR @@ -1283,7 +1284,7 @@ MSG.KCREAD .CZ "Reading Kernel Config File..." MSG.KCREAD.OK .CZ "OK\r" MSG.KCREAD.KO .CZ "\rError While Reading Kernel Config File, Using Default.\r" MSG.HZ .CZ "Kernel SYS Timer Set For %d0 hz Machine.\r" -MSG.PRODOSFX .CZ "!!!Running under ProDOS.FX!!! Enabling lowercase mode.\r" +MSG.FX .CZ "!!!Running under ProDOS.FX!!! Enabling lowercase mode.\r" MSG.Init2.OK .CZ "A2osX[Stage2]:Complete." *-------------------------------------- MSG.Init3 .CZ "A2osX[Stage3]:Init *** Press Ctrl-R for entering ROOT Mode ***\r\n" @@ -1299,14 +1300,14 @@ MSG.BLKDEV.RAM .AZ "/RAM Disk" MSG.BLKDEV.DII .AZ "Disk ][" MSG.BLKDEV.USR .AZ "User" MSG.BLKDEV.BLK .AZ "Generic Block" -MSG.BLKDEV.SP .AZ "Smart Port" -MSG.BLKDEV.RSP .AZ "Remapped SP" -DRV.BLKDEVX .DA DRV.RamDrive +MSG.BLKDEV.SP .AZ "SmartPort" +MSG.BLKDEV.RSP .AZ "SmartPort (Remapped)" +DRV.BLKDEVX .DA DRV.RAM .DA DRV.DiskII .DA DRV.BlkDev .DA DRV.BlkDev - .DA DRV.SmartPort - .DA DRV.BlkDev + .DA DRV.SP + .DA DRV.RSP *-------------------------------------- MSG.IRQ .AZ "Interrupt Manager..." MSG.IRQGS .AZ " Apple IIgs VBL IRQ Activated." diff --git a/SYS/KERNEL.S.TERM.txt b/SYS/KERNEL.S.TERM.txt index cade8480..9ddd4030 100644 --- a/SYS/KERNEL.S.TERM.txt +++ b/SYS/KERNEL.S.TERM.txt @@ -23,7 +23,7 @@ TERM.STATUS jsr TERM.GetIOCTLBufCntDCB bra TERM.TOAUX *-------------------------------------- TERM.OPEN -* sta ZPhFD hFD in A for OPEN +* hFD in A for OPEN TERM.CONTROL TERM.CLOSE jsr TERM.GetDCB diff --git a/SYS/KERNEL.S.TERMX.txt b/SYS/KERNEL.S.TERMX.txt index 8cfac6cb..c1539723 100644 --- a/SYS/KERNEL.S.TERMX.txt +++ b/SYS/KERNEL.S.TERMX.txt @@ -1,9 +1,9 @@ NEW AUTO 3,1 *-------------------------------------- -CURSOR.BLINK.SPEED .EQ 2 +CURBLNK.SPEED .EQ 2 *-------------------------------------- - .DUMMY ZPDRV + .DUMMY .OR ZPDRV ZPIOCTL .BS 2 ZPBufPtr .BS 2 @@ -16,9 +16,8 @@ ZPScrBL1 .BS 2 ZPScrBL2 .BS 2 *-------------------------------------- bActive .BS 1 -*ZPhFD .BS 1 -ZPTmpBool .BS 1 +ZPTmpX .BS 1 ZPTmpChar .BS 1 CsiH .BS 1 @@ -44,7 +43,7 @@ TERMX.STATUS tya bne .3 ldy #S.DIB-1 - .HS 2C bit abs + .HS 2C BIT ABS .1 ldy #3 sta CLRWRITEAUX @@ -100,7 +99,7 @@ TERMX.OPEN jsr TERMX.ISOPENED lda (ZPDCBPtr) #S.DCB.TTY.DEVID tax -* lda ZPhFD + lda IO.hFD in ZPTMP sta CLRWRITEAUX @@ -112,7 +111,7 @@ TERMX.OPEN jsr TERMX.ISOPENED ora #S.DIB.S.OPENED ora TERMX.DIB+S.DIB.S sta (ZPDCBPtr),y - jsr RESET + jsr TERMX.RIS *-------------------------------------- TERMX.CONTROL lda (ZPDCBPtr) #S.DCB.TTY.DEVID @@ -173,6 +172,7 @@ TERMX.READ bit bActive is screen active? lda KBD bpl .6 + sta KBDSTROBE and #$7F @@ -181,7 +181,7 @@ TERMX.READ bit bActive is screen active? lda #3 -.10 ldx #3 +.10 ldx #KeyMap.Cnt-1 .2 cmp KeyMap,x beq .3 @@ -193,23 +193,20 @@ TERMX.READ bit bActive is screen active? bne .21 jsr TERMX.COUT - ldy #S.DCB.TTY.bCRLF + ldy #S.DCB.TTY.bLNM lda (ZPDCBPtr),y bpl .7 lda #C.LF -.21 jsr TERMX.COUT no remap....send char.... +.21 jsr TERMX.COUT no remap....send char.... bra .7 and flush -.3 lda KeyMap.Tbl,x - pha - lda #C.ESC - jsr TERMX.COUT - lda #'[' - jsr TERMX.COUT - pla +.3 jsr TERMX.ESCCSI + + lda CsiCodes,x jsr TERMX.COUT + bra .7 .6 ldy #S.DCB.TTY.OUTTAIL @@ -226,9 +223,26 @@ TERMX.READ bit bActive is screen active? inc ZPCnt+1 beq .8 -.71 jsr Char.Out.Get - bcs .8 +.71 ldy #S.DCB.TTY.OUTTAIL + lda (ZPDCBPtr),y + iny OUTHEAD + cmp (ZPDCBPtr),y + beq .8 + tay + lda (ZPDCBPtr),y + pha + tya + inc + cmp #S.DCB.TTY.OUTBUF.MAX + bne .72 + + lda #S.DCB.TTY.OUTBUF + +.72 ldy #S.DCB.TTY.OUTTAIL + sta (ZPDCBPtr),y + pla + ldy .8+1 sta CLRWRITEAUX sta (ZPBufPtr),y @@ -274,7 +288,7 @@ TERMX.WRITE jsr TERMX.CUROFF .3 jmp (.4,x) -.4 .DA TERMX.OUT +.4 .DA TERMX.CIN .DA TERMX.ESC .DA TERMX.CSI .DA TERMX.IAC @@ -284,7 +298,7 @@ TERMX.WRITE jsr TERMX.CUROFF .8 clc rts *-------------------------------------- -TERMX.OUT jsr TERM.GetBufByte +TERMX.CIN jsr TERM.GetBufByte cmp #IAC bne .1 @@ -293,7 +307,7 @@ TERMX.OUT jsr TERM.GetBufByte jmp TERMX.SETM .1 cmp #C.DEL - beq TERMX.OUT.DEL + beq TERMX.DEL cmp #C.SPACE bcs .8 @@ -314,44 +328,41 @@ TERMX.OUT jsr TERM.GetBufByte tax jmp (.4,x) -.4 .DA ENQ - .DA TERMX.OUT.BS - .DA TERMX.OUT.LF - .DA TERMX.OUT.FF - .DA TERMX.OUT.CR - .DA TERMX.OUT.SO - .DA TERMX.OUT.SI - .DA TERMX.OUT.FS - .DA TERMX.OUT.ESC +.4 .DA TERMX.ENQ + .DA TERMX.BS + .DA TERMX.LF + .DA TERMX.FF + .DA TERMX.CR + .DA TERMX.SO + .DA TERMX.SI + .DA TERMX.SETM.ESC *-------------------------------------- .8 jsr SetCharAtCurPos *-------------------------------------- -TERMX.OUT.FS ldy #S.DCB.TTY.CH +TERMX.FS ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y inc sta (ZPDCBPtr),y cmp #80 - bcc TERMX.OUT.BS.8 + bcc TERMX.BS.8 - ldy #S.DCB.TTY.bLINEWRAP + ldy #S.DCB.TTY.bDECAWM lda (ZPDCBPtr),y - bpl TERMX.OUT.BS.8 + bpl TERMX.BS.8 - jsr TERMX.OUT.CR - - jmp TERMX.OUT.LF.1 + jmp TERMX.NEL *-------------------------------------- -TERMX.OUT.BS ldy #S.DCB.TTY.CH +TERMX.BS ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y - beq TERMX.OUT.BS.1 + beq TERMX.BS.1 dec sta (ZPDCBPtr),y -TERMX.OUT.BS.8 clc +TERMX.BS.8 clc rts -TERMX.OUT.BS.1 ldy #S.DCB.TTY.CV +TERMX.BS.1 ldy #S.DCB.TTY.CV lda (ZPDCBPtr),y beq .2 @@ -365,7 +376,7 @@ TERMX.OUT.BS.1 ldy #S.DCB.TTY.CV .2 clc rts *-------------------------------------- -TERMX.OUT.DEL ldy #S.DCB.TTY.CH +TERMX.DEL ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y beq .1 @@ -375,7 +386,7 @@ TERMX.OUT.DEL ldy #S.DCB.TTY.CH .1 ldy #S.DCB.TTY.CV lda (ZPDCBPtr),y - beq TERMX.OUT.BS.8 + beq TERMX.BS.8 dec sta (ZPDCBPtr),y @@ -383,40 +394,37 @@ TERMX.OUT.DEL ldy #S.DCB.TTY.CH ldy #S.DCB.TTY.CH lda #79 sta (ZPDCBPtr),y S.DCB.TTY.CH + .3 lda #C.SPACE jmp SetCharAtCurPos *-------------------------------------- -TERMX.OUT.FF jsr HOME - jmp TERMX.CLRSCR -*-------------------------------------- -TERMX.OUT.CR lda #0 +TERMX.CR lda #0 ldy #S.DCB.TTY.CH sta (ZPDCBPtr),y clc rts *-------------------------------------- -TERMX.OUT.SO sec +TERMX.SO sec .HS 90 BCC *-------------------------------------- -TERMX.OUT.SI clc +TERMX.SI clc ldy #S.DCB.TTY.bG0G1 ror sta (ZPDCBPtr),y clc rts *-------------------------------------- -TERMX.OUT.ESC lda #S.DCB.TTY.M.ESC - bra TERMX.SETM -*-------------------------------------- TERMX.ESC jsr TERM.GetBufByte y = #S.DCB.TTY.M ldx #EscCodes.Cnt-1 + .2 cmp EscCodes,x beq .3 + dex bpl .2 - bra TERMX.SETM0 + bra TERMX.SETM.0 .3 phx jsr .4 @@ -429,16 +437,19 @@ TERMX.ESC jsr TERM.GetBufByte y = #S.DCB.TTY.M tax jmp (.5,x) -.5 .DA SaveCurPos 7 - .DA RestoreCurPos 8 - .DA Scroll.Dn M - .DA Scroll.Up D - .DA RESET c +.5 .DA TERMX.DECSC 7 + .DA TERMX.DECRC 8 + .DA TERMX.IND D + .DA TERMX.NEL E + .DA TERMX.RI M + .DA TERMX.RIS c .DA TERMX.RTS [ .DA TERMX.RTS ( .DA TERMX.RTS ) *-------------------------------------- -TERMX.SETM0 lda #0 +TERMX.SETM.ESC lda #S.DCB.TTY.M.ESC + .HS 2C BIT ABS +TERMX.SETM.0 lda #0 TERMX.SETM ldy #S.DCB.TTY.M sta (ZPDCBPtr),y ldy #S.DCB.TTY.INBUF @@ -458,6 +469,7 @@ TERMX.CSI ldy #S.DCB.TTY.INBUF sta (ZPDCBPtr),y cmp #64 End of Seq ? bcs TERMX.CSI.Exec + cpy #S.DCB.TTY.INBUF.MAX-1 buffer full? bne .8 @@ -523,27 +535,28 @@ TERMX.CSI.Exec stz CsiH tax jmp (.8,x) -.8 .DA Csi.SetM h - .DA Csi.ResetM l - .DA Csi.DispAttr m - .DA Csi.Query n - .DA Csi.Scroll r - .DA Csi.CUU A - .DA Csi.CUD B - .DA Csi.CUF C - .DA Csi.CUB D - .DA Csi.CLRSCR J - .DA Csi.CLRL K - .DA Csi.Home H +.8 .DA TERMX.CUx A + .DA TERMX.CUx B + .DA TERMX.CUx C + .DA TERMX.CUx D + .DA TERMX.CUP H + .DA TERMX.ED J + .DA TERMX.EL K + .DA TERMX.HVP f + .DA TERMX.SM h + .DA TERMX.RM l + .DA TERMX.SGR m + .DA TERMX.DSR n + .DA TERMX.DECSTBM r *-------------------------------------- -* CRLF : ESC [ 20 -* LINEWRAP : ESC [ ? 7 +* LNM : ESC [ 20 +* DECAWM : ESC [ ? 7 * CUR : ESC [ ? 25 *-------------------------------------- -Csi.SetM sec +TERMX.SM sec .HS 90 BCC *-------------------------------------- -Csi.ResetM clc +TERMX.RM clc ldx CsiPCnt beq .99 @@ -556,10 +569,10 @@ Csi.ResetM clc php bne .1 - cmp #20 bCRLF + cmp #20 bLNM bne .98 - ldy #S.DCB.TTY.bCRLF + ldy #S.DCB.TTY.bLNM bra .8 *-------------------------------------- .1 cpx #'?' @@ -568,7 +581,7 @@ Csi.ResetM clc cmp #7 bne .2 - ldy #S.DCB.TTY.bLINEWRAP + ldy #S.DCB.TTY.bDECAWM bra .8 .2 cmp #25 @@ -597,7 +610,7 @@ Csi.ResetM clc .99 clc rts *-------------------------------------- -Csi.DispAttr ldx CsiPCnt +TERMX.SGR ldx CsiPCnt beq .10 ldx #0 @@ -627,7 +640,7 @@ Csi.DispAttr ldx CsiPCnt clc rts *-------------------------------------- -Csi.Query ldx CsiPCnt +TERMX.DSR ldx CsiPCnt beq .8 dex @@ -637,27 +650,25 @@ Csi.Query ldx CsiPCnt cmp #6 bne .8 - lda #C.ESC - jsr TERMX.COUT - lda #'[' - jsr TERMX.COUT + jsr TERMX.ESCCSI ldy #S.DCB.TTY.CV lda (ZPDCBPtr),y inc - jsr DecOut + jsr TERMX.10OUT lda #';' jsr TERMX.COUT ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y inc - jsr DecOut + jsr TERMX.10OUT lda #'R' jsr TERMX.COUT + .8 clc rts *-------------------------------------- -Csi.Scroll lda #0 +TERMX.DECSTBM lda #0 ldx #23 ldy CsiPCnt @@ -667,6 +678,8 @@ Csi.Scroll lda #0 bne .9 ldy CsiP + beq .9 + dey cpy #24 bcs .9 @@ -674,6 +687,8 @@ Csi.Scroll lda #0 tya ldy CsiP+1 + beq .9 + dey cpy #24 bcs .9 @@ -690,74 +705,41 @@ Csi.Scroll lda #0 .9 clc rts *-------------------------------------- -Csi.CUU sec - .HS 90 BCC -Csi.CUD clc - ldy #S.DCB.TTY.CV - bra Csi.CU +TERMX.CUx ldy #1 -Csi.CUF clc - .HS B0 BCS -Csi.CUB sec - ldy #S.DCB.TTY.CH - -Csi.CU lda CsiPCnt - beq .8 + lda CsiPCnt + beq .1 dec bne .8 - lda (ZPDCBPtr),y - bcs .1 + ldy CsiP + beq .8 - adc CsiP - sta (ZPDCBPtr),y +.1 lda .80,x + sta .2+1 + lda .80+1,x + sta .2+2 - clc - rts + phy -.1 sbc CsiP - sta (ZPDCBPtr),y +.2 jsr $FFFF SELF MODIFIED + + ply + dey + bne .1 .8 clc rts + +.80 .DA TERMX.IND + .DA TERMX.RI + .DA TERMX.FS + .DA TERMX.BS *-------------------------------------- -Csi.CLRSCR ldx CsiPCnt - beq .8 - -.1 lda CsiP - beq .8 - - cmp #1 - bne .2 - - jmp TERMX.CLRSCR.DN - -.2 cmp #2 - bne .9 - - jmp TERMX.CLRSCR.UP - -.8 jmp TERMX.CLRSCR - -.9 clc - rts -*-------------------------------------- -Csi.CLRL ldx CsiPCnt - - bne .1 - jmp CLREOL -.1 lda CsiP - cmp #1 - bne .2 - jmp CLRSOL - -.2 cmp #2 - bne Csi.Home.8 - jmp CLRLINE -*-------------------------------------- -Csi.Home lda CsiPCnt - beq HOME +TERMX.CUP +TERMX.HVP lda CsiPCnt + beq TERMX.HOME ldx #1 lda CsiP @@ -774,7 +756,7 @@ Csi.Home lda CsiPCnt ldy #S.DCB.TTY.CV sta (ZPDCBPtr),y dec CsiPCnt - beq Csi.Home.8 + beq .8 ldx #1 lda CsiP+1 @@ -791,16 +773,17 @@ Csi.Home lda CsiPCnt ldy #S.DCB.TTY.CH sta (ZPDCBPtr),y -Csi.Home.8 clc +.8 clc rts *-------------------------------------- -HOME lda #0 +TERMX.HOME lda #0 ldy #S.DCB.TTY.CV sta (ZPDCBPtr),y ldy #S.DCB.TTY.CH sta (ZPDCBPtr),y - clc + +TERMX.HOME.8 clc rts *-------------------------------------- TERMX.G0 ldx #$80 @@ -822,7 +805,7 @@ TERMX.G1 ldx #$40 ora (ZPDCBPtr),y .8 sta (ZPDCBPtr),y - jmp TERMX.SETM0 + jmp TERMX.SETM.0 *-------------------------------------- TERMX.IAC ldy #S.DCB.TTY.INBUF lda (ZPDCBPtr),y @@ -834,7 +817,7 @@ TERMX.IAC ldy #S.DCB.TTY.INBUF sta (ZPDCBPtr),y cpy #S.DCB.TTY.INBUF+1 CMD ? - beq Csi.Home.8 yes, wait for additional bytes + beq TERMX.HOME.8 yes, wait for additional bytes ldy #S.DCB.TTY.INBUF+1 lda (ZPDCBPtr),y get back CMD @@ -844,7 +827,7 @@ TERMX.IAC ldy #S.DCB.TTY.INBUF jsr TERM.GetBufByte cmp #SE - bne Csi.Home.8 wait for ending SE....keep bIACMode + bne TERMX.HOME.8 wait for ending SE....keep bIACMode bra COUT.IAC.SB @@ -959,7 +942,7 @@ RESET.MODE lda #0 sta (ZPDCBPtr),y rts *-------------------------------------- -RESET ldy #S.DCB.TTY.M +TERMX.RIS ldy #S.DCB.TTY.M .1 lda RESET.VALUES-S.DCB.TTY.M,y sta (ZPDCBPtr),y @@ -967,57 +950,90 @@ RESET ldy #S.DCB.TTY.M cpy #S.DCB.TTY.INBUF+1 bne .1 - jmp TERMX.CLRSCR + jmp TERMX.ED0 Erase Screen *-------------------------------------- -ENQ ldx #0 +TERMX.ENQ ldx #0 -.1 lda ENQ.String,x +.1 lda TERMX.ENQ.REP,x jsr TERMX.COUT inx - cpx #ENQ.String.Len + cpx #TERMX.ENQ.REP.L bne .1 .8 clc rts *-------------------------------------- -TERMX.OUT.LF ldy #S.DCB.TTY.bCRLF +TERMX.LF ldy #S.DCB.TTY.bLNM lda (ZPDCBPtr),y - bpl TERMX.OUT.LF.1 + bpl TERMX.IND - jsr TERMX.OUT.CR +TERMX.NEL jsr TERMX.CR -TERMX.OUT.LF.1 ldy #S.DCB.TTY.CV +TERMX.IND ldy #S.DCB.TTY.CV lda (ZPDCBPtr),y ldy #S.DCB.TTY.SCROLLBOT cmp (ZPDCBPtr),y - bcs SCROLL.UP + bcs .1 inc ldy #S.DCB.TTY.CV sta (ZPDCBPtr),y + clc rts + +.1 ldy #S.DCB.TTY.SCROLLTOP + lda (ZPDCBPtr),y + + tax + +.2 jsr TERMX.SETUP.L1X + + inx + jsr TERMX.COPY.XtoL1 + + txa + ldy #S.DCB.TTY.SCROLLBOT + cmp (ZPDCBPtr),y + bne .2 + + bra TERMX.EL2 *-------------------------------------- -CLRSOL ldy #S.DCB.TTY.CH End +TERMX.EL ldx CsiPCnt + beq TERMX.EL0 Erase EOL + + 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 +*-------------------------------------- +TERMX.EL1 ldy #S.DCB.TTY.CH End lda (ZPDCBPtr),y cmp #80 - bcc CLRLINE.1 + bcc TERMX.EL2.1 -CLRLINE lda #80 End +TERMX.EL2 lda #80 End -CLRLINE.1 ldy #0 Start - bra CLR +TERMX.EL2.1 ldy #0 Start + bra TERMX.EL0.1 -CLREOL ldy #S.DCB.TTY.CH +TERMX.EL0 ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y tay Start cpy #80 - bcs CLR.8 + bcs TERMX.EL.8 lda #80 End -CLR sty .1+1 Save Start +TERMX.EL0.1 sty .1+1 Save Start sta .2+1 Save End ldy #S.DCB.TTY.CV @@ -1026,18 +1042,15 @@ CLR sty .1+1 Save Start .1 ldy #$ff SELF MODIFIED .2 cpy #$ff SELF MODIFIED - bcs CLR.8 + bcs TERMX.EL.8 lda #" " jsr SetCharAtYX X unmodified inc .1+1 bra .1 - -CLR.8 clc - rts *-------------------------------------- -SaveCurPos ldy #S.DCB.TTY.CH +TERMX.DECSC ldy #S.DCB.TTY.CH jsr .1 @@ -1048,7 +1061,7 @@ SaveCurPos ldy #S.DCB.TTY.CH sta (ZPDCBPtr),y rts *-------------------------------------- -RestoreCurPos jsr TERMX.CUROFF +TERMX.DECRC jsr TERMX.CUROFF ldy #S.DCB.TTY.CV.SAVE @@ -1061,29 +1074,25 @@ RestoreCurPos jsr TERMX.CUROFF sta (ZPDCBPtr),y rts *-------------------------------------- -SCROLL.UP ldy #S.DCB.TTY.SCROLLTOP +TERMX.RI ldy #S.DCB.TTY.SCROLLTOP lda (ZPDCBPtr),y - tax - -.1 jsr TERMX.SETUP.L1X - - inx - jsr TERMX.COPY.XtoL1 - - txa - ldy #S.DCB.TTY.SCROLLBOT + ldy #S.DCB.TTY.CV cmp (ZPDCBPtr),y - bne .1 + bcs .1 - bra CLRLINE -*-------------------------------------- -SCROLL.DN ldy #S.DCB.TTY.SCROLLBOT + lda (ZPDCBPtr),y + dec + sta (ZPDCBPtr),y + clc + rts + +.1 ldy #S.DCB.TTY.SCROLLBOT lda (ZPDCBPtr),y tax -.1 jsr TERMX.SETUP.L1X +.2 jsr TERMX.SETUP.L1X dex jsr TERMX.COPY.XtoL1 @@ -1091,22 +1100,21 @@ SCROLL.DN ldy #S.DCB.TTY.SCROLLBOT txa ldy #S.DCB.TTY.SCROLLTOP cmp (ZPDCBPtr),y - bne .1 + bne .2 - clc - rts + bra TERMX.EL2 *-------------------------------------- TERMX.CBLNK jsr TERMX.CCheck bcs TERMX.RTS lda DevMgr.Timer - and #CURSOR.BLINK.SPEED + and #CURBLNK.SPEED eor (ZPDCBPtr),y asl beq TERMX.RTS lda (ZPDCBPtr),y - eor #CURSOR.BLINK.SPEED + eor #CURBLNK.SPEED sta (ZPDCBPtr),y asl beq TERMX.CUROFF.1 @@ -1144,7 +1152,7 @@ TERMX.CCheck sec TERMX.RTS rts *-------------------------------------- -DecOut jsr MATH.A2STR10NP +TERMX.10OUT jsr MATH.A2STR10NP ldx #0 @@ -1155,6 +1163,10 @@ DecOut jsr MATH.A2STR10NP jsr TERMX.COUT bra .1 *-------------------------------------- +TERMX.ESCCSI lda #C.ESC + jsr TERMX.COUT + lda #'[' +*-------------------------------------- TERMX.COUT pha save char ldy #S.DCB.TTY.OUTHEAD @@ -1182,64 +1194,39 @@ TERMX.COUT pha save char pla rts *-------------------------------------- -Char.Out.Get ldy #S.DCB.TTY.OUTTAIL - lda (ZPDCBPtr),y - iny OUTHEAD - cmp (ZPDCBPtr),y - beq .9 CS +TERMX.ED ldx CsiPCnt + beq TERMX.ED0 + +.1 lda CsiP + beq TERMX.ED0 - tay - lda (ZPDCBPtr),y - pha - tya - inc - cmp #S.DCB.TTY.OUTBUF.MAX - bne .1 + cmp #1 + beq TERMX.ED1 - lda #S.DCB.TTY.OUTBUF +.2 cmp #2 + beq TERMX.ED2 -.1 ldy #S.DCB.TTY.OUTTAIL - sta (ZPDCBPtr),y - pla clc -.9 rts -*-------------------------------------- -TERMX.SETUP.L1X lda ZPDCBPtr - clc - adc BUF.BL,x - sta ZPBufBL1 - - lda ZPDCBPtr+1 - adc BUF.BH,x - sta ZPBufBL1+1 - - bit bActive - bpl TERMX.SETUP.L1X.8 - -TERMX.SETUP.L1X.SCR - lda SCR.BL,x - sta ZPScrBL1 - lda SCR.BH,x - sta ZPScrBL1+1 -TERMX.SETUP.L1X.8 rts *-------------------------------------- -TERMX.CLRSCR.DN ldy #S.DCB.TTY.CV +TERMX.ED1 ldy #S.DCB.TTY.CV sta (ZPDCBPtr),y tax - bra TERMX.CLRSCR.1 + bra TERMX.ED0.1 -TERMX.CLRSCR.UP ldx #0 +TERMX.ED2 ldx #0 ldy #S.DCB.TTY.CV sta (ZPDCBPtr),y tay - bra TERMX.CLRSCR.2 + bra TERMX.ED0.2 -TERMX.CLRSCR ldx #0 +TERMX.FF jsr TERMX.HOME -TERMX.CLRSCR.1 ldy #24 +TERMX.ED0 ldx #0 -TERMX.CLRSCR.2 sty .1+1 +TERMX.ED0.1 ldy #24 + +TERMX.ED0.2 sty .1+1 .1 cpx #$ff SELF MODIFIED beq .9 @@ -1314,7 +1301,7 @@ TERMX.Title.ON ldy #S.DCB.TTY.bTITLE bne .4 TERMX.RTS2 rts - +*-------------------------------------- TERMX.Title.OFF ldy #S.DCB.TTY.bTITLE lda (ZPDCBPtr),y bpl TERMX.RTS2 @@ -1356,6 +1343,7 @@ TERMX.SCRCPY ldx #23 plx dex bpl .1 + rts .8 ldy #39 @@ -1401,6 +1389,7 @@ TERMX.COPY.XtoL1 sta CLRPAGE2 .6 ldy #39 + .7 lda (ZPScrBL2),y sta (ZPScrBL1),y dey @@ -1419,7 +1408,9 @@ SetCharAtCurPos pha cpy #80 bcs SetCharAtYX.8 *-------------------------------------- -SetCharAtYX cmp #$40 +SetCharAtYX sty ZPTmpX + + cmp #$40 bcc .1 cmp #$60 @@ -1427,9 +1418,7 @@ SetCharAtYX cmp #$40 and #$1F remap UPPERCASE -.1 phy - - ldy #S.DCB.TTY.bNORMAL +.1 ldy #S.DCB.TTY.bNORMAL ora (ZPDCBPtr),y sta ZPTmpChar @@ -1458,18 +1447,20 @@ SetCharAtYX cmp #$40 sta ZPTmpChar .3 jsr TERMX.SETUP.L1X - ply + + ldy ZPTmpX lda ZPTmpChar sta (ZPBufBL1),y bit bActive - bpl SetCharAtYX.8 + bmi SetCharAtY.SCR1 + + rts -SetCharAtY.SCR pha - tya - lsr - tay - pla +SetCharAtY.SCR sty ZPTmpX + +SetCharAtY.SCR1 lsr ZPTmpX + ldy ZPTmpX bcs .2 @@ -1506,17 +1497,38 @@ GetCharAtCurPos ldy #S.DCB.TTY.CV .9 rts *-------------------------------------- -CtrlChars .DA #C.ENQ,#C.BS,#C.LF,#C.FF,#C.CR,#C.SO,#C.SI,#C.FS,#C.ESC +TERMX.SETUP.L1X lda ZPDCBPtr + clc + adc BUF.BL,x + sta ZPBufBL1 + + lda ZPDCBPtr+1 + adc BUF.BH,x + sta ZPBufBL1+1 + + bit bActive + bpl TERMX.SETUP.L1X.8 + +TERMX.SETUP.L1X.SCR + lda SCR.BL,x + sta ZPScrBL1 + lda SCR.BH,x + sta ZPScrBL1+1 +TERMX.SETUP.L1X.8 + rts +*-------------------------------------- +KeyMap .DA #11,#10,#21,#8 esc[A,esc[B,esc[C,esc[D +KeyMap.Cnt .EQ *-KeyMap +*-------------------------------------- +CtrlChars .DA #C.ENQ,#C.BS,#C.LF,#C.FF,#C.CR,#C.SO,#C.SI,#C.ESC CtrlChars.Cnt .EQ *-CtrlChars *-------------------------------------- -EscCodes .AZ "78MDc[()" +EscCodes .AZ "78DEMc[()" EscCodes.Cnt .EQ *-EscCodes -EscModes .DA #0,#0,#0,#0,#0,#S.DCB.TTY.M.CSI,#S.DCB.TTY.M.G0,#S.DCB.TTY.M.G1 -CsiCodes .AS "hlmnrABCDJKH" -CsiCodes.Cnt .EQ *-CsiCodes +EscModes .DA #0,#0,#0,#0,#0,#0,#S.DCB.TTY.M.CSI,#S.DCB.TTY.M.G0,#S.DCB.TTY.M.G1 *-------------------------------------- -KeyMap .HS 080A0B15 Left,Down,Up,Right -KeyMap.Tbl .HS 44424143 esc[D,esc[B,esc[A,esc[C +CsiCodes .AS "ABCDHJKfhlmnr" +CsiCodes.Cnt .EQ *-CsiCodes *-------------------------------------- WILLDO .DA #TN.O.BINARY,#TN.O.SGA,#TN.O.ECHO WILLDO.CNT .EQ *-WILLDO @@ -1529,8 +1541,8 @@ DOWONT .DA #TN.O.ECHO,#TN.O.NEWENV,#TN.O.XDISPLOC DOWONT.CNT .EQ *-DOWONT *-------------------------------------- SB.IS.TTYPE .DA #IAC,#SB,#TN.O.TTYPE,#SB.IS -ENQ.String .AS "vt100" -ENQ.String.Len .EQ *-ENQ.String +TERMX.ENQ.REP .AS "vt100" +TERMX.ENQ.REP.L .EQ *-TERMX.ENQ.REP .DA #IAC,#SE SB.IS.TTYPE.LEN .EQ *-SB.IS.TTYPE SB.IS.NAWS .DA #IAC,#SB,#TN.O.NAWS,#SB.IS @@ -1550,8 +1562,8 @@ RESET.VALUES .DA #0 MODE .DA #0 bTITLE .DA #$80 bNORMAL - .DA #$80 bLINEWRAP - .DA #$80 bCRLF + .DA #$80 bDECAWM + .DA #$80 bLNM .DA #0 bG0G1 .DA #0 bG0G1ALT