From 267d70f474ebe3df1b305ffa61dd7d56224db4b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 29 May 2019 17:21:14 +0200 Subject: [PATCH] Kernel 0.93 --- .Docs/TERM..md | 99 +++++++++++++++++++++++ .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/EDIT.S.BUF.txt | 87 +++++++++----------- BIN/EDIT.S.CTRL.txt | 166 ++++++++++++++------------------------- BIN/EDIT.S.SCRN.txt | 83 +++++++++++--------- BIN/EDIT.S.txt | 24 +++--- SYS/KERNEL.S.TERM.txt | 23 +++--- SYS/KERNEL.S.TERMLC.txt | 2 + 8 files changed, 267 insertions(+), 217 deletions(-) create mode 100644 .Docs/TERM..md diff --git a/.Docs/TERM..md b/.Docs/TERM..md new file mode 100644 index 00000000..89d691a4 --- /dev/null +++ b/.Docs/TERM..md @@ -0,0 +1,99 @@ +| 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[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 +|Esc8 |Restore cursor position and attributes| DECSC +||||| +|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| \ No newline at end of file diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 72aae2f6423531303807c3ef33e5ee5b470d45f0..269226312555d02367681915d9edfd267aaa0996 100644 GIT binary patch delta 42161 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 iw#iTOv-~2z%5U(=z diff --git a/BIN/EDIT.S.BUF.txt b/BIN/EDIT.S.BUF.txt index d248f06e..93c5a109 100644 --- a/BIN/EDIT.S.BUF.txt +++ b/BIN/EDIT.S.BUF.txt @@ -88,30 +88,13 @@ BUF.InsertA sta TmpByte *-------------------------------------- BUF.DelSel jsr BUF.GetSelLen bcs .8 - >STYA SelLen - -.10 jsr BUF.ComputeCOffset - - >LDA.G SelStart - cmp BUF.COffset - iny - lda (pData),y - sbc BUF.COffset+1 - bcs .11 - - >DECW.G FileY - - >STZ.G FileX - bra .10 - -.11 lda BufLen + lda BufLen sec sbc SelLen - pha + tay lda BufLen+1 sbc SelLen+1 - ply iny bne .1 @@ -183,12 +166,12 @@ BUF.DelCharAtCursor BUF.SelToClipboard jsr BUF.GetSelLen bcs .8 - >STYA SelLen >LDA.G hClipBoard beq .1 >SYSCALL FreeMem + >STZ.G hClipBoard .1 >LDYA SelLen >SYSCALL GetMem @@ -214,13 +197,13 @@ BUF.SelToClipboard sta BufPtr+1 lda SelLen - ldy #ClipBoardLen+1 + ldy #ClipBoardLen sta (pData),y eor #$ff tax iny - lda SelLen + lda SelLen+1 sta (pData),y eor #$ff pha @@ -229,9 +212,10 @@ BUF.SelToClipboard .2 inx bne .3 + pla inc - beq .7 + beq .8 pha @@ -244,8 +228,6 @@ BUF.SelToClipboard inc ClipboardPtr+1 bra .2 -.7 jsr BUF.ResetSel - .8 clc .9 rts *-------------------------------------- @@ -458,7 +440,7 @@ BUF.GetNewYA phy >SYSCALL GetMemPtr >STYA BufPtrBackup - + >STZ.G hBuffer pla ply >SYSCALL GetMem @@ -470,63 +452,64 @@ BUF.GetNewYA phy .9 rts *-------------------------------------- -BUF.ResetSel ldy #SelStart +BUF.ResetSel lda #$ff + ldy #SelStart - lda #0 - -.1 sta (pData),y + sta (pData),y iny - cpy #SelEnd+2 - bne .1 + sta (pData),y + iny #SelEnd + + inc + sta (pData),y + iny + sta (pData),y + rts *-------------------------------------- BUF.CheckSelected - ldy #SelStart - lda BUF.COffset + ldy #SelStart cmp (pData),y - iny - lda BUF.COffset+1 + iny sbc (pData),y - bcc .9 + bcc .9 CC:COffset < SelStart iny #SelEnd - - lda BUF.COffset - cmp (pData),y + lda (pData),y + clc + sbc BUF.COffset iny - - lda BUF.COffset+1 - sbc (pData),y - -.9 ror $80 = selected + lda (pData),y + sbc BUF.COffset+1 +* CC:SelEnd < COffset +.9 lda #0 + ror $80 = selected rts *-------------------------------------- -* Out : CC if ok, YA=SelLen -*-------------------------------------- BUF.GetSelLen ldy #SelEnd lda (pData),y sec ldy #SelStart sbc (pData),y + sta SelLen tax ldy #SelEnd+1 lda (pData),y - sec + ldy #SelStart+1 sbc (pData),y + sta SelLen+1 bcc .9 - - phx - ply bne .8 - tax + txa + beq .9 .8 clc diff --git a/BIN/EDIT.S.CTRL.txt b/BIN/EDIT.S.CTRL.txt index 4f935c15..59db890d 100644 --- a/BIN/EDIT.S.CTRL.txt +++ b/BIN/EDIT.S.CTRL.txt @@ -48,7 +48,7 @@ Prompt.Editor cmp #C.DEL tax jmp (J.CTRL,x) -.9 jmp Ctrl.Q +.9 rts *-------------------------------------- Ctrl.DEL jsr BUF.ComputeCOffset @@ -66,6 +66,7 @@ Ctrl.DEL jsr BUF.ComputeCOffset *-------------------------------------- Ctrl.Invalid clc +Ctrl.Invalid.RTS rts *-------------------------------------- Ctrl.A lda #PromptModeHelp @@ -87,7 +88,7 @@ Ctrl.A lda #PromptModeHelp >PUSHBI 2 >LDYA L.MSG.HELPLINE >SYSCALL printf - bcs .9 + bcs Ctrl.Invalid.RTS inc .1+1 @@ -99,10 +100,7 @@ Ctrl.A lda #PromptModeHelp inc ZPPTR1+1 bra .1 -.8 jsr SCRN.UpdateStatusBar - bcs .9 - rts -.9 jmp Ctrl.Q +.8 jmp SCRN.UpdateStatusBar *-------------------------------------- Ctrl.B jsr BUF.ComputeCOffset lda BUF.COffset @@ -111,16 +109,9 @@ Ctrl.B jsr BUF.ComputeCOffset lda BUF.COffset+1 iny sta (pData),y - jsr SCRN.UpdateMain - bcs .9 - rts -.9 jmp Ctrl.Q + jmp SCRN.UpdateMain *-------------------------------------- -Ctrl.C jsr BUF.SelToClipboard - bcs .9 -.8 clc - rts -.9 jmp Ctrl.Q +Ctrl.C jmp BUF.SelToClipboard *-------------------------------------- Ctrl.E jsr BUF.ComputeCOffset lda BUF.COffset @@ -129,29 +120,22 @@ Ctrl.E jsr BUF.ComputeCOffset lda BUF.COffset+1 iny sta (pData),y - jsr SCRN.UpdateMain - bcs .9 - rts -.9 jmp Ctrl.Q + jmp SCRN.UpdateMain *-------------------------------------- Ctrl.F lda #PromptModeFind >STA.G PromptMode - jsr SCRN.UpdateStatusBar - bcs .9 - rts -.9 jmp Ctrl.Q + jmp SCRN.UpdateStatusBar *-------------------------------------- Ctrl.G ldy #FileX lda (pData),y beq .8 lda #0 sta (pData),y - jsr SCRN.UpdateViewPort - bcs .9 + jmp SCRN.UpdateViewPort + .8 clc rts -.9 jmp Ctrl.Q *-------------------------------------- Ctrl.BS ldy #FileX lda (pData),y @@ -189,13 +173,10 @@ Ctrl.BS ldy #FileX sbc #0 sta (pData),y -.3 jsr SCRN.UpdateViewPort - bcs .9 +.3 jmp SCRN.UpdateViewPort .8 clc rts - -.9 jmp Ctrl.Q *-------------------------------------- Ctrl.TAB clc @@ -228,12 +209,10 @@ Ctrl.LF ldy #FileY+1 inc sta (pData),y -.3 jsr SCRN.UpdateViewPort - bcs .9 +.3 jmp SCRN.UpdateViewPort .8 clc rts -.9 jmp Ctrl.Q *-------------------------------------- Ctrl.VT ldy #FileY+1 lda (pData),y @@ -266,11 +245,10 @@ Ctrl.VT ldy #FileY+1 sbc #0 sta (pData),y - jsr SCRN.UpdateViewPort - bcs .9 + jmp SCRN.UpdateViewPort + .8 clc rts -.9 jmp Ctrl.Q *-------------------------------------- Ctrl.L jsr BUF.GetLine bcs .8 @@ -278,11 +256,10 @@ Ctrl.L jsr BUF.GetLine tya Y = line length ldy #FileX sta (pData),y - jsr SCRN.UpdateViewPort - bcs .9 + jmp SCRN.UpdateViewPort + .8 clc rts -.9 jmp Ctrl.Q *-------------------------------------- Ctrl.CR lda #C.CR jsr BUF.InsertA @@ -291,12 +268,9 @@ Ctrl.CR lda #C.CR ldy #FileX lda #0 sta (pData),y - jsr SCRN.UpdateMain - bcs .9 - - clc - rts -.9 jmp Ctrl.Q + jmp SCRN.UpdateMain + +.9 rts *-------------------------------------- Ctrl.N clc @@ -326,10 +300,7 @@ Ctrl.O ldy #FileY+1 ldy #FileX sta (pData),y - jsr SCRN.UpdateViewPort - bcs .9 - rts -.9 jmp Ctrl.Q + jmp SCRN.UpdateViewPort .8 pla jmp Ctrl.T @@ -365,10 +336,7 @@ Ctrl.P ldy #FileY+1 pla sta (pData),y - jsr SCRN.UpdateViewPort - bcs .9 - rts -.9 jmp Ctrl.Q + jmp SCRN.UpdateViewPort .8 pla pla @@ -382,11 +350,7 @@ Ctrl.Q lda #$FF Ctrl.R lda #PromptModeReplace >STA.G PromptMode - jsr SCRN.UpdateStatusBar - bcs .9 - - rts -.9 jmp Ctrl.Q + jmp SCRN.UpdateStatusBar *-------------------------------------- Ctrl.S lda #PromptModeSave >STA.G PromptMode @@ -409,19 +373,12 @@ Ctrl.S lda #PromptModeSave .2 >STA.G PromptBufPtr - jsr SCRN.UpdateStatusBar - bcs .9 - - rts -.9 jmp Ctrl.Q + jmp SCRN.UpdateStatusBar *-------------------------------------- Ctrl.T >STZ.G FileX >STZW.G FileY - jsr SCRN.UpdateViewPort - bcs .9 - rts -.9 jmp Ctrl.Q + jmp SCRN.UpdateViewPort *-------------------------------------- Ctrl.FS jsr BUF.GetLine bcs .8 @@ -461,25 +418,22 @@ Ctrl.FS jsr BUF.GetLine lda #0 sta (pData),y -.3 jsr SCRN.UpdateViewPort - bcs .9 +.3 jmp SCRN.UpdateViewPort .8 clc rts -.9 jmp Ctrl.Q *-------------------------------------- Ctrl.V jsr BUF.InsertClipboard bcs .9 jsr SCRN.UpdateMain bcs .9 - jsr SCRN.UpdateStatusBar - bcs .9 - rts -.9 jmp Ctrl.Q + jmp SCRN.UpdateStatusBar + +.9 rts *-------------------------------------- Ctrl.W jsr BUF.ComputeCOffset Y=line len phy - + lda BUF.LOffset ldy #SelStart sta (pData),y @@ -487,8 +441,17 @@ Ctrl.W jsr BUF.ComputeCOffset Y=line len iny sta (pData),y - pla - sec +1 for CR + ply + clc + lda (BufPtr),y + bne .1 + + tya + beq .8 previoyus line\CR\0 + iny + +.1 tya + adc BUF.LOffset ldy #SelEnd @@ -497,21 +460,22 @@ Ctrl.W jsr BUF.ComputeCOffset Y=line len adc #0 iny sta (pData),y - bra Ctrl.D + bra Ctrl.D + +.8 rts *-------------------------------------- Ctrl.X jsr BUF.SelToClipboard bcs Ctrl.X.RTS Ctrl.D jsr BUF.DelSel - bcs .9 - jsr SCRN.UpdateMain - bcs .9 - jmp SCRN.UpdateStatusBar - bcs .9 - rts + bcs Ctrl.X.RTS -.9 jmp Ctrl.Q - + jsr SCRN.CursorAdjust + jsr SCRN.UpdateMain + bcs Ctrl.X.RTS + + jmp SCRN.UpdateStatusBar + Ctrl.X.RTS rts *-------------------------------------- Ctrl.Y ldy #FileY+1 @@ -545,10 +509,7 @@ Ctrl.Y ldy #FileY+1 tya Y = line length >STA.G FileX - jsr SCRN.UpdateViewPort - bcs .9 - rts -.9 jmp Ctrl.Q + jmp SCRN.UpdateViewPort *-------------------------------------- Ctrl.Z jsr BUF.ComputeCOffset @@ -581,20 +542,16 @@ Prompt.Help >STZ.G PromptMode jsr SCRN.UpdateMain bcs .9 - jsr SCRN.UpdateStatusBar - bcs .9 - rts + jmp SCRN.UpdateStatusBar -.9 jmp Ctrl.Q +.9 rts *-------------------------------------- Prompt.Find cmp #3 bne .1 >STZ.G PromptMode - jsr SCRN.UpdateStatusBar - bcs .9 - rts + jmp SCRN.UpdateStatusBar .1 cmp #13 bne .2 @@ -602,8 +559,7 @@ Prompt.Find cmp #3 .2 clc - rts -.9 jmp Ctrl.Q +.9 rts *-------------------------------------- Prompt.Replace cmp #3 bne .1 @@ -621,8 +577,8 @@ Prompt.Replace cmp #3 clc - rts -.9 jmp Ctrl.Q + +.9 rts *-------------------------------------- Prompt.Save cmp #3 Ctrl-C bne .1 @@ -694,11 +650,9 @@ Prompt.Save cmp #3 Ctrl-C .81 jsr SCRN.UpdateTopBar bcs .9 -.80 jsr SCRN.UpdateStatusBar - bcs .9 - rts - -.9 jmp Ctrl.Q +.80 jmp SCRN.UpdateStatusBar + +.9 rts *-------------------------------------- MAN SAVE USR/SRC/BIN/EDIT.S.CTRL diff --git a/BIN/EDIT.S.SCRN.txt b/BIN/EDIT.S.SCRN.txt index 675cf6b1..38251613 100644 --- a/BIN/EDIT.S.SCRN.txt +++ b/BIN/EDIT.S.SCRN.txt @@ -2,7 +2,7 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -SCRN.Init >LDYAI 256+5+5+1 potentially NORM,INV & \0 +SCRN.Init >LDYAI 510+5+5+4+1 potentially 255*\\ NORM,INV,CEOL & \0 >SYSCALL Getmem bcs .9 >STYA LineBufPtr @@ -17,10 +17,6 @@ SCRN.Init >LDYAI 256+5+5+1 potentially NORM,INV & \0 >SYSCALL printf bcs .9 - lda #12 - >SYSCALL PutChar - bcs .9 - lda #0 ldy #FileX @@ -184,8 +180,12 @@ SCRN.UpdateLineAtALenY .5 lda (BufPtr) jsr SCRN.ToLineBuf + cmp #'\' + bne .51 - inc BufPtr + jsr SCRN.ToLineBuf + +.51 inc BufPtr bne .6 inc BufPtr+1 @@ -200,32 +200,37 @@ SCRN.UpdateLineAtALenY bpl .80 jsr SCRN.ToggleSel -.80 lda #0 - sta (ZPPTR1) +.80 ldy #0 + +.81 lda SEQ.CEOL,y + beq .82 + jsr SCRN.ToLineBuf + iny + bra .81 + +.82 sta (ZPPTR1) >PUSHBI 0 >LDYA LineBufPtr >SYSCALL printf - bcs .9 - rts -.9 jmp Ctrl.Q +.9 rts *-------------------------------------- SCRN.ToggleSel ldy #0 lda bSelected + eor #$ff + sta bSelected + bpl .1 ldy #6 -.1 eor #$ff - sta bSelected - -.2 lda SEQ.NORM,y +.1 lda SEQ.NORM,y beq .8 jsr SCRN.ToLineBuf iny - bra .2 + bra .1 .8 rts *-------------------------------------- @@ -283,8 +288,8 @@ SCRN.UpdateStatusBar bcs .9 jmp SCRN.GotoCurXCurY -.9 jmp Ctrl.Q - +.9 rts +*-------------------------------------- .2 eor #PromptModeHelp beq .3 >PUSHW pData @@ -317,9 +322,19 @@ SCRN.UpdateStatusBarErrA >PUSHBI 1 >LDYA L.MSG.STATUSBAR.E >SYSCALL printf - bcs .9 - rts -.9 jmp Ctrl.Q + rts +*-------------------------------------- +SCRN.CursorAdjust +.1 jsr BUF.ComputeCOffset + bcc .8 + + >DECW.G FileY + + >STZ.G FileX + + bra .1 + +.8 rts *-------------------------------------- SCRN.ClearEOLA pha @@ -394,9 +409,7 @@ GotoXY txa >PUSHBI 2 >LDYA L.MSG.GOTOXY >SYSCALL printf - bcs .9 - rts -.9 jmp Ctrl.Q +GotoXY.RTS rts *-------------------------------------- SCRN.UpdateViewPort lda #$ff @@ -457,8 +470,7 @@ SCRN.UpdateViewPort bit bNotRepaint bpl .3 jsr SCRN.scrollDn ...and move content one line down - bcc .3 - jmp Ctrl.Q + bcs GotoXY.RTS .4 ldy #ScreenY+1 lda (pData),y @@ -521,10 +533,8 @@ SCRN.UpdateViewPort .6 jsr SCRN.UpdateStatusBar bcs .9 - jsr SCRN.GotoCurXCurY - bcs .9 - rts -.9 jmp Ctrl.Q + jmp SCRN.GotoCurXCurY +.9 rts *-------------------------------------- SCRN.scrollUp ldy #CurX lda (pData),y @@ -556,10 +566,9 @@ SCRN.scrollUp ldy #CurX ldy #ViewPortHm1 lda (pData),y - jsr SCRN.UpdateLineAtALenY - bcs .9 - rts -.9 jmp Ctrl.Q + jmp SCRN.UpdateLineAtALenY + +.9 rts *-------------------------------------- SCRN.scrollDn ldy #CurX lda (pData),y @@ -585,10 +594,8 @@ SCRN.scrollDn ldy #CurX bcs .9 lda #0 - jsr SCRN.UpdateLineAtALenY - bcs .9 - rts -.9 jmp Ctrl.Q + jmp SCRN.UpdateLineAtALenY +.9 rts *-------------------------------------- MAN SAVE USR/SRC/BIN/EDIT.S.SCRN diff --git a/BIN/EDIT.S.txt b/BIN/EDIT.S.txt index ff2f387e..35b71c8a 100644 --- a/BIN/EDIT.S.txt +++ b/BIN/EDIT.S.txt @@ -167,15 +167,18 @@ CS.RUN.LOOP >SYSCALL GetChar bcs CS.RUN.RTS I/O error jsr CharIn + bcs .9 >LDA.G bCancel bpl CS.RUN.LOOP + lda #0 + +.9 pha >PUSHBI 0 >LDYA L.SEQ.RESET >SYSCALL printf - - lda #0 + pla sec CS.RUN.RTS rts *-------------------------------------- @@ -199,6 +202,7 @@ CS.QUIT ldy #hLineBuffer .8 lda (pData),y beq .9 >SYSCALL FreeMem + clc .9 rts *-------------------------------------- CharIn tax @@ -400,9 +404,9 @@ LoadFile >PUSHWI 0 Aux type bra .1 .8 sta (BufPtr) - clc -.9 rts + +.9 jmp BUF.ResetSel *-------------------------------------- SaveFile >PUSHWI 0 Aux type >PUSHBI S.FI.T.TXT @@ -446,7 +450,7 @@ SaveFile >PUSHWI 0 Aux type *-------------------------------------- CS.END SEQ.DETECT .AZ "Querying terminal capabilities...\e[999;999H\e[6n" -SEQ.INIT .AZ "\ec\e[7h\e[2;%dr" \e[?6h +SEQ.INIT .AZ "\ec\e[?7l\e[2;%dr" SEQ.RESET .AZ "\ec" SEQ.SCROLLUP .AZ "\e[%d;%dH\eD" SEQ.SCROLLDN .AZ "\e[%d;%dH\eM" @@ -455,11 +459,11 @@ SEQ.INV .AZ "\e[7m" SEQ.CEOL .AZ "\e[K" MSG.TOPBAR .AZ "\e[1;1HA2osX Edit:%s\e[0m" MSG.STATUSBAR .AZ "Press Ctrl-A For Help Length:%5D,Col:%3d,Line:%5D" -MSG.STATUSBAR.H .AZ "Press any key to exit this screen:\e[0m" -MSG.STATUSBAR.F .AZ "Find:%s\e[0m" -MSG.STATUSBAR.R .AZ "Replace:%s\e[0m" -MSG.STATUSBAR.S .AZ "Save:%s\e[0m" -MSG.STATUSBAR.E .AZ "Error:%h\e[0m" +MSG.STATUSBAR.H .AZ "Press any key to exit this screen:" +MSG.STATUSBAR.F .AZ "Find:%s" +MSG.STATUSBAR.R .AZ "Replace:%s" +MSG.STATUSBAR.S .AZ "Save:%s" +MSG.STATUSBAR.E .AZ "Error:%h" MSG.GOTOXY .AZ "\e[%d;%dH" MSG.HELPLINE .AZ "%S\e[K" MSG.HELP >PSTR "All commands: (* = Not yet implemented)" diff --git a/SYS/KERNEL.S.TERM.txt b/SYS/KERNEL.S.TERM.txt index 51b2ac11..b4153803 100644 --- a/SYS/KERNEL.S.TERM.txt +++ b/SYS/KERNEL.S.TERM.txt @@ -359,8 +359,10 @@ DRV.TERM.COUT lda (ZPBufPtr) DRV.TERM.COUT.FS ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y - cmp #79 - bne .1 + inc + sta (ZPDCBPtr),y + cmp #80 + bne DRV.TERM.COUT.FS.8 ldy #S.DCB.TTY.bLINEWRAP lda (ZPDCBPtr),y @@ -372,9 +374,6 @@ DRV.TERM.COUT.FS jmp DRV.TERM.COUT.LF.1 -.1 inc - sta (ZPDCBPtr),y - DRV.TERM.COUT.FS.8 clc rts @@ -1047,7 +1046,7 @@ CLREOL ldy #S.DCB.TTY.CH tay Start ldx #80 End -CLR stx .3+1 Save End +CLR stx .1+1 Save End phy ldy #S.DCB.TTY.CV @@ -1056,17 +1055,19 @@ CLR stx .3+1 Save End ply -.1 phy +.1 cpy #$ff Self Modified + + beq .8 + + phy lda #" " jsr SetCharAtYX X unmodified - ply iny -.3 cpy #$ff Self Modified - bne .1 + bra .1 - clc +.8 clc rts *-------------------------------------- SCROLL.DN ldy #S.DCB.TTY.SCROLLBOT diff --git a/SYS/KERNEL.S.TERMLC.txt b/SYS/KERNEL.S.TERMLC.txt index 688901af..5398e687 100644 --- a/SYS/KERNEL.S.TERMLC.txt +++ b/SYS/KERNEL.S.TERMLC.txt @@ -174,6 +174,8 @@ SetCharAtCurPos pha lda (ZPDCBPtr),y tay pla + cpy #80 + bcs SetCharAtYX.8 *-------------------------------------- SetCharAtYX cmp #$40 bcc .1