Gamecube - пристрій файлової системи

gamecube

Вітання! Минулої теми я розповідав, як ми з командою виробляли (і далі виробляємо) ромхакінг такої гри, якXenoblade ChroniclesнаNintendo Wii. Я хотів би розповісти про менш просту, але цікаву тему – пристрій зберігання файлової системи уNintendo GameCube. Так вийшло, що я полюбив цю консоль і ніяк не міг прогаяти шанс розповісти про її технічну сторону, хоч і малу. Не затягуватимемо, почнемо!

Технічна складова

Як я сказав вище, диск мав обсяг 1,5ГБ. З таким обсягом використовувати всім ISO9660, що прижилася, або її модифікацію було явно нерентабельно.Nintendoпішли іншим шляхом - вони розробили свою технологію опису файлової системи, її основою став блок FST (FileStringTable). Цей блок компактний і зберігає всю потрібну інформацію про файли, про нього я ще розповім більше, але про це трохи пізніше.

Весь ігровий образ можна розділити на 6 блоків:

  1. Основна інформація (boot.bin)
  2. Додаток до основної інформації (bi2.bin)
  3. Apploader (apploader.img)
  4. FileStringTable (fst.bin)
  5. DOL (main.dol)
  6. Основні дані

Пропоную розглянути кожний блок окремо. Для прикладу використовувався перший диск європейської версіїResident Evil Code Veronica X(GCDP08).

Основна інформація, блок boot.bin

системи

Цей блок знаходиться на самому початку файлу та містить інформацію, яка дозволяє впізнати, що це за диск і що з ним робити далі. Він має фіксований розмір 0x440 байт. Є байти, значення яких мені досі не зрозумілі, але їх чіпати ми і не будемо, я розповім тільки про те, що важливіше:

Як видно за кодом вище, даний блок містить код диска, йогономер (використовується, коли гра містить кілька дисків), назва гри, покажчик на блок DOL, покажчик та розмір на блок FST. У цьому блоці є інші дані, але вони використовуються для debug режиму, що в цивільному режимі зовсім не використовується.

Додаток до основної інформації, блок bi2.bin

Цей блок, як і минулий, має фіксований розмір, правда цього разу його розмір 0x2000 байт, а він починається строго після boot.bin (0x440). Сказати про нього мені нічого, він містить інформацію для debug режиму.

файлової

Цей блок, як відомо за назвою, відповідає за завантаження образу, парсингу FST, ініціалізацію модулів, запуску DOL файлу. Розповісти про нього, як і про bi2.bin, мені нічого, так що йдемо далі.

FileStringTable, блок fst.bin

файлової

Його структура така:

Спробую пояснити легше: 1 байт призначається визначення, йде інформація про файл чи папку. 3 інших байти призначаються для покажчика на рядок з ім'ям файлу або папки (покажчик починається з початку блоку з іменами файлів папок, а не з початку блоку FST).

Якщо перший байт дорівнює 0 (файл), то наступні 8 байт означають:

  1. 4 байти - покажчик на файл в образі
  2. 4 байти – розмір файлу

Якщо перший байт дорівнює 1 (папка), то наступні 8 байт означають:

  1. 4 байти – номер папки, в якій знаходиться ця папка
  2. 4 байти – номер елемента, на якому закінчуються елементи в цій папці

З файлами все просто і зрозуміло, а ось із папками не дуже. Але я тут для того, щоб вам все пояснити. Наприклад, папка знаходиться в корені диска, має назву habr, dirParent дорівнює 0 (бо в корені диска), а ось dirNext має значення 6. Сама папка знаходиться 3елементом у блоці FST, отже, всі наступні елементи до 6 елемента будуть знаходиться в папці habr, тобто елемент 4 і 5.

Найголовніше, про що забув сказати, так що 0 блок (тобто перший) є посиланням на корінь диска, він не має імені в блоці з назвами елементів, хоч має покажчик. Це просто треба враховувати і нічого більше.

Як бачите, завдяки подібній структурі вона має дуже малий розмір (якщо порівнювати з ISO9660 та її модифікаціями).

пристрій

Як то кажуть, серце гри. Як уWindows- EXE, так і наGameCube- DOL. Блок із основним виконуваним файлом. Звичайно, були і ігри, де використовувався інший виконуваний файл, що зберігається з основними ігровими файлами, але, частіше, ніхто так не перекручувався, слава богу. Ну що ж можна розповісти про нього? Простий файл, розділений на секції:

  1. Сім TEXT секцій (код)
  2. Одинадцять DATA секцій (дані)

Основні дані

І останній блок, що свою суть розповідає за назвою. Цей блок йде до кінця файлу і містить у собі всі файли, вирівняні по 2048 байт. Ходить легенда, що для економії місця можна вирівняти ці файли не по 2048 байт, а по 4 байти. І навіть працюватиме, на емуляторі так точно. А ось убити лазер таким способом Вам точно не складе труднощів.

Висновок

У цій темі я спробував розкрити, якNintendoпослала всіх куди подалі і розробила просту, але все ж таки цікаву і компактну файлову систему. Звичайно, вона не підійде для використання на домашніхПКчерез її особливості зберігання файлів. Дана файлова система не зберігає в собі жодних прапорів, окрім FileDir, не зберігає час створення файлу, EDCECC кожного сектора і т.п інформацію, яка єу ISO9660. Але вона тут і не потрібна.Nintendoрозробили таку компактну файлову систему, щоб надати більше місця для ігрових даних. Адже навіщо диску з ігрової системи зберігати час створення файлу тощо? Дякую за увагу.