DASM

Das Disassemblerpaket DASM erlaubt es, binären Code einer CP/M .COM-Datei in einen Quelltext umzuwandeln. Hier ein Zitat aus der Originaldatei:
;	DASM is a TDL/ZILOG Disassembler derived from Dave Barker's
; ZZSOURCE and Ward Christensen's RESOURCE by Richard Conn.  Refer to
; the documentation on RESOURCE and the built-in HELP data for information
; on the commands used for DASM.  A Help file is also being planned for DASM.
DASM selbst erzeugte Code für den Z80 Prozessor undzwar mit mit dem ZILOG-Modul Assemblermnemonics in Z80 ZILOG-Notation und mit dem TDL-Modul erweiterte Assemblermnemonics in 8080-Notation. Aus dem oben erwähnten Programm RESOURCE ließ sich jedoch auch eine „reine" 8080-Lösung erzeugen.

Die Arbeitsweise von DASM war wie folgt (eine Anleitung, allerding nicht in aktueller Form, von mir findet sich hier):
DASM erzeugte drei Steuerdateien:
  1. .CTL: Diese Datei bestimmt, ob Programmcode oder Daten (als Byte-, Wort-, Zeichenfolge oder reservierter Speicher) vorliegen. Beim Arbeiten mit DASM ist dies die wichtigste Datei, da durch diese letzlich der Ablauf der Assemblerdatei gesteuert wird. DASM unterstützt zwar eine (nicht sehr effektive) automatische Erkennung von Zeichen, das ist aber nicht optimal, weil viele Ladeoperationen im ASCII Bereich angesiedelt sind. Hierdurch steht dann plötzlich mitten im Code eine Zeichenfolge.
  2. .SYM: In diese Datei werden die Symbole geschrieben, entweder selbst definiert oder automatisch durch DASM in der Form Lxxxx, wobei „xxxx" die 16-Bitadresse des Symbols darstellt. Der Dateityp .SYM wird auch vom Linker für die Symbole verwendet — ich habe diesen Typ deshalb in SMB geändert.
  3. .CMT: In diese Datei können Adressen Kommentare zugeordnet werden, was durchaus praktisch ist. So lässt sich hier eine Beschreibung z.B. eines Unterprogramms angeben.
Ein normaler Arbeitsablauf sah so aus, dass zunächst die oben angeführten Dateien erzeugt wurden. Eventuell musste noch nachgearbeitet werden. Am Schluss konnte dann die Assemblerdatei generiert werden1.
Das Original-DASM teilte den verfügbaren TPA-Speicher statisch ein, also für die Kontrollen, Symbole, Kommentare und für die zu bearbeitende .COM-Datei. Statisch bedeutet fest, also unabhängig von den wirklichen Anforderungen. Eine der ersten Änderungen, die ich durchgeführt habe, war, den Speicher dynamisch zuzuordnen. Ein zweiter Schritt war, nur einen Rekord der .COM-Datei — also 128 Bytes — zu laden, so dass für den Arbeitsspeicher optimaler Ausnutzung gegeben war.
Eine andere Erweiterung ist, dass der aktuelle Programmzähler bei den Disassemblerbefehlen (A, B und L) durch Eingabe eines '?' abgefragt werden kann. Dies kann bei langen Dateien durchaus von Vorteil sein.
Eine letzte Erweiterung betrifft die Ladeadresse für .COM Dateien: Mit dem Kommando Vaaaa kann eine beliebige Ladeadresse (Voreinstellung ist 0100) gewählt werden.

Das Programm selber wurde aus zwei Teilen zusammengestellt: Der Kern wird immer benötigt, während das endgültige Programm durch den Mnemonic-abhängige Teil bestimmt wurde. Für die ZILOG Version wird folgende Kommandofolge für den Einsatz des Microsoft M80-Pakets benötigt:
M80 =DASMZ80 /ZAssembliert den Kern
M80 =DASMKRN /ZAssembliert den ZILOG-Teil
L80 DASMZ80,DASMKRN,DASM/N/EErstellt die Datei DASM.COM

Hier die Quelldateien:
Disassemblerteil
Kommandoteil
Originale Quellen v1.5

1. Im Quelltext werden in der Regel viele Unterprogramme aufgerufen. Eine Hilfe ist dabei eine Liste dieser Unterprogramme für eine bessere Übersicht. Ich habe dazu zuerst ein Hilfsprogramm LABDASM in TURBO Pascal geschrieben, das Labels alphabetisch auflistet, die in CALL-Anweisungen stehen. Dies basiert auf dynamischen Routinen von Rodnay Zaks aus seinem Buch Einführung in PASCAL (Seite 308). Später habe ich das Programm LABDASM in Assembler geschrieben. Hier basieren die dynamischen Routinen auf dem Aufsatz Binary Tree Manipulation mit dem 8080 von Mike Gabrielson. Angeregt durch diese Routinen habe ich ein zweites TURBO Pascal-Programm geschrieben – LABDASMB – basierend auf dem Binärbaum.
In einigen Fällen existieren verschiebbare Programme, denen eine Bit-Map angehängt ist. Für eine neue Assemblierung ist es wichtig, diese Referenzen zu kennen. Dafür habe ich das Programm BITADR geschrieben.

Zurück zu den Disassembler-Aktivitäten