<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://oldwiki.cpcwiki.eu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=PulkoMandy</id>
		<title>CPCWiki - THE Amstrad CPC encyclopedia! - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://oldwiki.cpcwiki.eu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=PulkoMandy"/>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php/Special:Contributions/PulkoMandy"/>
		<updated>2026-08-28T05:22:09Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Ramcard_128&amp;diff=126846</id>
		<title>Ramcard 128</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Ramcard_128&amp;diff=126846"/>
				<updated>2025-08-25T18:46:47Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Documentation */ Update dead link to new shinra homepage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Ramcard 128.JPG|right|thumb|250px|A RAM expansion card with battery backup]]&lt;br /&gt;
&lt;br /&gt;
The '''Ramcard 128''' is a ROM expansion card by [[RAM7]]. Like the [[Inicron ROM-RAM-Box]] the ROMs are simulated with RAM memory. The memory is backed up with an onboard battery.&lt;br /&gt;
&lt;br /&gt;
It has a maximum capacity of 128Kb.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:Doc Ramcard By RAM7.pdf|French documentation (PDF)]]&lt;br /&gt;
* [[Media:Ramcard_pcb_v2-3.pdf|Board layout (PDF)]]&lt;br /&gt;
* [https://shinra.cpcscene.net/ramcard.html English article about the way it works]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Expansion ROM]] [[Category:Peripherals]][[Category:DIY]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=AMSDOS_Header&amp;diff=113023</id>
		<title>AMSDOS Header</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=AMSDOS_Header&amp;diff=113023"/>
				<updated>2023-11-07T19:49:03Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In [[AMSDOS]] it is possible to store files in two ways: headerless and with a header. Headerless files are often files which were created with [[OPENOUT]] and ''SAVE&amp;quot;filename&amp;quot;,a''. Programs normally have a file header, which consist of 128 bytes and contain the following data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset !! Size !! Name !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || BYTE || User number || 0-15, or #E5 for deleted entries&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 8 BYTES || Filename || Unused characters are filled with space&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 3 BYTES || Extension || Unused characters are filled with space&lt;br /&gt;
|-&lt;br /&gt;
| C || DWORD || Zero || Contains all zeroes&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BYTE || Block number || Tape only&lt;br /&gt;
|-&lt;br /&gt;
| 11 || BYTE || Last block || Tape only&lt;br /&gt;
|-&lt;br /&gt;
| 12 || BYTE || File type || 0:BASIC 1:Protected 2:Binary (ASCII files don't have headers but a fake header is built in memory with the file type #16, &amp;quot;Unprotected ASCII v1&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 13 || WORD || Data location || Address of the 2KB buffer&lt;br /&gt;
|-&lt;br /&gt;
| 15 || WORD ||Load address || &lt;br /&gt;
|-&lt;br /&gt;
| 17 || BYTE || First block || Set to #FF, only used for output files&lt;br /&gt;
|-&lt;br /&gt;
| 18 || WORD ||style=&amp;quot;white-space: nowrap;&amp;quot;|  Logical length || Actual file length is here&lt;br /&gt;
|-&lt;br /&gt;
| 1A || WORD || Entry address || &lt;br /&gt;
|-&lt;br /&gt;
| 1C || 36 BYTES || Unused || &lt;br /&gt;
|-&lt;br /&gt;
| 40 || 3 BYTES || Real length || 24-bit number. Just a copy, not used!&lt;br /&gt;
|-&lt;br /&gt;
| 43 || WORD || Checksum || Unsigned sum of all bytes until this field&lt;br /&gt;
|-&lt;br /&gt;
| 45 || 59 BYTES || Unused || Free to use&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To calculate the checksum just add all bytes from 00 up to and including byte 66 together.&lt;br /&gt;
&lt;br /&gt;
This is only a summary. All details are in [[Firmware Guide]] chapter 9, page 4.&lt;br /&gt;
&lt;br /&gt;
[[Category:Disc Operating System]]&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=AMSDOS_Header&amp;diff=113022</id>
		<title>AMSDOS Header</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=AMSDOS_Header&amp;diff=113022"/>
				<updated>2023-11-07T19:46:37Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In [[AMSDOS]] it is possible to store files in two ways: headerless and with a header. Headerless files are often files which were created with [[OPENOUT]] and ''SAVE&amp;quot;filename&amp;quot;,a''. Programs normally have a file header, which consist of 128 bytes and contain the following data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset !! Size !! Name !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || BYTE || User number || 0-15, or #E5 for deleted entries&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 8 BYTES || Filename || Unused characters are filled with space&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 3 BYTES || Extension || Unused characters are filled with space&lt;br /&gt;
|-&lt;br /&gt;
| C || DWORD || Zero || Contains all zeroes&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BYTE || Block number || Tape only&lt;br /&gt;
|-&lt;br /&gt;
| 11 || BYTE || Last block || Tape only&lt;br /&gt;
|-&lt;br /&gt;
| 12 || BYTE || File type || 0:BASIC 1:Protected 2:Binary (ASCII files don't have headers but a fake header is built in memory with the file type #16, &amp;quot;Unprotected ASCII v1&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 13 || WORD || Data location || Address of the 2KB buffer&lt;br /&gt;
|-&lt;br /&gt;
| 15 || WORD ||Load address || &lt;br /&gt;
|-&lt;br /&gt;
| 16 || BYTE || First block || Set to #FF, only used for output files&lt;br /&gt;
|-&lt;br /&gt;
| 17 || WORD ||style=&amp;quot;white-space: nowrap;&amp;quot;|  Logical length || Actual file length is here&lt;br /&gt;
|-&lt;br /&gt;
| 19 || WORD || Entry address || &lt;br /&gt;
|-&lt;br /&gt;
| 1B || 36 BYTES || Unused || &lt;br /&gt;
|-&lt;br /&gt;
| 3F || 3 BYTES || Real length || 24-bit number. Just a copy, not used!&lt;br /&gt;
|-&lt;br /&gt;
| 42 || WORD || Checksum || Unsigned sum of all bytes until this field&lt;br /&gt;
|-&lt;br /&gt;
| 44 || 59 BYTES || Unused || Free to use&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To calculate the checksum just add all bytes from 00 up to and including byte 66 together.&lt;br /&gt;
&lt;br /&gt;
This is only a summary. All details are in [[Firmware Guide]] chapter 9, page 4.&lt;br /&gt;
&lt;br /&gt;
[[Category:Disc Operating System]]&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=AMSDOS_Header&amp;diff=113021</id>
		<title>AMSDOS Header</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=AMSDOS_Header&amp;diff=113021"/>
				<updated>2023-11-07T19:44:42Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In [[AMSDOS]] it is possible to store files in two ways: headerless and with a header. Headerless files are often files which were created with [[OPENOUT]] and ''SAVE&amp;quot;filename&amp;quot;,a''. Programs normally have a file header, which consist of 128 bytes and contain the following data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset !! Size !! Name !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || BYTE || User number || 0-15, or #E5 for deleted entries&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 8 BYTES || Filename || Unused characters are filled with space&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 3 BYTES || Extension || Unused characters are filled with space&lt;br /&gt;
|-&lt;br /&gt;
| C || DWORD || Zero || Contains all zeroes&lt;br /&gt;
|-&lt;br /&gt;
| E || BYTE || Block number || Tape only&lt;br /&gt;
|-&lt;br /&gt;
| F || BYTE || Last block || Tape only&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BYTE || File type || 0:BASIC 1:Protected 2:Binary (ASCII files don't have headers but a fake header is built in memory with the file type #16, &amp;quot;Unprotected ASCII v1&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 11 || WORD || Data location || Address of the 2KB buffer&lt;br /&gt;
|-&lt;br /&gt;
| 13 || WORD ||Load address || &lt;br /&gt;
|-&lt;br /&gt;
| 14 || BYTE || First block || Set to #FF, only used for output files&lt;br /&gt;
|-&lt;br /&gt;
| 15 || WORD ||style=&amp;quot;white-space: nowrap;&amp;quot;|  Logical length || Actual file length is here&lt;br /&gt;
|-&lt;br /&gt;
| 17 || WORD || Entry address || &lt;br /&gt;
|-&lt;br /&gt;
| 19 || 36 BYTES || Unused || &lt;br /&gt;
|-&lt;br /&gt;
| 3D || 3 BYTES || Real length || 24-bit number. Just a copy, not used!&lt;br /&gt;
|-&lt;br /&gt;
| 40 || WORD || Checksum || Unsigned sum of all bytes until this field&lt;br /&gt;
|-&lt;br /&gt;
| 42 || 59 BYTES || Unused || Free to use&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To calculate the checksum just add all bytes from 00 up to and including byte 66 together.&lt;br /&gt;
&lt;br /&gt;
This is only a summary. All details are in [[Firmware Guide]] chapter 9, page 4.&lt;br /&gt;
&lt;br /&gt;
[[Category:Disc Operating System]]&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Contiki&amp;diff=110802</id>
		<title>Contiki</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Contiki&amp;diff=110802"/>
				<updated>2023-05-08T18:53:46Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Other Operating Systems for the CPC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is Contiki? ==&lt;br /&gt;
&lt;br /&gt;
(Text copied from the official Contiki website.)&lt;br /&gt;
&lt;br /&gt;
[[Image:contikic64.jpg|right|thumb|250px|Contiki running on the Commodore 64]]&lt;br /&gt;
&lt;br /&gt;
The Contiki operating system is a highly portable, minimalistic operating system for a variety of constrained systems ranging from modern 8-bit microcontrollers for embedded systems to old 8-bit homecomputers. Contiki provides a simple event driven kernel with optional preemptive multithreading, interprocess communication using message passing signals, a dynamic process structure and support for loading and unloading programs, native TCP/IP support using the uIP TCP/IP stack, and a graphical subsystem with either direct graphic support for directly connected terminals or networked virtual display with VNC or Telnet.&lt;br /&gt;
&lt;br /&gt;
Contiki was designed with very low hardware requirements. And can run on a unexpanded Commodore 64.&lt;br /&gt;
The portability is ensured by the core being written entirely in ANSI [[C]].&lt;br /&gt;
&lt;br /&gt;
== Efforts in porting Contiki to Amstrad CPC ==&lt;br /&gt;
&lt;br /&gt;
[[Image:contikicpc.jpg|right|thumb|250px|Contiki running on the Amstrad CPC]]&lt;br /&gt;
&lt;br /&gt;
Previously there have been attempts to port Contiki to the CPC. The first successful port was done by [[Kevin Thacker]]. &lt;br /&gt;
&lt;br /&gt;
This was accomplished by:&lt;br /&gt;
# Modifying the linker so that it could generate binary files with relocation data&lt;br /&gt;
# Modifying the optimiser rules to reduce the program size.&lt;br /&gt;
# Modifying the source so it produced smaller and better code for the [[SDCC]] compiler to work with.&lt;br /&gt;
&lt;br /&gt;
The nature of Contiki (written almost entirely in C) and the poor Z80 optimisation by the SDCC compiler makes Contiki slow compared to other operating systems. &lt;br /&gt;
The desktop routines in the Amstrad port relies on the slow [[firmware]] routines because it was quicker to make the port this way. &lt;br /&gt;
&lt;br /&gt;
The Amstrad port runs in 64k. It doesn't make use of any extra RAM, this choice was taken so that a quick port could be done to proove it was possible.&lt;br /&gt;
&lt;br /&gt;
A key feature of Contiki is its ability to access networks.&lt;br /&gt;
&lt;br /&gt;
Two reasons prevented this in the Amstrad port:&lt;br /&gt;
# The compiled binaries for the webserver and other network programs were large, meaning that at runtime, both the binaries and contiki OS code could not fit into the 64K ram at the  same time&lt;br /&gt;
# The networking hardware was not at a sufficiently developed stage.&lt;br /&gt;
&lt;br /&gt;
The original plan was to implement [[CPC Booster]] support in Contiki.&lt;br /&gt;
The CPC would be connected to the PC via a serial cable.&lt;br /&gt;
On the PC would be Linux running Slip or PPP.&lt;br /&gt;
The PC would be connected to the internet through a Broadband connection, with port 8080 opened for incomming connections.&lt;br /&gt;
&lt;br /&gt;
The linux machine would effectively become a gateway and would pass information to/from the CPC through the serial connection.&lt;br /&gt;
&lt;br /&gt;
However, because the Contiki programs could not all fit into ram, this plan was shelved.&lt;br /&gt;
&lt;br /&gt;
The Amstrad version is based on Contiki v1.0.&lt;br /&gt;
&lt;br /&gt;
=== Later updates ===&lt;br /&gt;
&lt;br /&gt;
In 2014, and later in 2023, PulkoMandy updated the port to use a newer version of SDCC. The code generation has improved a lot, and some issues with the drawing code were solved to make it a lot less slow, and almost usable.&lt;br /&gt;
&lt;br /&gt;
To free more RAM, the kernel code was moved to an expansion ROM, leaving a lot more RAM for applications to be loaded. This should allow resuming the effort on porting the network applications. But there is still no driver for any CPC hardware to use with it for now.&lt;br /&gt;
&lt;br /&gt;
This version is based on the latest version of Contiki 1.2, with several updates that never made it into an official release of Contiki. The version 1 of Contiki is no longer developped, and version 2 has no desktop and windowing system.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.sics.se/contiki/about-contiki.html Official site of Contiki]&lt;br /&gt;
* [https://pulkomandy.tk/_/_/_Keeping%20Contiki%201.x%20alive New version 1.3 and 1.4]&lt;br /&gt;
* [http://www.cpctech.org.uk/download/contiki12.zip Contiki source code for Kevin Thacker's CPC version]&lt;br /&gt;
&lt;br /&gt;
[[Category:CPC GUI]]&lt;br /&gt;
[[Category:Operating System]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Contiki&amp;diff=110801</id>
		<title>Contiki</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Contiki&amp;diff=110801"/>
				<updated>2023-05-08T18:53:28Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Weblinks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is Contiki? ==&lt;br /&gt;
&lt;br /&gt;
(Text copied from the official Contiki website.)&lt;br /&gt;
&lt;br /&gt;
[[Image:contikic64.jpg|right|thumb|250px|Contiki running on the Commodore 64]]&lt;br /&gt;
&lt;br /&gt;
The Contiki operating system is a highly portable, minimalistic operating system for a variety of constrained systems ranging from modern 8-bit microcontrollers for embedded systems to old 8-bit homecomputers. Contiki provides a simple event driven kernel with optional preemptive multithreading, interprocess communication using message passing signals, a dynamic process structure and support for loading and unloading programs, native TCP/IP support using the uIP TCP/IP stack, and a graphical subsystem with either direct graphic support for directly connected terminals or networked virtual display with VNC or Telnet.&lt;br /&gt;
&lt;br /&gt;
Contiki was designed with very low hardware requirements. And can run on a unexpanded Commodore 64.&lt;br /&gt;
The portability is ensured by the core being written entirely in ANSI [[C]].&lt;br /&gt;
&lt;br /&gt;
== Efforts in porting Contiki to Amstrad CPC ==&lt;br /&gt;
&lt;br /&gt;
[[Image:contikicpc.jpg|right|thumb|250px|Contiki running on the Amstrad CPC]]&lt;br /&gt;
&lt;br /&gt;
Previously there have been attempts to port Contiki to the CPC. The first successful port was done by [[Kevin Thacker]]. &lt;br /&gt;
&lt;br /&gt;
This was accomplished by:&lt;br /&gt;
# Modifying the linker so that it could generate binary files with relocation data&lt;br /&gt;
# Modifying the optimiser rules to reduce the program size.&lt;br /&gt;
# Modifying the source so it produced smaller and better code for the [[SDCC]] compiler to work with.&lt;br /&gt;
&lt;br /&gt;
The nature of Contiki (written almost entirely in C) and the poor Z80 optimisation by the SDCC compiler makes Contiki slow compared to other operating systems. &lt;br /&gt;
The desktop routines in the Amstrad port relies on the slow [[firmware]] routines because it was quicker to make the port this way. &lt;br /&gt;
&lt;br /&gt;
The Amstrad port runs in 64k. It doesn't make use of any extra RAM, this choice was taken so that a quick port could be done to proove it was possible.&lt;br /&gt;
&lt;br /&gt;
A key feature of Contiki is its ability to access networks.&lt;br /&gt;
&lt;br /&gt;
Two reasons prevented this in the Amstrad port:&lt;br /&gt;
# The compiled binaries for the webserver and other network programs were large, meaning that at runtime, both the binaries and contiki OS code could not fit into the 64K ram at the  same time&lt;br /&gt;
# The networking hardware was not at a sufficiently developed stage.&lt;br /&gt;
&lt;br /&gt;
The original plan was to implement [[CPC Booster]] support in Contiki.&lt;br /&gt;
The CPC would be connected to the PC via a serial cable.&lt;br /&gt;
On the PC would be Linux running Slip or PPP.&lt;br /&gt;
The PC would be connected to the internet through a Broadband connection, with port 8080 opened for incomming connections.&lt;br /&gt;
&lt;br /&gt;
The linux machine would effectively become a gateway and would pass information to/from the CPC through the serial connection.&lt;br /&gt;
&lt;br /&gt;
However, because the Contiki programs could not all fit into ram, this plan was shelved.&lt;br /&gt;
&lt;br /&gt;
The Amstrad version is based on Contiki v1.0.&lt;br /&gt;
&lt;br /&gt;
=== Later updates ===&lt;br /&gt;
&lt;br /&gt;
In 2014, and later in 2023, PulkoMandy updated the port to use a newer version of SDCC. The code generation has improved a lot, and some issues with the drawing code were solved to make it a lot less slow, and almost usable.&lt;br /&gt;
&lt;br /&gt;
To free more RAM, the kernel code was moved to an expansion ROM, leaving a lot more RAM for applications to be loaded. This should allow resuming the effort on porting the network applications. But there is still no driver for any CPC hardware to use with it for now.&lt;br /&gt;
&lt;br /&gt;
This version is based on the latest version of Contiki 1.2, with several updates that never made it into an official release of Contiki. The version 1 of Contiki is no longer developped, and version 2 has no desktop and windowing system.&lt;br /&gt;
&lt;br /&gt;
== Other Operating Systems for the CPC ==&lt;br /&gt;
&lt;br /&gt;
* [[CP/M]]&lt;br /&gt;
&lt;br /&gt;
* [[FutureOS]]&lt;br /&gt;
&lt;br /&gt;
* [[SymbOS]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.sics.se/contiki/about-contiki.html Official site of Contiki]&lt;br /&gt;
* [https://pulkomandy.tk/_/_/_Keeping%20Contiki%201.x%20alive New version 1.3 and 1.4]&lt;br /&gt;
* [http://www.cpctech.org.uk/download/contiki12.zip Contiki source code for Kevin Thacker's CPC version]&lt;br /&gt;
&lt;br /&gt;
[[Category:CPC GUI]]&lt;br /&gt;
[[Category:Operating System]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Contiki&amp;diff=110800</id>
		<title>Contiki</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Contiki&amp;diff=110800"/>
				<updated>2023-05-08T18:52:31Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Efforts in porting Contiki to Amstrad CPC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is Contiki? ==&lt;br /&gt;
&lt;br /&gt;
(Text copied from the official Contiki website.)&lt;br /&gt;
&lt;br /&gt;
[[Image:contikic64.jpg|right|thumb|250px|Contiki running on the Commodore 64]]&lt;br /&gt;
&lt;br /&gt;
The Contiki operating system is a highly portable, minimalistic operating system for a variety of constrained systems ranging from modern 8-bit microcontrollers for embedded systems to old 8-bit homecomputers. Contiki provides a simple event driven kernel with optional preemptive multithreading, interprocess communication using message passing signals, a dynamic process structure and support for loading and unloading programs, native TCP/IP support using the uIP TCP/IP stack, and a graphical subsystem with either direct graphic support for directly connected terminals or networked virtual display with VNC or Telnet.&lt;br /&gt;
&lt;br /&gt;
Contiki was designed with very low hardware requirements. And can run on a unexpanded Commodore 64.&lt;br /&gt;
The portability is ensured by the core being written entirely in ANSI [[C]].&lt;br /&gt;
&lt;br /&gt;
== Efforts in porting Contiki to Amstrad CPC ==&lt;br /&gt;
&lt;br /&gt;
[[Image:contikicpc.jpg|right|thumb|250px|Contiki running on the Amstrad CPC]]&lt;br /&gt;
&lt;br /&gt;
Previously there have been attempts to port Contiki to the CPC. The first successful port was done by [[Kevin Thacker]]. &lt;br /&gt;
&lt;br /&gt;
This was accomplished by:&lt;br /&gt;
# Modifying the linker so that it could generate binary files with relocation data&lt;br /&gt;
# Modifying the optimiser rules to reduce the program size.&lt;br /&gt;
# Modifying the source so it produced smaller and better code for the [[SDCC]] compiler to work with.&lt;br /&gt;
&lt;br /&gt;
The nature of Contiki (written almost entirely in C) and the poor Z80 optimisation by the SDCC compiler makes Contiki slow compared to other operating systems. &lt;br /&gt;
The desktop routines in the Amstrad port relies on the slow [[firmware]] routines because it was quicker to make the port this way. &lt;br /&gt;
&lt;br /&gt;
The Amstrad port runs in 64k. It doesn't make use of any extra RAM, this choice was taken so that a quick port could be done to proove it was possible.&lt;br /&gt;
&lt;br /&gt;
A key feature of Contiki is its ability to access networks.&lt;br /&gt;
&lt;br /&gt;
Two reasons prevented this in the Amstrad port:&lt;br /&gt;
# The compiled binaries for the webserver and other network programs were large, meaning that at runtime, both the binaries and contiki OS code could not fit into the 64K ram at the  same time&lt;br /&gt;
# The networking hardware was not at a sufficiently developed stage.&lt;br /&gt;
&lt;br /&gt;
The original plan was to implement [[CPC Booster]] support in Contiki.&lt;br /&gt;
The CPC would be connected to the PC via a serial cable.&lt;br /&gt;
On the PC would be Linux running Slip or PPP.&lt;br /&gt;
The PC would be connected to the internet through a Broadband connection, with port 8080 opened for incomming connections.&lt;br /&gt;
&lt;br /&gt;
The linux machine would effectively become a gateway and would pass information to/from the CPC through the serial connection.&lt;br /&gt;
&lt;br /&gt;
However, because the Contiki programs could not all fit into ram, this plan was shelved.&lt;br /&gt;
&lt;br /&gt;
The Amstrad version is based on Contiki v1.0.&lt;br /&gt;
&lt;br /&gt;
=== Later updates ===&lt;br /&gt;
&lt;br /&gt;
In 2014, and later in 2023, PulkoMandy updated the port to use a newer version of SDCC. The code generation has improved a lot, and some issues with the drawing code were solved to make it a lot less slow, and almost usable.&lt;br /&gt;
&lt;br /&gt;
To free more RAM, the kernel code was moved to an expansion ROM, leaving a lot more RAM for applications to be loaded. This should allow resuming the effort on porting the network applications. But there is still no driver for any CPC hardware to use with it for now.&lt;br /&gt;
&lt;br /&gt;
This version is based on the latest version of Contiki 1.2, with several updates that never made it into an official release of Contiki. The version 1 of Contiki is no longer developped, and version 2 has no desktop and windowing system.&lt;br /&gt;
&lt;br /&gt;
== Other Operating Systems for the CPC ==&lt;br /&gt;
&lt;br /&gt;
* [[CP/M]]&lt;br /&gt;
&lt;br /&gt;
* [[FutureOS]]&lt;br /&gt;
&lt;br /&gt;
* [[SymbOS]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.sics.se/contiki/about-contiki.html Official site of Contiki]&lt;br /&gt;
* [https://github.com/pulkomandy/contiki-1.x/ New version 1.3]&lt;br /&gt;
* [http://www.cpctech.org.uk/download/contiki12.zip Contiki source code for CPC version]&lt;br /&gt;
&lt;br /&gt;
[[Category:CPC GUI]]&lt;br /&gt;
[[Category:Operating System]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=PulkoTronics&amp;diff=110741</id>
		<title>PulkoTronics</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=PulkoTronics&amp;diff=110741"/>
				<updated>2023-04-24T13:01:21Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PulkoTronics is an French group specialized in conception and construction of hardware extensions for CPC and other 80's area computer.&lt;br /&gt;
&lt;br /&gt;
== Members ==&lt;br /&gt;
* [[PulkoMandy]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
* [https://pulkomandy.github.io/shinra.github.io/nova.html Nova], Realtime clock and non-volatile memory&lt;br /&gt;
* [[FlashGordon]], a romboard derivated from the [[MegaFlash]].&lt;br /&gt;
* [[Albireo]], an USB/SD mass storage interface, a serial interface and an USB device interface.&lt;br /&gt;
* CPCSD, a very simple SD interface using printer port.&lt;br /&gt;
* AmiPS/2, a mouse adapter for Atari and Amiga.&lt;br /&gt;
* Willy, an adapter to use Serdaco's OPL3LPT and S2P soundcards&lt;br /&gt;
* Gemini, a RAM expansion of 1 or 2MB which can handle the ASIC page on Plus machines correctly&lt;br /&gt;
&lt;br /&gt;
And some other abandoned or stalling project.&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Gemini&amp;diff=109303</id>
		<title>Gemini</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Gemini&amp;diff=109303"/>
				<updated>2022-10-16T09:53:58Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: Created page with &amp;quot;Gemini is an 1MB RAM expansion for Amstrad Plus.  It uses an 1MB RAM chip and Atmel ATF22v10 chips (direct successor of the PAL used by Amstrad for the CPC6128).  Unlike other...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gemini is an 1MB RAM expansion for Amstrad Plus.&lt;br /&gt;
&lt;br /&gt;
It uses an 1MB RAM chip and Atmel ATF22v10 chips (direct successor of the PAL used by Amstrad for the CPC6128).&lt;br /&gt;
&lt;br /&gt;
Unlike other memory expansions, Gemini tracks the ASIC unlocking and mapping, and disables itself for the 4000-7FFF range when the ASIC is mapped there. This avoids memory corruptions for software that uses the ASIC and extended memory at the same time.&lt;br /&gt;
&lt;br /&gt;
[http://shinra.cpcscene.net/gemini.html Gemini expansion on Shinra website]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Standard_Memory_Expansions&amp;diff=109302</id>
		<title>Standard Memory Expansions</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Standard_Memory_Expansions&amp;diff=109302"/>
				<updated>2022-10-16T09:40:23Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Extended-Standard Expansions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''standard''' memory expansions are often credited to [[Dk'tronics]] and [[Dobbertin]] (not sure which company initially developed it though). There's also an '''extended standard''' which may be credited to probably [[RAM7]] (seen at least in comp.sys.amstrad.8bit FAQ v0.90, 11 september 1997) or [[Yarek]].&lt;br /&gt;
&lt;br /&gt;
== Technical ==&lt;br /&gt;
&lt;br /&gt;
The standard expansions are based on the RAM banking logic from the CPC6128. This is handled by a PAL16L8 but to the programmer it appears to be the fourth register in the [[Gate Array]].&lt;br /&gt;
&lt;br /&gt;
The I/O decoding is different to the Gate-Array.&lt;br /&gt;
* PAL16L8 decodes A15=0 only&lt;br /&gt;
* Gate-Array decodes A15=0 and A14=1&lt;br /&gt;
&lt;br /&gt;
To access the RAM and Gate-Array port 7fxx is used. In addition the RAM answers when the data has bit 7=1 and bit 6=1, which is unused in the Gate-Array. &lt;br /&gt;
&lt;br /&gt;
External expansions have their own PAL or hardware which performs the same operation. Later CPC revisions with the costdown ASIC and the Plus have the RAM expansion logic inside their ASICs.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Simple 64K Expansion (CPC6128-style) ===&lt;br /&gt;
&lt;br /&gt;
* Accessing a 64K expansion (or the first 64K of a bigger expansion) is compatible to the 128K in the CPC6128&lt;br /&gt;
* For full CPC6128 compatibility one may need some patches (eg. CP/M Plus will still refuse to work; because it &amp;quot;detects&amp;quot; the 128K by checking the BASIC ROMs version number)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Standard 128K-512K Expansions (dk'tronics/dobbertin-style) ===&lt;br /&gt;
&lt;br /&gt;
Expansions bigger than 64K combine the CPC6128-style mapping with some formerly unused bits in the value written to the RAM select:&lt;br /&gt;
&lt;br /&gt;
Port 7Fxxh:&lt;br /&gt;
  7-6  Must be both set to 1 &lt;br /&gt;
  5-3  Bank number in 64K units (for expansions bigger than 64K) (max = 512K)&lt;br /&gt;
  2.0  RAM configuration as on CPC6128 taken from the selected bank&lt;br /&gt;
&lt;br /&gt;
'''Caution''' - The 64K bank numbers don't always start at bank 0 (In the Dk'tronics 256K Silicon Disc, the 64K banks are numbered 4..7).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Extended 1M-4M Expansions (RAM7/Yarek-style) ===&lt;br /&gt;
&lt;br /&gt;
Expansions bigger than 512K extend that above standard. The LSBs of the 64K bank number is kept in D5-D3 data bits (as above), the MSBs of the 64K bank number are in A10-A8 address bits. Typically in inverted form (so the first 512K block is accessed via Port 7Fxxh, the next via 7Exxh, etc.&lt;br /&gt;
&lt;br /&gt;
  OUT [01111aaaxxxxxxxx],11bbbccc&lt;br /&gt;
  aaa  = upper bits of 64K bank selection (512K-step) (A8,A9,A10 bits)&lt;br /&gt;
  bbb  = lower bits of 64K bank selection (64K-step)  (D3,D4,D5 bits)&lt;br /&gt;
  ccc = configuration (as in CPC6128)&lt;br /&gt;
  xxxxxxxx = should be set so that it doesn't conflict with other ports (*)&lt;br /&gt;
&lt;br /&gt;
(*) For example 7B01h or 7B7Fh would be no good, because the FDC command register at FB7Fh is mirrored to these locations. Using 7B80h..7BFFh would fix that problem, but might conflict with other connected expansion hardware.&lt;br /&gt;
&lt;br /&gt;
* '''Compatibility''' - The first 512K (Port 7Fxxh) are fully compatible with dk'tronics. Using the next 1.5MB (Port 7Exxh,7Dxxh,7Cxxh) should work without conflicting with the other hardware expansions.&lt;br /&gt;
&lt;br /&gt;
* '''Compatibility Problems''' - The last 2MB (Port 7Bxxh,7Axxh,79xxh,78xxh) can conflict with other hardware. As workaround: Either leave them unused, or use values for &amp;quot;xx&amp;quot; that do not conflict with your hardware (which values are good for &amp;quot;xx&amp;quot; and which aren't good depends on what other hardware you have connected) (and obviously, different &amp;quot;xx&amp;quot; may be needed in 7Bxxh as in 7Axxh, for example).&lt;br /&gt;
&lt;br /&gt;
== Capacity ==&lt;br /&gt;
&lt;br /&gt;
Standard expansions can contain between 64K and 512K memory.&lt;br /&gt;
&lt;br /&gt;
* A '''nnK expansion''' adds '''nn Kbytes''' to the internal '''64 Kbytes''' in the CPC. So the resulting total size is '''nn+64 Kbytes'''.&lt;br /&gt;
* That '''nn+64 Kbytes''' formula does in most (or all) cases also apply on the '''CPC 6128''':&lt;br /&gt;
** only 64 Kbytes of it's internal memory are used&lt;br /&gt;
** the 2nd half of internal memory is disabled and replaced by the expansion RAM&lt;br /&gt;
** so, the resulting size is only nn+64 Kbytes, not nn+128 Kbytes&lt;br /&gt;
&lt;br /&gt;
== Standard Expansions ==&lt;br /&gt;
&lt;br /&gt;
* [[Dk'tronics memory expansion|Dk'tronics Memory Expansion and Silicon Disc]] - 64K and 256K expansions&lt;br /&gt;
* [[Dobbertin Memory Expansion]]&lt;br /&gt;
* [[RAM BOX]]&lt;br /&gt;
* [[SYMBiFACE II]] - includes (among others) 512K RAM expansion&lt;br /&gt;
* [[X-MEM]]&lt;br /&gt;
* [[Old_School_512K_RAM_Expansion]]&lt;br /&gt;
&lt;br /&gt;
== Extended-Standard Expansions ==&lt;br /&gt;
&lt;br /&gt;
* [[Gemini]] (Shinra - PulkoTronics) - compatible with standard 512 Kbyte expansion (plus extra extended-standard 512 Kbyte), also handles special case for Amstrad Plus ASIC&lt;br /&gt;
* [[RAM7 2MB memory expansion]] ([[RAM7]]) - compatible with standard 512 Kbyte expansion (plus extra extended-standard 1.5 MBbyte)&lt;br /&gt;
* [[CPC4MB]] ([[Yarek]]) (DIY) - compatible with standard 512 Kbyte expansion (plus extra extended-standard 3.5 MBbyte)&lt;br /&gt;
&lt;br /&gt;
== Semi-Standard Expansions ==&lt;br /&gt;
&lt;br /&gt;
* [[Aleste 520EX]] - a CPC clone that allows to access 256K (of its total 512K memory) in Inicron-style fashion (ie. as on a 64K computer with 192K expansion which can be mapped to 4000h..7FFFh).&lt;br /&gt;
* [[Inicron RAM-Box]] - not fully compatible with standard expansions (can map expansion RAM only to 4000h..7FFFh).&lt;br /&gt;
&lt;br /&gt;
== Non-Standard Expansions ==&lt;br /&gt;
&lt;br /&gt;
* [[c't 512 KB internal RAM expansion]] - works similar to dk'tronics expansions, but, alltogether, there isn't much compatibility between c't and dk'tronics.&lt;br /&gt;
* [[Otten &amp;amp; Fecht 1 MB RAM-Disc]] - Accessed through I/O ports (RAM is not mapped to memory)&lt;br /&gt;
* [[Vortex Expansions RAM card]] - an older expansion, uses 32K-banks, not compatible with the later standard&lt;br /&gt;
&lt;br /&gt;
== Expansions that are unknown how they work, and if they are standard or not ==&lt;br /&gt;
&lt;br /&gt;
* [[Data Media Memory Expansion]] - an older thing, said to be not dk'tronics compatible, nothing else known&lt;br /&gt;
* [[Phoenix M64]] - all unknown&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]][[Category:Memory expansions| ]][[Category:DATA Storage]][[Category:Expansion ROM]][[Category:Peripherals|*]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Peripherals&amp;diff=109301</id>
		<title>Peripherals</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Peripherals&amp;diff=109301"/>
				<updated>2022-10-16T09:37:42Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Memory Expansions / RAM discs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''You can also check the Category : Peripherals for a complete list of CPCwiki pages on the matter.'''&lt;br /&gt;
&lt;br /&gt;
* [[I/O Port Summary]]&lt;br /&gt;
&lt;br /&gt;
''Please try to keep things in alphabetical order.''&lt;br /&gt;
&lt;br /&gt;
== Built-in Peripherals ==&lt;br /&gt;
&lt;br /&gt;
=== Built-in Chipset ===&lt;br /&gt;
&lt;br /&gt;
* [[765 FDC]] - Floppy Disc Controller&lt;br /&gt;
* [[8255]] - PIO - I/O controller&lt;br /&gt;
* [[Arnold V Specs Revised]] - Arnold V (CPC+) Technical Specification&lt;br /&gt;
* [[AY-3-8912]] - Sound chip / keyboard controller&lt;br /&gt;
* [[CRTC]] - Video chip&lt;br /&gt;
* [[Gate Array]] - Custom chip (frequency generation, colors, bank switching)&lt;br /&gt;
* [[Power Supply for CPC and CPC plus]]&lt;br /&gt;
* [[Printer Port]]&lt;br /&gt;
&lt;br /&gt;
=== Built-in connectors: pinout ===&lt;br /&gt;
&lt;br /&gt;
* [[Connector:2nd disc drive (CPC664, CPC6128, CPC6128+)|2nd disc drive (CPC664, CPC6128, CPC6128+)]]&lt;br /&gt;
* [[Connector:Analogue joystick (CPC Plus only)|Analogue joystick (CPC Plus only)]]&lt;br /&gt;
* [[Connector:Aux socket (CPC Plus only)|Aux socket (CPC Plus only)]] (Lightgun)&lt;br /&gt;
* [[Connector:Cartridge Slot (CPC Plus only)|Cartridge Slot (CPC Plus only)]]&lt;br /&gt;
* [[Connector:Cassette recorder|Cassette recorder]]&lt;br /&gt;
* [[Connector:Digital joystick|Digital joystick]]&lt;br /&gt;
* [[Connector:Expansion port|Expansion port]]&lt;br /&gt;
* [[Connector:Monitor|Monitor]]&lt;br /&gt;
* [[Connector:Printer port|Printer port]]&lt;br /&gt;
* [[Connector:Stereo sound|Stereo sound]]&lt;br /&gt;
&lt;br /&gt;
=== Built-in Firmware ===&lt;br /&gt;
&lt;br /&gt;
* [[BIOS Functions]]&lt;br /&gt;
* [[Locomotive BASIC]] (reference for BASIC commands, functions and error messages)&lt;br /&gt;
* [[Technical information about Locomotive BASIC]] (encoding of BASIC programs in memory)&lt;br /&gt;
&lt;br /&gt;
== Co-processor Interfaces ==&lt;br /&gt;
* [[CPC-Cplink]] - a card and software libraries allowing Raspberry Pi, Arduino or other processors to be connected directly to the CPC&lt;br /&gt;
&lt;br /&gt;
== Data transfer ==&lt;br /&gt;
&lt;br /&gt;
=== Modems ===&lt;br /&gt;
&lt;br /&gt;
* [[Cirkit_Prestel_Link_Amstrad_Interface]] (acoustic coupler bundled with [[Cirkit serial interface]]) ([[Cirkit]])&lt;br /&gt;
* [[Commstar v21/23 modem]] ([[PACE]])&lt;br /&gt;
* [[Data Research CH301S modem]] (greek company)&lt;br /&gt;
* [[Digitelec DTL 2000/2100 Modem]]&lt;br /&gt;
* [[EPTA modem]] (sold by Greek mag ΕΠΤΑ)&lt;br /&gt;
* [[KDS Communicator 104]] (connects directly to expansion port) ([[KDS Electronics]])&lt;br /&gt;
* [[Loritel]] (for french Minitel) ([[Loriciel|Loriciels]])&lt;br /&gt;
* [[Mini-Max Modem|KDS Mini-Max Modem]] (connects via RS232 interface) ([[KDS Electronics]])&lt;br /&gt;
* [[MicroLink Dual-Speed Modem]] ([[MicroLink]]) [[File:Microlink.pdf|Mircolink Manual]] and [[File:Micronet.pdf|Micronet manual]], provided by ''Spookspring''&lt;br /&gt;
* [[MicroLink Multi-Speed Modem]] ([[MicroLink]])&lt;br /&gt;
* [[Nightingale_modem]] ([[PACE]])&lt;br /&gt;
* [[Schneider BTX Modul]] (for German Bildschirmtext) ([[Schneider]])&lt;br /&gt;
&lt;br /&gt;
=== Serial Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* ([[RS232|overview of RS232 interfaces]])&lt;br /&gt;
* [[Albireo]] (serial to USB on-board) ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[Aleste 520EX]] (a CPC clone with built-in RS232, intended for serial mouse) ([[Patisonic]])&lt;br /&gt;
* [[AMSSIO]] (four different versions) (RS232 interface) (DIY) (Martin Zacho)&lt;br /&gt;
* [[Amstrad Serial Interface]] ([[Amstrad]])&lt;br /&gt;
* [[Cirkit serial interface]] ([[Cirkit]])&lt;br /&gt;
* Cirkit twin-port serial interface (resold by [[Microstyle]])&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]] (modern multifunction expansion, including RS232)&lt;br /&gt;
* [[CPCI RS232 Interface]] (DIY) ([[CPC Schneider International Sonderheft]])&lt;br /&gt;
* [[Data Media Disc System]] (disc drive with built-in RS232 interface) ([[Data Media]])&lt;br /&gt;
* [[KDS Electronics Serial Interface|KDS Serial Interface]] ([[KDS Electronics]])&lt;br /&gt;
* [[Panda Electronics Communications Interface Unit]] (dual RS232 plus 8bit printer port) (Panda Electronics Ltd)&lt;br /&gt;
* [[RS-232 para Amstrad]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[SCA CPC Prolink]] ([[SCA Products]])&lt;br /&gt;
* [[Schneider RS232 Interface]] ([[Schneider]])&lt;br /&gt;
* [[Z80 STI RS232 interface]] compatible to the one before, DIY!&lt;br /&gt;
* [[Schneiderware V/24 Interface]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Simple RS232 for Printer usage]] (DIY) (one-directional, transmit only)&lt;br /&gt;
* [[Spectre Comms Serial Interface]] with Cage Comms software ([[Spectre Communications Ltd]])&lt;br /&gt;
* [[Vortex Disc Drives]] (disc drive/interface with optional RS232 port) ([[Vortex Computersysteme]])&lt;br /&gt;
* [[Z80-SIO dual ports RS232 interface for CPC (French)]] (DIY) (Philippe Lebel)&lt;br /&gt;
* [[Dual RS232]] ([[Timatic Systems]])&lt;br /&gt;
* [[USIFAC]] ([[ikonsgr]])&lt;br /&gt;
&lt;br /&gt;
=== Teletext ===&lt;br /&gt;
&lt;br /&gt;
* [[Teletext adaptor]] ([[Microtext Ltd.]])&lt;br /&gt;
* [[Volex TTX 2000a|Volex TTX 2000a Teletext-Telesoftware Adaptor]] (Volex Electronics)&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]]&lt;br /&gt;
* [[Virtual Net 96]] ([[Wizcat]])&lt;br /&gt;
* [[Soundplayer|Soundplayer+]] ([[Futurs']])&lt;br /&gt;
* [[Soundplayer|SoundplayerNG]] (DIY) ([[Futurs']])&lt;br /&gt;
* [[Red Box]] ([[General Information Systems]])&lt;br /&gt;
* [[CPC-ENet|CPC Ethernet Card]] ([[rpalmer]])&lt;br /&gt;
&lt;br /&gt;
== Digitizer / Scanner ==&lt;br /&gt;
&lt;br /&gt;
* [[ARA Video Digitizer]] ([[Jagot &amp;amp; Leon]])&lt;br /&gt;
* [[Electric Studio C6]] ([[Electric Studio]])&lt;br /&gt;
* [[Dart Scanner for DMP-Printers]] (the optics are attached to the printer head) ([[Dart Electronics]])&lt;br /&gt;
* [[Omni-Reader]] (Oberon International) (scanner with text recognition) (advert on ACU 1-1987, page 83)&lt;br /&gt;
* [[VIDI digitizer]] ([[Rombo Productions]])&lt;br /&gt;
&lt;br /&gt;
== Drives ==&lt;br /&gt;
&lt;br /&gt;
=== Disc Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[3½&amp;quot; &amp;amp; 5¼&amp;quot; Disk Drives]]&lt;br /&gt;
* [[Amstrad Disk Drive|Amstrad DDI-1 / FD-1 Disk Drive]] ([[Amstrad]])&lt;br /&gt;
* [[Cumana 3&amp;quot; Disk Drive]] ([[Cumana]])&lt;br /&gt;
* [[Data Media Disc System]] ([[Data Media]])&lt;br /&gt;
* [[Jasmin AM5D 5 &amp;quot;1/4 floppy drive]]&lt;br /&gt;
* [[KDS 5¼&amp;quot; Disc Drive]] ([[KDS Electronics]])&lt;br /&gt;
* [[TIMDISC 5¼&amp;quot; 2nd Disc Drive]] ([[Timatic Systems]])&lt;br /&gt;
* [[F1|Vortex Disc Drives]] ([[Vortex Computersysteme|Vortex]])&lt;br /&gt;
* [[Four floppy drives with Amstrad disc interface]]&lt;br /&gt;
&lt;br /&gt;
=== Exotic Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[Albireo]] (USB mass storage, SD card) ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[Codemasters CD]] (loads games from Audio CD via joystick port) ([[Codemasters]])&lt;br /&gt;
* [[X-Mass]] (IDE, uses Solid-state Disk-on-Module)&lt;br /&gt;
&lt;br /&gt;
=== Hard Disc Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[CPC-IDE]] (modern) (discontinued prototype)&lt;br /&gt;
* [[Dobbertin Harddisc]] ([[Dobbertin]])&lt;br /&gt;
* [[IDE8255]] internal/extrernal IDE/CF interface ([[Yarek]])&lt;br /&gt;
* [[SYMBiFACE II]] (modern) (IDE and various other features)&lt;br /&gt;
* [[Vortex Winchester Drive]] ([[Vortex Computersysteme|Vortex]])&lt;br /&gt;
* [[IDE/8255]] external IDE Interface ([[rpalmer]])&lt;br /&gt;
* [[UIDE Universal IDE adapter cards for Z-80 computers]] (modern) ([[JonB]])&lt;br /&gt;
* [[X-Mass]] (modern) (uses solid state Disk-On-Module) ([[TotO]])&lt;br /&gt;
&lt;br /&gt;
=== Drive Emulators ===&lt;br /&gt;
&lt;br /&gt;
* [[Gotek]]&lt;br /&gt;
* [[HxC Floppy Emulator]]&lt;br /&gt;
* [[SDiskEmul]]&lt;br /&gt;
* [[TFE Floppy Emulator]]&lt;br /&gt;
* [[VDrive]]&lt;br /&gt;
&lt;br /&gt;
== Hardware debuggers/Hacking devices ==&lt;br /&gt;
&lt;br /&gt;
* [[Action Replay]] (whatever snapshot) ([[Datel Electronics]])&lt;br /&gt;
* [[Demon Development Cartridge]] ([[John Morrison]])&lt;br /&gt;
* [[Disc Wizard]] (whatever snapshot) ([[Draysoft]]/[[Evesham Micros]])&lt;br /&gt;
* [[Draysoft Doubler|Doubler]] (external tape input, for tape-to-tape transfers) ([[Draysoft]]/[[Evesham Micros]])&lt;br /&gt;
* [[Hackit|Hackit / Le Hacker]] (allows to view RAM at 0040h..AF00h) ([[Siren Software]])&lt;br /&gt;
* [[Mirage Imager]] (RAM-only snapshot) (Mirage Microcomputer Limited)&lt;br /&gt;
* [[Multiface II]] (RAM-and-I/O snapshot) ([[Romantic Robot]])&lt;br /&gt;
* [[PDS development system]] (old devkit been used for commercial games) (PD Systems/Andy Glaister)&lt;br /&gt;
* [[RAM7 Cartridge Hacker]] (for CPC+/GX4000 cartridges) ([[RAM7]])&lt;br /&gt;
* [[Transtape]] (whatever snapshot) (Hard Micro)&lt;br /&gt;
&lt;br /&gt;
== Input devices ==&lt;br /&gt;
&lt;br /&gt;
=== Joysticks ===&lt;br /&gt;
&lt;br /&gt;
* [[Analog Joysticks]] (CPC Plus only)&lt;br /&gt;
* [[Digital Joysticks]]&lt;br /&gt;
* [[Amstrad JY-1/JY-2 joysticks]]&lt;br /&gt;
* [[Joystick Y-cables]]&lt;br /&gt;
&lt;br /&gt;
=== Light-Guns ===&lt;br /&gt;
&lt;br /&gt;
* [[Gunstick]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[Amstrad Magnum Phaser|Magnum Light Phaser]] ([[Amstrad]] and [[Trojan]])&lt;br /&gt;
* [[Trojan Light Phazer]] ([[Trojan]]) (CPC+)&lt;br /&gt;
* [[Loriciel Phaser (West Phaser)|West Phaser]] ([[Loriciel]])&lt;br /&gt;
&lt;br /&gt;
=== Light-Pens ===&lt;br /&gt;
&lt;br /&gt;
* [[Amstrad LP-1 light pen]] (Amstrad/Amsoft/Trojan) aka Trojan CAD-Master Lightpen (Trojan)&lt;br /&gt;
* [[ASS Light-Pen]] ([[ASS]])&lt;br /&gt;
* [[Dart Light Pen]] ([[Dart Electronics]])&lt;br /&gt;
* [[Datapen]] ([[Datapen Microtechnology Ltd]])&lt;br /&gt;
* [[dk'tronics Lightpen|Dk'tronics Light Pen]] ([[Dk'tronics]])&lt;br /&gt;
* [[Happy Computer Light Pen]] (DIY from german magazine)&lt;br /&gt;
* [[Light Pen Professional / Mark II (Electric Studio)|Light Pen Professional / Mark II]] ([[Electric Studio]])&lt;br /&gt;
* [[Lindy Light Pen]] ([[Lindy]])&lt;br /&gt;
&lt;br /&gt;
=== Mouse ===&lt;br /&gt;
&lt;br /&gt;
* [[Albireo]] with USB mouse ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[AMX Mouse]] (Advanced Memory Systems)&lt;br /&gt;
* [[PS2Mouse|AMX Compatible PS/2 and USB Mouse Adapter]] (DIY)&lt;br /&gt;
* [[Atari-ST mouse adapter]] (DIY) ([[Schneider Magazin]])&lt;br /&gt;
* [[dk'tronics Mouse Interface|Dk'tronics Mouse Interface]] ([[Dk'tronics]])&lt;br /&gt;
* [[CPC-Mousepack 2.0]] (Gerdes/Centaur/Reis-ware/ASS)&lt;br /&gt;
* [[Electric Studio Mouse]] ([[Electric Studio]])&lt;br /&gt;
* [[GEOS mouse|GEOS mouse]] ([[Commodore 64|C64]])&lt;br /&gt;
* [[Genius mouse]] ([[Datel Electronics]])&lt;br /&gt;
* [[Kempston Mouse]] (Kempston)&lt;br /&gt;
* [[Marconi|Marconi trackball]]&lt;br /&gt;
* [[Serial RS232 Mouse]]&lt;br /&gt;
* [[SYMBiFACE II:PS/2 mouse|PS/2 mouse]] of [[SYMBiFACE II]]&lt;br /&gt;
* [[Wireless mouse (DIY)]] (what is this?) (added 19 August 2006 by CPCLER)&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
* [[CPCKey|Attaching an AT keyboard to the CPC]]&lt;br /&gt;
* [[Grafpad II]] (Hegotron/British Micro/Grafsales)&lt;br /&gt;
* [[Graphiscop II]] (M.M.C.)&lt;br /&gt;
* [[Keyboard Membrane Repair/Replacement Guide|Keyboard Repair/Replacement]]&lt;br /&gt;
&lt;br /&gt;
== Memory expansions / ROM boxes ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Expansions / RAM discs ===&lt;br /&gt;
&lt;br /&gt;
* ([[Standard Memory Expansions]])&lt;br /&gt;
* [[ANTA 64K Memory Expansion]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[CPC4MB| CPC4MB - 4 MB memory expansion]] ([[Yarek]])&lt;br /&gt;
* [[c't 512 KB internal RAM expansion]] (DIY) (c't magazine)&lt;br /&gt;
* [[Data Media Memory Expansion]] ([[Data Media]])&lt;br /&gt;
* [[Dk'tronics memory expansion‎|Dk'tronics Memory Expansion and Silicon Disc]] ([[Dk'tronics]])&lt;br /&gt;
* [[Dobbertin Memory Expansion]] ([[Dobbertin]]) - 64 KB to 512 KB RAM&lt;br /&gt;
* [[Gemini]] (Shinra - PulkoTronics) - 1MB RAM&lt;br /&gt;
* [[Inicron RAM-Box]] (Inicron) - 512 KB RAM&lt;br /&gt;
* [[Old School 512K and 1MByte RAM Expansions]] (Revaldinho) - RAM expansions built with just SRAM and 74 Series standard logic&lt;br /&gt;
*[[Universal 512K and 1MByte RAM Expansions]] (Revaldinho) - RAM expansions enabling CPC464s to run FutureOS and other 6128 only software&lt;br /&gt;
* [[Otten &amp;amp; Fecht 1 MB RAM-Disc]] ([[Otten/Fecht]])&lt;br /&gt;
* [[Phoenix M64]] - 64 KB RAM&lt;br /&gt;
* [[RAM BOX]] 512 KB memory expansion&lt;br /&gt;
* [[RAM7 2MB memory expansion]] ([[RAM7]]) - 2 MB RAM&lt;br /&gt;
* [[SYMBiFACE II]] - 512 KB RAM&lt;br /&gt;
* [[Vortex Expansions RAM card]] ([[Vortex Computersysteme|Vortex]]) - 512 KB RAM&lt;br /&gt;
* [[X-MEM]] ([[TotO]]) - 512KB RAM and 512KB ROM&lt;br /&gt;
* [[Y-MEM]] ([[TotO]]) - 512KB RAM and 512KB ROM&lt;br /&gt;
* [[Z-MEM]] ([[TotO]]) - 1MB RAM&lt;br /&gt;
&lt;br /&gt;
=== ROM Box / ROM Board ===&lt;br /&gt;
&lt;br /&gt;
* [[ACU Romboard (DIY)|ACU Romboard]] (DIY) ([[Phil Craven]]/[[Amstrad Computer User|ACU]])&lt;br /&gt;
* [[ACU Romchanger]] (DIY) ([[Phil Craven]]/[[Amstrad Computer User|ACU]]) - a CPC6128 ROM (BIOS v3, BASIC v1.1) upgrade for the CPC464&lt;br /&gt;
* [[AD1 ROM Cartridge]] ([[Arnor]])&lt;br /&gt;
* [[AMRAM]] ([[Silicon Systems]])&lt;br /&gt;
* [[AMRAM2]] ([[Silicon Systems]])&lt;br /&gt;
* [[Amstrad ROM Expander]] (DIY) (Practical Electronics/Simon Dean)&lt;br /&gt;
* [[Britannia ROM Board]] aka ROM Plus ([[Britannia Software Ltd]])&lt;br /&gt;
* [[Campursoft_ROM_Board]]&lt;br /&gt;
* [[Cirkit HX-RX1 Rom Expansion Card]] ([[Cirkit]]) (what is this?) (added  3 September 2006 by Torn) (also listed on [[Hwlist from retroisle]])&lt;br /&gt;
* [[CPC.Flash]] internal/external 4MB ROM upgrade ([[Yarek]])&lt;br /&gt;
* [[CPC GX4000-Multi EPROM Cartridge]] Use a GX cartridge for modified ROM software&lt;br /&gt;
* [[Dobbertin EPROM 224]] ([[Dobbertin]])&lt;br /&gt;
* [[FlashGordon]] ([[PulkoTronics]]) 512 KB ROM simulator using Flash, in-system programmable&lt;br /&gt;
* [[Fleet EPROM Programmer|Fleet EPROM Programmer]] (F.Kup and Fleet Microsystems Ltd.)&lt;br /&gt;
* [[FO-DOS|FO-DOS Cartridge]] - a CPC6128 ROM (BIOS v3, BASIC v1.1) upgrade for the CPC464 ([[Duchet Computers]])&lt;br /&gt;
* [[Hexam]] ([[Ace Software]])&lt;br /&gt;
* [[Honeysoft ROM Board]] ([[HoneySoft]])&lt;br /&gt;
* [[Inicron ROM-RAM-Box]] (Inicron)&lt;br /&gt;
* [[John Morrison EPROM Programmer]] ([[John Morrison]])&lt;br /&gt;
* [[KDS Sideways ROM Board]] ([[KDS Electronics]])&lt;br /&gt;
* [[LowerROM]] ([[Bryce]])&lt;br /&gt;
* [[Maplin ROM Box]] ([[Maplin]])&lt;br /&gt;
* [[MegaFlash]] (DIY - Bryce) 512 KB ROM simulator using Flash, in-system programmable&lt;br /&gt;
* [[MegaROM]] (DIY - Bryce) 128K / 256K ROMBoard&lt;br /&gt;
* [[Microgenic ROM Board]] ([[Microgenic Systems]])&lt;br /&gt;
* [[Microgenic EPROM Programmer]] ([[Microgenic Systems]])&lt;br /&gt;
* [[Microstyle RAMROM]] ([[Microstyle]])&lt;br /&gt;
* [[Microstyle ROM Board Xtra]] ([[Microstyle]])&lt;br /&gt;
* [[POKROM]] (DIY) (Electronique Radio Plans, issue 517)&lt;br /&gt;
* [[Ramcard 128]] (a ROM emulator) ([[RAM7]])&lt;br /&gt;
* Revaldinho ROM cards - open source projects&lt;br /&gt;
** [https://github.com/revaldinho/cpc_ram_expansion/wiki/CPC-Eightrom-Card EightROM Card] - an all 74 series, through-hole ROM card&lt;br /&gt;
** [https://github.com/revaldinho/cpc_ram_expansion/wiki/CPC-Sixrom-Card SixROM Card ] - a CPLD based ROM card allowing application and firmware ROM replacement&lt;br /&gt;
* [[Rombo Rombox]] ([[Rombo Productions]])&lt;br /&gt;
* [[RomboRedux|Rombo Redux]] Remake of the Rombo Rombox (The Equalizor)&lt;br /&gt;
* [[Schneiderware EPROM Burner]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Schneiderware Pseudo ROM]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Sideways ram]] (Paul Townsend)&lt;br /&gt;
* [[SuperPower ROM Box]] ([[Micro Power Ltd.]])&lt;br /&gt;
* [[Universeller EPROM Programmer 4004]] ([[Dobbertin]])&lt;br /&gt;
* [[X-MEM]] ([[ACME]])&lt;br /&gt;
* [[X-ROM]] Eprom programmer and ROM Board ([[Timatic Systems]])&lt;br /&gt;
&lt;br /&gt;
== Monitors ==&lt;br /&gt;
* Computers [[monitor_compatible|compatible]] with Amstrad Monitors&lt;br /&gt;
* [[CM14|Amstrad CM14]] Colour Monitor (for CPC Plus)&lt;br /&gt;
* [[CTM640/CTM644|Amstrad CTM640/CTM644]] Color Monitor (for CPC 464/664/6128)&lt;br /&gt;
* [[GT64/GT65|Amstrad GT64/GT65]] Green Monitor (for CPC 464/664/6128)&lt;br /&gt;
* [[MM12|Amstrad MM12]] Monochrome Monitor (for CPC Plus)&lt;br /&gt;
* [[Amstrad MP1/MP2 modulator]]&lt;br /&gt;
* [[Amstrad MPV 001 modulator]] (Spanish MP1)&lt;br /&gt;
* [[MP2F|Amstrad MP-2F Scart Adapter]] (French MP2)&lt;br /&gt;
* [[MP-3|Amstrad MP-3 TV Tuner for CTM 644]]&lt;br /&gt;
* [[MPS Modulator]] Modulator made in Greece from MPS&lt;br /&gt;
* [[Dk'tronics TV Tuner]] ([[Dk'tronics]]) (similar to MP-3)&lt;br /&gt;
* [[Screenvision TV Tuner]] (Screens Microcomputers &amp;amp; Electronics Ltd.) (similar to MP-3)&lt;br /&gt;
* CPCI HF-modulator (CPC Schneider International 11/1986, Page 78ff. Someone please scan it, my issue lacks those pages!)&lt;br /&gt;
* [[TV SCART cable]] (DIY)&lt;br /&gt;
* [[LCD And Plasma TV Solution]] (DIY) - Composite Sync&lt;br /&gt;
* [[LCD monitor and LCD TV Solution (RGB)]] (DIY) - RGB (Scart, VGA, HDMI)&lt;br /&gt;
* [[Videomaster]] Modulator made in 1993 by Campursoft&lt;br /&gt;
&lt;br /&gt;
== Multi function expansions ==&lt;br /&gt;
&lt;br /&gt;
* [[Albireo]] ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]]&lt;br /&gt;
* [[CPCISA]] ([[Siou]])&lt;br /&gt;
* [[CPCMax!]]&lt;br /&gt;
* [[CPCX]]&lt;br /&gt;
* [[Full Expandable Interface]] ([[Timatic Systems]])&lt;br /&gt;
* [[PlayCity]]&lt;br /&gt;
* [[SYMBiFACE II]]&lt;br /&gt;
&lt;br /&gt;
== Printers ==&lt;br /&gt;
&lt;br /&gt;
* ([[8bit Printer Ports]])&lt;br /&gt;
* ([[Amstrad Printers]])&lt;br /&gt;
* [[DMP1]] printer ([[Amstrad]]) ([[Seikosha]] Unihammer printer)&lt;br /&gt;
* [[DMP2000]] printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 9-pin printer)&lt;br /&gt;
* [[DMP2160]] printer ([[Amstrad]]/[[Schneider]]) (fast version of DMP2000)&lt;br /&gt;
* [[DMP3000]] printer ([[Amstrad]]/[[Schneider]]) (gray PC-version of DMP2000 with more ROM/RAM and IBM charset)&lt;br /&gt;
* [[DMP3160]] printer ([[Amstrad]]/[[Schneider]]) (fast version of DMP3000)&lt;br /&gt;
* [[DMP3250]]di printer ([[Amstrad]]) (dual interface version of DMP3160) (centronics + RS232)&lt;br /&gt;
* [[DMP4000]] printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 9-pin 16&amp;quot; wide printer)&lt;br /&gt;
* [[LD6000]] laser printer ([[Amstrad GmbH]]) (re-badgered Sharp printer, for German market only)&lt;br /&gt;
* [[LQ3500]](di) printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 24-pin printer)&lt;br /&gt;
* [[LQ5000]]di printer ([[Amstrad]]) ([[Epson]]-compatible 24-pin 16&amp;quot; wide printer)&lt;br /&gt;
* [[Robotron 6313|EuroPrint FT80X, Robotron 6313, Präsident 6320]] (east German)&lt;br /&gt;
* [[NLQ401|Schneider NLQ401]] ([[Schneider]]) (custom 9-pin printer, German counterpart of the DMP1)&lt;br /&gt;
* [[Star Printers]] (Star Micronics Co., Ltd.)&lt;br /&gt;
&lt;br /&gt;
== Real Time Clocks ==&lt;br /&gt;
&lt;br /&gt;
* [[ACU Real Time Clock (DIY)|ACU Real Time Clock]] (DIY) (without year counter) ([[Amstrad Computer User|ACU]])&lt;br /&gt;
* [[Aleste 520EX]] (a CPC clone with built-in RTC) ([[Patisonic]])&lt;br /&gt;
* [[Real Time Clock|CPCI Real Time Clock]] (DIY) ([[CPC Schneider International Sonderheft]])&lt;br /&gt;
* [[Dk'tronics Real Time Clock]] ([[Dk'tronics]])&lt;br /&gt;
* [[Dobbertin Smart Watch]] (the RTC itself is inserted like a ROM) ([[Dobbertin]])&lt;br /&gt;
* [[Schneiderware Real Time Clock]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[SYMBiFACE_II:Realtime_clock|Realtime Clock]] of [[SYMBiFACE_II]] (modern RTC with bugged century counter)&lt;br /&gt;
* [[Realtime Clock of SYMBiFACE III]]&lt;br /&gt;
* [[uRTC-8 Universal RTC for Z80 computers]] (JonB)&lt;br /&gt;
* [[Nova]] ([[PulkoTronics]])&lt;br /&gt;
&lt;br /&gt;
== Synthesizer, sampler and music related ==&lt;br /&gt;
&lt;br /&gt;
* [[Amdrum]] (Playback) ([[Cheetah]])&lt;br /&gt;
* [[Amstrad SSA-1 Speech Synthesizer]] (Speech) ([[Amstrad]])&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]] (Stereo Sampling/Playback) ([[Antitec]]/[[Dirty Minds]])&lt;br /&gt;
* [[Datel Digital Sound Sampler]]/[[Datel Electronics]]&lt;br /&gt;
* [[Digiblaster]] (Playback) (DIY) (8-bit DAC on printer port) ([[CPC Amstrad International]])&lt;br /&gt;
* [[Soundplayer]] (8-bit mono playback) ([[Futurs']])&lt;br /&gt;
* [[Soundplayer|Soundplayer+]] (8-bit mono playback) ([[Futurs']])&lt;br /&gt;
* [[Soundplayer|SoundplayerNG]] (DIY) (8-bit mono playback) ([[Futurs']])&lt;br /&gt;
* [[Digivox sampler]] (EMM)&lt;br /&gt;
* [[Dk'tronics Speech Synthesizer]] (Speech) ([[Dk'tronics]])&lt;br /&gt;
* [[DHCP MIDI Interface]] (DHCP Electronics)&lt;br /&gt;
* [[EMR MIDI Interface]] (MIDI) ([[EMR|ElectroMusic Research]])&lt;br /&gt;
* [[FuturePlayer]] (modern MP3 playback, max 128kbps) (Hard: Dr.Zed, Soft: TFM)&lt;br /&gt;
* [[LambdaSpeak]]&lt;br /&gt;
* [[Maestro]] (Amplifier/Speakers) (Vanguard Leisure Ltd.)&lt;br /&gt;
* [[Magic Sound Board]] for [[Aleste 520EX]] (four channel DMA playback) ([[Patisonic]])&lt;br /&gt;
* [[Mini Interface for connection to MK5 MIDI Keyboard]] ([[Cheetah]])&lt;br /&gt;
* [[Music Machine]] (Sampling/Playback/MIDI) ([[Ram Electronics]])&lt;br /&gt;
* [[MHT Speech Synthesizer]] (Speech) ([[MHT Ingenieros]])&lt;br /&gt;
* [[Silicon Systems MIDI Interface]] ([[Silicon Systems]])&lt;br /&gt;
* [[Sound Blaster]] (Amplifier/Speakers) ([[Siren Software]])&lt;br /&gt;
* [[TechniMusique Synthetiseur Musical|TMPI Musical Synthesizer]] (12 voices) ([[TechniMusique]])&lt;br /&gt;
* [[TMPI speech synthesizer|TMPI Speech Synthesizer]] (Speech) ([[TechniMusique]])&lt;br /&gt;
* [[Unconventional use of hardware to produce sounds]]&lt;br /&gt;
&lt;br /&gt;
== Cartridge ==&lt;br /&gt;
&lt;br /&gt;
* [[C4CPC|C4CPC]]  a modern cartridge replacement for the Amstrad Plus range and the GX4000.&lt;br /&gt;
* [[Plus2CPC|Plus2CPC]]  an expansion board to add a Plus cartridge port to the standard CPC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
* [[RP-1 CPC 464 Diagnostic PCB]]&lt;br /&gt;
* 64 Kb Printer Buffer (DIY) (what is this?) (added 19 August 2006 by CPCLER)&lt;br /&gt;
* [[Ambug|Ambug Robot]] (DIY) ([[Magenta Electronics Ltd.]])&lt;br /&gt;
* [[Amstore]] (network with 20MB harddisk) (Northern Computers)&lt;br /&gt;
* [[Amstrad Autofire Interface and Combined Mouse Interface|Amstrad Autofire Interface and Combined Mouse Interface]] (Unknown firm??)&lt;br /&gt;
* Amstrad Expansion System Part 2 ([[Maplin]]) - appeared in Project book 19 (for Part 1 see [[Maplin ROM Box]])&lt;br /&gt;
* [[Amstrad CT-1 Radio/Alarm-Clock]] ([[Amstrad]])&lt;br /&gt;
* [[CPCISA]] ([[Siou]])&lt;br /&gt;
* [[Data Media Printerinterface]] (printer splitter for connecting 2 or 3 software-selectable printers to the CPC) ([[Data Media]])&lt;br /&gt;
* [[DCP Interpacks]] (DCP Microdevelopments)&lt;br /&gt;
* [[Dust Covers]]&lt;br /&gt;
* [[Fischertechnik Interface]] for use with the [[Fischertechnik Trainingsrobot]], the [[Fischertechnik Plotter/Scanner]], and the [[Fischertechnik Computing Experimental]] kit.&lt;br /&gt;
* [[HDCPC]] (what is this?) (added 21 August 2006 by 85.218.166.50) (according to [[Dobbertin Harddisc|this page]], HDCPC is a modern IDE harddisk interace, but it's unknown who developed that thing?)&lt;br /&gt;
* [[Hexam]] ([[ACE Software]])&lt;br /&gt;
* [[Jagot &amp;amp; Leon Interface Cards]] ([[Jagot &amp;amp; Leon]])&lt;br /&gt;
* [[KDS Power Controller]] (a box with eight relays) ([[KDS Electronics]])&lt;br /&gt;
* [[Kersten PC Emulator]]&lt;br /&gt;
* [[Maplins 8bit Input Port]] ([[Maplin]]) (among others for use with Maplin's Weather Satellite Decoder)&lt;br /&gt;
* [[Maplin ROM Box|Maplins 6x8bit Input/Output Port]] ([[Maplin]]) (an extension to Maplin's &amp;quot;Rombox&amp;quot; project)&lt;br /&gt;
* [[Maplins Weather Satellite Receiver]] ([[Maplin]])&lt;br /&gt;
* [[Oktett]] (multimeter/oscilloscope) ([[Otten/Fecht]])&lt;br /&gt;
* [[Peripheral Soft Reset]] (System BIOS Feature for Peripherals)&lt;br /&gt;
* [[Schneiderware]] (a series of [[ECB Bus]] based DIY projects that were released in [[CPC Schneider International]] magazine)&lt;br /&gt;
* [[Split Extension Connector|Cheetah Marketing Split Extension Connector]] ([[Cheetah]])&lt;br /&gt;
* Teleterminal 300s (reportedly &amp;quot;simulates&amp;quot; rs232; connects to printer port; for use with acoustic coupler, see review in CPCI 8-1985, page 55-56)&lt;br /&gt;
* [[Slomo]] A device to reduce the execution speed of the Amstrad CPC (also available for other machines) by [[Nidd Valley Micro Products]], Ltd. (UK)&lt;br /&gt;
&lt;br /&gt;
Some further (unsorted) peripherals are found here: [[Hwlist from retroisle]]. More DIYs are listed on [[Happy Computer (Schneider Sonderheft)]] (those german magazine articles aren't yet scanned).&lt;br /&gt;
&lt;br /&gt;
[[Category:Peripherals| ]][[Category:Hardware|*]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=PulkoTronics&amp;diff=108063</id>
		<title>PulkoTronics</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=PulkoTronics&amp;diff=108063"/>
				<updated>2021-05-17T21:10:03Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PulkoTronics is an French group specialized in conception and construction of hardware extensions for CPC and other 80's area computer.&lt;br /&gt;
&lt;br /&gt;
== Members ==&lt;br /&gt;
* [[PulkoMandy]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
* [https://pulkomandy.github.io/shinra.github.io/nova.html Nova], Realtime clock and non-volatile memory&lt;br /&gt;
* [[FlashGordon]], a romboard derivated from the [[MegaFlash]].&lt;br /&gt;
* [[Albireo]], an USB/SD mass storage interface, a serial interface and an USB device interface.&lt;br /&gt;
* CPCSD, a very simple SD interface using printer port.&lt;br /&gt;
* AmiPS/2, a mouse adapter for Atari and Amiga.&lt;br /&gt;
And some other abandoned or stalling project.&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Peripherals&amp;diff=108062</id>
		<title>Peripherals</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Peripherals&amp;diff=108062"/>
				<updated>2021-05-17T21:04:15Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Real Time Clocks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''You can also check the Category : Peripherals for a complete list of CPCwiki pages on the matter.'''&lt;br /&gt;
&lt;br /&gt;
* [[I/O Port Summary]]&lt;br /&gt;
&lt;br /&gt;
''Please try to keep things in alphabetical order.''&lt;br /&gt;
&lt;br /&gt;
== Built-in Peripherals ==&lt;br /&gt;
&lt;br /&gt;
=== Built-in Chipset ===&lt;br /&gt;
&lt;br /&gt;
* [[765 FDC]] - Floppy Disc Controller&lt;br /&gt;
* [[8255]] - PIO - I/O controller&lt;br /&gt;
* [[Arnold V Specs Revised]] - Arnold V (CPC+) Technical Specification&lt;br /&gt;
* [[AY-3-8912]] - Sound chip / keyboard controller&lt;br /&gt;
* [[CRTC]] - Video chip&lt;br /&gt;
* [[Gate Array]] - Custom chip (frequency generation, colors, bank switching)&lt;br /&gt;
* [[Power Supply for CPC and CPC plus]]&lt;br /&gt;
* [[Printer Port]]&lt;br /&gt;
&lt;br /&gt;
=== Built-in connectors: pinout ===&lt;br /&gt;
&lt;br /&gt;
* [[Connector:2nd disc drive (CPC664, CPC6128, CPC6128+)|2nd disc drive (CPC664, CPC6128, CPC6128+)]]&lt;br /&gt;
* [[Connector:Analogue joystick (CPC Plus only)|Analogue joystick (CPC Plus only)]]&lt;br /&gt;
* [[Connector:Aux socket (CPC Plus only)|Aux socket (CPC Plus only)]] (Lightgun)&lt;br /&gt;
* [[Connector:Cartridge Slot (CPC Plus only)|Cartridge Slot (CPC Plus only)]]&lt;br /&gt;
* [[Connector:Cassette recorder|Cassette recorder]]&lt;br /&gt;
* [[Connector:Digital joystick|Digital joystick]]&lt;br /&gt;
* [[Connector:Expansion port|Expansion port]]&lt;br /&gt;
* [[Connector:Monitor|Monitor]]&lt;br /&gt;
* [[Connector:Printer port|Printer port]]&lt;br /&gt;
* [[Connector:Stereo sound|Stereo sound]]&lt;br /&gt;
&lt;br /&gt;
=== Built-in Firmware ===&lt;br /&gt;
&lt;br /&gt;
* [[BIOS Functions]]&lt;br /&gt;
* [[Locomotive BASIC]] (reference for BASIC commands, functions and error messages)&lt;br /&gt;
* [[Technical information about Locomotive BASIC]] (encoding of BASIC programs in memory)&lt;br /&gt;
&lt;br /&gt;
== Co-processor Interfaces ==&lt;br /&gt;
* [[CPC-Cplink]] - a card and software libraries allowing Raspberry Pi, Arduino or other processors to be connected directly to the CPC&lt;br /&gt;
&lt;br /&gt;
== Data transfer ==&lt;br /&gt;
&lt;br /&gt;
=== Modems ===&lt;br /&gt;
&lt;br /&gt;
* [[Cirkit_Prestel_Link_Amstrad_Interface]] (acoustic coupler bundled with [[Cirkit serial interface]]) ([[Cirkit]])&lt;br /&gt;
* [[Commstar v21/23 modem]] ([[PACE]])&lt;br /&gt;
* [[Data Research CH301S modem]] (greek company)&lt;br /&gt;
* [[Digitelec DTL 2000/2100 Modem]]&lt;br /&gt;
* [[EPTA modem]] (sold by Greek mag ΕΠΤΑ)&lt;br /&gt;
* [[KDS Communicator 104]] (connects directly to expansion port) ([[KDS Electronics]])&lt;br /&gt;
* [[Loritel]] (for french Minitel) ([[Loriciel|Loriciels]])&lt;br /&gt;
* [[Mini-Max Modem|KDS Mini-Max Modem]] (connects via RS232 interface) ([[KDS Electronics]])&lt;br /&gt;
* [[MicroLink Dual-Speed Modem]] ([[MicroLink]]) [[File:Microlink.pdf|Mircolink Manual]] and [[File:Micronet.pdf|Micronet manual]], provided by ''Spookspring''&lt;br /&gt;
* [[MicroLink Multi-Speed Modem]] ([[MicroLink]])&lt;br /&gt;
* [[Nightingale_modem]] ([[PACE]])&lt;br /&gt;
* [[Schneider BTX Modul]] (for German Bildschirmtext) ([[Schneider]])&lt;br /&gt;
&lt;br /&gt;
=== Serial Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* ([[RS232|overview of RS232 interfaces]])&lt;br /&gt;
* [[Albireo]] (serial to USB on-board) ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[Aleste 520EX]] (a CPC clone with built-in RS232, intended for serial mouse) ([[Patisonic]])&lt;br /&gt;
* [[AMSSIO]] (four different versions) (RS232 interface) (DIY) (Martin Zacho)&lt;br /&gt;
* [[Amstrad Serial Interface]] ([[Amstrad]])&lt;br /&gt;
* [[Cirkit serial interface]] ([[Cirkit]])&lt;br /&gt;
* Cirkit twin-port serial interface (resold by [[Microstyle]])&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]] (modern multifunction expansion, including RS232)&lt;br /&gt;
* [[CPCI RS232 Interface]] (DIY) ([[CPC Schneider International Sonderheft]])&lt;br /&gt;
* [[Data Media Disc System]] (disc drive with built-in RS232 interface) ([[Data Media]])&lt;br /&gt;
* [[KDS Electronics Serial Interface|KDS Serial Interface]] ([[KDS Electronics]])&lt;br /&gt;
* [[Panda Electronics Communications Interface Unit]] (dual RS232 plus 8bit printer port) (Panda Electronics Ltd)&lt;br /&gt;
* [[RS-232 para Amstrad]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[SCA CPC Prolink]] ([[SCA Products]])&lt;br /&gt;
* [[Schneider RS232 Interface]] ([[Schneider]])&lt;br /&gt;
* [[Z80 STI RS232 interface]] compatible to the one before, DIY!&lt;br /&gt;
* [[Schneiderware V/24 Interface]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Simple RS232 for Printer usage]] (DIY) (one-directional, transmit only)&lt;br /&gt;
* [[Spectre Comms Serial Interface]] with Cage Comms software ([[Spectre Communications Ltd]])&lt;br /&gt;
* [[Vortex Disc Drives]] (disc drive/interface with optional RS232 port) ([[Vortex Computersysteme]])&lt;br /&gt;
* [[Z80-SIO dual ports RS232 interface for CPC (French)]] (DIY) (Philippe Lebel)&lt;br /&gt;
* [[Dual RS232]] ([[Timatic Systems]])&lt;br /&gt;
&lt;br /&gt;
=== Teletext ===&lt;br /&gt;
&lt;br /&gt;
* [[Teletext adaptor]] ([[Microtext Ltd.]])&lt;br /&gt;
* [[Volex TTX 2000a|Volex TTX 2000a Teletext-Telesoftware Adaptor]] (Volex Electronics)&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]]&lt;br /&gt;
* [[Virtual Net 96]] ([[Wizcat]])&lt;br /&gt;
* [[Red Box]] ([[General Information Systems]])&lt;br /&gt;
* [[CPC-ENet|CPC Ethernet Card]] ([[rpalmer]])&lt;br /&gt;
&lt;br /&gt;
== Digitizer / Scanner ==&lt;br /&gt;
&lt;br /&gt;
* [[ARA Video Digitizer]] ([[Jagot &amp;amp; Leon]])&lt;br /&gt;
* [[Electric Studio C6]] ([[Electric Studio]])&lt;br /&gt;
* [[Dart Scanner for DMP-Printers]] (the optics are attached to the printer head) ([[Dart Electronics]])&lt;br /&gt;
* [[Omni-Reader]] (Oberon International) (scanner with text recognition) (advert on ACU 1-1987, page 83)&lt;br /&gt;
* [[VIDI digitizer]] ([[Rombo Productions]])&lt;br /&gt;
&lt;br /&gt;
== Drives ==&lt;br /&gt;
&lt;br /&gt;
=== Disc Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[3½&amp;quot; &amp;amp; 5¼&amp;quot; Disk Drives]]&lt;br /&gt;
* [[Amstrad Disk Drive|Amstrad DDI-1 / FD-1 Disk Drive]] ([[Amstrad]])&lt;br /&gt;
* [[Cumana 3&amp;quot; Disk Drive]] ([[Cumana]])&lt;br /&gt;
* [[Data Media Disc System]] ([[Data Media]])&lt;br /&gt;
* [[Jasmin AM5D 5 &amp;quot;1/4 floppy drive]]&lt;br /&gt;
* [[KDS 5¼&amp;quot; Disc Drive]] ([[KDS Electronics]])&lt;br /&gt;
* [[TIMDISC 5¼&amp;quot; 2nd Disc Drive]] ([[Timatic Systems]])&lt;br /&gt;
* [[F1|Vortex Disc Drives]] ([[Vortex Computersysteme|Vortex]])&lt;br /&gt;
* [[Four floppy drives with Amstrad disc interface]]&lt;br /&gt;
&lt;br /&gt;
=== Exotic Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[Albireo]] (USB mass storage, SD card) ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[Codemasters CD]] (loads games from Audio CD via joystick port) ([[Codemasters]])&lt;br /&gt;
* [[X-Mass]] (IDE, uses Solid-state Disk-on-Module)&lt;br /&gt;
&lt;br /&gt;
=== Hard Disc Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[CPC-IDE]] (modern) (discontinued prototype)&lt;br /&gt;
* [[Dobbertin Harddisc]] ([[Dobbertin]])&lt;br /&gt;
* [[IDE8255]] internal/extrernal IDE/CF interface ([[Yarek]])&lt;br /&gt;
* [[SYMBiFACE II]] (modern) (IDE and various other features)&lt;br /&gt;
* [[Vortex Winchester Drive]] ([[Vortex Computersysteme|Vortex]])&lt;br /&gt;
* [[IDE/8255]] external IDE Interface ([[rpalmer]])&lt;br /&gt;
* [[UIDE Universal IDE adapter cards for Z-80 computers]] (modern) ([[JonB]])&lt;br /&gt;
* [[X-Mass]] (modern) (uses solid state Disk-On-Module) ([[TotO]])&lt;br /&gt;
&lt;br /&gt;
=== Drive Emulators ===&lt;br /&gt;
&lt;br /&gt;
* [[Gotek]]&lt;br /&gt;
* [[HxC Floppy Emulator]]&lt;br /&gt;
* [[SDiskEmul]]&lt;br /&gt;
* [[TFE Floppy Emulator]]&lt;br /&gt;
* [[VDrive]]&lt;br /&gt;
&lt;br /&gt;
== Hardware debuggers/Hacking devices ==&lt;br /&gt;
&lt;br /&gt;
* [[Action Replay]] (whatever snapshot) ([[Datel Electronics]])&lt;br /&gt;
* [[Demon Development Cartridge]] ([[John Morrison]])&lt;br /&gt;
* [[Disc Wizard]] (whatever snapshot) ([[Draysoft]]/[[Evesham Micros]])&lt;br /&gt;
* [[Draysoft Doubler|Doubler]] (external tape input, for tape-to-tape transfers) ([[Draysoft]]/[[Evesham Micros]])&lt;br /&gt;
* [[Hackit|Hackit / Le Hacker]] (allows to view RAM at 0040h..AF00h) ([[Siren Software]])&lt;br /&gt;
* [[Mirage Imager]] (RAM-only snapshot) (Mirage Microcomputer Limited)&lt;br /&gt;
* [[Multiface II]] (RAM-and-I/O snapshot) ([[Romantic Robot]])&lt;br /&gt;
* [[PDS development system]] (old devkit been used for commercial games) (PD Systems/Andy Glaister)&lt;br /&gt;
* [[RAM7 Cartridge Hacker]] (for CPC+/GX4000 cartridges) ([[RAM7]])&lt;br /&gt;
* [[Transtape]] (whatever snapshot) (Hard Micro)&lt;br /&gt;
&lt;br /&gt;
== Input devices ==&lt;br /&gt;
&lt;br /&gt;
=== Joysticks ===&lt;br /&gt;
&lt;br /&gt;
* [[Analog Joysticks]] (CPC Plus only)&lt;br /&gt;
* [[Digital Joysticks]]&lt;br /&gt;
* [[Amstrad JY-1/JY-2 joysticks]]&lt;br /&gt;
* [[Joystick Y-cables]]&lt;br /&gt;
&lt;br /&gt;
=== Light-Guns ===&lt;br /&gt;
&lt;br /&gt;
* [[Gunstick]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[Amstrad Magnum Phaser|Magnum Light Phaser]] ([[Amstrad]] and [[Trojan]])&lt;br /&gt;
* [[Trojan Light Phazer]] ([[Trojan]]) (CPC+)&lt;br /&gt;
* [[Loriciel Phaser (West Phaser)|West Phaser]] ([[Loriciel]])&lt;br /&gt;
&lt;br /&gt;
=== Light-Pens ===&lt;br /&gt;
&lt;br /&gt;
* [[Amstrad LP-1 light pen]] (Amstrad/Amsoft/Trojan) aka Trojan CAD-Master Lightpen (Trojan)&lt;br /&gt;
* [[ASS Light-Pen]] ([[ASS]])&lt;br /&gt;
* [[Dart Light Pen]] ([[Dart Electronics]])&lt;br /&gt;
* [[Datapen]] ([[Datapen Microtechnology Ltd]])&lt;br /&gt;
* [[dk'tronics Lightpen|Dk'tronics Light Pen]] ([[Dk'tronics]])&lt;br /&gt;
* [[Happy Computer Light Pen]] (DIY from german magazine)&lt;br /&gt;
* [[Light Pen Professional / Mark II (Electric Studio)|Light Pen Professional / Mark II]] ([[Electric Studio]])&lt;br /&gt;
* [[Lindy Light Pen]] ([[Lindy]])&lt;br /&gt;
&lt;br /&gt;
=== Mouse ===&lt;br /&gt;
&lt;br /&gt;
* [[Albireo]] with USB mouse ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[AMX Mouse]] (Advanced Memory Systems)&lt;br /&gt;
* [[PS2Mouse|AMX Compatible PS/2 and USB Mouse Adapter]] (DIY)&lt;br /&gt;
* [[Atari-ST mouse adapter]] (DIY) ([[Schneider Magazin]])&lt;br /&gt;
* [[dk'tronics Mouse Interface|Dk'tronics Mouse Interface]] ([[Dk'tronics]])&lt;br /&gt;
* [[CPC-Mousepack 2.0]] (Gerdes/Centaur/Reis-ware/ASS)&lt;br /&gt;
* [[Electric Studio Mouse]] ([[Electric Studio]])&lt;br /&gt;
* [[GEOS mouse|GEOS mouse]] ([[Commodore 64|C64]])&lt;br /&gt;
* [[Genius mouse]] ([[Datel Electronics]])&lt;br /&gt;
* [[Kempston Mouse]] (Kempston)&lt;br /&gt;
* [[Marconi|Marconi trackball]]&lt;br /&gt;
* [[Serial RS232 Mouse]]&lt;br /&gt;
* [[SYMBiFACE II:PS/2 mouse|PS/2 mouse]] of [[SYMBiFACE II]]&lt;br /&gt;
* [[Wireless mouse (DIY)]] (what is this?) (added 19 August 2006 by CPCLER)&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
* [[CPCKey|Attaching an AT keyboard to the CPC]]&lt;br /&gt;
* [[Grafpad II]] (Hegotron/British Micro/Grafsales)&lt;br /&gt;
* [[Graphiscop II]] (M.M.C.)&lt;br /&gt;
* [[Keyboard Membrane Repair/Replacement Guide|Keyboard Repair/Replacement]]&lt;br /&gt;
&lt;br /&gt;
== Memory expansions / ROM boxes ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Expansions / RAM discs ===&lt;br /&gt;
&lt;br /&gt;
* ([[Standard Memory Expansions]])&lt;br /&gt;
* [[ANTA 64K Memory Expansion]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[CPC4MB| CPC4MB - 4 MB memory expansion]] ([[Yarek]])&lt;br /&gt;
* [[c't 512 KB internal RAM expansion]] (DIY) (c't magazine)&lt;br /&gt;
* [[Data Media Memory Expansion]] ([[Data Media]])&lt;br /&gt;
* [[Dk'tronics memory expansion‎|Dk'tronics Memory Expansion and Silicon Disc]] ([[Dk'tronics]])&lt;br /&gt;
* [[Dobbertin Memory Expansion]] ([[Dobbertin]]) - 64 KB to 512 KB RAM&lt;br /&gt;
* [[Inicron RAM-Box]] (Inicron) - 512 KB RAM&lt;br /&gt;
* [[Old School 512K and 1MByte RAM Expansions]] (Revaldinho) - RAM expansions built with just SRAM and 74 Series standard logic&lt;br /&gt;
*[[Universal 512K and 1MByte RAM Expansions]] (Revaldinho) - RAM expansions enabling CPC464s to run FutureOS and other 6128 only software&lt;br /&gt;
* [[Otten &amp;amp; Fecht 1 MB RAM-Disc]] ([[Otten/Fecht]])&lt;br /&gt;
* [[Phoenix M64]] - 64 KB RAM&lt;br /&gt;
* [[RAM BOX]] 512 KB memory expansion&lt;br /&gt;
* [[RAM7 2MB memory expansion]] ([[RAM7]]) - 2 MB RAM&lt;br /&gt;
* [[SYMBiFACE II]] - 512 KB RAM&lt;br /&gt;
* [[Vortex Expansions RAM card]] ([[Vortex Computersysteme|Vortex]]) - 512 KB RAM&lt;br /&gt;
* [[X-MEM]] ([[TotO]]) - 512KB RAM and 512KB ROM&lt;br /&gt;
* [[Y-MEM]] ([[TotO]]) - 512KB RAM and 512KB ROM&lt;br /&gt;
* [[Z-MEM]] ([[TotO]]) - 1MB RAM&lt;br /&gt;
&lt;br /&gt;
=== ROM Box / ROM Board ===&lt;br /&gt;
&lt;br /&gt;
* [[ACU Romboard (DIY)|ACU Romboard]] (DIY) ([[Phil Craven]]/[[Amstrad Computer User|ACU]])&lt;br /&gt;
* [[ACU Romchanger]] (DIY) ([[Phil Craven]]/[[Amstrad Computer User|ACU]]) - a CPC6128 ROM (BIOS v3, BASIC v1.1) upgrade for the CPC464&lt;br /&gt;
* [[AD1 ROM Cartridge]] ([[Arnor]])&lt;br /&gt;
* [[AMRAM]] ([[Silicon Systems]])&lt;br /&gt;
* [[AMRAM2]] ([[Silicon Systems]])&lt;br /&gt;
* [[Amstrad ROM Expander]] (DIY) (Practical Electronics/Simon Dean)&lt;br /&gt;
* [[Britannia ROM Board]] aka ROM Plus ([[Britannia Software Ltd]])&lt;br /&gt;
* [[Campursoft_ROM_Board]]&lt;br /&gt;
* [[Cirkit HX-RX1 Rom Expansion Card]] ([[Cirkit]]) (what is this?) (added  3 September 2006 by Torn) (also listed on [[Hwlist from retroisle]])&lt;br /&gt;
* [[CPC.Flash]] internal/external 4MB ROM upgrade ([[Yarek]])&lt;br /&gt;
* [[CPC GX4000-Multi EPROM Cartridge]] Use a GX cartridge for modified ROM software&lt;br /&gt;
* [[Dobbertin EPROM 224]] ([[Dobbertin]])&lt;br /&gt;
* [[FlashGordon]] ([[PulkoTronics]]) 512 KB ROM simulator using Flash, in-system programmable&lt;br /&gt;
* [[Fleet EPROM Programmer|Fleet EPROM Programmer]] (F.Kup and Fleet Microsystems Ltd.)&lt;br /&gt;
* [[FO-DOS|FO-DOS Cartridge]] - a CPC6128 ROM (BIOS v3, BASIC v1.1) upgrade for the CPC464 ([[Duchet Computers]])&lt;br /&gt;
* [[Hexam]] ([[Ace Software]])&lt;br /&gt;
* [[Honeysoft ROM Board]] ([[HoneySoft]])&lt;br /&gt;
* [[Inicron ROM-RAM-Box]] (Inicron)&lt;br /&gt;
* [[John Morrison EPROM Programmer]] ([[John Morrison]])&lt;br /&gt;
* [[KDS Sideways ROM Board]] ([[KDS Electronics]])&lt;br /&gt;
* [[LowerROM]] ([[Bryce]])&lt;br /&gt;
* [[Maplin ROM Box]] ([[Maplin]])&lt;br /&gt;
* [[MegaFlash]] (DIY - Bryce) 512 KB ROM simulator using Flash, in-system programmable&lt;br /&gt;
* [[MegaROM]] (DIY - Bryce) 128K / 256K ROMBoard&lt;br /&gt;
* [[Microgenic ROM Board]] ([[Microgenic Systems]])&lt;br /&gt;
* [[Microgenic EPROM Programmer]] ([[Microgenic Systems]])&lt;br /&gt;
* [[Microstyle RAMROM]] ([[Microstyle]])&lt;br /&gt;
* [[Microstyle ROM Board Xtra]] ([[Microstyle]])&lt;br /&gt;
* [[POKROM]] (DIY) (Electronique Radio Plans, issue 517)&lt;br /&gt;
* [[Ramcard 128]] (a ROM emulator) ([[RAM7]])&lt;br /&gt;
* [[Rombo Rombox]] ([[Rombo Productions]])&lt;br /&gt;
* [[RomboRedux|Rombo Redux]] Remake of the Rombo Rombox (The Equalizor)&lt;br /&gt;
* [[Schneiderware EPROM Burner]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Schneiderware Pseudo ROM]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Sideways ram]] (Paul Townsend)&lt;br /&gt;
* [[SuperPower ROM Box]] ([[Micro Power Ltd.]])&lt;br /&gt;
* [[Universeller EPROM Programmer 4004]] ([[Dobbertin]])&lt;br /&gt;
* [[X-MEM]] ([[ACME]])&lt;br /&gt;
* [[X-ROM]] Eprom programmer and ROM Board ([[Timatic Systems]])&lt;br /&gt;
&lt;br /&gt;
== Monitors ==&lt;br /&gt;
* Computers [[monitor_compatible|compatible]] with Amstrad Monitors&lt;br /&gt;
* [[CM14|Amstrad CM14]] Colour Monitor (for CPC Plus)&lt;br /&gt;
* [[CTM640/CTM644|Amstrad CTM640/CTM644]] Color Monitor (for CPC 464/664/6128)&lt;br /&gt;
* [[GT64/GT65|Amstrad GT64/GT65]] Green Monitor (for CPC 464/664/6128)&lt;br /&gt;
* [[MM12|Amstrad MM12]] Monochrome Monitor (for CPC Plus)&lt;br /&gt;
* [[Amstrad MP1/MP2 modulator]]&lt;br /&gt;
* [[Amstrad MPV 001 modulator]] (Spanish MP1)&lt;br /&gt;
* [[MP2F|Amstrad MP-2F Scart Adapter]] (French MP2)&lt;br /&gt;
* [[MP-3|Amstrad MP-3 TV Tuner for CTM 644]]&lt;br /&gt;
* [[MPS Modulator]] Modulator made in Greece from MPS&lt;br /&gt;
* [[Dk'tronics TV Tuner]] ([[Dk'tronics]]) (similar to MP-3)&lt;br /&gt;
* [[Screenvision TV Tuner]] (Screens Microcomputers &amp;amp; Electronics Ltd.) (similar to MP-3)&lt;br /&gt;
* CPCI HF-modulator (CPC Schneider International 11/1986, Page 78ff. Someone please scan it, my issue lacks those pages!)&lt;br /&gt;
* [[TV SCART cable]] (DIY)&lt;br /&gt;
* [[LCD And Plasma TV Solution]] (DIY)&lt;br /&gt;
* [[Videomaster]] Modulator made in 1993 by Campursoft&lt;br /&gt;
&lt;br /&gt;
== Multi function expansions ==&lt;br /&gt;
&lt;br /&gt;
* [[Albireo]] ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]]&lt;br /&gt;
* [[CPCISA by Yarek]] ([[Yarek]])&lt;br /&gt;
* [[CPCMax!]]&lt;br /&gt;
* [[CPCX]]&lt;br /&gt;
* [[Full Expandable Interface]] ([[Timatic Systems]])&lt;br /&gt;
* [[PlayCity]]&lt;br /&gt;
* [[SYMBiFACE II]]&lt;br /&gt;
&lt;br /&gt;
== Printers ==&lt;br /&gt;
&lt;br /&gt;
* ([[8bit Printer Ports]])&lt;br /&gt;
* ([[Amstrad Printers]])&lt;br /&gt;
* [[DMP1]] printer ([[Amstrad]]) ([[Seikosha]] Unihammer printer)&lt;br /&gt;
* [[DMP2000]] printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 9-pin printer)&lt;br /&gt;
* [[DMP2160]] printer ([[Amstrad]]/[[Schneider]]) (fast version of DMP2000)&lt;br /&gt;
* [[DMP3000]] printer ([[Amstrad]]/[[Schneider]]) (gray PC-version of DMP2000 with more ROM/RAM and IBM charset)&lt;br /&gt;
* [[DMP3160]] printer ([[Amstrad]]/[[Schneider]]) (fast version of DMP3000)&lt;br /&gt;
* [[DMP3250]]di printer ([[Amstrad]]) (dual interface version of DMP3160) (centronics + RS232)&lt;br /&gt;
* [[DMP4000]] printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 9-pin 16&amp;quot; wide printer)&lt;br /&gt;
* [[LD6000]] laser printer ([[Amstrad GmbH]]) (re-badgered Sharp printer, for German market only)&lt;br /&gt;
* [[LQ3500]](di) printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 24-pin printer)&lt;br /&gt;
* [[LQ5000]]di printer ([[Amstrad]]) ([[Epson]]-compatible 24-pin 16&amp;quot; wide printer)&lt;br /&gt;
* [[Robotron 6313|EuroPrint FT80X, Robotron 6313, Präsident 6320]] (east German)&lt;br /&gt;
* [[NLQ401|Schneider NLQ401]] ([[Schneider]]) (custom 9-pin printer, German counterpart of the DMP1)&lt;br /&gt;
* [[Star Printers]] (Star Micronics Co., Ltd.)&lt;br /&gt;
&lt;br /&gt;
== Real Time Clocks ==&lt;br /&gt;
&lt;br /&gt;
* [[ACU Real Time Clock (DIY)|ACU Real Time Clock]] (DIY) (without year counter) ([[Amstrad Computer User|ACU]])&lt;br /&gt;
* [[Aleste 520EX]] (a CPC clone with built-in RTC) ([[Patisonic]])&lt;br /&gt;
* [[Real Time Clock|CPCI Real Time Clock]] (DIY) ([[CPC Schneider International Sonderheft]])&lt;br /&gt;
* [[Dk'tronics Real Time Clock]] ([[Dk'tronics]])&lt;br /&gt;
* [[Dobbertin Smart Watch]] (the RTC itself is inserted like a ROM) ([[Dobbertin]])&lt;br /&gt;
* [[Schneiderware Real Time Clock]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[SYMBiFACE_II:Realtime_clock|Realtime Clock]] of [[SYMBiFACE_II]] (modern RTC with bugged century counter)&lt;br /&gt;
* [[Realtime Clock of SYMBiFACE III]]&lt;br /&gt;
* [[uRTC-8 Universal RTC for Z80 computers]] (JonB)&lt;br /&gt;
* [https://pulkomandy.github.io/shinra.github.io/nova.html Nova] ([[PulkoTronics]])&lt;br /&gt;
&lt;br /&gt;
== Synthesizer, sampler and music related ==&lt;br /&gt;
&lt;br /&gt;
* [[Amdrum]] (Playback) ([[Cheetah]])&lt;br /&gt;
* [[Amstrad SSA-1 Speech Synthesizer]] (Speech) ([[Amstrad]])&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]] (Stereo Sampling/Playback) ([[Antitec]]/[[Dirty Minds]])&lt;br /&gt;
* [[Datel Digital Sound Sampler]]/[[Datel Electronics]]&lt;br /&gt;
* [[Digiblaster]] (Playback) (DIY) (8bit DAC on printer port) ([[CPC Amstrad International]])&lt;br /&gt;
* [[Digivox sampler]] (EMM)&lt;br /&gt;
* [[Dk'tronics Speech Synthesizer]] (Speech) ([[Dk'tronics]])&lt;br /&gt;
* [[DHCP MIDI Interface]] (DHCP Electronics)&lt;br /&gt;
* [[EMR MIDI Interface]] (MIDI) ([[EMR|ElectroMusic Research]])&lt;br /&gt;
* [[FuturePlayer]] (modern MP3 playback, max 128kbps) (Hard: Dr.Zed, Soft: TFM)&lt;br /&gt;
* [[LambdaSpeak]]&lt;br /&gt;
* [[Maestro]] (Amplifier/Speakers) (Vanguard Leisure Ltd.)&lt;br /&gt;
* [[Magic Sound Board]] for [[Aleste 520EX]] (four channel DMA playback) ([[Patisonic]])&lt;br /&gt;
* [[Mini Interface for connection to MK5 MIDI Keyboard]] ([[Cheetah]])&lt;br /&gt;
* [[Music Machine]] (Sampling/Playback/MIDI) ([[Ram Electronics]])&lt;br /&gt;
* [[MHT Speech Synthesizer]] (Speech) ([[MHT Ingenieros]])&lt;br /&gt;
* [[Silicon Systems MIDI Interface]] ([[Silicon Systems]])&lt;br /&gt;
* [[Sound Blaster]] (Amplifier/Speakers) ([[Siren Software]])&lt;br /&gt;
* [[Soundplayer]] (many different versions exist) (Playback) ([[Futurs']])&lt;br /&gt;
* [[TechniMusique Synthetiseur Musical|TMPI Musical Synthesizer]] (12 voices) ([[TechniMusique]])&lt;br /&gt;
* [[TMPI speech synthesizer|TMPI Speech Synthesizer]] (Speech) ([[TechniMusique]])&lt;br /&gt;
* [[Unconventional use of hardware to produce sounds]]&lt;br /&gt;
&lt;br /&gt;
== Cartridge ==&lt;br /&gt;
&lt;br /&gt;
* [[C4CPC|C4CPC]]  a modern cartridge replacement for the Amstrad Plus range and the GX4000.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
* [[RP-1 CPC 464 Diagnostic PCB]]&lt;br /&gt;
* 64 Kb Printer Buffer (DIY) (what is this?) (added 19 August 2006 by CPCLER)&lt;br /&gt;
* [[Ambug|Ambug Robot]] (DIY) ([[Magenta Electronics Ltd.]])&lt;br /&gt;
* [[Amstore]] (network with 20MB harddisk) (Northern Computers)&lt;br /&gt;
* [[Amstrad Autofire Interface and Combined Mouse Interface|Amstrad Autofire Interface and Combined Mouse Interface]] (Unknown firm??)&lt;br /&gt;
* Amstrad Expansion System Part 2 ([[Maplin]]) - appeared in Project book 19 (for Part 1 see [[Maplin ROM Box]])&lt;br /&gt;
* [[Amstrad CT-1 Radio/Alarm-Clock]] ([[Amstrad]])&lt;br /&gt;
* [[CPCISA by Yarek|CPCISA]] ([[Yarek]])&lt;br /&gt;
* [[Data Media Printerinterface]] (printer splitter for connecting 2 or 3 software-selectable printers to the CPC) ([[Data Media]])&lt;br /&gt;
* [[DCP Interpacks]] (DCP Microdevelopments)&lt;br /&gt;
* [[Dust Covers]]&lt;br /&gt;
* [[Fischertechnik Interface]] for use with the [[Fischertechnik Trainingsrobot]], the [[Fischertechnik Plotter/Scanner]], and the [[Fischertechnik Computing Experimental]] kit.&lt;br /&gt;
* [[HDCPC]] (what is this?) (added 21 August 2006 by 85.218.166.50) (according to [[Dobbertin Harddisc|this page]], HDCPC is a modern IDE harddisk interace, but it's unknown who developed that thing?)&lt;br /&gt;
* [[Hexam]] ([[ACE Software]])&lt;br /&gt;
* [[Jagot &amp;amp; Leon Interface Cards]] ([[Jagot &amp;amp; Leon]])&lt;br /&gt;
* [[KDS Power Controller]] (a box with eight relays) ([[KDS Electronics]])&lt;br /&gt;
* [[Kersten PC Emulator]]&lt;br /&gt;
* [[Maplins 8bit Input Port]] ([[Maplin]]) (among others for use with Maplin's Weather Satellite Decoder)&lt;br /&gt;
* [[Maplin ROM Box|Maplins 6x8bit Input/Output Port]] ([[Maplin]]) (an extension to Maplin's &amp;quot;Rombox&amp;quot; project)&lt;br /&gt;
* [[Maplins Weather Satellite Receiver]] ([[Maplin]])&lt;br /&gt;
* [[Oktett]] (multimeter/oscilloscope) ([[Otten/Fecht]])&lt;br /&gt;
* [[Peripheral Soft Reset]] (System BIOS Feature for Peripherals)&lt;br /&gt;
* [[Schneiderware]] (a series of [[ECB Bus]] based DIY projects that were released in [[CPC Schneider International]] magazine)&lt;br /&gt;
* [[Split Extension Connector|Cheetah Marketing Split Extension Connector]] ([[Cheetah]])&lt;br /&gt;
* Teleterminal 300s (reportedly &amp;quot;simulates&amp;quot; rs232; connects to printer port; for use with acoustic coupler, see review in CPCI 8-1985, page 55-56)&lt;br /&gt;
* [[Slomo]] A device to reduce the execution speed of the Amstrad CPC (also available for other machines) by [[Nidd Valley Micro Products]], Ltd. (UK)&lt;br /&gt;
&lt;br /&gt;
Some further (unsorted) peripherals are found here: [[Hwlist from retroisle]]. More DIYs are listed on [[Happy Computer (Schneider Sonderheft)]] (those german magazine articles aren't yet scanned).&lt;br /&gt;
&lt;br /&gt;
[[Category:Peripherals| ]][[Category:Hardware|*]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=I/O_Port_Summary&amp;diff=107263</id>
		<title>I/O Port Summary</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=I/O_Port_Summary&amp;diff=107263"/>
				<updated>2020-11-15T07:16:24Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* I/O Port Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
== I/O Port Summary ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''I/O'''||'''Decoded as'''||'''Port'''||'''Read'''||'''Write''' &lt;br /&gt;
|-&lt;br /&gt;
|#1C00||%x0xxxx00 xxxxxxxx||[[Dk'tronics Lightpen]] faulty mirror of #BCXX [[CRTC]] Index|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#1F00||%x0xxxx11 xxxxxxxx||[[Dk'tronics Lightpen]] faulty mirror of #BFXX [[CRTC]] Data In|| Read || -&lt;br /&gt;
|-&lt;br /&gt;
|#78XX||%0xxxx000 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#79XX||%0xxxx001 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7AXX||%0xxxx010 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7BXX||%0xxxx011 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7CXX||%0xxxx100 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7CXX||%0xxxxx00 xxxxxxxx||[[Aleste 520EX]] RAM Mapper page 0 (extended &amp;quot;Gate Array 3&amp;quot;)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7DXX||%0xxxx101 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7DXX||%0xxxxx01 xxxxxxxx||[[Aleste 520EX]] RAM Mapper page 1 (extended &amp;quot;Gate Array 3&amp;quot;)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7EXX||%0xxxx110 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7EXX||%0xxxxx10 xxxxxxxx||[[Aleste 520EX]] RAM Mapper page 2 (extended &amp;quot;Gate Array 3&amp;quot;)||Read||Write&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|#7EXX||%0xxxxxx0 xxxxxxxx||[[Y-MEM]] 512K RAM Expansion part||Read||Write&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||%0xxxx111 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||%0xxxxx11 xxxxxxxx||[[Aleste 520EX]] RAM Mapper page 3 (extended &amp;quot;Gate Array 3&amp;quot;)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|#7FXX||%0xxxxxx1 xxxxxxxx||[[X-MEM]] 512K RAM Expansion part||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||?||[[Dk'tronics memory expansion]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||?||[[Dobbertin Memory Expansion]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||%01xxxxxx xxxxxxxx||[[Gate Array]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||%0xxxxxxx xxxxxxxx||[[PAL16L8]] extension to [[Gate Array]] for 128K RAM banking||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#BCXX||%x0xxxx00 xxxxxxxx||6845 [[CRTC]] Index|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#BDXX||%x0xxxx01 xxxxxxxx||6845 [[CRTC]] Data Out|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#BEXX||%x0xxxx10 xxxxxxxx||6845 [[CRTC]] Status (as far as supported)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#BFXX||%x0xxxx11 xxxxxxxx||6845 [[CRTC]] Data In (as far as supported)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#DFXX||%xx0xxxxx xxxxxxxx||[[Upper ROM Bank Number]] (as decoded within CPC664, CPC6128, 464+, 6128+, decoding in ROM expansions may be different)|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#ECXX||%xxx0xx00 xxxxxxxx||[[KC Compact]] CIO Port B (timer)|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EDXX||%xxx0xx01 xxxxxxxx||[[KC Compact]] CIO Port C (timer)|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EEXX||%xxx0xx10 xxxxxxxx||[[KC Compact]] CIO Control|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EEXX||%xxx0xxx0 xxxxxxxx||[[Aleste 520EX]] USART 8251 (RS232/Mouse) Data|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EFXX||%xxx0xx11 xxxxxxxx||[[KC Compact]] CIO Port A (Bi-drectional [[Printer Port]])|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EFXX||%xxx0xxx1 xxxxxxxx||[[Aleste 520EX]] USART 8251 (RS232/Mouse) Control/Status|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EFXX||%xxx0xxxx xxxxxxxx||[[Printer Port]]|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F0E0||?||[[Draysoft Doubler]] External Tape Data Input (Bit5)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F4XX||%xxxx0x00 xxxxxxxx||[[8255]] PIO Port A ([[PSG]] Data)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F5XX||%xxxx0x01 xxxxxxxx||[[8255]] PIO Port B (Vsync,[[Printer Port|PrnBusy]],Tape,etc.)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F6XX||%xxxx0x10 xxxxxxxx||[[8255]] PIO Port C (KeybRow,Tape,[[PSG]] Control)|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F7XX||%xxxx0x11 xxxxxxxx||[[8255]] PIO Control-Register|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F880-#F88F||%1111100x 1000xxxx||[[PlayCity]] Expansion CTC channels and YMZ data|| - || Write &lt;br /&gt;
|-&lt;br /&gt;
|#F890-#F89F||%1111100x 1001xxxx||[[MultiPlay]] Expansion|| Read || - &lt;br /&gt;
|-&lt;br /&gt;
|#F8A0-#F8AF||%11111000 1010xxxx||[[X-CPC]] ClockPort RTC|| Read || Write &lt;br /&gt;
|-&lt;br /&gt;
|#F8B0||?||[[VIDI digitizer|Vidi-CPC Video-Digitiser]], CRTC Index||?||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8B1||?||[[VIDI digitizer|Vidi-CPC Video-Digitiser]], CRTC Data||?||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8DC||?||[[CPCI RS232 Interface|CPCI Serial Interface]] MC6850 Control/Status||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8DD||?||[[CPCI RS232 Interface|CPCI Serial Interface]] MC6850 Data||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E0||?||[[DHCP MIDI Interface]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E0||%11111000 11100000||[[Schneider RS232 Interface]] Z80-STI Indirect Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E1||%11111000 11100001||[[Schneider RS232 Interface]] Z80-STI General Purpose I/O Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E2||%11111000 11100010||[[Schneider RS232 Interface]] Z80-STI Interrupt Pending Register B (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E2||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E3||%11111000 11100011||[[Schneider RS232 Interface]] Z80-STI Interrupt Pending Register A (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E3||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E4||%11111000 11100100||[[Schneider RS232 Interface]] Z80-STI Interrupt in-Service Register B (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E4||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E5||%11111000 11100101||[[Schneider RS232 Interface]] Z80-STI Interrupt in-Service Register A (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E6||%11111000 11100110||[[Schneider RS232 Interface]] Z80-STI Interrupt Mask Register B (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E6||?||Port A - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E7||%11111000 11100111||[[Schneider RS232 Interface]] Z80-STI Interrupt Mask Register A (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E7||?||Port C - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E8||%11111000 11101000||[[Schneider RS232 Interface]] Z80-STI Indirect Index and Interrupt Vector Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E8||?||[[Music Machine]] Interrupt Sel|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E9||%11111000 11101001||[[Schneider RS232 Interface]] Z80-STI Timers A and B Control Register (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EA||%11111000 11101010||[[Schneider RS232 Interface]] Z80-STI Timer B Data Register (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EB||%11111000 11101011||[[Schneider RS232 Interface]] Z80-STI Timer A Data Register (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EC||%11111000 11101100||[[Schneider RS232 Interface]] Z80-STI USART Control Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EC||?||[[Music Machine]] ACIA Control|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8ED||?||[[Music Machine]] ACIA Data Write|| - || Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8ED||%11111000 11101101||[[Schneider RS232 Interface]] Z80-STI Receiver Status Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EE||?||[[Music Machine]] ACIA Status||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F8EE||%11111000 11101110||[[Schneider RS232 Interface]] Z80-STI Transmitter Status Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EF||%11111000 11101111||[[Schneider RS232 Interface]] Z80-STI USART Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EF||?||[[Music Machine]] ACIA Data Read||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F8FX||%xxxxx0xx 1111NNNx||[[Maplins 8bit Input Port]] and [[Maplins Weather Satellite Receiver]]||Read|| -&lt;br /&gt;
|-&lt;br /&gt;
|#F8F0||?||[[Music Machine]] DAC Write|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8F2||?||[[EMR MIDI Interface]]|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8F2||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|#F8F2||?||[[EMR MIDI Interface]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8F4||?||[[Music Machine]] ADC Read||Read|| - &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|#F8F5||?||[[ARA Video Digitizer]] - Read Sync Signal (bit0)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F8F8||?||[[Music Machine]] ADC Start|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8F8||?||[[ANTA 64K Memory Expansion]] ANTA 64k.3 latch||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8FE||%11111000 11111110||[[Z-MEM]] Software Memory Configuration|| - || Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8FF||%1111100x 111xxxxx||[[CPCISA by Yarek|CPCISA control port]]|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8FF||%xxxxx0xx 111111xx||[[Peripheral Soft Reset]] (MC_BOOT_PROGRAM and MC_START_PROGRAM do OUT [F8FF],FF)|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F980-#F98F||%1111100x 1000xxxx||[[PlayCity]] Expansion CTC channels (mirror) and YMZ registers|| - || Write&lt;br /&gt;
|-&lt;br /&gt;
|#F990-#F99F||%1111100x 1001xxxx||[[MultiPlay]] Expansion (mirror)|| Read || - &lt;br /&gt;
|-&lt;br /&gt;
|#F9A0-#F9AF||%11111001 1010xxxx||[[X-CPC]] ClockPort SPR|| Read || Write &lt;br /&gt;
|-&lt;br /&gt;
|#F9B0||?||[[VIDI digitizer|Vidi-CPC Video-Digitiser]], Config (W) and Capture Data (R)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9D0||%11111000 11010000||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] SwinSID1 + SwinSID2 DATA (MONO Mode / 3 Channels)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9D1||%11111000 11010001||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] SwinSID1 (LEFT) DATA (STEREO Mode / 6 Channels)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9D2||%11111000 11010010||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] SwinSID2 (RIGHT) DATA (STEREO Mode / 6 Channels)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9DC||?||[[Panda Electronics Communications Interface Unit]] PPI Port A - 8bit Printer data||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9DD||?||[[Panda Electronics Communications Interface Unit]] PPI Port B - 8bit general purpose I/O port||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9DE||?||[[Panda Electronics Communications Interface Unit]] PPI Port C - Handshake (bit0=Strobe.out, Bit5=Busy.in)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9DF||?||[[Panda Electronics Communications Interface Unit]] PPI Control - 8bit Printer data|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9E6||?||Port B - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F9E7||?||RS Port - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F9F5||?||[[ARA Video Digitizer]] - Reset 10bit Config Value|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9F7||?||[[Grafpad II|Hegotron grafpad II]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F9FC - #F9FE||?||[[Otten &amp;amp; Fecht 1 MB RAM-Disc]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9FF||?||[[Grafpad II|Hegotron grafpad II]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FA7E||%xxxxx0x0 0xxxxxxx||Floppy Motor Control (for [[765 FDC]])|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABC||%xxxxx0x0 10xxxx00||[[Aleste 520EX]] EXTPORT with CS53: Forward PPI Port A to 8253 Timer 0|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABD||%xxxxx0x0 10xxxx01||[[Aleste 520EX]] EXTPORT with CS53: Forward PPI Port A to 8253 Timer 1|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABE||%xxxxx0x0 10xxxx10||[[Aleste 520EX]] EXTPORT with CS53: Forward PPI Port A to 8253 Timer 2|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABF||%xxxxx0x0 10xxxx11||[[Aleste 520EX]] EXTPORT with CS53: Forward PPI Port A to 8253 Control|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABF||%xxxxx0x0 10xxxxxx||[[Aleste 520EX]] EXTPORT (config for internal hardware)|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAD0||%11111010 11010000||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] Select SID (1&amp;amp;2) Register MONO mode||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAD1||%11111010 11010001||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] Select SID1 Register||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAD2||%11111010 11010010||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] Select SID2 Register||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADC||?||[[Amstrad Serial Interface]] Z80-SIO / DART port A Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADC||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8251 USART data|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADD||?||[[Amstrad Serial Interface]] Z80-SIO / DART port A Control Reg.||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADD||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8251 USART control/status|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADE||?||[[Amstrad Serial Interface]] Z80-SIO / DART port B Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADF||?||[[Amstrad Serial Interface]] Z80-SIO / DART port B Control Reg.||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADF||?||[[Cirkit serial interface]] 8251 UART data register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAE6||?||Port A - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FAE7||?||Port C - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FAEE||?||[[Amstrad SSA-1 Speech Synthesizer]] (faulty mirror used by included RSX driver)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAEF||%xxxxx0x0 xxx0xxxx||[[Kempston Mouse]] - Mouse Buttons||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FAF5||?||[[ARA Video Digitizer]] - Read Capture Data||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#FAF5||?||[[ARA Video Digitizer]] - Increment 10bit Config Value|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FB7E||%xxxxx0x1 0xxxxxx0||[[765 FDC]] (internal) Status Register||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#FB7F||%xxxxx0x1 0xxxxxx1||[[765 FDC]] (internal) Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBBD||%xxxxx0xx x0xxxx0x||Ram select mode [[Vortex Expansions RAM card|Vortex SP512]]||?||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBDC||?||[[Amstrad Serial Interface]] 8253 Timer counter 0||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDC||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 0 (transmit baudrate)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDD||?||[[Amstrad Serial Interface]] 8253 Timer counter 1||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDD||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 1 (receive baudrate)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDE||?||[[Amstrad Serial Interface]] 8253 Timer counter 2||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDE||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 2 (used as 1ms timer)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDF||?||[[Amstrad Serial Interface]] 8253 Timer Modus Select|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDF||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 0-2 control|| - || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDF||?||[[Cirkit serial interface]] 8251 UART status/control register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBxx+0||?||CPCI [[Real Time Clock]] Index (DIY)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBxx+1||?||CPCI [[Real Time Clock]] Data (DIY)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE0||?||[[Dk'tronics Real Time Clock]] - Z80 PIO Port A Data (HD146818P RTC Data bus)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE0||?||[[Dobbertin Harddisc]] Data Port||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE1||?||[[Dk'tronics Real Time Clock]] - Z80 PIO Port B Data (General Purpose 8bit I/O Port)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE1||?||[[Dobbertin Harddisc]] Status, Reset||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE2||?||[[Dk'tronics Real Time Clock]] - Z80 PIO Port A Control||?|| Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE2||?||[[Dobbertin Harddisc]] Select, Configuration||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE3||?||[[Dk'tronics Real Time Clock]] - Z80 PIO Port B Control||?|| Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE3||?||[[Dobbertin Harddisc]] DMA, Interrupt||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE4||?||[[Dobbertin Harddisc]] Reset||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE6||?||Port B - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FBE7||?||RS Port - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FBE7||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Data In/Out Port A ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBE8||?||[[Dk'tronics Real Time Clock]] &amp;quot;4bit latch&amp;quot; (details unknown)|| ? || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE8||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 8253 Timer0 (RX Clock)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE9||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 8253 Timer1 (TX Clock)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEA||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 8253 Timer2 (not used)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEB||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 8253 Timer Control||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEC||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) Control||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEC||?||[[PDS development system]] Z80 PIO Port A Data (8bit data to/from PC)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBED||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) TX Data||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBED||?||[[PDS development system]] Z80 PIO Port B Data (handshake to/from PC)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEE||?||[[PDS development system]] Z80 PIO Port A Control||?||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEE||?||[[Amstrad SSA-1 Speech Synthesizer]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEE||%xxxxx0x1 xxx0xxx0||[[Kempston Mouse]] - 8bit X position||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FBEE||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) Status||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FBEF||?||[[PDS development system]] Z80 PIO Port B Control||?||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEF||%xxxxx0x1 xxx0xxx1||[[Kempston Mouse]] - 8bit Y position||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FBEF||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) RX Data||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FBEF||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Data In/Out Port B ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBF0 - #FBFF||?||[[Otten &amp;amp; Fecht 1 MB RAM-Disc]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF0||%xxxx1011 1111xxxx||[[AMRAM2]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF0||%xxxxx011 1111xxx0||[[AMSSIO]] Serial Interface MC6850 Control/Status Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF1||%xxxxx011 1111xxx1||[[AMSSIO]] Serial Interface MC6850 Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF5||?||[[ARA Video Digitizer]] - Invoke Video Capture|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF6||?||[[Vortex Disc Drives]] 765 FDC (Vortex,ext) Status Register||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#FBF7||?||[[Vortex Disc Drives]] 765 FDC (Vortex,ext) Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF7||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Configure Port A ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBF8||%11111011 11111000||[[8bit Printer Port (Amstrad Action)]] Strobe/Busy||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBF9||%11111011 11111001||[[8bit Printer Port (Amstrad Action)]] Data|| - ||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBFE||?||[[Amstrad Magnum Phaser|Magnum Light Phaser]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBFE||?||[[Dart Scanner for DMP-Printers]]||Read||?&lt;br /&gt;
|-&lt;br /&gt;
|#FBFE||?||[[Dk'tronics Speech Synthesizer]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBFE||%xxxxxxxx 11111110||[[TMPI speech synthesizer]] Data Register ||||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBFF||%xxxxxxxx 11111111||[[TMPI speech synthesizer]] Command/Status Register ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBFF||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Configure Port B ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FC00 - #FDFF||%1111110x xxxxxxxx||[[CPCISA by Yarek|CPCISA]] 16bits mode high byte latch||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC00||?||[[M4 Board]] ACK/KICK|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC5C||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Baudrate Selection|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC7C||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel A Data||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC7D||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel A Control/Status||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC7E||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel B Data||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC7F||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel B Control/Status||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FCE6||?||Port A - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FCE7||?||Port C - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FD00 - #FD3F||%11111101 00xxxxxx||[[Programming:SYMBiFACE_II|SYMBiFACE II]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FD08 - #FD0F||%11111101 00001xxx||[[X-Mass|X-MASS]] 2.5&amp;quot; 44-pin IDE interface / DOM / CF adapter (SYMBiFACE II compatible)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FD40 - #FD4F||%11111101 0100xxxx||[[Programming:SYMBiFACE_III|SYMBiFACE III]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FD80 - #FD87||%11111101 10000xxx||CPC-CPLink - FIFO Interface card for Co-processors, incl. Raspberry Pi ||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FDE6||?||Port B - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FDE7||?||RS Port - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FE00||?||[[M4 Board]] Data|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FE00 - #FFFF||%1111111x xxxxxxxx||[[CPCISA by Yarek|CPCISA]] I/O access (low byte)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FE80 - #FE81||%11111110 1000000x||[[Albireo]] CH376 controller||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FE84 - #FEA7||%11111110 10xxx1xx||[http://shinra.cpcscene.net/willy.html Willy] Future use or multi-soundchip ||-||-&lt;br /&gt;
|-&lt;br /&gt;
|#FEAC - #FEAD||%11111110 101011xx||[http://shinra.cpcscene.net/willy.html Willy] S2P Dream SAM2965 MIDI synthetizer ||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEB0 - #FEB7||%11111110 10110xxx||[[Albireo]] serial port||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEBC - #FEBF||%11111110 101111xx||[http://shinra.cpcscene.net/willy.html Willy] OPL3 ||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEE6||?||Port A - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEE7||?||Port C - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEE8||%11111110 1110100x||[[Multiface II]] - Enable Multiface II ROM/RAM||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEEA||%11111110 1110110x||[[Multiface II]] - Disable Multiface II ROM/RAM||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEF0 - #FEF7||%11111110 11110xxx||[[CPC-CompactFlash]] - IDE registers||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEF0 - #FEF7||%11111110 11110xxx||[[uIDE 16]] - IDE registers||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FF00 - #FFFF||%11111111 xxxxxxxx||AMSDAP (Amstrad MSx aDAPter, MSX-to-CPC I/O hardware interface (MSX ports #00-#ff)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FF20 - #FF27||%11111111 00100xxx||MP3MSX (MP3 player) via AMSDAP||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FF20 - #FF27||%11111111 00100xxx||SE-ONE (MP3 player, FM radio receiver, USB master interface) via AMSDAP||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FF60 - #FF6F||%11111111 0110xxxx||CPC [[V9990]] [[PowerGraph]] (upcoming graphic card based on the Graphics 9000 for the MSX)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FFXX||%11111111 xxxxxxxx||[[CPC Booster]] (XX=#00..#28 are used now)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FFXX||%11111111 xxxxxxxx||[[Amdrum]] (unsigned 8bit DAC)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FFE6||?||Port B - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FFE7||?||RS Port - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory Mapped I/O Ports ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Mem'''||'''Decoded as'''||'''Port'''||'''Read'''||'''Write''' &lt;br /&gt;
|-&lt;br /&gt;
|#4000-7FFF||%01xxxxxx xxxxxxxx||[[ASIC]] - CPC+/GX4000 registers|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#C00?||%11000000 0000000x||[[Dobbertin Smart Watch]] data read (A0=data)|| Read || -&lt;br /&gt;
|-&lt;br /&gt;
|#C00?||%11000000 0000000x||[[Dobbertin Smart Watch]] data write (A0=data)|| Read || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== More Ports ==&lt;br /&gt;
&lt;br /&gt;
Some more I/O addresses (which aren't included in the above list yet) are here:&lt;br /&gt;
* [[Schneiderware Summary]]&lt;br /&gt;
&lt;br /&gt;
== Other I/O Ports ==&lt;br /&gt;
&lt;br /&gt;
A number of peripherals connect to the joystick/printer ports, and so, they do not include &amp;quot;own&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Aside from I/O addresses, there are some other important I/O signals, for example: [[NMI]] or [[External Interrupt|INT]].&lt;br /&gt;
&lt;br /&gt;
== CPCISA ports for ISA cards ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|''Device''||''PC I/O range''||''CPCISA high''||''CPCISA low'' &lt;br /&gt;
|-&lt;br /&gt;
|IDE1||1F0h..1F7h||#FDF0..#FDF7||#FFF0..#FFF7&lt;br /&gt;
|-&lt;br /&gt;
|IDE2||170h..177h||#FD70..#FD77||#FF70..#FF77&lt;br /&gt;
|-&lt;br /&gt;
|Joystick||201h..201h||#FC01..#FC01||#FE01..#FE01&lt;br /&gt;
|-&lt;br /&gt;
|Ethernet||210h..21Fh||#FC10..#FC1F||#FE10..#FE1F&lt;br /&gt;
|-&lt;br /&gt;
|Sound Blaster||220h..23Fh||#FC20..#FC3F||#FE20..#FE3F&lt;br /&gt;
|-&lt;br /&gt;
|LPT2||278h..27Fh||#FC78..#FC7F||#FE78..#FE7F&lt;br /&gt;
|-&lt;br /&gt;
|COM1||2F8h..2FFh||#FCF8..#FCFF||#FEF8..#FEFF&lt;br /&gt;
|-&lt;br /&gt;
|MIDI'||300h..301h||#FD00..#FD01||#FF00..#FF01&lt;br /&gt;
|-&lt;br /&gt;
|MIDI||330h..331h||#FD30..#FD31||#FF30..#FF31&lt;br /&gt;
|-&lt;br /&gt;
|Sound control||370h..371h||#FD70..#FD71||#FF70..#FF71&lt;br /&gt;
|-&lt;br /&gt;
|FDC1||372h..377h||#FD72..#FD77||#FF72..#FF77&lt;br /&gt;
|-&lt;br /&gt;
|LPT1||378h..37Fh||#FD78..#FD7F||#FF78..#FF7F&lt;br /&gt;
|-&lt;br /&gt;
|Sound AD-LIB||388h..38Bh||#FD88..#FD8B||#FF88..#FF8B&lt;br /&gt;
|-&lt;br /&gt;
|VGA||3B0h..3BBh||#FDB0..#FDBB||#FFB0..#FFBB&lt;br /&gt;
|-&lt;br /&gt;
|LPT3||3BCh..3BFh||#FDBC..#FDBF||#FFBC..#FFBF&lt;br /&gt;
|-&lt;br /&gt;
|VGA||3C0h..3DFh||#FDC0..#FDCF||#FFC0..#FFCF&lt;br /&gt;
|-&lt;br /&gt;
|FDC1||3F2h..3F7h||#FDF2..#FDF7||#FFF2..#FFF7&lt;br /&gt;
|-&lt;br /&gt;
|COM1||3F8h..3FFh||#FDF8..#FDFF||#FFF8..#FFFF&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CPCISA ports for ISA motherboard ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|''Device''||''PC I/O range''||''CPCISA high''||''CPCISA low'' &lt;br /&gt;
|-&lt;br /&gt;
|DMA||000h..00Fh||#FC00..#FC0F||#FE00..#FE0F&lt;br /&gt;
|-&lt;br /&gt;
|interrupt||020h..03Fh||#FC20..#FC3F||#FE20..#FE3F&lt;br /&gt;
|-&lt;br /&gt;
|counter||040h..05Fh||#FC40..#FC5F||#FE40..#FE5F&lt;br /&gt;
|-&lt;br /&gt;
|keyboard||060h..067h||#FC60..#FC67||#FE60..#FE67&lt;br /&gt;
|-&lt;br /&gt;
|RTC||070h..071h||#FC70..#FC71||#FE70..#FE71&lt;br /&gt;
|-&lt;br /&gt;
|DMA||080h..08Fh||#FC80..#FC8F||#FE80..#FE8F&lt;br /&gt;
|-&lt;br /&gt;
|DMA||0C0h..0DFh||#FCC0..#FCDF||#FEC0..#FEDF&lt;br /&gt;
|-&lt;br /&gt;
|interrupt||0A0h..0BFh||#FCA0..#FCBF||#FEA0..#FEBF&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]] [[Category:Stub]][[Category:CPC Internal Components]][[Category:Hardware]][[Category:Electronic Component]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=I/O_Port_Summary&amp;diff=107262</id>
		<title>I/O Port Summary</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=I/O_Port_Summary&amp;diff=107262"/>
				<updated>2020-11-15T06:52:00Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* I/O Port Summary */ Add ports used by Willy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
== I/O Port Summary ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''I/O'''||'''Decoded as'''||'''Port'''||'''Read'''||'''Write''' &lt;br /&gt;
|-&lt;br /&gt;
|#1C00||%x0xxxx00 xxxxxxxx||[[Dk'tronics Lightpen]] faulty mirror of #BCXX [[CRTC]] Index|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#1F00||%x0xxxx11 xxxxxxxx||[[Dk'tronics Lightpen]] faulty mirror of #BFXX [[CRTC]] Data In|| Read || -&lt;br /&gt;
|-&lt;br /&gt;
|#78XX||%0xxxx000 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#79XX||%0xxxx001 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7AXX||%0xxxx010 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7BXX||%0xxxx011 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7CXX||%0xxxx100 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7CXX||%0xxxxx00 xxxxxxxx||[[Aleste 520EX]] RAM Mapper page 0 (extended &amp;quot;Gate Array 3&amp;quot;)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7DXX||%0xxxx101 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7DXX||%0xxxxx01 xxxxxxxx||[[Aleste 520EX]] RAM Mapper page 1 (extended &amp;quot;Gate Array 3&amp;quot;)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7EXX||%0xxxx110 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7EXX||%0xxxxx10 xxxxxxxx||[[Aleste 520EX]] RAM Mapper page 2 (extended &amp;quot;Gate Array 3&amp;quot;)||Read||Write&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|#7EXX||%0xxxxxx0 xxxxxxxx||[[Y-MEM]] 512K RAM Expansion part||Read||Write&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||%0xxxx111 xxxxxxxx||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||%0xxxxx11 xxxxxxxx||[[Aleste 520EX]] RAM Mapper page 3 (extended &amp;quot;Gate Array 3&amp;quot;)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|#7FXX||%0xxxxxx1 xxxxxxxx||[[X-MEM]] 512K RAM Expansion part||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||?||[[Dk'tronics memory expansion]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||?||[[Dobbertin Memory Expansion]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||%01xxxxxx xxxxxxxx||[[Gate Array]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||%0xxxxxxx xxxxxxxx||[[PAL16L8]] extension to [[Gate Array]] for 128K RAM banking||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#BCXX||%x0xxxx00 xxxxxxxx||6845 [[CRTC]] Index|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#BDXX||%x0xxxx01 xxxxxxxx||6845 [[CRTC]] Data Out|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#BEXX||%x0xxxx10 xxxxxxxx||6845 [[CRTC]] Status (as far as supported)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#BFXX||%x0xxxx11 xxxxxxxx||6845 [[CRTC]] Data In (as far as supported)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#DFXX||%xx0xxxxx xxxxxxxx||[[Upper ROM Bank Number]] (as decoded within CPC664, CPC6128, 464+, 6128+, decoding in ROM expansions may be different)|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#ECXX||%xxx0xx00 xxxxxxxx||[[KC Compact]] CIO Port B (timer)|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EDXX||%xxx0xx01 xxxxxxxx||[[KC Compact]] CIO Port C (timer)|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EEXX||%xxx0xx10 xxxxxxxx||[[KC Compact]] CIO Control|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EEXX||%xxx0xxx0 xxxxxxxx||[[Aleste 520EX]] USART 8251 (RS232/Mouse) Data|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EFXX||%xxx0xx11 xxxxxxxx||[[KC Compact]] CIO Port A (Bi-drectional [[Printer Port]])|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EFXX||%xxx0xxx1 xxxxxxxx||[[Aleste 520EX]] USART 8251 (RS232/Mouse) Control/Status|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EFXX||%xxx0xxxx xxxxxxxx||[[Printer Port]]|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F0E0||?||[[Draysoft Doubler]] External Tape Data Input (Bit5)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F4XX||%xxxx0x00 xxxxxxxx||[[8255]] PIO Port A ([[PSG]] Data)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F5XX||%xxxx0x01 xxxxxxxx||[[8255]] PIO Port B (Vsync,[[Printer Port|PrnBusy]],Tape,etc.)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F6XX||%xxxx0x10 xxxxxxxx||[[8255]] PIO Port C (KeybRow,Tape,[[PSG]] Control)|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F7XX||%xxxx0x11 xxxxxxxx||[[8255]] PIO Control-Register|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F880-#F88F||%1111100x 1000xxxx||[[PlayCity]] Expansion CTC channels and YMZ data|| - || Write &lt;br /&gt;
|-&lt;br /&gt;
|#F890-#F89F||%1111100x 1001xxxx||[[MultiPlay]] Expansion|| Read || - &lt;br /&gt;
|-&lt;br /&gt;
|#F8A0-#F8AF||%11111000 1010xxxx||[[X-CPC]] ClockPort RTC|| Read || Write &lt;br /&gt;
|-&lt;br /&gt;
|#F8B0||?||[[VIDI digitizer|Vidi-CPC Video-Digitiser]], CRTC Index||?||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8B1||?||[[VIDI digitizer|Vidi-CPC Video-Digitiser]], CRTC Data||?||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8DC||?||[[CPCI RS232 Interface|CPCI Serial Interface]] MC6850 Control/Status||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8DD||?||[[CPCI RS232 Interface|CPCI Serial Interface]] MC6850 Data||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E0||?||[[DHCP MIDI Interface]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E0||%11111000 11100000||[[Schneider RS232 Interface]] Z80-STI Indirect Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E1||%11111000 11100001||[[Schneider RS232 Interface]] Z80-STI General Purpose I/O Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E2||%11111000 11100010||[[Schneider RS232 Interface]] Z80-STI Interrupt Pending Register B (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E2||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E3||%11111000 11100011||[[Schneider RS232 Interface]] Z80-STI Interrupt Pending Register A (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E3||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E4||%11111000 11100100||[[Schneider RS232 Interface]] Z80-STI Interrupt in-Service Register B (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E4||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E5||%11111000 11100101||[[Schneider RS232 Interface]] Z80-STI Interrupt in-Service Register A (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E6||%11111000 11100110||[[Schneider RS232 Interface]] Z80-STI Interrupt Mask Register B (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E6||?||Port A - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E7||%11111000 11100111||[[Schneider RS232 Interface]] Z80-STI Interrupt Mask Register A (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E7||?||Port C - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E8||%11111000 11101000||[[Schneider RS232 Interface]] Z80-STI Indirect Index and Interrupt Vector Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E8||?||[[Music Machine]] Interrupt Sel|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E9||%11111000 11101001||[[Schneider RS232 Interface]] Z80-STI Timers A and B Control Register (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EA||%11111000 11101010||[[Schneider RS232 Interface]] Z80-STI Timer B Data Register (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EB||%11111000 11101011||[[Schneider RS232 Interface]] Z80-STI Timer A Data Register (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EC||%11111000 11101100||[[Schneider RS232 Interface]] Z80-STI USART Control Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EC||?||[[Music Machine]] ACIA Control|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8ED||?||[[Music Machine]] ACIA Data Write|| - || Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8ED||%11111000 11101101||[[Schneider RS232 Interface]] Z80-STI Receiver Status Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EE||?||[[Music Machine]] ACIA Status||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F8EE||%11111000 11101110||[[Schneider RS232 Interface]] Z80-STI Transmitter Status Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EF||%11111000 11101111||[[Schneider RS232 Interface]] Z80-STI USART Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EF||?||[[Music Machine]] ACIA Data Read||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F8FX||%xxxxx0xx 1111NNNx||[[Maplins 8bit Input Port]] and [[Maplins Weather Satellite Receiver]]||Read|| -&lt;br /&gt;
|-&lt;br /&gt;
|#F8F0||?||[[Music Machine]] DAC Write|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8F2||?||[[EMR MIDI Interface]]|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8F2||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|#F8F2||?||[[EMR MIDI Interface]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8F4||?||[[Music Machine]] ADC Read||Read|| - &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|#F8F5||?||[[ARA Video Digitizer]] - Read Sync Signal (bit0)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F8F8||?||[[Music Machine]] ADC Start|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8F8||?||[[ANTA 64K Memory Expansion]] ANTA 64k.3 latch||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8FE||%11111000 11111110||[[Z-MEM]] Software Memory Configuration|| - || Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8FF||%1111100x 111xxxxx||[[CPCISA by Yarek|CPCISA control port]]|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8FF||%xxxxx0xx 111111xx||[[Peripheral Soft Reset]] (MC_BOOT_PROGRAM and MC_START_PROGRAM do OUT [F8FF],FF)|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F980-#F98F||%1111100x 1000xxxx||[[PlayCity]] Expansion CTC channels (mirror) and YMZ registers|| - || Write&lt;br /&gt;
|-&lt;br /&gt;
|#F990-#F99F||%1111100x 1001xxxx||[[MultiPlay]] Expansion (mirror)|| Read || - &lt;br /&gt;
|-&lt;br /&gt;
|#F9A0-#F9AF||%11111001 1010xxxx||[[X-CPC]] ClockPort SPR|| Read || Write &lt;br /&gt;
|-&lt;br /&gt;
|#F9B0||?||[[VIDI digitizer|Vidi-CPC Video-Digitiser]], Config (W) and Capture Data (R)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9D0||%11111000 11010000||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] SwinSID1 + SwinSID2 DATA (MONO Mode / 3 Channels)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9D1||%11111000 11010001||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] SwinSID1 (LEFT) DATA (STEREO Mode / 6 Channels)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9D2||%11111000 11010010||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] SwinSID2 (RIGHT) DATA (STEREO Mode / 6 Channels)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9DC||?||[[Panda Electronics Communications Interface Unit]] PPI Port A - 8bit Printer data||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9DD||?||[[Panda Electronics Communications Interface Unit]] PPI Port B - 8bit general purpose I/O port||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9DE||?||[[Panda Electronics Communications Interface Unit]] PPI Port C - Handshake (bit0=Strobe.out, Bit5=Busy.in)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9DF||?||[[Panda Electronics Communications Interface Unit]] PPI Control - 8bit Printer data|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9E6||?||Port B - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F9E7||?||RS Port - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F9F5||?||[[ARA Video Digitizer]] - Reset 10bit Config Value|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9F7||?||[[Grafpad II|Hegotron grafpad II]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F9FC - #F9FE||?||[[Otten &amp;amp; Fecht 1 MB RAM-Disc]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9FF||?||[[Grafpad II|Hegotron grafpad II]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FA7E||%xxxxx0x0 0xxxxxxx||Floppy Motor Control (for [[765 FDC]])|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABC||%xxxxx0x0 10xxxx00||[[Aleste 520EX]] EXTPORT with CS53: Forward PPI Port A to 8253 Timer 0|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABD||%xxxxx0x0 10xxxx01||[[Aleste 520EX]] EXTPORT with CS53: Forward PPI Port A to 8253 Timer 1|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABE||%xxxxx0x0 10xxxx10||[[Aleste 520EX]] EXTPORT with CS53: Forward PPI Port A to 8253 Timer 2|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABF||%xxxxx0x0 10xxxx11||[[Aleste 520EX]] EXTPORT with CS53: Forward PPI Port A to 8253 Control|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABF||%xxxxx0x0 10xxxxxx||[[Aleste 520EX]] EXTPORT (config for internal hardware)|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAD0||%11111010 11010000||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] Select SID (1&amp;amp;2) Register MONO mode||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAD1||%11111010 11010001||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] Select SID1 Register||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAD2||%11111010 11010010||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] Select SID2 Register||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADC||?||[[Amstrad Serial Interface]] Z80-SIO / DART port A Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADC||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8251 USART data|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADD||?||[[Amstrad Serial Interface]] Z80-SIO / DART port A Control Reg.||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADD||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8251 USART control/status|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADE||?||[[Amstrad Serial Interface]] Z80-SIO / DART port B Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADF||?||[[Amstrad Serial Interface]] Z80-SIO / DART port B Control Reg.||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADF||?||[[Cirkit serial interface]] 8251 UART data register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAE6||?||Port A - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FAE7||?||Port C - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FAEE||?||[[Amstrad SSA-1 Speech Synthesizer]] (faulty mirror used by included RSX driver)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAEF||%xxxxx0x0 xxx0xxxx||[[Kempston Mouse]] - Mouse Buttons||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FAF5||?||[[ARA Video Digitizer]] - Read Capture Data||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#FAF5||?||[[ARA Video Digitizer]] - Increment 10bit Config Value|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FB7E||%xxxxx0x1 0xxxxxx0||[[765 FDC]] (internal) Status Register||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#FB7F||%xxxxx0x1 0xxxxxx1||[[765 FDC]] (internal) Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBBD||%xxxxx0xx x0xxxx0x||Ram select mode [[Vortex Expansions RAM card|Vortex SP512]]||?||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBDC||?||[[Amstrad Serial Interface]] 8253 Timer counter 0||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDC||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 0 (transmit baudrate)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDD||?||[[Amstrad Serial Interface]] 8253 Timer counter 1||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDD||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 1 (receive baudrate)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDE||?||[[Amstrad Serial Interface]] 8253 Timer counter 2||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDE||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 2 (used as 1ms timer)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDF||?||[[Amstrad Serial Interface]] 8253 Timer Modus Select|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDF||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 0-2 control|| - || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDF||?||[[Cirkit serial interface]] 8251 UART status/control register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBxx+0||?||CPCI [[Real Time Clock]] Index (DIY)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBxx+1||?||CPCI [[Real Time Clock]] Data (DIY)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE0||?||[[Dk'tronics Real Time Clock]] - Z80 PIO Port A Data (HD146818P RTC Data bus)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE0||?||[[Dobbertin Harddisc]] Data Port||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE1||?||[[Dk'tronics Real Time Clock]] - Z80 PIO Port B Data (General Purpose 8bit I/O Port)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE1||?||[[Dobbertin Harddisc]] Status, Reset||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE2||?||[[Dk'tronics Real Time Clock]] - Z80 PIO Port A Control||?|| Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE2||?||[[Dobbertin Harddisc]] Select, Configuration||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE3||?||[[Dk'tronics Real Time Clock]] - Z80 PIO Port B Control||?|| Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE3||?||[[Dobbertin Harddisc]] DMA, Interrupt||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE4||?||[[Dobbertin Harddisc]] Reset||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE6||?||Port B - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FBE7||?||RS Port - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FBE7||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Data In/Out Port A ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBE8||?||[[Dk'tronics Real Time Clock]] &amp;quot;4bit latch&amp;quot; (details unknown)|| ? || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE8||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 8253 Timer0 (RX Clock)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE9||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 8253 Timer1 (TX Clock)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEA||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 8253 Timer2 (not used)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEB||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 8253 Timer Control||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEC||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) Control||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEC||?||[[PDS development system]] Z80 PIO Port A Data (8bit data to/from PC)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBED||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) TX Data||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBED||?||[[PDS development system]] Z80 PIO Port B Data (handshake to/from PC)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEE||?||[[PDS development system]] Z80 PIO Port A Control||?||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEE||?||[[Amstrad SSA-1 Speech Synthesizer]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEE||%xxxxx0x1 xxx0xxx0||[[Kempston Mouse]] - 8bit X position||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FBEE||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) Status||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FBEF||?||[[PDS development system]] Z80 PIO Port B Control||?||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEF||%xxxxx0x1 xxx0xxx1||[[Kempston Mouse]] - 8bit Y position||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FBEF||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) RX Data||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FBEF||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Data In/Out Port B ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBF0 - #FBFF||?||[[Otten &amp;amp; Fecht 1 MB RAM-Disc]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF0||%xxxx1011 1111xxxx||[[AMRAM2]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF0||%xxxxx011 1111xxx0||[[AMSSIO]] Serial Interface MC6850 Control/Status Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF1||%xxxxx011 1111xxx1||[[AMSSIO]] Serial Interface MC6850 Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF5||?||[[ARA Video Digitizer]] - Invoke Video Capture|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF6||?||[[Vortex Disc Drives]] 765 FDC (Vortex,ext) Status Register||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#FBF7||?||[[Vortex Disc Drives]] 765 FDC (Vortex,ext) Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF7||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Configure Port A ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBF8||%11111011 11111000||[[8bit Printer Port (Amstrad Action)]] Strobe/Busy||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBF9||%11111011 11111001||[[8bit Printer Port (Amstrad Action)]] Data|| - ||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBFE||?||[[Amstrad Magnum Phaser|Magnum Light Phaser]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBFE||?||[[Dart Scanner for DMP-Printers]]||Read||?&lt;br /&gt;
|-&lt;br /&gt;
|#FBFE||?||[[Dk'tronics Speech Synthesizer]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBFE||%xxxxxxxx 11111110||[[TMPI speech synthesizer]] Data Register ||||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBFF||%xxxxxxxx 11111111||[[TMPI speech synthesizer]] Command/Status Register ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBFF||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Configure Port B ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FC00 - #FDFF||%1111110x xxxxxxxx||[[CPCISA by Yarek|CPCISA]] 16bits mode high byte latch||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC00||?||[[M4 Board]] ACK/KICK|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC5C||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Baudrate Selection|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC7C||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel A Data||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC7D||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel A Control/Status||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC7E||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel B Data||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC7F||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel B Control/Status||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FCE6||?||Port A - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FCE7||?||Port C - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FD00 - #FD3F||%11111101 00xxxxxx||[[Programming:SYMBiFACE_II|SYMBiFACE II]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FD08 - #FD0F||%11111101 00001xxx||[[X-Mass|X-MASS]] 2.5&amp;quot; 44-pin IDE interface / DOM / CF adapter (SYMBiFACE II compatible)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FD40 - #FD4F||%11111101 0100xxxx||[[Programming:SYMBiFACE_III|SYMBiFACE III]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FD80 - #FD87||%11111101 10000xxx||CPC-CPLink - FIFO Interface card for Co-processors, incl. Raspberry Pi ||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FDE6||?||Port B - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FDE7||?||RS Port - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FE00||?||[[M4 Board]] Data|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FE00 - #FFFF||%1111111x xxxxxxxx||[[CPCISA by Yarek|CPCISA]] I/O access (low byte)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FE80 - #FE81||%111111101000000x||[[Albireo]] CH376 controller||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FE84 - #FEA7||%1111111010xxx1xx||[http://shinra.cpcscene.net/willy.html Willy] Future use or multi-soundchip ||-||-&lt;br /&gt;
|-&lt;br /&gt;
|#FEAC - #FEAD||%11111110101011xx||[http://shinra.cpcscene.net/willy.html Willy] S2P Dream SAM2965 MIDI synthetizer ||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEB0 - #FEB7||%1111111010110xxx||[[Albireo]] serial port||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEBC - #FEBF||%11111110101111xx||[http://shinra.cpcscene.net/willy.html Willy] OPL3 ||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEE6||?||Port A - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEE7||?||Port C - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEE8||%11111110 1110100x||[[Multiface II]] - Enable Multiface II ROM/RAM||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEEA||%11111110 1110110x||[[Multiface II]] - Disable Multiface II ROM/RAM||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEF0 - #FEF7||%11111110 11110xxx||[[CPC-CompactFlash]] - IDE registers||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEF0 - #FEF7||%11111110 11110xxx||[[uIDE 16]] - IDE registers||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FF00 - #FFFF||%11111111 xxxxxxxx||AMSDAP (Amstrad MSx aDAPter, MSX-to-CPC I/O hardware interface (MSX ports #00-#ff)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FF20 - #FF27||%11111111 00100xxx||MP3MSX (MP3 player) via AMSDAP||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FF20 - #FF27||%11111111 00100xxx||SE-ONE (MP3 player, FM radio receiver, USB master interface) via AMSDAP||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FF60 - #FF6F||%11111111 0110xxxx||CPC [[V9990]] [[PowerGraph]] (upcoming graphic card based on the Graphics 9000 for the MSX)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FFXX||%11111111 xxxxxxxx||[[CPC Booster]] (XX=#00..#28 are used now)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FFXX||%11111111 xxxxxxxx||[[Amdrum]] (unsigned 8bit DAC)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FFE6||?||Port B - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FFE7||?||RS Port - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory Mapped I/O Ports ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Mem'''||'''Decoded as'''||'''Port'''||'''Read'''||'''Write''' &lt;br /&gt;
|-&lt;br /&gt;
|#4000-7FFF||%01xxxxxx xxxxxxxx||[[ASIC]] - CPC+/GX4000 registers|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#C00?||%11000000 0000000x||[[Dobbertin Smart Watch]] data read (A0=data)|| Read || -&lt;br /&gt;
|-&lt;br /&gt;
|#C00?||%11000000 0000000x||[[Dobbertin Smart Watch]] data write (A0=data)|| Read || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== More Ports ==&lt;br /&gt;
&lt;br /&gt;
Some more I/O addresses (which aren't included in the above list yet) are here:&lt;br /&gt;
* [[Schneiderware Summary]]&lt;br /&gt;
&lt;br /&gt;
== Other I/O Ports ==&lt;br /&gt;
&lt;br /&gt;
A number of peripherals connect to the joystick/printer ports, and so, they do not include &amp;quot;own&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Aside from I/O addresses, there are some other important I/O signals, for example: [[NMI]] or [[External Interrupt|INT]].&lt;br /&gt;
&lt;br /&gt;
== CPCISA ports for ISA cards ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|''Device''||''PC I/O range''||''CPCISA high''||''CPCISA low'' &lt;br /&gt;
|-&lt;br /&gt;
|IDE1||1F0h..1F7h||#FDF0..#FDF7||#FFF0..#FFF7&lt;br /&gt;
|-&lt;br /&gt;
|IDE2||170h..177h||#FD70..#FD77||#FF70..#FF77&lt;br /&gt;
|-&lt;br /&gt;
|Joystick||201h..201h||#FC01..#FC01||#FE01..#FE01&lt;br /&gt;
|-&lt;br /&gt;
|Ethernet||210h..21Fh||#FC10..#FC1F||#FE10..#FE1F&lt;br /&gt;
|-&lt;br /&gt;
|Sound Blaster||220h..23Fh||#FC20..#FC3F||#FE20..#FE3F&lt;br /&gt;
|-&lt;br /&gt;
|LPT2||278h..27Fh||#FC78..#FC7F||#FE78..#FE7F&lt;br /&gt;
|-&lt;br /&gt;
|COM1||2F8h..2FFh||#FCF8..#FCFF||#FEF8..#FEFF&lt;br /&gt;
|-&lt;br /&gt;
|MIDI'||300h..301h||#FD00..#FD01||#FF00..#FF01&lt;br /&gt;
|-&lt;br /&gt;
|MIDI||330h..331h||#FD30..#FD31||#FF30..#FF31&lt;br /&gt;
|-&lt;br /&gt;
|Sound control||370h..371h||#FD70..#FD71||#FF70..#FF71&lt;br /&gt;
|-&lt;br /&gt;
|FDC1||372h..377h||#FD72..#FD77||#FF72..#FF77&lt;br /&gt;
|-&lt;br /&gt;
|LPT1||378h..37Fh||#FD78..#FD7F||#FF78..#FF7F&lt;br /&gt;
|-&lt;br /&gt;
|Sound AD-LIB||388h..38Bh||#FD88..#FD8B||#FF88..#FF8B&lt;br /&gt;
|-&lt;br /&gt;
|VGA||3B0h..3BBh||#FDB0..#FDBB||#FFB0..#FFBB&lt;br /&gt;
|-&lt;br /&gt;
|LPT3||3BCh..3BFh||#FDBC..#FDBF||#FFBC..#FFBF&lt;br /&gt;
|-&lt;br /&gt;
|VGA||3C0h..3DFh||#FDC0..#FDCF||#FFC0..#FFCF&lt;br /&gt;
|-&lt;br /&gt;
|FDC1||3F2h..3F7h||#FDF2..#FDF7||#FFF2..#FFF7&lt;br /&gt;
|-&lt;br /&gt;
|COM1||3F8h..3FFh||#FDF8..#FDFF||#FFF8..#FFFF&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CPCISA ports for ISA motherboard ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|''Device''||''PC I/O range''||''CPCISA high''||''CPCISA low'' &lt;br /&gt;
|-&lt;br /&gt;
|DMA||000h..00Fh||#FC00..#FC0F||#FE00..#FE0F&lt;br /&gt;
|-&lt;br /&gt;
|interrupt||020h..03Fh||#FC20..#FC3F||#FE20..#FE3F&lt;br /&gt;
|-&lt;br /&gt;
|counter||040h..05Fh||#FC40..#FC5F||#FE40..#FE5F&lt;br /&gt;
|-&lt;br /&gt;
|keyboard||060h..067h||#FC60..#FC67||#FE60..#FE67&lt;br /&gt;
|-&lt;br /&gt;
|RTC||070h..071h||#FC70..#FC71||#FE70..#FE71&lt;br /&gt;
|-&lt;br /&gt;
|DMA||080h..08Fh||#FC80..#FC8F||#FE80..#FE8F&lt;br /&gt;
|-&lt;br /&gt;
|DMA||0C0h..0DFh||#FCC0..#FCDF||#FEC0..#FEDF&lt;br /&gt;
|-&lt;br /&gt;
|interrupt||0A0h..0BFh||#FCA0..#FCBF||#FEA0..#FEBF&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]] [[Category:Stub]][[Category:CPC Internal Components]][[Category:Hardware]][[Category:Electronic Component]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Arkos_Tracker&amp;diff=106953</id>
		<title>Arkos Tracker</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Arkos_Tracker&amp;diff=106953"/>
				<updated>2020-10-28T12:46:45Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: Removed info about running AT1 tools under Linux, because AT2 natively supports Linux.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Arkos Tracker is a music and sound effect composing tool that runs on a PC or Mac (i.e. it is not a CPC tool), but which can be used to create tunes for Amstrad, MSX and Spectrum computers.&lt;br /&gt;
&lt;br /&gt;
Arkos Tracker 1 and its tools are built using the .NET framework. It is possible to run the tools, but not the Tracker itself, on Linux, using Mono.&lt;br /&gt;
&lt;br /&gt;
Arkos Tracker 2 is a rewrite of Arkos Tracker and is available natively for both Windows and Linux. It is written in C++ using the Juce toolkit.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
* [http://www.julien-nevo.com/arkos/ Arkos Homepage]&lt;br /&gt;
* [http://arkostracker.cpcscene.com Arkos Tracker Homepage]&lt;br /&gt;
&lt;br /&gt;
[[Category:CrossDev]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=106952</id>
		<title>Albireo</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=106952"/>
				<updated>2020-10-28T12:44:34Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
&lt;br /&gt;
Albireo is an expansion for the Amstrad CPC computers (all models). Its main goal is to provide reliable, fast, cheap and large storage, which it achieves by using a MicroSD card. But the board has a lot of features packed in:&lt;br /&gt;
* USB host port, allowing to connect USB mass storage, mouse, and other USB peripherals&lt;br /&gt;
* USB device port, allowing to link the CPC to a modern computer with maximal link speed (faster than the z80 can handle, and with on-board buffer and hardware flow control).&lt;br /&gt;
&lt;br /&gt;
The interface is based on the WCH CH376 chip and allows access to USB mass storage and other USB devices on CPC.&lt;br /&gt;
&lt;br /&gt;
The CH376 chip implements FAT32 in hardware, which means no filesystem driver is needed on the CPC side. It also implements the lower level aspects of USB, making it relatively easy to write drivers for other USB devices (mouse, joystick, ...).&lt;br /&gt;
&lt;br /&gt;
=== What's in it? ===&lt;br /&gt;
* SD and SDHC card mass storage support with fast (6 MHz) SPI link with the SD card. Hardware FAT32 support for easy file access. Raw sector access also possible for homegrown file-systems and other advanced applications.&lt;br /&gt;
* USB host support with built in mass storage driver, also with FAT32 and direct sector access.&lt;br /&gt;
* Generic USB host with direct control of USB endpoints, for connecting other kinds of USB devices.&lt;br /&gt;
* High-speed (1.5 Mbaud) serial link with built-in USB interface for linking with other computers for fast data exchange. Includes flow control, 16 byte FIFO on CPC side, and 512 byte FIFO on remote side, allowing fast buffered and interrupt-driven operation.&lt;br /&gt;
* Software configurable interrupt routing to either NMI or INT, or interrupt masking. Multiplexing of several interrupt sources: USB host controller, UART, remotely triggered, and CRTC CURSOR signal interrupts are gathered and easily accessible from a single interrupt status register.&lt;br /&gt;
&lt;br /&gt;
=== Board revisions ===&lt;br /&gt;
&lt;br /&gt;
The hardware went through multiple iterations before reaching final state. Each version identifies itself on the USB link and the version should be visible in Windows device manager or lsusb on Linux.&lt;br /&gt;
&lt;br /&gt;
==== Initial prototypes ====&lt;br /&gt;
&lt;br /&gt;
The first prototype was an hand-wired one. There were some changes to I/O ports used since then, so it is not usable anymore.&lt;br /&gt;
&lt;br /&gt;
==== Version 0.9 ====&lt;br /&gt;
&lt;br /&gt;
The first 5 boards were manufactured with an early PCB design, which required some wire-patches to get things working. With the wire-patches, this version behaves the same as 1.0.&lt;br /&gt;
&lt;br /&gt;
==== Version 1.0 ====&lt;br /&gt;
&lt;br /&gt;
About 20 boards were shipped with version 1.0. Unfortunately, as people started to write software using it it turned out that the serial port chip has compatibility problems with the z80 timings. As a result, this version of the board can use the serial port only with the FIFO disabled, which makes it impossible to reach high baudrates. The board is still perfectly usable if you are interested only in the microSD and USB host port.&lt;br /&gt;
&lt;br /&gt;
==== Version 1.1 ====&lt;br /&gt;
&lt;br /&gt;
This version of the board replaces the serial chip with a slightly different one. The board still reads &amp;quot;v1.0&amp;quot; as it is the same PCB, only the chip used has changed.&lt;br /&gt;
&lt;br /&gt;
You can identify your board from the info it sends on the USB device port, or by checking the serial chip (square chip on the back of the board).&lt;br /&gt;
Version 1.0 uses a TI TL16C550D chip. Version 1.1 uses a NXP SC16C650B chip.&lt;br /&gt;
&lt;br /&gt;
=== How does it work? ===&lt;br /&gt;
* There are two main devices: the CH376 handles the USB host and SD card side of things, and is accessed at FE80 (data) and FE81 (command/status). The communication side is handled by a SC16C650B, mapped at FEB0-FEB7. This is similar to the chip used on most PC hardware and some Amiga expansions like the SilverSurfer.&lt;br /&gt;
* There is an FT230X chip to convert the UART to USB for connecting with a modern PC (standard serial ports are not that common anymore, and they wouldn't be fast enough anyway). The FT230X also generates 12MHz and 48MHz clocks for the two other chips.&lt;br /&gt;
* The 16C650 &amp;quot;modem control&amp;quot; lines are connected to various things (CH376 interrupt, FT230X general IO pin for remote control) and turns them into interrupts.&lt;br /&gt;
&lt;br /&gt;
=== What is it useful for? ===&lt;br /&gt;
Not much currently because there is no software yet, but in the future:&lt;br /&gt;
&lt;br /&gt;
* Use the USB key or SD card directly from BASIC and well-behaving apps (which support extra disk ROMs and a C drive). Load games and tools from the mass storage media&lt;br /&gt;
* Connect to another computer like the CPC Booster, load snapshot, DSK or other files from it and write them to floppies or the mass storage media. A snapshot of 128K could be loaded in 0.86 seconds, a snapshot of 64K in less than 0.43 seconds.&lt;br /&gt;
* Use SLIP (serial line IP) and a properly setup gateway (Linux machine or similar) to connect the CPC to the Internet.&lt;br /&gt;
&lt;br /&gt;
There is a driver in SymbOS to use Albireo with an USB mouse.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== I/O ports ===&lt;br /&gt;
&lt;br /&gt;
The decoding is clean, this means there aren't any mirror ports or undecoded address bits. Just the addresses listed below are used.&lt;br /&gt;
&lt;br /&gt;
The addresses are in the I/O range, which means you access them with the OUT and IN instructions. They are not memory mapped, and to match with the CPC address decoding, the address is decoded on 16 bytes. This makes using OTIR and similar looped instructions tricky, but is required for compatibility with the CPC.&lt;br /&gt;
&lt;br /&gt;
==== CH376 registers ====&lt;br /&gt;
&lt;br /&gt;
* FE80: &amp;quot;DATA&amp;quot; port (read/write)&lt;br /&gt;
* FE81: &amp;quot;COMMAND&amp;quot; (write) and &amp;quot;STATUS&amp;quot; (read) port&lt;br /&gt;
&lt;br /&gt;
==== SC16C650B registers ==== &lt;br /&gt;
&lt;br /&gt;
Some of the registers are sharing the same address. A register bit (DLAB) is used to switch between the two groups.&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Address !! DLAB !! Description&lt;br /&gt;
|-&lt;br /&gt;
| FEB0 || 0  || RBR/THR: RX buffer (read), TX buffer (write)&lt;br /&gt;
|-&lt;br /&gt;
| FEB1 || 0|| IER: Interrupt enable&lt;br /&gt;
|-&lt;br /&gt;
| FEB0 || 1|| DLL: Divisor latch LSB&lt;br /&gt;
|-&lt;br /&gt;
| FEB1 || 1|| DLM: Divisor latch MSB&lt;br /&gt;
|-&lt;br /&gt;
| FEB2 || || IIR/FCR: Interrupt status (read), FIFO control (write)&lt;br /&gt;
|-&lt;br /&gt;
| FEB3 || || LCR: Line control&lt;br /&gt;
|-&lt;br /&gt;
| FEB4 || || MCR: Modem control&lt;br /&gt;
|-&lt;br /&gt;
| FEB5 ||  || LSR: Line status&lt;br /&gt;
|-&lt;br /&gt;
| FEB6 || || MSR: Modem status&lt;br /&gt;
|-&lt;br /&gt;
| FEB7 || || SCR: Scratch register&lt;br /&gt;
|}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIP switches ===&lt;br /&gt;
The board holds 4 DIP switches for configuration. From top to bottom:&lt;br /&gt;
&lt;br /&gt;
==== S1 - CH376 interrupt enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the usb controller is allowed to generate interrupts to signal the CPC when it is done performing an operation.&lt;br /&gt;
* When this switch is OFF, the usb controller is not allowed to generate interrupts. The CPC must then poll the CH376 STATUS register to know wether the operation is finished.&lt;br /&gt;
&lt;br /&gt;
==== S2 - CH376 reset enable====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the CH376 will be reset at the same time as the CPC (hardware reset only).&lt;br /&gt;
* When this switch is OFF, the CH376 will not be reset, and the CPC must initialize it using the reset command (software reset). In this case, the CH376 internal buffer may be used to store reset resident data (but I don't know if this is of any practical use, yet).&lt;br /&gt;
&lt;br /&gt;
==== S3 - Remote reset enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the DTR signal from the remote side of the serial link is connected to the CPC reset. This means that the remote side computer can trigger the CPC reset by toggling that line. &lt;br /&gt;
* When the switch is OFF, such reset is not allowed and the CPC is safe.&lt;br /&gt;
&lt;br /&gt;
==== S4 - Remote interrupt enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the DTR signal from the remote side of the serial link is plugged to the DSR line of the UART controller. It then generates an interrupt which the CPC can process.&lt;br /&gt;
&lt;br /&gt;
[http://pulkomandy.github.io/shinra.github.io/albireo.html Albireo interface homepage]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
=== Software supporting the Albireo ===&lt;br /&gt;
* [[AlbiDOS]] ([[AMSDOS]] compatible DOS driver; see [https://framagit.org/shinra/albireo/albireodos/-/wikis/home AlbiDOS documentation]) &lt;br /&gt;
* [[SymbOS]] (USB mouse support)&lt;br /&gt;
* [[Arkos_Tracker]] 2 (use the CPC AY chip through the USB serial port)&lt;br /&gt;
&lt;br /&gt;
=== Upcoming software ===&lt;br /&gt;
* Serial communication to communicate with a PC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:DATA Storage]]&lt;br /&gt;
[[Category:Peripherals]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=106951</id>
		<title>Albireo</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=106951"/>
				<updated>2020-10-28T12:44:21Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
&lt;br /&gt;
Albireo is an expansion for the Amstrad CPC computers (all models). Its main goal is to provide reliable, fast, cheap and large storage, which it achieves by using a MicroSD card. But the board has a lot of features packed in:&lt;br /&gt;
* USB host port, allowing to connect USB mass storage, mouse, and other USB peripherals&lt;br /&gt;
* USB device port, allowing to link the CPC to a modern computer with maximal link speed (faster than the z80 can handle, and with on-board buffer and hardware flow control).&lt;br /&gt;
&lt;br /&gt;
The interface is based on the WCH CH376 chip and allows access to USB mass storage and other USB devices on CPC.&lt;br /&gt;
&lt;br /&gt;
The CH376 chip implements FAT32 in hardware, which means no filesystem driver is needed on the CPC side. It also implements the lower level aspects of USB, making it relatively easy to write drivers for other USB devices (mouse, joystick, ...).&lt;br /&gt;
&lt;br /&gt;
=== What's in it? ===&lt;br /&gt;
* SD and SDHC card mass storage support with fast (6 MHz) SPI link with the SD card. Hardware FAT32 support for easy file access. Raw sector access also possible for homegrown file-systems and other advanced applications.&lt;br /&gt;
* USB host support with built in mass storage driver, also with FAT32 and direct sector access.&lt;br /&gt;
* Generic USB host with direct control of USB endpoints, for connecting other kinds of USB devices.&lt;br /&gt;
* High-speed (1.5 Mbaud) serial link with built-in USB interface for linking with other computers for fast data exchange. Includes flow control, 16 byte FIFO on CPC side, and 512 byte FIFO on remote side, allowing fast buffered and interrupt-driven operation.&lt;br /&gt;
* Software configurable interrupt routing to either NMI or INT, or interrupt masking. Multiplexing of several interrupt sources: USB host controller, UART, remotely triggered, and CRTC CURSOR signal interrupts are gathered and easily accessible from a single interrupt status register.&lt;br /&gt;
&lt;br /&gt;
=== Board revisions ===&lt;br /&gt;
&lt;br /&gt;
The hardware went through multiple iterations before reaching final state. Each version identifies itself on the USB link and the version should be visible in Windows device manager or lsusb on Linux.&lt;br /&gt;
&lt;br /&gt;
==== Initial prototypes ====&lt;br /&gt;
&lt;br /&gt;
The first prototype was an hand-wired one. There were some changes to I/O ports used since then, so it is not usable anymore.&lt;br /&gt;
&lt;br /&gt;
==== Version 0.9 ====&lt;br /&gt;
&lt;br /&gt;
The first 5 boards were manufactured with an early PCB design, which required some wire-patches to get things working. With the wire-patches, this version behaves the same as 1.0.&lt;br /&gt;
&lt;br /&gt;
==== Version 1.0 ====&lt;br /&gt;
&lt;br /&gt;
About 20 boards were shipped with version 1.0. Unfortunately, as people started to write software using it it turned out that the serial port chip has compatibility problems with the z80 timings. As a result, this version of the board can use the serial port only with the FIFO disabled, which makes it impossible to reach high baudrates. The board is still perfectly usable if you are interested only in the microSD and USB host port.&lt;br /&gt;
&lt;br /&gt;
==== Version 1.1 ====&lt;br /&gt;
&lt;br /&gt;
This version of the board replaces the serial chip with a slightly different one. The board still reads &amp;quot;v1.0&amp;quot; as it is the same PCB, only the chip used has changed.&lt;br /&gt;
&lt;br /&gt;
You can identify your board from the info it sends on the USB device port, or by checking the serial chip (square chip on the back of the board).&lt;br /&gt;
Version 1.0 uses a TI TL16C550D chip. Version 1.1 uses a NXP SC16C650B chip.&lt;br /&gt;
&lt;br /&gt;
=== How does it work? ===&lt;br /&gt;
* There are two main devices: the CH376 handles the USB host and SD card side of things, and is accessed at FE80 (data) and FE81 (command/status). The communication side is handled by a SC16C650B, mapped at FEB0-FEB7. This is similar to the chip used on most PC hardware and some Amiga expansions like the SilverSurfer.&lt;br /&gt;
* There is an FT230X chip to convert the UART to USB for connecting with a modern PC (standard serial ports are not that common anymore, and they wouldn't be fast enough anyway). The FT230X also generates 12MHz and 48MHz clocks for the two other chips.&lt;br /&gt;
* The 16C650 &amp;quot;modem control&amp;quot; lines are connected to various things (CH376 interrupt, FT230X general IO pin for remote control) and turns them into interrupts.&lt;br /&gt;
&lt;br /&gt;
=== What is it useful for? ===&lt;br /&gt;
Not much currently because there is no software yet, but in the future:&lt;br /&gt;
&lt;br /&gt;
* Use the USB key or SD card directly from BASIC and well-behaving apps (which support extra disk ROMs and a C drive). Load games and tools from the mass storage media&lt;br /&gt;
* Connect to another computer like the CPC Booster, load snapshot, DSK or other files from it and write them to floppies or the mass storage media. A snapshot of 128K could be loaded in 0.86 seconds, a snapshot of 64K in less than 0.43 seconds.&lt;br /&gt;
* Use SLIP (serial line IP) and a properly setup gateway (Linux machine or similar) to connect the CPC to the Internet.&lt;br /&gt;
&lt;br /&gt;
There is a driver in SymbOS to use Albireo with an USB mouse.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== I/O ports ===&lt;br /&gt;
&lt;br /&gt;
The decoding is clean, this means there aren't any mirror ports or undecoded address bits. Just the addresses listed below are used.&lt;br /&gt;
&lt;br /&gt;
The addresses are in the I/O range, which means you access them with the OUT and IN instructions. They are not memory mapped, and to match with the CPC address decoding, the address is decoded on 16 bytes. This makes using OTIR and similar looped instructions tricky, but is required for compatibility with the CPC.&lt;br /&gt;
&lt;br /&gt;
==== CH376 registers ====&lt;br /&gt;
&lt;br /&gt;
* FE80: &amp;quot;DATA&amp;quot; port (read/write)&lt;br /&gt;
* FE81: &amp;quot;COMMAND&amp;quot; (write) and &amp;quot;STATUS&amp;quot; (read) port&lt;br /&gt;
&lt;br /&gt;
==== SC16C650B registers ==== &lt;br /&gt;
&lt;br /&gt;
Some of the registers are sharing the same address. A register bit (DLAB) is used to switch between the two groups.&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Address !! DLAB !! Description&lt;br /&gt;
|-&lt;br /&gt;
| FEB0 || 0  || RBR/THR: RX buffer (read), TX buffer (write)&lt;br /&gt;
|-&lt;br /&gt;
| FEB1 || 0|| IER: Interrupt enable&lt;br /&gt;
|-&lt;br /&gt;
| FEB0 || 1|| DLL: Divisor latch LSB&lt;br /&gt;
|-&lt;br /&gt;
| FEB1 || 1|| DLM: Divisor latch MSB&lt;br /&gt;
|-&lt;br /&gt;
| FEB2 || || IIR/FCR: Interrupt status (read), FIFO control (write)&lt;br /&gt;
|-&lt;br /&gt;
| FEB3 || || LCR: Line control&lt;br /&gt;
|-&lt;br /&gt;
| FEB4 || || MCR: Modem control&lt;br /&gt;
|-&lt;br /&gt;
| FEB5 ||  || LSR: Line status&lt;br /&gt;
|-&lt;br /&gt;
| FEB6 || || MSR: Modem status&lt;br /&gt;
|-&lt;br /&gt;
| FEB7 || || SCR: Scratch register&lt;br /&gt;
|}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIP switches ===&lt;br /&gt;
The board holds 4 DIP switches for configuration. From top to bottom:&lt;br /&gt;
&lt;br /&gt;
==== S1 - CH376 interrupt enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the usb controller is allowed to generate interrupts to signal the CPC when it is done performing an operation.&lt;br /&gt;
* When this switch is OFF, the usb controller is not allowed to generate interrupts. The CPC must then poll the CH376 STATUS register to know wether the operation is finished.&lt;br /&gt;
&lt;br /&gt;
==== S2 - CH376 reset enable====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the CH376 will be reset at the same time as the CPC (hardware reset only).&lt;br /&gt;
* When this switch is OFF, the CH376 will not be reset, and the CPC must initialize it using the reset command (software reset). In this case, the CH376 internal buffer may be used to store reset resident data (but I don't know if this is of any practical use, yet).&lt;br /&gt;
&lt;br /&gt;
==== S3 - Remote reset enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the DTR signal from the remote side of the serial link is connected to the CPC reset. This means that the remote side computer can trigger the CPC reset by toggling that line. &lt;br /&gt;
* When the switch is OFF, such reset is not allowed and the CPC is safe.&lt;br /&gt;
&lt;br /&gt;
==== S4 - Remote interrupt enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the DTR signal from the remote side of the serial link is plugged to the DSR line of the UART controller. It then generates an interrupt which the CPC can process.&lt;br /&gt;
&lt;br /&gt;
[http://pulkomandy.github.io/shinra.github.io/albireo.html Albireo interface homepage]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
=== Software supporting the Albireo ===&lt;br /&gt;
* [[AlbiDOS]] ([[AMSDOS]] compatible DOS driver; see [https://framagit.org/shinra/albireo/albireodos/-/wikis/home AlbiDOS documentation]) &lt;br /&gt;
* [[SymbOS]] (USB mouse support)&lt;br /&gt;
* [[Arkos_Trakcer]] 2 (use the CPC AY chip through the USB serial port)&lt;br /&gt;
&lt;br /&gt;
=== Upcoming software ===&lt;br /&gt;
* Serial communication to communicate with a PC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:DATA Storage]]&lt;br /&gt;
[[Category:Peripherals]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=106950</id>
		<title>Albireo</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=106950"/>
				<updated>2020-10-28T12:43:01Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Hardware */ Removed a lot of old information and updated link to Shinra website where I keep the info up to date. Having old info here just confuse people trying to use the board.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
&lt;br /&gt;
Albireo is an expansion for the Amstrad CPC computers (all models). Its main goal is to provide reliable, fast, cheap and large storage, which it achieves by using a MicroSD card. But the board has a lot of features packed in:&lt;br /&gt;
* USB host port, allowing to connect USB mass storage, mouse, and other USB peripherals&lt;br /&gt;
* USB device port, allowing to link the CPC to a modern computer with maximal link speed (faster than the z80 can handle, and with on-board buffer and hardware flow control).&lt;br /&gt;
&lt;br /&gt;
The interface is based on the WCH CH376 chip and allows access to USB mass storage and other USB devices on CPC.&lt;br /&gt;
&lt;br /&gt;
The CH376 chip implements FAT32 in hardware, which means no filesystem driver is needed on the CPC side. It also implements the lower level aspects of USB, making it relatively easy to write drivers for other USB devices (mouse, joystick, ...).&lt;br /&gt;
&lt;br /&gt;
=== What's in it? ===&lt;br /&gt;
* SD and SDHC card mass storage support with fast (6 MHz) SPI link with the SD card. Hardware FAT32 support for easy file access. Raw sector access also possible for homegrown file-systems and other advanced applications.&lt;br /&gt;
* USB host support with built in mass storage driver, also with FAT32 and direct sector access.&lt;br /&gt;
* Generic USB host with direct control of USB endpoints, for connecting other kinds of USB devices.&lt;br /&gt;
* High-speed (1.5 Mbaud) serial link with built-in USB interface for linking with other computers for fast data exchange. Includes flow control, 16 byte FIFO on CPC side, and 512 byte FIFO on remote side, allowing fast buffered and interrupt-driven operation.&lt;br /&gt;
* Software configurable interrupt routing to either NMI or INT, or interrupt masking. Multiplexing of several interrupt sources: USB host controller, UART, remotely triggered, and CRTC CURSOR signal interrupts are gathered and easily accessible from a single interrupt status register.&lt;br /&gt;
&lt;br /&gt;
=== Board revisions ===&lt;br /&gt;
&lt;br /&gt;
The hardware went through multiple iterations before reaching final state. Each version identifies itself on the USB link and the version should be visible in Windows device manager or lsusb on Linux.&lt;br /&gt;
&lt;br /&gt;
==== Initial prototypes ====&lt;br /&gt;
&lt;br /&gt;
The first prototype was an hand-wired one. There were some changes to I/O ports used since then, so it is not usable anymore.&lt;br /&gt;
&lt;br /&gt;
==== Version 0.9 ====&lt;br /&gt;
&lt;br /&gt;
The first 5 boards were manufactured with an early PCB design, which required some wire-patches to get things working. With the wire-patches, this version behaves the same as 1.0.&lt;br /&gt;
&lt;br /&gt;
==== Version 1.0 ====&lt;br /&gt;
&lt;br /&gt;
About 20 boards were shipped with version 1.0. Unfortunately, as people started to write software using it it turned out that the serial port chip has compatibility problems with the z80 timings. As a result, this version of the board can use the serial port only with the FIFO disabled, which makes it impossible to reach high baudrates. The board is still perfectly usable if you are interested only in the microSD and USB host port.&lt;br /&gt;
&lt;br /&gt;
==== Version 1.1 ====&lt;br /&gt;
&lt;br /&gt;
This version of the board replaces the serial chip with a slightly different one. The board still reads &amp;quot;v1.0&amp;quot; as it is the same PCB, only the chip used has changed.&lt;br /&gt;
&lt;br /&gt;
You can identify your board from the info it sends on the USB device port, or by checking the serial chip (square chip on the back of the board).&lt;br /&gt;
Version 1.0 uses a TI TL16C550D chip. Version 1.1 uses a NXP SC16C650B chip.&lt;br /&gt;
&lt;br /&gt;
=== How does it work? ===&lt;br /&gt;
* There are two main devices: the CH376 handles the USB host and SD card side of things, and is accessed at FE80 (data) and FE81 (command/status). The communication side is handled by a SC16C650B, mapped at FEB0-FEB7. This is similar to the chip used on most PC hardware and some Amiga expansions like the SilverSurfer.&lt;br /&gt;
* There is an FT230X chip to convert the UART to USB for connecting with a modern PC (standard serial ports are not that common anymore, and they wouldn't be fast enough anyway). The FT230X also generates 12MHz and 48MHz clocks for the two other chips.&lt;br /&gt;
* The 16C650 &amp;quot;modem control&amp;quot; lines are connected to various things (CH376 interrupt, FT230X general IO pin for remote control) and turns them into interrupts.&lt;br /&gt;
&lt;br /&gt;
=== What is it useful for? ===&lt;br /&gt;
Not much currently because there is no software yet, but in the future:&lt;br /&gt;
&lt;br /&gt;
* Use the USB key or SD card directly from BASIC and well-behaving apps (which support extra disk ROMs and a C drive). Load games and tools from the mass storage media&lt;br /&gt;
* Connect to another computer like the CPC Booster, load snapshot, DSK or other files from it and write them to floppies or the mass storage media. A snapshot of 128K could be loaded in 0.86 seconds, a snapshot of 64K in less than 0.43 seconds.&lt;br /&gt;
* Use SLIP (serial line IP) and a properly setup gateway (Linux machine or similar) to connect the CPC to the Internet.&lt;br /&gt;
&lt;br /&gt;
There is a driver in SymbOS to use Albireo with an USB mouse.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== I/O ports ===&lt;br /&gt;
&lt;br /&gt;
The decoding is clean, this means there aren't any mirror ports or undecoded address bits. Just the addresses listed below are used.&lt;br /&gt;
&lt;br /&gt;
The addresses are in the I/O range, which means you access them with the OUT and IN instructions. They are not memory mapped, and to match with the CPC address decoding, the address is decoded on 16 bytes. This makes using OTIR and similar looped instructions tricky, but is required for compatibility with the CPC.&lt;br /&gt;
&lt;br /&gt;
==== CH376 registers ====&lt;br /&gt;
&lt;br /&gt;
* FE80: &amp;quot;DATA&amp;quot; port (read/write)&lt;br /&gt;
* FE81: &amp;quot;COMMAND&amp;quot; (write) and &amp;quot;STATUS&amp;quot; (read) port&lt;br /&gt;
&lt;br /&gt;
==== SC16C650B registers ==== &lt;br /&gt;
&lt;br /&gt;
Some of the registers are sharing the same address. A register bit (DLAB) is used to switch between the two groups.&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Address !! DLAB !! Description&lt;br /&gt;
|-&lt;br /&gt;
| FEB0 || 0  || RBR/THR: RX buffer (read), TX buffer (write)&lt;br /&gt;
|-&lt;br /&gt;
| FEB1 || 0|| IER: Interrupt enable&lt;br /&gt;
|-&lt;br /&gt;
| FEB0 || 1|| DLL: Divisor latch LSB&lt;br /&gt;
|-&lt;br /&gt;
| FEB1 || 1|| DLM: Divisor latch MSB&lt;br /&gt;
|-&lt;br /&gt;
| FEB2 || || IIR/FCR: Interrupt status (read), FIFO control (write)&lt;br /&gt;
|-&lt;br /&gt;
| FEB3 || || LCR: Line control&lt;br /&gt;
|-&lt;br /&gt;
| FEB4 || || MCR: Modem control&lt;br /&gt;
|-&lt;br /&gt;
| FEB5 ||  || LSR: Line status&lt;br /&gt;
|-&lt;br /&gt;
| FEB6 || || MSR: Modem status&lt;br /&gt;
|-&lt;br /&gt;
| FEB7 || || SCR: Scratch register&lt;br /&gt;
|}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIP switches ===&lt;br /&gt;
The board holds 4 DIP switches for configuration. From top to bottom:&lt;br /&gt;
&lt;br /&gt;
==== S1 - CH376 interrupt enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the usb controller is allowed to generate interrupts to signal the CPC when it is done performing an operation.&lt;br /&gt;
* When this switch is OFF, the usb controller is not allowed to generate interrupts. The CPC must then poll the CH376 STATUS register to know wether the operation is finished.&lt;br /&gt;
&lt;br /&gt;
==== S2 - CH376 reset enable====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the CH376 will be reset at the same time as the CPC (hardware reset only).&lt;br /&gt;
* When this switch is OFF, the CH376 will not be reset, and the CPC must initialize it using the reset command (software reset). In this case, the CH376 internal buffer may be used to store reset resident data (but I don't know if this is of any practical use, yet).&lt;br /&gt;
&lt;br /&gt;
==== S3 - Remote reset enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the DTR signal from the remote side of the serial link is connected to the CPC reset. This means that the remote side computer can trigger the CPC reset by toggling that line. &lt;br /&gt;
* When the switch is OFF, such reset is not allowed and the CPC is safe.&lt;br /&gt;
&lt;br /&gt;
==== S4 - Remote interrupt enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the DTR signal from the remote side of the serial link is plugged to the DSR line of the UART controller. It then generates an interrupt which the CPC can process.&lt;br /&gt;
&lt;br /&gt;
[http://pulkomandy.github.io/shinra.github.io/albireo.html Albireo interface homepage]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
=== Software supporting the Albireo ===&lt;br /&gt;
* [[AlbiDOS]] ([[AMSDOS]] compatible DOS driver; see [https://framagit.org/shinra/albireo/albireodos/-/wikis/home AlbiDOS documentation]) &lt;br /&gt;
* [[SymbOS]] (USB mouse support)&lt;br /&gt;
&lt;br /&gt;
=== Upcoming software ===&lt;br /&gt;
* Serial communication to communicate with a PC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:DATA Storage]]&lt;br /&gt;
[[Category:Peripherals]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=106949</id>
		<title>Albireo</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=106949"/>
				<updated>2020-10-28T12:41:55Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Other resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
&lt;br /&gt;
Albireo is an expansion for the Amstrad CPC computers (all models). Its main goal is to provide reliable, fast, cheap and large storage, which it achieves by using a MicroSD card. But the board has a lot of features packed in:&lt;br /&gt;
* USB host port, allowing to connect USB mass storage, mouse, and other USB peripherals&lt;br /&gt;
* USB device port, allowing to link the CPC to a modern computer with maximal link speed (faster than the z80 can handle, and with on-board buffer and hardware flow control).&lt;br /&gt;
&lt;br /&gt;
The interface is based on the WCH CH376 chip and allows access to USB mass storage and other USB devices on CPC.&lt;br /&gt;
&lt;br /&gt;
The CH376 chip implements FAT32 in hardware, which means no filesystem driver is needed on the CPC side. It also implements the lower level aspects of USB, making it relatively easy to write drivers for other USB devices (mouse, joystick, ...).&lt;br /&gt;
&lt;br /&gt;
=== What's in it? ===&lt;br /&gt;
* SD and SDHC card mass storage support with fast (6 MHz) SPI link with the SD card. Hardware FAT32 support for easy file access. Raw sector access also possible for homegrown file-systems and other advanced applications.&lt;br /&gt;
* USB host support with built in mass storage driver, also with FAT32 and direct sector access.&lt;br /&gt;
* Generic USB host with direct control of USB endpoints, for connecting other kinds of USB devices.&lt;br /&gt;
* High-speed (1.5 Mbaud) serial link with built-in USB interface for linking with other computers for fast data exchange. Includes flow control, 16 byte FIFO on CPC side, and 512 byte FIFO on remote side, allowing fast buffered and interrupt-driven operation.&lt;br /&gt;
* Software configurable interrupt routing to either NMI or INT, or interrupt masking. Multiplexing of several interrupt sources: USB host controller, UART, remotely triggered, and CRTC CURSOR signal interrupts are gathered and easily accessible from a single interrupt status register.&lt;br /&gt;
&lt;br /&gt;
=== Board revisions ===&lt;br /&gt;
&lt;br /&gt;
The hardware went through multiple iterations before reaching final state. Each version identifies itself on the USB link and the version should be visible in Windows device manager or lsusb on Linux.&lt;br /&gt;
&lt;br /&gt;
==== Initial prototypes ====&lt;br /&gt;
&lt;br /&gt;
The first prototype was an hand-wired one. There were some changes to I/O ports used since then, so it is not usable anymore.&lt;br /&gt;
&lt;br /&gt;
==== Version 0.9 ====&lt;br /&gt;
&lt;br /&gt;
The first 5 boards were manufactured with an early PCB design, which required some wire-patches to get things working. With the wire-patches, this version behaves the same as 1.0.&lt;br /&gt;
&lt;br /&gt;
==== Version 1.0 ====&lt;br /&gt;
&lt;br /&gt;
About 20 boards were shipped with version 1.0. Unfortunately, as people started to write software using it it turned out that the serial port chip has compatibility problems with the z80 timings. As a result, this version of the board can use the serial port only with the FIFO disabled, which makes it impossible to reach high baudrates. The board is still perfectly usable if you are interested only in the microSD and USB host port.&lt;br /&gt;
&lt;br /&gt;
==== Version 1.1 ====&lt;br /&gt;
&lt;br /&gt;
This version of the board replaces the serial chip with a slightly different one. The board still reads &amp;quot;v1.0&amp;quot; as it is the same PCB, only the chip used has changed.&lt;br /&gt;
&lt;br /&gt;
You can identify your board from the info it sends on the USB device port, or by checking the serial chip (square chip on the back of the board).&lt;br /&gt;
Version 1.0 uses a TI TL16C550D chip. Version 1.1 uses a NXP SC16C650B chip.&lt;br /&gt;
&lt;br /&gt;
=== How does it work? ===&lt;br /&gt;
* There are two main devices: the CH376 handles the USB host and SD card side of things, and is accessed at FE80 (data) and FE81 (command/status). The communication side is handled by a SC16C650B, mapped at FEB0-FEB7. This is similar to the chip used on most PC hardware and some Amiga expansions like the SilverSurfer.&lt;br /&gt;
* There is an FT230X chip to convert the UART to USB for connecting with a modern PC (standard serial ports are not that common anymore, and they wouldn't be fast enough anyway). The FT230X also generates 12MHz and 48MHz clocks for the two other chips.&lt;br /&gt;
* The 16C650 &amp;quot;modem control&amp;quot; lines are connected to various things (CH376 interrupt, FT230X general IO pin for remote control) and turns them into interrupts.&lt;br /&gt;
&lt;br /&gt;
=== What is it useful for? ===&lt;br /&gt;
Not much currently because there is no software yet, but in the future:&lt;br /&gt;
&lt;br /&gt;
* Use the USB key or SD card directly from BASIC and well-behaving apps (which support extra disk ROMs and a C drive). Load games and tools from the mass storage media&lt;br /&gt;
* Connect to another computer like the CPC Booster, load snapshot, DSK or other files from it and write them to floppies or the mass storage media. A snapshot of 128K could be loaded in 0.86 seconds, a snapshot of 64K in less than 0.43 seconds.&lt;br /&gt;
* Use SLIP (serial line IP) and a properly setup gateway (Linux machine or similar) to connect the CPC to the Internet.&lt;br /&gt;
&lt;br /&gt;
There is a driver in SymbOS to use Albireo with an USB mouse.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== I/O ports ===&lt;br /&gt;
&lt;br /&gt;
The decoding is clean, this means there aren't any mirror ports or undecoded address bits. Just the addresses listed below are used.&lt;br /&gt;
&lt;br /&gt;
The addresses are in the I/O range, which means you access them with the OUT and IN instructions. They are not memory mapped, and to match with the CPC address decoding, the address is decoded on 16 bytes. This makes using OTIR and similar looped instructions tricky, but is required for compatibility with the CPC.&lt;br /&gt;
&lt;br /&gt;
==== CH376 registers ====&lt;br /&gt;
&lt;br /&gt;
* FE80: &amp;quot;DATA&amp;quot; port (read/write)&lt;br /&gt;
* FE81: &amp;quot;COMMAND&amp;quot; (write) and &amp;quot;STATUS&amp;quot; (read) port&lt;br /&gt;
&lt;br /&gt;
==== SC16C650B registers ==== &lt;br /&gt;
&lt;br /&gt;
Some of the registers are sharing the same address. A register bit (DLAB) is used to switch between the two groups.&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Address !! DLAB !! Description&lt;br /&gt;
|-&lt;br /&gt;
| FEB0 || 0  || RBR/THR: RX buffer (read), TX buffer (write)&lt;br /&gt;
|-&lt;br /&gt;
| FEB1 || 0|| IER: Interrupt enable&lt;br /&gt;
|-&lt;br /&gt;
| FEB0 || 1|| DLL: Divisor latch LSB&lt;br /&gt;
|-&lt;br /&gt;
| FEB1 || 1|| DLM: Divisor latch MSB&lt;br /&gt;
|-&lt;br /&gt;
| FEB2 || || IIR/FCR: Interrupt status (read), FIFO control (write)&lt;br /&gt;
|-&lt;br /&gt;
| FEB3 || || LCR: Line control&lt;br /&gt;
|-&lt;br /&gt;
| FEB4 || || MCR: Modem control&lt;br /&gt;
|-&lt;br /&gt;
| FEB5 ||  || LSR: Line status&lt;br /&gt;
|-&lt;br /&gt;
| FEB6 || || MSR: Modem status&lt;br /&gt;
|-&lt;br /&gt;
| FEB7 || || SCR: Scratch register&lt;br /&gt;
|}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIP switches ===&lt;br /&gt;
The board holds 4 DIP switches for configuration. From top to bottom:&lt;br /&gt;
&lt;br /&gt;
==== S1 - CH376 interrupt enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the usb controller is allowed to generate interrupts to signal the CPC when it is done performing an operation.&lt;br /&gt;
* When this switch is OFF, the usb controller is not allowed to generate interrupts. The CPC must then poll the CH376 STATUS register to know wether the operation is finished.&lt;br /&gt;
&lt;br /&gt;
==== S2 - CH376 reset enable====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the CH376 will be reset at the same time as the CPC (hardware reset only).&lt;br /&gt;
* When this switch is OFF, the CH376 will not be reset, and the CPC must initialize it using the reset command (software reset). In this case, the CH376 internal buffer may be used to store reset resident data (but I don't know if this is of any practical use, yet).&lt;br /&gt;
&lt;br /&gt;
==== S3 - Remote reset enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the DTR signal from the remote side of the serial link is connected to the CPC reset. This means that the remote side computer can trigger the CPC reset by toggling that line. &lt;br /&gt;
* When the switch is OFF, such reset is not allowed and the CPC is safe.&lt;br /&gt;
&lt;br /&gt;
==== S4 - Remote interrupt enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the DTR signal from the remote side of the serial link is plugged to the DSR line of the UART controller. It then generates an interrupt which the CPC can process.&lt;br /&gt;
&lt;br /&gt;
=== Detecting the hardware ===&lt;br /&gt;
&lt;br /&gt;
==== Detecting the CH376 ====&lt;br /&gt;
&lt;br /&gt;
You can use the CHECK_EXIST command for this. It gets one byte as argument, and returns the negation of it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CH376_CMD	EQU	0xFE81&lt;br /&gt;
CH376_DATA	EQU	0xFE80&lt;br /&gt;
&lt;br /&gt;
CMD_CHECK_EXIST	EQU	0X06&lt;br /&gt;
&lt;br /&gt;
		; Send the command&lt;br /&gt;
		LD	BC,	CH376_CMD&lt;br /&gt;
		LD	E,	CMD_CHECK_EXIST&lt;br /&gt;
		OUT	(C),	E&lt;br /&gt;
&lt;br /&gt;
		; Send one data byte&lt;br /&gt;
		LD	BC,	CH376_DATA&lt;br /&gt;
		OUT	(C),	E&lt;br /&gt;
&lt;br /&gt;
		; Get the result&lt;br /&gt;
		IN	A,	(C)&lt;br /&gt;
&lt;br /&gt;
		; Check that the result is the same as what we sent&lt;br /&gt;
		XOR	E&lt;br /&gt;
		INC	A&lt;br /&gt;
		JR	NC,	ERROR_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
		; Here, we know that the CH376 is present!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Detecting the TL16C550D ====&lt;br /&gt;
&lt;br /&gt;
The T16C550D can be detected using its scratch register. This is a read/write register with no effect on the chip. We can check that writing a value there and reading it back works.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SCR	EQU	0xFEB7&lt;br /&gt;
&lt;br /&gt;
	LD	BC,	SCRATCH&lt;br /&gt;
	LD	A,	0x55&lt;br /&gt;
	OUT	(C),	A&lt;br /&gt;
	IN	A,	(C)&lt;br /&gt;
	CP	0x55&lt;br /&gt;
	JP	NZ,	ERROR_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
	; Here, we know the TL16C550D is present!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interrupts ===&lt;br /&gt;
&lt;br /&gt;
All interrupts on the board are handled by the TL16C550D. They can be configured to trigger either an INT or an NMI, or nothing at all.&lt;br /&gt;
&lt;br /&gt;
==== Individual interrupts control ====&lt;br /&gt;
&lt;br /&gt;
The SC16C650B manages several different interrupt sources. These can be individually configured using the interrupt enable register.&lt;br /&gt;
&lt;br /&gt;
* Bit 0: data receive interrupt, triggered whenever a byte is received on the serial line&lt;br /&gt;
* Bit 1: TX register empty, when the UART has nothing to send.&lt;br /&gt;
* Bit 2: receiver line status, to detect RTS/CTS handshaking&lt;br /&gt;
* Bit 3: modem status, used for all other interrupts (CH376, remote control, raster interrupt from CRTC cursor)&lt;br /&gt;
&lt;br /&gt;
==== Interrupt routing ====&lt;br /&gt;
&lt;br /&gt;
The interrupts can also be routed to NMI or INT, or none of them if you don't want your code to be interrupted. This is done using the OUT1 and OUT2 bits of the modem control register (MCR).&lt;br /&gt;
&lt;br /&gt;
* OUT1 (MCR bit 2) must be set to 0 to enable INT.&lt;br /&gt;
* OUT2 (MCR bit 3) must be set to 0 to enable NMI.&lt;br /&gt;
* If both bits are set to 1, interrupts are disabled.&lt;br /&gt;
* If both bits are set to 0, both INT and NMI will be triggered, which is probably useless.&lt;br /&gt;
&lt;br /&gt;
==== Interrupt identification ====&lt;br /&gt;
&lt;br /&gt;
When an interrupt occurs, the first step in the interrupt handler is to identify where it comes from. This board provides support only for Z80 interrupt mode 1.&lt;br /&gt;
&lt;br /&gt;
You get information about interrupts by first reading the IIR register. If bit 0 is set, it means Albireo is not the one which generated the interrupt. You should turn to other hardware plugged to your CPC, or, if all else fails, to the gate array interrupt.&lt;br /&gt;
&lt;br /&gt;
If the bit is cleared, there is a pending interrupt from Albireo. You then look at bits 1-3 of IIR to determine which interrupt it is.&lt;br /&gt;
&lt;br /&gt;
* 3: Receive line interrupt, read the LSR register for more details and to clear the interrupt.&lt;br /&gt;
* 2: RX data waiting, read the RX register to get the data and clear the interrupt.&lt;br /&gt;
* 6: RX timeout, read the RX register as soon as possible to get the data and clear the interrupt.&lt;br /&gt;
* 1: TX register empty, this is cleared by reading the IIR or writing more data bytes.&lt;br /&gt;
* 0: &amp;quot;modem status&amp;quot;, means one of the external interrupts was triggered, read the MSR to learn more and clear the interrupt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== External interrupts ====&lt;br /&gt;
&lt;br /&gt;
The identification of the external interrupts in the MSR is as follows:&lt;br /&gt;
&lt;br /&gt;
* Bit 0: CTS, used for flow control of serial line. It is recommended to use automatic flow control, in that case this bit is unused and can be ignored.&lt;br /&gt;
* Bit 1: Remote control interrupt, when it is enabled using switch S4. This can be triggered from the other side of the serial link using the DTR pin.&lt;br /&gt;
* Bit 2: CRTC CURSOR raster interrupt. This is triggered when the CRTC CURSOR signal is activated. When not in use, it is recommended to disable the CURSOR signal using CRTC register 10 to avoid parasite interrupts coming from here.&lt;br /&gt;
* Bit 3: Interrupt request from the CH376. Note that this bit will be set both when the CH376 triggers an interrupt, and also when the interrupt is acknowledged on the CH376 side. This means a double-acknowledge scheme is required.&lt;br /&gt;
&lt;br /&gt;
===== Double acknowledge of interrupts =====&lt;br /&gt;
Due to the way the interrupts are wired, the TL16C550D will trigger an interrupt both when the CH376 triggers one, but also when it is cleared by software. This means after clearing the CH376 interrupt, the interrupt flags of the TL16C550D should be checked again to make sure there isn't any other pending interrupt. &lt;br /&gt;
&lt;br /&gt;
This is not a problem when using the INT pin, because everything will happen with interrupts masked by the z80. However, when using the NMI, there is no masking and this would trigger a new entry into the NMI routine, which is probably not what you want.&lt;br /&gt;
&lt;br /&gt;
To avoid this problem in NMI mode, it is recommended that the NMI handler masks the NMI by using the OUT2 bit in MCR, while it processes the interrupt. This allows to perform all tasks as required. Once all interrupts have been cleared (IIR bit 0 is set again), it is safe to enable the NMI again.&lt;br /&gt;
&lt;br /&gt;
The same applies for the remote control interrupt, when clearing it on the remote side a new interrupt will be triggered. A similar approach can be used: mask out the NMI, tell the remote side the interrupt is handled and let it clear the bit, acknowledge that with the TL16C550D, and finally enable the NMI again.&lt;br /&gt;
&lt;br /&gt;
The CURSOR interrupt is not subject to this, because it is edge triggered. You can use it as an NMI source without such problems. The interrupt is cleared simply by reading the MSR register.&lt;br /&gt;
&lt;br /&gt;
[http://pulkomandy.github.io/shinra.github.io/albireo.html Albireo interface homepage]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
=== Software supporting the Albireo ===&lt;br /&gt;
* [[AlbiDOS]] ([[AMSDOS]] compatible DOS driver; see [https://framagit.org/shinra/albireo/albireodos/-/wikis/home AlbiDOS documentation]) &lt;br /&gt;
* [[SymbOS]] (USB mouse support)&lt;br /&gt;
&lt;br /&gt;
=== Upcoming software ===&lt;br /&gt;
* Serial communication to communicate with a PC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:DATA Storage]]&lt;br /&gt;
[[Category:Peripherals]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=FlashGordon&amp;diff=105085</id>
		<title>FlashGordon</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=FlashGordon&amp;diff=105085"/>
				<updated>2020-04-19T10:19:56Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* The rescue disk */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About==&lt;br /&gt;
The FlashGordon expansion is a 512KB ROM Expansion. It is a modified version of Bryce's [[MegaFlash]] with a different flash chip and some bugfixes. It allows you to add up to 32 expansion ROMs to your Amstrad/Schneider CPC or Plus computer. Moreover, it uses a flash memory chip, so the programs can be replaced directly from the computer, without having to move chips to a PROM programmer.&lt;br /&gt;
&lt;br /&gt;
The ROMs are allocated numbers from 0 to 1F. The firmware will only initialize ROMs from F to 0 at boot, so it completely ignores half of the available memory. To solve this problem, ROM slot F comes pre-programmed with a boot program that will initialize the 16 remaining ROMs, and also allows more control over them.&lt;br /&gt;
&lt;br /&gt;
==Installing the hardware==&lt;br /&gt;
FlashGordon connects to the expansion port using an adapter cable. On the computer side, you need either an HE-902 edge connector (for Amstrad CPC) or a Centronics connector (Amstrad Plus, Schneider CPC). On the other side, you need a female HE10 connector. Try to keep the cable as short as possible (no more than 20cm), else you can get into some problems with the system reliability.&lt;br /&gt;
&lt;br /&gt;
Take the board with the components facing up, and the HE10 connector towards the computer expansion port. When holding the board this way, the connection cable is wired straight. Pin 1 is on the left, as indicated by the arrow on the board. Notice that the 50-pin HE10 connector is wired backwards (pin 1 should be on the right to match the standard), but this allows for easier connection with the CPC.&lt;br /&gt;
&lt;br /&gt;
Power up the computer. It should boot at usual, but show the welcome message of the ROM manager. If something does not go as expected, unplug everything and start over. The hardware is tested before shipping, so problems come from either your cable, a dirty expansion port, or something plugged the wrong way.&lt;br /&gt;
&lt;br /&gt;
==Configuring the jumpers and switches==&lt;br /&gt;
There are 2 jumpers and a push switch on the board. The push switch enables write mode, and the jumpers allow configuration of ROMs 0 and 7 as well as a global disable mode.&lt;br /&gt;
&lt;br /&gt;
The write switch is the most interesting one. It allows you to enable writing to the flash memory so the programs in ROM can be replaced or modified. Since the Amstrad hardware and software don't expect ROM memory to be writable, there are some rules to avoid running into problems. Leave the switch off unless the ROM manager asks you to turn it on. Don't forget to turn it off when it tells you to do so.&lt;br /&gt;
&lt;br /&gt;
When writing is allowed, the red led is light.&lt;br /&gt;
&lt;br /&gt;
Warning: because of an hardware design limitation, when in write mode, the flash memory will see anything written to both the 8000-BFFF and the C000-FFFF RAM areas. This could lead to unexpected results.&lt;br /&gt;
&lt;br /&gt;
Note: the Flash chip used requires a special programming algorithm, which makes it incompatible with the Megaflash and Ramcard software in write mode.&lt;br /&gt;
&lt;br /&gt;
The two jumpers are used to control the state of ROMs 0 and 7. These need special care because they are the internal ROMs in the computer. ROM 0 is the BASIC, and ROM 7 is the AMSDOS. Most of the time, you want to keep these useable. This is the factory setting: both jumpers are placed near the connector, so the internal ROMs are used.&lt;br /&gt;
&lt;br /&gt;
The top jumper is for ROM 0, and the bottom one is for ROM 7. On CPC 6128 and DDI-1, the internal ROM 7 can't be disabled, so you should always leave the ROM 7 jumper down. On Plus and machines without disk drives, you can enable it. ROM 0 can always be overloaded, but remember that you will not boot to the BASIc in that case.&lt;br /&gt;
&lt;br /&gt;
If you completely remove the ROM 0 jumper, all the ROMs will be disabled. This is useful if you messed up one of the ROM and it makes the computer unable to boot with the ROMs enabled. Once booted, you can load the recovery program and then enable the board again when it asks you to turn the write switch on. This is the only case where you're allowed to change the jumper settings while the CPC is running.&lt;br /&gt;
&lt;br /&gt;
==Background information on expansion ROMs==&lt;br /&gt;
Now that the hardware is configured, it's time to learn how to use it. Before we detail the use of the ROM manager, here are some informations about ROMs and the best way to use them.&lt;br /&gt;
&lt;br /&gt;
The CPC firmware allows up to 252 expansion ROMs to be added to the system. This feature was present even in the CPC 464. It allowed the very clean integration of AMSDOS to manage floppy disks in a natural way from BASIC and assembler programs, without any change to their code.&lt;br /&gt;
&lt;br /&gt;
The expansion ROMs are accessed the same way as the BASIC ROM. They are mapped in the C000-FFFF range and can be read by the z80. Writing in this area will always affect the RAM, either the central memory, or expansion RAM if present and enabled. In the default configuration, this area is used as video memory, and there is no need to read from it.&lt;br /&gt;
&lt;br /&gt;
At system start, the CPC firmware will scan the first 16 ROMs slots (first 8 on CPC 464) to see of there is a compatible ROM connected. If so, the ROM is allowed to run its boot code and allocate some RAM for its own use.&lt;br /&gt;
&lt;br /&gt;
The firmware decides how to handle each ROM by looking at the first byte. If it's 0, the ROM is a foreground ROM. Calling the boot code of the ROM takes control of the computer and never gives it back. If, on the other hand, the first byte value is 1, the ROM is a background ROM. The boot code only does some configuration and gives control back to the firmware. As an example, the AMSDOS ROM is a background ROM. At boot, it replaces some system vectors to redirect file access to disc, then it gives control back. The BASIC ROM, on the other hand, is a foreground ROM. It shows the Ready prompt and wait endlessly for user input. If the value of the first byte of the ROM is anything else, it is completely ignored by the firmware. The ROM can still be used by other means (such as some code in another ROM or loaded from disk).&lt;br /&gt;
&lt;br /&gt;
Background ROMs are not limited to patching the firmware jumpblock to intercept calls to the operating system. They can also register RSXs (Resident System eXtensions). These can be called directly from the BASIC prompt using the |command syntax. For example, AMSDOS adds commands such as |DRIVE, |DIR, |ERA, etc.&lt;br /&gt;
&lt;br /&gt;
RSXs accept parameters, and they can also be called from other programs. This is a very flexible way of providing new functions to other software.&lt;br /&gt;
&lt;br /&gt;
==The ROM managers==&lt;br /&gt;
* The most comprehensive utility for the management of the ROMs are [[Roman]] and the [[MegaFlashROManager]]. A &amp;quot;booster&amp;quot; is included in both of these, enabling the initialization of ROMs 16-31 which are not scanned by the firmware.&lt;br /&gt;
&lt;br /&gt;
==The rescue disk==&lt;br /&gt;
The rescue disk is one of two ways out if you mess up something with the ROMs setup. (The other way would be to use [[Roman]] or [[MegaFlashROManager]]). The rescue disc contains the following files :&lt;br /&gt;
&lt;br /&gt;
* ROMTEST.BIN will print the available ROM numbers. Use it for hardware testing.&lt;br /&gt;
* BURN.BAS will help you programming stuff to the FlashGordon when the ROM Manager doesn't work anymore.&lt;br /&gt;
* BURN.BIN assembler code used by BURN.BAS&lt;br /&gt;
&lt;br /&gt;
The source code for the programs provided on the rescue disk are available on the source repository.&lt;br /&gt;
&lt;br /&gt;
==Creating your own ROMs==&lt;br /&gt;
You can use already existing ROM software for CPC with the FlashGordon. Any software written for romboards romboxes, ramcards, megarom or megaflash will work flawlessly. The most easy way to create you own ROMs up to 32 KB is to use the [[Softbrenner]] ROM of the [[Inicron]]s.&lt;br /&gt;
&lt;br /&gt;
But you can also write your own software to take advantage of the board to its maximal potential. This section of the documentation sums up the relevant information to get you started. You can find more information in the CPC Firmware manual and Locomotive software reference documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First of all, remember that the ROMs are always accessed by the z80 in the memory zone &amp;amp;C000 to &amp;amp;FFFF. You are not allowed to use self-modifying code, and your variables have to be stored elsewhere (as the ROM isn't writable). You also can't read the screen memory directly from ROM code. With these constraints in mind, let's now look at the structure of the ROM header.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Contents&lt;br /&gt;
|-&lt;br /&gt;
| C000	|| Rom type (0=foreground, 1=background).&lt;br /&gt;
|-&lt;br /&gt;
| C001   || Mark number (major version)&lt;br /&gt;
|-&lt;br /&gt;
| C002   || Version number&lt;br /&gt;
|-&lt;br /&gt;
| C003	|| Modification level&lt;br /&gt;
|-&lt;br /&gt;
| C004	|| Address of RSX name table (C006+3*N)&lt;br /&gt;
|-&lt;br /&gt;
| C006	|| RSX handling jump instructions&lt;br /&gt;
|-&lt;br /&gt;
| C006+3*N|| RSX name table (up to 16 character per entry), null-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The mark number, version number and modification level are unused by the firmware. They are usually ASCII characters used to make a version number. For example, the UTOPIA ROM |HELP command prints them.&lt;br /&gt;
&lt;br /&gt;
Starting at address C004 is an RSX table which is identical to the one used for RAM RSXs. The jump table must have at least as much entries as the name table. Each entry is a JP NNNN instruction and takes 3 bytes. RSX names must be uppercase, and the last character must have bit 7 set. Names using anything else than uppercase letters will make the RSX not callable from BASIC (but it can be called from assembler programs).&lt;br /&gt;
&lt;br /&gt;
The first entry in the table is the boot vector. It is called by the firmware to initialize the ROM. The name of this entry is also used as the ROM name (for example in UTOPIA, again). It may be a valid name (|BASIC for the basic) or not, if your boot vector can't be called more than once.&lt;br /&gt;
&lt;br /&gt;
At boot, the firmware always executes ROM 0 boot vector. Take care of not using a background ROM as ROM 0, because it will give back control to the firmware which doesn't expect it at that point. There are some special cases, for example AMSDOS will detect it is called as ROM 0 and will try to boot a CP/M floppy.&lt;br /&gt;
&lt;br /&gt;
As said above, background ROMs are automatically initialized by the BASIC ROM at boot for slots 1 to 15. ROMs in slots 16 to 31 are initialized by the ROM manager. They do this by calling system vectors &amp;amp;BCCB (initialize ROMs from 0 to 15) or &amp;amp;BCCE (initialize one ROM).&lt;br /&gt;
&lt;br /&gt;
The boot vector for the iniialized ROM is then called. The ROM is allowed to make space below the HIMEM (eating some of the user memory) for its own variables. Some programs will not manage to run if the HIMEM gets too low because of the ROMs. If that happens, try disabling some ROMs and booting again.&lt;br /&gt;
&lt;br /&gt;
The ROM boot vector is called with HL holding the current HIMEM value. BC and A can be used as scratch registers. DE points to LOWMEM (usually &amp;amp;0040). Your ROM can modify HL and DE to reserve memory both at the start and end of user memory space. It must set the carry to notify the firmware that everything went ok. Note that even if you don't change HL, the firmware will still allocate 4 bytes for each ROM. These are used for storing the RSX linked list data.&lt;br /&gt;
&lt;br /&gt;
Foreground ROMs must be called manually (unless they are used as ROM 0). When a foreground ROM is called, the system is reset and all expansion ROMs are disabled (this is the same thing that happens when calling a program from disk with the RUN instruction). This means the foreground ROM gets as much free RAM as possible. The firmware requires ROM slots to be consecutive, as it will stop looking for foreground ROMs as soon as it detects an empty slot. So if you have ROMs in slots 16, 17 and 19, the one in slot 19 will not be detected. You need to have one in slot 18. This does not apply to the first 15 ROMs as these are initialized when looking for background ROMs.&lt;br /&gt;
&lt;br /&gt;
==Calling an RSX from assembler==&lt;br /&gt;
Calling RSXs from BASIC is easy. Prefix the RSX name with the | character. Things are a bit more verbose in assembler, as usual.&lt;br /&gt;
&lt;br /&gt;
First of all, you need to locate the RSX. To do this, you call the KL_FIND_COMMAND (&amp;amp;BCD4) vector with HL pointing to the RSX name you're looking for (as in the RSX table, this is a string terminated by a byte with bit 7 set). If the Firmware finds a foreground ROM matching the name, it is immediately called. for background ROMs, the call returns with the rom number in C, and the address of the RSX in HL. The carry is set to indicate the ROM was found. You can then use KL_FAR_PCHL (&amp;amp;001B) or RST &amp;amp;0018 to execute the RSX. This vector takes the ROM number in C and the address in HL, so you can call it right after KL_FIND_COMMAND (after checking that the carry is set).&lt;br /&gt;
&lt;br /&gt;
An RSX can take parameters. from BASIC, these are comma separated and come after the RSX name. In assembler, A holds the parameter count, and IX points to the parameter table. Note that the first parameter in the table is actually the last one when calling from BASIC.&lt;br /&gt;
&lt;br /&gt;
Parameters are always 16-bit long. From BASIC, you can use 16-bit constants or integer variables, pointers with the @ operator, and strings. When using strings, the RSX gets a pointer to the string descriptor, which is a 3-byte struct holding the string length, and a pointer to the actual string data. If you want to use strings as parameters, expect to get them in this format.&lt;br /&gt;
&lt;br /&gt;
It is interesting to note that the BASIC calls RSXs with the last parameter also available directly in DE. It may be tempting to use this to avoid memory access using IX, but remember that not everyone has to set DE, so your RSX may not work properly when called with other means.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The RST &amp;amp;18 instruction works a bit differently. Instead of taking parameters in HL and C, it expects them to be in the program flow directly. This is interesting because all registers are passed as is to the called code. You can use them to pass data to the ROM code, bypassing the usual RSX parameter list.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	RST &amp;amp;18;&lt;br /&gt;
	DW table	&lt;br /&gt;
        RET&lt;br /&gt;
table&lt;br /&gt;
	DW &amp;amp;C009 ; Address of code to call&lt;br /&gt;
	DB &amp;amp;04 ; Rom number to connect&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also use CALL &amp;amp;0023 which expects HL to points to a table in the same format.&lt;br /&gt;
&lt;br /&gt;
Note that you don't need to go through the RSX search, it's possible to directly call code in any ROM using these vectors. Think twice before doing that, because it means you're hardcoding the call address. If the ROM you were targetting is replaced (different BASIC version, PARADOS instead of AMSDOS), the address may change and your program will stop working.&lt;br /&gt;
&lt;br /&gt;
These 3 vectors all set IY to the memory space reserved by the ROM at boot. when the ROM needs to use its internal variables, it should do so by relative addressing to the IY register.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ROM numbers 252 to 255 are interpreted by these vectors as RAM configurations (connection of the lower ROM and banks). This limits the number of expansion ROMs to 252 system-friendly ones. The remaining ROMs can still be used but you need to roll your own code to call them (poking at gate array registers at the risk of confusing the system).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The search for an RSX is done using the linked list RSX blocks. It starts with the background ROMs from 15 to 0, then the foreground ROMs from 0 to 15, then from 16 until the BASIC ROM is detected. Finally, RAM-based RSXs are searched.&lt;br /&gt;
&lt;br /&gt;
==Accessing RAM and ROM==&lt;br /&gt;
The firmware has several vectors and system calls to help with jumping back and forth between RAM and ROM. These are of great help when writing code that uses the ROMs in a system-friendly way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*RST &amp;amp;18 calls a ROM using parameters stored after the instruction. all registers besides IX can be used as parameters.&lt;br /&gt;
*CALL &amp;amp;001B calls a ROM. HL and C are used to specify the address (PC and ROM number).&lt;br /&gt;
*CALL &amp;amp;0023 calls a ROM. HL points to a 3-byte table holding the address and ROM number.&lt;br /&gt;
*CALL &amp;amp;B912 (KL_CURR_SELECTION) sets A to the current ROM number. This can be used by program spanning accross multiple ROMs to identify where they are loaded.&lt;br /&gt;
RST &amp;amp;10 can also be used for that purpose. If the ROMs are consecutive, you can call this one with a 16 bit parameter (in the code flow as usual for RSTs). The parameter is the offset (relative to C000) of the code you want to call, and the 2 most significant bytes are used to decide which ROM to call (from current to current + 3). You can get back to the calling ROM using RET. Moreover, when nesting these calls, the same base ROM is used. So the first ROM can be used as an entry point, and call internal code in up to 3 other ROMs next to it without too much trouble.&lt;br /&gt;
*CALL &amp;amp;0013 does the same, but the parameter is given in HL instead of pointed by PC. Note that you can use these to call code in ROMs 252, 253, 254, 255.&lt;br /&gt;
*CALL &amp;amp;B900 enables upper ROM. A is set to the previous value of the RMR Gate Array register (or rather, the last value known by the system).&lt;br /&gt;
*CALL &amp;amp;B903 disables upper ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B906 enables lower ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B909 disables lower ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B90C restores memory mapping according to value of A register. Undo the effect of the 4 previous calls in a clean way.&lt;br /&gt;
RST &amp;amp;08 and CALL &amp;amp;000B call code in 0000-3FFF area after changing lower ROM state (connect or diconnect). The 16 bit in HL or following PC are the addres sof the code with the 2 high order bits defining the memory mapping.&lt;br /&gt;
RST &amp;amp;28 calls code at any address with lower ROM enabled. On return, the lower ROM is always disconnected.&lt;br /&gt;
The reserved numbers are used as follows: 252 enables both lower and upper ROM, 253 enables upper ROM only, 254 enables lower ROM only, and 255 disables both. The two higher bits are used in the same way for RST &amp;amp;08 and CALL &amp;amp;000B).&lt;br /&gt;
*CALL &amp;amp;B91B executes an LDIR in RAM (disconnecting all ROMs). This is helpful if you want to access the screen memory that is hidden when the ROM is connected.&lt;br /&gt;
*CALL &amp;amp;B91E exectutes an LDDR in RAM.&lt;br /&gt;
RST &amp;amp;20 reads a single byte from RAM. HL is the address to read from, and A holds the result.&lt;br /&gt;
*CALL &amp;amp;B90F selects upper ROM from register C and enables it. Sets A and B to the previous values of RMR and previous ROM number. This vector can connect all 256 ROMs.&lt;br /&gt;
*CALL &amp;amp;B915 gets version of ROM from register C in HL (H=version, L=mark). All 256 ROMs can be used.&lt;br /&gt;
*CALL &amp;amp;B918 restores ROM configuration from register BC. Undoes the effect of &amp;amp;B90F.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Direct hardware access to ROMs==&lt;br /&gt;
Sometimes you want to get the system out of the way. You will still be able to page ROMs in and out but you must use the hardware directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You need to use the RMR register of the Gate Array. This is located at address &amp;amp;7Fxx in the I/O space. Bits 7 and 6 must be set to 10, bits 1 and 0 set the video mode, and bits 2 and 3 must be set to 0 to connect lower and upper ROMs (or 1 to connect RAM).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Register &amp;amp;DFxx (also in I/O space) can be used to select which ROM to connect. If you select a ROM that does not exists, the BASIC ROM will take the request instead. So whatever you do, there is always some memory mapped in the &amp;amp;C000-&amp;amp;FFFF area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that direct use of these ports will confuse the system. So only use them with interrupt disabled and take great care to clean after yourself.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Writing to flash memory==&lt;br /&gt;
The main feature of FlashGordon is that the memory can also be written to. Here are some details on how to achieve that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The memory chip used is an SST 39SF040. This is a flash memory chip that is smarter than a simple ROM or RAM. You talk to it by sending commands to exectute (but reading works as usual).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First of all, unmapping the ROM using the gate array will not prevent the FlashGordon to pick up the write operations. The only way to do that in software is selecting a ROM that is not handled by the MegaFlash (ROM number 255 is a good choice).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, the MegaFlash will accept write operations both in the C000-FFFF and 8000-BFFF ranges because of an hardware limitation. So, avoid reading and writing to 8000-BFFF while trying to program a ROM. We're sorry for the inconvenience, but fixing that would require an extra chip on the board, a bigger board, and more complex wiring which we tried to avoid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flash memory is split into blocks of 4 kilobytes. You can't write to a block directly, you need to erase it first. Once a block is erased, it will be full of FF bytes. Writing can only force bits to 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The protocol to respect is as follows :&lt;br /&gt;
*Connect ROM number 1 and write 0xAA to address 0xD555&lt;br /&gt;
*Connect ROM number 2 and write 0x55 to address 0xEAAA&lt;br /&gt;
*At this point, the flahs is waiting for a command to execute. The available commands are ERASE (0x80), IDENTIFY (0x90), BYTE PROGRAM (0xA0) and RESET (0xF0)&lt;br /&gt;
*To erase a sector, send the ERASE command by writing 0x80 to address 0xD555 in ROM 1. Now write once again 0xAA to address 0xD555 in ROM number 1 and 0x55 to address 0xEAAA in ROM number 2. Then, write 0x30 anywhere in the sector you want to erase. Erasing will take up to 20 milliseconds, so wait to make sure the flash is ready to accept another command.&lt;br /&gt;
*To write a byte, write 0xA0 (BYTE PROGRAM) to address 0xD555 in ROM 1. Then, connect the ROM you want to program and write one byte at the needed address. There is a delay of 20 NOPs after a write operation, that should be no problem as you can use them to prepare the write operation for the next byte (by the time you're ready to execute the next write to the ROM, it will be ready to listen).&lt;br /&gt;
*If you enter identify mode, you can read two bytes to learn about the manufacturer and model of the flash chip. This can be used to identify FlashGordon versus the MegaFlash (which will return different values), a Ramcard (too late, you already corrupted some data), or a plain old romboard (all your attemps to write are vain and bound to fail).&lt;br /&gt;
*There is also a command for a complete chip erase if you want to clear everything.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* [[Roman]] from PNG&lt;br /&gt;
* [[FutureOS]] installer&lt;br /&gt;
* [[ROManager]] from TFM&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
*Ram7, who designed the Ramcard and wrote a very good manual for it (most of what you read in this manual is very closely inspired from it).&lt;br /&gt;
*Bryce, who designed the MegaFlash and the MegaROM and made the schematics freely available&lt;br /&gt;
*Krusty and Beb, for asking me to get started on this project&lt;br /&gt;
*SyX, for the moral support and help with z80 tricks&lt;br /&gt;
*Frank Wille, for working on [[vasm]]/vlink and integrating all the messy patches&lt;br /&gt;
&lt;br /&gt;
All the work here is based on work from other people, which doesn't have a very clear licence. The general understanding is that you can share the documentation and schematics, modify and improve them, build and sell your own devices, as long as :&lt;br /&gt;
*The original authors are credited for their work&lt;br /&gt;
*You don't sell them for profit (selling manufactured hardware at a price that covers manufacturing costs is ok)&lt;br /&gt;
*Provide documentation for your changes so other people can improve on them as well. I spent several hours reverse engineering the ramcard from PCB to schematics, I hope I won't have to do it again for another device.&lt;br /&gt;
&lt;br /&gt;
[[Category:Peripherals]]&lt;br /&gt;
[[Category:Expansion ROM]]&lt;br /&gt;
[[Category:DIY]]&lt;br /&gt;
[[Category:Memory_expansions]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=FlashGordon&amp;diff=105084</id>
		<title>FlashGordon</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=FlashGordon&amp;diff=105084"/>
				<updated>2020-04-19T10:19:43Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* The ROM managers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About==&lt;br /&gt;
The FlashGordon expansion is a 512KB ROM Expansion. It is a modified version of Bryce's [[MegaFlash]] with a different flash chip and some bugfixes. It allows you to add up to 32 expansion ROMs to your Amstrad/Schneider CPC or Plus computer. Moreover, it uses a flash memory chip, so the programs can be replaced directly from the computer, without having to move chips to a PROM programmer.&lt;br /&gt;
&lt;br /&gt;
The ROMs are allocated numbers from 0 to 1F. The firmware will only initialize ROMs from F to 0 at boot, so it completely ignores half of the available memory. To solve this problem, ROM slot F comes pre-programmed with a boot program that will initialize the 16 remaining ROMs, and also allows more control over them.&lt;br /&gt;
&lt;br /&gt;
==Installing the hardware==&lt;br /&gt;
FlashGordon connects to the expansion port using an adapter cable. On the computer side, you need either an HE-902 edge connector (for Amstrad CPC) or a Centronics connector (Amstrad Plus, Schneider CPC). On the other side, you need a female HE10 connector. Try to keep the cable as short as possible (no more than 20cm), else you can get into some problems with the system reliability.&lt;br /&gt;
&lt;br /&gt;
Take the board with the components facing up, and the HE10 connector towards the computer expansion port. When holding the board this way, the connection cable is wired straight. Pin 1 is on the left, as indicated by the arrow on the board. Notice that the 50-pin HE10 connector is wired backwards (pin 1 should be on the right to match the standard), but this allows for easier connection with the CPC.&lt;br /&gt;
&lt;br /&gt;
Power up the computer. It should boot at usual, but show the welcome message of the ROM manager. If something does not go as expected, unplug everything and start over. The hardware is tested before shipping, so problems come from either your cable, a dirty expansion port, or something plugged the wrong way.&lt;br /&gt;
&lt;br /&gt;
==Configuring the jumpers and switches==&lt;br /&gt;
There are 2 jumpers and a push switch on the board. The push switch enables write mode, and the jumpers allow configuration of ROMs 0 and 7 as well as a global disable mode.&lt;br /&gt;
&lt;br /&gt;
The write switch is the most interesting one. It allows you to enable writing to the flash memory so the programs in ROM can be replaced or modified. Since the Amstrad hardware and software don't expect ROM memory to be writable, there are some rules to avoid running into problems. Leave the switch off unless the ROM manager asks you to turn it on. Don't forget to turn it off when it tells you to do so.&lt;br /&gt;
&lt;br /&gt;
When writing is allowed, the red led is light.&lt;br /&gt;
&lt;br /&gt;
Warning: because of an hardware design limitation, when in write mode, the flash memory will see anything written to both the 8000-BFFF and the C000-FFFF RAM areas. This could lead to unexpected results.&lt;br /&gt;
&lt;br /&gt;
Note: the Flash chip used requires a special programming algorithm, which makes it incompatible with the Megaflash and Ramcard software in write mode.&lt;br /&gt;
&lt;br /&gt;
The two jumpers are used to control the state of ROMs 0 and 7. These need special care because they are the internal ROMs in the computer. ROM 0 is the BASIC, and ROM 7 is the AMSDOS. Most of the time, you want to keep these useable. This is the factory setting: both jumpers are placed near the connector, so the internal ROMs are used.&lt;br /&gt;
&lt;br /&gt;
The top jumper is for ROM 0, and the bottom one is for ROM 7. On CPC 6128 and DDI-1, the internal ROM 7 can't be disabled, so you should always leave the ROM 7 jumper down. On Plus and machines without disk drives, you can enable it. ROM 0 can always be overloaded, but remember that you will not boot to the BASIc in that case.&lt;br /&gt;
&lt;br /&gt;
If you completely remove the ROM 0 jumper, all the ROMs will be disabled. This is useful if you messed up one of the ROM and it makes the computer unable to boot with the ROMs enabled. Once booted, you can load the recovery program and then enable the board again when it asks you to turn the write switch on. This is the only case where you're allowed to change the jumper settings while the CPC is running.&lt;br /&gt;
&lt;br /&gt;
==Background information on expansion ROMs==&lt;br /&gt;
Now that the hardware is configured, it's time to learn how to use it. Before we detail the use of the ROM manager, here are some informations about ROMs and the best way to use them.&lt;br /&gt;
&lt;br /&gt;
The CPC firmware allows up to 252 expansion ROMs to be added to the system. This feature was present even in the CPC 464. It allowed the very clean integration of AMSDOS to manage floppy disks in a natural way from BASIC and assembler programs, without any change to their code.&lt;br /&gt;
&lt;br /&gt;
The expansion ROMs are accessed the same way as the BASIC ROM. They are mapped in the C000-FFFF range and can be read by the z80. Writing in this area will always affect the RAM, either the central memory, or expansion RAM if present and enabled. In the default configuration, this area is used as video memory, and there is no need to read from it.&lt;br /&gt;
&lt;br /&gt;
At system start, the CPC firmware will scan the first 16 ROMs slots (first 8 on CPC 464) to see of there is a compatible ROM connected. If so, the ROM is allowed to run its boot code and allocate some RAM for its own use.&lt;br /&gt;
&lt;br /&gt;
The firmware decides how to handle each ROM by looking at the first byte. If it's 0, the ROM is a foreground ROM. Calling the boot code of the ROM takes control of the computer and never gives it back. If, on the other hand, the first byte value is 1, the ROM is a background ROM. The boot code only does some configuration and gives control back to the firmware. As an example, the AMSDOS ROM is a background ROM. At boot, it replaces some system vectors to redirect file access to disc, then it gives control back. The BASIC ROM, on the other hand, is a foreground ROM. It shows the Ready prompt and wait endlessly for user input. If the value of the first byte of the ROM is anything else, it is completely ignored by the firmware. The ROM can still be used by other means (such as some code in another ROM or loaded from disk).&lt;br /&gt;
&lt;br /&gt;
Background ROMs are not limited to patching the firmware jumpblock to intercept calls to the operating system. They can also register RSXs (Resident System eXtensions). These can be called directly from the BASIC prompt using the |command syntax. For example, AMSDOS adds commands such as |DRIVE, |DIR, |ERA, etc.&lt;br /&gt;
&lt;br /&gt;
RSXs accept parameters, and they can also be called from other programs. This is a very flexible way of providing new functions to other software.&lt;br /&gt;
&lt;br /&gt;
==The ROM managers==&lt;br /&gt;
* The most comprehensive utility for the management of the ROMs are [[Roman]] and the [[MegaFlashROManager]]. A &amp;quot;booster&amp;quot; is included in both of these, enabling the initialization of ROMs 16-31 which are not scanned by the firmware.&lt;br /&gt;
&lt;br /&gt;
==The rescue disk==&lt;br /&gt;
The rescue disk is one of two ways out if you mess up something with the ROMs setup. (The other way would be to use [[ROMAN]] or [[MegaFlashROManager]]). The rescue disc contains the following files :&lt;br /&gt;
&lt;br /&gt;
* ROMTEST.BIN will print the available ROM numbers. Use it for hardware testing.&lt;br /&gt;
* BURN.BAS will help you programming stuff to the FlashGordon when the ROM Manager doesn't work anymore.&lt;br /&gt;
* BURN.BIN assembler code used by BURN.BAS&lt;br /&gt;
&lt;br /&gt;
The source code for the programs provided on the rescue disk are available on the source repository.&lt;br /&gt;
&lt;br /&gt;
==Creating your own ROMs==&lt;br /&gt;
You can use already existing ROM software for CPC with the FlashGordon. Any software written for romboards romboxes, ramcards, megarom or megaflash will work flawlessly. The most easy way to create you own ROMs up to 32 KB is to use the [[Softbrenner]] ROM of the [[Inicron]]s.&lt;br /&gt;
&lt;br /&gt;
But you can also write your own software to take advantage of the board to its maximal potential. This section of the documentation sums up the relevant information to get you started. You can find more information in the CPC Firmware manual and Locomotive software reference documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First of all, remember that the ROMs are always accessed by the z80 in the memory zone &amp;amp;C000 to &amp;amp;FFFF. You are not allowed to use self-modifying code, and your variables have to be stored elsewhere (as the ROM isn't writable). You also can't read the screen memory directly from ROM code. With these constraints in mind, let's now look at the structure of the ROM header.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Contents&lt;br /&gt;
|-&lt;br /&gt;
| C000	|| Rom type (0=foreground, 1=background).&lt;br /&gt;
|-&lt;br /&gt;
| C001   || Mark number (major version)&lt;br /&gt;
|-&lt;br /&gt;
| C002   || Version number&lt;br /&gt;
|-&lt;br /&gt;
| C003	|| Modification level&lt;br /&gt;
|-&lt;br /&gt;
| C004	|| Address of RSX name table (C006+3*N)&lt;br /&gt;
|-&lt;br /&gt;
| C006	|| RSX handling jump instructions&lt;br /&gt;
|-&lt;br /&gt;
| C006+3*N|| RSX name table (up to 16 character per entry), null-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The mark number, version number and modification level are unused by the firmware. They are usually ASCII characters used to make a version number. For example, the UTOPIA ROM |HELP command prints them.&lt;br /&gt;
&lt;br /&gt;
Starting at address C004 is an RSX table which is identical to the one used for RAM RSXs. The jump table must have at least as much entries as the name table. Each entry is a JP NNNN instruction and takes 3 bytes. RSX names must be uppercase, and the last character must have bit 7 set. Names using anything else than uppercase letters will make the RSX not callable from BASIC (but it can be called from assembler programs).&lt;br /&gt;
&lt;br /&gt;
The first entry in the table is the boot vector. It is called by the firmware to initialize the ROM. The name of this entry is also used as the ROM name (for example in UTOPIA, again). It may be a valid name (|BASIC for the basic) or not, if your boot vector can't be called more than once.&lt;br /&gt;
&lt;br /&gt;
At boot, the firmware always executes ROM 0 boot vector. Take care of not using a background ROM as ROM 0, because it will give back control to the firmware which doesn't expect it at that point. There are some special cases, for example AMSDOS will detect it is called as ROM 0 and will try to boot a CP/M floppy.&lt;br /&gt;
&lt;br /&gt;
As said above, background ROMs are automatically initialized by the BASIC ROM at boot for slots 1 to 15. ROMs in slots 16 to 31 are initialized by the ROM manager. They do this by calling system vectors &amp;amp;BCCB (initialize ROMs from 0 to 15) or &amp;amp;BCCE (initialize one ROM).&lt;br /&gt;
&lt;br /&gt;
The boot vector for the iniialized ROM is then called. The ROM is allowed to make space below the HIMEM (eating some of the user memory) for its own variables. Some programs will not manage to run if the HIMEM gets too low because of the ROMs. If that happens, try disabling some ROMs and booting again.&lt;br /&gt;
&lt;br /&gt;
The ROM boot vector is called with HL holding the current HIMEM value. BC and A can be used as scratch registers. DE points to LOWMEM (usually &amp;amp;0040). Your ROM can modify HL and DE to reserve memory both at the start and end of user memory space. It must set the carry to notify the firmware that everything went ok. Note that even if you don't change HL, the firmware will still allocate 4 bytes for each ROM. These are used for storing the RSX linked list data.&lt;br /&gt;
&lt;br /&gt;
Foreground ROMs must be called manually (unless they are used as ROM 0). When a foreground ROM is called, the system is reset and all expansion ROMs are disabled (this is the same thing that happens when calling a program from disk with the RUN instruction). This means the foreground ROM gets as much free RAM as possible. The firmware requires ROM slots to be consecutive, as it will stop looking for foreground ROMs as soon as it detects an empty slot. So if you have ROMs in slots 16, 17 and 19, the one in slot 19 will not be detected. You need to have one in slot 18. This does not apply to the first 15 ROMs as these are initialized when looking for background ROMs.&lt;br /&gt;
&lt;br /&gt;
==Calling an RSX from assembler==&lt;br /&gt;
Calling RSXs from BASIC is easy. Prefix the RSX name with the | character. Things are a bit more verbose in assembler, as usual.&lt;br /&gt;
&lt;br /&gt;
First of all, you need to locate the RSX. To do this, you call the KL_FIND_COMMAND (&amp;amp;BCD4) vector with HL pointing to the RSX name you're looking for (as in the RSX table, this is a string terminated by a byte with bit 7 set). If the Firmware finds a foreground ROM matching the name, it is immediately called. for background ROMs, the call returns with the rom number in C, and the address of the RSX in HL. The carry is set to indicate the ROM was found. You can then use KL_FAR_PCHL (&amp;amp;001B) or RST &amp;amp;0018 to execute the RSX. This vector takes the ROM number in C and the address in HL, so you can call it right after KL_FIND_COMMAND (after checking that the carry is set).&lt;br /&gt;
&lt;br /&gt;
An RSX can take parameters. from BASIC, these are comma separated and come after the RSX name. In assembler, A holds the parameter count, and IX points to the parameter table. Note that the first parameter in the table is actually the last one when calling from BASIC.&lt;br /&gt;
&lt;br /&gt;
Parameters are always 16-bit long. From BASIC, you can use 16-bit constants or integer variables, pointers with the @ operator, and strings. When using strings, the RSX gets a pointer to the string descriptor, which is a 3-byte struct holding the string length, and a pointer to the actual string data. If you want to use strings as parameters, expect to get them in this format.&lt;br /&gt;
&lt;br /&gt;
It is interesting to note that the BASIC calls RSXs with the last parameter also available directly in DE. It may be tempting to use this to avoid memory access using IX, but remember that not everyone has to set DE, so your RSX may not work properly when called with other means.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The RST &amp;amp;18 instruction works a bit differently. Instead of taking parameters in HL and C, it expects them to be in the program flow directly. This is interesting because all registers are passed as is to the called code. You can use them to pass data to the ROM code, bypassing the usual RSX parameter list.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	RST &amp;amp;18;&lt;br /&gt;
	DW table	&lt;br /&gt;
        RET&lt;br /&gt;
table&lt;br /&gt;
	DW &amp;amp;C009 ; Address of code to call&lt;br /&gt;
	DB &amp;amp;04 ; Rom number to connect&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also use CALL &amp;amp;0023 which expects HL to points to a table in the same format.&lt;br /&gt;
&lt;br /&gt;
Note that you don't need to go through the RSX search, it's possible to directly call code in any ROM using these vectors. Think twice before doing that, because it means you're hardcoding the call address. If the ROM you were targetting is replaced (different BASIC version, PARADOS instead of AMSDOS), the address may change and your program will stop working.&lt;br /&gt;
&lt;br /&gt;
These 3 vectors all set IY to the memory space reserved by the ROM at boot. when the ROM needs to use its internal variables, it should do so by relative addressing to the IY register.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ROM numbers 252 to 255 are interpreted by these vectors as RAM configurations (connection of the lower ROM and banks). This limits the number of expansion ROMs to 252 system-friendly ones. The remaining ROMs can still be used but you need to roll your own code to call them (poking at gate array registers at the risk of confusing the system).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The search for an RSX is done using the linked list RSX blocks. It starts with the background ROMs from 15 to 0, then the foreground ROMs from 0 to 15, then from 16 until the BASIC ROM is detected. Finally, RAM-based RSXs are searched.&lt;br /&gt;
&lt;br /&gt;
==Accessing RAM and ROM==&lt;br /&gt;
The firmware has several vectors and system calls to help with jumping back and forth between RAM and ROM. These are of great help when writing code that uses the ROMs in a system-friendly way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*RST &amp;amp;18 calls a ROM using parameters stored after the instruction. all registers besides IX can be used as parameters.&lt;br /&gt;
*CALL &amp;amp;001B calls a ROM. HL and C are used to specify the address (PC and ROM number).&lt;br /&gt;
*CALL &amp;amp;0023 calls a ROM. HL points to a 3-byte table holding the address and ROM number.&lt;br /&gt;
*CALL &amp;amp;B912 (KL_CURR_SELECTION) sets A to the current ROM number. This can be used by program spanning accross multiple ROMs to identify where they are loaded.&lt;br /&gt;
RST &amp;amp;10 can also be used for that purpose. If the ROMs are consecutive, you can call this one with a 16 bit parameter (in the code flow as usual for RSTs). The parameter is the offset (relative to C000) of the code you want to call, and the 2 most significant bytes are used to decide which ROM to call (from current to current + 3). You can get back to the calling ROM using RET. Moreover, when nesting these calls, the same base ROM is used. So the first ROM can be used as an entry point, and call internal code in up to 3 other ROMs next to it without too much trouble.&lt;br /&gt;
*CALL &amp;amp;0013 does the same, but the parameter is given in HL instead of pointed by PC. Note that you can use these to call code in ROMs 252, 253, 254, 255.&lt;br /&gt;
*CALL &amp;amp;B900 enables upper ROM. A is set to the previous value of the RMR Gate Array register (or rather, the last value known by the system).&lt;br /&gt;
*CALL &amp;amp;B903 disables upper ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B906 enables lower ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B909 disables lower ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B90C restores memory mapping according to value of A register. Undo the effect of the 4 previous calls in a clean way.&lt;br /&gt;
RST &amp;amp;08 and CALL &amp;amp;000B call code in 0000-3FFF area after changing lower ROM state (connect or diconnect). The 16 bit in HL or following PC are the addres sof the code with the 2 high order bits defining the memory mapping.&lt;br /&gt;
RST &amp;amp;28 calls code at any address with lower ROM enabled. On return, the lower ROM is always disconnected.&lt;br /&gt;
The reserved numbers are used as follows: 252 enables both lower and upper ROM, 253 enables upper ROM only, 254 enables lower ROM only, and 255 disables both. The two higher bits are used in the same way for RST &amp;amp;08 and CALL &amp;amp;000B).&lt;br /&gt;
*CALL &amp;amp;B91B executes an LDIR in RAM (disconnecting all ROMs). This is helpful if you want to access the screen memory that is hidden when the ROM is connected.&lt;br /&gt;
*CALL &amp;amp;B91E exectutes an LDDR in RAM.&lt;br /&gt;
RST &amp;amp;20 reads a single byte from RAM. HL is the address to read from, and A holds the result.&lt;br /&gt;
*CALL &amp;amp;B90F selects upper ROM from register C and enables it. Sets A and B to the previous values of RMR and previous ROM number. This vector can connect all 256 ROMs.&lt;br /&gt;
*CALL &amp;amp;B915 gets version of ROM from register C in HL (H=version, L=mark). All 256 ROMs can be used.&lt;br /&gt;
*CALL &amp;amp;B918 restores ROM configuration from register BC. Undoes the effect of &amp;amp;B90F.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Direct hardware access to ROMs==&lt;br /&gt;
Sometimes you want to get the system out of the way. You will still be able to page ROMs in and out but you must use the hardware directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You need to use the RMR register of the Gate Array. This is located at address &amp;amp;7Fxx in the I/O space. Bits 7 and 6 must be set to 10, bits 1 and 0 set the video mode, and bits 2 and 3 must be set to 0 to connect lower and upper ROMs (or 1 to connect RAM).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Register &amp;amp;DFxx (also in I/O space) can be used to select which ROM to connect. If you select a ROM that does not exists, the BASIC ROM will take the request instead. So whatever you do, there is always some memory mapped in the &amp;amp;C000-&amp;amp;FFFF area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that direct use of these ports will confuse the system. So only use them with interrupt disabled and take great care to clean after yourself.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Writing to flash memory==&lt;br /&gt;
The main feature of FlashGordon is that the memory can also be written to. Here are some details on how to achieve that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The memory chip used is an SST 39SF040. This is a flash memory chip that is smarter than a simple ROM or RAM. You talk to it by sending commands to exectute (but reading works as usual).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First of all, unmapping the ROM using the gate array will not prevent the FlashGordon to pick up the write operations. The only way to do that in software is selecting a ROM that is not handled by the MegaFlash (ROM number 255 is a good choice).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, the MegaFlash will accept write operations both in the C000-FFFF and 8000-BFFF ranges because of an hardware limitation. So, avoid reading and writing to 8000-BFFF while trying to program a ROM. We're sorry for the inconvenience, but fixing that would require an extra chip on the board, a bigger board, and more complex wiring which we tried to avoid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flash memory is split into blocks of 4 kilobytes. You can't write to a block directly, you need to erase it first. Once a block is erased, it will be full of FF bytes. Writing can only force bits to 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The protocol to respect is as follows :&lt;br /&gt;
*Connect ROM number 1 and write 0xAA to address 0xD555&lt;br /&gt;
*Connect ROM number 2 and write 0x55 to address 0xEAAA&lt;br /&gt;
*At this point, the flahs is waiting for a command to execute. The available commands are ERASE (0x80), IDENTIFY (0x90), BYTE PROGRAM (0xA0) and RESET (0xF0)&lt;br /&gt;
*To erase a sector, send the ERASE command by writing 0x80 to address 0xD555 in ROM 1. Now write once again 0xAA to address 0xD555 in ROM number 1 and 0x55 to address 0xEAAA in ROM number 2. Then, write 0x30 anywhere in the sector you want to erase. Erasing will take up to 20 milliseconds, so wait to make sure the flash is ready to accept another command.&lt;br /&gt;
*To write a byte, write 0xA0 (BYTE PROGRAM) to address 0xD555 in ROM 1. Then, connect the ROM you want to program and write one byte at the needed address. There is a delay of 20 NOPs after a write operation, that should be no problem as you can use them to prepare the write operation for the next byte (by the time you're ready to execute the next write to the ROM, it will be ready to listen).&lt;br /&gt;
*If you enter identify mode, you can read two bytes to learn about the manufacturer and model of the flash chip. This can be used to identify FlashGordon versus the MegaFlash (which will return different values), a Ramcard (too late, you already corrupted some data), or a plain old romboard (all your attemps to write are vain and bound to fail).&lt;br /&gt;
*There is also a command for a complete chip erase if you want to clear everything.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* [[Roman]] from PNG&lt;br /&gt;
* [[FutureOS]] installer&lt;br /&gt;
* [[ROManager]] from TFM&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
*Ram7, who designed the Ramcard and wrote a very good manual for it (most of what you read in this manual is very closely inspired from it).&lt;br /&gt;
*Bryce, who designed the MegaFlash and the MegaROM and made the schematics freely available&lt;br /&gt;
*Krusty and Beb, for asking me to get started on this project&lt;br /&gt;
*SyX, for the moral support and help with z80 tricks&lt;br /&gt;
*Frank Wille, for working on [[vasm]]/vlink and integrating all the messy patches&lt;br /&gt;
&lt;br /&gt;
All the work here is based on work from other people, which doesn't have a very clear licence. The general understanding is that you can share the documentation and schematics, modify and improve them, build and sell your own devices, as long as :&lt;br /&gt;
*The original authors are credited for their work&lt;br /&gt;
*You don't sell them for profit (selling manufactured hardware at a price that covers manufacturing costs is ok)&lt;br /&gt;
*Provide documentation for your changes so other people can improve on them as well. I spent several hours reverse engineering the ramcard from PCB to schematics, I hope I won't have to do it again for another device.&lt;br /&gt;
&lt;br /&gt;
[[Category:Peripherals]]&lt;br /&gt;
[[Category:Expansion ROM]]&lt;br /&gt;
[[Category:DIY]]&lt;br /&gt;
[[Category:Memory_expansions]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=FlashGordon&amp;diff=105083</id>
		<title>FlashGordon</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=FlashGordon&amp;diff=105083"/>
				<updated>2020-04-19T10:19:07Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About==&lt;br /&gt;
The FlashGordon expansion is a 512KB ROM Expansion. It is a modified version of Bryce's [[MegaFlash]] with a different flash chip and some bugfixes. It allows you to add up to 32 expansion ROMs to your Amstrad/Schneider CPC or Plus computer. Moreover, it uses a flash memory chip, so the programs can be replaced directly from the computer, without having to move chips to a PROM programmer.&lt;br /&gt;
&lt;br /&gt;
The ROMs are allocated numbers from 0 to 1F. The firmware will only initialize ROMs from F to 0 at boot, so it completely ignores half of the available memory. To solve this problem, ROM slot F comes pre-programmed with a boot program that will initialize the 16 remaining ROMs, and also allows more control over them.&lt;br /&gt;
&lt;br /&gt;
==Installing the hardware==&lt;br /&gt;
FlashGordon connects to the expansion port using an adapter cable. On the computer side, you need either an HE-902 edge connector (for Amstrad CPC) or a Centronics connector (Amstrad Plus, Schneider CPC). On the other side, you need a female HE10 connector. Try to keep the cable as short as possible (no more than 20cm), else you can get into some problems with the system reliability.&lt;br /&gt;
&lt;br /&gt;
Take the board with the components facing up, and the HE10 connector towards the computer expansion port. When holding the board this way, the connection cable is wired straight. Pin 1 is on the left, as indicated by the arrow on the board. Notice that the 50-pin HE10 connector is wired backwards (pin 1 should be on the right to match the standard), but this allows for easier connection with the CPC.&lt;br /&gt;
&lt;br /&gt;
Power up the computer. It should boot at usual, but show the welcome message of the ROM manager. If something does not go as expected, unplug everything and start over. The hardware is tested before shipping, so problems come from either your cable, a dirty expansion port, or something plugged the wrong way.&lt;br /&gt;
&lt;br /&gt;
==Configuring the jumpers and switches==&lt;br /&gt;
There are 2 jumpers and a push switch on the board. The push switch enables write mode, and the jumpers allow configuration of ROMs 0 and 7 as well as a global disable mode.&lt;br /&gt;
&lt;br /&gt;
The write switch is the most interesting one. It allows you to enable writing to the flash memory so the programs in ROM can be replaced or modified. Since the Amstrad hardware and software don't expect ROM memory to be writable, there are some rules to avoid running into problems. Leave the switch off unless the ROM manager asks you to turn it on. Don't forget to turn it off when it tells you to do so.&lt;br /&gt;
&lt;br /&gt;
When writing is allowed, the red led is light.&lt;br /&gt;
&lt;br /&gt;
Warning: because of an hardware design limitation, when in write mode, the flash memory will see anything written to both the 8000-BFFF and the C000-FFFF RAM areas. This could lead to unexpected results.&lt;br /&gt;
&lt;br /&gt;
Note: the Flash chip used requires a special programming algorithm, which makes it incompatible with the Megaflash and Ramcard software in write mode.&lt;br /&gt;
&lt;br /&gt;
The two jumpers are used to control the state of ROMs 0 and 7. These need special care because they are the internal ROMs in the computer. ROM 0 is the BASIC, and ROM 7 is the AMSDOS. Most of the time, you want to keep these useable. This is the factory setting: both jumpers are placed near the connector, so the internal ROMs are used.&lt;br /&gt;
&lt;br /&gt;
The top jumper is for ROM 0, and the bottom one is for ROM 7. On CPC 6128 and DDI-1, the internal ROM 7 can't be disabled, so you should always leave the ROM 7 jumper down. On Plus and machines without disk drives, you can enable it. ROM 0 can always be overloaded, but remember that you will not boot to the BASIc in that case.&lt;br /&gt;
&lt;br /&gt;
If you completely remove the ROM 0 jumper, all the ROMs will be disabled. This is useful if you messed up one of the ROM and it makes the computer unable to boot with the ROMs enabled. Once booted, you can load the recovery program and then enable the board again when it asks you to turn the write switch on. This is the only case where you're allowed to change the jumper settings while the CPC is running.&lt;br /&gt;
&lt;br /&gt;
==Background information on expansion ROMs==&lt;br /&gt;
Now that the hardware is configured, it's time to learn how to use it. Before we detail the use of the ROM manager, here are some informations about ROMs and the best way to use them.&lt;br /&gt;
&lt;br /&gt;
The CPC firmware allows up to 252 expansion ROMs to be added to the system. This feature was present even in the CPC 464. It allowed the very clean integration of AMSDOS to manage floppy disks in a natural way from BASIC and assembler programs, without any change to their code.&lt;br /&gt;
&lt;br /&gt;
The expansion ROMs are accessed the same way as the BASIC ROM. They are mapped in the C000-FFFF range and can be read by the z80. Writing in this area will always affect the RAM, either the central memory, or expansion RAM if present and enabled. In the default configuration, this area is used as video memory, and there is no need to read from it.&lt;br /&gt;
&lt;br /&gt;
At system start, the CPC firmware will scan the first 16 ROMs slots (first 8 on CPC 464) to see of there is a compatible ROM connected. If so, the ROM is allowed to run its boot code and allocate some RAM for its own use.&lt;br /&gt;
&lt;br /&gt;
The firmware decides how to handle each ROM by looking at the first byte. If it's 0, the ROM is a foreground ROM. Calling the boot code of the ROM takes control of the computer and never gives it back. If, on the other hand, the first byte value is 1, the ROM is a background ROM. The boot code only does some configuration and gives control back to the firmware. As an example, the AMSDOS ROM is a background ROM. At boot, it replaces some system vectors to redirect file access to disc, then it gives control back. The BASIC ROM, on the other hand, is a foreground ROM. It shows the Ready prompt and wait endlessly for user input. If the value of the first byte of the ROM is anything else, it is completely ignored by the firmware. The ROM can still be used by other means (such as some code in another ROM or loaded from disk).&lt;br /&gt;
&lt;br /&gt;
Background ROMs are not limited to patching the firmware jumpblock to intercept calls to the operating system. They can also register RSXs (Resident System eXtensions). These can be called directly from the BASIC prompt using the |command syntax. For example, AMSDOS adds commands such as |DRIVE, |DIR, |ERA, etc.&lt;br /&gt;
&lt;br /&gt;
RSXs accept parameters, and they can also be called from other programs. This is a very flexible way of providing new functions to other software.&lt;br /&gt;
&lt;br /&gt;
==The ROM managers==&lt;br /&gt;
* The most comprehensive utility for the management of the ROMs are [[ROMAN]] and the [[MegaFlashROManager]]. A &amp;quot;booster&amp;quot; is included in both of these, enabling the initialization of ROMs 16-31 which are not scanned by the firmware.&lt;br /&gt;
&lt;br /&gt;
==The rescue disk==&lt;br /&gt;
The rescue disk is one of two ways out if you mess up something with the ROMs setup. (The other way would be to use [[ROMAN]] or [[MegaFlashROManager]]). The rescue disc contains the following files :&lt;br /&gt;
&lt;br /&gt;
* ROMTEST.BIN will print the available ROM numbers. Use it for hardware testing.&lt;br /&gt;
* BURN.BAS will help you programming stuff to the FlashGordon when the ROM Manager doesn't work anymore.&lt;br /&gt;
* BURN.BIN assembler code used by BURN.BAS&lt;br /&gt;
&lt;br /&gt;
The source code for the programs provided on the rescue disk are available on the source repository.&lt;br /&gt;
&lt;br /&gt;
==Creating your own ROMs==&lt;br /&gt;
You can use already existing ROM software for CPC with the FlashGordon. Any software written for romboards romboxes, ramcards, megarom or megaflash will work flawlessly. The most easy way to create you own ROMs up to 32 KB is to use the [[Softbrenner]] ROM of the [[Inicron]]s.&lt;br /&gt;
&lt;br /&gt;
But you can also write your own software to take advantage of the board to its maximal potential. This section of the documentation sums up the relevant information to get you started. You can find more information in the CPC Firmware manual and Locomotive software reference documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First of all, remember that the ROMs are always accessed by the z80 in the memory zone &amp;amp;C000 to &amp;amp;FFFF. You are not allowed to use self-modifying code, and your variables have to be stored elsewhere (as the ROM isn't writable). You also can't read the screen memory directly from ROM code. With these constraints in mind, let's now look at the structure of the ROM header.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Contents&lt;br /&gt;
|-&lt;br /&gt;
| C000	|| Rom type (0=foreground, 1=background).&lt;br /&gt;
|-&lt;br /&gt;
| C001   || Mark number (major version)&lt;br /&gt;
|-&lt;br /&gt;
| C002   || Version number&lt;br /&gt;
|-&lt;br /&gt;
| C003	|| Modification level&lt;br /&gt;
|-&lt;br /&gt;
| C004	|| Address of RSX name table (C006+3*N)&lt;br /&gt;
|-&lt;br /&gt;
| C006	|| RSX handling jump instructions&lt;br /&gt;
|-&lt;br /&gt;
| C006+3*N|| RSX name table (up to 16 character per entry), null-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The mark number, version number and modification level are unused by the firmware. They are usually ASCII characters used to make a version number. For example, the UTOPIA ROM |HELP command prints them.&lt;br /&gt;
&lt;br /&gt;
Starting at address C004 is an RSX table which is identical to the one used for RAM RSXs. The jump table must have at least as much entries as the name table. Each entry is a JP NNNN instruction and takes 3 bytes. RSX names must be uppercase, and the last character must have bit 7 set. Names using anything else than uppercase letters will make the RSX not callable from BASIC (but it can be called from assembler programs).&lt;br /&gt;
&lt;br /&gt;
The first entry in the table is the boot vector. It is called by the firmware to initialize the ROM. The name of this entry is also used as the ROM name (for example in UTOPIA, again). It may be a valid name (|BASIC for the basic) or not, if your boot vector can't be called more than once.&lt;br /&gt;
&lt;br /&gt;
At boot, the firmware always executes ROM 0 boot vector. Take care of not using a background ROM as ROM 0, because it will give back control to the firmware which doesn't expect it at that point. There are some special cases, for example AMSDOS will detect it is called as ROM 0 and will try to boot a CP/M floppy.&lt;br /&gt;
&lt;br /&gt;
As said above, background ROMs are automatically initialized by the BASIC ROM at boot for slots 1 to 15. ROMs in slots 16 to 31 are initialized by the ROM manager. They do this by calling system vectors &amp;amp;BCCB (initialize ROMs from 0 to 15) or &amp;amp;BCCE (initialize one ROM).&lt;br /&gt;
&lt;br /&gt;
The boot vector for the iniialized ROM is then called. The ROM is allowed to make space below the HIMEM (eating some of the user memory) for its own variables. Some programs will not manage to run if the HIMEM gets too low because of the ROMs. If that happens, try disabling some ROMs and booting again.&lt;br /&gt;
&lt;br /&gt;
The ROM boot vector is called with HL holding the current HIMEM value. BC and A can be used as scratch registers. DE points to LOWMEM (usually &amp;amp;0040). Your ROM can modify HL and DE to reserve memory both at the start and end of user memory space. It must set the carry to notify the firmware that everything went ok. Note that even if you don't change HL, the firmware will still allocate 4 bytes for each ROM. These are used for storing the RSX linked list data.&lt;br /&gt;
&lt;br /&gt;
Foreground ROMs must be called manually (unless they are used as ROM 0). When a foreground ROM is called, the system is reset and all expansion ROMs are disabled (this is the same thing that happens when calling a program from disk with the RUN instruction). This means the foreground ROM gets as much free RAM as possible. The firmware requires ROM slots to be consecutive, as it will stop looking for foreground ROMs as soon as it detects an empty slot. So if you have ROMs in slots 16, 17 and 19, the one in slot 19 will not be detected. You need to have one in slot 18. This does not apply to the first 15 ROMs as these are initialized when looking for background ROMs.&lt;br /&gt;
&lt;br /&gt;
==Calling an RSX from assembler==&lt;br /&gt;
Calling RSXs from BASIC is easy. Prefix the RSX name with the | character. Things are a bit more verbose in assembler, as usual.&lt;br /&gt;
&lt;br /&gt;
First of all, you need to locate the RSX. To do this, you call the KL_FIND_COMMAND (&amp;amp;BCD4) vector with HL pointing to the RSX name you're looking for (as in the RSX table, this is a string terminated by a byte with bit 7 set). If the Firmware finds a foreground ROM matching the name, it is immediately called. for background ROMs, the call returns with the rom number in C, and the address of the RSX in HL. The carry is set to indicate the ROM was found. You can then use KL_FAR_PCHL (&amp;amp;001B) or RST &amp;amp;0018 to execute the RSX. This vector takes the ROM number in C and the address in HL, so you can call it right after KL_FIND_COMMAND (after checking that the carry is set).&lt;br /&gt;
&lt;br /&gt;
An RSX can take parameters. from BASIC, these are comma separated and come after the RSX name. In assembler, A holds the parameter count, and IX points to the parameter table. Note that the first parameter in the table is actually the last one when calling from BASIC.&lt;br /&gt;
&lt;br /&gt;
Parameters are always 16-bit long. From BASIC, you can use 16-bit constants or integer variables, pointers with the @ operator, and strings. When using strings, the RSX gets a pointer to the string descriptor, which is a 3-byte struct holding the string length, and a pointer to the actual string data. If you want to use strings as parameters, expect to get them in this format.&lt;br /&gt;
&lt;br /&gt;
It is interesting to note that the BASIC calls RSXs with the last parameter also available directly in DE. It may be tempting to use this to avoid memory access using IX, but remember that not everyone has to set DE, so your RSX may not work properly when called with other means.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The RST &amp;amp;18 instruction works a bit differently. Instead of taking parameters in HL and C, it expects them to be in the program flow directly. This is interesting because all registers are passed as is to the called code. You can use them to pass data to the ROM code, bypassing the usual RSX parameter list.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	RST &amp;amp;18;&lt;br /&gt;
	DW table	&lt;br /&gt;
        RET&lt;br /&gt;
table&lt;br /&gt;
	DW &amp;amp;C009 ; Address of code to call&lt;br /&gt;
	DB &amp;amp;04 ; Rom number to connect&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also use CALL &amp;amp;0023 which expects HL to points to a table in the same format.&lt;br /&gt;
&lt;br /&gt;
Note that you don't need to go through the RSX search, it's possible to directly call code in any ROM using these vectors. Think twice before doing that, because it means you're hardcoding the call address. If the ROM you were targetting is replaced (different BASIC version, PARADOS instead of AMSDOS), the address may change and your program will stop working.&lt;br /&gt;
&lt;br /&gt;
These 3 vectors all set IY to the memory space reserved by the ROM at boot. when the ROM needs to use its internal variables, it should do so by relative addressing to the IY register.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ROM numbers 252 to 255 are interpreted by these vectors as RAM configurations (connection of the lower ROM and banks). This limits the number of expansion ROMs to 252 system-friendly ones. The remaining ROMs can still be used but you need to roll your own code to call them (poking at gate array registers at the risk of confusing the system).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The search for an RSX is done using the linked list RSX blocks. It starts with the background ROMs from 15 to 0, then the foreground ROMs from 0 to 15, then from 16 until the BASIC ROM is detected. Finally, RAM-based RSXs are searched.&lt;br /&gt;
&lt;br /&gt;
==Accessing RAM and ROM==&lt;br /&gt;
The firmware has several vectors and system calls to help with jumping back and forth between RAM and ROM. These are of great help when writing code that uses the ROMs in a system-friendly way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*RST &amp;amp;18 calls a ROM using parameters stored after the instruction. all registers besides IX can be used as parameters.&lt;br /&gt;
*CALL &amp;amp;001B calls a ROM. HL and C are used to specify the address (PC and ROM number).&lt;br /&gt;
*CALL &amp;amp;0023 calls a ROM. HL points to a 3-byte table holding the address and ROM number.&lt;br /&gt;
*CALL &amp;amp;B912 (KL_CURR_SELECTION) sets A to the current ROM number. This can be used by program spanning accross multiple ROMs to identify where they are loaded.&lt;br /&gt;
RST &amp;amp;10 can also be used for that purpose. If the ROMs are consecutive, you can call this one with a 16 bit parameter (in the code flow as usual for RSTs). The parameter is the offset (relative to C000) of the code you want to call, and the 2 most significant bytes are used to decide which ROM to call (from current to current + 3). You can get back to the calling ROM using RET. Moreover, when nesting these calls, the same base ROM is used. So the first ROM can be used as an entry point, and call internal code in up to 3 other ROMs next to it without too much trouble.&lt;br /&gt;
*CALL &amp;amp;0013 does the same, but the parameter is given in HL instead of pointed by PC. Note that you can use these to call code in ROMs 252, 253, 254, 255.&lt;br /&gt;
*CALL &amp;amp;B900 enables upper ROM. A is set to the previous value of the RMR Gate Array register (or rather, the last value known by the system).&lt;br /&gt;
*CALL &amp;amp;B903 disables upper ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B906 enables lower ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B909 disables lower ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B90C restores memory mapping according to value of A register. Undo the effect of the 4 previous calls in a clean way.&lt;br /&gt;
RST &amp;amp;08 and CALL &amp;amp;000B call code in 0000-3FFF area after changing lower ROM state (connect or diconnect). The 16 bit in HL or following PC are the addres sof the code with the 2 high order bits defining the memory mapping.&lt;br /&gt;
RST &amp;amp;28 calls code at any address with lower ROM enabled. On return, the lower ROM is always disconnected.&lt;br /&gt;
The reserved numbers are used as follows: 252 enables both lower and upper ROM, 253 enables upper ROM only, 254 enables lower ROM only, and 255 disables both. The two higher bits are used in the same way for RST &amp;amp;08 and CALL &amp;amp;000B).&lt;br /&gt;
*CALL &amp;amp;B91B executes an LDIR in RAM (disconnecting all ROMs). This is helpful if you want to access the screen memory that is hidden when the ROM is connected.&lt;br /&gt;
*CALL &amp;amp;B91E exectutes an LDDR in RAM.&lt;br /&gt;
RST &amp;amp;20 reads a single byte from RAM. HL is the address to read from, and A holds the result.&lt;br /&gt;
*CALL &amp;amp;B90F selects upper ROM from register C and enables it. Sets A and B to the previous values of RMR and previous ROM number. This vector can connect all 256 ROMs.&lt;br /&gt;
*CALL &amp;amp;B915 gets version of ROM from register C in HL (H=version, L=mark). All 256 ROMs can be used.&lt;br /&gt;
*CALL &amp;amp;B918 restores ROM configuration from register BC. Undoes the effect of &amp;amp;B90F.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Direct hardware access to ROMs==&lt;br /&gt;
Sometimes you want to get the system out of the way. You will still be able to page ROMs in and out but you must use the hardware directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You need to use the RMR register of the Gate Array. This is located at address &amp;amp;7Fxx in the I/O space. Bits 7 and 6 must be set to 10, bits 1 and 0 set the video mode, and bits 2 and 3 must be set to 0 to connect lower and upper ROMs (or 1 to connect RAM).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Register &amp;amp;DFxx (also in I/O space) can be used to select which ROM to connect. If you select a ROM that does not exists, the BASIC ROM will take the request instead. So whatever you do, there is always some memory mapped in the &amp;amp;C000-&amp;amp;FFFF area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that direct use of these ports will confuse the system. So only use them with interrupt disabled and take great care to clean after yourself.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Writing to flash memory==&lt;br /&gt;
The main feature of FlashGordon is that the memory can also be written to. Here are some details on how to achieve that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The memory chip used is an SST 39SF040. This is a flash memory chip that is smarter than a simple ROM or RAM. You talk to it by sending commands to exectute (but reading works as usual).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First of all, unmapping the ROM using the gate array will not prevent the FlashGordon to pick up the write operations. The only way to do that in software is selecting a ROM that is not handled by the MegaFlash (ROM number 255 is a good choice).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, the MegaFlash will accept write operations both in the C000-FFFF and 8000-BFFF ranges because of an hardware limitation. So, avoid reading and writing to 8000-BFFF while trying to program a ROM. We're sorry for the inconvenience, but fixing that would require an extra chip on the board, a bigger board, and more complex wiring which we tried to avoid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flash memory is split into blocks of 4 kilobytes. You can't write to a block directly, you need to erase it first. Once a block is erased, it will be full of FF bytes. Writing can only force bits to 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The protocol to respect is as follows :&lt;br /&gt;
*Connect ROM number 1 and write 0xAA to address 0xD555&lt;br /&gt;
*Connect ROM number 2 and write 0x55 to address 0xEAAA&lt;br /&gt;
*At this point, the flahs is waiting for a command to execute. The available commands are ERASE (0x80), IDENTIFY (0x90), BYTE PROGRAM (0xA0) and RESET (0xF0)&lt;br /&gt;
*To erase a sector, send the ERASE command by writing 0x80 to address 0xD555 in ROM 1. Now write once again 0xAA to address 0xD555 in ROM number 1 and 0x55 to address 0xEAAA in ROM number 2. Then, write 0x30 anywhere in the sector you want to erase. Erasing will take up to 20 milliseconds, so wait to make sure the flash is ready to accept another command.&lt;br /&gt;
*To write a byte, write 0xA0 (BYTE PROGRAM) to address 0xD555 in ROM 1. Then, connect the ROM you want to program and write one byte at the needed address. There is a delay of 20 NOPs after a write operation, that should be no problem as you can use them to prepare the write operation for the next byte (by the time you're ready to execute the next write to the ROM, it will be ready to listen).&lt;br /&gt;
*If you enter identify mode, you can read two bytes to learn about the manufacturer and model of the flash chip. This can be used to identify FlashGordon versus the MegaFlash (which will return different values), a Ramcard (too late, you already corrupted some data), or a plain old romboard (all your attemps to write are vain and bound to fail).&lt;br /&gt;
*There is also a command for a complete chip erase if you want to clear everything.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* [[Roman]] from PNG&lt;br /&gt;
* [[FutureOS]] installer&lt;br /&gt;
* [[ROManager]] from TFM&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
*Ram7, who designed the Ramcard and wrote a very good manual for it (most of what you read in this manual is very closely inspired from it).&lt;br /&gt;
*Bryce, who designed the MegaFlash and the MegaROM and made the schematics freely available&lt;br /&gt;
*Krusty and Beb, for asking me to get started on this project&lt;br /&gt;
*SyX, for the moral support and help with z80 tricks&lt;br /&gt;
*Frank Wille, for working on [[vasm]]/vlink and integrating all the messy patches&lt;br /&gt;
&lt;br /&gt;
All the work here is based on work from other people, which doesn't have a very clear licence. The general understanding is that you can share the documentation and schematics, modify and improve them, build and sell your own devices, as long as :&lt;br /&gt;
*The original authors are credited for their work&lt;br /&gt;
*You don't sell them for profit (selling manufactured hardware at a price that covers manufacturing costs is ok)&lt;br /&gt;
*Provide documentation for your changes so other people can improve on them as well. I spent several hours reverse engineering the ramcard from PCB to schematics, I hope I won't have to do it again for another device.&lt;br /&gt;
&lt;br /&gt;
[[Category:Peripherals]]&lt;br /&gt;
[[Category:Expansion ROM]]&lt;br /&gt;
[[Category:DIY]]&lt;br /&gt;
[[Category:Memory_expansions]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=FlashGordon&amp;diff=105082</id>
		<title>FlashGordon</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=FlashGordon&amp;diff=105082"/>
				<updated>2020-04-19T10:16:36Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* The rescue disk */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About==&lt;br /&gt;
The FlashGordon expansion is a 512KB ROM Expansion. It is a modified version of Bryce's [[MegaFlash]] with a different flash chip and some bugfixes. It allows you to add up to 32 expansion ROMs to your Amstrad/Schneider CPC or Plus computer. Moreover, it uses a flash memory chip, so the programs can be replaced directly from the computer, without having to move chips to a PROM programmer.&lt;br /&gt;
&lt;br /&gt;
The ROMs are allocated numbers from 0 to 1F. The firmware will only initialize ROMs from F to 0 at boot, so it completely ignores half of the available memory. To solve this problem, ROM slot F comes pre-programmed with a boot program that will initialize the 16 remaining ROMs, and also allows more control over them.&lt;br /&gt;
&lt;br /&gt;
==Installing the hardware==&lt;br /&gt;
FlashGordon connects to the expansion port using an adapter cable. On the computer side, you need either an HE-902 edge connector (for Amstrad CPC) or a Centronics connector (Amstrad Plus, Schneider CPC). On the other side, you need a female HE10 connector. Try to keep the cable as short as possible (no more than 20cm), else you can get into some problems with the system reliability.&lt;br /&gt;
&lt;br /&gt;
Take the board with the components facing up, and the HE10 connector towards the computer expansion port. When holding the board this way, the connection cable is wired straight. Pin 1 is on the left, as indicated by the arrow on the board. Notice that the 50-pin HE10 connector is wired backwards (pin 1 should be on the right to match the standard), but this allows for easier connection with the CPC.&lt;br /&gt;
&lt;br /&gt;
Power up the computer. It should boot at usual, but show the welcome message of the ROM manager. If something does not go as expected, unplug everything and start over. The hardware is tested before shipping, so problems come from either your cable, a dirty expansion port, or something plugged the wrong way.&lt;br /&gt;
&lt;br /&gt;
==Configuring the jumpers and switches==&lt;br /&gt;
There are 2 jumpers and a push switch on the board. The push switch enables write mode, and the jumpers allow configuration of ROMs 0 and 7 as well as a global disable mode.&lt;br /&gt;
&lt;br /&gt;
The write switch is the most interesting one. It allows you to enable writing to the flash memory so the programs in ROM can be replaced or modified. Since the Amstrad hardware and software don't expect ROM memory to be writable, there are some rules to avoid running into problems. Leave the switch off unless the ROM manager asks you to turn it on. Don't forget to turn it off when it tells you to do so.&lt;br /&gt;
&lt;br /&gt;
When writing is allowed, the red led is light.&lt;br /&gt;
&lt;br /&gt;
Warning: because of an hardware design limitation, when in write mode, the flash memory will see anything written to both the 8000-BFFF and the C000-FFFF RAM areas. This could lead to unexpected results.&lt;br /&gt;
&lt;br /&gt;
Note: the Flash chip used requires a special programming algorithm, which makes it incompatible with the Megaflash and Ramcard software in write mode.&lt;br /&gt;
&lt;br /&gt;
The two jumpers are used to control the state of ROMs 0 and 7. These need special care because they are the internal ROMs in the computer. ROM 0 is the BASIC, and ROM 7 is the AMSDOS. Most of the time, you want to keep these useable. This is the factory setting: both jumpers are placed near the connector, so the internal ROMs are used.&lt;br /&gt;
&lt;br /&gt;
The top jumper is for ROM 0, and the bottom one is for ROM 7. On CPC 6128 and DDI-1, the internal ROM 7 can't be disabled, so you should always leave the ROM 7 jumper down. On Plus and machines without disk drives, you can enable it. ROM 0 can always be overloaded, but remember that you will not boot to the BASIc in that case.&lt;br /&gt;
&lt;br /&gt;
If you completely remove the ROM 0 jumper, all the ROMs will be disabled. This is useful if you messed up one of the ROM and it makes the computer unable to boot with the ROMs enabled. Once booted, you can load the recovery program and then enable the board again when it asks you to turn the write switch on. This is the only case where you're allowed to change the jumper settings while the CPC is running.&lt;br /&gt;
&lt;br /&gt;
==Background information on expansion ROMs==&lt;br /&gt;
Now that the hardware is configured, it's time to learn how to use it. Before we detail the use of the ROM manager, here are some informations about ROMs and the best way to use them.&lt;br /&gt;
&lt;br /&gt;
The CPC firmware allows up to 252 expansion ROMs to be added to the system. This feature was present even in the CPC 464. It allowed the very clean integration of AMSDOS to manage floppy disks in a natural way from BASIC and assembler programs, without any change to their code.&lt;br /&gt;
&lt;br /&gt;
The expansion ROMs are accessed the same way as the BASIC ROM. They are mapped in the C000-FFFF range and can be read by the z80. Writing in this area will always affect the RAM, either the central memory, or expansion RAM if present and enabled. In the default configuration, this area is used as video memory, and there is no need to read from it.&lt;br /&gt;
&lt;br /&gt;
At system start, the CPC firmware will scan the first 16 ROMs slots (first 8 on CPC 464) to see of there is a compatible ROM connected. If so, the ROM is allowed to run its boot code and allocate some RAM for its own use.&lt;br /&gt;
&lt;br /&gt;
The firmware decides how to handle each ROM by looking at the first byte. If it's 0, the ROM is a foreground ROM. Calling the boot code of the ROM takes control of the computer and never gives it back. If, on the other hand, the first byte value is 1, the ROM is a background ROM. The boot code only does some configuration and gives control back to the firmware. As an example, the AMSDOS ROM is a background ROM. At boot, it replaces some system vectors to redirect file access to disc, then it gives control back. The BASIC ROM, on the other hand, is a foreground ROM. It shows the Ready prompt and wait endlessly for user input. If the value of the first byte of the ROM is anything else, it is completely ignored by the firmware. The ROM can still be used by other means (such as some code in another ROM or loaded from disk).&lt;br /&gt;
&lt;br /&gt;
Background ROMs are not limited to patching the firmware jumpblock to intercept calls to the operating system. They can also register RSXs (Resident System eXtensions). These can be called directly from the BASIC prompt using the |command syntax. For example, AMSDOS adds commands such as |DRIVE, |DIR, |ERA, etc.&lt;br /&gt;
&lt;br /&gt;
RSXs accept parameters, and they can also be called from other programs. This is a very flexible way of providing new functions to other software.&lt;br /&gt;
&lt;br /&gt;
==The ROM managers==&lt;br /&gt;
* The most comprehensive utility for the management of the ROMs are [[ROMAN]] and the [[MegaFlashROManager]]. A &amp;quot;booster&amp;quot; is included in both of these, enabling the initialization of ROMs 16-31 which are not scanned by the firmware.&lt;br /&gt;
&lt;br /&gt;
==The rescue disk==&lt;br /&gt;
The rescue disk is one of two ways out if you mess up something with the ROMs setup. (The other way would be to use [[ROMAN]] or [[MegaFlashROManager]]). The rescue disc contains the following files :&lt;br /&gt;
&lt;br /&gt;
* ROMTEST.BIN will print the available ROM numbers. Use it for hardware testing.&lt;br /&gt;
* BURN.BAS will help you programming stuff to the FlashGordon when the ROM Manager doesn't work anymore.&lt;br /&gt;
* BURN.BIN assembler code used by BURN.BAS&lt;br /&gt;
&lt;br /&gt;
The source code for the programs provided on the rescue disk are available on the source repository.&lt;br /&gt;
&lt;br /&gt;
==Creating your own ROMs==&lt;br /&gt;
You can use already existing ROM software for CPC with the FlashGordon. Any software written for romboards romboxes, ramcards, megarom or megaflash will work flawlessly. The most easy way to create you own ROMs up to 32 KB is to use the [[Softbrenner]] ROM of the [[Inicron]]s.&lt;br /&gt;
&lt;br /&gt;
But you can also write your own software to take advantage of the board to its maximal potential. This section of the documentation sums up the relevant information to get you started. You can find more information in the CPC Firmware manual and Locomotive software reference documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First of all, remember that the ROMs are always accessed by the z80 in the memory zone &amp;amp;C000 to &amp;amp;FFFF. You are not allowed to use self-modifying code, and your variables have to be stored elsewhere (as the ROM isn't writable). You also can't read the screen memory directly from ROM code. With these constraints in mind, let's now look at the structure of the ROM header.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Contents&lt;br /&gt;
|-&lt;br /&gt;
| C000	|| Rom type (0=foreground, 1=background).&lt;br /&gt;
|-&lt;br /&gt;
| C001   || Mark number (major version)&lt;br /&gt;
|-&lt;br /&gt;
| C002   || Version number&lt;br /&gt;
|-&lt;br /&gt;
| C003	|| Modification level&lt;br /&gt;
|-&lt;br /&gt;
| C004	|| Address of RSX name table (C006+3*N)&lt;br /&gt;
|-&lt;br /&gt;
| C006	|| RSX handling jump instructions&lt;br /&gt;
|-&lt;br /&gt;
| C006+3*N|| RSX name table (up to 16 character per entry), null-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The mark number, version number and modification level are unused by the firmware. They are usually ASCII characters used to make a version number. For example, the UTOPIA ROM |HELP command prints them.&lt;br /&gt;
&lt;br /&gt;
Starting at address C004 is an RSX table which is identical to the one used for RAM RSXs. The jump table must have at least as much entries as the name table. Each entry is a JP NNNN instruction and takes 3 bytes. RSX names must be uppercase, and the last character must have bit 7 set. Names using anything else than uppercase letters will make the RSX not callable from BASIC (but it can be called from assembler programs).&lt;br /&gt;
&lt;br /&gt;
The first entry in the table is the boot vector. It is called by the firmware to initialize the ROM. The name of this entry is also used as the ROM name (for example in UTOPIA, again). It may be a valid name (|BASIC for the basic) or not, if your boot vector can't be called more than once.&lt;br /&gt;
&lt;br /&gt;
At boot, the firmware always executes ROM 0 boot vector. Take care of not using a background ROM as ROM 0, because it will give back control to the firmware which doesn't expect it at that point. There are some special cases, for example AMSDOS will detect it is called as ROM 0 and will try to boot a CP/M floppy.&lt;br /&gt;
&lt;br /&gt;
As said above, background ROMs are automatically initialized by the BASIC ROM at boot for slots 1 to 15. ROMs in slots 16 to 31 are initialized by the ROM manager. They do this by calling system vectors &amp;amp;BCCB (initialize ROMs from 0 to 15) or &amp;amp;BCCE (initialize one ROM).&lt;br /&gt;
&lt;br /&gt;
The boot vector for the iniialized ROM is then called. The ROM is allowed to make space below the HIMEM (eating some of the user memory) for its own variables. Some programs will not manage to run if the HIMEM gets too low because of the ROMs. If that happens, try disabling some ROMs and booting again.&lt;br /&gt;
&lt;br /&gt;
The ROM boot vector is called with HL holding the current HIMEM value. BC and A can be used as scratch registers. DE points to LOWMEM (usually &amp;amp;0040). Your ROM can modify HL and DE to reserve memory both at the start and end of user memory space. It must set the carry to notify the firmware that everything went ok. Note that even if you don't change HL, the firmware will still allocate 4 bytes for each ROM. These are used for storing the RSX linked list data.&lt;br /&gt;
&lt;br /&gt;
Foreground ROMs must be called manually (unless they are used as ROM 0). When a foreground ROM is called, the system is reset and all expansion ROMs are disabled (this is the same thing that happens when calling a program from disk with the RUN instruction). This means the foreground ROM gets as much free RAM as possible. The firmware requires ROM slots to be consecutive, as it will stop looking for foreground ROMs as soon as it detects an empty slot. So if you have ROMs in slots 16, 17 and 19, the one in slot 19 will not be detected. You need to have one in slot 18. This does not apply to the first 15 ROMs as these are initialized when looking for background ROMs.&lt;br /&gt;
&lt;br /&gt;
==Calling an RSX from assembler==&lt;br /&gt;
Calling RSXs from BASIC is easy. Prefix the RSX name with the | character. Things are a bit more verbose in assembler, as usual.&lt;br /&gt;
&lt;br /&gt;
First of all, you need to locate the RSX. To do this, you call the KL_FIND_COMMAND (&amp;amp;BCD4) vector with HL pointing to the RSX name you're looking for (as in the RSX table, this is a string terminated by a byte with bit 7 set). If the Firmware finds a foreground ROM matching the name, it is immediately called. for background ROMs, the call returns with the rom number in C, and the address of the RSX in HL. The carry is set to indicate the ROM was found. You can then use KL_FAR_PCHL (&amp;amp;001B) or RST &amp;amp;0018 to execute the RSX. This vector takes the ROM number in C and the address in HL, so you can call it right after KL_FIND_COMMAND (after checking that the carry is set).&lt;br /&gt;
&lt;br /&gt;
An RSX can take parameters. from BASIC, these are comma separated and come after the RSX name. In assembler, A holds the parameter count, and IX points to the parameter table. Note that the first parameter in the table is actually the last one when calling from BASIC.&lt;br /&gt;
&lt;br /&gt;
Parameters are always 16-bit long. From BASIC, you can use 16-bit constants or integer variables, pointers with the @ operator, and strings. When using strings, the RSX gets a pointer to the string descriptor, which is a 3-byte struct holding the string length, and a pointer to the actual string data. If you want to use strings as parameters, expect to get them in this format.&lt;br /&gt;
&lt;br /&gt;
It is interesting to note that the BASIC calls RSXs with the last parameter also available directly in DE. It may be tempting to use this to avoid memory access using IX, but remember that not everyone has to set DE, so your RSX may not work properly when called with other means.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The RST &amp;amp;18 instruction works a bit differently. Instead of taking parameters in HL and C, it expects them to be in the program flow directly. This is interesting because all registers are passed as is to the called code. You can use them to pass data to the ROM code, bypassing the usual RSX parameter list.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	RST &amp;amp;18;&lt;br /&gt;
	DW table	&lt;br /&gt;
        RET&lt;br /&gt;
table&lt;br /&gt;
	DW &amp;amp;C009 ; Address of code to call&lt;br /&gt;
	DB &amp;amp;04 ; Rom number to connect&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also use CALL &amp;amp;0023 which expects HL to points to a table in the same format.&lt;br /&gt;
&lt;br /&gt;
Note that you don't need to go through the RSX search, it's possible to directly call code in any ROM using these vectors. Think twice before doing that, because it means you're hardcoding the call address. If the ROM you were targetting is replaced (different BASIC version, PARADOS instead of AMSDOS), the address may change and your program will stop working.&lt;br /&gt;
&lt;br /&gt;
These 3 vectors all set IY to the memory space reserved by the ROM at boot. when the ROM needs to use its internal variables, it should do so by relative addressing to the IY register.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ROM numbers 252 to 255 are interpreted by these vectors as RAM configurations (connection of the lower ROM and banks). This limits the number of expansion ROMs to 252 system-friendly ones. The remaining ROMs can still be used but you need to roll your own code to call them (poking at gate array registers at the risk of confusing the system).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The search for an RSX is done using the linked list RSX blocks. It starts with the background ROMs from 15 to 0, then the foreground ROMs from 0 to 15, then from 16 until the BASIC ROM is detected. Finally, RAM-based RSXs are searched.&lt;br /&gt;
&lt;br /&gt;
==Accessing RAM and ROM==&lt;br /&gt;
The firmware has several vectors and system calls to help with jumping back and forth between RAM and ROM. These are of great help when writing code that uses the ROMs in a system-friendly way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*RST &amp;amp;18 calls a ROM using parameters stored after the instruction. all registers besides IX can be used as parameters.&lt;br /&gt;
*CALL &amp;amp;001B calls a ROM. HL and C are used to specify the address (PC and ROM number).&lt;br /&gt;
*CALL &amp;amp;0023 calls a ROM. HL points to a 3-byte table holding the address and ROM number.&lt;br /&gt;
*CALL &amp;amp;B912 (KL_CURR_SELECTION) sets A to the current ROM number. This can be used by program spanning accross multiple ROMs to identify where they are loaded.&lt;br /&gt;
RST &amp;amp;10 can also be used for that purpose. If the ROMs are consecutive, you can call this one with a 16 bit parameter (in the code flow as usual for RSTs). The parameter is the offset (relative to C000) of the code you want to call, and the 2 most significant bytes are used to decide which ROM to call (from current to current + 3). You can get back to the calling ROM using RET. Moreover, when nesting these calls, the same base ROM is used. So the first ROM can be used as an entry point, and call internal code in up to 3 other ROMs next to it without too much trouble.&lt;br /&gt;
*CALL &amp;amp;0013 does the same, but the parameter is given in HL instead of pointed by PC. Note that you can use these to call code in ROMs 252, 253, 254, 255.&lt;br /&gt;
*CALL &amp;amp;B900 enables upper ROM. A is set to the previous value of the RMR Gate Array register (or rather, the last value known by the system).&lt;br /&gt;
*CALL &amp;amp;B903 disables upper ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B906 enables lower ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B909 disables lower ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B90C restores memory mapping according to value of A register. Undo the effect of the 4 previous calls in a clean way.&lt;br /&gt;
RST &amp;amp;08 and CALL &amp;amp;000B call code in 0000-3FFF area after changing lower ROM state (connect or diconnect). The 16 bit in HL or following PC are the addres sof the code with the 2 high order bits defining the memory mapping.&lt;br /&gt;
RST &amp;amp;28 calls code at any address with lower ROM enabled. On return, the lower ROM is always disconnected.&lt;br /&gt;
The reserved numbers are used as follows: 252 enables both lower and upper ROM, 253 enables upper ROM only, 254 enables lower ROM only, and 255 disables both. The two higher bits are used in the same way for RST &amp;amp;08 and CALL &amp;amp;000B).&lt;br /&gt;
*CALL &amp;amp;B91B executes an LDIR in RAM (disconnecting all ROMs). This is helpful if you want to access the screen memory that is hidden when the ROM is connected.&lt;br /&gt;
*CALL &amp;amp;B91E exectutes an LDDR in RAM.&lt;br /&gt;
RST &amp;amp;20 reads a single byte from RAM. HL is the address to read from, and A holds the result.&lt;br /&gt;
*CALL &amp;amp;B90F selects upper ROM from register C and enables it. Sets A and B to the previous values of RMR and previous ROM number. This vector can connect all 256 ROMs.&lt;br /&gt;
*CALL &amp;amp;B915 gets version of ROM from register C in HL (H=version, L=mark). All 256 ROMs can be used.&lt;br /&gt;
*CALL &amp;amp;B918 restores ROM configuration from register BC. Undoes the effect of &amp;amp;B90F.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Direct hardware access to ROMs==&lt;br /&gt;
Sometimes you want to get the system out of the way. You will still be able to page ROMs in and out but you must use the hardware directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You need to use the RMR register of the Gate Array. This is located at address &amp;amp;7Fxx in the I/O space. Bits 7 and 6 must be set to 10, bits 1 and 0 set the video mode, and bits 2 and 3 must be set to 0 to connect lower and upper ROMs (or 1 to connect RAM).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Register &amp;amp;DFxx (also in I/O space) can be used to select which ROM to connect. If you select a ROM that does not exists, the BASIC ROM will take the request instead. So whatever you do, there is always some memory mapped in the &amp;amp;C000-&amp;amp;FFFF area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that direct use of these ports will confuse the system. So only use them with interrupt disabled and take great care to clean after yourself.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Writing to flash memory==&lt;br /&gt;
The main feature of FlashGordon is that the memory can also be written to. Here are some details on how to achieve that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The memory chip used is an SST 39SF040. This is a flash memory chip that is smarter than a simple ROM or RAM. You talk to it by sending commands to exectute (but reading works as usual).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First of all, unmapping the ROM using the gate array will not prevent the FlashGordon to pick up the write operations. The only way to do that in software is selecting a ROM that is not handled by the MegaFlash (ROM number 255 is a good choice).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, the MegaFlash will accept write operations both in the C000-FFFF and 8000-BFFF ranges because of an hardware limitation. So, avoid reading and writing to 8000-BFFF while trying to program a ROM. We're sorry for the inconvenience, but fixing that would require an extra chip on the board, a bigger board, and more complex wiring which we tried to avoid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flash memory is split into blocks of 4 kilobytes. You can't write to a block directly, you need to erase it first. Once a block is erased, it will be full of FF bytes. Writing can only force bits to 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The protocol to respect is as follows :&lt;br /&gt;
*Connect ROM number 1 and write 0xAA to address 0xD555&lt;br /&gt;
*Connect ROM number 2 and write 0x55 to address 0xEAAA&lt;br /&gt;
*At this point, the flahs is waiting for a command to execute. The available commands are ERASE (0x80), IDENTIFY (0x90), BYTE PROGRAM (0xA0) and RESET (0xF0)&lt;br /&gt;
*To erase a sector, send the ERASE command by writing 0x80 to address 0xD555 in ROM 1. Now write once again 0xAA to address 0xD555 in ROM number 1 and 0x55 to address 0xEAAA in ROM number 2. Then, write 0x30 anywhere in the sector you want to erase. Erasing will take up to 20 milliseconds, so wait to make sure the flash is ready to accept another command.&lt;br /&gt;
*To write a byte, write 0xA0 (BYTE PROGRAM) to address 0xD555 in ROM 1. Then, connect the ROM you want to program and write one byte at the needed address. There is a delay of 20 NOPs after a write operation, that should be no problem as you can use them to prepare the write operation for the next byte (by the time you're ready to execute the next write to the ROM, it will be ready to listen).&lt;br /&gt;
*If you enter identify mode, you can read two bytes to learn about the manufacturer and model of the flash chip. This can be used to identify FlashGordon versus the MegaFlash (which will return different values), a Ramcard (too late, you already corrupted some data), or a plain old romboard (all your attemps to write are vain and bound to fail).&lt;br /&gt;
*There is also a command for a complete chip erase if you want to clear everything.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* [[Roman]] from PNG&lt;br /&gt;
* [[FutureOS]] installer&lt;br /&gt;
* [[ROManager]] from TFM&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
*Ram7, who designed the Ramcard and wrote a very good manual for it (most of what you read in this manual is very closely inspired from it).&lt;br /&gt;
*Bryce, who designed the MegaFlash and the MegaROM and made the schematics freely available&lt;br /&gt;
*Krusty and Beb, for asking me to get started on this project&lt;br /&gt;
*SyX, for the moral support and help with z80 tricks&lt;br /&gt;
*Frank Wille, for working on [[vasm]]/vlink and integrating all the messy patches&lt;br /&gt;
&lt;br /&gt;
All the work here is based on work from other people, which doesn't have a very clear licence. The general understanding is that you can share the documentation and schematics, modify and improve them, build and sell your own devices, as long as :&lt;br /&gt;
*The original authors are credited for their work&lt;br /&gt;
*You don't sell them for profit (selling manufactured hardware at a price that covers manufacturing costs is ok)&lt;br /&gt;
*Provide documentation for your changes so other people can improve on them as well. I spent several hours reverse engineering the ramcard from PCB to schematics, I hope I won't have to do it again for another device.&lt;br /&gt;
&lt;br /&gt;
[[Category:FutureOS]]&lt;br /&gt;
[[Category:Peripherals]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=FlashGordon&amp;diff=105081</id>
		<title>FlashGordon</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=FlashGordon&amp;diff=105081"/>
				<updated>2020-04-19T10:15:51Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* The ROM managers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About==&lt;br /&gt;
The FlashGordon expansion is a 512KB ROM Expansion. It is a modified version of Bryce's [[MegaFlash]] with a different flash chip and some bugfixes. It allows you to add up to 32 expansion ROMs to your Amstrad/Schneider CPC or Plus computer. Moreover, it uses a flash memory chip, so the programs can be replaced directly from the computer, without having to move chips to a PROM programmer.&lt;br /&gt;
&lt;br /&gt;
The ROMs are allocated numbers from 0 to 1F. The firmware will only initialize ROMs from F to 0 at boot, so it completely ignores half of the available memory. To solve this problem, ROM slot F comes pre-programmed with a boot program that will initialize the 16 remaining ROMs, and also allows more control over them.&lt;br /&gt;
&lt;br /&gt;
==Installing the hardware==&lt;br /&gt;
FlashGordon connects to the expansion port using an adapter cable. On the computer side, you need either an HE-902 edge connector (for Amstrad CPC) or a Centronics connector (Amstrad Plus, Schneider CPC). On the other side, you need a female HE10 connector. Try to keep the cable as short as possible (no more than 20cm), else you can get into some problems with the system reliability.&lt;br /&gt;
&lt;br /&gt;
Take the board with the components facing up, and the HE10 connector towards the computer expansion port. When holding the board this way, the connection cable is wired straight. Pin 1 is on the left, as indicated by the arrow on the board. Notice that the 50-pin HE10 connector is wired backwards (pin 1 should be on the right to match the standard), but this allows for easier connection with the CPC.&lt;br /&gt;
&lt;br /&gt;
Power up the computer. It should boot at usual, but show the welcome message of the ROM manager. If something does not go as expected, unplug everything and start over. The hardware is tested before shipping, so problems come from either your cable, a dirty expansion port, or something plugged the wrong way.&lt;br /&gt;
&lt;br /&gt;
==Configuring the jumpers and switches==&lt;br /&gt;
There are 2 jumpers and a push switch on the board. The push switch enables write mode, and the jumpers allow configuration of ROMs 0 and 7 as well as a global disable mode.&lt;br /&gt;
&lt;br /&gt;
The write switch is the most interesting one. It allows you to enable writing to the flash memory so the programs in ROM can be replaced or modified. Since the Amstrad hardware and software don't expect ROM memory to be writable, there are some rules to avoid running into problems. Leave the switch off unless the ROM manager asks you to turn it on. Don't forget to turn it off when it tells you to do so.&lt;br /&gt;
&lt;br /&gt;
When writing is allowed, the red led is light.&lt;br /&gt;
&lt;br /&gt;
Warning: because of an hardware design limitation, when in write mode, the flash memory will see anything written to both the 8000-BFFF and the C000-FFFF RAM areas. This could lead to unexpected results.&lt;br /&gt;
&lt;br /&gt;
Note: the Flash chip used requires a special programming algorithm, which makes it incompatible with the Megaflash and Ramcard software in write mode.&lt;br /&gt;
&lt;br /&gt;
The two jumpers are used to control the state of ROMs 0 and 7. These need special care because they are the internal ROMs in the computer. ROM 0 is the BASIC, and ROM 7 is the AMSDOS. Most of the time, you want to keep these useable. This is the factory setting: both jumpers are placed near the connector, so the internal ROMs are used.&lt;br /&gt;
&lt;br /&gt;
The top jumper is for ROM 0, and the bottom one is for ROM 7. On CPC 6128 and DDI-1, the internal ROM 7 can't be disabled, so you should always leave the ROM 7 jumper down. On Plus and machines without disk drives, you can enable it. ROM 0 can always be overloaded, but remember that you will not boot to the BASIc in that case.&lt;br /&gt;
&lt;br /&gt;
If you completely remove the ROM 0 jumper, all the ROMs will be disabled. This is useful if you messed up one of the ROM and it makes the computer unable to boot with the ROMs enabled. Once booted, you can load the recovery program and then enable the board again when it asks you to turn the write switch on. This is the only case where you're allowed to change the jumper settings while the CPC is running.&lt;br /&gt;
&lt;br /&gt;
==Background information on expansion ROMs==&lt;br /&gt;
Now that the hardware is configured, it's time to learn how to use it. Before we detail the use of the ROM manager, here are some informations about ROMs and the best way to use them.&lt;br /&gt;
&lt;br /&gt;
The CPC firmware allows up to 252 expansion ROMs to be added to the system. This feature was present even in the CPC 464. It allowed the very clean integration of AMSDOS to manage floppy disks in a natural way from BASIC and assembler programs, without any change to their code.&lt;br /&gt;
&lt;br /&gt;
The expansion ROMs are accessed the same way as the BASIC ROM. They are mapped in the C000-FFFF range and can be read by the z80. Writing in this area will always affect the RAM, either the central memory, or expansion RAM if present and enabled. In the default configuration, this area is used as video memory, and there is no need to read from it.&lt;br /&gt;
&lt;br /&gt;
At system start, the CPC firmware will scan the first 16 ROMs slots (first 8 on CPC 464) to see of there is a compatible ROM connected. If so, the ROM is allowed to run its boot code and allocate some RAM for its own use.&lt;br /&gt;
&lt;br /&gt;
The firmware decides how to handle each ROM by looking at the first byte. If it's 0, the ROM is a foreground ROM. Calling the boot code of the ROM takes control of the computer and never gives it back. If, on the other hand, the first byte value is 1, the ROM is a background ROM. The boot code only does some configuration and gives control back to the firmware. As an example, the AMSDOS ROM is a background ROM. At boot, it replaces some system vectors to redirect file access to disc, then it gives control back. The BASIC ROM, on the other hand, is a foreground ROM. It shows the Ready prompt and wait endlessly for user input. If the value of the first byte of the ROM is anything else, it is completely ignored by the firmware. The ROM can still be used by other means (such as some code in another ROM or loaded from disk).&lt;br /&gt;
&lt;br /&gt;
Background ROMs are not limited to patching the firmware jumpblock to intercept calls to the operating system. They can also register RSXs (Resident System eXtensions). These can be called directly from the BASIC prompt using the |command syntax. For example, AMSDOS adds commands such as |DRIVE, |DIR, |ERA, etc.&lt;br /&gt;
&lt;br /&gt;
RSXs accept parameters, and they can also be called from other programs. This is a very flexible way of providing new functions to other software.&lt;br /&gt;
&lt;br /&gt;
==The ROM managers==&lt;br /&gt;
* The most comprehensive utility for the management of the ROMs are [[ROMAN]] and the [[MegaFlashROManager]]. A &amp;quot;booster&amp;quot; is included in both of these, enabling the initialization of ROMs 16-31 which are not scanned by the firmware.&lt;br /&gt;
&lt;br /&gt;
==The rescue disk==&lt;br /&gt;
The rescue disk is one of two ways out if you mess up something with the ROMs setup. (The other way would be to use [[MegaFlashROManager]]). The rescue disc contains the following files :&lt;br /&gt;
&lt;br /&gt;
* ROMTEST.BIN will print the available ROM numbers. Use it for hardware testing.&lt;br /&gt;
* BURN.BAS will help you programming stuff to the FlashGordon when the ROM Manager doesn't work anymore.&lt;br /&gt;
* BURN.BIN assembler code used by BURN.BAS&lt;br /&gt;
* MANAGER.ROM the ROM manager ROM file so you can repair it.&lt;br /&gt;
&lt;br /&gt;
The source code for the programs provided on the rescue disk and the ROM manager itself are available on the source repository.&lt;br /&gt;
&lt;br /&gt;
==Creating your own ROMs==&lt;br /&gt;
You can use already existing ROM software for CPC with the FlashGordon. Any software written for romboards romboxes, ramcards, megarom or megaflash will work flawlessly. The most easy way to create you own ROMs up to 32 KB is to use the [[Softbrenner]] ROM of the [[Inicron]]s.&lt;br /&gt;
&lt;br /&gt;
But you can also write your own software to take advantage of the board to its maximal potential. This section of the documentation sums up the relevant information to get you started. You can find more information in the CPC Firmware manual and Locomotive software reference documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First of all, remember that the ROMs are always accessed by the z80 in the memory zone &amp;amp;C000 to &amp;amp;FFFF. You are not allowed to use self-modifying code, and your variables have to be stored elsewhere (as the ROM isn't writable). You also can't read the screen memory directly from ROM code. With these constraints in mind, let's now look at the structure of the ROM header.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Contents&lt;br /&gt;
|-&lt;br /&gt;
| C000	|| Rom type (0=foreground, 1=background).&lt;br /&gt;
|-&lt;br /&gt;
| C001   || Mark number (major version)&lt;br /&gt;
|-&lt;br /&gt;
| C002   || Version number&lt;br /&gt;
|-&lt;br /&gt;
| C003	|| Modification level&lt;br /&gt;
|-&lt;br /&gt;
| C004	|| Address of RSX name table (C006+3*N)&lt;br /&gt;
|-&lt;br /&gt;
| C006	|| RSX handling jump instructions&lt;br /&gt;
|-&lt;br /&gt;
| C006+3*N|| RSX name table (up to 16 character per entry), null-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The mark number, version number and modification level are unused by the firmware. They are usually ASCII characters used to make a version number. For example, the UTOPIA ROM |HELP command prints them.&lt;br /&gt;
&lt;br /&gt;
Starting at address C004 is an RSX table which is identical to the one used for RAM RSXs. The jump table must have at least as much entries as the name table. Each entry is a JP NNNN instruction and takes 3 bytes. RSX names must be uppercase, and the last character must have bit 7 set. Names using anything else than uppercase letters will make the RSX not callable from BASIC (but it can be called from assembler programs).&lt;br /&gt;
&lt;br /&gt;
The first entry in the table is the boot vector. It is called by the firmware to initialize the ROM. The name of this entry is also used as the ROM name (for example in UTOPIA, again). It may be a valid name (|BASIC for the basic) or not, if your boot vector can't be called more than once.&lt;br /&gt;
&lt;br /&gt;
At boot, the firmware always executes ROM 0 boot vector. Take care of not using a background ROM as ROM 0, because it will give back control to the firmware which doesn't expect it at that point. There are some special cases, for example AMSDOS will detect it is called as ROM 0 and will try to boot a CP/M floppy.&lt;br /&gt;
&lt;br /&gt;
As said above, background ROMs are automatically initialized by the BASIC ROM at boot for slots 1 to 15. ROMs in slots 16 to 31 are initialized by the ROM manager. They do this by calling system vectors &amp;amp;BCCB (initialize ROMs from 0 to 15) or &amp;amp;BCCE (initialize one ROM).&lt;br /&gt;
&lt;br /&gt;
The boot vector for the iniialized ROM is then called. The ROM is allowed to make space below the HIMEM (eating some of the user memory) for its own variables. Some programs will not manage to run if the HIMEM gets too low because of the ROMs. If that happens, try disabling some ROMs and booting again.&lt;br /&gt;
&lt;br /&gt;
The ROM boot vector is called with HL holding the current HIMEM value. BC and A can be used as scratch registers. DE points to LOWMEM (usually &amp;amp;0040). Your ROM can modify HL and DE to reserve memory both at the start and end of user memory space. It must set the carry to notify the firmware that everything went ok. Note that even if you don't change HL, the firmware will still allocate 4 bytes for each ROM. These are used for storing the RSX linked list data.&lt;br /&gt;
&lt;br /&gt;
Foreground ROMs must be called manually (unless they are used as ROM 0). When a foreground ROM is called, the system is reset and all expansion ROMs are disabled (this is the same thing that happens when calling a program from disk with the RUN instruction). This means the foreground ROM gets as much free RAM as possible. The firmware requires ROM slots to be consecutive, as it will stop looking for foreground ROMs as soon as it detects an empty slot. So if you have ROMs in slots 16, 17 and 19, the one in slot 19 will not be detected. You need to have one in slot 18. This does not apply to the first 15 ROMs as these are initialized when looking for background ROMs.&lt;br /&gt;
&lt;br /&gt;
==Calling an RSX from assembler==&lt;br /&gt;
Calling RSXs from BASIC is easy. Prefix the RSX name with the | character. Things are a bit more verbose in assembler, as usual.&lt;br /&gt;
&lt;br /&gt;
First of all, you need to locate the RSX. To do this, you call the KL_FIND_COMMAND (&amp;amp;BCD4) vector with HL pointing to the RSX name you're looking for (as in the RSX table, this is a string terminated by a byte with bit 7 set). If the Firmware finds a foreground ROM matching the name, it is immediately called. for background ROMs, the call returns with the rom number in C, and the address of the RSX in HL. The carry is set to indicate the ROM was found. You can then use KL_FAR_PCHL (&amp;amp;001B) or RST &amp;amp;0018 to execute the RSX. This vector takes the ROM number in C and the address in HL, so you can call it right after KL_FIND_COMMAND (after checking that the carry is set).&lt;br /&gt;
&lt;br /&gt;
An RSX can take parameters. from BASIC, these are comma separated and come after the RSX name. In assembler, A holds the parameter count, and IX points to the parameter table. Note that the first parameter in the table is actually the last one when calling from BASIC.&lt;br /&gt;
&lt;br /&gt;
Parameters are always 16-bit long. From BASIC, you can use 16-bit constants or integer variables, pointers with the @ operator, and strings. When using strings, the RSX gets a pointer to the string descriptor, which is a 3-byte struct holding the string length, and a pointer to the actual string data. If you want to use strings as parameters, expect to get them in this format.&lt;br /&gt;
&lt;br /&gt;
It is interesting to note that the BASIC calls RSXs with the last parameter also available directly in DE. It may be tempting to use this to avoid memory access using IX, but remember that not everyone has to set DE, so your RSX may not work properly when called with other means.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The RST &amp;amp;18 instruction works a bit differently. Instead of taking parameters in HL and C, it expects them to be in the program flow directly. This is interesting because all registers are passed as is to the called code. You can use them to pass data to the ROM code, bypassing the usual RSX parameter list.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	RST &amp;amp;18;&lt;br /&gt;
	DW table	&lt;br /&gt;
        RET&lt;br /&gt;
table&lt;br /&gt;
	DW &amp;amp;C009 ; Address of code to call&lt;br /&gt;
	DB &amp;amp;04 ; Rom number to connect&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also use CALL &amp;amp;0023 which expects HL to points to a table in the same format.&lt;br /&gt;
&lt;br /&gt;
Note that you don't need to go through the RSX search, it's possible to directly call code in any ROM using these vectors. Think twice before doing that, because it means you're hardcoding the call address. If the ROM you were targetting is replaced (different BASIC version, PARADOS instead of AMSDOS), the address may change and your program will stop working.&lt;br /&gt;
&lt;br /&gt;
These 3 vectors all set IY to the memory space reserved by the ROM at boot. when the ROM needs to use its internal variables, it should do so by relative addressing to the IY register.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ROM numbers 252 to 255 are interpreted by these vectors as RAM configurations (connection of the lower ROM and banks). This limits the number of expansion ROMs to 252 system-friendly ones. The remaining ROMs can still be used but you need to roll your own code to call them (poking at gate array registers at the risk of confusing the system).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The search for an RSX is done using the linked list RSX blocks. It starts with the background ROMs from 15 to 0, then the foreground ROMs from 0 to 15, then from 16 until the BASIC ROM is detected. Finally, RAM-based RSXs are searched.&lt;br /&gt;
&lt;br /&gt;
==Accessing RAM and ROM==&lt;br /&gt;
The firmware has several vectors and system calls to help with jumping back and forth between RAM and ROM. These are of great help when writing code that uses the ROMs in a system-friendly way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*RST &amp;amp;18 calls a ROM using parameters stored after the instruction. all registers besides IX can be used as parameters.&lt;br /&gt;
*CALL &amp;amp;001B calls a ROM. HL and C are used to specify the address (PC and ROM number).&lt;br /&gt;
*CALL &amp;amp;0023 calls a ROM. HL points to a 3-byte table holding the address and ROM number.&lt;br /&gt;
*CALL &amp;amp;B912 (KL_CURR_SELECTION) sets A to the current ROM number. This can be used by program spanning accross multiple ROMs to identify where they are loaded.&lt;br /&gt;
RST &amp;amp;10 can also be used for that purpose. If the ROMs are consecutive, you can call this one with a 16 bit parameter (in the code flow as usual for RSTs). The parameter is the offset (relative to C000) of the code you want to call, and the 2 most significant bytes are used to decide which ROM to call (from current to current + 3). You can get back to the calling ROM using RET. Moreover, when nesting these calls, the same base ROM is used. So the first ROM can be used as an entry point, and call internal code in up to 3 other ROMs next to it without too much trouble.&lt;br /&gt;
*CALL &amp;amp;0013 does the same, but the parameter is given in HL instead of pointed by PC. Note that you can use these to call code in ROMs 252, 253, 254, 255.&lt;br /&gt;
*CALL &amp;amp;B900 enables upper ROM. A is set to the previous value of the RMR Gate Array register (or rather, the last value known by the system).&lt;br /&gt;
*CALL &amp;amp;B903 disables upper ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B906 enables lower ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B909 disables lower ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B90C restores memory mapping according to value of A register. Undo the effect of the 4 previous calls in a clean way.&lt;br /&gt;
RST &amp;amp;08 and CALL &amp;amp;000B call code in 0000-3FFF area after changing lower ROM state (connect or diconnect). The 16 bit in HL or following PC are the addres sof the code with the 2 high order bits defining the memory mapping.&lt;br /&gt;
RST &amp;amp;28 calls code at any address with lower ROM enabled. On return, the lower ROM is always disconnected.&lt;br /&gt;
The reserved numbers are used as follows: 252 enables both lower and upper ROM, 253 enables upper ROM only, 254 enables lower ROM only, and 255 disables both. The two higher bits are used in the same way for RST &amp;amp;08 and CALL &amp;amp;000B).&lt;br /&gt;
*CALL &amp;amp;B91B executes an LDIR in RAM (disconnecting all ROMs). This is helpful if you want to access the screen memory that is hidden when the ROM is connected.&lt;br /&gt;
*CALL &amp;amp;B91E exectutes an LDDR in RAM.&lt;br /&gt;
RST &amp;amp;20 reads a single byte from RAM. HL is the address to read from, and A holds the result.&lt;br /&gt;
*CALL &amp;amp;B90F selects upper ROM from register C and enables it. Sets A and B to the previous values of RMR and previous ROM number. This vector can connect all 256 ROMs.&lt;br /&gt;
*CALL &amp;amp;B915 gets version of ROM from register C in HL (H=version, L=mark). All 256 ROMs can be used.&lt;br /&gt;
*CALL &amp;amp;B918 restores ROM configuration from register BC. Undoes the effect of &amp;amp;B90F.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Direct hardware access to ROMs==&lt;br /&gt;
Sometimes you want to get the system out of the way. You will still be able to page ROMs in and out but you must use the hardware directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You need to use the RMR register of the Gate Array. This is located at address &amp;amp;7Fxx in the I/O space. Bits 7 and 6 must be set to 10, bits 1 and 0 set the video mode, and bits 2 and 3 must be set to 0 to connect lower and upper ROMs (or 1 to connect RAM).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Register &amp;amp;DFxx (also in I/O space) can be used to select which ROM to connect. If you select a ROM that does not exists, the BASIC ROM will take the request instead. So whatever you do, there is always some memory mapped in the &amp;amp;C000-&amp;amp;FFFF area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that direct use of these ports will confuse the system. So only use them with interrupt disabled and take great care to clean after yourself.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Writing to flash memory==&lt;br /&gt;
The main feature of FlashGordon is that the memory can also be written to. Here are some details on how to achieve that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The memory chip used is an SST 39SF040. This is a flash memory chip that is smarter than a simple ROM or RAM. You talk to it by sending commands to exectute (but reading works as usual).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First of all, unmapping the ROM using the gate array will not prevent the FlashGordon to pick up the write operations. The only way to do that in software is selecting a ROM that is not handled by the MegaFlash (ROM number 255 is a good choice).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, the MegaFlash will accept write operations both in the C000-FFFF and 8000-BFFF ranges because of an hardware limitation. So, avoid reading and writing to 8000-BFFF while trying to program a ROM. We're sorry for the inconvenience, but fixing that would require an extra chip on the board, a bigger board, and more complex wiring which we tried to avoid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flash memory is split into blocks of 4 kilobytes. You can't write to a block directly, you need to erase it first. Once a block is erased, it will be full of FF bytes. Writing can only force bits to 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The protocol to respect is as follows :&lt;br /&gt;
*Connect ROM number 1 and write 0xAA to address 0xD555&lt;br /&gt;
*Connect ROM number 2 and write 0x55 to address 0xEAAA&lt;br /&gt;
*At this point, the flahs is waiting for a command to execute. The available commands are ERASE (0x80), IDENTIFY (0x90), BYTE PROGRAM (0xA0) and RESET (0xF0)&lt;br /&gt;
*To erase a sector, send the ERASE command by writing 0x80 to address 0xD555 in ROM 1. Now write once again 0xAA to address 0xD555 in ROM number 1 and 0x55 to address 0xEAAA in ROM number 2. Then, write 0x30 anywhere in the sector you want to erase. Erasing will take up to 20 milliseconds, so wait to make sure the flash is ready to accept another command.&lt;br /&gt;
*To write a byte, write 0xA0 (BYTE PROGRAM) to address 0xD555 in ROM 1. Then, connect the ROM you want to program and write one byte at the needed address. There is a delay of 20 NOPs after a write operation, that should be no problem as you can use them to prepare the write operation for the next byte (by the time you're ready to execute the next write to the ROM, it will be ready to listen).&lt;br /&gt;
*If you enter identify mode, you can read two bytes to learn about the manufacturer and model of the flash chip. This can be used to identify FlashGordon versus the MegaFlash (which will return different values), a Ramcard (too late, you already corrupted some data), or a plain old romboard (all your attemps to write are vain and bound to fail).&lt;br /&gt;
*There is also a command for a complete chip erase if you want to clear everything.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* [[Roman]] from PNG&lt;br /&gt;
* [[FutureOS]] installer&lt;br /&gt;
* [[ROManager]] from TFM&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
*Ram7, who designed the Ramcard and wrote a very good manual for it (most of what you read in this manual is very closely inspired from it).&lt;br /&gt;
*Bryce, who designed the MegaFlash and the MegaROM and made the schematics freely available&lt;br /&gt;
*Krusty and Beb, for asking me to get started on this project&lt;br /&gt;
*SyX, for the moral support and help with z80 tricks&lt;br /&gt;
*Frank Wille, for working on [[vasm]]/vlink and integrating all the messy patches&lt;br /&gt;
&lt;br /&gt;
All the work here is based on work from other people, which doesn't have a very clear licence. The general understanding is that you can share the documentation and schematics, modify and improve them, build and sell your own devices, as long as :&lt;br /&gt;
*The original authors are credited for their work&lt;br /&gt;
*You don't sell them for profit (selling manufactured hardware at a price that covers manufacturing costs is ok)&lt;br /&gt;
*Provide documentation for your changes so other people can improve on them as well. I spent several hours reverse engineering the ramcard from PCB to schematics, I hope I won't have to do it again for another device.&lt;br /&gt;
&lt;br /&gt;
[[Category:FutureOS]]&lt;br /&gt;
[[Category:Peripherals]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=FlashGordon&amp;diff=105080</id>
		<title>FlashGordon</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=FlashGordon&amp;diff=105080"/>
				<updated>2020-04-19T10:14:45Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* About */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About==&lt;br /&gt;
The FlashGordon expansion is a 512KB ROM Expansion. It is a modified version of Bryce's [[MegaFlash]] with a different flash chip and some bugfixes. It allows you to add up to 32 expansion ROMs to your Amstrad/Schneider CPC or Plus computer. Moreover, it uses a flash memory chip, so the programs can be replaced directly from the computer, without having to move chips to a PROM programmer.&lt;br /&gt;
&lt;br /&gt;
The ROMs are allocated numbers from 0 to 1F. The firmware will only initialize ROMs from F to 0 at boot, so it completely ignores half of the available memory. To solve this problem, ROM slot F comes pre-programmed with a boot program that will initialize the 16 remaining ROMs, and also allows more control over them.&lt;br /&gt;
&lt;br /&gt;
==Installing the hardware==&lt;br /&gt;
FlashGordon connects to the expansion port using an adapter cable. On the computer side, you need either an HE-902 edge connector (for Amstrad CPC) or a Centronics connector (Amstrad Plus, Schneider CPC). On the other side, you need a female HE10 connector. Try to keep the cable as short as possible (no more than 20cm), else you can get into some problems with the system reliability.&lt;br /&gt;
&lt;br /&gt;
Take the board with the components facing up, and the HE10 connector towards the computer expansion port. When holding the board this way, the connection cable is wired straight. Pin 1 is on the left, as indicated by the arrow on the board. Notice that the 50-pin HE10 connector is wired backwards (pin 1 should be on the right to match the standard), but this allows for easier connection with the CPC.&lt;br /&gt;
&lt;br /&gt;
Power up the computer. It should boot at usual, but show the welcome message of the ROM manager. If something does not go as expected, unplug everything and start over. The hardware is tested before shipping, so problems come from either your cable, a dirty expansion port, or something plugged the wrong way.&lt;br /&gt;
&lt;br /&gt;
==Configuring the jumpers and switches==&lt;br /&gt;
There are 2 jumpers and a push switch on the board. The push switch enables write mode, and the jumpers allow configuration of ROMs 0 and 7 as well as a global disable mode.&lt;br /&gt;
&lt;br /&gt;
The write switch is the most interesting one. It allows you to enable writing to the flash memory so the programs in ROM can be replaced or modified. Since the Amstrad hardware and software don't expect ROM memory to be writable, there are some rules to avoid running into problems. Leave the switch off unless the ROM manager asks you to turn it on. Don't forget to turn it off when it tells you to do so.&lt;br /&gt;
&lt;br /&gt;
When writing is allowed, the red led is light.&lt;br /&gt;
&lt;br /&gt;
Warning: because of an hardware design limitation, when in write mode, the flash memory will see anything written to both the 8000-BFFF and the C000-FFFF RAM areas. This could lead to unexpected results.&lt;br /&gt;
&lt;br /&gt;
Note: the Flash chip used requires a special programming algorithm, which makes it incompatible with the Megaflash and Ramcard software in write mode.&lt;br /&gt;
&lt;br /&gt;
The two jumpers are used to control the state of ROMs 0 and 7. These need special care because they are the internal ROMs in the computer. ROM 0 is the BASIC, and ROM 7 is the AMSDOS. Most of the time, you want to keep these useable. This is the factory setting: both jumpers are placed near the connector, so the internal ROMs are used.&lt;br /&gt;
&lt;br /&gt;
The top jumper is for ROM 0, and the bottom one is for ROM 7. On CPC 6128 and DDI-1, the internal ROM 7 can't be disabled, so you should always leave the ROM 7 jumper down. On Plus and machines without disk drives, you can enable it. ROM 0 can always be overloaded, but remember that you will not boot to the BASIc in that case.&lt;br /&gt;
&lt;br /&gt;
If you completely remove the ROM 0 jumper, all the ROMs will be disabled. This is useful if you messed up one of the ROM and it makes the computer unable to boot with the ROMs enabled. Once booted, you can load the recovery program and then enable the board again when it asks you to turn the write switch on. This is the only case where you're allowed to change the jumper settings while the CPC is running.&lt;br /&gt;
&lt;br /&gt;
==Background information on expansion ROMs==&lt;br /&gt;
Now that the hardware is configured, it's time to learn how to use it. Before we detail the use of the ROM manager, here are some informations about ROMs and the best way to use them.&lt;br /&gt;
&lt;br /&gt;
The CPC firmware allows up to 252 expansion ROMs to be added to the system. This feature was present even in the CPC 464. It allowed the very clean integration of AMSDOS to manage floppy disks in a natural way from BASIC and assembler programs, without any change to their code.&lt;br /&gt;
&lt;br /&gt;
The expansion ROMs are accessed the same way as the BASIC ROM. They are mapped in the C000-FFFF range and can be read by the z80. Writing in this area will always affect the RAM, either the central memory, or expansion RAM if present and enabled. In the default configuration, this area is used as video memory, and there is no need to read from it.&lt;br /&gt;
&lt;br /&gt;
At system start, the CPC firmware will scan the first 16 ROMs slots (first 8 on CPC 464) to see of there is a compatible ROM connected. If so, the ROM is allowed to run its boot code and allocate some RAM for its own use.&lt;br /&gt;
&lt;br /&gt;
The firmware decides how to handle each ROM by looking at the first byte. If it's 0, the ROM is a foreground ROM. Calling the boot code of the ROM takes control of the computer and never gives it back. If, on the other hand, the first byte value is 1, the ROM is a background ROM. The boot code only does some configuration and gives control back to the firmware. As an example, the AMSDOS ROM is a background ROM. At boot, it replaces some system vectors to redirect file access to disc, then it gives control back. The BASIC ROM, on the other hand, is a foreground ROM. It shows the Ready prompt and wait endlessly for user input. If the value of the first byte of the ROM is anything else, it is completely ignored by the firmware. The ROM can still be used by other means (such as some code in another ROM or loaded from disk).&lt;br /&gt;
&lt;br /&gt;
Background ROMs are not limited to patching the firmware jumpblock to intercept calls to the operating system. They can also register RSXs (Resident System eXtensions). These can be called directly from the BASIC prompt using the |command syntax. For example, AMSDOS adds commands such as |DRIVE, |DIR, |ERA, etc.&lt;br /&gt;
&lt;br /&gt;
RSXs accept parameters, and they can also be called from other programs. This is a very flexible way of providing new functions to other software.&lt;br /&gt;
&lt;br /&gt;
==The ROM managers==&lt;br /&gt;
* The most comprehensive utility for the management of the ROMs is the [[MegaFlashROManager]]. It also enables the usage of the ROMs 16-31.&lt;br /&gt;
&lt;br /&gt;
* The card comes with a built in ROM manager too, which provides all needed features. To help you using the additional features of FlashGordon, we provide one background ROM in slot 15. The main job of this ROM is to initialize ROMs from 31 to 16 (in this order, to match what the firmware does) so you can use them as background ROMs as well. It also provides some RSXs to use the write mode. Let's have a look at these commands and the way to use them.&lt;br /&gt;
&lt;br /&gt;
All of these commands will erase memory from &amp;amp;1800 to &amp;amp;6000 and the screen. Make sure any important work is saved before calling them.&lt;br /&gt;
&lt;br /&gt;
:|BURN - replace a ROM slot. Use this command to put data in one of the available slots.&lt;br /&gt;
:|BURN,&amp;quot;filename&amp;quot;,n . The file is loaded, then programmed into ROM slot n. It will be available at next boot.&lt;br /&gt;
:|HIDE . Hide one or all of the ROMs.&lt;br /&gt;
:|HIDE,n Each ROM allocates some RAM for its own use. When there are a lot of them, this is likely to increase boot time. The ROMs also take some time to initialize so you have to wait for your CPC to power up. To avoid these problems, you can use the HIDE command to make some ROMs unavailable to the firmware. Use the SHOW command to get them back. If you call HIDE with no parameters, all the ROMs are hidden and your CPC boots like if there was no expansion plugged in. Remember thatr ROM 15 is the ROM manager itself. If you disable it, you'll need to use the rescue disk to enable it again.&lt;br /&gt;
:|SHOW Undo the effect of HIDE&lt;br /&gt;
:|SHOW,n Make a hidden ROM visible again.&lt;br /&gt;
&lt;br /&gt;
==The rescue disk==&lt;br /&gt;
The rescue disk is one of two ways out if you mess up something with the ROMs setup. (The other way would be to use [[MegaFlashROManager]]). The rescue disc contains the following files :&lt;br /&gt;
&lt;br /&gt;
* ROMTEST.BIN will print the available ROM numbers. Use it for hardware testing.&lt;br /&gt;
* BURN.BAS will help you programming stuff to the FlashGordon when the ROM Manager doesn't work anymore.&lt;br /&gt;
* BURN.BIN assembler code used by BURN.BAS&lt;br /&gt;
* MANAGER.ROM the ROM manager ROM file so you can repair it.&lt;br /&gt;
&lt;br /&gt;
The source code for the programs provided on the rescue disk and the ROM manager itself are available on the source repository.&lt;br /&gt;
&lt;br /&gt;
==Creating your own ROMs==&lt;br /&gt;
You can use already existing ROM software for CPC with the FlashGordon. Any software written for romboards romboxes, ramcards, megarom or megaflash will work flawlessly. The most easy way to create you own ROMs up to 32 KB is to use the [[Softbrenner]] ROM of the [[Inicron]]s.&lt;br /&gt;
&lt;br /&gt;
But you can also write your own software to take advantage of the board to its maximal potential. This section of the documentation sums up the relevant information to get you started. You can find more information in the CPC Firmware manual and Locomotive software reference documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First of all, remember that the ROMs are always accessed by the z80 in the memory zone &amp;amp;C000 to &amp;amp;FFFF. You are not allowed to use self-modifying code, and your variables have to be stored elsewhere (as the ROM isn't writable). You also can't read the screen memory directly from ROM code. With these constraints in mind, let's now look at the structure of the ROM header.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Contents&lt;br /&gt;
|-&lt;br /&gt;
| C000	|| Rom type (0=foreground, 1=background).&lt;br /&gt;
|-&lt;br /&gt;
| C001   || Mark number (major version)&lt;br /&gt;
|-&lt;br /&gt;
| C002   || Version number&lt;br /&gt;
|-&lt;br /&gt;
| C003	|| Modification level&lt;br /&gt;
|-&lt;br /&gt;
| C004	|| Address of RSX name table (C006+3*N)&lt;br /&gt;
|-&lt;br /&gt;
| C006	|| RSX handling jump instructions&lt;br /&gt;
|-&lt;br /&gt;
| C006+3*N|| RSX name table (up to 16 character per entry), null-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The mark number, version number and modification level are unused by the firmware. They are usually ASCII characters used to make a version number. For example, the UTOPIA ROM |HELP command prints them.&lt;br /&gt;
&lt;br /&gt;
Starting at address C004 is an RSX table which is identical to the one used for RAM RSXs. The jump table must have at least as much entries as the name table. Each entry is a JP NNNN instruction and takes 3 bytes. RSX names must be uppercase, and the last character must have bit 7 set. Names using anything else than uppercase letters will make the RSX not callable from BASIC (but it can be called from assembler programs).&lt;br /&gt;
&lt;br /&gt;
The first entry in the table is the boot vector. It is called by the firmware to initialize the ROM. The name of this entry is also used as the ROM name (for example in UTOPIA, again). It may be a valid name (|BASIC for the basic) or not, if your boot vector can't be called more than once.&lt;br /&gt;
&lt;br /&gt;
At boot, the firmware always executes ROM 0 boot vector. Take care of not using a background ROM as ROM 0, because it will give back control to the firmware which doesn't expect it at that point. There are some special cases, for example AMSDOS will detect it is called as ROM 0 and will try to boot a CP/M floppy.&lt;br /&gt;
&lt;br /&gt;
As said above, background ROMs are automatically initialized by the BASIC ROM at boot for slots 1 to 15. ROMs in slots 16 to 31 are initialized by the ROM manager. They do this by calling system vectors &amp;amp;BCCB (initialize ROMs from 0 to 15) or &amp;amp;BCCE (initialize one ROM).&lt;br /&gt;
&lt;br /&gt;
The boot vector for the iniialized ROM is then called. The ROM is allowed to make space below the HIMEM (eating some of the user memory) for its own variables. Some programs will not manage to run if the HIMEM gets too low because of the ROMs. If that happens, try disabling some ROMs and booting again.&lt;br /&gt;
&lt;br /&gt;
The ROM boot vector is called with HL holding the current HIMEM value. BC and A can be used as scratch registers. DE points to LOWMEM (usually &amp;amp;0040). Your ROM can modify HL and DE to reserve memory both at the start and end of user memory space. It must set the carry to notify the firmware that everything went ok. Note that even if you don't change HL, the firmware will still allocate 4 bytes for each ROM. These are used for storing the RSX linked list data.&lt;br /&gt;
&lt;br /&gt;
Foreground ROMs must be called manually (unless they are used as ROM 0). When a foreground ROM is called, the system is reset and all expansion ROMs are disabled (this is the same thing that happens when calling a program from disk with the RUN instruction). This means the foreground ROM gets as much free RAM as possible. The firmware requires ROM slots to be consecutive, as it will stop looking for foreground ROMs as soon as it detects an empty slot. So if you have ROMs in slots 16, 17 and 19, the one in slot 19 will not be detected. You need to have one in slot 18. This does not apply to the first 15 ROMs as these are initialized when looking for background ROMs.&lt;br /&gt;
&lt;br /&gt;
==Calling an RSX from assembler==&lt;br /&gt;
Calling RSXs from BASIC is easy. Prefix the RSX name with the | character. Things are a bit more verbose in assembler, as usual.&lt;br /&gt;
&lt;br /&gt;
First of all, you need to locate the RSX. To do this, you call the KL_FIND_COMMAND (&amp;amp;BCD4) vector with HL pointing to the RSX name you're looking for (as in the RSX table, this is a string terminated by a byte with bit 7 set). If the Firmware finds a foreground ROM matching the name, it is immediately called. for background ROMs, the call returns with the rom number in C, and the address of the RSX in HL. The carry is set to indicate the ROM was found. You can then use KL_FAR_PCHL (&amp;amp;001B) or RST &amp;amp;0018 to execute the RSX. This vector takes the ROM number in C and the address in HL, so you can call it right after KL_FIND_COMMAND (after checking that the carry is set).&lt;br /&gt;
&lt;br /&gt;
An RSX can take parameters. from BASIC, these are comma separated and come after the RSX name. In assembler, A holds the parameter count, and IX points to the parameter table. Note that the first parameter in the table is actually the last one when calling from BASIC.&lt;br /&gt;
&lt;br /&gt;
Parameters are always 16-bit long. From BASIC, you can use 16-bit constants or integer variables, pointers with the @ operator, and strings. When using strings, the RSX gets a pointer to the string descriptor, which is a 3-byte struct holding the string length, and a pointer to the actual string data. If you want to use strings as parameters, expect to get them in this format.&lt;br /&gt;
&lt;br /&gt;
It is interesting to note that the BASIC calls RSXs with the last parameter also available directly in DE. It may be tempting to use this to avoid memory access using IX, but remember that not everyone has to set DE, so your RSX may not work properly when called with other means.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The RST &amp;amp;18 instruction works a bit differently. Instead of taking parameters in HL and C, it expects them to be in the program flow directly. This is interesting because all registers are passed as is to the called code. You can use them to pass data to the ROM code, bypassing the usual RSX parameter list.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	RST &amp;amp;18;&lt;br /&gt;
	DW table	&lt;br /&gt;
        RET&lt;br /&gt;
table&lt;br /&gt;
	DW &amp;amp;C009 ; Address of code to call&lt;br /&gt;
	DB &amp;amp;04 ; Rom number to connect&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also use CALL &amp;amp;0023 which expects HL to points to a table in the same format.&lt;br /&gt;
&lt;br /&gt;
Note that you don't need to go through the RSX search, it's possible to directly call code in any ROM using these vectors. Think twice before doing that, because it means you're hardcoding the call address. If the ROM you were targetting is replaced (different BASIC version, PARADOS instead of AMSDOS), the address may change and your program will stop working.&lt;br /&gt;
&lt;br /&gt;
These 3 vectors all set IY to the memory space reserved by the ROM at boot. when the ROM needs to use its internal variables, it should do so by relative addressing to the IY register.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ROM numbers 252 to 255 are interpreted by these vectors as RAM configurations (connection of the lower ROM and banks). This limits the number of expansion ROMs to 252 system-friendly ones. The remaining ROMs can still be used but you need to roll your own code to call them (poking at gate array registers at the risk of confusing the system).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The search for an RSX is done using the linked list RSX blocks. It starts with the background ROMs from 15 to 0, then the foreground ROMs from 0 to 15, then from 16 until the BASIC ROM is detected. Finally, RAM-based RSXs are searched.&lt;br /&gt;
&lt;br /&gt;
==Accessing RAM and ROM==&lt;br /&gt;
The firmware has several vectors and system calls to help with jumping back and forth between RAM and ROM. These are of great help when writing code that uses the ROMs in a system-friendly way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*RST &amp;amp;18 calls a ROM using parameters stored after the instruction. all registers besides IX can be used as parameters.&lt;br /&gt;
*CALL &amp;amp;001B calls a ROM. HL and C are used to specify the address (PC and ROM number).&lt;br /&gt;
*CALL &amp;amp;0023 calls a ROM. HL points to a 3-byte table holding the address and ROM number.&lt;br /&gt;
*CALL &amp;amp;B912 (KL_CURR_SELECTION) sets A to the current ROM number. This can be used by program spanning accross multiple ROMs to identify where they are loaded.&lt;br /&gt;
RST &amp;amp;10 can also be used for that purpose. If the ROMs are consecutive, you can call this one with a 16 bit parameter (in the code flow as usual for RSTs). The parameter is the offset (relative to C000) of the code you want to call, and the 2 most significant bytes are used to decide which ROM to call (from current to current + 3). You can get back to the calling ROM using RET. Moreover, when nesting these calls, the same base ROM is used. So the first ROM can be used as an entry point, and call internal code in up to 3 other ROMs next to it without too much trouble.&lt;br /&gt;
*CALL &amp;amp;0013 does the same, but the parameter is given in HL instead of pointed by PC. Note that you can use these to call code in ROMs 252, 253, 254, 255.&lt;br /&gt;
*CALL &amp;amp;B900 enables upper ROM. A is set to the previous value of the RMR Gate Array register (or rather, the last value known by the system).&lt;br /&gt;
*CALL &amp;amp;B903 disables upper ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B906 enables lower ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B909 disables lower ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B90C restores memory mapping according to value of A register. Undo the effect of the 4 previous calls in a clean way.&lt;br /&gt;
RST &amp;amp;08 and CALL &amp;amp;000B call code in 0000-3FFF area after changing lower ROM state (connect or diconnect). The 16 bit in HL or following PC are the addres sof the code with the 2 high order bits defining the memory mapping.&lt;br /&gt;
RST &amp;amp;28 calls code at any address with lower ROM enabled. On return, the lower ROM is always disconnected.&lt;br /&gt;
The reserved numbers are used as follows: 252 enables both lower and upper ROM, 253 enables upper ROM only, 254 enables lower ROM only, and 255 disables both. The two higher bits are used in the same way for RST &amp;amp;08 and CALL &amp;amp;000B).&lt;br /&gt;
*CALL &amp;amp;B91B executes an LDIR in RAM (disconnecting all ROMs). This is helpful if you want to access the screen memory that is hidden when the ROM is connected.&lt;br /&gt;
*CALL &amp;amp;B91E exectutes an LDDR in RAM.&lt;br /&gt;
RST &amp;amp;20 reads a single byte from RAM. HL is the address to read from, and A holds the result.&lt;br /&gt;
*CALL &amp;amp;B90F selects upper ROM from register C and enables it. Sets A and B to the previous values of RMR and previous ROM number. This vector can connect all 256 ROMs.&lt;br /&gt;
*CALL &amp;amp;B915 gets version of ROM from register C in HL (H=version, L=mark). All 256 ROMs can be used.&lt;br /&gt;
*CALL &amp;amp;B918 restores ROM configuration from register BC. Undoes the effect of &amp;amp;B90F.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Direct hardware access to ROMs==&lt;br /&gt;
Sometimes you want to get the system out of the way. You will still be able to page ROMs in and out but you must use the hardware directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You need to use the RMR register of the Gate Array. This is located at address &amp;amp;7Fxx in the I/O space. Bits 7 and 6 must be set to 10, bits 1 and 0 set the video mode, and bits 2 and 3 must be set to 0 to connect lower and upper ROMs (or 1 to connect RAM).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Register &amp;amp;DFxx (also in I/O space) can be used to select which ROM to connect. If you select a ROM that does not exists, the BASIC ROM will take the request instead. So whatever you do, there is always some memory mapped in the &amp;amp;C000-&amp;amp;FFFF area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that direct use of these ports will confuse the system. So only use them with interrupt disabled and take great care to clean after yourself.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Writing to flash memory==&lt;br /&gt;
The main feature of FlashGordon is that the memory can also be written to. Here are some details on how to achieve that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The memory chip used is an SST 39SF040. This is a flash memory chip that is smarter than a simple ROM or RAM. You talk to it by sending commands to exectute (but reading works as usual).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First of all, unmapping the ROM using the gate array will not prevent the FlashGordon to pick up the write operations. The only way to do that in software is selecting a ROM that is not handled by the MegaFlash (ROM number 255 is a good choice).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, the MegaFlash will accept write operations both in the C000-FFFF and 8000-BFFF ranges because of an hardware limitation. So, avoid reading and writing to 8000-BFFF while trying to program a ROM. We're sorry for the inconvenience, but fixing that would require an extra chip on the board, a bigger board, and more complex wiring which we tried to avoid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flash memory is split into blocks of 4 kilobytes. You can't write to a block directly, you need to erase it first. Once a block is erased, it will be full of FF bytes. Writing can only force bits to 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The protocol to respect is as follows :&lt;br /&gt;
*Connect ROM number 1 and write 0xAA to address 0xD555&lt;br /&gt;
*Connect ROM number 2 and write 0x55 to address 0xEAAA&lt;br /&gt;
*At this point, the flahs is waiting for a command to execute. The available commands are ERASE (0x80), IDENTIFY (0x90), BYTE PROGRAM (0xA0) and RESET (0xF0)&lt;br /&gt;
*To erase a sector, send the ERASE command by writing 0x80 to address 0xD555 in ROM 1. Now write once again 0xAA to address 0xD555 in ROM number 1 and 0x55 to address 0xEAAA in ROM number 2. Then, write 0x30 anywhere in the sector you want to erase. Erasing will take up to 20 milliseconds, so wait to make sure the flash is ready to accept another command.&lt;br /&gt;
*To write a byte, write 0xA0 (BYTE PROGRAM) to address 0xD555 in ROM 1. Then, connect the ROM you want to program and write one byte at the needed address. There is a delay of 20 NOPs after a write operation, that should be no problem as you can use them to prepare the write operation for the next byte (by the time you're ready to execute the next write to the ROM, it will be ready to listen).&lt;br /&gt;
*If you enter identify mode, you can read two bytes to learn about the manufacturer and model of the flash chip. This can be used to identify FlashGordon versus the MegaFlash (which will return different values), a Ramcard (too late, you already corrupted some data), or a plain old romboard (all your attemps to write are vain and bound to fail).&lt;br /&gt;
*There is also a command for a complete chip erase if you want to clear everything.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* [[Roman]] from PNG&lt;br /&gt;
* [[FutureOS]] installer&lt;br /&gt;
* [[ROManager]] from TFM&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
*Ram7, who designed the Ramcard and wrote a very good manual for it (most of what you read in this manual is very closely inspired from it).&lt;br /&gt;
*Bryce, who designed the MegaFlash and the MegaROM and made the schematics freely available&lt;br /&gt;
*Krusty and Beb, for asking me to get started on this project&lt;br /&gt;
*SyX, for the moral support and help with z80 tricks&lt;br /&gt;
*Frank Wille, for working on [[vasm]]/vlink and integrating all the messy patches&lt;br /&gt;
&lt;br /&gt;
All the work here is based on work from other people, which doesn't have a very clear licence. The general understanding is that you can share the documentation and schematics, modify and improve them, build and sell your own devices, as long as :&lt;br /&gt;
*The original authors are credited for their work&lt;br /&gt;
*You don't sell them for profit (selling manufactured hardware at a price that covers manufacturing costs is ok)&lt;br /&gt;
*Provide documentation for your changes so other people can improve on them as well. I spent several hours reverse engineering the ramcard from PCB to schematics, I hope I won't have to do it again for another device.&lt;br /&gt;
&lt;br /&gt;
[[Category:FutureOS]]&lt;br /&gt;
[[Category:Peripherals]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=FlashGordon&amp;diff=98504</id>
		<title>FlashGordon</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=FlashGordon&amp;diff=98504"/>
				<updated>2017-08-26T18:11:22Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About==&lt;br /&gt;
The FlashGordon expansion is a 512KB ROM Expansion. It allows you to add up to 32 expansion ROMs to your Amstrad/Schneider CPC or Plus computer. Moreover, it uses a flash memory chip, so the programs can be replaced directly from the computer, without having to move chips to a PROM programmer.&lt;br /&gt;
&lt;br /&gt;
The ROMs are allocated numbers from 0 to 1F. The firmware will only initialize ROMs from F to 0 at boot, so it completely ignores half of the available memory. To solve this problem, ROM slot F comes pre-programmed with a boot program that will initialize the 16 remaining ROMs, and also allows more control over them.&lt;br /&gt;
&lt;br /&gt;
==Installing the hardware==&lt;br /&gt;
FlashGordon connects to the expansion port using an adapter cable. On the computer side, you need either an HE-902 edge connector (for Amstrad CPC) or a Centronics connector (Amstrad Plus, Schneider CPC). On the other side, you need a female HE10 connector. Try to keep the cable as short as possible (no more than 20cm), else you can get into some problems with the system reliability.&lt;br /&gt;
&lt;br /&gt;
Take the board with the components facing up, and the HE10 connector towards the computer expansion port. When holding the board this way, the connection cable is wired straight. Pin 1 is on the left, as indicated by the arrow on the board. Notice that the 50-pin HE10 connector is wired backwards (pin 1 should be on the right to match the standard), but this allows for easier connection with the CPC.&lt;br /&gt;
&lt;br /&gt;
Power up the computer. It should boot at usual, but show the welcome message of the ROM manager. If something does not go as expected, unplug everything and start over. The hardware is tested before shipping, so problems come from either your cable, a dirty expansion port, or something plugged the wrong way.&lt;br /&gt;
&lt;br /&gt;
==Configuring the jumpers and switches==&lt;br /&gt;
There are 2 jumpers and a push switch on the board. The push switch enables write mode, and the jumpers allow configuration of ROMs 0 and 7 as well as a global disable mode.&lt;br /&gt;
&lt;br /&gt;
The write switch is the most interesting one. It allows you to enable writing to the flash memory so the programs in ROM can be replaced or modified. Since the Amstrad hardware and software don't expect ROM memory to be writable, there are some rules to avoid running into problems. Leave the switch off unless the ROM manager asks you to turn it on. Don't forget to turn it off when it tells you to do so.&lt;br /&gt;
&lt;br /&gt;
When writing is allowed, the red led is light.&lt;br /&gt;
&lt;br /&gt;
Warning: because of an hardware design limitation, when in write mode, the flash memory will see anything written to both the 8000-BFFF and the C000-FFFF RAM areas. This could lead to unexpected results.&lt;br /&gt;
&lt;br /&gt;
Note: the Flash chip used requires a special programming algorithm, which makes it incompatible with the Megaflash and Ramcard software in write mode.&lt;br /&gt;
&lt;br /&gt;
The two jumpers are used to control the state of ROMs 0 and 7. These need special care because they are the internal ROMs in the computer. ROM 0 is the BASIC, and ROM 7 is the AMSDOS. Most of the time, you want to keep these useable. This is the factory setting: both jumpers are placed near the connector, so the internal ROMs are used.&lt;br /&gt;
&lt;br /&gt;
The top jumper is for ROM 0, and the bottom one is for ROM 7. On CPC 6128 and DDI-1, the internal ROM 7 can't be disabled, so you should always leave the ROM 7 jumper down. On Plus and machines without disk drives, you can enable it. ROM 0 can always be overloaded, but remember that you will not boot to the BASIc in that case.&lt;br /&gt;
&lt;br /&gt;
If you completely remove the ROM 0 jumper, all the ROMs will be disabled. This is useful if you messed up one of the ROM and it makes the computer unable to boot with the ROMs enabled. Once booted, you can load the recovery program and then enable the board again when it asks you to turn the write switch on. This is the only case where you're allowed to change the jumper settings while the CPC is running.&lt;br /&gt;
&lt;br /&gt;
==Background information on expansion ROMs==&lt;br /&gt;
Now that the hardware is configured, it's time to learn how to use it. Before we detail the use of the ROM manager, here are some informations about ROMs and the best way to use them.&lt;br /&gt;
&lt;br /&gt;
The CPC firmware allows up to 252 expansion ROMs to be added to the system. This feature was present exen in the CPC 464. It allowed the very clean integration of AMSDOS to manage floppy disks in a natural way from BASIC and assembler programs, without any change to their code.&lt;br /&gt;
&lt;br /&gt;
The expansion ROMs are accessed the same way as the BASIC ROM. They are mapped in the C000-FFFF range and can be read by the z80. Writing in this area will always affect the RAM, either the central memory, or expansion RAM if present and enabled. In the default configuration, this area is used as video memory, and there is no need to read from it.&lt;br /&gt;
&lt;br /&gt;
At system start, the CPC firmware will scan the first 16 ROMs slots (first 8 on CPC 464) to see of there is a compatible ROM connected. If so, the ROM is allowed to run its boot code and allocate some RAM for its own use.&lt;br /&gt;
&lt;br /&gt;
The firmware decides how to handle each ROM by looking at the first byte. If it's 0, the ROM is a foreground ROM. Calling the boot code of the ROM takes control of the computer and never gives it back. If, on the other hand, the first byte value is 1, the ROM is a background ROM. The boot code only does some configuration and gives control back to the firmware. As an example, the AMSDOS ROM is a background ROM. At boot, it replaces some system vectors to redirect file access to disc, then it gives control back. The BASIC ROM, on the other hand, is a foreground ROM. It shows the Ready prompt and wait endlessly for user input. If the value of the first byte of the ROM is anything else, it is completely ignored by the firmware. The ROM can still be used by other means (such as some code in another ROM or loaded from disk).&lt;br /&gt;
&lt;br /&gt;
Background ROMs are not limited to patching the firmware jumpblock to intercept calls to the operating system. They can also register RSXs (Resident System eXtensions). These can be called directly from the BASIC prompt using the |command syntax. For example, AMSDOS adds commands such as |DRIVE, |DIR, |ERA, etc.&lt;br /&gt;
&lt;br /&gt;
RSXs accept parameters, and they can also be called from other programs. This is a very flexible way of providing new functions to other software.&lt;br /&gt;
&lt;br /&gt;
==The ROM managers==&lt;br /&gt;
* The most comprehensive utility for the management of the ROMs is the [[MegaFlashROManager]]. It also enables the usage of the ROMs 16-31.&lt;br /&gt;
&lt;br /&gt;
* The card comes with a built in ROM manager too, which provides all needed features. To help you using the additional features of FlashGordon, we provide one background ROM in slot 15. The main job of this ROM is to initialize ROMs from 31 to 16 (in this order, to match what the firmware does) so you can use them as background ROMs as well. It also provides some RSXs to use the write mode. Let's have a look at these commands and the way to use them.&lt;br /&gt;
&lt;br /&gt;
All of these commands will erase memory from &amp;amp;1800 to &amp;amp;6000 and the screen. Make sure any important work is saved before calling them.&lt;br /&gt;
&lt;br /&gt;
:|BURN - replace a ROM slot. Use this command to put data in one of the available slots.&lt;br /&gt;
:|BURN,&amp;quot;filename&amp;quot;,n . The file is loaded, then programmed into ROM slot n. It will be available at next boot.&lt;br /&gt;
:|HIDE . Hide one or all of the ROMs.&lt;br /&gt;
:|HIDE,n Each ROM allocates some RAM for its own use. When there are a lot of them, this is likely to increase boot time. The ROMs also take some time to initialize so you have to wait for your CPC to power up. To avoid these problems, you can use the HIDE command to make some ROMs unavailable to the firmware. Use the SHOW command to get them back. If you call HIDE with no parameters, all the ROMs are hidden and your CPC boots like if there was no expansion plugged in. Remember thatr ROM 15 is the ROM manager itself. If you disable it, you'll need to use the rescue disk to enable it again.&lt;br /&gt;
:|SHOW Undo the effect of HIDE&lt;br /&gt;
:|SHOW,n Make a hidden ROM visible again.&lt;br /&gt;
&lt;br /&gt;
==The rescue disk==&lt;br /&gt;
The rescue disk is one of two ways out if you mess up something with the ROMs setup. (The other way would be to use [[MegaFlashROManager]]). The rescue disc contains the following files :&lt;br /&gt;
&lt;br /&gt;
* ROMTEST.BIN will print the available ROM numbers. Use it for hardware testing.&lt;br /&gt;
* BURN.BAS will help you programming stuff to the FlashGordon when the ROM Manager doesn't work anymore.&lt;br /&gt;
* BURN.BIN assembler code used by BURN.BAS&lt;br /&gt;
* MANAGER.ROM the ROM manager ROM file so you can repair it.&lt;br /&gt;
&lt;br /&gt;
The source code for the programs provided on the rescue disk and the ROM manager itself are available on the source repository.&lt;br /&gt;
&lt;br /&gt;
==Creating your own ROMs==&lt;br /&gt;
You can use already existing ROM software for CPC with the FlashGordon. Any software written for romboards romboxes, ramcards, megarom or megaflash will work flawlessly. The most easy way to create you own ROMs up to 32 KB is to use the [[Softbrenner]] ROM of the [[Inicron]]s.&lt;br /&gt;
&lt;br /&gt;
But you can also write your own software to take advantage of the board to its maximal potential. This section of the documentation sums up the relevant information to get you started. You can find more information in the CPC Firmware manual and Locomotive software reference documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First of all, remember that the ROMs are always accessed by the z80 in the memory zone &amp;amp;C000 to &amp;amp;FFFF. You are not allowed to use self-modifying code, and your variables have to be stored elsewhere (as the ROM isn't writable). You also can't read the screen memory directly from ROM code. With these constraints in mind, let's now look at the structure of the ROM header.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Contents&lt;br /&gt;
|-&lt;br /&gt;
| C000	|| Rom type (0=foreground, 1=background).&lt;br /&gt;
|-&lt;br /&gt;
| C001   || Mark number (major version)&lt;br /&gt;
|-&lt;br /&gt;
| C002   || Version number&lt;br /&gt;
|-&lt;br /&gt;
| C003	|| Modification level&lt;br /&gt;
|-&lt;br /&gt;
| C004	|| Address of RSX name table (C006+3*N)&lt;br /&gt;
|-&lt;br /&gt;
| C006	|| RSX handling jump instructions&lt;br /&gt;
|-&lt;br /&gt;
| C006+3*N|| RSX name table (up to 16 character per entry), null-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The mark number, version number and modification level are unused by the firmware. They are usually ASCII characters used to make a version number. For example, the UTOPIA ROM |HELP command prints them.&lt;br /&gt;
&lt;br /&gt;
Starting at address C004 is an RSX table which is identical to the one used for RAM RSXs. The jump table must have at least as much entries as the name table. Each entry is a JP NNNN instruction and takes 3 bytes. RSX names must be uppercase, and the last character must have bit 7 set. Names using anything else than uppercase letters will make the RSX not callable from BASIC (but it can be called from assembler programs).&lt;br /&gt;
&lt;br /&gt;
The first entry in the table is the boot vector. It is called by the firmware to initialize the ROM. The name of this entry is also used as the ROM name (for example in UTOPIA, again). It may be a valid name (|BASIC for the basic) or not, if your boot vector can't be called more than once.&lt;br /&gt;
&lt;br /&gt;
At boot, the firmware always executes ROM 0 boot vector. Take care of not using a background ROM as ROM 0, because it will give back control to the firmware which doesn't expect it at that point. There are some special cases, for example AMSDOS will detect it is called as ROM 0 and will try to boot a CP/M floppy.&lt;br /&gt;
&lt;br /&gt;
As said above, background ROMs are automatically initialized by the BASIC ROM at boot for slots 1 to 15. ROMs in slots 16 to 31 are initialized by the ROM manager. They do this by calling system vectors &amp;amp;BCCB (initialize ROMs from 0 to 15) or &amp;amp;BCCE (initialize one ROM).&lt;br /&gt;
&lt;br /&gt;
The boot vector for the iniialized ROM is then called. The ROM is allowed to make space below the HIMEM (eating some of the user memory) for its own variables. Some programs will not manage to run if the HIMEM gets too low because of the ROMs. If that happens, try disabling some ROMs and booting again.&lt;br /&gt;
&lt;br /&gt;
The ROM boot vector is called with HL holding the current HIMEM value. BC and A can be used as scratch registers. DE points to LOWMEM (usually &amp;amp;0040). Your ROM can modify HL and DE to reserve memory both at the start and end of user memory space. It must set the carry to notify the firmware that everything went ok. Note that even if you don't change HL, the firmware will still allocate 4 bytes for each ROM. These are used for storing the RSX linked list data.&lt;br /&gt;
&lt;br /&gt;
Foreground ROMs must be called manually (unless they are used as ROM 0). When a foreground ROM is called, the system is reset and all expansion ROMs are disabled (this is the same thing that happens when calling a program from disk with the RUN instruction). This means the foreground ROM gets as much free RAM as possible. The firmware requires ROM slots to be consecutive, as it will stop looking for foreground ROMs as soon as it detects an empty slot. So if you have ROMs in slots 16, 17 and 19, the one in slot 19 will not be detected. You need to have one in slot 18. This does not apply to the first 15 ROMs as these are initialized when looking for background ROMs.&lt;br /&gt;
&lt;br /&gt;
==Calling an RSX from assembler==&lt;br /&gt;
Calling RSXs from BASIC is easy. Prefix the RSX name with the | character. Things are a bit more verbose in assembler, as usual.&lt;br /&gt;
&lt;br /&gt;
First of all, you need to locate the RSX. To do this, you call the KL_FIND_COMMAND (&amp;amp;BCD4) vector with HL pointing to the RSX name you're looking for (as in the RSX table, this is a string terminated by a byte with bit 7 set). If the Firmware finds a foreground ROM matching the name, it is immediately called. for background ROMs, the call returns with the rom number in C, and the address of the RSX in HL. The carry is set to indicate the ROM was found. You can then use KL_FAR_PCHL (&amp;amp;001B) or RST &amp;amp;0018 to execute the RSX. This vector takes the ROM number in C and the address in HL, so you can call it right after KL_FIND_COMMAND (after checking that the carry is set).&lt;br /&gt;
&lt;br /&gt;
An RSX can take parameters. from BASIC, these are comma separated and come after the RSX name. In assembler, A holds the parameter count, and IX points to the parameter table. Note that the first parameter in the table is actually the last one when calling from BASIC.&lt;br /&gt;
&lt;br /&gt;
Parameters are always 16-bit long. From BASIC, you can use 16-bit constants or integer variables, pointers with the @ operator, and strings. When using strings, the RSX gets a pointer to the string descriptor, which is a 3-byte struct holding the string length, and a pointer to the actual string data. If you want to use strings as parameters, expect to get them in this format.&lt;br /&gt;
&lt;br /&gt;
It is interesting to note that the BASIC calls RSXs with the last parameter also available directly in DE. It may be tempting to use this to avoid memory access using IX, but remember that not everyone has to set DE, so your RSX may not work properly when called with other means.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The RST &amp;amp;18 instruction works a bit differently. Instead of taking parameters in HL and C, it expects them to be in the program flow directly. This is interesting because all registers are passed as is to the called code. You can use them to pass data to the ROM code, bypassing the usual RSX parameter list.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
	RST &amp;amp;18;&lt;br /&gt;
	DW table	&lt;br /&gt;
        RET&lt;br /&gt;
table&lt;br /&gt;
	DW &amp;amp;C009 ; Address of code to call&lt;br /&gt;
	DB &amp;amp;04 ; Rom number to connect&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also use CALL &amp;amp;0023 which expects HL to points to a table in the same format.&lt;br /&gt;
&lt;br /&gt;
Note that you don't need to go through the RSX search, it's possible to directly call code in any ROM using these vectors. Think twice before doing that, because it means you're hardcoding the call address. If the ROM you were targetting is replaced (different BASIC version, PARADOS instead of AMSDOS), the address may change and your program will stop working.&lt;br /&gt;
&lt;br /&gt;
These 3 vectors all set IY to the memory space reserved by the ROM at boot. when the ROM needs to use its internal variables, it should do so by relative addressing to the IY register.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ROM numbers 252 to 255 are interpreted by these vectors as RAM configurations (connection of the lower ROM and banks). This limits the number of expansion ROMs to 252 system-friendly ones. The remaining ROMs can still be used but you need to roll your own code to call them (poking at gate array registers at the risk of confusing the system).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The search for an RSX is done using the linked list RSX blocks. It starts with the background ROMs from 15 to 0, then the foreground ROMs from 0 to 15, then from 16 until the BASIC ROM is detected. Finally, RAM-based RSXs are searched.&lt;br /&gt;
&lt;br /&gt;
==Accessing RAM and ROM==&lt;br /&gt;
The firmware has several vectors and system calls to help with jumping back and forth between RAM and ROM. These are of great help when writing code that uses the ROMs in a system-friendly way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*RST &amp;amp;18 calls a ROM using parameters stored after the instruction. all registers besides IX can be used as parameters.&lt;br /&gt;
*CALL &amp;amp;001B calls a ROM. HL and C are used to specify the address (PC and ROM number).&lt;br /&gt;
*CALL &amp;amp;0023 calls a ROM. HL points to a 3-byte table holding the address and ROM number.&lt;br /&gt;
*CALL &amp;amp;B912 (KL_CURR_SELECTION) sets A to the current ROM number. This can be used by program spanning accross multiple ROMs to identify where they are loaded.&lt;br /&gt;
RST &amp;amp;10 can also be used for that purpose. If the ROMs are consecutive, you can call this one with a 16 bit parameter (in the code flow as usual for RSTs). The parameter is the offset (relative to C000) of the code you want to call, and the 2 most significant bytes are used to decide which ROM to call (from current to current + 3). You can get back to the calling ROM using RET. Moreover, when nesting these calls, the same base ROM is used. So the first ROM can be used as an entry point, and call internal code in up to 3 other ROMs next to it without too much trouble.&lt;br /&gt;
*CALL &amp;amp;0013 does the same, but the parameter is given in HL instead of pointed by PC. Note that you can use these to call code in ROMs 252, 253, 254, 255.&lt;br /&gt;
*CALL &amp;amp;B900 enables upper ROM. A is set to the previous value of the RMR Gate Array register (or rather, the last value known by the system).&lt;br /&gt;
*CALL &amp;amp;B903 disables upper ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B906 enables lower ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B909 disables lower ROM. A is set to previous value of RMR.&lt;br /&gt;
*CALL &amp;amp;B90C restores memory mapping according to value of A register. Undo the effect of the 4 previous calls in a clean way.&lt;br /&gt;
RST &amp;amp;08 and CALL &amp;amp;000B call code in 0000-3FFF area after changing lower ROM state (connect or diconnect). The 16 bit in HL or following PC are the addres sof the code with the 2 high order bits defining the memory mapping.&lt;br /&gt;
RST &amp;amp;28 calls code at any address with lower ROM enabled. On return, the lower ROM is always disconnected.&lt;br /&gt;
The reserved numbers are used as follows: 252 enables both lower and upper ROM, 253 enables upper ROM only, 254 enables lower ROM only, and 255 disables both. The two higher bits are used in the same way for RST &amp;amp;08 and CALL &amp;amp;000B).&lt;br /&gt;
*CALL &amp;amp;B91B executes an LDIR in RAM (disconnecting all ROMs). This is helpful if you want to access the screen memory that is hidden when the ROM is connected.&lt;br /&gt;
*CALL &amp;amp;B91E exectutes an LDDR in RAM.&lt;br /&gt;
RST &amp;amp;20 reads a single byte from RAM. HL is the address to read from, and A holds the result.&lt;br /&gt;
*CALL &amp;amp;B90F selects upper ROM from register C and enables it. Sets A and B to the previous values of RMR and previous ROM number. This vector can connect all 256 ROMs.&lt;br /&gt;
*CALL &amp;amp;B915 gets version of ROM from register C in HL (H=version, L=mark). All 256 ROMs can be used.&lt;br /&gt;
*CALL &amp;amp;B918 restores ROM configuration from register BC. Undoes the effect of &amp;amp;B90F.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Direct hardware access to ROMs==&lt;br /&gt;
Sometimes you want to get the system out of the way. You will still be able to page ROMs in and out but you must use the hardware directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You need to use the RMR register of the Gate Array. This is located at address &amp;amp;7Fxx in the I/O space. Bits 7 and 6 must be set to 10, bits 1 and 0 set the video mode, and bits 2 and 3 must be set to 0 to connect lower and upper ROMs (or 1 to connect RAM).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Register &amp;amp;DFxx (also in I/O space) can be used to select which ROM to connect. If you select a ROM that does not exists, the BASIC ROM will take the request instead. So whatever you do, there is always some memory mapped in the &amp;amp;C000-&amp;amp;FFFF area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that direct use of these ports will confuse the system. So only use them with interrupt disabled and take great care to clean after yourself.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Writing to flash memory==&lt;br /&gt;
The main feature of FlashGordon is that the memory can also be written to. Here are some details on how to achieve that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The memory chip used is an SST 39SF040. This is a flash memory chip that is smarter than a simple ROM or RAM. You talk to it by sending commands to exectute (but reading works as usual).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First of all, unmapping the ROM using the gate array will not prevent the FlashGordon to pick up the write operations. The only way to do that in software is selecting a ROM that is not handled by the MegaFlash (ROM number 255 is a good choice).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, the MegaFlash will accept write operations both in the C000-FFFF and 8000-BFFF ranges because of an hardware limitation. So, avoid reading and writing to 8000-BFFF while trying to program a ROM. We're sorry for the inconvenience, but fixing that would require an extra chip on the board, a bigger board, and more complex wiring which we tried to avoid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The flash memory is split into blocks of 4 kilobytes. You can't write to a block directly, you need to erase it first. Once a block is erased, it will be full of FF bytes. Writing can only force bits to 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The protocol to respect is as follows :&lt;br /&gt;
*Connect ROM number 1 and write 0xAA to address 0xD555&lt;br /&gt;
*Connect ROM number 2 and write 0x55 to address 0xEAAA&lt;br /&gt;
*At this point, the flahs is waiting for a command to execute. The available commands are ERASE (0x80), IDENTIFY (0x90), BYTE PROGRAM (0xA0) and RESET (0xF0)&lt;br /&gt;
*To erase a sector, send the ERASE command by writing 0x80 to address 0xD555 in ROM 1. Now write once again 0xAA to address 0xD555 in ROM number 1 and 0x55 to address 0xEAAA in ROM number 2. Then, write 0x30 anywhere in the sector you want to erase. Erasing will take up to 20 milliseconds, so wait to make sure the flash is ready to accept another command.&lt;br /&gt;
*To write a byte, write 0xA0 (BYTE PROGRAM) to address 0xD555 in ROM 1. Then, connect the ROM you want to program and write one byte at the needed address. There is a delay of 20 NOPs after a write operation, that should be no problem as you can use them to prepare the write operation for the next byte (by the time you're ready to execute the next write to the ROM, it will be ready to listen).&lt;br /&gt;
*If you enter identify mode, you can read two bytes to learn about the manufacturer and model of the flash chip. This can be used to identify FlashGordon versus the MegaFlash (which will return different values), a Ramcard (too late, you already corrupted some data), or a plain old romboard (all your attemps to write are vain and bound to fail).&lt;br /&gt;
*There is also a command for a complete chip erase if you want to clear everything.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* [[ROMAN]] from PNG&lt;br /&gt;
* [[FutureOS]] installer&lt;br /&gt;
* [[ROManager]] from TFM&lt;br /&gt;
&lt;br /&gt;
==Credits==&lt;br /&gt;
*Ram7, who designed the Ramcard and wrote a very good manual for it (most of what you read in this manual is very closely inspired from it).&lt;br /&gt;
*Bryce, who designed the MegaFlash and the MegaROM and made the schematics freely available&lt;br /&gt;
*Krusty and Beb, for asking me to get started on this project&lt;br /&gt;
*SyX, for the moral support and help with z80 tricks&lt;br /&gt;
*Frank Wille, for working on [[vasm]]/vlink and integrating all the messy patches&lt;br /&gt;
&lt;br /&gt;
All the work here is based on work from other people, which doesn't have a very clear licence. The general understanding is that you can share the documentation and schematics, modify and improve them, build and sell your own devices, as long as :&lt;br /&gt;
*The original authors are credited for their work&lt;br /&gt;
*You don't sell them for profit (selling manufactured hardware at a price that covers manufacturing costs is ok)&lt;br /&gt;
*Provide documentation for your changes so other people can improve on them as well. I spent several hours reverse engineering the ramcard from PCB to schematics, I hope I won't have to do it again for another device.&lt;br /&gt;
&lt;br /&gt;
[[Category:FutureOS]]&lt;br /&gt;
[[Category:Peripherals]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=98503</id>
		<title>Albireo</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=98503"/>
				<updated>2017-08-26T15:17:12Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: Update with info and changes from hw revision 1.1.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
&lt;br /&gt;
Albireo is an expansion for the Amstrad CPC computers (all models). Its main goal is to provide reliable, fast, cheap and large storage, which it achieves by using a MicroSD card. But the board has a lot of features packed in:&lt;br /&gt;
* USB host port, allowing to connect USB mass storage, mouse, and other USB peripherals&lt;br /&gt;
* USB device port, allowing to link the CPC to a modern computer with maximal link speed (faster than the z80 can handle, and with on-board buffer and hardware flow control).&lt;br /&gt;
&lt;br /&gt;
The interface is based on the WCH CH376 chip and allows access to USB mass storage and other USB devices on CPC.&lt;br /&gt;
&lt;br /&gt;
The CH376 chip implements FAT32 in hardware, which means no filesystem driver is needed on the CPC side. It also implements the lower level aspects of USB, making it relatively easy to write drivers for other USB devices (mouse, joystick, ...).&lt;br /&gt;
&lt;br /&gt;
=== What's in it? ===&lt;br /&gt;
* SD and SDHC card mass storage support with fast (6 MHz) SPI link with the SD card. Hardware FAT32 support for easy file access. Raw sector access also possible for homegrown file-systems and other advanced applications.&lt;br /&gt;
* USB host support with built in mass storage driver, also with FAT32 and direct sector access.&lt;br /&gt;
* Generic USB host with direct control of USB endpoints, for connecting other kinds of USB devices.&lt;br /&gt;
* High-speed (1.5 Mbaud) serial link with built-in USB interface for linking with other computers for fast data exchange. Includes flow control, 16 byte FIFO on CPC side, and 512 byte FIFO on remote side, allowing fast buffered and interrupt-driven operation.&lt;br /&gt;
* Software configurable interrupt routing to either NMI or INT, or interrupt masking. Multiplexing of several interrupt sources: USB host controller, UART, remotely triggered, and CRTC CURSOR signal interrupts are gathered and easily accessible from a single interrupt status register.&lt;br /&gt;
&lt;br /&gt;
=== Board revisions ===&lt;br /&gt;
&lt;br /&gt;
The hardware went through multiple iterations before reaching final state. Each version identifies itself on the USB link and the version should be visible in Windows device manager or lsusb on Linux.&lt;br /&gt;
&lt;br /&gt;
==== Initial prototypes ====&lt;br /&gt;
&lt;br /&gt;
The first prototype was an hand-wired one. There were some changes to I/O ports used since then, so it is not usable anymore.&lt;br /&gt;
&lt;br /&gt;
==== Version 0.9 ====&lt;br /&gt;
&lt;br /&gt;
The first 5 boards were manufactured with an early PCB design, which required some wire-patches to get things working. With the wire-patches, this version behaves the same as 1.0.&lt;br /&gt;
&lt;br /&gt;
==== Version 1.0 ====&lt;br /&gt;
&lt;br /&gt;
About 20 boards were shipped with version 1.0. Unfortunately, as people started to write software using it it turned out that the serial port chip has compatibility problems with the z80 timings. As a result, this version of the board can use the serial port only with the FIFO disabled, which makes it impossible to reach high baudrates. The board is still perfectly usable if you are interested only in the microSD and USB host port.&lt;br /&gt;
&lt;br /&gt;
==== Version 1.1 ====&lt;br /&gt;
&lt;br /&gt;
This version of the board replaces the serial chip with a slightly different one. The board still reads &amp;quot;v1.0&amp;quot; as it is the same PCB, only the chip used has changed.&lt;br /&gt;
&lt;br /&gt;
You can identify your board from the info it sends on the USB device port, or by checking the serial chip (square chip on the back of the board).&lt;br /&gt;
Version 1.0 uses a TI TL16C550D chip. Version 1.1 uses a NXP SC16C650B chip.&lt;br /&gt;
&lt;br /&gt;
=== How does it work? ===&lt;br /&gt;
* There are two main devices: the CH376 handles the USB host and SD card side of things, and is accessed at FE80 (data) and FE81 (command/status). The communication side is handled by a SC16C650B, mapped at FEB0-FEB7. This is similar to the chip used on most PC hardware and some Amiga expansions like the SilverSurfer.&lt;br /&gt;
* There is an FT230X chip to convert the UART to USB for connecting with a modern PC (standard serial ports are not that common anymore, and they wouldn't be fast enough anyway). The FT230X also generates 12MHz and 48MHz clocks for the two other chips.&lt;br /&gt;
* The 16C650 &amp;quot;modem control&amp;quot; lines are connected to various things (CH376 interrupt, FT230X general IO pin for remote control) and turns them into interrupts.&lt;br /&gt;
&lt;br /&gt;
=== What is it useful for? ===&lt;br /&gt;
Not much currently because there is no software yet, but in the future:&lt;br /&gt;
&lt;br /&gt;
* Use the USB key or SD card directly from BASIC and well-behaving apps (which support extra disk ROMs and a C drive). Load games and tools from the mass storage media&lt;br /&gt;
* Connect to another computer like the CPC Booster, load snapshot, DSK or other files from it and write them to floppies or the mass storage media. A snapshot of 128K could be loaded in 0.86 seconds, a snapshot of 64K in less than 0.43 seconds.&lt;br /&gt;
* Use SLIP (serial line IP) and a properly setup gateway (Linux machine or similar) to connect the CPC to the Internet.&lt;br /&gt;
&lt;br /&gt;
There is a driver in SymbOS to use Albireo with an USB mouse.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== I/O ports ===&lt;br /&gt;
&lt;br /&gt;
The decoding is clean, this means there aren't any mirror ports or undecoded address bits. Just the addresses listed below are used.&lt;br /&gt;
&lt;br /&gt;
The addresses are in the I/O range, which means you access them with the OUT and IN instructions. They are not memory mapped, and to match with the CPC address decoding, the address is decoded on 16 bytes. This makes using OTIR and similar looped instructions tricky, but is required for compatibility with the CPC.&lt;br /&gt;
&lt;br /&gt;
==== CH376 registers ====&lt;br /&gt;
&lt;br /&gt;
* FE80: &amp;quot;DATA&amp;quot; port (read/write)&lt;br /&gt;
* FE81: &amp;quot;COMMAND&amp;quot; (write) and &amp;quot;STATUS&amp;quot; (read) port&lt;br /&gt;
&lt;br /&gt;
==== SC16C650B registers ==== &lt;br /&gt;
&lt;br /&gt;
Some of the registers are sharing the same address. A register bit (DLAB) is used to switch between the two groups.&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Address !! DLAB !! Description&lt;br /&gt;
|-&lt;br /&gt;
| FEB0 || 0  || RBR/THR: RX buffer (read), TX buffer (write)&lt;br /&gt;
|-&lt;br /&gt;
| FEB1 || 0|| IER: Interrupt enable&lt;br /&gt;
|-&lt;br /&gt;
| FEB0 || 1|| DLL: Divisor latch LSB&lt;br /&gt;
|-&lt;br /&gt;
| FEB1 || 1|| DLM: Divisor latch MSB&lt;br /&gt;
|-&lt;br /&gt;
| FEB2 || || IIR/FCR: Interrupt status (read), FIFO control (write)&lt;br /&gt;
|-&lt;br /&gt;
| FEB3 || || LCR: Line control&lt;br /&gt;
|-&lt;br /&gt;
| FEB4 || || MCR: Modem control&lt;br /&gt;
|-&lt;br /&gt;
| FEB5 ||  || LSR: Line status&lt;br /&gt;
|-&lt;br /&gt;
| FEB6 || || MSR: Modem status&lt;br /&gt;
|-&lt;br /&gt;
| FEB7 || || SCR: Scratch register&lt;br /&gt;
|}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIP switches ===&lt;br /&gt;
The board holds 4 DIP switches for configuration. From top to bottom:&lt;br /&gt;
&lt;br /&gt;
==== S1 - CH376 interrupt enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the usb controller is allowed to generate interrupts to signal the CPC when it is done performing an operation.&lt;br /&gt;
* When this switch is OFF, the usb controller is not allowed to generate interrupts. The CPC must then poll the CH376 STATUS register to know wether the operation is finished.&lt;br /&gt;
&lt;br /&gt;
==== S2 - CH376 reset enable====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the CH376 will be reset at the same time as the CPC (hardware reset only).&lt;br /&gt;
* When this switch is OFF, the CH376 will not be reset, and the CPC must initialize it using the reset command (software reset). In this case, the CH376 internal buffer may be used to store reset resident data (but I don't know if this is of any practical use, yet).&lt;br /&gt;
&lt;br /&gt;
==== S3 - Remote reset enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the DTR signal from the remote side of the serial link is connected to the CPC reset. This means that the remote side computer can trigger the CPC reset by toggling that line. &lt;br /&gt;
* When the switch is OFF, such reset is not allowed and the CPC is safe.&lt;br /&gt;
&lt;br /&gt;
==== S4 - Remote interrupt enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the DTR signal from the remote side of the serial link is plugged to the DSR line of the UART controller. It then generates an interrupt which the CPC can process.&lt;br /&gt;
&lt;br /&gt;
=== Detecting the hardware ===&lt;br /&gt;
&lt;br /&gt;
==== Detecting the CH376 ====&lt;br /&gt;
&lt;br /&gt;
You can use the CHECK_EXIST command for this. It gets one byte as argument, and returns the negation of it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CH376_CMD	EQU	0xFE81&lt;br /&gt;
CH376_DATA	EQU	0xFE80&lt;br /&gt;
&lt;br /&gt;
CMD_CHECK_EXIST	EQU	0X06&lt;br /&gt;
&lt;br /&gt;
		; Send the command&lt;br /&gt;
		LD	BC,	CH376_CMD&lt;br /&gt;
		LD	E,	CMD_CHECK_EXIST&lt;br /&gt;
		OUT	(C),	E&lt;br /&gt;
&lt;br /&gt;
		; Send one data byte&lt;br /&gt;
		LD	BC,	CH376_DATA&lt;br /&gt;
		OUT	(C),	E&lt;br /&gt;
&lt;br /&gt;
		; Get the result&lt;br /&gt;
		IN	A,	(C)&lt;br /&gt;
&lt;br /&gt;
		; Check that the result is the same as what we sent&lt;br /&gt;
		XOR	E&lt;br /&gt;
		INC	A&lt;br /&gt;
		JR	NC,	ERROR_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
		; Here, we know that the CH376 is present!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Detecting the TL16C550D ====&lt;br /&gt;
&lt;br /&gt;
The T16C550D can be detected using its scratch register. This is a read/write register with no effect on the chip. We can check that writing a value there and reading it back works.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SCR	EQU	0xFEB7&lt;br /&gt;
&lt;br /&gt;
	LD	BC,	SCRATCH&lt;br /&gt;
	LD	A,	0x55&lt;br /&gt;
	OUT	(C),	A&lt;br /&gt;
	IN	A,	(C)&lt;br /&gt;
	CP	0x55&lt;br /&gt;
	JP	NZ,	ERROR_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
	; Here, we know the TL16C550D is present!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interrupts ===&lt;br /&gt;
&lt;br /&gt;
All interrupts on the board are handled by the TL16C550D. They can be configured to trigger either an INT or an NMI, or nothing at all.&lt;br /&gt;
&lt;br /&gt;
==== Individual interrupts control ====&lt;br /&gt;
&lt;br /&gt;
The SC16C650B manages several different interrupt sources. These can be individually configured using the interrupt enable register.&lt;br /&gt;
&lt;br /&gt;
* Bit 0: data receive interrupt, triggered whenever a byte is received on the serial line&lt;br /&gt;
* Bit 1: TX register empty, when the UART has nothing to send.&lt;br /&gt;
* Bit 2: receiver line status, to detect RTS/CTS handshaking&lt;br /&gt;
* Bit 3: modem status, used for all other interrupts (CH376, remote control, raster interrupt from CRTC cursor)&lt;br /&gt;
&lt;br /&gt;
==== Interrupt routing ====&lt;br /&gt;
&lt;br /&gt;
The interrupts can also be routed to NMI or INT, or none of them if you don't want your code to be interrupted. This is done using the OUT1 and OUT2 bits of the modem control register (MCR).&lt;br /&gt;
&lt;br /&gt;
* OUT1 (MCR bit 2) must be set to 0 to enable INT.&lt;br /&gt;
* OUT2 (MCR bit 3) must be set to 0 to enable NMI.&lt;br /&gt;
* If both bits are set to 1, interrupts are disabled.&lt;br /&gt;
* If both bits are set to 0, both INT and NMI will be triggered, which is probably useless.&lt;br /&gt;
&lt;br /&gt;
==== Interrupt identification ====&lt;br /&gt;
&lt;br /&gt;
When an interrupt occurs, the first step in the interrupt handler is to identify where it comes from. This board provides support only for Z80 interrupt mode 1.&lt;br /&gt;
&lt;br /&gt;
You get information about interrupts by first reading the IIR register. If bit 0 is set, it means Albireo is not the one which generated the interrupt. You should turn to other hardware plugged to your CPC, or, if all else fails, to the gate array interrupt.&lt;br /&gt;
&lt;br /&gt;
If the bit is cleared, there is a pending interrupt from Albireo. You then look at bits 1-3 of IIR to determine which interrupt it is.&lt;br /&gt;
&lt;br /&gt;
* 3: Receive line interrupt, read the LSR register for more details and to clear the interrupt.&lt;br /&gt;
* 2: RX data waiting, read the RX register to get the data and clear the interrupt.&lt;br /&gt;
* 6: RX timeout, read the RX register as soon as possible to get the data and clear the interrupt.&lt;br /&gt;
* 1: TX register empty, this is cleared by reading the IIR or writing more data bytes.&lt;br /&gt;
* 0: &amp;quot;modem status&amp;quot;, means one of the external interrupts was triggered, read the MSR to learn more and clear the interrupt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== External interrupts ====&lt;br /&gt;
&lt;br /&gt;
The identification of the external interrupts in the MSR is as follows:&lt;br /&gt;
&lt;br /&gt;
* Bit 0: CTS, used for flow control of serial line. It is recommended to use automatic flow control, in that case this bit is unused and can be ignored.&lt;br /&gt;
* Bit 1: Remote control interrupt, when it is enabled using switch S4. This can be triggered from the other side of the serial link using the DTR pin.&lt;br /&gt;
* Bit 2: CRTC CURSOR raster interrupt. This is triggered when the CRTC CURSOR signal is activated. When not in use, it is recommended to disable the CURSOR signal using CRTC register 10 to avoid parasite interrupts coming from here.&lt;br /&gt;
* Bit 3: Interrupt request from the CH376. Note that this bit will be set both when the CH376 triggers an interrupt, and also when the interrupt is acknowledged on the CH376 side. This means a double-acknowledge scheme is required.&lt;br /&gt;
&lt;br /&gt;
===== Double acknowledge of interrupts =====&lt;br /&gt;
Due to the way the interrupts are wired, the TL16C550D will trigger an interrupt both when the CH376 triggers one, but also when it is cleared by software. This means after clearing the CH376 interrupt, the interrupt flags of the TL16C550D should be checked again to make sure there isn't any other pending interrupt. &lt;br /&gt;
&lt;br /&gt;
This is not a problem when using the INT pin, because everything will happen with interrupts masked by the z80. However, when using the NMI, there is no masking and this would trigger a new entry into the NMI routine, which is probably not what you want.&lt;br /&gt;
&lt;br /&gt;
To avoid this problem in NMI mode, it is recommended that the NMI handler masks the NMI by using the OUT2 bit in MCR, while it processes the interrupt. This allows to perform all tasks as required. Once all interrupts have been cleared (IIR bit 0 is set again), it is safe to enable the NMI again.&lt;br /&gt;
&lt;br /&gt;
The same applies for the remote control interrupt, when clearing it on the remote side a new interrupt will be triggered. A similar approach can be used: mask out the NMI, tell the remote side the interrupt is handled and let it clear the bit, acknowledge that with the TL16C550D, and finally enable the NMI again.&lt;br /&gt;
&lt;br /&gt;
The CURSOR interrupt is not subject to this, because it is edge triggered. You can use it as an NMI source without such problems. The interrupt is cleared simply by reading the MSR register.&lt;br /&gt;
&lt;br /&gt;
=== Other resources ===&lt;br /&gt;
&lt;br /&gt;
Test programs to check that the Albireo boards are working fine:&lt;br /&gt;
&lt;br /&gt;
* [http://pulko.mandy.pagesperso-orange.fr/shinra/ch376.bas Mass storage tests] for SD and USB (get disk capacity, read root directory).&lt;br /&gt;
* [http://pulko.mandy.pagesperso-orange.fr/shinra/ch376_hid.bas Complement of the above] (load with MERGE), adding a test for HID mouse.&lt;br /&gt;
&lt;br /&gt;
The datasheets of the chips used on the board may be useful:&lt;br /&gt;
&lt;br /&gt;
* CH376: USB-Host and SD card controller (part 1 readily available as &amp;quot;CH376DS1.PDF&amp;quot;, and [http://pulko.mandy.pagesperso-orange.fr/shinra/CH376_ext.shtml part 2], with help from Google translate.&lt;br /&gt;
* SC16C650B: UART for hi-speed link (also used for interrupts control)&lt;br /&gt;
* FT231X: UART to USB converter for hi-speed link (also used for clock generation)&lt;br /&gt;
&lt;br /&gt;
[http://pulko.mandy.pagesperso-orange.fr/shinra/albireo.shtml Albireo interface homepage]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
=== Software supporting the Albireo ===&lt;br /&gt;
* [[SymbOS]] (USB mouse support)&lt;br /&gt;
&lt;br /&gt;
=== Upcoming software ===&lt;br /&gt;
* Serial communication to communicate with a PC&lt;br /&gt;
* Disk ROM to use the mass storage from BASIC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:DATA Storage]]&lt;br /&gt;
[[Category:Peripherals]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=98502</id>
		<title>Albireo</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=98502"/>
				<updated>2017-08-26T15:05:44Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Intro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
&lt;br /&gt;
Albireo is an expansion for the Amstrad CPC computers (all models). Its main goal is to provide reliable, fast, cheap and large storage, which it achieves by using a MicroSD card. But the board has a lot of features packed in:&lt;br /&gt;
 * USB host port, allowing to connect USB mass storage, mouse, and other USB peripherals&lt;br /&gt;
 * USB device port, allowing to link the CPC to a modern computer with maximal link speed (faster than the z80 can handle, and with on-board buffer and hardware flow control).&lt;br /&gt;
&lt;br /&gt;
The interface is based on the WCH CH376 chip and allows access to USB mass storage and other USB devices on CPC.&lt;br /&gt;
&lt;br /&gt;
The CH376 chip implements FAT32 in hardware, which means no filesystem driver is needed on the CPC side. It also implements the lower level aspects of USB, making it relatively easy to write drivers for other USB devices (mouse, joystick, ...).&lt;br /&gt;
&lt;br /&gt;
=== What's in it? ===&lt;br /&gt;
* SD and SDHC card mass storage support with fast (6 MHz) SPI link with the SD card. Hardware FAT32 support for easy file access. Raw sector access also possible for homegrown file-systems and other advanced applications.&lt;br /&gt;
* USB host support with built in mass storage driver, also with FAT32 and direct sector access.&lt;br /&gt;
* Generic USB host with direct control of USB endpoints, for connecting other kinds of USB devices.&lt;br /&gt;
* High-speed (1.5 Mbaud) serial link with built-in USB interface for linking with other computers for fast data exchange. Includes flow control, 16 byte FIFO on CPC side, and 512 byte FIFO on remote side, allowing fast buffered and interrupt-driven operation.&lt;br /&gt;
* Software configurable interrupt routing to either NMI or INT, or interrupt masking. Multiplexing of several interrupt sources: USB host controller, UART, remotely triggered, and CRTC CURSOR signal interrupts are gathered and easily accessible from a single interrupt status register.&lt;br /&gt;
&lt;br /&gt;
=== How does it work? ===&lt;br /&gt;
* There are two main devices: the CH376 handles the USB host and SD card side of things, and is accessed at FE80 (data) and FE81 (command/status). The communication side is handled by a TL16C550D, mapped at FEB0-FEB7. This is similar to the chip used on most PC hardware and some Amiga expansions like the SilverSurfer.&lt;br /&gt;
* There is an FT230X chip to convert the UART to USB for connecting with a modern PC (standard serial ports are not that common anymore, and they wouldn't be fast enough anyway). The FT230X also generates 12MHz and 24MHz clocks for the two other chips.&lt;br /&gt;
* The 16C550 &amp;quot;modem control&amp;quot; lines are connected to various things (CH376 interrupt, FT230X general IO pin for remote control) and turns them into interrupts.&lt;br /&gt;
&lt;br /&gt;
=== What is it useful for? ===&lt;br /&gt;
Not much currently because there is no software yet, but in the future:&lt;br /&gt;
&lt;br /&gt;
* Use the USB key or SD card directly from BASIC and well-behaving apps (which support extra disk ROMs and a C drive). Load games and tools from the mass storage media&lt;br /&gt;
* Connect to another computer like the CPC Booster, load snapshot, DSK or other files from it and write them to floppies or the mass storage media. A snapshot of 128K could be loaded in 0.86 seconds, a snapshot of 64K in less than 0.43 seconds.&lt;br /&gt;
* Use SLIP (serial line IP) and a properly setup gateway (Linux machine or similar) to connect the CPC to the Internet.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== I/O ports ===&lt;br /&gt;
&lt;br /&gt;
Albireo is largely built around two independant chips, the CH376 and the TL16C550D. Because of cost and chip count limitations in address decoding, they each have slightly separate address ranges. The decoding is clean, this means there aren't any mirror ports or undecoded address bits. Just the addresses listed below are used.&lt;br /&gt;
&lt;br /&gt;
The addresses are in the I/O range, which means you access them with the OUT and IN instructions. They are not memory mapped, and to match with the CPC address decoding, the address is decoded on 16 bytes. This makes using OTIR and similar looped instructions tricky, but is required for compatibility with the CPC.&lt;br /&gt;
&lt;br /&gt;
==== CH376 registers ====&lt;br /&gt;
&lt;br /&gt;
* FE80: &amp;quot;DATA&amp;quot; port (read/write)&lt;br /&gt;
* FE81: &amp;quot;COMMAND&amp;quot; (write) and &amp;quot;STATUS&amp;quot; (read) port&lt;br /&gt;
&lt;br /&gt;
==== TL16C550D registers ==== &lt;br /&gt;
&lt;br /&gt;
Some of the registers are sharing the same address. A register bit (DLAB) is used to switch between the two groups.&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Address !! DLAB !! Description&lt;br /&gt;
|-&lt;br /&gt;
| FEB0 || 0  || RBR/THR: RX buffer (read), TX buffer (write)&lt;br /&gt;
|-&lt;br /&gt;
| FEB1 || 0|| IER: Interrupt enable&lt;br /&gt;
|-&lt;br /&gt;
| FEB0 || 1|| DLL: Divisor latch LSB&lt;br /&gt;
|-&lt;br /&gt;
| FEB1 || 1|| DLM: Divisor latch MSB&lt;br /&gt;
|-&lt;br /&gt;
| FEB2 || || IIR/FCR: Interrupt status (read), FIFO control (write)&lt;br /&gt;
|-&lt;br /&gt;
| FEB3 || || LCR: Line control&lt;br /&gt;
|-&lt;br /&gt;
| FEB4 || || MCR: Modem control&lt;br /&gt;
|-&lt;br /&gt;
| FEB5 ||  || LSR: Line status&lt;br /&gt;
|-&lt;br /&gt;
| FEB6 || || MSR: Modem status&lt;br /&gt;
|-&lt;br /&gt;
| FEB7 || || SCR: Scratch register&lt;br /&gt;
|}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIP switches ===&lt;br /&gt;
The board holds 4 DIP switches for configuration. From top to bottom:&lt;br /&gt;
&lt;br /&gt;
==== S1 - CH376 interrupt enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the usb controller is allowed to generate interrupts to signal the CPC when it is done performing an operation.&lt;br /&gt;
* When this switch is OFF, the usb controller is not allowed to generate interrupts. The CPC must then poll the CH376 STATUS register to know wether the operation is finished.&lt;br /&gt;
&lt;br /&gt;
==== S2 - CH376 reset enable====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the CH376 will be reset at the same time as the CPC (hardware reset only).&lt;br /&gt;
* When this switch is OFF, the CH376 will not be reset, and the CPC must initialize it using the reset command (software reset). In this case, the CH376 internal buffer may be used to store reset resident data (but I don't know if this is of any practical use, yet).&lt;br /&gt;
&lt;br /&gt;
==== S3 - Remote reset enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the DTR signal from the remote side of the serial link is connected to the CPC reset. This means that the remote side computer can trigger the CPC reset by toggling that line. &lt;br /&gt;
* When the switch is OFF, such reset is not allowed and the CPC is safe.&lt;br /&gt;
&lt;br /&gt;
==== S4 - Remote interrupt enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the DTR signal from the remote side of the serial link is plugged to the DSR line of the UART controller. It then generates an interrupt which the CPC can process.&lt;br /&gt;
&lt;br /&gt;
=== Detecting the hardware ===&lt;br /&gt;
&lt;br /&gt;
==== Detecting the CH376 ====&lt;br /&gt;
&lt;br /&gt;
You can use the CHECK_EXIST command for this. It gets one byte as argument, and returns the negation of it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CH376_CMD	EQU	0xFE81&lt;br /&gt;
CH376_DATA	EQU	0xFE80&lt;br /&gt;
&lt;br /&gt;
CMD_CHECK_EXIST	EQU	0X06&lt;br /&gt;
&lt;br /&gt;
		; Send the command&lt;br /&gt;
		LD	BC,	CH376_CMD&lt;br /&gt;
		LD	E,	CMD_CHECK_EXIST&lt;br /&gt;
		OUT	(C),	E&lt;br /&gt;
&lt;br /&gt;
		; Send one data byte&lt;br /&gt;
		LD	BC,	CH376_DATA&lt;br /&gt;
		OUT	(C),	E&lt;br /&gt;
&lt;br /&gt;
		; Get the result&lt;br /&gt;
		IN	A,	(C)&lt;br /&gt;
&lt;br /&gt;
		; Check that the result is the same as what we sent&lt;br /&gt;
		XOR	E&lt;br /&gt;
		INC	A&lt;br /&gt;
		JR	NC,	ERROR_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
		; Here, we know that the CH376 is present!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Detecting the TL16C550D ====&lt;br /&gt;
&lt;br /&gt;
The T16C550D can be detected using its scratch register. This is a read/write register with no effect on the chip. We can check that writing a value there and reading it back works.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SCR	EQU	0xFEB7&lt;br /&gt;
&lt;br /&gt;
	LD	BC,	SCRATCH&lt;br /&gt;
	LD	A,	0x55&lt;br /&gt;
	OUT	(C),	A&lt;br /&gt;
	IN	A,	(C)&lt;br /&gt;
	CP	0x55&lt;br /&gt;
	JP	NZ,	ERROR_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
	; Here, we know the TL16C550D is present!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interrupts ===&lt;br /&gt;
&lt;br /&gt;
All interrupts on the board are handled by the TL16C550D. They can be configured to trigger either an INT or an NMI, or nothing at all.&lt;br /&gt;
&lt;br /&gt;
==== Individual interrupts control ====&lt;br /&gt;
&lt;br /&gt;
The TL16C550D manages several different interrupt sources. These can be individually configured using the interrupt enable register.&lt;br /&gt;
&lt;br /&gt;
* Bit 0: data receive interrupt, triggered whenever a byte is received on the serial line&lt;br /&gt;
* Bit 1: TX register empty, when the UART has nothing to send.&lt;br /&gt;
* Bit 2: receiver line status, to detect RTS/CTS handshaking&lt;br /&gt;
* Bit 3: modem status, used for all other interrupts (CH376, remote control, raster interrupt from CRTC cursor)&lt;br /&gt;
&lt;br /&gt;
==== Interrupt routing ====&lt;br /&gt;
&lt;br /&gt;
The interrupts can also be routed to NMI or INT, or none of them if you don't want your code to be interrupted. This is done using the OUT1 and OUT2 bits of the modem control register (MCR).&lt;br /&gt;
&lt;br /&gt;
* OUT1 (MCR bit 2) must be set to 0 to enable INT.&lt;br /&gt;
* OUT2 (MCR bit 3) must be set to 0 to enable NMI.&lt;br /&gt;
* If both bits are set to 1, interrupts are disabled.&lt;br /&gt;
* If both bits are set to 0, both INT and NMI will be triggered, which is probably useless.&lt;br /&gt;
&lt;br /&gt;
==== Interrupt identification ====&lt;br /&gt;
&lt;br /&gt;
When an interrupt occurs, the first step in the interrupt handler is to identify where it comes from. This board provides support only for Z80 interrupt mode 1.&lt;br /&gt;
&lt;br /&gt;
You get information about interrupts by first reading the IIR register. If bit 0 is set, it means Albireo is not the one which generated the interrupt. You should turn to other hardware plugged to your CPC, or, if all else fails, to the gate array interrupt.&lt;br /&gt;
&lt;br /&gt;
If the bit is cleared, there is a pending interrupt from Albireo. You then look at bits 1-3 of IIR to determine which interrupt it is.&lt;br /&gt;
&lt;br /&gt;
* 3: Receive line interrupt, read the LSR register for more details and to clear the interrupt.&lt;br /&gt;
* 2: RX data waiting, read the RX register to get the data and clear the interrupt.&lt;br /&gt;
* 6: RX timeout, read the RX register as soon as possible to get the data and clear the interrupt.&lt;br /&gt;
* 1: TX register empty, this is cleared by reading the IIR or writing more data bytes.&lt;br /&gt;
* 0: &amp;quot;modem status&amp;quot;, means one of the external interrupts was triggered, read the MSR to learn more and clear the interrupt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== External interrupts ====&lt;br /&gt;
&lt;br /&gt;
The identification of the external interrupts in the MSR is as follows:&lt;br /&gt;
&lt;br /&gt;
* Bit 0: CTS, used for flow control of serial line. It is recommended to use automatic flow control, in that case this bit is unused and can be ignored.&lt;br /&gt;
* Bit 1: Remote control interrupt, when it is enabled using switch S4. This can be triggered from the other side of the serial link using the DTR pin.&lt;br /&gt;
* Bit 2: CRTC CURSOR raster interrupt. This is triggered when the CRTC CURSOR signal is activated. When not in use, it is recommended to disable the CURSOR signal using CRTC register 10 to avoid parasite interrupts coming from here.&lt;br /&gt;
* Bit 3: Interrupt request from the CH376. Note that this bit will be set both when the CH376 triggers an interrupt, and also when the interrupt is acknowledged on the CH376 side. This means a double-acknowledge scheme is required.&lt;br /&gt;
&lt;br /&gt;
===== Double acknowledge of interrupts =====&lt;br /&gt;
Due to the way the interrupts are wired, the TL16C550D will trigger an interrupt both when the CH376 triggers one, but also when it is cleared by software. This means after clearing the CH376 interrupt, the interrupt flags of the TL16C550D should be checked again to make sure there isn't any other pending interrupt. &lt;br /&gt;
&lt;br /&gt;
This is not a problem when using the INT pin, because everything will happen with interrupts masked by the z80. However, when using the NMI, there is no masking and this would trigger a new entry into the NMI routine, which is probably not what you want.&lt;br /&gt;
&lt;br /&gt;
To avoid this problem in NMI mode, it is recommended that the NMI handler masks the NMI by using the OUT2 bit in MCR, while it processes the interrupt. This allows to perform all tasks as required. Once all interrupts have been cleared (IIR bit 0 is set again), it is safe to enable the NMI again.&lt;br /&gt;
&lt;br /&gt;
The same applies for the remote control interrupt, when clearing it on the remote side a new interrupt will be triggered. A similar approach can be used: mask out the NMI, tell the remote side the interrupt is handled and let it clear the bit, acknowledge that with the TL16C550D, and finally enable the NMI again.&lt;br /&gt;
&lt;br /&gt;
The CURSOR interrupt is not subject to this, because it is edge triggered. You can use it as an NMI source without such problems. The interrupt is cleared simply by reading the MSR register.&lt;br /&gt;
&lt;br /&gt;
=== Other resources ===&lt;br /&gt;
&lt;br /&gt;
Test programs to check that the Albireo boards are working fine:&lt;br /&gt;
&lt;br /&gt;
* [http://pulko.mandy.pagesperso-orange.fr/shinra/ch376.bas Mass storage tests] for SD and USB (get disk capacity, read root directory).&lt;br /&gt;
* [http://pulko.mandy.pagesperso-orange.fr/shinra/ch376_hid.bas Complement of the above] (load with MERGE), adding a test for HID mouse.&lt;br /&gt;
&lt;br /&gt;
The datasheets of the chips used on the board may be useful:&lt;br /&gt;
&lt;br /&gt;
* CH376: USB-Host and SD card controller (part 1 readily available as &amp;quot;CH376DS1.PDF&amp;quot;, and [http://pulko.mandy.pagesperso-orange.fr/shinra/CH376_ext.shtml part 2], with help from Google translate.&lt;br /&gt;
* TL16C550D: UART for hi-speed link (also used for interrupts control)&lt;br /&gt;
* FT231X: UART to USB converter for hi-speed link (also used for clock generation)&lt;br /&gt;
&lt;br /&gt;
[http://pulko.mandy.pagesperso-orange.fr/shinra/albireo.shtml Albireo interface homepage]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
=== Software supporting the Albireo ===&lt;br /&gt;
* [[SymbOS]] (USB mouse support)&lt;br /&gt;
&lt;br /&gt;
=== Upcoming software ===&lt;br /&gt;
* Serial communication to communicate with a PC&lt;br /&gt;
* Disk ROM to use the mass storage from BASIC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:DATA Storage]]&lt;br /&gt;
[[Category:Peripherals]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=97501</id>
		<title>Albireo</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=97501"/>
				<updated>2017-03-12T11:59:45Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: Update existing software. Remove FutureOS for now, since just detecting the board does not count as support for me.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
&lt;br /&gt;
=== Intro ===&lt;br /&gt;
This interface is based on the CH376 chip and allows access to USB mass storage and other USB devices on CPC.&lt;br /&gt;
&lt;br /&gt;
The CH376 chip implements FAT32 in hardware, which means no filesystem driver is needed on the CPC side. It also implements the lower level aspects of USB, making it relatively easy to write drivers for other USB devices (mouse, joystick, ...).&lt;br /&gt;
&lt;br /&gt;
Albireo also includes a high-speed serial port, allowing speeds past the megabit per second mark.&lt;br /&gt;
&lt;br /&gt;
=== What's in it? ===&lt;br /&gt;
* SD and SDHC card mass storage support with fast (6 MHz) SPI link with the SD card. Hardware FAT32 support for easy file access. Raw sector access also possible for homegrown file-systems and other advanced applications.&lt;br /&gt;
* USB host support with built in mass storage driver, also with FAT32 and direct sector access.&lt;br /&gt;
* Generic USB host with direct control of USB endpoints, for connecting other kinds of USB devices.&lt;br /&gt;
* High-speed (1.5 Mbaud) serial link with built-in USB interface for linking with other computers for fast data exchange. Includes flow control, 16 byte FIFO on CPC side, and 512 byte FIFO on remote side, allowing fast buffered and interrupt-driven operation.&lt;br /&gt;
* Software configurable interrupt routing to either NMI or INT, or interrupt masking. Multiplexing of several interrupt sources: USB host controller, UART, remotely triggered, and CRTC CURSOR signal interrupts are gathered and easily accessible from a single interrupt status register.&lt;br /&gt;
&lt;br /&gt;
=== How does it work? ===&lt;br /&gt;
* There are two main devices: the CH376 handles the USB host and SD card side of things, and is accessed at FE80 (data) and FE81 (command/status). The communication side is handled by a TL16C550D, mapped at FEB0-FEB7. This is similar to the chip used on most PC hardware and some Amiga expansions like the SilverSurfer.&lt;br /&gt;
* There is an FT230X chip to convert the UART to USB for connecting with a modern PC (standard serial ports are not that common anymore, and they wouldn't be fast enough anyway). The FT230X also generates 12MHz and 24MHz clocks for the two other chips.&lt;br /&gt;
* The 16C550 &amp;quot;modem control&amp;quot; lines are connected to various things (CH376 interrupt, FT230X general IO pin for remote control) and turns them into interrupts.&lt;br /&gt;
&lt;br /&gt;
=== What is it useful for? ===&lt;br /&gt;
Not much currently because there is no software yet, but in the future:&lt;br /&gt;
&lt;br /&gt;
* Use the USB key or SD card directly from BASIC and well-behaving apps (which support extra disk ROMs and a C drive). Load games and tools from the mass storage media&lt;br /&gt;
* Connect to another computer like the CPC Booster, load snapshot, DSK or other files from it and write them to floppies or the mass storage media. A snapshot of 128K could be loaded in 0.86 seconds, a snapshot of 64K in less than 0.43 seconds.&lt;br /&gt;
* Use SLIP (serial line IP) and a properly setup gateway (Linux machine or similar) to connect the CPC to the Internet.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== I/O ports ===&lt;br /&gt;
&lt;br /&gt;
Albireo is largely built around two independant chips, the CH376 and the TL16C550D. Because of cost and chip count limitations in address decoding, they each have slightly separate address ranges. The decoding is clean, this means there aren't any mirror ports or undecoded address bits. Just the addresses listed below are used.&lt;br /&gt;
&lt;br /&gt;
The addresses are in the I/O range, which means you access them with the OUT and IN instructions. They are not memory mapped, and to match with the CPC address decoding, the address is decoded on 16 bytes. This makes using OTIR and similar looped instructions tricky, but is required for compatibility with the CPC.&lt;br /&gt;
&lt;br /&gt;
==== CH376 registers ====&lt;br /&gt;
&lt;br /&gt;
* FE80: &amp;quot;DATA&amp;quot; port (read/write)&lt;br /&gt;
* FE81: &amp;quot;COMMAND&amp;quot; (write) and &amp;quot;STATUS&amp;quot; (read) port&lt;br /&gt;
&lt;br /&gt;
==== TL16C550D registers ==== &lt;br /&gt;
&lt;br /&gt;
Some of the registers are sharing the same address. A register bit (DLAB) is used to switch between the two groups.&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Address !! DLAB !! Description&lt;br /&gt;
|-&lt;br /&gt;
| FEB0 || 0  || RBR/THR: RX buffer (read), TX buffer (write)&lt;br /&gt;
|-&lt;br /&gt;
| FEB1 || 0|| IER: Interrupt enable&lt;br /&gt;
|-&lt;br /&gt;
| FEB0 || 1|| DLL: Divisor latch LSB&lt;br /&gt;
|-&lt;br /&gt;
| FEB1 || 1|| DLM: Divisor latch MSB&lt;br /&gt;
|-&lt;br /&gt;
| FEB2 || || IIR/FCR: Interrupt status (read), FIFO control (write)&lt;br /&gt;
|-&lt;br /&gt;
| FEB3 || || LCR: Line control&lt;br /&gt;
|-&lt;br /&gt;
| FEB4 || || MCR: Modem control&lt;br /&gt;
|-&lt;br /&gt;
| FEB5 ||  || LSR: Line status&lt;br /&gt;
|-&lt;br /&gt;
| FEB6 || || MSR: Modem status&lt;br /&gt;
|-&lt;br /&gt;
| FEB7 || || SCR: Scratch register&lt;br /&gt;
|}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DIP switches ===&lt;br /&gt;
The board holds 4 DIP switches for configuration. From top to bottom:&lt;br /&gt;
&lt;br /&gt;
==== S1 - CH376 interrupt enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the usb controller is allowed to generate interrupts to signal the CPC when it is done performing an operation.&lt;br /&gt;
* When this switch is OFF, the usb controller is not allowed to generate interrupts. The CPC must then poll the CH376 STATUS register to know wether the operation is finished.&lt;br /&gt;
&lt;br /&gt;
==== S2 - CH376 reset enable====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the CH376 will be reset at the same time as the CPC (hardware reset only).&lt;br /&gt;
* When this switch is OFF, the CH376 will not be reset, and the CPC must initialize it using the reset command (software reset). In this case, the CH376 internal buffer may be used to store reset resident data (but I don't know if this is of any practical use, yet).&lt;br /&gt;
&lt;br /&gt;
==== S3 - Remote reset enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the DTR signal from the remote side of the serial link is connected to the CPC reset. This means that the remote side computer can trigger the CPC reset by toggling that line. &lt;br /&gt;
* When the switch is OFF, such reset is not allowed and the CPC is safe.&lt;br /&gt;
&lt;br /&gt;
==== S4 - Remote interrupt enable ====&lt;br /&gt;
&lt;br /&gt;
* When this switch is ON, the DTR signal from the remote side of the serial link is plugged to the DSR line of the UART controller. It then generates an interrupt which the CPC can process.&lt;br /&gt;
&lt;br /&gt;
=== Detecting the hardware ===&lt;br /&gt;
&lt;br /&gt;
==== Detecting the CH376 ====&lt;br /&gt;
&lt;br /&gt;
You can use the CHECK_EXIST command for this. It gets one byte as argument, and returns the negation of it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CH376_CMD	EQU	0xFE81&lt;br /&gt;
CH376_DATA	EQU	0xFE80&lt;br /&gt;
&lt;br /&gt;
CMD_CHECK_EXIST	EQU	0X06&lt;br /&gt;
&lt;br /&gt;
		; Send the command&lt;br /&gt;
		LD	BC,	CH376_CMD&lt;br /&gt;
		LD	E,	CMD_CHECK_EXIST&lt;br /&gt;
		OUT	(C),	E&lt;br /&gt;
&lt;br /&gt;
		; Send one data byte&lt;br /&gt;
		LD	BC,	CH376_DATA&lt;br /&gt;
		OUT	(C),	E&lt;br /&gt;
&lt;br /&gt;
		; Get the result&lt;br /&gt;
		IN	A,	(C)&lt;br /&gt;
&lt;br /&gt;
		; Check that the result is the same as what we sent&lt;br /&gt;
		XOR	E&lt;br /&gt;
		INC	A&lt;br /&gt;
		JR	NC,	ERROR_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
		; Here, we know that the CH376 is present!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Detecting the TL16C550D ====&lt;br /&gt;
&lt;br /&gt;
The T16C550D can be detected using its scratch register. This is a read/write register with no effect on the chip. We can check that writing a value there and reading it back works.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SCR	EQU	0xFEB7&lt;br /&gt;
&lt;br /&gt;
	LD	BC,	SCRATCH&lt;br /&gt;
	LD	A,	0x55&lt;br /&gt;
	OUT	(C),	A&lt;br /&gt;
	IN	A,	(C)&lt;br /&gt;
	CP	0x55&lt;br /&gt;
	JP	NZ,	ERROR_NOT_DETECTED&lt;br /&gt;
&lt;br /&gt;
	; Here, we know the TL16C550D is present!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interrupts ===&lt;br /&gt;
&lt;br /&gt;
All interrupts on the board are handled by the TL16C550D. They can be configured to trigger either an INT or an NMI, or nothing at all.&lt;br /&gt;
&lt;br /&gt;
==== Individual interrupts control ====&lt;br /&gt;
&lt;br /&gt;
The TL16C550D manages several different interrupt sources. These can be individually configured using the interrupt enable register.&lt;br /&gt;
&lt;br /&gt;
* Bit 0: data receive interrupt, triggered whenever a byte is received on the serial line&lt;br /&gt;
* Bit 1: TX register empty, when the UART has nothing to send.&lt;br /&gt;
* Bit 2: receiver line status, to detect RTS/CTS handshaking&lt;br /&gt;
* Bit 3: modem status, used for all other interrupts (CH376, remote control, raster interrupt from CRTC cursor)&lt;br /&gt;
&lt;br /&gt;
==== Interrupt routing ====&lt;br /&gt;
&lt;br /&gt;
The interrupts can also be routed to NMI or INT, or none of them if you don't want your code to be interrupted. This is done using the OUT1 and OUT2 bits of the modem control register (MCR).&lt;br /&gt;
&lt;br /&gt;
* OUT1 (MCR bit 2) must be set to 0 to enable INT.&lt;br /&gt;
* OUT2 (MCR bit 3) must be set to 0 to enable NMI.&lt;br /&gt;
* If both bits are set to 1, interrupts are disabled.&lt;br /&gt;
* If both bits are set to 0, both INT and NMI will be triggered, which is probably useless.&lt;br /&gt;
&lt;br /&gt;
==== Interrupt identification ====&lt;br /&gt;
&lt;br /&gt;
When an interrupt occurs, the first step in the interrupt handler is to identify where it comes from. This board provides support only for Z80 interrupt mode 1.&lt;br /&gt;
&lt;br /&gt;
You get information about interrupts by first reading the IIR register. If bit 0 is set, it means Albireo is not the one which generated the interrupt. You should turn to other hardware plugged to your CPC, or, if all else fails, to the gate array interrupt.&lt;br /&gt;
&lt;br /&gt;
If the bit is cleared, there is a pending interrupt from Albireo. You then look at bits 1-3 of IIR to determine which interrupt it is.&lt;br /&gt;
&lt;br /&gt;
* 3: Receive line interrupt, read the LSR register for more details and to clear the interrupt.&lt;br /&gt;
* 2: RX data waiting, read the RX register to get the data and clear the interrupt.&lt;br /&gt;
* 6: RX timeout, read the RX register as soon as possible to get the data and clear the interrupt.&lt;br /&gt;
* 1: TX register empty, this is cleared by reading the IIR or writing more data bytes.&lt;br /&gt;
* 0: &amp;quot;modem status&amp;quot;, means one of the external interrupts was triggered, read the MSR to learn more and clear the interrupt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== External interrupts ====&lt;br /&gt;
&lt;br /&gt;
The identification of the external interrupts in the MSR is as follows:&lt;br /&gt;
&lt;br /&gt;
* Bit 0: CTS, used for flow control of serial line. It is recommended to use automatic flow control, in that case this bit is unused and can be ignored.&lt;br /&gt;
* Bit 1: Remote control interrupt, when it is enabled using switch S4. This can be triggered from the other side of the serial link using the DTR pin.&lt;br /&gt;
* Bit 2: CRTC CURSOR raster interrupt. This is triggered when the CRTC CURSOR signal is activated. When not in use, it is recommended to disable the CURSOR signal using CRTC register 10 to avoid parasite interrupts coming from here.&lt;br /&gt;
* Bit 3: Interrupt request from the CH376. Note that this bit will be set both when the CH376 triggers an interrupt, and also when the interrupt is acknowledged on the CH376 side. This means a double-acknowledge scheme is required.&lt;br /&gt;
&lt;br /&gt;
===== Double acknowledge of interrupts =====&lt;br /&gt;
Due to the way the interrupts are wired, the TL16C550D will trigger an interrupt both when the CH376 triggers one, but also when it is cleared by software. This means after clearing the CH376 interrupt, the interrupt flags of the TL16C550D should be checked again to make sure there isn't any other pending interrupt. &lt;br /&gt;
&lt;br /&gt;
This is not a problem when using the INT pin, because everything will happen with interrupts masked by the z80. However, when using the NMI, there is no masking and this would trigger a new entry into the NMI routine, which is probably not what you want.&lt;br /&gt;
&lt;br /&gt;
To avoid this problem in NMI mode, it is recommended that the NMI handler masks the NMI by using the OUT2 bit in MCR, while it processes the interrupt. This allows to perform all tasks as required. Once all interrupts have been cleared (IIR bit 0 is set again), it is safe to enable the NMI again.&lt;br /&gt;
&lt;br /&gt;
The same applies for the remote control interrupt, when clearing it on the remote side a new interrupt will be triggered. A similar approach can be used: mask out the NMI, tell the remote side the interrupt is handled and let it clear the bit, acknowledge that with the TL16C550D, and finally enable the NMI again.&lt;br /&gt;
&lt;br /&gt;
The CURSOR interrupt is not subject to this, because it is edge triggered. You can use it as an NMI source without such problems. The interrupt is cleared simply by reading the MSR register.&lt;br /&gt;
&lt;br /&gt;
=== Other resources ===&lt;br /&gt;
&lt;br /&gt;
Test programs to check that the Albireo boards are working fine:&lt;br /&gt;
&lt;br /&gt;
* [http://pulko.mandy.pagesperso-orange.fr/shinra/ch376.bas Mass storage tests] for SD and USB (get disk capacity, read root directory).&lt;br /&gt;
* [http://pulko.mandy.pagesperso-orange.fr/shinra/ch376_hid.bas Complement of the above] (load with MERGE), adding a test for HID mouse.&lt;br /&gt;
&lt;br /&gt;
The datasheets of the chips used on the board may be useful:&lt;br /&gt;
&lt;br /&gt;
* CH376: USB-Host and SD card controller (part 1 readily available as &amp;quot;CH376DS1.PDF&amp;quot;, and [http://pulko.mandy.pagesperso-orange.fr/shinra/CH376_ext.shtml part 2], with help from Google translate.&lt;br /&gt;
* TL16C550D: UART for hi-speed link (also used for interrupts control)&lt;br /&gt;
* FT231X: UART to USB converter for hi-speed link (also used for clock generation)&lt;br /&gt;
&lt;br /&gt;
[http://pulko.mandy.pagesperso-orange.fr/shinra/albireo.shtml Albireo interface homepage]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
=== Software supporting the Albireo ===&lt;br /&gt;
* [[SymbOS]] (USB mouse support)&lt;br /&gt;
&lt;br /&gt;
=== Upcoming software ===&lt;br /&gt;
* Serial communication to communicate with a PC&lt;br /&gt;
* Disk ROM to use the mass storage from BASIC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:DATA Storage]]&lt;br /&gt;
[[Category:Peripherals]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=94944</id>
		<title>Albireo</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=94944"/>
				<updated>2016-01-17T20:35:24Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: Add data storage category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This interface is based on the CH376 chip and allows access to USB mass storage and other USB devices on CPC.&lt;br /&gt;
The CH376 chip implements FAT32 in hardware, which means no filesystem driver is needed on the CPC side. It also implements the lower level aspects of USB, making it relatively easy to write drivers for other USB devices (mouse, joystick, ...).&lt;br /&gt;
&lt;br /&gt;
Albireo also includes a high-speed serial port, allowing speeds past the megabit per second mark.&lt;br /&gt;
&lt;br /&gt;
[http://pulko.mandy.pagesperso-orange.fr/shinra/albireo.shtml Albireo interface homepage]&lt;br /&gt;
&lt;br /&gt;
[[Category:Peripherals]]&lt;br /&gt;
[[Category:DATA Storage]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=94943</id>
		<title>Albireo</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=94943"/>
				<updated>2016-01-17T20:27:29Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: Add &amp;quot;peripherals&amp;quot; category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This interface is based on the CH376 chip and allows access to USB mass storage and other USB devices on CPC.&lt;br /&gt;
The CH376 chip implements FAT32 in hardware, which means no filesystem driver is needed on the CPC side. It also implements the lower level aspects of USB, making it relatively easy to write drivers for other USB devices (mouse, joystick, ...).&lt;br /&gt;
&lt;br /&gt;
Albireo also includes a high-speed serial port, allowing speeds past the megabit per second mark.&lt;br /&gt;
&lt;br /&gt;
[http://pulko.mandy.pagesperso-orange.fr/shinra/albireo.shtml Albireo interface homepage]&lt;br /&gt;
&lt;br /&gt;
[[Category:Peripherals]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Peripherals&amp;diff=94942</id>
		<title>Peripherals</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Peripherals&amp;diff=94942"/>
				<updated>2016-01-17T20:23:30Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Multi function expansions */ Add Albireo to multifunction interfaces as well.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''You can also check the Category : Peripherals for a complete list of CPCwiki pages on the matter.'''&lt;br /&gt;
&lt;br /&gt;
* [[I/O Port Summary]]&lt;br /&gt;
&lt;br /&gt;
''Please try to keep things in alphabetical order.''&lt;br /&gt;
&lt;br /&gt;
== Built-in Peripherals ==&lt;br /&gt;
&lt;br /&gt;
=== Built-in Chipset ===&lt;br /&gt;
&lt;br /&gt;
* [[765 FDC]] - Floppy Disc Controller&lt;br /&gt;
* [[8255]] - PIO - I/O controller&lt;br /&gt;
* [[Arnold V Specs Revised]] - Arnold V (CPC+) Technical Specification&lt;br /&gt;
* [[AY-3-8912]] - Sound chip / keyboard controller&lt;br /&gt;
* [[CRTC]] - Video chip&lt;br /&gt;
* [[Gate Array]] - Custom chip (frequency generation, colors, bank switching)&lt;br /&gt;
* [[Power Supply for CPC and CPC plus]]&lt;br /&gt;
* [[Printer Port]]&lt;br /&gt;
&lt;br /&gt;
=== Built-in connectors: pinout ===&lt;br /&gt;
&lt;br /&gt;
* [[Connector:2nd disc drive (CPC664, CPC6128, CPC6128+)|2nd disc drive (CPC664, CPC6128, CPC6128+)]]&lt;br /&gt;
* [[Connector:Analogue joystick (CPC Plus only)|Analogue joystick (CPC Plus only)]]&lt;br /&gt;
* [[Connector:Aux socket (CPC Plus only)|Aux socket (CPC Plus only)]] (Lightgun)&lt;br /&gt;
* [[Connector:Cartridge Slot (CPC Plus only)|Cartridge Slot (CPC Plus only)]]&lt;br /&gt;
* [[Connector:Cassette recorder|Cassette recorder]]&lt;br /&gt;
* [[Connector:Digital joystick|Digital joystick]]&lt;br /&gt;
* [[Connector:Expansion port|Expansion port]]&lt;br /&gt;
* [[Connector:Monitor|Monitor]]&lt;br /&gt;
* [[Connector:Printer port|Printer port]]&lt;br /&gt;
* [[Connector:Stereo sound|Stereo sound]]&lt;br /&gt;
&lt;br /&gt;
=== Built-in Firmware ===&lt;br /&gt;
&lt;br /&gt;
* [[BIOS Functions]]&lt;br /&gt;
* [[Locomotive BASIC]] (reference for BASIC commands, functions and error messages)&lt;br /&gt;
* [[Technical information about Locomotive BASIC]] (encoding of BASIC programs in memory)&lt;br /&gt;
&lt;br /&gt;
== Data transfer ==&lt;br /&gt;
&lt;br /&gt;
=== Modems ===&lt;br /&gt;
&lt;br /&gt;
* [[Cirkit_Prestel_Link_Amstrad_Interface]] (acoustic coupler bundled with [[Cirkit serial interface]]) ([[Cirkit]])&lt;br /&gt;
* [[Commstar v21/23 modem]] ([[PACE]])&lt;br /&gt;
* [[Data Research CH301S modem]] (greek company)&lt;br /&gt;
* [[Digitelec DTL 2000/2100 Modem]]&lt;br /&gt;
* [[EPTA modem]] (sold by Greek mag ΕΠΤΑ)&lt;br /&gt;
* [[KDS Communicator 104]] (connects directly to expansion port) ([[KDS Electronics]])&lt;br /&gt;
* [[Loritel]] (for french Minitel) ([[Loriciel|Loriciels]])&lt;br /&gt;
* [[Mini-Max Modem|KDS Mini-Max Modem]] (connects via RS232 interface) ([[KDS Electronics]])&lt;br /&gt;
* [[MicroLink Dual-Speed Modem]] ([[MicroLink]]) [[File:Microlink.pdf|Mircolink Manual]] and [[File:Micronet.pdf|Micronet manual]], provided by ''Spookspring''&lt;br /&gt;
* [[MicroLink Multi-Speed Modem]] ([[MicroLink]])&lt;br /&gt;
* [[Nightingale_modem]] ([[PACE]])&lt;br /&gt;
* [[Schneider BTX Modul]] (for German Bildschirmtext) ([[Schneider]])&lt;br /&gt;
&lt;br /&gt;
=== Serial Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* ([[RS232|overview of RS232 interfaces]])&lt;br /&gt;
* [[Albireo]] (serial to USB on-board) ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[Aleste 520EX]] (a CPC clone with built-in RS232, intended for serial mouse) ([[Patisonic]])&lt;br /&gt;
* [[AMSSIO]] (four different versions) (RS232 interface) (DIY) (Martin Zacho)&lt;br /&gt;
* [[Amstrad Serial Interface]] ([[Amstrad]])&lt;br /&gt;
* [[Cirkit serial interface]] ([[Cirkit]])&lt;br /&gt;
* Cirkit twin-port serial interface (resold by [[Microstyle]])&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]] (modern multifunction expansion, including RS232)&lt;br /&gt;
* [[CPCI RS232 Interface]] (DIY) ([[CPC Schneider International Sonderheft]])&lt;br /&gt;
* [[Data Media Disc System]] (disc drive with built-in RS232 interface) ([[Data Media]])&lt;br /&gt;
* [[KDS Electronics Serial Interface|KDS Serial Interface]] ([[KDS Electronics]])&lt;br /&gt;
* [[Panda Electronics Communications Interface Unit]] (dual RS232 plus 8bit printer port) (Panda Electronics Ltd)&lt;br /&gt;
* [[RS-232 para Amstrad]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[SCA CPC Prolink]] ([[SCA Products]])&lt;br /&gt;
* [[Schneider RS232 Interface]] ([[Schneider]])&lt;br /&gt;
* [[Schneiderware V/24 Interface]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Simple RS232 for Printer usage]] (DIY) (one-directional, transmit only)&lt;br /&gt;
* [[Spectre Comms Serial Interface]] with Cage Comms software ([[Spectre Communications Ltd]])&lt;br /&gt;
* [[Vortex Disc Drives]] (disc drive/interface with optional RS232 port) ([[Vortex Computersysteme]])&lt;br /&gt;
* [[Z80-SIO dual ports RS232 interface for CPC (French)]] (DIY) (Philippe Lebel)&lt;br /&gt;
* [[Dual RS232]] ([[Timatic Systems]])&lt;br /&gt;
&lt;br /&gt;
=== Teletext ===&lt;br /&gt;
&lt;br /&gt;
* [[Teletext adaptor]] ([[Microtext Ltd.]])&lt;br /&gt;
* [[Volex TTX 2000a|Volex TTX 2000a Teletext-Telesoftware Adaptor]] (Volex Electronics)&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]]&lt;br /&gt;
* [[Virtual Net 96]] ([[Wizcat]])&lt;br /&gt;
* [[Red Box]] ([[General Information Systems]])&lt;br /&gt;
* [[CPC-ENet|CPC Ethernet Card]] ([[rpalmer]])&lt;br /&gt;
&lt;br /&gt;
== Digitizer / Scanner ==&lt;br /&gt;
&lt;br /&gt;
* [[ARA Video Digitizer]] ([[Jagot &amp;amp; Leon]])&lt;br /&gt;
* [[Electric Studio C6]] ([[Electric Studio]])&lt;br /&gt;
* [[Dart Scanner for DMP-Printers]] (the optics are attached to the printer head) ([[Dart Electronics]])&lt;br /&gt;
* [[Omni-Reader]] (Oberon International) (scanner with text recognition) (advert on ACU 1-1987, page 83)&lt;br /&gt;
* [[VIDI digitizer]] ([[Rombo Productions]])&lt;br /&gt;
&lt;br /&gt;
== Drives ==&lt;br /&gt;
&lt;br /&gt;
=== Disc Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[3½&amp;quot; &amp;amp; 5¼&amp;quot; Disk Drives]]&lt;br /&gt;
* [[Amstrad Disk Drive|Amstrad DDI-1 / FD-1 Disk Drive]] ([[Amstrad]])&lt;br /&gt;
* [[Cumana 3&amp;quot; Disk Drive]] ([[Cumana]])&lt;br /&gt;
* [[Data Media Disc System]] ([[Data Media]])&lt;br /&gt;
* [[Jasmin AM5D 5 &amp;quot;1/4 floppy drive]]&lt;br /&gt;
* [[KDS 5¼&amp;quot; Disc Drive]] ([[KDS Electronics]])&lt;br /&gt;
* [[TIMDISC 5¼&amp;quot; 2nd Disc Drive]] ([[Timatic Systems]])&lt;br /&gt;
* [[F1|Vortex Disc Drives]] ([[Vortex Computersysteme|Vortex]])&lt;br /&gt;
* [[Four floppy drives with Amstrad disc interface]]&lt;br /&gt;
&lt;br /&gt;
=== Exotic Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[Albireo]] (USB mass storage, SD card) ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[Codemasters CD]] (loads games from Audio CD via joystick port) ([[Codemasters]])&lt;br /&gt;
* [[Draysoft Doubler]] (external tape input, for tape-to-tape transfers) ([[Evesham Micros]])&lt;br /&gt;
* [[X-Mass]] (Solid-state disk on module)&lt;br /&gt;
&lt;br /&gt;
=== Hard Disc Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[CPC-IDE]] (modern) (discontinued prototype)&lt;br /&gt;
* [[Dobbertin Harddisc]] ([[Dobbertin]])&lt;br /&gt;
* [[IDE8255]] internal/extrernal IDE/CF interface ([[Yarek]])&lt;br /&gt;
* [[SYMBiFACE II]] (modern) (IDE and various other features)&lt;br /&gt;
* [[Vortex Winchester Drive]] ([[Vortex Computersysteme|Vortex]])&lt;br /&gt;
* [[IDE/8255]] external IDE Interface ([[rpalmer]])&lt;br /&gt;
&lt;br /&gt;
=== Drive Emulators ===&lt;br /&gt;
&lt;br /&gt;
* [[HxC Floppy Emulator]]&lt;br /&gt;
* [[SDiskEmul]]&lt;br /&gt;
* [[TFE Floppy Emulator]]&lt;br /&gt;
* [[VDrive]]&lt;br /&gt;
&lt;br /&gt;
== Hardware debuggers/Hacking devices ==&lt;br /&gt;
&lt;br /&gt;
* [[Action Replay]] (whatever snapshot) ([[Datel Electronics]])&lt;br /&gt;
* [[Disc Wizard]] (whatever snapshot) ([[Evesham Micros]])&lt;br /&gt;
* [[Hackit|Hackit / Le Hacker]] (allows to view RAM at 0040h..AF00h) ([[Siren Software]])&lt;br /&gt;
* [[Mirage Imager]] (RAM-only snapshot) (Mirage Microcomputer Limited)&lt;br /&gt;
* [[Multiface II]] (RAM-and-I/O snapshot) ([[Romantic Robot]])&lt;br /&gt;
* [[PDS development system]] (old devkit been used for commercial games) (PD Systems/Andy Glaister)&lt;br /&gt;
* [[RAM7 Cartridge Hacker]] (for CPC+/GX4000 cartridges) ([[RAM7]])&lt;br /&gt;
* [[Transtape]] (whatever snapshot) (Hard Micro)&lt;br /&gt;
&lt;br /&gt;
== Input devices ==&lt;br /&gt;
&lt;br /&gt;
=== Joysticks ===&lt;br /&gt;
&lt;br /&gt;
* [[Analog Joysticks]] (CPC Plus only)&lt;br /&gt;
* [[Digital Joysticks]]&lt;br /&gt;
* [[Amstrad JY-1/JY-2 joysticks]]&lt;br /&gt;
* [[Joystick Y-cables]]&lt;br /&gt;
&lt;br /&gt;
=== Light-Guns ===&lt;br /&gt;
&lt;br /&gt;
* [[Gunstick]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[Amstrad Magnum Phaser|Magnum Light Phaser]] ([[Amstrad]] and [[Trojan]])&lt;br /&gt;
* [[Trojan Light Phazer]] ([[Trojan]]) (CPC+)&lt;br /&gt;
* [[Loriciel Phaser (West Phaser)|West Phaser]] ([[Loriciel]])&lt;br /&gt;
&lt;br /&gt;
=== Light-Pens ===&lt;br /&gt;
&lt;br /&gt;
* [[Amstrad LP-1 light pen]] (Amstrad/Amsoft/Trojan) aka Trojan CAD-Master Lightpen (Trojan)&lt;br /&gt;
* [[ASS Light-Pen]] ([[ASS]])&lt;br /&gt;
* [[Dart Light Pen]] ([[Dart Electronics]])&lt;br /&gt;
* [[Datapen]] ([[Datapen Microtechnology Ltd]])&lt;br /&gt;
* [[dk'tronics Lightpen|Dk'tronics Light Pen]] ([[Dk'tronics]])&lt;br /&gt;
* [[Happy Computer Light Pen]] (DIY from german magazine)&lt;br /&gt;
* [[Light Pen Professional / Mark II (Electric Studio)|Light Pen Professional / Mark II]] ([[Electric Studio]])&lt;br /&gt;
* [[Lindy Light Pen]] ([[Lindy]])&lt;br /&gt;
&lt;br /&gt;
=== Mouse ===&lt;br /&gt;
&lt;br /&gt;
* [[Albireo]] with USB mouse ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[AMX Mouse]] (Advanced Memory Systems)&lt;br /&gt;
* [[PS2Mouse|AMX Compatible PS/2 and USB Mouse Adapter]] (DIY)&lt;br /&gt;
* [[Atari-ST mouse adapter]] (DIY) ([[Schneider Magazin]])&lt;br /&gt;
* [[dk'tronics Mouse Interface|Dk'tronics Mouse Interface]] ([[Dk'tronics]])&lt;br /&gt;
* [[CPC-Mousepack 2.0]] (Gerdes/Centaur/Reis-ware/ASS)&lt;br /&gt;
* [[Electric Studio Mouse]] ([[Electric Studio]])&lt;br /&gt;
* [[GEOS mouse|GEOS mouse]] ([[Commodore 64|C64]])&lt;br /&gt;
* [[Genius mouse]] ([[Datel Electronics]])&lt;br /&gt;
* [[Kempston Mouse]] (Kempston)&lt;br /&gt;
* [[Marconi|Marconi trackball]]&lt;br /&gt;
* [[Serial RS232 Mouse]]&lt;br /&gt;
* [[SYMBiFACE II:PS/2 mouse|PS/2 mouse]] of [[SYMBiFACE II]]&lt;br /&gt;
* [[Wireless mouse (DIY)]] (what is this?) (added 19 August 2006 by CPCLER)&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
* [[CPCKey|Attaching an AT keyboard to the CPC]]&lt;br /&gt;
* [[Grafpad II]] (Hegotron/British Micro/Grafsales)&lt;br /&gt;
* [[Graphiscop II]] (M.M.C.)&lt;br /&gt;
* [[Keyboard Membrane Repair/Replacement Guide|Keyboard Repair/Replacement]]&lt;br /&gt;
&lt;br /&gt;
== Memory expansions / ROM boxes ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Expansions / RAM discs ===&lt;br /&gt;
&lt;br /&gt;
* ([[Standard Memory Expansions]])&lt;br /&gt;
* [[ANTA 64K Memory Expansion]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[CPC4MB| CPC4MB - 4 MB memory expansion]] ([[Yarek]])&lt;br /&gt;
* [[c't 512 KB internal RAM expansion]] (DIY) (c't magazine)&lt;br /&gt;
* [[Data Media Memory Expansion]] ([[Data Media]])&lt;br /&gt;
* [[Dk'tronics memory expansion‎|Dk'tronics Memory Expansion and Silicon Disc]] ([[Dk'tronics]])&lt;br /&gt;
* [[Dobbertin Memory Expansion]] ([[Dobbertin]]) - 64 KB to 512 KB RAM&lt;br /&gt;
* [[Inicron RAM-Box]] (Inicron) - 512 KB RAM&lt;br /&gt;
* [[Otten &amp;amp; Fecht 1 MB RAM-Disc]] ([[Otten/Fecht]])&lt;br /&gt;
* [[Phoenix M64]] - 64 KB RAM&lt;br /&gt;
* [[RAM BOX]] 512 KB memory expansion&lt;br /&gt;
* [[RAM7 2MB memory expansion]] ([[RAM7]]) - 2 MB RAM&lt;br /&gt;
* [[SYMBiFACE II]] - 512 KB RAM&lt;br /&gt;
* [[Vortex Expansions RAM card]] ([[Vortex Computersysteme|Vortex]]) - 512 KB RAM&lt;br /&gt;
&lt;br /&gt;
=== ROM Box / ROM Board ===&lt;br /&gt;
&lt;br /&gt;
* [[ACU Romboard (DIY)|ACU Romboard]] (DIY) ([[Phil Craven]]/[[Amstrad Computer User|ACU]])&lt;br /&gt;
* [[ACU Romchanger]] (DIY) ([[Phil Craven]]/[[Amstrad Computer User|ACU]]) - a CPC6128 ROM (BIOS v3, BASIC v1.1) upgrade for the CPC464&lt;br /&gt;
* [[AD1 ROM Cartridge]] ([[Arnor]])&lt;br /&gt;
* [[AMRAM]] ([[Silicon Systems]])&lt;br /&gt;
* [[AMRAM2]] ([[Silicon Systems]])&lt;br /&gt;
* [[Amstrad ROM Expander]] (DIY) (Practical Electronics/Simon Dean)&lt;br /&gt;
* [[Britannia ROM Board]] aka ROM Plus ([[Britannia Software Ltd]])&lt;br /&gt;
* [[Cirkit HX-RX1 Rom Expansion Card]] ([[Cirkit]]) (what is this?) (added  3 September 2006 by Torn) (also listed on [[Hwlist from retroisle]])&lt;br /&gt;
* [[CPC.Flash]] internal/external 4MB ROM upgrade ([[Yarek]])&lt;br /&gt;
* [[CPC GX4000-Multi EPROM Cartridge]] Use a GX cartridge for modified ROM software&lt;br /&gt;
* [[Dobbertin EPROM 224]] ([[Dobbertin]])&lt;br /&gt;
* [[Fleet EPROM Programmer|Fleet EPROM Programmer]] (F.Kup and Fleet Microsystems Ltd.)&lt;br /&gt;
* [[FO-DOS|FO-DOS Cartridge]] - a CPC6128 ROM (BIOS v3, BASIC v1.1) upgrade for the CPC464 ([[Duchet Computers]])&lt;br /&gt;
* [[Hexam]] ([[Ace Software]])&lt;br /&gt;
* [[Honeysoft ROM Board]] ([[HoneySoft]])&lt;br /&gt;
* [[Inicron ROM-RAM-Box]] (Inicron)&lt;br /&gt;
* [[KDS Sideways ROM Board]] ([[KDS Electronics]])&lt;br /&gt;
* [[Maplin ROM Box]] ([[Maplin]])&lt;br /&gt;
* [[MegaFlash]] (DIY - Bryce) 512 KB ROM simulator using Flash, in-system programmable&lt;br /&gt;
* [[MegaROM]] (DIY - Bryce) 128K / 256K ROMBoard&lt;br /&gt;
* [[Microgenic ROM Board]] ([[Microgenic Systems]])&lt;br /&gt;
* [[Microgenic EPROM Programmer]] ([[Microgenic Systems]])&lt;br /&gt;
* [[Microstyle RAMROM]] ([[Microstyle]])&lt;br /&gt;
* [[Microstyle ROM Board Xtra]] ([[Microstyle]])&lt;br /&gt;
* [[POKROM]] (DIY) (Electronique Radio Plans, issue 517)&lt;br /&gt;
* [[Ramcard 128]] (a ROM emulator) ([[RAM7]])&lt;br /&gt;
* [[Rombo Rombox]] ([[Rombo Productions]])&lt;br /&gt;
* [[Schneiderware EPROM Burner]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Schneiderware Pseudo ROM]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Sideways ram]] (Paul Townsend)&lt;br /&gt;
* [[SuperPower ROM Box]] ([[Micro Power Ltd.]])&lt;br /&gt;
* [[Universeller EPROM Programmer 4004]] ([[Dobbertin]])&lt;br /&gt;
* [[X-ROM]] Eprom programmer and ROM Board ([[Timatic Systems]])&lt;br /&gt;
&lt;br /&gt;
== Monitors ==&lt;br /&gt;
* Computers [[monitor_compatible|compatible]] with Amstrad Monitors&lt;br /&gt;
* [[CM14|Amstrad CM14]] Colour Monitor (for CPC Plus)&lt;br /&gt;
* [[CTM640/CTM644|Amstrad CTM640/CTM644]] Color Monitor (for CPC 464/664/6128)&lt;br /&gt;
* [[GT64/GT65|Amstrad GT64/GT65]] Green Monitor (for CPC 464/664/6128)&lt;br /&gt;
* [[MM12|Amstrad MM12]] Monochrome Monitor (for CPC Plus)&lt;br /&gt;
* [[Amstrad MP1/MP2 modulator]]&lt;br /&gt;
* [[Amstrad MPV 001 modulator]] (Spanish MP1)&lt;br /&gt;
* [[MP2F|Amstrad MP-2F Scart Adapter]] (French MP2)&lt;br /&gt;
* [[MP-3|Amstrad MP-3 TV Tuner for CTM 644]]&lt;br /&gt;
* [[MPS Modulator]] Modulator made in Greece from MPS&lt;br /&gt;
* [[Dk'tronics TV Tuner]] ([[Dk'tronics]]) (similar to MP-3)&lt;br /&gt;
* [[Screenvision TV Tuner]] (Screens Microcomputers &amp;amp; Electronics Ltd.) (similar to MP-3)&lt;br /&gt;
* CPCI HF-modulator (CPC Schneider International 11/1986, Page 78ff. Someone please scan it, my issue lacks those pages!)&lt;br /&gt;
* [[TV SCART cable]] (DIY)&lt;br /&gt;
* [[LCD And Plasma TV Solution]] (DIY)&lt;br /&gt;
* [[Videomaster]] Modulator made in 1993 by Campursoft&lt;br /&gt;
&lt;br /&gt;
== Multi function expansions ==&lt;br /&gt;
&lt;br /&gt;
* [[Albireo]] ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]]&lt;br /&gt;
* [[CPCISA by Yarek]] ([[Yarek]])&lt;br /&gt;
* [[CPCMax!]]&lt;br /&gt;
* [[CPCX]]&lt;br /&gt;
* [[Full Expandable Interface]] ([[Timatic Systems]])&lt;br /&gt;
* [[PlayCity]]&lt;br /&gt;
* [[SYMBiFACE II]]&lt;br /&gt;
&lt;br /&gt;
== Printers ==&lt;br /&gt;
&lt;br /&gt;
* ([[8bit Printer Ports]])&lt;br /&gt;
* ([[Amstrad Printers]])&lt;br /&gt;
* [[DMP1]] printer ([[Amstrad]]) ([[Seikosha]] Unihammer printer)&lt;br /&gt;
* [[DMP2000]] printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 9-pin printer)&lt;br /&gt;
* [[DMP2160]] printer ([[Amstrad]]/[[Schneider]]) (fast version of DMP2000)&lt;br /&gt;
* [[DMP3000]] printer ([[Amstrad]]/[[Schneider]]) (gray PC-version of DMP2000 with more ROM/RAM and IBM charset)&lt;br /&gt;
* [[DMP3160]] printer ([[Amstrad]]/[[Schneider]]) (fast version of DMP3000)&lt;br /&gt;
* [[DMP3250]]di printer ([[Amstrad]]) (dual interface version of DMP3160) (centronics + RS232)&lt;br /&gt;
* [[DMP4000]] printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 9-pin 16&amp;quot; wide printer)&lt;br /&gt;
* [[LD6000]] laser printer ([[Amstrad GmbH]]) (re-badgered Sharp printer, for German market only)&lt;br /&gt;
* [[LQ3500]](di) printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 24-pin printer)&lt;br /&gt;
* [[LQ5000]]di printer ([[Amstrad]]) ([[Epson]]-compatible 24-pin 16&amp;quot; wide printer)&lt;br /&gt;
* [[Robotron 6313|EuroPrint FT80X, Robotron 6313, Präsident 6320]] (east German)&lt;br /&gt;
* [[NLQ401|Schneider NLQ401]] ([[Schneider]]) (custom 9-pin printer, German counterpart of the DMP1)&lt;br /&gt;
* [[Star Printers]] (Star Micronics Co., Ltd.)&lt;br /&gt;
&lt;br /&gt;
== Real Time Clocks ==&lt;br /&gt;
&lt;br /&gt;
* [[ACU Real Time Clock (DIY)|ACU Real Time Clock]] (DIY) (without year counter) ([[Amstrad Computer User|ACU]])&lt;br /&gt;
* [[Aleste 520EX]] (a CPC clone with built-in RTC) ([[Patisonic]])&lt;br /&gt;
* [[Real Time Clock|CPCI Real Time Clock]] (DIY) ([[CPC Schneider International Sonderheft]])&lt;br /&gt;
* [[Dk'tronics Real Time Clock]] ([[Dk'tronics]])&lt;br /&gt;
* [[Dobbertin Smart Watch]] (the RTC itself is inserted like a ROM) ([[Dobbertin]])&lt;br /&gt;
* [[Schneiderware Real Time Clock]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[SYMBiFACE_II:Realtime_clock|Realtime Clock]] of [[SYMBiFACE_II]] (modern RTC with bugged century counter)&lt;br /&gt;
&lt;br /&gt;
== Synthesizer, sampler and music related ==&lt;br /&gt;
&lt;br /&gt;
* [[Amdrum]] (Playback) ([[Cheetah]])&lt;br /&gt;
* [[Amstrad SSA-1 Speech Synthesizer]] (Speech) ([[Amstrad]])&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]] (Stereo Sampling/Playback) ([[Antitec]]/[[Dirty Minds]])&lt;br /&gt;
* [[Datel Digital Sound Sampler]]/[[Datel Electronics]]&lt;br /&gt;
* [[Digiblaster]] (Playback) (DIY) (8bit DAC on printer port) ([[CPC Amstrad International]])&lt;br /&gt;
* [[Digivox sampler]] (EMM)&lt;br /&gt;
* [[Dk'tronics Speech Synthesizer]] (Speech) ([[Dk'tronics]])&lt;br /&gt;
* [[DHCP MIDI Interface]] (DHCP Electronics)&lt;br /&gt;
* [[EMR MIDI Interface]] (MIDI) ([[EMR|ElectroMusic Research]])&lt;br /&gt;
* [[FuturePlayer]] (modern MP3 playback, max 128kbps) (Hard: Dr.Zed, Soft: TFM)&lt;br /&gt;
* [[Maestro]] (Amplifier/Speakers) (Vanguard Leisure Ltd.)&lt;br /&gt;
* [[Magic Sound Board]] for [[Aleste 520EX]] (four channel DMA playback) ([[Patisonic]])&lt;br /&gt;
* [[Mini Interface for connection to MK5 MIDI Keyboard]] ([[Cheetah]])&lt;br /&gt;
* [[Music Machine]] (Sampling/Playback/MIDI) ([[Ram Electronics]])&lt;br /&gt;
* [[MHT Speech Synthesizer]] (Speech) ([[MHT Ingenieros]])&lt;br /&gt;
* [[Silicon Systems MIDI Interface]] ([[Silicon Systems]]) (what is this?) (added 3 September 2006 by Torn) (also listed on [[Hwlist from retroisle]])&lt;br /&gt;
* [[Sound Blaster]] (Amplifier/Speakers) ([[Siren Software]]&lt;br /&gt;
* [[Soundplayer]] (many different versions exist) (Playback) ([[Futurs']])&lt;br /&gt;
* [[TechniMusique Synthetiseur Musical|TMPI musical synthesizer]] (12 voices) ([[TechniMusique]])&lt;br /&gt;
* [[TMPI speech synthesizer]] (Speech) ([[TechniMusique]])&lt;br /&gt;
* [[Unconventional use of hardware to produce sounds]]&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
* 64 Kb Printer Buffer (DIY) (what is this?) (added 19 August 2006 by CPCLER)&lt;br /&gt;
* [[Ambug|Ambug Robot]] (DIY) ([[Magenta Electronics Ltd.]])&lt;br /&gt;
* [[Amstore]] (network with 20MB harddisk) (Northern Computers)&lt;br /&gt;
* [[Amstrad Autofire Interface and Combined Mouse Interface|Amstrad Autofire Interface and Combined Mouse Interface]] (Unknown firm??)&lt;br /&gt;
* Amstrad Expansion System Part 2 ([[Maplin]]) - appeared in Project book 19 (for Part 1 see [[Maplin ROM Box]])&lt;br /&gt;
* [[Amstrad CT-1 Radio/Alarm-Clock]] ([[Amstrad]])&lt;br /&gt;
* [[CPCISA by Yarek|CPCISA]] ([[Yarek]])&lt;br /&gt;
* [[Data Media Printerinterface]] (printer splitter for connecting 2 or 3 software-selectable printers to the CPC) ([[Data Media]])&lt;br /&gt;
* [[DCP Interpacks]] (DCP Microdevelopments)&lt;br /&gt;
* [[Dust Covers]]&lt;br /&gt;
* [[Fischertechnik Interface]] for use with the [[Fischertechnik Trainingsrobot]], the [[Fischertechnik Plotter/Scanner]], and the [[Fischertechnik Computing Experimental]] kit.&lt;br /&gt;
* [[HDCPC]] (what is this?) (added 21 August 2006 by 85.218.166.50) (according to [[Dobbertin Harddisc|this page]], HDCPC is a modern IDE harddisk interace, but it's unknown who developed that thing?)&lt;br /&gt;
* [[Hexam]] ([[ACE Software]])&lt;br /&gt;
* [[Jagot &amp;amp; Leon Interface Cards]] ([[Jagot &amp;amp; Leon]])&lt;br /&gt;
* [[KDS Power Controller]] (a box with eight relays) ([[KDS Electronics]])&lt;br /&gt;
* [[Kersten PC Emulator]]&lt;br /&gt;
* [[Maplins 8bit Input Port]] ([[Maplin]]) (among others for use with Maplin's Weather Satellite Decoder)&lt;br /&gt;
* [[Maplin ROM Box|Maplins 6x8bit Input/Output Port]] ([[Maplin]]) (an extension to Maplin's &amp;quot;Rombox&amp;quot; project)&lt;br /&gt;
* [[Maplins Weather Satellite Receiver]] ([[Maplin]])&lt;br /&gt;
* [[Oktett]] (multimeter/oscilloscope) ([[Otten/Fecht]])&lt;br /&gt;
* [[Peripheral Soft Reset]] (System BIOS Feature for Peripherals)&lt;br /&gt;
* [[Schneiderware]] (a series of [[ECB Bus]] based DIY projects that were released in [[CPC Schneider International]] magazine)&lt;br /&gt;
* [[Split Extension Connector|Cheetah Marketing Split Extension Connector]] ([[Cheetah]])&lt;br /&gt;
* Teleterminal 300s (reportedly &amp;quot;simulates&amp;quot; rs232; connects to printer port; for use with acoustic coupler, see review in CPCI 8-1985, page 55-56)&lt;br /&gt;
* [[Slomo]] A device to reduce the execution speed of the Amstrad CPC (also available for other machines) by [[Nidd Valley Micro Products]], Ltd. (UK)&lt;br /&gt;
&lt;br /&gt;
Some further (unsorted) peripherals are found here: [[Hwlist from retroisle]]. More DIYs are listed on [[Happy Computer (Schneider Sonderheft)]] (those german magazine articles aren't yet scanned).&lt;br /&gt;
&lt;br /&gt;
[[Category:Peripherals| ]][[Category:Hardware|*]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Peripherals&amp;diff=94941</id>
		<title>Peripherals</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Peripherals&amp;diff=94941"/>
				<updated>2016-01-17T20:22:29Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Mouse */ Add Albireo, since USB mouse can be used with it&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''You can also check the Category : Peripherals for a complete list of CPCwiki pages on the matter.'''&lt;br /&gt;
&lt;br /&gt;
* [[I/O Port Summary]]&lt;br /&gt;
&lt;br /&gt;
''Please try to keep things in alphabetical order.''&lt;br /&gt;
&lt;br /&gt;
== Built-in Peripherals ==&lt;br /&gt;
&lt;br /&gt;
=== Built-in Chipset ===&lt;br /&gt;
&lt;br /&gt;
* [[765 FDC]] - Floppy Disc Controller&lt;br /&gt;
* [[8255]] - PIO - I/O controller&lt;br /&gt;
* [[Arnold V Specs Revised]] - Arnold V (CPC+) Technical Specification&lt;br /&gt;
* [[AY-3-8912]] - Sound chip / keyboard controller&lt;br /&gt;
* [[CRTC]] - Video chip&lt;br /&gt;
* [[Gate Array]] - Custom chip (frequency generation, colors, bank switching)&lt;br /&gt;
* [[Power Supply for CPC and CPC plus]]&lt;br /&gt;
* [[Printer Port]]&lt;br /&gt;
&lt;br /&gt;
=== Built-in connectors: pinout ===&lt;br /&gt;
&lt;br /&gt;
* [[Connector:2nd disc drive (CPC664, CPC6128, CPC6128+)|2nd disc drive (CPC664, CPC6128, CPC6128+)]]&lt;br /&gt;
* [[Connector:Analogue joystick (CPC Plus only)|Analogue joystick (CPC Plus only)]]&lt;br /&gt;
* [[Connector:Aux socket (CPC Plus only)|Aux socket (CPC Plus only)]] (Lightgun)&lt;br /&gt;
* [[Connector:Cartridge Slot (CPC Plus only)|Cartridge Slot (CPC Plus only)]]&lt;br /&gt;
* [[Connector:Cassette recorder|Cassette recorder]]&lt;br /&gt;
* [[Connector:Digital joystick|Digital joystick]]&lt;br /&gt;
* [[Connector:Expansion port|Expansion port]]&lt;br /&gt;
* [[Connector:Monitor|Monitor]]&lt;br /&gt;
* [[Connector:Printer port|Printer port]]&lt;br /&gt;
* [[Connector:Stereo sound|Stereo sound]]&lt;br /&gt;
&lt;br /&gt;
=== Built-in Firmware ===&lt;br /&gt;
&lt;br /&gt;
* [[BIOS Functions]]&lt;br /&gt;
* [[Locomotive BASIC]] (reference for BASIC commands, functions and error messages)&lt;br /&gt;
* [[Technical information about Locomotive BASIC]] (encoding of BASIC programs in memory)&lt;br /&gt;
&lt;br /&gt;
== Data transfer ==&lt;br /&gt;
&lt;br /&gt;
=== Modems ===&lt;br /&gt;
&lt;br /&gt;
* [[Cirkit_Prestel_Link_Amstrad_Interface]] (acoustic coupler bundled with [[Cirkit serial interface]]) ([[Cirkit]])&lt;br /&gt;
* [[Commstar v21/23 modem]] ([[PACE]])&lt;br /&gt;
* [[Data Research CH301S modem]] (greek company)&lt;br /&gt;
* [[Digitelec DTL 2000/2100 Modem]]&lt;br /&gt;
* [[EPTA modem]] (sold by Greek mag ΕΠΤΑ)&lt;br /&gt;
* [[KDS Communicator 104]] (connects directly to expansion port) ([[KDS Electronics]])&lt;br /&gt;
* [[Loritel]] (for french Minitel) ([[Loriciel|Loriciels]])&lt;br /&gt;
* [[Mini-Max Modem|KDS Mini-Max Modem]] (connects via RS232 interface) ([[KDS Electronics]])&lt;br /&gt;
* [[MicroLink Dual-Speed Modem]] ([[MicroLink]]) [[File:Microlink.pdf|Mircolink Manual]] and [[File:Micronet.pdf|Micronet manual]], provided by ''Spookspring''&lt;br /&gt;
* [[MicroLink Multi-Speed Modem]] ([[MicroLink]])&lt;br /&gt;
* [[Nightingale_modem]] ([[PACE]])&lt;br /&gt;
* [[Schneider BTX Modul]] (for German Bildschirmtext) ([[Schneider]])&lt;br /&gt;
&lt;br /&gt;
=== Serial Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* ([[RS232|overview of RS232 interfaces]])&lt;br /&gt;
* [[Albireo]] (serial to USB on-board) ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[Aleste 520EX]] (a CPC clone with built-in RS232, intended for serial mouse) ([[Patisonic]])&lt;br /&gt;
* [[AMSSIO]] (four different versions) (RS232 interface) (DIY) (Martin Zacho)&lt;br /&gt;
* [[Amstrad Serial Interface]] ([[Amstrad]])&lt;br /&gt;
* [[Cirkit serial interface]] ([[Cirkit]])&lt;br /&gt;
* Cirkit twin-port serial interface (resold by [[Microstyle]])&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]] (modern multifunction expansion, including RS232)&lt;br /&gt;
* [[CPCI RS232 Interface]] (DIY) ([[CPC Schneider International Sonderheft]])&lt;br /&gt;
* [[Data Media Disc System]] (disc drive with built-in RS232 interface) ([[Data Media]])&lt;br /&gt;
* [[KDS Electronics Serial Interface|KDS Serial Interface]] ([[KDS Electronics]])&lt;br /&gt;
* [[Panda Electronics Communications Interface Unit]] (dual RS232 plus 8bit printer port) (Panda Electronics Ltd)&lt;br /&gt;
* [[RS-232 para Amstrad]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[SCA CPC Prolink]] ([[SCA Products]])&lt;br /&gt;
* [[Schneider RS232 Interface]] ([[Schneider]])&lt;br /&gt;
* [[Schneiderware V/24 Interface]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Simple RS232 for Printer usage]] (DIY) (one-directional, transmit only)&lt;br /&gt;
* [[Spectre Comms Serial Interface]] with Cage Comms software ([[Spectre Communications Ltd]])&lt;br /&gt;
* [[Vortex Disc Drives]] (disc drive/interface with optional RS232 port) ([[Vortex Computersysteme]])&lt;br /&gt;
* [[Z80-SIO dual ports RS232 interface for CPC (French)]] (DIY) (Philippe Lebel)&lt;br /&gt;
* [[Dual RS232]] ([[Timatic Systems]])&lt;br /&gt;
&lt;br /&gt;
=== Teletext ===&lt;br /&gt;
&lt;br /&gt;
* [[Teletext adaptor]] ([[Microtext Ltd.]])&lt;br /&gt;
* [[Volex TTX 2000a|Volex TTX 2000a Teletext-Telesoftware Adaptor]] (Volex Electronics)&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]]&lt;br /&gt;
* [[Virtual Net 96]] ([[Wizcat]])&lt;br /&gt;
* [[Red Box]] ([[General Information Systems]])&lt;br /&gt;
* [[CPC-ENet|CPC Ethernet Card]] ([[rpalmer]])&lt;br /&gt;
&lt;br /&gt;
== Digitizer / Scanner ==&lt;br /&gt;
&lt;br /&gt;
* [[ARA Video Digitizer]] ([[Jagot &amp;amp; Leon]])&lt;br /&gt;
* [[Electric Studio C6]] ([[Electric Studio]])&lt;br /&gt;
* [[Dart Scanner for DMP-Printers]] (the optics are attached to the printer head) ([[Dart Electronics]])&lt;br /&gt;
* [[Omni-Reader]] (Oberon International) (scanner with text recognition) (advert on ACU 1-1987, page 83)&lt;br /&gt;
* [[VIDI digitizer]] ([[Rombo Productions]])&lt;br /&gt;
&lt;br /&gt;
== Drives ==&lt;br /&gt;
&lt;br /&gt;
=== Disc Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[3½&amp;quot; &amp;amp; 5¼&amp;quot; Disk Drives]]&lt;br /&gt;
* [[Amstrad Disk Drive|Amstrad DDI-1 / FD-1 Disk Drive]] ([[Amstrad]])&lt;br /&gt;
* [[Cumana 3&amp;quot; Disk Drive]] ([[Cumana]])&lt;br /&gt;
* [[Data Media Disc System]] ([[Data Media]])&lt;br /&gt;
* [[Jasmin AM5D 5 &amp;quot;1/4 floppy drive]]&lt;br /&gt;
* [[KDS 5¼&amp;quot; Disc Drive]] ([[KDS Electronics]])&lt;br /&gt;
* [[TIMDISC 5¼&amp;quot; 2nd Disc Drive]] ([[Timatic Systems]])&lt;br /&gt;
* [[F1|Vortex Disc Drives]] ([[Vortex Computersysteme|Vortex]])&lt;br /&gt;
* [[Four floppy drives with Amstrad disc interface]]&lt;br /&gt;
&lt;br /&gt;
=== Exotic Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[Albireo]] (USB mass storage, SD card) ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[Codemasters CD]] (loads games from Audio CD via joystick port) ([[Codemasters]])&lt;br /&gt;
* [[Draysoft Doubler]] (external tape input, for tape-to-tape transfers) ([[Evesham Micros]])&lt;br /&gt;
* [[X-Mass]] (Solid-state disk on module)&lt;br /&gt;
&lt;br /&gt;
=== Hard Disc Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[CPC-IDE]] (modern) (discontinued prototype)&lt;br /&gt;
* [[Dobbertin Harddisc]] ([[Dobbertin]])&lt;br /&gt;
* [[IDE8255]] internal/extrernal IDE/CF interface ([[Yarek]])&lt;br /&gt;
* [[SYMBiFACE II]] (modern) (IDE and various other features)&lt;br /&gt;
* [[Vortex Winchester Drive]] ([[Vortex Computersysteme|Vortex]])&lt;br /&gt;
* [[IDE/8255]] external IDE Interface ([[rpalmer]])&lt;br /&gt;
&lt;br /&gt;
=== Drive Emulators ===&lt;br /&gt;
&lt;br /&gt;
* [[HxC Floppy Emulator]]&lt;br /&gt;
* [[SDiskEmul]]&lt;br /&gt;
* [[TFE Floppy Emulator]]&lt;br /&gt;
* [[VDrive]]&lt;br /&gt;
&lt;br /&gt;
== Hardware debuggers/Hacking devices ==&lt;br /&gt;
&lt;br /&gt;
* [[Action Replay]] (whatever snapshot) ([[Datel Electronics]])&lt;br /&gt;
* [[Disc Wizard]] (whatever snapshot) ([[Evesham Micros]])&lt;br /&gt;
* [[Hackit|Hackit / Le Hacker]] (allows to view RAM at 0040h..AF00h) ([[Siren Software]])&lt;br /&gt;
* [[Mirage Imager]] (RAM-only snapshot) (Mirage Microcomputer Limited)&lt;br /&gt;
* [[Multiface II]] (RAM-and-I/O snapshot) ([[Romantic Robot]])&lt;br /&gt;
* [[PDS development system]] (old devkit been used for commercial games) (PD Systems/Andy Glaister)&lt;br /&gt;
* [[RAM7 Cartridge Hacker]] (for CPC+/GX4000 cartridges) ([[RAM7]])&lt;br /&gt;
* [[Transtape]] (whatever snapshot) (Hard Micro)&lt;br /&gt;
&lt;br /&gt;
== Input devices ==&lt;br /&gt;
&lt;br /&gt;
=== Joysticks ===&lt;br /&gt;
&lt;br /&gt;
* [[Analog Joysticks]] (CPC Plus only)&lt;br /&gt;
* [[Digital Joysticks]]&lt;br /&gt;
* [[Amstrad JY-1/JY-2 joysticks]]&lt;br /&gt;
* [[Joystick Y-cables]]&lt;br /&gt;
&lt;br /&gt;
=== Light-Guns ===&lt;br /&gt;
&lt;br /&gt;
* [[Gunstick]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[Amstrad Magnum Phaser|Magnum Light Phaser]] ([[Amstrad]] and [[Trojan]])&lt;br /&gt;
* [[Trojan Light Phazer]] ([[Trojan]]) (CPC+)&lt;br /&gt;
* [[Loriciel Phaser (West Phaser)|West Phaser]] ([[Loriciel]])&lt;br /&gt;
&lt;br /&gt;
=== Light-Pens ===&lt;br /&gt;
&lt;br /&gt;
* [[Amstrad LP-1 light pen]] (Amstrad/Amsoft/Trojan) aka Trojan CAD-Master Lightpen (Trojan)&lt;br /&gt;
* [[ASS Light-Pen]] ([[ASS]])&lt;br /&gt;
* [[Dart Light Pen]] ([[Dart Electronics]])&lt;br /&gt;
* [[Datapen]] ([[Datapen Microtechnology Ltd]])&lt;br /&gt;
* [[dk'tronics Lightpen|Dk'tronics Light Pen]] ([[Dk'tronics]])&lt;br /&gt;
* [[Happy Computer Light Pen]] (DIY from german magazine)&lt;br /&gt;
* [[Light Pen Professional / Mark II (Electric Studio)|Light Pen Professional / Mark II]] ([[Electric Studio]])&lt;br /&gt;
* [[Lindy Light Pen]] ([[Lindy]])&lt;br /&gt;
&lt;br /&gt;
=== Mouse ===&lt;br /&gt;
&lt;br /&gt;
* [[Albireo]] with USB mouse ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[AMX Mouse]] (Advanced Memory Systems)&lt;br /&gt;
* [[PS2Mouse|AMX Compatible PS/2 and USB Mouse Adapter]] (DIY)&lt;br /&gt;
* [[Atari-ST mouse adapter]] (DIY) ([[Schneider Magazin]])&lt;br /&gt;
* [[dk'tronics Mouse Interface|Dk'tronics Mouse Interface]] ([[Dk'tronics]])&lt;br /&gt;
* [[CPC-Mousepack 2.0]] (Gerdes/Centaur/Reis-ware/ASS)&lt;br /&gt;
* [[Electric Studio Mouse]] ([[Electric Studio]])&lt;br /&gt;
* [[GEOS mouse|GEOS mouse]] ([[Commodore 64|C64]])&lt;br /&gt;
* [[Genius mouse]] ([[Datel Electronics]])&lt;br /&gt;
* [[Kempston Mouse]] (Kempston)&lt;br /&gt;
* [[Marconi|Marconi trackball]]&lt;br /&gt;
* [[Serial RS232 Mouse]]&lt;br /&gt;
* [[SYMBiFACE II:PS/2 mouse|PS/2 mouse]] of [[SYMBiFACE II]]&lt;br /&gt;
* [[Wireless mouse (DIY)]] (what is this?) (added 19 August 2006 by CPCLER)&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
* [[CPCKey|Attaching an AT keyboard to the CPC]]&lt;br /&gt;
* [[Grafpad II]] (Hegotron/British Micro/Grafsales)&lt;br /&gt;
* [[Graphiscop II]] (M.M.C.)&lt;br /&gt;
* [[Keyboard Membrane Repair/Replacement Guide|Keyboard Repair/Replacement]]&lt;br /&gt;
&lt;br /&gt;
== Memory expansions / ROM boxes ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Expansions / RAM discs ===&lt;br /&gt;
&lt;br /&gt;
* ([[Standard Memory Expansions]])&lt;br /&gt;
* [[ANTA 64K Memory Expansion]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[CPC4MB| CPC4MB - 4 MB memory expansion]] ([[Yarek]])&lt;br /&gt;
* [[c't 512 KB internal RAM expansion]] (DIY) (c't magazine)&lt;br /&gt;
* [[Data Media Memory Expansion]] ([[Data Media]])&lt;br /&gt;
* [[Dk'tronics memory expansion‎|Dk'tronics Memory Expansion and Silicon Disc]] ([[Dk'tronics]])&lt;br /&gt;
* [[Dobbertin Memory Expansion]] ([[Dobbertin]]) - 64 KB to 512 KB RAM&lt;br /&gt;
* [[Inicron RAM-Box]] (Inicron) - 512 KB RAM&lt;br /&gt;
* [[Otten &amp;amp; Fecht 1 MB RAM-Disc]] ([[Otten/Fecht]])&lt;br /&gt;
* [[Phoenix M64]] - 64 KB RAM&lt;br /&gt;
* [[RAM BOX]] 512 KB memory expansion&lt;br /&gt;
* [[RAM7 2MB memory expansion]] ([[RAM7]]) - 2 MB RAM&lt;br /&gt;
* [[SYMBiFACE II]] - 512 KB RAM&lt;br /&gt;
* [[Vortex Expansions RAM card]] ([[Vortex Computersysteme|Vortex]]) - 512 KB RAM&lt;br /&gt;
&lt;br /&gt;
=== ROM Box / ROM Board ===&lt;br /&gt;
&lt;br /&gt;
* [[ACU Romboard (DIY)|ACU Romboard]] (DIY) ([[Phil Craven]]/[[Amstrad Computer User|ACU]])&lt;br /&gt;
* [[ACU Romchanger]] (DIY) ([[Phil Craven]]/[[Amstrad Computer User|ACU]]) - a CPC6128 ROM (BIOS v3, BASIC v1.1) upgrade for the CPC464&lt;br /&gt;
* [[AD1 ROM Cartridge]] ([[Arnor]])&lt;br /&gt;
* [[AMRAM]] ([[Silicon Systems]])&lt;br /&gt;
* [[AMRAM2]] ([[Silicon Systems]])&lt;br /&gt;
* [[Amstrad ROM Expander]] (DIY) (Practical Electronics/Simon Dean)&lt;br /&gt;
* [[Britannia ROM Board]] aka ROM Plus ([[Britannia Software Ltd]])&lt;br /&gt;
* [[Cirkit HX-RX1 Rom Expansion Card]] ([[Cirkit]]) (what is this?) (added  3 September 2006 by Torn) (also listed on [[Hwlist from retroisle]])&lt;br /&gt;
* [[CPC.Flash]] internal/external 4MB ROM upgrade ([[Yarek]])&lt;br /&gt;
* [[CPC GX4000-Multi EPROM Cartridge]] Use a GX cartridge for modified ROM software&lt;br /&gt;
* [[Dobbertin EPROM 224]] ([[Dobbertin]])&lt;br /&gt;
* [[Fleet EPROM Programmer|Fleet EPROM Programmer]] (F.Kup and Fleet Microsystems Ltd.)&lt;br /&gt;
* [[FO-DOS|FO-DOS Cartridge]] - a CPC6128 ROM (BIOS v3, BASIC v1.1) upgrade for the CPC464 ([[Duchet Computers]])&lt;br /&gt;
* [[Hexam]] ([[Ace Software]])&lt;br /&gt;
* [[Honeysoft ROM Board]] ([[HoneySoft]])&lt;br /&gt;
* [[Inicron ROM-RAM-Box]] (Inicron)&lt;br /&gt;
* [[KDS Sideways ROM Board]] ([[KDS Electronics]])&lt;br /&gt;
* [[Maplin ROM Box]] ([[Maplin]])&lt;br /&gt;
* [[MegaFlash]] (DIY - Bryce) 512 KB ROM simulator using Flash, in-system programmable&lt;br /&gt;
* [[MegaROM]] (DIY - Bryce) 128K / 256K ROMBoard&lt;br /&gt;
* [[Microgenic ROM Board]] ([[Microgenic Systems]])&lt;br /&gt;
* [[Microgenic EPROM Programmer]] ([[Microgenic Systems]])&lt;br /&gt;
* [[Microstyle RAMROM]] ([[Microstyle]])&lt;br /&gt;
* [[Microstyle ROM Board Xtra]] ([[Microstyle]])&lt;br /&gt;
* [[POKROM]] (DIY) (Electronique Radio Plans, issue 517)&lt;br /&gt;
* [[Ramcard 128]] (a ROM emulator) ([[RAM7]])&lt;br /&gt;
* [[Rombo Rombox]] ([[Rombo Productions]])&lt;br /&gt;
* [[Schneiderware EPROM Burner]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Schneiderware Pseudo ROM]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Sideways ram]] (Paul Townsend)&lt;br /&gt;
* [[SuperPower ROM Box]] ([[Micro Power Ltd.]])&lt;br /&gt;
* [[Universeller EPROM Programmer 4004]] ([[Dobbertin]])&lt;br /&gt;
* [[X-ROM]] Eprom programmer and ROM Board ([[Timatic Systems]])&lt;br /&gt;
&lt;br /&gt;
== Monitors ==&lt;br /&gt;
* Computers [[monitor_compatible|compatible]] with Amstrad Monitors&lt;br /&gt;
* [[CM14|Amstrad CM14]] Colour Monitor (for CPC Plus)&lt;br /&gt;
* [[CTM640/CTM644|Amstrad CTM640/CTM644]] Color Monitor (for CPC 464/664/6128)&lt;br /&gt;
* [[GT64/GT65|Amstrad GT64/GT65]] Green Monitor (for CPC 464/664/6128)&lt;br /&gt;
* [[MM12|Amstrad MM12]] Monochrome Monitor (for CPC Plus)&lt;br /&gt;
* [[Amstrad MP1/MP2 modulator]]&lt;br /&gt;
* [[Amstrad MPV 001 modulator]] (Spanish MP1)&lt;br /&gt;
* [[MP2F|Amstrad MP-2F Scart Adapter]] (French MP2)&lt;br /&gt;
* [[MP-3|Amstrad MP-3 TV Tuner for CTM 644]]&lt;br /&gt;
* [[MPS Modulator]] Modulator made in Greece from MPS&lt;br /&gt;
* [[Dk'tronics TV Tuner]] ([[Dk'tronics]]) (similar to MP-3)&lt;br /&gt;
* [[Screenvision TV Tuner]] (Screens Microcomputers &amp;amp; Electronics Ltd.) (similar to MP-3)&lt;br /&gt;
* CPCI HF-modulator (CPC Schneider International 11/1986, Page 78ff. Someone please scan it, my issue lacks those pages!)&lt;br /&gt;
* [[TV SCART cable]] (DIY)&lt;br /&gt;
* [[LCD And Plasma TV Solution]] (DIY)&lt;br /&gt;
* [[Videomaster]] Modulator made in 1993 by Campursoft&lt;br /&gt;
&lt;br /&gt;
== Multi function expansions ==&lt;br /&gt;
&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]]&lt;br /&gt;
* [[CPCISA by Yarek]] ([[Yarek]])&lt;br /&gt;
* [[CPCMax!]]&lt;br /&gt;
* [[CPCX]]&lt;br /&gt;
* [[Full Expandable Interface]] ([[Timatic Systems]])&lt;br /&gt;
* [[PlayCity]]&lt;br /&gt;
* [[SYMBiFACE II]]&lt;br /&gt;
&lt;br /&gt;
== Printers ==&lt;br /&gt;
&lt;br /&gt;
* ([[8bit Printer Ports]])&lt;br /&gt;
* ([[Amstrad Printers]])&lt;br /&gt;
* [[DMP1]] printer ([[Amstrad]]) ([[Seikosha]] Unihammer printer)&lt;br /&gt;
* [[DMP2000]] printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 9-pin printer)&lt;br /&gt;
* [[DMP2160]] printer ([[Amstrad]]/[[Schneider]]) (fast version of DMP2000)&lt;br /&gt;
* [[DMP3000]] printer ([[Amstrad]]/[[Schneider]]) (gray PC-version of DMP2000 with more ROM/RAM and IBM charset)&lt;br /&gt;
* [[DMP3160]] printer ([[Amstrad]]/[[Schneider]]) (fast version of DMP3000)&lt;br /&gt;
* [[DMP3250]]di printer ([[Amstrad]]) (dual interface version of DMP3160) (centronics + RS232)&lt;br /&gt;
* [[DMP4000]] printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 9-pin 16&amp;quot; wide printer)&lt;br /&gt;
* [[LD6000]] laser printer ([[Amstrad GmbH]]) (re-badgered Sharp printer, for German market only)&lt;br /&gt;
* [[LQ3500]](di) printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 24-pin printer)&lt;br /&gt;
* [[LQ5000]]di printer ([[Amstrad]]) ([[Epson]]-compatible 24-pin 16&amp;quot; wide printer)&lt;br /&gt;
* [[Robotron 6313|EuroPrint FT80X, Robotron 6313, Präsident 6320]] (east German)&lt;br /&gt;
* [[NLQ401|Schneider NLQ401]] ([[Schneider]]) (custom 9-pin printer, German counterpart of the DMP1)&lt;br /&gt;
* [[Star Printers]] (Star Micronics Co., Ltd.)&lt;br /&gt;
&lt;br /&gt;
== Real Time Clocks ==&lt;br /&gt;
&lt;br /&gt;
* [[ACU Real Time Clock (DIY)|ACU Real Time Clock]] (DIY) (without year counter) ([[Amstrad Computer User|ACU]])&lt;br /&gt;
* [[Aleste 520EX]] (a CPC clone with built-in RTC) ([[Patisonic]])&lt;br /&gt;
* [[Real Time Clock|CPCI Real Time Clock]] (DIY) ([[CPC Schneider International Sonderheft]])&lt;br /&gt;
* [[Dk'tronics Real Time Clock]] ([[Dk'tronics]])&lt;br /&gt;
* [[Dobbertin Smart Watch]] (the RTC itself is inserted like a ROM) ([[Dobbertin]])&lt;br /&gt;
* [[Schneiderware Real Time Clock]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[SYMBiFACE_II:Realtime_clock|Realtime Clock]] of [[SYMBiFACE_II]] (modern RTC with bugged century counter)&lt;br /&gt;
&lt;br /&gt;
== Synthesizer, sampler and music related ==&lt;br /&gt;
&lt;br /&gt;
* [[Amdrum]] (Playback) ([[Cheetah]])&lt;br /&gt;
* [[Amstrad SSA-1 Speech Synthesizer]] (Speech) ([[Amstrad]])&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]] (Stereo Sampling/Playback) ([[Antitec]]/[[Dirty Minds]])&lt;br /&gt;
* [[Datel Digital Sound Sampler]]/[[Datel Electronics]]&lt;br /&gt;
* [[Digiblaster]] (Playback) (DIY) (8bit DAC on printer port) ([[CPC Amstrad International]])&lt;br /&gt;
* [[Digivox sampler]] (EMM)&lt;br /&gt;
* [[Dk'tronics Speech Synthesizer]] (Speech) ([[Dk'tronics]])&lt;br /&gt;
* [[DHCP MIDI Interface]] (DHCP Electronics)&lt;br /&gt;
* [[EMR MIDI Interface]] (MIDI) ([[EMR|ElectroMusic Research]])&lt;br /&gt;
* [[FuturePlayer]] (modern MP3 playback, max 128kbps) (Hard: Dr.Zed, Soft: TFM)&lt;br /&gt;
* [[Maestro]] (Amplifier/Speakers) (Vanguard Leisure Ltd.)&lt;br /&gt;
* [[Magic Sound Board]] for [[Aleste 520EX]] (four channel DMA playback) ([[Patisonic]])&lt;br /&gt;
* [[Mini Interface for connection to MK5 MIDI Keyboard]] ([[Cheetah]])&lt;br /&gt;
* [[Music Machine]] (Sampling/Playback/MIDI) ([[Ram Electronics]])&lt;br /&gt;
* [[MHT Speech Synthesizer]] (Speech) ([[MHT Ingenieros]])&lt;br /&gt;
* [[Silicon Systems MIDI Interface]] ([[Silicon Systems]]) (what is this?) (added 3 September 2006 by Torn) (also listed on [[Hwlist from retroisle]])&lt;br /&gt;
* [[Sound Blaster]] (Amplifier/Speakers) ([[Siren Software]]&lt;br /&gt;
* [[Soundplayer]] (many different versions exist) (Playback) ([[Futurs']])&lt;br /&gt;
* [[TechniMusique Synthetiseur Musical|TMPI musical synthesizer]] (12 voices) ([[TechniMusique]])&lt;br /&gt;
* [[TMPI speech synthesizer]] (Speech) ([[TechniMusique]])&lt;br /&gt;
* [[Unconventional use of hardware to produce sounds]]&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
* 64 Kb Printer Buffer (DIY) (what is this?) (added 19 August 2006 by CPCLER)&lt;br /&gt;
* [[Ambug|Ambug Robot]] (DIY) ([[Magenta Electronics Ltd.]])&lt;br /&gt;
* [[Amstore]] (network with 20MB harddisk) (Northern Computers)&lt;br /&gt;
* [[Amstrad Autofire Interface and Combined Mouse Interface|Amstrad Autofire Interface and Combined Mouse Interface]] (Unknown firm??)&lt;br /&gt;
* Amstrad Expansion System Part 2 ([[Maplin]]) - appeared in Project book 19 (for Part 1 see [[Maplin ROM Box]])&lt;br /&gt;
* [[Amstrad CT-1 Radio/Alarm-Clock]] ([[Amstrad]])&lt;br /&gt;
* [[CPCISA by Yarek|CPCISA]] ([[Yarek]])&lt;br /&gt;
* [[Data Media Printerinterface]] (printer splitter for connecting 2 or 3 software-selectable printers to the CPC) ([[Data Media]])&lt;br /&gt;
* [[DCP Interpacks]] (DCP Microdevelopments)&lt;br /&gt;
* [[Dust Covers]]&lt;br /&gt;
* [[Fischertechnik Interface]] for use with the [[Fischertechnik Trainingsrobot]], the [[Fischertechnik Plotter/Scanner]], and the [[Fischertechnik Computing Experimental]] kit.&lt;br /&gt;
* [[HDCPC]] (what is this?) (added 21 August 2006 by 85.218.166.50) (according to [[Dobbertin Harddisc|this page]], HDCPC is a modern IDE harddisk interace, but it's unknown who developed that thing?)&lt;br /&gt;
* [[Hexam]] ([[ACE Software]])&lt;br /&gt;
* [[Jagot &amp;amp; Leon Interface Cards]] ([[Jagot &amp;amp; Leon]])&lt;br /&gt;
* [[KDS Power Controller]] (a box with eight relays) ([[KDS Electronics]])&lt;br /&gt;
* [[Kersten PC Emulator]]&lt;br /&gt;
* [[Maplins 8bit Input Port]] ([[Maplin]]) (among others for use with Maplin's Weather Satellite Decoder)&lt;br /&gt;
* [[Maplin ROM Box|Maplins 6x8bit Input/Output Port]] ([[Maplin]]) (an extension to Maplin's &amp;quot;Rombox&amp;quot; project)&lt;br /&gt;
* [[Maplins Weather Satellite Receiver]] ([[Maplin]])&lt;br /&gt;
* [[Oktett]] (multimeter/oscilloscope) ([[Otten/Fecht]])&lt;br /&gt;
* [[Peripheral Soft Reset]] (System BIOS Feature for Peripherals)&lt;br /&gt;
* [[Schneiderware]] (a series of [[ECB Bus]] based DIY projects that were released in [[CPC Schneider International]] magazine)&lt;br /&gt;
* [[Split Extension Connector|Cheetah Marketing Split Extension Connector]] ([[Cheetah]])&lt;br /&gt;
* Teleterminal 300s (reportedly &amp;quot;simulates&amp;quot; rs232; connects to printer port; for use with acoustic coupler, see review in CPCI 8-1985, page 55-56)&lt;br /&gt;
* [[Slomo]] A device to reduce the execution speed of the Amstrad CPC (also available for other machines) by [[Nidd Valley Micro Products]], Ltd. (UK)&lt;br /&gt;
&lt;br /&gt;
Some further (unsorted) peripherals are found here: [[Hwlist from retroisle]]. More DIYs are listed on [[Happy Computer (Schneider Sonderheft)]] (those german magazine articles aren't yet scanned).&lt;br /&gt;
&lt;br /&gt;
[[Category:Peripherals| ]][[Category:Hardware|*]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Peripherals&amp;diff=94940</id>
		<title>Peripherals</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Peripherals&amp;diff=94940"/>
				<updated>2016-01-17T20:21:35Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Exotic Drives */ Add Albireo and X-Mass&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''You can also check the Category : Peripherals for a complete list of CPCwiki pages on the matter.'''&lt;br /&gt;
&lt;br /&gt;
* [[I/O Port Summary]]&lt;br /&gt;
&lt;br /&gt;
''Please try to keep things in alphabetical order.''&lt;br /&gt;
&lt;br /&gt;
== Built-in Peripherals ==&lt;br /&gt;
&lt;br /&gt;
=== Built-in Chipset ===&lt;br /&gt;
&lt;br /&gt;
* [[765 FDC]] - Floppy Disc Controller&lt;br /&gt;
* [[8255]] - PIO - I/O controller&lt;br /&gt;
* [[Arnold V Specs Revised]] - Arnold V (CPC+) Technical Specification&lt;br /&gt;
* [[AY-3-8912]] - Sound chip / keyboard controller&lt;br /&gt;
* [[CRTC]] - Video chip&lt;br /&gt;
* [[Gate Array]] - Custom chip (frequency generation, colors, bank switching)&lt;br /&gt;
* [[Power Supply for CPC and CPC plus]]&lt;br /&gt;
* [[Printer Port]]&lt;br /&gt;
&lt;br /&gt;
=== Built-in connectors: pinout ===&lt;br /&gt;
&lt;br /&gt;
* [[Connector:2nd disc drive (CPC664, CPC6128, CPC6128+)|2nd disc drive (CPC664, CPC6128, CPC6128+)]]&lt;br /&gt;
* [[Connector:Analogue joystick (CPC Plus only)|Analogue joystick (CPC Plus only)]]&lt;br /&gt;
* [[Connector:Aux socket (CPC Plus only)|Aux socket (CPC Plus only)]] (Lightgun)&lt;br /&gt;
* [[Connector:Cartridge Slot (CPC Plus only)|Cartridge Slot (CPC Plus only)]]&lt;br /&gt;
* [[Connector:Cassette recorder|Cassette recorder]]&lt;br /&gt;
* [[Connector:Digital joystick|Digital joystick]]&lt;br /&gt;
* [[Connector:Expansion port|Expansion port]]&lt;br /&gt;
* [[Connector:Monitor|Monitor]]&lt;br /&gt;
* [[Connector:Printer port|Printer port]]&lt;br /&gt;
* [[Connector:Stereo sound|Stereo sound]]&lt;br /&gt;
&lt;br /&gt;
=== Built-in Firmware ===&lt;br /&gt;
&lt;br /&gt;
* [[BIOS Functions]]&lt;br /&gt;
* [[Locomotive BASIC]] (reference for BASIC commands, functions and error messages)&lt;br /&gt;
* [[Technical information about Locomotive BASIC]] (encoding of BASIC programs in memory)&lt;br /&gt;
&lt;br /&gt;
== Data transfer ==&lt;br /&gt;
&lt;br /&gt;
=== Modems ===&lt;br /&gt;
&lt;br /&gt;
* [[Cirkit_Prestel_Link_Amstrad_Interface]] (acoustic coupler bundled with [[Cirkit serial interface]]) ([[Cirkit]])&lt;br /&gt;
* [[Commstar v21/23 modem]] ([[PACE]])&lt;br /&gt;
* [[Data Research CH301S modem]] (greek company)&lt;br /&gt;
* [[Digitelec DTL 2000/2100 Modem]]&lt;br /&gt;
* [[EPTA modem]] (sold by Greek mag ΕΠΤΑ)&lt;br /&gt;
* [[KDS Communicator 104]] (connects directly to expansion port) ([[KDS Electronics]])&lt;br /&gt;
* [[Loritel]] (for french Minitel) ([[Loriciel|Loriciels]])&lt;br /&gt;
* [[Mini-Max Modem|KDS Mini-Max Modem]] (connects via RS232 interface) ([[KDS Electronics]])&lt;br /&gt;
* [[MicroLink Dual-Speed Modem]] ([[MicroLink]]) [[File:Microlink.pdf|Mircolink Manual]] and [[File:Micronet.pdf|Micronet manual]], provided by ''Spookspring''&lt;br /&gt;
* [[MicroLink Multi-Speed Modem]] ([[MicroLink]])&lt;br /&gt;
* [[Nightingale_modem]] ([[PACE]])&lt;br /&gt;
* [[Schneider BTX Modul]] (for German Bildschirmtext) ([[Schneider]])&lt;br /&gt;
&lt;br /&gt;
=== Serial Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* ([[RS232|overview of RS232 interfaces]])&lt;br /&gt;
* [[Albireo]] (serial to USB on-board) ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[Aleste 520EX]] (a CPC clone with built-in RS232, intended for serial mouse) ([[Patisonic]])&lt;br /&gt;
* [[AMSSIO]] (four different versions) (RS232 interface) (DIY) (Martin Zacho)&lt;br /&gt;
* [[Amstrad Serial Interface]] ([[Amstrad]])&lt;br /&gt;
* [[Cirkit serial interface]] ([[Cirkit]])&lt;br /&gt;
* Cirkit twin-port serial interface (resold by [[Microstyle]])&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]] (modern multifunction expansion, including RS232)&lt;br /&gt;
* [[CPCI RS232 Interface]] (DIY) ([[CPC Schneider International Sonderheft]])&lt;br /&gt;
* [[Data Media Disc System]] (disc drive with built-in RS232 interface) ([[Data Media]])&lt;br /&gt;
* [[KDS Electronics Serial Interface|KDS Serial Interface]] ([[KDS Electronics]])&lt;br /&gt;
* [[Panda Electronics Communications Interface Unit]] (dual RS232 plus 8bit printer port) (Panda Electronics Ltd)&lt;br /&gt;
* [[RS-232 para Amstrad]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[SCA CPC Prolink]] ([[SCA Products]])&lt;br /&gt;
* [[Schneider RS232 Interface]] ([[Schneider]])&lt;br /&gt;
* [[Schneiderware V/24 Interface]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Simple RS232 for Printer usage]] (DIY) (one-directional, transmit only)&lt;br /&gt;
* [[Spectre Comms Serial Interface]] with Cage Comms software ([[Spectre Communications Ltd]])&lt;br /&gt;
* [[Vortex Disc Drives]] (disc drive/interface with optional RS232 port) ([[Vortex Computersysteme]])&lt;br /&gt;
* [[Z80-SIO dual ports RS232 interface for CPC (French)]] (DIY) (Philippe Lebel)&lt;br /&gt;
* [[Dual RS232]] ([[Timatic Systems]])&lt;br /&gt;
&lt;br /&gt;
=== Teletext ===&lt;br /&gt;
&lt;br /&gt;
* [[Teletext adaptor]] ([[Microtext Ltd.]])&lt;br /&gt;
* [[Volex TTX 2000a|Volex TTX 2000a Teletext-Telesoftware Adaptor]] (Volex Electronics)&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]]&lt;br /&gt;
* [[Virtual Net 96]] ([[Wizcat]])&lt;br /&gt;
* [[Red Box]] ([[General Information Systems]])&lt;br /&gt;
* [[CPC-ENet|CPC Ethernet Card]] ([[rpalmer]])&lt;br /&gt;
&lt;br /&gt;
== Digitizer / Scanner ==&lt;br /&gt;
&lt;br /&gt;
* [[ARA Video Digitizer]] ([[Jagot &amp;amp; Leon]])&lt;br /&gt;
* [[Electric Studio C6]] ([[Electric Studio]])&lt;br /&gt;
* [[Dart Scanner for DMP-Printers]] (the optics are attached to the printer head) ([[Dart Electronics]])&lt;br /&gt;
* [[Omni-Reader]] (Oberon International) (scanner with text recognition) (advert on ACU 1-1987, page 83)&lt;br /&gt;
* [[VIDI digitizer]] ([[Rombo Productions]])&lt;br /&gt;
&lt;br /&gt;
== Drives ==&lt;br /&gt;
&lt;br /&gt;
=== Disc Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[3½&amp;quot; &amp;amp; 5¼&amp;quot; Disk Drives]]&lt;br /&gt;
* [[Amstrad Disk Drive|Amstrad DDI-1 / FD-1 Disk Drive]] ([[Amstrad]])&lt;br /&gt;
* [[Cumana 3&amp;quot; Disk Drive]] ([[Cumana]])&lt;br /&gt;
* [[Data Media Disc System]] ([[Data Media]])&lt;br /&gt;
* [[Jasmin AM5D 5 &amp;quot;1/4 floppy drive]]&lt;br /&gt;
* [[KDS 5¼&amp;quot; Disc Drive]] ([[KDS Electronics]])&lt;br /&gt;
* [[TIMDISC 5¼&amp;quot; 2nd Disc Drive]] ([[Timatic Systems]])&lt;br /&gt;
* [[F1|Vortex Disc Drives]] ([[Vortex Computersysteme|Vortex]])&lt;br /&gt;
* [[Four floppy drives with Amstrad disc interface]]&lt;br /&gt;
&lt;br /&gt;
=== Exotic Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[Albireo]] (USB mass storage, SD card) ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[Codemasters CD]] (loads games from Audio CD via joystick port) ([[Codemasters]])&lt;br /&gt;
* [[Draysoft Doubler]] (external tape input, for tape-to-tape transfers) ([[Evesham Micros]])&lt;br /&gt;
* [[X-Mass]] (Solid-state disk on module)&lt;br /&gt;
&lt;br /&gt;
=== Hard Disc Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[CPC-IDE]] (modern) (discontinued prototype)&lt;br /&gt;
* [[Dobbertin Harddisc]] ([[Dobbertin]])&lt;br /&gt;
* [[IDE8255]] internal/extrernal IDE/CF interface ([[Yarek]])&lt;br /&gt;
* [[SYMBiFACE II]] (modern) (IDE and various other features)&lt;br /&gt;
* [[Vortex Winchester Drive]] ([[Vortex Computersysteme|Vortex]])&lt;br /&gt;
* [[IDE/8255]] external IDE Interface ([[rpalmer]])&lt;br /&gt;
&lt;br /&gt;
=== Drive Emulators ===&lt;br /&gt;
&lt;br /&gt;
* [[HxC Floppy Emulator]]&lt;br /&gt;
* [[SDiskEmul]]&lt;br /&gt;
* [[TFE Floppy Emulator]]&lt;br /&gt;
* [[VDrive]]&lt;br /&gt;
&lt;br /&gt;
== Hardware debuggers/Hacking devices ==&lt;br /&gt;
&lt;br /&gt;
* [[Action Replay]] (whatever snapshot) ([[Datel Electronics]])&lt;br /&gt;
* [[Disc Wizard]] (whatever snapshot) ([[Evesham Micros]])&lt;br /&gt;
* [[Hackit|Hackit / Le Hacker]] (allows to view RAM at 0040h..AF00h) ([[Siren Software]])&lt;br /&gt;
* [[Mirage Imager]] (RAM-only snapshot) (Mirage Microcomputer Limited)&lt;br /&gt;
* [[Multiface II]] (RAM-and-I/O snapshot) ([[Romantic Robot]])&lt;br /&gt;
* [[PDS development system]] (old devkit been used for commercial games) (PD Systems/Andy Glaister)&lt;br /&gt;
* [[RAM7 Cartridge Hacker]] (for CPC+/GX4000 cartridges) ([[RAM7]])&lt;br /&gt;
* [[Transtape]] (whatever snapshot) (Hard Micro)&lt;br /&gt;
&lt;br /&gt;
== Input devices ==&lt;br /&gt;
&lt;br /&gt;
=== Joysticks ===&lt;br /&gt;
&lt;br /&gt;
* [[Analog Joysticks]] (CPC Plus only)&lt;br /&gt;
* [[Digital Joysticks]]&lt;br /&gt;
* [[Amstrad JY-1/JY-2 joysticks]]&lt;br /&gt;
* [[Joystick Y-cables]]&lt;br /&gt;
&lt;br /&gt;
=== Light-Guns ===&lt;br /&gt;
&lt;br /&gt;
* [[Gunstick]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[Amstrad Magnum Phaser|Magnum Light Phaser]] ([[Amstrad]] and [[Trojan]])&lt;br /&gt;
* [[Trojan Light Phazer]] ([[Trojan]]) (CPC+)&lt;br /&gt;
* [[Loriciel Phaser (West Phaser)|West Phaser]] ([[Loriciel]])&lt;br /&gt;
&lt;br /&gt;
=== Light-Pens ===&lt;br /&gt;
&lt;br /&gt;
* [[Amstrad LP-1 light pen]] (Amstrad/Amsoft/Trojan) aka Trojan CAD-Master Lightpen (Trojan)&lt;br /&gt;
* [[ASS Light-Pen]] ([[ASS]])&lt;br /&gt;
* [[Dart Light Pen]] ([[Dart Electronics]])&lt;br /&gt;
* [[Datapen]] ([[Datapen Microtechnology Ltd]])&lt;br /&gt;
* [[dk'tronics Lightpen|Dk'tronics Light Pen]] ([[Dk'tronics]])&lt;br /&gt;
* [[Happy Computer Light Pen]] (DIY from german magazine)&lt;br /&gt;
* [[Light Pen Professional / Mark II (Electric Studio)|Light Pen Professional / Mark II]] ([[Electric Studio]])&lt;br /&gt;
* [[Lindy Light Pen]] ([[Lindy]])&lt;br /&gt;
&lt;br /&gt;
=== Mouse ===&lt;br /&gt;
&lt;br /&gt;
* [[AMX Mouse]] (Advanced Memory Systems)&lt;br /&gt;
* [[PS2Mouse|AMX Compatible PS/2 and USB Mouse Adapter]] (DIY)&lt;br /&gt;
* [[Atari-ST mouse adapter]] (DIY) ([[Schneider Magazin]])&lt;br /&gt;
* [[dk'tronics Mouse Interface|Dk'tronics Mouse Interface]] ([[Dk'tronics]])&lt;br /&gt;
* [[CPC-Mousepack 2.0]] (Gerdes/Centaur/Reis-ware/ASS)&lt;br /&gt;
* [[Electric Studio Mouse]] ([[Electric Studio]])&lt;br /&gt;
* [[GEOS mouse|GEOS mouse]] ([[Commodore 64|C64]])&lt;br /&gt;
* [[Genius mouse]] ([[Datel Electronics]])&lt;br /&gt;
* [[Kempston Mouse]] (Kempston)&lt;br /&gt;
* [[Marconi|Marconi trackball]]&lt;br /&gt;
* [[Serial RS232 Mouse]]&lt;br /&gt;
* [[SYMBiFACE II:PS/2 mouse|PS/2 mouse]] of [[SYMBiFACE II]]&lt;br /&gt;
* [[Wireless mouse (DIY)]] (what is this?) (added 19 August 2006 by CPCLER)&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
* [[CPCKey|Attaching an AT keyboard to the CPC]]&lt;br /&gt;
* [[Grafpad II]] (Hegotron/British Micro/Grafsales)&lt;br /&gt;
* [[Graphiscop II]] (M.M.C.)&lt;br /&gt;
* [[Keyboard Membrane Repair/Replacement Guide|Keyboard Repair/Replacement]]&lt;br /&gt;
&lt;br /&gt;
== Memory expansions / ROM boxes ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Expansions / RAM discs ===&lt;br /&gt;
&lt;br /&gt;
* ([[Standard Memory Expansions]])&lt;br /&gt;
* [[ANTA 64K Memory Expansion]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[CPC4MB| CPC4MB - 4 MB memory expansion]] ([[Yarek]])&lt;br /&gt;
* [[c't 512 KB internal RAM expansion]] (DIY) (c't magazine)&lt;br /&gt;
* [[Data Media Memory Expansion]] ([[Data Media]])&lt;br /&gt;
* [[Dk'tronics memory expansion‎|Dk'tronics Memory Expansion and Silicon Disc]] ([[Dk'tronics]])&lt;br /&gt;
* [[Dobbertin Memory Expansion]] ([[Dobbertin]]) - 64 KB to 512 KB RAM&lt;br /&gt;
* [[Inicron RAM-Box]] (Inicron) - 512 KB RAM&lt;br /&gt;
* [[Otten &amp;amp; Fecht 1 MB RAM-Disc]] ([[Otten/Fecht]])&lt;br /&gt;
* [[Phoenix M64]] - 64 KB RAM&lt;br /&gt;
* [[RAM BOX]] 512 KB memory expansion&lt;br /&gt;
* [[RAM7 2MB memory expansion]] ([[RAM7]]) - 2 MB RAM&lt;br /&gt;
* [[SYMBiFACE II]] - 512 KB RAM&lt;br /&gt;
* [[Vortex Expansions RAM card]] ([[Vortex Computersysteme|Vortex]]) - 512 KB RAM&lt;br /&gt;
&lt;br /&gt;
=== ROM Box / ROM Board ===&lt;br /&gt;
&lt;br /&gt;
* [[ACU Romboard (DIY)|ACU Romboard]] (DIY) ([[Phil Craven]]/[[Amstrad Computer User|ACU]])&lt;br /&gt;
* [[ACU Romchanger]] (DIY) ([[Phil Craven]]/[[Amstrad Computer User|ACU]]) - a CPC6128 ROM (BIOS v3, BASIC v1.1) upgrade for the CPC464&lt;br /&gt;
* [[AD1 ROM Cartridge]] ([[Arnor]])&lt;br /&gt;
* [[AMRAM]] ([[Silicon Systems]])&lt;br /&gt;
* [[AMRAM2]] ([[Silicon Systems]])&lt;br /&gt;
* [[Amstrad ROM Expander]] (DIY) (Practical Electronics/Simon Dean)&lt;br /&gt;
* [[Britannia ROM Board]] aka ROM Plus ([[Britannia Software Ltd]])&lt;br /&gt;
* [[Cirkit HX-RX1 Rom Expansion Card]] ([[Cirkit]]) (what is this?) (added  3 September 2006 by Torn) (also listed on [[Hwlist from retroisle]])&lt;br /&gt;
* [[CPC.Flash]] internal/external 4MB ROM upgrade ([[Yarek]])&lt;br /&gt;
* [[CPC GX4000-Multi EPROM Cartridge]] Use a GX cartridge for modified ROM software&lt;br /&gt;
* [[Dobbertin EPROM 224]] ([[Dobbertin]])&lt;br /&gt;
* [[Fleet EPROM Programmer|Fleet EPROM Programmer]] (F.Kup and Fleet Microsystems Ltd.)&lt;br /&gt;
* [[FO-DOS|FO-DOS Cartridge]] - a CPC6128 ROM (BIOS v3, BASIC v1.1) upgrade for the CPC464 ([[Duchet Computers]])&lt;br /&gt;
* [[Hexam]] ([[Ace Software]])&lt;br /&gt;
* [[Honeysoft ROM Board]] ([[HoneySoft]])&lt;br /&gt;
* [[Inicron ROM-RAM-Box]] (Inicron)&lt;br /&gt;
* [[KDS Sideways ROM Board]] ([[KDS Electronics]])&lt;br /&gt;
* [[Maplin ROM Box]] ([[Maplin]])&lt;br /&gt;
* [[MegaFlash]] (DIY - Bryce) 512 KB ROM simulator using Flash, in-system programmable&lt;br /&gt;
* [[MegaROM]] (DIY - Bryce) 128K / 256K ROMBoard&lt;br /&gt;
* [[Microgenic ROM Board]] ([[Microgenic Systems]])&lt;br /&gt;
* [[Microgenic EPROM Programmer]] ([[Microgenic Systems]])&lt;br /&gt;
* [[Microstyle RAMROM]] ([[Microstyle]])&lt;br /&gt;
* [[Microstyle ROM Board Xtra]] ([[Microstyle]])&lt;br /&gt;
* [[POKROM]] (DIY) (Electronique Radio Plans, issue 517)&lt;br /&gt;
* [[Ramcard 128]] (a ROM emulator) ([[RAM7]])&lt;br /&gt;
* [[Rombo Rombox]] ([[Rombo Productions]])&lt;br /&gt;
* [[Schneiderware EPROM Burner]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Schneiderware Pseudo ROM]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Sideways ram]] (Paul Townsend)&lt;br /&gt;
* [[SuperPower ROM Box]] ([[Micro Power Ltd.]])&lt;br /&gt;
* [[Universeller EPROM Programmer 4004]] ([[Dobbertin]])&lt;br /&gt;
* [[X-ROM]] Eprom programmer and ROM Board ([[Timatic Systems]])&lt;br /&gt;
&lt;br /&gt;
== Monitors ==&lt;br /&gt;
* Computers [[monitor_compatible|compatible]] with Amstrad Monitors&lt;br /&gt;
* [[CM14|Amstrad CM14]] Colour Monitor (for CPC Plus)&lt;br /&gt;
* [[CTM640/CTM644|Amstrad CTM640/CTM644]] Color Monitor (for CPC 464/664/6128)&lt;br /&gt;
* [[GT64/GT65|Amstrad GT64/GT65]] Green Monitor (for CPC 464/664/6128)&lt;br /&gt;
* [[MM12|Amstrad MM12]] Monochrome Monitor (for CPC Plus)&lt;br /&gt;
* [[Amstrad MP1/MP2 modulator]]&lt;br /&gt;
* [[Amstrad MPV 001 modulator]] (Spanish MP1)&lt;br /&gt;
* [[MP2F|Amstrad MP-2F Scart Adapter]] (French MP2)&lt;br /&gt;
* [[MP-3|Amstrad MP-3 TV Tuner for CTM 644]]&lt;br /&gt;
* [[MPS Modulator]] Modulator made in Greece from MPS&lt;br /&gt;
* [[Dk'tronics TV Tuner]] ([[Dk'tronics]]) (similar to MP-3)&lt;br /&gt;
* [[Screenvision TV Tuner]] (Screens Microcomputers &amp;amp; Electronics Ltd.) (similar to MP-3)&lt;br /&gt;
* CPCI HF-modulator (CPC Schneider International 11/1986, Page 78ff. Someone please scan it, my issue lacks those pages!)&lt;br /&gt;
* [[TV SCART cable]] (DIY)&lt;br /&gt;
* [[LCD And Plasma TV Solution]] (DIY)&lt;br /&gt;
* [[Videomaster]] Modulator made in 1993 by Campursoft&lt;br /&gt;
&lt;br /&gt;
== Multi function expansions ==&lt;br /&gt;
&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]]&lt;br /&gt;
* [[CPCISA by Yarek]] ([[Yarek]])&lt;br /&gt;
* [[CPCMax!]]&lt;br /&gt;
* [[CPCX]]&lt;br /&gt;
* [[Full Expandable Interface]] ([[Timatic Systems]])&lt;br /&gt;
* [[PlayCity]]&lt;br /&gt;
* [[SYMBiFACE II]]&lt;br /&gt;
&lt;br /&gt;
== Printers ==&lt;br /&gt;
&lt;br /&gt;
* ([[8bit Printer Ports]])&lt;br /&gt;
* ([[Amstrad Printers]])&lt;br /&gt;
* [[DMP1]] printer ([[Amstrad]]) ([[Seikosha]] Unihammer printer)&lt;br /&gt;
* [[DMP2000]] printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 9-pin printer)&lt;br /&gt;
* [[DMP2160]] printer ([[Amstrad]]/[[Schneider]]) (fast version of DMP2000)&lt;br /&gt;
* [[DMP3000]] printer ([[Amstrad]]/[[Schneider]]) (gray PC-version of DMP2000 with more ROM/RAM and IBM charset)&lt;br /&gt;
* [[DMP3160]] printer ([[Amstrad]]/[[Schneider]]) (fast version of DMP3000)&lt;br /&gt;
* [[DMP3250]]di printer ([[Amstrad]]) (dual interface version of DMP3160) (centronics + RS232)&lt;br /&gt;
* [[DMP4000]] printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 9-pin 16&amp;quot; wide printer)&lt;br /&gt;
* [[LD6000]] laser printer ([[Amstrad GmbH]]) (re-badgered Sharp printer, for German market only)&lt;br /&gt;
* [[LQ3500]](di) printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 24-pin printer)&lt;br /&gt;
* [[LQ5000]]di printer ([[Amstrad]]) ([[Epson]]-compatible 24-pin 16&amp;quot; wide printer)&lt;br /&gt;
* [[Robotron 6313|EuroPrint FT80X, Robotron 6313, Präsident 6320]] (east German)&lt;br /&gt;
* [[NLQ401|Schneider NLQ401]] ([[Schneider]]) (custom 9-pin printer, German counterpart of the DMP1)&lt;br /&gt;
* [[Star Printers]] (Star Micronics Co., Ltd.)&lt;br /&gt;
&lt;br /&gt;
== Real Time Clocks ==&lt;br /&gt;
&lt;br /&gt;
* [[ACU Real Time Clock (DIY)|ACU Real Time Clock]] (DIY) (without year counter) ([[Amstrad Computer User|ACU]])&lt;br /&gt;
* [[Aleste 520EX]] (a CPC clone with built-in RTC) ([[Patisonic]])&lt;br /&gt;
* [[Real Time Clock|CPCI Real Time Clock]] (DIY) ([[CPC Schneider International Sonderheft]])&lt;br /&gt;
* [[Dk'tronics Real Time Clock]] ([[Dk'tronics]])&lt;br /&gt;
* [[Dobbertin Smart Watch]] (the RTC itself is inserted like a ROM) ([[Dobbertin]])&lt;br /&gt;
* [[Schneiderware Real Time Clock]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[SYMBiFACE_II:Realtime_clock|Realtime Clock]] of [[SYMBiFACE_II]] (modern RTC with bugged century counter)&lt;br /&gt;
&lt;br /&gt;
== Synthesizer, sampler and music related ==&lt;br /&gt;
&lt;br /&gt;
* [[Amdrum]] (Playback) ([[Cheetah]])&lt;br /&gt;
* [[Amstrad SSA-1 Speech Synthesizer]] (Speech) ([[Amstrad]])&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]] (Stereo Sampling/Playback) ([[Antitec]]/[[Dirty Minds]])&lt;br /&gt;
* [[Datel Digital Sound Sampler]]/[[Datel Electronics]]&lt;br /&gt;
* [[Digiblaster]] (Playback) (DIY) (8bit DAC on printer port) ([[CPC Amstrad International]])&lt;br /&gt;
* [[Digivox sampler]] (EMM)&lt;br /&gt;
* [[Dk'tronics Speech Synthesizer]] (Speech) ([[Dk'tronics]])&lt;br /&gt;
* [[DHCP MIDI Interface]] (DHCP Electronics)&lt;br /&gt;
* [[EMR MIDI Interface]] (MIDI) ([[EMR|ElectroMusic Research]])&lt;br /&gt;
* [[FuturePlayer]] (modern MP3 playback, max 128kbps) (Hard: Dr.Zed, Soft: TFM)&lt;br /&gt;
* [[Maestro]] (Amplifier/Speakers) (Vanguard Leisure Ltd.)&lt;br /&gt;
* [[Magic Sound Board]] for [[Aleste 520EX]] (four channel DMA playback) ([[Patisonic]])&lt;br /&gt;
* [[Mini Interface for connection to MK5 MIDI Keyboard]] ([[Cheetah]])&lt;br /&gt;
* [[Music Machine]] (Sampling/Playback/MIDI) ([[Ram Electronics]])&lt;br /&gt;
* [[MHT Speech Synthesizer]] (Speech) ([[MHT Ingenieros]])&lt;br /&gt;
* [[Silicon Systems MIDI Interface]] ([[Silicon Systems]]) (what is this?) (added 3 September 2006 by Torn) (also listed on [[Hwlist from retroisle]])&lt;br /&gt;
* [[Sound Blaster]] (Amplifier/Speakers) ([[Siren Software]]&lt;br /&gt;
* [[Soundplayer]] (many different versions exist) (Playback) ([[Futurs']])&lt;br /&gt;
* [[TechniMusique Synthetiseur Musical|TMPI musical synthesizer]] (12 voices) ([[TechniMusique]])&lt;br /&gt;
* [[TMPI speech synthesizer]] (Speech) ([[TechniMusique]])&lt;br /&gt;
* [[Unconventional use of hardware to produce sounds]]&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
* 64 Kb Printer Buffer (DIY) (what is this?) (added 19 August 2006 by CPCLER)&lt;br /&gt;
* [[Ambug|Ambug Robot]] (DIY) ([[Magenta Electronics Ltd.]])&lt;br /&gt;
* [[Amstore]] (network with 20MB harddisk) (Northern Computers)&lt;br /&gt;
* [[Amstrad Autofire Interface and Combined Mouse Interface|Amstrad Autofire Interface and Combined Mouse Interface]] (Unknown firm??)&lt;br /&gt;
* Amstrad Expansion System Part 2 ([[Maplin]]) - appeared in Project book 19 (for Part 1 see [[Maplin ROM Box]])&lt;br /&gt;
* [[Amstrad CT-1 Radio/Alarm-Clock]] ([[Amstrad]])&lt;br /&gt;
* [[CPCISA by Yarek|CPCISA]] ([[Yarek]])&lt;br /&gt;
* [[Data Media Printerinterface]] (printer splitter for connecting 2 or 3 software-selectable printers to the CPC) ([[Data Media]])&lt;br /&gt;
* [[DCP Interpacks]] (DCP Microdevelopments)&lt;br /&gt;
* [[Dust Covers]]&lt;br /&gt;
* [[Fischertechnik Interface]] for use with the [[Fischertechnik Trainingsrobot]], the [[Fischertechnik Plotter/Scanner]], and the [[Fischertechnik Computing Experimental]] kit.&lt;br /&gt;
* [[HDCPC]] (what is this?) (added 21 August 2006 by 85.218.166.50) (according to [[Dobbertin Harddisc|this page]], HDCPC is a modern IDE harddisk interace, but it's unknown who developed that thing?)&lt;br /&gt;
* [[Hexam]] ([[ACE Software]])&lt;br /&gt;
* [[Jagot &amp;amp; Leon Interface Cards]] ([[Jagot &amp;amp; Leon]])&lt;br /&gt;
* [[KDS Power Controller]] (a box with eight relays) ([[KDS Electronics]])&lt;br /&gt;
* [[Kersten PC Emulator]]&lt;br /&gt;
* [[Maplins 8bit Input Port]] ([[Maplin]]) (among others for use with Maplin's Weather Satellite Decoder)&lt;br /&gt;
* [[Maplin ROM Box|Maplins 6x8bit Input/Output Port]] ([[Maplin]]) (an extension to Maplin's &amp;quot;Rombox&amp;quot; project)&lt;br /&gt;
* [[Maplins Weather Satellite Receiver]] ([[Maplin]])&lt;br /&gt;
* [[Oktett]] (multimeter/oscilloscope) ([[Otten/Fecht]])&lt;br /&gt;
* [[Peripheral Soft Reset]] (System BIOS Feature for Peripherals)&lt;br /&gt;
* [[Schneiderware]] (a series of [[ECB Bus]] based DIY projects that were released in [[CPC Schneider International]] magazine)&lt;br /&gt;
* [[Split Extension Connector|Cheetah Marketing Split Extension Connector]] ([[Cheetah]])&lt;br /&gt;
* Teleterminal 300s (reportedly &amp;quot;simulates&amp;quot; rs232; connects to printer port; for use with acoustic coupler, see review in CPCI 8-1985, page 55-56)&lt;br /&gt;
* [[Slomo]] A device to reduce the execution speed of the Amstrad CPC (also available for other machines) by [[Nidd Valley Micro Products]], Ltd. (UK)&lt;br /&gt;
&lt;br /&gt;
Some further (unsorted) peripherals are found here: [[Hwlist from retroisle]]. More DIYs are listed on [[Happy Computer (Schneider Sonderheft)]] (those german magazine articles aren't yet scanned).&lt;br /&gt;
&lt;br /&gt;
[[Category:Peripherals| ]][[Category:Hardware|*]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=RS232&amp;diff=94939</id>
		<title>RS232</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=RS232&amp;diff=94939"/>
				<updated>2016-01-17T20:20:08Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Non-Standard Interfaces */ Add Albireo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In telecommunications, '''RS-232''' is a standard for serial binary data interconnection between a DTE (Data terminal equipment) and a DCE (Data communication equipment). It is commonly used in computer serial ports. RS is an abbreviation for &amp;quot;Recommended Standard&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== RS232 Peripherals for the CPC ==&lt;br /&gt;
&lt;br /&gt;
=== Standard Interfaces ===&lt;br /&gt;
&lt;br /&gt;
Interfaces using same chipset and I/O ports as Amstrad's official serial interface:&lt;br /&gt;
* [[Amstrad Serial Interface]] ([[Amstrad]])&lt;br /&gt;
* [[Panda Electronics Communications Interface Unit]] (dual RS232 plus 8bit printer port) (Panda Electronics Ltd)&lt;br /&gt;
* [[SCA CPC Prolink]] (single RS232 port) ([[SCA]])&lt;br /&gt;
* [[Spectre Comms Serial Interface]] with Cage Comms software ([[Spectre Communications]])&lt;br /&gt;
* [[Vortex Disc Drives]] (disc drive/interface with optional RS232 port) ([[Vortex Computersysteme]])&lt;br /&gt;
&lt;br /&gt;
=== Non-Standard Interfaces ===&lt;br /&gt;
&lt;br /&gt;
Interfaces that use other chipset or other I/O ports as than Amstrad's official interface - these interfaces aren't compatible with the standard Amstrad interface (nor are they compatible with each other):&lt;br /&gt;
* [[Albireo]] (serial port interface with USB device converter built-in, for link with another computer)&lt;br /&gt;
* [[Aleste 520EX]] (a CPC clone with built-in RS232, intended for serial mouse)&lt;br /&gt;
* [[AMSSIO]] (RS232 interface) (DIY)&lt;br /&gt;
* [[Cirkit serial interface]] ([[Cirkit]])&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]] (modern multifunction expansion, including RS232)&lt;br /&gt;
* [[CPCI RS232 Interface]] (DIY)&lt;br /&gt;
* [[KDS Electronics Serial Interface|KDS Serial Interface]] ([[KDS Electronics]])&lt;br /&gt;
* [[RS-232 para Amstrad]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[Schneider RS232 Interface]] ([[Schneider]])&lt;br /&gt;
* [[Schneiderware V/24 Interface]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Simple RS232 for Printer usage]] (DIY) (one-directional, transmit only)&lt;br /&gt;
* [[Z80-SIO dual ports RS232 interface for CPC (French)]] (DIY)&lt;br /&gt;
&lt;br /&gt;
=== Unidentified Interfaces ===&lt;br /&gt;
&lt;br /&gt;
Interfaces where I/O ports and/or chipset are unknown:&lt;br /&gt;
* Cirkit twin-port serial interface (resold by [[Microstyle]])&lt;br /&gt;
* [[Data Media Disc System]] (disc drive with built-in RS232 interface) ([[Data Media]])&lt;br /&gt;
* [[Dual RS232]] ([[Timatic Systems]])&lt;br /&gt;
* [[Unknown RS232 Interfaces]]&lt;br /&gt;
* http://cpcrulez.fr/hardware_dossier-communiquer_avec_son_AMSTRAD_CPC_CA.htm - lists some further serial interfaces&lt;br /&gt;
&lt;br /&gt;
== Web links ==&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/RS-232 RS232 information at Wikipedia]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]] [[Category:Peripherals|*]] [[Category:Serial interfaces| ]] [[Category:Network]] [[Category:Robotic]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Peripherals&amp;diff=94938</id>
		<title>Peripherals</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Peripherals&amp;diff=94938"/>
				<updated>2016-01-17T20:19:13Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Serial Interfaces */ Add Albireo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''You can also check the Category : Peripherals for a complete list of CPCwiki pages on the matter.'''&lt;br /&gt;
&lt;br /&gt;
* [[I/O Port Summary]]&lt;br /&gt;
&lt;br /&gt;
''Please try to keep things in alphabetical order.''&lt;br /&gt;
&lt;br /&gt;
== Built-in Peripherals ==&lt;br /&gt;
&lt;br /&gt;
=== Built-in Chipset ===&lt;br /&gt;
&lt;br /&gt;
* [[765 FDC]] - Floppy Disc Controller&lt;br /&gt;
* [[8255]] - PIO - I/O controller&lt;br /&gt;
* [[Arnold V Specs Revised]] - Arnold V (CPC+) Technical Specification&lt;br /&gt;
* [[AY-3-8912]] - Sound chip / keyboard controller&lt;br /&gt;
* [[CRTC]] - Video chip&lt;br /&gt;
* [[Gate Array]] - Custom chip (frequency generation, colors, bank switching)&lt;br /&gt;
* [[Power Supply for CPC and CPC plus]]&lt;br /&gt;
* [[Printer Port]]&lt;br /&gt;
&lt;br /&gt;
=== Built-in connectors: pinout ===&lt;br /&gt;
&lt;br /&gt;
* [[Connector:2nd disc drive (CPC664, CPC6128, CPC6128+)|2nd disc drive (CPC664, CPC6128, CPC6128+)]]&lt;br /&gt;
* [[Connector:Analogue joystick (CPC Plus only)|Analogue joystick (CPC Plus only)]]&lt;br /&gt;
* [[Connector:Aux socket (CPC Plus only)|Aux socket (CPC Plus only)]] (Lightgun)&lt;br /&gt;
* [[Connector:Cartridge Slot (CPC Plus only)|Cartridge Slot (CPC Plus only)]]&lt;br /&gt;
* [[Connector:Cassette recorder|Cassette recorder]]&lt;br /&gt;
* [[Connector:Digital joystick|Digital joystick]]&lt;br /&gt;
* [[Connector:Expansion port|Expansion port]]&lt;br /&gt;
* [[Connector:Monitor|Monitor]]&lt;br /&gt;
* [[Connector:Printer port|Printer port]]&lt;br /&gt;
* [[Connector:Stereo sound|Stereo sound]]&lt;br /&gt;
&lt;br /&gt;
=== Built-in Firmware ===&lt;br /&gt;
&lt;br /&gt;
* [[BIOS Functions]]&lt;br /&gt;
* [[Locomotive BASIC]] (reference for BASIC commands, functions and error messages)&lt;br /&gt;
* [[Technical information about Locomotive BASIC]] (encoding of BASIC programs in memory)&lt;br /&gt;
&lt;br /&gt;
== Data transfer ==&lt;br /&gt;
&lt;br /&gt;
=== Modems ===&lt;br /&gt;
&lt;br /&gt;
* [[Cirkit_Prestel_Link_Amstrad_Interface]] (acoustic coupler bundled with [[Cirkit serial interface]]) ([[Cirkit]])&lt;br /&gt;
* [[Commstar v21/23 modem]] ([[PACE]])&lt;br /&gt;
* [[Data Research CH301S modem]] (greek company)&lt;br /&gt;
* [[Digitelec DTL 2000/2100 Modem]]&lt;br /&gt;
* [[EPTA modem]] (sold by Greek mag ΕΠΤΑ)&lt;br /&gt;
* [[KDS Communicator 104]] (connects directly to expansion port) ([[KDS Electronics]])&lt;br /&gt;
* [[Loritel]] (for french Minitel) ([[Loriciel|Loriciels]])&lt;br /&gt;
* [[Mini-Max Modem|KDS Mini-Max Modem]] (connects via RS232 interface) ([[KDS Electronics]])&lt;br /&gt;
* [[MicroLink Dual-Speed Modem]] ([[MicroLink]]) [[File:Microlink.pdf|Mircolink Manual]] and [[File:Micronet.pdf|Micronet manual]], provided by ''Spookspring''&lt;br /&gt;
* [[MicroLink Multi-Speed Modem]] ([[MicroLink]])&lt;br /&gt;
* [[Nightingale_modem]] ([[PACE]])&lt;br /&gt;
* [[Schneider BTX Modul]] (for German Bildschirmtext) ([[Schneider]])&lt;br /&gt;
&lt;br /&gt;
=== Serial Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* ([[RS232|overview of RS232 interfaces]])&lt;br /&gt;
* [[Albireo]] (serial to USB on-board) ([[PulkoTronics]] / DIY)&lt;br /&gt;
* [[Aleste 520EX]] (a CPC clone with built-in RS232, intended for serial mouse) ([[Patisonic]])&lt;br /&gt;
* [[AMSSIO]] (four different versions) (RS232 interface) (DIY) (Martin Zacho)&lt;br /&gt;
* [[Amstrad Serial Interface]] ([[Amstrad]])&lt;br /&gt;
* [[Cirkit serial interface]] ([[Cirkit]])&lt;br /&gt;
* Cirkit twin-port serial interface (resold by [[Microstyle]])&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]] (modern multifunction expansion, including RS232)&lt;br /&gt;
* [[CPCI RS232 Interface]] (DIY) ([[CPC Schneider International Sonderheft]])&lt;br /&gt;
* [[Data Media Disc System]] (disc drive with built-in RS232 interface) ([[Data Media]])&lt;br /&gt;
* [[KDS Electronics Serial Interface|KDS Serial Interface]] ([[KDS Electronics]])&lt;br /&gt;
* [[Panda Electronics Communications Interface Unit]] (dual RS232 plus 8bit printer port) (Panda Electronics Ltd)&lt;br /&gt;
* [[RS-232 para Amstrad]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[SCA CPC Prolink]] ([[SCA Products]])&lt;br /&gt;
* [[Schneider RS232 Interface]] ([[Schneider]])&lt;br /&gt;
* [[Schneiderware V/24 Interface]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Simple RS232 for Printer usage]] (DIY) (one-directional, transmit only)&lt;br /&gt;
* [[Spectre Comms Serial Interface]] with Cage Comms software ([[Spectre Communications Ltd]])&lt;br /&gt;
* [[Vortex Disc Drives]] (disc drive/interface with optional RS232 port) ([[Vortex Computersysteme]])&lt;br /&gt;
* [[Z80-SIO dual ports RS232 interface for CPC (French)]] (DIY) (Philippe Lebel)&lt;br /&gt;
* [[Dual RS232]] ([[Timatic Systems]])&lt;br /&gt;
&lt;br /&gt;
=== Teletext ===&lt;br /&gt;
&lt;br /&gt;
* [[Teletext adaptor]] ([[Microtext Ltd.]])&lt;br /&gt;
* [[Volex TTX 2000a|Volex TTX 2000a Teletext-Telesoftware Adaptor]] (Volex Electronics)&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]]&lt;br /&gt;
* [[Virtual Net 96]] ([[Wizcat]])&lt;br /&gt;
* [[Red Box]] ([[General Information Systems]])&lt;br /&gt;
* [[CPC-ENet|CPC Ethernet Card]] ([[rpalmer]])&lt;br /&gt;
&lt;br /&gt;
== Digitizer / Scanner ==&lt;br /&gt;
&lt;br /&gt;
* [[ARA Video Digitizer]] ([[Jagot &amp;amp; Leon]])&lt;br /&gt;
* [[Electric Studio C6]] ([[Electric Studio]])&lt;br /&gt;
* [[Dart Scanner for DMP-Printers]] (the optics are attached to the printer head) ([[Dart Electronics]])&lt;br /&gt;
* [[Omni-Reader]] (Oberon International) (scanner with text recognition) (advert on ACU 1-1987, page 83)&lt;br /&gt;
* [[VIDI digitizer]] ([[Rombo Productions]])&lt;br /&gt;
&lt;br /&gt;
== Drives ==&lt;br /&gt;
&lt;br /&gt;
=== Disc Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[3½&amp;quot; &amp;amp; 5¼&amp;quot; Disk Drives]]&lt;br /&gt;
* [[Amstrad Disk Drive|Amstrad DDI-1 / FD-1 Disk Drive]] ([[Amstrad]])&lt;br /&gt;
* [[Cumana 3&amp;quot; Disk Drive]] ([[Cumana]])&lt;br /&gt;
* [[Data Media Disc System]] ([[Data Media]])&lt;br /&gt;
* [[Jasmin AM5D 5 &amp;quot;1/4 floppy drive]]&lt;br /&gt;
* [[KDS 5¼&amp;quot; Disc Drive]] ([[KDS Electronics]])&lt;br /&gt;
* [[TIMDISC 5¼&amp;quot; 2nd Disc Drive]] ([[Timatic Systems]])&lt;br /&gt;
* [[F1|Vortex Disc Drives]] ([[Vortex Computersysteme|Vortex]])&lt;br /&gt;
* [[Four floppy drives with Amstrad disc interface]]&lt;br /&gt;
&lt;br /&gt;
=== Exotic Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[Codemasters CD]] (loads games from Audio CD via joystick port) ([[Codemasters]])&lt;br /&gt;
* [[Draysoft Doubler]] (external tape input, for tape-to-tape transfers) ([[Evesham Micros]])&lt;br /&gt;
&lt;br /&gt;
=== Hard Disc Drives ===&lt;br /&gt;
&lt;br /&gt;
* [[CPC-IDE]] (modern) (discontinued prototype)&lt;br /&gt;
* [[Dobbertin Harddisc]] ([[Dobbertin]])&lt;br /&gt;
* [[IDE8255]] internal/extrernal IDE/CF interface ([[Yarek]])&lt;br /&gt;
* [[SYMBiFACE II]] (modern) (IDE and various other features)&lt;br /&gt;
* [[Vortex Winchester Drive]] ([[Vortex Computersysteme|Vortex]])&lt;br /&gt;
* [[IDE/8255]] external IDE Interface ([[rpalmer]])&lt;br /&gt;
&lt;br /&gt;
=== Drive Emulators ===&lt;br /&gt;
&lt;br /&gt;
* [[HxC Floppy Emulator]]&lt;br /&gt;
* [[SDiskEmul]]&lt;br /&gt;
* [[TFE Floppy Emulator]]&lt;br /&gt;
* [[VDrive]]&lt;br /&gt;
&lt;br /&gt;
== Hardware debuggers/Hacking devices ==&lt;br /&gt;
&lt;br /&gt;
* [[Action Replay]] (whatever snapshot) ([[Datel Electronics]])&lt;br /&gt;
* [[Disc Wizard]] (whatever snapshot) ([[Evesham Micros]])&lt;br /&gt;
* [[Hackit|Hackit / Le Hacker]] (allows to view RAM at 0040h..AF00h) ([[Siren Software]])&lt;br /&gt;
* [[Mirage Imager]] (RAM-only snapshot) (Mirage Microcomputer Limited)&lt;br /&gt;
* [[Multiface II]] (RAM-and-I/O snapshot) ([[Romantic Robot]])&lt;br /&gt;
* [[PDS development system]] (old devkit been used for commercial games) (PD Systems/Andy Glaister)&lt;br /&gt;
* [[RAM7 Cartridge Hacker]] (for CPC+/GX4000 cartridges) ([[RAM7]])&lt;br /&gt;
* [[Transtape]] (whatever snapshot) (Hard Micro)&lt;br /&gt;
&lt;br /&gt;
== Input devices ==&lt;br /&gt;
&lt;br /&gt;
=== Joysticks ===&lt;br /&gt;
&lt;br /&gt;
* [[Analog Joysticks]] (CPC Plus only)&lt;br /&gt;
* [[Digital Joysticks]]&lt;br /&gt;
* [[Amstrad JY-1/JY-2 joysticks]]&lt;br /&gt;
* [[Joystick Y-cables]]&lt;br /&gt;
&lt;br /&gt;
=== Light-Guns ===&lt;br /&gt;
&lt;br /&gt;
* [[Gunstick]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[Amstrad Magnum Phaser|Magnum Light Phaser]] ([[Amstrad]] and [[Trojan]])&lt;br /&gt;
* [[Trojan Light Phazer]] ([[Trojan]]) (CPC+)&lt;br /&gt;
* [[Loriciel Phaser (West Phaser)|West Phaser]] ([[Loriciel]])&lt;br /&gt;
&lt;br /&gt;
=== Light-Pens ===&lt;br /&gt;
&lt;br /&gt;
* [[Amstrad LP-1 light pen]] (Amstrad/Amsoft/Trojan) aka Trojan CAD-Master Lightpen (Trojan)&lt;br /&gt;
* [[ASS Light-Pen]] ([[ASS]])&lt;br /&gt;
* [[Dart Light Pen]] ([[Dart Electronics]])&lt;br /&gt;
* [[Datapen]] ([[Datapen Microtechnology Ltd]])&lt;br /&gt;
* [[dk'tronics Lightpen|Dk'tronics Light Pen]] ([[Dk'tronics]])&lt;br /&gt;
* [[Happy Computer Light Pen]] (DIY from german magazine)&lt;br /&gt;
* [[Light Pen Professional / Mark II (Electric Studio)|Light Pen Professional / Mark II]] ([[Electric Studio]])&lt;br /&gt;
* [[Lindy Light Pen]] ([[Lindy]])&lt;br /&gt;
&lt;br /&gt;
=== Mouse ===&lt;br /&gt;
&lt;br /&gt;
* [[AMX Mouse]] (Advanced Memory Systems)&lt;br /&gt;
* [[PS2Mouse|AMX Compatible PS/2 and USB Mouse Adapter]] (DIY)&lt;br /&gt;
* [[Atari-ST mouse adapter]] (DIY) ([[Schneider Magazin]])&lt;br /&gt;
* [[dk'tronics Mouse Interface|Dk'tronics Mouse Interface]] ([[Dk'tronics]])&lt;br /&gt;
* [[CPC-Mousepack 2.0]] (Gerdes/Centaur/Reis-ware/ASS)&lt;br /&gt;
* [[Electric Studio Mouse]] ([[Electric Studio]])&lt;br /&gt;
* [[GEOS mouse|GEOS mouse]] ([[Commodore 64|C64]])&lt;br /&gt;
* [[Genius mouse]] ([[Datel Electronics]])&lt;br /&gt;
* [[Kempston Mouse]] (Kempston)&lt;br /&gt;
* [[Marconi|Marconi trackball]]&lt;br /&gt;
* [[Serial RS232 Mouse]]&lt;br /&gt;
* [[SYMBiFACE II:PS/2 mouse|PS/2 mouse]] of [[SYMBiFACE II]]&lt;br /&gt;
* [[Wireless mouse (DIY)]] (what is this?) (added 19 August 2006 by CPCLER)&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
* [[CPCKey|Attaching an AT keyboard to the CPC]]&lt;br /&gt;
* [[Grafpad II]] (Hegotron/British Micro/Grafsales)&lt;br /&gt;
* [[Graphiscop II]] (M.M.C.)&lt;br /&gt;
* [[Keyboard Membrane Repair/Replacement Guide|Keyboard Repair/Replacement]]&lt;br /&gt;
&lt;br /&gt;
== Memory expansions / ROM boxes ==&lt;br /&gt;
&lt;br /&gt;
=== Memory Expansions / RAM discs ===&lt;br /&gt;
&lt;br /&gt;
* ([[Standard Memory Expansions]])&lt;br /&gt;
* [[ANTA 64K Memory Expansion]] ([[MHT Ingenieros]])&lt;br /&gt;
* [[CPC4MB| CPC4MB - 4 MB memory expansion]] ([[Yarek]])&lt;br /&gt;
* [[c't 512 KB internal RAM expansion]] (DIY) (c't magazine)&lt;br /&gt;
* [[Data Media Memory Expansion]] ([[Data Media]])&lt;br /&gt;
* [[Dk'tronics memory expansion‎|Dk'tronics Memory Expansion and Silicon Disc]] ([[Dk'tronics]])&lt;br /&gt;
* [[Dobbertin Memory Expansion]] ([[Dobbertin]]) - 64 KB to 512 KB RAM&lt;br /&gt;
* [[Inicron RAM-Box]] (Inicron) - 512 KB RAM&lt;br /&gt;
* [[Otten &amp;amp; Fecht 1 MB RAM-Disc]] ([[Otten/Fecht]])&lt;br /&gt;
* [[Phoenix M64]] - 64 KB RAM&lt;br /&gt;
* [[RAM BOX]] 512 KB memory expansion&lt;br /&gt;
* [[RAM7 2MB memory expansion]] ([[RAM7]]) - 2 MB RAM&lt;br /&gt;
* [[SYMBiFACE II]] - 512 KB RAM&lt;br /&gt;
* [[Vortex Expansions RAM card]] ([[Vortex Computersysteme|Vortex]]) - 512 KB RAM&lt;br /&gt;
&lt;br /&gt;
=== ROM Box / ROM Board ===&lt;br /&gt;
&lt;br /&gt;
* [[ACU Romboard (DIY)|ACU Romboard]] (DIY) ([[Phil Craven]]/[[Amstrad Computer User|ACU]])&lt;br /&gt;
* [[ACU Romchanger]] (DIY) ([[Phil Craven]]/[[Amstrad Computer User|ACU]]) - a CPC6128 ROM (BIOS v3, BASIC v1.1) upgrade for the CPC464&lt;br /&gt;
* [[AD1 ROM Cartridge]] ([[Arnor]])&lt;br /&gt;
* [[AMRAM]] ([[Silicon Systems]])&lt;br /&gt;
* [[AMRAM2]] ([[Silicon Systems]])&lt;br /&gt;
* [[Amstrad ROM Expander]] (DIY) (Practical Electronics/Simon Dean)&lt;br /&gt;
* [[Britannia ROM Board]] aka ROM Plus ([[Britannia Software Ltd]])&lt;br /&gt;
* [[Cirkit HX-RX1 Rom Expansion Card]] ([[Cirkit]]) (what is this?) (added  3 September 2006 by Torn) (also listed on [[Hwlist from retroisle]])&lt;br /&gt;
* [[CPC.Flash]] internal/external 4MB ROM upgrade ([[Yarek]])&lt;br /&gt;
* [[CPC GX4000-Multi EPROM Cartridge]] Use a GX cartridge for modified ROM software&lt;br /&gt;
* [[Dobbertin EPROM 224]] ([[Dobbertin]])&lt;br /&gt;
* [[Fleet EPROM Programmer|Fleet EPROM Programmer]] (F.Kup and Fleet Microsystems Ltd.)&lt;br /&gt;
* [[FO-DOS|FO-DOS Cartridge]] - a CPC6128 ROM (BIOS v3, BASIC v1.1) upgrade for the CPC464 ([[Duchet Computers]])&lt;br /&gt;
* [[Hexam]] ([[Ace Software]])&lt;br /&gt;
* [[Honeysoft ROM Board]] ([[HoneySoft]])&lt;br /&gt;
* [[Inicron ROM-RAM-Box]] (Inicron)&lt;br /&gt;
* [[KDS Sideways ROM Board]] ([[KDS Electronics]])&lt;br /&gt;
* [[Maplin ROM Box]] ([[Maplin]])&lt;br /&gt;
* [[MegaFlash]] (DIY - Bryce) 512 KB ROM simulator using Flash, in-system programmable&lt;br /&gt;
* [[MegaROM]] (DIY - Bryce) 128K / 256K ROMBoard&lt;br /&gt;
* [[Microgenic ROM Board]] ([[Microgenic Systems]])&lt;br /&gt;
* [[Microgenic EPROM Programmer]] ([[Microgenic Systems]])&lt;br /&gt;
* [[Microstyle RAMROM]] ([[Microstyle]])&lt;br /&gt;
* [[Microstyle ROM Board Xtra]] ([[Microstyle]])&lt;br /&gt;
* [[POKROM]] (DIY) (Electronique Radio Plans, issue 517)&lt;br /&gt;
* [[Ramcard 128]] (a ROM emulator) ([[RAM7]])&lt;br /&gt;
* [[Rombo Rombox]] ([[Rombo Productions]])&lt;br /&gt;
* [[Schneiderware EPROM Burner]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Schneiderware Pseudo ROM]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[Sideways ram]] (Paul Townsend)&lt;br /&gt;
* [[SuperPower ROM Box]] ([[Micro Power Ltd.]])&lt;br /&gt;
* [[Universeller EPROM Programmer 4004]] ([[Dobbertin]])&lt;br /&gt;
* [[X-ROM]] Eprom programmer and ROM Board ([[Timatic Systems]])&lt;br /&gt;
&lt;br /&gt;
== Monitors ==&lt;br /&gt;
* Computers [[monitor_compatible|compatible]] with Amstrad Monitors&lt;br /&gt;
* [[CM14|Amstrad CM14]] Colour Monitor (for CPC Plus)&lt;br /&gt;
* [[CTM640/CTM644|Amstrad CTM640/CTM644]] Color Monitor (for CPC 464/664/6128)&lt;br /&gt;
* [[GT64/GT65|Amstrad GT64/GT65]] Green Monitor (for CPC 464/664/6128)&lt;br /&gt;
* [[MM12|Amstrad MM12]] Monochrome Monitor (for CPC Plus)&lt;br /&gt;
* [[Amstrad MP1/MP2 modulator]]&lt;br /&gt;
* [[Amstrad MPV 001 modulator]] (Spanish MP1)&lt;br /&gt;
* [[MP2F|Amstrad MP-2F Scart Adapter]] (French MP2)&lt;br /&gt;
* [[MP-3|Amstrad MP-3 TV Tuner for CTM 644]]&lt;br /&gt;
* [[MPS Modulator]] Modulator made in Greece from MPS&lt;br /&gt;
* [[Dk'tronics TV Tuner]] ([[Dk'tronics]]) (similar to MP-3)&lt;br /&gt;
* [[Screenvision TV Tuner]] (Screens Microcomputers &amp;amp; Electronics Ltd.) (similar to MP-3)&lt;br /&gt;
* CPCI HF-modulator (CPC Schneider International 11/1986, Page 78ff. Someone please scan it, my issue lacks those pages!)&lt;br /&gt;
* [[TV SCART cable]] (DIY)&lt;br /&gt;
* [[LCD And Plasma TV Solution]] (DIY)&lt;br /&gt;
* [[Videomaster]] Modulator made in 1993 by Campursoft&lt;br /&gt;
&lt;br /&gt;
== Multi function expansions ==&lt;br /&gt;
&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]]&lt;br /&gt;
* [[CPCISA by Yarek]] ([[Yarek]])&lt;br /&gt;
* [[CPCMax!]]&lt;br /&gt;
* [[CPCX]]&lt;br /&gt;
* [[Full Expandable Interface]] ([[Timatic Systems]])&lt;br /&gt;
* [[PlayCity]]&lt;br /&gt;
* [[SYMBiFACE II]]&lt;br /&gt;
&lt;br /&gt;
== Printers ==&lt;br /&gt;
&lt;br /&gt;
* ([[8bit Printer Ports]])&lt;br /&gt;
* ([[Amstrad Printers]])&lt;br /&gt;
* [[DMP1]] printer ([[Amstrad]]) ([[Seikosha]] Unihammer printer)&lt;br /&gt;
* [[DMP2000]] printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 9-pin printer)&lt;br /&gt;
* [[DMP2160]] printer ([[Amstrad]]/[[Schneider]]) (fast version of DMP2000)&lt;br /&gt;
* [[DMP3000]] printer ([[Amstrad]]/[[Schneider]]) (gray PC-version of DMP2000 with more ROM/RAM and IBM charset)&lt;br /&gt;
* [[DMP3160]] printer ([[Amstrad]]/[[Schneider]]) (fast version of DMP3000)&lt;br /&gt;
* [[DMP3250]]di printer ([[Amstrad]]) (dual interface version of DMP3160) (centronics + RS232)&lt;br /&gt;
* [[DMP4000]] printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 9-pin 16&amp;quot; wide printer)&lt;br /&gt;
* [[LD6000]] laser printer ([[Amstrad GmbH]]) (re-badgered Sharp printer, for German market only)&lt;br /&gt;
* [[LQ3500]](di) printer ([[Amstrad]]/[[Schneider]]) ([[Epson]]-compatible 24-pin printer)&lt;br /&gt;
* [[LQ5000]]di printer ([[Amstrad]]) ([[Epson]]-compatible 24-pin 16&amp;quot; wide printer)&lt;br /&gt;
* [[Robotron 6313|EuroPrint FT80X, Robotron 6313, Präsident 6320]] (east German)&lt;br /&gt;
* [[NLQ401|Schneider NLQ401]] ([[Schneider]]) (custom 9-pin printer, German counterpart of the DMP1)&lt;br /&gt;
* [[Star Printers]] (Star Micronics Co., Ltd.)&lt;br /&gt;
&lt;br /&gt;
== Real Time Clocks ==&lt;br /&gt;
&lt;br /&gt;
* [[ACU Real Time Clock (DIY)|ACU Real Time Clock]] (DIY) (without year counter) ([[Amstrad Computer User|ACU]])&lt;br /&gt;
* [[Aleste 520EX]] (a CPC clone with built-in RTC) ([[Patisonic]])&lt;br /&gt;
* [[Real Time Clock|CPCI Real Time Clock]] (DIY) ([[CPC Schneider International Sonderheft]])&lt;br /&gt;
* [[Dk'tronics Real Time Clock]] ([[Dk'tronics]])&lt;br /&gt;
* [[Dobbertin Smart Watch]] (the RTC itself is inserted like a ROM) ([[Dobbertin]])&lt;br /&gt;
* [[Schneiderware Real Time Clock]] (DIY) ([[CPC Schneider International]])&lt;br /&gt;
* [[SYMBiFACE_II:Realtime_clock|Realtime Clock]] of [[SYMBiFACE_II]] (modern RTC with bugged century counter)&lt;br /&gt;
&lt;br /&gt;
== Synthesizer, sampler and music related ==&lt;br /&gt;
&lt;br /&gt;
* [[Amdrum]] (Playback) ([[Cheetah]])&lt;br /&gt;
* [[Amstrad SSA-1 Speech Synthesizer]] (Speech) ([[Amstrad]])&lt;br /&gt;
* [[CPC Booster|CPC Booster/CPC Booster+]] (Stereo Sampling/Playback) ([[Antitec]]/[[Dirty Minds]])&lt;br /&gt;
* [[Datel Digital Sound Sampler]]/[[Datel Electronics]]&lt;br /&gt;
* [[Digiblaster]] (Playback) (DIY) (8bit DAC on printer port) ([[CPC Amstrad International]])&lt;br /&gt;
* [[Digivox sampler]] (EMM)&lt;br /&gt;
* [[Dk'tronics Speech Synthesizer]] (Speech) ([[Dk'tronics]])&lt;br /&gt;
* [[DHCP MIDI Interface]] (DHCP Electronics)&lt;br /&gt;
* [[EMR MIDI Interface]] (MIDI) ([[EMR|ElectroMusic Research]])&lt;br /&gt;
* [[FuturePlayer]] (modern MP3 playback, max 128kbps) (Hard: Dr.Zed, Soft: TFM)&lt;br /&gt;
* [[Maestro]] (Amplifier/Speakers) (Vanguard Leisure Ltd.)&lt;br /&gt;
* [[Magic Sound Board]] for [[Aleste 520EX]] (four channel DMA playback) ([[Patisonic]])&lt;br /&gt;
* [[Mini Interface for connection to MK5 MIDI Keyboard]] ([[Cheetah]])&lt;br /&gt;
* [[Music Machine]] (Sampling/Playback/MIDI) ([[Ram Electronics]])&lt;br /&gt;
* [[MHT Speech Synthesizer]] (Speech) ([[MHT Ingenieros]])&lt;br /&gt;
* [[Silicon Systems MIDI Interface]] ([[Silicon Systems]]) (what is this?) (added 3 September 2006 by Torn) (also listed on [[Hwlist from retroisle]])&lt;br /&gt;
* [[Sound Blaster]] (Amplifier/Speakers) ([[Siren Software]]&lt;br /&gt;
* [[Soundplayer]] (many different versions exist) (Playback) ([[Futurs']])&lt;br /&gt;
* [[TechniMusique Synthetiseur Musical|TMPI musical synthesizer]] (12 voices) ([[TechniMusique]])&lt;br /&gt;
* [[TMPI speech synthesizer]] (Speech) ([[TechniMusique]])&lt;br /&gt;
* [[Unconventional use of hardware to produce sounds]]&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
* 64 Kb Printer Buffer (DIY) (what is this?) (added 19 August 2006 by CPCLER)&lt;br /&gt;
* [[Ambug|Ambug Robot]] (DIY) ([[Magenta Electronics Ltd.]])&lt;br /&gt;
* [[Amstore]] (network with 20MB harddisk) (Northern Computers)&lt;br /&gt;
* [[Amstrad Autofire Interface and Combined Mouse Interface|Amstrad Autofire Interface and Combined Mouse Interface]] (Unknown firm??)&lt;br /&gt;
* Amstrad Expansion System Part 2 ([[Maplin]]) - appeared in Project book 19 (for Part 1 see [[Maplin ROM Box]])&lt;br /&gt;
* [[Amstrad CT-1 Radio/Alarm-Clock]] ([[Amstrad]])&lt;br /&gt;
* [[CPCISA by Yarek|CPCISA]] ([[Yarek]])&lt;br /&gt;
* [[Data Media Printerinterface]] (printer splitter for connecting 2 or 3 software-selectable printers to the CPC) ([[Data Media]])&lt;br /&gt;
* [[DCP Interpacks]] (DCP Microdevelopments)&lt;br /&gt;
* [[Dust Covers]]&lt;br /&gt;
* [[Fischertechnik Interface]] for use with the [[Fischertechnik Trainingsrobot]], the [[Fischertechnik Plotter/Scanner]], and the [[Fischertechnik Computing Experimental]] kit.&lt;br /&gt;
* [[HDCPC]] (what is this?) (added 21 August 2006 by 85.218.166.50) (according to [[Dobbertin Harddisc|this page]], HDCPC is a modern IDE harddisk interace, but it's unknown who developed that thing?)&lt;br /&gt;
* [[Hexam]] ([[ACE Software]])&lt;br /&gt;
* [[Jagot &amp;amp; Leon Interface Cards]] ([[Jagot &amp;amp; Leon]])&lt;br /&gt;
* [[KDS Power Controller]] (a box with eight relays) ([[KDS Electronics]])&lt;br /&gt;
* [[Kersten PC Emulator]]&lt;br /&gt;
* [[Maplins 8bit Input Port]] ([[Maplin]]) (among others for use with Maplin's Weather Satellite Decoder)&lt;br /&gt;
* [[Maplin ROM Box|Maplins 6x8bit Input/Output Port]] ([[Maplin]]) (an extension to Maplin's &amp;quot;Rombox&amp;quot; project)&lt;br /&gt;
* [[Maplins Weather Satellite Receiver]] ([[Maplin]])&lt;br /&gt;
* [[Oktett]] (multimeter/oscilloscope) ([[Otten/Fecht]])&lt;br /&gt;
* [[Peripheral Soft Reset]] (System BIOS Feature for Peripherals)&lt;br /&gt;
* [[Schneiderware]] (a series of [[ECB Bus]] based DIY projects that were released in [[CPC Schneider International]] magazine)&lt;br /&gt;
* [[Split Extension Connector|Cheetah Marketing Split Extension Connector]] ([[Cheetah]])&lt;br /&gt;
* Teleterminal 300s (reportedly &amp;quot;simulates&amp;quot; rs232; connects to printer port; for use with acoustic coupler, see review in CPCI 8-1985, page 55-56)&lt;br /&gt;
* [[Slomo]] A device to reduce the execution speed of the Amstrad CPC (also available for other machines) by [[Nidd Valley Micro Products]], Ltd. (UK)&lt;br /&gt;
&lt;br /&gt;
Some further (unsorted) peripherals are found here: [[Hwlist from retroisle]]. More DIYs are listed on [[Happy Computer (Schneider Sonderheft)]] (those german magazine articles aren't yet scanned).&lt;br /&gt;
&lt;br /&gt;
[[Category:Peripherals| ]][[Category:Hardware|*]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=94937</id>
		<title>Albireo</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=94937"/>
				<updated>2016-01-17T20:17:57Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This interface is based on the CH376 chip and allows access to USB mass storage and other USB devices on CPC.&lt;br /&gt;
The CH376 chip implements FAT32 in hardware, which means no filesystem driver is needed on the CPC side. It also implements the lower level aspects of USB, making it relatively easy to write drivers for other USB devices (mouse, joystick, ...).&lt;br /&gt;
&lt;br /&gt;
Albireo also includes a high-speed serial port, allowing speeds past the megabit per second mark.&lt;br /&gt;
&lt;br /&gt;
[http://pulko.mandy.pagesperso-orange.fr/shinra/albireo.shtml Albireo interface homepage]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=I/O_Port_Summary&amp;diff=94936</id>
		<title>I/O Port Summary</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=I/O_Port_Summary&amp;diff=94936"/>
				<updated>2016-01-17T20:15:47Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: Update IOs for Albireo to add TL16c550 registers.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
== I/O Port Summary ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''I/O'''||'''Decoded as'''||'''Port'''||'''Read'''||'''Write''' &lt;br /&gt;
|-&lt;br /&gt;
|#1C00||%x0xxxx00 xxxxxxxx||[[Dk'tronics Lightpen]] faulty mirror of #BCXX [[CRTC]] Index|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#1F00||%x0xxxx11 xxxxxxxx||[[Dk'tronics Lightpen]] faulty mirror of #BFXX [[CRTC]] Data In|| Read || -&lt;br /&gt;
|-&lt;br /&gt;
|#78XX||?||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#79XX||?||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7AXX||?||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7BXX||?||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7CXX||?||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7CXX||%0xxxxx00 xxxxxxxx||[[Aleste 520EX]] RAM Mapper page 0 (extended &amp;quot;Gate Array 3&amp;quot;)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7DXX||?||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7DXX||%0xxxxx01 xxxxxxxx||[[Aleste 520EX]] RAM Mapper page 1 (extended &amp;quot;Gate Array 3&amp;quot;)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7EXX||?||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7EXX||%0xxxxx10 xxxxxxxx||[[Aleste 520EX]] RAM Mapper page 2 (extended &amp;quot;Gate Array 3&amp;quot;)||Read||Write&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|#7EXX||%0xxxxxx0 xxxxxxxx||[[Y-MEM]] 512K RAM Expansion part||Read||Write&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||?||[[CPC4MB|4Mb Memory extension]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||%0xxxxx11 xxxxxxxx||[[Aleste 520EX]] RAM Mapper page 3 (extended &amp;quot;Gate Array 3&amp;quot;)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|#7FXX||%0xxxxxx1 xxxxxxxx||[[X-MEM]] 512K RAM Expansion part||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||?||[[Dk'tronics memory expansion]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||?||[[Dobbertin Memory Expansion]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||%01xxxxxx xxxxxxxx||[[Gate Array]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#7FXX||%0xxxxxxx xxxxxxxx||[[PAL16L8]] extension to [[Gate Array]] for 128K RAM banking||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#BCXX||%x0xxxx00 xxxxxxxx||6845 [[CRTC]] Index|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#BDXX||%x0xxxx01 xxxxxxxx||6845 [[CRTC]] Data Out|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#BEXX||%x0xxxx10 xxxxxxxx||6845 [[CRTC]] Status (as far as supported)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#BFXX||%x0xxxx11 xxxxxxxx||6845 [[CRTC]] Data In (as far as supported)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#DFXX||%xx0xxxxx xxxxxxxx||[[Upper ROM Bank Number]] (as decoded within CPC664, CPC6128, 464+, 6128+, decoding in ROM expansions may be different)|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#ECXX||%xxx0xx00 xxxxxxxx||[[KC Compact]] CIO Port B (timer)|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EDXX||%xxx0xx01 xxxxxxxx||[[KC Compact]] CIO Port C (timer)|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EEXX||%xxx0xx10 xxxxxxxx||[[KC Compact]] CIO Control|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EEXX||%xxx0xxx0 xxxxxxxx||[[Aleste 520EX]] USART 8251 (RS232/Mouse) Data|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EFXX||%xxx0xx11 xxxxxxxx||[[KC Compact]] CIO Port A (Bi-drectional [[Printer Port]])|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EFXX||%xxx0xxx1 xxxxxxxx||[[Aleste 520EX]] USART 8251 (RS232/Mouse) Control/Status|| Read ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#EFXX||%xxx0xxxx xxxxxxxx||[[Printer Port]]|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F0E0||?||[[Draysoft Doubler]] External Tape Data Input (Bit5)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F4XX||%xxxx0x00 xxxxxxxx||[[8255]] PIO Port A ([[PSG]] Data)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F5XX||%xxxx0x01 xxxxxxxx||[[8255]] PIO Port B (Vsync,[[Printer Port|PrnBusy]],Tape,etc.)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F6XX||%xxxx0x10 xxxxxxxx||[[8255]] PIO Port C (KeybRow,Tape,[[PSG]] Control)|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F7XX||%xxxx0x11 xxxxxxxx||[[8255]] PIO Control-Register|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F880-#F88F||%1111 1000 1000 BBCC||[[PlayCity]] Expansion (CTC #F880-F883 Channels and YMZ Right #F884, YMZ Left #F888 Data)|| - || Write &lt;br /&gt;
|-&lt;br /&gt;
|#F890-#F8AF||%1111 1000 10xx xxxx||[[ACME]] WIP Expansion|| ? || ? &lt;br /&gt;
|-&lt;br /&gt;
|#F8B0||?||[[VIDI digitizer|Vidi-CPC Video-Digitiser]], CRTC Index||?||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8B1||?||[[VIDI digitizer|Vidi-CPC Video-Digitiser]], CRTC Data||?||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8DC||?||[[CPCI RS232 Interface|CPCI Serial Interface]] MC6850 Control/Status||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8DD||?||[[CPCI RS232 Interface|CPCI Serial Interface]] MC6850 Data||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E0||?||[[DHCP MIDI Interface]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E0||%11111000 11100000||[[Schneider RS232 Interface]] Z80-STI Indirect Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E1||%11111000 11100001||[[Schneider RS232 Interface]] Z80-STI General Purpose I/O Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E2||%11111000 11100010||[[Schneider RS232 Interface]] Z80-STI Interrupt Pending Register B (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E2||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E3||%11111000 11100011||[[Schneider RS232 Interface]] Z80-STI Interrupt Pending Register A (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E3||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E4||%11111000 11100100||[[Schneider RS232 Interface]] Z80-STI Interrupt in-Service Register B (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E4||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E5||%11111000 11100101||[[Schneider RS232 Interface]] Z80-STI Interrupt in-Service Register A (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E6||%11111000 11100110||[[Schneider RS232 Interface]] Z80-STI Interrupt Mask Register B (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E6||?||Port A - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E7||%11111000 11100111||[[Schneider RS232 Interface]] Z80-STI Interrupt Mask Register A (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E7||?||Port C - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F8E8||%11111000 11101000||[[Schneider RS232 Interface]] Z80-STI Indirect Index and Interrupt Vector Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E8||?||[[Music Machine]] Interrupt Sel|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8E9||%11111000 11101001||[[Schneider RS232 Interface]] Z80-STI Timers A and B Control Register (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EA||%11111000 11101010||[[Schneider RS232 Interface]] Z80-STI Timer B Data Register (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EB||%11111000 11101011||[[Schneider RS232 Interface]] Z80-STI Timer A Data Register (unused)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EC||%11111000 11101100||[[Schneider RS232 Interface]] Z80-STI USART Control Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EC||?||[[Music Machine]] ACIA Control|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8ED||?||[[Music Machine]] ACIA Data Write|| - || Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8ED||%11111000 11101101||[[Schneider RS232 Interface]] Z80-STI Receiver Status Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EE||?||[[Music Machine]] ACIA Status||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F8EE||%11111000 11101110||[[Schneider RS232 Interface]] Z80-STI Transmitter Status Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EF||%11111000 11101111||[[Schneider RS232 Interface]] Z80-STI USART Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8EF||?||[[Music Machine]] ACIA Data Read||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F8FX||%xxxxx0xx 1111NNNx||[[Maplins 8bit Input Port]] and [[Maplins Weather Satellite Receiver]]||Read|| -&lt;br /&gt;
|-&lt;br /&gt;
|#F8F0||?||[[Music Machine]] DAC Write|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8F2||?||[[EMR MIDI Interface]]|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8F2||?||[[Universeller EPROM Programmer 4004|Dobbertin Eprommer 4003]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|#F8F2||?||[[EMR MIDI Interface]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8F4||?||[[Music Machine]] ADC Read||Read|| - &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|#F8F5||?||[[ARA Video Digitizer]] - Read Sync Signal (bit0)||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#F8F8||?||[[Music Machine]] ADC Start|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8F8||?||[[ANTA 64K Memory Expansion]] ANTA 64k.3 latch||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8FF||%1111100x 111xxxxx||[[CPCISA by Yarek|CPCISA control port]]|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F8FF||N/A||[[Peripheral Soft Reset]] (MC_BOOT_PROGRAM and MC_START_PROGRAM do OUT [F8FF],FF)|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F980-#F98F||%1111 1001 1000 BBCC||[[PlayCity]] Expansion (CTC #F980-F983 Channels and YMZ Right #F984, YMZ Left #F988 Registers)|| - || Write&lt;br /&gt;
|-&lt;br /&gt;
|#F990-#F9AF||%1111 1001 10xx xxxx||[[ACME]] WIP Expansion|| ? || ?&lt;br /&gt;
|-&lt;br /&gt;
|#F9B0||?||[[VIDI digitizer|Vidi-CPC Video-Digitiser]], Config (W) and Capture Data (R)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9D0||%11111000 11010000||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] SwinSID1 + SwinSID2 DATA (MONO Mode / 3 Channels)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9D1||%11111000 11010001||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] SwinSID1 (LEFT) DATA (STEREO Mode / 6 Channels)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9D2||%11111000 11010010||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] SwinSID2 (RIGHT) DATA (STEREO Mode / 6 Channels)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9DC||?||[[Panda Electronics Communications Interface Unit]] PPI Port A - 8bit Printer data||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9DD||?||[[Panda Electronics Communications Interface Unit]] PPI Port B - 8bit general purpose I/O port||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9DE||?||[[Panda Electronics Communications Interface Unit]] PPI Port C - Handshake (bit0=Strobe.out, Bit5=Busy.in)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9DF||?||[[Panda Electronics Communications Interface Unit]] PPI Control - 8bit Printer data|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9E6||?||Port B - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F9E7||?||RS Port - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F9F5||?||[[ARA Video Digitizer]] - Reset 10bit Config Value|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9F7||?||[[Grafpad II|Hegotron grafpad II]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#F9FC - #F9FE||?||[[Otten &amp;amp; Fecht 1 MB RAM-Disc]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#F9FF||?||[[Grafpad II|Hegotron grafpad II]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FA7E||%xxxxx0x0 0xxxxxxx||Floppy Motor Control (for [[765 FDC]])|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABC||%xxxxx0x0 10xxxx00||[[Aleste 520EX]] EXTPORT with CS53: Forward PPI Port A to 8253 Timer 0|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABD||%xxxxx0x0 10xxxx01||[[Aleste 520EX]] EXTPORT with CS53: Forward PPI Port A to 8253 Timer 1|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABE||%xxxxx0x0 10xxxx10||[[Aleste 520EX]] EXTPORT with CS53: Forward PPI Port A to 8253 Timer 2|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABF||%xxxxx0x0 10xxxx11||[[Aleste 520EX]] EXTPORT with CS53: Forward PPI Port A to 8253 Control|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FABF||%xxxxx0x0 10xxxxxx||[[Aleste 520EX]] EXTPORT (config for internal hardware)|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAD0||%11111010 11010000||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] Select SID (1&amp;amp;2) Register MONO mode||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAD1||%11111010 11010001||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] Select SID1 Register||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAD2||%11111010 11010010||[[Sid|SwinSID part of SONIQUE Sound Board WIP]] by [[User:DaDMaN|DaDMaN]] Select SID2 Register||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADC||?||[[Amstrad Serial Interface]] Z80-SIO / DART port A Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADC||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8251 USART data|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADD||?||[[Amstrad Serial Interface]] Z80-SIO / DART port A Control Reg.||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADD||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8251 USART control/status|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADE||?||[[Amstrad Serial Interface]] Z80-SIO / DART port B Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADF||?||[[Amstrad Serial Interface]] Z80-SIO / DART port B Control Reg.||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FADF||?||[[Cirkit serial interface]] 8251 UART data register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAE6||?||Port A - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FAE7||?||Port C - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FAEE||?||[[Amstrad SSA-1 Speech Synthesizer]] (faulty mirror used by included RSX driver)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FAEF||%xxxxx0x0 xxx0xxxx||[[Kempston Mouse]] - Mouse Buttons||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FAF5||?||[[ARA Video Digitizer]] - Read Capture Data||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#FAF5||?||[[ARA Video Digitizer]] - Increment 10bit Config Value|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FB7E||%xxxxx0x1 0xxxxxx0||[[765 FDC]] (internal) Status Register||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#FB7F||%xxxxx0x1 0xxxxxx1||[[765 FDC]] (internal) Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBBD||?||Ram select mode [[Vortex Expansions RAM card|Vortex SP512]]||?||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBDC||?||[[Amstrad Serial Interface]] 8253 Timer counter 0||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDC||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 0 (transmit baudrate)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDD||?||[[Amstrad Serial Interface]] 8253 Timer counter 1||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDD||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 1 (receive baudrate)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDE||?||[[Amstrad Serial Interface]] 8253 Timer counter 2||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDE||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 2 (used as 1ms timer)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDF||?||[[Amstrad Serial Interface]] 8253 Timer Modus Select|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDF||?||[[RS-232 para Amstrad|MHT Ingenieros RS232 para Amstrad]] 8253 timer 0-2 control|| - || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBDF||?||[[Cirkit serial interface]] 8251 UART status/control register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBxx+0||?||CPCI [[Real Time Clock]] Index (DIY)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBxx+1||?||CPCI [[Real Time Clock]] Data (DIY)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE0||?||[[Dk'tronics Real Time Clock]] - Z80 PIO Port A Data (HD146818P RTC Data bus)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE0||?||[[Dobbertin Harddisc]] Data Port||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE1||?||[[Dk'tronics Real Time Clock]] - Z80 PIO Port B Data (General Purpose 8bit I/O Port)|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE1||?||[[Dobbertin Harddisc]] Status, Reset||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE2||?||[[Dk'tronics Real Time Clock]] - Z80 PIO Port A Control||?|| Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE2||?||[[Dobbertin Harddisc]] Select, Configuration||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE3||?||[[Dk'tronics Real Time Clock]] - Z80 PIO Port B Control||?|| Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE3||?||[[Dobbertin Harddisc]] DMA, Interrupt||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE4||?||[[Dobbertin Harddisc]] Reset||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE6||?||Port B - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FBE7||?||RS Port - [[IDE8255]]||?||?&lt;br /&gt;
|-&lt;br /&gt;
|#FBE7||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Data In/Out Port A ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBE8||?||[[Dk'tronics Real Time Clock]] &amp;quot;4bit latch&amp;quot; (details unknown)|| ? || Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE8||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 8253 Timer0 (RX Clock)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBE9||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 8253 Timer1 (TX Clock)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEA||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 8253 Timer2 (not used)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEB||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 8253 Timer Control||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEC||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) Control||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEC||?||[[PDS development system]] Z80 PIO Port A Data (8bit data to/from PC)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBED||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) TX Data||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBED||?||[[PDS development system]] Z80 PIO Port B Data (handshake to/from PC)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEE||?||[[PDS development system]] Z80 PIO Port A Control||?||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEE||?||[[Amstrad SSA-1 Speech Synthesizer]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEE||%xxxxx0x1 xxx0xxx0||[[Kempston Mouse]] - 8bit X position||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FBEE||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) Status||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FBEF||?||[[PDS development system]] Z80 PIO Port B Control||?||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBEF||%xxxxx0x1 xxx0xxx1||[[Kempston Mouse]] - 8bit Y position||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FBEF||?||[[KDS_Electronics_Serial_Interface|KDS RS232]] 6850 (reversed bit-order) RX Data||Read||-&lt;br /&gt;
|-&lt;br /&gt;
|#FBEF||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Data In/Out Port B ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBF0 - #FBFF||?||[[Otten &amp;amp; Fecht 1 MB RAM-Disc]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF0||%xxxx1011 1111xxxx||[[AMRAM2]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF0||%xxxxx011 1111xxx0||[[AMSSIO]] Serial Interface MC6850 Control/Status Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF1||%xxxxx011 1111xxx1||[[AMSSIO]] Serial Interface MC6850 Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF5||?||[[ARA Video Digitizer]] - Invoke Video Capture|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF6||?||[[Vortex Disc Drives]] 765 FDC (Vortex,ext) Status Register||Read|| - &lt;br /&gt;
|-&lt;br /&gt;
|#FBF7||?||[[Vortex Disc Drives]] 765 FDC (Vortex,ext) Data Register||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBF7||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Configure Port A ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBF8||%11111011 11111000||[[8bit Printer Port (Amstrad Action)]] Strobe/Busy||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBF9||%11111011 11111001||[[8bit Printer Port (Amstrad Action)]] Data|| - ||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBFE||?||[[Amstrad Magnum Phaser|Magnum Light Phaser]]||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBFE||?||[[Dart Scanner for DMP-Printers]]||Read||?&lt;br /&gt;
|-&lt;br /&gt;
|#FBFE||?||[[Dk'tronics Speech Synthesizer]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBFE||?||[[TMPI speech synthesizer]] Data Register ||||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FBFF||?||[[TMPI speech synthesizer]] Command/Status Register ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FBFF||?||[[ACU Real Time Clock (DIY)]] Z80-PIO Configure Port B ||Read||Write &lt;br /&gt;
|-&lt;br /&gt;
|#FC00 - #FDFF||%1111110x xxxxxxxx||[[CPCISA by Yarek|CPCISA]] 16bits mode high byte latch||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC5C||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Baudrate Selection|| - ||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC7C||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel A Data||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC7D||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel A Control/Status||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC7E||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel B Data||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FC7F||?||[[Z80-SIO dual ports RS232 interface for CPC (French)|French DIY Dual Port RS232]] - Z80-SIO Channel B Control/Status||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FCE6||?||Port A - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FCE7||?||Port C - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FD00 - #FD3F||%11111101 00xxxxxx||[[Programming:SYMBiFACE_II|SYMBiFACE II]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FDE6||?||Port B - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FDE7||?||RS Port - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FE00 - #FFFF||%1111111x xxxxxxxx||[[CPCISA by Yarek|CPCISA]] I/O access (low byte)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FE80 - #FE81||%111111101000000x||[[Albireo]] CH376 controller||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEB0 - #FEB7||%1111111010110xxx||[[Albireo]] serial port||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEE6||?||Port A - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEE7||?||Port C - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEE8||%11111110 1110100x||[[Multiface II]] - Enable Multiface II ROM/RAM||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEEA||%11111110 1110110x||[[Multiface II]] - Disable Multiface II ROM/RAM||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FEF0 - #FEF7||%11111110 11110xxx||[[CPC-CompactFlash]] - IDE registers||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FFXX||%11111111 xxxxxxxx||[[CPC Booster]] (XX=#00..#28 are used now)||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FFXX||%11111111 xxxxxxxx||[[Amdrum]] (unsigned 8bit DAC)||-||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FFE6||?||Port B - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|#FFE7||?||RS Port - [[IDE8255]]||Read||Write&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory Mapped I/O Ports ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Mem'''||'''Decoded as'''||'''Port'''||'''Read'''||'''Write''' &lt;br /&gt;
|-&lt;br /&gt;
|#4000-7FFF||%01xxxxxx xxxxxxxx||[[ASIC]] - CPC+/GX4000 registers|| Read || Write&lt;br /&gt;
|-&lt;br /&gt;
|#C00?||%11000000 0000000x||[[Dobbertin Smart Watch]] data read (A0=data)|| Read || -&lt;br /&gt;
|-&lt;br /&gt;
|#C00?||%11000000 0000000x||[[Dobbertin Smart Watch]] data write (A0=data)|| Read || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== More Ports ==&lt;br /&gt;
&lt;br /&gt;
Some more I/O addresses (which aren't included in the above list yet) are here:&lt;br /&gt;
* [[Schneiderware Summary]]&lt;br /&gt;
&lt;br /&gt;
== Other I/O Ports ==&lt;br /&gt;
&lt;br /&gt;
A number of peripherals connect to the joystick/printer ports, and so, they do not include &amp;quot;own&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Aside from I/O addresses, there are some other important I/O signals, for example: [[NMI]] or [[External Interrupt|INT]].&lt;br /&gt;
&lt;br /&gt;
== CPCISA ports for ISA cards ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|''Device''||''PC I/O range''||''CPCISA high''||''CPCISA low'' &lt;br /&gt;
|-&lt;br /&gt;
|IDE1||1F0h..1F7h||#FDF0..#FDF7||#FFF0..#FFF7&lt;br /&gt;
|-&lt;br /&gt;
|IDE2||170h..177h||#FD70..#FD77||#FF70..#FF77&lt;br /&gt;
|-&lt;br /&gt;
|Joystick||201h..201h||#FC01..#FC01||#FE01..#FE01&lt;br /&gt;
|-&lt;br /&gt;
|Ethernet||210h..21Fh||#FC10..#FC1F||#FE10..#FE1F&lt;br /&gt;
|-&lt;br /&gt;
|Sound Blaster||220h..23Fh||#FC20..#FC3F||#FE20..#FE3F&lt;br /&gt;
|-&lt;br /&gt;
|LPT2||278h..27Fh||#FC78..#FC7F||#FE78..#FE7F&lt;br /&gt;
|-&lt;br /&gt;
|COM1||2F8h..2FFh||#FCF8..#FCFF||#FEF8..#FEFF&lt;br /&gt;
|-&lt;br /&gt;
|MIDI'||300h..301h||#FD00..#FD01||#FF00..#FF01&lt;br /&gt;
|-&lt;br /&gt;
|MIDI||330h..331h||#FD30..#FD31||#FF30..#FF31&lt;br /&gt;
|-&lt;br /&gt;
|Sound control||370h..371h||#FD70..#FD71||#FF70..#FF71&lt;br /&gt;
|-&lt;br /&gt;
|FDC1||372h..377h||#FD72..#FD77||#FF72..#FF77&lt;br /&gt;
|-&lt;br /&gt;
|LPT1||378h..37Fh||#FD78..#FD7F||#FF78..#FF7F&lt;br /&gt;
|-&lt;br /&gt;
|Sound AD-LIB||388h..38Bh||#FD88..#FD8B||#FF88..#FF8B&lt;br /&gt;
|-&lt;br /&gt;
|VGA||3B0h..3BBh||#FDB0..#FDBB||#FFB0..#FFBB&lt;br /&gt;
|-&lt;br /&gt;
|LPT3||3BCh..3BFh||#FDBC..#FDBF||#FFBC..#FFBF&lt;br /&gt;
|-&lt;br /&gt;
|VGA||3C0h..3DFh||#FDC0..#FDCF||#FFC0..#FFCF&lt;br /&gt;
|-&lt;br /&gt;
|FDC1||3F2h..3F7h||#FDF2..#FDF7||#FFF2..#FFF7&lt;br /&gt;
|-&lt;br /&gt;
|COM1||3F8h..3FFh||#FDF8..#FDFF||#FFF8..#FFFF&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CPCISA ports for ISA motherboard ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|''Device''||''PC I/O range''||''CPCISA high''||''CPCISA low'' &lt;br /&gt;
|-&lt;br /&gt;
|DMA||000h..00Fh||#FC00..#FC0F||#FE00..#FE0F&lt;br /&gt;
|-&lt;br /&gt;
|interrupt||020h..03Fh||#FC20..#FC3F||#FE20..#FE3F&lt;br /&gt;
|-&lt;br /&gt;
|counter||040h..05Fh||#FC40..#FC5F||#FE40..#FE5F&lt;br /&gt;
|-&lt;br /&gt;
|keyboard||060h..067h||#FC60..#FC67||#FE60..#FE67&lt;br /&gt;
|-&lt;br /&gt;
|RTC||070h..071h||#FC70..#FC71||#FE70..#FE71&lt;br /&gt;
|-&lt;br /&gt;
|DMA||080h..08Fh||#FC80..#FC8F||#FE80..#FE8F&lt;br /&gt;
|-&lt;br /&gt;
|DMA||0C0h..0DFh||#FCC0..#FCDF||#FEC0..#FEDF&lt;br /&gt;
|-&lt;br /&gt;
|interrupt||0A0h..0BFh||#FCA0..#FCBF||#FEA0..#FEBF&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]] [[Category:Stub]][[Category:CPC Internal Components]][[Category:Hardware]][[Category:Electronic Component]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=CPC_CH376_USB&amp;diff=94935</id>
		<title>CPC CH376 USB</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=CPC_CH376_USB&amp;diff=94935"/>
				<updated>2016-01-17T20:13:04Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: PulkoMandy moved page CPC CH376 USB to Albireo: interface now has a name!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Albireo]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=94934</id>
		<title>Albireo</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=94934"/>
				<updated>2016-01-17T20:13:02Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: PulkoMandy moved page CPC CH376 USB to Albireo: interface now has a name!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This interface is based on the CH376 chip and allows access to USB mass storage and other USB devices on CPC.&lt;br /&gt;
The CH376 chip implements FAT32 in hardware, which means no filesystem driver is needed on the CPC side.&lt;br /&gt;
&lt;br /&gt;
[http://pulko.mandy.pagesperso-orange.fr/shinra/cpc-usb.shtml CH376 interface homepage]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=94355</id>
		<title>Albireo</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Albireo&amp;diff=94355"/>
				<updated>2015-10-11T20:52:54Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: Created page with &amp;quot;This interface is based on the CH376 chip and allows access to USB Mas sstorage and other USB devices on CPC. The CH376 chip implements FAT32 in hardware, which means no files...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This interface is based on the CH376 chip and allows access to USB Mas sstorage and other USB devices on CPC.&lt;br /&gt;
The CH376 chip implements FAT32 in hardware, which means no filesystem driver is needed on the CPC side.&lt;br /&gt;
&lt;br /&gt;
[http://pulko.mandy.pagesperso-orange.fr/shinra/cpc-usb.shtml CH376 interface homepage]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

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

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Plus_tracker&amp;diff=91265</id>
		<title>Plus tracker</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Plus_tracker&amp;diff=91265"/>
				<updated>2014-09-21T16:24:11Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: Add some more useful info and link to the homepage.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Trackonx is a [[sound tracker]] preview for the Amstrad CPC plus by Power/Ukonx.&lt;br /&gt;
&lt;br /&gt;
This tracker is special since it is designed to utilise the DMA sound facilities of the Amstrad CPC plus.  &lt;br /&gt;
&lt;br /&gt;
''&amp;lt;br&amp;gt;''&amp;lt;gallery&amp;gt; caption=&amp;quot;A Plus sound tracker&amp;quot;&amp;gt;&lt;br /&gt;
Image:tkx screenshot 1.png|A sound tracker for the CPC plus&lt;br /&gt;
Image:tkx screenshot 2.png|Playing a tune&lt;br /&gt;
&amp;lt;/gallery&amp;gt; &lt;br /&gt;
&lt;br /&gt;
This was developped during work on the Hate Beats demo. Unfortunately the sources for the tracker were lost in a hard disk crash so no further development will happen. The pattern editor is working, but there is no disk access so you can't load songs or samples. The preview comes preloaded with the samples used in the Hate Beats demo.&lt;br /&gt;
&lt;br /&gt;
== Download  ==&lt;br /&gt;
&lt;br /&gt;
*[[Media:tkx001.sna|tkx001.sna]] (SNA file for Emulators)&lt;br /&gt;
* http://mrick0363.free.fr/&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]] [[Category:Music and sound]] [[Category:CPC Plus]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

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

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Amstrad_part_numbers&amp;diff=80168</id>
		<title>Amstrad part numbers</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Amstrad_part_numbers&amp;diff=80168"/>
				<updated>2012-08-05T11:40:19Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Custom Chips */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Electronic Component| ]][[Category:Definitions]][[Category:Amstrad Products]][[Category:CPC Internal Components]][[Category:Hardware]][[Category:CPC History]]&lt;br /&gt;
== Custom Chips ==&lt;br /&gt;
 Part    Description&lt;br /&gt;
 40007   Gate-Array version 1 (20RA043) (used in CPC464; with heat sink, other pin-outs than 40008/40010)&lt;br /&gt;
 40008   Gate-Array version 2 (HSG3130) (rare version) (same pin-outs as 40010)&lt;br /&gt;
 40009   32K ROM; BIOS and BASIC for CPC464 (English)&lt;br /&gt;
 40010   Gate-Array version 3 (HSG3170) (used in newer CPC464 and in CPC664/6128; no heat sink)&lt;br /&gt;
 40015   16K ROM; AMSDOS for CPC664/CPC6128 and DDI-1 disc interface&lt;br /&gt;
 40022   32K ROM; BIOS and BASIC for CPC664 (English)&lt;br /&gt;
 40025   32K ROM; BIOS and BASIC for CPC6128 (English)&lt;br /&gt;
 40026   PCW8xxx printer controller (i8041)&lt;br /&gt;
 40027   PCW8xxx/9xxx keyboard controller (i8048)&lt;br /&gt;
 40028   PCW8xxx/9xxx main ASIC&lt;br /&gt;
 40031   16L8 PAL; Ram management CPC6128&lt;br /&gt;
 40036   CPU and ROM (IC uPD7811G) (for DMP2000 Printer)&lt;br /&gt;
 40037   32K ROM; BIOS and BASIC for CPC464 and Late-CPC472-models (Spanish)&lt;br /&gt;
 40038   32K ROM; BIOS and BASIC for CPC6128 (Spanish)&lt;br /&gt;
 40039   PPC BUS Gate Array&lt;br /&gt;
 40040   PC1512/PPC memory gate array&lt;br /&gt;
 40042   PC1512 keyboard controller (i8048)&lt;br /&gt;
 40043   PC1512 BIOS (even addresses)&lt;br /&gt;
 40044   PC1512 BIOS (odd addresses)&lt;br /&gt;
 40045   PC1512 character ROM&lt;br /&gt;
 40049   PPC Serial &lt;br /&gt;
 40050   32K ROM; BIOS and BASIC for CPC464 (French)&lt;br /&gt;
 40051   32K ROM; BIOS and BASIC for CPC6128 (French)&lt;br /&gt;
 40054   32K ROM; Spectrum +2&lt;br /&gt;
 40055   32K ROM; Spectrum +2 &lt;br /&gt;
 40056   Spectrum +2 ASIC (ULA7K010E5 - main ULA)&lt;br /&gt;
 40057   Spectrum +2 ASIC (ULA1050E - Joystick)&lt;br /&gt;
 40058   Spectrum +2 ASIC&lt;br /&gt;
 40068   Spectrum +2 ROM (French)&lt;br /&gt;
 40077   Spectrum +2A/+2B/+3 ASIC&lt;br /&gt;
 40078   PC1512 character ROM (with Greek characters)&lt;br /&gt;
 40087   PCW9xxx printer controller ASIC&lt;br /&gt;
 40088   PCW9xxx printer serial receiver?&lt;br /&gt;
 40092   Spectrum +3/+2B/+3B ROM 1 (English; 256K)&lt;br /&gt;
 40093   Spectrum +3/+2B/+3B ROM 2 (English; 256K)&lt;br /&gt;
 40094   Spectrum +3/+2B/+3B ROM 1 (Spanish; 256K)&lt;br /&gt;
 40100   PC1640 EGA ROM  &lt;br /&gt;
 40101   Spectrum +3/+2B/+3B ROM 2 (Spanish; 256K)&lt;br /&gt;
 40102   PPC ?&lt;br /&gt;
 40103   PCW9xxx printer controller UPD8039 ROM. On my main board this was removed , and a UPD8039 with internal ROM is used instead.&lt;br /&gt;
 40104   PPC512 VDU/LCD Gate Array&lt;br /&gt;
 40106   PPC512 Serial&lt;br /&gt;
 40107   PPC512 BIOS (even addresses)&lt;br /&gt;
 40108   PPC512 BIOS (odd addresses)&lt;br /&gt;
 40109   PPC512 character ROM&lt;br /&gt;
 40112   PPC512 CMOS Controller&lt;br /&gt;
 40135   PPC5512&lt;br /&gt;
 40120   PCW9xxx parallel printer controller ASIC&lt;br /&gt;
 40178   PC2086 keyboard controller (i8049)&lt;br /&gt;
 40179   PC2086 BIOS (even addresses)&lt;br /&gt;
 40180   PC2086 BIOS (odd addresses)&lt;br /&gt;
 40184   PC200 BIOS (even addresses)&lt;br /&gt;
 40185   PC200 BIOS (odd addresses)&lt;br /&gt;
 40186   PC2086 VGA BIOS&lt;br /&gt;
 40198   PPC512 serial ROM?&lt;br /&gt;
 40226   CPC464/CPC6128 &amp;quot;cost-down&amp;quot; ASIC (ARN4) (combines Gate Array, PAL, CRTC, and some small FDC/DRAM/RESET logic)&lt;br /&gt;
 40464   CPC+ Triple 4bit DAC (for RGB video)&lt;br /&gt;
 40489   CPC+ ASIC&lt;br /&gt;
 40908   CPC+ cartridge protection chip (&amp;quot;ACID&amp;quot;)&lt;br /&gt;
 41088-1 CPC+ 27C1001 EPROM in GX 4000 version of [[Burnin' Rubber]] (130Z001)&lt;br /&gt;
 41090-1 CPC+ 27C1001 EPROM in French System Cartridge (CPC+ BIOS/BASIC, AMSDOS v2, Burnin' Rubber) (130Z001)&lt;br /&gt;
 41091-1 CPC+ 27C1001 EPROM in Spanish System Cartridge (CPC+ BIOS/BASIC, AMSDOS v2, Burnin' Rubber) (130Z001)&lt;br /&gt;
 41857   PenPad 600 ?&lt;br /&gt;
 41863   PenPad 600 ?&lt;br /&gt;
 41864   PenPad 600 ?&lt;br /&gt;
 41898   NC200 ASIC&lt;br /&gt;
 42069   PenPad 600 ROM&lt;br /&gt;
 42112   NC200 System ROM (UK)&lt;br /&gt;
 42778   PcW16 &amp;quot;Anne&amp;quot; ASIC&lt;br /&gt;
&lt;br /&gt;
 PT NO 31600  ASIC for DMP3160 printer (combines TTL logic from earlier DMP's in one SMD chip) (the chip hides on solder side of the PCB)&lt;br /&gt;
&lt;br /&gt;
Part numbers 40094 and 40101 provided by Guesser from WOS.&lt;br /&gt;
&lt;br /&gt;
== PCBs ==&lt;br /&gt;
 Part    Description&lt;br /&gt;
 30001   P.C.B. 3&amp;quot; Disc drive&lt;br /&gt;
 30002   P.C.B. 3&amp;quot; Disc drive&lt;br /&gt;
 270100  P.C.B. CPC464 version 1 (one variant) (1983)&lt;br /&gt;
 Z70100  P.C.B. CPC464 version 1 (another variant) (1983)&lt;br /&gt;
 Z70101  P.C.B. CPC464 version 1 keyboard with soldered wires&lt;br /&gt;
 Z70102  P.C.B. CPC464 version 1 keyboard with 20 pin connector (only 19 pins used)&lt;br /&gt;
 Z70102  P.C.B. CPC464 cassette sub-board (This pcb share part number with the keyboard assembly !)&lt;br /&gt;
 Z70200  P.C.B. CPC464 version 2&lt;br /&gt;
 Z70205  P.C.B. CPC664 &lt;br /&gt;
 Z70209  CPC664 Keyboard Assembly (English)&lt;br /&gt;
 Z70210  P.C.B. CPC6128 version 1 (1985)&lt;br /&gt;
 Z70211  CPC464 Keyboard Assembly (English) (ribbon cable connectors)&lt;br /&gt;
 Z70215  P.C.B. CTM644 colour monitor main&lt;br /&gt;
 Z70216  P.C.B. CTM644 colour monitor brightness control&lt;br /&gt;
 Z70217  P.C.B. CTM644 colour monitor cathode ray tube&lt;br /&gt;
 Z70221  CPC6128 Keyboard Assembly (English) (ribbon cable connectors)&lt;br /&gt;
 Z70290  P.C.B. CPC6128 version 2, MC0020x (1985) (one variant)&lt;br /&gt;
 Z70290  P.C.B. CPC6128 version 2, MC0023x (1985) (german variant)&lt;br /&gt;
 Z70291  P.C.B. PCW8256/8512 (1985)&lt;br /&gt;
 Z70311  CPC6128 Keyboard Assembly (French) (ribbon cable connectors)&lt;br /&gt;
 Z70312  P.C.B. 3&amp;quot; Disc Drive&lt;br /&gt;
 Z70313  P.C.B. 3&amp;quot; Disc Drive&lt;br /&gt;
 Z70341  P.C.B. 3&amp;quot; Disc Drive&lt;br /&gt;
 Z70374  P.C.B. CPC464 version 3 (one variant)&lt;br /&gt;
 Z70375  P.C.B. CPC464 version 3 (another variant)&lt;br /&gt;
 Z70378  P.C.B. CPC464 version 3 (german variant)&lt;br /&gt;
 Z70500  P.C.B. Spectrum+2 issue 3&lt;br /&gt;
 Z70800  P.C.B. PCW9512 (1987)&lt;br /&gt;
 Z70830  P.C.B. Spectrum+3 issue 2 (1987)&lt;br /&gt;
 Z70833  P.C.B. Spectrum+2 issue 4&lt;br /&gt;
 Z80264  P.C.B. 3&amp;quot; disc drive&lt;br /&gt;
 Z80329  P.C.B. CPC464 version 4 (1988)&lt;br /&gt;
 Z80330  P.C.B. CPC6128 version 3 (1988)&lt;br /&gt;
 Z80432  464+ Keyboard Assembly&lt;br /&gt;
&lt;br /&gt;
 Z90903          P.C.B. CPC+ Cartridge (custom LKs) (1990)&lt;br /&gt;
 2700-016P-3     P.C.B. 464+/6128+ Mainboard (1990)&lt;br /&gt;
 2700-017P-4     P.C.B. GX4000 Mainboard (1990)&lt;br /&gt;
 2700-023P-1     P.C.B. CPC+ Cartridge (hardwired LKs) (1990)&lt;br /&gt;
 PCB101/MF0004B  P.C.B. DDI-1 Interface&lt;br /&gt;
 PCB501/MF0003B  P.C.B. FD-1 Power Supply (AC)&lt;br /&gt;
 PCB502/MF0001A  P.C.B. FD-1 Power Supply (DC)&lt;br /&gt;
 PCB504/MF0002A  P.C.B. FD-1 Relay Board&lt;br /&gt;
 MS0043A         P.C.B. CPC472 Daughterboard&lt;br /&gt;
 112C4001-3160   P.C.B. DMP3160 Printer, VER. 04 (C) 1988 (0AMS0100 PSP0151B)&lt;br /&gt;
&lt;br /&gt;
Note that some numbers start with '''27''' instead of '''Z7''' (the boards are really labeled like so, this is not a typo).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Amsoft SOFT Numbers]]&lt;br /&gt;
* [[Mainboard Versions]]&lt;br /&gt;
&lt;br /&gt;
Contributors: Gérald Vincent&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Ramcard_128&amp;diff=67715</id>
		<title>Ramcard 128</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Ramcard_128&amp;diff=67715"/>
				<updated>2011-05-01T08:37:45Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: Added link to an article with detailed hardware info.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Ramcard 128.JPG|right|thumb|250px|A RAM expansion card with battery backup]]&lt;br /&gt;
&lt;br /&gt;
The '''Ramcard 128''' is a ROM expansion card by [[RAM7]]. Like the [[Inicron ROM-RAM-Box]] the ROMs are simulated with RAM memory. The memory is backed up with an onboard battery.&lt;br /&gt;
&lt;br /&gt;
It has a maximum capacity of 128Kb.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:Doc Ramcard By RAM7.pdf|French documentation (PDF)]]&lt;br /&gt;
* [[Media:Ramcard_pcb_v2-3.pdf|Board layout (PDF)]]&lt;br /&gt;
* [http://pulko.mandy.pagesperso-orange.fr/shinra/ramcard.shtml English article about the way it works]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Expansion ROM]] [[Category:Peripherals]][[Category:DIY]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Caprice_Reloaded&amp;diff=46638</id>
		<title>Caprice Reloaded</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Caprice_Reloaded&amp;diff=46638"/>
				<updated>2010-05-24T10:30:07Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: Created.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Caprice Reloaded is a C++ rewrite of [[CaPriCe]]. The goal is to create an emulator that is more accurate, improve the Unix port and add tools for helping cross-development.&lt;br /&gt;
&lt;br /&gt;
The emulator is still far from finished, but already includes :&lt;br /&gt;
 * Friendly GUI with menus for easy configuration (using the wxWidgets toolkit)&lt;br /&gt;
 * CRTC0 emulation (100% accurate), CRTC1 mulation (unfinished)&lt;br /&gt;
 * Integrated assembler (using SJasmPlus)&lt;br /&gt;
 * Integrated debugger with breakpoints&lt;br /&gt;
 * Integrated memory explorer and disassembler&lt;br /&gt;
&lt;br /&gt;
There are also a lot of small fixes, for example [[Orion Prime]] runs properly while it is not working on the original CaPriCe.&lt;br /&gt;
&lt;br /&gt;
Homepage : [http://code.google.com/p/grafx2]&lt;br /&gt;
&lt;br /&gt;
Caprice Reloaded is written by [[CloudStrife]], [[PulkoMandy]], [[Krusty]] and [[Ramlaid]].&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Emulators&amp;diff=46637</id>
		<title>Emulators</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Emulators&amp;diff=46637"/>
				<updated>2010-05-24T10:24:28Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: /* Unix / Linux */ Add caprice reloaded&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Operating Systems  =&lt;br /&gt;
&lt;br /&gt;
== Acorn RISC OS  ==&lt;br /&gt;
*[[nottherejusttesting|just a test]]&lt;br /&gt;
*[[!CPC|!CPC]] &lt;br /&gt;
*[[!CPCemu|!CPCemu]]&lt;br /&gt;
&lt;br /&gt;
== Amiga  ==&lt;br /&gt;
*[[A-CPC|A-CPC]] &lt;br /&gt;
*[[Ami-CPC|Ami-CPC]] &lt;br /&gt;
*[[Emu-CPC|Emu-CPC]]&lt;br /&gt;
&lt;br /&gt;
== Amsdos ==&lt;br /&gt;
*[[ZXM|ZXM]]&lt;br /&gt;
&lt;br /&gt;
== Dos  ==&lt;br /&gt;
*[[Archimedes|Archimedes]] &lt;br /&gt;
*[[CPCE|CPCE]] &lt;br /&gt;
*[[CPCEmu|CPCEmu]] &lt;br /&gt;
*[http://nocash.emubase.de/cpc.htm No$Cpc]&lt;br /&gt;
*[[CPCEMU (RWCPC)|RWCPC]]&lt;br /&gt;
&lt;br /&gt;
== Java  ==&lt;br /&gt;
*[[Arnold jr.|Arnold jr.]] &lt;br /&gt;
*[[JEMU|JEMU]]&lt;br /&gt;
*[[Javacpc|Javacpc]]&lt;br /&gt;
*[[Webcpc|Webcpc]]&lt;br /&gt;
&lt;br /&gt;
== MacOS  ==&lt;br /&gt;
*[[Arnold|Arnold]] &lt;br /&gt;
*[[CPCplusplus|CPC++]]&lt;br /&gt;
*[http://www.wincpc.ch/index.php?topic=projects-maccpc MacCPC]&lt;br /&gt;
&lt;br /&gt;
== SunOS / Solaris  ==&lt;br /&gt;
*[[CPCplusplus|CPC++]]&lt;br /&gt;
&lt;br /&gt;
== Unix / Linux  ==&lt;br /&gt;
*[[Arnold|Arnold]] &lt;br /&gt;
*[[CaPriCe|CaPriCe]] &lt;br /&gt;
*[[Caprice Reloaded]]&lt;br /&gt;
*[[CPCplusplus|CPC++]] &lt;br /&gt;
*[[CPC4X|CPC4X]] &lt;br /&gt;
*[[CPCemu]]&lt;br /&gt;
*[[Roland Emulator|Roland]] &lt;br /&gt;
*[[XCPC|XCPC]]&lt;br /&gt;
&lt;br /&gt;
== Windows  ==&lt;br /&gt;
*[[Arnimedes|Arnimedes]] &lt;br /&gt;
*[[Arnold|Arnold]] &lt;br /&gt;
*[[CaPriCe|CaPriCe]] &lt;br /&gt;
*[[CoPaCabana|CoPaCabana]]&lt;br /&gt;
*[[CPC-Em|CPC-Em]] &lt;br /&gt;
*[[CPCAlive]]&lt;br /&gt;
*[[CPCE|CPCE]] &lt;br /&gt;
*[[CPCemu]]&lt;br /&gt;
*[[CPE|CPE]] &lt;br /&gt;
*[[No$Cpc]]&lt;br /&gt;
*[[PC-CPC|PC-CPC]] &lt;br /&gt;
*[[Roland Emulator|Roland]]&lt;br /&gt;
*[[VirtualCPC|VirtualCPC]] &lt;br /&gt;
*[[WinApe|WinApe]] &lt;br /&gt;
*[[WinCPC|WinCPC]] &lt;br /&gt;
*[[Yage|Yage]]&lt;br /&gt;
&lt;br /&gt;
= Hardware  =&lt;br /&gt;
&lt;br /&gt;
*[[CPC TREX|CPC TREX]] (TurboCPC core running on a terasIC T-Rex C1) &lt;br /&gt;
*[[C-ONE|C-ONE]] (TurboCPC core running on the C-One reconfigurable computer)&lt;br /&gt;
&lt;br /&gt;
= Consoles / Handhelds  =&lt;br /&gt;
&lt;br /&gt;
== Gamepark GP32 / GP2X  ==&lt;br /&gt;
&lt;br /&gt;
*[[Caprice|CapriceGP2x]] (GP2X) &lt;br /&gt;
*[[Caprice|GP2X-CAP32]] (GP2X) &lt;br /&gt;
*[http://david.dantoine.org/contenido/4/ Pituka (GP32)]&lt;br /&gt;
&lt;br /&gt;
== Dingoo A320 ==&lt;br /&gt;
&lt;br /&gt;
*[http://david.dantoine.org/comentario/noticia/80/ Pituka (Dingoo A320 Linux / Dingux)]&lt;br /&gt;
&lt;br /&gt;
== Microsoft XBOX  ==&lt;br /&gt;
&lt;br /&gt;
*[[Arnold|ArnoldX]]&lt;br /&gt;
&lt;br /&gt;
== Sega Dreamcast  ==&lt;br /&gt;
&lt;br /&gt;
*[[CPCast]]&lt;br /&gt;
*[[DreamCPC|DreamCPC]]&lt;br /&gt;
&lt;br /&gt;
== Sony PSP  ==&lt;br /&gt;
&lt;br /&gt;
*[[PSPCap32|PSPCap32]]&lt;br /&gt;
&lt;br /&gt;
== Nintendo DS  ==&lt;br /&gt;
&lt;br /&gt;
*[[AmeDS|AmeDS]] &lt;br /&gt;
*[[CrocoDS|CrocoDS]]&lt;br /&gt;
&lt;br /&gt;
== Nintendo Wii ==&lt;br /&gt;
&lt;br /&gt;
*[[Wiituka]]&lt;br /&gt;
&lt;br /&gt;
= Mobile phones / PDAs  =&lt;br /&gt;
&lt;br /&gt;
== PalmOS  ==&lt;br /&gt;
&lt;br /&gt;
*[[CoPaCabana|CoPaCabana]]&lt;br /&gt;
&lt;br /&gt;
== Symbian  ==&lt;br /&gt;
&lt;br /&gt;
*[[S60-CPC|S60-CPC]]&lt;br /&gt;
&lt;br /&gt;
== Windows Mobile  ==&lt;br /&gt;
&lt;br /&gt;
*[[CaPriCe|PocketCaprice]] [http://www.pocketcult.com/home.php]&lt;br /&gt;
&lt;br /&gt;
= Emulation Tools  =&lt;br /&gt;
&lt;br /&gt;
*[[ConvImgCPC|ConvImgCPC]] &lt;br /&gt;
*[[CPCDiskXP|CPCDiskXP]] &lt;br /&gt;
*[[CPCGamesCD-CPCLoader|CPCGamesCD-CPCLoader]] &lt;br /&gt;
*[[CPCTapeXP|CPCTapeXP]] &lt;br /&gt;
*[[CPRTools|CPRTools]] &lt;br /&gt;
*[[Dsktools|Dsktools]] &lt;br /&gt;
*[[ManageDSK|ManageDSK]] &lt;br /&gt;
*[[WriteDSK|WriteDSK]]&lt;br /&gt;
&lt;br /&gt;
= Emulator Detection =&lt;br /&gt;
&lt;br /&gt;
*[[Emulator_IDs|Emulator IDs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Emulator|Emulator]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=RAM7_Cartridge_Hacker&amp;diff=41834</id>
		<title>RAM7 Cartridge Hacker</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=RAM7_Cartridge_Hacker&amp;diff=41834"/>
				<updated>2010-02-20T12:16:33Z</updated>
		
		<summary type="html">&lt;p&gt;PulkoMandy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:RAM7 Cartridge Hacker.jpg|right|thumb|250px|A peripheral by [[RAM7]]]]&lt;br /&gt;
&lt;br /&gt;
A peripheral by [[RAM7]] that allow to hack cartridges for the CPC+&lt;br /&gt;
&lt;br /&gt;
Basically it is a modification of the RAMCard to use it as a cartridge. It plugs to the expansion port of the Plus and replaces the ROM from the cartridge, but still uses the ACID. This device use a RAM instead of a ROM, so, like the RAMCard, you can replace the content and use it as a development tool to create code that will later be burned on a real ROM to put in a cartridge.&lt;br /&gt;
&lt;br /&gt;
Note it will not allow you  to use cartridges without an ACID chip, but it will allow you to load a ROM dump from disk and play any ROM game this way.&lt;br /&gt;
&lt;br /&gt;
Not much is known of this interface please add here!&lt;br /&gt;
&lt;br /&gt;
== Pictures ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;The RAM7 cartridge hacker&amp;quot;&amp;gt;&lt;br /&gt;
Image:RAM 7 cartridige 2.JPG|&lt;br /&gt;
Image:RAM 7 cartridige 3.JPG|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]] [[Category:Peripherals]] [[Category:Stub]]&lt;/div&gt;</summary>
		<author><name>PulkoMandy</name></author>	</entry>

	</feed>