使用C++实现FC红白机模拟器 概述

想必提到Fc游戏机大家都应该不会陌生(陌生您也不会搜到这篇文章了 ),FC游戏机又称红白机,是任天堂在1983年推出,很快也火遍中国。不过国内更熟悉的可能是小霸王等一众兼容机(偷笑)~~

但是不管怎么说,红白机依然使我们不少人的童年回忆。想必当初一起玩游戏的那些伙伴已经走入了各行各业,自然也少不了成为“程序猿”的。你没有想过自己实现一款红白机呢?或许这有些难度,毕竟我们还需要准备不同的硬件、设计电路焊接等。不过好在,我们可以通过纯代码的方式在PC(或者android)实现一个红白机模拟器。

工欲善其事必先利其器,开始之前,我们最好满足下面几个基本要求。

本系列文章的目的

本系列的目的不是带领你,而是我们一起。因为笔者本身也是一个刚刚入门的菜鸟。想要和大家一起分享与学习。鉴于笔者的能力,文章中难免出现错误和不严谨的地方。希望能够理解并批评指正,共同进步。
本系列的文章的最终目的是开发一款具备较好可移植性的,支持较多常见游戏的FC模拟器,其中各部分包括APU部分均由我们自己实现而不借用其他开源项目。

希望您已经具备的能力:
  • 基础的C/C++编程能力,本系列文章假设您已经具备,因此不会深入讲解语法知识。
  • 有音频基础知识最好,没有也没关系,笔者开发之前也没有。
  • 有一定的硬件基础知识最好,便于理解一些实现细节,没有也没关系,一起谈论。
本项目的开发平台

Windows10(64位)+ QtCreator4.13

这不是硬性要求,之所以使用Qt是因为Qt对界面和音频操作的封装程度比较高,使得本系列可以不必花费大的精力去讲非模拟器实现的部分。不过本教程除了界面和音频等必须部分,会使用和Qt无关的写法。因此您也可以选择选择VS2019、甚至Android配合本地库去开发。只要您熟悉相关的接口即可。

本系列文章假设您熟悉并已经安装了相关的开发环境,因此不再详细介绍Qt与其他环境的安装。

简单分析

正式开发之前,我们先来了解一下红白机的组成部分。红白机主要由CPUPPUAPUCartridge手柄五大部分组成。我们模拟红白机就是模拟这五部分的实现。

  • CPU 是整个系统最重要的部分(却不是最难的)。红白机的CPU型号为RP2A03,使用了6502指令集,频率约为1.79MHZ(频率很重要哦,后面的文章会具体讲到)。

  • PPU 是负责屏幕显示的处理单元,可以理解为现在PC电脑的显卡。

  • APU 负责音频处理,不过也一般称他为pAPU(pseudo 假的、伪造的)。因为APU集成在了CPU内部不是独立存在的。

  • Cartridge 墨盒,通常也称为卡带,就是我们以前常说的“游戏卡”。内部保存了游戏的可执行程序和数据。不过因为默认可支持的游戏大小非常小(32KB可执行文件与8KB图像数据),对于一些稍微复杂的游戏是远远不够的,因此内部还有一个称为Mapper的东西来动态改变地址映射,实现存储空间的扩展。支持的Mapper越多可以玩的 游戏也就越多。

使用C++实现FC红白机模拟器 概述_第1张图片

  • 手柄 不用多说了,上下左右BABA就完了~

小贴士
鉴于时间和精力,本系列文章的更新时间不固定,但是一定会坚持更新。
任何疑问可以邮件联系我:[email protected]
另外其实我已经事先完成了一款简单的FC模拟器,如果您已经是大神或者希望直接阅读代码,可以直接访问(记得点个starts哦)
https://gitee.com/zhendongdong/SimpleNes

你可能感兴趣的:(C,c++,FC模拟器,红白机模拟器)