Voyager Computer Command System is a LICENSE licensed CATEGORY [[ISA|instruction set]] developed by [[NASA]] at [[JPL]]. - Specification - Documentation > QUOTE # Notability ## Implementations - Viking 1 Orbiter (precursor) - Viking 2 Orbiter (precursor) - Voyager 1 Probe - Voyager 2 Probe - NASA Simulation Software (presumably) # Instruction Set ## Complexity The CCS is a custom-designed 18-bit processor. Instructions are 18 bits wide, with 12 bits used for direct addressing and the remaining 6 bits used for the operation. This means the system only supports 64 operations. It is fundamentally very simple and low complexity. ## Features ### Registers > > - The accumulator was an 18-bit register used as a source of one operand and destination of the result of arithmetic and logical operations. In addition, the accumulator was used as a single-word buffer for data transmission during input/output operations. > - The program counter held the address of the instruction to be fetched for the program which was running. > - The link register was used to hold subroutine return addresses. Whenever a successful transfer occurred, the program counter was loaded into the link register; thus, the return address to the program which was transferred was saved. > - The condition code was a four-bit register which indicated various kinds of status information. The condition code was set by all arithmetic and logical instructions except increment address. > - The memory address register was used to hold an address when memory was to be accessed. The most significant two bits were used to determine access checking as determined by jumper wires. > - The interrupt, mask, and dump register was used together to determine the highest priority interrupt awaiting processing. The actual hardware implementation was organized as four groups of eight interrupts. Functionally, however, the interrupts were considered as two groups of sixteen interrupts. > - The memory data register was used to hold a memory data word which was read from and written into the memory in parallel. This register was used as a buffer register between the processor and memory. > - The instruction register was used to hold the six OP code bits for instruction decoding and two control bits. The OP code was loaded into six bits of the instruction register in parallel at bit time C or bit time E of an execute instruction. \- Viking orbiter design document, bullet points added by me ### Interrupts **TABLE 31.- CCS INTERRUPTS** I* Internal error 2 Accelerometer pulses 3* i00 PPS 4 Tape index increment DTR A 5 Tape index decrement DTR A 6 Tape index increment DTR B 7 Tape index decrement DTR B 8* ] PPS 9* External level 1 i0* Zero reached by interrupts 2-8 II FDS low-rate fame start 12 FDS low-rate bit sync 13* OU 1 TM available 14* OU 2 TM available 15 Command initiate - change in lock (primary) 16 Command sync - bit timing (primary) 17* Command error (secondary) 18 Command initiate - change in lock (secondary) 19 Command sync - bit timing (secondary) 20* Reject 21" Demand read 22* Initiate read 23* Output unit available 24 VISA frame start 25 VIS B frame start 26* 1 PPH 27* External level 2 28* External level 3 29* External level 4 30* External level 5 31 BOT/EOT DTR A 32 BOT/EOT DTR B \* Internally generated signal. ### Memory 4096 18-bit words of addressable memory, freely configurable via external hardware between read only, write protected, or read/write. "Write protected" memory required the use of a special instruction in order to write that region, making it a kind of EEPROM. ### OP Codes > The processor instruction repertoire consisted of 64 instructions. There were 16 immediate instructions, 28 direct instructions, 16 indirect instructions, 2 I/O instructions, and the execute and wait instruction. \- Viking orbiter design document The opcode list is a reconstruction as I have as of yet not found a full listing anywhere. | Mnemonic | Meaning | | -------- | ------- | | WAIT | | | EXECUTE | | | | | # History ## Viking Program Voyager's CCS was based on the earlier Viking CCS used for the Viking program's orbiters launched in 1975 which successfully enters Mars orbit and with Viking 1's orbiter surviving for over 4 years (after running out of attitude control fuel) and Viking 2's orbiter lasting a little over a year (premature failure due to a fuel leak). > The Viking Orbiter Computer Command Subsystem was more sophisticated than the earlier systems in that it was a fully redundant subsystem with the capability of knowing what did happen as well as what should have happened. The CCS was configured as a block-redundant computer. Each half of the subsystem was an independent special purpose computer containing a power supply, processor, memory, and output unit. All inputs were applied to both halves of the CCS, with either half being capable of providing all mission requirements. The two processors operated asynchronously and were capable of being programmed to perform different functions simultaneously. The utilization of a dual computer provided both redundancy and extended command capability. > >The function of the CCS was to command the spacecraft. Commands were issued in a sequence according to the programs stored in the CCS Memory. The CCS consisted of two processor units, two output units, two coded command buffer units, two discrete command buffer units, and two power supplies. The CCS Memory consisted of a wire memory stack with associated read/write electronics to store 4096 18- bit words. > The construction and manufacture of the CCS was contracted out to General Electric, Aerospace Electronic Systems Department, Utica, New York. The construction and manufacture of the CCS Memory was contracted out to SCI Systems, Inc. (formerly Space Craft, Inc.) of Huntsville, Alabama. \- Project Viking Computer Command Subsystem Document Collection description document The orbiter design document credits a Carl R. Pearson as the designer of the CCS but I have had a hard time finding much information on him aside from the Viking program documentation. The Viking program's processors operated at 11 kHz based on a 2.4 kHz external clock. It supported 32 general purpose inputs, though the Viking orbiters only used 24 of them. > The Viking Command Computer software structure appears dif- ferent from others described in this volume because of the apparent lack of an operating system or executive program. \- Computers in Spaceflight > Viking Orbiter software had to be written in an assembler, which fortunately had relocatable addresses, simplifying the maintenance task. The 64 instructions were mostly common to other computers, but there was no multiply or divide. There were two sets of loads, stores, increments, and subroutine calls: one used during independent operation and one aimed at dual operation, so that the two memories could be kept equivalent. \- Computers in Spaceflight ## Voyager Program > Voyager employs three dual-redundant computer systems per spacecraft. The first, the CCS, is nearly identical to that flown on Viking, performing sequencing and spacecraft health functions along with new ones necessitated by the addition of the other computers. \- Computers in Spaceflight > The eventual hardware functional requirements document reads like a copy of the Viking document. I/0 interfaces with the new Flight Data System and Attitude Articulation and Control System computers are the major differences. Software such as the command decoder, certain fault processing routines, and others are fundamentally identical to Viking. Here again, differences are related to the new computers. All command changes and memory loads for the other computers are routed through the CCS. This required the addition of the routine MEMLOAD. Another routine, AACSIN, was added to evaluate power codes sent from the Attitude Control computer as a "heartbeat" to inform the CCS of its health. \- Computers in Spaceflight > Guidance and Control grudgingly accepted the CCS computer on the condition it be speeded up. Requirements for active control during the kick stage burn meant that real-time control programs would have to be written to operate within a 20-millisecond cycle, roughly three times faster than the command computer. > ... > Guidance and Control asked for a 1-megahertz clock speed but wound up getting about three quarters of that \- Computers in Spaceflight The most immediate above section appears to have errors but is reproduced faithfully from the source document. "Milliseconds" should almost certainly be "microseconds", and "roughly three times" should probably be "roughly four times" based on what is known about the Viking CCS. If we make those corrections they're saying that they need a minimum of 500 mHz to maneuver and requested double that, which is very understandable to ensure proper headroom. However, hitting 1 mHz from a system designed for 11 kHz is a huge ask. Hitting anywhere near 750 kHz would still be massively impressive. According to a 2016 FOIA request by Allan Lasser, the software the deployed on Voyager 1 in 2016 was written under contract with JPL and Caltech, and Caltech retains the rights to the software. The processors were not monolithic integrated circuits but discrete designs based on Texas Instruments 7400 TTL logic chips (citation needed for primary source document). # Footnotes # References - https://www.allaboutcircuits.com/news/voyager-mission-anniversary-computers-command-data-attitude-control/ - https://www.guinnessworldrecords.com/world-records/635980-longest-period-of-continual-operation-for-a-computer - https://fortran-lang.discourse.group/t/a-patch-was-sent-to-voyager-2-yesterday/6670/15 - https://softwareengineering.stackexchange.com/questions/328608/code-development-process-for-voyager-mission - https://www.wired.com/2013/09/vintage-voyager-probes/ - https://www.muckrock.com/foi/united-states-of-america-10/voyager-command-analysis-software-source-code-28641/ - https://www.muckrock.com/foi/united-states-of-america-10/caltechjpl-voyager-contract-28949/ - https://cdn.muckrock.com/foia_files/2016/11/15/r_NNN12AA01C_Final.pdf - https://arc.aiaa.org/doi/pdf/10.2514/6.2016-2415 - https://arstechnica.com/civis/threads/humanity%E2%80%99s-most-distant-space-probe-jeopardized-by-computer-glitch.1498717/page-4 - [Computers in Spaceflight: The NASA Experience](https://ntrs.nasa.gov/citations/19880069935) (`19880069935` `NASA-CR-182505`) - [Voyager - The flying computer center](https://web.archive.org/web/20230223062948/https://history.nasa.gov/computers/Ch6-2.html) (Chapter 6 of the above, archived) - [remaking of a 1988 NASA book](http://gedenkt.at/blog/computers-spaceflight/) (OCR and rebuilding the PDF) - [cleaned version of the book](https://github.com/01mf02/computers-spaceflight) - https://specialcollections.wichita.edu/collections/ms/87-08/87-8-a.html - https://www.jpl.nasa.gov/news/voyager-1-fires-up-thrusters-after-37-years - https://www.vogons.org/viewtopic.php?t=55545&start=60 - https://www.eejournal.com/article/voyagers-1-and-2-take-embedded-computers-into-interstellar-space/ - https://www.cpushack.com/space-craft-cpu.html - https://voyager.jpl.nasa.gov/mission/science/thirty-year-plan/ ## Viking Program - https://drive.google.com/file/d/1TXcjorm_AmDHsqgsXg8-1e4m8PDBWwgp/view - https://en.wikipedia.org/wiki/Viking_program - https://ntrs.nasa.gov/api/citations/19810001593/downloads/19810001593.pdf - https://ntrs.nasa.gov/api/citations/19810001592/downloads/19810001592.pdf - https://ntrs.nasa.gov/citations/19880069935 - https://www.retrotechnology.com/memship/viking_software.txt - Source of the 11 kHz claim where it says the clock cycle was 88 microseconds