{{keywords>amstrad,pcw,hardware,io,address,memory}} ====== 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 [[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.