KC 85/4 Labyrinth

Hatte gestern die Gelegenheit einen Kleincomputer aus der ehemaligen DDR, den KC 85/4, auszuprobieren. Das Gerät wurde 1988 hergestellt, verwendet eine UB 880 D CPU, einen Zilog Z80 Nachbau mit 1.77 MHz und hat 64 KiB RAM. Im Gegensatz z.B. zu den Atari und Commodore 8-Bit-Rechnern bootet er aber nicht direkt in einen BASIC-Dialekt, sondern ins KC-CAOS 4.2, welches den Aufruf diverser Programme ermöglicht und listet auch direkt einige der im ROM verfügbaren Programme auf:

* KC-CAOS 4.2 *
%BASIC
%REBASIC
%SWITCH
%JUMP
%MENU
%SAVE
%VERIFY
%LOAD
%COLOR
%DISPLAY
%MODIFY
%WINDOW
%KEY
%KEYLIST
%MODUL
%SYSTEM
%V24OUT
%V24DUP
%

Man kann mit diesen Befehlen z.B. mehrere Bereiche auf dem Bildschirm erzeugen und zwischen diesen hin- und her-wechseln (“WINDOW”). Damit könnte man Beispielsweise eine Ausgabe zwecks Referenz stehen lassen, während in einem anderen Bereich etwas bearbeitet wird. Allerdings ist immer nur ein Bereich aktiv und kann ein Programm ausführen und es ist kein Multitasking möglich, auch kein kooperatives, wie es z.B. Windows 1.0x umsetzte.

Da aber die Zeilenlänge auf 40 Zeichen beschränkt ist, genau wie beim C64, ist es praktischer in der Vollbildansicht zu bleiben und mit der (Soft-)Reset-Taste am Gerät aus einem Programm, wleches allenfalls blockiert ist, zurück ins CAOS zu wechseln, um in ein anderes Programm zu starten oder per “REBASIC” die Bearbeitung eines BASIC-Skriptes wiederaufzunehmen. Dabei geht der Arbeitsspeicherinhalt nicht verloren und BASIC-Listings sind noch vorhanden.

Ein äusserst nützliches enthaltenes Programm ist “MODIFY”, ein Speicher-Monitor, mit dem man interaktiv den Inhalt des Arbeitsspeichers betrachten und bearbeiten kann. Beim C64 gabs diese Funktion z.B. bei Verwendung der “Final Cartridge” – mit Bordmitteln musste man umständlich aus BASIC heraus PEEKen und POKEen. Der Vorläufer solcher Programme ist das legendäre Wozmon von Steve Wozniak für die 6502 CPU. Bei älteren Mainframe- und Minicomputern stand dafür das Frontpanel mit Lampen und Kippschaltern zur Verfügung, ebenso bei den Altair 8800 und IMSAI 8080 Mikrocomputern.

Nach dem obligatorischen “10 PRINT "Hallo vom KC 85/4!"; : GOTO 10 [Eingabe] RUN [Eingabe]“, wollte ich das Nächstliegende ausprobieren und ein zufälliges Labyrinth zu generieren. Dabei stiess ich auf das Problem, dass der Zeichensatz des KC’s keinen Backslash enthält. Zwar brachte ich das Skript rasch mit anderen nebeneinanderliegenden Zeichen zum Laufen, aber mit ↑ und ↓ ist es halt kein Labyrinth, sondern Zeichensalat.

Etwas witziges am Rande: Das BASIC Handbuch des KC 85/4 verwendet “WURST” und “BROT” als metasyntaktische Variablen, was mich an die “spam” und “egg”s in Python-Beispielen erinnert hat.

Im System-Handbuch ist erklärt, allerdings etwas umständlich, wie man eigene Zeichen in einem freien Speicherbereich ablegen kann und danach eine der Standard-Zeichentabellen (CCTL0 bis CCTL3) darauf umbiegt, so dass der eigene Zeichensatz verwendet wird. Leider ist das Beispiel im Buch etwas umständlich geschrieben und ich musste den Text zwei, drei Mal lesen und dazwischen die Verwendung des MODIFY-Programms nachschlagen, bis ich verstanden hatte, was gemeint ist.

Das grundlegende Prinzip, wie man eine monochrome 8-mal-8-Bit-Matrix in 8 Bytes in Hexadezimal-Schreibweise umwandelt, ist ganz gut im Handbuch illustriert:

Ich war Faul und habe mir meine Zeichen online gezeichnet und die Hex-Codes berechnen lassen. Eigentlich fehlte mir nur der Backslash und den Frontslash hätte ich aus dem schon vorhandenen Zeichensatz nutzen können. Allerdings wird das Programm viel kürzer, wenn man den Trick mit dem Runden zwischen zwei Ganzzahlen verwenden kann, wozu die beiden Zeichen eben aufeinander folgen müssen. Auch konnte ich so richtige diagonale Linien zeichnen, ╲╱ statt \/, um so auch den Spalt zwischen den einzelnen Zeichen zu vermeiden.

Falls man wie ich gerade in BASIC ist, kann man wie oben erwähnt per Reset-Taste am KC zurück ins CAOS wechseln, ohne den Speicher zurückzusetzen. Hier nachfolgend die Kommandos ohne Ausgabe, um die zwei neuen Zeichen ab Speicherstelle BC00 einzufügen (alle Speicherstellen und -Inhalte hier in Hexadezimaler Schreibweise):

MODIFY BC00[Eingabe]
80[Eingabe]
40[Eingabe]
20[Eingabe]
10[Eingabe]
08[Eingabe]
04[Eingabe]
02[Eingabe]
01[Eingabe]
01[Eingabe]
02[Eingabe]
04[Eingabe]
08[Eingabe]
10[Eingabe]
20[Eingabe]
40[Eingabe]
80[Eingabe]
.[Eingabe]

Nun liegen die beiden neuen Zeichen auf den (dezimalen) Stellen 160 und 161 vor, werden aber noch nicht vom System verwendet. Mit den folgenden Kommandos verschieben wir die Zeichentabelle welche derzeit auf CCTL2 zeigt und bei EE00 im Speicher beginnt, auf den neuen Speicherbereich der bei BC00 startet:

MODIFY B7AB[Eingabe]
BC[Eingabe]
.[Eingabe]

Danach kann man zurück ins BASIC wechseln und die beiden neuen Zeichen nutzen, indem man per “CHR$” Funktion zufällig eines der (dezimalen) Zeichen 160 oder 161 ausgibt:

10 PRINT CHR$(160.5+RND(1)); : GOTO 10

Ausprobieren kann man das obige auch selbst im Browser-Emulator des KC 85/4. Viel Spass beim Lösen des Labyrinths!

Ich entlasse den geneigten Leser mit dem Fragen aufwerfenden Urheberrechts-Hinweis aus dem System-Handbuch:

Der Vertrieb dieser Druckschrift erfolgt ausschließlich durch den Herausgeber. Nachfragen bei der Druckerei sind zwecklos.

Ob da wohl einige Leute günstige Kopien anderer KC-Dokumentationen von der Druckerei zu schnorren versucht haben?

Discussion Area - Leave a Comment