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