目录
摘要
一、墨盒(Cartridges)
二、Famicom磁盘系统(Famicom Disk System )
三、游戏精灵(Game Genie )
四、控制手柄
五、Zapper(捕捉器)
六、参考资料
摘要
本文介绍了NES游戏机的相关游戏硬件,本文参考《Nintendo Entertainment System Documentation(任天堂娱乐系统文档)》,如需进一步的了解可以查阅该文档。
一、墨盒(Cartridges)
NES的游戏都是基于游戏包的。游戏本身是存储在墨盒的ROM芯片内的。一些墨盒还具有RAM功能,由电池供电,以使游戏得以保存。(感觉叫“墨盒”怪怪的,就是那个游戏卡带)。
卡带
下图显示了Famicom和NES的墨盒之间的差异。任天堂为Famicom设计了一个基本的墨盒,但是其他开发者设计了自己的墨盒,有各种形状、大小和颜色。任天堂用NES按照标准设计生产了墨盒。尽管NES的更大,但其中大部分只是浪费空间。Famicom盒式磁带有60针连接,而NES盒式磁带有72针连接,这使得两种格式在没有适配器的情况下不兼容。下图显示了NES的内部,从主板的底部看。红线表示开袋连接到的72针连接器。
插入到NES的卡带 | NES卡带内部 |
1、内存映射器(Memory Mappers)
NES有限的内存对于早期的游戏来说已经足够了,但是随着游戏变得越来越复杂,游戏变得越来越大,内存也变得不足。为了允许卡带包含更多的ROM,NES必须能够在需要的时候交换内存中的数据。由于NES不能解决$FFFF地址以外的问题,所以切换了卡带本身的硬件。这种硬件被称为内存映射器(memory mapper)或MMC(内存管理芯片)。
内存映射的基本思想是当系统需要访问ROM库中当前没有加载到内存中的数据时,软件指示需要切换Bank,所选的Bank被加载到内存中的一个页面中,替换现有的内容。内存映射器的使用是NES长久的因素之一,这使得它能够克服技术缺陷。
NES使用了一些内存映射器,一个完整的列表可以在附录c中找到。下面描述了一些更常见的内存映射器,关于它们如何工作的详细说明可以在附录D中找到。(附录C和D在《任天堂娱乐系统文档》中,详细了解可以看该文档,图太多就不在这贴了。)
(1)UNROM交换机是第一个允许对NES游戏进行Bank交换的芯片。UNROM只允许PRG-ROM的切换。它不支持CHR-ROM。使用UNROM的16 KB PRG-ROM Bank的最大数量是8。
(2)CNROM交换机允许交换CHR-ROM,但不允许交换PRG-ROM。因此,程序代码的大小并不比不使用内存映射器的游戏大,因此可以生成更复杂的图形
(3)MMC1允许同时切换PRG-ROM和CHR-ROM。该芯片还允许更改表镜像的名称,并支持保存到RAM芯片。使用MMC1的16 KB PRG-ROM Bank的最大数量是8。MMC1是最常用的内存映射器,被许多游戏使用,包括“Metroid”和“Legend of Zelda”。
(4)MMC3允许同时切换PRG-ROM和CHR-ROM。该芯片还允许选择屏幕滚动,即允许部分屏幕移动,而部分保持静止,并能够产生irq。使用MMC3的16 KB PRG-ROM Bank的最大数量是32。MMC3是使用次数第二多的芯片,包括《超级马里奥兄弟2》和《超级马里奥兄弟3》。
2、文件格式
可以使用模拟器运行的软件通常被称为ROM镜像,以参考用于存储它的原始ROM芯片。一个简单的卡带内容转储不太可能是足够的,因为它没有办法确定文件的每个部分意味着什么。出现了两种不同的文件格式来提供这些信息。iNES文件格式最初是由Marat Fayzullin定义的,用于他的iNES仿真器中。自那以后,大多数仿真器都使用了这种格式,它是ROM映像最常用的格式。INES格式的文件应该有文件扩展名*.nes。该格式在文件的开头提供一个16字节的neader,其中包含重要信息。描述的格式如下表。
起始字节 | 长度(字节) | 内容 |
0 | 3 | 固定为“NES”,作为iNES文件的标识。 |
3 | 1 | 固定为$1A,同样作为文件的标识。 |
4 | 1 | 16KB PRG-ROM Bank的数目,PRG-ROM是用来存储程序代码的ROM区域。 |
5 | 1 | 8KB CHR-ROM/VROM Bank的数目,CHR-ROM(字符ROM)和VROM是同义词,是用来存储图像信息(图案表)的ROM区域。 |
6 | 1 | ROM 控制字节1: * Bit 0——表示游戏使用的镜像类型,0为水平镜像,1为垂直镜像。 * Bit 1——内存位置有电池支持的RAM $6000~$7FFF。 * Bit 2——表示存在一个512字节的训练器在内存地址 $7000~$71FF。 * Bit 3——如果这个位被设置,它将覆盖Bit 0 使得4个镜像被使用。 * BIt 4~7——mapper号的低4位。 |
7 | 1 | ROM 控制字节2: * Bits 0~3——保留位,永远为0。 * Bits 4~7——mapper号的高4位。 |
8 | 1 | 8KB RAM Bank的数目,为了与以前的iNES格式兼容,为0时表示RAM的第1页。 |
9 | 7 | 保留位,永远为0。 |
如果有训练器的话,在文件头之后是512字节的训练器,否则ROM Bank从这里开始,从PRG-ROM开始,然后是CHR -ROM。该格式允许多达256种不同的内存映射器(mapper)。每个映射器(mapper)被分配一个特定的数字,通过将控制字节2的第4-7位向左移动4位,然后将控制字节1的第4-7位相加,就可以得到映射器数字。完整的mapper列表和他们的官方iNES mapper编号可以在附录C中找到,如下表:
mapper列表
“iNES格式有许多问题。它经常被误用,例如人们在标题中插入他们的名字。最近,Marat Fayzullin在NES开发中的参与似乎有所减少,在没有对格式进行任何官方更新的情况下,许多开发人员都指定了自己的更改,其他人也在设计自己的映射器编号。这导致格式越来越不准确,”
UNIF(Universal NES Interchange format)的发展。
UNIF格式文件通常具有扩展名*.unf,并且包含一个标识格式和修订号的头,后跟一系列块。每个块都包含一个ID字符串,用于标识块的用途、块的字节长度和数据。这种格式与XML非常相似,尽管块不是关闭的,而标记是在XML中关闭的。
UNIF格式根据使用的电路板的名称而不是通过一个数字来标识每个映射器。这确保只能使用正版板。尽管UNIF格式在iNES格式上有了很大的改进,但目前它受到较少模拟器的支持,并且格式中可用的ROM文件也较少。在未来几年内,iNES格式应逐渐被UNIF取代。
二、Famicom磁盘系统(Famicom Disk System )
任天堂在1986年初发布了Famicom磁盘系统,部分是为了应对芯片价格的上涨,部分是为了让Famicom更像一台电脑,。该系统允许Famicom运行存储在2.5英寸磁盘上的游戏,磁盘上有32kb的RAM和8kb的VRAM,而不是传统的墨盒。Famicom磁盘系统附在Famicom上,Mario Golf磁盘在下图也可以看到。任天堂希望,由于容量更大,该系统能够支持更大的游戏,同时也能为消费者提供更便宜的价格。这些磁盘也可以重复使用,允许玩家在专门的服务亭用一个新的游戏替换一个游戏,只需支付少量费用,而不必支付新磁盘的费用。1986年售出近200万个磁盘系统。不过,该系统并不受许可证持有者的欢迎,他们必须决定发布游戏的格式,任天堂对磁盘系统游戏的严格许可也使得该格式不受欢迎。当半导体价格下降时,同样价格的盒带可能比磁盘具有更高的容量。虽然到1990年为止,已经售出了400多万个磁盘系统,但盒式磁带仍然是存储游戏的主要方法,Famicom磁盘系统也从未在亚洲以外地区发布过。
Famicom连接到Famicom磁盘系统
“马里奥高尔夫球”磁盘
三、游戏精灵(Game Genie )
游戏精灵是一种允许玩家通过调整代码执行方式来作弊的设备。游戏精灵是由代码大师设计的,由Galoob Toys发行。其他欺骗设备通过锁定给定内存位置的值来工作。例如,如果游戏将剩余的生命值存储在$1000的位置,那么将此值锁定为5将为玩家提供无限的生命值。然而,游戏精灵是在ROM而不是RAM上工作的。它监视盒式磁带端口的地址总线,如果检测到给定的地址,则将所需的值写入数据总线。
游戏精灵
四、控制手柄
6502 CPU使用内存映射I/O(输入/输出)。这意味着与内存相同的指令和总线用于与I/O设备通信,即写入特定的内存位置来写入相应的设备。在NES中,输入设备的I/O端口为$4016和$4017,如下表(“$”这个符号在这里代表十六进制的意思)。
内存地址 | 操作 | 功能描述 |
$4016 | 可读可写 | Joypad 1: * Bit 0——写入时从joypad读取数据或导致joypad频闪。 * Bit 3——指示Zapper是否指向精灵。 * Bit 4——在释放捕捉器触发器时清除。 只有Bit 0 参与写入。 |
$4017 | 可读可写 | Joypad 2: * Bit 0——写入时从joypad读取数据或导致joypad频闪。 * Bit 3——指示Zapper是否指向精灵。 * Bit 4——在释放捕捉器触发器时清除。 只有Bit 0 参与写入。 |
原NES使用矩形控制手柄,如下图所示。键盘上有四个按钮,A,B,开始和选择,还有一个用于控制移动的四向十字。尽管发布了许多变体,通常还带有慢动作和涡轮点火等附加功能,但到目前为止,最常用的还是原始设计。
原始的NES控制手柄
系统从I/O端口多次读取以获取有关控制器的所有信息。前8次读取中的每一次都按顺序A、B、开始、选择、上、下、左、右指示标准控制器上一个按钮的状态。第一个控制器连接到端口$4016,第二个连接到$4017。使用四播放器适配器可以将四个控制器连接到系统,尽管这种情况很少见。在这种情况下,控制器1和控制器3连接到$4016,控制器2和控制器4连接到$4017。接下来的8次读取将获得端口上第二个控制器的状态,否则将忽略它们。
读取17-20次检索标识设备是否已连接的签名,如果已连接,则检索设备类型。如果joypad连接到$4016,则返回值为01b;如果一个joypad连接到$4017,则返回值为10b。在循环重新开始之前,不需要再读取4次。
从I/O设备读取数据的过程可以通过使用冲程方法重置。当需要重置时,首先向端口写入1,然后写入0表示重置。
五、Zapper(捕捉器)
当NES首次在美国推出时,任天堂包括了一种叫做Zapper的轻枪。下图显示了Zapper的原始版本,尽管后来颜色变为橙色。通过使用瞄准镜瞄准,玩家可以产生相当精确的结果。有几款游戏提供了Zapper支持,包括猎鸭、口香糖和狂野枪手。
原始的NES Zapper光枪
“Zapper是通过接收屏幕上的光线来工作的。必须正确调整电视的对比度和亮度控制,否则镜头可能无法注册。(字符应尽可能明亮,背景区域应尽可能暗。)
从本质上说,这个捕猎器的工作原理是在它瞄准的地方测量光的强度。当系统检测到触发器被触发时,它会在屏幕上的精灵周围画一个白色框。然后,Zapper可以检查颜色强度,并确定它是指向属于背景的白色区域(sprite)还是黑色区域(dark area)。
六、参考资料
《Nintendo Entertainment System Documentation(任天堂娱乐系统文档)》
链接:https://pan.baidu.com/s/1QhbK6ADAHqe1mHkKGALH6A 提取码:rr69