Game Boy Advance 架构

Rodrigo Copetti 的实践分析

如果你使用辅助工具或旧版浏览器,请切换到“经典”版本

🇬🇧 - English🇵🇱 - Polski🇪🇸 - Español🇨🇳 - 简体字🇷🇺 - Русский👋 - 添加翻译eBook edition eBook edition 本文也已发布在许多数字书店中,以方便电子书读者。新版本无 DRM,可以离线阅读,并且更新速度与网站同步。

你可以在 Amazon Kindle, Apple Books, Kobo其他商店 找到该电子书。 这些利润将用于改进当前文章和开发未来文章。

更多信息请点击这里

目录

  1. 支持图像
  2. 简介
  3. CPU
    1. 剑桥的奇迹
      1. Acorn Computers 的崛起
      2. 一个新的 CPU 冒险
    2. Nintendo 的合作
    3. ARM7TDMI
      1. 指挥 CPU
      2. 封装
        1. 内核
        2. 流水线
        3. 榨取性能
        4. 扩展
    4. 内存地址
    5. 变身 Game Boy Color
  4. 图形
    1. 组织内容
    2. 构建帧
      1. 图块
      2. 背景
      3. 精灵
      4. 结果
    3. 超越图块
  5. 音频
    1. 功能
      1. PCM
      2. PSG
      3. 组合
    2. 两全其美
  6. 操作系统
  7. 游戏
    1. 访问卡带数据
    2. 卡带 RAM 空间
    3. 配件
  8. 反盗版 & 自制软件
    1. 烧录卡
  9. 就这样,各位
  10. 版权和许可
  11. 来源 / 进一步阅读
  12. 贡献
  13. 更新日志

支持图像

模型

模型 最初的 Game Boy Advance。于 2001 年 3 月 21 日在日本发布,2001 年 6 月 11 日在美国发布,2001 年 6 月 22 日在欧洲发布。

主板

主板 显示修订版“03”的主板。 请注意,“AGB”是 Game Boy Advance 型号的标识符。卡带插槽和音频放大器位于背面。 主板 标记了重要部件的主板

图表

图表 主要架构图。每个数据总线都标有其宽度。所示的 AGB Game Pak 的布局不包括 mapper(因为新的 CPU 能够寻址更多的内存),尽管具有大型 ROM 的游戏可能仍然捆绑了一个。

简介

Game Boy Advance 的内部设计对于一款使用两节 AA 电池供电的便携式游戏机来说非常令人印象深刻。

这款游戏机将继续使用 Nintendo 的 标志性 GPU。 此外,它将引入一家英国公司相对较新的 CPU,该公司将在未来几年内 surge in popularity。

CPU

大多数组件组合成一个名为 CPU AGB 的单个封装。 此封装包含两个完全不同的 CPU:

请注意,这两个 CPU 永远不会同时运行 或进行任何奇特的协同处理。 包括 非常 旧的 Sharp 的 唯一 原因是为了 向后兼容

话虽如此,在我描述 ARM 芯片之前,我发现从这种 CPU 品牌背后的历史开始会很方便。

剑桥的奇迹

关于 ARM CPU 的起源及其随后名声鹊起的故事引人入胜。 在这里,我们发现公共投资、指数级增长、命运不佳的决策和长途合作的结合。

Acorn Computers 的崛起

Image 带有 5¼ 磁盘盒的 BBC Micro 照片 [1],第一张磁盘是 Elite。

70 年代末对于英国民众来说是一个动荡的时期。 曾经在战后理想下建立的干预主义经济已经达到了它的进程,钟摆很快转向了自由市场改革。 在这场风暴中,位于剑桥的 Acorn Computers 以及 Sinclair 等公司正在向实验室和爱好者销售计算机套件。 与美国和日本企业类似,Acorn 的计算机依赖于 6502 CPU 和专有的 BASIC 方言。

进入 80 年代,新英国政府内的部长级利益导致创建了一个项目,以提高学校的计算机素养 [2]。 感谢 Acorn 即将推出的“Proton”家用电脑,该公司获得了构建一款经济实惠的计算机的合同,该计算机符合政府的愿景。 结果就是 BBC Micro (绰号“Beeb”),在学校、教师和学生中享有显著的成功。 在 Micro 中,Acorn 纳入了一个前卫的 “Tube”接口 ,该接口可以使用 第二个处理器 扩展计算机。 这将为 Acorn 的下一个重大投资铺平道路。

在开发他们的下一个产品时,这次以企业为中心,Acorn 没有找到合适的 CPU 来取代 6502。 与日本和美国竞争的创新压力,加上不幸的规划,使 Acorn 陷入了困境。 因此,Acorn 的一个新部门的任务是生产一个引人注目的 CPU。 为了解决 Acorn 最近的限制,CPU 团队将其架构基于一篇名为 The Case for the Reduced Instruction Set Computer [3] 及其原型 RISC CPU [4] 的研究论文的教义。 最后,在 1985 年,Acorn 交付了 ARM1 CPU 作为 BBC Micro 的 Tube 模块,但仅用于研发目的进行销售。 直到 1987 年,随着第一台 Acorn Archimedes 计算机的推出,ARM 芯片(当时是 ARM2 CPU)才开始发挥核心作用。

« 上一个 下一个 »

一个新的 CPU 冒险

Image 一款后期的 Newton 模型……在我玩过它之后。

在 Acorn Archimedes 商业化期间,Apple 被 Acorn 的节能 CPU 所吸引,但这家美国公司仍然不相信 Acorn 最新的 ARM3 适用于 Apple 新的宠物项目 Newton。 然而,双方并没有走开(毕竟,Acorn 是一个竞争对手),而是讨论了改进 ARM3 以满足 Apple 需求的可能性 [5],即 灵活的时钟频率集成 MMU完整的 32 位寻址

这种合作很快变成了一种伙伴关系,Acorn、Apple 和 VLSI (ARM 芯片制造商) 成立了一家新公司,专门致力于开发 ARM CPU。 Apple 提供了投资(获得 43% 的股份),Acorn 分享了其员工,VLSI 负责制造。 1990 年, Advanced RISC Machines (ARM) Ltd 成立,Robin Saxby 担任其执行董事长。

几年后,Apple 终于推出了由 ARM610 驱动的 Newton MessagePad ,ARM610 是下一代集成 Apple 输入的 ARM 芯片之一。 与此同时,Acorn 还发布了使用新 CPU 的 RiscPC

现在,当 Acorn 和 Apple 在计算机/手持设备市场上徘徊时,ARM 设计了一种激进的商业模式。 为了远离制造业,Saxby 的愿景包括以 CPU 设计 及其 指令集 的形式 许可 ARM 的知识产权 [6]。 这使 ARM 的客户范围超出了计算机领域,例如 Texas Instruments [7],后者随后将该公司与新兴的移动市场(最终以 Nokia 6110 告终)和机顶盒联系起来。 在接下来的几年里,ARM 的技术将被捆绑到数十亿台移动设备中 [8]

« 上一个 下一个 »

Nintendo 的合作

回到日本,感谢 Game Boy 分析,我们了解到 Nintendo 的便携式系统硬件策略倾向于 片上系统 (SoC) 模型。 这使得该公司能够混淆经济实惠的现成技术,并将其与内部开发相结合。 这样,新的游戏机就可以变得独一无二且具有竞争力。

Image CPU AGB,装有 ARM7TDMI CPU(以及许多其他组件)。

幸运的是,ARM 的许可模式非常适合这些需求。 自 1994 年以来(在 Virtual Boy 发布前一年),两家公司一直在进行谈判,尽管直到多年以后才实现任何实质性的成果 [9]。 原因很简单:日本人发现 ARM 的代码密度和对 32 条数据线的需求不可行( Virtual Boy 的 CPU 已经设法摆脱了这种情况)。 然而,ARM 的新 CPU 设计师 - Dave Jaggar - 迅速用 ARM7TDMI 回答,这是一款新的 CPU,专注于在功耗和存储限制下最大化性能。 这对 ARM 来说是一个转折点 ,因为这款新产品不仅让 Nintendo 满意,还引起了 Texas InstrumentsNokia 以及手机领域其他竞争对手的关注。

毫不奇怪,当 Nintendo 开始开发 Game Boy Color 的继任者时,他们的 CPU 选择变成了 ARM7TDMI。

ARM7TDMI

现在让我们深入了解一下这款芯片提供的功能。

指挥 CPU

首先,ARM7TDMI 实现了 ARMv4 指令集,它是 ARMv3 的继任者。 这意味着:

封装

现在我们知道了开发人员如何与此芯片通信,让我们检查一下硅内部的情况。

内核

在电路方面,ARM7TDMI 是 ARM710 的一个精简版本,具有有趣的附加功能。 该内核包括 [12] [13]

最后,所有这些都可以使用 3 伏 电源供电 [15]。 这是迈向移动计算的明显一步,因为早期的内核需要 5 V 电源。

« 上一个 下一个 »

流水线

自从第一次迭代以来,ARM 已经实现了一个 三级流水线 来运行代码。 换句话说,指令的执行被分成三个步骤或 阶段。 CPU 将同时获取、解码和执行多达三条指令。 这可以最大限度地利用 CPU 的资源(从而减少空闲硅),同时还可以增加每单位时间执行的指令数量。

像两个非常 相似 同时代产品 一样,ARM CPU 容易受到 数据危害 的影响。 然而,程序员和编译器都不会注意到这一点,因为在这种情况下,CPU 会在需要时自动暂停流水线。

控制危害 也存在,但 ARM 使用一种称为 条件取消 的有效方法来解决它们:每当分支指令处于第二阶段 (Decode) 时,CPU 都会计算分支的条件 [16]。 根据结果,如果必须执行分支,CPU 将自动取消后续指令(将其变成填充符)。 现在,与 MIPS 的方法 相比,这可能看起来效率不高(因为 MIPS 编译器可以插入有用的指令,而不仅仅是填充符)。 因此,除了分支之外,ARM 还提供 条件执行。 后者将此流水线设计变成了一个优势,因为 ARM 可以解码一条指令并在同一阶段计算其嵌入的条件。 因此,在这种情况下,不会添加填充符。 这就是在为 ARM CPU 编程时,条件执行优先于分支的原因 [17]

« 上一个 下一个 »

榨取性能

load-store 架构的一个缺点是导致 ARM 的代码非常 稀疏。 像 x86 这样的竞争对手可以使用更少的代码来执行相同的任务,从而减少了存储需求。 因此,当 Nintendo 考察 ARM 的最新设计 ARM7 时,他们并不满意。 ARM 指令的大小意味着假设的小工具由具有有限内存和存储的 16 位总线组成 - 所有这些都是为了节省成本和能源 - 会使 CPU 效率低下并受到瓶颈。 幸运的是,Dave Jaggar 刚刚完成了 ARM7 的设计,并且不会轻易放弃。 在与 Nintendo 会面后的通勤途中,他提出了一个解决方案: Thumb 指令集 [18]

Thumb 是 ARM 指令集的一个子集,其指令被编码为 16 位字(而不是 32 位)[[