p ä-soft's TurboAss V1.61 q 28.08.90 ACHTUNG!!! Wichtige Žnderungen im Debugger (siehe unten) !!! Noch ein paar in der Version V1.60 nicht vorhandene, aber in der Anleitung aber schon beschriebene, Features: -lokale Symbole sind immer noch NICHT implementiert -PC-relative Optimierungen ber Segmentgrenzen k”nnen immer noch NICHT wieder in absolute Adressierungen zurckgewandelt werden -Absolut-Long kann immer noch NICHT automatisch nach Absolut-Short optimiert werden -Absolut-Short kann immer noch NICHT automatisch nach Absolut-Long zurckgewandelt werden Allgemeines: -Da ich nun ebenfalls Besitzer eines STE bin, konnte ich den Debugger endlich so an den STE anpassen, daž er auch l„uft, d.h. man kommt auch wieder zurck in den Assembler... -Auf ein neues: Wieder ein kompletter neuer Tastaturtreiber im Assembler. Ich hoffe, daž der "automatische Autorepeat" nun ENDLICH raus ist. Es sollte nur noch direkt beim Start des Assembler zu diesem Problem kommen k”nnen. Wir werden sehen... -Der Fehler, warum der Debugger auf einigen Rechnern NICHT lief, ist raus! Es lag nicht (wie vielfach vermutet) am TOS (der Debugger benutzt das sowieso nicht), sondern es lag an einer Serie der GLUE (!!!), die wir (s.o.) nicht in unseren Rechner haben. Diese GLUE produziert an anderen Stellen einen Busfehler, wie die wohl i.A. bliche GLUE. Seitdem ich die STE-Anpassung implementiert habe, gab es also Probleme... -Der Debugger funktioniert, soweit ich es auf der CeBit testen konnte, auch auf dem TT030/02. Der Assembler nur zum Teil (die Assemblierung geht nicht, aber was ist das schon...) -Der Debugger untersttzt jetzt OverScan, d.h. er arbeitet zwar immer noch auf dem kleinen Bildschirm, kann aber auf den OverScan-Modus um- schalten. Den Assembler sollte man jedoch weiterhin in die Ausnahme- liste von OverScan eintragen. Erweiterungen des Assemblers: -ASCII-Laden ist nun etwa 1.5 bis 4 (!) mal schneller. -Bei ADDQ bzw. SUBQ ist kein # mehr n”tig. Der Assembler erg„nzt es nun automatisch (wie bei MOVEQ und TRAP auch). -Wenn man mit SHIFT-F2 die Accessory-Leiste aufgerufen hat, kommt man mit UNDO oder ESC wieder zurck zum Assembler. -Mit dem Pseudo-Opcode BREAKPT 'String' kann man einen speziellen Breakpoint bereits im Assembler einsetzen. Der Unterschied zur ILLEGAL-Directive ist der anzugebende String. Dieser String wird beim Erreichen des Breakpoints vom Debugger n„mlich als Befehlszeile angesehen, d.h. der String wird vom Debugger sofort ausgefhrt. Somit kann man sich beim Erreichen der Directive z.B. automatisch einen Speicherdump o.„. ausgeben lassen. Der String darf sogar mehrere Befehle enthalten, welche mit ':' zu trennen sind (':' entspricht somit RETURN, wenn man selbst tippt). Folgt dem ':' noch ein '-', so wird der Befehl nicht ausgegeben. Ein abschliežendes ':' ist jedoch nicht n”tig. Beispiel: BREAKPT '"Speicherberlauf":-M ^A0#4:L PC#4' Der Text 'Speicherberlauf' wird bei Erreichen des Breakpoints ausgegeben. Dann werden 4 Zeilen ab A0 als Memorydump ausgegeben. Ab Abschluž werden noch 4 Zeilen ab PC (der automatisch hinter die Directive gesetzt wird) gelistet. -Beim Laden von ASCII-Sourcetexten (mit F8) bzw. beim Zuladen wird nun die L„nge der Datei in kb, sowie die schon gelesenen kb ausgegeben. Dies erm”glicht endlich ein Absch„tzen der Ladezeit bei grožen Dateien. -Symbol ersetzen (Ctrl-E) hat nun eine weiter SEHR (!!!) praktische M”glichkeit ganze Symbolgruppen umzubenennen. Jeder, der schon einmal ein reassembliertes Programm dokumentiert hat, kennt das Problem: Man hat ein Unterprogramm (nennen wir es "draw_shape") mit etwa 30 Labeln. šblich ist wohl die Bezeichnung der Label mit "draw_shape1", "draw_shape2", etc. statt der vorgegebenen Bezeichnung "Lxxxx" o.„. Ab sofort ist dies kein Problem mehr: Das Unterprogramm als Block markieren, als zu suchendendes Symbol "~" eingeben und als zu ersetzendes Symbol (in unserem Beispiel) "draw_shape". Nun OK drcken. Das erste Symbol im Block heižt nun "draw_shape"; die Folgesymbole sind aufsteigend numeriert. Diese Funktion nennt sich "Umbennen von Symbolen", d.h. wenn ein Symbol zweimal existiert (doppelte Deklaration), wird es, obwohl es sich nicht mehr im Block befindet, an beiden Stellen umbenannt (denn intern es es ja dasselbe Symbol). Wer dies Vermeiden will, kann nur zu "Symbol ersetzen" bergehen und dort im Block ersetzen. -Wieder habe ich mich dazu herabgelassen einige weitere Optimierungen zu implementieren. Diesmal bringen die Optimierungen zwar keinen Speicherplatz, dafr werden pro Opcode 4 Takte eingespart. Es werden Folgende Befehle optimiert: CLR.L Dx in MOVEQ #0,Dx LSL.x #1,Dx in ADD.x Dx,Dx (ACHTUNG: V-FLAG WIRD VERŽNDERT!) ASL.x #1,Dx in ADD.x Dx,Dx ROXL.x #1,Dx in ADDX.x Dx,Dx ADDA.W #xx,Ay in LEA xx(Ay),Ay Die Optimierungen k”nnen mit CTRL-O ausgefhrt werden (siehe Meneintrag "Assembler" und dort unter "Optimierungen"). -Der Assembler kennt nun s„mtliche Toolbox und OS-Traps des Mac. Inklusive der evtl. Parameter. Da wohl die wenigsten einen Apple Macintosh haben, profitieren wohl lediglich S”ren und ich davon... Erweiterungen des Debuggers: -Einige neue Tastenkombinationen („hnlich dem MonST2): CTRL-Y : F1 - aktuellen Befehl tracen CTRL-S : F5 - aktuellen Befehl berspringen CTRL-A : F2 - Breakpoint hinter den aktuellen Befehl + GO (!) -Wenn der Debugger die Datei "BUGABOO.SYM" findet (dort wo auch "BUGABOO.INF" gesucht wird), wird diese Datei geladen (ach nee) und der Disassembler wird alle absolut short bzw. long Adressierungen ber diese Tabelle laufen lassen. Soll heižen, wenn in der Tabelle z.B. _sysbase = $4f2 steht, wird der Disassembler bei allen Befehlen, welche auf diese Adresse mit obigen Adressierungsarten zugreifen, die Adresse durch den Symbolnamen "_sysbase" ersetzen. Eine "BUGABOO.SYM" Datei befindet sich (mit Sourcetext) bereits im LIBRARY-Ordner. Die SYM-Dateien lassen sich mit F1 erzeugen (siehe Anleitung). -Ich habe vergessen zu erw„hnen, daž man ohne den Debugger zu verlassen nun einen Blick in den Sourcecode werfen kann, wenn man vom Assembler aus in den Debugger gesprungen ist. Also: wenn man irgend- wann w„hrend des Debuggens nicht mehr weiž wo man sich im Source be- findet; einfach F6 drcken. Dann kann man die aktuelle Position im Sourcecode sehen. Žndern kann man da natrlich nix. Noch was: Der Blick in den Sourcecode kostet KEINEN (!) Speicherplatz, nicht einmal die Symboltabelle ist n”tig, da der Assembler die Adressen umrechnen kann. Die Adressen am linken Rand sind brigens alle gleich, dies liegt daran, daž S”ren und ich noch keine Muže gefunden haben den Sourcecode-Teil auch nur irgendwie zu optimieren (Wenn der Source l„nger als 10000 Zeilen ist, wird's ziemlich langsam). Aber besser langsam und unflexibel, als gar nix. (P.S. Welcher Assembler-Debugger hat schon einen solchen Debugger?) -Bei Bedingungen der Befehle: Scc, Bcc und DBcc „ndert sich der "¯" am Zeilenanfang in ein "", wenn die Bedingung erfllt ist! Allerdings nur am aktuellen PC. ACHTUNG! NEUHEITEN IM DEBUGGER: -S„mtliche Filenamen und Pfade (z.B. LOAD, DIR, etc.) MšSSEN jetzt in Anfhrungszeichen (") eigeschlossen werden. Dies ist zwar l„stig, ist aber durch eine Umstellung der internen Strukturen n”tig geworden. -Bisher konnte man ja dem Debugger in der Commandline einen Filenamen oder einen Befehl bergeben (mit "@" davor). Dies kann man nun auch, wenn man mit dem CALL.PRG den residenten Debugger aufruft. -Man kann nun soviele Befehle pro Zeile angeben, wie n”tig. Dazu sind die Befehle durch einen ":" zu trennen (deswegen muž man die Pfade in Anfhrungszeichen angeben). -Auch in der oben erw„hnten Commandline kann man nun mehrere Befehle angeben. Zu beachten ist auch, daž bei der BREAKPT-Directive des Assemblers nun auch Doppelpunkte, anstellen von "|" zur Trennung der Befehle verwandt werden mssen. -Das Scrolling im Debugger verh„lt sich etwas anders als vorher. Das "ruhige" Scrolling ohne Flackern der untersten Zeile mužte dran glauben (an was, kommt sp„ter). -Auf allgemeinen Wunsch hin, funktioniert: DIR ".." auch ohne "\" am Ende wieder (fr Unwissende, damit kommt man ein Verzeichnis zurck, d.h. eine Ordnerebene nach oben). -Wenn bis hierher irgendwelche Probleme, Ungereimtheiten, etc. auftreten, bitte sofort bei mir melden! -Man kann nun mit "#load "Filename.Bug" " eine ASCII-Datei einlesen. Was das soll? Nun, die Datei kann beliebig Befehle enthalten. Zeilen, welche mit einem "%" anfangen werden ignoriert. Mal sehen, was sich in Zukunft bei den Batch-Dateien ergibt (ich bitte um Vorschl„ge!). -Der KEY-Befehl wurde ersatzlos gestrichen. Da die Tastaturmakros im Debugger diesen berflssig machen. -Neue Variablen im Debugger: MIDI :<>0 => Scancodes ber MIDI werden ignoriert, sonst werden diese als Tastencodes interpretiert (fr PC-Tastaturen) CACHE :Inhalt des CACR-Registers bei 68020 oder h”her MEMCHECK:<>0 => Speichertest entf„llt. Ein Dump wrde dann statt "--"-Zeichen einfachen einen Busfehler ergeben. ALL :Setzt alle Register (D0-A6) auf den gleichen Wert. Praktisch zum L”schen o.„. (die Variable kann man natrlich nur setzen) SYMFLAG :<>0 => interne Symboltabelle (BUGABOO.SYM) nicht benutzen SYMTAB :Zeiger auf die interne Symboltabelle (0=keine vorhanden) -Vor dem Verlassen des Debuggers, wird getestet, ob an Adresse $40C eine gltige Adresse steht. Wenn dem so ist, springt der Bugaboo den Vektor an. Wofr das gut ist? Nun, so kann man noch auf die Schnelle seine Workstation schliežen o.„. Man braucht nur ein Unterprogramm einklinken, daž all solche Dinge tut. Damit kann man dann ein Programm beliebig abbrechen (und wieder in den Assembler zurck), ohne daž beim n„chsten Start das VDI abstrzt (weil eine Workstation nicht geschlossen wurde). -Mit dem neuen Befehl COOKIE kann man sich das aktuelle CookieJar ansehen (wenn vorhanden). Damit folge auch ich der Modeerscheinung stets jeden Kleinkram in den Debugger einzubauen (zumal man sich das CookieJar mit "m.l {5a0}.l" ausgeben lassen konnte). -Ich habe noch einige Vorschl„ge von Thomas Waldmann bercksichtigt (auch wenn in Deinem Brief das Gegenteil steht, Thomas): .Wenn man die (neue) Variable RING auf 1 setzt, wird der Ring-Indikator-IRQ nicht mehr angeschaltet. Das werden Modem-User wohl zu sch„tzen wissen. Default: RING=0 .Die Variable SAVEAREA ist jetzt auch unter dem Namen S zu erreichen. Der lange Name hat mich auch schon immer gest”rt. .Beim DIR-Befehl wird jetzt vor Programmen mit der Extension PRG, TOS und TTP automatisch LE als Default vorgegeben. Auch dies sollte wohl sinnvoller sein, da man Programme zum Debuggen sowieso mit LE laden muž. .Hat eine GEMDOS-, (X)BIOS-Funktion einen šbergabeparameter, welcher ein Langwort ist, wird das Langwort (wenn >0) als Zeiger aufgefažt und der String auf den er zeigt ausgegeben (maximal jedoch 32 Zeichen). Damit kann man sofort sehen, welche Datei z.B. bei Fsfirst gesucht wird. Leider kann man auch sehen, welchen Speicherblock (bzw. welchen Inhalt) man freigibt. L„žt sich leider nicht einfach „ndern. Bei der Gelegenheit habe ich das Ausgabeformat ge„ndert, statt "W:Zahl" heižt es jetzt "Zahl.W", dies l„žt an die Extensions der Opcodes denken, was ja auch sinnvoller ist. -Und wieder einige Vorschl„ge von Thomas Waldmann: .Wenn die Variable .memcheck auf 1 gesetzt ist, wird beim SAVE-Befehl keine Bereichsabfrage mehr durchgefhrt. Allerdings kann bei einer fehlerhaften Eingabe das GEMDOS abstrzen. .Die nachgeladene Symboltabelle "BUGABOO.SYM" kann man nun auch selbst nutzen. Man kann z.B. ?{.phystop}.l eintippen, um phystop auszulesen. Der Debugger nutzt jedoch weiterhin zuerst die Symbole der Tabelle des nachgeladenen Programms. Wenn dort das Symbol nicht gefunden wurde, wird in "BUGABOO.SYM" gesucht. -Wenn man OverScan im Debugger nutzen will, muž man zuerst die neue Variable OVERSCAN auf 1 setzen und die Einstellungen sichern. Ab dann erkennt der Debugger OverScan beim Umschalten. Diese Erkennung hat aber einen Nachteil: Der Bildschirm flackert beim Tracen ("wie Sau"). Dies liegt daran, daž zur Erkennung vom aktivierten OverScan min. 2 VBLs gebraucht werden und somit die Umschaltung der Bildschirmseiten auff„llt. Wenn man als OverScan-User die Variable auf 0 setzt, kann man den Debugger nur in normalen Modus benutzen. Mit dem neuen Befehl OVERSCAN kann man den User-Screen zwischen normaler Aufl”sung und OverScan Aufl”sung umschalten. Dies wird mit dem entsprechenden XBIOS- Befehl aus dem OverScan Treiber getan. Somit wird also auch das GEM umgeschaltet. Sonstiges: -Das SHIP.ACC untersttzt in der neuen Version das XACC-Protokoll der Stufe 0 fr Accessorys (Fragen zu diesem Protokoll an: Konrad Hinsen, Gelderner Straže 22b, D-5170 Jlich; Bitnet: HAC041@DJUKFA11; Mailbox: Maus Aachen (0241/154949)). -Andreas Alich hat uns freundlicherweise ein Programm names RSC2S zur Verfgung gestellt. Dieses Programm erm”glicht es RSC-Dateien direkt in den Assemblerquelltext einzubinden. N„heres im RSC2S-Ordner. -Die AES/VDI-Library wurde neu geschrieben. Nun werden die bisher ver- nachl„ssigten VDI-Aufrufe endlich auch wie AES-Aufrufe untersttzt. Markus Fritze