третий
Если все сделано правильно и программно/аппаратное обеспечение во всей своей совокупности работает нормально, на жестком диске должны образоваться три файла: 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).
