Der nachfolgende Bericht ist die Übersetzung des Originals aus
http://www.systemed.net/pcw/hardware.html
|
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
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.
&00 | I | FDC Status-Register |
&01 | I/O | FDC Daten-Register |
&88-&8F | Parallele Ports | |
&9F | I | Joystick von Kempston |
&A0-&A7 | Maus von AMX | |
&A0-&A2 | MIDI Interface von EMR | |
&A8-&AF | Festplatte | |
&C8-&CF | I/O | Fax Link Interface (CPS8256-kompatible Hardware). |
&D0-&D4 | Maus von Kempston | |
&DF | I | MasterScan: Bit 0 Farbe unter dem Scannerkopf. |
&E0 | I | Joystick von Cascade/Spectravideo. Eingabe: Bit 4 rechts, Bit 3 hoch, Bit 2 links, Bit 1 feuern, Bit 0 runter. |
&E0-&EF | I/O | Serielle Ports (Anklicken für mehr Info) |
Anmerkung: I (Input) für Eingabe und O (Output) für Ausgabe |
&F0 | O | Bank für &0000 auswählen |
&F1 | O | Bank für &4000 auswählen |
&F2 | O | Bank für &8000 auswählen |
&F3 | O | Bank für &C000 auswählen. Typisch &87. |
&F4 | O | Bits 7-4: wenn gesetzt wird das Lesen aus den gleichen Bänken erzwungen wie das Schreiben für &C000, &0000, &8000 beziehungsweise &4000 |
&F4 | I | 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. |
&F5 | O | Adresse des Roller-RAM. Bits 7-5: Bank (0-7). Bits 4-1: Adresse / 512. |
&F6 | O | Vertikale Bildschirmposition |
&F7 | O | Bit 7: inverser Bildschirm. Bit 6: Bildschirm aktiviert. |
&F8 | O | 0 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 |
&F8 | I | Bit 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) | |
&FC | I/O | Daten vom Matrixdrucker |
&FD | O | Kommandos an Matrixdrucker |
&FD | I | Status 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
.
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.
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:
Bildschirm | BDOS (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/BIOS | 1 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
.
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.
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 &3FFAMit den Bezeichnungen T., T0 - T9 sind Tasten des rechten Blocks gemeint:
T0 | FORM | T1 | |
T2 | T3 | ||
T4 | ZEILE EZ | T5 | |
T6 | WORT ZCHN | T7 | ERS SUCHE |
T8 | DOK SEITE | T9 | EINH PARA |
T. |