Der nachfolgende Bericht ist die Übersetzung des Originals aus http://www.systemed.net/pcw/hardware.html

Amstrad PCW Hardware-Referenz

Dies ist ein unvollständiger und lückenhafter Helfer für die Hardware der Original-PCW-Serie von Amstrad - den Modellen 8256/8512, 9256/9512 und 10. Es betrifft nicht das Modell PCW16.

Die Quellen beinhalten "All you ever wanted to know..." von CP Software, John Elliott, Jacob Nevins (und seinen exzellenten Web-Seiten), Cliff Lawson (der freundlicherweise die Original-Amstrad-Dokumentation mit OCR erstellt hat) und Kevin Thacker's CPC Resource, welche Informationen über den Z80 und FDC (FDC = Floppy-Disk-Controller) für den PCW enthalten.

Richard Fairhurst, 1996-1997

Einführung

Das Betriebssystem der PCWs ist CP/M, das zwei Hauptteile umfasst.

Das BDOS (Basic Disc Operating System) ist der Code des Betriebssystems selbst, geschrieben von Digital Research. Dieser bleibt weitgehend gleich für alle Maschinen, auf denen CP/M läuft.

Das BIOS (Basic Input/Output System) stellt eine Anzahl von Routinen bereit, die auf die Hardware der Maschinen zugreift und ist im Falle der PCWs geschrieben von Locomotive/Amstrad. Die BIOS-Routinen werden vom BDOS aufgerufen für alle Bildschirm-, Disketten- und Druckeroperationen.

Ebenfalls wichtig ist der CCP (Command Console Processor), die Benutzerschnittstelle, die Befehle entgegennimmt, die nach der Ausgabe A> eingegeben werden. Da es für die normalen Anwendungen unüblich ist, den CCP zu benutzen, kann er überschrieben und später neu geladen werden mittels des BIOS Aufrufs 0 (dem Warmboot).

Die TPA (Transient Program Area) ist der Bereich im Speicher, beginnend mit &0100 in einem 64k Adressraum, in den die Nutzerprogramme (.COM Dateien) geladen und ausgeführt werden.

I/O Ports

Externe Hardware/FDC

&00I FDC Status-Register
&01I/O FDC Daten-Register
&88-&8F Parallele Ports
&9FI Joystick von Kempston
&A0-&A7Maus von AMX
&A0-&A2MIDI Interface von EMR
&A8-&AFFestplatte
&C8-&CFI/O Fax Link Interface (CPS8256-kompatible Hardware).
&D0-&D4Maus von Kempston
&DFI MasterScan: Bit 0 Farbe unter dem Scannerkopf.
&E0I Joystick von Cascade/Spectravideo. Eingabe:
Bit 4 rechts,
Bit 3 hoch,
Bit 2 links,
Bit 1 feuern,
Bit 0 runter.
&E0-&EFI/O Serielle Ports (Anklicken für mehr Info)

Anmerkung: I (Input) für Eingabe und O (Output) für Ausgabe

Interne Ports

&F0O Bank für &0000 auswählen
&F1O Bank für &4000 auswählen
&F2O Bank für &8000 auswählen
&F3O Bank für &C000 auswählen. Typisch &87.
&F4O Bits 7-4: wenn gesetzt wird das Lesen aus den gleichen Bänken erzwungen wie das Schreiben für &C000, &0000, &8000 beziehungsweise &4000
&F4I Wie &F8, jedoch unter dem Vorbehalt, dass Bits 3-0 zurückgesetzt sind, wenn der Port gelesen wird. Deshalb zum Lesen, um die Interrupts zu reaktivieren.
&F5O Adresse des Roller-RAM.
Bits 7-5: Bank (0-7).
Bits 4-1: Adresse / 512.
&F6O Vertikale Bildschirmposition
&F7O Bit 7: inverser Bildschirm.
Bit 6: Bildschirm aktiviert.
&F8O0 Ende Bootstrap,
1 Reboot,
2/3/4 verbindet FDC nach NMI (Non-Maskable-Interrupt)/Standard-Interrupts/kein Interrupt,
5/6 Setzt/löscht FDC Terminal-Zähler,
7/8 Bildschirm an/aus (für externen Bildschirm),
9/10 Disk-Motor an/aus,
11/12 Pieper an/aus
&F8IBit 6: 1 Zeile Rücklauf, ist das Bit gesetzt nach Lesen zweimal hintereinander, so ist das der Bildrücklauf.
Bit 5: FDC Interrupt.
Bit 4: Zeigt Bildschirm mit 32 Zeilen an.
Bits 3-0: 300Hz Interrupt-Zähler: bleibt bei 1111 bis zum Rücksetzen durch in a,(&F4) (siehe oben).
&FC-&FD Parallel port (PCW9512)
&FCI/O Daten vom Matrixdrucker
&FDOKommandos an Matrixdrucker
&FDIStatus vom Matrixdrucker.
Bit 7 Papierfach (0 draußen),
Bit 2 Papier vorhanden.

Anders als der CPC nutzt der PCW die Standardmethode, um auf I/O Ports zuzugreifen. Entweder wird der Port im Register C als (ein Byte) Zahl gespeichert und eine Instruktion wie out (c),a genutzt oder der Port wird als Teil der Instruktion übergeben out (&port),a.

Interrupts/Uhrfrequenz

Interrupts werden 300mal pro Sekunde erzeugt, bzw. 6 mal per Bildaufbau (wie beim CPC), für zwei Zeilen beim Bildrücklauf und alle 52 Zeilen danach. Der Bildrücklauf kann ermittelt werden durch zweimaliges Lesen direkt hintereinander von Port &F8. Nur wenn in beiden Fällen das Bit 6 gesetzt ist, erfolgt gerade der Bildrücklauf im PCW.

Die Clock liegt beim PCW bei 3,4MHZ, heruntergeteilt von der CPU Rate von 4MHz. Allerdings wird der Speicherzugriff auf die ersten 128k (Bänke 0-7) durch Zugriff auf die Video-Hardware verlangsamt. Der BIOS-Interrupt ist auch langsam und sollte für zeitkritische Operationen abgeschaltet werden, bei denen das Scannen der Tastatur und Zugriff auf die Laufwerke nicht erforderlich sind.

Speicherbelegung

Der PCW 8256 besitzt 16 Bänke von jeweils 16k. 512k und erweiterte Maschinen enthalten offenkundig mehr. Die Standardbelegung ist:

0&0000-&3FFF: BIOS, erweiterter Sprungblock
1&0000-&192F: BIOS
&1930-&3FFF: Bildschirm
2&0000-&332F: Bildschirm
&3600-&37FF: Roller-RAM
&3800-&3FFF: Zeichensatz
3&0000-&3FEF: BIOS, BDOS
&3FF0-&3FFF: DMA Tastaturmapping
4&0000-&00FF: Arbeitsspeicher und BIOS/BDOS Sprünge
&0100-&3FFF: TPA
5&0000-&3FFF: TPA
6&0000-&3FFF: TPA
7&0000-&2FFF: Common RAM (steht in jeder Zusammenstellung zur Verfügung)
&3000-&3FFF: CP/M Arbeitsspeicher
8&0000-&3FFF: CCP, Hashtabellen, Datenpuffer
9-16 &0000-&3FFF: RAM-Disk (Laufwerk M:)

Das Roller-RAM und der Bildschirmspeicher kann in jede der Bänke 0-7 gelegt werden. Folglich wird der Zugriff von Code/Daten auf diese Bänke bei Videozugriff verlangsamt.

Jede Bank kann in eine der vier 16k Segmente des Z80-Adressbereiches mittels Ports &F0-&F3 gelegt werden. Bei CP/M sind die folgenden (benannten) Zusammenstellungen Standard:

BildschirmBDOS (0)Extra (n+2)TPA (1)
&C000 (&F3) 7 Common 7 Common 7 Common 7 Common
&8000 (&F2) 2 Bildschirm 3 BDOS/BIOS 3 BDOS/BIOS 6 TPA
&4000 (&F1) 1 Bildschirm/BIOS1 Bildschirm/BIOS 8+n CCP oder M: 5 TPA
&0000 (&F0) 0 BIOS 0 BIOS 0 BIOS 4 TPA

Wird die Banknummer (mit gesetztem Bit 7) an einen der Ports &F0-&F3 geschickt, so wird diese Bank für Lesen und Schreiben gewählt. Wird die Banknummer zum Schreiben in Bits 0-2 an einen Port und die Bank zum Lesen in Bits 4-6 geschickt (mit nicht gesetztem Bit 7), so werden unterschiedliche Bänke zum Lesen und Schreiben eingeblendet: dies geht aber nur mit den ersten acht Bänken.

Beispiel zum Lesen/Schreiben: Zum Einblenden der Bank 5 in den Speicher ab &4000 wird folgender Code benutzt: ld a,&85: out (&F1),a.

Bildschirmspeicher

Der PCW-Bildschirm für 50Hz (nicht US) besteht aus 90x32 Zeichen oder 720x256 Bildpunkten (Pixels). Jede Pixelzeile kann an einer beliebigen Adresse innerhalb der ersten 128k des Speichers beginnen: die Adresse jeder Zeile ist gespeichert in einem 512-Bytefeld des Speichers, bezeichnet als Roller-RAM. Standardmäßig liegt das Roller-RAM in Adresse &3600 in Bank 2, real also in &B600, was aber mittels Port &F5 geändert werden kann. Das Roller-RAM beinhaltet 256 aufeinander folgende Adressen, die im üblichen Z80 Format (niederes Byte zuerst) gespeichert sind: Bits 16-14 zeigt auf die Bank, in der die Zeile steht, Bits 13-3 halten die Adresse innerhalb der Bank (in 16-Byte Einheiten) und und Bits 2-0 den Offset. Die Roller-RAM Adresse bbbxxxxxxxxxxxyyy zeigt die Bank bbb an und die Adresse 00xxxxxxxxxxx0yyy.

Jede Zeile ist 720, nicht 90 Bytes lang. Dies deshalb, weil der PCW jedes achte Byte als Start der Adresse nimmt, auf die das Roller-RAM verweist. Auf diese Weise sind acht Bildschirmzeilen wie folgt verschachtelt, so dass es einfach ist, Zeichen zu schreiben (setzt ein hintereinandergestelltes Roller-RAM voraus):

        (a+0)   (a+8)   (a+16)  ...
        (a+1)   (a+9)   (a+17)
        (a+2)   (a+10)  (a+18)
        (a+3)   (a+11)  (a+19)
        (a+4)   (a+12)  (a+20)
        (a+5)   (a+13)  (a+21)
        (a+6)   (a+14)  (a+22)
        (a+7)   (a+15)  (a+23)

Die vertikale Position des Bildschirms auf den Monitor kann durch hoch- oder runterzählen des Ports &F6 geändert werden.

Tastaturabbildung

Die Tastatur des PCW wird direkt auf die letzten 16 Bytes der Bank 3 abgebildet, sogar bei ausgeschalteten Interrupts. Jede Taste ist mittels eines Bits in den Bytes &3FF0-&3FFA abgebildet. (Bytes &3FFC-&3FFF bilden die Tastatur in einer anderen - lückenhaften - Weise ab. &3FFB ist ungenutzt.)

Bit 7:   T2     T1     [+]    .      ,      LEERZ  V      X      Z      DEL<  ALT
Bit 6:   T3     T5     1/2    /      M      N      B      C      LOCK          T.
Bit 5:   T6     T4     SHIFT  ;      K      J      F      D      A             ENTER
Bit 4:   T9     T8     T7     §      L      H      G      S      TAB           f8
Bit 3:   EINBL  COPY   #      P      I      Y      T      W      Q             [-]
Bit 2:   f2     AUSBL  RETURN [      O      U      R      E      STOP          CAN
Bit 1:   T0     PTR    ]      -      9      7      5      3      2             EXTRA
Bit 0:   f4     EXIT   DEL>   =      0      8      6      4      1             f6
         &3FF0  &3FF1  &3FF2  &3FF3  &3FF4  &3FF5  &3FF6  &3FF7  &3FF8  &3FF9  &3FFA
Mit den Bezeichnungen T., T0 - T9 sind Tasten des rechten Blocks gemeint:
T0FORMT1
T2T3
T4ZEILE EZT5
T6WORT ZCHNT7ERS SUCHE
T8DOK SEITET9EINH PARA
T.
Der aktuelle Status der Taste SHIFT LOCK kann durch Test von Bit 6 der Adresse &3FFD gefunden werden.