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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 单片机---HLK-W801移植Nes模拟器(一) -> 正文阅读

[嵌入式]单片机---HLK-W801移植Nes模拟器(一)

背景介绍

年关将至,不过学习的脚步不能停,最近在着手研究一个能在单片机上运行的Nes模拟器,就是我们小时候常玩的红白机。
在这里插入图片描述

参考了网上的各位高手的文档,发现STM32上的居多,但是要能够存储和运行Nes模拟器,对rom和ram的要求,相对来说还是高一些,手中的103FC8T6目前还不能用,因为存不下也运行不起来。
不过还是被我发现了一个绝世高手的文章,最终运行ram居然只需要30多Kb,2013年的文章,这个真是不服不行。
在这里插入图片描述

传送至大佬文章

所以准备试一下前一阵买的HLK801,毕竟这个主频和存储,都没大问题。
开搞!!

代码准备

LCD驱动

目前是采用了之前用过的SPI总线的LCD,驱动芯片是ili9341。这块就不细说了,就是初始化SPI总线,然后按照手册读写。

模拟器源码

源码可以从大佬的文章中下载下来使用。
在这里插入图片描述
在这里插入图片描述

环境准备

开发环境搭建参考前面的文章《单片机—HLK-W801开发环境搭建》,还是采用了默认的SDK程序包,然后将nes模拟器的代码,添加到app路径下。

然后,将我们之前用到的ili9341的LCD显示屏也一并移植过来,放在同级目录,这里目前只需要实现一个描点画图即可,最后的图像显示,就是通过描点的方式显示出来的。

整体结构如下
在这里插入图片描述

漫漫征途

接下来就是开始漫长的编译,解决问题过程了。
在这里插入图片描述

首先添加必要的头文件链接路径
在这里插入图片描述
然后将lcd的头文件包含在info_nes.h中。最后main包含info_nes.h就可以调用nes的函数和lcd的函数了。
主函数书写如下

void UserMain(void)
{
	printf("lcd init \n");
	lcd_init();

	printf("start malloc \n");

	if(0!=InfoNES_Load(NULL))
	{
		printf("InfoNES_Load fail \n");
	}
	else
	{ 
		printf("InfoNES_Load success \n");
		InfoNES_Main();
	}
}

开始编译起来吧。
在这里插入图片描述

mapper包含编译问题

在这里插入图片描述
我们在mapper.c中包含了一系列的nes提供的mapper文件,但是在编译的时候,回去自动重新单独编译这些cpp文件,这与我们本来打算只编译InfoNES_Mapper.c的初衷是违背的,所以这里就选择了一种方式,将其cpp都改为头文件,然后就不再编译了。
重命名两百个文件,采用了bat脚本方式
在这里插入图片描述
放在mapper路径下,双击执行即可。
然后把所有包含的名称也对应修改即可。
在这里插入图片描述
然后重新删除nes路径,再添加到工程中。
在这里插入图片描述

图像显示

代码中的显示方式为逐行扫描,每行更新,所以这里只修改行显示

void InfoNES_LoadLine()
{
  int i;
  if(PPU_Scanline == 0)
  {
	FrameCount++;
	InfoNES_LoadFrame();
  }
  
  for(i=0;i<240;i++)
  {
  		ILI9341_DrawPoint(i,PPU_Scanline,WorkLine[i]); 
		//lcd_ili932x_pixel_draw_step2(WorkLine[i]);
		// GrContextForegroundSet(&sContext, WorkLine[i]);
		// GrPixelDraw(&sContext, i, PPU_Scanline);
  }
}

编译成功

在这里插入图片描述
烧写,开测!!!
上来就是黑屏待遇。
在这里插入图片描述
不放弃,正当我在阅读代码的时候,屏幕突然出了图像!!!
在这里插入图片描述
这熟悉的配方,眼泪都要掉下来了。开来启动需要一些时间。
在这里插入图片描述

然后修改一下划线的函数,不过可能是因为这个高低位的问题,这么以修改,速度提高了,但是颜色变了

void ILI9341_DrawLineOne(u16 y,unsigned char* data)
{
	ILI9341_Address_Set(0,y,240,y);//设置光标位置 
	GPIO_DATA();//写数据
	tls_spi_write(data,480);
}

然后提高了一下SPI的速度,这下稍微能看了一点,不过还是很有延迟,再打开了跳帧
在这里插入图片描述
效果如下

在这里插入图片描述

今日总结

今天就做到这里吧。其实这个玩意已经尝试了好几天了,手里的芯片试了一遍,发现只有W801能放得下,然后就是各种内存不足,只好在网上搜索,直到看到那位高手的方法,他的修改已经建立在对这个模拟器相当熟悉的程度上才能做出那种修改。
要学习的东西还很多。
明天再添加按键和尝试提速。

结束语

搞这个东西真的会上瘾,今天中午连饭都没去吃,也没休息,哈哈。
在这里插入图片描述
还有一天就放假了,那么所有的工作
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 12:04:46  更:2022-01-28 12:06:09 
 
开发: 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 10:15:22-

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