TECH 으로 돌아가기
TECH HACKER NEWS 오늘 9분 읽기 24 READS

FPGA 위에 되살아난 3dfx 부두(Voodoo): 90년대 후반 게이밍 PC를 회로 수준에서 재현하기

90년대 게이머의 로망, 부두 카드를 FPGA로

1996년에 나온 3dfx의 Voodoo Graphics는 PC 게임의 역사를 바꾼 카드예요. 이 카드가 나오기 전까지 PC 게임의 3D는 대부분 CPU가 픽셀 하나하나를 직접 그리는 소프트웨어 렌더링이었거든요. 그런데 부두 카드를 꽂으면 같은 게임이 갑자기 부드러운 텍스처와 안정적인 프레임으로 돌아가니, 당시 게이머들 사이에서는 거의 신화 같은 존재였죠.

FPGA 콘솔 프로젝트로 알려진 nand2mario가 이 부두 그래픽스를 FPGA 위에 재현하고, 나아가 90년대 후반의 게이밍 PC 한 대를 통째로 FPGA로 구성하는 과정을 글로 정리했어요. NESTang, SNESTang 같은 Tang 보드용 콘솔 코어를 만들어온 사람인데, 이번엔 콘솔이 아니라 PC, 그것도 3D 가속기까지 손을 댄 거죠.

이게 뭐냐면: FPGA로 하드웨어를 '다시 만든다'는 것

FPGA가 뭐냐면, 논리 회로를 소프트웨어처럼 다시 짜서 넣을 수 있는 칩이에요. 일반 CPU는 회로가 고정되어 있고 그 위에서 프로그램을 돌리지만, FPGA는 회로 자체를 Verilog 같은 하드웨어 기술 언어로 써서 구성해요. 그래서 옛날 칩의 동작을 소프트웨어 에뮬레이터처럼 흉내 내는 게 아니라, 실제로 같은 방식으로 동작하는 회로를 만들 수 있어요. 에뮬레이터가 '연기'라면 FPGA 재현은 '복제'에 가깝다고 보면 돼요. 타이밍이 원본에 가깝고 입력 지연도 적어서 레트로 게이밍 쪽에서 인기가 많죠. MiSTer 프로젝트가 대표적이에요.

부두 그래픽스는 어떻게 동작했나

부두 1세대(SST-1)의 구조를 알면 왜 이 재현이 어려운지 이해할 수 있어요. 카드에는 두 종류의 칩이 있었어요. FBI(Frame Buffer Interface)는 삼각형을 픽셀로 채우는 래스터라이저와 Z버퍼, 알파 블렌딩, 디더링을 담당하고, TMU(Texture Mapping Unit)는 텍스처 메모리에서 텍셀을 읽어 원근 보정과 바이리니어 필터링을 해주는 칩이었죠. 메모리는 EDO DRAM 4MB로, 프레임버퍼 2MB와 텍스처 2MB로 나뉘어 있었고요. 클럭은 50MHz 정도였고, 해상도는 640x480이 기본적인 한계였어요.

재미있는 건 이 카드가 2D 출력은 전혀 못 했다는 점이에요. 기존 VGA 카드 출력을 케이블로 부두 카드에 연결해두고(패스스루), 3D 게임을 켤 때만 부두가 화면을 가로채는 방식이었죠. 그리고 부두 1세대는 삼각형 셋업, 즉 정점 세 개에서 각 변의 기울기와 색상이나 텍스처 좌표의 변화율을 계산하는 일도 하드웨어가 아니라 CPU 쪽 드라이버가 했어요. 카드 레지스터에 이미 계산된 기울기 값을 써 넣으면, 카드가 그걸 받아 픽셀을 채우는 구조였죠. 이 셋업 엔진이 하드웨어로 들어온 건 Voodoo2부터예요.

그러니까 FPGA로 부두를 재현한다는 건, 이 레지스터 인터페이스를 원본과 똑같이 만들어서 당시의 Glide 드라이버와 게임이 아무 수정 없이 돌아가게 하는 걸 뜻해요. 레지스터 하나의 비트 의미가 틀리면 색이 이상해지거나 텍스처가 깨지는 거죠. 다행히 MAME 프로젝트에 부두 에뮬레이션 코드가 아주 잘 정리되어 있어서, 이런 재현 작업의 사실상 교과서 역할을 해요.

픽셀 파이프라인을 회로로 옮기기

부두의 픽셀 파이프라인은 대략 이런 순서예요. 삼각형 내부의 픽셀을 순회하면서 각 픽셀의 텍스처 좌표를 원근 보정하고, TMU가 텍스처 메모리에서 주변 텍셀 4개를 읽어 바이리니어 필터링을 해요. 그 결과를 정점 색상과 결합하고, 포그를 섞고, Z버퍼와 비교해서 가려진 픽셀은 버리고, 알파 블렌딩을 거쳐 16비트 색으로 디더링해서 프레임버퍼에 씁니다.

소프트웨어에서는 이걸 함수 하나에 순서대로 쓰면 끝이지만, 하드웨어에서는 각 단계가 파이프라인 스테이지가 되고, 매 클럭마다 픽셀이 한 단계씩 흘러가야 해요. 특히 텍스처 읽기가 병목인데요, 픽셀 하나마다 텍셀 4개를 읽어야 하니 메모리 대역폭이 관건이거든요. 원본은 텍스처 전용 메모리를 따로 둬서 해결했는데, FPGA 보드에서는 한정된 내부 메모리(BRAM)와 외부 DRAM을 어떻게 나눠 쓸지가 설계의 핵심이 돼요.

CPU까지 합쳐야 'PC'가 된다

부두만 있어서는 아무것도 못 해요. DOS를 부팅하고 게임을 돌릴 x86 CPU, VGA, 사운드 블라스터, IDE 디스크 컨트롤러가 다 필요하죠. FPGA 세계에서 x86이라고 하면 보통 ao486 코어를 떠올려요. MiSTer에서 쓰이는 오픈소스 486 코어인데, 여기에 부두 코어를 붙이려면 CPU와 그래픽 카드를 이어주는 버스(원본은 PCI)를 FPGA 안에서 흉내 내야 하고요.

그리고 당시 부두 게임들은 보통 펜티엄급 CPU를 전제로 했어요. GLQuake, 툼레이더, 니드포스피드2 SE 같은 게임이 부두 대표작인데, CPU가 좌표 변환과 조명 계산, 삼각형 셋업을 다 해줘야 해서 486급에서는 프레임이 잘 안 나와요. 그래서 이런 프로젝트에서는 GPU 재현보다 오히려 CPU 성능이 더 큰 벽이 되기도 해요.

업계 맥락

레트로 하드웨어 FPGA 재현은 MiSTer(DE10-Nano 기반)와 Analogue의 상용 콘솔들이 주도해왔고, 최근엔 저렴한 Gowin 칩을 쓴 Sipeed Tang 보드 생태계가 빠르게 커지고 있어요. 그런데 PC 쪽은 콘솔보다 훨씬 어려웠어요. 콘솔은 하드웨어가 고정되어 있지만, PC는 CPU, 칩셋, VGA, 사운드, 확장카드가 각각 따로 돌아가면서 서로 버스로 대화하니까요. 3D 가속기까지 재현한 사례는 거의 없었죠. 소프트웨어 쪽에서는 PCem, 86Box 같은 에뮬레이터가 부두를 지원하고 DOSBox-X에도 부두 에뮬레이션이 있지만, 하드웨어 수준의 재현은 다른 차원의 이야기예요.

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

당장 실무에 쓸 일은 없겠지만, GPU가 내부적으로 뭘 하는지 배우기에 이보다 좋은 교재가 없어요. 요즘 GPU는 셰이더와 수천 개의 코어 때문에 구조가 너무 복잡하지만, 부두는 '고정 기능 파이프라인'이라 래스터라이저, 텍스처 유닛, Z버퍼, 블렌딩 같은 3D 그래픽스의 기본 개념이 각각 눈에 보이는 하드웨어 블록으로 존재하거든요. 그래픽스 프로그래밍을 공부하는 분이라면 이 파이프라인을 따라가는 것만으로도 OpenGL이나 Vulkan의 상태 머신이 왜 그렇게 생겼는지 이해가 될 거예요.

FPGA 입문에도 좋은 동기가 돼요. Tang Nano 같은 보드는 몇만 원이면 사고 오픈소스 툴체인도 있어서 예전보다 진입 장벽이 훨씬 낮아졌어요. 소프트웨어 개발자가 하드웨어 사고방식, 즉 모든 것이 동시에 매 클럭마다 일어난다는 감각을 익히는 데 이만한 취미가 없죠.

마무리

한 줄로 정리하면, 90년대 게이머들의 꿈이었던 3dfx 부두 카드를 회로 수준에서 되살리고 그 시절 PC를 통째로 FPGA에 담는 프로젝트예요.

여러분은 어떠세요? 옛날 게임을 돌리는 방법으로 에뮬레이터와 FPGA 재현 중 어느 쪽이 더 가치 있다고 생각하시나요? 그리고 부두 시절 게임 중 다시 해보고 싶은 게 있다면 뭔가요?


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://nand2mario.github.io/posts/2026/zsst-voodoo/
SHARE
NEXT · CHOOSE

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

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

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