Normalerweise nicht nötig, aber manchmal kommt man nicht darum herum: Probleme können nicht in einer reinen Hochsprache sondern nur mit Hilfe von Maschinencode gelöst werden. |
Hier eine Zusammenstellung möglicher Lösungen. | |
---|---|
RSX |
Die RSX wird in Assembler programmiert und ihre Funktionen werden wie normale BDOS-Aufrufe abgerufen.
Dazu wird der fertigen, in einer Hochsprache erstellten, .COM -Datei die RSX mit dem CP/M Systemprogramm GENCOM angehängt.
Der Vorteil ist, dass diese RSX auch von anderen .COM -Dateien genutzt werden kann.
Ein Artikel zur Funktion einer RSX findet sich hier.
|
Module |
Microsoft hat das REL80-Format in vielen seiner Produkte realisiert, das auch andere Hersteller übernommen haben.
Zu den Hochsprachen gehören meistens Bibliotheken (libraries), die durch eigene Routinen erweitert werden können, also auch durch Assembler-Routinen.
Einige Hinweise dazu finden sich hier.
Auch der HI-TECH Z80 CP/M C Compiler unterstützt Bibliotheken, jedoch nicht im REL80-Format. |
Konstante |
Gerade in BASIC (aber auch TURBO-Pascal, siehe hier unter KERNEL.INC) können fertige Routinen mit dem DATA -Statement eingelesen werden.
(Analog dazu in TURBO-Pascal mit z.B. const array ).
Ein Programmbeispiel zur Erzeugung von DATA -Statements aus einer .HEX -Datei findet sich hier.
Ein weiteres Projekt zur Erzeugung von DATA -Statements aus einer .HEX , .REL oder .COM -Datei ist hier ausgehängt.
Die Parameterübergabe erfolgt dann über die Z80-Register, siehe dazu AMSTRAD Benutzerhandbuch für den PCW, Band 2, Mallard-BASIC, Anhang III, Absatz 3.
|
Inline |
TURBO-Pascal erlaubt das Einbinden von Maschinencode in beliebige Prozeduren und Funktionen.
Allerdings als eine Folge konstanter Bytes, die wiederum aus einem Assembler-Programm erzeugt werden müssen.
Das geht allerdings nicht mit „Bordmitteln" - dazu wird ein Extra-Programm benötigt, es sei denn die Bytes werden manuell eingetragen.
Zur Erzeugung des Inline-Codes bietet sich u.a. auch ein als REL80-Datei vorliegendes Modul an.
Eine zweite Möglichkeit ist die Verarbeitung einer vom Assembler erzeugten LIST-Datei.
Das erste Verfahren wurde 1986 in der Zeitschrifte MC beschrieben.
Vorteil des ersten Verfahrens: Die Verarbeitung ist nur an ein Format gebunden, nämlich REL80. Damit ergibt sich ein universeller Einsatz verschiedener Assembler. Nachteil des ersten Verfahrens: Der Quellcode ist nicht in der Datei enthalten. Das zweite Verfahren wurde ebenfalls 1986 in der Zeitschrifte CT beschrieben. Vorteil des zweiten Verfahrens: In der Datei ist neben den Binärwerten auch der Quellcode enthalten, der dann einfach als Kommentar in das Pascal-Programm eingebunden werden kann. Dies ist ein großer Vorteil für die Dokumentation. Nachteil des zweiten Verfahrens: Man ist auf einen Assembler festgelegt, da die LIST-Formate verschiedener Assembler stark differieren. Eine Übersicht über einige Formate findet sich hier. Ich habe mich damals für die Implementierung mit dem REL80-Format entschieden, meine Implementierung findet sich hier. Später habe ich ein Programmpaket von MITEK entdeckt, das einen Assembler enthielt, der neben dem REL-80 Format auch Inline Code erzeugt. Mit dem Aufruf ZAS Datei [$]T wird die Datei DATEI.INC angelegt.
Neben dem reinen Inline Code wird außerdem als Kommentar das erzeugte Listing eingefügt, wodurch der Inline Code verständlich wird.
|