基于GD32的NES游戏机开源项目详解
基于GD32的NES游戏机开源项目详解
一、简介
硬件采用的是前几期文章所开源的基于GD32+FreeRTOS+LVGL的PCB设计,软件上移植了infoNES的开源NES游戏模拟器,文末提供所有软件源码、硬件PCB以及面板和3D外壳文件。
1. 硬件
硬件:采用4层板PCB设计,立创EDA专业版设计并免费打样
2. 结构
3D结构:外壳采用FreeCAD设计并在立创三维猴平台3D打印
3. 面板
使用立创EDA专业版完成面板设计,并在立创商城完成打样
二、软件部分
1. 基础驱动
主要在完成LCD、按键的驱动后,移植InfoNES部分,主程序初始化设备后,运行NESGame任务:
2. NES接口部分
InfoNES移植的接口部分,在文件“InfoNES_System.c”中实现,主要是如下三个部分:
(1)Rom读取
这里使用的是读取程序内容的游戏Rom数组(硬件本身带有EEPROM、SPI Flash以及SD卡,大家可以自行发挥实现任意游戏的支持),可以根据需要自行导入,下文会介绍:
(2)按键部分
我这里的按键使用的是板载连接的GPIO,目前仅支持单人,如果需要实现双人,修改下面的扫描函数或者补充其他获取双人按键的部分即可:
(3)绘图部分
接口默认是画点函数,但是这样刷新很慢,我采用了画线的方式,使用的是ILI9488屏幕+EXMC接口,并启用了DMA,刷新速度很快:
(infoNES的移植部分我这般主要参考了eeworld中sjtitr的《手把手教你移植InfoNES(到HANKER-LM4F232)》系列文章,感兴趣的小伙伴可以在下方链接了解这位大佬具体的移植过程,尤其是Mapper操作部分:
https://bbs.eeworld.com.cn/thread-416564-1-1.html
三、NES游戏导入
上文介绍了我们的游戏文件是从程序中加载的,位置如下:
如果我们需要导入新游戏怎么办,下面为大家演示新游戏的添加方法:
首先打开工程目录下”.\Nes Game Rom“文件夹为大家准备了>500个NES资源文件:
大家自行下载”winhex“软件,然后在软件内打开任意一个NES文件,例如我打开的这个是”荒野大镖客“:
然后”Ctrl+A“选中全部数据后,按下图位置复制为C代码到剪贴板:
然后粘贴到文件下:
修改数组名与定义类型,并新增宏定义,如下所示:
//新增GAME-荒野大镖客
#ifdef _USE_ROM_DABIAOGE_ //记得末尾添加#endif
char const nes_rom[]={
....
}
#endif
然后在文件夹头部定义使用:
#define _USE_ROM_DABIAOGE_ //荒野大镖客
然后编译烧录运行就可以了,注意文件不要太大,毕竟用的这个MCU Flash一共512K,加上NES模拟器的占用,三四百K的游戏还是不要想了,几十K和一百多K的游戏跑起来还是没有压力的:
四、NES游戏试玩
Bilibili:基于GD32 MCU的NES游戏机——智能控制器扩展应用篇
五、开源链接
1. 软件
本文使用的GD32F303 Keil MDK-NES游戏的工程文件,可以在公众Hao【IOT趣制作】回复关键字“1117”直接下载或在下方硬件开源链接的附件处直接下载
2. 硬件
硬件已上传至:立创开源硬件平台:基于GD32+FreeRTOS+LVGL的智能通用控制Demo
(含软件源码、硬件、外壳文件)