Apollo Guidance Computer – Overview

Apollo Guidance Computer – Overview

NASA의 아폴로 계획에 사용된 컴퓨터인 Apollo Guidance Computer(AGC)와 그에 사용된 언어인 AGC Assembly Language를 간단히 알아봅니다.

Apollo Guidance Computer(AGC)

AGC는 아폴로 사령선(CM) 및 달 착륙선(LM)에 각각 한 대씩 설치되어 아폴로 우주선의 항해와 제어를 담당한 컴퓨터입니다. 유일한 컴퓨터는 아니고 Saturn V 로켓에 사용된 LVDC나 달 탐사선의 AGC 백업에 사용된 AGS 등도 있습니다.

1960년대 컴퓨터인 만큼 상당히 거대합니다. 크기는 61 x 32 x 17cm, 무게는 31.8kg에 달했습니다. 이에 반해 하드웨어 스펙은 지금에 비해 현저히 낮았습니다. Clock speed는 1.024MHz이고 RAM(core memory)은 4KB밖에 되지 않았습니다. 메모리는 15bit 데이터 + 1bit parity로 16bit word 형식이었고, 대부분의 코드 정보는 72KB 정도의 core rope memory라는 ROM 메모리에 저장되어 있었습니다. 이 core rope memory는 전선을 일일이 바느질해서 만든 것이라고 합니다.

core rope memory

우주비행사들은 AGC와 통신하기 위해서 DSKY(display and keyboard)라는 기기를 사용했습니다. 왼쪽은 현재 상황을 표시하는 indicator, 오른쪽에는 숫자를 표시하는 7-segment display가 있고, 계산기와 비슷한 형태의 키보드로 명령어를 입력합니다.

DSKY

전반적인 시스템은 아래과 같이 표현됩니다. AGC가 DSKY와의 커뮤니케이션뿐만 아니라 다양한 I/O 채널을 통해 우주선 및 관성항법장치를 제어한다는 것을 알 수 있습니다.

AGC Block Diagram

AGC Assembly (+ Interpretive) Language

AGC가 만들어진 시기는 1960년대, C언어조차도 등장하지 않았던 시절입니다. 그러니 코드는 대부분 어셈블리어로 작성되었을 것이라 짐작 가능합니다. 당시 소스 코드를 스캔한 이미지들을 여기에서 찾아볼 수 있고, Github에도 해당 스캔본을 바탕으로 한 아폴로 11호 등의 소스 코드가 잘 정리되어 있습니다.

아폴로 11호의 달 탐사선 AGC 소스 코드, 1199 페이지. 궤도 연산에 사용되는 코드의 일부입니다.

VXSC, VSL, DOT, PDVL, STODL… 읽기 어려운 명령어들이 한가득합니다. 코드 문법 또한 지금의 어셈블리어와는 상이하여 어떤 것이 opcode고 operand인지조차 알기 어렵습니다. 그나마 다행인 점은 이것들이 실제로 CPU 명령만을 표현한 어셈블리어는 아니고, 그보다는 고수준의 언어라는 것입니다. 4KB의 RAM과 72KB의 ROM에 불과한 컴퓨터 메모리 내부에 모든 우주선 코드를 넣는 것이 쉽지 않았기 때문입니다.

기본적인 AGC 어셈블리어보다 더 복잡한 pseudo-instruction들이 정의되어 있고 이들을 어셈블리어와 동시에 사용할 수 있습니다. 이들은 실행 시점에 인터프리터를 통해 기계어로 번역됩니다. 속도는 약간 느려질지 몰라도 제한된 메모리 안에 원하는 기능을 모두 넣기 위해서는 필요한 일이었습니다. 이를 통해 단순한 정수나 실수 연산뿐만 아니라 벡터, 심지어 행렬 연산까지 지원할 수 있었습니다. 예시로 MXV operand는 행렬과 벡터의 곱을 계산하고, VXVoperand는 벡터 외적(vector cross product)을 계산합니다. 물리 연산에는 당연하게도 행렬과 벡터가 무지막지하게 사용될 텐데, 코드 작성도 훨씬 간단해지고 읽기도 쉬워졌을 것입니다.

데이터 형식, 명령어 리스트와 문법 등 자세한 AGC specification은 VirtualAGC 문서에 정리되어 있습니다. 이를 통해 AGC 코드를 직접 해석할 수도 있을 것입니다. 소스 코드 중 TIME_OF_FREE_FALL.agc 처럼 어떤 역할을 하는지 명확한 서브루틴들이 여럿 존재하고, 주석도 상세한 경우가 있어서 도전해볼 만합니다.

VirtualAGC

아폴로 계획의 소스 코드를 지금도 실행시켜볼 수 있습니다. VirtualAGC는 이전 달 탐사에 사용되었던 코드와 더불어 AGC, DSKY, AGS 등을 가상 머신으로 구현해 놓은 프로젝트입니다. 1960년대 NASA의 개발자들이 달 탐사를 위해 어떤 기능들을 구현했는지 DSKY를 조작해보면서 직접 체험해볼 수 있습니다.

VirtualAGC 실행 화면

Reference