게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
내가 지금 노는 건가, 일을 하는 건가. TIS-100
게시물ID : programmer_11787짧은주소 복사하기
작성자 : BePositive
추천 : 10
조회수 : 1154회
댓글수 : 11개
등록시간 : 2015/07/01 16:21:45
TIS-100이라는 인디 게임을 들어 보신 적 있으신가요?

무려 "어셈블리" 언어를 테마로 한 무시무시한 게임입니다.
무려 리눅스에서도 돌아가죠.

혹해서 $7 내고 질렀습니다.

바로 이 녀석이 TIS-100 인트로 화면입니다.
도스 화면 아니냐구요? 잘 보세요 -_-;; 게임 화면 맞습니다.

TIS-100_030.png

TIS는 Tessellated Intelligence System을 줄여 만든 거랍니다.

그리고 다음 그림이 스테이지 선택 화면입니다. 아재분들은 286, 386 시절의 도스 게임이 떠오를 수도 있을 거에용 ㅋㅋㅋ

TIS-100_025.png

믿으실지는 모르겠지만 이게 스테이지 선택 화면입니다. SEGMENT 00150, SEGMENT 10981 이러헥 나온 게 각 스테이지입니다! 색이 밝은 건 지금 선택 가능하다는 거구요, 어둡게 되어 있고 REPAIR N MORE 후 블라블라된 거는 아직 잠긴 상태인 거구요.

각 스테이지는 퍼즐입니다. 프로그래밍 퍼즐입니다. 퍼즐 스타일의 마치 TDD를 연상시킵니다.
문제를 줍니다. 테스트 케이스도 줍니다. 그래서 내 프로그램이 테스트 케이스를 100% 맞춰야 스테이지 클리어 되는 겁니다 -_-

프로그램은 간단한 어셈블리입니다. 하지만 프로그램을 모르는 사람은 절대 쉽게 시작할 수 없는 게임(?)입니다. 이미 어셈블리 코딩이라는 컨셉 자체가 ㅋㅋㅋ

본 게임 화면입니다.
TIS-100_026.png

왼쪽 위에 문제.
그리구 그 밑에는 테스트 케이스.

그리구 12개의 사각형이 있죠? 저게 작은 컴퓨터 노드라고 보면 됩니다.
TIS는 무려 분산 시스템인 겁니다.

1행 2열의 노드에 IN.A 라고 적힌 것이 보이죠? 이제 저 노드로 입력값이 들어올 겁니다. 그럼 그 입력값을 꿍짝꿍짝해서 3행 3열의 OUT.A로 보내는 것이 이 스테이지의 목표입니다. 극초반 스테이지라 쉬운 프로세스입니다. 그냥 흘러들어오는 값을 다른 노드로 릴레이만 해 주면 되지만, 출력시 값을 두 배로 해 주는 것이 목적이죠.

감 잡히십니까? 각 노드마다 간단한 어셈 명령어로 문제를 푸는 겁니다. 아 빨갛게 COMMUNICATION FAILURE 된 노드는 현재 사용 불가능한 곳입니다. 아, 그리고 저 스샷은 제가 직접 풀어낸 정답 화면입니다. MOVE UP, DOWN 등의 문자들은 제가 입력한 코드인 거에요.
노드는 FETCH-스템과 EXECUTION-스텝까지 세심하게 구현되어 있습니다. 그 타이밍에 맞춰서 돌아가도록 짜야 합니다!

TIS-100_027.png

문제가 어려워지면 당연히 짜야 할 코드의 양도 늘어나는 겁니다!!

이제 대강 감이 잡히시죠? 그럼 어셈블리는, 어떤 걸 쓰냐구요?
게임이니까 재미를 위해 극히 제한된 별도의 명령어 세트를 제공합니다. 그건, 게임 메뉴얼을 봐야죠.

이 게임의 메뉴얼은, 메뉴얼이라기 보다는 레퍼런스 북이라고 보는 것이 맞을 것 같네요 ㅋㅋㅋ
딸랑 18페이지 가량이지만 게임 메뉴얼 치고 이런 압박감을 느낀 건 난생처음이었습니다.

선택 영역_032.png

이것이 메뉴얼의 첫 표지입니다. Randy 삼촌이 갑작스럽게 돌아가시고 나서 그가 개발 중인 기계를 분석하게 되는 거에요.

그리고 첫페이지...
선택 영역_033.png


그리고 부터는 TIS의 개념에 대한 설명이 나오구요. 7페이지부터는 명령어 세트를 설명합니다. 죄다 올릴 필요는 없을 것 같고 맛만 보여 드릴께요.
선택 영역_034.png



요약하자면, 프로그래밍으로 직접 쓸 수 있는 레지스터는 ACC 한 개구요, 명령어는 13개밖에 없습니다. 연산은 덧셈 뺄셈, NEGATION만 됩니다. 그리고 조건에 따른 JMP와 그 변종들, 이를테면 JEZ, JNZ, JGZ, JLZ 등등 밖에 없습니다. 기억장치가 더 필요하면 사방에 있는 옆 노드의 레지스터를 활용해야 하는 겁니다! 스택 노드라든가, 아직 더 해봐야 알겠지만 기본적인 건 이렇답니다.

메뉴얼... 아니 레퍼런스의 대미는 디버깅 기능, 및 시각화 기능 설명으로 끝맺습니다.
그래봐야 별 거 아닌 CTRL+C, CTRL+V 정도의 것들인데, 무려 디버깅이라는 용어로 플페이어를 압박한다는 점이 포인트죠.

아 명령어 앞에 느낌표! 를 붙이면 이게 디버깅 브레이크 포인트를 잡는 거립니다.

재밌을 거 같아 뵈나요?
제가 처음 플레이했을 때는 이건 개발자들의 인생 게임이다!는 생각을 했지만...
점차 플레이를 하면서, 문제가 어려워지면서 느끼는 건...

내가 일하고 나서 놀려고 게임을 하는데, 왜 게임을 하는 중에서조차 프로그래밍을 하면서 일 같은 놀이를 하고 있는가...
뭐 이런 변태스러운 시츄에이션일까...
뭐 그런 느낌이었습니다.

하지만 교육용으로는 엄청나게 괜찮은 가능성이 있어 보입니다.
이만 TIS-1000 간단한 소개 마칩니다.

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호