0. Nintendo Gameboy

윤상면·2026년 1월 4일

Emudev

목록 보기
1/2
post-thumbnail

초등학교 1학년 때, 메이플스토리가 하고 싶었던 필자는 아버지께 부탁하여 당시 데스크탑에 메이플스토리를 설치하였다. 몇 시간 동안이나 설치가 지속되었고, 메이플 아일랜드에서 주니어 스톤볼을 잡고 바로 컴퓨터를 꺼야 했던 그 때의 아쉬움이 아직도 생생하다.

3년이 지난 후 2011년, 마인크래프트라는 게임의 플레이 영상이 유튜브에 올라오고 있었다. 친구들과 함께 하고 싶었던 나는 마인크래프트 1.5.2 서버 여는 법을 네이버에 검색해가며 버킷을 다운받고, 파일을 메모장으로 열고, true를 false로 바꿔가며 결국 서버를 열었다.

컴퓨터가 뭘까? 뭐가 어떻게 돌아가는 걸까? 그런 의문이 가슴 속에 자리잡고 있었다. 고등학교 때 컴퓨터개론이라는 전공서적을 보게 되어 홀린 듯이 사서 읽었다. 진법이니, 프로그래밍언어니, 당시에는 도저히 알아들을 수가 없었다.

무섭게 치솟고 있던 컴퓨터공학과의 인기 탓에 나는 전기정보공학부로 진학하였다. 기초회로이론, 전자기학, 신호 및 시스템 등 무자비한 전공필수에 나는 컴퓨터에 대한 호기심이 들 새도 없이 시달리고 있었다.

4학년이 되어서야 나는 컴퓨터조직론이라는 수업을 듣게 되었다. 그 수업은 내 오랜 의문에 대한 길고 긴 대답이었고, 내 마음 속에 다시 한 번 작은 불씨를 피워 주었다.


이 시리즈는 그 수업의 내용을 기록하기 위해 연재될 것이다. 연재를 도와주기 위해 내 추억 속의 작은 닌텐도를 가져왔다.

닌텐도도 결국 작은 컴퓨터다(임베디드 시스템이라는 아주 멋진 이름이 있지만). 필자는 닌텐도 게임보이를 소재로 사용하여 일반적인 컴퓨터 구조에 대해 나름대로 정리하고 배운 바를 설명하고자 한다.

필자는 이번 방학의 목표가 C++기반 게임보이 에뮬레이터를 만들어 포켓몬스터 적 버전을 플레이하는 것이었다. 모든 코드를 최대한 AI의 도움 없이 작성하고자 노력하였고, 한 달 동안 도서관에 박혀 열심히 뚝딱거려서 목표를 달성할 수 있었다. 에뮬레이터는 github에 공개해놓았다.


본격적인 연재를 시작하기에 앞서 간단한 Introduction을 진행하고자 한다.

위 그림은 컴퓨터 시스템의 계층 구조를 잘 드러내주고 있다. 컴퓨터가 뭔가? 에 대해 대답하기 위해서는 각 레이어 및 인터페이스에 대해 전부 이해하고 있어야 한다.

전부 이해하기는 어렵고 너무 복잡하다. 컴퓨터조직론, 혹은 컴퓨터구조(Computer Architecture)라고 불리우는 수업은 가장 중앙에 위치하고 있는 하나의 레이어에 대해 알려주는 수업이다. 아키텍처 위에는 운영체제 및 응용 프로그램 같은 소프트웨어가, 아래에는 회로 및 소자 수준의 하드웨어 레이어가 있다. 각 레이어가 너무 복잡하다보니, 현대에는 각 레이어의 전문가들이 모여 하나의 시스템을 설계하게 되었다. 즉 다른 레이어에 대해 전부 알 필요는 없고, 뭉뚱그려서 이해하기 쉽게 만들게 표현하여 의사소통을 하게 되고 이를 abstraction이라고 부른다.

우리가 살펴볼 아키텍쳐는 컴퓨터가 어떻게 동작하는지(=functionality)에 관한 일종의 약속을 정하고, 이를 위/아래 레이어에 알려주는 역할을 한다. 자동차를 예로 들면 엑셀을 밟으면 앞으로 나아가고, 브레이크를 밟으면 자동차가 멈춘다는 사실은 제조사와 운전자 모두에게 이미 약속된 사항이다. 엑셀을 어느 정도의 힘으로 밟아야 60km/h에서 100km/h로 올라가는지는 아키텍쳐의 영역을 벗어난다. 이는 자동차 엔진의 스펙 등을 고려해야 하는 마이크로아키텍쳐의 영역이다.

즉 아키텍쳐란 컴퓨터 시스템의 개념적인 구조 및 동작을 프로그래머 입장에서 묘사하는 것을 의미하고, 실제 컴퓨터 시스템이 어떻게 구현되어 있는지와는 무관하다.

LG 그램에서는 돌아가는 게임이 애플 M2 맥북에서는 지원되지 않는 경우를 들어본 적이 있을 것이다. 이는 근본적으로 두 컴퓨터의 아키텍쳐가 다르기 때문이다.

위 사진을 보면 Ubuntu를 설치할 때 Intel or AMD 아키텍쳐인지 ARM 아키텍쳐인지에 따라 선택지가 나뉘어있는 것을 알 수 있다. 일반적으로 Windows에서는 Intel 아키텍쳐를, 애플 실리콘은 ARM 아키텍쳐를 사용한다. 아키텍쳐가 다르다는 것은 자동차로 치면 운전하는 방식이 아예 다르다는 것이다. 그렇기에 Intel 아키텍쳐에서 돌아가는 프로그램이 애플 실리콘에서 돌아갈리가 없는 것이다.

게임보이 역시 약속된 사항이 존재한다. 구체적으로 뭐가 어떻게 약속이 되어있는지 살펴보도록 하자.

0개의 댓글