该游戏机有两个通用处理器。
主处理器
首先,我们有一个摩托罗拉68000运行在~7.6MHz,这是一种流行的处理器,当时已经出现在许多计算机中,例如Amiga、(初版)Macintosh、Atari ST... 有趣的是,这些计算机每一代都继承了它们的"6502前辈",而虽然Sega Master System(译注:以下简称SMS)(MD的前身)并未采用6502 CPU,但NES(译注:即美版FC,日版也是同样CPU)却使用了(在某种程度上,世嘉的目标是要吸引任天堂的消费者)。 总而言之,你可以看到电脑的发展和游戏机技术之间是有一点关联的。
回到主题,68k具有"主"CPU的角色,它将负责游戏逻辑,处理I/O和图形计算。 它具有以下功能:
- 68000 ISA:具有大量功能的新指令集,包括一组乘法和除法操作码。 一些指令是8位长(称为"字节")的,其他指令则是16位长(称为"字"),剩下的指令是32位长(称为"长字")。
- 十六个32位通用寄存器。 请注意,该CPU将该集合分为八个"数据寄存器"(可以进行算术计算)和八个"地址寄存器"(专用于存储内存地址)。
- 不过,这是一大步,考虑到6502和Z80只有8位寄存器。
- 16位ALU:这意味着它需要额外的周期来计算32位数字的算术运算,但在16位/8位数字上表现会很好。
- 外部16位数据总线:如您所见,虽然此CPU具有一些"32位功能",但它并未被设计为完整的32位机器。 该总线的宽度意味着在移动16位数据时具有更好的性能。
- 有趣的是,摩托罗拉在这款游戏机发布四年前推出了完整的32位CPU68020。 不难想象如果世嘉选择这个芯片的话成本会飙升。
- 24位地址总线:这意味着最多可以访问16 MB的内存。 内存地址在CPU内部仍使用32位值进行编码(只是简单地丢弃了最高字节)。 话虽如此,Mega Drive的总线在物理上是连接到:
- 64 KB的通用RAM。
- 卡带式ROM(最大4 MB)。
- 两个手柄
- 视频显示处理器的寄存器、端口和DMA。
- 主板的寄存器(用于标识这款游戏机)。
- 扩展端口(用于"未来"配件)。
- 第二颗CPU的RAM,通过总线仲裁器进行中介。
- 德州仪器SN76489(一款PSG,充当第二颗声音芯片)。
如果你对为何在能处理32位字的CPU中使用24位地址感到好奇,那是因为那个时代的设备很少需要管理4GB的内存。 考虑到实现未使用的线路在性能和资金方面代价高昂,摩托罗拉做出了一个合理的妥协,采用32位寄存器和24条地址线,为开发者为五年后全面32位CPU(即68020)的到来做好准备。
一种特殊的指令集
在80年代的RISC革命之前,曾有一个浪潮试图巩固指令集的设计方式。 本质上,70年代的消费者CPU(如6502或8080)提供的指令已经预先定义了如何访问内存(这称为"寻址模式")。 在68000中,摩托罗拉将指令函数(操作码)从寻址模式中分离出来,使后者只是另一个参数(操作数)。 通过这样做,开发人员现在可以使用具有最佳寻址模式的相同操作码(根据他们的需要)。
这一原则被称为指令集正交性,它极大地影响了70年代末的新一代CPU,但随着RISC设计的兴起而迅速消散,实际上将负担转移到了编译器上。 无论如何,摩托罗拉68k系列在80年代非常受欢迎,直到90年代初,很多公司才开始转向另一个供应商。
配角
游戏机中安装了另一个CPU,运行频率约为3.5 MHz的Zilog Z80。 这与之前在Master System文章中分析过的处理器是同一款。
然而,在MD中,Z80主要被指定用于音频控制。 因此,它的16位地址总线由以下 组成:
- 8 KB的RAM。
- 可用的两块声音芯片。
- 一块32KB的动态存储区映射至68000的地址空间,可通过总线仲裁器选择。
- 但实际上,唯一能稳定访问的只有卡带ROM区域。
最后需要强调的是,这两颗CPU能够并行运行......但存在特定限制条件,具体细节将在后续段落中详细说明。
可用内存
主CPU包含64 KB的专用RAM用于存储通用数据,而Z80包含8 KB的RAM用于与声音相关的操作。
相互通信
世嘉选择了两个相互没有感知的独立处理器,那么游戏如何同时管理两者呢? 主程序在68000中执行,这个CPU随后可以在Z80的RAM上写入。 因此,68000可以向Z80的RAM发送一个程序,并指示Z80加载它(通过向Z80发送复位信号)。 一旦Z80得到控制,它就可以用来管理声音子系统,并使用前面描述的方法移动内存,所有这些都是在68000处理其他操作的同时进行的。
但需要注意一个关键限制:由于其中一颗CPU需要接入另一颗的总线,而两颗CPU无法同时访问同一条总线,因此必须通过一个名为"总线仲裁器"的额外组件来暂停任一处理器,从而实现无冲突的内存访问。
值得注意的是,若管理不当,这种设计可能导致性能下降。因此游戏开发时必须特别注意总线仲裁器的使用,确保任何一颗CPU都不会被不必要地长时间挂起。

