![]() |
![]() |
Startseite News   NDR-NKC ![]() ![]() ![]() NKC Emulator Z80 Section ![]() ![]() ![]() 68000 Section ![]() ![]() ![]() ![]() ![]() 8088 Section ![]() ![]() Bussysteme Stromversorgung Input / Output Grafikkarten Speicherkarten Massenspeicher Weitere Baugruppen Projekte Dokumentation Datenblätter Glossar Portraits Links Impressum |
CP/M 68K Programmierkurs - BibliothekenBei 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 BibliothekEine 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 GLOBLDas 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 BibliothekUm 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: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.AS68 PRINT.S 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 BibliothekHier 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-DateiAls 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.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.AS68 -U $1.S $1.O 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.LO68 -R -O $1.REL $1.O $2 $3 $4 $5 $6 $7 $8 $9 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.RELOC $1.REL $1.68K 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: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.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 Ausführen der ÜbersetzungDas 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:
HinweiseEs 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.FazitEin 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.
|