「Linux」- 运行任天堂红白机游戏(“小霸王”)

  CREATED BY JENKINSBOT

问题描述

# 02/16/2021 今天,闲来无事(其实也有事,就是累了,想休息一下),想再玩一玩这些小游戏,重温经典,所以就有了这篇文章,来记录这一过程。当我们不会去买一个红白机,虽然有卖的。我们想在 Linux 中运行红白机游戏,然后娱乐一番,顺便学习了解一些技术上的实现(当然,在工作中这些知识基本是无用的,最多算是开阔视野)。

该笔记将记录:在 Linux 中,如何运行任天堂迷你红白机游戏,以及常见问题处理。

任天堂(Nintendo)

任天堂是日本一家主要从事电子游戏软硬件开发的公司,电子游戏业三巨头之一,现代电子游戏产业的开创者。任天堂创立于1889 年 9 月 23 日,以生产花札起家,1970 年代后期投入电子游戏产业,1983 年推出了第一代家用游戏机 FC,也是我们这篇笔记的主角之一。

红白机(Family Computer)

FC,红白机,Family Computer,FAMICOM,Nintendo Entertainment System,NES,都是指任天堂公司发行的第一代家用游戏机。发布于 1983 年,称为家庭计算机(Family Computer),通常使用 Famicom 称之。

但是,我们小时候用的不是红白机,而是小霸王游戏机。二十世纪八十年代末,九十年代初,中国小霸王公司所推出的一系列学习机产品,皆是侵犯知识产权的产物,其仿制对象为日本任天堂公司所销售的FC游戏机,由于当时知识产权观念淡薄,小霸王产品系列一直是被当作合法产品进行宣传的。(那时候我们哪里懂这些,都是些毛儿都没长齐的小屁孩儿……,估计当年用的也不是小霸王,也不知道是哪个小作坊生产的游戏机)

这上面便运行着我们玩过的那些 、超级玛丽、魂斗罗、雪人兄弟、忍者神、坦克大战、马戏团 、热血小子(含足球、篮球、格斗等)、双截龙、SD快打旋风、炸弹人、松鼠大战、三目童子、、古巴战士、中国象棋、西游记、成龙功夫(成龙之龙)、彩虹岛、敲冰块、俄罗斯方块、、电梯大战、沙龙曼蛇、蜘蛛侠、中东战争、火箭车、功夫小子、淘金者、、激龟快打、泡泡龙、洛克人、龙珠、人间兵器、赤影战士、台球、忍者猫、圣斗士星矢、、大力水手、打鸭子(要用枪的,不知道你们有没用过)、脱狱、天使之翼(足球小子)、蝙蝠侠、F、塞车、玛丽医生(类似俄罗斯方块)、推箱子、、星际魂斗罗、影子传说、兔八哥、NBA篮球、街霸、超级大富翁(美国富豪)、小蜜蜂、三只小猪、恶魔城、救火英雄、打砖块 等等吧,有些我们也没有玩过(毕竟是偷偷玩……)。

模拟器与游戏文件

每个 NES 游戏及其数据都保存在一个 ROM 文件中,该文件的格是为 NES(Nintendo Entertainment System),文件的扩展名为 .NES。NES 文件是由 NES(任天堂娱乐系统)视频游戏创建的游戏 ROM,它包含与原始 NES 磁带相同的数据,可以使用 NES 模拟器在 PC 上打开和播放。

所以,现在我们需要做两件事情:(1)下载游戏文件(NES ROM);(2)找到模拟器(Emulator);

游戏文件(ROM)

从最开始,我们就在讨论 Nintendo 游戏,它的游戏的文件为 NES 格式。NES 文件是由 NES(Nintendo Entertainment System)视频游戏创建的游戏 ROM。它包含与原始 NES 磁带相同的数据,可以使用 NES 模拟器中打开和播放。

下载 NES 游戏,可以直接到网上搜索:
1)Nintendo(NES) ROMs
2)Download Complete ROM Sets (Full Sets in One File) ROMs
3)FC任天堂红白机中文模拟器 500经典游戏大集合.rar

模拟器(NES Emulator)

在现有体系中,我们先要有硬件,硬件之上运行操作系统,操作系统之上运行可执行程序。当然,没有操作系统也是可以的,毕竟操作系统本身“就是”可执行程序。所以简单来看便是,硬件读取可执行文件,翻译指令并执行。

如果没有硬件怎么办?模拟器(Emulator)。模拟器的任务是读取可执行文件,将指令解析为当前平台的指令,并交由硬件执行。所以,我们只需要下载模拟器来运行游戏 ROM 即可。

但是,这个世界上又不止有 Nintendo 游戏机器,还有 Super Nintendo 、Nintendo DS、Nintendo 64 等等。这些体系所使用的 ROM 格式也是不相同,所以需要使用不同的模拟器来运行。

mednafen – Mednafen – Multi-system Emulator
运行 Nintendo ROM 文件

ZSNES- ZSNES Home Page – About ZSNES
运行 Super Nintendo ROM 文件

使用 Mednafen 模拟器(NES)

Mednafen 是 Nintendo 模拟器,所以只能运行 .NES 文件,因此到 Nintendo ROMs 下载游戏(当然,还有其他 ROM 下载站点)。

安装 Mednafen 模拟器

# Debian GNU/Linux 10 (buster)
apt-get install -y mednafen

# 这是在运行魂斗罗
mednafen Contra\ \(U\).zip

游戏运行成功的截图,故事便这样开始:

为什么运行 .zip 文件,而不是 .nes 文件?
在那个 zip 文件中,包含的就是 .nes 文件。在运行时,mednafen 会自动提取数据,因此没有必要“在提取 .nes 文件后再运行”。

如何获取官方手册?
在 mednafen 的 man 手册中会指出一个关于 mennafen 的 html 文档,里面会有详细的说明。

如果配置 Mednafen 模拟器?
在首次运行后,会生成 $HOME/.mednafen/ 目录,其中包含按键配置、在游戏过程中产生的信息等等。没有 GUI 配置界面也是 mednafen 的缺点,所有的配置都必须通过命令更改或修改 ~/.mednafen/mednafen.cfg 文件。不过,配置只要做一次就够了,所以这也不是个繁琐的事情。

设置手柄(joystick)按键

声音设置(游戏无声音)

emulation – ALSA and Mednafen: No Sound – Ask Ubuntu

问题描述:在启动游戏时,游戏没有声音,这是因为驱动加载失败。提示如下错误:

 Initializing sound...
  Using "ALSA" audio driver with SexyAL's default device selection.ALSA Error: s
nd_pcm_open(&alsa_pcm, id ? id : "hw:0", SND_PCM_STREAM_PLAYBACK, 0) No such file or directory
Error opening a sound device.

解决方法:
1)在 Debian GNU/Linux 10 (buster) 中,修改 ~/.mednafen/mednafen.cfg 的 sound.driver 为 sdl 即可(我们是这样解决的)。

游戏作弊

Mednafen – Emulation General Wiki

Mednafen 可以保存 Cheat 数据,在下次载入游戏时,能够自动载入作弊信息。

1)[Alt] + [C]
2)按照提示进行数组选择即可

进入全屏模式

通过 [ALT] + [ENTER] 组合键,以切换(进入/退出)全屏状态,双倍快乐。

使用 ZSNES 模拟器(SNES)

ZSNES 是 Super Nintendo 模式器,运行 SNES ROM 文件,因此到 Super Nintendo ROMs 下载游戏(当然,还有其他 ROM 下载站点)。

安装 ZSNES 模拟器

# Debian GNU/Linux 10 (buster)
apt-get install -y zsnes

# 运行游戏
zsnes Top\ Gear\ \(USA\).zip

游戏运行成功的截图,新的故事便再次开始:

使用 ZSNES 作弊

Make Your Own Cheat Codes With ZSNES – YouTube

参考文献

百度百科/任天堂
百度百科/红白机 (任天堂公司发行的第一代游戏机)
3 NES Emulators to Play Old NES Games in Linux
Nintendo Entertainment System