제가 처음 코딩에 관심을 가졌던게...
페이지 정보
본문
안녕하세요. 펌웨어로 밥벌이하는 아저씨입니다.
지금은 코딩을 하지 않으면 밥줄이 끊기는 삶을 살고 있으니 코딩하는게 숨쉬는 것 만큼 당연합니다. 문득 나에게 코딩이라는 것이 당연하지 않았던 적이 언제부터 였드라하고 생각해 봤습니다. 그러다가 그럼 내가 코딩이라는 아예 몰랐던 때는 언제였지? 하며 기억을 거슬러 과거로 가 봤습니다.
아마 확실치는 않은데 국딩 시절 (저는 국민학교 졸업했어요..) 도스 (MS-DOS라고 아시나요?) 에서 게임하면서 게임 위자드 프로로 게임 데이터 에디팅해서 게임할 때부터 였던것 같네요.
뭐 대부분은 아실거라 생각되지만 그래도 혹시 모르는 분이 계실까봐 간략하게 용어 설명하고 지나 가겠습니다.
도스라는 것은 디스크 오퍼레이팅 시스템(Disk Operating System)의 약자로 그냥 유닉스 비슷하게 만든 마이크로소프트가 윈도우즈를 만들기 전까지 세상을 풍미했던 운영체제 입니다. 생각해보면 지금도 쓰고 있는 웬만한 운영체제는 디스크 오퍼레이팅 시스템이죠. 물론 디스크 기반으로 동작하지 않는 운영체제도 많아요. 다만 널리쓰이는 대부분 운영체제(윈도우즈, 맥오에스, 리눅스, 유닉스)는 다 디스크 기반입니다. 아무튼 이 시절 도스 특징은 멀티 태스킹이 안됐다는 것입니다. 그래서 비슷하게 구현하려고 확장 메모리라는 영역에 램 상주 프로그램을 올리고 특정 키보드 입력을 후킹해서 컨택스트 스위칭 하는 등의 꼼수를 쓰기도 했는데요. 이것이 후술할 게임 위자드 프로라는 프로그램의 동작 원리이자 당시 유행했던 램 상주 바이러스 백신 등의 원리이기도 했습니다.
게임 위자드 프로(Game Wizard Pro)라는 프로그램은 이름에 게임이라는 단어가 들어가 있는 만큼 주요 용도는 게임을 하면서 실시간으로 게임 데이터를 조작하는 것입니다. 예를 들어 내 캐릭터가 적에게 얻어 맞아 현재 HP가 10밖에 안남은 상황이다. 이럴때 게임 위자드 프로로 바로 에디팅 해서 HP를 255로 올려주는 것이지요.
게임 위자드 프로의 원리는 이렇습니다. 추적하고 싶은 데이터(예를 들면 HP)의 현재 값을 입력합니다. 그리고 해당 데이터가 값이 바뀌면(HP가 늘거나 줄면) 바뀐 값을 다시 게임 위자드 프로에 입력합니다. 이 과정을 반복하면 게임 위자드 프로가 특정 메모리 어드래스를 찾아냅니다. 해당 메모리 값을 바로 바꾸는 것이지요.
사실 그냥 인 메모리 에디터(In-Memory editor)입니다. 당시 도스는 실행 중인 프로세서의 메모리 영역에 대한 아무런 보호 장치가 없었기 때문에 그냥 메모리 주소 때려 넣어서 값을 바꿔 버리면 그만이었죠. 대부분 실 사용에서는 그닥 쓸일이 없었지만 게임을 보다 쉽게 즐기고 싶은 어린이들(!)에게는 몹시 매력적이었습니다.
저는 게임 위자드 프로 쓰면서 16진수를 익혔어요. 국딩 시절이라 16진수의 개념도 몰랐거든요. 하지만 그냥 외웠어요. FF면 255로 바뀐다. 2710이면 10000으로 바뀐다. 이런식으로 필요한 숫자를 외워 버렸죠. 16진수 개념을 제대로 이해 한건 나중에 고등학생이 되어서 입니다.
중딩이 되어서도 게임 위자드 프로로 쉽게 쉽게 게임을 하던 중 당시 하이텔 무슨 게임 동호회 비슷한 곳에서 게임 에디팅에 대한 강좌 글을 읽습니다. 저는 게임 위자드 프로로 게임 에디팅에 대해서는 이미 알만큼 안다고 생각하고 있던 꼬꼬마 였기 때문에 매우 관심이 생겨서 해당 글을 정독했죠.
해당 글의 내용은 인메모리 에디팅에 대한 설명은 아니었습니다. 세이브 파일 에디팅에 대한 내용이었죠. 당시 PC 통신 (하이텔, 나우누리, 천리안)에는 고등학생 형(누나)들이나 대학생 형(누나)들이 특정 게임 세이브 파일 에디터 같은 것을 만들어 올리곤 했습니다. 게시판에는 특정 게임 세이브 파일에 오프셋 어디는 무슨 데이터다 이런거 찾아서 올리고 토론하는 글들도 많았고요. 낭만이 있던 시절이었습니다.
어린 저는 헤깔렸습니다. 게임 에디팅은 게임 위자드 프로로 하는 건데 왜 세이브 파일을 고치지? 그리고 해당 글을 모두 읽고 난 다음에서야 실행 로직과 데이터의 개념을 이해 했고, C언어로 세이브 파일을 읽어서 특정 숫자를 넣은 다음 원하는 숫자를 넣으면 다음번에 게임 할 때 세이브 파일을 부르면(그땐 '부른다'라고 표현했습니다..) 바뀐 숫자로 나온다는 것을 알았습니다.
그리고는 아주 손쉽게 터보C 2.0도 얻을 수 있었습니다. 그냥 자료실에 있었죠. (아... 불법 복제가 횡횡하던 시절..) 그렇게 저는 C언어로 첫 코딩을 시작했습니다.
딸자랑마스터님의 댓글
고딩 꼬꼬마 시절... 당시 가장 호환성이 좋았던 320x200 해상도로
게임 만들어보겠다고 하다가 메모리 부족해가지고
메모리 모델 HUGE였나? 엄청 높게 올려보기도 하고 온갖 삽질을 하던 기억이 나네요.
간실장님의 댓글
일반 C보다 휠씬 좋았던 것으로 기억하는데.. 정확한지는 기억이 가물가물..
panicstyle님의 댓글
/Vollago
kewlbear님의 댓글