mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-11 15:31:09 +00:00
Kernel 0.94+
This commit is contained in:
parent
01d23aec78
commit
cc62310a01
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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
|
||||
|
212
BIN/FORMAT.S.txt
212
BIN/FORMAT.S.txt
@ -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]"
|
||||
|
@ -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
914
DRV/PPPSSC.DRV.S.txt
Normal 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
|
@ -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
|
||||
|
@ -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
12
INC/LIBCIFS.I.txt
Normal 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
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
*--------------------------------------
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user