Skip to content

Commit f47e68b

Browse files
committed
Add Mode0 and Mode2 formless models
1 parent eaabd2e commit f47e68b

File tree

3 files changed

+67
-2
lines changed

3 files changed

+67
-2
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
namespace SabreTools.Data.Models.CDROM
2+
{
3+
/// <summary>
4+
/// A CD-ROM Mode1 sector
5+
/// </summary>
6+
/// <see href="https://ecma-international.org/wp-content/uploads/ECMA-130_2nd_edition_june_1996.pdf"/>
7+
public sealed class Mode0 : DataSector
8+
{
9+
/// <summary>
10+
/// User Data, 2336 bytes
11+
/// </summary>
12+
/// <remarks>Should be all 0x00</remarks>
13+
public byte[] UserData { get; set; } = new byte[2336];
14+
}
15+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
namespace SabreTools.Data.Models.CDROM
2+
{
3+
/// <summary>
4+
/// A CD-ROM Mode1 sector
5+
/// </summary>
6+
/// <see href="https://ecma-international.org/wp-content/uploads/ECMA-130_2nd_edition_june_1996.pdf"/>
7+
public sealed class Mode2Formless : DataSector
8+
{
9+
/// <summary>
10+
/// User Data, 2336 bytes
11+
/// </summary>
12+
public byte[] UserData { get; set; } = new byte[2336];
13+
}
14+
}

SabreTools.Serialization/Readers/CDROM.cs

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ public class CDROM
2121
SectorMode sectorMode = data.GetSectorMode();
2222
return sectorMode switch
2323
{
24-
SectorMode.MODE0 => null, // TODO: Create data sector for Mode0
24+
SectorMode.MODE0 => ParseMode0(data),
2525
SectorMode.MODE1 => ParseMode1(data),
26-
SectorMode.MODE2 => null, // TODO: Create a data sector for Mode2 formless
26+
SectorMode.MODE2 => ParseMode2Formless(data),
2727
SectorMode.MODE2_FORM1 => ParseMode2Form1(data),
2828
SectorMode.MODE2_FORM2 => ParseMode2Form2(data),
2929

@@ -32,6 +32,24 @@ public class CDROM
3232
};
3333
}
3434

35+
/// <summary>
36+
/// Parse a Stream into a Mode0
37+
/// </summary>
38+
/// <param name="data">Stream to parse</param>
39+
/// <returns>Filled Mode0 on success, null on error</returns>
40+
public static Mode0 ParseMode0(Stream data)
41+
{
42+
var obj = new Mode0();
43+
44+
obj.SyncPattern = data.ReadBytes(12);
45+
obj.Address = data.ReadBytes(3);
46+
obj.Mode = data.ReadByteValue();
47+
48+
obj.UserData = data.ReadBytes(2336);
49+
50+
return obj;
51+
}
52+
3553
/// <summary>
3654
/// Parse a Stream into a Mode1
3755
/// </summary>
@@ -53,6 +71,24 @@ public static Mode1 ParseMode1(Stream data)
5371
return obj;
5472
}
5573

74+
/// <summary>
75+
/// Parse a Stream into a Mode2Formless
76+
/// </summary>
77+
/// <param name="data">Stream to parse</param>
78+
/// <returns>Filled Mode2Formless on success, null on error</returns>
79+
public static Mode2Formless ParseMode2Formless(Stream data)
80+
{
81+
var obj = new Mode2Formless();
82+
83+
obj.SyncPattern = data.ReadBytes(12);
84+
obj.Address = data.ReadBytes(3);
85+
obj.Mode = data.ReadByteValue();
86+
87+
obj.UserData = data.ReadBytes(2336);
88+
89+
return obj;
90+
}
91+
5692
/// <summary>
5793
/// Parse a Stream into a Mode2Form1
5894
/// </summary>

0 commit comments

Comments
 (0)