[代发]开源目前为止STM32绝无仅有的PCE游戏模拟器,F7流畅40帧!

2019-07-20 12:00发布

本帖最后由 motoedy 于 2017-9-12 07:58 编辑

=================================================
声明:这个模拟器不是我的原创,是我的一个朋友(网名:feisheng168)搞的,
已征得朋友的同意开源发出,以下的大部分(99%)内容为我朋友即此移植者编写,
如果对你有用,还希望你们向这些愿意开源的朋友给予肯定!
如果有需要以此为商业获利的(比如开发板),还请能申明感谢下移植修改者:feisheng168。
毕竟这个移植修改到STM32上花了feisheng168一个月的时间,谢谢!
=================================================

================我是可爱的前戏分割线的开始================
强大STM单片机,经过不断的努力终于在ST单片运行了NEC的游戏机模拟器,不要急先来几张PCE游戏的靓照、
QQ图片20170911090711.jpg
QQ图片20170911090524.jpg QQ图片20170911090529.jpg
QQ图片20170911090600.jpg QQ图片20170911090652.jpg

哈哈,废话有点多直接来看STM32板子演示效果

QQ图片20170911090029.png QQ图片20170911090041.png QQ图片20170911090049.png

在自己DIY的F7游戏机上运行的效果。
QQ图片20170911091135.jpg

优酷演示视频



说了这么多废话,该上源码了。。
stm32f767IG演示代码如下:
MDK_PCE.rar (7.11 MB, 下载次数: 1010) 2017-9-11 15:38 上传 点击文件名下载附件

测试游戏ROM:
测试游戏.rar (3.79 MB, 下载次数: 2337) 2017-9-11 15:38 上传 点击文件名下载附件

=================================================
源代码移植过程如下:

首先我们打开工程所有的移植都会在“dos.c”文件完成,无需其它文件修改便可顺利完成
移植步骤
游戏模拟器我们要移植的东西有图像,声音,和手柄,以及ROM读取,内存管理。
第一步骤:我们移植图像
void line_blur(char *src, int line_width, int line);
这个函数添加我们的绘制行LCD显示,src为缓存,width行的宽度,line第几行;
第二步骤:我们移植手柄
void update_input(void);
#define INPUT_B2        (0x80)//B2
#define INPUT_B1        (0x40)//B1
#define INPUT_RUN       (0x20) //START
#define INPUT_SELECT    (0x10) //SELECT
#define INPUT_LEFT      (0x08) //左
#define INPUT_RIGHT     (0x04) //右
#define INPUT_DOWN      (0x02) //下
#define INPUT_UP        (0x01) //上
这个函数添加我们的手柄按键值,input.pad[0]将上面的值赋值给这个变量即可;
第三步骤:我们移植ROM读取
unsigned int fileio_rom(char *file,unsigned char*buf);
这个函数添加我们的FATFS,p为TF卡文件地址名,buf要读取的缓存区,返回读取字节数
第四步骤:我们移植声音
void play_wav(short *src, int size);
这个函数添加我们的声音处理DMA,buf为音频缓存地址,每帧播放16位WAV字节;
第五步骤:移植内存管理
将函数的大的内存进行分外部SDRAM
函数如下:
void *pce_malloc(int size);
申请内存函数,
void pce_free(void *p);
释放内存函数。
第六步骤:如何调用PCE游戏主函数
int pce_main (char *f)
在要调用的地方直接调用上面的函数加头文件#include "dos.h"
例如:pce_main ("0:pce/雷电.pce")
大工告成~—~ ~—~ ~—~ ~—~

请小伙伴移植玩玩STM32的强大功能

=====================================================================


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。