Add some basic code, build kernel stuff in tree

This commit is contained in:
Byron Lathi
2023-12-04 23:06:00 -08:00
parent 902b1b5bb9
commit 2859055f98
6 changed files with 77 additions and 65 deletions

View File

@@ -9,14 +9,16 @@
.export _fat32_init
.export _root_cluster, _fat_start_sector, _data_start_sector, _fat_size, _sd_buf
.data
root_cluster: .res 4
fat_start_sector: .res 2
data_start_sector: .res 4
fat_size: .res 4
_root_cluster: .res 4
_fat_start_sector: .res 2
_data_start_sector: .res 4
_fat_size: .res 4
sd_buf: .res 512
_sd_buf: .res 512
data_start_sect_str: .asciiz "Data sector start: 0x%lx\n"
starting_cluster_str: .asciiz "Root cluster num: %lx\n";
@@ -24,12 +26,12 @@ value_str: .asciiz "Value: 0x%x\n"
.code
bytes_per_sector = sd_buf + $0B
sectors_per_cluster = sd_buf + $0D
reserved_sectors = sd_buf + $0E
fat_count = sd_buf + $10
sectors_per_fat = sd_buf + $24
root_cluster_offs = sd_buf + $2C
bytes_per_sector = _sd_buf + $0B
sectors_per_cluster = _sd_buf + $0D
reserved_sectors = _sd_buf + $0E
fat_count = _sd_buf + $10
sectors_per_fat = _sd_buf + $24
root_cluster_offs = _sd_buf + $2C
.proc _fat32_init
; load sector 0 into sd_buf
@@ -38,8 +40,8 @@ root_cluster_offs = sd_buf + $2C
stz sreg
stz sreg+1
jsr pusheax
lda #<sd_buf
ldx #>sd_buf
lda #<_sd_buf
ldx #>_sd_buf
jsr pushax
lda #<ptr1
ldx #>ptr1
@@ -47,7 +49,7 @@ root_cluster_offs = sd_buf + $2C
ldx #$00
L1: lda root_cluster_offs,x
sta root_cluster,x
sta _root_cluster,x
inx
cpx #$4
blt L1
@@ -60,8 +62,8 @@ L1: lda root_cluster_offs,x
jsr _imulii
txa
lsr
sta fat_start_sector
stz fat_start_sector + 1
sta _fat_start_sector
stz _fat_start_sector + 1
; multiply fat size and number of fats to get total fat size
lda fat_count
@@ -69,53 +71,25 @@ L1: lda root_cluster_offs,x
lda sectors_per_fat
ldx sectors_per_fat+1
jsr _lmulii
sta fat_size
stx fat_size+1
sta _fat_size
stx _fat_size+1
lda sreg
sta fat_size+2
sta _fat_size+2
lda sreg+1
sta fat_size+3
sta _fat_size+3
; Add fat size to starting fat sector to get data start sector
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
ldx #>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 <data_start> 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
ldx #>sd_buf
jsr pushax
lda #<ptr1
ldx #>ptr1
jsr _SD_readSingleBlock
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
rts
.endproc