Il sottocanale del CD-ROM è diverso quando si scarica lo stesso disco?


14

Sto realizzando copie di backup di vecchi videogiochi con CloneCD 5.3.3.0 sul mio computer Windows 10 x64 con un'unità Samsung SH-S223L.

Uno di questi è Hellfire per PC (espansione di Diablo 1):

  • Il disco ha un COMPACT disc DATA STORAGElogo
  • Numero di serie: S0011770
  • Codice SID di fabbrica: IFPI 1218
  • Codice SID CD-Master: IFPI L032
  • Data di creazione ISO 9660 PVD: 1997-11-18 16:30:00.00

Uso la raccomandazione sul profilo CloneCD di redump.org :

[CloneCD ReadPrefs]
ReadSubData=1
RegenerateData=0
ReadSubAudio=1
AbortOnReadError=0
FastErrorSkip=0
ReadSpeedData=8
ReadSpeedAudio=8
IntelligentBadSectorScan=1
SectorSkip=1
NoErrorReport=0
FirstSessionOnly=0
AudioQuality=3

Per quanto ne so il gioco non ha protezione ma quando scarico il disco due volte finisco con diversi file del sottocanale ( .sub). I file .ccde .imgsono identici, solo i .subdiversi, ho usato i checksum SHA1 e un editor esadecimale per verificarlo.
Ho caricato due .subdump di file qui .
Devo dire che possiedo due copie di questo disco e il comportamento è identico con entrambi i dischi.

Ho anche scaricato diversi altri supporti CD-ROM, a volte ho questo comportamento a volte il sottocanale è coerente tra i dump.

Qual è la spiegazione di questo comportamento?


Modificare:

Ho scaricato di nuovo lo stesso CD-ROM con un'unità iH124-14 Lite-On e vedo lo stesso comportamento ( .subfile diversi ).
Ho anche controllato il supporto per errori con KProbe 2 e ottengo il seguente risultato:

Scansione BLER di KProbe 2


Modificare:

Sembra che la condizione del disco e / o la mancanza di precisione dell'unità abbiano aggiunto al fatto che il sottocanale non ha un meccanismo di controllo degli errori (tranne il canale Q) spiega perché ottengo .subfile diversi quando eseguo il dump dello stesso supporto più volte.

Devo dire che ho anche ottenuto un'unità Plextor PX-712A e sono riuscito a ottenere .subfile coerenti tra i dump utilizzando Disc Image Creator . Questo software sfrutta le 0xD8istruzioni anziché le 0xBEistruzioni per leggere il disco, ottenendo immagini più accurate. Solo poche unità (principalmente Plextor) supportano questa istruzione.

Inoltre possiedo due copie fisiche di questo CD-ROM che sto scaricando (stesso numero di serie, stessi codici IFPI e stesse informazioni incise al laser). Se scarico più volte lo stesso disco con Disc Image Creator ottengo .subfile coerenti , ma non se scarico il primo disco e quindi il secondo disco.
Immagino sia correlato alle condizioni dei media poiché una di esse presenta alcuni graffi e più errori C1 / C2.


1
errori di lettura (sporco, graffi, errori non necessariamente effettivi dall'unità) possono causare differenze tra le immagini del CDROM. le differenze potrebbero essere di pochi bit; Una differenza di 1 bit è sufficiente perché i checksum SHA * / MD5 differiscano.
donchisciottesco

Risposte:


15

I vari formati di CD sono un po 'coinvolti e le specifiche ufficiali ("libro rosso" per CD audio, "libro giallo" per CD dati) non sono disponibili gratuitamente. Ma puoi trovare alcuni dettagli negli standard disponibili come Ecma-130.

Il CD audio originale (chiamato anche CD-DA) è stato modellato sul disco in vinile, il che significa che utilizza anche una traccia a spirale di dati audio continui (il DVD ha successivamente utilizzato tracce circolari). All'interno di questi dati audio sono intercalati in modo molto complesso 8 canali secondari (da P a W), di cui il canale secondario Q contiene informazioni di temporizzazione (letteralmente in minuti / secondi / frazioni di secondo) e il numero della traccia corrente. Per lo scopo originale questo è bastato: per una riproduzione continua, l'obiettivo è stato leggermente regolato per seguire la traccia. Per cercare, l'obiettivo si spostava durante la decodifica del sottocanale Q fino a quando non veniva trovata la traccia giusta. Questo posizionamento è un po 'approssimativo, ma completamente adeguato per ascoltare la musica.

Ancora oggi, molte unità CD per computer non sono in grado di posizionare accuratamente l'obiettivo e sincronizzare i circuiti di decodifica in modo che la lettura dei campioni audio inizi in una posizione esatta. Questo è il motivo per cui molti programmi di ripping di CD hanno una modalità "paranoia", in cui eseguono letture sovrapposte e confrontano i risultati per adattarsi a questo "jitter". Come parte del flusso audio, anche il sottocanale è soggetto a jitter ed è per questo che si ottengono diversi file di sottocanale quando si esegue il ripping su un'unità CD che non può essere posizionata correttamente.

Quando è stata sviluppata la specifica CD di dati (CD-ROM) per estendere la specifica CD-DA, è stata riconosciuta l'importanza di indirizzare e leggere accuratamente i dati, quindi il frame audio di 2352 byte è stato suddiviso in 12 byte di sincronizzazione e 4 byte di intestazione (per l'indirizzo del settore), lasciando i rimanenti 2336 byte per i dati e un ulteriore livello di correzione degli errori. Usando questo schema, i settori possono essere affrontati esattamente senza dover fare affidamento solo sulle informazioni del canale Q. Pertanto l'effetto jitter non si applica, si ottengono sempre gli stessi dati quando si scarica un CD-ROM e non è necessaria ulteriore intelligenza nel dumping.

Modifica con maggiori dettagli:

Secondo Ecma-130 , i dati sono decodificati in più fasi: 24 byte formano un frame F1 , i byte di 106 di questi frame sono distribuiti in 106 frame F2 , che ottengono 8 byte extra di correzione degli errori. Questi frame a loro volta ottengono ciascuno un byte aggiuntivo ("byte di controllo") per trasformarli in frame F3 . Il byte aggiuntivo contiene le informazioni del canale secondario (un canale secondario per ogni posizione di bit). Un gruppo di 98 frame F3 è chiamato sezione e i 98 byte di controllo associati contengono due byte di sincronizzazione e 96 byte di dati del sottocanale reale. Il canale secondario Q ha inoltre 16 bit di correzione dell'errore CRC in quei 96 bit.

L'idea alla base è quella di distribuire i dati sulla superficie del disco in modo tale che graffi, sporco ecc. Non influiscano su molti bit continui, quindi la correzione degli errori può recuperare i dati persi purché i graffi non lo siano troppo grande.

Di conseguenza, l'hardware dell'unità CD deve leggere una sezione completa dopo il riposizionamento dell'obiettivo per scoprire dove si trova nel flusso di dati. La decodifica delle varie fasi viene eseguita dall'hardware, che deve sincronizzarsi con i 2 byte di sincronizzazione nel flusso di byte di controllo. Tutti i modelli di unità CD richiedono un tempo diverso per la sincronizzazione rispetto ad altri modelli (è possibile verificarlo leggendo da due unità diverse, se presenti), a seconda della modalità di implementazione dell'hardware. Inoltre, molti modelli non sempre impiegano esattamente lo stesso tempo per la sincronizzazione, quindi possono avviarsi un po 'in anticipo o in ritardo e produrre i dati decodificati non sempre allo stesso byte.

Pertanto, quando il programma di ripping emette un READ CDcomando (0xBE), fornisce una lunghezza di trasferimento e un indirizzo iniziale (o meglio, tempo del canale Q). L'unità posiziona l'obiettivo, decodifica i fotogrammi, estrae il canale Q, confronta il tempo e quando trova il tempo corretto, inizia a trasferire. Questo trasferimento non inizia sempre nello stesso byte spiegato sopra, quindi il risultato di più READ CDcomandi può essere spostato l'uno contro l'altro. Ecco perché vedi diversi file di subchannel dal tuo ripper.

A seconda dell'hardware e delle circostanze in cui l'obiettivo è regolato, è più o meno casuale se il trasferimento inizia alcuni campioni in anticipo o alcuni campioni in ritardo. Quindi l'unico motivo che vedrai nei risultati è che i turni sono un multiplo della lunghezza del trasferimento.

Alcuni modelli di unità hanno in realtà un hardware accurato che inizierà sempre il trasferimento allo stesso tempo. Lo standard definisce un bit in modalità pagina 0x2a ("Funzionalità CD / DVD e pagina di stato meccanico") che indica se è così, ma l'esperienza del mondo reale mostra che alcune unità che affermano di essere esatte in realtà non lo sono. (Sotto Linux, puoi usare sg_modesdal sg3-utilespacchetto per leggere le pagine della modalità, non so quale strumento usare in Windows).


Grazie per la tua risposta mi dà un contesto interessante. Capisco che non ho bisogno che il canale secondario abbia i dati corretti dal disco, mi chiedo solo perché il canale secondario stesso non sia coerente tra i dump.
Chris,

1
Sì, ho cercato di spiegare perché il canale secondario non è coerente: si inviano comandi al disco per leggere i dati "grezzi" inclusi i canali secondari e il posizionamento non è preciso, quindi può accadere che la lettura inizi in punti diversi. Se confronteresti i dati che leggi, vedresti che le parti vengono semplicemente spostate. OTOH, i dati del CD-ROM stesso non presentano questo problema. E hai bisogno del contesto per capire perché il posizionamento non è esatto (anche se avresti bisogno di un contesto ancora maggiore per il motivo esatto , nel quale non sono entrato).
Dirkt

Sono interessato a sapere il motivo esatto se è possibile. Ho aggiunto un link per il download ai .subfile nella mia domanda. L'ho confrontato con un editor esadecimale e hai ragione i dati sono spostati, tuttavia non riesco a trovare alcun modello ovvio.
Chris

Molto interessante, grazie. Ho installato cygwin, sg3-utils e ho funzionato sg_modes. Ho 0x2anella sezione "Capacità MM e stato meccanico (obsoleto)". Domani riceverò un nuovo disco Liteon e eseguirò nuovamente il test per vedere se ricevo un sottocanale coerente tra i dump.
Chris

1
La presenza della tabella codici non significa nulla, devi guardare il bit giusto (bit 1 del sesto byte, "Il flusso CD-DA è accurato"). Se hai due unità, prendi un CD audio, strappalo su entrambe le unità e confronta i dati. Dovresti vedere diversi offset in cui iniziano i dati effettivi diversi da zero. Probabilmente vedrai anche diversi offset per i file del sottocanale tra le due unità.
Dirkt

8

Secondo questo articolo di Wikipedia

Un frame comprende 33 byte, di cui 24 byte sono dati audio o utente, otto byte sono correzione errori (generati CIRC) e un byte è per il sottocodice.

Ciò suggerisce che non esiste una correzione degli errori per il canale secondario.

Ho anche trovato un'altra domanda altrove . Riguarda i CD audio ma penso che risolva il problema giusto:

Tutto quello che posso dire è che non sono mai riuscito a ottenere due letture del sottocanale identiche (file * .SUB) durante la lettura dallo stesso CD-DA / CD-TEXT. È normale quando si legge in modalità RAW perché i dati non sono corretti perché il formato CD-DA / CD-TEXT non porta EDC / ECC in tutti i sottocanali?

La risposta lì:

Solo i dati audio sono soggetti alla codifica Reed-Solomon (C1 e C2). I dati del canale del sottocodice (canali P ... W) non sono soggetti all'interleaving o alla protezione degli errori.

Mentre dirkt potrebbe avere ragione in un'altra risposta alla tua domanda che potresti non aver bisogno di .subfile, la risposta non risponde esplicitamente alla tua domanda:

Qual è la spiegazione di questo comportamento?

La mia risposta: ottieni .subfile diversi perché i sottocanali non hanno correzione degli errori. Gli errori di lettura vengono corretti (o almeno rilevati) durante la lettura dei dati audio o dell'utente, ma un errore di lettura può passare così com'è quando si verifica nel bit del canale secondario. Durante una sessione di lettura potrebbero comparire errori particolari dovuti a graffi o polvere, non durante un'altra sessione, ecc., Quindi .subfile diversi.


Risposta espansa per rispondere al commento:

Ho due copie di questo disco uno in ottime condizioni (nessun graffio visibile) e il comportamento è sempre lo stesso. Ho anche altri vecchi CD-ROM di gioco nelle peggiori condizioni che hanno .subfile coerenti su più dump.

Sospetto (purtroppo senza prove concrete) che diversi CD potrebbero essere stati prodotti con qualità diversa. Nel caso in cui i sottocanali non contino, il disco di qualità inferiore potrebbe comunque superare i test di qualità progettati per rilevare solo l'incoerenza dei dati. Oppure può essere semplicemente una questione probabilistica: un disco ha i suoi punti deboli (un po 'che fornisce letture incoerenti) in cui la correzione degli errori può risolverlo; un altro capita di averlo nell'area del sottocanale.

Uno di questi bit del sottocanale è sufficiente per darti diversi checksum, mentre anche migliaia di bit "indecisi" nell'area dei dati dell'utente possono essere silenziosamente corretti quando è necessario, se solo sono abbastanza distribuiti, quindi l'algoritmo di correzione degli errori si occupa di non troppo- molti di loro alla volta.


Risposta espansa in risposta ai risultati di KProbe 2.

Per quanto ne so, gli errori C1 sono consentiti (in parte) in quanto vengono corretti in modo silenzioso (di più qui ). Questa correzione funziona a causa dei bit di correzione degli errori. Come ho detto prima, i sottocanali non hanno una tale ridondanza in generale ( dirkt menziona la correzione degli errori CRC sottocanali Q ma questo non cambia molto nelle mie conclusioni). Inoltre, se l'errore si verifica lì, non c'è modo di conoscerlo, a meno che non si sappia in anticipo quali siano i dati del canale secondario corretti.

Quindi hai avuto un totale di 1855 errori che conosci. Ripeti il ​​test (seriamente, fallo!) E potresti avere ad esempio 1790 errori; o 1892. Eppure l'output corretto è lo stesso ogni volta che leggi.

Se esiste un bit di sottocanale per ogni 32 bit di dati, allora dico che probabilmente hai circa 1855/32 bit di sottocanale che sono stati letti con errore non rilevato. Sono circa 58 bit. Bene, quasi, perché grazie al CRC sotto-canale Q alcuni di questi errori possono essere rilevati almeno. Poiché Q è uno degli otto sottocanali, stimo che ti rimangono circa 50 bit errati in altri sottocanali. La prossima volta che leggi potresti ottenere alcuni di questi bit senza errori e alcuni nuovi errori del sottocanale altrove. Quindi otterrai .subfile diversi . E ancora non saprai con certezza quale di quei bit è stato letto correttamente la prima volta o la seconda.


Prima di tutto grazie per la tua risposta, capisco che la condizione media è da prendere in considerazione, ma ho due copie di questo disco uno in ottime condizioni (nessun graffio visibile) e il comportamento è sempre lo stesso. Ho anche altri vecchi CD-ROM di gioco nelle peggiori condizioni che hanno .subfile coerenti su più dump. Sono consapevole che non ho bisogno del canale secondario dato che il gioco non è protetto, sto ponendo questa domanda per curiosità tecnica :).
Chris

1
@Christophe Ho ampliato la mia risposta.
Kamil Maciorowski il

Capisco. Penso che potrebbe essere interessante avere informazioni di errore per il supporto, ho ordinato un disco LiteH iHAS124 e userò kprobe2 per verificarlo. Dovrei avere aggiornamenti su questo domani.
Chris

Ho aggiunto il risultato della scansione dell'errore C1 alla mia domanda, sembra essere buono, il massimo è 25.
Chris

1
@Christophe Ho ampliato di nuovo la mia risposta.
Kamil Maciorowski,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.