[ 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 ursprüngliche Konzept sieht als Laufwerke RAM-Floppies vor, deren Inhalte auf Kassette gespeichert werden. Die Anbindung von Disktettenlaufwerken kam erst später dazu.


Bildschirmfoto der PC/M-Emulation

1. Emulierte Hardware


1.1. ROM

Der originale PC/M hat einen 8 KByte großen ROM, der das Grundbetriebssystem enthält. Im Emulator kann dieser ROM in 8 KByte Schritten auf bis zu 32 KByte vergrößert werden, indem Sie in den PC/M-Einstellungen eine entsprechend große ROM-Datei angeben.

1.2. RAM-Bänke

Die RAM-Bänke 1 und 2 des emulierten PC/M liegen im JKCEMU hintereinander in der RAM-Floppy 1. Das ist sinnvoll, da das im ROM enthaltene BIOS diese beiden Bänke ebenfalls als eine RAM-Floppy verwendet. Somit kann die RAM-Floppy mit den Emulatorfunktionen geladen und gespeichert werden.

1.3. Floppy-Disk-Modul

Das Floppy-Disk-Modul wird emuliert, wenn Sie in den Einstellungen eine der beiden PC/M-Ausbaustufen mit Floppy-Disk-System aktiviert haben. Das erste Laufwerk hat jedoch nicht wie sonst üblich die interne Nummer 0, sondern die Nummer 1. Der Grund liegt in der PC/M-Systemsoftware, denn diese versucht von der internen Laufwerksnummer 1 beginnend zu booten. Damit also von dem ersten Laufwerk der im Fenster JKCEMU Diskettenstation angezeigten Laufwerke gebootet werden kann, werden die Laufwerksnummern folgendermaßen gemappt:

Interne LaufwerksnummerSichtbares Laufwerk
04
11
22
33


1.4. NMI-Generator

Der NMI-Generator ermöglicht einen Schrittbetrieb und wird von dem im Grundbetriebssystem des RAM-Floppy-Systems enthaltenen Debuggers benutzt (CTRL-I im Debugger führt einen Schritt aus).

Aktiviert wird der NMI-Generator durch einen Ein-/Ausgabebefehl auf eine der Adressen 98h bis 9Bh. Daraufhin wird dann nach dem dritten Befehl hinter dem Ein-/Ausgabebefehl ein nicht maskierter Interrupt auslöst.

2. Im ROM enthaltene Software

SystemSoftware
RAM-Floppy-SystemVersion 2.10
Floppy-Disk-SystemVersion 3.30


2.1. Grundbetriebssystem

Bei einem RESET wird die Systemsoftware vom ROM in den RAM geladen und anschließend der ROM ausgeblendet. Danach meldet sich das Grundbetriebssystem mit dem 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 CP/M-kompatibles System starten:
  • Beim RAM-Floppy-System wird CP/V gestartet. Dazu muss vorher das BDOS geladen worden sein. 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 festlegen.
  • Beim Floppy-Disk-System wird zuerst versucht, das System von der RAM-Floppy zu starten. Ist dort keins zu finden, wird von Diskette gebootet. Dabei wird das von Diskette geladene System in die RAM-Floppy kopiert, damit es beim nächsten mal gleich von dort gestartet werden kann. Möchten Sie nach einem RESET das Booten von Diskette erzwingen, muss die RAM-Floppy leer bzw. vorher gelöscht worden sein.
D Debugger aufrufen (nur RAM-Floppy-System)
F X Laufwerk X formatieren
G aaaa Sprung zur Adresse aaaa,
Damit kann ein im Arbeitsspeicher befindliches Programm gestartet 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 zum Laden von Kassette im JKCEMU eine entsprechende Audiofunktion 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.2. RAM-Floppy-System

Haben Sie in den Einstellungen das RAM-Floppy-System aktiviert, dann können Sie im Grundbetriebssystem 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 begrenzt sinnvoll.


2.3. Floppy-Disk-System

Haben Sie in den Einstellungen ein Floppy-Disk-System aktiviert, dann können Sie im Grundbetriebssystem mit dem Kommando C von Diskette booten. Dazu muss eine passende Diskette, z.B. die im JKCEMU für die entsprechende Bildschirmauflösung mitgelieferte PC/M-Bootdiskette, im Fenster JKCEMU Diskettenstation in Laufwerk 1 eingelegt worden sein.

3. Enthaltene Diskettenabbilder

JKCEMU enthält für die PC/M-Emulation folgende Diskettenabbilder: Die PC/M-Boot-Disketten dienen nur zum Booten und enthalten außer einer README-Datei keine weiteren Dateien oder Programme. Die Laufwerkszuordnung bei beiden Diskettenabbildern ist:

A:RAM-Floppy
B:erstes Diskettenlaufwerk, 624-KByte-Format
C:zweites Diskettenlaufwerk, 624-KByte-Format
D:drittes Diskettenlaufwerk, 624-KByte-Format


4. Sonstiges

4.1. Zeichensatzdateien

Sie können in den Einstellungen eine externe Zeichensatzdatei angeben, die dann anstelle der im JKCEMU integrierten verwendet wird. Es ist allerdings zu beachten, dass das Format dieser Datei zwischen den Bildschirmauflösungen 64x16 Zeichen und 80x24 Zeichen unterschiedlich ist.

Bei der Bildschirmauflösung 64x16 Zeichen (mit Zwischenzeilen 64x32 Zeichen) enthält die Zeichensatzdatei 256 Zeichen mit jeweils 8x7 Pixel. Acht hintereinander stehende Bytes repräsentieren die 8 Pixelzeilen eines Zeichens, wobei nur die Bits 1 bis 7 ausgewertet werden. Bit 7 enthält das am weitesten links stehende Pixel.

Bei der Bildschirmauflösung 80x24 Zeichen enthält die Zeichensatzdatei 128 Zeichen mit jeweils 10x6 Pixel, d.h., es wird nur mit einem 7-Bit-Zeichensatz gearbeitet. Das 8. Bit dient zur Cursor-Steuerung. Ist es gesetzt, wird der Cursor in Form einer Linie in Pixelzeile 8 gezeichnet. In der Zeichensatzdatei bilden 16 hintereinander stehende Bytes ein Zeichen, wobei nur die ersten 10 Bytes und davon nur die Bits 2 bis 7 verwendet werden. Bit 7 enthält das am weitesten links stehende Pixel. Entgegen der Auflösung 64x16 Zeichen ergibt ein nicht gesetztes Bit ein leuchtendes Pixel.

© 2009-2016 Jens Müer