【(首发)H750NES模拟器,支持上百个映射器,读档存档金手指。支持重装机兵吞食天地等游戏】

前言

先上效果:

在这里插入图片描述
在这里插入图片描述

基于STM32H750的NES模拟器演示,支持上百个映射器。开源

	芯片采用STM32H750XB,CubeMX工程,内存卡+U盘导入NES游戏。控制是使用2.4G的PS无线手柄。
	支持绝大部分游戏。支持存档和金手指。暂不支持音频输出。移植PC端的任天堂0.97源码。
	因为时间问题,有想研究的可以自行查看NES APU部分源码修复音频。工程都是简陋版,比如控制和菜单显示都是随便弄的。所以比较丑。
	游戏没算过多少FPS。在800*480的屏幕上流畅运行,感觉有40-50FPS吧。
	
	需要移植的要注意以下几点地方:
	1.游戏进入。挂载文件系统后,可以直接使用NES.c文件里的uint8_t NES_init( const char* fname )函数。传入nes游戏路径即可,
		比如NES_init("0:rxgd.nes");
	2.ROM加载。因为STM32H750只有不到1M的RAM。所以使用了外部SDRAM做内存。
	   该工程是将游戏的ROM数据存放到了外部SDRAM的地址。
	 ![在这里插入图片描述](https://img-blog.csdnimg.cn/1fe20c9bc1b7432891360bc702d0c2d7.png#pic_center)
	  从以上代码可以看出最重要的是rom.lp这个指针。代码会将游戏文件数据全部存到SDRAM里。然后rom.lp直接指向该地址。
	  如果要移植的话,需要给一个足够大的RAM空间。部分游戏大小有超过1M的。
	 3.游戏运行。在主程序中周期性调用NES.c文件里的NES_Process();  详细调用请看源码。
	 4.画面显示。NES.c文件里的NES_Process_update(); x,y分别是坐标,temp值为RGB656的数据。
	 5.手柄控制。源码采用PS2手柄的控制,相关资料请自行查找。NES控制代码可以在ps2.c的PS2_Data_Process();函数里查看。
	 	pad.key |= getDataBit(PS2Data[3],7)<<FC_KEY_LEFT;//左键
		pad.key |= getDataBit(PS2Data[3],6)<<FC_KEY_DOWN;//下键
		pad.key |= getDataBit(PS2Data[3],5)<<FC_KEY_RIGHT;//右键
		pad.key |= getDataBit(PS2Data[3],4)<<FC_KEY_UP;//上键
		pad.key |= getDataBit(PS2Data[3],3)<<FC_KEY_START;//START
		pad.key |= getDataBit(PS2Data[3],0)<<FC_KEY_SELECT;//SELECT
		pad.key |= getDataBit(PS2Data[4],7)<<FC_KEY_B;//X
		pad.key |= getDataBit(PS2Data[4],6)<<FC_KEY_A;//A
		pad.key |= getDataBit(PS2Data[4],5)<<FC_KEY_X;//B
		pad.key |= getDataBit(PS2Data[4],4)<<FC_KEY_Y;//Y
		
		pad的值就是NES游戏控制的手柄值。该变量每一个位表示游戏的相应的按键。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值