<?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=Devilmarkus</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=Devilmarkus"/>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php/Special:Contributions/Devilmarkus"/>
		<updated>2026-08-28T15:12:21Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=80_Column_Mode_1&amp;diff=93052</id>
		<title>80 Column Mode 1</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=80_Column_Mode_1&amp;diff=93052"/>
				<updated>2015-05-10T22:38:51Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BASIC example: 80 column text (4x8) in MODE 1 =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 10 DIM a(10):MODE 1:SYMBOL AFTER 32:FOR t=33 TO 255:PRINT CHR$(t);:NEXT:y=398:PRINT:sy=33&lt;br /&gt;
 20 FOR n=1 TO 6:FOR p=2 TO 640 STEP 16&lt;br /&gt;
 30 FOR k=1 TO 8&lt;br /&gt;
 40 b$=&amp;quot;&amp;quot;:FOR x=1 TO 16 STEP 4:IF TEST(p+x,y)=0 THEN b$=b$+&amp;quot;0&amp;quot; ELSE b$=b$+&amp;quot;1&amp;quot;&lt;br /&gt;
 50 NEXT&lt;br /&gt;
 60 y=y-2:b$=b$+b$:a(k)=VAL(&amp;quot;&amp;amp;x&amp;quot;+b$):NEXT:y=y+16&lt;br /&gt;
 70 SYMBOL sy,a(1),a(2),a(3),a(4),a(5),a(6),a(7),a(8)&lt;br /&gt;
 80 POKE &amp;amp;B7C3,2:PRINT CHR$(sy);:POKE &amp;amp;B7C3,1:sy=sy+1:IF sy&amp;gt;255 THEN GOTO 110&lt;br /&gt;
 90 NEXT&lt;br /&gt;
 100 y=y-16:NEXT&lt;br /&gt;
 110 MODE 2:CALL &amp;amp;BA11:POKE &amp;amp;B7C3,1:PEN 1:POKE &amp;amp;B7C3,2:PRINT&amp;quot;SMALL FONT PEN 1&amp;quot;&lt;br /&gt;
 120 POKE &amp;amp;B7C3,1:PEN 2:POKE &amp;amp;B7C3,2:PRINT&amp;quot;SMALL FONT PEN 2&amp;quot;&lt;br /&gt;
 130 POKE &amp;amp;B7C3,1:PEN 3:POKE &amp;amp;B7C3,2:PRINT&amp;quot;SMALL FONT PEN 3&amp;quot;&lt;br /&gt;
 140 KEY 1,&amp;quot;POKE &amp;amp;B7C3,1:PEN 1:POKE &amp;amp;B7C3,2&amp;quot;+CHR$(13)&lt;br /&gt;
 150 KEY 2,&amp;quot;POKE &amp;amp;B7C3,1:PEN 2:POKE &amp;amp;B7C3,2&amp;quot;+CHR$(13)&lt;br /&gt;
 160 KEY 3,&amp;quot;POKE &amp;amp;B7C3,1:PEN 3:POKE &amp;amp;B7C3,2&amp;quot;+CHR$(13)&lt;br /&gt;
 170 KEY 4,&amp;quot;CALL &amp;amp;BA11&amp;quot;+CHR$(13)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=80_Column_Mode_1&amp;diff=93037</id>
		<title>80 Column Mode 1</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=80_Column_Mode_1&amp;diff=93037"/>
				<updated>2015-05-10T22:14:45Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BASIC example: 80 column text (4x8) in MODE 1 =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 10 DIM a(10):MODE 1:SYMBOL AFTER 32:FOR t=33 TO 255:PRINT CHR$(t);:NEXT:y=398:PRINT:sy=33&lt;br /&gt;
 20 FOR n=1 TO 6:FOR p=2 TO 640 STEP 16&lt;br /&gt;
 30 FOR k=1 TO 8&lt;br /&gt;
 40 b$=&amp;quot;&amp;quot;:FOR x=1 TO 16 STEP 4:IF TEST(p+x,y)=0 THEN b$=b$+&amp;quot;0&amp;quot; ELSE b$=b$+&amp;quot;1&amp;quot;&lt;br /&gt;
 50 NEXT&lt;br /&gt;
 60 y=y-2:b$=b$+b$:a(k)=VAL(&amp;quot;&amp;amp;x&amp;quot;+b$):NEXT:y=y+16&lt;br /&gt;
 70 SYMBOL sy,a(1),a(2),a(3),a(4),a(5),a(6),a(7),a(8)&lt;br /&gt;
 80 POKE &amp;amp;B7C3,2:PRINT CHR$(sy);:POKE &amp;amp;B7C3,1:sy=sy+1:IF sy&amp;gt;255 THEN GOTO 110&lt;br /&gt;
 90 NEXT&lt;br /&gt;
 100 y=y-16:NEXT&lt;br /&gt;
 110 MODE 2:CALL &amp;amp;BA11:POKE &amp;amp;B7C3,1:PEN 1:POKE &amp;amp;B7C3,2:PRINT&amp;quot;SMALL FONT PEN 1&amp;quot;&lt;br /&gt;
 120 POKE &amp;amp;B7C3,1:PEN 2:POKE &amp;amp;B7C3,2:PRINT&amp;quot;SMALL FONT PEN 2&amp;quot;&lt;br /&gt;
 130 POKE &amp;amp;B7C3,1:PEN 3:POKE &amp;amp;B7C3,2:PRINT&amp;quot;SMALL FONT PEN 3&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=80_Column_Mode_1&amp;diff=93003</id>
		<title>80 Column Mode 1</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=80_Column_Mode_1&amp;diff=93003"/>
				<updated>2015-05-09T19:06:30Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BASIC example: 80 column text (4x8) in MODE 1 =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 10 DIM a(10):MODE 1:SYMBOL AFTER 32:FOR t=33 TO 255:PRINT CHR$(t);:NEXT:y=398:PRINT:sy=33&lt;br /&gt;
 20 FOR n=1 TO 6:FOR p=2 TO 640 STEP 16&lt;br /&gt;
 30 FOR k=1 TO 8&lt;br /&gt;
 40 b$=&amp;quot;&amp;quot;:FOR x=1 TO 16 STEP 4:IF TEST(p+x,y)=0 THEN b$=b$+&amp;quot;0&amp;quot; ELSE b$=b$+&amp;quot;1&amp;quot;&lt;br /&gt;
 50 NEXT&lt;br /&gt;
 60 y=y-2:b$=b$+b$:a(k)=VAL(&amp;quot;&amp;amp;x&amp;quot;+b$):NEXT:y=y+16&lt;br /&gt;
 70 SYMBOL sy,a(1),a(2),a(3),a(4),a(5),a(6),a(7),a(8)&lt;br /&gt;
 80 POKE &amp;amp;B7C3,2:PRINT CHR$(sy);:POKE &amp;amp;B7C3,1:sy=sy+1:IF sy&amp;gt;255 THEN GOTO 110&lt;br /&gt;
 90 NEXT&lt;br /&gt;
 100 y=y-16:NEXT&lt;br /&gt;
 110 MODE 2:CALL &amp;amp;BA11:POKE &amp;amp;B7C3,2:PEN 1:POKE &amp;amp;B7C3,2:PRINT&amp;quot;SMALL FONT PEN 1&amp;quot;&lt;br /&gt;
 120 POKE &amp;amp;B7C3,1:PEN 2:POKE &amp;amp;B7C3,2:PRINT&amp;quot;SMALL FONT PEN 2&amp;quot;&lt;br /&gt;
 130 POKE &amp;amp;B7C3,1:PEN 3:POKE &amp;amp;B7C3,2:PRINT&amp;quot;SMALL FONT PEN 3&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=MegaROM&amp;diff=86636</id>
		<title>MegaROM</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=MegaROM&amp;diff=86636"/>
				<updated>2013-03-05T21:37:47Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: Undo revision 86635 by EBO (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:MegaROM.png|thumb|420px|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MegaROM is a low-cost replacement for a standard ROMBoard, but rather than using an array of 16 kb EPROMs as traditional ROMBoards use, the MegaROM uses a single 8x128k (1Mbit) or 8x256k (2Mbit) EPROM (or Flash EPROM) divided into 16 kb blocks. This not only reduces the size of the device significantly, but due to the fact that 16 kb EPROMs are a dying breed, it is much easier and cheaper to find a single 8x256k EPROM than buy sixteen 16 kb EPROMs.&lt;br /&gt;
&lt;br /&gt;
The complete hardware of the MegaROM was developed by [[User:Bryce|Bryce]] of [[FutureSoft]]. The original idea came from discussions with [[TFM]] of [[FutureSoft]]. The main goals being that it would offer up to 16 ROM positions, be very low cost and be a single-sided PCB design so that it could be easily built by most electronic hobbyists.&lt;br /&gt;
&lt;br /&gt;
It is the predecessor of the Flash ROM based [[MegaFlash]].&lt;br /&gt;
&lt;br /&gt;
If you have any further questions regarding this project contact [[User:Bryce|Bryce]] through the Wiki Forum.&lt;br /&gt;
&lt;br /&gt;
== Warning / Disclaimer ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although I have taken the utmost care preparing this documentation, I do not guarantee that it is error free and I accept no responsibility for damage to anyone’s CPC, other personal equipment or injury inflicted on you or others. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Circuit ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MegaROM_Sch.PNG|600px|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main component on the PCB is the EPROM itself. This may be any pin compatible 8x128k (8 virtual ROMs) or 8x256k (16 virtual ROMs), see the list of compatible tested EPROMs below. The EPROM should have a response time of 200ns or less. The five other ICs are standard TTL Logic devices and only need to be of the type 74LSxx (74HCTxx, 74Fxx etc will also work but are not necessary in this application). The unconnected pins on the EPROM in the schematic above, should be connected to the associated Address and Data bus pins of the 50way connector. I just left them out for clarity.&lt;br /&gt;
&lt;br /&gt;
== Parts List ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As always, one of my priorities is to keep the price as low as possible, the cost of the entire board should come in at around 10€. &lt;br /&gt;
Here’s the Parts list (including an 8x256k UV EPROM) and their approximate prices (Centronics version):&lt;br /&gt;
&lt;br /&gt;
 {|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|''Component''||''Quantity''||''Price''||''Total''&lt;br /&gt;
|-&lt;br /&gt;
|27C-2001-100 EPROM||1||3.90€||3.90€&lt;br /&gt;
|-&lt;br /&gt;
|74LS374||1||0.25€||0.25€&lt;br /&gt;
|-&lt;br /&gt;
|74LS32||2||0.32€||0.64€&lt;br /&gt;
|-&lt;br /&gt;
|74LS02||1||0.31€||0.31€&lt;br /&gt;
|-&lt;br /&gt;
|74LS20||1||0.33€||0.33€&lt;br /&gt;
|-&lt;br /&gt;
|100µf 16V Electrolytic Capacitor||1||0.04€||0.04€&lt;br /&gt;
|-&lt;br /&gt;
|100nf Ceramic Capacitor||6||0.03€||0.18€&lt;br /&gt;
|-&lt;br /&gt;
|1K 1/4W Resistor||1||0.05€||0.05€&lt;br /&gt;
|-&lt;br /&gt;
|1N4148 Diode||1||0.02€||0.02€&lt;br /&gt;
|-&lt;br /&gt;
|32 Pole IC Socket||1||0.50€||0.50€&lt;br /&gt;
|-&lt;br /&gt;
|50 (2x25) way Header RM 2.54||1||0.19€||0.19€&lt;br /&gt;
|-&lt;br /&gt;
|3x 3 way header RM 2.54 (for jumpers)||1||0.05€||0.05€&lt;br /&gt;
|-&lt;br /&gt;
|Jumper Bridge||3||0.05€||0.15€&lt;br /&gt;
|-&lt;br /&gt;
|50 way Centronics plug||1||1.80€||1.80€&lt;br /&gt;
|-&lt;br /&gt;
|50 way flat cable||1||0.20€||0.20€&lt;br /&gt;
|-&lt;br /&gt;
|50 flat cable connector||1||0.25€||0.25€&lt;br /&gt;
|-&lt;br /&gt;
|160x100x1.5mm 35µ Single Sided photo-resist PCB||1||1.70€||1.70€&lt;br /&gt;
|-&lt;br /&gt;
|||||||10.56€&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: In the picture above and also in the price list, I have chosen to use a header connector on the PCB. I did this because I intend using the MegaROM on both a UK CPC464 and a German CPC6128 and by using a header connector I can swap the connection cable to suit which CPC I'm connecting to. You may choose a direct connection to the PCB if you don't need this feature, dropping the price another few cents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MegaROM_Cables.png|400px|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Following EPROMs have been tested and are compatible with the MegaROM:&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|''Size''||''Type''||''Part No.s''&lt;br /&gt;
|-&lt;br /&gt;
|8x 128k||UV||27C1001, 27C010&lt;br /&gt;
|-&lt;br /&gt;
|8x 128k||Flash||28F010, 29C010&lt;br /&gt;
|-&lt;br /&gt;
|8x 256k||UV||27C2001, 27C020&lt;br /&gt;
|-&lt;br /&gt;
|8x 256k||Flash||28F020, 29C020&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Construction Tips ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Due to the fact that I needed the PCB to be single-sided, I was forced to have quite a few bridges in the layout. These should be soldered on first, because I have placed as many as possible underneath the ICs to keep the design looking tidy. You should use insulated wire for the bridges to avoid short circuits, because they are very close to each other. In the documents below there is bridge layout plan with just the bridges highlighted to make things easier.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The other components may be added in the order you prefer. For C6 (100µf Electrolytic) there are mounting positions for both radial and axial type parts. You only need to drill the two holes you require, the other two should be left un-drilled.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MegaROM_C6.PNG|300px|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The polarity of C6 and D1 is critical, the other capacitors and R1 may be soldered in either direction. The orientation for the ICs can be found in the part position layout file below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MegaROM_Bottom.png|360px|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The finished PCB is 73mm x 73mm. The four holes (M3) in each corner can be used for mounting within a housing or as I have done here, adding legs to keep the PCB off the desk. If you use metal parts as I did, you will need to add plastic insulators beneath the metal parts to avoid short circuits or damaging the tracks that are routed under the metal.&lt;br /&gt;
&lt;br /&gt;
Closing an IDC connector on a 50way flat cable can be a difficult task and if not done properly, may cost you a connector or two. I recommend first putting the cable in position and pushing it slightly closed to keep the cable in place, then place the connector in a bench vice with rubber between the metal of the vice and the connector, then slowly closing the vice on the connector until it reaches it's home position. You may have to re-position the connector a few times until it's completely closed. Bad connections with these connectors are the cause of many peripherals not working, the pins in the centre cause the most issues, so turn the connector 90° in the vice for a final squeeze to make sure these pins are properly connected. Don't try closing an IDC connector with a hammer, pliers or other tool that only applies pressure to a tiny area of the connector, it will break!&lt;br /&gt;
&lt;br /&gt;
== Using The MegaROM ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using your favourite EPROM Programmer, you can burn the ROM images to the locations shown below. You can either do this ROM for ROM or compile one single ROM file to burn in one go. You should set the EPROM programmer to only write to the area required, in case you want to add additional ROMs later, any unwritten area will be regarded as empty by the CPC. Below you can see the memory allocation for each virtual ROM within the EPROM. This file is also available below in PDF Format.&lt;br /&gt;
&lt;br /&gt;
A full list of available ROMs can be found [[ROM|here]].&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Image:MegaROM_Memory_Map.PNG|400px|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jumper Settings ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the PCB there are three jumpers, which need to be set. Jumper 1 enables or disables ROM 7 on the MegaROM to allow use of the internal ROM on the 6128. Jumper 2 enables or disables ROM 0 on the MegaROM to choose between the CPCs internal Basic ROM or an alternative Boot ROM on the MegaROM. Jumper 3 is used to select which type of EPROM is installed. If a 8x128k EPROM is installed, the jumper must be set to the correct position otherwise the CPC will not boot. If a 8x256k EPROM is installed, the jumper can be set to 256k to enable all 16 ROMs or to 128k to disable the upper 8 ROMs (8-15).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MegaROM_Jumpers.PNG|600px|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compatibility ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MegaROM_Screenshot.png|400px|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MegaROM is compatible with all 464, 664, 6128, 464+ and 6128+ and can be used to host standard ROM images such as [[AMSDOS]], [[BCPL]], [[FutureOS]], [[MAXAM]], [[Protext]], [[QuickCMD]], [[Utopia]], [[VDOS]], [[XD-DOS]]. A full list of available ROMs can be found [[ROM|here]].&lt;br /&gt;
&lt;br /&gt;
CPC Specific Limitations:&lt;br /&gt;
&lt;br /&gt;
* CPC464/664 - The 464 and 664 only scan and initialise ROMs 7 to 0 at start-up. ROMs 15 to 8 are only accessable if manually initialised.&lt;br /&gt;
* CPC6128 - Classic CPC6128 can not overwrite the internal ROM 7 with an external device, to make use of the external ROM 7 the CPC must be modified to allow the internal ROM 7 to be disabled (eg: By adding a switch to the internal ROMs Chip Enable pin)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The MegaROM fully decodes the Address and Data buses, so it should not clash with any other official expansions installed in parallel or plus cartridges. However, adding two or more ROMBoards to a CPC in Parallel will cause crashes in some circumstances.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:MegaROM_Layout.pdf]]  - PCB Track Layout&lt;br /&gt;
&lt;br /&gt;
[[File:MegaROM_Bridges.pdf]]  - PCB Bridge Position Layout&lt;br /&gt;
&lt;br /&gt;
[[File:MegaROM_Partpos.pdf]]  - PCB Component Position Layout&lt;br /&gt;
&lt;br /&gt;
[[File:MegaROM_Memory_Map.pdf]]  - EPROM Memory Allocations Chart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:DIY]] [[Category:Expansion ROM]] [[Category:FutureOS]] [[Category:Peripherals]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Amstrad_CSD&amp;diff=80137</id>
		<title>Amstrad CSD</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Amstrad_CSD&amp;diff=80137"/>
				<updated>2012-07-25T17:21:19Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Amstrad CSD was a machine that was in-store to demonstrate the hardware of the Amstrad plus.&lt;br /&gt;
&lt;br /&gt;
It had a system cartridge which contained a menu, and could hold a furthur 12 cartridges.&lt;br /&gt;
&lt;br /&gt;
It has additional hardware to allow switching of cartridges.&lt;br /&gt;
&lt;br /&gt;
==Technical==&lt;br /&gt;
&lt;br /&gt;
The information was derived from the software. It is not completely accurate.&lt;br /&gt;
Lots of information is not known at this time.&lt;br /&gt;
&lt;br /&gt;
It uses ports fbe0-fbe3. The exact decoding of these ports is unknown.&lt;br /&gt;
&lt;br /&gt;
 fbe0 is read only it seems&lt;br /&gt;
bits 7..4 seem to be related to the dip switches on the CSD &lt;br /&gt;
 bit 7 seems to be fixed to GND/0v.&lt;br /&gt;
 bit 6,5 is the timer value. It is the time allowed between choosing next cartridge to play. &lt;br /&gt;
bit 6, bit 5&lt;br /&gt;
&lt;br /&gt;
 off off = 8			1 1&lt;br /&gt;
 off on = 16			1 0&lt;br /&gt;
 on off = 24			0 1&lt;br /&gt;
 on on = 32 			0 0&lt;br /&gt;
&lt;br /&gt;
bit 4 seems to be timer on/off for time limited play.&lt;br /&gt;
fbe0 bits 3..0 are defined by the dial&lt;br /&gt;
bit 3 is ignored.&lt;br /&gt;
&lt;br /&gt;
 0 = forever?&lt;br /&gt;
 1 = 8s,&lt;br /&gt;
 2 = 56s&lt;br /&gt;
&lt;br /&gt;
fbe2 is read only it seems&lt;br /&gt;
bits 7..3 are the currently selected cartridge&lt;br /&gt;
bits 3..0 ???&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fbe1 is writeable &lt;br /&gt;
bits 7,6: ???&lt;br /&gt;
bits 5..0: are cartridge number??&lt;br /&gt;
&lt;br /&gt;
fbe3 is writeable:&lt;br /&gt;
bits 7..4: are cartridge number&lt;br /&gt;
bits 3..0: ???&lt;br /&gt;
&lt;br /&gt;
== Pictures ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;Some photos of Amstrad Expo 90&amp;quot;&amp;gt;&lt;br /&gt;
Image:csdscreen1.jpg&lt;br /&gt;
Image:csdscreen2.jpg&lt;br /&gt;
Image:csdface.jpg&lt;br /&gt;
Image:csddaughter.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:CSD Jukebox.cpr]] (JukeBox Cartridge .CPR file)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Courtesy of Amstrad.cpc.free.fr&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]][[Category:CPC Plus]][[Category:Amstrad Products]][[Category:Cartridges]][[Category:Expansion ROM]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=File:CSD_Jukebox.cpr&amp;diff=80136</id>
		<title>File:CSD Jukebox.cpr</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=File:CSD_Jukebox.cpr&amp;diff=80136"/>
				<updated>2012-07-25T17:18:14Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=User:Devilmarkus&amp;diff=78247</id>
		<title>User:Devilmarkus</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=User:Devilmarkus&amp;diff=78247"/>
				<updated>2012-06-06T01:01:43Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Devilmarkus.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
'''Devilmarkus''' (*1973) is a CPC user from Germany.&lt;br /&gt;
&lt;br /&gt;
'''Devilmarkus'''' real name is Markus Hohmann and he is from Hannover, Germany.&lt;br /&gt;
&lt;br /&gt;
His CPC roots started in 1985 when he got his first computer, the Schneider CPC 464.&lt;br /&gt;
&lt;br /&gt;
After a long pause, he went back to the Amstrad CPC in 2004.&lt;br /&gt;
&lt;br /&gt;
He begun modifying [[JEMU]] in 2006 and from this project he created a new project [[JavaCPC]].&lt;br /&gt;
&lt;br /&gt;
Since 2010 [[JavaCPC]] is discontinued and has grown to the project [[JavaCPC Desktop]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Productions==&lt;br /&gt;
&lt;br /&gt;
===Emulators===&lt;br /&gt;
* [[JavaCPC]] - CPC emulator written in Java, based on [[JEMU]] by [[Executioner]]&lt;br /&gt;
* [[JavaCPC Desktop]] - Frontend CPC emulator written in Java, containing many apps. and tools to make CPCing easier. Features it's own Desktop.&lt;br /&gt;
* [[CPCInAJar]] - Small and dirty CPC 6128 emulator, based on [[JEMU]] and [[JavaCPC]], in exactly 128k size&lt;br /&gt;
* [[WebCPC]] - Outdated and abandoned online applet CPC emulator.&lt;br /&gt;
* [http://java.cpc-live.com/ JavaCPC Applet]&amp;amp;nbsp;&amp;amp;nbsp;JavaCPC as applet in a website containing many games and demos to play online.&lt;br /&gt;
&lt;br /&gt;
===Tools===&lt;br /&gt;
* [[CDT2WAV]] - Transforms CDT images into WAV format.&lt;br /&gt;
* [[DiskUtil]] - Java GUI combines SamDisk and CPCXFS to transfer files from DSK to PC and vice versa. Can transfer DSK images to floppy drives and read DSK from disks.&lt;br /&gt;
* [[TapeUtil]] - Little Java tool, which can be used to record tapes played on a CPC 464 as WAV and convert them to CDT.&lt;br /&gt;
&lt;br /&gt;
===Demos===&lt;br /&gt;
* [[Safe Sex]] - CPC demo showing the sample playback capability of the CPC.&lt;br /&gt;
* [[Alphaville Demo]] - AY chiptune combined with digitized video sequences. Uses 128k of RAM.&lt;br /&gt;
* [[JavaCPC Demo]] - Animation done in MODE 1 and rasters.&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=User:Devilmarkus&amp;diff=78246</id>
		<title>User:Devilmarkus</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=User:Devilmarkus&amp;diff=78246"/>
				<updated>2012-06-06T00:54:35Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: Protected &amp;quot;User:Devilmarkus&amp;quot; ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Devilmarkus.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
'''Devilmarkus''' (*1973) is a CPC user from Germany.&lt;br /&gt;
&lt;br /&gt;
'''Devilmarkus'''' real name is Markus Hohmann and he is from Hannover, Germany.&lt;br /&gt;
&lt;br /&gt;
His CPC roots started in 1985 when he got his first computer, the Schneider CPC 464.&lt;br /&gt;
&lt;br /&gt;
After a long pause, he went back to the Amstrad CPC in 2004.&lt;br /&gt;
&lt;br /&gt;
He begun modifying [[JEMU]] in 2006 and from this project he created a new project [[JavaCPC]].&lt;br /&gt;
&lt;br /&gt;
Since 2010 [[JavaCPC]] is discontinued and has grown to the project [[JavaCPC Desktop]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Productions==&lt;br /&gt;
&lt;br /&gt;
===Emulators===&lt;br /&gt;
* [[JavaCPC]] - CPC emulator written in Java, based on [[JEMU]] by [[Executioner]]&lt;br /&gt;
* [[JavaCPC Desktop]] - Frontend CPC emulator written in Java, containing many apps. and tools to make CPCing easier. Features it's own Desktop.&lt;br /&gt;
* [[CPCInAJar]] - Small and dirty CPC 6128 emulator, based on [[JEMU]] and [[JavaCPC]], in exactly 128k size&lt;br /&gt;
&lt;br /&gt;
===Tools===&lt;br /&gt;
* [[CDT2WAV]] - Transforms CDT images into WAV format.&lt;br /&gt;
* [[DiskUtil]] - Java GUI combines SamDisk and CPCXFS to transfer files from DSK to PC and vice versa. Can transfer DSK images to floppy drives and read DSK from disks.&lt;br /&gt;
* [[TapeUtil]] - Little Java tool, which can be used to record tapes played on a CPC 464 as WAV and convert them to CDT.&lt;br /&gt;
&lt;br /&gt;
===Demos===&lt;br /&gt;
* [[Safe Sex]] - CPC demo showing the sample playback capability of the CPC.&lt;br /&gt;
* [[Alphaville Demo]] - AY chiptune combined with digitized video sequences. Uses 128k of RAM.&lt;br /&gt;
* [[JavaCPC Demo]] - Animation done in MODE 1 and rasters.&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=User:Devilmarkus&amp;diff=78245</id>
		<title>User:Devilmarkus</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=User:Devilmarkus&amp;diff=78245"/>
				<updated>2012-06-06T00:53:33Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Devilmarkus.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
'''Devilmarkus''' (*1973) is a CPC user from Germany.&lt;br /&gt;
&lt;br /&gt;
'''Devilmarkus'''' real name is Markus Hohmann and he is from Hannover, Germany.&lt;br /&gt;
&lt;br /&gt;
His CPC roots started in 1985 when he got his first computer, the Schneider CPC 464.&lt;br /&gt;
&lt;br /&gt;
After a long pause, he went back to the Amstrad CPC in 2004.&lt;br /&gt;
&lt;br /&gt;
He begun modifying [[JEMU]] in 2006 and from this project he created a new project [[JavaCPC]].&lt;br /&gt;
&lt;br /&gt;
Since 2010 [[JavaCPC]] is discontinued and has grown to the project [[JavaCPC Desktop]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Productions==&lt;br /&gt;
&lt;br /&gt;
===Emulators===&lt;br /&gt;
* [[JavaCPC]] - CPC emulator written in Java, based on [[JEMU]] by [[Executioner]]&lt;br /&gt;
* [[JavaCPC Desktop]] - Frontend CPC emulator written in Java, containing many apps. and tools to make CPCing easier. Features it's own Desktop.&lt;br /&gt;
* [[CPCInAJar]] - Small and dirty CPC 6128 emulator, based on [[JEMU]] and [[JavaCPC]], in exactly 128k size&lt;br /&gt;
&lt;br /&gt;
===Tools===&lt;br /&gt;
* [[CDT2WAV]] - Transforms CDT images into WAV format.&lt;br /&gt;
* [[DiskUtil]] - Java GUI combines SamDisk and CPCXFS to transfer files from DSK to PC and vice versa. Can transfer DSK images to floppy drives and read DSK from disks.&lt;br /&gt;
* [[TapeUtil]] - Little Java tool, which can be used to record tapes played on a CPC 464 as WAV and convert them to CDT.&lt;br /&gt;
&lt;br /&gt;
===Demos===&lt;br /&gt;
* [[Safe Sex]] - CPC demo showing the sample playback capability of the CPC.&lt;br /&gt;
* [[Alphaville Demo]] - AY chiptune combined with digitized video sequences. Uses 128k of RAM.&lt;br /&gt;
* [[JavaCPC Demo]] - Animation done in MODE 1 and rasters.&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=User:Devilmarkus&amp;diff=78244</id>
		<title>User:Devilmarkus</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=User:Devilmarkus&amp;diff=78244"/>
				<updated>2012-06-06T00:49:23Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Devilmarkus.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
'''Devilmarkus''' (*1973) is a CPC user from Germany. He is the coder of the CPC emulator [[JavaCPC]].&lt;br /&gt;
&lt;br /&gt;
==Productions==&lt;br /&gt;
&lt;br /&gt;
===Emulators===&lt;br /&gt;
* [[JavaCPC]] - CPC emulator written in Java, based on [[JEMU]] by [[Executioner]]&lt;br /&gt;
* [[JavaCPC Desktop]] - Frontend CPC emulator written in Java, containing many apps. and tools to make CPCing easier. Features it's own Desktop.&lt;br /&gt;
* [[CPCInAJar]] - Small and dirty CPC 6128 emulator, based on [[JEMU]] and [[JavaCPC]], in exactly 128k size&lt;br /&gt;
&lt;br /&gt;
===Tools===&lt;br /&gt;
* [[CDT2WAV]] - Transforms CDT images into WAV format.&lt;br /&gt;
* [[DiskUtil]] - Java GUI combines SamDisk and CPCXFS to transfer files from DSK to PC and vice versa. Can transfer DSK images to floppy drives and read DSK from disks.&lt;br /&gt;
* [[TapeUtil]] - Little Java tool, which can be used to record tapes played on a CPC 464 as WAV and convert them to CDT.&lt;br /&gt;
&lt;br /&gt;
===Demos===&lt;br /&gt;
* [[Safe Sex]] - CPC demo showing the sample playback capability of the CPC.&lt;br /&gt;
* [[Alphaville Demo]] - AY chiptune combined with digitized video sequences. Uses 128k of RAM.&lt;br /&gt;
* [[JavaCPC Demo]] - Animation done in MODE 1 and rasters.&lt;br /&gt;
&lt;br /&gt;
'''Devilmarkus'''' real name is Markus Hohmann and he is from Hannover, Germany.&lt;br /&gt;
&lt;br /&gt;
His CPC roots started in 1985 when he got his first computer, the Schneider CPC 464.&lt;br /&gt;
&lt;br /&gt;
After a long pause, he went back to the Amstrad CPC in 2004.&lt;br /&gt;
&lt;br /&gt;
He begun modifying [[JEMU]] in 2006 and from this project he created a new project [[JavaCPC]].&lt;br /&gt;
&lt;br /&gt;
Since 2010 [[JavaCPC]] is discontinued and has grown to the project [[JavaCPC Desktop]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=File:Devilmarkus.jpg&amp;diff=78243</id>
		<title>File:Devilmarkus.jpg</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=File:Devilmarkus.jpg&amp;diff=78243"/>
				<updated>2012-06-06T00:48:33Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=User:Devilmarkus&amp;diff=78242</id>
		<title>User:Devilmarkus</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=User:Devilmarkus&amp;diff=78242"/>
				<updated>2012-06-06T00:45:47Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: Created page with &amp;quot;'''Devilmarkus''' (*1973) is a CPC user from Germany. He is the coder of the CPC emulator JavaCPC.  ==Productions==  ===Emulators=== * JavaCPC - CPC emulator written in J...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Devilmarkus''' (*1973) is a CPC user from Germany. He is the coder of the CPC emulator [[JavaCPC]].&lt;br /&gt;
&lt;br /&gt;
==Productions==&lt;br /&gt;
&lt;br /&gt;
===Emulators===&lt;br /&gt;
* [[JavaCPC]] - CPC emulator written in Java, based on [[JEMU]] by [[Executioner]]&lt;br /&gt;
* [[JavaCPC Desktop]] - Frontend CPC emulator written in Java, containing many apps. and tools to make CPCing easier. Features it's own Desktop.&lt;br /&gt;
* [[CPCInAJar]] - Small and dirty CPC 6128 emulator, based on [[JEMU]] and [[JavaCPC]], in exactly 128k size&lt;br /&gt;
&lt;br /&gt;
===Tools===&lt;br /&gt;
* [[CDT2WAV]] - Transforms CDT images into WAV format.&lt;br /&gt;
* [[DiskUtil]] - Java GUI combines SamDisk and CPCXFS to transfer files from DSK to PC and vice versa. Can transfer DSK images to floppy drives and read DSK from disks.&lt;br /&gt;
* [[TapeUtil]] - Little Java tool, which can be used to record tapes played on a CPC 464 as WAV and convert them to CDT.&lt;br /&gt;
&lt;br /&gt;
===Demos===&lt;br /&gt;
* [[Safe Sex]] - CPC demo showing the sample playback capability of the CPC.&lt;br /&gt;
* [[Alphaville Demo]] - AY chiptune combined with digitized video sequences. Uses 128k of RAM.&lt;br /&gt;
* [[JavaCPC Demo]] - Animation done in MODE 1 and rasters.&lt;br /&gt;
&lt;br /&gt;
'''Devilmarkus'''' real name is Markus Hohmann and he is from Hannover, Germany.&lt;br /&gt;
&lt;br /&gt;
His CPC roots started in 1985 when he got his first computer, the Schneider CPC 464.&lt;br /&gt;
&lt;br /&gt;
After a long pause, he went back to the Amstrad CPC in 2004.&lt;br /&gt;
&lt;br /&gt;
He begun modifying [[JEMU]] in 2006 and from this project he created a new project [[JavaCPC]].&lt;br /&gt;
&lt;br /&gt;
Since 2010 [[JavaCPC]] is discontinued and has grown to the project [[JavaCPC Desktop]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=SMIDP2lib_for_SDCC&amp;diff=71775</id>
		<title>SMIDP2lib for SDCC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=SMIDP2lib_for_SDCC&amp;diff=71775"/>
				<updated>2011-12-20T15:41:28Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Current version of this page: v0.1''&lt;br /&gt;
&lt;br /&gt;
''Current version of sMIDP2lib: None''&lt;br /&gt;
&lt;br /&gt;
== What is sMIDP2lib? ==&lt;br /&gt;
&lt;br /&gt;
'''sMIDP2lib''' is currently only an experimental project-idea spawned by mr_lou in December 2011. Being a sparetime J2ME developer (Java Micro Edition, used for cellphone development) since 2006 (see www.lublu.dk), he got the idea of doing CPC development using a framework library for SDCC containing the same method-names used when doing J2ME development.&lt;br /&gt;
&lt;br /&gt;
The idea is simple: Implement selected methods from the MIDP2.0 API (Mobile Information Device Profile) in assembler routines, and embed those routines in SDCC functions. The end result should be a [[:Category:C|C library]] to be included in your SDCC project.&lt;br /&gt;
&lt;br /&gt;
The point of this would first and foremost be to make it easier and quicker for J2ME developers to develop for the CPC, but of course also to provide an alternative library to CPCRSlib for Z88DK.&lt;br /&gt;
A library like this would make it possible for J2ME developers to develop for the CPC much faster. Or even develop the same game for J2ME and the CPC at the same time (with some music and graphic conversion).&lt;br /&gt;
&lt;br /&gt;
Naturally not the whole MIDP2.0 API needs to be implemented. Thus the name sMIDP2lib = Semi MIDP2.0 API library.&lt;br /&gt;
&lt;br /&gt;
== Why a J2ME-based library? ==&lt;br /&gt;
&lt;br /&gt;
J2ME was designed to run on small limited devices, and it consists of simple methods. To compare, Android has a ton of advanced and complex drawing methods that would be very difficult to implement for the CPC. But the Graphics class of J2ME is very simple and straightforward easy to understand for everyone.&lt;br /&gt;
Because of the simplicity of the MIDP2.0 API, it should theoretically also be possible to implement these methods using assembler routines on the CPC, and get an acceptable speed too. Maybe not at an ultra fast framerate, but an acceptable one. And that's what this project is about in stage 1: Seeing if it's possible.&lt;br /&gt;
&lt;br /&gt;
=== Portability ===&lt;br /&gt;
&lt;br /&gt;
In the past, mr_lou has been working on sMIDP2lib versions for other platforms as well, such as&lt;br /&gt;
* HTML5/Javascript&lt;br /&gt;
* Flash&lt;br /&gt;
* Android&lt;br /&gt;
&lt;br /&gt;
This opens up for potential easy porting to 4 other platforms: If CPC developers use sMIDP2lib with SDCC, they should theoretically be able to port their software to J2ME, Android, Flash or HTML5/Javascript relatively fast. (See external links at the bottom of this page for a HTML5/Javascript and Flash example of sMIDP2lib).&lt;br /&gt;
&lt;br /&gt;
''HTML5/Javascript and Flash source of sMIDP2lib is free for anyone who wants it. The Android version is private for now though.''&lt;br /&gt;
&lt;br /&gt;
== General guidelines ==&lt;br /&gt;
&lt;br /&gt;
Since the idea behind sMIDP2lib is to be a semi MIDP2.0 library, all CPC firmware routines can (theoretically) be dumped. They will never be used anyway (as far as I can see right now). This means we're free to use EXX instructions and other tricks to speed things up - and '''speed IS important''' in this library. Speed comes before most other things. As a result, it might be ok to settle for e.g. a drawLine() method that can only draw a line 255 pixels long.&lt;br /&gt;
&lt;br /&gt;
This also means that we'll need to implement a few extra methods, in order to do stuff like setting inks and border color. That's ok though, because we'd probably need to do that anyway since we'll be using custom methods.&lt;br /&gt;
&lt;br /&gt;
=== ints vs shorts vs chars ===&lt;br /&gt;
&lt;br /&gt;
In the description of the methods below, you will notice that all methods take ints. This will not necessarily be the case in sMIDP2lib though. If it improves speed using unsigned shorts or even unsigned chars/bytes, then that'll probably be what we'll do instead. For now, each method is described with ints though.&lt;br /&gt;
&lt;br /&gt;
=== Memory requirements and handling ===&lt;br /&gt;
&lt;br /&gt;
Executables produced with sMIDP2lib will require a CPC with 128kb of RAM, and since loading of data is done dynamically, a disk-drive is also a very good idea. Otherwise it should run on all CPC's. No special requirements for CRTC type and such.&lt;br /&gt;
&lt;br /&gt;
All loading of image and music into memory must of course be handled in some way. I am far from an expert on this area, but I imagine some kind of iterator, keeping track of where the next available memory is. Therefor we also need some way of freeing memory again, e.g. when we close a Player (for example to load a new tune).&lt;br /&gt;
This is far from worked out at this stage though.&lt;br /&gt;
&lt;br /&gt;
== Supported Methods ==&lt;br /&gt;
&lt;br /&gt;
The initial very first version of sMIDP2lib is imagined to support to following few methods of MIDP2.0:&lt;br /&gt;
&lt;br /&gt;
* javax.microedition.lcdui.game.GameCanvas.getGraphics();&lt;br /&gt;
* javax.microedition.lcdui.game.GameCanvas.flushGraphics();&lt;br /&gt;
* javax.microedition.lcdui.Displayable.getWidth();&lt;br /&gt;
* javax.microedition.lcdui.Displayable.getHeight();&lt;br /&gt;
* ''javax.microedition.lcdui.Image.createImage(String source-filename);''&lt;br /&gt;
* javax.microedition.lcdui.Image.getHeight();&lt;br /&gt;
* javax.microedition.lcdui.Image.getWidth();&lt;br /&gt;
* ''javax.microedition.lcdui.Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height);''&lt;br /&gt;
* ''javax.microedition.lcdui.Graphics.drawImage(Image img, int x, int y, int anchor);''&lt;br /&gt;
* ''javax.microedition.lcdui.Graphics.drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha);''&lt;br /&gt;
* javax.microedition.lcdui.Graphics.drawLine(int x1, int y1, int x2, int y2);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.drawRect(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.fillRect(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.setClip(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.setColor(int RGB);&lt;br /&gt;
* ''javax.microedition.media.Manager.createPlayer(String source-filename);''&lt;br /&gt;
&lt;br /&gt;
The ones written ''in italic'' are some of the more heavier methods, and thus some that will most likely be implemented last in this first stage.&lt;br /&gt;
&lt;br /&gt;
For all these methods goes, that coordinates (0,0) is located in the upper left corner of the screen. On the CPC, the lower right corner will be coordinate (319,199). '''Only MODE 1 will be supported in the first many versions of sMIDP2lib.''' If the project becomes popular, it's likely a MODE 0 version will be produced also.&lt;br /&gt;
If possible, it might be a good idea to change the resolution of the CPC MODE 1 from 319*199 to 240*320, since this is the resolution commonly used in J2ME productions. ''Is it possible to get a MODE 1 resolution of 240x320 pixels that'll work with a lib like this?''&lt;br /&gt;
Another idea is to use a resolution of 255x255 pixels, if 255 pixels ends up being a limitation of the drawLine() and other methods.&lt;br /&gt;
&lt;br /&gt;
Besides the methods from the MIDP2.0 API, we also need a few additional methods that aren't part of the MIDP2.0 API. These methods are:&lt;br /&gt;
* setBorder(int color);&lt;br /&gt;
* setInk(int pen, int color);&lt;br /&gt;
&lt;br /&gt;
They are quite self-explanatory, so I won't go into further details about them.&lt;br /&gt;
&lt;br /&gt;
But all the MIDP2.0 API methods are described below along with how they could be adapted to the CPC.&lt;br /&gt;
&lt;br /&gt;
=== GameCanvas.getGraphics() ===&lt;br /&gt;
''J2ME description: Obtains the Graphics object for rendering a GameCanvas.''&lt;br /&gt;
In J2ME this method returns a Graphics object, needed for doing all the drawing on the screen.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method should return a struct with pointers to the methods of the Graphics class. In other words, getGraphics() will be a method that simply does: return new Graphics();&lt;br /&gt;
&lt;br /&gt;
More knowledge about C and SDCC is needed before giving an example of how such a struct could look like.&lt;br /&gt;
&lt;br /&gt;
=== GameCanvas.flushGraphics() ===&lt;br /&gt;
''J2ME description: Flushes the off-screen buffer to the display.''&lt;br /&gt;
In J2ME this is the call that throws all your drawing onto the screen. If you don't call this method, nothing will be displayed.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method should toggle between 2 buffer-screens. When one is visible, drawing takes place on the other. When flushGraphics() is called, the visible buffer-screen and the hidden buffer-screen switches place.&lt;br /&gt;
&lt;br /&gt;
J2ME example for getGraphics() and flushGraphics():&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graphics g = getGraphics();&lt;br /&gt;
g.setColor(0x00ff00); // Green&lt;br /&gt;
g.fillRect(10,10,30,30); // Draw a 30x30 big box at 10,10 with green color&lt;br /&gt;
flushGraphics(); // flush to screen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sMIDP2lib example for getGraphics() and flushGraphics():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graphics g = getGraphics();&lt;br /&gt;
g.setColor(1); // Pen 1&lt;br /&gt;
g.fillRect(10,10,30,30); // Draw a 30x30 big box at 10,10 with pen 1&lt;br /&gt;
flushGraphics(); // Toggle screen address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Displayable.getWidth() ===&lt;br /&gt;
''J2ME description: Gets the width in pixels of the displayable area available to the application.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this will simply return 319&lt;br /&gt;
&lt;br /&gt;
=== Displayable.getHeight() ===&lt;br /&gt;
''J2ME description: Gets the height in pixels of the displayable area available to the application.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this will simply return 199&lt;br /&gt;
&lt;br /&gt;
=== Image.createImage(String source-filename) ===&lt;br /&gt;
''J2ME description: Creates an immutable image from a source image.''&lt;br /&gt;
This is the method used in J2ME for loading an image from within the jar file. (A zip file containing all the classes and resources). It returns an Image object.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, I imagine it will load the image from disk, store it in memory, create a struct that holds a pointer to the image data, along with two shorts holding the image dimensions, and two pointers to the methods getHeight() and getWidth() that returns the dimensions.&lt;br /&gt;
&lt;br /&gt;
That way you will be able to do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
myImage = Image.createImage(&amp;quot;/pic.dat&amp;quot;);&lt;br /&gt;
g.drawImage(myImage, 0, 0, 0);&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fileformat will be a custom fileformat. Read more below.&lt;br /&gt;
&lt;br /&gt;
In the above example, notice that the filename is preceeded by a slash. This is required in J2ME for some reason, when loading images, while other similar looking methods doesn't require it. Therefor sMIDP2lib should always check if the first character in a filename is a slash, and simply ignore it if it is. (Goes for createImage and createPlayer for example).&lt;br /&gt;
&lt;br /&gt;
=== Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Obtains ARGB pixel data from the specified region of this image and stores it in the provided array of integers.''&lt;br /&gt;
This method is used in J2ME to save a piece of an image in an array.&lt;br /&gt;
&lt;br /&gt;
A method like this will be particular useful on the CPC, since it allows us to '''not''' re-draw the whole screen in each iteration, but instead simply save the pieces of background-layers that was drawn over in the previous iteration.&lt;br /&gt;
&lt;br /&gt;
Naturally we won't have RGB data, but instead the byteData of the CPC-representation of image.&lt;br /&gt;
&lt;br /&gt;
The tricky part about this method is, that in J2ME it's always performed on an Image object - which we don't have in sMIDP2lib (and aren't interested in either). But to stay within the MIDP2.0 API specs, we need to keep it that way.&lt;br /&gt;
In order to use this method in J2ME the way we'd use it on the CPC, J2ME devs would need to create a buffer-image to draw too, before drawing to the Graphics object of the canvas. In other words they'd do something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics(); // Get the graphics object of the canvas&lt;br /&gt;
bufferImage = Image.createImage(getWidth(), getHeight()); // Creates an image same size as the screen display size&lt;br /&gt;
buffer_g = bufferImage.getGraphics(); // Get the graphics object of that Image so we can draw on it. (Not in sMIDP2lib)&lt;br /&gt;
buffer_g.setClip(0,0,getWidth(),getHeight());&lt;br /&gt;
buffer_g.setColor(0x000000); // Black color&lt;br /&gt;
buffer_g.fillRect(0,0,getWidth(),getHeight()); // Clear the background&lt;br /&gt;
buffer_g.setColor(0xffffff); // White color&lt;br /&gt;
buffer_g.drawLine(0,0,getHeight(),getWidth()); // Draw a white line across the image&lt;br /&gt;
int[] storedPieceOfBackground = new int[256];&lt;br /&gt;
bufferImage.getRGB(storedPieceOfBackground,0,16,0,0,16,16); // Copy the image data at (0,0) 16x16 pixels into the array storedPieceOfBackground&lt;br /&gt;
bufferImage.setClip(0,0,16,16); // Set clip to the rectangle we just copied&lt;br /&gt;
bufferImage.drawImage(mySprites,-16,0,0); // Draw the 2nd sprite of my sprite-sheet in that clip&lt;br /&gt;
&lt;br /&gt;
// In the next loop-iteration, we can simply draw the storedPieceOfBackground on the spot where the sprite were.&lt;br /&gt;
// That way we don't have to re-draw the entire screen.&lt;br /&gt;
&lt;br /&gt;
g.setClip(0,0,getWidth(),getHeight()); // And finally...&lt;br /&gt;
g.drawImage(bufferImage,0,0,0); // Draw the bufferImage onto the screen&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is called double-buffering in J2ME.&lt;br /&gt;
Since sMIDP2lib will also be doing automatic double-buffering, we can adapt this method. Instead of creating another Image, we'll simply have access to to the already existing buffer-screen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
unsigned char[] storedPieceOfBackground = new char[64]; // We only need space for 64 bytes, since that equals 256 pixels.&lt;br /&gt;
sMIDP2lib_bufferscreen.getRGB(storedPieceOfBackground, 0, 0, 0, 0, 16 16); // Size is still given in pixels, so the getRGB method needs to take care of the division by 4 and such&lt;br /&gt;
// We ignore the offset and scanlength. They'll need to be part of the method, but will be ignored.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The variable sMIDP2lib_bufferscreen is a struct containing a pointer to the address of the current buffer-screen, meaning the one we're currently drawing to. (We'll always be drawing to the non-visible screen). When ever flushGraphics() is called, the current non-visible buffer-screen is shown, and the previous visible screen not becomes the buffer-screen. Therefor, the pointer in the sMIDP2lib_bufferscreen struct, will change value when flushGraphics() is called.&lt;br /&gt;
&lt;br /&gt;
This is a good solution because we keep the MIDP2.0 API structure, and we aren't creating overhead since the data in the arrays can be overridden again and again.&lt;br /&gt;
&lt;br /&gt;
Since we now have an array of byte data, we need a corresponding drawRGB() method to draw it again. See below.&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawImage(Image img, int x, int y, int anchor) ===&lt;br /&gt;
''J2ME description: Draws the specified image by using the anchor point.''&lt;br /&gt;
In J2ME, this method takes an Image object and renders on the screen. The anchor point is used to indicate where on the image x and y is. For example, anchor can be Graphics.TOP|Graphics.LEFT (which is typically equal to 0) which means that x,y is in the upper left corner of the image.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method obviously can't take an object as parameter. Instead it will take a struct as parameter (as described above). This struct contains the address of the image data, along with the dimensions of the image.&lt;br /&gt;
In the initial very first version of sMIDP2lib, the anchor parameter will be ignored. x,y will always be in the upper left corner.&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha) ===&lt;br /&gt;
''J2ME description: Renders a series of device-independent RGB+transparency values in a specified region.''&lt;br /&gt;
&lt;br /&gt;
This method will always be used in combination with Graphics.getRGB(), and will thus need adaptions similar to that method.&lt;br /&gt;
Like with getRGB() we will ignore the scanlength parameter. (At least in the first versions of sMIDP2lib). We will also ignore the processAlpha parameter. But both parameters will still need to be part of the method.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g.drawRGB(storedPieceOfBackground, 0, 0, 0, 0, 16, 16, false);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''I don't know what possibilities we have in C regarding arrays as parameter. Logically for it to work on the CPC, only a pointer to the array should be used. I need to experiment and ask around though.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawLine(int x1, int y1, int x2, int y2) ===&lt;br /&gt;
''J2ME description: Draws a line between the coordinates (x1,y1) and (x2,y2) using the current color and stroke style.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawRect(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Draws the outline of the specified rectangle using the current color and stroke style.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.fillRect(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Fills the specified rectangle with the current color.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.setClip(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Sets the current clip to the rectangle specified by the given coordinates.''&lt;br /&gt;
This is a very important method, that defines where on the canvas the following drawing-methods should draw. It is this method that allows you to load a sprite-sheet containing 4x4 sprites, and then only draw one of them.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
mySprites = Image.createImage(&amp;quot;sprites.img&amp;quot;); // Loads sprites.img that contains 4x4 sprites of 16x16 pixels each&lt;br /&gt;
g.setClip(50,50,16,16); // Defines the clip to be at (50,50) and 16x16 pixels big.&lt;br /&gt;
g.drawImage(mySprites, 34, 50, 0); // Draws the spritesheet at (34,50);&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above example, it will be the 2nd sprite in the top row that'll be displayed, because the whole picture is drawn -16 pixels from the clip X.&lt;br /&gt;
&lt;br /&gt;
Any Graphics method called after a setClip() will only affect the defined clip.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
g.setClip(50,50,16,16); // Defines the clip to be at (50,50) and 16x16 pixels big.&lt;br /&gt;
g.fillRect(0,0,100,100); // Only fills the above clip despite of different values in the fillRect method&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially before setting a clip, the default clip will be the whole screen (0,0,getWidth(),getHeight()). However, because your main loop will probably contains a lot of calls to setClip(), you should always call setClip(0,0,getWidth(),getHeight()) before calling fillRect(0,0,getWidth(),getHeight()).&lt;br /&gt;
&lt;br /&gt;
=== Graphics.setColor(int RGB) ===&lt;br /&gt;
''J2ME description: Sets the current color to the specified RGB values.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib we obviously don't have RGB colors. So this method will be adapted into taking just the pen-number. In other words, a number between 0 and 3 (because we only support MODE 1 for now).&lt;br /&gt;
Since this leaves us without any way of setting inks for each pen, we need to add some additional methods that aren't part of the MIDP2.0 API. These are:&lt;br /&gt;
setBorder(int color);&lt;br /&gt;
setInk(int pen, int color);&lt;br /&gt;
&lt;br /&gt;
=== Manager.createPlayer(String source-filename) ===&lt;br /&gt;
''J2ME description: Create a Player to play back media.''&lt;br /&gt;
Returns a Player object, that has methods such as start() and stop(). With J2ME you can play mp3, wav, and midi. As we know, we can't do that with the CPC.&lt;br /&gt;
&lt;br /&gt;
So instead sMIDP2lib must be able to load STarKos music files. The method should, like the createImage() method, return a struct with pointers to methods like start() and stop().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
music = Manager.createPlayer(&amp;quot;music.bin&amp;quot;); // Loads the music from disk&lt;br /&gt;
music.start(); // Calls STarKos playback routine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image file format ==&lt;br /&gt;
&lt;br /&gt;
I imagine the fileformat of images to be a rather simple one. Its first byte will contain the width of the image. The next byte will contain the height of the image. That way an image can max be 255x255 pixels big. ''This is only a thought, and will possibly change into 2 bytes for each value instead''. The rest of the data is the image itself, using standard CPC representation of image-data.&lt;br /&gt;
&lt;br /&gt;
Any image-size within that limitation can then be loaded. Doesn't have to be fullscreen images. You can load a small sprite-sheet of e.g. 64*128 pixels, and then also load another image containing a font and having a size of 480x8 pixels. Each image will be accessible through their structs.&lt;br /&gt;
&lt;br /&gt;
A Java command-line utility will ideally be created (if one doesn't exist already) that will convert 8bit PNG files (and/or maybe other formats) into the sMIDP2lib image format.&lt;br /&gt;
&lt;br /&gt;
== Issues to solve ==&lt;br /&gt;
&lt;br /&gt;
Currently, there are the following issues to work out a solution for:&lt;br /&gt;
=== Double-buffering makes it problematic to &amp;quot;un-draw&amp;quot; ===&lt;br /&gt;
While double-buffering can potentially make things more smooth, it also causes some problems when it updates only parts of the screen.&lt;br /&gt;
Consider a sprite moving from left to right, an unknown number of pixels each frame, on top of a background. You would then use sMIDP2lib_bufferscreen.getRGB() to store the piece of background you're about to draw on, in order to be able to redraw the background in next frame. Let's say the sprite is about to be drawn at (10,0) and it's a 16x16 pixels bit sprite. Then before drawing the sprite, you would call sMIDP2lib_bufferscreen.getRGB() to save the 16x16 pixels piece of background, and then draw the sprite and then call flushGraphics().&lt;br /&gt;
Next frame, you will then want to draw that piece of the background again to cover our sprite before drawing the sprite in the next location. But since we switched buffer-screen with the flushGraphics(), we are now drawing on another screen where our sprite is actually placed on another location. Therefor we will most likely not be deleting it properly.&lt;br /&gt;
&lt;br /&gt;
I don't have any ideas on how to solve this at the moment, other that either skipping the double-buffering part, or breaking the MIDP2.0 API rules. But I hope we'll find a solution.&lt;br /&gt;
&lt;br /&gt;
== Contributers ==&lt;br /&gt;
&lt;br /&gt;
The following people are contributing to this project at the moment:&lt;br /&gt;
&lt;br /&gt;
* mr_lou (available on IRC, channel #CPC on EsperNET, channel #AmstradCPC on EpiKnet and channel #CPC on freenode)&lt;br /&gt;
* Demoniak (available on IRC, channel #AmstradCPC on EpiKnet)&lt;br /&gt;
* TFM/FS&lt;br /&gt;
&lt;br /&gt;
== History log ==&lt;br /&gt;
* December 20th, This project page was created.&lt;br /&gt;
* December 19th, Demoniak helped a lot by supplying two routines, drawLine() and FastCls() that convinced mr_lou that this whole idea is quite possible to make a reality. His drawLine routine was twice as fast as the firmware routine. [http://www.cpcwiki.eu/forum/programming/help-with-sdcc/?action=dlattach;attach=3880 Check comparion]&lt;br /&gt;
* December 11th, mr_lou created [http://www.cpcwiki.eu/forum/programming/graphics-framework-idea/ a thread about the idea] at the forum.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [http://docs.oracle.com/javame/config/cldc/ref-impl/midp2.0/jsr118/index.html MIDP2.0 API Javadocs]&lt;br /&gt;
* [http://www.dewfall.dk/html5 Small example of HTML5/Javascript version of sMIDP2lib (View source to see J2ME-like code in Javascript) (Runs best with Opera or Chrome)]&lt;br /&gt;
* [http://dewfall.dk/Streger.html Small example of Flash version of sMIDP2lib]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]] [[Category:C]] [[Category:CrossDev]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=SMIDP2lib_for_SDCC&amp;diff=71774</id>
		<title>SMIDP2lib for SDCC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=SMIDP2lib_for_SDCC&amp;diff=71774"/>
				<updated>2011-12-20T15:40:18Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Current version of this page: v0.1''&lt;br /&gt;
&lt;br /&gt;
''Current version of sMIDP2lib: None''&lt;br /&gt;
&lt;br /&gt;
== What is sMIDP2lib? ==&lt;br /&gt;
&lt;br /&gt;
'''sMIDP2lib''' is currently only an experimental project-idea spawned by mr_lou in December 2011. Being a sparetime J2ME developer (Java Micro Edition, used for cellphone development) since 2006 (see www.lublu.dk), he got the idea of doing CPC development using a framework library for SDCC containing the same method-names used when doing J2ME development.&lt;br /&gt;
&lt;br /&gt;
The idea is simple: Implement selected methods from the MIDP2.0 API (Mobile Information Device Profile) in assembler routines, and embed those routines in SDCC functions. The end result should be a [[:Category:C|C library]] to be included in your SDCC project.&lt;br /&gt;
&lt;br /&gt;
The point of this would first and foremost be to make it easier and quicker for J2ME developers to develop for the CPC, but of course also to provide an alternative library to CPCRSlib for Z88DK.&lt;br /&gt;
A library like this would make it possible for J2ME developers to develop for the CPC much faster. Or even develop the same game for J2ME and the CPC at the same time (with some music and graphic conversion).&lt;br /&gt;
&lt;br /&gt;
Naturally not the whole MIDP2.0 API needs to be implemented. Thus the name sMIDP2lib = Semi MIDP2.0 API library.&lt;br /&gt;
&lt;br /&gt;
== Why a J2ME-based library? ==&lt;br /&gt;
&lt;br /&gt;
J2ME was designed to run on small limited devices, and it consists of simple methods. To compare, Android has a ton of advanced and complex drawing methods that would be very difficult to implement for the CPC. But the Graphics class of J2ME is very simple and straightforward easy to understand for everyone.&lt;br /&gt;
Because of the simplicity of the MIDP2.0 API, it should theoretically also be possible to implement these methods using assembler routines on the CPC, and get an acceptable speed too. Maybe not at an ultra fast framerate, but an acceptable one. And that's what this project is about in stage 1: Seeing if it's possible.&lt;br /&gt;
&lt;br /&gt;
=== Portability ===&lt;br /&gt;
&lt;br /&gt;
In the past, mr_lou has been working on sMIDP2lib versions for other platforms as well, such as&lt;br /&gt;
* HTML5/Javascript&lt;br /&gt;
* Flash&lt;br /&gt;
* Android&lt;br /&gt;
&lt;br /&gt;
This opens up for potential easy porting to 4 other platforms: If CPC developers use sMIDP2lib with SDCC, they should theoretically be able to port their software to J2ME, Android, Flash or HTML5/Javascript relatively fast. (See external links at the bottom of this page for a HTML5/Javascript and Flash example of sMIDP2lib).&lt;br /&gt;
&lt;br /&gt;
''HTML5/Javascript and Flash source of sMIDP2lib is free for anyone who wants it. The Android version is private for now though.''&lt;br /&gt;
&lt;br /&gt;
== General guidelines ==&lt;br /&gt;
&lt;br /&gt;
Since the idea behind sMIDP2lib is to be a semi MIDP2.0 library, all CPC firmware routines can (theoretically) be dumped. They will never be used anyway (as far as I can see right now). This means we're free to use EXX instructions and other tricks to speed things up - and '''speed IS important''' in this library. Speed comes before most other things. As a result, it might be ok to settle for e.g. a drawLine() method that can only draw a line 255 pixels long.&lt;br /&gt;
&lt;br /&gt;
This also means that we'll need to implement a few extra methods, in order to do stuff like setting inks and border color. That's ok though, because we'd probably need to do that anyway since we'll be using custom methods.&lt;br /&gt;
&lt;br /&gt;
=== ints vs shorts vs chars ===&lt;br /&gt;
&lt;br /&gt;
In the description of the methods below, you will notice that all methods take ints. This will not necessarily be the case in sMIDP2lib though. If it improves speed using unsigned shorts or even unsigned chars/bytes, then that'll probably be what we'll do instead. For now, each method is described with ints though.&lt;br /&gt;
&lt;br /&gt;
=== Memory requirements and handling ===&lt;br /&gt;
&lt;br /&gt;
Executables produced with sMIDP2lib will require a CPC with 128kb of RAM, and since loading of data is done dynamically, a disk-drive is also a very good idea. Otherwise it should run on all CPC's. No special requirements for CRTC type and such.&lt;br /&gt;
&lt;br /&gt;
All loading of image and music into memory must of course be handled in some way. I am far from an expert on this area, but I imagine some kind of iterator, keeping track of where the next available memory is. Therefor we also need some way of freeing memory again, e.g. when we close a Player (for example to load a new tune).&lt;br /&gt;
This is far from worked out at this stage though.&lt;br /&gt;
&lt;br /&gt;
== Supported Methods ==&lt;br /&gt;
&lt;br /&gt;
The initial very first version of sMIDP2lib is imagined to support to following few methods of MIDP2.0:&lt;br /&gt;
&lt;br /&gt;
* javax.microedition.lcdui.game.GameCanvas.getGraphics();&lt;br /&gt;
* javax.microedition.lcdui.game.GameCanvas.flushGraphics();&lt;br /&gt;
* javax.microedition.lcdui.Displayable.getWidth();&lt;br /&gt;
* javax.microedition.lcdui.Displayable.getHeight();&lt;br /&gt;
* ''javax.microedition.lcdui.Image.createImage(String source-filename);''&lt;br /&gt;
* javax.microedition.lcdui.Image.getHeight();&lt;br /&gt;
* javax.microedition.lcdui.Image.getWidth();&lt;br /&gt;
* ''javax.microedition.lcdui.Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height);''&lt;br /&gt;
* ''javax.microedition.lcdui.Graphics.drawImage(Image img, int x, int y, int anchor);''&lt;br /&gt;
* ''javax.microedition.lcdui.Graphics.drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha);''&lt;br /&gt;
* javax.microedition.lcdui.Graphics.drawLine(int x1, int y1, int x2, int y2);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.drawRect(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.fillRect(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.setClip(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.setColor(int RGB);&lt;br /&gt;
* ''javax.microedition.media.Manager.createPlayer(String source-filename);''&lt;br /&gt;
&lt;br /&gt;
The ones written ''in italic'' are some of the more heavier methods, and thus some that will most likely be implemented last in this first stage.&lt;br /&gt;
&lt;br /&gt;
For all these methods goes, that coordinates (0,0) is located in the upper left corner of the screen. On the CPC, the lower right corner will be coordinate (319,199). '''Only MODE 1 will be supported in the first many versions of sMIDP2lib.''' If the project becomes popular, it's likely a MODE 0 version will be produced also.&lt;br /&gt;
If possible, it might be a good idea to change the resolution of the CPC MODE 1 from 319*199 to 240*320, since this is the resolution commonly used in J2ME productions. ''Is it possible to get a MODE 1 resolution of 240x320 pixels that'll work with a lib like this?''&lt;br /&gt;
Another idea is to use a resolution of 255x255 pixels, if 255 pixels ends up being a limitation of the drawLine() and other methods.&lt;br /&gt;
&lt;br /&gt;
Besides the methods from the MIDP2.0 API, we also need a few additional methods that aren't part of the MIDP2.0 API. These methods are:&lt;br /&gt;
* setBorder(int color);&lt;br /&gt;
* setInk(int pen, int color);&lt;br /&gt;
&lt;br /&gt;
They are quite self-explanatory, so I won't go into further details about them.&lt;br /&gt;
&lt;br /&gt;
But all the MIDP2.0 API methods are described below along with how they could be adapted to the CPC.&lt;br /&gt;
&lt;br /&gt;
=== GameCanvas.getGraphics() ===&lt;br /&gt;
''J2ME description: Obtains the Graphics object for rendering a GameCanvas.''&lt;br /&gt;
In J2ME this method returns a Graphics object, needed for doing all the drawing on the screen.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method should return a struct with pointers to the methods of the Graphics class. In other words, getGraphics() will be a method that simply does: return new Graphics();&lt;br /&gt;
&lt;br /&gt;
More knowledge about C and SDCC is needed before giving an example of how such a struct could look like.&lt;br /&gt;
&lt;br /&gt;
=== GameCanvas.flushGraphics() ===&lt;br /&gt;
''J2ME description: Flushes the off-screen buffer to the display.''&lt;br /&gt;
In J2ME this is the call that throws all your drawing onto the screen. If you don't call this method, nothing will be displayed.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method should toggle between 2 buffer-screens. When one is visible, drawing takes place on the other. When flushGraphics() is called, the visible buffer-screen and the hidden buffer-screen switches place.&lt;br /&gt;
&lt;br /&gt;
J2ME example for getGraphics() and flushGraphics():&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graphics g = getGraphics();&lt;br /&gt;
g.setColor(0x00ff00); // Green&lt;br /&gt;
g.fillRect(10,10,30,30); // Draw a 30x30 big box at 10,10 with green color&lt;br /&gt;
flushGraphics(); // flush to screen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sMIDP2lib example for getGraphics() and flushGraphics():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graphics g = getGraphics();&lt;br /&gt;
g.setColor(1); // Pen 1&lt;br /&gt;
g.fillRect(10,10,30,30); // Draw a 30x30 big box at 10,10 with pen 1&lt;br /&gt;
flushGraphics(); // Toggle screen address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Displayable.getWidth() ===&lt;br /&gt;
''J2ME description: Gets the width in pixels of the displayable area available to the application.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this will simply return 319&lt;br /&gt;
&lt;br /&gt;
=== Displayable.getHeight() ===&lt;br /&gt;
''J2ME description: Gets the height in pixels of the displayable area available to the application.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this will simply return 199&lt;br /&gt;
&lt;br /&gt;
=== Image.createImage(String source-filename) ===&lt;br /&gt;
''J2ME description: Creates an immutable image from a source image.''&lt;br /&gt;
This is the method used in J2ME for loading an image from within the jar file. (A zip file containing all the classes and resources). It returns an Image object.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, I imagine it will load the image from disk, store it in memory, create a struct that holds a pointer to the image data, along with two shorts holding the image dimensions, and two pointers to the methods getHeight() and getWidth() that returns the dimensions.&lt;br /&gt;
&lt;br /&gt;
That way you will be able to do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
myImage = Image.createImage(&amp;quot;/pic.dat&amp;quot;);&lt;br /&gt;
g.drawImage(myImage, 0, 0, 0);&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fileformat will be a custom fileformat. Read more below.&lt;br /&gt;
&lt;br /&gt;
In the above example, notice that the filename is preceeded by a slash. This is required in J2ME for some reason, when loading images, while other similar looking methods doesn't require it. Therefor sMIDP2lib should always check if the first character in a filename is a slash, and simply ignore it if it is. (Goes for createImage and createPlayer for example).&lt;br /&gt;
&lt;br /&gt;
=== Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Obtains ARGB pixel data from the specified region of this image and stores it in the provided array of integers.''&lt;br /&gt;
This method is used in J2ME to save a piece of an image in an array.&lt;br /&gt;
&lt;br /&gt;
A method like this will be particular useful on the CPC, since it allows us to '''not''' re-draw the whole screen in each iteration, but instead simply save the pieces of background-layers that was drawn over in the previous iteration.&lt;br /&gt;
&lt;br /&gt;
Naturally we won't have RGB data, but instead the byteData of the CPC-representation of image.&lt;br /&gt;
&lt;br /&gt;
The tricky part about this method is, that in J2ME it's always performed on an Image object - which we don't have in sMIDP2lib (and aren't interested in either). But to stay within the MIDP2.0 API specs, we need to keep it that way.&lt;br /&gt;
In order to use this method in J2ME the way we'd use it on the CPC, J2ME devs would need to create a buffer-image to draw too, before drawing to the Graphics object of the canvas. In other words they'd do something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics(); // Get the graphics object of the canvas&lt;br /&gt;
bufferImage = Image.createImage(getWidth(), getHeight()); // Creates an image same size as the screen display size&lt;br /&gt;
buffer_g = bufferImage.getGraphics(); // Get the graphics object of that Image so we can draw on it. (Not in sMIDP2lib)&lt;br /&gt;
buffer_g.setClip(0,0,getWidth(),getHeight());&lt;br /&gt;
buffer_g.setColor(0x000000); // Black color&lt;br /&gt;
buffer_g.fillRect(0,0,getWidth(),getHeight()); // Clear the background&lt;br /&gt;
buffer_g.setColor(0xffffff); // White color&lt;br /&gt;
buffer_g.drawLine(0,0,getHeight(),getWidth()); // Draw a white line across the image&lt;br /&gt;
int[] storedPieceOfBackground = new int[256];&lt;br /&gt;
bufferImage.getRGB(storedPieceOfBackground,0,16,0,0,16,16); // Copy the image data at (0,0) 16x16 pixels into the array storedPieceOfBackground&lt;br /&gt;
bufferImage.setClip(0,0,16,16); // Set clip to the rectangle we just copied&lt;br /&gt;
bufferImage.drawImage(mySprites,-16,0,0); // Draw the 2nd sprite of my sprite-sheet in that clip&lt;br /&gt;
&lt;br /&gt;
// In the next loop-iteration, we can simply draw the storedPieceOfBackground on the spot where the sprite were.&lt;br /&gt;
// That way we don't have to re-draw the entire screen.&lt;br /&gt;
&lt;br /&gt;
g.setClip(0,0,getWidth(),getHeight()); // And finally...&lt;br /&gt;
g.drawImage(bufferImage,0,0,0); // Draw the bufferImage onto the screen&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is called double-buffering in J2ME.&lt;br /&gt;
Since sMIDP2lib will also be doing automatic double-buffering, we can adapt this method. Instead of creating another Image, we'll simply have access to to the already existing buffer-screen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
unsigned char[] storedPieceOfBackground = new char[64]; // We only need space for 64 bytes, since that equals 256 pixels.&lt;br /&gt;
sMIDP2lib_bufferscreen.getRGB(storedPieceOfBackground, 0, 0, 0, 0, 16 16); // Size is still given in pixels, so the getRGB method needs to take care of the division by 4 and such&lt;br /&gt;
// We ignore the offset and scanlength. They'll need to be part of the method, but will be ignored.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The variable sMIDP2lib_bufferscreen is a struct containing a pointer to the address of the current buffer-screen, meaning the one we're currently drawing to. (We'll always be drawing to the non-visible screen). When ever flushGraphics() is called, the current non-visible buffer-screen is shown, and the previous visible screen not becomes the buffer-screen. Therefor, the pointer in the sMIDP2lib_bufferscreen struct, will change value when flushGraphics() is called.&lt;br /&gt;
&lt;br /&gt;
This is a good solution because we keep the MIDP2.0 API structure, and we aren't creating overhead since the data in the arrays can be overridden again and again.&lt;br /&gt;
&lt;br /&gt;
Since we now have an array of byte data, we need a corresponding drawRGB() method to draw it again. See below.&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawImage(Image img, int x, int y, int anchor) ===&lt;br /&gt;
''J2ME description: Draws the specified image by using the anchor point.''&lt;br /&gt;
In J2ME, this method takes an Image object and renders on the screen. The anchor point is used to indicate where on the image x and y is. For example, anchor can be Graphics.TOP|Graphics.LEFT (which is typically equal to 0) which means that x,y is in the upper left corner of the image.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method obviously can't take an object as parameter. Instead it will take a struct as parameter (as described above). This struct contains the address of the image data, along with the dimensions of the image.&lt;br /&gt;
In the initial very first version of sMIDP2lib, the anchor parameter will be ignored. x,y will always be in the upper left corner.&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha) ===&lt;br /&gt;
''J2ME description: Renders a series of device-independent RGB+transparency values in a specified region.''&lt;br /&gt;
&lt;br /&gt;
This method will always be used in combination with Graphics.getRGB(), and will thus need adaptions similar to that method.&lt;br /&gt;
Like with getRGB() we will ignore the scanlength parameter. (At least in the first versions of sMIDP2lib). We will also ignore the processAlpha parameter. But both parameters will still need to be part of the method.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g.drawRGB(storedPieceOfBackground, 0, 0, 0, 0, 16, 16, false);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''I don't know what possibilities we have in C regarding arrays as parameter. Logically for it to work on the CPC, only a pointer to the array should be used. I need to experiment and ask around though.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawLine(int x1, int y1, int x2, int y2) ===&lt;br /&gt;
''J2ME description: Draws a line between the coordinates (x1,y1) and (x2,y2) using the current color and stroke style.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawRect(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Draws the outline of the specified rectangle using the current color and stroke style.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.fillRect(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Fills the specified rectangle with the current color.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.setClip(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Sets the current clip to the rectangle specified by the given coordinates.''&lt;br /&gt;
This is a very important method, that defines where on the canvas the following drawing-methods should draw. It is this method that allows you to load a sprite-sheet containing 4x4 sprites, and then only draw one of them.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
mySprites = Image.createImage(&amp;quot;sprites.img&amp;quot;); // Loads sprites.img that contains 4x4 sprites of 16x16 pixels each&lt;br /&gt;
g.setClip(50,50,16,16); // Defines the clip to be at (50,50) and 16x16 pixels big.&lt;br /&gt;
g.drawImage(mySprites, 34, 50, 0); // Draws the spritesheet at (34,50);&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above example, it will be the 2nd sprite in the top row that'll be displayed, because the whole picture is drawn -16 pixels from the clip X.&lt;br /&gt;
&lt;br /&gt;
Any Graphics method called after a setClip() will only affect the defined clip.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
g.setClip(50,50,16,16); // Defines the clip to be at (50,50) and 16x16 pixels big.&lt;br /&gt;
g.fillRect(0,0,100,100); // Only fills the above clip despite of different values in the fillRect method&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially before setting a clip, the default clip will be the whole screen (0,0,getWidth(),getHeight()). However, because your main loop will probably contains a lot of calls to setClip(), you should always call setClip(0,0,getWidth(),getHeight()) before calling fillRect(0,0,getWidth(),getHeight()).&lt;br /&gt;
&lt;br /&gt;
=== Graphics.setColor(int RGB) ===&lt;br /&gt;
''J2ME description: Sets the current color to the specified RGB values.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib we obviously don't have RGB colors. So this method will be adapted into taking just the pen-number. In other words, a number between 0 and 3 (because we only support MODE 1 for now).&lt;br /&gt;
Since this leaves us without any way of setting inks for each pen, we need to add some additional methods that aren't part of the MIDP2.0 API. These are:&lt;br /&gt;
setBorder(int color);&lt;br /&gt;
setInk(int pen, int color);&lt;br /&gt;
&lt;br /&gt;
=== Manager.createPlayer(String source-filename) ===&lt;br /&gt;
''J2ME description: Create a Player to play back media.''&lt;br /&gt;
Returns a Player object, that has methods such as start() and stop(). With J2ME you can play mp3, wav, and midi. As we know, we can't do that with the CPC.&lt;br /&gt;
&lt;br /&gt;
So instead sMIDP2lib must be able to load STarKos music files. The method should, like the createImage() method, return a struct with pointers to methods like start() and stop().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
music = Manager.createPlayer(&amp;quot;music.bin&amp;quot;); // Loads the music from disk&lt;br /&gt;
music.start(); // Calls STarKos playback routine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image file format ==&lt;br /&gt;
&lt;br /&gt;
I imagine the fileformat of images to be a rather simple one. Its first byte will contain the width of the image. The next byte will contain the height of the image. That way an image can max be 255x255 pixels big. ''This is only a thought, and will possibly change into 2 bytes for each value instead''. The rest of the data is the image itself, using standard CPC representation of image-data.&lt;br /&gt;
&lt;br /&gt;
Any image-size within that limitation can then be loaded. Doesn't have to be fullscreen images. You can load a small sprite-sheet of e.g. 64*128 pixels, and then also load another image containing a font and having a size of 480x8 pixels. Each image will be accessible through their structs.&lt;br /&gt;
&lt;br /&gt;
A Java command-line utility will ideally be created (if one doesn't exist already) that will convert 8bit PNG files (and/or maybe other formats) into the sMIDP2lib image format.&lt;br /&gt;
&lt;br /&gt;
== Issues to solve ==&lt;br /&gt;
&lt;br /&gt;
Currently, there are the following issues to work out a solution for:&lt;br /&gt;
=== Double-buffering makes it problematic to &amp;quot;un-draw&amp;quot; ===&lt;br /&gt;
While double-buffering can potentially make things more smooth,&lt;br /&gt;
&lt;br /&gt;
Consider a sprite moving from left to right, an unknown number of pixels each frame, on top of a background. You would then use sMIDP2lib_bufferscreen.getRGB() to store the piece of background you're about to draw on, in order to be able to redraw the background in next frame. Let's say the sprite is about to be drawn at (10,0) and it's a 16x16 pixels bit sprite. Then before drawing the sprite, you would call sMIDP2lib_bufferscreen.getRGB() to save the 16x16 pixels piece of background, and then draw the sprite and then call flushGraphics().&lt;br /&gt;
Next frame, you will then want to draw that piece of the background again to cover our sprite before drawing the sprite in the next location. But since we switched buffer-screen with the flushGraphics(), we are now drawing on another screen where our sprite is actually placed on another location. Therefor we will most likely not be deleting it properly.&lt;br /&gt;
&lt;br /&gt;
I don't have any ideas on how to solve this at the moment, other that either skipping the double-buffering part, or breaking the MIDP2.0 API rules. But I hope we'll find a solution.&lt;br /&gt;
&lt;br /&gt;
== Contributers ==&lt;br /&gt;
&lt;br /&gt;
The following people are contributing to this project at the moment:&lt;br /&gt;
&lt;br /&gt;
* mr_lou (available on IRC, channel #CPC on EsperNET, channel #AmstradCPC on EpiKnet and channel #CPC on freenode)&lt;br /&gt;
* Demoniak (available on IRC, channel #AmstradCPC on EpiKnet)&lt;br /&gt;
* TFM/FS&lt;br /&gt;
&lt;br /&gt;
== History log ==&lt;br /&gt;
* December 20th, This project page was created.&lt;br /&gt;
* December 19th, Demoniak helped a lot by supplying two routines, drawLine() and FastCls() that convinced mr_lou that this whole idea is quite possible to make a reality. His drawLine routine was twice as fast as the firmware routine. [http://www.cpcwiki.eu/forum/programming/help-with-sdcc/?action=dlattach;attach=3880 Check comparion]&lt;br /&gt;
* December 11th, mr_lou created [http://www.cpcwiki.eu/forum/programming/graphics-framework-idea/ a thread about the idea] at the forum.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [http://docs.oracle.com/javame/config/cldc/ref-impl/midp2.0/jsr118/index.html MIDP2.0 API Javadocs]&lt;br /&gt;
* [http://www.dewfall.dk/html5 Small example of HTML5/Javascript version of sMIDP2lib (View source to see J2ME-like code in Javascript) (Runs best with Opera or Chrome)]&lt;br /&gt;
* [http://dewfall.dk/Streger.html Small example of Flash version of sMIDP2lib]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]] [[Category:C]] [[Category:CrossDev]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=SMIDP2lib_for_SDCC&amp;diff=71773</id>
		<title>SMIDP2lib for SDCC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=SMIDP2lib_for_SDCC&amp;diff=71773"/>
				<updated>2011-12-20T15:39:38Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Current version of this page: v0.1''&lt;br /&gt;
&lt;br /&gt;
''Current version of sMIDP2lib: None''&lt;br /&gt;
&lt;br /&gt;
== What is sMIDP2lib? ==&lt;br /&gt;
&lt;br /&gt;
'''sMIDP2lib''' is currently only an experimental project-idea spawned by mr_lou in December 2011. Being a sparetime J2ME developer (Java Micro Edition, used for cellphone development) since 2006 (see www.lublu.dk), he got the idea of doing CPC development using a framework library for SDCC containing the same method-names used when doing J2ME development.&lt;br /&gt;
&lt;br /&gt;
The idea is simple: Implement selected methods from the MIDP2.0 API (Mobile Information Device Profile) in assembler routines, and embed those routines in SDCC functions. The end result should be a [[:Category:C|C library]] to be included in your SDCC project.&lt;br /&gt;
&lt;br /&gt;
The point of this would first and foremost be to make it easier and quicker for J2ME developers to develop for the CPC, but of course also to provide an alternative library to CPCRSlib for Z88DK.&lt;br /&gt;
A library like this would make it possible for J2ME developers to develop for the CPC much faster. Or even develop the same game for J2ME and the CPC at the same time (with some music and graphic conversion).&lt;br /&gt;
&lt;br /&gt;
Naturally not the whole MIDP2.0 API needs to be implemented. Thus the name sMIDP2lib = Semi MIDP2.0 API library.&lt;br /&gt;
&lt;br /&gt;
== Why a J2ME-based library? ==&lt;br /&gt;
&lt;br /&gt;
J2ME was designed to run on small limited devices, and it consists of simple methods. To compare, Android has a ton of advanced and complex drawing methods that would be very difficult to implement for the CPC. But the Graphics class of J2ME is very simple and straightforward easy to understand for everyone.&lt;br /&gt;
Because of the simplicity of the MIDP2.0 API, it should theoretically also be possible to implement these methods using assembler routines on the CPC, and get an acceptable speed too. Maybe not at an ultra fast framerate, but an acceptable one. And that's what this project is about in stage 1: Seeing if it's possible.&lt;br /&gt;
&lt;br /&gt;
=== Portability ===&lt;br /&gt;
&lt;br /&gt;
In the past, mr_lou has been working on sMIDP2lib versions for other platforms as well, such as&lt;br /&gt;
* HTML5/Javascript&lt;br /&gt;
* Flash&lt;br /&gt;
* Android&lt;br /&gt;
&lt;br /&gt;
This opens up for potential easy porting to 4 other platforms: If CPC developers use sMIDP2lib with SDCC, they should theoretically be able to port their software to J2ME, Android, Flash or HTML5/Javascript relatively fast. (See external links at the bottom of this page for a HTML5/Javascript and Flash example of sMIDP2lib).&lt;br /&gt;
&lt;br /&gt;
''HTML5/Javascript and Flash source of sMIDP2lib is free for anyone who wants it. The Android version is private for now though.''&lt;br /&gt;
&lt;br /&gt;
== General guidelines ==&lt;br /&gt;
&lt;br /&gt;
Since the idea behind sMIDP2lib is to be a semi MIDP2.0 library, all CPC firmware routines can (theoretically) be dumped. They will never be used anyway (as far as I can see right now). This means we're free to use EXX instructions and other tricks to speed things up - and '''speed IS important''' in this library. Speed comes before most other things. As a result, it might be ok to settle for e.g. a drawLine() method that can only draw a line 255 pixels long.&lt;br /&gt;
&lt;br /&gt;
This also means that we'll need to implement a few extra methods, in order to do stuff like setting inks and border color. That's ok though, because we'd probably need to do that anyway since we'll be using custom methods.&lt;br /&gt;
&lt;br /&gt;
=== ints vs shorts vs chars ===&lt;br /&gt;
&lt;br /&gt;
In the description of the methods below, you will notice that all methods take ints. This will not necessarily be the case in sMIDP2lib though. If it improves speed using unsigned shorts or even unsigned chars/bytes, then that'll probably be what we'll do instead. For now, each method is described with ints though.&lt;br /&gt;
&lt;br /&gt;
=== Memory requirements and handling ===&lt;br /&gt;
&lt;br /&gt;
Executables produced with sMIDP2lib will require a CPC with 128kb of RAM, and since loading of data is done dynamically, a disk-drive is also a very good idea. Otherwise it should run on all CPC's. No special requirements for CRTC type and such.&lt;br /&gt;
&lt;br /&gt;
All loading of image and music into memory must of course be handled in some way. I am far from an expert on this area, but I imagine some kind of iterator, keeping track of where the next available memory is. Therefor we also need some way of freeing memory again, e.g. when we close a Player (for example to load a new tune).&lt;br /&gt;
This is far from worked out at this stage though.&lt;br /&gt;
&lt;br /&gt;
== Supported Methods ==&lt;br /&gt;
&lt;br /&gt;
The initial very first version of sMIDP2lib is imagined to support to following few methods of MIDP2.0:&lt;br /&gt;
&lt;br /&gt;
* javax.microedition.lcdui.game.GameCanvas.getGraphics();&lt;br /&gt;
* javax.microedition.lcdui.game.GameCanvas.flushGraphics();&lt;br /&gt;
* javax.microedition.lcdui.Displayable.getWidth();&lt;br /&gt;
* javax.microedition.lcdui.Displayable.getHeight();&lt;br /&gt;
* ''javax.microedition.lcdui.Image.createImage(String source-filename);''&lt;br /&gt;
* javax.microedition.lcdui.Image.getHeight();&lt;br /&gt;
* javax.microedition.lcdui.Image.getWidth();&lt;br /&gt;
* ''javax.microedition.lcdui.Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height);''&lt;br /&gt;
* ''javax.microedition.lcdui.Graphics.drawImage(Image img, int x, int y, int anchor);''&lt;br /&gt;
* ''javax.microedition.lcdui.Graphics.drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha);''&lt;br /&gt;
* javax.microedition.lcdui.Graphics.drawLine(int x1, int y1, int x2, int y2);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.drawRect(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.fillRect(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.setClip(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.setColor(int RGB);&lt;br /&gt;
* ''javax.microedition.media.Manager.createPlayer(String source-filename);''&lt;br /&gt;
&lt;br /&gt;
The ones written ''in italic'' are some of the more heavier methods, and thus some that will most likely be implemented last in this first stage.&lt;br /&gt;
&lt;br /&gt;
For all these methods goes, that coordinates (0,0) is located in the upper left corner of the screen. On the CPC, the lower right corner will be coordinate (319,199). '''Only MODE 1 will be supported in the first many versions of sMIDP2lib.''' If the project becomes popular, it's likely a MODE 0 version will be produced also.&lt;br /&gt;
If possible, it might be a good idea to change the resolution of the CPC MODE 1 from 319*199 to 240*320, since this is the resolution commonly used in J2ME productions. ''Is it possible to get a MODE 1 resolution of 240x320 pixels that'll work with a lib like this?''&lt;br /&gt;
Another idea is to use a resolution of 255x255 pixels, if 255 pixels ends up being a limitation of the drawLine() and other methods.&lt;br /&gt;
&lt;br /&gt;
Besides the methods from the MIDP2.0 API, we also need a few additional methods that aren't part of the MIDP2.0 API. These methods are:&lt;br /&gt;
* setBorder(int color);&lt;br /&gt;
* setInk(int pen, int color);&lt;br /&gt;
&lt;br /&gt;
They are quite self-explanatory, so I won't go into further details about them.&lt;br /&gt;
&lt;br /&gt;
But all the MIDP2.0 API methods are described below along with how they could be adapted to the CPC.&lt;br /&gt;
&lt;br /&gt;
=== GameCanvas.getGraphics() ===&lt;br /&gt;
''J2ME description: Obtains the Graphics object for rendering a GameCanvas.''&lt;br /&gt;
In J2ME this method returns a Graphics object, needed for doing all the drawing on the screen.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method should return a struct with pointers to the methods of the Graphics class. In other words, getGraphics() will be a method that simply does: return new Graphics();&lt;br /&gt;
&lt;br /&gt;
More knowledge about C and SDCC is needed before giving an example of how such a struct could look like.&lt;br /&gt;
&lt;br /&gt;
=== GameCanvas.flushGraphics() ===&lt;br /&gt;
''J2ME description: Flushes the off-screen buffer to the display.''&lt;br /&gt;
In J2ME this is the call that throws all your drawing onto the screen. If you don't call this method, nothing will be displayed.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method should toggle between 2 buffer-screens. When one is visible, drawing takes place on the other. When flushGraphics() is called, the visible buffer-screen and the hidden buffer-screen switches place.&lt;br /&gt;
&lt;br /&gt;
J2ME example for getGraphics() and flushGraphics():&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graphics g = getGraphics();&lt;br /&gt;
g.setColor(0x00ff00); // Green&lt;br /&gt;
g.fillRect(10,10,30,30); // Draw a 30x30 big box at 10,10 with green color&lt;br /&gt;
flushGraphics(); // flush to screen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sMIDP2lib example for getGraphics() and flushGraphics():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graphics g = getGraphics();&lt;br /&gt;
g.setColor(1); // Pen 1&lt;br /&gt;
g.fillRect(10,10,30,30); // Draw a 30x30 big box at 10,10 with pen 1&lt;br /&gt;
flushGraphics(); // Toggle screen address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Displayable.getWidth() ===&lt;br /&gt;
''J2ME description: Gets the width in pixels of the displayable area available to the application.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this will simply return 319&lt;br /&gt;
&lt;br /&gt;
=== Displayable.getHeight() ===&lt;br /&gt;
''J2ME description: Gets the height in pixels of the displayable area available to the application.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this will simply return 199&lt;br /&gt;
&lt;br /&gt;
=== Image.createImage(String source-filename) ===&lt;br /&gt;
''J2ME description: Creates an immutable image from a source image.''&lt;br /&gt;
This is the method used in J2ME for loading an image from within the jar file. (A zip file containing all the classes and resources). It returns an Image object.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, I imagine it will load the image from disk, store it in memory, create a struct that holds a pointer to the image data, along with two shorts holding the image dimensions, and two pointers to the methods getHeight() and getWidth() that returns the dimensions.&lt;br /&gt;
&lt;br /&gt;
That way you will be able to do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
myImage = Image.createImage(&amp;quot;/pic.dat&amp;quot;);&lt;br /&gt;
g.drawImage(myImage, 0, 0, 0);&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fileformat will be a custom fileformat. Read more below.&lt;br /&gt;
&lt;br /&gt;
In the above example, notice that the filename is preceeded by a slash. This is required in J2ME for some reason, when loading images, while other similar looking methods doesn't require it. Therefor sMIDP2lib should always check if the first character in a filename is a slash, and simply ignore it if it is. (Goes for createImage and createPlayer for example).&lt;br /&gt;
&lt;br /&gt;
=== Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Obtains ARGB pixel data from the specified region of this image and stores it in the provided array of integers.''&lt;br /&gt;
This method is used in J2ME to save a piece of an image in an array.&lt;br /&gt;
&lt;br /&gt;
A method like this will be particular useful on the CPC, since it allows us to '''not''' re-draw the whole screen in each iteration, but instead simply save the pieces of background-layers that was drawn over in the previous iteration.&lt;br /&gt;
&lt;br /&gt;
Naturally we won't have RGB data, but instead the byteData of the CPC-representation of image.&lt;br /&gt;
&lt;br /&gt;
The tricky part about this method is, that in J2ME it's always performed on an Image object - which we don't have in sMIDP2lib (and aren't interested in either). But to stay within the MIDP2.0 API specs, we need to keep it that way.&lt;br /&gt;
In order to use this method in J2ME the way we'd use it on the CPC, J2ME devs would need to create a buffer-image to draw too, before drawing to the Graphics object of the canvas. In other words they'd do something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics(); // Get the graphics object of the canvas&lt;br /&gt;
bufferImage = Image.createImage(getWidth(), getHeight()); // Creates an image same size as the screen display size&lt;br /&gt;
buffer_g = bufferImage.getGraphics(); // Get the graphics object of that Image so we can draw on it. (Not in sMIDP2lib)&lt;br /&gt;
buffer_g.setClip(0,0,getWidth(),getHeight());&lt;br /&gt;
buffer_g.setColor(0x000000); // Black color&lt;br /&gt;
buffer_g.fillRect(0,0,getWidth(),getHeight()); // Clear the background&lt;br /&gt;
buffer_g.setColor(0xffffff); // White color&lt;br /&gt;
buffer_g.drawLine(0,0,getHeight(),getWidth()); // Draw a white line across the image&lt;br /&gt;
int[] storedPieceOfBackground = new int[256];&lt;br /&gt;
bufferImage.getRGB(storedPieceOfBackground,0,16,0,0,16,16); // Copy the image data at (0,0) 16x16 pixels into the array storedPieceOfBackground&lt;br /&gt;
bufferImage.setClip(0,0,16,16); // Set clip to the rectangle we just copied&lt;br /&gt;
bufferImage.drawImage(mySprites,-16,0,0); // Draw the 2nd sprite of my sprite-sheet in that clip&lt;br /&gt;
&lt;br /&gt;
// In the next loop-iteration, we can simply draw the storedPieceOfBackground on the spot where the sprite were.&lt;br /&gt;
// That way we don't have to re-draw the entire screen.&lt;br /&gt;
&lt;br /&gt;
g.setClip(0,0,getWidth(),getHeight()); // And finally...&lt;br /&gt;
g.drawImage(bufferImage,0,0,0); // Draw the bufferImage onto the screen&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is called double-buffering in J2ME.&lt;br /&gt;
Since sMIDP2lib will also be doing automatic double-buffering, we can adapt this method. Instead of creating another Image, we'll simply have access to to the already existing buffer-screen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
unsigned char[] storedPieceOfBackground = new char[64]; // We only need space for 64 bytes, since that equals 256 pixels.&lt;br /&gt;
sMIDP2lib_bufferscreen.getRGB(storedPieceOfBackground, 0, 0, 0, 0, 16 16); // Size is still given in pixels, so the getRGB method needs to take care of the division by 4 and such&lt;br /&gt;
// We ignore the offset and scanlength. They'll need to be part of the method, but will be ignored.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The variable sMIDP2lib_bufferscreen is a struct containing a pointer to the address of the current buffer-screen, meaning the one we're currently drawing to. (We'll always be drawing to the non-visible screen). When ever flushGraphics() is called, the current non-visible buffer-screen is shown, and the previous visible screen not becomes the buffer-screen. Therefor, the pointer in the sMIDP2lib_bufferscreen struct, will change value when flushGraphics() is called.&lt;br /&gt;
&lt;br /&gt;
This is a good solution because we keep the MIDP2.0 API structure, and we aren't creating overhead since the data in the arrays can be overridden again and again.&lt;br /&gt;
&lt;br /&gt;
Since we now have an array of byte data, we need a corresponding drawRGB() method to draw it again. See below.&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawImage(Image img, int x, int y, int anchor) ===&lt;br /&gt;
''J2ME description: Draws the specified image by using the anchor point.''&lt;br /&gt;
In J2ME, this method takes an Image object and renders on the screen. The anchor point is used to indicate where on the image x and y is. For example, anchor can be Graphics.TOP|Graphics.LEFT (which is typically equal to 0) which means that x,y is in the upper left corner of the image.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method obviously can't take an object as parameter. Instead it will take a struct as parameter (as described above). This struct contains the address of the image data, along with the dimensions of the image.&lt;br /&gt;
In the initial very first version of sMIDP2lib, the anchor parameter will be ignored. x,y will always be in the upper left corner.&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha) ===&lt;br /&gt;
''J2ME description: Renders a series of device-independent RGB+transparency values in a specified region.''&lt;br /&gt;
&lt;br /&gt;
This method will always be used in combination with Graphics.getRGB(), and will thus need adaptions similar to that method.&lt;br /&gt;
Like with getRGB() we will ignore the scanlength parameter. (At least in the first versions of sMIDP2lib). We will also ignore the processAlpha parameter. But both parameters will still need to be part of the method.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g.drawRGB(storedPieceOfBackground, 0, 0, 0, 0, 16, 16, false);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''I don't know what possibilities we have in C regarding arrays as parameter. Logically for it to work on the CPC, only a pointer to the array should be used. I need to experiment and ask around though.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawLine(int x1, int y1, int x2, int y2) ===&lt;br /&gt;
''J2ME description: Draws a line between the coordinates (x1,y1) and (x2,y2) using the current color and stroke style.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawRect(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Draws the outline of the specified rectangle using the current color and stroke style.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.fillRect(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Fills the specified rectangle with the current color.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.setClip(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Sets the current clip to the rectangle specified by the given coordinates.''&lt;br /&gt;
This is a very important method, that defines where on the canvas the following drawing-methods should draw. It is this method that allows you to load a sprite-sheet containing 4x4 sprites, and then only draw one of them.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
mySprites = Image.createImage(&amp;quot;sprites.img&amp;quot;); // Loads sprites.img that contains 4x4 sprites of 16x16 pixels each&lt;br /&gt;
g.setClip(50,50,16,16); // Defines the clip to be at (50,50) and 16x16 pixels big.&lt;br /&gt;
g.drawImage(mySprites, 34, 50, 0); // Draws the spritesheet at (34,50);&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above example, it will be the 2nd sprite in the top row that'll be displayed, because the whole picture is drawn -16 pixels from the clip X.&lt;br /&gt;
&lt;br /&gt;
Any Graphics method called after a setClip() will only affect the defined clip.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
g.setClip(50,50,16,16); // Defines the clip to be at (50,50) and 16x16 pixels big.&lt;br /&gt;
g.fillRect(0,0,100,100); // Only fills the above clip despite of different values in the fillRect method&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially before setting a clip, the default clip will be the whole screen (0,0,getWidth(),getHeight()). However, because your main loop will probably contains a lot of calls to setClip(), you should always call setClip(0,0,getWidth(),getHeight()) before calling fillRect(0,0,getWidth(),getHeight()).&lt;br /&gt;
&lt;br /&gt;
=== Graphics.setColor(int RGB) ===&lt;br /&gt;
''J2ME description: Sets the current color to the specified RGB values.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib we obviously don't have RGB colors. So this method will be adapted into taking just the pen-number. In other words, a number between 0 and 3 (because we only support MODE 1 for now).&lt;br /&gt;
Since this leaves us without any way of setting inks for each pen, we need to add some additional methods that aren't part of the MIDP2.0 API. These are:&lt;br /&gt;
setBorder(int color);&lt;br /&gt;
setInk(int pen, int color);&lt;br /&gt;
&lt;br /&gt;
=== Manager.createPlayer(String source-filename) ===&lt;br /&gt;
''J2ME description: Create a Player to play back media.''&lt;br /&gt;
Returns a Player object, that has methods such as start() and stop(). With J2ME you can play mp3, wav, and midi. As we know, we can't do that with the CPC.&lt;br /&gt;
&lt;br /&gt;
So instead sMIDP2lib must be able to load STarKos music files. The method should, like the createImage() method, return a struct with pointers to methods like start() and stop().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
music = Manager.createPlayer(&amp;quot;music.bin&amp;quot;); // Loads the music from disk&lt;br /&gt;
music.start(); // Calls STarKos playback routine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image file format ==&lt;br /&gt;
&lt;br /&gt;
I imagine the fileformat of images to be a rather simple one. Its first byte will contain the width of the image. The next byte will contain the height of the image. That way an image can max be 255x255 pixels big. ''This is only a thought, and will possibly change into 2 bytes for each value instead''. The rest of the data is the image itself, using standard CPC representation of image-data.&lt;br /&gt;
&lt;br /&gt;
Any image-size within that limitation can then be loaded. Doesn't have to be fullscreen images. You can load a small sprite-sheet of e.g. 64*128 pixels, and then also load another image containing a font and having a size of 480x8 pixels. Each image will be accessible through their structs.&lt;br /&gt;
&lt;br /&gt;
A Java command-line utility will ideally be created (if one doesn't exist already) that will convert 8bit PNG files (and/or maybe other formats) into the sMIDP2lib image format.&lt;br /&gt;
&lt;br /&gt;
== Issues to solve ==&lt;br /&gt;
&lt;br /&gt;
Currently, there are the following issues to work out a solution for:&lt;br /&gt;
=== Double-buffering makes it problematic to &amp;quot;un-draw&amp;quot; ===&lt;br /&gt;
Consider a sprite moving from left to right, an unknown number of pixels each frame, on top of a background. You would then use sMIDP2lib_bufferscreen.getRGB() to store the piece of background you're about to draw on, in order to be able to redraw the background in next frame. Let's say the sprite is about to be drawn at (10,0) and it's a 16x16 pixels bit sprite. Then before drawing the sprite, you would call sMIDP2lib_bufferscreen.getRGB() to save the 16x16 pixels piece of background, and then draw the sprite and then call flushGraphics().&lt;br /&gt;
Next frame, you will then want to draw that piece of the background again to cover our sprite before drawing the sprite in the next location. But since we switched buffer-screen with the flushGraphics(), we are now drawing on another screen where our sprite is actually placed on another location. Therefor we will most likely not be deleting it properly.&lt;br /&gt;
&lt;br /&gt;
I don't have any ideas on how to solve this at the moment, other that either skipping the double-buffering part, or breaking the MIDP2.0 API rules. But I hope we'll find a solution.&lt;br /&gt;
&lt;br /&gt;
== Contributers ==&lt;br /&gt;
&lt;br /&gt;
The following people are contributing to this project at the moment:&lt;br /&gt;
&lt;br /&gt;
* mr_lou (available on IRC, channel #CPC on EsperNET, channel #AmstradCPC on EpiKnet and channel #CPC on freenode)&lt;br /&gt;
* Demoniak (available on IRC, channel #AmstradCPC on EpiKnet)&lt;br /&gt;
* TFM/FS&lt;br /&gt;
&lt;br /&gt;
== History log ==&lt;br /&gt;
* December 20th, This project page was created.&lt;br /&gt;
* December 19th, Demoniak helped a lot by supplying two routines, drawLine() and FastCls() that convinced mr_lou that this whole idea is quite possible to make a reality. His drawLine routine was twice as fast as the firmware routine. [http://www.cpcwiki.eu/forum/programming/help-with-sdcc/?action=dlattach;attach=3880 Check comparion]&lt;br /&gt;
* December 11th, mr_lou created [http://www.cpcwiki.eu/forum/programming/graphics-framework-idea/ a thread about the idea] at the forum.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [http://docs.oracle.com/javame/config/cldc/ref-impl/midp2.0/jsr118/index.html MIDP2.0 API Javadocs]&lt;br /&gt;
* [http://www.dewfall.dk/html5 Small example of HTML5/Javascript version of sMIDP2lib (View source to see J2ME-like code in Javascript) (Runs best with Opera or Chrome)]&lt;br /&gt;
* [http://dewfall.dk/Streger.html Small example of Flash version of sMIDP2lib]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]] [[Category:C]] [[Category:CrossDev]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=SMIDP2lib_for_SDCC&amp;diff=71772</id>
		<title>SMIDP2lib for SDCC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=SMIDP2lib_for_SDCC&amp;diff=71772"/>
				<updated>2011-12-20T15:38:06Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Current version of this page: v0.1''&lt;br /&gt;
&lt;br /&gt;
''Current version of sMIDP2lib: None''&lt;br /&gt;
&lt;br /&gt;
== What is sMIDP2lib? ==&lt;br /&gt;
&lt;br /&gt;
'''sMIDP2lib''' is currently only an experimental project-idea spawned by mr_lou in December 2011. Being a sparetime J2ME developer (Java Micro Edition, used for cellphone development) since 2006 (see www.lublu.dk), he got the idea of doing CPC development using a framework library for SDCC containing the same method-names used when doing J2ME development.&lt;br /&gt;
&lt;br /&gt;
The idea is simple: Implement selected methods from the MIDP2.0 API (Mobile Information Device Profile) in assembler routines, and embed those routines in SDCC functions. The end result should be a [[:Category:C|C library]] to be included in your SDCC project.&lt;br /&gt;
&lt;br /&gt;
The point of this would first and foremost be to make it easier and quicker for J2ME developers to develop for the CPC, but of course also to provide an alternative library to CPCRSlib for Z88DK.&lt;br /&gt;
A library like this would make it possible for J2ME developers to develop for the CPC much faster. Or even develop the same game for J2ME and the CPC at the same time (with some music and graphic conversion).&lt;br /&gt;
&lt;br /&gt;
Naturally not the whole MIDP2.0 API needs to be implemented. Thus the name sMIDP2lib = Semi MIDP2.0 API library.&lt;br /&gt;
&lt;br /&gt;
== Why a J2ME-based library? ==&lt;br /&gt;
&lt;br /&gt;
J2ME was designed to run on small limited devices, and it consists of simple methods. To compare, Android has a ton of advanced and complex drawing methods that would be very difficult to implement for the CPC. But the Graphics class of J2ME is very simple and straightforward easy to understand for everyone.&lt;br /&gt;
Because of the simplicity of the MIDP2.0 API, it should theoretically also be possible to implement these methods using assembler routines on the CPC, and get an acceptable speed too. Maybe not at an ultra fast framerate, but an acceptable one. And that's what this project is about in stage 1: Seeing if it's possible.&lt;br /&gt;
&lt;br /&gt;
=== Portability ===&lt;br /&gt;
&lt;br /&gt;
In the past, mr_lou has been working on sMIDP2lib versions for other platforms as well, such as&lt;br /&gt;
* HTML5/Javascript&lt;br /&gt;
* Flash&lt;br /&gt;
* Android&lt;br /&gt;
&lt;br /&gt;
This opens up for potential easy porting to 4 other platforms: If CPC developers use sMIDP2lib with SDCC, they should theoretically be able to port their software to J2ME, Android, Flash or HTML5/Javascript relatively fast. (See external links at the bottom of this page for a HTML5/Javascript and Flash example of sMIDP2lib).&lt;br /&gt;
&lt;br /&gt;
''HTML5/Javascript and Flash source of sMIDP2lib is free for anyone who wants it. The Android version is private for now though.''&lt;br /&gt;
&lt;br /&gt;
== General guidelines ==&lt;br /&gt;
&lt;br /&gt;
Since the idea behind sMIDP2lib is to be a semi MIDP2.0 library, all CPC firmware routines can (theoretically) be dumped. They will never be used anyway (as far as I can see right now). This means we're free to use EXX instructions and other tricks to speed things up - and '''speed IS important''' in this library. Speed comes before most other things. As a result, it might be ok to settle for e.g. a drawLine() method that can only draw a line 255 pixels long.&lt;br /&gt;
&lt;br /&gt;
This also means that we'll need to implement a few extra methods, in order to do stuff like setting inks and border color. That's ok though, because we'd probably need to do that anyway since we'll be using custom methods.&lt;br /&gt;
&lt;br /&gt;
=== ints vs shorts vs chars ===&lt;br /&gt;
&lt;br /&gt;
In the description of the methods below, you will notice that all methods take ints. This will not necessarily be the case in sMIDP2lib though. If it improves speed using unsigned shorts or even unsigned chars/bytes, then that'll probably be what we'll do instead. For now, each method is described with ints though.&lt;br /&gt;
&lt;br /&gt;
=== Memory requirements and handling ===&lt;br /&gt;
&lt;br /&gt;
Executables produced with sMIDP2lib will require a CPC with 128kb of RAM, and since loading of data is done dynamically, a disk-drive is also a very good idea. Otherwise it should run on all CPC's. No special requirements for CRTC type and such.&lt;br /&gt;
&lt;br /&gt;
All loading of image and music into memory must of course be handled in some way. I am far from an expert on this area, but I imagine some kind of iterator, keeping track of where the next available memory is. Therefor we also need some way of freeing memory again, e.g. when we close a Player (for example to load a new tune).&lt;br /&gt;
This is far from worked out at this stage though.&lt;br /&gt;
&lt;br /&gt;
== Supported Methods ==&lt;br /&gt;
&lt;br /&gt;
The initial very first version of sMIDP2lib is imagined to support to following few methods of MIDP2.0:&lt;br /&gt;
&lt;br /&gt;
* javax.microedition.lcdui.game.GameCanvas.getGraphics();&lt;br /&gt;
* javax.microedition.lcdui.game.GameCanvas.flushGraphics();&lt;br /&gt;
* javax.microedition.lcdui.Displayable.getWidth();&lt;br /&gt;
* javax.microedition.lcdui.Displayable.getHeight();&lt;br /&gt;
* ''javax.microedition.lcdui.Image.createImage(String source-filename);''&lt;br /&gt;
* javax.microedition.lcdui.Image.getHeight();&lt;br /&gt;
* javax.microedition.lcdui.Image.getWidth();&lt;br /&gt;
* ''javax.microedition.lcdui.Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height);''&lt;br /&gt;
* ''javax.microedition.lcdui.Graphics.drawImage(Image img, int x, int y, int anchor);''&lt;br /&gt;
* ''javax.microedition.lcdui.Graphics.drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha);''&lt;br /&gt;
* javax.microedition.lcdui.Graphics.drawLine(int x1, int y1, int x2, int y2);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.drawRect(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.fillRect(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.setClip(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.setColor(int RGB);&lt;br /&gt;
* ''javax.microedition.media.Manager.createPlayer(String source-filename);''&lt;br /&gt;
&lt;br /&gt;
The ones written ''in italic'' are some of the more heavier methods, and thus some that will most likely be implemented last in this first stage.&lt;br /&gt;
&lt;br /&gt;
For all these methods goes, that coordinates (0,0) is located in the upper left corner of the screen. On the CPC, the lower right corner will be coordinate (319,199). '''Only MODE 1 will be supported in the first many versions of sMIDP2lib.''' If the project becomes popular, it's likely a MODE 0 version will be produced also.&lt;br /&gt;
If possible, it might be a good idea to change the resolution of the CPC MODE 1 from 319*199 to 240*320, since this is the resolution commonly used in J2ME productions. ''Is it possible to get a MODE 1 resolution of 240x320 pixels that'll work with a lib like this?''&lt;br /&gt;
Another idea is to use a resolution of 255x255 pixels, if 255 pixels ends up being a limitation of the drawLine() and other methods.&lt;br /&gt;
&lt;br /&gt;
Besides the methods from the MIDP2.0 API, we also need a few additional methods that aren't part of the MIDP2.0 API. These methods are:&lt;br /&gt;
* setBorder(int color);&lt;br /&gt;
* setInk(int pen, int color);&lt;br /&gt;
&lt;br /&gt;
They are quite self-explanatory, so I won't go into further details about them.&lt;br /&gt;
&lt;br /&gt;
But all the MIDP2.0 API methods are described below along with how they could be adapted to the CPC.&lt;br /&gt;
&lt;br /&gt;
=== GameCanvas.getGraphics() ===&lt;br /&gt;
''J2ME description: Obtains the Graphics object for rendering a GameCanvas.''&lt;br /&gt;
In J2ME this method returns a Graphics object, needed for doing all the drawing on the screen.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method should return a struct with pointers to the methods of the Graphics class. In other words, getGraphics() will be a method that simply does: return new Graphics();&lt;br /&gt;
&lt;br /&gt;
More knowledge about C and SDCC is needed before giving an example of how such a struct could look like.&lt;br /&gt;
&lt;br /&gt;
=== GameCanvas.flushGraphics() ===&lt;br /&gt;
''J2ME description: Flushes the off-screen buffer to the display.''&lt;br /&gt;
In J2ME this is the call that throws all your drawing onto the screen. If you don't call this method, nothing will be displayed.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method should toggle between 2 buffer-screens. When one is visible, drawing takes place on the other. When flushGraphics() is called, the visible buffer-screen and the hidden buffer-screen switches place.&lt;br /&gt;
&lt;br /&gt;
J2ME example for getGraphics() and flushGraphics():&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graphics g = getGraphics();&lt;br /&gt;
g.setColor(0x00ff00); // Green&lt;br /&gt;
g.fillRect(10,10,30,30); // Draw a 30x30 big box at 10,10 with green color&lt;br /&gt;
flushGraphics(); // flush to screen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sMIDP2lib example for getGraphics() and flushGraphics():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graphics g = getGraphics();&lt;br /&gt;
g.setColor(1); // Pen 1&lt;br /&gt;
g.fillRect(10,10,30,30); // Draw a 30x30 big box at 10,10 with pen 1&lt;br /&gt;
flushGraphics(); // Toggle screen address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Displayable.getWidth() ===&lt;br /&gt;
''J2ME description: Gets the width in pixels of the displayable area available to the application.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this will simply return 319&lt;br /&gt;
&lt;br /&gt;
=== Displayable.getHeight() ===&lt;br /&gt;
''J2ME description: Gets the height in pixels of the displayable area available to the application.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this will simply return 199&lt;br /&gt;
&lt;br /&gt;
=== Image.createImage(String source-filename) ===&lt;br /&gt;
''J2ME description: Creates an immutable image from a source image.''&lt;br /&gt;
This is the method used in J2ME for loading an image from within the jar file. (A zip file containing all the classes and resources). It returns an Image object.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, I imagine it will load the image from disk, store it in memory, create a struct that holds a pointer to the image data, along with two shorts holding the image dimensions, and two pointers to the methods getHeight() and getWidth() that returns the dimensions.&lt;br /&gt;
&lt;br /&gt;
That way you will be able to do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
myImage = Image.createImage(&amp;quot;/pic.dat&amp;quot;);&lt;br /&gt;
g.drawImage(myImage, 0, 0, 0);&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fileformat will be a custom fileformat. Read more below.&lt;br /&gt;
&lt;br /&gt;
In the above example, notice that the filename is preceeded by a slash. This is required in J2ME for some reason, when loading images, while other similar looking methods doesn't require it. Therefor sMIDP2lib should always check if the first character in a filename is a slash, and simply ignore it if it is. (Goes for createImage and createPlayer for example).&lt;br /&gt;
&lt;br /&gt;
=== Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Obtains ARGB pixel data from the specified region of this image and stores it in the provided array of integers.''&lt;br /&gt;
This method is used in J2ME to save a piece of an image in an array.&lt;br /&gt;
&lt;br /&gt;
A method like this will be particular useful on the CPC, since it allows us to '''not''' re-draw the whole screen in each iteration, but instead simply save the pieces of background-layers that was drawn over in the previous iteration.&lt;br /&gt;
&lt;br /&gt;
Naturally we won't have RGB data, but instead the byteData of the CPC-representation of image.&lt;br /&gt;
&lt;br /&gt;
The tricky part about this method is, that in J2ME it's always performed on an Image object - which we don't have in sMIDP2lib (and aren't interested in either). But to stay within the MIDP2.0 API specs, we need to keep it that way.&lt;br /&gt;
In order to use this method in J2ME the way we'd use it on the CPC, J2ME devs would need to create a buffer-image to draw too, before drawing to the Graphics object of the canvas. In other words they'd do something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics(); // Get the graphics object of the canvas&lt;br /&gt;
bufferImage = Image.createImage(getWidth(), getHeight()); // Creates an image same size as the screen display size&lt;br /&gt;
buffer_g = bufferImage.getGraphics(); // Get the graphics object of that Image so we can draw on it. (Not in sMIDP2lib)&lt;br /&gt;
buffer_g.setClip(0,0,getWidth(),getHeight());&lt;br /&gt;
buffer_g.setColor(0x000000); // Black color&lt;br /&gt;
buffer_g.fillRect(0,0,getWidth(),getHeight()); // Clear the background&lt;br /&gt;
buffer_g.setColor(0xffffff); // White color&lt;br /&gt;
buffer_g.drawLine(0,0,getHeight(),getWidth()); // Draw a white line across the image&lt;br /&gt;
int[] storedPieceOfBackground = new int[256];&lt;br /&gt;
bufferImage.getRGB(storedPieceOfBackground,0,16,0,0,16,16); // Copy the image data at (0,0) 16x16 pixels into the array storedPieceOfBackground&lt;br /&gt;
bufferImage.setClip(0,0,16,16); // Set clip to the rectangle we just copied&lt;br /&gt;
bufferImage.drawImage(mySprites,-16,0,0); // Draw the 2nd sprite of my sprite-sheet in that clip&lt;br /&gt;
&lt;br /&gt;
// In the next loop-iteration, we can simply draw the storedPieceOfBackground on the spot where the sprite were.&lt;br /&gt;
// That way we don't have to re-draw the entire screen.&lt;br /&gt;
&lt;br /&gt;
g.setClip(0,0,getWidth(),getHeight()); // And finally...&lt;br /&gt;
g.drawImage(bufferImage,0,0,0); // Draw the bufferImage onto the screen&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is called double-buffering in J2ME.&lt;br /&gt;
Since sMIDP2lib will also be doing automatic double-buffering, we can adapt this method. Instead of creating another Image, we'll simply have access to to the already existing buffer-screen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
unsigned char[] storedPieceOfBackground = new char[64]; // We only need space for 64 bytes, since that equals 256 pixels.&lt;br /&gt;
sMIDP2lib_bufferscreen.getRGB(storedPieceOfBackground, 0, 0, 0, 0, 16 16); // Size is still given in pixels, so the getRGB method needs to take care of the division by 4 and such&lt;br /&gt;
// We ignore the offset and scanlength. They'll need to be part of the method, but will be ignored.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The variable sMIDP2lib_bufferscreen is a struct containing a pointer to the address of the current buffer-screen, meaning the one we're currently drawing to. (We'll always be drawing to the non-visible screen). When ever flushGraphics() is called, the current non-visible buffer-screen is shown, and the previous visible screen not becomes the buffer-screen. Therefor, the pointer in the sMIDP2lib_bufferscreen struct, will change value when flushGraphics() is called.&lt;br /&gt;
&lt;br /&gt;
This is a good solution because we keep the MIDP2.0 API structure, and we aren't creating overhead since the data in the arrays can be overridden again and again.&lt;br /&gt;
&lt;br /&gt;
Since we now have an array of byte data, we need a corresponding drawRGB() method to draw it again. See below.&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawImage(Image img, int x, int y, int anchor) ===&lt;br /&gt;
''J2ME description: Draws the specified image by using the anchor point.''&lt;br /&gt;
In J2ME, this method takes an Image object and renders on the screen. The anchor point is used to indicate where on the image x and y is. For example, anchor can be Graphics.TOP|Graphics.LEFT (which is typically equal to 0) which means that x,y is in the upper left corner of the image.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method obviously can't take an object as parameter. Instead it will take a struct as parameter (as described above). This struct contains the address of the image data, along with the dimensions of the image.&lt;br /&gt;
In the initial very first version of sMIDP2lib, the anchor parameter will be ignored. x,y will always be in the upper left corner.&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha) ===&lt;br /&gt;
''J2ME description: Renders a series of device-independent RGB+transparency values in a specified region.''&lt;br /&gt;
&lt;br /&gt;
This method will always be used in combination with Graphics.getRGB(), and will thus need adaptions similar to that method.&lt;br /&gt;
Like with getRGB() we will ignore the scanlength parameter. (At least in the first versions of sMIDP2lib). We will also ignore the processAlpha parameter. But both parameters will still need to be part of the method.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g.drawRGB(storedPieceOfBackground, 0, 0, 0, 0, 16, 16, false);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''I don't know what possibilities we have in C regarding arrays as parameter. Logically for it to work on the CPC, only a pointer to the array should be used. I need to experiment and ask around though.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawLine(int x1, int y1, int x2, int y2) ===&lt;br /&gt;
''J2ME description: Draws a line between the coordinates (x1,y1) and (x2,y2) using the current color and stroke style.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawRect(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Draws the outline of the specified rectangle using the current color and stroke style.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.fillRect(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Fills the specified rectangle with the current color.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.setClip(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Sets the current clip to the rectangle specified by the given coordinates.''&lt;br /&gt;
This is a very important method, that defines where on the canvas the following drawing-methods should draw. It is this method that allows you to load a sprite-sheet containing 4x4 sprites, and then only draw one of them.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
mySprites = Image.createImage(&amp;quot;sprites.img&amp;quot;); // Loads sprites.img that contains 4x4 sprites of 16x16 pixels each&lt;br /&gt;
g.setClip(50,50,16,16); // Defines the clip to be at (50,50) and 16x16 pixels big.&lt;br /&gt;
g.drawImage(mySprites, 34, 50, 0); // Draws the spritesheet at (34,50);&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above example, it will be the 2nd sprite in the top row that'll be displayed, because the whole picture is drawn -16 pixels from the clip X.&lt;br /&gt;
&lt;br /&gt;
Any Graphics method called after a setClip() will only affect the defined clip.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
g.setClip(50,50,16,16); // Defines the clip to be at (50,50) and 16x16 pixels big.&lt;br /&gt;
g.fillRect(0,0,100,100); // Only fills the above clip despite of different values in the fillRect method&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially before setting a clip, the default clip will be the whole screen (0,0,getWidth(),getHeight()). However, because your main loop will probably contains a lot of calls to setClip(), you should always call setClip(0,0,getWidth(),getHeight()) before calling fillRect(0,0,getWidth(),getHeight()).&lt;br /&gt;
&lt;br /&gt;
=== Graphics.setColor(int RGB) ===&lt;br /&gt;
''J2ME description: Sets the current color to the specified RGB values.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib we obviously don't have RGB colors. So this method will be adapted into taking just the pen-number. In other words, a number between 0 and 3 (because we only support MODE 1 for now).&lt;br /&gt;
Since this leaves us without any way of setting inks for each pen, we need to add some additional methods that aren't part of the MIDP2.0 API. These are:&lt;br /&gt;
setBorder(int color);&lt;br /&gt;
setInk(int pen, int color);&lt;br /&gt;
&lt;br /&gt;
=== Manager.createPlayer(String source-filename) ===&lt;br /&gt;
''J2ME description: Create a Player to play back media.''&lt;br /&gt;
Returns a Player object, that has methods such as start() and stop(). With J2ME you can play mp3, wav, and midi. As we know, we can't do that with the CPC.&lt;br /&gt;
&lt;br /&gt;
So instead sMIDP2lib must be able to load STarKos music files. The method should, like the createImage() method, return a struct with pointers to methods like start() and stop().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
music = Manager.createPlayer(&amp;quot;music.bin&amp;quot;); // Loads the music from disk&lt;br /&gt;
music.start(); // Calls STarKos playback routine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image file format ==&lt;br /&gt;
&lt;br /&gt;
I imagine the fileformat of images to be a rather simple one. Its first byte will contain the width of the image. The next byte will contain the height of the image. That way an image can max be 255x255 pixels big. ''This is only a thought, and will possibly change into 2 bytes for each value instead''. The rest of the data is the image itself, using standard CPC representation of image-data.&lt;br /&gt;
&lt;br /&gt;
Any image-size within that limitation can then be loaded. Doesn't have to be fullscreen images. You can load a small sprite-sheet of e.g. 64*128 pixels, and then also load another image containing a font and having a size of 480x8 pixels. Each image will be accessible through their structs.&lt;br /&gt;
&lt;br /&gt;
A Java command-line utility will ideally be created (if one doesn't exist already) that will convert 8bit PNG files (and/or maybe other formats) into the sMIDP2lib image format.&lt;br /&gt;
&lt;br /&gt;
== Issues to solve ==&lt;br /&gt;
&lt;br /&gt;
Currently, there are the following issues to work out a solution for:&lt;br /&gt;
=== Double-buffering makes it problematic to &amp;quot;un-draw&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
sMIDP2lib_bufferscreen.getRGB() to store the piece of background you're about to draw on, in order to be able to redraw the background in next frame. Let's say the sprite is about to be drawn at (10,0) and it's a 16x16 pixels bit sprite. Then before drawing the sprite, you would call sMIDP2lib_bufferscreen.getRGB() to save the 16x16 pixels piece of background, and then draw the sprite and then call flushGraphics().&lt;br /&gt;
Next frame, you will then want to draw that piece of the background again to cover our sprite before drawing the sprite in the next location. But since we switched buffer-screen with the flushGraphics(), we are now drawing on another screen where our sprite is actually placed on another location. Therefor we will most likely not be deleting it properly.&lt;br /&gt;
&lt;br /&gt;
I don't have any ideas on how to solve this at the moment, other that either skipping the double-buffering part, or breaking the MIDP2.0 API rules. But I hope we'll find a solution.&lt;br /&gt;
&lt;br /&gt;
== Contributers ==&lt;br /&gt;
&lt;br /&gt;
The following people are contributing to this project at the moment:&lt;br /&gt;
&lt;br /&gt;
* mr_lou (available on IRC, channel #CPC on EsperNET, channel #AmstradCPC on EpiKnet and channel #CPC on freenode)&lt;br /&gt;
* Demoniak (available on IRC, channel #AmstradCPC on EpiKnet)&lt;br /&gt;
* TFM/FS&lt;br /&gt;
&lt;br /&gt;
== History log ==&lt;br /&gt;
* December 20th, This project page was created.&lt;br /&gt;
* December 19th, Demoniak helped a lot by supplying two routines, drawLine() and FastCls() that convinced mr_lou that this whole idea is quite possible to make a reality. His drawLine routine was twice as fast as the firmware routine. [http://www.cpcwiki.eu/forum/programming/help-with-sdcc/?action=dlattach;attach=3880 Check comparion]&lt;br /&gt;
* December 11th, mr_lou created [http://www.cpcwiki.eu/forum/programming/graphics-framework-idea/ a thread about the idea] at the forum.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [http://docs.oracle.com/javame/config/cldc/ref-impl/midp2.0/jsr118/index.html MIDP2.0 API Javadocs]&lt;br /&gt;
* [http://www.dewfall.dk/html5 Small example of HTML5/Javascript version of sMIDP2lib (View source to see J2ME-like code in Javascript) (Runs best with Opera or Chrome)]&lt;br /&gt;
* [http://dewfall.dk/Streger.html Small example of Flash version of sMIDP2lib]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]] [[Category:C]] [[Category:CrossDev]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=SMIDP2lib_for_SDCC&amp;diff=71771</id>
		<title>SMIDP2lib for SDCC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=SMIDP2lib_for_SDCC&amp;diff=71771"/>
				<updated>2011-12-20T15:36:28Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Current version of this page: v0.1''&lt;br /&gt;
&lt;br /&gt;
''Current version of sMIDP2lib: None''&lt;br /&gt;
&lt;br /&gt;
== What is sMIDP2lib? ==&lt;br /&gt;
&lt;br /&gt;
'''sMIDP2lib''' is currently only an experimental project-idea spawned by mr_lou in December 2011. Being a sparetime J2ME developer (Java Micro Edition, used for cellphone development) since 2006 (see www.lublu.dk), he got the idea of doing CPC development using a framework library for SDCC containing the same method-names used when doing J2ME development.&lt;br /&gt;
&lt;br /&gt;
The idea is simple: Implement selected methods from the MIDP2.0 API (Mobile Information Device Profile) in assembler routines, and embed those routines in SDCC functions. The end result should be a [[:Category:C|C library]] to be included in your SDCC project.&lt;br /&gt;
&lt;br /&gt;
The point of this would first and foremost be to make it easier and quicker for J2ME developers to develop for the CPC, but of course also to provide an alternative library to CPCRSlib for Z88DK.&lt;br /&gt;
A library like this would make it possible for J2ME developers to develop for the CPC much faster. Or even develop the same game for J2ME and the CPC at the same time (with some music and graphic conversion).&lt;br /&gt;
&lt;br /&gt;
Naturally not the whole MIDP2.0 API needs to be implemented. Thus the name sMIDP2lib = Semi MIDP2.0 API library.&lt;br /&gt;
&lt;br /&gt;
== Why a J2ME-based library? ==&lt;br /&gt;
&lt;br /&gt;
J2ME was designed to run on small limited devices, and it consists of simple methods. To compare, Android has a ton of advanced and complex drawing methods that would be very difficult to implement for the CPC. But the Graphics class of J2ME is very simple and straightforward easy to understand for everyone.&lt;br /&gt;
Because of the simplicity of the MIDP2.0 API, it should theoretically also be possible to implement these methods using assembler routines on the CPC, and get an acceptable speed too. Maybe not at an ultra fast framerate, but an acceptable one. And that's what this project is about in stage 1: Seeing if it's possible.&lt;br /&gt;
&lt;br /&gt;
=== Portability ===&lt;br /&gt;
&lt;br /&gt;
In the past, mr_lou has been working on sMIDP2lib versions for other platforms as well, such as&lt;br /&gt;
* HTML5/Javascript&lt;br /&gt;
* Flash&lt;br /&gt;
* Android&lt;br /&gt;
&lt;br /&gt;
This opens up for potential easy porting to 4 other platforms: If CPC developers use sMIDP2lib with SDCC, they should theoretically be able to port their software to J2ME, Android, Flash or HTML5/Javascript relatively fast. (See external links at the bottom of this page for a HTML5/Javascript and Flash example of sMIDP2lib).&lt;br /&gt;
&lt;br /&gt;
''HTML5/Javascript and Flash source of sMIDP2lib is free for anyone who wants it. The Android version is private for now though.''&lt;br /&gt;
&lt;br /&gt;
== General guidelines ==&lt;br /&gt;
&lt;br /&gt;
Since the idea behind sMIDP2lib is to be a semi MIDP2.0 library, all CPC firmware routines can (theoretically) be dumped. They will never be used anyway (as far as I can see right now). This means we're free to use EXX instructions and other tricks to speed things up - and '''speed IS important''' in this library. Speed comes before most other things. As a result, it might be ok to settle for e.g. a drawLine() method that can only draw a line 255 pixels long.&lt;br /&gt;
&lt;br /&gt;
This also means that we'll need to implement a few extra methods, in order to do stuff like setting inks and border color. That's ok though, because we'd probably need to do that anyway since we'll be using custom methods.&lt;br /&gt;
&lt;br /&gt;
=== ints vs shorts vs chars ===&lt;br /&gt;
&lt;br /&gt;
In the description of the methods below, you will notice that all methods take ints. This will not necessarily be the case in sMIDP2lib though. If it improves speed using unsigned shorts or even unsigned chars/bytes, then that'll probably be what we'll do instead. For now, each method is described with ints though.&lt;br /&gt;
&lt;br /&gt;
=== Memory requirements and handling ===&lt;br /&gt;
&lt;br /&gt;
Executables produced with sMIDP2lib will require a CPC with 128kb of RAM, and since loading of data is done dynamically, a disk-drive is also a very good idea. Otherwise it should run on all CPC's. No special requirements for CRTC type and such.&lt;br /&gt;
&lt;br /&gt;
All loading of image and music into memory must of course be handled in some way. I am far from an expert on this area, but I imagine some kind of iterator, keeping track of where the next available memory is. Therefor we also need some way of freeing memory again, e.g. when we close a Player (for example to load a new tune).&lt;br /&gt;
This is far from worked out at this stage though.&lt;br /&gt;
&lt;br /&gt;
== Supported Methods ==&lt;br /&gt;
&lt;br /&gt;
The initial very first version of sMIDP2lib is imagined to support to following few methods of MIDP2.0:&lt;br /&gt;
&lt;br /&gt;
* javax.microedition.lcdui.game.GameCanvas.getGraphics();&lt;br /&gt;
* javax.microedition.lcdui.game.GameCanvas.flushGraphics();&lt;br /&gt;
* javax.microedition.lcdui.Displayable.getWidth();&lt;br /&gt;
* javax.microedition.lcdui.Displayable.getHeight();&lt;br /&gt;
* ''javax.microedition.lcdui.Image.createImage(String source-filename);''&lt;br /&gt;
* javax.microedition.lcdui.Image.getHeight();&lt;br /&gt;
* javax.microedition.lcdui.Image.getWidth();&lt;br /&gt;
* ''javax.microedition.lcdui.Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height);''&lt;br /&gt;
* ''javax.microedition.lcdui.Graphics.drawImage(Image img, int x, int y, int anchor);''&lt;br /&gt;
* ''javax.microedition.lcdui.Graphics.drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha);''&lt;br /&gt;
* javax.microedition.lcdui.Graphics.drawLine(int x1, int y1, int x2, int y2);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.drawRect(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.fillRect(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.setClip(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.setColor(int RGB);&lt;br /&gt;
* ''javax.microedition.media.Manager.createPlayer(String source-filename);''&lt;br /&gt;
&lt;br /&gt;
The ones written ''in italic'' are some of the more heavier methods, and thus some that will most likely be implemented last in this first stage.&lt;br /&gt;
&lt;br /&gt;
For all these methods goes, that coordinates (0,0) is located in the upper left corner of the screen. On the CPC, the lower right corner will be coordinate (319,199). '''Only MODE 1 will be supported in the first many versions of sMIDP2lib.''' If the project becomes popular, it's likely a MODE 0 version will be produced also.&lt;br /&gt;
If possible, it might be a good idea to change the resolution of the CPC MODE 1 from 319*199 to 240*320, since this is the resolution commonly used in J2ME productions. ''Is it possible to get a MODE 1 resolution of 240x320 pixels that'll work with a lib like this?''&lt;br /&gt;
Another idea is to use a resolution of 255x255 pixels, if 255 pixels ends up being a limitation of the drawLine() and other methods.&lt;br /&gt;
&lt;br /&gt;
Besides the methods from the MIDP2.0 API, we also need a few additional methods that aren't part of the MIDP2.0 API. These methods are:&lt;br /&gt;
* setBorder(int color);&lt;br /&gt;
* setInk(int pen, int color);&lt;br /&gt;
&lt;br /&gt;
They are quite self-explanatory, so I won't go into further details about them.&lt;br /&gt;
&lt;br /&gt;
But all the MIDP2.0 API methods are described below along with how they could be adapted to the CPC.&lt;br /&gt;
&lt;br /&gt;
=== GameCanvas.getGraphics() ===&lt;br /&gt;
''J2ME description: Obtains the Graphics object for rendering a GameCanvas.''&lt;br /&gt;
In J2ME this method returns a Graphics object, needed for doing all the drawing on the screen.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method should return a struct with pointers to the methods of the Graphics class. In other words, getGraphics() will be a method that simply does: return new Graphics();&lt;br /&gt;
&lt;br /&gt;
More knowledge about C and SDCC is needed before giving an example of how such a struct could look like.&lt;br /&gt;
&lt;br /&gt;
=== GameCanvas.flushGraphics() ===&lt;br /&gt;
''J2ME description: Flushes the off-screen buffer to the display.''&lt;br /&gt;
In J2ME this is the call that throws all your drawing onto the screen. If you don't call this method, nothing will be displayed.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method should toggle between 2 buffer-screens. When one is visible, drawing takes place on the other. When flushGraphics() is called, the visible buffer-screen and the hidden buffer-screen switches place.&lt;br /&gt;
&lt;br /&gt;
J2ME example for getGraphics() and flushGraphics():&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graphics g = getGraphics();&lt;br /&gt;
g.setColor(0x00ff00); // Green&lt;br /&gt;
g.fillRect(10,10,30,30); // Draw a 30x30 big box at 10,10 with green color&lt;br /&gt;
flushGraphics(); // flush to screen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sMIDP2lib example for getGraphics() and flushGraphics():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graphics g = getGraphics();&lt;br /&gt;
g.setColor(1); // Pen 1&lt;br /&gt;
g.fillRect(10,10,30,30); // Draw a 30x30 big box at 10,10 with pen 1&lt;br /&gt;
flushGraphics(); // Toggle screen address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Displayable.getWidth() ===&lt;br /&gt;
''J2ME description: Gets the width in pixels of the displayable area available to the application.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this will simply return 319&lt;br /&gt;
&lt;br /&gt;
=== Displayable.getHeight() ===&lt;br /&gt;
''J2ME description: Gets the height in pixels of the displayable area available to the application.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this will simply return 199&lt;br /&gt;
&lt;br /&gt;
=== Image.createImage(String source-filename) ===&lt;br /&gt;
''J2ME description: Creates an immutable image from a source image.''&lt;br /&gt;
This is the method used in J2ME for loading an image from within the jar file. (A zip file containing all the classes and resources). It returns an Image object.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, I imagine it will load the image from disk, store it in memory, create a struct that holds a pointer to the image data, along with two shorts holding the image dimensions, and two pointers to the methods getHeight() and getWidth() that returns the dimensions.&lt;br /&gt;
&lt;br /&gt;
That way you will be able to do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
myImage = Image.createImage(&amp;quot;/pic.dat&amp;quot;);&lt;br /&gt;
g.drawImage(myImage, 0, 0, 0);&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fileformat will be a custom fileformat. Read more below.&lt;br /&gt;
&lt;br /&gt;
In the above example, notice that the filename is preceeded by a slash. This is required in J2ME for some reason, when loading images, while other similar looking methods doesn't require it. Therefor sMIDP2lib should always check if the first character in a filename is a slash, and simply ignore it if it is. (Goes for createImage and createPlayer for example).&lt;br /&gt;
&lt;br /&gt;
=== Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Obtains ARGB pixel data from the specified region of this image and stores it in the provided array of integers.''&lt;br /&gt;
This method is used in J2ME to save a piece of an image in an array.&lt;br /&gt;
&lt;br /&gt;
A method like this will be particular useful on the CPC, since it allows us to '''not''' re-draw the whole screen in each iteration, but instead simply save the pieces of background-layers that was drawn over in the previous iteration.&lt;br /&gt;
&lt;br /&gt;
Naturally we won't have RGB data, but instead the byteData of the CPC-representation of image.&lt;br /&gt;
&lt;br /&gt;
The tricky part about this method is, that in J2ME it's always performed on an Image object - which we don't have in sMIDP2lib (and aren't interested in either). But to stay within the MIDP2.0 API specs, we need to keep it that way.&lt;br /&gt;
In order to use this method in J2ME the way we'd use it on the CPC, J2ME devs would need to create a buffer-image to draw too, before drawing to the Graphics object of the canvas. In other words they'd do something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics(); // Get the graphics object of the canvas&lt;br /&gt;
bufferImage = Image.createImage(getWidth(), getHeight()); // Creates an image same size as the screen display size&lt;br /&gt;
buffer_g = bufferImage.getGraphics(); // Get the graphics object of that Image so we can draw on it. (Not in sMIDP2lib)&lt;br /&gt;
buffer_g.setClip(0,0,getWidth(),getHeight());&lt;br /&gt;
buffer_g.setColor(0x000000); // Black color&lt;br /&gt;
buffer_g.fillRect(0,0,getWidth(),getHeight()); // Clear the background&lt;br /&gt;
buffer_g.setColor(0xffffff); // White color&lt;br /&gt;
buffer_g.drawLine(0,0,getHeight(),getWidth()); // Draw a white line across the image&lt;br /&gt;
int[] storedPieceOfBackground = new int[256];&lt;br /&gt;
bufferImage.getRGB(storedPieceOfBackground,0,16,0,0,16,16); // Copy the image data at (0,0) 16x16 pixels into the array storedPieceOfBackground&lt;br /&gt;
bufferImage.setClip(0,0,16,16); // Set clip to the rectangle we just copied&lt;br /&gt;
bufferImage.drawImage(mySprites,-16,0,0); // Draw the 2nd sprite of my sprite-sheet in that clip&lt;br /&gt;
&lt;br /&gt;
// In the next loop-iteration, we can simply draw the storedPieceOfBackground on the spot where the sprite were.&lt;br /&gt;
// That way we don't have to re-draw the entire screen.&lt;br /&gt;
&lt;br /&gt;
g.setClip(0,0,getWidth(),getHeight()); // And finally...&lt;br /&gt;
g.drawImage(bufferImage,0,0,0); // Draw the bufferImage onto the screen&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is called double-buffering in J2ME.&lt;br /&gt;
Since sMIDP2lib will also be doing automatic double-buffering, we can adapt this method. Instead of creating another Image, we'll simply have access to to the already existing buffer-screen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
unsigned char[] storedPieceOfBackground = new char[64]; // We only need space for 64 bytes, since that equals 256 pixels.&lt;br /&gt;
sMIDP2lib_bufferscreen.getRGB(storedPieceOfBackground, 0, 0, 0, 0, 16 16); // Size is still given in pixels, so the getRGB method needs to take care of the division by 4 and such&lt;br /&gt;
// We ignore the offset and scanlength. They'll need to be part of the method, but will be ignored.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The variable sMIDP2lib_bufferscreen is a struct containing a pointer to the address of the current buffer-screen, meaning the one we're currently drawing to. (We'll always be drawing to the non-visible screen). When ever flushGraphics() is called, the current non-visible buffer-screen is shown, and the previous visible screen not becomes the buffer-screen. Therefor, the pointer in the sMIDP2lib_bufferscreen struct, will change value when flushGraphics() is called.&lt;br /&gt;
&lt;br /&gt;
This is a good solution because we keep the MIDP2.0 API structure, and we aren't creating overhead since the data in the arrays can be overridden again and again.&lt;br /&gt;
&lt;br /&gt;
Since we now have an array of byte data, we need a corresponding drawRGB() method to draw it again. See below.&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawImage(Image img, int x, int y, int anchor) ===&lt;br /&gt;
''J2ME description: Draws the specified image by using the anchor point.''&lt;br /&gt;
In J2ME, this method takes an Image object and renders on the screen. The anchor point is used to indicate where on the image x and y is. For example, anchor can be Graphics.TOP|Graphics.LEFT (which is typically equal to 0) which means that x,y is in the upper left corner of the image.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method obviously can't take an object as parameter. Instead it will take a struct as parameter (as described above). This struct contains the address of the image data, along with the dimensions of the image.&lt;br /&gt;
In the initial very first version of sMIDP2lib, the anchor parameter will be ignored. x,y will always be in the upper left corner.&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha) ===&lt;br /&gt;
''J2ME description: Renders a series of device-independent RGB+transparency values in a specified region.''&lt;br /&gt;
&lt;br /&gt;
This method will always be used in combination with Graphics.getRGB(), and will thus need adaptions similar to that method.&lt;br /&gt;
Like with getRGB() we will ignore the scanlength parameter. (At least in the first versions of sMIDP2lib). We will also ignore the processAlpha parameter. But both parameters will still need to be part of the method.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g.drawRGB(storedPieceOfBackground, 0, 0, 0, 0, 16, 16, false);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''I don't know what possibilities we have in C regarding arrays as parameter. Logically for it to work on the CPC, only a pointer to the array should be used. I need to experiment and ask around though.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawLine(int x1, int y1, int x2, int y2) ===&lt;br /&gt;
''J2ME description: Draws a line between the coordinates (x1,y1) and (x2,y2) using the current color and stroke style.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawRect(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Draws the outline of the specified rectangle using the current color and stroke style.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.fillRect(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Fills the specified rectangle with the current color.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.setClip(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Sets the current clip to the rectangle specified by the given coordinates.''&lt;br /&gt;
This is a very important method, that defines where on the canvas the following drawing-methods should draw. It is this method that allows you to load a sprite-sheet containing 4x4 sprites, and then only draw one of them.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
mySprites = Image.createImage(&amp;quot;sprites.img&amp;quot;); // Loads sprites.img that contains 4x4 sprites of 16x16 pixels each&lt;br /&gt;
g.setClip(50,50,16,16); // Defines the clip to be at (50,50) and 16x16 pixels big.&lt;br /&gt;
g.drawImage(mySprites, 34, 50, 0); // Draws the spritesheet at (34,50);&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above example, it will be the 2nd sprite in the top row that'll be displayed, because the whole picture is drawn -16 pixels from the clip X.&lt;br /&gt;
&lt;br /&gt;
Any Graphics method called after a setClip() will only affect the defined clip.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
g.setClip(50,50,16,16); // Defines the clip to be at (50,50) and 16x16 pixels big.&lt;br /&gt;
g.fillRect(0,0,100,100); // Only fills the above clip despite of different values in the fillRect method&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially before setting a clip, the default clip will be the whole screen (0,0,getWidth(),getHeight()). However, because your main loop will probably contains a lot of calls to setClip(), you should always call setClip(0,0,getWidth(),getHeight()) before calling fillRect(0,0,getWidth(),getHeight()).&lt;br /&gt;
&lt;br /&gt;
=== Graphics.setColor(int RGB) ===&lt;br /&gt;
''J2ME description: Sets the current color to the specified RGB values.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib we obviously don't have RGB colors. So this method will be adapted into taking just the pen-number. In other words, a number between 0 and 3 (because we only support MODE 1 for now).&lt;br /&gt;
Since this leaves us without any way of setting inks for each pen, we need to add some additional methods that aren't part of the MIDP2.0 API. These are:&lt;br /&gt;
setBorder(int color);&lt;br /&gt;
setInk(int pen, int color);&lt;br /&gt;
&lt;br /&gt;
=== Manager.createPlayer(String source-filename) ===&lt;br /&gt;
''J2ME description: Create a Player to play back media.''&lt;br /&gt;
Returns a Player object, that has methods such as start() and stop(). With J2ME you can play mp3, wav, and midi. As we know, we can't do that with the CPC.&lt;br /&gt;
&lt;br /&gt;
So instead sMIDP2lib must be able to load STarKos music files. The method should, like the createImage() method, return a struct with pointers to methods like start() and stop().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
music = Manager.createPlayer(&amp;quot;music.bin&amp;quot;); // Loads the music from disk&lt;br /&gt;
music.start(); // Calls STarKos playback routine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image file format ==&lt;br /&gt;
&lt;br /&gt;
I imagine the fileformat of images to be a rather simple one. Its first byte will contain the width of the image. The next byte will contain the height of the image. That way an image can max be 255x255 pixels big. ''This is only a thought, and will possibly change into 2 bytes for each value instead''. The rest of the data is the image itself, using standard CPC representation of image-data.&lt;br /&gt;
&lt;br /&gt;
Any image-size within that limitation can then be loaded. Doesn't have to be fullscreen images. You can load a small sprite-sheet of e.g. 64*128 pixels, and then also load another image containing a font and having a size of 480x8 pixels. Each image will be accessible through their structs.&lt;br /&gt;
&lt;br /&gt;
A Java command-line utility will ideally be created (if one doesn't exist already) that will convert 8bit PNG files (and/or maybe other formats) into the sMIDP2lib image format.&lt;br /&gt;
&lt;br /&gt;
== Issues to solve ==&lt;br /&gt;
&lt;br /&gt;
Currently, there are the following issues to work out a solution for:&lt;br /&gt;
=== Double-buffering makes it problematic to &amp;quot;un-draw&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I don't have any ideas on how to solve this at the moment, other that either skipping the double-buffering part, or breaking the MIDP2.0 API rules. But I hope we'll find a solution.&lt;br /&gt;
&lt;br /&gt;
== Contributers ==&lt;br /&gt;
&lt;br /&gt;
The following people are contributing to this project at the moment:&lt;br /&gt;
&lt;br /&gt;
* mr_lou (available on IRC, channel #CPC on EsperNET, channel #AmstradCPC on EpiKnet and channel #CPC on freenode)&lt;br /&gt;
* Demoniak (available on IRC, channel #AmstradCPC on EpiKnet)&lt;br /&gt;
* TFM/FS&lt;br /&gt;
&lt;br /&gt;
== History log ==&lt;br /&gt;
* December 20th, This project page was created.&lt;br /&gt;
* December 19th, Demoniak helped a lot by supplying two routines, drawLine() and FastCls() that convinced mr_lou that this whole idea is quite possible to make a reality. His drawLine routine was twice as fast as the firmware routine. [http://www.cpcwiki.eu/forum/programming/help-with-sdcc/?action=dlattach;attach=3880 Check comparion]&lt;br /&gt;
* December 11th, mr_lou created [http://www.cpcwiki.eu/forum/programming/graphics-framework-idea/ a thread about the idea] at the forum.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [http://docs.oracle.com/javame/config/cldc/ref-impl/midp2.0/jsr118/index.html MIDP2.0 API Javadocs]&lt;br /&gt;
* [http://www.dewfall.dk/html5 Small example of HTML5/Javascript version of sMIDP2lib (View source to see J2ME-like code in Javascript) (Runs best with Opera or Chrome)]&lt;br /&gt;
* [http://dewfall.dk/Streger.html Small example of Flash version of sMIDP2lib]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]] [[Category:C]] [[Category:CrossDev]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=SMIDP2lib_for_SDCC&amp;diff=71770</id>
		<title>SMIDP2lib for SDCC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=SMIDP2lib_for_SDCC&amp;diff=71770"/>
				<updated>2011-12-20T15:34:19Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Current version of this page: v0.1''&lt;br /&gt;
&lt;br /&gt;
''Current version of sMIDP2lib: None''&lt;br /&gt;
&lt;br /&gt;
== What is sMIDP2lib? ==&lt;br /&gt;
&lt;br /&gt;
'''sMIDP2lib''' is currently only an experimental project-idea spawned by mr_lou in December 2011. Being a sparetime J2ME developer (Java Micro Edition, used for cellphone development) since 2006 (see www.lublu.dk), he got the idea of doing CPC development using a framework library for SDCC containing the same method-names used when doing J2ME development.&lt;br /&gt;
&lt;br /&gt;
The idea is simple: Implement selected methods from the MIDP2.0 API (Mobile Information Device Profile) in assembler routines, and embed those routines in SDCC functions. The end result should be a [[:Category:C|C library]] to be included in your SDCC project.&lt;br /&gt;
&lt;br /&gt;
The point of this would first and foremost be to make it easier and quicker for J2ME developers to develop for the CPC, but of course also to provide an alternative library to CPCRSlib for Z88DK.&lt;br /&gt;
A library like this would make it possible for J2ME developers to develop for the CPC much faster. Or even develop the same game for J2ME and the CPC at the same time (with some music and graphic conversion).&lt;br /&gt;
&lt;br /&gt;
Naturally not the whole MIDP2.0 API needs to be implemented. Thus the name sMIDP2lib = Semi MIDP2.0 API library.&lt;br /&gt;
&lt;br /&gt;
== Why a J2ME-based library? ==&lt;br /&gt;
&lt;br /&gt;
J2ME was designed to run on small limited devices, and it consists of simple methods. To compare, Android has a ton of advanced and complex drawing methods that would be very difficult to implement for the CPC. But the Graphics class of J2ME is very simple and straightforward easy to understand for everyone.&lt;br /&gt;
Because of the simplicity of the MIDP2.0 API, it should theoretically also be possible to implement these methods using assembler routines on the CPC, and get an acceptable speed too. Maybe not at an ultra fast framerate, but an acceptable one. And that's what this project is about in stage 1: Seeing if it's possible.&lt;br /&gt;
&lt;br /&gt;
=== Portability ===&lt;br /&gt;
&lt;br /&gt;
In the past, mr_lou has been working on sMIDP2lib versions for other platforms as well, such as&lt;br /&gt;
* HTML5/Javascript&lt;br /&gt;
* Flash&lt;br /&gt;
* Android&lt;br /&gt;
&lt;br /&gt;
This opens up for potential easy porting to 4 other platforms: If CPC developers use sMIDP2lib with SDCC, they should theoretically be able to port their software to J2ME, Android, Flash or HTML5/Javascript relatively fast. (See external links at the bottom of this page for a HTML5/Javascript and Flash example of sMIDP2lib).&lt;br /&gt;
&lt;br /&gt;
''HTML5/Javascript and Flash source of sMIDP2lib is free for anyone who wants it. The Android version is private for now though.''&lt;br /&gt;
&lt;br /&gt;
== General guidelines ==&lt;br /&gt;
&lt;br /&gt;
Since the idea behind sMIDP2lib is to be a semi MIDP2.0 library, all CPC firmware routines can (theoretically) be dumped. They will never be used anyway (as far as I can see right now). This means we're free to use EXX instructions and other tricks to speed things up - and '''speed IS important''' in this library. Speed comes before most other things. As a result, it might be ok to settle for e.g. a drawLine() method that can only draw a line 255 pixels long.&lt;br /&gt;
&lt;br /&gt;
This also means that we'll need to implement a few extra methods, in order to do stuff like setting inks and border color. That's ok though, because we'd probably need to do that anyway since we'll be using custom methods.&lt;br /&gt;
&lt;br /&gt;
=== ints vs shorts vs chars ===&lt;br /&gt;
&lt;br /&gt;
In the description of the methods below, you will notice that all methods take ints. This will not necessarily be the case in sMIDP2lib though. If it improves speed using unsigned shorts or even unsigned chars/bytes, then that'll probably be what we'll do instead. For now, each method is described with ints though.&lt;br /&gt;
&lt;br /&gt;
=== Memory requirements and handling ===&lt;br /&gt;
&lt;br /&gt;
Executables produced with sMIDP2lib will require a CPC with 128kb of RAM, and since loading of data is done dynamically, a disk-drive is also a very good idea. Otherwise it should run on all CPC's. No special requirements for CRTC type and such.&lt;br /&gt;
&lt;br /&gt;
All loading of image and music into memory must of course be handled in some way. I am far from an expert on this area, but I imagine some kind of iterator, keeping track of where the next available memory is. Therefor we also need some way of freeing memory again, e.g. when we close a Player (for example to load a new tune).&lt;br /&gt;
This is far from worked out at this stage though.&lt;br /&gt;
&lt;br /&gt;
== Supported Methods ==&lt;br /&gt;
&lt;br /&gt;
The initial very first version of sMIDP2lib is imagined to support to following few methods of MIDP2.0:&lt;br /&gt;
&lt;br /&gt;
* javax.microedition.lcdui.game.GameCanvas.getGraphics();&lt;br /&gt;
* javax.microedition.lcdui.game.GameCanvas.flushGraphics();&lt;br /&gt;
* javax.microedition.lcdui.Displayable.getWidth();&lt;br /&gt;
* javax.microedition.lcdui.Displayable.getHeight();&lt;br /&gt;
* ''javax.microedition.lcdui.Image.createImage(String source-filename);''&lt;br /&gt;
* javax.microedition.lcdui.Image.getHeight();&lt;br /&gt;
* javax.microedition.lcdui.Image.getWidth();&lt;br /&gt;
* ''javax.microedition.lcdui.Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height);''&lt;br /&gt;
* ''javax.microedition.lcdui.Graphics.drawImage(Image img, int x, int y, int anchor);''&lt;br /&gt;
* ''javax.microedition.lcdui.Graphics.drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha);''&lt;br /&gt;
* javax.microedition.lcdui.Graphics.drawLine(int x1, int y1, int x2, int y2);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.drawRect(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.fillRect(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.setClip(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.setColor(int RGB);&lt;br /&gt;
* ''javax.microedition.media.Manager.createPlayer(String source-filename);''&lt;br /&gt;
&lt;br /&gt;
The ones written ''in italic'' are some of the more heavier methods, and thus some that will most likely be implemented last in this first stage.&lt;br /&gt;
&lt;br /&gt;
For all these methods goes, that coordinates (0,0) is located in the upper left corner of the screen. On the CPC, the lower right corner will be coordinate (319,199). '''Only MODE 1 will be supported in the first many versions of sMIDP2lib.''' If the project becomes popular, it's likely a MODE 0 version will be produced also.&lt;br /&gt;
If possible, it might be a good idea to change the resolution of the CPC MODE 1 from 319*199 to 240*320, since this is the resolution commonly used in J2ME productions. ''Is it possible to get a MODE 1 resolution of 240x320 pixels that'll work with a lib like this?''&lt;br /&gt;
Another idea is to use a resolution of 255x255 pixels, if 255 pixels ends up being a limitation of the drawLine() and other methods.&lt;br /&gt;
&lt;br /&gt;
Besides the methods from the MIDP2.0 API, we also need a few additional methods that aren't part of the MIDP2.0 API. These methods are:&lt;br /&gt;
* setBorder(int color);&lt;br /&gt;
* setInk(int pen, int color);&lt;br /&gt;
&lt;br /&gt;
They are quite self-explanatory, so I won't go into further details about them.&lt;br /&gt;
&lt;br /&gt;
But all the MIDP2.0 API methods are described below along with how they could be adapted to the CPC.&lt;br /&gt;
&lt;br /&gt;
=== GameCanvas.getGraphics() ===&lt;br /&gt;
''J2ME description: Obtains the Graphics object for rendering a GameCanvas.''&lt;br /&gt;
In J2ME this method returns a Graphics object, needed for doing all the drawing on the screen.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method should return a struct with pointers to the methods of the Graphics class. In other words, getGraphics() will be a method that simply does: return new Graphics();&lt;br /&gt;
&lt;br /&gt;
More knowledge about C and SDCC is needed before giving an example of how such a struct could look like.&lt;br /&gt;
&lt;br /&gt;
=== GameCanvas.flushGraphics() ===&lt;br /&gt;
''J2ME description: Flushes the off-screen buffer to the display.''&lt;br /&gt;
In J2ME this is the call that throws all your drawing onto the screen. If you don't call this method, nothing will be displayed.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method should toggle between 2 buffer-screens. When one is visible, drawing takes place on the other. When flushGraphics() is called, the visible buffer-screen and the hidden buffer-screen switches place.&lt;br /&gt;
&lt;br /&gt;
J2ME example for getGraphics() and flushGraphics():&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graphics g = getGraphics();&lt;br /&gt;
g.setColor(0x00ff00); // Green&lt;br /&gt;
g.fillRect(10,10,30,30); // Draw a 30x30 big box at 10,10 with green color&lt;br /&gt;
flushGraphics(); // flush to screen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sMIDP2lib example for getGraphics() and flushGraphics():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graphics g = getGraphics();&lt;br /&gt;
g.setColor(1); // Pen 1&lt;br /&gt;
g.fillRect(10,10,30,30); // Draw a 30x30 big box at 10,10 with pen 1&lt;br /&gt;
flushGraphics(); // Toggle screen address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Displayable.getWidth() ===&lt;br /&gt;
''J2ME description: Gets the width in pixels of the displayable area available to the application.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this will simply return 319&lt;br /&gt;
&lt;br /&gt;
=== Displayable.getHeight() ===&lt;br /&gt;
''J2ME description: Gets the height in pixels of the displayable area available to the application.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this will simply return 199&lt;br /&gt;
&lt;br /&gt;
=== Image.createImage(String source-filename) ===&lt;br /&gt;
''J2ME description: Creates an immutable image from a source image.''&lt;br /&gt;
This is the method used in J2ME for loading an image from within the jar file. (A zip file containing all the classes and resources). It returns an Image object.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, I imagine it will load the image from disk, store it in memory, create a struct that holds a pointer to the image data, along with two shorts holding the image dimensions, and two pointers to the methods getHeight() and getWidth() that returns the dimensions.&lt;br /&gt;
&lt;br /&gt;
That way you will be able to do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
myImage = Image.createImage(&amp;quot;/pic.dat&amp;quot;);&lt;br /&gt;
g.drawImage(myImage, 0, 0, 0);&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fileformat will be a custom fileformat. Read more below.&lt;br /&gt;
&lt;br /&gt;
In the above example, notice that the filename is preceeded by a slash. This is required in J2ME for some reason, when loading images, while other similar looking methods doesn't require it. Therefor sMIDP2lib should always check if the first character in a filename is a slash, and simply ignore it if it is. (Goes for createImage and createPlayer for example).&lt;br /&gt;
&lt;br /&gt;
=== Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Obtains ARGB pixel data from the specified region of this image and stores it in the provided array of integers.''&lt;br /&gt;
This method is used in J2ME to save a piece of an image in an array.&lt;br /&gt;
&lt;br /&gt;
A method like this will be particular useful on the CPC, since it allows us to '''not''' re-draw the whole screen in each iteration, but instead simply save the pieces of background-layers that was drawn over in the previous iteration.&lt;br /&gt;
&lt;br /&gt;
Naturally we won't have RGB data, but instead the byteData of the CPC-representation of image.&lt;br /&gt;
&lt;br /&gt;
The tricky part about this method is, that in J2ME it's always performed on an Image object - which we don't have in sMIDP2lib (and aren't interested in either). But to stay within the MIDP2.0 API specs, we need to keep it that way.&lt;br /&gt;
In order to use this method in J2ME the way we'd use it on the CPC, J2ME devs would need to create a buffer-image to draw too, before drawing to the Graphics object of the canvas. In other words they'd do something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics(); // Get the graphics object of the canvas&lt;br /&gt;
bufferImage = Image.createImage(getWidth(), getHeight()); // Creates an image same size as the screen display size&lt;br /&gt;
buffer_g = bufferImage.getGraphics(); // Get the graphics object of that Image so we can draw on it. (Not in sMIDP2lib)&lt;br /&gt;
buffer_g.setClip(0,0,getWidth(),getHeight());&lt;br /&gt;
buffer_g.setColor(0x000000); // Black color&lt;br /&gt;
buffer_g.fillRect(0,0,getWidth(),getHeight()); // Clear the background&lt;br /&gt;
buffer_g.setColor(0xffffff); // White color&lt;br /&gt;
buffer_g.drawLine(0,0,getHeight(),getWidth()); // Draw a white line across the image&lt;br /&gt;
int[] storedPieceOfBackground = new int[256];&lt;br /&gt;
bufferImage.getRGB(storedPieceOfBackground,0,16,0,0,16,16); // Copy the image data at (0,0) 16x16 pixels into the array storedPieceOfBackground&lt;br /&gt;
bufferImage.setClip(0,0,16,16); // Set clip to the rectangle we just copied&lt;br /&gt;
bufferImage.drawImage(mySprites,-16,0,0); // Draw the 2nd sprite of my sprite-sheet in that clip&lt;br /&gt;
&lt;br /&gt;
// In the next loop-iteration, we can simply draw the storedPieceOfBackground on the spot where the sprite were.&lt;br /&gt;
// That way we don't have to re-draw the entire screen.&lt;br /&gt;
&lt;br /&gt;
g.setClip(0,0,getWidth(),getHeight()); // And finally...&lt;br /&gt;
g.drawImage(bufferImage,0,0,0); // Draw the bufferImage onto the screen&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is called double-buffering in J2ME.&lt;br /&gt;
Since sMIDP2lib will also be doing automatic double-buffering, we can adapt this method. Instead of creating another Image, we'll simply have access to to the already existing buffer-screen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
unsigned char[] storedPieceOfBackground = new char[64]; // We only need space for 64 bytes, since that equals 256 pixels.&lt;br /&gt;
sMIDP2lib_bufferscreen.getRGB(storedPieceOfBackground, 0, 0, 0, 0, 16 16); // Size is still given in pixels, so the getRGB method needs to take care of the division by 4 and such&lt;br /&gt;
// We ignore the offset and scanlength. They'll need to be part of the method, but will be ignored.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The variable sMIDP2lib_bufferscreen is a struct containing a pointer to the address of the current buffer-screen, meaning the one we're currently drawing to. (We'll always be drawing to the non-visible screen). When ever flushGraphics() is called, the current non-visible buffer-screen is shown, and the previous visible screen not becomes the buffer-screen. Therefor, the pointer in the sMIDP2lib_bufferscreen struct, will change value when flushGraphics() is called.&lt;br /&gt;
&lt;br /&gt;
This is a good solution because we keep the MIDP2.0 API structure, and we aren't creating overhead since the data in the arrays can be overridden again and again.&lt;br /&gt;
&lt;br /&gt;
Since we now have an array of byte data, we need a corresponding drawRGB() method to draw it again. See below.&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawImage(Image img, int x, int y, int anchor) ===&lt;br /&gt;
''J2ME description: Draws the specified image by using the anchor point.''&lt;br /&gt;
In J2ME, this method takes an Image object and renders on the screen. The anchor point is used to indicate where on the image x and y is. For example, anchor can be Graphics.TOP|Graphics.LEFT (which is typically equal to 0) which means that x,y is in the upper left corner of the image.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method obviously can't take an object as parameter. Instead it will take a struct as parameter (as described above). This struct contains the address of the image data, along with the dimensions of the image.&lt;br /&gt;
In the initial very first version of sMIDP2lib, the anchor parameter will be ignored. x,y will always be in the upper left corner.&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha) ===&lt;br /&gt;
''J2ME description: Renders a series of device-independent RGB+transparency values in a specified region.''&lt;br /&gt;
&lt;br /&gt;
This method will always be used in combination with Graphics.getRGB(), and will thus need adaptions similar to that method.&lt;br /&gt;
Like with getRGB() we will ignore the scanlength parameter. (At least in the first versions of sMIDP2lib). We will also ignore the processAlpha parameter. But both parameters will still need to be part of the method.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g.drawRGB(storedPieceOfBackground, 0, 0, 0, 0, 16, 16, false);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''I don't know what possibilities we have in C regarding arrays as parameter. Logically for it to work on the CPC, only a pointer to the array should be used. I need to experiment and ask around though.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawLine(int x1, int y1, int x2, int y2) ===&lt;br /&gt;
''J2ME description: Draws a line between the coordinates (x1,y1) and (x2,y2) using the current color and stroke style.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawRect(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Draws the outline of the specified rectangle using the current color and stroke style.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.fillRect(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Fills the specified rectangle with the current color.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.setClip(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Sets the current clip to the rectangle specified by the given coordinates.''&lt;br /&gt;
This is a very important method, that defines where on the canvas the following drawing-methods should draw. It is this method that allows you to load a sprite-sheet containing 4x4 sprites, and then only draw one of them.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
mySprites = Image.createImage(&amp;quot;sprites.img&amp;quot;); // Loads sprites.img that contains 4x4 sprites of 16x16 pixels each&lt;br /&gt;
g.setClip(50,50,16,16); // Defines the clip to be at (50,50) and 16x16 pixels big.&lt;br /&gt;
g.drawImage(mySprites, 34, 50, 0); // Draws the spritesheet at (34,50);&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above example, it will be the 2nd sprite in the top row that'll be displayed, because the whole picture is drawn -16 pixels from the clip X.&lt;br /&gt;
&lt;br /&gt;
Any Graphics method called after a setClip() will only affect the defined clip.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
g.setClip(50,50,16,16); // Defines the clip to be at (50,50) and 16x16 pixels big.&lt;br /&gt;
g.fillRect(0,0,100,100); // Only fills the above clip despite of different values in the fillRect method&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially before setting a clip, the default clip will be the whole screen (0,0,getWidth(),getHeight()). However, because your main loop will probably contains a lot of calls to setClip(), you should always call setClip(0,0,getWidth(),getHeight()) before calling fillRect(0,0,getWidth(),getHeight()).&lt;br /&gt;
&lt;br /&gt;
=== Graphics.setColor(int RGB) ===&lt;br /&gt;
''J2ME description: Sets the current color to the specified RGB values.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib we obviously don't have RGB colors. So this method will be adapted into taking just the pen-number. In other words, a number between 0 and 3 (because we only support MODE 1 for now).&lt;br /&gt;
Since this leaves us without any way of setting inks for each pen, we need to add some additional methods that aren't part of the MIDP2.0 API. These are:&lt;br /&gt;
setBorder(int color);&lt;br /&gt;
setInk(int pen, int color);&lt;br /&gt;
&lt;br /&gt;
=== Manager.createPlayer(String source-filename) ===&lt;br /&gt;
''J2ME description: Create a Player to play back media.''&lt;br /&gt;
Returns a Player object, that has methods such as start() and stop(). With J2ME you can play mp3, wav, and midi. As we know, we can't do that with the CPC.&lt;br /&gt;
&lt;br /&gt;
So instead sMIDP2lib must be able to load STarKos music files. The method should, like the createImage() method, return a struct with pointers to methods like start() and stop().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
music = Manager.createPlayer(&amp;quot;music.bin&amp;quot;); // Loads the music from disk&lt;br /&gt;
music.start(); // Calls STarKos playback routine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image file format ==&lt;br /&gt;
&lt;br /&gt;
I imagine the fileformat of images to be a rather simple one. Its first byte will contain the width of the image. The next byte will contain the height of the image. That way an image can max be 255x255 pixels big. ''This is only a thought, and will possibly change into 2 bytes for each value instead''. The rest of the data is the image itself, using standard CPC representation of image-data.&lt;br /&gt;
&lt;br /&gt;
Any image-size within that limitation can then be loaded. Doesn't have to be fullscreen images. You can load a small sprite-sheet of e.g. 64*128 pixels, and then also load another image containing a font and having a size of 480x8 pixels. Each image will be accessible through their structs.&lt;br /&gt;
&lt;br /&gt;
A Java command-line utility will ideally be created (if one doesn't exist already) that will convert 8bit PNG files (and/or maybe other formats) into the sMIDP2lib image format.&lt;br /&gt;
&lt;br /&gt;
== Issues to solve ==&lt;br /&gt;
&lt;br /&gt;
Currently, there are the following issues to work out a solution for:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I don't have any ideas on how to solve this at the moment, other that either skipping the double-buffering part, or breaking the MIDP2.0 API rules. But I hope we'll find a solution.&lt;br /&gt;
&lt;br /&gt;
== Contributers ==&lt;br /&gt;
&lt;br /&gt;
The following people are contributing to this project at the moment:&lt;br /&gt;
&lt;br /&gt;
* mr_lou (available on IRC, channel #CPC on EsperNET, channel #AmstradCPC on EpiKnet and channel #CPC on freenode)&lt;br /&gt;
* Demoniak (available on IRC, channel #AmstradCPC on EpiKnet)&lt;br /&gt;
* TFM/FS&lt;br /&gt;
&lt;br /&gt;
== History log ==&lt;br /&gt;
* December 20th, This project page was created.&lt;br /&gt;
* December 19th, Demoniak helped a lot by supplying two routines, drawLine() and FastCls() that convinced mr_lou that this whole idea is quite possible to make a reality. His drawLine routine was twice as fast as the firmware routine. [http://www.cpcwiki.eu/forum/programming/help-with-sdcc/?action=dlattach;attach=3880 Check comparion]&lt;br /&gt;
* December 11th, mr_lou created [http://www.cpcwiki.eu/forum/programming/graphics-framework-idea/ a thread about the idea] at the forum.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [http://docs.oracle.com/javame/config/cldc/ref-impl/midp2.0/jsr118/index.html MIDP2.0 API Javadocs]&lt;br /&gt;
* [http://www.dewfall.dk/html5 Small example of HTML5/Javascript version of sMIDP2lib (View source to see J2ME-like code in Javascript) (Runs best with Opera or Chrome)]&lt;br /&gt;
* [http://dewfall.dk/Streger.html Small example of Flash version of sMIDP2lib]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]] [[Category:C]] [[Category:CrossDev]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=SMIDP2lib_for_SDCC&amp;diff=71769</id>
		<title>SMIDP2lib for SDCC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=SMIDP2lib_for_SDCC&amp;diff=71769"/>
				<updated>2011-12-20T15:32:47Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: Created page with &amp;quot;''Current version of this page: v0.1''  ''Current version of sMIDP2lib: None''  == What is sMIDP2lib? ==  '''sMIDP2lib''' is currently only an experimental project-idea spawned b...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Current version of this page: v0.1''&lt;br /&gt;
&lt;br /&gt;
''Current version of sMIDP2lib: None''&lt;br /&gt;
&lt;br /&gt;
== What is sMIDP2lib? ==&lt;br /&gt;
&lt;br /&gt;
'''sMIDP2lib''' is currently only an experimental project-idea spawned by mr_lou in December 2011. Being a sparetime J2ME developer (Java Micro Edition, used for cellphone development) since 2006 (see www.lublu.dk), he got the idea of doing CPC development using a framework library for SDCC containing the same method-names used when doing J2ME development.&lt;br /&gt;
&lt;br /&gt;
The idea is simple: Implement selected methods from the MIDP2.0 API (Mobile Information Device Profile) in assembler routines, and embed those routines in SDCC functions. The end result should be a [[:Category:C|C library]] to be included in your SDCC project.&lt;br /&gt;
&lt;br /&gt;
The point of this would first and foremost be to make it easier and quicker for J2ME developers to develop for the CPC, but of course also to provide an alternative library to CPCRSlib for Z88DK.&lt;br /&gt;
A library like this would make it possible for J2ME developers to develop for the CPC much faster. Or even develop the same game for J2ME and the CPC at the same time (with some music and graphic conversion).&lt;br /&gt;
&lt;br /&gt;
Naturally not the whole MIDP2.0 API needs to be implemented. Thus the name sMIDP2lib = Semi MIDP2.0 API library.&lt;br /&gt;
&lt;br /&gt;
== Why a J2ME-based library? ==&lt;br /&gt;
&lt;br /&gt;
J2ME was designed to run on small limited devices, and it consists of simple methods. To compare, Android has a ton of advanced and complex drawing methods that would be very difficult to implement for the CPC. But the Graphics class of J2ME is very simple and straightforward easy to understand for everyone.&lt;br /&gt;
Because of the simplicity of the MIDP2.0 API, it should theoretically also be possible to implement these methods using assembler routines on the CPC, and get an acceptable speed too. Maybe not at an ultra fast framerate, but an acceptable one. And that's what this project is about in stage 1: Seeing if it's possible.&lt;br /&gt;
&lt;br /&gt;
=== Portability ===&lt;br /&gt;
&lt;br /&gt;
In the past, mr_lou has been working on sMIDP2lib versions for other platforms as well, such as&lt;br /&gt;
* HTML5/Javascript&lt;br /&gt;
* Flash&lt;br /&gt;
* Android&lt;br /&gt;
&lt;br /&gt;
This opens up for potential easy porting to 4 other platforms: If CPC developers use sMIDP2lib with SDCC, they should theoretically be able to port their software to J2ME, Android, Flash or HTML5/Javascript relatively fast. (See external links at the bottom of this page for a HTML5/Javascript and Flash example of sMIDP2lib).&lt;br /&gt;
&lt;br /&gt;
''HTML5/Javascript and Flash source of sMIDP2lib is free for anyone who wants it. The Android version is private for now though.''&lt;br /&gt;
&lt;br /&gt;
== General guidelines ==&lt;br /&gt;
&lt;br /&gt;
Since the idea behind sMIDP2lib is to be a semi MIDP2.0 library, all CPC firmware routines can (theoretically) be dumped. They will never be used anyway (as far as I can see right now). This means we're free to use EXX instructions and other tricks to speed things up - and '''speed IS important''' in this library. Speed comes before most other things. As a result, it might be ok to settle for e.g. a drawLine() method that can only draw a line 255 pixels long.&lt;br /&gt;
&lt;br /&gt;
This also means that we'll need to implement a few extra methods, in order to do stuff like setting inks and border color. That's ok though, because we'd probably need to do that anyway since we'll be using custom methods.&lt;br /&gt;
&lt;br /&gt;
=== ints vs shorts vs chars ===&lt;br /&gt;
&lt;br /&gt;
In the description of the methods below, you will notice that all methods take ints. This will not necessarily be the case in sMIDP2lib though. If it improves speed using unsigned shorts or even unsigned chars/bytes, then that'll probably be what we'll do instead. For now, each method is described with ints though.&lt;br /&gt;
&lt;br /&gt;
=== Memory requirements and handling ===&lt;br /&gt;
&lt;br /&gt;
Executables produced with sMIDP2lib will require a CPC with 128kb of RAM, and since loading of data is done dynamically, a disk-drive is also a very good idea. Otherwise it should run on all CPC's. No special requirements for CRTC type and such.&lt;br /&gt;
&lt;br /&gt;
All loading of image and music into memory must of course be handled in some way. I am far from an expert on this area, but I imagine some kind of iterator, keeping track of where the next available memory is. Therefor we also need some way of freeing memory again, e.g. when we close a Player (for example to load a new tune).&lt;br /&gt;
This is far from worked out at this stage though.&lt;br /&gt;
&lt;br /&gt;
== Supported Methods ==&lt;br /&gt;
&lt;br /&gt;
The initial very first version of sMIDP2lib is imagined to support to following few methods of MIDP2.0:&lt;br /&gt;
&lt;br /&gt;
* javax.microedition.lcdui.game.GameCanvas.getGraphics();&lt;br /&gt;
* javax.microedition.lcdui.game.GameCanvas.flushGraphics();&lt;br /&gt;
* javax.microedition.lcdui.Displayable.getWidth();&lt;br /&gt;
* javax.microedition.lcdui.Displayable.getHeight();&lt;br /&gt;
* ''javax.microedition.lcdui.Image.createImage(String source-filename);''&lt;br /&gt;
* javax.microedition.lcdui.Image.getHeight();&lt;br /&gt;
* javax.microedition.lcdui.Image.getWidth();&lt;br /&gt;
* ''javax.microedition.lcdui.Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height);''&lt;br /&gt;
* ''javax.microedition.lcdui.Graphics.drawImage(Image img, int x, int y, int anchor);''&lt;br /&gt;
* ''javax.microedition.lcdui.Graphics.drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha);''&lt;br /&gt;
* javax.microedition.lcdui.Graphics.drawLine(int x1, int y1, int x2, int y2);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.drawRect(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.fillRect(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.setClip(int x, int y, int width, int height);&lt;br /&gt;
* javax.microedition.lcdui.Graphics.setColor(int RGB);&lt;br /&gt;
* ''javax.microedition.media.Manager.createPlayer(String source-filename);''&lt;br /&gt;
&lt;br /&gt;
The ones written ''in italic'' are some of the more heavier methods, and thus some that will most likely be implemented last in this first stage.&lt;br /&gt;
&lt;br /&gt;
For all these methods goes, that coordinates (0,0) is located in the upper left corner of the screen. On the CPC, the lower right corner will be coordinate (319,199). '''Only MODE 1 will be supported in the first many versions of sMIDP2lib.''' If the project becomes popular, it's likely a MODE 0 version will be produced also.&lt;br /&gt;
If possible, it might be a good idea to change the resolution of the CPC MODE 1 from 319*199 to 240*320, since this is the resolution commonly used in J2ME productions. ''Is it possible to get a MODE 1 resolution of 240x320 pixels that'll work with a lib like this?''&lt;br /&gt;
Another idea is to use a resolution of 255x255 pixels, if 255 pixels ends up being a limitation of the drawLine() and other methods.&lt;br /&gt;
&lt;br /&gt;
Besides the methods from the MIDP2.0 API, we also need a few additional methods that aren't part of the MIDP2.0 API. These methods are:&lt;br /&gt;
* setBorder(int color);&lt;br /&gt;
* setInk(int pen, int color);&lt;br /&gt;
&lt;br /&gt;
They are quite self-explanatory, so I won't go into further details about them.&lt;br /&gt;
&lt;br /&gt;
But all the MIDP2.0 API methods are described below along with how they could be adapted to the CPC.&lt;br /&gt;
&lt;br /&gt;
=== GameCanvas.getGraphics() ===&lt;br /&gt;
''J2ME description: Obtains the Graphics object for rendering a GameCanvas.''&lt;br /&gt;
In J2ME this method returns a Graphics object, needed for doing all the drawing on the screen.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method should return a struct with pointers to the methods of the Graphics class. In other words, getGraphics() will be a method that simply does: return new Graphics();&lt;br /&gt;
&lt;br /&gt;
More knowledge about C and SDCC is needed before giving an example of how such a struct could look like.&lt;br /&gt;
&lt;br /&gt;
=== GameCanvas.flushGraphics() ===&lt;br /&gt;
''J2ME description: Flushes the off-screen buffer to the display.''&lt;br /&gt;
In J2ME this is the call that throws all your drawing onto the screen. If you don't call this method, nothing will be displayed.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method should toggle between 2 buffer-screens. When one is visible, drawing takes place on the other. When flushGraphics() is called, the visible buffer-screen and the hidden buffer-screen switches place.&lt;br /&gt;
&lt;br /&gt;
J2ME example for getGraphics() and flushGraphics():&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graphics g = getGraphics();&lt;br /&gt;
g.setColor(0x00ff00); // Green&lt;br /&gt;
g.fillRect(10,10,30,30); // Draw a 30x30 big box at 10,10 with green color&lt;br /&gt;
flushGraphics(); // flush to screen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sMIDP2lib example for getGraphics() and flushGraphics():&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Graphics g = getGraphics();&lt;br /&gt;
g.setColor(1); // Pen 1&lt;br /&gt;
g.fillRect(10,10,30,30); // Draw a 30x30 big box at 10,10 with pen 1&lt;br /&gt;
flushGraphics(); // Toggle screen address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Displayable.getWidth() ===&lt;br /&gt;
''J2ME description: Gets the width in pixels of the displayable area available to the application.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this will simply return 319&lt;br /&gt;
&lt;br /&gt;
=== Displayable.getHeight() ===&lt;br /&gt;
''J2ME description: Gets the height in pixels of the displayable area available to the application.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this will simply return 199&lt;br /&gt;
&lt;br /&gt;
=== Image.createImage(String source-filename) ===&lt;br /&gt;
''J2ME description: Creates an immutable image from a source image.''&lt;br /&gt;
This is the method used in J2ME for loading an image from within the jar file. (A zip file containing all the classes and resources). It returns an Image object.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, I imagine it will load the image from disk, store it in memory, create a struct that holds a pointer to the image data, along with two shorts holding the image dimensions, and two pointers to the methods getHeight() and getWidth() that returns the dimensions.&lt;br /&gt;
&lt;br /&gt;
That way you will be able to do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
myImage = Image.createImage(&amp;quot;/pic.dat&amp;quot;);&lt;br /&gt;
g.drawImage(myImage, 0, 0, 0);&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fileformat will be a custom fileformat. Read more below.&lt;br /&gt;
&lt;br /&gt;
In the above example, notice that the filename is preceeded by a slash. This is required in J2ME for some reason, when loading images, while other similar looking methods doesn't require it. Therefor sMIDP2lib should always check if the first character in a filename is a slash, and simply ignore it if it is. (Goes for createImage and createPlayer for example).&lt;br /&gt;
&lt;br /&gt;
=== Image.getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Obtains ARGB pixel data from the specified region of this image and stores it in the provided array of integers.''&lt;br /&gt;
This method is used in J2ME to save a piece of an image in an array.&lt;br /&gt;
&lt;br /&gt;
A method like this will be particular useful on the CPC, since it allows us to '''not''' re-draw the whole screen in each iteration, but instead simply save the pieces of background-layers that was drawn over in the previous iteration.&lt;br /&gt;
&lt;br /&gt;
Naturally we won't have RGB data, but instead the byteData of the CPC-representation of image.&lt;br /&gt;
&lt;br /&gt;
The tricky part about this method is, that in J2ME it's always performed on an Image object - which we don't have in sMIDP2lib (and aren't interested in either). But to stay within the MIDP2.0 API specs, we need to keep it that way.&lt;br /&gt;
In order to use this method in J2ME the way we'd use it on the CPC, J2ME devs would need to create a buffer-image to draw too, before drawing to the Graphics object of the canvas. In other words they'd do something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics(); // Get the graphics object of the canvas&lt;br /&gt;
bufferImage = Image.createImage(getWidth(), getHeight()); // Creates an image same size as the screen display size&lt;br /&gt;
buffer_g = bufferImage.getGraphics(); // Get the graphics object of that Image so we can draw on it. (Not in sMIDP2lib)&lt;br /&gt;
buffer_g.setClip(0,0,getWidth(),getHeight());&lt;br /&gt;
buffer_g.setColor(0x000000); // Black color&lt;br /&gt;
buffer_g.fillRect(0,0,getWidth(),getHeight()); // Clear the background&lt;br /&gt;
buffer_g.setColor(0xffffff); // White color&lt;br /&gt;
buffer_g.drawLine(0,0,getHeight(),getWidth()); // Draw a white line across the image&lt;br /&gt;
int[] storedPieceOfBackground = new int[256];&lt;br /&gt;
bufferImage.getRGB(storedPieceOfBackground,0,16,0,0,16,16); // Copy the image data at (0,0) 16x16 pixels into the array storedPieceOfBackground&lt;br /&gt;
bufferImage.setClip(0,0,16,16); // Set clip to the rectangle we just copied&lt;br /&gt;
bufferImage.drawImage(mySprites,-16,0,0); // Draw the 2nd sprite of my sprite-sheet in that clip&lt;br /&gt;
&lt;br /&gt;
// In the next loop-iteration, we can simply draw the storedPieceOfBackground on the spot where the sprite were.&lt;br /&gt;
// That way we don't have to re-draw the entire screen.&lt;br /&gt;
&lt;br /&gt;
g.setClip(0,0,getWidth(),getHeight()); // And finally...&lt;br /&gt;
g.drawImage(bufferImage,0,0,0); // Draw the bufferImage onto the screen&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is called double-buffering in J2ME.&lt;br /&gt;
Since sMIDP2lib will also be doing automatic double-buffering, we can adapt this method. Instead of creating another Image, we'll simply have access to to the already existing buffer-screen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
unsigned char[] storedPieceOfBackground = new char[64]; // We only need space for 64 bytes, since that equals 256 pixels.&lt;br /&gt;
sMIDP2lib_bufferscreen.getRGB(storedPieceOfBackground, 0, 0, 0, 0, 16 16); // Size is still given in pixels, so the getRGB method needs to take care of the division by 4 and such&lt;br /&gt;
// We ignore the offset and scanlength. They'll need to be part of the method, but will be ignored.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The variable sMIDP2lib_bufferscreen is a struct containing a pointer to the address of the current buffer-screen, meaning the one we're currently drawing to. (We'll always be drawing to the non-visible screen). When ever flushGraphics() is called, the current non-visible buffer-screen is shown, and the previous visible screen not becomes the buffer-screen. Therefor, the pointer in the sMIDP2lib_bufferscreen struct, will change value when flushGraphics() is called.&lt;br /&gt;
&lt;br /&gt;
This is a good solution because we keep the MIDP2.0 API structure, and we aren't creating overhead since the data in the arrays can be overridden again and again.&lt;br /&gt;
&lt;br /&gt;
Since we now have an array of byte data, we need a corresponding drawRGB() method to draw it again. See below.&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawImage(Image img, int x, int y, int anchor) ===&lt;br /&gt;
''J2ME description: Draws the specified image by using the anchor point.''&lt;br /&gt;
In J2ME, this method takes an Image object and renders on the screen. The anchor point is used to indicate where on the image x and y is. For example, anchor can be Graphics.TOP|Graphics.LEFT (which is typically equal to 0) which means that x,y is in the upper left corner of the image.&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib, this method obviously can't take an object as parameter. Instead it will take a struct as parameter (as described above). This struct contains the address of the image data, along with the dimensions of the image.&lt;br /&gt;
In the initial very first version of sMIDP2lib, the anchor parameter will be ignored. x,y will always be in the upper left corner.&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha) ===&lt;br /&gt;
''J2ME description: Renders a series of device-independent RGB+transparency values in a specified region.''&lt;br /&gt;
&lt;br /&gt;
This method will always be used in combination with Graphics.getRGB(), and will thus need adaptions similar to that method.&lt;br /&gt;
Like with getRGB() we will ignore the scanlength parameter. (At least in the first versions of sMIDP2lib). We will also ignore the processAlpha parameter. But both parameters will still need to be part of the method.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g.drawRGB(storedPieceOfBackground, 0, 0, 0, 0, 16, 16, false);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''I don't know what possibilities we have in C regarding arrays as parameter. Logically for it to work on the CPC, only a pointer to the array should be used. I need to experiment and ask around though.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawLine(int x1, int y1, int x2, int y2) ===&lt;br /&gt;
''J2ME description: Draws a line between the coordinates (x1,y1) and (x2,y2) using the current color and stroke style.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.drawRect(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Draws the outline of the specified rectangle using the current color and stroke style.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.fillRect(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Fills the specified rectangle with the current color.''&lt;br /&gt;
&lt;br /&gt;
=== Graphics.setClip(int x, int y, int width, int height) ===&lt;br /&gt;
''J2ME description: Sets the current clip to the rectangle specified by the given coordinates.''&lt;br /&gt;
This is a very important method, that defines where on the canvas the following drawing-methods should draw. It is this method that allows you to load a sprite-sheet containing 4x4 sprites, and then only draw one of them.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
mySprites = Image.createImage(&amp;quot;sprites.img&amp;quot;); // Loads sprites.img that contains 4x4 sprites of 16x16 pixels each&lt;br /&gt;
g.setClip(50,50,16,16); // Defines the clip to be at (50,50) and 16x16 pixels big.&lt;br /&gt;
g.drawImage(mySprites, 34, 50, 0); // Draws the spritesheet at (34,50);&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above example, it will be the 2nd sprite in the top row that'll be displayed, because the whole picture is drawn -16 pixels from the clip X.&lt;br /&gt;
&lt;br /&gt;
Any Graphics method called after a setClip() will only affect the defined clip.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
g = getGraphics();&lt;br /&gt;
g.setClip(50,50,16,16); // Defines the clip to be at (50,50) and 16x16 pixels big.&lt;br /&gt;
g.fillRect(0,0,100,100); // Only fills the above clip despite of different values in the fillRect method&lt;br /&gt;
flushGraphics();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially before setting a clip, the default clip will be the whole screen (0,0,getWidth(),getHeight()). However, because your main loop will probably contains a lot of calls to setClip(), you should always call setClip(0,0,getWidth(),getHeight()) before calling fillRect(0,0,getWidth(),getHeight()).&lt;br /&gt;
&lt;br /&gt;
=== Graphics.setColor(int RGB) ===&lt;br /&gt;
''J2ME description: Sets the current color to the specified RGB values.''&lt;br /&gt;
&lt;br /&gt;
In sMIDP2lib we obviously don't have RGB colors. So this method will be adapted into taking just the pen-number. In other words, a number between 0 and 3 (because we only support MODE 1 for now).&lt;br /&gt;
Since this leaves us without any way of setting inks for each pen, we need to add some additional methods that aren't part of the MIDP2.0 API. These are:&lt;br /&gt;
setBorder(int color);&lt;br /&gt;
setInk(int pen, int color);&lt;br /&gt;
&lt;br /&gt;
=== Manager.createPlayer(String source-filename) ===&lt;br /&gt;
''J2ME description: Create a Player to play back media.''&lt;br /&gt;
Returns a Player object, that has methods such as start() and stop(). With J2ME you can play mp3, wav, and midi. As we know, we can't do that with the CPC.&lt;br /&gt;
&lt;br /&gt;
So instead sMIDP2lib must be able to load STarKos music files. The method should, like the createImage() method, return a struct with pointers to methods like start() and stop().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
music = Manager.createPlayer(&amp;quot;music.bin&amp;quot;); // Loads the music from disk&lt;br /&gt;
music.start(); // Calls STarKos playback routine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image file format ==&lt;br /&gt;
&lt;br /&gt;
I imagine the fileformat of images to be a rather simple one. Its first byte will contain the width of the image. The next byte will contain the height of the image. That way an image can max be 255x255 pixels big. ''This is only a thought, and will possibly change into 2 bytes for each value instead''. The rest of the data is the image itself, using standard CPC representation of image-data.&lt;br /&gt;
&lt;br /&gt;
Any image-size within that limitation can then be loaded. Doesn't have to be fullscreen images. You can load a small sprite-sheet of e.g. 64*128 pixels, and then also load another image containing a font and having a size of 480x8 pixels. Each image will be accessible through their structs.&lt;br /&gt;
&lt;br /&gt;
A Java command-line utility will ideally be created (if one doesn't exist already) that will convert 8bit PNG files (and/or maybe other formats) into the sMIDP2lib image format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contributers ==&lt;br /&gt;
&lt;br /&gt;
The following people are contributing to this project at the moment:&lt;br /&gt;
&lt;br /&gt;
* mr_lou (available on IRC, channel #CPC on EsperNET, channel #AmstradCPC on EpiKnet and channel #CPC on freenode)&lt;br /&gt;
* Demoniak (available on IRC, channel #AmstradCPC on EpiKnet)&lt;br /&gt;
* TFM/FS&lt;br /&gt;
&lt;br /&gt;
== History log ==&lt;br /&gt;
* December 20th, This project page was created.&lt;br /&gt;
* December 19th, Demoniak helped a lot by supplying two routines, drawLine() and FastCls() that convinced mr_lou that this whole idea is quite possible to make a reality. His drawLine routine was twice as fast as the firmware routine. [http://www.cpcwiki.eu/forum/programming/help-with-sdcc/?action=dlattach;attach=3880 Check comparion]&lt;br /&gt;
* December 11th, mr_lou created [http://www.cpcwiki.eu/forum/programming/graphics-framework-idea/ a thread about the idea] at the forum.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [http://docs.oracle.com/javame/config/cldc/ref-impl/midp2.0/jsr118/index.html MIDP2.0 API Javadocs]&lt;br /&gt;
* [http://www.dewfall.dk/html5 Small example of HTML5/Javascript version of sMIDP2lib (View source to see J2ME-like code in Javascript) (Runs best with Opera or Chrome)]&lt;br /&gt;
* [http://dewfall.dk/Streger.html Small example of Flash version of sMIDP2lib]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]] [[Category:C]] [[Category:CrossDev]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68544</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68544"/>
				<updated>2011-07-05T09:35:19Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* Donors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
== Welcome to the Amstrad CPC Wiki!  == &lt;br /&gt;
&amp;lt;center&amp;gt;This site hopes to evolve into an encyclopaedia on all things [[Amstrad|Amstrad]] [[CPC|CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' around the CPC available.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''[[Special:Random|Random Page]] | [[#Become an Author!|Contribute]] | [[Help:Editing|Editing help]] | [http://www.cpcwiki.eu/forum Forum]'''&amp;lt;br&amp;gt;[[CPCWiki:Portal|CPCWiki Portal]] · [http://www.cpcwiki.eu/forum Forum] · [[Photo Gallery]] · [[About|About]] · [[Special:Statistics|Statistics]] · [[CPCWiki:General disclaimer|Disclaimer]]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:forum.png|400px|link=http://www.cpcwiki.eu/forum]]      [[Image:Vs.png|400px|link=http://www.cpcwiki.eu/index.php/Speccy_Port]]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(255, 201, 201); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 243, 243);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt; '''CPC Related News''' &amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt; &lt;br /&gt;
{{#ev:youtube|YJosZfm560Q|500}}&amp;lt;br&amp;gt;20/03/11: Amazing new '''Batman Forever''' demo [http://cpcwiki.eu/forum/index.php/topic,2085.new.html#new released]!!!! [UPD] Read an '''[http://www.norecess.net/interview-rhino.html interview] with Rhino'''!&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*05/07/11: '''[http://www.cpcwiki.eu/forum/index.php?topic=2426.msg25923#msg25923 Now That’s What I Call Chip Tunes]''' - a great music disk by '''Mr.Ship'''!&lt;br /&gt;
*05/07/11: '''[http://roland.antoniovillena.es/ Roland]''', the online javascript emulator, now supports sound!&lt;br /&gt;
*05/07/11: New version of '''[http://www.cpcalive.com/cpcalive_en.html CPCAlive]''' with Z80 debugger improvement and corrections.&lt;br /&gt;
*28/06/11: Results and report (soon!) for the ReSeT #0 Party are '''[http://pushnpop.net/index.php?action=meetings&amp;amp;id=14 here]'''&lt;br /&gt;
*22/06/11: '''[http://www.norecess.net/quickcmd.html QuickCMD]''', a fantastic shell for the CPC released by '''NoRecess'''!&lt;br /&gt;
*21/06/11: Major new release of '''[http://www.cpcbox.com/ CPCbox]''', now with sound!!&lt;br /&gt;
*09/05/11: '''[http://www.pushnpop.net/reset ReSeT #0 Party]''' is a CPC Meeting in France: 24-25-26 June 2011!&lt;br /&gt;
*03/05/11: '''[http://www.cpcmania.com/index2.asp?urldest=cpcdiskxp/cpcdiskxp.htm CPCDiskXP]''' 2.1 released :)&lt;br /&gt;
*27/04/11: A new game! This time a port of Dinamic's '''Arquimedes XXI''' by '''Devilmarkus, PulkoMandy, voXfReaX''' and '''MiguelSky''', over [http://www.amstrad.es/juegosamstrad/decargajuegos/arquimedesxxi.php here]!&lt;br /&gt;
*27/04/11: '''NoRecess''' published a great [http://www.norecess.net/interview-richard-wilson.html interview] with '''Richard Wilson''' of '''ParaDOS''' and '''WinApe''' fame :)&lt;br /&gt;
*17/04/11: '''ACID''' well and truly [http://www.octoate.de/wp/2011/04/15/another-acid-implementation-on-the-way/ ripped apart] :)&lt;br /&gt;
*17/04/11: '''NoRecess''' released v.2.2 of [http://www.norecess.net/hxc-floppy-emulator-manager.html HxC Floppy Emulator Manager]&lt;br /&gt;
*16/04/11: A very detailed interview of the Batman Forever Team published on '''[http://pushnpop.net/ Push'N'Pop]'''&lt;br /&gt;
*11/04/11: New game!!! '''[http://www.amstrad.es/juegosamstrad/decargajuegos/hora-bruja.php Hora Bruja]''' released! :)&lt;br /&gt;
*08/04/11: Another [http://www.norecess.net/1/post/2011/04/added-interview-of-longshot-logon-system.html interview] by Recess, this time with '''Longshot / Logon System'''!&lt;br /&gt;
*06/04/11: NoRecess added an [http://www.norecess.net/interview-face-hugger.html interview with '''Face Huggger''']!&lt;br /&gt;
*06/04/11: Version 19 of '''GamebaseCPC''' [http://www.cpc-power.com/gamebasecpc/index.php?page=accueil added]!&lt;br /&gt;
*23/03/11: '''[http://zx81.zx81.free.fr/serendipity/index.php?/archives/502-Caanoo-CAP32-Amstrad-CPC-Emulator-for-Caanoo-v1.1.2.html Caanoo-CAP32]''' for the Gamepark Caanoo updated!&lt;br /&gt;
*17/03/11: '''[http://www.retroreview.com/iang/UberCassette/ UberCassette]''' (wav-&amp;gt;CDT) now supports Amstrad CPC :)&lt;br /&gt;
*15/02/11: [http://cpcwiki.eu/forum/index.php/topic,1982 Sub Hunter] released! Read Axelay's interview [http://www.norecess.net/interview-axelay.html here]!&lt;br /&gt;
*10/03/11: {FR} A fantastic [http://www.phenixinformatique.com/modules/smartsection/item.php?itemid=244 interview with '''Marion Vannier'''], head of Amstrad France!&lt;br /&gt;
*09/03/11: Yeah!!! '''[http://fmsdevel.wisecoding.es/blog/cpcdroid---2011-03-02 CPCDroid]''', a great emulator for '''Android''', has been released!!!&lt;br /&gt;
*09/03/11: Small update of [http://cngsoft.no-ip.org/cpce/index.htm CPCE] released&lt;br /&gt;
*13/01/11: [http://www.mojontwins.com/juegos_mojonos/uwol-2-cpc/ Uwol 2 (Quest for Money)], a new game by the Mojon Twins!!&lt;br /&gt;
*13/01/11: New version of the [http://www.telefonica.net/web2/emilioguerrero/ccz80/ccz80.html CCZ80 compiler]&lt;br /&gt;
*13/01/11: [http://www.norecess.net/sdcc2pasmo.html SDCC2Pasmo v1.0] tool released for SDCC-&amp;gt;Pasmo assembler conversions&lt;br /&gt;
*13/01/11: [http://cpcparts.net CPCParts] has a real domain name now!&lt;br /&gt;
*12/01/11: [http://cpcwiki.eu/forum/index.php/topic,1871.0.html CPCInAJar], CPC emu in *exactly* 128kB released by Devilmarkus!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery widths=150px&amp;gt;&lt;br /&gt;
Image:NTWICCT01.jpg|Now That's What I Call Chip Tunes&lt;br /&gt;
Image:Arquimedes.png|Arquimedes XXI&lt;br /&gt;
Image:Hora bruja.jpg|Hora Bruja&lt;br /&gt;
Image:BatmanForever.png|Batman Forever&lt;br /&gt;
Image:Subhunter2.png|SubHunter&lt;br /&gt;
Image:Uwol2b.png|Uwol 2&lt;br /&gt;
Image:xmas_2010_demo_screenshot.png|Xmas 2010 Demo&lt;br /&gt;
Image:MegaROM.png|MegaROM&lt;br /&gt;
Image:Ilogical.png|Ilogical&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=right&amp;gt;...[[OldNews|Older News]]...&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- WEIRD TABLE START --&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; class=&amp;quot;FCK__ShowTableBorders&amp;quot; &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| &amp;lt;div style=&amp;quot;border: 1px solid rgb(176, 176, 176); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(238, 238, 238);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CPCWiki updates  ===&lt;br /&gt;
*12/01/2011: 2010: An '''[http://cpcwiki.eu/forum/index.php/topic,1865.0.html excellent year]''' for the CPCWiki!!!&lt;br /&gt;
*22/09/2009: The CPCWIKI moves to new domain [http://cpcwiki.eu CPCWIKI.EU] &lt;br /&gt;
*14/08/2009: The CPCWIKI moves (temporarily) to new domain [http://cpc-wiki.com CPC-WIKI.COM] &lt;br /&gt;
*22/07/09: Wiki &amp;amp; Forum moved to a new server &lt;br /&gt;
*14/07/09: Forum updated to 2.0RC1-1, Wiki updated to 1.15.1! &lt;br /&gt;
*Add the CPCWiki to '''your Homepage'''. Check out [[About#Wiki-Napping|About#Wiki-Napping]] and start napping this Wiki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Become an Author!  ===&lt;br /&gt;
&lt;br /&gt;
We are searching for authors of the following articles:&lt;br /&gt;
&lt;br /&gt;
* [[PDW|PDW]] (unknown what this article shall be about...) (Note: PDW is believed to be German group of programmers who wrote CPC Demos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;createbox&amp;gt; &lt;br /&gt;
default=Enter name of article to create &lt;br /&gt;
buttonlabel=Create article! &lt;br /&gt;
width=40 &lt;br /&gt;
&amp;lt;/createbox&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Top 5 Contributors from the last 60 days: &lt;br /&gt;
{{Special:ContributionScores/5/60/notools}} &lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: right;&amp;quot;&amp;gt;&amp;lt;small&amp;gt;'''All [[Special:Wantedpages|wanted articles]]''' &amp;amp;#124; [[:Category:Stub|Extendable Stubs]]&amp;lt;br&amp;gt;'''[[Special:ContributionScores|List of most active contributors]]'''&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align: top;&amp;quot; | &amp;lt;div style=&amp;quot;border: 1px solid rgb(228, 222, 222); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(249, 249, 249);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Did you know?  ===&lt;br /&gt;
&lt;br /&gt;
*When the 664 was being developed, Sugar was already looking (and hinting publicly!) at the 6128 &lt;br /&gt;
*The [[472|CPC 472]] was a model released in Spain with an extra unaccessible 8 KB of RAM to circumvent a spanish tax that was charged on imported machines with up to 64 KB memory.&lt;br /&gt;
&lt;br /&gt;
*With a possible total amount of '''832 x 288 pixel''' (576 interlaced) the [[CPC|CPC]] was the 8 bit homecomputer with the highest screen resolution ever.&lt;br /&gt;
&lt;br /&gt;
*'''OpenOffice''' for Windows/Linux is a direct descendant of [[Star-Division|StarWriter]] for the CPC. &lt;br /&gt;
*The transfer speed of the [[CPC Booster|CPC Booster +]] serial interface is faster than a standard '''DSL connection'''.&lt;br /&gt;
&lt;br /&gt;
*[[SymbOS|SymbOS]] can handle more than '''50 times''' bigger hard discs than MS Windows 95A. &lt;br /&gt;
*[[FutureOS|FutureOS]] can load 178 KB in '''9 seconds''' from floppy disc and manages up to '''4 MB''' of RAM &lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0pt 0pt 5px; padding: 0.5em 1em; background-color: rgb(204, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Donors  ===&lt;br /&gt;
&lt;br /&gt;
These people were kind enough to donate. All contributions went '''directly''' to our previous host, not our own pockets! &lt;br /&gt;
&lt;br /&gt;
'''If you would like to donate us, please contact the admin-team in our forum. This will ensure the continuation of the project.''' &lt;br /&gt;
Thank you!&lt;br /&gt;
&lt;br /&gt;
'''2011:''' [[User:Bryce|Bryce]] (€75)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''2009:''' Prodatron (€1000)&amp;lt;br&amp;gt;Nurgle (€30)&amp;lt;br&amp;gt;Serge Querné (€30)&amp;lt;br&amp;gt;Roald Strauss (€50)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Donators from earlier years'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Bert Post Uiterweer, [[Rex|Rex]] of [[BENG!|BENG!]], [[Robcfg|Robcfg]], [[Prodatron|Prodatron]], [[User:Gryzor|Gryzor]], [[User:Ervin|Ervin]]&lt;br /&gt;
&lt;br /&gt;
Thanks so much guys!&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 204, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Where are CPC users from?  ===&lt;br /&gt;
Click [http://www4.clustrmaps.com/user/7804b163 here] for the big map! Smaller map was removed to keep loading times down.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68543</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68543"/>
				<updated>2011-07-05T09:31:32Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* Donors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
== Welcome to the Amstrad CPC Wiki!  == &lt;br /&gt;
&amp;lt;center&amp;gt;This site hopes to evolve into an encyclopaedia on all things [[Amstrad|Amstrad]] [[CPC|CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' around the CPC available.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''[[Special:Random|Random Page]] | [[#Become an Author!|Contribute]] | [[Help:Editing|Editing help]] | [http://www.cpcwiki.eu/forum Forum]'''&amp;lt;br&amp;gt;[[CPCWiki:Portal|CPCWiki Portal]] · [http://www.cpcwiki.eu/forum Forum] · [[Photo Gallery]] · [[About|About]] · [[Special:Statistics|Statistics]] · [[CPCWiki:General disclaimer|Disclaimer]]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:forum.png|400px|link=http://www.cpcwiki.eu/forum]]      [[Image:Vs.png|400px|link=http://www.cpcwiki.eu/index.php/Speccy_Port]]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(255, 201, 201); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 243, 243);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt; '''CPC Related News''' &amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt; &lt;br /&gt;
{{#ev:youtube|YJosZfm560Q|500}}&amp;lt;br&amp;gt;20/03/11: Amazing new '''Batman Forever''' demo [http://cpcwiki.eu/forum/index.php/topic,2085.new.html#new released]!!!! [UPD] Read an '''[http://www.norecess.net/interview-rhino.html interview] with Rhino'''!&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*05/07/11: '''[http://www.cpcwiki.eu/forum/index.php?topic=2426.msg25923#msg25923 Now That’s What I Call Chip Tunes]''' - a great music disk by '''Mr.Ship'''!&lt;br /&gt;
*05/07/11: '''[http://roland.antoniovillena.es/ Roland]''', the online javascript emulator, now supports sound!&lt;br /&gt;
*05/07/11: New version of '''[http://www.cpcalive.com/cpcalive_en.html CPCAlive]''' with Z80 debugger improvement and corrections.&lt;br /&gt;
*28/06/11: Results and report (soon!) for the ReSeT #0 Party are '''[http://pushnpop.net/index.php?action=meetings&amp;amp;id=14 here]'''&lt;br /&gt;
*22/06/11: '''[http://www.norecess.net/quickcmd.html QuickCMD]''', a fantastic shell for the CPC released by '''NoRecess'''!&lt;br /&gt;
*21/06/11: Major new release of '''[http://www.cpcbox.com/ CPCbox]''', now with sound!!&lt;br /&gt;
*09/05/11: '''[http://www.pushnpop.net/reset ReSeT #0 Party]''' is a CPC Meeting in France: 24-25-26 June 2011!&lt;br /&gt;
*03/05/11: '''[http://www.cpcmania.com/index2.asp?urldest=cpcdiskxp/cpcdiskxp.htm CPCDiskXP]''' 2.1 released :)&lt;br /&gt;
*27/04/11: A new game! This time a port of Dinamic's '''Arquimedes XXI''' by '''Devilmarkus, PulkoMandy, voXfReaX''' and '''MiguelSky''', over [http://www.amstrad.es/juegosamstrad/decargajuegos/arquimedesxxi.php here]!&lt;br /&gt;
*27/04/11: '''NoRecess''' published a great [http://www.norecess.net/interview-richard-wilson.html interview] with '''Richard Wilson''' of '''ParaDOS''' and '''WinApe''' fame :)&lt;br /&gt;
*17/04/11: '''ACID''' well and truly [http://www.octoate.de/wp/2011/04/15/another-acid-implementation-on-the-way/ ripped apart] :)&lt;br /&gt;
*17/04/11: '''NoRecess''' released v.2.2 of [http://www.norecess.net/hxc-floppy-emulator-manager.html HxC Floppy Emulator Manager]&lt;br /&gt;
*16/04/11: A very detailed interview of the Batman Forever Team published on '''[http://pushnpop.net/ Push'N'Pop]'''&lt;br /&gt;
*11/04/11: New game!!! '''[http://www.amstrad.es/juegosamstrad/decargajuegos/hora-bruja.php Hora Bruja]''' released! :)&lt;br /&gt;
*08/04/11: Another [http://www.norecess.net/1/post/2011/04/added-interview-of-longshot-logon-system.html interview] by Recess, this time with '''Longshot / Logon System'''!&lt;br /&gt;
*06/04/11: NoRecess added an [http://www.norecess.net/interview-face-hugger.html interview with '''Face Huggger''']!&lt;br /&gt;
*06/04/11: Version 19 of '''GamebaseCPC''' [http://www.cpc-power.com/gamebasecpc/index.php?page=accueil added]!&lt;br /&gt;
*23/03/11: '''[http://zx81.zx81.free.fr/serendipity/index.php?/archives/502-Caanoo-CAP32-Amstrad-CPC-Emulator-for-Caanoo-v1.1.2.html Caanoo-CAP32]''' for the Gamepark Caanoo updated!&lt;br /&gt;
*17/03/11: '''[http://www.retroreview.com/iang/UberCassette/ UberCassette]''' (wav-&amp;gt;CDT) now supports Amstrad CPC :)&lt;br /&gt;
*15/02/11: [http://cpcwiki.eu/forum/index.php/topic,1982 Sub Hunter] released! Read Axelay's interview [http://www.norecess.net/interview-axelay.html here]!&lt;br /&gt;
*10/03/11: {FR} A fantastic [http://www.phenixinformatique.com/modules/smartsection/item.php?itemid=244 interview with '''Marion Vannier'''], head of Amstrad France!&lt;br /&gt;
*09/03/11: Yeah!!! '''[http://fmsdevel.wisecoding.es/blog/cpcdroid---2011-03-02 CPCDroid]''', a great emulator for '''Android''', has been released!!!&lt;br /&gt;
*09/03/11: Small update of [http://cngsoft.no-ip.org/cpce/index.htm CPCE] released&lt;br /&gt;
*13/01/11: [http://www.mojontwins.com/juegos_mojonos/uwol-2-cpc/ Uwol 2 (Quest for Money)], a new game by the Mojon Twins!!&lt;br /&gt;
*13/01/11: New version of the [http://www.telefonica.net/web2/emilioguerrero/ccz80/ccz80.html CCZ80 compiler]&lt;br /&gt;
*13/01/11: [http://www.norecess.net/sdcc2pasmo.html SDCC2Pasmo v1.0] tool released for SDCC-&amp;gt;Pasmo assembler conversions&lt;br /&gt;
*13/01/11: [http://cpcparts.net CPCParts] has a real domain name now!&lt;br /&gt;
*12/01/11: [http://cpcwiki.eu/forum/index.php/topic,1871.0.html CPCInAJar], CPC emu in *exactly* 128kB released by Devilmarkus!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery widths=150px&amp;gt;&lt;br /&gt;
Image:NTWICCT01.jpg|Now That's What I Call Chip Tunes&lt;br /&gt;
Image:Arquimedes.png|Arquimedes XXI&lt;br /&gt;
Image:Hora bruja.jpg|Hora Bruja&lt;br /&gt;
Image:BatmanForever.png|Batman Forever&lt;br /&gt;
Image:Subhunter2.png|SubHunter&lt;br /&gt;
Image:Uwol2b.png|Uwol 2&lt;br /&gt;
Image:xmas_2010_demo_screenshot.png|Xmas 2010 Demo&lt;br /&gt;
Image:MegaROM.png|MegaROM&lt;br /&gt;
Image:Ilogical.png|Ilogical&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=right&amp;gt;...[[OldNews|Older News]]...&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- WEIRD TABLE START --&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; class=&amp;quot;FCK__ShowTableBorders&amp;quot; &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| &amp;lt;div style=&amp;quot;border: 1px solid rgb(176, 176, 176); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(238, 238, 238);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CPCWiki updates  ===&lt;br /&gt;
*12/01/2011: 2010: An '''[http://cpcwiki.eu/forum/index.php/topic,1865.0.html excellent year]''' for the CPCWiki!!!&lt;br /&gt;
*22/09/2009: The CPCWIKI moves to new domain [http://cpcwiki.eu CPCWIKI.EU] &lt;br /&gt;
*14/08/2009: The CPCWIKI moves (temporarily) to new domain [http://cpc-wiki.com CPC-WIKI.COM] &lt;br /&gt;
*22/07/09: Wiki &amp;amp; Forum moved to a new server &lt;br /&gt;
*14/07/09: Forum updated to 2.0RC1-1, Wiki updated to 1.15.1! &lt;br /&gt;
*Add the CPCWiki to '''your Homepage'''. Check out [[About#Wiki-Napping|About#Wiki-Napping]] and start napping this Wiki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Become an Author!  ===&lt;br /&gt;
&lt;br /&gt;
We are searching for authors of the following articles:&lt;br /&gt;
&lt;br /&gt;
* [[PDW|PDW]] (unknown what this article shall be about...) (Note: PDW is believed to be German group of programmers who wrote CPC Demos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;createbox&amp;gt; &lt;br /&gt;
default=Enter name of article to create &lt;br /&gt;
buttonlabel=Create article! &lt;br /&gt;
width=40 &lt;br /&gt;
&amp;lt;/createbox&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Top 5 Contributors from the last 60 days: &lt;br /&gt;
{{Special:ContributionScores/5/60/notools}} &lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: right;&amp;quot;&amp;gt;&amp;lt;small&amp;gt;'''All [[Special:Wantedpages|wanted articles]]''' &amp;amp;#124; [[:Category:Stub|Extendable Stubs]]&amp;lt;br&amp;gt;'''[[Special:ContributionScores|List of most active contributors]]'''&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align: top;&amp;quot; | &amp;lt;div style=&amp;quot;border: 1px solid rgb(228, 222, 222); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(249, 249, 249);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Did you know?  ===&lt;br /&gt;
&lt;br /&gt;
*When the 664 was being developed, Sugar was already looking (and hinting publicly!) at the 6128 &lt;br /&gt;
*The [[472|CPC 472]] was a model released in Spain with an extra unaccessible 8 KB of RAM to circumvent a spanish tax that was charged on imported machines with up to 64 KB memory.&lt;br /&gt;
&lt;br /&gt;
*With a possible total amount of '''832 x 288 pixel''' (576 interlaced) the [[CPC|CPC]] was the 8 bit homecomputer with the highest screen resolution ever.&lt;br /&gt;
&lt;br /&gt;
*'''OpenOffice''' for Windows/Linux is a direct descendant of [[Star-Division|StarWriter]] for the CPC. &lt;br /&gt;
*The transfer speed of the [[CPC Booster|CPC Booster +]] serial interface is faster than a standard '''DSL connection'''.&lt;br /&gt;
&lt;br /&gt;
*[[SymbOS|SymbOS]] can handle more than '''50 times''' bigger hard discs than MS Windows 95A. &lt;br /&gt;
*[[FutureOS|FutureOS]] can load 178 KB in '''9 seconds''' from floppy disc and manages up to '''4 MB''' of RAM &lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0pt 0pt 5px; padding: 0.5em 1em; background-color: rgb(204, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Donors  ===&lt;br /&gt;
&lt;br /&gt;
These people were kind enough to donate. All contributions went '''directly''' to our previous host, not our own pockets! &lt;br /&gt;
&lt;br /&gt;
'''If you would like to donate us, please contact the admin-team in our forum. This will ensure the continuation of the project.''' &lt;br /&gt;
Thank you!&lt;br /&gt;
&lt;br /&gt;
'''2011:''' [[Bryce|Bryce]] (€75)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''2009:''' Prodatron (€1000)&amp;lt;br&amp;gt;Nurgle (€30)&amp;lt;br&amp;gt;Serge Querné (€30)&amp;lt;br&amp;gt;Roald Strauss (€50)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Donators from earlier years'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Bert Post Uiterweer, [[Rex|Rex]] of [[BENG!|BENG!]], [[Robcfg|Robcfg]], [[Prodatron|Prodatron]], [[User:Gryzor|Gryzor]], [[User:Ervin|Ervin]]&lt;br /&gt;
&lt;br /&gt;
Thanks so much guys!&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 204, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Where are CPC users from?  ===&lt;br /&gt;
Click [http://www4.clustrmaps.com/user/7804b163 here] for the big map! Smaller map was removed to keep loading times down.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68542</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68542"/>
				<updated>2011-07-05T09:30:46Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* Donors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
== Welcome to the Amstrad CPC Wiki!  == &lt;br /&gt;
&amp;lt;center&amp;gt;This site hopes to evolve into an encyclopaedia on all things [[Amstrad|Amstrad]] [[CPC|CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' around the CPC available.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''[[Special:Random|Random Page]] | [[#Become an Author!|Contribute]] | [[Help:Editing|Editing help]] | [http://www.cpcwiki.eu/forum Forum]'''&amp;lt;br&amp;gt;[[CPCWiki:Portal|CPCWiki Portal]] · [http://www.cpcwiki.eu/forum Forum] · [[Photo Gallery]] · [[About|About]] · [[Special:Statistics|Statistics]] · [[CPCWiki:General disclaimer|Disclaimer]]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:forum.png|400px|link=http://www.cpcwiki.eu/forum]]      [[Image:Vs.png|400px|link=http://www.cpcwiki.eu/index.php/Speccy_Port]]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(255, 201, 201); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 243, 243);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt; '''CPC Related News''' &amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt; &lt;br /&gt;
{{#ev:youtube|YJosZfm560Q|500}}&amp;lt;br&amp;gt;20/03/11: Amazing new '''Batman Forever''' demo [http://cpcwiki.eu/forum/index.php/topic,2085.new.html#new released]!!!! [UPD] Read an '''[http://www.norecess.net/interview-rhino.html interview] with Rhino'''!&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*05/07/11: '''[http://www.cpcwiki.eu/forum/index.php?topic=2426.msg25923#msg25923 Now That’s What I Call Chip Tunes]''' - a great music disk by '''Mr.Ship'''!&lt;br /&gt;
*05/07/11: '''[http://roland.antoniovillena.es/ Roland]''', the online javascript emulator, now supports sound!&lt;br /&gt;
*05/07/11: New version of '''[http://www.cpcalive.com/cpcalive_en.html CPCAlive]''' with Z80 debugger improvement and corrections.&lt;br /&gt;
*28/06/11: Results and report (soon!) for the ReSeT #0 Party are '''[http://pushnpop.net/index.php?action=meetings&amp;amp;id=14 here]'''&lt;br /&gt;
*22/06/11: '''[http://www.norecess.net/quickcmd.html QuickCMD]''', a fantastic shell for the CPC released by '''NoRecess'''!&lt;br /&gt;
*21/06/11: Major new release of '''[http://www.cpcbox.com/ CPCbox]''', now with sound!!&lt;br /&gt;
*09/05/11: '''[http://www.pushnpop.net/reset ReSeT #0 Party]''' is a CPC Meeting in France: 24-25-26 June 2011!&lt;br /&gt;
*03/05/11: '''[http://www.cpcmania.com/index2.asp?urldest=cpcdiskxp/cpcdiskxp.htm CPCDiskXP]''' 2.1 released :)&lt;br /&gt;
*27/04/11: A new game! This time a port of Dinamic's '''Arquimedes XXI''' by '''Devilmarkus, PulkoMandy, voXfReaX''' and '''MiguelSky''', over [http://www.amstrad.es/juegosamstrad/decargajuegos/arquimedesxxi.php here]!&lt;br /&gt;
*27/04/11: '''NoRecess''' published a great [http://www.norecess.net/interview-richard-wilson.html interview] with '''Richard Wilson''' of '''ParaDOS''' and '''WinApe''' fame :)&lt;br /&gt;
*17/04/11: '''ACID''' well and truly [http://www.octoate.de/wp/2011/04/15/another-acid-implementation-on-the-way/ ripped apart] :)&lt;br /&gt;
*17/04/11: '''NoRecess''' released v.2.2 of [http://www.norecess.net/hxc-floppy-emulator-manager.html HxC Floppy Emulator Manager]&lt;br /&gt;
*16/04/11: A very detailed interview of the Batman Forever Team published on '''[http://pushnpop.net/ Push'N'Pop]'''&lt;br /&gt;
*11/04/11: New game!!! '''[http://www.amstrad.es/juegosamstrad/decargajuegos/hora-bruja.php Hora Bruja]''' released! :)&lt;br /&gt;
*08/04/11: Another [http://www.norecess.net/1/post/2011/04/added-interview-of-longshot-logon-system.html interview] by Recess, this time with '''Longshot / Logon System'''!&lt;br /&gt;
*06/04/11: NoRecess added an [http://www.norecess.net/interview-face-hugger.html interview with '''Face Huggger''']!&lt;br /&gt;
*06/04/11: Version 19 of '''GamebaseCPC''' [http://www.cpc-power.com/gamebasecpc/index.php?page=accueil added]!&lt;br /&gt;
*23/03/11: '''[http://zx81.zx81.free.fr/serendipity/index.php?/archives/502-Caanoo-CAP32-Amstrad-CPC-Emulator-for-Caanoo-v1.1.2.html Caanoo-CAP32]''' for the Gamepark Caanoo updated!&lt;br /&gt;
*17/03/11: '''[http://www.retroreview.com/iang/UberCassette/ UberCassette]''' (wav-&amp;gt;CDT) now supports Amstrad CPC :)&lt;br /&gt;
*15/02/11: [http://cpcwiki.eu/forum/index.php/topic,1982 Sub Hunter] released! Read Axelay's interview [http://www.norecess.net/interview-axelay.html here]!&lt;br /&gt;
*10/03/11: {FR} A fantastic [http://www.phenixinformatique.com/modules/smartsection/item.php?itemid=244 interview with '''Marion Vannier'''], head of Amstrad France!&lt;br /&gt;
*09/03/11: Yeah!!! '''[http://fmsdevel.wisecoding.es/blog/cpcdroid---2011-03-02 CPCDroid]''', a great emulator for '''Android''', has been released!!!&lt;br /&gt;
*09/03/11: Small update of [http://cngsoft.no-ip.org/cpce/index.htm CPCE] released&lt;br /&gt;
*13/01/11: [http://www.mojontwins.com/juegos_mojonos/uwol-2-cpc/ Uwol 2 (Quest for Money)], a new game by the Mojon Twins!!&lt;br /&gt;
*13/01/11: New version of the [http://www.telefonica.net/web2/emilioguerrero/ccz80/ccz80.html CCZ80 compiler]&lt;br /&gt;
*13/01/11: [http://www.norecess.net/sdcc2pasmo.html SDCC2Pasmo v1.0] tool released for SDCC-&amp;gt;Pasmo assembler conversions&lt;br /&gt;
*13/01/11: [http://cpcparts.net CPCParts] has a real domain name now!&lt;br /&gt;
*12/01/11: [http://cpcwiki.eu/forum/index.php/topic,1871.0.html CPCInAJar], CPC emu in *exactly* 128kB released by Devilmarkus!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery widths=150px&amp;gt;&lt;br /&gt;
Image:NTWICCT01.jpg|Now That's What I Call Chip Tunes&lt;br /&gt;
Image:Arquimedes.png|Arquimedes XXI&lt;br /&gt;
Image:Hora bruja.jpg|Hora Bruja&lt;br /&gt;
Image:BatmanForever.png|Batman Forever&lt;br /&gt;
Image:Subhunter2.png|SubHunter&lt;br /&gt;
Image:Uwol2b.png|Uwol 2&lt;br /&gt;
Image:xmas_2010_demo_screenshot.png|Xmas 2010 Demo&lt;br /&gt;
Image:MegaROM.png|MegaROM&lt;br /&gt;
Image:Ilogical.png|Ilogical&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=right&amp;gt;...[[OldNews|Older News]]...&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- WEIRD TABLE START --&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; class=&amp;quot;FCK__ShowTableBorders&amp;quot; &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| &amp;lt;div style=&amp;quot;border: 1px solid rgb(176, 176, 176); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(238, 238, 238);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CPCWiki updates  ===&lt;br /&gt;
*12/01/2011: 2010: An '''[http://cpcwiki.eu/forum/index.php/topic,1865.0.html excellent year]''' for the CPCWiki!!!&lt;br /&gt;
*22/09/2009: The CPCWIKI moves to new domain [http://cpcwiki.eu CPCWIKI.EU] &lt;br /&gt;
*14/08/2009: The CPCWIKI moves (temporarily) to new domain [http://cpc-wiki.com CPC-WIKI.COM] &lt;br /&gt;
*22/07/09: Wiki &amp;amp; Forum moved to a new server &lt;br /&gt;
*14/07/09: Forum updated to 2.0RC1-1, Wiki updated to 1.15.1! &lt;br /&gt;
*Add the CPCWiki to '''your Homepage'''. Check out [[About#Wiki-Napping|About#Wiki-Napping]] and start napping this Wiki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Become an Author!  ===&lt;br /&gt;
&lt;br /&gt;
We are searching for authors of the following articles:&lt;br /&gt;
&lt;br /&gt;
* [[PDW|PDW]] (unknown what this article shall be about...) (Note: PDW is believed to be German group of programmers who wrote CPC Demos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;createbox&amp;gt; &lt;br /&gt;
default=Enter name of article to create &lt;br /&gt;
buttonlabel=Create article! &lt;br /&gt;
width=40 &lt;br /&gt;
&amp;lt;/createbox&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Top 5 Contributors from the last 60 days: &lt;br /&gt;
{{Special:ContributionScores/5/60/notools}} &lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: right;&amp;quot;&amp;gt;&amp;lt;small&amp;gt;'''All [[Special:Wantedpages|wanted articles]]''' &amp;amp;#124; [[:Category:Stub|Extendable Stubs]]&amp;lt;br&amp;gt;'''[[Special:ContributionScores|List of most active contributors]]'''&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align: top;&amp;quot; | &amp;lt;div style=&amp;quot;border: 1px solid rgb(228, 222, 222); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(249, 249, 249);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Did you know?  ===&lt;br /&gt;
&lt;br /&gt;
*When the 664 was being developed, Sugar was already looking (and hinting publicly!) at the 6128 &lt;br /&gt;
*The [[472|CPC 472]] was a model released in Spain with an extra unaccessible 8 KB of RAM to circumvent a spanish tax that was charged on imported machines with up to 64 KB memory.&lt;br /&gt;
&lt;br /&gt;
*With a possible total amount of '''832 x 288 pixel''' (576 interlaced) the [[CPC|CPC]] was the 8 bit homecomputer with the highest screen resolution ever.&lt;br /&gt;
&lt;br /&gt;
*'''OpenOffice''' for Windows/Linux is a direct descendant of [[Star-Division|StarWriter]] for the CPC. &lt;br /&gt;
*The transfer speed of the [[CPC Booster|CPC Booster +]] serial interface is faster than a standard '''DSL connection'''.&lt;br /&gt;
&lt;br /&gt;
*[[SymbOS|SymbOS]] can handle more than '''50 times''' bigger hard discs than MS Windows 95A. &lt;br /&gt;
*[[FutureOS|FutureOS]] can load 178 KB in '''9 seconds''' from floppy disc and manages up to '''4 MB''' of RAM &lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0pt 0pt 5px; padding: 0.5em 1em; background-color: rgb(204, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Donors  ===&lt;br /&gt;
&lt;br /&gt;
These people were kind enough to donate. All contributions went '''directly''' to our previous host, not our own pockets! &lt;br /&gt;
&lt;br /&gt;
'''If you would like to donate us, please contact the admin-team in our forum. This will ensure the continuation of the project.''' &lt;br /&gt;
Thank you!&lt;br /&gt;
&lt;br /&gt;
'''2011:''' [[Bryce|Bryce]](€75)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''2009:''' Prodatron (€1000)&amp;lt;br&amp;gt;Nurgle (€30)&amp;lt;br&amp;gt;Serge Querné (€30)&amp;lt;br&amp;gt;Roald Strauss (€50)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Donators from earlier years'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Bert Post Uiterweer, [[Rex|Rex]] of [[BENG!|BENG!]], [[Robcfg|Robcfg]], [[Prodatron|Prodatron]], [[User:Gryzor|Gryzor]], [[User:Ervin|Ervin]]&lt;br /&gt;
&lt;br /&gt;
Thanks so much guys!&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 204, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Where are CPC users from?  ===&lt;br /&gt;
Click [http://www4.clustrmaps.com/user/7804b163 here] for the big map! Smaller map was removed to keep loading times down.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68074</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68074"/>
				<updated>2011-05-15T21:41:23Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* Donors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
== Welcome to the Amstrad CPC Wiki!  == &lt;br /&gt;
&amp;lt;center&amp;gt;This site hopes to evolve into an encyclopaedia on all things [[Amstrad|Amstrad]] [[CPC|CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' around the CPC available.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''[[Special:Random|Random Page]] | [[#Become an Author!|Contribute]] | [[Help:Editing|Editing help]] | [http://www.cpcwiki.eu/forum Forum]'''&amp;lt;br&amp;gt;[[CPCWiki:Portal|CPCWiki Portal]] · [http://www.cpcwiki.eu/forum Forum] · [[Photo Gallery]] · [[About|About]] · [[Special:Statistics|Statistics]] · [[CPCWiki:General disclaimer|Disclaimer]]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:forum.png|400px|link=http://www.cpcwiki.eu/forum]]      [[Image:Vs.png|400px|link=http://www.cpcwiki.eu/index.php/Speccy_Port]]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(255, 201, 201); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 243, 243);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt; '''CPC Related News''' &amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt; &lt;br /&gt;
{{#ev:youtube|YJosZfm560Q|500}}&amp;lt;br&amp;gt;20/03/11: Amazing new '''Batman Forever''' demo [http://cpcwiki.eu/forum/index.php/topic,2085.new.html#new released]!!!! [UPD] Read an '''[http://www.norecess.net/interview-rhino.html interview] with Rhino'''!&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*09/05/11: '''[http://www.pushnpop.net/reset ReSeT #0 Party]''' is a CPC Meeting in France: 24-25-26 June 2011!&lt;br /&gt;
*03/05/11: '''[http://www.cpcmania.com/index2.asp?urldest=cpcdiskxp/cpcdiskxp.htm CPCDiskXP]''' 2.1 released :)&lt;br /&gt;
*27/04/11: A new game! This time a port of Dinamic's '''Arquimedes XXI''' by '''Devilmarkus, PulkoMandy, voXfReaX''' and '''MiguelSky''', over [http://www.amstrad.es/juegosamstrad/decargajuegos/arquimedesxxi.php here]!&lt;br /&gt;
*27/04/11: '''NoRecess''' published a great [http://www.norecess.net/interview-richard-wilson.html interview] with '''Richard Wilson''' of '''ParaDOS''' and '''WinApe''' fame :)&lt;br /&gt;
*17/04/11: '''ACID''' well and truly [http://www.octoate.de/wp/2011/04/15/another-acid-implementation-on-the-way/ ripped apart] :)&lt;br /&gt;
*17/04/11: '''NoRecess''' released v.2.2 of [http://www.norecess.net/hxc-floppy-emulator-manager.html HxC Floppy Emulator Manager]&lt;br /&gt;
*16/04/11: A very detailed interview of the Batman Forever Team published on '''[http://pushnpop.net/ Push'N'Pop]'''&lt;br /&gt;
*11/04/11: New game!!! '''[http://www.amstrad.es/juegosamstrad/decargajuegos/hora-bruja.php Hora Bruja]''' released! :)&lt;br /&gt;
*08/04/11: Another [http://www.norecess.net/1/post/2011/04/added-interview-of-longshot-logon-system.html interview] by Recess, this time with '''Longshot / Logon System'''!&lt;br /&gt;
*06/04/11: NoRecess added an [http://www.norecess.net/interview-face-hugger.html interview with '''Face Huggger''']!&lt;br /&gt;
*06/04/11: Version 19 of '''GamebaseCPC''' [http://www.cpc-power.com/gamebasecpc/index.php?page=accueil added]!&lt;br /&gt;
*23/03/11: '''[http://zx81.zx81.free.fr/serendipity/index.php?/archives/502-Caanoo-CAP32-Amstrad-CPC-Emulator-for-Caanoo-v1.1.2.html Caanoo-CAP32]''' for the Gamepark Caanoo updated!&lt;br /&gt;
*17/03/11: '''[http://www.retroreview.com/iang/UberCassette/ UberCassette]''' (wav-&amp;gt;CDT) now supports Amstrad CPC :)&lt;br /&gt;
*15/02/11: [http://cpcwiki.eu/forum/index.php/topic,1982 Sub Hunter] released! Read Axelay's interview [http://www.norecess.net/interview-axelay.html here]!&lt;br /&gt;
*10/03/11: {FR} A fantastic [http://www.phenixinformatique.com/modules/smartsection/item.php?itemid=244 interview with '''Marion Vannier'''], head of Amstrad France!&lt;br /&gt;
*09/03/11: Yeah!!! '''[http://fmsdevel.wisecoding.es/blog/cpcdroid---2011-03-02 CPCDroid]''', a great emulator for '''Android''', has been released!!!&lt;br /&gt;
*09/03/11: Small update of [http://cngsoft.no-ip.org/cpce/index.htm CPCE] released&lt;br /&gt;
*13/01/11: [http://www.mojontwins.com/juegos_mojonos/uwol-2-cpc/ Uwol 2 (Quest for Money)], a new game by the Mojon Twins!!&lt;br /&gt;
*13/01/11: New version of the [http://www.telefonica.net/web2/emilioguerrero/ccz80/ccz80.html CCZ80 compiler]&lt;br /&gt;
*13/01/11: [http://www.norecess.net/sdcc2pasmo.html SDCC2Pasmo v1.0] tool released for SDCC-&amp;gt;Pasmo assembler conversions&lt;br /&gt;
*13/01/11: [http://cpcparts.net CPCParts] has a real domain name now!&lt;br /&gt;
*12/01/11: [http://cpcwiki.eu/forum/index.php/topic,1871.0.html CPCInAJar], CPC emu in *exactly* 128kB released by Devilmarkus!&lt;br /&gt;
*15/12/10: [[Xmas_2010_Demo]] Released by Redbox :) &lt;br /&gt;
*01/12/10: New [http://cpcwiki.eu/forum/index.php/topic,1608.0.html Amstrad Repair Service]! &lt;br /&gt;
*17/10/10: [[MegaROM]] DIY ROMBoard released by Bryce! &lt;br /&gt;
*15/10/10: [http://www.mojontwins.com/juegos_mojonos/sir-ababol-cpc/ Sir Ababol] released by Mojon Twins! &lt;br /&gt;
*11/10/10: [http://cpcwiki.eu/forum/index.php/topic,1425.new.html#new Blue Angel 69] released!!! &lt;br /&gt;
*11/10/10: [http://www.mojontwins.com/juegos_mojonos/cheril-of-the-bosque-cpc/ Cheril of the Bosque] released by Mojon Twins!&lt;br /&gt;
*11/10/10: Arnoldemu released [http://cpcwiki.eu/forum/index.php/topic,1416.msg13821 Drivetest] to help you diagnose drive problems!&lt;br /&gt;
*10/10/10: [[CPCE]] 1.94 is released. &lt;br /&gt;
*06/10/10: Impressive 4Kb demo realesed by [http://vanitycrew.free.fr/ Vanity Crew] during the Main#5 Party. &lt;br /&gt;
*07/09/10: 1st CPC emulator written in Javascript, [http://www.cpcbox.com/ CPCBox] is released! &lt;br /&gt;
*02/09/10: [[ROManager_BASIC]] is released! &lt;br /&gt;
*16/08/10: [[FilmeMacher]] updated! &lt;br /&gt;
*29/07/10: 2cdt [http://cpcwiki.eu/forum/index.php/topic,1203.msg11699 updated!!!] &lt;br /&gt;
*23/06/10: New [http://simonowen.com/samdisk/ SAMDisk] version released! Also, don't forget DevilMarkus' [http://cpc-live.com/data/download.php?type=-tool&amp;amp;fichier=DiskUtil_1_2.zip CPCXfs &amp;amp; SAMDisk GUI]!!&lt;br /&gt;
*20/06/10: [http://www.julien-nevo.com/arkos/tools.html Arkos Tracker v1.0 Beta 3] released! &lt;br /&gt;
*11/05/10: [http://www.portabledev.com/pages/ds/jeuxdev.-perso/ameds.php AmeDS], a DS CPC emulator has been released! &lt;br /&gt;
*26/04/10: [http://www.amstradcpc.info/ Amstrad Expo 2010] will take place in Coutances (France) from 25th to 27th June.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery widths=150px&amp;gt;&lt;br /&gt;
Image:Arquimedes.png|Arquimedes XXI&lt;br /&gt;
Image:Hora bruja.jpg|Hora Bruja&lt;br /&gt;
Image:BatmanForever.png|Batman Forever&lt;br /&gt;
Image:Subhunter2.png|SubHunter&lt;br /&gt;
Image:Uwol2b.png|Uwol 2&lt;br /&gt;
Image:xmas_2010_demo_screenshot.png|Xmas 2010 Demo&lt;br /&gt;
Image:MegaROM.png|MegaROM&lt;br /&gt;
Image:Ilogical.png|Ilogical&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=right&amp;gt;...[[OldNews|Older News]]...&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- WEIRD TABLE START --&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; class=&amp;quot;FCK__ShowTableBorders&amp;quot; &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| &amp;lt;div style=&amp;quot;border: 1px solid rgb(176, 176, 176); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(238, 238, 238);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CPCWiki updates  ===&lt;br /&gt;
*12/01/2011: 2010: An '''[http://cpcwiki.eu/forum/index.php/topic,1865.0.html excellent year]''' for the CPCWiki!!!&lt;br /&gt;
*22/09/2009: The CPCWIKI moves to new domain [http://cpcwiki.eu CPCWIKI.EU] &lt;br /&gt;
*14/08/2009: The CPCWIKI moves (temporarily) to new domain [http://cpc-wiki.com CPC-WIKI.COM] &lt;br /&gt;
*22/07/09: Wiki &amp;amp; Forum moved to a new server &lt;br /&gt;
*14/07/09: Forum updated to 2.0RC1-1, Wiki updated to 1.15.1! &lt;br /&gt;
*Add the CPCWiki to '''your Homepage'''. Check out [[About#Wiki-Napping|About#Wiki-Napping]] and start napping this Wiki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Become an Author!  ===&lt;br /&gt;
&lt;br /&gt;
We are searching for authors of the following articles:&lt;br /&gt;
&lt;br /&gt;
* [[PDW|PDW]] (unknown what this article shall be about...) (Note: PDW is believed to be German group of programmers who wrote CPC Demos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;createbox&amp;gt; &lt;br /&gt;
default=Enter name of article to create &lt;br /&gt;
buttonlabel=Create article! &lt;br /&gt;
width=40 &lt;br /&gt;
&amp;lt;/createbox&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Top 5 Contributors from the last 60 days: &lt;br /&gt;
{{Special:ContributionScores/5/60/notools}} &lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: right;&amp;quot;&amp;gt;&amp;lt;small&amp;gt;'''All [[Special:Wantedpages|wanted articles]]''' &amp;amp;#124; [[:Category:Stub|Extendable Stubs]]&amp;lt;br&amp;gt;'''[[Special:ContributionScores|List of most active contributors]]'''&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align: top;&amp;quot; | &amp;lt;div style=&amp;quot;border: 1px solid rgb(228, 222, 222); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(249, 249, 249);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Did you know?  ===&lt;br /&gt;
&lt;br /&gt;
*When the 664 was being developed, Sugar was already looking (and hinting publicly!) at the 6128 &lt;br /&gt;
*The [[472|CPC 472]] was a model released in Spain with an extra unaccessible 8 KB of RAM to circumvent a spanish tax that was charged on imported machines with up to 64 KB memory.&lt;br /&gt;
&lt;br /&gt;
*With a possible total amount of '''832 x 288 pixel''' (576 interlaced) the [[CPC|CPC]] was the 8 bit homecomputer with the highest screen resolution ever.&lt;br /&gt;
&lt;br /&gt;
*'''OpenOffice''' for Windows/Linux is a direct descendant of [[Star-Division|StarWriter]] for the CPC. &lt;br /&gt;
*The transfer speed of the [[CPC Booster|CPC Booster +]] serial interface is faster than a standard '''DSL connection'''.&lt;br /&gt;
&lt;br /&gt;
*[[SymbOS|SymbOS]] can handle more than '''50 times''' bigger hard discs than MS Windows 95A. &lt;br /&gt;
*[[FutureOS|FutureOS]] can load 178 KB in '''9 seconds''' from floppy disc and manages up to '''4 MB''' of RAM &lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0pt 0pt 5px; padding: 0.5em 1em; background-color: rgb(204, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Donors  ===&lt;br /&gt;
&lt;br /&gt;
These people were kind enough to donate. All contributions went '''directly''' to our previous host, not our own pockets! &lt;br /&gt;
&lt;br /&gt;
'''When you like to donate us, please contact the admin-team in our forum.''' &lt;br /&gt;
Thank you!&lt;br /&gt;
&lt;br /&gt;
'''2009:''' Prodatron (€1000)&amp;lt;br&amp;gt;Nurgle (€30)&amp;lt;br&amp;gt;Serge Querné (€30)&amp;lt;br&amp;gt;Roald Strauss (€50)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Donators from earlier years'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Bert Post Uiterweer, [[Rex|Rex]] of [[BENG!|BENG!]], [[Robcfg|Robcfg]], [[Prodatron|Prodatron]], [[User:Gryzor|Gryzor]], [[User:Ervin|Ervin]]&lt;br /&gt;
&lt;br /&gt;
Thanks so much guys!&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 204, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Where are CPC users from?  ===&lt;br /&gt;
Click [http://www4.clustrmaps.com/user/7804b163 here] for the big map! Smaller map was removed to keep loading times down.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68072</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68072"/>
				<updated>2011-05-15T21:41:00Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* Donors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
== Welcome to the Amstrad CPC Wiki!  == &lt;br /&gt;
&amp;lt;center&amp;gt;This site hopes to evolve into an encyclopaedia on all things [[Amstrad|Amstrad]] [[CPC|CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' around the CPC available.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;'''[[Special:Random|Random Page]] | [[#Become an Author!|Contribute]] | [[Help:Editing|Editing help]] | [http://www.cpcwiki.eu/forum Forum]'''&amp;lt;br&amp;gt;[[CPCWiki:Portal|CPCWiki Portal]] · [http://www.cpcwiki.eu/forum Forum] · [[Photo Gallery]] · [[About|About]] · [[Special:Statistics|Statistics]] · [[CPCWiki:General disclaimer|Disclaimer]]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:forum.png|400px|link=http://www.cpcwiki.eu/forum]]      [[Image:Vs.png|400px|link=http://www.cpcwiki.eu/index.php/Speccy_Port]]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(255, 201, 201); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 243, 243);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt; '''CPC Related News''' &amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt; &lt;br /&gt;
{{#ev:youtube|YJosZfm560Q|500}}&amp;lt;br&amp;gt;20/03/11: Amazing new '''Batman Forever''' demo [http://cpcwiki.eu/forum/index.php/topic,2085.new.html#new released]!!!! [UPD] Read an '''[http://www.norecess.net/interview-rhino.html interview] with Rhino'''!&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*09/05/11: '''[http://www.pushnpop.net/reset ReSeT #0 Party]''' is a CPC Meeting in France: 24-25-26 June 2011!&lt;br /&gt;
*03/05/11: '''[http://www.cpcmania.com/index2.asp?urldest=cpcdiskxp/cpcdiskxp.htm CPCDiskXP]''' 2.1 released :)&lt;br /&gt;
*27/04/11: A new game! This time a port of Dinamic's '''Arquimedes XXI''' by '''Devilmarkus, PulkoMandy, voXfReaX''' and '''MiguelSky''', over [http://www.amstrad.es/juegosamstrad/decargajuegos/arquimedesxxi.php here]!&lt;br /&gt;
*27/04/11: '''NoRecess''' published a great [http://www.norecess.net/interview-richard-wilson.html interview] with '''Richard Wilson''' of '''ParaDOS''' and '''WinApe''' fame :)&lt;br /&gt;
*17/04/11: '''ACID''' well and truly [http://www.octoate.de/wp/2011/04/15/another-acid-implementation-on-the-way/ ripped apart] :)&lt;br /&gt;
*17/04/11: '''NoRecess''' released v.2.2 of [http://www.norecess.net/hxc-floppy-emulator-manager.html HxC Floppy Emulator Manager]&lt;br /&gt;
*16/04/11: A very detailed interview of the Batman Forever Team published on '''[http://pushnpop.net/ Push'N'Pop]'''&lt;br /&gt;
*11/04/11: New game!!! '''[http://www.amstrad.es/juegosamstrad/decargajuegos/hora-bruja.php Hora Bruja]''' released! :)&lt;br /&gt;
*08/04/11: Another [http://www.norecess.net/1/post/2011/04/added-interview-of-longshot-logon-system.html interview] by Recess, this time with '''Longshot / Logon System'''!&lt;br /&gt;
*06/04/11: NoRecess added an [http://www.norecess.net/interview-face-hugger.html interview with '''Face Huggger''']!&lt;br /&gt;
*06/04/11: Version 19 of '''GamebaseCPC''' [http://www.cpc-power.com/gamebasecpc/index.php?page=accueil added]!&lt;br /&gt;
*23/03/11: '''[http://zx81.zx81.free.fr/serendipity/index.php?/archives/502-Caanoo-CAP32-Amstrad-CPC-Emulator-for-Caanoo-v1.1.2.html Caanoo-CAP32]''' for the Gamepark Caanoo updated!&lt;br /&gt;
*17/03/11: '''[http://www.retroreview.com/iang/UberCassette/ UberCassette]''' (wav-&amp;gt;CDT) now supports Amstrad CPC :)&lt;br /&gt;
*15/02/11: [http://cpcwiki.eu/forum/index.php/topic,1982 Sub Hunter] released! Read Axelay's interview [http://www.norecess.net/interview-axelay.html here]!&lt;br /&gt;
*10/03/11: {FR} A fantastic [http://www.phenixinformatique.com/modules/smartsection/item.php?itemid=244 interview with '''Marion Vannier'''], head of Amstrad France!&lt;br /&gt;
*09/03/11: Yeah!!! '''[http://fmsdevel.wisecoding.es/blog/cpcdroid---2011-03-02 CPCDroid]''', a great emulator for '''Android''', has been released!!!&lt;br /&gt;
*09/03/11: Small update of [http://cngsoft.no-ip.org/cpce/index.htm CPCE] released&lt;br /&gt;
*13/01/11: [http://www.mojontwins.com/juegos_mojonos/uwol-2-cpc/ Uwol 2 (Quest for Money)], a new game by the Mojon Twins!!&lt;br /&gt;
*13/01/11: New version of the [http://www.telefonica.net/web2/emilioguerrero/ccz80/ccz80.html CCZ80 compiler]&lt;br /&gt;
*13/01/11: [http://www.norecess.net/sdcc2pasmo.html SDCC2Pasmo v1.0] tool released for SDCC-&amp;gt;Pasmo assembler conversions&lt;br /&gt;
*13/01/11: [http://cpcparts.net CPCParts] has a real domain name now!&lt;br /&gt;
*12/01/11: [http://cpcwiki.eu/forum/index.php/topic,1871.0.html CPCInAJar], CPC emu in *exactly* 128kB released by Devilmarkus!&lt;br /&gt;
*15/12/10: [[Xmas_2010_Demo]] Released by Redbox :) &lt;br /&gt;
*01/12/10: New [http://cpcwiki.eu/forum/index.php/topic,1608.0.html Amstrad Repair Service]! &lt;br /&gt;
*17/10/10: [[MegaROM]] DIY ROMBoard released by Bryce! &lt;br /&gt;
*15/10/10: [http://www.mojontwins.com/juegos_mojonos/sir-ababol-cpc/ Sir Ababol] released by Mojon Twins! &lt;br /&gt;
*11/10/10: [http://cpcwiki.eu/forum/index.php/topic,1425.new.html#new Blue Angel 69] released!!! &lt;br /&gt;
*11/10/10: [http://www.mojontwins.com/juegos_mojonos/cheril-of-the-bosque-cpc/ Cheril of the Bosque] released by Mojon Twins!&lt;br /&gt;
*11/10/10: Arnoldemu released [http://cpcwiki.eu/forum/index.php/topic,1416.msg13821 Drivetest] to help you diagnose drive problems!&lt;br /&gt;
*10/10/10: [[CPCE]] 1.94 is released. &lt;br /&gt;
*06/10/10: Impressive 4Kb demo realesed by [http://vanitycrew.free.fr/ Vanity Crew] during the Main#5 Party. &lt;br /&gt;
*07/09/10: 1st CPC emulator written in Javascript, [http://www.cpcbox.com/ CPCBox] is released! &lt;br /&gt;
*02/09/10: [[ROManager_BASIC]] is released! &lt;br /&gt;
*16/08/10: [[FilmeMacher]] updated! &lt;br /&gt;
*29/07/10: 2cdt [http://cpcwiki.eu/forum/index.php/topic,1203.msg11699 updated!!!] &lt;br /&gt;
*23/06/10: New [http://simonowen.com/samdisk/ SAMDisk] version released! Also, don't forget DevilMarkus' [http://cpc-live.com/data/download.php?type=-tool&amp;amp;fichier=DiskUtil_1_2.zip CPCXfs &amp;amp; SAMDisk GUI]!!&lt;br /&gt;
*20/06/10: [http://www.julien-nevo.com/arkos/tools.html Arkos Tracker v1.0 Beta 3] released! &lt;br /&gt;
*11/05/10: [http://www.portabledev.com/pages/ds/jeuxdev.-perso/ameds.php AmeDS], a DS CPC emulator has been released! &lt;br /&gt;
*26/04/10: [http://www.amstradcpc.info/ Amstrad Expo 2010] will take place in Coutances (France) from 25th to 27th June.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery widths=150px&amp;gt;&lt;br /&gt;
Image:Arquimedes.png|Arquimedes XXI&lt;br /&gt;
Image:Hora bruja.jpg|Hora Bruja&lt;br /&gt;
Image:BatmanForever.png|Batman Forever&lt;br /&gt;
Image:Subhunter2.png|SubHunter&lt;br /&gt;
Image:Uwol2b.png|Uwol 2&lt;br /&gt;
Image:xmas_2010_demo_screenshot.png|Xmas 2010 Demo&lt;br /&gt;
Image:MegaROM.png|MegaROM&lt;br /&gt;
Image:Ilogical.png|Ilogical&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=right&amp;gt;...[[OldNews|Older News]]...&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- WEIRD TABLE START --&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; class=&amp;quot;FCK__ShowTableBorders&amp;quot; &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| &amp;lt;div style=&amp;quot;border: 1px solid rgb(176, 176, 176); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(238, 238, 238);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CPCWiki updates  ===&lt;br /&gt;
*12/01/2011: 2010: An '''[http://cpcwiki.eu/forum/index.php/topic,1865.0.html excellent year]''' for the CPCWiki!!!&lt;br /&gt;
*22/09/2009: The CPCWIKI moves to new domain [http://cpcwiki.eu CPCWIKI.EU] &lt;br /&gt;
*14/08/2009: The CPCWIKI moves (temporarily) to new domain [http://cpc-wiki.com CPC-WIKI.COM] &lt;br /&gt;
*22/07/09: Wiki &amp;amp; Forum moved to a new server &lt;br /&gt;
*14/07/09: Forum updated to 2.0RC1-1, Wiki updated to 1.15.1! &lt;br /&gt;
*Add the CPCWiki to '''your Homepage'''. Check out [[About#Wiki-Napping|About#Wiki-Napping]] and start napping this Wiki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Become an Author!  ===&lt;br /&gt;
&lt;br /&gt;
We are searching for authors of the following articles:&lt;br /&gt;
&lt;br /&gt;
* [[PDW|PDW]] (unknown what this article shall be about...) (Note: PDW is believed to be German group of programmers who wrote CPC Demos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;createbox&amp;gt; &lt;br /&gt;
default=Enter name of article to create &lt;br /&gt;
buttonlabel=Create article! &lt;br /&gt;
width=40 &lt;br /&gt;
&amp;lt;/createbox&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Top 5 Contributors from the last 60 days: &lt;br /&gt;
{{Special:ContributionScores/5/60/notools}} &lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: right;&amp;quot;&amp;gt;&amp;lt;small&amp;gt;'''All [[Special:Wantedpages|wanted articles]]''' &amp;amp;#124; [[:Category:Stub|Extendable Stubs]]&amp;lt;br&amp;gt;'''[[Special:ContributionScores|List of most active contributors]]'''&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align: top;&amp;quot; | &amp;lt;div style=&amp;quot;border: 1px solid rgb(228, 222, 222); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(249, 249, 249);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Did you know?  ===&lt;br /&gt;
&lt;br /&gt;
*When the 664 was being developed, Sugar was already looking (and hinting publicly!) at the 6128 &lt;br /&gt;
*The [[472|CPC 472]] was a model released in Spain with an extra unaccessible 8 KB of RAM to circumvent a spanish tax that was charged on imported machines with up to 64 KB memory.&lt;br /&gt;
&lt;br /&gt;
*With a possible total amount of '''832 x 288 pixel''' (576 interlaced) the [[CPC|CPC]] was the 8 bit homecomputer with the highest screen resolution ever.&lt;br /&gt;
&lt;br /&gt;
*'''OpenOffice''' for Windows/Linux is a direct descendant of [[Star-Division|StarWriter]] for the CPC. &lt;br /&gt;
*The transfer speed of the [[CPC Booster|CPC Booster +]] serial interface is faster than a standard '''DSL connection'''.&lt;br /&gt;
&lt;br /&gt;
*[[SymbOS|SymbOS]] can handle more than '''50 times''' bigger hard discs than MS Windows 95A. &lt;br /&gt;
*[[FutureOS|FutureOS]] can load 178 KB in '''9 seconds''' from floppy disc and manages up to '''4 MB''' of RAM &lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0pt 0pt 5px; padding: 0.5em 1em; background-color: rgb(204, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Donors  ===&lt;br /&gt;
&lt;br /&gt;
These people were kind enough to donate. All contributions went '''directly''' to our previous host, not our own pockets! &lt;br /&gt;
'''When you like to donate us, please contact the admin-team in our forum.''' Thank you!&lt;br /&gt;
&lt;br /&gt;
'''2009:''' Prodatron (€1000)&amp;lt;br&amp;gt;Nurgle (€30)&amp;lt;br&amp;gt;Serge Querné (€30)&amp;lt;br&amp;gt;Roald Strauss (€50)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Donators from earlier years'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Bert Post Uiterweer, [[Rex|Rex]] of [[BENG!|BENG!]], [[Robcfg|Robcfg]], [[Prodatron|Prodatron]], [[User:Gryzor|Gryzor]], [[User:Ervin|Ervin]]&lt;br /&gt;
&lt;br /&gt;
Thanks so much guys!&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 204, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Where are CPC users from?  ===&lt;br /&gt;
Click [http://www4.clustrmaps.com/user/7804b163 here] for the big map! Smaller map was removed to keep loading times down.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Emulators&amp;diff=65482</id>
		<title>Emulators</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Emulators&amp;diff=65482"/>
				<updated>2010-12-18T18:21:39Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* Java */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Operating Systems  =&lt;br /&gt;
&lt;br /&gt;
== Acorn RISC OS  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[!CPC|!CPC]]&lt;br /&gt;
| &lt;br /&gt;
| Jul 28, 1996&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [ftp://ftp.lip6.fr/pub/amstrad/emulator/CPC0728.ZIP]&lt;br /&gt;
|-&lt;br /&gt;
| [[!CPCemu|!CPCemu]]&lt;br /&gt;
| 1.10&lt;br /&gt;
| Jun 4, 1997&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [ftp://ftp.lip6.fr/pub/amstrad/emulator/CPCEM110.ZIP]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiga  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[A-CPC|A-CPC]]&lt;br /&gt;
| 2.0&lt;br /&gt;
| Apr 10, 1996&lt;br /&gt;
| [[CPC old generation|CPC range]], [[Plus|Plus range]]&lt;br /&gt;
| Shareware&lt;br /&gt;
| [ftp://ftp.lip6.fr/pub/amstrad/emulator/ACPCDE20.LHA]&lt;br /&gt;
|-&lt;br /&gt;
| [[Ami-CPC|Ami-CPC]]&lt;br /&gt;
| 0.46&lt;br /&gt;
| Jan 21, 1998&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://deplanque.chez.com/]&lt;br /&gt;
|-&lt;br /&gt;
| [[CPE|CPE]]&lt;br /&gt;
| &lt;br /&gt;
| Feb 24, 1995&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [ftp://ftp.lip6.fr/pub/amstrad/emulator/ACPE_NEW.LHA]&lt;br /&gt;
|-&lt;br /&gt;
| [[Emu-CPC|Emu-CPC]]&lt;br /&gt;
| 0.7&lt;br /&gt;
| Sep 15, 1996&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [ftp://ftp.lip6.fr/pub/amstrad/emulator/EMUCPC07.LZX]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amsdos ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[ZXM|ZXM]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [[ZX Spectrum|ZX Spectrum]]&lt;br /&gt;
| &lt;br /&gt;
| [http://www.systemed.net/cpc/zxm.zip]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DOS  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[Arnimedes|Arnimedes]] &lt;br /&gt;
| 0.8a&lt;br /&gt;
| Apr 15, 2000&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://www.arnimedes.de/]&lt;br /&gt;
|-&lt;br /&gt;
| [[CPCE|CPCE]] &lt;br /&gt;
| 1.94&lt;br /&gt;
| Oct 10, 2010&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://cngsoft.no-ip.org/cpce/]&lt;br /&gt;
|-&lt;br /&gt;
| [[CPCemu|CPCemu]] &lt;br /&gt;
| 1.5&lt;br /&gt;
| Jul 7, 1998&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://www.cpc-emu.org/]&lt;br /&gt;
|-&lt;br /&gt;
| [[NO$CPC|NO$CPC]]&lt;br /&gt;
| 1.8&lt;br /&gt;
| Nov 2, 2000&lt;br /&gt;
| [[CPC old generation|CPC range]], [[Plus|Plus range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://nocash.emubase.de/cpc.htm]&lt;br /&gt;
|-&lt;br /&gt;
| [[CPCEMU (RWCPC)|RWCPC]]&lt;br /&gt;
| &lt;br /&gt;
| Mar 23, 1995&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [ftp://ftp.lip6.fr/pub/amstrad/emulator/RWCPC.ZIP]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Java  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[Arnold Jnr|Arnold Jnr]]&lt;br /&gt;
| &lt;br /&gt;
| Aug 27, 2001&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://www.arnoldemu.freeserve.co.uk/]&lt;br /&gt;
|-&lt;br /&gt;
| [[JEMU|JEMU]]&lt;br /&gt;
| &lt;br /&gt;
| Feb 19, 2007&lt;br /&gt;
| [[CPC old generation|CPC range]], [[BBC Micro]], [[VZ-300]], [[ZX Spectrum]], [[ZX80]], [[ZX81]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://jemu.winape.net/]&lt;br /&gt;
|-&lt;br /&gt;
| [[JavaCPC|JavaCPC]]&lt;br /&gt;
| 6.7&lt;br /&gt;
| Nov 1, 2009&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://cpc-live.com/]&lt;br /&gt;
|-&lt;br /&gt;
| [[WebCPC|WebCPC]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://sourceforge.net/projects/webcpc/]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Javascript ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[CPCBox|CPCBox]]&lt;br /&gt;
| beta&lt;br /&gt;
| Dec 15, 2010&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://www.cpcbox.com/]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MacOS  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[Arnold_(Emulator)|Arnold]] &lt;br /&gt;
| 1.7.8&lt;br /&gt;
| &lt;br /&gt;
| [[CPC old generation|CPC range]], [[Plus|Plus range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://www.bannister.org/software/arnold.htm]&lt;br /&gt;
|-&lt;br /&gt;
| [[CPCplusplus|CPC++]]&lt;br /&gt;
| 2.0.0&lt;br /&gt;
| Jan 14, 2003&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://bricerive.free.fr/cpc/cpcpp.html]&lt;br /&gt;
|-&lt;br /&gt;
| [[MacMESS|MacMESS]]&lt;br /&gt;
| 6.7&lt;br /&gt;
| Nov 1, 2009&lt;br /&gt;
| [[CPC old generation|CPC range]], [[Plus|Plus range]] &amp;amp; lots of other computer systems&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://www.macmess.org/]&lt;br /&gt;
|-&lt;br /&gt;
| [[MacCPC|MacCPC]]&lt;br /&gt;
| 0.9.2&lt;br /&gt;
| &lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://www.wincpc.ch/index.php?topic=projects-maccpc]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SunOS / Solaris  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[CPCplusplus|CPC++]]&lt;br /&gt;
| 1.5.0&lt;br /&gt;
| &lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://bricerive.free.fr/cpc/cpcpp.html]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Unix / Linux  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[Arnold_(Emulator)|Arnold]] &lt;br /&gt;
| &lt;br /&gt;
| Mar 17, 2009&lt;br /&gt;
| [[CPC old generation|CPC range]], [[Plus|Plus range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://arnold.berlios.de/]&lt;br /&gt;
|-&lt;br /&gt;
| [[CaPriCe|CaPriCe]] &lt;br /&gt;
| 4.2.0&lt;br /&gt;
| May 14, 2005&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://sourceforge.net/projects/caprice32/]&lt;br /&gt;
|-&lt;br /&gt;
| [[Caprice Reloaded]]&lt;br /&gt;
| r415&lt;br /&gt;
| Sep 9, 2010&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://code.google.com/p/cpcsdk/]&lt;br /&gt;
|-&lt;br /&gt;
| [[CPCplusplus|CPC++]]&lt;br /&gt;
| 1.5.0&lt;br /&gt;
| &lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://bricerive.free.fr/cpc/cpcpp.html]&lt;br /&gt;
|-&lt;br /&gt;
| [[cpc4x|cpc4x]] &lt;br /&gt;
| 0.26&lt;br /&gt;
| Dec 11, 2004&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://www.ulrich-cordes.de/cpc/english/cpcemu.htm]&lt;br /&gt;
|-&lt;br /&gt;
| [[CPCemu|CPCemu]] &lt;br /&gt;
| 1.7&lt;br /&gt;
| Dec 6, 2009&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://www.cpc-emu.org/]&lt;br /&gt;
|-&lt;br /&gt;
| [[MESS|MESS]]&lt;br /&gt;
| 0.140&lt;br /&gt;
| Oct 31, 2010&lt;br /&gt;
| [[CPC old generation|CPC range]], [[Plus|Plus range]] &amp;amp; lots of other computer systems&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://www.mess.org/]&lt;br /&gt;
|-&lt;br /&gt;
| [[Roland Emulator|Roland]] &lt;br /&gt;
| 0.5b2&lt;br /&gt;
| Jan 5, 2009&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://www.rolandemu.de/home.en.html]&lt;br /&gt;
|-&lt;br /&gt;
| [[XCPC|XCPC]]&lt;br /&gt;
|&lt;br /&gt;
| Jan 22, 2007&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://xcpc.sourceforge.net/]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Windows  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[Arnimedes|Arnimedes]] &lt;br /&gt;
| 1.01&lt;br /&gt;
| Sep 17, 2006&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://www.arnimedes.de/]&lt;br /&gt;
|-&lt;br /&gt;
| [[Arnold_(Emulator)|Arnold]] &lt;br /&gt;
| &lt;br /&gt;
| Jan 11, 2004&lt;br /&gt;
| [[CPC old generation|CPC range]], [[Plus|Plus range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://arnold.emuunlim.com/]&lt;br /&gt;
|-&lt;br /&gt;
| [[CaPriCe|CaPriCe]] &lt;br /&gt;
| 4.2.0&lt;br /&gt;
| May 14, 2005&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://sourceforge.net/projects/caprice32/]&lt;br /&gt;
|-&lt;br /&gt;
| [[CoPaCabana|CoPaCabana]]&lt;br /&gt;
| 0.74&lt;br /&gt;
| Apr 12, 2006&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://copacabana.emuunlim.com/]&lt;br /&gt;
|-&lt;br /&gt;
| [[CPC-Em|CPC-Em]] &lt;br /&gt;
| 0.4&lt;br /&gt;
| Jul 7, 2004&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://cpc-em.emuunlim.com/]&lt;br /&gt;
|-&lt;br /&gt;
| [[CpcAlive|CpcAlive]] &lt;br /&gt;
| 1.09h&lt;br /&gt;
| Dec 12, 2010&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://www.cpcalive.com/cpcalive_en.html]&lt;br /&gt;
|-&lt;br /&gt;
| [[CPCE|CPCE]] &lt;br /&gt;
| 1.94&lt;br /&gt;
| Oct 10, 2010&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://cngsoft.no-ip.org/cpce/]&lt;br /&gt;
|-&lt;br /&gt;
| [[CPCemu|CPCemu]] &lt;br /&gt;
| 1.7&lt;br /&gt;
| Dec 6, 2009&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://www.cpc-emu.org/]&lt;br /&gt;
|-&lt;br /&gt;
| [[CPE|CPE]]&lt;br /&gt;
| 5.2&lt;br /&gt;
| Apr 21, 1997&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [ftp://ftp.lip6.fr/pub/amstrad/emulator/CPE52.ZIP]&lt;br /&gt;
|-&lt;br /&gt;
| [[MESS|MESS]]&lt;br /&gt;
| 0.140&lt;br /&gt;
| Oct 31, 2010&lt;br /&gt;
| [[CPC old generation|CPC range]], [[Plus|Plus range]] &amp;amp; lots of other computer systems&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://www.mess.org/]&lt;br /&gt;
|-&lt;br /&gt;
| [[MTMW|MTMW]]&lt;br /&gt;
| 1.30B&lt;br /&gt;
| Jan 11, 2000&lt;br /&gt;
| [[CPC old generation|CPC range]], [[Plus|Plus range]], [[ZX Spectrum]], [[ZX80]], [[ZX81]], [[Jupiter ACE]], [[Enterprise]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [ftp://ftp.lip6.fr/pub/amstrad/emulator/MTMW130B.ZIP]&lt;br /&gt;
|-&lt;br /&gt;
| [[NO$CPC|NO$CPC]]&lt;br /&gt;
| 1.8&lt;br /&gt;
| Nov 2, 2000&lt;br /&gt;
| [[CPC old generation|CPC range]], [[Plus|Plus range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://nocash.emubase.de/cpc.htm]&lt;br /&gt;
|-&lt;br /&gt;
| [[PC-CPC|PC-CPC]] &lt;br /&gt;
| 0.1an&lt;br /&gt;
| May 13, 2007&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://demoniak-contrib.forumactif.com/programmes-pc-pour-cpc-f3/pc-cpc-t11.htm]&lt;br /&gt;
|-&lt;br /&gt;
| [[Roland Emulator|Roland]] &lt;br /&gt;
| 0.5b2&lt;br /&gt;
| Jan 5, 2009&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://www.rolandemu.de/home.en.html]&lt;br /&gt;
|-&lt;br /&gt;
| [[VirtualCPC|VirtualCPC]] &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[WinApe|WinApe]] &lt;br /&gt;
| 2.0a17&lt;br /&gt;
| Sep 9, 2008&lt;br /&gt;
| [[CPC old generation|CPC range]], [[Plus|Plus range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://www.winape.net/]&lt;br /&gt;
|-&lt;br /&gt;
| [[WinCPC|WinCPC]] &lt;br /&gt;
| 0.9.25&lt;br /&gt;
| Jan 6, 2007&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://www.wincpc.ch/index.php?topic=projects-wincpc]&lt;br /&gt;
|-&lt;br /&gt;
| [[Yage|Yage]]&lt;br /&gt;
| 0.91&lt;br /&gt;
| Oct 24, 1998&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [ftp://ftp.lip6.fr/pub/amstrad/emulator/YAGE091.ZIP]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Consoles / Handhelds  =&lt;br /&gt;
&lt;br /&gt;
== Gamepark GP32 / GP2X / Wiz / Caanoo / Pandora ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[Pituka|Pituka (GP32)]]&lt;br /&gt;
| 1d&lt;br /&gt;
| May 15, 2010&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://david.dantoine.org/proyecto/4/]&lt;br /&gt;
|-&lt;br /&gt;
| [[Caprice|CapriceGP2x]]&lt;br /&gt;
| 0.5&lt;br /&gt;
| Feb 22, 2006&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://wiki.gp2x.org/wiki/CapriceGP2x]&lt;br /&gt;
|-&lt;br /&gt;
| [[Caprice|GP2X-CAP32]]&lt;br /&gt;
| 1.5.1&lt;br /&gt;
| Aug 29, 2009&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://zx81.zx81.free.fr/serendipity_fr/index.php?/categories/42-Amstrad/]&lt;br /&gt;
|-&lt;br /&gt;
| [[Caprice|Wiz-CAP32]]&lt;br /&gt;
| 1.1.0&lt;br /&gt;
| Aug 29, 2009&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://zx81.zx81.free.fr/serendipity_fr/index.php?/categories/86-Amstrad/]&lt;br /&gt;
|-&lt;br /&gt;
| [[Caprice|Caanoo-CAP32]]&lt;br /&gt;
| 1.1.0&lt;br /&gt;
| Sep 30, 2010&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://zx81.zx81.free.fr/serendipity_fr/index.php?/categories/158-Amstrad/]&lt;br /&gt;
|-&lt;br /&gt;
| [[Caprice|Pandora-CAP32]]&lt;br /&gt;
| 1.1.0&lt;br /&gt;
| Jun 27, 2010&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://zx81.zx81.free.fr/serendipity_fr/index.php?/categories/127-Amstrad/]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Dingoo A320 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[Pituka|Pituka (Dingux)]]&lt;br /&gt;
| 0.8pre&lt;br /&gt;
| Aug 19, 2010&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://david.dantoine.org/proyecto/4/]&lt;br /&gt;
|-&lt;br /&gt;
| [[Caprice|Dingux-CAP32]]&lt;br /&gt;
| 1.1.2&lt;br /&gt;
| Oct 17, 2009&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://zx81.zx81.free.fr/serendipity/index.php?/categories/105-Amstrad/]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Microsoft XBOX  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[Arnold|ArnoldX]]&lt;br /&gt;
| v5&lt;br /&gt;
| Apr 20, 2010&lt;br /&gt;
| [[CPC old generation|CPC range]], [[Plus|Plus range]]&lt;br /&gt;
| &lt;br /&gt;
| [http://forums.xbox-scene.com/index.php?showtopic=711667]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sega Dreamcast  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[CPCast|CPCast]]&lt;br /&gt;
| &lt;br /&gt;
| May 6, 2006&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://www.dcemu.co.uk/vbulletin/showthread.php?t=24100]&lt;br /&gt;
|-&lt;br /&gt;
| [[DreamCPC|DreamCPC]]&lt;br /&gt;
| Alpha 3&lt;br /&gt;
| Oct 16, 2005&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://dreamcast.dcemu.co.uk/dreamcpc.php]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sony PSP  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[PSPCAP32|PSPCAP32]]&lt;br /&gt;
| 1.5.1&lt;br /&gt;
| Aug 21, 2009&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://zx81.zx81.free.fr/serendipity_fr/index.php?/categories/3-Amstrad/]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Nintendo DS  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[AmeDS|AmeDS]] &lt;br /&gt;
| 4.0&lt;br /&gt;
| Apr 25, 2010&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://www.portabledev.com/pages/ds/jeuxdev.-perso/ameds.php]&lt;br /&gt;
|-&lt;br /&gt;
| [[CrocoDS|CrocoDS]]&lt;br /&gt;
| 2.0&lt;br /&gt;
| Nov 9, 2007&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://deadketchup.kyuran.be/tag/cpc/]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Nintendo Wii ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[Wiituka|Wiituka]]&lt;br /&gt;
| 0.98.8&lt;br /&gt;
| May 15, 2009&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://wiituka.dantoine.org/]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Mobile phones / PDAs  =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Actual version&lt;br /&gt;
! Last release&lt;br /&gt;
! Emulated systems&lt;br /&gt;
! License&lt;br /&gt;
! Link&lt;br /&gt;
|-&lt;br /&gt;
| [[CoPaCabana|CoPaCabana (PalmOS)]]&lt;br /&gt;
| 0.75&lt;br /&gt;
| Dec 4, 2007&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://copacabana.emuunlim.com/]&lt;br /&gt;
|-&lt;br /&gt;
| [[S60-CPC|S60-CPC (Symbian)]]&lt;br /&gt;
| 0.74&lt;br /&gt;
| Feb 21, 2006&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Open source&lt;br /&gt;
| [http://kokak.free.fr/s60cpc.htm]&lt;br /&gt;
|-&lt;br /&gt;
| [[CaPriCe|PocketCaprice (Windows Mobile)]]&lt;br /&gt;
| 0.9&lt;br /&gt;
| Aug 19, 2007&lt;br /&gt;
| [[CPC old generation|CPC range]]&lt;br /&gt;
| Freeware&lt;br /&gt;
| [http://www.clickgamer.com/moreinfo.htm?pid=4079&amp;amp;section=ppc]&lt;br /&gt;
|}&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;
= 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| ]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=File:Phreaks.dsk&amp;diff=64263</id>
		<title>File:Phreaks.dsk</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=File:Phreaks.dsk&amp;diff=64263"/>
				<updated>2010-12-16T19:39:27Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Siggi&amp;diff=57671</id>
		<title>Siggi</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Siggi&amp;diff=57671"/>
				<updated>2010-09-09T10:29:01Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* Web links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:siggi.jpg|thumb|Uncle Siggi]]&lt;br /&gt;
&lt;br /&gt;
'''Siggi''' (or Uncle Siggi) is a graphic artist and a coder of the german CPC scene.&lt;br /&gt;
&lt;br /&gt;
== Productions ==&lt;br /&gt;
&lt;br /&gt;
* please have a look in the [[Bollaware]] article for the complete list&lt;br /&gt;
&lt;br /&gt;
== Groups ==&lt;br /&gt;
&lt;br /&gt;
* [[Bollaware]]&lt;br /&gt;
&lt;br /&gt;
== Web links ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.bollaware.de Bollaware homepage]&lt;br /&gt;
&lt;br /&gt;
[[Category:Active CPC Game Developers]][[Category:CPC scene members]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Amstrad/Schneider_DMP2000_Printer&amp;diff=54148</id>
		<title>Amstrad/Schneider DMP2000 Printer</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Amstrad/Schneider_DMP2000_Printer&amp;diff=54148"/>
				<updated>2010-08-27T18:15:58Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Amstrad's second printer, the successor to the [[Amstrad DMP1 printer|DMP1]] printer.&lt;br /&gt;
&lt;br /&gt;
== Technical specs ==&lt;br /&gt;
&lt;br /&gt;
== The built-in font ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;DMP 2000 Font&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Image:Dmp2000font.png|The font with position markers&lt;br /&gt;
Image:Dmp2000font2.png|The pure font&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
== Pictures ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;DMP 2000&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Image:Dmp2000 1.jpg|The beast&lt;br /&gt;
Image:Dmp2000 - 6128.jpg|DMP2000 in natural surroundings&lt;br /&gt;
Image:Dmp2000 service manual.jpg|The service manual&lt;br /&gt;
Image:Ribbon.jpg|The ribbon that was never enough&lt;br /&gt;
Image:Amstrad Computer User8510 007.jpg|DMP-2000 Launch (ACU, October 1985)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Riteman Plus ==&lt;br /&gt;
&lt;br /&gt;
There are (at least some) relations to Riteman+ plus printers:&lt;br /&gt;
* The DMP2000 accepts Riteman ribbon cassettes&lt;br /&gt;
* The shape of the case of DMP2xxx/DMP3xxxx series does resemble the Riteman models (although it isn't identical; the front of the Ritemans has a short horizontal edge, then followed by what looks like as a steeper diagonal edge - look at the photos to see for yourself)&lt;br /&gt;
* Unknown if the Riteman's internal PCB, mechanics, and Firmware do have relations to Amstrad models.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;Riteman C+/F+ from C.Itoh Electronics Corp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Image:Riteman 1.gif|Riteman C+ for Commodore&lt;br /&gt;
Image:Riteman 2.jpg|Riteman F+ (front)&lt;br /&gt;
Image:Riteman 3 back.jpg|Riteman F+ (back)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Add-ons ==&lt;br /&gt;
&lt;br /&gt;
* The [[Dart Scanner for DMP-Printers]] from [[Dart Electronics]] is a add-on for DMP2000/3000 printers, the scanner optics are attached to the printer head.&lt;br /&gt;
* The [[DMP2000/3000 Buffer Upgrade Kit]] from [[Goldmark Systems]] is a RAM expansion for DMP2000/DMP3000 printers.&lt;br /&gt;
&lt;br /&gt;
== Manuals ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:Amstrad DMP2000 User Manual (English).pdf|DMP2000 User Manual (English)]] (1985) (pdf)&lt;br /&gt;
* [[Amstrad DMP2000 User Manual (English)|DMP2000 User Manual (English)]] (1985) (jpg's in a wiki gallery)&lt;br /&gt;
* [[Media:DMP2000 User Manual (French).pdf|DMP2000 User Manual (French)]]&lt;br /&gt;
* [http://www.cpcwiki.eu/manuals/Amstrad%20DMP%202000%20Manual.es.rar DMP2000 User Manual (Spanish)]&lt;br /&gt;
* [[Media:DMP2000, DMP3000, DMP4000 - Printer Service Manual.pdf|DMP2000/DMP3000/DMP4000 Service Manual (English)]]&lt;br /&gt;
* [[Media:Schneider DMP2000 Service Manual (German and English).pdf|DMP2000 Service Manual (German and English)]]&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:DMP2K_SP.ZIP|DMP2000 Rom dump (Spanish)]] (zipped rom file) (dumped from a spanish printer, but should be same for all countries)&lt;br /&gt;
&lt;br /&gt;
== Reviews ==&lt;br /&gt;
&lt;br /&gt;
* DMP2000 review in [[Amstrad Computer User]] (November 1985, page 41)&lt;br /&gt;
&lt;br /&gt;
[[Category:Peripherals]] [[Category:Printers and printer ports]] [[Category:Manual]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=File:Dmp2000font2.png&amp;diff=54147</id>
		<title>File:Dmp2000font2.png</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=File:Dmp2000font2.png&amp;diff=54147"/>
				<updated>2010-08-27T18:13:38Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=File:Dmp2000font.png&amp;diff=54146</id>
		<title>File:Dmp2000font.png</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=File:Dmp2000font.png&amp;diff=54146"/>
				<updated>2010-08-27T18:13:20Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=48303</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=48303"/>
				<updated>2010-07-13T06:32:41Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* CPC related news */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;seo title=&amp;quot; - the ultimate knowledge base for Amstrad and Schneider 8-bit CPC computers.&amp;quot; metakeywords=&amp;quot;cpcwiki,cpc-wiki,Amstrad,Amstrad CPC,Schneider CPC,cpc464,cpc664,cpc6128,cpc472,cpc,8-bit,retro&amp;quot; metadescription=&amp;quot;CPCWiki is a collaborative encyclopaedia for the Amstrad CPC range of 8-bit computers, containing over 2500 articles.&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
== Welcome to the Amstrad CPC Wiki!  ==&lt;br /&gt;
This site hopes to evolve into an encyclopaedia on all things [[Amstrad|Amstrad]] [[CPC|CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' around the CPC available.&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(223, 223, 223); padding: 5px 0px 4px; margin-top: 32px; background-color: rgb(238, 238, 238); text-align: center;&amp;quot;&amp;gt;&amp;lt;center&amp;gt;'''[[Special:Random|Random Page]] | [[#Become an Author!|Contribute]] | [[Help:Editing|Editing help]] | [http://www.cpcwiki.eu/forum Forum]'''&amp;lt;/center&amp;gt; &amp;lt;br&amp;gt;[[CPCWiki:Portal|CPCWiki Portal]] · [http://www.cpcwiki.eu/forum Forum] · [[Photo Gallery]] · [[About|About]] · [[Special:Statistics|Statistics]] · [[CPCWiki:General disclaimer|Disclaimer]]&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[http://www.cpcwiki.eu/index.php/ACU_Type_Ins http://www.cpcwiki.eu/imgs/thumb/3/39/Typeins.jpg/700px-Typeins.jpg]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; | &amp;lt;div style=&amp;quot;border: 1px solid rgb(255, 201, 201); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 243, 243);&amp;quot;&amp;gt;&lt;br /&gt;
=== CPC related news  ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Ilogical.png|thumb|right|150px|Ilogical]] [[Image:Cpc.PNG|thumb|right|150px|C.P.C.]]&lt;br /&gt;
&lt;br /&gt;
*23/06/10: New [http://simonowen.com/samdisk/ SAMDisk] version released! Also, don't forget DevilMarkus' [http://cpc-live.com/data/download.php?type=-tool&amp;amp;fichier=DiskUtil_1_2.zip CPCXfs &amp;amp; SAMDisk GUI]!!&lt;br /&gt;
*20/06/10: [http://www.julien-nevo.com/arkos/tools.html Arkos Tracker v1.0 Beta 3] released!&lt;br /&gt;
*11/05/10: [http://www.portabledev.com/pages/ds/jeuxdev.-perso/ameds.php AmeDS], a DS CPC emulator has been released!&lt;br /&gt;
*26/04/10: [http://www.amstradcpc.info/ Amstrad Expo 2010] will take place in Coutances (France) from 25th to 27th June. &lt;br /&gt;
*20/04/10: [http://www.cpcalive.com/cpcalive_en.htm CPCAlive] 1.9 released with new screen modes.&lt;br /&gt;
*24/03/10: Program in C on a CPC: [http://cpcwiki.eu/forum/index.php/topic,639.0/ PhrozenC] is out!!!&lt;br /&gt;
*17/03/10: New [[CPCGamesCD-CPCLoader]] version released!&lt;br /&gt;
*25/02/10: [http://cpcwiki.eu/forum/index.php/topic,585.0.html Dead On Time], a new game by Axelay!&lt;br /&gt;
*31/01/10: Flynn, of WinCPC's fame, released [http://www.wincpc.ch/index.php?topic=projects-maccpc MacCPC]!!&lt;br /&gt;
*27/01/10: New Plus demo [[Blob_Demo|released]] by ''' redbox'''!&lt;br /&gt;
*24/12/09: [[Rick_dangerous_128%2B]] released on schedule - get playing!!!&lt;br /&gt;
*23/12/09: New X-Max demo [[XMas-tro 2009]]&lt;br /&gt;
*23/12/09: New game [[3D-Maze]] released!&lt;br /&gt;
*14/10/09: Another game by the [[The Mojon Twins]] : [[Platform Medley Block 1|Platform Medley Block #1]]&lt;br /&gt;
*10/10/09: New puzzle game [http://amstrad.es/juegosamstrad/decargajuegos/ilogicall.php Ilogicall] released!&lt;br /&gt;
*07/09/09: [[Protext]] goes [http://www.linuxlore.co.uk/09/09/07/protext-now-free FREE!]&lt;br /&gt;
*27/08/09: [[Robotron_6128|Robotron 6128]], by Lachlan Keown, released!&lt;br /&gt;
*04/08/09: [[From Scratch]] from [[Vanity]] is available on [http://pouet.net/prod.php?which=53596 pouet.net]&lt;br /&gt;
*28/07/09: [[Arome Tomate]] is available on [http://pouet.net/prod.php?which=53561 pouet.net]&lt;br /&gt;
*27/07/09: Sudoku Master is available on [http://binarysciences.com/ Binary Sciences]&lt;br /&gt;
*27/07/09: Cosmic Prison Commando [http://carnivacgames.blogspot.com/09/07/cpc-demo-11-topic.html demo] 1.1 released! A great CPC-looking game for the PC :)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-bottom: rgb(234,220,197) 1px solid; border-left: rgb(234,220,197) 1px solid; padding-bottom: 0.5em; background-color: rgb(204,255,204); margin: 0px 0px 5px; padding-left: 1em; padding-right: 1em; border-top: rgb(234,220,197) 1px solid; border-right: rgb(234,220,197) 1px solid; padding-top: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CPCWiki updates  ===&lt;br /&gt;
&lt;br /&gt;
*22/09/2009: The CPCWIKI moves to new domain [http://cpcwiki.eu CPCWIKI.EU]&lt;br /&gt;
*14/08/2009: The CPCWIKI moves (temporarily) to new domain [http://cpc-wiki.com CPC-WIKI.COM]&lt;br /&gt;
*22/07/09: Wiki &amp;amp; Forum moved to a new server&lt;br /&gt;
*14/07/09: Forum updated to 2.0RC1-1, Wiki updated to 1.15.1!&lt;br /&gt;
*Add the CPCWiki to '''your Homepage'''. Check out [[About#Wiki-Napping|About#Wiki-Napping]] and start napping this Wiki.&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Become an Author!  ===&lt;br /&gt;
&lt;br /&gt;
We are searching for authors of the following articles: &lt;br /&gt;
&lt;br /&gt;
* [[PDW|PDW]] (unknown what this article shall be about...) (Note: PDW is believed to be German group of programmers who wrote CPC Demos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;createbox&amp;gt;&lt;br /&gt;
default=Enter name of article to create&lt;br /&gt;
buttonlabel=Create article!&lt;br /&gt;
width=40&lt;br /&gt;
&amp;lt;/createbox&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Top 5 Contributors from the last 60 days:&lt;br /&gt;
{{Special:ContributionScores/5/60/notools}} &lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: right;&amp;quot;&amp;gt;&amp;lt;small&amp;gt;'''All [[Special:Wantedpages|wanted articles]]''' &amp;amp;#124; [[:Category:Stub|Extendable Stubs]]&amp;lt;br&amp;gt;'''[[Special:ContributionScores|List of most active contributors]]'''&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align: top;&amp;quot; | &amp;lt;div style=&amp;quot;border: 1px solid rgb(228, 222, 222); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(249, 249, 249);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Did you know?  ===&lt;br /&gt;
&lt;br /&gt;
*When the 664 was being developed, Sugar was already looking (and hinting publicly!) at the 6128 &lt;br /&gt;
*The [[472|CPC 472]] was a model released in Spain with an extra unaccessible 8 KB of RAM to circumvent a spanish tax that was charged on imported machines with up to 64 KB memory.&lt;br /&gt;
*With a possible total amount of '''832 x 288 pixel''' (576 interlaced) the [[CPC|CPC]] was the 8 bit homecomputer with the highest screen resolution ever. &lt;br /&gt;
*'''OpenOffice''' for Windows/Linux is a direct descendant of [[Star-Division|StarWriter]] for the CPC. &lt;br /&gt;
*The transfer speed of the [[CPC Booster|CPC Booster +]] serial interface is faster than a standard '''DSL connection'''. &lt;br /&gt;
*[[SymbOS|SymbOS]] can handle more than '''50 times''' bigger hard discs than MS Windows 95A. &lt;br /&gt;
*[[FutureOS|FutureOS]] can load 178 KB in '''9 seconds''' from floppy disc and manages up to 4 MB of RAM&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0pt 0pt 5px; padding: 0.5em 1em; background-color: rgb(204, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Donors  ===&lt;br /&gt;
&lt;br /&gt;
These people were kind enough to donate. All contributions went '''directly''' to our previous host, not our own pockets! Currently there is no need to donate. Please consider helping the CPC-Wiki in other ways, donating your time instead. Thanks!&lt;br /&gt;
&lt;br /&gt;
'''2009:''' Prodatron (€1000)&amp;lt;br&amp;gt;Nurgle (€30)&amp;lt;br&amp;gt;Serge Querné (€30)&amp;lt;br&amp;gt;Roald Strauss (€50)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Donators from earlier years'''&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Bert Post Uiterweer, [[Rex|Rex]] of [[BENG!|BENG!]], [[Robcfg|Robcfg]], [[Prodatron|Prodatron]], [[User:Gryzor|Gryzor]], [[User:Ervin|Ervin]]&lt;br /&gt;
&lt;br /&gt;
Thanks so much guys!&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 204, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Where are CPC users from?  ===&lt;br /&gt;
&lt;br /&gt;
http://www4.clustrmaps.com/stats/maps-no_clusters/www.cpcwiki.com-thumb.jpg&amp;lt;br&amp;gt;(or click [http://www4.clustrmaps.com/user/7804b163 here] for the big map!) &lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(204, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What is the Amstrad CPC about?  ===&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{{#ev:youtube|2zn3UavCpiQ|300}} &lt;br /&gt;
&amp;lt;/center&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=48302</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=48302"/>
				<updated>2010-07-13T06:31:59Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* CPC related news */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
&amp;lt;seo title=&amp;quot; - the ultimate knowledge base for Amstrad and Schneider 8-bit CPC computers.&amp;quot; metakeywords=&amp;quot;cpcwiki,cpc-wiki,Amstrad,Amstrad CPC,Schneider CPC,cpc464,cpc664,cpc6128,cpc472,cpc,8-bit,retro&amp;quot; metadescription=&amp;quot;CPCWiki is a collaborative encyclopaedia for the Amstrad CPC range of 8-bit computers, containing over 2500 articles.&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
== Welcome to the Amstrad CPC Wiki!  ==&lt;br /&gt;
This site hopes to evolve into an encyclopaedia on all things [[Amstrad|Amstrad]] [[CPC|CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' around the CPC available.&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(223, 223, 223); padding: 5px 0px 4px; margin-top: 32px; background-color: rgb(238, 238, 238); text-align: center;&amp;quot;&amp;gt;&amp;lt;center&amp;gt;'''[[Special:Random|Random Page]] | [[#Become an Author!|Contribute]] | [[Help:Editing|Editing help]] | [http://www.cpcwiki.eu/forum Forum]'''&amp;lt;/center&amp;gt; &amp;lt;br&amp;gt;[[CPCWiki:Portal|CPCWiki Portal]] · [http://www.cpcwiki.eu/forum Forum] · [[Photo Gallery]] · [[About|About]] · [[Special:Statistics|Statistics]] · [[CPCWiki:General disclaimer|Disclaimer]]&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[http://www.cpcwiki.eu/index.php/ACU_Type_Ins http://www.cpcwiki.eu/imgs/thumb/3/39/Typeins.jpg/700px-Typeins.jpg]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;vertical-align: top;&amp;quot; | &amp;lt;div style=&amp;quot;border: 1px solid rgb(255, 201, 201); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 243, 243);&amp;quot;&amp;gt;&lt;br /&gt;
=== CPC related news  ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Ilogical.png|thumb|right|150px|Ilogical]] [[Image:Cpc.PNG|thumb|right|150px|C.P.C.]]&lt;br /&gt;
&lt;br /&gt;
*23/06/10: New [http://simonowen.com/samdisk/ SAMDisk] version released! Also, don't forget DevilMarkus' [http://cpc-live.com/data/download.php?type=-tool&amp;amp;fichier=DiskUtil_1_2.zip CPCXfs GUI]!!&lt;br /&gt;
*20/06/10: [http://www.julien-nevo.com/arkos/tools.html Arkos Tracker v1.0 Beta 3] released!&lt;br /&gt;
*11/05/10: [http://www.portabledev.com/pages/ds/jeuxdev.-perso/ameds.php AmeDS], a DS CPC emulator has been released!&lt;br /&gt;
*26/04/10: [http://www.amstradcpc.info/ Amstrad Expo 2010] will take place in Coutances (France) from 25th to 27th June. &lt;br /&gt;
*20/04/10: [http://www.cpcalive.com/cpcalive_en.htm CPCAlive] 1.9 released with new screen modes.&lt;br /&gt;
*24/03/10: Program in C on a CPC: [http://cpcwiki.eu/forum/index.php/topic,639.0/ PhrozenC] is out!!!&lt;br /&gt;
*17/03/10: New [[CPCGamesCD-CPCLoader]] version released!&lt;br /&gt;
*25/02/10: [http://cpcwiki.eu/forum/index.php/topic,585.0.html Dead On Time], a new game by Axelay!&lt;br /&gt;
*31/01/10: Flynn, of WinCPC's fame, released [http://www.wincpc.ch/index.php?topic=projects-maccpc MacCPC]!!&lt;br /&gt;
*27/01/10: New Plus demo [[Blob_Demo|released]] by ''' redbox'''!&lt;br /&gt;
*24/12/09: [[Rick_dangerous_128%2B]] released on schedule - get playing!!!&lt;br /&gt;
*23/12/09: New X-Max demo [[XMas-tro 2009]]&lt;br /&gt;
*23/12/09: New game [[3D-Maze]] released!&lt;br /&gt;
*14/10/09: Another game by the [[The Mojon Twins]] : [[Platform Medley Block 1|Platform Medley Block #1]]&lt;br /&gt;
*10/10/09: New puzzle game [http://amstrad.es/juegosamstrad/decargajuegos/ilogicall.php Ilogicall] released!&lt;br /&gt;
*07/09/09: [[Protext]] goes [http://www.linuxlore.co.uk/09/09/07/protext-now-free FREE!]&lt;br /&gt;
*27/08/09: [[Robotron_6128|Robotron 6128]], by Lachlan Keown, released!&lt;br /&gt;
*04/08/09: [[From Scratch]] from [[Vanity]] is available on [http://pouet.net/prod.php?which=53596 pouet.net]&lt;br /&gt;
*28/07/09: [[Arome Tomate]] is available on [http://pouet.net/prod.php?which=53561 pouet.net]&lt;br /&gt;
*27/07/09: Sudoku Master is available on [http://binarysciences.com/ Binary Sciences]&lt;br /&gt;
*27/07/09: Cosmic Prison Commando [http://carnivacgames.blogspot.com/09/07/cpc-demo-11-topic.html demo] 1.1 released! A great CPC-looking game for the PC :)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-bottom: rgb(234,220,197) 1px solid; border-left: rgb(234,220,197) 1px solid; padding-bottom: 0.5em; background-color: rgb(204,255,204); margin: 0px 0px 5px; padding-left: 1em; padding-right: 1em; border-top: rgb(234,220,197) 1px solid; border-right: rgb(234,220,197) 1px solid; padding-top: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CPCWiki updates  ===&lt;br /&gt;
&lt;br /&gt;
*22/09/2009: The CPCWIKI moves to new domain [http://cpcwiki.eu CPCWIKI.EU]&lt;br /&gt;
*14/08/2009: The CPCWIKI moves (temporarily) to new domain [http://cpc-wiki.com CPC-WIKI.COM]&lt;br /&gt;
*22/07/09: Wiki &amp;amp; Forum moved to a new server&lt;br /&gt;
*14/07/09: Forum updated to 2.0RC1-1, Wiki updated to 1.15.1!&lt;br /&gt;
*Add the CPCWiki to '''your Homepage'''. Check out [[About#Wiki-Napping|About#Wiki-Napping]] and start napping this Wiki.&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Become an Author!  ===&lt;br /&gt;
&lt;br /&gt;
We are searching for authors of the following articles: &lt;br /&gt;
&lt;br /&gt;
* [[PDW|PDW]] (unknown what this article shall be about...) (Note: PDW is believed to be German group of programmers who wrote CPC Demos)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;createbox&amp;gt;&lt;br /&gt;
default=Enter name of article to create&lt;br /&gt;
buttonlabel=Create article!&lt;br /&gt;
width=40&lt;br /&gt;
&amp;lt;/createbox&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Top 5 Contributors from the last 60 days:&lt;br /&gt;
{{Special:ContributionScores/5/60/notools}} &lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: right;&amp;quot;&amp;gt;&amp;lt;small&amp;gt;'''All [[Special:Wantedpages|wanted articles]]''' &amp;amp;#124; [[:Category:Stub|Extendable Stubs]]&amp;lt;br&amp;gt;'''[[Special:ContributionScores|List of most active contributors]]'''&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
| width=&amp;quot;50%&amp;quot; style=&amp;quot;vertical-align: top;&amp;quot; | &amp;lt;div style=&amp;quot;border: 1px solid rgb(228, 222, 222); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(249, 249, 249);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Did you know?  ===&lt;br /&gt;
&lt;br /&gt;
*When the 664 was being developed, Sugar was already looking (and hinting publicly!) at the 6128 &lt;br /&gt;
*The [[472|CPC 472]] was a model released in Spain with an extra unaccessible 8 KB of RAM to circumvent a spanish tax that was charged on imported machines with up to 64 KB memory.&lt;br /&gt;
*With a possible total amount of '''832 x 288 pixel''' (576 interlaced) the [[CPC|CPC]] was the 8 bit homecomputer with the highest screen resolution ever. &lt;br /&gt;
*'''OpenOffice''' for Windows/Linux is a direct descendant of [[Star-Division|StarWriter]] for the CPC. &lt;br /&gt;
*The transfer speed of the [[CPC Booster|CPC Booster +]] serial interface is faster than a standard '''DSL connection'''. &lt;br /&gt;
*[[SymbOS|SymbOS]] can handle more than '''50 times''' bigger hard discs than MS Windows 95A. &lt;br /&gt;
*[[FutureOS|FutureOS]] can load 178 KB in '''9 seconds''' from floppy disc and manages up to 4 MB of RAM&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0pt 0pt 5px; padding: 0.5em 1em; background-color: rgb(204, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Donors  ===&lt;br /&gt;
&lt;br /&gt;
These people were kind enough to donate. All contributions went '''directly''' to our previous host, not our own pockets! Currently there is no need to donate. Please consider helping the CPC-Wiki in other ways, donating your time instead. Thanks!&lt;br /&gt;
&lt;br /&gt;
'''2009:''' Prodatron (€1000)&amp;lt;br&amp;gt;Nurgle (€30)&amp;lt;br&amp;gt;Serge Querné (€30)&amp;lt;br&amp;gt;Roald Strauss (€50)&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Donators from earlier years'''&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Bert Post Uiterweer, [[Rex|Rex]] of [[BENG!|BENG!]], [[Robcfg|Robcfg]], [[Prodatron|Prodatron]], [[User:Gryzor|Gryzor]], [[User:Ervin|Ervin]]&lt;br /&gt;
&lt;br /&gt;
Thanks so much guys!&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(255, 204, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Where are CPC users from?  ===&lt;br /&gt;
&lt;br /&gt;
http://www4.clustrmaps.com/stats/maps-no_clusters/www.cpcwiki.com-thumb.jpg&amp;lt;br&amp;gt;(or click [http://www4.clustrmaps.com/user/7804b163 here] for the big map!) &lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;border: 1px solid rgb(234, 220, 197); margin: 0px 0px 5px; padding: 0.5em 1em; background-color: rgb(204, 255, 204);&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What is the Amstrad CPC about?  ===&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{{#ev:youtube|2zn3UavCpiQ|300}} &lt;br /&gt;
&amp;lt;/center&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=MediaWiki:Sidebar&amp;diff=45995</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=MediaWiki:Sidebar&amp;diff=45995"/>
				<updated>2010-05-10T10:05:16Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*SEARCH&lt;br /&gt;
**Special:Random|Random page&lt;br /&gt;
&lt;br /&gt;
*Contents&lt;br /&gt;
**mainpage|mainpage&lt;br /&gt;
**recentchanges-url|recentchanges&lt;br /&gt;
**CPCWiki:Portal|CPCWiki portal&lt;br /&gt;
**Special:Categories|Content Categories&lt;br /&gt;
&lt;br /&gt;
*Hardware&lt;br /&gt;
**CPC|In short&lt;br /&gt;
**CPC_old_generation|CPC 464/664/6128&lt;br /&gt;
**Plus|CPC+/GX4000&lt;br /&gt;
**Peripherals|Peripherals&lt;br /&gt;
**DIY|DIY &amp;amp; Repair&lt;br /&gt;
**Photo Gallery|Gallery&lt;br /&gt;
&lt;br /&gt;
*Software&lt;br /&gt;
**games|The Games&lt;br /&gt;
**Applications|Serious software&lt;br /&gt;
**programming|Programming&lt;br /&gt;
&lt;br /&gt;
*Literature&lt;br /&gt;
** Books|Books&lt;br /&gt;
** Fanzines|Fanzines&lt;br /&gt;
** Magazines|Magazines&lt;br /&gt;
** Schematics|Schematics&lt;br /&gt;
** Service Manuals|Service Manuals&lt;br /&gt;
** Technical documentation|Technical docs&lt;br /&gt;
&lt;br /&gt;
*The Present&lt;br /&gt;
**News_and_Projects|News/Projects&lt;br /&gt;
**emulators|Emulators&lt;br /&gt;
**links|Links&lt;br /&gt;
&lt;br /&gt;
*The Scene&lt;br /&gt;
**Demogroups|Groups/Members&lt;br /&gt;
**CPC_parties|Parties/Events&lt;br /&gt;
&lt;br /&gt;
*Wiki-related&lt;br /&gt;
**Special:Upload|Upload&lt;br /&gt;
**Special:SpecialPages|Special Pages&lt;br /&gt;
**about|About - Contribute&lt;br /&gt;
**loose_lemas|Create Page&lt;br /&gt;
**http://www.cpcwiki.eu/index.php?title=Help:Editing |Editing Help&lt;br /&gt;
**http://www.cpcwiki.eu/forum |Discussion forum&lt;br /&gt;
**http://people.cpcwiki.eu/ |CPC Network&lt;br /&gt;
**http://blog.cpcwiki.eu|Wiki-Blog&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=MediaWiki:Sidebar&amp;diff=45994</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=MediaWiki:Sidebar&amp;diff=45994"/>
				<updated>2010-05-10T10:05:04Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*SEARCH&lt;br /&gt;
**Special:Random page|Random&lt;br /&gt;
&lt;br /&gt;
*Contents&lt;br /&gt;
**mainpage|mainpage&lt;br /&gt;
**recentchanges-url|recentchanges&lt;br /&gt;
**CPCWiki:Portal|CPCWiki portal&lt;br /&gt;
**Special:Categories|Content Categories&lt;br /&gt;
&lt;br /&gt;
*Hardware&lt;br /&gt;
**CPC|In short&lt;br /&gt;
**CPC_old_generation|CPC 464/664/6128&lt;br /&gt;
**Plus|CPC+/GX4000&lt;br /&gt;
**Peripherals|Peripherals&lt;br /&gt;
**DIY|DIY &amp;amp; Repair&lt;br /&gt;
**Photo Gallery|Gallery&lt;br /&gt;
&lt;br /&gt;
*Software&lt;br /&gt;
**games|The Games&lt;br /&gt;
**Applications|Serious software&lt;br /&gt;
**programming|Programming&lt;br /&gt;
&lt;br /&gt;
*Literature&lt;br /&gt;
** Books|Books&lt;br /&gt;
** Fanzines|Fanzines&lt;br /&gt;
** Magazines|Magazines&lt;br /&gt;
** Schematics|Schematics&lt;br /&gt;
** Service Manuals|Service Manuals&lt;br /&gt;
** Technical documentation|Technical docs&lt;br /&gt;
&lt;br /&gt;
*The Present&lt;br /&gt;
**News_and_Projects|News/Projects&lt;br /&gt;
**emulators|Emulators&lt;br /&gt;
**links|Links&lt;br /&gt;
&lt;br /&gt;
*The Scene&lt;br /&gt;
**Demogroups|Groups/Members&lt;br /&gt;
**CPC_parties|Parties/Events&lt;br /&gt;
&lt;br /&gt;
*Wiki-related&lt;br /&gt;
**Special:Upload|Upload&lt;br /&gt;
**Special:SpecialPages|Special Pages&lt;br /&gt;
**about|About - Contribute&lt;br /&gt;
**loose_lemas|Create Page&lt;br /&gt;
**http://www.cpcwiki.eu/index.php?title=Help:Editing |Editing Help&lt;br /&gt;
**http://www.cpcwiki.eu/forum |Discussion forum&lt;br /&gt;
**http://people.cpcwiki.eu/ |CPC Network&lt;br /&gt;
**http://blog.cpcwiki.eu|Wiki-Blog&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=MediaWiki:Sidebar&amp;diff=45993</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=MediaWiki:Sidebar&amp;diff=45993"/>
				<updated>2010-05-10T10:04:40Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*SEARCH&lt;br /&gt;
**Special:Random page|Random Page&lt;br /&gt;
&lt;br /&gt;
*Contents&lt;br /&gt;
**mainpage|mainpage&lt;br /&gt;
**recentchanges-url|recentchanges&lt;br /&gt;
**CPCWiki:Portal|CPCWiki portal&lt;br /&gt;
**Special:Categories|Content Categories&lt;br /&gt;
&lt;br /&gt;
*Hardware&lt;br /&gt;
**CPC|In short&lt;br /&gt;
**CPC_old_generation|CPC 464/664/6128&lt;br /&gt;
**Plus|CPC+/GX4000&lt;br /&gt;
**Peripherals|Peripherals&lt;br /&gt;
**DIY|DIY &amp;amp; Repair&lt;br /&gt;
**Photo Gallery|Gallery&lt;br /&gt;
&lt;br /&gt;
*Software&lt;br /&gt;
**games|The Games&lt;br /&gt;
**Applications|Serious software&lt;br /&gt;
**programming|Programming&lt;br /&gt;
&lt;br /&gt;
*Literature&lt;br /&gt;
** Books|Books&lt;br /&gt;
** Fanzines|Fanzines&lt;br /&gt;
** Magazines|Magazines&lt;br /&gt;
** Schematics|Schematics&lt;br /&gt;
** Service Manuals|Service Manuals&lt;br /&gt;
** Technical documentation|Technical docs&lt;br /&gt;
&lt;br /&gt;
*The Present&lt;br /&gt;
**News_and_Projects|News/Projects&lt;br /&gt;
**emulators|Emulators&lt;br /&gt;
**links|Links&lt;br /&gt;
&lt;br /&gt;
*The Scene&lt;br /&gt;
**Demogroups|Groups/Members&lt;br /&gt;
**CPC_parties|Parties/Events&lt;br /&gt;
&lt;br /&gt;
*Wiki-related&lt;br /&gt;
**Special:Upload|Upload&lt;br /&gt;
**Special:SpecialPages|Special Pages&lt;br /&gt;
**about|About - Contribute&lt;br /&gt;
**loose_lemas|Create Page&lt;br /&gt;
**http://www.cpcwiki.eu/index.php?title=Help:Editing |Editing Help&lt;br /&gt;
**http://www.cpcwiki.eu/forum |Discussion forum&lt;br /&gt;
**http://people.cpcwiki.eu/ |CPC Network&lt;br /&gt;
**http://blog.cpcwiki.eu|Wiki-Blog&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Mainboard_Versions&amp;diff=45387</id>
		<title>Mainboard Versions</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Mainboard_Versions&amp;diff=45387"/>
				<updated>2010-04-30T09:29:23Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* CPC464 version 3 (medium-sized) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CPC464 version 1 (original) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
* Big mainboard, old Gate Array with cooling plate and with VCC2; supplied from VCC via two 12 ohm resistors, R138 and R139, which are seen (with white coating) near the cooling plate.&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70100 Tomdalby.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70100, without any &amp;quot;MCnnnn&amp;quot; code, Copyright 1983'''&lt;br /&gt;
* Original version. Real wires going to keyboard.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70100 MC0001A RobertoCarlos.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70100, MC0001A, Copyright 1983'''&lt;br /&gt;
* Keyboard connector now has two rows of soldering points; probably intended to support two different connectors: The old PCB keyboard with wires, and the new CPC664-style 19pin single-foil &amp;quot;membrane&amp;quot; keyboard.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 270100 Grimware_crop.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO 270100, MC0001A, Copyrigh 1983'''&lt;br /&gt;
* Same as &amp;quot;Z70100 MC0001A&amp;quot;, but with uncommon text layer: labeled &amp;quot;270100&amp;quot; (not &amp;quot;Z70100&amp;quot;), says &amp;quot;Copyrigh&amp;quot; (not &amp;quot;Copyright&amp;quot;), and, unlike all other boards, its text has slashed zeroes.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:GA motherboard.JPG|200px|left]]&lt;br /&gt;
* '''Board: Prototype with Gate Array Simulator''' ([[CPC Prototypes|more pictures]])&lt;br /&gt;
* The Gate Array Simulator board (mounted on top of the mainboard, and almost having the same size as the mainboard) contains four 8K EPROMs, and a Gate Array prototype made of several logic chips. In later versions these evolved into a normal 28pin 32K ROM chip, and the custom 40pin Gate Array chip.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC464 version 2 (new gate array) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 405x152 mm'''&lt;br /&gt;
* Separate soldering points for old and new Gate Array (with changed pin-outs).&lt;br /&gt;
* New connector for new 6128-style 2x10pin dual-foil membrane keyboards (still has optional soldering points old 19pin foils).&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 464 MC0002B bilgisayarlarim.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70200, MC0002B, Copyright 1984'''&lt;br /&gt;
* The cooling plate and [[Media:Robcfg CPC464 EN 07.jpg|cooling paste]] are removed on the photo, revealing the normally hidden 40007-4 gate array chip&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Colossus CPC472 mainboard.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70200, MC0002C, Copyright 1984 with MS0043A daughterboard''' [[472|(more pictures)]]&lt;br /&gt;
* The Spanish [[472|CPC472]], with nonfunctional 8K RAM on the daughterboard&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70200 Tomdalby.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70200, MC0002D, Copyright 1984'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 french azerty Z70200 MC0008D pcb.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70200, MC0008D'''&lt;br /&gt;
* French board with shielding plates, and additional filtering loops, and french AZERTY rom.&lt;br /&gt;
* Without old 19pin keyboard connector.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC464 version 3 (medium-sized) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 240x150 mm'''&lt;br /&gt;
* Medium sized mainboard. Same components as previous version, but arranged more tightly. Joystick/stereo moved to left side. &lt;br /&gt;
* Can be optionally fitted with Amphenol connectors (instead of Edge connectors, as far as known, this option was never used for the 464). The screw-holes have contacts for optional shielding-plate (this option was used in german Schneider models).&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70374 Grimware.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70374, MC0044A'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70374 MC0044B cpcmania.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70374, MC0044B'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70375 Tomdalby.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70375, MC0044D'''&lt;br /&gt;
* Mostly same as Z70374. The 3 resistors in upper-right are arranged differently, different cassette connector installed, tinned GND fields.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 MC0046A Markus top.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70378, MC0046A'''&lt;br /&gt;
* Additional filtering loops near cassette, monitor, keyboard connectors. Used in german Schneider models.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:SpanishSchneider464 robcfg cpcmaniaco shielding.jpg|200px|left]]&lt;br /&gt;
* '''Shielding as found in german Schneider models'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC464 version 4 (cost-down) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
[[Image:CPC464 MC0099A.jpg|200px|left]]&lt;br /&gt;
* '''Board:  PT NO Z80329, MC0099A, Copyright 1988'''&lt;br /&gt;
* Tiny mainboard. Uses 100pin SMD Gate Array (combines the old Gate Array, CRTC, and some FDC/DRAM/RESET logic in one chip).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC664 ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 PCB Top.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70205, MC0005A'''&lt;br /&gt;
* 8pin FDC Data Separator&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:German Schneider CPC664 open Gryzor missing edge.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70205, MC0005B'''&lt;br /&gt;
* Another 664 version, found in german Schneider CPCs (but might be also used in other countries?)&lt;br /&gt;
* This board version typically includes a small patch: A resistor soldered between Pin9 (A0) and Pin14 (/CASADDR) of IC105. The patch is also seen [http://amstrad.cpc.free.fr/amstrad/cpc664_e.htm here]. The resistor is labeled as R160 in the schematic, but isn't labeled on the PCB, so it was apparently added after designing the PCB.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC6128 version 1 (8pin data separator, solder points for old and new gate array) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Z70210 Tomdalby.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70210, MC0009A'''&lt;br /&gt;
* Separate soldering points for old and new Gate Array (as far as known, the old Gate Array was never used in 6128 though, only in 464).&lt;br /&gt;
* 8pin FDC Data Separator.&lt;br /&gt;
* Can be fitted with Amphenol connectors (as used in german cpcs) (instead of edge connectors).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC6128 version 2 (24pin data separator, solder points for new gate array only) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 320x155 mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128_PCB_Top_(Z70290_MC0020B).jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC0020B, R1706-94HB, Copyright 1985'''&lt;br /&gt;
* Can be fitted with Amphenol connectors (done in germany) (instead Edge connectors).&lt;br /&gt;
* Uses 24pin FDC Data Separator.&lt;br /&gt;
* Here's also [[Media:CPC6128 Z70290 Yarek.jpg|another picture]].&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 MC00201 RobertoCarlos.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC0020I, 94V.0-FR-4, Copyright 1985'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NightfallcrewSchneider6128pcb.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC0023D, 94HB-R1706, Copyright 1985'''&lt;br /&gt;
* Sold in germany, with Amphenol connectors (and dummy edge-connectors which don't have any contacts, and which are covered by green solder-stop layer, seen on [[Media:NightfallcrewSchneider6128pcb bottom.jpg|bottom side]]), front of mainboard has several vias for giving better contact to shielding plate).&lt;br /&gt;
* Note: The via in the text makes it easy to misread the part number (it's Z70290, not Z70250).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC...?, 94...?'''&lt;br /&gt;
* Looks ''almost'' like the above german board, but the &amp;quot;94HB-R1706&amp;quot; is different&lt;br /&gt;
* http://www.1000bit.it/scheda.asp?id=30 (not perfect picture quality; and board numbers are hidden under shielding plate and capacitors)&lt;br /&gt;
* EDIT: There ''was'' a picture of that board - but now it's replaced by better picture, but now showing a totally different 6128 board :-/&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider6128shielding.jpg|200px|left]]&lt;br /&gt;
* '''Shielding as found in german Schneider models'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Z70290 MC0057A with cooling plate cpcmania.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC0057A, Copyright 1985'''&lt;br /&gt;
* An uncommon version. The cooling plate indicates that this CPC 6128 board was downgraded for supporting the pin-outs of the old gate array (?) Most bizarre, the /INT resistor, R144, has white coating, seen at lower-left edge of the cooling plate. On 464 boards similar coating is used on VCC2 resistors. Most likely, this board is a homebrew joke.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC6128 version 3 (cost-down) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Z80330 Yarek.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z80330, MC0100A (1988)'''&lt;br /&gt;
* Uses 100pin SMD Gate Array (combines the old Gate Array and PAL, CRTC, and some FDC/DRAM/RESET logic in one chip).&lt;br /&gt;
* Can be fitted with four 64Kx4 RAM chips (or the normal sixteen 64Kx1 RAM chips)&lt;br /&gt;
* Printer port consists of 74LS174+74LS175 (instead of 74LS273)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC 464+ ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 282x142 mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464Plus MC0122D NightfallCrew.jpg|200px|left]]&lt;br /&gt;
* '''Board: 2700-016P-3, MC0122D, Copyright 1990'''&lt;br /&gt;
* Same mainboard is used in 464+ and 664+ (though not all components installed in 464+, and with different [[LK Links]]. Uses 160pin SMD Gate Array (ASIC).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC 6128+ ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 282x142 mm'''&lt;br /&gt;
* Same mainboard is used in 464+, but with additional components installed (extra RAM chips, FDC chips, internal/external floppy connectors, and with different [[LK Links]]).&lt;br /&gt;
* Uses 160pin SMD Gate Array (ASIC).&lt;br /&gt;
&lt;br /&gt;
[[Image:Gerald CPC6128Plus 1990 2700-016P-3 MC0122C.jpg|200px|left]]&lt;br /&gt;
* '''Board: 2700-016P-3, MC0122C, Copyright 1990'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other Plus versions are  shown in the [[Service Manuals]] (Plus series, page 5 = MC0122B, and page 16 = MC0122A).&lt;br /&gt;
&lt;br /&gt;
== GX4000 ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
* Same chipset as CPC+, but lacks Keyboard, Expansion Port, Printer Port, Tape/Disc Interfaces.&lt;br /&gt;
* Additional Scart Connector and TV Modulator.&lt;br /&gt;
&lt;br /&gt;
[[File:GX4000 PCB Top.jpg|200px|left]]&lt;br /&gt;
* '''Board: 2700-017P-4, MC0123C, Copyright 1990, K1'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:GX 4000 MC0123C K4 bilgisayarlarim 736001086319 MA.jpg|200px|left]]&lt;br /&gt;
* '''Board: 2700-017P-4, MC0123C, Copyright 1990, K4'''&lt;br /&gt;
* Looks same as above (only the &amp;quot;K4&amp;quot; text near the LED changed).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Board: 27...?, MC...?, Copyright 1990''' (without TV modulator)&lt;br /&gt;
* Version without TV Modulator installed, and with IC101 replaced by 4 transistors (used in French models; where the PAL modulator would be useless).&lt;br /&gt;
* See [[Media:GX4000 12.jpg|this picture]] (might be same mainboard as above, not sure - the photo doesn't show the boards part number; hidden behind the cartridge slot, one thing that IS different is the K1 vs K3 text near the LED).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another GX4000 board (2700-017P-3, MC0123A, Copyright 1990) is shown in [[Service Manuals]] (Plus series, page 24 and page 32/france).&lt;br /&gt;
&lt;br /&gt;
== System Cartridge (BIOS of CPC+) and Game Cartridges ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 51x60 mm''' [[GX4000 cartridge|(more pictures)]]&lt;br /&gt;
&lt;br /&gt;
[[File:Inside GX4000 cart 1 unrotated.jpg|50px|left]]&lt;br /&gt;
* '''Board: PT-NO-Z90903-MC0121A'''&lt;br /&gt;
* With custom LKs, and double-sided soldering points.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Cartridge-PT-NO-Z90903-MS0201A-Installed.jpg|50px|left]]&lt;br /&gt;
* '''Board: PT-NO-Z90903-MS0201A'''&lt;br /&gt;
* With custom LKs, and single-sided soldering points.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Cartridge-2700-023P-1-Installed.jpg|50px|left]]&lt;br /&gt;
* '''Board: 2700-023P-1'''&lt;br /&gt;
* With hardwired LK1 and LK6, and single-sided soldering points.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Dragon CPC Plus System Cartridge PC Spanish.jpg|50px|left]]&lt;br /&gt;
* '''Board: Nonamed'''&lt;br /&gt;
* Spanish cartridge without text-layer on PCB (otherwise same as 2700-023P-1).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DDI-1 ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 160x65 mm'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Gerald DDI-1 MF0004B.jpg|200px|left]]&lt;br /&gt;
* '''Board: MF0004B, ISS3, (C) Amstrad 1984''' [[Amstrad Disk Drive|(more pictures)]]&lt;br /&gt;
* 20pin FDC Data Separator&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Clones ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 370x200 mm'''&lt;br /&gt;
[[Image:KC Compact PCB cropped.jpg|200px|left]]&lt;br /&gt;
* '''KC Compact''' [[KC Compact|(more pictures)]]&lt;br /&gt;
* East german CPC464 clone (CPC 464-style 64K RAM, Tape Drive, though using 6128 BIOS version)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
[[File:Deepfb-aleste-without-keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Board: PATISONIC ALESTE 520EX 01.003''' [[Aleste 520EX|(more pictures)]]&lt;br /&gt;
* Russian CPC128 clone with some additonal features (512K RAM, additional video modes, RTC, SIO, etc.)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* The last letter of the '''PT NO Znnnnn, MCnnnnX''' board numbers does not seem to indicate a revision (the boards appear to be identical regardless of that letter, as long as the other digits are same). So, the last letter may indicate the manufacturing date or manufacturing location.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Amstrad part numbers]] - Part Numbers for PCBs and Chips&lt;br /&gt;
* [[Keyboard Versions]]&lt;br /&gt;
* [[Schematics]]&lt;br /&gt;
* [[Service Manuals]] - (cost-down 6128 is in the Amendment manual)&lt;br /&gt;
&lt;br /&gt;
== Forum ==&lt;br /&gt;
&lt;br /&gt;
* http://cpcwiki.eu/forum/index.php/topic,678.0.html - CPC Mainboard Versions related&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Mainboard_Versions&amp;diff=45386</id>
		<title>Mainboard Versions</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Mainboard_Versions&amp;diff=45386"/>
				<updated>2010-04-30T09:29:05Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* CPC464 version 3 (medium-sized) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CPC464 version 1 (original) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
* Big mainboard, old Gate Array with cooling plate and with VCC2; supplied from VCC via two 12 ohm resistors, R138 and R139, which are seen (with white coating) near the cooling plate.&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70100 Tomdalby.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70100, without any &amp;quot;MCnnnn&amp;quot; code, Copyright 1983'''&lt;br /&gt;
* Original version. Real wires going to keyboard.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70100 MC0001A RobertoCarlos.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70100, MC0001A, Copyright 1983'''&lt;br /&gt;
* Keyboard connector now has two rows of soldering points; probably intended to support two different connectors: The old PCB keyboard with wires, and the new CPC664-style 19pin single-foil &amp;quot;membrane&amp;quot; keyboard.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 270100 Grimware_crop.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO 270100, MC0001A, Copyrigh 1983'''&lt;br /&gt;
* Same as &amp;quot;Z70100 MC0001A&amp;quot;, but with uncommon text layer: labeled &amp;quot;270100&amp;quot; (not &amp;quot;Z70100&amp;quot;), says &amp;quot;Copyrigh&amp;quot; (not &amp;quot;Copyright&amp;quot;), and, unlike all other boards, its text has slashed zeroes.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:GA motherboard.JPG|200px|left]]&lt;br /&gt;
* '''Board: Prototype with Gate Array Simulator''' ([[CPC Prototypes|more pictures]])&lt;br /&gt;
* The Gate Array Simulator board (mounted on top of the mainboard, and almost having the same size as the mainboard) contains four 8K EPROMs, and a Gate Array prototype made of several logic chips. In later versions these evolved into a normal 28pin 32K ROM chip, and the custom 40pin Gate Array chip.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC464 version 2 (new gate array) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 405x152 mm'''&lt;br /&gt;
* Separate soldering points for old and new Gate Array (with changed pin-outs).&lt;br /&gt;
* New connector for new 6128-style 2x10pin dual-foil membrane keyboards (still has optional soldering points old 19pin foils).&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 464 MC0002B bilgisayarlarim.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70200, MC0002B, Copyright 1984'''&lt;br /&gt;
* The cooling plate and [[Media:Robcfg CPC464 EN 07.jpg|cooling paste]] are removed on the photo, revealing the normally hidden 40007-4 gate array chip&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Colossus CPC472 mainboard.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70200, MC0002C, Copyright 1984 with MS0043A daughterboard''' [[472|(more pictures)]]&lt;br /&gt;
* The Spanish [[472|CPC472]], with nonfunctional 8K RAM on the daughterboard&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70200 Tomdalby.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70200, MC0002D, Copyright 1984'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 french azerty Z70200 MC0008D pcb.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70200, MC0008D'''&lt;br /&gt;
* French board with shielding plates, and additional filtering loops, and french AZERTY rom.&lt;br /&gt;
* Without old 19pin keyboard connector.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC464 version 3 (medium-sized) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 240x150&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
* Medium sized mainboard. Same components as previous version, but arranged more tightly. Joystick/stereo moved to left side. &lt;br /&gt;
* Can be optionally fitted with Amphenol connectors (instead of Edge connectors, as far as known, this option was never used for the 464). The screw-holes have contacts for optional shielding-plate (this option was used in german Schneider models).&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70374 Grimware.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70374, MC0044A'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70374 MC0044B cpcmania.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70374, MC0044B'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70375 Tomdalby.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70375, MC0044D'''&lt;br /&gt;
* Mostly same as Z70374. The 3 resistors in upper-right are arranged differently, different cassette connector installed, tinned GND fields.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 MC0046A Markus top.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70378, MC0046A'''&lt;br /&gt;
* Additional filtering loops near cassette, monitor, keyboard connectors. Used in german Schneider models.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:SpanishSchneider464 robcfg cpcmaniaco shielding.jpg|200px|left]]&lt;br /&gt;
* '''Shielding as found in german Schneider models'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC464 version 4 (cost-down) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
[[Image:CPC464 MC0099A.jpg|200px|left]]&lt;br /&gt;
* '''Board:  PT NO Z80329, MC0099A, Copyright 1988'''&lt;br /&gt;
* Tiny mainboard. Uses 100pin SMD Gate Array (combines the old Gate Array, CRTC, and some FDC/DRAM/RESET logic in one chip).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC664 ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 PCB Top.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70205, MC0005A'''&lt;br /&gt;
* 8pin FDC Data Separator&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:German Schneider CPC664 open Gryzor missing edge.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70205, MC0005B'''&lt;br /&gt;
* Another 664 version, found in german Schneider CPCs (but might be also used in other countries?)&lt;br /&gt;
* This board version typically includes a small patch: A resistor soldered between Pin9 (A0) and Pin14 (/CASADDR) of IC105. The patch is also seen [http://amstrad.cpc.free.fr/amstrad/cpc664_e.htm here]. The resistor is labeled as R160 in the schematic, but isn't labeled on the PCB, so it was apparently added after designing the PCB.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC6128 version 1 (8pin data separator, solder points for old and new gate array) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Z70210 Tomdalby.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70210, MC0009A'''&lt;br /&gt;
* Separate soldering points for old and new Gate Array (as far as known, the old Gate Array was never used in 6128 though, only in 464).&lt;br /&gt;
* 8pin FDC Data Separator.&lt;br /&gt;
* Can be fitted with Amphenol connectors (as used in german cpcs) (instead of edge connectors).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC6128 version 2 (24pin data separator, solder points for new gate array only) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 320x155 mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128_PCB_Top_(Z70290_MC0020B).jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC0020B, R1706-94HB, Copyright 1985'''&lt;br /&gt;
* Can be fitted with Amphenol connectors (done in germany) (instead Edge connectors).&lt;br /&gt;
* Uses 24pin FDC Data Separator.&lt;br /&gt;
* Here's also [[Media:CPC6128 Z70290 Yarek.jpg|another picture]].&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 MC00201 RobertoCarlos.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC0020I, 94V.0-FR-4, Copyright 1985'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NightfallcrewSchneider6128pcb.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC0023D, 94HB-R1706, Copyright 1985'''&lt;br /&gt;
* Sold in germany, with Amphenol connectors (and dummy edge-connectors which don't have any contacts, and which are covered by green solder-stop layer, seen on [[Media:NightfallcrewSchneider6128pcb bottom.jpg|bottom side]]), front of mainboard has several vias for giving better contact to shielding plate).&lt;br /&gt;
* Note: The via in the text makes it easy to misread the part number (it's Z70290, not Z70250).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC...?, 94...?'''&lt;br /&gt;
* Looks ''almost'' like the above german board, but the &amp;quot;94HB-R1706&amp;quot; is different&lt;br /&gt;
* http://www.1000bit.it/scheda.asp?id=30 (not perfect picture quality; and board numbers are hidden under shielding plate and capacitors)&lt;br /&gt;
* EDIT: There ''was'' a picture of that board - but now it's replaced by better picture, but now showing a totally different 6128 board :-/&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider6128shielding.jpg|200px|left]]&lt;br /&gt;
* '''Shielding as found in german Schneider models'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Z70290 MC0057A with cooling plate cpcmania.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC0057A, Copyright 1985'''&lt;br /&gt;
* An uncommon version. The cooling plate indicates that this CPC 6128 board was downgraded for supporting the pin-outs of the old gate array (?) Most bizarre, the /INT resistor, R144, has white coating, seen at lower-left edge of the cooling plate. On 464 boards similar coating is used on VCC2 resistors. Most likely, this board is a homebrew joke.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC6128 version 3 (cost-down) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Z80330 Yarek.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z80330, MC0100A (1988)'''&lt;br /&gt;
* Uses 100pin SMD Gate Array (combines the old Gate Array and PAL, CRTC, and some FDC/DRAM/RESET logic in one chip).&lt;br /&gt;
* Can be fitted with four 64Kx4 RAM chips (or the normal sixteen 64Kx1 RAM chips)&lt;br /&gt;
* Printer port consists of 74LS174+74LS175 (instead of 74LS273)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC 464+ ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 282x142 mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464Plus MC0122D NightfallCrew.jpg|200px|left]]&lt;br /&gt;
* '''Board: 2700-016P-3, MC0122D, Copyright 1990'''&lt;br /&gt;
* Same mainboard is used in 464+ and 664+ (though not all components installed in 464+, and with different [[LK Links]]. Uses 160pin SMD Gate Array (ASIC).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC 6128+ ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 282x142 mm'''&lt;br /&gt;
* Same mainboard is used in 464+, but with additional components installed (extra RAM chips, FDC chips, internal/external floppy connectors, and with different [[LK Links]]).&lt;br /&gt;
* Uses 160pin SMD Gate Array (ASIC).&lt;br /&gt;
&lt;br /&gt;
[[Image:Gerald CPC6128Plus 1990 2700-016P-3 MC0122C.jpg|200px|left]]&lt;br /&gt;
* '''Board: 2700-016P-3, MC0122C, Copyright 1990'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other Plus versions are  shown in the [[Service Manuals]] (Plus series, page 5 = MC0122B, and page 16 = MC0122A).&lt;br /&gt;
&lt;br /&gt;
== GX4000 ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
* Same chipset as CPC+, but lacks Keyboard, Expansion Port, Printer Port, Tape/Disc Interfaces.&lt;br /&gt;
* Additional Scart Connector and TV Modulator.&lt;br /&gt;
&lt;br /&gt;
[[File:GX4000 PCB Top.jpg|200px|left]]&lt;br /&gt;
* '''Board: 2700-017P-4, MC0123C, Copyright 1990, K1'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:GX 4000 MC0123C K4 bilgisayarlarim 736001086319 MA.jpg|200px|left]]&lt;br /&gt;
* '''Board: 2700-017P-4, MC0123C, Copyright 1990, K4'''&lt;br /&gt;
* Looks same as above (only the &amp;quot;K4&amp;quot; text near the LED changed).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Board: 27...?, MC...?, Copyright 1990''' (without TV modulator)&lt;br /&gt;
* Version without TV Modulator installed, and with IC101 replaced by 4 transistors (used in French models; where the PAL modulator would be useless).&lt;br /&gt;
* See [[Media:GX4000 12.jpg|this picture]] (might be same mainboard as above, not sure - the photo doesn't show the boards part number; hidden behind the cartridge slot, one thing that IS different is the K1 vs K3 text near the LED).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another GX4000 board (2700-017P-3, MC0123A, Copyright 1990) is shown in [[Service Manuals]] (Plus series, page 24 and page 32/france).&lt;br /&gt;
&lt;br /&gt;
== System Cartridge (BIOS of CPC+) and Game Cartridges ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 51x60 mm''' [[GX4000 cartridge|(more pictures)]]&lt;br /&gt;
&lt;br /&gt;
[[File:Inside GX4000 cart 1 unrotated.jpg|50px|left]]&lt;br /&gt;
* '''Board: PT-NO-Z90903-MC0121A'''&lt;br /&gt;
* With custom LKs, and double-sided soldering points.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Cartridge-PT-NO-Z90903-MS0201A-Installed.jpg|50px|left]]&lt;br /&gt;
* '''Board: PT-NO-Z90903-MS0201A'''&lt;br /&gt;
* With custom LKs, and single-sided soldering points.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Cartridge-2700-023P-1-Installed.jpg|50px|left]]&lt;br /&gt;
* '''Board: 2700-023P-1'''&lt;br /&gt;
* With hardwired LK1 and LK6, and single-sided soldering points.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Dragon CPC Plus System Cartridge PC Spanish.jpg|50px|left]]&lt;br /&gt;
* '''Board: Nonamed'''&lt;br /&gt;
* Spanish cartridge without text-layer on PCB (otherwise same as 2700-023P-1).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DDI-1 ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 160x65 mm'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Gerald DDI-1 MF0004B.jpg|200px|left]]&lt;br /&gt;
* '''Board: MF0004B, ISS3, (C) Amstrad 1984''' [[Amstrad Disk Drive|(more pictures)]]&lt;br /&gt;
* 20pin FDC Data Separator&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Clones ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 370x200 mm'''&lt;br /&gt;
[[Image:KC Compact PCB cropped.jpg|200px|left]]&lt;br /&gt;
* '''KC Compact''' [[KC Compact|(more pictures)]]&lt;br /&gt;
* East german CPC464 clone (CPC 464-style 64K RAM, Tape Drive, though using 6128 BIOS version)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
[[File:Deepfb-aleste-without-keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Board: PATISONIC ALESTE 520EX 01.003''' [[Aleste 520EX|(more pictures)]]&lt;br /&gt;
* Russian CPC128 clone with some additonal features (512K RAM, additional video modes, RTC, SIO, etc.)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* The last letter of the '''PT NO Znnnnn, MCnnnnX''' board numbers does not seem to indicate a revision (the boards appear to be identical regardless of that letter, as long as the other digits are same). So, the last letter may indicate the manufacturing date or manufacturing location.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Amstrad part numbers]] - Part Numbers for PCBs and Chips&lt;br /&gt;
* [[Keyboard Versions]]&lt;br /&gt;
* [[Schematics]]&lt;br /&gt;
* [[Service Manuals]] - (cost-down 6128 is in the Amendment manual)&lt;br /&gt;
&lt;br /&gt;
== Forum ==&lt;br /&gt;
&lt;br /&gt;
* http://cpcwiki.eu/forum/index.php/topic,678.0.html - CPC Mainboard Versions related&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Mainboard_Versions&amp;diff=45385</id>
		<title>Mainboard Versions</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Mainboard_Versions&amp;diff=45385"/>
				<updated>2010-04-30T09:28:06Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* CPC464 version 3 (medium-sized) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CPC464 version 1 (original) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
* Big mainboard, old Gate Array with cooling plate and with VCC2; supplied from VCC via two 12 ohm resistors, R138 and R139, which are seen (with white coating) near the cooling plate.&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70100 Tomdalby.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70100, without any &amp;quot;MCnnnn&amp;quot; code, Copyright 1983'''&lt;br /&gt;
* Original version. Real wires going to keyboard.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70100 MC0001A RobertoCarlos.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70100, MC0001A, Copyright 1983'''&lt;br /&gt;
* Keyboard connector now has two rows of soldering points; probably intended to support two different connectors: The old PCB keyboard with wires, and the new CPC664-style 19pin single-foil &amp;quot;membrane&amp;quot; keyboard.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 270100 Grimware_crop.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO 270100, MC0001A, Copyrigh 1983'''&lt;br /&gt;
* Same as &amp;quot;Z70100 MC0001A&amp;quot;, but with uncommon text layer: labeled &amp;quot;270100&amp;quot; (not &amp;quot;Z70100&amp;quot;), says &amp;quot;Copyrigh&amp;quot; (not &amp;quot;Copyright&amp;quot;), and, unlike all other boards, its text has slashed zeroes.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:GA motherboard.JPG|200px|left]]&lt;br /&gt;
* '''Board: Prototype with Gate Array Simulator''' ([[CPC Prototypes|more pictures]])&lt;br /&gt;
* The Gate Array Simulator board (mounted on top of the mainboard, and almost having the same size as the mainboard) contains four 8K EPROMs, and a Gate Array prototype made of several logic chips. In later versions these evolved into a normal 28pin 32K ROM chip, and the custom 40pin Gate Array chip.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC464 version 2 (new gate array) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 405x152 mm'''&lt;br /&gt;
* Separate soldering points for old and new Gate Array (with changed pin-outs).&lt;br /&gt;
* New connector for new 6128-style 2x10pin dual-foil membrane keyboards (still has optional soldering points old 19pin foils).&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 464 MC0002B bilgisayarlarim.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70200, MC0002B, Copyright 1984'''&lt;br /&gt;
* The cooling plate and [[Media:Robcfg CPC464 EN 07.jpg|cooling paste]] are removed on the photo, revealing the normally hidden 40007-4 gate array chip&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Colossus CPC472 mainboard.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70200, MC0002C, Copyright 1984 with MS0043A daughterboard''' [[472|(more pictures)]]&lt;br /&gt;
* The Spanish [[472|CPC472]], with nonfunctional 8K RAM on the daughterboard&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70200 Tomdalby.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70200, MC0002D, Copyright 1984'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 french azerty Z70200 MC0008D pcb.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70200, MC0008D'''&lt;br /&gt;
* French board with shielding plates, and additional filtering loops, and french AZERTY rom.&lt;br /&gt;
* Without old 19pin keyboard connector.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC464 version 3 (medium-sized) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;241x149&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
* Medium sized mainboard. Same components as previous version, but arranged more tightly. Joystick/stereo moved to left side. &lt;br /&gt;
* Can be optionally fitted with Amphenol connectors (instead of Edge connectors, as far as known, this option was never used for the 464). The screw-holes have contacts for optional shielding-plate (this option was used in german Schneider models).&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70374 Grimware.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70374, MC0044A'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70374 MC0044B cpcmania.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70374, MC0044B'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 Z70375 Tomdalby.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70375, MC0044D'''&lt;br /&gt;
* Mostly same as Z70374. The 3 resistors in upper-right are arranged differently, different cassette connector installed, tinned GND fields.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464 MC0046A Markus top.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70378, MC0046A'''&lt;br /&gt;
* Additional filtering loops near cassette, monitor, keyboard connectors. Used in german Schneider models.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:SpanishSchneider464 robcfg cpcmaniaco shielding.jpg|200px|left]]&lt;br /&gt;
* '''Shielding as found in german Schneider models'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC464 version 4 (cost-down) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
[[Image:CPC464 MC0099A.jpg|200px|left]]&lt;br /&gt;
* '''Board:  PT NO Z80329, MC0099A, Copyright 1988'''&lt;br /&gt;
* Tiny mainboard. Uses 100pin SMD Gate Array (combines the old Gate Array, CRTC, and some FDC/DRAM/RESET logic in one chip).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC664 ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 PCB Top.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70205, MC0005A'''&lt;br /&gt;
* 8pin FDC Data Separator&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:German Schneider CPC664 open Gryzor missing edge.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70205, MC0005B'''&lt;br /&gt;
* Another 664 version, found in german Schneider CPCs (but might be also used in other countries?)&lt;br /&gt;
* This board version typically includes a small patch: A resistor soldered between Pin9 (A0) and Pin14 (/CASADDR) of IC105. The patch is also seen [http://amstrad.cpc.free.fr/amstrad/cpc664_e.htm here]. The resistor is labeled as R160 in the schematic, but isn't labeled on the PCB, so it was apparently added after designing the PCB.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC6128 version 1 (8pin data separator, solder points for old and new gate array) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Z70210 Tomdalby.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70210, MC0009A'''&lt;br /&gt;
* Separate soldering points for old and new Gate Array (as far as known, the old Gate Array was never used in 6128 though, only in 464).&lt;br /&gt;
* 8pin FDC Data Separator.&lt;br /&gt;
* Can be fitted with Amphenol connectors (as used in german cpcs) (instead of edge connectors).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC6128 version 2 (24pin data separator, solder points for new gate array only) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 320x155 mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128_PCB_Top_(Z70290_MC0020B).jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC0020B, R1706-94HB, Copyright 1985'''&lt;br /&gt;
* Can be fitted with Amphenol connectors (done in germany) (instead Edge connectors).&lt;br /&gt;
* Uses 24pin FDC Data Separator.&lt;br /&gt;
* Here's also [[Media:CPC6128 Z70290 Yarek.jpg|another picture]].&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 MC00201 RobertoCarlos.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC0020I, 94V.0-FR-4, Copyright 1985'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NightfallcrewSchneider6128pcb.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC0023D, 94HB-R1706, Copyright 1985'''&lt;br /&gt;
* Sold in germany, with Amphenol connectors (and dummy edge-connectors which don't have any contacts, and which are covered by green solder-stop layer, seen on [[Media:NightfallcrewSchneider6128pcb bottom.jpg|bottom side]]), front of mainboard has several vias for giving better contact to shielding plate).&lt;br /&gt;
* Note: The via in the text makes it easy to misread the part number (it's Z70290, not Z70250).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC...?, 94...?'''&lt;br /&gt;
* Looks ''almost'' like the above german board, but the &amp;quot;94HB-R1706&amp;quot; is different&lt;br /&gt;
* http://www.1000bit.it/scheda.asp?id=30 (not perfect picture quality; and board numbers are hidden under shielding plate and capacitors)&lt;br /&gt;
* EDIT: There ''was'' a picture of that board - but now it's replaced by better picture, but now showing a totally different 6128 board :-/&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider6128shielding.jpg|200px|left]]&lt;br /&gt;
* '''Shielding as found in german Schneider models'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Z70290 MC0057A with cooling plate cpcmania.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z70290, MC0057A, Copyright 1985'''&lt;br /&gt;
* An uncommon version. The cooling plate indicates that this CPC 6128 board was downgraded for supporting the pin-outs of the old gate array (?) Most bizarre, the /INT resistor, R144, has white coating, seen at lower-left edge of the cooling plate. On 464 boards similar coating is used on VCC2 resistors. Most likely, this board is a homebrew joke.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC6128 version 3 (cost-down) ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Z80330 Yarek.jpg|200px|left]]&lt;br /&gt;
* '''Board: PT NO Z80330, MC0100A (1988)'''&lt;br /&gt;
* Uses 100pin SMD Gate Array (combines the old Gate Array and PAL, CRTC, and some FDC/DRAM/RESET logic in one chip).&lt;br /&gt;
* Can be fitted with four 64Kx4 RAM chips (or the normal sixteen 64Kx1 RAM chips)&lt;br /&gt;
* Printer port consists of 74LS174+74LS175 (instead of 74LS273)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC 464+ ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 282x142 mm'''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464Plus MC0122D NightfallCrew.jpg|200px|left]]&lt;br /&gt;
* '''Board: 2700-016P-3, MC0122D, Copyright 1990'''&lt;br /&gt;
* Same mainboard is used in 464+ and 664+ (though not all components installed in 464+, and with different [[LK Links]]. Uses 160pin SMD Gate Array (ASIC).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CPC 6128+ ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 282x142 mm'''&lt;br /&gt;
* Same mainboard is used in 464+, but with additional components installed (extra RAM chips, FDC chips, internal/external floppy connectors, and with different [[LK Links]]).&lt;br /&gt;
* Uses 160pin SMD Gate Array (ASIC).&lt;br /&gt;
&lt;br /&gt;
[[Image:Gerald CPC6128Plus 1990 2700-016P-3 MC0122C.jpg|200px|left]]&lt;br /&gt;
* '''Board: 2700-016P-3, MC0122C, Copyright 1990'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other Plus versions are  shown in the [[Service Manuals]] (Plus series, page 5 = MC0122B, and page 16 = MC0122A).&lt;br /&gt;
&lt;br /&gt;
== GX4000 ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
* Same chipset as CPC+, but lacks Keyboard, Expansion Port, Printer Port, Tape/Disc Interfaces.&lt;br /&gt;
* Additional Scart Connector and TV Modulator.&lt;br /&gt;
&lt;br /&gt;
[[File:GX4000 PCB Top.jpg|200px|left]]&lt;br /&gt;
* '''Board: 2700-017P-4, MC0123C, Copyright 1990, K1'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:GX 4000 MC0123C K4 bilgisayarlarim 736001086319 MA.jpg|200px|left]]&lt;br /&gt;
* '''Board: 2700-017P-4, MC0123C, Copyright 1990, K4'''&lt;br /&gt;
* Looks same as above (only the &amp;quot;K4&amp;quot; text near the LED changed).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Board: 27...?, MC...?, Copyright 1990''' (without TV modulator)&lt;br /&gt;
* Version without TV Modulator installed, and with IC101 replaced by 4 transistors (used in French models; where the PAL modulator would be useless).&lt;br /&gt;
* See [[Media:GX4000 12.jpg|this picture]] (might be same mainboard as above, not sure - the photo doesn't show the boards part number; hidden behind the cartridge slot, one thing that IS different is the K1 vs K3 text near the LED).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another GX4000 board (2700-017P-3, MC0123A, Copyright 1990) is shown in [[Service Manuals]] (Plus series, page 24 and page 32/france).&lt;br /&gt;
&lt;br /&gt;
== System Cartridge (BIOS of CPC+) and Game Cartridges ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 51x60 mm''' [[GX4000 cartridge|(more pictures)]]&lt;br /&gt;
&lt;br /&gt;
[[File:Inside GX4000 cart 1 unrotated.jpg|50px|left]]&lt;br /&gt;
* '''Board: PT-NO-Z90903-MC0121A'''&lt;br /&gt;
* With custom LKs, and double-sided soldering points.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Cartridge-PT-NO-Z90903-MS0201A-Installed.jpg|50px|left]]&lt;br /&gt;
* '''Board: PT-NO-Z90903-MS0201A'''&lt;br /&gt;
* With custom LKs, and single-sided soldering points.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Cartridge-2700-023P-1-Installed.jpg|50px|left]]&lt;br /&gt;
* '''Board: 2700-023P-1'''&lt;br /&gt;
* With hardwired LK1 and LK6, and single-sided soldering points.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Dragon CPC Plus System Cartridge PC Spanish.jpg|50px|left]]&lt;br /&gt;
* '''Board: Nonamed'''&lt;br /&gt;
* Spanish cartridge without text-layer on PCB (otherwise same as 2700-023P-1).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DDI-1 ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 160x65 mm'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Gerald DDI-1 MF0004B.jpg|200px|left]]&lt;br /&gt;
* '''Board: MF0004B, ISS3, (C) Amstrad 1984''' [[Amstrad Disk Drive|(more pictures)]]&lt;br /&gt;
* 20pin FDC Data Separator&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Clones ==&lt;br /&gt;
&lt;br /&gt;
* '''Size: 370x200 mm'''&lt;br /&gt;
[[Image:KC Compact PCB cropped.jpg|200px|left]]&lt;br /&gt;
* '''KC Compact''' [[KC Compact|(more pictures)]]&lt;br /&gt;
* East german CPC464 clone (CPC 464-style 64K RAM, Tape Drive, though using 6128 BIOS version)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Size: &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???&amp;lt;/span&amp;gt; mm'''&lt;br /&gt;
[[File:Deepfb-aleste-without-keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Board: PATISONIC ALESTE 520EX 01.003''' [[Aleste 520EX|(more pictures)]]&lt;br /&gt;
* Russian CPC128 clone with some additonal features (512K RAM, additional video modes, RTC, SIO, etc.)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* The last letter of the '''PT NO Znnnnn, MCnnnnX''' board numbers does not seem to indicate a revision (the boards appear to be identical regardless of that letter, as long as the other digits are same). So, the last letter may indicate the manufacturing date or manufacturing location.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Amstrad part numbers]] - Part Numbers for PCBs and Chips&lt;br /&gt;
* [[Keyboard Versions]]&lt;br /&gt;
* [[Schematics]]&lt;br /&gt;
* [[Service Manuals]] - (cost-down 6128 is in the Amendment manual)&lt;br /&gt;
&lt;br /&gt;
== Forum ==&lt;br /&gt;
&lt;br /&gt;
* http://cpcwiki.eu/forum/index.php/topic,678.0.html - CPC Mainboard Versions related&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Arnold&amp;diff=45258</id>
		<title>Arnold</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Arnold&amp;diff=45258"/>
				<updated>2010-04-28T13:35:13Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: Unprotected &amp;quot;Arnold&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Did you mean&lt;br /&gt;
&lt;br /&gt;
* [[Arnold (Emulator)]]&lt;br /&gt;
* Arnold (Codename)&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Arnold_(Emulator)&amp;diff=45236</id>
		<title>Arnold (Emulator)</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Arnold_(Emulator)&amp;diff=45236"/>
				<updated>2010-04-28T09:45:02Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: Unprotected &amp;quot;Arnold (Emulator)&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Arnold is a CPC emulator originally written and maintained by [[Kevin Thacker]].&lt;br /&gt;
&lt;br /&gt;
Conversions for Apple Macintosh and Linux were made by [[Richard Bannister]] and [[Nurgle|Andreas Micklei]], respectively.&lt;br /&gt;
&lt;br /&gt;
Arnold aims for maximum emulation accuracy across the whole CPC and CPC+ range, as well as the [[KC Compact]]. Different [[CRTC]] types can be selected as well as various other aspects of the emulated machine.&lt;br /&gt;
&lt;br /&gt;
While early versions of Arnold were written using x86 assembly, more recent versions are written in portable C. This resulted in ports for MacOS, MacOS X, Linux, Unix and other platforms. While every port of Arnold has its own native user interface, the emulation core remains the same across the different versions.&lt;br /&gt;
&lt;br /&gt;
== Web links ==&lt;br /&gt;
&lt;br /&gt;
* [http://arnold.emuunlim.com Arnold for Windows]&lt;br /&gt;
* [http://www.bannister.org/software/arnold.htm Arnold for Macintosh]&lt;br /&gt;
* [http://arnold.berlios.de Arnold for Linux]&lt;br /&gt;
* [http://xport.xbox-scene.com/arnoldx.php Arnold for Microsoft XBox (ArnoldX)]&lt;br /&gt;
&lt;br /&gt;
[[Category:Emulator]] [[Category:CPC Plus]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Triumph&amp;diff=45081</id>
		<title>Triumph</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Triumph&amp;diff=45081"/>
				<updated>2010-04-26T12:49:48Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''It's unclear, what the name &amp;quot;Triumph&amp;quot; inside the CPC-OS rom should mean.&lt;br /&gt;
We suggest two possibilities:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Triumph-typewriter-logo.png|left|128px]]&lt;br /&gt;
[[File:Adler-typewriter-logo.png|right|200px]]&lt;br /&gt;
There has been a '''typewriter manufacturer''' named Triumph, concerning the CPCs typewriter keyboard, this could have been a reasonable partnership - but that company fusioned with Adler long time ago, so for that partnership, the boot message should have been ''Triumph-Adler 64K Microcompter''. Actually, the typewriter relation isn't too unlikely. The brand name ''Triumph-Adler'' (TA) has been used to produce various computer hardware from 1971 up to today, spanning a range of electronic typewriters, alphatronic computers, and laser printers. More info on the company history is found on their webpage http://www.triumph-adler.de/ (german)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
There is also an Triumph Electronics company in USA, though according to their About Us page, ''Triumph Electronics incorporated in 2007'' (thus it can't have anything to do with the CPC), interstingly, they say ''We stand out from the crowd by our professionalism'' (though as by 2010, the About Us page still doesn't work yet with Opera, nor mainstream browsers like Firefox or Internet Explorer).&lt;br /&gt;
&lt;br /&gt;
See http://en.wikipedia.org/wiki/Triumph for more possible meanings.&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Keyboard_Versions&amp;diff=44996</id>
		<title>Keyboard Versions</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Keyboard_Versions&amp;diff=44996"/>
				<updated>2010-04-25T08:11:23Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* German */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Unidentified Model =&lt;br /&gt;
&lt;br /&gt;
[[File:WalgenbachAmstrad CPC464 grey Large.jpg|200px|left]]&lt;br /&gt;
* '''Amstrad CPC 464 with new logo and grey keys'''&lt;br /&gt;
* Normally grey keys were found only on german Schneider models, not on Amstrad 464.&lt;br /&gt;
* Possibly this is a late german model (made after the Schneider/Amstrad partnership ended)...?&lt;br /&gt;
* Though [http://www.homecomputer.de/pages/f_info.html?Amstrad_CPC464_grey.html this link] says it's &amp;quot;most common&amp;quot; in UK...?&lt;br /&gt;
* Btw. better &amp;quot;non-diagonal&amp;quot; picture would be nice.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Regions =&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
[[File:GA high res.JPG|200px|left]]&lt;br /&gt;
* '''English CPC 464 (prototype)''' [[CPC Prototypes|(more info)]]&lt;br /&gt;
* Prototype with gray case&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:MarkRandallCPC464 old logo.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 464 (old logo)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Grimware cpc464 version3 case top.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 464 (new logo)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:English Amstrad CPC664 keyb Gryzor.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 664'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''English CPC 6128''' (did it really exist???)&lt;br /&gt;
* People in england claim that they had 128K models, too. But it's doubtworthy, there is no single photo of such a model in the whole internet.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 plus english keyboard.jpg|150px|left]]&lt;br /&gt;
* '''English 464 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''English 6128 Plus''' (did it really exist???)&lt;br /&gt;
* People in england claim that they had 128K models, too. But it's doubtworthy, there is no single photo of such a model in the whole internet.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''EPROM in English 464/6128 Plus System Cartridge'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== French ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Ordinateur Personnel Couleur''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464-French-QWERTY Gerald.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 464''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 french azerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 464''' (azerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 french qwerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 664''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 6128 French (QWERTY - 1st Serie).jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gerald CPC6128 French.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (azerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:PV250X French CPC 6128 - Qwerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (qwerty/rebadged)&lt;br /&gt;
* Exotic variant: French 6128 with QWERTY keyboard (english 6128 bundled with french manual &amp;amp; french sticker on FDD - this unit was sold in a french shop, when AZERTY keyboards were out of stock)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:French464plus.jpg|150px|left]]&lt;br /&gt;
* '''French 464 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gerald CPC6128Plus French.jpg|150px|left]]&lt;br /&gt;
* '''French 6128 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== German ==&lt;br /&gt;
&lt;br /&gt;
''Schneider Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
German CPCs have normal english keyboards. The keyboards (or case) is only different in so far that it is labeled Schneider instead Amstrad, and the 664/6128 have german colour tables on the disc drive. And, the keys are gray, unlike the more colorful Amstrad ones.&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider464keyboard.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 464'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:German Schneider CPC664 keyb Gryzor.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 664'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider6128keyboard.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From around 1988, german CPCs were sold directly by Amstrad, not by Schneider. Unknown if these were normal &amp;quot;english&amp;quot; models, or if they still had Schneider-style keyboards... like 464 with grey keys, and 6128 with german color table on FDD unit.&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''German Amstrad CPC 464 (non-Schneider) (should exist?)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Markus_cpc_6128.jpg|200px|left]]&lt;br /&gt;
* '''German Amstrad CPC 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spanish ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Ordenador Personal en Color''&lt;br /&gt;
&lt;br /&gt;
Before spanish laws led to the 72K fake and to the spanish keyboard, normal english CPCs might have been sold in spain - unknown if this has really happened - and if so, if they had the spanish ''Ordenador Personal en Color'' text on them...?&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Spanish CPC 464/664/6128 without Ñ key''' Pre-472, did such models exist?&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 472 es.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 472 without Ñ key''' [[472|(more info)]]&lt;br /&gt;
* Early version, still with english keys&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Colossus CPC472 keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 472 with Ñ key''' [[472|(more info)]]&lt;br /&gt;
* Later version, with spanish keys&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Robcfg CPC464 SP 08.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 464 with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:SpanishSchneider464 robcfg cpcmaniaco keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 464  with rebadged Ñ key (Schneider)'''&lt;br /&gt;
* Actually a German Schneider model with gray keys.&lt;br /&gt;
* With rebadged &amp;quot;spanish&amp;quot; keys (see [[Media:SpanishSchneider464 robcfg cpcmaniaco rebadged keys.jpg|closeup]]). And fitted with spanish ROM (see [[Media:SpanishSchneider464 robcfg cpcmaniaco detail1.jpg|inside]]).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish6128 old logo.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 6128 with Ñ key''' (old logo)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish 6128 Keyboard Robcfg.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 6128 with Ñ key''' (new logo)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish464plusLaRetrotienda.jpg|150px|left]]&lt;br /&gt;
* '''Spanish 464 Plus with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:6128plus es.jpg|150px|left]]&lt;br /&gt;
* '''Spanish 6128 Plus with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Danish ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
Older danish 464s had english keys, newer ones (with flat keys) had danish keys...&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Danish CPC 464''' (should exist)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Amstrad 6128 Danish Johnny Olsen.jpg|200px|left]]&lt;br /&gt;
* '''Danish CPC 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''BIOS ROM in Danish 464'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''BIOS ROM in Danish 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
[[File:Awa CPC464.jpg|150px|left]]&lt;br /&gt;
* '''Australian AWA models''' were shipped with normal english keyboards (with the standard Amstrad logo above the ESC key), the only difference is that LK1 and LK2 are shortened on the mainboard, so the BIOS displays [[Awa]] instead of Amstrad in the boot message.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Kcc top.jpg|150px|left]]&lt;br /&gt;
* '''KC Compact''' [[KC Compact|(more info)]]&lt;br /&gt;
* East german CPC clone - lacks some function keys.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Aleste.jpg|150px|left]]&lt;br /&gt;
* '''Aleste 520EX''' [[Aleste 520EX|(more info)]]&lt;br /&gt;
* Russian CPC clone with russian keyboard - with additional MSX-style function keys.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:GX4000 Top.jpg|150px|left]]&lt;br /&gt;
* '''GX4000'''&lt;br /&gt;
* Has only one '''||''' Pause button (mapped as &amp;quot;P&amp;quot; key in keyboard matrix)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mechanics =&lt;br /&gt;
&lt;br /&gt;
[[File:Grimware cpckeys.jpg|380px|left]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''First 464 Keyboard Circuit (PCB)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Second 464 Keyboard Circuit (CPC664-style single-foil)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Third 464 Keyboard Circuit (CPC6128-style dual-foil)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 D-o-S membrane unrotated.jpg|380px|left]]&lt;br /&gt;
* '''CPC 664 Keyboard Membrane'''&lt;br /&gt;
* Single &amp;quot;membrane&amp;quot; foil (with 19pin connector) (Seems to work more like the old PCB keyboard)&lt;br /&gt;
* Connections are closed when the key touches the contacts on the foil.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Keyboard membrane unrotated.jpg|380px|left]]&lt;br /&gt;
* '''CPC 6128 Keyboard Membrane'''&lt;br /&gt;
* Two membrane foils (with 2x10pin connector)&lt;br /&gt;
* Connections are closed when the key presses the two foils against each other.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Keyboard / Case Dimensions'''&lt;br /&gt;
* CPC 464 - 580x170x70 mm (according to 464 service manual)&lt;br /&gt;
* CPC 664 - 580x170x70 mm (according to 664 service manual)&lt;br /&gt;
* CPC 6128 - 510x170x48 mm (according to 6128 service manual)&lt;br /&gt;
* CPC Plus - 398x297x46 mm (according to 464+/6128+ service manual)&lt;br /&gt;
* GX 4000 - 250x184x44 mm (according to 464+/6128+ service manual)&lt;br /&gt;
* KC Compact - 399x218x43/54 mm (serviceanleitung) &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;or 388x218x43/54&amp;lt;/span&amp;gt; mm (gerätebeschreibung) (?)&lt;br /&gt;
* Aleste 520EX - &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???x??&amp;lt;/span&amp;gt; mm&lt;br /&gt;
&lt;br /&gt;
= Character Set ROMs =&lt;br /&gt;
&lt;br /&gt;
Together with the customized keyboards, the BIOS ROMs character sets were changed accordingly. The new characters are potentially useful for home-use, but may result in compatibility problems when importing/exporting software to/from other countries - or even within the same country (the new character sets were invented around 1986, so older french/spanish/danish CPCs didn't support the new symbols).&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
[[File:Charset english gray.gif|left]]&lt;br /&gt;
'''English BIOSes'''&lt;br /&gt;
* 40009 English 464&lt;br /&gt;
* 40022 English 664&lt;br /&gt;
* 40025 English 6128&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;41???-?&amp;lt;/span&amp;gt; English Plus (EPROM in System Cartridge)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== French ==&lt;br /&gt;
[[File:Charset french gray.gif|left]]&lt;br /&gt;
'''French BIOSes'''&lt;br /&gt;
* 40050 French 464&lt;br /&gt;
* 40051 French 6128&lt;br /&gt;
* 130Z001 41090-1 French Plus (EPROM in System Cartridge)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(40h) &amp;quot;à&amp;quot; instead &amp;quot;@&amp;quot;&lt;br /&gt;
* chr(5Ch) &amp;quot;ç&amp;quot; instead &amp;quot;\&amp;quot;&lt;br /&gt;
* chr(5Eh) &amp;quot;^&amp;quot; with different shape&lt;br /&gt;
* chr(7Bh) &amp;quot;é&amp;quot; instead &amp;quot;{&amp;quot;&lt;br /&gt;
* chr(7Ch) &amp;quot;ù&amp;quot; instead &amp;quot;|&amp;quot;&lt;br /&gt;
* chr(7Dh) &amp;quot;è&amp;quot; instead &amp;quot;}&amp;quot;&lt;br /&gt;
* chr(82h) &amp;quot;°&amp;quot; instead umlaut symbol&lt;br /&gt;
Changed chr(7Ch) means RSX commands become ùCPM instead |CPM.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spanish ==&lt;br /&gt;
[[File:Charset spanish gray.gif|left]]&lt;br /&gt;
'''Spanish BIOSes'''&lt;br /&gt;
* 40037 Spanish 464/472&lt;br /&gt;
* 40038 Spanish 6128&lt;br /&gt;
* 130Z001 41091-1 Spanish Plus (EPROM in System Cartridge)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(81h) &amp;quot;Ñ&amp;quot; instead &amp;quot;´&amp;quot;&lt;br /&gt;
* chr(83h) &amp;quot;Pt&amp;quot; instead &amp;quot;£&amp;quot;&lt;br /&gt;
* chr(8Bh) &amp;quot;ñ&amp;quot; instead &amp;quot;±&amp;quot;&lt;br /&gt;
The changed pound/peseta currency symbol may result in some confusion, since the actual exchange rate is unlikely to be 1:1.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Danish ==&lt;br /&gt;
[[File:Charset danish gray.gif|left]]&lt;br /&gt;
'''Danish BIOSes'''&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???&amp;lt;/span&amp;gt; Danish 464&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???&amp;lt;/span&amp;gt; Danish 6128&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???-?&amp;lt;/span&amp;gt; Danish Plus (probably doesn't exist?)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(30h) non-slashed zero, to avoid confusion with letter &amp;quot;Ø&amp;quot;&lt;br /&gt;
* chr(5Bh) &amp;quot;Æ&amp;quot; instead &amp;quot;[&amp;quot;&lt;br /&gt;
* chr(5Ch) &amp;quot;Ø&amp;quot; instead &amp;quot;\&amp;quot;&lt;br /&gt;
* chr(5Dh) &amp;quot;Å&amp;quot; instead &amp;quot;]&amp;quot;&lt;br /&gt;
* chr(7Bh) &amp;quot;æ&amp;quot; instead &amp;quot;{&amp;quot;&lt;br /&gt;
* chr(7Ch) &amp;quot;ø&amp;quot; instead &amp;quot;|&amp;quot;&lt;br /&gt;
* chr(7Dh) &amp;quot;å&amp;quot; instead &amp;quot;}&amp;quot;&lt;br /&gt;
Similar as in french, RSX commands like &amp;quot;|CPM&amp;quot; become &amp;quot;øCPM&amp;quot;.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&lt;br /&gt;
* According to soft968 the official language variants are: Spanish, French and Danish. And, presumably, English was official, too.&lt;br /&gt;
&lt;br /&gt;
* Although french/danish charsets don't support &amp;quot;|&amp;quot;, even newer user manuals (like french cpc+ manual from 1990) still refer to RSX commands as &amp;quot;|CPM&amp;quot; and describe to press shift+&amp;quot;@&amp;quot; to get the &amp;quot;|&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
* [[CPC6128 Keyboard Disassembled]]&lt;br /&gt;
* [[Mainboard Versions]]&lt;br /&gt;
* [[Amstrad part numbers]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Keyboard_Versions&amp;diff=44995</id>
		<title>Keyboard Versions</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Keyboard_Versions&amp;diff=44995"/>
				<updated>2010-04-25T08:10:50Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* German */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Unidentified Model =&lt;br /&gt;
&lt;br /&gt;
[[File:WalgenbachAmstrad CPC464 grey Large.jpg|200px|left]]&lt;br /&gt;
* '''Amstrad CPC 464 with new logo and grey keys'''&lt;br /&gt;
* Normally grey keys were found only on german Schneider models, not on Amstrad 464.&lt;br /&gt;
* Possibly this is a late german model (made after the Schneider/Amstrad partnership ended)...?&lt;br /&gt;
* Though [http://www.homecomputer.de/pages/f_info.html?Amstrad_CPC464_grey.html this link] says it's &amp;quot;most common&amp;quot; in UK...?&lt;br /&gt;
* Btw. better &amp;quot;non-diagonal&amp;quot; picture would be nice.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Regions =&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
[[File:GA high res.JPG|200px|left]]&lt;br /&gt;
* '''English CPC 464 (prototype)''' [[CPC Prototypes|(more info)]]&lt;br /&gt;
* Prototype with gray case&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:MarkRandallCPC464 old logo.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 464 (old logo)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Grimware cpc464 version3 case top.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 464 (new logo)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:English Amstrad CPC664 keyb Gryzor.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 664'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''English CPC 6128''' (did it really exist???)&lt;br /&gt;
* People in england claim that they had 128K models, too. But it's doubtworthy, there is no single photo of such a model in the whole internet.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 plus english keyboard.jpg|150px|left]]&lt;br /&gt;
* '''English 464 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''English 6128 Plus''' (did it really exist???)&lt;br /&gt;
* People in england claim that they had 128K models, too. But it's doubtworthy, there is no single photo of such a model in the whole internet.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''EPROM in English 464/6128 Plus System Cartridge'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== French ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Ordinateur Personnel Couleur''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464-French-QWERTY Gerald.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 464''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 french azerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 464''' (azerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 french qwerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 664''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 6128 French (QWERTY - 1st Serie).jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gerald CPC6128 French.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (azerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:PV250X French CPC 6128 - Qwerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (qwerty/rebadged)&lt;br /&gt;
* Exotic variant: French 6128 with QWERTY keyboard (english 6128 bundled with french manual &amp;amp; french sticker on FDD - this unit was sold in a french shop, when AZERTY keyboards were out of stock)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:French464plus.jpg|150px|left]]&lt;br /&gt;
* '''French 464 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gerald CPC6128Plus French.jpg|150px|left]]&lt;br /&gt;
* '''French 6128 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== German ==&lt;br /&gt;
&lt;br /&gt;
''Schneider Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
German CPCs have normal english keyboards. The keyboards (or case) is only different in so far that it is labeled Schneider instead Amstrad, and the 664/6128 have german colour tables on the disc drive. And, the keys are gray, unlike the more colorful Amstrad ones.&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider464keyboard.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 464'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:German Schneider CPC664 keyb Gryzor.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 664'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider6128keyboard.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From around 1988, german CPCs were sold directly by Amstrad, not by Schneider. Unknown if these were normal &amp;quot;english&amp;quot; models, or if they still had Schneider-style keyboards... like 464 with grey keys, and 6128 with german color table on FDD unit?&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''German Amstrad CPC 464 (non-Schneider) (should exist?)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Markus_cpc_6128.jpg|200px|left]]&lt;br /&gt;
* '''German Amstrad CPC 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spanish ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Ordenador Personal en Color''&lt;br /&gt;
&lt;br /&gt;
Before spanish laws led to the 72K fake and to the spanish keyboard, normal english CPCs might have been sold in spain - unknown if this has really happened - and if so, if they had the spanish ''Ordenador Personal en Color'' text on them...?&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Spanish CPC 464/664/6128 without Ñ key''' Pre-472, did such models exist?&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 472 es.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 472 without Ñ key''' [[472|(more info)]]&lt;br /&gt;
* Early version, still with english keys&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Colossus CPC472 keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 472 with Ñ key''' [[472|(more info)]]&lt;br /&gt;
* Later version, with spanish keys&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Robcfg CPC464 SP 08.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 464 with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:SpanishSchneider464 robcfg cpcmaniaco keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 464  with rebadged Ñ key (Schneider)'''&lt;br /&gt;
* Actually a German Schneider model with gray keys.&lt;br /&gt;
* With rebadged &amp;quot;spanish&amp;quot; keys (see [[Media:SpanishSchneider464 robcfg cpcmaniaco rebadged keys.jpg|closeup]]). And fitted with spanish ROM (see [[Media:SpanishSchneider464 robcfg cpcmaniaco detail1.jpg|inside]]).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish6128 old logo.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 6128 with Ñ key''' (old logo)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish 6128 Keyboard Robcfg.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 6128 with Ñ key''' (new logo)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish464plusLaRetrotienda.jpg|150px|left]]&lt;br /&gt;
* '''Spanish 464 Plus with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:6128plus es.jpg|150px|left]]&lt;br /&gt;
* '''Spanish 6128 Plus with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Danish ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
Older danish 464s had english keys, newer ones (with flat keys) had danish keys...&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Danish CPC 464''' (should exist)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Amstrad 6128 Danish Johnny Olsen.jpg|200px|left]]&lt;br /&gt;
* '''Danish CPC 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''BIOS ROM in Danish 464'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''BIOS ROM in Danish 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
[[File:Awa CPC464.jpg|150px|left]]&lt;br /&gt;
* '''Australian AWA models''' were shipped with normal english keyboards (with the standard Amstrad logo above the ESC key), the only difference is that LK1 and LK2 are shortened on the mainboard, so the BIOS displays [[Awa]] instead of Amstrad in the boot message.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Kcc top.jpg|150px|left]]&lt;br /&gt;
* '''KC Compact''' [[KC Compact|(more info)]]&lt;br /&gt;
* East german CPC clone - lacks some function keys.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Aleste.jpg|150px|left]]&lt;br /&gt;
* '''Aleste 520EX''' [[Aleste 520EX|(more info)]]&lt;br /&gt;
* Russian CPC clone with russian keyboard - with additional MSX-style function keys.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:GX4000 Top.jpg|150px|left]]&lt;br /&gt;
* '''GX4000'''&lt;br /&gt;
* Has only one '''||''' Pause button (mapped as &amp;quot;P&amp;quot; key in keyboard matrix)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mechanics =&lt;br /&gt;
&lt;br /&gt;
[[File:Grimware cpckeys.jpg|380px|left]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''First 464 Keyboard Circuit (PCB)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Second 464 Keyboard Circuit (CPC664-style single-foil)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Third 464 Keyboard Circuit (CPC6128-style dual-foil)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 D-o-S membrane unrotated.jpg|380px|left]]&lt;br /&gt;
* '''CPC 664 Keyboard Membrane'''&lt;br /&gt;
* Single &amp;quot;membrane&amp;quot; foil (with 19pin connector) (Seems to work more like the old PCB keyboard)&lt;br /&gt;
* Connections are closed when the key touches the contacts on the foil.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Keyboard membrane unrotated.jpg|380px|left]]&lt;br /&gt;
* '''CPC 6128 Keyboard Membrane'''&lt;br /&gt;
* Two membrane foils (with 2x10pin connector)&lt;br /&gt;
* Connections are closed when the key presses the two foils against each other.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Keyboard / Case Dimensions'''&lt;br /&gt;
* CPC 464 - 580x170x70 mm (according to 464 service manual)&lt;br /&gt;
* CPC 664 - 580x170x70 mm (according to 664 service manual)&lt;br /&gt;
* CPC 6128 - 510x170x48 mm (according to 6128 service manual)&lt;br /&gt;
* CPC Plus - 398x297x46 mm (according to 464+/6128+ service manual)&lt;br /&gt;
* GX 4000 - 250x184x44 mm (according to 464+/6128+ service manual)&lt;br /&gt;
* KC Compact - 399x218x43/54 mm (serviceanleitung) &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;or 388x218x43/54&amp;lt;/span&amp;gt; mm (gerätebeschreibung) (?)&lt;br /&gt;
* Aleste 520EX - &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???x??&amp;lt;/span&amp;gt; mm&lt;br /&gt;
&lt;br /&gt;
= Character Set ROMs =&lt;br /&gt;
&lt;br /&gt;
Together with the customized keyboards, the BIOS ROMs character sets were changed accordingly. The new characters are potentially useful for home-use, but may result in compatibility problems when importing/exporting software to/from other countries - or even within the same country (the new character sets were invented around 1986, so older french/spanish/danish CPCs didn't support the new symbols).&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
[[File:Charset english gray.gif|left]]&lt;br /&gt;
'''English BIOSes'''&lt;br /&gt;
* 40009 English 464&lt;br /&gt;
* 40022 English 664&lt;br /&gt;
* 40025 English 6128&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;41???-?&amp;lt;/span&amp;gt; English Plus (EPROM in System Cartridge)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== French ==&lt;br /&gt;
[[File:Charset french gray.gif|left]]&lt;br /&gt;
'''French BIOSes'''&lt;br /&gt;
* 40050 French 464&lt;br /&gt;
* 40051 French 6128&lt;br /&gt;
* 130Z001 41090-1 French Plus (EPROM in System Cartridge)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(40h) &amp;quot;à&amp;quot; instead &amp;quot;@&amp;quot;&lt;br /&gt;
* chr(5Ch) &amp;quot;ç&amp;quot; instead &amp;quot;\&amp;quot;&lt;br /&gt;
* chr(5Eh) &amp;quot;^&amp;quot; with different shape&lt;br /&gt;
* chr(7Bh) &amp;quot;é&amp;quot; instead &amp;quot;{&amp;quot;&lt;br /&gt;
* chr(7Ch) &amp;quot;ù&amp;quot; instead &amp;quot;|&amp;quot;&lt;br /&gt;
* chr(7Dh) &amp;quot;è&amp;quot; instead &amp;quot;}&amp;quot;&lt;br /&gt;
* chr(82h) &amp;quot;°&amp;quot; instead umlaut symbol&lt;br /&gt;
Changed chr(7Ch) means RSX commands become ùCPM instead |CPM.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spanish ==&lt;br /&gt;
[[File:Charset spanish gray.gif|left]]&lt;br /&gt;
'''Spanish BIOSes'''&lt;br /&gt;
* 40037 Spanish 464/472&lt;br /&gt;
* 40038 Spanish 6128&lt;br /&gt;
* 130Z001 41091-1 Spanish Plus (EPROM in System Cartridge)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(81h) &amp;quot;Ñ&amp;quot; instead &amp;quot;´&amp;quot;&lt;br /&gt;
* chr(83h) &amp;quot;Pt&amp;quot; instead &amp;quot;£&amp;quot;&lt;br /&gt;
* chr(8Bh) &amp;quot;ñ&amp;quot; instead &amp;quot;±&amp;quot;&lt;br /&gt;
The changed pound/peseta currency symbol may result in some confusion, since the actual exchange rate is unlikely to be 1:1.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Danish ==&lt;br /&gt;
[[File:Charset danish gray.gif|left]]&lt;br /&gt;
'''Danish BIOSes'''&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???&amp;lt;/span&amp;gt; Danish 464&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???&amp;lt;/span&amp;gt; Danish 6128&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???-?&amp;lt;/span&amp;gt; Danish Plus (probably doesn't exist?)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(30h) non-slashed zero, to avoid confusion with letter &amp;quot;Ø&amp;quot;&lt;br /&gt;
* chr(5Bh) &amp;quot;Æ&amp;quot; instead &amp;quot;[&amp;quot;&lt;br /&gt;
* chr(5Ch) &amp;quot;Ø&amp;quot; instead &amp;quot;\&amp;quot;&lt;br /&gt;
* chr(5Dh) &amp;quot;Å&amp;quot; instead &amp;quot;]&amp;quot;&lt;br /&gt;
* chr(7Bh) &amp;quot;æ&amp;quot; instead &amp;quot;{&amp;quot;&lt;br /&gt;
* chr(7Ch) &amp;quot;ø&amp;quot; instead &amp;quot;|&amp;quot;&lt;br /&gt;
* chr(7Dh) &amp;quot;å&amp;quot; instead &amp;quot;}&amp;quot;&lt;br /&gt;
Similar as in french, RSX commands like &amp;quot;|CPM&amp;quot; become &amp;quot;øCPM&amp;quot;.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&lt;br /&gt;
* According to soft968 the official language variants are: Spanish, French and Danish. And, presumably, English was official, too.&lt;br /&gt;
&lt;br /&gt;
* Although french/danish charsets don't support &amp;quot;|&amp;quot;, even newer user manuals (like french cpc+ manual from 1990) still refer to RSX commands as &amp;quot;|CPM&amp;quot; and describe to press shift+&amp;quot;@&amp;quot; to get the &amp;quot;|&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
* [[CPC6128 Keyboard Disassembled]]&lt;br /&gt;
* [[Mainboard Versions]]&lt;br /&gt;
* [[Amstrad part numbers]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Keyboard_Versions&amp;diff=44994</id>
		<title>Keyboard Versions</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Keyboard_Versions&amp;diff=44994"/>
				<updated>2010-04-25T08:10:26Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* German */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Unidentified Model =&lt;br /&gt;
&lt;br /&gt;
[[File:WalgenbachAmstrad CPC464 grey Large.jpg|200px|left]]&lt;br /&gt;
* '''Amstrad CPC 464 with new logo and grey keys'''&lt;br /&gt;
* Normally grey keys were found only on german Schneider models, not on Amstrad 464.&lt;br /&gt;
* Possibly this is a late german model (made after the Schneider/Amstrad partnership ended)...?&lt;br /&gt;
* Though [http://www.homecomputer.de/pages/f_info.html?Amstrad_CPC464_grey.html this link] says it's &amp;quot;most common&amp;quot; in UK...?&lt;br /&gt;
* Btw. better &amp;quot;non-diagonal&amp;quot; picture would be nice.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Regions =&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
[[File:GA high res.JPG|200px|left]]&lt;br /&gt;
* '''English CPC 464 (prototype)''' [[CPC Prototypes|(more info)]]&lt;br /&gt;
* Prototype with gray case&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:MarkRandallCPC464 old logo.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 464 (old logo)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Grimware cpc464 version3 case top.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 464 (new logo)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:English Amstrad CPC664 keyb Gryzor.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 664'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''English CPC 6128''' (did it really exist???)&lt;br /&gt;
* People in england claim that they had 128K models, too. But it's doubtworthy, there is no single photo of such a model in the whole internet.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 plus english keyboard.jpg|150px|left]]&lt;br /&gt;
* '''English 464 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''English 6128 Plus''' (did it really exist???)&lt;br /&gt;
* People in england claim that they had 128K models, too. But it's doubtworthy, there is no single photo of such a model in the whole internet.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''EPROM in English 464/6128 Plus System Cartridge'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== French ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Ordinateur Personnel Couleur''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464-French-QWERTY Gerald.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 464''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 french azerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 464''' (azerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 french qwerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 664''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 6128 French (QWERTY - 1st Serie).jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gerald CPC6128 French.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (azerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:PV250X French CPC 6128 - Qwerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (qwerty/rebadged)&lt;br /&gt;
* Exotic variant: French 6128 with QWERTY keyboard (english 6128 bundled with french manual &amp;amp; french sticker on FDD - this unit was sold in a french shop, when AZERTY keyboards were out of stock)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:French464plus.jpg|150px|left]]&lt;br /&gt;
* '''French 464 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gerald CPC6128Plus French.jpg|150px|left]]&lt;br /&gt;
* '''French 6128 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== German ==&lt;br /&gt;
&lt;br /&gt;
''Schneider Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
German CPCs have normal english keyboards. The keyboards (or case) is only different in so far that it is labeled Schneider instead Amstrad, and the 664/6128 have german colour tables on the disc drive. And, the keys are gray, unlike the more colorful Amstrad ones.&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider464keyboard.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 464'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:German Schneider CPC664 keyb Gryzor.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 664'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider6128keyboard.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From around 1988, german CPCs were sold directly by Amstrad, not by Schneider. Unknown if these were normal &amp;quot;english&amp;quot; models, or if they still had Schneider-style keyboards... like 464 with grey keys, and 6128 with german color table on FDD unit?&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''German Amstrad CPC 464 (non-Schneider) (should exist?)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Markus_cpc_6128.jpg|200px|left]]&lt;br /&gt;
* ''German Amstrad CPC 6128 were sold directly by Amstrad, not by Schneider. The FDD printing is in German. It also has the typical Centronic ports.''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spanish ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Ordenador Personal en Color''&lt;br /&gt;
&lt;br /&gt;
Before spanish laws led to the 72K fake and to the spanish keyboard, normal english CPCs might have been sold in spain - unknown if this has really happened - and if so, if they had the spanish ''Ordenador Personal en Color'' text on them...?&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Spanish CPC 464/664/6128 without Ñ key''' Pre-472, did such models exist?&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 472 es.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 472 without Ñ key''' [[472|(more info)]]&lt;br /&gt;
* Early version, still with english keys&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Colossus CPC472 keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 472 with Ñ key''' [[472|(more info)]]&lt;br /&gt;
* Later version, with spanish keys&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Robcfg CPC464 SP 08.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 464 with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:SpanishSchneider464 robcfg cpcmaniaco keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 464  with rebadged Ñ key (Schneider)'''&lt;br /&gt;
* Actually a German Schneider model with gray keys.&lt;br /&gt;
* With rebadged &amp;quot;spanish&amp;quot; keys (see [[Media:SpanishSchneider464 robcfg cpcmaniaco rebadged keys.jpg|closeup]]). And fitted with spanish ROM (see [[Media:SpanishSchneider464 robcfg cpcmaniaco detail1.jpg|inside]]).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish6128 old logo.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 6128 with Ñ key''' (old logo)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish 6128 Keyboard Robcfg.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 6128 with Ñ key''' (new logo)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish464plusLaRetrotienda.jpg|150px|left]]&lt;br /&gt;
* '''Spanish 464 Plus with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:6128plus es.jpg|150px|left]]&lt;br /&gt;
* '''Spanish 6128 Plus with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Danish ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
Older danish 464s had english keys, newer ones (with flat keys) had danish keys...&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Danish CPC 464''' (should exist)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Amstrad 6128 Danish Johnny Olsen.jpg|200px|left]]&lt;br /&gt;
* '''Danish CPC 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''BIOS ROM in Danish 464'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''BIOS ROM in Danish 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
[[File:Awa CPC464.jpg|150px|left]]&lt;br /&gt;
* '''Australian AWA models''' were shipped with normal english keyboards (with the standard Amstrad logo above the ESC key), the only difference is that LK1 and LK2 are shortened on the mainboard, so the BIOS displays [[Awa]] instead of Amstrad in the boot message.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Kcc top.jpg|150px|left]]&lt;br /&gt;
* '''KC Compact''' [[KC Compact|(more info)]]&lt;br /&gt;
* East german CPC clone - lacks some function keys.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Aleste.jpg|150px|left]]&lt;br /&gt;
* '''Aleste 520EX''' [[Aleste 520EX|(more info)]]&lt;br /&gt;
* Russian CPC clone with russian keyboard - with additional MSX-style function keys.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:GX4000 Top.jpg|150px|left]]&lt;br /&gt;
* '''GX4000'''&lt;br /&gt;
* Has only one '''||''' Pause button (mapped as &amp;quot;P&amp;quot; key in keyboard matrix)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mechanics =&lt;br /&gt;
&lt;br /&gt;
[[File:Grimware cpckeys.jpg|380px|left]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''First 464 Keyboard Circuit (PCB)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Second 464 Keyboard Circuit (CPC664-style single-foil)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Third 464 Keyboard Circuit (CPC6128-style dual-foil)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 D-o-S membrane unrotated.jpg|380px|left]]&lt;br /&gt;
* '''CPC 664 Keyboard Membrane'''&lt;br /&gt;
* Single &amp;quot;membrane&amp;quot; foil (with 19pin connector) (Seems to work more like the old PCB keyboard)&lt;br /&gt;
* Connections are closed when the key touches the contacts on the foil.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Keyboard membrane unrotated.jpg|380px|left]]&lt;br /&gt;
* '''CPC 6128 Keyboard Membrane'''&lt;br /&gt;
* Two membrane foils (with 2x10pin connector)&lt;br /&gt;
* Connections are closed when the key presses the two foils against each other.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Keyboard / Case Dimensions'''&lt;br /&gt;
* CPC 464 - 580x170x70 mm (according to 464 service manual)&lt;br /&gt;
* CPC 664 - 580x170x70 mm (according to 664 service manual)&lt;br /&gt;
* CPC 6128 - 510x170x48 mm (according to 6128 service manual)&lt;br /&gt;
* CPC Plus - 398x297x46 mm (according to 464+/6128+ service manual)&lt;br /&gt;
* GX 4000 - 250x184x44 mm (according to 464+/6128+ service manual)&lt;br /&gt;
* KC Compact - 399x218x43/54 mm (serviceanleitung) &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;or 388x218x43/54&amp;lt;/span&amp;gt; mm (gerätebeschreibung) (?)&lt;br /&gt;
* Aleste 520EX - &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???x??&amp;lt;/span&amp;gt; mm&lt;br /&gt;
&lt;br /&gt;
= Character Set ROMs =&lt;br /&gt;
&lt;br /&gt;
Together with the customized keyboards, the BIOS ROMs character sets were changed accordingly. The new characters are potentially useful for home-use, but may result in compatibility problems when importing/exporting software to/from other countries - or even within the same country (the new character sets were invented around 1986, so older french/spanish/danish CPCs didn't support the new symbols).&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
[[File:Charset english gray.gif|left]]&lt;br /&gt;
'''English BIOSes'''&lt;br /&gt;
* 40009 English 464&lt;br /&gt;
* 40022 English 664&lt;br /&gt;
* 40025 English 6128&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;41???-?&amp;lt;/span&amp;gt; English Plus (EPROM in System Cartridge)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== French ==&lt;br /&gt;
[[File:Charset french gray.gif|left]]&lt;br /&gt;
'''French BIOSes'''&lt;br /&gt;
* 40050 French 464&lt;br /&gt;
* 40051 French 6128&lt;br /&gt;
* 130Z001 41090-1 French Plus (EPROM in System Cartridge)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(40h) &amp;quot;à&amp;quot; instead &amp;quot;@&amp;quot;&lt;br /&gt;
* chr(5Ch) &amp;quot;ç&amp;quot; instead &amp;quot;\&amp;quot;&lt;br /&gt;
* chr(5Eh) &amp;quot;^&amp;quot; with different shape&lt;br /&gt;
* chr(7Bh) &amp;quot;é&amp;quot; instead &amp;quot;{&amp;quot;&lt;br /&gt;
* chr(7Ch) &amp;quot;ù&amp;quot; instead &amp;quot;|&amp;quot;&lt;br /&gt;
* chr(7Dh) &amp;quot;è&amp;quot; instead &amp;quot;}&amp;quot;&lt;br /&gt;
* chr(82h) &amp;quot;°&amp;quot; instead umlaut symbol&lt;br /&gt;
Changed chr(7Ch) means RSX commands become ùCPM instead |CPM.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spanish ==&lt;br /&gt;
[[File:Charset spanish gray.gif|left]]&lt;br /&gt;
'''Spanish BIOSes'''&lt;br /&gt;
* 40037 Spanish 464/472&lt;br /&gt;
* 40038 Spanish 6128&lt;br /&gt;
* 130Z001 41091-1 Spanish Plus (EPROM in System Cartridge)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(81h) &amp;quot;Ñ&amp;quot; instead &amp;quot;´&amp;quot;&lt;br /&gt;
* chr(83h) &amp;quot;Pt&amp;quot; instead &amp;quot;£&amp;quot;&lt;br /&gt;
* chr(8Bh) &amp;quot;ñ&amp;quot; instead &amp;quot;±&amp;quot;&lt;br /&gt;
The changed pound/peseta currency symbol may result in some confusion, since the actual exchange rate is unlikely to be 1:1.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Danish ==&lt;br /&gt;
[[File:Charset danish gray.gif|left]]&lt;br /&gt;
'''Danish BIOSes'''&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???&amp;lt;/span&amp;gt; Danish 464&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???&amp;lt;/span&amp;gt; Danish 6128&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???-?&amp;lt;/span&amp;gt; Danish Plus (probably doesn't exist?)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(30h) non-slashed zero, to avoid confusion with letter &amp;quot;Ø&amp;quot;&lt;br /&gt;
* chr(5Bh) &amp;quot;Æ&amp;quot; instead &amp;quot;[&amp;quot;&lt;br /&gt;
* chr(5Ch) &amp;quot;Ø&amp;quot; instead &amp;quot;\&amp;quot;&lt;br /&gt;
* chr(5Dh) &amp;quot;Å&amp;quot; instead &amp;quot;]&amp;quot;&lt;br /&gt;
* chr(7Bh) &amp;quot;æ&amp;quot; instead &amp;quot;{&amp;quot;&lt;br /&gt;
* chr(7Ch) &amp;quot;ø&amp;quot; instead &amp;quot;|&amp;quot;&lt;br /&gt;
* chr(7Dh) &amp;quot;å&amp;quot; instead &amp;quot;}&amp;quot;&lt;br /&gt;
Similar as in french, RSX commands like &amp;quot;|CPM&amp;quot; become &amp;quot;øCPM&amp;quot;.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&lt;br /&gt;
* According to soft968 the official language variants are: Spanish, French and Danish. And, presumably, English was official, too.&lt;br /&gt;
&lt;br /&gt;
* Although french/danish charsets don't support &amp;quot;|&amp;quot;, even newer user manuals (like french cpc+ manual from 1990) still refer to RSX commands as &amp;quot;|CPM&amp;quot; and describe to press shift+&amp;quot;@&amp;quot; to get the &amp;quot;|&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
* [[CPC6128 Keyboard Disassembled]]&lt;br /&gt;
* [[Mainboard Versions]]&lt;br /&gt;
* [[Amstrad part numbers]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Keyboard_Versions&amp;diff=44993</id>
		<title>Keyboard Versions</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Keyboard_Versions&amp;diff=44993"/>
				<updated>2010-04-25T08:08:46Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* German */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Unidentified Model =&lt;br /&gt;
&lt;br /&gt;
[[File:WalgenbachAmstrad CPC464 grey Large.jpg|200px|left]]&lt;br /&gt;
* '''Amstrad CPC 464 with new logo and grey keys'''&lt;br /&gt;
* Normally grey keys were found only on german Schneider models, not on Amstrad 464.&lt;br /&gt;
* Possibly this is a late german model (made after the Schneider/Amstrad partnership ended)...?&lt;br /&gt;
* Though [http://www.homecomputer.de/pages/f_info.html?Amstrad_CPC464_grey.html this link] says it's &amp;quot;most common&amp;quot; in UK...?&lt;br /&gt;
* Btw. better &amp;quot;non-diagonal&amp;quot; picture would be nice.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Regions =&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
[[File:GA high res.JPG|200px|left]]&lt;br /&gt;
* '''English CPC 464 (prototype)''' [[CPC Prototypes|(more info)]]&lt;br /&gt;
* Prototype with gray case&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:MarkRandallCPC464 old logo.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 464 (old logo)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Grimware cpc464 version3 case top.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 464 (new logo)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:English Amstrad CPC664 keyb Gryzor.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 664'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''English CPC 6128''' (did it really exist???)&lt;br /&gt;
* People in england claim that they had 128K models, too. But it's doubtworthy, there is no single photo of such a model in the whole internet.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 plus english keyboard.jpg|150px|left]]&lt;br /&gt;
* '''English 464 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''English 6128 Plus''' (did it really exist???)&lt;br /&gt;
* People in england claim that they had 128K models, too. But it's doubtworthy, there is no single photo of such a model in the whole internet.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''EPROM in English 464/6128 Plus System Cartridge'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== French ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Ordinateur Personnel Couleur''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464-French-QWERTY Gerald.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 464''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 french azerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 464''' (azerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 french qwerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 664''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 6128 French (QWERTY - 1st Serie).jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gerald CPC6128 French.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (azerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:PV250X French CPC 6128 - Qwerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (qwerty/rebadged)&lt;br /&gt;
* Exotic variant: French 6128 with QWERTY keyboard (english 6128 bundled with french manual &amp;amp; french sticker on FDD - this unit was sold in a french shop, when AZERTY keyboards were out of stock)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:French464plus.jpg|150px|left]]&lt;br /&gt;
* '''French 464 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gerald CPC6128Plus French.jpg|150px|left]]&lt;br /&gt;
* '''French 6128 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== German ==&lt;br /&gt;
&lt;br /&gt;
''Schneider Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
German CPCs have normal english keyboards. The keyboards (or case) is only different in so far that it is labeled Schneider instead Amstrad, and the 664/6128 have german colour tables on the disc drive. And, the keys are gray, unlike the more colorful Amstrad ones.&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider464keyboard.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 464'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:German Schneider CPC664 keyb Gryzor.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 664'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider6128keyboard.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From around 1988, german CPCs were sold directly by Amstrad, not by Schneider. Unknown if these were normal &amp;quot;english&amp;quot; models, or if they still had Schneider-style keyboards... like 464 with grey keys, and 6128 with german color table on FDD unit?&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''German Amstrad CPC 464 (non-Schneider) (should exist?)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Markus_cpc_6128.jpg|200px|left]]&lt;br /&gt;
* '''German Amstrad CPC 6128 were sold directly by Amstrad, not by Schneider. The FDD printing is in German. It also has the typical Centronic ports.'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spanish ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Ordenador Personal en Color''&lt;br /&gt;
&lt;br /&gt;
Before spanish laws led to the 72K fake and to the spanish keyboard, normal english CPCs might have been sold in spain - unknown if this has really happened - and if so, if they had the spanish ''Ordenador Personal en Color'' text on them...?&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Spanish CPC 464/664/6128 without Ñ key''' Pre-472, did such models exist?&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 472 es.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 472 without Ñ key''' [[472|(more info)]]&lt;br /&gt;
* Early version, still with english keys&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Colossus CPC472 keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 472 with Ñ key''' [[472|(more info)]]&lt;br /&gt;
* Later version, with spanish keys&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Robcfg CPC464 SP 08.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 464 with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:SpanishSchneider464 robcfg cpcmaniaco keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 464  with rebadged Ñ key (Schneider)'''&lt;br /&gt;
* Actually a German Schneider model with gray keys.&lt;br /&gt;
* With rebadged &amp;quot;spanish&amp;quot; keys (see [[Media:SpanishSchneider464 robcfg cpcmaniaco rebadged keys.jpg|closeup]]). And fitted with spanish ROM (see [[Media:SpanishSchneider464 robcfg cpcmaniaco detail1.jpg|inside]]).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish6128 old logo.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 6128 with Ñ key''' (old logo)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish 6128 Keyboard Robcfg.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 6128 with Ñ key''' (new logo)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish464plusLaRetrotienda.jpg|150px|left]]&lt;br /&gt;
* '''Spanish 464 Plus with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:6128plus es.jpg|150px|left]]&lt;br /&gt;
* '''Spanish 6128 Plus with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Danish ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
Older danish 464s had english keys, newer ones (with flat keys) had danish keys...&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Danish CPC 464''' (should exist)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Amstrad 6128 Danish Johnny Olsen.jpg|200px|left]]&lt;br /&gt;
* '''Danish CPC 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''BIOS ROM in Danish 464'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''BIOS ROM in Danish 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
[[File:Awa CPC464.jpg|150px|left]]&lt;br /&gt;
* '''Australian AWA models''' were shipped with normal english keyboards (with the standard Amstrad logo above the ESC key), the only difference is that LK1 and LK2 are shortened on the mainboard, so the BIOS displays [[Awa]] instead of Amstrad in the boot message.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Kcc top.jpg|150px|left]]&lt;br /&gt;
* '''KC Compact''' [[KC Compact|(more info)]]&lt;br /&gt;
* East german CPC clone - lacks some function keys.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Aleste.jpg|150px|left]]&lt;br /&gt;
* '''Aleste 520EX''' [[Aleste 520EX|(more info)]]&lt;br /&gt;
* Russian CPC clone with russian keyboard - with additional MSX-style function keys.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:GX4000 Top.jpg|150px|left]]&lt;br /&gt;
* '''GX4000'''&lt;br /&gt;
* Has only one '''||''' Pause button (mapped as &amp;quot;P&amp;quot; key in keyboard matrix)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mechanics =&lt;br /&gt;
&lt;br /&gt;
[[File:Grimware cpckeys.jpg|380px|left]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''First 464 Keyboard Circuit (PCB)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Second 464 Keyboard Circuit (CPC664-style single-foil)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Third 464 Keyboard Circuit (CPC6128-style dual-foil)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 D-o-S membrane unrotated.jpg|380px|left]]&lt;br /&gt;
* '''CPC 664 Keyboard Membrane'''&lt;br /&gt;
* Single &amp;quot;membrane&amp;quot; foil (with 19pin connector) (Seems to work more like the old PCB keyboard)&lt;br /&gt;
* Connections are closed when the key touches the contacts on the foil.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Keyboard membrane unrotated.jpg|380px|left]]&lt;br /&gt;
* '''CPC 6128 Keyboard Membrane'''&lt;br /&gt;
* Two membrane foils (with 2x10pin connector)&lt;br /&gt;
* Connections are closed when the key presses the two foils against each other.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Keyboard / Case Dimensions'''&lt;br /&gt;
* CPC 464 - 580x170x70 mm (according to 464 service manual)&lt;br /&gt;
* CPC 664 - 580x170x70 mm (according to 664 service manual)&lt;br /&gt;
* CPC 6128 - 510x170x48 mm (according to 6128 service manual)&lt;br /&gt;
* CPC Plus - 398x297x46 mm (according to 464+/6128+ service manual)&lt;br /&gt;
* GX 4000 - 250x184x44 mm (according to 464+/6128+ service manual)&lt;br /&gt;
* KC Compact - 399x218x43/54 mm (serviceanleitung) &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;or 388x218x43/54&amp;lt;/span&amp;gt; mm (gerätebeschreibung) (?)&lt;br /&gt;
* Aleste 520EX - &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???x??&amp;lt;/span&amp;gt; mm&lt;br /&gt;
&lt;br /&gt;
= Character Set ROMs =&lt;br /&gt;
&lt;br /&gt;
Together with the customized keyboards, the BIOS ROMs character sets were changed accordingly. The new characters are potentially useful for home-use, but may result in compatibility problems when importing/exporting software to/from other countries - or even within the same country (the new character sets were invented around 1986, so older french/spanish/danish CPCs didn't support the new symbols).&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
[[File:Charset english gray.gif|left]]&lt;br /&gt;
'''English BIOSes'''&lt;br /&gt;
* 40009 English 464&lt;br /&gt;
* 40022 English 664&lt;br /&gt;
* 40025 English 6128&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;41???-?&amp;lt;/span&amp;gt; English Plus (EPROM in System Cartridge)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== French ==&lt;br /&gt;
[[File:Charset french gray.gif|left]]&lt;br /&gt;
'''French BIOSes'''&lt;br /&gt;
* 40050 French 464&lt;br /&gt;
* 40051 French 6128&lt;br /&gt;
* 130Z001 41090-1 French Plus (EPROM in System Cartridge)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(40h) &amp;quot;à&amp;quot; instead &amp;quot;@&amp;quot;&lt;br /&gt;
* chr(5Ch) &amp;quot;ç&amp;quot; instead &amp;quot;\&amp;quot;&lt;br /&gt;
* chr(5Eh) &amp;quot;^&amp;quot; with different shape&lt;br /&gt;
* chr(7Bh) &amp;quot;é&amp;quot; instead &amp;quot;{&amp;quot;&lt;br /&gt;
* chr(7Ch) &amp;quot;ù&amp;quot; instead &amp;quot;|&amp;quot;&lt;br /&gt;
* chr(7Dh) &amp;quot;è&amp;quot; instead &amp;quot;}&amp;quot;&lt;br /&gt;
* chr(82h) &amp;quot;°&amp;quot; instead umlaut symbol&lt;br /&gt;
Changed chr(7Ch) means RSX commands become ùCPM instead |CPM.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spanish ==&lt;br /&gt;
[[File:Charset spanish gray.gif|left]]&lt;br /&gt;
'''Spanish BIOSes'''&lt;br /&gt;
* 40037 Spanish 464/472&lt;br /&gt;
* 40038 Spanish 6128&lt;br /&gt;
* 130Z001 41091-1 Spanish Plus (EPROM in System Cartridge)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(81h) &amp;quot;Ñ&amp;quot; instead &amp;quot;´&amp;quot;&lt;br /&gt;
* chr(83h) &amp;quot;Pt&amp;quot; instead &amp;quot;£&amp;quot;&lt;br /&gt;
* chr(8Bh) &amp;quot;ñ&amp;quot; instead &amp;quot;±&amp;quot;&lt;br /&gt;
The changed pound/peseta currency symbol may result in some confusion, since the actual exchange rate is unlikely to be 1:1.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Danish ==&lt;br /&gt;
[[File:Charset danish gray.gif|left]]&lt;br /&gt;
'''Danish BIOSes'''&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???&amp;lt;/span&amp;gt; Danish 464&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???&amp;lt;/span&amp;gt; Danish 6128&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???-?&amp;lt;/span&amp;gt; Danish Plus (probably doesn't exist?)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(30h) non-slashed zero, to avoid confusion with letter &amp;quot;Ø&amp;quot;&lt;br /&gt;
* chr(5Bh) &amp;quot;Æ&amp;quot; instead &amp;quot;[&amp;quot;&lt;br /&gt;
* chr(5Ch) &amp;quot;Ø&amp;quot; instead &amp;quot;\&amp;quot;&lt;br /&gt;
* chr(5Dh) &amp;quot;Å&amp;quot; instead &amp;quot;]&amp;quot;&lt;br /&gt;
* chr(7Bh) &amp;quot;æ&amp;quot; instead &amp;quot;{&amp;quot;&lt;br /&gt;
* chr(7Ch) &amp;quot;ø&amp;quot; instead &amp;quot;|&amp;quot;&lt;br /&gt;
* chr(7Dh) &amp;quot;å&amp;quot; instead &amp;quot;}&amp;quot;&lt;br /&gt;
Similar as in french, RSX commands like &amp;quot;|CPM&amp;quot; become &amp;quot;øCPM&amp;quot;.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&lt;br /&gt;
* According to soft968 the official language variants are: Spanish, French and Danish. And, presumably, English was official, too.&lt;br /&gt;
&lt;br /&gt;
* Although french/danish charsets don't support &amp;quot;|&amp;quot;, even newer user manuals (like french cpc+ manual from 1990) still refer to RSX commands as &amp;quot;|CPM&amp;quot; and describe to press shift+&amp;quot;@&amp;quot; to get the &amp;quot;|&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
* [[CPC6128 Keyboard Disassembled]]&lt;br /&gt;
* [[Mainboard Versions]]&lt;br /&gt;
* [[Amstrad part numbers]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Keyboard_Versions&amp;diff=44992</id>
		<title>Keyboard Versions</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Keyboard_Versions&amp;diff=44992"/>
				<updated>2010-04-25T08:08:31Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* German */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Unidentified Model =&lt;br /&gt;
&lt;br /&gt;
[[File:WalgenbachAmstrad CPC464 grey Large.jpg|200px|left]]&lt;br /&gt;
* '''Amstrad CPC 464 with new logo and grey keys'''&lt;br /&gt;
* Normally grey keys were found only on german Schneider models, not on Amstrad 464.&lt;br /&gt;
* Possibly this is a late german model (made after the Schneider/Amstrad partnership ended)...?&lt;br /&gt;
* Though [http://www.homecomputer.de/pages/f_info.html?Amstrad_CPC464_grey.html this link] says it's &amp;quot;most common&amp;quot; in UK...?&lt;br /&gt;
* Btw. better &amp;quot;non-diagonal&amp;quot; picture would be nice.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Regions =&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
[[File:GA high res.JPG|200px|left]]&lt;br /&gt;
* '''English CPC 464 (prototype)''' [[CPC Prototypes|(more info)]]&lt;br /&gt;
* Prototype with gray case&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:MarkRandallCPC464 old logo.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 464 (old logo)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Grimware cpc464 version3 case top.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 464 (new logo)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:English Amstrad CPC664 keyb Gryzor.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 664'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''English CPC 6128''' (did it really exist???)&lt;br /&gt;
* People in england claim that they had 128K models, too. But it's doubtworthy, there is no single photo of such a model in the whole internet.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 plus english keyboard.jpg|150px|left]]&lt;br /&gt;
* '''English 464 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''English 6128 Plus''' (did it really exist???)&lt;br /&gt;
* People in england claim that they had 128K models, too. But it's doubtworthy, there is no single photo of such a model in the whole internet.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''EPROM in English 464/6128 Plus System Cartridge'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== French ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Ordinateur Personnel Couleur''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464-French-QWERTY Gerald.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 464''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 french azerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 464''' (azerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 french qwerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 664''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 6128 French (QWERTY - 1st Serie).jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gerald CPC6128 French.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (azerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:PV250X French CPC 6128 - Qwerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (qwerty/rebadged)&lt;br /&gt;
* Exotic variant: French 6128 with QWERTY keyboard (english 6128 bundled with french manual &amp;amp; french sticker on FDD - this unit was sold in a french shop, when AZERTY keyboards were out of stock)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:French464plus.jpg|150px|left]]&lt;br /&gt;
* '''French 464 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gerald CPC6128Plus French.jpg|150px|left]]&lt;br /&gt;
* '''French 6128 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== German ==&lt;br /&gt;
&lt;br /&gt;
''Schneider Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
German CPCs have normal english keyboards. The keyboards (or case) is only different in so far that it is labeled Schneider instead Amstrad, and the 664/6128 have german colour tables on the disc drive. And, the keys are gray, unlike the more colorful Amstrad ones.&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider464keyboard.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 464'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:German Schneider CPC664 keyb Gryzor.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 664'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider6128keyboard.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From around 1988, german CPCs were sold directly by Amstrad, not by Schneider. Unknown if these were normal &amp;quot;english&amp;quot; models, or if they still had Schneider-style keyboards... like 464 with grey keys, and 6128 with german color table on FDD unit?&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''German Amstrad CPC 464 (non-Schneider) (should exist?)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Markus_cpc_6128.jpg|100px|left]]&lt;br /&gt;
* '''German Amstrad CPC 6128 were sold directly by Amstrad, not by Schneider. The FDD printing is in German. It also has the typical Centronic ports.'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spanish ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Ordenador Personal en Color''&lt;br /&gt;
&lt;br /&gt;
Before spanish laws led to the 72K fake and to the spanish keyboard, normal english CPCs might have been sold in spain - unknown if this has really happened - and if so, if they had the spanish ''Ordenador Personal en Color'' text on them...?&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Spanish CPC 464/664/6128 without Ñ key''' Pre-472, did such models exist?&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 472 es.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 472 without Ñ key''' [[472|(more info)]]&lt;br /&gt;
* Early version, still with english keys&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Colossus CPC472 keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 472 with Ñ key''' [[472|(more info)]]&lt;br /&gt;
* Later version, with spanish keys&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Robcfg CPC464 SP 08.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 464 with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:SpanishSchneider464 robcfg cpcmaniaco keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 464  with rebadged Ñ key (Schneider)'''&lt;br /&gt;
* Actually a German Schneider model with gray keys.&lt;br /&gt;
* With rebadged &amp;quot;spanish&amp;quot; keys (see [[Media:SpanishSchneider464 robcfg cpcmaniaco rebadged keys.jpg|closeup]]). And fitted with spanish ROM (see [[Media:SpanishSchneider464 robcfg cpcmaniaco detail1.jpg|inside]]).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish6128 old logo.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 6128 with Ñ key''' (old logo)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish 6128 Keyboard Robcfg.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 6128 with Ñ key''' (new logo)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish464plusLaRetrotienda.jpg|150px|left]]&lt;br /&gt;
* '''Spanish 464 Plus with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:6128plus es.jpg|150px|left]]&lt;br /&gt;
* '''Spanish 6128 Plus with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Danish ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
Older danish 464s had english keys, newer ones (with flat keys) had danish keys...&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Danish CPC 464''' (should exist)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Amstrad 6128 Danish Johnny Olsen.jpg|200px|left]]&lt;br /&gt;
* '''Danish CPC 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''BIOS ROM in Danish 464'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''BIOS ROM in Danish 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
[[File:Awa CPC464.jpg|150px|left]]&lt;br /&gt;
* '''Australian AWA models''' were shipped with normal english keyboards (with the standard Amstrad logo above the ESC key), the only difference is that LK1 and LK2 are shortened on the mainboard, so the BIOS displays [[Awa]] instead of Amstrad in the boot message.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Kcc top.jpg|150px|left]]&lt;br /&gt;
* '''KC Compact''' [[KC Compact|(more info)]]&lt;br /&gt;
* East german CPC clone - lacks some function keys.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Aleste.jpg|150px|left]]&lt;br /&gt;
* '''Aleste 520EX''' [[Aleste 520EX|(more info)]]&lt;br /&gt;
* Russian CPC clone with russian keyboard - with additional MSX-style function keys.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:GX4000 Top.jpg|150px|left]]&lt;br /&gt;
* '''GX4000'''&lt;br /&gt;
* Has only one '''||''' Pause button (mapped as &amp;quot;P&amp;quot; key in keyboard matrix)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mechanics =&lt;br /&gt;
&lt;br /&gt;
[[File:Grimware cpckeys.jpg|380px|left]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''First 464 Keyboard Circuit (PCB)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Second 464 Keyboard Circuit (CPC664-style single-foil)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Third 464 Keyboard Circuit (CPC6128-style dual-foil)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 D-o-S membrane unrotated.jpg|380px|left]]&lt;br /&gt;
* '''CPC 664 Keyboard Membrane'''&lt;br /&gt;
* Single &amp;quot;membrane&amp;quot; foil (with 19pin connector) (Seems to work more like the old PCB keyboard)&lt;br /&gt;
* Connections are closed when the key touches the contacts on the foil.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Keyboard membrane unrotated.jpg|380px|left]]&lt;br /&gt;
* '''CPC 6128 Keyboard Membrane'''&lt;br /&gt;
* Two membrane foils (with 2x10pin connector)&lt;br /&gt;
* Connections are closed when the key presses the two foils against each other.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Keyboard / Case Dimensions'''&lt;br /&gt;
* CPC 464 - 580x170x70 mm (according to 464 service manual)&lt;br /&gt;
* CPC 664 - 580x170x70 mm (according to 664 service manual)&lt;br /&gt;
* CPC 6128 - 510x170x48 mm (according to 6128 service manual)&lt;br /&gt;
* CPC Plus - 398x297x46 mm (according to 464+/6128+ service manual)&lt;br /&gt;
* GX 4000 - 250x184x44 mm (according to 464+/6128+ service manual)&lt;br /&gt;
* KC Compact - 399x218x43/54 mm (serviceanleitung) &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;or 388x218x43/54&amp;lt;/span&amp;gt; mm (gerätebeschreibung) (?)&lt;br /&gt;
* Aleste 520EX - &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???x??&amp;lt;/span&amp;gt; mm&lt;br /&gt;
&lt;br /&gt;
= Character Set ROMs =&lt;br /&gt;
&lt;br /&gt;
Together with the customized keyboards, the BIOS ROMs character sets were changed accordingly. The new characters are potentially useful for home-use, but may result in compatibility problems when importing/exporting software to/from other countries - or even within the same country (the new character sets were invented around 1986, so older french/spanish/danish CPCs didn't support the new symbols).&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
[[File:Charset english gray.gif|left]]&lt;br /&gt;
'''English BIOSes'''&lt;br /&gt;
* 40009 English 464&lt;br /&gt;
* 40022 English 664&lt;br /&gt;
* 40025 English 6128&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;41???-?&amp;lt;/span&amp;gt; English Plus (EPROM in System Cartridge)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== French ==&lt;br /&gt;
[[File:Charset french gray.gif|left]]&lt;br /&gt;
'''French BIOSes'''&lt;br /&gt;
* 40050 French 464&lt;br /&gt;
* 40051 French 6128&lt;br /&gt;
* 130Z001 41090-1 French Plus (EPROM in System Cartridge)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(40h) &amp;quot;à&amp;quot; instead &amp;quot;@&amp;quot;&lt;br /&gt;
* chr(5Ch) &amp;quot;ç&amp;quot; instead &amp;quot;\&amp;quot;&lt;br /&gt;
* chr(5Eh) &amp;quot;^&amp;quot; with different shape&lt;br /&gt;
* chr(7Bh) &amp;quot;é&amp;quot; instead &amp;quot;{&amp;quot;&lt;br /&gt;
* chr(7Ch) &amp;quot;ù&amp;quot; instead &amp;quot;|&amp;quot;&lt;br /&gt;
* chr(7Dh) &amp;quot;è&amp;quot; instead &amp;quot;}&amp;quot;&lt;br /&gt;
* chr(82h) &amp;quot;°&amp;quot; instead umlaut symbol&lt;br /&gt;
Changed chr(7Ch) means RSX commands become ùCPM instead |CPM.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spanish ==&lt;br /&gt;
[[File:Charset spanish gray.gif|left]]&lt;br /&gt;
'''Spanish BIOSes'''&lt;br /&gt;
* 40037 Spanish 464/472&lt;br /&gt;
* 40038 Spanish 6128&lt;br /&gt;
* 130Z001 41091-1 Spanish Plus (EPROM in System Cartridge)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(81h) &amp;quot;Ñ&amp;quot; instead &amp;quot;´&amp;quot;&lt;br /&gt;
* chr(83h) &amp;quot;Pt&amp;quot; instead &amp;quot;£&amp;quot;&lt;br /&gt;
* chr(8Bh) &amp;quot;ñ&amp;quot; instead &amp;quot;±&amp;quot;&lt;br /&gt;
The changed pound/peseta currency symbol may result in some confusion, since the actual exchange rate is unlikely to be 1:1.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Danish ==&lt;br /&gt;
[[File:Charset danish gray.gif|left]]&lt;br /&gt;
'''Danish BIOSes'''&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???&amp;lt;/span&amp;gt; Danish 464&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???&amp;lt;/span&amp;gt; Danish 6128&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???-?&amp;lt;/span&amp;gt; Danish Plus (probably doesn't exist?)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(30h) non-slashed zero, to avoid confusion with letter &amp;quot;Ø&amp;quot;&lt;br /&gt;
* chr(5Bh) &amp;quot;Æ&amp;quot; instead &amp;quot;[&amp;quot;&lt;br /&gt;
* chr(5Ch) &amp;quot;Ø&amp;quot; instead &amp;quot;\&amp;quot;&lt;br /&gt;
* chr(5Dh) &amp;quot;Å&amp;quot; instead &amp;quot;]&amp;quot;&lt;br /&gt;
* chr(7Bh) &amp;quot;æ&amp;quot; instead &amp;quot;{&amp;quot;&lt;br /&gt;
* chr(7Ch) &amp;quot;ø&amp;quot; instead &amp;quot;|&amp;quot;&lt;br /&gt;
* chr(7Dh) &amp;quot;å&amp;quot; instead &amp;quot;}&amp;quot;&lt;br /&gt;
Similar as in french, RSX commands like &amp;quot;|CPM&amp;quot; become &amp;quot;øCPM&amp;quot;.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&lt;br /&gt;
* According to soft968 the official language variants are: Spanish, French and Danish. And, presumably, English was official, too.&lt;br /&gt;
&lt;br /&gt;
* Although french/danish charsets don't support &amp;quot;|&amp;quot;, even newer user manuals (like french cpc+ manual from 1990) still refer to RSX commands as &amp;quot;|CPM&amp;quot; and describe to press shift+&amp;quot;@&amp;quot; to get the &amp;quot;|&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
* [[CPC6128 Keyboard Disassembled]]&lt;br /&gt;
* [[Mainboard Versions]]&lt;br /&gt;
* [[Amstrad part numbers]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Keyboard_Versions&amp;diff=44991</id>
		<title>Keyboard Versions</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Keyboard_Versions&amp;diff=44991"/>
				<updated>2010-04-25T08:06:22Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: /* German */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Unidentified Model =&lt;br /&gt;
&lt;br /&gt;
[[File:WalgenbachAmstrad CPC464 grey Large.jpg|200px|left]]&lt;br /&gt;
* '''Amstrad CPC 464 with new logo and grey keys'''&lt;br /&gt;
* Normally grey keys were found only on german Schneider models, not on Amstrad 464.&lt;br /&gt;
* Possibly this is a late german model (made after the Schneider/Amstrad partnership ended)...?&lt;br /&gt;
* Though [http://www.homecomputer.de/pages/f_info.html?Amstrad_CPC464_grey.html this link] says it's &amp;quot;most common&amp;quot; in UK...?&lt;br /&gt;
* Btw. better &amp;quot;non-diagonal&amp;quot; picture would be nice.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Regions =&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
[[File:GA high res.JPG|200px|left]]&lt;br /&gt;
* '''English CPC 464 (prototype)''' [[CPC Prototypes|(more info)]]&lt;br /&gt;
* Prototype with gray case&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:MarkRandallCPC464 old logo.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 464 (old logo)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Grimware cpc464 version3 case top.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 464 (new logo)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:English Amstrad CPC664 keyb Gryzor.jpg|200px|left]]&lt;br /&gt;
* '''English CPC 664'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''English CPC 6128''' (did it really exist???)&lt;br /&gt;
* People in england claim that they had 128K models, too. But it's doubtworthy, there is no single photo of such a model in the whole internet.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 plus english keyboard.jpg|150px|left]]&lt;br /&gt;
* '''English 464 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''English 6128 Plus''' (did it really exist???)&lt;br /&gt;
* People in england claim that they had 128K models, too. But it's doubtworthy, there is no single photo of such a model in the whole internet.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''EPROM in English 464/6128 Plus System Cartridge'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== French ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Ordinateur Personnel Couleur''&lt;br /&gt;
&lt;br /&gt;
[[File:CPC464-French-QWERTY Gerald.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 464''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nightfallcrew CPC464 french azerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 464''' (azerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 french qwerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 664''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 6128 French (QWERTY - 1st Serie).jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (qwerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gerald CPC6128 French.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (azerty)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:PV250X French CPC 6128 - Qwerty.jpg|200px|left]]&lt;br /&gt;
* '''French CPC 6128''' (qwerty/rebadged)&lt;br /&gt;
* Exotic variant: French 6128 with QWERTY keyboard (english 6128 bundled with french manual &amp;amp; french sticker on FDD - this unit was sold in a french shop, when AZERTY keyboards were out of stock)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:French464plus.jpg|150px|left]]&lt;br /&gt;
* '''French 464 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gerald CPC6128Plus French.jpg|150px|left]]&lt;br /&gt;
* '''French 6128 Plus'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== German ==&lt;br /&gt;
&lt;br /&gt;
''Schneider Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
German CPCs have normal english keyboards. The keyboards (or case) is only different in so far that it is labeled Schneider instead Amstrad, and the 664/6128 have german colour tables on the disc drive. And, the keys are gray, unlike the more colorful Amstrad ones.&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider464keyboard.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 464'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:German Schneider CPC664 keyb Gryzor.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 664'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Schneider6128keyboard.jpg|200px|left]]&lt;br /&gt;
* '''German CPC 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From around 1988, german CPCs were sold directly by Amstrad, not by Schneider. Unknown if these were normal &amp;quot;english&amp;quot; models, or if they still had Schneider-style keyboards... like 464 with grey keys, and 6128 with german color table on FDD unit?&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''German Amstrad CPC 464 (non-Schneider) (should exist?)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Markus_cpc_6128.png|100px|left]]&lt;br /&gt;
* '''German Amstrad CPC 6128 (non-Schneider) (should exist?)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spanish ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Ordenador Personal en Color''&lt;br /&gt;
&lt;br /&gt;
Before spanish laws led to the 72K fake and to the spanish keyboard, normal english CPCs might have been sold in spain - unknown if this has really happened - and if so, if they had the spanish ''Ordenador Personal en Color'' text on them...?&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Spanish CPC 464/664/6128 without Ñ key''' Pre-472, did such models exist?&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC 472 es.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 472 without Ñ key''' [[472|(more info)]]&lt;br /&gt;
* Early version, still with english keys&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Colossus CPC472 keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 472 with Ñ key''' [[472|(more info)]]&lt;br /&gt;
* Later version, with spanish keys&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Robcfg CPC464 SP 08.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 464 with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:SpanishSchneider464 robcfg cpcmaniaco keyboard.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 464  with rebadged Ñ key (Schneider)'''&lt;br /&gt;
* Actually a German Schneider model with gray keys.&lt;br /&gt;
* With rebadged &amp;quot;spanish&amp;quot; keys (see [[Media:SpanishSchneider464 robcfg cpcmaniaco rebadged keys.jpg|closeup]]). And fitted with spanish ROM (see [[Media:SpanishSchneider464 robcfg cpcmaniaco detail1.jpg|inside]]).&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish6128 old logo.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 6128 with Ñ key''' (old logo)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish 6128 Keyboard Robcfg.jpg|200px|left]]&lt;br /&gt;
* '''Spanish CPC 6128 with Ñ key''' (new logo)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Spanish464plusLaRetrotienda.jpg|150px|left]]&lt;br /&gt;
* '''Spanish 464 Plus with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:6128plus es.jpg|150px|left]]&lt;br /&gt;
* '''Spanish 6128 Plus with Ñ key'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Danish ==&lt;br /&gt;
&lt;br /&gt;
''Amstrad Colour Personal Computer''&lt;br /&gt;
&lt;br /&gt;
Older danish 464s had english keys, newer ones (with flat keys) had danish keys...&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Danish CPC 464''' (should exist)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Amstrad 6128 Danish Johnny Olsen.jpg|200px|left]]&lt;br /&gt;
* '''Danish CPC 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''BIOS ROM in Danish 464'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|50px|left]]&lt;br /&gt;
* '''BIOS ROM in Danish 6128'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
[[File:Awa CPC464.jpg|150px|left]]&lt;br /&gt;
* '''Australian AWA models''' were shipped with normal english keyboards (with the standard Amstrad logo above the ESC key), the only difference is that LK1 and LK2 are shortened on the mainboard, so the BIOS displays [[Awa]] instead of Amstrad in the boot message.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Kcc top.jpg|150px|left]]&lt;br /&gt;
* '''KC Compact''' [[KC Compact|(more info)]]&lt;br /&gt;
* East german CPC clone - lacks some function keys.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Aleste.jpg|150px|left]]&lt;br /&gt;
* '''Aleste 520EX''' [[Aleste 520EX|(more info)]]&lt;br /&gt;
* Russian CPC clone with russian keyboard - with additional MSX-style function keys.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:GX4000 Top.jpg|150px|left]]&lt;br /&gt;
* '''GX4000'''&lt;br /&gt;
* Has only one '''||''' Pause button (mapped as &amp;quot;P&amp;quot; key in keyboard matrix)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mechanics =&lt;br /&gt;
&lt;br /&gt;
[[File:Grimware cpckeys.jpg|380px|left]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''First 464 Keyboard Circuit (PCB)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Second 464 Keyboard Circuit (CPC664-style single-foil)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:NoPicture.png|100px|left]]&lt;br /&gt;
* '''Third 464 Keyboard Circuit (CPC6128-style dual-foil)'''&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC664 D-o-S membrane unrotated.jpg|380px|left]]&lt;br /&gt;
* '''CPC 664 Keyboard Membrane'''&lt;br /&gt;
* Single &amp;quot;membrane&amp;quot; foil (with 19pin connector) (Seems to work more like the old PCB keyboard)&lt;br /&gt;
* Connections are closed when the key touches the contacts on the foil.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CPC6128 Keyboard membrane unrotated.jpg|380px|left]]&lt;br /&gt;
* '''CPC 6128 Keyboard Membrane'''&lt;br /&gt;
* Two membrane foils (with 2x10pin connector)&lt;br /&gt;
* Connections are closed when the key presses the two foils against each other.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Keyboard / Case Dimensions'''&lt;br /&gt;
* CPC 464 - 580x170x70 mm (according to 464 service manual)&lt;br /&gt;
* CPC 664 - 580x170x70 mm (according to 664 service manual)&lt;br /&gt;
* CPC 6128 - 510x170x48 mm (according to 6128 service manual)&lt;br /&gt;
* CPC Plus - 398x297x46 mm (according to 464+/6128+ service manual)&lt;br /&gt;
* GX 4000 - 250x184x44 mm (according to 464+/6128+ service manual)&lt;br /&gt;
* KC Compact - 399x218x43/54 mm (serviceanleitung) &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;or 388x218x43/54&amp;lt;/span&amp;gt; mm (gerätebeschreibung) (?)&lt;br /&gt;
* Aleste 520EX - &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;???x???x??&amp;lt;/span&amp;gt; mm&lt;br /&gt;
&lt;br /&gt;
= Character Set ROMs =&lt;br /&gt;
&lt;br /&gt;
Together with the customized keyboards, the BIOS ROMs character sets were changed accordingly. The new characters are potentially useful for home-use, but may result in compatibility problems when importing/exporting software to/from other countries - or even within the same country (the new character sets were invented around 1986, so older french/spanish/danish CPCs didn't support the new symbols).&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
[[File:Charset english gray.gif|left]]&lt;br /&gt;
'''English BIOSes'''&lt;br /&gt;
* 40009 English 464&lt;br /&gt;
* 40022 English 664&lt;br /&gt;
* 40025 English 6128&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;41???-?&amp;lt;/span&amp;gt; English Plus (EPROM in System Cartridge)&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== French ==&lt;br /&gt;
[[File:Charset french gray.gif|left]]&lt;br /&gt;
'''French BIOSes'''&lt;br /&gt;
* 40050 French 464&lt;br /&gt;
* 40051 French 6128&lt;br /&gt;
* 130Z001 41090-1 French Plus (EPROM in System Cartridge)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(40h) &amp;quot;à&amp;quot; instead &amp;quot;@&amp;quot;&lt;br /&gt;
* chr(5Ch) &amp;quot;ç&amp;quot; instead &amp;quot;\&amp;quot;&lt;br /&gt;
* chr(5Eh) &amp;quot;^&amp;quot; with different shape&lt;br /&gt;
* chr(7Bh) &amp;quot;é&amp;quot; instead &amp;quot;{&amp;quot;&lt;br /&gt;
* chr(7Ch) &amp;quot;ù&amp;quot; instead &amp;quot;|&amp;quot;&lt;br /&gt;
* chr(7Dh) &amp;quot;è&amp;quot; instead &amp;quot;}&amp;quot;&lt;br /&gt;
* chr(82h) &amp;quot;°&amp;quot; instead umlaut symbol&lt;br /&gt;
Changed chr(7Ch) means RSX commands become ùCPM instead |CPM.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spanish ==&lt;br /&gt;
[[File:Charset spanish gray.gif|left]]&lt;br /&gt;
'''Spanish BIOSes'''&lt;br /&gt;
* 40037 Spanish 464/472&lt;br /&gt;
* 40038 Spanish 6128&lt;br /&gt;
* 130Z001 41091-1 Spanish Plus (EPROM in System Cartridge)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(81h) &amp;quot;Ñ&amp;quot; instead &amp;quot;´&amp;quot;&lt;br /&gt;
* chr(83h) &amp;quot;Pt&amp;quot; instead &amp;quot;£&amp;quot;&lt;br /&gt;
* chr(8Bh) &amp;quot;ñ&amp;quot; instead &amp;quot;±&amp;quot;&lt;br /&gt;
The changed pound/peseta currency symbol may result in some confusion, since the actual exchange rate is unlikely to be 1:1.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Danish ==&lt;br /&gt;
[[File:Charset danish gray.gif|left]]&lt;br /&gt;
'''Danish BIOSes'''&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???&amp;lt;/span&amp;gt; Danish 464&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???&amp;lt;/span&amp;gt; Danish 6128&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:#ff0000&amp;quot;&amp;gt;40???-?&amp;lt;/span&amp;gt; Danish Plus (probably doesn't exist?)&lt;br /&gt;
'''Special Symbols'''&lt;br /&gt;
* chr(30h) non-slashed zero, to avoid confusion with letter &amp;quot;Ø&amp;quot;&lt;br /&gt;
* chr(5Bh) &amp;quot;Æ&amp;quot; instead &amp;quot;[&amp;quot;&lt;br /&gt;
* chr(5Ch) &amp;quot;Ø&amp;quot; instead &amp;quot;\&amp;quot;&lt;br /&gt;
* chr(5Dh) &amp;quot;Å&amp;quot; instead &amp;quot;]&amp;quot;&lt;br /&gt;
* chr(7Bh) &amp;quot;æ&amp;quot; instead &amp;quot;{&amp;quot;&lt;br /&gt;
* chr(7Ch) &amp;quot;ø&amp;quot; instead &amp;quot;|&amp;quot;&lt;br /&gt;
* chr(7Dh) &amp;quot;å&amp;quot; instead &amp;quot;}&amp;quot;&lt;br /&gt;
Similar as in french, RSX commands like &amp;quot;|CPM&amp;quot; become &amp;quot;øCPM&amp;quot;.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&lt;br /&gt;
* According to soft968 the official language variants are: Spanish, French and Danish. And, presumably, English was official, too.&lt;br /&gt;
&lt;br /&gt;
* Although french/danish charsets don't support &amp;quot;|&amp;quot;, even newer user manuals (like french cpc+ manual from 1990) still refer to RSX commands as &amp;quot;|CPM&amp;quot; and describe to press shift+&amp;quot;@&amp;quot; to get the &amp;quot;|&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
* [[CPC6128 Keyboard Disassembled]]&lt;br /&gt;
* [[Mainboard Versions]]&lt;br /&gt;
* [[Amstrad part numbers]]&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=File:Markus_cpc_6128.jpg&amp;diff=44990</id>
		<title>File:Markus cpc 6128.jpg</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=File:Markus_cpc_6128.jpg&amp;diff=44990"/>
				<updated>2010-04-25T08:05:48Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=File:CPC_Disc_Cassette_Schematic.png&amp;diff=44805</id>
		<title>File:CPC Disc Cassette Schematic.png</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=File:CPC_Disc_Cassette_Schematic.png&amp;diff=44805"/>
				<updated>2010-04-21T12:38:45Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: uploaded a new version of &amp;quot;File:CPC Disc Cassette Schematic.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=MediaWiki:Sidebar&amp;diff=42782</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=MediaWiki:Sidebar&amp;diff=42782"/>
				<updated>2010-03-14T21:07:49Z</updated>
		
		<summary type="html">&lt;p&gt;Devilmarkus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*SEARCH&lt;br /&gt;
&lt;br /&gt;
*Contents&lt;br /&gt;
**mainpage|mainpage&lt;br /&gt;
**recentchanges-url|recentchanges&lt;br /&gt;
**CPCWiki:Portal|CPCWiki portal&lt;br /&gt;
**Special:Categories|Content Categories&lt;br /&gt;
&lt;br /&gt;
*Hardware&lt;br /&gt;
**CPC|In short&lt;br /&gt;
**CPC_old_generation|CPC 464/664/6128&lt;br /&gt;
**Plus|CPC+/GX4000&lt;br /&gt;
**Peripherals|Peripherals&lt;br /&gt;
**DIY|DIY &amp;amp; Repair&lt;br /&gt;
**Photo Gallery|Gallery&lt;br /&gt;
&lt;br /&gt;
*Software&lt;br /&gt;
**games|The Games&lt;br /&gt;
**Applications|Serious software&lt;br /&gt;
**programming|Programming&lt;br /&gt;
&lt;br /&gt;
*Literature&lt;br /&gt;
** Books|Books&lt;br /&gt;
** Fanzines|Fanzines&lt;br /&gt;
** Magazines|Magazines&lt;br /&gt;
** Schematics|Schematics&lt;br /&gt;
** Service Manuals|Service Manuals&lt;br /&gt;
** Technical documentation|Technical docs&lt;br /&gt;
&lt;br /&gt;
*The Present&lt;br /&gt;
**News_and_Projects|News/Projects&lt;br /&gt;
**emulators|Emulators&lt;br /&gt;
**links|Links&lt;br /&gt;
&lt;br /&gt;
*The Scene&lt;br /&gt;
**Demogroups|Groups/Members&lt;br /&gt;
**CPC_parties|Parties/Events&lt;br /&gt;
&lt;br /&gt;
*Wiki-related&lt;br /&gt;
**Special:Upload|Upload&lt;br /&gt;
**Special:SpecialPages|Special Pages&lt;br /&gt;
**about|About - Contribute&lt;br /&gt;
**loose_lemas|Create Page&lt;br /&gt;
**http://www.cpcwiki.eu/index.php?title=Help:Editing |Editing Help&lt;br /&gt;
**http://www.cpcwiki.eu/forum |Discussion forum&lt;br /&gt;
**http://people.cpcwiki.eu/ |CPC Network&lt;br /&gt;
**http://blog.cpcwiki.eu|Wiki-Blog&lt;/div&gt;</summary>
		<author><name>Devilmarkus</name></author>	</entry>

	</feed>