diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index acaa062e..7fe14ed9 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/ProDOS.FX/ProDOS.S.XDOS.A.txt b/ProDOS.FX/ProDOS.S.XDOS.A.txt index 75db26bd..600bf1ee 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.A.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.A.txt @@ -536,7 +536,7 @@ fndfvol tax search for associated vcb nxtfvol txa adjust index to next vcb. clc - adc #$20 + adc #VCB bcc fndfvol loop until volume found. lda #$0A open file has no volume so @@ -611,24 +611,24 @@ online1 jsr fnddvcb see if it has already been logged in. ldx #$00 read in root (volume) directory lda #$02 - jsr XDOS.ReadGBufAX read it into general purpose buffer. + jsr XDOS.ReadGBufAX read it into general purpose buffer. ldx vcbptr index to the vcb entry. bcc volfound branch if read was ok. tay error value. - lda VCBs+VCB.OFCNT,x don't take the vcb offline if + lda VCBs+VCB.OFCNT,x don't take the vcb offline if bne rtrnerr there are active files present. - sta VCBs,x now take the volume offline + sta VCBs,x now take the volume offline sta VCBs+VCB.DEV,x rtrnerr tya error value. bcs olinerr1 branch if unable to read. -volfound lda VCBs,x has it been logged in before? +volfound lda VCBs,x has it been logged in before? beq H349E if not. - lda VCBs+VCB.OFCNT,x it has, are there active files? + lda VCBs+VCB.OFCNT,x it has, are there active files? bne H34AA branch if volume is currently busy. H349E jsr logvcb1 go log it in. diff --git a/ProDOS.FX/ProDOS.S.XDOS.B.txt b/ProDOS.FX/ProDOS.S.XDOS.B.txt index 526d73a7..bee6994f 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.B.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.B.txt @@ -319,9 +319,9 @@ preproot jsr findvol search vcb's and dev's for spec'd volume ldx vcbptr inx -.2 lda VCBs+VCB.TBLK,x misc info includes +.2 lda VCBs+VCB.TBLK,x misc info includes sta h_tblk,y total # of blocks, - lda VCBs+VCB.BMAP,x the address of the 1st bitmap, + lda VCBs+VCB.BMAP,x the address of the 1st bitmap, sta h_bmap,y lda bloknml,y directory's disk address, sta d_head,y @@ -361,13 +361,13 @@ L396F sty vnptr and save. L3975 pha acc now used as vcb lookup index. tax index pointer to x. - lda VCBs,x get vcb volume name length. + lda VCBs,x get vcb volume name length. bne L3987 branch if claimed vcb to be tested. L397C ldy vnptr restore pointer to requested vol name. pla now adj vcb index to next vcb entry. clc - adc #$20 + adc #VCB bcc L3975 branch if more vcb's to check bcs L39D4 otherwise go look for unlogged volumes. @@ -405,7 +405,7 @@ L39AC tay if prefix then find ptr to prefixed * verify volume name -L39C2 jsr XDOS.ReadGBuf read in directory (or prefix dir) +L39C2 jsr XDOS.ReadGBuf read in directory (or prefix dir) bcs L39CC if error then look on other devices. jsr XDOS.CheckVolName compare dir name with path name. @@ -448,7 +448,7 @@ L39FE sta devnum preserve device to be checked next. lda VCBs,x beq L3A16 if free vcb. - lda VCBs+VCB.OFCNT,x is this volume active? + lda VCBs+VCB.OFCNT,x is this volume active? bne L39E2 if so, no need to re-log. L3A16 lda #$02 go read root dir into gbuf @@ -478,7 +478,7 @@ fnddvcb lda #$00 look for vcb with this device# ldy #$FF L3A40 tax new index to next vcb - lda VCBs+VCB.DEV,x check all devnums + lda VCBs+VCB.DEV,x check all devnums cmp devnum is this the vcb? bne L3A4E if not @@ -486,7 +486,7 @@ L3A40 tax new index to next vcb clc indicates found rts -L3A4E lda VCBs,x is this a free vcb? +L3A4E lda VCBs,x is this a free vcb? bne L3A57 if not iny @@ -494,8 +494,8 @@ L3A4E lda VCBs,x is this a free vcb? L3A57 txa clc inc index to next vcb - adc #$20 - bne L3A40 + adc #VCB + bcc L3A40 tya any free vcb's available? bpl L3A79 yes @@ -503,20 +503,20 @@ L3A57 txa lda #$00 look for an entry to kick out L3A62 tax - lda VCBs+VCB.OFCNT,x any open files? + lda VCBs+VCB.OFCNT,x any open files? beq L3A70 no, kick this one out. txa next vcb clc - adc #$20 (vcb entry size) - bne L3A62 + adc #VCB + bcc L3A62 lda #MLI.E.VCBFULL all vcb entries have open files * sec rts L3A70 stx vcbptr save entry index. - stz VCBs,x free this entry + stz VCBs,x free this entry stz VCBs+VCB.DEV,x L3A79 clc no error. rts @@ -571,7 +571,7 @@ XDOS.CheckVolName.RTS rts *-------------------------------------- logvcb ldx vcbptr previously logged in volume? - lda VCBs,x (acc = 0?) + lda VCBs,x (acc = 0?) beq logvcb1 no, go prepare vcb. jsr cmpvcb does vcb match vol read? diff --git a/ProDOS.FX/ProDOS.S.XDOS.C.txt b/ProDOS.FX/ProDOS.S.XDOS.C.txt index 224ac5bf..c0f5ad16 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.C.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.C.txt @@ -873,8 +873,8 @@ L41A9 lda FCBs,y all bytes must match to say that it's L41C1 tya calc position of next fcb. and #$E0 first strip any possible index offsets. clc - adc #$20 inc to next fcb. - bne L4188 branch if more to compare. + adc #FCB inc to next fcb. + bcc L4188 branch if more to compare. clc report no conflicts. rts diff --git a/ProDOS.FX/ProDOS.S.XDOS.E.txt b/ProDOS.FX/ProDOS.S.XDOS.E.txt index 0f766f37..3f99bd99 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.E.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.E.txt @@ -28,7 +28,7 @@ L4654 sta fcbptr save current low byte of pointer. L4675 lda fcbptr inc pointer to next fcb clc - adc #$20 + adc #FCB bcc L4654 branch if within same page. lda cferr on final close report logged errors. @@ -69,6 +69,7 @@ XDOS.Flush ldy #$01 flush all ? sta cferr clear global flush error. lda #$00 start at the beginning. + L46C3 sta fcbptr save current low byte of pointer. tay index to ref #. lda FCBs,y is this reference file open ? @@ -79,7 +80,7 @@ L46C3 sta fcbptr save current low byte of pointer. L46D1 lda fcbptr inc pointer to next fcb. clc - adc #$20 + adc #FCB bcc L46C3 branch if within same page L46D9 clc @@ -450,35 +451,6 @@ XDOS.NewLine ldy #$02 adjust newline status for open file. clc no error possible rts *-------------------------------------- -XDOS.GetFileInfoEx - jsr findfile see if file exists - bcc .1 - - cmp #MLI.E.INVPATH - sec - bne .9 - -.1 ldx #S.FIEX.BLKPTR+2-1 - ldy #S.FIEX.BLKPTR+2-1+3 - -.2 lda d_stor,x - sta (A3L),y - dey - dex - bpl .2 - - ldx #7 - ldy #S.FIEX.ACL+7+3 - -.3 lda h_acl,x - sta (A3L),y - dey - dex - bpl .3 - - clc -.9 rts -*-------------------------------------- XDOS.GetFileInfo jsr findfile look for file. bcc L4988 no error. @@ -534,47 +506,6 @@ L4994 lda inftabl-3,y L49A4 rts *-------------------------------------- -XDOS.SetFileInfoEx - jsr findfile - bcs L49A4 - - ldx #S.FIEX.BLKPTR+2-1 - ldy #S.FIEX.BLKPTR+2-1+3 - -.2 lda (A3L),y - sta d_stor,x - dey - dex - bpl .2 - - jmp drevise1 -*-------------------------------------- -XDOS.SetACL jsr findfile - bcs .9 - - lda d_stor - and #$F0 - cmp #$D0 - bne .99 - - jsr XDOS.ReadGBuf_d_frst - bcs .9 - - ldx #7 - ldy #S.FIEX.ACL+7+3 - -.3 lda (A3L),y - sta gbuf+$14,x - dey - dex - bpl .3 - - jmp XDOS.WriteGBuf - -.99 lda MLI.E.UNSUPST - sec -.9 rts -*-------------------------------------- XDOS.SetFileInfo jsr findfile get the file to work on. bcs L49CF if error. @@ -611,6 +542,79 @@ L49D0 ldy #$0B jmp drevise1 end by updating directory. L49D9 jmp drevise update with clock also... *-------------------------------------- +XDOS.SetFileInfoEx + jsr findfile + bcs L49A4 + + ldx #S.FIEX.BLKPTR+2-1 + ldy #S.FIEX.BLKPTR+2-1+3 + +.2 lda (A3L),y + sta d_stor,x + dey + dex + bpl .2 + + jmp drevise1 +*-------------------------------------- +XDOS.GetFileInfoEx + jsr findfile see if file exists + bcc .1 + + cmp #MLI.E.INVPATH + sec + bne .9 + +.1 ldx #S.FIEX.BLKPTR+2-1 + ldy #S.FIEX.BLKPTR+2-1+3 + +.2 lda d_stor,x + sta (A3L),y + dey + dex + bpl .2 + + ldx #7 + ldy #S.FIEX.ACL+7+3 + +.3 lda h_acl,x + sta (A3L),y + dey + dex + bpl .3 + + clc +.9 rts +*-------------------------------------- +XDOS.SetACL jsr findfile + bcs .9 + + lda d_stor + and #$F0 + cmp #$D0 + bne .99 + + jsr XDOS.ReadGBuf_d_frst + bcs .9 + + ldx #7 + ldy #S.FIEX.ACL+7+3 + +.3 lda (A3L),y + sta gbuf+$14,x + dey + dex + bpl .3 + + jmp XDOS.WriteGBuf + +.99 lda MLI.E.UNSUPST + sec +.9 rts +*-------------------------------------- +XDOS.GetACL clc + rts +*-------------------------------------- XDOS.Rename jsr lookfile look for source (original) file. bcc XDOS.RenameFileDir if found. diff --git a/ProDOS.FX/ProDOS.S.XDOS.F.txt b/ProDOS.FX/ProDOS.S.XDOS.F.txt index b18a7365..6f34358e 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.F.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.F.txt @@ -816,7 +816,7 @@ XDOS.CmdNums .HS D3D4D5D6 table of valid mli command numbers. .HS 808182 .HS 65 .HS C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF - .HS 00 + .HS D7 .HS D0D1D2 XDOS.ParamCnt .HS 02020202 parameter counts for the calls @@ -824,7 +824,7 @@ XDOS.ParamCnt .HS 02020202 parameter counts for the calls .HS 030300 .HS 04 .HS 070102070A0201010303040401010202 - .HS FF + .HS 02 .HS 020202 XDOS.CmdFlags .HS A0A1A2 @@ -834,7 +834,7 @@ XDOS.CmdFlags .HS A0A1A2 .HS 2C2D .HS 4E4F .HS 50515253 - .HS 949596 + .HS 94959697 cmdtable .DA XDOS.Create .DA XDOS.Destroy @@ -864,6 +864,7 @@ cmdtable .DA XDOS.Create .DA XDOS.SetFileInfoEx .DA XDOS.GetFileInfoEx .DA XDOS.SetACL + .DA XDOS.GetACL dinctbl .HS 0100000200 table to increment directory usage/eof counts .DO LOWERCASE=1 diff --git a/ProDOS.FX/ProDOS.S.txt b/ProDOS.FX/ProDOS.S.txt index ed61a89e..7f332563 100644 --- a/ProDOS.FX/ProDOS.S.txt +++ b/ProDOS.FX/ProDOS.S.txt @@ -150,6 +150,7 @@ FCB.IBLK .EQ 14 FCB.EOF .EQ 21 3 bytes FCB.FLEVEL .EQ 27 FCB.NLMASK .EQ 31 +* FCB .EQ 32 *-------------------------------------- VCBs .EQ $D900 @@ -158,10 +159,10 @@ VCB.OFCNT .EQ 17 VCB.BMAP .EQ 18 VCB.TBLK .EQ 20 VCB.FBLK .EQ 22 -VCB.ROOT .EQ 24 -VCB.BMAPIDX .EQ 26 +*VCB.ROOT .EQ 24 +VCB.BMAPIDX .EQ 24 * -VCB .EQ 27 +VCB .EQ 32 *-------------------------------------- bmbuf .EQ $DA00 512 byte bitmap buffer gbuf .EQ $DC00 general purpose 512 byte block buffer