From f47e68b9baff2b161f4d6ada8875a44bf5a36857 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Wed, 5 Nov 2025 09:49:32 -0500 Subject: [PATCH] Add Mode0 and Mode2 formless models --- .../Models/CDROM/Mode0.cs | 15 +++++++ .../Models/CDROM/Mode2Formless.cs | 14 +++++++ SabreTools.Serialization/Readers/CDROM.cs | 40 ++++++++++++++++++- 3 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 SabreTools.Serialization/Models/CDROM/Mode0.cs create mode 100644 SabreTools.Serialization/Models/CDROM/Mode2Formless.cs diff --git a/SabreTools.Serialization/Models/CDROM/Mode0.cs b/SabreTools.Serialization/Models/CDROM/Mode0.cs new file mode 100644 index 00000000..e06baa4c --- /dev/null +++ b/SabreTools.Serialization/Models/CDROM/Mode0.cs @@ -0,0 +1,15 @@ +namespace SabreTools.Data.Models.CDROM +{ + /// + /// A CD-ROM Mode1 sector + /// + /// + public sealed class Mode0 : DataSector + { + /// + /// User Data, 2336 bytes + /// + /// Should be all 0x00 + public byte[] UserData { get; set; } = new byte[2336]; + } +} diff --git a/SabreTools.Serialization/Models/CDROM/Mode2Formless.cs b/SabreTools.Serialization/Models/CDROM/Mode2Formless.cs new file mode 100644 index 00000000..bfd67e29 --- /dev/null +++ b/SabreTools.Serialization/Models/CDROM/Mode2Formless.cs @@ -0,0 +1,14 @@ +namespace SabreTools.Data.Models.CDROM +{ + /// + /// A CD-ROM Mode1 sector + /// + /// + public sealed class Mode2Formless : DataSector + { + /// + /// User Data, 2336 bytes + /// + public byte[] UserData { get; set; } = new byte[2336]; + } +} diff --git a/SabreTools.Serialization/Readers/CDROM.cs b/SabreTools.Serialization/Readers/CDROM.cs index 2026d35e..30d42679 100644 --- a/SabreTools.Serialization/Readers/CDROM.cs +++ b/SabreTools.Serialization/Readers/CDROM.cs @@ -21,9 +21,9 @@ namespace SabreTools.Serialization.Readers SectorMode sectorMode = data.GetSectorMode(); return sectorMode switch { - SectorMode.MODE0 => null, // TODO: Create data sector for Mode0 + SectorMode.MODE0 => ParseMode0(data), SectorMode.MODE1 => ParseMode1(data), - SectorMode.MODE2 => null, // TODO: Create a data sector for Mode2 formless + SectorMode.MODE2 => ParseMode2Formless(data), SectorMode.MODE2_FORM1 => ParseMode2Form1(data), SectorMode.MODE2_FORM2 => ParseMode2Form2(data), @@ -32,6 +32,24 @@ namespace SabreTools.Serialization.Readers }; } + /// + /// Parse a Stream into a Mode0 + /// + /// Stream to parse + /// Filled Mode0 on success, null on error + public static Mode0 ParseMode0(Stream data) + { + var obj = new Mode0(); + + obj.SyncPattern = data.ReadBytes(12); + obj.Address = data.ReadBytes(3); + obj.Mode = data.ReadByteValue(); + + obj.UserData = data.ReadBytes(2336); + + return obj; + } + /// /// Parse a Stream into a Mode1 /// @@ -53,6 +71,24 @@ namespace SabreTools.Serialization.Readers return obj; } + /// + /// Parse a Stream into a Mode2Formless + /// + /// Stream to parse + /// Filled Mode2Formless on success, null on error + public static Mode2Formless ParseMode2Formless(Stream data) + { + var obj = new Mode2Formless(); + + obj.SyncPattern = data.ReadBytes(12); + obj.Address = data.ReadBytes(3); + obj.Mode = data.ReadByteValue(); + + obj.UserData = data.ReadBytes(2336); + + return obj; + } + /// /// Parse a Stream into a Mode2Form1 ///