osdinput.c文件里面,主要是这样子设置的:

 input_device_item_add(devinfo, "Bt_B", &joy_buttons[i][0], ITEM_ID_BUTTON1, my_get_state);input_device_item_add(devinfo, "Bt_X", &joy_buttons[i][1], ITEM_ID_BUTTON2, my_get_state);input_device_item_add(devinfo, "Bt_A", &joy_buttons[i][2], ITEM_ID_BUTTON3, my_get_state);input_device_item_add(devinfo, "Bt_Y", &joy_buttons[i][3], ITEM_ID_BUTTON4, my_get_state);input_device_item_add(devinfo, "Bt_L", &joy_buttons[i][4], ITEM_ID_BUTTON5, my_get_state);input_device_item_add(devinfo, "Bt_R", &joy_buttons[i][5], ITEM_ID_BUTTON6, my_get_state);input_device_item_add(devinfo, "Coin", &joy_buttons[i][6], ITEM_ID_BUTTON7, my_get_state);input_device_item_add(devinfo, "Start", &joy_buttons[i][7], ITEM_ID_BUTTON8, my_get_state);input_device_item_add(devinfo, "X Axis", &joy_axis[i][0], ITEM_ID_XAXIS, my_axis_get_state);input_device_item_add(devinfo, "Y Axis", &joy_axis[i][1], ITEM_ID_YAXIS, my_axis_get_state);input_device_item_add(devinfo, "D-Pad Up", &joy_hats[i][0],(input_item_id)( ITEM_ID_HAT1UP+i*4), my_get_state);input_device_item_add(devinfo, "D-Pad Down", &joy_hats[i][1],(input_item_id)( ITEM_ID_HAT1DOWN+i*4), my_get_state);input_device_item_add(devinfo, "D-Pad Left", &joy_hats[i][2], (input_item_id)(ITEM_ID_HAT1LEFT+i*4), my_get_state);input_device_item_add(devinfo, "D-Pad Right", &joy_hats[i][3], (input_item_id)(ITEM_ID_HAT1RIGHT+i*4), my_get_state);

这里注册设备,然后对应的名字,以及这个对应的从哪个数组里面拿数值。

static INT32 my_get_state(void *device_internal, void *item_internal)
{UINT8 *keystate = (UINT8 *)item_internal;return *keystate;
}

这个方法,是模拟器内部调用,我们只需要改动前面的值就可以了。、
我们使用的地方:
droid_ios_poll_input
这里面,是上层的按钮按下,弹起,会将这里面的一些数组改,主要是按下:0x80,弹起0x0
通过这两个值,模拟器会得到一次按下,然后驱动模拟器内部运行。

void droid_ios_poll_input(running_machine *machine)
{    my_poll_ports(machine);long _pad_status = joystick_read(0);netplay_t *handle = netplay_get_handle();int netplay = handle->has_connection && handle->has_begun_game;if(mystate == STATE_NORMAL){keyboard_state[KEY_1] = 0;keyboard_state[KEY_2] = 0;if(myosd_exitGame || handle->state.ext & NP_EXIT || handle->peer_state.ext & NP_EXIT){if(netplay){if(myosd_in_menu){if(handle->state.ext & NP_EXIT || handle->peer_state.ext & NP_EXIT){keyboard_state[KEY_ESCAPE] = 0x80;myosd_ext_status &= ~ NP_EXIT;}else{myosd_ext_status |= NP_EXIT;}}else{handle->has_connection = 0;handle->has_begun_game = 0;keyboard_state[KEY_ESCAPE] = 0x80;}}else{handle->has_begun_game = 0;//ensure for auto disconnect keyboard_state[KEY_ESCAPE] = 0x80;}myosd_exitGame = 0;handle->state.ext &= ~ NP_EXIT;handle->peer_state.ext &= ~ NP_EXIT;}else{keyboard_state[KEY_ESCAPE] = 0;if(myosd_reset_filter==1){myosd_exitGame= 1;}}if(myosd_service && !myosd_in_menu && !netplay){keyboard_state[KEY_SERVICE] = 0x80;myosd_service = 0;}else{keyboard_state[KEY_SERVICE] = 0;}keyboard_state[KEY_LOAD] =  0;keyboard_state[KEY_SAVE] =  0;if(myosd_savestate || handle->state.ext & NP_SAVE || handle->peer_state.ext & NP_SAVE){if(netplay){if(handle->state.ext & NP_SAVE || handle->peer_state.ext & NP_SAVE){keyboard_state[KEY_SAVE] =  0x80;mystate = STATE_LOADSAVE;myosd_ext_status &= ~ NP_SAVE;}else{myosd_ext_status |= NP_SAVE;}}else{keyboard_state[KEY_SAVE] =  0x80;mystate = STATE_LOADSAVE;}handle->state.ext &= ~ NP_SAVE;handle->peer_state.ext &= ~ NP_SAVE;myosd_savestate = 0;myosd_fs_counter = 60 * 5;return;}if(myosd_loadstate || handle->state.ext & NP_LOAD || handle->peer_state.ext & NP_LOAD){if(netplay){if(handle->state.ext & NP_LOAD || handle->peer_state.ext & NP_LOAD){keyboard_state[KEY_LOAD] =  0x80;mystate = STATE_LOADSAVE;myosd_ext_status &= ~ NP_LOAD;}else{myosd_ext_status |= NP_LOAD;}}else{keyboard_state[KEY_LOAD] =  0x80;mystate = STATE_LOADSAVE;}handle->state.ext &= ~ NP_LOAD;handle->peer_state.ext &= ~ NP_LOAD;myosd_loadstate = 0;myosd_fs_counter = 60 * 5;return;}for(int i=0; i<4; i++){if(i!=0  && myosd_in_menu==1 && myosd_num_of_joys <=1)//to avoid mapping issues when pxasp1 is activebreak;_pad_status = joystick_read(i);if(i==0){if(!myosd_inGame && !myosd_in_menu){keyboard_state[KEY_PGUP] = ((_pad_status & MYOSD_LEFT) != 0) ? 0x80 : 0;keyboard_state[KEY_PGDN] = ((_pad_status & MYOSD_RIGHT) != 0) ? 0x80 : 0;}else{keyboard_state[KEY_PGUP] = 0;keyboard_state[KEY_PGDN] = 0;}if((_pad_status & MYOSD_START /*& MYOSD_SELECT*/)  &&  (_pad_status /*& MYOSD_A*/ & MYOSD_L1) && myosd_saveload_combo){myosd_savestate = 1;break;}if((_pad_status /*& MYOSD_SELECT*/ & MYOSD_START)  &&  (_pad_status /*& MYOSD_A*/ & MYOSD_R1) && myosd_saveload_combo){myosd_loadstate = 1;break;}}// lo cambio de 0 a i...if(joystick_read_analog(i, 'x') == 0 && joystick_read_analog(i, 'y')==0){joy_hats[i][0] = ((_pad_status & MYOSD_UP) != 0) ? 0x80 : 0;joy_hats[i][1] = ((_pad_status & MYOSD_DOWN) != 0) ? 0x80 : 0;joy_hats[i][2] = ((_pad_status & MYOSD_LEFT) != 0) ? 0x80 : 0;joy_hats[i][3] = ((_pad_status & MYOSD_RIGHT) != 0) ? 0x80 : 0;joy_axis[i][0] = 0;joy_axis[i][1] = 0;lightgun_axis[i][0] = (int)(lightgun_x[myosd_pxasp1 ? 0 : i] *  32767 *  2 );lightgun_axis[i][1] = (int)(lightgun_y[myosd_pxasp1 ? 0 : i] *  32767 * -2 );}else{joy_axis[i][0] = (int)(joystick_read_analog(i, 'x') *  32767 *  2 );joy_axis[i][1] = (int)(joystick_read_analog(i, 'y') *  32767 * -2 );joy_hats[i][0] = 0;joy_hats[i][1] = 0;joy_hats[i][2] = 0;joy_hats[i][3] = 0;lightgun_x[i] = 0;                              lightgun_y[i] = 0;                              lightgun_axis[i][0] = 0;lightgun_axis[i][1] = 0;}if(myosd_inGame && !myosd_in_menu && myosd_autofire && !netplay){old_B_pressed[i] = B_pressed[i];B_pressed[i] = _pad_status & MYOSD_B;if(!old_B_pressed[i] && B_pressed[i]){enabled_autofire[i] = !enabled_autofire[i];}}elseenabled_autofire[i] = false;if(enabled_autofire[i])//AUTOFIRE{int value  = 0;switch (myosd_autofire) {case 1: value = 1;break;case 2: value = 2;break;case 3: value = 4; break;case 4: value = 6; break;case 5: value = 8; break;case 6: value = 10; break;case 7: value = 13; break;case 8: value = 16; break;case 9: value = 20; break;default:value = 6; break;break;}joy_buttons[i][0] = fire[i]++ >=value ? 0x80 : 0;if(fire[ i] >= value*2)fire[ i] = 0;}elsejoy_buttons[i][0]  = ((_pad_status & MYOSD_B) != 0) ? 0x80 : 0;joy_buttons[i][1]  = ((_pad_status & MYOSD_X) != 0) ? 0x80 : 0;joy_buttons[i][2]  = ((_pad_status & MYOSD_A) != 0) ? 0x80 : 0;joy_buttons[i][3]  = ((_pad_status & MYOSD_Y) != 0) ? 0x80 : 0;joy_buttons[i][4]  = ((_pad_status & MYOSD_L1) != 0) ? 0x80 : 0;joy_buttons[i][5]  = ((_pad_status & MYOSD_R1) != 0) ? 0x80 : 0;if(i!=0  && (myosd_num_of_joys==1 || myosd_num_of_joys==0) && !netplay)continue;joy_buttons[i][6]  = ((_pad_status & MYOSD_SELECT ) != 0) ? 0x80 : 0;joy_buttons[i][7]  = ((_pad_status & MYOSD_START  ) != 0) ? 0x80 : 0;}}else if(mystate == STATE_LOADSAVE){keyboard_state[KEY_ESCAPE] = 0;keyboard_state[KEY_1] = 0;keyboard_state[KEY_2] = 0;if(myosd_exitGame || handle->state.ext & NP_EXIT || handle->peer_state.ext & NP_EXIT){if(netplay){if(handle->state.ext & NP_EXIT || handle->peer_state.ext & NP_EXIT){keyboard_state[KEY_ESCAPE] = 0x80;mystate = STATE_NORMAL;myosd_ext_status &= ~ NP_EXIT;}else{myosd_ext_status |= NP_EXIT;}}else{keyboard_state[KEY_ESCAPE] = 0x80;mystate = STATE_NORMAL;}myosd_exitGame = 0;handle->state.ext &= ~ NP_EXIT;handle->peer_state.ext &= ~ NP_EXIT;}if ((_pad_status & MYOSD_B) != 0){keyboard_state[KEY_1] = 0x80;mystate = STATE_NORMAL;do{}while(myosd_joystick_read(0) & MYOSD_B);}if ((_pad_status & MYOSD_X) != 0){keyboard_state[KEY_2] = 0x80;mystate = STATE_NORMAL;do{}while(myosd_joystick_read(0) & MYOSD_X);}}else {/*???*/}
}

我们改动主要是这里,配合着上层java,完成对打。同时这块还可以设置热键,组合键。

mame模拟器添加按键实现相关推荐

  1. macOS 下玩原生MAME 模拟器

    macOS 下玩原生MAME 模拟器 前言 OpenEmu虽好,但经常需要用组合键放大招时却失灵,很是令人不爽,于是便有了使用原生MAME的想法 安装MAME 官方主页https://www.mame ...

  2. android模拟器游戏按键映射,刺激战场模拟器按键映射对比 逍遥安卓模拟器智能按键最好...

    原标题:刺激战场模拟器按键映射对比 逍遥安卓模拟器智能按键最好 绝地求生手游刺激战场模拟器现在有好多款,基本上每款模拟器都说自己是最好用的,绝大部分用户并不知道哪个刺激战场模拟器好,也没有时间和兴趣一 ...

  3. Android Studio 中 为模拟器添加图片和图片路径(图文级教程)

    需求:为android 模拟器添加图片,供编程测试 系统:Android 11.0 模板/框架:- 环境:- 语言:Java 近来要做个发彩信的测试,本以为是很简单的过程,代码写好了,却发现模拟器中没 ...

  4. android定制化软件修改或添加按键驱动的核心操作步骤讲解

    最近在Amlogic方案的定制化android软件上,做了添加按键的驱动工作,也熟悉了按键的基本流程,现在把核心步骤给总结如下: 1.基本流程: ./表示android源代码目录,按键属于输入设备,支 ...

  5. mame模拟器能设置中文吗?mame模拟器更换语言

    mame模拟器最新中文版全面支持CPS1.CPS2.NEOGEO等几十种机型,5000多个街机游戏,是款针对大型电玩游戏所打造的游戏模拟器.那要怎么把英文界面设置成中文呢? mame模拟器怎么设置中文 ...

  6. 如何向Android Studio的手机模拟器添加视频音频文件

    今天写android,一个视频播放器需要向模拟器添加文件才能调试啊,所以我就找了添加文件的办法. 在模拟器打开的时候,点击android studio工具栏的android device monito ...

  7. MAME模拟器debug帮助文档汉化一(介绍)

    介绍 MAME是一个交互式仿真系统的调式器,用于调试或开发老式系统的仿真工具.可以用来创建作弊,HACKROM,或者研究软件的工作原理. 用-debug参数可以激活自带的调试器.默认设置中,用键盘的& ...

  8. Android模拟器AVD接收电脑键盘和模拟器物理按键输入

    最近一直在做Android开发,由于心疼自己的手机,总是用模拟器进行开发,可是发现一个问题就是AVD无法接收电脑键盘和AVD物理按键输入,只能使用软键盘,总是用鼠标点,真心的疼,后来发现是因为新的AD ...

  9. ios 模拟器添加经纬度_iOS 微信双开来了,但我不建议你使用

    众所周知,iOS 上的微信无法双开,一些通过越狱或者非官方版本的微信非常容易被封号.最近安卓上很火的双开助手推出了 iOS 版可以实现微信双开,但经过我的实际体验,我强烈不建议大家使用.首先这款「双开 ...

最新文章

  1. Python 网络服务相关 杂记
  2. kernel笔记——块I/O
  3. 如何用指针访问opencv cv::Mat数据?ptr<uchar>()
  4. Essential fact about future of PhD studies
  5. 阿里云CentOS7.3搭建多用户私有git服务器(从安装git开始)
  6. MATLAB 中RMSE和MAPE的计算方法
  7. matlab与maple互联,Matlab,Maple和Mathematica三款主流科学计算软件的互操作
  8. 字符url编码_HTML URL编码字符参考
  9. 大数据分析机器学习(二)之直方图和多元线性回归
  10. 网易如何做新闻推荐:深度学习排序系统及模型
  11. mysql时区问题解决方案
  12. Android Multimedia框架总结(十四)Camera框架初识及自定义相机案例
  13. gis 联合 融合_GIS空间数据融合方法
  14. DIV+CSS布局-PxCook工具的简单使用
  15. cisco服务器桌面命令行窗口,WLC调试和显示命令
  16. 傻码农嘚瑟啥,HR才是国内公司真正的中流砥柱!
  17. 照片损坏只显示一半怎么修复?
  18. 游戏里面的英雄是怎么做的?
  19. The file contains a character that cannot be represented in the current code page.c1070
  20. 深入浅出学算法007-统计求和

热门文章

  1. 最长的英文单词十大排行榜
  2. 《Hadoop》之踽踽独行(一)大数据概述
  3. 【spring】spring异步执行的使用与源码分析
  4. IDEA连接数据库出现the server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents more than one time
  5. 不受更新影响的微信PC客户端N开补丁
  6. graylog+kafka+zookeeper(单机测试及源码),kafka+zookeeper组件部署(二)
  7. AcWing 342. 道路与航线 (双端队列广搜问题,SPFA)
  8. 【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 场景中添加 FBX 模型 | 3D 物体渲染 | 3D 物体材质设置 )
  9. 云服务器系统一键安装,一键安装服务器系统
  10. 微信新版本(6.6.7)功能设计背后的逻辑及需求