Difference between revisions of "I/O Port Summary"

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
(I/O Port Summary)
 
(100 intermediate revisions by 17 users not shown)
Line 1: Line 1:
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]].
+
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.
  
{|{{Prettytable|width: 700px; font-size: 2em;}}
+
== I/O Port Summary ==
|'''I/O'''||'''Decoded as'''||'''Port'''||'''Read'''||'''Write'''
+
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.
 +
 
 +
{| class="wikitable"
 +
!I/O
 +
!Decoded as
 +
!Port
 +
!Read
 +
!Write
 
|-
 
|-
 
|#1C00||%x0xxxx00 xxxxxxxx||[[Dk'tronics Lightpen]] faulty mirror of #BCXX [[CRTC]] Index|| - ||Write
 
|#1C00||%x0xxxx00 xxxxxxxx||[[Dk'tronics Lightpen]] faulty mirror of #BCXX [[CRTC]] Index|| - ||Write
Line 8: Line 15:
 
|#1F00||%x0xxxx11 xxxxxxxx||[[Dk'tronics Lightpen]] faulty mirror of #BFXX [[CRTC]] Data In|| Read || -
 
|#1F00||%x0xxxx11 xxxxxxxx||[[Dk'tronics Lightpen]] faulty mirror of #BFXX [[CRTC]] Data In|| Read || -
 
|-
 
|-
|#78XX||?||[[CPC4MB|4Mb Memory extension]]||-||Write
+
|#78XX||%0xxxx000 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write
 
|-
 
|-
|#79XX||?||[[CPC4MB|4Mb Memory extension]]||-||Write
+
|#79XX||%0xxxx001 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write
 
|-
 
|-
|#7AXX||?||[[CPC4MB|4Mb Memory extension]]||-||Write
+
|#7AXX||%0xxxx010 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write
 
|-
 
|-
|#7BXX||?||[[CPC4MB|4Mb Memory extension]]||-||Write
+
|#7BXX||%0xxxx011 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write
 
|-
 
|-
|#7CXX||?||[[CPC4MB|4Mb Memory extension]]||-||Write
+
|#7CXX||%0xxxx100 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write
 
|-
 
|-
|#7DXX||?||[[CPC4MB|4Mb Memory extension]]||-||Write
+
|#7CXX||%0xxxxx00 xxxxxxxx||[[Aleste 520EX]] RAM Mapper page 0 (extended "Gate Array 3")||Read||Write
 
|-
 
|-
|#7EXX||?||[[CPC4MB|4Mb Memory extension]]||-||Write
+
|#7DXX||%0xxxx101 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write
 
|-
 
|-
|#7FXX||?||[[CPC4MB|4Mb Memory extension]]||-||Write
+
|#7DXX||%0xxxxx01 xxxxxxxx||[[Aleste 520EX]] RAM Mapper page 1 (extended "Gate Array 3")||Read||Write
 +
|-
 +
|#7EXX||%0xxxx110 xxxxxxxx||[[CPC4MB|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||[[CPC4MB|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||?||[[Dk'tronics memory expansion]]||-||Write
Line 30: Line 53:
 
|#7FXX||%01xxxxxx xxxxxxxx||[[Gate Array]]||-||Write
 
|#7FXX||%01xxxxxx xxxxxxxx||[[Gate Array]]||-||Write
 
|-
 
|-
|#7FXX||%0xxxxxxx xxxxxxxx||PAL extension to [[Gate Array]] for 128K RAM banking||-||Write
+
|#7FXX||%0xxxxxxx xxxxxxxx||[[PAL16L8]] extension to [[Gate Array]] for 128K RAM banking||-||Write
 
|-
 
|-
 
|#BCXX||%x0xxxx00 xxxxxxxx||6845 [[CRTC]] Index|| - ||Write
 
|#BCXX||%x0xxxx00 xxxxxxxx||6845 [[CRTC]] Index|| - ||Write
Line 40: Line 63:
 
|#BFXX||%x0xxxx11 xxxxxxxx||6845 [[CRTC]] Data In (as far as supported)||Read|| -  
 
|#BFXX||%x0xxxx11 xxxxxxxx||6845 [[CRTC]] Data In (as far as supported)||Read|| -  
 
|-
 
|-
|#DFXX||%xx0xxxxx xxxxxxxx||[[Upper ROM Bank Number]]|| - ||Write
+
|#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
 
|#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
 
|#F4XX||%xxxx0x00 xxxxxxxx||[[8255]] PIO Port A ([[PSG]] Data)||Read||Write
Line 52: Line 89:
 
|#F7XX||%xxxx0x11 xxxxxxxx||[[8255]] PIO Control-Register|| - ||Write
 
|#F7XX||%xxxx0x11 xxxxxxxx||[[8255]] PIO Control-Register|| - ||Write
 
|-
 
|-
|#F8B0||?||[[VIDI digitizer|Vidi-CPC Video-Digitiser]]||?||?
+
|#F880-#F88F||%1111100x 1000xxxx||[[PlayCity]] Expansion CTC channels and YMZ data|| - || Write
 
|-
 
|-
|#F8B1||?||[[VIDI digitizer|Vidi-CPC Video-Digitiser]]||?||?
+
|#F890-#F89F||%1111100x 1--1xxxx||[[MultiPlay]] Expansion (mirror port, use #F9xx)|| Read || -
 +
|-
 +
|#F8A0-#F8AF||%11111000 1010xxxx||[[X-CPC]] ClockPort RTC|| Read || Write
 +
|-
 +
|#F8B0||?||[[VIDI digitizer|Vidi-CPC Video-Digitiser]], CRTC Index||?||Write
 +
|-
 +
|#F8B1||?||[[VIDI digitizer|Vidi-CPC Video-Digitiser]], CRTC Data||?||Write
 
|-
 
|-
 
|#F8DC||?||[[CPCI RS232 Interface|CPCI Serial Interface]] MC6850 Control/Status||Read||Write
 
|#F8DC||?||[[CPCI RS232 Interface|CPCI Serial Interface]] MC6850 Control/Status||Read||Write
Line 62: Line 105:
 
|#F8E0||?||[[DHCP MIDI Interface]]||Read||Write
 
|#F8E0||?||[[DHCP MIDI Interface]]||Read||Write
 
|-
 
|-
|#F8E0||?||[[Schneider RS232 Interface]] Z80 STI Indirect Data Register||Read||Write
+
|#F8E0||%11111000 11100000||[[Schneider RS232 Interface]] Z80-STI Indirect Data Register||Read||Write
 
|-
 
|-
|#F8E1||?||[[Schneider RS232 Interface]] Z80 STI Gen. Purpose I/O Interrupt||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||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||?||?
 +
|-
 +
|#F8E3||%11111000 11100011||[[Schneider RS232 Interface]] Z80-STI Interrupt Pending Register A (unused)||Read||Write
 +
|-
 +
|#F8E3||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||?||?
 +
|-
 +
|#F8E4||%11111000 11100100||[[Schneider RS232 Interface]] Z80-STI Interrupt in-Service Register B (unused)||Read||Write
 +
|-
 +
|#F8E4||?||[[Universeller EPROM Programmer 4004|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]]||?||?
 
|#F8E6||?||Port A - [[IDE8255]]||?||?
 +
|-
 +
|#F8E7||%11111000 11100111||[[Schneider RS232 Interface]] Z80-STI Interrupt Mask Register A (unused)||Read||Write
 
|-
 
|-
 
|#F8E7||?||Port C - [[IDE8255]]||?||?
 
|#F8E7||?||Port C - [[IDE8255]]||?||?
 
|-
 
|-
|#F8E8||?||[[Schneider RS232 Interface]] Z80 STI Pointer Vector Register||Read||Write
+
|#F8E8||%11111000 11101000||[[Schneider RS232 Interface]] Z80-STI Indirect Index and Interrupt Vector Register||Read||Write
 
|-
 
|-
 
|#F8E8||?||[[Music Machine]] Interrupt Sel|| - ||Write
 
|#F8E8||?||[[Music Machine]] Interrupt Sel|| - ||Write
 
|-
 
|-
|#F8EC||?||[[Schneider RS232 Interface]] Z80 STI USART Control Register||Read||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
 
|#F8EC||?||[[Music Machine]] ACIA Control|| - ||Write
Line 80: Line 147:
 
|#F8ED||?||[[Music Machine]] ACIA Data Write|| - || Write
 
|#F8ED||?||[[Music Machine]] ACIA Data Write|| - || Write
 
|-
 
|-
|#F8ED||?||[[Schneider RS232 Interface]] Z80 STI Receiver Status Register||Read||Write
+
|#F8ED||%11111000 11101101||[[Schneider RS232 Interface]] Z80-STI Receiver Status Register||Read||Write
 
|-
 
|-
 
|#F8EE||?||[[Music Machine]] ACIA Status||Read|| -  
 
|#F8EE||?||[[Music Machine]] ACIA Status||Read|| -  
 
|-
 
|-
|#F8EE||?||[[Schneider RS232 Interface]] Z80 STI Transmitter Status Register||Read||Write
+
|#F8EE||%11111000 11101110||[[Schneider RS232 Interface]] Z80-STI Transmitter Status Register||Read||Write
 
|-
 
|-
|#F8EF||?||[[Schneider RS232 Interface]] Z80 STI USART Data Register||Read||Write
+
|#F8EF||%11111000 11101111||[[Schneider RS232 Interface]] Z80-STI USART Data Register||Read||Write
 
|-
 
|-
 
|#F8EF||?||[[Music Machine]] ACIA Data Read||Read|| -  
 
|#F8EF||?||[[Music Machine]] ACIA Data Read||Read|| -  
 
|-
 
|-
|#F8E2 - #F8E4||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||?||?
+
|#F8FX||%xxxxx0xx 1111NNNx||[[Maplins 8bit Input Port]] and [[Maplins Weather Satellite Receiver]]||Read|| -
 
|-
 
|-
 
|#F8F0||?||[[Music Machine]] DAC Write|| - ||Write
 
|#F8F0||?||[[Music Machine]] DAC Write|| - ||Write
Line 96: Line 163:
 
|#F8F2||?||[[EMR MIDI Interface]]|| - ||Write
 
|#F8F2||?||[[EMR MIDI Interface]]|| - ||Write
 
|-
 
|-
|#F8F2||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||?||?
+
|#F8F2||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||Read||Write
 +
|-
 +
|-
 +
|#F8F2||?||[[EMR MIDI Interface]]||Read||Write
 
|-
 
|-
 
|#F8F4||?||[[Music Machine]] ADC Read||Read|| -  
 
|#F8F4||?||[[Music Machine]] ADC Read||Read|| -  
 +
 +
|-
 +
|#F8F5||?||[[ARA Video Digitizer]] - Read Sync Signal (bit0)||Read|| -
 
|-
 
|-
 
|#F8F8||?||[[Music Machine]] ADC Start|| - ||Write
 
|#F8F8||?||[[Music Machine]] ADC Start|| - ||Write
 
|-
 
|-
|#F8FF||%1111100x 111xxxxx||[[CPCISA by Yarek|CPCISA control port]]|| - ||Write
+
|#F8F8||?||[[ANTA 64K Memory Expansion]] ANTA 64k.3 latch||Read||Write
 
|-
 
|-
|#F8FF||N/A||[[Peripheral Soft Reset]] (MC_BOOT_PROGRAM and MC_START_PROGRAM do OUT [F8FF],FF)|| - ||Write
+
|#F8FE||%11111000 11111110||[[Z-MEM]] Software Memory Configuration|| - || Write
 
|-
 
|-
|#F9B0||?||[[VIDI digitizer|Vidi-CPC Video-Digitiser]]||?||?
+
|#F8FF||%1111100x 111xxxxx||[[CPCISA|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 digitizer|Vidi-CPC Video-Digitiser]], Config (W) and Capture Data (R)||Read||Write
 +
|-
 +
|#F9D0||%11111000 11010000||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] SwinSID1 + SwinSID2 DATA (MONO Mode / 3 Channels)||-||Write
 +
|-
 +
|#F9D1||%11111000 11010001||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] SwinSID1 (LEFT) DATA (STEREO Mode / 6 Channels)||-||Write
 +
|-
 +
|#F9D2||%11111000 11010010||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|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]]||?||?
 
|#F9E6||?||Port B - [[IDE8255]]||?||?
 
|-
 
|-
 
|#F9E7||?||RS Port - [[IDE8255]]||?||?
 
|#F9E7||?||RS Port - [[IDE8255]]||?||?
 +
|-
 +
|#F9F5||?||[[ARA Video Digitizer]] - Reset 10bit Config Value|| - ||Write
 
|-
 
|-
 
|#F9F7||?||[[Grafpad II|Hegotron grafpad II]]||?||?
 
|#F9F7||?||[[Grafpad II|Hegotron grafpad II]]||?||?
Line 119: Line 218:
 
|-
 
|-
 
|#FA7E||%xxxxx0x0 0xxxxxxx||Floppy Motor Control (for [[765 FDC]])|| - ||Write
 
|#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||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] Select SID (1&2) Register MONO mode||-||Write
 +
|-
 +
|#FAD1||%11111010 11010001||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] Select SID1 Register||-||Write
 +
|-
 +
|#FAD2||%11111010 11010010||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] Select SID2 Register||-||Write
 
|-
 
|-
 
|#FADC||?||[[Amstrad Serial Interface]] Z80-SIO / DART port A Data Register||Read||Write
 
|#FADC||?||[[Amstrad Serial Interface]] Z80-SIO / DART port A Data Register||Read||Write
 +
|-
 +
|#FADC||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8251 USART data|| Read || Write
 
|-
 
|-
 
|#FADD||?||[[Amstrad Serial Interface]] Z80-SIO / DART port A Control Reg.||Read||Write
 
|#FADD||?||[[Amstrad Serial Interface]] Z80-SIO / DART port A Control Reg.||Read||Write
 +
|-
 +
|#FADD||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8251 USART control/status|| Read || Write
 
|-
 
|-
 
|#FADE||?||[[Amstrad Serial Interface]] Z80-SIO / DART port B Data Register||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||?||[[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]]||?||?
 
|#FAE6||?||Port A - [[IDE8255]]||?||?
Line 133: Line 254:
 
|-
 
|-
 
|#FAEE||?||[[Amstrad SSA-1 Speech Synthesizer]] (faulty mirror used by included RSX driver)||Read||Write
 
|#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|| -  
 
|#FB7E||%xxxxx0x1 0xxxxxx0||[[765 FDC]] (internal) Status Register||Read|| -  
Line 138: Line 265:
 
|#FB7F||%xxxxx0x1 0xxxxxx1||[[765 FDC]] (internal) Data Register||Read||Write
 
|#FB7F||%xxxxx0x1 0xxxxxx1||[[765 FDC]] (internal) Data Register||Read||Write
 
|-
 
|-
|#FBBD||?||Ram select mode [[Vortex Expansions RAM card|Vortex SP512]]||?||Write  
+
|#FBBD||%xxxxx0xx x0xxxx0x||Ram select mode [[Vortex Expansions RAM card|Vortex SP512]]||?||Write  
 
|-
 
|-
 
|#FBDC||?||[[Amstrad Serial Interface]] 8253 Timer counter 0||Read||Write
 
|#FBDC||?||[[Amstrad Serial Interface]] 8253 Timer counter 0||Read||Write
 +
|-
 +
|#FBDC||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 0 (transmit baudrate)|| Read || Write
 
|-
 
|-
 
|#FBDD||?||[[Amstrad Serial Interface]] 8253 Timer counter 1||Read||Write
 
|#FBDD||?||[[Amstrad Serial Interface]] 8253 Timer counter 1||Read||Write
 +
|-
 +
|#FBDD||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 1 (receive baudrate)|| Read || Write
 
|-
 
|-
 
|#FBDE||?||[[Amstrad Serial Interface]] 8253 Timer counter 2||Read||Write
 
|#FBDE||?||[[Amstrad Serial Interface]] 8253 Timer counter 2||Read||Write
 +
|-
 +
|#FBDE||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 2 (used as 1ms timer)|| Read || Write
 
|-
 
|-
 
|#FBDF||?||[[Amstrad Serial Interface]] 8253 Timer Modus Select|| - ||Write
 
|#FBDF||?||[[Amstrad Serial Interface]] 8253 Timer Modus Select|| - ||Write
 +
|-
 +
|#FBDF||?||[[RS-232 para Amstrad|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+0||?||CPCI [[Real Time Clock]] Index (DIY)||-||Write
Line 152: Line 289:
 
|#FBxx+1||?||CPCI [[Real Time Clock]] Data (DIY)||Read||Write
 
|#FBxx+1||?||CPCI [[Real Time Clock]] Data (DIY)||Read||Write
 
|-
 
|-
|#FBE0 - #FBE3||?||[[Dk'tronics Real Time Clock]]||?||?
+
|#FBE0||?||[[Dk'tronics Real Time Clock]] - Z80 PIO Port A Data (HD146818P RTC Data bus)|| Read || Write
 
|-
 
|-
 
|#FBE0||?||[[Dobbertin Harddisc]] Data Port||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
 
|#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
 
|#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
 
|#FBE3||?||[[Dobbertin Harddisc]] DMA, Interrupt||Read||Write
Line 170: Line 313:
 
|#FBE7||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Data In/Out Port A ||Read||Write  
 
|#FBE7||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Data In/Out Port A ||Read||Write  
 
|-
 
|-
|#FBE8||?||[[Dk'tronics Real Time Clock]]||?||?
+
|#FBE8||?||[[Dk'tronics Real Time Clock]] "4bit latch" (details unknown)|| ? || Write
 
|-
 
|-
 
|#FBE8||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 8253 Timer0 (RX Clock)||Read||Write
 
|#FBE8||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 8253 Timer0 (RX Clock)||Read||Write
Line 181: Line 324:
 
|-
 
|-
 
|#FBEC||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) Control||-||Write
 
|#FBEC||?||[[KDS_Electronics_Serial_Interface|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_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) TX Data||-||Write
 
|#FBED||?||[[KDS_Electronics_Serial_Interface|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||?||[[Amstrad SSA-1 Speech Synthesizer]]||Read||Write
 +
|-
 +
|#FBEE||?||[[LambdaSpeak III ROM|LambdaSpeak Speech Synthesizer]]||Read||Write
 +
|-
 +
|#FBEE||%xxxxx0x1 xxx0xxx0||[[Kempston Mouse]] - 8bit X position||Read||-
 
|-
 
|-
 
|#FBEE||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) Status||Read||-
 
|#FBEE||?||[[KDS_Electronics_Serial_Interface|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_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) RX Data||Read||-
 
|#FBEF||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) RX Data||Read||-
Line 193: Line 350:
 
|-
 
|-
 
|#FBF0 - #FBFF||?||[[Otten & Fecht 1 MB RAM-Disc]]||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|| -  
 
|#FBF6||?||[[Vortex Disc Drives]] 765 FDC (Vortex,ext) Status Register||Read|| -  
Line 199: Line 364:
 
|-
 
|-
 
|#FBF7||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Configure Port A ||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||?||[[Amstrad Magnum Phaser|Magnum Light Phaser]]||-||Write
 
|#FBFE||?||[[Amstrad Magnum Phaser|Magnum Light Phaser]]||-||Write
 +
|-
 +
|#FBFE||?||[[Dart Scanner for DMP-Printers]]||Read||?
 
|-
 
|-
 
|#FBFE||?||[[Dk'tronics Speech Synthesizer]]||Read||Write
 
|#FBFE||?||[[Dk'tronics Speech Synthesizer]]||Read||Write
 
|-
 
|-
|#FBFE||?||[[TMPI speech synthesizer]] Data Register ||||Write
+
|#FBFE||%xxxxxxxx 11111110||[[TMPI speech synthesizer]] Data Register ||||Write
 
|-
 
|-
|#FBFF||?||[[TMPI speech synthesizer]] Command/Status Register ||Read||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  
 
|#FBFF||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Configure Port B ||Read||Write  
 
 
|-
 
|-
|#FC00 - #FDFF||%1111110x xxxxxxxx||[[CPCISA by Yarek|CPCISA]] 16bits mode high byte latch||Read||Write
+
|#FC00 - #FDFF||%1111110x xxxxxxxx||[[CPCISA|CPCISA]] 16bits mode high byte latch||Read||Write
 
|-
 
|-
|#FCE6||?||Port A - [[IDE8255]]||Read||Write
+
|#FC00||?||[[M4 Board]] ACK/KICK|| - ||Write
 
|-
 
|-
|#FCE7||?||Port C - [[IDE8255]]||Read||Write
+
|#FC5C||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Baudrate Selection|| - ||Write
 
|-
 
|-
|#FD00 - #FD3F||%11111101 00xxxxxx||[[Programming:SYMBiFACE_II|SYMBiFACE II]]||Read||Write
+
|#FC7C||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel A Data||Read||Write
 
|-
 
|-
|#FDE6||?||Port B - [[IDE8255]]||Read||Write
+
|#FC7D||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel A Control/Status||Read||Write
 
|-
 
|-
|#FDE7||?||RS Port - [[IDE8255]]||Read||Write
+
|#FC7E||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel B Data||Read||Write
 
|-
 
|-
|#FE00 - #FFFF||%1111111x xxxxxxxx||[[CPCISA by Yarek|CPCISA]] I/O access (low byte)||Read||Write
+
|#FC7F||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel B Control/Status||Read||Write
 
|-
 
|-
|#FEE6||?||Port A - [[IDE8255]]||Read||Write
+
|#FCE6||?||Port A - [[IDE8255]]||Read||Write
 
|-
 
|-
|#FEE7||?||Port C - [[IDE8255]]||Read||Write
+
|#FCE7||?||Port C - [[IDE8255]]||Read||Write
 
|-
 
|-
|#FEE8||?||[[Multiface II]]||?||?
+
|#FD00 - #FD3F||%11111101 00xxxxxx||[[Programming:SYMBiFACE_II|SYMBiFACE II]]||Read||Write
 
|-
 
|-
|#FEEA||?||[[Multiface II]]||?||?
+
|#FD08 - #FD0F||%11111101 00001xxx||[[X-Mass|X-MASS]] 2.5" 44-pin IDE interface / DOM / CF adapter (SYMBiFACE II compatible)||Read||Write
 
|-
 
|-
|#FFXX||%11111111 xxxxxxxx||[[CPC Booster]] (XX=#00..#28 are used now)||Read||Write
+
|#FD40 - #FD4F||%11111101 0100xxxx||[[Programming:SYMBiFACE_III|SYMBiFACE III]]||Read||Write
 
|-
 
|-
|#FFXX||%11111111 xxxxxxxx||[[Amdrum]] (unsigned 8bit DAC)||-||Write
+
|#FD80 - #FD87||%11111101 10000xxx||CPC-CPLink - FIFO Interface card for Co-processors, incl. Raspberry Pi ||Read||Write
 
|-
 
|-
|#FFE6||?||Port B - [[IDE8255]]||Read||Write
+
|#FDE6||?||Port B - [[IDE8255]]||Read||Write
 
|-
 
|-
|#FFE7||?||RS Port - [[IDE8255]]||Read||Write
+
|#FDE7||?||RS Port - [[IDE8255]]||Read||Write
 
|-
 
|-
|}
+
|#FE00||?||[[M4 Board]] Data|| - ||Write
 
+
CPCISA ports for ISA cards
+
{|{{Prettytable|width: 700px; font-size: 2em;}}
+
|''Device''||''PC I/O range''||''CPCISA high''||''CPCISA low''
+
 
|-
 
|-
|IDE1||1F0h..1F7h||#FDF0..#FDF7||#FFF0..#FFF7
+
|#FE00 - #FFFF||%1111111x xxxxxxxx||[[CPCISA|CPCISA]] I/O access (low byte)||Read||Write
 
|-
 
|-
|IDE2||170h..177h||#FD70..#FD77||#FF70..#FF77
+
|#FE80 - #FE81||%11111110 1000000x||[[Albireo]] CH376 controller||Read||Write
 
|-
 
|-
|Joystick||201h..201h||#FC01..#FC01||#FE01..#FE01
+
|#FE82||%11111110 10000010||[[Nova]] RTC & NVRAM|| - ||Write
 
|-
 
|-
|Ethernet||210h..21Fh||#FC10..#FC1F||#FE10..#FE1F
+
|#FE84 - #FEA7||%11111110 10xxx1xx||[http://shinra.cpcscene.net/willy.html Willy] Future use or multi-soundchip ||-||-
 
|-
 
|-
|Sound Blaster||220h..23Fh||#FC20..#FC3F||#FE20..#FE3F
+
|#FEAC - #FEAD||%11111110 101011xx||[http://shinra.cpcscene.net/willy.html Willy] S2P Dream SAM2965 MIDI synthetizer ||Read||Write
 
|-
 
|-
|LPT2||278h..27Fh||#FC78..#FC7F||#FE78..#FE7F
+
|#FEB0 - #FEB7||%11111110 10110xxx||[[Albireo]] serial port||Read||Write
 
|-
 
|-
|COM1||2F8h..2FFh||#FCF8..#FCFF||#FEF8..#FEFF
+
|#FEBC - #FEBF||%11111110 101111xx||[http://shinra.cpcscene.net/willy.html Willy] OPL3 ||-||Write
 
|-
 
|-
|MIDI'||300h..301h||#FD00..#FD01||#FF00..#FF01
+
|#FEE6||?||Port A - [[IDE8255]]||Read||Write
 
|-
 
|-
|MIDI||330h..331h||#FD30..#FD31||#FF30..#FF31
+
|#FEE7||?||Port C - [[IDE8255]]||Read||Write
 
|-
 
|-
|Sound control||370h..371h||#FD70..#FD71||#FF70..#FF71
+
|#FEE8||%11111110 1110100x||[[Multiface II]] - Enable Multiface II ROM/RAM||-||Write
 
|-
 
|-
|FDC1||372h..377h||#FD72..#FD77||#FF72..#FF77
+
|#FEEA||%11111110 1110110x||[[Multiface II]] - Disable Multiface II ROM/RAM||-||Write
 
|-
 
|-
|LPT1||378h..37Fh||#FD78..#FD7F||#FF78..#FF7F
+
|#FEF0 - #FEF7||%11111110 11110xxx||[[CPC-CompactFlash]] - IDE registers||Read||Write
 
|-
 
|-
|Sound AD-LIB||388h..38Bh||#FD88..#FD8B||#FF88..#FF8B
+
|#FEF0 - #FEF7||%11111110 11110xxx||[[uIDE 16]] - IDE registers||Read||Write
 
|-
 
|-
|VGA||3B0h..3BBh||#FDB0..#FDBB||#FFB0..#FFBB
+
|#FF00 - #FFFF||%11111111 xxxxxxxx||AMSDAP (Amstrad MSx aDAPter, MSX-to-CPC I/O hardware interface (MSX ports #00-#ff)||Read||Write
 
|-
 
|-
|LPT3||3BCh..3BFh||#FDBC..#FDBF||#FFBC..#FFBF
+
|#FF20 - #FF27||%11111111 00100xxx||MP3MSX (MP3 player) via AMSDAP||Read||Write
 
|-
 
|-
|VGA||3C0h..3DFh||#FDC0..#FDCF||#FFC0..#FFCF
+
|#FF20 - #FF27||%11111111 00100xxx||SE-ONE (MP3 player, FM radio receiver, USB master interface) via AMSDAP||Read||Write
 
|-
 
|-
|FDC1||3F2h..3F7h||#FDF2..#FDF7||#FFF2..#FFF7
+
|#FF60 - #FF6F||%11111111 0110xxxx||CPC [[V9990]] [[PowerGraph]] (upcoming graphic card based on the Graphics 9000 for the MSX)||Read||Write
 
|-
 
|-
|COM1||3F8h..3FFh||#FDF8..#FDFF||#FFF8..#FFFF
+
|#FFXX||%11111111 xxxxxxxx||[[CPC Booster]] (XX=#00..#28 are used now)||Read||Write
 
|-
 
|-
|}
+
|#FFXX||%11111111 xxxxxxxx||[[Amdrum]] (unsigned 8bit DAC)||-||Write
 
+
CPCISA ports for ISA motherboard
+
{|{{Prettytable|width: 700px; font-size: 2em;}}
+
|''Device''||''PC I/O range''||''CPCISA high''||''CPCISA low''
+
 
|-
 
|-
|DMA||000h..00Fh||#FC00..#FC0F||#FE00..#FE0F
+
|#FFE6||?||Port B - [[IDE8255]]||Read||Write
 
|-
 
|-
|interrupt||020h..03Fh||#FC20..#FC3F||#FE20..#FE3F
+
|#FFE7||?||RS Port - [[IDE8255]]||Read||Write
 
|-
 
|-
|counter||040h..05Fh||#FC40..#FC5F||#FE40..#FE5F
+
|}
 +
 
 +
== Memory Mapped I/O Ports ==
 +
 
 +
{| class="wikitable"
 +
!Mem
 +
!Decoded as
 +
!Port
 +
!Read
 +
!Write
 
|-
 
|-
|keyboard||060h..067h||#FC60..#FC67||#FE60..#FE67
+
|#4000-7FFF||%01xxxxxx xxxxxxxx||[[ASIC]] - CPC+/GX4000 registers|| Read || Write
 
|-
 
|-
|RTC||070h..071h||#FC70..#FC71||#FE70..#FE71
+
|#C00?||%11000000 0000000x||[[Dobbertin Smart Watch]] data read (A0=data)|| Read || -
 
|-
 
|-
|DMA||080h..08Fh||#FC80..#FC8F||#FE80..#FE8F
+
|#C00?||%11000000 0000000x||[[Dobbertin Smart Watch]] data write (A0=data)|| Read || -
|-
+
|DMA||0C0h..0DFh||#FCC0..#FCDF||#FEC0..#FEDF
+
|-
+
|interrupt||0A0h..0BFh||#FCA0..#FCBF||#FEA0..#FEBF
+
 
|-
 
|-
 
|}
 
|}
  
[[Category:Programming]] [[Category:Stub]]
+
== More Ports ==
 +
 
 +
Some more I/O addresses (which aren't included in the above list) are here:
 +
* [[Schneiderware Summary]]
 +
* [[CPCISA]]
 +
 
 +
== 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 Joysticks|Digital Joystick]] and [[Printer Port]] pages.
 +
 
 +
Aside from I/O addresses, there are some other important I/O signals, for example: [[NMI]] or [[External Interrupt|INT]].
 +
 
 +
[[Category:Programming]] [[Category:Stub]][[Category:CPC Internal Components]][[Category:Hardware]][[Category:Electronic Component]]

Latest revision as of 14:30, 11 August 2024

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.