Block I Apollo Guidance Computer (AGC):
How to build one in your basementMaterial developed and provided by John Pultorak, who is kind enough to put these files into the public domain with no restrictions on their use.
Abstract
This report describes my successful project to build a working reproduction of the 1964 prototype for the Block I Apollo Guidance Computer. The AGC is the flight computer for the Apollo moon landings, with one unit in the command module and one in the LEM.
I built it in my basement. It took me 4 years.
If you like, you can build one too. It will take you less time, and yours will be better than mine.
I documented my project in 9 separate files:
Part 1 - Overview [8.1 MB]: Introduces the project.
Part 2 - CTL Module [9.9 MB]: Design and construction of the control module.
Part 3 - PROC Module [6.7 MB]: Design and construction of the processing (CPU) module.
Part 4 - MEM Module [6.8 MB]: Design and construction of the memory module.
Part 5 - IO Module [7.0 MB]: Design and construction of the diskplay/keyboard (DSKY) module.
Part 6 - Assembler [0.5 MB]: A cross-assembler for AGC software development.
Part 7 - C++ Simulator [5.2 MB]: A low-level simulator that runs assembled AGC code.
Part 8 - Flight Software [2.8 MB]: My translation of portions of the COLOSSUS 249 flight software.
Part 9 - Test & Checkout [0.9 MB]: A suite of test programs in AGC assembly language.Why build an AGC?
Early computers are interesting. Because they're simple, you can (if you like) actually understand the entire computer, from hardware to software.
The AGC is the most interesting early computer because: it flew the first men to the moon and has interesting architectural features.
Of course, I know that what you really want to see are the pictures, so here they are. Click any of them to see an enlarged view:OVERVIEW
Here is a physical implementation currently in progress of Mike Stewart's Block II AGC design. I started the process of creating this AGC about 20 months ago by researching available AGC design information and implementation examples. I wanted to create a Block II version of the AGC capable of running the full software. The idea of creating an AGC that mimics the original Block II circuits also appealed to me greatly, so Mike's design based exclusively on NOR gates, inverters, and open collector drivers was exactly what I was looking for.
I have implemented Mike's design of A01 - A24 plus his version of the fixed/erasable memory board B01 exactly as defined in his KiCad schematics available online. The only exception is a change in memory devices used on B01 to options available for 5V logic and through-hole design.
I intend this AGC to demonstrate full functionality so I have brought out the full set of I/O signals and the monitor connector signals. I use the monitor connector signals for basic integration testing via a monitor breakout board of my own design that also provides interfaces to a logic analyzer.
Instead of the transformer coupled I/O of the original AGC, I applied open collector digital drivers for all outputs added directly to the I/O boards. For the inputs I used a simple emitter follower for the high speed inputs and the original 'D' circuits for handling the switch inputs. The simplification of the signal conditioning allowed me to use only 2 interface circuit boards.
My intention is to eventually create a full complement of hardware based simulations of all peripheral devices, uplink/downlink, and a working hardware implementation of the monitor console (also called the core rope simulator) to demonstrate historically accurate monitor functionality.
DSKY
The DSKY design is my own. Instead of multiplexing the display drivers like in John Pultorak's DSKY, I have decided to drive the led segments primarily from open collector driver ICs and each 7-segment display will have its own latching BCD decoder/driver instead of latching relays. The translation of the AGC digit values to BCD will be accomplished with some old 32x8 bit fused link bipolar PROMS. Decoding of the AGC OUT1 channel (channel 10 oct) will use a combination of a 4 to 16 decoder and a series of nor-gate based flip flops and gating logic similar to the AGC implementation.
The DSKY push buttons are as close to the orginals as I could find comercially available. They will be wired identical to the original DSKY and make use of the same diode array for encoding.
There will be 4 PCBs in the DSKY:
- Display board
- Display driver board
- Decode and latch board
- I/O board with signal conditioning and the push button diode array
I currently have the first two boards completed.
AGC CONSTRUCTION
Each AGC module is fabricated on a 4 layer PCB using 14-pin DIP packages. I initially thought I would wire-wrap each module but after completing A01 and A02 I quickly determined that wire-wrapping the modules was not a viable option so I went with PCBs. I used KiCad for all PCB layout to ensure they matched Mike's schematics.
The chassis is made of aluminum plate and angle stock. The plates for the module connectors and the card guides were ordered online and laser cut.
The backplane is wire-wrapped by hand. I generated a backplane netlist within KiCad and printed out a hard copy. Careful use of highlighter markers and triple counting each pin has so far yielded an error free backplane. The backplane took about 10 months of part time effort (several hundred hours) to complete and I ended up using about 2200 feet of wire.
CURRENT FUNCTIONALITY
Pictures show completed AGC with modules A01 - A24 plus two input conditioning boards. I've included some logic analyzer screen shots showing the first time I got GOJAM working and also a couple screen shots showing the 4 instructions of the startup entry vector executing from the validate code. The screen shots showing instruction names are driven from signals via the monitor connector breakout board.
Current computer runs validation program successfully through to completion. I don't have a DSKY yet so I confirmed successful completion by watching '77' be written to CH10 (oct) for the DSKY signaling the sucessful completion of the program.
I have also loaded Luminary 210 and the program runs without any alarms other than 'NO ATT' which makes sense since there is no IMU (yet). I can watch PINBALL (the DSKY control routine) clear the DSKY via my logic analyzer and observe some of the interrupt driven idle behavior of Luminary at this point.
FUTURE PLANS
After the DSKY is complete, I plan on creating an interface to allow my physical AGC / DSKY to connect to the Orbiter spaceflight simulator, with the NASSP 8.0 Apollo-mission add-on. Instead of interfacing this package to yaAGC, I will instead connect it to an adaptor that will take the data stream created for the 'ya' packages and translate the packet data to/from the correct hardware signals to interface with my AGC.
— Steven Hauer, 11/2018
Project
Phase |
Description |
Status |
A0 |
Conversion of John Pultorak's
Block I AGC design (schematics only!) to Eagle CAD, with
corrections and small improvements. |
Ready now! |
A1 |
A clean restructuring of the
Block I design -- for example, with AGC, DSKY, and
monitoring busses separated into independent assemblies
rather than being a part of one large assembly. |
Preliminary data available. (See change
log.) |
B0 |
Block II AGC design
(schematics and printed-circuit board layout!) using 74xxx
TTL logic. |
Possible |
B1 |
Size reduction of Block II
design, using surface-mount parts and FPGAs. |
Possible |
C0 |
Further, final size reduction
of the Block II design, with added Virtual AGC
compatibility. (This would mean, for example, that one
of Dimitris's physical DSKY could be used with a PC running
Virtual AGC.) |
Possible |
The physical faceplate, work in progress! |
Cleaned-up stylized drawing from which measurements can be taken. A CorelDraw file is also available. |
|
|||
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bruno Muller has created a physical DSKY that interacts with
yaAGC via the NASSP plug-in for the Orbiter spacecraft
simulator. He has made a video and sent me the following
charming YouTube link: