INES 分为下列四个区域
Header 总共 16 字节,每个字节定义如下:
从 Header 中可以看出,我们只需要其中的 PRG,CHR,Mapper,Mirror,Trainer 等信息,所以解析也很简单
了解了 NES 文件结构之后姿碧纤,就可以开始卡慧凳带的模拟了,不过模拟卡带之前,下一章会讲解如何进行 NES 开发,以便加深对 NES 的理解
04 章的时候了解了 NES 文件结构,NES 文件本质上只是从卡带上 dump 下来的信息,所以首先需要实现卡带的模拟,把程序等数据加载进内存后,才能进行下一步 *** 作
Mapper 已经在前面的文章出现过很多次了,现在来详细了解一下
03 篇文章提到过,NES 总线上,PRG 的寻址范围为 0x8000 - 0xFFFF,CHR 寻址范围为 0x0000 - 0x2000,他们大小分别为 32K 和 8K,对于大型游戏这么点空间是远远不够的,显然任天堂在设计的时候也考虑到了这一点,所以采用 Mapper 来进行各种扩展
Mapper 并不位于主机中,而位于卡带上。每一张卡带都对应了一种 Mapper,在 NES 1.0 格式中,可以表示多达 256 种 Mapper
每种 Mapper 行为都不一样,比如有的 Mapper 增加了音频芯片提高音频性能,有的 Mapper 增加了寄存器扩展程序大小,有的还有中断计数的功能
比如 Mapper2,增加了 Bank 选择寄存器,以控制不同的 Bank 映射到 0x8000 - 0xFFFF,这样就扩充了游戏容量
了解 Mapper 作用之后,首先看看最简单的 Mapper - Mapper0,这个 Mapper 没有任何的扩容能力,所以它的 ROM 最大只有 32K + 8K = 40K
唯一需要注意的是:
了解了 Mapper 作用后,就可以开始定义 API 了
首先定义 ROMInfo 接口,表示从 NES 文件解析首罩的 Header 信息
另外还需要一个 Mapper 对象,用来表示不同的 Mapper。对于 CPU 来讲,只需要在意 Mapper 的读写能力,所以需要定义 write 和 read 接口
最后,Cartridge 当中只需要 Info 和 Mapper 两个实例就够了
在这里举个例子讲一下卖档 Cartridge 如何模拟(只列举核心逻辑,其他简单的逻辑就等你自己完成了)
一共需要两个类,中芹乱一个 Cartridge,一个 Mapper0
文件 cartridge.ts
文件 mapper0.ts
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)