1

(35 replies, posted in General discussion)

HeroponRikiBestest wrote:

As far as I saw from reading this thread, you were unable to read DPM from the .mds format, and switched to using a different format instead. Is that correct?

No. There's probably just a confusion between reading and creating DPM. Reading from files is easy. Creating values from the disc is not.

HeroponRikiBestest wrote:

re-reading the same sector; the time it takes to re-read it each time should be the amount of time it takes to read 360 degrees

Alcohol does not do that. It would add a variable and unpredictable amount of mechanical delay due to the non-continuous read.

2

(35 replies, posted in General discussion)

One thing about dumping DPM timings that should be mentioned explicitly, is that a constant angular velocity reading seems mandatory.

Obviously, the shape of the timings curve strongly suggests that, but the best argument is in fact the inner/outer edge timings ratio : it equals 2.4 for a CD with around 333 000 sectors, which is EXACTLY the theoretical bitrate increase ratio in CAV mode.

Transfer rates analysis with either constant linear velocity (CLV) or constant angular velocity (CAV) also proves that density variations in SecuROM discs can be detected using CAV, but not with CLV.

CAV
https://i.postimg.cc/hht9B3sv/securom-cav-24x-success.png

CLV
https://i.postimg.cc/8f4KjF3v/securom-clv-8x-failure.png


@sarami @reentrant
Do you know how to force CAV mode?

3

(35 replies, posted in General discussion)

HeroponRikiBestest wrote:

Have you still not figured out how to read the 4 byte DPM values?

How would any program using DPM work without being able to read it?

HeroponRikiBestest wrote:

Is there currently a way to get timing values with DIC?

Not really, DIC test build gives incorrect values and the reason is unclear.

HeroponRikiBestest wrote:

I can send my awful python scripts here.

If you think it might be useful, don't hesitate.

4

(35 replies, posted in General discussion)

The two curves at the top allow to have a quick look at the whole disc.
The two curves at the bottom focus on the first 750 samples to zoom in on the first region's pattern found in SecuROM 4.8+ discs.

This pattern is identical for all regions, and highly specific. It is not 100% specific to one disc in particular, as two different games from the same publisher might use the same pattern, nethertheless, as far as I know, one particular game is always associated with the same pattern.
On that matter, it would be possible to obtain a reproducible characteristic for DPM, as opposed to hashes, by using the pattern more or less like a barcode, translated to a series of numbers.

In the log, the two most important things are :
- the layout : unreliable (bad dump), regions x spikes per region count (SecuROM dump), normal (non-SecuROM dump).
- the curve % : a "smoothness" score (the closer to 100%, the cleaner in terms of analog noise).

5

(35 replies, posted in General discussion)

I have added a graphical representation of the timings in DPM SCN. Simply drag and drop a mds file on 'scan' and press Escape key to close the window. A corresponding .bmp file will be created, along with a .log file that contains the stats and all DPM values in a human readable format.

Linux : https://github.com/jonblau/dpmscn/relea … _64.tar.gz
Windows : https://github.com/jonblau/dpmscn/relea … x86_64.zip

For example, a SecuROM 7 disc (http://redump.org/disc/105429/) :
- timings in red
- timing variations in blue

https://i.postimg.cc/SX7CYMsJ/dmc.png

6

(35 replies, posted in General discussion)

I did a bit of testing with different time stamp functions. It seems that after simply iterating a printf in a for loop, clock(), QueryPerformanceCounter() in Windows, and clock_gettime() in Linux give extremely close results when CLOCK_PROCESS_CPUTIME_ID is used.

If that behavior is consistent in any situation, which needs to be checked, I find it even harder to understand how one would achieve the task of measuring DPM with these functions, unless the I/O latency is deduced, because they try to assess the same thing, that is the CPU time spent on a process, while the time NOT spent by the CPU is required for DPM (as I see it).

I wonder if calculating the difference between clock_gettime(CLOCK_MONOTONIC) and clock_gettime(CLOCK_PROCESS_CPUTIME_ID) is enough to approximate the drive's latency variations.

7

(35 replies, posted in General discussion)

Wish I could help you, but for now that's beyond my understanding.

All I know is that BWA builder had an alleged precision of about 6 µs.

8

(35 replies, posted in General discussion)

About reverse engineering, I'm not sure that the alcohol application is the best candidate to start from. I've only recently discovered that the old .bwa file format used by Blindwrite back in 2002 was in fact storing DPM information the exact same way than the very latest Alcohol 120% version released in 2023.

The thing is that those .bwa files were created by a much smaller dedicated stand-alone program called BWA builder. Since smaller probably also means it's simpler, it might be more interesting to analyze it with Bus Hound, or even to decompile it.

Well done.

10

(35 replies, posted in General discussion)

reentrant wrote:

Which 4 byte enumeration?

The DPM sample itself I guess.

DPM sample     value     timing

1C 05 00 00    1308
38 0A 00 00    2616      1308
53 0F 00 00    3923      1307
6E 14 00 00    5230      1307
88 19 00 00    6536      1306
A2 1E 00 00    7842      1306
BB 23 00 00    9147      1305
D4 28 00 00    10452     1305
ED 2D 00 00    11757     1305
05 33 00 00    13061     1304
1D 38 00 00    14365     1304

sarami,
If I rely on the values you were getting in 2020, the sampling seems to be wrong in the first place :

value ?        timing ?

154.500100
154.566300     0,0662
154.758100     0,1918
154.850500     0,0924
154.853000     0,0025
155.114800     0,2618
155.013000     −0,1018
155.249500     0,2365
155.350000     0,1005
155.493100     0,1431
155.512100     0,019
155.672400     0,1603
155.690200     0,0178
155.774200     0,084
156.011200     0,237
156.051600     0,0404
156.179200     0,1276
156.326700     0,1475
156.385200     0,0585
156.486800     0,1016

These timings look inconsistent. I would be curious to see if they also vary across multiple dumps though (same disc, same drive, same settings).

reentrant wrote:

I don't have the code for generating ECC/EDC codes.

Now you do : https://github.com/alex-free/edcre

12

(35 replies, posted in General discussion)

Thank you for sharing that code reentrant.

That's indeed the core logic involving the use of thresholds, obviously due to the analog nature of DPM. Even as is, it already worked quite well with DVDs because what you called 'readingTimeDifference' was spread across significantly less sectors than the length in sectors that's used for sampling (corresponding to the 'resolution') which made the detection of a 'range' in the same pass way more feasible. For CDs however, 2 to 3 samples are actually needed to describe that timing difference...

13

(35 replies, posted in General discussion)

I did my own research and wrote a program that analyzes DPM timings from MDS files, allowing to identify low quality dumps, and helps to find best performing drives.

DPM SCN supports :
- CD and DVD sampling rates
- curve quality score
- layout detection
- critical error detection
- reliability checks

Compatible with MDS files created by Alcohol v2.0 or later.

Windows : https://github.com/jonblau/dpmscn/relea … x86_64.zip
Linux : https://github.com/jonblau/dpmscn/relea … _64.tar.gz

I will, thank you Deterous.

Otherwise, edccchk automatically analyzes and prints a report that specifies the sectors mode.

Data sectors, as opposed to audio sectors, are all structured this way: sync, addr, mode, +/-subh, data, +/-edc, +/-null, +/-ecc.
The mode consists of one single byte located at the 16th position of every sector and can easily be checked with an hex editor.

Some examples:
- a mode 0 sector
00 FF FF FF FF FF FF FF FF FF FF 00 25 59 34 00
- a mode 1 sector
00 FF FF FF FF FF FF FF FF FF FF 00 10 38 72 01
- a mode 2 sector
00 FF FF FF FF FF FF FF FF FF FF 00 54 17 36 02

If you are a Windows user, I would suggest to use HxD to open your disc image.

This disc was also dumped with redumper build 118 before I decided to submit the DIC logs. The hashes were the same.

In case it is of any interest :

=== 2023-05-12 06:46:20 ========================================================
redumper v2023.04.10 build_118 [Apr 10 2023, 00:27:01]

command: redumper.exe cd --drive=d --speed=8 --image-path=c:\users\nemok\documents\redumper\dump --image-name=dump

*** MODE: dump
drive path: d:
drive: ASUS - BW-16D1HT (revision level: 3.02, vendor specific: W000800KLQMBO90737)
drive configuration: LG_ASU3 (read offset: +6, C2 shift: 0, pre-gap start: -135, read method: BE_CDDA, sector order: DATA_C2_SUB)
image path: c:\users\nemok\documents\redumper\dump
image name: dump

disc TOC:
  track 1 {  data }
    index 01 { LBA:      0, MSF: 00:02:00 }
  track A {  data }
    index 01 { LBA: 337173, MSF: 74:57:48 }

dump started
LG/ASUS: searching lead-out in cache (LBA: 337173)
LG/ASUS: lead-out found (LBA: 337173, sectors: 3)
dump complete (time: 1098s)

media errors: 
  SCSI: 0
  C2: 0
  Q: 136

*** MODE: protection
scan started
protection: N/A
scan complete (time: 0s)

*** MODE: refine
drive path: d:
drive: ASUS - BW-16D1HT (revision level: 3.02, vendor specific: W000800KLQMBO90737)
drive configuration: LG_ASU3 (read offset: +6, C2 shift: 0, pre-gap start: -135, read method: BE_CDDA, sector order: DATA_C2_SUB)
image path: c:\users\nemok\documents\redumper\dump
image name: dump
refine started
refine complete (time: 5s)

media errors: 
  SCSI: 0
  C2: 0
  Q: 136

*** MODE: split
correcting Q... done

final TOC:
  track 1 {  data }
    index 00 { LBA: [  -150 ..     -1], length:    150, MSF: 00:00:00-74:57:47 }
    index 01 { LBA: [     0 .. 337172], length: 337173, MSF: 00:02:00-74:57:47 }
  track A {  data }
    index 01 { LBA: [337173 .. 337174], length:      2, MSF: 74:57:48-74:57:49 }

analysis started
analysis complete (time: 91s)

data disc detected, track offset statistics: 
  LBA: [  -134 .. 337175], count: 337310, sample offset:    -78804
  LBA: [336106 .. 336106], count:      1, sample offset: +198259476

non-zero  TOC sample range: [   -88200 .. +198257724]
non-zero data sample range: [    +8808 .. +198259482]
Universal Hash (SHA-1): 6c962ae7cf4d3d15ae4bc30df9c0610a47a6d3c8

disc write offset: -12

warning: incomplete pre-gap (session: 1, unavailable: 16/150)
checking tracks
track 1... passed
check complete (time: 7s)

splitting tracks
writing "dump.bin"
split complete (time: 35s)

writing CUE-sheet
dump.cue... done

dat:
<rom name="dump.bin" size="793030896" crc="b36c6000" md5="554215ff9963bb947f0a68f20a3b9060" sha1="511b03266d3e69a8112b7a0e13a00cc25565f060" />

CUE [dump.cue]:
FILE "dump.bin" BINARY
  TRACK 01 MODE1/2352
    INDEX 01 00:00:00

*** MODE: info
CD-ROM [dump.bin]:
  sectors count: 337173
  mode1 sectors: 337172
  mode2 sectors: 1
  mode2 (form 1) sectors: 1

  REDUMP.ORG errors: 0

ISO9660 [dump.bin]:
  PVD:
0320 : 20 20 20 20 20 20 20 20  20 20 20 20 20 32 30 30                200
0330 : 33 31 30 32 30 31 35 32  31 30 30 30 30 04 32 30   3102015210000.20
0340 : 30 33 31 30 32 30 31 35  32 31 30 30 30 30 04 30   03102015210000.0
0350 : 30 30 30 30 30 30 30 30  30 30 30 30 30 30 30 00   000000000000000.
0360 : 30 30 30 30 30 30 30 30  30 30 30 30 30 30 30 30   0000000000000000
0370 : 00 01 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................

18

(0 replies, posted in General discussion)

This is a dreamcast utility I've just posted on github that checks the integrity of a console dump and applies pregap / offset corrections, which allows to get a redump compliant copy of any dump, provided it's already in the database.

It works on Linux/WSL and can be found at https://github.com/jonblau/dcsdchk.

Everything was in the tone, I could have said something like "ok then, never mind". You are feeling offended for no reason.

Alright... f*** consistency then smile

Hi,

I've noticed that tracks are sometimes named with (Track 1), (Track 2), (Track 3) etc but sometimes it's (Track 01), (Track 02), (Track 03) etc.
Why is that ? Wouldn't it be better to stick with the second naming scheme ?

0xbe can be trusted to retrieve correct information from perfectly standard non-protected single-session single-track mode 1 CD-ROMs with no mastering error only, problem is you just can not guess, and that's part of the reason why it will never be "enough" for building a database. From personal experience, 0xbe drives gave matching results for more than 90% of PC games, including mode 1 + audio discs with the help of EAC.

23

(2 replies, posted in General discussion)

Interesting!

You also mentioned on github that IRDs were "useful for decrypting ISOs after they have been dumped on a PC blu-ray drive". I didn't know that, actually so far I only used the key directly with the old command-line tool PS3Dec.

So do you plan on adding ISO decryption functionality to IRDKit ?

24

(3,536 replies, posted in General discussion)

Anyway, this is an awesome feature, well done sarami!

Maybe we should start a dedicated thread so that everybody can post their widest range with BadSectorCnt=0, identical hash, drive info, for every Tages disc...

25

(3,536 replies, posted in General discussion)

1. The BW-16D1HT is usually having a hard time with /f
2. I'm guessing /t implicitly uses /f for backwards reading

Is /f usage in /t mandatory ?

NB: the error right after the first reread is :

LBA[288173, 0x465ad]: [F:ProcessReadCD][L:335]
        Opcode: 0xbe
        ScsiStatus: 0x02 = CHECK_CONDITION
        SenseData Key-Asc-Ascq: 03-11-05 = MEDIUM_ERROR - L-EC UNCORRECTABLE ERROR