rom-wack. Für Fortgeschrittene. Als ich in zwei amerikanischen Texten über den rom-wack hörte, war ich natürlich erstmal baß erstaunt. Der rom-wack ist ein Debugger, ein leistungsfähiger Speicher-Monitor, der resident im Kickstart-ROM des AMIGA drin ist und auf mehrere Arten aufgerufen werden kann. a) Es gibt eine EXEC-Routine namens "Debug()". Wird sie angesprochen, startet der rom-wack. Auf der Diskette des Lattice C Compilers V3.03 befindet sich im Directory "C" z.B. ein kleines Programm, das eben diese Routine aufruft. Man kann den Zeiger von "Debug()" auch auf einen anderen Debugger umbiegen - dann wird dieser bei einem entsprechenden Funktionsaufruf aktiviert. b) Startet man die Workbench nicht mit "loadwb", sondern mit loadwb -debug, hat man rechts vom "Special"-Menü der Workbench eine Menü (ohne Titel), in dem je nach Kickstart-Version mehrere Debugging-Funktionen aufrufbar sind. c) Wenn der AMIGA sich mit einer Guru Meditation verabschiedet bevor er einen Reset durchführt, kann man den rom-wack durch Drücken der rechten Maustaste starten. d) Wenn der AMIGA resetet und dabei die Power-Lampe vorne links am Gehäuse langsam blinken läßt, springt man in den rom-wack durch Drücken der Delete-Taste ($7f) am externen Terminal. Externes Terminal? Ja, Leute, so einfach ist das mit dem rom-wack nicht. Der rom-wack arbeitet nur auf eine einzige Art und Weise: bei 9600 Baud über den seriellen Port. Tja, wo kriegt man jetzt ein externes Terminal her? Ein anderer Rechner mit einem Terminalprogramm steht wohl vielen Leuten zur Verfügung. Am Beispiel des Atari ST: Man nimmt ein ganz normales RS232-Kabel, mit dem man den Atari ST normalerweise an ein Modem anschließt. Dann zückt man den Lötkolben und vertauscht an einer beliebigen Seite die Anschlüsse 2 und 3. Unter bestimmten Umständen kann es auch nötig werden, zusätzlich die Anschlüsse 4 und 5 und dann 6 und 20 miteinander zu vertauschen (eins dieser vier Signale fehlt allerdings beim ST). Dann lädt man ein vernünftiges Terminalprogramm auf dem ST, stellt als Parameter 9600 Baud, 8 Datenbits, keine Parität, 1 Stopbit ein. Fertig. Bei Aktivierung des rom-wack sollte jetzt eine Meldung auf dem ST erscheinen. Mit dem 64er wird das ganze schon schwieriger, wenn nicht unmöglich. Nach jahrelanger DFUe mit der intelligenten Schuhbank wage ich zu bezweifeln, daß die Schrottkiste 9600 Baud schafft. Ansonsten wäre das Verfahren das gleiche wie beim ST - nur braucht man auf der 64er-Seite ein RS232-Interface zur Wandlung der TTL-Pegel (0 und 5 Volt) auf V.24-Pegel (+12 und -12 Volt). Ich hatte den Vorteil, daß in meinem privaten Computer-Museum hier noch ein altes Video-Terminal Typ DEC VT-62 (ja, 62, nicht 52) stand. Nach diversen Diagnose- und Reparatur-Versuchen von allen möglichen mehr oder weniger unfähigen Bastlern (incl. dem unfähigsten Radio-Fernseh-Techniker und ST-Besitzer, den ich kenne, Originalzitat: "Ja, jetzt hab ich an allen Potis gedreht und es geht immer noch nicht. Mehr kann ich da nicht tun"), machte sich Norbert, der Held der Arbeit, an die Sache ran. Nach zwei Sitzungen, nach drei Stunden Messerei mit meinem "unfähigen" digitalen Meßgerät, nach dem Auslöten von diversen funktionierenden Bauteilen und nach einem Meßfehler, durch den bei mir eine (offensichtlich geniale) Vision ausgelöst wurde, lief die Kiste wieder. Das wirkliche Wunder daran war wohl, daß Norbert tatsächlich nach der Trial- und Error-Methode die richtigen Ersatzteile einbaute! Man braucht einfach nicht nur technisches Verständnis, sondern auch Hartnäckigkeit. Norbert hat beides - was wäre ich nur ohne ihn? Allgemein: Was wären viele Programmierer ohne die entsprechende Unterstützung von Ihren NIs (Sprich: Enn-Iehs = Nützliche Idioten)? Tja, den Rest der Probleme mit dem Anschluß an den AMIGA konnte ich dank meiner Erfahrungen auf dem DFÜ-Sektor selbst erledigen. Jetzt habe ich hier ein Zweit-Terminal zur Benutzung mit dem rom-wack. Wie aber funktioniert der rom-wack? Gute Frage! Ich habe einige Zeit dran gearbeitet, weil mir beim AMIGA sämtliche Kenntnisse auf dem Gebiet "Assembler" fehlen. 68000? Was ist das? Nach dem Aufruf des rom-wack meldet er sich mit: rom-wack PC: FC0852 SR: 0000 USP: 01D7D8 SSP: 07FFFA XCPT: 0000 TASK: 01C7D0 DR: 000000008000FFFF000001A8000000030000F803000000000000000000000007 AR: 0001D8B8 00000006 00FF0A78 0001D890 00FF3F70 0001D890 00000610 SF: 00FF3DCA 0001D830 00FF00A4 0000F803 00FEEC7C 00FF01E8 0001B048 < Dann kann man mit "?" (alle Ein- und Ausgaben auf dem externen Terminal!) folgende Befehle anzeigen lassen: Alter - Zum Ändern von Daten in Datenworten Während des "Alterns" kann man mit < und > blättern Boot - Zum Neustarten des AMIGAs Clear - Löscht den Breakpoint an der aktuellen Adresse Fill - Füllt den Arbeitsbereich mit einem "Pattern" Find - Sucht im Arbeitsbereich nach einer Byte-Kette Go - Startet ein Programm an der aktuellen Adresse Ig = Boot Limit - setzt den oberen Rand des Arbeitsbereiches (der untere Rand wird durch die momentane Position des Anzeigebereiches angegeben) Regs - Zeigt die Register (wie oben) an. PC = Program-Counter, SR = Stack, USP = User-Stack-Pointer, SSP = System-Stack Stack-Pointer, XCPT = Exception-Code (bei einer Guru-Meditation), TASK = ???, DR = Daten-Register, AR = Adress-Register, SF = ??? Reset - Löscht alle Breakpoints Resume - Zum Beenden des rom-wacks (geht auch mit CTRL-D) Set - Setze Breakpoint an der aktuellen Adresse Show - Zeige alle Breakpoint-Adressen an User - Übergibt die Kontrolle wieder an den AMIGA, so daß bei einer Guru Meditation vorher alle Disk-Operationen abge- schlossen werden können (klappt nicht unbedingt) CTRL-I (TAB) führt ein Single-Step durch. Zum Blättern im Speicher kann man folgende Tasten benutzen: < - 2 Byte zurück (geht auch mit Space) , - Bereichslänge zurück Return - Bereich nochmal anzeigen :n - Bereichslänge auf n Bytes setzen (ursprünglich 16 Byte) -n - n Bytes zurück +n - n Bytes vor n - Zu Adresse n springen (alle n-Angaben in hex!) eck. ( - Zur Adresse springen, die durch das Datenwort des aktuellen Bereichs angegeben wird eck. ) - und wieder zurück = - Ändern des ersten Datenwortes !aX - Ändern des Adress-Registers X !dX - Ändern des Daten-Registers X !u - Ändern des "USP" Zuerst hatte ich beim rumhacken im rom-wack keinerlei Anhaltspunkte, das Meiste der Sachen da oben habe ich selbst rausbekommen. Doch mittlerweile habe ich erfahren, daß ich mir all diese Arbeit hätte sparen können: Der rom-wack ist im AMIGA ROM Kernel Reference Manual: Exec, Seite 83ff beschrieben. Was mal wieder eine Unterregel von Murphy's Gesetz bestätigt: Sucht man eine Sache im Handbuch, so steht sie falsch, unvollständig oder gar nicht drin. Verzichtet man auf die überflüssige Suche, so ist die Sache ausführlich im Handbuch dokumentiert. Ich fange mit dem externen Terminal übrigens noch mehr nette Sachen an. Als Entwickler hatte ich das zweifelhafte Glück, diverse Beta-Versionen von Kickstart und Workbench 1.2 zu bekommen (mittlerweile dürfte sie ja jeder haben, sie werden ja in Deutschland zusammen mit dem PAL-Amiga ausgeliefert). Auch wenn ich trotzdem wegen Kompatibilitäts-Problemen mit existierender Software meistens Kick 1.1 benutze, habe ich von der Workbench 1.2 den "Mount"-Befehl übernommen. Ich kopierte "C:Mount", "DEVS:MountList" und "L:AUX-Handler" auf meine übliche Workbench-Diskette (auf der sich auch der CLI-Befehl "Ask" von Jim Thomas, einem AMIGA-Entwickler aus den Staaten, befindet) und fügte die folgenden Zeilen in meine StartUp-Sequence ein: Ask VT62 (j/n)? If Warn Then Echo "Terminal nur beim Debuggen aktiv." Else Mount AUX: NewCli AUX: Echo "Terminal aktiv." EndIf Jetzt habe ich immer ein CLI offen, ohne daß ich ständig auf der Workbench rumwuseln muß. Besonders bei den Vorbereitungen zu neuen Disks, wo die Arbeit mit einer Textverarbeitung ständig mit dem CLI abwechselt, erweist sich das zunehmend als überaus nützlich. Hat man übrigens mal ein Terminal am AMIGA dran, dann sollte man darauf achten, immer nur von einem Task Eingaben vom Terminal zu erwarten. Macht man z.B. NewCli AUX: und dann nochmal NewCli AUX:, dann gehen die Eingaben zeichenweise abwechselnd an das erste und das zweite CLI.