diff --git a/.Floppies/A2OSX.BOOTHD.woz b/.Floppies/A2OSX.BOOTHD.woz index d424ccc6..2953156b 100644 Binary files a/.Floppies/A2OSX.BOOTHD.woz and b/.Floppies/A2OSX.BOOTHD.woz differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 9574f5a2..9496c83f 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index 43af5de5..e444ea8a 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ diff --git a/BIN/ATBROWSE.S.txt b/BIN/ATBROWSE.S.txt index 5c2d501c..0d515c41 100644 --- a/BIN/ATBROWSE.S.txt +++ b/BIN/ATBROWSE.S.txt @@ -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 diff --git a/BIN/FORMAT.S.txt b/BIN/FORMAT.S.txt index 8bf00ecf..f4f65ab6 100644 --- a/BIN/FORMAT.S.txt +++ b/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 [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]" diff --git a/BIN/TERM.S.txt b/BIN/TERM.S.txt index 460502d9..06684352 100644 --- a/BIN/TERM.S.txt +++ b/BIN/TERM.S.txt @@ -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? diff --git a/DRV/PPPSSC.DRV.S.txt b/DRV/PPPSSC.DRV.S.txt new file mode 100644 index 00000000..1bb4ef3e --- /dev/null +++ b/DRV/PPPSSC.DRV.S.txt @@ -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 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 80a6f382..e9198feb 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -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 diff --git a/INC/IO.D2.I.txt b/INC/IO.D2.I.txt index e54e6758..4bb65e2f 100644 --- a/INC/IO.D2.I.txt +++ b/INC/IO.D2.I.txt @@ -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 diff --git a/INC/LIBCIFS.I.txt b/INC/LIBCIFS.I.txt new file mode 100644 index 00000000..e770a2a0 --- /dev/null +++ b/INC/LIBCIFS.I.txt @@ -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 diff --git a/INC/NET.SMB.I.txt b/INC/NET.SMB.I.txt index 8a43d075..409c3750 100644 --- a/INC/NET.SMB.I.txt +++ b/INC/NET.SMB.I.txt @@ -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 diff --git a/LIB/LIBBLKDEV.S.BB.txt b/LIB/LIBBLKDEV.S.BB.txt index f28cc4b4..3c55bf2f 100644 --- a/LIB/LIBBLKDEV.S.BB.txt +++ b/LIB/LIBBLKDEV.S.BB.txt @@ -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 diff --git a/LIB/LIBBLKDEV.S.D2.txt b/LIB/LIBBLKDEV.S.D2.txt index 72d1e441..2bca2342 100644 --- a/LIB/LIBBLKDEV.S.D2.txt +++ b/LIB/LIBBLKDEV.S.D2.txt @@ -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 diff --git a/LIB/LIBBLKDEV.S.txt b/LIB/LIBBLKDEV.S.txt index a2bf365e..c95e621e 100644 --- a/LIB/LIBBLKDEV.S.txt +++ b/LIB/LIBBLKDEV.S.txt @@ -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 *-------------------------------------- diff --git a/LIB/LIBCIFS.S.txt b/LIB/LIBCIFS.S.txt index 0eebe2fa..e378f6cb 100644 --- a/LIB/LIBCIFS.S.txt +++ b/LIB/LIBCIFS.S.txt @@ -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 diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index 8e219f09..a02b5c68 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -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 diff --git a/SBIN/CIFSD.S.txt b/SBIN/CIFSD.S.txt index 6f662d2b..0a8dd677 100644 --- a/SBIN/CIFSD.S.txt +++ b/SBIN/CIFSD.S.txt @@ -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 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 diff --git a/SHARED/X.SSC.DRV.S.txt b/SHARED/X.SSC.DRV.S.txt index fb13a0dc..ed42de14 100644 --- a/SHARED/X.SSC.DRV.S.txt +++ b/SHARED/X.SSC.DRV.S.txt @@ -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 diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 00d86e4a..a827b4ea 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -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 diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index ca4ce959..1c5ea7f5 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -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 diff --git a/SYS/KERNEL.S.PFT.txt b/SYS/KERNEL.S.PFT.txt index 4b6cea5c..c4afe8af 100644 --- a/SYS/KERNEL.S.PFT.txt +++ b/SYS/KERNEL.S.PFT.txt @@ -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 diff --git a/SYS/KM.VSDRIVE.S.txt b/SYS/KM.VSDRIVE.S.txt index 1cd8c5cb..30340b4d 100644 --- a/SYS/KM.VSDRIVE.S.txt +++ b/SYS/KM.VSDRIVE.S.txt @@ -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