nes模拟器源码

  • 时间:
  • 浏览:0

nes模拟器源码

现在,请允许我来为大家详细解释一下nes模拟器源码的问题,希望我的回答能够帮助到大家。关于nes模拟器源码的讨论,我们正式开始。

文章目录列表:

1.NES 模拟器开发教程 01 - NES 系统结构

2.这个NES模拟器怎么用金手指啊?格式是什么?_终幻想3不遇敌的

3.求NES 0.97模拟器 勇者斗恶龙6的金手指代码

4.NES 模拟器开发教程 02 - NES 文件结构

5.NES 模拟器开发教程 04 - NES 卡带(Cartridge)

6.FC模拟器virtuanes 魂斗罗如何设置金手指让其有30条命?

NES 模拟器开发教程 01 - NES 系统结构

NES 有以下硬件

这里有一张原理图:

图中左上为 CPU,左下为 PPU,右上为卡槽

能够观察到图中有两条粗的蓝色的线,一个在上方,一个在下方

总结下来,我们知道了 NES 有 CPU 和 PPU 两类总线,他们分别有自己的寻址空间。由于卡带上既有图像数据又有程序数据,所以卡带同时接入了两根总线

了解了 NES 有两条总线之后,我们需要关注 NES 的内存映射,也就是总线上哪些地址对应了哪些数据

这个图简单看看就好了,后面介绍 PPU 的时候再详细看看

了解了各个硬件作用和内存映射后,下面可以来探讨 NES 游戏运行时的流程了,其实只是很简单的循环:

首先系统上电或者 RESET 按钮按下后,会触发 RESET 中断,CPU 从 0xFFFA 和 0xFFFB 存储的地址处(2byte)开始取指令运行(具体在 CPU 章节讨论),之后 CPU 会一直运行 0x8000 - 0xFFF9 区间的指令。在每一帧渲染之前,CPU 会读取输入设备,然后通过 PPU 寄存器往 PPU 总线上的_RAM 写数据,同时往 APU 写数据,_终反馈到了屏幕和声音上

这个NES模拟器怎么用金手指啊?格式是什么?_终幻想3不遇敌的

点建立金手指,然后输入代码(/link?url=34tIOBwF6WWVLFXjFSnTAaBCvF8ndM69BDhnNeGRGEYCRJm3aXVLdr8Lt6LtXOk-lWBqX-LZNKSa0NyMIDNmeq)再保存就可以了,格式就是nes

/1048774520/infocenter?ptsig=AYusljuHqhKs6ark127pFudihIfqKB9UhQhhgsZf1Ps_

求NES 0.97模拟器 勇者斗恶龙6的金手指代码

07AC-01-ff 金钱255

07AC-02-ffff 金钱65225

07AC-03-98967f 金钱999999

/p/1495001380

《口袋妖怪》;

《宠物小精灵》(中国香港译名)、《神奇宝贝》(中国台湾译名),是由Game Freak和Creatures株式会社开发,任天堂发行的系列游戏,是精灵宝可梦媒体作品的主要部分。_初的作品是在1996年于日本发行的Game Boy角色扮演游戏。精灵宝可梦系列一直贯穿任天堂的各代掌机之中。系列中的游戏通常成对发售(有所区别),复刻版常出现在初版游戏发布的几年后。游戏的主系列由角色扮演类游戏组成,旁支系列的游戏则包含有其他的类型,例如动作角色扮演游戏、益智游戏和电子宠物等。

NES 模拟器开发教程 02 - NES 文件结构

现在几乎所有 ROM 都是 INES 文件格式,后缀名 .nes 。它还有个 2.0 版本,但是我目前发现几乎所有 ROM 都是 1.0 版本,为了简单起见我们只研究 1.0

INES 分为下列四个区域

Header 总共 16 字节,每个字节定义如下:

从 Header 中可以看出,我们只需要其中的 PRG,CHR,M_er,Mirror,Trainer 等信息,所以解析也很简单

了解了 NES 文件结构之后,就可以开始卡带的模拟了,不过模拟卡带之前,下一章会讲解如何进行 NES 开发,以便加深对 NES 的理解

NES 模拟器开发教程 04 - NES 卡带(Cartridge)

04 章的时候了解了 NES 文件结构,NES 文件本质上只是从卡带上 dump 下来的信息,所以首先需要实现卡带的模拟,把程序等数据加载进内存后,才能进行下一步操作

M_er 已经在前面的文章出现过很多次了,现在来详细了解一下

03 篇文章提到过,NES 总线上,PRG 的寻址范围为 0x8000 - 0xFFFF,CHR 寻址范围为 0x0000 - 0x2000,他们大小分别为 32K 和 8K,对于大型游戏这么点空间是远远不够的,显然任天堂在设计的时候也考虑到了这一点,所以采用 M_er 来进行各种扩展

M_er 并不位于主机中,而位于卡带上。每一张卡带都对应了一种 M_er,在 NES 1.0 格式中,可以表示多达 256 种 M_er

每种 M_er 行为都不一样,比如有的 M_er 增加了音_芯片提高音_性能,有的 M_er 增加了寄存器扩展程序大小,有的还有中断计数的功能

比如 M_er2,增加了 Bank 选择寄存器,以控制不同的 Bank 映射到 0x8000 - 0xFFFF,这样就扩充了游戏容量

了解 M_er 作用之后,首先看看_简单的 M_er - M_er0,这个 M_er 没有任何的扩容能力,所以它的 ROM _只有 32K + 8K=40K

_需要注意的是:

了解了 M_er 作用后,就可以开始定义 API 了

首先定义 ROMInfo 接口,表示从 NES 文件解析的 Header 信息

另外还需要一个 M_er 对象,用来表示不同的 M_er。对于 CPU 来讲,只需要在意 M_er 的读写能力,所以需要定义 write 和 read 接口

_后,Cartridge 当中只需要 Info 和 M_er 两个实例就够了

在这里举个例子讲一下 Cartridge 如何模拟(只列举核心逻辑,其他简单的逻辑就等你自己完成了)

一共需要两个类,一个 Cartridge,一个 M_er0

文件 cartridge.ts

文件 m_er0.ts

FC模拟器virtuanes 魂斗罗如何设置金手指让其有30条命?

1代_ 1P:00AE-01-05 2P:00AF-01-05

2代_ 1P:00C4-01-15 2P:00C5-01-15

1代金身_ 1P:00B0-01-FF2P:00B1-01-FF

2代金身_ 1P:00D4-01-FF 2P:00D5-01-FF

1代人数 1P:0032-01-64

2P:0033-01-64

2代人数 1P:0053-01-64

2P:0054-01-64

1代换_

1P:00AA-01-00 普通

00AA-01-01 M弹

00AA-01-02 F弹

00AA-01-03 S弹

00AA-01-04 L弹

00AA-01-10 快速普通

00AA-01-11 快速M

00AA-01-12 快速F

00AA-01-13 快速S

00AA-01-14 快速L

2P:只要把00AA的前缀换成00AB即可

2代换抢

1P:00B8-01-00 普通

00B8-01-01 M

00B8-01-02 S

00B8-01-03 L

00B8-01-04 F

00B8-01-05 F(八面)

00B8-01-130,快速普通

00B8-01-131,快速M

00B8-01-132,快速S

00B8-01-133,快速L

00B8-01-134,快速F

2P:只要把00B8的前缀换成00B9即可

按ctrl+end输入金手指和金手指名称,然后按insert开启金手指即可

好了,今天我们就此结束对“nes模拟器源码”的讲解。希望您已经对这个主题有了更深入的认识和理解。如果您有任何问题或需要进一步的信息,请随时告诉我,我将竭诚为您服务。