问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于GD32的NES游戏机开源项目详解

创作时间:
作者:
@小白创作中心

基于GD32的NES游戏机开源项目详解

引用
CSDN
1.
https://blog.csdn.net/weixin_43351158/article/details/143822233

一、简介

硬件采用的是前几期文章所开源的基于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

(含软件源码、硬件、外壳文件)

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号