超级任天堂游戏卡带内部探秘
2024年4月21日,来探秘超级任天堂游戏卡带内部。超级任天堂显著特点之一,是游戏卡带(cart)能在ROM芯片存储的内容,远不止指令和游戏资源。打开卡带印刷电路板(PCB),能看到CIC防拷贝芯片、静态随机存取存储器(SRAM),甚至还有“增强处理器”等组件。
CIC防拷贝芯片
此前在[10NES]一文中,已深入探讨过超级任天堂(SNES)的防拷贝机制。该机制通过两个芯片同步通信实现,一个在游戏机主机内,另一个在游戏卡带中。若主机内的CIC芯片检测到异常,就会重置所有处理器。
并非所有SNES游戏卡带都有CIC芯片,像《超级3D诺亚方舟》这类未经授权的游戏就没安装。玩家若要游玩此类游戏,需先将该游戏卡插入游戏机,再插上一张官方游戏卡,让诺亚方舟游戏卡的CIC总线线路连接到官方游戏卡的CIC芯片上。
ROM:指令与游戏资源
因一直没找到完整的SNES游戏ROM大小列表,所以自己制作了一份。该列表涵盖美国、日本和欧洲地区的3378款游戏,具体数据见相关图表。
过去,游戏ROM大小通常以比特(bits)而非字节(bytes)表示。例如,《塞尔达传说3》的ROM大小以比特为单位是1048576 * 8 / (1024 * 1024) = 8Mb,而非宣传的1048576字节。有史以来发布的最大游戏《星海传说》,其ROM大小为48Mb(即6291456字节),而经典游戏《超级马里奥世界》仅用了524288字节(4Mb)的ROM。
若不想点击查看CSV文件,以下是一些值得关注的游戏:
| 游戏名称 | 发行地区 | 容量(Mb) | 容量(字节) |
|---|---|---|---|
| 《星海传说》 | 日本 | 48 | 6291456 |
| 《幻想传说》 | 日本 | 48 | 6291456 |
| 《街头霸王Alpha 2》 | 美国 | 32 | 4194304 |
| 《街头霸王Zero 2》 | 美国 | 32 | 4194304 |
| 《时空之轮》 | 美国 | 32 | 4194304 |
| 《超级街头霸王II》 | 美国 | 32 | 4194304 |
| 《大金刚国度》 | 美国 | 32 | 4194304 |
| 《超级银河战士》 | 美国 | 24 | 1571143 |
| 《魔法使之剑》 | 美国 | 16 | 2097152 |
| 《街头霸王II》 | 美国 | 16 | 2097152 |
| 《超级马里奥世界2:耀西岛》 | 美国 | 16 | 2097152 |
| 《洛克人X2》 | 美国 | 12 | 1572864 |
| 《阿拉丁》 | 美国 | 8 | 1048576 |
| 《忍者神龟IV》 | 美国 | 8 | 1048576 |
| 《魂斗罗III:异形战争》 | 美国 | 8 | 1048576 |
| 《塞尔达传说:时之笛》 | 美国 | 8 | 1048576 |
| 《星际火狐》 | 美国 | 8 | 1048576 |
| 《超级马里奥赛车》 | 美国 | 4 | 524288 |
| 《超级马里奥世界》 | 美国 | 4 | 524288 |
| 《F - Zero》 | 美国 | 4 | 524288 |
SRAM
部分游戏支持保存进度,通过由电池供电的SRAM芯片实现。游戏机关闭时,SRAM进入低功耗模式以减少电池消耗。
在塞尔达传说3 PCB板中,能看到之前提到的CIC芯片(D413A)位于U4位置。U1位置是0x80000 = 524288字节的ROM;U2位置是一个LH5268AF - 10TLL芯片,提供64 Kbits(8 KiB)的SRAM;U3位置的MAD - 1芯片是一个内存地址解码器,用于仲裁对ROM/RAM的访问。
增强处理器
最著名的增强处理器是Super FX(又名“MARIO”,也被称为“GSU - 1”),1993年用于《星际火狐》游戏。不过在此之前就已有其他增强芯片(EC)被使用。
完整的SNES增强游戏列表可在相关平台找到,总共有13种增强芯片为72款游戏提供支持。
增强处理器:SA - 1
“超级加速器1”(Super Accelerator 1,简称SA - 1)是增强芯片中的佼佼者,有34款游戏卡带采用该芯片。它基于65C816 CPU(与SNES主机使用的CPU相同),但运行速度是其4倍,达到10.74 MHz,还配备了2KiB的SRAM和一个集成的CIC芯片。
在马里奥RPG PCB板中,因SA - 1芯片已集成CIC芯片,所以没有单独的CIC芯片。U1位置是包含游戏指令和资源的ROM芯片;U2位置是SRAM芯片(集成了解码器,因此无需MAD - 1芯片);U3位置则是SA - 1芯片。
SA - 1芯片没有振荡器,使用游戏卡带端口的系统主时钟线,并在内部将其频率减半,最终运行频率为21.4772700 MHz / 2 = 10.74 MHz。其工作方式可在《超级任天堂开发者文档第二卷》中找到详细描述。启动时,SA - 1处于“停止”状态,SNES CPU会创建一个复位向量,并启动SA - 1,SA - 1的初始指令指针从该专用复位向量中获取。
SA - 1有加速器模式、并行处理模式和混合处理模式三种操作模式,在最强大的配置下,能使整个系统的性能提升5倍。
得益于处理性能的提升,SNES能够对图像处理器(PPU)中的128个精灵进行动画处理和碰撞检测,还允许实时对精灵进行变换并写回PPU的显存。任天堂的SA - 1演示卡带展示了这些显著改进。
SA - 1还被复古游戏社区用于改善过去因性能问题而出现卡顿的游戏,如消除《超级马里奥世界》的卡顿、去除《沙罗曼蛇III》的卡顿、去除《魂斗罗III》的卡顿等。
将游戏转换为支持SA - 1的过程似乎相当复杂,尤其需要重新映射RAM/ROM的访问。这有点令人费解,因为SA - 1的文档中提到“SNES和SA - 1使用相同的内存映射”。若知道原因,可发邮件告知。直到2019年,仍有人通过SA - 1收集项目努力实现自动重新映射,并让更多的SNES游戏支持SA - 1。
增强处理器:CX4
CX4是卡普空开发的芯片,为《洛克人X2》和《洛克人X3》两款游戏提供支持。它能进行3D线框渲染和大量数学运算,还可对精灵进行缩放和旋转,并将其写入显存。在《洛克人X2》的开场动画或BOSS战中能看到相关效果。
在洛克人X2 PCB板中,U4位置是防拷贝CIC芯片;U1位置是8M(8 Mbis = 1MiB)的ROM,包含游戏指令和资源;U2位置还有更多的ROM;U3位置则是CX4芯片。需要注意的是,X1位置有一个20MHz的振荡器,因为CX4芯片不使用游戏机的主时钟。
增强处理器:CS - DD1
DD1是一款精灵解压缩芯片,能直接向图像处理器的显存提供数据。它被用于《星海传说》和《街头霸王Alpha 2》两款游戏。
有传言称,DD1芯片是《街头霸王Alpha 2》在回合开始前出现黑屏问题的原因,Modern Vintage Gamer详细解释了其中原因,原来问题出在将声音样本传输到数字信号处理器(DSP)的RAM上。
《街头霸王Alpha 2》的游戏卡带在U1位置配备了大量的ROM(4 MiB),并使用DD1芯片实时解压缩游戏资源。这里没有单独的CIC芯片,因为它已经集成在DD1芯片中。
增强处理器:DSP - 1
DSP系列芯片支持19款游戏,其中DSP - 1芯片就占了16款,特别是像《超级马里奥赛车》和《飞行翼》这样的经典游戏。
这个名称选择不太恰当,因为DSP代表数字信号处理器,但它并不像大多数DSP那样处理连续信号。《超级任天堂开发者手册第二卷》对该芯片进行了详细介绍,它以阻塞模式工作,即DSP运行时,CPU处于等待状态。
在马里奥赛车PCB板中,U5位置是外部CIC芯片;U1位置是ROM;U3位置是用于保存游戏进度的SRAM;U4位置是用于ROM/RAM寻址的MAD - 1地址解码器,左上角还配备了电池以确保游戏保存数据在游戏机断电后不丢失。
和CX4芯片一样,DSP - 1芯片也不使用游戏卡带的主时钟,而是需要一个振荡器(这里是X1位置),其产生的频率为8 MHz。
当爱好者们发现《飞行翼》游戏使用的纹理分辨率远高于模式7的显示能力时,对bsnes模拟器进行了修改,使模式7能够实现高清分辨率。
DSP - 1芯片有三个版本,分别是DSP - 1、DSP - 1a和DSP - 1b。虽然这些版本修复了一些bug并改进了处理性能,但芯片的行为也发生了一些细微变化,导致《飞行翼》演示中的飞机出现坠毁问题。
增强处理器:DSP - 2
DSP - 2芯片仅用于一款游戏《地下城主》,主要用于转换Atari ST的例程,似乎主要用于精灵缩放。
增强处理器:DSP - 3
DSP - 3芯片仅用于一款游戏《SD高达GX》。
增强处理器:DSP - 4
DSP - 4芯片用于两款游戏:《顶级赛车3000》和《星球冠军TG 3000》。
这些增强处理器究竟还会给超级任天堂游戏带来怎样的惊喜呢?让人不禁期待!