mirror of
https://github.com/A2osX/A2osX.git
synced 2024-09-10 07:54:37 +00:00
Kernel version 0.8 : More API cleanup/reorg, fixed bug in READDIRYA crashing reading /
This commit is contained in:
parent
851883547f
commit
d4868fe152
BIN
A2OSX.BOOT.po
BIN
A2OSX.BOOT.po
Binary file not shown.
BIN
A2OSX.SRC.po
BIN
A2OSX.SRC.po
Binary file not shown.
27
BIN/LS.S.txt
27
BIN/LS.S.txt
@ -14,7 +14,6 @@ AUTO 6
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPPtr1 .EQ ZPBIN
|
ZPPtr1 .EQ ZPBIN
|
||||||
ZPPtr2 .EQ ZPBIN+2
|
ZPPtr2 .EQ ZPBIN+2
|
||||||
ZPPtr3 .EQ ZPBIN+4
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* File Header (16 Bytes)
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -35,13 +34,9 @@ CS.START cld
|
|||||||
.DA CS.DOEVENT
|
.DA CS.DOEVENT
|
||||||
.DA CS.QUIT
|
.DA CS.QUIT
|
||||||
L.LIBSTR .DA LIBSTR
|
L.LIBSTR .DA LIBSTR
|
||||||
L.MSG.VOL.HEADER .DA MSG.VOL.HEADER
|
|
||||||
L.MSG.DIR.HEADER .DA MSG.DIR.HEADER
|
|
||||||
L.MSG.VOL .DA MSG.VOL
|
L.MSG.VOL .DA MSG.VOL
|
||||||
L.MSG.DIR .DA MSG.DIR
|
L.MSG.DIR .DA MSG.DIR
|
||||||
L.MSG.FILE .DA MSG.FILE
|
L.MSG.FILE .DA MSG.FILE
|
||||||
L.MSG.VOL.END .DA MSG.VOL.END
|
|
||||||
L.MSG.DIR.END .DA MSG.DIR.END
|
|
||||||
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT
|
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -111,7 +106,23 @@ CS.RUN ldy #bCANCEL
|
|||||||
|
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
>LDYA ZPPtr1
|
lda ZPPtr1
|
||||||
|
sec
|
||||||
|
adc (ZPPtr1)
|
||||||
|
sta ZPPtr2
|
||||||
|
lda ZPPtr1+1
|
||||||
|
adc #0
|
||||||
|
sta ZPPtr2+1
|
||||||
|
|
||||||
|
ldy #S.STAT.TYPE
|
||||||
|
lda (ZPPtr2),y
|
||||||
|
cmp #$0F Directory ?
|
||||||
|
bne .31
|
||||||
|
|
||||||
|
lda #'/'
|
||||||
|
>SYSCALL SYS.COutA
|
||||||
|
|
||||||
|
.31 >LDYA ZPPtr1
|
||||||
>SYSCALL SYS.PStrOutYA
|
>SYSCALL SYS.PStrOutYA
|
||||||
|
|
||||||
lda ZPPtr1
|
lda ZPPtr1
|
||||||
@ -193,13 +204,9 @@ CS.QUIT ldy #hDIR
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
LIBSTR >PSTRING "libstr.o"
|
LIBSTR >PSTRING "libstr.o"
|
||||||
MSG.VOL.HEADER >CSTRING "Volume Listing Of %S\n"
|
|
||||||
MSG.DIR.HEADER >CSTRING "Directory Listing Of %S\n"
|
|
||||||
MSG.VOL >CSTRING "/%S\n"
|
MSG.VOL >CSTRING "/%S\n"
|
||||||
MSG.DIR >CSTRING "/%15S <dir> %a %T %t %T %t\n"
|
MSG.DIR >CSTRING "/%15S <dir> %a %T %t %T %t\n"
|
||||||
MSG.FILE >CSTRING "%15S %S $%H %a %8L %T %t %T %t\n"
|
MSG.FILE >CSTRING "%15S %S $%H %a %8L %T %t %T %t\n"
|
||||||
MSG.VOL.END >CSTRING "%D Files In Volume.\n"
|
|
||||||
MSG.DIR.END >CSTRING "%D Files In Directory.\n"
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PRODOS.FT.COUNT .HS 07
|
PRODOS.FT.COUNT .HS 07
|
||||||
PRODOS.FT.ID .HS 0406FAFCFDE2FF
|
PRODOS.FT.ID .HS 0406FAFCFDE2FF
|
||||||
|
@ -22,7 +22,7 @@ K.OPENDIRYA jsr K.PFTCheckPathYA
|
|||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
>STYA ZPQuickPtr1
|
>STYA ZPQuickPtr1
|
||||||
stx hDIR
|
stx K.OPENDIRYA.hDIR
|
||||||
|
|
||||||
lda (ZPQuickPtr2)
|
lda (ZPQuickPtr2)
|
||||||
cmp #1 One char ?
|
cmp #1 One char ?
|
||||||
@ -53,7 +53,7 @@ K.OPENDIRYA jsr K.PFTCheckPathYA
|
|||||||
ldy #S.DIR.PRODOS.REF
|
ldy #S.DIR.PRODOS.REF
|
||||||
sta (ZPQuickPtr1),y
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
.8 lda hDIR
|
.8 lda K.OPENDIRYA.hDIR
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ K.OPENDIRYA jsr K.PFTCheckPathYA
|
|||||||
sec
|
sec
|
||||||
.99 rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
hDIR .BS 1
|
K.OPENDIRYA.hDIR .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* In :
|
* In :
|
||||||
* A = hDIR
|
* A = hDIR
|
||||||
@ -71,6 +71,15 @@ hDIR .BS 1
|
|||||||
* CC : X = hDIREND, Y,A = PTR to S.DIRENT
|
* CC : X = hDIREND, Y,A = PTR to S.DIRENT
|
||||||
* CS : A = EC, A = 0 : no more entry
|
* CS : A = EC, A = 0 : no more entry
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
K.READDIRA.hMem .BS 1
|
||||||
|
K.READDIRA.hDIRENT .BS 1
|
||||||
|
K.READDIRA.BufSize .BS 2
|
||||||
|
K.READDIRA.EL .BS 1
|
||||||
|
K.READDIRA.EBP .BS 1
|
||||||
|
K.READDIRA.EC .BS 2
|
||||||
|
K.READDIRA.ECIB .BS 1
|
||||||
|
K.READDIRA.EC2Return .BS 1
|
||||||
|
*--------------------------------------
|
||||||
K.READDIRA jsr K.PFTCheckDirA
|
K.READDIRA jsr K.PFTCheckDirA
|
||||||
jsr K.GetMemPtrA
|
jsr K.GetMemPtrA
|
||||||
>STYA ZPQuickPtr1
|
>STYA ZPQuickPtr1
|
||||||
@ -87,38 +96,45 @@ K.READDIRA jsr K.PFTCheckDirA
|
|||||||
|
|
||||||
.9 lda #0
|
.9 lda #0
|
||||||
sec CS,A=0 no more entry
|
sec CS,A=0 no more entry
|
||||||
K.READDIRA.RTS rts
|
rts
|
||||||
|
*--------------------------------------
|
||||||
K.READDIRA.ROOT stz MLICALL.PARAMS+1 All Volumes
|
K.READDIRA.ROOT stz MLICALL.PARAMS+1 All Volumes
|
||||||
>LDYAI KrnBuffer256
|
|
||||||
>STYA MLICALL.PARAMS+2
|
|
||||||
>STYA ZPQuickPtr2 For PASS #2
|
|
||||||
>MLICALL MLIONLINE
|
|
||||||
bcs K.READDIRA.RTS
|
|
||||||
|
|
||||||
lda #1 +1 for Ending 0
|
>PUSHWI 256 Get a 256 bytes buffer for ONLINE call...
|
||||||
sta BufSize
|
>PUSHBI 0
|
||||||
stz BufSize+1
|
jsr K.GetMem
|
||||||
|
bcs .99
|
||||||
|
stx K.READDIRA.hMem
|
||||||
|
|
||||||
|
>STYA MLICALL.PARAMS+2
|
||||||
|
>STYA ZPQuickPtr2 For PASS #1 & #2
|
||||||
|
>MLICALL MLIONLINE
|
||||||
|
bcc .10
|
||||||
|
|
||||||
|
.98 jsr K.READDIRA.CLN
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
|
* pass #1 compute BufSize.....
|
||||||
|
.10 lda #1 +1 for Ending 0
|
||||||
|
sta K.READDIRA.BufSize
|
||||||
|
stz K.READDIRA.BufSize+1
|
||||||
|
|
||||||
|
stz K.READDIRA.EC
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
|
|
||||||
.1 lda KrnBuffer256,y
|
.1 lda (ZPQuickPtr2),y
|
||||||
and #$0F
|
and #$0F
|
||||||
beq .2
|
beq .2
|
||||||
|
|
||||||
|
inc K.READDIRA.EC increase entry count
|
||||||
|
|
||||||
sec Add Filelen +1
|
sec Add Filelen +1
|
||||||
adc BufSize
|
adc #S.STAT will ends with CC
|
||||||
sta BufSize
|
adc K.READDIRA.BufSize
|
||||||
bcc .11
|
sta K.READDIRA.BufSize
|
||||||
inc BufSize+1
|
bcc .2
|
||||||
|
inc K.READDIRA.BufSize+1
|
||||||
.11 lda #S.STAT
|
|
||||||
adc BufSize
|
|
||||||
sta BufSize
|
|
||||||
bcc .12
|
|
||||||
inc BufSize+1
|
|
||||||
|
|
||||||
.12 inx
|
|
||||||
|
|
||||||
.2 tya
|
.2 tya
|
||||||
clc
|
clc
|
||||||
@ -126,78 +142,39 @@ K.READDIRA.ROOT stz MLICALL.PARAMS+1 All Volumes
|
|||||||
tay
|
tay
|
||||||
bcc .1 loop until 256 bytes scanned
|
bcc .1 loop until 256 bytes scanned
|
||||||
|
|
||||||
txa
|
* pass #2 Fill Buffer...
|
||||||
beq K.READDIRA.RTS A=0, CS no more DIRENT
|
jsr K.READDIRA.GetBuf
|
||||||
|
bcs .98
|
||||||
sta EntryCount
|
|
||||||
|
|
||||||
>PUSHW BufSize
|
|
||||||
>PUSHBI S.MEM.F.INIT0
|
|
||||||
jsr K.GetMem
|
|
||||||
bcs K.READDIRA.RTS
|
|
||||||
stx hDIRENT
|
|
||||||
>STYA ZPQuickPtr3
|
|
||||||
>STYA ZPQuickPtr4
|
|
||||||
|
|
||||||
.3 lda (ZPQuickPtr2)
|
.3 lda (ZPQuickPtr2)
|
||||||
and #$0F
|
and #$0F
|
||||||
beq .88
|
beq .88
|
||||||
tay
|
|
||||||
tax
|
|
||||||
sta (ZPQuickPtr3)
|
|
||||||
inc
|
|
||||||
sta VolName Build a string with leading / for GetFileInfo
|
|
||||||
|
|
||||||
.4 lda (ZPQuickPtr2),y
|
tax
|
||||||
sta (ZPQuickPtr3),y
|
|
||||||
sta VolName+1,y
|
>LDYAI ZPQuickPtr4 Store actual PTR for MLIGETFILEINFO
|
||||||
dey
|
>STYA MLICALL.PARAMS+1
|
||||||
bne .4
|
|
||||||
lda #'/'
|
|
||||||
sta VolName+1
|
|
||||||
|
|
||||||
txa
|
txa
|
||||||
sec
|
inc
|
||||||
adc ZPQuickPtr3
|
jsr K.READDIRA.AddToBuf
|
||||||
sta ZPQuickPtr3
|
lda #'/'
|
||||||
bcc .41
|
jsr K.READDIRA.AddToBuf
|
||||||
inc ZPQuickPtr3+1
|
|
||||||
|
ldy #1
|
||||||
|
|
||||||
|
.4 lda (ZPQuickPtr2),y
|
||||||
|
jsr K.READDIRA.AddToBuf
|
||||||
|
iny
|
||||||
|
dex
|
||||||
|
bne .4
|
||||||
|
|
||||||
.41 >LDYAI VolName
|
|
||||||
>STYA MLICALL.PARAMS+1
|
|
||||||
>MLICALL MLIGETFILEINFO
|
>MLICALL MLIGETFILEINFO
|
||||||
bcs .80
|
bcs .80
|
||||||
|
|
||||||
lda MLICALL.PARAMS+S.FILEINFO.ACCESS
|
|
||||||
cmp #S.FILEINFO.ACCESS.FULL
|
|
||||||
bne .5
|
|
||||||
|
|
||||||
lda #S.STAT.MODE.XO+S.STAT.MODE.WO+S.STAT.MODE.RO
|
|
||||||
bra .6
|
|
||||||
|
|
||||||
.5 and #S.FILEINFO.ACCESS.R
|
.80 jsr K.READDIRA.ADDSTAT
|
||||||
beq .6
|
|
||||||
lda #S.STAT.MODE.XO+S.STAT.MODE.RO
|
|
||||||
|
|
||||||
.6 ldy #S.STAT.MODE
|
|
||||||
sta (ZPQuickPtr3),y
|
|
||||||
|
|
||||||
ldy #S.STAT.BLOCKS
|
|
||||||
lda MLICALL.PARAMS+S.FILEINFO.AUXTYPE
|
|
||||||
sta (ZPQuickPtr3),y
|
|
||||||
iny
|
|
||||||
lda MLICALL.PARAMS+S.FILEINFO.AUXTYPE
|
|
||||||
sta (ZPQuickPtr3),y
|
|
||||||
ldy #S.STAT.BLKSIZE+1
|
|
||||||
lda #2 Block size is $200 for ProDOS
|
|
||||||
sta (ZPQuickPtr3),y
|
|
||||||
|
|
||||||
.80 lda ZPQuickPtr3
|
|
||||||
clc
|
|
||||||
adc #S.STAT
|
|
||||||
sta ZPQuickPtr3
|
|
||||||
bcc .88
|
|
||||||
inc ZPQuickPtr3+1
|
|
||||||
|
|
||||||
.88 lda ZPQuickPtr2
|
.88 lda ZPQuickPtr2
|
||||||
clc
|
clc
|
||||||
@ -205,20 +182,21 @@ K.READDIRA.ROOT stz MLICALL.PARAMS+1 All Volumes
|
|||||||
sta ZPQuickPtr2
|
sta ZPQuickPtr2
|
||||||
bcc .89
|
bcc .89
|
||||||
inc ZPQuickPtr2+1
|
inc ZPQuickPtr2+1
|
||||||
.89 dec EntryCount
|
.89 dec K.READDIRA.EC
|
||||||
bne .3
|
bne .3
|
||||||
|
|
||||||
lda #0
|
* lda #0 done by S.MEM.F.INIT0
|
||||||
sta (ZPQuickPtr3) Ending 0
|
* sta (ZPQuickPtr4) Ending 0
|
||||||
|
|
||||||
ldy #S.DIR.F
|
ldy #S.DIR.F
|
||||||
lda #S.DIR.F.NOMORE
|
lda #S.DIR.F.NOMORE
|
||||||
sta (ZPQuickPtr1),y
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
ldx hDIRENT
|
jsr K.READDIRA.CLN Discard ONLINE BUFFER
|
||||||
>LDYA ZPQuickPtr4
|
|
||||||
clc
|
lda K.READDIRA.hDIRENT
|
||||||
rts
|
tax
|
||||||
|
jmp K.GetMemPtrA
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.READDIRA.DIR ldy #S.DIR.PRODOS.REF
|
K.READDIRA.DIR ldy #S.DIR.PRODOS.REF
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
@ -236,12 +214,13 @@ K.READDIRA.DIR ldy #S.DIR.PRODOS.REF
|
|||||||
tya
|
tya
|
||||||
* clc CC from K.GetMem
|
* clc CC from K.GetMem
|
||||||
adc #4 Skip 4 bytes linked list
|
adc #4 Skip 4 bytes linked list
|
||||||
tay
|
sta ZPQuickPtr2 PTR to Buffer for PASS #1
|
||||||
|
sta ZPQuickPtr3 PTR to Buffer for PASS #2
|
||||||
|
|
||||||
pla
|
pla
|
||||||
adc #0
|
adc #0
|
||||||
|
sta ZPQuickPtr2+1 PTR to Buffer for PASS #1
|
||||||
>STYA ZPQuickPtr2 PTR to Buffer for PASS #1
|
sta ZPQuickPtr3+1 PTR to Buffer for PASS #2
|
||||||
>STYA ZPQuickPtr3 PTR to Buffer for PASS #2
|
|
||||||
|
|
||||||
>LDYAI 512
|
>LDYAI 512
|
||||||
>STYA MLICALL.PARAMS+4
|
>STYA MLICALL.PARAMS+4
|
||||||
@ -255,17 +234,14 @@ K.READDIRA.DIR ldy #S.DIR.PRODOS.REF
|
|||||||
ldy #$1f+3
|
ldy #$1f+3
|
||||||
ldx #3
|
ldx #3
|
||||||
|
|
||||||
.1 lda (ZPQuickPtr2),y Get EntryLength.... From Block
|
.1 lda (ZPQuickPtr2),y Get K.READDIRA.EL.... From Block
|
||||||
sta EntryLength,x
|
sta K.READDIRA.EL,x
|
||||||
dey
|
dey
|
||||||
dex
|
dex
|
||||||
bpl .1
|
bpl .1
|
||||||
bra .4
|
bra .4
|
||||||
|
|
||||||
.98 pha
|
.98 jsr K.READDIRA.CLN
|
||||||
lda K.READDIRA.hMem
|
|
||||||
jsr K.FreeMemA
|
|
||||||
pla
|
|
||||||
sec
|
sec
|
||||||
.99 rts
|
.99 rts
|
||||||
|
|
||||||
@ -273,67 +249,120 @@ K.READDIRA.DIR ldy #S.DIR.PRODOS.REF
|
|||||||
ldx #3
|
ldx #3
|
||||||
|
|
||||||
.3 lda (ZPQuickPtr1),y get this session parameters from S.DIR
|
.3 lda (ZPQuickPtr1),y get this session parameters from S.DIR
|
||||||
sta EntryLength,x
|
sta K.READDIRA.EL,x
|
||||||
dey
|
dey
|
||||||
dex
|
dex
|
||||||
bpl .3
|
bpl .3
|
||||||
|
|
||||||
.4 ldx EntryCount
|
.4 ldx K.READDIRA.EC
|
||||||
cpx EntryPerBlock
|
cpx K.READDIRA.EBP
|
||||||
|
|
||||||
lda EntryCount+1
|
lda K.READDIRA.EC+1
|
||||||
sbc #0
|
sbc #0
|
||||||
bcc .5 We have less than EPB to read
|
bcc .5 We have less than EPB to read
|
||||||
ldx EntryPerBlock
|
ldx K.READDIRA.EBP
|
||||||
|
|
||||||
.5 stx EntryCountIB
|
.5 stx K.READDIRA.ECIB
|
||||||
stz EntryCount2Return
|
stz K.READDIRA.EC2Return
|
||||||
|
|
||||||
lda #1 For Ending 0
|
lda #1 For Ending 0
|
||||||
sta BufSize
|
sta K.READDIRA.BufSize
|
||||||
stz BufSize+1
|
stz K.READDIRA.BufSize+1
|
||||||
|
|
||||||
* pass #1 compute BufSize.....
|
* pass #1 compute BufSize.....
|
||||||
|
K.READDIRA.DIR1 lda (ZPQuickPtr2) X = EntryCount In This Block
|
||||||
.51 lda (ZPQuickPtr2) X = EntryCount In This Block
|
|
||||||
beq .7 Free slot....goto next
|
beq .7 Free slot....goto next
|
||||||
|
|
||||||
jsr S.READDIR.CHK
|
tay save LEN
|
||||||
|
|
||||||
|
and #$F0 get storage_type
|
||||||
|
cmp #$F0 Volume header ?
|
||||||
|
beq .1
|
||||||
|
|
||||||
|
cmp #$E0 directory header ?
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
inc K.READDIRA.EC2Return regular DIR or File....
|
||||||
|
|
||||||
|
tya
|
||||||
|
and #$F get filename len
|
||||||
|
sec add "#<filename>" + S.STAT
|
||||||
|
|
||||||
|
adc #S.STAT
|
||||||
|
.HS 2C bit abs
|
||||||
|
|
||||||
|
.1 lda #2+S.STAT add "1." string + S.STAT
|
||||||
|
.HS 2C bit abs
|
||||||
|
|
||||||
|
.2 lda #2+S.STAT+3+S.STAT add "1." + S.STAT + "2.." + S.STAT...
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc K.READDIRA.BufSize
|
||||||
|
sta K.READDIRA.BufSize
|
||||||
|
bcc .7
|
||||||
|
inc K.READDIRA.BufSize+1
|
||||||
|
|
||||||
.7 lda ZPQuickPtr2
|
.7 lda ZPQuickPtr2
|
||||||
clc
|
clc
|
||||||
adc EntryLength
|
adc K.READDIRA.EL
|
||||||
sta ZPQuickPtr2
|
sta ZPQuickPtr2
|
||||||
bcc .71
|
bcc .8
|
||||||
inc ZPQuickPtr2+1
|
inc ZPQuickPtr2+1
|
||||||
|
|
||||||
.71 dex
|
.8 dex
|
||||||
bne .51
|
bne K.READDIRA.DIR1
|
||||||
|
|
||||||
* pass #2 Fill Buffer...
|
* pass #2 Fill Buffer...
|
||||||
>PUSHW BufSize Get a BufSize bytes buffer for storing results
|
K.READDIRA.DIR2 jsr K.READDIRA.GetBuf
|
||||||
>PUSHBI S.MEM.F.INIT0 make sure 0 fiiled
|
|
||||||
jsr K.GetMem
|
|
||||||
bcs .98
|
bcs .98
|
||||||
stx K.READDIRA.hDIR
|
|
||||||
>STYA ZPQuickPtr4
|
|
||||||
|
|
||||||
.72 jsr DecEntryCount
|
ldy #S.DIR.PRODOS.EL Check if first run....
|
||||||
bcc .80 no more file to list...
|
lda (ZPQuickPtr1),y
|
||||||
|
bne .73
|
||||||
|
|
||||||
lda (ZPQuickPtr3)
|
lda (ZPQuickPtr3)
|
||||||
|
and #$F0
|
||||||
|
cmp #$F0 Vol Header ?
|
||||||
|
bne .72
|
||||||
|
jsr K.READDIRA.ADD.
|
||||||
|
bra .78
|
||||||
|
|
||||||
|
.72 cmp #$E0 Dir Header ?
|
||||||
|
bne .73
|
||||||
|
jsr K.READDIRA.ADD.
|
||||||
|
jsr K.READDIRA.ADD..
|
||||||
|
bra .78
|
||||||
|
|
||||||
|
.73 lda K.READDIRA.EC
|
||||||
|
sec
|
||||||
|
sbc #1
|
||||||
|
sta K.READDIRA.EC
|
||||||
|
bcs .74
|
||||||
|
|
||||||
|
lda K.READDIRA.EC+1
|
||||||
|
sbc #0
|
||||||
|
sta K.READDIRA.EC+1 CC, we reached $ffff
|
||||||
|
bcc .80 no more file to list...
|
||||||
|
|
||||||
|
.74 lda (ZPQuickPtr3)
|
||||||
beq .78
|
beq .78
|
||||||
|
|
||||||
jsr K.READDIRA.ADD
|
and #$F0
|
||||||
|
cmp #$D0 Directory ?
|
||||||
|
bne .75
|
||||||
|
jsr K.READDIRA.ADDD
|
||||||
|
bra .78
|
||||||
|
|
||||||
|
.75 jsr K.READDIRA.ADDF
|
||||||
|
|
||||||
.78 lda ZPQuickPtr3
|
.78 lda ZPQuickPtr3
|
||||||
clc
|
clc
|
||||||
adc EntryLength
|
adc K.READDIRA.EL
|
||||||
sta ZPQuickPtr3
|
sta ZPQuickPtr3
|
||||||
bcc .79
|
bcc .79
|
||||||
inc ZPQuickPtr3+1
|
inc ZPQuickPtr3+1
|
||||||
|
|
||||||
.79 dec EntryCountIB
|
.79 dec K.READDIRA.ECIB
|
||||||
bne .72
|
bne .72
|
||||||
|
|
||||||
.80
|
.80
|
||||||
@ -343,91 +372,95 @@ K.READDIRA.DIR ldy #S.DIR.PRODOS.REF
|
|||||||
ldx #3
|
ldx #3
|
||||||
ldy #S.DIR.PRODOS.EL+3
|
ldy #S.DIR.PRODOS.EL+3
|
||||||
|
|
||||||
.8 lda EntryLength,x Store back this session prameters to S.DIR
|
.8 lda K.READDIRA.EL,x Store back this session prameters to S.DIR
|
||||||
sta (ZPQuickPtr1),y
|
sta (ZPQuickPtr1),y
|
||||||
dey
|
dey
|
||||||
dex
|
dex
|
||||||
bpl .8
|
bpl .8
|
||||||
|
|
||||||
jsr .98 Discard READBUFFER
|
jsr K.READDIRA.CLN Discard READBUFFER
|
||||||
|
|
||||||
lda K.READDIRA.hDIR
|
lda K.READDIRA.hDIRENT
|
||||||
tax
|
tax
|
||||||
jsr K.GetMemPtrA
|
jmp K.GetMemPtrA
|
||||||
clc
|
|
||||||
|
.98 jsr K.READDIRA.CLN
|
||||||
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.READDIR.CHK tay save LEN
|
K.READDIRA.CLN pha
|
||||||
|
lda K.READDIRA.hMem
|
||||||
and #$F0 get storage_type
|
jsr K.FreeMemA
|
||||||
cmp #$E0 directory header ?
|
pla
|
||||||
bne .1
|
|
||||||
|
|
||||||
inc EntryCount2Return yes, return 2 ".."
|
|
||||||
lda #S.STAT+3 add "#.." string + S.STAT
|
|
||||||
jsr K.READDIRA.AddBufSize
|
|
||||||
bra .2 go add "." Entry
|
|
||||||
|
|
||||||
|
|
||||||
.1 cmp #$F0 Volume header ?
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
.2 lda #S.STAT+2 add "#." string + S.STAT
|
|
||||||
bra .4
|
|
||||||
|
|
||||||
.3 tya
|
|
||||||
and #$F get filename len
|
|
||||||
sec Add 1 for LEN
|
|
||||||
adc #S.STAT
|
|
||||||
|
|
||||||
.4 jsr K.READDIRA.AddBufSize
|
|
||||||
inc EntryCount2Return
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.READDIRA.ADD and #$F0
|
K.READDIRA.GetBuf
|
||||||
cmp #$F0 Volume header ?
|
>PUSHW K.READDIRA.BufSize Get a BufSize bytes buffer for storing results
|
||||||
bne .10
|
>PUSHBI S.MEM.F.INIT0 make sure 0 filled
|
||||||
|
jsr K.GetMem
|
||||||
lda #1
|
bcs .9
|
||||||
|
stx K.READDIRA.hDIRENT
|
||||||
|
>STYA ZPQuickPtr4
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
K.READDIRA.ADD. lda #1
|
||||||
jsr K.READDIRA.AddToBuf
|
jsr K.READDIRA.AddToBuf
|
||||||
lda #'.' filename="1."
|
lda #'.' filename="1."
|
||||||
jsr K.READDIRA.AddToBuf
|
jsr K.READDIRA.AddToBuf
|
||||||
|
|
||||||
|
jsr K.READDIRA.ClrStat
|
||||||
|
|
||||||
ldy #$25 total_blocks
|
ldy #$25 total_blocks
|
||||||
lda (ZPQuickPtr3),y
|
lda (ZPQuickPtr3),y
|
||||||
tax
|
sta KrnBuffer256+S.STAT.BLOCKS
|
||||||
iny
|
iny
|
||||||
lda (ZPQuickPtr3),y
|
lda (ZPQuickPtr3),y
|
||||||
|
sta KrnBuffer256+S.STAT.BLOCKS+1
|
||||||
|
|
||||||
ldy #S.STAT.BLOCKS+1
|
bra K.READDIRA.ADDSTAT
|
||||||
sta (ZPQuickPtr4),y
|
*--------------------------------------
|
||||||
dey
|
K.READDIRA.ADD..
|
||||||
txa
|
|
||||||
sta (ZPQuickPtr4),y
|
|
||||||
|
|
||||||
bra .80
|
|
||||||
|
|
||||||
.10 cmp #$E0 directory header ?
|
|
||||||
bne .20
|
|
||||||
|
|
||||||
lda #2
|
lda #2
|
||||||
jsr K.READDIRA.AddToBuf
|
jsr K.READDIRA.AddToBuf
|
||||||
lda #'.' filename="2.."
|
lda #'.' filename="2.."
|
||||||
jsr K.READDIRA.AddToBuf
|
jsr K.READDIRA.AddToBuf
|
||||||
jsr K.READDIRA.AddToBuf
|
jsr K.READDIRA.AddToBuf
|
||||||
|
|
||||||
bra .80
|
jsr K.READDIRA.ClrStat
|
||||||
|
|
||||||
|
bra K.READDIRA.ADDSTAT
|
||||||
|
*--------------------------------------
|
||||||
|
K.READDIRA.ADDD jsr K.READDIRA.AddFNToBuf
|
||||||
|
|
||||||
.20 cmp #$D0 directory ?
|
jsr K.READDIRA.ClrStat
|
||||||
bne .30
|
|
||||||
jsr K.READDIRA.AddFNToBuf
|
|
||||||
|
|
||||||
bra .80
|
bra K.READDIRA.ADDSTAT
|
||||||
|
*--------------------------------------
|
||||||
|
K.READDIRA.ADDF jsr K.READDIRA.AddFNToBuf
|
||||||
|
|
||||||
.30 jsr K.READDIRA.AddFNToBuf
|
jsr K.READDIRA.ClrStat
|
||||||
|
|
||||||
.80 lda ZPQuickPtr4
|
ldy #$10 type
|
||||||
|
lda (ZPQuickPtr3),y
|
||||||
|
sta KrnBuffer256+S.STAT.TYPE
|
||||||
|
|
||||||
|
ldy #$1F auxtype
|
||||||
|
lda (ZPQuickPtr3),y
|
||||||
|
sta KrnBuffer256+S.STAT.AUXTYPE
|
||||||
|
iny
|
||||||
|
lda (ZPQuickPtr3),y
|
||||||
|
sta KrnBuffer256+S.STAT.AUXTYPE+1
|
||||||
|
|
||||||
|
*--------------------------------------
|
||||||
|
K.READDIRA.AddStat
|
||||||
|
ldy #S.STAT-1
|
||||||
|
|
||||||
|
.1 lda KrnBuffer256,y
|
||||||
|
sta (ZPQuickPtr4),y
|
||||||
|
dey
|
||||||
|
bpl .1
|
||||||
|
|
||||||
|
lda ZPQuickPtr4
|
||||||
clc
|
clc
|
||||||
adc #S.STAT
|
adc #S.STAT
|
||||||
sta ZPQuickPtr4
|
sta ZPQuickPtr4
|
||||||
@ -435,13 +468,13 @@ K.READDIRA.ADD and #$F0
|
|||||||
inc ZPQuickPtr4+1
|
inc ZPQuickPtr4+1
|
||||||
.8 rts
|
.8 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.READDIRA.AddBufSize
|
K.READDIRA.ClrStat
|
||||||
clc
|
ldx #S.STAT-1
|
||||||
adc BufSize
|
|
||||||
sta BufSize
|
.1 stz KrnBuffer256,x
|
||||||
bcc .9
|
dey
|
||||||
inc BufSize+1
|
bpl .1
|
||||||
.9 rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.READDIRA.AddFNToBuf
|
K.READDIRA.AddFNToBuf
|
||||||
lda (ZPQuickPtr3)
|
lda (ZPQuickPtr3)
|
||||||
@ -465,18 +498,29 @@ K.READDIRA.AddToBuf
|
|||||||
inc ZPQuickPtr4+1
|
inc ZPQuickPtr4+1
|
||||||
.8 rts
|
.8 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DecEntryCount lda EntryCount
|
lda MLICALL.PARAMS+S.FILEINFO.ACCESS
|
||||||
sec
|
cmp #S.FILEINFO.ACCESS.FULL
|
||||||
sbc #1
|
bne .5
|
||||||
sta EntryCount
|
|
||||||
bcs .9 CS, 0 or more
|
lda #S.STAT.MODE.XO+S.STAT.MODE.WO+S.STAT.MODE.RO
|
||||||
lda EntryCount+1
|
bra .6
|
||||||
sbc #0
|
|
||||||
sta EntryCount+1 CC, we reached $ffff
|
.5 and #S.FILEINFO.ACCESS.R
|
||||||
.9 rts
|
beq .6
|
||||||
*--------------------------------------
|
lda #S.STAT.MODE.XO+S.STAT.MODE.RO
|
||||||
K.READDIRA.hMem .BS 1
|
|
||||||
K.READDIRA.hDIR .BS 1
|
.6 ldy #S.STAT.MODE
|
||||||
|
sta (ZPQuickPtr3),y
|
||||||
|
|
||||||
|
ldy #S.STAT.BLOCKS
|
||||||
|
lda MLICALL.PARAMS+S.FILEINFO.AUXTYPE
|
||||||
|
sta (ZPQuickPtr3),y
|
||||||
|
iny
|
||||||
|
lda MLICALL.PARAMS+S.FILEINFO.AUXTYPE
|
||||||
|
sta (ZPQuickPtr3),y
|
||||||
|
ldy #S.STAT.BLKSIZE+1
|
||||||
|
lda #2 Block size is $200 for ProDOS
|
||||||
|
sta (ZPQuickPtr3),y
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* In :
|
* In :
|
||||||
* A = hDIR
|
* A = hDIR
|
||||||
@ -513,17 +557,6 @@ K.MKDIRYA jsr K.PFTCheckPathYA
|
|||||||
>MLICALL MLICREATE
|
>MLICALL MLICREATE
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
hONLINE .BS 1
|
|
||||||
hDIRENT .BS 1
|
|
||||||
BufSize .BS 2
|
|
||||||
EntryLength .BS 1
|
|
||||||
EntryPerBlock .BS 1
|
|
||||||
EntryCount .BS 2
|
|
||||||
EntryCountIB .BS 1
|
|
||||||
EntryCount2Return .BS 1
|
|
||||||
|
|
||||||
VolName .BS 17
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
MAN
|
||||||
SAVE SYS/KERNEL.S.DIR
|
SAVE SYS/KERNEL.S.DIR
|
||||||
LOAD SYS/KERNEL.S
|
LOAD SYS/KERNEL.S
|
||||||
|
Loading…
Reference in New Issue
Block a user