- Super Nintendo 카트리지는 단순 저장 매체가 아니라 CIC 복제 방지, SRAM, 보조 프로세서를 함께 담아 콘솔 기능을 확장하는 하드웨어였음
- ROM 용량은 당시 비트 단위로 홍보됐으며, 조사된 3,378개 타이틀 중 Star Ocean과 Tales of Phantasia는 48Mb, Super Mario World는 4Mb였음
- 저장 기능은 배터리로 유지되는 SRAM에 의존했고, Zelda III PCB처럼 ROM/RAM 접근을 조정하는 MAD-1 주소 디코더가 함께 들어간 사례가 있음
- 총 13종의 보조 칩이 72개 게임에 쓰이며 CPU 가속, 스프라이트 처리, 압축 해제, 수학 연산, 폴리곤 래스터화 같은 작업을 카트리지 쪽에서 맡았음
- 이런 칩들은 당시 게임 표현력을 크게 넓혔지만, S-DD1 내부 구조를 몰라 그래픽 팩이 필요했던 사례처럼 에뮬레이터 구현에는 장기간의 리버스 엔지니어링 부담을 남김
카트리지 기본 구성: CIC, ROM, SRAM
- Super Nintendo 카트리지는 ROM 칩의 명령어와 에셋뿐 아니라 CIC 복제 방지 칩, SRAM, 보조 프로세서까지 담을 수 있었음
- CIC는 콘솔 쪽 칩과 카트리지 쪽 칩이 lockstep으로 통신하는 방식으로 동작함
- 콘솔 CIC가 이상 상태를 감지하면 모든 프로세서를 리셋함
- 모든 SNES 카트리지에 CIC가 있는 것은 아니며, 비공식 게임 Super 3D Noah's Ark에는 CIC가 없음
- Super 3D Noah's Ark는 먼저 게임을 콘솔에 꽂고 그 위에 공식 카트리지를 꽂아야 하며, Noah's 쪽에서 공식 게임의 CIC로 버스 라인을 전달함
- ROM 용량은 당시 바이트가 아닌 비트 단위로 표기됐음
- Zelda III는 1,048,576바이트가 아니라 8Mb ROM으로 홍보됨
- 조사 목록은 USA/Japan/Europe 기준 3,378개 타이틀을 포함함
- Star Ocean과 Tales of Phantasia는 48Mb, 즉 6,291,456바이트로 가장 큰 축에 속함
- Super Mario World는 4Mb, 즉 524,288바이트 ROM을 사용함
- 저장 기능이 있는 일부 타이틀은 배터리로 전원을 유지하는 SRAM을 사용함
- 콘솔이 꺼지면 SRAM은 전력 소모를 줄이기 위해 저전력 모드로 들어감
- Zelda III PCB에는 U4의 CIC(D413A), U1의 0x80000 ROM(524,288바이트), U2의 LH5268AF-10TLL 64Kbit SRAM(8KiB), U3의 MAD-1 메모리 주소 디코더가 있음
보조 칩의 범위와 SA-1
- 가장 유명한 보조 프로세서는 1993년 Star Fox에 쓰인 Super FX지만, 그 이전에도 EC 칩이 사용됐음
- 전체적으로 13종의 EC가 72개 게임에 쓰였음
- 전체 목록은 wikipedia와 snescentral.com에 정리돼 있음
- SA-1, 즉 Super Accelerator 1은 34개 카트리지에 들어간 대표적인 보조 칩임
- SNES 본체 CPU와 같은 65C816 CPU지만 4배 빠른 10.74MHz로 동작함
- 2KiB SRAM과 통합 CIC를 포함함
- Super Mario RPG PCB에는 별도 CIC가 없고, U3에 SA-1이 있으며, U1에는 ROM, U2에는 통합 디코더가 있는 SRAM이 있음
- SA-1은 별도 오실레이터 없이 카트리지 포트의 System Master clock을 받아 내부에서 반으로 나눠 21.4772700MHz / 2 = 10.74MHz로 동작함
- SA-1은 시작 시 stop 상태이며, SNES CPU가 Reset Vector를 만들고 SA-1을 재개함
- SA-1의 초기 Instruction Pointer는 전용 Reset Vector에서 가져옴
- 동작 모드는 Accelerator, Parallel Processing, Mixed Processing 세 가지임
- 가장 강한 구성에서는 SA-1 CPU와 Super NES CPU가 동시에 동작해 Super Accelerator System 성능이 기존 Super NES 대비 5배가 됨
- 향상된 처리 성능은 PPU가 제공하는 128개 스프라이트 전체의 애니메이션과 충돌 감지, 스프라이트의 실시간 회전·스케일 변환 후 PPU VRAM 기록에 쓰였음
- Nintendo SA-1 데모 카트리지가 이러한 개선을 보여줌
- 레트로 게임 커뮤니티는 Eliminating slowdown in Super Mario World, Gradius III slowdown removal, Contra III slowdown removal 같은 프로젝트로 기존 게임의 slowdown을 줄였음
- SA-1로 타이틀을 변환하려면 RAM/ROM 접근 재매핑이 특히 필요해 꽤 복잡해 보이며, SA-1 문서가 “SNES와 SA-1은 같은 메모리 매핑을 사용한다”고 적은 점과 맞물려 의문이 남아 있음
- 2019년에는 SA-1 Collection Project를 통해 더 많은 SNES 게임을 자동으로 재매핑하고 SA-1화하려는 작업이 진행 중이었음
그래픽·압축·수학 보조 칩들
- CX4는 Capcom 칩으로 Mega Man X2와 Mega Man X3를 구동함
- 3D 와이어프레임 렌더링, 여러 수학 연산, 스프라이트 스케일링·회전 후 VRAM 기록을 처리할 수 있음
- MMX2의 인트로와 보스전에서 예시를 볼 수 있음
- CX4는 와이어프레임뿐 아니라 sprite functions, propulsion, vector, triangle, trigonometric functions, result tables, coordinate transform functions를 제공하며, MMX2와 MMX3에서는 모든 스프라이트를 처리함
- Mega Man X2 PCB에는 U4의 CIC, U1의 8M ROM, U2의 추가 ROM, U3의 CX4, X1의 20MHz 오실레이터가 있음
- S-DD1은 스프라이트 압축 해제 칩으로, PPU VRAM에 직접 데이터를 공급할 수 있음
- Star Ocean과 Street Fighter Alpha 2 두 게임에 사용됨
- Street Fighter Alpha 2의 라운드 시작 전 blank가 S-DD1 때문이라는 소문이 있었지만, Modern Vintage Gamer의 설명에 따르면 실제 문제는 사운드 샘플을 DSP RAM으로 전송하는 데 있었음
- Street Fighter Alpha 2 PCB에는 U1의 4MiB ROM과 에셋을 즉석 압축 해제하는 S-DD1이 있으며, CIC는 S-DD1에 통합돼 별도 칩이 없음
- DSP-1은 DSP 계열 19개 지원 타이틀 중 16개를 차지하며, Super Mario Kart와 Pilotwings에 쓰였음
- 이름의 DSP는 Digital Signal Processor이지만, 일반적인 DSP처럼 연속 신호를 처리하지 않기 때문에 이름이 잘못 붙었다고 평가됨
- 개발자 매뉴얼에 따르면 DSP-1은 blocking mode로 동작해, DSP가 데이터를 처리하는 동안 Super NES CPU가 기다림
- 빠른 16비트 곱셈, 역수, sin/cos projection, vector size, rotation 같은 명령을 제공해 HDMA 프로그래밍과 Mode 7의 3D 뷰 업데이트에 중요했음
- Super Mario Kart PCB에는 외부 CIC, ROM, 저장용 SRAM, MAD-1 주소 디코더, 배터리, 8MHz 동작을 위한 오실레이터가 있음
- DSP-1, DSP-1a, DSP-1b 세 버전은 버그 수정과 공정 개선을 도입했지만 동작이 약간 달라져 Pilotwings 데모에서 비행기가 지면에 충돌하는 결과가 나타났음
- 그 밖의 소규모 칩들도 특정 게임에 제한적으로 쓰였음
- DSP-2는 Dungeon Master 한 게임에서 Atari ST 루틴 변환에 쓰였고, 주로 스프라이트 스케일링을 돕기 위한 것으로 보임
- DSP-3는 SD Gundam GX 한 게임에 사용됨
- DSP-4는 Top Gear 3000과 The Planet's Champ TG 3000 두 게임에 사용됨
- OBC-1은 Metal Combat: Falcon's Revenge 한 게임에 사용됐고, 스프라이트 조작용이라는 소문이 있었지만 nesdev.org에서는 논쟁이 있음
- S-RTC는 Daikaijuu Monogatari II 한 타이틀에서 실시간 시계를 추적하는 칩이며, Hudson Soft 개발자가 왜 실시간 추적이 필요했는지는 불명확함
- Epson의 SPC7110은 Tengai Makyou Zero, Momotaro Dentetsu Happy, Super Power League 4에 쓰인 데이터 압축 해제 칩이며, Super Power League 4에는 실시간 시계 기능도 있음
- SETA Corporation의 ST 계열은 게임 AI 개선을 목표로 했다고 전해지며, ST-010은 Exhaust Heat 2, ST-011은 Hayazashi Nidan: Morita Shougi, ST-018은 Hayazashi Nidan Morita Shougi 2에만 쓰였음
- ST-018은 내부 ROM에 명령을 담은 ARM CPU로 보임
Super FX 계열과 커뮤니티 개조
- GSU-1은 Star Fox, Stunt Race FX, Vortex, Dirt Racer, Dirt Trax FX 다섯 게임에 쓰였음
- 보조 칩 중 문서화가 가장 잘 된 축에 속하며, 위키, 튜토리얼, Super Nintendo Developer Manual Book II 자료가 있음
- 10.74MHz로 동작하며, 21.47MHz master clock을 내부에서 반으로 나눔
- 내부 512바이트 instruction cache 덕분에 SNES CPU를 굶기지 않고 동작할 수 있음
- 작업이 끝나면 콘솔 CPU인 C-CPU에 인터럽트를 걸 수 있음
- SNES의 PPU1/PPU2가 tilemap과 sprite 지향인 반면, Super FX는 픽셀 렌더링과 폴리곤 래스터화에 강함
- 보통 카트리지에 있는 프레임버퍼에 렌더링함
- 프레임버퍼 내용은 VSYNC 동안 VRAM으로 전송됨
- Star Fox PCB에는 U3의 GSU-1, U5의 CIC, U4의 74LS139, U1의 ROM이 있으며, U2에는 배터리 없는 32KiB SRAM이 있음
- 이 SRAM은 savegame이 아니라 Super FX 프레임버퍼 저장용으로 일부 사용됨
- SNES 커뮤니티는 SA-1처럼 GSU-1에도 시간을 투자하고 있으며, Project Super FX 같은 프로젝트로 과거 타이틀을 최대한 개선하려고 함
- GSU-2는 21.47MHz 풀스피드로 동작하는 GSU-1이며, Super Mario World 2: Yoshi's Island, DOOM, Winter Gold 세 게임에 쓰였음
- Star Fox 카트리지의 GSU-1을 GSU-2로 바꿔 성능 증가를 보여준 커뮤니티 실험이 있음
- SNES판 DOOM의 Randy Linden은 GSU 칩 문서도, DOOM 소스 코드도 없이 모두 리버스 엔지니어링했음
- SNES판 DOOM은 PC 레벨을 사용할 수 있는 유일한 콘솔 포트였고, 다른 콘솔들은 지오메트리를 단순화해야 했음
- Yoshi's Island는 GSU-2를 주로 스프라이트 스케일링과 스트레칭에 사용하고, 조작된 스프라이트를 PPU VRAM에 다시 기록함
- Yoshi's Island PCB에는 배터리가 있어 SRAM이 프레임버퍼와 저장 상태 모두에 쓰임
- DOOM은 32MHz로 오버클럭되어 프레임레이트가 10~11fps에서 14~15fps로 증가함
- MSU-1은 실제 출시 카트리지에 들어간 칩이 아님
- Near가 SNES에서 CD 품질 오디오 스트리밍, FMV 재생, 최대 4GB RAM 접근을 가능하게 하려고 설계함
- 대상은 게임 모딩 커뮤니티이며, Enhanced Zelda III: A link to the past와 Enhanced Another World에서 결과를 볼 수 있음
에뮬레이터 구현에 남긴 부담
- 보조 칩은 플레이어 경험을 크게 개선하고 퍼블리셔 비용을 줄였지만, 이후 에뮬레이터 개발자에게는 까다로운 과제가 됨
- 특이한 EC에 의존한 일부 게임은 2012년에야 제대로 에뮬레이션됐음
- 초기에는 S-DD1 내부 구조를 몰랐기 때문에 Street Fighter Alpha 2 같은 게임이 사전 압축 해제된 스프라이트 graphic pack을 요구하는 방식으로 “에뮬레이션”됐음
- 칩 구현에는 상당한 리버스 엔지니어링이 필요했음
- 일부 칩은 하드코딩된 기능이 있어 de-capping이 필요했음
- ARM 기반 칩처럼 내부 ROM에 명령을 저장한 칩은 에뮬레이터가 BIOS 파일을 제공받아야 함
- 2020년 기준으로도 가장 희귀한 칩 일부의 에뮬레이션은 아직 완료되지 않았음