where start_address can be any number from 0 to 65535 and length any number from 1 to 65535 and the sum of these should not exceed 6553611. CODE as discussed works only in the main memory (or rather in the main memory map) and for the rest of the memory we should use the BANK modifier. The main difference is that BANK is only 16K in size thus accepting a maximum of 16384 as offset12 and length. BANK can be used without an offset or length (but once an offset has been specified, the length parameter is required). Saving the contents of a bank takes the form:
SAVE filespec BANK number, [offset, length]
For NextBASIC programs that make the use of memory banks (as we'll see in Chapter 23), apart from the main program that can be saved with a simple SAVE command, you also need to save all the banks that contain parts of the program. It is therefore imperative to use SAVE...BANK on its own (without offset information) to make sure that all the NextBASIC parts are saved. As you will also see it's good practice to also assign banks when writing a NextBASIC program using variables so when you're loading them back you do not have to literally assign specific bank numbers as these can be reused by NextZXOS or a machine code program already in memory.
We already saw how we can use LOAD to load arrays into NextBASIC without having to enter complex DATA statements that have the potential of making our program hard to read. We SAVE arrays by using the DATA modifier followed by the array name (including parentheses) we wish to store for later usage. A few things we need to note are:
We cannot use a non-dimensioned array in our SAVE statement. For example if we do:
SAVE "data" DATA a()
we're more than likely to receive a 2 Variable not found, 0:1 error. Writing something like this:
DIM a(3): SAVE "data" DATA a()
however will save happily.
An already dimensioned array can be saved using a direct NextBASIC command or as part of a program but a saved array loaded using the command line or a direct NextBASIC command will NOT be available from your program unless it's loaded explicitly from it. Let's illustrate this point by writing the following little program:
10 DIM a(30)
20 FOR f=1 TO 30
30 LET a(f) = 30-f/f
40 NEXT f
50 SAVE "data" DATA a()
RUN the program and then type NEW to restart NextBASIC. Then type the following program:
10 FOR f=1 TO 30
20 PRINT a(f)
30 NEXT f
11 In reality NextBASIC, in order to retain compatibility with earlier versions of Sinclair BASIC, allows all valid integer numbers as both address and length. If you however include a non-valid length, you cannot be certain of what you're actually storing so make sure you verify that the locations you're storing are inside the actual memory map. 12: Using the term offset is more accurate than start address for a bank as it can move location in the memory map. Locations within a bank always start at 0 and that's common on all 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.