Подтвердить что ты не робот

6502 Эмуляция процессора

Это выходные, поэтому я расслабляюсь от проведения всех недельных программ, написав проект хобби.

Я написал структуру эмулятора процессора MOS 6502 вчера, регистры, стек, память и все коды операций реализованы. (Ссылка на источник ниже)

Я могу вручную запустить ряд операций в отладчике, который я написал, но я хотел бы загрузить ролик NES и просто указать счетчик программ по его инструкциям, я подумал, что это будет самый быстрый способ найти ошибочные коды операций.

Я написал быстрый загрузчик NES и загрузил банки ROM в память CPU.

Проблема в том, что я не знаю, как кодируются коды операций. Я знаю, что сами коды операций следуют шаблону по одному байту на код операции, который однозначно идентифицирует код операции,

0 - BRK
1 - ORA (D,X)
2 - COP b

и т.д.

Однако я не уверен, где я должен найти аргумент opcode. Является ли это байтом непосредственно следующим? В абсолютной памяти, я полагаю, это может быть не байт, а короткий.

Кто-нибудь знаком с этой моделью памяти CPU?

EDIT: Я понимаю, что это, вероятно, снято в темноте, но я надеялся, что здесь есть скрытые хакеры Apple и Commodore.

EDIT: Спасибо за вашу помощь всем. После того, как я внедрил правильные изменения для согласования каждой операции, CPU может загружать и запускать Mario Brothers. Он не делает ничего, кроме цикла, ожидающего Start, но его хороший знак:)

Я загрузил источник:

http://www.codeplex.com/Cpu6502/SourceControl/DirectoryView.aspx?SourcePath=&changeSetId=1810

Если кто-нибудь когда-либо задавался вопросом, как работает эмулятор, его довольно легко следовать. Не оптимизирован, по крайней мере, но опять же, я эмулирую процессор, который работает на частоте 2 мГц на машине 2.4ghz:)

4b9b3361

Ответ 1

Код операции принимает один байт, а операнды находятся в следующих байтах. Например, посмотрите размер столбца здесь.

Ответ 2

Если вы посмотрите на такие ссылки, как http://www.atarimax.com/jindroush.atari.org/aopc.html, вы увидите, что каждый код операции имеет кодировку, указанную как:

HEX LEN TIM

HEX - ваш 1-байтовый код операции. Сразу же после этого есть LEN байты его аргумента. Обратитесь к ссылке, чтобы узнать, что это за аргументы. Данные TIM важны для эмуляторов - это количество тактовых циклов, которое эта инструкция выполняет для выполнения. Вам понадобится это, чтобы правильно настроить время.

Эти значения (LEN, TIM) не кодируются в самом коде операций. Вам необходимо сохранить эти данные в загрузчике/исполнятеле программы. Это просто большая таблица поиска. Или вы можете определить мини-язык для кодирования данных и чтения.

Ответ 3

Эта книга может помочь: http://www.atariarchives.org/mlb/

Кроме того, попробуйте изучить любой другой 6502 aseembler/simulator/debugger, чтобы увидеть, как Assembly получает кодировку как язык машины.

Ответ 4

Руководства 6502 находятся в Интернете на разных исторических сайтах. KIM-1 поставляется вместе с ними. Возможно, в них больше, чем вам нужно знать.

Ответ 5

В Apple II roms включен дизассемблер, я думаю, что он был вызван, и он продемонстрировал бы вам в хорошем формате шестнадцатеричные коды операций и 3-символьный код операции и операнды.

Таким образом, учитывая, как мало памяти было доступно, им удалось запихнуть в число байтов операнда (всегда 0, 1 или 2) код символа 3 символа для всего набора команд 6502 в действительно небольшое пространство, потому что на самом деле этого не так много его.

Если вы можете выкопать Apple II rom, вы можете просто вырезать и вставить оттуда...