1561
2018-09-19 10:31:02
21
어셈블리로 작성된 코드네요 맨 아랫줄을 한 번 볼까요?
맨 왼쪽 0568 은 line number 같고 REF 8 LAST 1465 10,2617까지는 실제 프로그램에 들어가는 부분은 아닐겁니다
https://github.com/chrislgarry/Apollo-11/blob/master/Luminary099/ALARM_AND_ABORT.agc
위의 링크를 눌러보시면 저런 부분이 없는 것을 볼 수 있죠
하지만 인쇄를 해서 눈 디버깅을 하려면 저런 부분이 꼭 필요하겠습니다
그 다음에 있는 3 0100 이 부분이 ROM에 들어가서 나중에 실행되는 바이너리라고 불리는 부분인데
8진수로 쓰여져 있고요 맨 앞의 3이 명령어(opcode)이고 그 뒤의 0100이 operand라고 부르는 부분이죠
메모리 주소값이 될 수도 있고 직접 숫자를 가질 수도 있지 않을까 싶습니다
그 옆의 C는 뭔지 모르겠고 (혹시 이 명령은 캐리를 건드리는 명령이다 뭐 이런거?)
그 옆의 CA FLAGWEC4가 해밀턴이 짠 코드죠
그 옆의 IS MARK SLEEPING DUE TO ASND BUSY는 당연히 주석이겠고요
하는 일은 매우 단순해 보입니다
TS-CAF-TCF가 계속 반복되는데 찾아보니 TS-CAF는 현재 CPU 레지스터 A의 값을 RAM의 어딘가에 저장하고
캐리 값을 정리하는 용도라고 하고요
TCF는 무조건 분기, 즉 JUMP 명령입니다
저 종이 한 페이지에 39줄의 코드가 있는데 한 줄당 코드를 저장하는데 최소 15비트가 필요합니다
그러므로 15 x 39 = 약 73바이트 크기의 SW인거죠
찾아보니 Apollo Guidance Computer의 ROM 용량이 16 bit word가 36,864개 있었다고 하네요
그러니까 ROM이 72KB 였던거죠