# TEMPORARY, I HOPE HOPE HOPE(임시방편이길 빌고 또 빈다), # OFF TO SEE THE WIZARD...(오즈의 마법사를 만나러) 같은 농담이 2016년 Reddit·해커뉴스를 강타했고, 여기에 프로그래밍 리더 마거릿 해밀턴의 이름과 1202 알람의 전설이 겹쳐 "역사적 코드" 저장소의 대명사가 됐다.
chrislgarry/Apollo-11 · CM Comanche055(Colossus 2A) + LM Luminary099 · 어셈블러 yaYUL(Virtual AGC) · .agc 파일 175개·약 13만 줄 · 디지털화: Virtual AGC + MIT 박물관 · 번역 ~45개 언어(한국어 포함) · 라이선스 퍼블릭 도메인 · 클론 소스 직접 분석)
이 저장소는 새 소프트웨어를 개발하는 곳이 아니다. MIT 계기연구소가 짜고 인쇄한 원본을 한 글자도 고치지 않고 스캔본과 똑같이 맞추는 것이 목표인 충실 복원(fidelity) 프로젝트다. 그래서 976개가 넘는 PR 대부분이 "스캔본에는 오타가 있으니 코드도 그 오타대로 되돌려라" 같은 것이다.
내용물은 딱 두 폴더다 — Comanche055/(사령선 컴퓨터, 코드명 "Colossus 2A")와 Luminary099/(달착륙선 컴퓨터, "Luminary 1A" 빌드 099). 빌드 시스템도, 프레임워크도 없다. 순수한 .agc 어셈블리 텍스트 175개가 전부이며, 실제로 돌려보려면 별도 프로젝트인 Virtual AGC의 yaYUL 어셈블러가 필요하다.
이 프로젝트가 특별한 이유는 "동작하는 최신 도구"라서가 아니라 인류가 처음 다른 천체에 발을 딛게 만든 소프트웨어의 실물이기 때문이다. 저장소 README의 정의를 그대로 옮기면 "사령선(Comanche055)과 달착륙선(Luminary099)을 위한 아폴로 11호 유도 컴퓨터 원본 소스코드. Virtual AGC와 MIT 박물관 사람들이 디지털화했다"이다. 코드를 짠 팀의 프로그래밍 리더는 "소프트웨어 공학(software engineering)"이라는 용어를 대중화한 마거릿 해밀턴(Margaret H. Hamilton)이며, 그의 서명은 저장소 안 CONTRACT_AND_APPROVALS.agc에 지금도 남아 있다.
EXECUTIVE·WAITLIST·INTERPRETER 같은 공통 뼈대를 공유하되, 각자 사령선/착륙선 전용 유도 로직을 얹었다.규모를 숫자로 보면 이렇다. 사령선 프로그램은 .agc 파일 85개·65,348줄, 착륙선 프로그램은 90개·64,838줄, 합쳐서 175개 파일·약 13만 줄의 어셈블리다. 라이선스는 퍼블릭 도메인(Public Domain Mark 1.0) — "저작권 제약 없이 상업적 용도로도 자유롭게 복제·수정·배포·실연 가능"하다. README는 이미 한국어를 포함한 약 45개 언어로 번역돼 있다(Translations/README.ko_kr.md).
2016년 7월, 개발자 Chris Garry가 Virtual AGC 팀의 복원본을 GitHub에 통째로 올렸다. 며칠 만에 Reddit·해커뉴스 상위를 휩쓸었고, 이후로도 아폴로 관련 기념일·다큐·밈이 돌 때마다 주기적으로 트렌딩에 재진입한다. 이 저장소는 "기능"으로 경쟁하지 않는다. 대신 다른 종류의 힘이 세 가지 있다.
바이럴의 방아쇠는 유머러스하고 인간적인 주석이었다. 반세기 전 20대 엔지니어들이 극한의 압박 속에서 남긴 농담이, 오늘날 개발자들이 자기 코드에 다는 // TODO: fix this later와 똑같은 정서라는 게 사람들을 울렸다. 실제 파일에서 확인한 것들이다.
마지막 주석 # SEE IF HE'S LYING("비행사가 거짓말하는지 확인해봐")는 특히 유명하다. 착륙 레이더 안테나를 손으로 돌려달라고 부탁한 뒤, 정말 돌렸는지 센서로 검증하는 코드에 붙은 농담이다. GOTOPOOH·CHKPOOH의 "POOH"는 컴퓨터의 대기(idle) 프로그램 P00를 승무원들이 "곰돌이 푸(Pooh)"라 부른 데서 왔다.
이 저장소가 사랑받는 건, 박물관 유리장 속 우주복이 아니라 "그 우주복 안주머니에서 나온 손때 묻은 메모"이기 때문이다. 공식 문서는 위대함을 말하지만, I HOPE HOPE HOPE 같은 주석은 마감에 쫓기던 진짜 사람을 보여준다. 개발자들은 거기서 50년의 시간차를 뛰어넘어 "아, 얘네도 우리랑 똑같았구나"를 느낀다. 코드가 유물이자 밈이 되는 순간이다.
README의 "계약·승인" 표에는 실제 서명자들이 등장한다. 프로그래밍 리더 마거릿 해밀턴을 필두로 Daniel Lickly, Fred Martin, Norman Sears, 탄도학의 대가 Richard Battin, David Hoag 등이다. 해밀턴이 딸을 데리고 연구소에 나와 밤새 코드를 짜고, 자기 키만큼 쌓인 출력물 옆에 선 사진은 소프트웨어 공학의 상징적 이미지가 됐다. 이 저장소는 그 전설을 추상적 일화가 아니라 실제 파일로 만나게 해준다.
달 착륙 마지막 몇 분, AGC가 "1202 알람"을 쏟아냈다. 랑데부 레이더가 불필요한 데이터로 컴퓨터를 과부하시킨 것이다. 보통 컴퓨터라면 멈췄겠지만, 해밀턴 팀이 설계한 우선순위 기반 스케줄러(Executive)가 낮은 우선순위 작업을 버리고 착륙 유도라는 핵심 작업만 살려 재시작을 반복했다. 관제센터의 24세 엔지니어 Steve Bales가 "GO"를 외쳤고, 착륙은 계속됐다. 이 드라마의 주역인 EXECUTIVE.agc·ALARM_AND_ABORT.agc·RESTARTS_ROUTINE.agc가 이 저장소 안에 그대로 있다.
세 번째 힘은 순수하게 기술적이다. 요즘 개발자는 메모리·CPU를 사실상 무한정 쓴다. 그런데 AGC 팀은 RAM 약 2K워드, ROM 약 36K워드라는 상상 못 할 제약 안에서 실시간 멀티태스킹 운영체제, 소프트웨어 가상머신, 더블 정밀도 벡터 수학을 구현했다. 이런 "극한 제약 엔지니어링"은 임베디드·펌웨어·시스템 프로그래밍을 배우는 사람에게 최고의 교보재다. 아래 표가 이 저장소를 "여느 트렌딩 레포"와 구분한다.
| 축 | 보통의 트렌딩 레포 | chrislgarry/Apollo-11 |
|---|---|---|
| 목적 | 새 기능·도구 개발 | 역사적 원본의 충실 복원(스캔본과 1:1 일치) |
| PR의 성격 | 버그 수정·기능 추가 | "스캔본 오타를 코드에 되살려라" 같은 고증 |
| 언어 | Python·TS·Rust… | AGC 어셈블리 + 인터프리터 의사코드 |
| 빌드 | npm/pip/cargo | 빌드 없음 — 실행은 외부 yaYUL/Virtual AGC |
| 가치 | 당장의 생산성 | 역사 + 극한 제약 설계 교보재 |
| 수명 | 유행 지나면 하락 | 기념일·다큐마다 재트렌딩 |
이 저장소에는 우리가 흔히 말하는 백엔드·프론트엔드·인프라가 없다. 대신 스택을 세 층으로 재해석할 수 있다 — ① 코드가 쓰인 언어(AGC 어셈블리 + 인터프리터 의사코드), ② 그 코드를 실제로 조립·실행하는 툴체인(yaYUL·Virtual AGC), ③ 저장소를 관리하는 현대 도구(문서 린트)다.
AGC 소프트웨어의 묘미는 한 프로그램 안에 두 개의 언어가 섞여 있다는 점이다. 하나는 하드웨어가 직접 실행하는 기본 명령어(basic instructions), 다른 하나는 소프트웨어 인터프리터가 실행하는 의사명령어(interpretive)다. 후자는 CPU가 원래 못 하는 더블 정밀도·벡터·행렬 연산을 작은 메모리로 해내기 위한 1960년대판 "바이트코드 VM"이다.
| 구성 | 정체 | 비고 |
|---|---|---|
| 기본 명령어 | CA·CS·TS·AD·XCH·TC·TCF·CCS·MASK·INDEX | 하드웨어가 직접 실행. 극소수의 옵코드로 모든 걸 만든다 |
| 확장 명령어 | EXTEND 접두 후 DCA·DXCH·QXCH·RAND·WAND·BZF | EXTEND 한 줄이 다음 명령을 "확장 모드"로 바꾼다 |
| 인터프리터 언어 | DLOAD·STODL·VXSC·DAD 등 | 소프트웨어 VM이 실행하는 벡터/더블 정밀도 의사코드 |
| 의사명령(pseudo-op) | ERASE·OCT·DEC·SETLOC·BANK·EBANK=·CADR·2DNADR·EQUALS | 어셈블러 지시어(메모리 배치·상수·뱅크 선택) |
| 인터럽트 제어 | INHINT / RELINT | 인터럽트 금지/허용 — 실시간 시스템의 핵심 도구 |
실제 코드를 보자. 아래는 사령선의 Executive(작업 스케줄러) 도입부다. 극소수 옵코드로 "새 작업을 큐에 넣는" 저수준 동작을 짜는 방식이 보인다.
.agc 텍스트를 실제 AGC가 실행할 기계어로 번역하는 어셈블러다. 1960년대 MIT의 원조 어셈블러 이름이 YUL이었고, yaYUL은 "yet another YUL"(YUL의 현대 재구현)이다. Virtual AGC 프로젝트(개발자 Ron Burkey)의 일부다. 이 저장소 자체에는 yaYUL이 없다 — 모든 .agc 파일 헤더가 # Assembler: yaYUL이라 적어 두고, README가 "컴파일하려면 Virtual AGC를 받으라"고 안내한다.저장소를 "돌려보는" 열쇠는 전부 외부의 Virtual AGC에 있다. 이 프로젝트는 세 가지를 준다.
.agc → AGC 기계어(코어 로프 이미지) 어셈블러즉 "코드는 여기(GitHub), 실행 환경은 저기(Virtual AGC)"로 역할이 깔끔하게 분리돼 있다. 저장소의 .gitignore가 yaYUL.exe를 무시 목록에 넣어 둔 것도 이 협업 구조의 흔적이다.
재미있게도 이 역사적 저장소에도 package.json과 bun.lockb(모던 Bun 락파일)가 있다. 하지만 이건 AGC 코드를 빌드하는 게 아니다. 유일한 의존성은 markdownlint-cli2 하나로, README·번역 문서의 마크다운 서식을 검사하는 용도다. CI(GitHub Actions)도 마크다운 린트와 PR 라벨링만 돌린다. "어셈블리 코드는 손대지 않고 고증만, 대신 문서 품질은 현대 도구로 관리"라는 이 저장소의 성격이 스택에도 드러난다.
아니다. 저장소에는 빌드 파이프라인이 없고, package.json은 문서 린트용일 뿐이다. 실제 어셈블·실행은 별도 프로젝트 Virtual AGC가 필요하다. 또 여기 있는 건 아폴로 11호 시점의 특정 빌드(Comanche055/Luminary099)이며, Luminary099는 저장소 헤더가 일관되게 "Luminary 1A"로 적는다("1C"가 아니다 — 1C는 이후 리비전).
AGC를 이해하는 지도는 하드웨어(15비트 CPU + 뱅크 메모리) → 실시간 핵심(Executive·Waitlist·인터럽트) → 소프트웨어 VM(Interpreter) → 인간 인터페이스(DSKY)의 네 층이다. 이 층들이 어떻게 맞물렸는지 뜯어보자.
AGC의 워드는 15비트 데이터 + 1비트 패리티 = 16비트다. 메모리는 두 종류다. Erasable(지울 수 있는) 메모리는 자성 코어를 쓴 RAM으로 약 2K워드, 프로그램 실행 중 바뀌는 변수가 산다. Fixed(고정) 메모리는 약 36K워드의 ROM인데, 놀랍게도 "코어 로프 메모리(core rope)" — 여성 작업자들이 구리선을 자성 고리에 통과시키거나(1) 비껴가게(0) 손으로 짜서 비트를 물리적으로 엮은 것이다. 그래서 별명이 "LOL 메모리(Little Old Ladies)"였다. 한 번 짜면 못 바꾸니, 발사 전 코드는 말 그대로 천에 새겨 고정됐다.
BANK·EBANK=·SETLOC 같은 지시어가 끊임없이 나오는 게 이 때문이다. 오늘날 임베디드의 "페이지드 메모리"·"뱅크드 ROM"과 똑같은 발상의 원조 격이다.AGC의 가장 현대적인 부분이다. EXECUTIVE.agc는 우선순위 기반 작업 스케줄러로, 최대 7~8개 작업(job)을 우선순위대로 돌린다. 긴 계산은 여기에 등록된다. WAITLIST.agc는 타이머로 예약된 짧은 작업을 관리한다("0.1초 뒤 이 루틴 실행"). 둘이 합쳐져, 한 대의 CPU가 여러 일을 동시에 하는 것처럼 보이는 협조형 멀티태스킹(cooperative multitasking) 실시간 OS가 된다.
Executive는 응급실의 트리아지(중증도 분류) 간호사다. 환자(작업)가 밀려들면, 간호사는 도착 순서가 아니라 위급도(우선순위)로 진료 순서를 정한다. 병상(VAC 영역)이 부족하면 경증 환자는 대기시키고 중증부터 살린다. 착륙 순간 컴퓨터가 과부하됐을 때 "착륙 유도"라는 최중증 환자를 먼저 살리고 잡무를 미룬 것이, 바로 이 간호사(Executive)의 판단이었다.
착륙 중 랑데부 레이더가 스위치 오설정으로 가짜 작업을 계속 만들어 Executive의 작업 슬롯을 다 채웠다. 슬롯이 넘치자 Executive는 ALARM_AND_ABORT.agc를 통해 1202("Executive 오버플로")를 띄우고, RESTARTS_ROUTINE.agc로 낮은 우선순위 작업을 버린 뒤 핵심 작업만 안고 재시작했다. 멈추지 않고 "덜 중요한 걸 포기하고 계속 나아가는" 이 설계가 인간을 달에 내려놓았다. 현대 시스템 설계의 "graceful degradation(우아한 성능 저하)" 교과서 사례다.
유도 방정식에는 더블 정밀도, 벡터, 행렬 연산이 필요한데 AGC 하드웨어는 그런 걸 직접 못 한다. 그래서 팀은 INTERPRETER.agc(약 90여 쪽)라는 소프트웨어 가상머신을 만들었다. DLOAD·STODL·VXSC 같은 의사명령을 정의하고, 인터프리터가 이를 해석해 실행한다. 속도는 느리지만 코드 밀도가 극적으로 높아져, 부족한 고정 메모리 안에 복잡한 물리 계산을 욱여넣을 수 있었다. 오늘날 JVM·파이썬 바이트코드·WASM과 정확히 같은 아이디어의 반세기 전 조상이다.
PINBALL_GAME_BUTTONS_AND_LIGHTS.agc(이름부터 "핀볼 게임")가 DSKY를 담당한다. 우주비행사는 동사(Verb, 무엇을 할지)와 명사(Noun, 무엇에 대해)를 각각 두 자리 숫자로 입력했다. 예를 들어 "Verb 16 Noun 68"은 "이 값을 계속 보여줘(16) — 착륙 정보(68)를"이다. 코드 주석은 이 인터페이스를 이렇게 정의한다: "통신의 언어는 동사와 명사라 불리는 한 쌍의 단어이며, 각각 두 자리 십진수로 표현된다." GUI도 자연어도 없던 시절, 제약이 낳은 극도로 압축된 명령 언어다.
수십 개 파일은 어떻게 하나의 프로그램이 될까? 각 프로그램의 MAIN.agc가 목차 겸 조립 지시서 역할을 한다. $파일명 형식으로 모든 조각을 순서대로 포함(include)하며, 원본 인쇄물의 쪽 번호까지 주석으로 달아 둔다.
① README.md(무엇이고 왜 고증 프로젝트인지) → ② Luminary099/MAIN.agc(달착륙선 프로그램이 어떤 조각들로 조립되는지 지도 보기) → ③ THE_LUNAR_LANDING.agc·LUNAR_LANDING_GUIDANCE_EQUATIONS.agc(가장 유명한 착륙 코드와 전설의 주석) → ④ EXECUTIVE.agc(1202 알람을 이해하는 스케줄러) → ⑤ INTERPRETER.agc(소프트웨어 VM의 발상) → ⑥ PINBALL_GAME_BUTTONS_AND_LIGHTS.agc(DSKY 인터페이스). 어셈블리가 처음이라도, 주석만 따라 읽어도 "이 코드가 무엇을 시키는지"의 절반은 잡힌다 — 원본 팀이 주석을 아주 성실히 달아둔 덕이다.
SPACECRAFT라 돼 있는데 스캔본에는 SPAECRAFT(오타)로 인쇄돼 있다면, 디지털본을 그 오타대로 되돌려라." 즉 버그·오타를 고치는 게 아니라 원본과 똑같이 보존하는 게 목적이다. 그래서 이곳의 PR·이슈는 "역사 고증" 성격이며, 코드 실행 결과를 바꾸는 변경은 받지 않는다.무한 자원에 익숙한 요즘, AGC는 "자원이 극도로 부족할 때 무엇을 포기하고 무엇을 지키는가"를 가르친다. 더블 정밀도를 위해 소프트웨어 인터프리터로 코드 밀도를 높이고, 주소 부족은 뱅크 전환으로 우회한다. 임베디드·펌웨어·게임보이 같은 저사양 타깃 개발의 사고방식이 여기 다 있다. "메모리가 무한하다는 착각"을 교정해주는 최고의 교보재다.
1202 알람의 교훈은 소프트웨어 설계의 보편 원리다. 시스템이 과부하되면 전부 죽이지(crash) 말고, 우선순위 낮은 작업을 버리고 핵심만 살려 계속 나아가라(graceful degradation). 오늘날 서버의 load shedding, 실시간 시스템의 deadline 관리, 게임의 프레임 드랍이 전부 같은 발상이다. EXECUTIVE.agc는 그 원형을 어셈블리로 보여준다.
INTERPRETER.agc는 "하드웨어에 없는 능력(벡터·더블정밀도)을 소프트웨어 계층으로 만든다"는 아이디어의 반세기 전 실물이다. JVM·CPython·WASM·심지어 게임 스크립트 엔진까지 전부 이 계보다. "성능을 조금 내주고 표현력과 코드 밀도를 얻는다"는 트레이드오프를 눈으로 확인할 수 있다.
실시간 코드는 "지금 이 몇 줄은 인터럽트가 끼어들면 안 된다"는 임계 구역(critical section)을 관리해야 한다. AGC는 INHINT(인터럽트 금지)와 RELINT(허용)로 이를 명시적으로 감싼다. 뮤텍스·스핀락·cli/sti가 하는 일의 밑바닥을, 추상화 없이 날것으로 배우기에 좋다.
기술만이 아니다. AGC 팀은 의도·불안·농담·출처를 주석에 남겼다. BURN_BABY_BURN이라는 파일명의 유래(1965년 LA 폭동기 DJ의 유행어)까지 코드 헤더에 설명돼 있다. "왜 이렇게 짰는지"를 미래의 독자에게 남기는 태도는, 반세기 뒤 이 저장소가 밈이 되고 교보재가 된 결정적 이유다. 좋은 주석은 코드의 수명을 늘린다.
이 저장소의 기여 규칙(오타까지 스캔본대로 보존)은 극단적이지만, 출처와 재현성을 최우선으로 두는 아카이빙의 모범이다. 데이터셋·연구 코드·법적 증거처럼 "원본 그대로가 가치인" 작업에서, 무엇을 고치면 안 되는지·변경 이력을 어떻게 남길지에 대한 원칙을 배울 수 있다.
이 코드가 실제로 실행된 기계의 제원이다. 오늘날 기준으로는 믿기 어려운 사양으로 사람을 달에 보냈다(아래 수치는 널리 알려진 역사적 AGC 사양이며, 저장소가 아니라 하드웨어의 스펙이다).
| 항목 | 제원 |
|---|---|
| 워드 크기 | 15비트 + 패리티 1비트 = 16비트 |
| 클럭 | 약 2.048 MHz(메모리 사이클 ≈ 11.7μs) |
| RAM(Erasable) | 약 2,048 워드 — 자성 코어 메모리 |
| ROM(Fixed) | 약 36,864 워드 — 코어 로프(손으로 짠 ROM) |
| 명령어 | 기본 ~11종 + EXTEND 확장 명령 |
| 무게 / 전력 | 약 32kg / 약 55W |
| 입출력 | DSKY(숫자 디스플레이 + Verb/Noun 키패드) |
AGC의 고정 메모리 36K워드는 대략 요즘 이모지 한두 개의 데이터 크기다. 그 안에 실시간 OS, 소프트웨어 VM, 착륙 유도 물리 전부가 들어갔다. 지금 이 문서를 띄운 브라우저 탭 하나가 AGC 메모리 전체의 수만 배를 쓴다. "제약 속의 우아함"이라는 말의 뜻을, 이 대비가 단번에 설명해준다.
저장소만으로는 실행이 안 된다. Virtual AGC를 함께 써야 한다. 대략의 흐름은 이렇다.
| 단계 | 도구 / 명령 | 결과 |
|---|---|---|
| 1. 소스 받기 | git clone --depth 1 https://github.com/chrislgarry/Apollo-11 | .agc 소스 확보 |
| 2. 어셈블러 준비 | Virtual AGC 설치(yaYUL 포함) | 어셈블 환경 |
| 3. 어셈블 | yaYUL MAIN.agc(각 프로그램 폴더에서) | AGC 기계어 이미지(코어 로프) |
| 4. 실행 | yaAGC 시뮬레이터로 이미지 로드 | 가상 AGC 구동 |
| 5. 조작 | yaDSKY 붙여 Verb/Noun 입력 | 우주비행사처럼 대화 |
실행 환경 구축이 부담이면, GitHub 웹에서 .agc 파일을 읽는 것만으로도 학습 가치가 크다. GitHub는 AGC 어셈블리 문법 하이라이팅을 기본 지원하고, 원본 팀의 성실한 주석 덕에 "이 루틴이 무엇을 하는지"가 대체로 읽힌다. THE_LUNAR_LANDING.agc부터 열어 주석을 따라가 보라. 실행은 그다음 욕심내도 늦지 않다.
저장소를 클론한 뒤 grep -rn "HOPE HOPE HOPE\|OFF TO SEE THE WIZARD\|SEE IF HE'S LYING\|NUMERO MYSTERIOSO" .로 유명 주석을 직접 찾아본다. 각 주석이 어떤 코드 위에 붙어 있는지(무슨 동작을 하는 줄인지) 위아래 맥락을 읽어보라. 코드와 농담의 관계를 이해하는 것이 이 저장소 감상의 출발점이다.
Luminary099/MAIN.agc를 열어 $include 목록을 순서대로 읽으며, "착륙선 프로그램이 어떤 모듈들로 구성되는지" 자기 손으로 목차를 만들어본다. 그중 THE_LUNAR_LANDING·ASCENT_GUIDANCE·EXECUTIVE가 각각 착륙/이륙/스케줄링의 어디에 해당하는지 표로 정리하라. 대형 어셈블리 프로젝트의 "조립 구조"를 읽는 훈련이다.
EXECUTIVE.agc의 NOVAC 루틴이나 THE_LUNAR_LANDING.agc의 P63 도입부를 골라, CA·TS·TC·EXTEND·INHINT 같은 명령을 한 줄씩 "이 줄은 무엇을 한다"로 한국어 주석을 달아본다. 모르는 옵코드는 Virtual AGC 문서에서 찾아라. 극소수 명령으로 로직을 짜는 RISC적 사고가 몸에 붙는다.
Virtual AGC를 설치해 yaYUL로 Comanche055 또는 Luminary099를 어셈블하고, yaAGC+yaDSKY로 구동해 Verb 16 Noun 36(시계 표시) 같은 기본 명령을 입력해본다. 반세기 전 우주비행사의 조작을 내 화면에서 재현하는 경험이다. 어셈블 에러가 나면 그 자체가 "고정 메모리 뱅크 배치"를 이해하는 좋은 계기다.
ALARM_AND_ABORT.agc·EXECUTIVE.agc·RESTARTS_ROUTINE.agc를 함께 읽으며, "작업 슬롯이 넘칠 때 어떤 코드가 1202를 띄우고, 어떻게 낮은 우선순위 작업을 버리고 재시작하는가"의 흐름을 직접 다이어그램으로 그려본다. 실제 착륙 때 무슨 일이 있었는지를 코드 레벨에서 재구성하는, 이 저장소 최고 난도의 감상법이다.
레지스터·누산기·메모리 주소·옵코드 같은 기본 개념을 정리하고, AGC의 15비트 워드·기본/확장 명령 체계와 대조한다. 요즘 아키텍처(x86·ARM·RISC-V) 중 하나의 어셈블리를 조금 맛본 뒤 AGC로 돌아오면, "명령어 집합이 적을 때의 설계"가 선명해진다. AGC의 EXECUTIVE.agc 한 루틴을 교재로 삼아라.
우선순위 스케줄링, 협조형 vs 선점형 멀티태스킹, 임계 구역과 인터럽트를 공부한다. AGC의 EXECUTIVE(작업)·WAITLIST(타이머)·INHINT/RELINT(임계 구역)를 실물 사례로 삼고, FreeRTOS 같은 현대 RTOS의 태스크·세마포어와 비교하라. 1202 알람이 "우아한 실패"의 교과서임을 코드로 확인하는 주차다.
바이트코드, 스택 머신, 인터프리터 루프의 개념을 익히고 INTERPRETER.agc가 더블정밀도·벡터 의사명령을 어떻게 해석·실행하는지 추적한다. 간단한 계산기용 바이트코드 VM을 직접 하나 만들어보면, "하드웨어에 없는 능력을 소프트웨어로 얹는다"는 발상이 손에 잡힌다. JVM·CPython 바이트코드와 이어 읽으면 계보가 완성된다.
메모리 제약, 결정론적 실행, 고장 감내(fault tolerance), 재시작 전략을 정리한다. AGC의 코어 로프(불변 ROM)·재시작 프로텍션·알람 체계를 현대 항공우주 표준(예: DO-178C의 개념)과 대비하며, "사람 목숨이 걸린 코드는 어떻게 다른가"를 생각한다. 마지막으로 자기 분야(웹·앱)에도 옮겨올 신뢰성 원칙 3가지를 스스로 정리하며 마무리한다.
BANK·EBANK=·SETLOC 지시어로 제어.DLOAD·VXSC 등 의사명령을 해석 실행. JVM·바이트코드의 조상 격.PINBALL_GAME_BUTTONS_AND_LIGHTS.agc가 담당..agc를 AGC 기계어로 번역하는 현대 어셈블러(원조 YUL의 재구현). Virtual AGC(개발자 Ron Burkey)는 yaYUL·시뮬레이터(yaAGC)·DSKY(yaDSKY)를 제공. 이 저장소를 실제로 돌리는 열쇠.CA/TS/TC/CCS…)을 갖고, EXTEND 접두로 확장 명령(DCA/DXCH/WAND…)을 켠다. 적은 옵코드로 표현력을 넓히는 설계.CONTRACT_AND_APPROVALS.agc에 남아 있다.Translations/README.ko_kr.md — 한국어 README