This is a list of all known I/O ports of the Amstrad CPC, including all Peripherals. For a list showing only the built-in standard addresses see Default I/O Port Summary.
I/O Port Summary
I/O | Decoded as | Port | Read | Write |
#1C00 | %x0xxxx00 xxxxxxxx | Dk'tronics Lightpen faulty mirror of #BCXX CRTC Index | - | Write |
#1F00 | %x0xxxx11 xxxxxxxx | Dk'tronics Lightpen faulty mirror of #BFXX CRTC Data In | Read | - |
#78XX | ? | 4Mb Memory extension | - | Write |
#79XX | ? | 4Mb Memory extension | - | Write |
#7AXX | ? | 4Mb Memory extension | - | Write |
#7BXX | ? | 4Mb Memory extension | - | Write |
#7CXX | ? | 4Mb Memory extension | - | Write |
#7CXX | %0xxxxx00 xxxxxxxx | Aleste 520EX RAM Mapper page 0 (extended "Gate Array 3") | Read | Write |
#7DXX | ? | 4Mb Memory extension | - | Write |
#7DXX | %0xxxxx01 xxxxxxxx | Aleste 520EX RAM Mapper page 1 (extended "Gate Array 3") | Read | Write |
#7EXX | ? | 4Mb Memory extension | - | Write |
#7EXX | %0xxxxx10 xxxxxxxx | Aleste 520EX RAM Mapper page 2 (extended "Gate Array 3") | Read | Write |
#7FXX | ? | 4Mb Memory extension | - | Write |
#7FXX | %0xxxxx11 xxxxxxxx | Aleste 520EX RAM Mapper page 3 (extended "Gate Array 3") | Read | Write |
#7FXX | ? | Dk'tronics memory expansion | - | Write |
#7FXX | ? | Dobbertin Memory Expansion | - | Write |
#7FXX | %01xxxxxx xxxxxxxx | Gate Array | - | Write |
#7FXX | %0xxxxxxx xxxxxxxx | PAL extension to Gate Array for 128K RAM banking | - | Write |
#BCXX | %x0xxxx00 xxxxxxxx | 6845 CRTC Index | - | Write |
#BDXX | %x0xxxx01 xxxxxxxx | 6845 CRTC Data Out | - | Write |
#BEXX | %x0xxxx10 xxxxxxxx | 6845 CRTC Status (as far as supported) | Read | - |
#BFXX | %x0xxxx11 xxxxxxxx | 6845 CRTC Data In (as far as supported) | Read | - |
#DFXX | %xx0xxxxx xxxxxxxx | Upper ROM Bank Number (as decoded within CPC664, CPC6128, 464+, 6128+, decoding in ROM expansions may be different) | - | Write |
#ECXX | %xxx0xx00 xxxxxxxx | KC Compact CIO Port B (timer) | Read | Write |
#EDXX | %xxx0xx01 xxxxxxxx | KC Compact CIO Port C (timer) | Read | Write |
#EEXX | %xxx0xx10 xxxxxxxx | KC Compact CIO Control | Read | Write |
#EEXX | %xxx0xxx0 xxxxxxxx | Aleste 520EX USART 8251 (RS232/Mouse) Data | Read | Write |
#EFXX | %xxx0xx11 xxxxxxxx | KC Compact CIO Port A (Bi-drectional Printer Port) | Read | Write |
#EFXX | %xxx0xxx1 xxxxxxxx | Aleste 520EX USART 8251 (RS232/Mouse) Control/Status | Read | Write |
#EFXX | %xxx0xxxx xxxxxxxx | Printer Port | - | Write |
#F0E0 | ? | Draysoft Doubler External Tape Data Input (Bit5) | Read | - |
#F4XX | %xxxx0x00 xxxxxxxx | 8255 PIO Port A (PSG Data) | Read | Write |
#F5XX | %xxxx0x01 xxxxxxxx | 8255 PIO Port B (Vsync,PrnBusy,Tape,etc.) | Read | - |
#F6XX | %xxxx0x10 xxxxxxxx | 8255 PIO Port C (KeybRow,Tape,PSG Control) | - | Write |
#F7XX | %xxxx0x11 xxxxxxxx | 8255 PIO Control-Register | - | Write |
#F8B0 | ? | Vidi-CPC Video-Digitiser, CRTC Index | ? | Write |
#F8B1 | ? | Vidi-CPC Video-Digitiser, CRTC Data | ? | Write |
#F8DC | ? | CPCI Serial Interface MC6850 Control/Status | Read | Write |
#F8DD | ? | CPCI Serial Interface MC6850 Data | Read | Write |
#F8E0 | ? | DHCP MIDI Interface | Read | Write |
#F8E0 | %11111000 11100000 | Schneider RS232 Interface Z80-STI Indirect Data Register | Read | Write |
#F8E1 | %11111000 11100001 | Schneider RS232 Interface Z80-STI General Purpose I/O Data Register | Read | Write |
#F8E2 | %11111000 11100010 | Schneider RS232 Interface Z80-STI Interrupt Pending Register B (unused) | Read | Write |
#F8E2 | ? | Dobbertin Eprommer 4003 | ? | ? |
#F8E3 | %11111000 11100011 | Schneider RS232 Interface Z80-STI Interrupt Pending Register A (unused) | Read | Write |
#F8E3 | ? | Dobbertin Eprommer 4003 | ? | ? |
#F8E4 | %11111000 11100100 | Schneider RS232 Interface Z80-STI Interrupt in-Service Register B (unused) | Read | Write |
#F8E4 | ? | Dobbertin Eprommer 4003 | ? | ? |
#F8E5 | %11111000 11100101 | Schneider RS232 Interface Z80-STI Interrupt in-Service Register A (unused) | Read | Write |
#F8E6 | %11111000 11100110 | Schneider RS232 Interface Z80-STI Interrupt Mask Register B (unused) | Read | Write |
#F8E6 | ? | Port A - IDE8255 | ? | ? |
#F8E7 | %11111000 11100111 | Schneider RS232 Interface Z80-STI Interrupt Mask Register A (unused) | Read | Write |
#F8E7 | ? | Port C - IDE8255 | ? | ? |
#F8E8 | %11111000 11101000 | Schneider RS232 Interface Z80-STI Indirect Index and Interrupt Vector Register | Read | Write |
#F8E8 | ? | Music Machine Interrupt Sel | - | Write |
#F8E9 | %11111000 11101001 | Schneider RS232 Interface Z80-STI Timers A and B Control Register (unused) | Read | Write |
#F8EA | %11111000 11101010 | Schneider RS232 Interface Z80-STI Timer B Data Register (unused) | Read | Write |
#F8EB | %11111000 11101011 | Schneider RS232 Interface Z80-STI Timer A Data Register (unused) | Read | Write |
#F8EC | %11111000 11101100 | Schneider RS232 Interface Z80-STI USART Control Register | Read | Write |
#F8EC | ? | Music Machine ACIA Control | - | Write |
#F8ED | ? | Music Machine ACIA Data Write | - | Write |
#F8ED | %11111000 11101101 | Schneider RS232 Interface Z80-STI Receiver Status Register | Read | Write |
#F8EE | ? | Music Machine ACIA Status | Read | - |
#F8EE | %11111000 11101110 | Schneider RS232 Interface Z80-STI Transmitter Status Register | Read | Write |
#F8EF | %11111000 11101111 | Schneider RS232 Interface Z80-STI USART Data Register | Read | Write |
#F8EF | ? | Music Machine ACIA Data Read | Read | - |
#F8FX | %xxxxx0xx 1111NNNx | Maplins 8bit Input Port and Maplins Weather Satellite Receiver | Read | - |
#F8F0 | ? | Music Machine DAC Write | - | Write |
#F8F2 | ? | EMR MIDI Interface | - | Write |
#F8F2 | ? | Dobbertin Eprommer 4003 | ? | ? |
#F8F4 | ? | Music Machine ADC Read | Read | - |
#F8F5 | ? | ARA Video Digitizer - Read Sync Signal (bit0) | Read | - |
#F8F8 | ? | Music Machine ADC Start | - | Write |
#F8FF | %1111100x 111xxxxx | CPCISA control port | - | Write |
#F8FF | N/A | Peripheral Soft Reset (MC_BOOT_PROGRAM and MC_START_PROGRAM do OUT [F8FF],FF) | - | Write |
#F9B0 | ? | Vidi-CPC Video-Digitiser, Config (W) and Capture Data (R) | Read | Write |
#F9DC | ? | Panda Electronics Communications Interface Unit PPI Port A - 8bit Printer data | Read | Write |
#F9DD | ? | Panda Electronics Communications Interface Unit PPI Port B - 8bit general purpose I/O port | Read | Write |
#F9DE | ? | Panda Electronics Communications Interface Unit PPI Port C - Handshake (bit0=Strobe.out, Bit5=Busy.in) | Read | Write |
#F9DF | ? | Panda Electronics Communications Interface Unit PPI Control - 8bit Printer data | - | Write |
#F9E6 | ? | Port B - IDE8255 | ? | ? |
#F9E7 | ? | RS Port - IDE8255 | ? | ? |
#F9F5 | ? | ARA Video Digitizer - Reset 10bit Config Value | - | Write |
#F9F7 | ? | Hegotron grafpad II | ? | ? |
#F9FC - #F9FE | ? | Otten & Fecht 1 MB RAM-Disc | Read | Write |
#F9FF | ? | Hegotron grafpad II | ? | ? |
#FA7E | %xxxxx0x0 0xxxxxxx | Floppy Motor Control (for 765 FDC) | - | Write |
#FABC | %xxxxx0x0 10xxxx00 | Aleste 520EX EXTPORT with CS53: Forward PPI Port A to 8253 Timer 0 | - | Write |
#FABD | %xxxxx0x0 10xxxx01 | Aleste 520EX EXTPORT with CS53: Forward PPI Port A to 8253 Timer 1 | - | Write |
#FABE | %xxxxx0x0 10xxxx10 | Aleste 520EX EXTPORT with CS53: Forward PPI Port A to 8253 Timer 2 | - | Write |
#FABF | %xxxxx0x0 10xxxx11 | Aleste 520EX EXTPORT with CS53: Forward PPI Port A to 8253 Control | - | Write |
#FABF | %xxxxx0x0 10xxxxxx | Aleste 520EX EXTPORT (config for internal hardware) | - | Write |
#FADC | ? | Amstrad Serial Interface Z80-SIO / DART port A Data Register | Read | Write |
#FADC | ? | MHT Ingenieros RS232 para Amstrad 8251 USART data | Read | Write |
#FADD | ? | Amstrad Serial Interface Z80-SIO / DART port A Control Reg. | Read | Write |
#FADD | ? | MHT Ingenieros RS232 para Amstrad 8251 USART control/status | Read | Write |
#FADE | ? | Amstrad Serial Interface Z80-SIO / DART port B Data Register | Read | Write |
#FADF | ? | Amstrad Serial Interface Z80-SIO / DART port B Control Reg. | Read | Write |
#FADF | ? | Cirkit serial interface 8251 UART data register | Read | Write |
#FAE6 | ? | Port A - IDE8255 | ? | ? |
#FAE7 | ? | Port C - IDE8255 | ? | ? |
#FAEE | ? | Amstrad SSA-1 Speech Synthesizer (faulty mirror used by included RSX driver) | Read | Write |
#FAEF | ? | Kempston Mouse - Mouse Buttons | Read | - |
#FAF5 | ? | ARA Video Digitizer - Read Capture Data | Read | - |
#FAF5 | ? | ARA Video Digitizer - Increment 10bit Config Value | - | Write |
#FB7E | %xxxxx0x1 0xxxxxx0 | 765 FDC (internal) Status Register | Read | - |
#FB7F | %xxxxx0x1 0xxxxxx1 | 765 FDC (internal) Data Register | Read | Write |
#FBBD | ? | Ram select mode Vortex SP512 | ? | Write |
#FBDC | ? | Amstrad Serial Interface 8253 Timer counter 0 | Read | Write |
#FBDC | ? | MHT Ingenieros RS232 para Amstrad 8253 timer 0 (transmit baudrate) | Read | Write |
#FBDD | ? | Amstrad Serial Interface 8253 Timer counter 1 | Read | Write |
#FBDD | ? | MHT Ingenieros RS232 para Amstrad 8253 timer 1 (receive baudrate) | Read | Write |
#FBDE | ? | Amstrad Serial Interface 8253 Timer counter 2 | Read | Write |
#FBDE | ? | MHT Ingenieros RS232 para Amstrad 8253 timer 2 (used as 1ms timer) | Read | Write |
#FBDF | ? | Amstrad Serial Interface 8253 Timer Modus Select | - | Write |
#FBDF | ? | MHT Ingenieros RS232 para Amstrad 8253 timer 0-2 control | - | Write |
#FBDF | ? | Cirkit serial interface 8251 UART status/control register | Read | Write |
#FBxx+0 | ? | CPCI Real Time Clock Index (DIY) | - | Write |
#FBxx+1 | ? | CPCI Real Time Clock Data (DIY) | Read | Write |
#FBE0 | ? | Dk'tronics Real Time Clock - Z80 PIO Port A Data (HD146818P RTC Data bus) | Read | Write |
#FBE0 | ? | Dobbertin Harddisc Data Port | Read | Write |
#FBE1 | ? | Dk'tronics Real Time Clock - Z80 PIO Port B Data (General Purpose 8bit I/O Port) | Read | Write |
#FBE1 | ? | Dobbertin Harddisc Status, Reset | Read | Write |
#FBE2 | ? | Dk'tronics Real Time Clock - Z80 PIO Port A Control | ? | Write |
#FBE2 | ? | Dobbertin Harddisc Select, Configuration | Read | Write |
#FBE3 | ? | Dk'tronics Real Time Clock - Z80 PIO Port B Control | ? | Write |
#FBE3 | ? | Dobbertin Harddisc DMA, Interrupt | Read | Write |
#FBE4 | ? | Dobbertin Harddisc Reset | Read | Write |
#FBE6 | ? | Port B - IDE8255 | ? | ? |
#FBE7 | ? | RS Port - IDE8255 | ? | ? |
#FBE7 | ? | ACU Real Time Clock (DIY) Z80-PIO Data In/Out Port A | Read | Write |
#FBE8 | ? | Dk'tronics Real Time Clock "4bit latch" (details unknown) | ? | Write |
#FBE8 | ? | KDS RS232 8253 Timer0 (RX Clock) | Read | Write |
#FBE9 | ? | KDS RS232 8253 Timer1 (TX Clock) | Read | Write |
#FBEA | ? | KDS RS232 8253 Timer2 (not used) | Read | Write |
#FBEB | ? | KDS RS232 8253 Timer Control | - | Write |
#FBEC | ? | KDS RS232 6850 (reversed bit-order) Control | - | Write |
#FBEC | ? | PDS development system Z80 PIO Port A Data (8bit data to/from PC) | Read | Write |
#FBED | ? | KDS RS232 6850 (reversed bit-order) TX Data | - | Write |
#FBED | ? | PDS development system Z80 PIO Port B Data (handshake to/from PC) | Read | Write |
#FBEE | ? | PDS development system Z80 PIO Port A Control | ? | Write |
#FBEE | ? | Amstrad SSA-1 Speech Synthesizer | Read | Write |
#FBEE | ? | Kempston Mouse - 8bit X position | Read | - |
#FBEE | ? | KDS RS232 6850 (reversed bit-order) Status | Read | - |
#FBEF | ? | PDS development system Z80 PIO Port B Control | ? | Write |
#FBEF | ? | Kempston Mouse - 8bit Y position | Read | - |
#FBEF | ? | KDS RS232 6850 (reversed bit-order) RX Data | Read | - |
#FBEF | ? | ACU Real Time Clock (DIY) Z80-PIO Data In/Out Port B | Read | Write |
#FBF0 - #FBFF | ? | Otten & Fecht 1 MB RAM-Disc | Read | Write |
#FBF0 | %xxxx1011 1111xxxx | AMRAM2 | - | Write |
#FBF0 | %xxxxx011 1111xxx0 | AMSSIO Serial Interface MC6850 Control/Status Register | Read | Write |
#FBF1 | %xxxxx011 1111xxx1 | AMSSIO Serial Interface MC6850 Data Register | Read | Write |
#FBF5 | ? | ARA Video Digitizer - Invoke Video Capture | - | Write |
#FBF6 | ? | Vortex Disc Drives 765 FDC (Vortex,ext) Status Register | Read | - |
#FBF7 | ? | Vortex Disc Drives 765 FDC (Vortex,ext) Data Register | Read | Write |
#FBF7 | ? | ACU Real Time Clock (DIY) Z80-PIO Configure Port A | Read | Write |
#FBF8 | %11111011 11111000 | 8bit Printer Port (Amstrad Action) Strobe/Busy | Read | Write |
#FBF9 | %11111011 11111001 | 8bit Printer Port (Amstrad Action) Data | - | Write |
#FBFE | ? | Magnum Light Phaser | - | Write |
#FBFE | ? | Dart Scanner for DMP-Printers | Read | ? |
#FBFE | ? | Dk'tronics Speech Synthesizer | Read | Write |
#FBFE | ? | TMPI speech synthesizer Data Register | Write | |
#FBFF | ? | TMPI speech synthesizer Command/Status Register | Read | Write |
#FBFF | ? | ACU Real Time Clock (DIY) Z80-PIO Configure Port B | Read | Write |
#FC00 - #FDFF | %1111110x xxxxxxxx | CPCISA 16bits mode high byte latch | Read | Write |
#FC5C | ? | French DIY Dual Port RS232 - Baudrate Selection | - | Write |
#FC7C | ? | French DIY Dual Port RS232 - Z80-SIO Channel A Data | Read | Write |
#FC7D | ? | French DIY Dual Port RS232 - Z80-SIO Channel A Control/Status | Read | Write |
#FC7E | ? | French DIY Dual Port RS232 - Z80-SIO Channel B Data | Read | Write |
#FC7F | ? | French DIY Dual Port RS232 - Z80-SIO Channel B Control/Status | Read | Write |
#FCE6 | ? | Port A - IDE8255 | Read | Write |
#FCE7 | ? | Port C - IDE8255 | Read | Write |
#FD00 - #FD3F | %11111101 00xxxxxx | SYMBiFACE II | Read | Write |
#FDE6 | ? | Port B - IDE8255 | Read | Write |
#FDE7 | ? | RS Port - IDE8255 | Read | Write |
#FE00 - #FFFF | %1111111x xxxxxxxx | CPCISA I/O access (low byte) | Read | Write |
#FEE6 | ? | Port A - IDE8255 | Read | Write |
#FEE7 | ? | Port C - IDE8255 | Read | Write |
#FEE8 | %11111110 1110100x | Multiface II - Enable Multiface II ROM/RAM | - | Write |
#FEEA | %11111110 1110110x | Multiface II - Disable Multiface II ROM/RAM | - | Write |
#FFXX | %11111111 xxxxxxxx | CPC Booster (XX=#00..#28 are used now) | Read | Write |
#FFXX | %11111111 xxxxxxxx | Amdrum (unsigned 8bit DAC) | - | Write |
#FFE6 | ? | Port B - IDE8255 | Read | Write |
#FFE7 | ? | RS Port - IDE8255 | Read | Write |
Memory Mapped I/O Ports
Mem | Decoded as | Port | Read | Write |
#4000-7FFF | %01xxxxxx xxxxxxxx | ASIC - CPC+/GX4000 registers | Read | Write |
#???? | %11xxxxxx xxxxxxx1 | Dobbertin Smart Watch data read (D0=data) | Read | - |
#???? | %11xxxxxx xxxxxDx0 | Dobbertin Smart Watch data write (A2=data) | Read | - |
More Ports
Some more I/O addresses (which aren't included in the above list yet) are here:
Other I/O Ports
A number of peripherals connect to the joystick/printer ports, and so, they do not include "own" I/O addresses. This includes hardware other than joysticks/printers - for example, mice, robots, audio devices, and simple network adapters. For a more complete list, see corresponding sections on Digital Joystick and Printer Port pages.
Aside from I/O addresses, there are some other important I/O signals, for example: NMI or INT.
CPCISA ports for ISA cards
Device | PC I/O range | CPCISA high | CPCISA low |
IDE1 | 1F0h..1F7h | #FDF0..#FDF7 | #FFF0..#FFF7 |
IDE2 | 170h..177h | #FD70..#FD77 | #FF70..#FF77 |
Joystick | 201h..201h | #FC01..#FC01 | #FE01..#FE01 |
Ethernet | 210h..21Fh | #FC10..#FC1F | #FE10..#FE1F |
Sound Blaster | 220h..23Fh | #FC20..#FC3F | #FE20..#FE3F |
LPT2 | 278h..27Fh | #FC78..#FC7F | #FE78..#FE7F |
COM1 | 2F8h..2FFh | #FCF8..#FCFF | #FEF8..#FEFF |
MIDI' | 300h..301h | #FD00..#FD01 | #FF00..#FF01 |
MIDI | 330h..331h | #FD30..#FD31 | #FF30..#FF31 |
Sound control | 370h..371h | #FD70..#FD71 | #FF70..#FF71 |
FDC1 | 372h..377h | #FD72..#FD77 | #FF72..#FF77 |
LPT1 | 378h..37Fh | #FD78..#FD7F | #FF78..#FF7F |
Sound AD-LIB | 388h..38Bh | #FD88..#FD8B | #FF88..#FF8B |
VGA | 3B0h..3BBh | #FDB0..#FDBB | #FFB0..#FFBB |
LPT3 | 3BCh..3BFh | #FDBC..#FDBF | #FFBC..#FFBF |
VGA | 3C0h..3DFh | #FDC0..#FDCF | #FFC0..#FFCF |
FDC1 | 3F2h..3F7h | #FDF2..#FDF7 | #FFF2..#FFF7 |
COM1 | 3F8h..3FFh | #FDF8..#FDFF | #FFF8..#FFFF |
CPCISA ports for ISA motherboard
Device | PC I/O range | CPCISA high | CPCISA low |
DMA | 000h..00Fh | #FC00..#FC0F | #FE00..#FE0F |
interrupt | 020h..03Fh | #FC20..#FC3F | #FE20..#FE3F |
counter | 040h..05Fh | #FC40..#FC5F | #FE40..#FE5F |
keyboard | 060h..067h | #FC60..#FC67 | #FE60..#FE67 |
RTC | 070h..071h | #FC70..#FC71 | #FE70..#FE71 |
DMA | 080h..08Fh | #FC80..#FC8F | #FE80..#FE8F |
DMA | 0C0h..0DFh | #FCC0..#FCDF | #FEC0..#FEDF |
interrupt | 0A0h..0BFh | #FCA0..#FCBF | #FEA0..#FEBF |