Voyager FDS Emulator

The computer that's leaving the solar system. On purpose.

Line drawing of the Voyager spacecraft

Drawing by Rodrigo Vieira

Voyager 1 launched on September 5, 1977. Voyager 2 launched sixteen days earlier on August 20, because space mission naming conventions are not required to make sense. Both spacecraft are still operating. Voyager 1 is currently about 24 billion kilometres from Earth and has entered interstellar space. It takes over 22 hours to send a message there. If you email NASA now asking them to restart the computer, you will get the reply sometime tomorrow, assuming Voyager feels like replying.

The Flight Data Subsystem is the computer that handles all the science data. Every photograph of Jupiter's Great Red Spot. Every reading from Saturn's rings. Every measurement of the heliopause. All processed by a machine running at under 1 MHz with 8,192 words of memory, which is less than the size of this web page. It has been running for 48 years without a reboot. Your phone struggles to make it through the day.

This is the only emulator for it.


Finding the Documentation

The FDS was designed by JPL engineers in the early 1970s. The architecture memo, MJS 2.64A, is dated October 7, 1974 and was written by J. Wooddell. MJS stood for Mariner Jupiter-Saturn, which is what the programme was called before someone in public relations renamed it Voyager because that sounds better in press releases. The documentation was not updated. You work with what you have.

The problem was finding what there was to work with. These documents were not on the internet. They were not in any publicly accessible digital archive. I searched. I found nothing. I asked NASA. NASA said no. That would normally be the end of it, except I kept looking, and eventually found a blog post which referenced a Reddit comment which referenced a Hackaday article, and the Hackaday article said that the original FDS documentation had been located in the Special Collections department at Wichita State University Libraries in Kansas. The catch was that Special Collections was under renovation at the time, and the renovations did not finish until the middle of 2025.

So I waited. And when the renovations were done I emailed the university, explained what I was trying to do, and Brent Adams and the Special Collections team found the materials and made them available. A stranger in New Zealand, chasing a chain of links from a blog to Reddit to Hackaday to a filing cabinet in Kansas, asking about fifty-year-old spacecraft documentation, and the librarians said yes and went looking. The archives were not expecting anyone to come asking after half a century, but the people who look after them took it seriously, and this emulator would not exist without their help.


The Architecture

The FDS uses an 806.4 kHz clock, because apparently that was the correct frequency for leaving the solar system. The memory is 8,192 sixteen-bit words of CMOS RAM, organised into two 4K banks, because even interstellar spacecraft have to deal with memory banking. There are 36 instructions, no multiply (you use repeated addition, like it is 1974, which when this was designed it was), 128 special registers because two working registers were not enough, four DMA channels for telemetry and imaging, and a 2.5 millisecond periodic interrupt for error recovery, because space is full of cosmic rays and they are very rude about flipping bits in your memory.

The memory banking scheme deserves special mention. The FDS has 8K of memory but only 12-bit addresses, which is the sort of constraint that makes engineers either give up or get creative. JPL got creative. Four banking instructions (SETAU, SETAD, SETJU, SETJD) control whether data accesses and jumps point to the upper or lower 4K bank. Special registers always live in the lower bank because some things need to be predictable. The rest of the address space is organised chaos, which is a polite way of describing what happens when you try to address 8K of memory with 12 bits.

The four DMA channels handle telemetry home, the tape recorder, the cameras, and the planetary radio astronomy receiver. Priority goes telemetry first, pictures last. If you cannot tell Earth what you saw, you may as well have not seen it. Fair enough, really.


The Emulator

The emulator implements the full instruction set, the memory banking, the DMA channels, serial and parallel I/O, and the periodic interrupt handler. It includes an assembler and a disassembler, because the original engineers used punch cards and you get text files, which is an improvement by most measures. There is an interactive debugger where you can step through instructions one at a time, dump the CPU state, and inspect memory, which is more debugging capability than the original engineers had when they were pointing this thing at Jupiter.

It is written in C and builds with any compiler from the last forty years. If you are using something older than Voyager itself, I have questions, specifically how you got it running and whether I can see it.


Putting It on a Chip

Voyager FDS processor placed on SkyWater SKY130 130nm silicon. Each coloured rectangle is a transistor.

The emulator was the first step. The second step, which is currently in progress, is putting the Voyager FDS on actual silicon.

The design above is a synthesisable implementation of the FDS processor, mapped to SkyWater SKY130 130nm standard cells using Takahe, an open-source hardware synthesis tool I also wrote. Each coloured rectangle in that image is a transistor. The green is polysilicon. The pink is metal1. The blue is nwell. After optimisation, the entire processor fits in 58 gates and occupies 4,793 square micrometres of silicon, which is about the width of a human hair. You could fit fifty of them on a fingernail. The original filled a shoebox.

The design meets timing at 1 MHz, which is slightly faster than the original's 806.4 kHz clock. The plan is to submit it to a SKY130 shuttle run through TinyTapeout, which costs about $150 for a tile and takes twelve to sixteen weeks to come back as fabricated silicon. The computer that photographed Neptune, in the palm of your hand, on a chip you can hold up to the light.


Why This Matters

Voyager is the furthest human-made object from Earth. It has been operating for nearly half a century with computers that would be outperformed by a modern washing machine. The engineers who built this did not have the luxury of pushing a fix later. They got it right the first time. And the second time. And every time since, for 48 years, 24 billion kilometres from the nearest reboot.

When Voyager 1 crossed into interstellar space in 2012, the FDS was there processing the data. When Voyager 2's heater failed and it got too cold, the FDS kept running. When cosmic rays flip bits in memory, the 2.5 millisecond interrupt handler catches the errors. When the radioisotope thermoelectric generators finally run out sometime in the 2030s, the FDS will still be working. It just will not have power.

Voyager's last software update was in 1990. Thirty-five years of continuous operation, 24 billion kilometres from the nearest patch. We have faster computers now. They require weekly security patches and crash if you look at them funny.

We thought someone should be able to hold that computer in their hand.


Acknowledgements

Thank you to Brent Adams and the Special Collections team at Wichita State University Libraries. They responded to a stranger's email asking about Voyager documentation, found the materials, and made them available. This emulator would not exist without their help.

The source documents are JPL memos MJS 2.64A (Wooddell, October 1974) and MJS77-4-2006-1A (1977), along with scanned materials from the JPL archive catalogued under MS 87-08 B37 FF41 through FF43. The instruction set is from a United States government document and is in the public domain. The implementation is original.

The source is on GitHub.


Get in Touch

zanehambly@gmail.com

GitHub

Response time faster than a round-trip signal to Voyager, which is currently running at 44 hours and increasing by 61,000 kilometres per day. Has opinions about 806.4 kHz clock selection. Will explain memory banking until you ask me to stop.


When we wake up brushed by panic in the dark our pupils grope for the shape of things we know. Photons loosed from slits like greyhounds at the track reveal light's doubleness in their cast shadows that stripe a dimmed lab's wall—particles no more— and with a wave bid all certainties goodbye. For what's sure in a universe that dopplers away like a siren's midnight cry? They say a flash seen from on and off a hurtling train will explain why time dilates like a perfect afternoon; predicts black holes where parallel lines will meet, whose stark horizon even starlight, bent in its tracks, can't resist. If we can think this far, might not our eyes adjust to the dark?

Relativity — Sarah Howe