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

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:Locomotive_BASIC&amp;diff=14552</id>
		<title>Talk:Locomotive BASIC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:Locomotive_BASIC&amp;diff=14552"/>
				<updated>2007-03-02T11:41:55Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Thanx a lot, Zilogmonkey, for your contributions. Hope, we will get the command descriptions finished at one day. -- [[User:Prodatron|Prodatron]] 17:54, 26 February 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
== Splitting article into smaller pieces ==&lt;br /&gt;
Well, after I added subcategories (which are necessary in my opinion to jump to a command easily and from other articles) you can see that the whole index blowed up :(. I guess that this was the reason in the C64 wiki to add an article for each command and I fear we will end up like they did, because you then have the possibility to add a category and let the wiki create a alphabetical index. Another point is, that if you want to describe a command more in detail you need the space for a short example routine which will make this article very, very big in the future. --[[User:Octoate|Octoate]] 09:46, 14 September 2006 (CEST)&lt;br /&gt;
: Yes, I agree. I must admit, that it makes much more sense to have one article for each command. -- [[User:Prodatron|Prodatron]] 11:39, 14 September 2006 (CEST)&lt;br /&gt;
:Well, imagine that... sucks! Then again, nobody prohibits you from collapsing the contents, no? [[User:Gryzor|Gryzor]] 13:16, 14 September 2006 (CEST)&lt;br /&gt;
::Yes, that's right, but I don't want to do something which is cancelled some days later, because this a lot of work to do (I already had the experience). --[[User:Octoate|Octoate]] 13:36, 14 September 2006 (CEST)&lt;br /&gt;
:Yep, that seems reasonable, as the contents table is not usable now... We should only keep list of commands here(with links), and move the explanation, examples of usage and all that to diffrent articles... Only then, I fear that things like article on &amp;quot;BORDER&amp;quot; would be quite short...--[[User:Torn|Torn]] 14:22, 14 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Yes it would make sense to split this article into articles on each keyword! Maybe we could group the the links in the main article into: Keywords, Functions, Graphics... etc! --[[User:Ygdrazil|Ygdrazil]] 14:39, 14 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Why not have this page including a list of commands and short examples....  and then have longer ones that require with their own pages...  Like Border and Goto would be fairly obvious so wouldn't require it, but some of the others could have longer articles.  [[User:C2r|C2r]] 21:47, 26 February 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
:::Well, it goes without saying that this would be the ultimate guide to Basic. A new article for some of the commands that will expand on their use with examples and tweaks... Unfortunately my Basic is VERY rusty, I wouldn't trust myself to write anything :( [[User:Gryzor|Gryzor]]&lt;br /&gt;
&lt;br /&gt;
:::: Hehe, mine too.  Something which might be an idea is to move the Basic commands reference from this page to another, e.g. [[List of Locomotive BASIC commands]], and link to that page from the main Locomotive Basic page.  This would separate those people wanting information about basic including the history and general information from the people using the page as a reference with examples etc.  All the pages could be grouped together via a Category:Basic, for example.  just some thoughts....!  [[User:C2r|C2r]] 22:25, 1 March 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
::::: Well, I don't know, because just a list of the commands sounds like pointless... It would only be of use if complimented by something more detailed, not by itself?? [[User:Gryzor|Gryzor]] 09:25, 2 March 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
:::::: Perhaps list of commands for the title of the page doesn't quite sell the idea...  What I mean is to move the existing command list from the Locomotive Basic Page to a new one, with the new page containing the information about the names of the commands, their use, and short examples, with links to more detailed individual pages with longer examples and uses only for those that require it. [[User:C2r|C2r]] 12:41, 2 March 2007 (CET)&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:Locomotive_BASIC&amp;diff=14538</id>
		<title>Talk:Locomotive BASIC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:Locomotive_BASIC&amp;diff=14538"/>
				<updated>2007-03-01T21:25:36Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: /* Splitting article into smaller pieces */ added some thoughts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Thanx a lot, Zilogmonkey, for your contributions. Hope, we will get the command descriptions finished at one day. -- [[User:Prodatron|Prodatron]] 17:54, 26 February 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
== Splitting article into smaller pieces ==&lt;br /&gt;
Well, after I added subcategories (which are necessary in my opinion to jump to a command easily and from other articles) you can see that the whole index blowed up :(. I guess that this was the reason in the C64 wiki to add an article for each command and I fear we will end up like they did, because you then have the possibility to add a category and let the wiki create a alphabetical index. Another point is, that if you want to describe a command more in detail you need the space for a short example routine which will make this article very, very big in the future. --[[User:Octoate|Octoate]] 09:46, 14 September 2006 (CEST)&lt;br /&gt;
: Yes, I agree. I must admit, that it makes much more sense to have one article for each command. -- [[User:Prodatron|Prodatron]] 11:39, 14 September 2006 (CEST)&lt;br /&gt;
:Well, imagine that... sucks! Then again, nobody prohibits you from collapsing the contents, no? [[User:Gryzor|Gryzor]] 13:16, 14 September 2006 (CEST)&lt;br /&gt;
::Yes, that's right, but I don't want to do something which is cancelled some days later, because this a lot of work to do (I already had the experience). --[[User:Octoate|Octoate]] 13:36, 14 September 2006 (CEST)&lt;br /&gt;
:Yep, that seems reasonable, as the contents table is not usable now... We should only keep list of commands here(with links), and move the explanation, examples of usage and all that to diffrent articles... Only then, I fear that things like article on &amp;quot;BORDER&amp;quot; would be quite short...--[[User:Torn|Torn]] 14:22, 14 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Yes it would make sense to split this article into articles on each keyword! Maybe we could group the the links in the main article into: Keywords, Functions, Graphics... etc! --[[User:Ygdrazil|Ygdrazil]] 14:39, 14 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Why not have this page including a list of commands and short examples....  and then have longer ones that require with their own pages...  Like Border and Goto would be fairly obvious so wouldn't require it, but some of the others could have longer articles.  [[User:C2r|C2r]] 21:47, 26 February 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
:::Well, it goes without saying that this would be the ultimate guide to Basic. A new article for some of the commands that will expand on their use with examples and tweaks... Unfortunately my Basic is VERY rusty, I wouldn't trust myself to write anything :( [[User:Gryzor|Gryzor]]&lt;br /&gt;
&lt;br /&gt;
:::: Hehe, mine too.  Something which might be an idea is to move the Basic commands reference from this page to another, e.g. [[List of Locomotive BASIC commands]], and link to that page from the main Locomotive Basic page.  This would separate those people wanting information about basic including the history and general information from the people using the page as a reference with examples etc.  All the pages could be grouped together via a Category:Basic, for example.  just some thoughts....!  [[User:C2r|C2r]] 22:25, 1 March 2007 (CET)&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Amstradbladet&amp;diff=14537</id>
		<title>Amstradbladet</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Amstradbladet&amp;diff=14537"/>
				<updated>2007-03-01T21:17:06Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: spellings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Amstradbladet.JPG|right|thumb|250px|Amstradbladet Frontpage]]&lt;br /&gt;
&lt;br /&gt;
'''Amstradbladet''' was a Danish CPC magazine running from 1984 to 1988.&lt;br /&gt;
&lt;br /&gt;
The Amstrad CPC was a late entry to the Danish computing scene. Commodore&lt;br /&gt;
was already established (since 1982), when the Amstrad CPC arrived in Denmark in October 1984.&lt;br /&gt;
&lt;br /&gt;
Other than Commodore, Amstrad was the most successful manufacturer of home computers for the Danish market in the 1980s. After the closure of Amstradbladet the dominance of Commodore was apparent in Denmark.&lt;br /&gt;
&lt;br /&gt;
A dedicated group of people left when Amstradbladet closed, and started &lt;br /&gt;
[[Amstrad Bruger Bladet]]. Amstrad Bruger Bladet published its last issue in November 1989.&lt;br /&gt;
&lt;br /&gt;
[[Category:CPC Press]] [[Category:Magazines]]&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=INPUT&amp;diff=14536</id>
		<title>INPUT</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=INPUT&amp;diff=14536"/>
				<updated>2007-03-01T20:49:00Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: sp.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Short-lived danish magazine&lt;br /&gt;
&lt;br /&gt;
This magazine specialized in typeins. &lt;br /&gt;
&lt;br /&gt;
Running from 1986 - 1987&lt;br /&gt;
&lt;br /&gt;
Four issues were published.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;INPUT&amp;quot;&amp;gt;&lt;br /&gt;
Image:INPUT8601001 small.jpg|Issue 1 1986&lt;br /&gt;
Image:INPUT8602001 small.jpg|Issue 2 1986&lt;br /&gt;
Image:INPUT8701001 small.jpg|Issue 1 1987&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Amstrad_Bruger_Bladet&amp;diff=14535</id>
		<title>Amstrad Bruger Bladet</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Amstrad_Bruger_Bladet&amp;diff=14535"/>
				<updated>2007-03-01T20:47:44Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: sp (o:&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:ABBladet880102001 small.jpg|300px|thumb|Amstrad Bruger Bladet]]&lt;br /&gt;
&lt;br /&gt;
After the closure of [[Amstradbladet]] a group of people continued to support Amstrad computers and started Amstrad Bruger Bladet.&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:Locomotive_BASIC&amp;diff=14426</id>
		<title>Talk:Locomotive BASIC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:Locomotive_BASIC&amp;diff=14426"/>
				<updated>2007-02-26T20:47:13Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Thanx a lot, Zilogmonkey, for your contributions. Hope, we will get the command descriptions finished at one day. -- [[User:Prodatron|Prodatron]] 17:54, 26 February 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
== Splitting article into smaller pieces ==&lt;br /&gt;
Well, after I added subcategories (which are necessary in my opinion to jump to a command easily and from other articles) you can see that the whole index blowed up :(. I guess that this was the reason in the C64 wiki to add an article for each command and I fear we will end up like they did, because you then have the possibility to add a category and let the wiki create a alphabetical index. Another point is, that if you want to describe a command more in detail you need the space for a short example routine which will make this article very, very big in the future. --[[User:Octoate|Octoate]] 09:46, 14 September 2006 (CEST)&lt;br /&gt;
: Yes, I agree. I must admit, that it makes much more sense to have one article for each command. -- [[User:Prodatron|Prodatron]] 11:39, 14 September 2006 (CEST)&lt;br /&gt;
:Well, imagine that... sucks! Then again, nobody prohibits you from collapsing the contents, no? [[User:Gryzor|Gryzor]] 13:16, 14 September 2006 (CEST)&lt;br /&gt;
::Yes, that's right, but I don't want to do something which is cancelled some days later, because this a lot of work to do (I already had the experience). --[[User:Octoate|Octoate]] 13:36, 14 September 2006 (CEST)&lt;br /&gt;
:Yep, that seems reasonable, as the contents table is not usable now... We should only keep list of commands here(with links), and move the explanation, examples of usage and all that to diffrent articles... Only then, I fear that things like article on &amp;quot;BORDER&amp;quot; would be quite short...--[[User:Torn|Torn]] 14:22, 14 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Yes it would make sense to split this article into articles on each keyword! Maybe we could group the the links in the main article into: Keywords, Functions, Graphics... etc! --[[User:Ygdrazil|Ygdrazil]] 14:39, 14 September 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
:: Why not have this page including a list of commands and short examples....  and then have longer ones that require with their own pages...  Like Border and Goto would be fairly obvious so wouldn't require it, but some of the others could have longer articles.  [[User:C2r|C2r]] 21:47, 26 February 2007 (CET)&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Locomotive_BASIC&amp;diff=14425</id>
		<title>Locomotive BASIC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Locomotive_BASIC&amp;diff=14425"/>
				<updated>2007-02-26T20:43:15Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: /* LET */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshots-CPC_Start_screen.jpg|thumb|CPC Start Screen showing Locomotive copyright and BASIC version]]&lt;br /&gt;
&lt;br /&gt;
Locomotive BASIC was a [http://en.wikipedia.org/wiki/BASIC_programming_language BASIC] interpreter for the Amstrad CPC range of computers.&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
Locomotive BASIC, was one of the best and fastest BASIC implementations of the era. The language benefited both from a clean, well-thought out implementation of the core language by Locomotive, and by the excellent [[firmware]] of the CPC, which lent most of its advanced features to the BASIC.&lt;br /&gt;
&lt;br /&gt;
Unlike the competing Commodore 64, it featured a comprehensive graphic capabilities with its PLOT, DRAW, PAPER, INK, PEN, BORDER and (in BASIC 1.1) FILL commands. It had extensive sound commands, granting control of the [[AY-3-8912]] via the firmware's volume and tone envelope system. With the SOUND command, you could select channels, set envelopes, pitch, noise and volume. That was something unmatched by other computers of that era.&lt;br /&gt;
&lt;br /&gt;
Also there was simple interface for memory management, with MEMORY and LOAD commands. The latter allowed for loading of raw screen data, thus providing easy picture showing. Both through this (combined with CALL, PEEK and POKE) and the firmware's [[RSX]] system, it was easy to mix BASIC and assembly code, thereby speeding up programs by coding the slowest parts directly in machine code. Many successful programs, including games such as [[Radzone]] and applications such as [[PowerPage]], made use of this technique.&lt;br /&gt;
&lt;br /&gt;
With DEF FN, ON variable GOTO and ON variable GOSUB, Locomotive BASIC provided the rudiments of &amp;quot;structured programming&amp;quot;, though nowhere near the extent of the PROCedures of [[BBC BASIC]].&lt;br /&gt;
&lt;br /&gt;
All in all, if you compare BASIC interpreters of that era, the Locomotive's seems to be the best 'all-rounder' regarding the combination of speed and complexity, and still some of its features were unmatched by others.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
The CPC implementation of Locomotive BASIC was developed directly from [[Locomotive Software]]'s existing Z80 BASIC. The existence of this is cited as one of the reasons Locomotive requested that [[Amstrad]] change the CPC's processor from a 6502 to a [[Z80]].&lt;br /&gt;
&lt;br /&gt;
The 464 shipped with BASIC 1.0 on ROM.&lt;br /&gt;
&lt;br /&gt;
The language was revised and debugged for the 664, 6128 and Plus machines to become BASIC 1.1. Changes were minor but significant for the programmer, and included:&lt;br /&gt;
&lt;br /&gt;
* DEC$ bug removed (in BASIC 1.0, it required two opening brackets and was undocumented)&lt;br /&gt;
* Better handling of string arguments to RSXs (|DIR,&amp;quot;*.BAS&amp;quot; rather than a$=&amp;quot;*.BAS&amp;quot;:|DIR,@a$)&lt;br /&gt;
* DATA statements can appear anywhere within a line; in BASIC 1.0, they had to be at the end of a line&lt;br /&gt;
* FILL command (fill area with solid colour)&lt;br /&gt;
* COPYCHR$ function (fetch character from screen)&lt;br /&gt;
* Better garbage collection&lt;br /&gt;
* Some number-handling bugs removed (e.g. in FOR loops with negative start/end values)&lt;br /&gt;
* FRAME (CALL &amp;amp;BD19)&lt;br /&gt;
* Extra, optional 'plotting mode' parameter for DRAW/PLOT commands (supported only through control codes on BASIC 1.0)&lt;br /&gt;
* GRAPHICS PAPER, GRAPHICS PEN commands&lt;br /&gt;
* ON BREAK CONT (disable ESCape)&lt;br /&gt;
* CLEAR INPUT (flush keyboard buffer)&lt;br /&gt;
* The AUTO command show the whole line if it exist, it only printed a * on the 464&lt;br /&gt;
&lt;br /&gt;
Some parts of 'BASIC' were actually housed in the firmware ROM, but were not officially accessible to other programs. This included the line editor.&lt;br /&gt;
&lt;br /&gt;
The 'pure BASIC' parts of Locomotive BASIC - i.e. those not concerned with CPC-specific firmware and hardware features - were upgraded to become Mallard BASIC, the CP/M language shipped with the [[PCW]]. This also featured exceptionally advanced random-access file handling, a feature missing from the CPC.&lt;br /&gt;
&lt;br /&gt;
== Command list ==&lt;br /&gt;
&lt;br /&gt;
=== Commands and operators ===&lt;br /&gt;
&lt;br /&gt;
==== AFTER I[,t] GOSUB Ln ====&lt;br /&gt;
: Waits for i/50 seconds and then jumps to the subruotine at line Ln.&lt;br /&gt;
&lt;br /&gt;
==== AUTO [Ln, i] ====&lt;br /&gt;
: Automaticaly generates line numbers starting at line Ln with increment i between line numbers.&lt;br /&gt;
: Use [ESC to leave AUTO mode. Default value for Ln and i is 10.&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AUTO 100,5 - generates line numbers 100, 105, 110...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== BORDER color ====&lt;br /&gt;
: Changes the color of the border.&lt;br /&gt;
&lt;br /&gt;
==== CALL add[,list of parameters] ====&lt;br /&gt;
: Allows an externally developed subroutine to be called by BASIC&lt;br /&gt;
::''Example:''&lt;br /&gt;
::CALL 0 - resets the computer completely&lt;br /&gt;
&lt;br /&gt;
==== CAT ====&lt;br /&gt;
: Displays the names of all existing programes on the tape or disk.&lt;br /&gt;
::'''Examples:'''&lt;br /&gt;
::CAT [ENTER] - lists all disk files in alpha-numeric order&lt;br /&gt;
::TAPE [ENTER]&lt;br /&gt;
::CAT [ENTER] - lists names of all tape files in their storage order&lt;br /&gt;
&lt;br /&gt;
==== CHAIN &amp;quot;filename&amp;quot;[,ln]====&lt;br /&gt;
&lt;br /&gt;
:Enables the specified program to be loaded and RUN automatically. If the optional parameters ln is specified, the program execution will commence from line ln.&lt;br /&gt;
&lt;br /&gt;
==== CHAIN MERGE &amp;quot;filename&amp;quot;[,ln][,DELETE1 nl - 1n2]====&lt;br /&gt;
&lt;br /&gt;
:Loads the specified program from tape or disk, merges it into the program in memory, and starts execution of the merged program. The parameter DELETE1n1 - 1n2 is used to delete part of the original program before running it, if required.&lt;br /&gt;
&lt;br /&gt;
==== CLEAR ====&lt;br /&gt;
: Clears all variables from memory, leaving the program in memory unchanged. All open files are abandoned.&lt;br /&gt;
&lt;br /&gt;
==== CLG [ink] ====&lt;br /&gt;
: Clears the graphics screen to colour specified by ink. If parameter ink is not specified them the graphics screen is cleared to the colour specified by the GRAPHICS PAPER statement.&lt;br /&gt;
&lt;br /&gt;
==== CLOSEIN ====&lt;br /&gt;
: Closes any input file (tape or disk).&lt;br /&gt;
&lt;br /&gt;
==== CLOSEOUT ====&lt;br /&gt;
: Closes any output file (tape or disk).&lt;br /&gt;
&lt;br /&gt;
==== CLS ====&lt;br /&gt;
: Clears the screen. The text cursor is moved to the upper left corner.&lt;br /&gt;
&lt;br /&gt;
==== CONT ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== CURSOR ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== DATA x1[,x2,x3...]====&lt;br /&gt;
: Defines a data ''section'' to be used by &amp;lt;tt&amp;gt;READ&amp;lt;/tt&amp;gt; calls.&lt;br /&gt;
: Data values can be of any type (integer, real or string) as long as the corresponding &amp;lt;tt&amp;gt;READ&amp;lt;/tt&amp;gt; calls use a variable of the right type.&lt;br /&gt;
&lt;br /&gt;
:Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 DATA &amp;quot;Hello, world!&amp;quot;, 42&lt;br /&gt;
20 READ message$:PRINT message$&lt;br /&gt;
30 READ answer:PRINT &amp;quot;The answer is:&amp;quot;;answer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:''See also:'' &amp;lt;tt&amp;gt;READ&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;RESTORE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DEF ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== DEFINT ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== DEFREAL ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== DEFSTR ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== DEG ====&lt;br /&gt;
: Switch to degrees mode for trigonometric functions (&amp;lt;tt&amp;gt;SIN&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;COS&amp;lt;/tt&amp;gt;...).&lt;br /&gt;
&lt;br /&gt;
''See also:'' &amp;lt;tt&amp;gt;RAD&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== DELETE [line] ====&lt;br /&gt;
: Deletes the current program completely (without argument) or only the given line.&lt;br /&gt;
&lt;br /&gt;
==== DI ====&lt;br /&gt;
: Disables interrupts (but not[ESC]) until re-enabled by EI command or by RETURN at end of an interrupts service routine.&lt;br /&gt;
&lt;br /&gt;
==== DIM v[$](i1[,i2]) ====&lt;br /&gt;
&lt;br /&gt;
: Specifies storage space to be allocated for list or table v[$]. i1 is number of rows, i2 is number of columns. If a list or a table is not specified by DIM, i1 and i2 default to 10.&lt;br /&gt;
&lt;br /&gt;
==== DRAW x,y [,[i1][,i2]] ====&lt;br /&gt;
: Draws a line from the current cursor position to position x,y. i1 specifies colour, i2 is the logical colour.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i2 = 0   normal colour   i2 = 2 AND colour&lt;br /&gt;
i2 = 1   XOR colour      i2 = 3 OR colour&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
::''Example:''&lt;br /&gt;
::CLG 2&lt;br /&gt;
::DRAW 500,400,0 - draws a line from 0,0 to 500,400&lt;br /&gt;
&lt;br /&gt;
==== DRAWR xr, yr, [[i1][,i2]] ====&lt;br /&gt;
&lt;br /&gt;
: Draws a line from current graphics cursor position to current cursor x position + xr, current cursor y position + yr. i1 and i2 as DRAW.&lt;br /&gt;
:Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Move 200,200&lt;br /&gt;
DRAWR 100,100,0 - draws a line from 200,200 to 300,300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== EDIT line ====&lt;br /&gt;
: Copies one program line to screen in edition mode.&lt;br /&gt;
&lt;br /&gt;
==== EI ====&lt;br /&gt;
: Enable interrupts which have been disabled by DI&lt;br /&gt;
&lt;br /&gt;
==== END ====&lt;br /&gt;
: Indicates end of program&lt;br /&gt;
&lt;br /&gt;
==== ENT ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== ENV ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== ERASE v[$(i1[,i2]) ====&lt;br /&gt;
: Clears the contents of an array that is no longer required.&lt;br /&gt;
&lt;br /&gt;
==== ERL ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== ERROR i ====&lt;br /&gt;
: Returns the error message whose error code number is i.&lt;br /&gt;
&lt;br /&gt;
==== EVERY ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== FILL i ====&lt;br /&gt;
: Fills an area of a graphics screen i colour i (0-15). Default value of i is the current graphics pen colour. Only available in Basic 1.1.&lt;br /&gt;
&lt;br /&gt;
==== FN ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== FOR TO STEP NEXT ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== FRAME ====&lt;br /&gt;
: Smooths character and graphics movement and reduces flicker (waits for a VSYNC signal). Only available in Basic 1.1. On a CPC 464 you can use CALL &amp;amp;BD19 instead.&lt;br /&gt;
&lt;br /&gt;
==== GOSUB i ====&lt;br /&gt;
&lt;br /&gt;
: Jumps to subroutine which is given as argument.&lt;br /&gt;
: ''Example:''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 PRINT &amp;quot;Calling subroutine&amp;quot;&lt;br /&gt;
20 GOSUB 100&lt;br /&gt;
30 PRINT &amp;quot;Back from subroutine&amp;quot;&lt;br /&gt;
40 END&lt;br /&gt;
100 REM Begin of the subroutine&lt;br /&gt;
110 PRINT &amp;quot;Subroutine started&amp;quot;&lt;br /&gt;
120 RETURN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GOTO i ====&lt;br /&gt;
: Jumps to the line number which is given as argument.&lt;br /&gt;
: ''Example:''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 GOTO 100&lt;br /&gt;
20 REM not executed&lt;br /&gt;
30 REM not executed&lt;br /&gt;
100 PRINT &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GRAPHICS ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== IF THEN ELSE ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== INK ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== INPUT ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== KEY ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== LET ====&lt;br /&gt;
: Used to define variables.&lt;br /&gt;
: ''Example:''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 LET a$ = &amp;quot;hello world&amp;quot;&lt;br /&gt;
20 PRINT a$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== LINE ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== LIST ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== LOAD ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== LOCATE x,y ====&lt;br /&gt;
&lt;br /&gt;
: Moves the text cursor to the x,y location. &lt;br /&gt;
&lt;br /&gt;
: x starts at 1 on the left and goes up to 20 (in mode 0), 40 (in mode 1) or 80 (in mode 2).&lt;br /&gt;
&lt;br /&gt;
: y starts at 1 at the top and ends at 25 at the bottom.&lt;br /&gt;
&lt;br /&gt;
==== MASK [i1][,i2]====&lt;br /&gt;
&lt;br /&gt;
: Sets bits in each adjacent group of 8 pixel on (1) or off (0) according to binary value of i1 (0-255). i2 determines whether the first point of the line is to plotted (1) or not (0).&lt;br /&gt;
&lt;br /&gt;
:Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 CLG 2:MASK 1:MOVE 0,0:DRAW 500,400&lt;br /&gt;
20 MASK 15:MOVE 0,0:DRAW 500,400&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MEMORY ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== MERGE ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== MID$ ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== MODE ====&lt;br /&gt;
: Changes the screen mode: MODE 0 is 160x200 in 16 colors, MODE 1 is 320x200 4 colors and MODE 2 is 640x200 2 colors.&lt;br /&gt;
&lt;br /&gt;
==== MOVE ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== MOVER ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== NEW ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== ON BREAK ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== ON ERROR ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== OPENIN &amp;quot;datafile&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
: Opens the specified data file for reading.&lt;br /&gt;
&lt;br /&gt;
==== OPENOUT &amp;quot;datafile&amp;quot; ====&lt;br /&gt;
: Opens the specified data file for writing.&lt;br /&gt;
&lt;br /&gt;
==== ORIGIN ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== OUT ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== PAPER ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== PEN ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== PLOT ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== PLOTR ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== POKE ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== PRINT ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== RAD ====&lt;br /&gt;
: Switch to radians mode for trigonometric functions (&amp;lt;tt&amp;gt;SIN&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;COS&amp;lt;/tt&amp;gt;...).&lt;br /&gt;
&lt;br /&gt;
: ''See also:'' &amp;lt;tt&amp;gt;DEG&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RANDOMIZE [seed] ====&lt;br /&gt;
&lt;br /&gt;
: Resets the pseudo-random generator to the given seed. What is strange is that if no seed is given, one is interactively prompted for.&lt;br /&gt;
&lt;br /&gt;
: A common idiom to have a ''random'' random seed is to do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RANDOMIZE TIME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== READ variable ====&lt;br /&gt;
: Gets the next data item (from &amp;lt;tt&amp;gt;DATA&amp;lt;/tt&amp;gt; commands), stores it in the given variable and moves to the next item.&lt;br /&gt;
The variable must be of the correct type.&lt;br /&gt;
&lt;br /&gt;
''See also:'' &amp;lt;tt&amp;gt;DATA&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;RESTORE&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RELEASE ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== REM [any text]====&lt;br /&gt;
: Introduces a comment.&lt;br /&gt;
&lt;br /&gt;
==== RENUM [newLine],[oldLine],[step] ====&lt;br /&gt;
: Renumbers the lines of the current program.&lt;br /&gt;
&lt;br /&gt;
: By default, the whole program is renumbered starting at line 10 with multiples of ten. It is important to note that ''jumps'' (&amp;lt;tt&amp;gt;GOTO&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;GOSUB&amp;lt;/tt&amp;gt; and the like) are automatically converted to the new line numbers.&lt;br /&gt;
&lt;br /&gt;
: The whole set of parameters can be used to renumber only the last part of a program.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 GOTO 20&lt;br /&gt;
20 GOTO 30&lt;br /&gt;
30 GOTO 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: becomes, after calling &amp;lt;tt&amp;gt;RENUM 100,20,5&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 GOTO 100&lt;br /&gt;
100 GOTO 105&lt;br /&gt;
105 GOTO 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RESTORE [line] ====&lt;br /&gt;
&lt;br /&gt;
: Resets the data pointer used by &amp;lt;tt&amp;gt;READ&amp;lt;/tt&amp;gt;. When used without parameters, resets the pointer to the first data in the program. Otherwise, resets the pointer to the given line number.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 DATA 10,11,12,13,14&lt;br /&gt;
20 DATA 20&lt;br /&gt;
READ i:PRINT i&lt;br /&gt;
 10&lt;br /&gt;
Ready&lt;br /&gt;
READ i:PRINT i&lt;br /&gt;
 11&lt;br /&gt;
Ready&lt;br /&gt;
RESTORE&lt;br /&gt;
Ready&lt;br /&gt;
READ i:PRINT i&lt;br /&gt;
 10&lt;br /&gt;
Ready&lt;br /&gt;
RESTORE 20&lt;br /&gt;
Ready&lt;br /&gt;
READ i:PRINT i&lt;br /&gt;
 20&lt;br /&gt;
Ready&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: ''See also:'' &amp;lt;tt&amp;gt;DATA&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;READ&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RESUME ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== RETURN ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== RUN [line] ====&lt;br /&gt;
: Runs the current program, optionally starting at a given line. If no line number is given, starts at the first line.&lt;br /&gt;
&lt;br /&gt;
==== SAVE ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== SOUND ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== SPC ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== SPEED ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== SQ ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== STOP ====&lt;br /&gt;
&lt;br /&gt;
: Breaks program execution at line containing the STOP statement. The message '''BREAK in''' is output with the line number.&lt;br /&gt;
&lt;br /&gt;
==== SUB ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== SWAP ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== SYMBOL n,i1[,i2,i3,i4,i5,i6,i7,i8] ====&lt;br /&gt;
&lt;br /&gt;
: Redefines the appearance of the character at index n.&lt;br /&gt;
: Each of the following eight integers defines the contents of one pixel row, starting at the top of the character.&lt;br /&gt;
: Each character fits in an 8x8 pixel grid.&lt;br /&gt;
: Missing lines are considered as empty.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SYMBOL 255,255,129,129,129,129,129,129,255&lt;br /&gt;
PRINT CHR$(255)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Defines character 255 to look like an empty square and prints it.&lt;br /&gt;
&lt;br /&gt;
: Initially, only characters with indices ranging from 240 to 255 can be redefined.&lt;br /&gt;
: See also &amp;lt;tt&amp;gt;SYMBOL AFTER&amp;lt;/tt&amp;gt; to allow redefinition of arbitrary characters.&lt;br /&gt;
&lt;br /&gt;
==== SYMBOL AFTER n ====&lt;br /&gt;
: Allows the redefinition of character symbols from index n included. &lt;br /&gt;
&lt;br /&gt;
: Symbol redefinitions are made using the SYMBOL command above.&lt;br /&gt;
: Initially, only symbols from index 240 to 255 can be redefined. This initial situation can be restored with &amp;lt;tt&amp;gt;SYMBOL AFTER 240&amp;lt;/tt&amp;gt;. Symbol previously redefined are restored to their original appearance.&lt;br /&gt;
&lt;br /&gt;
==== TAB ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== TAG ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== TAGOFF ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== TROFF ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== TRON ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== USING ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== WAIT add, i1[,i2] ====&lt;br /&gt;
&lt;br /&gt;
: Waits until the I/O port at add returns a value (0-255). The value returned is XORed with i2 and the ANDed with i1. This is repeated until a non-zero result occurs.&lt;br /&gt;
&lt;br /&gt;
==== WHILE WEND ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== WIDTH ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== WINDOW ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== WRITE [#st,] v[$], v[$] ====&lt;br /&gt;
&lt;br /&gt;
: Writes the values of the specified variable to the specified stream.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 OPENOUT &amp;quot;DUMMY&amp;quot;&lt;br /&gt;
20 INPUT A$,A&lt;br /&gt;
30 WRITE #9,A$,A&lt;br /&gt;
40 CLOSEOUT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ZONE i====&lt;br /&gt;
&lt;br /&gt;
: Changes the width of the print zone. Default is 13.&lt;br /&gt;
&lt;br /&gt;
=== Operators ===&lt;br /&gt;
&lt;br /&gt;
==== AND ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== MOD ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== NOT ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== OR ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== XOR ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
==== ABS (n) ====&lt;br /&gt;
: Returns the absolute value of n by ignoring the sign value.&lt;br /&gt;
&lt;br /&gt;
: Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT ABS(-3.5) - prints 3.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ASC ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== ATN (n) ====&lt;br /&gt;
: Returns the arctangent of n.&lt;br /&gt;
&lt;br /&gt;
==== BIN$ (i1,[i2]) ====&lt;br /&gt;
: Returns binary representation of i1 between -32768 and 65535. The number of binary digits (0s and 1s) is specified by i2 (0-16)&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT BIN$(66,8) - prints 01000010&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CHR$ (n)====&lt;br /&gt;
: Returns the character for a given index n. For instance CHR$(65) returns the character 'A'. Valid indices range from 0 (zero) to 255.&lt;br /&gt;
&lt;br /&gt;
: As an example, try the following basic program :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10 print chr$(208+rnd(2));:goto 10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: It will draw a random maze with characters 208 and 209, which are an horizontal and a vertical bar.&lt;br /&gt;
&lt;br /&gt;
==== CINT ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== COPYCHR$ ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== COS ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== CREAL ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== DEC$ ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== DERR ====&lt;br /&gt;
&lt;br /&gt;
: Gives the most recent error code number returned by [[Amsdos]].&lt;br /&gt;
&lt;br /&gt;
==== EOF ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== ERR ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== EXP ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== FIX ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== FRE ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== HEX$ ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== HIMEM ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== INKEY ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== INKEY$ ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== INP ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== INSTR ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== INT ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== JOY ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== LEFT$ ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== LEN ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== LOG ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== LOG10 ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== LOWER$ ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== MAX ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== MIN ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== PEEK ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== PI ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== POS ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== REMAIN ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== RIGHT$ ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== RND [(n)] ====&lt;br /&gt;
: Generates the next random number in the current squence if n is positive or omitted. If n = 0, the random number generated will be the same as the last random number generated.&lt;br /&gt;
&lt;br /&gt;
==== ROUND (n[,i1]) ====&lt;br /&gt;
: Rounds n to a number of decimal places or to the power of ten specified by i. If i is negative, the n is rounded to give an absolute integer with i zeros before the decimal point.&lt;br /&gt;
: Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT ROUND(1562.357,2):PRINT ROUND(1562.375,-2) - prints 1562.36 1600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SGN (n) ====&lt;br /&gt;
: Returns 1 if n is positive, 0 if n = 0, -1 if n is negative.&lt;br /&gt;
&lt;br /&gt;
==== SIN (n) ====&lt;br /&gt;
: Returns sine of n in degree or radian mode (see DEG and RAD)&lt;br /&gt;
&lt;br /&gt;
==== SPACE$ ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== SQ (channel) ====&lt;br /&gt;
: Returns a bit significant integer showing state of the sound queue for specified channel where channel 1, 2, 3 = A, B, C.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bits 0,1 and 2     number of free entries in the queue&lt;br /&gt;
Bits 3,4 and 5     redezvous state at head of the queue&lt;br /&gt;
Bit 6              head of the queue is held&lt;br /&gt;
Bit 7              channel is currently active&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SQR (n) ====&lt;br /&gt;
: Returns the square root of n.&lt;br /&gt;
&lt;br /&gt;
==== STR$ ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== STRING$ ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== TAN ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== TEST ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== TESTR ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== TIME ====&lt;br /&gt;
: Returns time elapsed since the computer was switched on or reset.&lt;br /&gt;
: One second = TIME/300.&lt;br /&gt;
&lt;br /&gt;
==== UNT ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== UPPER$ ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== VAL ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== VPOS (#st) ====&lt;br /&gt;
: Reports the current row (line) position of the text cursor relative to the top of the text windows of the specified stream.&lt;br /&gt;
&lt;br /&gt;
==== XPOS ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== YPOS ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
''(Please, fill in. Looks like a lot of work ;-) ...)''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Error codes ==&lt;br /&gt;
&lt;br /&gt;
* 1 '''Unexpected NEXT''' - Occurs when the FOR of a FOR .. NEXT loop is missing.&lt;br /&gt;
* 2 '''Syntax Error''' - Typing error or incorrect punctuation.&lt;br /&gt;
* 3 '''Unexpected RETURN''' - Caused by entering a subroutine other than with GOSUB.&lt;br /&gt;
* 4 '''DATA exhaused''' - Trying to READ data when data pointer has reached end of data.&lt;br /&gt;
* 5 '''Improper argument''' - The argument for a function is not legal (eg. PRINT SQR(--10)).&lt;br /&gt;
* 6 '''Overflow''' - The computer cannot handle a number greater than 1.7E38.&lt;br /&gt;
* 7 '''Memory full''' - All available RAM is being used or has been reserved. Program to big or control structures too deeply nested.&lt;br /&gt;
* 8 '''Line does not exist''' - Attempt to RUN, GOTO or GOSUB a non-existent line number.&lt;br /&gt;
* 9 '''Subsript out of range''' - Value of a subscript in an array is greater than DIM declaration.&lt;br /&gt;
* 10 '''Array already dimensioned''' - Arrays can only be DIMensioned once within a program.&lt;br /&gt;
* 11 '''Division by zero''' - Trying to divide a number by zero.&lt;br /&gt;
* 12&lt;br /&gt;
&lt;br /&gt;
== Other Basic Dialects avaliable for the CPC ==&lt;br /&gt;
&lt;br /&gt;
*[[BBC Basic]]&lt;br /&gt;
*[[C BASIC Compiler|C BASIC]]&lt;br /&gt;
*[[E-BASIC]]&lt;br /&gt;
&lt;br /&gt;
== Web links ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.kjthacker.f2s.com/docs/bastech.html Technical information at the Unofficial Amstrad WWW Resource]&lt;br /&gt;
* [http://www.sean.co.uk/books/amstrad/bforbasic.shtm Locomotive Basic Tutorial by Sean McManus]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Tas-Spell&amp;diff=14371</id>
		<title>Tas-Spell</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Tas-Spell&amp;diff=14371"/>
				<updated>2007-02-25T10:04:52Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: added cat, wiki links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Program to add Spell checking ability to [[Tasword]].&lt;br /&gt;
&lt;br /&gt;
Like it's parent program, it did its job well but was overshadowed by the far more powerful [[ProSpell]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Roland&amp;diff=14370</id>
		<title>Roland</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Roland&amp;diff=14370"/>
				<updated>2007-02-25T10:03:33Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: added cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Roland was Amstrad's idea of a recurring character in very early Amsoft games. Other computer games of the mid-1980s frequently employed such a device, such as the Miner Willy character in [[Manic Miner]] and [[Jet Set Willy]].&lt;br /&gt;
&lt;br /&gt;
Roland was both an anagram of [[Arnold]], the codename for the CPC, and the first name of CPC designer [[Roland Perry]].&lt;br /&gt;
&lt;br /&gt;
Appearances in  (Very Incomplete List):&lt;br /&gt;
&lt;br /&gt;
* [[Roland Ahoy]]&lt;br /&gt;
* [[Roland Goes Digging]]&lt;br /&gt;
* [[Roland Goes Square Bashing]]&lt;br /&gt;
* [[Roland in Space]]&lt;br /&gt;
* [[Roland in the Caves]]&lt;br /&gt;
* [[Roland in Time]]&lt;br /&gt;
* [[Roland on the Ropes]]&lt;br /&gt;
* [[Roland Takes a Running Jump]] (type-in from [[Computing with the Amstrad]]?)&lt;br /&gt;
&lt;br /&gt;
[[Category:Games]]&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Clones&amp;diff=14369</id>
		<title>Clones</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Clones&amp;diff=14369"/>
				<updated>2007-02-25T10:02:11Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: added cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of '''Amstrad CPC clones'''.&lt;br /&gt;
&lt;br /&gt;
==Classic Amstrad CPC clones==&lt;br /&gt;
* [[KC Compact]] (1989-1990; East Germany)&lt;br /&gt;
* [[Aleste 520EX]] (1993; Russia)&lt;br /&gt;
&lt;br /&gt;
==Modern Amstrad CPC clones==&lt;br /&gt;
* [[CPC TREX]] (FPGA based solution)&lt;br /&gt;
* [[C-ONE]] (FPGA based multi machine solution)&lt;br /&gt;
* [[CPCng]] (development currently has been stopped)&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Pro-Ext&amp;diff=14368</id>
		<title>Pro-Ext</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Pro-Ext&amp;diff=14368"/>
				<updated>2007-02-25T10:00:24Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: added cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pro-Ext was an extension utility for [[Protext]], written by [[ChaRleyTroniC]] and sold by [[Sentinel Software]].&lt;br /&gt;
&lt;br /&gt;
It enabled you to incorporate large headline fonts and clip art into Protext documents, which could then be printed out (in graphics mode) on a standard Epson-compatible printer. It was revised several times to v1.5.&lt;br /&gt;
&lt;br /&gt;
The program was due to be replaced by the never-finished [[Fidelity]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Disc_format&amp;diff=14367</id>
		<title>Disc format</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Disc_format&amp;diff=14367"/>
				<updated>2007-02-25T09:59:23Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: added cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CPCs could read discs formatted in three separate ways. Several high-capacity disc operating systems existed to add new formats to the three standard ones.&lt;br /&gt;
&lt;br /&gt;
== Standard CPC disc formats ==&lt;br /&gt;
&lt;br /&gt;
* '''Data''': 180k single-sided. 40 tracks of nine 512-byte sectors each. Sectors numbered &amp;amp;C1 to &amp;amp;C9. 64 directory entries. Can also be read by [[PCW]]s. The useable capacity is 178k.&lt;br /&gt;
* '''System''': 180k single-sided. 40 tracks of nine 512-byte sectors each. Sectors numbered &amp;amp;41 to &amp;amp;49. 64 directory entries. Two reserved tracks containing CP/M BIOS. The useable capacity is 169k.&lt;br /&gt;
* '''IBM''': 160k single-sided. 40 tracks of eight 512-byte sectors each. Sectors numbered &amp;amp;01 to &amp;amp;08. Provided for compatibility with CP/M-86 (and DR-DOS 1.0). Used by very few CPC purchasers, but Locomotive Software stated that this was invaluable for cross-assembly. The useable capacity is 158k.&lt;br /&gt;
* '''Vendor''': Term used for System format discs with no software in the reserved tracks. The useable capacity is 169k.&lt;br /&gt;
&lt;br /&gt;
== Third-party CPC disc formats ==&lt;br /&gt;
&lt;br /&gt;
* [[FAT]] formats [http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx] (invented by MS-DOS; supported by [[SymbOS]], [[DOS Copy]], [[ReadDSK]], [[SymDOS]], [[DSK-CPC]])&lt;br /&gt;
* [[MS800]] formats&lt;br /&gt;
* [[Stream2#MoDOS|Prem]] format (supported by [[Stream2]])&lt;br /&gt;
* [[RODOS]] formats&lt;br /&gt;
* [[ROMDOS]] formats (also supported by [[ParaDOS]]: D80 supported by [[S-DOS]] and [[400K/S]])&lt;br /&gt;
* [[Ultraform]]&lt;br /&gt;
* [[Xexor]] formats (also supported by [[ParaDOS]])&lt;br /&gt;
* XD-DOS etc.??&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* http://www.seasip.demon.co.uk/Cpm/amsform.html&lt;br /&gt;
* http://www.wacci.org.uk/magazine/138/138_08.html&lt;br /&gt;
* http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Fantasy_World_Dizzy&amp;diff=14366</id>
		<title>Fantasy World Dizzy</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Fantasy_World_Dizzy&amp;diff=14366"/>
				<updated>2007-02-25T09:58:39Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: amended page to redirect to dizzy page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Dizzy]]&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Technical_documentation&amp;diff=14365</id>
		<title>Technical documentation</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Technical_documentation&amp;diff=14365"/>
				<updated>2007-02-25T09:54:19Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: added cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Internal components ==&lt;br /&gt;
* [[Arnold_V_specs]] - Arnold V (CPC+) Technical Specification&lt;br /&gt;
* [[I/O Port Summary]] - map of all known I/O ports of the CPC&lt;br /&gt;
* [[Serial interface]] - how to use the DART and 8253 chips of an Amstrad-compatible serial interface&lt;br /&gt;
* [[AY-3-8912]] - Sound chip / keyboard controller&lt;br /&gt;
* [[CRTC]] - Video chip&lt;br /&gt;
* [[Gate Array]] - Custom chip (frequency generation, colors, bank switching)&lt;br /&gt;
* [[PIO]] - I/O controller&lt;br /&gt;
&lt;br /&gt;
== Hardware extensions ==&lt;br /&gt;
&lt;br /&gt;
* [[Programming:SYMBiFACE II|SYMBiFACE II]]&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
&lt;br /&gt;
* [[Disc format]]s&lt;br /&gt;
* [[Format:SGX (SymbOS graphic files)|SGX (SymbOS graphic files)]]&lt;br /&gt;
* [[Format:VID (SymbOS video files)|VID (SymbOS video files)]]&lt;br /&gt;
&lt;br /&gt;
== Howto's ==&lt;br /&gt;
&lt;br /&gt;
* [[Changing the drive belt]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Where_to_learn%3F&amp;diff=14364</id>
		<title>Where to learn?</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Where_to_learn%3F&amp;diff=14364"/>
				<updated>2007-02-25T09:51:45Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: added cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Note: This article was originally [http://www.cpczone.net/boards/viewtopic.php?t=1102 a post at the CPC Zone forums]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Well, here's some info that I hope will be useful to both you and others. I know very little about the MSX though, this is mostly about the CPC, although the Z80 assembler is the same for all computers; read on.&lt;br /&gt;
&lt;br /&gt;
First you need to make up your mind on what programme/game you are going to make. BASIC offers easiness and stability and quick development. Assembly code runs fast, but takes a while (so to speak) to write.&lt;br /&gt;
&lt;br /&gt;
On the CPC there's a choice of writing your program in assembler only, in a combination of assembler and BASIC, or in BASIC only (or of course in some other language(s)). You can use a BASIC compiler for speeding up BASIC code. FABACOM compiler speeds up a BASIC program by about a factor of 8. However there are no BASIC sprite routines; these have to be written in assembly anyway or use some ready-made routines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assembly ==&lt;br /&gt;
=== What assembly is ===&lt;br /&gt;
&lt;br /&gt;
I think you could divide the problem of low level coding into three distinct parts.&lt;br /&gt;
&lt;br /&gt;
# Z80 assembly language &amp;lt;br&amp;gt;&lt;br /&gt;
# Assembler syntax &amp;lt;br&amp;gt;&lt;br /&gt;
# CPC specifics (memory map, firmware (i.e. OS) and hardware)&lt;br /&gt;
&lt;br /&gt;
By saying &amp;quot;assembly&amp;quot;, &amp;quot;assembler&amp;quot; or &amp;quot;asm&amp;quot; (for short) 1. and 2. get intermixed and sometimes confuse people. By saying &amp;quot;assembly&amp;quot; the connotations point more to the z80 assembly language (it's commands, a.k.a. &amp;quot;mnemonics&amp;quot;. This is source code.); this is a mirror of the z80 architecture as every mnemonic has a direct machine code equivalent (i.e. object code). &amp;quot;Assembler&amp;quot; is a term more properly used for a full-blown program that gets the work done of converting source code into machine code and adds its own made-up commands (which are words that look like z80 mnemonics, but are actually only offered for convenience by the assembler) or directives (words that set up and take care of various things) in the syntax for ease of programming. &amp;quot;asm&amp;quot; may mean both.&lt;br /&gt;
&lt;br /&gt;
Also how a CPC does something, like printing a character on the screen depends on its firmware and hardware and how its memory is organized and used by the firmware, hardware and user-programs. The MSX has totally different hardware so here's where your code starts to differentiate. Since most of the asm code is general purpose, this is why Spectrum ports were so easy to make; just use different screen, sound and keyboard drivers and voila... Of course code that is specifically written for the CPC will take more advantage of its hardware (it will be less portable/general-purpose but the programme/game has the potential to run faster and have more features).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Z80 assembly language reference documentation (not a tutorial) ===&lt;br /&gt;
&lt;br /&gt;
For general info on the Z80, your best bet I think is Sean Young's (an MSX emulator author) pdf's. These are not tutorials, but contain a list of every z80 mnemonic and how it works (i.e. what parameters it takes and where it stores the result, if there is one.) You should use these mostly for reference, rather for learning.&lt;br /&gt;
&lt;br /&gt;
Pretty complete documentation on the z80, but not a tutorial: &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.myquest.nl/z80undocumented/z80-documented-v0.91.pdf The Undocumented Z80 Documented v0.91 (pdf)]&lt;br /&gt;
&lt;br /&gt;
An older version of this file may be found here: &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.kjthacker.f2s.com/docs/z80.pdf Z80 documentation by Sean Young] (basically chapters 8 &amp;amp; 9 from the above document).&lt;br /&gt;
&lt;br /&gt;
A couple short documents that's more of the same thing: &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.ticalc.org/archives/files/fileinfo/128/12883.html The Complete Z80 Instruction Reference] &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.ticalc.org/archives/files/fileinfo/1/109.html Z80 Microprocessor Instruction Set Summary]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have a look in the latter files, you'll see that there are Z80 commands for moving things around (mostly LD, LDI, PUSH and POP), adding &amp;amp; subtracting &amp;amp; increment &amp;amp; decrement, logical operations, bit operations (bit tests, shifts, rotates), comparing two values &amp;amp; jumps (goto's) &amp;amp; calls ... basically that's all.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What instruction to use depends on two things:&lt;br /&gt;
&lt;br /&gt;
# What you need to do. e.g. You need to add two 8-bit numbers, you use 8-bit addition. You need to add 1 to an 8-bit number, then you increment it by 1. You can do these two things (addition and increment) for 16-bit numbers too.&lt;br /&gt;
# What the Z80 is able to do. It just can't do some things, for example it can't multiply two numbers. You'll need to use a multiplication routine for that. You can add a 16-bit value to the HL register pair, but you can't add a 16-bit value to any other register pair (like BC or DE). In order to get around this you'll have to move data around like exchanging the values of registers or saving data into other registers or on the stack or in a memory location. All CISC processors are full of such quirks (they are not &amp;quot;orthogonal&amp;quot;, which means you can't combine every command with every possible parameter type(s). Some commands only take specific parameters and you have to live with that).&lt;br /&gt;
&lt;br /&gt;
Assembler is in a class of languages considered error-prone, so you need to take care that your program is stable. Also, by learning z80 assembler you make a step forward for learning x86 assembler since this is a related family of processors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Z80 Assembly tutorial ===&lt;br /&gt;
&lt;br /&gt;
So there's the Z80 general stuff that you can learn in any Z80 tutorial. A good tutorial I know of is the [http://www.ticalc.org/pub/text/z80/z80asmg.zip Independent Z80 Assembly Guide]. Available online at [http://cobb.host.sk/z80guide/index.htm http://cobb.host.sk/z80guide/index.htm]. It &amp;quot;was written in a way that it can be used for ANY Z80 calculator or computer&amp;quot;. You can use all of this code with a CPC or CPC emulator and it will work. No graphics, sound, file or input routines are included of course; all this is CPC specific, but once you've learnt some of the general z80 stuff, then you'll be able to access the CPC's specific features. I'd recommend using WinAPE's built-in assembler, assemble everything in CPC's memory and then check the results with WinAPE's debugger (or in BASIC with peeks and pokes and/or short BASIC programs). Just put a&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;.org #4000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in front of each example, and a &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ret&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if necessary at the end, assemble and then use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;call #4000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from BASIC to run the machine code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You don't need to know everything in the above tutorial to get you started. I'd say &amp;quot;The Basics&amp;quot; and &amp;quot;Simple Structures&amp;quot; chapters, the &amp;quot;Moving Data Blocks&amp;quot; paragraph and then the multiplication stuff (or skip that and just use a ready-made multiplication routine for now).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some useful Z80 links:&lt;br /&gt;
* [http://www.ticalc.org/pub/text/z80/ Z80 Documentation]&lt;br /&gt;
* [http://icarus.ticalc.org/articles/z80_faq.html z80 faq]&lt;br /&gt;
* [http://www.kjthacker.f2s.com/docs/z80.html Some features of the Z80 (the Flags and LDIR are the more important)]&lt;br /&gt;
* [http://www.kjthacker.f2s.com/docs/mult.html Multiplication with the Z80]&lt;br /&gt;
&lt;br /&gt;
Really &amp;quot;heavy&amp;quot; official Zilog documentation:&lt;br /&gt;
* [http://www.myquest.nl/z80undocumented/z80cpu_um.pdf]Z80 Family CPU User Manual]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Assembler syntax ===&lt;br /&gt;
&lt;br /&gt;
That tutorial teaches everything about Z80 assembly, but not much in the way of what is not actually a z80 mnemonic (e.g. LD) but an assembler command (e.g. DEFB). I think most directives don't even get a mention, like how to tell the assembler where to put the object code.&lt;br /&gt;
&lt;br /&gt;
Assembly on the CPC is usually MAXAM compatible (like WinAPE's assembler) since that assembler (MAXAM) set a standard on the CPC. (I personally use the WinAPE built-in assembler. You might also like Pasmo which has a feature similar to using local variables in high level language subroutines. In most assemblers all variables are global.) So in CPC assembly, directives like ORG, LIMIT, INCLUDE, EQU, END, BYTE - TEXT - DEFB - DB, WORD - DEFW - DW, RMEM - DEFS - DS, etc. usually depend on how MAXAM defines them. These commands are not actual Z80 commands, but assembler commands/directives. Assembler commands/directives define where to put the compiled code, they define constants, they tell the assembler to include other source files or header files, where and how to reserve space for and how to name variables, etc. Same goes for macros; some assemblers offer the possibility to define and use these for convenience, but they are not part of the z80 mnemonics. Thus macros may result in a little slower code than hand-optimized code.&lt;br /&gt;
&lt;br /&gt;
* [http://www.kjthacker.f2s.com/docs/maxam.pdf Maxam Documentation by Arnor Ltd]&lt;br /&gt;
* [http://www.kjthacker.f2s.com/docs/maxam15.pdf Maxam 1.5 Supplementary Documentation by Arnor Ltd]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The CPC ==&lt;br /&gt;
=== CPC memory layout and usage ===&lt;br /&gt;
&lt;br /&gt;
Only 64K is directly accessible by the Z80. On the CPC architecture the last 16K is by default used as the screen data (addresses &amp;amp;C000 to &amp;amp;FFFF). Addresses 0 to &amp;amp;170 and HIMEM+1 to &amp;amp;BFFF is used by the Firmware, BASIC and AMSDOS ROM's. Himem is a Locomotive BASIC variable that reports the highest available free memory location when the CPC boots up. By lowering this value, you assign less space for the BASIC part of your program and it's BASIC data (strings, variables, arrays). The rest (from the new HIMEM's value up to the initial HIMEM value when the computer boots up) can be used by your machine code and its data. You alter the HIMEM value by e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;MEMORY &amp;amp;2000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from BASIC. Obviously it shouldn't be lower than &amp;amp;170 or higher than HIMEM's initial value. (Sometimes I personally don't use this at all. If I compile something at &amp;amp;4000 and my BASIC program is small, then I just don't bother with MEMORY and HIMEM because usually nothing gets overwritten.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CPC Hardware &amp;amp; Firmware ===&lt;br /&gt;
&lt;br /&gt;
Once you're through learning the z80 features and z80 assembly syntax, you'll have to learn a little (or a lot) about the CPC Hardware and how it works. You may also like to use some of the ready made routines offered by the CPC OS (the &amp;quot;Firmware&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
For the CPC specifics I believe your number one source of information should be [http://www.cpctech.org.uk/ The Unofficial Amstrad WWW Resource], especially the documents and source code sections. &lt;br /&gt;
&lt;br /&gt;
If you'd like to put some graphics (like tiles and sprites) on the screen you'll need some ready-made routines or start learning on how the CPC's screen works and write your own ones.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The firmware documentation:&lt;br /&gt;
[ftp://ftp.nvg.ntnu.no/pub/cpc/docs/firmware.zip The Amstrad CPC Firmware Guide] (in .dsk, text and pdf - you have to be a little patient with this link) which describes the ROM routines for loading files, printing characters on the screen, reading keyboard input, drawing lines, using floats/reals and more. It also describes how and what memory is used by the OS. Also online at: [http://www.cantrell.org.uk/david/tech/cpc/cpc-firmware/ http://www.cantrell.org.uk/david/tech/cpc/cpc-firmware/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BASIC ==&lt;br /&gt;
=== BASIC and BASIC compilers ===&lt;br /&gt;
&lt;br /&gt;
[http://www.amstradcg.nl/cpcbib.html CPC 664 user's manual]. In case you know some Locomotive BASIC (or you'd wish to learn) it contains general info on the computer along with some short Locomotive BASIC tutorials and full BASIC reference. (There's also a 464 OCR'd .pdf if anyone can upload it somewhere.)&lt;br /&gt;
&lt;br /&gt;
Here's an ok BASIC compiler: &amp;lt;br&amp;gt;&lt;br /&gt;
[ftp://ftp.nvg.ntnu.no/pub/cpc/utils/cpc/fabacom.zip FABACOM/FAST BASIC COMPILER], it compiles Locomotive BASIC source. It seems to not like some commands or parameters of commands. You'll know if your program crashes.&lt;br /&gt;
&lt;br /&gt;
There's at least another two Compilers that are supposed to compile Locomotive BASIC code, but I haven't tried them: &amp;lt;br&amp;gt;&lt;br /&gt;
[[Laser BASIC Compiler]] and a french BASIC compiler called Typhon. Both can be found at planetemu.net [http://www.planetemu.net/?section=recherche&amp;amp;recherche=Laser%20BASIC%20Typhon&amp;amp;type=Tous%20les%20mots&amp;amp;rubrique=roms here].&lt;br /&gt;
&lt;br /&gt;
Sean McManus has a nice BASIC tutorial including some assembler routines at: &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.sean.co.uk/books/amstrad/index.shtm Sean's Amstrad CPC homepage]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Other languages ==&lt;br /&gt;
&lt;br /&gt;
A VB-style compiler is supposedly coming soon for SymbOS.&lt;br /&gt;
&lt;br /&gt;
A list of languages available on the CPC: &amp;lt;br&amp;gt;&lt;br /&gt;
[[Programming software]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== A somewhat advanced example: How to use Locomotive BASIC &amp;amp; your own pipe commands ==&lt;br /&gt;
&lt;br /&gt;
You can use this for all asm source you have available, like for the tutorial source code.&lt;br /&gt;
&lt;br /&gt;
When calling some asm code from BASIC, you would use something like: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;10 CLS &amp;lt;br&amp;gt;&lt;br /&gt;
20 MEMORY &amp;amp;3FFF &amp;lt;br&amp;gt;&lt;br /&gt;
30 CALL &amp;amp;4000 &amp;lt;br&amp;gt;&lt;br /&gt;
40 END&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Call command calls a machine code routine. If there's nothing at address &amp;amp;4000 then the computer will probably crash.&lt;br /&gt;
&lt;br /&gt;
When you assemble a z80 program it's important to instruct the assembler as to where it should put the resultant machine code. You do this by using the ORG assembler directive, like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;org #4000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for the BASIC code above. If you have several machine code routines that you would like to call from BASIC then where to call depends on where the routine you want to call starts in memory. However calculating or copying and typing in specific addresses is cumbersome because each time you reassemble your program these memory locations may also change.&lt;br /&gt;
&lt;br /&gt;
The easiest way for calling machine code routines from BASIC is to set up a pipe-commands table. These are similar to the |DIR, |B, |CPM, etc. AMSDOS commands. How to do this is described in official Amstrad documentation: [http://www.kjthacker.f2s.com/docs/manual/s968se10.pdf SOFT 968 Section 10 (Expansion ROMs, Resident System Extensions and RAM Programs)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example, start up WinAPE, press F6, create a New File from the assembler's File menu and copy and paste this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
KL_LOG_EXT	equ	&amp;amp;bcd1&lt;br /&gt;
&lt;br /&gt;
org #4000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INITIALIZE: LD HL,WORK_SPACE ;RSX power-up Routine&lt;br /&gt;
	LD BC,RSX_TABLE&lt;br /&gt;
	JP KL_LOG_EXT&lt;br /&gt;
&lt;br /&gt;
WORK_SPACE: DEFS 4 ;Area for Kernel to use&lt;br /&gt;
&lt;br /&gt;
RSX_TABLE: DEFW NAME_TABLE&lt;br /&gt;
&lt;br /&gt;
jp print&lt;br /&gt;
jp multiply&lt;br /&gt;
jp mem_move&lt;br /&gt;
&lt;br /&gt;
NAME_TABLE:&lt;br /&gt;
	defb 'PRIN','T'+#80&lt;br /&gt;
	defb 'MULTIPL','Y'+#80&lt;br /&gt;
	defb 'MEMMOV','E'+#80&lt;br /&gt;
	DEFB #00&lt;br /&gt;
&lt;br /&gt;
.print&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
.multiply&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
.mem_move&lt;br /&gt;
ret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assemble and type&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Call &amp;amp;4000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from BASIC. Then you can call each of these routines from BASIC by name, like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;|PRINT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that there's no code for all three commands (|PRINT, |MULTIPLY, |MEMMOVE) in this example, they just ret-urn to BASIC. You'll have to write the code for each command between each label and it's RET mnemonic or paste some existent code and rename accordingly the command names (below the NAME_TABLE label) and the jump table (the jp commands). Every jp corresponds one-to-one with an entry in the NAME_TABLE; the order is significant. NAME_TABLE entries must be all upper case with no underscores or spaces.&lt;br /&gt;
&lt;br /&gt;
Also you'd probably need to supply a number of parameters to each of the routines like you would in a high-level language function call. In this case A contains the number of parameters and (IX+offset) points to each parameter (each parameter has a word width so offset increases by 2).&lt;br /&gt;
&lt;br /&gt;
If your code is 100% assembler you don't need all of this. Just Call to some memory location and never RET-urn to BASIC.&lt;br /&gt;
&lt;br /&gt;
[[Category: Programming]]&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:Samantha_Fox_Slideshow&amp;diff=14332</id>
		<title>Talk:Samantha Fox Slideshow</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:Samantha_Fox_Slideshow&amp;diff=14332"/>
				<updated>2007-02-18T18:00:39Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: revert - spam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=User:C2r&amp;diff=14314</id>
		<title>User:C2r</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=User:C2r&amp;diff=14314"/>
				<updated>2007-02-17T11:58:11Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello, I'm Chris and am adding this text so that my name doesn't appear in red!&lt;br /&gt;
&lt;br /&gt;
I own a 464, 664, and 6128 and a whole host of random peripherals.&lt;br /&gt;
&lt;br /&gt;
Rather annoyingly I can't get tapes to load on the 6128 at the moment, despite them working on the 664.&lt;br /&gt;
&lt;br /&gt;
Oh yeah, I live in Hertfordshire in the UK.&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:Amstrad_Action&amp;diff=14313</id>
		<title>Talk:Amstrad Action</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:Amstrad_Action&amp;diff=14313"/>
				<updated>2007-02-17T11:47:42Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: /* Digi-Alt AA scans */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Digi-Alt AA scans ==&lt;br /&gt;
&lt;br /&gt;
....doesn't appear to be working...  any ideas? [[User:C2r|C2r]] 23:18, 14 February 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
:Ahhh yes, it's gone offline for a while now... we're looking into uploading them to the Wiki server... [[User:Gryzor|Gryzor]]&lt;br /&gt;
&lt;br /&gt;
::Excellent- I've got most of them archived on my PC, as I did a lot of the scanning - so if you're missing any give us a shout. [[User:C2r|C2r]] 12:47, 17 February 2007 (CET)&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:Amstrad_Action&amp;diff=14285</id>
		<title>Talk:Amstrad Action</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:Amstrad_Action&amp;diff=14285"/>
				<updated>2007-02-14T22:18:37Z</updated>
		
		<summary type="html">&lt;p&gt;C2r: Digi-Alt AA scans&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Digi-Alt AA scans ==&lt;br /&gt;
&lt;br /&gt;
....doesn't appear to be working...  any ideas? [[User:C2r|C2r]] 23:18, 14 February 2007 (CET)&lt;/div&gt;</summary>
		<author><name>C2r</name></author>	</entry>

	</feed>