TECH 으로 돌아가기
TECH HACKER NEWS 오늘 8분 읽기 27 READS

3.5MHz, 48KB로 그리는 예술: ZX 스펙트럼 데모씬 인트로는 어떻게 만들까

3.5MHz, 48KB로 그리는 예술: ZX 스펙트럼 데모씬 인트로는 어떻게 만들까
SOURCE IMAGE · HACKER NEWS
3.5MHz, 48KB로 그리는 예술: ZX 스펙트럼 데모씬 인트로는 어떻게 만들까

40년 넘은 컴퓨터로 지금도 '작품'을 만드는 사람들

요즘 노트북은 CPU 클럭이 수 GHz, 메모리가 수십 GB잖아요. 그런데 2026년인 지금도 CPU 3.5MHz, 메모리 48KB짜리 컴퓨터로 화려한 그래픽과 음악을 뽑아내는 사람들이 있어요. 1982년 영국 싱클레어 리서치가 내놓은 8비트 컴퓨터 ZX 스펙트럼(ZX Spectrum) 이야기예요.

최근 한 개발자가 ZX 스펙트럼용 데모씬 인트로를 직접 만든 과정을 블로그에 정리했어요. 이 글을 계기로 데모씬이 뭔지, 그리고 이 오래된 기계에서 코드를 짠다는 게 어떤 경험인지 풀어볼게요.

데모씬(demoscene)이 뭐냐면요, 컴퓨터로 영상과 음악을 실시간으로 만들어내는 프로그램(데모)을 제작하는 하위문화예요. 미리 렌더링한 동영상을 트는 게 아니라, 코드가 매 프레임 그림을 직접 계산해서 그려요. 그중 인트로(intro)는 파일 크기 제한이 걸린 데모예요. 256바이트, 1KB, 4KB 같은 부문이 있는데, 이 글의 한 문단이 UTF-8로 대략 1KB라는 걸 생각하면 얼마나 작은지 감이 오실 거예요. 핀란드, 독일, 폴란드는 데모씬을 국가 무형문화유산 목록에 올렸을 만큼 역사가 깊은 문화이기도 해요.

ZX 스펙트럼이라는 '까다로운 캔버스'

1. 화면 메모리 배치가 독특해요. 화면은 256×192 픽셀이고, 픽셀 데이터(6144바이트)가 메모리 0x4000부터 들어 있어요. 그런데 위에서부터 한 줄씩 차례대로 저장돼 있지 않아요. 화면을 세 덩어리로 나눈 뒤 그 안에서 줄 순서를 섞어 놨거든요. 그래서 '한 픽셀 아래로'가 단순히 32바이트를 더하는 게 아니에요. 대신 8×8 글자 칸 안에서는 주소 상위 바이트만 1 올리면(INC H) 바로 다음 줄로 내려가요. 데모 코더들은 이런 규칙을 외워 두고 적극적으로 활용해요.

2. 색은 8×8 칸 단위로만 바꿀 수 있어요. 0x5800부터 768바이트짜리 '속성(attribute)' 영역이 있는데, 칸마다 전경색(INK)과 배경색(PAPER) 두 가지만 정할 수 있어요. 그래서 다른 색 물체가 같은 칸에 들어오면 색이 번지는 컬러 클래시(color clash)가 생기고, 스펙트럼 특유의 느낌이 여기서 나와요. 데모씬에서는 아예 속성 영역만 빠르게 바꿔서 32×24 저해상도 컬러 화면처럼 쓰는 기법도 많이 써요.

3. 곱셈 명령어가 없어요. CPU인 Z80에는 곱셈·나눗셈 명령이 없어요. 그래서 회전하거나 출렁이는 효과를 만들 때는 사인(sin) 값을 미리 표로 만들어 두고 꺼내 쓰는 룩업 테이블을 써요. 계산하는 대신 '찾아보는' 거죠.

핵심은 '프레임 예산'

PAL 방식 스펙트럼은 1초에 50번 화면을 그리고, 매 프레임 시작마다 인터럽트가 들어와요. 48K 모델은 한 프레임에 CPU가 쓸 수 있는 시간이 69,888 T-state(Z80 클럭 사이클 단위)예요. 부드러운 효과를 내려면 이 예산 안에 계산과 그리기를 전부 끝내야 해요. 게다가 0x4000~0x7FFF 영역은 화면 칩(ULA)과 같이 쓰는 메모리라서, 여기에 접근하면 추가로 지연이 생기기도 해요.

그래서 명령어 하나하나의 사이클을 따지게 돼요. 메모리를 복사하는 LDIR은 바이트당 21 T-state가 드는데, LDI를 여러 번 풀어서 쓰면 16 T-state로 줄어요. 화면을 빠르게 채울 때는 스택 포인터를 화면 주소로 옮겨 놓고 PUSH로 2바이트씩 밀어 넣는 '스택 트릭'도 유명해요. 기본 메인 루프는 대략 이렇게 생겼어요.

main:
halt ; 다음 프레임 인터럽트까지 대기
call update ; 효과 계산
call draw ; 화면 그리기
jr main

고급 기법으로 가면 전자빔이 지금 화면 어디를 그리는지 계산해서 정확히 그 순간 속성 값을 바꾸는 레이싱 더 빔(racing the beam)을 써요. 이렇게 하면 8×8 칸 제한을 넘어서는 색 표현이 가능해요. 화면 테두리(border) 색을 빠르게 바꿔 줄무늬를 만드는 효과도 같은 원리예요.

다른 레트로 플랫폼과 비교하면

같은 시대 경쟁자였던 코모도어 64에는 하드웨어 스프라이트와 SID라는 강력한 사운드 칩이 있었어요. 반면 48K 스펙트럼은 스프라이트가 없고, 소리도 1비트 '비퍼'가 전부예요(AY 사운드 칩은 128K 모델부터 들어갔어요). 하드웨어가 거의 도와주지 않으니 전부 CPU로 해결해야 하고, 그래서 오히려 '순수 코딩 실력'이 드러나는 플랫폼으로 평가받아요. 러시아와 동유럽에서는 펜타곤(Pentagon) 같은 호환 기종이 널리 퍼졌고, 덕분에 지금도 스펙트럼 씬이 활발하게 이어지고 있어요.

한국 개발자에게: 생각보다 가까운 이야기

ZX 스펙트럼은 한국에서 낯설지만 Z80은 익숙한 분이 많을 거예요. 80년대 한국에서 많이 쓰던 MSX 계열 컴퓨터(대우 아이큐 1000, 재믹스 등)도 Z80을 썼거든요.

실무에서 쓸모가 있냐고요? 임베디드·펌웨어는 지금도 KB 단위 메모리와 사이클 예산을 두고 싸우는 분야예요. 게임 개발의 '한 프레임 16.6ms' 감각도 그대로 이어지고요. 웹 번들 크기 최적화나 서버 핫 패스 튜닝도 결국 같은 질문이에요. '이 바이트, 이 사이클이 정말 필요한가?'

입문 장벽도 낮아요. Fuse 같은 에뮬레이터와 sjasmplus 같은 크로스 어셈블러만 있으면 실제 기계 없이 바로 시작할 수 있어요. 테두리 색 바꾸기, 속성 영역에 패턴 그리기, 사인 테이블로 출렁이는 효과 만들기 순서로 해보는 걸 추천해요.

마무리

제약은 창의성의 적이 아니라 연료예요. 48KB 안에서 만든 작품들이 그걸 증명하고 있어요.

여러분이 코드를 짜면서 겪은 가장 극단적인 제약은 뭐였나요? 그리고 리소스가 넘쳐나는 요즘에도 이런 '바이트 깎기' 경험이 의미가 있다고 보시나요?


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://www.markround.com/blog/2026/zx-spectrum-intro
SHARE
NEXT · CHOOSE

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

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

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