And what's the difference?

2

(1,366 replies, posted in General discussion)

In Sub Pack mode the device corrects R to W using RS codes. Too bad D8 doesn't support Pack & C2 neutral

3

(14 replies, posted in General discussion)

You could do a test. Scratch the disc and try to read it...

4

(1,366 replies, posted in General discussion)

What is SecuROM 99?

5

(1,366 replies, posted in General discussion)

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

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)...

7

(1,366 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

8

(1,366 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?

9

(1,366 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...

10

(6 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?

11

(6 replies, posted in General discussion)

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

12

(6 replies, posted in General discussion)

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

13

(6 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.

14

(1,366 replies, posted in General discussion)

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

15

(1,366 replies, posted in General discussion)

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

Do you have the full dat somewhere. I'm very interested in such stuff smile

17

(5 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?

18

(1,366 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?

19

(1,366 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)?

20

(1,366 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.

21

(1,366 replies, posted in General discussion)

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

22

(1,366 replies, posted in General discussion)

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

Could you explain it?

23

(5 replies, posted in General discussion)

REDUMP: 7th Guest, The (USA) (Disc 1) - Random header and data at last two sectors, should be filled with 0x55?, needs redumping
REDUMP: Archimedean Dynasty, The (USA) - Mastering errors, needs redumping
REDUMP: Beast Within, The - Un Mystere avec Gabriel Knight (France) (Disc 6) - Image starts at 00:02:01
REDUMP: MageSlayer (USA) - 120 random bytes in data track, track 2 looks corrupted, needs redumping
REDUMP: MechWarrior 2 - 31st Century Combat (USA) (Windows 95) (Alt) - Random bytes at end of data track, needs redumping
REDUMP: MechWarrior 2 - Mercenaries (USA) (3Dfx Interactive Edition) - Random bytes at end of data track, needs redumping
REDUMP: Quake II Mission Pack - Ground Zero (USA) - 120 random bytes in data track, needs redumping
REDUMP: Tiger Hunt (Taiwan) - Physical protection, need redumping with OptiArc
REDUMP: Total Meltdown (USA) - Illegal sector headers, needs redumping
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: Magic Carpet (Europe) (En,Fr,De,It) - Mastering error
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: Delta Force (USA) (v1.00.02.00P) - Looks corrupted on the other side (Kludged)
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: 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

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 (you know what I mean)
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.

24

(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.

25

(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?