| Both sides previous revisionPrevious revision | |
| tech:amstrad:pcw:ioports [2026/06/19 23:52] – pollito | tech:amstrad:pcw:ioports [2026/06/19 23:57] (current) – pollito |
|---|
| |85h |Write |Standalone Centronics (CEN) Port - Strobe |Write byte to 87h then 85h then 87h to toggle STROBE | | |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 | | |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 | | |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 |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 |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|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 | | |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 |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|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 | | |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|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|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 | | |A2h |Read/Write|ASD PCWHD10/PCWHD20 - Sector Count |Conflicts with Timatic | |
| |A6h |Read |Electric Studio Light Pen - Position Low 8 Bits |12-bit position counter low byte | | |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|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|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 | | |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 |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|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|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 | | |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 (XTA) - Data Register |XTA hard drive interface, ATA variant maps A8h-AFh | |
| |A8h |Read/Write|Cirtech Gem (ATA) - Data |ATA variant | | |A8h |Read/Write|Cirtech Gem (ATA) - Data |ATA variant | |
| |A9h |Read |Cirtech Gem (XTA) - Controller Status |Also: Write=Reset controller | | |A9h |Read |Cirtech Gem (XTA) - Controller Status |Also: Write=Reset controller | |
| |A9h |Read/Write|Cirtech Gem (ATA) - Error / Features |ATA variant | | |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 | | |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 (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 |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 | | |AAh |Write |DKTronics Sound Generator - Select AY-3-8912 Register |Write register number to select it | |
| |AEh |Read/Write|Cirtech Gem (ATA) - Drive / Head |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 | | |AFh |Read/Write|Cirtech Gem (ATA) - Status / Command |ATA variant only | |
| |D0h |Read |Kempston Mouse - X Position |0-255; also readable at D2h | | |D0h |Read |Kempston Mouse - X Position |0-255, also readable at D2h | |
| |D1h |Read |Kempston Mouse - Y Position |0-255; also readable at D3h | | |D1h |Read |Kempston Mouse - Y Position |0-255, also readable at D3h | |
| |D2h |Read |Kempston Mouse - X Position (mirror) |Same value as D0h | | |D2h |Read |Kempston Mouse - X Position (mirror) |Same value as D0h | |
| |D3h |Read |Kempston Mouse - Y Position (mirror) |Same value as D1h | | |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 | | |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 | | |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 |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 |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 | | |E0h |Read/Write|CPS8256 - DART Channel A Data |Serial/comms interface | |
| |E1h |Read/Write|CPS8256 - DART Channel A Control | | | |E1h |Read/Write|CPS8256 - DART Channel A Control | | |
| |E2h |Read/Write|CPS8256 - DART Channel B Data | | | |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 | | |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) | | |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) | | |E5h |Read/Write|CPS8256 - 8253 Counter 1 |Used for baud rate setting (receive) | |
| |EDh |Read/Write|ProScan Interface - Unknown Device Select |Possibly a second type of hand scanner | | |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 | | |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 | | |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 | | |F1h |Write |Memory Management - Bank Select for 4000h-7FFFh |PCW paging | |
| |F2h |Write |Memory Management - Bank Select for 8000h-BFFFh |PCW paging | | |F2h |Write |Memory Management - Bank Select for 8000h-BFFFh |PCW paging | |
| |F3h |Write |Memory Management - Bank Select for C000h-FFFFh |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 |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 | | |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 | | |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 | | |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 | | |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 |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 | | |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 | | |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 |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 | | |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 |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 | | |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|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 | | |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 | | |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 [[https://www.seasip.info/Unix/Joyce/hardware.pdf|PCW Hardware manual]]. Please note that the hard drive, and SCA Mark 2 Interface information have not been verified. | The above information is derived from John Elliott's excellent [[https://www.seasip.info/Unix/Joyce/hardware.pdf|PCW Hardware manual]]. Please note that the hard drive, and SCA Mark 2 Interface information have not been verified. |