diff --git a/src/state.rs b/src/state.rs index 19609f507a097587cdbe9eb450885f63f39bb399..bc6504b194f0515e0a7c79a9c1ceafc344a8e5c0 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,5 +1,12 @@ #[repr(packed)] -pub struct BeesBlock { +pub struct BeesState { + pub name: BeesName, + pub info: BeesInfo, + pub core: BeesCore, +} + +#[repr(packed)] +pub struct BeesBlockHeader { pub magic: u32, pub size: u32, } @@ -16,9 +23,22 @@ pub struct BeesFooter { pub magic: u32, } +#[repr(packed)] +pub struct BeesName { + pub header: BeesBlockHeader, + pub name: String, +} + +#[repr(packed)] +pub struct BeesInfo { + pub header: BeesBlockHeader, + pub title: [u8; 16], + pub checksum: [u8; 2], +} + #[repr(packed)] pub struct BeesCore { - pub header: BeesBlock, + pub header: BeesBlockHeader, pub major: u16, pub minor: u16, @@ -38,7 +58,7 @@ pub struct BeesCore { pub execution_mode: u8, _padding: u8, - pub io_registers: [u8; 0x80], + pub io_registers: [u8; 128], pub ram: BeesBuffer, pub vram: BeesBuffer, @@ -48,3 +68,31 @@ pub struct BeesCore { pub background_palettes: BeesBuffer, pub object_palettes: BeesBuffer, } + +trait Serialize { + fn store(&self, buffer: &mut Vec<u8>); + fn load(&self, data: &[u8]); +} + +impl Serialize for BeesState { + fn store(&self, buffer: &mut Vec<u8>) { + self.info.store(buffer); + } + + fn load(&self, data: &[u8]) { + todo!() + } +} + +impl Serialize for BeesName { + fn store(&self, buffer: &mut Vec<u8>) { + } + + fn load(&self, data: &[u8]) {} +} + +impl Serialize for BeesInfo { + fn store(&self, buffer: &mut Vec<u8>) {} + + fn load(&self, data: &[u8]) {} +}