[ Zu JKCEMU ]


JKCEMU als PC/M-Emulator

Der PC/M, auch Mugler/Mathes-PC oder nur Mugler-PC genannt, ist ein Selbstbaucomputer mit CP/M-Kompatibilität. Das Grundkonzept sieht als Laufwerke RAM-Floppies vor, deren Inhalte auf Kassette gespeichert werden.

Screenshot der PC/M-Emulation

1. Emulierte Hardware


1.1. RAM-Bänke

Die RAM-Bank 0 liegt in einem globalen RAM-Bereich, der von allen emulierten Systemen benutzt wird. Die RAM-Bänke 1 und 2 liegen hintereinander in der RAM-Floppy 1. Das ist deshalb sinnvoll, da das RAM-Floppy-System diese beiden Bänke auch als RAM-Floppy verwendet. Somit kann die RAM-Floppy mit den Emulatorfunktionen geladen und gespeichert werden.

2. Im ROM enthaltene Software


Das enthaltene BIOS stellt ein Laufwerk in Form einer 124 KByte großen RAM-Floppy zur Verfügung, die in den RAM-Bänken 1 und 2 liegt. Aus diesem Grund emuliert JKCEMU diese beiden RAM-Bänke auch physisch in der RAM-Floppy 1, sodass Sie mit JKCEMU-Mitteln, d.h. von "außen", diese Floppy speichern und wieder laden können.

Durch Einbinden einer anderen BIOS-Version in Form eines externen ROM-Images sind auch zwei Laufwerke mit je 62 KByte möglich. Ein solches BIOS müssten Sie allerdings selbst bereitstellen, da es im Emulator nicht enthalten ist.

2.1. Hinweise zur Systemsoftware

Bei einem RESET wird die Systemsoftware vom ROM in den RAM geladen und anschließend der ROM ausgeblendet. Der Arbeitsspeicher ist dann folgendermaßen belegt:

AdresseBelegung
FC00 - FFFFBildwiederholspeicher
F800 - FBFF Bildwiederholspeicher für Zwischenzeilen
F000 - F7FFV-Tape
E800 - EFFFDebugger
DE00 - E7FFBIOS
D000 - DBFFBDOS (nur wenn es geladen wurde)
C800 - CFFFCCP
0100 - C7FFfrei
0000 - 00FF Verständigungsbereich für CP/V


2.1.1. Grundbetriebssystem

Nach einem RESET meldet sich der PC/M-Prompt:

V>

Nun können Sie Kommandos eingeben, wobei jedes Kommando mit Enter abgeschlossen werden muss. Folgende Kommandos sind möglich:

KommandoBedeutung
0 Speicherbank 0 als aktuellen Arbeitsspeicher einstellen (Standard)
1 Speicherbank 1 als aktuellen Arbeitsspeicher einstellen
2 Speicherbank 2 als aktuellen Arbeitsspeicher einstellen
B Betriebssystem-ROM einblenden
C RAM-Floppy-System (CP/V) starten,
Dazu muss vorher das BDOS geladen werden. Im Original lädt man es von Kassette. Der Einfachheit halber kann JKCEMU das BDOS auch automatisch bei jedem RESET laden, wenn Sie es in den Einstellungen so festgelegen.
D Debugger aufrufen
F X Laufwerk X formatieren
G aaaa Sprung zur Adresse aaaa,
Damit kann ein im Arbeitsspeicher befindliches Programm gestartet werden.
I "Inhaltsverzeichnis" der Kassette anzeigen,
Ein separates Inhaltsverzeichnis gibt es jedoch gar nicht. Das Kommando gibt zuerst das Signal zum Starten des Magnetbandgerätes aus (hat im Emulator jedoch keine Wirkung) und lauscht dann am Kassettenrecorderanschluss, um jede gerade gelesene Datei anzuzeigen. In JKCEMU müssen Sie dazu eine entsprechende Audio-Funktion aktivieren. Das Kommando kann mit CTRL-C abgebrochen werden.
L Dateiname.Typ [aaaa [bbbb [cccc]]] Es wird die Datei mit dem Namen Dateiname.Typ von Kassette in den Arbeitsspeicher geladen. Optional kann die Ladeadresse (aaaa), die Nummer des ersten zu ladenden Blocks (bbbb) und die Nummer des letzten zu ladenden Blocks (cccc) angegeben werden. Bei Lesefehlern können Sie einfach zurückspulen und das Lesen der fehlerhaften Stelle noch einmal versuchen. Beachten Sie bitte, dass in JKCEMU muss zum Laden von Kassette eine entsprechende Audio-Funktion aktiviert werden muss. Das Laden können Sie mit CTRL-C abbrechen.
R Dateiname.Typ X Es wird die Datei mit dem Namen Dateiname.Typ von Kassette in die RAM-Floppy X geladen. Das Laden kann mit CTRL-C abgebrochen werden.
S Dateiname.Typ aaaa bbbb [cccc] [/F] [dddd] Der Adressbereich von aaaa bis bbbb wird mit dem Namen Dateiname.Typ auf Kassette gespeichert. Optional kann bei ausführbaren Programmen (COM-Dateien) eine Startadresse (cccc) angegeben werden. Die Option /F verhindert das Schreiben der Dateiendekennung, und die Datei kann mit der nächsten freien Rahmennummer (dddd) fortgesetzt werden. Das führt dann allerdings zu größeren Blockabständen. Das Speichern können Sie mit CTRL-C abbrechen.
V Dateiname.Typ aaaa [bbbb [cccc]] Die auf Kassette befindliche Datei mit dem Namen Dateiname.Typ wird mit dem Arbeitsspeicher ab Adresse aaaa verglichen. Die optionalen Argumente bbbb und cccc haben die gleiche Bedeutung wie beim L-Kommando.
X Dateiname.Typ aaaa [bbbb [cccc]] Die Datei mit dem Namen Dateiname.Typ wird von Kassette in den Arbeitsspeicher geladen und auf der beim Speichern angegebenen Adresse gestartet. Die Argumente haben die gleiche Bedeutung wie beim L-Kommando.
Z aaaa Festlegen der Bitrate für die Kassettenschnittstelle,
Mögliche Werte sind 1200, 2400, 3600 und 4800. Standardmäßig ist 3600 eingestellt.
Dateiname Geben Sie nur einen Dateinamen ohne Typ an, wird die Datei mit dem Typ COM von Kassette geladen und auf der beim Speichern angegebenen Adresse gestartet.


2.1.2. RAM-Floppy-System

Im Grundbetriebssystem können Sie mit dem Kommando C das RAM-Floppy-System starten. Dazu muss allerdings vorher das BDOS geladen worden sein. JKCEMU bietet Ihnen die Möglichkeit, das BDOS bei jedem RESET automatisch laden zu lassen.

Das RAM-Floppy-System ist kompatibel zu CP/M 2.2. Folgende resistente Kommandos stehen zur Verfügung:

KommandoBedeutung
X: Auf Laufwerk X umschalten, d.h., X ist nun das aktuelle Laufwerk.
DIR Inhaltsverzeichnis des aktuellen Laufwerks anzeigen
ERA Dateiname.Typ Die Datei mit dem Namen Dateiname.Typ wird gelöscht. Die Platzhalterzeichen ? und * sind zulässig.
REN Dateiname_neu.Typ=Dateiname.Typ Die Datei mit dem Namen Dateiname.Typ wird wird umbenannt in Dateiname_neu.Typ. Platzhalterzeichen können nicht verwendet werden.
TYPE Dateiname.Typ Anzeigen der Datei Dateiname.Typ
SAVE n Dateiname.Typ Es werden ab Adresse 0100 n Blöcke des Arbeitsspeichers auf das aktuelle Laufwerk in die Datei Dateiname.Typ gespeichert. Ein Block ist 256 Byte groß.
Haben Sie CP/M-Programme als einzelne Dateien vorliegen und möchten diese im Emulator starten, dann laden Sie so ein Programm zuerst in den Arbeitsspeicher auf Adresse 0100 und speichern es dann mit dem Kommando SAVE auf das aktuelle Laufwerk. Nun können Sie das Programm durch Aufruf der entsprechenden COM-Datei starten.
USER n Festlegen eines Nutzerbereichs (n = 0..15),
Das ist bei einer RAM-Floppy aber nur wenig sinnvoll.


3. JKCEMU-BASIC-Compiler

Der PC/M ist als ein CP/M-kompatibles System konzipiert. Aus diesem Grund erzeugt der JKCEMU-BASIC-Compiler auch CP/M-kompatiblen Programmcode. Dieser wiederum ruft BDOS-Funktionen auf. Sie müssen deshalb das RAM-Floppy-System gestartet haben, um mit dem BASIC-Compiler erzeugte Programme ausführen zu können.

© 2009-2010 Jens Müer