¡Esta es una revisión vieja del documento!
GUIA DE REFERENCIA DE HARWARE DEL AMSTRAD PCW
Esta es una guía incompleta del hardware de la serie PCW original de Amstrad: 8256/8512, 9256/9512 y 10. No cubre el PCW16.
Las fuentes incluyen “Todo lo que siempre quisiste saber…” de CP Software, John Elliott, Jacob Nevins (y sus excelentes páginas web), Cliff Lawson (quien amablemente realizó el reconocimiento óptico de caracteres (OCR) de la documentación original de Amstrad), Howard Fisher (quien me prestó un KeyMouse), Paul Hunt y el recurso CPC de Kevin Thacker , que contiene información sobre Z80 y FDC relevante para el PCW. Gracias, chicos. Cualquier información adicional siempre es bienvenida.
Richard Fairhurst , 1996-1997
INTRODUCCIÓN
El sistema operativo de PCW es CP/M, que se compone de dos partes principales.
El BDOS (Basic Disc Operating System) es el código del sistema operativo, escrito por Digital Research. Debería permanecer prácticamente igual en cualquier máquina que ejecute CP/M.
La BIOS (Sistema Básico de Entrada/Salida) proporciona un conjunto de rutinas que acceden al hardware de la máquina y fue escrita en el caso de la PCW por Locomotive/Amstrad. El BDOS invoca las rutinas de la BIOS para todas las operaciones de pantalla, disco e impresora.
También es relevante el CCP (Procesador de Consola de Comandos), la interfaz que acepta los comandos ingresados en el indicador A>. La implementación de CP/M en PCW solo lo carga al iniciar el sistema, por lo que no debe sobrescribirse.
El TPA (Área de programa transitorio) es el área de memoria, que comienza en &0100 en un espacio de direcciones de 64k, donde los programas de usuario (archivos .COM) se cargan y se ejecutan.
PUERTOS DE E/S
- Hardware externo/FDC
| &00 | I | Registro de estado de FDC |
| &01 | E/S | Registro de datos FDC |
| &88-&8F | Puertos paralelos | |
| &9F | I | Joystick Kempston |
| &A0 | I | Ratón AMX. Movimiento vertical: b0-3 contador ascendente de 4 bits, b4-7 contador descendente. |
| &A1 | I | Ratón AMX. Movimiento horizontal: b0-3 contador derecho de 4 bits, b4-7 contador izquierdo. |
| &A2 | I | Ratón AMX. Estados de los botones: b2 derecha, b1 central, b0 izquierda (0 si se presiona, 1 si no). |
| &A0-&A2 | Interfaz MIDI EMR | |
| &A8-&AF | Disco duro | |
| &C8-&CF | E/S | Interfaz de enlace de fax ( circuito compatible con CPS8256). |
| &D0-&D4 | Ratón Kempston (similar a AMX) | |
| &DF | I | MasterScan: tinta b0 debajo del cabezal de escaneo. |
| &E0 | I | Joystick Cascade/Spectravideo. b4 derecha, b3 arriba, b2 izquierda, b1 fuego, b0 abajo. |
| &E0-&EF | E/S | Puertos serie (haga clic para más información) |
- Puertos internos
| &F0 | EL | Seleccione el banco para &0000 |
| &F1 | EL | Seleccione banco para &4000 |
| &F2 | EL | Seleccione banco para &8000 |
| &F3 | EL | Seleccione el banco para &C000. Normalmente, &87. |
| &F4 | EL | b7-b4: cuando se configura, fuerza que las lecturas de memoria accedan al mismo banco que las escrituras para &C000, &0000, &8000 y &4000 respectivamente |
| &F4 | I | Como &F8, con la condición de que b3-0 se restablezca al leer el puerto. Por lo tanto, lea para reactivar las interrupciones. |
| &F5 | EL | Dirección de la RAM del rodillo. b7-5: banco (0-7). b4-1: dirección / 512. |
| &F6 | EL | Posición de pantalla vertical |
| &F7 | EL | b7: video inverso. b6: habilitación de pantalla. |
| &F8 | EL | 0 finalizar arranque, 1 reiniciar, 2/3/4 conectar FDC a NMI/interrupciones estándar/ninguna, 5/6 establecer/borrar conteo de terminales FDC, 7/8 encender/apagar pantalla (para video externo), 9/10 encender/apagar motor de disco, 11/12 encender/apagar pitido |
| &F8 | I | b6: retorno de 1 línea, leer dos veces seguidas indica retorno de trama. b5: interrupción FDC. b4: indica pantalla de 32 líneas. b3-0: contador de interrupciones de 300 Hz: permanece en 1111 hasta que se restablece in a,(&F4)(ver arriba). |
| &FC-&FD | Puerto paralelo (PCW9512) | |
| &FC | E/S | Datos de la impresora matricial |
| &FD | EL | Comandos de impresora matricial |
| &FD | I | Estado de la impresora matricial. Barra de seguridad b7 (0 fuera), papel b2 encontrado. |
A diferencia del CPC, el PCW utiliza el método estándar Z80 para acceder a los puertos de E/S. El puerto se almacena como un número (de un solo byte) en C y out ( c ),a se utiliza una instrucción como [insertar número], o bien se pasa como parte de la instrucción out (&port),a.
INTERRUPCIONES/VELOCIDAD DE RELOJ
Las interrupciones ocurren 300 veces por segundo, o 6 veces por fotograma (como en el CPC), a las 2 líneas de escaneo del flyback de fotograma y cada 52 líneas a partir de entonces. El flyback de fotograma se puede detectar leyendo el puerto &F8 dos veces consecutivas. Solo si b6 está configurado cada vez, el PCW está en flyback de fotograma.
La velocidad de reloj del PCW es de 3,4 MHz, inferior a la de una CPU de 4 MHz. Sin embargo, el acceso del hardware de vídeo ralentiza el acceso a la memoria hasta los primeros 128k (bancos 0-7). La interrupción del BIOS también es lenta y debe desactivarse para operaciones de tiempo crítico donde no se requieren operaciones como el escaneo del teclado ni el acceso al disco.
MAPA DE MEMORIA
El PCW 8256 tiene 16 bancos de 16k cada uno. Las máquinas de 512k y las expandidas obviamente contienen más. El contenido predeterminado es:
| 0 | &0000-&3FFF: | BIOS, jumpblock extendido |
| 1 | &0000-&192F: | BIOS |
| &1930-&3FFF: | pantalla | |
| 2 | &0000-&332F: | pantalla |
| &3600-&37FF: | roller RAM | |
| &3800-&3FFF: | conjunto de caracteres | |
| 3 | &0000-&3FEF: | BIOS, BDOS |
| &3FF0-&3FFF: | Mapa de teclado DMA | |
| 4 | &0000-&00FF: | espacio de trabajo y saltos de BIOS/BDOS |
| &0100-&3FFF: | TPA | |
| 5 | &0000-&3FFF: | TPA |
| 6 | &0000-&3FFF: | TPA |
| 7 | &0000-&2FFF: | RAM común (disponible para su uso en todas las configuraciones) |
| &3000-&3FFF: | espacio de trabajo CP/M | |
| 8 | &0000-&3FFF: | CCP, tablas hash, buffers de datos |
| 9-16 | &0000-&3FFF: | Disco RAM (unidad M:) |
La RAM del rodillo y la memoria de pantalla pueden almacenarse en cualquiera de los bancos 0 a 7. Por lo tanto, los requisitos de acceso a los circuitos de vídeo ralentizan el acceso a código/datos en estos bancos.
Cualquier banco puede mapearse en cualquiera de los cuatro segmentos de 16k del espacio de direcciones del Z80 mediante los puertos &F0-&F3. En CP/M, las siguientes configuraciones (con nombre) son estándar:
| Pantalla | BDOS (0) | Extra (n+2) | TPA (1) | |
|---|---|---|---|---|
| &C000 (&F3) | 7 comunes | 7 comunes | 7 comunes | 7 comunes |
| &8000 (&F2) | 2 pantallas | 3 BDOS/BIOS | 3 BDOS/BIOS | 6 TPA |
| &4000 (&F1) | 1 pantalla/BIOS | 1 pantalla/BIOS | 8+n CCP o M: | 5 TPA |
| &0000 (&F0) | 0 BIOS | 0 BIOS | 0 BIOS | 4 TPA |
Al enviar el número de banco (con b7 activado) a uno de los puertos &F0-&F3, se selecciona ese banco para lectura y escritura. Al enviar el número de banco para escritura a b0-2 de un puerto y el banco para lectura a b4-b6 (con b7 desactivado), se asignan bancos separados para lectura y escritura: esto solo se puede usar para los primeros 8 bancos.
Como ejemplo de acceso de lectura/escritura, para mapear el banco 5 en la memoria desde &4000, usaría ld a,&85: out (&F1),a.
MEMORIA DE PANTALLA
La pantalla PCW en los modelos de 50 Hz (no estadounidenses) tiene una resolución de 90 x 32 caracteres o 720 x 256 píxeles. Cada línea de píxel puede comenzar en cualquier dirección dentro de los primeros 128 kB de memoria: la dirección de cada línea se almacena en un área de memoria de 512 bytes conocida como RAM de rodillo. Por defecto, la RAM de rodillo se encuentra en &3600 (asignada a &B600) en el banco 2, pero esto puede cambiarse mediante el puerto &F5. Contiene 256 direcciones consecutivas, almacenadas en el formato habitual de Z80, primero el byte bajo: b16-14 controlan en qué banco se encuentra la línea, b13-3 la dirección en el banco (en unidades de 16 bytes) y b2-0 el desplazamiento. Por lo tanto, una dirección de RAM de rodillo bbbxxxxxxxxxxxyyy indica banco bbb, dirección 00xxxxxxxxxxx0yyy.
Cada línea tiene una longitud de 720 bytes, no de 90. Esto se debe a que el PCW ocupa cada octavo byte a partir de la dirección indicada por la RAM de rodillos. De esta manera, se pueden intercalar ocho líneas de pantalla de la siguiente manera para facilitar la escritura de caracteres (suponiendo una disposición consecutiva de la RAM de rodillos):
(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 posición vertical de la pantalla en el monitor se puede alterar incrementando o disminuyendo el puerto &F6.
MAPEO DEL TECLADO
El teclado del PCW se asigna directamente a los últimos 16 bytes del banco 3, incluso con las interrupciones deshabilitadas. Cada tecla se refleja en un bit en los bytes &3FF0-&3FFA.
| b7: | k2 k1 [+] . , espacio VXZ del< alt |
| b6: | k3 k5 1/2 / MNBC bloquear k. |
| b5: | k6 k4 shift ; KJFDA enter |
| b4: | k9 k8 k7 ¤ LHGS tab f8 |
| b3: | pegar copiar # PIYTWQ [-] |
| b2: | f2 cortar regresar [ OURE parar puede |
| b1: | k0 ptr ] - 9 7 5 3 2 extra |
| b0: | f4 salir del> = 0 8 6 4 1 f6 |
| &3FF0 &3FF1 &3FF2 &3FF3 &3FF4 &3FF5 &3FF6 &3FF7 &3FF8 &3FF9 &3FFA |
Los bytes &3FFB-&3FFF reflejan el teclado de forma diferente e incompleta. Estos bytes también son utilizados por KeyMouse de Creative Technology (en su modo estándar de MicroDiseño) y el teclado Teqniche de 102 teclas para proporcionar funcionalidad adicional, lo que genera algunas incompatibilidades. Entre las asignaciones más interesantes se encuentran las siguientes:
| &3FFB | Teclado estándar | b7-b0 sin usar (0) |
| KeyMouse | b6-b0 contador de movimiento horizontal. | |
| &3FFC | KeyMouse | b7-b6 bits altos del contador de movimiento vertical. |
| &3FFD | Todos | b7 siempre establecido; b6 estado actual de SHIFT LOCK |
| los teclados estándar | b3-b0 teclas de cursor, b4 tecla de matriz | |
| KeyMouse | b3-b0 bits bajos del contador de movimiento vertical. | |
| &3FFE | KeyMouse | b7 botón izquierdo, b6 botón derecho. |
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. |
