在未经修改的NES主机上玩SNES游戏

模拟器一般是运行在较新的设备上的,用来模拟较旧的设备上的软件。但来自宾夕法尼亚州匹兹堡的计算机科学家Tom Murphy VII通过“逆向模拟”SNES来改变这一过程。他在一个NES设备上成功模拟SNES游戏的运行,其中的关键是通过将树莓派嵌入到NES游戏卡带中来,树莓派模仿SNES游戏,并将图形转换为NES硬件可以显示的形式。至于这么做有什么实际意义?可能并不大,研究纯属好奇和好玩,这就足够了!

汤姆在这个引人入胜的视频中解释了他必须解决的许多技术问题:


该项目需要一个定制的电路板,包括一块树莓派、一个重新编程的NES PPU芯片和一个Nintendo CIC内容保护芯片。

汤姆逆向模拟的关键在于以某种方式欺骗未经修改的NES运行SNES发布冠军超级马里奥世界,他通过将树莓派嵌入到NES游戏卡带中来实现。树莓派模仿SNES游戏,并将图形转换为NES硬件可以显示的形式。

下面的视频制作,更详细地解释了该项目:

 

 

基于Zero W和Batocera的游戏掌机

使用batocera系统配置树莓派Zero W掌机,batocera系统与其他游戏机系统相比性能要求低,非常适合用于Zero这种低配置的板子上使用。

下载镜像

这个网站,选择针对树莓派Zero W的镜像下载,Windows用Win32DIskImager直接烧写,Linux用dd命令即可。
 

初次配置

通过HDMI线连接电视机或者显示器,给树莓派正常供电,系统会自动分配空间,自动配置完,然后强制关机直接切断电源就行。

配置分辨率

考虑到我们需要用小屏幕来作为掌机的显示,系统不会默认就直接适配屏幕,以我的这个5寸屏幕为例

需要修改一些配置文件,这个步骤需要Linux系统或者虚拟机。
首先需要修改/RECALBOX目录下的config.txt
将下面这段加到里面去(可能需要sudo命令行)。
framebuffer_width=800
framebuffer_height=480
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=87
hdmi_cvt  800  480  60  6  0  0  0
device_tree=bcm2710-rpi-3-b.dtb
dtparam=spi=on
把/SHARE/system/recalbox.conf中的两处CEA 4 HDMI改成DMT 87 HDMI
使用其他屏幕的时候用类似的操作就行了,配置成功之后应该可以使batocera的主屏幕和游戏界面都完全适配使用的硬件屏幕。

设置GPIO控制

修改/SHARE/system/recalbox.conf中的两行配置
controllers.gpio.enabled=1  
controllers.gpio.args=map=1,2 => controllers.gpio.args=map=1
重启之后就可以尝试用上面这张图的相关引脚了,默认是上拉的引脚,所以只要把引脚比如27号连一下GND,看他会不会有左滑的效果,如果有效果的话,就是说软件上配置成功了,硬件上还需要做一些事情,需要焊一块小型的掌机来操作才行。
 
总体思路就是在一块洞洞板上焊接需要数量的微动开关,然后每个开关一边连到相应的开关,另一边一起连到GND即可,具体随意就行,包括整个的布局之类的,只要按下去有效果就行了。
比如像我这样的很多飞线的,能用就行…
使用游戏机

正式玩游戏之前需要一些其他额外的配置
配置WI-FI

游戏上传在无法联网的板子上,我们只能通过直接对SD卡读写,拔下SD卡然后往里面复制粘贴进去游戏ROM文件,需要用Linux系统或者虚拟机来打开SD卡,ROM放置的目录在/recalbox/share/roms,里面有分开各种模拟器的目录,把相应的游戏rom或者压缩包粘贴到相应的模拟器目录下就好了。

网络上传对于能联网的板子,尤其是树莓派3和ZERO w这类有无线WiFi的板子,完全可以通过网络的方式上传游戏文件,而不需要麻烦的插拔SD卡。

首先肯定需要联网,可以看上一篇文章中的联网的步骤,确保板子和PC在同一局域网里面

打开我的电脑中的网络,应该能看到RECALBOX的一个网络位置

进入这个位置,就能看到下面的目录结构

直接复制相应的ROM文件到对应的模拟器目录下面,然后在游戏机上,进入主菜单的游戏设置,然后选择更新游戏列表,之后再进入对应的模拟器目录,就能看到刚刚复制进去的游戏了。

有时候可能在网络中直接看不到这个网络位置,我们也能在我的电脑的地址栏里面,直接输入\\RECALBOX或者对用的ip地址,比如\\192.168.3.18,应该也能进入上面的那个目录结构,然后做类似的操作即可。

最后就能用自己做的手柄开始玩各种复古游戏了,只要你能找到它的ROM。

batocera.linux基本配置

修改分辨率

batocera.linux适用于各种分辨率的屏幕,也就意味着除了各类常规的显示器,也适用于不同的小的屏幕,比如这个5寸触摸屏(系统不支持触摸)800×480的分辨率,就以这个屏为例:

首先需要修改/boot目录下的config.txt

将下面这段加到里面去

framebuffer_width=800
framebuffer_height=480
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=87
hdmi_cvt  800  480  60  6  0  0  0 
device_tree=bcm2710-rpi-3-b.dtb
dtparam=spi=on

把/SHARE/system/recalbox.conf中的”CEA 4 HDMI” 改成 “DMT 87 HDMI”

 

在前端页面单击start键,进入这个主设置界面

系统设置

可以查看当前板子的信息,存储状态,修改语言,超频,备份和安全之类的设置。

游戏设置

包括一些显示比例、回放功能、自动保存/加载、主题之类的设置,还可以针对某个模拟器进行深层的配置。

手柄设置

游戏中的按键和以前玩的映射位置一样,但是通过HotKey也会有一些特殊的结合键,也就是说一开始必须要设置一个HotKey(不然可能进入一个游戏之后就出不来了)。

Hotkey + Y → 储存进度
Hotkey + X → 载入进度
Hotkey + Up → 选择存储槽
Hotkey + Down → 选择存储槽

Hotkey + Start → 结束游戏并返回到主界面
Hotkey + A → 重置游戏
Hotkey + B → Retroarch菜单
Hotkey + L1 → 截屏

Hotkey + Right → 加速游戏
Hotkey + Left → 回放

Hotkey + R2 → 下一个 shader preset
Hotkey + L2 → 上一个 shader preset

在这个设置页面可以设置手柄,添加蓝牙手柄,配置1P、2P之类的多个玩家。

UI设置

屏幕保护时间、样式,帧率显示、主题设置都在这个页面完成。

声音设置

主要用来设置输出的接口是板上端口还是HDMI,比如用下面的这个配套功放板来测试

网络设置

进入网络设置之后,假如是WiFi的话,默认是没有开启的,需要选择enable,然后输入SSID和KEY,过段时间就能连接上了。

同时batocera的ssh是默认开启的,也就意味着我们可以通过Putty或者终端ssh连上去,默认root的密码是recalboxroot;除了ssh之外,我们通过网络也能可以非常方便地把一些游戏文件通过网络直接传上去,甚至还能通过网络使用虚拟键盘和虚拟手柄。

在浏览器打开batocera的ip地址,就能看到有三个选项,以虚拟手柄为例,在这个网页可以用鼠标点击来当作手柄用,但是当你在手机或者平板打开的时候,他就真的像一个手柄一样,而且还是无线手柄。

抓取

这个功能是用来抓取每个模拟器上每个游戏的信息和封面的,连接到一些网站可能用爬虫抓取。

抓取成功之后,在游戏选择界面也会有所不同。

Kodi媒体中心

系统附带的一个媒体中心,在前端通过X按键或者在设置界面可以进入这个媒体中心,里面可以看电影、听音乐,不过很多按键会和之前不同,用起来稍微有些麻烦。

使用LAKKA系统打造怀旧游戏机

之前就关注过很多怀旧游戏机的项目,但是苦于很多项目的复杂难度和硬件要求,一直没有动手,前几天逛到一个网站,发现这个项目,支持不少硬件平台,而且搭建也很简单。

下载镜像和烧写

进入官网,就可以Get Lakka,选择树莓派2或3,这两个其实是同一个系统镜像(同时可以看到这个项目真的支持很多硬件平台)。

 

2

 

下载完解压是一个镜像文件3

 

如果是windows系统,可以用Win32DiskImager来烧写sd卡,然后和往常一样,sd卡插入树莓派,hdmi连接到显示器,然后有音响的话,还能插上音响,插好手柄(大多数,最后通电,就能成功地打开Lakka系统了。

 

初次启动

 

4

 

第一次启动会出现上面的界面,然后会有大概30秒的时间来覆盖文件系统到整个sd卡并重启,重启成功就会有下面的画面。

 

5

 

开始游戏

 

Lakka支持很多很多模拟器,包括NES(红白机),GBA,雅塔礼等等,事先把游戏rom放到文件系统的roms文件中(windows系统可能需要linux虚拟机)。

 

  • 启动系统后,选择Load Core,确定游戏相应的模拟器型号;
  • 选择Load Content,浏览文件系统,确定想玩的游戏,就会开始相应的游戏;
  • 一时间就会会想起小时候玩小霸王的感觉了

 

6

 

坦克大战

 

7

 

超级马里奥

 

8

 

9

 

不知道叫什么的很老很老的游戏

 

10

 

雪人兄弟

 

11

 

12

 

成功的在实验室搭起了一个游戏机,其中为了有点怀旧的感觉。。刻意使用了实验室废弃的显示器(不然就用大电视机了)。。