The 2024 Voyager 1 FDS Memory Rescue by Gonzaga, Rainer D.; Gonzales, Aaron James S.; Manalang, Kennese Ross F.; Marcaida, Duncan Joseph B.; Ramos, Richmond Jose G.

The 2024 Voyager 1 FDS Memory Rescue

by Gonzaga, Rainer D.; Gonzales, Aaron James S.; Manalang, Kennese Ross F.; Marcaida, Duncan Joseph B.; Ramos, Richmond Jose G. ・ 10 minute read
Memory
Block
Blast

Reallocating Voyager 1's Fragmented Memory Map

Discover how NASA engineers leveraged 1970s hardware constraints, analyzed primitive memory maps, and executed a remote software reallocating workaround to rescue humanity's most distant emissary.

What is Voyager 1?

OBJECT DESIGNATION: VOYAGER 1 · NASA/JPL · LAUNCHED 1977.09.05

On September 5, 1977, NASA launched Voyager 1, a robot space probe with the primary goal of studying the planets in our solar system.

After almost six decades of travel, Voyager 1 still remains the farthest human-made object ever to leave Earth.

Voyager 1 is the farthest human-made object ever to leave Earth—currently drifting through interstellar space at roughly 17 kilometers per second, placing it over 15 billion miles from the Sun.

Voyager 1 Probe

In 2023,
Something Went Wrong...

The Voyager was sending gibberish data from outerspace!

What happened and why was it difficult to fix?

What Goes On
Inside Voyager 1?

Understanding Computer Memory

Before we can diagnose what broke inside Voyager 1, we need to speak the same language as the engineers who fixed it. That language is the language of computer memory: how data, code, and instructions are defined, addressed, and accessed.

What is Computer Memory?

Computer memory serves as the system's active workspace, holding the instructions and data required for immediate operation. Unlike modern computers with vast storage, Voyager 1’s 1970s hardware relies on a tiny, fixed set of memory slots to handle every calculation.

Without this functional memory space, the spacecraft loses its operational instructions and data, effectively rendering it lifeless.

If memory stores everything a computer needs, how are instructions found in memory?

Memory Addressing

0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
0x0A
0x0B
0x0C
0x0D
0x0E
0x0F
0x10
0x11
0x12
0x13
0x14
0x15
0x16
0x17
0x18
0x19
0x1A
0x1B
0x1C
0x1D
0x1E
0x1F
0x20
0x21
0x22
0x23
0x24
0x25
0x26
0x27
0x28
0x29
0x2A
0x2B
0x2C
0x2D
0x2E
0x2F

Processor read

ADDRESS

0x00

DATA

0x7F

Every piece of information in a computer is stored in a specific location called a memory address. Instead of searching blindly for what it needs, the computer goes directly to this address, just like going to the library and fetching a book from a specific shelf.

This acts as a catalogue for the processor to look for data and execute instructions.

Every instruction has an address, but what happens when some of those addresses suddenly become unavailable?

Memory Mapping

While addressing assigns data to individual slots, memory mapping defines how those slots are grouped into dedicated regions for specific jobs. Memory mapping allows computers to allocate specific memory blocks for storing data and specific software instructions. These pieces of data are mapped to memory addresses; this is how the CPU knows where to find them.

The computer doesn't actually try to check if the code still works; it just runs whatever is sitting at that address.
Because the computer can't tell the difference between real and corrupted instructions, a broken memory chip is incredibly dangerous, as it will completely change how the entire system behaves.

Fault scan

CORRUPTED BLOCKS

00

STATUS

NOMINAL

0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
0x0A
0x0B
0x0C
0x0D
0x0E
0x0F
0x10
0x11
0x12
0x13
0x14
0x15
0x16
0x17
0x18
0x19
0x1A
0x1B
0x1C
0x1D
0x1E
0x1F
0x20
0x21
0x22
0x23
0x24
0x25
0x26
0x27
0x28
0x29
0x2A
0x2B
0x2C
0x2D
0x2E
0x2F

But how does the computer actually know which memory address to read next?

The Instruction Pointer

Every computer has a memory slot called the Instruction Pointer (IP). Its only job is to point to the next instruction the computer needs to run. After the computer reads and does what the instruction says, the IP automatically moves to the very next line. Essentially, the order of instructions was:

  1. 1Read the instruction at line 100.
  2. 2Do what line 100 says.
  3. 3Move the bookmark to line 101.
  4. 4Repeat.

Now that we know about computer memory, mapping, addressing, and accessing, let’s go back to what went wrong in 2023…

Why couldn’t they understand the data coming from the space probe?

Root Cause: A Dead Chip

After months of testing, engineers found the problem: A piece of the spacecraft’s memory got physically damaged and corrupted. But the IP didn’t know that. When the computer started reading instructions from the broken chip, the supposed instructions weren’t executing—causing the discrepancy in the message being sent back to Earth.

FDS Memory Chip Board

This specific chip is the Flight Data Subsystem (FDS) which holds the code that packages up all of Voyager 1’s science data and prepares it to be sent back to Earth.

When the computer started reading data from the broken chip, the supposed instructions weren't executed—causing the discrepancy in the message being sent back to Earth.

The Mechanism That Stitched Voyager 1 Back Together

It’s impossible to send a mechanic 15 billion miles into deep space to swap out a broken part. The only option was a remote software repair. Since signals coming from Earth to the spacecraft take a long time to travel back and forth, the code had to work on the first try as trial and error would be too time-consuming.

Since there wasn't a contiguous memory space large enough to hold the rescued code, the engineers had to get creative. They chopped the instructions into smaller fragments and carefully tucked them into unused memory blocks across the computer's remaining working memory.

To do that, they had to implement specific jump commands that explicitly told the computer where to find the next instruction. By mapping out every step, they made sure the system could run the split code and get it working again.

Let’s take a closer look at the concept behind NASA’s solution…

The Jump Instruction

A jump instruction (JMP) is a command that directly overwrites the Instruction Pointer with a new address. Instead of advancing sequentially to the next chunk of memory, the processor instantly redirects its execution focus to whatever address the JMP specifies.

It allows the processor to go back to or skip to another part of the system’s code.

This is the mechanism NASA engineers used to bridge fragmented code across non-contiguous memory regions.

Losing part of memory doesn't always mean losing the entire program. Sometimes, there's another solution.

NASA's Solution

0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
0x0A
0x0B
0x0C
0x0D
0x0E
0x0F
0x10
0x11
0x12
0x13
0x14
0x15
0x16
0x17
0x18
0x19
0x1A
0x1B
0x1C
0x1D
0x1E
0x1F
0x20
0x21
0x22
0x23
0x24
0x25
0x26
0x27
0x28
0x29
0x2A
0x2B
0x2C
0x2D
0x2E
0x2F

Code Reallocated

Now it's your turn
to solve the problem!

With your newfound knowledge of computer architecture, it's your turn to fix the problem NASA faced. Step into the role of an engineer and reallocate the memory blocks below.

Voyager 1 continues its journey through interstellar space today. Its recovery was possible because engineers leveraged how computers are designed to process memory and execute instructions.

This repair proves that when hardware fails, knowledge prevails.

Earth

References