FUNCTION KEYS
by Robert Young, Chichester, Sussex
from Your Computer, April 1984


THE SPECTRUM DOES NOT have a function key facility, and so I have
written a machine-code program which allows any number of keys to be
programmed very easily. This includes all the legends on the keys, the
graphic symbols and the user-defined graphics, so that, for instance,
the PRINT token can be programmed separately to the P and TAB. Of
course, you will only wish to define keys you are unlikely to use for
their normal purpose.

The definitions of keys should be put in separate REM statements at
the very beginning of the program. You should follow the line number
and REM by the symbol you wish to program, a colon, and then the
definition. The definition can be any combination of characters,
graphics and legends. If you want it to execute automatically then end
it with the hash - # - character. If a syntax error is found when the
line is executed, the line will be displayed at the bottom of the
screen with a question mark as normal. Note that a key whose
definition is just a hash, will act as an enter key.

The colon that must be put between the key to be defined and the
definition not only conveniently separates the two but also puts the
computer into K mode. If, however, you wish to start the definition
with a letter of the alphabet which cannot be accessed in this mode,
it is necessary to type any token or symbol that puts the computer
into L mode, such as a keyword, then to type the character you want
and finally to go back and delete whatever you used.

Rather than search through the whole program for key definitions, the
program stops looking as soon as it finds the first proper program
line. Therefore all the definitions must be put before the main
program. This can be quite useful if you want a key which has been
programmed to revert to its normal purpose temporarily. Rather than
deleting the definition all you need to do is change its line number
so that it is, for instance, at the end of the program. Then at a
later date you can change it back again.

Lastly if a key is defined twice, it is the definition nearest the
beginning of the program that will be taken. Note that a programmed
key will repeat if held down.

The machine code is included in the data statements of the BASIC
program. The ninth figure of each statement is, however, the sum of
the first eight and this is used by the program to check for errors in
the data. Enter the BASIC program, save it just to be on the safe
side, and then run it. If an error is found the program will display
the message Error In Line, followed by the line in which the error
occurred. Note that the BASIC program automatically alters the machine
code if you have a 48K Spectrum, so that it is located at the top of
memory - the actual data given is for the 16K model.

The program will then display Prepare To Save and the normal message
will appear at the bottom of the screen. You May then save the machine
code. After this it will print Prepare To Verify. Rewind the tape to
the point where you started saving the code and the program will
verify it automatically. If this is completed successfully, the BASIC
program will NEW itself leaving the machine code located at address
32348 for 16K machines or 65129 for 48K. In future, to load the
machine-code, type
	CLEAR 32347
for the 16K or
	CLEAR 65128
for the 48K, followed by
	LOAD "" CODE

The program must be turned on before it will work. This is done by:
	RANDOMIZE USR 32479 (16K)
or
	RANDOMIZE USR 65260 (48K)
To turn it off type:
	RANDOMIZE USR 32486 (16K)
or
	RANDOMIZE USR 65267 (48K)

Here are a few examples of key definitions.

1 REM !: PAPER 7: INK 0: CLS: BORDER 7#
2 REM .: PRINT 65536-USR 7962#
3 REM NEW: INPUT A$: IF A$ = "Y" THEN NEW#
4 REM :,

REM 1 will reset all the colours - white paper and border, black ink -
at a press of symbol shift - 1. This is useful if you are developing a
program using a strange combination of colours. Often, after stopping
such a program, the listing is almost unreadable.

REM 2 will print out how much free memory you have left on typing a
full-stop.

REM 3 is a safeguard against NEWing a program accidentally. On
pressing NEW, you must input a string. If you enter Y the program will
NEW. Anything else will mean that key press is ignored. Enter the NEW
after the REM by typing a colon, followed by the NEW then deleting the
colon.

Finally REM 4 allows you to type in quantities of data far quicker. It
makes the space key act as a comma, avoiding the need for using the
shift key.
