From 6ae2016154ddb5708e128e75ee127ad2672e4be9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sun, 29 Nov 2015 23:19:10 +0100 Subject: [PATCH] Added ANSI support in CONSOLE.DRV for EDIT.S.txt --- A2OSX.BOOT.DSK | Bin 143360 -> 143360 bytes A2OSX.SRC.po | Bin 819200 -> 819200 bytes A2osX.STARTUP.txt | 13 +- BIN/EDIT.S.txt | 68 ++++- DRV/CONSOLE.DRV.S.txt | 430 +++++++++++++++++++++++------- DRV/DHGR.DRV.S.txt | 151 ++++++----- LIB/LIBGFX.S.txt | 2 + LIB/LIBSTR.S.txt | 63 +++-- SBIN/{GUI.S.txt => DESKTOP.S.txt} | 83 +++--- SBIN/INSDRV.S.txt | 8 - SBIN/SHELL.S.txt | 1 - SYS/KERNEL.S.CIO.txt | 87 ++++-- 12 files changed, 595 insertions(+), 311 deletions(-) rename SBIN/{GUI.S.txt => DESKTOP.S.txt} (81%) diff --git a/A2OSX.BOOT.DSK b/A2OSX.BOOT.DSK index 8a6693a7b1c7c57e5e89348420dc2e52e4a04649..a88e43098038483429083f411925ccdac660c86e 100644 GIT binary patch delta 7147 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 Y4t&LduQ>1(2fpIK|Kb2bCk5L71NHJcrT_o{ delta 25364 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 h!!r266#QTbf3SoSYSCALL SYS.PStrCpyA bra .3 .10 ldy #S.PS.hARGS @@ -72,7 +84,7 @@ CS.INIT lda #0 bcs .9 bra .8 -.7 >PUSHWI 16 +.7 >PUSHWI 2048 >PUSHBI 0 >SYSCALL SYS.GetMem bcs .9 @@ -96,8 +108,7 @@ CS.INIT lda #0 ldy #bInsert sta (pData),y - lda #12 - jsr COUT + jsr InitScreen lda (pPs) ora #S.PS.F.EVENT Now accept events @@ -151,20 +162,51 @@ CS.QUIT ldy #hBuffer lda (pData),y >SYSCALL SYS.FreeMemA + ldy #hFileName + lda (pData),y + beq .8 + >SYSCALL SYS.FreeMemA +.8 clc + rts +*-------------------------------------- +InitScreen lda #0 + ldy #cPos + sta (pData),y + ldy #rPos + sta (pData),y + + lda #12 + >SYSCALL SYS.CoutA + bcs .9 + jsr UpdateTopBar + bcs .9 + clc - rts +.9 rts *-------------------------------------- -CROUT lda #13 -*-------------------------------------- -COUT phx - phy - ldx #DEVMGR.COUT - jsr pDevJmp - ply - plx - rts +UpdateTopBar ldy #hFileName + lda (pData),y + beq .1 + >SYSCALL SYS.GetMemPtrA + bra .2 + +.1 >LDYA L.MSG.NEWFILE + +.2 >PUSHYA + + >LDYA L.MSG.TOPBAR + >SYSCALL SYS.PSTRoutYA + bcs .9 + + + clc +.9 rts *-------------------------------------- CS.END +SEQ.INV >PSTRING "\e[7m" +SEQ.NORM >PSTRING "\e[0m" +MSG.TOPBAR >PSTRING "\e[H\e[7mA2osX Edit:%S\e[K\e[0m" +MSG.NEWFILE >PSTRING "(new file)" *-------------------------------------- .DUMMY .OR 0 diff --git a/DRV/CONSOLE.DRV.S.txt b/DRV/CONSOLE.DRV.S.txt index 346df03a..0c372738 100644 --- a/DRV/CONSOLE.DRV.S.txt +++ b/DRV/CONSOLE.DRV.S.txt @@ -13,9 +13,11 @@ AUTO 6 .INB INC/IO.I *-------------------------------------- CURSOR.BLINK.SPEED .EQ 2 +ESCSEQ.MAXLEN .EQ 16 *-------------------------------------- -ZPBASL1 .EQ ZPDRV -ZPBASL2 .EQ ZPDRV+2 +ZPBaseL1 .EQ ZPDRV +ZPBaseL2 .EQ ZPDRV+2 +ZPTmpByte .EQ ZPDRV+4 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -64,11 +66,18 @@ DRV.CS.START .DA OPEN .DA GETINFO .DA IRQ L.DEVINFO .DA DEVINFO - .DA 0 end or relocation +J.EscSeq .DA Esc.DispAttr m + .DA Esc.Scroll r + .DA Esc.EraseLine K + .DA Esc.Home H + .DA 0 end of relocation *-------------------------------------- OPEN stz CURON - lda #$80 - sta INVFLG + stz bEscMode + stz bEscModeCSI + + jsr RESET + jsr RESETATTR jsr HOME lda #A2osX.SCREENS.C @@ -95,7 +104,52 @@ GETEVENT lda A2osX.TIMER16 sec rts *-------------------------------------- -COUT jsr COUT1 +COUT bit bEscMode + bpl .1 + jmp EscMode + +.1 pha + jsr CUROFF + pla + cmp #32 + bcc COUT.CTRL + + ora INVFLG + ldx CH + ldy CV + jsr SetCharAtXY + bra FSOUT + +COUT.CTRL cmp #8 + bne .2 + ldx CH + beq .10 + dec CH + bra .12 + +.10 ldy CV + bne .11 + clc + rts + +.11 lda #79 + sta CH + dec CV + +.12 lda #$20 + ora INVFLG + ldx CH + ldy CV + jmp SetCharAtXY + +.2 cmp #12 + beq HOME + +.3 cmp #13 + beq CROUT + + cmp #27 ESC + dec bEscMode clc rts *-------------------------------------- @@ -112,52 +166,22 @@ IRQ clc *-------------------------------------- * PRIVATE *-------------------------------------- -COUT1 pha - jsr CUROFF - pla - cmp #32 - bcs .80 regular char - - cmp #8 - bne .2 - ldx CH - beq .10 - dec CH - bra .12 - -.10 ldy CV - bne .11 +RESET lda #0 + sta SCROLLTOP + lda #23 + sta SCROLLBOT rts - -.11 lda #79 - sta CH - dec CV - -.12 lda #$20 - ora INVFLG - ldx CH - ldy CV - jsr SetCharAtXY +*-------------------------------------- +RESETATTR lda #$80 + sta INVFLG rts - -.2 cmp #12 - bne .3 - jmp HOME - -.3 cmp #13 - beq CROUT - - rts - -.80 ora INVFLG - ldx CH - ldy CV - jsr SetCharAtXY +*-------------------------------------- FSOUT ldx CH cpx #79 beq CROUT1 inc CH - rts + clc + rts *-------------------------------------- CROUT jsr CLREOL *-------------------------------------- @@ -166,51 +190,7 @@ CROUT1 stz CH cpy #23 beq SCROLL.UP inc CV - rts -*-------------------------------------- -SCROLL.UP ldx #0 - -.1 lda BASEL,x - sta ZPBASL1 - lda BASEH,x - sta ZPBASL1+1 - inx - lda BASEL,x - sta ZPBASL2 - lda BASEH,x - sta ZPBASL2+1 - - ldy #39 - sta SETWRITEAUX - sta SETREADAUX - -.2 lda (ZPBASL2),y - sta (ZPBASL1),y - dey - bpl .2 - - ldy #39 - sta CLRWRITEAUX - sta CLRREADAUX - -.3 lda (ZPBASL2),y - sta (ZPBASL1),y - dey - bpl .3 - - cpx #23 - bne .1 -*-------------------------------------- -CLREOL ldx CH -.1 phx - ldy CV - lda #$20 - ora INVFLG - jsr SetCharAtXY - plx - inx - cpx #80 - bne .1 + clc rts *-------------------------------------- HOME stz CH @@ -219,9 +199,9 @@ HOME stz CH ldx #23 .1 lda BASEL,x - sta ZPBASL1 + sta ZPBaseL1 lda BASEH,x - sta ZPBASL1+1 + sta ZPBaseL1+1 lda #' ' ora INVFLG @@ -230,7 +210,7 @@ HOME stz CH sta SETREADAUX ldy #39 -.2 sta (ZPBASL1),y +.2 sta (ZPBaseL1),y dey bpl .2 @@ -238,13 +218,71 @@ HOME stz CH sta CLRREADAUX ldy #39 -.3 sta (ZPBASL1),y +.3 sta (ZPBaseL1),y dey bpl .3 dex bpl .1 + clc + rts +*-------------------------------------- +SCROLL.UP ldx SCROLLTOP + +.1 lda BASEL,x + sta ZPBaseL1 + lda BASEH,x + sta ZPBaseL1+1 + inx + lda BASEL,x + sta ZPBaseL2 + lda BASEH,x + sta ZPBaseL2+1 + + ldy #39 + sta SETWRITEAUX + sta SETREADAUX + +.2 lda (ZPBaseL2),y + sta (ZPBaseL1),y + dey + bpl .2 + + ldy #39 + sta CLRWRITEAUX + sta CLRREADAUX + +.3 lda (ZPBaseL2),y + sta (ZPBaseL1),y + dey + bpl .3 + + cpx SCROLLBOT + bne .1 +*-------------------------------------- +CLREOL ldx CH + ldy #80 + bra CLR + +CLRLINE ldx #0 + ldy #80 + bra CLR + +CLRSOL ldx #0 + ldy CH + +CLR sty ZPTmpByte +.1 phx + lda #$20 + ora INVFLG + ldy CV + jsr SetCharAtXY + plx + inx + cpx ZPTmpByte + bne .1 + clc rts *-------------------------------------- CUROFF lda CURON @@ -264,9 +302,10 @@ CURBLNK1 lda CURON ldy CV jsr GetCharAtXY sta CURCHAR + and #$80 ldx CH ldy CV - lda #$20 + eor #" " jsr SetCharAtXY bra CUREXIT @@ -280,7 +319,13 @@ CUREXIT lda CURON sta CURON CUREXIT.RTS rts *-------------------------------------- -SetCharAtXY pha +SetCharAtXY cmp #$40 + bcc .10 + cmp #$5F + bcs .10 + and #$3F + +.10 pha txa lsr @@ -289,12 +334,12 @@ SetCharAtXY pha .1 clc adc BASEL,y - sta ZPBASL1 + sta ZPBaseL1 lda BASEH,y - sta ZPBASL1+1 + sta ZPBaseL1+1 pla - sta (ZPBASL1) + sta (ZPBaseL1) sta CLRWRITEAUX rts *-------------------------------------- @@ -306,22 +351,201 @@ GetCharAtXY txa .1 clc adc BASEL,y - sta ZPBASL1 + sta ZPBaseL1 lda BASEH,y - sta ZPBASL1+1 + sta ZPBaseL1+1 - lda (ZPBASL1) + lda (ZPBaseL1) sta CLRREADAUX rts *-------------------------------------- +EscMode bit bEscModeCSI + bmi EscModeCSI + cmp #'[' + bne .1 + + dec bEscModeCSI + stz EscSeq + clc + rts + +.1 cmp #'7' save cup & attr + + cmp #'8' restore cup & attr + + stz bEscMode + clc + rts + +EscModeCSI inc EscSeq + ldx EscSeq + sta EscSeq,x + cmp #64 End of Seq ? + bcs ExecEscSeq + cpx #ESCSEQ.MAXLEN too long? + bne .1 + stz bEscModeCSI + stz bEscMode +.1 clc + rts +*-------------------------------------- +ExecEscSeq stz EscSeqParamCnt + stz EscSeqInNum + ldx #0 EscSeq Ptr + ldy #0 EsqSeqParam Ptr + +.1 inx + lda EscSeq,x + jsr IsDigit + bcs .2 + + dec EscSeqInNum + and #$0F + pha + lda EscSeqParam,y param=param*10 + asl + asl + clc + adc EscSeqParam,y + sta EscSeqParam,y + pla + clc + adc EscSeqParam,y + sta EscSeqParam,y + bra .1 + +.2 bit EscSeqInNum + bpl .3 + + stz EscSeqInNum + iny + +.3 lda EscSeq,x + cmp #';' + beq .1 + + sty EscSeqParamCnt + stz bEscModeCSI + stz bEscMode + + ldy #0 + ldx #0 + +.4 iny + cmp EscSeqCmds,y + beq .5 + inx + inx + cpy EscSeqCmds + bne .4 + clc + rts + +.5 jmp (J.EscSeq,x) +*-------------------------------------- +IsDigit cmp #'0' + bcc .9 + cmp #'9'+1 + rts cc if ok, cs if not +.9 sec + rts +*-------------------------------------- +Esc.DispAttr ldx EscSeqParamCnt + beq .8 + +.1 lda EscSeqParam-1,x + bne .2 + jsr RESETATTR + bra .7 + +.2 cmp #7 + bne .8 + stz INVFLG + +.7 dex + bne .1 + +.8 clc + rts +*-------------------------------------- +Esc.Scroll ldx EscSeqParamCnt + bne .1 + + lda #0 + ldy #23 + bra .8 + +.1 cpx #2 + bne .9 + + lda EscSeqParam + dec + ldy EscSeqParam+1 + dey + +.8 sta SCROLLTOP + sty SCROLLBOT +.9 clc + rts +*-------------------------------------- +Esc.EraseLine ldx EscSeqParamCnt + + bne .1 + jmp CLREOL + +.1 lda EscSeqParam + cmp #1 + bne .2 + jmp CLRSOL + +.2 cmp #2 + bne .9 + jmp CLRLINE + +.9 clc + rts +*-------------------------------------- +Esc.Home ldx EscSeqParamCnt + bne .1 + stz CH + stz CV + clc + rts + +.1 lda EscSeqParam + dec + bmi .9 + cmp #80 + bcs .9 + sta CH + + lda EscSeqParam+1 + dec + bmi .9 + cmp #24 + bcs .9 + sta CV + +.9 clc + rts +*-------------------------------------- DRV.CS.END BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0 BASEH .HS 04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07 CH .BS 1 CV .BS 1 INVFLG .BS 1 +SCROLLTOP .BS 1 +SCROLLBOT .BS 1 CURON .BS 1 CURCHAR .BS 1 +bEscMode .BS 1 +bEscModeCSI .BS 1 +EscSeq .BS ESCSEQ.MAXLEN+1 +EscSeqParamCnt .BS 1 +EscSeqParam .BS 4 +EscSeqInNum .BS 1 +EscSeqCmds >PSTRING "mrKH" DEVINFO .DA #S.DEVINFO.TYPE.CHAR .DA #80 .DA #24 diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index 45ac8c87..e4f3318c 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -83,8 +83,8 @@ OPEN lda #A2osX.SCREENS.G lda BASEH,x sta ZPBASE+1 - lda #$55 -* lda #$00 +* lda #$55 + lda #$00 ldy #39 sta SETWRITEAUX @@ -92,8 +92,8 @@ OPEN lda #A2osX.SCREENS.G dey bpl .82 - lda #$2A -* lda #$00 +* lda #$2A + lda #$00 ldy #39 sta CLRWRITEAUX @@ -138,7 +138,9 @@ GETINFO >LDYA L.DEVINFO * PULLB = Y * PULLB = Color (if not xor) *-------------------------------------- -SETPIXEL >PULLA Pull Mode +SETPIXEL sta SET80STORE + + >PULLA Pull Mode and #$FF bpl SETPIXEL.1 @@ -161,8 +163,8 @@ SETPIXEL.XOR >PULLYA Y=X.LO,A=X.HI .3 lsr tay bcs .4 odd=main ram - sta SETWRITEAUX - sta SETREADAUX + sta SETPAGE2 + .4 >PULLA Pull Y tax lda BASEL,x setup line Base Ptr @@ -174,17 +176,18 @@ SETPIXEL.XOR >PULLYA Y=X.LO,A=X.HI eor Mono.Masks,x sta (ZPBASE),y - sta CLRWRITEAUX - sta CLRREADAUX + sta CLR80STORE rts *-------------------------------------- SETPIXEL.1 lsr bcc SETPIXEL.COLOR + >PULLW CX + >PULLB CY - >PULLYA Y=X.LO,A=X.HI - lsr if 256 =< x < 511 + ldy CX + lsr CX+1 if 256 =< x < 511 bcs .1 - lsr + lsr CX+1 bcs .2 if 512 < x lda DIV7.0,y ldx MOD7.0,y @@ -198,82 +201,72 @@ SETPIXEL.1 lsr ldx MOD7.512,y .3 lsr - tay - bcs .4 odd=main ram - sta SETWRITEAUX - sta SETREADAUX -.4 phx - >PULLA Pull Y - tax - lda BASEL,x setup line Base Ptr + bcc .4 odd=main ram + sta CLRPAGE2 + clc + bra .41 +.4 sta SETPAGE2 + +.41 ldy CY + adc BASEL,y setup line Base Ptr sta ZPBASE - lda BASEH,x + lda BASEH,y sta ZPBASE+1 - plx >PULLA Pull Color lsr bcs .6 set white pixel - lda (ZPBASE),y + lda (ZPBASE) and Mono.NMasks,x includes And $7F for mono - sta (ZPBASE),y - sta CLRWRITEAUX - sta CLRREADAUX + sta (ZPBASE) + sta CLR80STORE rts -.6 lda (ZPBASE),y +.6 lda (ZPBASE) and #$7F switch back this byte to mono ora Mono.Masks,x - sta (ZPBASE),y - sta CLRWRITEAUX - sta CLRREADAUX + sta (ZPBASE) + sta CLR80STORE rts *-------------------------------------- -SETPIXEL.COLOR >PULLA Get X.LO... - pha - >PULLB GBYTE Get X.HI in temp location - pla - lsr GBYTE divide by 4 (range 0->139) +SETPIXEL.COLOR >PULLW CX Get X.LO... + >PULLB CY + + lda CX + lsr CX+1 divide by 4 ror - lsr GBYTE + lsr CX+1 ror - tay - - >PULLA Pull Y - tax - lda BASEL,x setup line Base Ptr - sta ZPBASE + tay Y=CX/4 (range 0->139) + lda DIV7.0,y A=CX/4/7 (range 0->19) + + asl times 2 (range 0->38) + + ldx CY + adc BASEL,x setup line Base Ptr (cc by asl) + sta ZPBASE ZPBASE now point to first of... lda BASEH,x - sta ZPBASE+1 - - lda DIV7.0,y + sta ZPBASE+1 ...the 4 columns - asl Carry Cleared, by ASL - adc ZPBASE ZPBASE now point to first of the 4 columns - sta ZPBASE - - - ldx MOD7.0,y - - txa get MOD - asl times 4 to compute index in color tables + lda MOD7.0,y get MOD + + asl times 4 to compute index in MASK tables asl tax set in X for Masks,NMasks >PULLA get COLOR - asl + asl times 4 to compute index in PIXELS table asl tay - - lda Color.Masks,x + + lda Color.Masks,x bits in 1st byte to light? beq .1 and Color.Pixels,y apply color sta GBYTE - sta SETWRITEAUX - sta SETREADAUX + sta SETPAGE2 lda (ZPBASE) and Color.NMasks,x reset existing pixel, @@ -288,8 +281,7 @@ SETPIXEL.COLOR >PULLA Get X.LO... and Color.Pixels,y apply color sta GBYTE - sta CLRWRITEAUX - sta CLRREADAUX + sta CLRPAGE2 lda (ZPBASE) and Color.NMasks,x reset existing pixel, @@ -305,8 +297,7 @@ SETPIXEL.COLOR >PULLA Get X.LO... and Color.Pixels,y apply color sta GBYTE - sta SETWRITEAUX - sta SETREADAUX + sta SETPAGE2 lda (ZPBASE) and Color.NMasks,x reset existing pixel, @@ -321,27 +312,37 @@ SETPIXEL.COLOR >PULLA Get X.LO... and Color.Pixels,y apply color sta GBYTE - sta SETWRITEAUX - sta SETREADAUX + sta CLRPAGE2 lda (ZPBASE) and Color.NMasks,x reset existing pixel, ora GBYTE sta (ZPBASE) -.8 sta CLRWRITEAUX - sta CLRREADAUX +.8 sta CLR80STORE rts *-------------------------------------- -GETPIXEL +GETPIXEL rts *-------------------------------------- -HLINE +HLINE rts *-------------------------------------- -VLINE +VLINE rts *-------------------------------------- -FILLREC +FILLREC rts *-------------------------------------- -* params : X,Y,W,H +* +* 0 : hStockObject +* 1 : Operation +* Replace + Combine (Ora) + CombineEx (And with Src Mask,Ora with Src BM) +* 2 : SrcX +* 4 : SrcY +* 6 : DestX +* 8 : DestY +* 12 : Width +* 14 : Height +* *-------------------------------------- BITBLT rts @@ -365,6 +366,7 @@ Mono.Masks .DA #%00000001 .DA #%01000000 *-------------------------------------- * bits to "and" to reset color of pixel (0 means nothing to do) +* 4 bytes * 7 mods *-------------------------------------- * c1110000 c3322221 c5444433 c6666555 Color.NMasks .DA #%01110000,#%00000000,#%00000000,#%00000000 @@ -392,6 +394,7 @@ Color.Masks .DA #%10001111,#%00000000,#%00000000,#%00000000 *-------------------------------------- * c1110000 c3322221 c5444433 c6666555 Color.Pixels .DA #%00000000,#%00000000,#%00000000,#%00000000 black (color bit disable) + .DA #%01111111,#%01111111,#%01111111,#%01111111 white (color bit disable) .DA #%10010001,#%10100010,#%11000100,#%10001000 dark blue .DA #%10100010,#%11000100,#%10001000,#%10010001 dark green .DA #%10110011,#%11100110,#%11001100,#%10011001 medium blue @@ -406,7 +409,6 @@ Color.Pixels .DA #%00000000,#%00000000,#%00000000,#%00000000 black (color bit di .DA #%11001100,#%10011001,#%10110011,#%11100110 orange .DA #%11011101,#%10111011,#%11110111,#%11101110 pink .DA #%11101110,#%11011101,#%10111011,#%11110111 yellow - .DA #%01111111,#%01111111,#%01111111,#%01111111 white (color bit disable) *-------------------------------------- DIV7.0 .HS 0000000000000001010101010101 .HS 0202020202020203030303030303 @@ -544,6 +546,9 @@ BASEH .HS 20.24.28.2C.30.34.38.3C .HS 23.27.2B.2F.33.37.3B.3F .HS 23.27.2B.2F.33.37.3B.3F *-------------------------------------- +CX .BS 2 +CY .BS 1 +COL .BS 1 GBYTE .BS 1 *-------------------------------------- DEVINFO .DA #S.DEVINFO.TYPE.GFX type of DEVINFO STRUCT diff --git a/LIB/LIBGFX.S.txt b/LIB/LIBGFX.S.txt index 1b9ed133..41aee9ed 100644 --- a/LIB/LIBGFX.S.txt +++ b/LIB/LIBGFX.S.txt @@ -28,6 +28,8 @@ CS.START cld *-------------------------------------- .1 .DA LIB.LOAD .DA LIB.UNLOAD +*-------------------------------------- + .DA 0 *-------------------------------------- LIB.LOAD LIB.UNLOAD clc diff --git a/LIB/LIBSTR.S.txt b/LIB/LIBSTR.S.txt index 91d65390..1b31d86f 100644 --- a/LIB/LIBSTR.S.txt +++ b/LIB/LIBSTR.S.txt @@ -51,7 +51,7 @@ PRINTFJMP1 .DA PRINTFA .DA PRINTFI,PRINTFII .DA PRINTFSC,PRINTFSP .DA PRINTFT,PRINTFTT -PRINTFJMP2 .DA PRINTFCR,PRINTFBKSLH,PRINTFPERCENT +PRINTFJMP2 .DA PRINTFESC,PRINTFCR,PRINTFBKSLH,PRINTFPERCENT *-------------------------------------- .DA 0 *-------------------------------------- @@ -68,17 +68,19 @@ LIB.UNLOAD clc * %d pull 1 byte to print unsigned DEC * %D pull 2 bytes to print unsigned DEC * %L pull 4 bytes to print unsigned DEC -* %e pull 1 byte to print low Nibble HEX -* %E pull 1 byte to print high Nibble HEX +* %n pull 1 byte to print low Nibble HEX +* %N pull 1 byte to print high Nibble HEX * %h pull 1 byte to print HEX * %H pull 2 bytes to print HEX * %i pull 1 byte to print signed DEC * %I pull 2 bytes to print signed DEC * %s pull 2 bytes ptr to C-Style String * %S pull 2 bytes ptr to P-Style String +* \e print 'ESC' ($1B,27) * \n print CR=13 * \\ print \ * \% print % + * padding : * %d '9' '12' * %2d ' 9' '12' @@ -90,10 +92,9 @@ PRINTF >PULLW ZPTmpPtr1 ldy #0 PRINTFCOUT lda (ZPTmpPtr1),y beq .1 - ora #$80 - cmp #"%" + cmp #'%' beq PRINTFESC1 - cmp #"\" + cmp #'\' beq PRINTFESC2 jsr COUT iny @@ -105,21 +106,20 @@ PRINTFEXIT ply rts *-------------------------------------- PRINTFESC1 stz PADLEN - lda #" " + lda #' ' sta PADCHAR .1 ldx #PRINTFTBL1.END-PRINTFTBL1-1 iny lda (ZPTmpPtr1),y beq .9 - ora #$80 .2 cmp PRINTFTBL1,x do we have a %x command? beq .8 yes, jmp to it! dex bpl .2 no valid letter... - cmp #"0" ...a 0...mmm... padding char!! + cmp #'0' ...a 0...mmm... padding char!! beq .4 bcc .9 - cmp #"9" + cmp #'9' bcs .9 .3 and #$0F we have a digit pha save it... @@ -139,7 +139,7 @@ PRINTFESC1 stz PADLEN bra .5 .4 lda PADLEN do we already had met digits to build PADLEN ? bne .3 yes, continue to build PADLEN - lda #"0" + lda #'0' sta PADCHAR no, this is the first 0, so make it PADCHAR .5 bra .1 .8 phy @@ -153,7 +153,6 @@ PRINTFESC2 ldx #PRINTFTBL2.END-PRINTFTBL2-1 iny lda (ZPTmpPtr1),y beq .9 - ora #$80 .2 cmp PRINTFTBL2,x beq .3 dex @@ -170,7 +169,7 @@ PRINTFA >PULLA ldx #0 .1 asl pha - lda #"-" + lda #'-' bcc .2 lda PRINTF.ATTRIB,x .2 jsr COUT @@ -254,12 +253,16 @@ PRINTFT jsr PRINTTIME jmp PRINTFEXIT PRINTFTT jsr PRINTDATE jmp PRINTFEXIT -PRINTFCR jsr CROUT - jmp PRINTFEXIT -PRINTFBKSLH lda #"\" +*-------------------------------------- +PRINTFESC lda #$1B ESC jsr COUT jmp PRINTFEXIT -PRINTFPERCENT lda #"%" +PRINTFCR jsr CROUT + jmp PRINTFEXIT +PRINTFBKSLH lda #'\' + jsr COUT + jmp PRINTFEXIT +PRINTFPERCENT lda #'%' jsr COUT jmp PRINTFEXIT *-------------------------------------- @@ -267,7 +270,6 @@ PRINTC >PULLW ZPTmpPtr2 ldy #0 .1 lda (ZPTmpPtr2),y beq .8 - ora #$80 jsr COUT iny bne .1 @@ -280,7 +282,6 @@ PRINTP >PULLW ZPTmpPtr2 beq .8 .1 iny lda (ZPTmpPtr2),y - ora #$80 jsr COUT dex bne .1 @@ -388,7 +389,7 @@ LCASEP phx PRINTDATE stz HEXBUF+1 stz HEXBUF+2 stz HEXBUF+3 - ldx #"0" + ldx #'0' stx PADCHAR ldx #2 stx PADLEN @@ -405,9 +406,9 @@ PRINTDATE stz HEXBUF+1 pla sta HEXBUF jsr HEX2DEC - lda #"/" + lda #'/' jsr COUT - ldx #"0" + ldx #'0' stx PADCHAR ldx #2 stx PADLEN @@ -422,9 +423,9 @@ PRINTDATE stz HEXBUF+1 lsr sta HEXBUF jsr HEX2DEC - lda #"/" + lda #'/' jsr COUT - ldx #"0" + ldx #'0' stx PADCHAR ldx #2 stx PADLEN @@ -439,7 +440,7 @@ PRINTDATE stz HEXBUF+1 PRINTTIME stz HEXBUF+1 stz HEXBUF+2 stz HEXBUF+3 - ldx #"0" + ldx #'0' stx PADCHAR ldx #2 stx PADLEN @@ -447,9 +448,9 @@ PRINTTIME stz HEXBUF+1 and #$1F sta HEXBUF jsr HEX2DEC - lda #":" + lda #':' jsr COUT - ldx #"0" + ldx #'0' stx PADCHAR ldx #2 stx PADLEN @@ -560,7 +561,6 @@ PRINTYA >STYA ZPTmpPtr2 ldy #0 .1 lda (ZPTmpPtr2),y beq .2 - ora #$80 jsr COUT iny bne .1 @@ -578,7 +578,6 @@ PRINTYAP phx beq .8 .1 iny lda (ZPTmpPtr2),y - ora #$80 jsr COUT lda PADLEN beq .2 @@ -762,11 +761,11 @@ COUT phx rts *-------------------------------------- CS.END -PRINTFTBL1 .AS -"abBdDLeEhHiIsStT" +PRINTFTBL1 .AS "abBdDLnNhHiIsStT" PRINTFTBL1.END -PRINTFTBL2 .AS -"n\%" +PRINTFTBL2 .AS "en\%" PRINTFTBL2.END -PRINTF.ATTRIB .AS -"dnb+++wr" +PRINTF.ATTRIB .AS "dnb+++wr" *-------------------------------------- PADCHAR .BS 1 PADLEN .BS 1 diff --git a/SBIN/GUI.S.txt b/SBIN/DESKTOP.S.txt similarity index 81% rename from SBIN/GUI.S.txt rename to SBIN/DESKTOP.S.txt index 17b06762..940ad974 100644 --- a/SBIN/GUI.S.txt +++ b/SBIN/DESKTOP.S.txt @@ -6,7 +6,7 @@ AUTO 6 .LIST OFF .OP 65C02 .OR $2000 - .TF /A2OSX.BOOT/SBIN/GUI + .TF /A2OSX.BOOT/SBIN/DESKTOP *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I @@ -55,6 +55,10 @@ CS.INIT >LDYA L.DEVNAME.GFX .20 stx hDevMouse >STYA pDevMouse + ldx #DEVMGR.OPEN + jsr GoDevMouse + bcs * + ldx #DEVMGR.OPEN jsr GoDevGFX bcs * @@ -62,34 +66,20 @@ CS.INIT >LDYA L.DEVNAME.GFX lda #A2osX.SCREENS.G >SYSCALL SYS.ScreenSelectA - ldx #DEVMGR.OPEN - jsr GoDevMouse - bcs * - * jmp .8 - lda #2 - sta BW + lda #15 + sta C - stz C - - lda #4 - sta X - lda /4 - sta X+1 - -.1 lda #2 + lda #0 sta Y -.2 lda Y - lsr - lsr - lsr - clc - adc C - and #$0F - - >PUSHA +.1 lda #0 + sta X + lda /0 + sta X+1 + +.2 >PUSHB C >PUSHB Y >PUSHW X @@ -98,35 +88,31 @@ CS.INIT >LDYA L.DEVNAME.GFX ldx #DEVMGR.GFX.SETPIXEL jsr GoDevGFX - inc Y - lda Y - cmp #190 - bne .2 - - dec BW - bne .3 - - lda #2 - sta BW - - inc C - lda C - cmp #16 - bne .3 - stz C - -.3 lda X + lda X clc adc #4 sta X - bcc .4 + bcc .3 inc X+1 -.4 sec - sbc #556 +.3 lda X + sec + sbc #559 lda X+1 - sbc /556 - bcc .1 + sbc /559 + bcc .2 + +.4 inc Y + lda Y + cmp #192 + beq .8 + and #$7 + bne .1 + dec C + bpl .1 + lda #15 + sta C + bra .1 .8 lda (pPs) ora #S.PS.F.EVENT Now accept events @@ -193,7 +179,6 @@ pDevMouse .BS 2 X .BS 2 Y .BS 1 C .BS 1 -BW .BS 1 MAN -SAVE SBIN/GUI.S +SAVE SBIN/DESKTOP.S ASM diff --git a/SBIN/INSDRV.S.txt b/SBIN/INSDRV.S.txt index 16a8f01f..0b18163e 100644 --- a/SBIN/INSDRV.S.txt +++ b/SBIN/INSDRV.S.txt @@ -10,7 +10,6 @@ AUTO 6 *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I - .INB INC/LIBSTR.I *-------------------------------------- ZPPTR1 .EQ ZPBIN ZPPTR2 .EQ ZPBIN+2 @@ -35,7 +34,6 @@ CS.START cld .DA CS.EVENT .DA CS.QUIT L.MSG.HELP .DA MSG.HELP -L.MSG.LOADING .DA MSG.LOADING .DA 0 *-------------------------------------- CS.INIT ldy #S.PS.hARGS @@ -46,11 +44,6 @@ CS.INIT ldy #S.PS.hARGS bra .8 .1 sta hArgs - >LDYA L.MSG.LOADING - >SYSCALL SYS.PSTROutYA - bcs .9 - - lda hArgs >SYSCALL SYS.LoadDrvA bcs .9 @@ -67,7 +60,6 @@ CS.QUIT clc *-------------------------------------- CS.END MSG.HELP >PSTRING "Usage: insdrv file.drv \n" -MSG.LOADING >PSTRING "INSDRV:\n" hArgs .BS 1 MAN SAVE SBIN/INSDRV.S diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index 15fe7d04..179967a6 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -327,7 +327,6 @@ PrintError pha CmdBuffer.PRINT ldy #0 .1 iny lda (pData),y - ora #$80 >SYSCALL SYS.COutA tya cmp (pData) diff --git a/SYS/KERNEL.S.CIO.txt b/SYS/KERNEL.S.CIO.txt index 9cb2b7e9..5935af1f 100644 --- a/SYS/KERNEL.S.CIO.txt +++ b/SYS/KERNEL.S.CIO.txt @@ -107,6 +107,8 @@ S.COutA.RTS rts * %D : word * %h : hex byte * %H : hex word +* %s : PSTRING +* \e : ESC * \n : CR *-------------------------------------- S.PSTROutA jsr S.GetMemPtrA @@ -114,18 +116,22 @@ S.PSTROutYA >STYA ZPQuickPtr1 ldy #0 -.1 iny - lda (ZPQuickPtr1),y - cmp #'\' - +.1 jsr S.PSTROut.Next + bne .12 +.8 clc + rts + +.12 cmp #'\' bne .2 - tya - cmp (ZPQuickPtr1) + jsr S.PSTROut.Next beq .8 - iny - lda (ZPQuickPtr1),y - cmp #'n' + cmp #'e' + bne .11 + lda #27 + bra .6 + +.11 cmp #'n' bne .6 lda #13 bra .6 @@ -133,19 +139,15 @@ S.PSTROutYA >STYA ZPQuickPtr1 .2 cmp #'%' bne .6 - tya - cmp (ZPQuickPtr1) + jsr S.PSTROut.Next beq .8 - - iny - lda (ZPQuickPtr1),y cmp #'d' bne .3 phy >PULLA jsr S.DecOutA ply - bcc .7 + bcc .1 rts .3 cmp #'D' @@ -154,7 +156,7 @@ S.PSTROutYA >STYA ZPQuickPtr1 >PULLYA jsr S.DecOutYA ply - bcc .7 + bcc .1 rts .4 cmp #'h' @@ -163,7 +165,7 @@ S.PSTROutYA >STYA ZPQuickPtr1 >PULLA jsr S.HexOutA ply - bcc .7 + bcc .1 rts .5 cmp #'H' @@ -172,10 +174,22 @@ S.PSTROutYA >STYA ZPQuickPtr1 >PULLYA jsr S.HexOutYA ply - bcc .7 + bcc .1 rts -.51 tax +.51 cmp #'s' + bne .52 + jsr S.PSTROutYAS1 + bcc .1 + rts + +.52 cmp #'S' + bne .53 + jsr S.PSTROutYAS2 + bcc .10 + rts + +.53 tax lda #'%' jsr S.COutA bcs .9 @@ -183,14 +197,37 @@ S.PSTROutYA >STYA ZPQuickPtr1 .6 jsr S.COutA bcs .9 - -.7 tya - cmp (ZPQuickPtr1) - bne .1 - -.8 clc +.10 jmp .1 .9 rts *-------------------------------------- +S.PSTROut.Next tya + eor (ZPQuickPtr1) + beq .8 + iny + lda (ZPQuickPtr1),y +.8 rts +*-------------------------------------- +S.PSTROutYAS1 phy + >PULLA + jsr S.GetMemPtrA + bra S.PSTROutYAS + +S.PSTROutYAS2 phy + >PULLYA +S.PSTROutYAS >STYA ZPQuickPtr2 + + ldy #0 +.1 iny + lda (ZPQuickPtr2),y + jsr S.COutA + bcs .9 + tya + eor (ZPQuickPtr2) do not alter C + bne .1 + +.9 ply + rts +*-------------------------------------- HEX .BS 2 BCD .BS 3 bL0Flag .BS 1