超级任天堂卡带内部揭秘

Fabien Sanglard 论文

摘要

对超级任天堂卡带的详细技术分析,涵盖 CIC 复制保护、ROM 容量分布、带电池备份的 SRAM 以及 Super FX 等增强处理器。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/05/16 03:36

# 超级任天堂卡带内部探秘 来源:https://fabiensanglard.net/snes_carts/index.html 2024年4月21日 超级任天堂卡带内部探秘 --- 超级任天堂的一个显著特点是,游戏卡带不仅能将指令和资源封装在ROM芯片中。如果我们打开卡带查看PCB板,会发现里面藏有CIC防拷贝芯片、SRAM,甚至还有"增强处理器"。 ## CIC --- SNES的防拷贝机制在我之前的文章 [10NES](https://fabiensanglard.net/10nes) 中已有详细探讨。其原理是让两个芯片同步通信:一个位于主机内,另一个位于卡带中。如果主机端的CIC检测到异常,就会重置所有处理器。 并非所有SNES卡带都包含CIC。未经授权的游戏如《Super 3D Noah's Ark》就没有CIC芯片。要玩这款游戏,需要先将它插入主机,然后在上面再插一张正版卡带。CIC总线信号会从《诺亚方舟》卡带转发到正版卡带的CIC芯片上! ## ROM:指令与资源 --- 我未能找到所有SNES游戏及其ROM尺寸的完整列表,因此自己整理了一份([Google表格](https://docs.google.com/spreadsheets/d/1XH9xKZFQ09lLWfFzo4Y9-1FUAqSTnH6FPrQUINa__Lw/edit?usp=sharing))。图表中涵盖了 3,378 款游戏(涵盖美版/日版/欧版)。 游戏ROM尺寸曾以比特(bits)而非字节(bytes)表示。例如,塞尔达传说III 的广告中不会说 1,048,576 字节,而是用比特表示其ROM容量:1,048,576 * 8 / (1024*1024) = 8Mb。史上容量最大的游戏是《星海传说》(48Mb,即6,291,456字节),而像《超级马里奥世界》这样的杰作仅使用 524,288 字节(4Mb)的ROM。 如果你不想点击`.csv`文件,这里列出了一些最值得关注的游戏(如果你的最爱不在列表中,欢迎发邮件告知)。 | 游戏 | 区域 | ROM大小(Mb) | ROM大小(字节) | |------|------|---------------|-----------------| | Star Ocean | 日本 | 48 | 6,291,456 | | Tales of Phantasia | 日本 | 48 | 6,291,456 | | Street Fighter Alpha 2 | 美国 | 32 | 4,194,304 | | Street Fighter Zero 2 | 美国 | 32 | 4,194,304 | | Chrono Trigger | 美国 | 32 | 4,194,304 | | Super Street Fighter II | 美国 | 32 | 4,194,304 | | Donkey Kong Country | 美国 | 32 | 4,194,304 | | Super Metroid | 美国 | 24 | 1,571,143 | | Secret of Mana | 美国 | 16 | 2,097,152 | | Street Fighter II | 美国 | 16 | 2,097,152 | | Super Mario World 2 - Yoshi's Island | 美国 | 16 | 2,097,152 | | Mega Man X2 | 美国 | 12 | 1,572,864 | | Aladdin | 美国 | 8 | 1,048,576 | | Teenage Mutant Ninja Turtles IV | 美国 | 8 | 1,048,576 | | Contra III - The Alien Wars | 美国 | 8 | 1,048,576 | | Legend of Zelda, The - A Link to the Past | 美国 | 8 | 1,048,576 | | Star Fox | 美国 | 8 | 1,048,576 | | Super Mario Kart | 美国 | 4 | 524,288 | | Super Mario World | 美国 | 4 | 524,288 | | F-Zero | 美国 | 4 | 524,288 | ## SRAM --- 一些游戏提供了存档功能。这是通过电池供电的SRAM芯片实现的。当主机断电时,SRAM进入低功耗模式以减少电量消耗。 *来源(snescentral.com)(https://snescentral.com/pcb.php?id=0164&num=15&side=front):《塞尔达传说III》PCB板* 在上方这块《塞尔达传说III》的PCB中,我们可以看到之前提到的CIC(D413A)位于U4。U1是 0x80000 = 524,288 字节的ROM。U2 是一个 LH5268AF-10TLL,容量为 64 Kbits(8 KiB)的SRAM。U3 的 MAD-1 芯片是一个**内存地址解码器**,用于仲裁对ROM/RAM的访问[[1]](https://fabiensanglard.net/snes_carts/index.html#footnote_1)[[2]](https://fabiensanglard.net/snes_carts/index.html#footnote_2)。 ## 增强处理器 --- 最著名的增强处理器是 Super FX(又称 "MARIO" 或 "GSU-1"),用于1993年的《星际火狐》。但在此之前,EC芯片就已经被使用了。 完整的增强型SNES游戏列表可在 [维基百科](https://en.wikipedia.org/wiki/List_of_Super_NES_enhancement_chips#:~:text=9%5D%5B25%5D-,List%20of%20Super%20NES%20games%20with%20enhancement%20chips) 和 [snescentral.com](https://snescentral.com/chiplisting.php) 上找到。总共有13种EC芯片为72款游戏提供支持。 ### 增强处理器:SA-1 --- "Super Accelerator 1" 是增强芯片中的MVP。它被用于34款卡带[[3]](https://fabiensanglard.net/snes_carts/index.html#footnote_3),是一颗65C816 CPU(与SNES主机中的CPU相同),但运行频率是其4倍,达到10.74 MHz。它还集成了2KiB的SRAM和内置CIC[[4]](https://fabiensanglard.net/snes_carts/index.html#footnote_4)。 *来源(snescentral.com)(https://snescentral.com/pcbboards.php?chip=SHVC-1L5B-10):《超级马里奥RPG》PCB* 上图是一款《马里奥RPG》的PCB。注意没有CIC芯片(因为SA-1集成了CIC),U1是包含游戏指令和资源的ROM芯片,U2是SRAM芯片(带有集成解码器,无需MAD-1),U3是SA-1芯片。 注意这里没有晶振,因为SA-1使用卡带端口的系统主时钟线,并在内部二分频。结果是 21.4772700 MHz / 2 = 10.74 MHz 的频率。 #### 它是如何工作的? 我们可以在SNES开发者文档第二卷中找到完整描述[[5]](https://fabiensanglard.net/snes_carts/index.html#footnote_5)。启动时,SA-1处于"停止"状态。SNES CPU创建一个复位向量并恢复SA-1的运行。SA-1的初始指令指针从该专用的复位向量中获取。 SA-1有三种工作模式:加速模式、并行处理模式和混合处理模式。在最强大的配置下,它能使整个系统的性能提升五倍。 > SA-1 CPU 和 Super NES CPU 同时运行,使得 Super Accelerator System (SAS) 的性能是当前 Super NES 的五倍。 > —— Super Nintendo 开发者手册第二卷[[6]](https://fabiensanglard.net/snes_cards/index.html#footnote_6) 得益于处理能力的提升,SNES能够对PPU中全部128个精灵进行动画和碰撞检测。这种性能还允许实时变换精灵(旋转/缩放)并将其写回PPU的VRAM。这种显著的改进通过任天堂的SA-1演示卡带得以展示[[7]](https://fabiensanglard.net/snes_cart/index.html#footnote_7)。 SA-1爱好者进一步证明了性能差异。下面的视频比较了使用 SlowROM(访问时间200ns)、FastROM(访问时间120ns)和SA-1执行排序算法的差异。 视频作者有些混淆:他们将 "SlowROM" 标为 "LoRom",将 "FastROM" 标为 "HiRom"(LoRom 和 HiRom 仅涉及内存映射[[8]](https://fabiensanglard.net/snes_carts/index.html#footnote_8)[[9]](https://fabiensanglard.net/snes_carts/index.html#footnote_9))。 SA-1也被复古游戏社区用于改善过去因卡顿而影响游戏体验的游戏。令人惊叹的项目如 [消除《超级马里奥世界》的卡顿](https://github.com/VitorVilela7/SMW-SA1-Pack)、[《宇宙巡航机III》卡顿消除](https://www.youtube.com/watch?v=ImH8B1cG3p0)(耗时三个月[[10]](https://fabiensanglard.net/snes_carts/index.html#footnote_10))和 [《魂斗罗III》卡顿消除](https://fabiensanglard.net/snes_carts/index.html#footnote_11)都是杰作。甚至连《超级马里奥世界》[[12]](https://fabiensanglard.net/snes_carts/index.html#footnote_12)也得到了优化(我不记得有卡顿,但当时我才十二岁)。 《Super R-Type》(SNES)- 原版与SA-1对比。 《魂斗罗III》(SNES)- 原版与SA-1对比。 《宇宙巡航机III》- SNES原版与SA-1对比[[13]](https://fabiensanglard.net/snes_carts/index.html#footnote_13)。 《宇宙巡航机III》(SNES)- 原版与SA-1对比。 将一款游戏转换为SA-1的过程似乎相当复杂,特别需要重新映射RAM/ROM访问。这令人费解,因为SA-1的文档中明确说明 "SNES和SA-1使用相同的内存映射"[[14]](https://fabiensanglard.net/snes_carts/index.html#footnote_14)。如果你知道原因,请发邮件给我。 直到2019年,通过SA-1 Collection Project[[15]](https://fabiensanglard.net/snes_carts/index.html#footnote_15),人们仍在努力实现自动重映射,以便将更多SNES游戏转换为SA-1。 ### 增强处理器:CX4 --- CX4是Capcom的产物,用于《洛克人X2》和《洛克人X3》。它能够进行3D线框渲染、多种数学运算,以及将精灵缩放和旋转到VRAM中[[16]](https://fabiensanglard.net/snes_carts/index.html#footnote_16)。你可以在《洛克人X2》的 [开场动画](https://www.youtube.com/watch?v=J4IH8Xwt290) 或 [Boss战](https://twitter.com/Foone/status/1177645360308572160) 中看到示例。 > 大多数人将其与线框效果联系在一起,但它绝不仅仅用于此。它提供了精灵函数、线框效果、推进、向量、三角形、三角函数和结果表以及坐标变换功能。在《洛克人X2》和《洛克人X3》中,它处理所有精灵,所以实际上贯穿了整个游戏。这基本上允许在屏幕上显示比SNES原本允许的更多的精灵,而不会闪烁。我认为这就是一些大型Boss(如开场Boss)的实现方式。 > —— 来源[[17]](https://fabiensanglard.net/snes_carts/index.html#footnote_17) *来源(snescentral.com)(https://snescentral.com/pcbboards.php?chip=SHVC-2DC0N-01):《洛克人X2》PCB* 上图是《洛克人X2》的PCB。注意防拷贝CIC位于U4,8M(8兆比特 = 1MiB)ROM包含游戏指令和资源在U1,更多ROM在U2,CX4在U3。 注意X1处的20MHz晶振,因为CX4不使用主机的主时钟。 ### 增强处理器:CS-DD1 --- DD1是一块精灵解压芯片,能够直接向图像处理单元的VRAM提供数据(还有一点额外功能[[18]](https://fabiensanglard.net/snes_carts/index.html#footnote_18))。它用于两款游戏:《星海传说》和《街头霸王Alpha 2》。 曾有传闻说《街头霸王Alpha 2》在 [回合开始前](https://youtu.be/fB9GlZUYNUQ?feature=shared&t=454) 的空白时间是由DD1造成的。Modern Vintage Gamer 详细解释了原因[[19]](https://fabiensanglard.net/snes_carts/index.html#footnote_19)。事实证明问题在于将音频样本传输到DSP RAM。 *来源(snescentral.com)(https://snescentral.com/pcb.php?id=0046&num=1&side=front):《街头霸王Alpha 2》PCB* 这是今天我们将看到的最简单的PCB。《街头霸王Alpha 2》搭载了大量ROM在U1(4 MiB),以及DD1用于实时解压资源。注意没有CIC,因为它已集成到DD1中。 ### 增强处理器:DSP-1 --- DSP芯片系列支持十九款游戏。其中DSP-1占十六款,包括经典如《超级马里奥卡丁车》和《Pilotwings》[[20]](https://fabiensanglard.net/snes_carts/index.html#footnote_20)。 这个名字起得不太恰当,因为DSP代表数字信号处理器(Digital Signal Processor),但它们并不像大多数DSP那样处理连续信号。 该芯片在Super Nintendo开发者手册第二卷[[21]](https://fabiensanglard.net/snes_carts/index.html#footnote_21)中有详细记载。从这些页面中我们了解到,它以阻塞模式工作(CPU在DSP操作期间不执行任何操作)。 > Super NES CPU等待DSP1处理数据,然后才发送下一个数据。 > —— 开发者手册[[22]](https://fabiensanglard.net/snes_carts/index.html#footnote_22) DSP提供了诸如快速16位乘法、逆运算、正弦/余弦投影、向量大小、旋转等指令,这些对编程HDMA和更新Mode 7中的3D视图至关重要[[23]](https://fabiensanglard.net/snes_carts/index.html#footnote_23)。 *来源(snescentral.com)(https://snescentral.com/pcbboards.php?chip=SHVC-1K1X-01):《超级马里奥卡丁车》PCB* 上图是一块密集的《马里奥卡丁车》PCB,它利用了我们迄今学到的每个组件。U5有外部CIC,U1有ROM,U3有用于存档的SRAM,最后U4有用于ROM/RAM寻址的MAD-1地址解码器。当然,为了让游戏存档在主机断电后仍然有效,左上角有一个电池。 与CX4一样,DSP不使用卡带线的主时钟。而是需要一个晶振(这里在X1处)。产生的频率为8 MHz。 当爱好者发现《Pilot Wings》使用的纹理分辨率远高于Mode 7所能显示的分辨率时,他们"改进"了这款DSP-1支持的游戏。bsnes 被 [修改](https://hackaday.com/2019/04/26/snes-mode-7-gets-an-hd-upgrade/) 以给Mode 7提供HD分辨率,结果如下所示。 DSP-1有三个版本:DSP-1、DSP-1a和DSP-1b。在修复bug和优化工艺的过程中,芯片行为略有改变,导致《Pilot Wings》演示中的飞机坠毁(如Foone所揭示[[24]](https://fabiensanglard.net/snes_carts/index.html#footnote_24))。 ### 增强处理器:DSP-2 --- 用于单一游戏(《地牢大师》),用于转换Atari ST的例程。似乎主要是为了帮助精灵缩放,如 [这里](https://www.smwcentral.net/?p=viewthread&t=83051) 所示。 ### 增强处理器:DSP-3 --- 用于单一游戏(《SD高达GX》)。 ### 增强处理器:DSP-4 --- 用于两款游戏(《Top Gear 3000》和《The Planet's Champ TG 3000》)。 ### 增强处理器:OBC-1 --- OBC-1用于单一游戏《Metal Combat: Falcon's Revenge》(Intelligent Systems开发)。有传言说它用于操作精灵。但这一点在nesdev.org上存在争议。 > 本质上它是一个非常非常简单的存档RAM映射器。它帮助在RAM中构建OAM(精灵)表(无需位操作),然后通过DMA传输到OAM内存。 > 老实说,这看起来是对工程努力的严重浪费。对于有经验的程序员来说,完全移除这个芯片应该只是一个周末项目。[...] 我认为它最大的理由是对抗盗版的好处。 > —— Near[[25]](https://fabiensanglard.net/snes_carts/index.html#footnote_25) *来源(snescentral.com)(https://snescentral.com/pcbboards.php?chip=SHVC-2E3M-01):《Metal Combat: Falcon's Revenge》PCB* 在《Metal Combat》的PCB中,我们找到OBC1位于U4。U6有CIC,U5有地址解码器MAD-1,U1和U2是游戏资源ROM,U3是8KiB的SRAM用于存档,左上角是SRAM供电电池。 ### 增强处理器:S-RTC --- S-RTC是一个用于跟踪实时时钟的芯片,仅用于单一游戏《大怪兽物语II》。尚不清楚哈德森软件开发人员为何需要跟踪实时时间。也许是为了向玩家显示时间? *来源(snescentral.com)(https://snescentral.com/pcbboards.php?chip=SHVC-LJ3R-01):《大怪兽物语II》PCB* CIC在U6,S-RTC在U5,MAD-1在U4,U1和U2有大量ROM,U3是8KiB的SRAM用于存档,左上角是供电电池。 ### 增强处理器:SPC7110 --- 爱普生(Epson)生产的数据解压芯片,用于三款游戏:[《天外魔境Zero》](https://en.wikipedia.org/wiki/Tengai_Maky%C5%8D_Zero)、[《桃太郎电铁Happy》](https://www.youtube.com/watch?v=act2pjsCnbg) 和 [《超级力量联盟4》](https://www.youtube.com/watch?v=8OktWQAZscc),后者还具备实时时钟功能。 *来源(snescentral.com)(https://snescentral.com/pcb.php?id=0883&num=0&side=front):《天外魔境Zero》PCB* 上图中的新意是U5的R1513,用于在电源开关时保护SRAM免受电压尖峰影响。SRAM实际上在U3(8KiB),CIC(F411B)在U7,两个大容量ROM在U1和U2。最后,SPC7110在U4。 ### 增强处理器:ST-010 --- SETA公司的ST系列芯片据说旨在改善游戏AI。ST-010用于单一游戏(《Exhaust Heat 2 - F1 Driver he no Kiseki》)[[26]](https://fabiensanglard.net/snes_carts/index.html#footnote_26)。 *来源(snescentral.com)(https://snescentral.com/pcbboards.php?chip=SHVC-1DS0B-20):《Exhaust Heat 2》PCB* CIC(D411A)在U4。

相似文章

剖析超级任天堂视频系统

Fabien Sanglard

从任天堂工程师的视角,详细探讨超级任天堂的视频系统设计,解释CRT技术与工程选择。

Super Nintendo 的核心

Fabien Sanglard

对 Super Nintendo 中时钟生成硬件的详细分析,解释了用于产生所需频率的两个振荡器和可调电容器。

SNES 图形系统工作原理

Fabien Sanglard

基于 Jonathon Donaldson 的原理图,对超级任天堂图形硬件的详细技术解释,包括 PPU1 和 PPU2 芯片、VRAM、OAM 和 CGRAM。

Super Nintendo主板的发展历程

Fabien Sanglard

本文详细介绍了Super Nintendo主板在12年生命周期中的版本演变,重点描述了任天堂如何通过Classic、APU和1-CHIP等世代将芯片数量从15个减少到9个。

SNES: 精灵与背景渲染

Fabien Sanglard

本文解释了SNES的PPU如何在紧张的VRAM带宽限制下渲染精灵和背景,描述了不同视频模式中的硬件权衡。