From e53c5dfbdf8231d741249426913be228f41f372d Mon Sep 17 00:00:00 2001 From: Jaby Date: Tue, 15 Nov 2022 04:24:46 +0100 Subject: [PATCH] Prepare parsing license file --- src/Tools/psxcdgen_ex/src/encoder/builder.rs | 14 ++++++++++ src/Tools/psxcdgen_ex/src/encoder/psx.rs | 29 ++++++++++++++++++-- src/Tools/psxcdgen_ex/src/lib.rs | 4 +-- src/Tools/psxcdgen_ex/src/types/mod.rs | 3 +- 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/src/Tools/psxcdgen_ex/src/encoder/builder.rs b/src/Tools/psxcdgen_ex/src/encoder/builder.rs index 8d63081f..fe00ec3e 100644 --- a/src/Tools/psxcdgen_ex/src/encoder/builder.rs +++ b/src/Tools/psxcdgen_ex/src/encoder/builder.rs @@ -34,6 +34,16 @@ pub fn create_xa_data_for_raw(mut sub_mode: SubMode, data: &[u8; Mode2Form1::DAT sector } +pub fn create_xa_audio_for_raw(mut sub_mode: SubMode, data: &[u8; Mode2Form2::DATA_SIZE]) -> Mode2Form2 { + let mut sector = Mode2Form2::new(); + + sub_mode.set_audio(); + + sector.sub_header.sub_mode = sub_mode; + sector.data = *data; + sector +} + pub fn create_xa_data_for(sub_mode: SubMode, data: &T) -> Mode2Form1 { create_xa_data_for_raw(sub_mode, unsafe {std::mem::transmute::<&T, &[u8; Mode2Form1::DATA_SIZE]>(data)}) } @@ -76,6 +86,10 @@ pub fn create_xa_data_zero() -> Mode2Form1 { create_xa_data_for_raw(SubMode::default_form1(), &[0u8; Mode2Form1::DATA_SIZE]) } +pub fn create_xa_audio_zero() -> Mode2Form2 { + create_xa_audio_for_raw(SubMode::default_form2(), &[0u8; Mode2Form2::DATA_SIZE]) +} + fn copy_array<'a, T, const SIZE:usize>(dst: &mut [T; SIZE], src: &'a [T]) -> &'a [T] { let data_size = { if src.len() > SIZE { diff --git a/src/Tools/psxcdgen_ex/src/encoder/psx.rs b/src/Tools/psxcdgen_ex/src/encoder/psx.rs index 5b5ba14a..29550d26 100644 --- a/src/Tools/psxcdgen_ex/src/encoder/psx.rs +++ b/src/Tools/psxcdgen_ex/src/encoder/psx.rs @@ -93,9 +93,34 @@ fn process_system_area(system_area: &SystemArea, sec_writer: &mut dyn SectorWrit return Err(Error::from_text(format!("System Area required to start at sector 0 of Track - found LBA: {}", system_area_lba))); } - for _ in 0..SYSTEM_AREA_SECTOR_COUNT { - sec_writer.write_cd_xa_data(builder::create_xa_data_zero())?; + if system_area.license_data.is_empty() { + // No license specified - filling it with zeros + for _ in 0..SYSTEM_AREA_SECTOR_COUNT { + sec_writer.write_cd_xa_data(builder::create_xa_data_zero())?; + } } + + else { + for _ in 0..4 { + sec_writer.write_cd_xa_data(builder::create_xa_data_zero())?; + } + + // Read from CD License file + for _ in 0..8 { + sec_writer.write_cd_xa_data(builder::create_xa_data_zero())?; + } + + for _ in 0..4 { + let sector = { + let mut sector = builder::create_xa_audio_zero(); + + sector.sub_header.sub_mode.clear_audio(); + sector + }; + sec_writer.write_cd_xa_audio(sector)?; + } + } + Ok(()) } diff --git a/src/Tools/psxcdgen_ex/src/lib.rs b/src/Tools/psxcdgen_ex/src/lib.rs index 1ebeb1f7..47d5a6da 100644 --- a/src/Tools/psxcdgen_ex/src/lib.rs +++ b/src/Tools/psxcdgen_ex/src/lib.rs @@ -43,8 +43,8 @@ fn parse_configuration(config: config_reader::Configuration) -> Result, } impl SystemArea { pub fn new() -> SystemArea { - SystemArea{track_rel_lba: 0} + SystemArea{track_rel_lba: 0, license_data: Vec::new()} } }