世嘉大师系统架构的实践分析

2020-10-14 19:40:52

主人制来自于一长串的继承人。由于世嘉的工程设计,它最初只是一批现成的零部件,现在已经获得了一个新的身份。

一开始,当我读到世嘉最终推出的不同型号时,我有点困惑,所以下面是为避免进一步混淆而讨论的主要型号的摘要:

世嘉主控系统(欧洲和美国):更名为Mark III,配有新外壳、BIOS ROM芯片和不同的墨盒插槽。

世嘉主控系统(日本):欧洲/美国主控系统,带有Mark III的墨盒插槽、新的调频芯片和用于“3D眼镜”的插孔端口。但是,它没有重置按钮。

从现在开始,我将使用术语“主系统”或“短信”来指代所有这些功能,除非涉及到特定型号的独有功能。

世嘉决定采用功能齐全的Zilog Z80 CPU,运行频率约为3.58 MHz。这是ZX Spectrum和Amstrad CPC等其他机器的热门选择。Z80具有与Intel8080兼容的指令集,但扩展了更多指令。

文章开头的主板图片显示的是NEC D780C-1 CPU,这只是SEGA将芯片二次外包给不同的制造商,其他版本甚至包括Zilog制造的芯片。但是对于本文来说,谁制造CPU并不重要,因为内部特性保持不变。

Z80具有16位地址总线,因此CPU可以找到高达64KB的内存。在内存映射中,您会发现8KB的RAM用于一般用途,这被镜像到另一个8KB的块中。最后,还映射了高达48KB的游戏ROM。

正如您可以从上一段中读到的,在地址空间中只找到主RAM和一些盒式ROM,那么程序如何访问其他组件呢?嗯,与任天堂的Famicom/NES不同,并不是主系统的所有硬件都是使用内存位置映射的。相反,一些外围设备位于I/O空间。

这是因为Z80系列包含一个称为I/O端口的有趣功能,它使CPU能够与其他硬件通信,而不会耗尽内存地址。为此,有一个单独的地址空间用于“I/O设备”,称为端口,两者共享相同的数据和地址总线。然而,不同之处在于端口分别使用IN和OUT指令读取和写入-与传统的加载/存储指令(LD)相反。

当执行IN或OUT指令时,Z80设置指向外围设备(例如,键盘)的地址线,标记其IORQ引脚以指示已启动I/O请求,并且还分别标记RD引脚或WR引脚是IN指令还是OUT指令。寻址的外设必须手动检查地址总线和I/O引脚,并执行所需的操作。在IN指令的情况下,CPU将把接收到的值存储在预定义的寄存器中。

SEGA将CPU与其余组件互连的方式不仅可以访问值,还可以显示/隐藏某些组件,使其不会出现在内存映射中。

奇怪的是,Game Boy有一个Z80“变种”,完全省略了I/O端口。因此,它必须适合内存映射中的所有内容。

该控制台的架构与其前身世嘉SG-1000非常相似,因此主系统设法获得了与SG-1000的向后兼容性。不过,这只适用于日本机型,因为其他机型包含不同的墨盒插槽。

屏幕上的图形是由一种名为视频显示处理器(VDP)的专有芯片产生的。在内部,它与德州仪器TMS9918(在SG-1000中使用)具有相同的设计,但增强了更多功能,我们将在以下部分讨论这些功能。

VDP旁边连接着16 KB的VRAM,只有VDP才能使用16位数据总线访问该VRAM。如果你再看一遍主板图片,你会注意到RAM和VRAM芯片大致相同,只是VRAM使用的芯片型号以‘20’结尾,延迟较低。

在主系统中,VRAM包含VDP渲染所需的所有内容(彩色RAM除外)。CPU通过写入VDP的寄存器来填充VRAM,而VDP的寄存器又会将值转发到VRAM。由于VDP是使用I/O端口访问的,因此CPU必须使用IN和OUT指令。

VDP渲染分辨率高达256x192像素的帧,进一步修订添加了对256x224像素和256x240像素的支持,但是为了保持与所有型号的兼容性,开发人员坚持使用标准分辨率。这种芯片与任天堂的PPU有着相同的工作方式,换句话说,图形是就地渲染的。

另一方面,VDP有四种不同的操作模式,它们将改变帧的特性(颜色深度和分辨率):

模式0至模式III:继承自SG-1000上的TMS9918。包括向后兼容性,尽管任何SMS游戏都可以使用它们。

模式IV:主系统的本机模式,允许访问VDP的所有最先进功能。为了进行分析,我们将重点放在这一点上!

现在让我们看看框架是如何一步一步画出来的,为此,我将借用刺猬Sonic的资产。此外,为了便于解释,我将重点介绍世嘉建议的用于组织图形内容的标准内存布局(只需记住,VDP在这方面非常灵活,因此允许游戏对其进行优化)。