另外,最近几个月都在玩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 编辑 ]