JOYCE Internes

Hier folgt eine Anzahl von Test-Programmen, die im Laufe der Zeit beim Arbeiten mit dem Joyce entstanden sind. Grundlage dafür war u.a. ein Kontakt mit Amstrad und der Info, die ich von Cliff Lawson erhalten habe.
Ein erster Hinweis vorweg:1
Bei den meisten mir bekannten (X)BIOS-Versionen des JOYCE liegt die Adresse für das XBIOS (oder der BIOS Funktion USERF) bei FC5A. Jedoch ist mir ein System bekannt, wo diese Adresse anders ist. Deshalb empfehle ich bei der Programmierung grundsätzlich folgende Initialisierungsroutine:
OS	equ	0000h
USERF	equ	30

XBIOSINIT:
	ld	hl,(OS+1)	; BIOS Basisadresse laden
	ld	de,3*(USERF-1)
	add	hl,de		; Adresse fuer USERF berechnen
	ld	(XBIOS+1),hl	; Und abspeichern
	ret
;
XBIOS:
	jp	$-$
Danach kann das XBIOS dann aufgerufen werden mit:
	call	XBIOS
	dw	FUNKTION

Joyce Tastatur und Bildschirm

Was geschieht eigentlich, wenn eine Taste betätigt wird, die dann auf dem Bildschirm dargestellt wird?
  1. Beim Betätigen einer Taste schickt der Tastatur-Controller die Nummer der betätigten Taste sowie deren Status zur CPU.
  2. Hier werden nun diese beiden Informationen als Index in eine Zeichentabelle verwendet und der entsprechende Wert ermittelt.
  3. Dieser Wert wird seinerseits als Index in die Zeichenmatrix verwendet.
  4. Es wird nun der Platz auf dem Bildschirm ermittelt und die acht Bytes aus der Zeichenmatrix an diese Stelle kopiert.
Möglichkeiten zum Eingriff.
  1. Der Tastatur-Code lässt sich mit einer XBIOS-Funktion ermitteln (KM KT GET - 00DAh).
  2. Die Umsetzungstabellen sind abhängig von der OS-Version.
  3. Die Zeichenmatrix hat eine feste Adresse (B800h).
  4. Die Bildschirmadresse lässt sich über das ROLLER-RAM ermitteln (Aus B600h).
Praktische Beispiele2.
Auslesen der Tastatur.
Ich hatte mir die Aufgabe gestellt, bei einem Editor, den ich schreiben wollte, eine Abfrage der Tastatur auf XBIOS-Ebene vorzunehmen. Hätte ich eine Funktionstaste (z.B. STOP, AUSBL) betätigt, so wäre eine entsprechende Service-Routine aufgerufen worden. Im anderen Fall sollte aus der Taste das aktuelle ASCII-Zeichen ermittelt werden.
Hier findet sich ein Z80-Testprogramm, das bei Betätigung einer Taste eine Menge Infos ausgibt.

Speichern der Tastaturbelegung.
Ein Programm, das die komplette Belegung der Tastatur in eine Datei schreibt. Das Programm versucht, durch die Version des Betriebssystems die Adresse für die Zeichentabelle zu ermitteln.
Hier findet sich das Programm.

Einblicke in das Roller-RAM.
Der Bildschirm des Joyce ist bekanntlich optimal für eine Textausgabe ausgelegt. Die einzelnen Zeilen werden im sog. Roller-RAM verwaltet. Zur Berechnung der realen Video-Adressen habe ich zwei unterschiedliche Methoden gefunden.
Hier findet sich das Programm, das zeigt, dass beide Methoden richtig sind.

Zeichen aus Matrix ermitteln.
Es kommt vor, dass man wissen möchte, welches Zeichen an einer bestimmten Stelle im Video-Speicher abgelegt ist. Der Joyce speichert die Zeichen als Matrix, so dass ein Programm zum Erkennen dieser Matrix benötigt wird.
Hier findet sich das Programm, das aus der Matrix das reine ASCII-Zeichen (' ' bis '~') ermittelt, wobei auch die Attribute (invers, unterstrichen) berücksichtigt werden.

1. Für den PCW müssen folgende Voraussetzungen erfüllt sein:
  1. Z80 CPU
  2. CP/M Version 3.x
  3. CP/M mit Speicherbänken
  1. COMMON Adresse C000H
  2. BIOS mit Erweiterung
  3. Maschinentyp PCW
Das vorliegende Programm testet dies. Sind alle Bedingungen erfüllt, wird zusätzlich geprüft, ob eine serielle Schnittstelle vorhanden ist.
2. Neben etlichen Artikeln zur Grafik des JOYCE existiert noch ein interessanter Treiber für BasiCode. In dem dazugehörigen Listing findet sich der eingebundene Maschinencode u.a. für die Arbeit mit dem Bildschirm. Hier das Assembler-Listing.