Frage

Es ist das Wochenende, also entspanne ich mich vom Programmieren der ganzen Woche, indem ich ein Hobbyprojekt schreibe.

Ich habe gestern den Rahmen eines MOS 6502 -CPU -Emulators geschrieben, die Register, Stack, Speicher und alle Opcodes werden implementiert. (Link zur Quelle unten)

Ich kann eine Reihe von Operationen im Debugger, den ich geschrieben habe, manuell ausführen, aber ich möchte ein NES -ROM laden und den Programmzähler auf seine Anweisungen richten, dass dies der schnellste Weg ist, um fehlerhafte Opcodes zu finden.

Ich schrieb einen schnellen NES ROM -Loader und lud die ROM -Banks in den CPU -Speicher.

Das Problem ist, dass ich nicht weiß, wie die Opcodes codiert sind. Ich weiß, dass die Opcodes selbst einem Muster eines Byte pro Opcode folgen, das den Opcode eindeutig identifiziert.

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

etc

Ich bin mir jedoch nicht sicher, wo ich das Opcode -Argument finden soll. Ist es das Byte direkt folgt? In absoluter Erinnerung könnte es vielleicht kein Byte sein, sondern ein kurzes.

Ist jemand mit dem Speichermodell dieser CPU vertraut?

EDIT: Mir ist klar, dass dies wahrscheinlich im Dunkeln gedreht wird, aber ich hatte gehofft, dass hier ein Oldschool -Apfel- und Commodore -Hacker lauerten.

BEARBEITEN: Vielen Dank für Ihre Hilfe alle. Nachdem ich die richtigen Änderungen implementiert hatte, um jeden Vorgang auszurichten, kann die CPU Mario -Brüder laden und ausführen. Es macht nichts anderes als Schleife, die auf den Start warten, aber es ist ein gutes Zeichen :)

Ich habe die Quelle hochgeladen:

https://archive.codeplex.com/?p=cpu6502

Wenn sich jemals jemand gefragt hat, wie ein Emulator funktioniert, ist es ziemlich einfach zu folgen. Nicht im geringsten optimiert, aber andererseits emuliere ich eine CPU, die bei 2 MHz auf einer 2,4 -GHz -Maschine läuft :)

War es hilfreich?

Lösung

Der Opcode nimmt ein Byte und die Operanden befinden sich in den folgenden Bytes. Schauen Sie sich die Spalte der Bytegröße an hier, zum Beispiel.

Andere Tipps

Wenn Sie sich mit Referenzen wie untersuchen http://www.atarimax.com/jindroush.atari.org/aopc.html, Sie werden sehen, dass jeder Opcode eine Codierung hat, die als:

HEX LEN TIM

Das Hex ist dein 1-Byte-Opcode. Unmittelbar folgt es Len Bytes seiner Argumentation. Wenden Sie sich an den Verweis, um zu sehen, was diese Argumente sind. Die TIM -Daten sind für Emulatoren wichtig - es ist die Anzahl der Taktzyklen, die dieser Befehl zur Ausführung benötigt. Sie benötigen dies, um Ihr Timing korrekt zu machen.

Diese Werte (Len, Tim) sind im Opcode selbst nicht codiert. Sie müssen diese Daten in Ihrem Programmloader/Executer speichern. Es ist nur ein großer Lookup -Tisch. Oder Sie können eine Mini-Sprache definieren, um die Daten und Leser zu codieren.

Dieses Buch könnte helfen: http://www.atariarchives.org/mlb/

Versuchen Sie außerdem, alle anderen 6502 Aseembler/Simulator/Debugger zu überprüfen, um zu sehen, wie die Baugruppe als Maschinensprache codiert wird.

Die 6502 Handbücher befinden sich im Internet an verschiedenen Historien. Der Kim-1 wurde mit ihnen versendet. Vielleicht mehr in ihnen als Sie wissen müssen.

Die Apple II -ROMs enthielten einen Dissembler.

Angesichts der Tatsache, wie wenig Speicher verfügbar war, gelang es ihnen, die Anzahl der Operand -Byte (immer 0, 1 oder 2) zu schieben. Der 3 -Zeichen -Opcode für den gesamten 6502 -Befehl, der in einen wirklich kleinen Raum eingestellt wurde, da es wirklich nicht so viel davon gibt.

Wenn Sie ein Apple II -ROM ausgraben können, können Sie einfach von dort ausschneiden und einfügen ...

Der 6502 verfügt über unterschiedliche Adressierungsmodi, dieselbe Anweisung enthält je nach Adressmodus verschiedene Opcodes. Schauen Sie sich die folgenden Links an, die die verschiedenen Möglichkeiten beschreiben, wie ein 6502 Daten aus dem Speicher oder direkt aus ROM abrufen kann.

http://obelisk.me.uk/6502/addressing.html#imm

Dies ist besser - 6502 Befehlssatz Matrix:

https://www.masswerk.at/6502/6502_instruction_set.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top