Startseite News   NDR-NKC Geräte Z80 Geräte 68000 Geräte 8088 Z80 Section Baugruppen ROM's Software 68000 Section Baugruppen ROM's PASCAL/S Software 8088 Section Baugruppen Downloads Bussysteme Stromversorgung Input / Output Grafikkarten Speicherkarten Massenspeicher Weitere Baugruppen Projekte Dokumentation Datenblätter Glossar Portraits Links Impressum |
Programmierung unter CP/M-68KDiskette für allgemeine ProgrammierungFür die allgemeine Programmierung von Tools und Anwendungen mit dem Assembler sollte man sich eine Masterdiskette mit den folgenden Programmen zusammen stellen:
Weitere Dienstprogramme können nach Bedarf hinzugefügt werden, man sollte jedoch darauf achten, dass noch ausreichend Platz für die Arbeit zur Verfügung steht. Neben diesen Programmen sollte man sich noch eine SUBMIT Datei mit dem Namen MAKE.SUB zusammenstellen, die zum Assemblieren und Linken einfacher Programme eingesetzt wird.
Wenn eine Quelldatei z.B. TEST.S heißt und in TEST.68K übersetzt werden soll, kann man damit einfach MAKE TEST als Kommando absetzen. Wie schon an anderer Stelle beschrieben muss der Assembler für die aktuelle Speicherkonfiguration initialisiert sein.Aufbau von CP/M-68K ProgrammenAn dieser Stelle soll nur grob auf die allgemeine Struktur von Assembler-Programmen unter CP/M-68K eingegangen werden. Mit dem Programmrahmen kann man schnell mit eigenen Entwicklungen beginnen.ProgrammrahmenDa unter CP/M häufig Aufrufe von Routinen aus dem BDOS oder BIOS notwendig sind, kann man sich die Nummern der Funktionen in einer Konstantenliste definieren. Dadurch können die Funktionen über einen Namen statt über eine Nummer angesprochen werden.* BDOS Funktionsnummern (TRAP #2) printstr = 9 * BIOS Funktionsnummern (TRAP #3) * Grundprogramm Funktionsnummern (TRAP #1)Die Programmierung erfolgt im Textsegment welches mit der Anweisung .text eingeleitet wird. Ein einfaches nur aus einer Quelldatei bestehendes Programm beginnt mit der ersten Anweisung in diesem Segment.
.textHier beginnt das eigentliche Programm. Mit LINK A6,#0 wird die Adresse Base Page im Adressregister A6 abgelegt so dass direkt auf die dort stehenden Informationen zugegriffen werden kann. Die Base Page beinhaltet unter anderem die File Control Blocks (FCB) von zwei in der Kommandozeile angebenden Dateimustern.
start: link a6,#0Ab hier folgt der eigentliche Programmcode. In diesem Beispiel wird nur ein Text auf der Konsole ausgegeben. Mit der ersten Anweisung wird die Adresse des Labels message in das Datenregister D1 und die BDOS Funktionsnummer für die Funktion Print String in das Datenregister D0 geladen. Danach wird mittels TRAP #2 das BDOS aufgerufen.
move.l #message,d1 move.w #printstr,d0 trap #2Vor dem Rücksprung in das Betriebssystem muss ein eventuell reservierter Stack Frame wieder freigegeben werden. UNLK bildet das Gegenstück von LINK am Beginn des Programms.
unlk a6 rtsDer Beginn des Datensegmentes wird durch .data angezeigt. Die effektive Adresse des Datensegmentes kann durch den Linker festgelegt werden. Ohne spezielle Vorgabe folgt das Datensegment unmittelbar auf das Textsegment. Mit der Anweisung .even wird angegeben, dass die folgende Adresse auf einer geraden Speicheradresse beginnen soll. Dies ist wichtig wenn Variablen als WORD oder LONG im Speicher abgelegt werden sollen.
.data .evenHier wird also eine LONG Variable mit dem vorgegebenen Wert 100 (dezimal) deklariert. Dieser Wert ist über den Label variable lesbar und kann auch während des Programms geändert werden.
variable: .dc.l 100Konstanten können wahlweise im Datensegment (wie hier) oder im Textsegment definiert werden. Viele Programmierer ziehen die Ablage am Ende des Datensegmentes vor. Falls solche Daten im Textsegment definiert werden, sollten diese mit .even abgeschlossen werden, damit darauf folgender Programmcode an geraden Speicheradressen übersetzt wird.
message: .dc.b 13,10,'Hallo, ich bin der NKC',13,10,'$'Der Quelltext muss mit der Anweisung .end abgeschlossen werden. Alle Eingaben hinter .end werden vom Assembler ignoriert.
.endMit diesen Grundlagen sollte man mit den ersten eigenen Tests beginnen können. Wichtige Tabellen und ParameterIn den folgenden Tabellen sind die wichtigsten Funktionsaufrufe und Datenstrukturen beschrieben mit denen man bei praktisch jeder Programmierung unter dem Betriebssystem CP/M-68K zu tun hat.BDOS FunktionenDas BDOS erwartet vor dem Aufruf mitTRAP #2 die Funktionsnummer F# im Register D0.W und alle Parameter in den Registern wie sie in der Beschreibung angegeben sind. Falls eine Funktion des BDOS einen oder mehrere Werte an das aufrufende Programm zurück gibt, sind entsprechende Angaben ebenfalls der Beschreibung in der Tabelle zu entnehmen.
BIOS FunktionenDie Funktionen des BIOS werden bei sehr hardwarenahen Zugriffen auf das System benötigt. Im Gegensatz zu den BDOS Aufrufen steigt der Aufwand bei der Programmierung jedoch möglicherweise stark an. Funktionen des BIOS werden z.B. benötigt, wenn einzelne Sektoren einer Diskette gelesen oder geschrieben werden müssen (z.B. zur Umsetzung eines Kopierprogramms).
BASE PAGEDie Base Page sind die ersten 128 Byte der Transient Program Area (TPA). Dieser Speicherbereich liegt unmittelbar vor dem Textsegment in dem die Programme ausgeführt werden.
Disk Parameter Block (DPB)Der DPB ist eine 16 Byte umfassende Datenstruktur mit Angaben über den Aufbau eines Laufwerks.
File Control Block (FCB)Der FCB (File Control Block) ist ein 36 Byte umfassender Speicherbereich, der zur Beschreibung von Dateien dient. Solche Strukturen werden praktisch bei allen Zugriffen auf Dateien unter CP/M benötigt. Unter Anderem werden zwei dieser FCB's in der BASE PAGE eines gestarteten Programms referenziert. Im FCB werden sowohl im Feld für den Dateinamen als auch bei der Extension die Sonderzeichen* und ? unterstützt, wobei * ein Platzhalter für eine beliebige Anzahl beliebiger Zeichen und ? ein Platzhalter für einziges beliebiges Zeichen ist.
|