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

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Mittwintermeeting_12&amp;diff=100593</id>
		<title>Mittwintermeeting 12</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Mittwintermeeting_12&amp;diff=100593"/>
				<updated>2018-01-07T19:39:16Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Mittwintermeeting goes straight to the 12th edition in Kirchen / Germany&amp;lt;br&amp;gt;&lt;br /&gt;
Over the last years, the Meeting has grown as a place where people from all the different home-computer&lt;br /&gt;
systems of the 80's can come together for a nice weekend. &lt;br /&gt;
&lt;br /&gt;
For now, we cover Amstrad, Atari, Acorn, Commodore, MSX and more. Looking forward to grow even further :) &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
As in the last time, the party will be held in a blockhouse directly at the eastborder of the Westerwald in Kirchen / Germany.&amp;lt;br&amp;gt;&lt;br /&gt;
Like everytime everyone who is interested in old homecomputers is very welcome!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''The Meeting takes place from 26. Jan 2018 to 28. Jan 2018'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Party-Place ==&lt;br /&gt;
&lt;br /&gt;
DRK Vereinshaus Kirchen&amp;lt;br&amp;gt;An der Buswende (Dorfstraße 80)&amp;lt;br&amp;gt;57548 Kirchen&amp;lt;br&amp;gt;Germany&amp;lt;br&amp;gt;GeoCoords: (longitude/latitude)&amp;amp;nbsp;:&amp;amp;nbsp; 7°54'40.84&amp;quot;E , 50°48'49.74&amp;quot;N &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
If you have any more questions please email me at&amp;amp;nbsp; m (dot) huesch (at) gmx (dot) net&amp;amp;nbsp;!&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accommodation == &lt;br /&gt;
&lt;br /&gt;
    * Hotel &amp;quot;zum weißen Stein&amp;quot; (single bedroom EUR 65,00)&lt;br /&gt;
    * bring your own Airbed and sleep at the party place (EUR 0) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Expected Participants ==&lt;br /&gt;
&lt;br /&gt;
*[[Dr.Zed|Dr.Zed]]&lt;br /&gt;
*[[Prodatron|Prodatron]]&lt;br /&gt;
*[[Beetle]]&lt;br /&gt;
*Thomas W.&lt;br /&gt;
*[[Insane]]&lt;br /&gt;
*[[Shining]]&lt;br /&gt;
*[[TFM]] - (if we can share gas money and car from the south)&lt;br /&gt;
*[[Tolkin]] - (and yes TFM, i can give you a lift)&lt;br /&gt;
*[[Ingo]]&lt;br /&gt;
*[[Martin]]&lt;br /&gt;
*[[Mr. AMS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:CPC events]]&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

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

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:VDOS&amp;diff=74536</id>
		<title>Talk:VDOS</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:VDOS&amp;diff=74536"/>
				<updated>2012-02-25T15:12:58Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: Created page with &amp;quot;Die in den Vortex-Kästchen verbauten ROMs sind doch verschlüsselt, das erste Byte oder zumindest ein Bit darin ist umgedreht oder so? Gesteuert wird der Decoder über das M1-Si...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die in den Vortex-Kästchen verbauten ROMs sind doch verschlüsselt, das erste Byte oder zumindest ein Bit darin ist umgedreht oder so? Gesteuert wird der Decoder über das M1-Signal. Ist aber alles nur Halbwissen, aus dunkler Erinnerung. TFM, weisst Du da was?&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=VDOS&amp;diff=74344</id>
		<title>VDOS</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=VDOS&amp;diff=74344"/>
				<updated>2012-02-19T16:58:00Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The disc operating system VDOS was developped by the german company [[Vortex]].&lt;br /&gt;
&lt;br /&gt;
It was provided for use with the [[Vortex Disc Drives]] from [[Vortex]] (F1-D, F1-S, F1-X, M1-D, M1-S or M1-X).&lt;br /&gt;
&lt;br /&gt;
VDOS was supplied on an [[EPROM]], and was released in 3 versions:&lt;br /&gt;
&lt;br /&gt;
* VDOS 1.0&lt;br /&gt;
* VDOS 2.0&lt;br /&gt;
* VDOS 2.11&lt;br /&gt;
&lt;br /&gt;
Further there were German and English versions of this ROMs.&lt;br /&gt;
&lt;br /&gt;
The VDOS ROM also contained a machine language monitor.&lt;br /&gt;
&lt;br /&gt;
VDOS supported as first DOS the Vortex format, which become a standard format later on.&lt;br /&gt;
&lt;br /&gt;
== Manual ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:Vortex_Vdos_2.0_Manual.pdf|Vortex Vdos 2.0 Manual]] (pdf) {{DE}} (also describes how to upgrade from VDOS 1.0 to 2.0)&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:Vortex10.zip| V-DOS 1.0 ROM]]&lt;br /&gt;
&lt;br /&gt;
* [[Media:Vortex20.zip| V-DOS 2.0 ROM]]&lt;br /&gt;
&lt;br /&gt;
* [[Media:VDOSisPD.pdf| A statement from the german company Vortex Computersysteme GmbH, VDOS is Public Domain]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Operating System]] [[Category:Expansion ROM]] [[Category:Manual]]&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=VDOS&amp;diff=74343</id>
		<title>VDOS</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=VDOS&amp;diff=74343"/>
				<updated>2012-02-19T16:57:24Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: /* Download */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The disc operating system VDOS was developped by the german company [[Vortex]].&lt;br /&gt;
&lt;br /&gt;
It was provided for use with the [[Vortex Disc Drives]] from [[Vortex]] (F1-D, F1-S, F1-X, M1-D, M1-S or M1-X).&lt;br /&gt;
&lt;br /&gt;
VDOS was supplied on an [[EPROM]], and was released in 3 versions:&lt;br /&gt;
&lt;br /&gt;
* VDOS 1.0&lt;br /&gt;
* VDOS 2.0&lt;br /&gt;
* VDOS 2.11&lt;br /&gt;
&lt;br /&gt;
Further there were German and English versions of this ROMs.&lt;br /&gt;
&lt;br /&gt;
The VDOS ROM also contained a machine language monitor.&lt;br /&gt;
&lt;br /&gt;
VDOS supported as first DOS the Vortex format, which become a standard format later on.&lt;br /&gt;
&lt;br /&gt;
== Manual ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:Vortex_Vdos_2.0_Manual.pdf|Vortex Vdos 2.0 Manual]] (pdf) {{DE}} (also describes how to upgrade from VDOS 1.0 to 2.0)&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
* [[Media:Vortex10.zip| V-DOS 1.0 ROM]]&lt;br /&gt;
&lt;br /&gt;
* [[Media:Vortex20.zip| V-DOS 2.0 ROM]]&lt;br /&gt;
&lt;br /&gt;
* [[Media:VDOSisPD-pdf| A statement from the german company Vortex Computersysteme GmbH, VDOS is Public Domain]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Operating System]] [[Category:Expansion ROM]] [[Category:Manual]]&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=File:VDOSisPD.pdf&amp;diff=74342</id>
		<title>File:VDOSisPD.pdf</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=File:VDOSisPD.pdf&amp;diff=74342"/>
				<updated>2012-02-19T16:54:59Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: a statement of the company Vortex Computersysteme GmbH from 1995, VDOS is Public Domain.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;a statement of the company Vortex Computersysteme GmbH from 1995, VDOS is Public Domain.&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Locomotive_BASIC&amp;diff=73316</id>
		<title>Locomotive BASIC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Locomotive_BASIC&amp;diff=73316"/>
				<updated>2012-02-05T11:03:58Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: Removed the command SUB. Locomotive BASIC doesn't know this command.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For other BASIC language versions see the [[:Category:BASIC]]&lt;br /&gt;
&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;
It was availlable directly from in-built ROMs on [[CPC old generation]] and on the [[Plus System Cartridge]] for the [[Plus]] range.&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;
If you are interested in more information about the different versions of the CPC's BASIC and the technical details, you can have a look at the article &amp;quot;[[Technical information about Locomotive BASIC]]&amp;quot;.&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;
==== &amp;lt;code&amp;gt;AFTER &amp;lt;/code&amp;gt;‹time delay›[&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;‹timer number›]&amp;lt;code&amp;gt; GOSUB &amp;lt;/code&amp;gt;‹line number› ====&lt;br /&gt;
: Waits for ‹time delay›/50 seconds and then jumps to the subroutine at ‹line number›. There are 4 delay timers from 0 to 3 which can be specified with ‹timer number›. If omitted ‹timer number› defaults to 0.&lt;br /&gt;
: In the case of parallel task has 3 the highest and 0 the lowest priority.&lt;br /&gt;
: With DI or EI you can disable or enable the timing interrupt. With REMAIN &amp;lt;timer number&amp;gt; you can also disable an AFTER or EVERY construct and stores the &amp;quot;remaining&amp;quot; time (&amp;gt; REMAIN)&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;AUTO &amp;lt;/code&amp;gt;[‹line number›][&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;‹increment›] ====&lt;br /&gt;
: Automatically generates line numbers starting at ‹line number› with ‹increment› after each entered line number. Use '''[ESC]''' to leave AUTO mode. Default values for ‹line number› and ‹increment› are 10.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;AUTO 100,5 :REM generates line numbers 100, 105, 110...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;BORDER &amp;lt;/code&amp;gt;‹colour›[&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;‹colour›] ====&lt;br /&gt;
: Changes the colour of the border. If the second argument is supplied the border flashes between the two colours.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;CALL &amp;lt;/code&amp;gt;‹address expression›[&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;‹list of: parameter›] ====&lt;br /&gt;
: Allows a machine code routine to be called by BASIC. Variables, string values and constants can be passed to the routine. Values of any supported type can be passed back by supplying a variable with &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt; in front of it. This passes the address of the variable to the routine although it doesn't implicitly know the data type.&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;CALL 0 :REM resets the computer completely&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;CAT&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Displays the names of the files on the tape or disc. Tape files are displayed in the order they are encountered. Disc files are sorted alphabetically by ACSII code. Only files matching the current user are displayed. Files marked as system are not displayed.&lt;br /&gt;
: Examples:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;CAT :REM lists all disc files in alpha-numeric (ASCII) order&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;|TAPE :CAT :REM lists names of all tape files in their storage order&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;CHAIN &amp;lt;/code&amp;gt;‹file name›[&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;‹line number expression›] ====&lt;br /&gt;
&lt;br /&gt;
:Enables the specified program to be loaded and RUN automatically. If the optional parameter ‹line number expression› is specified, the program execution will commence from that line.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;CHAIN MERGE &amp;lt;/code&amp;gt;‹file name›[&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;‹line number expression› | [&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;[‹line number expression›]&amp;lt;code&amp;gt;,DELETE&amp;lt;/code&amp;gt; ‹line number range›]] ====&lt;br /&gt;
&lt;br /&gt;
:Loads the specified program from tape or disc, merges it into the program in memory, and starts execution of the merged program. The parameter &amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt; ‹line number range› is used to delete part of the original program before running it, if required.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;CLEAR&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Clears all variables from memory, leaving the program in memory unchanged. All open files are abandoned.&lt;br /&gt;
: The command clear inside a subroutine (GOSUB... RETURN) will also clear the &amp;quot;stack pointer&amp;quot; address of the gosub heap. That means that a RETURN won't work and a GOTO has to be used instead.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;CLG &amp;lt;/code&amp;gt;[‹masked ink›] ====&lt;br /&gt;
: Clears the graphics screen to colour specified by ‹masked ink›. If parameter ‹masked ink› is not specified then the graphics screen is cleared to the colour specified by the GRAPHICS PAPER statement.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;CLOSEIN&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Closes any input file (tape or disc).&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;CLOSEOUT&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Closes any output file (tape or disc).&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;CLS&amp;lt;/code&amp;gt; [&amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;‹stream expression›]====&lt;br /&gt;
: Clears the window specified by ‹stream expression›. If ‹stream expression› is omitted it defaults to #0 (usually the whole screen). The text cursor of the stream is moved to the upper left corner.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;CONT&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: CONTinues program execution interrupted either by [ESC] [ESC] or as a result of STOP within a program. A program cannot be continued after being modified.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;CURSOR ‹expression›&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: ‹expression› must be either 0 or 1.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;DATA x1[,x2,x3...]&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;DEF&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;DEFINT letter range&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Forces all variables(s) starting with the specified letter(s) to be string variables. The s does not need to be added to DEFSTR variable names.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 DEFSTR N - sets all variables starting with letter N as strings.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;DEFREAL&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;DEFSTR&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Sets the default for variable(s) with the specified first letter(s) to integer. The letter range could be an inclusive range A-Z&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 DEFINT F,S ..... (or 10 DEFINT A-Z)&lt;br /&gt;
20 FIRST=111.11:SECOND=22.2&lt;br /&gt;
30 PRINT FIRST,SECOND - prints 111                 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;DEG&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;DELETE [first line][-[last line]]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Deletes the current program completely (without arguments) or only the given line or line range. Even&lt;br /&gt;
: &amp;lt;code&amp;gt;DELETE -&amp;lt;/code&amp;gt;&lt;br /&gt;
: is legal, it has the same effect as&lt;br /&gt;
: &amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt;&lt;br /&gt;
: The lines specified do not have to exist, all lines matching the range will be deleted and having no matches does not cause an error.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;DI&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;DIM a[%|!|$](d1[,d2[,...]])&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Creates array &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; with single or multiple dimensions. You may optionally specify integer (&amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt;), real (&amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt;) or string (&amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;) type otherwise it defaults to the current type set for the first letter of the array name. &amp;lt;code&amp;gt;d1&amp;lt;/code&amp;gt; is size of first dimension-1, &amp;lt;code&amp;gt;d2&amp;lt;/code&amp;gt; is size of second dimension-1 and so on. &amp;lt;code&amp;gt;DIM x(10)&amp;lt;/code&amp;gt; will create an array with 11 elements, &amp;lt;code&amp;gt;x(0)&amp;lt;/code&amp;gt; is the first element, &amp;lt;code&amp;gt;x(10)&amp;lt;/code&amp;gt; is the eleventh and last. You can specify as many dimensions as will fit on one 255 character line, which is a maximum of 125. Trying to create an array that already exists will generate an &amp;lt;code&amp;gt;Array already dimensioned&amp;lt;/code&amp;gt; error. If an array is not specified by &amp;lt;code&amp;gt;DIM&amp;lt;/code&amp;gt; before being accessed, each dimension value defaults to 10. The maximum dimensions that can be created this way is three.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;DRAW x,y[,i1 | ,[i1],i2]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Draws a line from the current cursor position to position x,y. i1 specifies colour, i2 is the drawing style.&lt;br /&gt;
&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;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
: CLG 2&lt;br /&gt;
: DRAW 500,400,0 :REM draws a line from 0,0 to 500,400&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;DRAWR xr, yr, [[i1][,i2]]&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;EDIT line&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Copies one program line to screen in edition mode.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;EI&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Enable interrupts which have been disabled by DI&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;END&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Indicates end of program&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ENT&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ENV&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ERASE v1[% | ! | $][,v2[% | ! | $][,...]]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Erases the specified array(s) and frees the memory used. Must specify existing array(s) or an &amp;lt;code&amp;gt;Improper argument&amp;lt;/code&amp;gt; error will be generated.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ERL&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns the line number of the last error encountered.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ERROR i&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Returns the error message whose error code number is i.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;EVERY i[,t] GOSUB ln&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: BASIC branches to the subroutine at line ln every i/50 seconds.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;FILL i&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;FN&amp;lt;/code&amp;gt; ====&lt;br /&gt;
BASIC allows the program to define and use simple value returning functions. DEF FuNction is the definition part of this mechanism and creates program-specific function which works within the program in the same way as a function such a COS operates as a built-in function of BASIC. It may be invoked throughout the program. Variable types must be consistent and the DEF FN command should be written in part of the program outside the execution loop.&lt;br /&gt;
&lt;br /&gt;
Syntax : DEF FN&amp;lt;name&amp;gt;[(&amp;lt;formal parameters&amp;gt;)]=&amp;lt;general expression&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: ''&amp;quot;with the definition of...&amp;quot;''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 gn=9.80665&lt;br /&gt;
20 DEF FNgrv=s0+v0*t+0.5*gn*t^2&lt;br /&gt;
30 s0=0:v0=0:t=5&lt;br /&gt;
40 PRINT &amp;quot;...after&amp;quot;;t;&amp;quot;seconds your dropped stone falls&amp;quot;;FNgrv;&amp;quot;metres&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
''&amp;quot;the results are...&amp;quot;''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...after 5 seconds your dropped stone falls 122.58315 metres&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;FOR TO STEP NEXT&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;FRAME&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;GOSUB i&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;GOTO i&amp;lt;/code&amp;gt; ====&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;
: GOTO is the simplest form of a jump or creating a loop '''without''' condition controll.&lt;br /&gt;
: ''Example: (unconditional and endless loop)''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 PRINT &amp;quot;#&amp;quot;;&lt;br /&gt;
20 GOTO 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
: Combine the GOTO command with an IF...THEN...ELSE instruction for creating a condition-controlled loop with the '''test at the end'''. Helpful because the Locomotive Basic has no practical DO...WHILE... loop.&lt;br /&gt;
: ''Example: (condition at the end)''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 I=1&lt;br /&gt;
20 PRINT I&lt;br /&gt;
30 I=I+1&lt;br /&gt;
40 IF I&amp;lt;25 THEN GOTO 10&lt;br /&gt;
50 END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;GRAPHICS&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;IF THEN ELSE&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Asks for a choice with the '''IF...THEN...ELSE''' statement.&lt;br /&gt;
: '''IF''' compares the entry condition in a logical way&lt;br /&gt;
: '''THEN''' contains instruction if the comparison is true&lt;br /&gt;
: '''ELSE''' contains instruction if it's false.&lt;br /&gt;
: '''Example:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 INPUT &amp;quot;guess a figure:&amp;quot;,f&lt;br /&gt;
20 IF f=10 THEN PRINT &amp;quot;right&amp;quot;: END: ELSE GOTO 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
: In case of nested choices there's a possibility to that with an IF...THEN instruction but not very recommended:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 INPUT &amp;quot;guess a figure:&amp;quot;,f&lt;br /&gt;
20 IF f=10 THEN PRINT &amp;quot;right&amp;quot;: END: ELSE IF f&amp;lt;10 THEN PRINT &amp;quot;too small&amp;quot; ELSE PRINT &amp;quot;too big&amp;quot;&lt;br /&gt;
30 GOTO 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:Other nested structures like IF...THEN...'''ELSE...ELSE''' won't work first because the Locomotive Basic only looks after the first ELSE instruction found and can't execute more single commands as a block for a certain condition in comparision to e.g. &amp;quot;PASCAL&amp;quot; &amp;gt; begin...end-block, &amp;quot;C&amp;quot; &amp;gt; {...}-block.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;INK&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;INPUT&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;KEY&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;LET&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Used to define variables. You don't need to use the ''LET'' command because it is just a command which was added for compatibility reasons.&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;
==== &amp;lt;code&amp;gt;LINE INPUT &amp;lt;/code&amp;gt;‹variable›[&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;‹variable›] ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;LIST &amp;lt;/code&amp;gt;[‹line number›][&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;[‹line number›]] ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;LOAD ‹file name›[&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;‹address›] ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;LOCATE x,y&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;MASK [i1][,i2]&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;MEMORY add&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Allocates the amount of memory to be used by BASIC by setting the address of the highest byte it may use.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;MERGE&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;MID$&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;MODE&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;MOVE x,y [[,i1][,i2]]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Moves the graphic cursor to position x,y. The parameter i1 may be used to change the pen (drawing) colour. The parameter i2 specifies the logical colour, as in DRAW.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;MOVER&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;NEW&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ON BREAK CONT&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Prevents the interruption of program execution by the ESC key.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ON BREAK GOSUB ln&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Passes control to subroutine at line ln when ESC ESC pressed.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ON BREAK STOP&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Restores normal function of ESC key during program execution.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ON ERROR GOTO ln&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Passes the control to line ln if an error is detected in the program.&lt;br /&gt;
&lt;br /&gt;
: ON ERROR GOTO 0, Turns of the error trap, and restores normal error processing.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ON variable GOTO ln x1, x2, x3, x4, ...&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: In case of passing more choices '''ON variable GOTO ln x1, x2, x3, x4, ...''' points to a table with the jumping target.&lt;br /&gt;
: '''Example:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 PRINT &amp;quot;1. LOAD - 2. SAVE - 3. EXIT&amp;quot;&lt;br /&gt;
20 INPUT choice&lt;br /&gt;
30 ON choice GOTO 1000, 2000, 3000&lt;br /&gt;
40 CLS: GOTO 10&lt;br /&gt;
1000 PRINT &amp;quot;1. LOAD&amp;quot;:END&lt;br /&gt;
2000 PRINT &amp;quot;2. SAVE&amp;quot;:END&lt;br /&gt;
3000 END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:In case that the variable ''choice'' won't fullfil the condition (in a range between line 0 and 65535) the next instruction will be executed (here: Line 40). If &amp;quot;choice&amp;quot; is smaller than 0 an error will occur.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ON variable GOSUB ln x1, x2, x3, x4, ...&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: In case of passing more choices targeting to SUBROUTINES '''ON variable GOSUB ln x1, x2, x3, x4, ...''' points to a jumping table.&lt;br /&gt;
: '''Example:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 PRINT &amp;quot;1. LOAD - 2. SAVE - 3. EXIT&amp;quot;&lt;br /&gt;
20 INPUT choice&lt;br /&gt;
30 ON choice GOSUB 1000, 2000, 3000&lt;br /&gt;
40 CLS: GOTO 10&lt;br /&gt;
1000 PRINT &amp;quot;1. LOAD&amp;quot;:RETURN&lt;br /&gt;
2000 PRINT &amp;quot;2. SAVE&amp;quot;:RETURN&lt;br /&gt;
3000 END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:In case that the variable ''choice'' won't fullfil the condition (in a range between line 0 and 65535) the next instruction will be executed (here: Line 40). If &amp;quot;choice&amp;quot; is smaller than 0 an error will occur.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;OPENIN &amp;quot;datafile&amp;quot;&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Opens the specified data file for reading. It have to be an ASCII file. ( The command closein closes reading data file. )&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;OPENOUT &amp;quot;datafile&amp;quot;&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Opens the specified data file for writing. It writes an ASCII file. (To close writing use the command closein.)&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ORIGIN&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;OUT add,i&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Outputs the value of i (0-255) to the I/O address add.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;PAPER&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;PEN&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;PLOT&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;PLOTR&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;POKE add&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Alters contents of memory location add to value i (0-255)&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;
==== &amp;lt;code&amp;gt;RAD&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;RANDOMIZE [seed]&amp;lt;/code&amp;gt; ====&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;
The algorithm used for randomizing is the following: the generator starts with the seed, adds 1, multiplies by 75 (fiddle factor), divides by 65537 and then uses the remainder -1.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;READ variable&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;RELEASE&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;REM [any text]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Introduces a comment.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;RENUM &amp;lt;/code&amp;gt;[‹newLine›][&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;‹oldLine› | &amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;[‹oldLine›]&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;‹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. Any parameter that is left out defaults to 10. It is important to note that ''jumps'' (&amp;lt;code&amp;gt;GOTO&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;GOSUB&amp;lt;/code&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;code&amp;gt;RENUM 100,20,5&amp;lt;/code&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;
==== &amp;lt;code&amp;gt;RESTORE [line]&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;RESUME&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;RETURN&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Terminates a subroutine and returns control to the line following the GOSUB call (see GOSUB)&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;RUN [line]&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;SAVE&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SOUND&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SPC&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SPEED&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SQ (channel)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&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;
&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;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;STOP&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;SWAP&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SYMBOL n,i1[,i2,i3,i4,i5,i6,i7,i8]&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;SYMBOL AFTER n&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;TAB&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;TAG [#st]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Allows text to print at graphics cursor position.&lt;br /&gt;
: see TAGOFF&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;TAGOFF [#st]&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Directs text to stream st printing it at previous text cursor position.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;TROFF&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Turns off the program flow trace (see TRON)&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;TRON&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Turns on the program flow trace for debugging. Causes the line number of each statement executed to be displayed.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;USING&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: The USING assignement defines the format of the PRINT output. Its appointment happens by characters where each has a certain meaning.&lt;br /&gt;
&lt;br /&gt;
'''Numbers / Figures'''&lt;br /&gt;
: the character: &lt;br /&gt;
:'''#''' stands for a figure between 0 - 9&lt;br /&gt;
:'''.''' stands for a decimal point&lt;br /&gt;
:'''+''' generates a positive sign if the value is positive&lt;br /&gt;
:'''-''' generates a negative sign if the value is nagative&lt;br /&gt;
:'''**''' generates a asterix for each empty &amp;quot;location&amp;quot; before the printed character&lt;br /&gt;
:'''$$''' generates a Dollar characters before the printed character (the same with the pound note)&lt;br /&gt;
:''',''' generates a comma every each three decimals (thousands per figure) and has to be set before the decimal point or at the end if without a decimal point.&lt;br /&gt;
:^ generates a scientific notation (with exponents) and a the end of the format appointment&lt;br /&gt;
&lt;br /&gt;
'''Strings'''&lt;br /&gt;
: the character:&lt;br /&gt;
:'''!''' prints out only the first character&lt;br /&gt;
:'''\xxx\''' prints out only with x-numbers defined length of the string (from left to right). x means a blank sign made with the space bar&lt;br /&gt;
:'''&amp;amp;''' the whole string is printed out as given (unknown function)&lt;br /&gt;
&lt;br /&gt;
: a print output (numbers) with &amp;quot;%&amp;quot; in the beginning shows that not enough positions has to be declared (at all or before the decimal point).&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 figure=123456789&lt;br /&gt;
20 word$=&amp;quot;Hello&amp;quot;&lt;br /&gt;
30 print using &amp;quot;+**,##########&amp;quot;;figure&lt;br /&gt;
40 print using &amp;quot;\   \&amp;quot;;word$&lt;br /&gt;
&lt;br /&gt;
creates following output:&lt;br /&gt;
&lt;br /&gt;
*****+12,345,679&lt;br /&gt;
Hel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;WAIT add, i1[,i2]&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;WHILE WEND&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;WIDTH&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;WINDOW&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;WRITE [#st,] v[$], v[$]&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;ZONE i&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;AND&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;MOD&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;NOT&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: '''NOT''' executes a bit for bit '''negation''' of the current value. The output is a 16-Bit-Word.&lt;br /&gt;
:&lt;br /&gt;
:'''Example:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 value1=1&lt;br /&gt;
20 value2=NOT value1&lt;br /&gt;
30 PRINT value2&lt;br /&gt;
run&lt;br /&gt;
-2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:for a better understanding...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 value1=1&lt;br /&gt;
20 PRINT HEX$(value1):PRINT BIN$(value1,8)&lt;br /&gt;
30 value2=NOT value1&lt;br /&gt;
40 PRINT HEX$(value2):PRINT BIN$(value2,8)&lt;br /&gt;
run&lt;br /&gt;
1&lt;br /&gt;
00000001&lt;br /&gt;
FFFE&lt;br /&gt;
1111111111111110&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;OR&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;XOR&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: [...]&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ABS (n)&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;ASC (s)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns ASCII code number of first character of string s&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ATN (n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Returns the arctangent of n.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;BIN$ (i1,[i2])&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;CHR$ (n)&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;CINT (n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns rounded up integer value of n between -32768 and 32767.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT CINT(3.8) - print 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;COPYCHR$ (st)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Copies character from current position in specified stream.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;COS (n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns cosine of n in degrees or radians (se DEG and RAD)&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;CREAL (n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Converts integer n to real numeric variable.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;DEC$(n, format)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Retruns the decimal string representation of n, according to the specified format (see PRINT USING)&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;DERR&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Gives the most recent error code number returned by [[Amsdos]].&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;EOF&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Checks to see if end of specified file has been reached during input. Returns 0 (false) until the end of file, then -1 (true)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: This example reads a file from disc and print it out on screen. Like the &amp;quot;TYPE&amp;quot; command in CP/M or &amp;quot;|TYPE,file&amp;quot; of the UTOPIA-ROM.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 OPENIN &amp;quot;text.txt&amp;quot;&lt;br /&gt;
20 WHILE NOT EOF&lt;br /&gt;
30 LINE INPUT#9,a$&lt;br /&gt;
40 PRINT a$&lt;br /&gt;
50 WEND&lt;br /&gt;
60 CLOSEIN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;ERR&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns the error code number of the last error encountered.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;EXP (i)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns the result of calculating e to the power i.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT EXP(1) - prints 2.71828183&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;FIX (n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Removes the fractional part of n (see INT)&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;FRE (n/se)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns the amount of unused memory, irrespective of the nature or value of the dummy argument inside the bracket.&lt;br /&gt;
&lt;br /&gt;
: Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT FRE(o) or PRINT FRE(&amp;quot;hello&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;HEX$ (i1, i2)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns a string hexadecimal digit representation of i1 (0-65535). The number of hex digits in the string is given by i2 (0-15)&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;HIMEM&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns address of the highest memory address used by BASIC.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;INKEY (i)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Checks to see if key number i is being pressed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Value returned          [SHIFT]        [CTRL]       Specified key&lt;br /&gt;
-1                      ignored        ignored      up&lt;br /&gt;
0                       up             up           down&lt;br /&gt;
32                      down           up           down&lt;br /&gt;
128                     up             down         down&lt;br /&gt;
160                     down           down         down&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;INKEY$&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Checkts the keyboard and returns the string character of the key pressed. The string character returned is normally assigned to a string variable. If no key pressed, a null string is returned.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;INP (add)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns value read from the I/O address add&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;INSTR&amp;lt;/code&amp;gt;  ====&lt;br /&gt;
&lt;br /&gt;
:INSTR ([startposition,]explored string, seeking string)&lt;br /&gt;
&amp;lt;blockquote&amp;gt;This function looks inside &amp;quot;explored string&amp;quot; after &amp;quot;seeking string&amp;quot; and return a number where the found string appear for the first time. Returns zero if not successfull. Startposition could be a figure between 1 and 255. &amp;lt;/blockquote&amp;gt;&amp;lt;pre&amp;gt;a$=&amp;quot;ABCD&amp;quot;:PRINT INTR(a$,&amp;quot;C&amp;quot;) - returns with &amp;quot;3&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;INT (n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: As in FIX if n is positive; if n is negative, it rounds it down.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT INT(3.99), INT(-3.99) - prints 3                      -4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;JOY (i)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns bit-significant value from specified joystick. i = 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit             Value returned&lt;br /&gt;
0(up)                  1&lt;br /&gt;
1(down)                2&lt;br /&gt;
2(left)                4&lt;br /&gt;
3(right)               8&lt;br /&gt;
4(fire 2)              16&lt;br /&gt;
5(fire 1)              32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;LEFT$ (se, i)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns a substring of se. The substring begins at the left-most character of se and contains i characters.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A$=&amp;quot;ABCDEFG&amp;quot;:PRINT LEFT$(A$,3) - prints ABC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;LEN (se)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns the number of characters in se (0 - 255)&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;LOG (n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns the natural logarithm (to base e) of n.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;LOG10 (n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns the logarithm to base 10 of n.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;LOWER$ (se)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns a copy of se in which all alphabetical characters are converted to lower case (see also UPPER)&lt;br /&gt;
&lt;br /&gt;
: Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT LOWER$(&amp;quot;A1B2c3&amp;quot;) - print a1b2c3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;MAX (list of n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns the maximum value from the given list.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT MAX(3,8,25,1,2,9) - prints 25&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;MIN (list of n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns the minimum value from the given list (see MAX)&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;PEEK (add)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns the contents of the specified memory location (0-65535)&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;PI&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns value of PI (3.14159265)&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;POS (#st)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns column number of print position relative to left edge of text window on stream st. st must be  specified.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT POS(#0) - prints 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;REMAIN (i)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns count remaining in delay timer i (0-3) then disables it.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;RIGHT$ (se,i)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns a substring of length i (0-255) characters from se, ending at the rightmost character of se.&lt;br /&gt;
&lt;br /&gt;
: Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT RIGHT$(&amp;quot;ABCDEFG&amp;quot;,3) - prints EFG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;RND [(n)]&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;ROUND (n[,i1])&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&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;
==== &amp;lt;code&amp;gt;SGN (n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Returns 1 if n is positive, 0 if n = 0, -1 if n is negative.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SIN (n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Returns sine of n in degree or radian mode (see DEG and RAD)&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SPACE$(i)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Creates a string containing i spaces (0-255)&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SQ (channel)&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;SQR (n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
: Returns the square root of n.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;STR$(n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns the string representation of number n.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;STRING$&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns i copies of the string character specified by s.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT STRING$(3,&amp;quot;*&amp;quot;) - prints ***&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;TAN (n)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns the tangent of n. The DEG and RAD commands can be used to force the result to either mode.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;TEST (x,y)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Moves the graphics cursor by x and y and returns the value of the ink at that position.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;TESTR (x,y)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Moves the graphics cursor by x and y relative to its current position and returns the value of ink at that position.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;TIME&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;UNT (add)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns an integer(-32768 to 32767) which is the two's complement of add.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PRINT UNT(&amp;amp;FF66) - prints -154&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;UPPER$(se)&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Gives copy of se with all alphabetic characters in upper case.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;VAL(se)&amp;lt;/code&amp;gt;  ====&lt;br /&gt;
&lt;br /&gt;
:Returns the numeric value (including signs) of first numeric character(s) in se. Returns 0 if se starts with a non-number. &lt;br /&gt;
:Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;PRINT VAL(&amp;quot;-12.34x&amp;quot;),VAL(&amp;quot;A-12&amp;quot;) - prints -12.34     0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:Exception: if &amp;lt;se&amp;gt; starts with &amp;quot;&amp;amp;amp;&amp;quot; + character (and it's between &amp;quot;A&amp;quot; and &amp;quot;F&amp;quot;) the whole character will be handled like a hexadezimal numeric character (...often used in DATA Loaders). The returning numeric value is a &amp;amp;nbsp;signed&amp;amp;nbsp;integer (16-Bit Word). &lt;br /&gt;
&amp;lt;pre&amp;gt;PRINT&amp;amp;nbsp;VAL(&amp;quot;&amp;amp;amp;A&amp;quot;) - returns a 10&lt;br /&gt;
&lt;br /&gt;
PRINT&amp;amp;nbsp;VAL(&amp;quot;&amp;amp;amp;7FFF&amp;quot;) - returns a 32767&lt;br /&gt;
&lt;br /&gt;
PRINT&amp;amp;nbsp;VAL(&amp;quot;&amp;amp;amp;8000&amp;quot;) - returns a -32768&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;VPOS (#st)&amp;lt;/code&amp;gt; ====&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;
==== &amp;lt;code&amp;gt;XPOS&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns the current horizontal (x) position of the graphics cursor.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;YPOS&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
: Returns the current vertical (y) position of the graphics cursor. &lt;br /&gt;
&lt;br /&gt;
''(Please, fill in. Looks like a lot of work ;-) ...)''&lt;br /&gt;
&lt;br /&gt;
== Error codes ==&lt;br /&gt;
&lt;br /&gt;
* 1 '''Unexpected NEXT''' - &amp;lt;code&amp;gt;NEXT&amp;lt;/code&amp;gt; encountered without matching &amp;lt;code&amp;gt;FOR&amp;lt;/code&amp;gt;.&lt;br /&gt;
* 2 '''Syntax Error''' - Typing error or incorrect punctuation.&lt;br /&gt;
* 3 '''Unexpected RETURN''' - &amp;lt;code&amp;gt;RETURN&amp;lt;/code&amp;gt; encountered when there was no active &amp;lt;code&amp;gt;GOSUB&amp;lt;/code&amp;gt;.&lt;br /&gt;
* 4 '''DATA exhaused''' - Trying to &amp;lt;code&amp;gt;READ&amp;lt;/code&amp;gt; data when data pointer has reached end of data.&lt;br /&gt;
* 5 '''Improper argument''' - The argument for a function is not legal (e.g. &amp;lt;code&amp;gt;PRINT SQR(-10)&amp;lt;/code&amp;gt;).&lt;br /&gt;
* 6 '''Overflow''' - The computer cannot handle integers smaller than -32768 (signed) or larger than 65535 (unsigned) or floating point numbers greater than &amp;amp;plusmn;1.7E38.&lt;br /&gt;
* 7 '''Memory full''' - Not enough free RAM available to complete the operation. Program too big or control structures too deeply nested.&lt;br /&gt;
* 8 '''Line does not exist''' - Attempt to &amp;lt;code&amp;gt;RUN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;GOTO&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;GOSUB&amp;lt;/code&amp;gt; a non-existent line number.&lt;br /&gt;
* 9 '''Subscript out of range''' - Value of a subscript in an array is outside of range specified by &amp;lt;code&amp;gt;DIM&amp;lt;/code&amp;gt; declaration or wrong number of dimensions supplied.&lt;br /&gt;
* 10 '''Array already dimensioned''' - Arrays can only be &amp;lt;code&amp;gt;DIM&amp;lt;/code&amp;gt;ensioned once within a program.&lt;br /&gt;
* 11 '''Division by zero''' - Trying to divide a number by zero.&lt;br /&gt;
* 12 '''Invalid direct command''' - Using a statement as a direct command which is not allowed outside a program, e.g. &amp;lt;code&amp;gt;DEF FN&amp;lt;/code&amp;gt;.&lt;br /&gt;
* 13 '''Type mismatch''' - Wrong data type encountered, string data instead of numeric value or vice versa.&lt;br /&gt;
* 14 '''String space full''' - String memory area is full.&lt;br /&gt;
* 15 '''String too long''' - String may not exceed 256 characters.&lt;br /&gt;
* 16 '''String expression too complex''' - A string expression needs to be broken down into smaller expressions.&lt;br /&gt;
* 17 '''Cannot CONTinue''' - &amp;lt;code&amp;gt;CONT&amp;lt;/code&amp;gt; can only be used if program was stopped by [ESC] or a &amp;lt;code&amp;gt;STOP&amp;lt;/code&amp;gt; in program - not after END. If the program is modified before issuing &amp;lt;code&amp;gt;CONT&amp;lt;/code&amp;gt; you will also get this error.&lt;br /&gt;
* 18 '''Unknown user function''' - A &amp;lt;code&amp;gt;DEF FN&amp;lt;/code&amp;gt; must be executed before calling an &amp;lt;code&amp;gt;FN&amp;lt;/code&amp;gt; function.&lt;br /&gt;
* 19 '''RESUME missing''' - End of program has been reached while in error processing mode. Use &amp;lt;code&amp;gt;ON ERROR GOTO&amp;lt;/code&amp;gt; before &amp;lt;code&amp;gt;RESUME&amp;lt;/code&amp;gt;.&lt;br /&gt;
* 20 '''Unexpected RESUME''' - &amp;lt;code&amp;gt;RESUME&amp;lt;/code&amp;gt; is only used in error processing mode, &amp;lt;code&amp;gt;ON ERROR GOTO&amp;lt;/code&amp;gt; statement must be used first.&lt;br /&gt;
* 21 '''Direct Command found''' - A line without a line number has found while loading a file.&lt;br /&gt;
* 22 '''Operand missing''' - An incomplete expression has been found.&lt;br /&gt;
* 23 '''Line too long''' - The line contains too many statements.&lt;br /&gt;
* 24 '''EOF met''' - Trying to input data beyond end of data file.&lt;br /&gt;
* 25 '''FILE type error''' - Using a program file instead of a data file to read or write (or vice versa).&lt;br /&gt;
* 26 '''NEXT missing''' - The &amp;lt;code&amp;gt;NEXT&amp;lt;/code&amp;gt; of a &amp;lt;code&amp;gt;FOR&amp;lt;/code&amp;gt; ... &amp;lt;code&amp;gt;NEXT&amp;lt;/code&amp;gt; loop is missing.&lt;br /&gt;
* 27 '''File already open''' - Trying to open an open file. Use &amp;lt;code&amp;gt;CLOSEIN&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;CLOSEOUT&amp;lt;/code&amp;gt; first.&lt;br /&gt;
* 28 '''Unknown command''' - Given when an unknown command follows a &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;. e.g. &amp;lt;code&amp;gt;|DISC&amp;lt;/code&amp;gt; on a CPC464 without AMSDOS installed.&lt;br /&gt;
* 29 '''WEND missing''' - The &amp;lt;code&amp;gt;WEND&amp;lt;/code&amp;gt; part of the &amp;lt;code&amp;gt;WHILE&amp;lt;/code&amp;gt; ... &amp;lt;code&amp;gt;WEND&amp;lt;/code&amp;gt; loop is missing.&lt;br /&gt;
* 30 '''Unexpected WEND''' - &amp;lt;code&amp;gt;WEND&amp;lt;/code&amp;gt; encountered without a corresponding active &amp;lt;code&amp;gt;WHILE&amp;lt;/code&amp;gt;.&lt;br /&gt;
* 31 '''File not open''' - Attempting to read from or write to a file without &amp;lt;code&amp;gt;OPEN&amp;lt;/code&amp;gt;ing it first.&lt;br /&gt;
* '''Unknown error''' - Executing &amp;lt;code&amp;gt;ERROR&amp;lt;/code&amp;gt; command with any other legal error code number (up to 255).&lt;br /&gt;
== Other Basic Dialects available for the CPC ==&lt;br /&gt;
&lt;br /&gt;
*[[BBC Basic]]&lt;br /&gt;
*[[C BASIC Compiler|CBASIC]]&lt;br /&gt;
*[[BASIC-E]]&lt;br /&gt;
&lt;br /&gt;
== Web links ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cpctech.org.uk/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;
* [http://rosettacode.org/wiki/Category:Locomotive_Basic Code examples at Rosetta Code]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:BASIC| ]]&lt;br /&gt;
[[Category:CPC Internal Components]]&lt;br /&gt;
[[Category:Operating System| ]]&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Programming software| ]]&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Mittwintermeeting_4&amp;diff=27749</id>
		<title>Mittwintermeeting 4</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Mittwintermeeting_4&amp;diff=27749"/>
				<updated>2008-11-19T20:11:00Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Mittwintermeeting 4 again aims to fill the gap between the last meeting of the past year and the first one in the next year.&amp;lt;br&amp;gt;As in the last time, the party will be held in a blockhouse directly at the eastborder of the Westerwald in Kirchen /&amp;amp;nbsp;Germany.&amp;lt;br&amp;gt;Like everytime everyone who is interested in old homecomputers is very welcome! &lt;br /&gt;
&lt;br /&gt;
The Meeting will take place from 16. to 18. Jan 2009 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;'''The Party-Place''' &lt;br /&gt;
&lt;br /&gt;
DRK Vereinshaus Kirchen&amp;lt;br&amp;gt;An der Buswende&amp;lt;br&amp;gt;57548 Kirchen&amp;lt;br&amp;gt;Germany&amp;lt;br&amp;gt;GeoCoords: (longitude/latitude)&amp;amp;nbsp;:&amp;amp;nbsp; 7°54'40.84&amp;quot;E , 50°48'49.74&amp;quot;N &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
If you have any more questions please email me at&amp;amp;nbsp; mittwinter (at) dr-zed (dot) de&amp;amp;nbsp;!&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= Accommodation  =&lt;br /&gt;
&lt;br /&gt;
*Hotel [http://www.zum-weissen-stein.de/ &amp;quot;zum weißen Stein&amp;quot;] (double bedroom EUR&amp;amp;nbsp;93,50) &lt;br /&gt;
*bring your own Airbed and sleep at the party place (EUR 0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
= Participants  =&lt;br /&gt;
&lt;br /&gt;
*[[Prodatron|Prodatron]] &lt;br /&gt;
*[[Dr.Zed|Dr.Zed]] &lt;br /&gt;
*[[Nilquader|Nilquader]] of [[SPRING|SPRING]] &lt;br /&gt;
*[[Xesrjb|Xesrjb]]&lt;br /&gt;
&lt;br /&gt;
*Nils Eilers &lt;br /&gt;
*Beetle /&amp;amp;nbsp;ABBUC &lt;br /&gt;
*Thorsten Butschke &lt;br /&gt;
*Martin Metz &lt;br /&gt;
*Ingo Soetebier &lt;br /&gt;
*Tolkin&lt;br /&gt;
*Mr. AMS&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;( please add or remove yourself from this list. This is the central &amp;quot;I&amp;amp;nbsp;do /&amp;amp;nbsp;I don't participate&amp;quot;-list )|&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=CP/M&amp;diff=9045</id>
		<title>CP/M</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=CP/M&amp;diff=9045"/>
				<updated>2006-10-04T22:48:08Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CP/M''' is an [[System software#Operating_Systems|operating system]] running on different computers with Intel 8080 and compatible CPUs. It was the most popular operating system for micro computers, before the 16 bit age started successfully with the IBM PC and MS-DOS. Most computer systems running CP/M were based on a [[Z80]] cpu.&lt;br /&gt;
&lt;br /&gt;
It was developed by [[Gary Kildall]] of [[Digital Research|Digital Research, Inc.]] as a privat project from 1974 on, named '''''C'''ontrol '''P'''rogram/'''M'''onitor''. When becoming a commercial software in November 1977 it was renamed to '''''C'''ontrol '''P'''rogram for '''M'''icrocomputers''.&lt;br /&gt;
&lt;br /&gt;
'''CP/M''' shipped with the disk models of the Amstrad CPC and the [[DDI-1]] disc drive on one or two [[System Disk]]s.&lt;br /&gt;
&lt;br /&gt;
== MicroDOS ==&lt;br /&gt;
'''MicroDOS''' (Microcomputer Disc Operating System) is a CP/M clone made in East Germany (GDR) for computers of the brand Kleincomputer (KC). It was available for the [[KC Compact]]. Unfortunately it is not compatible to CP/M by 100%.&lt;br /&gt;
&lt;br /&gt;
[[Category:Operating System]]&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=XzentriX&amp;diff=6511</id>
		<title>XzentriX</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=XzentriX&amp;diff=6511"/>
				<updated>2006-09-07T22:45:43Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The XzentriX takes place every year in Seeshaupt, Germany, and is organised by Herbert Heppchen, Robert Sterff and [[Mr. Ams]]. It is a party for all old (8bit) computers and video games from the 70ies, 80ies and early 90ies.&lt;br /&gt;
&lt;br /&gt;
== Parties ==&lt;br /&gt;
&lt;br /&gt;
* [[XzentriX Meeting 1999]]&lt;br /&gt;
* [[XzentriX Meeting 2000]]&lt;br /&gt;
* [[XzentriX Meeting 2001]]&lt;br /&gt;
* [[XzentriX Meeting 2002]]&lt;br /&gt;
* [[XzentriX Meeting 2003]]&lt;br /&gt;
* [[XzentriX Meeting 2004]]&lt;br /&gt;
* [[XzentriX Meeting 2005]]&lt;br /&gt;
* [[XzentriX Meeting 2006]]&lt;br /&gt;
&lt;br /&gt;
== Web links ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.xzentrix.de XzentriX homepage]&lt;br /&gt;
&lt;br /&gt;
[[Category:CPC events]]&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Demogroups&amp;diff=3131</id>
		<title>Demogroups</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Demogroups&amp;diff=3131"/>
				<updated>2006-08-13T10:09:07Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: /* Germany */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''For on overview of the CPC scene members, you can have a look at the''&lt;br /&gt;
* [[CPC scene members|List of CPC scene members]]&lt;br /&gt;
* [http://www.cpcwiki.eu/index.php/Category:CPC_scene_members Category of CPC scene members]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a list of the CPC scene '''demo groups''', which have been or are still active.&lt;br /&gt;
&lt;br /&gt;
== France ==&lt;br /&gt;
&lt;br /&gt;
* [[5KB]]&lt;br /&gt;
* [[Arkos]] ([http://www.arkos.cpcscene.com Arkos homepage])&lt;br /&gt;
* [[AST System]]&lt;br /&gt;
* [[BCAV]]&lt;br /&gt;
* [[Contrast]]&lt;br /&gt;
* [[Da Boxon Team]]&lt;br /&gt;
* [[Futur's]] ([http://www.futurs.cpcscene.com Futur's homepage])&lt;br /&gt;
* [[GPA]]&lt;br /&gt;
* [[Krad'os Crack'ers]]&lt;br /&gt;
* [[Logon System]] ([http://sergio.web.9online.fr/html/demologon.htm Longshot's website])&lt;br /&gt;
* [[Malibu Crackers]]&lt;br /&gt;
* [[Mortel]]&lt;br /&gt;
* [[Nul Part System]]&lt;br /&gt;
* [[Overlanders]]&lt;br /&gt;
* [[Paradox]]&lt;br /&gt;
* [[Rebels]]&lt;br /&gt;
* [[Sucres en Morceaux]] ([http://scampin.chez-alice.fr/cpc Sucres en Morceaux homepage])&lt;br /&gt;
* [[Static]]&lt;br /&gt;
&lt;br /&gt;
== Germany ==&lt;br /&gt;
&lt;br /&gt;
* [[Armaxess]]&lt;br /&gt;
* [[BENG!]] (also international; [http://www.beng.de Beng! homepage])&lt;br /&gt;
* [[Benediction]]&lt;br /&gt;
* [[Bollaware]] ([http://www.bollaware.de Bollaware homepage])&lt;br /&gt;
* [[Cadjo Clan]]&lt;br /&gt;
* [[CBS]]&lt;br /&gt;
* [[CGS]]&lt;br /&gt;
* [[Commotion]]&lt;br /&gt;
* [[GCS]]&lt;br /&gt;
* [[Frankenteam]]&lt;br /&gt;
* [[GOS]]&lt;br /&gt;
* [[HJT]]&lt;br /&gt;
* [[KKB]]&lt;br /&gt;
* [[MOPS]]&lt;br /&gt;
* [[Necron]]&lt;br /&gt;
* [[PDW]]&lt;br /&gt;
* [[POW]]&lt;br /&gt;
* [[SCUG]]&lt;br /&gt;
* [[SymbiosiS]] ([http://www.prodatron.net Prodatron's website])&lt;br /&gt;
* [[TGS]]&lt;br /&gt;
* [[The Rejects]] ([http://www.prodatron.net Prodatron's website])&lt;br /&gt;
* [[Wizcat]]&lt;br /&gt;
&lt;br /&gt;
== Greece ==&lt;br /&gt;
&lt;br /&gt;
* [[Dirty Minds]]&lt;br /&gt;
&lt;br /&gt;
== Netherlands ==&lt;br /&gt;
&lt;br /&gt;
* [[Dragonbreed Wetware]]&lt;br /&gt;
&lt;br /&gt;
== Spain ==&lt;br /&gt;
&lt;br /&gt;
* [[Zona Neutra]] ([http://www.zonan.org Zona Neutra website])&lt;br /&gt;
&lt;br /&gt;
== United Kingdom ==&lt;br /&gt;
&lt;br /&gt;
* [[Bitmap Vandals]]&lt;br /&gt;
* [[Conspiracy]]&lt;br /&gt;
* [[Discovery]]&lt;br /&gt;
* [[Lords of Justice]]&lt;br /&gt;
* [[STS]]&lt;br /&gt;
* [[Systeme D]]&lt;br /&gt;
* [[The Underground]]&lt;br /&gt;
&lt;br /&gt;
and many, many more...&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Schneider&amp;diff=3066</id>
		<title>Schneider</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Schneider&amp;diff=3066"/>
				<updated>2006-08-12T20:28:55Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:schneider_6128_en.jpg|thumb|Schneider CPC 6128 with grey Keys and Centronic-Ports]]&lt;br /&gt;
Schneider Rundfunkwerke from Türkheim (Germany) manufactured (labeled) and sold the [[CPC_old_generation|Schneider CPC]] 464, 664 and 6128 for the german market. &lt;br /&gt;
In the middle 80s the Schneider Rundfunkwerke opened the Schneider Computer Division, where they sold the Amstrad Computers under license. &lt;br /&gt;
&lt;br /&gt;
Although the original CPC contains DIP switches that allow the manufacturer to specify the OEM brand appearing on the boot screen of the computer, the Schneider CPCs had a few more differences from their UK and worldwide siblings: other than the german keyboard, they sported proper expansion ports and not mere PCB extensions. These were much more durable and they were implemented because of stricter german laws. Unfortunately this also meant that some [[peripherals]] would have a troubled time trying to connect to the back of the Schneider CPCs.&lt;br /&gt;
&lt;br /&gt;
Until 1987 Schneider Computer Division also distributed the Amstrad PCW8256 (also known as Joyce), PCW8125 (Joyce Plus), PC1512 and PC1640. At the end of 1987 Schneider had distanced itself from Amstrad due to differences in dealership policies. So they started from 1987 an own production of computers, they build the EuroPC and EuroPCII (two very compact PC units on the same computer-in-a-keyboard format like the CPC6128), EuroXT and EuroAT.&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=CPC_old_generation&amp;diff=3065</id>
		<title>CPC old generation</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=CPC_old_generation&amp;diff=3065"/>
				<updated>2006-08-12T20:10:51Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: /* Other languages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''The following text was copied from the [http://en.wikipedia.org/wiki/Amstrad_CPC english Wikipedia article].''&lt;br /&gt;
&lt;br /&gt;
==Hardware description==&lt;br /&gt;
All CPC models were based on a Zilog Z80 processor clocked at 4 MHz. Because a common pool of RAM is shared with the video circuits, the Z80 may only make a memory accesses every four cycles - which has the effect of rounding all instruction cycle lengths up to the next multiple of four.&lt;br /&gt;
&lt;br /&gt;
The system came with 64 KB or 128 KB of RAM depending on the model (capable of being expanded to 576k). The machines also featured a standard 9-pin Atari-style joystick socket which was able to take two joysticks via a splitter.&lt;br /&gt;
&lt;br /&gt;
===Video (graphics): modes, outputs===&lt;br /&gt;
Underlying the CPCs video output was the Motorola 6845 address generator. This chip was connected to a pixel generator that supported 4 bpp, 2 bpp and 1 bpp output (bits per pixel). The address generator was clocked at a constant rate so the 4 bpp display generated half as many pixels as the 2 bpp and a quarter as many as the 1 bpp.&lt;br /&gt;
&lt;br /&gt;
The ROM featured three built-in display resolutions but many others could be achieved by reprogramming the 6845.&lt;br /&gt;
&lt;br /&gt;
The standard video modes were:&lt;br /&gt;
*'''Mode 0''': '''160×200''' pixels with 16 colors (4 bpp)&lt;br /&gt;
*'''Mode 1''': '''320×200''' pixels with 4 colors (2 bpp)&lt;br /&gt;
*'''Mode 2''': '''640×200''' pixels with 2 colors (1 bpp)&lt;br /&gt;
&lt;br /&gt;
A colour palette of 27 colors was supported, derived from RGB colour space with each component assigned as either off, half on or on. The later '''Plus''' models extended this to 4096 colours and added support for hardware sprites.&lt;br /&gt;
&lt;br /&gt;
This hardware compares well with the other 8-bit computers. In particular the CPC lacks the colour clash of the ZX Spectrum and clever programming of the 6845 could produce overscan, different resolutions (although with the same pixel density) and smooth pixel scrolling.&lt;br /&gt;
&lt;br /&gt;
The machine lacked either a RF TV or composite video output and instead shipped with a proprietary 5-pin DIN connector intended for use solely with the supplied Amstrad monitor. An external adapter for RF TV was available to be bought separately.&lt;br /&gt;
&lt;br /&gt;
The five-pin DIN connector is capable of driving a SCART television with a correctly wired lead.&lt;br /&gt;
&lt;br /&gt;
===Audio (sound)===&lt;br /&gt;
The CPC used the General Instrument AY-3-8912 sound chip, providing three channels, each configurable to generate square waves, white noise or both. A small array of hardware volume envelopes are available.&lt;br /&gt;
&lt;br /&gt;
Output was provided in mono by a small (4 cm) built-in loudspeaker with volume control, driven by an unusually powerful amplifier. Stereo output was provided through a 3.5mm headphones jack, not present on some early CPC464 models. In those models, what looked like a standard 3.5&amp;quot; headphone jack was actually used for connecting an external tape recorder, although later models used a five-pin DIN connector for the same purpose.&lt;br /&gt;
&lt;br /&gt;
Playback of digital sound samples at a resolution of a little better than 5-bit, as heard on the title screen of the game ''RoboCop'', was possible through clever programming of the sound chip. This trick was very processor intensive and hard to combine with any other processing.&lt;br /&gt;
&lt;br /&gt;
===The 3&amp;quot; floppy disk drives===&lt;br /&gt;
Amstrad's idiosyncratic choice of Hitachi's 3&amp;quot; floppy disk drive, when the rest of the PC industry was moving to Sony's 3.5&amp;quot; format, is often claimed to be due to Amstrad bulk-buying a large consignment of 3&amp;quot; drive units in Asia. The cheapest drive (built-in in later models) was a single-sided 40-track unit that required the user to physically remove and flip the disk to access both sides. Each side had its own independent write-protect switch. The sides were termed &amp;quot;A&amp;quot; and &amp;quot;B&amp;quot;, with each one holding 180KB (178KB in AMSDOS format) for a total of 360KB per disc.  &lt;br /&gt;
&lt;br /&gt;
The interface with the drives was a NEC 765 FDC, used for the same purpose in the IBM PC/XT, PC/AT and PS/2 machines. Many of its features were unused in order to cut costs, namely DMA transfers and support for single density disks; they were formatted as double density using Modified frequency modulation. &lt;br /&gt;
&lt;br /&gt;
Disks were shipped in a paper sleeve or a hard plastic case resembling a compact disc &amp;quot;jewel&amp;quot; case. The casing is thicker and more rigid than that of 3.5&amp;quot; diskettes and sliding metal cover to protect the media surface is internal to the casing and latched, unlike the simple external sliding cover of Sony's version (some reviews at the time reported driving over them with no problems). Because of this they were significantly more expensive than both 5.25&amp;quot; and 3.5&amp;quot; alternatives. This, combined with their low nominal capacities and their essentially proprietary nature, lead to the format being discontinued when the CPC itself was discontinued.&lt;br /&gt;
&lt;br /&gt;
Apart from Amstrad's other 3&amp;quot; machines (the PCW and the ZX Spectrum +3), the only other computer systems to use them were the Sega SF-7000 and mostly obscure and exotic CP/M systems such as the Tatung Einstein and Osborne machines.&lt;br /&gt;
&lt;br /&gt;
The data formatting of 3&amp;quot; disks was very similar to that of 5&amp;amp;frac14;&amp;quot; disks, and the Amstrad CPC machines were able to use 5&amp;amp;frac14;&amp;quot; drives through their &amp;quot;external drive&amp;quot; port - either one specially designed for use by the CPC or an adapted IBM-PC drive.&lt;br /&gt;
&lt;br /&gt;
A more popular alternative was to attach an adapted IBM-PC 3&amp;amp;frac12;&amp;quot; drive for operation in either single-sided 180 KB or double-sided 360 KB mode, although with the later availability of the PARADOS Disc Operating System, 720k per disc became available.&lt;br /&gt;
&lt;br /&gt;
===Serial port adaptor===&lt;br /&gt;
An official RS-232-C D25 serial port adaptor was produced that attached to the expansion connector at the rear of the machine, and had a through-connector for the CPC464 disk drive or other peripherals. The adaptor came with a &amp;quot;''Book of Spells''&amp;quot; for facilitating data transfer between other systems using a proprietary protocol in the device's own ROM, as well as terminal software to connect to British Telecom's Prestel service. A separate version of the ROM was created for the U.S. market due to the use of the commands &amp;quot;SUCK&amp;quot; and &amp;quot;BLOW&amp;quot;, which were considered unacceptable there.&lt;br /&gt;
&lt;br /&gt;
===Similarities to the BBC Micro===&lt;br /&gt;
The CPC has been termed an &amp;quot;improved Z80 implementation of the (earlier) BBC Micro&amp;quot; due to similarities in firmware and hardware. Both use the Motorola 6845 video address generator and the two have very similar sound output chips - the General Instrument AY-3-8912 in the CPC provides three tone channels each optionally with added noise and the Texas Instruments SN76489 in the BBC offers three tone channels and one exclusive noise channel.&lt;br /&gt;
&lt;br /&gt;
The BBC Micro uses an Intel 8271 floppy disc controller. The CPC uses the Intel 8272, which is similar to the 8271 but contains the addition of a double density (MFM) mode.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;two cursor&amp;quot; BASIC editing system seen on the Amstrad CPC (whereby holding Shift and using the cursor keys moves a shadow text cursor allowing text to be copied from another area of the screen to the normal cursor) is a lift from BBC BASIC, albeit substantially improved by allowing free movement of the normal cursor.&lt;br /&gt;
&lt;br /&gt;
Both systems provide similar systems of full hardware abstraction through Operating System calls. This saves programs which don't require time critical hardware access from having to touch the underlying machine and provides a level of machine portability for those programs.&lt;br /&gt;
&lt;br /&gt;
It exists a to the graphic and sound capabilities adapted version of BBC BASIC for the CPC.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===Built-in BASIC and operating system===&lt;br /&gt;
Like most home computers at the time, the CPC had its OS and a BASIC interpreter built in as ROM. It used Locomotive BASIC - a variant specifically written for the CPC hardware which as a result was faster, more comfortable and more powerful than the generic but common Microsoft BASIC used by the Commodore 64 and MSX amongst others. It was particularly notable for providing easy access to the machine's video and audio resources in contrast to the arcane POKE commands required on some Microsoft implementations (the MSX implementation of Microsoft Basic being an exception, which even allowed for hardware sprite manipulation and collision detection).&lt;br /&gt;
&lt;br /&gt;
===Other languages===&lt;br /&gt;
Although it was possible to obtain compilers for Locomotive BASIC, , BCPL, C, Forth, and Pascal the majority of the CPC's software was written in native Z80a assembly language.&lt;br /&gt;
&lt;br /&gt;
An interpreter for the educational language LOGO was also available.&lt;br /&gt;
&lt;br /&gt;
* [[472]]&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=CPC_old_generation&amp;diff=3062</id>
		<title>CPC old generation</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=CPC_old_generation&amp;diff=3062"/>
				<updated>2006-08-12T20:09:18Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: /* Similarities to the BBC Micro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''The following text was copied from the [http://en.wikipedia.org/wiki/Amstrad_CPC english Wikipedia article].''&lt;br /&gt;
&lt;br /&gt;
==Hardware description==&lt;br /&gt;
All CPC models were based on a Zilog Z80 processor clocked at 4 MHz. Because a common pool of RAM is shared with the video circuits, the Z80 may only make a memory accesses every four cycles - which has the effect of rounding all instruction cycle lengths up to the next multiple of four.&lt;br /&gt;
&lt;br /&gt;
The system came with 64 KB or 128 KB of RAM depending on the model (capable of being expanded to 576k). The machines also featured a standard 9-pin Atari-style joystick socket which was able to take two joysticks via a splitter.&lt;br /&gt;
&lt;br /&gt;
===Video (graphics): modes, outputs===&lt;br /&gt;
Underlying the CPCs video output was the Motorola 6845 address generator. This chip was connected to a pixel generator that supported 4 bpp, 2 bpp and 1 bpp output (bits per pixel). The address generator was clocked at a constant rate so the 4 bpp display generated half as many pixels as the 2 bpp and a quarter as many as the 1 bpp.&lt;br /&gt;
&lt;br /&gt;
The ROM featured three built-in display resolutions but many others could be achieved by reprogramming the 6845.&lt;br /&gt;
&lt;br /&gt;
The standard video modes were:&lt;br /&gt;
*'''Mode 0''': '''160×200''' pixels with 16 colors (4 bpp)&lt;br /&gt;
*'''Mode 1''': '''320×200''' pixels with 4 colors (2 bpp)&lt;br /&gt;
*'''Mode 2''': '''640×200''' pixels with 2 colors (1 bpp)&lt;br /&gt;
&lt;br /&gt;
A colour palette of 27 colors was supported, derived from RGB colour space with each component assigned as either off, half on or on. The later '''Plus''' models extended this to 4096 colours and added support for hardware sprites.&lt;br /&gt;
&lt;br /&gt;
This hardware compares well with the other 8-bit computers. In particular the CPC lacks the colour clash of the ZX Spectrum and clever programming of the 6845 could produce overscan, different resolutions (although with the same pixel density) and smooth pixel scrolling.&lt;br /&gt;
&lt;br /&gt;
The machine lacked either a RF TV or composite video output and instead shipped with a proprietary 5-pin DIN connector intended for use solely with the supplied Amstrad monitor. An external adapter for RF TV was available to be bought separately.&lt;br /&gt;
&lt;br /&gt;
The five-pin DIN connector is capable of driving a SCART television with a correctly wired lead.&lt;br /&gt;
&lt;br /&gt;
===Audio (sound)===&lt;br /&gt;
The CPC used the General Instrument AY-3-8912 sound chip, providing three channels, each configurable to generate square waves, white noise or both. A small array of hardware volume envelopes are available.&lt;br /&gt;
&lt;br /&gt;
Output was provided in mono by a small (4 cm) built-in loudspeaker with volume control, driven by an unusually powerful amplifier. Stereo output was provided through a 3.5mm headphones jack, not present on some early CPC464 models. In those models, what looked like a standard 3.5&amp;quot; headphone jack was actually used for connecting an external tape recorder, although later models used a five-pin DIN connector for the same purpose.&lt;br /&gt;
&lt;br /&gt;
Playback of digital sound samples at a resolution of a little better than 5-bit, as heard on the title screen of the game ''RoboCop'', was possible through clever programming of the sound chip. This trick was very processor intensive and hard to combine with any other processing.&lt;br /&gt;
&lt;br /&gt;
===The 3&amp;quot; floppy disk drives===&lt;br /&gt;
Amstrad's idiosyncratic choice of Hitachi's 3&amp;quot; floppy disk drive, when the rest of the PC industry was moving to Sony's 3.5&amp;quot; format, is often claimed to be due to Amstrad bulk-buying a large consignment of 3&amp;quot; drive units in Asia. The cheapest drive (built-in in later models) was a single-sided 40-track unit that required the user to physically remove and flip the disk to access both sides. Each side had its own independent write-protect switch. The sides were termed &amp;quot;A&amp;quot; and &amp;quot;B&amp;quot;, with each one holding 180KB (178KB in AMSDOS format) for a total of 360KB per disc.  &lt;br /&gt;
&lt;br /&gt;
The interface with the drives was a NEC 765 FDC, used for the same purpose in the IBM PC/XT, PC/AT and PS/2 machines. Many of its features were unused in order to cut costs, namely DMA transfers and support for single density disks; they were formatted as double density using Modified frequency modulation. &lt;br /&gt;
&lt;br /&gt;
Disks were shipped in a paper sleeve or a hard plastic case resembling a compact disc &amp;quot;jewel&amp;quot; case. The casing is thicker and more rigid than that of 3.5&amp;quot; diskettes and sliding metal cover to protect the media surface is internal to the casing and latched, unlike the simple external sliding cover of Sony's version (some reviews at the time reported driving over them with no problems). Because of this they were significantly more expensive than both 5.25&amp;quot; and 3.5&amp;quot; alternatives. This, combined with their low nominal capacities and their essentially proprietary nature, lead to the format being discontinued when the CPC itself was discontinued.&lt;br /&gt;
&lt;br /&gt;
Apart from Amstrad's other 3&amp;quot; machines (the PCW and the ZX Spectrum +3), the only other computer systems to use them were the Sega SF-7000 and mostly obscure and exotic CP/M systems such as the Tatung Einstein and Osborne machines.&lt;br /&gt;
&lt;br /&gt;
The data formatting of 3&amp;quot; disks was very similar to that of 5&amp;amp;frac14;&amp;quot; disks, and the Amstrad CPC machines were able to use 5&amp;amp;frac14;&amp;quot; drives through their &amp;quot;external drive&amp;quot; port - either one specially designed for use by the CPC or an adapted IBM-PC drive.&lt;br /&gt;
&lt;br /&gt;
A more popular alternative was to attach an adapted IBM-PC 3&amp;amp;frac12;&amp;quot; drive for operation in either single-sided 180 KB or double-sided 360 KB mode, although with the later availability of the PARADOS Disc Operating System, 720k per disc became available.&lt;br /&gt;
&lt;br /&gt;
===Serial port adaptor===&lt;br /&gt;
An official RS-232-C D25 serial port adaptor was produced that attached to the expansion connector at the rear of the machine, and had a through-connector for the CPC464 disk drive or other peripherals. The adaptor came with a &amp;quot;''Book of Spells''&amp;quot; for facilitating data transfer between other systems using a proprietary protocol in the device's own ROM, as well as terminal software to connect to British Telecom's Prestel service. A separate version of the ROM was created for the U.S. market due to the use of the commands &amp;quot;SUCK&amp;quot; and &amp;quot;BLOW&amp;quot;, which were considered unacceptable there.&lt;br /&gt;
&lt;br /&gt;
===Similarities to the BBC Micro===&lt;br /&gt;
The CPC has been termed an &amp;quot;improved Z80 implementation of the (earlier) BBC Micro&amp;quot; due to similarities in firmware and hardware. Both use the Motorola 6845 video address generator and the two have very similar sound output chips - the General Instrument AY-3-8912 in the CPC provides three tone channels each optionally with added noise and the Texas Instruments SN76489 in the BBC offers three tone channels and one exclusive noise channel.&lt;br /&gt;
&lt;br /&gt;
The BBC Micro uses an Intel 8271 floppy disc controller. The CPC uses the Intel 8272, which is similar to the 8271 but contains the addition of a double density (MFM) mode.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;two cursor&amp;quot; BASIC editing system seen on the Amstrad CPC (whereby holding Shift and using the cursor keys moves a shadow text cursor allowing text to be copied from another area of the screen to the normal cursor) is a lift from BBC BASIC, albeit substantially improved by allowing free movement of the normal cursor.&lt;br /&gt;
&lt;br /&gt;
Both systems provide similar systems of full hardware abstraction through Operating System calls. This saves programs which don't require time critical hardware access from having to touch the underlying machine and provides a level of machine portability for those programs.&lt;br /&gt;
&lt;br /&gt;
It exists a to the graphic and sound capabilities adapted version of BBC BASIC for the CPC.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===Built-in BASIC and operating system===&lt;br /&gt;
Like most home computers at the time, the CPC had its OS and a BASIC interpreter built in as ROM. It used Locomotive BASIC - a variant specifically written for the CPC hardware which as a result was faster, more comfortable and more powerful than the generic but common Microsoft BASIC used by the Commodore 64 and MSX amongst others. It was particularly notable for providing easy access to the machine's video and audio resources in contrast to the arcane POKE commands required on some Microsoft implementations (the MSX implementation of Microsoft Basic being an exception, which even allowed for hardware sprite manipulation and collision detection).&lt;br /&gt;
&lt;br /&gt;
===Other languages===&lt;br /&gt;
Although it was possible to obtain compilers for Locomotive BASIC, C and Pascal the majority of the CPC's software was written in native Z80a assembly language.&lt;br /&gt;
&lt;br /&gt;
An interpreter for the educational language LOGO was also available.&lt;br /&gt;
&lt;br /&gt;
* [[472]]&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=CPC_old_generation&amp;diff=3060</id>
		<title>CPC old generation</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=CPC_old_generation&amp;diff=3060"/>
				<updated>2006-08-12T20:02:54Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: /* Hardware description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''The following text was copied from the [http://en.wikipedia.org/wiki/Amstrad_CPC english Wikipedia article].''&lt;br /&gt;
&lt;br /&gt;
==Hardware description==&lt;br /&gt;
All CPC models were based on a Zilog Z80 processor clocked at 4 MHz. Because a common pool of RAM is shared with the video circuits, the Z80 may only make a memory accesses every four cycles - which has the effect of rounding all instruction cycle lengths up to the next multiple of four.&lt;br /&gt;
&lt;br /&gt;
The system came with 64 KB or 128 KB of RAM depending on the model (capable of being expanded to 576k). The machines also featured a standard 9-pin Atari-style joystick socket which was able to take two joysticks via a splitter.&lt;br /&gt;
&lt;br /&gt;
===Video (graphics): modes, outputs===&lt;br /&gt;
Underlying the CPCs video output was the Motorola 6845 address generator. This chip was connected to a pixel generator that supported 4 bpp, 2 bpp and 1 bpp output (bits per pixel). The address generator was clocked at a constant rate so the 4 bpp display generated half as many pixels as the 2 bpp and a quarter as many as the 1 bpp.&lt;br /&gt;
&lt;br /&gt;
The ROM featured three built-in display resolutions but many others could be achieved by reprogramming the 6845.&lt;br /&gt;
&lt;br /&gt;
The standard video modes were:&lt;br /&gt;
*'''Mode 0''': '''160×200''' pixels with 16 colors (4 bpp)&lt;br /&gt;
*'''Mode 1''': '''320×200''' pixels with 4 colors (2 bpp)&lt;br /&gt;
*'''Mode 2''': '''640×200''' pixels with 2 colors (1 bpp)&lt;br /&gt;
&lt;br /&gt;
A colour palette of 27 colors was supported, derived from RGB colour space with each component assigned as either off, half on or on. The later '''Plus''' models extended this to 4096 colours and added support for hardware sprites.&lt;br /&gt;
&lt;br /&gt;
This hardware compares well with the other 8-bit computers. In particular the CPC lacks the colour clash of the ZX Spectrum and clever programming of the 6845 could produce overscan, different resolutions (although with the same pixel density) and smooth pixel scrolling.&lt;br /&gt;
&lt;br /&gt;
The machine lacked either a RF TV or composite video output and instead shipped with a proprietary 5-pin DIN connector intended for use solely with the supplied Amstrad monitor. An external adapter for RF TV was available to be bought separately.&lt;br /&gt;
&lt;br /&gt;
The five-pin DIN connector is capable of driving a SCART television with a correctly wired lead.&lt;br /&gt;
&lt;br /&gt;
===Audio (sound)===&lt;br /&gt;
The CPC used the General Instrument AY-3-8912 sound chip, providing three channels, each configurable to generate square waves, white noise or both. A small array of hardware volume envelopes are available.&lt;br /&gt;
&lt;br /&gt;
Output was provided in mono by a small (4 cm) built-in loudspeaker with volume control, driven by an unusually powerful amplifier. Stereo output was provided through a 3.5mm headphones jack, not present on some early CPC464 models. In those models, what looked like a standard 3.5&amp;quot; headphone jack was actually used for connecting an external tape recorder, although later models used a five-pin DIN connector for the same purpose.&lt;br /&gt;
&lt;br /&gt;
Playback of digital sound samples at a resolution of a little better than 5-bit, as heard on the title screen of the game ''RoboCop'', was possible through clever programming of the sound chip. This trick was very processor intensive and hard to combine with any other processing.&lt;br /&gt;
&lt;br /&gt;
===The 3&amp;quot; floppy disk drives===&lt;br /&gt;
Amstrad's idiosyncratic choice of Hitachi's 3&amp;quot; floppy disk drive, when the rest of the PC industry was moving to Sony's 3.5&amp;quot; format, is often claimed to be due to Amstrad bulk-buying a large consignment of 3&amp;quot; drive units in Asia. The cheapest drive (built-in in later models) was a single-sided 40-track unit that required the user to physically remove and flip the disk to access both sides. Each side had its own independent write-protect switch. The sides were termed &amp;quot;A&amp;quot; and &amp;quot;B&amp;quot;, with each one holding 180KB (178KB in AMSDOS format) for a total of 360KB per disc.  &lt;br /&gt;
&lt;br /&gt;
The interface with the drives was a NEC 765 FDC, used for the same purpose in the IBM PC/XT, PC/AT and PS/2 machines. Many of its features were unused in order to cut costs, namely DMA transfers and support for single density disks; they were formatted as double density using Modified frequency modulation. &lt;br /&gt;
&lt;br /&gt;
Disks were shipped in a paper sleeve or a hard plastic case resembling a compact disc &amp;quot;jewel&amp;quot; case. The casing is thicker and more rigid than that of 3.5&amp;quot; diskettes and sliding metal cover to protect the media surface is internal to the casing and latched, unlike the simple external sliding cover of Sony's version (some reviews at the time reported driving over them with no problems). Because of this they were significantly more expensive than both 5.25&amp;quot; and 3.5&amp;quot; alternatives. This, combined with their low nominal capacities and their essentially proprietary nature, lead to the format being discontinued when the CPC itself was discontinued.&lt;br /&gt;
&lt;br /&gt;
Apart from Amstrad's other 3&amp;quot; machines (the PCW and the ZX Spectrum +3), the only other computer systems to use them were the Sega SF-7000 and mostly obscure and exotic CP/M systems such as the Tatung Einstein and Osborne machines.&lt;br /&gt;
&lt;br /&gt;
The data formatting of 3&amp;quot; disks was very similar to that of 5&amp;amp;frac14;&amp;quot; disks, and the Amstrad CPC machines were able to use 5&amp;amp;frac14;&amp;quot; drives through their &amp;quot;external drive&amp;quot; port - either one specially designed for use by the CPC or an adapted IBM-PC drive.&lt;br /&gt;
&lt;br /&gt;
A more popular alternative was to attach an adapted IBM-PC 3&amp;amp;frac12;&amp;quot; drive for operation in either single-sided 180 KB or double-sided 360 KB mode, although with the later availability of the PARADOS Disc Operating System, 720k per disc became available.&lt;br /&gt;
&lt;br /&gt;
===Serial port adaptor===&lt;br /&gt;
An official RS-232-C D25 serial port adaptor was produced that attached to the expansion connector at the rear of the machine, and had a through-connector for the CPC464 disk drive or other peripherals. The adaptor came with a &amp;quot;''Book of Spells''&amp;quot; for facilitating data transfer between other systems using a proprietary protocol in the device's own ROM, as well as terminal software to connect to British Telecom's Prestel service. A separate version of the ROM was created for the U.S. market due to the use of the commands &amp;quot;SUCK&amp;quot; and &amp;quot;BLOW&amp;quot;, which were considered unacceptable there.&lt;br /&gt;
&lt;br /&gt;
===Similarities to the BBC Micro===&lt;br /&gt;
The CPC has been termed an &amp;quot;improved Z80 implementation of the (earlier) BBC Micro&amp;quot; due to similarities in firmware and hardware. Both use the Motorola 6845 video address generator and the two have very similar sound output chips - the General Instrument AY-3-8912 in the CPC provides three tone channels each optionally with added noise and the Texas Instruments SN76489 in the BBC offers three tone channels and one exclusive noise channel.&lt;br /&gt;
&lt;br /&gt;
The BBC Micro uses an Intel 8271 floppy disc controller. The CPC uses the Intel 8272, which is similar to the 8271 but contains the addition of a double density (MFM) mode.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;two cursor&amp;quot; BASIC editing system seen on the Amstrad CPC (whereby holding Shift and using the cursor keys moves a shadow text cursor allowing text to be copied from another area of the screen to the normal cursor) is a lift from BBC BASIC, albeit substantially improved by allowing free movement of the normal cursor.&lt;br /&gt;
&lt;br /&gt;
Both systems provide similar systems of full hardware abstraction through Operating System calls. This saves programs which don't require time critical hardware access from having to touch the underlying machine and provides a level of machine portability for those programs.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
===Built-in BASIC and operating system===&lt;br /&gt;
Like most home computers at the time, the CPC had its OS and a BASIC interpreter built in as ROM. It used Locomotive BASIC - a variant specifically written for the CPC hardware which as a result was faster, more comfortable and more powerful than the generic but common Microsoft BASIC used by the Commodore 64 and MSX amongst others. It was particularly notable for providing easy access to the machine's video and audio resources in contrast to the arcane POKE commands required on some Microsoft implementations (the MSX implementation of Microsoft Basic being an exception, which even allowed for hardware sprite manipulation and collision detection).&lt;br /&gt;
&lt;br /&gt;
===Other languages===&lt;br /&gt;
Although it was possible to obtain compilers for Locomotive BASIC, C and Pascal the majority of the CPC's software was written in native Z80a assembly language.&lt;br /&gt;
&lt;br /&gt;
An interpreter for the educational language LOGO was also available.&lt;br /&gt;
&lt;br /&gt;
* [[472]]&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Dobbertin&amp;diff=3059</id>
		<title>Dobbertin</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Dobbertin&amp;diff=3059"/>
				<updated>2006-08-12T19:59:29Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Dobbertin.gif|thumb|Dobbertin Logo]]&lt;br /&gt;
'''Dobbertin Industrie-Elektronik''' made several RAM-Expansions, ROM-Boxes, Drive-Controller and the [[HD20]] for the CPC. &lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
http://www.dobbertin-elektronik.de/&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Peripherals&amp;diff=2889</id>
		<title>Peripherals</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Peripherals&amp;diff=2889"/>
				<updated>2006-08-11T18:19:02Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Please try to keep things in alphabetical order.''&lt;br /&gt;
&lt;br /&gt;
* Amstrad CTM 640 Color Monitor&lt;br /&gt;
* Amstrad CTM 644 Color Monitor&lt;br /&gt;
* Amstrad DDI-1 Floppy Drive&lt;br /&gt;
* Amstrad DMP1 printer&lt;br /&gt;
* Amstrad/Schneider DMP2000 Printer&lt;br /&gt;
* Amstrad/Schneider DMP2100 Printer&lt;br /&gt;
* Amstrad DMP2160 printer&lt;br /&gt;
* Amstrad FD-1 Floppy Drive&lt;br /&gt;
* Amstrad JY1/JY2 joysticks&lt;br /&gt;
* Amstrad LP-1 light pen&lt;br /&gt;
* Amstrad Magnum Phaser&lt;br /&gt;
* Amstrad [[MP-1]] TV adapter&lt;br /&gt;
* Amstrad [[MP-2]] Radio/Alarm-Clock&lt;br /&gt;
* Amstrad [[MP-3]] TV modulator for CTM 64x&lt;br /&gt;
* Amstrad [[SSA-1]] Speech Synthesizer&lt;br /&gt;
* [[AMX]] Mouse&lt;br /&gt;
* ARA digitizer&lt;br /&gt;
* [[ASS]] Light-Pen&lt;br /&gt;
* ASS Reis-Mouse&lt;br /&gt;
* Centaure mouse&lt;br /&gt;
* Commstart v21/23 modem&lt;br /&gt;
* [[Dart]]-Scanner for DMP-Printers&lt;br /&gt;
* Digitelec DTL 2000/2100 Modem&lt;br /&gt;
* Digivox sampler&lt;br /&gt;
* [[dk'tronics]] Speech Synthesizer&lt;br /&gt;
* dk'tronics 64kB memory expansion&lt;br /&gt;
* dk'tronics 128kB memory expansion&lt;br /&gt;
* dk'tronics 256kB memory expansion&lt;br /&gt;
* dk'tronics Utopia OS&lt;br /&gt;
* dk'tronics Lightpen&lt;br /&gt;
* Dobbertin EPROM Box&lt;br /&gt;
* [[Dobbertin]] HD20 Hard Disk&lt;br /&gt;
* Fischertechnik robot&lt;br /&gt;
* FO-Dos card&lt;br /&gt;
* [[Gerdes]] Maus&lt;br /&gt;
* Grafpad II&lt;br /&gt;
* Graphiscop II&lt;br /&gt;
* Gunstick&lt;br /&gt;
* Inicron RAM-Box&lt;br /&gt;
* Inicron ROM-RAM-Box&lt;br /&gt;
* JASMIN AM5D 5&amp;quot;1/4 floppy drive&lt;br /&gt;
* Kersten PC Emulator&lt;br /&gt;
* Loriciel Phaser (West Phaser)&lt;br /&gt;
* Loritel&lt;br /&gt;
* Micro Power ROM Box&lt;br /&gt;
* Mirage Imager&lt;br /&gt;
* Music Machine&lt;br /&gt;
* [[Romantic Robot]] [[Multiface II]]&lt;br /&gt;
* Siren Software Hacker&lt;br /&gt;
* [[SYMBiFACE II]]&lt;br /&gt;
* TechniMusique speech synthetizer&lt;br /&gt;
* TransTape&lt;br /&gt;
* TMPI speech synthetizer&lt;br /&gt;
* VIDI digitizer&lt;br /&gt;
* [[Vortex]] FX1&lt;br /&gt;
* X-ROM ROM expansion and ROM burner&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:Stream2&amp;diff=2839</id>
		<title>Talk:Stream2</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:Stream2&amp;diff=2839"/>
				<updated>2006-08-11T09:41:06Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hey, this looks ace! Where can we download it? [[User:Gryzor|Gryzor]] 08:58, 9 August 2006 (CEST)&lt;br /&gt;
:Yeah, I would like to know that, too... Unfortunately it was never free and very well copy protected. I got my one as a rom version of a friend, but he is afraid, that his personal data could be encrypted in the rom. -- [[User:Prodatron|Prodatron]] 10:08, 9 August 2006 (CEST)&lt;br /&gt;
::Well, can it be considered abandonware? Could we upload it somewhere? [[User:Gryzor|Gryzor]] 10:22, 10 August 2006 (CEST)&lt;br /&gt;
:::Did somebody already try to get in contact with the programmers to ask if they are ok to copy the whole thing? --[[User:Villain|Villain]] 17:44, 10 August 2006 (CEST)&lt;br /&gt;
::::Yes, [[Mr.Ams]] did it now and received a positive feedback today. I already sent Gryzor the stuff :-) -- [[User:Prodatron|Prodatron]] 17:46, 10 August 2006 (CEST)&lt;br /&gt;
:::::It's not the whole thing, it's just a set of ROMs created by the installer for the ROM-RAM-Box and the Applications. I've found no way to make a copy or an image of the installdisc for the RRB and the disc version.&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Talk:Stream2&amp;diff=2838</id>
		<title>Talk:Stream2</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Talk:Stream2&amp;diff=2838"/>
				<updated>2006-08-11T09:40:08Z</updated>
		
		<summary type="html">&lt;p&gt;Almasys: It's not the whole thing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hey, this looks ace! Where can we download it? [[User:Gryzor|Gryzor]] 08:58, 9 August 2006 (CEST)&lt;br /&gt;
:Yeah, I would like to know that, too... Unfortunately it was never free and very well copy protected. I got my one as a rom version of a friend, but he is afraid, that his personal data could be encrypted in the rom. -- [[User:Prodatron|Prodatron]] 10:08, 9 August 2006 (CEST)&lt;br /&gt;
::Well, can it be considered abandonware? Could we upload it somewhere? [[User:Gryzor|Gryzor]] 10:22, 10 August 2006 (CEST)&lt;br /&gt;
:::Did somebody already try to get in contact with the programmers to ask if they are ok to copy the whole thing? --[[User:Villain|Villain]] 17:44, 10 August 2006 (CEST)&lt;br /&gt;
::::Yes, [[Mr.Ams]] did it now and received a positive feedback today. I already sent Gryzor the stuff :-) -- [[User:Prodatron|Prodatron]] 17:46, 10 August 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
== It's not the whole thing ==&lt;br /&gt;
&lt;br /&gt;
It's just a set of ROMs created by the installer for the ROM-RAM-Box and the Applications. I've found no way to make a copy or an image of the installdisc for the RRB and the disc version.&lt;/div&gt;</summary>
		<author><name>Almasys</name></author>	</entry>

	</feed>