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
///