From 140f312d12412623dc1c065a551ce99c8c111141 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Tue, 11 Dec 2018 17:41:25 +0100 Subject: [PATCH] Kernel 0.92 --- BIN/LSDEV.S.txt | 11 +- DRV/CONSOLE.DRV.S.txt | 6 +- DRV/LANCEGS.DRV.S.txt | 7 +- DRV/SSC.DRV.S.txt | 4 +- DRV/SSC.I.DRV.S.txt | 4 +- DRV/UTHER2.AI.DRV.S.txt | 4 +- DRV/UTHERNET.DRV.S.txt | 7 +- DRV/UTHERNET2.DRV.S.txt | 4 +- DRV/X.SSC.DRV.S.txt | 9 +- DRV/X.U2.DRV.S.txt | 9 +- INC/A2osX.I.txt | 7 +- SYS/KERNEL.S.DEF.txt | 9 +- SYS/KERNEL.S.DEV.txt | 52 +- SYS/KERNEL.S.INIT.txt | 51 +- SYS/KERNEL.S.TERM.txt | 1197 +++++++++++++++++++++++++++++++++++++++ SYS/KERNEL.S.txt | 2 + 16 files changed, 1294 insertions(+), 89 deletions(-) create mode 100644 SYS/KERNEL.S.TERM.txt diff --git a/BIN/LSDEV.S.txt b/BIN/LSDEV.S.txt index aaa454fd..569db2ea 100644 --- a/BIN/LSDEV.S.txt +++ b/BIN/LSDEV.S.txt @@ -109,13 +109,10 @@ DumpDevFD ldy #S.FD.DEV.DRVPTR+1 dey >PUSHB (ZPFDPtr),y - lda #S.FD.DEV.NAME - clc - adc ZPFDPtr - tay - - lda /S.FD.DEV.NAME - adc ZPFDPtr+1 + >LDA.G Table.Index + tax + lda Dev.Table.hPath,x + >SYSCALL GetMemPtr >PUSHYA >PUSHB.G DEV.FD diff --git a/DRV/CONSOLE.DRV.S.txt b/DRV/CONSOLE.DRV.S.txt index 92333786..3d8a7c5a 100644 --- a/DRV/CONSOLE.DRV.S.txt +++ b/DRV/CONSOLE.DRV.S.txt @@ -29,6 +29,7 @@ CS.START cld L.MSG.DETECT .DA MSG.DETECT L.DRV.CS.START .DA DRV.CS.START L.FD.DEV .DA FD.DEV +L.FD.DEV.NAME .DA FD.DEV.NAME .DA 0 End Of Reloc Table *-------------------------------------- Dev.Detect >LDYA L.MSG.DETECT @@ -42,6 +43,7 @@ Dev.Detect >LDYA L.MSG.DETECT bcs .9 >STYA FD.DEV+S.FD.DEV.DRVPTR + >PUSHW L.FD.DEV.NAME >LDYA L.FD.DEV >SYSCALL MKDEV @@ -55,8 +57,8 @@ FD.DEV .DA #S.FD.T.CDEV .DA #0 DEVID .DA 0 BUSPTR .BS 2 DRVPTR - .AZ "CON" NAME - .HS 00000000 + .DA 0 BUFPTR +FD.DEV.NAME .AZ "CON" NAME *-------------------------------------- * Driver Code *-------------------------------------- diff --git a/DRV/LANCEGS.DRV.S.txt b/DRV/LANCEGS.DRV.S.txt index 2619b70c..90ebaec2 100644 --- a/DRV/LANCEGS.DRV.S.txt +++ b/DRV/LANCEGS.DRV.S.txt @@ -94,6 +94,7 @@ Dev.Detect >STYA ARGS bcs .9 >STYA FD.DEV+S.FD.DEV.DRVPTR + >PUSHW L.FD.DEV.NAME >LDYA L.FD.DEV >SYSCALL MKDEV @@ -143,8 +144,8 @@ FD.DEV .DA #S.FD.T.CDEV .DA #0 DEVID .DA 0 BUSPTR .BS 2 DRVPTR -FD.DEV.NAME .AZ "ETH7" NAME - .HS 000000 + .DA 0 BUFPTR +FD.DEV.NAME .AZ "ETH7" *-------------------------------------- * Driver Code *-------------------------------------- @@ -561,5 +562,5 @@ DCB .DA #S.DCB.T.NIC *-------------------------------------- DRV.END MAN -SAVE USR/SRC/BIN/DRV/LANCEGS.DRV.S +SAVE USR/SRC/DRV/LANCEGS.DRV.S ASM diff --git a/DRV/SSC.DRV.S.txt b/DRV/SSC.DRV.S.txt index 50bf67e3..54c9814e 100644 --- a/DRV/SSC.DRV.S.txt +++ b/DRV/SSC.DRV.S.txt @@ -10,8 +10,8 @@ SSCIRQ .EQ 0 .INB INC/MLI.E.I .INB INC/COM.I .INB INC/COM.6551.I - .INB USR/SRC/BIN/DRV/X.SSC.DRV.S + .INB USR/SRC/DRV/X.SSC.DRV.S *-------------------------------------- MAN -SAVE USR/SRC/BIN/DRV/SSC.DRV.S +SAVE USR/SRC/DRV/SSC.DRV.S ASM diff --git a/DRV/SSC.I.DRV.S.txt b/DRV/SSC.I.DRV.S.txt index 259a3a58..59670b28 100644 --- a/DRV/SSC.I.DRV.S.txt +++ b/DRV/SSC.I.DRV.S.txt @@ -10,8 +10,8 @@ SSCIRQ .EQ 1 .INB INC/MLI.E.I .INB INC/COM.I .INB INC/COM.6551.I - .INB USR/SRC/BIN/DRV/X.SSC.DRV.S + .INB USR/SRC/DRV/X.SSC.DRV.S *-------------------------------------- MAN -SAVE USR/SRC/BIN/DRV/SSC.I.DRV.S +SAVE USR/SRC/DRV/SSC.I.DRV.S ASM diff --git a/DRV/UTHER2.AI.DRV.S.txt b/DRV/UTHER2.AI.DRV.S.txt index 368d9e3c..5b673d8f 100644 --- a/DRV/UTHER2.AI.DRV.S.txt +++ b/DRV/UTHER2.AI.DRV.S.txt @@ -12,8 +12,8 @@ U2AI .EQ 1 .INB INC/NIC.W5100.I .INB INC/ETH.I .INB INC/LIBTCPIP.I - .INB USR/SRC/BIN/DRV/X.U2.DRV.S + .INB USR/SRC/DRV/X.U2.DRV.S *-------------------------------------- MAN -SAVE USR/SRC/BIN/DRV/UTHER2.AI.DRV.S +SAVE USR/SRC/DRV/UTHER2.AI.DRV.S ASM diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt index a52a52a5..dc06a6a5 100644 --- a/DRV/UTHERNET.DRV.S.txt +++ b/DRV/UTHERNET.DRV.S.txt @@ -113,6 +113,7 @@ Dev.Detect >STYA ARGS bcs .9 >STYA FD.DEV+S.FD.DEV.DRVPTR + >PUSHW L.FD.DEV.NAME >LDYA L.FD.DEV >SYSCALL MKDEV @@ -162,8 +163,8 @@ FD.DEV .DA #S.FD.T.CDEV .DA #0 DEVID .DA 0 BUSPTR .BS 2 DRVPTR -FD.DEV.NAME .AZ "ETH7" NAME - .HS 000000 + .DA 0 BUFPTR +FD.DEV.NAME .AZ "ETH7" *-------------------------------------- * Driver Code *-------------------------------------- @@ -552,5 +553,5 @@ DCB .DA #S.DCB.T.NIC *-------------------------------------- DRV.END MAN -SAVE USR/SRC/BIN/DRV/UTHERNET.DRV.S +SAVE USR/SRC/DRV/UTHERNET.DRV.S ASM diff --git a/DRV/UTHERNET2.DRV.S.txt b/DRV/UTHERNET2.DRV.S.txt index a81940fb..4c8bdf99 100644 --- a/DRV/UTHERNET2.DRV.S.txt +++ b/DRV/UTHERNET2.DRV.S.txt @@ -11,8 +11,8 @@ U2AI .EQ 0 .INB INC/NIC.I .INB INC/NIC.W5100.I .INB INC/ETH.I - .INB USR/SRC/BIN/DRV/X.U2.DRV.S + .INB USR/SRC/DRV/X.U2.DRV.S *-------------------------------------- MAN -SAVE USR/SRC/BIN/DRV/UTHERNET2.DRV.S +SAVE USR/SRC/DRV/UTHERNET2.DRV.S ASM diff --git a/DRV/X.SSC.DRV.S.txt b/DRV/X.SSC.DRV.S.txt index 29d36e5a..d33e2834 100644 --- a/DRV/X.SSC.DRV.S.txt +++ b/DRV/X.SSC.DRV.S.txt @@ -116,6 +116,7 @@ Dev.Detect >STYA ARGS bcs .9 >STYA FD.DEV+S.FD.DEV.DRVPTR + >PUSHW L.FD.DEV.NAME >LDYA L.FD.DEV >SYSCALL MKDEV @@ -187,8 +188,8 @@ FD.DEV .DA #S.FD.T.CDEV .DA #0 DEVID .DA 0 BUSPTR .BS 2 DRVPTR -FD.DEV.NAME .AZ "COM1" NAME - .HS 000000 + .DA 0 BUFPTR +FD.DEV.NAME .AZ "COM1" *-------------------------------------- * Driver Code *-------------------------------------- @@ -593,6 +594,6 @@ DCB .DA #S.DCB.T.COM *-------------------------------------- DRV.END MAN -SAVE USR/SRC/BIN/DRV/X.SSC.DRV.S -LOAD USR/SRC/BIN/DRV/SSC.I.DRV.S +SAVE USR/SRC/DRV/X.SSC.DRV.S +LOAD USR/SRC/DRV/SSC.I.DRV.S ASM diff --git a/DRV/X.U2.DRV.S.txt b/DRV/X.U2.DRV.S.txt index 812949ef..e877c6dc 100644 --- a/DRV/X.U2.DRV.S.txt +++ b/DRV/X.U2.DRV.S.txt @@ -114,6 +114,7 @@ Dev.Detect >STYA ARGS bcs .9 >STYA FD.DEV+S.FD.DEV.DRVPTR + >PUSHW L.FD.DEV.NAME >LDYA L.FD.DEV >SYSCALL MKDEV @@ -167,8 +168,8 @@ FD.DEV .DA #S.FD.T.CDEV .DA #0 DEVID .DA 0 BUSPTR .BS 2 DRVPTR -FD.DEV.NAME .AZ "ETH7" NAME - .HS 000000 + .DA 0 BUFPTR +FD.DEV.NAME .AZ "ETH7" *-------------------------------------- * Driver Code *-------------------------------------- @@ -677,6 +678,6 @@ DCB .DA #S.DCB.T.NIC *-------------------------------------- DRV.END MAN -SAVE USR/SRC/BIN/DRV/X.U2.DRV.S -LOAD USR/SRC/BIN/DRV/UTHER2.AI.DRV.S +SAVE USR/SRC/DRV/X.U2.DRV.S +LOAD USR/SRC/DRV/UTHER2.AI.DRV.S ASM diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 2ff35cd7..dff4c1d2 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -322,9 +322,6 @@ S.MSTAT .EQ 24 *-------------------------------------- * IOCTL device API *-------------------------------------- -DEVID.NULL .EQ 0 -DEVID.SYS .EQ 1 -*-------------------------------------- IOCTL.STATUS .EQ 0 X,Y = byte count returned IOCTL.READBLOCK .EQ 2 IOCTL.WRITEBLOCK .EQ 4 @@ -434,9 +431,9 @@ S.FD.DEV.BUSID .EQ 2 S.FD.DEV.DEVID .EQ 3 S.FD.DEV.BUSPTR .EQ 4 word S.FD.DEV.DRVPTR .EQ 6 word -S.FD.DEV.NAME .EQ 8 C-String +S.FD.DEV.BUFPTR .EQ 8 word * -S.FD.DEV .EQ 16 +S.FD.DEV .EQ 10 *-------------------------------------- * S.FD.LNK *-------------------------------------- diff --git a/SYS/KERNEL.S.DEF.txt b/SYS/KERNEL.S.DEF.txt index 3dd8b612..891a7bf6 100644 --- a/SYS/KERNEL.S.DEF.txt +++ b/SYS/KERNEL.S.DEF.txt @@ -10,8 +10,8 @@ ZPPtr2 .EQ ZPKERNEL+2 ZPPtr3 .EQ ZPKERNEL+4 ZPPtr4 .EQ ZPKERNEL+6 -pFD .EQ ZPKERNEL+10 -pDRV .EQ ZPKERNEL+12 +pFD .EQ ZPKERNEL+8 +pDRV .EQ ZPKERNEL+10 pIOCTL .EQ ZPKERNEL+12 pIOBuf .EQ ZPKERNEL+14 *-------------------------------------- @@ -140,8 +140,11 @@ H.BIN.EXE.REL.TABLE .EQ 16 * H.BIN.DRV.REL.TABLE .EQ 2 Including main jmp *-------------------------------------- +S.TTY.DEVID .EQ 0 +S.TTY.STATUS .EQ 0 + S.TTY.TITLE .EQ 48 -S.TTY.FRBUF .EQ 128 +S.TTY.SCRBUF .EQ 128 * S.TTY .EQ 2048 *-------------------------------------- diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index 69a90cc6..3ef1b62f 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -31,35 +31,24 @@ K.GetDevByName >STYA ZPPtr1 ldx #0 -.1 lda Dev.Table.hFD,x +.1 lda Dev.Table.hPath,x beq K.GetDev.NODEV jsr K.GetMemPtr >STYA ZPPtr2 - - lda ZPPtr2 - clc - adc #S.FD.DEV.NAME - sta ZPPtr3 - - lda ZPPtr2+1 - adc /S.FD.DEV.NAME - sta ZPPtr3+1 - + ldy #$ff .2 iny lda (ZPPtr1),y - cmp (ZPPtr3),y + cmp (ZPPtr2),y bne .4 - ora (ZPPtr3),y Both char are 0 ? + ora (ZPPtr2),y Both char are 0 ? bne .2 no....loop - ldy ZPPtr2 - lda ZPPtr2+1 - clc - rts + lda Dev.Table.hFD,x + jmp K.GetMemPtr .4 inx cpx DevMgr.DevCnt @@ -97,14 +86,15 @@ K.GetDevStatus.I * # MKDev * Create a hDEV * ## C -* `hDEV mkdev (S.FD * fd)` +* `hDEV mkdev (S.FD * fd, const char *devname)` * ## ASM -* `>LDYA FD.DEV` +* `>PUSHW devname` +* `>LDYA fd` * `>SYSCALL mkdev * ## RETURN VALUE * A = hDEV *\-------------------------------------- -K.MKDev >STYA .1+1 +K.MKDev jsr MEM.SPtr1PPtr2 ptr1=fd, ptr2=name ldx DevMgr.DevCnt cmp #K.DEV.MAX @@ -122,7 +112,7 @@ K.MKDev >STYA .1+1 ldy #S.FD.DEV-1 -.1 lda $ffff,y SELF MODIFIED +.1 lda (ZPPtr1),y sta (pFD),y dey bpl .1 @@ -141,23 +131,33 @@ K.MKDev >STYA .1+1 ldx #0 -.2 lda IRQ.Vectors+1,x - beq .3 +.3 lda IRQ.Vectors+1,x + beq .7 + inx inx cpx #K.IRQDEV.MAX*2 - bne .2 + bne .3 .9 lda #E.OOH * sec .99 rts -.3 lda pFD +.7 lda pFD sta IRQ.Vectors,x lda pFD+1 sta IRQ.Vectors+1,x -.8 lda DevMgr.DevCnt +.8 >LDYA ZPPtr2 + jsr K.NewStr + bcs .99 + txa + + ldx DevMgr.DevCnt + sta Dev.Table.hPath,x + + txa + inc DevMgr.DevCnt clc rts diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 1a1e95fb..a365f98c 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -103,6 +103,7 @@ Kernel.Init3 sta SETALTZP jsr MemMgrInit + >PUSHWI FD.NULL.NAME >LDYAI FD.NULL >SYSCALL MKDev @@ -302,18 +303,20 @@ MemMgrInit >LDYAI Mem.MHiMem rts *-------------------------------------- -SysScrInit >LDYAI FD.SYS +SysScrInit >PUSHWI FD.CONSOLE.NAME + >LDYAI FD.CONSOLE >SYSCALL MKDev lda A2osX.TTYDEVS .1 pha inc FD.TTY+S.FD.DEV.DEVID - inc FD.TTY+S.FD.DEV.NAME+3 - lda FD.TTY+S.FD.DEV.BUSPTR+1 + inc FD.TTY.NAME+3 + lda FD.TTY+S.FD.DEV.BUFPTR+1 sec sbc /2048 - sta FD.TTY+S.FD.DEV.BUSPTR+1 + sta FD.TTY+S.FD.DEV.BUFPTR+1 + >PUSHWI FD.TTY.NAME >LDYAI FD.TTY >SYSCALL MKDev @@ -380,7 +383,7 @@ PS0.Init >LDYAI CORE.S.PS0 Select Process 0 (Kernel) >PUSHBI S.FI.T.TXT >PUSHBI O.RDWR - >LDYAI DEV.SYS + >LDYAI DEV.CONSOLE >SYSCALL fopen bcs .9 @@ -950,19 +953,19 @@ DevMgrInit.AddBDev lda FD.BDEV+S.FD.DEV.BUSID ora #$30 - sta FD.BDEV+S.FD.DEV.NAME+1 SnDy + sta FD.BDEV.NAME+1 SnDy lda FD.BDEV+S.FD.DEV.DEVID ora #$30 - sta FD.BDEV+S.FD.DEV.NAME+3 SxDn + sta FD.BDEV.NAME+3 SxDn - >PUSHWI FD.BDEV+S.FD.DEV.NAME + >PUSHWI FD.BDEV.NAME >PUSHBI 2 >LDYAI MSG.BLKDEV >SYSCALL printf + >PUSHWI FD.BDEV.NAME >LDYAI FD.BDEV - >SYSCALL MKDev rts *-------------------------------------- @@ -1106,7 +1109,7 @@ MSG.Z80 .AZ "Checking Z80 CPU..." MSG.Z80.OK .AZ "Detected In Slot %d.\r\n" MSG.Z80.KO .AZ "Not Detected." *-------------------------------------- -DEV.SYS .AZ "/DEV/SYS" +DEV.CONSOLE .AZ "/DEV/CONSOLE" I.ENV.ROOT .AZ "ROOT" I.ENV.PATH .AZ "PATH=${ROOT}SBIN/:${ROOT}BIN/" I.ENV.LIB .AZ "LIB=${ROOT}LIB/" @@ -1132,29 +1135,29 @@ MLICLOSE00 .DA #1 FD.NULL .DA #S.FD.T.CDEV .DA #0 HANDLER .DA #0 BUSID - .DA #DEVID.NULL + .DA #0 DEVID .DA 0 BUSPTR .DA DRV.NULL - .AZ "NULL" NAME - .HS 000000 + .DA 0 BUFPTR +FD.NULL.NAME .AZ "NULL" NAME *-------------------------------------- -FD.SYS .DA #S.FD.T.CDEV +FD.CONSOLE .DA #S.FD.T.CDEV .DA #0 HANDLER .DA #0 BUSID - .DA #DEVID.SYS - .DA $B800 BUSPTR + .DA #1 DEVID + .DA 0 BUSPTR .DA DRV.SYS - .AZ "SYS" NAME - .HS 00000000 + .DA $B800 BUFPTR +FD.CONSOLE.NAME .AZ "CONSOLE" *-------------------------------------- FD.TTY .DA #S.FD.T.CDEV .DA #0 HANDLER .DA #0 BUSID - .DA #DEVID.SYS DEVID - .DA $B800 BUSPTR + .DA #1 DEVID + .DA 0 BUSPTR .DA DRV.SYS - .AZ "TTY0" NAME - .HS 000000 + .DA $B800 BUFPTR +FD.TTY.NAME .AZ "TTY0" *-------------------------------------- FD.BDEV .DA #S.FD.T.BDEV .DA #0 HANDLER @@ -1162,8 +1165,8 @@ FD.BDEV .DA #S.FD.T.BDEV .DA #0 DEVID .BS 2 BUSPTR .BS 2 DRVPTR - .AZ "S1D1" NAME - .HS 000000 + .DA 0 BUFPTR +FD.BDEV.NAME .AZ "S1D1" *-------------------------------------- SmartPort.OFS .HS 010305 SmartPort.SIG .HS 200003 diff --git a/SYS/KERNEL.S.TERM.txt b/SYS/KERNEL.S.TERM.txt new file mode 100644 index 00000000..b48de875 --- /dev/null +++ b/SYS/KERNEL.S.TERM.txt @@ -0,0 +1,1197 @@ +NEW +PREFIX +AUTO 4,1 +*-------------------------------------- +CURSOR.BLINK.SPEED .EQ 2 +ESCSEQ.MAXLEN .EQ 16 +OUTBUF.MAXLEN .EQ 32 +IACBUF.MAXLEN .EQ 32 +*-------------------------------------- +ZPIOCTL .EQ ZPDRV +ZPTTYPtr .EQ ZPDRV+2 +ZPTmpWord .EQ ZPDRV+4 +ZPTmpBool .EQ ZPDRV+6 +ZPBufPtr .EQ ZPDRV+8 +ZPCount .EQ ZPDRV+10 +ZPBaseL1 .EQ ZPDRV+12 +ZPBaseL2 .EQ ZPDRV+14 +*-------------------------------------- +DRV.TERM cld + >STYA pIOCTL + + ldy #S.FD.DEV.BUFPTR + lda (pFD),y + sta ZPTTYPtr + iny + lda (pFD),y + sta ZPTTYPtr+1 + + lda (ZPTTYPtr) S.TTY.DEVID + cmp A2osX.ASCREEN + beq .1 CS + + clc +.1 ror bActive + + jmp (.8,x) +.8 .DA DRV.TERM.STATUS + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA DRV.TERM.CONTROL + .DA A2osX.BADCALL + .DA DRV.TERM.OPEN + .DA DRV.TERM.CLOSE + .DA DRV.TERM.READ + .DA DRV.TERM.WRITE +*-------------------------------------- +DRV.TERM.STATUS ldy #S.IOCTL.STATCODE + lda (ZPIOCTL),y + beq .1 + + cmp #S.IOCTL.STATCODE.GETDIB + bne .9 + + ldx #S.DIB-1 + .HS 2C bit abs +.1 ldx #3 + + ldy #S.IOCTL.BUFPTR + lda (ZPIOCTL),y + sta .3+1 + iny + lda (ZPIOCTL),y + sta .3+2 + +.2 lda DRV.TERM.DIB,x +.3 sta $ffff,x SELF MODIFIED + dex + bpl .2 + + clc + rts + +.9 lda #MLI.E.BADCTL + sec + rts +*-------------------------------------- +DRV.TERM.OPEN ldx #0 + +.1 ldy A2osX.SCRNDEVS,x + beq .2 + + inx + cpx #K.SCR.MAX + bne .1 + + lda #E.OOH + sec + rts + +.9 lda #MLI.E.OPEN + sec + rts + +.2 sta A2osX.SCRNDEVS,x DEV.ID in A + sta (ZPTTYPtr) + + ldy #S.TTY.STATUS + + lda (ZPTTYPtr),y + bit #S.DIB.S.OPENED + bne .9 + ora #S.DIB.S.OPENED + ora DRV.TERM.DIB+S.DIB.S + sta (ZPTTYPtr),y + + stz OutPtr + stz OutCnt + + jsr RESET +*-------------------------------------- +DRV.TERM.CONTROL + sta SETTEXT + sta SETALTCHAR + sta SET80DISP + sta CLR80STORE + sta CLRPAGE2 + lda (ZPTTYPtr) + sta A2osX.ASCREEN + + clc + rts +*-------------------------------------- +DRV.TERM.CLOSE ldy #S.TTY.STATUS + lda (ZPTTYPtr),y + bit #S.DIB.S.OPENED + beq .9 + + lda DRV.TERM.DIB+S.DIB.S + sta (ZPTTYPtr),y + + ldx #0 + +.1 lda A2osX.SCRNDEVS,x + cmp (ZPTTYPtr) + bne .2 + + stz A2osX.SCRNDEVS,x + +.2 inx + cpx #K.SCR.MAX + bne .1 + + clc + rts + +.9 lda MLI.E.IO + sec + rts +*-------------------------------------- +DRV.TERM.READ lda A2osX.ASCREEN + cmp (ZPTTYPtr) is screen active? + bne .6 no....go check flush... + + lda A2osX.TIMER16 + and #CURSOR.BLINK.SPEED + eor CURON + beq .1 + jsr CURBLNK + +.1 lda OPENAPPLE + bmi .6 Open apple key, not for us... + + lda KBD + bpl .6 + sta KBDSTROBE + + and #$7F + + ldx KeyRemapped +.2 cmp KeyRemapped,x + beq .3 + dex + bne .2 + jsr Char.Out.Put no remap....send char.... + bra .7 and flush + +.3 lda KeyRemappedIdx,x + tay + +.4 lda KeyRemappedTbl,y + beq .7 end of remap....flush + jsr Char.Out.Put + iny + bra .4 + +.6 lda OutCnt + beq .9 no char in output buffer... + +.7 stz .8+1 + jsr GetPtrsAndCnt + +.70 inc ZPCount + bne .71 + inc ZPCount+1 + beq .8 + +.71 jsr Char.Out.Get + bcs .8 + + ldy .8+1 + sta (ZPBufPtr),y + iny + sty .8+1 + bra .70 + +.8 lda #$ff SELF MODIFIED + ldy #S.IOCTL.BYTECNT + sta (ZPIOCTL),y + iny + lda #0 + sta (ZPIOCTL),y + + clc + rts + +.9 lda #0 Error = char + sec + rts +*-------------------------------------- +DRV.TERM.WRITE jsr GetPtrsAndCnt + +.2 inc ZPCount + bne .3 + inc ZPCount+1 + beq .8 + +.3 lda (ZPBufPtr) + inc ZPBufPtr + bne .4 + inc ZPBufPtr+1 + +.4 jsr DRV.TERM.WRITE.COUT + + bra .2 + +.8 clc + rts +*-------------------------------------- +DRV.TERM.WRITE.COUT + bit bEscMode + bmi COUT.EscMode + bit bIACMode + bpl .10 + + jmp COUT.IAC + +.10 cmp #IAC + bne .1 + sta bIACMode + stz IACBuf + clc + rts + +.1 pha + jsr CUROFF + pla + cmp #C.DEL + beq DEL + cmp #C.SPACE + bcc COUT.Ctrl + + ora INVFLG + jsr SetCharAtCurPos +*-------------------------------------- +FS ldx CH + cpx #79 + bne .1 + + bit LWFLG + bpl FS.8 + + stz CH + jmp LF + +.1 inc CH + +FS.8 clc + rts +*-------------------------------------- +DEL ldx CH + beq .1 + dec CH + bra .3 + +.1 ldy CV + beq FS.8 + + lda #79 + sta CH + dec CV + +.3 lda #$20 + ora INVFLG + jmp SetCharAtCurPos +*-------------------------------------- +COUT.Ctrl ldx #CtrlChars.Cnt-1 + +.1 cmp CtrlChars,x + beq .2 + dex + bpl .1 + clc + rts + +.2 txa + asl + tax + jmp (J.CtrlChars,x) +*-------------------------------------- +J.CtrlChars .DA ENQ 5 + .DA BS 8 + .DA LF 10 + .DA CLRSCR 12 + .DA CROUT 13 + .DA FS 21 + .DA ESC 27 +*-------------------------------------- +COUT.EscMode bit bEscModeCSI + bmi COUT.EscModeCSI + cmp #'[' + bne .1 + + dec bEscModeCSI + stz EscSeq + clc + rts + +.1 stz bEscMode + + ldx #EscCodes.Cnt-1 + +.2 cmp EscCodes,x + beq .3 + dex + bpl .2 + + clc + rts + +.3 txa + asl + tax + jmp (J.EscCodes,x) +*-------------------------------------- +J.EscCodes .DA Scroll.Dn M + .DA Scroll.Up D + .DA RESET c +*-------------------------------------- +COUT.EscModeCSI inc EscSeq + ldx EscSeq + sta EscSeq,x + cmp #64 End of Seq ? + bcs COUT.ExecEscSeq + cpx #ESCSEQ.MAXLEN too long? + bne .1 + stz bEscModeCSI + stz bEscMode +.1 clc + rts + +COUT.ExecEscSeq stz EscSeqParamCnt + stz bEscSeqInNum + + ldx #0 EscSeq Ptr + +.10 stz ZPTmpWord + stz ZPTmpWord+1 + +.1 inx + lda EscSeq,x + + cmp #'0' + bcc .2 + cmp #'9'+1 + bcs .2 + + dec bEscSeqInNum + and #$0F + pha + lda ZPTmpWord + ldy ZPTmpWord+1 + asl ZPTmpWord param=param*10 + rol ZPTmpWord+1 + asl ZPTmpWord + rol ZPTmpWord+1 + clc + adc ZPTmpWord + sta ZPTmpWord + tya + adc ZPTmpWord+1 + sta ZPTmpWord+1 + asl ZPTmpWord + rol ZPTmpWord+1 + + pla + clc + adc ZPTmpWord + sta ZPTmpWord + bcc .1 + inc ZPTmpWord+1 + bra .1 + +.2 bit bEscSeqInNum + bpl .3 + + stz bEscSeqInNum + lda #255 + ldy ZPTmpWord+1 + bne .21 + + lda ZPTmpWord +.21 ldy EscSeqParamCnt + sta EscSeqParam,y + inc EscSeqParamCnt + +.3 lda EscSeq,x + cmp #';' + beq .10 + + stz bEscModeCSI + stz bEscMode + + ldx #EscSeqCmds.Cnt-1 + +.4 cmp EscSeqCmds,x + beq .5 + dex + bne .4 + + clc + rts + +.5 txa + asl + tax + jmp (J.EscSequences,x) +*-------------------------------------- +J.EscSequences .DA Esc.LWEnable h + .DA Esc.LWDisable l + .DA Esc.DispAttr m + .DA Esc.Query n + .DA Esc.Scroll r + .DA Esc.Erase K + .DA Esc.Home H +*-------------------------------------- +COUT.IAC inc IACBuf + ldx IACBuf + cpx #IACBUF.MAXLEN + beq * + sta IACBuf,x + + cpx #1 CMD ? + beq .8 yes, wait for additional bytes + + ldy IACBuf+1 get back CMD + cpy #SB + bne .1 not a SB/SE....stop with CMD/SUBCMD + + cmp #SE + bne .8 wait for ending SE....keep bIACMode + +.1 cpy #IAC + beq .9 + + tya + sec + sbc #SB + bcc .9 + asl + tax + lda IACBuf+2 Get SUBCMD in A + + cpx #10 + bcs * + jmp (J.COUT.IAC.CMDS,x) + +.9 stz bIACMode + +.8 clc + rts +*-------------------------------------- +J.COUT.IAC.CMDS .DA COUT.IAC.SB + .DA COUT.IAC.WILL + .DA COUT.IAC.WONT + .DA COUT.IAC.DO + .DA COUT.IAC.DONT + .DA 0 end of relocation +*-------------------------------------- +COUT.IAC.SB cmp #TELOPT.TTYPE + bne .9 + + lda IACBuf+3 + cmp #SB.SEND + bne .9 + + ldy #0 + +.1 lda SB.IS.TTYPE,y + jsr Char.Out.Put + iny + cpy #SB.IS.TTYPE.LEN + bne .1 + +.9 stz bIACMode + + clc + rts +*-------------------------------------- +COUT.IAC.WILL ldx #WILLDO.CNT-1 + +.1 cmp WILLDO,x + beq .7 + dex + bpl .1 + + ldx #WILLDONT.CNT-1 + +.2 cmp WILLDONT,x + beq .8 + dex + bpl .2 + + bra .9 + +.7 ldx #DO + .HS 2C BIT ABS + +.8 ldx #DONT + + bra COUT.IAC.SendAX + +.9 stz bIACMode + + clc + rts +*-------------------------------------- +COUT.IAC.WONT +.9 stz bIACMode + + clc + rts +*-------------------------------------- +COUT.IAC.DO ldx #DOWILL.CNT-1 + +.1 cmp DOWILL,x + beq .7 + dex + bpl .1 + + ldx #DOWONT.CNT-1 + +.2 cmp DOWONT,x + beq .8 + dex + bpl .2 + + bra COUT.IAC.SendAX.9 + +.7 ldx #WILL + .HS 2C BIT ABS + +.8 ldx #WONT +*-------------------------------------- +COUT.IAC.SendAX + pha push CMD + phx + lda #IAC + jsr Char.Out.Put + pla + jsr Char.Out.Put + pla + jsr Char.Out.Put + +COUT.IAC.SendAX.9 + stz bIACMode + + clc + rts +*-------------------------------------- +COUT.IAC.DONT +.9 stz bIACMode + + clc + rts +*-------------------------------------- +RESET stz CURON + + stz bEscMode + stz bEscModeCSI + + jsr CLRSCR + + lda #23 + sta SCROLLBOT + lda #0 + sta SCROLLTOP + dec + sta LWFLG +*-------------------------------------- +RESETATTR lda #$80 + sta INVFLG + clc + rts +*-------------------------------------- +ESC lda #$80 + sta bEscMode + clc + rts +*-------------------------------------- +ENQ ldy #0 + +.1 lda ENQ.String,y + beq .8 + jsr Char.Out.Put + iny + bne .1 + +.8 clc + rts +*-------------------------------------- +BS ldx CH + beq .1 + dec CH + bra .3 + +.1 ldy CV + bne .2 + clc + rts + +.2 lda #79 + sta CH + dec CV + +.3 clc + rts +*-------------------------------------- +ClrScr ldx #23 + +.1 jsr SETUP.L1X + + lda #" " + + sta SETWRITEAUX + + ldy #39 + +.2 sta (ZPBaseL1),y + dey + bpl .2 + + sta CLRWRITEAUX + + ldy #39 + +.3 sta (ZPBaseL1),y + dey + bpl .3 + + dex + bpl .1 + + stz CV +*-------------------------------------- +CROUT stz CH + clc + rts +*-------------------------------------- +LF ldy CV + cpy SCROLLBOT + beq SCROLL.UP + inc CV + clc + rts +*-------------------------------------- +SCROLL.UP ldx SCROLLTOP + +.1 jsr SETUP.L1X + + inx + + jsr COPY.XtoL1 + + cpx SCROLLBOT + bne .1 +*-------------------------------------- +CLREOL ldy CH Start + ldx #80 End + bra CLR + +CLRLINE ldy #0 Start + ldx #80 End + bra CLR + +CLRSOL ldy #0 Start + ldx CH End + +CLR stx .2+1 + + ldx CV + +.1 lda #" " + + phy + jsr SetCharAtYX X unmodified + ply + iny +.2 cpy #$ff Self Modified + bne .1 + + clc + rts +*-------------------------------------- +SCROLL.DN ldx SCROLLBOT + +.1 jsr SETUP.L1X + + dex + + jsr COPY.XtoL1 + + cpx SCROLLTOP + bne .1 + + clc + rts +*-------------------------------------- +Esc.LWEnable sec + .HS 90 BCC +*-------------------------------------- +Esc.LWDisable clc + ldx EscSeqParamCnt + beq .8 + dex + bne .8 + + lda EscSeqParam + eor #7 + bne .8 + + ror LWFLG + +.8 clc + 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.Query ldx EscSeqParamCnt + beq .8 + dex + bne .8 + + lda EscSeqParam + cmp #6 + bne .8 + + lda #C.ESC + jsr Char.Out.Put + lda #'[' + jsr Char.Out.Put + lda CV + inc + jsr Decimal.Out + lda #';' + jsr Char.Out.Put + lda CH + inc + jsr Decimal.Out + lda #'R' + jsr Char.Out.Put + +.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.Erase 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 ldx #1 + lda EscSeqParam + beq .2 + + ldx #24 + cmp #24 + bcs .2 + + tax + +.2 dex + stx CV + + dec EscSeqParamCnt + beq .8 + + ldx #1 + lda EscSeqParam+1 + beq .3 + + ldx #80 + cmp #80 + + bcs .3 + + tax + +.3 dex + stx CH + +.8 clc + rts +*-------------------------------------- +CUROFF lda CURON + beq CUREXIT.RTS + +CURBLNK lda A2osX.ASCREEN + cmp (ZPTTYPtr) + beq CURBLNK1 + + lda CURON + bne CURBLNK.OFF + rts do not Light if screen is not active + +CURBLNK1 lda CURON + bne CURBLNK.OFF + + jsr GetCharAtCurPos + sta CURCHAR + and #$80 + eor #" " + bra CUREXIT + +CURBLNK.OFF lda CURCHAR + +CUREXIT jsr SetCharAtCurPos + + lda CURON + eor #CURSOR.BLINK.SPEED + sta CURON +CUREXIT.RTS rts +*-------------------------------------- +SetCharAtCurPos ldy CH + ldx CV +*-------------------------------------- +SetCharAtYX cmp #$40 + bcc .10 + cmp #$5F + bcs .10 + and #$3F + +.10 pha + + jsr SETUP.L1X + + tya + lsr + tay + + pla + bcs .1 + +* php +* sei + sta SETWRITEAUX +.1 sta (ZPBaseL1),y + sta CLRWRITEAUX +* plp + rts + +*.1 sta (ZPBaseL1),y +* rts +*-------------------------------------- +GetCharAtCurPos ldy CH + ldx CV +*-------------------------------------- +GetCharAtYX jsr SETUP.L1X + + tya + lsr + tay + + bcs .1 + +* php +* sei + sta SETREADAUX +.1 lda (ZPBaseL1),y + sta CLRREADAUX +* plp + rts + +*.1 lda (ZPBaseL1),y +* rts +*-------------------------------------- +SETUP.L1X lda SCR.BASEL,x + sta ZPBaseL1 + lda SCR.BASEH,x + sta ZPBaseL1+1 + rts +*-------------------------------------- +COPY.XtoL1 lda SCR.BASEL,x + sta ZPBaseL2 + lda SCR.BASEH,x + sta ZPBaseL2+1 + +* php +* sei + sta SETWRITEAUX + sta SETREADAUX + + jsr .1 + + sta CLRWRITEAUX + sta CLRREADAUX +* plp + +.1 ldy #39 + +.2 lda (ZPBaseL2),y + sta (ZPBaseL1),y + dey + bpl .2 + rts +*-------------------------------------- +Decimal.Out stz ZPTmpWord + stz ZPTmpWord+1 + + ldx #8 + sed + + tay + +.1 tya + asl + tay + lda ZPTmpWord + adc ZPTmpWord + sta ZPTmpWord + lda ZPTmpWord+1 + adc ZPTmpWord+1 + sta ZPTmpWord+1 + dex + bne .1 + + cld + + stz ZPTmpBool No leading 0 + + lda ZPTmpWord+1 + and #$0f + beq .2 + + dec ZPTmpBool non zero, print everything + + jsr Char.Out.Put30 + +.2 lda ZPTmpWord + lsr + lsr + lsr + lsr + bne .3 + + bit ZPTmpBool Print this digit ? + bpl .4 + +.3 jsr Char.Out.Put30 + +.4 lda ZPTmpWord + and #$0f +*-------------------------------------- +Char.Out.Put30 ora #$30 +Char.Out.Put pha + lda OutPtr + clc + adc OutCnt + and #OUTBUF.MAXLEN-1 + tax + pla + sta OutBuffer,x + inc OutCnt + rts +*-------------------------------------- +Char.Out.Get sec + lda OutCnt + beq .9 + dec OutCnt + ldx OutPtr + lda OutBuffer,x + pha + txa + inc + and #OUTBUF.MAXLEN-1 + sta OutPtr + pla + clc +.9 rts +*-------------------------------------- +GetPtrsAndCnt ldy #S.IOCTL.BUFPTR + lda (ZPIOCTL),y + sta ZPBufPtr + iny + lda (ZPIOCTL),y + sta ZPBufPtr+1 + +* ldy #S.IOCTL.BYTECNT + iny + + lda (ZPIOCTL),y + eor #$ff + sta ZPCount + iny + lda (ZPIOCTL),y + eor #$ff + sta ZPCount+1 + rts +*-------------------------------------- +DRV.CS.END +*-------------------------------------- +SCR.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 +SCR.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 +*-------------------------------------- +BUF.BASEL .DA #S.TTY.SCRBUF + .DA #S.TTY.SCRBUF+80 + .DA #S.TTY.SCRBUF+160 + .DA #S.TTY.SCRBUF+240 + .DA #S.TTY.SCRBUF+320 + .DA #S.TTY.SCRBUF+400 + .DA #S.TTY.SCRBUF+480 + .DA #S.TTY.SCRBUF+560 + .DA #S.TTY.SCRBUF+640 + .DA #S.TTY.SCRBUF+720 + .DA #S.TTY.SCRBUF+800 + .DA #S.TTY.SCRBUF+880 + .DA #S.TTY.SCRBUF+960 + .DA #S.TTY.SCRBUF+1040 + .DA #S.TTY.SCRBUF+1120 + .DA #S.TTY.SCRBUF+1200 + .DA #S.TTY.SCRBUF+1280 + .DA #S.TTY.SCRBUF+1360 + .DA #S.TTY.SCRBUF+1440 + .DA #S.TTY.SCRBUF+1520 + .DA #S.TTY.SCRBUF+1600 + .DA #S.TTY.SCRBUF+1680 + .DA #S.TTY.SCRBUF+1760 + .DA #S.TTY.SCRBUF+1840 +BUF.BASEH .DA /S.TTY.SCRBUF + .DA /S.TTY.SCRBUF+80 + .DA /S.TTY.SCRBUF+160 + .DA /S.TTY.SCRBUF+240 + .DA /S.TTY.SCRBUF+320 + .DA /S.TTY.SCRBUF+400 + .DA /S.TTY.SCRBUF+480 + .DA /S.TTY.SCRBUF+560 + .DA /S.TTY.SCRBUF+640 + .DA /S.TTY.SCRBUF+720 + .DA /S.TTY.SCRBUF+800 + .DA /S.TTY.SCRBUF+880 + .DA /S.TTY.SCRBUF+960 + .DA /S.TTY.SCRBUF+1040 + .DA /S.TTY.SCRBUF+1120 + .DA /S.TTY.SCRBUF+1200 + .DA /S.TTY.SCRBUF+1280 + .DA /S.TTY.SCRBUF+1360 + .DA /S.TTY.SCRBUF+1440 + .DA /S.TTY.SCRBUF+1520 + .DA /S.TTY.SCRBUF+1600 + .DA /S.TTY.SCRBUF+1680 + .DA /S.TTY.SCRBUF+1760 + .DA /S.TTY.SCRBUF+1840 +*-------------------------------------- +CtrlChars .HS 05080A0C0D151B +CtrlChars.Cnt .EQ *-CtrlChars +*-------------------------------------- +EscCodes .AZ "MDc" +EscCodes.Cnt .EQ *-EscCodes +EscSeqCmds .AS "hlmnrKH" +EscSeqCmds.Cnt .EQ *-EscSeqCmds +ENQ.String .AZ "XTERM" +*-------------------------------------- +KeyRemapped .HS 05080A0B0D15 L,D,U,CR,R +KeyRemappedIdx .HS 050004080C0F +KeyRemappedTbl .EQ * +KeyRemappedLEFT .HS 1B5B4400 esc[D +KeyRemappedDOWN .HS 1B5B4200 esc[B +KeyRemappedUP .HS 1B5B4100 esc[A +KeyRemappedCR .HS 0D0A00 crlf +KeyRemappedRGHT .HS 1B5B4300 esc[C +*-------------------------------------- +TELOPS.STATUS +*-------------------------------------- +WILLDO .DA #TELOPT.BINARY,#TELOPT.SGA +WILLDO.CNT .EQ *-WILLDO +WILLDONT .DA #TELOPT.TSPEED,#TELOPT.LINEMODE,#TELOPT.STATUS +WILLDONT.CNT .EQ *-WILLDONT +DOWILL .DA #TELOPT.BINARY,#TELOPT.SGA,#TELOPT.TTYPE,#TELOPT.NAWS +DOWILL.CNT .EQ *-DOWILL +DOWONT .DA #TELOPT.ECHO,#TELOPT.NEWENVIRON,#TELOPT.XDISPLOC,#TELOPT.TSPEED,#TELOPT.LFLOW +DOWONT.CNT .EQ *-DOWONT +SB.IS.TTYPE .DA #IAC,#SB,#TELOPT.TTYPE,#SB.IS + .AS 'XTERM' + .DA #IAC,#SE +SB.IS.TTYPE.LEN .EQ *-SB.IS.TTYPE +SB.IS.NAWS .DA #IAC,#SB,#TELOPT.NAWS,#SB.IS + .DA 80 + .DA 24 + .DA #IAC,#SE +SB.IS.NAWS.LEN .EQ *-SB.IS.NAWS +*-------------------------------------- +bActive .BS 1 +CH .BS 1 +CV .BS 1 +LWFLG .BS 1 +INVFLG .BS 1 +SCROLLTOP .BS 1 +SCROLLBOT .BS 1 +CURON .BS 1 +CURCHAR .BS 1 +OutBuffer .BS OUTBUF.MAXLEN +OutPtr .BS 1 +OutCnt .BS 1 +bIACMode .BS 1 +IACBuf .BS OUTBUF.MAXLEN+1 +bEscMode .BS 1 +bEscModeCSI .BS 1 +bEscSeqInNum .BS 1 +EscSeq .BS ESCSEQ.MAXLEN+1 +EscSeqParamCnt .BS 1 +EscSeqParam .BS 4 +*-------------------------------------- +DRV.TERM.DIB .DA #S.DIB.S.WRITE+S.DIB.S.READ + .DA #0,#0,#0 + >PSTR "A2osX VT100 TERM" + .DA #S.DIB.T.CHAR + .DA #0 + .DA K.VER +*-------------------------------------- +MAN +SAVE USR/SRC/SYS/KERNEL.S.TERM +LOAD USR/SRC/SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 4f0a4231..832917ff 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -11,6 +11,7 @@ AUTO 4,1 .INB INC/IO.I .INB INC/MLI.I .INB INC/MLI.E.I + .INB INC/NET.TELNET.I .INB INC/XY.MOUSE.I .INB INC/GUI.I @@ -52,6 +53,7 @@ A2osX.E0 .PH $E000 .INB USR/SRC/SYS/KERNEL.S.JMP .INB USR/SRC/SYS/KERNEL.S.IRQ .INB USR/SRC/SYS/KERNEL.S.MEM + .INB USR/SRC/SYS/KERNEL.S.TERM ********* TMP ***** go to A2osX.D1 .INB USR/SRC/SYS/KERNEL.S.PFT .INB USR/SRC/SYS/KERNEL.S.FIO