« Game Boy / Color 的架构 (index)

Game Boy / Color 的架构

Chapter 3: 中央处理器 (CPU)


目录

  1. CPU 核心
    1. 彩色效果
  2. 硬件访问
  3. 可用内存

任天堂没有选择在主板上放置许多现成的芯片,而是采用 单芯片设计 来容纳(和隐藏)包括 CPU 在内的大部分组件。 这种芯片被叫做 SoC(System on a Chip,"片上系统")—— 在这里,SoC 就是专门为这款游戏机打造的芯片,这使得任天堂能够根据自己的需求(能效、反盗版与额外的 I/O ,等等)进行定制。 同时也意味着,这种芯片不可能通过零售渠道买到,这让当时的竞争对手更难以仿制它。

GameBoy上使用的 SoC 被称为 DMG-CPU(也叫 Sharp LR35902),从名字里可以看出,这是由 Sharp 生产的。 这家公司和生产 NES CPU 的供应商 Ricoh 一样,与 Nintendo 的关系非常密切。

CPU 核心

DMG 的主处理器是 Sharp SM83 ——这是 Zilog Z80 与 Intel 8080 相融合的产物。Z80 在当时的应用非常广泛,你可以在家用计算机、德仪图形计算器,以及 Sega Master System(SMS) 和 Game Gear 中见到它。 SM83 运行于大约 4.19 MHz,看上去比 1 MHz 的CPU更快;但这里必须指出,处理器的时钟频率有时是会 骗人 的。

Image
位于 GameBoy 主板上的 DMG-CPU

回顾我们在 SMS 上的分析,我说过"Z80 是 8080 的'超集'" 。 所以与这两个处理器相比,SM83 多了什么,又缺了什么?

此外,Sharp 还增加了一些不存在于 Z80 和 8080 的 新指令 , 这些额外的指令针对 Nintendo 与 Sharp 对硬件的安排进行优化。 其中一个是 LDH,即"读取高位地址内存"(LoaD from High memory) —— 这里的"高位地址",位于内存的最后 256 个字节,即开始于 $ff00。这样写程序的时候可以少写一个字节,速度也更快一些。

彩色效果

Image
Game Boy Color的主板

Image
同样是主板的照片,但标注了重要部件

过了将近 10 年,随着 Virtual Boy 与它的 先进技术 被人遗忘,一个不起眼的继任者出现了:GameBoy Color(GBC,代号 CGB), 里面的新 SoC 被叫做 CPU CGB。它的功能更多了, 但它的核心 SM83 还在,只是时钟频率翻倍,达到约 8.38 MHz

很难想象十年后 Nintendo 仍然捆绑使用同一颗 CPU。但这种方案仍然有一些好处:

但在九十年代后期,仍然使用这种过时技术是要被玩家痛骂的。 稍微看一眼 当时 CPU 的市场行情,就能明白这个掌机究竟错过了什么(但说实在的,Nintendo 保守不保守真的很难讲,例如 Virtual Boy)。

硬件访问

SM83 沿用了 8 位数据总线** 和** 16 位地址总线,可以寻址 64 KB 的内存。 内存映射的结构如下:

这些都将在后面为大家说明。

可用内存

Image
DMG(原版 GameBoy)的内存架构 PPU负责对VRAM的访问进行仲裁

Nintendo 装在主板上的 8 KB RAM 是为"一般用途"准备的,这部分就是所谓的 WRAM。 这一大小可是 NES 的四倍。

另外还有 127 B RAM 位于 SoC 中, 这便是 HRAM。借助 SM83 独特的 LDH 指令,这部分空间的数据能够以更快的速度读取。 这与 6502(NES 上的处理器)上的"Zero Page"模式非常相似,它也是利用内存位置优化性能的。 从技术上讲,它跟外面的那部分相比没有实质性区别,但这是 CPU 优先访问的区域。 这里先放一边,等到"图形"章节讨论到 DMA (Direct Memory Access,直接内存访问)组件的时候,您就会明白这意味着什么。

Image
扩展后的CGB内存架构(Game Boy Color)。 PPU再次负责对VRAM的访问进行仲裁

在 GameBoy Color 中,WRAM 扩大到 32 KB。 然而,由于 CPU 还是那个 CPU(特别是因为它有限的内存总线),直接把这些内存加进去会造成地址空间溢出,显然很不现实。 为了解决这个问题,Nintendo 的工程师引入了 "地址组切换" 机制。 这种机制继承自 NES 的卡带,使得 GameBoy Color 可以只使用 8 KB 的内存来访问 32 KB 的 WRAM。 技巧相当简单:8 KB 内存中,后面的 4 KB 可以在 7 个不同的 Bank 之间进行交换。 这样一来,为了让开发者能够检查扩展内存,CPU 又捆绑了一个额外的寄存器,即 SVBK,作为地址组切换器。


Previous: 2. 一个简短的介绍

Next: 4. 图形


Rodrigo Copetti © 2026 RSS Feed

切换至现代版

主页 · 文章 · 支持 · 关于作者 · 关于此网站