MESSAGE MOVER by Martin Evans from Your Spectrum 10 (Dec'84/Jan'85) Have you ever wanted to put a message or instructions for a game as scrolling text on the 23rd line of the screen display - just like they do in the professional commercial packages? Well, here's your chance. This machine code program can be used to display a string of text which is constantly scrolled so that the words go off one side of the screen as others enter from the opposite side. I've produced an assembly listing of the routine (listed from the GENS3 HiSoft assembler), but there's also a Basic program which will do the trick if you've not got an assembler at hand. The Basic listing of the routine should be typed in directly as it stands; you'll notice that a number is included at the end of each line of data as a checksum and, if a mistake is made in your typing, the line number containing the mistake will be displayed on-screen. Once you've typed the program in without error, it would be wise to save it using SAVE "SCROLL" CODE 60000,95. It might also be a good idea to save the Basic as well, so that you can make the suggested changes that follow without corrupting your copy. The Basic can now be erased using the command NEW - the machine code will, of course, still be present as it's positioned above RAMTOP. To test the routine, type in the second Basic program given and RUN it - you should now get the contents of z$ scrolling, pixel by pixel, across the 23rd line of the screen display. To return to Basic, simply press any key. To incorporate this routine in one of your own programs, you should use the second program given as a subroutine, define your particular message as z$ and then GO SUB to the subroutine. The machine code is completely re-locatable, but it must not be loaded to the same address as the data for the message - otherwise you'll crash the computer. As the routine stands the string will be scrolled round and round until a key is pressed. However, to alter the routine so that the message is only scrolled once, the value '40' in line 70 of the first program must be changed to '200'; alternatively, you could load the machine code, type POKE 60065,200 and re-SAVE the code as shown above. 16K Spectrum owners will be pleased to hear that they're not left out - for once! Simply add these two lines to the second Basic program: 15 RANDOMIZE (NEW ADDRESS) 16 POKE 60001,PEEK 23670: POKE 60002,PEEK 23671 You'll also have to alter the value '59399' in lines 30 and 50 to a new value 'new address - 1'. As a last note, when POKEing z$ into memory, it's important that the last address is POKEd with zero to tell the routine where the end of the message is; look at line 50 of the second Basic program. PROGRAM 1 This program allows you to enter the machine code scrolling routine in Basic. Once you've made sure it's error-free, SAVE it to tape using the instructions given in the text. Lines 10-90 Contain the data for the machine code routine. The last number on each line of data is the value of the checksum - so you'll know whether a mistake has been made as soon as you RUN the program. Lines 95-180 Lower RAMTOP, clear the checksum (b), and READ and POKE the data making sure the checksum is correct for each line. PROGRAM 2 This program allows you to test the routine, providing a message in z$ which will be scrolled on the 23rd line of the screen display once the program is RUN. This program can also be used as a subroutine in your own programming efforts. 16K owners should read the text for the instructions on how to manipulate this program for their machines. Lines 5-10 Place the message (given in quotes) in the array z$. Lines 20-40 POKE the message in z$ into locations 59399 onwards in memory. Lines 50-60 Poke the value '0' at the end of the message in z$ and call the routine. Line 70 Prints the code of the key pressed. -- Another Fine Product transcribed by: Jim Grimwood (jimg@globalnet.co.uk), Weardale, England --