移植移植infoNES模拟器到嵌入式linux上,并增加支持声音输出和按键

代码放在了github上。

https://github.com/yongzhena/infoNES

先来个效果截图:

按键驱动源码:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <asm/uaccess.h>
#include <asm/irq.h>
#include <asm/io.h>
#include <linux/device.h>
#include <../arch/arm/mach-mx28/mx28_pins.h>
#include "gpio.h"static struct class *joypad_drv_class;/*** FC手柄 bit 键位对应关系 真实手柄中有一个定时器,处理 连A  连B * 0  1   2       3       4    5      6     7* A  B   Select  Start  Up   Down   Left  Right
*/
static ssize_t joypad_drv_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
{//利用 sszie_t 返回 手柄键值 //buf 是有符号无法保存 8 bitint i;ssize_t val = 0;if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_SSP0_DATA6))){//printk(KERN_INFO "key1 pressed!\n");val = 1<<0; //A}else{//printk(KERN_INFO "no key pressed!\n");}if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_SSP0_DATA5))){//printk(KERN_INFO "key2 pressed!\n");val = 1<<6;//LEFT}if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_SSP0_DATA4))){//printk(KERN_INFO "key3 pressed!\n");val = 1<<3;//start}if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_LCD_D18))){//printk(KERN_INFO "key4 pressed!\n");val = 1<<7;//RIGHT}if(!gpio_get_value(MXS_PIN_TO_GPIO(PINID_LCD_D17))){//printk(KERN_INFO "key5 pressed!\n");val = 1<<5;//UP}return val;
}
static struct file_operations joypad_drv_fops = {.owner  =   THIS_MODULE,.read   =   joypad_drv_read,
};int major;
//注册驱动程序
int joypad_drv_init(void)
{printk(KERN_INFO "joypad_drv_init\n");major = register_chrdev(0, "joypad_drv", &joypad_drv_fops);//自动创建 dev 节点joypad_drv_class = class_create(THIS_MODULE, "joypad_drv");device_create(joypad_drv_class, NULL, MKDEV(major, 0), NULL, "joypad");//P3.26 PINID_SAIF1_SDATA0配置为输入gpio_direction_input(MXS_PIN_TO_GPIO(PINID_SAIF1_SDATA0));gpio_direction_input(MXS_PIN_TO_GPIO(PINID_LCD_D17));gpio_direction_input(MXS_PIN_TO_GPIO(PINID_LCD_D18));gpio_direction_input(MXS_PIN_TO_GPIO(PINID_SSP0_DATA4));gpio_direction_input(MXS_PIN_TO_GPIO(PINID_SSP0_DATA5));gpio_direction_input(MXS_PIN_TO_GPIO(PINID_SSP0_DATA6));return 0;
}//卸载驱动程序
void joypad_drv_exit(void)
{printk(KERN_INFO "joypad_drv_exit\n");unregister_chrdev(major, "joypad_drv");device_destroy(joypad_drv_class, MKDEV(major, 0));class_destroy(joypad_drv_class);
}module_init(joypad_drv_init);
module_exit(joypad_drv_exit);
MODULE_LICENSE("GPL");

编译驱动为joypad.ko的makefile:

KERN_DIR = /mnt/hgfs/b503/imax283/linux-2.6.35.3all:make -C $(KERN_DIR) M=`pwd` modules clean:make -C $(KERN_DIR) M=`pwd` modules cleanrm -rf modules.orderobj-m  += joypad.o

加载驱动的方法:

insmod joypad.ko

卸载驱动方法:

rmmod joypad.ko

移植InfoNES到imx6ull(一) | 码农家园

单片机---HLK-W801移植Nes模拟器(一)_胖哥王老师的博客-CSDN博客_nes模拟器源码

玩转easyARM imax283A开发版(二),移植NES模拟器并增加按键驱动,让板子可以玩超级玛丽游戏相关推荐

  1. 单片机开发---ESP32S3移植NES模拟器(二)

    书接上文 <单片机开发-ESP32-S3模块上手> <单片机开发-ESP32S3移植lvgl+触摸屏> <单片机开发-ESP32S3移植NES模拟器(一)> 暖场视 ...

  2. f429 discovery开发版 LVGL移植(带操作系统)

    文章标题 准备 STM32F429I-DISC1 开发版 CUBEMX 工具 移植 CUBEMX生成基础代码 FREERTOS 时钟树 生成 LVGL库移植 LVGL 驱动 触摸屏 显示 触摸 导入k ...

  3. python开发pc软件_程序员带你十天快速入门Python,玩转电脑软件开发(二)

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  4. python做电脑软件-程序员带你十天快速入门Python,玩转电脑软件开发(二)

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  5. 单片机开发---ESP32S3移植NES模拟器(一)

    书接上文 <单片机开发-ESP32-S3模块上手> <单片机开发-ESP32S3移植lvgl+触摸屏> 参考内容 依旧是参考韦东山老师的作品来移植的 <ESP32|爷青回 ...

  6. 基于鸿蒙操作系统移植,基于鸿蒙OS的按键驱动

    按键作为常用的输入系统,如何准确并高效的获取按键值,是一个经常要面对的问题,今天我们看看在鸿蒙系统中,如何得到独立按键的按键值. 实现目标 我们这次以Hi3861核心板左下角的USER按键S2为例,当 ...

  7. 天嵌开发版 imx6 移植qt

    1.环境说明 QT 移植 - 系统: ubuntu 14.04 x64 - 编译器: arm-none-linux-gnueabi-gcc 4.8.3 - QT 5.5.1 2.下载源码 - 下载交叉 ...

  8. 玩一玩微信公众号开发(二) 管理凭据和自定义菜单

    管理access_token access_token介绍 在前面我们成功的使用了Spring Boot Web程序和微信对接.但是这仅仅是一个开始,我们还需要获取access_token,也就是凭据 ...

  9. android 开源fc模拟器_战舰开发板触摸屏运行NES模拟器

    本帖最后由 xcc521 于 2019-4-3 23:14 编辑 先上图 ScreenCut003.png (8.39 KB, 下载次数: 0) 2019-4-1 00:58 上传 ScreenCut ...

  10. debian 开发版 移植_那些PC市场里取得成功的游戏,却在移植手游时吃瘪了

    <使命召唤手游>国际服于10月1号正式上线,5天内收获3500万下载量.就在所有人惊叹于<使命召唤>IP号召力与天美强大研发实力的同时,这股热潮却与中国玩家无关. 望穿秋水的不 ...

最新文章

  1. 一步一步学习Bootstrap系列--表单布局
  2. svn 服务器的搭建以及客户端的使用
  3. eclipse上的.properties文件中文编辑显示问题
  4. 洛谷P5300 与或和(全1子矩阵/单调栈)
  5. win2008 401 - 未授权: 由于凭据无效,访问被拒绝。解决方法
  6. 3-12岁经典必读书
  7. 如何在微软的下载商店找到下载的图片?
  8. 51单片机通过WIFI模块ESP8266控制LED灯(大致内容,经过测试成功实现)
  9. 运动会加油稿计算机学院150字,学校运动会加油稿150字
  10. 什么是cpu?(基础篇)
  11. Mathematica 取整函数
  12. 1138: C语言合法标识符 C语言
  13. 关于高版本web3j调用okhttp3.RequestBody.create(Ljava/lang/String;Lokhttp3/MediaType;)Lokhttp3/RequestBody异常
  14. GVM 提The SCAP database is required
  15. 预测和评价----学习反馈
  16. 【云栖大会】国家天文台结盟阿里云:计算100亿光年的数字宇宙
  17. 计算机网络配置RIP路由协议,动态路由协议RIP配置,带你一分钟学会
  18. 中国SSD产业突围有多难?除了技术“瓶颈”还有哪里挑战?
  19. 无人便利店代理的系统用于其他行业是否可以
  20. 【Web技术】959- JavaScript 如何在线解压 ZIP 文件?

热门文章

  1. DFI(Deep/DynamicFlow Inspection,深度/动态流检测)
  2. CSAPP第六章家庭作业(原书第二版)
  3. Android桌面插件系列
  4. ​独家 | 为什么程序员不应该长期留在一家公司?
  5. html中空格符号以及空格字符实体的总结
  6. 计算机科学与技术要求具备的能力,计算机科学与技术专业毕业要求
  7. 微信聊天记录里的文件又失效了?试试这个文件同步开源项目吧
  8. 如何在 Python 中异步操作数据库?aiomysql、asyncpg、aioredis 使用介绍
  9. [教程] 写号+上3G成功,附个人经验补充,写号看此一贴即可,二楼附上radio恢复方法和recovery (来源于http://www.in189.com/thread-94957-1-1.htm)
  10. 网页游戏防外挂策略。