finished code to calculate number of blocks in CBDOS
This commit is contained in:
1 parent
9466b5cca5
commit
1e0f1eeb92
7 files changed
+89
-670
No files matched your search
@@ -7,13 +7,75 @@ util_dir_filesize_bytes: ; preserves .X
|
||||
; 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
|
||||
; Start from handling some large values
|
||||
|
||||
lda PAR_FSIZE_BYTES+3
|
||||
+bne util_dir_filesize_max ; file over 16MB size
|
||||
lda PAR_FSIZE_BYTES+2
|
||||
inc
|
||||
+beq util_dir_filesize_max ; file over 8MB size
|
||||
|
||||
; Set initial size as 0 blocks
|
||||
|
||||
lda #$00
|
||||
sta PAR_FSIZE_BLOCKS+0
|
||||
sta PAR_FSIZE_BLOCKS+1
|
||||
|
||||
; Calculate number of blocks
|
||||
|
||||
ldy #$03
|
||||
|
||||
@lp:
|
||||
|
||||
lda PAR_FSIZE_BYTES+2
|
||||
cmp util_dir_cmptab_hi,y
|
||||
bcc @lp_next
|
||||
bne @lp_adc_sbc
|
||||
lda PAR_FSIZE_BYTES+1
|
||||
cmp util_dir_cmptab_mi,y
|
||||
bcc @lp_next
|
||||
bne @lp_adc_sbc
|
||||
lda PAR_FSIZE_BYTES+0
|
||||
cmp util_dir_cmptab_lo,y
|
||||
bcc @lp_next
|
||||
|
||||
@lp_adc_sbc:
|
||||
|
||||
clc
|
||||
lda PAR_FSIZE_BLOCKS+0
|
||||
adc util_dir_addtab_lo,y
|
||||
sta PAR_FSIZE_BLOCKS+0
|
||||
lda PAR_FSIZE_BLOCKS+1
|
||||
adc util_dir_addtab_hi,y
|
||||
sta PAR_FSIZE_BLOCKS+1
|
||||
|
||||
sec
|
||||
lda PAR_FSIZE_BYTES+0
|
||||
sbc util_dir_cmptab_lo, y
|
||||
sta PAR_FSIZE_BYTES+0
|
||||
lda PAR_FSIZE_BYTES+1
|
||||
sbc util_dir_cmptab_mi, y
|
||||
sta PAR_FSIZE_BYTES+1
|
||||
lda PAR_FSIZE_BYTES+2
|
||||
sbc util_dir_cmptab_hi, y
|
||||
sta PAR_FSIZE_BYTES+2
|
||||
|
||||
bra @lp
|
||||
|
||||
@lp_next:
|
||||
|
||||
dey
|
||||
bpl @lp
|
||||
|
||||
; Correct for bytes not filling in the whole block
|
||||
|
||||
lda PAR_FSIZE_BYTES+0
|
||||
beq util_dir_filesize_blocks
|
||||
|
||||
inc PAR_FSIZE_BLOCKS+0
|
||||
bne util_dir_filesize_blocks
|
||||
inc PAR_FSIZE_BLOCKS+1
|
||||
|
||||
; FALLTROUGH
|
||||
|
||||
util_dir_filesize_blocks: ; preserves .X
|
||||
@@ -95,3 +157,26 @@ util_dir_filesize_4: ; file size needs 4 digits
|
||||
|
||||
ldy #$00
|
||||
rts
|
||||
|
||||
|
||||
; Tables for calculating blocks from bytes
|
||||
|
||||
util_dir_addtab_hi:
|
||||
|
||||
!byte $00, $00 ; 2 next bytes same as in 'lo' table
|
||||
|
||||
util_dir_addtab_lo:
|
||||
|
||||
!byte $01, $10, $00, $00
|
||||
|
||||
util_dir_cmptab_hi:
|
||||
|
||||
!byte ^(254), ^(254 * 16), ^(254 * 16 * 16), ^(254 * 16 * 16 * 16), ^(254 * 16 * 16 * 16 * 16)
|
||||
|
||||
util_dir_cmptab_mi:
|
||||
|
||||
!byte >(254), >(254 * 16), >(254 * 16 * 16), >(254 * 16 * 16 * 16), >(254 * 16 * 16 * 16 * 16)
|
||||
|
||||
util_dir_cmptab_lo:
|
||||
|
||||
!byte <(254), <(254 * 16), <(254 * 16 * 16), <(254 * 16 * 16 * 16), <(254 * 16 * 16 * 16 * 16)
|
||||
Reference in new issue
Block a user