home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / develop / d68k / d68k.doc < prev    next >
Text File  |  1995-02-27  |  31KB  |  790 lines

  1.  
  2.  
  3.     D68k Version 1.90 von Denis Ahrens 1993 ShareWare
  4.  
  5.  
  6.     D68k ist ein FILE-Disassembler für den MC68000,68010,68020,68030,
  7.     68040, FPU 68881,68882 und die PMMU 68851.
  8.  
  9.     Man kann mit D68k alles disassemblieren was aus Hunks besteht, also
  10.     auch Objektfiles und amiga.lib's. Desweiteren kann D68k auch
  11.     Bootblöcke disassemblieren die als File abgespeichert wurden.
  12.     (Die ersten drei Bytes müssen den Text 'DOS' enthalten.)
  13.  
  14.     D68k ist vollständig in MC68000 Assembler geschrieben, und
  15.     läuft nur mit OS V2.x oder höher ( dos.library >= 37, und wenn nötig
  16.     asl.library >= 37). Der Rechner selbst spielt keine Rolle.
  17.     Schnell muß der Rechner NICHT sein. Falls der ASL-FileRequester
  18.     benutzt wird, empfehle ich ASL.lib Version 38 oder höher.
  19.  
  20.     D68k ist auf (m)einem Amiga 1000 mit MC68010 2MB FRAM und 130MB
  21.     Seagate AT-BUS HD unter OS2.1/3.0 geschrieben worden.
  22.     D68k wurde mit A68k 2.71 und bLink assembliert und gelinkt.
  23.     Das File-Datum von D68k muß mit dem im Programm übereinstimmen.
  24.     Der Source-Code ist ca. 13400 Zeilen lang (248kB).
  25.  
  26.     Das Programm D68k ist SHAREWARE.
  27.     Aber es soll jeder selber entscheiden, was Ihm D68k Wert ist!
  28.     Für Leute die sich nicht entscheiden können, schlage ich DM 15,- vor.
  29.     Die Share-Ware Gelder setze ich für Fachliteratur ein.
  30.     (Habe aber noch NICHTS bekommen, SCHADE)
  31.     (Die Qualität dieses Programmes hängt davon ab (fast))
  32.  
  33.     D68k sollte (darf) nicht benutzt werden um Schutz-Techniken von
  34.     Programmen zu entfernen.
  35.     Das Programm D68k darf nur ZUSAMMEN mit der Anleitung verbreitet werden.
  36.     Die kommerzielle Nutzung und/oder Verbreitung des Programmes
  37.     bedarf meiner SCHRIFTLICHEN Erlaubnis. Auch die Verbreitung in
  38.     KOMMERZIELLEN (gebührenpflichtigen) PD-MailBox-Systemen ist NICHT
  39.     gestattet.
  40.  
  41.     Der Schreiber des Programms übernimmt keine Haftung für materielle
  42.     oder geistige Schäden, die durch D68k entstanden sind - entstehen werden.
  43.     Das Benutzen des Programmes geschieht auf EIGENE Gefahr!.
  44.  
  45. *******************************************************************************
  46.  
  47.     SCHNELLSTART
  48.  
  49.     Er wird über das CLI gestartet mit Angabe des Files das
  50.     Ihr disassemblieren wollt.
  51.  
  52.     Man kann die Ausgabe mit Control-C jederzeit abbrechen.
  53.     Falls die Ausgabe im CLI-Fenster 'läuft', kann man mit einem Tasten-
  54.     druck die Ausgabe anhalten und mit einem Druck auf die Backspace-Taste
  55.     fortsetzen.
  56.  
  57.     z.B.:
  58.  
  59.     1> D68k ram:Prgs/exep04
  60.  
  61.     würde so aussehen:
  62.  
  63. -------------------------------------------------------------------
  64. 01:D68k V1.xx MC68000-68040,MC68881/82,MC68851 Disassembler
  65. 02:Copyright DD.MM.93 by Denis Ahrens
  66. 03:
  67. 04:00000001 00288E20 00000040 00000004 00391828 00000000 00000000
  68. 05:
  69. 06:                 CODE       ;000 000004
  70. 07:
  71. 08:000000  4AFC                ILLEGAL
  72. 09:000002  4E71                NOP
  73. 10:
  74. 11:                ;Hunk-END
  75. -------------------------------------------------------------------
  76.     Die Zeilennummern am Anfang gehören natürlich NICHT dazu!
  77.  
  78.     In der vierten Zeile sind StatusInformationen die NUR für mich
  79.     sind (zum debuggen).
  80.  
  81.     Für Interessierte:
  82.  
  83.     1. Langwort:    Anzahl der Hunks (Nicht der Wert aus dem HUNK-HEADER!!)
  84.     2. Langwort:    SpeicherAdresse der Hunktabelle
  85.     3. Langwort:    Größe der Hunktabelle (Hunks * 64 Bytes)
  86.     4. Langwort:    Länge aller CODE, DATA und BBS Hunks zusammen
  87.     5. Langwort:    SpeicherAdresse der LabelTabellen
  88.     6. Langwort:    Anzahl der gefundenen Labels
  89.     7. Langwort:    Anzahl der sortierten Labels
  90.     
  91.     In der sechsten Zeile steht der HunkName (CODE) mit der Nr. (0)
  92.     und der Länge in Bytes (#4).
  93.  
  94.     In der achten und neunten Zeile steht (endlich) der PC
  95.     des Hunks, der MaschinenCode und am Ende das (der,die) Mnemonic.
  96.  
  97.     In der elften Zeile kommt dann die EndHunk-kennung.
  98.  
  99. *******************************************************************************
  100.  
  101.     DIE AUSGABE
  102.  
  103.     Bei RELOCxx-Hunks (Reloc32,16,08) wird die Anzahl der zu korrigierenden
  104.     Adressen angezeigt. Das ist praktisch zum Optimieren eigener
  105.     Programme. Wenn man mit relativer Adressierung arbeitet, erkennt
  106.     man so schnell, ob man eine Zeile ohne relativ-code geschrieben hat.
  107.  
  108.     Bei SYMBOL-Hunks die Anzahl der Symbole.
  109.     Bei UNIT- und NAME-Hunks werden die Namen angezeigt.
  110.     Bei EXTERN-Hunks werden die Inhalte der Typen <$80 angezeigt.
  111.  
  112.     Wenn D68k einen Bootblock erkennt wird anstelle des Hunk-Namens das
  113.     Wort BOOTBLOCK ausgegeben. Die CODE-Größe ist auf 1024 Bytes minus
  114.     3 Langwörter beschränkt. (FileSystem-Kennung,Checksumme und Rootblock)
  115.  
  116.     Um den Code mit A68k zu Re-Assemblieren muß man am Ende des
  117.     'Textes' ein " END" anfügen.
  118.     Eventuell muß man den Code noch an seinen persönlichen
  119.     Assembler anpassen (Ich hoffe nicht).
  120.  
  121. *******************************************************************************
  122.  
  123.     EINIGE ERKLÄRUNGEN
  124.  
  125.     Während die Power-LED dunkel ist, sucht D68k die Labels.
  126.     Wenn die LED wieder hell wird, sortiert D68k die Labels bis
  127.     die Ausgabe anfängt. (Hier kann man die Geschwindigkeit der
  128.     QuickSort-Routine beobachten.)
  129.  
  130.     Wenn D68k einen Befehl NICHT erkennen kann, (und er kennt ALLE Befehle)
  131.     oder ein Befehl eine NICHT zulässige Adressierungsart hat, wird
  132.     er NICHT angezeigt (z.B. JMP D0 oder JSR (A0)+ ). Stattdessen wird ein
  133.     Word als Hexzahl ausgegeben.
  134.  
  135.     Bei Befehlen mit Byte-Konstanten, bei denen das high-order-byte NICHT
  136.     NULL ist, wird auch das als illegaler Befehl interpretiert. Da aber
  137.     manche Assembler/Compiler das Byte per EXT.W zum Wort erweitern
  138.     (was FALSCH ist), wird bei negativen Bytewerten der Wert $ff im
  139.     high-order-byte eingetragen. Dies wird von D68k berücksichtigt.
  140.     Das high-order-byte muss also $00 oder $ff sein.
  141.  
  142. *******************************************************************************
  143.  
  144.     Die NORMALE Methode (TRACE ist nicht eingeschaltet)
  145.  
  146.     Der Nachteil liegt darin das bei der 'normalen' Methode nach einem RTS
  147.     zum Beispiel der Text 'topaz.font",0 auch disassembliert würde.
  148.     Dadurch entstehen wirre Befehle, weil sich Datas und Befehle oft nicht
  149.     unterscheiden lassen. Unglücklicherweise liegen die kleinen Buchstaben
  150.     als ASCII-Code bei $60-70, und genau dort sind die ganzen BRANCH- und
  151.     MOVEQ-Befehle. Durch die BRANCH Befehle werden Fehl-Labels erzeugt und
  152.     dadurch wird die Ausgabe undurchschaubar.
  153.  
  154.     In manchen Disassemblern werden NICHT angesprunge Befehle im Code-
  155.     Hunk als Data-Zeilen angezeigt. Da dies nicht immer klappt, geht
  156.     das NICHT mit D68k. Bei der 'normalen' Methode werden im CODE-Hunk NUR
  157.     Datas angezeigt wenn KEIN Befehl erkannt wird. Wenn ein Programm nur
  158.     MC68000 Befehle enthält und Daten oder Texte von D68k als MC68010
  159.     Befehle (oder höher) erkannt werden, klappt das natürlich nicht.
  160.     Aber meiner Meinung nach haben Daten in Code-Hunks nichts zu suchen.
  161.  
  162.     Falls D68k Libraries im Code-Hunk erkennt werden diese umgangen.
  163.     In PASS1 wird die Länge des Library-Textes übersprungen und in PASS2
  164.     wird auf Daten-Ausgabe umgeschaltet. Folgende Libraries werden
  165.     unterstützt falls sie an einer geraden Adresse beginnen:
  166.  
  167.     68040.library        dos.library
  168.     icon.library        intuition.library
  169.     expansion.library    utility.library
  170.     gadtools.library    graphics.library
  171.     iffparse.library    workbench.library
  172.     asl.library        locale.library
  173.     bullet.library        commodities.library
  174.     diskfont.library    exec.library
  175.     .library        .device
  176.  
  177. *******************************************************************************
  178.  
  179.     DIE TRACE-Methode !!!!!!!!!!!!!!!!!!!!!!!!
  180.  
  181.     Der Unterschied zur normalen Methode ist der, das D68k im ersten PASS
  182.     nicht einfach geradeaus durchdisassembliert, sondern bei einem
  183.     UNBEDINGTEM Sprung (BRA.x, JMP.x, RTS oder RTx) anhält und sich eine
  184.     Adresse holt, die vorher vermerkt wurde, und dort weiter
  185.     disassembliert u.s.w. Alle so abgearbeiteten Adressen werden als
  186.     Befehle markiert.
  187.  
  188.     Falls ein Programm aber eine Adresse mit dem Befehl LEA in das
  189.     Adressregister A2 'ladet', und dann per JSR A2 verzweigt kann die
  190.     TRACE-Methode das nicht nachvollziehen. Die Befehle werden dann nicht
  191.     markiert und werden deshalb im zweiten PASS als Datas ausgegeben weil
  192.     D68k diese NICHT als CODE vermerkt hat. Um diesen Umstand auszugleichen
  193.     besteht die Möglichkeit, ein Text-File anzulegen das eine Tabelle enthält,
  194.     in der die Adresse(n) steht, die mit dem LEA-Befehl nach A2 geladen wurde.
  195.     D68k kann dann per Option das File einlesen, und die Adresse in die
  196.     interne SprungTabelle eintragen, um auch diese, vorher nicht erkannten
  197.     Befehls-abschnitte disassemblieren zu können.
  198.  
  199.     BEISPIEL:
  200.  
  201.     Man disassembliert den LIST Befehl folgendermaßen:
  202.  
  203.     1> D68K "c:Loadwb" TO "ram:loadwb.asm" TRACE RLO
  204.  
  205.     dann betrachet man das Ergebnis mit einem Editor und sucht Data-Stellen
  206.     die nach Befehlen aussehen. (Z.B. kurz vor dem nächsten Label steht der
  207.     Wert $4E75, der dem Befehl RTS entspricht)
  208.  
  209.     Im T: Verzeichnis sollte jetzt ein File mit dem Namen 'JumpList.Loadwb'
  210.     abgespeichert worden sein. Ladet dieses File mit einem zweiten Editor
  211.     ein. Die Adressen die Ihr im letzten Schritt gefunden habt könnt
  212.     Ihr nun am ENDE diese Files eintragen.
  213.  
  214.     D68k interessieren nur zwei Hex-Zahlen pro Zeile die mit einem Komma
  215.     getrennt sind und mit einem Dollarzeichen ($) beginnen. Das Hex-
  216.     Zahlenpaar muß (noch) am Anfang der Zeile stehen.
  217.  
  218.     Als erste Zahl muß die HunkNummer, und als zweite Zahl die Adresse
  219.     eingetragen werden. Die Hunknummer steht immer am Anfang des Hunks
  220.     (an Adresse Null) im Dezimalformat. Ihr müsst also die Zahl noch
  221.     umwandeln.
  222. ________________________________________________
  223.  
  224.     ;
  225.     ; D68k V1.83 JumpList for 'Loadwb' V38.9
  226.     ;
  227.  
  228.     $00015455,$00000470    ;Die File-Identifikation und File-Größe
  229.  
  230.     $00,$00035E    ;hier kann man Bemerkungen eintragen
  231.     $00,$0003B4
  232. ________________________________________________
  233.     
  234.     Die Versionsnummer solltet Ihr auch eintragen. Dann kommt Ihr nicht
  235.     durcheinandner, wenn Ihr vom dem Programm eine neue Version erhaltet.
  236.     Wenn D68k eure JumpList nicht akzeptiert, dann stimmt die File-
  237.     identifikation in dem JumpList-File NICHT mit dem eingeladenen File
  238.     überein.
  239.  
  240.     Speichert das File unter dem Namen 'JumpList.Loadwb' in diesem
  241.     Verzeichnis ab:
  242.  
  243. !!!            SYS:Prefs/Presets/D68k/
  244.  
  245.     Jetzt gebt folgende Zeile ein:
  246.     (Editor im hintergrund laufen lassen)
  247.  
  248.     1> D68k "C:Loadwb" to "ram:Loadwb.asm" TRACE RLO JUMPLIST
  249.  
  250.     Nun könnt Ihr wieder zum Editor umschalten und das File "Loadwb.asm"
  251.     nocheinmal einladen. Die vorher nicht erkannten Befehle sind nun
  252.     ordentlich disassembliert. Falls noch weitere Befehls-abschnitte
  253.     NICHT disassembliert wurden, könnt Ihr weitere Adressen in dem
  254.     JumpList-File eintragen und die letzten Schritte wiederholen.
  255.  
  256.     Meistens genügt es, wenn man eine Adresse einträgt, denn hierdurch
  257.     werden meist weitere Adressen vermerkt wodurch ev. eine Ketten-
  258.     reaktion entsteht.
  259.  
  260.     Als Editor emfehle ich CED. Dort kann man in einem Fenster (oben) das
  261.     File "Loadwb.asm" nach Adressen absuchen und in einem zweiten Fenster
  262.     (unten) das File "T:JumpList.Loadwb" bearbeiten.
  263.  
  264. ------------------------
  265.  
  266.     Wer es eilig hat, kann die fertigen JumpListen mit dem Verzeichnis D68k
  267.     in das SYS:Prefs/Presets Verzeichnis kopieren. Wenn Ihr die gleichen
  268.     Versionen der dortigen Programme 'besitzet', könnt Ihr diese gleich
  269.     benutzen, da ich die Adressen schon eingetragen habe.
  270.  
  271.     Nochmal der vollständige Pfad der JumpListen:
  272.  
  273.     SYS:PREFS/PRESETS/D68K/JumpList.Loadwb
  274.  
  275. ------------------------
  276.  
  277.     Es gibt zwei Methoden von NICHT erkannten Sprung-Adressen, einmal mit
  278.     Label und einmal ohne Label.
  279.  
  280.     1.
  281.     Falls die von euch als Befehle identifizierte Routine ein Label hat,
  282.     kann man das File "Loadwb.asm" nach diesem Label absuchen (mit der
  283.     Editor-Suchroutine) und den weiteren gebrauch der Adresse verfolgen.
  284.     So stellt man sicher das es sich wirklich um eine Befehls-Routine handelt.
  285.  
  286.     2.
  287.     Wenn der Routine kein Label vorangestellt ist, dann solltet Ihr das
  288.     File "Loadwb.asm" nach JSR's und JMP's durchsuchen. Wenn ein solcher
  289.     Befehl relativ springt (z.B. JSR (A0) oder JMP 0(PC,D0.l) dann solltet
  290.     Ihr verfolgen wie das Ziel des Sprunges errechnet wird. Falls kein
  291.     Sprung zu dieser Adresse zu finden ist, handelt es sich vielleicht um
  292.     eine 'tote' Routine die NICHT angesprungen wird. Wenn Ihr euch ABSOLUT
  293.     sicher seid, könnt Ihr diese Routine entfernen.
  294.  
  295.     DIE TRACE-LOGIC (1)
  296.  
  297.     Um die TRACE-Methode noch sicherer zu machen, werden von D68k
  298.     auch SprungTabellen erkannt die per JMP L000012(PC,D0.W) springen.
  299.     Diese Tabellen sehen so aus, wenn sie von D68k als solche erkannt wurden:
  300.  
  301.      ...CMPI.W    #$0014,D1            ;Anzahl der Einträge
  302.     BGE.W    L000016                ;Bei Überlauf verzweigen...
  303.     ADD.W    D1,D1                ;Verdoppelung (wegen Wortgröße)
  304.     MOVE.W    L00000F(PC,D1.W),D1        ;relative Distanz holen
  305.     JMP    L000010(PC,D1.W)        ;und springen
  306. L00000F:
  307.     dc.w    L000011-L000010            ;hier stehen die Differenzen
  308. L000010:                    ;vom DIESEM Label aus
  309.     dc.w    L000011-L000010            ;bis zum Sprungziel.
  310.     dc.w    L000012-L000010
  311.     dc.w    L000013-L000010
  312.     dc.w    L000014-L000010
  313.     dc.w    L000015-L000010
  314. u.s.w....
  315.  
  316.  
  317.     Da die TRACE-Methode sehr gut ist, wird die DATALOGIC übergangen.
  318.     Auch die RTSLOGIC sollte ausgeschaltet werden. D68k sucht auch nicht
  319.     mehr nach Libraries, wie bei der normalen Methode.
  320.  
  321. *******************************************************************************
  322.  
  323.     DIE OPTIONEN VON D68k:
  324.  
  325.     ?    Listet alle Optionen auf
  326.  
  327.     FILE:    Als erstes wird natürlich der Filename des zu disassemblierenden
  328.         Files angegeben. Wenn man den Filenamen wegläst dann öffnet sich
  329.         ein ASL-File-Requester.
  330.  
  331.     TO/K:    Mit dieser Option kann man die Ausgabe in ein File umlenken
  332.         Das Intro und die INFO's werden nicht mit ausgegeben.
  333.         Dafür wird zusätzlich der VERSIONS-String ausgegeben, der
  334.         Name des Files und die Länge in Bytes.
  335.  
  336.     NOPC/S:    Dies MUSS angegeben werden wenn man re-assemblieren möchte.
  337.         Hierdurch werden der PC und die HEX-Codes weggelassen.
  338.         Das spart eine Menge an Zeit, und das ev. erstellte File
  339.         ist wesentlich kürzer.
  340.  
  341.     INFO/S:    Es werden ein paar Informationen zu dem File angezeigt
  342.         (FileSize, HunkAnzahl, Labels ...).
  343.         Die Informationen erscheinen nur im Ausgabefenster, das ist
  344.         nützlich wenn man die Ausgabe in ein File umlenkt und
  345.         trotzdem ein paar Informationen sehen will.
  346.  
  347.     HUNKLAB/S:
  348.         Es werden die Label-Adressen von Symbol-Hunks aufgelistet.
  349.         Die Offets von EXT-Hunks werden angezeigt.
  350.         (Aber nur die des Typs < $80)
  351.  
  352.         PROBIER DAS zum testen der Option: D68k LIB:amiga.lib hunklab
  353.         (Das ist praktisch um die neuen Offsets aus einer NEUEN
  354.         amiga.lib zu ziehen, falls man sie hat.)
  355.  
  356.     NC=NOCODE/S
  357.         Die Ausgabe der Befehle wird unterdrückt. Das ist praktisch
  358.         wenn man NUR die DATA-Ausgabe sehen will, dann braucht man
  359.         nicht mehr ewig-lange CODE-Zeilen scrollen lassen.
  360.  
  361.     ND=NODATA/S
  362.         Die Ausgabe des Inhaltes aller Daten-Hunks wird unterdrückt.
  363.  
  364.     NB=NOBSS/S
  365.         Die Ausgabe aller BSS-Hunk Anweisungen wird unterdrückt.
  366.  
  367. ------------------------------------
  368.  
  369.         Die TRACE-Methode und ihre Optionen
  370.  
  371.     TRACE/S
  372.         Mit dieser Option wird eine alternative Methode benutzt
  373.         um Labels und Datas in Code-Hunks zu erkennen. Es werden
  374.         alle Sprungmarken notiert bis ein UNBEDINGTER Sprung kommt.
  375.         Dann wird eine von den notierten Sprungmarken geholt und an
  376.         dieser Stelle wird weiter disassembliert.
  377.         Vorteil : Es wird nie in Datas disassembliert.
  378.         Nachteil: Falls per JSR (A0) gesprungen wird, kann diese Adresse
  379.               nicht notiert werden und demzufolge fällt dieser
  380.               Programmabschnitt (und dadurch ev. weitere) weg.
  381.         Am besten Ihr testet es mal mit dem LIST Befehl der 2.0
  382.         Workbench, einmal mit TRACE und einmal ohne.
  383.  
  384.     JL=JUMPLIST/S
  385.         Mit dieser Option (nur zusammen mit TRACE) kann man bestimmen
  386.         das D68k sich 'notierte' Adressen aus einem File zieht. Dieses
  387.         File MUSS im Verzeichnis SYS:Prefs/Presets/D68k zu finden sein.
  388.         Der Name fängt mit "JumpList." an und endet mit dem Filenamen
  389.         den man zum disassemblieren angegeben hat.
  390.         In diesem Text-File können von Ihnen eingetragene Adressen
  391.         stehen, die D68k sich als abzuarbeitende Sprungmarken merkt.
  392.         Dieses gleicht den Nachteil der TRACE-Methode vollständig aus.
  393.  
  394. ------------------------------------
  395.  
  396.         Die folgenden Routinen sind nur für die 'normale' Methode
  397.         sinnvoll.
  398.  
  399.     RLO=RTSLOGICOFF/S:
  400.         Wenn nach einem RTS Befehl kein Label folgt ist es ziemlich
  401.         unwahrscheinlich das Code folgt. Deshalb werden automatisch
  402.         nachfolgende Programmdaten als Hex-Datas ausgegeben.
  403.         Mit dieser Option kann diese automatische Unterdrückung der
  404.         Befehle hinter einem RTS Befehl abgeschaltet werden.
  405.         (Das gleiche gilt für die Befehle: BRA, JMP, RTD, RTE, RTM, RTR)
  406.         (Sollte bei TRACE-Methode benutzt werden)
  407.  
  408.     DLO=DATALOGICOFF/S
  409.         Bei D68k werden NICHT erkannte Hex-Codes als Datas ausgegeben.
  410.         Weil der PC an diesen Hex-Codes sowieso nicht vorbeikommt,
  411.         können alle nachfolgenden Hex-Codes bis zum nächsten Label
  412.         auch als Datas ausgegeben werden. Mit dieser Option kann man
  413.         diese Logik abschalten und nur WIRKLICH nicht erkannte Hex-Codes
  414.         werden als Datas angezeigt.
  415.         (Schaltet die 'RTSLOGIC' auch mit aus)
  416.  
  417.     OLO=ORILOGIC/S
  418.         Bei ORI.x Befehlen die aus zwei Wörtern bestehen und ein
  419.         Label zwischen den beiden Wörtern ist, wird ein Wort als
  420.         Data ausgegeben und die Befehlsausgabe mit dem Label
  421.         fortgesetzt. (Wenn nach einem RTS ein 'LeerWort' folgt um
  422.         die Routine durch vier teilbar zu machen, denkt D68k das das
  423.         ein ORI-Befehl ist. Mit dieser Option kann man diese Befehle
  424.         aussschalten.)
  425.  
  426. ------------------------------------
  427.  
  428.         Die folgende Routine ist nur zum Debuggen von D68k.
  429.  
  430.     NL=NEXTLABEL/S
  431.         Mit dieser Option wird die Längendistanz bis zum nächsten Label
  432.         oder Symbol angezeigt (diekt vor dem PC). Wenn die NOPC-
  433.         Option benutzt wird fällt diese automatisch weg.
  434.         (Ist eigentlich mehr für MICH zum debuggen).
  435.  
  436. *******************************************************************************
  437.  
  438.     WARUM ICH D68K GESCHRIEBEN HABE:
  439.  
  440.     Ich bin neugierig und der DisAsm 1.05 war mir
  441.  
  442.     1. zu langsam
  443.     und außerdem
  444.     2. benutzt er tausende von SPACE's (ich nehm TAB's)
  445.     3. er spinnt bei OS V36 und höher
  446.     4. zeigt zuwenig Nebeninformationen
  447.     5. ist nicht anpassbar (an meine Wünsche)
  448.     6. erkennt keine 68020.. Befehle
  449.     7. Kreuzberger Nächte sind lang.
  450.  
  451.     (er war aber ein gutes Vorbild)
  452.  
  453. *******************************************************************************
  454.  
  455.     WAS VERBRAUCHT D68K AN SPEICHER?
  456.  
  457.     1. Die eigene Länge (is ja wohl logisch)
  458.     2. Die Größe des zu disassemblierenden Files (ach ne)
  459.     3. 128kB für die Labels
  460.     4. Pro Hunk nochmal 64 Byte (genauer Wert in der Status-Zeile (3.LW))
  461.     5. Falls die Trace-Option eingeschaltet ist nochmal ein sechszehntel
  462.        der Code-Hunk Längen. (Pro Wort ein Bit)
  463.     6. Falls die Trace-Option eingeschaltet ist 32kB für die Sprungmarken.
  464.  
  465.     7. Falls eine JumpList eingeladen wird, wird dieser Speicher nur
  466.        kurzzeitig belegt.
  467.  
  468. *******************************************************************************
  469.  
  470.     FEHLER:
  471.  
  472.     Zeigt aus optischen Gründen keine Labels an ungeraden Adressen
  473.     im CODE-Hunk an (da dürften aber auch gar keine sein).
  474.     (teilweise behoben: Wenn Daten angezeigt werden, erscheinen auch
  475.     Labels an ungeraden Stellen)
  476.  
  477.     Wenn ¡hr Fehler findet (besonders in der Umsetzung der Befehle)
  478.     meldet euch bei mir.
  479.  
  480. *******************************************************************************
  481.  
  482.     WAS ICH MIR NOCH VORSTELLEN KÖNNTE:
  483.  
  484.     - Gepufferte Daten-Ausgabe für eine bessere Output-Performance.
  485.  
  486.     - Noch bessere Erkennung von Data-Segmenten in CODE-Hunks.
  487.  
  488.     - Spezielle Behandlung beim disassemblieren von Libraries.
  489.  
  490.     - Wenn Ihr Vorschläge habt, die ich realisieren kann, her damit.
  491.  
  492. *******************************************************************************
  493.  
  494.     HISTORY:
  495.  
  496.     V0.421  Mitte 91 (Größe ca. 10kb)
  497.  
  498.     -VersionsNummer des Grundprogramms (ohne Labels)
  499.  
  500.     V0.5xx    Mai-Juni 92
  501.  
  502.     -Labels sind dazugekommen (puh war das 'ne Arbeit)
  503.  
  504.     V0.96 29-Jun-92
  505.  
  506.     -Sortierroutine der Labels wurde insg. um den Faktor 2-3 beschl.
  507.  
  508.     V0.97 29-Jul-92
  509.  
  510.     -Die Data-Ausgabe ist nun brauchbar (hoffe Ich)
  511.     
  512.     V0.99 29-Jul-92
  513.  
  514.     -Die BSS-Ausgabe ist nun brauchbar (V0.98)
  515.     -Die Befehle ROXL.? und ROXR.? wurden falsch geschrieben
  516.      (ROLX.? und RORX.?)
  517.     -Die Reloc32-Zeile hat nun ein Semikolon
  518.     -Die Hunk-Namen sind jetzt zum Re-Assemblieren mit A68k an die
  519.      richtige Stelle gerückt
  520.     
  521. +++++++++++++++++++
  522.  
  523.     V1.00 06-Aug-92
  524.  
  525.     -Fehler bei MOVEP.W, es wurde immer MOVEP.WL angezeigt
  526.  
  527. +++++++++++++++++++
  528.  
  529.     V1.04 20-Aug-92
  530.  
  531.     - Effektive AdressierungsArt PCIndex mit Displacement wurde
  532.       vergessen. (Label wurde nicht angezeigt)
  533.     - Fehler bei PCIndirekt mit neg. Richtung in den Adressierungsarten-
  534.       Routinen behoben
  535.     - Bei dem Befehl BTST hatte Ich die AdressierungsArt #Konstante
  536.       vergessen
  537.     - Bei dem Befehl CHK wurde die #Konstante nur in Byte-größe angezeigt.
  538.       Es muß aber min. Wort-größe sein(Beim 68000/10).
  539.     - Ein GROSSER Fehler beim Überprüfen der möglichen AdressierungsArten
  540.       ist behoben. (JMP D0 ist nicht mehr möglich)
  541.     - Es sind AUßER den cpXXX ALLE 68020 Befehle dazugekommen
  542.       (Die neuen AdressierungsArten gibts auch noch nicht, mir fehlt das Buch)
  543.     - Die Option NOPC/S schaltet die ganzen Hex-Zahlen am Anfang der Zeile ab
  544.     - Unter DOS 1.3 läuft D68k nicht mehr (wegen ReadArgs, FreeArgs und
  545.       WriteChars.
  546.     - xxx.B (z.B. MOVE.B D0,A0) in ein AdressRegister gibt es jetzt nicht mehr
  547.     - Die Option TO/K zum umlenken der Ausgabe in ein File
  548.     - Die Ausgabe wurde etwas verbessert. Es werden jetzt nicht mehr
  549.       soviele Zeichen einzeln ausgeben, ist aber kaum schneller da sowieso
  550.       alles durch die _LVOWriteChars(a6) Routine gepuffert wird.
  551.     - Fehler bei der Ausgabe der letzten Zeile bei BBS und DATA Hunks beseitigt
  552.     - Labelsortier-Routine beschleunigt (2 mal, z.B. LHA von 37 auf 27 sek.)
  553.     - LED flackern bei vielen CODE-Hunks (z.B. amiga.lib) behoben
  554.  
  555. +++++++++++++++++++
  556.  
  557.     V1.07 29-Sep-92
  558.  
  559. !!!    - BÖSER FEHLER beim Schreiben der Mnemonics in ein File behoben
  560.       (halb mein Fehler, halb Commodores Fehler(?))
  561.     - Die Routine zum ermitteln der Labelnr. ist nun wesentlich schneller
  562.       (kürzerer Code (68010.. opti.))
  563.     - Anzeige der FehlerQuelle mittels IoErr() und PrintFault()
  564.     - Die Option INFO/S zeigt die Status-Informationen an, wenn sie
  565.       bereit stehen (Länge des Files, HunkAnzahl, LabelAnzahl...)
  566.     - Die 68881/82 Befehl FBcc, FDBcc und FScc werden erkannt
  567.     - einige Optimierungen bei der DATA-ausgabe.
  568.     - Option HUNKLAB/S dazugekommen (ist aber nocht nicht ganz fertig
  569.       zeigt bisher nur SymbolNamen)
  570.     - bessere Ausgabe von fehlsprüngen z.B. JMP $00(PC,d0.l)
  571.  
  572. +++++++++++++++++++
  573.  
  574.     V1.50 23-Nov-92
  575.  
  576.     - Bei Unit- und Name-Hunks wird der Name auch angezeigt
  577.     - Mit HUNKLAB werden jetzt auch Daten (Offsets) vom Extern-Hunk
  578.       aufgelistet (nur die des Typs < $80)
  579.     - Die Symbol-Adressen werden nicht nur aufgelistet, sondern auch
  580.       als Label angezeigt.
  581.     - Die Anzahl der Extern-Hunk Einträge wird jetzt korrekt angezeigt.
  582.     - Wenn externe referenzen vorhanden sind, werden diese im Code-Hunk
  583.       angezeigt (z.B. MOVEA.L _AbsExecBase,A6 ).
  584.     - Man kann jetzt die 'rts-logic' mit RLO/S abschalten (siehe oben)
  585.     - Die Ausgabe der CODE-, DATA-, und BSS-Hunks kann nun mit den
  586.       Optionen NOCODE, NODATA und NOBSS unterdrückt werden
  587.     - Enforcer-Hits durch das eventuelle Auslesen der Adresse $0 kommen
  588.       nicht mehr vor (ist aber ungetestet, hab keine MMU, bloß 'nen MC68010)
  589. !!    - MEINE SELECTIONSORT-Routine zum Sortieren der Labels wurde durch eine
  590.       QUICKSORT ersetzt. Vorher 35 sek., jetzt vier Sekunden für LhA.
  591.     - Das letzte Label eines Hunks, wurde immer als erstes Label im nächsten
  592.       Hunk angezeigt. Dies ist behoben.
  593.     - Bei dem, mit der TO/S Option, erzeugtem File ist jetzt das ExecutableBit
  594.       nicht mehr gesetzt.
  595. !!    - D68k erkennt jetzt ALLE CPU Befehle (bis einschließlich 68040)
  596.       (Ausnahme: Die cpXXX Befehle des 68020; sind aber identisch mit den
  597.       gleichnamigen F-Line Befehlen)
  598. !!    - Es sind ALLE 68881/82 Befehle integriert. Auch die Double- und
  599.       Single Precision des MC68040.
  600. !!    - Es werden ALLE 68851 PMMU Befehle erkannt.
  601. !!    - Die Adressierungsarten des 68020... sind vollständig integriert.
  602.       (Ich hab sie alle von Hand entschlüsselt, mit dem Newmodes File
  603.       von Carnivore/Beermacht; wenn was fehlt melden)
  604.     - Fehler beim Umsetzen der PC-relativen Adresse bei dem Befehl
  605.       BTST #Imm behoben (Fehler im AdressParser, SAS ASM 5.10b hat auch
  606.       Probleme)
  607.     - Fehler bei MOVE TO SR und MOVE TO CCR wurde behoben. Anstatt WORD
  608.       wurde ev. BYTE oder LONG angegeben (vom letzten Befehl).
  609.     - Es werden jetzt auch Reloc16, Reloc08 und DReloc16 erkannt und
  610.       zwingen D68k NICHT mehr zum Abbrechen.
  611.       (Werden aber noch nicht so unterstützt wie Reloc32)
  612.     - Die Anzeigenlänge der Hunks ist von vier Bytes auf zehn gestiegen.
  613.       Aus EXT. wird EXTERN, aus RE32 wird RELOC32 usw.
  614.     - Wenn ein CODE, DATA oder BSS Hunk ins CHIP-Ram geladen wird,
  615.       wird das auch angezeigt.(DATA CHIP, CODE CHIP oder BBS CHIP)
  616.       Für FAST-Ram gilt das gleiche.
  617.     - AusgabeFile wird nur erzeugt wenn vorher alles geklappt hat.
  618.  
  619. +++++++++++++++++++
  620.  
  621.     V1.51 01-Dez-92
  622.  
  623.     - Absturz bei File-Ausgabe OHNE INFO-Option beseitigt.
  624.     - Hunk-Fehlermeldungen bei FileAusgabe werden ab jetzt nur auf
  625.       dem CLI-Fenster ausgegeben.
  626.  
  627. +++++++++++++++++++
  628.  
  629.     V1.52 29-Dez-92
  630.  
  631.     - Anstatt DRELOC16 wurde DRELOC32 ausgegeben. Das ist behoben.
  632.     - Extern_Dext16 wird erkannt und ev. eingesetzt.
  633.     - Es werden jetzt mehr Extern_korrekturen unterstützt.
  634.     - Die Hunk-Sorten HUNK-LIB und HUNK-INDEX werden erkannt.
  635.     - Bei PC-Relativen Sprüngen (Bcc ,JSR $0000(PC) ,DBcc, FDBcc ,PDBcc
  636.       FBcc oder PBcc) mit einem Sprung-Displacement von NULL wird
  637.       kein Label mehr erzeugt.
  638.     - Der LPSTOP Befehl (MC68060!) wurde vier Bytes zu kurz angegeben (PASS 1).
  639.     - FLine-Befehls Erkennung (PASS 1) hat NICHTS erkannt. Das ist behoben.
  640.     - Anstatt FACOS wurde FCOSH ausgegeben. Das ist behoben.
  641.     - Kleine Unstimmigkeit bei SUBX (PASS 1) ist beseitigt.
  642.     - Bei einem Labelüberlauf (>32768 Labels) wird abgebrochen.
  643. !    - Wenn die File Option NICHT angegeben wird öffnet sich ein
  644.       ASL-FileRequester.
  645.     - Bei den BitField Befehlen wurde das Datenregister falsch angezeigt.
  646.     - Der 'SINGLE' (.S) Wert auf der Mnemonic-Seite wurde falsch angegeben.
  647.     - Reloc_Labels und Extern_Equates werden jetzt in Code- und Data-Hunks
  648.       angezeigt.
  649.  
  650. +++++++++++++++++++
  651.  
  652.     V1.53 06-Jan-93
  653.  
  654.     - Es werden auch Labels in Hunks angezeigt, deren Länge NULL beträgt.
  655.       (Ein einziges Label an Adresse Null (gesehen in small.lib))
  656.     - Ausgabefehler bei PMOVE-Befehlen beseitigt.
  657.     - Bessere Aussortierung von illegalen BitField-Befehlen.
  658.     - Kleine Ungereimtheiten bei BitField-Befehlen deren Adressierungs-Arten
  659.       nicht zulässig waren sind beseitigt.
  660.     - Bei FRESTORE fehlten zwei Adressirungsarten. (Die beiden PC-relativen)
  661.     - Fehler in PASS1 bei FSAVE, PSAVE, FRESTORE und PRESTORE behoben
  662.     - In PASS1 werden jetzt die Standard-Libraries erkannt und übersprungen.
  663.       Dadurch fallen die Labels weg, die erzeugt worden wären. In PASS2
  664.       werden anstatt der Befehle die Library-Namen ausgegeben.
  665.  
  666. +++++++++++++++++++
  667.  
  668.     V1.54 18-Jan-93
  669.  
  670.     - Bei CMPI.x fehlten die PC-relativen AdressierungsArten.
  671.     - Label-, Symbol- und Reloc32 Suchroutinen überarbeitet und beschleunigt.
  672.     - Bei ADDI.x und SUBI.x werden die Zahlen nur noch positiv angezeigt.
  673.     - Die Optionen NextLabel und OriLogicOff sind hinzugekommen.
  674.     - Falls Labels zwischen Befehlen existieren werden sie (an geraden
  675.       Adressen) angezeigt. Das sieht so aus: 000000 4BF9~0000 0000
  676.       Das ist ein LEA Befehl wo sich mittendrin ein Label an Adresse 000002
  677.       befindet. Dies wird durch ein '~' angezeigt.
  678.  
  679. +++++++++++++++++++
  680.  
  681.     V1.55 23-Jan-93
  682.  
  683.     - Fehler bei der UNIT- und NAME-HUNK Ausgabe der Version 1.54 behoben.
  684.  
  685. +++++++++++++++++++
  686.  
  687.     V1.84 11-Feb-93
  688.  
  689. !!!    - D68k hat jetzt eine neue Methode um Programme zu disassemblieren.
  690.       Man muß sie mit der Option TRACE einschalten. (Bitte oben lesen)
  691. !    - Falls die TRACE-Methode gewählt wurde, erkennt D68k C-spezifische
  692.       Jumptabellen die so angezeigt werden, das ein Assembler die
  693.       korrekten Adressen errechnen kann.
  694.     - Die Skalierung bei PC-Relativen Adressierungsarten wurde hinzu-
  695.       gefügt. {z.B.: L000001(PC,D0.L*2)  }.
  696.     - Es wurden mehrere Fehler bei den neuen Adressierungsarten beseitigt.
  697.     - Der Asl-Requester wird mit etwas mehr Sicherheit abgearbeitet.
  698. !!    - D68k erkennt jetzt auch ABGESPEICHERTE Bootblöcke (File-Format).
  699.     - Wenn die Hunkgröße die Filegröße überschreitet wird eine Fehler-
  700.       meldung ausgegeben (z.B. bei gesplitteten Files).
  701.     - Die Anzeige der Extern-Listen bei der Hunklab-Option werden jetzt
  702.       bündiger ausgegeben, so das sie in einer Reihe stehen.
  703.     - Bei Reloc08 und Reloc16 Hunks wurde anstatt ein Byte bzw. ein Wort
  704.       IMMER ein Langowrort eingelesen um das Label zu erzeugen, wodurch
  705.       eine illegale Adresse entstand, die an den Sicherheitstests nicht
  706.       vorbeigekommen ist. Das ist jetzt behoben.
  707.     - Labelerzeugung durch Reloceinträge in Data-Hunks war fehlerhaft.
  708.     - Bei Bcc-Sprungbefehlen wird jetzt auch auf Reloceintrag überprüft. Das
  709.       heisst Bcc Befehle können jetzt auch auf andere Hunks zeigen! (A68k).
  710.       Beim Linken muß dann SmallCode angegeben werden.
  711.     - Falls das einzuladende File eine Länge vonn Null Bytes hatte, wurde
  712.       zwar abgebrochen (Speicherfehler!), aber das File wurde nicht ge-
  713.       schlossen. Jetzt wird es geschlossen und eine 'kann File nicht
  714.       öffnen' Fehlermeldung ausgegeben.
  715.  
  716. +++++++++++++++++++
  717.  
  718.     V1.86 17-Feb-93
  719.  
  720.     - Wenn ein Bootblock erkannt wurde, werden jetzt die ersten drei
  721.       Langwörter ausgegeben. (Kennung, Checksumme und Rootblock)
  722.     - Die Berücksichtigung des Externhunks wurde um Extern_Dext08 und
  723.       Extern_Dext32 erweitert.
  724.     - Die Hunks Hunk_DRel08 und Hunk_DRel32 werden jetzt auch erkannt.
  725.       (Wird aber sonst noch nicht berücksichtigt, weil mir der Zweck nicht
  726.       bekannt ist)
  727.     - Bei der Ausgabe WURDE der Name des Files durch die doppelte Belegung
  728.       eines FileInfoBlocks falsch ausgegeben.
  729.  
  730. +++++++++++++++++++
  731.  
  732.     V1.87 22-Feb-93
  733.  
  734.     - Der ILLEGAL-Befehl wird ab jetzt auch als Endpunkt bei der Trace-
  735.       Methode angesehen (Weil der PC hier nicht vorbeikommt).
  736.     - Datumformat wegen inkompatibilität zum Versionsbefehl geändert.
  737.     - Im Hex-Bereich wird zwischen einem Reloc32-Langwort ein Unterstrich
  738.       gesetzt (Nur im CODE-HUNK).
  739.  
  740. +++++++++++++++++++
  741.  
  742.     V1.88 06-Mar-93
  743.  
  744.     - Labeladressen an denen schon Symbole von einem Symbol-Hunk sind,
  745.       wurden trotzdem ausgegeben. Jetzt wird wieder der Symbolname als
  746.       Label ausgegeben.
  747.     - Guru3 bei SymbolNamensuche behoben.
  748.     - Symbolnamen wurden nur 16 Zeichen lang ausgegeben, das ist jetzt
  749.       behoben.
  750.     - Bei dem CAS.x Befehl wurden die beiden PC-Relativen mit den beiden
  751.       Absoluten Adressierungsarten vertauscht (die falschen Zwei wurden
  752.       akzeptiert und die richtigen nicht).
  753.  
  754. +++++++++++++++++++
  755.  
  756.     V1.89 19-Apr-93
  757.  
  758.     - Enforcer-Hits bei Aufruf des ASL-Requesters behoben.
  759.     - Enforcer-Hit beim Schreiben des Reloc-Identifiers "_" behoben.
  760.     - FBcc und PBcc als Springer deklariert, damit sie mit der Trace-
  761.       Methode funktionieren.
  762.  
  763. +++++++++++++++++++
  764.  
  765.     V1.90 2-Aug-93
  766.  
  767.     - Die Länge von LIB-Hunks wird jetzt korrekt ausgegeben.
  768.  
  769. +++++++++++++++++++
  770.  
  771.     V1.91 23-Aug-93
  772.  
  773.     - Die Ausgaberoutine ist nun gepuffert (FWrite()).
  774.  
  775.     - Die FLine Befehle werden nun wieder nach Labels abgesucht.
  776.       (Ich habe vergessen dies nach dem debuggen wieder einzuschalten).
  777.  
  778. *******************************************************************************
  779.  
  780.  
  781.     Meine Adresse:
  782.  
  783.     Denis Ahrens
  784.     Kommandantenstr.53
  785.     10969 BERLIN
  786.     DEUTSCHLAND
  787.  
  788.     Tel:  (030) 614-8979
  789.     MODEM: Nur unter Ankündigung
  790.