上个月在 V 站看到有同学发布了一个 Rust 写的 Gameboy 模拟器。当时我恰好在系统化学习 Go 语言,作为马里奥 /马力欧 /玛丽(误)的忠实粉丝,就想着自己能不能用 Go 写个模拟器玩玩。于是我瞄准了 NES 模拟器,考虑到 NES 是上个世纪 80 年代的古董硬件,可能比较容易实现。

接下来我开始在网上搜索关于 NES 硬件的信息。忽然有一个神奇的网站出现在我眼前,它就是 nesdev.com 。这个网站有一个Wiki,里面的内容包罗万象,有 NES 的硬件细节,也有 NES 游戏开发的教程。对照着文档,大概用了一天的时间完成了 INES ROM 文件(网上下到的.nes 文件都是这种格式)的读取,然后用了不到一周的业余时间就基本实现了 NES CPU ( 6502 )指令解释器。NES 的 PPU (类似显卡)是难点,大概陆陆续续写个几个星期才完成基本功能。主要因为 NES 的硬件太弱,很多游戏为了压榨机能在开发过程中用了大量的 hack,如果对 PPU 的模拟必须不够精确,游戏运行时就会出现各种奇怪的现象。用的 GUI 库是 fyne.io ,在部分操作系统上会内存泄漏,打算之后换个其他的库试试( Go 语言目前好像没有成熟的 GUI 库)。另外 APU (类似声卡)的模拟还没有实现(主要我对声学一窍不通,也暂时不想随便引用个第三方库解决,就先拖着了)。

另外一个难点是卡带的模拟。NES 原生只有 2kB 内存+2kB 显存,为了拓展内存和显存的容量,很多游戏的卡带带有一个俗称 Mapper 的芯片。配合卡带上额外的 ROM 或 RAM 芯片,Mapper 可以将卡带上 ROM 或 RAM 的一部分空间(称为 bank )映射进 NES 的内存或显存地址空间,还可以在游戏运行中动态切换。麻烦的是,不同的游戏使用的 Mapper 芯片是不同的,你必须先实现了对某种 Mapper 的模拟,才能运行使用这种 Mapper 的游戏 ROM,然而已知的 Mapper 种类就有几百种。目前我的模拟器只实现了 INES 文件格式定义的 0-3 号 Mapper,但已经可以运行不少游戏了(包括超级马力欧兄弟一代和魂斗罗)。

目前这个项目还比较初期,只能慢慢完善了。如果很多人感兴趣的话我打算写几篇文章,做个自制 NES 模拟器的教程。

演示

演示游戏为 Nova The Squirrel,是一个仿星之卡比系列的开源山寨游戏。

android 开源fc模拟器_用 Go 撸了一个 NES/FC/红白机模拟器——GoNES相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  10. android 开源fc模拟器_战舰开发板触摸屏运行NES模拟器

    本帖最后由 xcc521 于 2019-4-3 23:14 编辑 先上图 ScreenCut003.png (8.39 KB, 下载次数: 0) 2019-4-1 00:58 上传 ScreenCut ...

最新文章

  1. Linux必学的系统管理命令-1
  2. python画图代码星星-Python 星星 金字塔 学习笔记
  3. VMware上安装ubuntu 13.04
  4. JZOJ 5385. 【NOIP2017提高A组模拟9.23】Carry
  5. luogu P2791 幼儿园篮球题
  6. PWA - service worker - Workbox(未完)
  7. js判断一个字符串 是否存在在另一个字符串
  8. c语言制作图片软件,大佬们,小菜鸟想问一问用vc编译器做简易画图软件
  9. 杭电1799循环多少次?
  10. 用计算机考试有老师引导,河北省教师计算机考试评价题及答案
  11. 提取全局应用程序集中的dll
  12. Eclipse中修改项目的文本字符集编码
  13. 深入浅出mysql csdn_《深入浅出MySQL:数据库开发、优化与管理维护
  14. 什么是域名,域名的购买流程是什么
  15. 微服务真的过时了吗?Twitter员工因为微服务被马斯克解雇了
  16. 小米10至尊纪念版和iphone11的区别 哪个好
  17. 前端效果之“拉开窗帘”
  18. 决战618!摩杜云爆款秒杀,最低一年3.3元起
  19. 十一、TN 的本征自洽方法、梯度更新与任意 TN 的收缩
  20. js验证组织机构代码

热门文章

  1. IntelliJ IDEA如何 导入、导出 设置
  2. neo4j实现Louvain算法
  3. Matlab-Simulink文件类型总结
  4. java常见面试考点(九):SSM面试题
  5. Eplan 各版本 软件 百度网盘 永久链接
  6. 数字逻辑实验五 七人表决器
  7. 普中V2 7人多数表决器 51单片机 仿真 proteus
  8. 【bb平台刷课记】wireshark结合实例学抓包
  9. python统计代码行数_使用Python简单快速实现统计代码行数
  10. webstorm中文乱码问题