Return to Video

34C3 - The Ultimate Apollo Guidance Computer Talk

  • 0:00 - 0:15
    34C3 preroll music
  • 0:15 - 0:21
    Herald: The following talk is about a very
    relevant piece of technological legacy of
  • 0:21 - 0:28
    our human race. The first piece of
    computer that landed on our moon and
  • 0:28 - 0:34
    actually it became a metric. People
    started to compare other architectures,
  • 0:34 - 0:41
    other computers in volumes of multiples of
    processing speed of this computer. It's
  • 0:41 - 0:46
    rocket science, but it's even harder: it's
    computer rocket science. So I'm very happy
  • 0:46 - 0:51
    to have Christian Hessmann, or Hessie, on
    stage who is actually a rocket scientist.
  • 0:51 - 0:53
    And for the ...
    laughter
  • 0:53 - 0:58
    ... for the computer part we have Michael
    Steil who is the founder of the Xbox Linux
  • 0:58 - 1:03
    project and has gathered with this project
    and many others lots and lots of
  • 1:03 - 1:07
    experience around architectures of
    computers. So please give a warm round of
  • 1:07 - 1:10
    applause for the Ultimate
    Apollo Guidance talk!
  • 1:10 - 1:18
    applause
  • 1:18 - 1:23
    Michael Steil: Welcome! Is this on?
    Can you all hear me? Yes.
  • 1:23 - 1:27
    Welcome to the Ultimate Apollo Guidance
    Computer Talk, a.k.a. a comprehensive
  • 1:27 - 1:32
    introduction into computer architecture.
    And operating systems. And spaceflight.
  • 1:32 - 1:34
    laughter
  • 1:34 - 1:38
    My name is Michael Steil ...
    Christian: ... and I'm Christian Hessmann.
  • 1:38 - 1:42
    Michael: This talk is number six in a series
    by various people. The idea is to explain as
  • 1:42 - 1:46
    much as possible about a classic computer
    system in 60 minutes. The Apollo Guidance
  • 1:46 - 1:51
    Computer AGC is a digital computer that
    was designed from scratch specifically for
  • 1:51 - 1:55
    use on board of the Apollo spacecraft to
    support the Apollo moon landings between
  • 1:55 - 2:02
    1969 and 1972. Developed at MIT between
    1961 and 1966 a total of 42 AGCs were
  • 2:02 - 2:07
    built at a cost of about $200,000 each.
    The base clock is about one megahertz,
  • 2:07 - 2:11
    all data is 15 bits, and there are two
    kilowords of RAM and 36 kiloword ROM,
  • 2:11 - 2:16
    words of ROM. It's about the size of
    a large suitcase, weighs 32 kilograms and
  • 2:16 - 2:22
    consumes about 55 watts. Its user
    interface is a numeric display and keyboard.
  • 2:22 - 2:27
    Some historical context: In the
    mid 1960s you couldn't just take
  • 2:27 - 2:30
    an off-the-shelf computer and
    put it into a spacecraft.
  • 2:30 - 2:32
    The first mini computers were
    the size of a small fridge -
  • 2:32 - 2:36
    too heavy, to power-hungry and too slow
    for real-time scientific calculations,
  • 2:36 - 2:40
    even though the industry had come a long
    way since the previous decade.
  • 2:40 - 2:43
    Already 10 years later
    though, microcomputers with highly
  • 2:43 - 2:47
    integrated circuits started outclassing
    the AGC Hardware in many regards.
  • 2:47 - 2:50
    There are many reasons that make the AGC
    especially interesting:
  • 2:51 - 2:56
    The architecture is very 60s and feels
    very alien to us today,
  • 2:56 - 2:58
    the hardware is very innovative for its time.
  • 2:58 - 3:02
    It has some very interesting
    and unusual peripherals.
  • 3:02 - 3:05
    Its operating system was revolutionary
    for its time and
  • 3:05 - 3:08
    the mission software has all the bits to
    - with the right hardware attached -
  • 3:08 - 3:09
    fly you to the moon.
  • 3:11 - 3:13
    C: In the Apollo program, the Apollo
    guidance computer was used
  • 3:13 - 3:17
    in two unmanned test missions, where
    it was remote control from the ground,
  • 3:17 - 3:21
    and three manned test missions, and in
    the seven manned landing missions.
  • 3:21 - 3:24
    Astronauts hated the idea of giving up any
    control to a computer,
  • 3:24 - 3:27
    they wanted to be in charge.
    And while as a fallback,
  • 3:27 - 3:29
    most of the mission could also
    be flown manually,
  • 3:29 - 3:31
    the mission planners got their way.
  • 3:31 - 3:33
    To understand the purpose
    and the responsibilities of the
  • 3:33 - 3:36
    Apollo Guidance Computer, we need to
    first look at the Apollo mission.
  • 3:36 - 3:39
    The core strategy of the Apollo program
    was, instead of landing
  • 3:39 - 3:42
    the complete spacecraft on the moon,
    for which an extremely large rocket
  • 3:42 - 3:45
    would have been required, to only
    land a much smaller lander
  • 3:45 - 3:49
    while the larger part with the fuel
    for the way back stays in orbit.
  • 3:49 - 3:52
    So the Apollo spacecraft can be
    separated into the lunar module,
  • 3:52 - 3:56
    the command module and the service module.
    The Saturn 5 rocket launches it and
  • 3:56 - 3:59
    three astronauts from Cape Kennedy
    into Earth orbit.
  • 3:59 - 4:03
    By accelerating at the right time the
    translunar injection moves the spacecraft
  • 4:03 - 4:07
    into a so-called free return orbit,
    but just coasting it would travel
  • 4:07 - 4:09
    around the moon and back to earth.
  • 4:09 - 4:12
    Right at the beginning of this three-day journey
    the command and service module
  • 4:12 - 4:17
    extracts the lunar module and docks with it.
    By braking on the far side of the moon the
  • 4:17 - 4:22
    spacecraft enters a lunar orbit. After two
    of the astronauts have climbed into the
  • 4:22 - 4:27
    lunar module, and after undocking, the
    lunar module breaks - this is called
  • 4:27 - 4:33
    powered descent - and lands.
  • 4:33 - 4:36
    Applause
  • 4:36 - 4:40
    After taking off again, the lunar module
    rendezvous with the command and service
  • 4:40 - 4:43
    module and the two astronauts from the
    lunar module climb into the command module
  • 4:43 - 4:47
    and the lunar module is jettisoned. The
    remaining command and service module
  • 4:47 - 4:51
    accelerates at the far side of the
    Moon for trajectory towards Earth.
  • 4:51 - 4:55
    For entry, only the command module remains.
    By the way, these excellent visualizations
  • 4:55 - 4:58
    are from Jared Owen's "How the Apollo
    spacecraft works" videos,
  • 4:58 - 5:01
    which we can highly recommend.
  • 5:01 - 5:04
    The command and service
    module and the lunar module each contained
  • 5:04 - 5:07
    one a AGC. It was the same hardware,
    but attached to partially different
  • 5:07 - 5:11
    I/O devices, and with the software
    adapted for the specific spacecraft.
  • 5:11 - 5:15
    The astronauts interact with them through
    the display and keyboard units, which are
  • 5:15 - 5:19
    mounted alongside these
    hundreds of switches.
  • 5:19 - 5:23
    The computer's responsibilities
    during the mission are to track
  • 5:23 - 5:26
    the position and speed, the so called
    state vector of both spacecraft,
  • 5:26 - 5:30
    stabilize the spacecraft's attitude,
    calculate the control engine burns and
  • 5:30 - 5:35
    monitor or control the
    Saturn V during launch.
  • 5:37 - 5:40
    M: In order to understand how the Apollo
    guidance computer does all this,
  • 5:40 - 5:44
    we'll look at its architecture, the
    hardware implementation, some of its
  • 5:44 - 5:48
    interesting peripherals, the system
    software as well as ...
  • 5:48 - 5:50
    the system software as well as
    the mission software.
  • 5:50 - 5:55
    The architecture of the
    AGC can be described as a Von Neumann
  • 5:55 - 5:59
    accumulator machine with 15 bit one's
    complement big-endian arithmetic.
  • 5:59 - 6:03
    So we'll talk about the instruction set, the
    arithmetic model and instruction encoding
  • 6:03 - 6:07
    as well as the memory model, I/O
    operations and counters, and finally the
  • 6:07 - 6:12
    interrupt model. Machine code instruction
    sets vary widely. The instruction set of a
  • 6:12 - 6:14
    modern ARM processor, which is mainly
    optimized for runtime performance
  • 6:14 - 6:19
    consists of about 400 instructions. Subleq
    is a language mostly of academic interest,
  • 6:19 - 6:22
    that shows that a single instruction can
    be enough to solve the same problems as
  • 6:22 - 6:26
    all other turing-complete languages. While
    a more complex constructions, that can
  • 6:26 - 6:31
    achieve higher code density and contribute
    to higher performance, it also generally
  • 6:31 - 6:35
    means that the CPU will be drastically
    more complex. A computer from the early
  • 6:35 - 6:38
    1960s consisted of only a few thousand
    transistors as opposed to today's
  • 6:38 - 6:43
    billions, which is why this is the sweet
    spot for the AGC. 36 instructions provided
  • 6:43 - 6:47
    just about the performance that was
    required for the mission. These are the 36
  • 6:47 - 6:51
    instructions: some load and store
    instructions, arithmetic and logic,
  • 6:51 - 6:56
    control flow instructions, I/O instructions
    and instructions for dealing with interrupts.
  • 6:56 - 7:00
    The memory model is the cornerstone
    of the instruction set. Memory consists of
  • 7:00 - 7:05
    4096 cells, numbered in hexadecimal
    000 through FFF. Each cell contains a
  • 7:05 - 7:11
    15 bit word, numbered between 0 and
    7FFF. Almost all changes in data -
  • 7:11 - 7:16
    in memory go through a 15 bit accumulator,
    also called the A register. A program can
  • 7:16 - 7:19
    copy words between the accumulator and a
    memory cell, but also add, subtract,
  • 7:19 - 7:23
    multiply and divide values, as they are
    moved around. The data in memory can have
  • 7:23 - 7:27
    many meanings, depending on how it is
    interpreted. These values may represent
  • 7:27 - 7:30
    integers, while those three words are
    meant to be decoded as machine code
  • 7:30 - 7:33
    instructions. Code and data in a single
    address space make the AGC a so-called Von
  • 7:33 - 7:38
    Neumann machine. The CPU's program counter
    PC always holds the address of the
  • 7:38 - 7:42
    instruction to be executed next. The
    'load' instruction copies the contents of
  • 7:42 - 7:46
    a given memory cell into the accumulator.
    The PC goes on to the next instruction.
  • 7:46 - 7:50
    The 'add' instruction adds contents of a
    given memory cell to the accumulator, and
  • 7:50 - 7:53
    the 'store' instruction copies the value
    in the accumulator into memory at a given
  • 7:53 - 7:58
    location. The generalized version of these
    instructions we just saw, use K as a
  • 7:58 - 8:03
    placeholder for a memory address as an
    argument. These are cards that are quick
  • 8:03 - 8:08
    reference of instructions. This is the
    generic syntax of the instruction, a short
  • 8:08 - 8:11
    description, the exact operations in
    pseudocode - this one takes a memory
  • 8:11 - 8:15
    address k and adds it to a, the
    accumulator - the encoding of the
  • 8:15 - 8:20
    instruction in memory, and the number of
    clock cycles. The original syntax is the
  • 8:20 - 8:23
    name the original designers gave to the
    instruction. For this talk I have chosen a
  • 8:23 - 8:27
    more modern syntax, here on the right,
    which makes it much more easier, much
  • 8:27 - 8:31
    easier to describe the CPU both to people
    with and without a background in machine
  • 8:31 - 8:35
    programming. Let's have a look at the
    instruction set in detail. Here's an
  • 8:35 - 8:39
    example of the load instruction. Load a
    comma indirect two zero zero. On the left
  • 8:39 - 8:43
    you see the set of registers of the AGC.
    Most operations work with the accumulator,
  • 8:43 - 8:47
    so we will be ignoring the other registers
    for now. While executing this instruction,
  • 8:47 - 8:51
    the CPU looks at memory at location two
    zero zero, reads its contents and copies
  • 8:51 - 8:56
    it into the accumulator. This is the store
    instruction "store", a load indirect two
  • 8:56 - 8:59
    zero zero comma A. Like with all
    instructions the first argument is the
  • 8:59 - 9:03
    destination - memory - the second one the
    source - the accumulator. It looks up
  • 9:03 - 9:06
    address two zero zero in memory and copies
    the contents of the accumulator to that
  • 9:06 - 9:10
    cell. There's also an exchange
    instruction which can atomically swap the
  • 9:10 - 9:15
    contents of the accumulator and a memory
    cell. The 'add' instruction will look up
  • 9:15 - 9:18
    the contents of a given memory address and
    add it to the contents of the accumulator
  • 9:18 - 9:23
    and store the result back into the
    accumulator. And there's a 'subtract'
  • 9:23 - 9:27
    instruction. It takes the contents of
    memory dest and subtracts it from the
  • 9:27 - 9:31
    content of the accumulator and stores the
    result back into the accumulator.
  • 9:31 - 9:34
    The result of every subtraction can be
    negative, so we need to talk about how
  • 9:34 - 9:39
    negative numbers are expressed on the AGC.
    Let's look at just 4 bit numbers.
  • 9:39 - 9:45
    4-bit unsigned integers can express values
    from 0 to 15 with sign and value encoding
  • 9:45 - 9:48
    the uppermost bit corresponds to the sign,
    and the remaining 3 bits represent the
  • 9:48 - 9:53
    absolute value. Consequently, there are
    separate values for plus 0 and minus 0.
  • 9:53 - 9:56
    This encoding is hard to work with, since
    the 0 transitions need to be special
  • 9:56 - 9:59
    cased. One's Complement encoding has the
    order of the negative numbers reversed.
  • 9:59 - 10:04
    The 0 transitions are simpler now, but
    there's still two representations of 0.
  • 10:04 - 10:07
    Modern Two's Complement encoding only has
    a single encoding for 0, and it's fully
  • 10:07 - 10:12
    backwards compatible with unsigned
    addition and subtraction. In the 1960s,
  • 10:12 - 10:16
    computers designed for scientific
    calculations are usually One's Complement
  • 10:16 - 10:21
    and so is the AGC. Unsigned four bit
    numbers can express values from 0 to 15.
  • 10:21 - 10:26
    In One's Complement the values 0 through 7
    match the unsigned values 0 through 7, and
  • 10:26 - 10:30
    the negative size side is organized like
    this: Unlike Two's Complement, the two
  • 10:30 - 10:34
    sides are perfectly symmetrical, so
    negating a number is as easy as
  • 10:34 - 10:40
    complementing it, that is, flipping all
    the bits. So the two representations of 0
  • 10:40 - 10:46
    are plus 0, with all 0 bits, and minus 0,
    with all 1 bits. Addition in the positive
  • 10:46 - 10:50
    space is equivalent to the unsigned
    version, same in the negative space when
  • 10:50 - 10:54
    mapping signed negative numbers to their
    unsigned counterparts. It gets interesting
  • 10:54 - 11:02
    when we have a 0 transition. Signed 6 - 4
    is 6 + (-4) which is unsigned 6 + 11,
  • 11:02 - 11:08
    which in modulus 16 is 1. We have a carry.
    In One's Complement, a carry needs to be
  • 11:08 - 11:11
    added to the end result, so we get two,
    which is correct. The trick to jump over
  • 11:11 - 11:14
    the duplicate 0 on a zero-transition
    by adding the carries is called
  • 11:14 - 11:16
    the 'end-around-carry'.
  • 11:16 - 11:20
    An overflow means that the signed result
    does not fit into the number space.
  • 11:20 - 11:25
    Signed 7 + 1 would result in signed -7,
    which is incorrect. The same happens
  • 11:25 - 11:28
    when overshooting negative numbers. After
    applying the end-around carry, the result
  • 11:28 - 11:33
    of signed 7 here is incorrect. The CPU
    detects this and flags the result, the
  • 11:33 - 11:37
    accumulator has an extra bit to record the
    information about an overflow, we call it V.
  • 11:37 - 11:45
    So if we have code that reads the value
    of 7FFF from memory and adds 1, the result
  • 11:45 - 11:49
    is 0 and an overflow is detected, so the
    accumulator is flagged. The store
  • 11:49 - 11:53
    instruction in addition to writing A to
    memory, does extra work if there's an
  • 11:53 - 11:58
    overflow condition: it clears the overflow
    condition, writes plus 1 or minus 1 into A,
  • 11:58 - 12:02
    depending on whether it's a positive or
    a negative overflow, and skips the next
  • 12:02 - 12:06
    instruction. This way the program can
    detect the overflow and use the plus 1 or
  • 12:06 - 12:11
    minus 1 to apply the signed carry to a
    higher-order word. By storing A to memory,
  • 12:11 - 12:15
    we now have a double-word result. In one's
    complement negating a number is as easy
  • 12:15 - 12:19
    as flipping every bit in a word so there's
    a dedicatet instruction for loading and
  • 12:19 - 12:22
    negating a value. ldc, which stands for
    'load complement', reads a word from
  • 12:22 - 12:28
    memory, negates it by inverting all the
    bits and writes it into the accumulator.
  • 12:28 - 12:32
    Incrementing, that is adding 1 to a word,
    is such a common operation that there's a
  • 12:32 - 12:36
    dedicated instruction that increments a
    word in memory in place. There is no
  • 12:36 - 12:39
    corresponding decrement instruction.
    Instead, there are two similar instructions:
  • 12:39 - 12:43
    augment and diminish. The increment
    instruction adds one to the original value,
  • 12:43 - 12:46
    the augment instruction adds one
    to all positive values and
  • 12:46 - 12:51
    subtracts 1 from all negative values.
    Effectively increments the absolute value
  • 12:51 - 12:55
    retaining the sign. The diminish
    instruction decrements positive values and
  • 12:55 - 13:00
    increments negative values. Optimized for
    scientific calculations, the CPU has
  • 13:00 - 13:04
    dedicated multiplication circuitry. The
    model instruction reads a word from memory
  • 13:04 - 13:09
    and multiplies it with the accumulator.
    When you multiply two signed 15 bit words,
  • 13:09 - 13:13
    you need up to 29 bits, that is two words,
    for the result. The complete result will
  • 13:13 - 13:17
    be written into two registers, the upper
    half into A and the lower half into B.
  • 13:17 - 13:21
    B is a separate 15 bit register which is
    mostly used together with the accumulator
  • 13:21 - 13:27
    with instructions that deal with 30 bit
    data. Double word values are expressed
  • 13:27 - 13:30
    with the uppermost bits in A, or, if in
    memory, at lower addresses, and the lower
  • 13:30 - 13:34
    bits in B, or at higher addresses, making
    the AGC a big endian machine. Assuming the
  • 13:34 - 13:38
    normalized form, with matching signs, the
    effective value is the concatenation of
  • 13:38 - 13:42
    the two times 14 bits of the values.
  • 13:42 - 13:46
    Division also works with double words.
    It takes the combination of
  • 13:46 - 13:50
    the A and B registers as the dividend
    and a word from memory as the divisor.
  • 13:50 - 13:53
    There are also two results:
    the result and the remainder.
  • 13:53 - 13:55
    The result is written into A and
    the remainder in to B.
  • 13:55 - 14:00
    Some other instructions also allow
    using A and B as a double word register.
  • 14:00 - 14:03
    Load a b comma indirect two zero zero
    looks up addresse two zero zero in
  • 14:03 - 14:06
    memory and reads the words at this
    and the next cell into A and B.
  • 14:06 - 14:10
    The load complement variant does the same
    but inverts all bits during the load.
  • 14:10 - 14:13
    There is no instruction to store A and B
    in a single step,
  • 14:13 - 14:16
    but there is a double word
    exchange instruction. And finally there's
  • 14:16 - 14:21
    an add instruction that works in double
    words. And to load and store just the B
  • 14:21 - 14:26
    register there's an exchange instruction
    for that. For working with tables there's
  • 14:26 - 14:30
    the indexed addressing mode. Any
    instruction that takes an address as an
  • 14:30 - 14:36
    argument can use it. This example 'load A
    comma indirect 7 0 0 plus indirect 8 0'
  • 14:36 - 14:43
    first looks up address 0 8 0, adds it to
    the base of 7 0 0, which results in 7 0 2,
  • 14:43 - 14:47
    reads from that address and writes the
    result into A. What does this mean?
  • 14:47 - 14:51
    There's a table in memory at 7 0 0. In the
    example, it contains multiples of 3, and
  • 14:51 - 14:56
    an index to that table is stored in memory
    at 0 8 0, which in the example is 2.
  • 14:56 - 15:01
    So we read the entry at index 2 of
    the table, which is 6.
  • 15:01 - 15:04
    Without a base address, we get
    the syntax in this example:
  • 15:04 - 15:08
    load A comma double indirect 8 0.
    The base is effectively zero in this case.
  • 15:08 - 15:13
    The CPU will look up the value at 0 8 0
    in memory, add it to the base of 0,
  • 15:13 - 15:17
    so the value is still the same.
    And read from that address.
  • 15:17 - 15:21
    In this case, memory at 0 8 0 effectively
    stores what C programmers know
  • 15:21 - 15:25
    as a pointer, and 3A0 is the pointer's
    different destination.
  • 15:25 - 15:29
    The instruction performed it indirectly.
  • 15:30 - 15:33
    By default, instructions are
    executed sequentially.
  • 15:33 - 15:36
    The program counter PC increments as
    instructions are executed, always pointing
  • 15:36 - 15:40
    to the next instruction. Control flow
    instructions like jump and conditional
  • 15:40 - 15:45
    jump change that. When the CPU hits a jump
    instruction, it will load its argument
  • 15:45 - 15:49
    into the program counter, which means that
    execution will continue at that address.
  • 15:49 - 15:53
    jz, jump if zero, only jumps if A is zero.
    Otherwise it continues with the next
  • 15:53 - 15:58
    instruction. Similarly, jlez only jumps if
    A is negative or zero.
  • 15:58 - 16:03
    CCS count compare and skip, is a fun one.
    It's a four-way fork for execution.
  • 16:03 - 16:07
    Depending on whether the value in
    memory is positive, negative,
  • 16:07 - 16:11
    plus minus - plus zero, minus zero, it will
    jump to one of the next four instructions.
  • 16:11 - 16:14
    If you know the value is
    positive or zero, you can ignore
  • 16:14 - 16:16
    the other two cases and just
    fill the first two slots.
  • 16:16 - 16:20
    And if it's supposed to be only negative,
    you have to skip the first two slots.
  • 16:20 - 16:24
    They should never be reached, but
    it's good practice for them to fill them
  • 16:24 - 16:29
    with error handlers. Since CCS also puts
    the absolute diminished value of the
  • 16:29 - 16:34
    memory location into A, so it decrements
    A, a special case of CCS A can be used for
  • 16:34 - 16:39
    loops that count down A. The call
    instruction. Isn't it for calling
  • 16:39 - 16:43
    subroutines aka functions. It's like a
    jump instruction but it saves its origin,
  • 16:43 - 16:46
    so the callee can return to it later. For
    the call instruction, the program counter
  • 16:46 - 16:50
    is incremented first, and then copied into
    the link register LR. Finally, the
  • 16:50 - 16:53
    argument of the call instruction is copied
    into the program counter, so that
  • 16:53 - 16:57
    execution continues there. The link
    register now contains the return address.
  • 16:57 - 17:01
    At the end of the subroutine, the RET
    instruction effectively copies the
  • 17:01 - 17:05
    contents of the linked register into the
    program counter, so execution resumes just
  • 17:05 - 17:09
    after the call instruction.
    If the subroutine wants to call
  • 17:09 - 17:12
    its own subroutine, the program has to
    save the link register before,
  • 17:12 - 17:15
    and restore it afterwards. There's an
    exchange instruction specifically for this.
  • 17:15 - 17:19
    For additional levels, a stack can be
    constructed, manually,
  • 17:19 - 17:20
    using the indexing syntax.
  • 17:20 - 17:24
    So far we've seen the following
    registers: the A register is used for
  • 17:24 - 17:28
    memory accesses and all arithmetic. It is
    combined with the B register for double
  • 17:28 - 17:32
    width arithmetic, the program counter to
    keep track of what to execute and the link
  • 17:32 - 17:35
    register remembers the return address when
    calling a subroutine. We haven't seen the
  • 17:35 - 17:39
    zero register yet. It always contains
    zero, so when we read from it, we get zero
  • 17:39 - 17:42
    and when we write to it the value gets
    discarded. There are three more registers
  • 17:42 - 17:46
    that we will talk about later. The eight
    registers are numbered, that is they are
  • 17:46 - 17:51
    assigned memory addresses. This means that
    the first eight words in memory are
  • 17:51 - 17:54
    actually occupied by the registers. They
    can be accessed using the addresses and
  • 17:54 - 17:58
    all instructions that take a memory
    address. This allows for much greater
  • 17:58 - 18:02
    flexibility in the instruction set: we can
    load A with the contents of the B register
  • 18:02 - 18:05
    by reading the contents of memory at
    location 1 into A. The content of zero can
  • 18:05 - 18:10
    be loaded into A by just reading from
    memory at 7, which is the zero register.
  • 18:10 - 18:14
    A can be incremented by incrementing
    memory at zero and B can be used as
  • 18:14 - 18:20
    a pointer by reading from double indirect
    one. Let's look at memory more closely.
  • 18:20 - 18:27
    Memory is 4096 words and goes from
    000 to FFF. The registers are located at
  • 18:27 - 18:31
    the very bottom of memory. Including them,
    there are 1024 words of RAM,
  • 18:31 - 18:35
    random access memory, and
    three kilowords of ROM, read-only memory.
  • 18:35 - 18:39
    The AGC was originally architected to
    only have this little RAM and ROM,
  • 18:39 - 18:42
    but there's actually more.
    Let's look at the RAM area.
  • 18:42 - 18:46
    The uppermost quarter is banked. The area
    is a window through which one of eight
  • 18:46 - 18:51
    different banks can be accessed, each 250
    words in size. The erasable Bank register
  • 18:51 - 18:56
    EB points to one of these banks. If EB is
    0, Bank 0 is visible in the banked area.
  • 18:56 - 19:01
    If EB is five, bank five is visible.
    Addresses in the fixed area always
  • 19:01 - 19:05
    represent the same RAM cells, but these
    are not additional cells, but the same as
  • 19:05 - 19:09
    banks zero, one and two. This means that
    there's a total of 8 times 256 words of
  • 19:09 - 19:16
    RAM, two kilowords. ROM is organized
    similarly. The lower kiloword is banked.
  • 19:16 - 19:22
    The fixed bank register FB selects one of
    the 32 banks. Support for more than 32
  • 19:22 - 19:26
    kilowords of ROM was added at the last
    minute. The 'superbank' bit can switch the
  • 19:26 - 19:28
    uppermost eight banks to the second set..
    laughter
  • 19:28 - 19:33
    so that a total of 40 kilowords are
    supported by the architecture.
  • 19:33 - 19:37
    The fixed ROM area will always show the
    same contents as two of the ROM banks, the
  • 19:37 - 19:42
    designers chose banks two and three to
    simplify address encoding. In practice,
  • 19:42 - 19:47
    fixed ROM contains core operating system
    code, and fixed RAM core operating system
  • 19:47 - 19:50
    data, that have to be available at all
    times. The remaining functionality is
  • 19:50 - 19:55
    distributed across the different ROM and
    RAM banks. Switching the RAM Bank can be
  • 19:55 - 19:59
    done by writing through the EB register.
    This is not a separate instruction but can
  • 19:59 - 20:04
    be expressed by writing A to memory
    location three. If A is five, writing A
  • 20:04 - 20:10
    into EB will make RAM Bank five visible at
    3 0 0. The same store instruction could be
  • 20:10 - 20:14
    used to write to the FB register at memory
    location 4, to switch the ROM Bank. But
  • 20:14 - 20:18
    that wouldn't work for a common case.
    If code in one bank wants to call code in
  • 20:18 - 20:22
    another Bank, by first switching the
    ROM Bank, load FB, and then doing
  • 20:22 - 20:26
    the function call, writing the bank number
    into FB will switch out the bank the code
  • 20:26 - 20:29
    is currently running on, so it won't
    be able to execute the call instruction.
  • 20:29 - 20:32
    Instead it will continue running some
    completely unrelated code that happens
  • 20:32 - 20:34
    to get the same address on
    the other bank.
  • 20:34 - 20:37
    To call code on a different Bank,
    FB and PC registers need
  • 20:37 - 20:42
    to be changed atomically. call f is only a
    synonym for the existing double word
  • 20:42 - 20:47
    exchange instruction. Code first has to
    load the bank and the program counter into
  • 20:47 - 20:56
    A and B. Which then call f can atomically
    move into FB and PC. The same exchange
  • 20:56 - 20:59
    instruction can be used for a far return:
    it moves the original values back into FB
  • 20:59 - 21:06
    and PC. The two Bank registers only hold
    five and three bits respectively. The
  • 21:06 - 21:11
    other bits are zero and there's a third
    bank register, BB, both banks, which
  • 21:11 - 21:15
    merges the information from both other
    bank registers. The call far both banks
  • 21:15 - 21:18
    synonym is a double word exchange
    instruction that updates the program
  • 21:18 - 21:23
    counter and both banks. Subroutines
    usually have their private variables on
  • 21:23 - 21:26
    particular RAM banks. Call for both banks
    passes control to a function on the
  • 21:26 - 21:30
    different ROM Bank and also directly
    switches RAM banks, so that the callee can
  • 21:30 - 21:34
    immediately access its variables. Return
    for both banks returns to the caller,
  • 21:34 - 21:39
    restoring its RAM Bank configuration. The
    unusual ordering of the bank registers was
  • 21:39 - 21:43
    chosen to allow for a double word exchange
    of FB and PC, as well as for a double word
  • 21:43 - 21:49
    exchange of PC and BB. Now we've seen all
    eight registers. There's eight more
  • 21:49 - 21:52
    special locations in memory above the
    registers, the shadow area, which we'll
  • 21:52 - 21:56
    talk about later. And above those, there
    are four so-called editing registers,
  • 21:56 - 22:00
    which make up for the missing shift and
    rotate instructions. When writing a 15 bit
  • 22:00 - 22:06
    value into the ROR editing register, it
    will be moved to the right by one bit, and
  • 22:06 - 22:10
    the lowest bit will be cycled to the top.
    The result can then be read back.
  • 22:10 - 22:17
    ROL rotates left, SHR shifts to the right
    duplicating the top bit, and SHR7 shifts
  • 22:17 - 22:21
    to the right by 7 bits, filling the top
    with zeros. This is needed for the
  • 22:21 - 22:26
    interpreter system software component that
    we'll learn about later. We have seen that
  • 22:26 - 22:30
    the CPU is connected to RAM and ROM over
    the memory bus, but computers also talk to
  • 22:30 - 22:35
    peripheral devices that is the I/O bus.
    We've already seen the address space for
  • 22:35 - 22:40
    memory; there is a second address space
    to talk to devices. There are 512 I/O
  • 22:40 - 22:45
    channels numbered 000 through FFF. Each
    channel is 15 bits, and the in and out
  • 22:45 - 22:49
    instructions can read words from -, and
    write words to I/O channels. For many
  • 22:49 - 22:54
    devices, a channel contains 15 individual
    control bits. A control bit can for
  • 22:54 - 22:59
    example toggle a lamp on a display. The
    'out OR' instruction sets individual bits,
  • 22:59 - 23:04
    and 'out AND' clears individual bits. So
    I/O instructions can work on the whole
  • 23:04 - 23:10
    word or do boolean operations on them:
    AND, OR and XOR. To make boolean
  • 23:10 - 23:15
    operations also usable between registers,
    channels 1 and 2 are actually aliases of
  • 23:15 - 23:22
    the B and LR registers, which allows for
    these instructions. For AND there's also a
  • 23:22 - 23:27
    dedicated instruction that works on A and
    memory. After the registers, the shadow
  • 23:27 - 23:32
    area, and the editing registers, there's
    another special area: the counters. Like
  • 23:32 - 23:36
    I/O channels, they connect to external
    devices but they don't send bits or hold
  • 23:36 - 23:40
    words back and forth, instead they are
    controlled by hardware pulses, or cause
  • 23:40 - 23:45
    hardware pulses. On every pulse, TIME1
    gets incremented for example, while other
  • 23:45 - 23:51
    counters take the number stored into them
    by code and count down, generating pulses.
  • 23:51 - 23:55
    When I/O devices need to signal the CPU,
    thay can interrupt normal execution.
  • 23:55 - 23:59
    Next to the program counter, which points
    to the next instruction, there's the
  • 23:59 - 24:03
    instruction register which holds the
    current opcode. When an interrupt happens,
  • 24:03 - 24:09
    the CPU copies PC into a special memory
    location PC' and IR into IR' and then
  • 24:09 - 24:12
    jumps to a magic location depending on the
    type of interrupt, in this example 814.
  • 24:12 - 24:16
    When the interrupt handlers finished
    servicing the device the iret instruction
  • 24:16 - 24:21
    will copy PC' and IR' back into PC and IR,
    so execution will continue at the original
  • 24:21 - 24:27
    location. Memory locations eight through
    hex F are shadows of the eight registers.
  • 24:27 - 24:30
    PC and IR are automatically saved by
    interrupts and the remaining registers
  • 24:30 - 24:35
    need to be saved by software if necessary.
    The overflow condition flag cannot be
  • 24:35 - 24:40
    saved or restored, so while there's an
    overflow condition until the next store
  • 24:40 - 24:44
    instruction, which resolves the offload,
    interrupts will be disabled.
  • 24:44 - 24:50
    The 11 interrupt handlers have to reside
    in fixed ROM starting at 8 0 0.
  • 24:50 - 24:55
    There are 4 words for each entry.
    Typical interrupt entry code saves A and B,
  • 24:55 - 25:00
    loads A and B with a bank and PC of the
    actual handler and jumps there.
  • 25:00 - 25:04
    Interrupt 0 is special: it's the
    entry point on reset.
  • 25:04 - 25:08
    Next we will enter the interrupt return
    instruction, there's an instruction
  • 25:08 - 25:11
    to cause an interrupt in software,
    and instructions to enable and
  • 25:11 - 25:16
    disable interrupts globally. There is one
    more special memory location at hex 37,
  • 25:16 - 25:21
    the watchdog. This location needs to be
    read from or - read from or written to -
  • 25:21 - 25:24
    at least every 0.64 seconds
    otherwise the hardware will decide the
  • 25:24 - 25:30
    system software is unresponsive and cause
    a reset. Now we've seen an instruction set
  • 25:30 - 25:33
    and in the examples we've seen the codes
    that represent instructions in memory.
  • 25:33 - 25:37
    Let's look at how the encoding works. The
    load instruction, the upper three bits are
  • 25:37 - 25:42
    the opcode representing the load a and the
    remaining 12 bits encode the address.
  • 25:42 - 25:45
    This allows for a total of eight
    instructions but there are more
  • 25:45 - 25:49
    than eight instructions. RAM addresses
    always start with zero zero and
  • 25:49 - 25:54
    ROM adresses start with anything but
    zero zero. So the store instruction,
  • 25:54 - 25:57
    which only makes sense on RAM, only
    needs to encode 10 address bits instead
  • 25:57 - 26:03
    of 12, making room for another
    three RAM-only instructions.
  • 26:03 - 26:06
    The same is true for the increment
    instruction, which makes room for
  • 26:06 - 26:10
    three more, as well as CCS which shares
    an opcode with jump, which only works
  • 26:10 - 26:16
    on ROM addresses. Since jumps to the
    bank register don't make much sense
  • 26:16 - 26:21
    these codes are used to encode STI, CLI
    and extend. Extend is a prefix.
  • 26:21 - 26:24
    It changes the meaning of the opcode
    of the next instruction ...
  • 26:24 - 26:28
    laughter ... allowing for a
    second set of two-word instructions.
  • 26:28 - 26:34
    There's one more special call instruction
    'call 2' which is 'call LR',
  • 26:34 - 26:38
    which is the return instruction. But
    the CPU doesn't special case this one.
  • 26:38 - 26:42
    Return is a side-effect of calling memory
    at location 2. It executes the instruction
  • 26:42 - 26:46
    encoded in the LR register, the 12 bit
    address with the leading zeros decodes
  • 26:46 - 26:52
    into another call instruction which
    transfers control to the return address.
  • 26:52 - 26:57
    Indexed addressing is achieved by using
    the index prefix. An indexed instruction
  • 26:57 - 27:00
    consists of two instruction words, index
    and the base instruction. The addressing
  • 27:00 - 27:04
    code in the base instruction is the base
    address and the index instruction encodes
  • 27:04 - 27:09
    the address of the index. Index is an
    actual instruction. The CPU reads from the
  • 27:09 - 27:15
    given address, 0 8 0 in the example, then
    adds its value, 3, to the instruction code
  • 27:15 - 27:20
    of the following instruction 3 7 0 0 which
    is stored in the internal IR register.
  • 27:20 - 27:24
    Then it uses the resulting instruction
    code 3 7 0 3 for the next instruction,
  • 27:24 - 27:30
    which is a load from 703, the effective
    address. If an interrupt occurs after in
  • 27:30 - 27:33
    the index instruction, that is no problem
    because IR contains the effective
  • 27:33 - 27:36
    instruction code which will be saved into
    IR Prime and restored at the end of the
  • 27:36 - 27:40
    interrupt handler. Finally there's one
    index encoding with a special meaning.
  • 27:40 - 27:43
    When the address looks like it's
    referencing the shadow instruction
  • 27:43 - 27:47
    register it's an interrupt return
    instruction. Looking at the instruction
  • 27:47 - 27:50
    set architecture as a whole, there are
    many quirky and unusual features when
  • 27:50 - 27:53
    compared to modern architectures. It uses
    One's Complement instead of Two's
  • 27:53 - 27:58
    Complement; it has no status register; the
    overflow flag can't even be saved so
  • 27:58 - 28:02
    interrupts are disabled until the overflow
    is resolved; the store instruction may
  • 28:02 - 28:07
    skip a word under certain circumstances;
    the ccs destruction can skip several words
  • 28:07 - 28:11
    and can be outright dangerous if the
    instructions following it use prefixes;
  • 28:11 - 28:14
    there are no shift or rotate instructions
    but magic memory locations that shift and
  • 28:14 - 28:19
    rotate when writing into them; most
    boolean instructions only work on I/O
  • 28:19 - 28:23
    channels; indexing is done by hacking the
    following instruction code, and the
  • 28:23 - 28:28
    architecture has no concept of a stack,
    indexing has to be used if one is needed.
  • 28:28 - 28:33
    This was the architecture of the Apollo
    guidance computer, now let's look at how
  • 28:33 - 28:36
    this architecture is implemented in
    hardware. The hardware implementation runs
  • 28:36 - 28:40
    at one megahertz, is micro coded and uses
    integrated circuits, core memory, and core
  • 28:40 - 28:43
    rope memory. We'll look at the block
    diagram and how instructions are
  • 28:43 - 28:47
    implemented in micro code, and then about
    how the schematics map to integrated
  • 28:47 - 28:53
    circuits on modules on trays. This
    simplified block diagram shows the AGC at
  • 28:53 - 28:57
    the hardware level. Each box contains on
    the order of 500 logic gates. The dotted
  • 28:57 - 29:01
    lines are wires that to move a single bit
    of information, the solid lines are 15
  • 29:01 - 29:07
    wires that move a data word. These units
    deal with timing and control, and these
  • 29:07 - 29:11
    are the central units. The central
    register unit stores A, B, link registers,
  • 29:11 - 29:16
    and program counter, and the arithmetic
    unit can add and subtract numbers. The
  • 29:16 - 29:22
    memory components deal with RAM and ROM.
    The main clock of about one megahertz
  • 29:22 - 29:25
    feeds into the sequence generator which
    keeps cycling through twelve stages, which
  • 29:25 - 29:31
    is one memory cycle, MCT. Instructions
    usually take as many memory cycles as they
  • 29:31 - 29:36
    need memory accesses, so load, add, and
    store take two cycles, and jump takes one.
  • 29:36 - 29:40
    The sequence generator contains a
    collection of 12 step micro programs for
  • 29:40 - 29:45
    each MCT, for each instruction, like this
    one for the load instruction. In each
  • 29:45 - 29:52
    step, the entries send control pulses to
    the other units, which are connected
  • 29:52 - 29:57
    through the write bus. The control signal
    WA for example instructs the register unit
  • 29:57 - 30:01
    to put the contents of A onto the write
    bus, and RA makes it read the value on the
  • 30:01 - 30:07
    bus into A. Memory is also connected to
    the write bus. WS will copy the bus
  • 30:07 - 30:10
    contents into the memory address register,
    and RG and WG will read and write the G
  • 30:10 - 30:16
    register, which buffers the cells value
    after read and before a write. So in stage
  • 30:16 - 30:25
    7 for example RG puts the memory buffer
    onto the bus, and WB writes the bus
  • 30:25 - 30:30
    contents into the temporary G register.
    And in T10, B gets put on the bus and it
  • 30:30 - 30:34
    gets read into the A register. At the
    beginning of every memory cycle the
  • 30:34 - 30:38
    hardware sends the memory address S,
    usually what's encoded instruction, to
  • 30:38 - 30:42
    memory and copies the contents of that
    address into G. in the second half of the
  • 30:42 - 30:48
    MCT it stores G back into the same cell.
    So if we show memory timing next to the
  • 30:48 - 30:50
    microcode, as well as the pseudocode
    version of the load instruction which is
  • 30:50 - 30:55
    easier to read, we can see it loads the
    value from memory into G copies it into B
  • 30:55 - 30:59
    and then copies it into A. More
    interesting is the exchange instruction.
  • 30:59 - 31:06
    It saves A to B, reads memory into G,
    copies the result into A, copies the old
  • 31:06 - 31:11
    value into G, and stores that G into
    memory. Division for example takes several
  • 31:11 - 31:15
    MCT and it's micro program is way more
    complex. But there are more micro programs
  • 31:15 - 31:19
    than the ones for the machine
    instructions. Since there is only a single
  • 31:19 - 31:22
    adding unit in the whole computer,
    incrementing and decrementing the counters
  • 31:22 - 31:26
    is done by converting the pulses into
    special instructions that get injected
  • 31:26 - 31:31
    into the instruction stream. There are 14
    of these so-called unprogrammed sequences
  • 31:31 - 31:35
    with their own micro programs. Some counter
    shift, some are for interacting with
  • 31:35 - 31:41
    debugging hardware, and these two control
    the interrupt and reset sequences.
  • 31:41 - 31:46
    The complete schematics are publicly
    available and fit on just 49 sheets.
  • 31:46 - 31:51
    The whole implementation only uses a single
    type of gate, a three input NAND gate.
  • 31:51 - 31:55
    Two of these are contained in one
    integrated circuit, and about a hundred of
  • 31:55 - 31:58
    these ICs form a logic module.
  • 32:00 - 32:04
    24 logic modules and some interface and
    power supply modules are connected
  • 32:04 - 32:07
    together in tray A, which also contains
    the I/O and debug connectors.
  • 32:07 - 32:11
    Tray B contains various driver and amplifier
    modules, as well as RAM and ROM.
  • 32:11 - 32:16
    RAM is implemented as magnetic core memory,
    which stores bits in magnetized toroids.
  • 32:16 - 32:20
    Reading a bit clears it, so the memory
    sequencer makes sure to always write the
  • 32:20 - 32:24
    value again after reading it.
    Without mass storage, like tape, the AGC
  • 32:24 - 32:30
    has an unusually high amount of ROM.
    Core Rope Memory encodes bits by wires that
  • 32:30 - 32:35
    either go through- or past a ferrite core.
    The 500,000 bits per computer were woven
  • 32:35 - 32:40
    completely by hand. Trays A and B are put
    together like this and hermetically
  • 32:40 - 32:45
    sealed, making for a rather compact
    computer. This is its orientation when
  • 32:45 - 32:50
    installed on the spacecraft, with the six
    ROM modules accessible so they could in
  • 32:50 - 32:55
    theory be replaced during the mission. And
    that was the hardware part.
  • 32:55 - 33:01
    applause
    C: Next let's look at the devices.
  • 33:01 - 33:05
    applause
  • 33:05 - 33:08
    Let's look at the devices connected
    to the computer.
  • 33:08 - 33:11
    We will look at the core devices
    that allow the Apollo guidance computer to
  • 33:11 - 33:14
    maintain the state vector, some quite
    special devices you don't see on many
  • 33:14 - 33:18
    other computers, and the peripherals used
    for communication with astronauts and
  • 33:18 - 33:22
    Mission Control. The gyroscope is the core
    peripheral that the Apollo guidance
  • 33:22 - 33:25
    computer was originally built around. The
    Apollo Guidance Computer rotates it into a
  • 33:25 - 33:29
    certain base position with the CDU command
    counters, and then the gyro detects
  • 33:29 - 33:32
    rotation around the three axes of the
    spacecraft that can be read from the CDU
  • 33:32 - 33:35
    counters. Using the gyroscope, the
    spacecraft always knows it's attitude,
  • 33:35 - 33:40
    that is its orientation in space. The
    accelerometer adjust acceleration forces
  • 33:40 - 33:46
    on the three axis. The three values can be
    read from the PIPA counters. The optics on
  • 33:46 - 33:49
    the command module are used to measure the
    relative position to the celestial bodies.
  • 33:49 - 33:53
    The computer uses the OPT command counters
    to move the optics to point towards the
  • 33:53 - 33:57
    general direction of a star, and will read
    in the astronauts fine-tuning through the
  • 33:57 - 34:01
    OPT counters. The landing radar sits at
    the bottom of the lunar module and
  • 34:01 - 34:04
    measures the distance to the ground. The
    RADARUPT interrupt will be triggered
  • 34:04 - 34:07
    whenever a new measurement is available,
    and the RNRAD counter contains the new
  • 34:07 - 34:12
    value. Lunar module's rendezvous radar
    measures the distance of the command and
  • 34:12 - 34:16
    service module during rendezvous. After
    setting the two angles and the CDUT and
  • 34:16 - 34:19
    CDUS counters to point it towards the two
    other spacecraft, it will automatically
  • 34:19 - 34:22
    track it and cause RADARUPT interrupts
    when new data is available, which can be
  • 34:22 - 34:27
    read from the RNRAD counters. The command
    module, the service module, and the lunar
  • 34:27 - 34:31
    module all contain reaction control
    system, RCS, jets that emit small bursts
  • 34:31 - 34:35
    for holding or charging the attitude. On
    lunar module, there's one bit for each of
  • 34:35 - 34:38
    the sixteen jets. Setting a bit to one
    will make the jet fire.The system software
  • 34:38 - 34:44
    uses a dedicated timer, TIME6, and it's
    interrupt T6RUPT for timing the pulses.
  • 34:44 - 34:48
    The user interface is provided by the so
    called DSKY which stands for display and
  • 34:48 - 34:52
    keyboard. It has 19 keys, 15 lamps, and
    several numeric output lines.
  • 34:52 - 34:55
    Keys generate the KEYRUPT interrupts and
    the key number can be read
  • 34:55 - 35:00
    from the KEYIN I/O channel. The numeric
    display is driven by the OUT O channel.
  • 35:00 - 35:02
    There is bidirectional digital radio
    communication and S-band between
  • 35:02 - 35:07
    Mission Control and each spacecraft at a
    selectable speed of 1.9 or 51 kbit/s
  • 35:07 - 35:10
    Data words from Mission Control show up
    in the INLINK counter and
  • 35:10 - 35:15
    trigger interrupt UPRUPT. Data words to be
    sent are stored in the I/O channel DNTM1
  • 35:15 - 35:18
    and the DOWNRUPT interrupt will signal
    the program when it can load
  • 35:18 - 35:24
    the register with the next word. These
    were some of the interesting peripherals.
  • 35:25 - 35:30
    M: The AGC system, the AGC system software
  • 35:30 - 35:32
    makes it a priority based cooperative -
    but also pre-emptive - real-time
  • 35:32 - 35:37
    interactive fault tolerant computer with
    virtual machine support. The topics we'll
  • 35:37 - 35:41
    talk about are multitasking, the
    interpreter, device drivers, and the
  • 35:41 - 35:46
    waitlist, as well as the user interface,
    and mechanisms for fault recovery. The AGC
  • 35:46 - 35:49
    has many things to do. It does
    mathematical calculations that can take
  • 35:49 - 35:53
    several seconds, and it does I/O with its
    devices; it services interrupts when a
  • 35:53 - 35:57
    device wants the computers attention, for
    example a key press. It does regular
  • 35:57 - 36:01
    servicing of devices, like updating the
    display, and it supports real-time
  • 36:01 - 36:06
    control, like flashing a lamp or firing
    boosters at exactly the right time.
  • 36:06 - 36:10
    There's only a single CPU, so it must
    switch between the different tasks.
  • 36:10 - 36:14
    Batch processing multitasking computers
    work on long-running jobs one after the
  • 36:14 - 36:18
    other, but if some jobs have higher
    priorities it makes more sense to run a job
  • 36:18 - 36:21
    for only - say 20 milliseconds - then
    check the job queues and keep running
  • 36:21 - 36:25
    the highest priority job in the queue
    until it terminates and is removed
  • 36:25 - 36:29
    from the queue, then keep picking the
    highest priority job.
  • 36:29 - 36:33
    Jobs have to manually check at least
    every 20 milliseconds whether
  • 36:33 - 36:36
    there's a higher priority job in the queue
    by doing doing a so-called 'yield',
  • 36:36 - 36:41
    which makes the AGC a priority scheduled
    cooperative multitasking computer.
  • 36:41 - 36:45
    A job is described by 12 word data
    structure in memory, that contains
  • 36:45 - 36:49
    the PC and both bank's register that point
    to where the job will start or continue
  • 36:49 - 36:55
    running, as well as a word with a disabled
    flag in the sign bit and a 5 bit priority.
  • 36:55 - 36:59
    The core set consists of seven
    job entries. Minus zero in the priority
  • 36:59 - 37:03
    word means that the entry is empty. Job
    zero is always the currently running one.
  • 37:03 - 37:07
    When a new job gets created with a higher
    priority, the yield operation will
  • 37:07 - 37:12
    exchange the 12 words so that new job is
    job zero. Negating the priority will put a
  • 37:12 - 37:17
    job to sleep, so yield won't switch to it
    again. Negating it again will wake it up.
  • 37:17 - 37:21
    The first eight words in the job entry can
    be used for local storage for the job.
  • 37:21 - 37:23
    Since it's always job zero that is
    running, these words are always
  • 37:23 - 37:28
    conveniently located at the same addresses
    in memory. The executive has a set of
  • 37:28 - 37:33
    subroutines that control the job data
    structures. You can create a new job
  • 37:33 - 37:37
    pointed to by a pair of PC and BB
    registers of a given priority, change the
  • 37:37 - 37:41
    priority of the current job, put the
    current job to sleep, wake up a given job,
  • 37:41 - 37:46
    and terminate the current job.
    Yield is not an executive function, but a
  • 37:46 - 37:50
    two instruction sequence that checks the
    new job variable in which the executive
  • 37:50 - 37:54
    always holds the idea of the highest
    priority job. If job zero is the highest
  • 37:54 - 37:57
    priority job there's nothing to do. If
    there is a higher priority job, it calls
  • 37:57 - 38:02
    the change job subroutine which switches
    to that job. NEWJOB isn't just a variable
  • 38:02 - 38:06
    in memory, but also the watchdog word. If
    it isn't accessed regularly, that is
  • 38:06 - 38:10
    cooperative multitasking is stuck, the
    hardware will automatically reset itself.
  • 38:10 - 38:14
    A lot of the code in the AGC does
    scientific calculations, calculating for
  • 38:14 - 38:19
    example just the sum of two products of a
    scalar and a vector would require hundreds
  • 38:19 - 38:23
    of instructions in AGC machine code. There
    is library code that provides all kinds of
  • 38:23 - 38:27
    operations on single, double, or triple
    precision fixed point values, vectors, and
  • 38:27 - 38:33
    matrices. It also provides a softer multi-
    purpose accumulator, MPAC, which can hold
  • 38:33 - 38:36
    a double, triple, or a vector, depending
    on the mode flag. In C-like pseudo code we
  • 38:36 - 38:41
    would load the vector into the MPAC,
    multiply it with a scalar, save it, do the
  • 38:41 - 38:46
    other multiplication, and add the result
    to the saved value. Formulas like this one
  • 38:46 - 38:51
    need to store intermediate results, so a
    thirty-eight word stack is provided. If a
  • 38:51 - 38:54
    job uses math code, the MPAC, the MODE
    field, and the stack pointer will be
  • 38:54 - 38:58
    stored in the remaining fields of the Core
    Set Entry. The stack will be part of a
  • 38:58 - 39:03
    data tructure called VAC, which will be
    pointed to by the Core Set Entry. A job
  • 39:03 - 39:06
    can be created with, or without a VAC,
    depending on which subroutine it is
  • 39:06 - 39:12
    created with. The machine code version of
    the example code would still be very
  • 39:12 - 39:15
    verbose, with many function calls passing
    pointers. The designers of the AGC
  • 39:15 - 39:18
    software decided to create a new and
    compact language that will be interpreted
  • 39:18 - 39:22
    at runtime, a virtual machine. The
    interpretive language is turing-complete
  • 39:22 - 39:27
    and in addition to the MPAC it has two
    index registers, two step registers, and
  • 39:27 - 39:31
    its own link register. The encoding
    manages to fit two seven bit op codes in
  • 39:31 - 39:35
    one word, which allows for 128 op codes
    and explains why there is a 'shift right
  • 39:35 - 39:40
    by seven' function in the CPU. The two
    operands are stored in the following two
  • 39:40 - 39:45
    words, allowing 14 bit addresses. 14 bit
    addresses means interpretive code doesn't
  • 39:45 - 39:49
    have to work this complicated memory layer
    anymore. It allows addressing about half
  • 39:49 - 39:53
    of the ROM at the same time. At the lowest
    kiloword of each half, RAM is visible, so
  • 39:53 - 39:58
    interpretive code can pick between one of
    these two memory layouts. This is the
  • 39:58 - 40:02
    complete instruction set, regular machine
    code, interpretive code can be mixed and
  • 40:02 - 40:05
    matched inside the job. The exit
    instruction will continue executing
  • 40:05 - 40:09
    regular machine code at the next address,
    and CALL INTPRET will similarly switch to
  • 40:09 - 40:13
    interpreter mode. In addition to long-
    running math tasks, the system software
  • 40:13 - 40:17
    also supports device drivers. When a
    device needs the computers attention, for
  • 40:17 - 40:21
    example in case of a DSKY key press, it
    causes an interrupt. The current job will
  • 40:21 - 40:24
    be interrupted, and the interrupt handler
    will read the device data and return as
  • 40:24 - 40:29
    quickly as possible. If there's more to
    do, it can schedule a job for later. Some
  • 40:29 - 40:34
    devices need to be serviced regularly. A
    120 microsecond timer causes interrupts
  • 40:34 - 40:38
    that read data and write data... that read
    data from and write data to certain
  • 40:38 - 40:43
    devices. The numeric display of the DSKY
    for example only allows updating a few
  • 40:43 - 40:48
    digits at a time, so its driver is
    triggered by the 120 microsecond timer.
  • 40:48 - 40:52
    The timer interrupt cycles through eight
    phases, which distributes the device
  • 40:52 - 40:57
    drivers across time to minimize the
    duration of one interrupt handler. Some
  • 40:57 - 41:01
    devices need to be driven at exact times.
    If for example a job decides that it needs
  • 41:01 - 41:05
    to flash a lamp twice, it would turn it on
    immediately and schedule three weightless
  • 41:05 - 41:11
    tasks in the future at specific times. The
    first one will turn the lamp off, the
  • 41:11 - 41:16
    second one will turn it on again and the
    third one will turn it off again. The
  • 41:16 - 41:21
    sorted time deltas of the weightless tasks
    are stored in the data structure LST1,
  • 41:21 - 41:25
    with the first entry always currently
    counting down in a timer register, and
  • 41:25 - 41:30
    LST2 contains a pair of PC and BB for each
    task. There are subroutines to create a
  • 41:30 - 41:35
    new task and end the current task. The
    timer that controls the wait list has a
  • 41:35 - 41:39
    granularity of 10 milliseconds. Other
    timers can fire at the same rate, but are
  • 41:39 - 41:43
    offset, and the work triggered by them is
    designed to be short enough to never
  • 41:43 - 41:47
    overlap with the next potential timer
    triggered work. This is complicated by
  • 41:47 - 41:51
    device interrupts, which can come in at
    any time. The duration of an interrupt
  • 41:51 - 41:56
    handler causes latency and the maximum
    duration will reduce the allowed time for
  • 41:56 - 41:59
    the timer handlers. The core system
    software makes no guarantees about the
  • 41:59 - 42:04
    timing, it's all up to components to...
    it's up to all the components to cooperate
  • 42:04 - 42:10
    so the real time goal can be met. The
    PINBALL program is the shell of the AGC.
  • 42:10 - 42:14
    Key press interrupts schedule a job, that
    collects the digits for the command and
  • 42:14 - 42:18
    updates an in-memory representation of
    what should be on the display. The 120
  • 42:18 - 42:23
    millisecond timer triggers the display
    update code. When the command is complete
  • 42:23 - 42:28
    PINBALL schedules a new job. Mission
    Control has a remote shell in form of a
  • 42:28 - 42:34
    DSKY connected through the s-band radio.
    System software that supports human life
  • 42:34 - 42:38
    has to be able to communicate malfunctions
    and be able to recover from them.
  • 42:38 - 42:41
    The alarm subroutine takes the following
    word from the instruction stream,
  • 42:41 - 42:45
    displays it, and illuminates the prog
    light. This should be interpreted as
  • 42:45 - 42:49
    a warning or an error message.
    The AGC software is full of validity and
  • 42:49 - 42:52
    plausibility checks that help to find
    bugs during development and help
  • 42:52 - 42:54
    better understanding potential issues
    during the mission.
  • 42:54 - 42:58
    Some kinds of failures triggered by
    various hardware watchdogs or by code
  • 42:58 - 43:02
    make it impossible for normal operations
    to continue. In addition to showing
  • 43:02 - 43:06
    the error code, they also cause a hardware
    reset but the system software also offers
  • 43:06 - 43:10
    recovery services. A job can have recovery
    code for its different phases.
  • 43:10 - 43:15
    During execution it sets the respective
    phase and if an abort happens in any
  • 43:15 - 43:21
    job or task, the currently set up recovery
    routine gets executed which could
  • 43:21 - 43:25
    for example clean up and try the work
    again, or skip to a different phase, or
  • 43:25 - 43:30
    cancel the job altogether. The phase
    change call sets the current phase for a
  • 43:30 - 43:34
    job in the recovery table, for example
    phase 5 for job 4. Each phase is
  • 43:34 - 43:40
    associated with a descriptor of a task or
    a job with or without a VAC. So during
  • 43:40 - 43:44
    normal execution with several jobs and
    tasks scheduled, if an abort happens, the
  • 43:44 - 43:48
    core set and wait list are cleared, the
    contents of the recovery table are
  • 43:48 - 43:52
    activated, scheduling tasks and jobs for
    all jobs that set up recovery code.
  • 43:52 - 43:57
    Sometimes a failure though, like corrupted
    memory, are not recoverable. They cause a
  • 43:57 - 44:00
    fresh start, meaning a full initialization
    of the system without running any recovery
  • 44:00 - 44:05
    code.
    And that was the AGC system software.
  • 44:08 - 44:11
    C: As we now have a good overview on
    architecture, hardware, peripherals, and
  • 44:11 - 44:15
    system software of the Apollo Guidance
    Computer, it's time briefly view on it's
  • 44:15 - 44:19
    practical use on a mission to the moon. We
    will look at the user interface, the
  • 44:19 - 44:23
    launch sequence, and, once in orbit, the
    attitude in orbit determination. Further
  • 44:23 - 44:26
    we will understand how the digital
    autopilot works, and how powered flight is
  • 44:26 - 44:30
    being performed. As soon as we've reached
    the moon, we look at the lunar landing and
  • 44:30 - 44:34
    the lunar rendezvous after liftoff and
    finally re-entry into Earth's atmosphere.
  • 44:34 - 44:38
    Last but not least contingencies, or as we
    like to call them, "fun issues".
  • 44:38 - 44:42
    Let's start with the user interface.
    It is like any command-line interface but
  • 44:42 - 44:45
    since there are only numbers and no letters,
    key words have to be encoded.
  • 44:45 - 44:49
    On a normal system you might say
    'display memory', 'enter'.
  • 44:49 - 44:52
    Display is the verb, memory is the noun.
    On the Apollo guidance computer you say
  • 44:52 - 44:57
    verb '0 1', which means 'display', noun
    '0 2' - 'memory' - 'enter'.
  • 44:57 - 45:01
    Subroutine asks for an argument. On a
    normal system it might display a prompt,
  • 45:01 - 45:04
    you enter the number, press 'enter'.
    On the Apollo Guidance Computer, flashing
  • 45:04 - 45:09
    'verb' and 'noun' indicate that is waiting
    for input. So you type '2 5', 'enter';
  • 45:09 - 45:13
    an octal address, and the Apollo Guidance
    Computer displays the result.
  • 45:13 - 45:17
    The memory contents at the address octal
    '2 5'. The Apollo Guidance Computer uses
  • 45:17 - 45:20
    the same concept of verb and noun when
    it proactively asks for input.
  • 45:20 - 45:24
    Verb '6', noun '11' asks for the CSI
    ignition time. CSI meaning
  • 45:24 - 45:28
    Coelliptic Sequence Initiation, we will
    come to that later. Special case is when
  • 45:28 - 45:31
    the Apollo Guidance Computer asks a
    yes-or-no question. Verb 99 has the
  • 45:31 - 45:35
    astronaut confirm engine ignition
    with a proceed key.
  • 45:35 - 45:38
    The astronauts have a complete reference of
    all verbs and nouns on paper,
  • 45:38 - 45:41
    as well as cue cards were the most
    important information.
  • 45:41 - 45:46
    Let's now go through each of the phases
    of the mission, starting with a liftoff.
  • 45:46 - 45:50
    So, we are on our way.
    The Apollo Guidance Computer is
  • 45:50 - 45:54
    in passive monitoring mode. With the
    cutting of the umbilical cables, which you
  • 45:54 - 45:58
    see right about ... now, it has started
    the mission clock. In case this trigger
  • 45:58 - 46:02
    fails, one DSKY is always prepared with
    verb 75 and just waiting for 'enter' to
  • 46:02 - 46:05
    manually start the mission timer. We can
    display the mission elapsed time at any
  • 46:05 - 46:11
    time with verb 16, noun 65. During the
    flight with the SaturnV, the Apollo
  • 46:11 - 46:14
    Guidance Computer is only performing
    passive monitoring of the flight. Control
  • 46:14 - 46:17
    of the SaturnV is with its own launch
    vehicle digital computer, and the
  • 46:17 - 46:21
    instrument unit ring. The DSKY
    automatically shows verb 16, noun 62,
  • 46:21 - 46:24
    which is velocity in feet per second.
    Altitude change rate in feet per second,
  • 46:24 - 46:28
    and altitude above pad and nautical miles.
    Note that the units and the position of
  • 46:28 - 46:32
    the decimal point are implicit, and yes
    the whole system was working in metric
  • 46:32 - 46:35
    internally but for the benefit of the
    American astronauts the display procedures
  • 46:35 - 46:42
    converted everything to imperial units.
    laughter and applause
  • 46:42 - 46:46
    In case of problems with the Saturn
    computer, the Apollo Guidance Computer can
  • 46:46 - 46:49
    take over full control of the launch
    vehicle, in extreme cases astronauts could
  • 46:49 - 46:53
    even steer the whole stack into orbit
    themselves with the hand controller. In
  • 46:53 - 46:56
    case you ever wanted to fly... to manualyl
    control a 110 meter tall rocket with more
  • 46:56 - 46:59
    than 30 million Newton of thrust, this is
    your chance.
  • 46:59 - 47:02
    laughter
    In less than 12 minutes we've gone through
  • 47:02 - 47:05
    the first and second stage and are using a
    small burn from the third stage to get us
  • 47:05 - 47:09
    into a 185 kilometer orbit which circles
    the earth every 88 minutes.
  • 47:11 - 47:14
    But how do we know where ...
    we are in the right orbit?
  • 47:14 - 47:17
    Well the Apollo guidance computer, as well
    as Mission Control, are monitoring
  • 47:17 - 47:20
    position and velocity, because to get
    where we want to be, we first need to know
  • 47:20 - 47:24
    where we are. To be able to navigate in
    space, we need to maintain our
  • 47:24 - 47:27
    three-dimensional position, and our
    three-dimensional velocity,
  • 47:27 - 47:30
    the so-called state vector. Let's start
    with the determination of the position.
  • 47:30 - 47:35
    For this we need a telescope and a space
    sextant. The space sextant is very similar
  • 47:35 - 47:37
    to an 18th century nautical sextant.
    Position is determined by measuring
  • 47:37 - 47:41
    the angle between the horizon and a
    celestial body. As an horizon we can
  • 47:41 - 47:45
    either take that of Earth or Moon and
    celestial bodies - well we are in orbit,
  • 47:45 - 47:49
    we are surrounded by them. So let's just
    pick one. Luckily the Apollo guidance
  • 47:49 - 47:53
    computer already knows the position of 45
    of them. The whole optics hardware and the
  • 47:53 - 47:56
    command and service module can be moved to
    point in the general direction of Earth
  • 47:56 - 47:59
    and moon. With the launch of program 52,
    we command the Apollo guidance computer to
  • 47:59 - 48:03
    rotate the spacecraft to point one axis of
    the sextant, the so-called landmark line-
  • 48:03 - 48:07
    of-sight, LLOS, to the nearest body, which
    is earth or moon. The astronaut then used
  • 48:07 - 48:12
    the optics systems to exactly align the
    horizon to the LLOS. With the telescope
  • 48:12 - 48:14
    the astronaut looks for one of the known
    stars, points the star line to it and lets
  • 48:14 - 48:18
    the Apollo guidance computer read the
    tuning and shaft angle. Repeating this one
  • 48:18 - 48:21
    or more times in a different plane gives a
    three-dimensional position of the vehicle
  • 48:21 - 48:25
    in space. In the lunar module on the other
    hand, the optics hardware was trimmed down
  • 48:25 - 48:28
    for weight reduction. Any alignment
    requires rotation of the lunar module.
  • 48:28 - 48:32
    This is mostly used to determine the
    landing site and support the rendezvous
  • 48:32 - 48:36
    maneuvre. It even lacks the software to
    perform positioning in translunar space.
  • 48:36 - 48:40
    As we are moving, our position changes all
    the time. But after 2 location fixes, as
  • 48:40 - 48:43
    long as we're coasting, we are able to
    establish our speed and can determine
  • 48:43 - 48:47
    future positions by dead reckoning. As
    position and velocity are known, future
  • 48:47 - 48:51
    positions can be extrapolated.
    Unfortunately the near extrapolation
  • 48:51 - 48:54
    doesn't work in space as we have
    gravitational forces which bend our path.
  • 48:54 - 48:57
    Thankfully there are two mathematical
    models implemented in the Apollo Guidance
  • 48:57 - 49:00
    Computer: Conic integration based on the
    Keplerian orbit model on the left, which
  • 49:00 - 49:05
    assumes one perfectly round gravitational
    body influencing our flight path, and
  • 49:05 - 49:08
    Encke's integrating method for
    perturbation considering multiple bodies
  • 49:08 - 49:12
    with gravitational imbalances. I think
    this helps to understand why we need a
  • 49:12 - 49:16
    computer on board and can't just fly to
    the moon with a hand controller. As we
  • 49:16 - 49:19
    see, the Apollo spacecraft was perfectly
    capable to fly on its own, but in the end
  • 49:19 - 49:22
    NASA decided that the primary source for
    state vector updates shall be Mission
  • 49:22 - 49:26
    Control in Houston, measured with three
    ground stations. Remote programming is
  • 49:26 - 49:29
    done with the Apollo guidance Computer in
    idle, and running program 27. Mission
  • 49:29 - 49:33
    Control can use its link via s-band to
    update the state vector. But there's one
  • 49:33 - 49:36
    thing Mission Control doesn't know better
    than us, and that's attitude. Attitude is
  • 49:36 - 49:40
    the orientation of the spacecraft in its
    three axis. Starting from a known
  • 49:40 - 49:44
    attitude, we have to ensure that we can
    measure any rotation on any axis.
  • 49:44 - 49:48
    That's what gyros are for. They are one of
    the major component of the IMU,
  • 49:48 - 49:52
    the inertial measurement unit. Three
    gyroscopes, one per axis measure any
  • 49:52 - 49:55
    rotation and provide their data to the
    Apollo Guidance Computer to keep track of
  • 49:55 - 49:59
    the attitude of the spacecraft. Before we
    leave Earth orbit, let's quickly discuss
  • 49:59 - 50:02
    the digital autopilot. It is the single
    biggest program in the Apollo Guidance
  • 50:02 - 50:06
    Computer, with about 10% of all the source
    code both in the command and service
  • 50:06 - 50:09
    module as well as the lunar module. The
    implementations for each vehicle are
  • 50:09 - 50:12
    significantly different though, due to
    different flight modes, thruster sets,
  • 50:12 - 50:17
    and symmetry of vehicle. As there's no
    friction in space, the tiniest event would
  • 50:17 - 50:21
    constantly make the spacecraft rotate. The
    digital autopilot of the Apollo Guidance
  • 50:21 - 50:24
    Computer uses the jets to maintain the
    attitude within certain thresholds,
  • 50:24 - 50:28
    so-called dead bands. The autopilot is
    also used in case the astronauts ever need
  • 50:28 - 50:32
    to use the hand controllers for thrusters.
    Basically both the command service module
  • 50:32 - 50:35
    and the lunar module have fly-by-wire
    control. As any thruster could break at
  • 50:35 - 50:39
    any time, the autopilot is capable of
    calculating the ideal burn mode even with
  • 50:39 - 50:43
    a reduced number of thrusters. It has some
    simple algorithms for center of gravity and
  • 50:43 - 50:46
    weight distribution as well, which are
    taken into account when calculating
  • 50:46 - 50:50
    thruster maneuvers. It can do more than
    that, though. Give it a new attitude and
  • 50:50 - 50:54
    it will calculate the most efficient
    transfer vector to reach the new attitude.
  • 50:54 - 50:58
    In certain flight modes it might be
    required to have a stable rotation, be it
  • 50:58 - 51:01
    for temperature control, monitoring of the
    landing site, or other reasons. The
  • 51:01 - 51:06
    autopilot supports stable constant
    rolling, which can be directly activated.
  • 51:06 - 51:08
    The autopilot does not only control
    attitude, it also supports the crew in
  • 51:08 - 51:12
    performing powered flight maneuvers. It
    calculates a potential solution, which
  • 51:12 - 51:16
    obviously can be overwritten by ground as
    usual, but still, after confirmation the
  • 51:16 - 51:19
    autopilot automatically fires the engines
    and keeps a timer for the correct length
  • 51:19 - 51:24
    of time. It does not measure the results
    of the burn though. For powered flight
  • 51:24 - 51:27
    obviously dead reckoning isn't correct
    anymore, so the Apollo Guidance Computer
  • 51:27 - 51:31
    contains a subroutine called average G,
    which takes the input from the IMU,
  • 51:31 - 51:36
    meaning gyro and accelerometer, to compute
    the change to the state vector. Now that
  • 51:36 - 51:39
    we know how to orient ourselves, and how
    to control the spaceship, it's time we fly
  • 51:39 - 51:42
    to the moon. Usually the translunar
    injection happens in the middle of the
  • 51:42 - 51:46
    second orbit around the earth, so around 2
    hours 45 minutes into the flight. This is
  • 51:46 - 51:50
    still performed by the third stage of the
    SaturnV so the Apollo Guidance Computer
  • 51:50 - 51:52
    once again should only have a passive role
    here by monitoring the translunar
  • 51:52 - 51:56
    injection with the dedicated program P 15.
    After separation from the S-IV-B
  • 51:56 - 51:59
    we are on our way. Since the next
    interesting phase is the lunar
  • 51:59 - 52:04
    landing, let's skip to that one. Once in
    lunar orbit, separation between the
  • 52:04 - 52:07
    command and service module and lunar
    module happens four hours and 45 minutes
  • 52:07 - 52:11
    before landing. On the lunar module,
    directly afterwards, rendezvous equipment
  • 52:11 - 52:15
    like radar, strobe and VHF are tested, as
    well as the IMU, which is realigned.
  • 52:15 - 52:19
    Additionally there's lots of preparation
    work on the lunar module. One of the main
  • 52:19 - 52:23
    tasks is to prepare the abort guidance
    system, AGS, which is another, more
  • 52:23 - 52:25
    simpler computer, that is able to get the
    lunar module with the astronauts back into
  • 52:25 - 52:30
    orbit and safely docked with the CSM in
    case of an emergency. Let's get back to
  • 52:30 - 52:33
    powered descent. The lunar module AGC has
    a special program for that one, P 63,
  • 52:33 - 52:38
    braking phase. The landing radar has
    switched on and updates the state vector.
  • 52:38 - 52:40
    The Apollo Guidance Computer controls the
    burn to reach the correct corridor towards
  • 52:40 - 52:45
    the surface with a minimal amount of fuel.
    This is fully automatic, the astronauts
  • 52:45 - 52:48
    just sit along for the ride. The lunar
    module is oriented with its descent engine
  • 52:48 - 52:52
    towards the moon, visibility for the
    astronauts is close to zero. The second
  • 52:52 - 52:56
    program, P 64, starts automatically at
    around 8,000 feet. Lunar module is pitched
  • 52:56 - 52:59
    so that the astronauts can actually see
    the ground and the lunar module commander
  • 52:59 - 53:02
    is getting a better understanding of the
    landing site and can search for a suitable
  • 53:02 - 53:07
    spot. The third program, P 68, keeps the
    lunar module in a stable attitude above
  • 53:07 - 53:11
    the surface and the commander manually
    adjusts the height in one feet per second
  • 53:11 - 53:14
    increments, to slowly descend to the
    surface. Ideally at that point, the
  • 53:14 - 53:17
    horizontal movement of the lunar module
    should be zero. After touchdown the crew
  • 53:17 - 53:21
    manually activates program 68, which
    confirms to the Apollo guidance computer
  • 53:21 - 53:25
    that yes, we have indeed landed, and
    ensures that the engine is switched off,
  • 53:25 - 53:28
    terminates the average G routine, and sets
    the autopilot in a very forgiving setting,
  • 53:28 - 53:32
    to avoid any corrections when it measures
    the rotation of the moon. The autopilot is
  • 53:32 - 53:36
    not completely switched off though, as the
    astronaut might need it in case of an
  • 53:36 - 53:39
    emergency ascent. Well we are on the moon,
    we do the usual stuff, small step for man,
  • 53:39 - 53:43
    jump around plant the flag, and we then
    skip directly to the interesting bits
  • 53:43 - 53:47
    which is liftoff and rendezvous. The
    rendezvous technique was developed in the
  • 53:47 - 53:51
    Gemini project. Here you can see the Agena
    rendezvous target in Earth orbit. It
  • 53:51 - 53:54
    follows the principle of an active
    vehicle, in this case the lunar module,
  • 53:54 - 53:57
    which follows the command and service
    module and approaches it from below at
  • 53:57 - 54:01
    slightly faster orbit. There were actually
    two different ways for rendezvous. A more
  • 54:01 - 54:04
    conservative method called Coelliptic
    rendezvous which required one and a half
  • 54:04 - 54:07
    orbits for the lunar module to reach the
    command and service module, but gave ample
  • 54:07 - 54:12
    opportunity for monitoring progress, mid-
    course corrections, and orbit scenarios.
  • 54:12 - 54:15
    And a more risky direct rendezvous method
    which directly aimed the lunar module
  • 54:15 - 54:19
    towards the command and service module,
    taking less than one orbit until docking.
  • 54:19 - 54:22
    This one was used starting from the Apollo
    14 mission, as Mission Control had more
  • 54:22 - 54:28
    experience and aimed for the shorter, less
    fuel intensive method. Preparation had to
  • 54:28 - 54:32
    start two hours before liftoff. We have to
    align the IMU and we visually monitor the
  • 54:32 - 54:36
    orbit of the CSM and calculate the
    rendezvous data. The Apollo Guidance
  • 54:36 - 54:40
    Computer has program 22, CSM tracking, for
    this purpose. At liftoff minus one hour,
  • 54:40 - 54:44
    we start program 12, powered ascent, and
    feed it with the necessary data, liftoff
  • 54:44 - 54:49
    time and velocity target. The Apollo
    Guidance Computer performs the countdown,
  • 54:49 - 54:52
    and ask for confirmation, we proceed and
    we have liftoff.
  • 54:52 - 54:55
    The trip into orbit takes only seven and a
    half minutes but depending on which method
  • 54:55 - 54:58
    for reaching the target orbit was used, it
    takes us either one and a half, or three
  • 54:58 - 55:02
    and a half hours to come up behind the
    command and service module. During that
  • 55:02 - 55:05
    time, program 20 is running all the time,
    measuring the state vector of the other
  • 55:05 - 55:08
    vehicle, the command and service module,
    via various peripherals like rendezvous
  • 55:08 - 55:12
    radar, VHF antenna, and the optic system
    for visual alignment. It calculates the
  • 55:12 - 55:16
    necessary corridor and respective
    maneuvers required to get the lunar module
  • 55:16 - 55:19
    into an interception course. Multiple
    other programs run in parallel to perform
  • 55:19 - 55:23
    the necessary mid-course burn maneuvers.
    On the commander of service module, the
  • 55:23 - 55:26
    pilot is actively tracking the lunar
    module the whole way up to orbit. The
  • 55:26 - 55:29
    command and service module's computer is
    calculating the state vector of the lunar
  • 55:29 - 55:32
    module, to take over the role of the
    active vehicle, in case anything goes
  • 55:32 - 55:35
    wrong. The approach of the lunar module
    stops at 50 meter distance, at which point
  • 55:35 - 55:39
    it rotates to point its docking target on
    top towards the command and service
  • 55:39 - 55:43
    module. At that point in time the command
    service module takes over the active role
  • 55:43 - 55:47
    and activates program 79, final
    rendezvous, which slows down the command
  • 55:47 - 55:50
    and service module to close the distance
    until docking. Seconds before contact, the
  • 55:50 - 55:55
    autopilot on both spacecraft is switched
    off to avoid both trying to correct the
  • 55:55 - 55:59
    attitude of the combined spacecraft. So
    far so good, time to go home with the
  • 55:59 - 56:02
    trans-earth injection. We feed the Apollo
    guidance computer with Earth orbit
  • 56:02 - 56:06
    parameters and let it calculate the burn
    which is then activated and controlled.
  • 56:06 - 56:09
    Any kind of potential mid-course
    corrections are performed the exact same
  • 56:09 - 56:14
    way. Once in orbit around Earth, re-entry
    parameters are calculated on ground and
  • 56:14 - 56:17
    transferred to the Apollo guidance
    computer via a S-band uplink. The first
  • 56:17 - 56:22
    entry program, P 61, entry preparation,
    starts at entry minus 25 minutes. Various
  • 56:22 - 56:25
    landing parameters are requested, like
    latitude and longitude of the splash zone,
  • 56:25 - 56:29
    as well as the velocity and angles to
    enter the atmosphere. Entering and
  • 56:29 - 56:32
    confirming these values completes program
    61, and starts program 62, which basically
  • 56:32 - 56:36
    asks the astronaut to perform a checklist
    for manual command module - service module
  • 56:36 - 56:39
    - separation, which is not controlled by
    the Apollo guidance computer. After that
  • 56:39 - 56:43
    has been performed it switches
    automatically to program 63, entry
  • 56:43 - 56:48
    initialization. At that point, the
    autopilot is taking care of thruster
  • 56:48 - 56:51
    control to break the command module out of
    its orbit into Earth's atmosphere. The
  • 56:51 - 56:57
    main program for re-entry is program 64,
    entry, which starts automatically. Program
  • 56:57 - 57:00
    64 monitors the trajectory, and splashdown
    location, and determines the best entry
  • 57:00 - 57:05
    solution and potential velocity reduction
    by invoking two specific programs, either
  • 57:05 - 57:09
    P 65, entry up control, which basically
    makes the current module surf on the
  • 57:09 - 57:13
    atmosphere to reduce speed and extend the
    range, or program 66, entry ballistic,
  • 57:13 - 57:16
    throwing us through the atmosphere like a
    cannonball. The right mixture of the two
  • 57:16 - 57:22
    is decided by program 64. The last
    program, program 67, final phase, performs
  • 57:22 - 57:25
    the final maneuvers to the splash down.
    The following steps, like parachute
  • 57:25 - 57:29
    deployment and so on, are not done by the
    Apollo guidance computer but by the ELSC,
  • 57:29 - 57:32
    the Earth Landing Sequence Controller. The
    drop of the Apollo guidance computer is
  • 57:32 - 57:37
    done before deploying the parachutes. So
    this was a beautiful nominal mission, what
  • 57:37 - 57:42
    can go wrong? Well let's start with Apollo
    11, which had a 12 02 program alarm during
  • 57:42 - 57:46
    powered descent. Normally programs during
    powered descent use about 85% of the
  • 57:46 - 57:50
    processing power of the computer, but due
    to an incorrect power supply design, the
  • 57:50 - 57:53
    rendezvous... of the rendezvous radar
    generated an additional twelve thousand
  • 57:53 - 57:57
    eight hundred involuntary instructions per
    seconds, ironically amounting to the exact
  • 57:57 - 58:01
    additional 15 percent load.
    Due to the co-operative multitasking, a
  • 58:01 - 58:08
    queue of jobs build up, which resulted in
    executive overflow and the 12 02 alarm.
  • 58:08 - 58:11
    The operating system automatically
    performed a program abort, all jobs were
  • 58:11 - 58:15
    cancelled and restarted. All of this took
    just a few seconds, and landing could
  • 58:15 - 58:20
    commence. Next, Apollo 13. They had an
    explosion of the oxygen tank in the
  • 58:20 - 58:25
    service module at 55 hours 54 minutes 53
    seconds and it will ... yep, correct,
  • 58:25 - 58:29
    320,000 kilometers from Earth. Fortunately
    they could make use of the free return
  • 58:29 - 58:32
    trajectory to get the astronauts back to
    earth but they had to move to the lunar
  • 58:32 - 58:36
    module to survive, as the command and
    service module was completely shut down,
  • 58:36 - 58:39
    including its Apollo Guidance Computer.
    The IMU settings needed to be transferred
  • 58:39 - 58:42
    to the lunar module system first, adapted
    to the different orientations of the
  • 58:42 - 58:46
    spacecraft. The manual burns and the mid-
    course corrections were actually done with
  • 58:46 - 58:49
    the abort guidance system on the lunar
    module, due to power constraints with the
  • 58:49 - 58:52
    Apollo Guidance Computer. Successful
    reboot of the command and service module
  • 58:52 - 58:58
    computer was luckily done hours before re-
    entry. And last but not least, Apollo 14,
  • 58:58 - 59:01
    which had a floating solder ball in the
    abort button, which might lead to an
  • 59:01 - 59:03
    unwanted activation of abort, therefore
    putting the lunar module back into orbit.
  • 59:03 - 59:07
    This was solved within hours, by
    reprogramming the Apollo Guidance
  • 59:07 - 59:10
    Computer, to spoof the execution of a
    different program, which was not listening
  • 59:10 - 59:13
    to the abort button during the powered
    descend. Real abort activation though
  • 59:13 - 59:19
    would have to be manually activated via
    the DSKY. So this was an overview and how
  • 59:19 - 59:23
    the mission software was used on a flight
    to the moon and back.
  • 59:23 - 59:32
    applause
  • 59:32 - 59:36
    M: Now you probably want to run your own
    code on a real Apollo Guidance Computer,
  • 59:36 - 59:41
    so you need to know where to find one.
    42 computers were built total.
  • 59:41 - 59:46
    Seven lunar module computers crashed onto
    the moon. Three lunar module AGC's burned
  • 59:46 - 59:50
    up in the Earth's atmosphere, 11 command
    module computers returned.
  • 59:50 - 59:56
    They're all presumably parts of museum
    exhibits. And 21 machines were not flown.
  • 59:56 - 59:59
    Little is known about those. One is on
    display at the Computer History Museum
  • 59:59 - 60:02
    in Mountain View, California, but it is
    missing some components.
  • 60:02 - 60:07
    Luckily several emulation solutions are
    publicly available, as well as a tool chain.
  • 60:07 - 60:12
    And the complete mission source, originally
    the size of a medium-sized suitcase,
  • 60:12 - 60:17
    is available on github.
    laughter
  • 60:17 - 60:26
    applause
  • 60:26 - 60:29
    It takes a village to create a presentation.
    We would like to thank everyone who
  • 60:29 - 60:33
    helped and supported us. This includes
    the indirect contributors, who wrote
  • 60:33 - 60:36
    the books, the original documentation,
    the websites, and the software.
  • 60:36 - 60:40
    Thank you very much for your attention.
    C: Thank you.
  • 60:40 - 60:53
    applause and cheering
  • 60:53 - 60:58
    Herald: Wow that was a densely packed talk.
    laughter
  • 60:58 - 61:06
    Thanks Michael, and thanks Christian, for
    this amazing information overload.
  • 61:06 - 61:11
    Please give a warm hand of applause,
    because we can't have a Q&A, unfortunately.
  • 61:11 - 61:20
    applause
  • 61:20 - 61:35
    postroll music
  • 61:35 - 61:41
    subtitles created by c3subtitles.de
    in the year 2018
Title:
34C3 - The Ultimate Apollo Guidance Computer Talk
Description:

https://media.ccc.de/c/34c3/34c3-9064-the_ultimate_apollo_guidance_computer_talk

The Apollo Guidance Computer ("AGC") was used onboard the Apollo spacecraft to support the Apollo moon landings between 1969 and 1972. This talk explains "everything about the AGC", including its quirky but clever hardware design, its revolutionary OS, and how its software allowed humans to reach and explore the moon.

Michael Steil Christian Hessmann

https://fahrplan.events.ccc.de/congress/2017/Fahrplan/events/9064.html

more » « less
Video Language:
English
Duration:
01:01:42

English subtitles

Revisions