ATOLL - The programming language that got NASA to the moon

[Caleb Allen]

2019/09/12

Well, at least off the ground.

If your job is to get a 7 million pound hunk of metal off the ground with perfect precision, how do you do that? Do you trust your engineers design enough to get this 363 foot tall monolith off the ground in one piece? NASA’s answer to these terrifying questions are a fascinating and inspiring feat of engineering. It took the form of the programming language ATOLL.

If getting a rocket into outer space wasn’t challenging enough, NASA also had the requirement of putting three men on top of this controlled exploding tower, carry them safely from the surface of Earth into orbit. Then to the moon’s orbit, down to the moon’s surface, back up into the moon’s orbit, back into Earth’s orbit, and then onto Earth’s surface.

All of this with volitile fuel underneath the fragile and squishy human’s and their life support.

What could go wrong?

NASA did not leave that question unanswered. As expected from any good engineering organization, NASA’s solution to meeting these lofty safety expectations was finding and testing as many things that could go wrong as they possibly could. The more questions, and the more testing those questions, the better.

NASA needed so many tests, in fact, that it was simply not feasible to run the number of tests with the speed that was needed by hand.

Thus ATOLL was born. ATOLL, an acronym for Acceptance, Test, Or Launch Language, gave test engineers the ability to do just that–test and accept equipment for launch. The productivity boost from this system allowed engineers to tackle the enourmous testing needs of the Apollo missions, and safely land men on the moon.

ATOLL was a programming languages used during the Saturn and Apollo missions

The implementation of a computerized automatic system was begun at MSFC* in 1961. This system became operational in late 1962 and it or its successors have been used successfuly for the automatic checkout of systems on stages of the Saturn I, Saturn IB, and Saturn V vehicles.

ATOLL (Acceptance, Test, Or Launch Language) was developed for use with the automatic checkout program to provide the test engineers with a common computer language as a working tool with checkout operations.

*Marshall Space Flight Center

Some History

The driving force behind ATOLL was to gain effeciency at NASA. Specifically, existing systems required both a test engineer and a computer programmer to get anything done. Even then, the programmer might have expertise on one of the many systems involved in test and checkout.

The goal of the language was to have a system where engineers do not have to know the computer, programming or programming techniques. In other words, it was to construct a Domain Specific Language so that the test engineers could do just what they needed to get done without the difficulties that often came with computers.

Implementations

According to archival NASA documents, three were six implementations of ATOLL (by 1966 at least)

Language Features

While taking a similar form to a DSL (Domain Specific Language), its syntax differs strongly from most modern languages. One might consider closer to a complex application than a language unto itself.

An apt analogy would be CAD software. The abilities of a single engineer are enhanced significantly, affording much higher productivity on a team as a whole. Could AutoCAD be categorized as an application? Easily, yes. But what about a domain specific language? I think an argument can be made for this classification.

Similarly, ATOLL’s purpose and use was as a toolkit for testing engineers. Its design aim was to reduce the complexity of computer use for on-site engineers, eliminating the need for an engineer to learn complexities relating to memory or assembler instructions.

A syntax, in that light, would have a very different purpose from a modern general use language. Rather than a wide feature set with robuse control flow, ATOLL has a restricted set of “field assignments” centered around test operations.

Unlike today’s familiar C-like syntax, ATOLL used a tabular format. This may have been to facilitate the ability for a user to write programs on paper, without the requirement for expensive equipment.

Here is what an ATOLL test procedure might look like.

|------|----|----------|-----|-------|-------------|-------------|-------|------|-------------------|----------------------------------------------|
| STEP | SS | OPERATOR | CON | VALUE | LOWER LIMIT | UPPER LIMIT | UNITS | TIME | VARIABLE          | REMARKS                                      |
|------|----|----------|-----|-------|-------------|-------------|-------|------|-------------------|----------------------------------------------|
|      |    | NAME     |     |       |             |             |       |      | ATOLL SAMPLE TEST | AN EXAMPLE OF AN ATOLL I SEQUENCE            |
|      |    | BEGIN    |     |       |             |             |       |      | FIRST SEGMENT     | FIRST STATEMENT OF THIS SUBPROCEDURE..       |
| 0001 | 10 | SCAN     |     |       |             |             |       |      | RMT03,RDY         | SCAN TO VERIFY THAT ALL DISCRETES ARE IN THE |
|      |    |          |     |       |             |             |       |      |                   | REQUIRED STATE (0) AND THAT INCORRECT STATES |
|      |    |          |     |       |             |             |       |      |                   | ARE OUTPUT ON MAGNETIC TAPE AND CRT DISPLAY. |
| 0002 | 10 | DISO     |   1 |       |             |             |       |      | D121              | TURN GENERATER NO.1 ON.                      |
|      | 20 | DISI     |   1 |       |             |             |       |      | D61,D81           | GENERATOR NO. 1 VOLTAGE AND FREQUENCE OK.    |
|      | 30 | DELY     |     |       |             |             |       |  180 |                   | DELAY FOR 180 MILLISECONDS.                  |
|      | 40 | SCAN     |     |       |             |             |       |      | RMT03,RDY         | SCAN + RECORD NOGO'S FOR GENERATOR NO. 1     |
| 0003 | 10 | DISO     |   1 |       |             |             |       |      | D122              | TURN GENERATOR NO. 2 ON.                     |
|      | 20 | DISI     |   1 |       |             |             |       |      | D62,D82           | GENERATOR NO. 2 VOLTAGE AND FREQUENCE OK.    |
|      | 30 | SCAN     |     |       |             |             |       |  180 | RMT03,RDY         | DELAY 180 MILLISECONDS, THEN SCAN + RECOND   |
| 0004 | 10 | SETT     |     |       |             |             |       |      | T0001             | SET GENERAL TIME CELL NO. 1 TO THE PRESENT   |
|      | 20 | READ     |     | +4.95 |      -0.050 |      +0.050 | VDC   |      | A303,RMT03,RDY    | READ ANALOGUE MEASUREMENT 303                |
| 0005 | 10 | DISI     |   0 |       |             |             |       |      | D337              | MULTIPLEXER 3 IS NOT BUSY                    |
|      | 20 | SCAN     |     |       |             |             |       |  350 | RMT03,RDY         | SCAN + RECORD NOGO'S                         |
| 0006 | 10 | GATE     |     |       |             |             |       | 5000 | Toool             | GATE ON TIME CELL NO 1                       |
| 0007 | 10 | DISO     |   0 |       |             |             |       |      | D121              | TURN GENERATOR NO. 1 OFF                     |
|      | 20 | DISI     |   0 |       |             |             |       |      | D61,D81           | VOLTAGE + FREQUENCE ARE ZERO                 |
|      | 30 | SCAN     |     |       |             |             |       |      | RMT03,RDY         | SCAN + RECORD NOGO'S                         |
|      |    | ...      |     |       |             |             |       |      |                   |                                              |
| 0100 | 10 | RETN     |     |       |             |             |       |      |                   | END OF THE SUBPROCEDURE                      |
|      |    | ...      |     |       |             |             |       |      |                   |                                              |
|      |    | END      |     |       |             |             |       |      |                   | END OF THE ATOLL SAMPLE TEST                 |
|------|----|----------|-----|-------|-------------|-------------|-------|------|-------------------|----------------------------------------------|

Tabular format

Field assignments

step, operator (for the command on operation), condition (to be set, tested, or evaluated), value, upper limit (or tolerance), lower limit (or tolerance), engineering units, time, and a variable (or address field)

Remarks were not to be processed

TODO…