It's perhaps easier to understand the way things are stored by executing the following program:

10 LAYER 1,2
20 BANK 5 ERASE 0,6144,0
30 FOR %m=0 TO 6143
40 BANK 5 POKE %m,%@10101010
50 NEXT %m

This program will create vertical lines 1 pixel apart on your screen but will do so in the order they are stored in memory. As we saw previously POKE (and BANK x POKE address, value) writes a byte in memory at a specific address. The addresses we see starting with line 30 is where the screen memory is located and writing anything there will produce an image on your screen. The specific address 0 in BANK 5, marks a location called DISPLAY_FILE (or –alternatively– DISP_FILE1 but you'll see below why). It's important to note here that DISPLAY_FILE when dealing with legacy modes is always located at the same address: Byte 0 (decimal) or 0x0000 (hexadecimal) in BANK 5 (See Chapter 23 – The Memory for more details on the BANK command and its parameters).

Layer 3 differs even more on how it stores data in memory. If you recall from Chapter 14, Layer 3 is a Character Graphics mode and that name describes rather descriptively how it's arranged, in other words, very much like the screen is for regular PRINT commands as we saw in Chapter 14. The screen area is broken down to rows and columns and each of these locations, as marked by the unique row by column coordinate, points to a linearly stored 8 x 8 pixel image in memory called a tile. You can have up to 512 individual tiles in memory but you an also have as little as 1! Also the order of the tiles in memory is not important as each location can point to any tile from the ones available. In essence you can have an entire image composed of the same tile repeated over and over again much like you can fill a screen with "A" if you repeat a PRINT "A"; enough times. Layer 3 therefore is an array of pointers to the tile locations in memory. One would ask, why is this complicated mechanism necessary? The answer is quite simple and you will see it repeated further down: By using pointers (in effect indices), we can translate much larger memory structures and requirements into simpler ones, ones that an 8-bit computer like the ZX Spectrum Next can manipulate easily. We will examine Layer 3's memory organisation and usage separately and more in depth, at the end of this chapter and in the following two.

For all layers except Layer 3, the high resolution modes of Layer 2 and the Sprites Layer, the ZX Spectrum Next has a maximum horizontal resolution of 512 pixels3 and a vertical resolution of 192 pixels which gives us: 512 x 192 = 98304 pixels – or bits – in total or 12288 bytes. In order to store that, the ZX Spectrum Next defines a second DISPLAY_FILE area called DISP_FILE2 which is located at byte 8192 (decimal) or 2000h (hexadecimal) in BANK 5. This secondary area has the same organisation as the first DISPLAY_FILE but when in use it holds the display of all odd-numbered horizontal resolution addresses letting DISP_FILE1 handle the even ones.

To demonstrate this visually you will need to edit the program above as follows:

10 LAYER 1,2
20 BANK 5 ERASE 0,6144,0
30 BANK 5 ERASE 8192,6144,0
40 FOR %m=0 TO 6143
50 BANK 5 POKE %m,%@10001000
60 NEXT %m
70 FOR %x=8192 TO 8192+6143

3 The max horizontal resolution of 512 pixels is achieved by using half-width pixels which occupy the same area as the normal horizontal 256 full-width pixels.


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.