Reassemblieren ist sicher kein grosses Problem, jedoch ist die Erkennenung von Datensegmenten für ein Programm nicht unproblematisch. Man kann eine automatische Erkennung einbaün, die beim Vorkommen von bestimmten Merkmalen, Werte in Variablen speichert und daraus die Segmente markiert. Das ist aber keine 100%ige Lösung, da viele Programme während der Laufzeit, Zähler und Adressen von solchen Schleifen verändern. Es wäre vieleicht eine kleine Arbeitserleichterung, im Prinzip aber nur eine künstliche "dumme Intelligenz". Solche Bereiche sind schneller von Hand im Monitor abgespeichert und als !bin wieder nachgeladen. Der Reassembler ist kein "eierlegendes Wollmichschwein" für den Ahnungslosen. Man sollte schon grundlegende Kenntnisse besitzen, Bereiche vorab mit dem Monitor speichern und kleine Anpassungen vornehmen können. Sources sind nur vorkonfiguriert. Ein kleines Beispiel: Verwendet wird eine Win32 Umgebung und natürlich DOS. Die verwendeten Programme sind VICE-Emulator, Relaunch64 Editor, ACME Compiler und der Reassembler. Man kann für die erste Bearbeitung des Programms natürlich ebenfalls den echten C64 verwenden und die binären Teile danach zum PC transferieren. Das Programm in diesem Beispiel ist ein alter Kernal-Lader, mit dem man seine ROM-Images von Disk laden und diese bedingt ausführen kann. Vorbereitung Zürst muss man feststellen, welchen Bereich das Programm belegt. Das kann man leicht mit dem Action Replay, Retro Replay oder anderen Modulen feststellen. Das Programm "LADER" liegt von $0801-$0A50 im Speicher und der Befehl LIST verrät uns, dass eine SYS-Zeile vorhanden ist. Wir haben erste Informationen. Das Auswerten der SYS-Zeile kann man nun dem Reassembler überlassen. Wie sieht es nun mit den Datensegmenten aus ? Ein Blick in den Monitor mit dem Befehl I0801 und Scrollen im Dump, zeigt die SYS-Zeile und am Ende einen Datenblock mit Text. Ein geübter Monitor-Nutzer wird auf den ersten Blick feststellen, das ab $09c7 nur noch Bytes erscheinen, die kein wirkliches Programm mehr darstellen können. Wie wollen das aber nochmals dem Cross-Reassembler zur Kontrolle überlassen. Nach dem ersten Programmlauf mit "bblender lader.prg loadadr -c:c64" erscheint unter dem nachvollziehbaren Listing : ; 2503: 5F ; seems to be a data byte (?). An der dezimalen Adresse #2503 vermutet der Recompiler ein Datensegment und nach Umwandlung in hex $09c7 kann man diesen Verdacht bestätigen. Da Datenblöcke wie Text und Grafik in diesem Fall nicht von besonderem Interesse sind, wird der Bereich mit dem Monitor separat abgespeichert : s"lader bin",8,09c7,0a51 . Diese binäre Datei wird später mit dem !bin-Befehl dem Compiler zur Verfügung gestellt. Nachbearbeiten Nun muss der Relauch64 Editor mit ASCII-File ("dump.asm") vom ByteBlender gestartet werden. Wenn der Bereich ab #2503 ($09c7) nicht vorher schon rausgenommen wurde, kann man diesen nun löschen. Dafür wird der binäre File eingesetzt : !bin "lader bin.prg",,2. Ansonsten müssen im Header diverse ";" entfernt und im restlichen Source die relativen Sprünge angepasst werden. Nun steht der Gegenprobe mit dem ACME-Compiler nichts mehr im Weg. Falls man den VICE-Emulator im Relaunch64 eingetragen hat, kann man das compilierte Programm direkt im virtuellen C64 ausführen. Das Ergebnis Links im Bildauszug sieht man das gestartete Programm im VICE-Emulator. Zum Ausführen muss natürlich ein Diskimage mit ROM attached werden. Ich hatte noch ein D64 mit TurboTrans auf der Platte. Nun kann der ROM Filename eingegeben und nach Return sollte es geladen und ausgeführt werden. Dieses kleine Beispiel soll den Sinn und die Anwendungsmöglichkeiten des Recompilers etwas verdeutlichen. Bei komplexen Programmen ist natürlich wesentlich mehr Vorarbeit notwendig. Man könnte den Source nun verändern, zu Lernzwecken verwenden oder Fehler verbessern. Downloads Source für ACME | lader bin.prg LADER.PRG/ZIP Aktüllste Version vom Byte Blender Andere Seiten Byte Blender Home |
Letzte Änderung: 2019-01-03 12:27:58