• New
SuperULA
search
  • SuperULA
  • SuperULA
  • SuperULA
  • SuperULA
  • SuperULA
  • SuperULA
  • SuperULA
  • SuperULA
  • SuperULA
SuperULA
SuperULA SuperULA SuperULA SuperULA SuperULA SuperULA SuperULA SuperULA SuperULA video video

SuperULA

£86.00
VAT included Awaiting arrival, can be back-ordered

ULA and RAM replacement for ZX Spectrum 48/48+

Quantity
In stock soon

 

Delivery information

 

Returns policy

 

Warranty information

SuperULA drops straight into the ULA socket of any Issue 2, 3, 4, 5 or 6 of ZX Spectrum 48K. It does not emulate the Z80 - it drives the real CPU already on your board, generating its clock, interrupts, reset and memory timing exactly as the Ferranti chip did. Everything around that CPU is rebuilt in an FPGA: memory, video, paging, sound and storage.

SuperULA is a set of two PCBs: the main one replaces the ULA and all RAM, while the second board acts as a receiver/demultiplexer and audio/video generator, replacing the sound chips and RF modulator.

Warning: Every SuperULA is individually tested before dispatch and requires suitable soldering skills to install; it can resolve faults in the components it replaces, but should not be expected to fix unrelated problems with your ZX Spectrum.

No cutting of traces is required for installation and it is only four wires that need to be soldered. After installation you will be able to run your Spectrum as  whichever machine you will tell it to be.

What SuperULA replaces and what it adds

Replaces

  • The original Ferranti/Amstrad ULA - no more failed chips, no more overheating
  • All 16 × DRAM chips (4116 / 4164) - SuperULA carries 8 MB of onboard PSRAM
  • The RF modulator is replaced with clean digital RGB output via the included Mini-DIN9 adapter

Adds

  • DivMMC SD card mass storage functionality - optional, requires external SD card module
  • TurboSound - 2 × AY-3-8912 on the standard #FFFD / #BFFD ports
  • SAA1099 - 6-voice stereo
  • ULAplus - 64-colour extended palette
  • Covox mono (Pentagon / SpecDrum standard)
  • SounDrive - 4 channel stereo Covox
  • Extended RAM up to 4 MB (Pentagon mode)
  • Four machine personalities, switchable from an on-screen menu
  • Shadow ROM - 32 x 16 KB ROM images in flash, no EPROM needed
  • Built-in firmware upgrade facility - system flashing from a program running on the Spectrum itself
  • 3.7MB of user flash 

 

SuperULA_speccy.jpg

Machine modes

Four personalities, each with correct video timing, memory map, contention behaviour and I/O decoding - not approximated.

Mode Video timing RAM
ZX Spectrum 48K 312 lines, 224 T/line, 69888 T/frame 48 KB
ZX Spectrum 128K 311 lines, 228 T/line, 70908 T/frame 128 KB
Pentagon 128 320 lines, 224 T/line, 71680 T/frame up to 4 MB
Timex TC2048 312 lines, 224 T/line 48 KB + SCLD modes


48K, 128K and Timex keep their original memory sizes. Extended memory is available exclusively in Pentagon mode, across three paging schemes.

Pentagon memory paging

Mode 00 — Profi (1 MB)
Ports #7FFD + #DFFD. Page = {DFFD[2:0], 7FFD[2:0]} → 64 × 16 KB.
DFFD D3 enables all-RAM mode; D4 unlocks the 7FFD paging lock.

Mode 01 — Pentagon 1024 (1 MB)
Ports #7FFD + #EFF7. Page = {7FFD[5], 7FFD[7:6], 7FFD[2:0]} → 64 × 16 KB.
EFF7 D2 switches 7FFD D5 between bank-select bit (1 MB) and paging lock (128K). D3 enables all-RAM.
Verified against AUMT memory tester, option 1.

Mode 10 — Pentagon + Scorpion (4 MB)
Ports #7FFD + #1FFD. Page = {1FFD[7:6], 1FFD[4], 7FFD[7:6], 7FFD[2:0]} → 256 × 16 KB.
Full 4 MB addressing with Pentagon-compatible base paging.
Verified against AUMT memory tester, option 6.

Video

Standard ULA rendering includes cycle-accurate memory contention - the timing quirks that games actually depend on.

Timex SCLD is implemented in full:

  • Dual screen — switch between two display files
  • HiColor — 8×1 attribute resolution instead of 8×8
  • HiRes — 512×192 monochrome
  • SCLD screen-disable and the #F4 paging register

ULAplus provides a 64-colour palette via ports $BF3B / $FF3B, held in on-chip block RAM and read back correctly by software that queries it.

Output is 9-bit RGB (3-3-3) with composite sync, digital, straight to the adapter board.

Memory

Behind the ULA sits a PSRAM controller running at 56 MHz across a 23-bit address space, fronted by an intelligent arbiter.

The arbiter juggles three masters - CPU reads, CPU writes and video fetches - and adds a prefetch engine that speculatively pulls the next likely byte while the bus is idle. Write buffering, request ageing and prefetch invalidation are all handled in hardware, so the Z80 stalls as rarely as physically possible.

Shadow ROM. All ROM images live in PSRAM, not in an EPROM. At power-on SuperULA copies 32 × 16 KB ROM slots (512 KB) from SPI flash into PSRAM. The physical ROM socket is still used when an external device pages its own ROM.

External ROM auto-detection. SuperULA probes N_ROM_CS at boot. If a DivMMC-style interface is present, it steps back and lets that board own the ROM space. If not, it serves ROM itself. No jumpers, no settings - it works out what it’s plugged into.

Sound - and how it actually gets out

This is the part worth understanding, because it explains the whole board.

SuperULA streams RGB, composite sync, the entire Z80 bus and every audio enable flag off-board over a custom 8-bit synchronous link running at 56 MHz - a framed, self-synchronising protocol. At the far end sits the second FPGA, on the supplied RGB adapter board.

That adapter turns the stream into the picture and the sound. The AY chips, SAA1099, Covox and SounDrive all live there, watching the Z80 bus in real time, and their output leaves on the same Mini-DIN9 connector as the video.

One cable out of the Spectrum. Video and stereo audio, both digital-clean, both from the same link.

Every audio device is individually switchable per profile - you decide which machine gets which chips.

Profiles and the on-screen menu

You store four independent profiles in flash. Each carries its own machine type, ROM set, memory configuration, ULAplus enable and full audio device selection.

Press the button and the screen goes black: SuperULA takes over the video and the CPU, and shows you a menu.

  • Profile list, with each name read live from flash
  • DiagROM - boot straight into the diagnostic ROM
  • Config - boot the on-board configuration utility *
  • ENTER to move, SPACE to select

//ONLY WHEN NO EXTERNAL ROM DETECTED; if detected - config.tap must be loaded/

There is no keyboard controller involved. While the CPU is held in reset, SuperULA drives the highest address lines itself and reads the keyboard matrix directly - the same trick the ULA has always used, turned inward.

Two seconds after every reset a discreet Profile: banner appears in the lower border, so you always know which machine you booted.

Pick a profile and the machine reboots as a different computer. Instantly.

Built-in system flashing

You never need an external programmer. SuperULA exposes the SPI flash to the Z80 through ports $00F3 and $01F3 — ROM images and configuration can be rewritten from a program running on the Spectrum.

Configuration is stored with a magic header, version field and XOR checksum. If the block fails validation, SuperULA falls back to safe defaults rather than booting into a corrupted state.

The FPGA bitstream itself updates over USB-C.

Hardware specifications

FPGA (main) Gowin GW1N-2
FPGA (RGB adapter) Gowin GW1N, QFN48 — video + sound
Link between them Custom 8-bit synchronous, 56 MHz
RAM 64 Mbit (8 MB) PSRAM, BGA, bottom-mounted
ROM 32 Mbit SPI flash
Bitstream update USB-C
PCB 4-layer, 24 × 52 mm, double-sided
Video out 9-bit RGB (3-3-3) + CSYNC, via Sega Mini-DIN9 adapter
Wires to Z80 3 — M1, RESET, IORQ
Wires to ROM 1 - new ROMS_CS_N


Compatibility

Works with external DivMMC, DivIDE, Kempston joystick interfaces and other edge-connector peripherals. Directly compatible with ESXDOS for SD card mass storage.

SuperULA does not produce composite or YUV video. RGB only.

RGB adapter wiring (Mini-DIN9 → SCART)

Direct connections only. No electronics between the SCART and Mini-DIN pins is required.

Signal Mini-DIN SCART Remarks
RED 7 15 direct connection
GREEN 3 11 direct connection
BLUE 1 7 direct connection
CSYNC 4, 5 20 direct connection
AUDIO LEFT 8 2 direct connection
AUDIO RIGHT 9 6 direct connection
BLANK 2 16 direct connection
GND 0 / shield 4, 18, … direct connection


In the reference photo below, the pin shown as +5V is in fact the blanking signal - ignore the label.

Mini-DIN9 pinout

Engineering notes

  • Written in SystemVerilog, ~5 300 lines
  • Clocking: single 12 MHz crystal → PLL → 56 MHz and 28 MHz domains
  • Timing fully closed with margin: 65.7 MHz achieved on the 56 MHz domain, 45.3 MHz on the 28 MHz domain - measured at the worst-case corner (1.71 V, 85 °C)

Every clock-domain crossing is explicitly constrained. The bus snapshot, memory arbiter and CPU clock generator are timed against real, verified multicycle relationships rather than blanket exceptions. The design closes because it is correct - not because the analyser was told to look away.

In the box:

  • SuperULA module
  • FPGA RGB adapter
  • Flat ZIF cable

Firmware files, flash generator, installation manuals

Disclaimer: 

If you are not familiar with soldering or you do not have proper tools, we can install the expansion for you. Please contact us to arrange installation.

If you are installing the device yourself, we will not take any responsibility for any damage to your hardware and the device will NOT be subject of any kind of warranty.

All files are available here: https://lothar.dscloud.biz:5001/sharing/PO3cHAho6

Firmware flashing

Before flashing the FPGA, disconnect any device attached to the edge connector.

Flashing with a device connected may:

  • Cause permanent damage to the FPGA or the level shifter,
  • Leave the system permanently reporting an external device with its own ROM connected to the ZX Spectrum, blocking configuration and/or preventing correct operation.

All you need is a regular good quality USB-C cable. Device has built in JTAG USB bridge programmer. Do not buy any external programmer, as it is not required. 

  • Download latest firmware from the link above and save it to disk.
  • Connect USB-C CABLE to Super ULA and to PC.
  • In device manager new device will be detected.
  • Follow manual in order to install drivers and download software. 
  • Power off ZX Spectrum
  • Disconnect all devices from edge connector
  • Permanently shorten JTAG_EN pins together to enable "jtagging", for example using twizzers
    JTAG_En shorted
  • Power on ZX Spectrum 
  • Flash it, FPGA used: GW1N-2B
  • Power off and remove JTAG_EN connection
  • Done

Please note: 

  • Do not use any USB hubs! Direct computer connection only!
  • Use decent as short as possible USB-C cable.
  • Disconnect all USB devices, that may interfere with jtagging (all virtual COM ports, other programmers, Arduino/Raspberry stuff etc). To be sure all works, only mice/Keyboards shall be left.
SUPERULA