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 ![]() 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 ![]() !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 ![]() ![]() 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