Atari 2600 Spiele dekompilieren

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Prinzipiell ist es möglich, aus Maschinencode (die 2600 hatte einen 6502-kompatiblen Prozessor) Assemblercode zu machen.

Von dort aus wieder auf Quellcode zu kommen, ist nicht möglich. Es gibt zwar für bestimmte Prozessoren Programme, die Maschinencode in Pseudo-Quellcode decompilieren können; da aber Maschinencode keinerlei Informationen über Variablennamen usw. enthält, wird sich dieser Pseudo-Quellcode massiv vom Original-Quellcode unterscheiden.

Für dein Ziel:

so dass ich den Source Code sehen kann so wie die Programmieren damals

ist der auf dem ROMs gespeicherte Maschinencode also nicht ausreichend.

Bei der 2600 sind die Spiele ohne Bankswitching maximal 4 Kilobytes groß, mit Bankswitching 16 Kilobytes. Derartig kleine Programme werden normalerweise nicht in einer Hochsprache geschrieben und dann compiliert, sondern direkt in Assembler-Code.

Bei Spielmodulen mit Bankswitching müsste man beim "decompilieren" auch noch die Bankswitching-Logik des Spielmoduls verstehen, da diese für die Funktion des Spieles absolut wichtige Elektronik mit dem Spielmodul selbst mitgeliefert wurde.

Woah...ein ambitioniertes Vorhaben.

Du wirst erstmal nie den Source Code sehen wie die Programmierer damals...das ist einfach darin begründet dass der Compiler Informationen wegwirft, die für ihn nicht relevant sind. (simples Beispiel)Wenn du z.B. eine Varaiable 'health' hast...den Compiler interessiert es nicht dass diese Variable irgendein Leben beschreibt...die heißt jetzt, sagen wir mal '_y7' (weil es der Compiler so wollte).

Aber mit dem Compiler ist es nicht getan...dann kommt der Linker...und der denkt...mmh...jetzt könnte ich mal '_y7' in Register B packen, dasss addiere ich zu register 'C'  und speichere alles an Position 0x23454.

Das ist der Code den du sehen wirst...

Du siehst...es ist nicht einfach...ABER: es ist möglich. Du musst aber ein Verständnis der Systemarchitektur aufweisen. Zu großen Teilen kann dir der Decompiler (insofern es einen für die Architektur gibt) einiges abnehmen. aber selbst dann bekommst du unleserlichen Code. Solchen Code kann man teilweise interpretieren...aber um ehrlich zu sein - gute Informationen bekommt man nur wenn man ihn debuggt (oh hey...der Wert auf 0x23454 ist dekrementiert wurden....upps...ich habe ja ein Leben verloren).

Die Sache ist halt die: Zu C64 Zeiten wurde nicht in einer höheren Programmiersprache gearbeitet...es wurde 'gehackt bis zum umfallen'. Du stehst jetzt vor einen Haufen Assemblercode (den man nur mit Systemverständnis verstehen kann). Klar...es ist machbar und es gibt (wahrscheinlich) auch Virtuelle Maschinen (mit Debugger) die einen Atari2600 nachbilden können.

Aber das ist leider keine Frage die sich mit: "Nutze einfach decomp-a2600 rom.bin" beantworten lässt. Ich habe schon an einigen 'legacy systems' gearbeitet...der Atari hat bisher nicht dazu gehört...Aber wenn du Fragen hast...mein Profil steht im Antwortheader (mögliche Antworten gehen von 'Klar ich kann mal schauen' bis 'Keine Ahnung, woher soll ich das wissen')