
1982년의 컴퓨터에 3D를 띄운다고요?
요즘 우리는 GPU에 수십 GB 메모리가 달린 환경에서 셰이더를 짜고 레이트레이싱을 돌리잖아요. 그런데 한 개발자가 정반대 방향으로 도전했어요. ZX Spectrum 48K라는, 1982년에 영국에서 출시된 8비트 가정용 컴퓨터에 3D 점(point) 렌더러를 이식한 거예요. 이게 뭐가 대단하냐면, 이 기계는 CPU가 Z80 3.5MHz에 메모리가 고작 48KB거든요. 요즘 웹페이지 하나 로딩하면 수십 MB가 우습게 쓰이는데, 그 수천 분의 일밖에 안 되는 자원으로 3D를 그려낸 거예요.
개발자 ttsiodras는 원래 자신이 만들었던 3D 점 렌더러를 이 작은 기계에 포팅하면서 그 과정을 깃허브에 정리했어요. 단순한 취미 프로젝트로 보일 수 있지만, 그 안에는 현대 개발자들이 잊고 사는 컴퓨터 과학의 본질이 가득 담겨 있어요.
어떻게 이 작은 기계에 3D를 넣었을까
핵심 도전은 두 가지였어요. 첫째는 부동소수점 연산이 없다는 거예요. Z80 CPU에는 우리가 당연하게 쓰는 float 연산이 하드웨어로 지원되지 않아요. 그래서 개발자는 고정소수점(fixed-point) 산술을 직접 구현했어요. 이게 뭐냐면, 소수점 위치를 미리 정해놓고 정수만으로 소수 계산을 흉내내는 기법이에요. 예를 들어 16비트 정수에서 하위 8비트는 소수부, 상위 8비트는 정수부로 약속하고 계산하는 식이죠. 곱셈하면 자릿수가 두 배가 되니까 다시 시프트로 맞춰주고요. 이 트릭 하나만 잘 익혀도 임베디드 개발이나 게임 엔진 최적화에 큰 도움이 돼요.
둘째는 메모리와 화면 처리 방식이에요. ZX Spectrum의 화면은 256×192 픽셀인데, 색상 정보가 픽셀 단위가 아니라 8×8 블록 단위로 저장돼요. 이걸 'attribute clash'라고 부르는데, 같은 8×8 영역 안에 두 가지 색만 동시에 쓸 수 있다는 제약이 있죠. 그래서 3D 렌더링도 색은 포기하고 흑백 점만 찍는 방식으로 단순화하고, 대신 부드럽게 움직이는 데 집중했어요.
핵심 알고리즘은 비교적 단순해요. 3D 공간의 점들을 회전 행렬로 돌리고, 원근 투영(perspective projection)으로 화면 좌표에 매핑한 다음, 그 좌표에 픽셀을 찍는 거죠. 그런데 이걸 초당 여러 프레임으로 돌리려면 한 프레임 안에 들어가는 모든 곱셈, 나눗셈, 메모리 접근을 사이클 단위로 계산해서 짜야 해요. C로 짠 다음 어셈블리로 최적화하는 과정이 깃허브에 잘 정리되어 있어서, 어셈블리 입문자에게도 훌륭한 교재가 되더라고요.
왜 지금 레트로 컴퓨팅이 다시 뜨고 있을까
비슷한 프로젝트가 요즘 정말 많이 나와요. 누군가는 ESP32 같은 마이크로컨트롤러에 Doom을 포팅하고, 다른 누군가는 Commodore 64에 신경망을 돌리려고 시도해요. PICO-8 같은 가상 레트로 콘솔로 게임을 만드는 인디 씬도 활발하죠. 이런 흐름의 배경에는 "제약이 창의성을 낳는다"는 오래된 진실이 있어요. 자원이 무한할 때는 그냥 더 큰 모델, 더 많은 메모리로 밀어붙이면 되지만, 48KB 안에서 뭔가를 해내려면 진짜 생각을 해야 하거든요.
또 하나 흥미로운 건, 이런 프로젝트들이 현대 시스템의 비효율을 비추는 거울 역할을 한다는 거예요. 1982년 기계가 3D를 부드럽게 그릴 수 있다면, 오늘날 우리가 만든 Electron 앱이 16GB 램에서 버벅대는 건 왜일까요? 우리는 추상화를 너무 많이 쌓은 대가로 단순한 작업도 무거워진 거예요.
한국 개발자에게 주는 시사점
이런 레트로 포팅 프로젝트는 단순한 놀이가 아니에요. 임베디드 시스템, IoT, 자동차 ECU, 위성 펌웨어 같은 자원 제약 환경에서 일하는 분들에게는 거의 필수 역량이에요. 고정소수점 연산, 메모리 매핑, 사이클 카운팅 같은 기법은 지금도 현역에서 매일 쓰이거든요.
또 백엔드 개발자나 프론트엔드 개발자라도 이런 프로젝트를 한 번쯤 따라 해보면, "내가 쓰는 추상화 아래에서는 도대체 무슨 일이 벌어지고 있는가"에 대한 감각이 확 달라져요. 메모리 한 바이트, CPU 사이클 하나가 소중해지는 경험은 어떤 강의보다 깊은 교훈을 남기죠.
마무리
48KB 안에 3D를 우겨넣는 도전은 추억 여행이 아니라, 컴퓨팅의 본질을 다시 묻는 작업이에요. 가끔은 작은 기계에서 시작해보는 것도 큰 깨달음을 주죠.
여러분은 가장 자원이 빠듯했던 환경에서 코딩한 경험이 있나요? 그 제약이 어떤 식으로 더 좋은 코드를 만들게 했나요?
🔗 출처: Hacker News
TTJ 코딩클래스 정규반
월급 외 수입,
코딩으로 만들 수 있습니다
17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공