Add BlindWrite 5 template and document why cannot make this format writable.

This commit is contained in:
2018-01-08 21:16:22 +00:00
parent d93617544d
commit 87e4742890
2 changed files with 155 additions and 2 deletions

View File

@@ -49,6 +49,7 @@ using DMI = DiscImageChef.Decoders.Xbox.DMI;
namespace DiscImageChef.DiscImages namespace DiscImageChef.DiscImages
{ {
// TODO: Too many unknowns to make this writable
public class BlindWrite5 : IMediaImage public class BlindWrite5 : IMediaImage
{ {
/// <summary>"BWT5 STREAM FOOT"</summary> /// <summary>"BWT5 STREAM FOOT"</summary>
@@ -443,7 +444,7 @@ namespace DiscImageChef.DiscImages
DicConsole.DebugWriteLine("BlindWrite5 plugin", "session[{0}].track[{1}].point = {2}", ses, tSeq, DicConsole.DebugWriteLine("BlindWrite5 plugin", "session[{0}].track[{1}].point = {2}", ses, tSeq,
session.Tracks[tSeq].point); session.Tracks[tSeq].point);
DicConsole.DebugWriteLine("BlindWrite5 plugin", "session[{0}].track[{1}].unknown4 = 0x{2:X2}", ses, 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, DicConsole.DebugWriteLine("BlindWrite5 plugin", "session[{0}].track[{1}].min = {2}", ses, tSeq,
session.Tracks[tSeq].min); session.Tracks[tSeq].min);
DicConsole.DebugWriteLine("BlindWrite5 plugin", "session[{0}].track[{1}].sec = {2}", ses, tSeq, DicConsole.DebugWriteLine("BlindWrite5 plugin", "session[{0}].track[{1}].sec = {2}", ses, tSeq,
@@ -1885,7 +1886,7 @@ namespace DiscImageChef.DiscImages
public byte ctl; public byte ctl;
public byte adr; public byte adr;
public byte point; public byte point;
public byte unknown4; public byte tno;
public byte min; public byte min;
public byte sec; public byte sec;
public byte frame; public byte frame;

152
templates/BlindWrite5.bt Normal file
View File

@@ -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 <optimize=false>;
enum <byte> BW5TrackType
{
NotData = 0,
Audio = 1,
Mode1 = 2,
Mode2 = 3,
Mode2F1 = 4,
Mode2F2 = 5,
Dvd = 6
};
enum <byte> 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 <optimize=false>;
typedef struct
{
ushort sequence;
byte entries;
byte unknown;
int start;
int end;
ushort firstTrack;
ushort lastTrack;
if(entries > 0)
BW5TrackDescriptor tracks[entries];
} BW5Session <optimize=false>;
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 <optimize=false>;
LittleEndian();
BW5Header header;