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