The art and engineering of Silpheed
FABIEN SANGLARD'S WEBSITE
CONTACT RSS DONATE
June 1, 2025
The art and engineering of Silpheed
The 90's was a decade of considerable improvement in the world of video-game consoles[1]. Each new model brought advanced processing power and better graphics without compromise.
The mid-90s emergence of CD-ROM drives however was an oddity. While the 640 MiB storage was 320x a cartridge capacity[2], the access time (800ms[3]) and bandwidth (single-speed 150 KiB/s) were an eye-watering 4,000,000x and 35x slower.
The Mega-CD was Sega's idea to bring CD-ROM to its Genesis console. Nearly 200[4] titles were produced for the platform. A few great games like Sonic CD, Snatcher, Final Fight CD, and RPGs came out. But an endless series of titles relying heavily on Full Motion Video (FMV) gave Sega's add-on an infamous reputation (Night Trap, Prize Fighter, Slam City, Corpse Killer, Supreme Warrior, WireHead, and A/X-101).
And then, there is Silpheed . Armed with exquisite artistic taste and an engine capable of jaw-dropping animation, it made the press go wild[5][6]. Players pondered what was real-time 3D and what was pre-calculated[7]. It received praises which, to this day, persist[8][9].
For those still unimpressed, keep in mind these near-fullscreen cutscenes run on a 12.5MHz m68k CPU, use 16 colors, and consume 150 KiB/s. With 16-bit 16kHz music, the 15fps video stream was left with a mere 8 KiB per frame.
I spent the past two weeks reverse engineering the FMV format in my spare time. That was a departure from how I normally work since I did not write a single line of code. I will likely write something about my A.I framework (and opensource it) next month. But I can already tell this is an overall pleasant way to work.
The following is what I came up with. And if you want to see all of the cutscenes and gameplay background videos to get accustomed to the topic, here is a storyboard I created with the tools I designed (I can't really say I "wrote" them).
Sega-CD internals 101<br>Before we dive into the optimizations and tricks that made Silpheed video format so efficient, we need to learn about how a Sega Genesis and a Mega-CD work together.
GENESIS │ MEGA-CD<br>┌──────────────────────┐ │ ┌───────────┐ ┌──────────┐<br>│ MC68000 7.67 MHz │ │ │ WORD RAM │ │ MC68000 │<br>│ │ ┌───┴──────┐ │ 256 KB │ │ │<br>│ 64 KB RAM ◄──┤Expansion ├────────►───────────┤ │ 12.5 MHz │<br>│ │ │ Port │ │PROGRAM RAM│ │ │<br>│ 8 KB Audio RAM (Z80) │ └───┬──────┘ │ 512 KB │ │ │<br>└──────────┬───────────┘ │ └─────┬─────┘ └─────┬────┘<br>│ │ └──────────────┬─────┘<br>┌─────┴──────────┐ │ │<br>│ │ │ ┌───────┐ ┌────┴────┐<br>┌────▼──────┐ ┌─────▼─────┐ │ │ Ricoh │ │ ASIC │<br>│ VDP │ │ Z-80 │ │ │ PCM ├─────┤ GFX │<br>│ ┌───────┐ │ │ YM2612 │ │ └───┬───┘ └────┬────┘<br>│ │64KVRM │ │ │ SN76489 │ │ │ │<br>│ └───────┘ │ │ │ │ │ │<br>└─────┬─────┘ └──────┬────┘ │ │ │<br>│ │ │ │ ┌───────┴──────┐<br>│ │ ┌──┴──────┐ ┌────▼────┐ │ CD-ROM │<br>│ └───┤RCA Cable├─────────► MIXER ◄─┤ DRIVE │<br>│ └──┬──────┘ └────┬────┘ └──────────────┘<br>│ │ │<br>┌────▼────┐ │ │<br>│ TV ◄──────────────────┼─────────────────────┘<br>└─────────┘ │
Adding a Mega-CD turns the machine into two systems running in parallel. The Mega-CD side has PCM and CD playback, connected directly to the mixer[10]. There is an ASIC with graphics acceleration (rot/scal/misc) to rival games like Mario Kart. The two systems communicate via shared memory (the expansion port) and analogic audio mixing.
Understanding how this thing works made me respect Mega-CD developers even more than before. This looks like a nightmare to deal with, especially synchronization.
The architecture of Silpheed
A Mega-CD system still renders to the TV with three layers. Two of them are made of tiles and called backgrounds (A and B) while one is the foreground containing sprites.
The Sub-CPU m68k writes the tiles and tilemap for background B. Meanwhile the main CPU takes care of "drawing" background A containing the HUD and the foreground sprite layer.
The Sub-CPU uses a double-buffer system where it renders to the Word RAM in L1 mode. While one buffer is fed to the VDP by the main CPU, it renders the next frame into the other buffer.
On the audio side, non-interactive cutscenes rely only on the Ricoh from the Mega-CD to generate PCM quality music. During interactive sequences, the Ricoh is sporadically used for PCM audio samples while the music is done via the YM2612.
Background A<br>Background B<br>Foreground (Sprites)
The original Genesis (Model 1) audio path is incredibly convoluted. The output of the Genesis, its front jack port, must physically be connected to the RCA input in the back of the Sega-CD via a "mixing cable". The Sega-CD then mixes the line-in signal with its own CD-DA + PCM signal. The result is sent direclty to the TV via another RCA cable!
Good design decisions<br>Most FMV games looked bad because developers followed a top-down approach trying to cram a real movie into a tiny CD-ROM using a weak CPU. To do so, they had to...