spectrum EX basic With MELODY MAKER and DEMOs!! Add over 65 NEW commands to Sinclair BASIC! by COMPANION 1988 ____________________________________________________________ | | | E X - B A S I C B Y C O M P A N I O N | | | | - T H E E X T E N D E D B A S I C S Y S T E M - | |____________________________________________________________| EX-BASIC is an extended BASIC program written for any Spectrum Computer. If you are familiar with extended Basic programs then you should realise that the extra commands are keyed in letter by letter, normally by placing a "*" infront of each new command. ________________________________________________________________ LOOK OUT FOR THE FOLLOWING REVIEWS & MORE, THEN READ ~EX-BASIC~. EX BASIC is Imbos's big brother - V1.1 reviewed in Sinclair User 82%: ~USEFUL SET OF UTILITIES~, ~GOOD VALUE FOR MONEY~, Oct '88, Your Sinclair : ~WORTH MORE THAN RRP~, ~AN IMPRESSIVE ARRAY OF NEW COMMANDS~,~EVERY SPECCY OWNER SHOULD HAVE ONE~, Sept '88 ... ________________________________________________________________ ... However, every Spectrum owner could not own a copy as it needed the Sinclair Interface 1 to operate correctly! EX-BASIC bypasses Interface one so that you can use it on ANY Spectrum computer WITHOUT interface one!! EX-BASIC contains all of the IMBOS commands (except microdrive ones) PLUS more including: Built in software SLOMO, Real time clock, 100 Definable function keys, Trace facility, User selectable interrupts, Infinate range of sound FX and R E A L music!, Attribute and screen commands, Computer file protection, Create ALKATRAZ type loaders, Conversions - HEX-DEC-BIN etc, User definable fonts from BASIC (*CHAR/*DATA) Monitor and BASIC monitor commands - Monitor, DOKE etc, Scroll attributes and screen in any direction, Pixel scrolling messages, double height text, centreing etc, RAM screen save and load instantly or pixel print!, Programming commands - cat, delete, remkill etc! Just to name A FEW! EX-BASIC adds more than 65 NEW commands to Sinclair BASIC, turning a good BASIC operation system into a fantastic version .... Your programs will never be the same! EX-BASIC comes complete with DEMONSTRATION PROGRAM and a MUSIC MELODY program which enables you to create music like on many of the recent games ie. drum beats, "whiney" type sounds! EX-BASIC, Copyright 1988 Thank you for buying EX-BASIC, for IMBOS people, you might like to know that it contains all of IMBOS's commands (except microdrive ones) plus extra, more powerful ones. I am sure that you will enjoy using it, and for its price, shows off some staggering graphics in our demonstration programs! EX-BASIC has several files recorded onto the cassette which is supplied in this package:- Side -A- Side -B- FILENAME TYPE OF FILE FILENAME TYPE OF FILE 1) EX-BASIC Program 1) MELODY Program 2) SCREEN Bytes 2) MELODY SCREEN Bytes 3) EX-M/CODE Bytes 3) PLAYBACK Program 4) FONT1 Bytes 4) ADVERT Program 5) DEMO Program 5) ADVERT SCREEN$ Bytes 6) DEMO SCREEN$ Bytes 6) ZAP EX Bytes Rewind the cassette to side -A-, press PLAY on the cassette player and type in LOAD "" from 48K mode. In several minutes time a loading screen should appear, followed by the main EX-BASIC operating system. Do not be alarmed when you hear a 'beep' followed by the computer 'new'ing out ! EX-BASIC has now loaded and you are free to use all the new commands when you enter the following 'start-up' command: RANDOMIZE USR 61434 - If entered as a DIRECT command then a copyright notice should appear. However, if it is part of a program then it will have NO effect on the screen display. Note that this command SHOULD ALWAYS be present on the FIRST line of any program if using EX-BASIC commands. Also note that after any CLEAR commands, control will be forced back to standard Sinclair Basic so should enter RANDOMIZE USR 61434 again. Lets load in the EX-BASIC demonstration program. First of all though, type in LOAD "FONT1" followed by ENTER. All the characters on the screen should have changed - this is a good feature of EX-BASIC - characters can be changed quickly and easily. However, if you want a decent font designer, then it is worth while investing in LETTER SET 3, sold by us 6.95, which does the same job! Now isn't it about time that we loaded up the demo ? Ok then, type in LOAD "" and let the tape play for about two to three minutes, flick through the demonstration program while I go and make a cup of tea. Before I explain the new commands to you, you might like to know that on the flip side of the cassette (SIDE -B-), is a music maker program which allows zaps and drum beats etc to be used within EX-BASIC programs. Following that is a PLAYBACK program which plays back your music, and following that is a demonstration (advert!) explaining "MULTI-ROM" - a 16K expansion unit for Spectrums (Not +3!). All of EX-BASIC's commands will now be explained in great detail with some example programs:- EX-BASIC's new command set consists of a "*" character followed by the command. If you wish to write your own programs then you will need the EX-BASIC machine code in memory! This can be saved out on cassette with: SAVE "EX" CODE 54110,11257 and loaded back in again with: CLEAR 54109:LOAD "EX" CODE 54110: RANDOMIZE USR 61434 - The new instruction set - Interrupts: The interrupt commands consist of:- *CLOCK - Switches on a constant clock in the top right hand corner of the screen. *TIME x,y,z - This sets the clock (above). Where x is the time in hours, y is the time in minutes, and z is the time in seconds. It will have an INSTANT effect. *COLOUR x - Where x is an attribute colour. This will alter the CLOCKS background colour. To work out the correct paper and ink colours use : x=paper colour*8+ink colour. *TRON - This is a debuging command which simply reports which line number you are at when a BASIC program is running. *COLOUR will change the background colour. *SLOMO - This is a built in software slomo which will SLOW down your computer to any speed you require by using the next command: *SLOW x - This sets the speed of the software slomo (above). A small number (not zero) is fast, and a large number (5000) is extremely slow. *FUNCTION - This command switches on the 100 function keys. As a demonstration after typing *FUNCTION in press NEW (shift & A) and the keyword "STOP" should appear instead! The commands which control this are listed below: *DEF x - Where x is from 0 to 99. This defines which key should be defined and are simply listed and indexed from key zero to key 99. To define actual keys use: *KEY x,y - Where x is the ASCII key to change, and y is the ASCII value of the CHANGED key. Example to change the capital letter "A" to the keyword STOP use: *DEF 0 - We shall use key zero. *KEY 65,226 ; its far better to use *KEY CODE "A", CODE " STOP " instead though. An interesting poing to know is that control characters can be changed ie. Disable "CURSOR UP" for example - perhaps it is not needed with some software. To list your function keys simply use: *LFUNCTION To disable or switch off all interrupts to return back to normal use : *IM 1 - Interrupt MODE 1. To return back to the current EX-BASIC interrupt simply enter: *IM 2 - Interrupt MODE 2. Eg. to get the current time without the CLOCK constantly ticking away use : *CLOCK: *IM 1 Note that *CLOCK, *FUNCTION, *SLOMO and *TRACE switch ON mode two interrupts without you having to type *IM 2. If you are a machine code programmer & wish to place interrupts at a certain address, use the command : *INT AT x - Where x is an address in memory. The first Z80 instruction should include a FF byte (255d). - Monitor commands - A good range of monitor commands are included :- *DEC x$ - Where x$ is a STRING and should contain a hexadecimal number ie. *DEC "abc0". This command displays the value in a decimal format, followed by a line-feed. To disable the screen line-feed simply use : *DEC x$; The ";" is common to the commands listed below: *HEX x - Where x is a decimal value that will be converted into a hexadecimal reading ie. *DEC 65535; will give the result 65535. *BIN x - Where x is also a decimal value that will be converted into a 16 bit binary value. *LIST x - Where x is a memory address. *LIST lists the contents of memory in hexadecimal and ASCII. To break out simply press SPACE. *DOKE x,y - A 16bit POKE - The normal Spectrum POKE only allows you to POKE 8 bit numbers (255 max). *DOKE allows you to POKE 16 bit numbers (65535) max. Where x is the memory address and y is the value. *WOKE x,x$ - This is a word poke that allows you to POKE strings into memory. Where x is a memory address and x$ is a word. Never let x$ equal an empty string! *MFILL s,t;w - This fills memory with a byte w starting at address s with a length of l. Example: 10 FOR F=100 TO 0 STEP -1:*MFILL 16384,6912;f:NEXT F *MMOVE s,l TO t - This block moves memory starting at address s with a length of l to t. Example:- 10 LIST: INPUT "PAPER ";x: INPUT "INK";y: LET at=c*8+y 20 POKE 22528,at:*MMOVE 22528,255 to 22529 *RAMTOP; - Simply displays the current ramtop value. - BASIC monitor commands - The range of monitor commands for BASIC programers consist of:- *FRE - How much free memory is left inside the computer. Eg. *FRE;:PRINT " bytes free" *VAR - The length of all variables inside the computer. *PROG - The length of your BASIC program. *DELETE x,y - This is a powerful block line delete system which enables lines to be deleted quickly and easily. Where x is the starting line and y is the finishing line. Example : to delete lines 400 to 950 use *DELETE 400,950. *RENUMBER x,y - This is a powerful renumber system which renumbers your line numbers starting at a line number of x, in steps of y. *REMKILL - This deletes all REM statements in programs. A good example is to see how much memory you have saved by deleteing REM's:- *PROG:*REMKILL:*PROG; *EDIT x - This moves the program LINE CURSOR to line x. Example, a quick way of editing a line is to type in *EDIT x followed by the EDIT key. *GOTO x,y - With the Spectrums GOTO command, you can not jump to statements within line numbers. This can be overcome by typeing *GOTO line number,statement number. 10 STOP: PRINT "ST 2": PRINT "ST 3" Now type in *GOTO 10,2 and the computer will not report the stop statement! - Graphical commands - There are a LOT of these commands! :- *DOUB x$ - This will display x$ is DOUBLE HEIGHT text. Note that PAPER and INK colours etc can be set before hand ie. PAPER 1:*DOUB "Test":PAPER 7 *CENTRE x$ - This CENTRES text on the screen. Example : *CENTRE "Spectrum" will display "Spectrum" in the centre of the screen. *TEXT x$,s,k$; - This scrolls text PIXEL by PIXEL at the current PRINT AT position. x$ is the text to be scrolled, s is the speed - 1 is a fast speed, 1000 is about the best, k$ is a key detection system that enables the message to stop scrolling if key k$ is pressed. If the message is to scroll on regardless of any key strokes then k$ should be an empty string ie, ""; 10 PRINT AT 15,0;INK 1;" ";INK 2;" "; INK 3;" "; 20 PRINT AT 15,0;:*TEXT "This scrolls a message left using the current screen attribute colours",5000,""; 30 *TEXT " ... Note the effect that takes place at line 30",500, ""; Text is printed using slightly smaller text - 42 characters a line giving a neat, proffesional look. *STRING$ x$,l - This will display the character x$ on the screen l number of times. Eg. *STRING$ "*",32; will display a row of stars. *SCREEN p,i - This changes the screen colours withou eraseing the display file. Where p is the paper colour and i is the ink colour. Example: 10 LIST 20 FOR F=0 TO 7 30 *SCREEN INT (RND*5),f 40 NEXT F 50 GOTO 20 *WHOLE - This will make the lower section of the screen the same colour as the upper section ie. BREAK into the program above when the screen is flashing and enter *WHOLE to see its effect! *FLASH x - Where x is a zero or a one. This acts like the Sinclair FLASH command except that the flash takes place instantly. *BRIGHT x - As above - the BRIGHT takes place instantly on the screen. *AFIND p,i TO p2,i2 - This searches throught the ATTRIBUTE file and if it finds PAPER p AND INK i it will cahnge it to PAPER p2, INK i2. A good example here is:- 10 *MMOVE 0,768 TO 22528 Understand how the screen 20 FOR F=0 TO 7: FOR P=0 TO 7 colours slowly fade away ? 30 *AFIND f,p TO 0,0 40 NEXT p: NEXT F A simple routine; a good effect. *SFIND x,y - This is the same as above except that the computer will start searching through the DISPLAY file and if it finds BYTE x will replace it with byte y. Eg: 10 *MMOVE 0,6144 TO 16384 20 FOR F=255 TO 0 STEP -1: *SFIND x,0: NEXT F *STORE x - This is a RAM save command. It will save the current screen at memory location x. Each picture is always 6912 bytes in length and should NOT overwrite important areas of code - keep it well below 54109! *PRINT x - This brings back a *STOREd screen. Example, When you RUN the following program load in the EX-BASIC loading screen$: 10 LOAD ""CODE 16384 20 *STORE 40000 30 CLS 50 PRINT "press a key": PAUSE 0 50 *PRINT 40000 60 GOTO 60 *SPRINT x,y - This is the same as above except the computer prints back a stored screen from location x PIXEL by PIXEL. y sets the speed of the movement. Change line 50 to read : *SPRINT 40000,2000 and see the effect it produces. *VDU x - This will set and clear the screen to the requird attribute colour which can be calculated from the *COLOUR command. Example, try *VDU 5 *FADE x,y - This is a special FADE OUT CLS which will fade the screen right if x is 1 or left if x is 0 through y amount of pixels - y can only hold 8 maximum. Example:- 10 *MMOVE 0,6144 TO 16384 20 *CLS 0,8 30 PAUSE 0 *INVERT - This is a command that simply inverts the whole screen ie. if the screen paper colour was 4 and the ink colour was 2 then *INVERT will invert the attributes to read ink 4 and paper 2. *BORDER x,y - This is a border effect command that will send pulses of colour to the screen border. Where x is the amount of colours and y is the duration ie. *BORDER 5,0 *PLOT x,y - This is a super full screen PLOT command that enables PLOTing on the lower half of the screen (0,0) to (191,0). - Screen scrolling commands - The screen or attributes can be scrolled left, right, up and down. The most simplistic command to begin with is: *SCROLL - This is like the old style ZX-81 scroll (!) which will scroll the screen and attributes 8 characters up. The most impressive screen scrolling commands are: *SUP x,y / *SDOWN x,y / *SRIGHT x,y / *SLEFT x,y The x and y numbers above are common to one another, so I might as well explain what the numbers mean once! If x is a zero then the ATTRIBUTES file will be scrolled, However, if x is a 1 then the DISPLAY file will be scrolled. y simply tells the computer how MANY TIMES the screen should be scrolled. A scrolling example is as follows:- 10 *MMOVE 0,6912 TO 16384 15 *CLOCK:*TIME 8,59,7 20 *SRIGHT 0,100 30 *SUP 1,100 40 FOR F=1 TO 1000:*SRIGHT 0,1: NEXT F Notice the smooth scrolling system in line 40 ? - Programming commands - Programming commands consist of: *REPORT x - Where x is an error code from zero to 255. This will simply report an error, or if x is 255, the OK message. 255 is useful for STOPing programs running without printing the usual 9: STOP statement. *HALT x - Exactly like the Sinclair PAUSE except that a Keystroke will not break out from the loop. Because of this, 5 seconds maximum pause is only allowed. However, for a 10 second pause for example, simply use the *HALT round a FOR/NEXT loop. *TRAP x$ - This is like the BBC get$ system. *TRAP will wait for the ASCII key, x$. So for example, *TRAP "*" will wait until "*" is pressed, then continue. Note that you can BREAK out by pressing BREAK. *CAPS x - Where x is a zero or one. This will change the caps lock state during the execution of programs. Eg. *CAPS 1 will switch caps lock on. *. - This gives a catalog of files on a cassette tape. Various information such as start address, length, auto run line number is displayed etc. *CHAR x$ - This is like the Amstrads AFTER command. It sets aside a variable which points to the character set to enable to to be altered. Example: *CHAR "0" will point to the zero character. *DATA a,b,c,d,e,f,g,h - Used with *CHAR. This pokes into the character set 8 bytes of data (a bit like UDG data) and enables characters to be altered. After each *DATA the *CHAR pointer is updated by one character. Example: 10 *CHAR "0" 20 *DATA 0,126,102,102,102,102,126,0: REM zero 30 *DATA 0,24,24,24,24,24,24,0: REM one .... As soon as you press 0 and 1, a new style will appear. There is a whole new character set recorded on side -A- of the cassette under the filename "FONT1". Simply load in with LOAD "" CODE. Its start address is 54110 and 768 bytes in length. LETTER SET 3 can be used to define various different types of fonts. - Sound effects - Various sound effects can be created by EX-BASIC:- The first sound FX is a two octave music command which uses the same numbers as a standard BEEP command: *SOUND length,pitch ie. *SOUND 50,1 Where pitch : 0 : C# The correct pitches can be found in 2 : D ... your user guide byt note that middle C (0) is now note 12! *FX x,y - Where x = 1 : White noise. This creates machine guns, steam trains etc. 2 : Laser zap. Put around a FOR/NEXT loop can create quite interesing sounds. 3 : Laser shot. Like x(2) except the sound is played in reverse. y can be anything from 1 to 255 or upto 65535 for the white noie generator. Where x = 4 : "boot" sounds. Various boot sounds can be made quite easily here. 5 : laser repeat. y controls the amount of laser repeats. y can be anything from 1 to 19 here. - Protection - Computer protection is important nowdays. Various save/load commands are used including an ALKATRAZ loading generator (this is where the computer can load pictures in spirals, randomly or just the parts that need loaded). The first commands and normal headerless saving and loading commands: *HSAVE s,l - Where s is the start address and l is the length. This will SAVE out a headerless file. Note that the computer DOES not wait for a keystroke. Example: To save out a screen use : *HSAVE 16384,6912. *HLOAD s,l - The opposite of the above command, *HSAVE. This loads in what has been saved out headerless. To load in our example save as above use : *HLOAD 16384,6912. The next save and load commands consist of protection - the data is saved with two special headers and also an auto code run system: *PSAVE s,l,a - Where s is the start address, l is the length and a is an auto run address. If no auto run should take place then set a as zero. *PLOAD - No integers needed here as when it finds a file saved out from *PSAVE it collects its information from the special header and loads and auto runs code if required. - ALKATRAZ loading/saving - To create an alkatraz loading system, a table has to be prepared telling the computer where to place each segment of screen data. A zapper board is sued, and to use it you simply load in a screen$ and type: *ZAP x - Where x is the location of a table, say. 35000. Each ZAP is 18 bytes, so the maximum length that the table can be is 13.5K (13824 bytes). Move the flashing cursor with the cursor keys and press FIRE to zap - fill in all the segments of the screen, and when the computer comes to load back in the picture, it will load it in at the EXACT position of every zap in the correct order. Press SPACE to quit and a message "HALF:" followed by a number will be displayed. This displays HALF of the table size. Jot the number down on a bit of paper. The table MUST be saved to cassette. It can be saved as a bytes file by using : SAVE "TABLE" CODE start of table,number that you jotted down*2. Say the table was placed at 35000 and it had a half length of 1938 - simply enter: SAVE "TABLE" CODE 35000,1938*2 After the table has been saved to tape, the screen$ must be saved out in the correct order of every zap. Load back in your screen$ and use the command: *SAVE x,half length - Where x is the address of the table and half length is the number that was displayed after quiting from the zapper board. The screen will now be saved out in the correct order. Note: Sometimes the table can corrupt itself and must be reloaded by : LOAD ""CODE To load back in the saved screen, the table MUST still be in memory and loaded with: *LOAD address of table,half length - The computer will then start searching for the picture and load it in like an alkatraz style. Note that the BREAK key is disabled for extra computer protection, therefore it you try and *LOAD in a file that does not exsist and want to escape, simply load in a normal cassette file ie. the EX-BASIC loader program - the computer will then return back to BASIC. - A summery of commands - _______________________________________________________ | | | | *DOKE | *MFILL | *SRIGHT | *REPORT | *WOKE | *MMOVE | *SLEFT | *INTAT | *SCREEN | *AFIND | *SCROLL | *PLOT | *COLOUR | *SFIND | *CAPS | *PLOAD | *CLOCK | *PRINT | *WHOLE | *PSAVE | *TRON | *SPRINT | *INVERT |------------ *SLOMO | *STORE | *. | Useful information *SPEED | *DEC | *LIST | *FUNCTION | *HEX | *CHAR | The address of *DEF | *BIN | *DATA | each character set *KEY | *TRAP | *FLASH | is always set at *IM 1 | *HALT | *BRIGHT | 54110 & is pointed *IM 2 | *GOTO | *STRING$ | to by *DOKEing: *CENTRE | *EDIT | *RAMTOP | *HSAVE | *VAR | *LOAD | 23606 with the *HLOAD | *FRE | *SAVE | address of the *ZAP | *PROG | *VDU | font minus 256. *SOUND | *DELETE | *FADE | *FX | *RENUMBER | *BORDER | Therfore LETTER *TEXT | *SUP | | SET 3 can be used *DOUB | *SDOWN | | to create new ____________|______________|______________| fonts. .. Another interesting point to note is that the *KEY tables are in user RAM from address 63837 to 64037 (200 bytes). Each *KEY takes up two bytes of memory. If you ever create a long *KEY table, it can be saved and loaded to and from cassette with: *PSAVE 63837,200,0 ... and loaded back again with *PLOAD _____ Note that RAMTOP (set by CLEAR) should never go any higher than 54110 (the start of the user RAMS character set). If kept LOWER then any NEW commands will not destroy the EX-BASIC operating system, but must be logged on again with the usual RANDOMIZE USR instruction. Example programs. These examples can be keyed in with the EX-BASIC operating system: i) Fade out routine: 10 RANDOMIZE USTR 61434 20 *MMOVE 0,6912 TO 16384 30 *BRIGHT 0:*FLASH 0 40 FOR F=0 TO 7: FOR P=0 TO 7:*ADIND F,P TO 7,1: NEXT P: NEXT F 50 FOR F=255 TO 0 STEP -1:*SFIND F,0: NEXT F See how the screen attributes/screen fade out ? ii) Large style lettering: 10 RANDOMIZE USR 61434 20 *MMOVE 54110,768 TO 40000:*CHAR "0":*DATA 0,0,0,0,0,0,0,0 30 *DATA 255,0,255,0,255,0,255,0 40 FOR L=1 TO 3: CLS: LET X=0: LET Y=0 50 LET W$="EX": FOR P=1 TO LEN w$ 60 LET chc=CODE W$(p): LET cha=(PEEK 23606+256*PEEK 23607)+chc*8 70 OVER 1: PRINT AT X,Y;: FOR F=0 TO 7: FOR S=0 TO L: PRINT TAB Y; 80 *BIN PEEK (cha+f);: NEXT S 90 NEXT f: OVER 0: LET Y=Y+8: NEXT P 100 *MMOVE 40000,768 TO 54110 110 *SLEFT 1,32: *SUP 1,24: *SDOWN 1,24 120 GOTO 110 Understand how the large letters are printed ? By changing the ZEROs and ONEs, then use the *BIN command, various large style graphics can be produced. iii) Function key example (Changes A to B, B to C, C to D, D to E and swaps the ENTER and SPACE keys around !!! 10 RANDOMIZE USR 61434 20 *IM 1 30 LET X=0 35 READ A$,B$: IF A$="end" THEN GOTO 50 40 *DEF X: *KEY CODE A$,B$: LET X=X+1: GOTO 35 50 LET X=X+1:*DEF X:*KEY 13,32:LET X=X+1:*EF 32,13 60 *FUNCTION 99 DATA "A","B","B","C","C","D","D","E","END","" These small, simple programs would be impossible in standard Sinclair BASIC, even more so with example (iii). The Function keys are simply defined in a FOR/NEXT loop with *DEF and *KEY. The required keys are stored in DATA statements. * Included after the graphical advert is a bytes file called "ZAP EX" - this is a file that can be loaded into any address, say 35000, by LOAD ""CODE 35000. Key directyly into the computer: *VDU 5, followed by : *LOAD 35000,5058 and press PLAY on the cassette player. Another file follows on from "ZAP EX" that is not printed in this manual as it is a special alkatraz headerless file which draws in the EX-BASIC logo in a special way. These are the effects that can be produced with the *ZAP command. You will be able to work out that the table is 10116 bytes (prove by *.ing) long! This is a sad fact with these types of loaders and can not be avioded. - Side -B- of the cassette - MELODY MAKER - This program is a short EX-BASIC program which enables you to create music and play it back through the "REPLAY" program. Load it in as normal by LOAD "" and wait until the scrolling message appears. The basic control keys are as follows: (1) Go into DEFINE MUSIC OPTION. (2) Replay MUSIC. (3) Alter music TEMPO. (4) Save music. (5) Load saved music. (6) Destroy music. (1) If you press 1 then the computers keyboard can be used to input music in at the current tempo. Keys Z to M is the first octave with Symbol shift + X/C, B/N/M as the sharps. Keys A to J is the second octave, with Symbol shift + S/D, G/H/J as the sharps. The top row controls the drums, and Q makes a laser zap. EDIT replays the music, DELETE deletes the last note and ENTER returns back the the main menu. (2) This simply replays sound in memory. (3) The speed of the music (tempo) can be altered from 5 to 50: 5 being VERY quick and 50 being avarage. (4) This saves out music to cassette under a number array. (5) Opposite to number (4) - It accepts recorded music. (6) TREAT WITH CARE as it deletes ALL notes from the computers memory. Following on from MELODY MAKER is a short BASIC subroutine which enables music to be played back easily. Set the Tempo speed before running the program by the variable "TE". Following on from PLAYBACK is another EX-BASIC example program which demonstrates its graphics capabilites while it advertises out MULTI-ROM 64K RAM / 32K ROM expansion unit. I do hope you have enjoyed reading this guide. Keep it in a safe place and use it as a reference when ever you wish to write an EX-BASIC program. EX-BASIC was written and produced by Jonathan Lawrence Edgar Copyright 1988 All rights of Companion. Unauthorised copying, hiring, lending, broadcasting etc of this program is prohibited. The publisher assumes no responsibility for errors, nor liability from damage arising from its use.