Kernel 0.94+

This commit is contained in:
Rémy GIBERT 2021-02-11 23:08:22 +01:00
parent 01d23aec78
commit cc62310a01
22 changed files with 2024 additions and 590 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -122,9 +122,9 @@ CS.RUN.GetMyZone
*--------------------------------------
CS.RUN.GetZoneList
>LDYAI 1024
>STYA.G P.LookupName+$08 BufLen
>STYA.G P.GetZoneList+$08 BufLen
>LDYA BufPtr
>STYA.G P.LookupName+$0A BufPtr
>STYA.G P.GetZoneList+$0A BufPtr
>LDA.G P.GetInfo+$0A BRIDGE
>STA.G P.GetZoneList+$0E

View File

@ -41,6 +41,8 @@ bCustomBlkSize .BS 1
bHighDensity .BS 1
bExtraTrack .BS 1
bVerify .BS 1
TimeOut .BS 1
ZS.END
.ED
*--------------------------------------
@ -50,7 +52,7 @@ CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #0 S.PS.F.EVENT
.DA #S.PS.F.EVENT
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
@ -94,7 +96,7 @@ CS.RUN ldy #S.PS.ARGC
lda Index
>SYSCALL ArgV
bcc .11
jmp .8
.11 >STYA ZPPtr1
@ -102,7 +104,7 @@ CS.RUN ldy #S.PS.ARGC
cmp #'-'
bne .4
ldy #1
ldy #1
lda (ZPPtr1),y
beq .99
@ -116,19 +118,19 @@ CS.RUN ldy #S.PS.ARGC
.2 jsr CS.RUN.CheckOpt
bcs .99
cpy #bCustomBlkSize
bne .1
inc Index
lda Index
>SYSCALL ArgV
bcs .99
>SYSCALL AToI
>STYA BlkCnt
bra .1
.99 >PUSHW L.MSG.USAGE1
>PUSHBI 0
>SYSCALL PrintF
@ -137,7 +139,7 @@ CS.RUN ldy #S.PS.ARGC
>SYSCALL PrintF
lda #E.SYN
sec
.9 rts
.9 rts
.4 lda hDevID
bne .5 Already have a dev...go get VolName
@ -148,7 +150,7 @@ CS.RUN ldy #S.PS.ARGC
stx hDevID
>STYA ZPPtrFD
>LDYA ZPPtr1
>STYA ZPPtrDevName
bra .10
@ -181,7 +183,7 @@ CS.RUN.Format jsr CS.RUN.GetDevStatus
bit bLL
bpl .1
jsr CS.RUN.LL
bcs .9
@ -198,12 +200,12 @@ CS.RUN.Format jsr CS.RUN.GetDevStatus
>LDYA L.MSG.OK
>SYSCALL PutS
bcs .9
.8 >PUSHB DSSS0000
>PUSHW pData
>SYSCALL Online
bcs .9
lda #0
sec
rts
@ -222,10 +224,10 @@ CS.RUN.Format jsr CS.RUN.GetDevStatus
CS.RUN.GetDevStatus
lda bCustomBlkSize
bmi .8
>PUSHB hDevID
>PUSHEA.G DIB
>SYSCALL GetDevStatus
bcs .9
@ -234,7 +236,7 @@ CS.RUN.GetDevStatus
iny
ora (pData),y
beq .9
lda (pData),y
sta BlkCnt+1
stx BlkCnt
@ -251,20 +253,20 @@ CS.RUN.GetDevStatus
CS.RUN.GET.DSSS0000
ldy #S.FD.DEV.BUSID
lda (ZPPtrFD),y 00000SSS
lsr
ror
ror
ror
pha SSS00000
iny S.FD.DEV.DEVID
lda (ZPPtrFD),y
dec 0/1
ror in C
pla
ror
ror
sta DSSS0000
rts
@ -276,15 +278,15 @@ CS.RUN.LL >LDA.G DIB+S.DIB.T
lda #0
bit bExtraTrack
bpl .10
ora #8
.10 bit bHighDensity
bpl .11
ora #16
.11 tay
.11 tay
ldx #0
.12 lda Disk2.Default,y
@ -293,57 +295,58 @@ CS.RUN.LL >LDA.G DIB+S.DIB.T
inx
cpx #6
bne .12
.1 >PUSHW L.MSG.LL
>PUSHW BlkCnt
>PUSHBI 2
>SYSCALL PrintF
bcs .9
>LDA.G DIB+S.DIB.T
cmp #S.DIB.T.DISKII
beq CS.RUN.LL.DISKII
>PUSHB hDevID
>PUSHBI IOCTL.FORMAT
>PUSHEA.G IOCTL
>SYSCALL IOCTL
.9
CS.RUN.LL.RTS rts
*--------------------------------------
CS.RUN.LL.DISKII
jsr CS.RUN.MotorOn
bcs CS.RUN.LL.RTS
>SLEEP
lda #20
jsr CS.RUN.Wait
bcs CS.RUN.LL.RTS
>PUSHB DSSS0000
>LIBCALL hLIBBLKDEV,LIBBLKDEV.D2Recalibrate
lda #20
jsr CS.RUN.Wait
bcs CS.RUN.LL.RTS
>LDYAI 4096
>SYSCALL GetMem
bcs CS.RUN.LL.RTS
stx hTrackBuf
>STYA ZPPtr1
>PUSHB DSSS0000
>LIBCALL hLIBBLKDEV,LIBBLKDEV.D2Recalibrate
bcs CS.RUN.LL.RTS
>SLEEP
ldx #16
jsr CS.RUN.ZeroPtr1 16 sectors filled with 0, give some time to spin up
stz CurTrack
stz CurQTrack
lda TrkCnt
sta Counter
.1 >SLEEP
jsr CS.RUN.CheckCtrlC
.1 jsr CS.RUN.CheckCtrlC
bcs .9
>PUSHW L.MSG.LLDISK2
@ -364,38 +367,53 @@ CS.RUN.LL.DISKII
dec Counter
beq .8
inc CurTrack
lda CurQTrack
* clc
adc Stepping
tax
jsr CS.RUN.SeekToX
bcc .1
bra .1
.9 pha
jsr CS.RUN.MotorOff
pla
sec
rts
.8 ldx #0
jsr CS.RUN.SeekToX
>PUSHW L.MSG.CRLF
.8 >PUSHW L.MSG.CRLF
>PUSHBI 0
>SYSCALL PrintF
bcs .9
jsr CS.RUN.CheckCtrlC
bcs .9
bit bVerify
bpl .80
ldx #0
jsr CS.RUN.SeekToX
jsr CS.RUN.LL.DISKII.V
bcs .9
bcs .99
jsr CS.RUN.MotorOn
.80 jmp CS.RUN.MotorOff
lda #20
jsr CS.RUN.Wait
.80
>PUSHB DSSS0000
>LIBCALL hLIBBLKDEV,LIBBLKDEV.D2Recalibrate
lda #20
jsr CS.RUN.Wait
.99 rts
*--------------------------------------
CS.RUN.LL.DISKII.V
lda hTrackBuf
@ -407,19 +425,19 @@ CS.RUN.LL.DISKII.V
stx hTrackBuf
bra .11
.10 >SYSCALL GetMemPtr
.11 >STYA.G IOCTL+S.IOCTL.BUFPTR
>LDYA BlkCnt
>STYA.G IOCTL+S.IOCTL.BLKNUM
>STZ.G IOCTL+S.IOCTL.BLKNUM
iny
sta (pData),y
stz CurTrack
lda TrkCnt
sta Counter
@ -427,16 +445,16 @@ CS.RUN.LL.DISKII.V
.2 jsr CS.RUN.CheckCtrlC
bcs .9
jsr CS.RUN.LL.DISKII.VBLK
.99 bcs .9
>INCW.G IOCTL+S.IOCTL.BLKNUM
inx
cpx #8
bne .2
inc CurTrack
dec Counter
bne .1
@ -450,21 +468,21 @@ CS.RUN.LL.DISKII.V
.4 jsr CS.RUN.CheckCtrlC
bcs .9
>DECW.G IOCTL+S.IOCTL.BLKNUM
jsr CS.RUN.LL.DISKII.VBLK
bcs .9
dex
bpl .4
dec Counter
bne .3
>LDYA L.MSG.OK
>SYSCALL PutS
.9 rts
*--------------------------------------
CS.RUN.LL.DISKII.VBLK
@ -483,7 +501,7 @@ CS.RUN.LL.DISKII.VBLK
>PUSHEA.G IOCTL
>SYSCALL IOCTL
bcc .8
pha
>PUSHW L.MSG.ERR
pla
@ -517,18 +535,18 @@ CS.RUN.ZeroPtr1 lda ZPPtr1+1
lda #0
tay
.1 sta (ZPPtr1),y
iny
bne .1
inc ZPPtr1+1
dex
bne .1
pla
sta ZPPtr1+1
rts
*--------------------------------------
CS.RUN.InitCat lda CatSize
@ -553,7 +571,7 @@ CS.RUN.InitCat lda CatSize
*--------------------------------------
CS.RUN.BuildCat jsr .7
>LIBCALL hLIBBLKDEV,LIBBLKDEV.GetProDOSCatSize
>LIBCALL hLIBBLKDEV,LIBBLKDEV.GetProDOSCatSize
bcs .9
stx CatBlkCnt
@ -596,7 +614,7 @@ CS.RUN.BuildCat jsr .7
CS.RUN.WriteCat >PUSHW L.MSG.WRITECAT
>PUSHBI 0
>SYSCALL PrintF
>STZ.G IOCTL+S.IOCTL.BLKNUM
iny
sta (pData),y
@ -604,7 +622,7 @@ CS.RUN.WriteCat >PUSHW L.MSG.WRITECAT
.1 >PUSHB hDevID
>PUSHBI IOCTL.WRITEBLOCK
>PUSHEA.G IOCTL
>SYSCALL IOCTL
bcs .9
@ -624,27 +642,34 @@ CS.RUN.WriteCat >PUSHW L.MSG.WRITECAT
clc
.9 rts
*--------------------------------------
CS.DOEVENT sec
CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event?
lda TimeOut
beq .9
dec TimeOut
.9 sec do not discard TIMER event
rts
*--------------------------------------
CS.QUIT lda hCatBuf
beq .1
>SYSCALL FreeMem
.1 lda hTrackBuf
beq .2
>SYSCALL FreeMem
.2 lda hLIBBLKDEV
beq .8
>SYSCALL UnloadLib
.8 clc
rts
*--------------------------------------
CS.RUN.CheckOpt ldy #1
CS.RUN.CheckOpt ldy #1
lda (ZPPtr1),y
ldx #OptionVars-OptionList-1
@ -663,12 +688,22 @@ CS.RUN.CheckOpt ldy #1
clc
rts
*--------------------------------------
CS.RUN.Wait sta TimeOut
.1 jsr CS.RUN.CheckCtrlC
bcs .9
lda TimeOut
bne .1
.9 rts
*--------------------------------------
CS.RUN.CheckCtrlC
phx
phy
>SLEEP
ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL FEOF
@ -683,7 +718,7 @@ CS.RUN.CheckCtrlC
beq .9 CS
clc
.9 ply
plx
rts
@ -695,9 +730,12 @@ hLIBBLKDEV .BS 1
*--------------------------------------
MSG.USAGE1 .AS "Usage : FORMAT <BLOCKDEV> [VOL.NAME]\r\n"
.AS " -L : Low-Level Format\r\n"
.AZ " -H : 35trk drives, High Density: 48 tracks, 384 Blocks\r\n"
MSG.USAGE2 .AS " -X : 40trk drives, 320 Blocks, combined with -H, 432 Blocks\r\n"
.AS " -V : Verify\r\n"
.AS " -H : 35trk drives, High Density: 48 tracks, 384 Blocks\r\n"
.AZ " -X : 40trk drives, 320 Blocks\r\n"
.AZ "-H -X : 40trk drives, 432 Blocks\r\n"
MSG.USAGE2 .AS " -D : Rana Elite II 640 Blocks, 2 Sides\r\n"
.AS "-H -D : Rana Elite III 1280 Blocks, 2 Sides\r\n"
.AS "-L -V : Verify After LLF\r\n"
.AS " -B xxxx : Smrtprt, Override Device block size\r\n"
.AZ " -1-9 : Catalog Size (Blocks)\r\n"
MSG.OK .AZ "[OK]"

View File

@ -15,7 +15,6 @@ BUFSIZE .EQ 256
.OR ZPBIN
ZS.START
ZPBufPtr .BS 2
ZPBufLen .BS 2
hBuf .BS 1
hDev .BS 1
TimeOut .BS 1
@ -38,7 +37,7 @@ CS.START cld
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.DEVOK .DA MSG.DEVOK
@ -50,22 +49,22 @@ CS.INIT clc
CS.RUN lda #1
>SYSCALL ArgV
bcs .9
>PUSHYA
>PUSHBI O.RDWR
>PUSHBI 0 type
>PUSHWZ auxtype
>SYSCALL FOpen
bcs .99
stx hDev
sta hDev
>LDYA L.MSG.DEVOK
>SYSCALL PutS
>LDYAI BUFSIZE
>SYSCALL GetMem
bcs .99
>STYA ZPBufPtr
stx hBuf
@ -76,31 +75,32 @@ CS.RUN lda #1
lda #E.SYN
sec
.99 rts
.99
CS.RUN.RTS rts
*--------------------------------------
CS.RUN.LOOP >SLEEP
lda hDev
>SYSCALL FEOF
bcs .99
bcs CS.RUN.RTS
tay
bne .2 EOF, no char
bne .1 EOF, no char
>PUSHWI BUFSIZE
>PUSHW ZPBufPtr
lda hDev
>SYSCALL FRead
bcc .1
.99 rts
.1 >PUSHYA len
bcs CS.RUN.RTS
>PUSHYA len
>PUSHW ZPBufPtr
ldy #S.PS.hStdOut
lda (pPS),y
>SYSCALL FWrite
bcs .9
.2 ldy #S.PS.hStdIn
.1 ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL FEOF
@ -108,27 +108,28 @@ CS.RUN.LOOP >SLEEP
tay
bne CS.RUN.LOOP EOF = true, no char from STDIN
>PUSHWI BUFSIZE
>PUSHWI BUFSIZE
>PUSHW ZPBufPtr
ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL FRead
.3 bcs .9
bcs .9
>STYA ZPBufLen
tax
lda (ZPBufPtr)
cmp #$14 Ctrl-T
beq .9
eor #$14 Ctrl-T
beq .8
>PUSHW ZPBufLen
txa
>PUSHYA len
>PUSHW ZPBufPtr
lda hDev
>SYSCALL FWrite
bcs .9
jmp CS.RUN.LOOP
.9 rts
.8 sec
.9 rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event?

914
DRV/PPPSSC.DRV.S.txt Normal file
View File

@ -0,0 +1,914 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF drv/pppssc.drv
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/mli.e.i
.INB inc/com.i
.INB inc/com.6551.i
.INB inc/nic.i
*--------------------------------------
INBUF.SIZE .EQ $800
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPArgsPtr .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPBufLen .BS 2
ZPIOCTL .BS 2
ZPBufPtr .BS 2
ZPCount .BS 2
ZPCount2 .BS 2
FCS .BS 2
Len .BS 1
hETCFILE .BS 1
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
L.ETCFILE .DA ETCFILE
L.MSG.ETCFILE .DA MSG.ETCFILE
L.MSG.BUFLEN .DA MSG.BUFLEN
L.MSG.HEXDUMP .DA MSG.HEXDUMP
L.PPP.CfgReg .DA PPP.CfgReg
L.RCV.Buf .DA RCV.Buf
L.RCV.Bufp1 .DA RCV.Buf+1
.DA 0 End Of Reloc Table
*--------------------------------------
Dev.Detect >STYA ZPArgsPtr
>LDYA L.MSG.DETECT
>SYSCALL PutS
stz ZPPtr1
lda #$C1
sta ZPPtr1+1
.1 and #$0f
tay
lda A2osX.S,y
bne .3
ldx #DEVSIG.Length-1
.2 ldy DEVSIG.Offset,x
lda (ZPPtr1),y
cmp DEVSIG.Value,x
bne .3
dex
bpl .2
bra .4
.3 inc FD.DEV.NAME+3
inc ZPPtr1+1 no match, try next slot....
lda ZPPtr1+1
cmp #$C8
bne .1
>LDYA L.MSG.DETECT.KO
>SYSCALL PutS
lda #MLI.E.NODEV Not Found in any slot, exiting
sec
rts
.4 lda ZPPtr1+1
asl
asl
asl
asl
clc
adc #$8F
sta DEVSLOTn08F
jsr SSC.Init
jsr PPP.ETCFILE
jsr PPP.Init
bcs .99
>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
.99 bcs .9
>STYA FD.DEV+S.FD.DEV.DRVPTR
>PUSHW L.FD.DEV
>PUSHW L.FD.DEV.NAME
>SYSCALL MKDev
bcs .9
lda FD.DEV.NAME+3
and #$0F
tax
lda #A2osX.S.NIC
sta A2osX.S,x
.9
Dev.Detect.RTS rts
*--------------------------------------
PPP.ETCFILE >PUSHW L.ETCFILE
>PUSHBI O.RDONLY
>PUSHBI 0
>PUSHWZ
>SYSCALL FOpen
bcs Dev.Detect.RTS
sta hETCFILE
>PUSHW L.MSG.ETCFILE
>PUSHW L.ETCFILE
>PUSHBI 2
>SYSCALL PrintF
.1 >PUSHB hETCFILE
>PUSHW L.RCV.Buf
>PUSHWI 255
>SYSCALL FGetS
bcs .8
lda RCV.Buf
cmp #'?'
bne .7
>LDYA L.RCV.Buf
>SYSCALL PutS
>LDYA L.RCV.Bufp1
jsr SSC.WriteYA
bcs .9
.2 jsr SSC.Read
bcs .9
tya
beq .2
lda #0
sta RCV.Buf,y
>LDYA L.RCV.Buf
>SYSCALL PutS
.7 bra .1
.8 cmp #MLI.E.EOF
bne .9
lda #0
clc
.9 php
pha
lda hETCFILE
>SYSCALL FClose
pla
plp
.99 rts
*--------------------------------------
PPP.Init >LDYAI PPP.CfgReg.LEN
>STYA ZPBufLen
>LDYA L.PPP.CfgReg
jsr PPPFCS16
>LDYA L.PPP.CfgReg
jsr DumpBuf
>LDYA L.PPP.CfgReg
ldx #PPP.CfgReg.LEN
jsr SSC.WriteYAX
bcs .9
.1 jsr SSC.Read
bcs .9
tya
beq .1
sty ZPBufLen
stz ZPBufLen+1
>LDYA L.RCV.Buf
jsr DumpBuf
sec
* clc
.9 rts
*--------------------------------------
SSC.Init ldx DEVSLOTn08F
stz SSC.RESET-$8F,x
lda #SSC.CTL.CLKINT+SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
sta SSC.CTL-$8F,x
lda #SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR
sta SSC.CMD-$8F,x
lda SSC.DATA-$8F,x discard any garbage byte
lda SSC.STATUS-$8F,x clear any IRQ pending
rts
*--------------------------------------
SSC.WriteYA >STYA ZPPtr1
ldy #$ff
.1 iny
lda (ZPPtr1),y
bne .1
lda #C.CR
sta (ZPPtr1),y
iny
lda #C.LF
sta (ZPPtr1),y
iny
sty Len
bra SSC.Write
SSC.WriteYAX >STYA ZPPtr1
stx Len
SSC.Write php
sei
ldx DEVSLOTn08F
lda SSC.STATUS-$8F,x
bit #SSC.STATUS.nDSR true when 0
bne .9
ldy #0
.1 lda SSC.STATUS-$8F,x
and #SSC.STATUS.TDRE Register Empty ?
beq .1
lda (ZPPtr1),y
sta SSC.DATA-$8F,x
iny
cpy Len
bne .1
.2 lda SSC.STATUS-$8F,x
and #SSC.STATUS.TDRE Register Empty ?
plp
clc
rts
.9 plp
lda #MLI.E.IO
sec
rts
*--------------------------------------
SSC.Read php
sei
ldx DEVSLOTn08F
ldy #0
.1 lda SSC.STATUS-$8F,x
bit #SSC.STATUS.nDSR true when 0
bne .9
phy
ldy #0
.2 bit #SSC.STATUS.RDRF incoming char?
bne .3
dey
bne .2
ply
plp
clc
rts
.3 ply
lda SSC.DATA-$8F,x
sta RCV.Buf,y
iny
bra .1
.9 lda #MLI.E.IO
plp
sec
rts
*--------------------------------------
DumpBuf >STYA ZPPtr1
>PUSHW L.MSG.BUFLEN
>PUSHW ZPBufLen
>PUSHBI 2
>SYSCALL PrintF
bcs .9
.1 >PUSHW L.MSG.HEXDUMP
ldy #0
.2 >PUSHB (ZPPtr1),y
iny
cpy #16
bne .2
>PUSHBI 16
>SYSCALL PrintF
bcs .9
lda ZPPtr1
adc #16
sta ZPPtr1
lda ZPPtr1+1
adc #0
sta ZPPtr1+1
lda ZPBufLen
sec
sbc #16
sta ZPBufLen
lda ZPBufLen+1
sbc #0
sta ZPBufLen+1
bcc .9
ora ZPBufLen
bne .1
clc
.9 rts
*--------------------------------------
CS.END
DEVSIG.Offset .HS 05070B0C
DEVSIG.Value .HS 38180131
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
MSG.DETECT .AZ "PPP Driver For Apple SSC."
MSG.DETECT.OK .AZ "PPP Installed As Device : %s\r\n"
MSG.DETECT.KO .AZ "No SSC Found."
ETCFILE .AZ "${ROOT}etc/ppp.conf"
*--------------------------------------
MSG.ETCFILE .AZ "Executing %s File...\r\n"
MSG.BUFLEN .AZ "BufLen:%H\r\n"
MSG.HEXDUMP .AZ "%h:%h:%h:%h:%h:%h:%h:%h:%h:%h:%h:%h:%h:%h:%h:%h\r\n"
*--------------------------------------
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 "eth1"
*--------------------------------------
PPP.CfgReg .HS 7E
PPP.CfgReg.START
.HS FF03
.HS C021 LCP
PPP.CfgReg.LCP .HS 01 Configure-Request
.HS 01 ID
.DA /PPP.CfgReg.LCP.LEN,#PPP.CfgReg.LCP.LEN
.HS 01.04.05DC MRU
.HS 02.06.000A0000 ACCM
.HS 05.06.55334466 MAGIC
PPP.CfgReg.LCP.LEN .EQ *-PPP.CfgReg.LCP
.BS 2 FCS
.HS 7E
PPP.CfgReg.LEN .EQ *-PPP.CfgReg
*--------------------------------------
RCV.Buf .BS 256
*--------------------------------------
* Driver Code
*--------------------------------------
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
.DA IRQ
.DA 0 end or relocation
*--------------------------------------
STATUS jsr STATUS.CONTROL.Init
ldy #S.IOCTL.STATCODE
lda (ZPIOCTL),y
beq .1
cmp #S.IOCTL.STATCODE.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.STATCODE.GETDCB
bne .3
ldy #S.DCB.COM-1
.2 lda DCB,y
sta (ZPBufPtr),y
dey
bpl .2
clc
rts
.3 cmp #S.IOCTL.STATCODE.EOF
bne STATUS.9
lda DIB+S.DIB.S
and #S.DIB.S.OPENED
beq OPEN.E
lda INBUF.TAIL
eor INBUF.HEAD
bne .8 NO DATA? eof = TRUE
lda INBUF.TAIL+1
eor INBUF.HEAD+1
bne .8
lda #1
clc
rts
.8 lda #0
clc
rts
STATUS.9 lda #MLI.E.BADCTL
sec
rts
*--------------------------------------
CONTROL jsr STATUS.CONTROL.Init
ldy #S.IOCTL.CTRLCODE
lda (ZPIOCTL),y
cmp #S.IOCTL.CTRLCODE.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 >LDYAI INBUF.SIZE
>SYSCALL2 GetMem
bcs .9
stx hINBUF
>STYA INBUF.PTR
>STYA READ.BUF+1
>STYA IRQ.BUF+1
stz INBUF.TAIL
stz INBUF.TAIL+1
stz INBUF.HEAD
stz INBUF.HEAD+1
stz INBUF.CNT
stz INBUF.CNT+1
php
sei
ldx DEVSLOTn08F
stz SSC.RESET-$8F,x
lda #SSC.CTL.CLKINT+SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
sta SSC.CTL-$8F,x
lda #SSC.CMD.TE+SSC.CMD.DTR
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
.9 rts
*--------------------------------------
CLOSE php
sei
ldx DEVSLOTn08F
stz SSC.RESET-$8F,x
lda #S.DIB.S.OPENED
trb DIB+S.DIB.S
lda hINBUF
>SYSCALL2 FreeMem
plp
clc
rts
*--------------------------------------
READ php
sei
jsr READ.WRITE.Init
lda INBUF.CNT
ora INBUF.CNT+1
beq READ.9
stz ZPCount2
stz ZPCount2+1
ldy INBUF.TAIL
READ.1 inc ZPCount
bne READ.BUF
inc ZPCount+1
beq READ.8
READ.BUF lda $FFFF,y SELF MODIFIED
sta (ZPBufPtr)
inc ZPBufPtr
bne .1
inc ZPBufPtr+1
.1 inc ZPCount2
bne .2
inc ZPCount2+1
.2 iny
bne .3
inc READ.BUF+2
inc INBUF.TAIL+1
lda INBUF.TAIL+1
cmp /INBUF.SIZE
bne .3
lda INBUF.PTR+1
sta READ.BUF+2
.3 lda INBUF.CNT
ldx INBUF.CNT+1
clc
sbc #0
bcs .4
dex
bmi .8
stx INBUF.CNT+1
.4 sta INBUF.CNT
bra READ.1
.8 sty INBUF.TAIL
READ.8 lda ZPCount2
ldy #S.IOCTL.BYTECNT
sta (ZPIOCTL),y
iny
lda ZPCount2+1
sta (ZPIOCTL),y
plp
clc
rts
READ.9 lda SSC.STATUS-$8F,x
bit #SSC.STATUS.nDSR true when 0
beq .99
lda #MLI.E.IO
.HS 2C BIT ABS
.99 lda #E.NODATA
plp
sec
rts
*--------------------------------------
WRITE php
sei
jsr READ.WRITE.Init
lda SSC.STATUS-$8F,x
bit #SSC.STATUS.nDSR true when 0
bne .9
ldy #0
.1 inc ZPCount
bne .2
inc ZPCount+1
beq .8
.2 lda SSC.STATUS-$8F,x
and #SSC.STATUS.TDRE Register Empty ?
beq .2
lda (ZPBufPtr),y
sta SSC.DATA-$8F,x
iny
bne .1
inc ZPBufPtr+1
bra .1
.8 plp
clc
rts
.9 lda #MLI.E.IO
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
*--------------------------------------
IRQ ldx DEVSLOTn08F
lda SSC.STATUS-$8F,x
* and #SSC.STATUS.IRQ
bpl IRQ.9 IRQ from this device ? no, exit !!!!Applewin bug #308!!!!
bit #SSC.STATUS.RDRF incoming char?
beq IRQ.8
ldy INBUF.HEAD
IRQ.1 lda SSC.DATA-$8F,x read data to clear IRQ
IRQ.BUF sta $FFFF,y SELF MODIFIED
inc INBUF.CNT
bne .1
inc INBUF.CNT+1
.1 iny
bne .2
inc IRQ.BUF+2
inc INBUF.HEAD+1
lda INBUF.HEAD+1
cmp /INBUF.SIZE
bne .2
lda INBUF.PTR+1
sta IRQ.BUF+2
lda #0
.2 bit SSC.STATUS-$8F,x
bmi IRQ.1
inc
bne .2
sty INBUF.HEAD
IRQ.8 clc
rts
IRQ.9 sec
rts
*--------------------------------------
PPPFCS16 >STYA ZPPtr1
lda #$ff
sta FCS
sta FCS+1
lda ZPBufLen
sec
sbc #4 minus 7E .... FCS FCS 7E
eor #$ff
sta ZPPtr2
lda ZPBufLen+1
sbc #0
eor #$ff
sta ZPPtr2+1
.1 inc ZPPtr2
bne .2
inc ZPPtr2+1
beq .8
.2 inc ZPPtr1
bne .3
inc ZPPtr1+1
.3 lda (ZPPtr1)
eor FCS
tax
lda FCS.LO,x
eor FCS+1
sta FCS
lda FCS.HI,x
sta FCS+1
bra .1
.8 lda FCS+1
eor #$ff
ldy #1
sta (ZPPtr1),y
lda FCS
eor #$ff
iny
sta (ZPPtr1),y
rts
*--------------------------------------
DRV.CS.END
FCS.LO .DA #$0000,#$1189,#$2312,#$329b,#$4624,#$57ad,#$6536,#$74bf
.DA #$8c48,#$9dc1,#$af5a,#$bed3,#$ca6c,#$dbe5,#$e97e,#$f8f7
.DA #$1081,#$0108,#$3393,#$221a,#$56a5,#$472c,#$75b7,#$643e
.DA #$9cc9,#$8d40,#$bfdb,#$ae52,#$daed,#$cb64,#$f9ff,#$e876
.DA #$2102,#$308b,#$0210,#$1399,#$6726,#$76af,#$4434,#$55bd
.DA #$ad4a,#$bcc3,#$8e58,#$9fd1,#$eb6e,#$fae7,#$c87c,#$d9f5
.DA #$3183,#$200a,#$1291,#$0318,#$77a7,#$662e,#$54b5,#$453c
.DA #$bdcb,#$ac42,#$9ed9,#$8f50,#$fbef,#$ea66,#$d8fd,#$c974
.DA #$4204,#$538d,#$6116,#$709f,#$0420,#$15a9,#$2732,#$36bb
.DA #$ce4c,#$dfc5,#$ed5e,#$fcd7,#$8868,#$99e1,#$ab7a,#$baf3
.DA #$5285,#$430c,#$7197,#$601e,#$14a1,#$0528,#$37b3,#$263a
.DA #$decd,#$cf44,#$fddf,#$ec56,#$98e9,#$8960,#$bbfb,#$aa72
.DA #$6306,#$728f,#$4014,#$519d,#$2522,#$34ab,#$0630,#$17b9
.DA #$ef4e,#$fec7,#$cc5c,#$ddd5,#$a96a,#$b8e3,#$8a78,#$9bf1
.DA #$7387,#$620e,#$5095,#$411c,#$35a3,#$242a,#$16b1,#$0738
.DA #$ffcf,#$ee46,#$dcdd,#$cd54,#$b9eb,#$a862,#$9af9,#$8b70
.DA #$8408,#$9581,#$a71a,#$b693,#$c22c,#$d3a5,#$e13e,#$f0b7
.DA #$0840,#$19c9,#$2b52,#$3adb,#$4e64,#$5fed,#$6d76,#$7cff
.DA #$9489,#$8500,#$b79b,#$a612,#$d2ad,#$c324,#$f1bf,#$e036
.DA #$18c1,#$0948,#$3bd3,#$2a5a,#$5ee5,#$4f6c,#$7df7,#$6c7e
.DA #$a50a,#$b483,#$8618,#$9791,#$e32e,#$f2a7,#$c03c,#$d1b5
.DA #$2942,#$38cb,#$0a50,#$1bd9,#$6f66,#$7eef,#$4c74,#$5dfd
.DA #$b58b,#$a402,#$9699,#$8710,#$f3af,#$e226,#$d0bd,#$c134
.DA #$39c3,#$284a,#$1ad1,#$0b58,#$7fe7,#$6e6e,#$5cf5,#$4d7c
.DA #$c60c,#$d785,#$e51e,#$f497,#$8028,#$91a1,#$a33a,#$b2b3
.DA #$4a44,#$5bcd,#$6956,#$78df,#$0c60,#$1de9,#$2f72,#$3efb
.DA #$d68d,#$c704,#$f59f,#$e416,#$90a9,#$8120,#$b3bb,#$a232
.DA #$5ac5,#$4b4c,#$79d7,#$685e,#$1ce1,#$0d68,#$3ff3,#$2e7a
.DA #$e70e,#$f687,#$c41c,#$d595,#$a12a,#$b0a3,#$8238,#$93b1
.DA #$6b46,#$7acf,#$4854,#$59dd,#$2d62,#$3ceb,#$0e70,#$1ff9
.DA #$f78f,#$e606,#$d49d,#$c514,#$b1ab,#$a022,#$92b9,#$8330
.DA #$7bc7,#$6a4e,#$58d5,#$495c,#$3de3,#$2c6a,#$1ef1,#$0f78
*--------------------------------------
FCS.HI .DA /$0000,/$1189,/$2312,/$329b,/$4624,/$57ad,/$6536,/$74bf
.DA /$8c48,/$9dc1,/$af5a,/$bed3,/$ca6c,/$dbe5,/$e97e,/$f8f7
.DA /$1081,/$0108,/$3393,/$221a,/$56a5,/$472c,/$75b7,/$643e
.DA /$9cc9,/$8d40,/$bfdb,/$ae52,/$daed,/$cb64,/$f9ff,/$e876
.DA /$2102,/$308b,/$0210,/$1399,/$6726,/$76af,/$4434,/$55bd
.DA /$ad4a,/$bcc3,/$8e58,/$9fd1,/$eb6e,/$fae7,/$c87c,/$d9f5
.DA /$3183,/$200a,/$1291,/$0318,/$77a7,/$662e,/$54b5,/$453c
.DA /$bdcb,/$ac42,/$9ed9,/$8f50,/$fbef,/$ea66,/$d8fd,/$c974
.DA /$4204,/$538d,/$6116,/$709f,/$0420,/$15a9,/$2732,/$36bb
.DA /$ce4c,/$dfc5,/$ed5e,/$fcd7,/$8868,/$99e1,/$ab7a,/$baf3
.DA /$5285,/$430c,/$7197,/$601e,/$14a1,/$0528,/$37b3,/$263a
.DA /$decd,/$cf44,/$fddf,/$ec56,/$98e9,/$8960,/$bbfb,/$aa72
.DA /$6306,/$728f,/$4014,/$519d,/$2522,/$34ab,/$0630,/$17b9
.DA /$ef4e,/$fec7,/$cc5c,/$ddd5,/$a96a,/$b8e3,/$8a78,/$9bf1
.DA /$7387,/$620e,/$5095,/$411c,/$35a3,/$242a,/$16b1,/$0738
.DA /$ffcf,/$ee46,/$dcdd,/$cd54,/$b9eb,/$a862,/$9af9,/$8b70
.DA /$8408,/$9581,/$a71a,/$b693,/$c22c,/$d3a5,/$e13e,/$f0b7
.DA /$0840,/$19c9,/$2b52,/$3adb,/$4e64,/$5fed,/$6d76,/$7cff
.DA /$9489,/$8500,/$b79b,/$a612,/$d2ad,/$c324,/$f1bf,/$e036
.DA /$18c1,/$0948,/$3bd3,/$2a5a,/$5ee5,/$4f6c,/$7df7,/$6c7e
.DA /$a50a,/$b483,/$8618,/$9791,/$e32e,/$f2a7,/$c03c,/$d1b5
.DA /$2942,/$38cb,/$0a50,/$1bd9,/$6f66,/$7eef,/$4c74,/$5dfd
.DA /$b58b,/$a402,/$9699,/$8710,/$f3af,/$e226,/$d0bd,/$c134
.DA /$39c3,/$284a,/$1ad1,/$0b58,/$7fe7,/$6e6e,/$5cf5,/$4d7c
.DA /$c60c,/$d785,/$e51e,/$f497,/$8028,/$91a1,/$a33a,/$b2b3
.DA /$4a44,/$5bcd,/$6956,/$78df,/$0c60,/$1de9,/$2f72,/$3efb
.DA /$d68d,/$c704,/$f59f,/$e416,/$90a9,/$8120,/$b3bb,/$a232
.DA /$5ac5,/$4b4c,/$79d7,/$685e,/$1ce1,/$0d68,/$3ff3,/$2e7a
.DA /$e70e,/$f687,/$c41c,/$d595,/$a12a,/$b0a3,/$8238,/$93b1
.DA /$6b46,/$7acf,/$4854,/$59dd,/$2d62,/$3ceb,/$0e70,/$1ff9
.DA /$f78f,/$e606,/$d49d,/$c514,/$b1ab,/$a022,/$92b9,/$8330
.DA /$7bc7,/$6a4e,/$58d5,/$495c,/$3de3,/$2c6a,/$1ef1,/$0f78
*--------------------------------------
DEVSLOTn08F .BS 1
hINBUF .BS 1
INBUF.PTR .BS 2
INBUF.TAIL .BS 2
INBUF.HEAD .BS 2
INBUF.CNT .BS 2
*--------------------------------------
DIB .DA #S.DIB.S.IRQ
.DA #0,#0,#0 size
>PSTR "SSC/PPP Driver "
.DA #S.DIB.T.NIC
.DA #0
.DA K.VER
*--------------------------------------
DCB .DA #S.DCB.T.NIC
.DA #S.DCB.NIC.FLAGS.ARPOFFLOAD
.DA #S.DCB.NIC.LINK.OK+S.DCB.NIC.LINK.FD
.DA #S.DCB.NIC.SPEED.10
.HS 000000000000 MAC
.BS 12 IP/MASK/GW
*--------------------------------------
DRV.END
MAN
SAVE usr/src/drv/pppssc.drv.s
ASM

View File

@ -29,7 +29,8 @@ CORE.PSCount .EQ $D1
pPS .EQ $D2
pEvent .EQ $D4
* .EQ $D6
hHandler .EQ $D6
* .EQ $D7
*--------------------------------------
* PS Context : 40 bytes MAX
*--------------------------------------
@ -472,7 +473,7 @@ S.FD.T.LNK .EQ 8
S.FD.T.DSOCK .EQ 10
S.FD.T.SSOCK .EQ 12
S.FD.T.PIPE .EQ 14
S.FD.HANDLER .EQ 1 0=KRNL,!0=hLIB (LIBNFS,LIBTCPIP.....)
S.FD.HANDLER .EQ 1
*--------------------------------------
S.FD.REG.REF .EQ 2
S.FD.REG.IOBUF .EQ 3

View File

@ -9,12 +9,12 @@ IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128
*--------------------------------------
IO.D2.Ph0Off .EQ $C080
IO.D2.Ph0On .EQ $C081
IO.D2.Ph1Off .EQ $C082
IO.D2.Ph1On .EQ $C083
IO.D2.Ph2Off .EQ $C084
IO.D2.Ph2On .EQ $C085
IO.D2.Ph3Off .EQ $C086
IO.D2.Ph3On .EQ $C087
*IO.D2.Ph1Off .EQ $C082
*IO.D2.Ph1On .EQ $C083
*IO.D2.Ph2Off .EQ $C084
*IO.D2.Ph2On .EQ $C085
*IO.D2.Ph3Off .EQ $C086
*IO.D2.Ph3On .EQ $C087
IO.D2.DrvOff .EQ $C088
IO.D2.DrvOn .EQ $C089

12
INC/LIBCIFS.I.txt Normal file
View File

@ -0,0 +1,12 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
LIBCIFS.Negotiate .EQ 4
LIBCIFS.SessionSetup .EQ 6
LIBCIFS.TreeConnect .EQ 8
LIBCIFS.Mount .EQ 10
LIBCIFS.UMount .EQ 12
*--------------------------------------
MAN
SAVE inc/libcifs.i

View File

@ -34,7 +34,9 @@ S.SMB.H.PIDLO .EQ 26
S.SMB.H.UID .EQ 28
S.SMB.H.MID .EQ 30
*
S.SMB.H .EQ 32
S.SMB.H .EQ 32
*--------------------------------------
S.TRANS2.H .EQ 24
*--------------------------------------
SMB_INFO_STANDARD .EQ $0001
SMB_INFO_QUERY_EA_SIZE .EQ $0002

View File

@ -290,6 +290,32 @@ BB.ReadBlock lda blok figure out track & sector.
.9 ldy IO.D2.DrvOff,x
rts return error status in carry.
*--------------------------------------
BB.Wait phx (3)
.1 ldx #20 (2)
.2 dex (2)
bne .2 (3)
dec (2)
bne .1 (3)
plx (4)
rts (6)
*--------------------------------------
BB.Trk2Qtrk asl x2
sta .1+1
bit BB.HdrVol
bpl .1 x4
bvs .1 > $C0 ? (VOL=254)
lsr x3
.1 adc #$ff SELF MODIFIED
BB.Trk2Qtrk.RTS rts
*--------------------------------------
BB.Seek lda BB.HdrTrk get track we're on
jsr BB.Trk2Qtrk
sta BB.CurrentQTrack
@ -302,8 +328,15 @@ BB.Seek lda BB.HdrTrk get track we're on
cmp BB.TargetQTrack
beq BB.Read
ldx BB.Slotn0 will do a ph0 off
ldy BB.Slotn0
tay
and #6
ora BB.Slotn0
tax
tya
inc
bra .3
.1 pha
@ -342,11 +375,10 @@ BB.Seek lda BB.HdrTrk get track we're on
sta IO.D2.Ph0On,x
sta IO.D2.Ph0On,y
lda #IO.D2.SeekTimeB
jsr BB.Wait
.6 lda BB.CurrentQTrack
lda BB.CurrentQTrack
cmp BB.TargetQTrack
bne .1
@ -355,33 +387,6 @@ BB.Seek lda BB.HdrTrk get track we're on
sta IO.D2.Ph0Off,x
sta IO.D2.Ph0Off,y
bra BB.Read
*--------------------------------------
BB.Wait phx (3)
.1 ldx #20 (2)
.2 dex (2)
bne .2 (3)
dec (2)
bne .1 (3)
plx (4)
rts (6)
*--------------------------------------
BB.Trk2Qtrk asl x2
sta .1+1
bit BB.HdrVol
bpl .1 x4
bvs .1 > $C0 ? (VOL=254)
lsr x3
.1 adc #$ff SELF MODIFIED
BB.Trk2Qtrk.RTS rts
*--------------------------------------
BB.Read ldx BB.Slotn0

View File

@ -24,39 +24,38 @@ D2Recalibrate >PULLB DrvSlt
jsr CheckDiskII
bcs .9
* ldx Slotn0
ldy Slotn0
ldx Slotn0
ldy #168
.1 lda IO.D2.Ph0Off,x
lda #168
.1 dec
dec
pha
lda #IO.D2.SeekTimeR
jsr D2.Wait100usecA
dey
dey
tya
and #6
ora Slotn0
phy
plx
tay
lda IO.D2.Ph0On,y
tax
lda IO.D2.Ph0On,x
lda #IO.D2.SeekTimeR
jsr D2.Wait100usecA
lda IO.D2.Ph0Off,x
lda #IO.D2.SeekTimeR
jsr D2.Wait100usecA
pla
tya
bne .1
jsr D2.Wait25600usec
ldy #20
* ldy Slotn0
lda IO.D2.Ph0Off,y
.2 jsr D2.Wait25600usec
dey
bne .2
lda IO.D2.Ph0Off,x
jsr D2.Wait25600usec
clc
@ -87,11 +86,7 @@ D2MoveHead.SEI lda MoveFrom
inc
bra .3
.1 lda MoveFrom
cmp MoveTo
beq .8
pha
.1 pha
sta IO.D2.Ph0Off,x
sta IO.D2.Ph0Off,y
@ -126,13 +121,16 @@ D2MoveHead.SEI lda MoveFrom
ora Slotn0
tay
sta IO.D2.Ph0On,y
sta IO.D2.Ph0On,x
sta IO.D2.Ph0On,y
lda #IO.D2.SeekTimeF
jsr D2.Wait100usecA
bra .1
lda MoveFrom
cmp MoveTo
bne .1
.8 jsr D2.Wait25600usec
jsr D2.Wait25600usec
sta IO.D2.Ph0Off,x
sta IO.D2.Ph0Off,y

View File

@ -22,7 +22,7 @@ TRACK16.GAP2 .EQ 6 60 bits
*Data field = D5AAAD + 342 + CS + DEAAEB = 349 2792 bits
TRACK16.GAP3 .EQ 16 160 bits
* )
* 80 + 16 * (14 + 6 + 349 + 16) = 6240 800 + 49984 bits
* 80 + 16 * (6 + 14 + 349 + 16) = 6240 800 + 49984 bits
*--------------------------------------
TRACK9.LEN .EQ 6511
*--------------------------------------

View File

@ -7,6 +7,7 @@ NEW
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/kernel.i
.INB inc/mli.e.i
.INB inc/eth.i
.INB inc/libtcpip.i
@ -18,11 +19,15 @@ ZS.START
ZPReqPtr .BS 2
ZPReqLen .BS 2
ZPCtxPtr .BS 2
pFD .BS 2
ZPRespPtr .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
BufPtr .BS 2
hBuf .BS 1
ZS.END .ED
*--------------------------------------
@ -83,7 +88,7 @@ J.CIFS2 .DA CIFS2.ChTyp
.DA CIFS2.Write
.DA CIFS2.ChOwn
L.LIBTCPIP .DA LIBTCPIP
L.SMB.TRANSPORT .DA SMB.TRANSPORT
L.NETBIOS .DA NETBIOS
.DA 0
*--------------------------------------
LIB.LOAD >LDYA L.LIBTCPIP
@ -127,8 +132,8 @@ CIFS.Negotiate lda (pStack)
dec
sta (pStack)
>PUSHWI SMB.NegReq.end-SMB.TRANSPORT
>PUSHW L.SMB.TRANSPORT
>PUSHWI SMB.NegReq.end-NETBIOS
>PUSHW L.NETBIOS
ldy #1+4 hSocket
lda (pStack),y
@ -162,11 +167,11 @@ CIFS.Negotiate lda (pStack)
lda (ZPRespPtr),y
bne .97
ldy #3
ldy #S.NETBIOS.LEN+2
lda (ZPRespPtr),y
clc
adc #4 + NETBIOS header
adc #S.NETBIOS
sta ZPPtr1
tay
lda #0
@ -504,21 +509,7 @@ CIFS2.FStat lda #MLI.E.BADCALL
*--------------------------------------
CIFS.Stat >STYA ZPPtr1 resolved path
lda MountTable+2
>SYSCALL2 GetMemPtr
>STYA ZPCtxPtr
ldx #S.SMB.H.CMD.TRANS2
jsr RequestSetupX
ldx #0
.1 lda SMB.Trans2.H,x
sta (ZPReqPtr),y
iny
inx
cpx #SMB.Trans2.H.Len
bne .1
jsr MakeTrans2Reg
ldx #0
@ -616,7 +607,6 @@ CIFS2.Pipe lda #MLI.E.BADCALL
rts
*--------------------------------------
CIFS.OpenDir >STYA ZPPtr1 resolved path
>SYSCALL2 PutS
>LDYAI S.FD.DIR
>SYSCALL2 GetMem
@ -627,6 +617,16 @@ CIFS.OpenDir >STYA ZPPtr1 resolved path
lda #S.FD.T.DIR
sta (ZPPtr2)
lda hHandler
ldy #S.FD.HANDLER
sta (ZPPtr2),y
lda #0
ldy #S.FD.DIR.FC
sta (ZPPtr2),y
iny
sta (ZPPtr2),y
>PUSHW ZPPtr1
>PUSHWI 0
txa
@ -639,19 +639,264 @@ CIFS2.OpenDir lda #MLI.E.BADCALL
sec
rts
*--------------------------------------
CIFS.ReadDir
CIFS2.ReadDir lda #MLI.E.INVPATH
CIFS.ReadDir jsr GetPFD
ldy #S.FD.DIR.FC
lda (ZPPtr2),y
iny
ora (ZPPtr2),y
bne CIFS.ReadDir.Next
jsr MakeTrans2Reg
ldx #0
.2 lda SMB.FindFirst,x
sta (ZPReqPtr),y
iny
inx
cpx #SMB.FindFirst.Len
bne .2
bra CIFS.ReadDir.Send
CIFS.ReadDir.Next
jsr MakeTrans2Reg
ldx #0
.2 lda SMB.FindNext,x
sta (ZPReqPtr),y
iny
inx
cpx #SMB.FindNext.Len
bne .2
phy
ldy #S.FD.DIR.FC+1
lda (ZPPtr2),y
tax
dey
lda (ZPPtr2),y
ldy #S.NETBIOS+S.SMB.H+S.TRANS2.H Search ID
sta (ZPRespPtr),y
txa
iny
sta (ZPRespPtr),y
ply
CIFS.ReadDir.Send
jsr SetT2ReqLenYA
>PUSHYA
>PUSHW ZPReqPtr
lda MountTable+3 hSocket
ldx #LIBTCPIP.Send
jsr GO.LIBTCPIP
bcs .9
ldy #S.PS.PID
lda (pPS),y
sta CIFS.PID
dec CIFS.Status
lda #0
sec
.9 rts
*--------------------------------------
CIFS2.ReadDir lda MountTable+3 hSocket
ldx #LIBTCPIP.Recv
jsr GO.LIBTCPIP
bcs .9
jsr GetRespData
ldy #S.NETBIOS+S.SMB.H.STATUS
lda (ZPRespPtr),y
bne .99
ldy #S.NETBIOS+S.SMB.H+S.TRANS2.H+1 Search ID
lda (ZPRespPtr),y
tax
dey
lda (ZPRespPtr),y
ldy #S.FD.DIR.FC
sta (ZPPtr2),y
iny
txa
sta (ZPPtr2),y
jsr GetRespDataOffset
jsr CIFS2.ReadDir.GetBuf
bcs .99
jsr GetRespDataOffset
jsr CIFS2.ReadDir.FillBuf
>LDYA BufPtr
ldx hBuf
stz CIFS.Status
clc
rts
.9 cmp #E.NODATA
bne .99
dec CIFS.Retries
beq .90
lda #0
sec
rts
.90 lda #MLI.E.IO
.99 stz CIFS.Status
sec
rts
*--------------------------------------
CIFS.CloseDir
CIFS2.CloseDir
CIFS2.ReadDir.GetBuf
lda #1 +Ending 0
sta ZPPtr2
stz ZPPtr2+1
ldy #S.NETBIOS+S.SMB.H+S.TRANS2.H+2 Search Count
lda (ZPRespPtr),y
tax
.1 lda ZPPtr2
clc
adc #S.STAT
sta ZPPtr2
bcc .2
inc ZPPtr2+1
.2 lda ZPPtr1
clc
adc #22
sta ZPPtr1
bcc .3
inc ZPPtr1+1
.3 lda (ZPPtr1) Filename Len
pha
sec
adc ZPPtr2
sta ZPPtr2
bcc .4
inc ZPPtr2+1
.4 pla
inc
sec
adc ZPPtr1
sta ZPPtr1
bcc .5
inc ZPPtr1+1
.5 dex
bne .1
>LDYA ZPPtr2
>SYSCALL2 GetMem
bcs .9
>STYA BufPtr
>STYA ZPPtr2
stx hBuf
.9 rts
*--------------------------------------
CIFS2.ReadDir.FillBuf
ldy #S.NETBIOS+S.SMB.H+S.TRANS2.H+2 Search Count
lda (ZPRespPtr),y
tax
.1 jsr FileInfo2StatBuf
lda ZPPtr1
sec skip Filename Len
adc #22
sta ZPPtr1
bcc .2
inc ZPPtr1+1
.2 ldy #$ff
.3 iny
lda (ZPPtr1),y
sta (ZPPtr2),y
bne .3
tya
sec
adc ZPPtr1
sta ZPPtr1
bcc .4
inc ZPPtr1+1
.4 tya
sec
adc ZPPtr2
sta ZPPtr2
bcc .5
inc ZPPtr2+1
.5 ldy #S.STAT-1
.6 lda StatBuf,y
sta (ZPPtr2),y
dey
bpl .6
lda #S.STAT
clc
adc ZPPtr2
sta ZPPtr2
bcc .7
inc ZPPtr2+1
.7 dex
bne .1
lda #0
sta (ZPPtr2)
rts
*--------------------------------------
CIFS.CloseDir jsr GetPFD
>DEBUG
CIFS2.CloseDir lda #MLI.E.INVPATH
sec
rts
*--------------------------------------
CIFS.Open
CIFS2.Open
*--------------------------------------
CIFS.Close
CIFS.Close jsr GetPFD
>DEBUG
CIFS2.Close
lda #MLI.E.INVPATH
sec
rts
*--------------------------------------
CIFS.Read
CIFS2.Read
@ -665,6 +910,24 @@ CIFS2.ChOwn
sec
rts
*--------------------------------------
MakeTrans2Reg lda MountTable+2
>SYSCALL2 GetMemPtr
>STYA ZPCtxPtr
ldx #S.SMB.H.CMD.TRANS2
jsr RequestSetupX
ldx #0
.1 lda SMB.Trans2.H,x
sta (ZPReqPtr),y
iny
inx
cpx #SMB.Trans2.H.Len
bne .1
rts
*--------------------------------------
GetSMBContext lda (pStack),y
>SYSCALL2 GetMemPtr
>STYA ZPCtxPtr
@ -763,26 +1026,73 @@ GetRespData sta hResp
sta ZPRespPtr+1
rts
*--------------------------------------
GetRespDataOffset
ldy #S.NETBIOS+S.SMB.H+15 Data Offset
lda (ZPRespPtr),y
clc
adc ZPRespPtr
tax
iny
lda (ZPRespPtr),y
adc ZPRespPtr+1
pha
txa
clc
adc #S.NETBIOS
sta ZPPtr1
pla
adc /S.NETBIOS
sta ZPPtr1+1
rts
*--------------------------------------
FileInfo2StatBuf
phx
ldx #S.STAT-1
.1 stz StatBuf,x
dex
bpl .1
ldy #20 File Attribute
lda (ZPPtr1),y
and #10
beq .2
lda #S.STAT.MODE.DIR
sta StatBuf+S.STAT.MODE+1
.2 ldy #12+3 Data Size
ldx #3
.3 lda (ZPPtr1),y
sta StatBuf+S.STAT.SIZE,x
dey
dex
bpl .3
.8 plx
rts
*--------------------------------------
GetPFD tax
lsr
lda Nod.Table.hFD-2,x
>SYSCALL2 GetMemPtr
>STYA pFD
rts
*--------------------------------------
GO.LIBTCPIP jmp (pLIBTCPIP)
*--------------------------------------
CS.END
*--------------------------------------
LIBTCPIP .AZ "libtcpip"
hLIBTCPIP .BS 1
pLIBTCPIP .BS 2
hSocket .BS 1
hReq .BS 1
hResp .BS 1
*--------------------------------------
CIFS.Status .BS 1
CIFS.PID .BS 1
CIFS.Retries .BS 1
*--------------------------------------
MountTable .BS 2 pMountPoint
.BS 1 hSMBContext
.BS 1 hSocket
*--------------------------------------
SMB.TRANSPORT .DA #0 DIRECT TCP TRANSPORT
NETBIOS .DA #0 DIRECT TCP TRANSPORT
.DA #0 24 BITS LENGTH
.DA /SMB.NegReq.end-SMB.H
.DA #SMB.NegReq.end-SMB.H
@ -863,8 +1173,8 @@ SMB.TreeConnect.T.Len .EQ *-SMB.TreeConnect.T
SMB.Trans2.H .DA #15 WORD COUNT
.BS 2 TotalParamCount
.DA 0 TotalDataCount
.DA 2 MaxParameterCount
.DA 40 MaxDataCount
.DA 10 MaxParameterCount
.DA 512 MaxDataCount
.DA #0 MaxSetupCount
.HS 00 Reserved1
.DA 0 Flags
@ -889,24 +1199,42 @@ SMB.QueryPathInfo.Len .EQ *-SMB.QueryPathInfo
*--------------------------------------
SMB.FindFirst .DA 1 TRANS2_FIND_FIRST2
.BS 2 PrmCnt
.HS 00 Padding
.DA $0016 SearchAttributes
.HS 000000 Padding
.DA $0037 SearchAttributes
.DA 1024 SearchCount
.DA 2 Flags
.DA SMB_INFO_STANDARD InformationLevel
* .AZ "*.*" FileName
SMB.FindFirst.end .EQ *-SMB.FindFirst
.HS 00000000 SearchStorageType
.AZ "*" FileName
SMB.FindFirst.Len .EQ *-SMB.FindFirst
*--------------------------------------
SMB.FindNext .DA 2 TRANS2_FIND_NEXT2
.BS 2 PrmCnt
.HS 00 Padding
.HS 000000 Padding
.BS 2 SID
.DA 1024 SearchCount
.DA SMB_INFO_STANDARD InformationLevel
.HS 00000000 ResumeKey
.DA 2 Flags
* .AZ "*.*" FileName
SMB.FindNext.end .EQ *-SMB.FindNext
.AZ "*" FileName
SMB.FindNext.Len .EQ *-SMB.FindNext
*--------------------------------------
LIBTCPIP .AZ "libtcpip"
hLIBTCPIP .BS 1
pLIBTCPIP .BS 2
hSocket .BS 1
hReq .BS 1
hResp .BS 1
*--------------------------------------
CIFS.Status .BS 1
CIFS.PID .BS 1
CIFS.Retries .BS 1
*--------------------------------------
MountTable .BS 2 pMountPoint
.BS 1 hSMBContext
.BS 1 hSocket
*--------------------------------------
StatBuf .BS S.STAT
*--------------------------------------
MAN
SAVE usr/src/lib/libcifs.s

View File

@ -188,6 +188,242 @@ XRW.E.EXIT ldx A2L
bit IO.D2.DrvOff,x turn off
rts
*--------------------------------------
XRW.TrackSelect lda #2
sta XRW.RecalibrateCnt
sta XRW.BadSeek
.1 stz XRW.RetryCnt
.2 jsr XRW.ReadAddr read next address field.
bcc .4 if CC, A = current track
.3 inc XRW.RetryCnt one less chance.
bpl .2 branch if < 128
dec XRW.RecalibrateCnt
sec
beq .9
ldy XRW.UnitIndex
lda #41
sta XRW.D2Trk-1,y
lda #0
sta XRW.D2VolNum-1,y reset volnum for seeking 4 Qtracks
jsr XRW.Seek Seek from Track 41 -> 0
bra .1
.4 cmp XRW.ReqTrack
beq .8
lda XRW.BadSeek
beq .5 2 bad seeks, already
dec XRW.BadSeek
bne .6
.5 lda XRW.SeekTime
bmi .6 seektime already > 128
* clc
* adc #IO.D2.SeekTimeI
* sta XRW.SeekTime
* sta XRW.D2SeekTime-1,y
.6 lda XRW.ReqTrack
jsr XRW.Seek
bra .3
.8 clc
.9 rts
*--------------------------------------
.LIST ON
XRW.ReadAddr ldy #$FC
.LIST OFF
sty XRW.CheckSum init nibble counter to $FCFC
ldx A2L get slot #
.1 iny
bne .2 counter LO
inc XRW.CheckSum counter HI
beq .99
.2 lda IO.D2.RData,x read nibl
bpl .2
.3 cmp #$D5 address mark 1 ?
bne .1
nop
.4 lda IO.D2.RData,x
bpl .4
cmp #$AA address mark 2 ?
bne .3 if not, is it address mark 1 ?
ldy #3 index for 4 byte read
.5 lda IO.D2.RData,x
bpl .5
cmp #$96 address mark 3 ?
bne .3 if not, is it address mark 1
lda #0 init Chksum
.6 sta XRW.CheckSum
.7 lda IO.D2.RData,x read 'odd bit' nibl
bpl .7
rol align odd bits, '1' into lsb.
sta XRW.Temp4x4 save them.
.8 lda IO.D2.RData,x read 'even bit' nibl
bpl .8
and XRW.Temp4x4 merge odd and even bits.
sta XRW.AddrField.C,y store data byte.
eor XRW.CheckSum
dey
bpl .6 loop on 4 data bytes.
tay if final checksum non-zero,
bne .99 (2) then error.
ldy XRW.UnitIndex (4)
.9 lda IO.D2.RData,x (4)
bpl .9 (2)
eor #$DE (2)
bne .99 (2)
lda XRW.AddrField.V (4)
sta XRW.D2VolNum-1,y (4)
lda XRW.AddrField.T (4)
sta XRW.D2Trk-1,y (4)
ldy XRW.AddrField.S (4)
clc (2)
rts (6)
.99 sec
.LIST ON
XRW.ReadAddr.RTS
rts
.LIST OFF
*--------------------------------------
* A = target track
*--------------------------------------
XRW.Seek ldx XRW.UnitIndex
pha save target track
jsr XRW.Trk2Qtrk
sta XRW.TargetQTrack
lda XRW.D2Trk-1,x
jsr XRW.Trk2Qtrk
sta XRW.CurrentQTrack
tay
pla
sta XRW.D2Trk-1,x will be current track at the end
tya
jsr XRW.Seek2QT
bra .4
.1 pha
jsr XRW.SEEKOFF
bcs .2
* Current < Target, must move in
inc
.HS B0 BCS
* Current > Target, must move out
.2 dec
sta XRW.CurrentQTrack
and #6
ora A2L
tax
pla
bcs .3
* Current < Target, must move in
inc
inc
.3 jsr XRW.SEEK2QT2
.4 lda XRW.SeekTime
jsr XRW.Wait100usecA
lda XRW.CurrentQTrack
cmp XRW.TargetQTrack
bne .1
.8 jsr XRW.Wait25600usec
XRW.SEEKOFF sta IO.D2.Ph0Off,x
sta IO.D2.Ph0Off,y
rts
*--------------------------------------
XRW.SEEK2T ldx XRW.UnitIndex
jsr XRW.Trk2Qtrk
XRW.SEEK2QT pha
and #6
ora A2L
tax
pla
inc
XRW.SEEK2QT2 and #6
ora A2L
tay
lda A2L
ora #IO.D2.RData
sta .1+1
sta .2+1
sta IO.D2.Ph0On,x
.1 lda IO.D2.RData SELF MODIFIED
sta IO.D2.Ph0On,y
.2 lda IO.D2.RData SELF MODIFIED
rts
*--------------------------------------
XRW.Trk2Qtrk asl x2
sta .1+1
bit XRW.D2VolNum-1,x
bpl .1 x4
bvs .1 > $C0 ? (VOL=254)
lsr x3
.1 adc #$ff SELF MODIFIED
rts
*--------------------------------------
* preniblize subroutine (16 sector format)
*
* converts 256 bytes of user data in (buf) into 6 bit nibls in nbuf2.
@ -309,59 +545,6 @@ L596F ldy #$FF index to last byte of data to write.
stx wrefd5+1
rts
*--------------------------------------
XRW.TrackSelect lda #2
sta XRW.RecalibrateCnt
sta XRW.BadSeek
.1 stz XRW.RetryCnt
.2 jsr XRW.ReadAddr read next address field.
bcc .4 if CC, A = current track
.3 inc XRW.RetryCnt one less chance.
bpl .2 branch if < 128
dec XRW.RecalibrateCnt
sec
beq .9
ldx XRW.UnitIndex
lda #41
sta XRW.D2Trk-1,x
lda #0
sta XRW.D2VolNum-1,x reset volnum for seeking 4 Qtracks
jsr XRW.Seek Seek from Track 41 -> 0
bra .1
.4 cmp XRW.ReqTrack
beq .8
* lda XRW.BadSeek
* beq .5 2 bad seeks, already
* dec XRW.BadSeek
* bne .6
*.5 lda XRW.SeekTime
* bmi .6 seektime already > 128
* clc
* adc #IO.D2.SeekTimeI
* sta XRW.SeekTime
* ldx XRW.UnitIndex
* sta XRW.D2SeekTime-1,x
.6 lda XRW.ReqTrack
jsr XRW.Seek
bra .3
.8 clc
.9 rts
*--------------------------------------
XRW.SectorIO bit XRW.bWrite
bpl .1
@ -378,23 +561,22 @@ XRW.SectorIO bit XRW.bWrite
jsr XRW.DEBUG
.2 jsr XRW.ReadAddr
bcs .3
bcs .3 (2)
lda XRW.AddrField.S
cmp XRW.ReqSector
beq .8
cpy XRW.ReqSector (4)
bne .3 (2)
bit XRW.bWrite (4)
bmi XRW.Write (3)
jmp XRW.Read
.3 inc XRW.RetryCnt
bpl .2
sec
.9 rts
.8 bit XRW.bWrite
bmi XRW.Write
jmp XRW.Read
*--------------------------------------
* write subroutine (16 sector format)
*
@ -402,38 +584,40 @@ XRW.SectorIO bit XRW.bWrite
* from (buf), low to high. assumes 1 usec cycle time. self modified code !!
*
* on entry: x = slotnum times 16
*
* on exit: carry set if error (write protect violation).
* if no error, acc=uncertain, x=unchanged, y=0, carry clear.
*--------------------------------------
.LIST ON
XRW.Write lda IO.D2.ReadProt,x PREWRITE MODE
XRW.Write bit IO.D2.ReadProt,x (4) PREWRITE MODE
.LIST OFF
bit IO.D2.ReadMode,x (4)
* lda IO.D2.ReadMode,x
lda nbuf2
sta pcl
lda #$FF Self Sync Byte
lda #$FF (2)
nop (2)
sta IO.D2.WriteMode,x (5) goto write mode
ora IO.D2.WShift,x (4)
ldy #5 (2)
nop (2)
pha (3)
pla (4)
wsync pha (3) exact timing.
nop (2)
ldy nbuf2 (4)
sty pcl (3)
ldy #5 (2)
.1 pha (3) exact timing.
pla (4) exact timing.
jsr wnibl7 (13,9,6) write sync.
dey (2)
bne wsync (3-) must not cross page !
bne .1 (3) must not cross page !
nop (2)
nop (2)
lda #$D5 (2) 1st data mark
jsr wnibl9 (15,9,6)
lda #$AA (2) 2nd data mark
jsr wnibl9 (15,9,6)
lda #$AD (2) 3rd data mark
jsr wnibl9 (15,9,6)
tya (2) zero checksum
@ -535,25 +719,22 @@ wrefd5 ldx #$60 (2) restore slot. warning: modified by prenib
pla (4)
nop (2)
.1 nop (2)
.1 clc (2)
lda XRW.EndMark,y (4) DE AA EB
jsr wnibl (15,6) write it
dey (2)
bpl .1 (3) if not.
clc (2)
bmi .2 (3)
.2 nop (2)
lda #$FF (2)
jsr wnibl (6+9,6) write turn off byte.
jsr XRW.Write.RTS (6+6)
XRW.ReadMode lda IO.D2.ReadMode,x (4) out of write mode
lda IO.D2.WShift,x (4) to read mode.
nop (2)
nop (2)
* lda #$FF (2)
* jsr wnibl (15,6) write turn off byte.
XRW.ReadMode lda IO.D2.ReadMode,x out of write mode
lda IO.D2.WShift,x to read mode.
rts return from write.
* 7-bit nibl write subroutines
@ -569,29 +750,33 @@ wnibl sta IO.D2.WLoad,x (5) nibl write
XRW.Write.RTS rts (6)
.LIST OFF
*--------------------------------------
* determine if motor is stopped
*
* if stopped, controller's shift register will not be changing.
* return y = 0 and zero flag set if it is stopped.
XRW.TestWP ldx A2L
lda IO.D2.ReadProt,x test for write protected
lda IO.D2.ReadMode,x
rol write protect-->carry-->bit 0=1
lda IO.D2.RData,x keep in read mode
rts
*--------------------------------------
XRW.CheckMotorOn
ldx A2L
XRW.CheckMotorOnX
ldy #0 init loop counter.
XRW.Wait25600usec
lda #0
XRW.Wait100usecA
phx
.1 lda IO.D2.RData,x read the shift register.
jsr .9 delay
.1 ldx #18 (2)
pha
pla more delay.
.2 dex (2)
bne .2 (3)
cmp IO.D2.RData,x has shift reg changed ?
bne .9 yes, motor is moving.
inc XRW.montimel (6)
bne .3 (3)
dey no, dec retry counter
bne .1 and try 256 times.
inc XRW.montimeh (6)
.9 rts Z if motor OFF
.3 dec (2)
bne .1 (3)
plx
rts
*--------------------------------------
* read subroutine (16-sector format)
*
@ -745,218 +930,29 @@ L57CD pla place last byte into user buffer
XRW.Read.RTS rts
.LIST OFF
*--------------------------------------
* A = target track
* determine if motor is stopped
*
* if stopped, controller's shift register will not be changing.
* return y = 0 and zero flag set if it is stopped.
*--------------------------------------
XRW.Seek ldx XRW.UnitIndex
pha save target track
XRW.CheckMotorOn
ldx A2L
XRW.CheckMotorOnX
ldy #0 init loop counter.
jsr XRW.Trk2Qtrk
sta XRW.TargetQTrack
lda XRW.D2Trk-1,x
jsr XRW.Trk2Qtrk
sta XRW.CurrentQTrack
tay
pla
sta XRW.D2Trk-1,x will be current track at the end
tya
jsr XRW.Seek2QT
bra .4
.1 lda XRW.CurrentQTrack
cmp XRW.TargetQTrack
beq .8
.1 lda IO.D2.RData,x read the shift register.
jsr .9 delay
pha
pla more delay.
jsr XRW.SEEKOFF
bcs .2
cmp IO.D2.RData,x has shift reg changed ?
bne .9 yes, motor is moving.
* Current < Target, must move in
dey no, dec retry counter
bne .1 and try 256 times.
inc
.HS B0 BCS
* Current > Target, must move out
.2 dec
sta XRW.CurrentQTrack
and #6
ora A2L
tax
pla
bcs .3
* Current < Target, must move in
inc
inc
.3 and #6
ora A2L
tay
sta IO.D2.Ph0On,x
sta IO.D2.Ph0On,y
.4
* lda XRW.SeekTime
lda #IO.D2.SeekTimeP
jsr XRW.Wait100usecA
bra .1
.8 jsr XRW.Wait25600usec
XRW.SEEKOFF sta IO.D2.Ph0Off,x
sta IO.D2.Ph0Off,y
rts
*--------------------------------------
XRW.SEEK2T ldx XRW.UnitIndex
jsr XRW.Trk2Qtrk
XRW.SEEK2QT pha
and #6
ora A2L
tax
pla
inc
and #6
ora A2L
tay
sta IO.D2.Ph0On,x
sta IO.D2.Ph0On,y
rts
*--------------------------------------
XRW.Wait25600usec
lda #0
XRW.Wait100usecA
phx
.1 ldx #18 (2)
.2 dex (2)
bne .2 (3)
inc XRW.montimel (6)
bne .3 (3)
inc XRW.montimeh (6)
.3 dec (2)
bne .1 (3)
plx
rts
*--------------------------------------
XRW.Trk2Qtrk asl x2
sta .1+1
bit XRW.D2VolNum-1,x
bpl .1 x4
bvs .1 > $C0 ? (VOL=254)
lsr x3
.1 adc #$ff SELF MODIFIED
rts
*--------------------------------------
.LIST ON
XRW.ReadAddr ldy #$FC
.LIST OFF
sty XRW.CheckSum init nibble counter to $FCFC
ldx A2L get slot #
.1 iny
bne .2 counter LO
inc XRW.CheckSum counter HI
beq .99
.2 lda IO.D2.RData,x read nibl
bpl .2
.3 cmp #$D5 address mark 1 ?
bne .1
nop
.4 lda IO.D2.RData,x
bpl .4
cmp #$AA address mark 2 ?
bne .3 if not, is it address mark 1 ?
ldy #3 index for 4 byte read
.5 lda IO.D2.RData,x
bpl .5
cmp #$96 address mark 3 ?
bne .3 if not, is it address mark 1
lda #0 init Chksum
.6 sta XRW.CheckSum
.7 lda IO.D2.RData,x read 'odd bit' nibl
bpl .7
rol align odd bits, '1' into lsb.
sta XRW.Temp4x4 save them.
.8 lda IO.D2.RData,x read 'even bit' nibl
bpl .8
and XRW.Temp4x4 merge odd and even bits.
sta XRW.AddrField.C,y store data byte.
eor XRW.CheckSum
dey
bpl .6 loop on 4 data bytes.
tay if final checksum non-zero,
bne .99 then error.
clc
.9 lda IO.D2.RData,x
bpl .9
eor #$DE
bne .99
ldy XRW.UnitIndex
lda XRW.AddrField.V
sta XRW.D2VolNum-1,y
lda XRW.AddrField.T Successful Read, update Drive table
sta XRW.D2Trk-1,y and exit with A = Trk
rts
.99 sec
.LIST ON
XRW.ReadAddr.RTS
rts
.LIST OFF
*--------------------------------------
XRW.TestWP ldx A2L
lda IO.D2.ReadProt,x test for write protected
lda IO.D2.ReadMode,x
rol write protect-->carry-->bit 0=1
lda IO.D2.RData,x keep in read mode
rts
.9 rts Z if motor OFF
*--------------------------------------
XRW.DEBUG sta CLRPAGE2

View File

@ -53,6 +53,8 @@ L.MSG.USAGE .DA MSG.USAGE
L.MSG.TCPIPERR .DA MSG.TCPIPERR
L.MSG.UNKNOWN .DA MSG.UNKNOWN
L.MSG.CONNECTED .DA MSG.CONNECTED
L.MSG.NOCONN .DA MSG.NOCONN
L.MSG.MOUNTED .DA MSG.MOUNTED
.DA 0
*--------------------------------------
* Called once at process creation
@ -106,7 +108,7 @@ CS.RUN lda hSocket
>PUSHWI 0
>PUSHBI 0
>LIBCALL hLIBCIFS,LIBCIFS.SessionSetup
bcs .9
bcs CS.INIT.RTS
>PUSHB hSocket
>PUSHB hSMBContext
@ -123,8 +125,22 @@ CS.RUN lda hSocket
>SYSCALL ArgV
>PUSHYA
>LIBCALL hLIBCIFS,LIBCIFS.Mount
bcs .9
sta hMount
>PUSHW L.MSG.MOUNTED
lda #2
>SYSCALL ArgV
>PUSHYA
lda #3
>SYSCALL ArgV
>PUSHYA
>PUSHBI 4
>SYSCALL PrintF
lda #0
clc
@ -206,6 +222,7 @@ CS.RUN.CheckArgs
>PUSHYA
>PUSHBI 2
>SYSCALL PrintF
lda #ERR.SKT.NOCONN
sec
rts
@ -219,7 +236,7 @@ CS.RUN.CheckArgs.RTS
CS.RUN.Connect >PUSHBI 0 no protocol
lda #S.SOCKET.T.SEQPKT
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcs CS.RUN.CheckArgs.RTS
bcs .9
sta hSocket
@ -251,6 +268,15 @@ CS.RUN.Connect >PUSHBI 0 no protocol
ldx TimeOut
bne .1
.9 pha
>PUSHW L.MSG.NOCONN
lda #1
>SYSCALL ArgV
>PUSHYA
>PUSHBI 2
pla
sec
rts
@ -262,8 +288,7 @@ CS.RUN.Connect >PUSHBI 0 no protocol
>PUSHYA
>PUSHBI 2
>SYSCALL PrintF
.9 rts
rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event?
@ -272,6 +297,7 @@ CS.DOEVENT lda (pEvent)
beq .9
dec TimeOut
.9 sec do not discard TIMER event
rts
*--------------------------------------
@ -309,7 +335,9 @@ hLIBCIFS .BS 1
MSG.USAGE .AZ "Usage : CIFSD <ip|host> sharename mountpoint"
MSG.TCPIPERR .AZ "CIFSD:TCP/IP Not initialized properly."
MSG.UNKNOWN .AZ "CIFSD:%s: Unknown host\r\n"
MSG.CONNECTED .AZ "CIFSD:Connected to: %s\r\n"
MSG.NOCONN .AZ "CIFSD:No Connection To %s\r\n"
MSG.CONNECTED .AZ "CIFSD:Connected To %s\r\n"
MSG.MOUNTED .AZ "CIFSD:%s Mounted As %s\r\n"
*--------------------------------------
.DUMMY
.OR 0

View File

@ -236,6 +236,7 @@ STATUS jsr STATUS.CONTROL.Init
sta (ZPBufPtr),y
dey
bpl .2
clc
rts
@ -250,6 +251,7 @@ STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB
clc
rts
.3 cmp #S.IOCTL.STATCODE.EOF
bne STATUS.9
@ -260,7 +262,9 @@ STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB
lda INBUF.TAIL
eor INBUF.HEAD
beq .4 NO DATA? eof = TRUE
lda #1
.4 dec
clc
rts
@ -268,6 +272,7 @@ STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB
.FIN
.8 clc
rts
STATUS.9 lda #MLI.E.BADCTL
sec
rts
@ -278,7 +283,9 @@ CONTROL jsr STATUS.CONTROL.Init
lda (ZPIOCTL),y
cmp #S.IOCTL.CTRLCODE.SETDCB
bne STATUS.9
ldy #S.DCB.COM-1
.2 lda (ZPBufPtr),y
sta DCB,y
dey
@ -287,17 +294,19 @@ CONTROL jsr STATUS.CONTROL.Init
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
ldx DEVSLOTn08F
stz SSC.RESET-$8F,x
.DO SSCIRQ=1
lda #SSC.CTL.CLKINT+SSC.CTL.B9600+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
sta SSC.CTL-$8F,x
.DO SSCIRQ=1
lda #SSC.CMD.TEIRQ+SSC.CMD.TE+SSC.CMD.DTR
sta SSC.CMD-$8F,x
@ -307,6 +316,8 @@ OPEN.1 php
stz OUTBUF.TAIL
.ELSE
lda #SSC.CTL.CLKINT+SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
sta SSC.CTL-$8F,x
lda #SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR
sta SSC.CMD-$8F,x
.FIN
@ -341,25 +352,32 @@ READ php
stz ZPCount2+1
.10 inc ZPCount
bne .11
inc ZPCount+1
beq .8
.11 .DO SSCIRQ=1
ldy INBUF.TAIL
cpy INBUF.HEAD
beq .2
lda INBUF,y
iny
cpy #BUF.SIZE
bne .1
ldy #0
.1 sty INBUF.TAIL
sta (ZPBufPtr)
inc ZPBufPtr
bne .12
inc ZPBufPtr+1
.12 inc ZPCount2
bne .10
inc ZPCount2+1
bra .10
.FIN
@ -369,20 +387,28 @@ READ php
bit #SSC.STATUS.RDRF incoming char?
beq .8
lda SSC.DATA-$8F,x
sta (ZPBufPtr)
inc ZPBufPtr
bne .13
inc ZPBufPtr+1
.13 inc ZPCount2
bne .2
inc ZPCount2+1
bra .2
.8 lda ZPCount2
bne .81
ora ZPCount2+1
beq .99
lda ZPCount2
.81 ldy #S.IOCTL.BYTECNT
sta (ZPIOCTL),y
iny
@ -392,6 +418,7 @@ READ php
plp
clc
rts
.9 lda #MLI.E.IO
.HS 2C BIT ABS
@ -403,14 +430,18 @@ READ php
WRITE php
sei
jsr READ.WRITE.Init
.2 inc ZPCount
bne .3
inc ZPCount+1
beq .8
.3 .DO SSCIRQ=1
lda SSC.STATUS-$8F,x
bit #SSC.STATUS.nDSR true when 0
bne .9
lda OUTBUF.HEAD
cmp OUTBUF.TAIL Buffer Empty?
bne .6 not empty, queue char
@ -418,9 +449,11 @@ WRITE php
lda SSC.STATUS-$8F,x
and #SSC.STATUS.TDRE Register Empty ?
beq .5 not empty, queue char
lda (ZPBufPtr) yes, write directly to ACIA
inc ZPBufPtr
bne .4
inc ZPBufPtr+1
.4 sta SSC.DATA-$8F,x
@ -437,25 +470,33 @@ WRITE php
lda (ZPBufPtr)
inc ZPBufPtr
bne .7
inc ZPBufPtr+1
.7 sta OUTBUF,y
bra .2
.ELSE
.4 lda SSC.STATUS-$8F,x
bit #SSC.STATUS.nDSR true when 0
bne .9
bit #SSC.STATUS.TDRE Outgoing char?
beq .4
lda (ZPBufPtr)
inc ZPBufPtr
bne .5
inc ZPBufPtr+1
.5 sta SSC.DATA-$8F,x
bra .2
.FIN
.8 plp
clc
rts
.9 lda #MLI.E.IO
.HS 2C BIT ABS
.99 lda #E.NODATA
@ -509,6 +550,7 @@ IRQ ldx DEVSLOTn08F
and #BUF.MASK
cmp INBUF.TAIL
beq .1 buffer full, discard and exit
sta INBUF.HEAD
lda SSC.DATA-$8F,x read data to clear IRQ
@ -522,14 +564,17 @@ IRQ ldx DEVSLOTn08F
ldy OUTBUF.TAIL something to transmit ?
cpy OUTBUF.HEAD
beq .8 in that case, HOW TO CLEAR IRQ ????
lda OUTBUF,y
sta SSC.DATA-$8F,x write data to clear IRQ
tya
inc
and #BUF.MASK
sta OUTBUF.TAIL
.8 clc
rts
.9 sec
rts
.FIN

View File

@ -626,24 +626,31 @@ Detect6502 ldy #0 Test 6502 BCD bug
* A = Z80 Slot
*--------------------------------------
DetectZ80 ldx #Z80Code.Size
.1 lda Z80Code.Start-1,x
sta Z80CODE-1,x 00000H for Z80
dex
bne .1
stz ZPPtr1
lda #$C1
sta ZPPtr1+1
.2 sta (ZPPtr1)
lda $100D
bmi .8
inc ZPPtr1+1
lda ZPPtr1+1
cmp #$C8
beq .9 CS
clc
adc #$20
sta $100A
bra .2
.8 lda ZPPtr1+1
and #$0F
clc

View File

@ -450,9 +450,11 @@ K.SYSCALL2.AUX sta SETREADAUX MAIN to AUX Mem API
K.SYSCALL2.MAIN sta CLRREADAUX Coming from KERNEL in AUX...
sta CLRWRITEAUX
jsr .1
sta SETREADAUX
sta SETWRITEAUX
rts
.1 bit K.SYSCALL.BANK,x Get Target LC BNK
K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change
@ -460,6 +462,7 @@ K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change
lda $D000 #RRAMWRAMBNK1 or #RRAMWRAMBNK2
cmp K.SYSCALL.BANK,x
beq .7
pha remember source BNK
stx .6+1
lda K.SYSCALL.BANK,x
@ -476,6 +479,7 @@ K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change
.5 ldx #$ff SELF MODIFIED
rts
.6 ldx #$ff SELF MODIFIED
.7 lda #$ff SELF MODIFIED

View File

@ -25,12 +25,13 @@ PFT.CheckPathYA >PUSHYA
ldx #0
.1 lda Flt.Table.pftHI,x
.1 inx
lda Flt.Table.pftHI-1,x
beq .8
sta ZPPtr1+1
lda Flt.Table.pftLO,x
lda Flt.Table.pftLO-1,x
sta ZPPtr1
ldy #$ff
@ -48,21 +49,25 @@ PFT.CheckPathYA >PUSHYA
cmp #'/'
bne .8
lda Flt.Table.cbLO,x
lda Flt.Table.cbLO-1,x
sta .7+1
lda Flt.Table.cbHI,x
lda Flt.Table.cbHI-1,x
sta .7+2
stx hHandler
pla discard JSR return @
pla
lda /K.Buf256 pass full path to handler
iny skip "/"
* ldy #K.Buf256
.6 ldx #$ff SELF MODIFIED SYSCALL #
.7 jmp $ffff SELF MODIFIED
.8 inx
cpx #K.FLT.MAX
.8 cpx #K.FLT.MAX
bne .1
>LDYAI K.Buf256
@ -106,14 +111,22 @@ PFT.CheckNodeA stx .80+1 Save SYSCALL #
lda (pFD),y
beq .8 Handler is 0, back to kernel....
jsr K.GetMemPtr
>STYA .1+1
tax
lda Flt.Table.cbLO-1,x
sta .7+1
lda Flt.Table.cbHI-1,x
sta .7+2
stx hHandler
pla discard JSR return @
pla
ldx .80+1 restore SYSCALL #
lda .81+1 restore passed hFILE
.1 jmp $ffff SELF MODIFIED
.7 jmp $ffff SELF MODIFIED
.8 lda (pFD) #S.FD.T
cmp #S.FD.T.CDEV

View File

@ -37,7 +37,6 @@ VSDRIVE.Init >LDYAI VSDRIVE.MSG0
jsr PrintFYA
jsr VSDRIVE.Ping
bcs .92
>LDYAI VSDRIVE.SRVOK
@ -45,6 +44,7 @@ VSDRIVE.Init >LDYAI VSDRIVE.MSG0
jsr VSDRIVE.SetSlot
bcs .91
pha Push slot
pha 2 times
>LDYAI VSDRIVE.DEVOK
@ -54,12 +54,15 @@ VSDRIVE.Init >LDYAI VSDRIVE.MSG0
>LDYAI VSDRIVE.OK
jsr PrintFYA
rts
.90 >LDYAI VSDRIVE.DRVKO
jsr PrintFYA
rts
.91 >LDYAI VSDRIVE.NOSLOT
jsr PrintFYA
rts
.92 pha Push EC
>LDYAI VSDRIVE.SRVKO
jsr PrintFYA
@ -72,19 +75,20 @@ VSDRIVE.Init >LDYAI VSDRIVE.MSG0
jsr PrintFYA
rts
*--------------------------------------
VSDRIVE.Check bit RRAMWRAMBNK2
bit RRAMWRAMBNK2
VSDRIVE.Check ldx #REGULAR.SIZE
sec
.1 lda DRV.EntryPoint-1,x
eor REGULAR-1,x
bne .9
dex
bne .1
clc
lda $D001
eor DRV
bne .8
lda $D002
eor DRV+1
bne .8
sec
.8 bit RROMBNK1
rts
.9 rts
*--------------------------------------
SSC.Detect stz TmpPtr1
sta TmpPtr1+1
@ -94,31 +98,37 @@ SSC.Detect stz TmpPtr1
lda (TmpPtr1),y
cmp DEVSIG.Value,x
bne .3
dex
bpl .2
lda TmpPtr1+1 A=SlotCN
asl
asl
asl
asl
clc
adc #$8F
tax X=SlotN0
stz SSC.RESET,x
stz SSC.RESET-$8F,x
jsr VSDRIVE.Wait
lda #SSC.CTL.CLKINT+SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP
sta SSC.CTL,x
sta SSC.CTL-$8F,x
jsr VSDRIVE.Wait
lda #SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR
sta SSC.CMD,x
sta SSC.CMD-$8F,x
jsr VSDRIVE.Wait
lda TmpPtr1+1 A=Slot Cn, X=n0
clc
rts X=SlotN0, A=SlotCN
.3 inc TmpPtr1+1 no match, try next slot....
lda TmpPtr1+1
cmp #$C8
bne .1
.9 sec
rts
*--------------------------------------
@ -129,36 +139,45 @@ VSDRIVE.Ping ldx DRV+2 DRV.Slotn0
.10 jsr VSDRIVE.IncTimer Wait.......
bne .10
ldy #10
.1 lda SSC.STATUS,x
.1 lda SSC.STATUS-$8F,x
and #SSC.STATUS.TDRE Ready for transmit?
bne .20
jsr VSDRIVE.IncTimer Wait.......
bne .1
dey
bne .1
lda #1
sec
rts Time Out.....
.20 stz VSDRIVE.Ping.TO
stz VSDRIVE.Ping.TO+1
ldy #5 5 bytes to send
.2 lda VSDRIVE.CMDS-1,y
sta SSC.DATA,x
.3 lda SSC.STATUS,x
sta SSC.DATA-$8F,x
.3 lda SSC.STATUS-$8F,x
and #SSC.STATUS.TDRE char transmitted?
bne .4
jsr VSDRIVE.IncTimer
bne .3
lda #2
sec
rts
.4 dey
bne .2 next byte
lda #521^$ffff 522 bytes to recieve
sta VSDRIVE.Ping.BC
lda /521^$ffff
@ -167,34 +186,43 @@ VSDRIVE.Ping ldx DRV+2 DRV.Slotn0
stz VSDRIVE.Ping.TO+1
ldy #3 EC if no byte recieved
.5 lda SSC.STATUS,x
.5 lda SSC.STATUS-$8F,x
and #SSC.STATUS.RDRF incoming char?
bne .6
* jsr VSDRIVE.Wait
jsr VSDRIVE.IncTimer
bne .5
tya
sec
rts
.6 ldy #4 EC=4 if recieved only partial reply
lda SSC.DATA,x
lda SSC.DATA-$8F,x
inc VSDRIVE.Ping.BC
bne .5
inc VSDRIVE.Ping.BC+1
bne .5
clc
rts
*--------------------------------------
VSDRIVE.IncTimer
inc VSDRIVE.Ping.TO
bne .8
inc VSDRIVE.Ping.TO+1
.8 rts
*--------------------------------------
VSDRIVE.Wait lda #0
.1 dec
bne .1
rts
*--------------------------------------
VSDRIVE.CMDS .HS C6.00.00.03
@ -210,15 +238,19 @@ VSDRIVE.SetSlot ldx #2 Starts at Slot1
.1 lda DEVPTRS,x Drive1
cmp DEVPTRS pointing to S0D1 NODEV ?
bne .2
lda DEVPTRS+1,x
cmp DEVPTRS+1
bne .2
lda DEVPTRS+16,x Drive2
cmp DEVPTRS
bne .2
lda DEVPTRS+17,x
cmp DEVPTRS+1
bne .2
lda #DRV.EntryPoint
sta DEVPTRS,x
sta DEVPTRS+16,x
@ -241,10 +273,12 @@ VSDRIVE.SetSlot ldx #2 Starts at Slot1
lsr exit with A=SLOT
clc
rts
.2 inx
inx
cpx #16
bne .1
rts sec from CPX
*--------------------------------------
VSDRIVE.Install ldx #PATCH.SIZE
@ -253,14 +287,19 @@ VSDRIVE.Install ldx #PATCH.SIZE
sta DRV.EntryPoint-1,x
dex
bne .1
bit RRAMWRAMBNK2
bit RRAMWRAMBNK2
ldx #DRV.SIZE
.2 lda DRV-1,x
sta $D000,x
dex
bne .2
bit RROMBNK1
clc
rts
*--------------------------------------
@ -280,10 +319,12 @@ VSDRIVE.OK .AZ "VSDRIVE Driver Successfully Installed.\n"
*--------------------------------------
* ProDOS $BE41->$BE4B Patch for switching to BANK2 (10 bytes)
*--------------------------------------
REGULAR .AS "(C)APPLE "
REGULAR.SIZE .EQ *-REGULAR
PATCH .PH DRV.EntryPoint
bit RRAMWRAMBNK2
sta RRAMWRAMBNK2
jsr $D001
bit RRAMWRAMBNK1
sta RRAMWRAMBNK1
rts
.EP
PATCH.SIZE .EQ *-PATCH
@ -309,17 +350,17 @@ DRV.UNITNUM .EQ $43
DRV.BUFF .EQ $44
DRV.BLKNUM .EQ $46
*--------------------------------------
DRV .EQ *
.PH $D001 Main LC Bnk 2 $D001->$DFFF
DRV .PH $D001 Main LC Bnk 2 $D001->$DFFF
cld
DRV.START cld
DRV.Slotn0 ldx #$ff Self Modified
ldx #$ff Self Modified
lda DRV.COMMAND S=0,R=1,W=2,F=3
bne .1
ldx #$ff return Status
ldy #$ff
.8 lda #0
clc
rts
@ -414,6 +455,7 @@ DRV.DO.CMD.R ldy #3 Read Back and check 4 bytes
*--------------------------------------
DRV.DO.CMD.ERR1 pla
pla
DRV.DO.CMD.ERR lda #MLI.E.IO
sec
rts
@ -463,23 +505,23 @@ DRV.DO.CMD.W lda #$B1 lda (),y
*--------------------------------------
DRV.SSCSend sta .2+1
.1 lda SSC.STATUS,x
.1 lda SSC.STATUS-$8F,x
* bit #SSC.STATUS.DCD+SSC.STATUS.DSR
* beq DRV.DO.CMD.ERR1
and #SSC.STATUS.TDRE Outgoing char?
beq .1
.2 lda #$ff
sta SSC.DATA,x
sta SSC.DATA-$8F,x
rts
*--------------------------------------
DRV.SSCGet lda SSC.STATUS,x
DRV.SSCGet lda SSC.STATUS-$8F,x
* bit #SSC.STATUS.DCD+SSC.STATUS.DSR
* beq DRV.DO.CMD.ERR1
and #SSC.STATUS.RDRF incoming char?
beq DRV.SSCGet
lda SSC.DATA,x
lda SSC.DATA-$8F,x
rts
*--------------------------------------
DRV.READWRITE bit RRAMWRAMBNK1