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

칩 다리를 들어 고장 내보는 C64 하드웨어 시뮬레이터, 왜 만들었나

칩 다리를 들어 고장 내보는 C64 하드웨어 시뮬레이터, 왜 만들었나
SOURCE IMAGE · HACKER NEWS

레디스(Redis)의 창시자 살바토레 산필리포(antirez)가 코모도어 64(Commodore 64)의 메인보드를 핀 단위로 재현한 하드웨어 시뮬레이터 'c64-hw-simulator'를 공개했다. 대상은 특정 리비전인 ASSY 250407 보드다. 이 프로그램이 흥미로운 지점은 게임을 돌리기 위한 에뮬레이터가 아니라, 멀쩡한 기계를 일부러 고장 내보고 그 결과를 관찰하기 위한 도구라는 데 있다. 칩의 다리 하나를 들어 올리거나, 그 핀을 접지(GND)나 +5V에 단락시키거나, 칩을 소켓에서 뽑거나, 저항을 끊어보고, 그때 모니터 화면과 키보드, 보드 위의 모든 신호가 어떻게 변하는지를 지켜볼 수 있다.

고장 모습을 아는 게 아니라 회로로 계산한다

핵심은 이 프로그램이 '고장 난 C64가 어떻게 보이는지'를 전혀 모른다는 점이다. 프로그램이 아는 것은 두 가지뿐이다. 하나는 PCB의 전기적 연결 관계인 네트리스트(netlist)이고, 다른 하나는 각 칩이 자기 핀에서 어떻게 동작하는가다. 따라서 망가진 부품을 흉내 냈을 때 화면이 깨진 문자로 가득 차더라도, 그 깨진 화면은 '이렇게 나와야 한다'고 누군가 미리 정해둔 그림이 아니라 회로로부터 계산된 결과다.

제작자가 든 예가 이 성격을 잘 보여준다. 전원을 켜기 전에 컬러 RAM의 17번 핀(A7)을 들어 올리면 기계는 멀쩡하게 부팅된다. CPU가 쓰고 VIC가 읽을 때 똑같이 틀린 주소를 쓰기 때문에, RAM이 그냥 주소가 겹쳐 보이는(aliasing) 상태로 동작하는 것이다. 다리를 제자리에 꽂으면 그동안 한 번도 쓰이지 않았던 절반의 컬러 RAM이 무작위 색으로 드러나고, 다시 들어 올리면 화면이 깨끗해진다. 실제 2114 칩도 똑같이 반응한다. 캐릭터 ROM(U5)을 뽑으면 CPU와 RAM, 프로그램은 그대로 돌아가지만 글자의 모양만 사라지는데, 이는 실제 수리 기술자들이 익히 아는 증상이다.

구조: 핀을 인터페이스로 삼은 칩 모델

산필리포는 이 아이디어를 안드레 바이스플로흐(floooh)의 chips 프로젝트에서 얻었다고 밝혔다. 6502, VIC-II, CIA, SID 같은 칩을 핀을 인터페이스로 삼아 모델링한 코드다. 그는 이 접근을 논리적 극단까지 밀어붙여, RAM과 ROM, 로직 칩, PLA 등 나머지 모든 부품까지 핀 단위로 모델링했다. 칩 코어는 floooh의 chips(zlib 라이선스)를 그대로 썼고, 보드는 bwack의 KiCad 리플리카(CERN OHL), PLA 방정식은 82S100을 읽어낸 결과를 가져왔다. 6510, VIC-II, CIA, SID는 사이클 단위로 정확한 코어이며, board.c에서 각 코어는 자기 핀만 볼 수 있는 소켓에 앉는다. 매 반(半) 사이클은 행 주소 지정, /RAS 하강, /CAS 하강의 세 단계로 나뉘고 각 단계마다 보드 전체가 안정화된다.

전기적 판정 규칙도 명확하다. 모든 핀은 자기 네트를 강하게, 약하게(풀업), 전원 단락으로, 또는 전혀 구동하지 않는다. 가장 센 구동이 이기고, 세기가 같은 둘이 다투면 경합(contention)이 되어 낮은 쪽이 이긴다. 아무도 구동하지 않는 네트는 전하를 유지하다가 서서히 흘러내리며(drift), MOS 입력은 이 전압에 약간의 잡음을 더해 자신의 문턱값과 비교한다. 그래서 떠 있는(floating) 선은 불규칙하게 읽힌다. 잡음은 시드(seed) 기반이라 같은 실행을 똑같이 재현할 수 있다. 화면의 핀은 로직 프로브처럼 상태를 표시한다. 하이는 빨강, 로는 파랑, 펄스는 노랑, 떠 있으면 회색, 두 출력이 싸우면 자홍색이다.

실무자에게 주는 의미와 한계

이 도구가 겨냥하는 실질적 가치는 명확하다. 레트로 하드웨어 수리나 전자공학 교육에서 '이 증상은 어느 핀이 죽었을 때 나타나는가'를 실제 보드를 망가뜨리지 않고 반복 실험할 수 있다는 점이다. 창 없이 200프레임(약 4초)을 돌려 모니터 화면에서 읽어낸 텍스트를 사람처럼 출력하고 그림으로 저장하는 헤드리스 모드도 있어, 고장과 증상을 자동화된 테스트로 묶을 수 있다. 실제로 tests/faults.sh는 흔한 고장 31가지를 돌리며, 각 고장의 예상 증상은 시뮬레이터를 돌리기 전에 미리 적어두었다. .prg 파일은 프리저 카트리지처럼 DRAM에 직접 써 넣기 때문에 고장 난 보드에서도 로딩이 된다.

다만 분명한 한계가 있다. 핀 하나하나를 모두 시뮬레이션하는 탓에 속도가 느리다. 애플 M3 맥스에서 실제 C64의 31%, AMD 라이젠 AI 맥스+ 프로 495에서 39%, 애플 M5 맥스에서 48% 수준이다. 게임용 에뮬레이터로는 쓸 수 없다는 뜻이다. 또한 떠 있는 선과 전원 모델의 '형태'는 맞지만 문턱값, 드리프트 시간, 크로스토크 같은 구체적 수치는 추정값이며 sim.c의 상수로 박혀 있다. 비디오 출력, SID 필터, 전원 공급 장치, 도트 클록 PLL 같은 아날로그 부분은 시뮬레이션되지 않는다. DRAM 셀 불량이나 느린 부품처럼 칩 내부의 고장, 그리고 두 네트 사이의 브리지(단락)는 계획에는 있으나 아직 구현되지 않았다. macOS와 리눅스(X11)에서 OpenGL로 동작하며, 그래픽 라이브러리 sokol과 인터페이스 라이브러리 nuklear를 사용한다. 설계 배경은 저장소의 PLAN.md에 정리돼 있다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/antirez/c64-hw-simulator
SHARE
NEXT · CHOOSE

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

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

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