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

本文主要是介绍【(首发)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;//STARTpad.key |= getDataBit(PS2Data[3],0)<<FC_KEY_SELECT;//SELECTpad.key |= getDataBit(PS2Data[4],7)<<FC_KEY_B;//Xpad.key |= getDataBit(PS2Data[4],6)<<FC_KEY_A;//Apad.key |= getDataBit(PS2Data[4],5)<<FC_KEY_X;//Bpad.key |= getDataBit(PS2Data[4],4)<<FC_KEY_Y;//Ypad的值就是NES游戏控制的手柄值。该变量每一个位表示游戏的相应的按键。

这篇关于【(首发)H750NES模拟器,支持上百个映射器,读档存档金手指。支持重装机兵吞食天地等游戏】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/388969

相关文章

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

sqlite不支持中文排序,采用java排序

方式一 不支持含有重复字段进行排序 /*** sqlite不支持中文排序,改用java排序* 根据指定的对象属性字段,排序对象集合,顺序* @param list* @param field* @return*/public static List sortListByField(List<?> list,String field){List temp = new ArrayList(

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬

第四次北漂----挣个独立游戏的素材钱

第四次北漂,在智联招聘上,有个小公司主动和我联系。面试了下,决定入职了,osg/osgearth的。月薪两万一。 大跌眼镜的是,我入职后,第一天的工作内容就是接手他的工作,三天后他就离职了。 我之所以考虑入职,是因为 1,该公司有恒歌科技的freex平台源码,可以学学,对以前不懂的解解惑。 2,挣点素材钱,看看张亮002的视频,他用了6000多,在虚幻商城买的吸血鬼游戏相关的素材,可以玩两年。我

Science Robotics 首尔国立大学研究团队推出BBEX外骨骼,实现多维力量支持!

重复性举起物体可能会对脊柱和背部肌肉造成损伤,由此引发的腰椎损伤是工业环境等工作场所中一个普遍且令人关注的问题。为了减轻这类伤害,有研究人员已经研发出在举起任务中为工人提供辅助的背部支撑装置。然而,现有的这类装置通常无法在非对称性的举重过程中提供多维度的力量支持。此外,针对整个人体脊柱的设备安全性验证也一直是一个缺失的环节。 据探索前沿科技边界,传递前沿科技成果的X-robot投稿,来自首尔国立

nyoj 1038 纸牌游戏

poj 的一道改编题,说是翻译题更恰当,因为只是小幅度改动。 一道模拟题,代码掌控能力比较好,思维逻辑清晰的话就能AC。 代码如下: #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{char c[5];int rk;char da[5];int nu

Android模拟器的检测

Android模拟器的检测 需求:最近有一个需求,要检测出模拟器,防止恶意刷流量刷注册。 1.基于特征属性来检测模拟器,比如IMSI,IDS,特殊文件等等。 这个方案局限性太大,貌似现在大部分模拟器默认就是修改了的,还不需要人为的去修改。 经过测试,发现如下图所示。 如果是模拟器的话,这些特殊值应该返回true,比如DeviceIDS,Build。可是居然返回了false,说明特殊值