more CBDOS directory work, can now detect read-only files
This commit is contained in:
1 parent
0b5f2dcf2a
commit
230c20a7d0
2 files changed
+90
-32
No files matched your search
@@ -34,20 +34,22 @@ dir_end: ; 19 bytes
|
|||||||
|
|
||||||
; File types / extensions
|
; File types / extensions
|
||||||
|
|
||||||
dir_ext_01: !pet "seq" ; SEQ
|
dir_types:
|
||||||
dir_ext_02: !pet "prg" ; PRG
|
|
||||||
dir_ext_03: !pet "usr" ; USR
|
!pet "seq", $00 ; SEQ
|
||||||
dir_ext_04: !pet "rel" ; REL
|
!pet "prg", $00 ; PRG
|
||||||
dir_ext_05: !pet "dir" ; directory
|
!pet "usr", $00 ; USR
|
||||||
; dir_ext_06: !pet "tap" ; tape image
|
!pet "rel", $00 ; REL
|
||||||
; dir_ext_07: !pet "d67" ; CBM 2040 (DOS 1) - disk image
|
!pet "dir", $00 ; directory
|
||||||
; dir_ext_08: !pet "d64" ; CBM 1541 / 2031 / 3040 / 4040 - disk image
|
; !pet "tap", $00 ; tape image
|
||||||
; dir_ext_09: !pet "d71" ; CBM 1571 - disk image
|
; !pet "d67", $00 ; CBM 2040 (DOS 1) - disk image
|
||||||
; dir_ext_0A: !pet "d81" ; CBM 1581 - disk image
|
; !pet "d64", $00 ; CBM 1541 / 2031 / 3040 / 4040 - disk image
|
||||||
; dir_ext_0B: !pet "d80" ; CBM 8050 - disk image
|
; !pet "d71", $00 ; CBM 1571 - disk image
|
||||||
; dir_ext_0C: !pet "d81" ; CBM 8250 / 1001 - disk image
|
; !pet "d81", $00 ; CBM 1581 - disk image
|
||||||
; dir_ext_0D: !pet "d90" ; CBM D9060 / D9090 - hard disk image
|
; !pet "d80", $00 ; CBM 8050 - disk image
|
||||||
; dir_ext_0E: !pet "d1m" ; CMD FD 2000 / 4000 - disk image (DD)
|
; !pet "d81", $00 ; CBM 8250 / 1001 - disk image
|
||||||
; dir_ext_0F: !pet "d2m" ; CMD FD 2000 / 4000 - disk image (HD)
|
; !pet "d90", $00 ; CBM D9060 / D9090 - hard disk image
|
||||||
; dir_ext_10: !pet "d4m" ; CMD FD 4000 - disk image (ED)
|
; !pet "d1m", $00 ; CMD FD 2000 / 4000 - disk image (DD)
|
||||||
; dir_ext_11: !pet "dhd" ; CMD HD - hard disk image
|
; !pet "d2m", $00 ; CMD FD 2000 / 4000 - disk image (HD)
|
||||||
|
; !pet "d4m", $00 ; CMD FD 4000 - disk image (ED)
|
||||||
|
; !pet "dhd", $00 ; CMD HD - hard disk image
|
||||||
@@ -67,7 +67,25 @@ fs_hvsr_read_dir:
|
|||||||
; - $00-$3F - file name
|
; - $00-$3F - file name
|
||||||
; - $40 - file name length
|
; - $40 - file name length
|
||||||
; - $51-$54 - file length
|
; - $51-$54 - file length
|
||||||
; - $55 - file type and attributes
|
; - $55-$56 - file type ($10 = dir, $20 = regular) and attributes ($01 for read-only)
|
||||||
|
|
||||||
|
; Drop some strange (unknown) file types
|
||||||
|
|
||||||
|
lda SD_DIRENT+$55
|
||||||
|
bne fs_hvsr_read_dir
|
||||||
|
|
||||||
|
; Retrieve read-only status, store mark in SD_DIRENT+$FE
|
||||||
|
|
||||||
|
lda SD_DIRENT+$56
|
||||||
|
and #$01
|
||||||
|
bne @rdonly
|
||||||
|
lda #$00
|
||||||
|
+skip_2_bytes_trash_nvz
|
||||||
|
|
||||||
|
@rdonly:
|
||||||
|
|
||||||
|
lda #'<'
|
||||||
|
sta SD_DIRENT+$FF
|
||||||
|
|
||||||
; Validate/fix characters in file name
|
; Validate/fix characters in file name
|
||||||
|
|
||||||
@@ -98,9 +116,36 @@ fs_hvsr_read_dir:
|
|||||||
dex
|
dex
|
||||||
bpl @lp1
|
bpl @lp1
|
||||||
|
|
||||||
; Validate file name length
|
; Determine type (file/directory), store marker offset in SD_DIRENT+$FE
|
||||||
|
|
||||||
; XXX check for directory!
|
lda SD_DIRENT+$56
|
||||||
|
and #$FE
|
||||||
|
|
||||||
|
; XXX code below does not work
|
||||||
|
;cmp #$20
|
||||||
|
;beq @cklen_file ; branch on file
|
||||||
|
;cmp #$10
|
||||||
|
;bne fs_hvsr_read_dir ; this type is unknown
|
||||||
|
|
||||||
|
bra @cklen_file ; XXX temporary
|
||||||
|
|
||||||
|
@cklen_dir:
|
||||||
|
|
||||||
|
; Validate file name length (directories)
|
||||||
|
|
||||||
|
lda SD_DIRENT+$40
|
||||||
|
beq fs_hvsr_read_dir
|
||||||
|
cmp #$11
|
||||||
|
bcs fs_hvsr_read_dir
|
||||||
|
|
||||||
|
; Set type offset for directory in SD_DIRENT+$FF
|
||||||
|
|
||||||
|
lda #$10
|
||||||
|
bra @all_prepared
|
||||||
|
|
||||||
|
@cklen_file:
|
||||||
|
|
||||||
|
; Validate file name length (regular files)
|
||||||
|
|
||||||
lda SD_DIRENT+$40
|
lda SD_DIRENT+$40
|
||||||
sec
|
sec
|
||||||
@@ -113,15 +158,19 @@ fs_hvsr_read_dir:
|
|||||||
sta SD_DIRENT+$40 ; store corrected file name length
|
sta SD_DIRENT+$40 ; store corrected file name length
|
||||||
tax
|
tax
|
||||||
|
|
||||||
; Detect file type (+64 for read-only, +128 = damaged)
|
; Detect file type
|
||||||
|
|
||||||
lda SD_DIRENT, x
|
lda SD_DIRENT, x
|
||||||
cmp #$2E
|
cmp #$2E
|
||||||
bne fs_hvsr_read_dir ; 3-character extension is required!
|
+bne fs_hvsr_read_dir ; 3-character extension is required!
|
||||||
|
|
||||||
; XXX temporary; detect file type by extension instead
|
lda #$04 ; XXX temporary; detect file type by extension instead
|
||||||
|
|
||||||
; Try to prepare output row, starting from SD_DIRENT+$80
|
@all_prepared:
|
||||||
|
|
||||||
|
sta SD_DIRENT+$FF ; store offset to file type in SD_DIRENT+$FF
|
||||||
|
|
||||||
|
; Prepare output entry, starting from SD_DIRENT+$80
|
||||||
|
|
||||||
lda #$01 ; link to the next line - dummy, will be regenerated by BASIC
|
lda #$01 ; link to the next line - dummy, will be regenerated by BASIC
|
||||||
sta SD_DIRENT+$80
|
sta SD_DIRENT+$80
|
||||||
@@ -162,20 +211,27 @@ fs_hvsr_read_dir:
|
|||||||
sta SD_DIRENT+$80, x
|
sta SD_DIRENT+$80, x
|
||||||
inx
|
inx
|
||||||
|
|
||||||
; XXX put read-only mark if needed
|
; No 'damaged' mark make sense for this filesystem
|
||||||
|
|
||||||
ldy #$03 ; XXX select proper file type instead
|
ldy SD_DIRENT+$FF ; put file type
|
||||||
lda dir_ext_01+0, y
|
|
||||||
|
@lp3:
|
||||||
|
|
||||||
|
lda dir_types, y
|
||||||
|
beq @lp3_done
|
||||||
sta SD_DIRENT+$80, x
|
sta SD_DIRENT+$80, x
|
||||||
inx
|
inx
|
||||||
lda dir_ext_01+1, y
|
iny
|
||||||
sta SD_DIRENT+$80, x
|
bra @lp3
|
||||||
inx
|
|
||||||
lda dir_ext_01+2, y
|
@lp3_done:
|
||||||
|
|
||||||
|
lda SD_DIRENT+$FE ; read-only mark (if needed)
|
||||||
|
beq @skipro
|
||||||
sta SD_DIRENT+$80, x
|
sta SD_DIRENT+$80, x
|
||||||
inx
|
inx
|
||||||
|
|
||||||
; No 'damaged' mark is needed here; put ending 0 and provide pointer
|
@skipro:
|
||||||
|
|
||||||
lda #$00
|
lda #$00
|
||||||
sta SD_DIRENT+$80, x
|
sta SD_DIRENT+$80, x
|
||||||
|
|||||||
Reference in new issue
Block a user