AMPLINEX 003

image
AMPLINEX issue 003 was published in January 1988. Each AMPLINEX magazine is stored as a 200K single-sided 80-track disk image file (.ssd file type). The image can be used to create disks for a BBC Micro or can be loaded into a BBC emulator. For the disks to run, the BBC (real or emulated) must have an AMPLE Nucleus ROM installed and be running the Hybrid Music System.

New Hybrid Technology products

The two latest product releases from Hybrid Technology are the AMPLE Nucleus Programmer Guide and 'Inside Stories', another AMPLE music disc. Both are reviewed here.

The AMPLE Nucleus Programmer Guide

Roy Follett
Stop the disc drives! The great AMPLE adventure is about to start. It is Christmas Eve and Santa has made a special journey with a special parcel. What is it? With almost indecent haste I rip off the wrapping to reveal - 'The AMPLE Nucleus Programmer Guide'.
It is true - on the 24th of December the Programmer Guide (yes, Programmer - to match with User) arrived; ordered before the July Acorn User show, but here now. Was the wait worth it? After only a short period of study I can say 'most definitely'.
The manual is in two parts. The first, titled 'General', has chapters on subjects such as 'Numbers and flags', 'Input and output' and 'Machine-code programming' and will be of immense interest to those who want to understand the workings of the AMPLE Nucleus language.
The second part, 'Reference', is a dictionary of all (approximately 160) AMPLE Nucleus words. It is similar in style to the original Music 500 User Guide (for AMPLE BCE) and it reveals its ancestry by repeating an error in the sequence of entries.
The Programmer Guide, however, is more comprehensive than its predecessor, both in its descriptions of the words and in the number and usefulness of the examples given.
Potential purchasers should note, however, that this guide only covers the AMPLE Nucleus words - so words supplied by the application modules (try "M5"MSHOW to see just some of them) do not appear. The introduction to the guide says mysteriously 'Application specific information...is deliberately excluded, being reserved for application Guides' of which the User Guide is cited as an example. This leaves open the question of when, or if, the many module-based words not mentioned in the User Guide will be properly documented.
This guide will be of most benefit to those who already feel comfortable with the basics of AMPLE. If you seldom need to refer to the User Guide then this manual is probably what you should be reading.
Sentences like 'The Nucleus provides queue control sound words, and voice servers provide their own voice sound words and type-global voice sound words' can be heavy going, but the terminology is normally well-defined and undoubtedly necessary. There were points, however, when a glossary would have been invaluable.
One reference puzzled me: the mention on page 17 of the command MERGE. The word does not appear in the dictionary at the end of the guide and my Nucleus ROM doesn't seem to know it either.
One major criticism - there is no index. To be fair the dictionary is alphabetic, but I do feel that a book of reference should have one.
Although it seems like a great deal money (it is now £19.00), this guide is a must for any serious programmer. It should provide hours of worthwhile study and is, in the main, an excellent example of a clear, well-written manual.

An extract from the AMPLE Nucleus Programmer Guide is included on this disc. It lists all the AMPLE Nucleus words giving a brief description of its function, usage and syntax. The filename is:
F.Nucindx – Index of AMPLE Nucleus words
and it can be viewed within the Features section; but it is best printed.

'Inside Stories' by Peter Chase

Roy Follett
This is the latest AMPLE music album from Hybrid Technology (price £4.95) for collectors of compilations. The disc contains twelve original tunes by Peter Chase, all of which are very listenable. For the members who like programming and instruments there is plenty here for further study.
I rather like 'Why-Cry', described by the author as "the sloppy beet". Whether he means 'beat' or 'bit', I am a sucker for deep gentle sounds. What a useful instrument 'Upright' is.
The tunes are selected from an 'interactive' menu which has an accompanying backing track in the same style as the menu on the 'Notes' album from Pilgrim Beart. I liked the invitation to use the menu for your own collections and the inclusion of instructions on how to do it.
With the lack of compilations available, one has to be careful not base one's opinions on a sense of gratitude for what is on offer. So far every disc that Hybrid has offered to date has been of a high standard, and this one is no exception. What more can I say - the usual good value for money with plenty of interest. Thank you Peter Chase.

Other news

The Music 2000 MIDI interface is expected to be available in early February (price £161.00). AMPLINEX would like to hear from any member who has ordered a Music 2000 to arrange a review of the product for the March issue.
Hybrid Technology are now offering a 1MHz bus extension cable to allow the Music 500(0) synthesiser to be placed further away from the computer. The cable is 500mm in length and costs £13.00.
All Hybrid Technology prices mentioned are inclusive of VAT and carriage.
We had planned to provide a review of the new Waveform Designer in this issue of AMPLINEX. Unfortunately, the product had not appeared by the time we started distribution despite delaying this issue a few days in the expectation of its arrival. Assuming it appears during February, we will provide a full review in the March issue.

Published in AMPLINEX 003, January 1988

The 'Realistic' Stereo Reverb Unit

Michael Mellor
Fed up with using valuable voices for echo or want to add that 'live' quality to your Music 500/0 music and have very little cash to do anything about it?
That was the situation in which I found myself some time ago. But, after searching the market for a while, I found the 'Realistic' Stereo Reverb Unit from Tandy for £47.95p.
The unit uses the Bucket Brigade Device IC to produce the desired effects and I believe a similar unit was described in the Micro User Body Building Series some years ago.
The unit has two inputs:
1) A monaural microphone input (0.35mV 10 Kohms impedance)
The manual describes this as being suitable for a guitar or synthesiser. The ability to adjust this signal in relation to the 2nd input is by a rotating control on the face of the unit.
2) A stereo line input (150mV 50Kohms impedance)
This is the one I used for the output from the Music 500/0. It is at the rear of the unit and uses phono plugs.
There is also provision for a tape monitor input and an output to a tape recorder at the rear. The option to record with or without the processed signal is selected by a 'Reverb Record' switch also on the face of the unit. If the signal from the tape is required to be processed a Tape Monitor switch is operated. There are certain conditions where both switches are required.
The unit is then connected to the amplifier via the main output. Once fully connected you cannot hear the Music 500/0 signal unless the unit is switched on. At this point, with all equipment switched on and in a quiescent state, in comparison with the Music 500/0 set up alone, an increase in the 'noise' level can be detected. This could be annoying to the purist (CD owners particularly); however, when playing programs the noise is not detectable.
The unit's effects are controlled by two rotating knobs:
1) Delay - from 5 to 95 milliseconds (Echo time 2 seconds)
2) Depth - which alters the strength of the echoed signal in relation to the original
With these two controls the effects of doubling, flanging, echo and reverberation can be made. Like most things in life, the effects can be overdone and I find that low settings are the most useful in creating a 'live' quality.
The effects of course apply equally to all the parts in the music. Echoes on single instruments must be done via the Music 500/0.
It is claimed, in common with a lot of other audio equipment, that the operation of the Reverb Expander switch will create the illusion that sounds are coming from outside of the area covered by the loudspeakers, an illusion I find difficulty in detecting, although others can. The expansion of the sound, it is stated, increases with the increased application of the Depth control.
The manual is spartan in descriptive text, but in some ways this makes the instructions clearer. Several drawings to assist in use are included as is a full wiring diagram.
I believe that the music played via this unit is enhanced and the 'live quality' more than compensates for the noise problem.
Until I can afford an effects unit which offers a substantial increase in sound quality and variety of effect I will continue to use this unit.
Other specifications not mentioned above:
Size - 202 x 144 x 45 mm
Frequency Response – 20 Hz to 20 KHz (Depth control set at minimum)

Published in AMPLINEX 003, January 1988

A Pilgrim Pachelbel

by Pilgrim Beart

From the album 'Notes'

Courtesy of Hybrid Technology

 

Source: AMPLINEX 003 disk, file $.PPACH


Published in AMPLINEX 003, January 1988

Music for Video Games

by Philip Jones

 

Source: AMPLINEX 003 disk, file $.VIDGAM


Published in AMPLINEX 003, January 1988

Sleepy

by Philip Wormall

 

Source: AMPLINEX 003 disk, file $.SLEEPY


Published in AMPLINEX 003, January 1988

The Schweitzer Enigma

by Jim Redfarn

 

Source: AMPLINEX 003 disk, file $.SCHWEIT


Published in AMPLINEX 003, January 1988

Parallel Lines

by A Stones

 

Source: AMPLINEX 003 disk, file $.P-LINES


Published in AMPLINEX 003, January 1988

New Chords

by Roger Cawkwell

The music is, I think, direct enough to speak for itself, so I'll concentrate on aspects of the programming. I keep trying to get a quart out of a pint pot! The four-stringed instrument uses only 1 CHANS on each string by redefining the ACT word with (see issue 002 of AMPLINEX). 1 CHANS sounds are, of course, less interesting than the usual 2 CHANS ones but I find that for background instruments (especially playing chords) they work well enough.

A similar approach is taken to one of the percussion parts during the bass solo. In is replaced by - a percussion instrument with contrasting sounds on each CHAN – that is used to play independent rhythms by the use of . The bass (Spanish; bajo) has hitherto enjoyed the luxury of an extra voice to give a sustained effect, usually on the lowest 'string'. gives this up with 2VOICEUNUSED in favour of which uses it to two tom-toms. You may have already noticed in the Debussy piece on the Studio 5000 disc).

Whilst all this is going on the two players decide to play independently, the first doubles the , whilst the second accompanies with a 48, rhythm. This is accomplished by 5SHARE (i.e. send notes, etc. to the fifth part) 2VOICE in which is represented in but not . The second flute also plays two-note chords by means of continually changing SHIFT - this is how I used to program before I learned the trick – it’s much clumsier and harder to read. Rewrite if you like.
 

Source: AMPLINEX 003 disk, file $.NEWCHOR


Published in AMPLINEX 003, January 1988

My Tune

by Chris Percival

 

Source: AMPLINEX 003 disk, file $.MYTUNE


Published in AMPLINEX 003, January 1988

Chi La Gagliarda

by Roy Atkins

Composed by: Baldassare Donato

Chi La Gagliarda is an Italian madrigal composed by Baldassare Donato in the late 16th century; it is a fine example of a typical popular song of the time. This kind of song is again popular with amateur choirs all over the world. The words to the song tell about the Italian teachers of the dance called the galliard and their lady pupils. The song is suggestive in that it would appear that teaching ladies to dance was not entirely their main interest.
 

Source: AMPLINEX 003 disk, file $.CHI


Published in AMPLINEX 003, January 1988

Prelude in C

by Mark Whippey

Composed by: J S Bach

This is the C major prelude from book 1 of the Well-tempered Clavier (the 48).
 

Source: AMPLINEX 003 disk, file $.BACHINC


Published in AMPLINEX 003, January 1988

Autumn Song

by Leslie Whalley

The piece is a simple songlike piece with an ABA structure. I've tried to make the harmony interesting. I expect the instrumental mixes could be improved. Any suggestions would be welcome.
 

Source: AMPLINEX 003 disk, file $.AUTSONG


Published in AMPLINEX 003, January 1988

Notes on Musical Mastermind

Susan Jones
This is a form of the game using notes instead of colours. The program sounds a chord and the player must identify the notes it contains, in ascending order of pitch.
A guess is entered as a sequence of upper-case note-names, e.g. DFAD. The program indicates the number of correct notes in the right place (yellow stars), and the number of correct notes in the wrong place (blue stars).
The process continues until the sequence is correct. The program keeps account of the best score (i.e. fewest guesses) and prints a message if the latest score is the best so far.
Pressing the space bar at any time plays the chord again. Single notes may also be sounded as their names are entered. For some people this will make things too easy, so the option can be switched on or off at the beginning of each new game. If the sound is turned off altogether the game becomes an exercise in logical deduction like ordinary Mastermind!
Minor problems are:
·         The random number generator sometimes gets stuck in a groove and presents the same chord twice running!
·         Repeatedly entering and deleting notes causes the pitch to rise. The octave is reset whenever the chord is sounded, or at the beginning of each new guess.

Chords

Because the program is meant for ear-training, it uses predefined chords rather than random note- clusters. Those supplied are common positions of chord I, III, IV, V, and VI of C Major. However, the program has been designed to be adaptable in a number of ways. Listed below are some possible modifications, with hints about how to do them.
1. Change the instrument used. The definition is in the "RUN" word. Some users may like to have a different instrument for each voice in the chord.
2. Change the key on which the chords are based. One example is given already. The file "U.DMAJ" holds a set of chord words which can overlay the existing ones. After loading the program, enter *EXEC U.DMAJ to do the replacement. In this context, C and F stand for C# and F# respectively.
3. Similar sets of words could be created for other keys by editing this file. Bear in mind that:
·         For each chord, it is necessary to alter both the notes sounded and the corresponding character string placed on the stack.
·         The "sign" word must be altered to set the correct key signature and print out a message saying what the key is. This is called by the "RUN" word.
·          Within each chord word a nested IF( )ELSE( )IF structure is used to select a particular inversion. You may insert more alternatives if you wish so long as you retain the correct structure. You will also need to alter the range of the random number generated for the global variable "inv" in the "RUN" word.
4. Use additional chord words. Define the new chord words, insert the necessary selections in the word "choose", and alter the range of the random number generated for the global variable "chord" in the "RUN" word.
5. Use chords with more (or fewer) than 4 notes. The program should handle chords with up to 6 notes. Alter the value of the global variable "len" in the "RUN" word and redefine all the chord words to correspond.

An unsolved problem

It would be difficult to handle accidentals in chords other than those which are part of a key signature, since the one to one mapping between note and typed symbol would be lost.
Suggestions for solving this neatly will be welcome - as will other comments on the program. If there is any interest I will try and produce an enhanced version!

Related files on this disc:
U.Masterm - Musical Mastermind AMPLE program
U.DMaj - alternate set of chord words for use with above program

Published in AMPLINEX 003, January 1988

Notes on Quick Chord Namer

Bill Mellor
Base  letter       Variation  letter
––––– ––––––       –––––––––  ––––––
A       l            Maj        l
Bb      m            Dom 7      m
B       n            Min        n
C       o            Aug 5      o
Db      p            Dim 7      p
D       q            Min 7      q
Eb      r            Dom 9      r
E       s            Maj 7      w
F       t
F#      u
G       v
Ab      w
To use this utility *EXEC U.Chords into your current program. The next step is to find the base of the chord you require down the left-hand side of the table above (e.g. D) and to note the letter to the right of it (i.e. 'q'). The next column shows variations of the base (e.g. Maj 7) and by checking the letter to its right you will find the second coordinate (i.e. 'w').
By using the two coordinate letters as an AMPLE word, e.g. "qw", you have a shorthand method of playing the chord of D maj 7. This makes much more room available in Notepad and in this form rests and holds may be used in the normal way.
The TYPE command will show the full construction of the chord if required. The choice of coordinate letters may seem strange, but this is to avoid the letters used as notes, that is a to g.
The chart was originally much larger, containing many more base variations such as 'dominant 7 with augmented 5', but the whole thing was getting out of hand and I've settled for the more commonly used ones.
If anyone feels they could improve on the chart please feel free to have a go.

Related programs on this disc:
U.Chords - chord definitions

Published in AMPLINEX 003, January 1988

Hints and tips

Ignored natural signs

Graham F Firth
The hint by Roger Sapolsky in November's AMPLINEX failed to mention that the natural sign (=) is ignored on the first note after every key signature. I notice it mainly when using the Staff Editor.
As he rightly says, the effect can be overcome by putting the key signature after the naturalised note although it makes the music look a bit odd.

Two little utility words

David Westbrook
These are a couple of little utility words that I find useful. The first, "sp", performs a similar function to Roger Cawkwell's "s" in AMPLINEX 002, but is even more labour-saving!
The purpose is to SPOOL a file to extract a word from a program so that you can use it easily in other programs. For example, suppose you want to get a SPOOLed version of some wonderful instrument you've heard in an AMPLINEX issue (yes, I confess I 'borrow' other people's sounds!).
Just enter 'sp' at the command line: you will be prompted for the word you want and the filename to spool it to. The filename will automatically be given an 'S.' directory prefix, to mark it as a SPOOLed rather than SAVEd file. If you don't want that, just remove the 'S.' in line 6. That's it - 'sp' does all the work of opening the file, TYPEing the word and closing the file for you.
To use it, just type in the following and *SPOOL it (easy, since 'sp' will work on itself!). Then *EXEC it into any program you like.
"sp" ["Word to spool: "$OUT $IN
LEN 1 #- $- $12 $2
"""" $12 $+
"""" $+
"Filename: "$OUT $IN
"*SPOOL S."$+ $+
"TYPE" $12 $+
"*SPOOL"$12 $+ $+
]
The other word "del", is used for a "mass deletion" of words. I tend to have programs littered with utility words, unused instruments etc., which I don't need in the final version of a piece. But I get bored with typing "word"DELETE over and over again.
Answer - again, let AMPLE do it for you. Just enter 'del' at the command line and keep on entering word names until you've got rid of all the junk; then press ESCAPE to finish.
"del" ["del"$+
"Word to DELETE: "$OUT $IN
LEN 1 #- $- $12 $2
"""" $12 $+
"""" $+
"DELETE" $12 $+ $+
]
Both of these words demonstrate how you can use "$+" to issue, from within words, commands which can usually only be used at the command line (*SPOOL, DELETE and so on). This technique can be very useful, but it does often need a lot of trial and error to get the order of the assembled string of words right. Hence all the $12 commands to turn them round. Lines 2-4 in both words (beginning 'LEN') are used to add the necessary inverted commas to the word name that you type in.
"del" also shows how you can use this kind of word 'recursively': "del" calls itself, and thus keeps endlessly cycling round a loop until you press ESCAPE. REP(...)REP won't work in this situation (at least as far as I've been able to see) presumably because the assembled string never gets to the command interpreter. Does anyone else know better?

Finding the elusive 'bad bar'

Roger Sapolsky
It is frustating to see the error message "Bad bar in player X" displayed over and over again after you have spent a long time searching for an erroneous time setting hidden within a music part.
Is the word '^;' present in the part? If it is, you will always get the error message, no matter the time settings. Use of a bar length setting (e.g. 48, 4 BAR) prohibits the inclusion of chord rests - AMPLE knows why.
The AMPLE bar-checking facility is useful when applied to complicated music, particularly for those who do not read music fast enough to locate an error by ear at the moment it occurs.
To get round the problem mentioned above, you can simply delete the conflicting semicolons when only a few are present in the score; they can be retyped later after debugging.
Should there be many of them, it is best to enter, say,
"part1z" NAME MAKE
while part1a is displayed, then to delete all semicolons from part1z, check for errors and take a note of them before deleting the dummy part1z.
Errors in part1a can then be eliminated.
When working on part1z, don't forget the chord rests hidden inside words such as
"r" [96,^;]
The semicolon(s) here must also be deleted.

Instrument transfer

Jimmy Ryan
Here is an easy method to transfer an AMPLE word from one program to another without the use of *SPOOL or *EXEC.
For example, to transfer an instrument "instru" from one program "prog1" to another program "prog2", go into Notepad and enter:
"prog1" LOAD
"instru" GET
"prog2" LOAD
MAKE

Testing mixes

Graham F Firth
I find it useful to define the letter 't' as a word to test the music. If you are using multi-mix music then you could define the word 't' as follows:
"t" [ "12345-1234d" PLAY ]
This will play the fourth part, but will go through all the mixes so that the right mix will sound. When this part is OK, you can alter the 't' word to play the next part, and so on.
If you are only using a single mix then you could use part1, etc., for the whole tune, and part1a, etc., just to include the part you want to try. Remember to put SCORE & sig in part1a of course.

The SHIFT command

Tim Sketchley
The SHIFT command is used as part of an instrument definition, and is used to increase or decrease the pitch of one or more channels by an amount specified in sixteenths of a semitone.
For example:
  0 SHIFT - plays the specified pitch
  1 SHIFT - plays 1/16th semitone higher
 -1 SHIFT - plays 1/16th semitone lower
 16 SHIFT - plays a semitone higher
 32 SHIFT - plays a tone higher
192 SHIFT - plays an octave higher
384 SHIFT - plays two octaves higher
Let's start with a straightforward instrument definition:
"shiftins" [2 CHANS
2 CHAN
  128 AMP
 EVERY CHAN
  Bright Flat Long
]
This produces a very ordinary sound. Now let's replace the line 128 AMP with 1 SHIFT 128 AMP. This creates an ensemble effect, as the channels are playing very slightly different pitches.
Experiment with different SHIFT settings using Notepad. You may want to switch off channel 1 using 0 AMP so you can hear what channel 2 is doing. You should discover that although 1/16th semitone is a very small interval, the effect of the two channels playing the two pitches is considerable.
It is worth noting that 192 SHIFT plays an octave higher and this produces a bright and full effect. Also, 193 SHIFT plays an octave plus 1/16th semitone higher and is used in Organ.

Help from the Music 500 User Guide

Roger Cawkwell
There is much useful programming information contained in the Music 500 User Guide. Many of the AMPLE BCE words have the same meaning in AMPLE Nucleus and the Reference section of the Music 500 User Guide is in a similar format (though with less detail) to the new AMPLE Nucleus Programmer Guide.

Getting more volume

Ted Royffe
A simple hint for those who find that, although they can get reasonable output by turning up the volume on their amplifiers, they do not get sufficient output from the preset tape outputs thereon to make decent recordings. The easy way round this is to feed the Music 5000 output into the microphone inputs on the amplifier, if provided. However, in order to avoid distortion from overloading these, it may be necessary to use a simple dual attenuator.
If it is too much trouble to build one, suitable adjustable units made by QED can be purchased from many hi-fi shops. They are obtainable with phono or 5-pin DIN connections, or a combination of the two, and did cost about `9.50.

Symphony keyboard diagram

Graham F Firth
If anyone wants to buy the Music 4000 upgrade but doesn't want to pay for the keyboard as well, I can supply the circuit diagram for the Symphony keyboard.
It is a fairly simple circuit, but not really for the beginner. I modified an LVL Echo keyboard to this circuit and it works fine.

AMPLINEX to Wordwise Plus conversion

David Westbrook
I have developed a little Wordwise Plus segment program that I've found very useful in printing out AMPLINEX text files. The problem with these is that the 40 column format takes up an awful lot of paper if you print them from within AMPLINEX. For those with WORDWISE PLUS, this segment program will convert them to your normal format by stripping out the extra RETURNS and spaces for you. It's not perfect but it leaves you with a minimal amount of further formatting to do before you print the file.
To use it, go into Wordwise, load the segment program into, say, segment 0 and load the AMPLINEX file you want into the normal text area. Then run the segment program (i.e. in edit mode press SHIFT + f0). It prints a message from time to time, just to reassure you that something is happening.
After the reformatting is complete, you will be asked to put in the disc on which you store your usual page formatting "green code" commands (e.g. Paging, Page length, Justification etc.). Change "ampform" in the program to the file name you wish to use for these. If you don't want to load such a file, just remove the lines between 'VDU7' and 'DISPLAY'.

Related program on this disc:
H.WWconv - Wordwise segment program

Published in AMPLINEX 003, January 1988 

Index of AMPLE Nucleus words

This index is an extract from The AMPLE Nucleus Programmer Guide (c) 1987 Hybrid Technology.
The entries are arranged in a sequence based upon the following order of characters:
 ! " # $ % & ' ( ) * , - / : ; < = > ? @ [ \ ] ^ | ~ 0-9 A-Z
except that leading non-letters are treated as if they were at the end.
Each entry gives the word name and a brief description of its function.
A status may be shown on the right indicating that the word can be used only as a command or used only inside a word definition. If no status is shown the word can be used both as a command and inside a word definition.
Where relevant the following line shows the word's inputs and/or outputs. Where there are both, the -> symbol is used to separate them.
Index of words
<carriage return>  mark line end
<space>  separate items
!  move an extra octave up or down
"  start literal string
"characters" -> string                   inside []
string1 "characters" -> string2 string1  outside []
#!  store number at address
datanumber addressnumber #!
#*  multiply two numbers
number1 number2 #* -> productnumber (number1 x number2)
#+  add two numbers
number1 number2 #+ -> sumnumber (number1 + number2)
#+!  add number to number at address
datanumber addressnumber #+!
#-  subtract number from previous number
number1 number2 #- -> differencenumber (number1 - number2)
#/  divide previous number by number
number1 number2 #/ -> quotientnumber remaindernumber
#11  duplicate number
number #11 -> number number
#12  swap two numbers
number2 number1 #12 -> number1 number2
#2  discard number
number #2
#212  duplicate previous number
number2 number1 #212 -> number2 number1 number2
#2121  duplicate number and previous number
number2 number1 #2121 -> number2 number1 number2 number1
#213  rotate positions of three numbers
number3 number2 number1 #213 -> number2 number1 number3
#<  test previous number is less than number
number1 number2 #< -> flag (number1 < number2)
#=  test numbers are equal
number1 number2 #= -> flag (number1 = number2)
#>  test previous number is greater than number
number1 number2 #> -> flag (number1 > number2)
#?  fetch number from address
addressnumber #? -> datanumber
$+  add string to left end of previous string                      [] only
rightstring leftstring $+ -> string (leftstring + rightstring)
$-  split string after numbered character                          [] only
string number $- -> rightstring leftstring
$12  swap two strings                                              [] only
string1 string2 $12 -> string2 string1
$2  discard string                                                 [] only
string $2
%  introduce comment
&  indicate hexadecimal number
&<hex digits> -> number
'  accent next note or hit
(  start additional chord notes
)  end additional chord notes
*  indicate operating system command                               command
*<line>
+  sharpen next note
,  set length
number ,
-  flatten next note or indicate negative number
/  hold music event
:  set octave
number :
;  set music voice
voicenumber ;
=  naturalise next note
@  set transposition in semitones
transnumber @
[  start word definition                                           command
namestring [...]
\  move back
]  end word definition                                             [] only
~  slur next note
^  play rest
^;  play chord rest
|  mark end of bar
0 to 9  decimal digits
<decimal digits> -> number
A to G  play note with ascending pitch
a to g  play note with descending pitch
ACT  execute music action
see text
ACT(  start music action sequence                                  [] only
positionnumber ACT(
)ACT  end music action sequence                                    [] only
ALIGN  ensure text cursor is at start of line
AMPLE  restart system                                              command
AND  AND bits of numbers
number1 number2 AND -> ANDnumber
ARRAY  access array element
elementnumber baseaddressnumber ARRAY -> addressnumber
ASC  convert character to number                                   [] only
string ASC -> asciinumber
#B!  store low byte of number at address
datanumber addressnumber #B!
#B?  fetch byte from address
addressnumber #B? -> datanumber
#B12  swap high and low bytes of number
number1 #B12 -> number2
BAR  set bar length in length units
lengthsnumber BAR
$CHR  convert number to character                                  [] only
asciinumber $CHR -> string
CLEAR  clear editor data                                           command
CODE  call machine-code routine
YXnumber CAnumber addressnumber CODE -> YXnumber PAnumber
COMPACT  compact unused memory                                     command
COUNT  return loop count                                           [] only
COUNT -> number
DELETE  delete word                                                command
namestring DELETE
DIM  reserve memory
sizenumber DIM -> addressnumber
DISPLAY  display text
DURATION  wait for a period of time
number DURATION
)ELSE(  separate conditional sections                              [] only
EVERY  leave 'every' value
EVERY -> number
FAST  select fast/normal tempo
flag FAST
FCOPY  copy numbers from frame pointer
number -> number1 ... number-n
FIND  find uses of word                                            command
namestring FIND
FOR(  start definite loop                                          [] only
countnumber FOR( ... )FOR
)FOR  end definite loop                                            [] only
FRAME  set frame pointer to top of stack
FRAME!  write frame pointer
pointernumber FRAME!
FRAME?  read frame pointer
FRAME? -> pointernumber
FVAR  access stack frame item
elementnumber FVAR -> addressnumber
GO  start players together
GVAR  create variable                                              [] only
GVAR -> addressnumber
HALT  halt/continue timebase
flag HALT
IDLE  pass control to other players
IF(  start conditional sequence                                    [] only
flag IF( ... )IF  or  flag IF( ... )ELSE( ... )IF
)IF  end conditional                                               [] only
#IN  wait for and get keypress
#IN -> asciinumber
$IN  input line from keyboard                                      [] only
$IN -> string
INDEX  leave loop index                                            [] only
INDEX -> number
INSTALL  install module                                            command
namestring INSTALL
K(  start key signature
)K  end key signature
'L  set accent strength
number 'L
+L  increase dynamic level
changenumber eventsnumber +L
-L  decrease dynamic level
changenumber eventsnumber -L
=L  set dynamic level
number =L
LEN  get length of string                                          [] only
string LEN -> string lengthnumber
LOAD  load program                                                 command
namestring LOAD
MAX  leave larger of two numbers
number1 number2 -> largestnumber
MCAT  display catalogue of modules                                 command
MDELETE  delete module                                             command
namestring MDELETE
MEM  show memory usage in bytes                                    command
MIN  leave smaller of two numbers
number1 number2 -> smallestnumber
MLOAD  load module                                                 command
namestring MLOAD
MODE  enter display mode                                           command
number MODE
MPREFIX  set module filename prefix                                command
string MPREFIX
MSHOW  show list of words in module                                command
modnamestring MSHOW
MVAL!  write music variables
framelev keysig barcountlen octnote length tranvoice MVAL!
MVAL?  read music variables
MVAL? -> framelev keysig barcountlen octnote length tranvoice
NEW  discard program                                               command
NL  print new line
NOT  invert sense of flag
flag1 NOT -> flag2
NOUT  print number in decimal
number NOUT
&NOUT  print number in hexadecimal
number &NOUT
OFF  leave off flag value
OFF -> offflag
ON  leave on flag value
ON -> onflag
OR  OR bits of numbers
number1 number2 OR -> ORnumber
OSCLI  send string to operating system                             [] only
string OSCLI
#OUT  send ASCII code to screen
number #OUT
$OUT  print string                                                 [] only
string $OUT
P(  start concurrent sequence                                      [] only
playernumber P( ... )P
)P  end concurrent sequence                                        [] only
$PAD  pad string to length with spaces                             [] only
string1 lengthnumber $PAD -> string2
PAUSE  pause/continue sound processing  
flag PAUSE
PNUM  leave player number
PNUM -> number
QKEY  test key status or get keypress
negativenumber QKEY -> flag
zeronumber QKEY -> asciinumber
QTIME  return queue time
QTIME -> number
QUIT  leave editor                                                 command
RAND  get random number
RAND -> number
RAND!  set starting point for random numbers
number RAND!
RANDL  get random number in range
maxnumber RANDL -> number
READY  make system ready
RENAME  rename word                                                command
oldnamestring newnamestring RENAME
REP(  start indefinite loop                                        [] only
)REP  end indefinite loop                                          [] only
$REV  reverse the order of characters                              [] only
string $REV -> reversedstring
RVOICES  set voices range
startnumber endnumber RVOICES
SAVE  save program                                                 command
string SAVE
SCORE  prepare for music words
SHARE  select voice ensemble
ensemblenumber SHARE
SHOW  show user words                                              command
SIGN  test number is negative
number SIGN -> flag
SIMPLEACT  remove all music actions
SP  print a space
STOP  stop program
$STR  convert number to decimal string represenation               [] only
number $STR -> string
&$STR  convert number to hex string representation                 [] only
number &$STR -> string
$STRIP  remove leading spaces from string                          [] only
string1 $STRIP -> string2
+T  increase tempo
changenumber beatsnumber +T
-T  decrease tempo
changenumber beatsnumber -T
=T  set tempo
number =T
TYPE  type word definition on the screen                           command
namestring TYPE
)UNTIL(  exit from indefinite loop                                 [] only
UNUSED  make voice(s) unused
VAL  convert string to unsigned decimal number                     [] only
string VAL -> remainingstring number ON    if found
string VAL -> remainingstring OFF          if not found
&VAL      convert to unsigned hex number                           [] only
string &VAL -> remainingstring number ON   if found
string &VAL -> remainingstring OFF         if not found
VOICE  select voice(s)
voicenumber VOICE
VOICE!  set voice settings in frame
voicenumber VOICE!   or   EVERY VOICE!
VOICES  set number of voices
number VOICES
WIND  advance time
ticksnumber WIND
WRITE  display text of all words                                   command
X  play hit
XOR  exclusive-OR bits of numbers
number1 number2 XOR -> XORnumber

Published in AMPLINEX 003, January 1988