forked from AbleOS/ableos
fat32 cleanup patch
This commit is contained in:
parent
dc3b7f71d5
commit
68840571c0
|
@ -6,10 +6,10 @@ VALID_JUMP_BYTES := [u8].(0xEB, 0x3C, 0x90)
|
||||||
OemIdent := struct {
|
OemIdent := struct {
|
||||||
dos_version: [u8; 8],
|
dos_version: [u8; 8],
|
||||||
dos_version_name: [u8; 8],
|
dos_version_name: [u8; 8],
|
||||||
}
|
|
||||||
|
|
||||||
new_oem_ident := fn(major: int, minor: int): OemIdent {
|
new := fn(major: int, minor: int): OemIdent {
|
||||||
return .(.(0, 0, 0, 0, 0, 0, 0, 0), .(0, 0, 0, 0, 0, 0, 0, 0))
|
return .(.(0, 0, 0, 0, 0, 0, 0, 0), .(0, 0, 0, 0, 0, 0, 0, 0))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BiosParameterBlock := struct {
|
BiosParameterBlock := struct {
|
||||||
|
@ -30,21 +30,21 @@ BiosParameterBlock := struct {
|
||||||
head_count: u16,
|
head_count: u16,
|
||||||
hidden_sectors: u32,
|
hidden_sectors: u32,
|
||||||
large_sector_count: u32,
|
large_sector_count: u32,
|
||||||
}
|
|
||||||
|
|
||||||
bpb_sanity_check := fn(bpb: BiosParameterBlock): int {
|
sanity_check := fn(bpb: BiosParameterBlock): int {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
new_bpb := fn(): BiosParameterBlock {
|
new := fn(): BiosParameterBlock {
|
||||||
return .(VALID_JUMP_BYTES, new_oem_ident(0, 0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
return .(VALID_JUMP_BYTES, OemIdent.new(0, 0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
sector_count := fn(bpb: BiosParameterBlock): u32 {
|
sector_count := fn(bpb: BiosParameterBlock): u32 {
|
||||||
if bpb.total_sectors == 0 {
|
if bpb.total_sectors == 0 {
|
||||||
return bpb.large_sector_count
|
return bpb.large_sector_count
|
||||||
} else {
|
} else {
|
||||||
return bpb.total_sectors
|
return bpb.total_sectors
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,48 +85,48 @@ ExtendedBootRecord := struct {
|
||||||
system_identifier_string: SystemIdentifierString,
|
system_identifier_string: SystemIdentifierString,
|
||||||
boot_code: BootCode,
|
boot_code: BootCode,
|
||||||
partition_signature: u16,
|
partition_signature: u16,
|
||||||
}
|
|
||||||
|
|
||||||
ebr_sanity_check := fn(ebr: ExtendedBootRecord): int {
|
sanity_check := fn(ebr: ExtendedBootRecord): int {
|
||||||
ret := 0
|
ret := 0
|
||||||
if ebr.drive_number != 0x0 | ebr.drive_number != 0x80 {
|
if ebr.drive_number != 0x0 | ebr.drive_number != 0x80 {
|
||||||
log.warn("EBR-Drive-Number sanity check failed\0")
|
log.warn("EBR-Drive-Number sanity check failed\0")
|
||||||
|
}
|
||||||
|
|
||||||
|
if ebr.signature != 0x28 | ebr.signature != 0x29 {
|
||||||
|
log.warn("EBR-Signature sanity check failed\0")
|
||||||
|
}
|
||||||
|
|
||||||
|
// ! comparison between [u8] is not supported in hblang
|
||||||
|
// if ebr.system_identifier_string != VALID_SYSTEM_IDENTIFIER_STRING {
|
||||||
|
// log.warn("EBR-Signature-Identifier-String sanity check failed\0")
|
||||||
|
// }
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
if ebr.signature != 0x28 | ebr.signature != 0x29 {
|
new := fn(): ExtendedBootRecord {
|
||||||
log.warn("EBR-Signature sanity check failed\0")
|
version := FatVersionNumber.(0, 0)
|
||||||
|
fmt_res := FormatReservation.(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||||
|
vol_name := @as([u8; 11], idk)
|
||||||
|
boot_code := @as([u8; 420], idk)
|
||||||
|
|
||||||
|
return ExtendedBootRecord.(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
version,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
fmt_res,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
vol_name,
|
||||||
|
VALID_SYSTEM_IDENTIFIER_STRING,
|
||||||
|
boot_code,
|
||||||
|
0,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ! comparison between [u8] is not supported in hblang
|
|
||||||
// if ebr.system_identifier_string != VALID_SYSTEM_IDENTIFIER_STRING {
|
|
||||||
// log.warn("EBR-Signature-Identifier-String sanity check failed\0")
|
|
||||||
// }
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
new_ebr := fn(): ExtendedBootRecord {
|
|
||||||
version := FatVersionNumber.(0, 0)
|
|
||||||
fmt_res := FormatReservation.(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
|
||||||
vol_name := @as([u8; 11], idk)
|
|
||||||
boot_code := @as([u8; 420], idk)
|
|
||||||
|
|
||||||
return ExtendedBootRecord.(
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
version,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
fmt_res,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
vol_name,
|
|
||||||
VALID_SYSTEM_IDENTIFIER_STRING,
|
|
||||||
boot_code,
|
|
||||||
0,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VALID_LEAD_FS_INFO := @as(u32, 0x41615252)
|
VALID_LEAD_FS_INFO := @as(u32, 0x41615252)
|
||||||
|
@ -141,39 +141,39 @@ FSInfo := struct {
|
||||||
last_known_avalible_cluster: u32,
|
last_known_avalible_cluster: u32,
|
||||||
trail_reserved: [u8; 12],
|
trail_reserved: [u8; 12],
|
||||||
trail_signature: u32,
|
trail_signature: u32,
|
||||||
}
|
|
||||||
|
|
||||||
fs_info_sanity_check := fn(fs_info: FSInfo): uint {
|
sanity_check := fn(fs_info: FSInfo): uint {
|
||||||
ret := 0
|
ret := 0
|
||||||
if fs_info.lead_signature != VALID_LEAD_FS_INFO {
|
if fs_info.lead_signature != VALID_LEAD_FS_INFO {
|
||||||
ret &= 1
|
ret &= 1
|
||||||
log.warn("Invalid leading signature in FSInfo.\0")
|
log.warn("Invalid leading signature in FSInfo.\0")
|
||||||
}
|
}
|
||||||
if fs_info.last_known_free_cluster_count == 0xFFFFFFFF {
|
if fs_info.last_known_free_cluster_count == 0xFFFFFFFF {
|
||||||
ret &= 2
|
ret &= 2
|
||||||
log.warn("Last known free cluster count unknown.\0")
|
log.warn("Last known free cluster count unknown.\0")
|
||||||
}
|
}
|
||||||
if fs_info.last_known_avalible_cluster == 0xFFFFFFFF {
|
if fs_info.last_known_avalible_cluster == 0xFFFFFFFF {
|
||||||
ret &= 4
|
ret &= 4
|
||||||
log.warn("Last known avalible cluster count unknown.\0")
|
log.warn("Last known avalible cluster count unknown.\0")
|
||||||
}
|
}
|
||||||
if fs_info.trail_signature != VALID_TRAIL_FS_INFO {
|
if fs_info.trail_signature != VALID_TRAIL_FS_INFO {
|
||||||
ret &= 8
|
ret &= 8
|
||||||
log.warn("Invalid trailing signature in FSInfo.\0")
|
log.warn("Invalid trailing signature in FSInfo.\0")
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret
|
new := fn(): FSInfo {
|
||||||
}
|
lead_reserved := @as([u8; 480], idk)
|
||||||
|
trail_reserved := @as([u8; 12], idk)
|
||||||
new_fs_info := fn(): FSInfo {
|
return FSInfo.(
|
||||||
lead_reserved := @as([u8; 480], idk)
|
VALID_LEAD_FS_INFO,
|
||||||
trail_reserved := @as([u8; 12], idk)
|
lead_reserved,
|
||||||
return FSInfo.(
|
0,
|
||||||
VALID_LEAD_FS_INFO,
|
0,
|
||||||
lead_reserved,
|
trail_reserved,
|
||||||
0,
|
VALID_TRAIL_FS_INFO,
|
||||||
0,
|
)
|
||||||
trail_reserved,
|
}
|
||||||
VALID_TRAIL_FS_INFO,
|
|
||||||
)
|
|
||||||
}
|
}
|
|
@ -2,24 +2,25 @@ Date := struct {
|
||||||
year: u16,
|
year: u16,
|
||||||
month: u16,
|
month: u16,
|
||||||
day: u16,
|
day: u16,
|
||||||
|
|
||||||
|
compress_date := fn(year: u16, month: u16, day: u16): u16 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
decompress_date := fn(date: u16): Date {
|
||||||
|
return Date.(0, 0, 0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Time := struct {
|
Time := struct {
|
||||||
hour: u16,
|
hour: u16,
|
||||||
minutes: u16,
|
minutes: u16,
|
||||||
seconds: u16,
|
seconds: u16,
|
||||||
}
|
|
||||||
|
|
||||||
compress_date := fn(year: u16, month: u16, day: u16): u16 {
|
compress_time := fn(hour: u16, minutes: u16, seconds: u16): u16 {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
decompress_date := fn(date: u16): Date {
|
|
||||||
return Date.(0, 0, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
compress_time := fn(hour: u16, minutes: u16, seconds: u16): u16 {
|
decompress_time := fn(time: u16): Time {
|
||||||
return 0
|
return Time.(0, 0, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
decompress_time := fn(time: u16): Time {
|
|
||||||
return Time.(0, 0, 0)
|
|
||||||
}
|
}
|
|
@ -6,7 +6,7 @@ datetime := @use("datetime.hb")
|
||||||
directory := @use("file.hb")
|
directory := @use("file.hb")
|
||||||
bios_parameter_block := @use("bios_parameter_block.hb");
|
bios_parameter_block := @use("bios_parameter_block.hb");
|
||||||
.{bpb_sanity_check, ebr_sanity_check, fs_info_sanity_check} := bios_parameter_block;
|
.{bpb_sanity_check, ebr_sanity_check, fs_info_sanity_check} := bios_parameter_block;
|
||||||
.{new_bpb, new_ebr, new_fs_info} := bios_parameter_block
|
.{BiosParameterBlock, ExtendedBootRecord, FSInfo} := bios_parameter_block
|
||||||
|
|
||||||
FAT12_THRESHOLD := 4085
|
FAT12_THRESHOLD := 4085
|
||||||
FAT16_THRESHOLD := 65525
|
FAT16_THRESHOLD := 65525
|
||||||
|
@ -29,9 +29,9 @@ calculate_fat_type := fn(sector_size: uint, total_clusters: uint): uint {
|
||||||
}
|
}
|
||||||
|
|
||||||
main := fn(): int {
|
main := fn(): int {
|
||||||
bpb := new_bpb()
|
bpb := BiosParameterBlock.new()
|
||||||
ebr := new_ebr()
|
ebr := ExtendedBootRecord.new()
|
||||||
fsi := new_fs_info()
|
fsi := FSInfo.new()
|
||||||
|
|
||||||
fat_type := calculate_fat_type(1, 100)
|
fat_type := calculate_fat_type(1, 100)
|
||||||
|
|
||||||
|
@ -39,9 +39,9 @@ main := fn(): int {
|
||||||
log.warn("filesystem_fat32 driver only supports Fat32.\0")
|
log.warn("filesystem_fat32 driver only supports Fat32.\0")
|
||||||
}
|
}
|
||||||
|
|
||||||
bsc := bpb_sanity_check(bpb)
|
bsc := bpb.sanity_check()
|
||||||
esc := ebr_sanity_check(ebr)
|
esc := ebr.sanity_check()
|
||||||
fssc := fs_info_sanity_check(fsi)
|
fssc := fsi.sanity_check()
|
||||||
|
|
||||||
msg_type := 0
|
msg_type := 0
|
||||||
|
|
||||||
|
|
|
@ -34,11 +34,14 @@ resolution = "1024x768x24"
|
||||||
# [boot.limine.ableos.modules.ps2_keyboard_driver]
|
# [boot.limine.ableos.modules.ps2_keyboard_driver]
|
||||||
# path = "boot:///ps2_keyboard_driver.hbf"
|
# path = "boot:///ps2_keyboard_driver.hbf"
|
||||||
|
|
||||||
[boot.limine.ableos.modules.ps2_driver]
|
# [boot.limine.ableos.modules.ps2_driver]
|
||||||
path = "boot:///ps2_driver.hbf"
|
# path = "boot:///ps2_driver.hbf"
|
||||||
|
|
||||||
# [boot.limine.ableos.modules.sunset_client]
|
# [boot.limine.ableos.modules.sunset_client]
|
||||||
# path = "boot:///sunset_client.hbf"
|
# path = "boot:///sunset_client.hbf"
|
||||||
|
|
||||||
# [boot.limine.ableos.modules.sunset_server]
|
# [boot.limine.ableos.modules.sunset_server]
|
||||||
# path = "boot:///sunset_server.hbf"
|
# path = "boot:///sunset_server.hbf"
|
||||||
|
|
||||||
|
[boot.limine.ableos.modules.filesystem_fat32]
|
||||||
|
path = "boot:///filesystem_fat32.hbf"
|
||||||
|
|
Loading…
Reference in a new issue