슈퍼 닌텐도 카트리지 내부 분석
(fabiensanglard.net)- 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년 기준으로도 가장 희귀한 칩 일부의 에뮬레이션은 아직 완료되지 않았음
댓글과 토론
Hacker News 의견들
-
예전 콘솔의 카트리지가 PC의 PCI 확장 카드와 거의 같았다는 점이 정말 좋음
버스에 직접 연결돼 사실상 무엇이든 할 수 있었는데, 아쉽게도 이런 관행은 GameBoy Advance 이후 끝났고 Nintendo DS부터는 순수 데이터 저장장치에 가까워짐
그래서 요즘에는 레이트레이싱 칩https://www.youtube.com/watch?v=2jee4tlakqo 같은 괴상한 현대식 확장도 가능하고, 실제 물리 칩으로는 없고 소프트웨어 에뮬레이터에만 있는 듯한 MSU1 확장 칩도 가능해짐
이론상 제조는 가능하니 Road Blaster의 실제 SNES 카트리지https://www.youtube.com/watch?v=BvIXUOr4yxU도 만들 수 있을 것임
글 자체에서는 목록에 “Street Fighter Zero 2”가 USA ROM으로 되어 있는데, Street Fighter Zero는 일본에서 Street Fighter Alpha를 부르던 이름이므로 Zero 2는 Alpha 2의 일본판이어야 함- 완전히 미친 NES 역에뮬레이션도 있음
여기서는 카트리지를 현대 컴퓨터로 대체하고 나면 이상한 일들이 벌어짐. 예를 들어 NES로 유머에 대한 사실상 PowerPoint 발표를 하는 식임
https://www.youtube.com/watch?v=ar9WRwCiSr0 - 완전히 맞는 말은 아님. 일부 DS 카트리지에는 적어도 적외선 수신기가 있었음. 예를 들면 Pokemon HeartGold가 그렇고, Learn with Pokémon: Typing Adventure는 카드로 Bluetooth까지 추가한 것으로 앎
그래서 기능을 추가하는 제한적 능력은 있었고, 추가 CPU만큼 흥미롭지는 않아도 GBA에서도 그렇게 엄청난 일을 한 사례가 많았던 건 아님 - Pokemon SoulSilver처럼 카트리지 안에 적외선 송신기가 들어간 게임들은 어떻게 가능했는지 궁금해짐
특정 사용 사례를 위해 계획한 건지, 아니면 제한적인 카트리지 확장 부품을 위한 별도 채널이 있었던 건지 알고 싶음 - 최신 SNES 플래시 카트리지는 MSU1을 지원할 수 있는 것으로 알고 있음. MiSTer FPGA도 MSU1을 지원함
- Street Fighter 현지화는 엉망임. 왜 같은 이름을 서로 다른 캐릭터에 바꿔 붙였는지 모르겠음
- 완전히 미친 NES 역에뮬레이션도 있음
-
여기서 빠진 또 다른 세부사항은 확장 칩이 없는 카트리지라도 성능 등급이 달랐다는 것임
SNES CPU는 명목상 3.58MHz로 동작했지만, 실제로 그 속도로 돌려면 “FastROM” 카트리지가 꽂혀 있어야 했음. Nintendo는 퍼블리셔에게 더 저렴한 “SlowROM” 형식도 제공했고, 이 경우 CPU가 2.68MHz까지 낮아졌음
SlowROM 게임을 FastROM 게임으로 바꿔 지연을 줄이는 패치를 개발하는 모더 커뮤니티도 있음. 일부 SlowROM 게임은 원래 FastROM용으로 개발됐다가 퍼블리셔의 비용 절감 요구 때문에 막판에 SlowROM으로 바뀐 것처럼 보인다는 글을 읽은 적이 있음- Out Of This World는 개발자가 FastROM 사용을 허가받지 못한 SlowROM/FastROM 사례임
기억이 맞다면 그 경우 SlowROM을 쓰면 카트리지당 무려 50센트를 아낄 수 있었다고 주장했음 - SNES에서 놀라운 점은 내장 RAM조차 명목상 3.58MHz 클럭으로 접근할 수 없고, 그때도 시스템이 느려진다는 것임
경쟁기인 TurboGrafx-16은 보통 7MHz로 돌았고 비슷한 메모리 타이밍이 필요한 6502 계열 CPU를 썼는데, 왜 SNES가 속도에 그렇게 인색했는지 늘 헷갈렸음
그래도 TurboGrafx는 서구권에서 실패했고 SNES는 전 세계적으로 성공했으니, 뭔가 잘한 게 있었던 셈임 - 그게 Nintendo가 임의로 만든 라이선스 구분이었는지, 아니면 실제로 카트리지의 데이터 읽기 속도 차이가 있었는지 늘 궁금했음
결국 모든 SNES 카트리지는 마스크 ROM을 달고 있었음 - 하드웨어상 이유가 있었던 건지, 아니면 Nintendo가 고객에게 바가지를 씌우며 게이머 삶을 더 나쁘게 만든 건지 궁금함
- 글에서 LoROM과 HiROM을 언급하니, 아마 같은 이야기를 하는 것 같음
- Out Of This World는 개발자가 FastROM 사용을 허가받지 못한 SlowROM/FastROM 사례임
-
개발자들이 이런 세부사항을 YouTube 브이로그로 만들기보다 글 형태로 계속 블로그에 써 주면 좋겠음
몇 KB 안에 많은 세부사항을 담을 수 있음
“Super Mario World”는 여전히 최고의 명작 게임. 놀라운 캐릭터, 스프라이트, 스테이지를 겨우 360KB 안에 담았음- 사이트에 나온 파일 크기는 틀렸음. Super Mario World는 512KB이고, 끝의 패딩을 버리면 508KB임
ZIP 형식으로 압축해야만 약 360KB 정도가 됨 - Super Mario World도 훌륭하지만, SNES 최고의 게임은 Donkey Kong Country 2라고 생각함
멋진 음악, 정확한 조작, 매력적인 그래픽까지 플랫폼 게임의 모든 면을 제대로 해냈음
Terranigma도 거의 같은 급이고, 내 기준에서 Super Mario World는 아마 3위쯤임 - 개발자들이 글보다 YouTube를 택하는 큰 이유는 많은 경우 동영상 콘텐츠를 훔치기 더 어렵기 때문이라고 봄
텍스트는 긁어가서 몇 단어만 바꾼 뒤 SEO 광고 사이트에 재사용할 수 있음 - Atari VCS의 “Pitfall!”은 4KB 카트리지 안에 완전히 다른 게임 화면 255개를 담았음 :)
- 사이트에 나온 파일 크기는 틀렸음. Super Mario World는 512KB이고, 끝의 패딩을 버리면 508KB임
-
카트리지에 “확장 칩”을 넣을 수 있는 능력을 현대 기술로 활용하면 무엇을 할 수 있을지 궁금함
SuperFX는 자체 프레임버퍼가 있고 그 전체를 VRAM으로 복사한다고 되어 있음
그렇다면 기술적으로는 터무니없이 강력한 SoC를 카트리지에 넣고, 그것으로 SNES 해상도의 현대적 그래픽을 렌더링한 뒤 결과 프레임을 SNES VRAM으로 복사하는 것도 가능한가?
한계가 어디에 있는지 궁금함- https://youtu.be/ar9WRwCiSr0?si=LArQqOoH2bLtTXCQ
- 누가 장난삼아 RTX 4090을 연결해 봤으면 좋겠음
-
“SNES용 DOOM의 작성자인 Randy Linden은 GSU 칩 문서도, DOOM 소스 코드도 접근할 수 없었다. 전부 리버스 엔지니어링했다”는 부분은 기술적으로 인상적이지만, 왜 그래야 했는지 궁금함
- Doom Wiki에 세부사항이 있음: https://doomwiki.org/wiki/Super_NES
포트의 유일한 프로그래머였던 Randy Linden은 게임에 매료되어 처음에는 스스로 Super NES용 Doom 포팅을 시작했음
당시 Doom 소스 코드는 아직 공개되지 않았으므로, Linden은 게임의 lump 구조를 자세히 이해하기 위해 Unofficial Doom Specs를 참고했음. 리소스는 IWAD에서 추출했지만, 기술적 한계 때문에 일부는 쓰이지 않았음
인터뷰에 따르면 Super FX용 개발 시스템이 부족했기 때문에, Linden은 본격적인 포트 개발 전에 자신의 Amiga에서 ACCESS라는 어셈블러, 링커, 디버거 도구 세트를 직접 만들었음
하드웨어 키트로는 해킹한 Star Fox 카트리지와 개조한 Super NES 컨트롤러 두 개를 콘솔에 꽂아 Amiga의 병렬 포트에 연결했고, 두 장치를 더 연결하기 위해 직렬 프로토콜을 사용했음
완전한 프로토타입을 만든 뒤 고용주인 Sculptured Software에 보여줬고, 회사가 개발 완료를 도왔음. Linden은 빠진 레벨을 넣을 수 있었다면 좋았겠지만, 게임은 이미 Super FX 2 게임의 최대 크기인 16메가비트, 약 2MB에 도달했고 여유 공간이 대략 16바이트뿐이었다고 말했음
또한 Super Scope 라이트건, Super NES 마우스, 멀티플레이용 XBAND 모뎀 지원도 추가했음. 동료 프로그래머 John Coffey는 Doom 시리즈 팬으로서 레벨을 수정했지만, 그중 일부는 id Software가 거절했음 - Wolfenstein 3D 포트에서도 비슷한 일이 있었음. John Carmack이 Rebecca Heineman에게 기술 문서를 얻기 위해 특허를 읽으려고 일본어를 배운 것을 칭찬했음
이런 것들 주변에는 늘 멋진 역사가 있고, 관련 내용을 여기에도 조금 더 써 둠: https://eludevisibility.org/super-noahs-ark-3d-source-code - 이 사례는 모르겠지만, 개발 키트와 SDK/문서는 종종 별도 SKU이고 후자가 더 비싼 경우가 많음
기억이 맞다면 Crash Bandicoot 팀도 SDK가 없어서 자체 코드를 굴리다가 메모리 카드 저장 관련 하드웨어 버그를 발견했음
- Doom Wiki에 세부사항이 있음: https://doomwiki.org/wiki/Super_NES
-
여러 게임의 바이트 수는 어디서 나온 건지 궁금함
게임은 ROM 칩에 들어 있었고, ROM 칩답게 크기는 2의 거듭제곱이었음. 예를 들어 Super Mario World는 512kb ROM으로 출시됐는데, 346,330바이트라는 숫자는 어디서 나온 것인가? 압축된 크기인가?- 숫자는 ZIP 크기를 바탕으로 한 추정치임. 하지만 좋은 방식은 아님
각 ZIP을 풀고 파일 끝의 0바이트 패딩을 세는 프로그램을 작성해야겠음
오늘은 너무 늦었고, 내일 작성해서 글을 업데이트하겠음 - 압축된 크기처럼 보임. SMW.SMC를 gzip으로 압축하면 347KB 파일이 나옴. 이건 꽤 오해를 부름
다른 문제도 있음. 글은 SFA2의 멈춤이 오디오 데이터 로딩 때문이라는 사실을 MVG가 발견한 것처럼 쓰지만, 그 영상보다 훨씬 전부터 알려져 있었음: https://forums.nesdev.org/viewtopic.php?p=70474#p70474
RTC에 대해서도 꽤 혼란스러워 보임. 콘솔이 꺼져 있고 카트리지가 빠져 있어도 시계가 계속 가게 하려는 것임은 GBC/GBA Pokemon 게임처럼 명백한데, NTSC 클럭 드리프트 때문일 수도 있다는 식으로 말함. 대체 무슨 말인지 모르겠음 - 데이터 패딩임
- 숫자는 ZIP 크기를 바탕으로 한 추정치임. 하지만 좋은 방식은 아님
-
“Super Mario World도 이런 처리를 받았다. 느려짐은 기억나지 않지만 그때 나는 겨우 열두 살이었다”는 부분과 관련해, Yoshi’s Island 4는 특정 조건에서 느려짐이 있음
Yoshi를 탄 상태로 Starman을 얻고 P-Switch를 누르면 그렇고, 정확히 기억나지 않는 다른 레벨도 있음. Monty Mole들이 한꺼번에 많이 튀어나오는 곳인데 Chocolate Island였던 것 같음
화면에 Sumo Bros. 둘과 Amazing Flying Hammer Bro.가 함께 나오는 세 번째 경우도 있었던 것 같음- Outrageous에서 지연이 엄청났던 기억이 남
-
에뮬레이터용 ROM을 카트리지에서 어떻게 덤프하는지 늘 이해가 안 됐음
명령어와 에셋을 덤프하고, 에뮬레이터가 해석할 수 있는 데이터 파일로 묶는 건 이해됨. 그런데 에뮬레이터는 카트리지 안의 모든 확장 칩 하드웨어를 어떻게 모델링하는가? 원본 카트리지에서 그건 어떻게 덤프되는가?- 확장 칩은 ROM이 아니므로 따로 에뮬레이션해야 함
개인적으로는 SNES의 전신인 NES 쪽 상황이 조금 더 나빴다고 봄
NES에는 매퍼라고 부르는 확장 칩이 꽤 많았음. 일반적인 기능은 추가 프로세서나 능력을 더하기보다 NES의 메모리 공간을 확장하는 것이었고, NES는 이들이 없으면 PRG ROM 32KB와 CHR 그래픽 ROM 4KB 또는 8KB로 제한되기 때문에 대부분의 게임에 들어갔음
NES 출시 이후의 대부분 게임은 이런 칩을 썼음
이들도 콘솔 자체와 함께 모두 리버스 엔지니어링해야 했음. 다행히 추가 CPU나 가속기를 리버스 엔지니어링하는 것보다는 훨씬 단순했음
MMC1, MMC3처럼 많은 게임에서 쓰인 흔한 칩도 있고, MMC2처럼 사실상 Punch-Out 전용인 칩도 있음 - 덤프되는 게 아님. 에뮬레이터 구현이 확장 칩 기능을 소프트웨어로 재현함
확장 칩 종류가 아주 많지는 않아서 감당 불가능한 수준은 아님
- 확장 칩은 ROM이 아니므로 따로 에뮬레이션해야 함
-
SNES의 복사 방지 방식은 소비자 입장에서는 쉽게 우회됐음. 다만 게임 제작사나 퍼블리셔에게는 아니었을 수 있음
당시에는 다들 SNES용 “백업 장치”를 가지고 있었음. SNES에 꽂고 플로피 드라이브가 달린 장치였고, 아주 싼 3.5인치 플로피에 게임을 “백업”했음
시스템이 동작하는 데 필요한 건 원본 카트리지 하나뿐이었고, 그걸 복사기에 꽂으면 장치가 그 카트리지의 CIC 칩을 재사용했음
https://en.wikipedia.org/wiki/Game_backup_device -
“DSP-1에는 DSP-1, DSP-1a, DSP-1b 세 버전이 있었다. 버그 수정과 공정 개선이 들어가면서 칩 동작이 약간 바뀌었고, 그 결과 Pilot Wings 데모의 비행기가 땅에 추락했다”는 부분을 보니, 누가 내가 왜 그렇게 못하냐고 물으면 그 핑계를 써야겠음