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 CS.RUN.GetZoneList
>LDYAI 1024 >LDYAI 1024
>STYA.G P.LookupName+$08 BufLen >STYA.G P.GetZoneList+$08 BufLen
>LDYA BufPtr >LDYA BufPtr
>STYA.G P.LookupName+$0A BufPtr >STYA.G P.GetZoneList+$0A BufPtr
>LDA.G P.GetInfo+$0A BRIDGE >LDA.G P.GetInfo+$0A BRIDGE
>STA.G P.GetZoneList+$0E >STA.G P.GetZoneList+$0E

View File

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

View File

@ -15,7 +15,6 @@ BUFSIZE .EQ 256
.OR ZPBIN .OR ZPBIN
ZS.START ZS.START
ZPBufPtr .BS 2 ZPBufPtr .BS 2
ZPBufLen .BS 2
hBuf .BS 1 hBuf .BS 1
hDev .BS 1 hDev .BS 1
TimeOut .BS 1 TimeOut .BS 1
@ -38,7 +37,7 @@ CS.START cld
*-------------------------------------- *--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE L.MSG.USAGE .DA MSG.USAGE
L.MSG.DEVOK .DA MSG.DEVOK L.MSG.DEVOK .DA MSG.DEVOK
@ -50,22 +49,22 @@ CS.INIT clc
CS.RUN lda #1 CS.RUN lda #1
>SYSCALL ArgV >SYSCALL ArgV
bcs .9 bcs .9
>PUSHYA >PUSHYA
>PUSHBI O.RDWR >PUSHBI O.RDWR
>PUSHBI 0 type >PUSHBI 0 type
>PUSHWZ auxtype >PUSHWZ auxtype
>SYSCALL FOpen >SYSCALL FOpen
bcs .99 bcs .99
stx hDev sta hDev
>LDYA L.MSG.DEVOK >LDYA L.MSG.DEVOK
>SYSCALL PutS >SYSCALL PutS
>LDYAI BUFSIZE >LDYAI BUFSIZE
>SYSCALL GetMem >SYSCALL GetMem
bcs .99 bcs .99
>STYA ZPBufPtr >STYA ZPBufPtr
stx hBuf stx hBuf
@ -76,31 +75,32 @@ CS.RUN lda #1
lda #E.SYN lda #E.SYN
sec sec
.99 rts .99
CS.RUN.RTS rts
*--------------------------------------
CS.RUN.LOOP >SLEEP CS.RUN.LOOP >SLEEP
lda hDev lda hDev
>SYSCALL FEOF >SYSCALL FEOF
bcs .99 bcs CS.RUN.RTS
tay tay
bne .2 EOF, no char bne .1 EOF, no char
>PUSHWI BUFSIZE >PUSHWI BUFSIZE
>PUSHW ZPBufPtr >PUSHW ZPBufPtr
lda hDev lda hDev
>SYSCALL FRead >SYSCALL FRead
bcc .1 bcs CS.RUN.RTS
.99 rts
>PUSHYA len
.1 >PUSHYA len
>PUSHW ZPBufPtr >PUSHW ZPBufPtr
ldy #S.PS.hStdOut ldy #S.PS.hStdOut
lda (pPS),y lda (pPS),y
>SYSCALL FWrite >SYSCALL FWrite
bcs .9 bcs .9
.2 ldy #S.PS.hStdIn .1 ldy #S.PS.hStdIn
lda (pPS),y lda (pPS),y
>SYSCALL FEOF >SYSCALL FEOF
@ -108,27 +108,28 @@ CS.RUN.LOOP >SLEEP
tay tay
bne CS.RUN.LOOP EOF = true, no char from STDIN bne CS.RUN.LOOP EOF = true, no char from STDIN
>PUSHWI BUFSIZE >PUSHWI BUFSIZE
>PUSHW ZPBufPtr >PUSHW ZPBufPtr
ldy #S.PS.hStdIn ldy #S.PS.hStdIn
lda (pPS),y lda (pPS),y
>SYSCALL FRead >SYSCALL FRead
.3 bcs .9 bcs .9
>STYA ZPBufLen tax
lda (ZPBufPtr) lda (ZPBufPtr)
cmp #$14 Ctrl-T eor #$14 Ctrl-T
beq .9 beq .8
>PUSHW ZPBufLen txa
>PUSHYA len
>PUSHW ZPBufPtr >PUSHW ZPBufPtr
lda hDev lda hDev
>SYSCALL FWrite >SYSCALL FWrite
bcs .9 bcs .9
jmp CS.RUN.LOOP jmp CS.RUN.LOOP
.9 rts .8 sec
.9 rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT lda (pEvent) CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event? 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 pPS .EQ $D2
pEvent .EQ $D4 pEvent .EQ $D4
* .EQ $D6 hHandler .EQ $D6
* .EQ $D7
*-------------------------------------- *--------------------------------------
* PS Context : 40 bytes MAX * PS Context : 40 bytes MAX
*-------------------------------------- *--------------------------------------
@ -472,7 +473,7 @@ S.FD.T.LNK .EQ 8
S.FD.T.DSOCK .EQ 10 S.FD.T.DSOCK .EQ 10
S.FD.T.SSOCK .EQ 12 S.FD.T.SSOCK .EQ 12
S.FD.T.PIPE .EQ 14 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.REF .EQ 2
S.FD.REG.IOBUF .EQ 3 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.Ph0Off .EQ $C080
IO.D2.Ph0On .EQ $C081 IO.D2.Ph0On .EQ $C081
IO.D2.Ph1Off .EQ $C082 *IO.D2.Ph1Off .EQ $C082
IO.D2.Ph1On .EQ $C083 *IO.D2.Ph1On .EQ $C083
IO.D2.Ph2Off .EQ $C084 *IO.D2.Ph2Off .EQ $C084
IO.D2.Ph2On .EQ $C085 *IO.D2.Ph2On .EQ $C085
IO.D2.Ph3Off .EQ $C086 *IO.D2.Ph3Off .EQ $C086
IO.D2.Ph3On .EQ $C087 *IO.D2.Ph3On .EQ $C087
IO.D2.DrvOff .EQ $C088 IO.D2.DrvOff .EQ $C088
IO.D2.DrvOn .EQ $C089 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.UID .EQ 28
S.SMB.H.MID .EQ 30 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_STANDARD .EQ $0001
SMB_INFO_QUERY_EA_SIZE .EQ $0002 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 .9 ldy IO.D2.DrvOff,x
rts return error status in carry. 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 BB.Seek lda BB.HdrTrk get track we're on
jsr BB.Trk2Qtrk jsr BB.Trk2Qtrk
sta BB.CurrentQTrack sta BB.CurrentQTrack
@ -302,8 +328,15 @@ BB.Seek lda BB.HdrTrk get track we're on
cmp BB.TargetQTrack cmp BB.TargetQTrack
beq BB.Read beq BB.Read
ldx BB.Slotn0 will do a ph0 off tay
ldy BB.Slotn0
and #6
ora BB.Slotn0
tax
tya
inc
bra .3
.1 pha .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,x
sta IO.D2.Ph0On,y sta IO.D2.Ph0On,y
lda #IO.D2.SeekTimeB lda #IO.D2.SeekTimeB
jsr BB.Wait jsr BB.Wait
.6 lda BB.CurrentQTrack lda BB.CurrentQTrack
cmp BB.TargetQTrack cmp BB.TargetQTrack
bne .1 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,x
sta IO.D2.Ph0Off,y 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 BB.Read ldx BB.Slotn0

View File

@ -24,39 +24,38 @@ D2Recalibrate >PULLB DrvSlt
jsr CheckDiskII jsr CheckDiskII
bcs .9 bcs .9
* ldx Slotn0 ldx Slotn0
ldy Slotn0 ldy #168
.1 lda IO.D2.Ph0Off,x
lda #168 lda #IO.D2.SeekTimeR
jsr D2.Wait100usecA
.1 dec
dec
pha
dey
dey
tya
and #6 and #6
ora Slotn0 ora Slotn0
phy tax
plx lda IO.D2.Ph0On,x
tay
lda IO.D2.Ph0On,y
lda #IO.D2.SeekTimeR lda #IO.D2.SeekTimeR
jsr D2.Wait100usecA jsr D2.Wait100usecA
lda IO.D2.Ph0Off,x tya
lda #IO.D2.SeekTimeR
jsr D2.Wait100usecA
pla
bne .1 bne .1
jsr D2.Wait25600usec ldy #20
* ldy Slotn0 .2 jsr D2.Wait25600usec
lda IO.D2.Ph0Off,y dey
bne .2
lda IO.D2.Ph0Off,x
jsr D2.Wait25600usec jsr D2.Wait25600usec
clc clc
@ -87,11 +86,7 @@ D2MoveHead.SEI lda MoveFrom
inc inc
bra .3 bra .3
.1 lda MoveFrom .1 pha
cmp MoveTo
beq .8
pha
sta IO.D2.Ph0Off,x sta IO.D2.Ph0Off,x
sta IO.D2.Ph0Off,y sta IO.D2.Ph0Off,y
@ -126,13 +121,16 @@ D2MoveHead.SEI lda MoveFrom
ora Slotn0 ora Slotn0
tay tay
sta IO.D2.Ph0On,y
sta IO.D2.Ph0On,x sta IO.D2.Ph0On,x
sta IO.D2.Ph0On,y
lda #IO.D2.SeekTimeF lda #IO.D2.SeekTimeF
jsr D2.Wait100usecA 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,x
sta IO.D2.Ph0Off,y 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 *Data field = D5AAAD + 342 + CS + DEAAEB = 349 2792 bits
TRACK16.GAP3 .EQ 16 160 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 TRACK9.LEN .EQ 6511
*-------------------------------------- *--------------------------------------

View File

@ -7,6 +7,7 @@ NEW
*-------------------------------------- *--------------------------------------
.INB inc/macros.i .INB inc/macros.i
.INB inc/a2osx.i .INB inc/a2osx.i
.INB inc/kernel.i
.INB inc/mli.e.i .INB inc/mli.e.i
.INB inc/eth.i .INB inc/eth.i
.INB inc/libtcpip.i .INB inc/libtcpip.i
@ -18,11 +19,15 @@ ZS.START
ZPReqPtr .BS 2 ZPReqPtr .BS 2
ZPReqLen .BS 2 ZPReqLen .BS 2
ZPCtxPtr .BS 2 ZPCtxPtr .BS 2
pFD .BS 2
ZPRespPtr .BS 2 ZPRespPtr .BS 2
ZPPtr1 .BS 2 ZPPtr1 .BS 2
ZPPtr2 .BS 2 ZPPtr2 .BS 2
BufPtr .BS 2
hBuf .BS 1
ZS.END .ED ZS.END .ED
*-------------------------------------- *--------------------------------------
@ -83,7 +88,7 @@ J.CIFS2 .DA CIFS2.ChTyp
.DA CIFS2.Write .DA CIFS2.Write
.DA CIFS2.ChOwn .DA CIFS2.ChOwn
L.LIBTCPIP .DA LIBTCPIP L.LIBTCPIP .DA LIBTCPIP
L.SMB.TRANSPORT .DA SMB.TRANSPORT L.NETBIOS .DA NETBIOS
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
LIB.LOAD >LDYA L.LIBTCPIP LIB.LOAD >LDYA L.LIBTCPIP
@ -127,8 +132,8 @@ CIFS.Negotiate lda (pStack)
dec dec
sta (pStack) sta (pStack)
>PUSHWI SMB.NegReq.end-SMB.TRANSPORT >PUSHWI SMB.NegReq.end-NETBIOS
>PUSHW L.SMB.TRANSPORT >PUSHW L.NETBIOS
ldy #1+4 hSocket ldy #1+4 hSocket
lda (pStack),y lda (pStack),y
@ -162,11 +167,11 @@ CIFS.Negotiate lda (pStack)
lda (ZPRespPtr),y lda (ZPRespPtr),y
bne .97 bne .97
ldy #3 ldy #S.NETBIOS.LEN+2
lda (ZPRespPtr),y lda (ZPRespPtr),y
clc clc
adc #4 + NETBIOS header adc #S.NETBIOS
sta ZPPtr1 sta ZPPtr1
tay tay
lda #0 lda #0
@ -504,21 +509,7 @@ CIFS2.FStat lda #MLI.E.BADCALL
*-------------------------------------- *--------------------------------------
CIFS.Stat >STYA ZPPtr1 resolved path CIFS.Stat >STYA ZPPtr1 resolved path
lda MountTable+2 jsr MakeTrans2Reg
>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
ldx #0 ldx #0
@ -616,7 +607,6 @@ CIFS2.Pipe lda #MLI.E.BADCALL
rts rts
*-------------------------------------- *--------------------------------------
CIFS.OpenDir >STYA ZPPtr1 resolved path CIFS.OpenDir >STYA ZPPtr1 resolved path
>SYSCALL2 PutS
>LDYAI S.FD.DIR >LDYAI S.FD.DIR
>SYSCALL2 GetMem >SYSCALL2 GetMem
@ -627,6 +617,16 @@ CIFS.OpenDir >STYA ZPPtr1 resolved path
lda #S.FD.T.DIR lda #S.FD.T.DIR
sta (ZPPtr2) 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 >PUSHW ZPPtr1
>PUSHWI 0 >PUSHWI 0
txa txa
@ -639,19 +639,264 @@ CIFS2.OpenDir lda #MLI.E.BADCALL
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CIFS.ReadDir CIFS.ReadDir jsr GetPFD
CIFS2.ReadDir lda #MLI.E.INVPATH
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 sec
rts rts
.90 lda #MLI.E.IO
.99 stz CIFS.Status
sec
rts
*-------------------------------------- *--------------------------------------
CIFS.CloseDir CIFS2.ReadDir.GetBuf
CIFS2.CloseDir 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 CIFS.Open
CIFS2.Open CIFS2.Open
*-------------------------------------- *--------------------------------------
CIFS.Close CIFS.Close jsr GetPFD
>DEBUG
CIFS2.Close CIFS2.Close
lda #MLI.E.INVPATH
sec
rts
*-------------------------------------- *--------------------------------------
CIFS.Read CIFS.Read
CIFS2.Read CIFS2.Read
@ -665,6 +910,24 @@ CIFS2.ChOwn
sec sec
rts 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 GetSMBContext lda (pStack),y
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
>STYA ZPCtxPtr >STYA ZPCtxPtr
@ -763,26 +1026,73 @@ GetRespData sta hResp
sta ZPRespPtr+1 sta ZPRespPtr+1
rts 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) GO.LIBTCPIP jmp (pLIBTCPIP)
*-------------------------------------- *--------------------------------------
CS.END CS.END
*-------------------------------------- *--------------------------------------
LIBTCPIP .AZ "libtcpip" NETBIOS .DA #0 DIRECT TCP TRANSPORT
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
.DA #0 24 BITS LENGTH .DA #0 24 BITS LENGTH
.DA /SMB.NegReq.end-SMB.H .DA /SMB.NegReq.end-SMB.H
.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 SMB.Trans2.H .DA #15 WORD COUNT
.BS 2 TotalParamCount .BS 2 TotalParamCount
.DA 0 TotalDataCount .DA 0 TotalDataCount
.DA 2 MaxParameterCount .DA 10 MaxParameterCount
.DA 40 MaxDataCount .DA 512 MaxDataCount
.DA #0 MaxSetupCount .DA #0 MaxSetupCount
.HS 00 Reserved1 .HS 00 Reserved1
.DA 0 Flags .DA 0 Flags
@ -889,24 +1199,42 @@ SMB.QueryPathInfo.Len .EQ *-SMB.QueryPathInfo
*-------------------------------------- *--------------------------------------
SMB.FindFirst .DA 1 TRANS2_FIND_FIRST2 SMB.FindFirst .DA 1 TRANS2_FIND_FIRST2
.BS 2 PrmCnt .BS 2 PrmCnt
.HS 00 Padding .HS 000000 Padding
.DA $0016 SearchAttributes .DA $0037 SearchAttributes
.DA 1024 SearchCount .DA 1024 SearchCount
.DA 2 Flags .DA 2 Flags
.DA SMB_INFO_STANDARD InformationLevel .DA SMB_INFO_STANDARD InformationLevel
* .AZ "*.*" FileName .HS 00000000 SearchStorageType
SMB.FindFirst.end .EQ *-SMB.FindFirst .AZ "*" FileName
SMB.FindFirst.Len .EQ *-SMB.FindFirst
*-------------------------------------- *--------------------------------------
SMB.FindNext .DA 2 TRANS2_FIND_NEXT2 SMB.FindNext .DA 2 TRANS2_FIND_NEXT2
.BS 2 PrmCnt .BS 2 PrmCnt
.HS 00 Padding .HS 000000 Padding
.BS 2 SID .BS 2 SID
.DA 1024 SearchCount .DA 1024 SearchCount
.DA SMB_INFO_STANDARD InformationLevel .DA SMB_INFO_STANDARD InformationLevel
.HS 00000000 ResumeKey .HS 00000000 ResumeKey
.DA 2 Flags .DA 2 Flags
* .AZ "*.*" FileName .AZ "*" FileName
SMB.FindNext.end .EQ *-SMB.FindNext 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 MAN
SAVE usr/src/lib/libcifs.s SAVE usr/src/lib/libcifs.s

View File

@ -188,6 +188,242 @@ XRW.E.EXIT ldx A2L
bit IO.D2.DrvOff,x turn off bit IO.D2.DrvOff,x turn off
rts 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) * preniblize subroutine (16 sector format)
* *
* converts 256 bytes of user data in (buf) into 6 bit nibls in nbuf2. * 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 stx wrefd5+1
rts 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 XRW.SectorIO bit XRW.bWrite
bpl .1 bpl .1
@ -378,23 +561,22 @@ XRW.SectorIO bit XRW.bWrite
jsr XRW.DEBUG jsr XRW.DEBUG
.2 jsr XRW.ReadAddr .2 jsr XRW.ReadAddr
bcs .3 bcs .3 (2)
lda XRW.AddrField.S cpy XRW.ReqSector (4)
cmp XRW.ReqSector bne .3 (2)
beq .8
bit XRW.bWrite (4)
bmi XRW.Write (3)
jmp XRW.Read
.3 inc XRW.RetryCnt .3 inc XRW.RetryCnt
bpl .2 bpl .2
sec sec
.9 rts .9 rts
.8 bit XRW.bWrite
bmi XRW.Write
jmp XRW.Read
*-------------------------------------- *--------------------------------------
* write subroutine (16 sector format) * 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 !! * from (buf), low to high. assumes 1 usec cycle time. self modified code !!
* *
* on entry: x = slotnum times 16 * 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 .LIST ON
XRW.Write lda IO.D2.ReadProt,x PREWRITE MODE XRW.Write bit IO.D2.ReadProt,x (4) PREWRITE MODE
.LIST OFF .LIST OFF
bit IO.D2.ReadMode,x (4)
* lda IO.D2.ReadMode,x lda #$FF (2)
nop (2)
lda nbuf2
sta pcl
lda #$FF Self Sync Byte
sta IO.D2.WriteMode,x (5) goto write mode sta IO.D2.WriteMode,x (5) goto write mode
ora IO.D2.WShift,x (4) 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. pla (4) exact timing.
jsr wnibl7 (13,9,6) write sync. jsr wnibl7 (13,9,6) write sync.
dey (2) 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 lda #$D5 (2) 1st data mark
jsr wnibl9 (15,9,6) jsr wnibl9 (15,9,6)
lda #$AA (2) 2nd data mark lda #$AA (2) 2nd data mark
jsr wnibl9 (15,9,6) jsr wnibl9 (15,9,6)
lda #$AD (2) 3rd data mark lda #$AD (2) 3rd data mark
jsr wnibl9 (15,9,6) jsr wnibl9 (15,9,6)
tya (2) zero checksum tya (2) zero checksum
@ -535,25 +719,22 @@ wrefd5 ldx #$60 (2) restore slot. warning: modified by prenib
pla (4) pla (4)
nop (2) nop (2)
.1 nop (2) .1 clc (2)
lda XRW.EndMark,y (4) DE AA EB lda XRW.EndMark,y (4) DE AA EB
jsr wnibl (15,6) write it jsr wnibl (15,6) write it
dey (2) dey (2)
bpl .1 (3) if not. 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. rts return from write.
* 7-bit nibl write subroutines * 7-bit nibl write subroutines
@ -569,29 +750,33 @@ wnibl sta IO.D2.WLoad,x (5) nibl write
XRW.Write.RTS rts (6) XRW.Write.RTS rts (6)
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
* determine if motor is stopped XRW.TestWP ldx A2L
* lda IO.D2.ReadProt,x test for write protected
* if stopped, controller's shift register will not be changing. lda IO.D2.ReadMode,x
* return y = 0 and zero flag set if it is stopped. rol write protect-->carry-->bit 0=1
lda IO.D2.RData,x keep in read mode
rts
*-------------------------------------- *--------------------------------------
XRW.CheckMotorOn XRW.Wait25600usec
ldx A2L lda #0
XRW.CheckMotorOnX XRW.Wait100usecA
ldy #0 init loop counter. phx
.1 lda IO.D2.RData,x read the shift register. .1 ldx #18 (2)
jsr .9 delay
pha .2 dex (2)
pla more delay. bne .2 (3)
cmp IO.D2.RData,x has shift reg changed ? inc XRW.montimel (6)
bne .9 yes, motor is moving. bne .3 (3)
dey no, dec retry counter inc XRW.montimeh (6)
bne .1 and try 256 times.
.9 rts Z if motor OFF .3 dec (2)
bne .1 (3)
plx
rts
*-------------------------------------- *--------------------------------------
* read subroutine (16-sector format) * read subroutine (16-sector format)
* *
@ -745,218 +930,29 @@ L57CD pla place last byte into user buffer
XRW.Read.RTS rts XRW.Read.RTS rts
.LIST OFF .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 XRW.CheckMotorOn
pha save target track ldx A2L
XRW.CheckMotorOnX
ldy #0 init loop counter.
jsr XRW.Trk2Qtrk .1 lda IO.D2.RData,x read the shift register.
sta XRW.TargetQTrack jsr .9 delay
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
pha pha
pla more delay.
jsr XRW.SEEKOFF cmp IO.D2.RData,x has shift reg changed ?
bcs .2 bne .9 yes, motor is moving.
* Current < Target, must move in dey no, dec retry counter
bne .1 and try 256 times.
inc .9 rts Z if motor OFF
.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
*-------------------------------------- *--------------------------------------
XRW.DEBUG sta CLRPAGE2 XRW.DEBUG sta CLRPAGE2

View File

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

View File

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

View File

@ -626,24 +626,31 @@ Detect6502 ldy #0 Test 6502 BCD bug
* A = Z80 Slot * A = Z80 Slot
*-------------------------------------- *--------------------------------------
DetectZ80 ldx #Z80Code.Size DetectZ80 ldx #Z80Code.Size
.1 lda Z80Code.Start-1,x .1 lda Z80Code.Start-1,x
sta Z80CODE-1,x 00000H for Z80 sta Z80CODE-1,x 00000H for Z80
dex dex
bne .1 bne .1
stz ZPPtr1 stz ZPPtr1
lda #$C1 lda #$C1
sta ZPPtr1+1 sta ZPPtr1+1
.2 sta (ZPPtr1) .2 sta (ZPPtr1)
lda $100D lda $100D
bmi .8 bmi .8
inc ZPPtr1+1 inc ZPPtr1+1
lda ZPPtr1+1 lda ZPPtr1+1
cmp #$C8 cmp #$C8
beq .9 CS beq .9 CS
clc clc
adc #$20 adc #$20
sta $100A sta $100A
bra .2 bra .2
.8 lda ZPPtr1+1 .8 lda ZPPtr1+1
and #$0F and #$0F
clc 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... K.SYSCALL2.MAIN sta CLRREADAUX Coming from KERNEL in AUX...
sta CLRWRITEAUX sta CLRWRITEAUX
jsr .1 jsr .1
sta SETREADAUX sta SETREADAUX
sta SETWRITEAUX sta SETWRITEAUX
rts rts
.1 bit K.SYSCALL.BANK,x Get Target LC BNK .1 bit K.SYSCALL.BANK,x Get Target LC BNK
K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change 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 lda $D000 #RRAMWRAMBNK1 or #RRAMWRAMBNK2
cmp K.SYSCALL.BANK,x cmp K.SYSCALL.BANK,x
beq .7 beq .7
pha remember source BNK pha remember source BNK
stx .6+1 stx .6+1
lda K.SYSCALL.BANK,x 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 .5 ldx #$ff SELF MODIFIED
rts rts
.6 ldx #$ff SELF MODIFIED .6 ldx #$ff SELF MODIFIED
.7 lda #$ff SELF MODIFIED .7 lda #$ff SELF MODIFIED

View File

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

View File

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