一直潜水好久没发帖子了,之前发了个帖子分享过如何用batocera低解输出。但是在之后的日常使用中一直有一个小问题是如鲠在喉如芒刺背,就是机器在运行SFC,MAME等有224P分辨率的游戏时并不能全屏显示,上下会有两道黑边。我自己查询出来的原因是Batocera低解输出需要兼容多种分辨率,640x480i,320x240p,320x224p等等等等,Batocera在低解设定时一般是选择640x480i或者是320x240p为默认分辨率,224p的游戏batocera没法在纵向将其拉升缩放到240p的宽度,只能在240P的行数上显示224P的内容,自然会留下上下黑边。
如下显示画面上下有两个黑边,没法填满屏幕。
当然不同的模拟器核心和batocera提供了一些方法对于这种情况进行调整,但是那些过于繁琐。如果你的CRT有如下图所示的UNDERSCAN按键或者类似的按键,那么就有办法更轻松地解决问题。原理就是在打开UNDERSCAN按钮时,crt会切换到另外一套校准参数,在打开UNDERSCAN按钮的情况下,打开CRT的菜单并同时按下消磁(DEGASUSS)和确认(ENTER)按键进入到服务菜单,然后调整CRT的显示几何等参数,使224P的画面至满屏,然后关闭菜单即可,这样在运行480i/240P的游戏的时候关闭UNDERSCAN按钮,运行224P的游戏时打开按钮即可,不同的分辨率就有对应的不同的显示参数,就能一直保持画面满屏了。
下图红框按钮就是UNDERSCAN打开状态,画面满屏。当然如果有16:9按钮那么,那么在配合UNDERSCAN按钮,就可以搭配出来4套不同的校准过的显示参数,玩法更自由。
小技巧到此结束。
当然来都来了,你要是像我一样看完后觉得这也太麻烦了,每次切换不同的分辨率游戏还都得手动去按按钮。像我一样就是懒得去伸这个手,能不能自动化一点,最好是能自己切换的?答案是当然可以,就是有一丢丢麻烦,弄好了之后就再也不用自己去手动切换了,一切都是自动化的。但是目前我的代码还没完全完工而且不具备通用性,但是整体过程是相通的,就分享下过程跟想法,给感兴趣的动手能力强的小伙伴一个思路。
首先是要确保你的CRT支持外部控制,这个只能具体型号自己网络查询,我只能拿我的举个例子,如下是我查询使用说明书里的介绍,左侧介绍支持的外部控制方式,我选择使用PARALLEL REMOTE的方式,选择这个接口的原因就是可以直接使用网线插进去。右侧则介绍了控制方式的具体办法。这些只能自己去网络上查找自己CRT的具体说明,不具备通用性,除非你的CRT跟我是同型号(PVM14L4)。可以看到想使用哪个功能就把对应型号的线与第五脚接通使其接地就可以打开对应的功能,我们需要的就是第7脚的欠扫描,也就是UNDERSCAN那个按钮,只要将网线的一头插到CRT的控制口,另外一头将网线的第5脚跟第7脚连接就可以打开欠扫描按钮,断开就是关闭欠扫描按钮,我们只要在合适的情况下断开跟链接就可以自动切换两种模式了。
剩下的就是要解决如何识别分辨率跟实现自动切换。
识别分辨率主要依赖Batocera的强大可玩性,Botacera的开发人员留了很多可以执行自己脚本的地方,我选定的就是在游戏运行时进行识别分辨率的检查,具体就是在/userdata/system/scripts/first_script.sh里面gamestart)部分添加执行自己python脚本的来查询分辨率,执行自定义脚本参考资料:https://wiki.batocera.org/launch_a_script
python脚本再被执行后会等待几秒钟等游戏打开后执行系统命令batocera-resolution currentResolution来查询当前的游戏分辨率,之后用代码来分辨当前的游戏分辨率是否是224p的游戏,是的话就用udp协议发送消息到ESP8266,让其控制前面说的针脚的开断。查询分辨率命令的参考资料:https://wiki.batocera.org/access_the_batocera_via_ssh
自动切换部分是一个ESP8266单片机,之前用这个自己做了个显示模块,刚好还有未使用的针脚,ESP8266负责接收Batocera发过来的消息控制网线针脚的通断,我使用的是一个5v的继电器,选择继电器的原因时继电器能有有效的实现电路分离,这样CRT跟单片机的电路是分离开的,主要是我的电路知识水平过于枯竭只能选择完全安全的方法,而且继电器的在进入游戏退出游戏是通断的咔咔声听起来很美妙。然后继电器开关的连接端是连接到一个网口的母口的5针脚跟7针脚。这样就能控制网线的开断了。
这样整个自动化过程就实现了,Batocera运行游戏,然后会同时运行python脚本检查分辨率,如果是224P的游戏就发送消息给ESP8266,然后ESP8266就控制继电器开关打开,使CRT的控制线路接通,切换到UNDERSCAN模式,退出游戏或者是切换到240P游戏就是关闭上面的电路。这样就再也不用自己一下下按按键了。
下图为连接的继电器和网口
之前自己做的显示面板会显示Batocera的一些系统信息,这次添加了分辨率显示,下面面还有一个一直在回旋腿的春丽。
当然在CRT菜单里是可以自定义外部控制针脚的功能的,而且可以除了将UNDERSCAN接地之外也可以同时在菜单里将TALLY R或G的脚一同接地,这样再切换到不同分辨率的模式时CRT上方的灯也会亮起对应的颜色。
年纪大了,终于还是到了折腾机器比玩游戏更开心的状态了,最后就祝大家玩的开心吧!