Estou fazendo cópias de backup de jogos antigos com o CloneCD 5.3.3.0 no meu computador Windows 10 x64 com uma unidade Samsung SH-S223L.
Um deles é o Hellfire para PC (expansão Diablo 1):
- O disco tem um
COMPACT disc DATA STORAGE
logotipo - Número de série:
S0011770
- Código SID da fábrica:
IFPI 1218
- Código SID do CD-Master:
IFPI L032
- Data de criação do ISO 9660 PVD:
1997-11-18 16:30:00.00
Eu uso a recomendação de perfil do redump.org CloneCD:
[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
Até onde eu sei, o jogo não tem proteção, mas quando despejo o disco duas vezes, acabo com arquivos de subcanais diferentes ( .sub
). Os arquivos .ccd
e .img
são idênticos, apenas os .sub
diferentes, usei somas de verificação SHA1 e um editor hexadecimal para verificar isso.
Carreguei dois .sub
arquivos de despejo aqui .
Devo mencionar que possuo duas cópias deste disco e o comportamento é idêntico aos dois discos.
Também despejei várias outras mídias de CD-ROM, às vezes recebo esse comportamento, às vezes, o subcanal é consistente entre despejos.
Qual a explicação desse comportamento?
Editar:
Despejei o mesmo CD-ROM novamente com uma unidade Lite-On iH124-14 e vejo o mesmo comportamento ( .sub
arquivos diferentes ).
Também verifiquei a mídia quanto a erros no KProbe 2 e obtive o seguinte resultado:
Editar:
Parece que a condição do disco e / ou a falta de precisão da unidade, além do fato de o subcanal não possuir um mecanismo de controle de erros (exceto o canal Q), explica por que obtenho .sub
arquivos diferentes ao descarregar o mesmo meio várias vezes.
Devo mencionar que também adquiri uma unidade Plextor PX-712A e consegui obter .sub
arquivos consistentes em despejos usando o Disc Image Creator . Este software utiliza 0xD8
instruções em vez de 0xBE
instruções para ler o disco, resultando em imagens mais precisas. Apenas algumas unidades (principalmente o Plextor) suportam esta instrução.
Na verdade, também possuo duas cópias físicas deste CD-ROM que estou descarregando (mesmo número de série, mesmos códigos IFPI e mesmas informações gravadas a laser). Se eu despejar o mesmo disco várias vezes com o Disc Image Creator, obterá .sub
arquivos consistentes, mas não se despejar o primeiro disco e depois o segundo.
Eu acho que está relacionado às condições da mídia, já que uma delas tem alguns arranhões e mais erros de C1 / C2.
Respostas:
Os vários formatos de CD estão um pouco envolvidos, e as especificações oficiais ("livro vermelho" para CD de áudio, "livro amarelo" para CD de dados) não estão disponíveis gratuitamente. Mas você pode encontrar alguns detalhes nos padrões disponíveis, como o Ecma-130.
O CD de áudio original (também chamado de CD-DA) foi modelado no disco de vinil, o que significa que ele também usa uma faixa espiral de dados de áudio contínuos (o DVD posteriormente usou faixas circulares). Intercalados dentro desses dados de áudio de uma maneira muito complexa, existem 8 subcanais (P a W), dos quais o subcanal Q contém informações de tempo (literalmente em minutos / segundos / frações de segundos) e o número da faixa atual. Para o objetivo original, isso foi suficiente: para reprodução contínua, a lente foi ajustada levemente para seguir a pista. Para procurar, a lente se moveria ao decodificar o sub-canal Q até que o caminho certo fosse encontrado. Esse posicionamento é um pouco grosseiro, mas completamente adequado para ouvir música.
Ainda hoje, muitas unidades de CD de computador não podem posicionar a lente com precisão e sincronizar completamente o circuito de decodificação, de modo que a leitura das amostras de áudio comece na posição exata. É por isso que muitos programas de cópia de CD possuem um modo de "paranóia", onde fazem leituras sobrepostas e comparam os resultados para ajustar esse "tremor". Como parte do fluxo de áudio, o subcanal também está sujeito a instabilidade, e é por isso que você obtém arquivos de subcanais diferentes quando copia uma unidade de CD que não pode ser posicionada com precisão.
Quando a especificação CD de dados (CD-ROM) foi desenvolvida para estender a especificação CD-DA, a importância de endereçar e ler com precisão os dados foi reconhecida; portanto, o quadro de áudio de 2352 bytes foi subdividido em 12 bytes de sincronização e 4 bytes de cabeçalho (por o endereço do setor), deixando os 2336 bytes restantes para dados e um nível adicional de correção de erros. Usando esse esquema, os setores podem ser endereçados exatamente sem precisar confiar apenas nas informações do canal Q. Portanto, o efeito de tremulação não se aplica, você sempre obtém os mesmos dados quando despeja um CD-ROM e nenhuma inteligência adicional no despejo é necessária.
Edite com mais detalhes:
De acordo com o Ecma-130 , os dados são embaralhados em estágios: 24 bytes compõem um quadro F1 , os bytes de 106 desses quadros são distribuídos em 106 quadros F2 , que obtêm 8 bytes extras de correção de erros. Esses quadros, por sua vez, recebem um byte extra ("byte de controle") para transformá-los em quadros F3 . O byte extra contém as informações do sub-canal (um sub-canal para cada posição de bit). Um grupo de 98 quadros F3 é chamado de seção , e os 98 bytes de controle associados contêm dois bytes de sincronização e 96 bytes de dados reais do subcanal. Além disso, o subcanal Q possui 16 bits de correção de erro CRC nesses 96 bits.
A idéia por trás disso é distribuir dados na superfície do disco de maneira que arranhões, sujeira etc. não afetem muitos bits contínuos, portanto a correção de erros pode recuperar os dados perdidos, desde que os arranhões não sejam muito grande.
Como conseqüência, o hardware da unidade de CD precisa ler uma seção completa após reposicionar a lente para descobrir onde ela está no fluxo de dados. A decodificação dos vários estágios é feita pelo hardware, que precisa se sincronizar com os 2 bytes de sincronização no fluxo de controle-byte. Todos os modelos de unidades de CD precisam de uma quantidade de tempo diferente para sincronizar em comparação com outros modelos (você pode testar isso lendo em duas unidades diferentes, se as tiver), dependendo de como o hardware é implementado. Além disso, muitos modelos nem sempre levam exatamente o mesmo tempo para sincronizar, para que possam iniciar um pouco mais cedo ou mais tarde e gerar os dados decodificados nem sempre no mesmo byte.
Portanto, quando o programa de
READ CD
extração emite um comando (0xBE), ele fornece um comprimento de transferência e um endereço inicial (ou melhor, hora do canal Q). O drive posiciona a lente, decodifica os quadros, extrai o canal Q, compara o tempo e, quando encontra o tempo correto, começa a transferir. Essa transferência nem sempre começa no mesmo byte explicado acima, portanto, o resultado de váriosREAD CD
comandos pode ser alternado entre si. É por isso que você vê diferentes arquivos de sub-canais do seu estripador.Dependendo do hardware e das circunstâncias em que a lente é ajustada, é mais ou menos aleatório se a transferência iniciar algumas amostras mais cedo ou mais tarde. Portanto, o único padrão que você verá nos resultados é que os turnos são múltiplos da duração da transferência.
Alguns modelos de unidades têm hardware preciso, que sempre inicia a transferência ao mesmo tempo. O padrão define um pouco na página 0x2a do modo ("Recursos de CD / DVD e página de status mecânico") que indica se esse é o caso, mas a experiência do mundo real mostra que algumas unidades que afirmam ser exatas não são de fato. (No Linux, você pode usar
sg_modes
osg3-utiles
pacote para ler as páginas de modo, não sei qual ferramenta usar no Windows).fonte
.sub
arquivos na minha pergunta. Comparei-o com um editor hexadecimal e você está certo de que os dados foram alterados, mas não consigo encontrar nenhum padrão óbvio.sg_modes
. Eu tenho0x2a
na seção "Recursos MM e status mecânico (obsoleto)". Amanhã, receberei uma nova unidade Liteon e testarei novamente para ver se recebo um subcanal consistente nos despejos.De acordo com este artigo da Wikipedia
Isso sugere que não há correção de erros para o sub-canal.
Eu também encontrei outra pergunta em outro lugar . É sobre CDs de áudio, mas acho que ele resolve o problema certo:
A resposta lá:
Embora o dirkt possa estar certo em outra resposta à sua pergunta e que talvez você não precise de
.sub
arquivos, a resposta não aborda explicitamente sua pergunta:Minha resposta: você obtém
.sub
arquivos diferentes porque os subcanais não têm correção de erros. Os erros de leitura são corrigidos (ou pelo menos detectados) durante a leitura de dados de áudio ou do usuário, mas um erro de leitura pode passar como está quando ocorre no bit do subcanal. Erros específicos devido a arranhões ou poeira podem aparecer durante uma sessão de leitura e não durante outra etc. - portanto, os.sub
arquivos são diferentes.Resposta expandida para abordar o comentário:
Suspeito (infelizmente sem evidências concretas) que CDs diferentes possam ter sido fabricados com qualidade diferente. Em um caso em que os subcanais não importam, o disco de qualidade inferior ainda pode passar nos testes de qualidade projetados para detectar apenas inconsistência de dados. Ou pode ser simplesmente uma questão probabilística: um disco tem seus pontos fracos (um pouco que fornece leituras inconsistentes) onde a correção de erros pode corrigi-lo; outro acontece tê-lo na área do sub-canal.
Um desses bits do subcanal é suficiente para fornecer somas de verificação diferentes, enquanto até milhares de bits "indecisos" na área de dados do usuário podem ser corrigidos silenciosamente quando necessário, se forem distribuídos o suficiente, de modo que o algoritmo de correção de erros lida com não-muito- muitos deles de cada vez.
Resposta expandida em reação aos resultados do KProbe 2.
Tanto quanto sei, os erros C1 são permitidos (em certa quantidade) porque são silenciosamente corrigidos ( mais aqui ). Essa correção funciona devido a bits de correção de erros. Como eu disse antes, os subcanais não têm essa redundância em geral (o dirkt menciona a correção de erros do CRC do subcanal Q, mas isso não muda muito na minha conclusão). Além disso, se o erro ocorrer, não há como conhecê-lo, a menos que você saiba de antemão quais são os dados corretos do subcanal.
Então você teve um total de 1855 erros que conhece. Repita o teste (sério, faça!) E você pode ter, por exemplo, erros 1790; ou 1892. No entanto, a saída corrigida é a mesma sempre que você lê.
Se houver um bit de subcanal para cada 32 bits de dados, digo que você provavelmente possui cerca de 1855/32 bits de subcanais que foram lidos com erro não detectado. Isso é cerca de 58 bits. Bem, quase porque, graças ao CRC do sub-canal Q, alguns desses erros podem ser detectados pelo menos. Como Q é um dos oito subcanais, estimo que você tenha cerca de 50 bits errados em outros subcanais. Da próxima vez que você ler, poderá obter alguns desses bits sem erros e alguns novos erros de subcanais em outros lugares. Então você receberá um
.sub
arquivo diferente . E ainda assim você não saberá com certeza quais desses bits foram lidos corretamente na primeira ou na segunda vez.fonte
.sub
arquivos consistentes em vários despejos. Estou ciente de que não preciso do sub-canal, já que o jogo não está protegido, estou fazendo essa pergunta por curiosidade técnica :).