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