Дампинг ромов (NES)

В этой статье я хочу рассказать вам, как можно создавать свои ромы для NES (и других приставок) с помощью устройства INLretro Dumper-Programmer. Если вы мою ищете программу с оболочкой, то последняя версия может быть скачана отсюда. Информацию о программе вы найдёте в самом конце статьи (если хотите делать дампы для игр с Genesis/MegaDrive, сначала обновите дампер до последней версии (см. readme на английском).

Что такое INLretro Dumper?

Это небольшая плата с разъёмами для нескольких приставок, которая позволяет считывать дампы (образы) игр для следующих систем: NES/Famicom, Genesis/Mega Drive, SNES/SFC, N64, GameBoy и GBA. На плате находятся 6 коннектором и сама плата подключается к компьютеру с помощью USB кабеля.

Следующие коннекторы расположены на плате (сверху вниз: famicom, genesis/mega drive, n64, NES, SNES/SFC и Gameboy/GBA).

Сама плата очень небольшая, всего 11 x 11 см. Хотя в комплекте есть нужный USB кабель, он сильно короткий. Вам понадобится кабель Type B. Одна из кнопок позволяет делать перезагрузку, а другая позволяет переводить устройство в режим для обновления.

Установка

Установка довольно простая: 1)Сначала скачайте целиком проект и распакуйте его. Проект находится по этому адресу: https://gitlab.com/InfiniteNesLives/INL-retro-progdump 2)Подключите устройство к компьютеру и запустите файл InstallDriver.exe из папки WindowsDriverPackage.

3)Нужно теперь проверить, всё ли установилось правильно. Запускайте менеджер устройство (в меню Windows, Запустить -> devmgmt.msc)

Image result for run devmgmt

Проверьте, есть ли следующее устройство.

Если устройство распозналось, то всё прошло успешно.

Дампинг

Следующий шаг: дампинг!

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

Для начала нужно отключить плату от компьютера и вставить картридж в нужный разъём. Затем подключайте дампер снова к компьютеру. Затем идите в папку host.

Там есть программа inlretro.exe, которая нуждается в скрипте lua, где расписаны тип консоли, тип картриджа, размеры рома и режим дампинга. Два примера таких скрипов лежат в папке scripts. Для дампинга, вам нужно запустить программу с переключателем -s и именем файла скрипта в качестве параметра (представим, файл называется export.lua и находится в папке scripts, которая находится в той же папке, где и exe-файл):

inlretro.exe -s scripts\export.lua

Сначала нужно создать такой скрипт.

Следующие шаги:

1)Создайте копию файла inlretro.lua (вы найдёте его в папке scripts) и откройте его в редакторе (я рекомендую Notepad++, так как он умеет подсвечивать код).

2)В функции main ищите строки с переменными, которое называются local curcart (т.е. локальная переменная curcart). Уберите пометку комментария на строке “–local curcart = require ” с типом картриджа, который хотите дампить. Для игр NES вам нужно знать, какой маппер используется в игре. Можете свериться с этим файлом% http://tuxnes.sourceforge.net/nesmapper.txt.

Скажем, мы хотим сделать дамп игры “Darkwing Duck”. Посмотрев в здесь, вы найдёте следующую строку:

Darkwing Duck 128k PRG / 128k CHR V MMC1 (1)

Здесь указано название игры, размер памяти PRG, СHR, тип зеркального копирования (V – вертикальный) и тип маппера: mmc1. Таким образом вам нужно разкомментировать строку –local curcart = require “scripts.nes.mmc1”.

Разкомментировать вы можете, удалив “–” в начале. Все остальные строки с этой переменной должны быть закомментированы, т.е. дописывайте там “–“. Или же просто удаляйте все остальные строки с этой переменной (в следующем примере я так и сделал).

--cart/mapper specific scripts

--NES mappers
local curcart = require "scripts.nes.mmc1"

Теперь ищите строки, начинающиеся с local cart_console (т.е. локальные переменные cart_console) и убирайте коммент у строки local cart_console = “NES”. Все прочие варианты комментируйте или удаляйте.

-- =====================================================  -- USERS: set cart_console to the  to point to the mapper script you would like to use here.  -- =====================================================      local cart_console = "NES"    --includes Famicom

Чуть ниже находится секция с переменной process_opts:

local process_opts = {
    test = false,
    read = true,
    erase = false,
    program = false,
    verify = false,
    dumpram = false,
    writeram = false,
    dump_filename = "output/darkwing_duck.nes",
    flash_filename = "ignore/flash.bin",
    verify_filename = "ignore/verifyout.bin",
    dumpram_filename = "ignore/ramdump.bin",
    writeram_filename = "",
}

Здесь мы устанавливаем параметры дампинга. Так как мы только хотим дампить, а не стирать или тестировать и т.д., устанавливайте (read = true). Если хотите сразу установить название файла дампа файла, то отредактируйте правую часть переменной dump_filename.

Путь по умолчанию: ignore/dump.bin. Можете изменить его, но не забудьте сначала создать папки, если вы хотите сохранять файлы в папках, потому что они не будут создаваться автоматически. В моём случае дамп будет создан в папке output, а bat-файл, который будет всё запускать, автоматически создаст папку.

Последнее место, где нужно вносить изменения, это переменная console_opts:

local console_opts = {
         mirror = nil, -- Only used by latest INL discrete flash boards, set to "H" or "V" to change board mirroring
         prg_rom_size_kb = 128,    -- Size of NES PRG-ROM in KByte
         chr_rom_size_kb = 128,            -- Size of NES CHR-ROM in KByte
         wram_size_kb = 0,               -- Size of NES PRG-RAM/WRAM in KByte
         rom_size_kbyte = 8 * 128,       -- Size of ROM in kilobytes, used for non-NES consoles.

Все игры для NES хранят содержимое игры в двух разделах, так называемой PRG и CHR – памяти (то есть логика игры и изображения). Размеры памяти нужно указывать в скрипте вручную. Значение следующих переменных нужно поэтому задать: prg_rom_size_kb -> это размер области PRG в килобайтах chr_rom_size_kb -> это размер области CHR в килобайтех Снова посмотрим на информацию об игре Darkwing Duck: Darkwing Duck 128k PRG / 128k CHR V MMC1 (1) То есть 128k PRG и 128 CHR и поэтому устанавливаем: prg_rom_size_kb = 128, chr_rom_size_kb = 128, Другие аттрибуты менять не надо для NES.

Сохраняйте скрипт и запускайте программное обеспечение дампера с помощью такой команды (разумеется, из командной строки, которую надо беред этим открыть и пройти весь путь к папке с exe):

inlretro.exe -s <path to your script><name of the script>.lua

Вы также можете создать bat-файл с таким содержанием:

IF NOT EXIST output md output
inlretro.exe -s scripts\nes_dump.lua
pause

Этот файл автоматически создаст папку output, если она не существует, и затем запустит inlretro.exe с аргументом -s и указанием пути к скрипту nes_dump.lua (которые я сохранил в папке scripts). Я также добавил команду pause, чтобы консоль не закрылась после завершения программы и имелась возможность посмотреть результаты.

Начнём дампить!

Если всё прошло успешно, то в случае с NES после выполнения программы появится сообщение:

DONE Dumping PRG & CHR ROMs

Другая возможность

Вы можете использовать и другой скрипт inlretro2.lua в качестве аргумента. Здесь вам не нужно будет изначально редактировать скрипт, все данные можно задать во время запуска программы. С помощью переключателя (-c) вы указываете платформу, тип маппера (-m), размер PRG рома (-x), CHR рома (-y) и имя выходного файла (-d).

Вот так будет выглядеть файл bat:

IF NOT EXIST output md output
inlretro.exe -s scripts/inlretro2.lua -c NES -m mmc1 -x 128 -y 128 -d output/darkwing_duck_.nes
pause

Сообщения в консоли будут выглядеть тоже немного иначе:

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

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

С помощью другой программы (NESHead) вы можете проверить заголовок и внести изменения, если что-то было не правильно установлено дампером:

Работа с дампером с помощью графической оболочки

Я написал графическую оболочку для работы с дампером, вы можете скачать её (arekuse.net/apps/inl_starter.zip):

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

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

В базах данных вы можете быстро икать и фильтровать по названию. Справа указываются все необходимые для дампинга данные.

Чтобы сбросить фильтр, жмите ESC:

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

Базы данных с играми В текущей версии программы есть три базы данных. Выбирайте одну из баз, ищите игру в списке, или используйте фильтр. Кликайте на игру и выбирайте затем регион. Не все игры, которые есть в базе данных, поддерживаются дампером! NES (изначально на основе списка здесь http://bootgod.dyndns.org:7777/) SNES (базируется на https://jensma.de/snes__/) Genesis/Mega Drive (на основе https://raw.githubusercontent.com/libretro/libretro-database/master/metadat/no-intro/Sega%20-%20Mega%20Drive%20-%20Genesis.dat)

21083 Всего 4 Сегодня