Last modified on 8 May 2024, at 08:41

I/O Port Summary

Revision as of 08:41, 8 May 2024 by TFM (Talk | contribs) (I/O Port Summary)

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. The original list of I/O ports was taken from the FutureOS handbook.

I/O Port Summary

Note: While most of these devices can be reached via a range of addresses due to the partial address decoding, code should never use any address other than the canonical one (all 'x'/don't care positions filled by 1's). Otherwise multiple devices will be enabled simultaneously, which is unlikely to be what you want.

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 %0xxxx000 xxxxxxxx 4Mb Memory extension - Write
#79XX %0xxxx001 xxxxxxxx 4Mb Memory extension - Write
#7AXX %0xxxx010 xxxxxxxx 4Mb Memory extension - Write
#7BXX %0xxxx011 xxxxxxxx 4Mb Memory extension - Write
#7CXX %0xxxx100 xxxxxxxx 4Mb Memory extension - Write
#7CXX %0xxxxx00 xxxxxxxx Aleste 520EX RAM Mapper page 0 (extended "Gate Array 3") Read Write
#7DXX %0xxxx101 xxxxxxxx 4Mb Memory extension - Write
#7DXX %0xxxxx01 xxxxxxxx Aleste 520EX RAM Mapper page 1 (extended "Gate Array 3") Read Write
#7EXX %0xxxx110 xxxxxxxx 4Mb Memory extension - Write
#7EXX %0xxxxx10 xxxxxxxx Aleste 520EX RAM Mapper page 2 (extended "Gate Array 3") Read Write
#7EXX %0xxxxxx0 xxxxxxxx Y-MEM 512K RAM Expansion part Read Write
#7FXX %0xxxx111 xxxxxxxx 4Mb Memory extension - Write
#7FXX %0xxxxx11 xxxxxxxx Aleste 520EX RAM Mapper page 3 (extended "Gate Array 3") Read Write
#7FXX %0xxxxxx1 xxxxxxxx X-MEM 512K RAM Expansion part Read Write
#7FXX ? Dk'tronics memory expansion - Write
#7FXX ? Dobbertin Memory Expansion - Write
#7FXX %01xxxxxx xxxxxxxx Gate Array - Write
#7FXX %0xxxxxxx xxxxxxxx PAL16L8 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
#F880-#F88F %1111100x 1000xxxx PlayCity Expansion CTC channels and YMZ data - Write
#F890-#F89F %1111100x 1--1xxxx MultiPlay Expansion (mirror port, use #F9xx) Read -
#F8A0-#F8AF %11111000 1010xxxx X-CPC ClockPort RTC Read 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 Read Write
#F8F2 ? EMR MIDI Interface Read Write
#F8F4 ? Music Machine ADC Read Read -
#F8F5 ? ARA Video Digitizer - Read Sync Signal (bit0) Read -
#F8F8 ? Music Machine ADC Start - Write
#F8F8 ? ANTA 64K Memory Expansion ANTA 64k.3 latch Read Write
#F8FE %11111000 11111110 Z-MEM Software Memory Configuration - Write
#F8FF %1111100x 111xxxxx CPCISA control port - Write
#F8FF %xxxxx0xx 111111xx Peripheral Soft Reset (MC_BOOT_PROGRAM and MC_START_PROGRAM do OUT [F8FF],FF) - Write
#F980-#F98F %1111100x 1000xxxx PlayCity Expansion CTC channels (mirror) and YMZ registers - Write
#F990-#F99F %1111100x 1--1xxxx MultiPlay Expansion Read -
#F9A0-#F9AF %11111001 1010xxxx X-CPC ClockPort SPR Read Write
#F9B0 ? Vidi-CPC Video-Digitiser, Config (W) and Capture Data (R) Read Write
#F9D0 %11111000 11010000 SwinSID part of SONIQUE Sound Board WIP by DaDMaN SwinSID1 + SwinSID2 DATA (MONO Mode / 3 Channels) - Write
#F9D1 %11111000 11010001 SwinSID part of SONIQUE Sound Board WIP by DaDMaN SwinSID1 (LEFT) DATA (STEREO Mode / 6 Channels) - Write
#F9D2 %11111000 11010010 SwinSID part of SONIQUE Sound Board WIP by DaDMaN SwinSID2 (RIGHT) DATA (STEREO Mode / 6 Channels) - 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
#FAD0 %11111010 11010000 SwinSID part of SONIQUE Sound Board WIP by DaDMaN Select SID (1&2) Register MONO mode - Write
#FAD1 %11111010 11010001 SwinSID part of SONIQUE Sound Board WIP by DaDMaN Select SID1 Register - Write
#FAD2 %11111010 11010010 SwinSID part of SONIQUE Sound Board WIP by DaDMaN Select SID2 Register - 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 %xxxxx0x0 xxx0xxxx 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 %xxxxx0xx x0xxxx0x 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 ? LambdaSpeak Speech Synthesizer Read Write
#FBEE %xxxxx0x1 xxx0xxx0 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 %xxxxx0x1 xxx0xxx1 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 %xxxxxxxx 11111110 TMPI speech synthesizer Data Register Write
#FBFF %xxxxxxxx 11111111 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
#FC00 ? M4 Board ACK/KICK - 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
#FD08 - #FD0F %11111101 00001xxx X-MASS 2.5" 44-pin IDE interface / DOM / CF adapter (SYMBiFACE II compatible) Read Write
#FD40 - #FD4F %11111101 0100xxxx SYMBiFACE III Read Write
#FD80 - #FD87 %11111101 10000xxx CPC-CPLink - FIFO Interface card for Co-processors, incl. Raspberry Pi Read Write
#FDE6 ? Port B - IDE8255 Read Write
#FDE7 ? RS Port - IDE8255 Read Write
#FE00 ? M4 Board Data - Write
#FE00 - #FFFF %1111111x xxxxxxxx CPCISA I/O access (low byte) Read Write
#FE80 - #FE81 %11111110 1000000x Albireo CH376 controller Read Write
#FE82 %11111110 10000010 Nova RTC & NVRAM - Write
#FE84 - #FEA7 %11111110 10xxx1xx Willy Future use or multi-soundchip - -
#FEAC - #FEAD %11111110 101011xx Willy S2P Dream SAM2965 MIDI synthetizer Read Write
#FEB0 - #FEB7 %11111110 10110xxx Albireo serial port Read Write
#FEBC - #FEBF %11111110 101111xx Willy OPL3 - 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
#FEF0 - #FEF7 %11111110 11110xxx CPC-CompactFlash - IDE registers Read Write
#FEF0 - #FEF7 %11111110 11110xxx uIDE 16 - IDE registers Read Write
#FF00 - #FFFF %11111111 xxxxxxxx AMSDAP (Amstrad MSx aDAPter, MSX-to-CPC I/O hardware interface (MSX ports #00-#ff) Read Write
#FF20 - #FF27 %11111111 00100xxx MP3MSX (MP3 player) via AMSDAP Read Write
#FF20 - #FF27 %11111111 00100xxx SE-ONE (MP3 player, FM radio receiver, USB master interface) via AMSDAP Read Write
#FF60 - #FF6F %11111111 0110xxxx CPC V9990 PowerGraph (upcoming graphic card based on the Graphics 9000 for the MSX) Read 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
#C00? %11000000 0000000x Dobbertin Smart Watch data read (A0=data) Read -
#C00? %11000000 0000000x Dobbertin Smart Watch data write (A0=data) Read -

More Ports

Some more I/O addresses (which aren't included in the above list) 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.