tech:amstrad:pcw:ioports
This is an old revision of the document!
I/O Ports
| Port (hex) | Direction | Peripheral / Function | Notes |
| 00h | Read/Write | Floppy Disk Controller (uPD765A) - Main Status Register | FDC status register |
| 01h | Read/Write | Floppy Disk Controller (uPD765A) - Data Register | FDC data register |
| 84h | Read | Standalone Centronics (CEN) Port - Status | Bit 0: 1=busy / 0=ready |
| 85h | Write | Standalone Centronics (CEN) Port - Strobe | Write byte to 87h then 85h then 87h to toggle STROBE |
| 87h | Write | Standalone Centronics (CEN) Port - Data | Write data byte here as part of output sequence |
| 9Fh | Read | Kempston Joystick Interface | Bit 4=Fire; Bit 3=Down; Bit 2=Up; Bit 1=Left; Bit 0=Right |
| A0h | Read | AMX Mouse - Vertical Movement (8255 PPI Port A) | Low nibble=moves up; high nibble=moves down |
| A0h | Read | Multilink Network Interface - Control/Status | Bit 1=byte waiting to send; Bit 0=ready to receive |
| A0h | Read/Write | Timatic Winchester / SASI (NCR 5380) - SCSI Data | Also used by ASD PCWHD10/20 as Data register (see A0h conflict) |
| A0h | Read/Write | ASD PCWHD10/PCWHD20 - Data Register | Conflicts with Timatic and AMX Mouse |
| A1h | Read | AMX Mouse - Horizontal Movement (8255 PPI Port B) | Low nibble=moves right; high nibble=moves left |
| A1h | Read/Write | Timatic Winchester / SASI (NCR 5380) - Initiator Command Register | Also used by ASD PCWHD10/20 as Error/Features |
| A1h | Read/Write | ASD PCWHD10/PCWHD20 - Error / Features | Conflicts with Timatic |
| A2h | Read/Write | AMX Mouse - Button State & Reset (8255 PPI Port C) | Input: bits 0-2=button states; Output: write FFh then 0 to reset |
| A2h | Read/Write | Timatic Winchester / SASI (NCR 5380) - Mode Register | Also used by ASD PCWHD10/20 as Sector Count |
| A2h | Read/Write | ASD PCWHD10/PCWHD20 - Sector Count | Conflicts with Timatic |
| A3h | Write | AMX Mouse - PPI Mode Register | Write 93h at startup for basic I/O mode |
| A3h | Read/Write | Timatic Winchester / SASI (NCR 5380) - Target Command Register | Also used by ASD PCWHD10/20 as Sector Number |
| A3h | Read/Write | ASD PCWHD10/PCWHD20 - Sector Number | Conflicts with Timatic |
| A4h | Read/Write | Timatic Winchester / SASI (NCR 5380) - SCSI Bus Status / Select Register | Also used by ASD PCWHD10/20 as Cylinder Low |
| A4h | Read/Write | ASD PCWHD10/PCWHD20 - Cylinder Low | Conflicts with Timatic |
| A5h | Read/Write | Timatic Winchester / SASI (NCR 5380) - Bus and Status Register | Also used by ASD PCWHD10/20 as Cylinder High |
| A5h | Read/Write | ASD PCWHD10/PCWHD20 - Cylinder High | Conflicts with Timatic |
| A6h | Read | Electric Studio Light Pen - Position Low 8 Bits | 12-bit position counter low byte |
| A6h | Read/Write | Multilink Network Interface - Data | Read/write data byte |
| A6h | Read/Write | Timatic Winchester / SASI (NCR 5380) - Start DMA Target Receive / Input Data | Not used by PCW; also used by ASD PCWHD10/20 as Drive/Head |
| A6h | Read/Write | ASD PCWHD10/PCWHD20 - Drive / Head | Conflicts with Timatic and Light Pen and Multilink |
| A7h | Read | Electric Studio Light Pen - Position High 4 Bits + Retrace Flags | Bits 6=V.Retrace; Bit 5=H.Retrace; Bits 3-0=high 4 bits of position |
| A7h | Read/Write | Multilink Network Interface - Data (alternate) | Used alongside A6h |
| A7h | Read/Write | Timatic Winchester / SASI (NCR 5380) - Start DMA Initiator Receive / Reset Parity | Not used by PCW; also used by ASD PCWHD10/20 as Status/Command |
| A7h | Read/Write | ASD PCWHD10/PCWHD20 - Status / Command | Conflicts with Timatic and Light Pen and Multilink |
| A8h | Read/Write | Cirtech Gem (XTA) - Data Register | XTA hard drive interface; ATA variant maps A8h-AFh |
| A8h | Read/Write | Cirtech Gem (ATA) - Data | ATA variant |
| A9h | Read | Cirtech Gem (XTA) - Controller Status | Also: Write=Reset controller |
| A9h | Read/Write | Cirtech Gem (ATA) - Error / Features | ATA variant |
| A9h | Read | DKTronics Sound Generator - Read Selected AY-3-8912 Register | Read currently selected register |
| AAh | Read/Write | Cirtech Gem (XTA) - Controller DIP Switches / Generate Controller-Select Pulse | Read=DIP switches; Write=select pulse |
| AAh | Read/Write | Cirtech Gem (ATA) - Sector Count | ATA variant |
| AAh | Write | DKTronics Sound Generator - Select AY-3-8912 Register | Write register number to select it |
| ABh | Write | Cirtech Gem (XTA) - DMA and Interrupt Mask | Not used on PCW |
| ABh | Read/Write | Cirtech Gem (ATA) - Sector Number | ATA variant |
| ABh | Write | DKTronics Sound Generator - Write to Selected AY-3-8912 Register | Write value to selected register |
| ACh | Read/Write | Cirtech Gem (ATA) - Cylinder Low | ATA variant only |
| ADh | Read/Write | Cirtech Gem (ATA) - Cylinder High | ATA variant only |
| AEh | Read/Write | Cirtech Gem (ATA) - Drive / Head | ATA variant only |
| AFh | Read/Write | Cirtech Gem (ATA) - Status / Command | ATA variant only |
| D0h | Read | Kempston Mouse - X Position | 0-255; also readable at D2h |
| D1h | Read | Kempston Mouse - Y Position | 0-255; also readable at D3h |
| D2h | Read | Kempston Mouse - X Position (mirror) | Same value as D0h |
| D3h | Read | Kempston Mouse - Y Position (mirror) | Same value as D1h |
| D4h | Read | Kempston Mouse - Button State | Bit 0=Left; Bit 1=Right; 0=pressed |
| DFh | Read | MasterScan Optical Scanner | Bit 0: 0=light; 1=dark |
| E0h | Read | Spectravideo Joystick Interface | Bit 4=Right; Bit 3=Up; Bit 2=Left; Bit 1=Fire; Bit 0=Down |
| E0h | Read | Cascade (JoyceStick) Joystick Interface | Bit 7=Fire; Bit 4=Up; Bit 2=Down; Bit 1=Right; Bit 0=Left; conflicts with Spectravideo |
| E0h | Read/Write | CPS8256 - DART Channel A Data | Serial/comms interface |
| E1h | Read/Write | CPS8256 - DART Channel A Control | |
| E2h | Read/Write | CPS8256 - DART Channel B Data | |
| E3h | Read/Write | CPS8256 - DART Channel B Control / CEN Port Status & Control | Also used as CPS8256 CEN port: write 10h to select status mode; bit 5=printer ready |
| E4h | Read/Write | CPS8256 - 8253 Counter 0 | Used for baud rate setting (transmit) |
| E5h | Read/Write | CPS8256 - 8253 Counter 1 | Used for baud rate setting (receive) |
| E7h | Write | CPS8256 - 8253 Write Mode Word | Write mode byte here (e.g. 36h or 76h for baud rate) |
| E8h | Write | CPS8256 CEN Port - Data Output | Write character to this port before toggling STROBE via E3h |
| E9h | Read/Write | ProScan Interface - Base Port | Interface for Naksha hand scanner / fax |
| EAh | Read/Write | ProScan Interface - Fax Device Select (FX1) | Select fax as image source |
| EBh | Read/Write | ProScan Interface - Fax Device Select (FX2) | Select fax (second type) as image source |
| ECh | Read/Write | ProScan Interface - Hand Scanner Select | Select hand scanner as image source |
| EDh | Read/Write | ProScan Interface - Unknown Device Select | Possibly a second type of hand scanner |
| EFh | Read/Write | ProScan Interface - Upper Bound Port | Upper port of ProScan range |
| F0h | Write | Memory Management - Bank Select for 0000h-3FFFh | PCW paging: bit 7=1; bits 6-0=block number |
| F1h | Write | Memory Management - Bank Select for 4000h-7FFFh | PCW paging |
| F2h | Write | Memory Management - Bank Select for 8000h-BFFFh | PCW paging |
| F3h | Write | Memory Management - Bank Select for C000h-FFFFh | PCW paging |
| F4h | Write | CPC Paging Mode - Lock Register | Bits lock memory ranges from being read from alternate block; not used by CP/M or LocoScript |
| F4h | Read | Timer Counter | Bottom 4 bits: counter incremented by timer interrupt (0-15); reading resets it |
| F5h | Write | Video Controller - Roller-RAM Address | Bits 7-0 specify block and offset / 512 |
| F6h | Write | Video Controller - Vertical Scroll Origin | Specifies which Roller-RAM line is at top of screen |
| F7h | Write | Video Controller - Display Control | Bit 7=inverse video; Bit 6=screen on/off |
| F8h | Write | System Control Port | Multi-function: video enable/disable; FDC interrupt mode; boot sequence end (value 0 ends boot) |
| F8h | Read | System Control Port - Status | Bit 6=frame flyback; Bit 5=FDC interrupt pending; Bit 4=60Hz PCW flag |
| F9h | Read | Prototype Serial Interface (IM6403 UART) - Status Register | Only on prototype PCW; not on production hardware |
| FCh | Read | PCW8256/8512/9256/10 Dot-Matrix Printer Controller - Error Status | Returns controller error number |
| FCh | Write | PCW8256/8512/9256/10 Dot-Matrix Printer Controller - Command Port | Used to send commands during reset; also 00FCh and 01FCh used by PCW9512 |
| FDh | Read | PCW8256/8512/9256/10 Dot-Matrix Printer Controller - Printer Status | Bit 7=bail bar; Bit 6=command done; Bit 1=busy; Bit 0=fault; also used by PCW9512 at 00FDh |
| FDh | Write | PCW8256/8512/9256/10 Dot-Matrix Printer Controller - Command/Data Port | Sends printer commands during normal operation |
| FEh | Read/Write | LocoLink Parallel Transfer Interface | Bit 1=Data 1 (input) / ACK (output); Bit 0=Data 0 (input) / BUSY (output) |
| FEh | Read/Write | Prototype Serial Interface (IM6403 UART) - Data Register | Only on prototype PCW; not on production hardware; conflicts with LocoLink |
| FFh | Read/Write | PCW Linkit Parallel Transfer Interface | Two-bit communication channel; value read is binary inverse of value written by other PCW |
The above information is derived from John Elliott's excellent PCW Hardware manual. Please note that the hard drive, and SCA Mark 2 Interface information have not been verified.
tech/amstrad/pcw/ioports.1781913179.txt.gz · Last modified: by pollito
