[ Zu JKCEMU ]


JKCEMU als LLC2-Emulator

Der LLC2 ist ein von Dr. Gerd Maudrich 1985 entwickelter Eigenbau-Computer. Der Studio Computer Club Halle (SCCH) hat sich der Weiterentwicklung des LLC2 angenommen und ein Monitorprogramm sowie einige Erweiterungsmodule entwickelt, die auch für den AC1 verfügbar sind. Dadurch besteht in gewissen Grenzen eine Softwarekompatibilität zwischen AC1 und LLC2.

LLC2-Emulation mit HIRES-Grafik

1. Emulierte Hardware


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
Backspace7Fh
Delete / Entf4
Insert / Einfg5
Bild auf11h
Bild ab15h
End / Ende1Ah
F1Inverstaste
F2Grafiktaste


1.2. Speicher

Die unteren 48 KByte RAM sind nach dem Einschalten bzw. nach einem RESET nicht sichtbar. Erst mit einem Ein-/Ausgabebefehl auf die Adresse E0h werden der ROM aus- und der RAM eingeblendet. Mit diesem Mechanismus lädt sich das Monitorprogramm vom ROM in den RAM um.

1.3. SCCH-Modul 1

Das SCCH-Modul 1 stellt zusätzlichen ROM zur Verfügung, und zwar:
Gesteuert wird das Modul über das Ausgabetor ECh:
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 einblenden,
Die Bits 0, 4, 5 und 6 legen das entsprechende 16K-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.4. 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 IO-Ports EDh 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 max. 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.5. 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.6. Inversschaltung über System-PIO B5

Bei dieser Schaltung wird der Inversmodus mit Bit 5 am Tor B der System-PIO (E/A-Adresse E9h) aktiviert. Im Inversmodus werden dann alle Zeichen invertiert ausgegeben, bei denen Bit 7 gesetzt ist.

Achtung! Das im JKCEMU enthaltene LLC2-Monitorprogramm schaltet bei Tastatureingaben den Inversmodus aus. Möchte man also in eigenen Programmen diesen Inversmodus verwenden, muss man den diesbezüglich störenden Einfluss des Monitorprogramms entsprechend berücksichtigen bzw. umgehen.

1.7. 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.

1.8. 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.9. Zeichensatzumschaltung

Die Zeichensatzumschaltung über PIO B3 wird in Verbindung mit einer extern eingebundenen Zeichensatzdatei emuliert. Diese Zeichensatzdatei muss dazu zwei Zeichensätze enthalten, d.h., sie muss größer als 2 KByte sein. Die Umschaltung auf den zweiten Zeichensatz erfolgt durch Ausgabe einer 1 auf den PIO-Port B3.

Anhand der Größe der extern eingebundenen Zeichensatzdatei erkennt der Emulator, um was für eine Datei es sich handelt:

Größe Zeichensatzdatei Bedeutung
2 KByte
(1 bis 2048 Bytes)
Die Datei enthält nur einen Zeichensatz, d.h., es ist keine Umschaltung möglich.
4 KByte
(2049 bis 4096 Bytes)
Die Datei enthält hintereinander zwei Zeichensätze. Der zweite beginnt ab Offset 0800h.
8 KByte
(mehr als 4096 Bytes)
Die Datei ist eine Doppel-HIRES-Zeichensatzdatei, d.h., neben den beiden Zeichensätzen ist auch die HIRES-Bitmap enthalten. Die Zeichensätze liegen in der Datei in den Bereichen 0000h-07FFh sowie 1000h-17FFh. Die anderen beiden Bereiche enthalten jeweils die HIRES-Bitmap, die allerdings von JKCEMU nicht ausgewertet wird.


1.10. Split Screen

Mit Split Screen ist gemeint, dass während eines jeden Bildaufbaus (also 50 mal pro Sekunde) zwischen Text- und HIRES-Modus umgeschaltet wird, so dass die Bildschirmausgabe in einen Text- und einen HIRES-Teil gesplittet ist. Dazu muss der Eingang des CTC-Kanals 2 mit dem Bildsynchronimpuls verbunden sein und die CTC so programmiert werden, dass sie in der entsprechenden Pixelzeile einen Interrupt auslöst. JKCEMU emuliert diese Verbindung vom Bildsynchronimpuls zur CTC, so dass auch Programme laufen, die den Split-Screen-Modus verwenden.

1.11. Floppy-Disk-Modul

Das Floppy-Disk-Modul wird an folgenden E/A-Adressen emuliert:
E/A-Adresse (hexadezimal) ZugriffBedeutung
A0 R FDC-Statusregister
A1 RW FDC-Datenregister
A2, A3 RW simulierter DMA-Zugriff auf FDC-Datenregister
A4, A5 R Input Gate für Laufwerks- und FDC-Signale:
  • Bit 4: Indeximpuls (negiert)
  • Bit 5: Ready-Signal
  • Bit 6: Interrupt-Signal (negiert)
  • Bit 4: DMA-Request (negiert)
A6, A7 W Bit 0...3: Auswahl Laufwerk
A8, A9 RW Terminal Count,
Der ausgegebene bzw. gelesene Wert hat keine Bedeutung.


1.12. V24-Schnittstelle mit Drucker

Es wird die zusätzliche PIO (E/A-Adressen E4h-E7h) mit der darüber realisierten V24-Schnittstelle und einem daran angeschlossenen Drucker emuliert. Die Druckerschnittstelle ist dabei auf die Parameter eingestellt, die das integrierte Monitorprogramm nach einem RESET einnimmt. So können über die Funktionen des Monitorprogramms Zeichen auf dem emulierten Drucker ausgegeben werden, ohne die V24-Parameter ändern zu müssen.

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

1.13. Joystick

Wenn in den LLC2-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 4 zwischen Tastatur und Joystick umgeschaltet. Wenn ein LLC2-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.

2. Im ROM enthaltene Software


3. BASIC

3.1. Grafik/Sound-BASIC

Der Grafik/Sound-BASIC-Interpreter Version 3.2 liegt in einem Hintergrund-ROM im Adressbereich 4000h-5FFFh. Standardmäßig befindet sich in diesem Adressbereich RAM. Über das Bit 1 des IO-Ports ECh 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.

3.2. BASIC-Programme speichern und laden

JKCEMU bietet eine spezielle Unterstützung für das Speichern und Laden von BASIC-Programmen. Zum Speichern nutzen Sie bitte die Funktion BASIC-Programm speichern... im Menü Datei und speichern das jeweilge Programm als BASIC-/RBASIC-Programmdatei (*.bas). Alternativ ist auch das Speichern als Headersave-Datei (*.z80) mit dem Dateityp B möglich.

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.3. HIRES-Bilddateien

Der JKCEMU Bildbetrachter unterstützt sowohl lesend als auch schreibend LLC2-HIRES-Bilddateien. Diese Dateien enthalten unverändert und ohne zusätzliche Informationen den Inhalt des HIRES-Pixelpeichers. Zur Anzeige im JKCEMU Bildbetrachter müssen die Dateien die Endung *.pix haben und exakt 16384 Bytes groß sein. Umgekehrt können mit dem Bildbetrachter HIRES-Bilddateien für den LLC2 erzeugt werden, indem man sie einfach mit der Endung *.pix speichert. Zum Laden und Anzeigen dieser Dateien auf dem LLC2 ist ein entsprechendes Programm notwendig. Ein solches Programm ist im JKCEMU nicht enthalten. Sie können aber mit dem integrierten BASIC-Compiler leicht so ein Programm selbst erstellen. Als Beispiel sei ein Programm gezeigt, dass HIRES-Bilder von einem USB-Speicher lädt. Dazu muss natürlich ein USB-Modul (VDIP) angeschlossen bzw. im JKCEMU die USB-Emulation aktiviert sein. Das Programm fragt nach dem Namen der zu ladenden Datei. Der Dateiname kann dabei auch ohne die Endung .PIX eingegeben werden.

cls
print "LLC2-HIRES-Bilder von USB-Speicher laden"
print
do
  input "Dateiname (nur Enter -> Ende): ";f$
  f$=trim$(f$)
  if len(f$)=0 then end
  if instr(f$,".")=0 then f$=f$+".PIX"
  open f$ for input as #1
  if err then
    print f$;": ";err$
  else
    screen 1
    a=&h8000
    for i=1 to 16384
      b=asc(input$(1,1))
      if err then exit
      poke a,b
      a=a+1
    next
    if not err then e=asc(input$(1))
    screen 0
    if err then print err$
    close #1
  endif
loop


Wichtig! Sie müssen beim Compilieren das Zielsystem LLC2 mit HIRES-Grafik auswählen!
Außerdem sollten die Laufzeiteigenschaften in den Compiler-Optionen auf Compilieren für Produktiveinsatz gesetzt werden.

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 LLC2 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.

© 2009-2016 Jens Müller