Herramientas de usuario

Herramientas del sitio


en:hardware_guide

¡Esta es una revisión vieja del documento!


AMSTRAD PCW HARDWARE REFERENCE GUIDE


This is an incomplete hardware guide for the original Amstrad PCW series: 8256/8512, 9256/9512 and 10. It does not cover the PCW16.

Sources include “Everything you ever wanted to know…” from CP Software, John Elliott, Jacob Nevins (and their excellent web pages), Cliff Lawson (who kindly performed OCR on the original Amstrad documentation), Howard Fisher (who lent me a KeyMouse), Paul Hunt and Kevin Thacker's CPC resource, which contains Z80 and FDC information relevant to the PCW. Thanks, guys. Any additional information is always welcome.

Richard Fairhurst, 1996-1997

INTRODUCTION

The PCW operating system is CP/M, which is composed of two main parts.

The BDOS (Basic Disc Operating System) is the operating system code, written by Digital Research. It should remain virtually the same on any machine running CP/M.

The BIOS (Basic Input/Output System) provides a set of routines that access the machine's hardware and was written in the case of the PCW by Locomotive/Amstrad. The BDOS invokes BIOS routines for all screen, disk and printer operations.

Also relevant is the CCP (Console Command Processor), the interface that accepts commands entered at the A> prompt. The PCW implementation of CP/M only loads it at system startup, so it must not be overwritten.

The TPA (Transient Program Area) is the memory area, starting at &0100 in a 64k address space, where user programs (.COM files) are loaded and executed.

I/O PORTS

  • External hardware/FDC
&00 I FDC status register
&01 I/O FDC data register
&88-&8F Parallel ports
&9F I Kempston Joystick
&A0 I AMX Mouse. Vertical movement: b0-3 4-bit up counter, b4-7 down counter.
&A1 I AMX Mouse. Horizontal movement: b0-3 4-bit right counter, b4-7 left counter.
&A2 I AMX Mouse. Button states: b2 right, b1 middle, b0 left (0 if pressed, 1 if not).
&A0-&A2 EMR MIDI Interface
&A8-&AF Hard disk
&C8-&CF I/O Fax link interface (CPS8256 compatible circuit).
&D0-&D4 Kempston Mouse (similar to AMX)
&DF I MasterScan: b0 ink under the scan head.
&E0 I Cascade/Spectravideo joystick. b4 right, b3 up, b2 left, b1 fire, b0 down.
&E0-&EF I/O Serial ports (click for more info)
  • Internal ports
&F0 W Select bank for &0000
&F1 W Select bank for &4000
&F2 W Select bank for &8000
&F3 W Select bank for &C000. Normally, &87.
&F4 W b7-b4: when set, forces memory reads to access the same bank as writes for &C000, &0000, &8000 and &4000 respectively
&F4 I Same as &F8, with the condition that b3-0 is reset when reading the port. Therefore, read to reactivate interrupts.
&F5 W Roller RAM address. b7-5: bank (0-7). b4-1: address / 512.
&F6 W Vertical screen position
&F7 W b7: reverse video. b6: screen enable.
&F8 W 0 end boot, 1 reset, 2/3/4 connect FDC to NMI/standard interrupts/none, 5/6 set/clear FDC terminal count, 7/8 turn screen on/off (for external video), 9/10 turn disk motor on/off, 11/12 turn beep on/off
&F8 I b6: 1-line return, reading twice in a row indicates frame return. b5: FDC interrupt. b4: indicates 32-line screen. b3-0: 300 Hz interrupt counter: remains at 1111 until reset by in a,(&F4)(see above).
&FC-&FD Parallel port (PCW9512)
&FC I/O Dot matrix printer data
&FD W Dot matrix printer commands
&FD I Dot matrix printer status. b7 safety bar (0 out), b2 paper found.

Unlike the CPC, the PCW uses the standard Z80 method for accessing I/O ports. The port is stored as a (single byte) number in C and an instruction such as out ©,a is used, or it is passed as part of the out (&port),a instruction.

INTERRUPTS/CLOCK SPEED

Interrupts occur 300 times per second, or 6 times per frame (as on the CPC), at the 2 scan lines of the frame flyback and every 52 lines thereafter. Frame flyback can be detected by reading port &F8 twice consecutively. Only if b6 is set each time is the PCW in frame flyback.

The PCW clock speed is 3.4 MHz, lower than a 4 MHz CPU. However, video hardware access slows down memory access up to the first 128k (banks 0-7). The BIOS interrupt is also slow and should be disabled for time-critical operations where tasks like keyboard scanning and disk access are not required.

MEMORY MAP

The PCW 8256 has 16 banks of 16k each. 512k and expanded machines obviously contain more. The default content is:

0 &0000-&3FFF: BIOS, extended jumpblock
1 &0000-&192F: BIOS
&1930-&3FFF: screen
2 &0000-&332F: screen
&3600-&37FF: roller RAM
&3800-&3FFF: character set
3 &0000-&3FEF: BIOS, BDOS
&3FF0-&3FFF: DMA keyboard map
4 &0000-&00FF: workspace and BIOS/BDOS jumps
&0100-&3FFF: TPA
5 &0000-&3FFF: TPA
6 &0000-&3FFF: TPA
7 &0000-&2FFF: common RAM (available for use in all configurations)
&3000-&3FFF: CP/M workspace
8 &0000-&3FFF: CCP, hash tables, data buffers
9-16 &0000-&3FFF: RAM disk (M: drive)

Roller RAM and screen memory can be stored in any of banks 0 to 7. Therefore, video circuitry access requirements slow down access to code/data in these banks.

Any bank can be mapped into any of the four 16k segments of the Z80 address space via ports &F0-&F3. In CP/M, the following (named) configurations are standard:

Screen BDOS (0) Extra (n+2) TPA (1)
&C000 (&F3) 7 common 7 common 7 common 7 common
&8000 (&F2) 2 screen 3 BDOS/BIOS 3 BDOS/BIOS 6 TPA
&4000 (&F1) 1 screen/BIOS 1 screen/BIOS 8+n CCP or M: 5 TPA
&0000 (&F0) 0 BIOS 0 BIOS 0 BIOS 4 TPA

By sending the bank number (with b7 set) to one of the ports &F0-&F3, that bank is selected for reading and writing. By sending the bank number for writing to b0-2 of a port and the bank for reading to b4-b6 (with b7 clear), separate banks are assigned for reading and writing: this can only be used for the first 8 banks.

As an example of read/write access, to map bank 5 into memory from &4000, you would use ld a,&85: out (&F1),a.

SCREEN MEMORY

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.

The PCW screen on 50Hz (non-US) models has a resolution of 90 x 32 characters or 720 x 256 pixels. Each pixel line can start at any address within the first 128 kB of memory: the address for each line is stored in a 512-byte area of memory known as Roller RAM. By default, Roller RAM is located at &3600 (mapped to &B600) in bank 2, but this can be changed via port &F5. It contains 256 consecutive addresses, stored in the usual Z80 format, low byte first: b16-14 control which bank the line is in, b13-3 the address in the bank (in units of 16 bytes), and b2-0 the offset. Thus, a Roller RAM address bbbxxxxxxxxxxxyyy indicates bank bbb, address 00xxxxxxxxxxx0yyy.

Each line is 720 bytes long, not 90. This is because the PCW takes every eighth byte starting from the address indicated by the Roller RAM. In this way, eight screen lines can be interleaved as follows to facilitate character writing (assuming a consecutive Roller RAM layout):

(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)

The vertical position of the screen on the monitor can be altered by increasing or decreasing port &F6.

KEYBOARD MAPPING

The PCW keyboard is mapped directly to the last 16 bytes of bank 3, even with interrupts disabled. Each key is reflected in a bit in bytes &3FF0-&3FFA.

b7: k2 k1 [+] . , space VXZ del< alt
b6: k3 k5 1/2 / MNBC shift lock k.
b5: k6 k4 shift ; KJFDA enter
b4: k9 k8 k7 ¤ LHGS tab f8
b3: paste copy # PIYTWQ [-]
b2: f2 cut return [ OURE stop can
b1: k0 ptr ] - 9 7 5 3 2 extra
b0: f4 exit del> = 0 8 6 4 1 f6
&3FF0 &3FF1 &3FF2 &3FF3 &3FF4 &3FF5 &3FF6 &3FF7 &3FF8 &3FF9 &3FFA

Bytes &3FFB-&3FFF reflect the keyboard differently and incompletely. These bytes are also used by Creative Technology's KeyMouse (in its standard MicroDesign mode) and the Teqniche 102-key keyboard to provide additional functionality, leading to some incompatibilities. Among the most interesting mappings are the following:

&3FFB Standard keyboard b7-b0 unused (0)
KeyMouse b6-b0 horizontal movement counter.
&3FFC KeyMouse b7-b6 high bits of the vertical movement counter.
&3FFD All b7 always set; b6 current state of SHIFT LOCK
standard keyboards b3-b0 cursor keys, b4 matrix key
KeyMouse b3-b0 low bits of the vertical movement counter.
&3FFE KeyMouse b7 left button, b6 right button.
en/hardware_guide.1777185714.txt.gz · Última modificación: por jesus