From 1f8a8ff81ac5383d61e0a07e5bb8aeb52874c2df Mon Sep 17 00:00:00 2001 From: Jakob Lechner Date: Thu, 2 Jan 2025 14:56:10 +0100 Subject: [PATCH] Add constants for FAT12 partition --- src/main.rs | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/main.rs b/src/main.rs index 9c7ac77..42a1cb9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -134,6 +134,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"; + storage[0x1B8..0x1BC].copy_from_slice(&[0xEF, 0xBE, 0xAD, 0xDE]); storage[0x1BE..0x1C3].copy_from_slice(&[0x00, 0x00, 0x02, 0x00, 0x01]); storage[0x1C3] = last_head as u8; @@ -145,20 +149,25 @@ fn main() -> ! { storage[0x1CC] = (LBA >> 16) as u8; storage[0x1CD] = (LBA >> 24) as u8; storage[0x1FE..0x200].copy_from_slice(&[0x55, 0xaa]); // boot signature - storage[0x200..0x23E].copy_from_slice(&[ - /* 000 */ 0xEB, 0x3C, 0x90, b'm', b'k', b'f', b's', b'.', b'f', b'a', b't', 0x00, 0x02, 0x04, 0x01, 0x00, - /* 010 */ 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, - /* 020 */ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0xDE, 0xAD, 0xBE, 0xEF, b'R', b'A', b'M', b'_', b'U', - /* 030 */ b'S', b'B', b' ', b' ', b' ', b' ', b'F', b'A', b'T', b'1', b'2', b' ', b' ', b' ' - ]); + + // 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[0x227..0x22B].copy_from_slice(&FILESYSTEM_ID); + storage[0x22B..0x236].copy_from_slice(&FILESYSTEM_NAME); + 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..0x81A].copy_from_slice(&[ - /* 600 */ b'R', b'A', b'M', b'_', b'U', b'S', b'B', b' ', b' ', b' ', b' ', 0x08, 0x00, 0x00, 0xF9, 0x98, - /* 610 */ 0x3A, 0x58, 0x3A, 0x58, 0x00, 0x00, 0xF9, 0x98, 0x3A, 0x58 + 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 ]); let mut state: State = State {