Spectrum Turboloader

by Esben Krag Hansen

from Your Sinclair, May 1986





FAST FORWARD



When the Spectrum starts to load, it's time for most of us to nod off

- until now. This prime cut of code from Danish programmer Esben Krag

Hansen speeds up the whole process.





Have you ever felt you were about to peg out from old age waiting for

your Speccy to load? Well, this ingenious piece of machine code goes a

long way to solving the problem. With it, you can double the speed of

saving, loading, verifying and merging. And it does it by using

improved versions of the ROM cassette handling routines in which the

timing values can be changed, so giving you full control of the data

transfer speed. So, you can put away those pension books for a few

years yet!





FRIENDLY ... AND FAST



The program is very user-friendly - there's no need for all that

PEEKing and POKEing here. Type it in following the instructions, then

save it to avoid any mishaps - no-one's going to relish retyping all

those data statements! Now start it with RUN and you'll be asked

immediately for a start address. And the good news here is that the

turboloader is relocatable. You can enter any start address suitable

for storing the 1845 bytes of code and the loader program will

relocate the turboloader to run in that area. So, you'll have no

problems using the turboloader in conjunction with your other machine

code utilities.



When the loader program's finished, you should save the machine code

as instructed on the screen. Now you're ready to roll ...





SPEED SAVING



Using the program is simplicity itself. All you have to do is insert a

RANDOMIZE USR statement before the turboloader commands. It's this

that activates the turboloader's command interpreter. The turboloader

will now remain activated until it reaches the end of the line or a

command it doesn't recognise.



As an example, let's have a look at how you'd save a Screen$ using the

turboloader:



RANDOMIZE USR x: SAVE "test pic" SCREEN$



where x is the start address of the turboloader. And, of course, the

program supports all the usual cassette commands - SAVE, LOAD, VERIFY

and MERGE.



But stop, you're saying - at least, you are if you've just tried

executing the statement above. It's no faster at all. A-ha! (Famous

Scandinavian pop group? Ed). That's because I've yet to tell you how

to change the transfer speed - the baud rate. Initially, the speed is

exactly the same with or without the turboloader - 1500 baud (bits per

second). But you can easily change this using one of the four new

commands that the program adds to ZX Basic.



The problem is that while SAVE, LOAD, VERIFY and MERGE already exist

in Basic, where do we find keywords for the four new commands? I've

got round this by adopting four of the Speccy's existing keywords;

RUN, LIST, INPUT and PRINT. They all still work as normal except when

you're using them as commands to the turboloader. Then their new roles

come into play.





NOTE FOR TRAINSPOTTERS



Ha, thought you'd caught me out, didn't you? Doesn't he know, you're

saying, that the use of RANDOMIZE to call machine code makes the RND

function unusable? That every call actually resets the RND value to the

same number all the time?



Well, yes I do! And to get round this side effect, I've made it so that the

turboloader on return loads the BC-register with the value of the system

variable SEED. Then the RANDOMIZE USR command will only load SEED with the

value it already contains. And bingo, no effect on the RND function

at all! So, the whole problem is eliminated using a single machine

code instruction - LD BC (SEED) - that's only four bytes long.





FAST FOUR-WARD

The four 'new' keywords work in the following way:





LIST

This command reads a header from tape and lists it on the screen. For

example, LIST will display the start address and the length of a

machine code black. And that should keep the hackers happy!

If you want to see how the first two commands work, try:

RANDOMIZE USR x: RUN 3100: SAVE "me" CODE x,1845: LIST



PRINT

This command lets you choose just how much info you want on screen. It

should be followed by either a 0, 1 or 2.

0: Neither the baud-rate nor the names of the data blocks during

LOAD/VERIFY are printed onto the screen; ie. zilch!

1: Only the names of the data blocks are printed.

2: Everything is printed.



RUN

This now changes the baud-rates. It must be followed by a number

ranging from 1500 to 3500 inclusive, in steps of 200 (1500, 1700, 1900

and so on). The maximum baud-rate you can use all depends on your tape

recorder. But most of you should be able to run at a minimum of 3100

baud - more than double the normal speed.



INPUT

This is used in exactly the same way as PRINT. It deals with the

message "Start tape, then..." and then waits for a key in the SAVE

command. The values are used as follows:

0: The message isn't printed and you don't have to press a key.

1: The turboloader only waits for the key press.

2: As usual.

The turboloader is initially set to PRINT 2 and INPUT 2.



