【开源】我们和童年的距离,就是一台游戏机-用FPGA DIY一个NES游戏机
现在回忆起小时候,总觉得那时候日子特别美好。
儿时的我们虽然没有手机,但是却一点也不会无聊。
尤其是和小伙伴们一起偷偷地玩游戏机。
后来随着电脑和手机的普及,童年记忆里的老物件,也因为停产而逐渐远去。
儿时的游戏离我们原来越远,渐渐消失在我们生活中。
为了找回童年的美好,今天我们动手做一台NES游戏机。
硬件模拟好在哪?
一般来说现在想玩老游戏有三种方法。
第一种方法是在二手市场淘换当年的原机原卡带,但是非常稀缺、价格昂贵,品相难以保证。
年代久远的游戏机只能输出模拟视频信号,需要更换芯片或用采集卡才能连接现代的数字显示器,会带来显示延迟。
第二种方法是软件模拟,虽然硬件性能今非昔比,手机上都可运行许多模拟器,但有兼容性问题,不是所有游戏都能稳定运行。
使用软件模拟还会出现操作输入延迟,和声音延迟。
对高难度的动作游戏来说,虽然延迟只有毫秒级别,但还是能感觉到手感不同,老游戏难度普遍又高,输入延迟使一些高级技巧难以操作。
对于音游来说,那就根本没法玩了。
现在市面上有一些基于树莓派等环境的开源游戏机,任天堂、世嘉等也不断地推出官方迷你复刻版。
但这些本质上还是使用现代硬件架构的软件模拟,不能解决软件模拟带来的问题。如任天堂迷你FC实际上是在ARM架构上运行Linux系统。
第三种方法就是使用FPGA硬件模拟。
FPGA的全称是现场可编程门阵列,通过直接对芯片中的模块和逻辑单元编程来模拟老游戏机硬件的运行方式。
软件模拟器是用CPU做通用计算,按顺序执行代码,需要比被模拟的硬件运行频率快许多倍的CPU才能达到原硬件的运行速度。
FPGA通过编程重组生成专用电路,相当于“可变形的硬件”。
可以让被模拟硬件的不同芯片同时工作,耗费的资源更少,同时解决延迟问题。
还可以模拟大型游戏卡带中特制的增强芯片,解决游戏兼容性问题。
以及模拟老机种的音频芯片输出原汁原味的游戏音效。
此外,在测试中GameGirl输出的画面比原机清晰度更高,色彩也更鲜明。
NES FC 小霸王 。。。傻傻分不清楚
查看《万字长文带你回顾电子游戏的七十多年历史(完整版)》主条目:第三代视频游戏机
总结一下,美国叫NES,日本叫FC,中国叫小霸王(山寨),其实都是任天堂和SEGA8位游戏机。
硬件介绍
GameGirl核心板+扩展板
FPGA核心板
EP4ce22f17
SDRAM:HY57V561620 32MB
扩展板
AT91SAM7S256
MAX1304(SPI转USB)
实物如下:
程序
https://github.com/suisuisi/gamegirl/tree/master/CoreCPU/nes
下载下来使用Quartus II进行编译,编译选项注意下面截图勾选:
编译后会产生.RBF文件:
SD卡准备
将上述文件拷贝到SD卡根目录下,并重新命名为core.rbf。
在SD卡上创建nes文件夹,将自己喜欢的游侠放到该目录下,支持.nes .nsf .bin等扩展文件名。
视频
NOW现在行动!
学习Xilinx FPGA最好的资料其实就是官方手册,下表总结了部分手册的主要介绍内容,关注我,持续更新中......
文件名 | 主标题 | 内容简单介绍 | 是否有中文版 | |
UG476 | 7 Series FPGAs GTX/GTH Transceivers | GTX和GTH介绍,PCIe、serdes等学习必备 | 否 | |
UG471 | 7 Series FPGAs SelectIO Resources | 描述 7 系列 FPGA 中可用的 SelectIO资源。 | 否 | |
UG1114 | PetaLinux Tools Documentaton | PetaLinux 工具文档 参考指南 | 是,V2019.2 | |
UG949 | UltraFAST 设计方法指南(适用于 Vivado Design Suite) | 赛灵思® UltraFast™ 设计方法是用于为当今器件优化设计进程的一套最佳实践。这些设计的规模与复杂性需要执行特定的步骤与设计任务,从而确保设计每一个阶段的成功开展。依照这些步骤,并遵循最佳实践,将帮助您以最快的速度和最高的效率实现期望的设计目标 | 是,V2018.1 | |
IP手册 | pg057 | FIFO Generator | FIFO生成器IP使用手册 | 否 |
pg104 | Complex Multiplier | 复数乘法器IP使用手册 | 否 | |
pg122 | RAM-Based Shift Register | 移位寄存器IP使用手册 | 否 |
推荐阅读
【Vivado那些事】如何查找官网例程及如何使用官网例程
【Vivado使用误区与进阶】总结篇
【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键
SystemVerilog数字系统设计_夏宇闻 PDF
图书推荐|ARM Cortex-M0 全可编程SoC原理及实现
简谈:如何学习FPGA
1202年了,还在使用虚拟机吗?Win10安装Ubuntu子系统及图形化界面详细教程
Github 上有哪些优秀的 VHDL/Verilog/FPGA 项目
AD936x+ZYNQ搭建收音机(一)
AD936x+ZYNQ搭建OpenWIFI
无招胜有招-Vivado非工程模式下的详细设计
面试中经常会遇到的FPGA基本概念,你会几个?
Vivado ML(机器学习) 2021尝鲜
推荐一些可以获取免费的国外的原版书籍(电子版)网站
【Vivado那些事】FPGA的配置方式
FPGA 的重构
浅析FPGA局部动态可重构技术
ISP(图像信号处理)算法概述、工作原理、架构、处理流程
国产CPU概括
从电子游戏历史看IC发展的助推剂
80年代电子游戏及电脑游戏的发展历史
PCIe总线的基础知识
万字长文带你回顾电子游戏的七十多年历史(完整版)
FPGA中异步复位,同步释放的理解
OpenFPGA系列文章总结
用Verilog设计一个16 位 RISC 处理器
介绍一些新手入门FPGA的优秀网站(新增)
Verilog数字系统基础设计-CRC
FPGA 的布局规划艺术
Verilog数字系统基础设计-奇偶校验
建立和保持时间及时序简单理解
(Xilinx)FPGA中LVDS差分高速传输的实现
Xilinx Multiboot实例演示
高速串行通信常用的编码方式-8b/10b编码/解码
Verilog计时(微秒、毫秒和秒)脉冲的产生及同步整形电路
再说System Verilog 与 Verilog 的关系
图书推荐|一本图像/视频处理的强大工具书
Verilog HDL-同步技术
再说System Verilog 与 Verilog 的关系
数模混合信号建模语言Verilog-AMS
数字系统重要指标-吞吐率和时延
Verilog数字系统基础设计-数据转换器
【Vivado那些事儿】强制修改打开Vivado工程使用的Vivado版本
【开源】我们和童年的距离,就是一台游戏机-用FPGA DIY一个NES游戏机相关推荐
- 童年修复系列-PC Engine/TurboGrafx-16介绍及FPGA实现
拯救童年系列-PC Engine/TurboGrafx-16介绍及FPGA实现 国内的很少有这款游戏机的体验,但是在日本这款游戏机是大受欢迎(曾在销量上打败任天堂的FC游戏机).下面就简单介绍一下这款 ...
- 开源电子商城系统:罗列几个电子商城系统,和一个不错的开源电子商城项目:mall,先做技术调研,主要还是学习代码。
目录 前言 1,关于电子商城 2,偶然发现了 xmall 项目 3,其他资源 4,GitEE 上面还有一堆 5,总结 前言 本文的原文连接是: https://blog.csdn.net/freewe ...
- (CAD二次开发)C#求垂足,点到直线的距离,点是否在直线上及其一个范围内
1.获取点到线段的距离 /// <summary>/// 获取两点的距离/// 作者:/// </summary>/// <returns></returns ...
- 【开源】diy一个wifi遥控小飞机
完成效果: 童年的纸飞机 资料中包含了PCB和参考的小飞机模型,我当时是用某宝上几块钱的手抛小飞机改装的,需要一定的动手能力. 硬件 材料 720空心杯电机 * 2 107正反桨一对,搭配电机 3.7 ...
- 拯救童年系列-GameBoy介绍及FPGA实现
拯救童年系列-GameBoy介绍及FPGA实现 这个掌上游戏机应该不需要过多言语,大部分的80后.90后的青春记忆,记忆中是那个抱着Game Boy的漫长午后,那个躲在被子里打着手电筒玩Game Bo ...
- 响应式扩展_响应式和无限扩展的JS动画
响应式扩展 Back in late 2012 it was not easy to find open source projects using requestAnimationFrame() - ...
- 古老CPU启示录-第一款单芯片微处理器8080
从今天来看:"该芯片是二十世纪最重要的产品.8080及其后续的芯片和其它公司生产的竞争芯片,对世界产生了深远的影响,给人类社会带来了翻天覆地的变化.",那么什么芯片具有如此大的魔力 ...
- 航模DIY【1】-遥控器硬件设计
DeviationTX DeviationTX是一套开源RC遥控器实现,官方网站 https://www.deviationtx.com.Deviation支持多种硬件类型,主要是 Walkera(华 ...
- 手把手教你用全志XR32芯片DIY一个自己的开发板(一:电路与PCB绘制)
XR32 [XR32]:完整型号[XR32F429] 是全志推出MCU芯片,听名字就知道,对标的是某tm/某sp32,可以用来做各自小板子.小车车.小电子设备.实验装置等等等 XR32F429 基于主 ...
最新文章
- 01--swift之基本运算符
- 微信小程序-04-详解介绍.json 配置文件
- Java正则表达式实现计算器_用java编写win7计算器
- element-ui Notification重叠问题,原因及解决办法
- 在Razor中如何引入命名空间?(import namespace in razor view)
- sci translate好用吗_收藏!SCI论文Introduction 和Conclusion的写作建议
- android:AIDL
- EP100触发CAN中断但无法读取报文
- PMP第十一章:项目风险管理
- 玩转web表单网页快速开发(❤建议收藏❤)
- 垃圾分类全套技术方案
- Graph Attention Network (GAT) 的Tensorflow版代码解析
- mxGraph绘图区域使用鼠标滚轮实现放大/缩小
- UnityShader图形学中的数学之Normal融合
- JQuery中append(function(index,html)),appendTo(),after(function(index,html)),clone()方法
- AMD的复兴之路 发力ARM服务器芯片
- 使用计算机需要准备硬件和什么,当个人计算机需要使用ADSL访问Internet时,所需的基本硬件设施是什么?...
- oppor17刷鸿蒙系统,coloros11正式版下载
- linux,rpm, tar, gz, bz, bz2, rar, zip, lha, deb, 解压
- matlab制作动画并保存,[转载]Matlab中动画的实现、制作和保存(转载Matlab技术论坛)...