diff --git a/src/main.rs b/src/main.rs index 8092a79..5230f7c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -148,10 +148,10 @@ fn main() -> ! { const OEM: [u8; 8] = *b"mkfs.fat"; const FILESYSTEM_ID: [u8; 4] = [0xDE, 0xAD, 0xBE, 0xEF]; - const FILESYSTEM_NAME: [u8; 11] = *b"RAM_USB\0\0\0\0"; + const FILESYSTEM_LABEL: [u8; 11] = *b"RAM_USB "; - storage[0x1B8..0x1BC].copy_from_slice(&[0xEF, 0xBE, 0xAD, 0xDE]); - storage[0x1BE..0x1C3].copy_from_slice(&[0x00, 0x00, 0x02, 0x00, 0x01]); + storage[0x1B9] = 0x10; + storage[0x1BE..0x1C3].copy_from_slice(&[0x00, 0x00, 0x02, 0x00, 0x0c]); storage[0x1C3] = last_head as u8; storage[0x1C4] = ((last_cyl >> 8) & 0xc0) as u8 | ((last_sect as u8) & 0x3f); storage[0x1C5] = last_cyl as u8; @@ -165,22 +165,23 @@ fn main() -> ! { // FAT12 Partition storage[0x200..0x203].copy_from_slice(&[0xEB, 0x3C, 0x90]); storage[0x203..0x20B].copy_from_slice(&OEM); - storage[0x20B..0x227].copy_from_slice(&[0x00, 0x02, 0x04, 0x01, 0x00, - 0x02, 0x00, 0x02, (DISK_BLOCK_NUM & 0xff) as u8, - (DISK_BLOCK_NUM >> 8) as u8, - 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29]); + storage[0x20B..0x21d].copy_from_slice(&[0x00, 0x02, 0x04, 0x01, 0x00, + 0x02, 0x00, 0x02, (LBA & 0xff) as u8, + (LBA >> 8) as u8, + 0xF8, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01]); + storage[0x224..0x227].copy_from_slice(&[0x80, 0x00, 0x29]); storage[0x227..0x22B].copy_from_slice(&FILESYSTEM_ID); - storage[0x22B..0x236].copy_from_slice(&FILESYSTEM_NAME); + storage[0x22B..0x236].copy_from_slice(&FILESYSTEM_LABEL); storage[0x236..0x23E].copy_from_slice(b"FAT12 "); storage[0x3FE..0x400].copy_from_slice(&[0x55, 0xAA]); - + storage[0x400..0x403].copy_from_slice(&[0xF8, 0xFF, 0xFF]); storage[0x600..0x603].copy_from_slice(&[0xF8, 0xFF, 0xFF]); - storage[0x800..0x80B].copy_from_slice(&FILESYSTEM_NAME); - storage[0x80B..0x81A].copy_from_slice(&[0x08, 0x00, 0x00, 0xF9, 0x98, - 0x3A, 0x58, 0x3A, 0x58, 0x00, 0x00, 0xF9, 0x98, 0x3A, 0x58 - ]); + storage[0x800..0x80B].copy_from_slice(&FILESYSTEM_LABEL); + storage[0x80B] = 0x08; // file attribute 0x08 = volume label + + // https://de.wikipedia.org/wiki/File_Allocation_Table + // Remove bootloader code: dd if=/dev/zero conv=notrunc of=foo bs=1 count=420 seek=602 let mut state: State = State { storage_offset: 0,