MEMORY EXPANSION PROGRAM by Toni Baker from ZX Computing, April 1987 [This is an April Fool, so doesn't do anything useful. JimG] Toni Baker shows how to squeeze some extra memory out of 16 and 48K Spectrums. Once upon a time, when I was a lot younger than I am now, I was privileged enough to own a calculator. It wasn't anything flash, you understand, because calculators had only just come onto the market - but it was good enough for me at the time. It did add and subtract, multiply and divide. All very simple stuff, I grant you, but fun at the time. A friend of mine also had a calculator. This was a more expensive version. It was made by the same company, but was the next one up in the range. It had an extra column of buttons on the right, and was coloured black instead of white. The extra buttons were things like M+, M-, MR and so on - all memory functions, allowing you to store and recall numbers and so on. Then, one day, while we were playing a casual game of throwing- calculators- round- the- room (as children do), the case of my prized calculator came apart, revealing a panel of little rubber buttons on one half, and a grid of wires on the other half. It became immediately apparent to me that pushing down one of the rubber buttons would make contact between a vertical wire and a horizontal wire, and hence register the key depression. It was then that I noticed an inconsistency - there were more vertical wires than there were columns of keys, giving an extra six possible contacts. Surprise surprise! Imagine my surprise when, with the case still open, I pressed on the extra contacts to see what happened - only to find that they performed the M+, M-, MR (etc) functions of the more expensive version. It seemed that the internal hardware of the two calculators was identical, but they were put into two different external cases so that they could sell at two different prices for differing sections of the market. I suppose it must have been cheaper for them to do that than to produce two entirely different machines. With that little anecdote in mind, we return to the present. Calculators have long gone out of fashion - today, computers are [the] in thing. I began to wonder, however, whether what was true of calculators in the early days, might also be true of computers now. Could it be possible that inside the various different boxes there was basically one, and only one, type of Spectrum? Literally speaking, of course, this cannot be true. The IN ports seem to give different results for different issues of Spectrum, but the central problem remains. It is not possible that the advanced features of the Spectrum 128 (extra memory, full screen editor, and so on) are, and have always been, available on the old 48K and 16K Spectrums? It turns out that is in fact the case. Both 16K and 48K machines have in fact already got 128K of RAM built in - though accessing it has not been easy. On the Spectrum 128, outputting a byte to port 7FFD was sufficient to page in the extra memory. On the 48K and 16K machines this is not so. It is possible, however, to devise a machine code program which will give genuine access to the extra RAM and ROM memory. Such a program is Included in this article. It is a BASIC program with the machine code held in DATA statements. The BASIC program - essentially a machine code loader - will POKE the machine code into memory and then, by means of a USR statement, run the machine code itself. The last item in each DATA statement is a checksum to ensure that the line has been typed in correctly. If the checksum does not match with the rest of the row then an error message is generated, indicating the line number at which the DATA was incorrect. Once the program has been typed in, with each DATA statement error free, then the program may be RUN. There will be a short delay whilst the machine code is loaded into memory, and then the computer will, effectively, turn itself into a Spectrum 128, and will remain so until the power is switched off. Reset The effect of running this program is equivalent to pressing the RESET button on a normal Spectrum 128. The screen goes black with a white border for a few seconds before you are presented with the main 128 menu. A cyan bar outlines the first item on the menu, TAPE LOADER. Ignore this for the moment. Using the CURSOR DOWN function (CAPS-SHIFT/6 if you don't have a Spectrum+ with a separate CURSOR-DOWN key) move the cyan bar to the second item, 128 BASIC, and your machine is every bit as good as the 128 itself. I would like to stress at this point that the program will convert a Spectrum to a Spectrum 128 by software means alone! This is important, because it means that the guarantee is not invalidated! Of course the main problem with converting a Spectrum by this means is that it doesn't supply an instruction book. It is not within the scope of this article to give detailed information on 128 BASIC, and furthermore, neither Sinclair nor Amstrad will provide an instruction book without supplying a computer as well. The only thing I can suggest is that you find a friend who's got a Spectrum 128, and borrow their instruction book. If you don't know anyone who owns a Spectrum 128 then it might be worth your while joining a local computer club. Most of the extra memory in a Spectrum 128 is locked up in a software data-storage system called silicon disc, or RAMdisc. It is worthwhile getting hold of an instruction book, for the simple reason that without it you won't know how to access the extra memory in 128 BASIC. M/C How the machine code program works is surprisingly simple. As has been previously stated, an output to port 7FFD alone is not sufficient. The Spectrum contains two new registers, which to my knowledge have never been properly exploited. They are referred to as "Alternative Programming Registers", and it is the first of these (APR1 for short) which discriminates between the various different hardware models of the Spectrum. Access to the chip is by a complex sequence of OUT instructions. This sequence is performed automatically by all Spectrums whenever the machine is either switched on or reset, so that the machine knows what kind of Spectrum it's supposed to be. I'll leave it to you now to actually load in the program and try it out. Good luck, and I'll see you again next month.