TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 22 READS

PalmOS 레밍스 저장소로 보는, 손바닥만 한 메모리에서 고전 게임을 돌리던 기술

PalmOS 레밍스 저장소로 보는, 손바닥만 한 메모리에서 고전 게임을 돌리던 기술
SOURCE IMAGE · HACKER NEWS
PalmOS 레밍스 저장소로 보는, 손바닥만 한 메모리에서 고전 게임을 돌리던 기술

주머니 속 컴퓨터 시절의 게임

스마트폰이 나오기 전에는 주머니에 PDA라는 게 들어 있었어요. 그중 가장 유명했던 게 Palm이에요. 1996년 첫 Palm Pilot이 나온 뒤로 2000년대 초반까지 일정, 메모, 연락처 관리 기기의 대명사였어요. 이번에 GitHub에 올라온 palmos-lemmings 저장소는 이 Palm OS에서 돌아가던 레밍스(Lemmings) 게임 프로젝트예요. 요즘 개발자 눈으로 보면 거의 '디지털 고고학' 자료에 가까워요.

레밍스는 1991년 스코틀랜드의 DMA Design이 만든 퍼즐 게임이에요. 이 회사가 나중에 GTA를 만든 Rockstar North의 전신이기도 하죠. 생각 없이 앞으로만 걷는 작은 레밍들에게 땅 파기, 계단 만들기, 막아서기 같은 역할을 줘서 출구까지 안전하게 데려가는 게임이에요. 단순해 보여도 기술적으로는 꽤 까다로워요. 지형을 픽셀 단위로 파고, 쌓고, 터뜨리는 동안 여러 레밍이 동시에 그 위를 걸어 다녀야 하거든요.

Palm OS는 얼마나 빡빡한 환경이었냐면

지금 기준으로 Palm 기기의 사양은 상상하기 어려울 정도예요. 초기 기기는 모토로라 68000 계열의 DragonBall CPU를 썼는데 클럭이 수십 MHz 수준이었어요. 화면은 160×160 픽셀에 흑백이나 몇 단계 회색조가 기본이었고요. 전체 메모리도 메가바이트 단위였는데, 그중 프로그램이 실행 중에 자유롭게 쓸 수 있는 동적 힙은 수십 KB밖에 안 되는 경우가 많았어요.

동적 힙은 프로그램이 돌아가면서 변수나 임시 데이터를 올려 두는 작업대라고 보면 돼요. 이 작업대가 손바닥만 하니까 큰 이미지나 맵 데이터를 통째로 올려놓고 쓰는 건 불가능했어요. 그래서 Palm 개발자들은 데이터를 저장 힙에 데이터베이스 레코드 형태로 넣어 두고, 필요할 때만 꺼내 쓰는 식으로 프로그램을 짰어요. Palm OS에는 우리가 아는 파일 시스템도 없었어요. 앱(.prc 파일)조차 리소스를 담은 일종의 데이터베이스였어요.

코드 크기 제약도 있었어요. 68k 코드는 주로 16비트 상대 주소로 점프했는데, 그 때문에 코드 세그먼트 하나가 32KB 근처로 제한되는 문제가 있었어요. 그래서 큰 프로그램은 여러 세그먼트로 쪼개야 했죠. 요즘 번들 크기를 줄이려고 코드 스플리팅을 하는 것과 비슷한 고민을 훨씬 혹독한 조건에서 했던 셈이에요.

레밍스를 이런 기계에서 돌린다는 것

레밍스의 핵심은 파괴할 수 있는 지형이에요. 레밍이 땅을 파면 그 픽셀이 실제로 없어지고, 다른 레밍은 그 구멍으로 떨어져야 해요. 이걸 구현하려면 보통 지형을 비트맵으로 들고 있으면서 매 프레임 레밍마다 발밑 픽셀이 땅인지 공기인지 확인해요. 레밍 수가 늘어나면 이 검사 횟수도 확 늘어나죠.

느린 CPU로 이걸 버티려면 여러 요령이 필요해요. 지형을 땅인지 아닌지만 담는 1비트로 저장해서 메모리를 아낄 수 있어요. 화면 전체를 매번 다시 그리지 않고 바뀐 부분만 다시 그리는 더티 영역(dirty rectangle) 방식도 있고, 곱셈이나 나눗셈 대신 비트 시프트를 쓰는 방법도 있어요. 원작의 넓은 맵을 160×160 화면에 맞추려면 스크롤과 화면 구성도 새로 고민해야 했을 거예요. 이런 저장소가 공개됐을 때 가장 큰 가치는, 당시 개발자가 이런 문제를 실제로 어떻게 풀었는지 코드로 직접 확인할 수 있다는 점이에요.

레트로 소스 공개라는 흐름

옛 게임 소스를 공개하는 흐름은 꾸준히 이어져 왔어요. id Software가 공개한 둠과 퀘이크 소스는 수많은 개발자에게 교과서가 됐고, 요즘은 원작자나 게임 보존 단체가 직접 저장소를 여는 경우도 늘었어요. 실행 환경도 좋아졌어요. CloudpilotEmu처럼 브라우저에서 Palm OS를 에뮬레이션하는 프로젝트가 있어서 옛 기기가 없어도 직접 돌려 볼 수 있어요.

한국 개발자에게 주는 시사점

한국에도 비슷한 시절이 있었어요. 2000년대 피처폰 시절에 WIPI나 GVM 같은 플랫폼에서 게임을 만들던 개발자들은 빡빡한 용량 제한과 느린 CPU와 씨름했어요. 그때 익힌 최적화 감각은 지금도 쓸모가 있어요. 임베디드나 IoT 장비, 저사양 기기용 게임, 웹어셈블리처럼 크기와 성능이 중요한 분야에서는 여전히 메모리 한 바이트, 연산 한 번을 아끼는 사고방식이 필요하거든요. 자원이 넉넉한 환경에 익숙한 주니어 개발자라면 이런 코드를 읽어 보면서 '왜 이 데이터 구조를 골랐을까'를 생각해 보는 것만으로도 좋은 훈련이 될 거예요.

마무리

한 줄 정리: PalmOS 레밍스는 제약이 창의성을 만든다는 걸 보여 주는 살아 있는 교재예요. 여러분이 개발해 본 가장 빡빡한 환경은 어디였나요? 그때 배운 기술 중에 지금도 쓰는 게 있나요?


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/ardiri/palmos-lemmings
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...