== I/O Port Allocation Rules ==
Components use partial address decoding. It is therefore possible to send the same value to different components '''simultaneously''' by carefully using custom I/O ports.
{| class="wikitable"
! b15 !! b14 !! b13 !! b12 !! b11 !! b10 !! b9 !! b8 !! b7 !! b6 !! b5 !! b4 !! b3 !! b2 !! b1 !! b0
|-
| [[Gate-Array ]] || Write Only only || 0 || 1 || - || - || - || - || - || - || - || - || - || - || - || - || - || -
|-
| [[PAL16L8|PAL]] (RAM Configuration configuration) || Write Only only || 0 || - * || - || - || - || - || - || - || - || - || - || - || - || - || - || -
|-
| [[CRTC ]] || Read/Write || - || 0 || - || - || - || - || r1 || r0 || - || - || - || - || - || - || - || -
|-
| [[Upper ROM Bank Number|Upper ROM select ]] || Write only || - || - || 0 || - || - || - || - || - || - || - || - || - || - || - || - || -
|-
| [[Printer port Port]] || Write only || - || - || - || 0 || - || - || - || - || - || - || - || - || - || - || - || -
|-
| [[8255| 8255 PPI ]] || Read/Write || - || - || - || - || 0 || - || r1 || r0 || - || - || - || - || - || - || - || -
|-
| Expansion Peripherals || Read/Write || - || - || - || - || - || 0 || x || x || x || x || x || x || x || x || x || x
*"1" means the bit must be set to "1" for the hardware device to respond.
*"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.
<br>
|}
* 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.
* Bit14 of the PAL selection address 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.
* As components use partial address decoding, it is therefore possible to send the same value to different components '''simultaneously''' by carefully using custom I/O ports.
<br>
== Memory Mapped I/O Ports ==
{| class="wikitable"
|-
|}
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>
==Related pages==
*[[Arnold V specs]]
*[[Arnold V Specs Revised]]
[[Category:Programming]] [[Category:CPC Internal Components]]