Комментарии 7
Я бы вот такую книгу еще посоветовал https://famicom.party/book/
Как то от нечего делать решил запилить реализацию NES на golang (в основном чтобы поизучать сам golang), даже не смотря на подсматривания в другие реализации я сдался когда попытался реализовать поддержку мапперов. В итоге ничего кроме нулевого маппера не работает.
(а, ну еще и APU не реализован, там своих нюансов тоже хватает, но это совсем другая история...)
В корне просто надо понять что маппер переключает банки памяти, а управляется за частую серийными портами. Если смотреть на тот что в статье, надо все значения с диапазона завернуть на начальный адресс, и потом 5-7 вызовов подряд взять последний бит. Которые записать последовательно и получить байт и уже переключать память, и исполнять байт-код в соответствующих страницах. Но надо учитывать что каждый маппер это своя реализация интерпретации его, например ммс3 ещё надо учитывать векторы прерывания IRQ, которые им генерируются. Но честно я голову ломал неделю как заюзать маппер, самое сложное была конфигурации линкера
Подскажите, а можно взять NSF музыкальный файл, где адрес инициализации находится в $F100 и открыть его в MMC1? ну то-есть смапить в адрес $8000 и запустить?
Подскажите ещё момент? я сделал так как у вас конфиг файл для размещения памяти. сделал заголовок такой же. запускаю в отладчике и на адресе $C000 пусто, а $8000 есть код музыкального файла. Но почему? я у вас не вижу другого кода, но у вас запускается с адреса $C001, почему? я же тоже самое сделал для разметки данных. я ставил бряк на память $8000 и $c000 и первой запускается $c001, почему?
Имплементация маппера MMC1 ассемблер 6502 nes/famicom/dendy