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;