Наконец-то дошли руки попробовать запилить свой маппер для Everdrive N8. Для начала скачал тестовый пример, открыл в Quartus и посмотрел. Пока много чего было непонятно, попробовал для начала собрать как есть. Все собралось (хоть и с какими-то непонятными предупреждениями), попробовал заменить оригинальный файл "000.RBF" на SD-карте на полученный RBF-файл. Судя по всему, тестовый пример поддерживает мапперы NROM (без маппера), UNROM, Color Dreams. Попробовал запустить игры на соответствующих мапперах - работают. Значит собирается все нормально, я просто был не уверен, какую версию Quartus выбрать.
Далее, попробовал реализовать уже "свой" маппер. Решил сделать маппер для игры Mi Hun Che в виду его простоты. Сделал код путем копирования кода из NROM и Color Dreams и правкой его под нужды именно этого маппера. Собрал RBF-файл, скопировал его на SD-карту, внес в MAPROUT.BIN. Попробовал, вроде запускает немодифицированный (за исключением заголовка) ROM. Так что вроде все получилось.
Если кому интересно, архив прикреплен к сообщению. Если кто-то захочет попробовать, то вам понадобятся только файлы "027.RBF" и "MAPROUT.IPS", остальное исходники. Для начала нужно пропатчить файл \EDFC\MAPROUT.BIN на вашей SD-карте патчем "MAPROUT.IPS". Патчить лучше вне SD-карты - скопируйте на жеский диск, оригинальный файл удалите с карты памяти пропатчите файл на жестком диске, скопируйте обратно. Далее, нужно скопировать файл "027.RBF" в \EDFC\MAPS на SD-карте. Далее, нужно скачать игру. Брать лучше
отсюда (Mi Hun Che (Ch)(full copyrights)[!]), так как бывает еще в формате UNIF, нам нужен iNES. Перед тем как копировать игру на SD-карту, нужно сменить маппер в заголовке ROM-а на 27-й, так как в заголовке ROM-а, который выложен там указан 0-ой маппер, при том, что игра совсем не NROM. Похоже эмулятор определяет маппер по контрольной сумме ROM-а, так как изменения ROM-а хоть на байт приводит к глюкам, как будто игра запущена без маппера. Я выбрал номер маппера 27, так как на NESdev
написано, что CaH4e3 назначил этот номер маппера для этой игры. Правда при этом на его же сайте игра выложена с маппером 0, странно.
А теперь, в тему призываются люди, знающие Verilog (если тут такие есть). Посмотрите пожалуйста файл "map_27.v". Нормально ли там все написано?
И еще, есть некоторые вопросы:
- Для Mi Hun Che, судя по всему, нужен маппер без конфликтов по шине, так как посмотрел в отладчике в эмуляторе - игра пишет по адресам ПЗУ несовпадающие данные. Ну и мне еще интересно создать именно маппер без конфликтов по шине. Для решения проблемы написал "assign rom_ce = !cpu_ce & cpu_rw;", у обычных мапперов в примере было просто "assign rom_ce = !cpu_ce;". Это правильное решение?
- На данном маппере регистр всего на один бит, поэтому написал просто "reg chr_bank;", по крайней мере, для wire обычно не пишут количество бит и это по идее только один "провод". Подумал, может быть и для регистра то же самое актуально, но с другой стороны думаю, а может если для регистра не указать количество бит, то там сразу много бит выделится? Я просто не знаю, я буквально вчера с Verilog познакомился. Просто в примерах обычно регистры хотя бы на два бита, типа "reg [1:0]prg_bank;", поэтому точно не знаю, как правильно сделать, если нужен только один.
- А файл "map_255.v" для самодельного маппера нужен? просто это вроде маппер для ОС, но может от него тоже что-то зависит.