Retro Graphics Viewer & Converter — C64 (.KOA, .ART) & ZX Spectrum (.SCR)

Bidirectional client-side C64 Koala (.KOA), Art Studio (.ART), ZX Spectrum (.SCR) & Font ROM viewer + PNG/JPG to 8-bit binary converter with Floyd-Steinberg dithering

Bidirectional Retro Graphics Viewer & Native Binary Converter

Switch between Viewer / Decoder Mode (inspect & export .koa, .art, .scr, and .bin files as PNG) and Converter / Encoder Mode (quantize & dither modern PNG/JPG/WebP images into authentic 8-bit .koa, .art, and .scr binaries).

VIEWER MODE · READY
Load Demo Preset:
Test Source Image:
[Viewer Mode] Drop C64 .KOA / .PRG / .ART, ZX Spectrum .SCR, or Font .BIN here
Or click to browse local retro files · Instant client-side ArrayBuffer decoding
[Converter Mode] Drop Modern .PNG, .JPG, or .WEBP Image to Encode into 8-Bit Binary
Auto-scales to native resolution, enforces 4×8 / 8×8 hardware cell limits & packs exact .koa / .art / .scr bytes
Display Scale:
Active Format C64 Koala (.KOA)
Binary Size & Header 10,003 B ($6000)
Native Resolution 320 × 200 px (2x: 640×400)
Cursor & Cell Offset X: --, Y: --
Hardware Color Register Swatches Click any swatch to copy RGB hex

How to Use the Bidirectional Retro Graphics Viewer & Converter

This utility operates 100% inside your browser using HTML5 Canvas and typed JavaScript ArrayBuffer views. Whether you are inspecting raw binary dumps from a vintage floppy disk or encoding modern artwork into native 8-bit video RAM formats, no files are ever uploaded to a server.

A. Viewing & Decoding Retro Files (.KOA, .ART, .SCR, .BIN)

  1. Select 1. Viewer / Decoder Mode in the top mode bar.
  2. Drag and drop a Commodore 64 KoalaPaint (.koa, .kla, .prg), C64 Art Studio (.art), ZX Spectrum screen dump (.scr), or raw 8×8 character ROM (.bin, .rom) onto the dropzone — or click one of the four built-in hardware test cards.
  3. Switch between hardware colour profiles (VIC-II Pepto/Colodore PAL, VICE NTSC, ZX Spectrum ULA, or P31/P134 CRT Phosphor) and toggle 1x, 2x, or 4x integer scaling.
  4. Click Download Scaled PNG or Download 1x Native Pixel PNG to save a crisp, artifact-free modern PNG.

B. Converting Modern Images (PNG/JPG/WebP) to Native 8-Bit Formats

  1. Select 2. Converter / Encoder Mode in the top mode bar.
  2. Drop any modern .png, .jpg, or .webp image onto the converter dropzone (or click a built-in synth test image).
  3. Choose your target binary format: C64 Koala (.koa, 10,003 B), C64 Art Studio (.art, 9,002 B), or ZX Spectrum (.scr, 6,912 B).
  4. Tune Floyd-Steinberg Error Dithering, Contrast, and Brightness while watching the live cell-constrained hardware preview update in real time, then click Download Encoded .KOA / .ART / .SCR File.

Hardware Limits & Binary Memory Maps

  • Commodore 64 Multicolor KoalaPaint (.KOA — 160×200 Double-Wide Pixels, 10,003 Bytes): Driven by the MOS 6567/6569 VIC-II. Bytes $0000–$0001 store the $6000 load address; $0002–$1F41 (8,000 B) store the 2-bit-per-pixel bitmap; $1F42–$2329 (1,000 B) store Screen Matrix RAM; $232A–$2711 (1,000 B) store 2114 Colour SRAM nybbles; and $2712 (1 B) stores the global background colour ($D021). Each 4×8 multicolor cell can display at most 3 unique cell colours plus the shared global background colour.
  • Commodore 64 Art Studio Hi-Res (.ART — 320×200 Pixels, 9,002 Bytes): Uses a $2000 load address header (2 B), an 8,000-byte 1-bit high-resolution bitmap, and 1,000 bytes of Screen RAM allowing 2 unique colours (1 foreground, 1 background) per 8×8 character cell.
  • Sinclair ZX Spectrum Screen Dump (.SCR — 256×192 Pixels, 6,912 Bytes): Addressed by the ZX Spectrum ULA. Bytes $0000–$17FF (6,144 B) store the non-linear interleaved 1-bit pixel bitmap, followed by $1800–$1AFF (768 B) for the 32×24 colour attribute grid. Each 8×8 cell supports 2 colours (INK bits 0–2 and PAPER bits 3–5) sharing a single BRIGHT bit (bit 6) and FLASH bit (bit 7).

Pro Tips for Best 8-Bit Conversion Results

  • Boost Contrast Before Dithering: 8-bit palettes like the VIC-II Pepto/Colodore LUT have muted mid-tones. Adding +10 to +20 contrast separates foreground subjects from background cells and reduces colour clash.
  • When to Use Floyd-Steinberg Dithering: Enable Floyd-Steinberg dithering (around 75%–90% strength) for photographic portraits, gradients, and painted artwork. Disable dithering (0%) for pixel art, logos, or text where crisp solid colour cells are preferred.
  • Locking C64 Background Register ($D021): Because every 4×8 Koala cell shares colour 00 ($D021), locking the background dropdown to $00 Black or $0B Dark Grey often preserves dark outlines across the entire 40×25 screen matrix.

Comments (0)

No comments yet. Be the first to share your thoughts on this tool!

Leave a Comment

Theme Palette

Default Dark
High-contrast dark
Amber Terminal
Monochrome amber
Matrix CRT
Phosphor green
Workbench Light
Clean light mode

Audio & Display

Relay Click Sounds Web Audio API — soft mechanical clicks
CRT Scanline & Flicker Pure CSS overlay effect

System Info

Customization Panel Theme preference, audio FX, and CRT overlay settings are saved to your browser's localStorage and persist between visits. No cookies or server-side storage is used.
Keyboard Shortcuts Press Esc to close this panel. Use the header moon/sun icon to cycle themes.