The same however is not entirely accurate for DPOKE and the string POKE version of the command. For example both the commands that follow will NOT write in the ROM slot but WILL write in the RAM slot (it so happens as you see from the previous figure) that the first area right after the ROM is DISP_FILE so you'll see a visual result immediately:

POKE 16383, "This is a test":PAUSE 0

and

DPOKE 16383, 65535: PAUSE 0

will both produce a visible result in the upper left corner of the display while the ROM slot is not affected.

CLEAR

When looking at the different memory areas maintained by NextBASIC, we briefly mentioned the System Variable RAMTOP. This variable (located at address 23730) contains the address of the last byte used by NextBASIC. Even NEW, which clears the RAM out, only does so as far as this address – so it doesn't change the user-defined graphics. You can change the address RAMTOP points to by putting it as an numeric argument in a CLEAR statement as follows:

CLEAR new_RAMTOP

This effectively does 4 things:

  • clears out all the variables
  • clears the display file (like CLS)
  • does RESTORE
  • clears the NextBASIC return stack and puts it at the new_RAMTOP address – assuming that this lies between the calculator stack and the physical end of RAM; otherwise it leaves RAMTOP as it was.

RUN also performs a CLEAR, although it never changes RAMTOP.

Using CLEAR in this way, you can either move RAMTOP up to make more room for NextBASIC by overwriting the user-defined graphics, or you can move it down to make more RAM that is preserved from NEW. It can also be used to ensure that the machine stack is below BFE0h (49120) when intending to call NextZXOS – this means that the stack will not have to be subsequently moved within your own machine code.

Type NEW, select NextBASIC, then CLEAR 23800 to get some idea of what happens to the machine when it fills up. You'll immediately get an M RAMTOP no good error message. Trying CLEAR 23900 will report 0 OK but attempting to write a program will stop with a buzzing sound very quickly. That means that the NextBASIC user program memory is now full and you will have to make room before typing any more. There are also two error messages with roughly the same meaning, 4 Out of memory and G No room for line.

It's worth mentioning that the Clear option in the NextBASIC menu (accessible by pressing the EDIT key) can also be used to CLEAR memory and it's particularly useful if you have cleared RAMTOP too low and no longer have enough memory to enter NextBASIC commands as with the example above. It sets RAMTOP to just below the current UDG area (ie. equivalent to CLEAR % DPEEK 23675-1, one less than the value in the UDG SysVar).

Memory Bank management with BANK

Under NextBASIC the system's memory capacity is shown in the on-screen menus. It can also be queried programmatically by examining the new system variable, MAXBNK, which contains the number of the highest usable bank in the system (normally 47 or 111)3.

3 The dot command .mem also returns the memory information, although measured in 8K banks.


ZX Spectrum Next User Manual, 3rd Edition (ISBN 978-1-5272-5496-1), written and illustrated by Phoebus R. Dokos. Copyright © 2020-2024 Phoebus Dokos / SpecNext Ltd. Licensed under CC BY-NC-SA 4.0. This is a transcription and can contain errors; check any doubt against the printed page.