» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 57 1234
发新话题
打印

[硬件改造] (二楼更新)分享我的怀旧打机环境和一个我做的手柄转接器

15年的时候在家里做了一个怀旧游戏角,把吃灰的NGC/XBOX/PS2和在论坛收的14寸彩监都摆了出来,打算随时都可以坐下来上一发。



后来又陆续添了RGB-FC/FC/SS/SFC,上图是现在的样子。

当时把各类模拟器包括Mame/FC/SFC/MD等等都在XBOX和NGC上装了一遍,但是手柄实在给不了我当初的感觉,更找不回当年用MD6键手柄玩街霸2的回忆。于是就想着做个转接器把SFC手柄和SS手柄接在NGC和XBOX上玩。

经过一番研究和动手,最后居然都实现了。把Arduino和两个开源的项目结合起来,设计了自己的方案,在利用了开源代码的基础上完成了开发。

下面是在调试阶段自己做的试验板子。



功能调试都完成后,在TB打样做了10块PCB,又手工改造了一个SFC的PC转接器的外壳,让它和我的转接器完美匹配。



实际运行的效果,手柄和主机连接上后LED会点亮。



两年前这个转接器就做出来了,但通常像我这样的人都特不爱写文档,直到最近我才把整个项目放到Github上。

大家可以去这个地址参观,里面包含了电路设计和固件的源码,还有些进一步的项目描述:https://github.com/maximaas/RetroPad2Console

手头上现在还有8个当时打样出来的板子(项目主页里有图片),有谁需要我可以免费送。

[ 本帖最后由 only1onely 于 2017-8-16 14:35 编辑 ]
附件: 您所在的用户组无法下载或查看附件


本帖最近评分记录
  • KONAMIX 激骚 +10 最骚 Rated by wap 2017-9-3 11:29
  • yuhui 激骚 +4 最骚 Rated by wap 2017-8-16 15:31
  • rogerwaters 激骚 +3 最骚 Rated by wap 2017-8-16 13:29
  • 就一中年人 激骚 +2 威武! 2017-8-16 10:34
  • SONIC3D 发贴积分 +200 原创内容 2017-8-16 00:43

TOP

另外,最近几个月都在玩FC卡带的改造,做了很多卡带,收获很大,学到了很多的知识。

针对FC的DIY我也单独开了一个项目,把相关的内容都分享了出来。并且把改造的过程和方法都做成了博客,内容我也正在不断更新。

希望这些内容能给感兴趣但之前又没太多知识基础的DIY玩家提供足够的信息,而不用像我一开始一样到处查找和搜集各类资料。

项目地址:https://github.com/maximaas/Famicom-DIY

博客地址:https://maximaas.github.io/blog


说下自己DIY的过程=============================

一、13年的时候知道了Arduino这个东西,然后就买来玩了一下,发现很容易上手,于是就做了遥控小车、监控摄像头、温度探测器等等小项目。在这过程中把Arduino的基本硬件知识、软件编程、常用类库和Eagle电路设计工具都熟悉会用了。

二、而之所以得知然后折腾Arduino却是因为玩百万城的火车模型而起的。入门级的火车是通过轨道电压来调整车速,并且无法实现一个轨道上多辆车的运行和调度。高级的玩法叫DCC,是一套标准规范,定义了各类驱动火车的信号格式,然后通过支持DCC标准的控制器和车头来实现各类复杂的控制。

DCC控制器每个厂家都有相应的产品(百万城也有但是功能简陋),价格也很昂贵。而我等DIY玩家只在乎折腾过程的乐趣,并不在乎最终玩的乐趣,于是我就买了支持DCC的车头,然后自己用Arduino写了一套基于DCC标准的控制逻辑。

入门级火车控制器在铁轨上加载的是恒压的直流电源,而DCC控制器实质是向铁轨输出电压极性不断翻转的交流电,这样就形成了一个方波信号吗,而电压翻转的不同的频率和长度就构成了控制信号,这个交流电首先被送入车头的DCC接收器,将控制信号解析出来形成指令,同时将交流电过滤为直流电驱动车头。我在这个过程中的收获是进一步学习了Arduino的PWM信号及控制、LED屏幕显示、自制电路板的方法、二进制位操作等等,还买了UNO/MEGA/PRO Mini/Micro等多种Arduino板子。

三、现成的Arduino无法满足我了,于是买了ATMEGA8芯片自己做最小Arduino,刷bootloader写firmware。刚好这个时候论坛里有个兄弟改造出了NGC的SDL,我找他改完机就开始在家搞怀旧角,并且开始在家搞怀旧主机,装各种模拟器。然后就想到能不能用Arduino做一个转接器,因为这个时候基于掌握的知识已经知道了以arduino的特性和手柄的原理,我知道想法是肯定可以实现的,问题在于手柄的控制协议。

于是就开始上网各种找资料,SFC和SS手柄的协议有现成的文章,也有很多现成开源的代码,我拿来在Arduino上重构了一下。有难度的是NGC,因为它只用一根数据线实现了类似DCC的方波信号来实现手柄指令的传输,并且在这之前还有手柄握手和配对的过程,其信号的频率是微秒级(同时DCC信号是毫秒级),这就是为什么我找到的开源代码是用汇编实现的,因为必须要做到cycle级的程序控制。为了看懂别人的代码,我就学习了一些汇编,然后边看边查手册的方式来读代码,并移植到我的Arduino代码中进行调试,还买了逻辑分析仪来查看和验证指令信号的对错,最后又对汇编代码做了些改动(我在我的源码里留了必要的注释),然后就成功了。

对XBOX的支持反而来得轻松,因为Usb RetroPad Adapter是支持XBOX的USB的,我把其中XBOX接收信号的代码拿过来修改了一下对应的IO口,然后居然一次调试就成功了。

总结一下,就是需要在动手的过程中才能不断学习到和理解新知识,然后慢慢的做到举一反三。

更新两张当时做的DCC控制器的图片,有点吓人,凑合看。。。



[ 本帖最后由 only1onely 于 2017-8-17 23:45 编辑 ]
附件: 您所在的用户组无法下载或查看附件



TOP

膜拜,好奇楼主从哪搞到的手柄接口焊到板上?外壳也很有感觉


TOP

posted by wap, platform: Firefox
炸裂了,俺最近正在研究MD6键手柄的USB转接器(因为之前买的转接器坏掉了),目前还没折腾出来,LZ能给点启发不。。。。。

TOP

淘宝同款置物架,这小身板你竟然还敢放一台彩监在最上面,我把PS34和360放进去都觉得怕头重脚轻了

TOP

引用:
原帖由 VODKA 于 2017-8-15 23:15 发表
posted by wap, platform: Firefox
炸裂了,俺最近正在研究MD6键手柄的USB转接器(因为之前买的转接器坏掉了),目前还没折腾出来,LZ能给点启发不。。。。。
有任何问题可以随时交流呀,貌似我之前回过你的帖子还给了两个MD手柄协议的链接。

转接器比较难的是目标端,但是MD转USB应该有很多现成的案例。

TOP

引用:
原帖由 咖啡殉 于 2017-8-15 23:12 发表
膜拜,好奇楼主从哪搞到的手柄接口焊到板上?外壳也很有感觉
万能的马云家

TOP

引用:
原帖由 成成 于 2017-8-15 23:18 发表
淘宝同款置物架,这小身板你竟然还敢放一台彩监在最上面,我把PS34和360放进去都觉得怕头重脚轻了
XBOX这个大砖头和PS2在下方当秤砣呢,这架子扛了两年多没任何事,中间还搬过一次家。

TOP

感觉偌大的监视器放在这么个小架子上不太妥。

TOP

posted by wap, platform: 小米 4
引用:
原帖由 @only1onely  于 2017-8-15 23:23 发表
有任何问题可以随时交流呀,貌似我之前回过你的帖子还给了两个MD手柄协议的链接。

转接器比较难的是目标端,但是MD转USB应该有很多现成的案例。
协议清楚了,不过感觉还是复杂,主要是不知道怎么搞出一个hid手柄设备。。。。。

现在准备退一万步,直接用arduino micro把md手柄的输入转换成键盘输出。这样硬件上就不用动脑筋,直接把针脚接入arduinomicro即可。。。。

不过6键手柄的按键扫描比较复杂,暂时还想不出合适的方法,有没有类似的开源项目可以参考的?

TOP

posted by wap, platform: Android
厉害了 支持

TOP

posted by wap, platform: iPhone
引用:
原帖由 @VODKA  于 2017-8-15 23:34 发表
协议清楚了,不过感觉还是复杂,主要是不知道怎么搞出一个hid手柄设备。。。。。

现在准备退一万步,直接用arduino micro把md手柄的输入转换成键盘输出。这样硬件上就不用动脑筋,直接把针脚接入arduinomicro即可。。。。

不过6键手柄的按键扫描比较复杂,暂时还想不出合适的方法,有没有类似的开源项目可以参考的?
用V-USB就可以实现。

Usb Retropad Adapter这个项目可以参考,去看我的项目Readme,References的第四个链接。

TOP

posted by wap, platform: 小米 4
引用:
原帖由 @only1onely  于 2017-8-15 23:40 发表
用VUSB就可以实现。

Usb Retropad Adapter这个项目可以参考,去看我的项目Readme,References的第四个链接。
多谢了,俺之前也知道这个v-usb,不过micro既然自带键盘功能,俺也不想搞那么复杂,准备先弄个简单的出来,再慢慢优化。。。。。

主要还是俺c语言基础几乎为零,只能边翻书边弄,好多程序都看不懂。。。。。

话说你第四个链接点进去貌似没有源代码。。。。。

TOP

posted by wap, platform: iPhone
好久没在怀旧区看到这么有营养的帖了,赞一个

TOP

posted by wap, platform: iPhone
引用:
原帖由 @VODKA  于 2017-8-15 23:53 发表
多谢了,俺之前也知道这个vusb,不过micro既然自带键盘功能,俺也不想搞那么复杂,准备先弄个简单的出来,再慢慢优化。。。。。

主要还是俺c语言基础几乎为零,只能边翻书边弄,好多程序都看不懂。。。。。

话说你第四个链接点进去貌似没有源代码。。。。。
我刚把电脑关了,有源码的,你再仔细找找,我就用了这个项目的xbox usb接口的代码。

另外,c语法本身不难,你如果用arduino来写的话包括编译环境、底层支持、库文件等等都大大简化了编程工作。我当时为了写ngc的接口还自学了一点汇编,在arduino的c代码里嵌asm,只不过不用的时候很快就忘了。

本帖最后由 only1onely 于 2017-8-16 00:09 通过手机版编辑

TOP

 57 1234
发新话题
     
官方公众号及微博