Лазерные диски

  35790931     

третий


Если все сделано правильно и программно/аппаратное обеспечение во всей своей совокупности работает нормально, на жестком диске должны образоваться три файла: IMAGE. CCD, – несущий в себе содержимое Q-канала подкода Lead-In области или, попросту говоря, TOC; IMAGE. IMG – "сырой" образ диска со всеми секторами от 00:00:02 до "сколько-на-диске-есть-там" и IMAGE. SUB – содержимое полей подкода "программной" части диска. Последний файл, в принципе, может и отсутствовать (он создается только если взведена галочка "Чтение субканалов из треков с данными"), но это некритично, т. к. сейчас нас в первую очередь интересуют не каналы подкода, а сам TOC! Откроем файл IMAGE.CCD в любом текстовом редакторе и попытаемся перевести расклад геометрии диска на человеческий язык.



[CloneCD]            ; данные о Clone CD
Version=3            ; версия Clone CD. Идет лесом
   
[Disc]               ; данные диска
TocEntries=12        ; кол-во элементов TOC'a
Sessions=2           ; кол-во сессий = 2
DataTracksScrambled=0      ; поле DVD (см. inf-8090), для CD эта информация лишена смысла
CDTextLength=0             ; CD-Text'a в полях подкода Lead-in области нету
     
[Session 1]          ; данные сессии 1
PreGapMode=1         ; тип трека Mode 1(трек с данными, 2048 байт данных)
PreGapSubC=0         ; данных подканала – нет
     
[Session 2]           ; данные сессии 2
PreGapMode=1          ; тип трека Mode 1(трек с данными, 2048 байт данных)
PreGapSubC=0          ; данных подканала – нет
     
[Entry 0]            ; данные элемента TOC'a No.0
Session=1             ; элемент сессии 1
Point=0xa0           ; номер первого трека сессии 1 в PMin/тип диска в PSec
ADR=0x01             ; q-Mode == 1
Control=0x04         ; диск с данными, запрещенный ;-) для копирования
TrackNo=0             ; трек, который мы сейчас читаем – это Lead-in трек (т.е. TOC)
AMin=0               ; \
ASec=0               ;   + абсолютный адрес текущего трека
AFrame=0             ; /
ALBA=-150            ; LBA-адрес текущего трека
Zero=0               ; это поле должно быть равно нулю, как оно и есть
PMin=1               ; номер первого трека сессии 1
PSec=0               ; тип диска CD-DA и CD-ROM диск в Mode 1
PFrame=0             ; не несет никакой полезной информации
PLBA=4350            ; номер трека представленный CloneCD как LBA-адрес, т.е. чушь
     
[Entry 1]            ; данные элемента TOC'a No.1
Session=1            ; элемент сессии 1
Point=0xa1           ; номер последнего трека сессии 1 в PMin
ADR=0x01             ; q-Mode == 1
Control=0x04         ; диск с данными, запрещенный ;-) для копирования
TrackNo=0            ; трек, который мы сейчас читаем – это Lead-in трек (т.е. TOC)
AMin=0               ; \
ASec=0               ;   + абсолютный адрес текущего трека
AFrame=0             ; /
ALBA=-150            ; LBA-адрес текущего трека
Zero=0               ; это поле должно быть равно нулю, как оно и есть
PMin=1               ; номер последнего трека сессии 1 (в сессии только один трек)
PSec=0               ; не несет никакой полезной информации
PFrame=0             ; не несет никакой полезной информации
PLBA=4350            ; номер трека представленный CloneCD как LBA-адрес, т.е. чушь
     
[Entry 2]             ; данные элемента TOC'a No.2
Session=1            ; элемент сессии 1
Point=0xa2           ; положение Lead-out области в PMin:PSec:PFrame
ADR=0x01             ; q-Mode == 1
Control=0x04         ; диск с данными, запрещенный ;-) для копирования
TrackNo=0             ; трек, который мы сейчас читаем – это Lead-in трек (т.е. TOC)
AMin=0               ; \
ASec=0                ;   + - абсолютный адрес текущего трека
AFrame=0             ; /
ALBA=-150            ; LBA-адрес текущего трека
Zero=0               ; это поле должно быть равно нулю, как оно и есть
PMin=0            ; \
PSec=29          ;  + - абсолютный адрес Lead-out области сессии 1
PFrame=33        ; /
PLBA=2058         ; LBA-адрес Lead-out области сессии 1
     
[Entry 3]            ; данные элемента TOC'a No.3
Session=1             ; элемент сессии 1
Point=0x01            ; данные трека 1 сессии 1
ADR=0x01              ; q-Mode == 1
Control=0x04          ; диск с данными, запрещенный ;-) для копирования
TrackNo=0             ; трек, который мы сейчас читаем – это Lead-in трек (т.е. TOC)
AMin=0                ; \
ASec=0               ;   + - абсолютный адрес текущего трека
AFrame=0              ; /
ALBA=-150             ; LBA-адрес текущего трека
Zero=0                ; это поле должно быть равно нулю, как оно и есть
PMin=0            ; \
PSec=2            ;  + - абсолютный адрес начала трека 1 сессии 1
PFrame=0          ; /
PLBA=0            ; LBA-адрес начала трека 1 сессии 1
     
[Entry 4]            ; данные элемента TOC'a No.4
Session=1            ; элемент сессии 1
Point=0xb0           ; позиция следующий записываемой области в AMin:ASec:AFrame
ADR=0x05              ; q-Mode == 1
Control=0x04          ; диск с данными, запрещенный ;-) для копирования
TrackNo=0             ; трек, который мы сейчас читаем – это Lead-in трек (т.е. TOC)
AMin=2                ; \
ASec=59                    ;   + - абсолютный адрес следующей записываемой области
AFrame=33            ; /
ALBA=13308            ; LBA-адрес следующей записываемой области
Zero=3                ; кол-во pointer'овв Mode 5
PMin=22                    ; \
PSec=14                    ;   + - абсолютный адрес максимальной записываемой области
PFrame=34            ; /
PLBA=99934            ; LBA-адрес максимальной записываемой области
     
[Entry 5]            ; данные элемента TOC'a No.5
Session=1             ; элемент сессии 1
Point=0xc0           ; стартовый адрес Lead-in области Hybrid диска (если он есть)
ADR=0x05              ; Mode 5 (Оранжевая книга)
Control=0x04         ; диск с данными, запрещенный ;-) для копирования
TrackNo=0            ; трек, который мы сейчас читаем – это Lead-in трек (т.е. TOC)
AMin=162             ; рекомендуемая мощность лазера для записи
ASec=128              ; Application code
AFrame=140           ; зарезервировано
ALBA=288590          ; LBA-"адрес" трех предыдущих полей
Zero=0               ; зарезервировано
PMin=97                    ; \
PSec=27                    ;   + - абсолютный адрес Lead-in области Hybrid диска
PFrame=21            ; /    (адрес лежит за пределами диска, т.е. Hybrid-диска нет)
PLBA=-11604          ; LBA-адрес Lead-in области Hybrid'a(вычислен с переполнением)
     
[Entry 6]             ; данные элемента TOC'a No.6
Session=1            ; элемент сессии 1
Point=0xc1           ; копия ATIP-информации
ADR=0x05              ; -+
Control=0x04         ; -+
TrackNo=0            ; -+
AMin=4               ; -+
ASec=120             ; -+
AFrame=96             ; -+
ALBA=26946           ; -+ - ATIP информация
Zero=0                ; -+
PMin=0               ; -+
PSec=0               ; -+
PFrame=0              ; -+
PLBA=-150            ; -+
     
[Entry 7]             ; данныеэлемента TOC'a No.7
Session=2            ; элемент сессии 2 (вот мы и добрались до сессии 2!)
Point=0xa0            ; номер первого трека сессии 2 в PMin/тип диска в PSec
ADR=0x01              ; q-Mode == 1
Control=0x04         ; диск с данными, запрещенный ;-) для копирования
TrackNo=0             ; трек, который мы сейчас читаем – это Lead-in трек (т.е. TOC)
AMin=0               ; \
ASec=0                ;   + - абсолютный адрес текущего трека
AFrame=0             ; /
ALBA=-150            ; LBA-адрес текущего трека
Zero=0               ; это поле должно быть равно нулю, как оно и есть
PMin=2               ; номер первого трека сессии 2 (нумерация треков сквозная!)
PSec=0                ; тип диска CD-DA и CD-ROM диск в Mode 1
PFrame=0             ; не несет никакой полезной информации
PLBA=8850           ; номер трека представленный CloneCD как LBA-адрес, т.е. чушь
     
[Entry 8]             ; данные элемента TOC'a No.8
Session=2             ; элемент сессии 2
Point=0xa1           ; номер последнего трека сессии 2 в PMin
ADR=0x01             ; q-Mode == 1
Control=0x04          ; диск с данными, запрещенный ;-) для копирования
TrackNo=0            ; трек, который мы сейчас читаем – это Lead-in трек (т.е. TOC)
AMin=0               ; \
ASec=0                ;   + - абсолютный адрес текущего трека
AFrame=0             ; /
ALBA=-150            ; LBA-адрес текущего трека
Zero=0               ; это поле должно быть равно нулю, как оно и есть
PMin=2               ; номер последнего трека сессии 2 (в сессии только один трек)
PSec=0               ; не несет никакой полезной информации
PFrame=0              ; не несет никакой полезной информации
PLBA=8850            ; номер трека представленный CloneCD как LBA-адрес, т.е. чушь
     
[Entry 9]             ; данные элемента TOC'a No.9
Session=2            ; элемент сессии 2
Point=0xa2           ; положение Lead-out области в PMin:PSec:PFrame
ADR=0x01             ; q-Mode == 1
Control=0x04          ; диск с данными, запрещенный ;-) для копирования
TrackNo=0            ; трек, который мы сейчас читаем – это Lead-in трек (т.е. TOC)
AMin=0                ; \
ASec=0                ;   + - абсолютный адрес текущего трека
AFrame=0             ; /
ALBA=-150             ; LBA-адрес текущего трека
Zero=0                ; это поле должно быть равно нулю, как оно и есть
PMin=3           ; \
PSec=24             ;  + - абсолютный адрес Lead-out области сессии 2
PFrame=23        ; /
PLBA=15173       ; LBA-адрес Lead-out области сессии 2
     
[Entry 10]            ; данные элемента TOC'a No.10
Session=2            ; элемент сессии 2
Point=0x02            ; данные трека 2 сессии 2
ADR=0x01             ; q-Mode == 1
Control=0x04        ; диск с данными, запрещенный ;-) для копирования
TrackNo=0           ; трек, который мы сейчас читаем – это Lead-in трек (т.е. TOC)
AMin=0               ; \
ASec=0                ;   + - абсолютный адрес текущего трека
AFrame=0             ; /
ALBA=-150            ; LBA-адрес текущего трека
Zero=0               ; это поле должно быть равно нулю, как оно и есть
PMin=3              ; \
PSec=1              ;  + - абсолютный адрес начала трека 2 сессии 2
PFrame=33           ; /
PLBA=13458          ; LBA-адрес начала трека 2 сессии 2
     
[Entry 11]            ; данные элемента TOC'a No.11
Session=2            ; элемент сессии 2
Point=0xb0           ; адрес следующей записываемой области в AMin:ASec:AFrame
ADR=0x05             ; Mode 5
Control=0x04          ; диск с данными, запрещенный ;-) для копирования
TrackNo=0            ; трек, который мы сейчас читаем – это Lead-in трек (т.е. TOC)
AMin=4                ; \
ASec=54                    ;   + - абсолютный адрес следующей записываемой области
AFrame=23             ; /
ALBA=21923           ; LBA-адрес следующей записываемой области
Zero=1                ; кол-во pointer'ов Mode 5
PMin=22              ; \
PSec=14              ;  + - абсолютный адрес последней возможной Lead-out области
PFrame=34        ; / ( на самом диске написано 23мин, это ж как надо округлять 22:14:34)
PLBA=99934       ; LBA-адрес последней возможной Lead-out области
     
[TRACK 1]  ; данные трека 1
MODE=1  ; режим Mode 1
INDEX 1=0   ; post-gap?
     
[TRACK 2]   ; данные трека 2
MODE=1    ; режим Mode 1
INDEX 1=0    ; post-gap?
<
Листинг 1 Содержимое неискаженного TOC'a в сыром виде. Обобщенно говоря, диск содержит две секции – по одному треку каждая. Абсолютный адрес начала первого трека – 00:00:02, абсолютный адрес Lead-out области первой сессии – 00:29:33 (адрес последнего сектора трека на две секунды короче), абсолютный адрес начала второго трека – 03:01:33, а абсолютный адрес Lead-out второй сессии – 03:24:33. Максимально достижимая емкость диска – 22:14:34 (хотя на самом диске и написано, что он 23-минутный)
Давайте теперь немного поиздевается над TOC'ом и увеличим стартовый адрес первого трека так, чтобы он вышел далеко за пределы первой сессии и попал… ну, собственно, куда-нибудь он все равно попадет. Чтобы быстро отыскать соответствующую ему запись, воспользуется контекстным поиском. Жмем <F7> и вводим "point=0x1":

[Entry 3] ; данные элемента TOC'a No.3
Session=1 ; элемент сессии 1
Point=0x01 ; данные трека 1 сессии 1
ADR=0x01 ; q-Mode == 1
Control=0x04 ; диск с данными, запрещенный ;-) для копирования
TrackNo=0 ; трек, который мы сейчас читаем - это Lead-in трек (т.е. TOC)
AMin=0 ; \
ASec=0 ; + - абсолютный адрес текущего трека
AFrame=0 ; /
ALBA=-150 ; LBA-адрес текущего трека
Zero=0 ; это поле должно быть равно нулю, как оно и есть
PMin=0 ; \
PSec=2 ; + - абсолютный адрес начала трека 1 сессии 1
PFrame=0 ; /
PLBA=0 ; LBA-адрес начала трека 1 сессии 1

Листинг 2 Атрибуты трека 1
Как мы видим, здесь присутствует как абсолютный, измеряемый в минутах/секундах/фреймах, так и LBA-адрес трека, представляющий собой не что иное, как порядковый номер сектора, считая от нуля. На самом деле, LBA-адрес – это "отсебятина", добавляемая в файл самим Clone CD и в TOC'е LBA-адрес не храниться. Судя по всему, Clone CD вычисляет LBA-адрес, исходя из соображений удобства (работать с LBA-адресацией, действительно, намного комфортнее). Однако при внесении каких-либо изменений в CCD-файл, за согласованием обоих типов адресов нам придется следить самостоятельно. Для перевода абсолютных адресов в LBA можно воспользоваться следующей формулой: Logical Sector Address = ((( Minute * 60) + Seconds) * 75 + Frame) – 150.


Ниже представлен вид атрибутов трека 1 до и после искажения:

[Entry 3]   [Entry 3]
Session=1   Session=1
Point=0x01   Point=0x01
ADR=0x01   ADR=0x01
Control=0x04   Control=0x04
TrackNo=0   TrackNo=0
AMin=0   AMin=0
ASec=0   ASec=0
AFrame=0   AFrame=0
ALBA=-150   ALBA=-150
Zero=0   Zero=0
PMin=0 -> PMin=10
PSec=2 -> PSec=2
PFrame=0 -> PFrame=0
PLBA=0 -> PLBA=-1

Листинг 3 Атрибуты трека 1 до искажения (слева) и после искажения (справа)
На самом деле коварный автор схитрил и вместо вычислений LBA-адреса заложился на тот факт, что его версия Clone CD всегда использует абсолютные адреса, а LBA – игнорирует. Выбор абсолютного адреса первого трека – произвольный, но осуществленный с таким расчетом, чтобы искаженный адрес гарантированно вылетал за границы первой сессии, Lead-out область которой находится по адресу 00:29:33 (см. элемент TOC'а №2).

Содержание раздела