PS2 Содержимое сектора CD диска для PS2

Тема в разделе "PlayStation 5", создана пользователем Chook, 29 июл 2008.

  1. Chook

    Chook Дерусификато

    Сообщения:
    1.677
    Симпатии:
    85
    Баллы:
    93
    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 и использован при сборке.
     
    The REAL нравится это.
  2. madmonkey

    madmonkey Well-Known Member

    Сообщения:
    605
    Симпатии:
    64
    Баллы:
    78
    кул! откуда инфу взял?
    последние 150 секторов образа, включая лок-сектор?
    у меня в принципе есть такая утилита, тока она туда 08 загоняет во все сектора :) но карта файлов в ней есть(так как она может собрать образ из файлов), так что поправить недолго будет.
     
  3. Chook

    Chook Дерусификато

    Сообщения:
    1.677
    Симпатии:
    85
    Баллы:
    93
    madmonkey, у СД диска нет ЛокСектора. Инфу взял из полевых испытаний :)
    Просто решил добить этот вопрос :)
     
  4. SOL

    SOL Well-Known Member

    Сообщения:
    79
    Симпатии:
    4
    Баллы:
    61
    Будем ждать эту утилиту Chook! На просторах сети валяется очень много кривых образов (нафига их пересобирают и т.д.) :(
     
  5. Novaspace

    Novaspace Well-Known Member

    Сообщения:
    258
    Симпатии:
    13
    Баллы:
    63
    А зачем раскрывать секреты CD диска для PS2? Как-то баянисто. Ромка тоже однажды писал про EFM защиту CD-диска, про DVD нигде ни слова.
     
  6. Novaspace

    Novaspace Well-Known Member

    Сообщения:
    258
    Симпатии:
    13
    Баллы:
    63
    И один вопрос: сколько секторов приходится на один фрейм, 1/75ю секунды?
     
    The REAL нравится это.
  7. madmonkey

    madmonkey Well-Known Member

    Сообщения:
    605
    Симпатии:
    64
    Баллы:
    78
    ты просто не втыкнул что к чему.

    фрейм это и есть сектор.
     
    The REAL нравится это.
  8. Chook

    Chook Дерусификато

    Сообщения:
    1.677
    Симпатии:
    85
    Баллы:
    93
    Novaspace, я написал это для того чтобы выразить свою точку зрения о понятии "правильный" образ и что в это входит. Я считаю правильным тот образ который содержит правильные секции Data в секторах, а все остальное - это метод упаковки. Именно то что считаем моя утилита GetMD5.
    А также для того чтобы хоть как-то помочь людям разобраться что значит правильный и кривой образ диска.

    Да и не секреты это, а просто описание частного случая Моды 2 формы 1 для ПС2.

    1 фрейм - 1 сектор.
     
  9. Novaspace

    Novaspace Well-Known Member

    Сообщения:
    258
    Симпатии:
    13
    Баллы:
    63
    Это актуально для вашей деятельности по переводу? То есть разные MD5 одних и тех же PS2-CD-образов мешают их дерусить?
    В смысле, кривые (по-вашему) образы попросту не идут на PS2 ?
    (Извиняюсь за назойливость, не думал, что PS2-CD это так трудно)
     
  10. Chook

    Chook Дерусификато

    Сообщения:
    1.677
    Симпатии:
    85
    Баллы:
    93
    Novaspace, кривость бывает разного типа. Как правило это еще зависит от чипа, некоторые жуют и Моду 1 даже.
     
  11. Grey Fox

    Grey Fox Well-Known Member

    Сообщения:
    927
    Симпатии:
    35
    Баллы:
    73
    Если кому интересно - вот моя точка зрения:
    Итак точные образы могут быть лишь те которые являются копиями оригинала, и имеют правилное содержание всех блоков. Сверять точные образы стоит с известным ресурсом redump.org, либо самим снимать точные дампы. В случае если это невозможно и имеется лишь англ образ неизвестного происхождения, его и принять за точный, до появления копии с оригинала.
    НЕ вижу пролемы с разным заполнением SubHeader, лично я юзаю свою старую утилиту по сбору 2048 секторов, а затем прогоняю образ через iso2raw и фиксю до точного через rdko. Ибо если ты просто не будешь фиксить собранные образы, то получится еще больше неточных дампов, ровно по количеству дерусов.
    Таким образом дерус ПС2-СД ничем не отличается от деруса ПС2-ДВД, лишь предварительной перегонки Raw2iso, затем дерус, затем iso2raw + rdko. Либо исключением из цепочки ненужного элемента. Как вариант функции сторонних утилит можно выполнить и в своей программе.
     
  12. Chook

    Chook Дерусификато

    Сообщения:
    1.677
    Симпатии:
    85
    Баллы:
    93
    Grey Fox, ну теперь новый сборщик будет из внешнего файла брать СубХеадеры, и РДКО больше не нужен станет. Я упрощу жизнь :) Плюс можно написать тулзху которая будет выдирать СубХеадер с оригинала, а не только создавать на основе содержимого диска.
     
  13. Grey Fox

    Grey Fox Well-Known Member

    Сообщения:
    927
    Симпатии:
    35
    Баллы:
    73
    Ну в приципе как вариант. Можешь даже цеплять этот файл к основному делта файлу. Но что ты будешь делать если образы таки будут отличаться? Оригинал и тот что ты собрал, при условии что "оригинал" это не точная копия диска, а инет версия. В этом случае ты будешь создавать "якобы" более правильную версию и ее распространять посредством деруса. А это не есть гут.