.CSO вариант №
Файл с расширением .cso представляет собой сжатый файл образа ISO. CSO является альтернативой методу сжатия DAX; также известный как CISO; был первым методом сжатия файлов ISO и обычно является предпочтительным методом для архивирования материалов PlayStation Portable. Этот формат использует сжатие Deflate, которое может включать до девяти уровней сжатия. Для создания образов используется такое программное обеспечение, как Prometheus и YACC.
Формат файла CSO
Формат файла CSO был первым методом сжатия для ISO для экономии места в памяти. Время от времени вносились улучшения для лучшего сжатия. CSO использует сжатие Deflate с девятью уровнями пресетов, обычно каждый уровень может обрабатывать блоки размером 2 КиБ по отдельности. В то время как самые высокие уровни сжатия могут замедлять и увеличивать время загрузки программного обеспечения, которое сильно зависит от потоковой передачи диска, также более низкие уровни могут выполнять существенное сжатие.
Структура файла CSO
Формат файла CSO содержит 24-байтовый заголовок, блоки данных и индексную таблицу. Для полей размером более байта предполагается обратный порядок байтов. Порядок байтов архитектуры PlayStation Portable указан ниже.
Заголовок
Смещение (байты) | Имя | Размер (байты) | Цель |
---|---|---|---|
0x0 | Магия | 4 | Всегда CISO или 0x4F534943 при чтении как 32-битного целого числа. Это поле используется для идентификации файла CSO. Обратите внимание, что это поле может быть другим для других производных CSO, например, ZSO использовал магический код ZISO. |
0x4 | Размер заголовка | 4 | Для исходного формата файла CSO “v1” это поле игнорируется, поэтому его точность не требуется. Однако формат «v2» и ZSO требует, чтобы это поле всегда было равно 0x18 (24 байта). |
0x8 | Несжатый размер | 8 | Размер исходного несжатого ISO в байтах. |
0x10 | Размер блока | 4 | Размер каждого блока данных в байтах до сжатия. Обычно 2048 байт, что соответствует размеру каждого сектора ISO 9660. |
0x14 | Версия | 1 | Используемая версия формата файла. Для формата “v1” значение может быть либо 0, либо 1. Для формата “v2” это должно быть 2. Кроме того, формат ZSO требует, чтобы это было 1. |
0x15 | Выравнивание индекса | 1 | Выравнивание каждой записи индекса, указанное в битах. |
0x16 | Зарезервировано | 2 | Это поле не используется. В формате “v1” это поле игнорируется и может содержать произвольные значения. В формате “v2” это поле должно быть равно нулю. |
Индексная таблица
Таблица индексов содержит несколько 4-байтовых записей, указывающих положение каждого блока данных, и дополнительную, последнюю запись, указывающую на конец файла. Содержание каждой записи следующее:
Бит | Длина | Маска | Имя | Цель |
---|---|---|---|---|
0 | 31 | 0x7FFFFFFFF | Позиция | Это поле при смещении влево в соответствии с выравниванием индекса, указанным в заголовке, дает позицию, с которой начинается блок данных. |
31 | 1 | 0x80000000 | Тип сжатия | Формат ZSO имеет аналогичную семантику, только 0 представляет LZ4 вместо Deflate. В формате “v2”. Блок неявно считается несжатым, если размер блока равен или превышает размер блока, указанный в заголовке файла. |
Блоки данных
Блоки данных состоят из несжатых или сжатых данных. Размер блока вычисляется путем получения его положения и последующего вычитания его из положения следующего блока. Если выравнивание индекса больше нуля, вполне вероятно, что размер блока больше, чем данные, которые он содержит.
использованная литература
- N/A