![]() |
![]() |
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 - Wichtige DatenstrukturenEinige der BIOS- und BDOS-Funktionen geben als Ergebnis Adressen auf bestimmte Datenstrukturen (Tabellen im Speicher) zurück. In diesen Tabellen sind meist umfangreichere Informationen hinterlegt, die nicht allein in den Datenregistern zurückgegeben werden könnten. Außerdem sind einige der Datenstrukturen so ausgelegt, dass vom Anwender Änderungen vorgenommen werden können oder müssen.Themen dieses Kapitels
Datenstrukturen des BIOSMemory Region Table (MRT)Die Tabelle enthält Angaben über die Speicherbereiche von CP/M. Unter CP/M 68K enthält die MRT immer genau einen Eintrag, der die Transient Program Area (TPA) beschreibt. Es ist jedoch Vorsicht geboten, da das BIOS nicht immer die realen Verhältnisse abbildet, besser benutzt man die BDOS Funktion 63.
GETMRT EQU 18 * BIOS Funktionsnummer Get Memory Region Table PRINTSTR EQU 9 * BDOS Funktionsnummer Print String START: MOVE #GETMRT, D0 * GET MRT Funktion TRAP #3 * BIOS Aufruf MOVE.L D0, A1 * Tabellenadresse in A1 sichern MOVE.L 2(A1), D0 * Wert an Offset 2 ist Startadresse MOVE.L #VAR1, A0 * Adresse im Ausgabestring BSR PRINT8X * in String schreiben MOVE.L 6(A1), D0 * Wert an Offset 6 ist Umfang MOVE.L #VAR2, A0 * Adresse im Ausgabestring BSR PRINT8X * in String schreiben MOVE #PRINTSTR, D0 * Funktionsnummer BDOS MOVE.L #BUFFER, D1 * Adresse des auszugebenden Strings TRAP #2 * und aufrufen RTS * Zurück zu CP/M * ACHTUNG, an dieser Stelle das Unterprogramm PRINT8X einsetzen BUFFER: DC.B 13,10 DC.B 'Startadresse der TPA: ' VAR1: DC.B '--------',13,10 DC.B 'Umfang der TPA : ' VAR2: DC.B '--------',13,10,'$‘ Datenstrukturen des BDOSTransient Program Area Block (TPAB)Ähnliche Ergebnisse erhält man über den TPAB aus dem BDOS. Die BDOS Funktion 63 ermöglicht es zusätzlich, den Start und den Umfang der TPA zu verändern, wahlweise bis zum nächsten Warmstart oder Kaltstart des Systems. Vor dem Aufruf der Funktion muss folgende Datenstruktur zur Verfügung gestellt werden.
Die Funktion kann außerdem dazu genutzt werden, den für Programme verfügbaren Platz einzuschränken um zum Beispiel einen Speicherbereich freizuhalten, in dem Daten abgelegt werden können, die unter mehreren Programmen geteilt werden können. Hier noch ein kleines Beispiel, wie man den für ausführbare Programme verfügbaren Speicherbereich permanent um 32 kByte reduziert. Programme können danach in den 32 kByte ab der von TPALIMIT gemeldeten Endadresse Daten ablegen.TPALIMIT EQU 63 * BDOS Funktionsnummer Get TPA Limits PRINTSTR EQU 9 * BDOS Funktionsnummer Print String START: MOVE.L #TPAB,A1 * Adresse der Datenstruktur TPAB MOVE #0, 0(A1) * Lesen MOVE #TPALIMIT, D0 * BDOS Funktionsnummer MOVE.L A1, D1 * Adresse der Struktur TRAP #2 * BDOS Aufruf MOVE.L 2(A1), D0 * Start der TPA auslesen MOVE.L #VAR1, A0 * Adresse im Buffer BSR PRINT8X * Wert ausgeben MOVE.L 6(A1), D0 * Ende der TPA auslesen MOVE.L #VAR2, A0 * Adresse im Buffer BSR PRINT8X * Wert ausgeben MOVE #PRINTSTR, D0 * BDOS Funktionsnummer MOVE.L #BUFFER, D1 * Adresse Textbuffer TRAP #2 * Text ausgeben RTS * Programmende TPAB: DC.W 0 * Platz für Befehlscode DC.L 0 * Platz für Startadresse DC.L 0 * Platz für Endadresse BUFFER: DC.B 13,10 DC.B 'Startadresse der TPA : ' VAR1: DC.B '--------',13,10 DC.B 'Endadresse der TPA + 1 : ' VAR2: DC.B '--------',13,10,'$‘ Da das Programm bei mehrmaligem Aufruf immer wieder die TPA um 32 kByte verkleinert, ist irgendwann kein Speicher mehr für ausführbare Programme verfügbar. Dann hilft nur ein Kaltstart, der die ursprüngliche TPA wiederherstellt.TPALIMIT EQU 63 * BDOS Funktionsnummer Get TPA Limits PRINTSTR EQU 9 * BDOS Funktionsnummer Print String START: MOVE.L #TPAB,A1 * Adresse der Datenstruktur TPAB MOVE #0, 0(A1) * Lesen MOVE #TPALIMIT, D0 * BDOS Funktionsnummer MOVE.L A1, D1 * Adresse der Struktur TRAP #2 * BDOS Aufruf MOVE.L 6(A1), D0 * Ende der TPA auslesen SUB.L #$8000, D0 * 32K weniger MOVE.L D0, 6(A1) * wieder ablegen MOVE #3, 0(A1) * permanent setzen MOVE #TPALIMIT, D0 * BDOS Funktionsnummer MOVE.L A1, D1 * Adresse der Struktur TRAP #2 * BDOS Aufruf RTS * Programmende TPAB: DC.W 0 * Platz für Befehlscode DC.L 0 * Platz für Startadresse DC.L 0 * Platz für Endadresse Disk Parameter Block (DPB)Der Disk Parameter Block enthält Informationen über das aktuell selektierte Laufwerk und umfasst 16 Bytes mit den Informationen laut der nachfolgenden Tabelle. Die Funktion ist dazu gedacht, diese Informationen anzuzeigen oder für Berechnungen zu verwenden.
Ein vernünftiges Testprogramm ist für die Darstellung zu lang, daher an dieser Stelle nur ein Screenshot aus dem Emulator. Alle Testprogramme und Beispiele können am Ende der Serie im Quelltext heruntergeladen werden. ![]() Die Base Page
Bei jedem Start eines Programms werden wichtige Daten in der Base Page gespeichert, die insgesamt 256 Bytes umfasst. Im folgenden Kapitel werden wir einige dieser Daten benutzen. Jedes Programm, welches mit Parametern auf der Kommandozeile aufgerufen wird, muss die Daten aus der Base Page auslesen können.
Hier ein Auszug der Informationen, die in der Base Page über das gerade laufende Programm enthalten sind.PRINTSTR EQU 9 * BDOS Funktionsnummer Print String START: LINK A6, #0 * Stack Frame markieren MOVE.L 8(A6), A0 * Adresse der Base Page holen TST.B $80(A0) * Parameter angegeben? BEQ NOFILE * Nein, dort weiter * Hier weiterer Programmcode BRA ENDE * Ende des Progamms NOFILE: MOVE.L #PARTXT, D1 * Adresse der Fehlermeldung MOVE #PRINTSTR, D0. * BDOS Funktionsnummer TRAP #2 ENDE: UNLK A6 * Stack Frame freigeben RTS PARTXT: DC.B 13,10,'Keine Parameter angegeben',13,10,'$' ![]() Der File Control Block (FCB)Der FCB ist eine 36 Byte lange Datenstruktur zum Beschreiben der Eigenschaften einer Datei auf der Diskette. Nahezu alle Funktionen des BDOS, die mit Dateien arbeiten, benötigen eine solche Datenstruktur. Im nächsten Kapitel folgen einige Beispiele zur Arbeit mit Dateien und dem FCB.
FazitDas Verständnis der Datenstrukturen und deren Verarbeitung ist extrem wichtig. Ohne diese Fähigkeiten kann man praktisch keine vernünftigen Programme unter CP/M entwickeln. Das folgende Kapitel wird sich eingehend mit dem Handling von Dateien beschäftigen.
|