progress on FAT16 support
This commit is contained in:
69
OperatingSystem/software/include/fat16_file.s
Normal file
69
OperatingSystem/software/include/fat16_file.s
Normal file
@@ -0,0 +1,69 @@
|
||||
|
||||
|
||||
;1. find sector for given cluster
|
||||
;2. read sector
|
||||
;3. store first data sector to MEM_FAT_OF0_DATSEC
|
||||
;4. set MEM_FAT_OF0_DATREM to amount uf sectors per cluster
|
||||
;5. find next cluster in FAt and update MEM_FAT_OF0_CCLUST
|
||||
|
||||
|
||||
; gets sector in FAT table for the cluster stored in MEM_FAT_OF0_CCLUST
|
||||
; store result in MEM_FAT_OF0_FATSEC
|
||||
; stores next cluster in MEM_FAT_OF0_CCLUST
|
||||
fat_getfatsec:
|
||||
ld HL,(MEM_FAT_OF0_CCLUST) ;load cluster
|
||||
;each sector contains 256 clusters
|
||||
;first 8bits are not needed (/256)
|
||||
|
||||
ld a,h ;divide by 256
|
||||
ld l,a
|
||||
xor a
|
||||
ld h,a
|
||||
|
||||
ld bc,(MEM_FAT_RESERVED) ;add reserved sectors
|
||||
add hl,bc
|
||||
ld(MEM_FAT_OF0_FATSEC+0),hl;store sector to MEM_FAT_TMPPOINTER1
|
||||
xor a
|
||||
ld(MEM_FAT_OF0_FATSEC+2),a
|
||||
ld(MEM_FAT_OF0_FATSEC+3),a
|
||||
|
||||
call ideif_get_drv_pointer
|
||||
inc ix
|
||||
inc ix
|
||||
push ix
|
||||
pop de ;copy poiter to hl
|
||||
ld bc,[MEM_FAT_OF0_FATSEC]
|
||||
call _fat_math_add32 ;MEM_FAT_OF0_FATSEC now contains the correct sector
|
||||
;in the FAT
|
||||
|
||||
call fat_print_dbg
|
||||
|
||||
;read FAT sector
|
||||
ld hl,MEM_FAT_OF0_FATSEC ;read next sector
|
||||
ld b,1
|
||||
call read_lba_sector
|
||||
|
||||
ld hl, MEM_IDE_BUFFER
|
||||
ld b,20
|
||||
call dump_pretty
|
||||
|
||||
;calculate offset address
|
||||
ld a,(MEM_FAT_OF0_CCLUST)
|
||||
RLA ;shift to left (x2)
|
||||
ld l, a
|
||||
ld a,0
|
||||
RLA ;shift in carry flag
|
||||
ld h,a
|
||||
ld de,MEM_IDE_BUFFER
|
||||
add hl,de
|
||||
;copy pointer
|
||||
ld de,MEM_FAT_OF0_CCLUST
|
||||
ldi ;copy byte for next cluster from FAT
|
||||
ldi
|
||||
|
||||
|
||||
call fat_print_dbg
|
||||
|
||||
ret
|
||||
;store data
|
||||
|
||||
Reference in New Issue
Block a user