探究NES游戏中的ROM(Read Only Memory)

一、何为NES机?

NES全称为Nintendo Entertainment System,是任天堂在1983年发布的一款游戏机。它是首个将游戏从家庭电脑院子里转移到客厅的游戏平台,也可以称之为家用电脑。它的操作系统拥有冗余性,并使用了所谓的ROM卡制式。

二、ROM的定义

ROM是只读存储器(Read Only Memory)的缩写,指的是一组与操作系统紧密相关的硬件存储和映射。它的特点是不同于RAM,ROM的内容一旦写入则不可更改,是非易失性的存储器。

三、NES ROM概述

对于NES游戏机,ROM主要包含两部分,一部分是游戏ROM,另外一部分是NES的内置软件(系统ROM)。这两部分ROM位于不同的地址空间,且大小也不一样。游戏ROM的大小通常是从16KB到步进2倍递增(32KB, 64KB, 128KB等),而系统ROM大约为40KB左右。

; NES ROM(游戏ROM)的地址空间
$0000-$7FFF: 游戏ROM, 可变大小
$8000-$FFFF: 系统地址空间

四、NES ROM格式

NES游戏ROM格式通常为iNES文件格式,该格式又被称为NES 8-bit ROM格式。iNES文件包含了一些NES游戏的许多信息,比如游戏的作者、版本号、游戏的映射方式等等。

; iNES文件格式
字节     含义
------------------------------ 
0-3      常数 $4E $45 $53 $1A (“NES”后加一个 DOS 结束符)
4        大小为16KB的PRG ROM 块数(代码)
5        大小为8KB的CHR ROM 块数 (图形)
6        bit 0     1-垂直镜像(水平卷轴) 0-水平镜像(垂直卷轴)
         bit 1     1-有SRAM 0-无SRAM
         bit 2     1-有512字节的Trainer 0-无Trainer
         bit 3-15  保留
7        bit 0     1-开启512字节的Trainer 0-不开启Trainer
         bit 1-3   保留
         bit 4-7   Mapper编号
8        块大小3,保留

五、Mapper

Mapper指的是一种将ROM缓存在主存中的软件手段,由于NES的ROM是只读存储器,所以在存储器空间不够的时候就需要使用Mapper技术实现ROM在主内存中的动态缓存。搭配相应的硬件可以实现挂载大容量存储以及实现一些硬件加速。

六、NES模拟器

PC上通常使用NES模拟器模拟来运行NES游戏。模拟器负责将游戏ROM加载到内存中,同时模拟NES的硬件器件。如果模拟器错误地实现了NES硬件,在运行某些ROMs时会出现不正常的问题。

; 一段简单的NES模拟器核心 
class NESMachine {
    public:
        NESMachine() {
            // 初始化CPU, PPU, APU等硬件
            cpu.reset();
            ppu.reset();
            apu.reset();
            rom.reset();

            // 导入ROM文件到内存中
            // 初始化Mapper
            rom.loadFromFile("mario.rom");
            int mapper_number = rom.getMapperNumber();
            mapper.reset(new Mapper_000(mapper_number);
        }

        void runOneFrame() {
            // 运行CPU指令
            cpu.runOneFrame();
            // 更新PPU
            ppu.runOneFrame();
            // 更新APU
            apu.runOneFrame();
        }

    private:
        CPU cpu;
        PPU ppu;
        APU apu;
        ROM rom;
        unique_ptr mapper;
}

七、总结

在NES游戏中,ROM是不可变的,它对游戏机性能产生了很大的影响。ROM的格式和Mapper的实现直接影响了游戏的性能,模拟器也必须实现正确的映像方式,才能准确模拟出NES游戏的运行。

原创文章,作者:MWNI,如若转载,请注明出处:https://www.506064.com/n/136454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
MWNIMWNI
上一篇 2024-10-04 00:16
下一篇 2024-10-04 00:16

相关推荐

  • Virtual Camera在游戏中的应用

    一、Virtual Camera简介 Virtual Camera是指虚拟相机,它可以在游戏中替代现实工作中的摄影机来实现游戏画面的拍摄与演出。在游戏开发中,它被广泛应用于游戏场景…

    编程 2025-04-02
  • Virtual Camera在游戏中的应用

    一、Virtual Camera简介 Virtual Camera是指虚拟相机,它可以在游戏中替代现实工作中的摄影机来实现游戏画面的拍摄与演出。在游戏开发中,它被广泛应用于游戏场景…

    编程 2025-04-02
  • 深入理解Memory Network

    一、概述 Memory Network是一种基于记忆的神经网络,由Yoshua Bengio等人于2015年提出,用于解决问答、自然语言生成等任务。它的核心思想是使用外部记忆模块来…

    编程 2025-02-05
  • 了解Direct Memory Access

    一、DMA的概念 DMA(Direct Memory Access)是一种可以提高计算机数据传输速度的技术。使用DMA技术,外设设备可以直接访问系统内存进行数据读写,而不需要中央处…

    编程 2024-12-30
  • Cannotfind在编程和游戏中的应用

    一、cannotfind怎么读 Cannotfind是英文单词,读音为[kænˈnɒtfaind]. 二、冒险岛cannotfind 在游戏《冒险岛》中,Cannotfind是一个…

    编程 2024-12-06
  • php中修改memory,php增删改

    本文目录一览: 1、在php.ini中把memory_limit改成256M了,都重启服务器了,在phpinfo()中还是显示128M,是怎回事? 2、如何增加PHP的内存memo…

    编程 2024-12-02
  • 包含php的memory的词条

    本文目录一览: 1、PHP管理内存函数 memory_get_usage()使用介绍 2、如何修改PHP的memory 3、如何获知PHP程序占用多少内存memory 4、phps…

    编程 2024-11-26
  • rom和ram不同点

    最简单的区分,无论是电脑还是手机,容量小的那个一定是内存RAM,容量大的一定是存储(闪存)ROM。 rom和ram不同点: 比如手机的4GB+64GB、6GB+64GB、6GB+1…

    2024-11-22
  • rom和ram对比介绍

    rom与ram是我们在选择手机、电脑时比较重要的参考因素,两者都可以叫做内存,但却是完全不同的,有些时候我们会被商家的各种介绍给弄晕,比如8+128内存很多人就不知道什么意思,那么…

    2024-11-22
  • RAM和ROM的作用与区别详细说明

    随机存取记忆体(Random Access Memory,或称为RAM),是一种在电脑中用来暂时保存数据的元件。它可以随时读写,而且速度很快,通常作为作业系统或其他正在运行中的程式…

    2024-11-21

发表回复

登录后才能评论