Chook
Дерусификато
- Регистрация
- 26 Дек 2005
- Сообщения
- 1.677
- Реакции
- 85
PS2 использует Mode 2 Form 1 формат СД дисков. Также этот формат Yellow Book называют CD-ROM XA Form 2.
На PS2 нет игр у которых имеются аудио треки.
Рассмотрим структуру сектора такого диска.
Поля, их размер в байтах и последовательность следующая.
Sync(12) Header(4) SubHeader(8) Data(2048) EDC(4) ECC(276)
Сразу видно, что размер сектора с точки зрения хранимой информации - 2048байт. А все остальное - это служебная информация.
Разберемся с этим по порядку.
Sync(12) - это синхропоследовательность по которой привод определяет начало сектора. Это всегда одни и теже 12 байт
0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0 и никаких вариантов.
Header(4) - содержит в себе точный адрес сектора в формате MSF. Первые 3 байта содержат фреймы, секунды и минуты текущего сектора от начала диска. Причем отсчет начинается с 2х секунд. Данные хранятся в десятичном виде при этом 1 минута = 60 секунд. 1 секунда = 75 фреймов. Последний 4й байт определяет Mode в котором записан сектор. Как уже говорилось ранее CD диски для PS2 все должны быть в Mode 2 Form 1.
SubHeader(8) - На самом деле это поле длинной 4 байта повторенное дважды в будущем может указывать на принадлежность конкретного сектора каналу Audio или Video, указывать формат кодирования, номер фрагмента и так далее, что должно позволить читающей диск программе определить, на какой декодер направлять данные из конкретного сектора, что в свою очередь должно обеспечить видимость "одновременного" чтения разных типов данных с одной дорожки диска (так называемая Mixed mode).
Data(2048) - пользовательские данные. Это то что программы читают из каждого сектора.
EDC(4) и ECC(276) это Error Detection Code/Error Correction Code - коды обнаружения и исправления ошибок. Единственное реальное применение этих кодов - обнаружение ошибки в считанных данных драйвером некоего устройства, не умеющего выставлять флаг ошибки пpи сбое коppекции Reed-Solomon. Так как при сбое коррекции Reed-Solomon (уровни C1 и C2) ошибок обычно столько, что ECC не справляются с коррекцией, а при успешной Reed-Solomon коррекции они вообще бесполезны - так как все ошибки уже исправлены.
Теперь давайте оценим что есть что с точки зрения правильности образа. Учтем при этом что CD диск содержит лишь обычные данные - нет ни аудио треков, ни видеотреков. Итак:
Sync - это поле всегда одинаково, оно не может быть иным по определению.
Header - В принципе каждый байт этого поля описан и жестко задан. Тут разногласий быть не может.
Data - это сами данные файлов игры и таблицы содержания диска.
EDC и ECC - строятся на основе остальных данных сектора. Как уже известно, PS2 диски не содержат защиты основанной на "нечитающихся" секторах и эти 2 поля не могут содержать "сюрпризов".
Итого остается одно "злосчастное" поле SubHeader которое приставкой не используется, и может содержать любые данные. Именно из-за этого поля не сходятся "обычные" MD5 суммы посчитанные по всему содержимому CD образа. Программы преобразования записывают в SubHeader то что им хочется. Например UltraISO зануляет все содержимое, а ISO2RAW записывает 0,0,8,0 два раза. Предполагается что 4 байта хранят следующую информацию Номер файла, Номер канала, SubMode и тип данных.
Когда такой бардак, то остается обратиться к первоисточнику, то есть к той программе которая создает образ CD диска для PS2, то есть к CD/DVD Generator. Исследуя результаты его работы мы быстро выясняем, как по мнению Sony должны быть заполнены поля SubHeader. Вот алгоритм заполнения.
1. Все что не попадает под следующие 2 пункта заполняется 0,0,8,0
2. Последний сектор каждого файла в SubHeader содержит 0,0,0x89,0
3. Для последних 150 нулевых буферных секторов значение должно быть 0,0,0,0
Ну вот в принципе и все. Если образ диска создавали не в CD/DVD Generator, то содержимое поля SubHeader может быть иным. Если вы скачали образ CD в котором отличаются поля SubHeader от того что описано в алгоритме, то это значит 3 вещи.
1 - возможно оригинальный образ собирали не в CD/DVD Generator.
2 - возможно образ сняли криво, а потом конвертанули в правильный формат.
3 - какой-то мудак собрал образ сам в UltraISO или другой программе из файлов с игрового диска.
PS: в моей новой программе сборки CompileISO выполняются только пункты 1 и 3 по заполнению SubHeader. Для того чтобы отработал и 2й пункт нужно разбирать пофайловое содержимое диска, что я считаю неоправданным. Для тех кому всеже очень хочется получить 100% правильный образ будет выпущена дополнительная утилита которая по LBA файлов создаст дополнительный файл, который будет подхвачен CompileISO и использован при сборке.
На PS2 нет игр у которых имеются аудио треки.
Рассмотрим структуру сектора такого диска.
Поля, их размер в байтах и последовательность следующая.
Sync(12) Header(4) SubHeader(8) Data(2048) EDC(4) ECC(276)
Сразу видно, что размер сектора с точки зрения хранимой информации - 2048байт. А все остальное - это служебная информация.
Разберемся с этим по порядку.
Sync(12) - это синхропоследовательность по которой привод определяет начало сектора. Это всегда одни и теже 12 байт
0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0 и никаких вариантов.
Header(4) - содержит в себе точный адрес сектора в формате MSF. Первые 3 байта содержат фреймы, секунды и минуты текущего сектора от начала диска. Причем отсчет начинается с 2х секунд. Данные хранятся в десятичном виде при этом 1 минута = 60 секунд. 1 секунда = 75 фреймов. Последний 4й байт определяет Mode в котором записан сектор. Как уже говорилось ранее CD диски для PS2 все должны быть в Mode 2 Form 1.
SubHeader(8) - На самом деле это поле длинной 4 байта повторенное дважды в будущем может указывать на принадлежность конкретного сектора каналу Audio или Video, указывать формат кодирования, номер фрагмента и так далее, что должно позволить читающей диск программе определить, на какой декодер направлять данные из конкретного сектора, что в свою очередь должно обеспечить видимость "одновременного" чтения разных типов данных с одной дорожки диска (так называемая Mixed mode).
Data(2048) - пользовательские данные. Это то что программы читают из каждого сектора.
EDC(4) и ECC(276) это Error Detection Code/Error Correction Code - коды обнаружения и исправления ошибок. Единственное реальное применение этих кодов - обнаружение ошибки в считанных данных драйвером некоего устройства, не умеющего выставлять флаг ошибки пpи сбое коppекции Reed-Solomon. Так как при сбое коррекции Reed-Solomon (уровни C1 и C2) ошибок обычно столько, что ECC не справляются с коррекцией, а при успешной Reed-Solomon коррекции они вообще бесполезны - так как все ошибки уже исправлены.
Теперь давайте оценим что есть что с точки зрения правильности образа. Учтем при этом что CD диск содержит лишь обычные данные - нет ни аудио треков, ни видеотреков. Итак:
Sync - это поле всегда одинаково, оно не может быть иным по определению.
Header - В принципе каждый байт этого поля описан и жестко задан. Тут разногласий быть не может.
Data - это сами данные файлов игры и таблицы содержания диска.
EDC и ECC - строятся на основе остальных данных сектора. Как уже известно, PS2 диски не содержат защиты основанной на "нечитающихся" секторах и эти 2 поля не могут содержать "сюрпризов".
Итого остается одно "злосчастное" поле SubHeader которое приставкой не используется, и может содержать любые данные. Именно из-за этого поля не сходятся "обычные" MD5 суммы посчитанные по всему содержимому CD образа. Программы преобразования записывают в SubHeader то что им хочется. Например UltraISO зануляет все содержимое, а ISO2RAW записывает 0,0,8,0 два раза. Предполагается что 4 байта хранят следующую информацию Номер файла, Номер канала, SubMode и тип данных.
Когда такой бардак, то остается обратиться к первоисточнику, то есть к той программе которая создает образ CD диска для PS2, то есть к CD/DVD Generator. Исследуя результаты его работы мы быстро выясняем, как по мнению Sony должны быть заполнены поля SubHeader. Вот алгоритм заполнения.
1. Все что не попадает под следующие 2 пункта заполняется 0,0,8,0
2. Последний сектор каждого файла в SubHeader содержит 0,0,0x89,0
3. Для последних 150 нулевых буферных секторов значение должно быть 0,0,0,0
Ну вот в принципе и все. Если образ диска создавали не в CD/DVD Generator, то содержимое поля SubHeader может быть иным. Если вы скачали образ CD в котором отличаются поля SubHeader от того что описано в алгоритме, то это значит 3 вещи.
1 - возможно оригинальный образ собирали не в CD/DVD Generator.
2 - возможно образ сняли криво, а потом конвертанули в правильный формат.
3 - какой-то мудак собрал образ сам в UltraISO или другой программе из файлов с игрового диска.
PS: в моей новой программе сборки CompileISO выполняются только пункты 1 и 3 по заполнению SubHeader. Для того чтобы отработал и 2й пункт нужно разбирать пофайловое содержимое диска, что я считаю неоправданным. Для тех кому всеже очень хочется получить 100% правильный образ будет выпущена дополнительная утилита которая по LBA файлов создаст дополнительный файл, который будет подхвачен CompileISO и использован при сборке.