Pull to refresh

Comments 7

Согласен, хорошая книга, но там нет информации по использованию мапперов, по этому не включил в ссылки в конце. А так часто сам от туда черпаю информацию. И еще в просторах интернета...

Как то от нечего делать решил запилить реализацию NES на golang (в основном чтобы поизучать сам golang), даже не смотря на подсматривания в другие реализации я сдался когда попытался реализовать поддержку мапперов. В итоге ничего кроме нулевого маппера не работает.

(а, ну еще и APU не реализован, там своих нюансов тоже хватает, но это совсем другая история...)

В корне просто надо понять что маппер переключает банки памяти, а управляется за частую серийными портами. Если смотреть на тот что в статье, надо все значения с диапазона завернуть на начальный адресс, и потом 5-7 вызовов подряд взять последний бит. Которые записать последовательно и получить байт и уже переключать память, и исполнять байт-код в соответствующих страницах. Но надо учитывать что каждый маппер это своя реализация интерпретации его, например ммс3 ещё надо учитывать векторы прерывания IRQ, которые им генерируются. Но честно я голову ломал неделю как заюзать маппер, самое сложное была конфигурации линкера

Подскажите, а можно взять NSF музыкальный файл, где адрес инициализации находится в $F100 и открыть его в MMC1? ну то-есть смапить в адрес $8000 и запустить?

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

Подскажите ещё момент? я сделал так как у вас конфиг файл для размещения памяти. сделал заголовок такой же. запускаю в отладчике и на адресе $C000 пусто, а $8000 есть код музыкального файла. Но почему? я у вас не вижу другого кода, но у вас запускается с адреса $C001, почему? я же тоже самое сделал для разметки данных. я ставил бряк на память $8000 и $c000 и первой запускается $c001, почему?

Sign up to leave a comment.

Articles