diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po index 5eb95907..91cd32c9 100644 Binary files a/A2OSX.BOOT.po and b/A2OSX.BOOT.po differ diff --git a/A2OSX.DEV.po b/A2OSX.DEV.po index 1a7135ef..802bf2c9 100644 Binary files a/A2OSX.DEV.po and b/A2OSX.DEV.po differ diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po index 03574862..0ef4c23b 100644 Binary files a/A2OSX.SRC.po and b/A2OSX.SRC.po differ diff --git a/A2osX.STARTUP.txt b/A2osX.STARTUP.txt index 2ea4d290..5ff24db4 100644 --- a/A2osX.STARTUP.txt +++ b/A2osX.STARTUP.txt @@ -13,7 +13,8 @@ INSDRV CONSOLE.DRV STARTPROC GETTY CON ${A2OSX}SBIN/LOGIN # Serial Login #INSDRV SSC.DRV 9600,N,8,1,X -#STARTPROC GETTY COM2 ${A2OSX}SBIN/LOGIN +INSDRV SSC.I.DRV 9600,N,8,1,X +STARTPROC GETTY COM2 ${A2OSX}SBIN/LOGIN #INSDRV PIC.DRV # Network Section INSDRV UTHERNET.DRV 000E3A123456 diff --git a/BIN/LSDEV.S.txt b/BIN/LSDEV.S.txt index 8fe121a7..64bb8b7b 100644 --- a/BIN/LSDEV.S.txt +++ b/BIN/LSDEV.S.txt @@ -55,6 +55,7 @@ CS.RUN >LDYA L.MSG0 >SYSCALL GetDevByIDA bcc .10 jmp .8 + .10 >STYA ZPPTR1 ldy #S.DEV.JMP+1 @@ -80,7 +81,9 @@ CS.RUN >LDYA L.MSG0 >PUSHW L.DEV.NAME ldy #S.DEV.F - >PUSHB (ZPPTR1),y + lda (ZPPTR1),y + and #$FF^S.DEV.F.LEN + >PUSHA ldy #S.DEV.S >PUSHB (ZPPTR1),y diff --git a/DRV/SSC.DRV.S.txt b/DRV/SSC.DRV.S.txt index 74e7a4dc..15701ae4 100644 --- a/DRV/SSC.DRV.S.txt +++ b/DRV/SSC.DRV.S.txt @@ -10,6 +10,7 @@ AUTO 6 *-------------------------------------- .INB /A2OSX.DEV/INC/MACROS.I .INB /A2OSX.DEV/INC/A2OSX.I + .INB /A2OSX.DEV/INC/PRODOS.I *-------------------------------------- ZPTmpPtr1 .EQ ZPDRV *-------------------------------------- @@ -61,14 +62,12 @@ Dev.Detect sta hArgs >LDYA L.MSG.DETECT.KO >SYSCALL CPrintFYA - lda #DEVMGR.ERRNOHW Not Found in any slot, exiting + lda #MLI.ERR.NODEV Not Found in any slot, exiting sec rts .4 lda ZPTmpPtr1+1 - sta DEVSLOTCn and #$0F - sta DEVSLOT0n ora #$30 sta DEV.HEADER.NAME+4 asl @@ -94,25 +93,38 @@ hArgs .BS 1 *-------------------------------------- * Device Header (16 Bytes) *-------------------------------------- -DEV.HEADER cld - jmp (DRV.CS.START,x) - .HS 00 DevID - .DA #S.DEV.F.EVENT+S.DEV.F.COUT+S.DEV.F.CHAR +DEV.HEADER .DA DRV.CS.START + .DA #S.DEV.S.WRITE+S.DEV.S.READ DEV.HEADER.NAME >PSTR "COM1" NAME - .HS 00 - .HS 00.00.00.00 *-------------------------------------- * Driver Code *-------------------------------------- -DRV.CS.START .DA OPEN - .DA GETEVENT - .DA COUT +DRV.CS.START cld + jmp (.1,x) +.1 .DA STATUS + .DA BADCALL + .DA BADCALL + .DA BADCALL + .DA CONTROL + .DA BADCALL + .DA OPEN .DA CLOSE - .DA GETINFO - .DA IRQ -L.DEVINFO .DA DEVINFO + .DA READ + .DA WRITE +L.STAT .DA STAT .DA 0 end or relocation *-------------------------------------- +BADCALL lda #MLI.ERR.BADCALL + sec + rts +*-------------------------------------- +STATUS >LDYA L.STAT + clc + rts +*-------------------------------------- +CONTROL clc + rts +*-------------------------------------- OPEN ldx DEVSLOTn0 php @@ -132,7 +144,15 @@ OPEN ldx DEVSLOTn0 clc rts *-------------------------------------- -GETEVENT ldx DEVSLOTn0 +CLOSE php + sei + ldx DEVSLOTn0 + stz SSC.RESET,x + plp + clc + rts +*-------------------------------------- +READ ldx DEVSLOTn0 lda SSC.STATUS,x bmi * @@ -140,16 +160,6 @@ GETEVENT ldx DEVSLOTn0 beq .9 lda SSC.DATA,x - ldy #S.EVT.DATA - sta (pEvent),y - - iny - lda #0 - sta (pEvent),y - - lda #S.EVT.F.KEY - sta (pEvent) - clc rts @@ -157,16 +167,17 @@ GETEVENT ldx DEVSLOTn0 sec rts *-------------------------------------- -COUT pha +WRITE pha ldx DEVSLOTn0 + .1 lda SSC.STATUS,x - bmi * - and #SSC.STATUS.DCD+SSC.STATUS.DSR - beq .9 + +* and #SSC.STATUS.DCD+SSC.STATUS.DSR +* beq .9 and #SSC.STATUS.TDRE Outgoing char? - bne .1 + beq .1 pla sta SSC.DATA,x @@ -178,24 +189,15 @@ COUT pha sec rts *-------------------------------------- -CLOSE php - sei - ldx DEVSLOTn0 - stz SSC.RESET,x - plp - clc - rts -*-------------------------------------- -GETINFO >LDYA L.DEVINFO -IRQ clc - rts -*-------------------------------------- DRV.CS.END -DEVSLOT0n .BS 1 -DEVSLOTCn .BS 1 DEVSLOTn0 .BS 1 -DEVINFO .DA #S.DEVINFO.TYPE.CHAR +*-------------------------------------- +STAT .DA #S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ + .DA #0,#0,#0 + >PSTR "Serial Card/Port" + .DA #S.DEVSTAT.TYPE.CHAR .DA #0 + .DA $0900 *-------------------------------------- MAN SAVE DRV/SSC.DRV.S diff --git a/DRV/SSC.I.DRV.S.txt b/DRV/SSC.I.DRV.S.txt index bc3f3f2e..f81a050a 100644 --- a/DRV/SSC.I.DRV.S.txt +++ b/DRV/SSC.I.DRV.S.txt @@ -10,6 +10,7 @@ AUTO 6 *-------------------------------------- .INB /A2OSX.DEV/INC/MACROS.I .INB /A2OSX.DEV/INC/A2OSX.I + .INB /A2OSX.DEV/INC/PRODOS.I *-------------------------------------- BUF.SIZE .EQ $20 BUF.MASK .EQ $1F @@ -18,10 +19,6 @@ ZPTmpPtr1 .EQ ZPDRV *-------------------------------------- .INB DRV/X.SER.6551.S *-------------------------------------- -* see this : -* http://mirrors.apple2.org.za/apple.cabi.net/Applications/Telcom/SSC.DRIVER/SSC.DRIVER.TXT -* About False read issue in SSC -*-------------------------------------- * File Header (16 Bytes) *-------------------------------------- CS.START cld @@ -68,7 +65,7 @@ Dev.Detect sta hArgs >LDYA L.MSG.DETECT.KO >SYSCALL CPrintFYA - lda #DEVMGR.ERRNOHW Not Found in any slot, exiting + lda #MLI.ERR.NODEV Not Found in any slot, exiting sec rts @@ -104,25 +101,39 @@ hArgs .BS 1 *-------------------------------------- * Device Header (16 Bytes) *-------------------------------------- -DEV.HEADER cld - jmp (DRV.CS.START,x) - .HS 00 DevID - .DA #S.DEV.F.IRQ+S.DEV.F.EVENT+S.DEV.F.COUT+S.DEV.F.CHAR +DEV.HEADER .DA DRV.CS.START + .DA #S.DEV.S.WRITE+S.DEV.S.READ+S.DEV.S.IRQ DEV.HEADER.NAME >PSTR "COM1" NAME - .HS 00 - .HS 00.00.00.00 *-------------------------------------- * Driver Code *-------------------------------------- -DRV.CS.START .DA OPEN - .DA GETEVENT - .DA COUT +DRV.CS.START cld + jmp (.1,x) +.1 .DA STATUS + .DA BADCALL + .DA BADCALL + .DA BADCALL + .DA CONTROL + .DA BADCALL + .DA OPEN .DA CLOSE - .DA GETINFO + .DA READ + .DA WRITE .DA IRQ -L.DEVINFO .DA DEVINFO +L.STAT .DA STAT .DA 0 end or relocation *-------------------------------------- +BADCALL lda #MLI.ERR.BADCALL + sec + rts +*-------------------------------------- +STATUS >LDYA L.STAT + clc + rts +*-------------------------------------- +CONTROL clc + rts +*-------------------------------------- OPEN php sei ldx DEVSLOTn0 @@ -137,7 +148,7 @@ OPEN php lda #SSC.CTL.CLKINT+SSC.CTL.B9600 sta SSC.CTL,x - lda #SSC.CMD.TE+SSC.CMD.DTR + lda #SSC.CMD.TEIRQ+SSC.CMD.TE+SSC.CMD.DTR sta SSC.CMD,x lda SSC.DATA,x discard any garbage byte @@ -147,31 +158,30 @@ OPEN php clc rts *-------------------------------------- -GETEVENT php +CLOSE php + sei + ldx DEVSLOTn0 + stz SSC.RESET,x + plp + clc + rts +*-------------------------------------- +READ php sei lda INBUF.CNT beq .9 ldx INBUF.PTR - lda INBUF,x - - ldy #S.EVT.DATA - sta (pEvent),y - - iny - lda #0 - sta (pEvent),y - - lda #S.EVT.F.KEY - sta (pEvent) - + ldy INBUF,x + txa inc and #BUF.MASK sta INBUF.PTR dec INBUF.CNT + tya plp clc rts @@ -181,31 +191,34 @@ GETEVENT php sec rts *-------------------------------------- -COUT php +WRITE php sei tay save char in Y + +* ldx DEVSLOTn0 +* lda SSC.STATUS,x +* bit #SSC.STATUS.DCD+SSC.STATUS.DSR true when 0 +* bne .9 + + ldx OUTBUF.CNT Buffer Empty? + bne .11 not empty, queue char ldx DEVSLOTn0 lda SSC.STATUS,x - bit #SSC.STATUS.DCD+SSC.STATUS.DSR true when 0 - bne .9 - - ldx OUTBUF.CNT Buffer Empty? - bne .10 not empty, queue char - - and #SSC.STATUS.TDRE Register Empty ? + and #SSC.STATUS.TDRE Register Empty ? beq .10 not empty, queue char tya yes, write directly to ACIA - ldx DEV.DATA.BFFF - sta $BFFF,x + sta SSC.DATA,x plp clc rts -.10 cpx #BUF.SIZE +.10 ldx OUTBUF.CNT + +.11 cpx #BUF.SIZE beq .9 Buffer Full!! lda OUTBUF.PTR @@ -220,8 +233,8 @@ COUT php inc OUTBUF.CNT * ldx DEVSLOTn0 - lda #SSC.CMD.TEIRQ+SSC.CMD.DTR - sta SSC.CMD,x +* lda #SSC.CMD.TEIRQ+SSC.CMD.DTR +* sta SSC.CMD,x plp clc rts @@ -230,35 +243,25 @@ COUT php sec rts *-------------------------------------- -CLOSE php - sei - ldx DEVSLOTn0 - stz SSC.RESET,x - plp - clc - rts -*-------------------------------------- -GETINFO >LDYA L.DEVINFO - clc - rts -*-------------------------------------- * IRQ Handler * on exit, CC if handled *-------------------------------------- -IRQ ldx DEVSLOTn0 - lda SSC.STATUS,x IRQ from this device ? -* bpl .9 no, exit !!!!Applewin bug #308!!!! +IRQ stz .8+1 + +.1 ldx DEVSLOTn0 + lda SSC.STATUS,x +* bpl .9 IRQ from this device ? no, exit !!!!Applewin bug #308!!!! bit #SSC.STATUS.RDRF incoming char? - beq .1 + beq .3 *------------ IRQ In - ldy SSC.DATA,x read data to clear IRQ + ldy SSC.DATA,x read data to clear IRQ lda INBUF.CNT cmp #BUF.SIZE - beq .8 buffer full, discard + beq .8 buffer full, discard and exit clc adc INBUF.PTR @@ -268,40 +271,40 @@ IRQ ldx DEVSLOTn0 sta INBUF,x inc INBUF.CNT - bra IRQ start over if + + lda #$ff + sta .8+1 + + bra .1 *------------ IRQ Out -.1 bit #SSC.STATUS.TDRE - beq .2 no transmit, no recieve, CTS changed! +.2 ldx DEVSLOTn0 + lda SSC.STATUS,x + +.3 bit #SSC.STATUS.TDRE + beq .8 no transmition possible.... lda OUTBUF.CNT something to transmit ? - beq .11 no, disable IRQ and exit + beq .8 - ldx OUTBUF.PTR - lda OUTBUF,x - ldy DEV.DATA.BFFF - sta $BFFF,y + ldy OUTBUF.PTR + lda OUTBUF,y + + sta SSC.DATA,x dec OUTBUF.CNT - txa get back OUTBUF.PTR + tya get back OUTBUF.PTR inc and #BUF.MASK sta OUTBUF.PTR - clc - rts -.11 lda #SSC.CMD.TE+SSC.CMD.DTR - sta SSC.CMD,x + bra .2 + +.8 lda #$ff did we finally handle and IRQ condtion ? + beq .9 clc rts - -*------------ IRQ CTS High - -.2 - -.8 clc - rts .9 sec rts @@ -317,8 +320,14 @@ OUTBUF.PTR .BS 1 OUTBUF.CNT .BS 1 INBUF .BS BUF.SIZE OUTBUF .BS BUF.SIZE -DEVINFO .DA #S.DEVINFO.TYPE.CHAR +*-------------------------------------- +STAT .DA #S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ+S.DEV.S.IRQ + .DA #0,#0,#0 + >PSTR "Serial Card/Port" + .DA #S.DEVSTAT.TYPE.CHAR .DA #0 + .DA $0900 + *-------------------------------------- MAN SAVE DRV/SSC.DRV.I.S diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index a794e04d..d4067991 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -412,8 +412,8 @@ S.DEV.S.WENABL .EQ %00000100 S.DEV.S.IRQ .EQ %00000010 S.DEV.S.OPENED .EQ %00000001 S.DEV.F .EQ 3 -S.DEV.F.IRQ .EQ %10000000 Device is irq driven -S.DEV.F.EVENT .EQ %01000000 Device is event driven +*S.DEV.F.IRQ .EQ %10000000 Device is irq driven +*S.DEV.F.EVENT .EQ %01000000 Device is event driven S.DEV.F.LEN .EQ %00000111 Len S.DEV.NAME .EQ 4 4 MAX * @@ -429,6 +429,7 @@ DEVMGR.OPEN .EQ 12 DEVMGR.CLOSE .EQ 14 DEVMGR.READ .EQ 16 DEVMGR.WRITE .EQ 18 +DEVMGR.IRQ .EQ 20 *-------------------------------------- S.DEVSTAT.S .EQ 0 S.DEVSTAT.S.BLOCK .EQ %10000000 diff --git a/README.md b/README.md index 9812ea4d..cdefbf7d 100644 --- a/README.md +++ b/README.md @@ -115,9 +115,9 @@ note : '$VAR' does NOT expand Variable | Name | Status | Comment | K.Ver | | ---- | ------ | ------- | ----- | | Console.DRV | Working | ANSI support in Progress. | 0.9 | +| SSC.DRV | Working | Apple "Super Serial Card" Driver | 0.9 | +| SSC.I.DRV | Working | Apple "Super Serial Card" Driver (IRQ enabled) | 0.9 | | PIC.DRV | In Progress | Apple "Parallel Interface Card" Driver, renamed from PPIC.DRV | 0.8 | -| SSC.DRV | In Progress | Apple "Super Serial Card" Driver | 0.8 | -| SSC.I.DRV | In Progress | Apple "Super Serial Card" Driver (IRQ enabled) | 0.8 | | Mouse.DRV | Working | Apple Mouse Card,//c Mouse Port | 0.9 | | DHGR.DRV | In Progress | except bitblt... | 0.8 | | Uthernet.DRV | Working | | 0.9 | diff --git a/SYS/KERNEL.S.INIT3.txt b/SYS/KERNEL.S.INIT3.txt index 306f5362..0d3c18bb 100644 --- a/SYS/KERNEL.S.INIT3.txt +++ b/SYS/KERNEL.S.INIT3.txt @@ -135,7 +135,7 @@ DevMgr.NUL .DA DevMgr.NUL.Code .HS 00 NAME must Be 4 bytes long *-------------------------------------- DevMgr.SYS .DA DevMgr.SYS.Code - .DA #S.DEV.S.WRITE+S.DEV.S.READ+3 + .DA #S.DEV.S.WRITE+S.DEV.S.READ .DA #3 .AS "SYS" NAME .HS 00 NAME must Be 4 bytes long diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index ea42339f..a3c6332f 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -1,6 +1,6 @@ PR#3 PREFIX /A2OSX.SRC -NEW +LOMEM $A00 INC 1 AUTO 6 .LIST OFF @@ -61,25 +61,23 @@ K.IrqHandler >LDYAI DevMgr.Table ldx DevMgr.Count -.1 lda ($fe) End Of Table ? - sec - beq .8 - - ldy #S.DEV.F +.1 ldy #S.DEV.S lda ($fe),y - and #S.DEV.F.IRQ + and #S.DEV.S.IRQ beq .2 - + phx jsr K.IrqHandlerJMP plx bcc .8 CC, IRQ cleared by device -.2 lda $fe CS, - adc #S.DEV-1 +.2 lda $fe + clc + adc #S.DEV sta $fe bcc .3 inc $ff + .3 dex bne .1 @@ -87,8 +85,13 @@ K.IrqHandler >LDYAI DevMgr.Table .8 rts *-------------------------------------- -K.IrqHandlerJMP ldx #DEVMGR.READ - jmp ($fe) +K.IrqHandlerJMP lda ($fe) + sta .1+1 + ldy #1 + lda ($fe),y + sta .1+2 + ldx #DEVMGR.IRQ +.1 jmp $ffff *-------------------------------------- MAN SAVE SYS/KERNEL.S.IRQ