Чем открыть файл.NES? Расширение файла NES Русские эмуляторы Денди

Позвонила мне недавно сестра и спросила: “А можно ли играть в игры Денди на компьютере? ”. Я конечно рассказал ей как это сделать, а также решил для вас написать небольшую статью. Ведь многим иногда хочется ненадолго вернуться в детство и поиграть в любимую приставку. И для этого совсем не обязательно пытаться где-то ее найти, а также думать где еще взять и картриджи с играми.

Так как же играть в Dendy на компьютере?

Сначала нам нужно скачать в интернете сами игры . Все игры для Денди представляют собой файл с расширением .nes .

У вас есть несколько вариантов, где взять игры:

1) Вы можете ввести в любом поисковике фразу “игры для dendy” и перед вами откроются десятки сайтов, на которых вы их и скачаете.

2) Можете скачать игры с определенного сайта, который рекомендую я. Вот ссылка на него .

Данный сайт мне нравится тем, что на нем все предельно просто и понятно. Вы просто выбираете слева название приставки (в нашем случае Dendy ) – затем переходите в раздел “Игры”. Тут все игрушки отсортированы по алфавиту: выбираете нужную букву – находите игру – щелкаете мышкой по названию (либо по слову “скриншоты”). Если это действительно та игрушка, которую вы искали – скачиваете ее, нажав на ссылку.

3) А еще можете скачать прямо небольшую сборку самых популярных по моему мнению игр для Dendy, которую я сделал сам. В нее вошли: Battle City (танчики), Battletoads &Double_Dragon (боевые лягушки), Chip and Dale Rescue Rangers 2 (чип и дейл), Darkwing Duck (черный плащ), Double Dragon III (двойной дракон), GALAXIAN (мухи), Jackie Chan, Super Mario Bros (супер марио), Teenage Mutant Ninja Turtles III (черепашки ниндзя), Tiny Toon Adventures (кролик):

Итак, независимо от того, где именно вы скачаете игру, она будет представлять собой архив, в котором лежит файл с расширением NES . Советую вам все скаченные архивы с играми скопировать в одну папку и хранить их в ней. Лично я создал у себя на диске С папку games и в нее собрал все свои любимые игры Dendy:

Теперь нам понадобится специальная программа эмулятор , через которую мы и будем запускать все дендивские игры.

Программ-эмуляторов приставок существует довольно много. Но я предлагаю воспользоваться, пожалуй, самой популярной из них – FCEUX . Чтобы не возникало проблем с запуском игр, лучше скачивать самую последнюю версию программы и причем с официального сайта. Такую версию вы можете скачать и у меня .

Скачав архив с программой, распакуйте его куда-нибудь на компьютер. Я распаковал на диск С:\fceux-2.2.2 . Содержимое этой папки выглядит следующим образом:

Для запуска эмулятора необходимо найти здесь файл fceux.exe и открыть его двойным щелчком.

При желании (чтобы не заходить каждый раз в эту папку) вы можете создать ярлык для этого файла на своем рабочем столе. Для этого щелкните по файлу fceux.exe правой клавишей мыши – выберите “Отправить” – “Рабочий стол (создать ярлык)”:

Итак, эмулятор запущен:

Первым делом настроим управление: в меню выбираем Config Input :

Видим следующее окно. Здесь напротив Port 1 жмем кнопку Configure :

Теперь нам необходимо настроить комбинацию клавиш для управления. В Денди можно играть либо на клавиатуре ; либо если у вас есть джойстик (а точнее геймпад), то с помощью него. И клавиатура, и джойстик настраиваются одинаково.

Настройка очень проста: кликаем в окошке на нужную кнопку мышкой и после этого дважды жмем нужную кнопку на клавиатуре (или джойстике). Затем переходим к следующей кнопке.
Лично я на своей клавиатуре настроил кнопки следующим образом:

Left, Up, Right, Down – это стрелки

Select – пробел

Start – Enter

Turbo B и Turbo A – это клавиши A и S

B и A – клавиши Z и X

Закончив настройку всех кнопок – выходим отсюда, нажав “Close”.

Ну и наконец, теперь запускаем игру через эмулятор . Как вы помните, у меня все скаченные игры для Денди хранятся на диске C в папке games . Кстати, эмулятор FCEUX умеет открывать игры прямо из архива. Некоторые другие эмуляторы не увидят игру, если файл предварительно не разархивировать. Также FCEUX версии 2.2.2 открывает и zip, и rar архивы. А вот более старые версии этой программы rar-архивы не видят.

Итак, в меню заходим в File Open ROM :

Затем находим на компьютере нужную игру, выделяем ее и жмем “Открыть”:

Вот и всё: игра запущена, и мы можем начинать играть теми клавишами, которые заранее настроили:

И еще один момент: в эмуляторе FCEUX есть замечательная функция “Сохранить ”, которой так не хватало в детстве. Т.е. можно останавливаться тогда, когда нужно, и не бояться, что все ваше прохождение потеряется.

Воспользоваться ей можно следующим образом: в ходе игры жмем в меню “File” – затем “Savestate” – “Save State”:
Если затем нам понадобится начать игру с места сохранения, то запускаем игру как обычно – потом идем в “File” – “Savestate” – “Load State”.

Мы надеемся, что помогли Вам решить проблему с файлом NES. Если Вы не знаете, где можно скачать приложение из нашего списка, нажмите на ссылку (это название программы) - Вы найдете более подробную информацию относительно места, откуда загрузить безопасную установочную версию необходимого приложения.

Посещение этой страницы должно помочь Вам ответить конкретно на эти, или похожие вопросы:

  • Как открыть файл с расширением NES?
  • Как провести конвертирование файла NES в другой формат?
  • Что такое расширение формата файлов NES?
  • Какие программы обслуживают файл NES?

Если после просмотра материалов на этой странице, Вы по-прежнему не получили удовлетворительного ответа на какой-либо из представленных выше вопросов, это значит что представленная здесь информация о файле NES неполная. Свяжитесь с нами, используя контактный формуляр и напишите, какую информацию Вы не нашли.

Что еще может вызвать проблемы?

Поводов того, что Вы не можете открыть файл NES может быть больше (не только отсутствие соответствующего приложения).
Во-первых - файл NES может быть неправильно связан (несовместим) с установленным приложением для его обслуживания. В таком случае Вам необходимо самостоятельно изменить эту связь. С этой целью нажмите правую кнопку мышки на файле NES, который Вы хотите редактировать, нажмите опцию "Открыть с помощью" а затем выберите из списка программу, которую Вы установили. После такого действия, проблемы с открытием файла NES должны полностью исчезнуть.
Во вторых - файл, который Вы хотите открыть может быть просто поврежден. В таком случае лучше всего будет найти новую его версию, или скачать его повторно с того же источника (возможно по какому-то поводу в предыдущей сессии скачивание файла NES не закончилось и он не может быть правильно открыт).

Вы хотите помочь?

Если у Вас есть дополнительная информация о расширение файла NES мы будем признательны, если Вы поделитесь ею с пользователями нашего сайта. Воспользуйтесь формуляром, находящимся и отправьте нам свою информацию о файле NES.

Про внутреннее устройство NES-игр, на этот раз я расскажу об используемых мной инструментах для исследований.

Большая часть того, что необходимо исследователю, уже есть в эмуляторе FCEUX , который хорошо подходит для отладки игр. В документации стоит досконально изучить раздел Debug , каждый инструмент оттуда полезен исследователю, причём умение использовать их совместно друг с другом усиливает возможности хакера.

Однако я не буду пересказывать документацию, а остановлюсь на случаях, когда возможностей эмулятора оказывается мало и необходимо добавить новые, либо же когда существуют необычные способы найти желаемое в ROM-файле напрямую, в обход длительного изучения кода игр.

Использование Lua-скриптов

Собственно, первый способ, пример которого приведён на картинке для привлечения внимания – создание вспомогательных инструментов с помощью встроенного в эмулятор интерпретатора Lua-скрипт.
На примере выше для исследования игры (и просто читерского прохождения, при желании) используется такая возможность скриптов, как вывод изображений на экран поверх отрисовываемой эмулятором картинки .

Таким образом исследователь может заметить то, что недоступно обычному игроку, например, на скриншоте выше из трёх скрытых бриллиантов игрок может допрыгнуть только до первых двух, и никаким образом не может взять третий или даже просто догадаться об его существовании. В «Утиных историях 2» встречаются даже такие драгоценности, которые вообще размещены за пределами игрового уровня.

Другой пример скрипта с выводом на экран дополнительных данных – компас до ближайшего драгоценного камня в «Книге Джунглей»:

Естественно, визуализация информации из оперативной памяти или ROM игры не единственная возможность скриптов.

Другая часто используемая возможность – логгирование происходящего в коде игры , например, шаблон скрипта для дампа разархивированных данных сразу после их распаковки (для SMD игр, но принцип применим и для NES).

Ну, и никто не запрещает создание на Lua-скриптах полноценных утилит , вроде уже включённого в эмулятор редактора нажатых клавиш TasEditor .

Также, на мой взгляд, недооцененной является идея частичного переписывания кода игры на скриптах , когда игровые данные патчатся скриптом на лету для модификации геймплея. Proof-of-concept такого скрипта, модифицирующего врагов в «New Ghostbusters 2»:

Однако, для сложной обработки конкретной игры или создания новых методов хака стоит задуматься об использовании следующего метода.

Модификация исходного кода эмулятора

Здесь есть где разгуляться фантазии на разные темы, не касающиеся исследования игр, вроде добавления в эмуляторы поддержки достижений , 3d-рендера или улучшенной графики , однако я попытаюсь удержаться в рамках темы статьи.

Одно из направлений расширения эмулятора с целью улучшения возможностей для реверс-инженерии – прокидывание как можно большего числа его внутренних возможностей в Lua-библиотеки . Во второй статье цикла я уже показывал, как с помощью прокидывания всего пары новых функций появилась возможность сделать универсальный (подходящий для исследования любой игры) инструмент для исследования.

Другой простой и полезный пример, который пока ещё отсутствует в последней версии эмулятора – возможность модификации из скрипта памяти PPU .

Модификация эмулятора может также использоваться для того, чтобы встроить в него редактор для конкретной игры с возможностью на лету запустить её и проверить внесённые изменения:

Скрипты для статического анализа кода игры

Предыдущие две категории модификаций касались динамического анализа игры в ходе её выполнения. Однако большая часть исследования – это статический анализ ROM-файла игры (или дампов каких-либо данных из него).

Основной программой для такого анализа кода является интерактивный дизассемблер IDA . Он поддерживает ассемблер 6502, однако требует как плагина для правильной загрузки файлов в формате nes , так и набора скриптов для автоматизации рутинных действий по преобразованию загруженного файла в причёсанный код. Набор скриптов, специфичных для исследования NES-игр собран .

Сами скрипты для IDA могут быть написаны на встроенном языке команд idc или python , в любом случае лучше всего открыть их текстовым редактором и изучить, в большинстве случаев это помогает лучше понять команды самого IDA, которые пригодятся в работе с ним и научиться писать такие скрипты самому. Это очень пригодится, когда понадобится провести несколько сотен однотипных действий, вроде объединения байт в поинтеры или выделения массивов по некоторым правилам.

Инструменты для статического анализа данных игры

IDA хороший инструмент для анализа кода, настолько хороший, что некоторые гуру исследования игр даже считают, что только его достаточно для исследования и изменения игр. Однако, даже имея на руках разобранную до компилируемых и прокомментированных исходников игру, сложно модифицировать игровые данные – уровни, графические карты, анимации персонажей. К сожалению, формат игровых данных часто сильно отличается от игры к игре, поэтому создать универсальные инструменты, подходящие для большинства игр, достаточно трудно.

Редакторы тайловых карт

Формат хранения графических банков (самый низкий уровень хранения графики) стандартный для всех игр NES, поэтому существует множество редакторов тайловых карт , однако, среди них я не нашёл ни одной библиотеки, которая позволяла бы рендерить эти тайлы в своём приложении.

Такими программами можно редактировать тайлы графики в играх с наличием CHR-ROM – целыми банками графики. В других играх используется CHR-RAM – видеопамять тайлов в них считывается частями из банка с данными и кодом и копируется в видеопамять (при этом иногда достаточно хитрыми способами, но о них скорее лучше рассказывать в статье о компрессии данных).

На более высоком уровне игры отличаются уже настолько, что общих программ для редактирования практически нет, максимум существуют редакторы, охватывающие несколько игр на одном движке. Про свои попытки сделать универсальный редактор уровней я напишу в конце статьи, пока же приведу ещё несколько общих идей, как находить данные в играх, и утилит, реализующих эти идеи.

В качестве языка реализации я использую python за то, что на нём можно быстро и просто проверить какую-либо догадку, иногда даже прямо в интерактивном режиме.

Коррапт ROM

Собственно, как раз про эту идею была – если перебрать все возможные варианты изменения одного байта в ROM и посмотреть, как это отразится на экране, то это может помочь прояснить внутреннюю структуру игры. После этого возможно даже составить простой вариант редактора игры – нужно заготовить набор картинок-блоков верхнего уровня, из которых строится экран, не вникая до конца, как строятся сами эти картинки из данных ROM и отобразить массив этих картинок, обнаруженный этим методом.

Поиск блоков

Можно также зайти с другой стороны.

Фон, который отображается на экране, задаётся массивом индексов тайлов видеопамяти по фиксированному адресу PPU – для NES существует 4 экранные страницы, которые в зависимости от настроек PPU могут разными способами выводится на экран. Не важно, что именно будет на экране, достаточно просто захватить какую-нибудь загруженную страницу для анализа.

Первая экранная страница (Name Table) расположена по адресам PPU $2000-$23BF. Её содержимое в эмуляторе FCEUX можно посмотреть в окне Debug → Name Table Viewer :

А также в виде байт в окне Debug → Hex Editor, View → PPU Memory (перейти по адресу $2000).

Здесь же можно сделать дамп всей видеопамяти, который пригодится нам для анализа (File → Dump to File → PPU Memory ).

Это просто массив из 960 индексов маленьких тайлов видеопамяти размером 8x8 пикселей. При этом, после реверса большого числа игр известно, что игровые экраны часто описываются блоками большего размера, например, 16x16 или 32x32 пикселей. Таким образом, если мы предположим некоторый размер блока (для начала попробуем самые стандартные – 2x2 тайла, выделены на скриншоте красной рамкой), то мы можем разбить данные из экранной страницы на участки, в каждом из которых окажется описание одного блока.

Так получается список из всех блоков, которые присутствуют на экране. Причём у нас «чистые» описания блоков, без информации о спрайтах персонажей (спрайты рисуются другим способом), и независимый от анимации (анимации фона практически всегда делаются с помощью изменений палитры либо самой видеопамяти, номера тайлов в Name Table остаются неизменными). Однако мы не знаем номера блоков.

У нас есть описание блоков на экране, но мы не знаем их порядок хранения в ROM. Тем не менее, мы можем с некоторой вероятностью предположить, где именно расположено описание блоков. Алгоритм для этого такой:

1. Проходим по всему ROM и размечаем все адреса, по которым обнаруживается какой-нибудь блок, при этом сохраняем его номер (настоящий номер может быть другой, нам важно отметить только отличия блоков друг от друга).

2. Находим область в ROM, в которой обнаружено наибольшее количество РАЗНЫХ блоков. С наибольшей вероятностью именно это и есть описание блоков.

Таким образом, мы можем найти блоки размером 2x2 в играх, в которых они хранятся последовательно.

Это уже неплохо, но есть способ кардинально улучшить результаты работы алгоритма. Дело в том, что существует ограниченное количество основных размеров блоков и способов их хранения в ROM, и мы можем перебрать их все.

Основные размеры блоков: 2x2, 4x2, 2x4 и 4x4, но в случае необходимости легко добавить и другие размеры.

Со способом хранения их в ROM немного хитрее, блоки могут храниться как линейно, так и разбитыми на части массивами (Structure of Arrays , сокращенно SoA), т.е. сначала в ROM хранится массив только первых частей блоков, за ним - массивы со следующими частями. Чаще всего такие массивы хранятся друг за другом, при этом промежуток между началами массивов равен количеству блоков. Чтобы найти в ROM такие SoA-массивы, мы должны узнать их длину, что можно сделать перебором всех вариантов (частенько в играх используется по 256 блоков, так что начинать проверку стоит с этого числа и постепенно его уменьшать).

Всё это выглядит достаточно запутанно, ведь мы опираемся только на вероятность того, что игра использует определённый вид блоков, но на практике утилита находит блоки в 80-90% проверенных игр!

Вдобавок, она позволяет отсеять игры с необычной структурой (неблочной), чтобы пристальнее их изучить.

Сравнение CDL-файлов

Эмулятор FCEUX умеет в ходе эмуляции каждую инструкцию отмечать, какие байты были интерпретированы как код, а какие – как данные (меню Debug → Code/Data Logger... ). Эта фича полезна сама по себе и тесно интегрирована с другими отладочными возможностями эмулятора – попробуйте включить этот режим и посмотреть, как изменились другие отладочные окна. Однако, я хочу рассказать об её одном частном применении. Если сохранить два таких cdl-файла, один ДО совершения изучаемого действия, а другой сразу же ПОСЛЕ его окончания, то разница между двумя такими файлами покажет только те данные (или код), которые были использованы во время совершения действия. При грамотном отсечении можно найти нужные данные, всего лишь правильно выбрав два момента времени между измеряемыми событиями.

Составление из базовых тайлов больших игровых структур и сборка в итоге целого уровня напоминает сборку пазла из тысяч кусочков, и доставляет такое же удовольствие, когда, наконец, каждый кусочек оказывается на своём месте.

В следующей статье не будет такого обилия технической информации и я приведу примеры сборки уровней игр с нестандартной структурой или использованием необычных модификаций стандартной блочной архитектуры. Также вы можете в комментариях назвать игру на NES, формат уровней которой интересен вам, возможно, я исследую и её тоже.

Теги: Добавить метки

- Расширение (формат) - это символы в конце файла после последней точки.
- Компьютер определяет тип файла именно по расширению.
- По умолчанию Windows не показывает расширения имен файлов.
- В имени файла и расширении нельзя использовать некоторые символы.
- Не все форматы имеют отношение к одной и той же программе.
- Ниже находятся все программы с помощью которых можно открыть файл NES.

Jnes – один из самых простых эмуляторов игровой приставки Dandy, отличающийся поддержкой большинства игр для этой приставки, а также рядом дополнительных возможностей. Эмулятор Jnes поддерживает игру по сети, что редко встречается у других эмуляторов. Это даёт возможность насладиться игрой вам и вашему другу, который будет играть на условном втором джойстике. Также, программа Jnes поддерживает эмуляцию светового пистолета. Для его имитации используется обычная компьютерная мышь. Кроме того, для работы программы Jnes не нужно устанавливать каких-либо дополнительных модулей или программ, да и сама утилиты состоит из одного файла...

Nestopia - один из самых мощных эмуляторов приставки Dendy, поддерживающий большое количество различных возможностей и отличающийся понятным пользовательским интерфейсом. На обилие возможностей указывает её размер. Другие эмуляторы для NES, как правило, имеют гораздо меньший размер. Программа позволяет вам сохранять игру в любом месте, для чего можно использовать горячие клавиши. Отличительная особенность здесь в том, что программа предоставляет большое количество ячеек под ваши сохранённые игры, что пригодится любому игроку. Кроме того поддерживает все форматы, в которых хранятся игры для данной приставки, причем речь идёт да...

FCEUX - эмулятор приставки Dendy, позволяющий запускать игры от этой приставки на персональных компьютерах. Данный эмулятор отличается понятным пользовательским интерфейсом, а также наличием нескольких дополнительных возможностей. Так, например, эмулятор позволяет делать запись игрового процесса, поддерживает работу с джойстиками, а также позволяет играть с напарником по сети, либо в режиме разделённого экрана, используя либо 2 джойстика, либо разные части одной клавиатуры. Правда, справедливости ради, заметим, что на клавиатуре не всегда можно нажать несколько клавиш одновременно, а потому игра на клавиатуре менее комфортна.

И одновременно ZIP-файл. Он одновременно полностью функционален и как NES ROM, и как ZIP-файл.

Что находится в этом ZIP-файле? Исходный код ROM.

Что случится, если скомпилировать этот исходный код? Он создаст NES ROM, который также является ZIP-файлом, содержащим исходный код этого NES ROM.

Запущенный ROM

Этот NES ROM можно «прожечь» на картридж NES и он будет работать на NES. Даже если конвертировать все данные с картриджа, образ NES всё равно будет ZIP-файлом.

Источник вдохновения

Выпуск 0x14 журнала PoC||GTFO был одновременно PDF, ZIP-файлом и NES ROM. Именно этот выпуск вдохновил меня на создание NES-игры с нуля для Tymkrs .

Способ, использованный мной для создания NES ROM, также являющегося ZIP-файлом - это НЕ тот же способ, который использовался в выпуске issue 0x14 PoC||GTFO . Мой способ встраивает ZIP-файл в NES ROM и позволяет записать образ NES на картридж, сохранив данные ZIP-файла. В методе, использованном PoC||GTFO данные ZIP-файла хранятся за пределами файла ROM NES, поэтому выпуск 0x14 PoC||GTFO нельзя записать на картридж с сохранением данных ZIP-файла.

Формат файлов NES ROM

В этом образе NES используется формат файлов iNES. Формат файлов iNES на самом деле довольно прост.

В начале ROM есть заголовок iNES, который сообщает немного информации о NES ROM, чтобы эмуляторы могли понимать данные образа NES. После заголовка iNES следуют данные PRG, являющиеся данными программной логики NES ROM. Затем идут данные CHR, то есть наборы тайлов фона и спрайтов. Всё пустое пространство в PRG заполнено отступами, кроме того, в конце данных PRG может быть несколько байт (в этом NES ROM есть 6 необходимых байт в конце данных PRG, которые я не могу изменять).


Формат файлов iNES

Формат файлов ZIP

В файлах ZIP достаточно много компонентов, поэтому мы сосредоточимся тех частях, которые для нас важны.

Для каждого файла и каталога, содержащегося в ZIP-файле, существует заголовок файла центрального каталога (Central Directory File Header). Любой заголовок файла центрального каталога можно найти, выполнив поиск байтов сигнатуры заголовка 0x504B0102 в ZIP-файле. Важная часть информации - это локальное смещение заголовка (Local Header Offset), поскольку при встраивании ZIP-файла в NES ROM мы будем менять каждое смещение.


Формат заголовка файла центрального каталога ZIP

ZIP-файлы определяют своё начало и конец, переходя в конец файла и двигаясь к началу, пока не дойдут до байтов 0x504B0506 сигнатуры конца записи центрального каталога (End of Central Directory Record). При встраивании ZIP-файла в NES ROM нам важно обновить смещение центрального каталога (Central Directory Offset) в конце записи центрального каталога. Также мы можем указать длину комментария ZIP-файла (ZIP File Comment Length) и это количество байтов после конца данных ZIP-файла будет комментарием ZIP-файла.


Формат конца записи центрального каталога ZIP

Прячем ZIP-файл в NES ROM

Если мы найдём достаточно отступов в данных PRG, то сможем просто заменить эти пустые данные ZIP-файлом. В своём NES ROM я отсчитывал байты отступов от конца данных PRG, пока не получил достаточно места для встраивания ZIP-файла и записал, насколько далеко в NES ROM я начал встраивать ZIP-файл. Затем я обновил все смещения данных ZIP-файла, прибавив расстояние, на котором начинается в образе NES ZIP-файл. После этого я задал размер длины комментария ZIP-файла равным размеру оставшейся части данных NES ROM, то есть концу данных PRG и всем данным CHR.


Формат файла NESZIP

Этот файл остаётся образом NES, потому что никакие из необходимых данных PRG и данные CHR не повреждены. Также он является ZIP-файлом, потому что все смещения верны и все данные после данных ZIP-файла объявлены комментарием ZIP-файла.

Давайте сначала протестируем файл, чтобы убедиться, что он одновременно является и NES ROM, и ZIP-файлом. Скачав файл как NES ROM, я делаю его копию.


Копия NES ROM

Переименование файла позволяет мне изменить расширение с.nes на.zip.


Меняем расширение копии NES ROM на.zip

После замены расширения на.zip, файл считается ZIP-файлом.

При распаковке этого файла создаётся каталог.


Если мы посмотрим на содержимое каталога, то увидим исходный код файла. Мы просто взяли NES ROM, переименовали его в ZIP-файл и успешно его распаковали.


Обновляя смещения данных ZIP-файла, я решил немного развлечься с этим ZIP-файлом. В заголовках файлов центрального каталога указывается ОС (Host OS), в которой создан ZIP-файл, поэтому я решил сделать так, чтобы ZIP-файл утверждал, что был создан на Atari ST.

Создаём рекурсию

На самом деле, эта часть - самая простая. Запакованный исходный код стал ZIP-файлом, достаточно маленьким, чтобы его можно было легко встроить в NES ROM, поэтому я решил сделать NES/ZIP рекурсивными. Для автоматизации процесса создания ZIP-файла исходного кода или для автоматизации процесса встраивания ZIP-файла в NES ROM потребовалось не так много труда.

Подводим итог

Этот проект является простым proof of concept, демонстрирующим возможность встраивания ZIP-файла в NES ROM способом, создающим файл, который одновременно становится и ZIP-файлом, и образом NES, и позволяющим записывать данные на картридж с сохранением всех их свойств.

Так как я решил сделать этот NES ROM совместимым с печатными платами NES-NROM-128 (из-за их простоты), процесс будет работать практически для любого NES ROM, если в нём будет достаточное количество отступов в данных PRG для встраивания ZIP-файла.

Чтобы реализовать этот процесс на других NES ROM, может потребоваться дополнительная работа, потому что разные ассемблеры 6502 могут заполнять отступами данные PRG по-разному. Я не тестировал этот метод с более сложными играми NES, имеющими переключение банков. Также я не тестировал возможность добавления отступов в размер данных PRG для встраивания ZIP-файлов большего размера.

С учётом всего сказанного, не удивляйтесь, если я дам вам картридж NES с тайным ZIP-файлом, скрытым в данных NES ROM.

Исходный код

Исходный код этого проекта выложен на GitHub (или его можно получить, распаковав файл NES ROM) и имеет лицензию BSD 2-Clause License.