Super Nintendo 的核心

Fabien Sanglard 新闻

摘要

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

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

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

# 超级任天堂的“心脏” 来源:https://fabiensanglard.net/snes_hearts/index.html 2024年4月1日 超级任天堂的“心脏” --- 每当开始研究一台老式系统时,我最先喜欢做的是了解它的各个组件在硬件层面是如何协同工作的\[[1]\]。 每台计算机至少有一颗“心脏”,用来为所有其他芯片设定节奏。**时**钟输出引脚连接着一条铜线,这条铜线会延伸到大多数组件,接入它们的`CLK`输入端。 如果你像我一样主要搞软件,可能从未注意过——但各种处理器都有一个`CLK`输入引脚。从CPU(摩托罗拉68000\[[2]\]、英特尔奔腾\[[3]\]、MOS 6502\[[4]\]),到定制图形芯片(Midway的DMA2\[[5]\]、Capcom的CPS-A\[[6]\]/CPS-B\[[7]\]、世嘉的Genesis VDP\[[8]\]),再到音频芯片(雅马哈2151\[[9]\]、OKI msm6295\[[10]\]),它们都有这个引脚。 --- ## CLK 是如何产生的? `CLK`可以由两种组件产生。一种是**晶体振荡器**,通常看起来像扁平胶囊。另一种叫做**陶瓷谐振器**,是**竖向**的电容,看起来不如晶体那么高科技(而且它们也确实会随时间漂移)。 --- ## 打开看看! 带着这个认识,让我们窥探一下超级任天堂的内部。你能在主板上找到`CLK`发生器吗?提示:有两个。 *来源。点击图片查找CLK发生器。* --- ## 两颗心脏 在X2插槽中,蓝色的东西是一个`24.576` MHz的陶瓷谐振器。它位于音频芯片那一侧,因此它为**音频处理单元**设定节奏。 在X1插槽中,黄色的标有`D21L3`。它是一个`21.300` MHz振荡器。它靠近CPU和**图像处理单元**,并为它们设定节奏。 --- ## 文档中的差异 查看超级任天堂开发指南\[[11]\],发现它与我们观察到的情况不符。 图中显示的不是两个,而是三个振荡器(还有一个为负责复制保护的CIC芯片提供信号)。我们少了一个! 此外,CPU/PPU的频率在文档中被标注为`21.47727` MHz,但我们找到的是一个`21.300` MHz振荡器(这是PAL主板;NTSC主板会使用`21.500` MHz振荡器)。 这是怎么回事? --- ## CPU/PPU:从 `21.500` MHz 到 `21.47727` MHz 如果我们再看一下主板,会注意到左下角,就在振荡器旁边,有一个红色元件。这个红色东西是一个可变电容(也有人叫它微调电容),它将`21.500` MHz频率转换成`21.47727` MHz。 设计者为什么要让它可调?可能的答案是:任天堂担心振荡器会随时间老化,而技术人员可以对其进行调节。他们可能没想错——因为超级任天堂主机的常见问题之一是输出黑白画面,解决方法往往是调节电容(或者更换振荡器)\[[12]\]。 --- ## 分频器 主机里只有两个“主”时钟,但没有任何处理器直接使用它们。实际上,这些主时钟会经过分频器产生新的时钟。例如,Ricoh 5A22 CPU以主时钟的1/6运行,结果是`3.579545` MHz。幸运的是,SNES社区(特别是nocash)已经记录了所有这些分频器\[[13]\]。 ``` NTSC 时序 NTSC 晶体 21.4772700MHz (X1) NTSC 色彩时钟 3.57954500MHz (21.4772700MHz/6) (由PPU2芯片产生) NTSC 主时钟 21.4772700MHz (21.4772700MHz/1) (无倍频/分频) NTSC 点时钟 5.36931750MHz (21.4772700MHz/4) (由PPU芯片产生) NTSC CPU时钟 3.57954500MHz (21.4772700MHz/6) (无等待状态) NTSC CPU时钟 2.68465875MHz (21.4772700MHz/8) (短等待状态) NTSC CPU时钟 1.78977250MHz (21.4772700MHz/12) (手柄等待状态) NTSC 帧率 60.09880627Hz (21.4772700MHz/(262*1364-4/2)) APU 时序 APU 振荡器 24.576MHz (X2) DSP 采样率 32000Hz (24.576MHz/24/32) SPC700 CPU时钟 1.024MHz (24.576MHz/24) SPC700 定时器0+1 8000Hz (24.576MHz/24/128) SPC700 定时器2 64000Hz (24.576MHz/24/16) CIC 时钟 3.072MHz (24.576MHz/8) 扩展端口 8.192MHz (24.576MHz/3) ``` 超级任天堂总共有十五个时钟。希望这能解开文档中“缺失”振荡器的谜团。 --- ## 增强芯片 `SYS-CLK`(21.47727 MHz)线路被送入卡带端口。卡带中的组件通常不需要这个信号——它们由存放游戏指令和资源的ROM组成,不需要时钟信号。那么为什么要把它引到那里? 答案是:这样卡带就可以嵌入自己的处理器,称为**增强芯片**\[[14]\]。最著名的游戏是《星际火狐》,它采用了一颗“Mario” SuperFX处理器。Mario版本内部有一个分频器,将时钟减半至`10.738635` MHz。后来的GSU-1版本则运行在完整的`21.47727` MHz时钟上。 *《星际火狐》PCB(来源)。* 另外还有第二条CLK线路送入卡带,即`CIC-CLK`(3.072 MHz),它被送入卡带内的CIC芯片\[[15]\]。 不过`SYS-CLK`(21.47727 MHz)并不总是适用。有些游戏,比如《洛克人X2》,使用CX4增强芯片来实现图形效果。如果我们打开MM2的PCB,会发现一个`20` MHz振荡器(X1插槽),它为CX4的`CLK`引脚提供信号。 *《洛克人X2》PCB。注意20MHz振荡器(来源)。* --- ## 参考文献 ^ \[1\] 当然,现代系统及其微小的SoC做不到这一点。但对于90年代的硬件,比如超级任天堂,这没什么问题。 ^ \[2\] 68000引脚图 ^ \[3\] 奔腾引脚图 ^ \[4\] 6502引脚图 ^ \[5\] NBA Jam套件 ^ \[6\] CPS-A原理图 ^ \[7\] CPS-B原理图 ^ \[8\] Genesis VDP原理图 ^ \[9\] 街霸II声音系统内部 ^ \[10\] msm6295数据手册 ^ \[11\] SNES开发手册,图2-22-1 ^ \[12\] 修复无法输出彩色的超级任天堂 ^ \[13\] SNES时序振荡器 ^ \[14\] SNES增强芯片(Super FX、DSP1、S-DD1、SA-1等) ^ \[15\] 10NES,超级任天堂复制保护

相似文章

超级任天堂卡带内部揭秘

Fabien Sanglard

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

剖析超级任天堂视频系统

Fabien Sanglard

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

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带宽限制下渲染精灵和背景,描述了不同视频模式中的硬件权衡。