ndr-nkc.de ndr-nbc.de
  
Startseite
News
 
NDR-NKC
Geräte Z80
Geräte 68000
Geräte 8088
 
NKC Emulator
 
Z80 Section
Baugruppen
ROM's
Software
68000 Section
Baugruppen
ROM's
PASCAL/S
Software
CP/M 68K
8088 Section
Baugruppen
Downloads
 
Bussysteme
Stromversorgung
Input / Output
Grafikkarten
Speicherkarten
Massenspeicher
Weitere Baugruppen
 
Projekte
 
Dokumentation
Datenblätter
Glossar
Portraits
Links

Impressum

 

Der Übersetzungsvorgang

Da für die Übersetzung des Quelltextes mehrere eigenständige Programme notwendig sind, die in der richtigen Reihenfolge mit passenden Parametern aufgerufen werden müssen, sind Submit-Dateien die beste Wahl, um den Ablauf zu steuern. Es stehen mehrere Submit-Dateien zur Verfügung, mit denen der Vorgang gesteuert werden kann.

  • C.SUB - Einfache C-Programme ohne Fließkomma-Unterstützung
  • CF.SUB - Programme mit Fließkomma-Unterstützung durch LIBF.A
  • CE.SUB - Programme unter Verwendung der Bibliothek LIBE.A

Auf den Originaldisketten enthalten diese Submit-Dateien nicht die Anweisung zum Linken der Objekt-Dateien zu einem ausführbaren Programm. Das Linken mit eventuell weiteren Objekt-Dateien muss durch einen Aufruf einer weiteren Submit-Datei erledigt werden.

  • CLINK.SUB - Linker-Aufruf wie bei C.SUB
  • CLINKF.SUB - Linker-Aufruf mit Fließkomma-Unterstützung durch LIBF.A
  • CLINKE.SUB - Linker-Aufruf mit Bibliothek LIBE.A

C-Quelltexte haben üblicherweise die Datei-Endung .C, was von allen Submit-Dateien exakt so erwartet wird. Die Datei-Endung darf beim Aufruf der Submit-Dateien jedoch nicht angegeben werden. Angenommen, es ist ein Programm Namens HELLO.C

#include "stdio.h"
main() {
    printf("Hallo Welt");
}
zu übersetzen, dann reduziert sich der Vorgang auf die Eingabe der Kommandozeile
C HELLO 

Während des Ablaufes der Submit-Datei werden einige temporäre Dateien erstellt, die mit entsprechenden ERA-Kommandos nach deren Nutzung automatisch wieder gelöscht werden. Nach erfolgreicher Ausführung von C.SUB findet sich auf der Diskette neben dem Quelltext HELLO.C eine ausführbare Datei HELLO.68K, vorausgesetzt, dass die Übersetzung fehlerfrei erfolgte. Diese kann wie jedes andere Programm mit der Eingabe von HELLO gestartet werden.

Submit-Dateien

Die Submit-Dateien rufen den C-Compiler, Assembler und Linker in der richtigen Reihenfolge mit entsprechenden Parametern auf. Der C-Compiler besteht aus den Programmen CP68.68K, C068.68K und C168.68K, welche den C-Quelltext in einen Assembler-Quelltext übersetzen. Der Assembler AS68.68K übersetzt den erzeugten Quelltext in eine Objektdatei. Der Linker LO68.68K bindet die durch den Assembler erzeugte Objektdatei mit der bzw. den Laufzeit-Bibliotheken von C und erzeugt ein ausführbares Programm.

C.SUB

Dient zur Übersetzung einfacher Programme ohne Nutzung von Fleißkomma-Arithmetik. Die Submit-Datei kann mit einem C-Quelltext und mit mehreren bereits übersetzten Objektdateien als Parameter aufgerufen werden. Der Linker versucht, die im C-Quelltext nicht definierten Symbole, Funktionen und Methoden mit den in den zusätzlichen Objektdateien definierten Symbolen aufzulösen. Auch die zusätzlichen Objektdateien müssen ohne die Datei-Endung .O angegeben werden.

C quelldatei [objektdatei] [objektdatei] ….

Inhalt der Datei C.SUB

Zuerst wird der Präprozessor gestartet. $1 entspricht dem ersten an die Submit-Datei übergebenen Parameter. Das muss der Name des C-Quelltextes ohne Endung sein.

CP68 -I 0: $1.C $1.I

Danach folgt der Aufruf des Parsers, welcher die Syntax des Quelltextes überprüft.

C068 $1.I $1.1 $1.2 $1.3 -F

Die temporäre Datei mit der Endung .I kann jetzt gelöscht werden.

ERA $1.I

Es folgt der Aufruf des Codegenerators, der den Assembler-Quelltext erzeugt.

C168 $1.1 $1.2 $1.s

Alle vom C-Compiler erzeugten temporären Dateien werden nicht mehr benötigt und mit den folgenden Anweisungen von der Diskette gelöscht.

ERA $1.1
ERA $1.2

Aus dem vom C-Compiler generierten Assembler-Quelltext wird jetzt eine Objekt-Datei für den finalen Linker-Vorgang erzeugt.

AS68 -L -U -S 0: $1.S

Auch der Assembler-Quelltext wird ab jetzt nicht mehr benötigt, kann aber zur Information behalten werden. Dazu kann man die Zeile in der Submit-Datei auskommentieren.

ERA $1.S 

Letztendlich wird der Linker gestartet, der die Objekt-Dateien zu einem ausführbaren Programm zusammensetzt.

LO68 -R -U_NOFLOAT -O $1.REL S.O $2.O $3.O $4.O CLIB
LO68 -S -U_NOFLOAT -O $1.68K S.O $2.O $3.O $4.O CLIB

Zum Abschluss wird die vom Assembler erzeugte Objekt-Datei gelöscht.

ERA $1.O

Damit ist die Submit-Datei beendet und auf der Diskette befindet sich neben dem C-Quelltext nur noch die ausführbare Programmdatei.

Die weiteren Submit-Dateien arbeiten ähnlich, jedoch mit abweichenden Parametern für den Linker. Die genaue Bedeutung der Parameter des Linkers kann der Dokumentation (in englisch) entnommen werden (Download am Ende des Beitrags).

CF.SUB

Dient zur Übersetzung von Programmen, die Fließkomma-Arithmetik verwenden. Jede Verwendung der Datentypen float oder double und viele Funktionen erfordern die Einbindung der Bibliothek LIBF.A

Der Ablauf ist grundsätzlich ähnlich dem bei der Datei C.SUB, daher hier nur die Darstellung des kompletten Inhalts der Submit-Datei ohne weitere Beschreibung.

CP68 $1.C $1.I
C068 $1.I $1.1 $1.2 $1.3 -F
ERA $1.I
C168 $1.1 $1.2 $1.S
ERA $1.1
ERA $1.2
AS68 -L -U $1.S
ERA $1.S
LO68 -R -O $1.68K S.O $1.O $2.O $3.O $4.O CLIB LIBF.A
ERA $1.O

CE.SUB

CP68 $1.C $1.I
C068 $1.I $1.1 $1.2 $1.3 -E
ERA $1.I
C168 $1.1 $1.2 $1.S
ERA $1.1
ERA $1.2
AS68 -L -U $1.S
ERA $1.S
LO68 -R -O $1.68K S.O $1.O $2.O $3.O $4.O CLIB LIBE.A
ERA $1.O

Um zu analysieren, wie der C-Compiler arbeitet, könnte man die ERA-Anweisungen auskommentieren. Dadurch bleiben die temporären Dateien erhalten und können nach der Übersetzung eingesehen werden. Bei einfachen Programmen kann man aus dem erzeugten Assembler-Quelltext vielleicht einen Ansatz für ein reines Assembler-Programm ableiten, welches viel kleiner ist und weniger Platz auf der Diskette verwendet.



Weiter zu Teil 6 der Serie: Verwenden des Inline-Assemblers

Zurück zu Teil 4 der Serie: Der CP/M-68K C Compiler