Hinweise zur Emulation des HC900 und KC85/2...5

Die Computer HC900, KC85/2, KC85/3 und KC85/4 wurden im VEB Mikroelektronik Mühlhausen hergestellt. Beim KC85/2 handelt es sich eigentlich nur um einen umbenannten HC900. Da aber im Laufe der Zeit das Betriebssystem weiterentwickelt wurde, enthielten die als KC85/2 produzierten Geräte meistens eine neuere Betriebssystemversion, nämlich CAOS 2.2 anstelle von HC900-CAOS. Aus diesem Grund werden beide Geräte auch als separate Systeme emuliert.

Der KC85/3 ist ein um zusätzlichen ROM erweiterter KC85/2. Neben der neuen Betriebssystemversion CAOS 3.1 ist der im ROM enthaltene BASIC-Interpreter das Hauptunterscheidungsmerkmal.

Eine wirkliche Weiterentwicklung in der Hardware ist der KC85/4. RAM und ROM wurden vergrößert und die Video-Hardware überarbeitet. Letzteres führte in Verbindung mit der wiederum neuen Betriebssystemversion CAOS 4.x zu einer deutlichen Steigerung der Grafik-Performance.

Den KC85/5 hat es dagegen nie offiziell gegeben. Die Leiterplatte des KC85/4 ist bereits für Speicherschaltkreise mit einer größeren Kapazität ausgelegt. Unter einem KC85/5 versteht man deshalb einen KC85/4 mit auf 320 KByte (256 + 64) ausgebautem RAM und 48 KByte ROM sowie einer neuen Betriebssystemversion, die diesen zusätzlichen Speicher verwalten kann.


1. Emulierte Hardware

Emuliert werden die Grundgeräte sowie optional die Disketten-Erweiterung D004 inkl. der Festplattenerweiterung GIDE und einige Module.

Der emulierte Speicher beträgt bei:

1.1. Tastatur

Die KC85-Tastatur enthält in der oberen Reihe einige Tasten, für die es üblicherweise keine gleichnamigen Tasten auf der Tastatur des Emulatorrechners gibt. Die Tabelle zeigt das Mapping der Tasten in der oberen Tastaturreihe:
KC85-Taste JKCEMU-Taste Tastencode Bedeutung bei Shift Tastencode bei Shift
Cursor links Cursor links 08h CCR 19h
Cursor rechts Cursor rechts 09h CEL 18h
Cursor nach unten Cursor nach unten 0Ah SCROL 12h
Cursor nach oben Cursor nach oben 0Bh PAGE 11h
F1F10F1hF70F7h
F2F20F2hF80F8h
F3F30F3hF90F9h
F4F40F4hFA0FAh
F5F50F5hFB0FBh
F6F60F6hFC0FCh
BRKF703h
STOPF813hESC1Bh
CLRF901hHCOPY0Fh
INSEinfg1AhCLICK14h
DELEntf1Fh
HOME HOME bzw. Pos1 10h CLS 0Ch


1.1.1. Deutsche Umlaute und andere fehlende Zeichen

Deutsche Umlaute, eckige und geschweifte Klammern sowie Backslash und Tilde können mit der originalen KC85-Tastatur nicht eingegeben werden, da es dafür keine Tastencodes gibt. Aus diesem Grund können diese Zeichen auch im Emulator nicht eingegeben werden. Die KC85-Komforttastatur D005 kann aber in einen spezielles Mode (MicroDOS-Mode) geschaltet werden, mit dem diese Zeichen eingegeben und in Form von 2-Byte-Tastencodes an das KC85-Grundgerät gesendet werden. Das CAOS-Betriebssystem kann zwar mit diesen 2-Byte-Tastencodes nichts anfangen bzw. interpretiert sie falsch, doch unter MicroDOS werden damit die richtigen Zeichen angezeigt.

Im JKCEMU gibt es die Option Tasten für ÄÖÜäöüß[]{}\~ entsprechend MicroDOS-Mode der D005 behandeln. Ist diese Option eingeschaltet, werden beim Drücken der betreffenen Tasten auf der Emulatortastatur 2-Byte-Tastencodes entsprechend dem D005-MircoDOS-Mode erzeugt, d.h. diese Tasten haben dann im MicroDOS eine Wirkung. Unschön ist allerdings, dass das CAOS-Betriebssystem bei diesen Tastencodes falsche Zeichen anzeigt.

1.1.2. Ctrl-A...Z, ESC und TAB direkt in den Tastaturpuffer

Auf der originalen Tastatur gibt es keine Control-Taste, was bei Verwendung eines CP/M-kompatiblen Betriebssystems recht hinderlich ist. Zwar lässt sich das Problem durch Verwendung spezieller Tasten und Tastenkombinationen teilweise umgehen, allerdings nicht vollständig und dann auch nur auf eine ziemlich umständliche Art und Weise. Eine komfortable Lösung bietet JKCEMU mit der Option Ctrl-A...Z, ESC und TAB direkt in den Tastaturpuffer. Damit sind solche Tastatureingaben möglich. Technisch wird das Problem der fehlenden Control-Taste in der Form gelöst, indem die entsprechenden Codes unter Umgehung der emulierten Tastatur direkt in den Tastaturpuffer geschrieben werden.

1.2. Module

Folgende Module werden optional emuliert:
ModulBemerkung
M003 V.24-Modul mit einem an Kanal A angeschlossenen Drucker
M006 BASIC-Modul für HC900 und KC85/2,
Für KC85/3..5 steht das Modul nicht zur Verfügung.
M008Joystick
M01164 KByte RAM
M012TEXOR
M021 Joystick / Centronics mit angeschlossenem Drucker
M02216 KByte Expander RAM
M0258 KByte User PROM
M026Forth
M027Development
M02816 KByte User PROM
M032256 KByte Segmented RAM
M033TypeStar
M034512 KByte Segmented RAM
M0351 MByte Segmented RAM
M035x44 MByte Segmented RAM
M036128 KByte Segmented RAM
M0408/16 KByte User PROM
M052USB/Netzwerk
M1208 KByte CMOS RAM
M12216 KByte CMOS RAM
M12432 KByte CMOS RAM

Bei den User-PROM-Modulen M025, M028 und M040 müssen Sie eine ROM-Datei angeben, die den Inhalt des Moduls enthält.

Die CMOS-RAM-Module unterscheiden sich von den anderen RAM-Modulen in der Form, dass die CMOS-RAM-Module beim emulierten "Einschalten" ihren Inhalt nicht verlieren.

Mit dem Modul M052 wird USB- und Netzwerkunterstützung geboten. Lesen Sie dazu bitte auch die Hinweise zur Netzwerkemulation.

1.3. Drucker

Mit dem V.24-Modul M003 wird auch ein Drucker emuliert. Alle über Kanal A dieses Moduls ausgegebenen Bytes werden an den aktiven Druckauftrag angehängt (siehe Drucken und Druckaufträge). Schalten Sie dazu in den Einstellungen die Emulation des Moduls M003 ein. Nun müssen Sie noch die datentechnische Verbindung vom Betriebssystem zum Modul herstellen. Das erledigt ein entsprechender Treiber. Beim KC85/4 und KC85/5 ist ein Treiber für das Modul M003 bereits im Betriebssystem enthalten. Starten Sie diesen mit dem Befehl V24OUT (CAOS 4.2) bzw. LSTDEV (CAOS 4.5). Für die anderen KC85-Systeme müssen Sie selbst einen geeigneten Treiber bereitstellen.

Eine weitere Möglichkeit zum Drucken besteht mit dem Modul M021, bei dem eine Centronics-Schnittstelle mit angeschlossenem Drucker emuliert wird. Im CAOS 4.5 ist auch dafür ein Treiber enthalten: Führen Sie LSTDEV 0 aus. Bei den anderen CAOS-Versionen müssen Sie wieder selbst einen passenden Treiber bereitstellen.

1.4. Tongeneratoren und Kassettenrecorderanschluss

Welche erzeugten Töne vom Emulator ausgegeben werden, legen Sie durch Auswahl einer entsprechenden Funktion in dem Fenster Audio/Kassette fest. Bei der Funktion Töne ausgeben hören Sie das Mischsignal aus beiden Tongeneratoren, welches auch der Lautstärkebeeinflussung unterliegt. Bei allen anderen Audio-Funktionen wird das Signal des Tongenerators 1 (linker Kanal) ohne Lautstärkebeeinflussung ausgegeben, d.h. das Signal, mit dem Dateien auf Kassette gespeichert werden.

1.5. Diskettenerweiterung D004

Die Diskettenerweiterung D004 ist ein Aufsatzgerät, welches ein ROM-Modul (ansprechbar über Modulsteckplatz FC) und ein eigenes Prozessorsystem enthält.

Den ROM-Inhalt des ROM-Moduls können Sie in den Einstellungen frei wählen. Zur Auswahl stehen die originale ROM-Version 2.0 von Robotron und die später von Mario Leubner weiterentwickelten Versionen 3.2 oder 3.3, oder Sie binden eine externe ROM-Datei ein. Standardmäßig wird folgende ROM-Version verwendet:
Emuliertes SystemD004-ROM
HC900
KC85/2
KC85/3
KC85/4
Version 2.0
KC85/5 Version 3.3

Einige in JKCEMU integrierten Werkzeuge sind auch mit dem D004-eigenen Prozessorsystem benutzbar. Beim Aufruf des Debuggers, Reassemblers und Speichereditors werden Sie gefragt, ob Sie auf das Hauptprozessorsystem (das im Grundgerät) oder auf das D004-Prozessorsystem zugreifen möchten. Es ist auch möglich, ein Werkzeug zweimal zu öffnen, einmal für das Hauptprozessor- und einmal für das D004-System.

Achtung! Das D004-Prozessorsystem ist vom Hauptprozessorsystem aus steuerbar. So kann es z.B. auch zurückgesetzt (RESET) oder komplett deaktiviert (Dauer-RESET) werden. Wenn Sie den Debugger für das D004-Prozessorsystem geöffnet und dort die Programmausführung angehalten haben (z.B. Haltepunkt), kann es trotzdem vorkommen, dass das Hauptprozessorsystem die D004 zurücksetzt oder gar deaktiviert. Um das zu verhindern, sollten Sie evtl. auch das Hauptprozessorsystem anhalten, z.B. im Hauptfenster mit dem Menüpunkt DateiPause.

2. Im ROM enthaltene Software

System/ModulSoftware
HC900HC900-CAOS
KC85/2HC-CAOS 2.2
KC85/3 HC-CAOS 3.1
HC-BASIC
KC85/4 KC-CAOS 4.2
HC-BASIC
KC85/5 KC-CAOS 4.5
HC-BASIC
EDAS 1.6b
KC-DEBUGGER 1.0
KC-FORTH 3.1
M006 HC901-CAOS
HC-BASIC
M012TEXOR 2.3
M026KC-FORTH 3.1
M027 EDAS 1.4
DISASS
TEMO
M033TYPESTAR 90
M052 Vinculum Terminal 2.2
ULOAD
USAVE
NCFG 1.0
PING 1.1
TFTP 1.1
D004 je nach Einstellung Version 2.0, 3.2 oder 3.3

3. Sonstiges

3.1. Speichern eines BASIC-Programms

JKCEMU bietet eine spezielle Unterstützung für das Speichern und Laden von BASIC-Programmen. Wird ein System mit im ROM enthaltenen BASIC-Interpreter emuliert, d.h. ein HC900 bzw. KC85/2 mit aktiviertem BASIC-Modul M006 oder ein KC85/3...5, dann sucht JKCEMU das BASIC-Programm im Adressbereich des ROM-BASIC-Interpreters (ab Adresse 0401h). Bei einem HC900 bzw. KC85/2 ohne BASIC-Modul wird dagegen das BASIC-Programm gespeichert, das im Adressbereich des RAM-BASIC-Interpreters liegt (ab Adresse 2C01h).

3.2. Einfügen von Text aus der Zwischenablage

Das Einfügen von Text aus der Zwichenablage erfolgt gewöhnlich in der Form, dass für jedes einzufügende Zeichen das Drücken der entsprechenden Taste bzw. Tastenkombination simuliert wird. Dieses Prinzip ist recht langsam. Für HC900 und KC85/2..5 gibt es in den Einstellungen die Option Einfügen von Text direkt in den Tastaturpuffer. Bei dieser Option werden die einzufügenden Zeichen direkt in den Tastaturpuffer geschrieben. Das ist wesentlich schneller, da dadurch das Drücken der entsprechenden Tasten nicht simuliert werden muss.

Sollten Sie jedoch ein anderes als das in JKCEMU integrierte Betriebssystem verwenden, wird diese Option möglicherweise nicht mehr funktionieren, da dort die Tastaturabfrage anders gestaltet sein kann. In dem Fall müssen Sie die Option ausschalten.

3.3. Zeitverhalten der Bildschirmsteuerung

An den Eingängen des Zähler-/Zeitgeberbausteins (CTC) liegen der Bildsynchronimpuls und der doppelte Zeilensynchronimpuls an. Dadurch ist es möglich, Software zu schreiben, die mit der Ausgabe der einzelnen Pixelzeilen auf dem Bildschirm synchron läuft. Manche Programmierer nutzen diese Möglichkeit aus, um spezielle Effekte zu erzeugen (z.B. Farbscrolling). Damit solche Effekte auch im Emulator zu sehen sind, muss die Visualisierung mit dem Zeitregime an den CTC-Eingängen synchron emuliert werden. Und genau das macht die Option Zeitverhalten der Bildschirmsteuerung emulieren.

Die zeitsynchrone Emulation der Bildschirmsteuerung ist sehr rechenintensiv. Außerdem gibt es auch nur wenige Programme, die diese Möglichkeit nutzen. Aus diesem Grund ist die zeitsynchrone Emulation zwischen Bildschirmausgabe und CTC in Form einer Option ein- und ausschaltbar.

Ist die Option eingeschaltet, wird auch die Bildschirmausgabe sychron aktualisiert, d.h. der in den Einstellungen festgelegte Aktualiserungszyklus findet keine Anwendung.

3.4. Vermeintlicher D004-Speicherfehler

In den D004-ROM-Versionen 3.2 und 3.3 (Standard bei KC85/5) ist ein Speichertest enthalten, den Sie mit JUMP FC FF aufrufen können. Es kann vorkommen, dass dieser Speichertest in JKCEMU einen Fehler meldet. Die Ursache liegt dabei nicht etwa in einer fehlerhaften Speicherzelle, sondern in einem Timeout, der bedingt durch die Art und Weise der Emulation auftreten kann.

In JKCEMU werden die beiden Mikroprozessorsysteme (Grundgerät und D004) in separaten Threads emuliert. Da der Emulator keinen Einfluss darauf hat, wann das Betriebssystem welchen Thread zum Zuge kommen lässt, kann die Emulation der beiden Mikroprozessoren zueinander zeitlich wesentlich weiter auseinander liegen als bei einem realen KC85/D004-Gespann. Die Fehlermeldung erscheint nun deshalb, weil vom Grundgerät aus die Adresse der zu prüfende Speicherzelle an die D004 übergeben wird. In der D004 wird nun die Speicherzelle getestet und das Ergebnis an das Grundgerät zurückgemeldet. Das Grundgerät wartet nur eine bestimmt Zeit auf die Rückmeldung. Ist diese Zeit abgelaufen, wird die Speicherzelle als fehlerhaft angesehen und somit ein Fehler ausgegeben. Wenn nun zufällig der D004-Thread zeitlich etwas behindert wurde, und deshalb in der D004 der Speichertest vielleicht noch gar nicht begonnen hat, wird auch die Rückmeldung zu spält erfolgen und somit zu einer Fehlermeldung führen.