diff --git a/crates/common/src/data.rs b/crates/common/src/data.rs index d9af7690e1fd76874e0372dc25e11306a5e61aff..bfbca4bc0daa427cc585b8b9b75dcb7a0fc52b02 100644 --- a/crates/common/src/data.rs +++ b/crates/common/src/data.rs @@ -1,10 +1,28 @@ use std::{ - io::{Cursor, Read}, + io::{Cursor, Read, Write}, mem::size_of, }; use crate::error::Error; +#[inline(always)] +pub fn write_u8(data: &mut Cursor<Vec<u8>>, value: u8) -> Result<(), Error> { + data.write_all(&value.to_le_bytes())?; + Ok(()) +} + +#[inline(always)] +pub fn write_u16(data: &mut Cursor<Vec<u8>>, value: u16) -> Result<(), Error> { + data.write_all(&value.to_le_bytes())?; + Ok(()) +} + +#[inline(always)] +pub fn write_u32(data: &mut Cursor<Vec<u8>>, value: u32) -> Result<(), Error> { + data.write_all(&value.to_le_bytes())?; + Ok(()) +} + #[inline(always)] pub fn read_u8(data: &mut Cursor<&[u8]>) -> Result<u8, Error> { let mut buffer = [0x00; size_of::<u8>()]; diff --git a/src/timer.rs b/src/timer.rs index e902ea850b618d346b1fca35f259ca015c038604..be393cd6045436f7955c5ef016a856ff4e720b8a 100644 --- a/src/timer.rs +++ b/src/timer.rs @@ -1,9 +1,9 @@ //! Timer functions and structures. -use std::io::{Cursor, Write}; +use std::io::Cursor; use boytacean_common::{ - data::{read_u16, read_u8}, + data::{read_u16, read_u8, write_u16, write_u8}, error::Error, }; @@ -173,15 +173,15 @@ impl BusComponent for Timer { impl StateComponent for Timer { fn state(&self) -> Result<Vec<u8>, Error> { let mut cursor = Cursor::new(vec![]); - cursor.write(&self.div.to_le_bytes())?; - cursor.write(&self.tima.to_le_bytes())?; - cursor.write(&self.tma.to_le_bytes())?; - cursor.write(&self.tac.to_le_bytes())?; - cursor.write(&self.div_clock.to_le_bytes())?; - cursor.write(&self.tima_clock.to_le_bytes())?; - cursor.write(&(self.tima_enabled as u8).to_le_bytes())?; - cursor.write(&self.tima_ratio.to_le_bytes())?; - cursor.write(&(self.int_tima as u8).to_le_bytes())?; + write_u8(&mut cursor, self.div)?; + write_u8(&mut cursor, self.tima)?; + write_u8(&mut cursor, self.tma)?; + write_u8(&mut cursor, self.tac)?; + write_u16(&mut cursor, self.div_clock)?; + write_u16(&mut cursor, self.tima_clock)?; + write_u8(&mut cursor, self.tima_enabled as u8)?; + write_u16(&mut cursor, self.tima_ratio)?; + write_u8(&mut cursor, self.int_tima as u8)?; Ok(cursor.into_inner()) }