[ Zu JKCEMU ]


JKCEMU als AC1-Emulator

Der Amateurcomputer AC1 ist eine Entwicklung von Frank Heyder und anderen Funkamateuren, die ab Ende 1983 als Bauanleitung in der Zeitschrift Funkamateur veröffentlicht wurde. Der AC1 wurde im Laufe der Zeit ständig weiterentwickelt, was allerdings auch dazu führte, dass die Entwicklungslinien auseinander liefen. Neben der Entwicklungslinie um Frank Heyder vom Amateur Computer Club Berlin (ACC) gab es auch eine konkurrierende Linie von Eckard Ludwig vom Studio Computer Club Halle (SCCH), die später von Jürgen Beisler vom AC1-Club Leipzig weitergeführt wurde. Die SCCH-Entwicklungen sind zwar nicht ganz kompatibel zu denen der ACC-Entwicklungslinie (z.B. Monitorprogramme und Zeichnsätze), aber sie erhöhten die Leistungsfähigkeit des AC1 deutlich und versuchten auch, den entstanden Wildwuchs Einhalt zu gebieten. Des Weiteren wurden die SCCH-Entwicklungen auch für den LLC2 angepasst, was zu einer gewissen Kompatibilität zwischen (SCCH-)AC1 und (SCCH-)LLC2 führte.

Im Jahr 2010 kam es zu einer Neuauflage des AC1-Projektes (AC1-2010), bei der Elemente der SCCH-Linie mit neuen Entwicklungen bzw. Modulen vereint wurden.


Bildschirmfoto der AC1-Emulation

1. Emulierte Hardware

Den AC1 gibt es prinzipiell in drei verschiedenen Ausbaustufen: Ur-AC1 (erste veröffentlichte Ausbaustufe), AC1-ACC (die Weiterentwicklung des Amateur Computerclubs Berlin) und AC1-SCCH (die Weiterentwicklung des Studio Computerclubs Halle). Hinzu kommt ein mit AC1-2010 bezeichneter Entwurf aus dem Jahr 2010, der teilweise auf dem SCCH-Konzept basiert.

Da der AC1 als Bauanleitung veröffentlicht wurde, sind auch viele andere Konfigurationen und Weiterentwicklungen anzutreffen.

Emuliert werden:

1.1. Tastatur

Neben den gewöhnlichen Tasten für Buchstaben, Ziffern und Sonderzeichen werden folgende Steuertasten unterstützt:
TasteErzeugter Tastencode / Bedeutung
Home / Pos11
Cursor links8
Cursor rechts9
Cursor runter0Ah
Cursor hoch0Bh
Enter / Return0Dh
BackspaceSCCH-Mode: 7Fh, sonst 8
Delete / EntfSCCH-Mode: 4, sonst 7Fh
Insert / Einfg5
Bild auf11h
Bild ab15h
End / Ende1Ah
F1Inverstaste
F2Grafiktaste


1.2. 64 KByte RAM

Bei AC1-ACC, AC1-SCCH und AC1-2010 werden 64 KByte RAM emuliert. Die unteren 8 KByte liegen parallel zum ROM für das Monitorprogramm, Bildwiederholspeicher und SRAM und können über die IO-Ports 1Ch bis 1Fh sowie bei AC1-SCCH auch über IO-Port 14h ein- und wieder ausgeblendet werden.

Achtung! Bei AC1-SCCH und AC1-2010 können die 64 KByte RAM auch dann beschrieben werden, wenn in dem betreffenden Adressbereich ROM eingeblendet ist (sogenanntes "Durchschreiben").

1.3. Farbgrafik

Optional wird die von Heiko Poppe und Ralph Hänsel entwickelte Farbgrafikkarte emuliert, die auch eine Taktfrequenz- und Zeichensatzumschaltung sowie einen Inversmodus bietet. Der Farbspeicher liegt parallel zum Zeichenspeicher und enthält pro Zeichen eine Vorder- und eine Hintergrundfarbe. Das Ein- und Ausblenden des Farbspeichers erfolgt über das rücklesbare Ein-/Ausgabetor F0h, über das zusätzlich auch die Taktfrequenz umgeschaltet werden kann.

Bedeutung des Ein-/Ausgabetors F0h:
Bedeutung bei Wert 0Bedeutung bei Wert 1
Bit 0:2 MHz4 MHz
Bit 1: normale Bildschirmausgabe invertierte Bildschirmausgabe
Bit 2: Bildwiederholspeicher für die Zeichencodes eingeblendet Farbspeicher eingeblendet


Bedeutung einer Speicherzelle im Farbspeicher:
BitBedeutung
0Vordergrundfarbe rot
1Vordergrundfarbe grün
2Vordergrundfarbe blau
3Vordergrundfarbe intensiv
4Hintergrundgrundfarbe rot
5Hintergrundgrundfarbe grün
6Hintergrundgrundfarbe blau
7Hintergrundgrundfarbe intensiv


Ist die Emulation der Farbgrafik aktiviert, muss auch das Monitorprogramm den Farbspeicher initialisieren. Anderenfalls sehen Sie nur ein buntes Zufallsbild. Da aber die meisten der im JKCEMU integrierten AC1-Monitorprogramme keine Farbgrafik kennen und somit auch keinen Farbspeicher initialisieren, erledigt das der Emulator bei jedem RESET automatisch, allerdings nur für die betreffenden integrierten Monitorprogramme. Haben Sie das Monitorprogramm als externe Datei eingebunden, dann muss dieses auch die Farbgrafik unterstützen, oder Sie schalten die Emulation der Farbgrafik aus.

1.4. Floppy-Disk-Modul

Für den AC1 wurden mehrere Schaltungen für eine Diskettenanbindung entwickelt, die sich teilweise funktional und in den verwendeten Ein-/Ausgabeadressen etwas unterscheiden. JKCEMU emuliert gleichzeitig mehrere der geläufigsten Schaltungen. Konkret werden folgende E/A-Adressen unterstützt:
E/A-Adresse (hexadezimal) ZugriffBedeutung
40 R FDC-Statusregister
41 RW FDC-Datenregister
42, 43 W WAIT-Mode (bis zum nächsten FDC-Interrupt warten)
44, 45 W
  • Bit 1: WAIT-Freigabe (siehe Port 42/43)
  • Bit 4: Terminal Count
48, 49 W Terminal Count (unabhängig vom ausgegebenen Wert)


1.5. SCCH-Modul 1

Das SCCH-Modul 1 stellt zusätzlichen ROM zur Verfügung, und zwar:
Gesteuert wird das Modul über das Ausgabetor 14h:
Bit 0: Programmpaket X im Bereich E000-FFFF einblenden
Bit 1: Grafik/Sound-BASIC im Bereich 4000-5FFF einblenden
Bit 3: Ein Segment der ROM-Disk im Bereich C000-FFFF bzw. 8000-FFFF einblenden,
Die Bits 0, 4, 5 und 6 legen das entsprechende 16K- bzw. 32K-Segment fest.

JKCEMU liefert keinen Inhalt für das Programmpaket X und die ROM-Disk mit. Diesen müssen Sie in den Einstellungen durch Einbinden von ROM-Dateien festlegen.

1.6. SCCH-Modul 3

Das SCCH-Modul 3 stellt je nach Bestückung 64, 128, 256, 320 oder 512 KByte zusätzlichen RAM zur Verfügung, der über E/A-Befehle in den Arbeitsspeicher eingeblendet werden kann. Konkret wird über die Bits 0 bis 3 des E/A-Tors 15h einer von 16 möglichen 64 KByte größen Blöcken ausgewählt, der dann entsprehend der Bits 4 bis 7 des gleichen IO-Ports nur lesend, nur schreibend oder lesend und schreibend (dann aber nur 32 KByte) eingeblendet wird.

Der Adressraum für den zusätzlichen RAM beträgt 1 MByte (16 x 64 KByte). Obwohl das Originalmodul nur mit max. 512 KByte bestückt werden kann, emuliert JKCEMU die theoretisch möglichen 1 MByte. Das hat den Vorteil, dass Software, die diesen zusätzlichen RAM verwendet, nicht speziell für den Einsatz im JKCEMU konfiguriert werden muss, denn auf jeder Adresse, wo die jeweilige Software RAM voraussetzt, wird sie im JKCEMU auch RAM vorfinden.

1.7. SCCH-Inversschaltung

Die SCCH-Inversschaltung erkennt die im Bildwiederholspeicher stehenden Bytes mit den Werten 10h und 11h. Bei 11h wird die Inversdarstellung ein- und bei 10h wieder ausgeschaltet. Unabhängig davon wird am Zeilenende die Inversdarstellung immer ausgeschaltet.

1.8. Inverstaste (F1)

Die SCCH-Inversschaltung enthält im Original auch einen Schalter, mit dem der gesamte Bildschirm invertiert werden kann. JKCEMU emulierte diesen Schalter mit der Taste F1. Obwohl im Original nicht üblich, wird der Inversschalter auch beim Ur-AC1 und beim AC1-ACC emuliert.

1.9. Grafiktaste (F2)

Mit der Grafiktaste (F2) ist die Eingabe von Grafikzeichen über die Tastatur möglich. Dies muss allerdings vom jeweiligen Anwendungsprogramm auch so unterstützt werden. Das im JKCEMU enthaltene Grafik/Sound-BASIC unterstützt die Grafiktaste.

1.10. Zeichensatzumschaltung

Die Zeichensatzumschaltung wird nur beim Monitorprogramm 10/88 und bei der Farbgrafik emuliert. Über die System-PIO kann zwischen dem SCCH-Zeichensatz bzw. dem Zeichensatz des AC1-2010 (PIO B3=0) und dem Zeichensatz des AC1-ACC (PIO B3=1) umgeschaltet werden. Die Umschaltung funktioniert auch, wenn Sie in den Einstellungen eine alternative Zeichensatzdatei angegeben haben. Ist diese Datei größer als 2 KByte, wird zwichen den unteren und den oberen 2 KByte umgeschaltet.

1.11. V24-Schnittstelle mit Drucker

Es wird die zusätzliche PIO (E/A-Adressen 08-0Bh) mit der darüber realisierten V24-Schnittstelle und einem daran angeschlossenen Drucker emuliert. Die Druckerschnittstelle ist dabei auf die Parameter eingestellt, die die integrierten SCCH-Monitorprogramme nach einem RESET einnehmen. So können über die Funktionen der SCCH-Monitorprogramme Zeichen auf dem emulierten Drucker ausgegeben werden, ohne die V24-Parameter ändern zu müssen.

Zum einfachen Ausprobieren der Druckeremulation können Sie in einem SCCH-Monitorprogramm mit Ctrl-X die Bildschirmausgabe zusätzlich auf den Drucker leiten. Mit Ctrl-Y schalten Sie das wieder aus.

1.12. AC1-2010 ROM-Bänke

Beim AC1-2010 kann zusätzlicher ROM in den Arbeitsspeicher eingeblendet werden. Durch Ausgabe des Wertes 10h, 20h, 40h oder 60h auf dem Ausgabetor 0Fh wird im Adressbereich 2000h bis 27FFh eine von vier möglichen ROM-Bänken der PIO2-Karte eingeblendet. Der Wert 0 blendet die ROM-Bank aus. Den Inhalt dieser ROM-Bänke können Sie in den Einstellungen durch Einbinden einer 8 KByte großen ROM-Datei festlegen. Haben Sie keine solche ROM-Datei eingebunden, enthält die erste Bank ein Diskettenverwaltungsprogramm und die zweite ein Verwaltungsprogramm für weitere ROM-Bänke, die ab Adresse A000h eingeblendet werden können. Diese weiteren ROM-Bänke werden weiter unten beschrieben. Zurück zu den vier ROM-Bänken auf der PIO2-Karte: Zum Ein- und Ausblenden dieser Bänke stehen im AC1-2010-Monitorprogramm folgende Kommandos zur Verfügung:

KommandoBedeutung
6Bank 1 im Bereich 2000h-27FFh einblenden
7Bank 2 im Bereich 2000h-27FFh einblenden
8Bank 3 im Bereich 2000h-27FFh einblenden
9Bank 4 im Bereich 2000h-27FFh einblenden
0Keine Bank einblenden

Wird mit dem Kommando 6 die Bank 1 eingeblendet, steht ein Programm für die Arbeit mit Disketten zur Verfügung, vorausgesetzt die Emulation des FDC-Moduls ist aktiviert und für die ROM-Bänke wurde keine externe ROM-Datei eingebunden. Das Diskettenverwaltungsprogramm bietet folgende Kommandos:

KommandoBedeutung
i<X> Laufwerk wechseln, z.B.: iA oder iB
dDirectory anzeigen
f Diskette formatieren (Format: 2x80x5x1024 mit 192 Directory-Einträgen),
Achtung! AC1-spezifisches Format, nicht CP/M-kompatibel!
k Datei löschen,
Der Dateiname wird nicht in der Kommandozeile angegeben, sondern vom Programm abgefragt.
l <Offset> Datei laden,
Die Datei wird an die beim Speichern angegebene Adresse geladen. Dine Offsetangabe in der Kommandozeile kann entfallen. Wird ein Offset angegeben, verschiebt sich die Ladeadresse um diesen Offset. Der Dateiname wird nicht in der Kommandozeile angegeben, sondern vom Programm abgefragt.
s aaaa bbbb <cccc> Adressbereich aaaa bis bbbb als Datei speichern,
Optional kann die Startadresse cccc angegeben werden. Der Dateiname wird nicht in der Kommandozeile angegeben, sondern vom Programm abgefragt.
x SCCH-BASIC-Programm speichern,
Da beim AC1-2010 das SCCH-Modul 1 mit dem BASIC-ROM nicht emuliert wird, dürfte dieses Kommando im JKCEMU kaum angewendet werden, es sei denn, man lädt das SCCH-BASIC in den RAM.

Nun zu den oben bereits ertwähnten weiteren ROM-Bänken: Diese sind 16 Stück und können durch Ausgabe eines der Werte F0h bis FFh auf dem Ausgabetor 0Eh im Bereich ab A000h eingeblendet werden. Dabei wird der RAM ab Adresse 8000h ausgeblendet. Die einzelnen Segmente haben unterschiedliche Längen. Den Inhalt der ROM-Bänke legen Sie durch Einbinden einer ROM-Datei fest, in der einfach alle Segmente hintereinander enthalten sind (88 KByte). Die Tabelle zeigt die Größe der einzelnen Segmente sowie deren Anfangsposition in der einzubindenden ROM-Datei:

Segment-Nummer (Ausgabe auf Port 0Eh) Segmentgröße in KByte Anfangsposition in der ROM-Datei
F0h80
F1h82000h
F2h84000h
F3h86000h
F4h48000h
F5h49000h
F6h2A000h
F7h2A800h
F8h8B000h
F9h8D000h
FAh8F000h
FBh811000h
FCh413000h
FDh414000h
FEh215000h
FFh215800h

Ein Programm zur Verwaltung dieser weiteren ROM-Bänke kann mit dem Kommando 7 (Einblenden der ROM-Bank 2 der PIO2-Karte) gestartet werden.

1.13. Joystick

Wenn in den AC1-Einstellungen das Joystick-Häkchen gesetzt ist, wird ein Joystick entsprechend der SCCH-Schaltung emuliert. Bei dieser Schaltung wird über die System-PIO, Port B, Bit 1 zwischen Tastatur und Joystick umgeschaltet. Wenn ein AC1-Programm die System-PIO umprogrammiert und dabei die Joystick-Schaltung nicht berücksichtigt, sind u.U. keine Tastatureingabe mehr möglich. In dem Fall müssen Sie die Joystick-Emulation ausschalten.

1.14. Kassetten- und Tonausgabe

Die am emulierten Kassettenrecorderanschluss (PIO 1, Port B, Bit 0) ausgegebenen Tonsignale können Sie im Fenster Audio/Kassette im Reiter Ausgang Kassette hörbar machen bzw. aufnehmen und anschließend in eine Datei speichern. Für die über PIO 1, Port B, Bit 2 ausgegebenen Tonsignale (Lautsprecheranschluss) ist der Reiter Ausgang Sound-Generator/Lautsprecher zuständig.

2. Im ROM enthaltene Software


3. BASIC

3.1. BASIC-Programme speichern, laden und öffnen

JKCEMU bietet eine spezielle Unterstützung für das Speichern und Laden von BASIC-Programmen sowie für das Öffnen von im Arbeitsspeicher befindlichen BASIC-Programmen im Texteditor. Die entsprechenden Funktionen finden Sie im Menü Datei.

Folgende BASIC-Interpreter werden unterstützt:

Beim Speichern von BASIC-Programmen erscheint ein Fenster zur Auswahl des Dateiformats. Speichern Sie bitte Mini-BASIC-Programme als Headersave-Datei (*.z80) mit dem Dateityp b und die anderen BASIC-Programme als BASIC-/RBASIC-Programmdatei oder alternativ auch im Headersave-Format mit dem Dateityp B.

Wenn Sie ein BASIC-Programm in einem anderen Dateiformat speichern, erkennt JKCEMU später beim Laden der Datei nicht mehr, dass es sich um ein BASIC-Programm handelt und passt die Systemzellen des BASIC-Interpreters nicht an. Das geladene Programm lässt sich dann nicht nutzen.

3.2. Grafik/Sound-BASIC

Der Grafik/Sound-BASIC-Interpreter Version 3.2 ist im SCCH-Mode verfügbar und liegt in einem Hintergrund-ROM im Adressbereich 4000-5FFF. Standardmäßig befindet sich in diesem Adressbereich RAM. Über das Bit 1 des IO-Ports 14h kann der ROM in den Vordergrund geholt und somit der BASIC-Interpreter in dem Adressbereich sichtbar gemacht werden.

Mit den im Emulator integrierten SCCH-Monitorprogrammen können Sie das BASIC mit dem Kommando b direkt aufrufen (Kaltstart). Dabei wird auch der BASIC-ROM in den Vordergrund geholt. Einen Warmstart des Interpreters führen Sie mit dem Kommando r aus.

4. Sonstiges

4.1. 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 den AC1 gibt es in den Einstellungen die Option Einfügen von Text durch Abfangen des Systemaufrufs. Bei dieser Option lauscht der Emulator auf der Adresse 1802h, dem Einsprung zur Systemfunktion zum Lesen eines Zeichens von der Tastatur. Wenn diese Systemfunktion aufgerufen wird, prüft JKCEMU, ob ein Zeichen eingefügt werden soll. Wenn ja, schreibt er das nächste einzufügende Zeichen in das entsprechende Prozessorregister und simuliert einen RETURN-Befehl. Sollten das Betriebssystem oder das Anwendungsprogramm die Tastatur nicht über diesen Einsprungpunkt abfragen, funktioniert das Einfügen von Text nicht, und Sie müssen die Option ausschalten. Ebenfalls ausschalten müssen Sie die Option bei Verwendung eines anderen (z.B. CP/M-kompatiblen) Betriebssystems.

© 2008-2017 Jens Müller