mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-28 10:52:33 +00:00
74acfeccd1
SH : fiw for line wrap ProDOS.FX : removed a strange bug inherited from 2.0.3 trashing FCBs
878 lines
14 KiB
Plaintext
878 lines
14 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
.OP 65C02
|
||
.OR $2000
|
||
*--------------------------------------
|
||
.DO SSCIRQ=1
|
||
.TF drv/ssc.i.drv
|
||
.ELSE
|
||
.TF drv/ssc.drv
|
||
.FIN
|
||
*--------------------------------------
|
||
.DUMMY
|
||
.OR ZPBIN
|
||
ZS.START
|
||
ZPArgPtr .BS 2
|
||
ZPSlotPtr .BS 2
|
||
ZS.END .ED
|
||
*--------------------------------------
|
||
* File Header (16 Bytes)
|
||
*--------------------------------------
|
||
CS.START cld
|
||
jmp Dev.Detect cld,jmp abs=DRV
|
||
.DA #$61 6502,Level 1 (65c02)
|
||
.DA #1 DRV Layout Version 1
|
||
.DA 0
|
||
.DA CS.END-CS.START Code Length
|
||
.DA 0
|
||
.DA 0
|
||
.DA 0
|
||
*--------------------------------------
|
||
* Relocation Table
|
||
*--------------------------------------
|
||
L.MSG.DETECT .DA MSG.DETECT
|
||
L.MSG.DETECT.OK .DA MSG.DETECT.OK
|
||
L.MSG.DETECT.KO .DA MSG.DETECT.KO
|
||
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 >STYA ZPArgPtr
|
||
|
||
>LDYA L.MSG.DETECT
|
||
>SYSCALL PutS
|
||
stz ZPSlotPtr
|
||
|
||
lda #$C1
|
||
sta ZPSlotPtr+1
|
||
|
||
.1 and #$0f
|
||
tay
|
||
lda A2osX.S-1,y
|
||
bne .3
|
||
|
||
ldx #DEVSIG.Length-1
|
||
|
||
.2 ldy DEVSIG.Offset,x
|
||
lda (ZPSlotPtr),y
|
||
cmp DEVSIG.Value,x
|
||
bne .3
|
||
|
||
dex
|
||
bpl .2
|
||
|
||
bra .4
|
||
|
||
.3 inc FD.DEV.NAME+3
|
||
inc ZPSlotPtr+1 no match, try next slot....
|
||
lda ZPSlotPtr+1
|
||
cmp #$C8
|
||
bne .1
|
||
|
||
>LDYA L.MSG.DETECT.KO
|
||
>SYSCALL PutS
|
||
|
||
lda #MLI.E.NODEV Not Found in any slot, exiting
|
||
sec
|
||
.99 rts
|
||
|
||
.4 lda ZPSlotPtr+1
|
||
asl
|
||
asl
|
||
asl
|
||
asl
|
||
clc
|
||
adc #$8F
|
||
sta DEVSLOTn08F
|
||
|
||
jsr Dev.ParseArgs
|
||
bcs .99
|
||
|
||
.8 >PUSHW L.MSG.DETECT.OK
|
||
>PUSHW L.FD.DEV.NAME
|
||
>PUSHBI 2
|
||
>SYSCALL PrintF
|
||
|
||
>PUSHWI DRV.END
|
||
>PUSHWI DRV.CS.END-DRV.CS.START
|
||
>PUSHWI DRV.CS.START
|
||
>LDYA L.DRV.CS.START
|
||
>SYSCALL InsDrv
|
||
bcs .9
|
||
|
||
>STYA FD.DEV+S.FD.DEV.DRVPTR
|
||
|
||
>PUSHW L.FD.DEV
|
||
>PUSHW L.FD.DEV.NAME
|
||
>SYSCALL MKDev
|
||
bcs .9
|
||
|
||
lda ZPSlotPtr+1
|
||
and #$0F
|
||
tay
|
||
lda #A2osX.S.COM
|
||
sta A2osX.S-1,y
|
||
|
||
* clc
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
Dev.ParseArgs lda (ZPArgPtr)
|
||
bne .1
|
||
|
||
clc
|
||
rts
|
||
|
||
.1 stz DCB+S.DCB.COM.BAUD
|
||
stz DCB+S.DCB.COM.BAUD+1
|
||
stz DCB+S.DCB.COM.BAUD+2
|
||
stz DCB+S.DCB.COM.BAUD+3
|
||
|
||
.2 jsr DevNextChar
|
||
beq .90
|
||
|
||
cmp #','
|
||
beq .3
|
||
|
||
jsr Dev.IsDigit
|
||
bcs .90
|
||
|
||
jsr Dev.BaudT10pA
|
||
bra .2
|
||
|
||
.3 jsr Dev.CheckBaud
|
||
bcs .99
|
||
|
||
jsr DevNextChar
|
||
beq .99
|
||
|
||
ldx #P2.Cnt-1
|
||
|
||
.4 cmp P2,x
|
||
beq .5
|
||
|
||
dex
|
||
bpl .4
|
||
|
||
.90 bra .99
|
||
|
||
.5 lda #%11100000
|
||
trb DEVCMD
|
||
|
||
txa
|
||
asl
|
||
asl
|
||
asl
|
||
asl
|
||
asl
|
||
tsb DEVCMD
|
||
|
||
jsr DevCheckSep
|
||
bcs .99
|
||
|
||
ldx #P3.Cnt-1
|
||
|
||
.6 cmp P3,x
|
||
beq .7
|
||
|
||
dex
|
||
bpl .6
|
||
|
||
bra .99
|
||
|
||
.7 lda #%01100000
|
||
trb DEVCTL
|
||
|
||
txa
|
||
asl
|
||
asl
|
||
asl
|
||
asl
|
||
asl
|
||
tsb DEVCTL
|
||
|
||
jsr DevCheckSep
|
||
bcs .99
|
||
|
||
ldx #P4.Cnt-1
|
||
|
||
.8 cmp P4,x
|
||
beq .9
|
||
|
||
dex
|
||
bpl .8
|
||
|
||
bra .99
|
||
|
||
.9 lda #%10000000
|
||
trb DEVCTL
|
||
|
||
txa
|
||
rol
|
||
rol
|
||
tsb DEVCTL
|
||
|
||
jsr DevCheckSep
|
||
bcs .99
|
||
|
||
ldx #P5.Cnt-1
|
||
|
||
.10 cmp P5,x
|
||
beq .11
|
||
|
||
dex
|
||
bpl .10
|
||
|
||
bra .99
|
||
|
||
.11 stx DEVFLOWCTRL
|
||
|
||
clc
|
||
rts
|
||
|
||
.99 lda #E.SYN
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
DevCheckSep jsr DevNextChar
|
||
beq .9
|
||
|
||
cmp #','
|
||
bne .9
|
||
|
||
jsr DevNextChar
|
||
beq .9
|
||
|
||
clc
|
||
rts
|
||
|
||
.9 sec
|
||
rts
|
||
*--------------------------------------
|
||
DevNextChar lda (ZPArgPtr)
|
||
beq .9
|
||
|
||
inc ZPArgPtr
|
||
bne .9
|
||
|
||
inc ZPArgPtr+1
|
||
.9 rts
|
||
*--------------------------------------
|
||
Dev.IsDigit cmp #'0'
|
||
bcc .9
|
||
|
||
cmp #'9'+1
|
||
bcs .99
|
||
|
||
and #$0F
|
||
rts
|
||
|
||
.9 sec
|
||
.99 rts
|
||
*--------------------------------------
|
||
Dev.BaudT10pA pha
|
||
|
||
>PUSHL DCB+S.DCB.COM.BAUD
|
||
>PUSHBI 0
|
||
>PUSHBI 0
|
||
>PUSHBI 0
|
||
>PUSHBI 10
|
||
>FPU uMUL
|
||
|
||
>PUSHBI 0
|
||
>PUSHBI 0
|
||
>PUSHBI 0
|
||
pla
|
||
>PUSHA
|
||
>FPU uADD
|
||
>PULLL DCB+S.DCB.COM.BAUD
|
||
rts
|
||
*--------------------------------------
|
||
Dev.CheckBaud ldx #0
|
||
|
||
.1 txa
|
||
asl
|
||
asl
|
||
tay
|
||
|
||
lda DCB+S.DCB.COM.BAUD
|
||
cmp P1,y
|
||
bne .7
|
||
|
||
lda DCB+S.DCB.COM.BAUD+1
|
||
cmp P1+1,y
|
||
bne .7
|
||
|
||
lda DCB+S.DCB.COM.BAUD+2
|
||
cmp P1+2,y
|
||
bne .7
|
||
|
||
lda DCB+S.DCB.COM.BAUD+3
|
||
cmp P1+3,y
|
||
bne .7
|
||
|
||
lda #$F
|
||
trb DEVCTL
|
||
|
||
txa
|
||
tsb DEVCTL
|
||
|
||
clc
|
||
rts
|
||
|
||
.7 inx
|
||
cpx #P1.Cnt
|
||
bcc .1
|
||
|
||
rts
|
||
*--------------------------------------
|
||
CS.END
|
||
DEVSIG.Offset .HS 05070B0C
|
||
DEVSIG.Value .HS 38180131
|
||
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
|
||
MSG.DETECT .CS "Apple SSC (Super Serial Card,//c Serial Port) Driver"
|
||
.DO SSCIRQ=1
|
||
.CS " (IRQ Enabled)"
|
||
.FIN
|
||
.CZ "."
|
||
MSG.DETECT.OK .CZ "SSC Installed As Device : %s\r\n"
|
||
MSG.DETECT.KO .CZ "No SSC Found."
|
||
*--------------------------------------
|
||
P1 .DA >115200 Baud
|
||
.DA >50
|
||
.DA >75
|
||
.DA >110
|
||
.DA >135
|
||
.DA >150
|
||
.DA >300
|
||
.DA >600
|
||
.DA >1200
|
||
.DA >1800
|
||
.DA >2400
|
||
.DA >3600
|
||
.DA >4800
|
||
.DA >7200
|
||
.DA >9600
|
||
.DA >19200
|
||
P1.Cnt .EQ 16
|
||
*--------------------------------------
|
||
P2 .AS "NOEMS" Parity
|
||
P2.Cnt .EQ *-P2
|
||
*--------------------------------------
|
||
P3 .AS "8765" Data
|
||
P3.Cnt .EQ *-P3
|
||
*--------------------------------------
|
||
P4 .AS "12" Stop
|
||
P4.Cnt .EQ *-P4
|
||
*--------------------------------------
|
||
P5 .AS "NHX" flow Control
|
||
P5.Cnt .EQ *-P5
|
||
*--------------------------------------
|
||
FD.DEV .DA #S.FD.T.CDEV
|
||
.DA #0 HANDLER
|
||
.DA #0 BUSID
|
||
.DA #0 DEVID
|
||
.DA 0 BUSPTR
|
||
.BS 2 DRVPTR
|
||
.DA 0 DCBPTR
|
||
.DA 0 BUFPTR
|
||
FD.DEV.NAME .AZ "com1"
|
||
*--------------------------------------
|
||
* Driver Code
|
||
*--------------------------------------
|
||
ZPIOCTL .EQ ZPDRV
|
||
ZPBufPtr .EQ ZPDRV+2
|
||
ZPCount .EQ ZPDRV+4
|
||
ZPCount2 .EQ ZPDRV+6
|
||
*--------------------------------------
|
||
DRV.CS.START cld
|
||
jmp (.1,x)
|
||
.1 .DA STATUS
|
||
.DA A2osX.BADCALL
|
||
.DA A2osX.BADCALL
|
||
.DA A2osX.BADCALL
|
||
.DA CONTROL
|
||
.DA A2osX.BADCALL
|
||
.DA OPEN
|
||
.DA CLOSE
|
||
.DA READ
|
||
.DA WRITE
|
||
.DO SSCIRQ=1
|
||
.DA IRQ
|
||
.FIN
|
||
.DA 0 end or relocation
|
||
*--------------------------------------
|
||
STATUS jsr STATUS.CONTROL.Init
|
||
ldy #S.IOCTL.S
|
||
lda (ZPIOCTL),y
|
||
beq .1
|
||
|
||
cmp #S.IOCTL.S.GETDIB
|
||
bne STATUS.DCB
|
||
|
||
ldy #S.DIB-1
|
||
.HS 2C bit abs
|
||
.1 ldy #3
|
||
|
||
.2 lda DIB,y
|
||
sta (ZPBufPtr),y
|
||
dey
|
||
bpl .2
|
||
|
||
clc
|
||
rts
|
||
|
||
STATUS.DCB cmp #S.IOCTL.S.GETDCB
|
||
bne .3
|
||
|
||
ldy #S.DCB.COM-1
|
||
|
||
.2 lda DCB,y
|
||
sta (ZPBufPtr),y
|
||
dey
|
||
bpl .2
|
||
|
||
clc
|
||
rts
|
||
|
||
.3 cmp #S.IOCTL.S.EOF
|
||
bne STATUS.9
|
||
|
||
lda DIB+S.DIB.S
|
||
and #S.DIB.S.OPENED
|
||
beq OPEN.E
|
||
|
||
.DO SSCIRQ=1
|
||
lda INBUF.TAIL
|
||
eor INBUF.HEAD
|
||
beq .4 NO DATA? eof = TRUE
|
||
|
||
lda #1
|
||
|
||
.4 dec
|
||
clc
|
||
rts
|
||
.ELSE
|
||
|
||
ldx DEVSLOTn08F
|
||
lda SSC.STATUS-$8F,x
|
||
and #SSC.STATUS.RDRF
|
||
beq .4
|
||
|
||
lda #1
|
||
|
||
.4 dec
|
||
.FIN
|
||
.8 clc
|
||
rts
|
||
|
||
STATUS.9 lda #MLI.E.BADCTL
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CONTROL jsr STATUS.CONTROL.Init
|
||
|
||
ldy #S.IOCTL.C
|
||
lda (ZPIOCTL),y
|
||
cmp #S.IOCTL.C.SETDCB
|
||
bne STATUS.9
|
||
|
||
ldy #S.DCB.COM-1
|
||
|
||
.2 lda (ZPBufPtr),y
|
||
sta DCB,y
|
||
dey
|
||
bpl .2
|
||
*--------------------------------------
|
||
OPEN lda DIB+S.DIB.S
|
||
bit #S.DIB.S.OPENED
|
||
beq OPEN.1
|
||
|
||
OPEN.E lda #MLI.E.OPEN
|
||
sec
|
||
rts
|
||
|
||
OPEN.1 php
|
||
sei
|
||
|
||
.DO SSCIRQ=1
|
||
|
||
>LDYAI 256
|
||
>SYSCALL2 NewStkObj
|
||
bcs .99
|
||
|
||
stx hINBUF
|
||
>STYA READ.INBUF+1
|
||
>STYA IRQ.INBUF+1
|
||
|
||
>LDYAI 256
|
||
>SYSCALL2 NewStkObj
|
||
bcs .90
|
||
|
||
stx hOUTBUF
|
||
>STYA WRITE.OUTBUF+1
|
||
>STYA IRQ.OUTBUF+1
|
||
|
||
stz INBUF.HEAD
|
||
stz INBUF.TAIL
|
||
stz OUTBUF.HEAD
|
||
stz OUTBUF.TAIL
|
||
|
||
.FIN
|
||
|
||
ldx DEVSLOTn08F
|
||
stz SSC.RESET-$8F,x
|
||
|
||
lda DEVCTL
|
||
sta SSC.CTL-$8F,x
|
||
|
||
lda DEVCMD
|
||
sta SSC.CMD-$8F,x
|
||
|
||
lda SSC.DATA-$8F,x discard any garbage byte
|
||
lda SSC.STATUS-$8F,x clear any IRQ pending
|
||
|
||
lda #S.DIB.S.OPENED
|
||
tsb DIB+S.DIB.S
|
||
|
||
plp
|
||
clc
|
||
rts
|
||
|
||
.DO SSCIRQ=1
|
||
|
||
.90 pha
|
||
lda hINBUF
|
||
>SYSCALL FreeStkObj
|
||
pla
|
||
|
||
.99 plp
|
||
sec
|
||
rts
|
||
|
||
.FIN
|
||
*--------------------------------------
|
||
CLOSE lda DIB+S.DIB.S
|
||
bit #S.DIB.S.OPENED
|
||
beq OPEN.E
|
||
|
||
php
|
||
sei
|
||
ldx DEVSLOTn08F
|
||
stz SSC.RESET-$8F,x
|
||
|
||
.DO SSCIRQ=1
|
||
lda hINBUF
|
||
>SYSCALL FreeStkObj
|
||
lda hOUTBUF
|
||
>SYSCALL FreeStkObj
|
||
.FIN
|
||
|
||
lda #S.DIB.S.OPENED
|
||
trb DIB+S.DIB.S
|
||
|
||
plp
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
READ php
|
||
sei
|
||
jsr READ.WRITE.Init
|
||
|
||
stz ZPCount2
|
||
stz ZPCount2+1
|
||
|
||
.DO SSCIRQ=1
|
||
sta IO.SETREADAUX
|
||
.FIN
|
||
|
||
READ.10 inc ZPCount
|
||
bne READ.11
|
||
|
||
inc ZPCount+1
|
||
beq READ.8
|
||
|
||
READ.11 .DO SSCIRQ=1
|
||
ldy INBUF.TAIL
|
||
cpy INBUF.HEAD
|
||
beq READ.2
|
||
|
||
READ.INBUF lda $FFFF,y SELF MODIFIED
|
||
inc INBUF.TAIL
|
||
|
||
sta (ZPBufPtr)
|
||
inc ZPBufPtr
|
||
bne READ.12
|
||
|
||
inc ZPBufPtr+1
|
||
|
||
READ.12 inc ZPCount2
|
||
bne READ.10
|
||
|
||
inc ZPCount2+1
|
||
bra READ.10
|
||
.FIN
|
||
|
||
READ.2 lda SSC.STATUS-$8F,x
|
||
bit #SSC.STATUS.nDCD true when 0
|
||
bne READ.9
|
||
|
||
bit #SSC.STATUS.RDRF incoming char?
|
||
beq READ.8
|
||
|
||
lda SSC.DATA-$8F,x
|
||
sta (ZPBufPtr)
|
||
inc ZPBufPtr
|
||
bne READ.13
|
||
|
||
inc ZPBufPtr+1
|
||
|
||
READ.13 inc ZPCount2
|
||
bne READ.2
|
||
|
||
inc ZPCount2+1
|
||
bra READ.2
|
||
|
||
READ.8 lda ZPCount2
|
||
bne READ.81
|
||
|
||
ora ZPCount2+1
|
||
beq READ.99
|
||
|
||
lda ZPCount2
|
||
|
||
READ.81 ldy #S.IOCTL.BYTECNT
|
||
sta (ZPIOCTL),y
|
||
iny
|
||
lda ZPCount2+1
|
||
sta (ZPIOCTL),y
|
||
|
||
.DO SSCIRQ=1
|
||
sta IO.CLRREADAUX
|
||
.FIN
|
||
plp
|
||
clc
|
||
rts
|
||
|
||
READ.9 lda #MLI.E.IO
|
||
.HS 2C BIT ABS
|
||
|
||
READ.99 lda #E.NODATA
|
||
.DO SSCIRQ=1
|
||
sta IO.CLRREADAUX
|
||
.FIN
|
||
plp
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
WRITE php
|
||
sei
|
||
jsr READ.WRITE.Init
|
||
|
||
.DO SSCIRQ=1
|
||
sta IO.SETWRITEAUX
|
||
.FIN
|
||
|
||
WRITE.2 inc ZPCount
|
||
bne WRITE.3
|
||
|
||
inc ZPCount+1
|
||
beq WRITE.8
|
||
|
||
WRITE.3 .DO SSCIRQ=1
|
||
lda SSC.STATUS-$8F,x
|
||
bit #SSC.STATUS.nDCD true when 0
|
||
bne WRITE.9
|
||
|
||
lda OUTBUF.HEAD
|
||
cmp OUTBUF.TAIL Buffer Empty?
|
||
bne WRITE.6 not empty, queue char
|
||
|
||
lda SSC.STATUS-$8F,x
|
||
and #SSC.STATUS.TDRE Register Empty ?
|
||
beq WRITE.5 not empty, queue char
|
||
|
||
lda (ZPBufPtr) yes, write directly to ACIA
|
||
sta SSC.DATA-$8F,x
|
||
inc ZPBufPtr
|
||
bne WRITE.2
|
||
|
||
inc ZPBufPtr+1
|
||
|
||
bra WRITE.2
|
||
|
||
WRITE.5 lda OUTBUF.HEAD
|
||
WRITE.6 tay
|
||
inc
|
||
cmp OUTBUF.TAIL
|
||
beq WRITE.99 Buffer Full!!
|
||
|
||
sta OUTBUF.HEAD
|
||
lda (ZPBufPtr)
|
||
WRITE.OUTBUF sta $FFFF,y SELF MODIFIED
|
||
inc ZPBufPtr
|
||
bne WRITE.2
|
||
|
||
inc ZPBufPtr+1
|
||
bra WRITE.2
|
||
|
||
.ELSE
|
||
WRITE.4 lda SSC.STATUS-$8F,x
|
||
bit #SSC.STATUS.nDCD true when 0
|
||
bne WRITE.9
|
||
|
||
bit #SSC.STATUS.TDRE Outgoing char?
|
||
beq WRITE.4
|
||
|
||
lda (ZPBufPtr)
|
||
sta SSC.DATA-$8F,x
|
||
inc ZPBufPtr
|
||
bne WRITE.2
|
||
|
||
inc ZPBufPtr+1
|
||
bra WRITE.2
|
||
.FIN
|
||
|
||
WRITE.8 .DO SSCIRQ=1
|
||
sta IO.CLRWRITEAUX
|
||
.FIN
|
||
plp
|
||
clc
|
||
rts
|
||
|
||
WRITE.9 lda #MLI.E.IO
|
||
.HS 2C BIT ABS
|
||
WRITE.99 lda #E.NODATA
|
||
.DO SSCIRQ=1
|
||
sta IO.CLRWRITEAUX
|
||
.FIN
|
||
plp
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
READ.WRITE.Init ldx DEVSLOTn08F
|
||
|
||
STATUS.CONTROL.Init
|
||
>STYA ZPIOCTL
|
||
|
||
ldy #S.IOCTL.BUFPTR
|
||
lda (ZPIOCTL),y
|
||
sta ZPBufPtr
|
||
|
||
iny
|
||
|
||
lda (ZPIOCTL),y
|
||
sta ZPBufPtr+1
|
||
iny #S.IOCTL.BYTECNT
|
||
|
||
lda (ZPIOCTL),y
|
||
eor #$ff
|
||
sta ZPCount
|
||
|
||
iny
|
||
|
||
lda (ZPIOCTL),y
|
||
eor #$ff
|
||
sta ZPCount+1
|
||
rts
|
||
*--------------------------------------
|
||
* IRQ Handler
|
||
* on exit, CC if handled
|
||
*--------------------------------------
|
||
.DO SSCIRQ=1
|
||
IRQ ldx DEVSLOTn08F
|
||
lda SSC.STATUS-$8F,x
|
||
* and #SSC.STATUS.IRQ Useless
|
||
bpl IRQ.9 IRQ from this device ? no, exit !!!!Applewin bug #308!!!!
|
||
|
||
sta IO.SETREADAUX
|
||
sta IO.SETWRITEAUX
|
||
|
||
bit #SSC.STATUS.RDRF incoming char?
|
||
beq IRQ.2
|
||
*------------ IRQ In
|
||
|
||
pha
|
||
lda INBUF.HEAD
|
||
tay save actual head for later
|
||
inc
|
||
cmp INBUF.TAIL
|
||
beq IRQ.1 buffer full, discard and exit
|
||
|
||
sta INBUF.HEAD
|
||
|
||
lda SSC.DATA-$8F,x read data to clear IRQ
|
||
IRQ.INBUF sta $FFFF,y SELF MODIFIED
|
||
|
||
IRQ.1 pla
|
||
*------------ IRQ Out
|
||
IRQ.2 bit #SSC.STATUS.TDRE
|
||
beq IRQ.8 no transmission possible....
|
||
|
||
ldy OUTBUF.TAIL something to transmit ?
|
||
cpy OUTBUF.HEAD
|
||
beq IRQ.8 in that case, HOW TO CLEAR IRQ ????
|
||
|
||
IRQ.OUTBUF lda $FFFF,y SELF MODIFIED
|
||
sta SSC.DATA-$8F,x write data to clear IRQ
|
||
inc OUTBUF.TAIL
|
||
|
||
IRQ.8 sta IO.CLRREADAUX
|
||
sta IO.CLRWRITEAUX
|
||
|
||
clc
|
||
rts
|
||
|
||
IRQ.9 sec
|
||
rts
|
||
.FIN
|
||
*--------------------------------------
|
||
DRV.CS.END
|
||
DEVSLOTn08F .BS 1
|
||
.DO SSCIRQ=1
|
||
DEVCMD .DA #SSC.CMD.NOP+SSC.CMD.TEIRQ+SSC.CMD.DTR
|
||
DEVCTL .DA #SSC.CTL.1S+SSC.CTL.8D+SSC.CTL.CLKINT+SSC.CTL.B9600
|
||
.ELSE
|
||
DEVCMD .DA #SSC.CMD.NOP+SSC.CMD.TE+SSC.CMD.RIRQDIS+SSC.CMD.DTR
|
||
DEVCTL .DA #SSC.CTL.1S+SSC.CTL.8D+SSC.CTL.CLKINT+SSC.CTL.B115200
|
||
.FIN
|
||
DEVFLOWCTRL .BS 1
|
||
.DO SSCIRQ=1
|
||
INBUF.TAIL .BS 1
|
||
INBUF.HEAD .BS 1
|
||
OUTBUF.TAIL .BS 1
|
||
OUTBUF.HEAD .BS 1
|
||
hINBUF .BS 1
|
||
hOUTBUF .BS 1
|
||
.FIN
|
||
*--------------------------------------
|
||
DIB .DO SSCIRQ=1
|
||
.DA #S.DIB.S.WRITE+S.DIB.S.READ+S.DIB.S.IRQ
|
||
.ELSE
|
||
.DA #S.DIB.S.WRITE+S.DIB.S.READ
|
||
.FIN
|
||
.DA #0,#0,#0
|
||
.PS "Serial Card/Port"
|
||
.DA #S.DIB.T.CHAR
|
||
.DA #0
|
||
.DA K.VER
|
||
*--------------------------------------
|
||
DCB .DA #S.DCB.T.COM
|
||
.DA #0 FLAGS
|
||
.DO SSCIRQ=1
|
||
.DA >9600 BAUD (DWORD)
|
||
.ELSE
|
||
.DA >115200
|
||
.FIN
|
||
.DA #8 DATA
|
||
.DA #1 STOP
|
||
.DA #'N' PARITY
|
||
.DA #'N' FLOW
|
||
*--------------------------------------
|
||
DRV.END
|
||
MAN
|
||
SAVE usr/src/shared/x.ssc.drv.s
|
||
LOAD usr/src/drv/ssc.i.drv.s
|
||
ASM
|