From 2b7f0d41eb9fa85e48bacfcb2a0aa1200d4621e8 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 23 Feb 2021 22:32:27 +0100 Subject: [PATCH] work towards directory filtering in CBDOS --- src/dos_m65/dev_sdcard/dev_sd_cmd_open.s | 28 ++++++++++++++++++++++- src/dos_m65/dev_sdcard/fs_hvsr_read_dir.s | 6 +++++ src/dos_m65/utils/util_dir_filter.s | 28 +++++++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 src/dos_m65/utils/util_dir_filter.s diff --git a/src/dos_m65/dev_sdcard/dev_sd_cmd_open.s b/src/dos_m65/dev_sdcard/dev_sd_cmd_open.s index ea54784d..d1f154ae 100644 --- a/src/dos_m65/dev_sdcard/dev_sd_cmd_open.s +++ b/src/dos_m65/dev_sdcard/dev_sd_cmd_open.s @@ -19,11 +19,37 @@ dev_sd_cmd_OPEN_EOI: lda SD_CMDFN_BUF cmp #'$' - +beq fs_hvsr_read_dir_open + beq dev_sd_cmd_OPEN_dir ; XXX implement for file names jmp dos_EXIT_SEC +dev_sd_cmd_OPEN_dir: + ; XXX this should be moved to common part + + ; Erase filter pattern for the directory + + ldy #$0F + lda #$A0 +@lp1: + sta PAR_FPATTERN, y + dey + bpl @lp1 + + ; Copy the filter from command + + ldy #$00 +@lp2: + lda SD_MODE, y + beq @lp2_end + sta PAR_FPATTERN, y + iny + cpy #$10 + bne @lp2_end + +@lp2_end: + + jmp fs_hvsr_read_dir_open diff --git a/src/dos_m65/dev_sdcard/fs_hvsr_read_dir.s b/src/dos_m65/dev_sdcard/fs_hvsr_read_dir.s index b087371d..9d9467d9 100644 --- a/src/dos_m65/dev_sdcard/fs_hvsr_read_dir.s +++ b/src/dos_m65/dev_sdcard/fs_hvsr_read_dir.s @@ -60,6 +60,12 @@ fs_hvsr_read_dir: +bcs fs_hvsr_read_dir_blocksfree + ; Check if file name matches the filter + + ; XXX debug this + ; jsr util_dir_filter + ; bne fs_hvsr_read_dir ; if does not match, try the next entry + ; Otherwise, convert the file length from bytes to blocks to display jsr util_dir_filesize_bytes diff --git a/src/dos_m65/utils/util_dir_filter.s b/src/dos_m65/utils/util_dir_filter.s new file mode 100644 index 00000000..9e20041b --- /dev/null +++ b/src/dos_m65/utils/util_dir_filter.s @@ -0,0 +1,28 @@ + +; Check if file name matches the filter (if so - Zero flag set) + + +util_dir_filter: + + lda PAR_FPATTERN + cmp #$A0 + beq @done ; branch if no filter + + ldy #$00 + +@lp1: + + lda PAR_FPATTERN, y + cmp #'*' + beq @done ; branch on wildcard + + cmp PAR_FNAME, y + bne @done ; branch if does not match + + iny + cpy #$10 + bne @lp1 ; next iteration if maximum length not reached + +@done: + + rts