en:hardware_guide
Diferencias
Muestra las diferencias entre dos versiones de la página.
| en:hardware_guide [2026/04/26 06:41] – creado jesus | en:hardware_guide [2026/04/26 06:47] (actual) – jesus | ||
|---|---|---|---|
| Línea 5: | Línea 5: | ||
| <WRAP justify> | <WRAP justify> | ||
| - | This is an incomplete hardware guide for the original Amstrad PCW series: 8256/8512, 9256/9512 and 10. It does not cover the PCW16. | + | 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 " | + | Sources include " |
| Richard Fairhurst, 1996-1997 | Richard Fairhurst, 1996-1997 | ||
| Línea 15: | Línea 15: | ||
| <WRAP justify> | <WRAP justify> | ||
| - | The PCW operating system is CP/M, which is composed | + | The PCW operating system is CP/M, which consists |
| 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 **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/ | + | The **BIOS** (Basic Input/ |
| - | 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. | + | Also relevant is the **CCP** (Console Command Processor), the interface that accepts commands entered at the A> prompt. The CP/M implementation on the PCW 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. | 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. | ||
| Línea 28: | Línea 28: | ||
| **I/O PORTS** | **I/O PORTS** | ||
| - | * **__External | + | * **__External |
| <WRAP box> | <WRAP box> | ||
| - | | &00 | I | FDC status register | + | | &00 | I | FDC Status Register |
| - | | &01 | I/O | FDC data register | + | | &01 | I/O | FDC Data Register |
| - | |& | + | |& |
| | &9F | I | Kempston Joystick | | | &9F | I | Kempston Joystick | | ||
| | &A0 | I | AMX Mouse. Vertical movement: b0-3 4-bit up counter, b4-7 down counter. | | | &A0 | I | AMX Mouse. Vertical movement: b0-3 4-bit up counter, b4-7 down counter. | | ||
| Línea 40: | Línea 40: | ||
| | &A2 | I | AMX Mouse. Button states: b2 right, b1 middle, b0 left (0 if pressed, 1 if not). | | | &A2 | I | AMX Mouse. Button states: b2 right, b1 middle, b0 left (0 if pressed, 1 if not). | | ||
| | & | | & | ||
| - | | & | + | | & |
| - | | & | + | | & |
| | & | | & | ||
| - | | &DF | I | MasterScan: | + | | &DF | I | MasterScan: ink b0 under the scan head. | |
| - | | &E0 | I | Cascade/ | + | | &E0 | I | Cascade/ |
| - | | & | + | | & |
| </ | </ | ||
| - | * **__Internal | + | * **__Internal |
| <WRAP box> | <WRAP box> | ||
| - | | &F0 | W | Select bank for &0000 | | + | | &F0 | OUT | Select bank for &0000 | |
| - | | &F1 | W | Select bank for &4000 | | + | | &F1 | OUT | Select bank for &4000 | |
| - | | &F2 | W | Select bank for &8000 | | + | | &F2 | OUT | Select bank for &8000 | |
| - | | &F3 | W | Select bank for & | + | | &F3 | OUT | Select bank for & |
| - | | &F4 | W | b7-b4: when set, forces memory reads to access the same bank as writes for &C000, &0000, &8000 and &4000 respectively | | + | | &F4 | OUT | 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 & | + | | &F4 | I | Same as & |
| - | | &F5 | W | Roller RAM address. b7-5: bank (0-7). b4-1: address / 512. | | + | | &F5 | OUT | Roller RAM address. b7-5: bank (0-7). b4-1: address / 512. | |
| - | | &F6 | W | Vertical screen position | | + | | &F6 | OUT | Vertical screen position | |
| - | | &F7 | W | b7: reverse | + | | &F7 | OUT | b7: inverse |
| - | | &F8 | W | 0 end boot, 1 reset, 2/3/4 connect FDC to NMI/ | + | | &F8 | OUT | 0 end boot, 1 reset, 2/3/4 connect FDC to NMI/ |
| - | | &F8 | I | b6: 1-line | + | | &F8 | I | b6: 1-line |
| | & | | & | ||
| | &FC | I/O | Dot matrix printer data | | | &FC | I/O | Dot matrix printer data | | ||
| - | | &FD | W | Dot matrix printer commands | | + | | &FD | OUT | Dot matrix printer commands | |
| | &FD | I | Dot matrix printer status. b7 safety bar (0 out), b2 paper found. | | | &FD | I | Dot matrix printer status. b7 safety bar (0 out), b2 paper found. | | ||
| </ | </ | ||
| <WRAP justify> | <WRAP justify> | ||
| - | 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 | + | 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 |
| </ | </ | ||
| Línea 76: | Línea 76: | ||
| <WRAP justify> | <WRAP justify> | ||
| - | 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. | + | Interrupts occur 300 times per second, or 6 times per frame (as in the CPC), at 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 both times 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 | + | The PCW clock speed is 3.4 MHz, lower than a 4 MHz CPU. However, video hardware access slows down memory access to the first 128k (banks 0-7). The BIOS interrupt is also slow and should be disabled for time-critical operations where tasks such as keyboard scanning |
| </ | </ | ||
| Línea 96: | Línea 96: | ||
| | | & | | | & | ||
| |3| & | |3| & | ||
| - | | | & | + | | | & |
| |4| & | |4| & | ||
| | | & | | | & | ||
| Línea 104: | Línea 104: | ||
| | | & | | | & | ||
| |8| & | |8| & | ||
| - | |9-16| & | + | |9-16| & |
| </ | </ | ||
| <WRAP justify> | <WRAP justify> | ||
| - | Roller RAM and screen memory can be stored in any of banks 0 to 7. Therefore, | + | Roller RAM and screen memory can be stored in any of the banks 0 to 7. Therefore, |
| Any bank can be mapped into any of the four 16k segments of the Z80 address space via ports & | Any bank can be mapped into any of the four 16k segments of the Z80 address space via ports & | ||
| Línea 123: | Línea 123: | ||
| <WRAP justify> | <WRAP justify> | ||
| - | By sending the bank number (with b7 set) to one of the ports & | + | By sending the bank number (with b7 set) to one of the ports & |
| As an example of read/write access, to map bank 5 into memory from &4000, you would use ld a,&85: out (& | As an example of read/write access, to map bank 5 into memory from &4000, you would use ld a,&85: out (& | ||
| Línea 131: | Línea 131: | ||
| <WRAP justify> | <WRAP justify> | ||
| - | La pantalla | + | 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 of each line is stored in a 512-byte memory area known as Roller |
| - | 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): | + | Each line has a length |
| - | </ | + | |
| - | + | ||
| - | (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** | + | |
| - | + | ||
| - | <WRAP justify> | + | |
| - | 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 & | + | |
| - | </ | + | |
| - | + | ||
| - | <WRAP box> | + | |
| - | | 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 | | + | |
| - | </ | + | |
| - | + | ||
| - | <WRAP justify> | + | |
| - | Los bytes & | + | |
| - | </ | + | |
| - | + | ||
| - | <WRAP box> | + | |
| - | | &3FFB | Teclado estándar | b7-b0 sin usar (0) | | + | |
| - | | | KeyMouse | + | |
| - | | &3FFC | KeyMouse | + | |
| - | | &3FFD | Todos | b7 siempre establecido; | + | |
| - | | | los teclados estándar | b3-b0 teclas de cursor, b4 tecla de matriz | | + | |
| - | | | KeyMouse | + | |
| - | | &3FFE | KeyMouse | + | |
| - | </ | + | |
| - | + | ||
| - | <WRAP justify> | + | |
| - | The PCW screen on 50Hz (non-US) models has a resolution of 90 x 32 characters or 720 x 256 pixels. | + | |
| - | + | ||
| - | 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): | + | |
| </ | </ | ||
| Línea 199: | Línea 150: | ||
| <WRAP justify> | <WRAP justify> | ||
| - | The PCW keyboard is mapped directly to the last 16 bytes of bank 3, even with interrupts disabled. Each key is reflected | + | The PCW keyboard is mapped directly to the last 16 bytes of bank 3, even with interrupts disabled. Each key is reflected |
| </ | </ | ||
| Línea 205: | Línea 156: | ||
| | b7: | k2 k1 [+] . , space VXZ del< alt | | | b7: | k2 k1 [+] . , space VXZ del< alt | | ||
| - | | b6: | k3 k5 1/2 / MNBC shift lock k. | | + | | b6: | k3 k5 1/2 / MNBC k. lock | |
| | b5: | k6 k4 shift ; KJFDA enter | | | b5: | k6 k4 shift ; KJFDA enter | | ||
| | b4: | k9 k8 k7 ¤ LHGS tab f8 | | | b4: | k9 k8 k7 ¤ LHGS tab f8 | | ||
| Línea 216: | Línea 167: | ||
| <WRAP justify> | <WRAP justify> | ||
| - | Bytes & | + | Bytes & |
| </ | </ | ||
| Línea 223: | Línea 174: | ||
| | &3FFB | Standard keyboard | b7-b0 unused (0) | | | &3FFB | Standard keyboard | b7-b0 unused (0) | | ||
| | | KeyMouse | | | KeyMouse | ||
| - | | &3FFC | KeyMouse | + | | &3FFC | KeyMouse |
| | &3FFD | All | b7 always set; b6 current state of SHIFT LOCK | | | &3FFD | All | b7 always set; b6 current state of SHIFT LOCK | | ||
| | | standard keyboards | b3-b0 cursor keys, b4 matrix key | | | | standard keyboards | b3-b0 cursor keys, b4 matrix key | | ||
| - | | | KeyMouse | + | | | KeyMouse |
| - | | &3FFE | KeyMouse | + | | &3FFE | KeyMouse |
| </ | </ | ||
| - | |||
| - | |||
en/hardware_guide.1777185714.txt.gz · Última modificación: por jesus
