이 프로그램은 IBM 1401 심볼릭 프로그래밍 시스템, SPS로 작성 되었습니다. SPS는 1959년 말에 IBM 1401과 함께 나온 아주 원시적인 어셈블러인데, 사용이 비교적 쉽고 마그네틱 테이프와 사용하기 좋은 Autocode가 같이 출시 되었기 때문에 SPS는 주로 성능이 비교적 떨어지고 메모리가 작은 시스템이나 사정상 어쩔 수 없이 천공카드만 사용해야하는 시스템에 사용하게 됩니다. 그리고 이후 IBM 1401용 코볼과 포트란이 나오면서 생산성이 떨어지는 이 언어를 굳이 쓸 필요가 없어지게 되어 자연스럽게 도태됩니다. 뭐 말은 그래도 어차피 그냥 기본으로 컴퓨터 자체에 내장되어 있는 기능인 셈이라 급할때 쓰고 그랬다 캅니다.
우리가 1960년대로 돌아갔다고 치고 (아니면 미국 컴퓨터 역사 박물관에 갔거나) 마그네틱 테이프 리더가 없고 오직 천공카드로만 작동하는 IBM 1401 시스템이 있다고 가정합시다.
- 시간이 남아돈다면 손으로 직접 80열 천공카드에 구멍을 뚫어도 되겠지만 키펀치를 이용해서 해당 카드를 git clone 해옵니다. 자세한 사용 방법은 IBM 24/26 키펀치 레퍼런스 매뉴얼를 참고하세요.
- 이제 천공카드를 손에 넣었다면 IBM 1402 측면의 Read Hopper에 카드 한장을 넣습니다.
- 1401 컨트롤 패널에 가서 스위치 A를 킵니다. 이 스위치 A는 우리가 천공카드 리더에 넣은 카드가 마지막 카드라는 걸 알려주는 역할을 합니다.
- 1402 전면 컨트롤 패널의 LOAD 버튼을 누릅니다. 천공카드에 쓰인 내용이 1401내 저장영역 001-080에 복사됩니다.
- 1401이 텍스트를 프린터 저장영역으로 넘겨준 뒤 프린터 1403이 해당 내용을 종이에 출력합니다.
- 짜잔! 아이돌을 그만두었습니다!
일단 제가 아는한 1401의 모든 명령은 옵코드 1자리 / A 주소 오퍼랜드 3자리 / B 주소 오퍼랜드 3자리, 해서 7자가 한 명령어를 이루고 있고요. 저 80열 천공카드에 작성된 내용을 텍스트로 풀면 다음과 같습니다.
,008015,022029,036043,050054,055062,063065,069081/333/M0802132F1.065IDORU YAMERU
,번호번호번호 꼴의 워드 마크 영역은 옵코드가 어디서 끝나는지 표시하기 위한 것으로서 쉼표 뒤 두 오퍼랜드는 옵코드와 옵코드 사이 공간을 나타냅니다.
그 뒤 프로그램 영역을 분해해보면
/333
저장영역 333-300 만큼 데이터 클리어
/
위 옵코드 실행 이후 레지스터에 남아있는 주소 밑 100영역 만큼 클리어(299-200) M080213
080의 데이터를 213번으로 옮김
2
프린터 출력
F1
캐리지 리턴 (천공카드가 리더에서 반대편 아웃풋 호퍼로 튀어나옴)
.065
065번 저장 영역에서 HALT
/는 뒤 오퍼랜드부터 해당 오퍼랜드의 N00까지 데이터를 클리어 해주는 옵코드로 /299를 하면 299200이 지워지게 되고 /301을 하면 301300이 지워집니다.
1401이 있던시기에는 서드파티 주변기기같은게 있을리가 만무했으므로 신경 쓸 필요 없이 그냥 단순무식하게 주변기기가 사용하는 저장주소를 할당해서 그냥 그 주소들을 바로 사용했습니다. 위에서 카드 LOAD를 누르면 그냥 그대로 001-080 영역에 복사됐듯이, 프린터도 출력시 201-333를 그대로 종이에 뱉어내는 식입니다.
따라서 우선 프린터 저장영역을 비워주고, 아까 LOAD하면서 천공카드가 001에서 080으로 복사됐으니 080번에서 끝나는 데이터 (IDORU YAMERU)를 213번으로 옮기고 출력하면 한칸 띄우고 202번부터 IDORU YAMERU를 출력하게 됩니다. 그리고 남은건 천공카드를 빼고 프로그램을 끝내주면 되는 것입니다.