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 - Grundprogramm-Bibliotheken

Der Assembler AS68 eignet sich nicht nur zur Entwicklung von Programmen, die unter CP/M 68K ablaufen sollen. Die Objektdateien enthalten jedoch einen 28 Byte umfassenden Programm-Header, der mit den Bordmitteln AS68, LO68 und RELOC nicht entfernt werden kann.

Ich habe dazu ein kleines Tool umgesetzt, welches den Programm-Header entfernt. Die so bearbeitet Datei kann direkt in ein EPROM gebrannt und dann als Bibliothek mit den Grundprogrammen verwendet werden.

Zurück zum Inhaltsverzeichnis

Themen dieses Kapitels

  • Rahmen für ein Bibliotheksprogramm
  • Rahmen für 2 oder mehrere Bibliotheksprogramme
  • Quelltext für das STRIP-Tool
  • Make-Datei für Bibliotheksprogramme
  • Downloads

Rahmen für eine Bibliothek

Die Grundprogramme für 68000 erkennen Bibliotheken anhand der Kennung 55AA0180. Diese Kennung muss an einer durch 1024 teilbaren Adresse im Hauptspeicher stehen. Danach folgt der Name der Bibliothek, welcher genau 8 Zeichen lang sein muss. Die Bedeutung der weiteren Einträge ist an anderer Stelle ausführlich erklärt worden.

    org 0

* Bibliothekskopf definieren
    dc.l $55AA0180         * KENNUNG
    dc.b 'RELATIV '        * PROGRAMM-NAME
    dc.l relativ           * STARTADRESSE
    dc.l endrel - relativ  * LAENGE
    dc.b 1                 * 0=ABSOLUT 1= RELATIV
    dc.b 1                 * 1=68008 2=68000 4=68020
    dc.w 0                 * RESERVIERT
    dc.l 0,0               * RESERVIERT

* Ausfuerhbarer Code der Bibliothek
relativ:
    rts                    * Programmende
endrel:
    nop                    * Notwendig für AS68
    end

Rahmen für zwei oder mehrere Bibliothek

Wenn das Grundprogramm eine Bibliothek-Kennung gefunden hat, wird unmittelbar danach getestet, ob weitere Bibliotheken folgen. Es dürfen also mehrere Kennungen unmittelbar aufeinander folgen.

    org 0
 
* Bibliothekskopf definieren
    dc.l $55AA0180         * KENNUNG
    dc.b 'RELATIV '        * PROGRAMM-NAME
    dc.l relativ           * STARTADRESSE
    dc.l endrel - relativ  * LAENGE
    dc.b 1                 * 0=ABSOLUT 1= RELATIV
    dc.b 1                 * 1=68008 2=68000 4=68020
    dc.w 0                 * RESERVIERT
    dc.l 0,0               * RESERVIERT
* Folgeeintrag Bibliothek
    dc.l $55AA0180         * KENNUNG
    dc.l 'ABSOLUT '        * PROGRAMM-NAME
    dc.l absolut           * STARTADRESSE
    dc.l endabs - absolut  * LAENGE
    dc.b 0                 * ABLOUTE ADRESSE
    dc.b 1                 * 68008
    dc.w 0                 * RESERVIERT
    dc.l 0,0               * RESERVIERT
 
* Bibliothek A
relativ:
    rts                    * Programmende A
endrel:
 
* Bibliothek B
absolut:
    rts                    * Programmende B
endabs:
 
    nop                    * Notwendig für AS68
    end

Quelltext für das STRIP-Tool

Das Tool entfernt die ersten 28 Bytes einer Objektdatei und speichert das Ergebnis in eine neue Datei. Der Quelltext wird ganz normal mit der Submit-Datei MAKE.SUB übersetzt, wodurch sich das ausführbare Programm STRIP.68K ergibt.

Eingesetzt wird das Tool nach dem Übersetzen und Linken des Quelltextes der Grundprogramm Bibliothek(en). Der Vorgang wird mit der Submit-Datei LIB.SUB automatisiert.

************************************************
* STRIP - Entfernt die ersten 28 Bytes der Datei
************************************************

* BDOS Funktionsnummern
reboot     equ 0
printstr   equ 9
open       equ 15
close      equ 16
delete     equ 19
read       equ 20
write      equ 21
make       equ 22
setdma     equ 26

    .text

start:

* FCB der Quelldatei ermitteln
    link a6,#0 
    move.l 8(a6),a0
    lea $5c(a0),a1
    move.l a1,fcbadr1

* FCB der Zieldatei ermitteln
    lea $38(a0),a1
    move.l a1,fcbadr2

* Parameter angegeben?
    tst.b $80(a0)
    beq usage

* Quelldatei oeffnen
    move.l fcbadr1,d1
    move.w #open,d0
    trap #2
    cmpi #255,d0
    beq notfound

* Dateigroesse in Sektoren
    moveq #0,d6

* Inhalt der Datei einlesen
    move.l #ladeadr,d1
loadloop:
    movem.l d1,-(a7)
    move #setdma,d0
    trap #2
    move.l fcbadr1,d1
    move #read,d0
    trap #2
    movem.l (a7)+,d1
    add.l #128,d1
    addq #1,d6
    tst d0
    beq loadloop

* Fertig eingelesen, Datei schliessen
    move.l fcbadr1,d1
    move #close,d0
    trap #2

* FCB 2 Datei loeschen, falls vorhanden
    move.l fcbadr2,d1
    move #delete,d0
    trap #2

* FCB 2 Datei erstellen
    move.l fcbadr2,d1
    move #make,d0
    trap #2

* FCB 2 Datei schreiben mit Versatz
    move.l #ladeadr,d1
    add.l #1C,d1
saveloop:
    movem.l d1,-(a7)
    move #setdma,d0
    trap #2
    move.l fcbadr2,d1
    move #write,d0
    trap #2
    movem.l (a7)+,d1
    add.l #128,d1
    subq #1,d6
    tst d6
    beq saveloop

* FCB 2 Datei schliessen
    move.l fcbadr2,d1
    move #close,d0
    trap #2

    bra exit

notfound:
    move.l #errfile,d1
    move.w #printstr,d0
    trap #2
    bra exit
usage:
    move.l #msgusage,d1 
    move.w #printstr,d0
    trap #2
exit:
    move #reboot,d0
    trap #2
    rts  

errfile:
 dc.b 'Strip: Input file not found!$'                  
msgusage: 
 dc.b 'Usage: STRIP  $'        

    .data
    .even

fcbadr1:    dc.l 0     * Adresse FCB Eingabedatei
fcbadr2:    dc.l 0     * Adresse FCB Ausgabedatei
ladeadr:    ds.b 128   * Puffer fuer Dateiinhalt

    end

MAKE-Datei für Biblitheksprogramme

AS68 erzeugt die Objektdatei und ein Listing, mit LO68 können weiter Objektdateien hinzugefügt werden (optional), SRTIP erzeugt die ROM-Datei, die in ein EPROM gebrannt werden kann. Danach werden die temporär notwendigen Dateien gelöscht.

AS68 -P -N $1.S $1.O >$1.LST               
LO68 -S -R -O $1.LNK $1.O $2 $3 $4 $5 $6 $7 $8 $9             
STRIP $1.LNK $1.ROM
ERA $1.O
ERA $1.LNK

Downloads

Ich habe ein Diskimage zusammengestellt, welches sich unmittelbar mit dem NKC Emulator einsetzen lässt. Das Image ist bootfähig und enthält alle notwendigen Dateien und Programme zur Entwicklung eigener Bibliotheken.

LIBS.IMG
203 kByte
Aus dem Inhalt
Betriebssystem CP/M 68K, Assembler AS68, Linker LO68, Relocator RELOC, PIP, STAT, MORE, EDIT, PROMER und einiges mehr. Außerdem das Programm STRIP, die Submit-Datei LIB.SUB und die oben gezeigten Beispiele. Auf der Diskette sind knapp 500 kByte zur Entwicklung eigener Programme frei.
Image laden


Zurück zu Teil 8 der Serie: Bibliotheken