11 September 2026
Decoding Sinclair ZX Spectrum .SCR Memory Dumps into Crisp PNG Graphics
Released in 1982 by Sinclair Research in the United Kingdom, the ZX Spectrum 16K/48K became one of the most influential home computers in video game history. Legendary titles like Manic Miner, Knight Lore, and Chuckie Egg defined a generation of bedroom coders.
To squeeze a full color display onto a machine with only 16 kilobytes of RAM, Sir Clive Sinclair's engineers designed an iconic, highly unconventional video memory architecture. Today, emulators, demoscene artists, and retro archivists store exact memory dumps of these screens in 6,912-byte .scr files.
This article explores the inner workings of the ZX Spectrum's non-linear screen buffer, the physics behind "attribute clash", and how you can convert .scr files into crisp, modern PNG graphics using convrtr's ZX Spectrum to PNG converter.
The 6,912-Byte Display Layout
A standard ZX Spectrum screen resolution is 256 pixels horizontally by 192 pixels vertically. In standard 1-bit monochrome graphics, 256 × 192 bits equals 49,152 bits, or exactly 6,144 bytes (6 KB).
Every .scr file is structured into two consecutive memory regions:
- Pixel Bitmap Buffer (6,144 bytes): Starting at base video RAM address
0x4000, this area contains the raw monochrome 1-bit pixel on/off states. - Color Attribute Buffer (768 bytes): Starting at address
0x5800, this area assigns foreground and background colors to 8×8 pixel character blocks.
Total file size:
6,144 + 768 = 6,912 bytes
Non-Linear Interlaced Video Addressing
Unlike modern computer graphics where scanlines are stored consecutively in memory (line 0, line 1, line 2...), the ZX Spectrum ULA (Uncommitted Logic Array) video chip was wired to simplify hardware binary counters rather than human readability.
The 192 scanlines are partitioned into three vertical thirds (each 64 lines tall). Within each third, lines jump by 8 scanlines across 8 character rows. Decoders must compute the line offset with bit manipulation:
Address = 0x4000 | (third << 11) | (scanline_in_char << 8) | (char_row << 5) | char_col
Attribute Clash and the Color Byte
To save memory, colors are not assigned per pixel. Instead, each 8×8 block of pixels shares a single Attribute Byte from the 768-byte color buffer (32 columns × 24 rows).
Each attribute byte is packed with 4 distinct flags:
- Bits 0–2 (INK): Foreground color index (0 to 7: Black, Blue, Red, Magenta, Green, Cyan, Yellow, White).
- Bits 3–5 (PAPER): Background color index (0 to 7).
- Bit 6 (BRIGHT): High-intensity luminance boost (increases RGB brightness from standard 84% to 100%).
- Bit 7 (FLASH): Alternates INK and PAPER colors periodically on real CRT hardware.
This hardware constraint is what created "attribute clash": when a game character walked past a colored wall or background element, the colors would abruptly bleed together within that 8×8 block.
Converting .SCR to High-Resolution PNG
Modern screens feature 4K and Retina resolutions where a 256×192 image appears minuscule. Furthermore, many modern viewers blur pixel art if scaled with bilinear filtering.
convrtr's ZX Spectrum to PNG converter handles this natively in your browser:
- Accurate Palette Reproduction: Emulates authentic Sinclair ULA normal and bright RGB color levels.
- Nearest-Neighbor Scaling: Provides lossless 1x, 2x, 4x, and 8x integer scaling options to render crisp, razor-sharp retro pixel art on modern displays.
- Invert Options: Flip foreground and background polarity for unique visual aesthetics.
- Zero Server Uploads: Converts in milliseconds entirely on your local machine using fast WebAssembly and HTML5 Canvas pipelines.
Revive your classic 8-bit memories and export pixel-perfect retro artwork in seconds.
Related reading
Converting C64 Advanced Art Studio (.art) to PNG: Commodore 64 Bitmap Recovery
Explore Oxford Computer Systems' 1986 Advanced Art Studio graphics format. Learn how Commodore 64 Hires and Multicolor bitplane structures, Screen RAM, Color RAM, and the authentic VIC-II palette decode into 32-bit RGBA PNG.
Converting Amstrad CPC Screen Dumps to PNG: CRTC 6845 Framebuffer Decoding
Discover how the Amstrad CPC 464, 664, and 6128 video architecture works. Learn how CRTC scanline addressing, Gate Array bitplane interleaving, and 27-color palettes decode into modern PNG images.