~~NOTOC~~ ===== 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 [[es:puerto_serie|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 | [[es:puerto_serie|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. |