
라즈베리파이 피코 2 칩 위에서 386 PC가 돌아간다
깃허브에 frank-386이라는 프로젝트가 올라왔어요. 라즈베리파이 재단이 만든 마이크로컨트롤러 RP2350 위에서 인텔 80386 기반 PC를 통째로 에뮬레이션하는 오픈소스 프로젝트예요. RP2350이 뭐냐면, 라즈베리파이 피코 2 보드에 들어 있는 칩이에요. 리눅스가 돌아가는 그 라즈베리파이가 아니라, 아두이노처럼 운영체제 없이 펌웨어 하나로 돌아가는 작은 칩이죠. 150MHz로 도는 ARM Cortex-M33 코어 두 개(또는 같이 들어 있는 RISC-V 코어), 내장 SRAM은 520KB. 이 위에서 1980년대 후반부터 1990년대 초반까지 PC 시장을 지배했던 386 컴퓨터를 되살린 거예요.
386이 왜 특별하냐면요, 인텔의 첫 32비트 x86 프로세서거든요. 그 전 8086이나 286과 달리 보호 모드와 페이징, 가상 8086 모드를 갖췄고, 덕분에 윈도우 3.x의 386 확장 모드나 DOS/4GW 같은 도스 익스텐더가 가능해졌어요. 둠 같은 게임이 32비트 코드로 돌아갈 수 있었던 바탕이 바로 이 CPU예요. 그러니까 386을 에뮬레이션한다는 건 단순히 옛날 도스 프롬프트를 띄우는 것보다 훨씬 큰 일이에요. 현대 x86 커널이 지금도 쓰는 보호 모드, 세그먼트, 페이지 테이블의 원형이 다 여기 들어 있으니까요.
어떻게 이런 게 가능할까
에뮬레이터의 기본 원리는 간단해요. 진짜 CPU가 하는 일을 소프트웨어로 흉내 내는 거죠. 메모리에서 x86 명령어를 읽어 오고(fetch), 무슨 명령인지 해석하고(decode), 그 동작을 ARM 코드로 실행해요(execute). 이걸 명령 하나마다 반복하는 게 인터프리터 방식 에뮬레이터예요. 8086은 명령어가 단순해서 마이크로컨트롤러에서도 예전부터 곧잘 돌았는데, 386은 32비트 주소 계산, 특권 레벨 검사, 페이지 테이블 변환까지 매 메모리 접근마다 처리해야 해서 부담이 훨씬 커요.
두 번째 벽은 메모리예요. 내장 SRAM 520KB로는 도스 기본 메모리 640KB조차 안 되죠. 여기서 RP2350의 새 기능이 빛을 발해요. 이 칩은 외부 PSRAM을 QSPI 인터페이스로 붙여 메모리처럼 쓸 수 있거든요. PSRAM이 뭐냐면, 저렴한 DRAM을 SRAM처럼 단순하게 쓸 수 있게 포장한 칩이에요. Pimoroni Pico Plus 2 같은 보드에는 8MB가 기본으로 달려 나와요. 다만 내장 SRAM보다 훨씬 느려서, 자주 쓰는 데이터는 내장 SRAM에 두고 나머지를 PSRAM에 두는 식의 캐시 전략이 성능을 좌우해요.
세 번째는 PC를 PC답게 만드는 주변장치들이에요. 타이머(8253), 인터럽트 컨트롤러(8259), 키보드 컨트롤러(8042), 그래픽 카드, 디스크 컨트롤러가 전부 소프트웨어로 구현돼야 도스가 부팅하고 프로그램이 돌아가요. 하드디스크와 플로피는 SD 카드에 담긴 이미지 파일로 대신하고요.
영상 출력이 특히 재미있는 부분인데, RP2350에는 PIO라는 기능이 있어요. 이게 뭐냐면, 메인 CPU와 별개로 정해진 타이밍에 핀을 올렸다 내렸다 하는 작은 전용 프로세서예요. 이걸로 VGA 신호를 직접 만들어 내거나, RP2350에 새로 들어온 HSTX 인터페이스로 DVI 출력을 낼 수 있어요. 그래서 코어 하나는 386 흉내에 전념하고, 다른 코어와 PIO가 화면과 소리를 맡는 분업 구조가 자연스럽게 나와요. 성능은 당연히 실제 386 클럭에는 못 미치지만, 도스 시절 프로그램과 게임을 체감할 만한 속도로 굴리는 게 이런 프로젝트의 목표예요. 어떤 소프트웨어가 어느 정도 돌아가는지는 저장소의 설명을 직접 확인해 보세요.
비슷한 시도들과 비교하면
이 분야엔 이미 계보가 있어요. 전작 칩 RP2040 시절에도 PC XT급을 에뮬레이션하는 프로젝트들이 있었고, 러시아 취미 커뮤니티에서 나온 Murmulator 보드는 아예 이런 에뮬레이터를 위한 표준 하드웨어처럼 자리 잡았어요. ESP32 쪽에서는 FabGL 라이브러리로 8086 PC를 돌리는 사례가 유명하고요. 하지만 RP2040은 133MHz에 264KB SRAM, PSRAM 지원 없음이라 386은 무리였어요. RP2350이 클럭과 메모리를 키우고 PSRAM과 부동소수점 유닛, HSTX를 더하면서 비로소 386이 사정권에 들어온 거죠.
한편 완전히 다른 접근도 있어요. MiSTer 같은 FPGA 플랫폼은 ao486 코어로 486 CPU를 논리 회로 수준에서 재현해요. 소프트웨어 에뮬레이션이 「흉내」라면 FPGA는 「복제」에 가까워서 타이밍 정확도가 높지만, 보드가 수십만 원대예요. 반면 frank-386은 몇 천 원에서 1만 원대 칩으로 승부하는 거라 접근성이 완전히 달라요. 정확도와 비용 사이의 트레이드오프가 아주 선명한 사례죠.
한국 개발자에게는
당장 따라 해볼 수 있다는 게 가장 큰 매력이에요. 피코 2 보드는 국내에서도 1만 원 안팎에 구할 수 있고, PSRAM이 달린 보드도 몇 만 원이면 돼요. 여기에 VGA 케이블이나 HDMI 브레이크아웃, PS/2 키보드, SD 카드만 있으면 책상 위에 386 PC 한 대가 생겨요.
학습 재료로는 더 좋아요. 이 프로젝트 코드를 따라가면 x86 보호 모드가 실제로 어떻게 동작하는지, PIO와 DMA로 CPU 부담 없이 신호를 뽑는 법, 듀얼 코어 분업, 느린 외부 메모리를 캐시로 감추는 기법까지 한 번에 만져볼 수 있어요. 컴퓨터 구조 수업에서 그림으로만 봤던 것들이 실제로 돌아가는 걸 보는 경험은 꽤 달라요. 임베디드나 시스템 프로그래밍 쪽 커리어를 생각한다면, 에뮬레이터를 만들어 보거나 기여해 본 경험은 컴퓨터 구조를 이해한다는 걸 보여주는 좋은 포트폴리오가 되기도 하고요.
정리
핵심 한 줄: RP2350의 PSRAM 지원과 PIO, 듀얼 코어 덕분에 몇 천 원짜리 마이크로컨트롤러가 32비트 보호 모드까지 갖춘 386 PC를 소프트웨어로 흉내 낼 수 있게 됐다.
여러분이 처음 만졌던 PC는 뭐였나요? 그리고 마이크로컨트롤러 하나로 되살려 보고 싶은 옛날 기계가 있다면 어떤 건지, 댓글로 이야기해 주세요.
🔗 출처: Hacker News