CBDOS directory output tweaks

This commit is contained in:
FeralChild64 committed 2021-02-16 17:55:29 +01:00
1 parent 9d082366ab
commit c9aaa7b1ac
3 files changed
+123 -30

No files matched your search

+10 -7
View File
@@ -35,16 +35,19 @@
!addr IDX1_TALKER = $8012 ; talker idx, >=$80 = none
!addr IDX2_TALKER = $8013 ; talker idx * 2, >=$80 = none - for calling routines via vector table
; Parameters for utilities
!addr PAR_FSIZE_BLOCKS = $8014 ; 2 bytes - file size in blocks
!addr PAR_FSIZE_BYTES = $8016 ; 4 bytes - file size in bytes
; Various temporary data
!addr XX_DIR_PHASE = $8014 ; directory output phase, values deponds on device driver
!addr SD_DIR_PHASE = $8014 ; - SD card
!addr FD_DIR_PHASE = $8015 ; - floppy
!addr RD_DIR_PHASE = $8016 ; - ram disk
!addr XX_DIR_PHASE = $801A ; directory output phase, values deponds on device driver
!addr SD_DIR_PHASE = $801A ; - SD card
!addr FD_DIR_PHASE = $801B ; - floppy
!addr RD_DIR_PHASE = $801C ; - ram disk
; Free space: $8014-$8063
; Free space: $801D-$8063
!addr SD_ACPTR_helper = $8052 ; subroutine in RAM to read a byte
!addr code_LDA_01 = $8052 ; - LDA instruction
+23 -21
View File
@@ -212,34 +212,36 @@ fs_hvsr_read_dir:
sta SD_DIRENT+$80
sta SD_DIRENT+$81
lda SD_DIRENT+$53 ; XXX calculate length in blocks instead
sta SD_DIRENT+$82
lda SD_DIRENT+$54
sta SD_DIRENT+$83
bra @len_done ; XXX if size above 9999, force maximum possible length
@len_max:
lda #<9999
sta SD_DIRENT+$82
lda #>9999
sta SD_DIRENT+$83
@len_done:
ldx SD_DIRENT+$40 ; make sure file name is terminated by 0
lda #$00
sta SD_DIRENT, x
ldx #$04 ; XXX put correct amount of spaces depending on number size
lda SD_DIRENT+$52 ; calculate file length in blocks to display
sta PAR_FSIZE_BYTES+0
lda SD_DIRENT+$53
sta PAR_FSIZE_BYTES+1
lda SD_DIRENT+$54
sta PAR_FSIZE_BYTES+2
lda SD_DIRENT+$55
sta PAR_FSIZE_BYTES+3
jsr util_dir_filesize_bytes
lda PAR_FSIZE_BLOCKS+0
sta SD_DIRENT+$82
lda PAR_FSIZE_BLOCKS+1
sta SD_DIRENT+$83
lda #' '
ldx #$04 ; indent number of blocks
@lpindent1:
dey
bmi @lpindent1_done
sta SD_DIRENT+$80, x
inx
sta SD_DIRENT+$80, x
inx
sta SD_DIRENT+$80, x
inx
bra @lpindent1
@lpindent1_done:
lda #$22 ; opening quote
sta SD_DIRENT+$80, x
+90 -2
View File
@@ -2,8 +2,96 @@
; Adapt the file size for displaying in a directory list
util_dir_filesize:
util_dir_filesize_bytes: ; preserves .X
; XXX provide implementation
; Convert file size in bytes (32-bit value) to blocks, afterwards
; continue processing in 'util_dir_filesize_blocks'
; XXX temporary - calculate size in 254-byte blocks
lda PAR_FSIZE_BYTES+1
sta PAR_FSIZE_BLOCKS+0
lda PAR_FSIZE_BYTES+2
sta PAR_FSIZE_BLOCKS+1
; FALLTROUGH
util_dir_filesize_blocks: ; preserves .X
; Take file size in blocks (16-bit value), clip to max 9999,
; return in .Y the amount of spaces needed for indentation
lda PAR_FSIZE_BLOCKS+1
cmp #>9999
beq @cmp_9999_p2
bcs util_dir_filesize_max
bcc @size_ok
@cmp_9999_p2:
lda PAR_FSIZE_BLOCKS+0
cmp #<9999
bcs util_dir_filesize_max
@size_ok:
lda PAR_FSIZE_BLOCKS+1
beq @size_123
@size_34: ; file size is 256 or above (3 or 4 digits)
cmp #>1000
beq @cmp_1000_p2
bcs util_dir_filesize_4
bra util_dir_filesize_3
@cmp_1000_p2:
lda PAR_FSIZE_BLOCKS+0
cmp #<1000
bcs util_dir_filesize_4
bra util_dir_filesize_3
@size_123: ; file size is 255 or below (1, 2, or 3 digits)
lda PAR_FSIZE_BLOCKS+0
cmp #10
bcs util_dir_filesize_23
; FALLTROUGH
util_dir_filesize_1: ; file size needs 1 digit
ldy #$03
rts
util_dir_filesize_23: ; file size needs 2 or 3 digits, size in .A
cmp #100
bcs util_dir_filesize_3
; FALLTROUGH
util_dir_filesize_2: ; file size needs 2 digits
ldy #$02
rts
util_dir_filesize_3: ; file size needs 3 digits
ldy #$01
rts
util_dir_filesize_max:
lda #<9999
sta PAR_FSIZE_BLOCKS+0
lda #>9999
sta PAR_FSIZE_BLOCKS+1
; FALLTROUGH
util_dir_filesize_4: ; file size needs 4 digits
ldy #$00
rts