Hi ,
ich wollte einen chip8 interpreter umsetzen.
Dafür muss eine Hauptschleife immer einen neuen Befehl holen, dann
decodieren und dann ausführen.
Die befehle sind in diesem Fall das Spiel. Allerdings weiß ich nicht
genau wie ich die Befehle aus der Spieledatei auslesen muss. Denn wenn
man eine .ch8 Datei mit dem Texteditor öffnet erscheinen da nur
merkwürdige Zeichen.
Und kein Tutorial geht darauf so genau ein^^
Ich weiß nicht genau ob diese .ch8 dateien wirklich alle Befehle
hintereinander gereiht haben. Dann könnte man einach immer 16 Bit
auslesen und in ein Befehlregister reinschreiben.
Naja eigentlich könnte ich das ganze auch einfach testen,wenn ich meine
Hauptschleife fertig programmiert habe und einfach die Datei einlese xD
Wollte aber trotzdem mal fragen was ihr darüber denkt ^^
Hier ein Link zu .ch8 Dateien.
https://www.zophar.net/pdroms/chip8/chip-8-games-pack.html
> Ich weiß nicht genau ob diese .ch8 dateien wirklich alle Befehle> hintereinander gereiht haben.
Die Dateien enthalten die rohen RAM-Inhalt. Sie werden an 0x200 geladen
und auch da gestartet.
> Dann könnte man einach immer 16 Bit auslesen und in ein Befehlregister> reinschreiben.
Du musst 2 Bytes ab der Adresse, auf die der PC zeigt, in dein
"Befehlsregister" lesen und dann interpretieren.
Da Befehle und Daten beliebig gemischt sind, die Befehle immer 2 Bytes
lang sind und auch an ungeraden Adressen liegen dürfen, ist ein
Disassembler nicht mehr trivial. Aber du willst ja nen Interpreter
basteln, das ist einfacher ;-)
Danke für die Antworten,
wenigstens bekomme ich so etwas Motivation :D
>Wozu ein Tutorial?
Ja ich habe eigentlich auch an mich selber den Anspruch durch einfaches
Nachdenken das ganze umzusetzen.
Denn es geht ja da wahrscheinlich nur um das Prinzip Fetch Decode
Execute
Mal schauen^^ Danke nochmal für den Link
>Die Dateien enthalten die rohen RAM-Inhalt. Sie werden an 0x200 geladen>und auch da gestartet.
Dann werde ich das mal versuchen :D
ok , jetzt habe ich zwar schon eine Menge BEfehle abgetippt, aber bin
mir noch sehr unsicher beim Einlesen aus einem "ROM-Game".
So sieht ein Inhat aus einem Test ROM aus:
1
à¢ðe¢0a@0ÿ€€b cqÿÒr’ "&óqÿb Aÿ, î € À ƒÀ ?ÃÃÀ ÿãÃÀ ÿããÀ?€ 3ÿÃãÀÀÀ{àãàÿðààãàÿøàþáàñüð?ÿÁáàð|ð=ÿááàð>ð?ÿááàð>ð?óñáàðøùñáàðÿžÿóáàð>ÿóáàø>ÿ?ãÁàø<ÿÃÁà||<ÿƒÃà~|>? Ãà?ø> ÃÀø ÃÀð ‡ÀÀ ‡À € €
Wenn ich das dann aber auslese, werden die Nullen am Anfang ja einfach
weggelassen.
Wenn ich dann den ersten Befehl (2 Byte) einlese erhalte ich :
:11101110"irgendeinanderererOpcode !!"
ich würde aber gerne wieder 0b0000000011101110 erhalten, denn es geht ja
um den Befehl 0x00EE , so erhalte ich aber nur 0xEE, was ja eigentlich
schon das gleiche ist .
oh man .
Vielleicht hat jemand einen Denkanstoß :P
ja kann ich auch mal testen , wenn das irgendwie irgendwas hilft :D
(habe auch gerade einfach 0x00EE in ein Array geladen, ok da würde es
eigentlich sinn machen. Wenn ich weiß, dass ein Element 16 Bit groß ist,
und der Inhalt EE ist, dann müsste es sich ja um 0x00EE handeln.)
> So sieht ein Inhat aus einem Test ROM aus: [ASCII-Müll]
Den Inhalt der ROMs als ASCII anzuzeigen ist Quatsch. Schau dir das in
Hex an, z.B. INVADERS:
Geladen wird das nach 0x200. Disassembliert ergibt das:
1
00000200 12 25 JP 0x225
2
00000202 53 ... "SPACE INVADERS v0.9 By David WINTER"
3
00000225 60 00 LD V0,0x00
4
00000227 61 00 LD V1,0x00
5
00000229 62 08 LD V2,0x08
6
0000022b a3 d3 LD I,0x3d3
7
0000022d d0 18 DRW V0,V1,8
8
...
> Wenn ich das dann aber auslese, werden die Nullen am Anfang ja einfach> weggelassen.
Wenn zu zwei Bytes schreiben willst, dann tu das auch.
> Vielleicht hat jemand einen Denkanstoß
Eine allgemeine Programmiereinführung wäre dringend angebracht, danach
eine für C oder C++ ...
Eine eigene Frage?
Dieser Thread ist über 7 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.