使用C++实现FC红白机模拟器 概述
想必提到Fc游戏机大家都应该不会陌生(陌生您也不会搜到这篇文章了 ),FC游戏机又称红白机,是任天堂在1983年推出,很快也火遍中国。不过国内更熟悉的可能是小霸王等一众兼容机(偷笑)~~
但是不管怎么说,红白机依然使我们不少人的童年回忆。想必当初一起玩游戏的那些伙伴已经走入了各行各业,自然也少不了成为“程序猿”的。你没有想过自己实现一款红白机呢?或许这有些难度,毕竟我们还需要准备不同的硬件、设计电路焊接等。不过好在,我们可以通过纯代码的方式在PC(或者android)实现一个红白机模拟器。
工欲善其事必先利其器,开始之前,我们最好满足下面几个基本要求。
本系列文章的目的
本系列的目的不是带领你,而是我们一起。因为笔者本身也是一个刚刚入门的菜鸟。想要和大家一起分享与学习。鉴于笔者的能力,文章中难免出现错误和不严谨的地方。希望能够理解并批评指正,共同进步。
本系列的文章的最终目的是开发一款具备较好可移植性的,支持较多常见游戏的FC模拟器,其中各部分包括APU部分均由我们自己实现而不借用其他开源项目。
希望您已经具备的能力:
- 基础的C/C++编程能力,本系列文章假设您已经具备,因此不会深入讲解语法知识。
- 有音频基础知识最好,没有也没关系,笔者开发之前也没有。
- 有一定的硬件基础知识最好,便于理解一些实现细节,没有也没关系,一起谈论。
本项目的开发平台
Windows10(64位)+ QtCreator4.13
这不是硬性要求,之所以使用Qt是因为Qt对界面和音频操作的封装程度比较高,使得本系列可以不必花费大的精力去讲非模拟器实现的部分。不过本教程除了界面和音频等必须部分,会使用和Qt无关的写法。因此您也可以选择选择VS2019、甚至Android配合本地库去开发。只要您熟悉相关的接口即可。
本系列文章假设您熟悉并已经安装了相关的开发环境,因此不再详细介绍Qt与其他环境的安装。
简单分析
正式开发之前,我们先来了解一下红白机的组成部分。红白机主要由CPU
、PPU
、APU
、Cartridge
和手柄
五大部分组成。我们模拟红白机就是模拟这五部分的实现。
CPU 是整个系统最重要的部分(却不是最难的)。红白机的CPU型号为RP2A03,使用了6502指令集,频率约为1.79MHZ(频率很重要哦,后面的文章会具体讲到)。
PPU 是负责屏幕显示的处理单元,可以理解为现在PC电脑的显卡。
APU 负责音频处理,不过也一般称他为pAPU(pseudo 假的、伪造的)。因为APU集成在了CPU内部不是独立存在的。
Cartridge 墨盒,通常也称为卡带,就是我们以前常说的“游戏卡”。内部保存了游戏的可执行程序和数据。不过因为默认可支持的游戏大小非常小(32KB可执行文件与8KB图像数据),对于一些稍微复杂的游戏是远远不够的,因此内部还有一个称为Mapper的东西来动态改变地址映射,实现存储空间的扩展。支持的Mapper越多可以玩的 游戏也就越多。
- 手柄 不用多说了,上下左右BABA就完了~
【小贴士】
鉴于时间和精力,本系列文章的更新时间不固定,但是一定会坚持更新。
任何疑问可以邮件联系我:zhendongdong@foxmail.com
另外其实我已经事先完成了一款简单的FC模拟器,如果您已经是大神或者希望直接阅读代码,可以直接访问(记得点个starts哦)
https://gitee.com/zhendongdong/SimpleNes
使用C++实现FC红白机模拟器 概述相关推荐
- 使用C++实现FC红白机模拟器 Cartridge 与 Mapper(原理篇)
1. 认识nes文件 我们既然是模拟,就不可能使用实体的卡带硬件.那我们如何获取游戏文件呢?好在已经有人为我们准备好了(心怀感恩). .nes文件是NES(FC)的rom文件,关于它的来龙去脉这里就不 ...
- 使用C++实现FC红白机模拟器 Cartridge 与 Mapper(实现篇)
(继上篇:原理篇,下:实现篇) 2. Cartridge 与 Mapper的实现 首先我们在QT中创建两个类,Cartridge 与 Mapper类: Cartridge 类负责加载和解析ROM,因为 ...
- fc安卓模拟器_安利一款手机上的红白机模拟器
戳上面的蓝字关注我哦! 使用平台:安卓 软件简介: NES.emu是一款任天堂红白机(NES.FC)模拟器,软件支持横竖屏.自动保存游戏进度.按键自定义等功能,还可以自行编辑作弊文件,小编为大家带来的 ...
- 撸一个VS Code插件——红白机模拟器 支持手柄 支持保存
分享我自己写的VS Code红白机模拟器 前言 我曾经利用 jense 这个库封装了一个vue组件的nes模拟器:nes-vue: Vue 3 的NES(FC)模拟器组件 (gitee.com),最近 ...
- 小霸王其乐无穷~FC红白机游戏600合集(支持mac 12.x系统)
FC游戏是任天堂红白机一FC(Family Computer),代表作品主要有<魂斗罗系列>.<93超级魂>.<沙罗曼蛇系列>.<超级玛丽>.<赤 ...
- 计算机丢失fc64,FC红白机64合1
软件简介 Soft Introduction FC红白机64合1 64in1.nes 01Islander冒险岛1 02Grading沙罗曼蛇1 03Star Soldier星际战士 04Goonie ...
- 【转】FC(红白机)游戏nes文件的汉化技术
FC大字体汉化方法 作者:madcell 一.前言: 本文以FC上第一个发售的游戏<大金刚>为例,介绍如何对标题画面进行大字体汉化. 阅读本文,必须具备一定的的条件,否则看了也是不知所云. ...
- ADI Blackfin DSP处理器-BF533的开发详解70:NES 红白机模拟器(含源码)
硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 代码实现功能 代码实现了 NES 游戏模拟器在 ...
- nes 红白机模拟器 第6篇 声音支持
InfoNES 源码中并没有包含 linux 的声音支持. 但提供 wince 和 win 的工程,文件,通过分析,win 的 DirectSound 发声,在使用 linux ALSA 实现. 先使 ...
- linux终端玩fc游戏,在UBuntu下玩FC和街机模拟器
我不是太爱玩游戏,所以Linux下我并没有特别关心游戏的问题.不过有一天,突然觉得想起以前在Windows下玩过的VirtualNES FC(红白机)模拟器和Nebula街机模拟器了.也许是怀旧的缘故 ...
最新文章
- webpack组织模块的原理 - 基础篇
- python turtle画熊-基于turtle的Python作画
- shiro spring boot thymeleaf
- streak10刷Linux,streak 10
- java,验证码base64编码到json字符串出显数据一行一行的问题,关于base64编码函数解释
- Android edittext限制字节数
- Filezilla 服务器发回了不可路由的地址。使用服务器地址代替
- poj1005——I Think I Need a Houseboat
- 十三、this关键字
- 作业必备:【操作系统实验报告】实验一:熟悉Ubuntu环境(后续会更新~)
- C语言中TC20是什么意思,c语言tc20下载
- linux开pulseaudio服务,PulseAudio
- 2021 智慧养老整体解决方案
- 专访|带着问题去学习,Apache DolphinScheduler 王福政
- Thinkphp5结合layer导入excel
- 【多传感器融合理论】03多传感器信息融合理论(上)
- 民生银行京东三位大咖,手把手教你构建用户画像
- GAN动漫人像生成实现(附带源码)
- 计算机学培训后的心得体会,计算机培训学习心得感想
- 雷军演讲刷屏,我对项目经理人的发展又有了2点想法……