From 7a0ceee9c9e5b8574a4fc64d9861aaa177d84f93 Mon Sep 17 00:00:00 2001 From: jaby Date: Thu, 20 Oct 2022 20:11:00 +0200 Subject: [PATCH] Write sectors --- src/Tools/cdtypes/src/cd/sector.rs | 10 ++++++++++ src/Tools/psxcdgen_ex/src/encoder/psx.rs | 6 ++++-- src/Tools/psxcdgen_ex/src/file_writer/bin_cue.rs | 14 ++++---------- src/Tools/psxcdgen_ex/src/file_writer/mod.rs | 2 +- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/Tools/cdtypes/src/cd/sector.rs b/src/Tools/cdtypes/src/cd/sector.rs index 05af62d3..303f9f64 100644 --- a/src/Tools/cdtypes/src/cd/sector.rs +++ b/src/Tools/cdtypes/src/cd/sector.rs @@ -135,4 +135,14 @@ impl Sector { Sector::CDXAAudio(sector) => sector.finalize(), } } + + pub fn as_raw(&self) -> &[u8] { + match self { + Sector::Audio(sector) => unsafe {std::mem::transmute::<&Audio, &[u8; SECTOR_SIZE]>(sector)}, + Sector::Empty(sector) => unsafe {std::mem::transmute::<&Mode0, &[u8; SECTOR_SIZE]>(sector)}, + Sector::CDData(sector) => unsafe {std::mem::transmute::<&Mode1, &[u8; SECTOR_SIZE]>(sector)}, + Sector::CDXAData(sector) => unsafe {std::mem::transmute::<&Mode2Form1, &[u8; SECTOR_SIZE]>(sector)}, + Sector::CDXAAudio(sector) => unsafe {std::mem::transmute::<&Mode2Form2, &[u8; SECTOR_SIZE]>(sector)}, + } + } } diff --git a/src/Tools/psxcdgen_ex/src/encoder/psx.rs b/src/Tools/psxcdgen_ex/src/encoder/psx.rs index 82ec0409..495c37b5 100644 --- a/src/Tools/psxcdgen_ex/src/encoder/psx.rs +++ b/src/Tools/psxcdgen_ex/src/encoder/psx.rs @@ -9,10 +9,12 @@ pub fn encode_psx_image(cd_desc: CDDesc, sec_writer: &mut dyn SectorWriter) -> R } } - Err(Error::not_implemented("encode_psx_image")) + //Err(Error::not_implemented("encode_psx_image")) + Ok(()) } fn process_system_area(_: &SystemArea, sec_writer: &mut dyn SectorWriter) -> Result<(), Error> { - sec_writer.write(Sector::CDXAData(builder::create_xa_data_zero())) + sec_writer.write(Sector::CDXAData(builder::create_xa_data_zero()))?; + Ok(()) } \ No newline at end of file diff --git a/src/Tools/psxcdgen_ex/src/file_writer/bin_cue.rs b/src/Tools/psxcdgen_ex/src/file_writer/bin_cue.rs index cb709120..38501e97 100644 --- a/src/Tools/psxcdgen_ex/src/file_writer/bin_cue.rs +++ b/src/Tools/psxcdgen_ex/src/file_writer/bin_cue.rs @@ -3,13 +3,13 @@ use cdtypes::types::time::Time; use std::io::Write; pub struct BinCueWriter { - _bin_out: std::boxed::Box, + bin_out: std::boxed::Box, cd_time: Time, } impl BinCueWriter { pub fn new(writer: T) -> BinCueWriter { - BinCueWriter{_bin_out: std::boxed::Box::new(writer), cd_time: Time::cd_start()} + BinCueWriter{bin_out: std::boxed::Box::new(writer), cd_time: Time::cd_start()} } fn finalize(&mut self, sector: &mut Sector) -> Result<(), Error> { @@ -25,15 +25,9 @@ impl BinCueWriter { } impl SectorWriter for BinCueWriter { - fn write(&mut self, mut sector: Sector) -> Result<(), Error> { + fn write(&mut self, mut sector: Sector) -> Result { self.finalize(&mut sector)?; - match sector { - Sector::Empty(_) => Err(Error::not_implemented("Empty sector encoding")), - Sector::Audio(_) => Err(Error::not_implemented("Audio sector encoding")), - Sector::CDData(_) => Err(Error::not_implemented("CD Data sector encoding")), - Sector::CDXAData(_) => Err(Error::not_implemented("CD XA Data sector encoding")), - Sector::CDXAAudio(_) => Err(Error::not_implemented("CD XA Audio sector encoding")) - } + Ok(self.bin_out.write(sector.as_raw())?) } } \ No newline at end of file diff --git a/src/Tools/psxcdgen_ex/src/file_writer/mod.rs b/src/Tools/psxcdgen_ex/src/file_writer/mod.rs index 553cbfd9..5ebc971f 100644 --- a/src/Tools/psxcdgen_ex/src/file_writer/mod.rs +++ b/src/Tools/psxcdgen_ex/src/file_writer/mod.rs @@ -12,7 +12,7 @@ pub enum ImageType { } pub trait SectorWriter { - fn write(&mut self, sector: Sector) -> Result<(), Error>; + fn write(&mut self, sector: Sector) -> Result; } pub fn write_image(cd_desc: CDDesc, encoder: EncoderFunction, image_type: ImageType, output_path: PathBuf) -> Result<(), Error> {