二、游戏娱乐
1. 原生编译运行
这类游戏都属于有开源代码,且编译工具链都可以在龙芯 2F 上直接获取使用的。我这里尽量在原版的共创 Linux (Debian 5) 环境中编译运行,部分游戏项目编译所需的工具则需要进入 Debian 6 环境才能正常运行。这里我从项目的复杂程度,由简入繁的构建运行这些游戏。
1.1 合金弹头
项目地址:http://oldschoolprg.x10.mx/projets.php
# 安装必要依赖
$ sudo apt-get install libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev liblua5.1-0-dev
# 构建 YM 库
$ cd minislug0/ymlib
# 使用静态库 (`.a`)
$ make -f Makefile_a
# 使用动态库 (`.so`)
$ make -f Makefile_so
# 构建游戏
# 在主目录 `minislug0` 中运行 `make` 命令以构建游戏
$ cd ..
$ make
# 运行游戏
$ ./minislug
1.2 仙剑奇侠传
项目地址:https://github.com/sdlpal/sdlpal_codeplex
# 安装必要依赖
$ sudo apt install libsdl1.2debian libsdl1.2-dev
# 编译源代码
$ cd sdlpal
$ make
编译完成后生成 sdlpal
可执行文件,不过游戏的其他数据文件还需要从原版文件夹获得。
1.3 金庸群侠传
项目地址:https://github.com/ZhanruiLiang/jinyong-legend
# 安装必要依赖
$ sudo apt-get install libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev liblua5.1-0-dev
# 编译源代码
$ cd jyqxz
$ make
注:需要在 Debian 6 环境运行,在共创 Linux 环境运行后强制全屏,有声音但是黑屏,问题未知。
1.4 雷神之锤
项目地址:https://disenchant.net/tyrquake/
# 安装必要依赖
# 注:PulseAudio 在 Debian 5 中没有软件包,可以在 Debian 6 中编译
$ sudo apt install build-essential groff imagemagick libpulse-dev libxxf86vm-dev
# 构建游戏
$ cd tyrquake-0.71
$ make
编译完成后生成一组可执行文件,执行 ./tyr-quake -w width 320, height 240
即可游玩,不过游戏的其他数据文件还需要从原版文件夹获得。复制原版游戏的 id1
文件夹后,即可正常游戏。(可能需要把文件名改为小写)
# 示例:以 320x240 无声模式运行
$ ./tyr-quake -w width 320, height 240 -nosound
1.5 德军总部 3D
项目地址:https://github.com/mozzwald/wolf4sdl
# 安装必要依赖
$ sudo apt install libsdl1.2-dev libsdl-mixer1.2-dev
$ cd wolf4sdl
# 修改 version.h 为 Wolfenstein 3D v1.4 full Apogee 版本
# 游戏本体下载地址,只需要其中的数据文件
# Wolfenstein 3D v1.4 Apogee - https://archive.org/details/wolfenstein-3-d_202009
# Wolfenstein 3D v1.4 Shareware - https://archive.org/details/wolf3dsw
# Spear_of_Destiny 资料片 - https://archive.org/details/Wolf3DSOD
# 版本与 wl6 文件版本需要对应,注意校验 MD5 值
# 参考资料:https://retropie.org.uk/docs/Wolfenstein-3D/
# https://forums.raspberrypi.com/viewtopic.php?t=19846
$ vim version.h
# 仅仅保留 CARMACIZED,其他标志全部注释掉
# 其他版本的修改方法,比如 Shareware 1.4、Spear_of_Destiny,可以参考文件内的注释自定义
# ...
# //#define SPEAR
# //#define SPEARDEMO
# //#define UPLOAD
# //#define GOODTIMES
# #define CARMACIZED
# //#define APOGEE_1_0
# //#define APOGEE_1_1
# //#define APOGEE_1_2
# ...
# 编译游戏
$ make
编译完成后生成 wolf3d
可执行文件,将游戏原数据文件拷贝到同一目录下,然后执行!结果……
$ ./wolf3d
NO WOLFENSTEIN 3-D DATA FILES to be found!
按照网上的参考资料,尝试了校验版本 MD5 值,把游戏数据文件放到 /usr/share/games/wolf3d/
下,均没有效果。无奈检查源代码,查找源代码的相关信息 grep -r "NO WOLFENSTEIN 3-D DATA FILES to be found!" .
,在 wl_menu.cpp
中的第 4054 行和其他的一些位置可以找到对应的错误信息,涉及到 DATADIR
和 param_mission
两个参数。我们打个 printf 检查一下这两个参数结果:
DATADIR: /usr/local/share/games/wolf3d/
param_mission: 0
属实无语,而且这个 DATADIR 参数还不在 version.h
里修改,继续查找 grep -r "DATADIR" .
,发现在 Makefile 里。
DATADIR ?= $(PREFIX)/share/games/wolf3d/
知道了问题所在后,只要把游戏对应的数据复制到正确的路径即可。然后即可正常执行游戏。
$ ./wolf3d --windowed
另外,如果编译了”命运之矛“资料片,开始游戏之前需要对照手册回答问题才能进入,手册 PDF 地址。
1.6 模拟城市
项目地址:https://github.com/SimHacker/micropolis
# 安装必要依赖
$ sudo apt-get install build-essential wget swig libgtk2.0-dev python-dev python-gtk2 python-gtk2-dev python-pygtk python-gi python-cairo libxpm-dev bison
# 安装和编译pygobject
$ wget http://ftp.gnome.org/pub/GNOME/sources/pygobject/2.14/pygobject-2.14.1.tar.bz2
$ tar -jxf pygobject-2.14.1.tar.bz2
$ cd pygobject-2.14.1
$ ./configure --prefix=/usr/local --disable-glibtest
$ make
$ sudo make install
# 安装和编译 pycairo 1.8.10 (只有此版本可以对应 Debian 6 和 python 2.6)
$ wget https://github.com/pygobject/pycairo/archive/refs/tags/v1.8.10.tar.gz
$ tar -zxf pycairo-1.8.10.tar.gz
$ cd pycairo-1.8.10
$ python setup.py install
# 安装和编译pygtk
$ wget https://download.gnome.org/sources/pygtk/2.12/pygtk-2.12.1.tar.bz2
$ tar -jxf pygtk-2.12.1.tar.bz2
$ cd pygtk-2.12.1
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
# 验证安装
$ python -c "import gtk; print(gtk)"
如果没有错误输出,则说明 GTK+ 及其 Python 绑定已经正确安装并配置。通过以上步骤,您应该可以在 Debian 6 上成功编译并安装 GTK+ 及其 Python 绑定。
然后建立 objs 目录,这个目录在 make 构建过程会卡住,然后就可以正常编译了。
# 构建 objs 目录
$ mkdir -p ./MicropolisCore/src/TileEngine/objs
$ mkdir -p ./MicropolisCore/src/CellEngine/objs
$ mkdir -p ./MicropolisCore/src/MicropolisEngine/objs
# 编译源代码
$ cd micropolis
$ make
# 编译完成之后的执行目录
$ cd micropolis/MicropolisCore/src/
# 运行游戏
$ ./run-gtkfrontend
2. 交叉编译运行
如果构建项目的工具链支持 mipsel 架构,但是因为版本和主机性能问题,不方便在龙芯主机上编译的情况,可以用外部主机 (比如 x86 架构) 执行交叉编译到对应到 mipsel 版本的可执行程序。不过我实际的编译构建不太顺利,总是涉及到一些工具链的各种问题。
2.1 构建交叉编译工具链
2.1.1. 安装交叉编译工具链
首先,需要安装一个适用于 mipsel 架构的交叉编译工具链。可以使用 gcc-mipsel-linux-gnu
工具链。
sudo apt-get update
sudo apt-get install gcc-mipsel-linux-gnu g++-mipsel-linux-gnu
2.1.2. 设置交叉编译环境
安装完工具链后,需要设置环境变量以使用交叉编译工具。
export CC=mipsel-linux-gnu-gcc
export CXX=mipsel-linux-gnu-g++
export AR=mipsel-linux-gnu-ar
export AS=mipsel-linux-gnu-as
export LD=mipsel-linux-gnu-ld
export RANLIB=mipsel-linux-gnu-ranlib
这些环境变量告诉构建系统使用这些交叉编译工具而不是本地的编译工具。
2.1.3. 编译你的程序
现在可以使用标准的构建工具(如 make
、cmake
或 autotools
)进行交叉编译。以下是一些常见的构建工具的示例:
使用 Makefile
假设你有一个 Makefile,你只需要在执行 make
命令前设置好编译器环境变量。
make CC=$CC CXX=$CXX
使用 CMake
如果你使用 CMake,首先需要创建一个适当的工具链文件。例如,创建一个名为 mipsel-toolchain.cmake
的文件,内容如下:
cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR mipsel)
set(CMAKE_C_COMPILER mipsel-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER mipsel-linux-gnu-g++)
set(CMAKE_FIND_ROOT_PATH /usr/mipsel-linux-gnu)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
然后,在运行 CMake 时指定这个工具链文件:
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../mipsel-toolchain.cmake ..
make
2.2 红色警戒
官方开源项目地址:https://github.com/electronicarts/CnC_Remastered_Collection/tree/master
随着 CnC 红警系列重制版的发售,艺电公司为了庆祝成功特意开源了源代码,以更好的支持社区 MOD 发展。项目使用 VS 2015 工程构建,包含 C++ 和 x86 汇编代码。
另一个是 OpenRA 开源项目:https://github.com/OpenRA/OpenRA
这一版红警的开源项目社区活跃,但是编译需要基于 .NET SDK 组件(最好在 .NET 6 以上的版本),微软官方没有支持 MIPS III 架构的版本,而龙芯社区对于 .NET 3.1.1 的支持是从 MIPS64 (版本 V) 开始的。因此不能在龙芯 2F 上正常编译,不过可以在未来的龙芯 3A 和后续的处理器上尝试。
龙芯社区的 .NET 下载地址:https://github.com/gsvm/loongson-dotnet/releases
# 安装必要依赖
$ sudo apt-get install libfreetype6 libopenal1 liblua5.1-0 libsdl2-2.0-0 libfreetype6-dev libopenal-dev liblua5.1-0-dev libsdl2-dev
# 下载 .NET6 并安装
wget https://download.visualstudio.microsoft.com/download/pr/316ad9ae-22cb-478b-b51e-47667f1e7027/7a13422c0951e9235b7692c610b83442/dotnet-sdk-6.0.422-linux-x64.tar.gz
sudo mkdir -p /usr/share/dotnet
sudo tar -zxf dotnet-sdk-6.0.422-linux-x64.tar.gz -C /usr/share/dotnet
sudo ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet
# 编译源代码
$ cd OpenRA-bleed
$ make CC=$CC CXX=$CXX TARGETPLATFORM=unix-generic
# 运行 OpenRA 还需要原始游戏资源数据,可以从网络下载或者光盘镜像内提取
# 光盘镜像地址
# 红色警戒 2CD 光盘镜像 - https://archive.org/download/command-and-conquer-red-alert-1996-westwood-studios-2-cd-set_202203
# 资料片 Counterstrike - https://archive.org/download/redump-id-9855
# 资料片 The Aftermath - https://archive.org/download/redump-id-2199
# 提取的游戏资源内容位置,约 723MB
$ ./root/.config/openra/
# 运行游戏
$ ./launch-game.sh
2.3 生化危机
项目地址:https://github.com/XProger/OpenResident
# 安装必要依赖
$ sudo apt-get install clang
# 编译运行
$ cd OpenResident/src/lib
$ unzip extract_here.zip
$ cd OpenResident/src/platform/nix
$ mkdir -p ../../../bin
$ ./build.sh
这个只是个实验性代码,运行不完善,导入原版生化 2 的资源文件可以启动。简单游玩开始的几个场景。由于 Debian 6 中的 clang 版本太低,无法移植到 mipsel 架构。
3. 模拟器
有些游戏虽然不能直接运行,但是可以通过模拟硬件的形式加载。只要把对应的模拟器编译好,即可运行对应主机的大部分游戏了。
3.1 NES 模拟器
经典的任天堂 FC / NES 主机,我这里选择编译经典的 fceux 模拟器,纯 C++ 实现,在龙芯 2F 上可以正常编译。
项目地址:https://fceux.com/web/version.html
# 安装必要依赖
$ sudo apt install libsdl1.2-dev libgtk2.0-dev liblua5.1-dev scons
# 编译源代码
$ cd fceux/
$ scons
$ scons install
# 编译完成之后的可执行文件在 bin 目录下
$ cd bin/
$ ./fceux
另一个选择是 Nestopia 模拟器。项目地址:https://rbelmont.mameworld.info/?page_id=200
# 安装必要依赖
$ sudo apt install libsdl1.2debian libsdl1.2-dev
# 编译源代码
# 复制 Nestopia140src.zip 和 nst140_lnx_release_h.zip 两个文件的内容
$ cd nestopia/
$ make
# 编译完成之后,需要将 nstcontrols NstDatabase.xml 两个文件复制到 ~/.nestopia/ 目录下
$ mkdir -p ~/.nestopia/
$ cp nstcontrols ~/.nestopia/
$ cp NstDatabase.xml ~/.nestopia/
编译完成后生成 nst
可执行文件,加载 FC 游戏 ROM 就可以游玩了。
由于龙芯 2F 的机能不足,即使是运行 FC 模拟器都非常卡顿,效果不佳,只能说勉强能运行。
3.2 DOSBOX
龙芯 2F 在 Debian 6 下安装 DOSBOX 非常简单,可以直接 apt 安装,版本 mipsel 0.74-1。
# 安装 DOSBOX
$ sudo apt install dosbox
# 注册声卡模块
sudo modprobe snd-seq
# 添加声卡模块到配置文件
sudo vim /etc/modules
# 在文件末尾添加一行
snd-seq
# 修改 dosbox 对应的 conf 文件的部分配置
[dosbox]
machine=svga_s3
[mixer]
blocksize=264
[midi]
mididevice=oss
运行效果普遍一般,大部分只能勉强运行。
4. 总结
总体来说,想在龙芯 2F 上玩游戏还是比较困难的。由于 mipsel III 架构的特殊性,同时还有系统老旧、编译工具链不足等问题。Debian 6 支持的 Java 1.6 和 Python 2.6 版本都太低,无法满足目前大部分应用的需要。而 gcc 和 g++ 4 也不支持 c++11 等特性,稍微现代一些的项目构建都无法实现。如果项目存在 x86 汇编,则只能完全重写,还不一定能完全实现 (没能成功编译出红警 95 就是卡在这里)。基本上只能依靠一些早期的、不太复杂的 C++ 开源项目去构建,其中涉及到的下载、编译和安装配置的过程还是比较繁琐的。
不过能让这些游戏成功运行在这颗 CPU 上,确实还是挺有意思的。感谢您看到这里,最后附上所有编译好的龙芯版本的游戏可执行程序。下载地址
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于