IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> NES模拟器[H_NES] -> 正文阅读

[嵌入式]NES模拟器[H_NES]

最近一直在NESdev里翻山越岭,搞出了一个NES模拟器

虽然NESdev资料全,但它一点都不适合用来学习,更适合用来查阅,我能成功写出这个模拟器很大程度上得益于https://www.jianshu.com/nb/44676155能更好的理解PPU

这个模拟器的代码全部由C编写,想移植到哪就移植到哪

特性

  1. 多制式支持(NTSC PAL )

  2. 拥有存档,加载存档功能

  3. 较为深入的模拟精度(PPU每渲染8个像素就执行CPU运算)

  4. 较高精度的音频输出,由于APU的一些特性,输出的音频样本要达到1.79MHz(NTSC制式下的CPU频率)才能完美模拟输出的音频波形。

但实际上很难找到那么高采样率的DAC,H_NES将渲染音频的采样率只有CPU频率的1/4(即使是这样,也只对某些分频(APU配置)下的高频信号有影响),300多KHz。实际输出还需要对些样本等间隔抽样(H_NES有个配置项可以配置)

  1. APU模拟的一些改动

5.1.APU的硬件缺陷修复,实机的API三角波通道的相位是无法控制的,这会造成使用三角波通道是可能会出现爆音问题(劈里啪啦声),例如《淘金者》的标题界面就有明显的爆音现象,但这在H_NES上不会出现。
5.2.DMC模拟去掉了8Bit的读取缓冲区,使得样本数据读操作提前被进行。

实例地址

链接: https://gitee.com/H0x9DEFA478/H_NES

提供了一个在STM32H750VBT上运行的实例,得益于其优秀的性能,H_NES得以全速运行(60FPS,开启音频渲染,CPU占用率基本在80%以下,如果游戏ROM在SRAM中的话能更快)

  1. 通过串口输出运行信息和传入手柄按键信息

  2. 提供一个串口上位机,发送按键信息(目前仅支持1P),显示单片机发来的信息。

  3. SPI串口屏显示,ST7789v的240x320的屏幕。极限满屏刷新达70+FPS(在80MHz下的SCK频率) ,完全可达NES渲染需要。

  4. SAI输出IIS音频信号,接入解码芯片即可出声

由于想快速测试,写得比较匆忙,SAI输出的是标准44100Hz的音频,但H_NES的音频采样率分频只能是整数(使用了10分频) 这会造成速度略微有些差别,但这可以微调PLL得到修正

实例用法

硬件连接

  1. 串口

PA9,PA10------------------串口

  1. 音频输出

PE11,PE12,PE13,PE14-------SAI2(至于怎么连CubeMX点一下就知道了)

  1. 显示屏(ST7789v 240x320) 有些模组把CS阉割掉了(接地),但CS对同步主时钟有帮助,即使受到干扰,但干扰不会传递到下一帧(下一次CS选通)。对于高帧率应用,CS线很有必要

PB3-----------------------SPI1_SCK (最好串个100R电阻)

PD7-----------------------SPI1_MOSI (最好串个100R电阻)

PD6-----------------------RES

PD5-----------------------DC

PA15----------------------CS

PB4-----------------------背光

  1. SPIFlash(存游戏必备) 建议W25q128jvsiq的(128以下的,速度能133MHz的) 如果是256的,读取时会多花若干个时钟来传递地址(我才不会说我的下载算法没有支持这个)

PB2-----------------------Flash1_SCK,Flash2_SCK

PE7-----------------------Flash2_IO0

PE8-----------------------Flash2_IO1

PE9-----------------------Flash2_IO2

PE10----------------------Flash2_IO3

PD11----------------------Flash1_IO0

PD12----------------------Flash1_IO1

PE2-----------------------Flash1_IO2

PD13----------------------Flash1_IO3

PB6-----------------------Flash1_CS,Flash2_CS

双Flash, 速度更快。这个实例将以120MHz的时钟访问Flash

食用方法

  1. 预先将Example\Bootloader下的文件下载到H750的内部Flash中

  2. 想玩的游戏通过Example\多文件合并.exe 合并成一个.bin文件(其实就是加了文件大小,便于搜索,实际上H_NES只识别数组)

  3. Example\STlinkUtility下载算法\ 下的文件复制到 STlinkUtility或者STM32CubeProgrammer安装目录下的ExternalLoader文件夹中

  4. 打开STlinkUtility或者STM32CubeProgrammer,加载下载算法,把前面生成的.bin文件下载到0x90040000中
    在这里插入图片描述
    然后就和烧录程序一样,只需要注意地址为0x90040000即可

  5. Example\MDK下载算法\ 下的文件放置到 MDK安装目录\ARM\Flash\ 中

  6. 打开 Example\STM32H750VB_NES 下载程序
    在这里插入图片描述
    下载程序时注意下载算法的配置

  7. 打开 Example\串口手柄\ 下的上位机,左下角的输入框是按键输入,W-上 A-左 S-下 D-右 K-B L-A

在这里插入图片描述

这是由我写的一个串口助手修改而来的上位机,左下角(图片中标为4)进入输入状态之后,就可以使用电脑键盘发送键值了,图片中1右边的按键发送保存存档指令,2旁边的按键发送加载存档命令,3下面的按键发送获取堆栈信息的指令,发送指令后单片机将返回堆栈状态,CPU占用率等信息。

发送: 空格FN-下一个游戏 空格FS-保存存档 空格FL-加载存档

如果想移植核心代码到自己的硬件上运行

如果想自己移植,Example\STM32H750VB_NES\Code\H_NES为NES相关的代码,移植时只提取其中的代码即可,其下的H_NES.h包含接口声明和注释,使用时仅需include其即可。H_NES\LL下有个配置头文件,用户可以按需配置,且H_NES\API下有个默认配置头文件,其中有各个配置选项的说明

Example\STM32H750VB_NES\Code\nes.c为底层接口实现(这个文件比较混乱),可以作为移植的例子

运行的一些照片

保密画质(设备太拉)
请添加图片描述

请添加图片描述

请添加图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:45:28  更:2022-03-10 22:45:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:47:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码