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

 

CP/M 68K Programmierkurs - Bibliotheken

Bei der Entwicklung von größeren Programmen dauert der Vorgang der Übersetzung immer länger, da der Quellcode immer größer wird. Wertvolle Zeit kann eingespart werden, wenn getestete Programmkeile in eine Bibliothek ausgelagert wird, die nach dem Übersetzen als Objektdatei gespeichert bleibt. Der Linker führt dann die geänderten Programmteile mit den bereits getesteten Teilen zu einem kompletten Programm zusammen.

Themen dieses Kapitels

  • Aufbau einer Bibliothek
  • Übersetzen einer Bibliothek
  • Benutzen von Bibliotheken
  • Anpassen der Make-Datei
  • Ausführen der Übersetzung

Aufbau einer Bibliothek

Eine Bibliothek ist ganz normaler Quelltext, der jedoch nur aus einer Sammlung von Routinen besteht, die dann nicht jedes Mal wieder im Quelltext des Hauptprogramms integriert werden müssen. Da das Hauptprogramm diese Routinen nicht mehr im eigenen Quellcode finden kann, muss die Verfügbarkeit dieser Routinen bekannt gemacht werden. Dazu dient unter anderem die Assemblerdirektive GLOBL

Das folgende Beispiel zeigt ein Beispiel für eine Bibliothek von Ausgaberoutinen, die bereits im Abschnitt Nützliche Unterprogramme beschrieben wurden. Diese Unterprogramme fassen wir in der Datei PRINT.S zusammen. Der Quelltext ist nicht vollständig, es kommt nur auf die relevanten Änderungen an.
****************************
* PRINT.S
****************************

GLOBL PRINT2X,PRINT4X,PRINT8X
GLOBL PRINTD,DIVU32

TEXT

PRINT2X:
    ... gleicher Code wie vorher
PRINT4X:
    ... gleicher Code wie vorher
PRINT8X:
    ... gleicher Code wie vorher
PRINTD:
    ... gleicher Code wie vorher
DIVU32:
    ... gleicher Code wie vorher
    RTS

Alle hinter den Direktiven GLOBL aufgeführten Sprungmarken werden öffentlich verfügbar. Labels, die hier nicht gelistet werden, lassen sich aus anderen Programmteilen nicht ansprechen, sie sind aber wie üblich innerhalb von PRINT.S verfügbar. Es ist zu beachten, dass die Labels in einer Zeile mit Komma abzutrennen sind und in der Liste keine Leerzeichen erlaubt sind.

Übersetzen einer Bibliothek

Um aus dem Quelltext die Objektdatei der Bibliothek zu erstellen, wird ausschließlich der Assembler AS68 benötigt. Die bereits vorgestellte Submit-Datei eignet sich nicht, da diese die Objektdateien am Ende automatisch wieder löscht. Auf der Kommandozeile wird folgender Befehl abgesetzt:
AS68 PRINT.S
Die Datei PRINT.O enthält jetzt den ausführbaren Code der Bibliothek mit allen durch GLOBL exportierten Adressen der einzelnen Routinen. Der Linker kann die Referenzen auf diese Unterprogramme später mit den realen Adressen, die sich erst nach dem Linken ergeben, ersetzen.

Jetzt sind wir so weit, dass wir die Funktionalitäten dieser Bibliothek in mehreren Programmen nutze können, ohne den Quelltext immer wieder erneut eingeben müssen.

Benutzen der Bibliothek

Hier ein kurzes Testprogramm, welches auf die Funktion PRINT8X in der Bibliothek zugreift, ohne dass wir den dazu notwendigen Quelltext erneut eingegeben haben. In diesem Zustand ist der Quelltext unvollständig und kann nicht mit der bisherigen Submit-Datei MAKE.SUB übersetzt werden.
****************************
* LIBTEST.S
****************************

PRINTSTR EQU 9                * BDOS Print String

START:
    MOVE.L #12345678,D0       * Testwert
    MOVE.L #BUFFER,A0         * Zieladresse
    BSR PRINT8X               * Bibliotheksaufruf
    MOVE #PRINTSTR,D0         * BDOS Funktionsnummer
    MOVE.L #BUFFER,D1         * Adresse des Strings
    TRAP #2                   * BDOS aufrufen
    RTS                       * Programmende

BUFFER: DC.B '--------',13,10,'$'

END

Anpassen der Make-Datei

Als Erstes müssen wir dafür sorgen, dass der Assembler AS68 die Fehler beim Übersetzen ignoriert und sich darauf verlässt, dass die fehlenden Routinen beim Linken mit LO68 nachgeliefert werden.
AS68 -U $1.S $1.O
Dann müssen wir dem Linker LO68 die zusätzlich verwendeten Objektdateien bekanntgeben. Das erreichen wir durch weitere Parameter, die an die Submit-Datei übergeben werden können. Die Parameter $2 bis $9 sind für die Namen der zu linkenden Bibliotheken vorgesehen. Es können hier also bis zu 8 Bibliotheken angegeben werden.
LO68 -R -O $1.REL $1.O $2 $3 $4 $5 $6 $7 $8 $9
Im Gegensatz zur ursprünglichen Make-Datei erzeugt der Linker jetzt ein Programm mit der Dateiendung REL. Dieses Programm könnte ganz normal gestartet werden, jedoch muss die Endung beim Aufruf mit angegeben werden.
RELOC $1.REL $1.68K
Erst mit diesem Schritt erzeugen wir das ausführbare Programm, welches jetzt keine Informationen zum Verschieben im Speicherbereich mehr enthält und deswegen deutlich kleiner ist als die vorangegangenen Versionen.
ERA $1.O
Abschließend löschen wir die Objektdatei des fertigen Programms die nicht mehr benötigt wird. Die komplette Make-Datei sieht jetzt also wie folgt aus:
AS68 -U $1.S $1.O
LO68 -R -O $1.REL $1.O $2 $3 $4 $5 $6 $7 $8 $9
RELOC -U $1.REL $1.68K
ERA $1.O
Falls Programme mit einer Länge von über 64 kByte erzeugt werden sollen, kann man beim Aufruf des Assemblers AS68 die Option -L hinzufügen. Diese sorgt dafür, dass Adressangaben immer 32 Bit umfassen. Die Länge des erzeugten Programms erhöht sich dadurch geringfügig.

Ausführen der Übersetzung

Das Erstellen des tatsächlich ausführbaren Programms erfolgt dann durch die Nutzung der Make-Datei. Wie vorher ist der erste Parameter der Name des Quelltextes und des ausführbaren Programms ohne Dateiendung. Jeweils durch ein Leerzeichen könne jetzt jedoch bis zu acht Bibliotheken angegeben werden, bei denen jeweils die Endung .O anzugeben ist.
MAKE LIBTEST PRINT.O

Auf der Diskette befinden sich jetzt – wenn alles funktioniert hat – die Dateien:
  • LIBTEST.S
  • LIBTEST.REL
  • LIBTEST.68K

Hinweise

Es ist kein Problem, bereits bestehende Bibliotheken zu verändern oder zu erweitern. Nach einer Änderung muss die Objektdatei der Bibliothek neu erstellt werden, um eine neue Objektdatei zu erzeugen. Zusätzlich müssen alle Programme, welche die geänderten oder zusätzlichen Funktionen nutzen, erneut mit der Make-Datei übersetzt werden um die neuen Funktionalitäten in das fertige Produkt zu integrieren.

Fazit

Ein großer Schritt in Richtung professioneller Entwicklung eigener Software für CP/M 68K. Selbst all Hobbyist sollte man seine Arbeitsabläufe optimieren. Im folgenden Abschnitt stelle ich eine sehr umfangreiche Bibliothek vor, welche das Rechnen mit Fließkommazahlen möglich macht.
Zurück zu Teil 7 der Serie: Arbeiten mit Dateien