GarageBEEP 3.0.1 (001.02) Copyright (c) 2008-2009 Andrew Owen With apologies to Apple, Inc. Introduction ------------ GarageBEEP was written to enable Dunny to concentrate on finishing the compiler in BASin. The original version was submitted to the CSSCGC2K8. Digital Prawn wrote: "Welcome to a fully fledged music editor for the standard BEEPER equipped speccy! And there's me thinking it was usually an Atari ST tucked up next to a musician's keyboards? Not necessarily so! Colourful and professional looking graphics are the order of the day and the whole thing has a "rounded corner" style about it... The BEEPer hardware has a huge octave range and a look at the length of the 'virtual keyboard' at the top of the screen illustrates this rather well." The second version was submitted to the CSSCGC2K9. In this, the third incarnation, it is no longer crap, and so will not be submitted to next year's usenet's comp.sys.sinclair crap games competition. It was compiled using the HiSoft BASIC compiler. The machine code was assembled with Pasmo. The BASIC was converted with BAS2TAP. Many thanks to all concerned. Keys ---- The keyboard layout is designed to be relatively intuitive and all the keys are labelled on-screen and colour coded. However, here are the less obvious ones: 1 / 2 - change view 3 / 4 - change note 9 / 0 - set last note Z / X - change octave C / V - change period (note length) , / . - change tempo (beats per minute) ENTER - record on/off SPACE - playback on/off UP - start of tune LEFT - back 32 notes RIGHT - forward 32 notes DOWN - loop on/off B - play current note N - clear current note M - file menu File menu --------- 1 - load tune (GarageBEEP format) 2 - save tune (GarageBEEP format) 3 - export tune (BASIC DATA array) 4 - clear tune 5 - exit menu (return to editor) Use in your own program ----------------------- First export the tune from the File menu, taking note of the length of the tune. Then: LOAD with LOAD "" DATA t() Playback is done via: IF t(2,note)<>0 THEN BEEP 240/(tempo*t(2,note)),t(1,note) where tempo is the number of BPM and note is the note (1-1024) If rests are required then you can test for notes with a period of zero and do a pause of the required length via: IF t(2,note)=0 THEN PAUSE rest where rest is the length of rest, e.g. 240/(tempo*4) = quarter rest. Notes on the code ----------------- The compiled BASIC code is stored at 47915 and is 5633 bytes long. The buffer starts at 53548 and is 5064 bytes long. The buffer is what is LOADed and SAVEd by the first two options of the file menu. The byte at 58611 is used to control the behaviour of the BASIC program when dropping out of the editor (1-3) and to avoid wiping the tune when returning to the editor (0). The code to display the editor screen is stored at 58612. The editor screen is stored at 58624. The value to use in BC is poked at 58620. The attributes are flipped from 56 (off) as follows: POKE 23038,58: REM record on POKE 23133,61: REM loop on POKE 23197,61: REM play on