Що таке файл CSO?
Файл із розширенням .cso є стислим файлом образу ISO. CSO є альтернативою методу стиснення DAX; також відомий як CISO; був першим методом стиснення файлів ISO і зазвичай є кращим методом для архівування матеріалів PlayStation Portable. У цьому форматі використовується стиснення Deflate, яке може містити до дев’яти рівнів стиснення. Для створення зображень використовується таке програмне забезпечення, як Prometheus і YACC.
Формат файлу CSO
Формат файлу CSO був першим методом стиснення для ISO для збереження додаткового місця в пам’яті. Час від часу вносилися вдосконалення для кращого стиснення. CSO використовує стиснення Deflate із дев’ятьма рівнями попередніх налаштувань, зазвичай кожен рівень може обробляти 2 блоки KiB окремо. У той час як найвищі рівні стиснення можуть уповільнити та збільшити час завантаження програмного забезпечення, яке значною мірою залежить від потокового передавання диска, також нижчі рівні можуть виконувати значне стиснення.
Структура файлу 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 | 0x7FFFFFFF | Посада | Коли це поле зсувається ліворуч на вирівнювання індексу, указаного в заголовку, видає позицію, де починається блок даних. |
31 | 1 | 0x80000000 | Тип стиснення | Формат ZSO має подібну семантику, тільки 0 означає LZ4 замість Deflate. У форматі “v2”. Блок неявно вважається нестиснутим, якщо розмір блоку дорівнює або перевищує розмір блоку, вказаний у заголовку файлу. |
Блоки даних
Блоки даних складаються з нестиснутих або стиснутих даних. Розмір блоку обчислюється шляхом отримання його позиції та віднімання її від позиції наступного блоку. Якщо вирівнювання індексу більше нуля, ймовірно, розмір блоку більший за дані, які він містить.
Список літератури
- N/A