Сейчас выходные, так что я отдыхаю от того, что целую неделю занимаюсь программированием, и пишу хобби-проект.
Я вчера написал фреймворк эмулятора процессора MOS 6502, реализованы регистры, стек, память и все опкоды. (Ссылка на источник ниже)
Я могу вручную запустить ряд операций в написанном мной отладчике, но я хотел бы загрузить ПЗУ NES и просто указать счетчик программ на его инструкции, я подумал, что это будет самый быстрый способ найти ошибочные коды операций.
Я написал быстрый загрузчик ПЗУ для NES и загрузил банки ПЗУ в память процессора.
Проблема в том, что я не знаю, как кодируются коды операций. Я знаю, что сами коды операций следуют шаблону из одного байта на код операции, который однозначно идентифицирует код операции.
0 - BRK
1 - ORA (D,X)
2 - COP b
так далее
Однако я не уверен, где я должен найти аргумент кода операции. Это байт, следующий непосредственно за ним? В абсолютной памяти, я полагаю, это может быть не байт, а короткий.
Кто-нибудь знаком с моделью памяти этого процессора?
РЕДАКТИРОВАТЬ: Я понимаю, что это, вероятно, снято в темноте, но я надеялся, что здесь скрываются какие-то старые хакеры Apple и Commodore.
EDIT: Спасибо всем за помощь. После внесения необходимых изменений для согласования каждой операции процессор может загружать и запускать Mario Brothers. Он ничего не делает, кроме ожидания Start, но это хороший знак :)
Я залил исходник:
https://archive.codeplex.com/?p=cpu6502
Если кто-нибудь когда-нибудь задумывался, как работает эмулятор, то поймёте, что это довольно просто. Нисколько не оптимизирован, но опять же, я эмулирую процессор, работающий на частоте 2 МГц, на машине с частотой 2,4 ГГц :)