- 게임보이 카트리지를 직접 제작하기 위해 수년간의 연구와 설계 과정을 거침
- 이 글은 커스텀 게임보이 카트리지를 만드는 데 필요한 주요 기술적 정보를 초심자 관점에서 체계적으로 정리함
- 게임보이는 간단하면서도 확장성이 뛰어난 하드웨어 구조 덕분에 레트로 게임 개발 및 하드웨어 해킹 커뮤니티에 매력적인 플랫폼임
- 카트리지는 게임 데이터와 추가 하드웨어(예: RTC, 센서 등)를 내장할 수 있어 게임보이에 새로운 기능을 부여함
- 메모리 뱅크 컨트롤러(MBC) 회로를 통해 용량 확장 및 선택적 메모리 접근이 가능해지며, 다양한 방식으로 게임 실행이 이루어짐
소개 및 목표
- 저자는 개인적으로 게임보이 카트리지를 완전히 새로 제작하는 목표를 세움
- 게임보이 카트리지 내부 구조와 작동 원리에 대한 지식을 오픈 소스로 정리해 공개함
- 글의 목적은 난이도 있는 기술 정보를 초보자 시각에서 누구나 따라올 수 있도록 재구성하는 데 있음
- 하드웨어의 내부 동작 원리가 아닌, 외부에서 관찰되는 행동(behavior) 중심으로 설명함
- DMG(초기형 게임보이)의 SoC를 기준으로 설명하며, 게임보이 계열 기기의 기본적인 카트리지 인터페이스는 유사함
게임보이 플랫폼의 특별함
- 게임보이는 단순함과 설계의 직관성 덕분에 하드웨어와 소프트웨어 구조를 머릿속에서 파악하기 쉬움
-
이식성과 저전력 특성, 복잡한 보호장치나 지역 락이 없는 구조로 누구나 개발 가능함
-
기술 문서, 하드웨어 도면, 커뮤니티 기반 자료가 풍부하게 축적되어 있음
-
공식/비공식 게임 라이브러리가 방대하며, 오픈소스 개발 툴체인 및 시각적 스크립팅 툴 등이 활발하게 관리되고 있음
- 하드웨어 구동기뿐 아니라 정확한 에뮬레이터 및 FPGA 구현 등 확장성 높은 생태계가 조성됨
게임보이 카트리지 기본 구조
- 과거 콘솔 기기는 소프트웨어와 하드웨어의 경계가 불명확함
- 게임보이에는 운영체제나 내장된 비휘발성 저장장치가 없음. 모든 실행 코드와 추가 하드웨어가 카트리지에 내장됨
- 이로 인해 카트리지가 완전히 작동해야만 게임보이가 부팅 및 작동함
- 카트리지 하단의 32핀 '엣지 커넥터' 는 본체와 신호를 주고받는 중심 인터페이스임
- 카트리지와 본체 사이에는 전원, 제어(읽기/쓰기/칩선택), 주소버스(16비트), 데이터버스(8비트) 로 신호가 분류됨
버스(Bus) 및 동작 원리
-
버스란 여러 부품이 하나의 신호선을 공유해 데이터를 동시에 전달할 수 있는 구조임
- 게임보이의 CPU는 원하는 주소를 주소버스에, 데이터를 데이터버스에 전달
- 버스 구조가 병렬(parallel) 이다 보니, 각 비트에 해당하는 핀이 실제로 존재함
- 속도 면에서 유리하지만, 버스가 공유되는 만큼 충돌/컨텐션(동시쓰기) 위험이 있음
- 여러 개의 IC가 동시에 데이터를 출력할 경우, 쇼트(과열 및 고장 위험) 가 발생하므로, 항상 하나의 IC만 활성화되어야 함
게임보이의 주요 메모리 분류
- 게임보이는 최대 4종류 메모리 IC(내장 RAM, 비디오 RAM, 카트리지 ROM, 카트리지 RAM)를 장착 가능
- 실제로 비디오 RAM은 독립된 버스를 사용하므로 일반적인 설명에선 제외
- 내장/카트리지 RAM/ROM 셋은 같은 주소버스와 데이터버스를 공유함
- 반드시 한 번에 하나의 칩만 데이터버스에 쓰기/읽기 작업을 수행함
- 실무적 용어로 내장RAM(WRAM), 카트리지RAM(SRAM), 비디오RAM(VRAM), 고속RAM(HRAM) 으로도 지칭됨
Chip Select(칩 선택)과 회로 구성
- 각 메모리 칩에는 칩 선택 신호(CS/CE, Chip Select/Chip Enable) 핀이 존재
- 칩 선택 신호 상태에 따라 특정 칩만 데이터버스에 접근 가능
- 게임보이는 칩 선택을 위해 주소버스의 상위 3비트(A15, A14, A13) 와 CPU의 _CS 핀을 재활용함
- 이러한 연결은 동시에 두 칩 이상이 활성화되지 않게 보장함
- 예를 들어, A15가 0일 때만 ROM 칩이 활성화되며, RAM은 별도의 논리로 활성화됨
메모리 맵(Memory Map)과 프로그래머 관점
- 하드웨어적 주소/핀 상태는 추상화되어, 프로그래머는 논리적 메모리 맵만을 인식함
- 16비트 주소 공간 내에서 0x0000–0x7FFF주소 구간은 카트리지 ROM, 0xA000–0xBFFF는 카트리지 RAM, 0xC000–0xDFFF는 내장 RAM으로 매핑됨
- 특정 주소 접근 시 자동으로 원하는 메모리 범위가 활성화되고 나머지는 비활성화됨
-
메모리 맵 자료는 게임보이 문서에서 중요한 참조 자료로 활용됨
메모리 뱅크 컨트롤러(MBC; Memory Bank Controller)
- MBC는 게임보이 카트리지에서 32KB 이상의 ROM 용량 및 추가 RAM/주변기기 연결을 가능하게 하는 핵심 회로
- 다양한 종류의 MBC가 시판되었으나, 여기서는 비교적 단순하고 범용적인 MBC5 기준으로 설명함
- MBC5는 스위칭(banking) 기법을 통해 최대 8MB ROM, 128KB 카트리지 RAM을 지원
- RAM의 접근 제어, 외부 센서/RTC 등 별도 하드웨어 제어도 가능
- 카트리지의 ROM 주소핀 중 상위 비트(A22~A14)는 MBC5에서 동적으로 제어하며, 하위 비트만 본체의 주소버스에 직접 연결함
ROM 뱅킹(Banking) 원리
- 게임보이 CPU는 최대 64KB 주소 공간, 실제로는 ROM 접근에 32KB(16KB+16KB)만 사용
-
MBC5는 ROM 칩의 상위 주소(뱅크 선택) 를 직접 제어해, 16KB 단위로 원하는 구간을 CPU 주소 공간에 매핑함
- 하드웨어적으로는, CPU의 주소버스 하위 14비트(A0~A13)가 직접 ROM 칩에 연결되고, 나머지는 MBC5에서 입력받음
- 실제 게임 실행 중 소프트웨어가 특정 메모리 주소에 값을 쓸 때, MBC가 이를 감지해 내부적으로 선택 뱅크 값을 갱신함
MBC 프로토콜 및 메커니즘
- MBC5는 특정 주소/제어 신호 조합을 감지해서 ROM 뱅크 선택, RAM 뱅크 선택, 기타 기능 활성화/비활성화 등의 작업 수행
- 예를 들어, A15=0, A13=1, A14=0(0x2000~0x3FFF) 구간에 쓰기 동작 시, 데이터버스에 실린 값을 ROM 뱅크 번호로 기록
- 프로그래머는 실제로 뱅크 전환 작업이 저수준 회로 제어가 아닌, 특정 주소에 데이터를 기록하는 것처럼만 코딩
- 카트리지 RAM 사용, 센서, RTC 등도 비슷한 패턴으로 제어됨
- 이러한 버스 리유즈(재활용) 기법은 부품 수를 줄이고 가격을 낮추는 효과를 줌
결론 및 커뮤니티 활용
- 게임보이 카트리지 구조의 특이점은 저가·고신뢰성·확장성에 있음
- 직접 카트리지 제작 시, 위 구조와 프로토콜에 대한 정확한 이해가 필수적임
- 커뮤니티와 풍부한 문서를 적극 참조하면, 하드웨어-소프트웨어 통합 개발 과정의 진입 장벽을 크게 낮출 수 있음
참고 자료 및 추가 학습 경로
(해당 글의 후반부에서는 MBC 디자인 변형, EEPROM/플래시 메모리, 입출력 IC, 주변기기 통합 등 추가적으로 복잡한 요소가 다뤄지나, 상기의 항목은 게임보이 카트리지 동작 원리에 대한 핵심 내용에 해당함)