From f12295ec7c5f3af9fa6789786c3aa35ffba6ce99 Mon Sep 17 00:00:00 2001 From: burniouf Date: Thu, 15 Jun 2023 08:17:56 +0200 Subject: [PATCH] NETWORK:fix in TCPIP,new UDETH.DRV, fix in U1.DRV ProDOS.FX:improved TOOLBOK for selectors --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes DRV/UDETH.DRV.S.txt | 494 ++++++++++++++++++++++++++++++++++ DRV/UTHERNET.DRV.S.txt | 82 +++--- LIB/LIBTCPIP.S.TCP.txt | 4 +- ProDOS.FX/ProDOS.S.SEL1.txt | 1 + ProDOS.FX/ProDOS.S.XDOS.A.txt | 42 ++- ProDOS.FX/ProDOS.S.XDOS.B.txt | 50 ++-- ProDOS.FX/ProDOS.S.XDOS.C.txt | 64 +++-- ProDOS.FX/ProDOS.S.XDOS.D.txt | 35 ++- ProDOS.FX/ProDOS.S.XDOS.F.txt | 121 +++++---- ProDOS.FX/ProDOS.S.XRW.txt | 8 - ProDOS.FX/ProDOS.S.txt | 2 - 12 files changed, 701 insertions(+), 202 deletions(-) create mode 100644 DRV/UDETH.DRV.S.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 445f4361be1990f864f42aad89a8e23400252553..015771097f4e41293d91124eb53077cb1020b35b 100644 GIT binary patch delta 58312 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 delta 55392 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 Je!8!^{x2tPGt&S7 diff --git a/DRV/UDETH.DRV.S.txt b/DRV/UDETH.DRV.S.txt new file mode 100644 index 00000000..b2096e71 --- /dev/null +++ b/DRV/UDETH.DRV.S.txt @@ -0,0 +1,494 @@ +NEW + AUTO 3,1 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF drv/udeth.drv +*-------------------------------------- + .INB inc/macros.i + .INB inc/a2osx.i + .INB inc/mli.e.i + .INB inc/nic.i + .INB inc/eth.i +*-------------------------------------- +UD.ROM.SignOfs .EQ $EC "UltimateDrive" +UD.ROM.VerOfs .EQ $F9 MAX/MIN + +UD.IO.Exec .EQ $C080 Write +UD.IO.Status .EQ $C081 Read +UD.IO.Cmd .EQ $C082 Write +UD.IO.Cmd.NetOpen .EQ $70 +UD.IO.Cmd.NetClose .EQ $71 +UD.IO.Cmd.NetSend .EQ $72 +UD.IO.Cmd.NetRcvd .EQ $73 +UD.IO.UnitNum .EQ $C083 Write +UD.IO.MemPtrL .EQ $C084 +UD.IO.MemPtrH .EQ $C085 +UD.IO.BlockNum .EQ $C086 Write 4 bytes, BE +UD.IO.RData .EQ $C087 Read +UD.IO.WData .EQ $C088 Write +UD.IO.DoDMA .EQ $C089 Write +UD.IO.Mode .EQ $C08D Read NZ = DMA, Write b7 +*-------------------------------------- + .DUMMY + .OR ZPBIN +ZS.START +ZPPtr1 .BS 2 +ZPArgPtr .BS 2 +DEVSLOT0x .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.SSCANF.MAC .DA SSCANF.MAC +L.MAC0 .DA DCB+S.DCB.NIC.MAC + .DA DCB+S.DCB.NIC.MAC+1 + .DA DCB+S.DCB.NIC.MAC+2 + .DA DCB+S.DCB.NIC.MAC+3 + .DA DCB+S.DCB.NIC.MAC+4 + .DA DCB+S.DCB.NIC.MAC+5 + .DA 0 End Of Reloc Table +*-------------------------------------- +Dev.Detect >STYA ZPArgPtr + + >LDYA L.MSG.DETECT + >SYSCALL PutS + + lda #UD.ROM.SignOfs + sta ZPPtr1 + lda #$C7 + +.1 sta ZPPtr1+1 + + ldy #ROM.SIG.L-1 + +.10 lda (ZPPtr1),y + cmp ROM.SIG,y + bne .2 + + dey + bpl .10 + + lda ZPPtr1+1 + and #$0F + sta DEVSLOT0x + asl + asl + asl + asl + + sta DEVSLOTx0 + bra .3 + +.2 dec FD.DEV.NAME+3 + lda ZPPtr1+1 + dec + cmp #$C0 + bne .1 + + >LDYA L.MSG.DETECT.KO + >SYSCALL PutS + + lda #MLI.E.NODEV + sec +.99 rts +*-------------------------------------- +.3 ldy #UD.ROM.VerOfs + lda (ZPPtr1),y + sta DIB+S.DIB.VERSION+1 + iny + lda (ZPPtr1),y + sta DIB+S.DIB.VERSION + + jsr Dev.ParseArgs + bcs .99 + +.8 >PUSHW L.MSG.DETECT.OK + >PUSHW L.FD.DEV.NAME + >PUSHBI 2 + >SYSCALL PrintF + + >PUSHWI DRV.END + >PUSHWI DRV.CS.END-DRV.CS.START + >PUSHWI DRV.CS.START + >LDYA L.DRV.CS.START + >SYSCALL InsDrv + bcs .9 + + >STYA FD.DEV+S.FD.DEV.DRVPTR + + >PUSHW L.FD.DEV + >PUSHW L.FD.DEV.NAME + >SYSCALL MKDev + bcs .9 + + ldx DEVSLOT0x + lda #A2osX.S.NIC + sta A2osX.S,x +* clc +.9 rts +*-------------------------------------- +Dev.ParseArgs lda (ZPArgPtr) + bne .1 + + lda A2osX.RANDOM16 + eor A2osX.TIMER16 + sta DCB+S.DCB.NIC.MAC+3 + eor A2osX.RANDOM16+1 + sta DCB+S.DCB.NIC.MAC+4 + eor A2osX.TIMER16+1 + sta DCB+S.DCB.NIC.MAC+5 + clc + rts + +.1 >PUSHW ZPArgPtr + >PUSHW L.SSCANF.MAC + + ldx #0 + +.2 >PUSHW L.MAC0,x + inx + inx + cpx #12 + bne .2 + + >PUSHBI 12 6 x byte PTRs + >SYSCALL SScanF + bcc .8 + + lda #E.SYN +* sec +.8 rts +*-------------------------------------- +CS.END +MSG.DETECT .CZ "Ultimate Drive ETH/W5500 Driver." +MSG.DETECT.OK .CZ "Ultimate Drive ETH/W5500 Installed As Device : %s\r\n" +MSG.DETECT.KO .CZ "Hardware Not Found." +SSCANF.MAC .CZ "%h:%h:%h:%h:%h:%h" +ROM.SIG .AS "UltimateDrive" +ROM.SIG.L .EQ *-ROM.SIG +*-------------------------------------- +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 "eth7" +*-------------------------------------- +* Driver Code +*-------------------------------------- +* https://github.com/profdc9/ip65/blob/main/drivers/dan2d.s +*-------------------------------------- +ZPIOCTL .EQ ZPDRV +ZPBufPtr .EQ ZPDRV+2 +Counter .EQ ZPDRV+4 +*-------------------------------------- +DRV.CS.START cld + jmp (.1,x) +.1 .DA STATUS + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA OPEN + .DA CLOSE + .DA READ + .DA WRITE + .DA 0 end or relocation +*-------------------------------------- +STATUS >STYA ZPIOCTL + + ldy #S.IOCTL.S + lda (ZPIOCTL),y + beq .1 + + cmp #S.IOCTL.S.GETDIB + bne STATUS.DCB + + ldx #S.DIB-1 + + .HS 2C bit abs + +.1 ldx #3 + + ldy #S.IOCTL.BUFPTR + lda (ZPIOCTL),y + sta .3+1 + iny + lda (ZPIOCTL),y + sta .3+2 + +.2 lda DIB,x + +.3 sta $ffff,x SELF MODIFIED + dex + bpl .2 + + clc + rts + +STATUS.DCB cmp #S.IOCTL.S.GETDCB + bne STATUS.9 + + stz DCB+S.DCB.NIC.LINK + + lda #S.DCB.NIC.LINK.OK + tsb DCB+S.DCB.NIC.LINK + + + lda #S.DCB.NIC.LINK.FD + tsb DCB+S.DCB.NIC.LINK + +.1 ldy #S.IOCTL.BUFPTR + lda (ZPIOCTL),y + sta .3+1 + iny + lda (ZPIOCTL),y + sta .3+2 + ldx #S.DCB.NIC-1 + +.2 lda DCB,x + +.3 sta $ffff,x SELF MODIFIED + dex + bpl .2 + + clc + rts + +STATUS.9 lda #MLI.E.BADCTL + sec + rts +*-------------------------------------- +OPEN lda #S.DIB.S.OPENED + bit DIB+S.DIB.S + bne .9 + + jsr CLOSE + +* ldx DEVSLOTx0 Done by CLOSE + + lda #UD.IO.Cmd.NetOpen + sta UD.IO.Cmd,x + jsr IO.Exec + bcs .99 + + ldy #0 + +.1 lda UD.IO.RData,x + sta DCB+S.DCB.NIC.MAC,y + iny + + cpy #6 + bcc .1 + + lda #S.DIB.S.OPENED + tsb DIB+S.DIB.S + + clc + rts + +.9 lda #MLI.E.OPEN + sec +.99 rts +*-------------------------------------- +CLOSE ldx DEVSLOTx0 + + lda #UD.IO.Cmd.NetClose + sta UD.IO.Cmd,x + jsr IO.Exec + bcs .9 + + lda #S.DIB.S.OPENED + trb DIB+S.DIB.S + +* clc +.9 rts +*-------------------------------------- +READ php + sei + + >STYA ZPIOCTL + + ldx DEVSLOTx0 + + lda #UD.IO.Cmd.NetRcvd + sta UD.IO.Cmd,x + jsr IO.Exec + bcs READWRITE.99 + + lda UD.IO.RData,x + ldy #S.IOCTL.BYTECNT + sta (ZPIOCTL),y + pha + eor #$ff + sta Counter + + lda UD.IO.RData,x + iny + sta (ZPIOCTL),y + pha + eor #$ff + sta Counter+1 + + pla + ply + bne .1 + + tax + beq READWRITE.9 + +.1 >SYSCALL2 GetMem + bcs READWRITE.99 + + >STYA ZPBufPtr + phx + phy + ldy #S.IOCTL.BUFPTR+1 + sta (ZPIOCTL),y + dey + pla + sta (ZPIOCTL),y + + ldx DEVSLOTx0 + + ldy #0 + +.2 inc Counter + bne .3 + + inc Counter+1 + beq .8 + +.3 lda UD.IO.RData,x + sta (ZPBufPtr),y + iny + bne .2 + + inc ZPBufPtr+1 + bra .2 + +.8 pla hMem + + plp + clc + rts +*-------------------------------------- +READWRITE.9 lda #E.NODATA + +READWRITE.99 plp + sec + rts +*-------------------------------------- +WRITE php + sei + >STYA ZPIOCTL + + ldx DEVSLOTx0 + + lda #UD.IO.Cmd.NetSend + sta UD.IO.Cmd,x + + ldy #S.IOCTL.BYTECNT + lda (ZPIOCTL),y + sta UD.IO.WData,x + lda (ZPIOCTL),y + eor #$ff + sta Counter + iny + lda (ZPIOCTL),y + sta UD.IO.WData,x + lda (ZPIOCTL),y + eor #$ff + sta Counter+1 + + ldy #S.IOCTL.BUFPTR + lda (ZPIOCTL),y + sta ZPBufPtr + iny + lda (ZPIOCTL),y + sta ZPBufPtr+1 + + ldy #0 + +.1 inc Counter + bne .2 + + inc Counter+1 + beq .8 + +.2 lda (ZPBufPtr),y + sta UD.IO.WData,x + iny + bne .1 + + inc ZPBufPtr+1 + bra .1 + +.8 jsr IO.Exec + bcs WRITE.99 + + plp + clc + rts + +WRITE.99 lda #MLI.E.IO + plp + sec + rts +*-------------------------------------- +IO.Exec lda #0 + sta UD.IO.UnitNum,x + + lda UD.IO.Exec,x + +.1 lda UD.IO.Status,x + bmi .1 + + lsr CS if error, A = ERROR CODE ? + + rts +*-------------------------------------- +DRV.CS.END +DEVSLOTx0 .BS 1 +*-------------------------------------- +DIB .DA #0 + .DA #0,#0,#0 size + .PS "udeth/W5500 " + .DA #S.DIB.T.NIC + .BS 1 Subtype + .BS 2 Version +*-------------------------------------- +DCB .DA #S.DCB.T.NIC + .BS 1 FLAGS + .BS 1 LINK + .DA #S.DCB.NIC.SPEED.10 + .HS 000000000000 MAC + .BS 12 IP/MASK/GW +*-------------------------------------- +DRV.END +MAN +SAVE usr/src/drv/udeth.drv.s +ASM diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt index dcf57ffb..d290dde5 100644 --- a/DRV/UTHERNET.DRV.S.txt +++ b/DRV/UTHERNET.DRV.S.txt @@ -389,23 +389,17 @@ READ php ldy #S.IOCTL.BYTECNT+1 sta (ZPIOCTL),y pha - lsr - pha - lda RTDATA,x + eor #$ff + sta Counter+1 + dey + lda RTDATA,x sta (ZPIOCTL),y tay - ror - adc #0 eor #$ff sta Counter - pla - adc #0 - eor #$ff - sta Counter+1 - pla >SYSCALL2 GetMem bcs READWRITE.99 @@ -422,22 +416,30 @@ READ php ldy #0 -.2 inc Counter - bne .3 +.1 inc Counter + bne .2 inc Counter+1 beq .8 -.3 lda RTDATA,x +.2 lda RTDATA,x + sta (ZPBufPtr),y + + iny + + inc Counter + bne .3 + + inc Counter+1 + beq .8 + +.3 lda RTDATA+1,x sta (ZPBufPtr),y iny - lda RTDATA+1,x - sta (ZPBufPtr),y - iny - bne .2 + bne .1 inc ZPBufPtr+1 - bra .2 + bra .1 .8 pla hMem @@ -464,22 +466,15 @@ WRITE php ldy #S.IOCTL.BYTECNT+1 lda (ZPIOCTL),y sta TxLength+1,x - lsr - pha + eor #$ff + sta Counter+1 dey lda (ZPIOCTL),y sta TxLength,x - ror - adc #0 eor #$ff sta Counter - pla - adc #0 - eor #$ff - sta Counter+1 - lda /PP.BusST sta PacketPagePTR+1,x lda #PP.BusST @@ -500,36 +495,41 @@ WRITE php ldx #5 ldy #S.ETH.SRCMAC+5 -.10 lda DCB+S.DCB.NIC.MAC,x +.1 lda DCB+S.DCB.NIC.MAC,x sta (ZPBufPtr),y dey dex - bpl .10 + bpl .1 ldx DEVSLOTx0 ldy #0 -.1 inc Counter - bne .2 +.2 inc Counter + bne .3 inc Counter+1 beq .8 -.2 lda (ZPBufPtr),y - sta RTDATA,x - iny - bne .3 - - inc ZPBufPtr+1 - .3 lda (ZPBufPtr),y - sta RTDATA+1,x + sta RTDATA,x + iny - bne .1 + + inc Counter + bne .4 + + inc Counter+1 + beq .8 + +.4 lda (ZPBufPtr),y + sta RTDATA+1,x + + iny + bne .2 inc ZPBufPtr+1 - bne .1 + bne .2 .8 plp clc diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index cea7b7ee..43439aab 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -578,8 +578,8 @@ TCP.OUT.Send clc Queue if fail ldy #S.TCP.OPTIONS sta (ZPFrameOutPtr),y -* bit #S.TCP.OPTIONS.ACK -* beq .2 + bit #S.TCP.OPTIONS.ACK + beq .2 ldx #3 ldy #S.TCP.ACKNUM+3 diff --git a/ProDOS.FX/ProDOS.S.SEL1.txt b/ProDOS.FX/ProDOS.S.SEL1.txt index 9dad2fe7..b0ccc286 100644 --- a/ProDOS.FX/ProDOS.S.SEL1.txt +++ b/ProDOS.FX/ProDOS.S.SEL1.txt @@ -25,6 +25,7 @@ SEL1.Filenames .EQ $2000 SEL1.START cld bit RROMBNK2 read ROM +* Already done before jmp $1000 * stz softev * lda #$10 set reset vector to 'dispadr' * sta softev+1 diff --git a/ProDOS.FX/ProDOS.S.XDOS.A.txt b/ProDOS.FX/ProDOS.S.XDOS.A.txt index d117c19a..2c867134 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.A.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.A.txt @@ -786,23 +786,20 @@ clrdir stz gbuf+2,x jsr XDOS.ReadGBufAX read in parent directory block .FIN - ldx own_ent and calc entry address. - lda /gbuf - sta zpt+1 - lda #$04 + jsr XDOS.ZPT.InitGBuf -ocalc clc - dex has entry address been calculated? + ldx own_ent and calc entry address. + +ocalc dex has entry address been calculated? beq H3584 if yes. - adc own_len next entry address - bcc ocalc + lda own_len next entry address + jsr XDOS.ZPT.NextA + bra ocalc + +H3584 ldy #$13 index to block count + clc - inc zpt+1 entry must be in 2nd 256 bytes of block - bcs ocalc always taken. - -H3584 sta zpt - ldy #$13 index to block count H3588 lda (zpt),y adc dinctbl-$13,y add 1 to block count and sta (zpt),y @@ -977,23 +974,18 @@ credone jsr drevise go revise directories with new file jmp upbmap lastly, update volume bitmap *-------------------------------------- -entcalc lda /gbuf set high address of dir entry - sta zpt+1 index pointer. - lda #$04 calc address of entry based +entcalc jsr XDOS.ZPT.InitGBuf + ldx d_entnum on the entry #. -H3689 clc + clc -H368A dex addr = gbuf + ((d_entnum-1) * h_entln) - beq H3696 branch with carry clear = no errors. +.1 dex addr = gbuf + ((d_entnum-1) * h_entln) + beq crerr3 branch with carry clear = no errors. - adc h_entln - bcc H368A + jsr XDOS.ZPT.Next + bcc .1 - inc zpt+1 inc hi address. - bcs H3689 always. - -H3696 sta zpt newly calculated low address. crerr3 rts carry set if error. *-------------------------------------- drevise lda p8date diff --git a/ProDOS.FX/ProDOS.S.XDOS.B.txt b/ProDOS.FX/ProDOS.S.XDOS.B.txt index 648e9dac..e1b305ba 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.B.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.B.txt @@ -44,10 +44,7 @@ XDOS.CheckPath jsr XDOS.FindVol bne lookfil0 branch if more than root - lda /gbuf otherwise, report a bad path error - sta zpt+1 (but 1st create a phantom entry - lda #$04 for open) - sta zpt + jsr XDOS.ZPT.InitGBuf ldy #$1F move in id and date info @@ -247,68 +244,63 @@ filfound lda h_maxent figure out which entry # this is sbc cntent max entries - count entries + 1 adc #$00 = entry # (carry was set) sta d_entnum + lda bloknml and indicate block # of this directory sta d_entblk lda bloknml+1 sta d_entblk+1 - clc + +* clc done by ADC #$00 + rts *-------------------------------------- XDOS.LookupNameInDirBlk lda h_maxent reset count of files per block sta cntent - lda /gbuf - sta zpt+1 - lda #$04 + jsr XDOS.ZPT.InitGBuf reset indirect pointer to gbuf -L38C1 sta zpt reset indirect pointer to gbuf - bcs L38F8 branch if this block contains a header + bcs .4 branch if this block contains a header - ldy #$00 +.1 ldy #$00 lda (zpt),y get length of name in directory. - bne isname branch if there is a name. + bne .2 branch if there is a name. lda nofree test if a free entry has been declared. - bne L38F8 yes, inc to next entry. + bne .4 yes, inc to next entry. jsr filfound set address for current entry. inc nofree indicate a free spot has been found. - bra L38F8 + bra .4 -isname and #$0F strip byte (is checked by 'filfound') +.2 and #$0F strip byte (is checked by 'filfound') inc totent inc count of valid files found. sta namcnt save name length as counter. ldx namptr get index to current path. cmp pathbuf,x are both names the same length? - bne L38F8 no, inc to next entry. + bne .4 no, inc to next entry. -cmpname inx (first) next letter index +.3 inx (first) next letter index iny lda (zpt),y compare names letter by letter cmp pathbuf,x - bne L38F8 + bne .4 dec namcnt all letters compared? - bne cmpname no, continue. + bne .3 no, continue. clc a match is found. -noname rts +.9 rts -L38F8 dec cntent checked all entries in this block? +.4 dec cntent checked all entries in this block? sec - beq noname yes, no name match. - lda h_entln add entry length to current pointer - clc - adc zpt - bcc L38C1 branch if still in 1st page. + beq .9 yes, no name match. - inc zpt+1 look on 2nd page. - clc carry should always be clear before - bra L38C1 looking at next. + jsr XDOS.ZPT.Next + bra .1 *-------------------------------------- XDOS.FindVol jsr XDOS.FindVolInVCBOrDev bcs novolume diff --git a/ProDOS.FX/ProDOS.S.XDOS.C.txt b/ProDOS.FX/ProDOS.S.XDOS.C.txt index 5b3662a1..1a4d6a10 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.C.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.C.txt @@ -292,7 +292,9 @@ XDOS.CheckAndUnpackGBuf sec rts -XDOS.UnpackGBuf jsr XDOS.Pack.Init +XDOS.UnpackGBuf jsr XDOS.ZPT.InitGBuf + + ldx h_maxent XDOS.UnpackZPT .EQ * @@ -336,17 +338,21 @@ XDOS.UnpackZPT .EQ * .5 dey bne .2 -.6 jsr XDOS.Pack.Next - dex - bne .1 +.6 dex + beq .8 - clc make sure CC + jsr XDOS.ZPT.Next + bra .1 + +.8 clc make sure CC rts *-------------------------------------- *XDOS.PackGBuf.Bitmap .BS 2 XDOS.PackGBuf.Bitmap .EQ sos *-------------------------------------- -XDOS.PackGBuf jsr XDOS.Pack.Init +XDOS.PackGBuf jsr XDOS.ZPT.InitGBuf + + ldx h_maxent .1 lda (zpt) and #$0F @@ -392,28 +398,30 @@ XDOS.PackGBuf jsr XDOS.Pack.Init lda XDOS.PackGBuf.Bitmap+1 sta (zpt),y -.6 jsr XDOS.Pack.Next +.6 jsr XDOS.ZPT.Next dex bne .1 rts *-------------------------------------- -XDOS.Pack.Init lda #4 - sta zpt +XDOS.ZPT.InitGBuf lda /gbuf - sta zpt+1 - ldx h_maxent -* beq * DEBUG : should never happends +XDOS.ZPT.InitA sta zpt+1 + lda #4 + sta zpt + rts *-------------------------------------- -XDOS.Pack.Next lda h_entln - clc +XDOS.ZPT.Next lda h_entln + +XDOS.ZPT.NextA clc adc zpt sta zpt bcc .8 inc zpt+1 + clc .8 rts .FIN @@ -553,11 +561,8 @@ L3EA9 ldx levels be sure there is a top index jsr rfcbfst go get only index block. bcs L3ED4 if error. - ldy fcbptr save newly loaded index block's address. - lda bloknml - sta FCBs+FCB.IBLK,y - lda bloknml+1 - sta FCBs+FCB.IBLK+1,y + jsr XDOS.UpdateFCBIBlk save newly loaded index block's address. + datlevel1 bra datlevel branch always L3ED4 rts @@ -597,17 +602,10 @@ saplevel sta bloknml read in next lower index block. jsr fileio1 go read index block. bcs L3ED4 error - ldy fcbptr - lda bloknml - sta FCBs+FCB.IBLK,y save block address of this index in fcb - lda bloknml+1 - sta FCBs+FCB.IBLK+1,y + jsr XDOS.UpdateFCBIBlk save block address of this index in fcb + +datlevel jsr XDOS.Tpos2Y get block address of data block -datlevel lda tposhi get block address of data block - lsr - lda tposlh ( if there is one ) - ror - tay lda (zpt),y data block address low inc zpt+1 cmp (zpt),y @@ -1018,6 +1016,14 @@ L41C1 tya calc position of next fcb. clc report no conflicts. rts *-------------------------------------- +XDOS.UpdateFCBIBlk + ldy fcbptr + lda bloknml + sta FCBs+FCB.IBLK,y save block address of this index in fcb + lda bloknml+1 + sta FCBs+FCB.IBLK+1,y + rts +*-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.xdos.c LOAD usr/src/prodos.fx/prodos.s diff --git a/ProDOS.FX/ProDOS.S.XDOS.D.txt b/ProDOS.FX/ProDOS.S.XDOS.D.txt index 58865064..d0de7fd3 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.D.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.D.txt @@ -93,11 +93,8 @@ L4269 dec cmdtemp has all been read fast ? L427B bcs L4249 - lda tposhi get index to next block address - lsr - lda tposlh - ror - tay index to address = int(pos/512) + jsr XDOS.Tpos2Y get index to next block address + lda (zpt),y get low address sta bloknml inc zpt+1 @@ -456,11 +453,8 @@ L44B8 jsr alcwblk go allocate for data block. lda #FCB.F.IBLKMOD indicate index block is dirty. jsr XDOS.SetFCBStatus - lda tposhi calculate position within index block. - lsr - lda tposlh - ror - tay now put block address into index block. + jsr XDOS.Tpos2Y now put block address into index block. + inc zpt+1 high byte first. lda scrtch+1 tax @@ -593,15 +587,15 @@ L457A jsr alcwblk get another block address for the sap *-------------------------------------- zeroindex lda #$00 tay -L3F30 sta (zpt),y zero out the index half of the user's +.1 sta (zpt),y zero out the index half of the user's iny i/o buffer - bne L3F30 + bne .1 inc zpt+1 -L3F37 sta (zpt),y +.2 sta (zpt),y iny - bne L3F37 + bne .2 dec zpt+1 restore proper address rts @@ -663,7 +657,8 @@ alcwblk jsr alc1blk *-------------------------------------- tstwprot jsr XDOS.GetFCBStatus check for 'never been modified' condition and #$F0 - bne tstwprot.8 ordinary rts if known write ok. + clc + bne tstwprot.RTS ordinary rts if known write ok. jsr XDOS.FCBDevIDSelect @@ -687,9 +682,13 @@ twrprot1 sta unitnum make the device status call plx stx bloknml+1 - rts - -tstwprot.8 clc +tstwprot.RTS rts +*-------------------------------------- +XDOS.Tpos2Y lda tposhi get index to next block address + lsr + lda tposlh + ror + tay index to address = int(pos/512) rts *-------------------------------------- MAN diff --git a/ProDOS.FX/ProDOS.S.XDOS.F.txt b/ProDOS.FX/ProDOS.S.XDOS.F.txt index 7c479312..926d81d8 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.F.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.F.txt @@ -741,58 +741,13 @@ XDOS.SPParams .HS 03 # of parms (always 3 except format) XDOS.SPParams.U .HS 00 unit number XDOS.SPParams.B .HS 0000 data buffer .HS 000000 block number (3 bytes) -*-------------------------------------- - .DO XRWDBG=1 - -XRW.DEBUG.BASE .EQ $750 - -XRW.DEBUG sta CLRPAGE2 - - lda #" " - sta XRW.DEBUG.BASE+$22 - - lda #"R" - bit XRW.bWrite - bpl .1 - - lda #"W" - -.1 sta XRW.DEBUG.BASE+$23 - - ldx #$24 - - lda XRW.ReqTrack - jsr XRW.DEBUG.PBYTEx - - lda XRW.ReqSector - -XRW.DEBUG.PBYTEx - pha - lsr - lsr - lsr - lsr - jsr .7 - - pla - -.7 and #$0F - ora #$B0 - cmp #"9"+1 - bcc .8 - - adc #6 - -.8 sta XRW.DEBUG.BASE,x - inx - rts - - .FIN *-------------------------------------- XDOS.TOOLBOX jmp (.1,x) .1 .DA XDOS.TOOLBOX.MEMRESET .DA XDOS.TOOLBOX.UnpackYA + .DA XDOS.TOOLBOX.EnumBlk + .DA XDOS.TOOLBOX.EnumNext XDOS.TOOLBOX.MEMRESET ldx #$17 @@ -812,6 +767,74 @@ XDOS.TOOLBOX.UnpackYA ldx #1 jmp XDOS.UnpackZPT + +XDOS.TOOLBOX.EnumBlk + jsr XDOS.ZPT.InitA + + lda (zpt) + and #$F0 + cmp #$E0 + bcs .8 + + ldy #$1F + ldx #3 + +.1 lda (zpt),y + sta h_entln,x + dey + dex + bpl .1 + + jsr XDOS.ZPT.Next + + lda h_maxent + dec skip header + sta cntent + +* ldy h_fcnt +* lda h_fcnt+1 + +.8 clc + rts + +XDOS.TOOLBOX.EnumNext + sty sos + sta sos+1 + + lda cntent + beq .9 + +.1 lda (zpt) + and #$0F + beq .7 + + sta (sos) + + pha + + ldx #1 + jsr XDOS.UnpackZPT + + ply + +.2 lda (zpt),y + sta (sos),y + dey + bne .2 + + ldy #16 FileType + lda (zpt),y + + clc + rts + +.7 jsr XDOS.ZPT.Next + + dec cntent + bne .1 + +.9 sec + rts *-------------------------------------- * data tables *-------------------------------------- @@ -901,10 +924,12 @@ h_credt .HS 0000 directory creation date .HS 00 version under which this dir created .HS 00 earliest version that it's compatible h_attr .HS 00 attributes (protect bit, etc.) + +*-------------------------------------- h_entln .HS 00 length of each entry in this directory h_maxent .HS 00 maximum number of entries per block -*-------------------------------------- h_fcnt .HS 0000 current # of files in this directory +*-------------------------------------- h_bmap .HS 0000 address of first allocation bitmap h_tblk .HS 0000 total number of blocks on this unit *-------------------------------------- diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index 58fd67b8..05a1f45c 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -150,10 +150,6 @@ XRW.Cmd lda A4L get command # *-------------------------------------- .2 sei DISABLE IRQ - .DO XRWDBG=1 - jsr XRW.DEBUG - .FIN - lda #2 sta XRW.RecalibrateCnt @@ -173,10 +169,6 @@ XRW.Cmd lda A4L get command # inc XRW.ReqSector inc XRW.ReqSector - .DO XRWDBG=1 - jsr XRW.DEBUG - .FIN - jsr XRW.SectorIO get 2nd half of block dec buf+1 diff --git a/ProDOS.FX/ProDOS.S.txt b/ProDOS.FX/ProDOS.S.txt index c3c5274c..52e4a1e9 100644 --- a/ProDOS.FX/ProDOS.S.txt +++ b/ProDOS.FX/ProDOS.S.txt @@ -12,8 +12,6 @@ ACL .EQ 1 LOGO .EQ 1 PM .EQ 1 *-------------------------------------- -XRWDBG .EQ 0 -*-------------------------------------- NSC.IOBASE .EQ $C300 *-------------------------------------- .INB inc/zp.i