diff --git a/DiscImageChef.DiscImages/BlindWrite5.cs b/DiscImageChef.DiscImages/BlindWrite5.cs
index 843c0569..dd85f0fc 100644
--- a/DiscImageChef.DiscImages/BlindWrite5.cs
+++ b/DiscImageChef.DiscImages/BlindWrite5.cs
@@ -49,6 +49,7 @@ using DMI = DiscImageChef.Decoders.Xbox.DMI;
namespace DiscImageChef.DiscImages
{
+ // TODO: Too many unknowns to make this writable
public class BlindWrite5 : IMediaImage
{
/// "BWT5 STREAM FOOT"
@@ -443,7 +444,7 @@ namespace DiscImageChef.DiscImages
DicConsole.DebugWriteLine("BlindWrite5 plugin", "session[{0}].track[{1}].point = {2}", ses, tSeq,
session.Tracks[tSeq].point);
DicConsole.DebugWriteLine("BlindWrite5 plugin", "session[{0}].track[{1}].unknown4 = 0x{2:X2}", ses,
- tSeq, session.Tracks[tSeq].unknown4);
+ tSeq, session.Tracks[tSeq].tno);
DicConsole.DebugWriteLine("BlindWrite5 plugin", "session[{0}].track[{1}].min = {2}", ses, tSeq,
session.Tracks[tSeq].min);
DicConsole.DebugWriteLine("BlindWrite5 plugin", "session[{0}].track[{1}].sec = {2}", ses, tSeq,
@@ -1885,7 +1886,7 @@ namespace DiscImageChef.DiscImages
public byte ctl;
public byte adr;
public byte point;
- public byte unknown4;
+ public byte tno;
public byte min;
public byte sec;
public byte frame;
diff --git a/templates/BlindWrite5.bt b/templates/BlindWrite5.bt
new file mode 100644
index 00000000..533cedac
--- /dev/null
+++ b/templates/BlindWrite5.bt
@@ -0,0 +1,152 @@
+//------------------------------------------------
+//--- 010 Editor v8.0.1 Binary Template
+//
+// File: BlindWrite5.bt
+// Authors: Natalia Portillo
+// Version: 0.1
+// Purpose: BlindWrite 5 media descriptor.
+// Category: Misc
+// File Mask: *.b5t
+// ID Bytes: 42 57 54 35 20 53 54 52 45 41 4D 20 53 49 47 4E //BWT5 STREAM SIGN
+// History:
+// 0.1 2018-01-08 Natalia Portillo: Initial release
+//------------------------------------------------
+
+typedef struct
+{
+ uint type;
+ uint length;
+ uint unknown1[4];
+ uint offset;
+ uint unknown2[3];
+ int startLba;
+ int sectors;
+ uint filenameLen;
+ if(filenameLen > 0)
+ wchar_t filename[filenameLen/2];
+ uint unknown3;
+} BW5DataFile ;
+
+enum BW5TrackType
+{
+ NotData = 0,
+ Audio = 1,
+ Mode1 = 2,
+ Mode2 = 3,
+ Mode2F1 = 4,
+ Mode2F2 = 5,
+ Dvd = 6
+};
+
+enum BW5SubchannelType
+{
+ None = 0,
+ Q16 = 2,
+ Linear = 4
+};
+
+typedef struct
+{
+ BW5TrackType type;
+ uchar unknown1[3];
+ uint unknown2;
+ BW5SubchannelType subchannel;
+ byte unknown3;
+ byte CONTROL;
+ byte ADR;
+ byte POINT;
+ byte TNO;
+ byte AMIN;
+ byte ASEC;
+ byte AFRAME;
+ byte PHOUR : 4;
+ byte AHOUR : 4;
+ byte PMIN;
+ byte PSEC;
+ byte PFRAME;
+ byte unknown5;
+ uint pregap;
+ uint unknown6[4];
+ int startLba;
+ int sectors;
+ uint unknown7[2];
+ uint session;
+ ushort unknown8;
+ if(type != Dvd && type != NotData)
+ uint unknown9[2];
+} BW5TrackDescriptor ;
+
+typedef struct
+{
+ ushort sequence;
+ byte entries;
+ byte unknown;
+ int start;
+ int end;
+ ushort firstTrack;
+ ushort lastTrack;
+ if(entries > 0)
+ BW5TrackDescriptor tracks[entries];
+} BW5Session ;
+
+typedef struct
+{
+ char magic[16];
+ uint unknown1[8];
+ ushort profile;
+ ushort sessions;
+ uint unknown2[3];
+ byte validMcn;
+ char mcn[13];
+ ushort unknown3;
+ uint unknown4[4];
+ ushort pmaLen;
+ ushort atipLen;
+ ushort cdtextLen;
+ ushort cdinfoLen;
+ uint bcaLen;
+ uint unknown5[3];
+ uint dvdstructuresLen;
+ uint dvdinfoLen;
+ char unknown6[32];
+ char manufacturer[8];
+ char product[16];
+ char revision[4];
+ char vendor[20];
+ char volumeId[32];
+ uint mode2ALen;
+ uint unknownBlockLen;
+ uint dataLen;
+ uint sessionsLen;
+ uint dpmLen;
+ if(mode2ALen > 0)
+ uchar mode2A[mode2ALen];
+ if(unknownBlockLen > 0)
+ uchar unknownBlock[unknownBlockLen];
+ if(pmaLen > 0)
+ uchar pma[pmaLen];
+ if(atipLen > 0)
+ uchar atip[atipLen];
+ if(cdtextLen > 0)
+ uchar cdtext[cdtextLen];
+ if(bcaLen > 0)
+ uchar bca[bcaLen];
+ if(dvdstructuresLen > 0)
+ uchar dvdstructures[dvdstructuresLen];
+ if(dvdinfoLen > 0)
+ uchar dvdinformation[dvdinfoLen];
+ else if(cdinfoLen > 0)
+ uchar cdinformation[dvdinfoLen];
+ uint dataBlockCount;
+ uint dataPathLen;
+ wchar_t dataPath[dataPathLen/2];
+ BW5DataFile dataBlocks[dataBlockCount];
+ BW5Session session[sessions];
+ if(dpmLen > 0)
+ uchar dpm[dpmLen];
+ uint unknown7;
+ char footer[16];
+} BW5Header ;
+
+LittleEndian();
+BW5Header header;