1

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

2

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

3

(6 replies, posted in General discussion)

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

4

(6 replies, posted in General discussion)

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

5

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

6

(1,229 replies, posted in General discussion)

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

7

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

9

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

10

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

11

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

12

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

13

(1,229 replies, posted in General discussion)

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

14

(1,229 replies, posted in General discussion)

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

Could you explain it?

15

(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)\Cyberwar (USA) (Disc 1) - Last and pre last sector has unknown mode
HARD: Cyberwar (USA) (Disc 2)\Cyberwar (USA) (Disc 2) - Last and pre last sector has unknown mode
HARD: Cyberwar (USA) (Disc 3)\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.

16

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

17

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

18

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

19

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

20

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

I on the other hand like it very much ^-^

22

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

23

(1,229 replies, posted in General discussion)

I checked idlord's logs and the issue is because subchannels are corrupted.

Listing the different protection schemes for the 8 subcoding channels...
Channel P: no protection, Channel Q: 16-bit CRC, Channels R to W:

[FONT=Arial][SIZE=2][SIZE=2][FONT=Arial][SIZE=2][FONT=Arial]To protect the data in the subcoding channels R to W, a (24, 20) Reed-Solomon error correction code is used. To improve the burst error correction capability, 8 times interleaving is added to this error-correction system. The first two symbols in a PACK have additional protection with a (4, 2) Reed-Solomon error correction code.
[/FONT][/SIZE][/SIZE][/FONT][/SIZE][/FONT]

https://club.myce.com/t/subchannel-issues/195516/9

Sarami maybe you could take the CRC16 from Sub Q and attempt to detect single bit errors by bit swapping each bit in Sub Q and checking if CRC16 matches (CRC16 could also be corrupted). cdgtool is using such approach to clean the subs for random bit errors. Could you implement this simple algorithm. That could solve issue with such rotting CDs...

24

(8 replies, posted in General discussion)

Sector 16, offset 320-370 in isobuster.
Newest DIC puts PVD to one of the log files.

25

(12 replies, posted in General discussion)

It's this:

if(sector[0x10] == sector[0x14] && sector[0x11] == sector[0x15] && sector[0x12] == sector[0x16] && sector[0x13] == sector[0x17]) { OK } else { FLAGS_NOT_SAME }