M80,L80,CREF

Der Macroassembler von Microsoft ist ein Toolpaket mit enormen Möglichkeiten. Der Macroassembler erzeugt aus einer Assemblerquelldatei DEMO.MAC eine Maschinencode-Datei DEMO.REL. Diese wird mittels Linker in eine ausführbare Maschinencode-Datei DEMO.COM umgewandelt.

Größere Projekte bestehen aus mehreren Assemblerquelldateien. Diese werden einzeln mit M80 übersetzt und anschließend mit dem Linker in eine ausführbare Maschinencode-Datei umgewandelt. Mehrere REL-Dateien können mit LIB80 zu einer Bibliothek *.LIB zusammengefasst werden. Aus einer solchen Bibliothek entnimmt der Linker nur die benötigten Teile, es wird also nicht immer alles dazugelinkt.

Unter SCP1520 gab es „gleichwertige“ Tools als ASM/LINK/LIB.

Eine ausführliche Beschreibung gibt es in

  • asm.pdf SYSTEMHANDBUCH SCP, Anleitung fuer den Programmierer, Teil II - Assemblerprogrammierung

Ersetzt man SCP durch CP/M, ASM durch M80 usw., hat man ein sehr gutes Handbuch für das Toolpaket von Microsoft.

einfaches Assemblieren und Linken von DEMO.MAC:

M80 =DEMO/L 
L80 /P:0100,DEMO,DEMO/N/E

:!: Wird der Linker ohne /P: aufgerufen, wird am Codeanfang ein Sprung zum Programmbeginn eingefügt, der Code wird also um 3 Byte länger! Deshalb wird oftmals ein anderer Linker wie LINK 1.31 von Digital Research oder der in der DDR verbreitete Link/MT+ Release 5.5 genutzt, da diese etwas einfacher in der Syntax sind:

einfaches Assemblieren und Linken von DEMO.MAC mit LINK:

M80 =DEMO/L 
LINK DEMO

Neukompilieren von CP/A:

M80 BIOS.ERL=BIOS/X
LINKMT @OS=CPABAS,CCP,BDOS,BIOS/P:xxxx

14K HS; 1000 Zeilen/min.

Dateitypen:

REL verschiebliche Objektdatei
PRN Druckdatei
MAC Quellcodedatei M80 (132 Byte; kleine u. grosse Buchstaben; Zeilennumerierung erlaubt)
CRF Symbolnachweisdatei
LIB Modulbibliothek

Kommando:

M80 [[<objfile>],[<prnfile>]]=<sourcefile>[/switch[/...]] 

Jeweils vor Filenamen Device-Angabe erlaubt:

A:,...,LST:,TTY:,RDR:

Schalter:

/O Ausdrucken von Oktalzahlen
/H Ausdrucken von Hexazahlen (Standard)
/R Erzwingen Objektdateierzeugung
/L Erzwingen Druckdateierzeugung
/C Erzwingen Symbolnachweisdatei (kann auch im Kommando angegeben werden [<prnfile>/C])
/Z Z80-Opcode (Standard)
/I INTEL-8080-Opcode
/P Anlegen eines speziellen 256-Byte-Stack (nur bei Fehlern benutzen)
/M DS-Bereiche mit '00' vorloeschen
/X Fehlerdruck unterdruecken (falls kein .SFCOND, .LFCOND)
Kommando:
 L80 inputfile[switch][,...][,outputfile[switch]]

 Jeweils vor <objfilei> Device-Angabe erlaubt.

z.B.:  L80 test/d:4000,mylib/s,test/n/e

Schalter:
 1. Auf Kommandostufe
  /G                 Ausfuehrung beginnen
  /M                 Auflisten Globalbezugnahmen
  /P:<progbegin>  - Festlegen Programmbasisadresse
                     z.B. /P:200,OTTO - OTTO wird auf 200H gelinkt

 2. Nach Dateinamen
  <file>/S  - Durchsuchen LIB-Datei und Laden der erforderlichen Bibliotheksmoduln
  <file>/N  - Eroeffnen <file>.COM
  <file>/E  - Laden <file>.REL, Ausgabe auf <file>.COM, LINK-80-Ende

 3. Am Ende der Kommandokette (bei global wirksamen Schaltern)
  .../M/E   - Globalbezugnahmen drucken, Retten COM-Datei, Ende

 /R                      Reset; erneuter Start
 /E oder /E:<globsymb>   Ende; <globsymb> gibt Entry an
 /G oder /G:<globsymb>   Programm ausfuehren
 /P:<addr>               Festlegen Programmbasisadresse (Standard: 103H)
 /D:<addr>               Festlegen Datenadresse (Standard: vor Programm)
 /U                      Ausdrucken Anfang/Ende des Programms
 /M                      Wie /U; zusaetzlich Globalsymbole
 /S                      Durchsuchen der LIB-Datei
 /X                      Wenn zuvor /N, Ausgabe im HEX-Format
 /Y                      Erzeugt SYM-Datei fuer Fehlersuchhilfen SID,ZSID

Zusammenketten von Moduln zu einer .REL-Datei

Kommando:
 LIB80 <libfile>=<<modullist>> | <datei><<modullist>> | <datei>
  <modullist>:
   - Modulname (z.B. SIN/COS)
   - Modul davor/dahinter (z.B. SIN-1/SIN+1)
   - bis/nach/dazwischen (..SIN/SIN../SIN..COS/SIN+1..COS-1)

Schalter:
 /U  - Drucken undefinierter Symbole bei Ein-Pass-Durchlauf (<libfile>/U)
 /L  - List-Ausgabe (z.B. auch <libfile>/L)
 /C  - Create Moduln und Symboldefinitionen (ueber LIB starten)
 /E  - LIB-80 Ende. Zerstoert Bibliothek, wenn kein Neuaufbau !!!
       Sonst ^C verwenden!
 /R  - Umbenennen .LIB in .REL

Beispiel:
 LIB-Aufbau: LIB
             *TRANSUB=SIN,COS,TAN
             *EXP
             *^C
 Listing:    LIB
             *TRANSUB.LIB/U
             *TRANSUB/L
             ^C

Ausdrucken Crossreferenz-Datei vom Assembler

Kommando:
 CREF80 [<listfile>]=<sourcefile>
  <listfile> muss vom Typ .LST sein!