126

(3,497 replies, posted in General discussion)

What is SecuROM 99?

127

(3,497 replies, posted in General discussion)

Interesting smile I always thought that /ns option should produce identical dumps...

128

(5 replies, posted in General discussion)

None of the CUEs are correct. There's a malicious index injected (next index is smaller than previous index) in the middle of the track.

CUE: That format can't handle such things: https://web.archive.org/web/20160201021 … et/syntax/

CCD: CloneCD dumps always contain the .SUB file, .CCD file contains only the TOC, the index stuff is inside the .SUB: http://forum.redump.org/topic/12357/cdr … fications/
CDD should be able to handle such discs because Index data is inside subs.

MDS: The same as CCD.

Summary: Bins are correct and should be preserved. The problem is with CUEs. I'd ignore them for a moment and archive the subs or post relevant info in the comments...

Also Plextor is advised for such discs (I am not sure how normal drives behave when they read such weird discs)...

129

(3,497 replies, posted in General discussion)

sarami wrote:
reentrant wrote:

In some cases it's really needed to skip specific range because it errors out on one of my drives

Protect disc?

Scratched disc wink

130

(3,497 replies, posted in General discussion)

Sarami, could you implement simple inferface for stuff like this:

        ULONG start = 35000;
        ULONG end = 45000;

        while (nFirstLBA < nLastLBA) {
            BOOL bProcessRet = FALSE;

            if(nLBA >= start && nLBA <= end) {
                bProcessRet = TRUE;
            } else {
                bProcessRet = ProcessReadCD(pExecType, pExtArg, pDevice, pDisc, pDiscPerSector, lpCmd, nLBA);
            }

In some cases it's really needed to skip specific range because it errors out on one of my drives. Could you add some command line switch for this?

131

(3,497 replies, posted in General discussion)

I'm having troubles with data command in latest git version. DIC seems to get stuck at the very beginning.

Is it possible to introduce another reading mode in which I supply disc offset and drive offset and DIC behaves as in cd mode (dumps multiple tracks) and pads missing data with 0s? I have drives with better error correction and I want to compare resulting dumps (track to track basis). Right now it's real PITA to do it due to offset correction. This feature would really be great. Something like data command but with offset correction and splitting tracks...

132

(15 replies, posted in General discussion)

I haven't tested yet CDs smile

The data in your logs doesn't look promising. What speed have you read your discs at?

133

(15 replies, posted in General discussion)

No, it's just the tool to get the data from MDS.

134

(15 replies, posted in General discussion)

I think CreateFile requires admin to open device E: for write access (required by SPTI).

135

(15 replies, posted in General discussion)

Hello,
   After some small research I managed to make use of DPM data stored inside MDS file. For this purpose a small helper tool was created: CDArchive (in the attachment)

Example game: http://redump.org/disc/38911/

Basically the result of the tool is this info:

DPM Resolution: 256 // It means that there's one sample of info for each 256 sectors block
DPM Entries: 8037 // 8037 * 256 = how many sectors are covered in this DPM analysis session (could be smaller by few sectors than image size)
DPM Start Sector: 0 // No comment

DPM Data: 0 0 0 2253 // Format: <IsInsideDPMBlock> <SectorStart> <SectorDensityDifference> <SectorReadingTimeUs>
DPM Data: 0 256 -1 2252 // The key thing here is SectorDensityDifference - it's used to detect start and end of DPM range
DPM Data: 0 512 -1 2251 // DPM start area has always positive difference and end area has always negative difference
...
...
...
DPM Data: 0 5888 0 2239
DPM Data: 0 6144 -1 2238
DPM Data: 0 6400 -1 2237
DPM Data: 0 6656 0 2237
DPM Data: 1 6912 29 2266 // DPM area start here
DPM Data: 1 7168 -2 2264
DPM Data: 1 7424 1 2265
DPM Data: 1 7680 -2 2263
DPM Data: 1 7936 0 2263
DPM Data: 1 8192 -1 2262
DPM Data: 1 8448 0 2262
DPM Data: 1 8704 -1 2261
DPM Data: 1 8960 0 2261
DPM Data: 1 9216 -1 2260
DPM Data: 1 9472 -1 2259
DPM Data: 1 9728 0 2259 // DPM area ends here
DPM Data: 0 9984 -30 2229
DPM Data: 0 10240 -1 2228
DPM Data: 0 10496 0 222
...
DPM Data: 0 2056704 -1 970

DPM Range: 6912 - 9984 = 3072 [+29 -30]
DPM Range: 14592 - 17408 = 2816 [+30 -30]
DPM Range: 18688 - 19968 = 1280 [+29 -30]
DPM Range: 21504 - 24576 = 3072 [+29 -31]
DPM Range: 27136 - 30464 = 3328 [+27 -29]
DPM Range: 36096 - 37632 = 1536 [+28 -29]
DPM Range: 43264 - 46080 = 2816 [+29 -29]
DPM Range: 50176 - 56320 = 6144 [+27 -29]
DPM Range: 58624 - 60160 = 1536 [+28 -29]
DPM Range: 61952 - 63232 = 1280 [+28 -29]
DPM Range: 64768 - 70912 = 6144 [+28 -28]
DPM Range: 71680 - 77824 = 6144 [+27 -28]
DPM Range: 78848 - 82432 = 3584 [+27 -27]
DPM Range: 93440 - 95232 = 1792 [+26 -27]
DPM Range: 96256 - 100608 = 4352 [+27 -28]
DPM Range: 103680 - 105216 = 1536 [+27 -27]
DPM Range: 107520 - 111104 = 3584 [+27 -28]
DPM Range: 113920 - 115200 = 1280 [+27 -28]
DPM Range: 116480 - 120832 = 4352 [+26 -26]
DPM Range: 122112 - 124160 = 2048 [+26 -27]
DPM Range: 124928 - 128512 = 3584 [+26 -28]
DPM Range: 131072 - 136960 = 5888 [+26 -28]
DPM Range: 276736 - 280320 = 3584 [+23 -24]
DPM Range: 284160 - 287488 = 3328 [+23 -24]
DPM Range: 288768 - 290048 = 1280 [+23 -23]
DPM Range: 291328 - 294400 = 3072 [+22 -23]
DPM Range: 296960 - 300288 = 3328 [+23 -24]
DPM Range: 305664 - 307712 = 2048 [+22 -23]
DPM Range: 313088 - 316160 = 3072 [+24 -23]
DPM Range: 320512 - 326144 = 5632 [+22 -23]
DPM Range: 328960 - 330496 = 1536 [+23 -24]
DPM Range: 332032 - 333824 = 1792 [+22 -23]
DPM Range: 334336 - 340736 = 6400 [+23 -24]
DPM Range: 342016 - 347648 = 5632 [+22 -23]
DPM Range: 349184 - 352000 = 2816 [+23 -23]
DPM Range: 363520 - 365056 = 1536 [+22 -23]
DPM Range: 366080 - 370688 = 4608 [+21 -23]
DPM Range: 373504 - 375296 = 1792 [+21 -22]
DPM Range: 377856 - 381184 = 3328 [+23 -22]
DPM Range: 383488 - 385280 = 1792 [+23 -22]
DPM Range: 386560 - 390912 = 4352 [+22 -21]
DPM Range: 392192 - 393984 = 1792 [+21 -23]
DPM Range: 395264 - 398336 = 3072 [+22 -22]
DPM Range: 400896 - 406784 = 5888 [+22 -23]
DPM Range: 547328 - 550144 = 2816 [+21 -19]
DPM Range: 553984 - 557056 = 3072 [+20 -20]
DPM Range: 558592 - 560128 = 1536 [+20 -20]
DPM Range: 561408 - 564480 = 3072 [+21 -19]
DPM Range: 567552 - 570112 = 2560 [+19 -21]
DPM Range: 575744 - 577536 = 1792 [+19 -20]
DPM Range: 582912 - 586240 = 3328 [+19 -21]
DPM Range: 590336 - 595968 = 5632 [+20 -20]
DPM Range: 599040 - 600832 = 1792 [+20 -20]
DPM Range: 601856 - 603392 = 1536 [+19 -19]
DPM Range: 604672 - 610816 = 6144 [+20 -21]
DPM Range: 611840 - 617728 = 5888 [+20 -20]
DPM Range: 619264 - 622080 = 2816 [+19 -19]
DPM Range: 633600 - 635136 = 1536 [+20 -20]
DPM Range: 636416 - 640512 = 4096 [+18 -18]
DPM Range: 643584 - 645376 = 1792 [+18 -20]
DPM Range: 647936 - 650752 = 2816 [+20 -19]
DPM Range: 653824 - 655104 = 1280 [+19 -19]
DPM Range: 656640 - 661248 = 4608 [+19 -19]
DPM Range: 662016 - 663808 = 1792 [+18 -19]
DPM Range: 665600 - 668416 = 2816 [+19 -20]
DPM Range: 670720 - 677120 = 6400 [+19 -19]
DPM Range: 816896 - 820224 = 3328 [+17 -17]
DPM Range: 824320 - 827136 = 2816 [+17 -18]
DPM Range: 828416 - 829952 = 1536 [+17 -17]
DPM Range: 831488 - 834304 = 2816 [+17 -17]
DPM Range: 837120 - 840192 = 3072 [+17 -17]
DPM Range: 845568 - 847360 = 1792 [+17 -17]
DPM Range: 852992 - 856064 = 3072 [+17 -18]
DPM Range: 860160 - 866304 = 6144 [+16 -16]
DPM Range: 869120 - 870400 = 1280 [+17 -18]
DPM Range: 871936 - 873216 = 1280 [+18 -19]
DPM Range: 874496 - 880640 = 6144 [+17 -17]
DPM Range: 881920 - 887808 = 5888 [+17 -17]
DPM Range: 888832 - 892416 = 3584 [+17 -18]
DPM Range: 903680 - 905216 = 1536 [+17 -17]
DPM Range: 906240 - 910592 = 4352 [+17 -18]
DPM Range: 913664 - 915200 = 1536 [+17 -18]
DPM Range: 918016 - 921088 = 3072 [+17 -18]
DPM Range: 923648 - 925440 = 1792 [+17 -18]
DPM Range: 926720 - 931072 = 4352 [+17 -17]
DPM Range: 932352 - 933888 = 1536 [+18 -18]
DPM Range: 934912 - 938240 = 3328 [+17 -18]
DPM Range: 940800 - 946688 = 5888 [+17 -17]
DPM Ranges Count: 88

So as you see I managed to identify 88 areas with smaller density on the disc. I'd like to see this info in the DB someday. There's also a possibility to generate MDS file with this info (or rather patch existing MDS with this info).

Supported protections:
- SecuROM

To Check:
- Tages Twin Sectors
- StarForce

Tool usage: CDArchive -x i -d <SomeDirectory (not used)> -a <mdsFilePath> <minDensityDifference> <minDpmRangeLenSectors>

Example: CDArchive -x i -d D:\Test -a D:\Test\gta.mds 10 100

Tool must be run as admin because it has some other functions like ripping sectors which require admin.

136

(3,497 replies, posted in General discussion)

How much is ripping time increased because of this new feature?

137

(3,497 replies, posted in General discussion)

Sarami please commit codes to git. I have a DVD recorded in PTP mode and cannot dump it...

138

(24 replies, posted in General discussion)

I scanned previous version of Colin McRae Rally (Europe) (En,Fr,De,Es) and it looked fine in cdmage? How do you know it's corrupted?

139

(3,497 replies, posted in General discussion)

Ok, thx for the info.

I also read somewhere that changing reading speed could help recover bad sectors. If the cd is spinning at low speed the head might loose position of the track when it tries to read scratched area. When the disc spins faster the head has less chance to loose position of the track because it "hovers above scratch for shorter time".

Maybe this could also be implemented. What do you think?

140

(3,497 replies, posted in General discussion)

I tested the new version and there's one problem with ripping disc with uncorrectable C2 errors:

Need to reread sector: 260512 rereading times:   10/  10
bad all. need to reread more

After that DIC exits. Is it possible to continue execution even if there are C2 errors (I know the image will be bad but I'm aware of it)?

Is your C2 algorithm using C2 bits to select bytes which are good / bad and rereads until there are no C2 bits set (making use of C2 bits from previous rereads)?

141

(3,497 replies, posted in General discussion)

Here's a function in one of my old tools for reading DVD TOC:

DWORD Device::readDVDTOC(DiscInfo & discInfo) {
    typedef struct DVD_SESSION_INFO {
        DVD_DESCRIPTOR_HEADER h;
        DVD_LAYER_DESCRIPTOR d;
    } DVD_SESSION_INFO;

    MMCCdb cdb;
    RtlZeroMemory(&cdb, sizeof(MMCCdb));

    CDIO_MMC_SET_COMMAND(cdb.field, CDIO_MMC_GPCMD_READ_DVD_STRUCTURE);

    cdb.field[6] = 0; // Layer 0
    cdb.field[9] = sizeof(DVD_SESSION_INFO);

    DVD_SESSION_INFO dvdSessionInfo;
    RtlZeroMemory(&dvdSessionInfo, sizeof(dvdSessionInfo));

    DWORD retVal = runMMCCommand(&cdb, getMMCCommandLen(cdb.field[0]), (PUCHAR)&dvdSessionInfo, sizeof(dvdSessionInfo), SCSI_MMC_DATA_READ);
    if (!retVal) {
        ULONG layerZeroStartLsn = Utils::swapBytesUlong(dvdSessionInfo.d.StartingDataSector);
        ULONG discLenLsn = 0;

        if (dvdSessionInfo.d.NumberOfLayers) {
            if (dvdSessionInfo.d.TrackPath == 1) {
                // Opposite Track Path - Single Lead-In / Out (the same information is returned for all layers)
            }
            else {
                // Parallel Track Path - Dual Lead-In / Out
            }

            ULONG layerZeroLsnEnd = Utils::swapBytesUlong(dvdSessionInfo.d.EndLayerZeroSector);
            if (!layerZeroLsnEnd) {
                DEBUGPRINTWE(L"Unsupported DL DVD Disc found!\n");

                return ERROR_UNSUPPORTED_TYPE;
            }
            
            ULONG layerZeroLsnLen = layerZeroLsnEnd - layerZeroStartLsn + 1;

            ULONG layerOneLsnEnd = Utils::swapBytesUlong(~dvdSessionInfo.d.EndDataSector) & 0xFFFFFF;
            ULONG layerOneLsnLen = layerZeroLsnEnd - layerOneLsnEnd + 1;

            discLenLsn = layerZeroLsnLen + layerOneLsnLen;
        }
        else {
            ULONG endDataLsn = Utils::swapBytesUlong(dvdSessionInfo.d.EndDataSector);

            discLenLsn = endDataLsn - layerZeroStartLsn + 1;
        }

        if (!retVal) {
            SessionInfo sessionInfo;
            sessionInfo.firstTrackNo = 1;
            sessionInfo.lastTrackNo = 1;

            sessionInfo.sessionStartLsn = 0;
            sessionInfo.sessionEndLsn = discLenLsn;

            sessionInfo.sessionStartMSF = 0;
            sessionInfo.sessionEndMSF = discLenLsn;

            if (dvdSessionInfo.d.NumberOfLayers) {
                discInfo.dualLayerDVD = TRUE;
            }

            TrackInfo trackInfo;
            trackInfo.indexNo = 1;
            trackInfo.trackNo = 1;
            trackInfo.trackAdr = 0;
            trackInfo.startAddress = 0;
            trackInfo.endAddress = discLenLsn;
            trackInfo.trackFormat = DATA_MODE_FORMAT_MODE1;

            sessionInfo.tracksSub.push_back(trackInfo);

            discInfo.discToc[1] = sessionInfo;
            discInfo.hasPvd = TRUE;
        }
    }
    else {
        retVal = Helpers::printSystemMessage(__FILE__, __LINE__, retVal);
    }

    return retVal;
    
    /*DWORD bytesReturned = 0;
    DWORD retVal = 0;

    DVD_READ_STRUCTURE dvdReadStructure;
    dvdReadStructure.BlockByteOffset.QuadPart = 0;
    dvdReadStructure.SessionId = 0;
    dvdReadStructure.Format = DvdPhysicalDescriptor;
    dvdReadStructure.LayerNumber = 0;

    typedef struct DVD_SESSION_INFO {
        DVD_DESCRIPTOR_HEADER h;
        DVD_LAYER_DESCRIPTOR d;
    } DVD_SESSION_INFO;

    DVD_SESSION_INFO dvdSessionInfo;
    RtlZeroMemory(&dvdSessionInfo, sizeof(dvdSessionInfo));

    if (DeviceIoControl(iDeviceHandle, IOCTL_DVD_READ_STRUCTURE, &dvdReadStructure, sizeof(DVD_READ_STRUCTURE), &dvdSessionInfo, sizeof(dvdSessionInfo), &bytesReturned, NULL)) {
        ULONG endLayerZeroLsn = Utils::swapBytesUlong(dvdSessionInfo.d.EndLayerZeroSector);
        ULONG sectorStartLsn = Utils::swapBytesUlong(dvdSessionInfo.d.StartingDataSector);
        ULONG discLenLsn = endLayerZeroLsn - sectorStartLsn + 1;

        if (dvdSessionInfo.d.NumberOfLayers) {
            discLenLsn *= 2;
        }

        SessionInfo sessionInfo;
        sessionInfo.sessionStartLsn = sectorStartLsn;
        sessionInfo.sessionEndLsn = discLenLsn;

        discInfo.discToc[1] = sessionInfo;
    }
    else {
        retVal = Helpers::printSystemMessage(__FILE__, __LINE__);
    }

    return retVal;*/
}

cdb.field[6] = 0; // Layer 0 -> Maybe try 1 here?
dvdReadStructure.LayerNumber = 0; // Or 1 here?

What do you think? At least DIC should error out if such disc is encountered as no one wants wrong checksums in the DB.

142

(3,497 replies, posted in General discussion)

Is it the case just for sector with LBA 10000 or for all sectors >= 10000. It's really weird...

143

(3,497 replies, posted in General discussion)

"I definitely understood the plextor drive has -1 sector offset about C2 error"

Could you explain it?

144

(24 replies, posted in General discussion)

REDUMP: Whiplash + VR Soccer '96 (USA) - 120 random bytes in data track, overdumped, needs redumping

TRUSTEDME: Brix 2 Deluxe (Germany) - Mastering error
TRUSTEDME: Brutal - Paws of Fury (Germany) - Mastering error
TRUSTEDME: Dark Secrets of Africa - Das Geheimnis des Pharaonengrabs (Germany) - Mastering error, track 3 has MSF shifted by 150 frames
TRUSTEDME: Doom (USA) (v1.2) (Demo) (19940321) - Mastering error
TRUSTEDME: GameTek 3 in 1 Compilation - Road Warrior + Brutal + Humans 3 (Europe) - Mastering error, lead out in data area
TRUSTEDME: Moto Racer 2 (USA) (En,Fr,De,Es,It,Sv) - Mastering error
TRUSTEDME: Pete Sampras Tennis 97 (Europe) - Mastering error
TRUSTEDME: Requiem - Avenging Angel (USA) - Mastering error
TRUSTEDME: Spec Ops II - Operation Bravo (Europe) (En,Fr,De,Es,It) (Rerelease) - Mastering error
TRUSTEDME: Supergames Volume 10 (Europe) - Mastering error
TRUSTEDME: Supergames Volume 6 (Europe) - Mastering error
TRUSTEDME: Syndicate Plus (USA) (En,Fr,Es,It) - Mastering error
TRUSTEDME: Trolls (Europe) (1995) - Mastering error
TRUSTEDME: XF5700 Mantis - Experimental Fighter (USA) - Mastering error

HARD: Broken Sword - The Shadow of the Templars (Europe) (Disc 1) (Sold Out Software) (19990708) - Pre last sector has unknown mode
HARD: Broken Sword II - The Smoking Mirror (Europe) (Disc 1) (Sold Out Software) - Pre last sector has unknown mode
HARD: Broken Sword II - The Smoking Mirror (Europe) (Disc 2) - Pre last sector has unknown mode
HARD: Chasm - The Rift (Europe) (Sold Out Software) - Pre last sector has unknown mode
HARD: Cyberwar (USA) (Disc 1) - Last and pre last sector has unknown mode
HARD: Cyberwar (USA) (Disc 2) - Last and pre last sector has unknown mode
HARD: Cyberwar (USA) (Disc 3) - Last and pre last sector has unknown mode
HARD: MER Innebandy (Sweden) - Weird mastering errors

VALID: Archimedean Dynasty, The (USA) - Mastering errors verified
VALID: Formula 1 97 (Europe) - Different flags are ok
VALID: Kreed (Europe) (Disc 1) - Alternating track mode protection
VALID: Kreed (Europe) (Disc 2) - Alternating track mode protection
VALID: Magic Carpet (Europe) (En,Fr,De,It) - Mastering errors verified
VALID: MechWarrior 2 - 31st Century Combat (USA) (Windows 95) (Alt) - Mastering errors verified
VALID: Moto Racer 2 (Europe) (En,Fr,De,Es,It,Sv) - Different flags are ok
VALID: Moto Racer 3 (Europe) (En,Fr,De,Es,It,Sv) - Tages twin sectors
VALID: Moto Racer 3 (USA) - Tages twin sectors
VALID: Nox (Europe) (En,Fr,De,Es,It) (Disc 3) (Manuals Disc) (Rerelease) - Multisession
VALID: Total Meltdown (USA) - Illegal sector headers

ALTME: Levelpack 8 - Additions for Carmageddon (Europe) - Mastering error (a6d94fd15da93ae7d17325ac0cdd9c2c4f986e0f)

This is a semi-complete list of weird images in IBM PC set. There are 4 categories:
REDUMP - Titles must be redumped.
TRUSTEDME - Titles with mastering errors coming from trusted dumpers
HARD - Weird mastering errors. All share a same pattern so it's very unlikely they are bad (weird track mode byte).
VALID - Images with weird stuff. Proper ones.

The obvious corrupted ones are the ones from REDUMP group.

145

(2 replies, posted in General discussion)

Latest disc entry modification is also fine for me. The main idea is to grab cues from n last modified entries easily.

146

(2 replies, posted in General discussion)

Hello,
   I have a small idea. When I download cues from main page, all the files inside archive have the same exact timestamp. Is it possible to change cue timestamps to match modification time of appropriate game? What do you think?

147

(3,497 replies, posted in General discussion)

Sarami it looks like DIC after removal of /rc doesn't pick up SmartE or possibly VOB (/ss doesn't help):
http://forum.redump.org/topic/16532/ibm … um-issues/

Could you have a look at it plz?

148

(2 replies, posted in General discussion)

Use Alcohol or different software. Most of the discs are ripped at 8x but few ripped at fulll speed...

149

(2 replies, posted in General discussion)

Hello,
   Does someone know why does my Plextor 760A seem to be locked to 8x when reading CDs? Did you come across such issue before?

150

(3,497 replies, posted in General discussion)

sarami wrote:
reentrant wrote:

subchannels are corrupted.

This? http://forum.redump.org/post/54682/#p54682

I'm not the original dumper, I only saw the logs. In idlord's case /s 2 didn't help. In one of the logs you output a table describing TOC with pregap and this table is computed using RMSF in SubQ, yes? The problem with the CD is that RMSF in Q channel is bad but not random. For example at some point (say LBA 90000), RMSF is changed to some low value like 00:24:24 and goes up on each frame. After some sectors it restarts again and goes up.

RMSF goes 1 frame up with each sector (it's good) but the value is shifted and it screwes everything...