TIS-100이라는 인디 게임을 들어 보신 적 있으신가요?
무려 "어셈블리" 언어를 테마로 한 무시무시한 게임입니다.
무려 리눅스에서도 돌아가죠.
혹해서 $7 내고 질렀습니다.
바로 이 녀석이 TIS-100 인트로 화면입니다.
도스 화면 아니냐구요? 잘 보세요 -_-;; 게임 화면 맞습니다.
TIS는 Tessellated Intelligence System을 줄여 만든 거랍니다.
그리고 다음 그림이 스테이지 선택 화면입니다. 아재분들은 286, 386 시절의 도스 게임이 떠오를 수도 있을 거에용 ㅋㅋㅋ
믿으실지는 모르겠지만 이게 스테이지 선택 화면입니다. SEGMENT 00150, SEGMENT 10981 이러헥 나온 게 각 스테이지입니다! 색이 밝은 건 지금 선택 가능하다는 거구요, 어둡게 되어 있고 REPAIR N MORE 후 블라블라된 거는 아직 잠긴 상태인 거구요.
각 스테이지는 퍼즐입니다. 프로그래밍 퍼즐입니다. 퍼즐 스타일의 마치 TDD를 연상시킵니다.
문제를 줍니다. 테스트 케이스도 줍니다. 그래서 내 프로그램이 테스트 케이스를 100% 맞춰야 스테이지 클리어 되는 겁니다 -_-
프로그램은 간단한 어셈블리입니다. 하지만 프로그램을 모르는 사람은 절대 쉽게 시작할 수 없는 게임(?)입니다. 이미 어셈블리 코딩이라는 컨셉 자체가 ㅋㅋㅋ
본 게임 화면입니다.
왼쪽 위에 문제.
그리구 그 밑에는 테스트 케이스.
그리구 12개의 사각형이 있죠? 저게 작은 컴퓨터 노드라고 보면 됩니다.
TIS는 무려 분산 시스템인 겁니다.
1행 2열의 노드에 IN.A 라고 적힌 것이 보이죠? 이제 저 노드로 입력값이 들어올 겁니다. 그럼 그 입력값을 꿍짝꿍짝해서 3행 3열의 OUT.A로 보내는 것이 이 스테이지의 목표입니다. 극초반 스테이지라 쉬운 프로세스입니다. 그냥 흘러들어오는 값을 다른 노드로 릴레이만 해 주면 되지만, 출력시 값을 두 배로 해 주는 것이 목적이죠.
감 잡히십니까? 각 노드마다 간단한 어셈 명령어로 문제를 푸는 겁니다. 아 빨갛게 COMMUNICATION FAILURE 된 노드는 현재 사용 불가능한 곳입니다. 아, 그리고 저 스샷은 제가 직접 풀어낸 정답 화면입니다. MOVE UP, DOWN 등의 문자들은 제가 입력한 코드인 거에요.
노드는 FETCH-스템과 EXECUTION-스텝까지 세심하게 구현되어 있습니다. 그 타이밍에 맞춰서 돌아가도록 짜야 합니다!
문제가 어려워지면 당연히 짜야 할 코드의 양도 늘어나는 겁니다!!
이제 대강 감이 잡히시죠? 그럼 어셈블리는, 어떤 걸 쓰냐구요?
게임이니까 재미를 위해 극히 제한된 별도의 명령어 세트를 제공합니다. 그건, 게임 메뉴얼을 봐야죠.
이 게임의 메뉴얼은, 메뉴얼이라기 보다는 레퍼런스 북이라고 보는 것이 맞을 것 같네요 ㅋㅋㅋ
딸랑 18페이지 가량이지만 게임 메뉴얼 치고 이런 압박감을 느낀 건 난생처음이었습니다.
이것이 메뉴얼의 첫 표지입니다. Randy 삼촌이 갑작스럽게 돌아가시고 나서 그가 개발 중인 기계를 분석하게 되는 거에요.
그리고 첫페이지...
그리고 부터는 TIS의 개념에 대한 설명이 나오구요. 7페이지부터는 명령어 세트를 설명합니다. 죄다 올릴 필요는 없을 것 같고 맛만 보여 드릴께요.
요약하자면, 프로그래밍으로 직접 쓸 수 있는 레지스터는 ACC 한 개구요, 명령어는 13개밖에 없습니다. 연산은 덧셈 뺄셈, NEGATION만 됩니다. 그리고 조건에 따른 JMP와 그 변종들, 이를테면 JEZ, JNZ, JGZ, JLZ 등등 밖에 없습니다. 기억장치가 더 필요하면 사방에 있는 옆 노드의 레지스터를 활용해야 하는 겁니다! 스택 노드라든가, 아직 더 해봐야 알겠지만 기본적인 건 이렇답니다.
메뉴얼... 아니 레퍼런스의 대미는 디버깅 기능, 및 시각화 기능 설명으로 끝맺습니다.
그래봐야 별 거 아닌 CTRL+C, CTRL+V 정도의 것들인데, 무려 디버깅이라는 용어로 플페이어를 압박한다는 점이 포인트죠.
아 명령어 앞에 느낌표! 를 붙이면 이게 디버깅 브레이크 포인트를 잡는 거립니다.
재밌을 거 같아 뵈나요?
제가 처음 플레이했을 때는 이건 개발자들의 인생 게임이다!는 생각을 했지만...
점차 플레이를 하면서, 문제가 어려워지면서 느끼는 건...
내가 일하고 나서 놀려고 게임을 하는데, 왜 게임을 하는 중에서조차 프로그래밍을 하면서 일 같은 놀이를 하고 있는가...
뭐 이런 변태스러운 시츄에이션일까...
뭐 그런 느낌이었습니다.
하지만 교육용으로는 엄청나게 괜찮은 가능성이 있어 보입니다.
이만 TIS-1000 간단한 소개 마칩니다.