Dunno, if to call it a bug or not, but if you dump some game with < 10 tracks (you get tracks with the names like "(Track 1).bin"), then some game with > 10 tracks (you get tracks with the names like "(Track 01).bin" without deleting the previous dump .bin files, you get the datfile with all the tracks from both dumps.

20170417 test
-changed: Disabled Streaming SIMD Extensions (SSE) for old CPU
-fixed: output unnecessary hash

978 (edited by Jackal 2017-04-16 19:31:21)

Hi,

is it possible to make DiscImageCreator Wine-compatible, or even make a native Linux binary? I don't know how much of the code is Windows-specific.

Not for me, but on some other forums people mentioned that they couldn't get it to work with Wine, so just wondering.

979 (edited by sarami 2017-04-22 18:07:09)

Jackal wrote:

is it possible to make DiscImageCreator Wine-compatible, or even make a native Linux binary? I don't know how much of the code is Windows-specific.

https://github.com/saramibreak/DiscImag … r/issues/2
At least, need to rewrite WinAPI, XmlLite, WinDDK. About Wine, I don't know detail.
This site may be very useful about WinDDK. https://www.ibm.com/developerworks/libr … migration/

Hey, I'm running into a weird issue with the newest version of DIC as described here. Here is a link to the DIC log files and info from the rip: https://mega.nz/#F!YE1XWawY!B10c28Ug_3-LEPCa89xPiQ If necessary, I will upload both versions of the rip to the same folder.

Thanks in advance.

_subError.txt

LBA[151330, 0x24f22]: Track[01]: SubQ[13]:TrackNum[00] L:[509] -> [01], L:[1285]
LBA[151330, 0x24f22]: Track[01]: SubQ[14]:Idx[00] -> [01], L:[509]
LBA[151330, 0x24f22]: Track[01]: SubQ[15-17]:PrevRel[151329, 33:37:54], Rel[125040, 25:165:165] -> [151330, 33:37:55], L:[509]
LBA[151330, 0x24f22]: Track[01]: SubQ[18]:[0xff] -> [0x00]
LBA[151330, 0x24f22]: Track[01]: SubQ[19-21]:PrevAbs[151479, 33:39:54], Abs[755040, 165:165:165] -> [151480, 33:39:55]
LBA[151330, 0x24f22]: Track[01]: SubQ[12]:Ctl[0] -> [4], L:[357]
LBA[151330, 0x24f22]: Track[01]: SubQ[22]:CrcHigh[0xff] -> [0x37]
LBA[151330, 0x24f22]: Track[01]: SubQ[23]:CrcLow[0xff] -> [0x5f]
 :
LBA[151331, 0x24f23]: Track[01]: SubQ[13]:TrackNum[00] L:[509] -> [01], L:[1285]
LBA[151331, 0x24f23]: Track[01]: SubQ[14]:Idx[00] -> [01], L:[509]
LBA[151331, 0x24f23]: Track[01]: SubQ[15-17]:PrevRel[151330, 33:37:55], Rel[125040, 25:165:165] -> [151331, 33:37:56], L:[509]
LBA[151331, 0x24f23]: Track[01]: SubQ[18]:[0xff] -> [0x00]
LBA[151331, 0x24f23]: Track[01]: SubQ[19-21]:PrevAbs[151480, 33:39:55], Abs[755040, 165:165:165] -> [151481, 33:39:56]
LBA[151331, 0x24f23]: Track[01]: SubQ[12]:Ctl[0] -> [4], L:[357]
LBA[151331, 0x24f23]: Track[01]: SubQ[22]:CrcHigh[0xff] -> [0xe9]
LBA[151331, 0x24f23]: Track[01]: SubQ[23]:CrcLow[0xff] -> [0xee]
 :
LBA[151333, 0x24f25]: Track[01]: SubQ[13]:TrackNum[02] L:[606] -> [01], L:[1285]
LBA[151333, 0x24f25]: Track[01]: SubQ[14]:Idx[02] -> [01], L:[606]
LBA[151333, 0x24f25]: Track[01]: SubQ[15-17]:PrevRel[151332, 33:37:57], Rel[302664, 66:74:114] -> [151333, 33:37:58], L:[606]
LBA[151333, 0x24f25]: Track[01]: SubQ[19-21]:PrevAbs[151482, 33:39:57], Abs[302514, 66:72:114] -> [151483, 33:39:58]
LBA[151333, 0x24f25]: Track[01]: SubQ[12]:Ctl[0] -> [4], L:[357]
LBA[151333, 0x24f25]: Track[01]: SubQ[22]:CrcHigh[0xa7] -> [0xc7]
LBA[151333, 0x24f25]: Track[01]: SubQ[23]:CrcLow[0x3c] -> [0x88]
 :
LBA[151334, 0x24f26]: Track[01]: SubQ[13]:TrackNum[02] L:[597] -> [01], L:[1285]
LBA[151334, 0x24f26]: Track[01]: SubQ[14]:Idx[02] -> [01], L:[597]
LBA[151334, 0x24f26]: Track[01]: SubQ[15-17]:PrevRel[151333, 33:37:58], Rel[302660, 66:74:110] -> [151334, 33:37:59], L:[597]
LBA[151334, 0x24f26]: Track[01]: SubQ[19-21]:PrevAbs[151483, 33:39:58], Abs[302441, 66:72:41] -> [151484, 33:39:59]
LBA[151334, 0x24f26]: Track[01]: SubQ[12]:Ctl[8] -> [4], L:[343]
LBA[151334, 0x24f26]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0x7d]
LBA[151334, 0x24f26]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0xf8]
LBA[151335, 0x24f27]: Track[01]: SubQ[13]:TrackNum[37] L:[488] -> [01], L:[1285]
LBA[151335, 0x24f27]: Track[01]: SubQ[14]:Idx[59] -> [01], L:[399]
LBA[151335, 0x24f27]: Track[01]: SubQ[15-17]:PrevRel[151334, 33:37:59], Rel[2514, 00:33:39] -> [151335, 33:37:60], L:[668]
LBA[151335, 0x24f27]: Track[01]: SubQ[18]:[0x59] -> [0x00]
LBA[151335, 0x24f27]: Track[01]: SubQ[19-21]:PrevAbs[151484, 33:39:59], Abs[385391, 83:158:41] -> [151485, 33:39:60]
LBA[151335, 0x24f27]: Track[01]: SubQ[12]:Ctl[3] -> [4], L:[343]
LBA[151335, 0x24f27]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0x7e]
LBA[151335, 0x24f27]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0x10]
LBA[151336, 0x24f28]: Track[01]: SubQ[13]:TrackNum[37] L:[488] -> [01], L:[1285]
LBA[151336, 0x24f28]: Track[01]: SubQ[14]:Idx[60] -> [01], L:[399]
LBA[151336, 0x24f28]: Track[01]: SubQ[15-17]:PrevRel[151335, 33:37:60], Rel[2514, 00:33:39] -> [151336, 33:37:61], L:[668]
LBA[151336, 0x24f28]: Track[01]: SubQ[18]:[0x60] -> [0x00]
LBA[151336, 0x24f28]: Track[01]: SubQ[19-21]:PrevAbs[151485, 33:39:60], Abs[378791, 84:10:41] -> [151486, 33:39:61]
LBA[151336, 0x24f28]: Track[01]: SubQ[12]:Ctl[3] -> [4], L:[343]
LBA[151336, 0x24f28]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0xc4]
LBA[151336, 0x24f28]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0x60]
LBA[151337, 0x24f29]: Track[01]: SubQ[13]:TrackNum[37] L:[488] -> [01], L:[1285]
LBA[151337, 0x24f29]: Track[01]: SubQ[14]:Idx[61] -> [01], L:[399]
LBA[151337, 0x24f29]: Track[01]: SubQ[15-17]:PrevRel[151336, 33:37:61], Rel[2514, 00:33:39] -> [151337, 33:37:62], L:[668]
LBA[151337, 0x24f29]: Track[01]: SubQ[18]:[0x61] -> [0x00]
LBA[151337, 0x24f29]: Track[01]: SubQ[19-21]:PrevAbs[151486, 33:39:61], Abs[562541, 124:60:41] -> [151487, 33:39:62]
LBA[151337, 0x24f29]: Track[01]: SubQ[12]:Ctl[3] -> [4], L:[343]
LBA[151337, 0x24f29]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0x1a]
LBA[151337, 0x24f29]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0xd1]
LBA[151338, 0x24f2a]: Track[01]: SubQ[13]:TrackNum[37] L:[488] -> [01], L:[1285]
LBA[151338, 0x24f2a]: Track[01]: SubQ[14]:Idx[62] -> [01], L:[399]
LBA[151338, 0x24f2a]: Track[01]: SubQ[15-17]:PrevRel[151337, 33:37:62], Rel[2514, 00:33:39] -> [151338, 33:37:63], L:[668]
LBA[151338, 0x24f2a]: Track[01]: SubQ[18]:[0x62] -> [0x00]
LBA[151338, 0x24f2a]: Track[01]: SubQ[19-21]:PrevAbs[151487, 33:39:62], Abs[99866, 20:131:41] -> [151488, 33:39:63]
LBA[151338, 0x24f2a]: Track[01]: SubQ[12]:Ctl[3] -> [4], L:[343]
LBA[151338, 0x24f2a]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0xa0]
LBA[151338, 0x24f2a]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0xa1]
LBA[151339, 0x24f2b]: Track[01]: SubQ[13]:TrackNum[37] L:[488] -> [01], L:[1285]
LBA[151339, 0x24f2b]: Track[01]: SubQ[14]:Idx[63] -> [01], L:[399]
LBA[151339, 0x24f2b]: Track[01]: SubQ[15-17]:PrevRel[151338, 33:37:63], Rel[2514, 00:33:39] -> [151339, 33:37:64], L:[668]
LBA[151339, 0x24f2b]: Track[01]: SubQ[18]:[0x63] -> [0x00]
LBA[151339, 0x24f2b]: Track[01]: SubQ[19-21]:PrevAbs[151488, 33:39:63], Abs[457616, 100:101:41] -> [151489, 33:39:64]
LBA[151339, 0x24f2b]: Track[01]: SubQ[12]:Ctl[3] -> [4], L:[343]
LBA[151339, 0x24f2b]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0xb7]
LBA[151339, 0x24f2b]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0x92]
LBA[151340, 0x24f2c]: Track[01]: SubQ[13]:TrackNum[37] L:[488] -> [01], L:[1285]
LBA[151340, 0x24f2c]: Track[01]: SubQ[14]:Idx[64] -> [01], L:[399]
LBA[151340, 0x24f2c]: Track[01]: SubQ[15-17]:PrevRel[151339, 33:37:64], Rel[2514, 00:33:39] -> [151340, 33:37:65], L:[668]
LBA[151340, 0x24f2c]: Track[01]: SubQ[18]:[0x64] -> [0x00]
LBA[151340, 0x24f2c]: Track[01]: SubQ[19-21]:PrevAbs[151489, 33:39:64], Abs[533441, 117:92:41] -> [151490, 33:39:65]
LBA[151340, 0x24f2c]: Track[01]: SubQ[12]:Ctl[3] -> [4], L:[343]
LBA[151340, 0x24f2c]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0x0d]
LBA[151340, 0x24f2c]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0xe2]
LBA[151341, 0x24f2d]: Track[01]: SubQ[13]:TrackNum[37] L:[488] -> [01], L:[1285]
LBA[151341, 0x24f2d]: Track[01]: SubQ[14]:Idx[65] -> [01], L:[399]
LBA[151341, 0x24f2d]: Track[01]: SubQ[15-17]:PrevRel[151340, 33:37:65], Rel[2514, 00:33:39] -> [151341, 33:37:66], L:[668]
LBA[151341, 0x24f2d]: Track[01]: SubQ[18]:[0x65] -> [0x00]
LBA[151341, 0x24f2d]: Track[01]: SubQ[19-21]:PrevAbs[151490, 33:39:65], Abs[69191, 13:142:41] -> [151491, 33:39:66]
LBA[151341, 0x24f2d]: Track[01]: SubQ[12]:Ctl[3] -> [4], L:[343]
LBA[151341, 0x24f2d]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0xd3]
LBA[151341, 0x24f2d]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0x53]
LBA[151342, 0x24f2e]: Track[01]: SubQ[13]:TrackNum[37] L:[488] -> [01], L:[1285]
LBA[151342, 0x24f2e]: Track[01]: SubQ[14]:Idx[66] -> [01], L:[399]
LBA[151342, 0x24f2e]: Track[01]: SubQ[15-17]:PrevRel[151341, 33:37:66], Rel[2514, 00:33:39] -> [151342, 33:37:67], L:[668]
LBA[151342, 0x24f2e]: Track[01]: SubQ[18]:[0x66] -> [0x00]
LBA[151342, 0x24f2e]: Track[01]: SubQ[19-21]:PrevAbs[151491, 33:39:66], Abs[602516, 133:53:41] -> [151492, 33:39:67]
LBA[151342, 0x24f2e]: Track[01]: SubQ[12]:Ctl[3] -> [4], L:[343]
LBA[151342, 0x24f2e]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0x69]
LBA[151342, 0x24f2e]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0x23]
LBA[151343, 0x24f2f]: Track[01]: SubQ[13]:TrackNum[37] L:[488] -> [01], L:[1285]
LBA[151343, 0x24f2f]: Track[01]: SubQ[14]:Idx[67] -> [01], L:[399]
LBA[151343, 0x24f2f]: Track[01]: SubQ[15-17]:PrevRel[151342, 33:37:67], Rel[2514, 00:33:39] -> [151343, 33:37:68], L:[668]
LBA[151343, 0x24f2f]: Track[01]: SubQ[18]:[0x67] -> [0x00]
LBA[151343, 0x24f2f]: Track[01]: SubQ[19-21]:PrevAbs[151492, 33:39:67], Abs[312266, 69:23:41] -> [151493, 33:39:68]
LBA[151343, 0x24f2f]: Track[01]: SubQ[12]:Ctl[3] -> [4], L:[343]
LBA[151343, 0x24f2f]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0xfd]
LBA[151343, 0x24f2f]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0x35]
LBA[151344, 0x24f30]: Track[01]: SubQ[13]:TrackNum[37] L:[488] -> [01], L:[1285]
LBA[151344, 0x24f30]: Track[01]: SubQ[14]:Idx[68] -> [01], L:[399]
LBA[151344, 0x24f30]: Track[01]: SubQ[15-17]:PrevRel[151343, 33:37:68], Rel[2514, 00:33:39] -> [151344, 33:37:69], L:[668]
LBA[151344, 0x24f30]: Track[01]: SubQ[18]:[0x68] -> [0x00]
LBA[151344, 0x24f30]: Track[01]: SubQ[19-21]:PrevAbs[151493, 33:39:68], Abs[736166, 163:35:41] -> [151494, 33:39:69]
LBA[151344, 0x24f30]: Track[01]: SubQ[12]:Ctl[3] -> [4], L:[343]
LBA[151344, 0x24f30]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0x47]
LBA[151344, 0x24f30]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0x45]
LBA[151345, 0x24f31]: Track[01]: SubQ[13]:TrackNum[37] L:[488] -> [01], L:[1285]
LBA[151345, 0x24f31]: Track[01]: SubQ[14]:Idx[69] -> [01], L:[399]
LBA[151345, 0x24f31]: Track[01]: SubQ[15-17]:PrevRel[151344, 33:37:69], Rel[2514, 00:33:39] -> [151345, 33:37:70], L:[668]
LBA[151345, 0x24f31]: Track[01]: SubQ[18]:[0x69] -> [0x00]
LBA[151345, 0x24f31]: Track[01]: SubQ[19-21]:PrevAbs[151494, 33:39:69], Abs[214916, 47:45:41] -> [151495, 33:39:70]
LBA[151345, 0x24f31]: Track[01]: SubQ[12]:Ctl[3] -> [4], L:[343]
LBA[151345, 0x24f31]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0x68]
LBA[151345, 0x24f31]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0x7b]
LBA[151346, 0x24f32]: Track[01]: SubQ[13]:TrackNum[37] L:[488] -> [01], L:[1285]
LBA[151346, 0x24f32]: Track[01]: SubQ[14]:Idx[70] -> [01], L:[399]
LBA[151346, 0x24f32]: Track[01]: SubQ[15-17]:PrevRel[151345, 33:37:70], Rel[2514, 00:33:39] -> [151346, 33:37:71], L:[668]
LBA[151346, 0x24f32]: Track[01]: SubQ[18]:[0x70] -> [0x00]
LBA[151346, 0x24f32]: Track[01]: SubQ[19-21]:PrevAbs[151495, 33:39:70], Abs[312116, 68:81:41] -> [151496, 33:39:71]
LBA[151346, 0x24f32]: Track[01]: SubQ[12]:Ctl[3] -> [4], L:[343]
LBA[151346, 0x24f32]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0xd2]
LBA[151346, 0x24f32]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0x0b]
LBA[151347, 0x24f33]: Track[01]: SubQ[13]:TrackNum[37] L:[488] -> [01], L:[1285]
LBA[151347, 0x24f33]: Track[01]: SubQ[14]:Idx[71] -> [01], L:[399]
LBA[151347, 0x24f33]: Track[01]: SubQ[15-17]:PrevRel[151346, 33:37:71], Rel[2514, 00:33:39] -> [151347, 33:37:72], L:[668]
LBA[151347, 0x24f33]: Track[01]: SubQ[18]:[0x71] -> [0x00]
LBA[151347, 0x24f33]: Track[01]: SubQ[19-21]:PrevAbs[151496, 33:39:71], Abs[594866, 132:11:41] -> [151497, 33:39:72]
LBA[151347, 0x24f33]: Track[01]: SubQ[12]:Ctl[3] -> [4], L:[343]
LBA[151347, 0x24f33]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0x0c]
LBA[151347, 0x24f33]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0xba]
LBA[151347, 0x24f33]: Track[01]: SubR[26]:[0x01] -> [0x00]
LBA[151348, 0x24f34]: Track[01]: SubP[08]:[0x80] -> [0x00]
LBA[151348, 0x24f34]: Track[01]: SubQ[13]:TrackNum[37] L:[488] -> [01], L:[1285]
LBA[151348, 0x24f34]: Track[01]: SubQ[14]:Idx[72] -> [01], L:[399]
LBA[151348, 0x24f34]: Track[01]: SubQ[15-17]:PrevRel[151347, 33:37:72], Rel[2514, 00:33:39] -> [151348, 33:37:73], L:[668]
LBA[151348, 0x24f34]: Track[01]: SubQ[18]:[0x72] -> [0x00]
LBA[151348, 0x24f34]: Track[01]: SubQ[19-21]:PrevAbs[151497, 33:39:72], Abs[3041, 00:40:41] -> [151498, 33:39:73]
LBA[151348, 0x24f34]: Track[01]: SubQ[12]:Ctl[3] -> [4], L:[343]
LBA[151348, 0x24f34]: Track[01]: SubQ[22]:CrcHigh[0x01] -> [0xb6]
LBA[151348, 0x24f34]: Track[01]: SubQ[23]:CrcLow[0x01] -> [0xca]
 :

Apparently, it haven't been able to get the sub correctly.

darksabre76 wrote:

The disc is completely scratch-free

Please try to to use /s 2 option or change the reading speed or change the drive.

Adding the /s 2 option seems to have fixed any errors that arose. I will keep that in mind in the future. Thanks!

983 (edited by reentrant 2017-04-24 19:25:29)

I noticed one issue with DIC and data command. For example when I dump a block of sectors from sector A to B, A != 0 and if a read error sector occurs (/rc is on) DIC incorectly inserts MSF field of header. It looks like DIC inserts MSF field based on number of sectors read but it should insert MSF based on absolute sector position inside CD...

Also EccEdc lacks one of check that CDmage has. It doesn't verify sector MSF. For example I overwritten contents of sector 1 with contents of sector 0 and EccEdc didn't report anything. CDmage reported 1 error. This check is useful in case of protectors like RingProtech where drive might fail to sync at correct sector and it will read different one instead. Happened to my only once so far...

984 (edited by sarami 2017-04-26 04:13:39)

reentrant wrote:

I noticed one issue with DIC and data command. For example when I dump a block of sectors from sector A to B, A != 0 and if a read error sector occurs (/rc is on) DIC incorectly inserts MSF field of header. It looks like DIC inserts MSF field based on number of sectors read but it should insert MSF based on absolute sector position inside CD...

The argument checking function didn't work properly in test version. Fixed.

reentrant wrote:

Also EccEdc lacks one of check that CDmage has. It doesn't verify sector MSF. For example I overwritten contents of sector 1 with contents of sector 0 and EccEdc didn't report anything. CDmage reported 1 error. This check is useful in case of protectors like RingProtech where drive might fail to sync at correct sector and it will read different one instead. Happened to my only once so far...

Neill Corlett, he coded the Checking ECC and Compuing EDC, probably didn't expect this. So, edccchk that uses same code is also probably exists same problem (but I haven't confirmed it). I examine coding.

985 (edited by reentrant 2017-04-28 18:21:10)

SectorType EDC::detectSector(ULONG lsn, PUCHAR sector, SIZE_T sectorSize, SectorType & sectorType, BOOL & isEdcAndMsfValid) {
    isEdcAndMsfValid = FALSE;

    if (sectorSize == CDIO_CD_FRAMESIZE_RAW) {
        if (sector[0x000] == 0x00 && sector[0x001] == 0xFF && sector[0x002] == 0xFF && sector[0x003] == 0xFF &&
            sector[0x004] == 0xFF && sector[0x005] == 0xFF && sector[0x006] == 0xFF && sector[0x007] == 0xFF &&
            sector[0x008] == 0xFF && sector[0x009] == 0xFF && sector[0x00A] == 0xFF && sector[0x00B] == 0x00) { // Sync (12 bytes)

            MSFAddress referenceMsf = MSFAddress(lsn) + CDIO_PREGAP_SECTORS;
            MSFAddress sectorMsf;

            BOOL isMValid = StringUtils::asciiByteToUchar(sector[0x00C], sectorMsf.iMinute);
            BOOL isSValid = StringUtils::asciiByteToUchar(sector[0x00D], sectorMsf.iSecond);
            BOOL isFValid = StringUtils::asciiByteToUchar(sector[0x00E], sectorMsf.iFrame);
            
            if(!isMValid || !isSValid || !isFValid || referenceMsf != sectorMsf)
                return SectorTypeBadMsf;

            if (sector[0x00F] == 0x01) { // Mode (1 byte)
                if (sector[0x814] == 0x00 && sector[0x815] == 0x00 && sector[0x816] == 0x00 && sector[0x817] == 0x00 &&
                    sector[0x818] == 0x00 && sector[0x819] == 0x00 && sector[0x81A] == 0x00 && sector[0x81B] == 0x00) { // Reserved (8 bytes)
                    if (isEdcAndMsfValid = edcCompute(0, sector, 0x810) == get32Lsb(sector + 0x810)) {
                        sectorType = SectorTypeMode1;
                    }

                    if (isEdcAndMsfValid && eccCheckSector(sector + 0xC, sector + 0x10, sector + 0x81C)) {
                        return SectorTypeMode1; // Mode 1
                    } else {
                        return SectorTypeMode1BadEcc; // Mode 1 (Safedisc etc)
                    }
                } else {
                    if (isEdcAndMsfValid = edcCompute(0, sector, 0x810) == get32Lsb(sector + 0x810)) {
                        sectorType = SectorTypeMode1;
                    }

                    if (isEdcAndMsfValid && eccCheckSector(sector + 0xC, sector + 0x10, sector + 0x81C)) {
                        return SectorTypeMode1ReservedNotZero; // Mode 1 (Reserved not zero)
                    } else {
                        return SectorTypeMode1BadEcc; // Mode 1 (Safedisc etc)
                    }
                }
            } else if (sector[0x0F] == 0x02) { // Mode (1 byte)
                if (sector[0x10] == sector[0x14] && sector[0x11] == sector[0x15] && sector[0x12] == sector[0x16] && sector[0x13] == sector[0x17]) { // Flags (4 bytes)
                    if (isEdcAndMsfValid = edcCompute(0, sector + 0x10, 0x808) == get32Lsb(sector + 0x10 + 0x808)) {
                        sectorType = SectorTypeMode2Form1;
                    }

                    if (isEdcAndMsfValid && eccCheckSector(zeroAddress, sector + 0x10, sector + 0x10 + 0x80C)) {
                        return SectorTypeMode2Form1; // Mode 2 Form 1
                    }
                    
                    if (isEdcAndMsfValid = edcCompute(0, sector + 0x10, 0x91C) == get32Lsb(sector + 0x10 + 0x91C)) {
                        sectorType = SectorTypeMode2Form2;

                        return SectorTypeMode2Form2; // Mode 2 Form 2
                    } else {
                        isEdcAndMsfValid = TRUE;
                        sectorType = SectorTypeMode2;

                        return SectorTypeMode2; // Mode 2
                    }
                } else {
                    return SectorTypeMode2FlagsNotSame; // Mode 2 (Invalid flags)
                }
            }

            return SectorTypeUnknownMode;
        } else if (sector[0x000] || sector[0x001] || sector[0x002] || sector[0x003] ||
            sector[0x004] || sector[0x005] || sector[0x006] || sector[0x007] ||
            sector[0x008] || sector[0x009] || sector[0x00A] || sector[0x00B] ||
            sector[0x00C] || sector[0x00D] || sector[0x00E] || sector[0x00F]) { // Fix for invalid scrambled sector in data track
            return SectorTypeNonZeroInvalidSync;
        } else {
            return SectorTypeZeroSync;
        }
    }

    return SectorTypeNothing;
}

This is my function to check for proper sector's MSF + checks if EDC is correct...

986 (edited by sarami 2017-05-07 13:46:54)

Uploaded 20170507 https://github.com/saramibreak/DiscImag … r/releases
- added: /np /nq option
- changed: Option name /g -> /nr, /l -> /nl, /se -> /ns
- changed: Some log message
- changed: Disabled SSE2 of vcxproj (for old cpu)
- changed: MaximumTransferLength is limited to 64KB (can't read 128KB)
- improved: Checking argument (check command-length)
- improved: Subchannel ripping of SecuROM
- fixed: Reading DirectoryRecord
- fixed: Output unnecessary hash

http://forum.redump.org/post/54643/#p54643
I'll try slowly. I installed Visual Studio 2017 and VirtualBox, Vagrant (box with bento/ubuntu-16.04) in host PC, and installed gdb and gdbserver, g++ in guest PC.

Getting an error:

d:\REDUMP\PTGVOL3 - Dark Project - Der Meisterdieb>DiscImageCreator.exe cd e: Track 4 /c2 10
OS
        Windows 7 Professional Service Pack 1 64bit
AppVersion
        x86, AnsiBuild, May  7 2017 21:11:00
/c2 val2 is omitted. set [4096]
/c2 val3 is omitted. set [4]
CurrentDirectory
        d:\REDUMP\PTGVOL3 - Dark Project - Der Meisterdieb
WorkingPath
         Argument: Track
         FullPath: d:\REDUMP\PTGVOL3 - Dark Project - Der Meisterdieb\Track
            Drive: d:
        Directory: \REDUMP\PTGVOL3 - Dark Project - Der Meisterdieb\
         Filename: Track
        Extension:
Start time: 2017-05-07(Sun) 19:12:58
Set the drive speed: 705KB/sec
Allocating packed memory for C2 errors: 8192
This drive supports [Opcode: 0xd8, SubCh: 0]
This drive supports [Opcode: 0xd8, SubCh: 1]
This drive supports [Opcode: 0xd8, SubCh: 2]
This drive supports [Opcode: 0xd8, SubCh: 3]
This drive supports [Opcode: 0xd8, SubCh: 8]
Checking reading lead-out -> OK
Checking SubQ adr (Track)  4/ 4
Checking SubRtoW (Track)  4/ 4
Reading DirectoryRecord   15/  15

Reading DirectoryRecord   15/  15

Set opcode: 0xd8, subcode: 08(Raw)
Checking SubQ ctl (Track)  4/ 4
Created img (LBA) 342905/342904
[L:2306] Internal error. Failed to analyze the subchannel. Track[01]/[04]
Freeing allocated memory for C2 errors: 8192
End time: 2017-05-07(Sun) 19:32:16

Logs: https://www.mediafire.com/?liuxjq5ilr86hbh

988 (edited by Jackal 2017-05-07 18:42:25)

sarami wrote:

Uploaded 20170507 https://github.com/saramibreak/DiscImag … r/releases
- added: /np /nq option
- changed: Option name /g -> /nr, /l -> /nl, /se -> /ns
- changed: Some log message
- changed: Disabled SSE2 of vcxproj (for old cpu)
- changed: MaximumTransferLength is limited to 64KB (can't read 128KB)
- improved: Checking argument (check command-length)
- improved: Subchannel ripping of SecuROM
- fixed: Reading DirectoryRecord
- fixed: Output unnecessary hash

http://forum.redump.org/post/54643/#p54643
I'll try slowly. I installed Visual Studio 2017 and VirtualBox, Vagrant (box with bento/ubuntu-16.04) in host PC, and installed gdb and gdbserver, g++ in guest PC.

cool thanks for all your hard work.. I don't know where we would be without DIC

Thanks for the update sarami.

BTW can you modify the *_volDesc.txt log so that it also has the Primary Volume Descriptor (PVD) in the format that the "New Disc" form requires?

990 (edited by reentrant 2017-05-08 18:16:34)

I have a small idea related to dumping protected discs with Plextors. We all know when it comes to dumping LaserLock or RingProtech Plextors are not the best choice. Other drives perform better in this field. How about specifying in command line sector ranges that should be failed (replaced with 0x55). It would greatly improve dumping speed. Missing data can later be patched-in to the image (patching is always necessary in case of Plextors).

RingProtech requires one sector range
LaserLock requires 12 sector ranges

Maybe comma delimited argument is good enough like: /fl 100-200,300-400

What do you think?

usurper wrote:

Getting an error:

Similar error http://forum.redump.org/post/54685/#p54685

ssjkakaroto wrote:

BTW can you modify the *_volDesc.txt log so that it also has the Primary Volume Descriptor (PVD) in the format that the "New Disc" form requires?

Adopted IsoBuster sector.
http://www.mediafire.com/file/eq80y20l9 … or_test.7z
See *_mainInfo.txt

reentrant wrote:

I have a small idea related to dumping protected discs with Plextors.

That is to say, is this the skipping error like a clonecd and alcohol? I think good.

Yes, but I know in advance which sectors are bad and ideally the drive shouldn't touch such sectors at all to speed up the process as much as possible...

sarami wrote:

Adopted IsoBuster sector.
http://www.mediafire.com/file/eq80y20l9 … or_test.7z
See *_mainInfo.txt

Thanks a lot sarami!

I noticed that if you have a filename with a dot, DIC will truncate it at the dot, for example "Game name (v1.2)" becomes "Game name (v1".
Is there a way to escape characters? I tried using a backslash before the dot but it just created a new directory.

ssjkakaroto wrote:

I noticed that if you have a filename with a dot, DIC will truncate it at the dot, for example "Game name (v1.2)" becomes "Game name (v1".
Is there a way to escape characters? I tried using a backslash before the dot but it just created a new directory.

Please see http://forum.redump.org/post/42430/#p42430 or KnownIssue.txt

995 (edited by reentrant 2017-05-11 20:02:33)

Nvm. Everything ok wink

996 (edited by usurper 2017-05-13 12:47:02)

sarami wrote:
usurper wrote:

Getting an error:

Similar error http://forum.redump.org/post/54685/#p54685

It doesn't work. Disc is in mint condition, no scratches. Tried different Plextor drive, lower speed and also /s 2 switch. Nothing worked.

Uploaded subs here - done with Perfectrip, since CDTool also crashed: https://www.mediafire.com/?rt35252ebl9ezry

Could you please have a look and try to get this fixed?

Sector 287612 ~ 304903 is abnormal. Protection?

998 (edited by usurper 2017-05-13 16:04:25)

Not sure. Protection ID doesnt show anything.

EDIT: Gamecopeworld states: Illegal TOC http://gamecopyworld.eu/games/pc_thief.shtml
However, this is a Re-release from the "Play the Games vol.3" collection. I do not know if the copy protection of the original release still included and activated.

Shouldn't DIC detect CD-Rs as CD-Rs (by ATIP), not as "DiscType: CD-DA or CD-ROM Disc"?

1,000

F1ReB4LL wrote:

Shouldn't DIC detect CD-Rs as CD-Rs (by ATIP), not as "DiscType: CD-DA or CD-ROM Disc"?

The disc type can be obtained by READ_DISC_INFORMATION (0x51), and this command can only detect CDDA (included CD-ROM), CD-I, CD-ROM XA.
scsi.h

#define DISK_TYPE_CDDA          0x00
#define DISK_TYPE_CDI           0x10
#define DISK_TYPE_XA            0x20
#define DISK_TYPE_UNDEFINED     0xFF

About CD-R, I haven't considered it. I'll examine it.

usurper wrote:

try to get this fixed?

It's difficult now, for it can't get the subchannel exactly.