想必提到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越多可以玩的 游戏也就越多。

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

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

使用C++实现FC红白机模拟器 概述相关推荐

  1. 使用C++实现FC红白机模拟器 Cartridge 与 Mapper(原理篇)

    1. 认识nes文件 我们既然是模拟,就不可能使用实体的卡带硬件.那我们如何获取游戏文件呢?好在已经有人为我们准备好了(心怀感恩). .nes文件是NES(FC)的rom文件,关于它的来龙去脉这里就不 ...

  2. 使用C++实现FC红白机模拟器 Cartridge 与 Mapper(实现篇)

    (继上篇:原理篇,下:实现篇) 2. Cartridge 与 Mapper的实现 首先我们在QT中创建两个类,Cartridge 与 Mapper类: Cartridge 类负责加载和解析ROM,因为 ...

  3. fc安卓模拟器_安利一款手机上的红白机模拟器

    戳上面的蓝字关注我哦! 使用平台:安卓 软件简介: NES.emu是一款任天堂红白机(NES.FC)模拟器,软件支持横竖屏.自动保存游戏进度.按键自定义等功能,还可以自行编辑作弊文件,小编为大家带来的 ...

  4. 撸一个VS Code插件——红白机模拟器 支持手柄 支持保存

    分享我自己写的VS Code红白机模拟器 前言 我曾经利用 jense 这个库封装了一个vue组件的nes模拟器:nes-vue: Vue 3 的NES(FC)模拟器组件 (gitee.com),最近 ...

  5. 小霸王其乐无穷~FC红白机游戏600合集(支持mac 12.x系统)

    FC游戏是任天堂红白机一FC(Family Computer),代表作品主要有<魂斗罗系列>.<93超级魂>.<沙罗曼蛇系列>.<超级玛丽>.<赤 ...

  6. 计算机丢失fc64,FC红白机64合1

    软件简介 Soft Introduction FC红白机64合1 64in1.nes 01Islander冒险岛1 02Grading沙罗曼蛇1 03Star Soldier星际战士 04Goonie ...

  7. 【转】FC(红白机)游戏nes文件的汉化技术

    FC大字体汉化方法 作者:madcell 一.前言: 本文以FC上第一个发售的游戏<大金刚>为例,介绍如何对标题画面进行大字体汉化. 阅读本文,必须具备一定的的条件,否则看了也是不知所云. ...

  8. ADI Blackfin DSP处理器-BF533的开发详解70:NES 红白机模拟器(含源码)

    硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 代码实现功能 代码实现了 NES 游戏模拟器在 ...

  9. nes 红白机模拟器 第6篇 声音支持

    InfoNES 源码中并没有包含 linux 的声音支持. 但提供 wince 和 win 的工程,文件,通过分析,win 的 DirectSound 发声,在使用 linux ALSA 实现. 先使 ...

  10. linux终端玩fc游戏,在UBuntu下玩FC和街机模拟器

    我不是太爱玩游戏,所以Linux下我并没有特别关心游戏的问题.不过有一天,突然觉得想起以前在Windows下玩过的VirtualNES FC(红白机)模拟器和Nebula街机模拟器了.也许是怀旧的缘故 ...

最新文章

  1. webpack组织模块的原理 - 基础篇
  2. python turtle画熊-基于turtle的Python作画
  3. shiro spring boot thymeleaf
  4. streak10刷Linux,streak 10
  5. java,验证码base64编码到json字符串出显数据一行一行的问题,关于base64编码函数解释
  6. Android edittext限制字节数
  7. Filezilla 服务器发回了不可路由的地址。使用服务器地址代替
  8. poj1005——I Think I Need a Houseboat
  9. 十三、this关键字
  10. 作业必备:【操作系统实验报告】实验一:熟悉Ubuntu环境(后续会更新~)
  11. C语言中TC20是什么意思,c语言tc20下载
  12. linux开pulseaudio服务,PulseAudio
  13. 2021 智慧养老整体解决方案
  14. 专访|带着问题去学习,Apache DolphinScheduler 王福政
  15. Thinkphp5结合layer导入excel
  16. 【多传感器融合理论】03多传感器信息融合理论(上)
  17. 民生银行京东三位大咖,手把手教你构建用户画像
  18. GAN动漫人像生成实现(附带源码)
  19. 计算机学培训后的心得体会,计算机培训学习心得感想
  20. 雷军演讲刷屏,我对项目经理人的发展又有了2点想法……

热门文章

  1. MDM数据清洗功能开发说明
  2. 普通母函数理解篇(PPT)
  3. PcShare2007 暗桩
  4. 西数硬盘刷新固件_机械硬盘选购:SMR避坑指南
  5. .bin文件的反汇编记录
  6. java五子棋需求分析文档_五子棋需求分析
  7. 关于数据库方言MySQLDialect、MySQL5Dialect、MySQL55Dialect、MySQL57Dialect、MySQL8Dialect之间的区别与联系
  8. boost::asio 阻塞卡顿问题
  9. ADB 环境变量配置教学
  10. pywinauto实现微信消息自动发送