This list shows only the internal standard I/O ports, as used in the BIOS ROM of the CPC 464/664/6128 BIOS, and in the AMSDOS ROM of the CPC 664/6128 and DDI-1. For a more complete list, including all Peripherals, see the [[I/O Port Summary|Complete I/O Port Summary]].
== Port Mapping ==<br>
{|{{Prettytable|width: 700px; font-size: 2em;}}== I/O Port Allocation Rules ==|Components use partial address decoding. It is therefore possible to send the same value to different components '''Hardware devicesimultaneously'''by carefully using custom I/O ports. {|class="wikitable"! rowspan=2|'''Address'''Hardware device !! rowspan=2||'''Read/Write'''!! colspan=16|Port bits|'''-! b15'''||'''!! b14'''||'''!! b13'''||'''!! b12'''||'''!! b11'''||'''!! b10'''||'''!! b9'''||'''!! b8'''!! b7 !! b6 !! b5 !! b4 !! b3 !! b2 !! b1 !! b0
|-
|[[Gate Array||&7F]] ||Write Onlyonly ||0||1|| - || - || - || - || - || - || - || - ||-||-||-||-||-||-
|-
| [[PAL16L8|PAL||&7F]] (RAM configuration) ||Write Onlyonly ||0|| * || - || - || - || - || - || - || - ||-||-||-||-||-||-||-
|-
|[[CRTC||&BC-&BF]] ||Read/Write||-||0||-||-||-||-||r1||r0|| - || - || - || - || - || - || - || -
|-
|[[Upper ROM Bank Number|Upper ROM select||&DF]] ||Write Onlyonly ||-||-||0|| - || - || - || - || - || - || - || - ||-||-||-||-||-
|-
|[[Printer port||&EFPort]] ||Write Onlyonly ||-||-||-||0|| - || - || - || - || - || - || - || - ||-||-||-||-
|-
| [[8255|8255 PPI||&F4-&F7]] ||Read/Write||-||-||-||-||0||-||r1||r0|| - || - || - || - || - || - || - || -
|-
|Expansion devices||&F8-&FBPeripherals ||Read/Write||-||-||-||-||-||0||-x ||-x || x || x || x || x || x || x || x || x
|}
Legend:*"-" means this bit is ignored,*"0 " means the bit must be set to "0 " for the hardware device to respond, *"1 " means the bit must be set to "1 " for the hardware device to respond, - means this bit is ignored. *"r1 " and "r0 " mean a bit used to define a register* "*" Bit14 of the PAL port must be at 1 on CPCs equipped with CRTCs 0/1/2. It can be at 0 or 1 on CRTCs 3/4. For compatibility reasons, it is strongly advised to always set bit14 to 1 to select PAL.
== I/O Ports ==<br>
== Official I/O Ports == The official ports are defined to eliminate conflict between devices, as follows: {|{{Prettytable|width: 700px; font-size: 2em;}}class="wikitable"|'''!I/O'''||'''!Decoded as'''||'''!Port'''||'''!Read'''||'''!Write'''
|-
|#7FXX||%01xxxxxx xxxxxxxx||[[Gate Array]]||-||Write
|}
* The FDC is considered as an expansion peripheral. The three [[765 FDC]] floppy ports are contained in CPC 664/6128/Plus and DDI-1 only.
* The eight [[Amstrad Serial Interface]] ports are pre-defined as shown above in the AMSDOS ROM. However, neither the CPC 664/6128/Plus nor DDI-1 do actually contain the corresponding RS232 hardware.
== Memory Mapped I/O Ports ==<br>
== Memory Mapped I/O == {|{{Prettytable|width: 700px; font-size: 2em;}}class="wikitable"|'''!Mem'''||'''!Decoded as'''||'''!Port'''||'''!Read'''||'''!Write'''
|-
|#4000-7FFF||%01xxxxxx xxxxxxxx||[[ASIC]] - CPC+/GX4000 registers|| Read || Write
|-
|}
Writes to unused areas of the ASIC I/O page are not persisted. [https://www.cpcwiki.eu/forum/games/harrier-attack-reloaded/msg247703/#msg247703 Source]
See the [[ASIC]] page for details.
<br>
[[Category:Programming]] [[Category:CPC Internal Components]]