Nintendo中古FC红白机电子小探秘

Nintendo Famicom

Nintendo 中古 FC 红白机电子小探秘

Camellia, 2024.04.06

今年年初,在日本的中古店购买了任天堂 Nintendo FC 红白机,回国后拆装、测试,小小探秘任天堂红白机的集成电路,回味20世纪80年代的电子技术。

Courtesy of Michael Norris

FC 是 Family Computer 的缩写,也简写作 Famicom ,日语 ファミリーコンピュータ 。1983年7月15日,日本任天堂公司 Nintendo 发布了其首款 FC 游戏机。这次购买的中古是1984年款和1989年款。
1984年款和1983年款的区别是:1983年款的控制手柄的A、B按钮是方形的,而1984年款则是圆形的,1989年款的主机上印有 FF 字样。

1984年款:
1984年款和1989年款:
1983年款:
Courtesy of www.reddit.com

拆机、清洗,焕然一新,颇有感触的是几十年前的产品材质、质量很赞。
主控制手柄有选择和开始按钮,副控制手柄有微型话筒和音量调节按钮。
各个按钮通过导电橡胶实现按钮按下后导通电路板的对应电路。

来看看集成电路和电子设计吧。

FC 红白机的主机集成电路如下图所示:

  • CPU RICHO RP2A03E
  • PPU RICHO RP2C02E
  • Decoder HITACHI MB74LS139
  • Latches / Flip-Flop FUJITBSLI M74LS373P
  • RAM TMM2115BP
  • Bus Buffer TOSHIBA MN74HC368


CPU

CPU (Central Processing Unit) 采用 RICHO RP2A03E 8位微处理器,即单片机,主频1.79MHz,基于 MOS Technology 6502 技术。MOS Technology 6502 于1975年由 MOS Technology 公司的 Chuck Peddle 带领开发。
Courtesy of www.6502.org

RP2A03E 在6502芯片的基础上增加了声音处理功能,该 CPU 采用8位数据总线、16位地址总线;具有 Program Counter 、 Stack Pointer 、 Processor Status 、Accumulator 、Index X 、 Index Y 等6个内部寄存器。



PPU

PPU (Picture Processing Unit) 采用 RICHO RP2C02 或 RP2C02E 8位微处理器,主频1.79MHz。RP2C02 或 RP2C02E 在 6502 的基础上发展而来,作为图像处理单元,其相当于现在的显卡。
RP2C02 或 RP2C02E 同样采用16位地址总线,内存寻址能力可以达到64kB,但是其内部 RAM 即 VRAM( Video RAM )仅16kB。
RP2A03E 在6502芯片的基础上增加了声音处理功能,该 CPU 采用8位数据总线、16位地址总线;具有 Program Counter 、 Stack Pointer 、 Processor Status 、Accumulator 、Index X 、 Index Y 等6个内部寄存器。


颜色
Nintendo FC 红白机调色能力为64色( Palette ),剔除重复颜色,有52种颜色。
调色板(Palette)分为 Image Palette (存储空间从$3F00到$3F0F) 和 Sprite Palette (存储空间从$3F10到$3F1F),各自有16个字节,其中 Image Palette 用于背景颜色, Sprite Palette 用于前景游戏人物颜色。调色板( Palette )不存储具体的颜色,仅存储 System Palette 中具体颜色的索引。
理论上前景和背景各可以指向16种颜色,但是$3F00用于透明背景颜色,并且每4个字节需要重复一次该颜色,因此$3F04、$3F08、$3F0C、$3F10、$3F14、$3F18以及 $3F1C是$3F00的复制,因此同一时刻,屏幕上总颜色数最大有25种。
与此同时,这每4个连续的字节就构成了一个子调色板。

画面
Nintendo FC 红白机的画面由多个图案构成, FC 红白机采用图案索引表( Pattern Table )来表示一个8 x 8点阵(像素)的图案(Tile)。FC 红白机游戏屏幕大小为256 x 240像素,所以背景由 32 x 30 = 960 图案(Tile)组成,此外还需要额外考虑前景图案。
每张图案索引表( Pattern Table )采用2bit来表示一个像素,即采用2 x 8 x 8 = 128bit = 16Byte 来存储一个图案,因此每张图案索引表( Pattern Table )不仅存储了图案,还可以存储颜色索引,同一图案中可以有3种颜色+1个透明颜色,透明颜色相当于不显示。
但是一个屏幕背景上的960张图案很多是重复的,FC 红白机仅考虑最多采用256种不同的图案组合来用于一个屏幕背景,因此仅使用16 x 256 = 4096Byte,即4kB来记录这256种不同的图案。
FC 红白机采用两组图案索引表,每组图案表 4kB(存储空间从$0000到$0FFF、从$1000到$1FFF),图案表总共占 8kB。两组图案索引表存储了最新的两组画面。

名称表( Name Tables )用于表示背景,由于背景由 32 x 30 = 960 图案( Tile )组成,而且这960个图案( Tile )必须有一定的排列次序,所以名称表( Name Tables )就是记录这个次序的。
同样一个屏幕背景上的960张图案很多是重复的,FC 红白机仅考虑最多采用256种不同的图案组合来用于一个屏幕背景,因此采用8bit,即1Byte就可索引这256种图案(2^8 = 256),全屏幕使用960Byte的存储空间,这就是一张名称表( Name Tables )的大小。
每张名称表( Name Tables )还对应一张属性表( Attribute Table ),属性表( Attribute Table )存储了每个图案的颜色字节的高两位。即采用2bit来指向某个子调色板。
因此属性表( Attribute Table )指明了某一张图案采用哪个子调色板(即采用具体的哪3种颜色+透明颜色),图案索引表( Pattern Table )在这个子调色板的范围内,通过上文所述的2bit为该图案的每个像素分别指向该子调色板中的3种具体颜色或1个透明颜色,注意同一个图案仅能指向同一个子调色板。

例如某子调色板内采用4个字节分别存储了透明色、红色、绿色、橙色,而图案索引表( Pattern Table )中的某张图案就是上图的彩色小鸟,同时通过属性表( Attribute Table )指向了这个子调色板,并通过00(透明色)、01(红色)、10(绿色)、11(橙色)为彩色小鸟的每个像素上色。
属性表( Attribute Table )中的每个字节指向4个子调色板,64Byte可以指向256个子调色板。
PPU 还有一部分较大的内部的内存,并没有包含在 PPU 地址总线可寻到的地址空间里面,这就是人物属性内存( Object Attribute Memory )用于存储前景人物( Sprites )的属性信息,人物属性内存( Object Attribute Memory )总共 256Byte,支持 64 个前景人物( Sprites ),即采用4Byte来表示一个前景人物( Sprites ):
  1. Byte 0:Sprites 的 Y 坐标,以像素为单位。
  2. Byte 3:Sprites 的 X 坐标,以像素为单位。
  3. Byte 1:Sprites 所使用的图案( Tile )。
  4. Byte 2: Sprites 的属性:
    • bit 0、1:Sprites 所使用的子调色板。
    • bit 2、3、4:暂时保留。
    • bit 5:前景人物( Sprites )与背景的优先级,0 表示该前景人物( Sprites )在背景前面,1 表示该前景人物( Sprites )在背景后面。
    • bit 6:水平翻转。
    • bit 7:垂直翻转。



Decoder

74LS139是双通道2线—4线译码器( Decoder ),可对2位高位地址进行译码,产生4个片选信号,最多可外接4个芯片。
图片 在 FC 红白机中, CPU 的输出信号(时钟信号Φ2、地址总线的A13~A15)通过此芯片译码,片选控制 PPU 、 RAM 和游戏卡等芯片。



Latches / Flip-Flop

74LS373是三态输出的8位锁存器( Latches ) / 触发器( Flip-Flop )。
当锁存允许端 RD 为高电平时,时钟 T 来上升沿信号后,Q 随 D 而变;当 T 为低电平时, Q 保持前一时刻状态。
当 RD 为低电平时,Q 输出低电平。



RAM

FC 红白机使用2片静态随机存取存储器 SRAM ( Static Random-Access Memory ) TMM2115BP ,分别用于 CPU 和 PPU , 以及 PPU 和游戏卡之间的数据通讯和存储。
该 SRAM 采用11位地址总线,8位数据总线,存储能力为2kB。
SRAM 不需要刷新电路即能保存它内部存储的数据,而 DRAM( Dynamic Random Access Memory )每隔一段时间需要刷新充电一次,否则内部的数据即会消失。因此 SRAM 具有较高的性能、功耗较小等优点;但 SRAM 集成度较低,相同容量的 DRAM 内存可以设计为较小的体积,但是 SRAM 却需要很大的体积。



Bus Buffer

74HC368是6通道总线数据缓冲器,其中4个通道受一个使能控制信号控制,另外2个通道受另一个使能信号控制。用于高速工作的 CPU 与慢速工作的控制手柄等外围设备之间的协调和缓冲,实现数据传送的同步。
Courtesy of wiki.console5.com

FC 红白机的外围设备主要有:

  • P2 扩展端口,可以用于调试或连接第三方控制手柄。
  • P3 RF视频/音频输出。
  • P4 主控制手柄。
  • P5 副控制手柄。



接着看看控制手柄内部的电路。


Joystick

FC 红白机的控制手柄( Joystick )采用串行通讯,通过MN4021B芯片把控制手柄按键信号发送给主机 CPU 。
Courtesy of wiki.console5.com

FC 红白机主机每16.67ms(60Hz)读取一次手柄的状态,具体过程如下:
FC 红白机主机首先向各控制手柄,发送一个脉冲宽度为12us的 Latch 锁存信号到4021芯片的 P/S 端口,通知控制手柄开始检查按键状态。
等待6us后,发送周期为12us、占空比为50%的 Clock 脉冲时钟信号到4021芯片的 CLK 端口 ,一共发8次。4021芯片在每个脉冲的上升沿对 PI 采样,检查 PI 是否在该位置被拉低。按键被检查的顺序是固定的,按键顺序为A、B、SELECT、START、下、上、左、右。各个按钮通过导电橡胶实现按钮按下后导通电路板的对应电路,如果某个按键被按下,那么对应位置的 PI 就是低电平 。
Courtesy of wiki.console5.com

4021芯片是一种8位并行转串行移位寄存器,其把检测到的 PI 端口的状态依次通过 Q8 端口发送到 FC 红白机的主机。
对于副控制手柄,麦克风信号经过 TOSHIBA TC4069UBP 8625HB 放大器输入到 FC 红白机的主机。不过当年的 FC 红白机肯定不具备语音识别功能,从电路上分析,麦克风的声音信号:一是进入 RF 调制器在电视上同步播放你的声音;二是进入 FC 红白机 CPU 的是1位数字量信号,因此只要声音强度和发音时间满足一定的阈值,就可以触发游戏的某些功能。



再来看看游戏卡的电路板,不过我这里的这些游戏卡都是国内复制的。


Cartridge

20世纪80年代的游戏卡是这样的:
与 FC 红白机的主机类似,游戏卡主要有两片芯片,左侧的为 RPG,右侧的为 CHR。PRG-ROM 存储了游戏的运行代码,CHR-ROM 存储了游戏的图案。游戏卡通过卡带底部的金色连接端子经过 P1 端口与 FC 红白机的主机相互连接,其中 PRG-ROM 与 CPU RP2A03E 相连接,CHR-ROM 与 PPU RP2C02 或 RP2C02E 相连接。
Courtesy of wiki.console5.com


采用同轴电缆连接电视机,上电测试。
Courtesy of wiki.console5.com

FC 红白机侧的视频线接口是 RCA 莲花接口,电视机侧需要有线/天线接口,我这里的 SONY 电视具有这种 TV RF 接口。
再来对比一下上世纪80年代的 Nintendo FC 红白机和现今的 Nintendo Switch 吧。
现今的 Nintendo Switch 已经可以 HMDI 高清输出的电视了。
Courtesy of Michael Norris


Nintendo FC 红白机,
永远的经典,
80后的回忆,
漫画版的说明书是经典中的色彩,不仅是说明书,更是一本科普教材,这点不得不佩服日本人的思路和做事的风格。
Courtesy of Yang