用树莓派享受MAME街游的乐趣

本文由 极客范 - 钟益强 翻译自 Ben Garrett。欢迎加入极客翻译小组,同我们一道翻译与分享。转载请参见文章末尾处的要求。

说明:本文在2013年5月更新过,文中截图可能显示的是稍旧版本的Moebius和AdvMAME。

这是一篇一步一步让你在树莓派上玩MAME的教程。作于2012年11月,你读到时部分内容可能已过时。创作本文时Pi上的软件、系统以及驱动都还十分年轻且不时更新,因此文章里一些方法我更乐意称它们为技巧,并不一定是最佳实践。
本文目的是在Pi上运行一个无装饰的简单操作系统,并模拟运行街游ROM。默认读者是Windows用户,但同样适用于队Linux shell不熟悉的树莓派新手。

2013年1月:发布这篇文章后Shea Silverman发布了基于Raspbian的《PiMAME an all-in-one MAME solution for the Raspberry Pi》。如果你想要一个可以马上上手的解决方案我会向你推荐它。如果你更喜欢hack和个性化自己的MAME,或者想学习一下Pi上的shell操作,请继续阅读本文。

我所用到的硬件:

选择一个最小的树莓派操作系统

正如前面提到的,我想要的是一个基本的没有任何装饰的系统,我不需要图形界面或者其他不必要的东西,因为我们的Pi只有一个目的。
通过网上搜索后我发现有几个选择。官方下载http://www.raspberrypi.org/提供了RaspbianArch Linux。前者带有太多杂七杂八的东西,而适用于ARM处理器的Arch Linux则缺少软件支持。
幸运的是还有一个Moebius Linux,一个很小的针对树莓派的发行版,基于Raspbian。它的网站在http://moebiuslinux.sourceforge.net/,而下载地址在http://sourceforge.net/projects/moebiuslinux/files/raspberry.stable
如果你对树莓派足够熟悉而且知道怎么把镜像刻录到SD卡上,就下载Moebius-1.1.0并把它转到SD卡去。用它启动树莓派之后再继续阅读。如果你不懂我在说些什么可以看看我用作补充的文章

首次启动和硬件配置

确保你的Pi已经外接了键盘,连接上LCD显示屏或者TV,并能够上网。通过micro-USB线缆启动树莓派。
启动之后你会看到Moebius的主配置菜单这里。

moebius-1-1-0-main-configuration 你永远应该首先做的事是选择 Password 并修改密码。
由于你的SD卡上只有850MB空间被Moebius占据,所以你可能想运行AutoResize,否则使用MAME时可能会耗尽可用空间。
MemorySetup里面VideoCore应该改为最低值(16Mb),这将把你的GPU系统内存从默认的128MB设置为16MB。MAME不使用3D图形或者视频硬件加速等占有大量GPU内存的东西。
同样注意Overlock这个使用硬件优化来加速Pi的东西。它的缺点是可能会缩短树莓派芯片组的寿命,如果你的Pi是首次发行的版本,不久后可能会成为某个收藏家的收藏。
搞定之后,选择Finish。你可能会重启,那就使用root用户登录吧。

远程登录

使用Secure Shell你可以从PC远程登录自己的Pi,也就可以不需要外接键盘和显示器来操作树莓派,此外你还可以从PC复制和粘贴文字到Pi上去。Moebius里面远程登录已经默认开启,所以你只需要一个Windows的SSH客户端来连接树莓派。
以快速和方便为准我推荐Putty,你可以从这里下载到。你只需要从 Binaries download其中的Windows on Intel x86中选择Putty.exe。它是一个绿色便携版软件,你可以直接在PC中打开运行。
我们需要Pi的ip地址,当连接到家庭网络时是一串惟一的标志。
hostname -I
下面命令高亮显示了我的Pi的地址。

在PC上运行Putty,在启动配置那里填入主机名(或Pi的ip地址),确保端口(Port)值为22,连接类型(Connection Type)为SSH。在保存选项(Saved Sessions)那里给它个名字,比如Raspberry Pi,点击保存。

点击Open按钮连接树莓派。如果弹出提示可以点击Yes来信任以后的每次连接,然后以root用户登录。你已经通过PC远程连接到树莓派上面了。如果你想复制PC剪贴板的文字到Pi上,只需右键点击Putty的文字窗口。如果想从Pi复制文字,左键点击并选中文本后,文字就已经复制到PC的剪贴板了。

如果你是Linux Shell的新手,试试下面的命令吧。

一些有用的Shell工具

df -h --total                列出SD卡的总容量、已用及可用容量
free -th                     列出系统内存使用情况
top                          列出CPU使用情况及当前内存活动情况。退出键入q
ping -c 3 http://www.google.com           检查树莓派是否连接到网络
cd ~                   使你进入用户主文件夹
ls                     列出当前文件夹里面的文件及子文件夹
ls -l                  详细列出文件及子文件夹的信息
ls -l -color           用不同颜色标志列出文件及子文件夹信息
reboot                  重启树莓派
shutdown -hP 0         关闭并断开树莓派电源。注意数字0
cat                    显示出一个文件的内容。比如 cat /etc/passwd 列出树莓派的用户。如果需要退出按Ctrl-C 。
clear                  清屏

别忘了在Linux你可以使用自动补全功能,比如键入moe再按[tab][enter]就会自动补全命令moebius.config并打开它。自动补全也可用于文件夹、文件和apt-get等。Linux中的一切都是大小写敏感的,也就是说Moebius.config, moebius.configmoebius.Config会被当作三个不同的应用。

软件更新

这里假设你的Pi已经连接到因特网了,然后我们要更新Moebius软件源和里面的软件。你可以把它当作Windows里面的更新。
apt-get update
apt-get upgrade -y

自定义Shell

Moebius使用的是兼容Bourne(/bin/sh)Bash shell(/bin/bash)。我自己做了一些调整,使得它在Pi上更加好用。大多数系统设置都保存在/etc/的文本文件里。无论你对里边的文件做了什么改动,我都建议你先把原来的文件备份一下,在需要时可以恢复。进入这个目录,备份后我们来编辑Bash配置文件。
cd /etc/
nano -B bash.bashrc

Nano是我推荐的文本编辑器, -B 选项自动备份原文件。 bash.bashrc 则是我们要编辑的文件名。在Nano里使用[方向下]箭头或者[PgDn]键来向下滚动到文件底部,然后可以增加你想要的内容。在文件底部添加以下内容,不过复制后在Putty上粘贴应该是最好的。
# Alias definitions.
# You may want to put all your additions into a separate file like
# /etc/bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f /etc/bash_aliases ]; then
. /etc/bash_aliases
fi

现在创建bash_aliases文件来保存我们的自定义选项。
nano /etc/bash_aliases
复制和粘贴以下代码:

#!/bin/sh

# Alias definitions.
# You may want to put all your additions in here.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

# Enable color support
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval “$(dircolors -b ~/.dircolors)” || eval “$(dircolors -b)”
alias ls=’ls –color=auto’
alias grep=’grep –color=auto’
alias fgrep=’fgrep –color=auto’
alias egrep=’egrep –color=auto’
fi

# Extra ls aliases
alias ll=’ls -FAl’
alias la=’ls -FA’
alias l=’ls -FAoh’

# Raspberry Pi Aliases
alias raspi-audio=”/usr/bin/alsamixer”
alias raspi-cpu=”/bin/cat /proc/cpuinfo”
alias raspi-disk=”/bin/df -h –total”
alias raspi-firmware=”/opt/vc/bin/vcgencmd version”
alias raspi-mem=”/usr/bin/free -th”
alias raspi-ip=”/bin/hostname -I”
alias raspi-ping=”/bin/ping -c 3 http://www.google.com”
alias raspi-reboot=”/sbin/reboot”
alias raspi-shutdown=”/sbin/shutdown -Ph 0″
alias raspi-update=”/usr/bin/apt-get update -y;/usr/bin/apt-get upgrade -y”
alias raspi-version=”/bin/cat /proc/version”

然后按[Ctrl-x]退出,问你是否保存时键入y,再键入回车保存到指定文件。

如果你尝试新别名将会返回错误。
ll
-bash: ll: command not found error.

运行source命令来使刚刚的修改生效。
source /etc/bash.bashrc
ll

ll 命令现在就可以用了,而且会被当作另一条命令。还有个小技巧,你可以将结果通过管道传递给另一个命令。
ll | less
less使得你可以通过上下箭头或者[PgUp][PgDn]键上下滚动ll的结果,按q退出。
想了解更多关于自定义配置文件的东西可以看这里http://www.hypexr.org/bash_tutorial.php

MAME

正如文章开头提到的,MAME是一款复杂的软件,它模仿旧时街头游戏机,“欺骗”一些嵌入式游戏让它们以为自己跑在原来的硬件上一样。MAME是开源的,该项目始于1997年,如今在不同操作系统上已有不同特色的分支。官方MAME适用于装有Windows的现代PC,看重模拟精确度胜于模拟速度,因此部分MAME版本不适用于配置较低的设备,比如树莓派。
然而AdvanceMAME是一个适用于定制的、嵌入式硬件的MAME分支,供我们使用再好不过。最新版本是1.2,兼容2006年7月发行的0.106光盘包装版本。这一点很重要因为2013年5月官方发布的是0.148版本,所以能在你PC上玩的MAME版本不一定可以在Pi上使用。
Shea Silverman在http://blog.sheasilverman.com/tag/mame/已经编译了一个Raspbian的AdvanceMAME,把它下载后放到home文件夹下,使用Debian包管理软件来安装。
cd ~
wget http://sheasilverman.com/rpi/raspbian/debs/advancemame_1.2-1_armhf.deb
dpkg -i advancemame_1.2-1_armhf.deb


看看AdvanceMAME所依赖而Moebius也缺失的软件包。
apt-get -y install libsdl1.2debian libfreetype6
首次运行AdvanceMAME。
advmame
其配置文件 advmame.rc 位于 /root/.advance/ 里。这份文件里面有一大堆的默认设置,我们先备份它并用Nano来编辑。
cd /root/.advance/
cp advmame.rc advmame.rc~
nano advmame.rc


修改下面设置
device_mouse none
misc_freeplay yes
misc_quiet yes
record_sound no
record_video no

device_mouse 关闭了鼠标支持
record_sound 和 record_video 关闭了在Pi上不适用的录制功能
misc_freeplay 打开自由游戏模式
misc_quiet 关闭了启动时烦人的版权信息

如果Pi连上了HDMI TV或显示器,加入下面的设置。
device_video_clock 5 - 50 / 15.62 / 50 ; 5 - 50 / 15.73 / 60
如果使用HDMI转VGA,下面的设置也很有用。
device_video_clock 5 - 50 / 15.75 / 50

如果你使用的是黄色复合连接,从AdanceMAME安装文件(http://advancemame.sourceforge.net/doc-install.html#4.5)里获取device_video_clock的值。如果不确定你的国家使用哪种电视系统可以试试这里http://countrycode.org/tv-standards
最后你或许想通过修改 sound_samplerate 打开音效。这能修改音效质量,该值越低应该越能提高游戏效果。默认值为44100,22050和11025也是允许的。

advmame.rc用到的其他具体设置可以在其文档里查到http://advancemame.sourceforge.net/doc-advmame.html#8
别忘了保存设置再退出Nano。

MAME ROMs

MAME它本身没什么作用,想要好玩点你得去街游机器里获取游戏的ROM文件。合法、免费、非商业的获取途径是这里
得到的ROM可以放在/root/.advance/rom/或者/usr/local/share/advance/rom/ 里面。我推荐后者,因为更具扩展性。我下载了http://www.mamedb.com/game/victory并在AdvanceMAME上测试了一下。
cd /usr/local/share/advance/rom/
wget http://mamedev.org/roms/victory/victory.zip -U Firefox
advmame victory


要确保你不是在SSH客户端或者Putty连接里面运行advmame victory,那样是没用的。一开始你会经历一段颜色循环,这是街游在测试硬件的过程。在”Diagnostic Test Failure “屏幕按1。然后恭喜你,你已经成功在树莓派上运行MAME街游成功!


打开MAME菜单按[tab] 投币按5
投币后以play 1进入游戏按1
退出游戏回到Linux 按[Esc]

从PC上传送文件到树莓派(可选)

现在你已经成功在Pi上运行了MAME,你可能想从PC上传输文件到树莓派上去。实际上有不少方法,但我使用SSH的安全文件传输,或者说SFTP。搭建起来毫不费力,几乎是自动的而且对Pi的文件系统有完全的访问权限(只要你想要)。在Windows段我使用FileZilla客户端,一个免费而开源的文件传输软件。
在树莓派上安装openssh-server并获取其ip地址。
apt-get install -y openssh-server
hostname -I

然后你的Pi就准备好接收SFTP连接了。
在PC上下载,安装,并打开FileZilla,在快速连接栏里填入ip等信息,点击快速连接(Quickconnect)。
Host: 是刚刚 hostname -I命令返回的ip地址
Username: root
Password: Pi上root用户的密码
Port: 22

左边的 local site 是PC上的文件系统,右边的Remote site是树莓派。你可以浏览任何一边的文件目录。要传送文件到Pi上,只需选中并右键,点击上传(Upload)。如果想上传ROM,你最好先在右边进入到/root/.advance/rom/ 或者/usr/local/share/advance/rom/目录里去。

让MAME开机自启动(可选)

要做一个真正的便携式街游设备你得让Pi开机时自动启动MAME。
要让它默认使用root登录且不需要密码,得备份并编辑下面的初始化进程设置。
cd /etc/
cp inittab inittab~
nano +54 inittab


1:2345:respawn:/sbin/getty --noclear 38400 tty1
这一行改成
1:2345:respawn:/sbin/getty -a root --noclear 38400 tty1
#1:2345:respawn:/sbin/getty --noclear 38400 tty1

保存文件名为inittab并退出nano。
要自启动AdvanceMAME我们得用root用户通过.profile文件,让它在登录后运行我们要的Bash脚本。
cp /usr/share/base-files/dot.profile /root/.profile
cd /root/
nano .bashrc

.bashrc文件里加入下面代码并保存。echo命令在屏幕上显示文字,&& 创建一个新文件,# 符号用来忽略脚本中的文字,作为编程中的注释很有用。
# /root/.bashrc: executed by bash(1) for root shells.

if [ -z "$SSH_CONNECTION" ]; then
# Launch AdvanceMAME with a ROM
echo && echo “Starting AdvanceMAME” && echo
/usr/local/bin/advmame victory
fi
恭喜你有了一个自足的树莓派街游模拟器。重启树莓派并测试下自动登录和自启动的效果。
reboot
在启动过程中如果不想自启动AdvanceMAME了可以在欢迎屏幕时按[Ctrl-c]。

安装列出游戏的菜单(可选)


AdvanceMenu是AdvMAME一个补充功能,可完整列出Pi上所有的MAME游戏。列出后你可以选择其中一个并进入游戏。要开启这个功能要先下载并安装AdvanceMenu.
cd ~
wget http://sheasilverman.com/rpi/raspbian/debs/advancemenu_2.6-1_armhf.deb
dpkg -i advancemenu_2.6-1_armhf.deb

然后运行
advmenu
然后就可以看到所有MAME ROM的白色列表,大块灰色区域是预览游戏图像的地方。如果你启动时遇到XML的语法错误信息,删掉advmame.xml文件然后再试一次。
rm ~/.advance/advmenu.xml
advmenu

使用键盘方向键在游戏间选择,然后按回车启动选中的游戏。F1键列出AdvanceMenu的选项,按Esc退出到Linux shell。
供预览的图像(截图)储存在 ~/.advance/snap.你可以自己在http://www.progettosnaps.net/snaps_en.html下载并把它们放到那个文件夹里去。或者在游戏时按F12自己创建一个截图。
如果想在开机时自启动advmenu,要按照刚刚“让MAME开机自启动”里的指令来,只不过在编辑.bashrc里要这么改。
nano +6 ~/.bashrc

/usr/local/bin/advmame [game]
替换成
#/usr/local/bin/advmame [game] /usr/local/bin/advmenu
保存改动并重启。

MAME一些问题

硬件太慢!

如果你觉得硬件性能比预期的慢,可以试着更新Pi的固件。跟着https://github.com/Hexxeh/rpi-update上rpi-update的README.md来,然后Pi应该就能用上最新的硬件驱动了。这应该能改善性能并修复一些可能的bug。
另一个选择是运行moebius.config并选择Overlock,修改Pi的clock preset到大于Warp1的其他选项。

音频问题

Pi上的旧ALSA驱动已经证实有质量问题。我之前使用3.5mm耳机结合HDMI显示输出有很大问题,但通过HDMI输出音频却可行。我还是建议你按照上面提到的rpi-update的README,更新一下Pi的固件。
如果你运行alsamixer(或者raspi-audio)没有音频输出,使用方向键调整PCM的值,确保其不低于41。

控制器

有时由于电源供给问题USB手柄等会无法工作。我的Xbox 360 USB控制器就会这样,即使通过一个带电源的USB集线器。使用一个10伏特的USB电源也于事无补。然而我另一个进口的Elecom手柄则工作得很好。

使用非root用户

尽管在Linux上使用root用户一般都是不被推荐的,但不用它我还没办法让AdvanceMAME正常工作过。如果你成功了请告诉我。你想用非root用户运行AdvanceMAME的一个奇怪方法是给软碟驱动其他用户的读写权限。
chmod o+rw /dev/fd0

错误:必需文件缺失

遇到这个问题可能会有几个原因,建议参照MAME的开发FAQ。
http://mamedev.org/devwiki/index.php/FAQ:ROMs#Why_does_MAME_report_.22missing_files.22_even_if_I_have_the_ROMs.3F



原文链接: Ben Garrett 翻译: 极客范 - 钟益强

译文链接: http://www.geekfan.net/3112/

[ 转载请保留原文出处、译者和译文链接。]

翻译圈新手,请多指教~

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">