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

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=B-ASIC&amp;diff=9057</id>
		<title>B-ASIC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=B-ASIC&amp;diff=9057"/>
				<updated>2006-10-05T17:20:07Z</updated>
		
		<summary type="html">&lt;p&gt;82.228.218.6: /* Sprites Instructions Set */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''B-Asic''' is a set of RSX commands allowing to use the Amstrad CPC Plus features from [[BASIC]]. It was written by [[Longshot]] of [[Logon System]].&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
'''B-ASIC''' is a set of RSX instructions to manage the extra features of the '''CPC PLUS'''&lt;br /&gt;
&lt;br /&gt;
Since release 3.0 B-ASIC runs only on CPC range with 128 Kb memory&lt;br /&gt;
&lt;br /&gt;
Main instructions can manage colour and sprites, providing an extra bank of '''64 sprites''' for a total of '''80 sprites'''&lt;br /&gt;
&lt;br /&gt;
'''B-ASIC doesn't take any byte of the CPC Basic memory'''.&lt;br /&gt;
&lt;br /&gt;
The RSX definition and code for locomative basic are not declared in main memory&lt;br /&gt;
&lt;br /&gt;
By the way, the whole interruption system and RSX managment is modified when B-Asic start.&lt;br /&gt;
&lt;br /&gt;
From a technical point of view, the code of the program BASIC using B-ASIC is copied in a bank, because&lt;br /&gt;
one bank is always open for the system to store the BASIC code. &lt;br /&gt;
&lt;br /&gt;
By the way, there are two video pages available for the user.&lt;br /&gt;
&lt;br /&gt;
Some instructions are not explained because they will disappear from next version.&lt;br /&gt;
(SPLIT, RETARDX, RETARDY, MASQUE)&lt;br /&gt;
A set of new powerful instructions will come in future versions.&lt;br /&gt;
&lt;br /&gt;
== Historics ==&lt;br /&gt;
* V3.1 xx/xx/1993 B-ASIC doesn't use any byte of BASIC main memory&lt;br /&gt;
* V3.2 25/02/2006 Bug fix on table calculation for path in interrupt / Correct a firmware bug (ei before real interrupt handler end)&lt;br /&gt;
* V3.3 27/02/2006 Forgotten to copy BASIC code from bank 2 to 5 / New instruction : SPRWHERE&lt;br /&gt;
&lt;br /&gt;
== Instructions ==&lt;br /&gt;
----&lt;br /&gt;
=== Colours Instructions Set ===&lt;br /&gt;
----&lt;br /&gt;
'''INKF,pen,colour'''&lt;br /&gt;
* pen=[0..15] colour=[0..4095]&lt;br /&gt;
* Modify colour of a pen&lt;br /&gt;
* Example : INKF,0,2303&lt;br /&gt;
----&lt;br /&gt;
'''INKFRVB,pen,red,green,blue'''&lt;br /&gt;
* pen=[0..15] red=[0..15] green=[0..15] blue=[0..15]&lt;br /&gt;
* Modify colour for a pen using colour elementaries components&lt;br /&gt;
* Example : FOR I=0 TO 15:INKFRVB,0,I,0,0:NEXT I&lt;br /&gt;
----&lt;br /&gt;
'''BORDERP,colour'''&lt;br /&gt;
* colour=[0..4095]&lt;br /&gt;
* Modify border's colour.&lt;br /&gt;
* Example : BORDERP,543&lt;br /&gt;
----&lt;br /&gt;
'''BORDERRVB,red,green,blue'''&lt;br /&gt;
* red=[0..15] green=[0..15] blue=[0..15]&lt;br /&gt;
* Modify border colour using colour elementaries components&lt;br /&gt;
* Example : FOR I=0 TO 15:BORDERRVB,0,0,0,I:NEXT I&lt;br /&gt;
----&lt;br /&gt;
'''INKS,pen,colour'''&lt;br /&gt;
* pen=[1..15] colour=[0..4095]&lt;br /&gt;
* Modify colour of an hardware sprite pen&lt;br /&gt;
* Note : The pen 0 cannot be modified. It's the transparent colour.&lt;br /&gt;
* Example : INKS,1,3456&lt;br /&gt;
----&lt;br /&gt;
'''INKSRVB,pen,red,green,blue'''&lt;br /&gt;
* pen=[1..15] red=[0..15] green=[0..15] blue=[0..15]&lt;br /&gt;
* Modify colour for an hardware sprite pen using colour elementaries components&lt;br /&gt;
* Note : The pen 0 cannot be modified. It's the transparent colour.&lt;br /&gt;
* Example : FOR I=0 TO 15:INKFRVB,0,I,0,0:NEXT I&lt;br /&gt;
----&lt;br /&gt;
=== Sprites Instructions Set ===&lt;br /&gt;
----&lt;br /&gt;
'''SPROFF,SpriteNumber'''&lt;br /&gt;
* SpriteNumber=[0..15]&lt;br /&gt;
* Sprite display is disactivated for specified sprite.&lt;br /&gt;
* Example : SPROFF,3  &lt;br /&gt;
----&lt;br /&gt;
'''SPRON,SpriteNumber'''&lt;br /&gt;
* SpriteNumber=[0..15]&lt;br /&gt;
* Sprite display is activated for specified sprite.&lt;br /&gt;
* Example : SPRON,3  &lt;br /&gt;
----&lt;br /&gt;
'''SPRZOOM,SpriteNumber,XZoom,YZoom'''&lt;br /&gt;
* SpriteNumber=[0..15] XZoom=[0..3] YZoom=[0..3]&lt;br /&gt;
* Define sprite zoom for specified sprite.&lt;br /&gt;
* If XZoom or YZoom is zeroed, sprite is not displayed&lt;br /&gt;
* Zoom value of 1 is no magnify.&lt;br /&gt;
* Note : Sprite must be activated by SPRON instruction to be displayed on screen&lt;br /&gt;
* Example : SPRZOOM,2,2,1 define the sprite 2 magnification to 2x horiz. and 1x vertically&lt;br /&gt;
----&lt;br /&gt;
'''SPRXY,SpriteNumber,XPos,YPos'''&lt;br /&gt;
* SpriteNumber=[0..15] XPos=[-256..767] YZoom=[-256..255]&lt;br /&gt;
* Define sprite position on screen according a mode 2 definition&lt;br /&gt;
* Note : Sprite must be activated by SPRON instruction to be displayed on screen&lt;br /&gt;
* Example : SPRXY,2,100,80 define sprite 2 position at 100,80 coordinates&lt;br /&gt;
----&lt;br /&gt;
'''SPRTDEF,SpriteNumber,Address,DurationPer,WaitingPer'''&lt;br /&gt;
* SpriteNumber=[0..15] Address=[0..65535] DurationPer=[0..65535] WaitingPer=[0..65535]&lt;br /&gt;
* Periods are defined by period of 0,02 second (e.g. 50 = 1 second) &lt;br /&gt;
* Define a path for the specified sprite.&lt;br /&gt;
* The path is defined by screen positions, given by a set of x,y coordinates defined in memory.&lt;br /&gt;
* Each coordinate is defined on 2 bytes (4 bytes for a screen position) in the memory&lt;br /&gt;
* The coordinate must be stored on a little endian method, e.g. the less significant byte in first and the most significant byte in second position in memory.&lt;br /&gt;
* The last x coordinate must take the value F0F0 (hexa) to indicate the path end definition&lt;br /&gt;
* DurationPer indicates the time while the sprite will run on the path (at the last position the path start again at the fist position). &lt;br /&gt;
* If DurationPer is zeroed, so the duration is infinite.&lt;br /&gt;
* WaitingPer indicate the start period which occurs when the path will be activated (see SPRTON and SPRTOFF instructions). Note : A same path can be used by one or more sprites. Example : SPRTDEF,3,&amp;amp;3000,0,100 to define for sprite 3 a path defined in &amp;amp;3000 with an infinite loop of the path after 2 seconds of start delay after SPRTON,3 instruction.&lt;br /&gt;
----&lt;br /&gt;
'''SPRTON,SprNb1,SprNb2,...,SprNbx'''&lt;br /&gt;
* SprNbx=[O..15]&lt;br /&gt;
* Start the path simultanously for the specified sprites.&lt;br /&gt;
* Note : An undefined path for the sprite may occur an erratic behaviour of the sprite started.&lt;br /&gt;
* Example : SPRTON,1,5,7  start the path for sprites 1, 5 and 7 simultaneously&lt;br /&gt;
----&lt;br /&gt;
'''SPRTOFF,SprNb1,SprNb2,...,SprNbx'''&lt;br /&gt;
* SprNbx=[0..15]&lt;br /&gt;
* Stop the path simultaneously for the specified sprites &lt;br /&gt;
* Example : SPRTOFF,1,7 stop the path for sprites 1 and 7 simultanously&lt;br /&gt;
----&lt;br /&gt;
'''SPRSWAP,SpriteNumber1,SpriteNumber2'''&lt;br /&gt;
* SpriteNumberx=[0..15]&lt;br /&gt;
* Exchange the sprite content of two sprites.&lt;br /&gt;
* Note : If SpriteNumber1=SpriteNumber2 it results just a waste of time.&lt;br /&gt;
* Example : SPRSWAP,1,5 exchange the graphics data of sprites 1 and 5&lt;br /&gt;
----&lt;br /&gt;
'''SPRPLOT,SpriteNumber,XPos,YPos,SpritePen'''&lt;br /&gt;
* SpriteNumber=[0..15] XPos=[0..15] YPos=[0..15] SpritePen=[0..15]&lt;br /&gt;
* Plot a pixel in the specified sprite at specified coordinates&lt;br /&gt;
* Note : SpritePen=0 means the transparent pen for sprite&lt;br /&gt;
* Example : SPRPLOT,3,10,9,4 plot a pixel pen 4 at coordinates 10,9 of sprite 3&lt;br /&gt;
----&lt;br /&gt;
'''SPRCOPY,SpriteOrg,SpriteDst&lt;br /&gt;
* SpriteOrg=[0..15], SpriteDst=[0..15]&lt;br /&gt;
* Copy the content of SpriteOrg to SpriteDst.&lt;br /&gt;
* Example : SPRCOPY,1,2 copy the content of sprite 1 to sprite 2&lt;br /&gt;
----&lt;br /&gt;
'''SPRTURNX,SpriteNumber'''&lt;br /&gt;
* SpriteNumber=[0..15]&lt;br /&gt;
* Flip the sprite specified on horizontal axis&lt;br /&gt;
* Example : SPRTURNX,1&lt;br /&gt;
----&lt;br /&gt;
'''SPRTURNY,SpriteNumber'''&lt;br /&gt;
* SpriteNumber=[0..15]&lt;br /&gt;
* Flip the sprite specified on vertical axis&lt;br /&gt;
* Example : SPRTURNY,1&lt;br /&gt;
----&lt;br /&gt;
'''SPRFILL,SpriteNumber,SpritePen'''&lt;br /&gt;
* SpriteNumber=[0..15] SpritePen=[0..15]&lt;br /&gt;
* Fill the specified sprite with the specified pen&lt;br /&gt;
* Note : SpritePen=0 means the transparent pen for sprite&lt;br /&gt;
* Example : SPRFILL,1,12 fill the sprite 1 with pen 12&lt;br /&gt;
----&lt;br /&gt;
'''SPRSAVE,[SpriteNumber,] BlocNumber, Filename'''&lt;br /&gt;
* SpriteNumber=[0..15] BlocNumber=[0..4] Filename=Name of file in Amsdos standard&lt;br /&gt;
* Save a sprite or a set of 16 sprites (defined as one Block) to disk&lt;br /&gt;
* B-Asic can store 64 sprites definitions more than the usal sprite contained in asic ram.&lt;br /&gt;
* These 64 sprites are organised as 4 sets of 16 sprites named &amp;quot;Block&amp;quot;.&lt;br /&gt;
* Bloc 1 : sprites 0 to 15, Bloc 2 : sprites 16 to 31, Bloc 3 : sprites 32 to 47 and&lt;br /&gt;
* Bloc 4 : sprites 48 to 63&lt;br /&gt;
* Bloc 0 is used for the 16 &amp;quot;real&amp;quot; asic sprites.&lt;br /&gt;
* If SpriteNumber is not precised in the instruction, so a complete block is saved&lt;br /&gt;
* If SpriteNumber is precised, only the specified sprite of the block is saved&lt;br /&gt;
* Note : Sprites are not optimised (e.g. 1 pixel=1 byte)&lt;br /&gt;
* Example : SPRSAVE,3,2,&amp;quot;SPR3BLK1.BIN&amp;quot; save the sprite 3 of the Bloc 2 (e.g. sprite 18/63)&lt;br /&gt;
* in the file named &amp;quot;SPR3BLK1.BIN&amp;quot;&lt;br /&gt;
* Example : SPRSAVE,0,&amp;quot;SPRASIC.BIN&amp;quot; save the content of block 0 (e.g. 16 asic sprites)&lt;br /&gt;
----&lt;br /&gt;
'''SPRLOAD,[SpriteNumber,] BlocNumber, Filename'''&lt;br /&gt;
* SpriteNumber=[0..15] BlocNumber=[0..4] Filename=Name of file in Amsdos standard&lt;br /&gt;
* Load a sprite or a set of 16 sprites (defined as one Block) from disk&lt;br /&gt;
* B-Asic can store 64 sprites definitions more than the usal sprite contained in asic ram.&lt;br /&gt;
* These 64 sprites are organised as 4 sets of 16 sprites named &amp;quot;Block&amp;quot;.&lt;br /&gt;
* Bloc 1 : sprites 0 to 15, Bloc 2 : sprites 16 to 31, Bloc 3 : sprites 32 to 47 and&lt;br /&gt;
* Bloc 4 : sprites 48 to 63&lt;br /&gt;
* Bloc 0 is used for the 16 &amp;quot;real&amp;quot; asic sprites.&lt;br /&gt;
* If SpriteNumber is not precised in the instruction, so a complete block is loaded&lt;br /&gt;
* If SpriteNumber is precised, only the specified sprite of the block is loaded&lt;br /&gt;
* Note : Sprites are not optimised (e.g. 1 pixel=1 byte)&lt;br /&gt;
* Note : If the file specified has an invalid size, an error is displayed&lt;br /&gt;
* Example : SPRLOAD,3,2,&amp;quot;SPR3BLK1.BIN&amp;quot; load the sprite 3 of the Bloc 2 (e.g. sprite 18/63)&lt;br /&gt;
from the file &amp;quot;SPR3BLK1.BIN&amp;quot;&lt;br /&gt;
* Example : SPRLOAD,3,&amp;quot;RAAHHHHH.SPR&amp;quot; load the block 3 (e.g. sprites 32 to 47) from file &amp;quot;RAAHHHHH.SPR&amp;quot;&lt;br /&gt;
----&lt;br /&gt;
'''SPRTORAM,SpriteAsic,SpriteRam&lt;br /&gt;
* SpriteAsic=[0..15] SpriteRam=[0..63]&lt;br /&gt;
* Copy the content of the current asic sprite in the sprite ram specified&lt;br /&gt;
* See SPRLOAD/SPRSAVE instruction for block oragnisation.&lt;br /&gt;
* Example : SPRTORAM,1,17 copy sprite asic 1 to sprite 17 of ram (e.g.in Block 2)&lt;br /&gt;
----&lt;br /&gt;
'''RAMTOSPR,SpriteRam,SpriteAsic&lt;br /&gt;
* SpriteRam=[0..63] SpriteAsic=[0..15]&lt;br /&gt;
* Copy the content of the sprite in ram in the current asic sprite specified&lt;br /&gt;
* See SPRLOAD/SPRSAVE instruction for block oragnisation.&lt;br /&gt;
* Example : RAMTOSPR,17,1 copy sprite sprite 17 of ram (2nd of bloc 2) in sprite asic 1&lt;br /&gt;
----&lt;br /&gt;
'''CATCH,SpriteNumber,XPos,YPos'''&lt;br /&gt;
* SpriteNumber=[0..15] XPos=[0..143] YPos=[0..183]&lt;br /&gt;
* Get a sprite from mode 0 screen at specified coordinates (coordinates top/left).&lt;br /&gt;
* Note : This instruction runs only in graphic mode 0&lt;br /&gt;
* Example : CATCH,3,120,100 catch the pixels from 120,100 to 135,115 in sprite 3&lt;br /&gt;
----&lt;br /&gt;
'''INKCOPY'''&lt;br /&gt;
* Copy the whole colour screen palette to sprite palette.&lt;br /&gt;
----&lt;br /&gt;
'''SPRLINK,SpriteNumber1,SpriteNumber2,Xrel,Yrel'''&lt;br /&gt;
* SpriteNumberx=[0..15] XRel=[-256..767] YRel=[-256..255]&lt;br /&gt;
* Link a sprite (2) to another sprite (1) with a relative position.&lt;br /&gt;
* That means if sprite (1) is moved, then sprite (2) is moved too.&lt;br /&gt;
* So if sprite 1 is moved in X1,Y1 then the sprite 2 will be moved automatically in X1+Xrel,Y1+Yrel&lt;br /&gt;
* It's possible to link all the sprites in all combinations to create one or more &amp;quot;super sprites&amp;quot;&lt;br /&gt;
* Note : A sprite cannot be linked to itself.&lt;br /&gt;
* Example : SPRLINK,1,2,16,0 link sprite 2 to sprite 1 with a relative x position of 16 pixels&lt;br /&gt;
* Example : SPRLINK,2,5,0,16 link sprite 5 to sprite 2 with a relative y position of 16 pixels&lt;br /&gt;
* [ so move the sprite 1 signify to move sprite 2 and 5 ]&lt;br /&gt;
----&lt;br /&gt;
'''SPRUNLINK,SpriteNumber1,SpriteNumber2'''&lt;br /&gt;
* SpriteNumberx=[0..15]&lt;br /&gt;
* Unlink a sprite from anoter sprite.&lt;br /&gt;
* Example : SPRUNLINK,2,5 erase the link between sprite 2 and 5&lt;br /&gt;
----&lt;br /&gt;
'''ERALINK'''&lt;br /&gt;
* Erase all link&lt;br /&gt;
----&lt;br /&gt;
'''DEFORGXY,SpriteNumber,XPos,YPos'''&lt;br /&gt;
* SpriteNumber=[0..15] XPos=[-256..767] YPos=[-256..255]&lt;br /&gt;
* Define absolute origin position of the specified sprite&lt;br /&gt;
* That means that real sprite position take care of this defined coordinates.&lt;br /&gt;
* Example : DEFORGXY,1,10,20:SPRXY,1,5,3 display sprite at 15,23&lt;br /&gt;
* Note : It's possible to define an origin position for a sprite following a path (see SPRTDEF)&lt;br /&gt;
* The default of origin at B-Asic reset is 0,0&lt;br /&gt;
----&lt;br /&gt;
'''DEFORGSPR,SpriteSlave,SpriteMaster'''&lt;br /&gt;
* SpriteSlave=[0..15] SpriteMaster=[0..15]&lt;br /&gt;
* Define the origin position of SpriteSlave with the position of SpriteMaster.&lt;br /&gt;
* Note : It's possible to define a sprite relative position for a sprite following a path (see SPRTDEF)&lt;br /&gt;
* It's possible to generate complex definitions of sprites movments.&lt;br /&gt;
* If a sprite 1 use a path 1 and a sprite 2 use a path 2, if the sprite 2 is the slave of sprite 1, then&lt;br /&gt;
* the path 2 will be relative to path 1.&lt;br /&gt;
* To erase the slavery of a sprite, use DEFORGXY instruction&lt;br /&gt;
----&lt;br /&gt;
'''SPRWHERE,SpriteNumber,@varx%,@vary%'''&lt;br /&gt;
* SpriteNumber=[0..15] varx=Name of x variable vary=Name of y variable&lt;br /&gt;
* Get the x,y coordinates of the specified sprite&lt;br /&gt;
* Important note : varx and vary must be defined first like integer (declaration in basic with '%') and&lt;br /&gt;
* they must be given to the instruction &amp;quot;by address&amp;quot; ('@' before the variable name). The * declaration must&lt;br /&gt;
* be respected to avoid unpredictibles results.&lt;br /&gt;
* Example : 10 VARX%=0: VARY%=0 : SPRWHERE,1,@VARX%,@VARY%: PRINT VARX%,VARY%&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Others Instructions Set ===&lt;br /&gt;
----&lt;br /&gt;
'''POKEASIC,Address,val1,...,valx'''&lt;br /&gt;
* Address=[&amp;amp;4000..&amp;amp;7FFF] Valx=[&amp;amp;00..&amp;amp;FF]&lt;br /&gt;
* Poke one or more bytes in Asic I/O page&lt;br /&gt;
* Instruction reserved to experimented users.&lt;br /&gt;
----&lt;br /&gt;
'''POKEVR,Address,val1,...,valn'''&lt;br /&gt;
* Address=[&amp;amp;4000..&amp;amp;7FFF] Valx=[&amp;amp;00..&amp;amp;FF]&lt;br /&gt;
* Poke one or more bytes in second video page&lt;br /&gt;
* Instruction reserved to experimented users.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Error Messages ==&lt;br /&gt;
'''Bad arguments number'''&lt;br /&gt;
* Bad number of arguments used in the instruction&lt;br /&gt;
&lt;br /&gt;
'''Invalid Argument'''&lt;br /&gt;
* An invalid value is used in one or more arguments of the instruction&lt;br /&gt;
&lt;br /&gt;
'''Invalid Filename'''&lt;br /&gt;
* A bad filename was used in a SPRSAVE or SPRLOAD instruction&lt;br /&gt;
&lt;br /&gt;
'''Disc Error'''&lt;br /&gt;
* An I/O error has occured in a SPRSAVE or SPRLOAD instruction.&lt;br /&gt;
* Disc is missing, or the disk has a wrong or damaged format.&lt;br /&gt;
&lt;br /&gt;
'''Not a Sprite file'''&lt;br /&gt;
* The size of the file specified in SPRLOAD is not correct.&lt;br /&gt;
* See if you do no use the SPRLOAD with a block instead of a single sprite (or the opposite)&lt;br /&gt;
&lt;br /&gt;
'''Same Sprites Numbers'''&lt;br /&gt;
* An instruction SPRLINK or SPRUNLINK is attempted with 2 identical sprite numbers.&lt;br /&gt;
&lt;br /&gt;
'''Bad Graphic Mode'''&lt;br /&gt;
* Instruction CATCH is not used in MODE 0&lt;br /&gt;
&lt;br /&gt;
'''Invalid Moving List'''&lt;br /&gt;
* An invalid table is created for SPRTDEF &lt;br /&gt;
* (e.g. the first coordinate is the path end)&lt;br /&gt;
&lt;br /&gt;
'''Link Table Full'''&lt;br /&gt;
* The link table is full.&lt;br /&gt;
* Normally this error cannot occur in a well built program.&lt;br /&gt;
&lt;br /&gt;
'''Sprites not Linked'''&lt;br /&gt;
* Instruction SPRUNLINK is used with sprites not linked.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[http://logon.system.free.fr/html/lienscpc.htm Download B-Asic]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming software]]&lt;/div&gt;</summary>
		<author><name>82.228.218.6</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=B-ASIC&amp;diff=9056</id>
		<title>B-ASIC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=B-ASIC&amp;diff=9056"/>
				<updated>2006-10-05T17:19:46Z</updated>
		
		<summary type="html">&lt;p&gt;82.228.218.6: /* Sprites Instructions Set */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''B-Asic''' is a set of RSX commands allowing to use the Amstrad CPC Plus features from [[BASIC]]. It was written by [[Longshot]] of [[Logon System]].&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
'''B-ASIC''' is a set of RSX instructions to manage the extra features of the '''CPC PLUS'''&lt;br /&gt;
&lt;br /&gt;
Since release 3.0 B-ASIC runs only on CPC range with 128 Kb memory&lt;br /&gt;
&lt;br /&gt;
Main instructions can manage colour and sprites, providing an extra bank of '''64 sprites''' for a total of '''80 sprites'''&lt;br /&gt;
&lt;br /&gt;
'''B-ASIC doesn't take any byte of the CPC Basic memory'''.&lt;br /&gt;
&lt;br /&gt;
The RSX definition and code for locomative basic are not declared in main memory&lt;br /&gt;
&lt;br /&gt;
By the way, the whole interruption system and RSX managment is modified when B-Asic start.&lt;br /&gt;
&lt;br /&gt;
From a technical point of view, the code of the program BASIC using B-ASIC is copied in a bank, because&lt;br /&gt;
one bank is always open for the system to store the BASIC code. &lt;br /&gt;
&lt;br /&gt;
By the way, there are two video pages available for the user.&lt;br /&gt;
&lt;br /&gt;
Some instructions are not explained because they will disappear from next version.&lt;br /&gt;
(SPLIT, RETARDX, RETARDY, MASQUE)&lt;br /&gt;
A set of new powerful instructions will come in future versions.&lt;br /&gt;
&lt;br /&gt;
== Historics ==&lt;br /&gt;
* V3.1 xx/xx/1993 B-ASIC doesn't use any byte of BASIC main memory&lt;br /&gt;
* V3.2 25/02/2006 Bug fix on table calculation for path in interrupt / Correct a firmware bug (ei before real interrupt handler end)&lt;br /&gt;
* V3.3 27/02/2006 Forgotten to copy BASIC code from bank 2 to 5 / New instruction : SPRWHERE&lt;br /&gt;
&lt;br /&gt;
== Instructions ==&lt;br /&gt;
----&lt;br /&gt;
=== Colours Instructions Set ===&lt;br /&gt;
----&lt;br /&gt;
'''INKF,pen,colour'''&lt;br /&gt;
* pen=[0..15] colour=[0..4095]&lt;br /&gt;
* Modify colour of a pen&lt;br /&gt;
* Example : INKF,0,2303&lt;br /&gt;
----&lt;br /&gt;
'''INKFRVB,pen,red,green,blue'''&lt;br /&gt;
* pen=[0..15] red=[0..15] green=[0..15] blue=[0..15]&lt;br /&gt;
* Modify colour for a pen using colour elementaries components&lt;br /&gt;
* Example : FOR I=0 TO 15:INKFRVB,0,I,0,0:NEXT I&lt;br /&gt;
----&lt;br /&gt;
'''BORDERP,colour'''&lt;br /&gt;
* colour=[0..4095]&lt;br /&gt;
* Modify border's colour.&lt;br /&gt;
* Example : BORDERP,543&lt;br /&gt;
----&lt;br /&gt;
'''BORDERRVB,red,green,blue'''&lt;br /&gt;
* red=[0..15] green=[0..15] blue=[0..15]&lt;br /&gt;
* Modify border colour using colour elementaries components&lt;br /&gt;
* Example : FOR I=0 TO 15:BORDERRVB,0,0,0,I:NEXT I&lt;br /&gt;
----&lt;br /&gt;
'''INKS,pen,colour'''&lt;br /&gt;
* pen=[1..15] colour=[0..4095]&lt;br /&gt;
* Modify colour of an hardware sprite pen&lt;br /&gt;
* Note : The pen 0 cannot be modified. It's the transparent colour.&lt;br /&gt;
* Example : INKS,1,3456&lt;br /&gt;
----&lt;br /&gt;
'''INKSRVB,pen,red,green,blue'''&lt;br /&gt;
* pen=[1..15] red=[0..15] green=[0..15] blue=[0..15]&lt;br /&gt;
* Modify colour for an hardware sprite pen using colour elementaries components&lt;br /&gt;
* Note : The pen 0 cannot be modified. It's the transparent colour.&lt;br /&gt;
* Example : FOR I=0 TO 15:INKFRVB,0,I,0,0:NEXT I&lt;br /&gt;
----&lt;br /&gt;
=== Sprites Instructions Set ===&lt;br /&gt;
----&lt;br /&gt;
'''SPROFF,SpriteNumber'''&lt;br /&gt;
* SpriteNumber=[0..15]&lt;br /&gt;
* Sprite display is disactivated for specified sprite.&lt;br /&gt;
* Example : SPROFF,3  &lt;br /&gt;
----&lt;br /&gt;
'''SPRON,SpriteNumber'''&lt;br /&gt;
* SpriteNumber=[0..15]&lt;br /&gt;
* Sprite display is activated for specified sprite.&lt;br /&gt;
* Example : SPRON,3  &lt;br /&gt;
----&lt;br /&gt;
'''SPRZOOM,SpriteNumber,XZoom,YZoom'''&lt;br /&gt;
* SpriteNumber=[0..15] XZoom=[0..3] YZoom=[0..3]&lt;br /&gt;
* Define sprite zoom for specified sprite.&lt;br /&gt;
* If XZoom or YZoom is zeroed, sprite is not displayed&lt;br /&gt;
* Zoom value of 1 is no magnify.&lt;br /&gt;
* Note : Sprite must be activated by SPRON instruction to be displayed on screen&lt;br /&gt;
* Example : SPRZOOM,2,2,1 define the sprite 2 magnification to 2x horiz. and 1x vertically&lt;br /&gt;
----&lt;br /&gt;
'''SPRXY,SpriteNumber,XPos,YPos'''&lt;br /&gt;
* SpriteNumber=[0..15] XPos=[-256..767] YZoom=[-256..255]&lt;br /&gt;
* Define sprite position on screen according a mode 2 definition&lt;br /&gt;
* Note : Sprite must be activated by SPRON instruction to be displayed on screen&lt;br /&gt;
* Example : SPRXY,2,100,80 define sprite 2 position at 100,80 coordinates&lt;br /&gt;
----&lt;br /&gt;
'''SPRTDEF,SpriteNumber,Address,DurationPer,WaitingPer'''&lt;br /&gt;
* SpriteNumber=[0..15] Address=[0..65535] DurationPer=[0..65535] WaitingPer=[0..65535]&lt;br /&gt;
* Periods are defined by period of 0,02 second (e.g. 50 = 1 second) &lt;br /&gt;
* Define a path for the specified sprite.&lt;br /&gt;
* The path is defined by screen positions, given by a set of x,y coordinates defined in memory.&lt;br /&gt;
* Each coordinate is defined on 2 bytes (4 bytes for a screen position) in the memory&lt;br /&gt;
* The coordinate must be stored on a little endian method, e.g. the less significant byte in first and the most significant byte in second position in memory.&lt;br /&gt;
* The last x coordinate must take the value F0F0 (hexa) to indicate the path end definition&lt;br /&gt;
* DurationPer indicates the time while the sprite will run on the path (at the last position the path start again at the fist position). &lt;br /&gt;
* If DurationPer is zeroed, so the duration is infinite.&lt;br /&gt;
* WaitingPer indicate the start period which occurs when the path will be activated (see SPRTON and SPRTOFF instructions)&lt;br /&gt;
Note : A same path can be used by one or more sprites.&lt;br /&gt;
Example : SPRTDEF,3,&amp;amp;3000,0,100 to define for sprite 3 a path defined in &amp;amp;3000 with an infinite loop of the path after 2 seconds of start delay after SPRTON,3 instruction.&lt;br /&gt;
----&lt;br /&gt;
'''SPRTON,SprNb1,SprNb2,...,SprNbx'''&lt;br /&gt;
* SprNbx=[O..15]&lt;br /&gt;
* Start the path simultanously for the specified sprites.&lt;br /&gt;
* Note : An undefined path for the sprite may occur an erratic behaviour of the sprite started.&lt;br /&gt;
* Example : SPRTON,1,5,7  start the path for sprites 1, 5 and 7 simultaneously&lt;br /&gt;
----&lt;br /&gt;
'''SPRTOFF,SprNb1,SprNb2,...,SprNbx'''&lt;br /&gt;
* SprNbx=[0..15]&lt;br /&gt;
* Stop the path simultaneously for the specified sprites &lt;br /&gt;
* Example : SPRTOFF,1,7 stop the path for sprites 1 and 7 simultanously&lt;br /&gt;
----&lt;br /&gt;
'''SPRSWAP,SpriteNumber1,SpriteNumber2'''&lt;br /&gt;
* SpriteNumberx=[0..15]&lt;br /&gt;
* Exchange the sprite content of two sprites.&lt;br /&gt;
* Note : If SpriteNumber1=SpriteNumber2 it results just a waste of time.&lt;br /&gt;
* Example : SPRSWAP,1,5 exchange the graphics data of sprites 1 and 5&lt;br /&gt;
----&lt;br /&gt;
'''SPRPLOT,SpriteNumber,XPos,YPos,SpritePen'''&lt;br /&gt;
* SpriteNumber=[0..15] XPos=[0..15] YPos=[0..15] SpritePen=[0..15]&lt;br /&gt;
* Plot a pixel in the specified sprite at specified coordinates&lt;br /&gt;
* Note : SpritePen=0 means the transparent pen for sprite&lt;br /&gt;
* Example : SPRPLOT,3,10,9,4 plot a pixel pen 4 at coordinates 10,9 of sprite 3&lt;br /&gt;
----&lt;br /&gt;
'''SPRCOPY,SpriteOrg,SpriteDst&lt;br /&gt;
* SpriteOrg=[0..15], SpriteDst=[0..15]&lt;br /&gt;
* Copy the content of SpriteOrg to SpriteDst.&lt;br /&gt;
* Example : SPRCOPY,1,2 copy the content of sprite 1 to sprite 2&lt;br /&gt;
----&lt;br /&gt;
'''SPRTURNX,SpriteNumber'''&lt;br /&gt;
* SpriteNumber=[0..15]&lt;br /&gt;
* Flip the sprite specified on horizontal axis&lt;br /&gt;
* Example : SPRTURNX,1&lt;br /&gt;
----&lt;br /&gt;
'''SPRTURNY,SpriteNumber'''&lt;br /&gt;
* SpriteNumber=[0..15]&lt;br /&gt;
* Flip the sprite specified on vertical axis&lt;br /&gt;
* Example : SPRTURNY,1&lt;br /&gt;
----&lt;br /&gt;
'''SPRFILL,SpriteNumber,SpritePen'''&lt;br /&gt;
* SpriteNumber=[0..15] SpritePen=[0..15]&lt;br /&gt;
* Fill the specified sprite with the specified pen&lt;br /&gt;
* Note : SpritePen=0 means the transparent pen for sprite&lt;br /&gt;
* Example : SPRFILL,1,12 fill the sprite 1 with pen 12&lt;br /&gt;
----&lt;br /&gt;
'''SPRSAVE,[SpriteNumber,] BlocNumber, Filename'''&lt;br /&gt;
* SpriteNumber=[0..15] BlocNumber=[0..4] Filename=Name of file in Amsdos standard&lt;br /&gt;
* Save a sprite or a set of 16 sprites (defined as one Block) to disk&lt;br /&gt;
* B-Asic can store 64 sprites definitions more than the usal sprite contained in asic ram.&lt;br /&gt;
* These 64 sprites are organised as 4 sets of 16 sprites named &amp;quot;Block&amp;quot;.&lt;br /&gt;
* Bloc 1 : sprites 0 to 15, Bloc 2 : sprites 16 to 31, Bloc 3 : sprites 32 to 47 and&lt;br /&gt;
* Bloc 4 : sprites 48 to 63&lt;br /&gt;
* Bloc 0 is used for the 16 &amp;quot;real&amp;quot; asic sprites.&lt;br /&gt;
* If SpriteNumber is not precised in the instruction, so a complete block is saved&lt;br /&gt;
* If SpriteNumber is precised, only the specified sprite of the block is saved&lt;br /&gt;
* Note : Sprites are not optimised (e.g. 1 pixel=1 byte)&lt;br /&gt;
* Example : SPRSAVE,3,2,&amp;quot;SPR3BLK1.BIN&amp;quot; save the sprite 3 of the Bloc 2 (e.g. sprite 18/63)&lt;br /&gt;
* in the file named &amp;quot;SPR3BLK1.BIN&amp;quot;&lt;br /&gt;
* Example : SPRSAVE,0,&amp;quot;SPRASIC.BIN&amp;quot; save the content of block 0 (e.g. 16 asic sprites)&lt;br /&gt;
----&lt;br /&gt;
'''SPRLOAD,[SpriteNumber,] BlocNumber, Filename'''&lt;br /&gt;
* SpriteNumber=[0..15] BlocNumber=[0..4] Filename=Name of file in Amsdos standard&lt;br /&gt;
* Load a sprite or a set of 16 sprites (defined as one Block) from disk&lt;br /&gt;
* B-Asic can store 64 sprites definitions more than the usal sprite contained in asic ram.&lt;br /&gt;
* These 64 sprites are organised as 4 sets of 16 sprites named &amp;quot;Block&amp;quot;.&lt;br /&gt;
* Bloc 1 : sprites 0 to 15, Bloc 2 : sprites 16 to 31, Bloc 3 : sprites 32 to 47 and&lt;br /&gt;
* Bloc 4 : sprites 48 to 63&lt;br /&gt;
* Bloc 0 is used for the 16 &amp;quot;real&amp;quot; asic sprites.&lt;br /&gt;
* If SpriteNumber is not precised in the instruction, so a complete block is loaded&lt;br /&gt;
* If SpriteNumber is precised, only the specified sprite of the block is loaded&lt;br /&gt;
* Note : Sprites are not optimised (e.g. 1 pixel=1 byte)&lt;br /&gt;
* Note : If the file specified has an invalid size, an error is displayed&lt;br /&gt;
* Example : SPRLOAD,3,2,&amp;quot;SPR3BLK1.BIN&amp;quot; load the sprite 3 of the Bloc 2 (e.g. sprite 18/63)&lt;br /&gt;
from the file &amp;quot;SPR3BLK1.BIN&amp;quot;&lt;br /&gt;
* Example : SPRLOAD,3,&amp;quot;RAAHHHHH.SPR&amp;quot; load the block 3 (e.g. sprites 32 to 47) from file &amp;quot;RAAHHHHH.SPR&amp;quot;&lt;br /&gt;
----&lt;br /&gt;
'''SPRTORAM,SpriteAsic,SpriteRam&lt;br /&gt;
* SpriteAsic=[0..15] SpriteRam=[0..63]&lt;br /&gt;
* Copy the content of the current asic sprite in the sprite ram specified&lt;br /&gt;
* See SPRLOAD/SPRSAVE instruction for block oragnisation.&lt;br /&gt;
* Example : SPRTORAM,1,17 copy sprite asic 1 to sprite 17 of ram (e.g.in Block 2)&lt;br /&gt;
----&lt;br /&gt;
'''RAMTOSPR,SpriteRam,SpriteAsic&lt;br /&gt;
* SpriteRam=[0..63] SpriteAsic=[0..15]&lt;br /&gt;
* Copy the content of the sprite in ram in the current asic sprite specified&lt;br /&gt;
* See SPRLOAD/SPRSAVE instruction for block oragnisation.&lt;br /&gt;
* Example : RAMTOSPR,17,1 copy sprite sprite 17 of ram (2nd of bloc 2) in sprite asic 1&lt;br /&gt;
----&lt;br /&gt;
'''CATCH,SpriteNumber,XPos,YPos'''&lt;br /&gt;
* SpriteNumber=[0..15] XPos=[0..143] YPos=[0..183]&lt;br /&gt;
* Get a sprite from mode 0 screen at specified coordinates (coordinates top/left).&lt;br /&gt;
* Note : This instruction runs only in graphic mode 0&lt;br /&gt;
* Example : CATCH,3,120,100 catch the pixels from 120,100 to 135,115 in sprite 3&lt;br /&gt;
----&lt;br /&gt;
'''INKCOPY'''&lt;br /&gt;
* Copy the whole colour screen palette to sprite palette.&lt;br /&gt;
----&lt;br /&gt;
'''SPRLINK,SpriteNumber1,SpriteNumber2,Xrel,Yrel'''&lt;br /&gt;
* SpriteNumberx=[0..15] XRel=[-256..767] YRel=[-256..255]&lt;br /&gt;
* Link a sprite (2) to another sprite (1) with a relative position.&lt;br /&gt;
* That means if sprite (1) is moved, then sprite (2) is moved too.&lt;br /&gt;
* So if sprite 1 is moved in X1,Y1 then the sprite 2 will be moved automatically in X1+Xrel,Y1+Yrel&lt;br /&gt;
* It's possible to link all the sprites in all combinations to create one or more &amp;quot;super sprites&amp;quot;&lt;br /&gt;
* Note : A sprite cannot be linked to itself.&lt;br /&gt;
* Example : SPRLINK,1,2,16,0 link sprite 2 to sprite 1 with a relative x position of 16 pixels&lt;br /&gt;
* Example : SPRLINK,2,5,0,16 link sprite 5 to sprite 2 with a relative y position of 16 pixels&lt;br /&gt;
* [ so move the sprite 1 signify to move sprite 2 and 5 ]&lt;br /&gt;
----&lt;br /&gt;
'''SPRUNLINK,SpriteNumber1,SpriteNumber2'''&lt;br /&gt;
* SpriteNumberx=[0..15]&lt;br /&gt;
* Unlink a sprite from anoter sprite.&lt;br /&gt;
* Example : SPRUNLINK,2,5 erase the link between sprite 2 and 5&lt;br /&gt;
----&lt;br /&gt;
'''ERALINK'''&lt;br /&gt;
* Erase all link&lt;br /&gt;
----&lt;br /&gt;
'''DEFORGXY,SpriteNumber,XPos,YPos'''&lt;br /&gt;
* SpriteNumber=[0..15] XPos=[-256..767] YPos=[-256..255]&lt;br /&gt;
* Define absolute origin position of the specified sprite&lt;br /&gt;
* That means that real sprite position take care of this defined coordinates.&lt;br /&gt;
* Example : DEFORGXY,1,10,20:SPRXY,1,5,3 display sprite at 15,23&lt;br /&gt;
* Note : It's possible to define an origin position for a sprite following a path (see SPRTDEF)&lt;br /&gt;
* The default of origin at B-Asic reset is 0,0&lt;br /&gt;
----&lt;br /&gt;
'''DEFORGSPR,SpriteSlave,SpriteMaster'''&lt;br /&gt;
* SpriteSlave=[0..15] SpriteMaster=[0..15]&lt;br /&gt;
* Define the origin position of SpriteSlave with the position of SpriteMaster.&lt;br /&gt;
* Note : It's possible to define a sprite relative position for a sprite following a path (see SPRTDEF)&lt;br /&gt;
* It's possible to generate complex definitions of sprites movments.&lt;br /&gt;
* If a sprite 1 use a path 1 and a sprite 2 use a path 2, if the sprite 2 is the slave of sprite 1, then&lt;br /&gt;
* the path 2 will be relative to path 1.&lt;br /&gt;
* To erase the slavery of a sprite, use DEFORGXY instruction&lt;br /&gt;
----&lt;br /&gt;
'''SPRWHERE,SpriteNumber,@varx%,@vary%'''&lt;br /&gt;
* SpriteNumber=[0..15] varx=Name of x variable vary=Name of y variable&lt;br /&gt;
* Get the x,y coordinates of the specified sprite&lt;br /&gt;
* Important note : varx and vary must be defined first like integer (declaration in basic with '%') and&lt;br /&gt;
* they must be given to the instruction &amp;quot;by address&amp;quot; ('@' before the variable name). The * declaration must&lt;br /&gt;
* be respected to avoid unpredictibles results.&lt;br /&gt;
* Example : 10 VARX%=0: VARY%=0 : SPRWHERE,1,@VARX%,@VARY%: PRINT VARX%,VARY%&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Others Instructions Set ===&lt;br /&gt;
----&lt;br /&gt;
'''POKEASIC,Address,val1,...,valx'''&lt;br /&gt;
* Address=[&amp;amp;4000..&amp;amp;7FFF] Valx=[&amp;amp;00..&amp;amp;FF]&lt;br /&gt;
* Poke one or more bytes in Asic I/O page&lt;br /&gt;
* Instruction reserved to experimented users.&lt;br /&gt;
----&lt;br /&gt;
'''POKEVR,Address,val1,...,valn'''&lt;br /&gt;
* Address=[&amp;amp;4000..&amp;amp;7FFF] Valx=[&amp;amp;00..&amp;amp;FF]&lt;br /&gt;
* Poke one or more bytes in second video page&lt;br /&gt;
* Instruction reserved to experimented users.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Error Messages ==&lt;br /&gt;
'''Bad arguments number'''&lt;br /&gt;
* Bad number of arguments used in the instruction&lt;br /&gt;
&lt;br /&gt;
'''Invalid Argument'''&lt;br /&gt;
* An invalid value is used in one or more arguments of the instruction&lt;br /&gt;
&lt;br /&gt;
'''Invalid Filename'''&lt;br /&gt;
* A bad filename was used in a SPRSAVE or SPRLOAD instruction&lt;br /&gt;
&lt;br /&gt;
'''Disc Error'''&lt;br /&gt;
* An I/O error has occured in a SPRSAVE or SPRLOAD instruction.&lt;br /&gt;
* Disc is missing, or the disk has a wrong or damaged format.&lt;br /&gt;
&lt;br /&gt;
'''Not a Sprite file'''&lt;br /&gt;
* The size of the file specified in SPRLOAD is not correct.&lt;br /&gt;
* See if you do no use the SPRLOAD with a block instead of a single sprite (or the opposite)&lt;br /&gt;
&lt;br /&gt;
'''Same Sprites Numbers'''&lt;br /&gt;
* An instruction SPRLINK or SPRUNLINK is attempted with 2 identical sprite numbers.&lt;br /&gt;
&lt;br /&gt;
'''Bad Graphic Mode'''&lt;br /&gt;
* Instruction CATCH is not used in MODE 0&lt;br /&gt;
&lt;br /&gt;
'''Invalid Moving List'''&lt;br /&gt;
* An invalid table is created for SPRTDEF &lt;br /&gt;
* (e.g. the first coordinate is the path end)&lt;br /&gt;
&lt;br /&gt;
'''Link Table Full'''&lt;br /&gt;
* The link table is full.&lt;br /&gt;
* Normally this error cannot occur in a well built program.&lt;br /&gt;
&lt;br /&gt;
'''Sprites not Linked'''&lt;br /&gt;
* Instruction SPRUNLINK is used with sprites not linked.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[http://logon.system.free.fr/html/lienscpc.htm Download B-Asic]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming software]]&lt;/div&gt;</summary>
		<author><name>82.228.218.6</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=B-ASIC&amp;diff=9055</id>
		<title>B-ASIC</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=B-ASIC&amp;diff=9055"/>
				<updated>2006-10-05T17:18:56Z</updated>
		
		<summary type="html">&lt;p&gt;82.228.218.6: /* Sprites Instructions Set */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''B-Asic''' is a set of RSX commands allowing to use the Amstrad CPC Plus features from [[BASIC]]. It was written by [[Longshot]] of [[Logon System]].&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
'''B-ASIC''' is a set of RSX instructions to manage the extra features of the '''CPC PLUS'''&lt;br /&gt;
&lt;br /&gt;
Since release 3.0 B-ASIC runs only on CPC range with 128 Kb memory&lt;br /&gt;
&lt;br /&gt;
Main instructions can manage colour and sprites, providing an extra bank of '''64 sprites''' for a total of '''80 sprites'''&lt;br /&gt;
&lt;br /&gt;
'''B-ASIC doesn't take any byte of the CPC Basic memory'''.&lt;br /&gt;
&lt;br /&gt;
The RSX definition and code for locomative basic are not declared in main memory&lt;br /&gt;
&lt;br /&gt;
By the way, the whole interruption system and RSX managment is modified when B-Asic start.&lt;br /&gt;
&lt;br /&gt;
From a technical point of view, the code of the program BASIC using B-ASIC is copied in a bank, because&lt;br /&gt;
one bank is always open for the system to store the BASIC code. &lt;br /&gt;
&lt;br /&gt;
By the way, there are two video pages available for the user.&lt;br /&gt;
&lt;br /&gt;
Some instructions are not explained because they will disappear from next version.&lt;br /&gt;
(SPLIT, RETARDX, RETARDY, MASQUE)&lt;br /&gt;
A set of new powerful instructions will come in future versions.&lt;br /&gt;
&lt;br /&gt;
== Historics ==&lt;br /&gt;
* V3.1 xx/xx/1993 B-ASIC doesn't use any byte of BASIC main memory&lt;br /&gt;
* V3.2 25/02/2006 Bug fix on table calculation for path in interrupt / Correct a firmware bug (ei before real interrupt handler end)&lt;br /&gt;
* V3.3 27/02/2006 Forgotten to copy BASIC code from bank 2 to 5 / New instruction : SPRWHERE&lt;br /&gt;
&lt;br /&gt;
== Instructions ==&lt;br /&gt;
----&lt;br /&gt;
=== Colours Instructions Set ===&lt;br /&gt;
----&lt;br /&gt;
'''INKF,pen,colour'''&lt;br /&gt;
* pen=[0..15] colour=[0..4095]&lt;br /&gt;
* Modify colour of a pen&lt;br /&gt;
* Example : INKF,0,2303&lt;br /&gt;
----&lt;br /&gt;
'''INKFRVB,pen,red,green,blue'''&lt;br /&gt;
* pen=[0..15] red=[0..15] green=[0..15] blue=[0..15]&lt;br /&gt;
* Modify colour for a pen using colour elementaries components&lt;br /&gt;
* Example : FOR I=0 TO 15:INKFRVB,0,I,0,0:NEXT I&lt;br /&gt;
----&lt;br /&gt;
'''BORDERP,colour'''&lt;br /&gt;
* colour=[0..4095]&lt;br /&gt;
* Modify border's colour.&lt;br /&gt;
* Example : BORDERP,543&lt;br /&gt;
----&lt;br /&gt;
'''BORDERRVB,red,green,blue'''&lt;br /&gt;
* red=[0..15] green=[0..15] blue=[0..15]&lt;br /&gt;
* Modify border colour using colour elementaries components&lt;br /&gt;
* Example : FOR I=0 TO 15:BORDERRVB,0,0,0,I:NEXT I&lt;br /&gt;
----&lt;br /&gt;
'''INKS,pen,colour'''&lt;br /&gt;
* pen=[1..15] colour=[0..4095]&lt;br /&gt;
* Modify colour of an hardware sprite pen&lt;br /&gt;
* Note : The pen 0 cannot be modified. It's the transparent colour.&lt;br /&gt;
* Example : INKS,1,3456&lt;br /&gt;
----&lt;br /&gt;
'''INKSRVB,pen,red,green,blue'''&lt;br /&gt;
* pen=[1..15] red=[0..15] green=[0..15] blue=[0..15]&lt;br /&gt;
* Modify colour for an hardware sprite pen using colour elementaries components&lt;br /&gt;
* Note : The pen 0 cannot be modified. It's the transparent colour.&lt;br /&gt;
* Example : FOR I=0 TO 15:INKFRVB,0,I,0,0:NEXT I&lt;br /&gt;
----&lt;br /&gt;
=== Sprites Instructions Set ===&lt;br /&gt;
----&lt;br /&gt;
'''SPROFF,SpriteNumber'''&lt;br /&gt;
* SpriteNumber=[0..15]&lt;br /&gt;
* Sprite display is disactivated for specified sprite.&lt;br /&gt;
* Example : SPROFF,3  &lt;br /&gt;
----&lt;br /&gt;
'''SPRON,SpriteNumber'''&lt;br /&gt;
* SpriteNumber=[0..15]&lt;br /&gt;
* Sprite display is activated for specified sprite.&lt;br /&gt;
* Example : SPRON,3  &lt;br /&gt;
----&lt;br /&gt;
'''SPRZOOM,SpriteNumber,XZoom,YZoom'''&lt;br /&gt;
* SpriteNumber=[0..15] XZoom=[0..3] YZoom=[0..3]&lt;br /&gt;
* Define sprite zoom for specified sprite.&lt;br /&gt;
* If XZoom or YZoom is zeroed, sprite is not displayed&lt;br /&gt;
* Zoom value of 1 is no magnify.&lt;br /&gt;
* Note : Sprite must be activated by SPRON instruction to be displayed on screen&lt;br /&gt;
* Example : SPRZOOM,2,2,1 define the sprite 2 magnification to 2x horiz. and 1x vertically&lt;br /&gt;
----&lt;br /&gt;
'''SPRXY,SpriteNumber,XPos,YPos'''&lt;br /&gt;
* SpriteNumber=[0..15] XPos=[-256..767] YZoom=[-256..255]&lt;br /&gt;
* Define sprite position on screen according a mode 2 definition&lt;br /&gt;
* Note : Sprite must be activated by SPRON instruction to be displayed on screen&lt;br /&gt;
* Example : SPRXY,2,100,80 define sprite 2 position at 100,80 coordinates&lt;br /&gt;
----&lt;br /&gt;
'''SPRTDEF,SpriteNumber,Address,DurationPer,WaitingPer'''&lt;br /&gt;
* SpriteNumber=[0..15] Address=[0..65535] DurationPer=[0..65535] WaitingPer=[0..65535]&lt;br /&gt;
* Periods are defined by period of 0,02 second (e.g. 50 = 1 second) &lt;br /&gt;
* Define a path for the specified sprite.&lt;br /&gt;
* The path is defined by screen positions, given by a set of x,y coordinates defined in memory.&lt;br /&gt;
* Each coordinate is defined on 2 bytes (4 bytes for a screen position) in the memory&lt;br /&gt;
* The coordinate must be stored on a little endian method, e.g. the less significant byte in first and the most significant byte in second position in memory.&lt;br /&gt;
* The last x coordinate must take the value F0F0 (hexa) to indicate the path end definition&lt;br /&gt;
* DurationPer indicates the time while the sprite will run on the path (at the last position&lt;br /&gt;
* the path start again at the fist position). &lt;br /&gt;
* If DurationPer is zeroed, so the duration is infinite.&lt;br /&gt;
* WaitingPer indicate the start period which occurs when the path will be activated&lt;br /&gt;
* (see SPRTON and SPRTOFF instructions)&lt;br /&gt;
* Note : A same path can be used by one or more sprites.&lt;br /&gt;
* Example : SPRTDEF,3,&amp;amp;3000,0,100 to define for sprite 3 a path defined in &amp;amp;3000 with an infinite&lt;br /&gt;
* loop of the path after 2 seconds of start delay after SPRTON,3 instruction.&lt;br /&gt;
----&lt;br /&gt;
'''SPRTON,SprNb1,SprNb2,...,SprNbx'''&lt;br /&gt;
* SprNbx=[O..15]&lt;br /&gt;
* Start the path simultanously for the specified sprites.&lt;br /&gt;
* Note : An undefined path for the sprite may occur an erratic behaviour of the sprite started.&lt;br /&gt;
* Example : SPRTON,1,5,7  start the path for sprites 1, 5 and 7 simultaneously&lt;br /&gt;
----&lt;br /&gt;
'''SPRTOFF,SprNb1,SprNb2,...,SprNbx'''&lt;br /&gt;
* SprNbx=[0..15]&lt;br /&gt;
* Stop the path simultaneously for the specified sprites &lt;br /&gt;
* Example : SPRTOFF,1,7 stop the path for sprites 1 and 7 simultanously&lt;br /&gt;
----&lt;br /&gt;
'''SPRSWAP,SpriteNumber1,SpriteNumber2'''&lt;br /&gt;
* SpriteNumberx=[0..15]&lt;br /&gt;
* Exchange the sprite content of two sprites.&lt;br /&gt;
* Note : If SpriteNumber1=SpriteNumber2 it results just a waste of time.&lt;br /&gt;
* Example : SPRSWAP,1,5 exchange the graphics data of sprites 1 and 5&lt;br /&gt;
----&lt;br /&gt;
'''SPRPLOT,SpriteNumber,XPos,YPos,SpritePen'''&lt;br /&gt;
* SpriteNumber=[0..15] XPos=[0..15] YPos=[0..15] SpritePen=[0..15]&lt;br /&gt;
* Plot a pixel in the specified sprite at specified coordinates&lt;br /&gt;
* Note : SpritePen=0 means the transparent pen for sprite&lt;br /&gt;
* Example : SPRPLOT,3,10,9,4 plot a pixel pen 4 at coordinates 10,9 of sprite 3&lt;br /&gt;
----&lt;br /&gt;
'''SPRCOPY,SpriteOrg,SpriteDst&lt;br /&gt;
* SpriteOrg=[0..15], SpriteDst=[0..15]&lt;br /&gt;
* Copy the content of SpriteOrg to SpriteDst.&lt;br /&gt;
* Example : SPRCOPY,1,2 copy the content of sprite 1 to sprite 2&lt;br /&gt;
----&lt;br /&gt;
'''SPRTURNX,SpriteNumber'''&lt;br /&gt;
* SpriteNumber=[0..15]&lt;br /&gt;
* Flip the sprite specified on horizontal axis&lt;br /&gt;
* Example : SPRTURNX,1&lt;br /&gt;
----&lt;br /&gt;
'''SPRTURNY,SpriteNumber'''&lt;br /&gt;
* SpriteNumber=[0..15]&lt;br /&gt;
* Flip the sprite specified on vertical axis&lt;br /&gt;
* Example : SPRTURNY,1&lt;br /&gt;
----&lt;br /&gt;
'''SPRFILL,SpriteNumber,SpritePen'''&lt;br /&gt;
* SpriteNumber=[0..15] SpritePen=[0..15]&lt;br /&gt;
* Fill the specified sprite with the specified pen&lt;br /&gt;
* Note : SpritePen=0 means the transparent pen for sprite&lt;br /&gt;
* Example : SPRFILL,1,12 fill the sprite 1 with pen 12&lt;br /&gt;
----&lt;br /&gt;
'''SPRSAVE,[SpriteNumber,] BlocNumber, Filename'''&lt;br /&gt;
* SpriteNumber=[0..15] BlocNumber=[0..4] Filename=Name of file in Amsdos standard&lt;br /&gt;
* Save a sprite or a set of 16 sprites (defined as one Block) to disk&lt;br /&gt;
* B-Asic can store 64 sprites definitions more than the usal sprite contained in asic ram.&lt;br /&gt;
* These 64 sprites are organised as 4 sets of 16 sprites named &amp;quot;Block&amp;quot;.&lt;br /&gt;
* Bloc 1 : sprites 0 to 15, Bloc 2 : sprites 16 to 31, Bloc 3 : sprites 32 to 47 and&lt;br /&gt;
* Bloc 4 : sprites 48 to 63&lt;br /&gt;
* Bloc 0 is used for the 16 &amp;quot;real&amp;quot; asic sprites.&lt;br /&gt;
* If SpriteNumber is not precised in the instruction, so a complete block is saved&lt;br /&gt;
* If SpriteNumber is precised, only the specified sprite of the block is saved&lt;br /&gt;
* Note : Sprites are not optimised (e.g. 1 pixel=1 byte)&lt;br /&gt;
* Example : SPRSAVE,3,2,&amp;quot;SPR3BLK1.BIN&amp;quot; save the sprite 3 of the Bloc 2 (e.g. sprite 18/63)&lt;br /&gt;
* in the file named &amp;quot;SPR3BLK1.BIN&amp;quot;&lt;br /&gt;
* Example : SPRSAVE,0,&amp;quot;SPRASIC.BIN&amp;quot; save the content of block 0 (e.g. 16 asic sprites)&lt;br /&gt;
----&lt;br /&gt;
'''SPRLOAD,[SpriteNumber,] BlocNumber, Filename'''&lt;br /&gt;
* SpriteNumber=[0..15] BlocNumber=[0..4] Filename=Name of file in Amsdos standard&lt;br /&gt;
* Load a sprite or a set of 16 sprites (defined as one Block) from disk&lt;br /&gt;
* B-Asic can store 64 sprites definitions more than the usal sprite contained in asic ram.&lt;br /&gt;
* These 64 sprites are organised as 4 sets of 16 sprites named &amp;quot;Block&amp;quot;.&lt;br /&gt;
* Bloc 1 : sprites 0 to 15, Bloc 2 : sprites 16 to 31, Bloc 3 : sprites 32 to 47 and&lt;br /&gt;
* Bloc 4 : sprites 48 to 63&lt;br /&gt;
* Bloc 0 is used for the 16 &amp;quot;real&amp;quot; asic sprites.&lt;br /&gt;
* If SpriteNumber is not precised in the instruction, so a complete block is loaded&lt;br /&gt;
* If SpriteNumber is precised, only the specified sprite of the block is loaded&lt;br /&gt;
* Note : Sprites are not optimised (e.g. 1 pixel=1 byte)&lt;br /&gt;
* Note : If the file specified has an invalid size, an error is displayed&lt;br /&gt;
* Example : SPRLOAD,3,2,&amp;quot;SPR3BLK1.BIN&amp;quot; load the sprite 3 of the Bloc 2 (e.g. sprite 18/63)&lt;br /&gt;
from the file &amp;quot;SPR3BLK1.BIN&amp;quot;&lt;br /&gt;
* Example : SPRLOAD,3,&amp;quot;RAAHHHHH.SPR&amp;quot; load the block 3 (e.g. sprites 32 to 47) from file &amp;quot;RAAHHHHH.SPR&amp;quot;&lt;br /&gt;
----&lt;br /&gt;
'''SPRTORAM,SpriteAsic,SpriteRam&lt;br /&gt;
* SpriteAsic=[0..15] SpriteRam=[0..63]&lt;br /&gt;
* Copy the content of the current asic sprite in the sprite ram specified&lt;br /&gt;
* See SPRLOAD/SPRSAVE instruction for block oragnisation.&lt;br /&gt;
* Example : SPRTORAM,1,17 copy sprite asic 1 to sprite 17 of ram (e.g.in Block 2)&lt;br /&gt;
----&lt;br /&gt;
'''RAMTOSPR,SpriteRam,SpriteAsic&lt;br /&gt;
* SpriteRam=[0..63] SpriteAsic=[0..15]&lt;br /&gt;
* Copy the content of the sprite in ram in the current asic sprite specified&lt;br /&gt;
* See SPRLOAD/SPRSAVE instruction for block oragnisation.&lt;br /&gt;
* Example : RAMTOSPR,17,1 copy sprite sprite 17 of ram (2nd of bloc 2) in sprite asic 1&lt;br /&gt;
----&lt;br /&gt;
'''CATCH,SpriteNumber,XPos,YPos'''&lt;br /&gt;
* SpriteNumber=[0..15] XPos=[0..143] YPos=[0..183]&lt;br /&gt;
* Get a sprite from mode 0 screen at specified coordinates (coordinates top/left).&lt;br /&gt;
* Note : This instruction runs only in graphic mode 0&lt;br /&gt;
* Example : CATCH,3,120,100 catch the pixels from 120,100 to 135,115 in sprite 3&lt;br /&gt;
----&lt;br /&gt;
'''INKCOPY'''&lt;br /&gt;
* Copy the whole colour screen palette to sprite palette.&lt;br /&gt;
----&lt;br /&gt;
'''SPRLINK,SpriteNumber1,SpriteNumber2,Xrel,Yrel'''&lt;br /&gt;
* SpriteNumberx=[0..15] XRel=[-256..767] YRel=[-256..255]&lt;br /&gt;
* Link a sprite (2) to another sprite (1) with a relative position.&lt;br /&gt;
* That means if sprite (1) is moved, then sprite (2) is moved too.&lt;br /&gt;
* So if sprite 1 is moved in X1,Y1 then the sprite 2 will be moved automatically in X1+Xrel,Y1+Yrel&lt;br /&gt;
* It's possible to link all the sprites in all combinations to create one or more &amp;quot;super sprites&amp;quot;&lt;br /&gt;
* Note : A sprite cannot be linked to itself.&lt;br /&gt;
* Example : SPRLINK,1,2,16,0 link sprite 2 to sprite 1 with a relative x position of 16 pixels&lt;br /&gt;
* Example : SPRLINK,2,5,0,16 link sprite 5 to sprite 2 with a relative y position of 16 pixels&lt;br /&gt;
* [ so move the sprite 1 signify to move sprite 2 and 5 ]&lt;br /&gt;
----&lt;br /&gt;
'''SPRUNLINK,SpriteNumber1,SpriteNumber2'''&lt;br /&gt;
* SpriteNumberx=[0..15]&lt;br /&gt;
* Unlink a sprite from anoter sprite.&lt;br /&gt;
* Example : SPRUNLINK,2,5 erase the link between sprite 2 and 5&lt;br /&gt;
----&lt;br /&gt;
'''ERALINK'''&lt;br /&gt;
* Erase all link&lt;br /&gt;
----&lt;br /&gt;
'''DEFORGXY,SpriteNumber,XPos,YPos'''&lt;br /&gt;
* SpriteNumber=[0..15] XPos=[-256..767] YPos=[-256..255]&lt;br /&gt;
* Define absolute origin position of the specified sprite&lt;br /&gt;
* That means that real sprite position take care of this defined coordinates.&lt;br /&gt;
* Example : DEFORGXY,1,10,20:SPRXY,1,5,3 display sprite at 15,23&lt;br /&gt;
* Note : It's possible to define an origin position for a sprite following a path (see SPRTDEF)&lt;br /&gt;
* The default of origin at B-Asic reset is 0,0&lt;br /&gt;
----&lt;br /&gt;
'''DEFORGSPR,SpriteSlave,SpriteMaster'''&lt;br /&gt;
* SpriteSlave=[0..15] SpriteMaster=[0..15]&lt;br /&gt;
* Define the origin position of SpriteSlave with the position of SpriteMaster.&lt;br /&gt;
* Note : It's possible to define a sprite relative position for a sprite following a path (see SPRTDEF)&lt;br /&gt;
* It's possible to generate complex definitions of sprites movments.&lt;br /&gt;
* If a sprite 1 use a path 1 and a sprite 2 use a path 2, if the sprite 2 is the slave of sprite 1, then&lt;br /&gt;
* the path 2 will be relative to path 1.&lt;br /&gt;
* To erase the slavery of a sprite, use DEFORGXY instruction&lt;br /&gt;
----&lt;br /&gt;
'''SPRWHERE,SpriteNumber,@varx%,@vary%'''&lt;br /&gt;
* SpriteNumber=[0..15] varx=Name of x variable vary=Name of y variable&lt;br /&gt;
* Get the x,y coordinates of the specified sprite&lt;br /&gt;
* Important note : varx and vary must be defined first like integer (declaration in basic with '%') and&lt;br /&gt;
* they must be given to the instruction &amp;quot;by address&amp;quot; ('@' before the variable name). The * declaration must&lt;br /&gt;
* be respected to avoid unpredictibles results.&lt;br /&gt;
* Example : 10 VARX%=0: VARY%=0 : SPRWHERE,1,@VARX%,@VARY%: PRINT VARX%,VARY%&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Others Instructions Set ===&lt;br /&gt;
----&lt;br /&gt;
'''POKEASIC,Address,val1,...,valx'''&lt;br /&gt;
* Address=[&amp;amp;4000..&amp;amp;7FFF] Valx=[&amp;amp;00..&amp;amp;FF]&lt;br /&gt;
* Poke one or more bytes in Asic I/O page&lt;br /&gt;
* Instruction reserved to experimented users.&lt;br /&gt;
----&lt;br /&gt;
'''POKEVR,Address,val1,...,valn'''&lt;br /&gt;
* Address=[&amp;amp;4000..&amp;amp;7FFF] Valx=[&amp;amp;00..&amp;amp;FF]&lt;br /&gt;
* Poke one or more bytes in second video page&lt;br /&gt;
* Instruction reserved to experimented users.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Error Messages ==&lt;br /&gt;
'''Bad arguments number'''&lt;br /&gt;
* Bad number of arguments used in the instruction&lt;br /&gt;
&lt;br /&gt;
'''Invalid Argument'''&lt;br /&gt;
* An invalid value is used in one or more arguments of the instruction&lt;br /&gt;
&lt;br /&gt;
'''Invalid Filename'''&lt;br /&gt;
* A bad filename was used in a SPRSAVE or SPRLOAD instruction&lt;br /&gt;
&lt;br /&gt;
'''Disc Error'''&lt;br /&gt;
* An I/O error has occured in a SPRSAVE or SPRLOAD instruction.&lt;br /&gt;
* Disc is missing, or the disk has a wrong or damaged format.&lt;br /&gt;
&lt;br /&gt;
'''Not a Sprite file'''&lt;br /&gt;
* The size of the file specified in SPRLOAD is not correct.&lt;br /&gt;
* See if you do no use the SPRLOAD with a block instead of a single sprite (or the opposite)&lt;br /&gt;
&lt;br /&gt;
'''Same Sprites Numbers'''&lt;br /&gt;
* An instruction SPRLINK or SPRUNLINK is attempted with 2 identical sprite numbers.&lt;br /&gt;
&lt;br /&gt;
'''Bad Graphic Mode'''&lt;br /&gt;
* Instruction CATCH is not used in MODE 0&lt;br /&gt;
&lt;br /&gt;
'''Invalid Moving List'''&lt;br /&gt;
* An invalid table is created for SPRTDEF &lt;br /&gt;
* (e.g. the first coordinate is the path end)&lt;br /&gt;
&lt;br /&gt;
'''Link Table Full'''&lt;br /&gt;
* The link table is full.&lt;br /&gt;
* Normally this error cannot occur in a well built program.&lt;br /&gt;
&lt;br /&gt;
'''Sprites not Linked'''&lt;br /&gt;
* Instruction SPRUNLINK is used with sprites not linked.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[http://logon.system.free.fr/html/lienscpc.htm Download B-Asic]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming software]]&lt;/div&gt;</summary>
		<author><name>82.228.218.6</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Fenyx_Kell&amp;diff=8677</id>
		<title>Fenyx Kell</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Fenyx_Kell&amp;diff=8677"/>
				<updated>2006-09-28T21:27:26Z</updated>
		
		<summary type="html">&lt;p&gt;82.228.218.6: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Fenyx Kell''' is a french programmer and musician on CPC and CPC +.&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
* [[I.S.C.]] (1988, shooting game)&lt;br /&gt;
* [[Dingbot]] (1989, a [[Boulder Dash]] clone)&lt;br /&gt;
* [[Time]] (1991, adventure game)&lt;br /&gt;
* [[Burglar]] (1991, adventure game, edited by [[Lankhor]] within compilation [[Black Soft (Vol. 1)]])&lt;br /&gt;
* [[Light Sword]] (1991, adventure game, aborted)&lt;br /&gt;
* [[Haruspice]] (1992, RPG, aborted. Dungeon Master clone)&lt;br /&gt;
* [[Ravening]] (1992, puzzle game. Puzznic clone)&lt;br /&gt;
* [[Le Petit Chevalier]] (1992, platform game)&lt;br /&gt;
* [[Pignools]] (1992, puzzle game. Lemmings clone)&lt;br /&gt;
* [[Retry, Ignore &amp;amp; Cancel]] (1993, platform game)&lt;br /&gt;
* [[Call &amp;amp;BD10'n Oeuf]] (2005, CPC+ only, platform/puzzle game). 3rd presented at the [[Amstrad Expo 2005]] in Coutances, France.&lt;br /&gt;
* [[Overscanoid]] (under developpment)&lt;br /&gt;
&lt;br /&gt;
== Fanzine Disc ==&lt;br /&gt;
* [[Demo Phoenix II]] (1992)&lt;br /&gt;
&lt;br /&gt;
== Music ==&lt;br /&gt;
* [[Call &amp;amp;BD10'n Oeuf]] (2005)&lt;br /&gt;
* [[Bobline]] (2005)&lt;br /&gt;
* [[Solarium]] (2005)&lt;br /&gt;
&lt;br /&gt;
== Utilities ==&lt;br /&gt;
* [[Sprite Editor]] (1993, a Sprite editor for AMX Mouse)&lt;br /&gt;
* [[DBD7]] (2004, Floppy disk database for CPC, on CPC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:CPC scene members]]&lt;/div&gt;</summary>
		<author><name>82.228.218.6</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=CPC_scene_members&amp;diff=8676</id>
		<title>CPC scene members</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=CPC_scene_members&amp;diff=8676"/>
				<updated>2006-09-28T21:08:42Z</updated>
		
		<summary type="html">&lt;p&gt;82.228.218.6: /* France */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an alphabetical list of '''CPC scene members''' sorted by the country they originally came from and which are (going to be) mentioned in this CPCWiki.&lt;br /&gt;
&lt;br /&gt;
Feel free to add your own entry here.&lt;br /&gt;
&lt;br /&gt;
== Austria ==&lt;br /&gt;
* [[EGS]]&lt;br /&gt;
* [[Hexenmeister]]&lt;br /&gt;
* [[Red Storm]]&lt;br /&gt;
&lt;br /&gt;
== Denmark ==&lt;br /&gt;
* [[007]]&lt;br /&gt;
* [[ABC crackers]]&lt;br /&gt;
* [[Deltatronic]]&lt;br /&gt;
* [[JCP]]&lt;br /&gt;
* [[JLCS]]&lt;br /&gt;
* [[LFS]]&lt;br /&gt;
* [[Mr. Malonie]]&lt;br /&gt;
* [[Mr. Watson]]&lt;br /&gt;
* [[NWC]]&lt;br /&gt;
* [[Tyronesoft]]&lt;br /&gt;
* [[Underware]]&lt;br /&gt;
&lt;br /&gt;
== France ==&lt;br /&gt;
* [[Antoine]] of [[POW]]&lt;br /&gt;
* [[AST]] of [[Ast System]]&lt;br /&gt;
* [[Baud]]&lt;br /&gt;
* [[Barjack]] of [[Futur's]]&lt;br /&gt;
* [[Beb]] of [[Overlanders]]&lt;br /&gt;
* [[C.A.C.H]]&lt;br /&gt;
* [[Cafe Kids Crackers]]&lt;br /&gt;
* [[Candy]] of [[Overlanders]]&lt;br /&gt;
* [[Celctic Gang]]&lt;br /&gt;
* [[Chany]] of [[NPS]]&lt;br /&gt;
* [[CMP]] of [[Paradox]]&lt;br /&gt;
* [[Demoniak]]&lt;br /&gt;
* [[Digit]] of [[Logon System]]&lt;br /&gt;
* [[Dr. Felix]]&lt;br /&gt;
* [[Dracula]] of [[Mortel]]&lt;br /&gt;
* [[Eliot]]&lt;br /&gt;
* [[Eros]] of [[Logon System]]&lt;br /&gt;
* [[Fefesse]]&lt;br /&gt;
* [[Fenyx Kell]]&lt;br /&gt;
* [[Fred Crazy]] of [[Logon System]]&lt;br /&gt;
* [[Gozeur]] of [[Contrast]]&lt;br /&gt;
* [[Grees]] of [[NPS]]&lt;br /&gt;
* [[Grim]] of [[Arkos]]&lt;br /&gt;
* [[Hydris]]&lt;br /&gt;
* [[Kaneda]] of [[Mortel]]&lt;br /&gt;
* [[KOD]]&lt;br /&gt;
* [[Longshot]] of [[Logon System]]&lt;br /&gt;
* [[Madram]] of [[Overlanders]]&lt;br /&gt;
* [[Naminu]] of [[Logon System]]&lt;br /&gt;
* [[Nicky One]]&lt;br /&gt;
* [[OffseT]] of [[Futur's]]&lt;br /&gt;
* [[One]]&lt;br /&gt;
* [[Overflow]] of [[Logon System]]&lt;br /&gt;
* [[Patrice Bruhat]]&lt;br /&gt;
* [[Pict]] of [[Logon System]]&lt;br /&gt;
* [[Poum]]&lt;br /&gt;
* [[PulkoMandy]]&lt;br /&gt;
* [[Ram 7]]&lt;br /&gt;
* [[Ramlaid]] of [[Arkos]]&lt;br /&gt;
* [[Ric]]&lt;br /&gt;
* [[Rubi]] of [[Logon System]]&lt;br /&gt;
* [[Shap]] of [[Overlanders]]&lt;br /&gt;
* [[Slash]] of [[Logon System]]&lt;br /&gt;
* [[Snn]] of [[Futur's]]&lt;br /&gt;
* [[Squat]] of [[Overlanders]]&lt;br /&gt;
* [[Stv]] of [[Overlanders]]&lt;br /&gt;
* [[Supersly]] of [[Les Sucres En Morceaux]]&lt;br /&gt;
* [[Targhan]] of [[Arkos]]&lt;br /&gt;
* [[TB Crackers]]&lt;br /&gt;
* [[Tenebros]] of [[GPA]]&lt;br /&gt;
* [[Tom &amp;amp; Jerry]] of [[GPA]]&lt;br /&gt;
* [[Tony]] of [[Futur's]]&lt;br /&gt;
* [[Tronic]] of [[GPA]]&lt;br /&gt;
* [[Two Mag]] of [[GPA]]&lt;br /&gt;
* [[XOR]]&lt;br /&gt;
* [[Ynexys]] of [[Paradox]]&lt;br /&gt;
* [[Zik]] of [[Futur's]]&lt;br /&gt;
&lt;br /&gt;
== Germany ==&lt;br /&gt;
* [[Ablaze]]&lt;br /&gt;
* [[ACS]]&lt;br /&gt;
* [[Alien]]&lt;br /&gt;
* [[Amadeus]]&lt;br /&gt;
* [[Bad Error]]&lt;br /&gt;
* [[Batman]]&lt;br /&gt;
* [[Black Mission]]&lt;br /&gt;
* [[Blue-Ice]]&lt;br /&gt;
* [[Boris]] of [[Merlyn]]&lt;br /&gt;
* [[Brainblaster]]&lt;br /&gt;
* [[BSC]]&lt;br /&gt;
* [[Chilly]] of [[KKB]]&lt;br /&gt;
* [[Claas]]&lt;br /&gt;
* [[Collapse]]&lt;br /&gt;
* [[CPC-Mike]]&lt;br /&gt;
* [[Cherry-T.]]&lt;br /&gt;
* [[Crittersoap]]&lt;br /&gt;
* [[Dark Sector]]&lt;br /&gt;
* [[DJ Easy]]&lt;br /&gt;
* [[Doc Bartoc]]&lt;br /&gt;
* [[Domesdos]]&lt;br /&gt;
* [[Double A]]&lt;br /&gt;
* [[Dreadnought]]&lt;br /&gt;
* [[Dreamer]]&lt;br /&gt;
* [[Dr. Logo]]&lt;br /&gt;
* [[Dr.Zed]]&lt;br /&gt;
* [[DJH]]&lt;br /&gt;
* [[DSC]]&lt;br /&gt;
* [[Duck]]&lt;br /&gt;
* [[Electric Monk]]&lt;br /&gt;
* [[Excalibur]]&lt;br /&gt;
* [[Face Hugger]]&lt;br /&gt;
* [[Fraggle]]&lt;br /&gt;
* [[Gert Genial]]&lt;br /&gt;
* [[G.o.St.-SOFT]]&lt;br /&gt;
* [[Gremlin]]&lt;br /&gt;
* [[Groo]]&lt;br /&gt;
* [[GWM]]&lt;br /&gt;
* [[Hage]]&lt;br /&gt;
* [[Hitman]]&lt;br /&gt;
* [[Incognito V]]&lt;br /&gt;
* [[Jak Abe]]&lt;br /&gt;
* [[Jammet]]&lt;br /&gt;
* [[Jaysoft]]&lt;br /&gt;
* [[Jerry of ???]]&lt;br /&gt;
* [[Joker]]&lt;br /&gt;
* [[Joshua]]&lt;br /&gt;
* [[Juggler]]&lt;br /&gt;
* [[K-OS]]&lt;br /&gt;
* [[Kangaroo MusiQue]]&lt;br /&gt;
* [[KNS]]&lt;br /&gt;
* [[Koopa Troopa]]&lt;br /&gt;
* [[Leather Rebel]]&lt;br /&gt;
* [[Link]]&lt;br /&gt;
* [[LTP]]&lt;br /&gt;
* [[Marabu]]&lt;br /&gt;
* [[MCS]]&lt;br /&gt;
* [[Mickey]]&lt;br /&gt;
* [[Minisoft]]&lt;br /&gt;
* [[MOD]]&lt;br /&gt;
* [[Mr. Ams]]&lt;br /&gt;
* [[MTI]]&lt;br /&gt;
* [[Nurgle]]&lt;br /&gt;
* [[OAS]]&lt;br /&gt;
* [[Octoate]]&lt;br /&gt;
* [[Odiesoft]]&lt;br /&gt;
* [[Ogge]]&lt;br /&gt;
* [[Overload]]&lt;br /&gt;
* [[Pluton]]&lt;br /&gt;
* [[Pooh]]&lt;br /&gt;
* [[Prodatron]]&lt;br /&gt;
* [[Purple]]&lt;br /&gt;
* [[Schlumpf]]&lt;br /&gt;
* [[Section 8]]&lt;br /&gt;
* [[Section Jaguar]] &lt;br /&gt;
* [[Shining]]&lt;br /&gt;
* [[Siggi]]&lt;br /&gt;
* [[Sigma]]&lt;br /&gt;
* [[SJI]]&lt;br /&gt;
* [[Steve]]&lt;br /&gt;
* [[TFM]]&lt;br /&gt;
* [[The Cranium]]&lt;br /&gt;
* [[The Frog]]&lt;br /&gt;
* [[Thriller]]&lt;br /&gt;
* [[TobiFlex]]&lt;br /&gt;
* [[Tolkin]]&lt;br /&gt;
* [[Tom of ???]]&lt;br /&gt;
* [[Tom]] of [[KKB]]&lt;br /&gt;
* [[Treble A]]&lt;br /&gt;
* [[TSP]]&lt;br /&gt;
* [[Villain]]&lt;br /&gt;
* [[Weee!]]&lt;br /&gt;
* [[Woodman]]&lt;br /&gt;
* [[WSX]]&lt;br /&gt;
* [[Ythcal]]&lt;br /&gt;
* [[ZAQ]]&lt;br /&gt;
&lt;br /&gt;
== Greece ==&lt;br /&gt;
* [[Antitec]]&lt;br /&gt;
* [[Gryzor]]&lt;br /&gt;
* [[Optimus]]&lt;br /&gt;
* [[Rex]]&lt;br /&gt;
&lt;br /&gt;
== Switzerland ==&lt;br /&gt;
&lt;br /&gt;
* [[Asterix]]&lt;br /&gt;
* [[Flynn]]&lt;br /&gt;
* [[TMP]]&lt;br /&gt;
* [[Warlock]]&lt;br /&gt;
&lt;br /&gt;
== United Kingdom ==&lt;br /&gt;
&lt;br /&gt;
* [[BoGGer!]]&lt;br /&gt;
* [[ChaRleyTroniC]]&lt;br /&gt;
* [[Doctor Fegg]]&lt;br /&gt;
* [[The Equalizor]]&lt;br /&gt;
* [[User:Executioner|Executioner]] (Australia/Great Britain)&lt;br /&gt;
* [[Hangman]]&lt;br /&gt;
* [[Jonty]]&lt;br /&gt;
* [[LDC]]&lt;br /&gt;
* [[Maniac]]&lt;br /&gt;
* [[Nich]]&lt;br /&gt;
* [[Ratz]]&lt;br /&gt;
* [[Roo-dolph]]&lt;br /&gt;
* [[Shades]]&lt;br /&gt;
* [[Trebmint]]&lt;br /&gt;
* [[Wulf]]&lt;br /&gt;
* [[Wild Thang]]&lt;br /&gt;
&lt;br /&gt;
== Other countries ==&lt;br /&gt;
* [[Damir Petkovi&amp;amp;#x107;]] (Croatia)&lt;br /&gt;
* [[Malfunction]] (Ireland)&lt;br /&gt;
* [[TIC]] (Ireland)&lt;br /&gt;
* Powerhouse of [[Dragonbreed]] (Netherlands)&lt;br /&gt;
* [[Freaksoft Ltd.]] (Netherlands)&lt;br /&gt;
* [[CNGSoft]] (Spain)&lt;br /&gt;
* [[KaosOverride]] (Spain)&lt;br /&gt;
* [[ACE]] (Spain)&lt;br /&gt;
* [[Antifaz &amp;amp; The Dog]] (Spain)&lt;/div&gt;</summary>
		<author><name>82.228.218.6</name></author>	</entry>

	</feed>