GUIDE DE RÉFÉRENCE MATÉRIELLE DE L'AMSTRAD PCW
Ceci est un guide incomplet du matériel de la série PCW originale d'Amstrad : 8256/8512, 9256/9512 et 10. Il ne couvre pas le PCW16.
Les sources incluent “Everything you ever wanted to know…” de CP Software, John Elliott, Jacob Nevins (et leurs excellentes pages web), Cliff Lawson (qui a gentiment effectué la reconnaissance optique de caractères (OCR) de la documentation originale d'Amstrad), Howard Fisher (qui m'a prêté une KeyMouse), Paul Hunt et la ressource CPC de Kevin Thacker, qui contient des informations sur le Z80 et le FDC pertinentes pour le PCW. Merci à tous. Toute information supplémentaire est toujours la bienvenue.
Richard Fairhurst, 1996-1997
INTRODUCTION
Le système d'exploitation du PCW est le CP/M, qui se compose de deux parties principales.
Le BDOS (Basic Disc Operating System) est le code du système d'exploitation, écrit par Digital Research. Il devrait rester pratiquement le même sur n'importe quelle machine exécutant CP/M.
Le BIOS (Basic Input/Output System) fournit un ensemble de routines qui accèdent au matériel de la machine et a été écrit, dans le cas du PCW, par Locomotive/Amstrad. Le BDOS invoque les routines du BIOS pour toutes les opérations d'écran, de disque et d'imprimante.
Le CCP (Console Command Processor) est également pertinent ; c'est l'interface qui accepte les commandes saisies à l'invite A>. L'implémentation du CP/M sur PCW ne le charge qu'au démarrage du système, il ne doit donc pas être écrasé.
Le TPA (Transient Program Area) est la zone de mémoire, commençant à &0100 dans un espace d'adressage de 64k, où les programmes utilisateur (fichiers .COM) sont chargés et exécutés.
PORTS D'E/S
- Matériel externe/FDC
| &00 | I | Registre d'état du FDC |
| &01 | E/S | Registre de données du FDC |
| &88-&8F | Ports parallèles | |
| &9F | I | Joystick Kempston |
| &A0 | I | Souris AMX. Mouvement vertical : b0-3 compteur croissant 4 bits, b4-7 compteur décroissant. |
| &A1 | I | Souris AMX. Mouvement horizontal : b0-3 compteur droit 4 bits, b4-7 compteur gauche. |
| &A2 | I | Souris AMX. État des boutons : b2 droit, b1 central, b0 gauche (0 si pressé, 1 sinon). |
| &A0-&A2 | Interface MIDI EMR | |
| &A8-&AF | Disque dur | |
| &C8-&CF | E/S | Interface de liaison Fax (circuit compatible avec le CPS8256). |
| &D0-&D4 | Souris Kempston (similaire à l'AMX) | |
| &DF | I | MasterScan : encre b0 sous la tête de lecture. |
| &E0 | I | Joystick Cascade/Spectravideo. b4 droite, b3 haut, b2 gauche, b1 feu, b0 bas. |
| &E0-&EF | E/S | Ports série (cliquez pour plus d'infos) |
- Ports internes
| &F0 | EL | Sélectionner la banque pour &0000 |
| &F1 | EL | Sélectionner la banque pour &4000 |
| &F2 | EL | Sélectionner la banque pour &8000 |
| &F3 | EL | Sélectionner la banque pour &C000. Normalement &87. |
| &F4 | EL | b7-b4 : si configuré, force les lectures mémoire à accéder à la même banque que les écritures pour &C000, &0000, &8000 et &4000 respectivement |
| &F4 | I | Comme &F8, à condition que b3-0 soit réinitialisé lors de la lecture du port. Par conséquent, lire pour réactiver les interruptions. |
| &F5 | EL | Adresse de la RAM du rouleau. b7-5 : banque (0-7). b4-1 : adresse / 512. |
| &F6 | EL | Position verticale de l'écran |
| &F7 | EL | b7 : vidéo inverse. b6 : activation de l'écran. |
| &F8 | EL | 0 fin du boot, 1 réinitialisation, 2/3/4 connecter FDC au NMI/interruptions standards/aucune, 5/6 définir/effacer le compte terminal FDC, 7/8 allumer/éteindre l'écran (vidéo externe), 9/10 allumer/éteindre le moteur du disque, 11/12 allumer/éteindre le bip |
| &F8 | I | b6 : retour d'une ligne, lire deux fois de suite indique un retour de trame. b5 : interruption FDC. b4 : indique un écran de 32 lignes. b3-0 : compteur d'interruptions 300 Hz : reste à 1111 jusqu'à réinitialisation par in a,(&F4) (voir ci-dessus). |
| &FC-&FD | Port parallèle (PCW9512) | |
| &FC | E/S | Données de l'imprimante matricielle |
| &FD | EL | Commandes de l'imprimante matricielle |
| &FD | I | État de l'imprimante matricielle. Barre de sécurité b7 (0 si retirée), papier b2 détecté. |
Contrairement au CPC, le PCW utilise la méthode standard du Z80 pour accéder aux ports d'E/S. Le port est stocké sous forme de nombre (un seul octet) dans C et une instruction telle que out ©,a est utilisée, ou bien il est passé dans l'instruction out (&port),a.
INTERRUPTIONS / VITESSE D'HORLOGE
Les interruptions se produisent 300 fois par seconde, soit 6 fois par image (comme sur le CPC), aux 2 lignes de balayage du flyback de trame et toutes les 52 lignes suivantes. Le flyback de trame peut être détecté en lisant le port &F8 deux fois consécutivement. Si b6 est activé à chaque fois, le PCW est en flyback de trame.
La vitesse d'horloge du PCW est de 3,4 MHz, ce qui est inférieur à un CPU de 4 MHz. Cependant, l'accès au matériel vidéo ralentit l'accès à la mémoire dans les premiers 128k (banques 0-7). L'interruption du BIOS est également lente et doit être désactivée pour les opérations critiques en temps réel où le balayage du clavier ou l'accès au disque ne sont pas requis.
CARTE MÉMOIRE
Le PCW 8256 possède 16 banques de 16k chacune. Les machines de 512k et celles avec extension en contiennent évidemment plus. Le contenu par défaut est :
| 0 | &0000-&3FFF: | BIOS, jumpblock étendu |
| 1 | &0000-&192F: | BIOS |
| &1930-&3FFF: | Écran | |
| 2 | &0000-&332F: | Écran |
| &3600-&37FF: | Roller RAM (RAM du rouleau) | |
| &3800-&3FFF: | Jeu de caractères | |
| 3 | &0000-&3FEF: | BIOS, BDOS |
| &3FF0-&3FFF: | Carte clavier DMA | |
| 4 | &0000-&00FF: | Espace de travail et sauts BIOS/BDOS |
| &0100-&3FFF: | TPA | |
| 5 | &0000-&3FFF: | TPA |
| 6 | &0000-&3FFF: | TPA |
| 7 | &0000-&2FFF: | RAM commune (disponible dans toutes les configurations) |
| &3000-&3FFF: | Espace de travail CP/M | |
| 8 | &0000-&3FFF: | CCP, tables de hachage, tampons de données |
| 9-16 | &0000-&3FFF: | Disque RAM (lecteur M:) |
La Roller RAM (RAM du rouleau) et la mémoire écran peuvent être stockées dans n'importe laquelle des banques 0 à 7. Par conséquent, les exigences d'accès des circuits vidéo ralentissent l'accès au code/données dans ces banques.
N'importe quelle banque peut être mappée dans l'un des quatre segments de 16k de l'espace d'adressage du Z80 via les ports &F0-&F3. Sous CP/M, les configurations (nommées) suivantes sont standard :
| Écran | BDOS (0) | Extra (n+2) | TPA (1) |
|---|
| &C000 (&F3) | 7 commun | 7 commun | 7 commun | 7 commun |
| &8000 (&F2) | 2 écran | 3 BDOS/BIOS | 3 BDOS/BIOS | 6 TPA |
| &4000 (&F1) | 1 écran/BIOS | 1 écran/BIOS | 8+n CCP ou M: | 5 TPA |
| &0000 (&F0) | 0 BIOS | 0 BIOS | 0 BIOS | 4 TPA |
En envoyant le numéro de banque (avec b7 activé) à l'un des ports &F0-&F3, on sélectionne cette banque pour la lecture et l'écriture. En envoyant le numéro de banque pour l'écriture aux bits b0-2 d'un port et la banque pour la lecture aux bits b4-b6 (avec b7 désactivé), on assigne des banques séparées pour la lecture et l'écriture : cela ne peut être utilisé que pour les 8 premières banques.
À titre d'exemple d'accès en lecture/écriture, pour mapper la banque 5 en mémoire à partir de &4000, on utiliserait ld a,&85: out (&F1),a.
MÉMOIRE ÉCRAN
L'écran du PCW sur les modèles 50 Hz (non américains) a une résolution de 90 x 32 caractères ou 720 x 256 pixels. Chaque ligne de pixels peut commencer à n'importe quelle adresse dans les premiers 128 ko de mémoire : l'adresse de chaque ligne est stockée dans une zone mémoire de 512 octets appelée Roller RAM. Par défaut, la Roller RAM se trouve à &3600 (mappée à &B600) dans la banque 2, mais cela peut être modifié via le port &F5. Elle contient 256 adresses consécutives, stockées au format habituel du Z80, octet de poids faible en premier : b16-14 contrôlent la banque où se trouve la ligne, b13-3 l'adresse dans la banque (par unités de 16 octets) et b2-0 le décalage (offset). Ainsi, une adresse de Roller RAM bbbxxxxxxxxxxxyyy indique la banque bbb, adresse 00xxxxxxxxxxx0yyy.
Chaque ligne a une longueur de 720 octets, et non 90. C'est parce que le PCW occupe chaque huitième octet à partir de l'adresse indiquée par la Roller RAM. De cette manière, huit lignes d'écran peuvent être entrelacées comme suit pour faciliter l'écriture des caractères (en supposant une disposition consécutive de la Roller RAM) :
(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)
La position verticale de l'écran sur le moniteur peut être modifiée en incrémentant ou décrémentant le port &F6.
MAPPAGE DU CLAVIER
Le clavier du PCW est mappé directement sur les 16 derniers octets de la banque 3, même avec les interruptions désactivées. Chaque touche est reflétée par un bit dans les octets &3FF0-&3FFA.
| b7: | k2 k1 [+] . , espace VXZ del< alt |
| b6: | k3 k5 1/2 / MNBC bloque k. |
| b5: | k6 k4 shift ; KJFDA enter |
| b4: | k9 k8 k7 ¤ LHGS tab f8 |
| b3: | paste copy # PIYTWQ [-] |
| b2: | f2 cut exit [ OURE stop can |
| b1: | k0 ptr ] - 9 7 5 3 2 extra |
| b0: | f4 edit del> = 0 8 6 4 1 f6 |
| &3FF0 &3FF1 &3FF2 &3FF3 &3FF4 &3FF5 &3FF6 &3FF7 &3FF8 &3FF9 &3FFA |
Les octets &3FFB-&3FFF reflètent le clavier de manière différente et incomplète. Ces octets sont également utilisés par la KeyMouse de Creative Technology (dans son mode standard MicroDesign) et le clavier Teqniche à 102 touches pour fournir des fonctionnalités supplémentaires, ce qui génère certaines incompatibilités. Parmi les assignations les plus intéressantes, on trouve :
| &3FFB | Clavier standard | b7-b0 inutilisés (0) |
| KeyMouse | b6-b0 compteur de mouvement horizontal. | |
| &3FFC | KeyMouse | b7-b6 bits de poids fort du compteur de mouvement vertical. |
| &3FFD | Tous | b7 toujours activé ; b6 état actuel du SHIFT LOCK |
| claviers std | b3-b0 touches curseur, b4 touche matrice | |
| KeyMouse | b3-b0 bits de poids faible du compteur de mouvement vertical. | |
| &3FFE | KeyMouse | b7 bouton gauche, b6 bouton droit. |
