diff --git a/sw/kernel/filesystems/fat32.s b/sw/kernel/filesystems/fat32.s index 878818d..029ce48 100644 --- a/sw/kernel/filesystems/fat32.s +++ b/sw/kernel/filesystems/fat32.s @@ -12,7 +12,9 @@ .data fat_start_sector: .res 2 -data_start_sector: .res 2 +data_start_sector: .res 4 +fat_size: .res 4 + sd_buf: .res 512 bps_val_str: .asciiz "Bytes Per Sector: 0x%x\n" @@ -23,6 +25,7 @@ fat_sect_str: .asciiz "Sectors per FAT: 0x%x\n" fat_size_tot_str: .asciiz "Total fat size: 0x%lx\n" rsv_sect_bytes_str: .asciiz "Total reserved bytes: 0x%x\n" rsv_sd_sectors: .asciiz "Reserved SD Sectors: 0x%x\n" +data_start_sect_str: .asciiz "Data sector start: 0x%lx\n" .code @@ -93,9 +96,15 @@ sectors_per_fat = sd_buf + $24 ldx bytes_per_sector+1 jsr _imulii jsr pushax + phx ldy #$4 jsr _cprintf + pla + lsr + sta fat_start_sector + stz fat_start_sector + 1 + lda #fat_size_tot_str jsr pushax @@ -107,9 +116,57 @@ sectors_per_fat = sd_buf + $24 lda sectors_per_fat ldx sectors_per_fat+1 jsr _lmulii + sta fat_size + stx fat_size+1 + lda sreg + sta fat_size+2 + lda sreg+1 + sta fat_size+3 + lda fat_size + ldx fat_size+1 jsr pusheax ldy #$6 jsr _cprintf + + lda fat_size + adc fat_start_sector + sta data_start_sector + lda fat_size+1 + adc fat_start_sector+1 + sta data_start_sector+1 + lda fat_size+2 + sta data_start_sector+2 + lda fat_size+3 + sta data_start_sector+3 + + lda #data_start_sect_str + jsr pushax + lda data_start_sector+2 + sta sreg + lda data_start_sector+3 + sta sreg+1 + lda data_start_sector + ldx data_start_sector+1 + jsr pusheax + ldy #$6 + jsr _cprintf + + ; load sector into sd_buf + lda data_start_sector+2 + sta sreg + lda data_start_sector+3 + sta sreg+1 + lda data_start_sector + ldx data_start_sector+1 + jsr pusheax + lda #sd_buf + jsr pushax + lda #ptr1 + jsr _SD_readSingleBlock + rts .endproc