mirror of
https://github.com/A2osX/A2osX.git
synced 2024-09-09 16:54:41 +00:00
FILE/DIR API (Work In Progress)
This commit is contained in:
parent
ddfad8ff84
commit
fe5b0ac0bf
@ -29,14 +29,14 @@ pDrv .EQ $18
|
|||||||
pPs .EQ $1A
|
pPs .EQ $1A
|
||||||
pDev .EQ $1C
|
pDev .EQ $1C
|
||||||
pEvent .EQ $1E
|
pEvent .EQ $1E
|
||||||
|
*--------------------------------------
|
||||||
|
* $3A-$3F ProDOS Block Device Drivers Main
|
||||||
|
* $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP)
|
||||||
|
*--------------------------------------
|
||||||
ZPDRV .EQ $80
|
ZPDRV .EQ $80
|
||||||
ZPBIN .EQ $90
|
ZPBIN .EQ $90
|
||||||
ZPLIB .EQ $A0 32 bytes for TCPIP
|
ZPLIB .EQ $A0 32 bytes for TCPIP
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* !!!!!!! RESERVED APPLESOFT.I !!!!!!!
|
|
||||||
* $5E -> $C8
|
|
||||||
*--------------------------------------
|
|
||||||
R.VCPU16 .EQ $F0
|
R.VCPU16 .EQ $F0
|
||||||
R.AX .EQ R.VCPU16
|
R.AX .EQ R.VCPU16
|
||||||
R.AL .EQ R.VCPU16
|
R.AL .EQ R.VCPU16
|
||||||
@ -297,51 +297,10 @@ SYS.MKDIRYA .EQ $FA
|
|||||||
SYS.MKNOD .EQ $FC
|
SYS.MKNOD .EQ $FC
|
||||||
SYS.MKFIFO .EQ $FE
|
SYS.MKFIFO .EQ $FE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.FINFO.ACCESS .EQ $00
|
|
||||||
S.FINFO.TYPE .EQ $01
|
|
||||||
S.FINFO.AUXTYPE .EQ $02
|
|
||||||
S.FINFO.STORETYPE .EQ $04
|
|
||||||
S.FINFO.BLOCKSUSED .EQ $05
|
|
||||||
S.FINFO.MODDATE .EQ $07
|
|
||||||
S.FINFO.MODTIME .EQ $09
|
|
||||||
S.FINFO.CREATEDATE .EQ $0B
|
|
||||||
S.FINFO.CREATETIME .EQ $0D
|
|
||||||
S.FINFO .EQ $0F
|
|
||||||
*--------------------------------------
|
|
||||||
* ProDOS ERROR CODES : $00->$5F
|
* ProDOS ERROR CODES : $00->$5F
|
||||||
* Lib ERROR CODES : $80->$BF
|
* Lib ERROR CODES : $80->$BF
|
||||||
* Kernel ERROR CODES : $C0->$FF
|
* Kernel ERROR CODES : $C0->$FF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
*$00 - No Error
|
|
||||||
*$01 - Bad Call Number
|
|
||||||
*$04 - Bad Parameter Count
|
|
||||||
*$25 - Interrupt Table Full
|
|
||||||
*$27 - I/O Error
|
|
||||||
*$28 - No Device Connected
|
|
||||||
*$2B - Write Protected
|
|
||||||
*$2E - Disk Switched
|
|
||||||
*$40 - Invalid Pathname
|
|
||||||
*$42 - Maximum Number of Files Open
|
|
||||||
*$43 - Invalid Reference Number
|
|
||||||
*$44 - Directory Not Found
|
|
||||||
*$45 - Volume Not Found
|
|
||||||
*$46 - File Not Found
|
|
||||||
*$47 - Duplicate File Name
|
|
||||||
*$48 - Volume Full
|
|
||||||
*$49 - Directory Full
|
|
||||||
*$4A - Incompatible File Format
|
|
||||||
*$4B - Unsupported Storage Type
|
|
||||||
*$4C - End of File, No More Data
|
|
||||||
*$4D - Beyond EOF
|
|
||||||
*$4E - File Access Error, File Locked
|
|
||||||
*$50 - File Already Open
|
|
||||||
*$51 - Directory Structure Damaged
|
|
||||||
*$53 - Invalid Parameter
|
|
||||||
*$55 - Too Many Volumes
|
|
||||||
*$56 - Bad Buffer Address
|
|
||||||
*$57 - Duplicate Volume
|
|
||||||
*$5A - File Structure Damaged
|
|
||||||
*--------------------------------------
|
|
||||||
MEMMGR.ERROOM .EQ $FF Out Of Memory Error
|
MEMMGR.ERROOM .EQ $FF Out Of Memory Error
|
||||||
MEMMGR.ERROOH .EQ $FE Out Of Handle Error
|
MEMMGR.ERROOH .EQ $FE Out Of Handle Error
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -549,8 +508,10 @@ S.STAT.MTIME .EQ 26 DWORD
|
|||||||
S.STAT.CTIME .EQ 30 DWORD
|
S.STAT.CTIME .EQ 30 DWORD
|
||||||
S.STAT.BLOCKS .EQ 34 DWORD
|
S.STAT.BLOCKS .EQ 34 DWORD
|
||||||
S.STAT.BLKSIZE .EQ 38 WORD
|
S.STAT.BLKSIZE .EQ 38 WORD
|
||||||
|
S.STAT.TYPE .EQ 40
|
||||||
|
S.STAT.AUXTYPE .EQ 41
|
||||||
*
|
*
|
||||||
S.STAT .EQ 40
|
S.STAT .EQ 43
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.FILE for FOPEN,FREAD......
|
* S.FILE for FOPEN,FREAD......
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -574,7 +535,8 @@ S.FILE.PRODOS .EQ 4
|
|||||||
* S.DIR for OpenDir,ReadDir,CloseDir
|
* S.DIR for OpenDir,ReadDir,CloseDir
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.DIR.HANDLER .EQ 0
|
S.DIR.HANDLER .EQ 0
|
||||||
|
S.DIR.F .EQ 1
|
||||||
|
S.DIR.F.NOMORE .EQ $80
|
||||||
S.DIR.PRODOS.REF .EQ 2
|
S.DIR.PRODOS.REF .EQ 2
|
||||||
S.DIR.PRODOS.IOBUF .EQ 3
|
S.DIR.PRODOS.IOBUF .EQ 3
|
||||||
|
|
||||||
@ -583,10 +545,9 @@ S.DIR.PRODOS .EQ 4
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.DIRENT for ReadDir
|
* S.DIRENT for ReadDir
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.DIRENT.STAT .EQ 0
|
S.DIRENT.NAME .EQ 0
|
||||||
S.DIRENT.NAME .EQ S.STAT
|
* Variable size
|
||||||
*
|
S.DIRENT.STAT .EQ S.STAT
|
||||||
S.DIRENT.PRODOS .EQ S.STAT+16 PSTR (LEN+15 MAX)
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.PFT.PATH .EQ 0
|
S.PFT.PATH .EQ 0
|
||||||
S.PFT.HANDLER .EQ 23
|
S.PFT.HANDLER .EQ 23
|
||||||
|
@ -39,6 +39,55 @@ MLIGETEOF .EQ $D1
|
|||||||
MLISETBUF .EQ $D2
|
MLISETBUF .EQ $D2
|
||||||
MLIGETBUF .EQ $D3
|
MLIGETBUF .EQ $D3
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
S.FILEINFO.ACCESS .EQ $03
|
||||||
|
S.FILEINFO.ACCESS.R .EQ $01
|
||||||
|
S.FILEINFO.ACCESS.W .EQ $02
|
||||||
|
S.FILEINFO.ACCESS.B .EQ $20
|
||||||
|
S.FILEINFO.ACCESS.RN .EQ $40
|
||||||
|
S.FILEINFO.ACCESS.D .EQ $80
|
||||||
|
S.FILEINFO.ACCESS.FULL .EQ $C3
|
||||||
|
S.FILEINFO.TYPE .EQ $04
|
||||||
|
S.FILEINFO.AUXTYPE .EQ $05
|
||||||
|
S.FILEINFO.TOTALBLOCKS .EQ $05
|
||||||
|
S.FILEINFO.STORETYPE .EQ $07
|
||||||
|
S.FILEINFO.BLOCKSUSED .EQ $08
|
||||||
|
S.FILEINFO.MODDATE .EQ $0A
|
||||||
|
S.FILEINFO.MODTIME .EQ $0C
|
||||||
|
S.FILEINFO.CREATEDATE .EQ $0E
|
||||||
|
S.FILEINFO.CREATETIME .EQ $10
|
||||||
|
*
|
||||||
|
S.FILEINFO .EQ $12
|
||||||
|
*--------------------------------------
|
||||||
|
*$00 - No Error
|
||||||
|
*$01 - Bad Call Number
|
||||||
|
*$04 - Bad Parameter Count
|
||||||
|
*$25 - Interrupt Table Full
|
||||||
|
*$27 - I/O Error
|
||||||
|
*$28 - No Device Connected
|
||||||
|
*$2B - Write Protected
|
||||||
|
*$2E - Disk Switched
|
||||||
|
*$40 - Invalid Pathname
|
||||||
|
*$42 - Maximum Number of Files Open
|
||||||
|
*$43 - Invalid Reference Number
|
||||||
|
*$44 - Directory Not Found
|
||||||
|
*$45 - Volume Not Found
|
||||||
|
*$46 - File Not Found
|
||||||
|
*$47 - Duplicate File Name
|
||||||
|
*$48 - Volume Full
|
||||||
|
*$49 - Directory Full
|
||||||
|
*$4A - Incompatible File Format
|
||||||
|
*$4B - Unsupported Storage Type
|
||||||
|
*$4C - End of File, No More Data
|
||||||
|
*$4D - Beyond EOF
|
||||||
|
*$4E - File Access Error, File Locked
|
||||||
|
*$50 - File Already Open
|
||||||
|
*$51 - Directory Structure Damaged
|
||||||
|
*$53 - Invalid Parameter
|
||||||
|
*$55 - Too Many Volumes
|
||||||
|
*$56 - Bad Buffer Address
|
||||||
|
*$57 - Duplicate Volume
|
||||||
|
*$5A - File Structure Damaged
|
||||||
|
*--------------------------------------
|
||||||
MLI.ERR.BADCALL .EQ $01
|
MLI.ERR.BADCALL .EQ $01
|
||||||
MLI.ERR.BADCNT .EQ $04
|
MLI.ERR.BADCNT .EQ $04
|
||||||
MLI.ERR.IRQFULL .EQ $25
|
MLI.ERR.IRQFULL .EQ $25
|
||||||
@ -56,7 +105,6 @@ MLI.ERR.DUPFILE .EQ $47
|
|||||||
MLI.ERR.OVERRUN .EQ $48
|
MLI.ERR.OVERRUN .EQ $48
|
||||||
MLI.ERR.VOLFULL .EQ $49
|
MLI.ERR.VOLFULL .EQ $49
|
||||||
MLI.ERR.EOF .EQ $4C
|
MLI.ERR.EOF .EQ $4C
|
||||||
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MLI .EQ $BF00
|
MLI .EQ $BF00
|
||||||
JSPARE .EQ $BF03
|
JSPARE .EQ $BF03
|
||||||
@ -97,7 +145,6 @@ LEVEL .EQ $BF94
|
|||||||
BUBIT .EQ $BF95
|
BUBIT .EQ $BF95
|
||||||
SPARE1 .EQ $BF96
|
SPARE1 .EQ $BF96
|
||||||
MACHID .EQ $BF98
|
MACHID .EQ $BF98
|
||||||
*--------------------------------------
|
|
||||||
MACHID.TYPE .EQ %11001000
|
MACHID.TYPE .EQ %11001000
|
||||||
MACHID.TYPE.II .EQ %00000000
|
MACHID.TYPE.II .EQ %00000000
|
||||||
MACHID.TYPE.IIp .EQ %01000000
|
MACHID.TYPE.IIp .EQ %01000000
|
||||||
@ -111,7 +158,6 @@ MACHID.RAM.48 .EQ %00010000
|
|||||||
MACHID.SPARE .EQ %00000100
|
MACHID.SPARE .EQ %00000100
|
||||||
MACHID.COL80 .EQ %00000010
|
MACHID.COL80 .EQ %00000010
|
||||||
MACHID.CLK .EQ %00000001
|
MACHID.CLK .EQ %00000001
|
||||||
*--------------------------------------
|
|
||||||
SLTBYT .EQ $BF99
|
SLTBYT .EQ $BF99
|
||||||
PFIXPTR .EQ $BF9A
|
PFIXPTR .EQ $BF9A
|
||||||
MLIACTV .EQ $BF9B
|
MLIACTV .EQ $BF9B
|
||||||
|
@ -74,81 +74,162 @@ hDIR .BS 1
|
|||||||
S.READDIRA jsr S.PFTCHECKDIRA
|
S.READDIRA jsr S.PFTCHECKDIRA
|
||||||
jsr S.GetMemPtrA
|
jsr S.GetMemPtrA
|
||||||
>STYA ZPQuickPtr1
|
>STYA ZPQuickPtr1
|
||||||
|
|
||||||
|
ldy #S.DIR.F
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
and #S.DIR.F.NOMORE
|
||||||
|
bne .9
|
||||||
|
|
||||||
ldy #S.DIR.PRODOS.REF
|
ldy #S.DIR.PRODOS.REF
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
beq S.READDIRA.ROOT
|
beq S.READDIRA.ROOT
|
||||||
jmp S.READDIRA.DIR
|
jmp S.READDIRA.DIR
|
||||||
|
|
||||||
S.READDIRA.ROOT >PUSHWI 256 Get Buffer for ONLINE call
|
.9 lda #0
|
||||||
>PUSHBI 0
|
sec CS,A=0 no more entry
|
||||||
jsr S.GetMem
|
S.READDIRA.RTS rts
|
||||||
bcs .99
|
|
||||||
>STYA ZPQuickPtr2
|
|
||||||
stx hONLINE
|
|
||||||
stz MLICALL.PARAMS+1
|
|
||||||
>STYA MLICALL.PARAMS+2
|
|
||||||
>MLICALL MLIONLINE
|
|
||||||
bcs .98
|
|
||||||
|
|
||||||
lda #1 Ending 0
|
S.READDIRA.ROOT stz MLICALL.PARAMS+1 All Volumes
|
||||||
|
>LDYAI KrnBuffer256
|
||||||
|
>STYA MLICALL.PARAMS+2
|
||||||
|
>STYA ZPQuickPtr2 For PASS #2
|
||||||
|
>MLICALL MLIONLINE
|
||||||
|
bcs S.READDIRA.RTS
|
||||||
|
|
||||||
|
lda #1 +1 for Ending 0
|
||||||
sta BufSize
|
sta BufSize
|
||||||
stz BufSize+1
|
stz BufSize+1
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
|
|
||||||
.1 lda (ZPQuickPtr2),y
|
.1 lda KrnBuffer256,y
|
||||||
and #$0F
|
and #$0F
|
||||||
beq .2
|
beq .2
|
||||||
|
|
||||||
sec Add Filelen +1
|
sec Add Filelen +1
|
||||||
adc BufSize
|
adc BufSize
|
||||||
sta BufSize
|
sta BufSize
|
||||||
lda #0
|
bcc .11
|
||||||
|
inc BufSize+1
|
||||||
|
|
||||||
|
.11 lda #S.STAT
|
||||||
adc BufSize
|
adc BufSize
|
||||||
sta BufSize
|
sta BufSize
|
||||||
|
bcc .12
|
||||||
|
inc BufSize+1
|
||||||
|
|
||||||
lda #S.STAT
|
.12 inx
|
||||||
adc BufSize
|
|
||||||
sta BufSize
|
|
||||||
lda /S.STAT
|
|
||||||
adc BufSize+1
|
|
||||||
sta BufSize+1
|
|
||||||
|
|
||||||
inx
|
|
||||||
|
|
||||||
.2 tya
|
.2 tya
|
||||||
clc
|
clc
|
||||||
adc #16
|
adc #16
|
||||||
tay
|
tay
|
||||||
bcc .1
|
bcc .1 loop until 256 bytes scanned
|
||||||
|
|
||||||
txa
|
txa
|
||||||
beq .99 A=0, CS no more DIRENT
|
beq S.READDIRA.RTS A=0, CS no more DIRENT
|
||||||
|
|
||||||
|
sta EntryCount
|
||||||
|
|
||||||
>PUSHW BufSize
|
>PUSHW BufSize
|
||||||
>PUSHBI 0
|
>PUSHBI S.MEM.F.INIT0
|
||||||
jsr S.GetMem
|
jsr S.GetMem
|
||||||
bcs .98
|
bcs S.READDIRA.RTS
|
||||||
|
stx hDIRENT
|
||||||
>STYA ZPQuickPtr3
|
>STYA ZPQuickPtr3
|
||||||
>STYA ZPQuickPtr4
|
>STYA ZPQuickPtr4
|
||||||
|
|
||||||
ldy #0
|
.3 lda (ZPQuickPtr2)
|
||||||
|
|
||||||
.1 lda (ZPQuickPtr2),y
|
|
||||||
and #$0F
|
and #$0F
|
||||||
beq .2
|
beq .88
|
||||||
|
tay
|
||||||
|
tax
|
||||||
|
sta (ZPQuickPtr3)
|
||||||
|
inc
|
||||||
|
sta VolName Build a string with leading / for GetFileInfo
|
||||||
|
|
||||||
|
.4 lda (ZPQuickPtr2),y
|
||||||
|
sta (ZPQuickPtr3),y
|
||||||
|
sta VolName+1,y
|
||||||
|
dey
|
||||||
|
bne .4
|
||||||
|
lda #'/'
|
||||||
|
sta VolName+1
|
||||||
|
|
||||||
lda #0 A=0, CS no more DIRENT
|
txa
|
||||||
|
|
||||||
.98 pha
|
|
||||||
lda hONLINE
|
|
||||||
jsr S.FreeMemA
|
|
||||||
pla
|
|
||||||
sec
|
sec
|
||||||
.99 rts
|
adc ZPQuickPtr3
|
||||||
|
sta ZPQuickPtr3
|
||||||
|
bcc .41
|
||||||
|
inc ZPQuickPtr3+1
|
||||||
|
|
||||||
|
.41 >LDYAI VolName
|
||||||
|
>STYA MLICALL.PARAMS+1
|
||||||
|
>MLICALL MLIGETFILEINFO
|
||||||
|
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
|
||||||
|
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
|
||||||
|
clc
|
||||||
|
adc #16
|
||||||
|
sta ZPQuickPtr2
|
||||||
|
bcc .89
|
||||||
|
inc ZPQuickPtr2+1
|
||||||
|
.89 dec EntryCount
|
||||||
|
bne .3
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta (ZPQuickPtr3) Ending 0
|
||||||
|
|
||||||
|
ldy #S.DIR.F
|
||||||
|
lda #S.DIR.F.NOMORE
|
||||||
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
|
ldx hDIRENT
|
||||||
|
>LDYA ZPQuickPtr4
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
S.READDIRA.DIR
|
S.READDIRA.DIR
|
||||||
|
ldx #3
|
||||||
|
ldy #S.STAT.TYPE
|
||||||
|
|
||||||
|
.7 lda MLICALL.PARAMS+S.FILEINFO.TYPE,x
|
||||||
|
sta (ZPQuickPtr3),y
|
||||||
|
iny
|
||||||
|
dex
|
||||||
|
bne .7
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -177,7 +258,10 @@ S.CLOSEDIRA.1 ldy #S.DIR.PRODOS.REF
|
|||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
hONLINE .BS 1
|
hONLINE .BS 1
|
||||||
|
hDIRENT .BS 1
|
||||||
BufSize .BS 2
|
BufSize .BS 2
|
||||||
|
EntryCount .BS 1
|
||||||
|
VolName .BS 17
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE SYS/KERNEL.S.DIR
|
SAVE SYS/KERNEL.S.DIR
|
||||||
|
Loading…
Reference in New Issue
Block a user