Saturn Launch Vehicle Digital Computer - Software

Software

LVDC instruction words were split into a 4-bit operand field (least-significant bits) and a 9-bit address field (most-significant bits). This left it with sixteen possible operand values when there were eighteen different instructions: consequently, three of the instructions used the same operand value, and used two bits of the address value to determine which instruction was executed.

Memory was broken into 256-word "sectors". 8 bits of the operand specified a word within a sector, and the 9th bit selected between the software-selectable "current sector" or a global sector called "residual memory".

The eighteen possible LVDC instructions were:

Instruction Opcode Function
HOP 0000 Transfer execution to a different part of the program. Unlike a modern 'jump' instruction the operand address did not actually specify the address to jump to, but pointed to a 26-bit 'HOP constant' which specified the address.
MPY 0001 Multiply the contents of the memory location specified in the operand address by the contents of the accumulator register. This instruction took four instruction cycles to complete, but didn't stall program execution, so other instructions could execute before it finished. The result was left in a known register,
SUB 0010 Subtract the contents of the memory location specified in the operand address from the accumulator register.
DIV 0011 Divide the contents of the memory location specified in the operand address into the accumulator. This instruction took eight instruction cycles to complete, but didn't stall program execution.
TNZ 0100 Transfers instruction execution to the operand address specified if the accumulator contents are not zero.
MPH 0101 Multiply the contents of the memory location specified in the operand address by the contents of the accumulator register. Unlike MPY, this instruction does halt execution until the multiplication is complete.
AND 0110 Logically AND the contents of the accumulator with the contents of the memory location specified in the operand address.
ADD 0111 Add the contents of the memory location specified in the operand address to the accumulator register.
TRA 1000 Transfer execution to the memory location specified in the operand address. The address is within the current instruction sector; the 9th (residual) bit of the operand selects the syllable.
XOR 1001 Logically XOR the contents of the accumulator with the contents of the memory location specified in the operand address.
PIO 1010 Process input or output: communicate with external hardware.
STO 1011 Store the contents of the accumulator register in the memory location specified in the operand address.
TMI 1100 Transfer execution to the operand address specified if the accumulator contents are negative.
RSU 1101 Contents of the accumulator are subtracted from the contents of the memory location specified in the operand address, and the result left in the accumulator.
SHF 01 1110 Contents of accumulator are shifted by up to two bits, based on a value in the operand address. This instruction can also clear the accumulator if the operand address bits are zero.
CDS x0 1110 Change data sector.
EXM 11 1110 Transfer execution to one of eight addresses dependent on the operand address, which also specifies modifications to the operand address of the next instruction before it is executed.
CLA 1111 (Clear accumulator and) load memory.

Unlike the Apollo Guidance Computer, the software which ran on the LVDC seems to have vanished. While the hardware would be fairly simple to emulate, the only remaining copies of the software are probably in the core memory of the Instrument Unit LVDCs of the remaining Saturn V rockets on display at NASA sites.

Read more about this topic:  Saturn Launch Vehicle Digital Computer