Kernel version 0.9 : COM drivers and IRQ related Fixes

This commit is contained in:
Rémy GIBERT 2017-02-02 18:30:07 +01:00
parent 2f13635422
commit 41b21d8091
11 changed files with 166 additions and 147 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 |

View File

@ -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

View File

@ -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