目录

摘要

一、墨盒(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

NES专题——NES的游戏硬件相关推荐

  1. NES专题——NES游戏机简介

    目录 一.FC.NES.红白机的关系及发展史 二.FC游戏机的组成部分 三.FC模拟器 四.参考文章及资料 一.FC.NES.红白机的关系及发展史 1983年7月15日,由日本任天堂株式会社(原本是生 ...

  2. python扫雷 广度优先_Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper)...

    Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tre ...

  3. 【并查集专题】格子游戏

    [并查集专题]格子游戏 题目描述 Alice和Bob玩了一个古老的游戏:首先画一个n * n的点阵(下图n = 3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边: 直到围成一个封闭的圈(面积不必为 ...

  4. NES专题——PPU工作原理

    目录 摘要 一.2C02概述 二.PPU内存映射 三.PPU寄存器 四.调色板 五.图案表 六.名称表/属性表 七.精灵 八.滚动 九.电视标准 十.参考资料 摘要 本文介绍了NES游戏机上PPU的工 ...

  5. 游戏硬件负载测试软件,Charlemagne(硬件测试软件)

    Charlemagne提供硬件测试功能,可以分析CPU压力,当你在玩游戏或者是超频的时候就可以通过这款软件测试CPU压力,从而知道硬件性能,大家都知道电脑的性能与CPU是直接相关的,如果你的CPU性能 ...

  6. 设置多个等级的html游戏,实现 HTML5 Canvas 游戏硬件缩放和CSS3的现代化

    我将展示我如何使用这些新特性来现代化我最后的HTML5游戏 modernize HTML5 Platformer. 希望你能为自己的游戏提供一些新的想法 !部分:硬件缩放和 CSS3 ( 这篇文章) ...

  7. spyder pyecharts不显示_后期剪辑还在升级主机配置?换台京东方显示器才最重要_京东方 拾光纪SA27D0_游戏硬件显示器...

    2020年被称为短视频元年,它标志着视频自媒体的全面爆发.因此,很多小伙伴都尝试来用vlog记录,并与网友分享自己的生活.美好的事物总是更易受到人们的喜爱,如何提高视频的质量,则是每个vlogger都 ...

  8. CES Asia专题|VR、AR硬件一箩筐,迭代升级亮点不多

    虚拟现实和增强现实的展商占比不多,主要集中在硬件厂商和开发平台. 在今年的CES Asia上,镁客君看到不少VR/AR行业内熟悉的老朋友.当然,既然是消费电子展,大部分厂商都带来了自主研发的硬件产品. ...

  9. 杀出重围3显卡测试软件,更多游戏实测-《战地5》实测-3D MARK跑分-配套软件-微星RTX 2060 Gaming Z 6G非公版显卡开箱上手体验_游戏硬件_游侠网...

    小编再选取一款DX12的游戏<古墓丽影:暗影>,4K全高画质微星RTX 2060 GAMING Z(魔龙)平均帧数能有32帧,降为2K就可以稳60帧游戏了,1080P分辨率下平均帧数可以有 ...

最新文章

  1. JavaScript的编程风格的见解
  2. 数据库 Linux下的MySQL数据库管理
  3. 对datatable类型列名排序_表格数据的排序功能(支持多列)
  4. python 简单检索器_python实现文件搜索工具(简易版)
  5. c语言的数据有常量与,C语言数据与常量.ppt
  6. Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/
  7. C语言面试题---函数(一)
  8. HSSFWorkbook 锁定部分单元格,或者锁定一个单元格
  9. lambda表达式的3种写法
  10. 单模光纤最大传输距离为多少_单模光纤的最长传输距离是多少?单模光纤和多模光纤的区别在于什么?...
  11. 伤害世界不显示服务器,伤害世界Hurt world服务器挑选指南 不卡不清档无权限服务器挑选教程...
  12. unity打包xcode,在iOS11设备调试报错
  13. Android showStatusIcon on inactive InputConnection异常
  14. 机械键盘用哪种轴的好?
  15. js 全屏与退出全屏
  16. 批量将txt文件转为excel文件
  17. 12. STM32——硬件IIC驱动OLED屏幕显示
  18. Websphere之HTTPS配置
  19. LoadRunner下载文件脚本
  20. 轻量级兼顾本地体验,PWA应用到底有多卷?

热门文章

  1. rhel7配置smba
  2. MPS | 简单易用的工业电源模块
  3. supervisord启动子程序报错Exited too quickly (process log may have details)解决
  4. 阿里正式启动2021届春季校招!字节跳动Android面试凉凉经,实战解析
  5. ArcCatalog、ArcGlobe、ArcMap、ArcReader、ArcScene介绍
  6. 一元三次方程你会解吗?
  7. win10移动桌面图标字体发虚
  8. 婚恋网站能遇见幸福吗?2019互联网婚恋交友行业洞察
  9. Spring系列:代理(jdk动态代理,cglib代理)
  10. PHP微信小程序消息推送写法