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