From cf0515bba2bc8a58989dc12c7e9b422be672a12d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sun, 30 Oct 2016 19:17:43 +0100 Subject: [PATCH] Kernel version 0.8 : Fixed a bug in KERNEL.S.DIR.txt not counting properly files in directories --- SYS/KERNEL.S.DIR.txt | 105 ++++++++++++++++++++++++------------------- 1 file changed, 59 insertions(+), 46 deletions(-) diff --git a/SYS/KERNEL.S.DIR.txt b/SYS/KERNEL.S.DIR.txt index 154a0413..55e1dabb 100644 --- a/SYS/KERNEL.S.DIR.txt +++ b/SYS/KERNEL.S.DIR.txt @@ -283,17 +283,22 @@ K.ReadDirA.DIR sta MLICALL.PARAMS+1 A=#S.DIR.PRODOS.REF dex bpl .3 -.4 ldx K.ReadDirA.EC - cpx K.ReadDirA.EPB +.4 lda K.ReadDirA.EC + eor #$ff + tax lda K.ReadDirA.EC+1 - sbc #0 - bcc .5 We have less than EPB to read - ldx K.ReadDirA.EPB - -.5 stx K.ReadDirA.ECIB + eor #$ff + tay + inx Any entry remaining ? + bne .5 + iny + beq .98 no...exit + * pass #1 compute BufSize... +.5 lda K.ReadDirA.EPB + sta K.ReadDirA.ECIB lda #1 For Ending 0 sta K.ReadDirA.BufSize @@ -302,8 +307,6 @@ K.ReadDirA.DIR sta MLICALL.PARAMS+1 A=#S.DIR.PRODOS.REF K.ReadDirA.DIR1 lda (ZPQuickPtr2) X = EntryCount In This Block beq .7 Free slot....goto next - tay save LEN - and #$F0 get storage_type cmp #$F0 Volume header ? beq .1 @@ -311,7 +314,7 @@ K.ReadDirA.DIR1 lda (ZPQuickPtr2) X = EntryCount In This Block cmp #$E0 directory header ? beq .2 - tya regular DIR or File, get back LEN + lda (ZPQuickPtr2) regular DIR or File, get LEN and #$F compute filename len sec add "#" + S.STAT @@ -327,9 +330,14 @@ K.ReadDirA.DIR1 lda (ZPQuickPtr2) X = EntryCount In This Block clc adc K.ReadDirA.BufSize sta K.ReadDirA.BufSize - bcc .7 + bcc .3 inc K.ReadDirA.BufSize+1 +.3 inx + bne .7 + iny + bra K.ReadDirA.DIR2 we reached last entry in whole DIR + .7 lda ZPQuickPtr2 clc adc K.ReadDirA.EL @@ -337,61 +345,70 @@ K.ReadDirA.DIR1 lda (ZPQuickPtr2) X = EntryCount In This Block bcc .8 inc ZPQuickPtr2+1 -.8 dex +.8 dec K.ReadDirA.ECIB bne K.ReadDirA.DIR1 * pass #2 Fill Buffer...(ZPQuickPtr1 & Ptr2 can now be trashed) K.ReadDirA.DIR2 jsr K.ReadDirA.GetBuf - bcs .98 + bcs .9 -.71 lda (ZPQuickPtr3) - beq .78 Empty slot, skip + lda K.ReadDirA.EPB + sta K.ReadDirA.ECIB + +.1 lda (ZPQuickPtr3) + beq .7 Empty slot, skip and #$F0 cmp #$F0 Vol Header ? - bne .72 + bne .2 jsr K.ReadDirA.ADD. - bra .78 + bra .6 -.72 cmp #$E0 Dir Header ? - bne .73 +.2 cmp #$E0 Dir Header ? + bne .3 jsr K.ReadDirA.ADD. jsr K.ReadDirA.ADD.. - bra .78 + bra .6 -.73 lda K.ReadDirA.EC Regular FILE/DIR +.3 jsr K.ReadDirA.AddFNToBuf + jsr K.ReadDirA.ClrStat + + lda (ZPQuickPtr3) + and #$F0 + cmp #$D0 Directory ? + bne .5 + jsr K.ReadDirA.ADDD + bra .6 + +.5 jsr K.ReadDirA.ADDF + +.6 lda K.ReadDirA.EC decrease global counter... sec sbc #1 sta K.ReadDirA.EC lda K.ReadDirA.EC+1 sbc #0 - sta K.ReadDirA.EC+1 CC, we reached $ffff - bcc .80 no more file to list... + sta K.ReadDirA.EC+1 + ora K.ReadDirA.EC + beq .8 0! no more files in DIR - jsr K.ReadDirA.AddFNToBuf - jsr K.ReadDirA.ClrStat +.7 dec K.ReadDirA.ECIB 0! no more file in block + beq .8 - lda (ZPQuickPtr3) - and #$F0 - cmp #$D0 Directory ? - bne .75 - jsr K.ReadDirA.ADDD - bra .78 - -.75 jsr K.ReadDirA.ADDF - -.78 lda ZPQuickPtr3 + lda ZPQuickPtr3 clc adc K.ReadDirA.EL sta ZPQuickPtr3 - bcc .79 + bcc .1 inc ZPQuickPtr3+1 - -.79 dec K.ReadDirA.ECIB - bne .71 + bra .1 -.80 +.9 jsr K.ReadDirA.CLN + sec + rts + +.8 * lda #0 S.MEM.F.INIT0 already did this * sta (ZPQuickPtr4) Ending 0 @@ -402,21 +419,17 @@ K.ReadDirA.DIR2 jsr K.ReadDirA.GetBuf ldx #3 ldy #S.DIR.PRODOS.EL+3 -.8 lda K.ReadDirA.EL,x Store back this session prameters to S.DIR +.81 lda K.ReadDirA.EL,x Store back this session prameters to S.DIR sta (ZPQuickPtr1),y dey dex - bpl .8 + bpl .81 jsr K.ReadDirA.CLN Discard READBUFFER lda K.ReadDirA.hDIRENT tax jmp K.GetMemPtrA - -.98 jsr K.ReadDirA.CLN - sec - rts *-------------------------------------- K.ReadDirA.CLN pha lda K.ReadDirA.hMem