Решил приоткрыть завесу над чем-то, что никому неинтересно: Почему ROM игры Dune 2 состоит из двух ROM-ов
Для любителей залипать есть видео-версия: Для остальных текстовая:
Что может пойти не так, когда у тебя кончается доступная память и неоткудавзять еще?
Именно с таким вопросом столкнулись программисты, ответственные запортирование игры Dune с платформы DOS наSega Mega Drive.
Порт, как и оригинал, разрабатывался на языке С, что предоставляло огромные возможности. Но когда разработчики столкнулись с тем, что памяти приставки недостаточно, чтобы разместить и геймплей, и титульный экран, и туториал, они решились на весьма необычный шаг:
Они разбили игру на два разных исполняемых файла, а потом просто на стадии линковки объединяли их в один рабочий исполняемый файл, который использовал одну и ту жепамять по разному.
С точки зрения программирования — это вопиющее нарушение, однако со стороны инженерии — гениальный ход на скорость.При запуске первого исполняемого образа мы видели титульную заставку, туториали брифинг, а вот за геймплей уже отвечал второй образ, который затирал использованную первым образом память и использовал уже ее.
Титульная заставка, туториал и брифинг содержались в первом исполняемом файле, геймплей - во втором. Получилось впихнуть невпихуемое.
Так разработчикам не пришлось думать о том, чтобы делать динамическое выделение памяти, что сильно сэкономило им время на разработку.
Если заглянуть в американский ROM игры, то в начале будет стандартный заголовок, как и в любой игре, со списком всей необходимой информации для корректной работы, а также номера сертификата, фирма производитель, имя приставки и так далее.
Что примечательно, так это если перейти по адресу 29AB4 мы обнаружим еще один такой же заголовок, что как раз и служит неопровержимым доказательством. В европейском РОМ-е второй заголовок находится по адресу 29AB0. Но вот в Немецкой версии игры второго заголовка нигде нет.
Слева заголовок игры понятный для приставки, Справа копия этого заголовка спустя определенное колличество байт. Копия не несёт никакой пользы, она просто есть в памяти.
Я знаю что вам тут же пришло на ум, но нет, если удалить первую часть РОМ-аигры и запускать только вторую — ничего работать не будет. Все потому что вовремя линковки все адреса менялись на корректные, и если вырезать части рома, то адреса смещаются и становятся некорректными. Функционировать такое ПО уже неспособно, ведь обращаясь заданными, процессор находит мусор и своё зависание.
Весьма неоднозначная ситуация, потому что то пространство занятое заголовком и повторным кодом инициализации приставки можно было использовать с большей пользой.
Также хочу сказать что в играх компании Electronic Arts была динамическая память и контролер которую ее выдавал для обьектов. Отражалось это в том, что в каждом уровне скажем Jungle Strike, размещение переменных в памяти всегда было разным. Для 64 килобайта памяти это сомнительная фича, но когда объем памяти требуемый для работы игры превышает доступную —это обычная практика.
Даже в Соник 2 Special Stage использовал одну память с уровнями обычной игры, из-за чего по выходу из бонуса выобнаруживали респавн всех колец на всёмуровне.
Дайте знать, если материал интересен, поделюсь еще некоторыми фактами из геймпдева под сегу.
Скетч Тёрнер, художник и независимый рок-музыкант, работает над своим новым комиксом под названием Comix Zone. В его работе рассказывается о попытке Новой Мировой Империи спасти Землю от нападения мятежных инопланетян, которых с вдохновением выдумывает Скетч.
Однажды ночью, когда Скетч спокойно трудился над комиксом, начинается сильная гроза, и одна из молний ударяет в дом Тёрнера, затрагивая и его рабочий стол. В тот же момент главный злодей комикса, Мортус, вырывается в реальный мир и забрасывает в Comix Zone опешившего художника. Поскольку сам Мортус является рисованным персонажем, он не может полностью воплотиться физически в реальном мире пока автор комикса жив.
В комиксе Тёрнер встречает генерала Алису Кейн, которая принимает его за супергероя, явившегося для спасения постапокалиптического мира от Мортуса и инопланетных захватчиков. Несмотря на протесты Скетча, Алиса отправляет его выполнять миссии, поддерживая контакт через радио. Мортус, находящийся в реальном мире, стремится всячески помешать Тёрнеру, пририсовывая для него дополнительных врагов и, в одном случае, поджигая часть страницы.