14

The bitmap area of the Sinclair ZX Spectrum is exactly 256 x 192 pixels.

Surrounding the bitmap is quite a wide border area which is generally just one colour but loading and saving from tape changes the border colour quickly resulting in horizontal lines as thin as one pixel right through the border.

example loading with border effects

But what is the height of the border area above and below the bitmap area? I'm assuming it has a specified number of scanlines? And for horizontal border area on the sides I'm assuming it's specified as a number of bytes/characters, which are each 8 pixels wide.

But Googling I can't seem to find this specified anywhere. It must be quite well known for emulators etc. Perhaps it is the exact PAL spec, at least for the vertical? AFAIK the genuine Speccies were PAL only right?

I realize the full size of the border probably includes overscan beyond the size of our old monitors and TVs, if that's specified as well it would also be great to know.

6
  • 3
    "AFAIK the genuine Speccies were PAL only right?", Not so, the ULA came in both PAL and NTSC variants. Commented Aug 29, 2022 at 21:20
  • @OmarL: Wow I did not know that. Might need to post another question then! Commented Aug 30, 2022 at 6:36
  • There's no "bytes" associated with the screen borders.
    – tofro
    Commented Sep 8, 2022 at 17:05
  • There "are" no pixels or characters associated with the screen borders either. Yet the horizontal size of the border can be expressed in exact multiples of 8 pixels anyway due to the nature of the pixel clock as we learn from the detailed technical answers despite not knowing the most correctest terminology when posing the question. Commented Sep 8, 2022 at 18:12
  • @hippietrail from your last few posts I got the fealing you are writing/polishing some kind of Z80 based emulator if that is the case take a look at Simplest system to create an emulator for especially the links in the first bullet #1 correct CPU iset emulation
    – Spektre
    Commented Sep 10, 2022 at 8:39

2 Answers 2

14

See the detailed info here: https://worldofspectrum.org/faq/reference/48kreference.htm

The timing is expressed as a T-states of the CPU and, when recalculated to pixels, the top of the border is 64 lines, with 48 lines being visible as the actual border. The bottom side of the border has 56 lines, with some being outside of the visible area. On the left and the right sides there are 48 pixels, some of them are outside of the visible area.

3
  • Thanks! That's exactly what I just managed to find on this cached page of the defunct website www.zxdesign.info But I wonder why they chose 64/56 for the vertical instead of a nice even 60/60? Commented Aug 29, 2022 at 17:42
  • 3
    @hippietrail Those are multiples of 8 so you need smaller counters than with multiples of 4.
    – Justme
    Commented Aug 29, 2022 at 17:51
  • 1
    The info on WoS is actually mixing two independent entities: the positions of border and screen areas relative to the frame interrupt and actual visible (=transmitted to the video signal) border area. It's obvious that those two might not match: for example, if the frame interrupt coincides with the beginning of vertical retrace, some border lines right after interrupt won't be visible in the TV signal. The exact area of visible border probably needs more investigation (using an oscilloscope, for example)
    – lvd
    Commented Aug 30, 2022 at 5:24
13

The device uses 14 MHz crystal as the master clock, and it gets divided by 2 to get 7 MHz pixel clock.

The active raster is 256 pixels, and if we assume that standard 15.625 kHz horizontal scan rate is used, it adds up to 448 total pixel clocks per line.

Due to standard horizontal timing, there will be 364 pixels of video at most, leaving up to 108 pixels for border area.

And due to standard video timing, there should be 312.5 lines per video field, or 625 per frame, of which up to 576 contain video. But we can safely assume it outputs progressive video at 312 total lines per frame with 288 active video. Not all are visible due to overscan. This leaves 96 lines for border area in total.

Using this as a reference, I found a ZX Spectrum reverse-engineering website which confirms this, and actually has the values.

Borders are 48 pixels on left and 48 pixels on right for a total of 96 pixels. Due to overscan, not all of them are visible on a screen. This leaves 96 pixels for horizontal blanking and synchronization area.

The vertical border is said to be 48 lines before active raster and 56 lines after active raster.

1
  • 1
    The "World Worst Video Card" series - youtube.com/watch?v=l7rce6IQDWs is very good explanation for the video timings and inner working of a generic video card (Includes all reasoning for pixel size selection and physical wiring using basic logic components. Not exactly ZX but close enough in complexity/approach). Commented Aug 31, 2022 at 18:30

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .