<?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=Executioner</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=Executioner"/>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php/Special:Contributions/Executioner"/>
		<updated>2026-08-29T00:45:24Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=94884</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=94884"/>
				<updated>2016-01-05T04:26:06Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
&amp;lt;center&amp;gt;This site is an encyclopaedia on all things [[Amstrad|Amstrad]] [[CPC|CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' about the CPC available.&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:forum.png|300px|link=http://www.cpcwiki.eu/forum]]      [[Image:Vs.png|300px|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;
&lt;br /&gt;
[[File:Traxtor.png|thumb|320px|[http://www.cpcwiki.eu/forum/games/new-game-the-return-of-traxtor/ The Return of Traxtor]]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;height:20em; overflow:auto; border: 1px solid #FFC9C9&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*5/1/16: '''[[WinApe|WinAPE]]''' 2.0 Beta 2 released. [http://www.winape.net/ Download]&lt;br /&gt;
*20/12/15: After more than one decade Overlanders released [http://www.pouet.net/prod.php?which=66699/ Points Barres]&lt;br /&gt;
*27/11/15: New game released! [http://www.cpcwiki.eu/forum/games/new-game-the-return-of-traxtor/ The Return of Traxtor]&lt;br /&gt;
*26/11/15: '''[[WinApe|WinAPE]]''' 2.0 Beta 1 released. [http://www.winape.net/ Download]&lt;br /&gt;
*02/09/15: '''iMPdraw Lite v1.132''' is now released. [http://www.cpcwiki.eu/forum/programming/impdraw-v1-0f/60/ Download]&lt;br /&gt;
*28/08/15: '''[[FutureOS]] system .8''' comprehensive update released. [http://futureos.cpc-live.com Download]&lt;br /&gt;
*27/08/15: [[MegaFlashROManager|ROManager]] 2.14 released. [http://futureos.cpc-live.com/files/ROManager_ALL.zip Download]&lt;br /&gt;
*11/05/15: '''CPCtelera''', a cross-platform game development framework was [http://www.cpcwiki.eu/index.php/CPCtelera released]&lt;br /&gt;
*21/03/15: '''[[C4CPC]]''', a cartridge replacement for PLUS and GX4000 was [http://www.cpcwiki.eu/index.php/C4CPC released]&lt;br /&gt;
*02/01/15: [[Cosmos|COSMOS]] v.22 (final version) has been [http://www.cpcwiki.eu/index.php/Cosmos released]&lt;br /&gt;
*14/12/14: '''X-MASS''', Add a [http://www.cpcwiki.eu/forum/news-events/x-mass-a-mass-storage-expansion-for-all-cpc/msg91048/#msg91048 128MB mass-storage] to your CPC.&lt;br /&gt;
*30/08/14: '''[[SymbOS]]''' 2.1 Final [http://www.cpcwiki.eu/forum/news-events/symbos-2-1-final-released released]&lt;br /&gt;
*14/08/14: '''[[PlayCity]]''', Add [http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/playcity-aka-ctc-ay-(mx4)-for-august-!!!/ 6ch stereo audio, Z80 CTC...] to your CPC.&lt;br /&gt;
*22/04/14: '''X-MEM''', Add up to [http://www.cpcwiki.eu/forum/news-events/x-mem-a-new-memory-expansion-for-all-cpc/ 512K RAM/ROM] on your 464/664/6128.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 12 last news only --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery widths=128px  heights=96px&amp;gt;&lt;br /&gt;
Image:Cpctelera compo.jpg|[http://www.cpcwiki.eu/index.php/CPCtelera CPCtelera]&lt;br /&gt;
Image:C4CPC_CprSelect.png|[http://www.cpcwiki.eu/index.php/C4CPC C4CPC]&lt;br /&gt;
Image:X-MASS01.jpg|[http://www.cpcwiki.eu/forum/news-events/x-mass-a-mass-storage-expansion-for-all-cpc/msg91048/#msg91048 X-MASS MX4 Board]&lt;br /&gt;
Image:symbos21cpc.gif|[[SymbOS]] 2.1&lt;br /&gt;
Image:PlayCity.jpg|[http://www.cpcwiki.eu/index.php/PlayCity PlayCity]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 5 last pictures only --&amp;gt;&lt;br /&gt;
&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 related ===&lt;br /&gt;
*[[CPCWiki updates]]&lt;br /&gt;
*[[Donors]]&lt;br /&gt;
&lt;br /&gt;
'''Become an Author!'''&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;/div&amp;gt; &lt;br /&gt;
&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;
&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]] | '''[[Special:ContributionScores|List of most active contributors]]'''&amp;lt;/small&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=94883</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=94883"/>
				<updated>2016-01-05T04:24:54Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
&amp;lt;center&amp;gt;This site is an encyclopaedia on all things [[Amstrad|Amstrad]] [[CPC|CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' about the CPC available.&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:forum.png|300px|link=http://www.cpcwiki.eu/forum]]      [[Image:Vs.png|300px|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;
&lt;br /&gt;
[[File:Traxtor.png|thumb|320px|[http://www.cpcwiki.eu/forum/games/new-game-the-return-of-traxtor/ The Return of Traxtor]]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;height:20em; overflow:auto; border: 1px solid #FFC9C9&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*6/1/16: '''[[WinApe|WinAPE]]''' 2.0 Beta 2 released. [http://www.winape.net/ Download]&lt;br /&gt;
*20/12/15: After more than one decade Overlanders released [http://www.pouet.net/prod.php?which=66699/ Points Barres]&lt;br /&gt;
*27/11/15: New game released! [http://www.cpcwiki.eu/forum/games/new-game-the-return-of-traxtor/ The Return of Traxtor]&lt;br /&gt;
*26/11/15: '''[[WinApe|WinAPE]]''' 2.0 Beta 1 released. [http://www.winape.net/ Download]&lt;br /&gt;
*02/09/15: '''iMPdraw Lite v1.132''' is now released. [http://www.cpcwiki.eu/forum/programming/impdraw-v1-0f/60/ Download]&lt;br /&gt;
*28/08/15: '''[[FutureOS]] system .8''' comprehensive update released. [http://futureos.cpc-live.com Download]&lt;br /&gt;
*27/08/15: [[MegaFlashROManager|ROManager]] 2.14 released. [http://futureos.cpc-live.com/files/ROManager_ALL.zip Download]&lt;br /&gt;
*11/05/15: '''CPCtelera''', a cross-platform game development framework was [http://www.cpcwiki.eu/index.php/CPCtelera released]&lt;br /&gt;
*21/03/15: '''[[C4CPC]]''', a cartridge replacement for PLUS and GX4000 was [http://www.cpcwiki.eu/index.php/C4CPC released]&lt;br /&gt;
*02/01/15: [[Cosmos|COSMOS]] v.22 (final version) has been [http://www.cpcwiki.eu/index.php/Cosmos released]&lt;br /&gt;
*14/12/14: '''X-MASS''', Add a [http://www.cpcwiki.eu/forum/news-events/x-mass-a-mass-storage-expansion-for-all-cpc/msg91048/#msg91048 128MB mass-storage] to your CPC.&lt;br /&gt;
*30/08/14: '''[[SymbOS]]''' 2.1 Final [http://www.cpcwiki.eu/forum/news-events/symbos-2-1-final-released released]&lt;br /&gt;
*14/08/14: '''[[PlayCity]]''', Add [http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/playcity-aka-ctc-ay-(mx4)-for-august-!!!/ 6ch stereo audio, Z80 CTC...] to your CPC.&lt;br /&gt;
*22/04/14: '''X-MEM''', Add up to [http://www.cpcwiki.eu/forum/news-events/x-mem-a-new-memory-expansion-for-all-cpc/ 512K RAM/ROM] on your 464/664/6128.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 12 last news only --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery widths=128px  heights=96px&amp;gt;&lt;br /&gt;
Image:Cpctelera compo.jpg|[http://www.cpcwiki.eu/index.php/CPCtelera CPCtelera]&lt;br /&gt;
Image:C4CPC_CprSelect.png|[http://www.cpcwiki.eu/index.php/C4CPC C4CPC]&lt;br /&gt;
Image:X-MASS01.jpg|[http://www.cpcwiki.eu/forum/news-events/x-mass-a-mass-storage-expansion-for-all-cpc/msg91048/#msg91048 X-MASS MX4 Board]&lt;br /&gt;
Image:symbos21cpc.gif|[[SymbOS]] 2.1&lt;br /&gt;
Image:PlayCity.jpg|[http://www.cpcwiki.eu/index.php/PlayCity PlayCity]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 5 last pictures only --&amp;gt;&lt;br /&gt;
&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 related ===&lt;br /&gt;
*[[CPCWiki updates]]&lt;br /&gt;
*[[Donors]]&lt;br /&gt;
&lt;br /&gt;
'''Become an Author!'''&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;/div&amp;gt; &lt;br /&gt;
&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;
&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]] | '''[[Special:ContributionScores|List of most active contributors]]'''&amp;lt;/small&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=94662</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=94662"/>
				<updated>2015-11-26T04:50:57Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
&amp;lt;center&amp;gt;This site is an encyclopaedia on all things [[Amstrad|Amstrad]] [[CPC|CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' about the CPC available.&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:forum.png|300px|link=http://www.cpcwiki.eu/forum]]      [[Image:Vs.png|300px|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;
&lt;br /&gt;
[[File:Cpctelera compo.jpg|thumb|320px|[http://www.cpcwiki.eu/index.php/CPCtelera CPCtelera]]]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;height:20em; overflow:auto; border: 1px solid #FFC9C9&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*26/11/15: '''[[WinApe|WinAPE]]''' 2.0 Beta 1 released. [http://www.winape.net/ Download]&lt;br /&gt;
*02/09/15: '''[[iMPdraw Lite v1.132]]''' is now released. [http://www.cpcwiki.eu/forum/programming/impdraw-v1-0f/60/ Download]&lt;br /&gt;
*28/08/15: '''[[FutureOS]] system .8''' comprehensive update released. [http://futureos.cpc-live.com Download]&lt;br /&gt;
*27/08/15: [[MegaFlashROManager|ROManager]] 2.14 released. [http://futureos.cpc-live.com/files/ROManager_ALL.zip Download]&lt;br /&gt;
*11/05/15: '''CPCtelera''', a cross-platform game development framework was [http://www.cpcwiki.eu/index.php/CPCtelera released]&lt;br /&gt;
*21/03/15: '''[[C4CPC]]''', a cartridge replacement for PLUS and GX4000 was [http://www.cpcwiki.eu/index.php/C4CPC released]&lt;br /&gt;
*02/01/15: [[Cosmos|COSMOS]] v.22 (final version) has been [http://www.cpcwiki.eu/index.php/Cosmos released]&lt;br /&gt;
*14/12/14: '''X-MASS''', Add a [http://www.cpcwiki.eu/forum/news-events/x-mass-a-mass-storage-expansion-for-all-cpc/msg91048/#msg91048 128MB mass-storage] to your CPC.&lt;br /&gt;
*30/08/14: '''[[SymbOS]]''' 2.1 Final [http://www.cpcwiki.eu/forum/news-events/symbos-2-1-final-released released]&lt;br /&gt;
*14/08/14: '''[[PlayCity]]''', Add [http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/playcity-aka-ctc-ay-(mx4)-for-august-!!!/ 6ch stereo audio, Z80 CTC...] to your CPC.&lt;br /&gt;
*22/04/14: '''X-MEM''', Add up to [http://www.cpcwiki.eu/forum/news-events/x-mem-a-new-memory-expansion-for-all-cpc/ 512K RAM/ROM] on your 464/664/6128.&lt;br /&gt;
*20/04/14: '''Breaking Baud''', [http://www.cpcwiki.eu/forum/demos/breaking-baud/ THE tape demo]. 2nd place at Revision!&lt;br /&gt;
*30/03/14: '''Superpix''', a new Picross-style game was [http://www.cpc-power.com/index.php?page=detail&amp;amp;num=10000 released].&lt;br /&gt;
*24/03/14: '''SAMdisk''' 3.8.2 [http://simonowen.com/samdisk/ released].&lt;br /&gt;
*23/03/14: [[PSX controller mod for Amstrad CPC]] by [[User:Forcy|Forcy]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 12 last news only --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery widths=128px  heights=96px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Image:C4CPC_CprSelect.png|[http://www.cpcwiki.eu/index.php/C4CPC C4CPC]&lt;br /&gt;
Image:X-MASS01.jpg|[http://www.cpcwiki.eu/forum/news-events/x-mass-a-mass-storage-expansion-for-all-cpc/msg91048/#msg91048 X-MASS MX4 Board]&lt;br /&gt;
&lt;br /&gt;
Image:PlayCity.jpg|[http://www.cpcwiki.eu/index.php/PlayCity PlayCity]&lt;br /&gt;
Image:symbos21cpc.gif|[[SymbOS]] 2.1&lt;br /&gt;
Image:superpix.png|[http://www.cpc-power.com/index.php?page=detail&amp;amp;num=10000 Superpix]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 5 last pictures only --&amp;gt;&lt;br /&gt;
&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 related ===&lt;br /&gt;
*[[CPCWiki updates]]&lt;br /&gt;
*[[Donors]]&lt;br /&gt;
&lt;br /&gt;
'''Become an Author!'''&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;/div&amp;gt; &lt;br /&gt;
&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;
&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]] | '''[[Special:ContributionScores|List of most active contributors]]'''&amp;lt;/small&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=94661</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=94661"/>
				<updated>2015-11-26T04:50:31Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
&amp;lt;center&amp;gt;This site is an encyclopaedia on all things [[Amstrad|Amstrad]] [[CPC|CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' about the CPC available.&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:forum.png|300px|link=http://www.cpcwiki.eu/forum]]      [[Image:Vs.png|300px|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;
&lt;br /&gt;
[[File:Cpctelera compo.jpg|thumb|320px|[http://www.cpcwiki.eu/index.php/CPCtelera CPCtelera]]]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;height:20em; overflow:auto; border: 1px solid #FFC9C9&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*26/11/15: '''[[WinAPE|WinApe]]''' 2.0 Beta 1 released. [http://www.winape.net/ Download]&lt;br /&gt;
*02/09/15: '''[[iMPdraw Lite v1.132]]''' is now released. [http://www.cpcwiki.eu/forum/programming/impdraw-v1-0f/60/ Download]&lt;br /&gt;
*28/08/15: '''[[FutureOS]] system .8''' comprehensive update released. [http://futureos.cpc-live.com Download]&lt;br /&gt;
*27/08/15: [[MegaFlashROManager|ROManager]] 2.14 released. [http://futureos.cpc-live.com/files/ROManager_ALL.zip Download]&lt;br /&gt;
*11/05/15: '''CPCtelera''', a cross-platform game development framework was [http://www.cpcwiki.eu/index.php/CPCtelera released]&lt;br /&gt;
*21/03/15: '''[[C4CPC]]''', a cartridge replacement for PLUS and GX4000 was [http://www.cpcwiki.eu/index.php/C4CPC released]&lt;br /&gt;
*02/01/15: [[Cosmos|COSMOS]] v.22 (final version) has been [http://www.cpcwiki.eu/index.php/Cosmos released]&lt;br /&gt;
*14/12/14: '''X-MASS''', Add a [http://www.cpcwiki.eu/forum/news-events/x-mass-a-mass-storage-expansion-for-all-cpc/msg91048/#msg91048 128MB mass-storage] to your CPC.&lt;br /&gt;
*30/08/14: '''[[SymbOS]]''' 2.1 Final [http://www.cpcwiki.eu/forum/news-events/symbos-2-1-final-released released]&lt;br /&gt;
*14/08/14: '''[[PlayCity]]''', Add [http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/playcity-aka-ctc-ay-(mx4)-for-august-!!!/ 6ch stereo audio, Z80 CTC...] to your CPC.&lt;br /&gt;
*22/04/14: '''X-MEM''', Add up to [http://www.cpcwiki.eu/forum/news-events/x-mem-a-new-memory-expansion-for-all-cpc/ 512K RAM/ROM] on your 464/664/6128.&lt;br /&gt;
*20/04/14: '''Breaking Baud''', [http://www.cpcwiki.eu/forum/demos/breaking-baud/ THE tape demo]. 2nd place at Revision!&lt;br /&gt;
*30/03/14: '''Superpix''', a new Picross-style game was [http://www.cpc-power.com/index.php?page=detail&amp;amp;num=10000 released].&lt;br /&gt;
*24/03/14: '''SAMdisk''' 3.8.2 [http://simonowen.com/samdisk/ released].&lt;br /&gt;
*23/03/14: [[PSX controller mod for Amstrad CPC]] by [[User:Forcy|Forcy]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 12 last news only --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery widths=128px  heights=96px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Image:C4CPC_CprSelect.png|[http://www.cpcwiki.eu/index.php/C4CPC C4CPC]&lt;br /&gt;
Image:X-MASS01.jpg|[http://www.cpcwiki.eu/forum/news-events/x-mass-a-mass-storage-expansion-for-all-cpc/msg91048/#msg91048 X-MASS MX4 Board]&lt;br /&gt;
&lt;br /&gt;
Image:PlayCity.jpg|[http://www.cpcwiki.eu/index.php/PlayCity PlayCity]&lt;br /&gt;
Image:symbos21cpc.gif|[[SymbOS]] 2.1&lt;br /&gt;
Image:superpix.png|[http://www.cpc-power.com/index.php?page=detail&amp;amp;num=10000 Superpix]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 5 last pictures only --&amp;gt;&lt;br /&gt;
&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 related ===&lt;br /&gt;
*[[CPCWiki updates]]&lt;br /&gt;
*[[Donors]]&lt;br /&gt;
&lt;br /&gt;
'''Become an Author!'''&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;/div&amp;gt; &lt;br /&gt;
&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;
&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]] | '''[[Special:ContributionScores|List of most active contributors]]'''&amp;lt;/small&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=94660</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=94660"/>
				<updated>2015-11-26T04:49:10Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
&amp;lt;center&amp;gt;This site is an encyclopaedia on all things [[Amstrad|Amstrad]] [[CPC|CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' about the CPC available.&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:forum.png|300px|link=http://www.cpcwiki.eu/forum]]      [[Image:Vs.png|300px|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;
&lt;br /&gt;
[[File:Cpctelera compo.jpg|thumb|320px|[http://www.cpcwiki.eu/index.php/CPCtelera CPCtelera]]]&amp;lt;/center&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;height:20em; overflow:auto; border: 1px solid #FFC9C9&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*26/11/15: '''[[WinAPE]]''' 2.0 Beta 1 released. [http://www.winape.net/ Download]&lt;br /&gt;
*02/09/15: '''[[iMPdraw Lite v1.132]]''' is now released. [http://www.cpcwiki.eu/forum/programming/impdraw-v1-0f/60/ Download]&lt;br /&gt;
*28/08/15: '''[[FutureOS]] system .8''' comprehensive update released. [http://futureos.cpc-live.com Download]&lt;br /&gt;
*27/08/15: [[MegaFlashROManager|ROManager]] 2.14 released. [http://futureos.cpc-live.com/files/ROManager_ALL.zip Download]&lt;br /&gt;
*11/05/15: '''CPCtelera''', a cross-platform game development framework was [http://www.cpcwiki.eu/index.php/CPCtelera released]&lt;br /&gt;
*21/03/15: '''[[C4CPC]]''', a cartridge replacement for PLUS and GX4000 was [http://www.cpcwiki.eu/index.php/C4CPC released]&lt;br /&gt;
*02/01/15: [[Cosmos|COSMOS]] v.22 (final version) has been [http://www.cpcwiki.eu/index.php/Cosmos released]&lt;br /&gt;
*14/12/14: '''X-MASS''', Add a [http://www.cpcwiki.eu/forum/news-events/x-mass-a-mass-storage-expansion-for-all-cpc/msg91048/#msg91048 128MB mass-storage] to your CPC.&lt;br /&gt;
*30/08/14: '''[[SymbOS]]''' 2.1 Final [http://www.cpcwiki.eu/forum/news-events/symbos-2-1-final-released released]&lt;br /&gt;
*14/08/14: '''[[PlayCity]]''', Add [http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/playcity-aka-ctc-ay-(mx4)-for-august-!!!/ 6ch stereo audio, Z80 CTC...] to your CPC.&lt;br /&gt;
*22/04/14: '''X-MEM''', Add up to [http://www.cpcwiki.eu/forum/news-events/x-mem-a-new-memory-expansion-for-all-cpc/ 512K RAM/ROM] on your 464/664/6128.&lt;br /&gt;
*20/04/14: '''Breaking Baud''', [http://www.cpcwiki.eu/forum/demos/breaking-baud/ THE tape demo]. 2nd place at Revision!&lt;br /&gt;
*30/03/14: '''Superpix''', a new Picross-style game was [http://www.cpc-power.com/index.php?page=detail&amp;amp;num=10000 released].&lt;br /&gt;
*24/03/14: '''SAMdisk''' 3.8.2 [http://simonowen.com/samdisk/ released].&lt;br /&gt;
*23/03/14: [[PSX controller mod for Amstrad CPC]] by [[User:Forcy|Forcy]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 12 last news only --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery widths=128px  heights=96px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Image:C4CPC_CprSelect.png|[http://www.cpcwiki.eu/index.php/C4CPC C4CPC]&lt;br /&gt;
Image:X-MASS01.jpg|[http://www.cpcwiki.eu/forum/news-events/x-mass-a-mass-storage-expansion-for-all-cpc/msg91048/#msg91048 X-MASS MX4 Board]&lt;br /&gt;
&lt;br /&gt;
Image:PlayCity.jpg|[http://www.cpcwiki.eu/index.php/PlayCity PlayCity]&lt;br /&gt;
Image:symbos21cpc.gif|[[SymbOS]] 2.1&lt;br /&gt;
Image:superpix.png|[http://www.cpc-power.com/index.php?page=detail&amp;amp;num=10000 Superpix]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 5 last pictures only --&amp;gt;&lt;br /&gt;
&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 related ===&lt;br /&gt;
*[[CPCWiki updates]]&lt;br /&gt;
*[[Donors]]&lt;br /&gt;
&lt;br /&gt;
'''Become an Author!'''&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;/div&amp;gt; &lt;br /&gt;
&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;
&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]] | '''[[Special:ContributionScores|List of most active contributors]]'''&amp;lt;/small&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&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Snapshot&amp;diff=93987</id>
		<title>Snapshot</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Snapshot&amp;diff=93987"/>
				<updated>2015-07-27T05:01:38Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: Additions to V3 including some WinAPE specific usage with descriptions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Snapshot (.SNA) file format  =&lt;br /&gt;
&lt;br /&gt;
The format was first defined for the [[CPCEMU|CPCEMU]] emulator but is now widely supported. The format was originally defined by [[Marco Vieth|Marco Vieth]]. Version 3 was defined by [[Ulrich Doewich|Ulrich Doewich]], [[Martin Korth|Martin Korth]], [[Richard Wilson|Richard Wilson]] and [[Kevin Thacker|Kevin Thacker]]. &lt;br /&gt;
&lt;br /&gt;
There are 3 versions defined in this document. Version 3 is the most recent and is currently supported by a few of the most recent emulators. &lt;br /&gt;
&lt;br /&gt;
Snapshots produced with [[CPCE|CPCE]] appears to be the most compatible and will run correctly using any emulator.&lt;br /&gt;
&lt;br /&gt;
Abbreviations: &lt;br /&gt;
&lt;br /&gt;
*[[Gate Array|GA = &amp;quot;Gate Array&amp;quot;]] &lt;br /&gt;
*[[CRTC|CRTC = &amp;quot;6845 Cathode Ray Tube Controller&amp;quot;]] &lt;br /&gt;
*[[8255|PPI = &amp;quot;Intel 8255 Programmable Peripheral Interface&amp;quot;]] &lt;br /&gt;
*[[PSG|PSG = &amp;quot;AY-3-8912 Programmable Sound Generator&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
= Version 1  =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| ''Offset (Hex)''&lt;br /&gt;
| ''Count''&lt;br /&gt;
| ''Description''&lt;br /&gt;
|-&lt;br /&gt;
| 00-07&lt;br /&gt;
| 8&lt;br /&gt;
| The identification string &amp;quot;MV - SNA&amp;quot;. This must exist for the snapshot to be valid.&lt;br /&gt;
|-&lt;br /&gt;
| 08-0f&lt;br /&gt;
| 8&lt;br /&gt;
| (not used; set to 0)&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 1&lt;br /&gt;
| snapshot version (1)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register F&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register A&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register C&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register B&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register E&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register D&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register L&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register H&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register R&lt;br /&gt;
|-&lt;br /&gt;
| 1a&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register I&lt;br /&gt;
|-&lt;br /&gt;
| 1b&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 interrupt flip-flop IFF0 (note 2)&lt;br /&gt;
|-&lt;br /&gt;
| 1c&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 interrupt flip-flop IFF1 (note 2)&lt;br /&gt;
|-&lt;br /&gt;
| 1d&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register IX (low) (note 5)&lt;br /&gt;
|-&lt;br /&gt;
| 1e&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register IX (high) (note 5)&lt;br /&gt;
|-&lt;br /&gt;
| 1f&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register IY (low) (note 5)&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register IY (high) (note 5)&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register SP (low) (note 5)&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register SP (high) (note 5)&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register PC (low) (note 5)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register PC (high) (note 5)&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 interrupt mode (0,1,2) (note 3)&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register F' (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register A' (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register C' (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| 29&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register B' (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| 2a&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register E' (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| 2b&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register D' (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| 2c&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register L' (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| 2d&lt;br /&gt;
| 1&lt;br /&gt;
| Z80 register H' (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| 2e&lt;br /&gt;
| 1&lt;br /&gt;
| GA: index of selected pen (note 10)&lt;br /&gt;
|-&lt;br /&gt;
| 2f-3f&lt;br /&gt;
| 1&lt;br /&gt;
| GA: current palette (note 11)&lt;br /&gt;
|-&lt;br /&gt;
| 40&lt;br /&gt;
| 1&lt;br /&gt;
| GA: multi configuration (note 12)&lt;br /&gt;
|-&lt;br /&gt;
| 41&lt;br /&gt;
| 1&lt;br /&gt;
| current RAM configuration (note 13)&lt;br /&gt;
|-&lt;br /&gt;
| 42&lt;br /&gt;
| 1&lt;br /&gt;
| CRTC: index of selected register (note 14)&lt;br /&gt;
|-&lt;br /&gt;
| 43-54&lt;br /&gt;
| 1&lt;br /&gt;
| CRTC: register data (0..17) (note 15)&lt;br /&gt;
|-&lt;br /&gt;
| 55&lt;br /&gt;
| 1&lt;br /&gt;
| current ROM selection (note 16)&lt;br /&gt;
|-&lt;br /&gt;
| 56&lt;br /&gt;
| 1&lt;br /&gt;
| PPI: port A (note 6)&lt;br /&gt;
|-&lt;br /&gt;
| 57&lt;br /&gt;
| 1&lt;br /&gt;
| PPI: port B (note 7)&lt;br /&gt;
|-&lt;br /&gt;
| 58&lt;br /&gt;
| 1&lt;br /&gt;
| PPI: port C (note 8)&lt;br /&gt;
|-&lt;br /&gt;
| 59&lt;br /&gt;
| 1&lt;br /&gt;
| PPI: control port (note 9)&lt;br /&gt;
|-&lt;br /&gt;
| 5a&lt;br /&gt;
| 1&lt;br /&gt;
| PSG: index of selected register (note 17)&lt;br /&gt;
|-&lt;br /&gt;
| 5b-6a&lt;br /&gt;
| 1&lt;br /&gt;
| PSG: register data (0,1,....15)&lt;br /&gt;
|-&lt;br /&gt;
| 6b&lt;br /&gt;
| 2&lt;br /&gt;
| memory dump size in Kilobytes (e.g. 64 for 64K, 128 for 128k) (note 18)&lt;br /&gt;
|-&lt;br /&gt;
| 6d-ff&lt;br /&gt;
| 1&lt;br /&gt;
| not used set to 0&lt;br /&gt;
|-&lt;br /&gt;
| 100-...&lt;br /&gt;
| 1&lt;br /&gt;
| memory dump&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes  ==&lt;br /&gt;
&lt;br /&gt;
1. All multi-byte values are stored in little-endian format (low byte followed by higher bytes). &lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;IFF0&amp;quot; reflects the state of the maskable interrupt (INT). &amp;quot;IFF1&amp;quot; is used to store the state of IFF0 when a non-maskable interrupt (NMI) is executed. Bit 0 of these bytes is significant. For CPCEMU compatibility, these bytes should be set to &amp;quot;1&amp;quot; when the IFF flip-flop is &amp;quot;1&amp;quot; and &amp;quot;0&amp;quot; when the flip-flop is &amp;quot;0&amp;quot;. For compatibility with other emulators, bits 7-1 should be set to &amp;quot;0&amp;quot;. When bit 0 of &amp;quot;IFF0&amp;quot; is &amp;quot;0&amp;quot; maskable interrupts will be ignored. When bit 0 of &amp;quot;IFF1&amp;quot; is &amp;quot;1&amp;quot; maskable interrupts will be acknowledged and executed. See the document about the Z80 for more information. &lt;br /&gt;
&lt;br /&gt;
3. This byte will be 0, 1 or 2 for the interrupt modes 0, 1 or 2. The interrupt mode is set using the &amp;quot;IM x&amp;quot; instructions. See the document about the Z80 for more information. &lt;br /&gt;
&lt;br /&gt;
4. These registers are from the alternate register set of the Z80. &lt;br /&gt;
&lt;br /&gt;
5. These registers are 16-bit. &amp;quot;low&amp;quot; indicates bits 7..0, &amp;quot;high&amp;quot;indicates bits 15..8. &lt;br /&gt;
&lt;br /&gt;
6. This byte represents the inputs to PPI port A regardless of the input/output setting of this port. &lt;br /&gt;
&lt;br /&gt;
7. This byte represents the inputs to PPI port B regardless of the input/output setting of this port. &lt;br /&gt;
&lt;br /&gt;
8. This byte represents the outputs from port C regardless of the input/output setting of this port. &lt;br /&gt;
&lt;br /&gt;
9. This byte represents the PPI control byte which defines the input/output and mode of each port and not the last value written to this port. For CPCEMU compatibility bit 7 of this byte must be set to &amp;quot;1&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
10. This byte in the snapshot represents the selected pen register of the Gate-Array. This byte is the last value written to this port. Bit 7,6,5 should be set to &amp;quot;0&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
11. This byte in the snapshot represents the multi-configuration register of the Gate-Array. This byte is the last byte written to this register. For CPCEMU compatibility, bit 7 should be set to &amp;quot;1&amp;quot; and bit 6 and bit 5 set to &amp;quot;0&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
12. These bytes are the current palette. For CPCEMU compatibility, these bytes should have bit 7=bit 6=bit 5=&amp;quot;0&amp;quot;. Bits 4..0 define the colour using the hardware colour code. The colours are stored in the order pen 0, pen1, pen 2,...,pen 15 followed by border colour. &lt;br /&gt;
&lt;br /&gt;
13. This byte represents a ram configuration for a Dk'Tronics/Dobbertin/Amstrad compatible RAM expansion, or the built in RAM expansion of the CPC6128 and CPC6128+. Bits 5..0 define the ram expansion code. For CPCEMU compatibility, bit 7 and bit 6 of this byte should be set to &amp;quot;0&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
14. This byte in the snapshot represents the index of the currently selected CRTC register. For compatibility with CPCEMU this value should be in the range 0-31. &lt;br /&gt;
&lt;br /&gt;
15. These bytes represent the data of the CRTC's registers. &lt;br /&gt;
&lt;br /&gt;
16. This byte in the snapshot represents the last byte written to the &amp;quot;ROM select&amp;quot; I/O port. &lt;br /&gt;
&lt;br /&gt;
17. This byte in the snapshot represents the index of the currently selected PSG register. For CPCEMU compatibility, this byte should be in the range 0-15. &lt;br /&gt;
&lt;br /&gt;
18. the first 64k is always the base 64k of ram. The second 64k (if present) is the additional ram in a Dk'Tronics/Dobbertin/Amstrad compatible RAM expansion or the internal ram of the CPC6128/CPC6128+. The memory dump is not dependant on the current RAM configuration. Note that CPCEMU can only write a 64K or 128K snapshot. &lt;br /&gt;
&lt;br /&gt;
= Changes and additions in Version 2 from Version 1  =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| ''Offset (Hex)''&lt;br /&gt;
| ''Count''&lt;br /&gt;
| ''Description''&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 1&lt;br /&gt;
| snapshot version (2)&lt;br /&gt;
|-&lt;br /&gt;
| 6d&lt;br /&gt;
| 1&lt;br /&gt;
| CPC Type: &lt;br /&gt;
*0 = CPC464 &lt;br /&gt;
*1 = CPC664 &lt;br /&gt;
*2 = CPC6128 &lt;br /&gt;
*3 = unknown&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 6e&lt;br /&gt;
| 1&lt;br /&gt;
| interrupt number (0..5) (note 1a)&lt;br /&gt;
|-&lt;br /&gt;
| 6f-74&lt;br /&gt;
| 6&lt;br /&gt;
| 6 multimode bytes (note 1b)&lt;br /&gt;
|-&lt;br /&gt;
| 75-ff&lt;br /&gt;
| x&lt;br /&gt;
| (not used)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes  ==&lt;br /&gt;
&lt;br /&gt;
1. If standard CPC raster interrupts are used, interrupts are acknowledged and &amp;quot;executed&amp;quot; at the time they are requested, then there will be 6 interrupts executed per screen update cycle. &lt;br /&gt;
&lt;br /&gt;
*CPCEMU uses a simple system to emulate the interrupts. It is assumed there are exactly 6 interrupts per screen update cycle (the interrupts are assumed to occur at a frequency of 300Hz). This byte records the interrupt number in the current screen update cycle. More accurate emulators use the correct interrupt generation method and may ignore this byte. For CPCEMU compatibility, these emulators should set this byte to &amp;quot;0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*CPCEMU uses a simple system to emulate the screen display. It allows the mode to be changed in each of the 6 interrupts that occur during a single 50Hz/60Hz period. These bytes represent the mode in each of these sections, i.e. the screen modes (0,1 or 2) for the interrupts 0..5. More accurate emulators support changing of the screen mode at any point supported by the Amstrad hardware, these emulators should write &amp;quot;0&amp;quot; for all these bytes.&lt;br /&gt;
&lt;br /&gt;
= Changes and additions in Version 3 from Version 2  =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| ''Offset (Hex)''&lt;br /&gt;
| ''Count''&lt;br /&gt;
| ''Description''&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 1&lt;br /&gt;
| snapshot version (3)&lt;br /&gt;
|-&lt;br /&gt;
| 6d&lt;br /&gt;
| 1&lt;br /&gt;
| CPC Type: &lt;br /&gt;
*0 = CPC464 &lt;br /&gt;
*1 = CPC664 &lt;br /&gt;
*2 = CPC6128 &lt;br /&gt;
*3 = unknown &lt;br /&gt;
*4 = 6128 Plus &lt;br /&gt;
*5 = 464 Plus &lt;br /&gt;
*6 = GX4000&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 99&lt;br /&gt;
| 1&lt;br /&gt;
| Monitor VHold Value (-45 to +85)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 9a&lt;br /&gt;
| 1&lt;br /&gt;
| Memory Expansion Enable (when Bit 7 is set)&lt;br /&gt;
*Bit 0 = 128K memory (Banks C4..C7)&lt;br /&gt;
*Bit 1 = 256K memory (Banks C4..DF)&lt;br /&gt;
*Bit 2 = 256K silicon disc (Banks E4..FF)&lt;br /&gt;
*Bit 3 = 4M expansion&lt;br /&gt;
*Bit 7 = Always set if this is valid &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 9b&lt;br /&gt;
| 1&lt;br /&gt;
| Fast Disc emulation mode (0=off, 1=on) (WinAPE)&lt;br /&gt;
|-&lt;br /&gt;
| 9c&lt;br /&gt;
| 1&lt;br /&gt;
| FDD motor drive state (0=off, 1=on)&lt;br /&gt;
|-&lt;br /&gt;
| 9d-a0&lt;br /&gt;
| 1&lt;br /&gt;
| FDD current physical track (note 15)&lt;br /&gt;
|-&lt;br /&gt;
| a1&lt;br /&gt;
| 1&lt;br /&gt;
| Printer Data/Strobe Register (note 1)&lt;br /&gt;
|-&lt;br /&gt;
| a2-a3&lt;br /&gt;
| 2&lt;br /&gt;
| Current frame scan line since monitor retrace (note16)&lt;br /&gt;
|-&lt;br /&gt;
| a4&lt;br /&gt;
| 1&lt;br /&gt;
| CRTC type: &lt;br /&gt;
*0 = HD6845S/UM6845 &lt;br /&gt;
*1 = UM6845R &lt;br /&gt;
*2 = MC6845 &lt;br /&gt;
*3 = 6845 in CPC+ ASIC &lt;br /&gt;
*4 = 6845 in Pre-ASIC&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| a9&lt;br /&gt;
| 1&lt;br /&gt;
| CRTC horizontal character counter register (note 11)&lt;br /&gt;
|-&lt;br /&gt;
| aa&lt;br /&gt;
| 1&lt;br /&gt;
| unused (0)&lt;br /&gt;
|-&lt;br /&gt;
| ab&lt;br /&gt;
| 1&lt;br /&gt;
| CRTC character-line counter register (note 2)&lt;br /&gt;
|-&lt;br /&gt;
| ac&lt;br /&gt;
| 1&lt;br /&gt;
| CRTC raster-line counter register (note 3)&lt;br /&gt;
|-&lt;br /&gt;
| ad&lt;br /&gt;
| 1&lt;br /&gt;
| CRTC vertical total adjust counter register (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| ae&lt;br /&gt;
| 1&lt;br /&gt;
| CRTC horizontal sync width counter (note 5)&lt;br /&gt;
|-&lt;br /&gt;
| af&lt;br /&gt;
| 1&lt;br /&gt;
| CRTC vertical sync width counter (note 6)&lt;br /&gt;
|-&lt;br /&gt;
| b0-b1&lt;br /&gt;
| 1&lt;br /&gt;
| &lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| ''Bit''&lt;br /&gt;
| ''Function''&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| if &amp;quot;1&amp;quot; VSYNC is active, if &amp;quot;0&amp;quot; VSYNC is inactive (note 8)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| if &amp;quot;1&amp;quot; HSYNC is active, if &amp;quot;0&amp;quot; HSYNC is inactive (note 9)&lt;br /&gt;
|-&lt;br /&gt;
| 2-7&lt;br /&gt;
| reserved&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| if &amp;quot;1&amp;quot; Vertical Total Adjust is active, if &amp;quot;0&amp;quot; Vertical Total Adjust is inactive (note 10)&lt;br /&gt;
|-&lt;br /&gt;
| 8-14&lt;br /&gt;
| Reserved (0)&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| if &amp;quot;1&amp;quot; use extended Interrupt Control Status Register (WinAPE)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| b2&lt;br /&gt;
| 1&lt;br /&gt;
| GA vsync delay counter (note 14)&lt;br /&gt;
|-&lt;br /&gt;
| b3&lt;br /&gt;
| 1&lt;br /&gt;
| GA interrupt scanline counter (note 12)&lt;br /&gt;
|-&lt;br /&gt;
| b4&lt;br /&gt;
| 1&lt;br /&gt;
| interrupt request flag (0=no interrupt requested, 1=interrupt requested) (note 13)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| b5&lt;br /&gt;
| 1&lt;br /&gt;
| Interrupt Control Status Register (WinAPE) (note 17)&lt;br /&gt;
|-&lt;br /&gt;
| b6&lt;br /&gt;
| 1&lt;br /&gt;
| Plus features disabled (0=enabled, 1=disabled)&lt;br /&gt;
|-&lt;br /&gt;
| b7&lt;br /&gt;
| 1&lt;br /&gt;
| Plus PPI Emulation (0=Standard 8255 emulation, 1=Plus PPI emulation)&lt;br /&gt;
|-&lt;br /&gt;
| b8-df&lt;br /&gt;
| 28&lt;br /&gt;
| unused (0)&lt;br /&gt;
|-&lt;br /&gt;
| e0&lt;br /&gt;
| 20&lt;br /&gt;
| Emulator ID String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes  ==&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
&lt;br /&gt;
1. This byte in the snapshot represents the last byte written to the printer I/O port (this byte does not include the automatic inversion of the strobe caused by the Amstrad hardware). &lt;br /&gt;
&lt;br /&gt;
2. This register is internal to the CRTC and counts the number of character-lines. The counter counts up. This value is in the range 0-127. (This counter is compared against CRTC register 4). &lt;br /&gt;
&lt;br /&gt;
3. This register is internal to the CRTC and counts the number of raster-lines. The counter counts up. This value is in the range 0-31. (This counter is compared against CRTC register 9). &lt;br /&gt;
&lt;br /&gt;
4. This register is internal to the CRTC and counts the number of raster-lines during vertical adjust. The counter counts up. This value is in the range 0-31. This should be ignored if the CRTC is not &amp;quot;executing&amp;quot; vertical. adjust.(This counter is compared against CRTC register 5). &lt;br /&gt;
&lt;br /&gt;
5. This register is internal to the CRTC and counts the number of characters during horizontal sync. This counter counts up. This value is in the range 0-16. This should be ignored if the CRTC is not &amp;quot;executing&amp;quot; horizontal sync. (This counter is compared against CRTC register 3). &lt;br /&gt;
&lt;br /&gt;
6. This register is internal to the CRTC and counts the number of scan-lines during vertical sync. This counter counts up. This value is in the range 0-16. This should be ignored if the CRTC is not &amp;quot;executing&amp;quot; vertical sync. (This counter is compared against CRTC register 3). &lt;br /&gt;
&lt;br /&gt;
7. These bytes define the internal state of the CRTC. Each bit in these bytes represents a state. &lt;br /&gt;
&lt;br /&gt;
8. When VSYNC is active, the CRTC is &amp;quot;executing&amp;quot; vertical sync, and the vertical sync width counter in the snapshot is used. &lt;br /&gt;
&lt;br /&gt;
9. When HSYNC is active, the CRTC is &amp;quot;executing&amp;quot; horizontal sync width counter in the snapshot is used. &lt;br /&gt;
&lt;br /&gt;
10. When Vertical total adjust is active, the CRTC is &amp;quot;executing&amp;quot; vertical total adjust and the vertical total adjust counter in the snapshot is used. &lt;br /&gt;
&lt;br /&gt;
11. This register is internal to the CRTC and counts the number of characters. This counter counts up. This value is in the range 0-255. (This counter is compared against CRTC register 0). &lt;br /&gt;
&lt;br /&gt;
12. This counter is internal to the GA and counts the number of HSYNCs. This counter is used to generate CPC raster interrupts. This counter counts up. This value is in the range 0-51. &lt;br /&gt;
&lt;br /&gt;
13. This flag is &amp;quot;1&amp;quot; if a interrupt request has been sent to the Z80 and it has not yet been acknowledged by the Z80. (A interrupt request is sent by the GA for standard CPC raster interrupts or by the ASIC for raster or dma interrupts). &lt;br /&gt;
&lt;br /&gt;
14. This is a counter internal to the GA and counts the number of HSYNCs since the start of the VSYNC and it is used to reset the interrupt counter to synchronise interrupts with the VSYNC. This counter counts up. This value is between 0 and 2. If this value is 0, the counter is inactive. If this counter is 1 or 2 the counter is active.&lt;br /&gt;
&lt;br /&gt;
15. This is the current cylinder for each of 4 drives.&lt;br /&gt;
&lt;br /&gt;
16. In WinAPE this counter is reset if a VSYNC occurs which causes the monitor to retrace vertically. This occurs if the VSYNC signal is active and this counter is greater than a threshold set by the V-Hold (normally 295 when V-Hold is 0), or if the counter reaches the maximum value (normally 351 when V-Hold is 0).&lt;br /&gt;
&lt;br /&gt;
17. Since Plus emulation requires more information than simply whether an interrupt is active, this value (as used internally by WinAPE) contains: Bit 7 - Gate Array (or PRI) interrupt. Bit 6 - DMA Channel 0 interrupt. Bit 5 - DMA Channel 1 interrupt. Bit 4 - DMA Channel 2 interrupt. It can be a combination of all or any interrupt sources. Interrupts are executed in the order raster, DMA 2, DMA 1, DMA 0.&lt;br /&gt;
&lt;br /&gt;
Immediatly following the memory dump there is optional data which is seperated into chunks. &lt;br /&gt;
&lt;br /&gt;
Each chunk of data has a header and this is followed by the data in the chunk. The header has the following format: &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| ''Offset (Hex)''&lt;br /&gt;
| ''Count''&lt;br /&gt;
| ''Description''&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 4&lt;br /&gt;
| Chunk name (note 1)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
| Chunk data length (note 2)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
&lt;br /&gt;
1. The chunks are defined with 4-byte character codes. (e.g. &amp;quot;CPC+&amp;quot;). In this example, the 4-byte character code would be stored in the file as 'C' then 'P' then 'C' then '+'. &lt;br /&gt;
&lt;br /&gt;
2. The &amp;quot;Chunk data length&amp;quot; defines the length of data following the header and does not include the size of the header. This number is stored in little endian format. &lt;br /&gt;
&lt;br /&gt;
3. If a emulator finds a chunk which it does not support then it should skip the chunk and continue with the next chunk in the file. Therefore an emulator author may add emulator specific chunks to the file and it will not prevent the snapshot from being used with other emulators that do not recognise the added chunks. &lt;br /&gt;
&lt;br /&gt;
4. There is not a terminator chunk. The snapshot reader should determine if there are more chunks based on the size of data remaining to be read from the file. &lt;br /&gt;
&lt;br /&gt;
The following chunks are currently defined: &lt;br /&gt;
&lt;br /&gt;
=== CPC+ Chunk  ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| ''Offset (Hex)''&lt;br /&gt;
| ''Length''&lt;br /&gt;
| ''Addr in ASIC register-ram''&lt;br /&gt;
| ''Description''&lt;br /&gt;
|-&lt;br /&gt;
| 000-7FF&lt;br /&gt;
| 800&lt;br /&gt;
| 4000-4FFF&lt;br /&gt;
| Sprite Bitmaps (note 1)&lt;br /&gt;
|-&lt;br /&gt;
| 800-87F&lt;br /&gt;
| 8*16&lt;br /&gt;
| 6000-607F&lt;br /&gt;
| Sprite Attributes (see below) (note 2)&lt;br /&gt;
|-&lt;br /&gt;
| 880-8BF&lt;br /&gt;
| 32*2&lt;br /&gt;
| 6400-643F&lt;br /&gt;
| Palettes (note 3)&lt;br /&gt;
|-&lt;br /&gt;
| 8C0&lt;br /&gt;
| 1&lt;br /&gt;
| 6800&lt;br /&gt;
| Programmable Raster Interrupt (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| 8C1&lt;br /&gt;
| 1&lt;br /&gt;
| 6801&lt;br /&gt;
| Screen split scan-line (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| 8C2&lt;br /&gt;
| 2&lt;br /&gt;
| 6802-6803&lt;br /&gt;
| Screen split secondary screen-address (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| 8C4&lt;br /&gt;
| 1&lt;br /&gt;
| 6804&lt;br /&gt;
| Soft scroll control register (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| 8C5&lt;br /&gt;
| 1&lt;br /&gt;
| 6805&lt;br /&gt;
| Interrupt vector (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| 8C6-8C7&lt;br /&gt;
| 2&lt;br /&gt;
| -&lt;br /&gt;
| unused (0)&lt;br /&gt;
|-&lt;br /&gt;
| 8C8-8CF&lt;br /&gt;
| 8&lt;br /&gt;
| 6808-680f&lt;br /&gt;
| Analogue input channels 0-7 (note 5)&lt;br /&gt;
|-&lt;br /&gt;
| 8D0-8DB&lt;br /&gt;
| 3*4&lt;br /&gt;
| 6C00-6C0B&lt;br /&gt;
| Sound DMA channel attributes 0-2 (see below) (note 6)&lt;br /&gt;
|-&lt;br /&gt;
| 8DC-8DE&lt;br /&gt;
| 3&lt;br /&gt;
| -&lt;br /&gt;
| unused (0)&lt;br /&gt;
|-&lt;br /&gt;
| 8DF&lt;br /&gt;
| 1&lt;br /&gt;
| 6C0F&lt;br /&gt;
| DMA Control/Status (note 4)&lt;br /&gt;
|-&lt;br /&gt;
| 8E0-8F4&lt;br /&gt;
| 3*7&lt;br /&gt;
| Internal&lt;br /&gt;
| DMA channel 0-2 internal registers (see below) (note 7)&lt;br /&gt;
|-&lt;br /&gt;
| 8F5&lt;br /&gt;
| 1&lt;br /&gt;
| Internal&lt;br /&gt;
| gate array A0 register value (note 8)&lt;br /&gt;
|-&lt;br /&gt;
| 8F6&lt;br /&gt;
| 1&lt;br /&gt;
| Internal&lt;br /&gt;
| gate array A0 lock: 0=locked, 1=unlocked (note 9)&lt;br /&gt;
|-&lt;br /&gt;
| 8F7&lt;br /&gt;
| 1&lt;br /&gt;
| Internal&lt;br /&gt;
| ASIC unlock sequence state (note 10)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Notes  ===&lt;br /&gt;
&lt;br /&gt;
1. The sprite data is packed, with two sprite pixels per byte. Bits 7..4 define the first pixel and bits 3..0 define the second pixel. &lt;br /&gt;
&lt;br /&gt;
2. The attributes for each sprite take 8 bytes. Each attribute block has the following format: &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| ''Offset (Hex)''&lt;br /&gt;
| ''Length''&lt;br /&gt;
| ''Description''&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 2&lt;br /&gt;
| Sprite X (see note)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| Sprite Y (see note)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 1&lt;br /&gt;
| Sprite Magnification (see note)&lt;br /&gt;
|-&lt;br /&gt;
| 5-7&lt;br /&gt;
| 3&lt;br /&gt;
| unused (0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: the Sprite X, Y and magnification are in the same order as the ASIC registers &lt;br /&gt;
&lt;br /&gt;
3. This is a direct copy of the palette in CPC+ ASIC Ram. There are 32 colours each with 2-bytes per colour. &lt;br /&gt;
&lt;br /&gt;
4. These bytes in the snapshot represent the last value written to these ASIC registers. &lt;br /&gt;
&lt;br /&gt;
5. These bytes represent the inputs to the analogue channels. &lt;br /&gt;
&lt;br /&gt;
6. The attributes for each DMA channel take 4 bytes. Each attribute block has the following format: &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| ''Offset (Hex)''&lt;br /&gt;
| ''Length''&lt;br /&gt;
| ''Description''&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 2&lt;br /&gt;
| DMA Channel address (see note)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
| DMA Channel prescalar (see note)&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
| unused (0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: the DMA address and prescalar are in the same order as the ASIC registers. &lt;br /&gt;
&lt;br /&gt;
7 These registers are internal to the CPC+ and define the current DMA operation: &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| ''Offset (Hex)''&lt;br /&gt;
| ''Length''&lt;br /&gt;
| ''Description''&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 2&lt;br /&gt;
| loop counter (note a)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| loop address (note b)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 2&lt;br /&gt;
| pause count (note c)&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 1&lt;br /&gt;
| pause prescalar count (note d)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
a. This value represents the number of loops remaining. 0 = none. This count is between 0..0FFF. This counter counts down. &lt;br /&gt;
&lt;br /&gt;
b. This is the Amstrad memory address to loop back to. It is a pointer to the DMA instruction after the last REPEAT instruction. &lt;br /&gt;
&lt;br /&gt;
c. This value represents the pause count and the count is between 0...0FFF. (TO BE CHECKED: down counter? what exactly does it represent) &lt;br /&gt;
&lt;br /&gt;
d. This value represents the pause prescalar count and the count is between 0..FF. (TO BE CHECKED: down counter? what exactly does it represent) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; 8. This value represents the last value written to this I/O port. &lt;br /&gt;
&lt;br /&gt;
9. This value represents the lock status of the ASIC. If the ASIC is un-locked then the advanced features and ASIC registers are accessible. &lt;br /&gt;
&lt;br /&gt;
10. This value represents the current unlock sequence state. &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| ''State ID''&lt;br /&gt;
| ''Synchronised State''&lt;br /&gt;
| ''Note''&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Not synchronised&lt;br /&gt;
| ASIC is waiting for first non-zero byte to be written, this is the first synchronisation byte required&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Not synchronised&lt;br /&gt;
| ASIC is waiting for zero byte to be written, this is the second synchronisation byte required&lt;br /&gt;
|-&lt;br /&gt;
| 2..10&lt;br /&gt;
| synchronised&lt;br /&gt;
| ASIC is waiting for byte from unlock sequence. e.g. if &amp;quot;2&amp;quot;, ASIC is waiting for &amp;amp;amp;FF, the first byte of the unlock sequence. if &amp;quot;3&amp;quot; ASIC is waiting for &amp;amp;amp;77, the second byte of the unlock sequence.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68830</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68830"/>
				<updated>2011-07-27T03:35:43Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Welcome to the Amstrad CPC Wiki! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
== Welcome to the Amstrad CPC Wiki!  == &lt;br /&gt;
&amp;lt;br&amp;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;
*26/07/11: '''[[WinApe|WinAPE 2.0A18]]''' released, get it from '''[http://www.winape.net/downloads.jsp WinAPE downloads]''' (if it doesn't update automatically).&lt;br /&gt;
*23/07/11: '''[[QuickCMD|Quickcmd v2.1]]''' released!&lt;br /&gt;
*21/07/11: Bryce has released the '''[[MegaFlash|MegaFlash]]'''. Also the [[MegaFlashROManager]] was released by TFM.&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;
*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>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68829</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68829"/>
				<updated>2011-07-27T03:34:17Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Welcome to the Amstrad CPC Wiki! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
== Welcome to the Amstrad CPC Wiki!  == &lt;br /&gt;
&amp;lt;br&amp;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;
*26/07/11: '''[[WinApe|WinAPE 2.0A18]]''' released, get it from '''[http://www.winape.net/downloads.jsp WinAPE download]''' (if it doesn't update automatically).&lt;br /&gt;
*23/07/11: '''[[QuickCMD|Quickcmd v2.1]]''' released!&lt;br /&gt;
*21/07/11: Bryce has released the '''[[MegaFlash|MegaFlash]]'''. Also the [[MegaFlashROManager]] was released by TFM.&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;
*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>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68828</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=68828"/>
				<updated>2011-07-27T03:32:50Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Welcome to the Amstrad CPC Wiki! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ &lt;br /&gt;
== Welcome to the Amstrad CPC Wiki!  == &lt;br /&gt;
&amp;lt;br&amp;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;
*26/07/11: '''[[WinApe|WinAPE 2.0A18]]''' released, get it from '''[http://www.winape.net/download WinAPE download]''' (if it doesn't update automatically).&lt;br /&gt;
*23/07/11: '''[[QuickCMD|Quickcmd v2.1]]''' released!&lt;br /&gt;
*21/07/11: Bryce has released the '''[[MegaFlash|MegaFlash]]'''. Also the [[MegaFlashROManager]] was released by TFM.&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;
*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>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Datasheet_AY-8913&amp;diff=66943</id>
		<title>Datasheet AY-8913</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Datasheet_AY-8913&amp;diff=66943"/>
				<updated>2011-03-14T01:58:24Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Amplitude Control (Registers R10,R11,R12) */ fixed table format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General Instruments - AY-3-8910, AY-3-8912, AY-3-8913 Programmable Sound Generator ==&lt;br /&gt;
&lt;br /&gt;
=== FEATURES ===&lt;br /&gt;
&lt;br /&gt;
* Full Software Control of Sound Generation &lt;br /&gt;
* Interface to Most 8-bit and 16-bit Microprocessors &lt;br /&gt;
* Three independantly Programmed Analog Outputs &lt;br /&gt;
* Two 8-bit General Purpose I/O ports (AY-3-8910) &lt;br /&gt;
* One 8-bit General Purpose I/O port (AY-3-8912) &lt;br /&gt;
* Single +5 Volt Supply &lt;br /&gt;
&lt;br /&gt;
== DESCRIPTION ==&lt;br /&gt;
&lt;br /&gt;
The [[AY]]-3-8910/8912/8913 Programmable Sound Generator (PSG) is a LSI Circuit which can produce a wide variety of complex sounds under software control. The AY-3-8910/8912/8913 is manufactured in the General Instrument N-Channel Ion Implant Process. Operation requires a single +5V power supply, a TTL compatible clock, and a microprocessor controller such as the General Instrument 16-bit CP1610 or one of the PIC1650 series of 8-bit microcomputers. &lt;br /&gt;
&lt;br /&gt;
The PSG is easily interfaced to any bus orientation system, its flexibility makes it useful in applications such as music synthesis, sound effects generation, audible alarms, tone signalling and FSK modems. The analog sound outputs can each provide 4bits of logarithmic digital to analog conversion greatly enhancing the dynamic range of the sounds produced. &lt;br /&gt;
&lt;br /&gt;
In order to perform sound effects while allowing the processor to continue its other tasks, the PSG can continue to produce sound after the initial commands have been given by the control processor. The fact that realistic sound production often involves more than one effect is satisfied by the three independantly controllable channels available in the PSG. &lt;br /&gt;
&lt;br /&gt;
All of the circuit control signals are digital in nature and intended to be provided directly by a microprocessor/microcomputer. This means that one PSG can produce the full range of required sounds with no change in external circuitry. Since the frequency response of the PSG ranges from sub-audible at its lowest frequency to post-audible at its highest frequency, there are few sounds which are beyond reproduction ith only the simplest electical connections. &lt;br /&gt;
&lt;br /&gt;
Since most applications of a microprocessor/PSG system would also require interfacing between the outside world and the microprocessor, this facility has been designed into the PSG. The AY-3-8910 has two general purpose 8-bit I/O ports and is supplied in a 40 lead package; the AY-3-8912 has one port and 28 leads; the AY-3-8913 has no ports and 24-leads. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PIN CONFIGURATIONS ==&lt;br /&gt;
&lt;br /&gt;
=== 40 LEAD DUAL IN LINE ===&lt;br /&gt;
&lt;br /&gt;
AY-3-8910&lt;br /&gt;
&lt;br /&gt;
[[Image:psg14.gif]]&lt;br /&gt;
&lt;br /&gt;
=== 28 LEAD DUAL IN LINE ===&lt;br /&gt;
&lt;br /&gt;
AY-3-8912&lt;br /&gt;
&lt;br /&gt;
[[Image:psg12.gif]]&lt;br /&gt;
&lt;br /&gt;
=== 24 LEAD DUAL IN LINE ===&lt;br /&gt;
&lt;br /&gt;
AY-3-8913&lt;br /&gt;
&lt;br /&gt;
[[Image:psg13.gif]]&lt;br /&gt;
&lt;br /&gt;
== PIN FUNCTIONS ==&lt;br /&gt;
&lt;br /&gt;
'''DA7--DA0 (input/output/high impedance)   pins 30--37 (AY-3-8910)   pins 21--28 (AY-3-8912)   pins 4--11 (AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
'''Data/Address 7--0:'''&lt;br /&gt;
&lt;br /&gt;
These 8 lines comprise the 8-bit bidirectional bus used by the microprocessor to send both data and addresses to the PSG and to recieve data from the PSG. In the data mode, DA7--DA0 correspond to Register Array bits B7--B0. In the address mode, DA3--DA0 select the register number (0--17 8) and a DA7-DA4 in conjunction with address inputs /A9 and A8 for the high order address (chip select). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''A8 (input):   pin 25 (AY-3-8910)   pin 17 (AY-3-8912)   pin 23 (AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''/A9 (input):   pin 24 (AY-3-8910)   pin 28 (AY-3-8912)   (not provided on AY-3-8913)''' &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''/Address 9,Address 8'''&lt;br /&gt;
&lt;br /&gt;
These &amp;quot;extra&amp;quot; address bits are made available to enable the positioning of the PSG (assigning a 16 word memory space) in a total 1,024 word memory area rather than in a 256 word memory area as defined by address bits DA7--DA0 alone. If the memory size does not require the use of these extra address lines they may be left unconnected as each is provided with either an on-chip pull down (/A9) or pull-up (A8) resistor. In &amp;quot;noisy&amp;quot; environments, however, it is recommended that /A9 and A8 be tied to an external ground and +5V, respectively, if they are not to be used. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''/RESET (input):   pin 23 (AY-3-8910)   pin 21 (AY-3-8913)   pin 16 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
For initialization/power on purposes, applying a logic &amp;quot;0&amp;quot; (ground) to the /Reset pin will reset all registers to &amp;quot;0&amp;quot;. The /Reset pin is provided with an on-chip pull-up resistor. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CLOCK (signal):   pin 22 (AY-3-8910)   pin 20 (AY-3-8913)   pin 15 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
This TTL-compatible input supplies the timing reference for the Tone, Noise and Envelope Generators. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BDIR,BC2,BC1 (inputs):   pins 27,28,29 (AY-3-8910)   pins 18,19,20 (AY-3-8912)   pins 2,3 (No BC2 on AY-3-8913 see below)''' &lt;br /&gt;
&lt;br /&gt;
'''Bus DiRection, Bus Control 2,1'''&lt;br /&gt;
&lt;br /&gt;
These bus control signals are generated directly by the CP1610 series of microprocessors to control all external and internal bus operations in the PSG. When using a processor other than the Cp1610, these signals can be provided either by comparable bus signals or by simulating the signals on I/O lines of the processor. The PSG decodes these signals as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|''BDIR''||''BC2''||''BC1''||''CP1610 Function''||''PSG Function''&lt;br /&gt;
|-&lt;br /&gt;
|0||0||0||NACT||INACTIVE. See 010 (IAB) &lt;br /&gt;
|-&lt;br /&gt;
|0||0||1||ADAR||LATCH ADDRESS. See 111 (INTAK) &lt;br /&gt;
|-&lt;br /&gt;
|0||1||0||IAB||INACTIVE: The PSG/CPU bus is inactive, DA7--DA0 are in high impedence state &lt;br /&gt;
|-&lt;br /&gt;
|0||1||1||DTB||READ FROM PSG. This signal causes the contents of the register which is currently addressed to appear on the PSG/CPU bus. DA7--DA0 are in output mode.  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||0||BAR||LATCH ADDRESS. See 111 (INTAK) &lt;br /&gt;
|-&lt;br /&gt;
|1||0||1||DW||INACTIVE. See 010 (IAB) &lt;br /&gt;
|-&lt;br /&gt;
|1||1||0||DWS||WRITE TO PSG. This signal indicates that the bus contains register data which should be latched into the currently addressed register DA7--DA0 are in input mode.  &lt;br /&gt;
|-&lt;br /&gt;
|1||1||1||INTAK||LATCH ADDRESS. This signal indicates that the bus contains a register address which should be latched in the PSG. DA7--DA0 are in the input mode.  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While interfacing to a processor other than the CP1610 would simply require simulating the above decoding, the redundancies in the PSG function vs bus control signals can be used to advantage in that only four of the eight possible decoded bus functions are required by the PSG. This could simpify the programming of the bus control signals to the following, which only require that the processor generate two bus control signals (BDIR and BC1, with BC2 tied to +5v). This is the case with the AY-3-8913 with BC2 pulled high internally. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|''BDIR''||''BC2''||''BC1''||''PSG Function''&lt;br /&gt;
|-&lt;br /&gt;
|0||1||0||INACTIVE &lt;br /&gt;
|-&lt;br /&gt;
|0||1||1||READ FROM PSG &lt;br /&gt;
|-&lt;br /&gt;
|1||1||0||WRITE TO PSG &lt;br /&gt;
|-&lt;br /&gt;
|1||1||1||LATCH ADDRESS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:psg10.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ANALOG CHANNEL A,B,C (outputs):   pins 4,3,38 (AY-3-8910)   pins 5,4,1 (AY-3-8912)   pins 17,15,18 (AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
Each of these signals is the output of its corresponding D/A Converter, and provides a up to 1V peak-peak signal representing the complex sound waveshape generated by the PSG. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''IOA7--IOA0 (input/output):   pins 14--21 (AY-3-8910)   pins 7--14 (AY-3-8912)   (not provided on AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
'''IOB7--IOB0 (input/output):   pins 6--13 (AY-3-8910)   (not provided on AY-3-8912)   (not provided on AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
'''Input/Output A7--A0, B7--B0'''&lt;br /&gt;
&lt;br /&gt;
Each of these two parallel input/output ports provides 8 bits of parallel data to/from the PSG/CPU bus from/to any external devices connected to the IOA or IOB pins. Each pin is provided with an on-chip pull-up resistor, so that when in the &amp;quot;input&amp;quot; mode, all pins will read normally high. Therefore, the recommended method for scanning external switches would be to ground the input bit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''TEST 1:   pin 39 (AY-3-8910)   pin 14 (AY-3-8913)   pin 2 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
'''TEST 2:   pin 26 (AY-3-8910)   pin 12 (AY-3-8913)   (not connected on AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
These pins are for General Instrument test purposes only and should be left open -- do not use as tie-points. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vcc:   pin 40 (AY-3-8910)   pin 13 (AY-3-8913)   pin 3 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
Nominal +5Volt power supply to PSG. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vss:   pin 1 (AY-3-8910)   pin 19 (AY-3-8913)   pin 6 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
Ground reference for the PSG. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''/CHIP SELECT (Input):   pin 24 (AY-3-8913 only)'''&lt;br /&gt;
 &lt;br /&gt;
This input signal goes low to enable the PSG to read data on the data bus or write data from the data bus to one of the internal registers. For these above operations to occur, this signal must be true in addition to the current bus address being a valid PSG address. This signal must be valid for all read and write operations. This pin has an internal pull down to Vss.&lt;br /&gt;
&lt;br /&gt;
== ARCHITECTURE ==&lt;br /&gt;
&lt;br /&gt;
The AY-3-8910/8912/8913 is a register oriented Programmable Sound Generator (PSG). Communication between the processor and the PSG is based on the concept of memory-mapped I/O. Control commands are issued to the PSG by writing to 16 memory-mapped registers. Each of the 16 registers within the PSG is also readable so that the microprocessor can determine, as necessary, present states or stored data values. &lt;br /&gt;
&lt;br /&gt;
All functions of the PSG are controlled through the 16 registers which once programmed, generate and sustain the sounds, thus freeing the system processor for other tasks. &lt;br /&gt;
&lt;br /&gt;
== REGISTER ARRAY ==&lt;br /&gt;
&lt;br /&gt;
The principle element of the PSG is the array of 16 read/write control registers. These 16 registers look to the CPU as a block of memory and as such occupy a 16 word block out of 1,024 possible addresses. The 10 address bits (8 bits on the common data/address bus, and 2 seperate address bits A8 and /A9) are decoded as follows: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''/A9*'''||'''A8'''||'''DA7'''||'''DA6'''||'''DA5'''||'''DA4'''||'''DA3'''||'''DA2'''||'''DA1'''||'''DA0''' &lt;br /&gt;
|-&lt;br /&gt;
|0||1||0||0||0||0||0||0||0||0 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''THRU'''&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|-&lt;br /&gt;
|'''0'''||'''1'''||'''0'''||'''0'''||'''0'''||'''0'''||'''1'''||'''1'''||'''1'''||'''1''' &lt;br /&gt;
|-&lt;br /&gt;
|colspan=4|High Order (Chip Select)||colspan=4|Low order (Register No.) &lt;br /&gt;
|}&lt;br /&gt;
* /A9 is not provided on the AY-3-8912 &lt;br /&gt;
&lt;br /&gt;
The four low order address bits select one of the 16 registers (R0--R17). The six high order address bits function as &amp;quot;chip selects&amp;quot; to control the tri-state bidirectional buffers (when the high order address bits are &amp;quot;incorrect&amp;quot;, the bi-directional buffers are forced to the high impedance state). High order address bits /A9, A8 are fixed in the PSG design to recognise a 01 code; high order address bits DA7-DA4 may be mask programmed to any 4-bit code by a special order factory mask modification. Unless otherwise specified, address bits DA7--DA4 are programmed to recognise only a 0000 code. A valid high order address latches the register address (the low order 4 bits) in the Register Address Latch/Decoder block. A latched address will remain valid until the receipt of a new address, enabling multiple reads and writes of the same register contents without the need for redundant re-addressing. &lt;br /&gt;
&lt;br /&gt;
Conditioning of the Register Address Latch/Decoder and the Bidirectional Buffers to recognise the bus function required (inactive, latch address, write data, or read data) is accomplished by the Bus Control Decode block. &lt;br /&gt;
&lt;br /&gt;
== SOUND GENERATING BLOCKS ==&lt;br /&gt;
&lt;br /&gt;
The basic blocks in the PSG which produce the programmed sounds include: &lt;br /&gt;
&lt;br /&gt;
* Tone Generators produce the basic square wave tone frequencies for each channel (A,B,C) &lt;br /&gt;
&lt;br /&gt;
* Noise Generator produces a frequency modulated pseudo random pulse width square wave output. &lt;br /&gt;
&lt;br /&gt;
* Mixers combine the outputs of the Tone Generators and the Noise Generator. One for each channel (A,B,C) &lt;br /&gt;
&lt;br /&gt;
* Amplitude Control provides the D/A Converters with either a fixed or variable amplitude pattern. The fixed amplitude is under direct CPU control; the variable amplitude is accomplished by using, the output of the Envelope Generator.  &lt;br /&gt;
&lt;br /&gt;
* Envelope Generator produces an evelope pattern which can be used to amplitude modulate the output of each Mixer. &lt;br /&gt;
&lt;br /&gt;
* D/A Converters the three D/A Converters each produce up to a 16 level output signal as determined by the Amplitude Control. &lt;br /&gt;
&lt;br /&gt;
== I/O PORTS ==&lt;br /&gt;
&lt;br /&gt;
Two additional blocks are shown in the PSG Block Diagram which have nothing directly to do with the production of sound -- these are the two I/O ports (A and B). Since virtually all uses of microprocessor-based sound would require interfacing between the outside world and the processor, this facility has been included in the PSG. Data to/from the CPU bus may be read/written to either of two 8-bit I/O Ports without affecting any other function of the PSG. The I/O Ports are TTL-compatible and are provided with internal pull-ups on each pin. Both Ports are available on the AY-3-8910; only I/O Port A is available on the AY-3-8912; no ports are available on the AY-3-8913. &lt;br /&gt;
&lt;br /&gt;
'''PSG BLOCK DIAGRAM'''&lt;br /&gt;
&lt;br /&gt;
[[Image:psg16.gif]]&lt;br /&gt;
&lt;br /&gt;
== OPERATION ==&lt;br /&gt;
&lt;br /&gt;
Since all functions of the PSG are controlled by the processor via a series of register loads, a detailed description of the PSG operation can best be acomplished by relating each PSG function to the control of its corresponding register. The function of creating or programming a specific sound or sound effect logically follows the control sequence listed: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Operation'''|'''Registers'''|'''Function'''&lt;br /&gt;
|-&lt;br /&gt;
|Tone Generator Control||R0--R5||Program tone periods. &lt;br /&gt;
|-&lt;br /&gt;
|Noise Generator Control||R6||Program noise period. &lt;br /&gt;
|-&lt;br /&gt;
|Mixer Control||R7||Enable tone and/or noise on selected channels. &lt;br /&gt;
|-&lt;br /&gt;
|Amplitude Control||R10--R12||Select &amp;quot;fixed&amp;quot; or &amp;quot;envelope-variable&amp;quot; amplitudes. &lt;br /&gt;
|-&lt;br /&gt;
|Envelope Generator Control||R13--R15||Program envelope period and select envelope pattern. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tone Generator Control (Registers R0,R1,R2,R3,R4,R5) ===&lt;br /&gt;
&lt;br /&gt;
The frequency of each square wave generated by the three Tone Generators (one each for Channels A,B and C) is obtained in the PSG by first counting down the input clock by 16, then by furthur counting down the result by the programmed 12-bit Tone Period value. Each 12-bit value is obtained in the PSG by combining the contents of the relative Course and Fine Tune registers, as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Course Tone Register'''||'''Channel'''||'''Fine Tune Register'''&lt;br /&gt;
|-&lt;br /&gt;
|R1||A||R0 &lt;br /&gt;
|-&lt;br /&gt;
|R3||B||R2 &lt;br /&gt;
|-&lt;br /&gt;
|R5||C||R4 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|colspan=8|'''Course Tone Register'''||colspan=8|'''Fine Tune Register'''&lt;br /&gt;
|-&lt;br /&gt;
|B7||B6||B5||B4||B3||B2||B1||B0||B7||B6||B5||B4||B3||B2||B1||B0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=4|NOT USED||TP11||TP10||TP9||TP8||TP7||TP6||TP5||TP4||TP3||TP2||TP1||TP0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=4| ||colspan=12|12-bit Tone Period (TP) to Tone Generator &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Noise Generator Control (Register R6) ===&lt;br /&gt;
&lt;br /&gt;
The frequency of the noise source is obtained in the PSG by first counting down the input clock by 16, then by furthur counting down the result by the programmed 5-bit Noise Period value. This 5-bit value consists of the lower 5-bits (B4--B0) of register R6, as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Noise Period Register'''&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|-&lt;br /&gt;
|'''B7'''||'''B6'''||'''B5'''||'''B4'''||'''B3'''||'''B2'''||'''B1'''||'''B0'''&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|NOT USED||colspan=5|5-bit Noise Period (NP) to Noise Generator &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mixer Control Enable (Register R7) ===&lt;br /&gt;
&lt;br /&gt;
Register R7 is multi-function /Enable register which controls the three Noise/Tone Mixers and the two general purpose I/O Ports. &lt;br /&gt;
&lt;br /&gt;
The Mixers, as previously described, combine the noise and tone frequencies for each of the three channels. The determination of combining neither/either/both noise and tone frequencies on each channel is made by the state of bits B5--B0 of R7. &lt;br /&gt;
&lt;br /&gt;
The direction (input or output) of the two general purpose I/O Ports (IOA and IOB) is determined by the state of bits B7 and B6 of R7. &lt;br /&gt;
&lt;br /&gt;
These functions are illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
'''Mixer Control-I/O-Enable Register R7'''&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|-&lt;br /&gt;
|'''B7'''||'''B6'''||'''B5'''||'''B4'''||'''B3'''||'''B2'''||'''B1'''||'''B0''' &lt;br /&gt;
|-&lt;br /&gt;
|colspan=2|/Input Enable||colspan=3|/Noise Enable||colspan=3|/Tone Enable &lt;br /&gt;
|-&lt;br /&gt;
|B||A||C||B||A||C||B||A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Amplitude Control (Registers R10,R11,R12) ===&lt;br /&gt;
&lt;br /&gt;
The amplitudes of the signals generated by each of the three D/A Converters (one each for Channels A,B and C) is determined by the contents of the lower 5-bits (B4--B0) of registers R10,R11 and R12 as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Amplitude Control Register'''||'''Channel'''&lt;br /&gt;
|-&lt;br /&gt;
|R10||A &lt;br /&gt;
|-&lt;br /&gt;
|R11||B &lt;br /&gt;
|-&lt;br /&gt;
|R12||C &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''B7'''||'''B6'''||'''B5'''||'''B4'''||'''B3'''||'''B2'''||'''B1'''||'''B0''' &lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|NOT USED||M||L3||L2||L1||L0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3| ||amplitude &amp;quot;mode&amp;quot;||colspan=4|4-bit &amp;quot;fixed&amp;quot; amplitude level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Envelope Generator Control (Registers R13,R14 and R15) ===&lt;br /&gt;
&lt;br /&gt;
To acomplish the generation of fairly complex envelope patterns, two independant methods of control are provided in the PSG: first, it is possible to vary the frequency of the envelope using registers R13 and R14; and second, the relative shape and cycle pattern of the envelope can be varied using register R15. The following paragraphis explain the details of the envelope control functions, describing first the envelope period control and then the envelope shape/cycle control.&lt;br /&gt;
&lt;br /&gt;
== ENVELOPE PERIOD CONTROL (Registers R13,R14) ==&lt;br /&gt;
&lt;br /&gt;
The frequency of the envelope is obtained in the PSG by first counting down the input clock by 256, then by furthur counting down the result of the programmed 16-bit Envelope Period value. This 16-bit value is obtained in the PSG by combining the contents of the Envelope Coarse and Fine Tune registers, as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|colspan=8|'''Envelope Coarse Tune Register R14'''||colspan=8|'''Envelope Fine Tune Register R13'''&lt;br /&gt;
|-&lt;br /&gt;
|B7||B6||B5||B4||B3||B2||B1||B0||B7||B6||B5||B4||B3||B2||B1||B0&lt;br /&gt;
|-&lt;br /&gt;
|EP15||EP14||EP13||EP12||EP11||EP10||EP9||EP8||EP7||EP6||EP5||EP4||EP3||EP2||EP1||EP0 &lt;br /&gt;
|-&lt;br /&gt;
|colspan=16|16-bit Envelope Period (EP) to Envelope Generator &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ENVELOPE SHAPE/CYCLE CONTROL (Register R15) ==&lt;br /&gt;
&lt;br /&gt;
The Envelope Generator furthur counts down the envelope frequency by 16, producing a 16-state per cycle envelope pattern as defined by its 4-bit counter output, E3 E2 E1 E0. The particular shape and cycle pattern of any desired envelope is accomplished by controlling the count pattern (count up/count down) of the 4-bit counter and by defining a single cycle or repeat-cycle pattern. &lt;br /&gt;
&lt;br /&gt;
This envelope shape/cycle control is contained in the 4 bits (B3--B0) of register R15. Each of these 4 bits controls a function in the envelope generator, as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Envelope Shape/Cycle Control Register (R15) ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|B7||B6||B5||B4||B3||B2||B1||B0 &lt;br /&gt;
|-&lt;br /&gt;
|colspan=4|NOT USED||Hold||Alternate||Attack||Continue&lt;br /&gt;
|-&lt;br /&gt;
|colspan=4| ||colspan=4|Function (To Envelope Generator)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== I/O Port Data Store (Registers R16, R17) ==&lt;br /&gt;
&lt;br /&gt;
Registers R16 and R17 function as intermediate data storage registers between the PSG/CPU data bus (DA0--DA7) and the two I/O ports (IOA7--IOA0 and IOB7--IOB0). Both ports are available in the AY-3-8910; only I/O port A is available in the AY-3-8912; none are available on the AY-3-8913. Using registers R16 and R17 for the transfer of I/O data has no effect on sound generation. &lt;br /&gt;
&lt;br /&gt;
== D/A Converter Operation ==&lt;br /&gt;
&lt;br /&gt;
Since the primary use of the PSG is to produce sound for the highly imperfect amplitude detection mechanism of the human ear, the D/A conversion is performed in logarithmic steps with a normalized voltage range of from 0 to 1 Volt. The specific amplitude control of each of the three D/A Converters is acomplished by the three sets of 4-bit outputs of the Amplitude Control block, while the Mixer outputs provide the base signal frequency (Noise and/or Tone). &lt;br /&gt;
&lt;br /&gt;
'''Fig 1. ENVELOPE SHAPE/CYCLE OPERATION'''&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|colspan=4|R15 Bits||rowspan=3|GRAPHICAL REPRESENTATION OF ENVELOPE GENERATOR OUTPUT (E3 E2 E1 E0) &lt;br /&gt;
|-&lt;br /&gt;
|B3||B2||B1||B0&lt;br /&gt;
|-&lt;br /&gt;
|Continue||Attack||Alternate||Hold&lt;br /&gt;
|-&lt;br /&gt;
|0||0||x||x||[[Image:psg1.gif]]&lt;br /&gt;
|-&lt;br /&gt;
|0||1||x||x||[[Image:psg3.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||0||0||[[Image:psg5.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||0||1||[[Image:psg1.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||1||0||[[Image:psg8.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||1||1||[[Image:psg4.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||1||0||0||[[Image:psg6.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||1||0||1||[[Image:psg2.gif]] &lt;br /&gt;
|-&lt;br /&gt;
|1||1||1||0||[[Image:psg7.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||1||1||1||[[Image:psg3.gif]]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=4| ||[[Image:psg15.gif]]  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Fig 2. DETAIL OF TWO CYCLES Of Fig 1 (ref. waveform &amp;quot;1010&amp;quot; in Fig.1)'''&lt;br /&gt;
&lt;br /&gt;
[[Image:psg9.gif]]&lt;br /&gt;
 &lt;br /&gt;
'''Fig 3. D/A CONVERTER OUTPUT'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 4. SINGLE TONE WITH ENVELOPE SHAPE/CYCLE PATTERN 1010'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 5. MIXTURE OF THREE TONES WITH FIXED AMPLITUDE'''&lt;br /&gt;
&lt;br /&gt;
== ELECTRICAL CHARACTERISTICS (AY-3-8910, AY-3-8912) ==&lt;br /&gt;
&lt;br /&gt;
Maximum Ratings*&lt;br /&gt;
&lt;br /&gt;
Storage Temperature ...... -55°C to +150°C &lt;br /&gt;
&lt;br /&gt;
Operating Temperature ...... 0°C to 40°C &lt;br /&gt;
&lt;br /&gt;
Vcc and all other input/Output Voltages with Respect to Vss ...... -0.3V to +8.0V &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exceeding these ratings could cause permanent damage to the device. This is a stress rating only and functional operation of the devices at these conditions is not implied -- operating ranges are specified in Standard Conditions. Exposure to absolute maximum rating conditions for extended periods may affect device reliability. Data labelled &amp;quot; typical&amp;quot; is presented for design guidance only and is not guaranteed. &lt;br /&gt;
&lt;br /&gt;
'''Storage Conditions (unless otherwise noted):'''&lt;br /&gt;
&lt;br /&gt;
Vcc = ± 5V ±5%&lt;br /&gt;
&lt;br /&gt;
Vss = GND&lt;br /&gt;
&lt;br /&gt;
Operating Temperature = 0°C to +40°C &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Characteristics'''||'''Sym'''||'''Min'''||'''Typ**'''||'''Max'''||'''Units'''||'''Conditions'''&lt;br /&gt;
|-&lt;br /&gt;
|'''DC CHARACTERISTICS'''&lt;br /&gt;
|-&lt;br /&gt;
|'''All inputs'''&lt;br /&gt;
|-&lt;br /&gt;
|Low level||Vil||0||-||0.6||V  &lt;br /&gt;
|-&lt;br /&gt;
|High level||Vih||2.4||-||Vcc||V  &lt;br /&gt;
|-&lt;br /&gt;
|'''All Outputs (except Analog Channel Outputs'''&lt;br /&gt;
|-&lt;br /&gt;
|Low level||Vol||0||-||0.5||V||Iol = 1.6mA, 20pF &lt;br /&gt;
|-&lt;br /&gt;
|High level||Voh||2.4||-||Vcc||V||Ioh = 100uA, 20pF &lt;br /&gt;
|-&lt;br /&gt;
|Analog Channel Outputs||Vo||0||-||60||dB||Test Curcuit: Fig 6 &lt;br /&gt;
|-&lt;br /&gt;
|Power Supply Current||Icc||-||45||85||mA  &lt;br /&gt;
|-&lt;br /&gt;
|'''AC CHARACTERISTICS'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Clock Input'''||Fig 7. &lt;br /&gt;
|-&lt;br /&gt;
|Frequency||fc||1||-||2||MHz &lt;br /&gt;
|-&lt;br /&gt;
|Rise Time||tr||-||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|Fall Time||tf||-||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|Duty Cycle||-||25||50||85||% &lt;br /&gt;
|-&lt;br /&gt;
|'''Bus Signals (BDIR,BC2,BC1)'''&lt;br /&gt;
|-&lt;br /&gt;
|Associative Delay Time||tao||-||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''Reset'''Fig. 8 &lt;br /&gt;
|-&lt;br /&gt;
|Reset Pulse Width||trw||500||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Reset to Bus Control Delay Time||trb||100||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''A9, A8, DA7--DA0 (Address Mode)'''||Fig 9 &lt;br /&gt;
|-&lt;br /&gt;
|Address Setup Time||tas||400||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Address Hold Time||tah||100||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Write Mode)'''||Fig. 10 &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Pulse Width||tdw||500||-||10,000||ns &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Setup Time||tds||50||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Hold Time||tdh||100||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Read Mode)'''||Fig. 11 &lt;br /&gt;
|-&lt;br /&gt;
|Read Data Access Time||tda||-||250||500||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Inactive Mode)'''&lt;br /&gt;
|-&lt;br /&gt;
|Tristate Delay Time||tts||-||100||200||ns &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** Typical values are at ±25°C and nominal voltages &lt;br /&gt;
&lt;br /&gt;
'''Analogue Channel Output Test Curcuit'''&lt;br /&gt;
&lt;br /&gt;
[[Image:psg11.gif]]&lt;br /&gt;
&lt;br /&gt;
== ELECTRICAL CHARACTERISTICS (AY-3-8913) ==&lt;br /&gt;
&lt;br /&gt;
Maximum Ratings*&lt;br /&gt;
&lt;br /&gt;
Storage Temperature ...... -55°C to +150°C &lt;br /&gt;
&lt;br /&gt;
Operating Temperature ...... 0°C to 70°C &lt;br /&gt;
&lt;br /&gt;
Vcc and all other input/Output Voltages with Respect to Vss ...... -0.3V to +8.0V &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Exceeding these ratings could cause permanent damage to the device. This is a stress rating only and functional operation of the devices at these conditions is not implied -- operating ranges are specified in Standard Conditions. Exposure to absolute maximum rating conditions for extended periods may affect device reliability. Data labelled &amp;quot; typical&amp;quot; is presented for design guidance only and is not guaranteed. &lt;br /&gt;
&lt;br /&gt;
'''Storage Conditions (unless otherwise noted):'''&lt;br /&gt;
&lt;br /&gt;
Vcc = ± 5V ±5%&lt;br /&gt;
&lt;br /&gt;
Vss = GND&lt;br /&gt;
&lt;br /&gt;
Operating Temperature = 0°C to +70°C &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Characteristics'''||'''Min'''||'''Sym'''||'''Max'''||'''Units'''||'''Conditions'''&lt;br /&gt;
|-&lt;br /&gt;
|'''DC CHARACTERISTICS'''&lt;br /&gt;
|-&lt;br /&gt;
|'''All inputs'''&lt;br /&gt;
|-&lt;br /&gt;
|Low level||Vil||0||0.7||V  &lt;br /&gt;
|-&lt;br /&gt;
|High level||Vih||2.2||Vcc||V  &lt;br /&gt;
|-&lt;br /&gt;
|'''All Outputs (except Analog Channel Outputs'''&lt;br /&gt;
|-&lt;br /&gt;
|Low level||Vol||0||0.4||V||1||TTL||Load &lt;br /&gt;
|-&lt;br /&gt;
|High level||Voh||2.4||Vcc||V||+100pf &lt;br /&gt;
|-&lt;br /&gt;
|'''Analog Channel Outputs'''||Vo||0||2000||uA||Test Curcuit: Fig 6 &lt;br /&gt;
|-&lt;br /&gt;
|'''Power Supply Current'''||Icc||-||85||mA  &lt;br /&gt;
|-&lt;br /&gt;
|'''AC CHARACTERISTICS'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Clock Input'''||Fig 7. &lt;br /&gt;
|-&lt;br /&gt;
|Frequency||fc||1||2.5||MHz &lt;br /&gt;
|-&lt;br /&gt;
|Rise Time||tr||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|Fall Time||tf||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|Duty Cycle||-||40||60||% &lt;br /&gt;
|-&lt;br /&gt;
|'''Bus Signals (BDIR,BC2,BC1)'''&lt;br /&gt;
|-&lt;br /&gt;
|Associative Delay Time||tao||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''Reset'''||Fig. 8 &lt;br /&gt;
|-&lt;br /&gt;
|Reset Pulse Width||trw||5||-||us &lt;br /&gt;
|-&lt;br /&gt;
|Reset to Bus Control Delay Time||trb||100||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''A9, A8, DA7--DA0 (Address Mode)'''||Fig 9 &lt;br /&gt;
|-&lt;br /&gt;
|Address Setup Time tas 300 - ns &lt;br /&gt;
|-&lt;br /&gt;
|Address Hold Time tah 50 - ns &lt;br /&gt;
|-&lt;br /&gt;
|DA7--DA0 (Write Mode)'''||Fig. 10 &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Pulse Width||tdw||1800||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Setup Time||tds||50||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Hold Time||tdh||100||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Read Mode)'''||Fig. 11 &lt;br /&gt;
|-&lt;br /&gt;
|Read Data Access Time||tda||-||350||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Inactive Mode)'''  &lt;br /&gt;
|-&lt;br /&gt;
|Tristate Delay Time||tts||-||400||ns&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fig 7. CLOCK AND BUS SIGNAL TIMING'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 8. RESET TIMING'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 9. LATCH ADDRESS TIMING'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 10. WRITE DATA TIMING'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 11. READ DATA TIMING'''&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[[AY|AY's page with less specific subjects]] &lt;br /&gt;
&lt;br /&gt;
[[Category:Electronic Component]] [[Category:Datasheet]][[Category:Music and sound|*]][[Category:CPC Internal Components]]&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Datasheet_AY-8913&amp;diff=66942</id>
		<title>Datasheet AY-8913</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Datasheet_AY-8913&amp;diff=66942"/>
				<updated>2011-03-14T01:53:56Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Tone Generator Control (Registers R0,R1,R2,R3,R4,R5) */ Fixed table format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General Instruments - AY-3-8910, AY-3-8912, AY-3-8913 Programmable Sound Generator ==&lt;br /&gt;
&lt;br /&gt;
=== FEATURES ===&lt;br /&gt;
&lt;br /&gt;
* Full Software Control of Sound Generation &lt;br /&gt;
* Interface to Most 8-bit and 16-bit Microprocessors &lt;br /&gt;
* Three independantly Programmed Analog Outputs &lt;br /&gt;
* Two 8-bit General Purpose I/O ports (AY-3-8910) &lt;br /&gt;
* One 8-bit General Purpose I/O port (AY-3-8912) &lt;br /&gt;
* Single +5 Volt Supply &lt;br /&gt;
&lt;br /&gt;
== DESCRIPTION ==&lt;br /&gt;
&lt;br /&gt;
The [[AY]]-3-8910/8912/8913 Programmable Sound Generator (PSG) is a LSI Circuit which can produce a wide variety of complex sounds under software control. The AY-3-8910/8912/8913 is manufactured in the General Instrument N-Channel Ion Implant Process. Operation requires a single +5V power supply, a TTL compatible clock, and a microprocessor controller such as the General Instrument 16-bit CP1610 or one of the PIC1650 series of 8-bit microcomputers. &lt;br /&gt;
&lt;br /&gt;
The PSG is easily interfaced to any bus orientation system, its flexibility makes it useful in applications such as music synthesis, sound effects generation, audible alarms, tone signalling and FSK modems. The analog sound outputs can each provide 4bits of logarithmic digital to analog conversion greatly enhancing the dynamic range of the sounds produced. &lt;br /&gt;
&lt;br /&gt;
In order to perform sound effects while allowing the processor to continue its other tasks, the PSG can continue to produce sound after the initial commands have been given by the control processor. The fact that realistic sound production often involves more than one effect is satisfied by the three independantly controllable channels available in the PSG. &lt;br /&gt;
&lt;br /&gt;
All of the circuit control signals are digital in nature and intended to be provided directly by a microprocessor/microcomputer. This means that one PSG can produce the full range of required sounds with no change in external circuitry. Since the frequency response of the PSG ranges from sub-audible at its lowest frequency to post-audible at its highest frequency, there are few sounds which are beyond reproduction ith only the simplest electical connections. &lt;br /&gt;
&lt;br /&gt;
Since most applications of a microprocessor/PSG system would also require interfacing between the outside world and the microprocessor, this facility has been designed into the PSG. The AY-3-8910 has two general purpose 8-bit I/O ports and is supplied in a 40 lead package; the AY-3-8912 has one port and 28 leads; the AY-3-8913 has no ports and 24-leads. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PIN CONFIGURATIONS ==&lt;br /&gt;
&lt;br /&gt;
=== 40 LEAD DUAL IN LINE ===&lt;br /&gt;
&lt;br /&gt;
AY-3-8910&lt;br /&gt;
&lt;br /&gt;
[[Image:psg14.gif]]&lt;br /&gt;
&lt;br /&gt;
=== 28 LEAD DUAL IN LINE ===&lt;br /&gt;
&lt;br /&gt;
AY-3-8912&lt;br /&gt;
&lt;br /&gt;
[[Image:psg12.gif]]&lt;br /&gt;
&lt;br /&gt;
=== 24 LEAD DUAL IN LINE ===&lt;br /&gt;
&lt;br /&gt;
AY-3-8913&lt;br /&gt;
&lt;br /&gt;
[[Image:psg13.gif]]&lt;br /&gt;
&lt;br /&gt;
== PIN FUNCTIONS ==&lt;br /&gt;
&lt;br /&gt;
'''DA7--DA0 (input/output/high impedance)   pins 30--37 (AY-3-8910)   pins 21--28 (AY-3-8912)   pins 4--11 (AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
'''Data/Address 7--0:'''&lt;br /&gt;
&lt;br /&gt;
These 8 lines comprise the 8-bit bidirectional bus used by the microprocessor to send both data and addresses to the PSG and to recieve data from the PSG. In the data mode, DA7--DA0 correspond to Register Array bits B7--B0. In the address mode, DA3--DA0 select the register number (0--17 8) and a DA7-DA4 in conjunction with address inputs /A9 and A8 for the high order address (chip select). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''A8 (input):   pin 25 (AY-3-8910)   pin 17 (AY-3-8912)   pin 23 (AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''/A9 (input):   pin 24 (AY-3-8910)   pin 28 (AY-3-8912)   (not provided on AY-3-8913)''' &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''/Address 9,Address 8'''&lt;br /&gt;
&lt;br /&gt;
These &amp;quot;extra&amp;quot; address bits are made available to enable the positioning of the PSG (assigning a 16 word memory space) in a total 1,024 word memory area rather than in a 256 word memory area as defined by address bits DA7--DA0 alone. If the memory size does not require the use of these extra address lines they may be left unconnected as each is provided with either an on-chip pull down (/A9) or pull-up (A8) resistor. In &amp;quot;noisy&amp;quot; environments, however, it is recommended that /A9 and A8 be tied to an external ground and +5V, respectively, if they are not to be used. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''/RESET (input):   pin 23 (AY-3-8910)   pin 21 (AY-3-8913)   pin 16 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
For initialization/power on purposes, applying a logic &amp;quot;0&amp;quot; (ground) to the /Reset pin will reset all registers to &amp;quot;0&amp;quot;. The /Reset pin is provided with an on-chip pull-up resistor. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CLOCK (signal):   pin 22 (AY-3-8910)   pin 20 (AY-3-8913)   pin 15 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
This TTL-compatible input supplies the timing reference for the Tone, Noise and Envelope Generators. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BDIR,BC2,BC1 (inputs):   pins 27,28,29 (AY-3-8910)   pins 18,19,20 (AY-3-8912)   pins 2,3 (No BC2 on AY-3-8913 see below)''' &lt;br /&gt;
&lt;br /&gt;
'''Bus DiRection, Bus Control 2,1'''&lt;br /&gt;
&lt;br /&gt;
These bus control signals are generated directly by the CP1610 series of microprocessors to control all external and internal bus operations in the PSG. When using a processor other than the Cp1610, these signals can be provided either by comparable bus signals or by simulating the signals on I/O lines of the processor. The PSG decodes these signals as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|''BDIR''||''BC2''||''BC1''||''CP1610 Function''||''PSG Function''&lt;br /&gt;
|-&lt;br /&gt;
|0||0||0||NACT||INACTIVE. See 010 (IAB) &lt;br /&gt;
|-&lt;br /&gt;
|0||0||1||ADAR||LATCH ADDRESS. See 111 (INTAK) &lt;br /&gt;
|-&lt;br /&gt;
|0||1||0||IAB||INACTIVE: The PSG/CPU bus is inactive, DA7--DA0 are in high impedence state &lt;br /&gt;
|-&lt;br /&gt;
|0||1||1||DTB||READ FROM PSG. This signal causes the contents of the register which is currently addressed to appear on the PSG/CPU bus. DA7--DA0 are in output mode.  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||0||BAR||LATCH ADDRESS. See 111 (INTAK) &lt;br /&gt;
|-&lt;br /&gt;
|1||0||1||DW||INACTIVE. See 010 (IAB) &lt;br /&gt;
|-&lt;br /&gt;
|1||1||0||DWS||WRITE TO PSG. This signal indicates that the bus contains register data which should be latched into the currently addressed register DA7--DA0 are in input mode.  &lt;br /&gt;
|-&lt;br /&gt;
|1||1||1||INTAK||LATCH ADDRESS. This signal indicates that the bus contains a register address which should be latched in the PSG. DA7--DA0 are in the input mode.  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While interfacing to a processor other than the CP1610 would simply require simulating the above decoding, the redundancies in the PSG function vs bus control signals can be used to advantage in that only four of the eight possible decoded bus functions are required by the PSG. This could simpify the programming of the bus control signals to the following, which only require that the processor generate two bus control signals (BDIR and BC1, with BC2 tied to +5v). This is the case with the AY-3-8913 with BC2 pulled high internally. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|''BDIR''||''BC2''||''BC1''||''PSG Function''&lt;br /&gt;
|-&lt;br /&gt;
|0||1||0||INACTIVE &lt;br /&gt;
|-&lt;br /&gt;
|0||1||1||READ FROM PSG &lt;br /&gt;
|-&lt;br /&gt;
|1||1||0||WRITE TO PSG &lt;br /&gt;
|-&lt;br /&gt;
|1||1||1||LATCH ADDRESS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:psg10.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ANALOG CHANNEL A,B,C (outputs):   pins 4,3,38 (AY-3-8910)   pins 5,4,1 (AY-3-8912)   pins 17,15,18 (AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
Each of these signals is the output of its corresponding D/A Converter, and provides a up to 1V peak-peak signal representing the complex sound waveshape generated by the PSG. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''IOA7--IOA0 (input/output):   pins 14--21 (AY-3-8910)   pins 7--14 (AY-3-8912)   (not provided on AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
'''IOB7--IOB0 (input/output):   pins 6--13 (AY-3-8910)   (not provided on AY-3-8912)   (not provided on AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
'''Input/Output A7--A0, B7--B0'''&lt;br /&gt;
&lt;br /&gt;
Each of these two parallel input/output ports provides 8 bits of parallel data to/from the PSG/CPU bus from/to any external devices connected to the IOA or IOB pins. Each pin is provided with an on-chip pull-up resistor, so that when in the &amp;quot;input&amp;quot; mode, all pins will read normally high. Therefore, the recommended method for scanning external switches would be to ground the input bit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''TEST 1:   pin 39 (AY-3-8910)   pin 14 (AY-3-8913)   pin 2 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
'''TEST 2:   pin 26 (AY-3-8910)   pin 12 (AY-3-8913)   (not connected on AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
These pins are for General Instrument test purposes only and should be left open -- do not use as tie-points. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vcc:   pin 40 (AY-3-8910)   pin 13 (AY-3-8913)   pin 3 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
Nominal +5Volt power supply to PSG. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vss:   pin 1 (AY-3-8910)   pin 19 (AY-3-8913)   pin 6 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
Ground reference for the PSG. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''/CHIP SELECT (Input):   pin 24 (AY-3-8913 only)'''&lt;br /&gt;
 &lt;br /&gt;
This input signal goes low to enable the PSG to read data on the data bus or write data from the data bus to one of the internal registers. For these above operations to occur, this signal must be true in addition to the current bus address being a valid PSG address. This signal must be valid for all read and write operations. This pin has an internal pull down to Vss.&lt;br /&gt;
&lt;br /&gt;
== ARCHITECTURE ==&lt;br /&gt;
&lt;br /&gt;
The AY-3-8910/8912/8913 is a register oriented Programmable Sound Generator (PSG). Communication between the processor and the PSG is based on the concept of memory-mapped I/O. Control commands are issued to the PSG by writing to 16 memory-mapped registers. Each of the 16 registers within the PSG is also readable so that the microprocessor can determine, as necessary, present states or stored data values. &lt;br /&gt;
&lt;br /&gt;
All functions of the PSG are controlled through the 16 registers which once programmed, generate and sustain the sounds, thus freeing the system processor for other tasks. &lt;br /&gt;
&lt;br /&gt;
== REGISTER ARRAY ==&lt;br /&gt;
&lt;br /&gt;
The principle element of the PSG is the array of 16 read/write control registers. These 16 registers look to the CPU as a block of memory and as such occupy a 16 word block out of 1,024 possible addresses. The 10 address bits (8 bits on the common data/address bus, and 2 seperate address bits A8 and /A9) are decoded as follows: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''/A9*'''||'''A8'''||'''DA7'''||'''DA6'''||'''DA5'''||'''DA4'''||'''DA3'''||'''DA2'''||'''DA1'''||'''DA0''' &lt;br /&gt;
|-&lt;br /&gt;
|0||1||0||0||0||0||0||0||0||0 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''THRU'''&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|-&lt;br /&gt;
|'''0'''||'''1'''||'''0'''||'''0'''||'''0'''||'''0'''||'''1'''||'''1'''||'''1'''||'''1''' &lt;br /&gt;
|-&lt;br /&gt;
|colspan=4|High Order (Chip Select)||colspan=4|Low order (Register No.) &lt;br /&gt;
|}&lt;br /&gt;
* /A9 is not provided on the AY-3-8912 &lt;br /&gt;
&lt;br /&gt;
The four low order address bits select one of the 16 registers (R0--R17). The six high order address bits function as &amp;quot;chip selects&amp;quot; to control the tri-state bidirectional buffers (when the high order address bits are &amp;quot;incorrect&amp;quot;, the bi-directional buffers are forced to the high impedance state). High order address bits /A9, A8 are fixed in the PSG design to recognise a 01 code; high order address bits DA7-DA4 may be mask programmed to any 4-bit code by a special order factory mask modification. Unless otherwise specified, address bits DA7--DA4 are programmed to recognise only a 0000 code. A valid high order address latches the register address (the low order 4 bits) in the Register Address Latch/Decoder block. A latched address will remain valid until the receipt of a new address, enabling multiple reads and writes of the same register contents without the need for redundant re-addressing. &lt;br /&gt;
&lt;br /&gt;
Conditioning of the Register Address Latch/Decoder and the Bidirectional Buffers to recognise the bus function required (inactive, latch address, write data, or read data) is accomplished by the Bus Control Decode block. &lt;br /&gt;
&lt;br /&gt;
== SOUND GENERATING BLOCKS ==&lt;br /&gt;
&lt;br /&gt;
The basic blocks in the PSG which produce the programmed sounds include: &lt;br /&gt;
&lt;br /&gt;
* Tone Generators produce the basic square wave tone frequencies for each channel (A,B,C) &lt;br /&gt;
&lt;br /&gt;
* Noise Generator produces a frequency modulated pseudo random pulse width square wave output. &lt;br /&gt;
&lt;br /&gt;
* Mixers combine the outputs of the Tone Generators and the Noise Generator. One for each channel (A,B,C) &lt;br /&gt;
&lt;br /&gt;
* Amplitude Control provides the D/A Converters with either a fixed or variable amplitude pattern. The fixed amplitude is under direct CPU control; the variable amplitude is accomplished by using, the output of the Envelope Generator.  &lt;br /&gt;
&lt;br /&gt;
* Envelope Generator produces an evelope pattern which can be used to amplitude modulate the output of each Mixer. &lt;br /&gt;
&lt;br /&gt;
* D/A Converters the three D/A Converters each produce up to a 16 level output signal as determined by the Amplitude Control. &lt;br /&gt;
&lt;br /&gt;
== I/O PORTS ==&lt;br /&gt;
&lt;br /&gt;
Two additional blocks are shown in the PSG Block Diagram which have nothing directly to do with the production of sound -- these are the two I/O ports (A and B). Since virtually all uses of microprocessor-based sound would require interfacing between the outside world and the processor, this facility has been included in the PSG. Data to/from the CPU bus may be read/written to either of two 8-bit I/O Ports without affecting any other function of the PSG. The I/O Ports are TTL-compatible and are provided with internal pull-ups on each pin. Both Ports are available on the AY-3-8910; only I/O Port A is available on the AY-3-8912; no ports are available on the AY-3-8913. &lt;br /&gt;
&lt;br /&gt;
'''PSG BLOCK DIAGRAM'''&lt;br /&gt;
&lt;br /&gt;
[[Image:psg16.gif]]&lt;br /&gt;
&lt;br /&gt;
== OPERATION ==&lt;br /&gt;
&lt;br /&gt;
Since all functions of the PSG are controlled by the processor via a series of register loads, a detailed description of the PSG operation can best be acomplished by relating each PSG function to the control of its corresponding register. The function of creating or programming a specific sound or sound effect logically follows the control sequence listed: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Operation'''|'''Registers'''|'''Function'''&lt;br /&gt;
|-&lt;br /&gt;
|Tone Generator Control||R0--R5||Program tone periods. &lt;br /&gt;
|-&lt;br /&gt;
|Noise Generator Control||R6||Program noise period. &lt;br /&gt;
|-&lt;br /&gt;
|Mixer Control||R7||Enable tone and/or noise on selected channels. &lt;br /&gt;
|-&lt;br /&gt;
|Amplitude Control||R10--R12||Select &amp;quot;fixed&amp;quot; or &amp;quot;envelope-variable&amp;quot; amplitudes. &lt;br /&gt;
|-&lt;br /&gt;
|Envelope Generator Control||R13--R15||Program envelope period and select envelope pattern. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tone Generator Control (Registers R0,R1,R2,R3,R4,R5) ===&lt;br /&gt;
&lt;br /&gt;
The frequency of each square wave generated by the three Tone Generators (one each for Channels A,B and C) is obtained in the PSG by first counting down the input clock by 16, then by furthur counting down the result by the programmed 12-bit Tone Period value. Each 12-bit value is obtained in the PSG by combining the contents of the relative Course and Fine Tune registers, as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Course Tone Register'''||'''Channel'''||'''Fine Tune Register'''&lt;br /&gt;
|-&lt;br /&gt;
|R1||A||R0 &lt;br /&gt;
|-&lt;br /&gt;
|R3||B||R2 &lt;br /&gt;
|-&lt;br /&gt;
|R5||C||R4 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|colspan=8|'''Course Tone Register'''||colspan=8|'''Fine Tune Register'''&lt;br /&gt;
|-&lt;br /&gt;
|B7||B6||B5||B4||B3||B2||B1||B0||B7||B6||B5||B4||B3||B2||B1||B0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=4|NOT USED||TP11||TP10||TP9||TP8||TP7||TP6||TP5||TP4||TP3||TP2||TP1||TP0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=4| ||colspan=12|12-bit Tone Period (TP) to Tone Generator &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Noise Generator Control (Register R6) ===&lt;br /&gt;
&lt;br /&gt;
The frequency of the noise source is obtained in the PSG by first counting down the input clock by 16, then by furthur counting down the result by the programmed 5-bit Noise Period value. This 5-bit value consists of the lower 5-bits (B4--B0) of register R6, as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Noise Period Register'''&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|-&lt;br /&gt;
|'''B7'''||'''B6'''||'''B5'''||'''B4'''||'''B3'''||'''B2'''||'''B1'''||'''B0'''&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|NOT USED||colspan=5|5-bit Noise Period (NP) to Noise Generator &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mixer Control Enable (Register R7) ===&lt;br /&gt;
&lt;br /&gt;
Register R7 is multi-function /Enable register which controls the three Noise/Tone Mixers and the two general purpose I/O Ports. &lt;br /&gt;
&lt;br /&gt;
The Mixers, as previously described, combine the noise and tone frequencies for each of the three channels. The determination of combining neither/either/both noise and tone frequencies on each channel is made by the state of bits B5--B0 of R7. &lt;br /&gt;
&lt;br /&gt;
The direction (input or output) of the two general purpose I/O Ports (IOA and IOB) is determined by the state of bits B7 and B6 of R7. &lt;br /&gt;
&lt;br /&gt;
These functions are illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
'''Mixer Control-I/O-Enable Register R7'''&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|-&lt;br /&gt;
|'''B7'''||'''B6'''||'''B5'''||'''B4'''||'''B3'''||'''B2'''||'''B1'''||'''B0''' &lt;br /&gt;
|-&lt;br /&gt;
|colspan=2|/Input Enable||colspan=3|/Noise Enable||colspan=3|/Tone Enable &lt;br /&gt;
|-&lt;br /&gt;
|B||A||C||B||A||C||B||A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Amplitude Control (Registers R10,R11,R12) ===&lt;br /&gt;
&lt;br /&gt;
The amplitudes of the signals generated by each of the three D/A Converters (one each for Channels A,B and C) is determined by the contents of the lower 5-bits (B4--B0) of registers R10,R11 and R12 as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Amplitude Control Register'''||'''Channel'''&lt;br /&gt;
|-&lt;br /&gt;
|R10||A &lt;br /&gt;
|-&lt;br /&gt;
|R11||B &lt;br /&gt;
|-&lt;br /&gt;
|R12||C &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''B7'''||'''B6'''||'''B5'''||'''B4'''||'''B3'''||'''B2'''||'''B1'''||'''B0''' &lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|NOT USED||M||L3||L2||L1||L0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3| ||amplitude &amp;quot;mode&amp;quot;||cospan=4|4-bit &amp;quot;fixed&amp;quot; amplitude level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Envelope Generator Control (Registers R13,R14 and R15) ===&lt;br /&gt;
&lt;br /&gt;
To acomplish the generation of fairly complex envelope patterns, two independant methods of control are provided in the PSG: first, it is possible to vary the frequency of the envelope using registers R13 and R14; and second, the relative shape and cycle pattern of the envelope can be varied using register R15. The following paragraphis explain the details of the envelope control functions, describing first the envelope period control and then the envelope shape/cycle control.&lt;br /&gt;
&lt;br /&gt;
== ENVELOPE PERIOD CONTROL (Registers R13,R14) ==&lt;br /&gt;
&lt;br /&gt;
The frequency of the envelope is obtained in the PSG by first counting down the input clock by 256, then by furthur counting down the result of the programmed 16-bit Envelope Period value. This 16-bit value is obtained in the PSG by combining the contents of the Envelope Coarse and Fine Tune registers, as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|colspan=8|'''Envelope Coarse Tune Register R14'''||colspan=8|'''Envelope Fine Tune Register R13'''&lt;br /&gt;
|-&lt;br /&gt;
|B7||B6||B5||B4||B3||B2||B1||B0||B7||B6||B5||B4||B3||B2||B1||B0&lt;br /&gt;
|-&lt;br /&gt;
|EP15||EP14||EP13||EP12||EP11||EP10||EP9||EP8||EP7||EP6||EP5||EP4||EP3||EP2||EP1||EP0 &lt;br /&gt;
|-&lt;br /&gt;
|colspan=16|16-bit Envelope Period (EP) to Envelope Generator &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ENVELOPE SHAPE/CYCLE CONTROL (Register R15) ==&lt;br /&gt;
&lt;br /&gt;
The Envelope Generator furthur counts down the envelope frequency by 16, producing a 16-state per cycle envelope pattern as defined by its 4-bit counter output, E3 E2 E1 E0. The particular shape and cycle pattern of any desired envelope is accomplished by controlling the count pattern (count up/count down) of the 4-bit counter and by defining a single cycle or repeat-cycle pattern. &lt;br /&gt;
&lt;br /&gt;
This envelope shape/cycle control is contained in the 4 bits (B3--B0) of register R15. Each of these 4 bits controls a function in the envelope generator, as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Envelope Shape/Cycle Control Register (R15) ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|B7||B6||B5||B4||B3||B2||B1||B0 &lt;br /&gt;
|-&lt;br /&gt;
|colspan=4|NOT USED||Hold||Alternate||Attack||Continue&lt;br /&gt;
|-&lt;br /&gt;
|colspan=4| ||colspan=4|Function (To Envelope Generator)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== I/O Port Data Store (Registers R16, R17) ==&lt;br /&gt;
&lt;br /&gt;
Registers R16 and R17 function as intermediate data storage registers between the PSG/CPU data bus (DA0--DA7) and the two I/O ports (IOA7--IOA0 and IOB7--IOB0). Both ports are available in the AY-3-8910; only I/O port A is available in the AY-3-8912; none are available on the AY-3-8913. Using registers R16 and R17 for the transfer of I/O data has no effect on sound generation. &lt;br /&gt;
&lt;br /&gt;
== D/A Converter Operation ==&lt;br /&gt;
&lt;br /&gt;
Since the primary use of the PSG is to produce sound for the highly imperfect amplitude detection mechanism of the human ear, the D/A conversion is performed in logarithmic steps with a normalized voltage range of from 0 to 1 Volt. The specific amplitude control of each of the three D/A Converters is acomplished by the three sets of 4-bit outputs of the Amplitude Control block, while the Mixer outputs provide the base signal frequency (Noise and/or Tone). &lt;br /&gt;
&lt;br /&gt;
'''Fig 1. ENVELOPE SHAPE/CYCLE OPERATION'''&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|colspan=4|R15 Bits||rowspan=3|GRAPHICAL REPRESENTATION OF ENVELOPE GENERATOR OUTPUT (E3 E2 E1 E0) &lt;br /&gt;
|-&lt;br /&gt;
|B3||B2||B1||B0&lt;br /&gt;
|-&lt;br /&gt;
|Continue||Attack||Alternate||Hold&lt;br /&gt;
|-&lt;br /&gt;
|0||0||x||x||[[Image:psg1.gif]]&lt;br /&gt;
|-&lt;br /&gt;
|0||1||x||x||[[Image:psg3.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||0||0||[[Image:psg5.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||0||1||[[Image:psg1.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||1||0||[[Image:psg8.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||1||1||[[Image:psg4.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||1||0||0||[[Image:psg6.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||1||0||1||[[Image:psg2.gif]] &lt;br /&gt;
|-&lt;br /&gt;
|1||1||1||0||[[Image:psg7.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||1||1||1||[[Image:psg3.gif]]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=4| ||[[Image:psg15.gif]]  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Fig 2. DETAIL OF TWO CYCLES Of Fig 1 (ref. waveform &amp;quot;1010&amp;quot; in Fig.1)'''&lt;br /&gt;
&lt;br /&gt;
[[Image:psg9.gif]]&lt;br /&gt;
 &lt;br /&gt;
'''Fig 3. D/A CONVERTER OUTPUT'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 4. SINGLE TONE WITH ENVELOPE SHAPE/CYCLE PATTERN 1010'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 5. MIXTURE OF THREE TONES WITH FIXED AMPLITUDE'''&lt;br /&gt;
&lt;br /&gt;
== ELECTRICAL CHARACTERISTICS (AY-3-8910, AY-3-8912) ==&lt;br /&gt;
&lt;br /&gt;
Maximum Ratings*&lt;br /&gt;
&lt;br /&gt;
Storage Temperature ...... -55°C to +150°C &lt;br /&gt;
&lt;br /&gt;
Operating Temperature ...... 0°C to 40°C &lt;br /&gt;
&lt;br /&gt;
Vcc and all other input/Output Voltages with Respect to Vss ...... -0.3V to +8.0V &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exceeding these ratings could cause permanent damage to the device. This is a stress rating only and functional operation of the devices at these conditions is not implied -- operating ranges are specified in Standard Conditions. Exposure to absolute maximum rating conditions for extended periods may affect device reliability. Data labelled &amp;quot; typical&amp;quot; is presented for design guidance only and is not guaranteed. &lt;br /&gt;
&lt;br /&gt;
'''Storage Conditions (unless otherwise noted):'''&lt;br /&gt;
&lt;br /&gt;
Vcc = ± 5V ±5%&lt;br /&gt;
&lt;br /&gt;
Vss = GND&lt;br /&gt;
&lt;br /&gt;
Operating Temperature = 0°C to +40°C &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Characteristics'''||'''Sym'''||'''Min'''||'''Typ**'''||'''Max'''||'''Units'''||'''Conditions'''&lt;br /&gt;
|-&lt;br /&gt;
|'''DC CHARACTERISTICS'''&lt;br /&gt;
|-&lt;br /&gt;
|'''All inputs'''&lt;br /&gt;
|-&lt;br /&gt;
|Low level||Vil||0||-||0.6||V  &lt;br /&gt;
|-&lt;br /&gt;
|High level||Vih||2.4||-||Vcc||V  &lt;br /&gt;
|-&lt;br /&gt;
|'''All Outputs (except Analog Channel Outputs'''&lt;br /&gt;
|-&lt;br /&gt;
|Low level||Vol||0||-||0.5||V||Iol = 1.6mA, 20pF &lt;br /&gt;
|-&lt;br /&gt;
|High level||Voh||2.4||-||Vcc||V||Ioh = 100uA, 20pF &lt;br /&gt;
|-&lt;br /&gt;
|Analog Channel Outputs||Vo||0||-||60||dB||Test Curcuit: Fig 6 &lt;br /&gt;
|-&lt;br /&gt;
|Power Supply Current||Icc||-||45||85||mA  &lt;br /&gt;
|-&lt;br /&gt;
|'''AC CHARACTERISTICS'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Clock Input'''||Fig 7. &lt;br /&gt;
|-&lt;br /&gt;
|Frequency||fc||1||-||2||MHz &lt;br /&gt;
|-&lt;br /&gt;
|Rise Time||tr||-||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|Fall Time||tf||-||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|Duty Cycle||-||25||50||85||% &lt;br /&gt;
|-&lt;br /&gt;
|'''Bus Signals (BDIR,BC2,BC1)'''&lt;br /&gt;
|-&lt;br /&gt;
|Associative Delay Time||tao||-||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''Reset'''Fig. 8 &lt;br /&gt;
|-&lt;br /&gt;
|Reset Pulse Width||trw||500||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Reset to Bus Control Delay Time||trb||100||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''A9, A8, DA7--DA0 (Address Mode)'''||Fig 9 &lt;br /&gt;
|-&lt;br /&gt;
|Address Setup Time||tas||400||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Address Hold Time||tah||100||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Write Mode)'''||Fig. 10 &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Pulse Width||tdw||500||-||10,000||ns &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Setup Time||tds||50||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Hold Time||tdh||100||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Read Mode)'''||Fig. 11 &lt;br /&gt;
|-&lt;br /&gt;
|Read Data Access Time||tda||-||250||500||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Inactive Mode)'''&lt;br /&gt;
|-&lt;br /&gt;
|Tristate Delay Time||tts||-||100||200||ns &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** Typical values are at ±25°C and nominal voltages &lt;br /&gt;
&lt;br /&gt;
'''Analogue Channel Output Test Curcuit'''&lt;br /&gt;
&lt;br /&gt;
[[Image:psg11.gif]]&lt;br /&gt;
&lt;br /&gt;
== ELECTRICAL CHARACTERISTICS (AY-3-8913) ==&lt;br /&gt;
&lt;br /&gt;
Maximum Ratings*&lt;br /&gt;
&lt;br /&gt;
Storage Temperature ...... -55°C to +150°C &lt;br /&gt;
&lt;br /&gt;
Operating Temperature ...... 0°C to 70°C &lt;br /&gt;
&lt;br /&gt;
Vcc and all other input/Output Voltages with Respect to Vss ...... -0.3V to +8.0V &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Exceeding these ratings could cause permanent damage to the device. This is a stress rating only and functional operation of the devices at these conditions is not implied -- operating ranges are specified in Standard Conditions. Exposure to absolute maximum rating conditions for extended periods may affect device reliability. Data labelled &amp;quot; typical&amp;quot; is presented for design guidance only and is not guaranteed. &lt;br /&gt;
&lt;br /&gt;
'''Storage Conditions (unless otherwise noted):'''&lt;br /&gt;
&lt;br /&gt;
Vcc = ± 5V ±5%&lt;br /&gt;
&lt;br /&gt;
Vss = GND&lt;br /&gt;
&lt;br /&gt;
Operating Temperature = 0°C to +70°C &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Characteristics'''||'''Min'''||'''Sym'''||'''Max'''||'''Units'''||'''Conditions'''&lt;br /&gt;
|-&lt;br /&gt;
|'''DC CHARACTERISTICS'''&lt;br /&gt;
|-&lt;br /&gt;
|'''All inputs'''&lt;br /&gt;
|-&lt;br /&gt;
|Low level||Vil||0||0.7||V  &lt;br /&gt;
|-&lt;br /&gt;
|High level||Vih||2.2||Vcc||V  &lt;br /&gt;
|-&lt;br /&gt;
|'''All Outputs (except Analog Channel Outputs'''&lt;br /&gt;
|-&lt;br /&gt;
|Low level||Vol||0||0.4||V||1||TTL||Load &lt;br /&gt;
|-&lt;br /&gt;
|High level||Voh||2.4||Vcc||V||+100pf &lt;br /&gt;
|-&lt;br /&gt;
|'''Analog Channel Outputs'''||Vo||0||2000||uA||Test Curcuit: Fig 6 &lt;br /&gt;
|-&lt;br /&gt;
|'''Power Supply Current'''||Icc||-||85||mA  &lt;br /&gt;
|-&lt;br /&gt;
|'''AC CHARACTERISTICS'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Clock Input'''||Fig 7. &lt;br /&gt;
|-&lt;br /&gt;
|Frequency||fc||1||2.5||MHz &lt;br /&gt;
|-&lt;br /&gt;
|Rise Time||tr||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|Fall Time||tf||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|Duty Cycle||-||40||60||% &lt;br /&gt;
|-&lt;br /&gt;
|'''Bus Signals (BDIR,BC2,BC1)'''&lt;br /&gt;
|-&lt;br /&gt;
|Associative Delay Time||tao||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''Reset'''||Fig. 8 &lt;br /&gt;
|-&lt;br /&gt;
|Reset Pulse Width||trw||5||-||us &lt;br /&gt;
|-&lt;br /&gt;
|Reset to Bus Control Delay Time||trb||100||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''A9, A8, DA7--DA0 (Address Mode)'''||Fig 9 &lt;br /&gt;
|-&lt;br /&gt;
|Address Setup Time tas 300 - ns &lt;br /&gt;
|-&lt;br /&gt;
|Address Hold Time tah 50 - ns &lt;br /&gt;
|-&lt;br /&gt;
|DA7--DA0 (Write Mode)'''||Fig. 10 &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Pulse Width||tdw||1800||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Setup Time||tds||50||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Hold Time||tdh||100||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Read Mode)'''||Fig. 11 &lt;br /&gt;
|-&lt;br /&gt;
|Read Data Access Time||tda||-||350||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Inactive Mode)'''  &lt;br /&gt;
|-&lt;br /&gt;
|Tristate Delay Time||tts||-||400||ns&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fig 7. CLOCK AND BUS SIGNAL TIMING'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 8. RESET TIMING'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 9. LATCH ADDRESS TIMING'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 10. WRITE DATA TIMING'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 11. READ DATA TIMING'''&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[[AY|AY's page with less specific subjects]] &lt;br /&gt;
&lt;br /&gt;
[[Category:Electronic Component]] [[Category:Datasheet]][[Category:Music and sound|*]][[Category:CPC Internal Components]]&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Datasheet_AY-8913&amp;diff=66941</id>
		<title>Datasheet AY-8913</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Datasheet_AY-8913&amp;diff=66941"/>
				<updated>2011-03-14T01:51:15Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Noise Generator Control (Register R6) */ Removed R6 from table itself&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General Instruments - AY-3-8910, AY-3-8912, AY-3-8913 Programmable Sound Generator ==&lt;br /&gt;
&lt;br /&gt;
=== FEATURES ===&lt;br /&gt;
&lt;br /&gt;
* Full Software Control of Sound Generation &lt;br /&gt;
* Interface to Most 8-bit and 16-bit Microprocessors &lt;br /&gt;
* Three independantly Programmed Analog Outputs &lt;br /&gt;
* Two 8-bit General Purpose I/O ports (AY-3-8910) &lt;br /&gt;
* One 8-bit General Purpose I/O port (AY-3-8912) &lt;br /&gt;
* Single +5 Volt Supply &lt;br /&gt;
&lt;br /&gt;
== DESCRIPTION ==&lt;br /&gt;
&lt;br /&gt;
The [[AY]]-3-8910/8912/8913 Programmable Sound Generator (PSG) is a LSI Circuit which can produce a wide variety of complex sounds under software control. The AY-3-8910/8912/8913 is manufactured in the General Instrument N-Channel Ion Implant Process. Operation requires a single +5V power supply, a TTL compatible clock, and a microprocessor controller such as the General Instrument 16-bit CP1610 or one of the PIC1650 series of 8-bit microcomputers. &lt;br /&gt;
&lt;br /&gt;
The PSG is easily interfaced to any bus orientation system, its flexibility makes it useful in applications such as music synthesis, sound effects generation, audible alarms, tone signalling and FSK modems. The analog sound outputs can each provide 4bits of logarithmic digital to analog conversion greatly enhancing the dynamic range of the sounds produced. &lt;br /&gt;
&lt;br /&gt;
In order to perform sound effects while allowing the processor to continue its other tasks, the PSG can continue to produce sound after the initial commands have been given by the control processor. The fact that realistic sound production often involves more than one effect is satisfied by the three independantly controllable channels available in the PSG. &lt;br /&gt;
&lt;br /&gt;
All of the circuit control signals are digital in nature and intended to be provided directly by a microprocessor/microcomputer. This means that one PSG can produce the full range of required sounds with no change in external circuitry. Since the frequency response of the PSG ranges from sub-audible at its lowest frequency to post-audible at its highest frequency, there are few sounds which are beyond reproduction ith only the simplest electical connections. &lt;br /&gt;
&lt;br /&gt;
Since most applications of a microprocessor/PSG system would also require interfacing between the outside world and the microprocessor, this facility has been designed into the PSG. The AY-3-8910 has two general purpose 8-bit I/O ports and is supplied in a 40 lead package; the AY-3-8912 has one port and 28 leads; the AY-3-8913 has no ports and 24-leads. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PIN CONFIGURATIONS ==&lt;br /&gt;
&lt;br /&gt;
=== 40 LEAD DUAL IN LINE ===&lt;br /&gt;
&lt;br /&gt;
AY-3-8910&lt;br /&gt;
&lt;br /&gt;
[[Image:psg14.gif]]&lt;br /&gt;
&lt;br /&gt;
=== 28 LEAD DUAL IN LINE ===&lt;br /&gt;
&lt;br /&gt;
AY-3-8912&lt;br /&gt;
&lt;br /&gt;
[[Image:psg12.gif]]&lt;br /&gt;
&lt;br /&gt;
=== 24 LEAD DUAL IN LINE ===&lt;br /&gt;
&lt;br /&gt;
AY-3-8913&lt;br /&gt;
&lt;br /&gt;
[[Image:psg13.gif]]&lt;br /&gt;
&lt;br /&gt;
== PIN FUNCTIONS ==&lt;br /&gt;
&lt;br /&gt;
'''DA7--DA0 (input/output/high impedance)   pins 30--37 (AY-3-8910)   pins 21--28 (AY-3-8912)   pins 4--11 (AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
'''Data/Address 7--0:'''&lt;br /&gt;
&lt;br /&gt;
These 8 lines comprise the 8-bit bidirectional bus used by the microprocessor to send both data and addresses to the PSG and to recieve data from the PSG. In the data mode, DA7--DA0 correspond to Register Array bits B7--B0. In the address mode, DA3--DA0 select the register number (0--17 8) and a DA7-DA4 in conjunction with address inputs /A9 and A8 for the high order address (chip select). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''A8 (input):   pin 25 (AY-3-8910)   pin 17 (AY-3-8912)   pin 23 (AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''/A9 (input):   pin 24 (AY-3-8910)   pin 28 (AY-3-8912)   (not provided on AY-3-8913)''' &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''/Address 9,Address 8'''&lt;br /&gt;
&lt;br /&gt;
These &amp;quot;extra&amp;quot; address bits are made available to enable the positioning of the PSG (assigning a 16 word memory space) in a total 1,024 word memory area rather than in a 256 word memory area as defined by address bits DA7--DA0 alone. If the memory size does not require the use of these extra address lines they may be left unconnected as each is provided with either an on-chip pull down (/A9) or pull-up (A8) resistor. In &amp;quot;noisy&amp;quot; environments, however, it is recommended that /A9 and A8 be tied to an external ground and +5V, respectively, if they are not to be used. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''/RESET (input):   pin 23 (AY-3-8910)   pin 21 (AY-3-8913)   pin 16 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
For initialization/power on purposes, applying a logic &amp;quot;0&amp;quot; (ground) to the /Reset pin will reset all registers to &amp;quot;0&amp;quot;. The /Reset pin is provided with an on-chip pull-up resistor. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CLOCK (signal):   pin 22 (AY-3-8910)   pin 20 (AY-3-8913)   pin 15 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
This TTL-compatible input supplies the timing reference for the Tone, Noise and Envelope Generators. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BDIR,BC2,BC1 (inputs):   pins 27,28,29 (AY-3-8910)   pins 18,19,20 (AY-3-8912)   pins 2,3 (No BC2 on AY-3-8913 see below)''' &lt;br /&gt;
&lt;br /&gt;
'''Bus DiRection, Bus Control 2,1'''&lt;br /&gt;
&lt;br /&gt;
These bus control signals are generated directly by the CP1610 series of microprocessors to control all external and internal bus operations in the PSG. When using a processor other than the Cp1610, these signals can be provided either by comparable bus signals or by simulating the signals on I/O lines of the processor. The PSG decodes these signals as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|''BDIR''||''BC2''||''BC1''||''CP1610 Function''||''PSG Function''&lt;br /&gt;
|-&lt;br /&gt;
|0||0||0||NACT||INACTIVE. See 010 (IAB) &lt;br /&gt;
|-&lt;br /&gt;
|0||0||1||ADAR||LATCH ADDRESS. See 111 (INTAK) &lt;br /&gt;
|-&lt;br /&gt;
|0||1||0||IAB||INACTIVE: The PSG/CPU bus is inactive, DA7--DA0 are in high impedence state &lt;br /&gt;
|-&lt;br /&gt;
|0||1||1||DTB||READ FROM PSG. This signal causes the contents of the register which is currently addressed to appear on the PSG/CPU bus. DA7--DA0 are in output mode.  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||0||BAR||LATCH ADDRESS. See 111 (INTAK) &lt;br /&gt;
|-&lt;br /&gt;
|1||0||1||DW||INACTIVE. See 010 (IAB) &lt;br /&gt;
|-&lt;br /&gt;
|1||1||0||DWS||WRITE TO PSG. This signal indicates that the bus contains register data which should be latched into the currently addressed register DA7--DA0 are in input mode.  &lt;br /&gt;
|-&lt;br /&gt;
|1||1||1||INTAK||LATCH ADDRESS. This signal indicates that the bus contains a register address which should be latched in the PSG. DA7--DA0 are in the input mode.  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While interfacing to a processor other than the CP1610 would simply require simulating the above decoding, the redundancies in the PSG function vs bus control signals can be used to advantage in that only four of the eight possible decoded bus functions are required by the PSG. This could simpify the programming of the bus control signals to the following, which only require that the processor generate two bus control signals (BDIR and BC1, with BC2 tied to +5v). This is the case with the AY-3-8913 with BC2 pulled high internally. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|''BDIR''||''BC2''||''BC1''||''PSG Function''&lt;br /&gt;
|-&lt;br /&gt;
|0||1||0||INACTIVE &lt;br /&gt;
|-&lt;br /&gt;
|0||1||1||READ FROM PSG &lt;br /&gt;
|-&lt;br /&gt;
|1||1||0||WRITE TO PSG &lt;br /&gt;
|-&lt;br /&gt;
|1||1||1||LATCH ADDRESS &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:psg10.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ANALOG CHANNEL A,B,C (outputs):   pins 4,3,38 (AY-3-8910)   pins 5,4,1 (AY-3-8912)   pins 17,15,18 (AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
Each of these signals is the output of its corresponding D/A Converter, and provides a up to 1V peak-peak signal representing the complex sound waveshape generated by the PSG. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''IOA7--IOA0 (input/output):   pins 14--21 (AY-3-8910)   pins 7--14 (AY-3-8912)   (not provided on AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
'''IOB7--IOB0 (input/output):   pins 6--13 (AY-3-8910)   (not provided on AY-3-8912)   (not provided on AY-3-8913)'''&lt;br /&gt;
&lt;br /&gt;
'''Input/Output A7--A0, B7--B0'''&lt;br /&gt;
&lt;br /&gt;
Each of these two parallel input/output ports provides 8 bits of parallel data to/from the PSG/CPU bus from/to any external devices connected to the IOA or IOB pins. Each pin is provided with an on-chip pull-up resistor, so that when in the &amp;quot;input&amp;quot; mode, all pins will read normally high. Therefore, the recommended method for scanning external switches would be to ground the input bit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''TEST 1:   pin 39 (AY-3-8910)   pin 14 (AY-3-8913)   pin 2 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
'''TEST 2:   pin 26 (AY-3-8910)   pin 12 (AY-3-8913)   (not connected on AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
These pins are for General Instrument test purposes only and should be left open -- do not use as tie-points. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vcc:   pin 40 (AY-3-8910)   pin 13 (AY-3-8913)   pin 3 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
Nominal +5Volt power supply to PSG. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vss:   pin 1 (AY-3-8910)   pin 19 (AY-3-8913)   pin 6 (AY-3-8912)'''&lt;br /&gt;
&lt;br /&gt;
Ground reference for the PSG. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''/CHIP SELECT (Input):   pin 24 (AY-3-8913 only)'''&lt;br /&gt;
 &lt;br /&gt;
This input signal goes low to enable the PSG to read data on the data bus or write data from the data bus to one of the internal registers. For these above operations to occur, this signal must be true in addition to the current bus address being a valid PSG address. This signal must be valid for all read and write operations. This pin has an internal pull down to Vss.&lt;br /&gt;
&lt;br /&gt;
== ARCHITECTURE ==&lt;br /&gt;
&lt;br /&gt;
The AY-3-8910/8912/8913 is a register oriented Programmable Sound Generator (PSG). Communication between the processor and the PSG is based on the concept of memory-mapped I/O. Control commands are issued to the PSG by writing to 16 memory-mapped registers. Each of the 16 registers within the PSG is also readable so that the microprocessor can determine, as necessary, present states or stored data values. &lt;br /&gt;
&lt;br /&gt;
All functions of the PSG are controlled through the 16 registers which once programmed, generate and sustain the sounds, thus freeing the system processor for other tasks. &lt;br /&gt;
&lt;br /&gt;
== REGISTER ARRAY ==&lt;br /&gt;
&lt;br /&gt;
The principle element of the PSG is the array of 16 read/write control registers. These 16 registers look to the CPU as a block of memory and as such occupy a 16 word block out of 1,024 possible addresses. The 10 address bits (8 bits on the common data/address bus, and 2 seperate address bits A8 and /A9) are decoded as follows: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''/A9*'''||'''A8'''||'''DA7'''||'''DA6'''||'''DA5'''||'''DA4'''||'''DA3'''||'''DA2'''||'''DA1'''||'''DA0''' &lt;br /&gt;
|-&lt;br /&gt;
|0||1||0||0||0||0||0||0||0||0 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''THRU'''&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|-&lt;br /&gt;
|'''0'''||'''1'''||'''0'''||'''0'''||'''0'''||'''0'''||'''1'''||'''1'''||'''1'''||'''1''' &lt;br /&gt;
|-&lt;br /&gt;
|colspan=4|High Order (Chip Select)||colspan=4|Low order (Register No.) &lt;br /&gt;
|}&lt;br /&gt;
* /A9 is not provided on the AY-3-8912 &lt;br /&gt;
&lt;br /&gt;
The four low order address bits select one of the 16 registers (R0--R17). The six high order address bits function as &amp;quot;chip selects&amp;quot; to control the tri-state bidirectional buffers (when the high order address bits are &amp;quot;incorrect&amp;quot;, the bi-directional buffers are forced to the high impedance state). High order address bits /A9, A8 are fixed in the PSG design to recognise a 01 code; high order address bits DA7-DA4 may be mask programmed to any 4-bit code by a special order factory mask modification. Unless otherwise specified, address bits DA7--DA4 are programmed to recognise only a 0000 code. A valid high order address latches the register address (the low order 4 bits) in the Register Address Latch/Decoder block. A latched address will remain valid until the receipt of a new address, enabling multiple reads and writes of the same register contents without the need for redundant re-addressing. &lt;br /&gt;
&lt;br /&gt;
Conditioning of the Register Address Latch/Decoder and the Bidirectional Buffers to recognise the bus function required (inactive, latch address, write data, or read data) is accomplished by the Bus Control Decode block. &lt;br /&gt;
&lt;br /&gt;
== SOUND GENERATING BLOCKS ==&lt;br /&gt;
&lt;br /&gt;
The basic blocks in the PSG which produce the programmed sounds include: &lt;br /&gt;
&lt;br /&gt;
* Tone Generators produce the basic square wave tone frequencies for each channel (A,B,C) &lt;br /&gt;
&lt;br /&gt;
* Noise Generator produces a frequency modulated pseudo random pulse width square wave output. &lt;br /&gt;
&lt;br /&gt;
* Mixers combine the outputs of the Tone Generators and the Noise Generator. One for each channel (A,B,C) &lt;br /&gt;
&lt;br /&gt;
* Amplitude Control provides the D/A Converters with either a fixed or variable amplitude pattern. The fixed amplitude is under direct CPU control; the variable amplitude is accomplished by using, the output of the Envelope Generator.  &lt;br /&gt;
&lt;br /&gt;
* Envelope Generator produces an evelope pattern which can be used to amplitude modulate the output of each Mixer. &lt;br /&gt;
&lt;br /&gt;
* D/A Converters the three D/A Converters each produce up to a 16 level output signal as determined by the Amplitude Control. &lt;br /&gt;
&lt;br /&gt;
== I/O PORTS ==&lt;br /&gt;
&lt;br /&gt;
Two additional blocks are shown in the PSG Block Diagram which have nothing directly to do with the production of sound -- these are the two I/O ports (A and B). Since virtually all uses of microprocessor-based sound would require interfacing between the outside world and the processor, this facility has been included in the PSG. Data to/from the CPU bus may be read/written to either of two 8-bit I/O Ports without affecting any other function of the PSG. The I/O Ports are TTL-compatible and are provided with internal pull-ups on each pin. Both Ports are available on the AY-3-8910; only I/O Port A is available on the AY-3-8912; no ports are available on the AY-3-8913. &lt;br /&gt;
&lt;br /&gt;
'''PSG BLOCK DIAGRAM'''&lt;br /&gt;
&lt;br /&gt;
[[Image:psg16.gif]]&lt;br /&gt;
&lt;br /&gt;
== OPERATION ==&lt;br /&gt;
&lt;br /&gt;
Since all functions of the PSG are controlled by the processor via a series of register loads, a detailed description of the PSG operation can best be acomplished by relating each PSG function to the control of its corresponding register. The function of creating or programming a specific sound or sound effect logically follows the control sequence listed: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Operation'''|'''Registers'''|'''Function'''&lt;br /&gt;
|-&lt;br /&gt;
|Tone Generator Control||R0--R5||Program tone periods. &lt;br /&gt;
|-&lt;br /&gt;
|Noise Generator Control||R6||Program noise period. &lt;br /&gt;
|-&lt;br /&gt;
|Mixer Control||R7||Enable tone and/or noise on selected channels. &lt;br /&gt;
|-&lt;br /&gt;
|Amplitude Control||R10--R12||Select &amp;quot;fixed&amp;quot; or &amp;quot;envelope-variable&amp;quot; amplitudes. &lt;br /&gt;
|-&lt;br /&gt;
|Envelope Generator Control||R13--R15||Program envelope period and select envelope pattern. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tone Generator Control (Registers R0,R1,R2,R3,R4,R5) ===&lt;br /&gt;
&lt;br /&gt;
The frequency of each square wave generated by the three Tone Generators (one each for Channels A,B and C) is obtained in the PSG by first counting down the input clock by 16, then by furthur counting down the result by the programmed 12-bit Tone Period value. Each 12-bit value is obtained in the PSG by combining the contents of the relative Course and Fine Tune registers, as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Course Tone Register'''||'''Channel'''||'''Fine Tune Register'''&lt;br /&gt;
|-&lt;br /&gt;
|R1||A||R0 &lt;br /&gt;
|-&lt;br /&gt;
|R3||B||R2 &lt;br /&gt;
|-&lt;br /&gt;
|R5||C||R4 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|colspan=8|'''Course Tone Register'''||colspan=8|'''Fine Tune Register'''&lt;br /&gt;
|-&lt;br /&gt;
|B7||B6||B5||B4||B3||B2||B1||B0||B7||B6||B5||B4||B3||B2||B1||B0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=4|NOT USED||TP11||TP10||TP9||TP8||TP7||TP6||TP5||TP4||TP3||TP2||TP1||TP0&lt;br /&gt;
|-&lt;br /&gt;
|12-bit Tone Period (TP) to Tone Generator &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Noise Generator Control (Register R6) ===&lt;br /&gt;
&lt;br /&gt;
The frequency of the noise source is obtained in the PSG by first counting down the input clock by 16, then by furthur counting down the result by the programmed 5-bit Noise Period value. This 5-bit value consists of the lower 5-bits (B4--B0) of register R6, as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Noise Period Register'''&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|-&lt;br /&gt;
|'''B7'''||'''B6'''||'''B5'''||'''B4'''||'''B3'''||'''B2'''||'''B1'''||'''B0'''&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|NOT USED||colspan=5|5-bit Noise Period (NP) to Noise Generator &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mixer Control Enable (Register R7) ===&lt;br /&gt;
&lt;br /&gt;
Register R7 is multi-function /Enable register which controls the three Noise/Tone Mixers and the two general purpose I/O Ports. &lt;br /&gt;
&lt;br /&gt;
The Mixers, as previously described, combine the noise and tone frequencies for each of the three channels. The determination of combining neither/either/both noise and tone frequencies on each channel is made by the state of bits B5--B0 of R7. &lt;br /&gt;
&lt;br /&gt;
The direction (input or output) of the two general purpose I/O Ports (IOA and IOB) is determined by the state of bits B7 and B6 of R7. &lt;br /&gt;
&lt;br /&gt;
These functions are illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
'''Mixer Control-I/O-Enable Register R7'''&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|-&lt;br /&gt;
|'''B7'''||'''B6'''||'''B5'''||'''B4'''||'''B3'''||'''B2'''||'''B1'''||'''B0''' &lt;br /&gt;
|-&lt;br /&gt;
|colspan=2|/Input Enable||colspan=3|/Noise Enable||colspan=3|/Tone Enable &lt;br /&gt;
|-&lt;br /&gt;
|B||A||C||B||A||C||B||A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Amplitude Control (Registers R10,R11,R12) ===&lt;br /&gt;
&lt;br /&gt;
The amplitudes of the signals generated by each of the three D/A Converters (one each for Channels A,B and C) is determined by the contents of the lower 5-bits (B4--B0) of registers R10,R11 and R12 as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Amplitude Control Register'''||'''Channel'''&lt;br /&gt;
|-&lt;br /&gt;
|R10||A &lt;br /&gt;
|-&lt;br /&gt;
|R11||B &lt;br /&gt;
|-&lt;br /&gt;
|R12||C &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''B7'''||'''B6'''||'''B5'''||'''B4'''||'''B3'''||'''B2'''||'''B1'''||'''B0''' &lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|NOT USED||M||L3||L2||L1||L0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3| ||amplitude &amp;quot;mode&amp;quot;||cospan=4|4-bit &amp;quot;fixed&amp;quot; amplitude level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Envelope Generator Control (Registers R13,R14 and R15) ===&lt;br /&gt;
&lt;br /&gt;
To acomplish the generation of fairly complex envelope patterns, two independant methods of control are provided in the PSG: first, it is possible to vary the frequency of the envelope using registers R13 and R14; and second, the relative shape and cycle pattern of the envelope can be varied using register R15. The following paragraphis explain the details of the envelope control functions, describing first the envelope period control and then the envelope shape/cycle control.&lt;br /&gt;
&lt;br /&gt;
== ENVELOPE PERIOD CONTROL (Registers R13,R14) ==&lt;br /&gt;
&lt;br /&gt;
The frequency of the envelope is obtained in the PSG by first counting down the input clock by 256, then by furthur counting down the result of the programmed 16-bit Envelope Period value. This 16-bit value is obtained in the PSG by combining the contents of the Envelope Coarse and Fine Tune registers, as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|colspan=8|'''Envelope Coarse Tune Register R14'''||colspan=8|'''Envelope Fine Tune Register R13'''&lt;br /&gt;
|-&lt;br /&gt;
|B7||B6||B5||B4||B3||B2||B1||B0||B7||B6||B5||B4||B3||B2||B1||B0&lt;br /&gt;
|-&lt;br /&gt;
|EP15||EP14||EP13||EP12||EP11||EP10||EP9||EP8||EP7||EP6||EP5||EP4||EP3||EP2||EP1||EP0 &lt;br /&gt;
|-&lt;br /&gt;
|colspan=16|16-bit Envelope Period (EP) to Envelope Generator &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ENVELOPE SHAPE/CYCLE CONTROL (Register R15) ==&lt;br /&gt;
&lt;br /&gt;
The Envelope Generator furthur counts down the envelope frequency by 16, producing a 16-state per cycle envelope pattern as defined by its 4-bit counter output, E3 E2 E1 E0. The particular shape and cycle pattern of any desired envelope is accomplished by controlling the count pattern (count up/count down) of the 4-bit counter and by defining a single cycle or repeat-cycle pattern. &lt;br /&gt;
&lt;br /&gt;
This envelope shape/cycle control is contained in the 4 bits (B3--B0) of register R15. Each of these 4 bits controls a function in the envelope generator, as illustrated in the following: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Envelope Shape/Cycle Control Register (R15) ==&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|B7||B6||B5||B4||B3||B2||B1||B0 &lt;br /&gt;
|-&lt;br /&gt;
|colspan=4|NOT USED||Hold||Alternate||Attack||Continue&lt;br /&gt;
|-&lt;br /&gt;
|colspan=4| ||colspan=4|Function (To Envelope Generator)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== I/O Port Data Store (Registers R16, R17) ==&lt;br /&gt;
&lt;br /&gt;
Registers R16 and R17 function as intermediate data storage registers between the PSG/CPU data bus (DA0--DA7) and the two I/O ports (IOA7--IOA0 and IOB7--IOB0). Both ports are available in the AY-3-8910; only I/O port A is available in the AY-3-8912; none are available on the AY-3-8913. Using registers R16 and R17 for the transfer of I/O data has no effect on sound generation. &lt;br /&gt;
&lt;br /&gt;
== D/A Converter Operation ==&lt;br /&gt;
&lt;br /&gt;
Since the primary use of the PSG is to produce sound for the highly imperfect amplitude detection mechanism of the human ear, the D/A conversion is performed in logarithmic steps with a normalized voltage range of from 0 to 1 Volt. The specific amplitude control of each of the three D/A Converters is acomplished by the three sets of 4-bit outputs of the Amplitude Control block, while the Mixer outputs provide the base signal frequency (Noise and/or Tone). &lt;br /&gt;
&lt;br /&gt;
'''Fig 1. ENVELOPE SHAPE/CYCLE OPERATION'''&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|colspan=4|R15 Bits||rowspan=3|GRAPHICAL REPRESENTATION OF ENVELOPE GENERATOR OUTPUT (E3 E2 E1 E0) &lt;br /&gt;
|-&lt;br /&gt;
|B3||B2||B1||B0&lt;br /&gt;
|-&lt;br /&gt;
|Continue||Attack||Alternate||Hold&lt;br /&gt;
|-&lt;br /&gt;
|0||0||x||x||[[Image:psg1.gif]]&lt;br /&gt;
|-&lt;br /&gt;
|0||1||x||x||[[Image:psg3.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||0||0||[[Image:psg5.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||0||1||[[Image:psg1.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||1||0||[[Image:psg8.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||0||1||1||[[Image:psg4.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||1||0||0||[[Image:psg6.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||1||0||1||[[Image:psg2.gif]] &lt;br /&gt;
|-&lt;br /&gt;
|1||1||1||0||[[Image:psg7.gif]]  &lt;br /&gt;
|-&lt;br /&gt;
|1||1||1||1||[[Image:psg3.gif]]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=4| ||[[Image:psg15.gif]]  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Fig 2. DETAIL OF TWO CYCLES Of Fig 1 (ref. waveform &amp;quot;1010&amp;quot; in Fig.1)'''&lt;br /&gt;
&lt;br /&gt;
[[Image:psg9.gif]]&lt;br /&gt;
 &lt;br /&gt;
'''Fig 3. D/A CONVERTER OUTPUT'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 4. SINGLE TONE WITH ENVELOPE SHAPE/CYCLE PATTERN 1010'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 5. MIXTURE OF THREE TONES WITH FIXED AMPLITUDE'''&lt;br /&gt;
&lt;br /&gt;
== ELECTRICAL CHARACTERISTICS (AY-3-8910, AY-3-8912) ==&lt;br /&gt;
&lt;br /&gt;
Maximum Ratings*&lt;br /&gt;
&lt;br /&gt;
Storage Temperature ...... -55°C to +150°C &lt;br /&gt;
&lt;br /&gt;
Operating Temperature ...... 0°C to 40°C &lt;br /&gt;
&lt;br /&gt;
Vcc and all other input/Output Voltages with Respect to Vss ...... -0.3V to +8.0V &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exceeding these ratings could cause permanent damage to the device. This is a stress rating only and functional operation of the devices at these conditions is not implied -- operating ranges are specified in Standard Conditions. Exposure to absolute maximum rating conditions for extended periods may affect device reliability. Data labelled &amp;quot; typical&amp;quot; is presented for design guidance only and is not guaranteed. &lt;br /&gt;
&lt;br /&gt;
'''Storage Conditions (unless otherwise noted):'''&lt;br /&gt;
&lt;br /&gt;
Vcc = ± 5V ±5%&lt;br /&gt;
&lt;br /&gt;
Vss = GND&lt;br /&gt;
&lt;br /&gt;
Operating Temperature = 0°C to +40°C &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Characteristics'''||'''Sym'''||'''Min'''||'''Typ**'''||'''Max'''||'''Units'''||'''Conditions'''&lt;br /&gt;
|-&lt;br /&gt;
|'''DC CHARACTERISTICS'''&lt;br /&gt;
|-&lt;br /&gt;
|'''All inputs'''&lt;br /&gt;
|-&lt;br /&gt;
|Low level||Vil||0||-||0.6||V  &lt;br /&gt;
|-&lt;br /&gt;
|High level||Vih||2.4||-||Vcc||V  &lt;br /&gt;
|-&lt;br /&gt;
|'''All Outputs (except Analog Channel Outputs'''&lt;br /&gt;
|-&lt;br /&gt;
|Low level||Vol||0||-||0.5||V||Iol = 1.6mA, 20pF &lt;br /&gt;
|-&lt;br /&gt;
|High level||Voh||2.4||-||Vcc||V||Ioh = 100uA, 20pF &lt;br /&gt;
|-&lt;br /&gt;
|Analog Channel Outputs||Vo||0||-||60||dB||Test Curcuit: Fig 6 &lt;br /&gt;
|-&lt;br /&gt;
|Power Supply Current||Icc||-||45||85||mA  &lt;br /&gt;
|-&lt;br /&gt;
|'''AC CHARACTERISTICS'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Clock Input'''||Fig 7. &lt;br /&gt;
|-&lt;br /&gt;
|Frequency||fc||1||-||2||MHz &lt;br /&gt;
|-&lt;br /&gt;
|Rise Time||tr||-||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|Fall Time||tf||-||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|Duty Cycle||-||25||50||85||% &lt;br /&gt;
|-&lt;br /&gt;
|'''Bus Signals (BDIR,BC2,BC1)'''&lt;br /&gt;
|-&lt;br /&gt;
|Associative Delay Time||tao||-||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''Reset'''Fig. 8 &lt;br /&gt;
|-&lt;br /&gt;
|Reset Pulse Width||trw||500||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Reset to Bus Control Delay Time||trb||100||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''A9, A8, DA7--DA0 (Address Mode)'''||Fig 9 &lt;br /&gt;
|-&lt;br /&gt;
|Address Setup Time||tas||400||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Address Hold Time||tah||100||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Write Mode)'''||Fig. 10 &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Pulse Width||tdw||500||-||10,000||ns &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Setup Time||tds||50||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Hold Time||tdh||100||-||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Read Mode)'''||Fig. 11 &lt;br /&gt;
|-&lt;br /&gt;
|Read Data Access Time||tda||-||250||500||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Inactive Mode)'''&lt;br /&gt;
|-&lt;br /&gt;
|Tristate Delay Time||tts||-||100||200||ns &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
** Typical values are at ±25°C and nominal voltages &lt;br /&gt;
&lt;br /&gt;
'''Analogue Channel Output Test Curcuit'''&lt;br /&gt;
&lt;br /&gt;
[[Image:psg11.gif]]&lt;br /&gt;
&lt;br /&gt;
== ELECTRICAL CHARACTERISTICS (AY-3-8913) ==&lt;br /&gt;
&lt;br /&gt;
Maximum Ratings*&lt;br /&gt;
&lt;br /&gt;
Storage Temperature ...... -55°C to +150°C &lt;br /&gt;
&lt;br /&gt;
Operating Temperature ...... 0°C to 70°C &lt;br /&gt;
&lt;br /&gt;
Vcc and all other input/Output Voltages with Respect to Vss ...... -0.3V to +8.0V &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Exceeding these ratings could cause permanent damage to the device. This is a stress rating only and functional operation of the devices at these conditions is not implied -- operating ranges are specified in Standard Conditions. Exposure to absolute maximum rating conditions for extended periods may affect device reliability. Data labelled &amp;quot; typical&amp;quot; is presented for design guidance only and is not guaranteed. &lt;br /&gt;
&lt;br /&gt;
'''Storage Conditions (unless otherwise noted):'''&lt;br /&gt;
&lt;br /&gt;
Vcc = ± 5V ±5%&lt;br /&gt;
&lt;br /&gt;
Vss = GND&lt;br /&gt;
&lt;br /&gt;
Operating Temperature = 0°C to +70°C &lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable|width: 700px; font-size: 2em;}}&lt;br /&gt;
|'''Characteristics'''||'''Min'''||'''Sym'''||'''Max'''||'''Units'''||'''Conditions'''&lt;br /&gt;
|-&lt;br /&gt;
|'''DC CHARACTERISTICS'''&lt;br /&gt;
|-&lt;br /&gt;
|'''All inputs'''&lt;br /&gt;
|-&lt;br /&gt;
|Low level||Vil||0||0.7||V  &lt;br /&gt;
|-&lt;br /&gt;
|High level||Vih||2.2||Vcc||V  &lt;br /&gt;
|-&lt;br /&gt;
|'''All Outputs (except Analog Channel Outputs'''&lt;br /&gt;
|-&lt;br /&gt;
|Low level||Vol||0||0.4||V||1||TTL||Load &lt;br /&gt;
|-&lt;br /&gt;
|High level||Voh||2.4||Vcc||V||+100pf &lt;br /&gt;
|-&lt;br /&gt;
|'''Analog Channel Outputs'''||Vo||0||2000||uA||Test Curcuit: Fig 6 &lt;br /&gt;
|-&lt;br /&gt;
|'''Power Supply Current'''||Icc||-||85||mA  &lt;br /&gt;
|-&lt;br /&gt;
|'''AC CHARACTERISTICS'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Clock Input'''||Fig 7. &lt;br /&gt;
|-&lt;br /&gt;
|Frequency||fc||1||2.5||MHz &lt;br /&gt;
|-&lt;br /&gt;
|Rise Time||tr||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|Fall Time||tf||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|Duty Cycle||-||40||60||% &lt;br /&gt;
|-&lt;br /&gt;
|'''Bus Signals (BDIR,BC2,BC1)'''&lt;br /&gt;
|-&lt;br /&gt;
|Associative Delay Time||tao||-||50||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''Reset'''||Fig. 8 &lt;br /&gt;
|-&lt;br /&gt;
|Reset Pulse Width||trw||5||-||us &lt;br /&gt;
|-&lt;br /&gt;
|Reset to Bus Control Delay Time||trb||100||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''A9, A8, DA7--DA0 (Address Mode)'''||Fig 9 &lt;br /&gt;
|-&lt;br /&gt;
|Address Setup Time tas 300 - ns &lt;br /&gt;
|-&lt;br /&gt;
|Address Hold Time tah 50 - ns &lt;br /&gt;
|-&lt;br /&gt;
|DA7--DA0 (Write Mode)'''||Fig. 10 &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Pulse Width||tdw||1800||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Setup Time||tds||50||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|Write Data Hold Time||tdh||100||-||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Read Mode)'''||Fig. 11 &lt;br /&gt;
|-&lt;br /&gt;
|Read Data Access Time||tda||-||350||ns &lt;br /&gt;
|-&lt;br /&gt;
|'''DA7--DA0 (Inactive Mode)'''  &lt;br /&gt;
|-&lt;br /&gt;
|Tristate Delay Time||tts||-||400||ns&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Fig 7. CLOCK AND BUS SIGNAL TIMING'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 8. RESET TIMING'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 9. LATCH ADDRESS TIMING'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 10. WRITE DATA TIMING'''&lt;br /&gt;
&lt;br /&gt;
'''Fig 11. READ DATA TIMING'''&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
[[AY|AY's page with less specific subjects]] &lt;br /&gt;
&lt;br /&gt;
[[Category:Electronic Component]] [[Category:Datasheet]][[Category:Music and sound|*]][[Category:CPC Internal Components]]&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=ParaDOS&amp;diff=43938</id>
		<title>ParaDOS</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=ParaDOS&amp;diff=43938"/>
				<updated>2010-04-07T00:49:17Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Manual */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The ultimate [[DOS]] for 3½&amp;quot; drives, coded by [[Executioner|Richard Wilson]] and initially marketed by [[Quantum Computing]].&lt;br /&gt;
&lt;br /&gt;
ParaDOS was a complete replacement for the standard 16k [[AMSDOS]] ROM.&lt;br /&gt;
&lt;br /&gt;
The first 8k was a patched version of the standard AMSDOS code, with the second 8k used for the large-format patch code and a user-friendly disc utility (accessed by the |DRIVE command without any parameters).&lt;br /&gt;
&lt;br /&gt;
Among the functions of the utility were fast file copying and batch erasing.&lt;br /&gt;
&lt;br /&gt;
ParaDOS largely supplanted [[ROMDOS]] as the OS of choice among CPC users.&lt;br /&gt;
&lt;br /&gt;
Unlike ROMDOS, ParaDOS made no check for the presence of an AMSDOS ROM on sign-on.&lt;br /&gt;
&lt;br /&gt;
This enabled it to be used in ROM 7 as a direct replacement for AMSDOS, improving compatibility with programs which unthinkingly initialised ROM 7 alone.&lt;br /&gt;
&lt;br /&gt;
This, however, also cast some doubts on the propriety of its intellectual property stance.&lt;br /&gt;
&lt;br /&gt;
It is likely that ParaDOS would have been questioned more rigorously had it not been introduced towards the end of the CPC's commercial life.&lt;br /&gt;
&lt;br /&gt;
== Systems Cartridges with Parados ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:English System + Parados.rar|English System + Parados.rar]]&lt;br /&gt;
* [[Media:French System + Parados.rar|French System + Parados.rar]]&lt;br /&gt;
* [[Media:Spanish System + Parados.rar|Spanish System + Parados.rar]]&lt;br /&gt;
&lt;br /&gt;
== Manual ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:parados.pdf|ParaDOS Manual]] (pdf)&lt;br /&gt;
* [[Media:Pdos-ddb.txt|ParaDOS DDB and DPB documentation]] (txt)&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
From the Winape web of Richard Wilson on the others downloads section you can download :&lt;br /&gt;
&lt;br /&gt;
  - ParaDOS ROM&lt;br /&gt;
  - ParaDOS Source&lt;br /&gt;
&lt;br /&gt;
http://www.winape.net/downloads.jsp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:Operating System]] [[category:Expansion ROM]] [[category:Manual]]&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=ParaDOS&amp;diff=43937</id>
		<title>ParaDOS</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=ParaDOS&amp;diff=43937"/>
				<updated>2010-04-07T00:48:43Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Manual */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The ultimate [[DOS]] for 3½&amp;quot; drives, coded by [[Executioner|Richard Wilson]] and initially marketed by [[Quantum Computing]].&lt;br /&gt;
&lt;br /&gt;
ParaDOS was a complete replacement for the standard 16k [[AMSDOS]] ROM.&lt;br /&gt;
&lt;br /&gt;
The first 8k was a patched version of the standard AMSDOS code, with the second 8k used for the large-format patch code and a user-friendly disc utility (accessed by the |DRIVE command without any parameters).&lt;br /&gt;
&lt;br /&gt;
Among the functions of the utility were fast file copying and batch erasing.&lt;br /&gt;
&lt;br /&gt;
ParaDOS largely supplanted [[ROMDOS]] as the OS of choice among CPC users.&lt;br /&gt;
&lt;br /&gt;
Unlike ROMDOS, ParaDOS made no check for the presence of an AMSDOS ROM on sign-on.&lt;br /&gt;
&lt;br /&gt;
This enabled it to be used in ROM 7 as a direct replacement for AMSDOS, improving compatibility with programs which unthinkingly initialised ROM 7 alone.&lt;br /&gt;
&lt;br /&gt;
This, however, also cast some doubts on the propriety of its intellectual property stance.&lt;br /&gt;
&lt;br /&gt;
It is likely that ParaDOS would have been questioned more rigorously had it not been introduced towards the end of the CPC's commercial life.&lt;br /&gt;
&lt;br /&gt;
== Systems Cartridges with Parados ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:English System + Parados.rar|English System + Parados.rar]]&lt;br /&gt;
* [[Media:French System + Parados.rar|French System + Parados.rar]]&lt;br /&gt;
* [[Media:Spanish System + Parados.rar|Spanish System + Parados.rar]]&lt;br /&gt;
&lt;br /&gt;
== Manual ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:parados.pdf|ParaDOS Manual]] (pdf)&lt;br /&gt;
* [[Media:Pdos-ddb.txt|ParaDOS DDB and DPB documentation]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
From the Winape web of Richard Wilson on the others downloads section you can download :&lt;br /&gt;
&lt;br /&gt;
  - ParaDOS ROM&lt;br /&gt;
  - ParaDOS Source&lt;br /&gt;
&lt;br /&gt;
http://www.winape.net/downloads.jsp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:Operating System]] [[category:Expansion ROM]] [[category:Manual]]&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=ParaDOS&amp;diff=43936</id>
		<title>ParaDOS</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=ParaDOS&amp;diff=43936"/>
				<updated>2010-04-07T00:48:02Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Manual */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The ultimate [[DOS]] for 3½&amp;quot; drives, coded by [[Executioner|Richard Wilson]] and initially marketed by [[Quantum Computing]].&lt;br /&gt;
&lt;br /&gt;
ParaDOS was a complete replacement for the standard 16k [[AMSDOS]] ROM.&lt;br /&gt;
&lt;br /&gt;
The first 8k was a patched version of the standard AMSDOS code, with the second 8k used for the large-format patch code and a user-friendly disc utility (accessed by the |DRIVE command without any parameters).&lt;br /&gt;
&lt;br /&gt;
Among the functions of the utility were fast file copying and batch erasing.&lt;br /&gt;
&lt;br /&gt;
ParaDOS largely supplanted [[ROMDOS]] as the OS of choice among CPC users.&lt;br /&gt;
&lt;br /&gt;
Unlike ROMDOS, ParaDOS made no check for the presence of an AMSDOS ROM on sign-on.&lt;br /&gt;
&lt;br /&gt;
This enabled it to be used in ROM 7 as a direct replacement for AMSDOS, improving compatibility with programs which unthinkingly initialised ROM 7 alone.&lt;br /&gt;
&lt;br /&gt;
This, however, also cast some doubts on the propriety of its intellectual property stance.&lt;br /&gt;
&lt;br /&gt;
It is likely that ParaDOS would have been questioned more rigorously had it not been introduced towards the end of the CPC's commercial life.&lt;br /&gt;
&lt;br /&gt;
== Systems Cartridges with Parados ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:English System + Parados.rar|English System + Parados.rar]]&lt;br /&gt;
* [[Media:French System + Parados.rar|French System + Parados.rar]]&lt;br /&gt;
* [[Media:Spanish System + Parados.rar|Spanish System + Parados.rar]]&lt;br /&gt;
&lt;br /&gt;
== Manual ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:parados.pdf|ParaDOS Manual]] (pdf)&lt;br /&gt;
* [[File:Pdos-ddb.txt|ParaDOS DDB and DPB documentation]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
From the Winape web of Richard Wilson on the others downloads section you can download :&lt;br /&gt;
&lt;br /&gt;
  - ParaDOS ROM&lt;br /&gt;
  - ParaDOS Source&lt;br /&gt;
&lt;br /&gt;
http://www.winape.net/downloads.jsp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:Operating System]] [[category:Expansion ROM]] [[category:Manual]]&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=File:Pdos-ddb.txt&amp;diff=43935</id>
		<title>File:Pdos-ddb.txt</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=File:Pdos-ddb.txt&amp;diff=43935"/>
				<updated>2010-04-07T00:46:15Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: Information on ParaDOS Drive Definition and Drive Parameter bytes.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Information on ParaDOS Drive Definition and Drive Parameter bytes.&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=List_of_file_formats&amp;diff=32179</id>
		<title>List of file formats</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=List_of_file_formats&amp;diff=32179"/>
				<updated>2009-09-28T00:50:06Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* CPC file extensions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CPC file extensions  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| ''Extension'' &lt;br /&gt;
| ''Explanations'' &lt;br /&gt;
| ''Programs that use this extenstion''&lt;br /&gt;
|-&lt;br /&gt;
| $$$ &lt;br /&gt;
| Temporary Amsdos file &lt;br /&gt;
| [[Amsdos|amsdos]]&lt;br /&gt;
|-&lt;br /&gt;
| 128 &lt;br /&gt;
| Soundtrakker 128KB music file &lt;br /&gt;
| [[Soundtrakker|Soundtrakker]]&lt;br /&gt;
|-&lt;br /&gt;
| 64K &lt;br /&gt;
| FutureOS Main-memory program &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| ACE &lt;br /&gt;
| Packed Windows archive &lt;br /&gt;
| [[ACE|ACE]]&lt;br /&gt;
|-&lt;br /&gt;
| ARC&lt;br /&gt;
| Xexor ARC File format&lt;br /&gt;
| [[Format:Xexor_ARC_file_format|Xexor ARC Format]]&lt;br /&gt;
|-&lt;br /&gt;
| ASC &lt;br /&gt;
| ASCII text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ASM &lt;br /&gt;
| Assembler source code &lt;br /&gt;
| ASM.COM&lt;br /&gt;
|-&lt;br /&gt;
| AYC &lt;br /&gt;
| Derivate or converted YM music file &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BAK &lt;br /&gt;
| Backup file &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BAS &lt;br /&gt;
| Basic program &lt;br /&gt;
| [[AMSDOS|AMSDOS]]&lt;br /&gt;
|-&lt;br /&gt;
| BAT &lt;br /&gt;
| Batch-File &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BIN &lt;br /&gt;
| binary file[[AMSDOS&amp;amp;#124;]] &lt;br /&gt;
| [[AMSDOS|AMSDOS]]&lt;br /&gt;
|-&lt;br /&gt;
| CCP &lt;br /&gt;
| Key definition for CP/M Plus &lt;br /&gt;
| [[CP/M 3.0|CP/M 3.0]]&lt;br /&gt;
|-&lt;br /&gt;
| COM &lt;br /&gt;
| Executable CP/M or [[SymbOS|SymbOS]]-SymShell program &lt;br /&gt;
| [[CP/M|CP/M]], [[SymShell|SymShell]]&lt;br /&gt;
|-&lt;br /&gt;
| CUT &lt;br /&gt;
| AMX Pagemaker Clipart &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| DD &lt;br /&gt;
| Device driver for GSX (CP/M Plus) &lt;br /&gt;
| [[CP/M 3.0|CP/M 3.0]]&lt;br /&gt;
|-&lt;br /&gt;
| DSK &lt;br /&gt;
| Disc image &lt;br /&gt;
| DSK-CPC&lt;br /&gt;
|-&lt;br /&gt;
| DEU &lt;br /&gt;
| DEU German text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ENG &lt;br /&gt;
| English text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EXE &lt;br /&gt;
| EXE Executable file, SymbOS &lt;br /&gt;
| [[SymbOS|SymbOS]]&lt;br /&gt;
|-&lt;br /&gt;
| FLD &lt;br /&gt;
| Map file of a game &lt;br /&gt;
| [[GSEd|GSEd]]&lt;br /&gt;
|-&lt;br /&gt;
| FNT &lt;br /&gt;
| Font of AMX Pagemaker &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| FRA &lt;br /&gt;
| French text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| GES &lt;br /&gt;
| Set of Graphic-elements &lt;br /&gt;
| [[GSEd|GSEd]]&lt;br /&gt;
|-&lt;br /&gt;
| H &lt;br /&gt;
| C variable definitions &lt;br /&gt;
| Small C i.e.&lt;br /&gt;
|-&lt;br /&gt;
| HED &lt;br /&gt;
| Header/Icon definition for FutureOS &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| HGB &lt;br /&gt;
| FutureOS Background Picture &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| HLP &lt;br /&gt;
| Help file &lt;br /&gt;
| CP/M and others&lt;br /&gt;
|-&lt;br /&gt;
| INF &lt;br /&gt;
| AMX Pagemaker site &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| INS &lt;br /&gt;
| Soundtrakker Instrument file &lt;br /&gt;
| [[Soundtrakker|Soundtrakker]]&lt;br /&gt;
|-&lt;br /&gt;
| MAC &lt;br /&gt;
| Makroassembler source code &lt;br /&gt;
| MAC.COM&lt;br /&gt;
|-&lt;br /&gt;
| MAX &lt;br /&gt;
| Maxam Source Code &lt;br /&gt;
| [[Maxam|Maxam]]&lt;br /&gt;
|-&lt;br /&gt;
| MDL &lt;br /&gt;
| Digitracker Module &lt;br /&gt;
| [[Digitracker|Digitracker]]&lt;br /&gt;
|-&lt;br /&gt;
| MOD &lt;br /&gt;
| Crown Protracker Module or Amiga MO$D File &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| MP3 &lt;br /&gt;
| MP3 Sound file &lt;br /&gt;
| [[FuturePlayer|FuturePlayer]], [[SymbOS|SymbOS]](?)&lt;br /&gt;
|-&lt;br /&gt;
| OBJ &lt;br /&gt;
| Object Code &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| OVL &lt;br /&gt;
| Overlay parts of WordStar o.e. &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| PA1 &lt;br /&gt;
| AMX Pagemaker site (Teil 1) &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| PA2 &lt;br /&gt;
| AMX Pagemaker site (Teil 2) &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| PA3 &lt;br /&gt;
| AMX Pagemaker site (Teil 3) &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| PA4 &lt;br /&gt;
| AMX Pagemaker site (Teil 4) &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| PAL &lt;br /&gt;
| OCP Art Studio Palette &lt;br /&gt;
| [[The OCP Art Studio|The OCP Art Studio]]&lt;br /&gt;
|-&lt;br /&gt;
| PAS &lt;br /&gt;
| (Turbo-)Pascal source code &lt;br /&gt;
| Turbo Pascal&lt;br /&gt;
|-&lt;br /&gt;
| PRV &lt;br /&gt;
| AMX Pagemaker site (Preview) &lt;br /&gt;
| AMX Pagemaker&lt;br /&gt;
|-&lt;br /&gt;
| PRL &lt;br /&gt;
| page relocatable file &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| RAR &lt;br /&gt;
| Packed Windows Archive &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ROM &lt;br /&gt;
| Rom-File (16K) &lt;br /&gt;
| diff. (Pseudo-)/(EP)ROM Manager&lt;br /&gt;
|-&lt;br /&gt;
| PT3 &lt;br /&gt;
| Spectrum Protracker 3 Music &lt;br /&gt;
| [[SymAmp|SymAmp]]&lt;br /&gt;
|-&lt;br /&gt;
| SAV &lt;br /&gt;
| SymbOS screen saver &lt;br /&gt;
| [[SymbOS|SymbOS]]&lt;br /&gt;
|-&lt;br /&gt;
| SCR &lt;br /&gt;
| OCP Art Studio Screen &lt;br /&gt;
| [[The OCP Art Studio|The OCP Art Studio]]&lt;br /&gt;
|-&lt;br /&gt;
| SGX &lt;br /&gt;
| SymbOS graphic &lt;br /&gt;
| [[SymbOS|SymbOS]]&lt;br /&gt;
|-&lt;br /&gt;
| SKM &lt;br /&gt;
| compilated [[Starkos|Starkos]] Module &lt;br /&gt;
| [[SymAmp|SymAmp]]&lt;br /&gt;
|-&lt;br /&gt;
| SKR &lt;br /&gt;
| Set of Scripts &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| SKS &lt;br /&gt;
| STarKos Module &lt;br /&gt;
| [[STarKos|STarKos]]&lt;br /&gt;
|-&lt;br /&gt;
| SMC &lt;br /&gt;
| Executable C Program for FutureOS &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| SNA &lt;br /&gt;
| Emulator Snapshot 64/128KB &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| SND &lt;br /&gt;
| Soundtrakker 64KB Music &lt;br /&gt;
| [[Soundtrakker|Soundtrakker]]&lt;br /&gt;
|-&lt;br /&gt;
| SPR &lt;br /&gt;
| Set of Sprites &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ST2 &lt;br /&gt;
| Compilated [[Soundtrakker|Soundtrakker]] 128 Module &lt;br /&gt;
| [[SymAmp|SymAmp]]&lt;br /&gt;
|-&lt;br /&gt;
| SUB &lt;br /&gt;
| Submit/Batch file (CP/M) &lt;br /&gt;
| [[CP/M|CP/M]]&lt;br /&gt;
|-&lt;br /&gt;
| TAP &lt;br /&gt;
| Emulator tape image &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| TXT &lt;br /&gt;
| ASCII text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| VID &lt;br /&gt;
| [[SymbOS|SymbOS]] video &lt;br /&gt;
| [[SymPlay|SymPlay]]&lt;br /&gt;
|-&lt;br /&gt;
| WIN &lt;br /&gt;
| OCP Art Studio Clip &lt;br /&gt;
| [[The OCP Art Studio|The OCP Art Studio]]&lt;br /&gt;
|-&lt;br /&gt;
| WP &lt;br /&gt;
| Key definition for WordStar &lt;br /&gt;
| [[WordStar|WordStar]]&lt;br /&gt;
|-&lt;br /&gt;
| X16 &lt;br /&gt;
| FutureOS Expansion RAM program &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| YM &lt;br /&gt;
| YM Music file &lt;br /&gt;
| YM-Player and others&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=List_of_file_formats&amp;diff=32178</id>
		<title>List of file formats</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=List_of_file_formats&amp;diff=32178"/>
				<updated>2009-09-28T00:49:19Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* CPC file extensions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CPC file extensions  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| ''Extension'' &lt;br /&gt;
| ''Explanations'' &lt;br /&gt;
| ''Programs that use this extenstion''&lt;br /&gt;
|-&lt;br /&gt;
| $$$ &lt;br /&gt;
| Temporary Amsdos file &lt;br /&gt;
| [[Amsdos|amsdos]]&lt;br /&gt;
|-&lt;br /&gt;
| 128 &lt;br /&gt;
| Soundtrakker 128KB music file &lt;br /&gt;
| [[Soundtrakker|Soundtrakker]]&lt;br /&gt;
|-&lt;br /&gt;
| 64K &lt;br /&gt;
| FutureOS Main-memory program &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| ACE &lt;br /&gt;
| Packed Windows archive &lt;br /&gt;
| [[ACE|ACE]]&lt;br /&gt;
|-&lt;br /&gt;
| ARC&lt;br /&gt;
| Xexor ARC File format&lt;br /&gt;
| [[Format:Xexor ARC File Format|Xexor ARC Format]]&lt;br /&gt;
|-&lt;br /&gt;
| ASC &lt;br /&gt;
| ASCII text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ASM &lt;br /&gt;
| Assembler source code &lt;br /&gt;
| ASM.COM&lt;br /&gt;
|-&lt;br /&gt;
| AYC &lt;br /&gt;
| Derivate or converted YM music file &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BAK &lt;br /&gt;
| Backup file &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BAS &lt;br /&gt;
| Basic program &lt;br /&gt;
| [[AMSDOS|AMSDOS]]&lt;br /&gt;
|-&lt;br /&gt;
| BAT &lt;br /&gt;
| Batch-File &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BIN &lt;br /&gt;
| binary file[[AMSDOS&amp;amp;#124;]] &lt;br /&gt;
| [[AMSDOS|AMSDOS]]&lt;br /&gt;
|-&lt;br /&gt;
| CCP &lt;br /&gt;
| Key definition for CP/M Plus &lt;br /&gt;
| [[CP/M 3.0|CP/M 3.0]]&lt;br /&gt;
|-&lt;br /&gt;
| COM &lt;br /&gt;
| Executable CP/M or [[SymbOS|SymbOS]]-SymShell program &lt;br /&gt;
| [[CP/M|CP/M]], [[SymShell|SymShell]]&lt;br /&gt;
|-&lt;br /&gt;
| CUT &lt;br /&gt;
| AMX Pagemaker Clipart &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| DD &lt;br /&gt;
| Device driver for GSX (CP/M Plus) &lt;br /&gt;
| [[CP/M 3.0|CP/M 3.0]]&lt;br /&gt;
|-&lt;br /&gt;
| DSK &lt;br /&gt;
| Disc image &lt;br /&gt;
| DSK-CPC&lt;br /&gt;
|-&lt;br /&gt;
| DEU &lt;br /&gt;
| DEU German text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ENG &lt;br /&gt;
| English text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EXE &lt;br /&gt;
| EXE Executable file, SymbOS &lt;br /&gt;
| [[SymbOS|SymbOS]]&lt;br /&gt;
|-&lt;br /&gt;
| FLD &lt;br /&gt;
| Map file of a game &lt;br /&gt;
| [[GSEd|GSEd]]&lt;br /&gt;
|-&lt;br /&gt;
| FNT &lt;br /&gt;
| Font of AMX Pagemaker &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| FRA &lt;br /&gt;
| French text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| GES &lt;br /&gt;
| Set of Graphic-elements &lt;br /&gt;
| [[GSEd|GSEd]]&lt;br /&gt;
|-&lt;br /&gt;
| H &lt;br /&gt;
| C variable definitions &lt;br /&gt;
| Small C i.e.&lt;br /&gt;
|-&lt;br /&gt;
| HED &lt;br /&gt;
| Header/Icon definition for FutureOS &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| HGB &lt;br /&gt;
| FutureOS Background Picture &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| HLP &lt;br /&gt;
| Help file &lt;br /&gt;
| CP/M and others&lt;br /&gt;
|-&lt;br /&gt;
| INF &lt;br /&gt;
| AMX Pagemaker site &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| INS &lt;br /&gt;
| Soundtrakker Instrument file &lt;br /&gt;
| [[Soundtrakker|Soundtrakker]]&lt;br /&gt;
|-&lt;br /&gt;
| MAC &lt;br /&gt;
| Makroassembler source code &lt;br /&gt;
| MAC.COM&lt;br /&gt;
|-&lt;br /&gt;
| MAX &lt;br /&gt;
| Maxam Source Code &lt;br /&gt;
| [[Maxam|Maxam]]&lt;br /&gt;
|-&lt;br /&gt;
| MDL &lt;br /&gt;
| Digitracker Module &lt;br /&gt;
| [[Digitracker|Digitracker]]&lt;br /&gt;
|-&lt;br /&gt;
| MOD &lt;br /&gt;
| Crown Protracker Module or Amiga MO$D File &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| MP3 &lt;br /&gt;
| MP3 Sound file &lt;br /&gt;
| [[FuturePlayer|FuturePlayer]], [[SymbOS|SymbOS]](?)&lt;br /&gt;
|-&lt;br /&gt;
| OBJ &lt;br /&gt;
| Object Code &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| OVL &lt;br /&gt;
| Overlay parts of WordStar o.e. &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| PA1 &lt;br /&gt;
| AMX Pagemaker site (Teil 1) &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| PA2 &lt;br /&gt;
| AMX Pagemaker site (Teil 2) &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| PA3 &lt;br /&gt;
| AMX Pagemaker site (Teil 3) &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| PA4 &lt;br /&gt;
| AMX Pagemaker site (Teil 4) &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| PAL &lt;br /&gt;
| OCP Art Studio Palette &lt;br /&gt;
| [[The OCP Art Studio|The OCP Art Studio]]&lt;br /&gt;
|-&lt;br /&gt;
| PAS &lt;br /&gt;
| (Turbo-)Pascal source code &lt;br /&gt;
| Turbo Pascal&lt;br /&gt;
|-&lt;br /&gt;
| PRV &lt;br /&gt;
| AMX Pagemaker site (Preview) &lt;br /&gt;
| AMX Pagemaker&lt;br /&gt;
|-&lt;br /&gt;
| PRL &lt;br /&gt;
| page relocatable file &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| RAR &lt;br /&gt;
| Packed Windows Archive &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ROM &lt;br /&gt;
| Rom-File (16K) &lt;br /&gt;
| diff. (Pseudo-)/(EP)ROM Manager&lt;br /&gt;
|-&lt;br /&gt;
| PT3 &lt;br /&gt;
| Spectrum Protracker 3 Music &lt;br /&gt;
| [[SymAmp|SymAmp]]&lt;br /&gt;
|-&lt;br /&gt;
| SAV &lt;br /&gt;
| SymbOS screen saver &lt;br /&gt;
| [[SymbOS|SymbOS]]&lt;br /&gt;
|-&lt;br /&gt;
| SCR &lt;br /&gt;
| OCP Art Studio Screen &lt;br /&gt;
| [[The OCP Art Studio|The OCP Art Studio]]&lt;br /&gt;
|-&lt;br /&gt;
| SGX &lt;br /&gt;
| SymbOS graphic &lt;br /&gt;
| [[SymbOS|SymbOS]]&lt;br /&gt;
|-&lt;br /&gt;
| SKM &lt;br /&gt;
| compilated [[Starkos|Starkos]] Module &lt;br /&gt;
| [[SymAmp|SymAmp]]&lt;br /&gt;
|-&lt;br /&gt;
| SKR &lt;br /&gt;
| Set of Scripts &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| SKS &lt;br /&gt;
| STarKos Module &lt;br /&gt;
| [[STarKos|STarKos]]&lt;br /&gt;
|-&lt;br /&gt;
| SMC &lt;br /&gt;
| Executable C Program for FutureOS &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| SNA &lt;br /&gt;
| Emulator Snapshot 64/128KB &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| SND &lt;br /&gt;
| Soundtrakker 64KB Music &lt;br /&gt;
| [[Soundtrakker|Soundtrakker]]&lt;br /&gt;
|-&lt;br /&gt;
| SPR &lt;br /&gt;
| Set of Sprites &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ST2 &lt;br /&gt;
| Compilated [[Soundtrakker|Soundtrakker]] 128 Module &lt;br /&gt;
| [[SymAmp|SymAmp]]&lt;br /&gt;
|-&lt;br /&gt;
| SUB &lt;br /&gt;
| Submit/Batch file (CP/M) &lt;br /&gt;
| [[CP/M|CP/M]]&lt;br /&gt;
|-&lt;br /&gt;
| TAP &lt;br /&gt;
| Emulator tape image &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| TXT &lt;br /&gt;
| ASCII text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| VID &lt;br /&gt;
| [[SymbOS|SymbOS]] video &lt;br /&gt;
| [[SymPlay|SymPlay]]&lt;br /&gt;
|-&lt;br /&gt;
| WIN &lt;br /&gt;
| OCP Art Studio Clip &lt;br /&gt;
| [[The OCP Art Studio|The OCP Art Studio]]&lt;br /&gt;
|-&lt;br /&gt;
| WP &lt;br /&gt;
| Key definition for WordStar &lt;br /&gt;
| [[WordStar|WordStar]]&lt;br /&gt;
|-&lt;br /&gt;
| X16 &lt;br /&gt;
| FutureOS Expansion RAM program &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| YM &lt;br /&gt;
| YM Music file &lt;br /&gt;
| YM-Player and others&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=List_of_file_formats&amp;diff=32177</id>
		<title>List of file formats</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=List_of_file_formats&amp;diff=32177"/>
				<updated>2009-09-28T00:48:48Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* CPC file extensions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CPC file extensions  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| ''Extension'' &lt;br /&gt;
| ''Explanations'' &lt;br /&gt;
| ''Programs that use this extenstion''&lt;br /&gt;
|-&lt;br /&gt;
| $$$ &lt;br /&gt;
| Temporary Amsdos file &lt;br /&gt;
| [[Amsdos|amsdos]]&lt;br /&gt;
|-&lt;br /&gt;
| 128 &lt;br /&gt;
| Soundtrakker 128KB music file &lt;br /&gt;
| [[Soundtrakker|Soundtrakker]]&lt;br /&gt;
|-&lt;br /&gt;
| 64K &lt;br /&gt;
| FutureOS Main-memory program &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| ACE &lt;br /&gt;
| Packed Windows archive &lt;br /&gt;
| [[ACE|ACE]]&lt;br /&gt;
|-&lt;br /&gt;
| ARC&lt;br /&gt;
| Xexor ARC File format&lt;br /&gt;
| [[ARC|Format:Xexor ARC File Format]]&lt;br /&gt;
|-&lt;br /&gt;
| ASC &lt;br /&gt;
| ASCII text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ASM &lt;br /&gt;
| Assembler source code &lt;br /&gt;
| ASM.COM&lt;br /&gt;
|-&lt;br /&gt;
| AYC &lt;br /&gt;
| Derivate or converted YM music file &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BAK &lt;br /&gt;
| Backup file &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BAS &lt;br /&gt;
| Basic program &lt;br /&gt;
| [[AMSDOS|AMSDOS]]&lt;br /&gt;
|-&lt;br /&gt;
| BAT &lt;br /&gt;
| Batch-File &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BIN &lt;br /&gt;
| binary file[[AMSDOS&amp;amp;#124;]] &lt;br /&gt;
| [[AMSDOS|AMSDOS]]&lt;br /&gt;
|-&lt;br /&gt;
| CCP &lt;br /&gt;
| Key definition for CP/M Plus &lt;br /&gt;
| [[CP/M 3.0|CP/M 3.0]]&lt;br /&gt;
|-&lt;br /&gt;
| COM &lt;br /&gt;
| Executable CP/M or [[SymbOS|SymbOS]]-SymShell program &lt;br /&gt;
| [[CP/M|CP/M]], [[SymShell|SymShell]]&lt;br /&gt;
|-&lt;br /&gt;
| CUT &lt;br /&gt;
| AMX Pagemaker Clipart &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| DD &lt;br /&gt;
| Device driver for GSX (CP/M Plus) &lt;br /&gt;
| [[CP/M 3.0|CP/M 3.0]]&lt;br /&gt;
|-&lt;br /&gt;
| DSK &lt;br /&gt;
| Disc image &lt;br /&gt;
| DSK-CPC&lt;br /&gt;
|-&lt;br /&gt;
| DEU &lt;br /&gt;
| DEU German text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ENG &lt;br /&gt;
| English text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| EXE &lt;br /&gt;
| EXE Executable file, SymbOS &lt;br /&gt;
| [[SymbOS|SymbOS]]&lt;br /&gt;
|-&lt;br /&gt;
| FLD &lt;br /&gt;
| Map file of a game &lt;br /&gt;
| [[GSEd|GSEd]]&lt;br /&gt;
|-&lt;br /&gt;
| FNT &lt;br /&gt;
| Font of AMX Pagemaker &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| FRA &lt;br /&gt;
| French text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| GES &lt;br /&gt;
| Set of Graphic-elements &lt;br /&gt;
| [[GSEd|GSEd]]&lt;br /&gt;
|-&lt;br /&gt;
| H &lt;br /&gt;
| C variable definitions &lt;br /&gt;
| Small C i.e.&lt;br /&gt;
|-&lt;br /&gt;
| HED &lt;br /&gt;
| Header/Icon definition for FutureOS &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| HGB &lt;br /&gt;
| FutureOS Background Picture &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| HLP &lt;br /&gt;
| Help file &lt;br /&gt;
| CP/M and others&lt;br /&gt;
|-&lt;br /&gt;
| INF &lt;br /&gt;
| AMX Pagemaker site &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| INS &lt;br /&gt;
| Soundtrakker Instrument file &lt;br /&gt;
| [[Soundtrakker|Soundtrakker]]&lt;br /&gt;
|-&lt;br /&gt;
| MAC &lt;br /&gt;
| Makroassembler source code &lt;br /&gt;
| MAC.COM&lt;br /&gt;
|-&lt;br /&gt;
| MAX &lt;br /&gt;
| Maxam Source Code &lt;br /&gt;
| [[Maxam|Maxam]]&lt;br /&gt;
|-&lt;br /&gt;
| MDL &lt;br /&gt;
| Digitracker Module &lt;br /&gt;
| [[Digitracker|Digitracker]]&lt;br /&gt;
|-&lt;br /&gt;
| MOD &lt;br /&gt;
| Crown Protracker Module or Amiga MO$D File &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| MP3 &lt;br /&gt;
| MP3 Sound file &lt;br /&gt;
| [[FuturePlayer|FuturePlayer]], [[SymbOS|SymbOS]](?)&lt;br /&gt;
|-&lt;br /&gt;
| OBJ &lt;br /&gt;
| Object Code &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| OVL &lt;br /&gt;
| Overlay parts of WordStar o.e. &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| PA1 &lt;br /&gt;
| AMX Pagemaker site (Teil 1) &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| PA2 &lt;br /&gt;
| AMX Pagemaker site (Teil 2) &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| PA3 &lt;br /&gt;
| AMX Pagemaker site (Teil 3) &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| PA4 &lt;br /&gt;
| AMX Pagemaker site (Teil 4) &lt;br /&gt;
| [[AMX Pagemaker|AMX Pagemaker]]&lt;br /&gt;
|-&lt;br /&gt;
| PAL &lt;br /&gt;
| OCP Art Studio Palette &lt;br /&gt;
| [[The OCP Art Studio|The OCP Art Studio]]&lt;br /&gt;
|-&lt;br /&gt;
| PAS &lt;br /&gt;
| (Turbo-)Pascal source code &lt;br /&gt;
| Turbo Pascal&lt;br /&gt;
|-&lt;br /&gt;
| PRV &lt;br /&gt;
| AMX Pagemaker site (Preview) &lt;br /&gt;
| AMX Pagemaker&lt;br /&gt;
|-&lt;br /&gt;
| PRL &lt;br /&gt;
| page relocatable file &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| RAR &lt;br /&gt;
| Packed Windows Archive &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ROM &lt;br /&gt;
| Rom-File (16K) &lt;br /&gt;
| diff. (Pseudo-)/(EP)ROM Manager&lt;br /&gt;
|-&lt;br /&gt;
| PT3 &lt;br /&gt;
| Spectrum Protracker 3 Music &lt;br /&gt;
| [[SymAmp|SymAmp]]&lt;br /&gt;
|-&lt;br /&gt;
| SAV &lt;br /&gt;
| SymbOS screen saver &lt;br /&gt;
| [[SymbOS|SymbOS]]&lt;br /&gt;
|-&lt;br /&gt;
| SCR &lt;br /&gt;
| OCP Art Studio Screen &lt;br /&gt;
| [[The OCP Art Studio|The OCP Art Studio]]&lt;br /&gt;
|-&lt;br /&gt;
| SGX &lt;br /&gt;
| SymbOS graphic &lt;br /&gt;
| [[SymbOS|SymbOS]]&lt;br /&gt;
|-&lt;br /&gt;
| SKM &lt;br /&gt;
| compilated [[Starkos|Starkos]] Module &lt;br /&gt;
| [[SymAmp|SymAmp]]&lt;br /&gt;
|-&lt;br /&gt;
| SKR &lt;br /&gt;
| Set of Scripts &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| SKS &lt;br /&gt;
| STarKos Module &lt;br /&gt;
| [[STarKos|STarKos]]&lt;br /&gt;
|-&lt;br /&gt;
| SMC &lt;br /&gt;
| Executable C Program for FutureOS &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| SNA &lt;br /&gt;
| Emulator Snapshot 64/128KB &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| SND &lt;br /&gt;
| Soundtrakker 64KB Music &lt;br /&gt;
| [[Soundtrakker|Soundtrakker]]&lt;br /&gt;
|-&lt;br /&gt;
| SPR &lt;br /&gt;
| Set of Sprites &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ST2 &lt;br /&gt;
| Compilated [[Soundtrakker|Soundtrakker]] 128 Module &lt;br /&gt;
| [[SymAmp|SymAmp]]&lt;br /&gt;
|-&lt;br /&gt;
| SUB &lt;br /&gt;
| Submit/Batch file (CP/M) &lt;br /&gt;
| [[CP/M|CP/M]]&lt;br /&gt;
|-&lt;br /&gt;
| TAP &lt;br /&gt;
| Emulator tape image &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| TXT &lt;br /&gt;
| ASCII text &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| VID &lt;br /&gt;
| [[SymbOS|SymbOS]] video &lt;br /&gt;
| [[SymPlay|SymPlay]]&lt;br /&gt;
|-&lt;br /&gt;
| WIN &lt;br /&gt;
| OCP Art Studio Clip &lt;br /&gt;
| [[The OCP Art Studio|The OCP Art Studio]]&lt;br /&gt;
|-&lt;br /&gt;
| WP &lt;br /&gt;
| Key definition for WordStar &lt;br /&gt;
| [[WordStar|WordStar]]&lt;br /&gt;
|-&lt;br /&gt;
| X16 &lt;br /&gt;
| FutureOS Expansion RAM program &lt;br /&gt;
| [[FutureOS|FutureOS]]&lt;br /&gt;
|-&lt;br /&gt;
| YM &lt;br /&gt;
| YM Music file &lt;br /&gt;
| YM-Player and others&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Format:Xexor_ARC_file_format&amp;diff=32176</id>
		<title>Format:Xexor ARC file format</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Format:Xexor_ARC_file_format&amp;diff=32176"/>
				<updated>2009-09-28T00:43:10Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Structure of the &amp;quot;ARC&amp;quot; file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&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;&amp;lt;center&amp;gt;'''''This article originally came from Kevin Thackers' archive at [http://www.cpctech.org.uk http://www.cpctech.org.uk].'''''&amp;lt;/center&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= The Xexor ARC file format  =&lt;br /&gt;
&lt;br /&gt;
Xexor is a powerful disc utility written by Richard Wilson for the Amstrad CPC/CPC+. &lt;br /&gt;
&lt;br /&gt;
This document describes the structure of the &amp;quot;ARC&amp;quot; file written by the &amp;quot;ARCHIVE&amp;quot; command of this utility program and his Winape emulator. &lt;br /&gt;
&lt;br /&gt;
The syntax of the archive command is: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|ARCHIVE &amp;lt;filename&amp;gt; &amp;lt;track range&amp;gt; &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
An example of it's usage is: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;|ARCHIVE &amp;quot;disc.arc&amp;quot; 1-13&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will create a file called &amp;quot;disc.arc&amp;quot; which will contain the data from tracks 1 to 13 inclusive. &lt;br /&gt;
&lt;br /&gt;
== Structure of the &amp;quot;ARC&amp;quot; file  ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;ARC&amp;quot; file is a binary file and will have an AMSDOS header. &lt;br /&gt;
&lt;br /&gt;
In addition, &amp;quot;ARC&amp;quot; files written by the Winape emulator have a different header. &lt;br /&gt;
&lt;br /&gt;
If you are reading an &amp;quot;ARC&amp;quot; file into an emulator be aware that there may be an AMSDOS header, and that the file may have been created by Winape. &lt;br /&gt;
&lt;br /&gt;
The ARC file data starts with a header which describes the start and end range of tracks stored in the file: &lt;br /&gt;
&lt;br /&gt;
ARC files written by Winape have the following header: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 2 &lt;br /&gt;
| 'XA' identifier&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Drive Definition Byte&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| First track&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Last track&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The drive definition byte is as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 3 &lt;br /&gt;
| Double-stepped if set&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Head when not double-sided&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Double-sided when set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the image is double-sided, alternate heads are stored for each cylinder.&lt;br /&gt;
&lt;br /&gt;
ARC files written by older versions of Xexor have the following header (ie. XA and DDB missing): &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| First track&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Last track&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Following this is the data for each track, starting with the first track, in ascending numeric order. All tracks between the first track and last track are stored in the file. No tracks may be omitted. &lt;br /&gt;
&lt;br /&gt;
The length of data for each track varies and is dependant on the number of sectors in the track. Each track has the same header layout which gives the number of tracks, and the IDs of these sectors. &lt;br /&gt;
&lt;br /&gt;
The data for each sector is stored in the order given by the sector IDs. &lt;br /&gt;
&lt;br /&gt;
i.e. if there are 9 sectors per track and the sector IDS are listed as &amp;amp;amp;C1,&amp;amp;amp;C2,&amp;amp;amp;C3, &amp;amp;amp;C4,&amp;amp;amp;C5,&amp;amp;amp;C6,&amp;amp;amp;C7,&amp;amp;amp;C8 and &amp;amp;amp;C9, then the data for sector &amp;amp;amp;C1 will be first, and this will be followed by the data for sector &amp;amp;amp;C2 and so on until sector &amp;amp;amp;C9. &lt;br /&gt;
&lt;br /&gt;
The data for each sector is compressed seperatly using a run-length encoding method. &lt;br /&gt;
&lt;br /&gt;
Track data: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Number of sectors&lt;br /&gt;
|-&lt;br /&gt;
| 4*Number of sectors &lt;br /&gt;
| Sector ID information (see below)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp;? &lt;br /&gt;
| Sector data (see below)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sector ID information: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| C from ID field&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| H from ID field&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| R from ID field&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| N from ID field&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sector data: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Sector Size and Flags&lt;br /&gt;
|-&lt;br /&gt;
| ? &lt;br /&gt;
| Compressed sector data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Sector Size and Flags are stored as a word (LSB first), containing the stored data length (when not empty), compression flag, and deleted data address mark.&lt;br /&gt;
&lt;br /&gt;
The top 3 bits of the Size are flags, with the bottom 13 bits containing the size of the stored data (when not empty).&lt;br /&gt;
&lt;br /&gt;
A sector which does not have a deleted data address mark and contains only E5 bytes is considered empty. In this case, the top 3 bits will be 100 and the size is ignored. WinAPE stores this as #8009, but it could be any value from #0000 to #1FFF or #8000 to #9FFF.&lt;br /&gt;
&lt;br /&gt;
For all other sectors:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| RLE compressed if set (see below)&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Sector has Deleted Data Address Mark if set (DDAM)&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Sector data is present if set (not empty)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sector data is also assumed to be present if bit 14 is set, regardless of bit 13.&lt;br /&gt;
&lt;br /&gt;
== Compression scheme  ==&lt;br /&gt;
&lt;br /&gt;
The compression method is &amp;quot;run length encoding&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;run length encoding&amp;quot; is a simple compression algorithm which can compress sequences of the same repeated byte. &lt;br /&gt;
&lt;br /&gt;
The compressed will contain single data bytes and run-length packets. &lt;br /&gt;
&lt;br /&gt;
A &amp;quot;marker&amp;quot; byte of &amp;amp;amp;E5 is used to identify a run-length packet. (&amp;amp;amp;E5 is the byte used to fill empty sectors when a disc is formatted to the standard SYSTEM, DATA and IBM formats). &lt;br /&gt;
&lt;br /&gt;
Run-length packets: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Byte sequence &lt;br /&gt;
! Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;amp;E5,&amp;amp;amp;00 &lt;br /&gt;
| Output a single &amp;amp;amp;E5 byte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;amp;E5,&amp;amp;lt;count&amp;amp;gt;,&amp;amp;lt;data&amp;amp;gt; &lt;br /&gt;
| Output the byte &amp;amp;lt;data&amp;amp;gt; &amp;amp;lt;count&amp;amp;gt; times. e.g. &amp;amp;amp;E5,&amp;amp;amp;03,&amp;amp;amp;25 -&amp;amp;gt; &amp;amp;amp;25,&amp;amp;amp;25,&amp;amp;amp;25&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt;value&amp;amp;gt; &lt;br /&gt;
| &amp;amp;lt;value&amp;amp;gt; must not be &amp;amp;amp;E5. Output &amp;amp;lt;value&amp;amp;gt; once&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Format:Xexor_ARC_file_format&amp;diff=32175</id>
		<title>Format:Xexor ARC file format</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Format:Xexor_ARC_file_format&amp;diff=32175"/>
				<updated>2009-09-28T00:42:11Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Structure of the &amp;quot;ARC&amp;quot; file */ Added Drive Definition Byte information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&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;&amp;lt;center&amp;gt;'''''This article originally came from Kevin Thackers' archive at [http://www.cpctech.org.uk http://www.cpctech.org.uk].'''''&amp;lt;/center&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= The Xexor ARC file format  =&lt;br /&gt;
&lt;br /&gt;
Xexor is a powerful disc utility written by Richard Wilson for the Amstrad CPC/CPC+. &lt;br /&gt;
&lt;br /&gt;
This document describes the structure of the &amp;quot;ARC&amp;quot; file written by the &amp;quot;ARCHIVE&amp;quot; command of this utility program and his Winape emulator. &lt;br /&gt;
&lt;br /&gt;
The syntax of the archive command is: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|ARCHIVE &amp;lt;filename&amp;gt; &amp;lt;track range&amp;gt; &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
An example of it's usage is: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;|ARCHIVE &amp;quot;disc.arc&amp;quot; 1-13&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will create a file called &amp;quot;disc.arc&amp;quot; which will contain the data from tracks 1 to 13 inclusive. &lt;br /&gt;
&lt;br /&gt;
== Structure of the &amp;quot;ARC&amp;quot; file  ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;ARC&amp;quot; file is a binary file and will have an AMSDOS header. &lt;br /&gt;
&lt;br /&gt;
In addition, &amp;quot;ARC&amp;quot; files written by the Winape emulator have a different header. &lt;br /&gt;
&lt;br /&gt;
If you are reading an &amp;quot;ARC&amp;quot; file into an emulator be aware that there may be an AMSDOS header, and that the file may have been created by Winape. &lt;br /&gt;
&lt;br /&gt;
The ARC file data starts with a header which describes the start and end range of tracks stored in the file: &lt;br /&gt;
&lt;br /&gt;
ARC files written by Winape have the following header: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 2 &lt;br /&gt;
| 'XA' identifier&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Drive Definition Byte&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| First track&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Last track&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The drive definition byte is as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 3 &lt;br /&gt;
| Double-stepped if set&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Head when not double-sided&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Double-sided when set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the image is double-sided, alternate heads are stored for each cylinder.&lt;br /&gt;
&lt;br /&gt;
ARC files written by older versions of Xexor have the following header (ie. XA missing): &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| First track&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Last track&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Following this is the data for each track, starting with the first track, in ascending numeric order. All tracks between the first track and last track are stored in the file. No tracks may be omitted. &lt;br /&gt;
&lt;br /&gt;
The length of data for each track varies and is dependant on the number of sectors in the track. Each track has the same header layout which gives the number of tracks, and the IDs of these sectors. &lt;br /&gt;
&lt;br /&gt;
The data for each sector is stored in the order given by the sector IDs. &lt;br /&gt;
&lt;br /&gt;
i.e. if there are 9 sectors per track and the sector IDS are listed as &amp;amp;amp;C1,&amp;amp;amp;C2,&amp;amp;amp;C3, &amp;amp;amp;C4,&amp;amp;amp;C5,&amp;amp;amp;C6,&amp;amp;amp;C7,&amp;amp;amp;C8 and &amp;amp;amp;C9, then the data for sector &amp;amp;amp;C1 will be first, and this will be followed by the data for sector &amp;amp;amp;C2 and so on until sector &amp;amp;amp;C9. &lt;br /&gt;
&lt;br /&gt;
The data for each sector is compressed seperatly using a run-length encoding method. &lt;br /&gt;
&lt;br /&gt;
Track data: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Number of sectors&lt;br /&gt;
|-&lt;br /&gt;
| 4*Number of sectors &lt;br /&gt;
| Sector ID information (see below)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp;? &lt;br /&gt;
| Sector data (see below)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sector ID information: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| C from ID field&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| H from ID field&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| R from ID field&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| N from ID field&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sector data: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Sector Size and Flags&lt;br /&gt;
|-&lt;br /&gt;
| ? &lt;br /&gt;
| Compressed sector data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Sector Size and Flags are stored as a word (LSB first), containing the stored data length (when not empty), compression flag, and deleted data address mark.&lt;br /&gt;
&lt;br /&gt;
The top 3 bits of the Size are flags, with the bottom 13 bits containing the size of the stored data (when not empty).&lt;br /&gt;
&lt;br /&gt;
A sector which does not have a deleted data address mark and contains only E5 bytes is considered empty. In this case, the top 3 bits will be 100 and the size is ignored. WinAPE stores this as #8009, but it could be any value from #0000 to #1FFF or #8000 to #9FFF.&lt;br /&gt;
&lt;br /&gt;
For all other sectors:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| RLE compressed if set (see below)&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Sector has Deleted Data Address Mark if set (DDAM)&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Sector data is present if set (not empty)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sector data is also assumed to be present if bit 14 is set, regardless of bit 13.&lt;br /&gt;
&lt;br /&gt;
== Compression scheme  ==&lt;br /&gt;
&lt;br /&gt;
The compression method is &amp;quot;run length encoding&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;run length encoding&amp;quot; is a simple compression algorithm which can compress sequences of the same repeated byte. &lt;br /&gt;
&lt;br /&gt;
The compressed will contain single data bytes and run-length packets. &lt;br /&gt;
&lt;br /&gt;
A &amp;quot;marker&amp;quot; byte of &amp;amp;amp;E5 is used to identify a run-length packet. (&amp;amp;amp;E5 is the byte used to fill empty sectors when a disc is formatted to the standard SYSTEM, DATA and IBM formats). &lt;br /&gt;
&lt;br /&gt;
Run-length packets: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Byte sequence &lt;br /&gt;
! Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;amp;E5,&amp;amp;amp;00 &lt;br /&gt;
| Output a single &amp;amp;amp;E5 byte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;amp;E5,&amp;amp;lt;count&amp;amp;gt;,&amp;amp;lt;data&amp;amp;gt; &lt;br /&gt;
| Output the byte &amp;amp;lt;data&amp;amp;gt; &amp;amp;lt;count&amp;amp;gt; times. e.g. &amp;amp;amp;E5,&amp;amp;amp;03,&amp;amp;amp;25 -&amp;amp;gt; &amp;amp;amp;25,&amp;amp;amp;25,&amp;amp;amp;25&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt;value&amp;amp;gt; &lt;br /&gt;
| &amp;amp;lt;value&amp;amp;gt; must not be &amp;amp;amp;E5. Output &amp;amp;lt;value&amp;amp;gt; once&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Format:Xexor_ARC_file_format&amp;diff=32174</id>
		<title>Format:Xexor ARC file format</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Format:Xexor_ARC_file_format&amp;diff=32174"/>
				<updated>2009-09-28T00:33:27Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Structure of the &amp;quot;ARC&amp;quot; file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&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;&amp;lt;center&amp;gt;'''''This article originally came from Kevin Thackers' archive at [http://www.cpctech.org.uk http://www.cpctech.org.uk].'''''&amp;lt;/center&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= The Xexor ARC file format  =&lt;br /&gt;
&lt;br /&gt;
Xexor is a powerful disc utility written by Richard Wilson for the Amstrad CPC/CPC+. &lt;br /&gt;
&lt;br /&gt;
This document describes the structure of the &amp;quot;ARC&amp;quot; file written by the &amp;quot;ARCHIVE&amp;quot; command of this utility program and his Winape emulator. &lt;br /&gt;
&lt;br /&gt;
The syntax of the archive command is: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|ARCHIVE &amp;lt;filename&amp;gt; &amp;lt;track range&amp;gt; &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
An example of it's usage is: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;|ARCHIVE &amp;quot;disc.arc&amp;quot; 1-13&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will create a file called &amp;quot;disc.arc&amp;quot; which will contain the data from tracks 1 to 13 inclusive. &lt;br /&gt;
&lt;br /&gt;
== Structure of the &amp;quot;ARC&amp;quot; file  ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;ARC&amp;quot; file is a binary file and will have an AMSDOS header. &lt;br /&gt;
&lt;br /&gt;
In addition, &amp;quot;ARC&amp;quot; files written by the Winape emulator have a different header. &lt;br /&gt;
&lt;br /&gt;
If you are reading an &amp;quot;ARC&amp;quot; file into an emulator be aware that there may be an AMSDOS header, and that the file may have been created by Winape. &lt;br /&gt;
&lt;br /&gt;
The ARC file data starts with a header which describes the start and end range of tracks stored in the file: &lt;br /&gt;
&lt;br /&gt;
ARC files written by Winape have the following header: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 2 &lt;br /&gt;
| 'XA' identifier&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| First track&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Last track&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ARC files written by Xexor have the following header: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| First track&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Last track&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Following this is the data for each track, starting with the first track, in ascending numeric order. All tracks between the first track and last track are stored in the file. No tracks may be omitted. &lt;br /&gt;
&lt;br /&gt;
The length of data for each track varies and is dependant on the number of sectors in the track. Each track has the same header layout which gives the number of tracks, and the IDs of these sectors. &lt;br /&gt;
&lt;br /&gt;
The data for each sector is stored in the order given by the sector IDs. &lt;br /&gt;
&lt;br /&gt;
i.e. if there are 9 sectors per track and the sector IDS are listed as &amp;amp;amp;C1,&amp;amp;amp;C2,&amp;amp;amp;C3, &amp;amp;amp;C4,&amp;amp;amp;C5,&amp;amp;amp;C6,&amp;amp;amp;C7,&amp;amp;amp;C8 and &amp;amp;amp;C9, then the data for sector &amp;amp;amp;C1 will be first, and this will be followed by the data for sector &amp;amp;amp;C2 and so on until sector &amp;amp;amp;C9. &lt;br /&gt;
&lt;br /&gt;
The data for each sector is compressed seperatly using a run-length encoding method. &lt;br /&gt;
&lt;br /&gt;
Track data: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Number of sectors&lt;br /&gt;
|-&lt;br /&gt;
| 4*Number of sectors &lt;br /&gt;
| Sector ID information (see below)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp;? &lt;br /&gt;
| Sector data (see below)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sector ID information: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| C from ID field&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| H from ID field&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| R from ID field&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| N from ID field&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sector data: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Sector Size and Flags&lt;br /&gt;
|-&lt;br /&gt;
| ? &lt;br /&gt;
| Compressed sector data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Sector Size and Flags are stored as a word (LSB first), containing the stored data length (when not empty), compression flag, and deleted data address mark.&lt;br /&gt;
&lt;br /&gt;
The top 3 bits of the Size are flags, with the bottom 13 bits containing the size of the stored data (when not empty).&lt;br /&gt;
&lt;br /&gt;
A sector which does not have a deleted data address mark and contains only E5 bytes is considered empty. In this case, the top 3 bits will be 100 and the size is ignored. WinAPE stores this as #8009, but it could be any value from #0000 to #1FFF or #8000 to #9FFF.&lt;br /&gt;
&lt;br /&gt;
For all other sectors:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| RLE compressed if set (see below)&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Sector has Deleted Data Address Mark if set (DDAM)&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Sector data is present if set (not empty)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sector data is also assumed to be present if bit 14 is set, regardless of bit 13.&lt;br /&gt;
&lt;br /&gt;
== Compression scheme  ==&lt;br /&gt;
&lt;br /&gt;
The compression method is &amp;quot;run length encoding&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;run length encoding&amp;quot; is a simple compression algorithm which can compress sequences of the same repeated byte. &lt;br /&gt;
&lt;br /&gt;
The compressed will contain single data bytes and run-length packets. &lt;br /&gt;
&lt;br /&gt;
A &amp;quot;marker&amp;quot; byte of &amp;amp;amp;E5 is used to identify a run-length packet. (&amp;amp;amp;E5 is the byte used to fill empty sectors when a disc is formatted to the standard SYSTEM, DATA and IBM formats). &lt;br /&gt;
&lt;br /&gt;
Run-length packets: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Byte sequence &lt;br /&gt;
! Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;amp;E5,&amp;amp;amp;00 &lt;br /&gt;
| Output a single &amp;amp;amp;E5 byte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;amp;E5,&amp;amp;lt;count&amp;amp;gt;,&amp;amp;lt;data&amp;amp;gt; &lt;br /&gt;
| Output the byte &amp;amp;lt;data&amp;amp;gt; &amp;amp;lt;count&amp;amp;gt; times. e.g. &amp;amp;amp;E5,&amp;amp;amp;03,&amp;amp;amp;25 -&amp;amp;gt; &amp;amp;amp;25,&amp;amp;amp;25,&amp;amp;amp;25&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt;value&amp;amp;gt; &lt;br /&gt;
| &amp;amp;lt;value&amp;amp;gt; must not be &amp;amp;amp;E5. Output &amp;amp;lt;value&amp;amp;gt; once&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Format:Xexor_ARC_file_format&amp;diff=32173</id>
		<title>Format:Xexor ARC file format</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Format:Xexor_ARC_file_format&amp;diff=32173"/>
				<updated>2009-09-28T00:32:17Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Structure of the &amp;quot;ARC&amp;quot; file */ Clarified Sector Size and Flags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&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;&amp;lt;center&amp;gt;'''''This article originally came from Kevin Thackers' archive at [http://www.cpctech.org.uk http://www.cpctech.org.uk].'''''&amp;lt;/center&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= The Xexor ARC file format  =&lt;br /&gt;
&lt;br /&gt;
Xexor is a powerful disc utility written by Richard Wilson for the Amstrad CPC/CPC+. &lt;br /&gt;
&lt;br /&gt;
This document describes the structure of the &amp;quot;ARC&amp;quot; file written by the &amp;quot;ARCHIVE&amp;quot; command of this utility program and his Winape emulator. &lt;br /&gt;
&lt;br /&gt;
The syntax of the archive command is: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;|ARCHIVE &amp;lt;filename&amp;gt; &amp;lt;track range&amp;gt; &amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
An example of it's usage is: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;|ARCHIVE &amp;quot;disc.arc&amp;quot; 1-13&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will create a file called &amp;quot;disc.arc&amp;quot; which will contain the data from tracks 1 to 13 inclusive. &lt;br /&gt;
&lt;br /&gt;
== Structure of the &amp;quot;ARC&amp;quot; file  ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;ARC&amp;quot; file is a binary file and will have an AMSDOS header. &lt;br /&gt;
&lt;br /&gt;
In addition, &amp;quot;ARC&amp;quot; files written by the Winape emulator have a different header. &lt;br /&gt;
&lt;br /&gt;
If you are reading an &amp;quot;ARC&amp;quot; file into an emulator be aware that there may be an AMSDOS header, and that the file may have been created by Winape. &lt;br /&gt;
&lt;br /&gt;
The ARC file data starts with a header which describes the start and end range of tracks stored in the file: &lt;br /&gt;
&lt;br /&gt;
ARC files written by Winape have the following header: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 2 &lt;br /&gt;
| 'XA' identifier&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| First track&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Last track&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ARC files written by Xexor have the following header: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| First track&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Last track&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Following this is the data for each track, starting with the first track, in ascending numeric order. All tracks between the first track and last track are stored in the file. No tracks may be omitted. &lt;br /&gt;
&lt;br /&gt;
The length of data for each track varies and is dependant on the number of sectors in the track. Each track has the same header layout which gives the number of tracks, and the IDs of these sectors. &lt;br /&gt;
&lt;br /&gt;
The data for each sector is stored in the order given by the sector IDs. &lt;br /&gt;
&lt;br /&gt;
i.e. if there are 9 sectors per track and the sector IDS are listed as &amp;amp;amp;C1,&amp;amp;amp;C2,&amp;amp;amp;C3, &amp;amp;amp;C4,&amp;amp;amp;C5,&amp;amp;amp;C6,&amp;amp;amp;C7,&amp;amp;amp;C8 and &amp;amp;amp;C9, then the data for sector &amp;amp;amp;C1 will be first, and this will be followed by the data for sector &amp;amp;amp;C2 and so on until sector &amp;amp;amp;C9. &lt;br /&gt;
&lt;br /&gt;
The data for each sector is compressed seperatly using a run-length encoding method. &lt;br /&gt;
&lt;br /&gt;
Track data: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| Number of sectors&lt;br /&gt;
|-&lt;br /&gt;
| 4*Number of sectors &lt;br /&gt;
| Sector ID information (see below)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp;? &lt;br /&gt;
| Sector data (see below)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sector ID information: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| C from ID field&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| H from ID field&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| R from ID field&lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| N from ID field&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sector data: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Length &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Sector Size and Flags&lt;br /&gt;
|-&lt;br /&gt;
| ? &lt;br /&gt;
| Compressed sector data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Sector Size and Flags are stored as a word (LSB first), containing the stored data length (when not empty), compression flag, and deleted data address mark.&lt;br /&gt;
&lt;br /&gt;
The top 3 bits of the Size are flags, with the bottom 13 bits containing the size of the stored data (when not empty).&lt;br /&gt;
&lt;br /&gt;
A sector which does not have a deleted data address mark and contains only E5 bytes is considered empty. In this case, the top 3 bits will be 100 and the size is ignored. WinAPE stores this as #8009, but it could be any value from #0000 to #1FFF or #8000 to #9FFF.&lt;br /&gt;
&lt;br /&gt;
For all other sectors:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| RLE compressed if set (see below)&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Sector has Deleted Data Address Mark (DDAM)&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Sector data is present (not empty)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Compression scheme  ==&lt;br /&gt;
&lt;br /&gt;
The compression method is &amp;quot;run length encoding&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;run length encoding&amp;quot; is a simple compression algorithm which can compress sequences of the same repeated byte. &lt;br /&gt;
&lt;br /&gt;
The compressed will contain single data bytes and run-length packets. &lt;br /&gt;
&lt;br /&gt;
A &amp;quot;marker&amp;quot; byte of &amp;amp;amp;E5 is used to identify a run-length packet. (&amp;amp;amp;E5 is the byte used to fill empty sectors when a disc is formatted to the standard SYSTEM, DATA and IBM formats). &lt;br /&gt;
&lt;br /&gt;
Run-length packets: &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Byte sequence &lt;br /&gt;
! Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;amp;E5,&amp;amp;amp;00 &lt;br /&gt;
| Output a single &amp;amp;amp;E5 byte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;amp;E5,&amp;amp;lt;count&amp;amp;gt;,&amp;amp;lt;data&amp;amp;gt; &lt;br /&gt;
| Output the byte &amp;amp;lt;data&amp;amp;gt; &amp;amp;lt;count&amp;amp;gt; times. e.g. &amp;amp;amp;E5,&amp;amp;amp;03,&amp;amp;amp;25 -&amp;amp;gt; &amp;amp;amp;25,&amp;amp;amp;25,&amp;amp;amp;25&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt;value&amp;amp;gt; &lt;br /&gt;
| &amp;amp;lt;value&amp;amp;gt; must not be &amp;amp;amp;E5. Output &amp;amp;lt;value&amp;amp;gt; once&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=SYMBiFACE_II:Realtime_clock&amp;diff=31951</id>
		<title>SYMBiFACE II:Realtime clock</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=SYMBiFACE_II:Realtime_clock&amp;diff=31951"/>
				<updated>2009-09-24T01:48:51Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Status registers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the documentation about the '''realtime clock''' of the [[SYMBiFACE II]] expansion card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ports ==&lt;br /&gt;
* #FD15 (write only) register select&lt;br /&gt;
* #FD14 (read/write) read from or write into selected register&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Number  Content             Values&lt;br /&gt;
#00     actual second       00-59 (bcd or binary)&lt;br /&gt;
#01     alarm second        00-59 (bcd or binary)&lt;br /&gt;
#02     actual minute       00-59 (bcd or binary)&lt;br /&gt;
#03     alarm minute        00-59 (bcd or binary)&lt;br /&gt;
#04     actual hour         00-23 (bcd or binary)&lt;br /&gt;
#05     alarm hour          00-23 (bcd or binary)&lt;br /&gt;
#06     day of the week     ??&lt;br /&gt;
#07     day of the month    01-31 (bcd or binary)&lt;br /&gt;
#08     month               01-12 (bcd or binary)&lt;br /&gt;
#09     year                00-99 (bcd or binary)&lt;br /&gt;
#0A     status A            see below&lt;br /&gt;
#0B     status B            see below&lt;br /&gt;
#0C     status C            see below&lt;br /&gt;
#0D     status D            see below&lt;br /&gt;
#32     millenium           19 or 20 (bcd or binary)&lt;br /&gt;
#??     memory              all other registers can be freely used as persistent memory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Status registers ==&lt;br /&gt;
&lt;br /&gt;
* '''Status A'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bit0-3  [not used] interrupt frequency&lt;br /&gt;
bit4-6  time frequency (must be 010; if not, set it to this value, otherwise the RTC will not work correctly)&lt;br /&gt;
bit7    1 = time is being updated at the moment, so don't read it!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Status B'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bit0    1 = take summer time into account&lt;br /&gt;
bit1    0 = 12 hours time format, 1 = 24 hours time format&lt;br /&gt;
bit2    0 = all values in BCD format, 1 = all values in binary format&lt;br /&gt;
bit3    1 = [not used] activate rectangle generator&lt;br /&gt;
bit4    1 = [not used] generate interrupt after time update&lt;br /&gt;
bit5    1 = [not used] generate interrupt if alarm&lt;br /&gt;
bit6    1 = [not used] generate periodic interrupt (see status A, bit0-3)&lt;br /&gt;
bit7    1 = stop time update; set this, during you update the time and reset it after the update!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Status C'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bit4    1 = [not used] interrupt has been generated because of time update (see status B, bit4)&lt;br /&gt;
bit5    1 = [not used] interrupt has been generated because of alarm (see status B, bit5)&lt;br /&gt;
bit6    1 = [not used] interrupt has been generated because of periodic (see status B, bit6)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Status D'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bit7    0 = battery is nearly empty, please charge or replace&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Programming:SYMBiFACE_II|SYMBiFACE II documentations]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Programming:Integer_Multiplication&amp;diff=22823</id>
		<title>Programming:Integer Multiplication</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:Integer_Multiplication&amp;diff=22823"/>
				<updated>2008-04-04T04:31:06Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: Stupid editor - disabled now&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Classic 8bit * 8bit Unsigned ==&lt;br /&gt;
&lt;br /&gt;
'''Input:''' H = ''Multiplier'', E = ''Multiplicand'', L = 0, D = 0&lt;br /&gt;
&lt;br /&gt;
'''Output:''' HL = ''Product''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sla h  ; optimised 1st iteration&lt;br /&gt;
jr nc,$+3&lt;br /&gt;
ld l,e&lt;br /&gt;
&lt;br /&gt;
add hl,hl  ; unroll 7 times&lt;br /&gt;
jr nc,$+3  ; ...&lt;br /&gt;
add hl,de  ; ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Classic 16bit * 8bit Unsigned ==&lt;br /&gt;
&lt;br /&gt;
'''Input:''' A = ''Multiplier'', DE = ''Multiplicand'', HL = 0, C = 0&lt;br /&gt;
&lt;br /&gt;
'''Output:''' A:HL = ''Product''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
add a,a  ; optimised 1st iteration&lt;br /&gt;
jr nc,$+4&lt;br /&gt;
ld h,d&lt;br /&gt;
ld l,e&lt;br /&gt;
&lt;br /&gt;
add hl,hl  ; unroll 7 times&lt;br /&gt;
rla   ; ...&lt;br /&gt;
jr nc,$+4  ; ...&lt;br /&gt;
add hl,de  ; ...&lt;br /&gt;
adc a,c  ; ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fast 8bit * 8bit Unsigned (using log / antilog tables) ==&lt;br /&gt;
&lt;br /&gt;
The original routine was written by Jeff Frohwein for the Nintendo Gameboy. You can find it on [http://www.devrs.com/gb/files/logmult.txt Devrs.com].&lt;br /&gt;
&lt;br /&gt;
Because of the usage of log / antilog tables this routine is less accurate, but very fast. It takes advantage of the fact that if you take the log of two numbers, add the results and then take the antilog of the total you have done the equivalent of multiplying the two numbers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 x^a * x^b = x^(a+b)&lt;br /&gt;
&lt;br /&gt;
 a * b = x^(logx(a) + logx(b))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Input:''' B = ''Multiplier'', C = ''Multiplicant''&lt;br /&gt;
&lt;br /&gt;
'''Output:''' DE = ''Product''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FastMult:&lt;br /&gt;
  ld      l,c&lt;br /&gt;
  ld      h,&amp;amp;82&lt;br /&gt;
  ld      d,(hl)          ; d = 32 * log_2(c)&lt;br /&gt;
  &lt;br /&gt;
  ld      l,b&lt;br /&gt;
  ld      a,(hl)          ; a = 32 * log_2(b)&lt;br /&gt;
  &lt;br /&gt;
  add     a,d&lt;br /&gt;
  ld      l,a&lt;br /&gt;
  ld      a,0&lt;br /&gt;
  adc     a,0&lt;br /&gt;
  ld      h,a             ; hl = d + a&lt;br /&gt;
  &lt;br /&gt;
  add     hl,hl&lt;br /&gt;
  set     2,h             ; hl = hl + $0400&lt;br /&gt;
  set     7,h             ; hl = hl + &amp;amp;8000&lt;br /&gt;
  &lt;br /&gt;
  ld      e,(hl)&lt;br /&gt;
  inc     hl&lt;br /&gt;
  ld      d,(hl)          ; de = 2^((hl)/32)&lt;br /&gt;
  &lt;br /&gt;
  ret&lt;br /&gt;
&lt;br /&gt;
; 32*Log_2(x) Table&lt;br /&gt;
;&lt;br /&gt;
;   FOR A=0 TO 255&lt;br /&gt;
;     C=4 &lt;br /&gt;
;     B=2&lt;br /&gt;
;     FOR Z=1 TO 10&lt;br /&gt;
;       IF (2^C) &amp;gt; A THEN C=C-B ELSE C=C+B&lt;br /&gt;
;       B=B/2&lt;br /&gt;
;     NEXT Z&lt;br /&gt;
;     PRINT INT(C*32);&amp;quot;,&amp;quot;;&lt;br /&gt;
;   NEXT A&lt;br /&gt;
ORG &amp;amp;8200&lt;br /&gt;
&lt;br /&gt;
logtable:&lt;br /&gt;
  db 0 , 0 , 32 , 50 , 64 , 74 , 82 , 89 , 96 , 101 , 106 , 110 , 114 , 118 , 121&lt;br /&gt;
  db 125 , 128 , 130 , 133 , 135 , 138 , 140 , 142 , 144 , 146 , 148 , 150 , 152&lt;br /&gt;
  db 153 , 155 , 157 , 158 , 160 , 161 , 162 , 164 , 165 , 166 , 167 , 169 , 170&lt;br /&gt;
  db 171 , 172 , 173 , 174 , 175 , 176 , 177 , 178 , 179 , 180 , 181 , 182 , 183&lt;br /&gt;
  db 184 , 185 , 185 , 186 , 187 , 188 , 189 , 189 , 190 , 191 , 192 , 192 , 193&lt;br /&gt;
  db 194 , 194 , 195 , 196 , 196 , 197 , 198 , 198 , 199 , 199 , 200 , 201 , 201&lt;br /&gt;
  db 202 , 202 , 203 , 204 , 204 , 205 , 205 , 206 , 206 , 207 , 207 , 208 , 208&lt;br /&gt;
  db 209 , 209 , 210 , 210 , 211 , 211 , 212 , 212 , 213 , 213 , 213 , 214 , 214&lt;br /&gt;
  db 215 , 215 , 216 , 216 , 217 , 217 , 217 , 218 , 218 , 219 , 219 , 219 , 220&lt;br /&gt;
  db 220 , 221 , 221 , 221 , 222 , 222 , 222 , 223 , 223 , 224 , 224 , 224 , 225&lt;br /&gt;
  db 225 , 225 , 226 , 226 , 226 , 227 , 227 , 227 , 228 , 228 , 228 , 229 , 229&lt;br /&gt;
  db 229 , 230 , 230 , 230 , 231 , 231 , 231 , 231 , 232 , 232 , 232 , 233 , 233&lt;br /&gt;
  db 233 , 234 , 234 , 234 , 234 , 235 , 235 , 235 , 236 , 236 , 236 , 236 , 237&lt;br /&gt;
  db 237 , 237 , 237 , 238 , 238 , 238 , 238 , 239 , 239 , 239 , 239 , 240 , 240&lt;br /&gt;
  db 240 , 241 , 241 , 241 , 241 , 241 , 242 , 242 , 242 , 242 , 243 , 243 , 243&lt;br /&gt;
  db 243 , 244 , 244 , 244 , 244 , 245 , 245 , 245 , 245 , 245 , 246 , 246 , 246&lt;br /&gt;
  db 246 , 247 , 247 , 247 , 247 , 247 , 248 , 248 , 248 , 248 , 249 , 249 , 249&lt;br /&gt;
  db 249 , 249 , 250 , 250 , 250 , 250 , 250 , 251 , 251 , 251 , 251 , 251 , 252&lt;br /&gt;
  db 252 , 252 , 252 , 252 , 253 , 253 , 253 , 253 , 253 , 253 , 254 , 254 , 254&lt;br /&gt;
  db 254 , 254 , 255 , 255 , 255 , 255 , 255&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; AntiLog 2^(x/32) Table&lt;br /&gt;
;&lt;br /&gt;
;   FOR A=0 to 510&lt;br /&gt;
;   PRINT INT(2^(A/32)+.5);&amp;quot;,&amp;quot;;&lt;br /&gt;
;   NEXT A&lt;br /&gt;
ORG &amp;amp;8400&lt;br /&gt;
&lt;br /&gt;
antilog:&lt;br /&gt;
  dw 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2&lt;br /&gt;
  dw 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2&lt;br /&gt;
  dw 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 4 , 4&lt;br /&gt;
  dw 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 6&lt;br /&gt;
  dw 6 , 6 , 6 , 6 , 6 , 6 , 6 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 8 , 8 , 8 , 8 , 8 , 9&lt;br /&gt;
  dw 9 , 9 , 9 , 9 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 11 , 11 , 12 , 12 , 12 , 12&lt;br /&gt;
  dw 13 , 13 , 13 , 13 , 14 , 14 , 14 , 15 , 15 , 15 , 16 , 16 , 16 , 17 , 17 , 17&lt;br /&gt;
  dw 18 , 18 , 19 , 19 , 19 , 20 , 20 , 21 , 21 , 22 , 22 , 23 , 23 , 24 , 24 , 25&lt;br /&gt;
  dw 25 , 26 , 26 , 27 , 27 , 28 , 29 , 29 , 30 , 31 , 31 , 32 , 33 , 33 , 34 , 35&lt;br /&gt;
  dw 36 , 36 , 37 , 38 , 39 , 40 , 41 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49&lt;br /&gt;
  dw 50 , 52 , 53 , 54 , 55 , 56 , 57 , 59 , 60 , 61 , 63 , 64 , 65 , 67 , 68 , 70&lt;br /&gt;
  dw 71 , 73 , 74 , 76 , 78 , 79 , 81 , 83 , 85 , 87 , 89 , 91 , 92 , 95 , 97 , 99&lt;br /&gt;
  dw 101 , 103 , 105 , 108 , 110 , 112 , 115 , 117 , 120 , 123 , 125 , 128 , 131&lt;br /&gt;
  dw 134 , 137 , 140 , 143 , 146 , 149 , 152 , 156 , 159 , 162 , 166 , 170 , 173&lt;br /&gt;
  dw 177 , 181 , 185 , 189 , 193 , 197 , 202 , 206 , 211 , 215 , 220 , 225 , 230&lt;br /&gt;
  dw 235 , 240 , 245 , 251 , 256 , 262 , 267 , 273 , 279 , 285 , 292 , 298 , 304&lt;br /&gt;
  dw 311 , 318 , 325 , 332 , 339 , 347 , 354 , 362 , 370 , 378 , 386 , 395 , 403&lt;br /&gt;
  dw 412 , 421 , 431 , 440 , 450 , 459 , 470 , 480 , 490 , 501 , 512 , 523 , 535&lt;br /&gt;
  dw 546 , 558 , 571 , 583 , 596 , 609 , 622 , 636 , 650 , 664 , 679 , 693 , 709&lt;br /&gt;
  dw 724 , 740 , 756 , 773 , 790 , 807 , 825 , 843 , 861 , 880 , 899 , 919 , 939&lt;br /&gt;
  dw 960 , 981 , 1002 , 1024 , 1046 , 1069 , 1093 , 1117 , 1141 , 1166 , 1192&lt;br /&gt;
  dw 1218 , 1244 , 1272 , 1300 , 1328 , 1357 , 1387 , 1417 , 1448 , 1480 , 1512&lt;br /&gt;
  dw 1545 , 1579 , 1614 , 1649 , 1685 , 1722 , 1760 , 1798 , 1838 , 1878 , 1919&lt;br /&gt;
  dw 1961 , 2004 , 2048 , 2093 , 2139 , 2186 , 2233 , 2282 , 2332 , 2383 , 2435&lt;br /&gt;
  dw 2489 , 2543 , 2599 , 2656 , 2714 , 2774 , 2834 , 2896 , 2960 , 3025 , 3091&lt;br /&gt;
  dw 3158 , 3228 , 3298 , 3371 , 3444 , 3520 , 3597 , 3676 , 3756 , 3838 , 3922&lt;br /&gt;
  dw 4008 , 4096 , 4186 , 4277 , 4371 , 4467 , 4565 , 4664 , 4767 , 4871 , 4978&lt;br /&gt;
  dw 5087 , 5198 , 5312 , 5428 , 5547 , 5668 , 5793 , 5919 , 6049 , 6182 , 6317&lt;br /&gt;
  dw 6455 , 6597 , 6741 , 6889 , 7039 , 7194 , 7351 , 7512 , 7677 , 7845 , 8016&lt;br /&gt;
  dw 8192 , 8371 , 8555 , 8742 , 8933 , 9129 , 9329 , 9533 , 9742 , 9955 , 10173&lt;br /&gt;
  dw 10396 , 10624 , 10856 , 11094 , 11337 , 11585 , 11839 , 12098 , 12363 , 12634&lt;br /&gt;
  dw 12910 , 13193 , 13482 , 13777 , 14079 , 14387 , 14702 , 15024 , 15353 , 15689&lt;br /&gt;
  dw 16033 , 16384 , 16743 , 17109 , 17484 , 17867 , 18258 , 18658 , 19066 , 19484&lt;br /&gt;
  dw 19911 , 20347 , 20792 , 21247 , 21713 , 22188 , 22674 , 23170 , 23678 , 24196&lt;br /&gt;
  dw 24726 , 25268 , 25821 , 26386 , 26964 , 27554 , 28158 , 28774 , 29404 , 30048&lt;br /&gt;
  dw 30706 , 31379 , 32066 , 32768 , 33485 , 34219 , 34968 , 35734 , 36516 , 37316&lt;br /&gt;
  dw 38133 , 38968 , 39821 , 40693 , 41584 , 42495 , 43425 , 44376 , 45348 , 46341&lt;br /&gt;
  dw 47356 , 48393 , 49452 , 50535 , 51642 , 52772 , 53928 , 55109 , 56316 , 57549&lt;br /&gt;
  dw  58809 , 60097 , 61413 , 62757&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Faster, accurate 8bit * 8bit Unsigned ==&lt;br /&gt;
&lt;br /&gt;
I'm currently working on a new routine, based on a routine by Kirk Meyer [http://www.ticalc.org/pub/86/asm/source/routines/vfmult.asm] which uses nibble multiplication tables.&lt;br /&gt;
&lt;br /&gt;
I have a working, tested version which uses 16K of tables and can perform multiplication in 20&amp;amp;mu;s.&lt;br /&gt;
&lt;br /&gt;
The code to produce the tables is below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.maketabs&lt;br /&gt;
ld hl,hltab1&lt;br /&gt;
.makelp1&lt;br /&gt;
ld a,l&lt;br /&gt;
rla&lt;br /&gt;
and #1e&lt;br /&gt;
add restab / 256&lt;br /&gt;
ld (hl),a&lt;br /&gt;
inc l&lt;br /&gt;
jr nz,makelp1&lt;br /&gt;
inc h&lt;br /&gt;
.makelp2&lt;br /&gt;
ld a,l&lt;br /&gt;
rra:rra:rra&lt;br /&gt;
and #1e&lt;br /&gt;
jr z,usez&lt;br /&gt;
add restab2 - restab / 256 - 2&lt;br /&gt;
.usez&lt;br /&gt;
add restab / 256&lt;br /&gt;
ld (hl),a&lt;br /&gt;
inc l&lt;br /&gt;
jr nz,makelp2&lt;br /&gt;
inc h			; restab&lt;br /&gt;
.makelp3&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
inc h&lt;br /&gt;
ld d,(hl)&lt;br /&gt;
inc h&lt;br /&gt;
add l&lt;br /&gt;
ld (hl),a&lt;br /&gt;
inc h&lt;br /&gt;
ld a,0&lt;br /&gt;
adc d&lt;br /&gt;
ld (hl),a&lt;br /&gt;
dec h:dec h:dec h&lt;br /&gt;
inc l&lt;br /&gt;
jr nz,makelp3&lt;br /&gt;
inc h&lt;br /&gt;
inc h&lt;br /&gt;
ld a,h&lt;br /&gt;
cp restab2 / 256 - 2&lt;br /&gt;
jr nz,makelp3&lt;br /&gt;
ld b,h&lt;br /&gt;
ld c,l&lt;br /&gt;
inc b&lt;br /&gt;
inc b&lt;br /&gt;
ld h,restab / 256 + 2&lt;br /&gt;
.makelp4&lt;br /&gt;
ld e,(hl)&lt;br /&gt;
inc h&lt;br /&gt;
ld d,(hl)&lt;br /&gt;
dec h&lt;br /&gt;
ex de,hl&lt;br /&gt;
add hl,hl:add hl,hl:add hl,hl:add hl,hl&lt;br /&gt;
ex de,hl&lt;br /&gt;
ld a,e&lt;br /&gt;
ld (bc),a&lt;br /&gt;
inc b&lt;br /&gt;
ld a,d&lt;br /&gt;
ld (bc),a&lt;br /&gt;
dec b&lt;br /&gt;
inc l&lt;br /&gt;
inc c&lt;br /&gt;
jr nz,makelp4&lt;br /&gt;
inc h&lt;br /&gt;
inc h&lt;br /&gt;
inc b&lt;br /&gt;
inc b&lt;br /&gt;
ld a,h&lt;br /&gt;
cp restab2 / 256&lt;br /&gt;
jr nz,makelp4&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
ds -$ and #ff&lt;br /&gt;
.hltab1&lt;br /&gt;
ds 256&lt;br /&gt;
.hltab2&lt;br /&gt;
ds 256&lt;br /&gt;
.restab&lt;br /&gt;
ds 512 * 16&lt;br /&gt;
.restab2&lt;br /&gt;
ds 512 * 15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code to perform the multiplication (DE = L * C):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ld h,hltab1 / 256	; 2&lt;br /&gt;
ld b,(hl)		; 4&lt;br /&gt;
inc h			; 5&lt;br /&gt;
ld h,(hl)		; 7&lt;br /&gt;
ld l,c			; 8&lt;br /&gt;
ld a,(bc)		; 10&lt;br /&gt;
add (hl)		; 12&lt;br /&gt;
ld e,a			; 13&lt;br /&gt;
inc b			; 14&lt;br /&gt;
inc h			; 15&lt;br /&gt;
ld a,(bc)		; 17&lt;br /&gt;
adc (hl)		; 19&lt;br /&gt;
ld d,a			; 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
16K is a lot of memory to use for tables, but I'm working on a way to reduce this to 8K while maintaining similar performance (around 26&amp;amp;mu;s). The idea is rather than using tables for the low and high nibbles, use tables for alternate bits. So there would be 16 tables for the values #00, #01, #04, #05, #10, #11, #14, #15, #40, #41, #44, #45, #50, #51, #54, #55. The values can be shifted by 1 (rather than 4) to give values for the alternate bits using a simple ADD HL,HL.&lt;br /&gt;
&lt;br /&gt;
This routine should be easy to adapt to a 16bit * 8bit unsigned multiplication or even a 16bit * 16bit, using simple additions.&lt;br /&gt;
&lt;br /&gt;
[[User:Executioner|Executioner]] 03:58, 8 May 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Ok, here is the new 8K routine, first the routine to build the tables:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.maketabs&lt;br /&gt;
ld hl,hltab1&lt;br /&gt;
.makelp5&lt;br /&gt;
ld a,l&lt;br /&gt;
ld bc,0&lt;br /&gt;
rla:rl b:rla:rl c&lt;br /&gt;
rla:rl b:rla:rl c&lt;br /&gt;
rla:rl b:rla:rl c&lt;br /&gt;
rla:rl b:rla:rl c&lt;br /&gt;
ld a,b&lt;br /&gt;
add a&lt;br /&gt;
add restab / 256&lt;br /&gt;
ld (hl),a&lt;br /&gt;
inc h&lt;br /&gt;
ld a,c&lt;br /&gt;
add a&lt;br /&gt;
add restab / 256&lt;br /&gt;
ld (hl),a&lt;br /&gt;
dec h&lt;br /&gt;
inc l&lt;br /&gt;
jr nz,makelp5&lt;br /&gt;
ld h,restab / 256 + 2&lt;br /&gt;
.makelp6&lt;br /&gt;
ld (hl),l&lt;br /&gt;
inc l&lt;br /&gt;
jr nz,makelp6&lt;br /&gt;
inc h:inc h&lt;br /&gt;
ld b,2&lt;br /&gt;
.makelp8&lt;br /&gt;
push bc&lt;br /&gt;
xor a&lt;br /&gt;
rr b:rra:rrca&lt;br /&gt;
rr b:rra:rrca&lt;br /&gt;
rr b:rra:rrca&lt;br /&gt;
rr b:rra:rrca&lt;br /&gt;
.makelp7&lt;br /&gt;
push hl&lt;br /&gt;
push af&lt;br /&gt;
call mulLbyA&lt;br /&gt;
ex de,hl&lt;br /&gt;
pop af&lt;br /&gt;
pop hl&lt;br /&gt;
ld (hl),e&lt;br /&gt;
inc h&lt;br /&gt;
ld (hl),d&lt;br /&gt;
dec h&lt;br /&gt;
inc l&lt;br /&gt;
jr nz,makelp7&lt;br /&gt;
inc h:inc h&lt;br /&gt;
pop bc&lt;br /&gt;
inc b&lt;br /&gt;
bit 4,b&lt;br /&gt;
jr z,makelp8&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
.mulLbyA	; MAX times	; MIN times&lt;br /&gt;
ld e,l		; 1		; 1&lt;br /&gt;
ld d,0		; 3		; 3&lt;br /&gt;
add a		; 4		; 4&lt;br /&gt;
ld h,a		; 5		; 5&lt;br /&gt;
jr c,ncad0	; 8		; 8&lt;br /&gt;
ld l,d		&lt;br /&gt;
.ncad0&lt;br /&gt;
add hl,hl	; 11		; 11&lt;br /&gt;
jr nc,ncad1	; 13		; 14&lt;br /&gt;
add hl,de	; 16&lt;br /&gt;
.ncad1&lt;br /&gt;
add hl,hl	; 19		; 17&lt;br /&gt;
jr nc,ncad2	; 21		; 20&lt;br /&gt;
add hl,de	; 24&lt;br /&gt;
.ncad2&lt;br /&gt;
add hl,hl	; 27		; 23&lt;br /&gt;
jr nc,ncad3	; 29		; 26&lt;br /&gt;
add hl,de	; 32&lt;br /&gt;
.ncad3&lt;br /&gt;
add hl,hl	; 35		; 29&lt;br /&gt;
jr nc,ncad4	; 37		; 32&lt;br /&gt;
add hl,de	; 40&lt;br /&gt;
.ncad4&lt;br /&gt;
add hl,hl	; 43		; 35&lt;br /&gt;
jr nc,ncad5	; 45		; 38&lt;br /&gt;
add hl,de	; 48&lt;br /&gt;
.ncad5&lt;br /&gt;
add hl,hl	; 51		; 41&lt;br /&gt;
jr nc,ncad6	; 53		; 44&lt;br /&gt;
add hl,de	; 56&lt;br /&gt;
.ncad6&lt;br /&gt;
add hl,hl	; 59		; 47&lt;br /&gt;
ld a,h		; 60		; 48&lt;br /&gt;
ret nc		; 61		; 50?&lt;br /&gt;
add hl,de	; 64&lt;br /&gt;
ld a,h		; 65&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
ds -$ and #ff&lt;br /&gt;
&lt;br /&gt;
.hltab1&lt;br /&gt;
ds 256&lt;br /&gt;
.hltab2&lt;br /&gt;
ds 256&lt;br /&gt;
.restab&lt;br /&gt;
ds 512 * 16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the routine to do the multiplication:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.umultCL		; Using 8 bit only (25us - DE = L * C)&lt;br /&gt;
ld h,hltab2 / 256	; 2&lt;br /&gt;
ld b,(hl)		; 4&lt;br /&gt;
dec h			; 5&lt;br /&gt;
ld h,(hl)		; 7&lt;br /&gt;
ld l,c			; 8&lt;br /&gt;
ld a,(hl)		; 10&lt;br /&gt;
add a			; 11&lt;br /&gt;
inc h			; 12&lt;br /&gt;
ld d,(hl)		; 14&lt;br /&gt;
rl d			; 16&lt;br /&gt;
ld h,b			; 17&lt;br /&gt;
add (hl)		; 19&lt;br /&gt;
ld e,a			; 20&lt;br /&gt;
inc h			; 21&lt;br /&gt;
ld a,(hl)		; 23&lt;br /&gt;
adc d			; 24&lt;br /&gt;
ld d,a			; 25&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Very fast 8bit * 8bit Unsigned with only 1K of tables ==&lt;br /&gt;
&lt;br /&gt;
Here's a new routine I've developed which uses the formula ab = ((a + b)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; - (a - b)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;) / 4. It's based on a routine for the 6502 by Stephen Judd in a C= Hacking article. Because of differences between the way the 6502 does register indexing it was quite difficult to actually get this working, but it's a great compromise between speed and space since it only uses 1K of tables (as opposed to the 16K or 8K table routines above), and can still manage to do the job in a maximum of 28 microseconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Firstly, once again, we need some code to generate the tables. These tables contain values for&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;/4 for 9 bit values of x, with the LSB when bit 8 is zero first followed by the MSB.&lt;br /&gt;
&amp;lt;pre&amp;gt;.gen_sq4&lt;br /&gt;
	xor a&lt;br /&gt;
	ld de,umul_tab + #1ff&lt;br /&gt;
	ld (de),a&lt;br /&gt;
	dec d&lt;br /&gt;
	ld (de),a&lt;br /&gt;
	ld h,d&lt;br /&gt;
	ld l,e&lt;br /&gt;
	inc e&lt;br /&gt;
	ld c,e&lt;br /&gt;
	ld b,2&lt;br /&gt;
&lt;br /&gt;
	.sq4_lp&lt;br /&gt;
	ld a,b&lt;br /&gt;
	cp 2&lt;br /&gt;
	ld a,e&lt;br /&gt;
	rra&lt;br /&gt;
	add (hl)&lt;br /&gt;
	ld (de),a&lt;br /&gt;
	inc h&lt;br /&gt;
	inc d&lt;br /&gt;
	ld a,(hl)&lt;br /&gt;
	adc c&lt;br /&gt;
	ld (de),a&lt;br /&gt;
	dec d&lt;br /&gt;
	ld h,d&lt;br /&gt;
	inc l&lt;br /&gt;
	inc e&lt;br /&gt;
	jr nz,sq4_lp&lt;br /&gt;
	inc d&lt;br /&gt;
	inc d&lt;br /&gt;
	djnz sq4_lp&lt;br /&gt;
	ret&lt;br /&gt;
&lt;br /&gt;
align #100&lt;br /&gt;
.umul_tab ds #400&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now for the actual multiply routine:&lt;br /&gt;
&lt;br /&gt;
'''Input:''' A = ''Multiplier'', L = ''Multiplicand''&lt;br /&gt;
&lt;br /&gt;
'''Output:''' DE = ''Product''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	ld h,umul_tab_lo / #100	; 2&lt;br /&gt;
	ld b,h			; 3&lt;br /&gt;
	add l			; 4&lt;br /&gt;
	ld c,a			; 5&lt;br /&gt;
	jr nc,@noovf		; 7&lt;br /&gt;
	inc b			; 8&lt;br /&gt;
	inc b			; 9&lt;br /&gt;
.@noovf&lt;br /&gt;
	sub l			; 10&lt;br /&gt;
	sub l			; 11&lt;br /&gt;
	jr nc,@noneg		; 13&lt;br /&gt;
	neg			; 15&lt;br /&gt;
.@noneg&lt;br /&gt;
	ld l,a			; 16&lt;br /&gt;
	ld a,(bc)		; 18&lt;br /&gt;
	sub (hl)		; 20&lt;br /&gt;
	ld e,a			; 21&lt;br /&gt;
	inc b			; 22&lt;br /&gt;
	inc h			; 23&lt;br /&gt;
	ld a,(bc)		; 25&lt;br /&gt;
	sbc (hl)		; 27&lt;br /&gt;
	ld d,a			; 28&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This code could easily be converted to a macro as it's only 24 bytes. I've tried to optimise it further but with no luck!&lt;br /&gt;
&lt;br /&gt;
[[User:Executioner|Executioner]] 06:25, 4 April 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
== 16bit * 16bit Unsigned ==&lt;br /&gt;
&lt;br /&gt;
'''Input:''' BC = ''Multiplier'', DE = ''Multiplicand''&lt;br /&gt;
&lt;br /&gt;
'''Output:''' A,HL = ''Product''&lt;br /&gt;
&amp;lt;pre&amp;gt;ld ix,0&lt;br /&gt;
 ld hl,0&lt;br /&gt;
.mul24b1:&lt;br /&gt;
 ld a,c&lt;br /&gt;
 or b&lt;br /&gt;
 jr z,mul24b3&lt;br /&gt;
 srl b&lt;br /&gt;
 rr c&lt;br /&gt;
 jr nc,mul24b2&lt;br /&gt;
 add ix,de&lt;br /&gt;
 ld a,h&lt;br /&gt;
 adc l&lt;br /&gt;
 ld h,a&lt;br /&gt;
.mul24b2:&lt;br /&gt;
 sla e&lt;br /&gt;
 rl d&lt;br /&gt;
 rl l&lt;br /&gt;
 jr mul24b1:&lt;br /&gt;
.mul24b3:&lt;br /&gt;
 ld a,h&lt;br /&gt;
 db #dd:ld e,l&lt;br /&gt;
 db #dd:ld d,h&lt;br /&gt;
 ex de,hl&lt;br /&gt;
 ret&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Web links ==&lt;br /&gt;
&lt;br /&gt;
* [http://map.tni.nl/articles/mult_div_shifts.php Multiplications and divisions on the MSX Assembly Page]&lt;br /&gt;
* [http://www.mccw.hetlab.tk/92/Multiplication/en.html &amp;quot;Multiplication on a Z80&amp;quot; ( MSX Computer &amp;amp; Club Webmagazine)]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Programming:Integer_Multiplication&amp;diff=22822</id>
		<title>Programming:Integer Multiplication</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:Integer_Multiplication&amp;diff=22822"/>
				<updated>2008-04-04T04:25:48Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: Added new 8bit*bit routine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Classic 8bit * 8bit Unsigned ==&lt;br /&gt;
&lt;br /&gt;
'''Input:''' H = ''Multiplier'', E = ''Multiplicand'', L = 0, D = 0&lt;br /&gt;
&lt;br /&gt;
'''Output:''' HL = ''Product''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sla h  ; optimised 1st iteration&lt;br /&gt;
jr nc,$+3&lt;br /&gt;
ld l,e&lt;br /&gt;
&lt;br /&gt;
add hl,hl  ; unroll 7 times&lt;br /&gt;
jr nc,$+3  ; ...&lt;br /&gt;
add hl,de  ; ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Classic 16bit * 8bit Unsigned ==&lt;br /&gt;
&lt;br /&gt;
'''Input:''' A = ''Multiplier'', DE = ''Multiplicand'', HL = 0, C = 0&lt;br /&gt;
&lt;br /&gt;
'''Output:''' A:HL = ''Product''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
add a,a  ; optimised 1st iteration&lt;br /&gt;
jr nc,$+4&lt;br /&gt;
ld h,d&lt;br /&gt;
ld l,e&lt;br /&gt;
&lt;br /&gt;
add hl,hl  ; unroll 7 times&lt;br /&gt;
rla   ; ...&lt;br /&gt;
jr nc,$+4  ; ...&lt;br /&gt;
add hl,de  ; ...&lt;br /&gt;
adc a,c  ; ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fast 8bit * 8bit Unsigned (using log / antilog tables) ==&lt;br /&gt;
&lt;br /&gt;
The original routine was written by Jeff Frohwein for the Nintendo Gameboy. You can find it on [http://www.devrs.com/gb/files/logmult.txt Devrs.com].&lt;br /&gt;
&lt;br /&gt;
Because of the usage of log / antilog tables this routine is less accurate, but very fast. It takes advantage of the fact that if you take the log of two numbers, add the results and then take the antilog of the total you have done the equivalent of multiplying the two numbers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 x^a * x^b = x^(a+b)&lt;br /&gt;
&lt;br /&gt;
 a * b = x^(logx(a) + logx(b))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Input:''' B = ''Multiplier'', C = ''Multiplicant''&lt;br /&gt;
&lt;br /&gt;
'''Output:''' DE = ''Product''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FastMult:&lt;br /&gt;
  ld      l,c&lt;br /&gt;
  ld      h,&amp;amp;82&lt;br /&gt;
  ld      d,(hl)          ; d = 32 * log_2(c)&lt;br /&gt;
  &lt;br /&gt;
  ld      l,b&lt;br /&gt;
  ld      a,(hl)          ; a = 32 * log_2(b)&lt;br /&gt;
  &lt;br /&gt;
  add     a,d&lt;br /&gt;
  ld      l,a&lt;br /&gt;
  ld      a,0&lt;br /&gt;
  adc     a,0&lt;br /&gt;
  ld      h,a             ; hl = d + a&lt;br /&gt;
  &lt;br /&gt;
  add     hl,hl&lt;br /&gt;
  set     2,h             ; hl = hl + $0400&lt;br /&gt;
  set     7,h             ; hl = hl + &amp;amp;8000&lt;br /&gt;
  &lt;br /&gt;
  ld      e,(hl)&lt;br /&gt;
  inc     hl&lt;br /&gt;
  ld      d,(hl)          ; de = 2^((hl)/32)&lt;br /&gt;
  &lt;br /&gt;
  ret&lt;br /&gt;
&lt;br /&gt;
; 32*Log_2(x) Table&lt;br /&gt;
;&lt;br /&gt;
;   FOR A=0 TO 255&lt;br /&gt;
;     C=4 &lt;br /&gt;
;     B=2&lt;br /&gt;
;     FOR Z=1 TO 10&lt;br /&gt;
;       IF (2^C) &amp;gt; A THEN C=C-B ELSE C=C+B&lt;br /&gt;
;       B=B/2&lt;br /&gt;
;     NEXT Z&lt;br /&gt;
;     PRINT INT(C*32);&amp;quot;,&amp;quot;;&lt;br /&gt;
;   NEXT A&lt;br /&gt;
ORG &amp;amp;8200&lt;br /&gt;
&lt;br /&gt;
logtable:&lt;br /&gt;
  db 0 , 0 , 32 , 50 , 64 , 74 , 82 , 89 , 96 , 101 , 106 , 110 , 114 , 118 , 121&lt;br /&gt;
  db 125 , 128 , 130 , 133 , 135 , 138 , 140 , 142 , 144 , 146 , 148 , 150 , 152&lt;br /&gt;
  db 153 , 155 , 157 , 158 , 160 , 161 , 162 , 164 , 165 , 166 , 167 , 169 , 170&lt;br /&gt;
  db 171 , 172 , 173 , 174 , 175 , 176 , 177 , 178 , 179 , 180 , 181 , 182 , 183&lt;br /&gt;
  db 184 , 185 , 185 , 186 , 187 , 188 , 189 , 189 , 190 , 191 , 192 , 192 , 193&lt;br /&gt;
  db 194 , 194 , 195 , 196 , 196 , 197 , 198 , 198 , 199 , 199 , 200 , 201 , 201&lt;br /&gt;
  db 202 , 202 , 203 , 204 , 204 , 205 , 205 , 206 , 206 , 207 , 207 , 208 , 208&lt;br /&gt;
  db 209 , 209 , 210 , 210 , 211 , 211 , 212 , 212 , 213 , 213 , 213 , 214 , 214&lt;br /&gt;
  db 215 , 215 , 216 , 216 , 217 , 217 , 217 , 218 , 218 , 219 , 219 , 219 , 220&lt;br /&gt;
  db 220 , 221 , 221 , 221 , 222 , 222 , 222 , 223 , 223 , 224 , 224 , 224 , 225&lt;br /&gt;
  db 225 , 225 , 226 , 226 , 226 , 227 , 227 , 227 , 228 , 228 , 228 , 229 , 229&lt;br /&gt;
  db 229 , 230 , 230 , 230 , 231 , 231 , 231 , 231 , 232 , 232 , 232 , 233 , 233&lt;br /&gt;
  db 233 , 234 , 234 , 234 , 234 , 235 , 235 , 235 , 236 , 236 , 236 , 236 , 237&lt;br /&gt;
  db 237 , 237 , 237 , 238 , 238 , 238 , 238 , 239 , 239 , 239 , 239 , 240 , 240&lt;br /&gt;
  db 240 , 241 , 241 , 241 , 241 , 241 , 242 , 242 , 242 , 242 , 243 , 243 , 243&lt;br /&gt;
  db 243 , 244 , 244 , 244 , 244 , 245 , 245 , 245 , 245 , 245 , 246 , 246 , 246&lt;br /&gt;
  db 246 , 247 , 247 , 247 , 247 , 247 , 248 , 248 , 248 , 248 , 249 , 249 , 249&lt;br /&gt;
  db 249 , 249 , 250 , 250 , 250 , 250 , 250 , 251 , 251 , 251 , 251 , 251 , 252&lt;br /&gt;
  db 252 , 252 , 252 , 252 , 253 , 253 , 253 , 253 , 253 , 253 , 254 , 254 , 254&lt;br /&gt;
  db 254 , 254 , 255 , 255 , 255 , 255 , 255&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; AntiLog 2^(x/32) Table&lt;br /&gt;
;&lt;br /&gt;
;   FOR A=0 to 510&lt;br /&gt;
;   PRINT INT(2^(A/32)+.5);&amp;quot;,&amp;quot;;&lt;br /&gt;
;   NEXT A&lt;br /&gt;
ORG &amp;amp;8400&lt;br /&gt;
&lt;br /&gt;
antilog:&lt;br /&gt;
  dw 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2&lt;br /&gt;
  dw 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2&lt;br /&gt;
  dw 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 4 , 4&lt;br /&gt;
  dw 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 6&lt;br /&gt;
  dw 6 , 6 , 6 , 6 , 6 , 6 , 6 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 8 , 8 , 8 , 8 , 8 , 9&lt;br /&gt;
  dw 9 , 9 , 9 , 9 , 10 , 10 , 10 , 10 , 10 , 11 , 11 , 11 , 11 , 12 , 12 , 12 , 12&lt;br /&gt;
  dw 13 , 13 , 13 , 13 , 14 , 14 , 14 , 15 , 15 , 15 , 16 , 16 , 16 , 17 , 17 , 17&lt;br /&gt;
  dw 18 , 18 , 19 , 19 , 19 , 20 , 20 , 21 , 21 , 22 , 22 , 23 , 23 , 24 , 24 , 25&lt;br /&gt;
  dw 25 , 26 , 26 , 27 , 27 , 28 , 29 , 29 , 30 , 31 , 31 , 32 , 33 , 33 , 34 , 35&lt;br /&gt;
  dw 36 , 36 , 37 , 38 , 39 , 40 , 41 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49&lt;br /&gt;
  dw 50 , 52 , 53 , 54 , 55 , 56 , 57 , 59 , 60 , 61 , 63 , 64 , 65 , 67 , 68 , 70&lt;br /&gt;
  dw 71 , 73 , 74 , 76 , 78 , 79 , 81 , 83 , 85 , 87 , 89 , 91 , 92 , 95 , 97 , 99&lt;br /&gt;
  dw 101 , 103 , 105 , 108 , 110 , 112 , 115 , 117 , 120 , 123 , 125 , 128 , 131&lt;br /&gt;
  dw 134 , 137 , 140 , 143 , 146 , 149 , 152 , 156 , 159 , 162 , 166 , 170 , 173&lt;br /&gt;
  dw 177 , 181 , 185 , 189 , 193 , 197 , 202 , 206 , 211 , 215 , 220 , 225 , 230&lt;br /&gt;
  dw 235 , 240 , 245 , 251 , 256 , 262 , 267 , 273 , 279 , 285 , 292 , 298 , 304&lt;br /&gt;
  dw 311 , 318 , 325 , 332 , 339 , 347 , 354 , 362 , 370 , 378 , 386 , 395 , 403&lt;br /&gt;
  dw 412 , 421 , 431 , 440 , 450 , 459 , 470 , 480 , 490 , 501 , 512 , 523 , 535&lt;br /&gt;
  dw 546 , 558 , 571 , 583 , 596 , 609 , 622 , 636 , 650 , 664 , 679 , 693 , 709&lt;br /&gt;
  dw 724 , 740 , 756 , 773 , 790 , 807 , 825 , 843 , 861 , 880 , 899 , 919 , 939&lt;br /&gt;
  dw 960 , 981 , 1002 , 1024 , 1046 , 1069 , 1093 , 1117 , 1141 , 1166 , 1192&lt;br /&gt;
  dw 1218 , 1244 , 1272 , 1300 , 1328 , 1357 , 1387 , 1417 , 1448 , 1480 , 1512&lt;br /&gt;
  dw 1545 , 1579 , 1614 , 1649 , 1685 , 1722 , 1760 , 1798 , 1838 , 1878 , 1919&lt;br /&gt;
  dw 1961 , 2004 , 2048 , 2093 , 2139 , 2186 , 2233 , 2282 , 2332 , 2383 , 2435&lt;br /&gt;
  dw 2489 , 2543 , 2599 , 2656 , 2714 , 2774 , 2834 , 2896 , 2960 , 3025 , 3091&lt;br /&gt;
  dw 3158 , 3228 , 3298 , 3371 , 3444 , 3520 , 3597 , 3676 , 3756 , 3838 , 3922&lt;br /&gt;
  dw 4008 , 4096 , 4186 , 4277 , 4371 , 4467 , 4565 , 4664 , 4767 , 4871 , 4978&lt;br /&gt;
  dw 5087 , 5198 , 5312 , 5428 , 5547 , 5668 , 5793 , 5919 , 6049 , 6182 , 6317&lt;br /&gt;
  dw 6455 , 6597 , 6741 , 6889 , 7039 , 7194 , 7351 , 7512 , 7677 , 7845 , 8016&lt;br /&gt;
  dw 8192 , 8371 , 8555 , 8742 , 8933 , 9129 , 9329 , 9533 , 9742 , 9955 , 10173&lt;br /&gt;
  dw 10396 , 10624 , 10856 , 11094 , 11337 , 11585 , 11839 , 12098 , 12363 , 12634&lt;br /&gt;
  dw 12910 , 13193 , 13482 , 13777 , 14079 , 14387 , 14702 , 15024 , 15353 , 15689&lt;br /&gt;
  dw 16033 , 16384 , 16743 , 17109 , 17484 , 17867 , 18258 , 18658 , 19066 , 19484&lt;br /&gt;
  dw 19911 , 20347 , 20792 , 21247 , 21713 , 22188 , 22674 , 23170 , 23678 , 24196&lt;br /&gt;
  dw 24726 , 25268 , 25821 , 26386 , 26964 , 27554 , 28158 , 28774 , 29404 , 30048&lt;br /&gt;
  dw 30706 , 31379 , 32066 , 32768 , 33485 , 34219 , 34968 , 35734 , 36516 , 37316&lt;br /&gt;
  dw 38133 , 38968 , 39821 , 40693 , 41584 , 42495 , 43425 , 44376 , 45348 , 46341&lt;br /&gt;
  dw 47356 , 48393 , 49452 , 50535 , 51642 , 52772 , 53928 , 55109 , 56316 , 57549&lt;br /&gt;
  dw  58809 , 60097 , 61413 , 62757&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Faster, accurate 8bit * 8bit Unsigned ==&lt;br /&gt;
&lt;br /&gt;
I'm currently working on a new routine, based on a routine by Kirk Meyer [http://www.ticalc.org/pub/86/asm/source/routines/vfmult.asm] which uses nibble multiplication tables.&lt;br /&gt;
&lt;br /&gt;
I have a working, tested version which uses 16K of tables and can perform multiplication in 20&amp;amp;mu;s.&lt;br /&gt;
&lt;br /&gt;
The code to produce the tables is below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.maketabs&lt;br /&gt;
ld hl,hltab1&lt;br /&gt;
.makelp1&lt;br /&gt;
ld a,l&lt;br /&gt;
rla&lt;br /&gt;
and #1e&lt;br /&gt;
add restab / 256&lt;br /&gt;
ld (hl),a&lt;br /&gt;
inc l&lt;br /&gt;
jr nz,makelp1&lt;br /&gt;
inc h&lt;br /&gt;
.makelp2&lt;br /&gt;
ld a,l&lt;br /&gt;
rra:rra:rra&lt;br /&gt;
and #1e&lt;br /&gt;
jr z,usez&lt;br /&gt;
add restab2 - restab / 256 - 2&lt;br /&gt;
.usez&lt;br /&gt;
add restab / 256&lt;br /&gt;
ld (hl),a&lt;br /&gt;
inc l&lt;br /&gt;
jr nz,makelp2&lt;br /&gt;
inc h			; restab&lt;br /&gt;
.makelp3&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
inc h&lt;br /&gt;
ld d,(hl)&lt;br /&gt;
inc h&lt;br /&gt;
add l&lt;br /&gt;
ld (hl),a&lt;br /&gt;
inc h&lt;br /&gt;
ld a,0&lt;br /&gt;
adc d&lt;br /&gt;
ld (hl),a&lt;br /&gt;
dec h:dec h:dec h&lt;br /&gt;
inc l&lt;br /&gt;
jr nz,makelp3&lt;br /&gt;
inc h&lt;br /&gt;
inc h&lt;br /&gt;
ld a,h&lt;br /&gt;
cp restab2 / 256 - 2&lt;br /&gt;
jr nz,makelp3&lt;br /&gt;
ld b,h&lt;br /&gt;
ld c,l&lt;br /&gt;
inc b&lt;br /&gt;
inc b&lt;br /&gt;
ld h,restab / 256 + 2&lt;br /&gt;
.makelp4&lt;br /&gt;
ld e,(hl)&lt;br /&gt;
inc h&lt;br /&gt;
ld d,(hl)&lt;br /&gt;
dec h&lt;br /&gt;
ex de,hl&lt;br /&gt;
add hl,hl:add hl,hl:add hl,hl:add hl,hl&lt;br /&gt;
ex de,hl&lt;br /&gt;
ld a,e&lt;br /&gt;
ld (bc),a&lt;br /&gt;
inc b&lt;br /&gt;
ld a,d&lt;br /&gt;
ld (bc),a&lt;br /&gt;
dec b&lt;br /&gt;
inc l&lt;br /&gt;
inc c&lt;br /&gt;
jr nz,makelp4&lt;br /&gt;
inc h&lt;br /&gt;
inc h&lt;br /&gt;
inc b&lt;br /&gt;
inc b&lt;br /&gt;
ld a,h&lt;br /&gt;
cp restab2 / 256&lt;br /&gt;
jr nz,makelp4&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
ds -$ and #ff&lt;br /&gt;
.hltab1&lt;br /&gt;
ds 256&lt;br /&gt;
.hltab2&lt;br /&gt;
ds 256&lt;br /&gt;
.restab&lt;br /&gt;
ds 512 * 16&lt;br /&gt;
.restab2&lt;br /&gt;
ds 512 * 15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code to perform the multiplication (DE = L * C):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ld h,hltab1 / 256	; 2&lt;br /&gt;
ld b,(hl)		; 4&lt;br /&gt;
inc h			; 5&lt;br /&gt;
ld h,(hl)		; 7&lt;br /&gt;
ld l,c			; 8&lt;br /&gt;
ld a,(bc)		; 10&lt;br /&gt;
add (hl)		; 12&lt;br /&gt;
ld e,a			; 13&lt;br /&gt;
inc b			; 14&lt;br /&gt;
inc h			; 15&lt;br /&gt;
ld a,(bc)		; 17&lt;br /&gt;
adc (hl)		; 19&lt;br /&gt;
ld d,a			; 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
16K is a lot of memory to use for tables, but I'm working on a way to reduce this to 8K while maintaining similar performance (around 26&amp;amp;mu;s). The idea is rather than using tables for the low and high nibbles, use tables for alternate bits. So there would be 16 tables for the values #00, #01, #04, #05, #10, #11, #14, #15, #40, #41, #44, #45, #50, #51, #54, #55. The values can be shifted by 1 (rather than 4) to give values for the alternate bits using a simple ADD HL,HL.&lt;br /&gt;
&lt;br /&gt;
This routine should be easy to adapt to a 16bit * 8bit unsigned multiplication or even a 16bit * 16bit, using simple additions.&lt;br /&gt;
&lt;br /&gt;
[[User:Executioner|Executioner]] 03:58, 8 May 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Ok, here is the new 8K routine, first the routine to build the tables:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.maketabs&lt;br /&gt;
ld hl,hltab1&lt;br /&gt;
.makelp5&lt;br /&gt;
ld a,l&lt;br /&gt;
ld bc,0&lt;br /&gt;
rla:rl b:rla:rl c&lt;br /&gt;
rla:rl b:rla:rl c&lt;br /&gt;
rla:rl b:rla:rl c&lt;br /&gt;
rla:rl b:rla:rl c&lt;br /&gt;
ld a,b&lt;br /&gt;
add a&lt;br /&gt;
add restab / 256&lt;br /&gt;
ld (hl),a&lt;br /&gt;
inc h&lt;br /&gt;
ld a,c&lt;br /&gt;
add a&lt;br /&gt;
add restab / 256&lt;br /&gt;
ld (hl),a&lt;br /&gt;
dec h&lt;br /&gt;
inc l&lt;br /&gt;
jr nz,makelp5&lt;br /&gt;
ld h,restab / 256 + 2&lt;br /&gt;
.makelp6&lt;br /&gt;
ld (hl),l&lt;br /&gt;
inc l&lt;br /&gt;
jr nz,makelp6&lt;br /&gt;
inc h:inc h&lt;br /&gt;
ld b,2&lt;br /&gt;
.makelp8&lt;br /&gt;
push bc&lt;br /&gt;
xor a&lt;br /&gt;
rr b:rra:rrca&lt;br /&gt;
rr b:rra:rrca&lt;br /&gt;
rr b:rra:rrca&lt;br /&gt;
rr b:rra:rrca&lt;br /&gt;
.makelp7&lt;br /&gt;
push hl&lt;br /&gt;
push af&lt;br /&gt;
call mulLbyA&lt;br /&gt;
ex de,hl&lt;br /&gt;
pop af&lt;br /&gt;
pop hl&lt;br /&gt;
ld (hl),e&lt;br /&gt;
inc h&lt;br /&gt;
ld (hl),d&lt;br /&gt;
dec h&lt;br /&gt;
inc l&lt;br /&gt;
jr nz,makelp7&lt;br /&gt;
inc h:inc h&lt;br /&gt;
pop bc&lt;br /&gt;
inc b&lt;br /&gt;
bit 4,b&lt;br /&gt;
jr z,makelp8&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
.mulLbyA	; MAX times	; MIN times&lt;br /&gt;
ld e,l		; 1		; 1&lt;br /&gt;
ld d,0		; 3		; 3&lt;br /&gt;
add a		; 4		; 4&lt;br /&gt;
ld h,a		; 5		; 5&lt;br /&gt;
jr c,ncad0	; 8		; 8&lt;br /&gt;
ld l,d		&lt;br /&gt;
.ncad0&lt;br /&gt;
add hl,hl	; 11		; 11&lt;br /&gt;
jr nc,ncad1	; 13		; 14&lt;br /&gt;
add hl,de	; 16&lt;br /&gt;
.ncad1&lt;br /&gt;
add hl,hl	; 19		; 17&lt;br /&gt;
jr nc,ncad2	; 21		; 20&lt;br /&gt;
add hl,de	; 24&lt;br /&gt;
.ncad2&lt;br /&gt;
add hl,hl	; 27		; 23&lt;br /&gt;
jr nc,ncad3	; 29		; 26&lt;br /&gt;
add hl,de	; 32&lt;br /&gt;
.ncad3&lt;br /&gt;
add hl,hl	; 35		; 29&lt;br /&gt;
jr nc,ncad4	; 37		; 32&lt;br /&gt;
add hl,de	; 40&lt;br /&gt;
.ncad4&lt;br /&gt;
add hl,hl	; 43		; 35&lt;br /&gt;
jr nc,ncad5	; 45		; 38&lt;br /&gt;
add hl,de	; 48&lt;br /&gt;
.ncad5&lt;br /&gt;
add hl,hl	; 51		; 41&lt;br /&gt;
jr nc,ncad6	; 53		; 44&lt;br /&gt;
add hl,de	; 56&lt;br /&gt;
.ncad6&lt;br /&gt;
add hl,hl	; 59		; 47&lt;br /&gt;
ld a,h		; 60		; 48&lt;br /&gt;
ret nc		; 61		; 50?&lt;br /&gt;
add hl,de	; 64&lt;br /&gt;
ld a,h		; 65&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
ds -$ and #ff&lt;br /&gt;
&lt;br /&gt;
.hltab1&lt;br /&gt;
ds 256&lt;br /&gt;
.hltab2&lt;br /&gt;
ds 256&lt;br /&gt;
.restab&lt;br /&gt;
ds 512 * 16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the routine to do the multiplication:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.umultCL		; Using 8 bit only (25us - DE = L * C)&lt;br /&gt;
ld h,hltab2 / 256	; 2&lt;br /&gt;
ld b,(hl)		; 4&lt;br /&gt;
dec h			; 5&lt;br /&gt;
ld h,(hl)		; 7&lt;br /&gt;
ld l,c			; 8&lt;br /&gt;
ld a,(hl)		; 10&lt;br /&gt;
add a			; 11&lt;br /&gt;
inc h			; 12&lt;br /&gt;
ld d,(hl)		; 14&lt;br /&gt;
rl d			; 16&lt;br /&gt;
ld h,b			; 17&lt;br /&gt;
add (hl)		; 19&lt;br /&gt;
ld e,a			; 20&lt;br /&gt;
inc h			; 21&lt;br /&gt;
ld a,(hl)		; 23&lt;br /&gt;
adc d			; 24&lt;br /&gt;
ld d,a			; 25&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Very fast 8bit * 8bit Unsigned with only 1K of tables ==&lt;br /&gt;
&lt;br /&gt;
Here's a new routine I've developed which uses the formula ab = ((a + b)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; - (a - b)&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;) / 4. It's based on a routine for the 6502 by Stephen Judd in a C= Hacking article. Because of differences between the way the 6502 does register indexing it was quite difficult to actually get this working, but it's a great compromise between speed and space since it only uses 1K of tables (as opposed to the 16K or 8K table routines above), and can still manage to do the job in a maximum of 28 microseconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Firstly, once again, we need some code to generate the tables. These tables contain values for&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;x&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;/4 for 9 bit values of x, with the LSB when bit 8 is zero first followed by the MSB.&lt;br /&gt;
&amp;lt;pre&amp;gt;.gen_sq4&lt;br /&gt;
 xor a&lt;br /&gt;
 ld de,umul_tab_lo + #1ff&lt;br /&gt;
 ld (de),a&lt;br /&gt;
 dec d&lt;br /&gt;
 ld (de),a&lt;br /&gt;
 ld h,d&lt;br /&gt;
 ld l,e&lt;br /&gt;
 inc e&lt;br /&gt;
 ld c,e&lt;br /&gt;
 ld b,2&lt;br /&gt;
&lt;br /&gt;
 .sq4_lp&lt;br /&gt;
 ld a,b&lt;br /&gt;
 cp 2&lt;br /&gt;
 ld a,e&lt;br /&gt;
 rra&lt;br /&gt;
 add (hl)&lt;br /&gt;
 ld (de),a&lt;br /&gt;
 inc h&lt;br /&gt;
 inc d&lt;br /&gt;
 ld a,(hl)&lt;br /&gt;
 adc c&lt;br /&gt;
 ld (de),a&lt;br /&gt;
 dec d&lt;br /&gt;
 ld h,d&lt;br /&gt;
 inc l&lt;br /&gt;
 inc e&lt;br /&gt;
 jr nz,sq4_lp&lt;br /&gt;
 inc d&lt;br /&gt;
 inc d&lt;br /&gt;
 djnz sq4_lp&lt;br /&gt;
 ret&lt;br /&gt;
&lt;br /&gt;
align #100&lt;br /&gt;
.umul_tab ds #400&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now for the actual multiply routine:&lt;br /&gt;
&lt;br /&gt;
'''Input:''' A = ''Multiplier'', L = ''Multiplicand''&lt;br /&gt;
&lt;br /&gt;
'''Output:''' DE = ''Product''&lt;br /&gt;
&amp;lt;pre&amp;gt;ld h,umul_tab / #100 ; 2&lt;br /&gt;
 ld b,h ; 3&lt;br /&gt;
 add l ; 4&lt;br /&gt;
 ld c,a ; 5&lt;br /&gt;
 jr nc,@noovf ; 7&lt;br /&gt;
 inc b ; 8&lt;br /&gt;
 inc b ; 9&lt;br /&gt;
.@noovf&lt;br /&gt;
 sub l ; 10&lt;br /&gt;
 sub l ; 11&lt;br /&gt;
 jr nc,@noneg ; 13&lt;br /&gt;
 neg ; 15&lt;br /&gt;
.@noneg&lt;br /&gt;
 ld l,a ; 16&lt;br /&gt;
 ld a,(bc) ; 18&lt;br /&gt;
 sub (hl) ; 20&lt;br /&gt;
 ld e,a ; 21&lt;br /&gt;
 inc b ; 22&lt;br /&gt;
 inc h ; 23&lt;br /&gt;
 ld a,(bc) ; 25&lt;br /&gt;
 sbc (hl) ; 27&lt;br /&gt;
 ld d,a ; 28&amp;lt;/pre&amp;gt;&lt;br /&gt;
This code could easily be converted to a macro as it's only 24 bytes. I've tried to optimise it further but with no luck!&lt;br /&gt;
&lt;br /&gt;
[[User:Executioner|Executioner]] 06:25, 4 April 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
== 16bit * 16bit Unsigned ==&lt;br /&gt;
&lt;br /&gt;
'''Input:''' BC = ''Multiplier'', DE = ''Multiplicand''&lt;br /&gt;
&lt;br /&gt;
'''Output:''' A,HL = ''Product''&lt;br /&gt;
&amp;lt;pre&amp;gt;ld ix,0&lt;br /&gt;
 ld hl,0&lt;br /&gt;
.mul24b1:&lt;br /&gt;
 ld a,c&lt;br /&gt;
 or b&lt;br /&gt;
 jr z,mul24b3&lt;br /&gt;
 srl b&lt;br /&gt;
 rr c&lt;br /&gt;
 jr nc,mul24b2&lt;br /&gt;
 add ix,de&lt;br /&gt;
 ld a,h&lt;br /&gt;
 adc l&lt;br /&gt;
 ld h,a&lt;br /&gt;
.mul24b2:&lt;br /&gt;
 sla e&lt;br /&gt;
 rl d&lt;br /&gt;
 rl l&lt;br /&gt;
 jr mul24b1:&lt;br /&gt;
.mul24b3:&lt;br /&gt;
 ld a,h&lt;br /&gt;
 db #dd:ld e,l&lt;br /&gt;
 db #dd:ld d,h&lt;br /&gt;
 ex de,hl&lt;br /&gt;
 ret&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Web links ==&lt;br /&gt;
&lt;br /&gt;
* [http://map.tni.nl/articles/mult_div_shifts.php Multiplications and divisions on the MSX Assembly Page]&lt;br /&gt;
* [http://www.mccw.hetlab.tk/92/Multiplication/en.html &amp;quot;Multiplication on a Z80&amp;quot; ( MSX Computer &amp;amp; Club Webmagazine)]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Executioner&amp;diff=21867</id>
		<title>Executioner</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Executioner&amp;diff=21867"/>
				<updated>2008-03-14T02:58:56Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Executioner''' is a coder from Australia. His most popular productions are [[ParaDOS]] and [[WinApe]].&lt;br /&gt;
&lt;br /&gt;
==Productions==&lt;br /&gt;
&lt;br /&gt;
===Emulators===&lt;br /&gt;
* [[CPCEMU (RWCPC)|CPCEMU]] - I wrote this and called it CPCEMU before I'd heard of CPCEMU by [[Marco Vieth]]. Now commonly known as [[CPCEMU (RWCPC)|RWCPC]]&lt;br /&gt;
* [[WinApe]]&lt;br /&gt;
* [[JEMU]]&lt;br /&gt;
&lt;br /&gt;
===Serious Software===&lt;br /&gt;
* [[Xexor]] - Disc editor and copy utility&lt;br /&gt;
* [[ParaDOS]] - Extended DOS, replacement for AMSDOS with built-in utilities&lt;br /&gt;
* [[Electro Forth]] - A complete Forth implementation I developed for fun&lt;br /&gt;
* [[ZACK]] - Unfinished game creator software. Everything got finished except the sound/FX and completed game loader/multi-load code.&lt;br /&gt;
&lt;br /&gt;
=== Games ===&lt;br /&gt;
&lt;br /&gt;
* [[Electro Invaders]]&lt;br /&gt;
* [[Kiloroid]] - An ''Asteroids'' clone written in 1K for the [http://www.cling.gu.se/~cl3polof/minigame/ 2002 Minigame Competition]&lt;br /&gt;
* [[KTris]] - A ''Tetris'' clone written in 1K for the [http://starbase.globalpc.net/minigame/ 2003 Minigame Competition]&lt;br /&gt;
* [[4KRoids]] - A 4K version of ''Kiloroid''; unfinished, but playable&lt;br /&gt;
* [[Pacman]] - A ''Pacman'' clone, based on Acornsoft's ''Snapper''&lt;br /&gt;
* [[Cobra Mission]] - Sample game with [[ZACK]]&lt;br /&gt;
* [[Frogger]] - A conversion of Konami's coin-op game; only works on [[Plus|Plus machines]]&lt;br /&gt;
* [[Deathchase]] - A CPC conversion of the ZX Spectrum game by Mervyn Estcourt&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
* The River Scroll demo&lt;br /&gt;
&lt;br /&gt;
[[Category:CPC scene members]]&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=21866</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=21866"/>
				<updated>2008-03-14T02:54:39Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
 [[Image:Cpcserieb.jpg|thumb|right|150px|Amstrad CPC Range]]&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]] [[CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' around the CPC available. Feel free to [[Help:Editing|contribute]] or post your suggestions in the [http://www.cpcwiki.eu/forum Forum]!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:32px;text-align:center;padding:5px 0px 4px 0px;background-color:#eee;border:1px solid #dfdfdf;&amp;quot;&amp;gt;'''[[CPC|Amstrad CPC]] · [[Peripherals|Hardware extensions]] · [[Games]] · [[Applications]] · [[Programming]]&amp;lt;br&amp;gt;[[News and Projects]] · [[Emulators]] · [[Demogroups|Scene groups]] · [[CPC scene members|People]] · [[Magazines]] · [[Links|Web links]]'''&amp;lt;br&amp;gt;[[CPCWiki:Portal|CPCWiki Portal]] · [http://www.cpcwiki.eu/forum Forum] · [http://www.cpcwiki.eu/gallery Photo Gallery] · [[About|About - Contribute]] · [[Special:Statistics|Statistics]] · [[CPCWiki:General disclaimer|Disclaimer]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
[[Image:CPConROM.jpg|thumb|center|500px|CPC on a ROM]]&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&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;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #ffc9c9; background-color: #fff3f3&amp;quot;&amp;gt;&lt;br /&gt;
=== CPC related news ===&lt;br /&gt;
&lt;br /&gt;
The last CPC related news.&lt;br /&gt;
&lt;br /&gt;
* 14/03/2008: [http://bitwise-systems.com/files/deathchase.zip Deathchase] released. An Amstrad CPC conversion of the popular ZX Spectrum original, converted by [[Executioner]]&lt;br /&gt;
* 08/03/2008: [http://cpce.emuunlim.com CPCE] 1.90 released. Improved VSync and IRQ signals, bugfixed FDC emulation, improved Z80 search function, etc.&lt;br /&gt;
* 23/02/2008: [[http://CPCrulez.free.fr/ hERMOL]] has released a CPC conversion of [[http://cpcrulez.free.fr/GamesDL_hack/index.php?list=S Street Fighter II]]&lt;br /&gt;
* 15/01/2008: Dedicated book about the CPC in progress [[http://retrorevival.co.uk/ Follow it here!]]&lt;br /&gt;
* 19/12/2007: [[X-Mas 2007]] Another X-mas demos released by [[Hermol]]!&lt;br /&gt;
* 14/12/2007: New [http://cpcgamescd.amstrad.es CPCGamesCD] out&lt;br /&gt;
* 27/11/2007: [http://cpcrulez.free.fr/coding_src_freeOCP.htm FreeOCP] v0.015b released on .CPR cartridge file!&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;small&amp;gt;'''All [[News and Projects|CPC news]]'''&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Donors ===&lt;br /&gt;
&lt;br /&gt;
These people were kind enough to [http://www.cpcwiki.eu/donations.html donate]. Please consider helping with hosting costs - all contributions go '''directly''' to our kind host, not our own pockets!&lt;br /&gt;
&lt;br /&gt;
* [[Rex]] of [[BENG!]]&lt;br /&gt;
* [[Robcfg]]&lt;br /&gt;
* [[Prodatron]]&lt;br /&gt;
* [[User:Gryzor|Gryzor]]&lt;br /&gt;
Thanks so much guys!&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div style=&amp;quot;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #eadcc5; background-color: #FFFFCC;&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;
* [[Xyphoes Fantasy]]&lt;br /&gt;
* [[Genesis 8]]&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;'''[[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;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #e4dede; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
=== Did you know? ===&lt;br /&gt;
&lt;br /&gt;
* With a possible total amount of '''768 x 270 pixel''' (540 interlaced) the [[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]] can handle more than '''50 times''' bigger hard discs than MS Windows 95A.&lt;br /&gt;
* [[FutureOS]] can load 178 KB in 9 seconds from floppy disc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;div style=&amp;quot;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #eadcc5; background-color: #CCFFCC;&amp;quot;&amp;gt;&lt;br /&gt;
=== CPCWiki updates ===&lt;br /&gt;
&lt;br /&gt;
* '''FCKEditor''' installed! Now you can easily edit pages. Please report any functionality issues. You can also&amp;amp;nbsp;''deactivate it in your user preferences.''&lt;br /&gt;
* '''[[VideoUpload|VIDEO EMBEDDING]] enabled for the wiki! Woo-hoo!!!'''&lt;br /&gt;
* '''[[Special:MultipleUpload|MULTIPLE FILE UPLOAD FORM]] installed. For the time being it doesn't work alright when put in the sidebar...'''&lt;br /&gt;
* All the issues of ''Amtix!'', ''Amstrad Action'' and ''Amstrad Computer User'' have been uploaded and you can find them [[Mags|here]]!&lt;br /&gt;
* Add the CPCWiki to '''your Homepage'''. Check out [[About#Wiki-Napping]] and start napping this Wiki.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div style=&amp;quot;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #eadcc5; background-color: #FFCCCC;&amp;quot;&amp;gt;&lt;br /&gt;
=== Where are CPC users from? ===&lt;br /&gt;
http://www4.clustrmaps.com/stats/maps-no_clusters/www.cpcwiki.eu-thumb.jpg&amp;lt;br&amp;gt;&lt;br /&gt;
(or click [http://www4.clustrmaps.com/user/7804b163 here] for the big map!)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=19349</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=19349"/>
				<updated>2007-10-29T11:52:07Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: Removed &amp;lt;/div&amp;gt; text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
 [[Image:Cpcserieb.jpg|thumb|right|150px|Amstrad CPC Range]]&lt;br /&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;
&amp;lt;div style=&amp;quot;margin-top:32px;text-align:center;padding:5px 0px 4px 0px;background-color:#eee;border:1px solid #dfdfdf;&amp;quot;&amp;gt;{{#ev:youtube|BRvwYtEFnNs|200}}&amp;lt;br&amp;gt;&lt;br /&gt; [[VideoUpload|Surprise!!!]]&amp;lt;/div&amp;gt;&lt;br /&gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This site hopes to evolve into an encyclopaedia on all things [[Amstrad]] [[CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' around the CPC available. Feel free to [[Help:Editing|contribute]] or post your suggestions in the [http://www.cpcwiki.eu/forum Forum]!&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:32px;text-align:center;padding:5px 0px 4px 0px;background-color:#eee;border:1px solid #dfdfdf;&amp;quot;&amp;gt;'''[[CPC|Amstrad CPC]] · [[Peripherals|Hardware extensions]] · [[Games]] · [[Applications]] · [[Programming]]&amp;lt;br&amp;gt;[[News and Projects]] · [[Emulators]] · [[Demogroups|Scene groups]] · [[CPC scene members|People]] · [[Magazines]] · [[Links|Web links]]'''&amp;lt;br&amp;gt;[[CPCWiki:Portal|CPCWiki Portal]] · [http://www.cpcwiki.eu/forum Forum] · [http://www.cpcwiki.eu/gallery Photo Gallery] · [[About|About - Contribute]] · [[Special:Statistics|Statistics]] · [[CPCWiki:General disclaimer|Disclaimer]]&amp;lt;/div&amp;gt;&lt;br /&gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt; &lt;br /&gt;
[[Image:29854045 63cfdaac45 b.jpg|thumb|center|600px|CPC taking a day off]]&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&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;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #ffc9c9; background-color: #fff3f3&amp;quot;&amp;gt;&lt;br /&gt;
=== CPC related news ===&lt;br /&gt;
&lt;br /&gt;
The last CPC related news.&lt;br /&gt;
&lt;br /&gt;
* 29/10/2007: [http://www.winape.net WinAPE] 2.0 Alpha 15 released. Configuration Profiles, Improved Sprite emulation, assembler and debugger improvements. Stacks of minor enhancements and bug fixes.&lt;br /&gt;
* 18/10/2007: * 04/08/2007: [http://cpcrulez.free.fr/coding_src_freeOCP.htm FreeOCP] v0.015b released&lt;br /&gt;
* 18/10/2007: [http://cpcrulez.free.fr/Scene_Demos/index.php?list=H Hate Beats]&amp;amp;nbsp;: new Amstrad CPC Plus demo released by [http://ukonx.free.fr Ukonx]&lt;br /&gt;
* 06/10/2007: NEW game for Amstrad CPC available for download&amp;amp;nbsp;: [http://cpcrulez.free.fr/GamesDL_free/index.php?list=D Delirium Tremens] by Antonio Elic , Bernardin Katic et Alen Blazevic. D&lt;br /&gt;
* 04/10/2007: an invitro for [http://www.secretum-meeting.pixnet.fr/ Castellum Secretum 2] meeting has just been released and is available [http://www.amstradcpc.info here].&lt;br /&gt;
* 01/10/2007: [http://zx81.zx81.free.fr/ GP2XCap32 and PSPCap32] released, with major improvements (close to fullspeed, sound is now played in 16 bits and stereo, new speed limiter function and much more)&lt;br /&gt;
* 30/09/2007: [http://www.secretum-meeting.pixnet.fr/ Castellum Secretum 2] meeting will be held in Segré, France, from 26 to 28th october.&lt;br /&gt;
* 17/09/2007: [http://cpce.emuunlim.com CPCE 1.84] released, with assorted bug fixes and enhancements. A hotfix was released on 23/09/2007.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;small&amp;gt;'''All [[News and Projects|CPC news]]'''&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Donors ===&lt;br /&gt;
&lt;br /&gt;
These people were kind enough to [http://www.cpcwiki.eu/donations.html donate]. Please consider helping with hosting costs - all contributions go '''directly''' to our kind host, not our own pockets!&lt;br /&gt;
&lt;br /&gt;
* [[Robcfg]]&lt;br /&gt;
* [[Prodatron]]&lt;br /&gt;
* [[User:Gryzor|Gryzor]]&lt;br /&gt;
Thanks so much guys!&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;div style=&amp;quot;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #eadcc5; background-color: #fff5f3;&amp;quot;&amp;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;
* [[Xyphoes Fantasy]]&lt;br /&gt;
* [[Gate Array]]&lt;br /&gt;
* [[Genesis 8]]&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;'''[[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;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #e4dede; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
=== Did you know? ===&lt;br /&gt;
&lt;br /&gt;
* With a possible total amount of '''768 x 270 pixel''' (540 interlaced) the [[CPC]] was the 8bit 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]] can handle more than '''50 times''' bigger hard discs than MS Windows 95A.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;div style=&amp;quot;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #c6c9ff; color: #000; background-color: #f0f0ff&amp;quot;&amp;gt;&lt;br /&gt;
=== CPCWiki updates ===&lt;br /&gt;
&lt;br /&gt;
* '''FCKEditor''' installed! Now you can easily edit pages. Please report any functionality issues. You can also&amp;amp;nbsp;''deactivate it in your user preferences.''&lt;br /&gt;
* '''[[VideoUpload|VIDEO EMBEDDING]] enabled for the wiki! Woo-hoo!!!'''&lt;br /&gt;
* '''[[Special:MultipleUpload|MULTIPLE FILE UPLOAD FORM]] installed. For the time being it doesn't work alright when put in the sidebar...'''&lt;br /&gt;
* '''MediaWiki v.1.11.0''' installed. Please report any unwanted behavior!&lt;br /&gt;
* '''Breadcrumbs extension''' installed - shows your visit path under the title. Useful for browing around!&amp;amp;nbsp;:)&lt;br /&gt;
* Maintenance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
** Spambot users blocked (if you're blocked by mistake, please visit the forum and ask us to unblock you)&lt;br /&gt;
** CPCWiki software updated to 1.10.0&lt;br /&gt;
** reCAPTCHA installed to prevent spambots from registering accounts.&lt;br /&gt;
* All the issues of ''Amtix!'', ''Amstrad Action'' and ''Amstrad Computer User'' have been uploaded and you can find them [[Mags|here]]!&lt;br /&gt;
* Due to increasing spam posts, '''anonymous posting has now been blocked'''. Please log in to post or edit!&lt;br /&gt;
* Add the CPCWiki to '''your Homepage'''. Check out [[About#Wiki-Napping]] and start napping this Wiki.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;div style=&amp;quot;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #e4dede; background-color: #f9f9f9;&amp;quot;&amp;gt;[[Image:World-map.gif|right|200px]]&lt;br /&gt; &lt;br /&gt;
=== Where are you from? ===&lt;br /&gt;
&lt;br /&gt;
Help clarify the nationality of CPCWIKI users!&lt;br /&gt; Participate in the pool on the cpcwiki forum.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt; [[http://www.cpcwiki.eu/forum/index.php?topic=12.0 Pool thread]] (please register)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=19348</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Main_Page&amp;diff=19348"/>
				<updated>2007-10-29T11:51:23Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: Added WinAPE release&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
 [[Image:Cpcserieb.jpg|thumb|right|150px|Amstrad CPC Range]]&lt;br /&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;
&amp;lt;div style=&amp;quot;margin-top:32px;text-align:center;padding:5px 0px 4px 0px;background-color:#eee;border:1px solid #dfdfdf;&amp;quot;&amp;gt;{{#ev:youtube|BRvwYtEFnNs|200}}&amp;lt;br&amp;gt;&lt;br /&gt; [[VideoUpload|Surprise!!!]]&amp;lt;/div&amp;gt;&lt;br /&gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This site hopes to evolve into an encyclopaedia on all things [[Amstrad]] [[CPC]] related. There are now '''[[Special:Allpages|{{NUMBEROFARTICLES}} articles]]''' around the CPC available. Feel free to [[Help:Editing|contribute]] or post your suggestions in the [http://www.cpcwiki.eu/forum Forum]!&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:32px;text-align:center;padding:5px 0px 4px 0px;background-color:#eee;border:1px solid #dfdfdf;&amp;quot;&amp;gt;'''[[CPC|Amstrad CPC]] · [[Peripherals|Hardware extensions]] · [[Games]] · [[Applications]] · [[Programming]]&amp;lt;br&amp;gt;[[News and Projects]] · [[Emulators]] · [[Demogroups|Scene groups]] · [[CPC scene members|People]] · [[Magazines]] · [[Links|Web links]]'''&amp;lt;br&amp;gt;[[CPCWiki:Portal|CPCWiki Portal]] · [http://www.cpcwiki.eu/forum Forum] · [http://www.cpcwiki.eu/gallery Photo Gallery] · [[About|About - Contribute]] · [[Special:Statistics|Statistics]] · [[CPCWiki:General disclaimer|Disclaimer]]&amp;lt;/div&amp;gt;&lt;br /&gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt; &lt;br /&gt;
[[Image:29854045 63cfdaac45 b.jpg|thumb|center|600px|CPC taking a day off]]&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&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;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #ffc9c9; background-color: #fff3f3&amp;quot;&amp;gt;&lt;br /&gt;
=== CPC related news ===&lt;br /&gt;
&lt;br /&gt;
The last CPC related news.&lt;br /&gt;
&lt;br /&gt;
* 29/10/2007: [http://www.winape.net WinAPE] 2.0 Alpha 15 released. Configuration Profiles, Improved Sprite emulation, assembler and debugger improvements. Stacks of minor enhancements and bug fixes.&lt;br /&gt;
* 18/10/2007: * 04/08/2007: [http://cpcrulez.free.fr/coding_src_freeOCP.htm FreeOCP] v0.015b released&lt;br /&gt;
* 18/10/2007: [http://cpcrulez.free.fr/Scene_Demos/index.php?list=H Hate Beats]&amp;amp;nbsp;: new Amstrad CPC Plus demo released by [http://ukonx.free.fr Ukonx]&lt;br /&gt;
* 06/10/2007: NEW game for Amstrad CPC available for download&amp;amp;nbsp;: [http://cpcrulez.free.fr/GamesDL_free/index.php?list=D Delirium Tremens] by Antonio Elic , Bernardin Katic et Alen Blazevic. D&lt;br /&gt;
* 04/10/2007: an invitro for [http://www.secretum-meeting.pixnet.fr/ Castellum Secretum 2] meeting has just been released and is available [http://www.amstradcpc.info here].&lt;br /&gt;
* 01/10/2007: [http://zx81.zx81.free.fr/ GP2XCap32 and PSPCap32] released, with major improvements (close to fullspeed, sound is now played in 16 bits and stereo, new speed limiter function and much more)&lt;br /&gt;
* 30/09/2007: [http://www.secretum-meeting.pixnet.fr/ Castellum Secretum 2] meeting will be held in Segré, France, from 26 to 28th october.&lt;br /&gt;
* 17/09/2007: [http://cpce.emuunlim.com CPCE 1.84] released, with assorted bug fixes and enhancements. A hotfix was released on 23/09/2007.&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;small&amp;gt;'''All [[News and Projects|CPC news]]'''&amp;lt;/small&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;amp;lt;/div&amp;amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Donors ===&lt;br /&gt;
&lt;br /&gt;
These people were kind enough to [http://www.cpcwiki.eu/donations.html donate]. Please consider helping with hosting costs - all contributions go '''directly''' to our kind host, not our own pockets!&lt;br /&gt;
&lt;br /&gt;
* [[Robcfg]]&lt;br /&gt;
* [[Prodatron]]&lt;br /&gt;
* [[User:Gryzor|Gryzor]]&lt;br /&gt;
Thanks so much guys!&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;div style=&amp;quot;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #eadcc5; background-color: #fff5f3;&amp;quot;&amp;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;
* [[Xyphoes Fantasy]]&lt;br /&gt;
* [[Gate Array]]&lt;br /&gt;
* [[Genesis 8]]&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;'''[[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;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #e4dede; background-color: #f9f9f9;&amp;quot;&amp;gt;&lt;br /&gt;
=== Did you know? ===&lt;br /&gt;
&lt;br /&gt;
* With a possible total amount of '''768 x 270 pixel''' (540 interlaced) the [[CPC]] was the 8bit 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]] can handle more than '''50 times''' bigger hard discs than MS Windows 95A.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;div style=&amp;quot;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #c6c9ff; color: #000; background-color: #f0f0ff&amp;quot;&amp;gt;&lt;br /&gt;
=== CPCWiki updates ===&lt;br /&gt;
&lt;br /&gt;
* '''FCKEditor''' installed! Now you can easily edit pages. Please report any functionality issues. You can also&amp;amp;nbsp;''deactivate it in your user preferences.''&lt;br /&gt;
* '''[[VideoUpload|VIDEO EMBEDDING]] enabled for the wiki! Woo-hoo!!!'''&lt;br /&gt;
* '''[[Special:MultipleUpload|MULTIPLE FILE UPLOAD FORM]] installed. For the time being it doesn't work alright when put in the sidebar...'''&lt;br /&gt;
* '''MediaWiki v.1.11.0''' installed. Please report any unwanted behavior!&lt;br /&gt;
* '''Breadcrumbs extension''' installed - shows your visit path under the title. Useful for browing around!&amp;amp;nbsp;:)&lt;br /&gt;
* Maintenance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
** Spambot users blocked (if you're blocked by mistake, please visit the forum and ask us to unblock you)&lt;br /&gt;
** CPCWiki software updated to 1.10.0&lt;br /&gt;
** reCAPTCHA installed to prevent spambots from registering accounts.&lt;br /&gt;
* All the issues of ''Amtix!'', ''Amstrad Action'' and ''Amstrad Computer User'' have been uploaded and you can find them [[Mags|here]]!&lt;br /&gt;
* Due to increasing spam posts, '''anonymous posting has now been blocked'''. Please log in to post or edit!&lt;br /&gt;
* Add the CPCWiki to '''your Homepage'''. Check out [[About#Wiki-Napping]] and start napping this Wiki.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;div style=&amp;quot;margin: 0; margin-bottom: 5px; padding: .5em 1em .5em; border: 1px solid #e4dede; background-color: #f9f9f9;&amp;quot;&amp;gt;[[Image:World-map.gif|right|200px]]&lt;br /&gt; &lt;br /&gt;
=== Where are you from? ===&lt;br /&gt;
&lt;br /&gt;
Help clarify the nationality of CPCWIKI users!&lt;br /&gt; Participate in the pool on the cpcwiki forum.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt; [[http://www.cpcwiki.eu/forum/index.php?topic=12.0 Pool thread]] (please register)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=19177</id>
		<title>Talk:SP0256</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=19177"/>
				<updated>2007-10-11T12:37:18Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Rename */ GI datasheet link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Can anyone find or get a copy of the internal ROM from the SPO256AL2? I want to emulate it - [[User:Executioner|Executioner]] 12:39, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
: Hmmm... I can probably manage that, i got the chip! But how to read out the ROM data? Can a simple program on the CPC do that or do i have to plug it in a romboard to read the data? (Have to check the pin configs i guess) --[[User:CPCLER|CPCLER]] 12:52, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Is it an additional CPC OS rom? If yes, it's quite easy, I can send you a program for this. BTW, @CPCLER, please use the colon (:) at the beginning of your &amp;quot;talk&amp;quot;-text for correct formatting. -- [[User:Prodatron|Prodatron]] 13:46, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: (Sorry about the colons!!! New to this wiki stuff) No... I have uploaded some pictures of the SPO256 board, and there are clearly no additional ROM chips! so how to proceed, any way of reading the  rom data via the SPO256 chip?&lt;br /&gt;
&lt;br /&gt;
::: The software for the SSA1 has to be loaded from disc or tape (I will test this when i get a CPC up and running). I think the dk'tronics (also based on the SPO256) had at least the software on rom, dont know if it actually used the feature with a rom connected directly to the SPO256.&lt;br /&gt;
&lt;br /&gt;
== SPO256 internal phoneme ROM ==&lt;br /&gt;
&lt;br /&gt;
: No, this isn't a ROM for the CPC, it's the built-in phoneme ROM in the SPO256AL2, and it can only be read by using the serial output on the chip itself, which will require some hardware knowledge and the SPO datasheet. Yes, I do also have an SPO256 in my SSA-1, but no way to read it... Guess I'll have to desolder and pull the chip and connect it to my 8255 I/O board (no idea if that still works) :)&lt;br /&gt;
&lt;br /&gt;
:: I'm looking for this ROM, but can't find it anywhere.  Did you dump it?  (BTW, I think the correct title is &amp;quot;SP'''0'''256&amp;quot;.) —[[User:Stuart Brady|Stuart Brady]] 22:02, 1 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: Nah, haven't dumped it yet. That'd mean finding it, and finding the IO board, desoldering it, attaching it to the IO board somehow and then figuring out how to read the serial data... I think there may be an image of the ROM as a resource in the Spectactulator ZX Spectrum emulator in a DLL, that may be an easier way to get it, but I have to check it's actually the original AL2 ROM :) btw, it is SPO256 according to the datasheet. [[User:Executioner|Executioner]] 01:27, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::: I think Spectaculator uses prerecorded samples. —[[User:Stuart Brady|Stuart Brady]] 17:06, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::: It does, but it also has the ROM as a resource in the DLL. It's 2K, same as the real one. [[User:Executioner|Executioner]] 22:14, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::: Good news, everyone!  Joe Zbiciak has uploaded a dump of the AL2[http://spatula-city.org/~im14u2c/sp0256-al2/] — and he even has Microchip Technology's permission!  (I'm not sure if they would allow redistribution, though.) —[[User:Stuart Brady|Stuart Brady]] 23:26, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::::: BTW, are you ''sure'' that's the same ROM?  The µSpeech has its own 2K ROM (containing Z80 code). —[[User:Stuart Brady|Stuart Brady]] 03:18, 6 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::::: Yes, this is the correct ROM. I assume the Currah has a ROM to add functionality under BASIC etc. There may also be some other software for the SSA-1 for the CPC, maybe even a Z80 one to provide RSX's like |say,&amp;quot;hello&amp;quot;, can't remember. [[User:Executioner|Executioner]] 06:21, 8 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::::::: You ''assume'' so? — I thought I just said that it ''does'' have such a ROM! :)  I'm still not sure whether to believe you.  What's the MD5SUM of the ROM in Spectaculator?  Is it &amp;lt;tt&amp;gt;54db0ac274146f8c95f8fbd7bab62cdf&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;052f6af718337e35e76693723e1d73e3&amp;lt;/tt&amp;gt;, or is it something else? —[[User:Stuart Brady|Stuart Brady]] 20:37, 8 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::::::: Yes, I ''assume'' that's what the Z80 code is for, you didn't say what the Z80 was used for :) The md5 is not the same as either of those above, and the ROM does not appear to be Z80 code. It may well be encrypted, but I don't really care since I've got the official download now and Joe was also good enough to provide a disassembly to go along with it :) [[User:Executioner|Executioner]] 03:13, 10 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Rename ==&lt;br /&gt;
&lt;br /&gt;
I feel as if I should probably fix this each time I leave a comment on this page, so here goes.  Unless there are any objections, I'll rename the page to SP0256 and mention that it's often referred to as the &amp;quot;SPO256&amp;quot;.  (The datasheets certainly use an '0'.) —[[User:Stuart Brady|Stuart Brady]] 21:08, 8 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
: The ARCHER datasheet definitely uses an 'O'. The GI datasheet is not a particularly good scan, and the font doesn't distinguish between the '0' and the 'O'. Look at the word 'ROM' and compare that to 'SPO256A' at the top of the page, they look the same. The last two pages of the GI datasheet show the chip in the circuit diagrams with as 'SPO256', the 'O' is identical to the word 'OUT', and slightly different to the '0' where it says '10,11,13'. The chip I have does not have any other '0' or 'O' printed on it to compare. This would suggest that it is supposed to be the letter O. [[User:Executioner|Executioner]] 03:03, 10 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Were you looking at [[:Image:Sp0256al2 datasheet.pdf|this copy]] of the Archer datasheet?  If so, please do take a look at [http://support.radioshack.com/support_supplies/doc17/17517.htm these scans].  However, the GI datasheet would seem to be a more authoratative source.  Any chance of a link to that? :) —[[User:Stuart Brady|Stuart Brady]] 17:54, 10 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: Yes, I was looking at that, and now I see it's actually OCR'd. The GI datasheet is here [http://baec.tripod.com/datasheets/SPO256.pdf]. [[User:Executioner|Executioner]] 14:37, 11 October 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=19173</id>
		<title>Talk:SP0256</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=19173"/>
				<updated>2007-10-10T01:13:53Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* SPO256 internal phoneme ROM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Can anyone find or get a copy of the internal ROM from the SPO256AL2? I want to emulate it - [[User:Executioner|Executioner]] 12:39, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
: Hmmm... I can probably manage that, i got the chip! But how to read out the ROM data? Can a simple program on the CPC do that or do i have to plug it in a romboard to read the data? (Have to check the pin configs i guess) --[[User:CPCLER|CPCLER]] 12:52, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Is it an additional CPC OS rom? If yes, it's quite easy, I can send you a program for this. BTW, @CPCLER, please use the colon (:) at the beginning of your &amp;quot;talk&amp;quot;-text for correct formatting. -- [[User:Prodatron|Prodatron]] 13:46, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: (Sorry about the colons!!! New to this wiki stuff) No... I have uploaded some pictures of the SPO256 board, and there are clearly no additional ROM chips! so how to proceed, any way of reading the  rom data via the SPO256 chip?&lt;br /&gt;
&lt;br /&gt;
::: The software for the SSA1 has to be loaded from disc or tape (I will test this when i get a CPC up and running). I think the dk'tronics (also based on the SPO256) had at least the software on rom, dont know if it actually used the feature with a rom connected directly to the SPO256.&lt;br /&gt;
&lt;br /&gt;
== SPO256 internal phoneme ROM ==&lt;br /&gt;
&lt;br /&gt;
: No, this isn't a ROM for the CPC, it's the built-in phoneme ROM in the SPO256AL2, and it can only be read by using the serial output on the chip itself, which will require some hardware knowledge and the SPO datasheet. Yes, I do also have an SPO256 in my SSA-1, but no way to read it... Guess I'll have to desolder and pull the chip and connect it to my 8255 I/O board (no idea if that still works) :)&lt;br /&gt;
&lt;br /&gt;
:: I'm looking for this ROM, but can't find it anywhere.  Did you dump it?  (BTW, I think the correct title is &amp;quot;SP'''0'''256&amp;quot;.) —[[User:Stuart Brady|Stuart Brady]] 22:02, 1 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: Nah, haven't dumped it yet. That'd mean finding it, and finding the IO board, desoldering it, attaching it to the IO board somehow and then figuring out how to read the serial data... I think there may be an image of the ROM as a resource in the Spectactulator ZX Spectrum emulator in a DLL, that may be an easier way to get it, but I have to check it's actually the original AL2 ROM :) btw, it is SPO256 according to the datasheet. [[User:Executioner|Executioner]] 01:27, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::: I think Spectaculator uses prerecorded samples. —[[User:Stuart Brady|Stuart Brady]] 17:06, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::: It does, but it also has the ROM as a resource in the DLL. It's 2K, same as the real one. [[User:Executioner|Executioner]] 22:14, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::: Good news, everyone!  Joe Zbiciak has uploaded a dump of the AL2[http://spatula-city.org/~im14u2c/sp0256-al2/] — and he even has Microchip Technology's permission!  (I'm not sure if they would allow redistribution, though.) —[[User:Stuart Brady|Stuart Brady]] 23:26, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::::: BTW, are you ''sure'' that's the same ROM?  The µSpeech has its own 2K ROM (containing Z80 code). —[[User:Stuart Brady|Stuart Brady]] 03:18, 6 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::::: Yes, this is the correct ROM. I assume the Currah has a ROM to add functionality under BASIC etc. There may also be some other software for the SSA-1 for the CPC, maybe even a Z80 one to provide RSX's like |say,&amp;quot;hello&amp;quot;, can't remember. [[User:Executioner|Executioner]] 06:21, 8 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::::::: You ''assume'' so? — I thought I just said that it ''does'' have such a ROM! :)  I'm still not sure whether to believe you.  What's the MD5SUM of the ROM in Spectaculator?  Is it &amp;lt;tt&amp;gt;54db0ac274146f8c95f8fbd7bab62cdf&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;052f6af718337e35e76693723e1d73e3&amp;lt;/tt&amp;gt;, or is it something else? —[[User:Stuart Brady|Stuart Brady]] 20:37, 8 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::::::: Yes, I ''assume'' that's what the Z80 code is for, you didn't say what the Z80 was used for :) The md5 is not the same as either of those above, and the ROM does not appear to be Z80 code. It may well be encrypted, but I don't really care since I've got the official download now and Joe was also good enough to provide a disassembly to go along with it :) [[User:Executioner|Executioner]] 03:13, 10 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Rename ==&lt;br /&gt;
&lt;br /&gt;
I feel as if I should probably fix this each time I leave a comment on this page, so here goes.  Unless there are any objections, I'll rename the page to SP0256 and mention that it's often referred to as the &amp;quot;SPO256&amp;quot;.  (The datasheets certainly use an '0'.) —[[User:Stuart Brady|Stuart Brady]] 21:08, 8 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
: The ARCHER datasheet definitely uses an 'O'. The GI datasheet is not a particularly good scan, and the font doesn't distinguish between the '0' and the 'O'. Look at the word 'ROM' and compare that to 'SPO256A' at the top of the page, they look the same. The last two pages of the GI datasheet show the chip in the circuit diagrams with as 'SPO256', the 'O' is identical to the word 'OUT', and slightly different to the '0' where it says '10,11,13'. The chip I have does not have any other '0' or 'O' printed on it to compare. This would suggest that it is supposed to be the letter O.&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=19172</id>
		<title>Talk:SP0256</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=19172"/>
				<updated>2007-10-10T01:12:19Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* SPO256 internal phoneme ROM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Can anyone find or get a copy of the internal ROM from the SPO256AL2? I want to emulate it - [[User:Executioner|Executioner]] 12:39, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
: Hmmm... I can probably manage that, i got the chip! But how to read out the ROM data? Can a simple program on the CPC do that or do i have to plug it in a romboard to read the data? (Have to check the pin configs i guess) --[[User:CPCLER|CPCLER]] 12:52, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Is it an additional CPC OS rom? If yes, it's quite easy, I can send you a program for this. BTW, @CPCLER, please use the colon (:) at the beginning of your &amp;quot;talk&amp;quot;-text for correct formatting. -- [[User:Prodatron|Prodatron]] 13:46, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: (Sorry about the colons!!! New to this wiki stuff) No... I have uploaded some pictures of the SPO256 board, and there are clearly no additional ROM chips! so how to proceed, any way of reading the  rom data via the SPO256 chip?&lt;br /&gt;
&lt;br /&gt;
::: The software for the SSA1 has to be loaded from disc or tape (I will test this when i get a CPC up and running). I think the dk'tronics (also based on the SPO256) had at least the software on rom, dont know if it actually used the feature with a rom connected directly to the SPO256.&lt;br /&gt;
&lt;br /&gt;
== SPO256 internal phoneme ROM ==&lt;br /&gt;
&lt;br /&gt;
: No, this isn't a ROM for the CPC, it's the built-in phoneme ROM in the SPO256AL2, and it can only be read by using the serial output on the chip itself, which will require some hardware knowledge and the SPO datasheet. Yes, I do also have an SPO256 in my SSA-1, but no way to read it... Guess I'll have to desolder and pull the chip and connect it to my 8255 I/O board (no idea if that still works) :)&lt;br /&gt;
&lt;br /&gt;
:: I'm looking for this ROM, but can't find it anywhere.  Did you dump it?  (BTW, I think the correct title is &amp;quot;SP'''0'''256&amp;quot;.) —[[User:Stuart Brady|Stuart Brady]] 22:02, 1 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: Nah, haven't dumped it yet. That'd mean finding it, and finding the IO board, desoldering it, attaching it to the IO board somehow and then figuring out how to read the serial data... I think there may be an image of the ROM as a resource in the Spectactulator ZX Spectrum emulator in a DLL, that may be an easier way to get it, but I have to check it's actually the original AL2 ROM :) btw, it is SPO256 according to the datasheet. [[User:Executioner|Executioner]] 01:27, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::: I think Spectaculator uses prerecorded samples. —[[User:Stuart Brady|Stuart Brady]] 17:06, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::: It does, but it also has the ROM as a resource in the DLL. It's 2K, same as the real one. [[User:Executioner|Executioner]] 22:14, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::: Good news, everyone!  Joe Zbiciak has uploaded a dump of the AL2[http://spatula-city.org/~im14u2c/sp0256-al2/] — and he even has Microchip Technology's permission!  (I'm not sure if they would allow redistribution, though.) —[[User:Stuart Brady|Stuart Brady]] 23:26, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::::: BTW, are you ''sure'' that's the same ROM?  The µSpeech has its own 2K ROM (containing Z80 code). —[[User:Stuart Brady|Stuart Brady]] 03:18, 6 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::::: Yes, this is the correct ROM. I assume the Currah has a ROM to add functionality under BASIC etc. There may also be some other software for the SSA-1 for the CPC, maybe even a Z80 one to provide RSX's like |say,&amp;quot;hello&amp;quot;, can't remember. [[User:Executioner|Executioner]] 06:21, 8 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::::::: You ''assume'' so? — I thought I just said that it ''does'' have such a ROM! :)  I'm still not sure whether to believe you.  What's the MD5SUM of the ROM in Spectaculator?  Is it &amp;lt;tt&amp;gt;54db0ac274146f8c95f8fbd7bab62cdf&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;052f6af718337e35e76693723e1d73e3&amp;lt;/tt&amp;gt;, or is it something else? —[[User:Stuart Brady|Stuart Brady]] 20:37, 8 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::::::: Yes, I ''assume'' that's what the Z80 code is for, you didn't say what the Z80 was used for :) The md5 is not the same as either of those above, and the ROM does not appear to be Z80 code. It may well be encrypted, but I don't really care since I've got the official download now and Joe was also good enough to provide a disassembly to go along with it :)&lt;br /&gt;
&lt;br /&gt;
== Rename ==&lt;br /&gt;
&lt;br /&gt;
I feel as if I should probably fix this each time I leave a comment on this page, so here goes.  Unless there are any objections, I'll rename the page to SP0256 and mention that it's often referred to as the &amp;quot;SPO256&amp;quot;.  (The datasheets certainly use an '0'.) —[[User:Stuart Brady|Stuart Brady]] 21:08, 8 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
: The ARCHER datasheet definitely uses an 'O'. The GI datasheet is not a particularly good scan, and the font doesn't distinguish between the '0' and the 'O'. Look at the word 'ROM' and compare that to 'SPO256A' at the top of the page, they look the same. The last two pages of the GI datasheet show the chip in the circuit diagrams with as 'SPO256', the 'O' is identical to the word 'OUT', and slightly different to the '0' where it says '10,11,13'. The chip I have does not have any other '0' or 'O' printed on it to compare. This would suggest that it is supposed to be the letter O.&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=19171</id>
		<title>Talk:SP0256</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=19171"/>
				<updated>2007-10-10T01:03:50Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Rename */ I do object&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Can anyone find or get a copy of the internal ROM from the SPO256AL2? I want to emulate it - [[User:Executioner|Executioner]] 12:39, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
: Hmmm... I can probably manage that, i got the chip! But how to read out the ROM data? Can a simple program on the CPC do that or do i have to plug it in a romboard to read the data? (Have to check the pin configs i guess) --[[User:CPCLER|CPCLER]] 12:52, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Is it an additional CPC OS rom? If yes, it's quite easy, I can send you a program for this. BTW, @CPCLER, please use the colon (:) at the beginning of your &amp;quot;talk&amp;quot;-text for correct formatting. -- [[User:Prodatron|Prodatron]] 13:46, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: (Sorry about the colons!!! New to this wiki stuff) No... I have uploaded some pictures of the SPO256 board, and there are clearly no additional ROM chips! so how to proceed, any way of reading the  rom data via the SPO256 chip?&lt;br /&gt;
&lt;br /&gt;
::: The software for the SSA1 has to be loaded from disc or tape (I will test this when i get a CPC up and running). I think the dk'tronics (also based on the SPO256) had at least the software on rom, dont know if it actually used the feature with a rom connected directly to the SPO256.&lt;br /&gt;
&lt;br /&gt;
== SPO256 internal phoneme ROM ==&lt;br /&gt;
&lt;br /&gt;
: No, this isn't a ROM for the CPC, it's the built-in phoneme ROM in the SPO256AL2, and it can only be read by using the serial output on the chip itself, which will require some hardware knowledge and the SPO datasheet. Yes, I do also have an SPO256 in my SSA-1, but no way to read it... Guess I'll have to desolder and pull the chip and connect it to my 8255 I/O board (no idea if that still works) :)&lt;br /&gt;
&lt;br /&gt;
:: I'm looking for this ROM, but can't find it anywhere.  Did you dump it?  (BTW, I think the correct title is &amp;quot;SP'''0'''256&amp;quot;.) —[[User:Stuart Brady|Stuart Brady]] 22:02, 1 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: Nah, haven't dumped it yet. That'd mean finding it, and finding the IO board, desoldering it, attaching it to the IO board somehow and then figuring out how to read the serial data... I think there may be an image of the ROM as a resource in the Spectactulator ZX Spectrum emulator in a DLL, that may be an easier way to get it, but I have to check it's actually the original AL2 ROM :) btw, it is SPO256 according to the datasheet. [[User:Executioner|Executioner]] 01:27, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::: I think Spectaculator uses prerecorded samples. —[[User:Stuart Brady|Stuart Brady]] 17:06, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::: It does, but it also has the ROM as a resource in the DLL. It's 2K, same as the real one. [[User:Executioner|Executioner]] 22:14, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::: Good news, everyone!  Joe Zbiciak has uploaded a dump of the AL2[http://spatula-city.org/~im14u2c/sp0256-al2/] — and he even has Microchip Technology's permission!  (I'm not sure if they would allow redistribution, though.) —[[User:Stuart Brady|Stuart Brady]] 23:26, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::::: BTW, are you ''sure'' that's the same ROM?  The µSpeech has its own 2K ROM (containing Z80 code). —[[User:Stuart Brady|Stuart Brady]] 03:18, 6 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::::: Yes, this is the correct ROM. I assume the Currah has a ROM to add functionality under BASIC etc. There may also be some other software for the SSA-1 for the CPC, maybe even a Z80 one to provide RSX's like |say,&amp;quot;hello&amp;quot;, can't remember. [[User:Executioner|Executioner]] 06:21, 8 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::::::: You ''assume'' so? — I thought I just said that it ''does'' have such a ROM! :)  I'm still not sure whether to believe you.  What's the MD5SUM of the ROM in Spectaculator?  Is it &amp;lt;tt&amp;gt;54db0ac274146f8c95f8fbd7bab62cdf&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;052f6af718337e35e76693723e1d73e3&amp;lt;/tt&amp;gt;, or is it something else? —[[User:Stuart Brady|Stuart Brady]] 20:37, 8 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Rename ==&lt;br /&gt;
&lt;br /&gt;
I feel as if I should probably fix this each time I leave a comment on this page, so here goes.  Unless there are any objections, I'll rename the page to SP0256 and mention that it's often referred to as the &amp;quot;SPO256&amp;quot;.  (The datasheets certainly use an '0'.) —[[User:Stuart Brady|Stuart Brady]] 21:08, 8 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
: The ARCHER datasheet definitely uses an 'O'. The GI datasheet is not a particularly good scan, and the font doesn't distinguish between the '0' and the 'O'. Look at the word 'ROM' and compare that to 'SPO256A' at the top of the page, they look the same. The last two pages of the GI datasheet show the chip in the circuit diagrams with as 'SPO256', the 'O' is identical to the word 'OUT', and slightly different to the '0' where it says '10,11,13'. The chip I have does not have any other '0' or 'O' printed on it to compare. This would suggest that it is supposed to be the letter O.&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=19164</id>
		<title>Talk:SP0256</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=19164"/>
				<updated>2007-10-08T04:21:33Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* SPO256 internal phoneme ROM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Can anyone find or get a copy of the internal ROM from the SPO256AL2? I want to emulate it - [[User:Executioner|Executioner]] 12:39, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
: Hmmm... I can probably manage that, i got the chip! But how to read out the ROM data? Can a simple program on the CPC do that or do i have to plug it in a romboard to read the data? (Have to check the pin configs i guess) --[[User:CPCLER|CPCLER]] 12:52, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Is it an additional CPC OS rom? If yes, it's quite easy, I can send you a program for this. BTW, @CPCLER, please use the colon (:) at the beginning of your &amp;quot;talk&amp;quot;-text for correct formatting. -- [[User:Prodatron|Prodatron]] 13:46, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: (Sorry about the colons!!! New to this wiki stuff) No... I have uploaded some pictures of the SPO256 board, and there are clearly no additional ROM chips! so how to proceed, any way of reading the  rom data via the SPO256 chip?&lt;br /&gt;
&lt;br /&gt;
::: The software for the SSA1 has to be loaded from disc or tape (I will test this when i get a CPC up and running). I think the dk'tronics (also based on the SPO256) had at least the software on rom, dont know if it actually used the feature with a rom connected directly to the SPO256.&lt;br /&gt;
&lt;br /&gt;
== SPO256 internal phoneme ROM ==&lt;br /&gt;
&lt;br /&gt;
: No, this isn't a ROM for the CPC, it's the built-in phoneme ROM in the SPO256AL2, and it can only be read by using the serial output on the chip itself, which will require some hardware knowledge and the SPO datasheet. Yes, I do also have an SPO256 in my SSA-1, but no way to read it... Guess I'll have to desolder and pull the chip and connect it to my 8255 I/O board (no idea if that still works) :)&lt;br /&gt;
&lt;br /&gt;
:: I'm looking for this ROM, but can't find it anywhere.  Did you dump it?  (BTW, I think the correct title is &amp;quot;SP'''0'''256&amp;quot;.) —[[User:Stuart Brady|Stuart Brady]] 22:02, 1 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: Nah, haven't dumped it yet. That'd mean finding it, and finding the IO board, desoldering it, attaching it to the IO board somehow and then figuring out how to read the serial data... I think there may be an image of the ROM as a resource in the Spectactulator ZX Spectrum emulator in a DLL, that may be an easier way to get it, but I have to check it's actually the original AL2 ROM :) btw, it is SPO256 according to the datasheet. [[User:Executioner|Executioner]] 01:27, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::: I think Spectaculator uses prerecorded samples. —[[User:Stuart Brady|Stuart Brady]] 17:06, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::: It does, but it also has the ROM as a resource in the DLL. It's 2K, same as the real one. [[User:Executioner|Executioner]] 22:14, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::: Good news, everyone!  Joe Zbiciak has uploaded a dump of the AL2[http://spatula-city.org/~im14u2c/sp0256-al2/] — and he even has Microchip Technology's permission!  (I'm not sure if they would allow redistribution, though.) —[[User:Stuart Brady|Stuart Brady]] 23:26, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::::: BTW, are you ''sure'' that's the same ROM?  The µSpeech has its own 2K ROM (containing Z80 code). —[[User:Stuart Brady|Stuart Brady]] 03:18, 6 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::::: Yes, this is the correct ROM. I assume the Currah has a ROM to add functionality under BASIC etc. There may also be some other software for the SSA-1 for the CPC, maybe even a Z80 one to provide RSX's like |say,&amp;quot;hello&amp;quot;, can't remember. [[User:Executioner|Executioner]] 06:21, 8 October 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=19163</id>
		<title>Talk:SP0256</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=19163"/>
				<updated>2007-10-08T04:21:04Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* SPO256 internal phoneme ROM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Can anyone find or get a copy of the internal ROM from the SPO256AL2? I want to emulate it - [[User:Executioner|Executioner]] 12:39, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
: Hmmm... I can probably manage that, i got the chip! But how to read out the ROM data? Can a simple program on the CPC do that or do i have to plug it in a romboard to read the data? (Have to check the pin configs i guess) --[[User:CPCLER|CPCLER]] 12:52, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Is it an additional CPC OS rom? If yes, it's quite easy, I can send you a program for this. BTW, @CPCLER, please use the colon (:) at the beginning of your &amp;quot;talk&amp;quot;-text for correct formatting. -- [[User:Prodatron|Prodatron]] 13:46, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: (Sorry about the colons!!! New to this wiki stuff) No... I have uploaded some pictures of the SPO256 board, and there are clearly no additional ROM chips! so how to proceed, any way of reading the  rom data via the SPO256 chip?&lt;br /&gt;
&lt;br /&gt;
::: The software for the SSA1 has to be loaded from disc or tape (I will test this when i get a CPC up and running). I think the dk'tronics (also based on the SPO256) had at least the software on rom, dont know if it actually used the feature with a rom connected directly to the SPO256.&lt;br /&gt;
&lt;br /&gt;
== SPO256 internal phoneme ROM ==&lt;br /&gt;
&lt;br /&gt;
: No, this isn't a ROM for the CPC, it's the built-in phoneme ROM in the SPO256AL2, and it can only be read by using the serial output on the chip itself, which will require some hardware knowledge and the SPO datasheet. Yes, I do also have an SPO256 in my SSA-1, but no way to read it... Guess I'll have to desolder and pull the chip and connect it to my 8255 I/O board (no idea if that still works) :)&lt;br /&gt;
&lt;br /&gt;
:: I'm looking for this ROM, but can't find it anywhere.  Did you dump it?  (BTW, I think the correct title is &amp;quot;SP'''0'''256&amp;quot;.) —[[User:Stuart Brady|Stuart Brady]] 22:02, 1 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: Nah, haven't dumped it yet. That'd mean finding it, and finding the IO board, desoldering it, attaching it to the IO board somehow and then figuring out how to read the serial data... I think there may be an image of the ROM as a resource in the Spectactulator ZX Spectrum emulator in a DLL, that may be an easier way to get it, but I have to check it's actually the original AL2 ROM :) btw, it is SPO256 according to the datasheet. [[User:Executioner|Executioner]] 01:27, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::: I think Spectaculator uses prerecorded samples. —[[User:Stuart Brady|Stuart Brady]] 17:06, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::: It does, but it also has the ROM as a resource in the DLL. It's 2K, same as the real one. [[User:Executioner|Executioner]] 22:14, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::: Good news, everyone!  Joe Zbiciak has uploaded a dump of the AL2[http://spatula-city.org/~im14u2c/sp0256-al2/] — and he even has Microchip Technology's permission!  (I'm not sure if they would allow redistribution, though.) —[[User:Stuart Brady|Stuart Brady]] 23:26, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::::: BTW, are you ''sure'' that's the same ROM?  The µSpeech has its own 2K ROM (containing Z80 code). —[[User:Stuart Brady|Stuart Brady]] 03:18, 6 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::::::: Yes, this is the correct ROM. I assume the Currah has a ROM to add functionality under BASIC etc. There may also be some other software for the SSA-1 for the CPC, maybe even a Z80 one to provide RSX's like |say,&amp;quot;hello&amp;quot;, can't remember.&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=18992</id>
		<title>Talk:SP0256</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=18992"/>
				<updated>2007-10-03T20:14:41Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* SPO256 internal phoneme ROM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Can anyone find or get a copy of the internal ROM from the SPO256AL2? I want to emulate it - [[User:Executioner|Executioner]] 12:39, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
: Hmmm... I can probably manage that, i got the chip! But how to read out the ROM data? Can a simple program on the CPC do that or do i have to plug it in a romboard to read the data? (Have to check the pin configs i guess) --[[User:CPCLER|CPCLER]] 12:52, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Is it an additional CPC OS rom? If yes, it's quite easy, I can send you a program for this. BTW, @CPCLER, please use the colon (:) at the beginning of your &amp;quot;talk&amp;quot;-text for correct formatting. -- [[User:Prodatron|Prodatron]] 13:46, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: (Sorry about the colons!!! New to this wiki stuff) No... I have uploaded some pictures of the SPO256 board, and there are clearly no additional ROM chips! so how to proceed, any way of reading the  rom data via the SPO256 chip?&lt;br /&gt;
&lt;br /&gt;
::: The software for the SSA1 has to be loaded from disc or tape (I will test this when i get a CPC up and running). I think the dk'tronics (also based on the SPO256) had at least the software on rom, dont know if it actually used the feature with a rom connected directly to the SPO256.&lt;br /&gt;
&lt;br /&gt;
== SPO256 internal phoneme ROM ==&lt;br /&gt;
&lt;br /&gt;
: No, this isn't a ROM for the CPC, it's the built-in phoneme ROM in the SPO256AL2, and it can only be read by using the serial output on the chip itself, which will require some hardware knowledge and the SPO datasheet. Yes, I do also have an SPO256 in my SSA-1, but no way to read it... Guess I'll have to desolder and pull the chip and connect it to my 8255 I/O board (no idea if that still works) :)&lt;br /&gt;
&lt;br /&gt;
:: I'm looking for this ROM, but can't find it anywhere.  Did you dump it?  (BTW, I think the correct title is &amp;quot;SP'''0'''256&amp;quot;.) —[[User:Stuart Brady|Stuart Brady]] 22:02, 1 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: Nah, haven't dumped it yet. That'd mean finding it, and finding the IO board, desoldering it, attaching it to the IO board somehow and then figuring out how to read the serial data... I think there may be an image of the ROM as a resource in the Spectactulator ZX Spectrum emulator in a DLL, that may be an easier way to get it, but I have to check it's actually the original AL2 ROM :) btw, it is SPO256 according to the datasheet. [[User:Executioner|Executioner]] 01:27, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::: I think Spectaculator uses prerecorded samples. —[[User:Stuart Brady|Stuart Brady]] 17:06, 3 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::::: It does, but it also has the ROM as a resource in the DLL. It's 2K, same as the real one. [[User:Executioner|Executioner]] 22:14, 3 October 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=18990</id>
		<title>Talk:SP0256</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=18990"/>
				<updated>2007-10-02T23:30:47Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* SPO256 internal phoneme ROM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Can anyone find or get a copy of the internal ROM from the SPO256AL2? I want to emulate it - [[User:Executioner|Executioner]] 12:39, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
: Hmmm... I can probably manage that, i got the chip! But how to read out the ROM data? Can a simple program on the CPC do that or do i have to plug it in a romboard to read the data? (Have to check the pin configs i guess) --[[User:CPCLER|CPCLER]] 12:52, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Is it an additional CPC OS rom? If yes, it's quite easy, I can send you a program for this. BTW, @CPCLER, please use the colon (:) at the beginning of your &amp;quot;talk&amp;quot;-text for correct formatting. -- [[User:Prodatron|Prodatron]] 13:46, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: (Sorry about the colons!!! New to this wiki stuff) No... I have uploaded some pictures of the SPO256 board, and there are clearly no additional ROM chips! so how to proceed, any way of reading the  rom data via the SPO256 chip?&lt;br /&gt;
&lt;br /&gt;
::: The software for the SSA1 has to be loaded from disc or tape (I will test this when i get a CPC up and running). I think the dk'tronics (also based on the SPO256) had at least the software on rom, dont know if it actually used the feature with a rom connected directly to the SPO256.&lt;br /&gt;
&lt;br /&gt;
== SPO256 internal phoneme ROM ==&lt;br /&gt;
&lt;br /&gt;
: No, this isn't a ROM for the CPC, it's the built-in phoneme ROM in the SPO256AL2, and it can only be read by using the serial output on the chip itself, which will require some hardware knowledge and the SPO datasheet. Yes, I do also have an SPO256 in my SSA-1, but no way to read it... Guess I'll have to desolder and pull the chip and connect it to my 8255 I/O board (no idea if that still works) :)&lt;br /&gt;
&lt;br /&gt;
:: I'm looking for this ROM, but can't find it anywhere.  Did you dump it?  (BTW, I think the correct title is &amp;quot;SP'''0'''256&amp;quot;.) —[[User:Stuart Brady|Stuart Brady]] 22:02, 1 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: Nah, haven't dumped it yet. That'd mean finding it, and finding the IO board, desoldering it, attaching it to the IO board somehow and then figuring out how to read the serial data... I think there may be an image of the ROM as a resource in the Spectactulator ZX Spectrum emulator in a DLL, that may be an easier way to get it, but I have to check it's actually the original AL2 ROM :) btw, it is SPO256 according to the datasheet. [[User:Executioner|Executioner]] 01:27, 3 October 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=18989</id>
		<title>Talk:SP0256</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:SP0256&amp;diff=18989"/>
				<updated>2007-10-02T23:27:40Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* SPO256 internal phoneme ROM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Can anyone find or get a copy of the internal ROM from the SPO256AL2? I want to emulate it - [[User:Executioner|Executioner]] 12:39, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
: Hmmm... I can probably manage that, i got the chip! But how to read out the ROM data? Can a simple program on the CPC do that or do i have to plug it in a romboard to read the data? (Have to check the pin configs i guess) --[[User:CPCLER|CPCLER]] 12:52, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Is it an additional CPC OS rom? If yes, it's quite easy, I can send you a program for this. BTW, @CPCLER, please use the colon (:) at the beginning of your &amp;quot;talk&amp;quot;-text for correct formatting. -- [[User:Prodatron|Prodatron]] 13:46, 1 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: (Sorry about the colons!!! New to this wiki stuff) No... I have uploaded some pictures of the SPO256 board, and there are clearly no additional ROM chips! so how to proceed, any way of reading the  rom data via the SPO256 chip?&lt;br /&gt;
&lt;br /&gt;
::: The software for the SSA1 has to be loaded from disc or tape (I will test this when i get a CPC up and running). I think the dk'tronics (also based on the SPO256) had at least the software on rom, dont know if it actually used the feature with a rom connected directly to the SPO256.&lt;br /&gt;
&lt;br /&gt;
== SPO256 internal phoneme ROM ==&lt;br /&gt;
&lt;br /&gt;
: No, this isn't a ROM for the CPC, it's the built-in phoneme ROM in the SPO256AL2, and it can only be read by using the serial output on the chip itself, which will require some hardware knowledge and the SPO datasheet. Yes, I do also have an SPO256 in my SSA-1, but no way to read it... Guess I'll have to desolder and pull the chip and connect it to my 8255 I/O board (no idea if that still works) :)&lt;br /&gt;
&lt;br /&gt;
:: I'm looking for this ROM, but can't find it anywhere.  Did you dump it?  (BTW, I think the correct title is &amp;quot;SP'''0'''256&amp;quot;.) —[[User:Stuart Brady|Stuart Brady]] 22:02, 1 October 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
::: Nah, haven't dumped it yet. That'd mean finding it, and finding the IO board, desoldering it, attaching it to the IO board somehow and then figuring out how to read the serial data... I think there may be an image of the ROM as a resource in the Klive ZX Spectrum emulator executable, that may be an easier way to get it :) btw, it is SPO256 according to the datasheet. [[User:Executioner|Executioner]] 01:27, 3 October 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Programming:Display_and_update_Scores&amp;diff=18807</id>
		<title>Programming:Display and update Scores</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:Display_and_update_Scores&amp;diff=18807"/>
				<updated>2007-09-21T04:18:37Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: Finished the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Methods for Storing, Displaying and Updating Scores ==&lt;br /&gt;
&lt;br /&gt;
There are a number of methods for storing a Score in memory, here are a few examples:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Single Word ===&lt;br /&gt;
This is the simplest and smallest method for storing the score in memory, but it has a couple of disadvantages over some other methods. It can only hold a score up to 65535 (although you can add an extra '0' or two on the display to make that 655350 or 6553500), converting it to digits for display requires a relatively slow algorithm, and adding extra lives every 10000 points for example can take a complex routine. The advantage of using a straight Word is that the maths required to add points to the score is very simple and fast.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score dw 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add some points (in BC):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To display the score requires converting to a decimal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,score&lt;br /&gt;
ld bc,-10000&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-1000&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-100&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-10&lt;br /&gt;
call show_digit&lt;br /&gt;
ld a,l&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char&lt;br /&gt;
&lt;br /&gt;
.show_digit&lt;br /&gt;
ld a,'0' - 1&lt;br /&gt;
.inc_digit&lt;br /&gt;
inc a&lt;br /&gt;
add hl,bc&lt;br /&gt;
jr nc,inc_digit&lt;br /&gt;
or a&lt;br /&gt;
sbc hl,bc&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char	; This assumes the show_char routine doesn't corrupt HL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Checking for every 10000 points is complicated, this would normally done in the add_score routine, and I'm not going to write the code. It would however, be quite simple to add an extra life every multiple of 256 units (eg. 10240 points) by checking the most significant byte. eg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld a,h&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
sub h&lt;br /&gt;
cp 2&lt;br /&gt;
ret c&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Double Word ===&lt;br /&gt;
Like the above method, this provides a simple and efficient way to store and add points, but the routine required to convert the number to decimal for display is even more difficult, as is the extra lives every 10000 points.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add BC points to the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret nc&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
inc hl&lt;br /&gt;
ld (score + 2),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is much more tricky since it involves a lot of DWord subtractions etc. Most Z80 assemblers (including WinAPE) can't handle DWord values, so you need to get your calculator out to figure out what the values are to subtract for successive digits. The score can go as high as 4294967295, but I wouldn't recommend doing the maths for all possible digits. The code to display a DWord value is too complicated for this document.&lt;br /&gt;
&lt;br /&gt;
=== A Single BCD Word ===&lt;br /&gt;
This is similar to the above method, but the score is treated as Binary Coded Decimal. It's main disadvantage is that it can hold even less values than the single Word, restricting the score to 10000 possible combinations (one again with extra zeroes if required). Depending on the type of game and difficulty, this could be a good method to use. It's easy to store in memory and pass around, displaying and adding points are all relatively easy.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score is exactly the same as for a Single Word:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score dw 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Adding BC points is also fairly straightforward (here with the extra life check every 1000 units):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_BC&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld d,h&lt;br /&gt;
ld a,l&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc b&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score),hl&lt;br /&gt;
sub d&lt;br /&gt;
cp #10&lt;br /&gt;
ret c&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And the routine to display the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
ld a,h&lt;br /&gt;
call bcd_a&lt;br /&gt;
ld a,l&lt;br /&gt;
.bcd_a&lt;br /&gt;
ld h,a&lt;br /&gt;
rra:rra:rra:rra&lt;br /&gt;
and #0f&lt;br /&gt;
add '0'&lt;br /&gt;
call show_char&lt;br /&gt;
ld a,h&lt;br /&gt;
and #0f&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Double BCD Word ===&lt;br /&gt;
This is actually one of the best methods of storing and displaying a score since the maths and display methods remain fairly simple, and your score can now hold up to 8 digits. Luckily the Z80 has just enough fast 16 bit registers (ie. Non-index registers) to be able to handle all the things you require.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add BC points to the score (here with the extra life check every 10000 units):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld a,l&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc b&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret nc&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
ld a,l&lt;br /&gt;
add 1&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc 0&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score + 2),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is relatively simple too, using the same routine as above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
call bcd_hl&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiple BCD Bytes ===&lt;br /&gt;
This is very similar to the above method, but the values are stored and manipulated in a slightly different way. With this method, you can determine exactly how many digits you require. Maths is pretty straightforward, as is extra lives and display. One advantage this method has is that if you want to add 100 to the score, you don't have to add the two zeroes since you can start at the second BCD digit. With this method, you can store the score either little-endian (least significant bytes first) or big-endian. Big-endian has the advantage that you can read the score in a memory editor left-to-right. eg. 1234500 points is displayed as 01 23 45 00. This can make debugging easier.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score (6 digits):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add C points to the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_c&lt;br /&gt;
ld b,2		; This is the number of score bytes - 1&lt;br /&gt;
ld hl,score + 2&lt;br /&gt;
.add_part&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld (hl),a&lt;br /&gt;
ret nc&lt;br /&gt;
.add_loop&lt;br /&gt;
dec hl&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
adc 0&lt;br /&gt;
daa&lt;br /&gt;
ld (hl),a&lt;br /&gt;
djnz add_loop&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is relatively simple too, using the same routine as above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,score&lt;br /&gt;
ld b,3&lt;br /&gt;
.show_loop&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
inc hl&lt;br /&gt;
call bcd_a&lt;br /&gt;
djnz show_loop&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== One Byte per Digit ===&lt;br /&gt;
This is one of the simplest methods of storing and displaying scores. Its main disadvantages are that it uses slightly more memory and can't usually be held in registers, so must be copied around (eg. for high score tables). Its main advantages are that the scores are easy to display, update and can be easily read in a memory editor.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score (6 digits):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add a value to the score, you usually decide which digit you wish to add to, then start at that digit, in this routine, B holds the value to add, C is the digit number.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_b_c&lt;br /&gt;
ld a,b&lt;br /&gt;
ld hl,score - 2560&lt;br /&gt;
ld b,10&lt;br /&gt;
add hl,bc&lt;br /&gt;
add (hl)&lt;br /&gt;
ld (hl),a&lt;br /&gt;
sub b&lt;br /&gt;
ret c&lt;br /&gt;
ld (hl),a&lt;br /&gt;
inc c&lt;br /&gt;
.add_loop&lt;br /&gt;
dec c&lt;br /&gt;
ret z&lt;br /&gt;
dec hl		;; You can test the value in C here to determine when to increment lives (eg. ld a,c:cp 2:call z,inc_lives)&lt;br /&gt;
inc (hl)&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
sub b&lt;br /&gt;
ret nz&lt;br /&gt;
ld (hl),a&lt;br /&gt;
jr add_loop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is really easy. All you have to do is add the value of the '0' character to each digit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,score&lt;br /&gt;
ld b,6&lt;br /&gt;
.show_loop&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
inc hl&lt;br /&gt;
add '0'&lt;br /&gt;
call show_char&lt;br /&gt;
djnz show_loop&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== One character per digit ===&lt;br /&gt;
This method is identical to the one above, but you actually store the character representation of each digit, meaning you don't have to add the '0' value to each digit for display. In this case, you could use a generic string display routine to show the score. In this example I'm using a zero terminated string.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score db '000000',0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This add routine can only increment a particular digit, simplifying it somewhat (eg. Add 1, 10, 100, 1000 to the score). L holds the offset. I've also used another trick here, by assuming the score is page-aligned.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.inc_score&lt;br /&gt;
ld h,score / 256&lt;br /&gt;
.next_digit&lt;br /&gt;
inc (hl)&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
cp '9' + 1&lt;br /&gt;
ret nz&lt;br /&gt;
ld (hl),'0'&lt;br /&gt;
dec l		; You can test the value in L here to determine when to increment lives (eg. ld a,l:cp 2:call z,inc_lives)&lt;br /&gt;
jp p,next_digit&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And the routine to display the score is a simple zero terminated string printing routine, just call it with HL pointing to &amp;lt;b&amp;gt;score&amp;lt;/b&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.print_hl&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
inc hl&lt;br /&gt;
or a&lt;br /&gt;
ret z&lt;br /&gt;
call show_char&lt;br /&gt;
jr print_hl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Some More Information ==&lt;br /&gt;
Each of these routines has its advantages and disadvantages, and it usually depends on the type of game you're writing or your own preferences which one you pick to use. A few questions you should consider before deciding which routines to use are:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;What's the maximum score in my game, or how big would you like the score before it clocks over?&lt;br /&gt;
&amp;lt;li&amp;gt;How many times in a cycle (eg. frame) does the score get incremented?&lt;br /&gt;
&amp;lt;li&amp;gt;Will the score be redisplayed each time it's updated, once every cycle, or only rarely (eg. in between turns)?&lt;br /&gt;
&amp;lt;li&amp;gt;How fast is the character printing routine?&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Is there going to be a high score shown or a high score table in the game?&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Depending on the answers to these questions you should be able to pick the best routine. For example, it's almost impossible in Frogger to get past 20,000 points, and the score only updates in multiples of 10 points so for this the Single BCD Word method was used with an extra '0' appended to the end. The score would clock after 99,990 points. It's also easy with this method to compare it with the high score each time points are added. Frogger displays both the current player's score and the high score every frame using a very fast character printing routine.&lt;br /&gt;
&lt;br /&gt;
[[User:Executioner|Executioner]] 06:18, 21 September 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Programming:Display_and_update_Scores&amp;diff=18806</id>
		<title>Programming:Display and update Scores</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:Display_and_update_Scores&amp;diff=18806"/>
				<updated>2007-09-20T23:33:11Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Multiple BCD Bytes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Methods for Storing Scores in Memory ==&lt;br /&gt;
&lt;br /&gt;
There are a number of methods for storing a Score in memory, here are a few examples:&amp;lt;br&amp;gt;&lt;br /&gt;
=== A Single Word ===&lt;br /&gt;
This is the simplest and smallest method for storing the score in memory, but it has a couple of disadvantages over some other methods. It can only hold a score up to 65535 (although you can add an extra '0' or two on the display to make that 655350 or 6553500), converting it to digits for display requires a relatively slow algorithm, and adding extra lives every 10000 points for example can take a complex routine. The advantage of using a straight Word is that the maths required to add points to the score is very simple and fast.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score dw 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add some points (in BC):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To display the score requires converting to a decimal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,score&lt;br /&gt;
ld bc,-10000&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-1000&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-100&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-10&lt;br /&gt;
call show_digit&lt;br /&gt;
ld a,l&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char&lt;br /&gt;
&lt;br /&gt;
.show_digit&lt;br /&gt;
ld a,'0' - 1&lt;br /&gt;
.inc_digit&lt;br /&gt;
inc a&lt;br /&gt;
add hl,bc&lt;br /&gt;
jr nc,inc_digit&lt;br /&gt;
or a&lt;br /&gt;
sbc hl,bc&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char	; This assumes the show_char routine doesn't corrupt HL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Checking for every 10000 points is complicated, this would normally done in the add_score routine, and I'm not going to write the code. It would however, be quite simple to add an extra life every multiple of 256 units (eg. 10240 points) by checking the most significant byte. eg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld a,h&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
sub h&lt;br /&gt;
cp 2&lt;br /&gt;
ret c&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Double Word ===&lt;br /&gt;
Like the above method, this provides a simple and efficient way to store and add points, but the routine required to convert the number to decimal for display is even more difficult, as is the extra lives every 10000 points.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add BC points to the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret nc&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
inc hl&lt;br /&gt;
ld (score + 2),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is much more tricky since it involves a lot of DWord subtractions etc. Most Z80 assemblers (including WinAPE) can't handle DWord values, so you need to get your calculator out to figure out what the values are to subtract for successive digits. The score can go as high as 4294967295, but I wouldn't recommend doing the maths for all possible digits. The code to display a DWord value is too complicated for this document.&lt;br /&gt;
&lt;br /&gt;
=== A Single BCD Word ===&lt;br /&gt;
This is similar to the above method, but the score is treated as Binary Coded Decimal. It's main disadvantage is that it can hold even less values than the single Word, restricting the score to 10000 possible combinations (one again with extra zeroes if required). Depending on the type of game and difficulty, this could be a good method to use. It's easy to store in memory and pass around, displaying and adding points are all relatively easy.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score is exactly the same as for a Single Word:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score dw 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Adding BC points is also fairly straightforward (here with the extra life check every 1000 units):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_BC&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld d,h&lt;br /&gt;
ld a,l&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc b&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score),hl&lt;br /&gt;
sub d&lt;br /&gt;
cp #10&lt;br /&gt;
ret c&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And the routine to display the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
ld a,h&lt;br /&gt;
call bcd_a&lt;br /&gt;
ld a,l&lt;br /&gt;
.bcd_a&lt;br /&gt;
ld h,a&lt;br /&gt;
rra:rra:rra:rra&lt;br /&gt;
and #0f&lt;br /&gt;
add '0'&lt;br /&gt;
call show_char&lt;br /&gt;
ld a,h&lt;br /&gt;
and #0f&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Double BCD Word ===&lt;br /&gt;
This is actually one of the best methods of storing and displaying a score since the maths and display methods remain fairly simple, and your score can now hold up to 8 digits. Luckily the Z80 has just enough fast 16 bit registers (ie. Non-index registers) to be able to handle all the things you require.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add BC points to the score (here with the extra life check every 10000 units):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld a,l&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc b&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret nc&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
ld a,l&lt;br /&gt;
add 1&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc 0&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score + 2),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is relatively simple too, using the same routine as above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
call bcd_hl&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiple BCD Bytes ===&lt;br /&gt;
This is very similar to the above method, but the values are stored and manipulated in a slightly different way. With this method, you can determine exactly how many digits you require. Maths is pretty straightforward, as is extra lives and display. One advantage this method has is that if you want to add 100 to the score, you don't have to add the two zeroes since you can start at the second BCD digit. With this method, you can store the score either little-endian (least significant bytes first) or big-endian. Big-endian has the advantage that you can read the score in a memory editor left-to-right. eg. 1234500 points is displayed as 01 23 45 00. This can make debugging easier.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score (6 digits):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add C points to the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_c&lt;br /&gt;
ld b,2		; This is the number of score bytes - 1&lt;br /&gt;
ld hl,score + 2&lt;br /&gt;
.add_part&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld (hl),a&lt;br /&gt;
ret nc&lt;br /&gt;
.add_loop&lt;br /&gt;
dec hl&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
adc 0&lt;br /&gt;
daa&lt;br /&gt;
ld (hl),a&lt;br /&gt;
djnz add_loop&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is relatively simple too, using the same routine as above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,score&lt;br /&gt;
ld b,3&lt;br /&gt;
.show_loop&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
inc hl&lt;br /&gt;
call bcd_a&lt;br /&gt;
djnz show_loop&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More to come...&lt;br /&gt;
&lt;br /&gt;
[[User:Executioner|Executioner]] 01:27, 21 September 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Programming:Display_and_update_Scores&amp;diff=18805</id>
		<title>Programming:Display and update Scores</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:Display_and_update_Scores&amp;diff=18805"/>
				<updated>2007-09-20T23:32:15Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Multiple BCD Bytes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Methods for Storing Scores in Memory ==&lt;br /&gt;
&lt;br /&gt;
There are a number of methods for storing a Score in memory, here are a few examples:&amp;lt;br&amp;gt;&lt;br /&gt;
=== A Single Word ===&lt;br /&gt;
This is the simplest and smallest method for storing the score in memory, but it has a couple of disadvantages over some other methods. It can only hold a score up to 65535 (although you can add an extra '0' or two on the display to make that 655350 or 6553500), converting it to digits for display requires a relatively slow algorithm, and adding extra lives every 10000 points for example can take a complex routine. The advantage of using a straight Word is that the maths required to add points to the score is very simple and fast.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score dw 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add some points (in BC):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To display the score requires converting to a decimal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,score&lt;br /&gt;
ld bc,-10000&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-1000&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-100&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-10&lt;br /&gt;
call show_digit&lt;br /&gt;
ld a,l&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char&lt;br /&gt;
&lt;br /&gt;
.show_digit&lt;br /&gt;
ld a,'0' - 1&lt;br /&gt;
.inc_digit&lt;br /&gt;
inc a&lt;br /&gt;
add hl,bc&lt;br /&gt;
jr nc,inc_digit&lt;br /&gt;
or a&lt;br /&gt;
sbc hl,bc&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char	; This assumes the show_char routine doesn't corrupt HL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Checking for every 10000 points is complicated, this would normally done in the add_score routine, and I'm not going to write the code. It would however, be quite simple to add an extra life every multiple of 256 units (eg. 10240 points) by checking the most significant byte. eg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld a,h&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
sub h&lt;br /&gt;
cp 2&lt;br /&gt;
ret c&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Double Word ===&lt;br /&gt;
Like the above method, this provides a simple and efficient way to store and add points, but the routine required to convert the number to decimal for display is even more difficult, as is the extra lives every 10000 points.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add BC points to the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret nc&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
inc hl&lt;br /&gt;
ld (score + 2),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is much more tricky since it involves a lot of DWord subtractions etc. Most Z80 assemblers (including WinAPE) can't handle DWord values, so you need to get your calculator out to figure out what the values are to subtract for successive digits. The score can go as high as 4294967295, but I wouldn't recommend doing the maths for all possible digits. The code to display a DWord value is too complicated for this document.&lt;br /&gt;
&lt;br /&gt;
=== A Single BCD Word ===&lt;br /&gt;
This is similar to the above method, but the score is treated as Binary Coded Decimal. It's main disadvantage is that it can hold even less values than the single Word, restricting the score to 10000 possible combinations (one again with extra zeroes if required). Depending on the type of game and difficulty, this could be a good method to use. It's easy to store in memory and pass around, displaying and adding points are all relatively easy.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score is exactly the same as for a Single Word:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score dw 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Adding BC points is also fairly straightforward (here with the extra life check every 1000 units):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_BC&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld d,h&lt;br /&gt;
ld a,l&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc b&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score),hl&lt;br /&gt;
sub d&lt;br /&gt;
cp #10&lt;br /&gt;
ret c&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And the routine to display the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
ld a,h&lt;br /&gt;
call bcd_a&lt;br /&gt;
ld a,l&lt;br /&gt;
.bcd_a&lt;br /&gt;
ld h,a&lt;br /&gt;
rra:rra:rra:rra&lt;br /&gt;
and #0f&lt;br /&gt;
add '0'&lt;br /&gt;
call show_char&lt;br /&gt;
ld a,h&lt;br /&gt;
and #0f&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Double BCD Word ===&lt;br /&gt;
This is actually one of the best methods of storing and displaying a score since the maths and display methods remain fairly simple, and your score can now hold up to 8 digits. Luckily the Z80 has just enough fast 16 bit registers (ie. Non-index registers) to be able to handle all the things you require.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add BC points to the score (here with the extra life check every 10000 units):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld a,l&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc b&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret nc&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
ld a,l&lt;br /&gt;
add 1&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc 0&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score + 2),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is relatively simple too, using the same routine as above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
call bcd_hl&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiple BCD Bytes ===&lt;br /&gt;
This is very similar to the above method, but the values are stored and manipulated in a slightly different way. With this method, you can determine exactly how many digits you require. Maths is pretty straightforward, as is extra lives and display. One advantage this method has is that if you want to add 100 to the score, you don't have to add the two zeroes since you can start at the second BCD digit. With this method, you can store the score either little-endian (least significant bytes first) or big-endian. Big-endian has the advantage that you can read the score in a memory editor left-to-right. eg. 1234500 points is displayed as 01 23 45 00. This can make debugging easier.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score (6 digits):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add C points to the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ld b,2		; This is the number of score bytes - 1&lt;br /&gt;
.add_part&lt;br /&gt;
ld hl,score + 2&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld (hl),a&lt;br /&gt;
ret nc&lt;br /&gt;
.add_loop&lt;br /&gt;
dec hl&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
adc 0&lt;br /&gt;
daa&lt;br /&gt;
ld (hl),a&lt;br /&gt;
djnz add_loop&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is relatively simple too, using the same routine as above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,score&lt;br /&gt;
ld b,3&lt;br /&gt;
.show_loop&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
inc hl&lt;br /&gt;
call bcd_a&lt;br /&gt;
djnz show_loop&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More to come...&lt;br /&gt;
&lt;br /&gt;
[[User:Executioner|Executioner]] 01:27, 21 September 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Programming:Display_and_update_Scores&amp;diff=18804</id>
		<title>Programming:Display and update Scores</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:Display_and_update_Scores&amp;diff=18804"/>
				<updated>2007-09-20T23:31:30Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Multiple BCD Bytes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Methods for Storing Scores in Memory ==&lt;br /&gt;
&lt;br /&gt;
There are a number of methods for storing a Score in memory, here are a few examples:&amp;lt;br&amp;gt;&lt;br /&gt;
=== A Single Word ===&lt;br /&gt;
This is the simplest and smallest method for storing the score in memory, but it has a couple of disadvantages over some other methods. It can only hold a score up to 65535 (although you can add an extra '0' or two on the display to make that 655350 or 6553500), converting it to digits for display requires a relatively slow algorithm, and adding extra lives every 10000 points for example can take a complex routine. The advantage of using a straight Word is that the maths required to add points to the score is very simple and fast.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score dw 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add some points (in BC):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To display the score requires converting to a decimal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,score&lt;br /&gt;
ld bc,-10000&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-1000&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-100&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-10&lt;br /&gt;
call show_digit&lt;br /&gt;
ld a,l&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char&lt;br /&gt;
&lt;br /&gt;
.show_digit&lt;br /&gt;
ld a,'0' - 1&lt;br /&gt;
.inc_digit&lt;br /&gt;
inc a&lt;br /&gt;
add hl,bc&lt;br /&gt;
jr nc,inc_digit&lt;br /&gt;
or a&lt;br /&gt;
sbc hl,bc&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char	; This assumes the show_char routine doesn't corrupt HL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Checking for every 10000 points is complicated, this would normally done in the add_score routine, and I'm not going to write the code. It would however, be quite simple to add an extra life every multiple of 256 units (eg. 10240 points) by checking the most significant byte. eg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld a,h&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
sub h&lt;br /&gt;
cp 2&lt;br /&gt;
ret c&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Double Word ===&lt;br /&gt;
Like the above method, this provides a simple and efficient way to store and add points, but the routine required to convert the number to decimal for display is even more difficult, as is the extra lives every 10000 points.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add BC points to the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret nc&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
inc hl&lt;br /&gt;
ld (score + 2),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is much more tricky since it involves a lot of DWord subtractions etc. Most Z80 assemblers (including WinAPE) can't handle DWord values, so you need to get your calculator out to figure out what the values are to subtract for successive digits. The score can go as high as 4294967295, but I wouldn't recommend doing the maths for all possible digits. The code to display a DWord value is too complicated for this document.&lt;br /&gt;
&lt;br /&gt;
=== A Single BCD Word ===&lt;br /&gt;
This is similar to the above method, but the score is treated as Binary Coded Decimal. It's main disadvantage is that it can hold even less values than the single Word, restricting the score to 10000 possible combinations (one again with extra zeroes if required). Depending on the type of game and difficulty, this could be a good method to use. It's easy to store in memory and pass around, displaying and adding points are all relatively easy.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score is exactly the same as for a Single Word:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score dw 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Adding BC points is also fairly straightforward (here with the extra life check every 1000 units):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_BC&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld d,h&lt;br /&gt;
ld a,l&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc b&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score),hl&lt;br /&gt;
sub d&lt;br /&gt;
cp #10&lt;br /&gt;
ret c&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And the routine to display the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
ld a,h&lt;br /&gt;
call bcd_a&lt;br /&gt;
ld a,l&lt;br /&gt;
.bcd_a&lt;br /&gt;
ld h,a&lt;br /&gt;
rra:rra:rra:rra&lt;br /&gt;
and #0f&lt;br /&gt;
add '0'&lt;br /&gt;
call show_char&lt;br /&gt;
ld a,h&lt;br /&gt;
and #0f&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Double BCD Word ===&lt;br /&gt;
This is actually one of the best methods of storing and displaying a score since the maths and display methods remain fairly simple, and your score can now hold up to 8 digits. Luckily the Z80 has just enough fast 16 bit registers (ie. Non-index registers) to be able to handle all the things you require.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add BC points to the score (here with the extra life check every 10000 units):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld a,l&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc b&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret nc&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
ld a,l&lt;br /&gt;
add 1&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc 0&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score + 2),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is relatively simple too, using the same routine as above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
call bcd_hl&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiple BCD Bytes ===&lt;br /&gt;
This is very similar to the above method, but the values are stored and manipulated in a slightly different way. With this method, you can determine exactly how many digits you require. Maths is pretty straightforward, as is extra lives and display. One advantage this method has is that if you want to add 100 to the score, you don't have to add the two zeroes since you can start at the second BCD digit. With this method, you can store the score either little-endian (least significant bytes first) or big-endian. Big-endian has the advantage that you can read the score in a memory editor left-to-right. eg. 1234500 points is displayed as 01 23 45 00. This can make debugging easier.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score (6 digits):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add C points to the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ld b,3&lt;br /&gt;
.add_part&lt;br /&gt;
ld hl,score + 2&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld (hl),a&lt;br /&gt;
ret nc&lt;br /&gt;
.add_loop&lt;br /&gt;
dec hl&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
adc 0&lt;br /&gt;
daa&lt;br /&gt;
ld (hl),a&lt;br /&gt;
djnz add_loop&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is relatively simple too, using the same routine as above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,score&lt;br /&gt;
ld b,3&lt;br /&gt;
.show_loop&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
inc hl&lt;br /&gt;
call bcd_a&lt;br /&gt;
djnz show_loop&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More to come...&lt;br /&gt;
&lt;br /&gt;
[[User:Executioner|Executioner]] 01:27, 21 September 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Programming:Display_and_update_Scores&amp;diff=18803</id>
		<title>Programming:Display and update Scores</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:Display_and_update_Scores&amp;diff=18803"/>
				<updated>2007-09-20T23:30:15Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Multiple BCD Bytes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Methods for Storing Scores in Memory ==&lt;br /&gt;
&lt;br /&gt;
There are a number of methods for storing a Score in memory, here are a few examples:&amp;lt;br&amp;gt;&lt;br /&gt;
=== A Single Word ===&lt;br /&gt;
This is the simplest and smallest method for storing the score in memory, but it has a couple of disadvantages over some other methods. It can only hold a score up to 65535 (although you can add an extra '0' or two on the display to make that 655350 or 6553500), converting it to digits for display requires a relatively slow algorithm, and adding extra lives every 10000 points for example can take a complex routine. The advantage of using a straight Word is that the maths required to add points to the score is very simple and fast.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score dw 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add some points (in BC):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To display the score requires converting to a decimal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,score&lt;br /&gt;
ld bc,-10000&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-1000&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-100&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-10&lt;br /&gt;
call show_digit&lt;br /&gt;
ld a,l&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char&lt;br /&gt;
&lt;br /&gt;
.show_digit&lt;br /&gt;
ld a,'0' - 1&lt;br /&gt;
.inc_digit&lt;br /&gt;
inc a&lt;br /&gt;
add hl,bc&lt;br /&gt;
jr nc,inc_digit&lt;br /&gt;
or a&lt;br /&gt;
sbc hl,bc&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char	; This assumes the show_char routine doesn't corrupt HL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Checking for every 10000 points is complicated, this would normally done in the add_score routine, and I'm not going to write the code. It would however, be quite simple to add an extra life every multiple of 256 units (eg. 10240 points) by checking the most significant byte. eg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld a,h&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
sub h&lt;br /&gt;
cp 2&lt;br /&gt;
ret c&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Double Word ===&lt;br /&gt;
Like the above method, this provides a simple and efficient way to store and add points, but the routine required to convert the number to decimal for display is even more difficult, as is the extra lives every 10000 points.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add BC points to the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret nc&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
inc hl&lt;br /&gt;
ld (score + 2),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is much more tricky since it involves a lot of DWord subtractions etc. Most Z80 assemblers (including WinAPE) can't handle DWord values, so you need to get your calculator out to figure out what the values are to subtract for successive digits. The score can go as high as 4294967295, but I wouldn't recommend doing the maths for all possible digits. The code to display a DWord value is too complicated for this document.&lt;br /&gt;
&lt;br /&gt;
=== A Single BCD Word ===&lt;br /&gt;
This is similar to the above method, but the score is treated as Binary Coded Decimal. It's main disadvantage is that it can hold even less values than the single Word, restricting the score to 10000 possible combinations (one again with extra zeroes if required). Depending on the type of game and difficulty, this could be a good method to use. It's easy to store in memory and pass around, displaying and adding points are all relatively easy.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score is exactly the same as for a Single Word:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score dw 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Adding BC points is also fairly straightforward (here with the extra life check every 1000 units):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_BC&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld d,h&lt;br /&gt;
ld a,l&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc b&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score),hl&lt;br /&gt;
sub d&lt;br /&gt;
cp #10&lt;br /&gt;
ret c&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And the routine to display the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
ld a,h&lt;br /&gt;
call bcd_a&lt;br /&gt;
ld a,l&lt;br /&gt;
.bcd_a&lt;br /&gt;
ld h,a&lt;br /&gt;
rra:rra:rra:rra&lt;br /&gt;
and #0f&lt;br /&gt;
add '0'&lt;br /&gt;
call show_char&lt;br /&gt;
ld a,h&lt;br /&gt;
and #0f&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Double BCD Word ===&lt;br /&gt;
This is actually one of the best methods of storing and displaying a score since the maths and display methods remain fairly simple, and your score can now hold up to 8 digits. Luckily the Z80 has just enough fast 16 bit registers (ie. Non-index registers) to be able to handle all the things you require.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add BC points to the score (here with the extra life check every 10000 units):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld a,l&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc b&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret nc&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
ld a,l&lt;br /&gt;
add 1&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc 0&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score + 2),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is relatively simple too, using the same routine as above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
call bcd_hl&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiple BCD Bytes ===&lt;br /&gt;
This is very similar to the above method, but the values are stored and manipulated in a slightly different way. With this method, you can determine exactly how many digits you require. Maths is pretty straightforward, as is extra lives and display. One advantage this method has is that if you want to add 100 to the score, you don't have to add the two zeroes since you can start at the second BCD digit. With this method, you can store the score either little-endian (least significant bytes first) or big-endian. Big-endian has the advantage that you can read the score in a memory editor left-to-right. eg. 1234500 points is displayed as 01 23 45 00. This can make debugging easier.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score (6 digits):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add C points to the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ld b,3&lt;br /&gt;
.add_part&lt;br /&gt;
ld hl,score + 2&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld (hl),a&lt;br /&gt;
ret nc&lt;br /&gt;
.add_loop&lt;br /&gt;
dec hl&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
adc 0&lt;br /&gt;
daa&lt;br /&gt;
ld (hl),a&lt;br /&gt;
djnz add_loop&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is relatively simple too, using the same routine as above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
call bcd_hl&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More to come...&lt;br /&gt;
&lt;br /&gt;
[[User:Executioner|Executioner]] 01:27, 21 September 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Programming:Display_and_update_Scores&amp;diff=18802</id>
		<title>Programming:Display and update Scores</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:Display_and_update_Scores&amp;diff=18802"/>
				<updated>2007-09-20T23:29:19Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Multiple BCD Bytes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Methods for Storing Scores in Memory ==&lt;br /&gt;
&lt;br /&gt;
There are a number of methods for storing a Score in memory, here are a few examples:&amp;lt;br&amp;gt;&lt;br /&gt;
=== A Single Word ===&lt;br /&gt;
This is the simplest and smallest method for storing the score in memory, but it has a couple of disadvantages over some other methods. It can only hold a score up to 65535 (although you can add an extra '0' or two on the display to make that 655350 or 6553500), converting it to digits for display requires a relatively slow algorithm, and adding extra lives every 10000 points for example can take a complex routine. The advantage of using a straight Word is that the maths required to add points to the score is very simple and fast.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score dw 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add some points (in BC):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To display the score requires converting to a decimal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,score&lt;br /&gt;
ld bc,-10000&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-1000&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-100&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-10&lt;br /&gt;
call show_digit&lt;br /&gt;
ld a,l&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char&lt;br /&gt;
&lt;br /&gt;
.show_digit&lt;br /&gt;
ld a,'0' - 1&lt;br /&gt;
.inc_digit&lt;br /&gt;
inc a&lt;br /&gt;
add hl,bc&lt;br /&gt;
jr nc,inc_digit&lt;br /&gt;
or a&lt;br /&gt;
sbc hl,bc&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char	; This assumes the show_char routine doesn't corrupt HL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Checking for every 10000 points is complicated, this would normally done in the add_score routine, and I'm not going to write the code. It would however, be quite simple to add an extra life every multiple of 256 units (eg. 10240 points) by checking the most significant byte. eg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld a,h&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
sub h&lt;br /&gt;
cp 2&lt;br /&gt;
ret c&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Double Word ===&lt;br /&gt;
Like the above method, this provides a simple and efficient way to store and add points, but the routine required to convert the number to decimal for display is even more difficult, as is the extra lives every 10000 points.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add BC points to the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret nc&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
inc hl&lt;br /&gt;
ld (score + 2),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is much more tricky since it involves a lot of DWord subtractions etc. Most Z80 assemblers (including WinAPE) can't handle DWord values, so you need to get your calculator out to figure out what the values are to subtract for successive digits. The score can go as high as 4294967295, but I wouldn't recommend doing the maths for all possible digits. The code to display a DWord value is too complicated for this document.&lt;br /&gt;
&lt;br /&gt;
=== A Single BCD Word ===&lt;br /&gt;
This is similar to the above method, but the score is treated as Binary Coded Decimal. It's main disadvantage is that it can hold even less values than the single Word, restricting the score to 10000 possible combinations (one again with extra zeroes if required). Depending on the type of game and difficulty, this could be a good method to use. It's easy to store in memory and pass around, displaying and adding points are all relatively easy.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score is exactly the same as for a Single Word:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score dw 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Adding BC points is also fairly straightforward (here with the extra life check every 1000 units):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_BC&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld d,h&lt;br /&gt;
ld a,l&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc b&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score),hl&lt;br /&gt;
sub d&lt;br /&gt;
cp #10&lt;br /&gt;
ret c&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And the routine to display the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
ld a,h&lt;br /&gt;
call bcd_a&lt;br /&gt;
ld a,l&lt;br /&gt;
.bcd_a&lt;br /&gt;
ld h,a&lt;br /&gt;
rra:rra:rra:rra&lt;br /&gt;
and #0f&lt;br /&gt;
add '0'&lt;br /&gt;
call show_char&lt;br /&gt;
ld a,h&lt;br /&gt;
and #0f&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Double BCD Word ===&lt;br /&gt;
This is actually one of the best methods of storing and displaying a score since the maths and display methods remain fairly simple, and your score can now hold up to 8 digits. Luckily the Z80 has just enough fast 16 bit registers (ie. Non-index registers) to be able to handle all the things you require.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add BC points to the score (here with the extra life check every 10000 units):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld a,l&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc b&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret nc&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
ld a,l&lt;br /&gt;
add 1&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc 0&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score + 2),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is relatively simple too, using the same routine as above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
call bcd_hl&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiple BCD Bytes ===&lt;br /&gt;
This is very similar to the above method, but the values are stored and manipulated in a slightly different way. With this method, you can determine exactly how many digits you require. Maths is pretty straightforward, as is extra lives and display. One advantage this method has is that if you want to add 100 to the score, you don't have to add the two zeroes since you can start at the second BCD digit. With this method, you can store the score either little-endian (least significant bytes first) or big-endian. Big-endian has the advantage that you can read the score in a memory editor left-to-right. eg. 1234500 points is displayed as 01 23 45 00. This can make debugging easier.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score (6 digits):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add C points to the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ld b,3&lt;br /&gt;
.add_part&lt;br /&gt;
ld hl,score + 2&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
sub c&lt;br /&gt;
daa&lt;br /&gt;
ld (hl),a&lt;br /&gt;
ret nc&lt;br /&gt;
.add_loop&lt;br /&gt;
dec hl&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
sub 0&lt;br /&gt;
daa&lt;br /&gt;
ld (hl),a&lt;br /&gt;
djnz add_loop&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is relatively simple too, using the same routine as above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
call bcd_hl&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More to come...&lt;br /&gt;
&lt;br /&gt;
[[User:Executioner|Executioner]] 01:27, 21 September 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Programming:Display_and_update_Scores&amp;diff=18801</id>
		<title>Programming:Display and update Scores</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:Display_and_update_Scores&amp;diff=18801"/>
				<updated>2007-09-20T23:27:21Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: Score routines&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Methods for Storing Scores in Memory ==&lt;br /&gt;
&lt;br /&gt;
There are a number of methods for storing a Score in memory, here are a few examples:&amp;lt;br&amp;gt;&lt;br /&gt;
=== A Single Word ===&lt;br /&gt;
This is the simplest and smallest method for storing the score in memory, but it has a couple of disadvantages over some other methods. It can only hold a score up to 65535 (although you can add an extra '0' or two on the display to make that 655350 or 6553500), converting it to digits for display requires a relatively slow algorithm, and adding extra lives every 10000 points for example can take a complex routine. The advantage of using a straight Word is that the maths required to add points to the score is very simple and fast.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score dw 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add some points (in BC):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To display the score requires converting to a decimal:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,score&lt;br /&gt;
ld bc,-10000&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-1000&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-100&lt;br /&gt;
call show_digit&lt;br /&gt;
ld bc,-10&lt;br /&gt;
call show_digit&lt;br /&gt;
ld a,l&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char&lt;br /&gt;
&lt;br /&gt;
.show_digit&lt;br /&gt;
ld a,'0' - 1&lt;br /&gt;
.inc_digit&lt;br /&gt;
inc a&lt;br /&gt;
add hl,bc&lt;br /&gt;
jr nc,inc_digit&lt;br /&gt;
or a&lt;br /&gt;
sbc hl,bc&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char	; This assumes the show_char routine doesn't corrupt HL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Checking for every 10000 points is complicated, this would normally done in the add_score routine, and I'm not going to write the code. It would however, be quite simple to add an extra life every multiple of 256 units (eg. 10240 points) by checking the most significant byte. eg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld a,h&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
sub h&lt;br /&gt;
cp 2&lt;br /&gt;
ret c&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Double Word ===&lt;br /&gt;
Like the above method, this provides a simple and efficient way to store and add points, but the routine required to convert the number to decimal for display is even more difficult, as is the extra lives every 10000 points.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add BC points to the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_bc&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
add hl,bc&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret nc&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
inc hl&lt;br /&gt;
ld (score + 2),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is much more tricky since it involves a lot of DWord subtractions etc. Most Z80 assemblers (including WinAPE) can't handle DWord values, so you need to get your calculator out to figure out what the values are to subtract for successive digits. The score can go as high as 4294967295, but I wouldn't recommend doing the maths for all possible digits. The code to display a DWord value is too complicated for this document.&lt;br /&gt;
&lt;br /&gt;
=== A Single BCD Word ===&lt;br /&gt;
This is similar to the above method, but the score is treated as Binary Coded Decimal. It's main disadvantage is that it can hold even less values than the single Word, restricting the score to 10000 possible combinations (one again with extra zeroes if required). Depending on the type of game and difficulty, this could be a good method to use. It's easy to store in memory and pass around, displaying and adding points are all relatively easy.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score is exactly the same as for a Single Word:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score dw 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Adding BC points is also fairly straightforward (here with the extra life check every 1000 units):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.add_score_BC&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld d,h&lt;br /&gt;
ld a,l&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc b&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score),hl&lt;br /&gt;
sub d&lt;br /&gt;
cp #10&lt;br /&gt;
ret c&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And the routine to display the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
ld a,h&lt;br /&gt;
call bcd_a&lt;br /&gt;
ld a,l&lt;br /&gt;
.bcd_a&lt;br /&gt;
ld h,a&lt;br /&gt;
rra:rra:rra:rra&lt;br /&gt;
and #0f&lt;br /&gt;
add '0'&lt;br /&gt;
call show_char&lt;br /&gt;
ld a,h&lt;br /&gt;
and #0f&lt;br /&gt;
add '0'&lt;br /&gt;
jp show_char&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Double BCD Word ===&lt;br /&gt;
This is actually one of the best methods of storing and displaying a score since the maths and display methods remain fairly simple, and your score can now hold up to 8 digits. Luckily the Z80 has just enough fast 16 bit registers (ie. Non-index registers) to be able to handle all the things you require.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add BC points to the score (here with the extra life check every 10000 units):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
ld a,l&lt;br /&gt;
add c&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc b&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score),hl&lt;br /&gt;
ret nc&lt;br /&gt;
ld hl,lives&lt;br /&gt;
inc (hl)&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
ld a,l&lt;br /&gt;
add 1&lt;br /&gt;
daa&lt;br /&gt;
ld l,a&lt;br /&gt;
ld a,h&lt;br /&gt;
adc 0&lt;br /&gt;
daa&lt;br /&gt;
ld h,a&lt;br /&gt;
ld (score + 2),hl&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is relatively simple too, using the same routine as above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
call bcd_hl&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiple BCD Bytes ===&lt;br /&gt;
This is very similar to the above method, but the values are stored and manipulated in a slightly different way. With this method, you can determine exactly how many digits you require. Maths is pretty straightforward, as is extra lives and display. One advantage this method has is that if you want to add 100 to the score, you don't have to add the two zeroes since you can start at the second BCD digit. With this method, you can store the score either little-endian (least significant bytes first) or big-endian. Big-endian has the advantage that you can read the score in a memory editor left-to-right. eg. 1234500 points is displayed as 01 23 45 00. This can make debugging easier.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To define the score (6 digits):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.score ds 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To add C points to the score:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ld b,3&lt;br /&gt;
.add_part&lt;br /&gt;
ld hl,score + 2&lt;br /&gt;
ld a,(hl)&lt;br /&gt;
daa&lt;br /&gt;
ld (hl),a&lt;br /&gt;
ret nc&lt;br /&gt;
&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Displaying the score is relatively simple too, using the same routine as above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.show_score&lt;br /&gt;
ld hl,(score + 2)&lt;br /&gt;
call bcd_hl&lt;br /&gt;
ld hl,(score)&lt;br /&gt;
.bcd_hl&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More to come...&lt;br /&gt;
&lt;br /&gt;
[[User:Executioner|Executioner]] 01:27, 21 September 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Source_Codes&amp;diff=18789</id>
		<title>Source Codes</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Source_Codes&amp;diff=18789"/>
				<updated>2007-09-20T04:29:21Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Graphics */ Added Score handling stub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programming]]&lt;br /&gt;
''This article contains source codes and programming examples. You may also have a look at''&lt;br /&gt;
* [[Programming software]]&lt;br /&gt;
* [[Technical documentation]]s&lt;br /&gt;
* [[Locomotive BASIC]]&lt;br /&gt;
* [[Type Ins]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assembler ==&lt;br /&gt;
*[[Z80_-_undocumented_opcodes|Z80 - undocumented opcodes]]&lt;br /&gt;
*[[Where to learn?]]&lt;br /&gt;
&lt;br /&gt;
== Algorithms ==&lt;br /&gt;
*[[Programming:CPC OS floating point routines|CPC OS floating point routines]]&lt;br /&gt;
*[[Programming:CRC16|CRC16]]&lt;br /&gt;
*[[Programming:CRC32|CRC32]]&lt;br /&gt;
*[[Programming:Integer Division|Integer Division]]&lt;br /&gt;
*[[Programming:Integer Multiplication|Integer Multiplication]]&lt;br /&gt;
*[[Programming:Ultrafast Multiplication|Ultrafast Multiplication]] by [[Prodatron]]&lt;br /&gt;
*[[Programming:Fast Square Root|Fast Square Root]]&lt;br /&gt;
*[[Programming:Fast 16 bit Square Root|Fast 16 bit Square Root]] by [[User:Executioner|Executioner]]&lt;br /&gt;
*[[Programming:Filling memory with a byte|Filling memory with a byte]]&lt;br /&gt;
*[[Programming:Square Root|Square Root]]&lt;br /&gt;
*[[Programming:Precalculated square|Precalculated square]]&lt;br /&gt;
*[[Programming:Random Number Generator|Random Number Generator]]&lt;br /&gt;
*[[Programming:Sin/Cos calculation|Sin/Cos calculation]]&lt;br /&gt;
&lt;br /&gt;
== CP/M ==&lt;br /&gt;
*[[Programming:A simple 'Hello World' program for CP/M using BDOS|A simple 'Hello World' program for CP/M using BDOS]]&lt;br /&gt;
*[[Programming:Executing firmware functions from within CP/M 2.1|Executing firmware functions from within CP/M 2.1]]&lt;br /&gt;
*[[Programming:Executing firmware functions from within CP/M 2.1 or CP/M plus|Executing firmware functions from within CP/M 2.1 or CP/M plus]]&lt;br /&gt;
*[[Programming:Executing firmware functions from within CP/M 2.1|Executing firmware functions from within CP/M 2.1]]&lt;br /&gt;
*[[Programming:Executing firmware functions from within CP/M plus|Executing firmware functions from within CP/M plus]]&lt;br /&gt;
&lt;br /&gt;
== CPC Plus ==&lt;br /&gt;
*[[Programming:CPC Plus Hardware Sprites|Hardware sprites]]&lt;br /&gt;
*[[Programming:CPC Plus Horizontal scroll|Horizontal scroll]]&lt;br /&gt;
*[[Programming:CPC Plus RLE Hardware Sprites|RLE hardware sprites]]&lt;br /&gt;
*[[Programming:CPC Plus Screen Splitting|Screen splitting]]&lt;br /&gt;
*[[Programming:Unlocking ASIC|Unlocking ASIC]]&lt;br /&gt;
*[[Programming:CPC Plus Vertical scroll|Vertical scroll]]&lt;br /&gt;
*[[Programming:Simple Raster Example 2 (uses CPC plus features)|Simple Raster Example 1 (uses CPC plus features)]]&lt;br /&gt;
*[[Programming:Simple Raster Example 3 (uses CPC plus features)|Programming:Simple Raster Example 2 (uses CPC plus features)]]&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
*[[Programming:CPC Booster|CPC Booster]]&lt;br /&gt;
*[[Programming:Digiblaster|Digiblaster]]&lt;br /&gt;
*[[Programming:Program to save the ROM of the Multiface 2|Program to save the ROM of the Multiface 2]]&lt;br /&gt;
*[[Programming:SYMBiFACE II|SYMBiFACE II]]&lt;br /&gt;
&lt;br /&gt;
== File access ==&lt;br /&gt;
*[[Programming:An example to read a file byte-by-byte|An example to read a file byte-by-byte]]&lt;br /&gt;
*[[Programming:An example to write a file byte-by-byte|An example to write a file byte-by-byte]]&lt;br /&gt;
*[[Programming:A simple file copier using firmware functions (copies byte-by-byte)|A simple file copier using firmware functions (copies byte-by-byte)]]&lt;br /&gt;
*[[Programming:Loading a file|Loading a file]]&lt;br /&gt;
*[[Programming:Saving a file|Saving a file]]&lt;br /&gt;
&lt;br /&gt;
== Floppy disk ==&lt;br /&gt;
*[[Programming:A simple disc copier using BDOS functions|A simple disc copier using BDOS functions]]&lt;br /&gt;
*[[Programming:A simple disc formatter using BDOS functions|A simple disc formatter using BDOS functions]]&lt;br /&gt;
*[[Programming:An example loader|An example loader]]&lt;br /&gt;
*[[Programming:Detecting an Amstrad or Vortex disc controler|Detecting an Amstrad or Vortex disc controler]]&lt;br /&gt;
*[[Programming:Formatting a track on a disc|Formatting a track on a disc]]&lt;br /&gt;
*[[Programming:Reading a sector from a disc|Reading a sector from a disc]]&lt;br /&gt;
*[[Programming:Writing a sector to disc|Writing a sector to disc]]&lt;br /&gt;
&lt;br /&gt;
== Graphics ==&lt;br /&gt;
*[[Programming:Display a 8-bit number in binary|Display a 8-bit number in binary]]&lt;br /&gt;
*[[Programming:Display a 8-bit number in hex|Display a 8-bit number in hex]]&lt;br /&gt;
*[[Programming:Display a byte as a 3-digit decimal number|Display a byte as a 3-digit decimal number]]&lt;br /&gt;
*[[Programming:Display and update Scores|Display and update Scores]]&lt;br /&gt;
*[[Programming:Distorting the screen using register 2 of the CRTC (Horizontal Sync Position)|Distorting the screen using register 2 of the CRTC (Horizontal Sync Position)]]&lt;br /&gt;
*[[Programming:Fast plot|Fast plot]]&lt;br /&gt;
*[[Programming:Fast Sprites|Fast Sprites]] by [[User:Executioner|Executioner]]&lt;br /&gt;
*[[Programming:Fast Textoutput|Fast Textoutput]] by [[Prodatron]]&lt;br /&gt;
*[[Programming:Hardware scrolling|Hardware Scrolling]] by [[User:Executioner|Executioner]]&lt;br /&gt;
*[[Programming:Hardware scrolling 2|Hardware Scrolling 2]]&lt;br /&gt;
*[[Programming:Hardware scrolling the screen horizontally byte-by-byte using the CRTC|Hardware scrolling the screen horizontally byte-by-byte using the CRTC]]&lt;br /&gt;
*[[Programming:Hardware scrolling the screen using the CRTC|Hardware scrolling the screen using the CRTC]]&lt;br /&gt;
*[[Programming:Overscan|Overscan]]&lt;br /&gt;
*[[Programming:Plotting a sprite using character matrices|Plotting a sprite using character matrices]]&lt;br /&gt;
*[[Programming:Simple Raster Example 1|Simple Raster Example]]&lt;br /&gt;
*[[Programming:Simple Split Raster Example 1|Simple Split Raster Example]]&lt;br /&gt;
&lt;br /&gt;
== Keyboard ==&lt;br /&gt;
*[[Programming:Keyboard scanning|Keyboard scanning]]&lt;br /&gt;
&lt;br /&gt;
== Other routines ==&lt;br /&gt;
*[[Programming:An example boot sector (executed with rsx command CPM)|An example boot sector (executed with rsx command CPM)]]&lt;br /&gt;
*[[Programming:An example to define a RSX|An example to define a RSX]]&lt;br /&gt;
*[[Programming:Calling a RSX from outside of BASIC|Calling a RSX from outside of BASIC]]&lt;br /&gt;
*[[Programming:Dumping the data of BASIC or AMSDOS or an expansion rom|Dumping the data of BASIC or AMSDOS or an expansion rom]]&lt;br /&gt;
*[[Programming:Dumping the data of the lower rom|Dumping the data of the lower rom]]&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Programming:Fast_16_bit_Square_Root&amp;diff=18788</id>
		<title>Programming:Fast 16 bit Square Root</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:Fast_16_bit_Square_Root&amp;diff=18788"/>
				<updated>2007-09-19T05:22:31Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: Fixed last unroll&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This routine was written by [[User:Executioner|The Executioner]] based on the fast pre-calculated square routine and an algorithm by Milos &amp;quot;baze&amp;quot; Bazelides, with 16 bit arithmetic removed for faster performance.&lt;br /&gt;
&lt;br /&gt;
The initialisation routine, used to build the squares table (same as for the Pre-calculated Square table (my version)).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	ld de,1&lt;br /&gt;
	ld hl,0&lt;br /&gt;
	ld ix,sqtab&lt;br /&gt;
sqloop:	ld (ix + 0),l&lt;br /&gt;
	inc hx&lt;br /&gt;
	ld (ix + 0),h&lt;br /&gt;
	dec hx&lt;br /&gt;
	add hl,de&lt;br /&gt;
	inc de&lt;br /&gt;
	inc de&lt;br /&gt;
	inc lx&lt;br /&gt;
	jr nz,sqloop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual 16 bit square root routine.&lt;br /&gt;
&lt;br /&gt;
'''Input:''' DE = ''The number you want to find the square root of''&lt;br /&gt;
&lt;br /&gt;
'''Output:''' A = ''Square root of the number supplied in DE''&lt;br /&gt;
&lt;br /&gt;
'''Destroys:''' HL&lt;br /&gt;
&lt;br /&gt;
'''Call:''' CALL SqrtDE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SqrtDE:	ld hl,sqtab + #180&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	inc h&lt;br /&gt;
	set 6,l&lt;br /&gt;
	jr nc,$ + 4&lt;br /&gt;
	res 7,l&lt;br /&gt;
&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	inc h&lt;br /&gt;
	set 5,l&lt;br /&gt;
	jr nc,$ + 4&lt;br /&gt;
	res 6,l&lt;br /&gt;
&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	inc h&lt;br /&gt;
	set 4,l&lt;br /&gt;
	jr nc,$ + 4&lt;br /&gt;
	res 5,l&lt;br /&gt;
&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	inc h&lt;br /&gt;
	set 3,l&lt;br /&gt;
	jr nc,$ + 4&lt;br /&gt;
	res 4,l&lt;br /&gt;
&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	inc h&lt;br /&gt;
	set 2,l&lt;br /&gt;
	jr nc,$ + 4&lt;br /&gt;
	res 3,l&lt;br /&gt;
&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	inc h&lt;br /&gt;
	set 1,l&lt;br /&gt;
	jr nc,$ + 4&lt;br /&gt;
	res 2,l&lt;br /&gt;
&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	inc h&lt;br /&gt;
	inc l&lt;br /&gt;
	jr nc,$ + 4&lt;br /&gt;
	res 1,l&lt;br /&gt;
&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 5&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	ld a,l&lt;br /&gt;
	ret nc&lt;br /&gt;
	dec a&lt;br /&gt;
	ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Programming:Fast_16_bit_Square_Root&amp;diff=18787</id>
		<title>Programming:Fast 16 bit Square Root</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:Fast_16_bit_Square_Root&amp;diff=18787"/>
				<updated>2007-09-19T05:20:41Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: New page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This routine was written by [[User:Executioner|The Executioner]] based on the fast pre-calculated square routine and an algorithm by Milos &amp;quot;baze&amp;quot; Bazelides, with 16 bit arithmetic removed for faster performance.&lt;br /&gt;
&lt;br /&gt;
The initialisation routine, used to build the squares table (same as for the Pre-calculated Square table (my version)).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	ld de,1&lt;br /&gt;
	ld hl,0&lt;br /&gt;
	ld ix,sqtab&lt;br /&gt;
sqloop:	ld (ix + 0),l&lt;br /&gt;
	inc hx&lt;br /&gt;
	ld (ix + 0),h&lt;br /&gt;
	dec hx&lt;br /&gt;
	add hl,de&lt;br /&gt;
	inc de&lt;br /&gt;
	inc de&lt;br /&gt;
	inc lx&lt;br /&gt;
	jr nz,sqloop&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual 16 bit square root routine.&lt;br /&gt;
&lt;br /&gt;
'''Input:''' DE = ''The number you want to find the square root of''&lt;br /&gt;
&lt;br /&gt;
'''Output:''' A = ''Square root of the number supplied in DE''&lt;br /&gt;
&lt;br /&gt;
'''Destroys:''' HL&lt;br /&gt;
&lt;br /&gt;
'''Call:''' CALL SqrtDE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SqrtDE:	ld hl,sqtab + #180&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	inc h&lt;br /&gt;
	set 6,l&lt;br /&gt;
	jr nc,$ + 4&lt;br /&gt;
	res 7,l&lt;br /&gt;
&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	inc h&lt;br /&gt;
	set 5,l&lt;br /&gt;
	jr nc,$ + 4&lt;br /&gt;
	res 6,l&lt;br /&gt;
&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	inc h&lt;br /&gt;
	set 4,l&lt;br /&gt;
	jr nc,$ + 4&lt;br /&gt;
	res 5,l&lt;br /&gt;
&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	inc h&lt;br /&gt;
	set 3,l&lt;br /&gt;
	jr nc,$ + 4&lt;br /&gt;
	res 4,l&lt;br /&gt;
&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	inc h&lt;br /&gt;
	set 2,l&lt;br /&gt;
	jr nc,$ + 4&lt;br /&gt;
	res 3,l&lt;br /&gt;
&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	inc h&lt;br /&gt;
	set 1,l&lt;br /&gt;
	jr nc,$ + 4&lt;br /&gt;
	res 2,l&lt;br /&gt;
&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	inc h&lt;br /&gt;
	inc l&lt;br /&gt;
	jr nc,$ + 4&lt;br /&gt;
	res 1,l&lt;br /&gt;
&lt;br /&gt;
	ld a,d&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	jr nz,$ + 6&lt;br /&gt;
	dec h&lt;br /&gt;
	ld a,e&lt;br /&gt;
	cp (hl)&lt;br /&gt;
	ld a,l&lt;br /&gt;
	ret nc&lt;br /&gt;
	dec a&lt;br /&gt;
	ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Source_Codes&amp;diff=18786</id>
		<title>Source Codes</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Source_Codes&amp;diff=18786"/>
				<updated>2007-09-19T05:09:11Z</updated>
		
		<summary type="html">&lt;p&gt;Executioner: /* Algorithms */ - Added 16 bit squae root&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programming]]&lt;br /&gt;
''This article contains source codes and programming examples. You may also have a look at''&lt;br /&gt;
* [[Programming software]]&lt;br /&gt;
* [[Technical documentation]]s&lt;br /&gt;
* [[Locomotive BASIC]]&lt;br /&gt;
* [[Type Ins]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assembler ==&lt;br /&gt;
*[[Z80_-_undocumented_opcodes|Z80 - undocumented opcodes]]&lt;br /&gt;
*[[Where to learn?]]&lt;br /&gt;
&lt;br /&gt;
== Algorithms ==&lt;br /&gt;
*[[Programming:CPC OS floating point routines|CPC OS floating point routines]]&lt;br /&gt;
*[[Programming:CRC16|CRC16]]&lt;br /&gt;
*[[Programming:CRC32|CRC32]]&lt;br /&gt;
*[[Programming:Integer Division|Integer Division]]&lt;br /&gt;
*[[Programming:Integer Multiplication|Integer Multiplication]]&lt;br /&gt;
*[[Programming:Ultrafast Multiplication|Ultrafast Multiplication]] by [[Prodatron]]&lt;br /&gt;
*[[Programming:Fast Square Root|Fast Square Root]]&lt;br /&gt;
*[[Programming:Fast 16 bit Square Root|Fast 16 bit Square Root]] by [[User:Executioner|Executioner]]&lt;br /&gt;
*[[Programming:Filling memory with a byte|Filling memory with a byte]]&lt;br /&gt;
*[[Programming:Square Root|Square Root]]&lt;br /&gt;
*[[Programming:Precalculated square|Precalculated square]]&lt;br /&gt;
*[[Programming:Random Number Generator|Random Number Generator]]&lt;br /&gt;
*[[Programming:Sin/Cos calculation|Sin/Cos calculation]]&lt;br /&gt;
&lt;br /&gt;
== CP/M ==&lt;br /&gt;
*[[Programming:A simple 'Hello World' program for CP/M using BDOS|A simple 'Hello World' program for CP/M using BDOS]]&lt;br /&gt;
*[[Programming:Executing firmware functions from within CP/M 2.1|Executing firmware functions from within CP/M 2.1]]&lt;br /&gt;
*[[Programming:Executing firmware functions from within CP/M 2.1 or CP/M plus|Executing firmware functions from within CP/M 2.1 or CP/M plus]]&lt;br /&gt;
*[[Programming:Executing firmware functions from within CP/M 2.1|Executing firmware functions from within CP/M 2.1]]&lt;br /&gt;
*[[Programming:Executing firmware functions from within CP/M plus|Executing firmware functions from within CP/M plus]]&lt;br /&gt;
&lt;br /&gt;
== CPC Plus ==&lt;br /&gt;
*[[Programming:CPC Plus Hardware Sprites|Hardware sprites]]&lt;br /&gt;
*[[Programming:CPC Plus Horizontal scroll|Horizontal scroll]]&lt;br /&gt;
*[[Programming:CPC Plus RLE Hardware Sprites|RLE hardware sprites]]&lt;br /&gt;
*[[Programming:CPC Plus Screen Splitting|Screen splitting]]&lt;br /&gt;
*[[Programming:Unlocking ASIC|Unlocking ASIC]]&lt;br /&gt;
*[[Programming:CPC Plus Vertical scroll|Vertical scroll]]&lt;br /&gt;
*[[Programming:Simple Raster Example 2 (uses CPC plus features)|Simple Raster Example 1 (uses CPC plus features)]]&lt;br /&gt;
*[[Programming:Simple Raster Example 3 (uses CPC plus features)|Programming:Simple Raster Example 2 (uses CPC plus features)]]&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
*[[Programming:CPC Booster|CPC Booster]]&lt;br /&gt;
*[[Programming:Digiblaster|Digiblaster]]&lt;br /&gt;
*[[Programming:Program to save the ROM of the Multiface 2|Program to save the ROM of the Multiface 2]]&lt;br /&gt;
*[[Programming:SYMBiFACE II|SYMBiFACE II]]&lt;br /&gt;
&lt;br /&gt;
== File access ==&lt;br /&gt;
*[[Programming:An example to read a file byte-by-byte|An example to read a file byte-by-byte]]&lt;br /&gt;
*[[Programming:An example to write a file byte-by-byte|An example to write a file byte-by-byte]]&lt;br /&gt;
*[[Programming:A simple file copier using firmware functions (copies byte-by-byte)|A simple file copier using firmware functions (copies byte-by-byte)]]&lt;br /&gt;
*[[Programming:Loading a file|Loading a file]]&lt;br /&gt;
*[[Programming:Saving a file|Saving a file]]&lt;br /&gt;
&lt;br /&gt;
== Floppy disk ==&lt;br /&gt;
*[[Programming:A simple disc copier using BDOS functions|A simple disc copier using BDOS functions]]&lt;br /&gt;
*[[Programming:A simple disc formatter using BDOS functions|A simple disc formatter using BDOS functions]]&lt;br /&gt;
*[[Programming:An example loader|An example loader]]&lt;br /&gt;
*[[Programming:Detecting an Amstrad or Vortex disc controler|Detecting an Amstrad or Vortex disc controler]]&lt;br /&gt;
*[[Programming:Formatting a track on a disc|Formatting a track on a disc]]&lt;br /&gt;
*[[Programming:Reading a sector from a disc|Reading a sector from a disc]]&lt;br /&gt;
*[[Programming:Writing a sector to disc|Writing a sector to disc]]&lt;br /&gt;
&lt;br /&gt;
== Graphics ==&lt;br /&gt;
*[[Programming:Display a 8-bit number in binary|Display a 8-bit number in binary]]&lt;br /&gt;
*[[Programming:Display a 8-bit number in hex|Display a 8-bit number in hex]]&lt;br /&gt;
*[[Programming:Display a byte as a 3-digit decimal number|Display a byte as a 3-digit decimal number]]&lt;br /&gt;
*[[Programming:Distorting the screen using register 2 of the CRTC (Horizontal Sync Position)|Distorting the screen using register 2 of the CRTC (Horizontal Sync Position)]]&lt;br /&gt;
*[[Programming:Fast plot|Fast plot]]&lt;br /&gt;
*[[Programming:Fast Sprites|Fast Sprites]] by [[User:Executioner|Executioner]]&lt;br /&gt;
*[[Programming:Fast Textoutput|Fast Textoutput]] by [[Prodatron]]&lt;br /&gt;
*[[Programming:Hardware scrolling|Hardware Scrolling]] by [[User:Executioner|Executioner]]&lt;br /&gt;
*[[Programming:Hardware scrolling 2|Hardware Scrolling 2]]&lt;br /&gt;
*[[Programming:Hardware scrolling the screen horizontally byte-by-byte using the CRTC|Hardware scrolling the screen horizontally byte-by-byte using the CRTC]]&lt;br /&gt;
*[[Programming:Hardware scrolling the screen using the CRTC|Hardware scrolling the screen using the CRTC]]&lt;br /&gt;
*[[Programming:Overscan|Overscan]]&lt;br /&gt;
*[[Programming:Plotting a sprite using character matrices|Plotting a sprite using character matrices]]&lt;br /&gt;
*[[Programming:Simple Raster Example 1|Simple Raster Example]]&lt;br /&gt;
*[[Programming:Simple Split Raster Example 1|Simple Split Raster Example]]&lt;br /&gt;
&lt;br /&gt;
== Keyboard ==&lt;br /&gt;
*[[Programming:Keyboard scanning|Keyboard scanning]]&lt;br /&gt;
&lt;br /&gt;
== Other routines ==&lt;br /&gt;
*[[Programming:An example boot sector (executed with rsx command CPM)|An example boot sector (executed with rsx command CPM)]]&lt;br /&gt;
*[[Programming:An example to define a RSX|An example to define a RSX]]&lt;br /&gt;
*[[Programming:Calling a RSX from outside of BASIC|Calling a RSX from outside of BASIC]]&lt;br /&gt;
*[[Programming:Dumping the data of BASIC or AMSDOS or an expansion rom|Dumping the data of BASIC or AMSDOS or an expansion rom]]&lt;br /&gt;
*[[Programming:Dumping the data of the lower rom|Dumping the data of the lower rom]]&lt;/div&gt;</summary>
		<author><name>Executioner</name></author>	</entry>

	</feed>