Write more PVD values

This commit is contained in:
Jaby 2022-10-23 13:58:34 +02:00
parent cb1d27887a
commit fb595bddef
3 changed files with 27 additions and 5 deletions

View File

@ -54,7 +54,7 @@ pub struct VolumeDescriptorTerminator {
} }
impl PrimaryVolumeDescriptor { impl PrimaryVolumeDescriptor {
pub fn psx_default() -> PrimaryVolumeDescriptor { pub fn new() -> PrimaryVolumeDescriptor {
PrimaryVolumeDescriptor{ PrimaryVolumeDescriptor{
volume_type: [1], volume_type: [1],
std_id: ['C' as u8, 'D' as u8, '0' as u8, '0' as u8, '1' as u8], std_id: ['C' as u8, 'D' as u8, '0' as u8, '0' as u8, '1' as u8],
@ -88,7 +88,7 @@ impl PrimaryVolumeDescriptor {
file_struct_version: [1], file_struct_version: [1],
reserved_4: [0], reserved_4: [0],
app_use_area: [0; 141], app_use_area: [0; 141],
cd_xa_id: ['C' as u8, 'D' as u8, '-' as u8, 'X' as u8, 'A' as u8, '0' as u8, '0' as u8, '1' as u8], cd_xa_id: [0;8],
cd_xa_flags: [0; 2], cd_xa_flags: [0; 2],
cd_xa_startup_dir: [0; 8], cd_xa_startup_dir: [0; 8],
cd_xa_reserved: [0; 8], cd_xa_reserved: [0; 8],

View File

@ -123,7 +123,7 @@ pub fn write_pvd(mut desc: PVDDesc, sectors: &mut Vec<IntermediateSector>, conte
let sectors_size = sectors.len(); let sectors_size = sectors.len();
let now_date = Date::now(); let now_date = Date::now();
let mut raw_pvd = PrimaryVolumeDescriptor::psx_default(); let mut raw_pvd = PrimaryVolumeDescriptor::new();
raw_pvd.system_id = AString::from_str("PLAYSTATION")?; raw_pvd.system_id = AString::from_str("PLAYSTATION")?;
if desc.volume_identifier.len() > 8 { if desc.volume_identifier.len() > 8 {
@ -135,6 +135,7 @@ pub fn write_pvd(mut desc: PVDDesc, sectors: &mut Vec<IntermediateSector>, conte
raw_pvd.app_id = AString::from_str("PLAYSTATION")?; raw_pvd.app_id = AString::from_str("PLAYSTATION")?;
raw_pvd.vol_create_time = now_date; raw_pvd.vol_create_time = now_date;
raw_pvd.vol_space_size.write((sectors_size - 2) as u32); raw_pvd.vol_space_size.write((sectors_size - 2) as u32);
raw_pvd.cd_xa_id = ['C' as u8, 'D' as u8, '-' as u8, 'X' as u8, 'A' as u8, '0' as u8, '0' as u8, '1' as u8];
write_root_dir_record(&mut raw_pvd, content_layout.root_lba); write_root_dir_record(&mut raw_pvd, content_layout.root_lba);
write_path_table(&mut raw_pvd, content_layout.path_table); write_path_table(&mut raw_pvd, content_layout.path_table);

View File

@ -1,7 +1,7 @@
use super::{*, Sector, SectorWriter, {CDDesc, Error}}; use super::{*, Sector, SectorWriter, {CDDesc, Error}};
use super::super::types::{layout::Layout, *}; use super::super::types::{layout::Layout, *};
use builder::SubModeBuilder; use builder::SubModeBuilder;
use cdtypes::types::{helper::sector_count_mode2_form1, pvd as cd_pvd}; use cdtypes::types::{cdstring::{AString, DString}, date::Date, helper::sector_count_mode2_form1, pvd as cd_pvd};
const SYSTEM_AREA_SECTOR_COUNT:usize = 16; const SYSTEM_AREA_SECTOR_COUNT:usize = 16;
const PVD_SECTOR_COUNT:usize = 2; const PVD_SECTOR_COUNT:usize = 2;
@ -93,15 +93,36 @@ fn process_system_area(system_area: &SystemArea, sec_writer: &mut dyn SectorWrit
} }
fn process_pvd(pvd: &PrimaryVolumeDescriptor, path_table: SharedPtr<PathTable>, sec_writer: &mut dyn SectorWriter) -> Result<(), Error> { fn process_pvd(pvd: &PrimaryVolumeDescriptor, path_table: SharedPtr<PathTable>, sec_writer: &mut dyn SectorWriter) -> Result<(), Error> {
const PLAYSATATION_STR:&'static str = "PLAYSTATION";
let path_table = path_table.borrow(); let path_table = path_table.borrow();
if pvd.track_rel_lba != 16 { if pvd.track_rel_lba != 16 {
return Err(Error::from_text(format!("PVD required to start at sector 16 of Track - found LBA: {}", pvd.track_rel_lba))); return Err(Error::from_text(format!("PVD required to start at sector 16 of Track - found LBA: {}", pvd.track_rel_lba)));
} }
let mut cd_pvd = cd_pvd::PrimaryVolumeDescriptor::psx_default(); let mut cd_pvd = cd_pvd::PrimaryVolumeDescriptor::new();
let now = Date::now();
//Config pvd here //Config pvd here
cd_pvd.system_id = AString::from_str(PLAYSATATION_STR)?;
cd_pvd.volume_id = DString::from_str("PSX")?;
&cd_pvd.vol_space_size;
&cd_pvd.path_table_size;
&cd_pvd.path_table_1;
&cd_pvd.path_table_2;
&cd_pvd.path_table_3;
&cd_pvd.path_table_4;
&cd_pvd.root_dir_record;
&cd_pvd.publisher_id; //< Company name
&cd_pvd.data_preparer;
cd_pvd.app_id = AString::from_str(PLAYSATATION_STR)?;
cd_pvd.vol_create_time = now;
cd_pvd.cd_xa_id = ['C' as u8, 'D' as u8, '-' as u8, 'X' as u8, 'A' as u8, '0' as u8, '0' as u8, '1' as u8];
sec_writer.write(Sector::CDXAData(builder::create_xa_data_for(SubModeBuilder::new_mode1().set_eor().create(), &cd_pvd)))?; sec_writer.write(Sector::CDXAData(builder::create_xa_data_for(SubModeBuilder::new_mode1().set_eor().create(), &cd_pvd)))?;
sec_writer.write(Sector::CDXAData(builder::create_xa_data_for(SubModeBuilder::new_mode1().set_eor().set_eof().create(), &cd_pvd::VolumeDescriptorTerminator::new())))?; sec_writer.write(Sector::CDXAData(builder::create_xa_data_for(SubModeBuilder::new_mode1().set_eor().set_eof().create(), &cd_pvd::VolumeDescriptorTerminator::new())))?;