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 и использован при сборке.
кул! откуда инфу взял? последние 150 секторов образа, включая лок-сектор? у меня в принципе есть такая утилита, тока она туда 08 загоняет во все сектора но карта файлов в ней есть(так как она может собрать образ из файлов), так что поправить недолго будет.
Будем ждать эту утилиту Chook! На просторах сети валяется очень много кривых образов (нафига их пересобирают и т.д.)
А зачем раскрывать секреты CD диска для PS2? Как-то баянисто. Ромка тоже однажды писал про EFM защиту CD-диска, про DVD нигде ни слова.
Novaspace, я написал это для того чтобы выразить свою точку зрения о понятии "правильный" образ и что в это входит. Я считаю правильным тот образ который содержит правильные секции Data в секторах, а все остальное - это метод упаковки. Именно то что считаем моя утилита GetMD5. А также для того чтобы хоть как-то помочь людям разобраться что значит правильный и кривой образ диска. Да и не секреты это, а просто описание частного случая Моды 2 формы 1 для ПС2. 1 фрейм - 1 сектор.
Это актуально для вашей деятельности по переводу? То есть разные MD5 одних и тех же PS2-CD-образов мешают их дерусить? В смысле, кривые (по-вашему) образы попросту не идут на PS2 ? (Извиняюсь за назойливость, не думал, что PS2-CD это так трудно)
Novaspace, кривость бывает разного типа. Как правило это еще зависит от чипа, некоторые жуют и Моду 1 даже.
Если кому интересно - вот моя точка зрения: Итак точные образы могут быть лишь те которые являются копиями оригинала, и имеют правилное содержание всех блоков. Сверять точные образы стоит с известным ресурсом redump.org, либо самим снимать точные дампы. В случае если это невозможно и имеется лишь англ образ неизвестного происхождения, его и принять за точный, до появления копии с оригинала. НЕ вижу пролемы с разным заполнением SubHeader, лично я юзаю свою старую утилиту по сбору 2048 секторов, а затем прогоняю образ через iso2raw и фиксю до точного через rdko. Ибо если ты просто не будешь фиксить собранные образы, то получится еще больше неточных дампов, ровно по количеству дерусов. Таким образом дерус ПС2-СД ничем не отличается от деруса ПС2-ДВД, лишь предварительной перегонки Raw2iso, затем дерус, затем iso2raw + rdko. Либо исключением из цепочки ненужного элемента. Как вариант функции сторонних утилит можно выполнить и в своей программе.
Grey Fox, ну теперь новый сборщик будет из внешнего файла брать СубХеадеры, и РДКО больше не нужен станет. Я упрощу жизнь Плюс можно написать тулзху которая будет выдирать СубХеадер с оригинала, а не только создавать на основе содержимого диска.
Ну в приципе как вариант. Можешь даже цеплять этот файл к основному делта файлу. Но что ты будешь делать если образы таки будут отличаться? Оригинал и тот что ты собрал, при условии что "оригинал" это не точная копия диска, а инет версия. В этом случае ты будешь создавать "якобы" более правильную версию и ее распространять посредством деруса. А это не есть гут.