打造专属 Switch 模拟游戏机

文章目录

      • 2种方案
        • Switch版RetroArch
        • Lakka系统
      • 整体性能对比:Lakka更优
      • 核心是否兼容:并不兼容
      • 整合2种方案:共享游戏ROM和配置、资源等文件夹
      • 存储空间优化
      • 添加模拟器核心
        • Switch版RetroArch
        • Lakka
      • 添加游戏
        • 添加特殊类型模拟游戏示例(尤其是Lakka中需要特别处理)
          • Dreamcast、NAOMI
          • PS

2种方案

Switch版RetroArch

RetroArch 是一款高度可定制化的跨平台全能模拟器,由 Libretro 团队开发。它不仅模拟单一游戏平台,而是通过不同的“核心”(cores) 支持多种游戏机和计算机系统,允许用户在单一应用中玩遍NES、SNES、Game Boy Advance、Sega Genesis乃至PlayStation等众多平台的经典游戏。RetroArch 还提供了高级功能,比如实时重播、网络对战、各种视频滤镜和增强功能,以及高度可配置的控制设置。

官网:https://www.retroarch.com/

刷机安装方法详见:Switch双系统:2024.6,自己动手丰衣足食版

Lakka系统

Lakka是一个专门为复古游戏爱好者设计的轻量级Linux发行版,它能够将各种低配置的硬件平台,特别是老式计算机,改造成功能全面的复古游戏主机。Lakka基于OpenELEC项目,并内置了RetroArch作为其核心组件,RetroArch是一个强大的前端界面,支持多种游戏模拟器核心(通过Libretro接口),这意味着用户可以在一个统一且用户友好的界面下玩到众多不同平台的经典游戏。

官网:https://lakka.tv/doc/

刷机安装方法详见:Switch刷机:安装Android系统和Linux系统

整体性能对比:Lakka更优

  • Lakka针对模拟游戏进行了系统级的优化,并预设了许多配置,有助于提升兼容性和性能。
  • Lakka在新版本中对Switch端口进行了重写,提升了性能。此外,Lakka还支持动态重新编译和图形堆栈更新,这些改进也有助于提升性能。
  • Lakka系统的一个显著优势在于它对Vulkan图形驱动的支持,而Switch版RetroArch只支持GL和Switch原生视频驱动。Vulkan作为一种现代、低开销的图形API,相比OpenGL(GL),在大多数情况下能够提供更好的性能和图形处理效率。
  • Switch版RetroArch可以使用最新版本,在模拟器核心上最全最新。而lakka因为适配原因,系统自带的RetroArch一般会落后几个版本,并且模拟器核心有缺失情况(缺失的是低性能已被兼容的核心,直接使用升级版本即可,无影响)。
  • 画质方面,两者都能支持到Switch屏幕的原生分辨率。

核心是否兼容:并不兼容

RetroArch 在不同平台上会有不同的核心格式要求,这是由操作系统和编译环境决定的。

在 Nintendo Switch 的大气层(Atmosphere)环境中, RetroArch 使用的是专为 Switch 设计的格式,即 .nro 格式,它是 Switch 定制固件(如大气层)中用于本机应用程序和插件的文件格式。

而在 Lakka 系统中,因为 Lakka 是基于 Linux 的操作系统,所以它使用的是与 Linux 兼容的核心格式,即 .so(共享对象)文件,这是Linux系统上用于动态链接库的标准格式。

整合2种方案:共享游戏ROM和配置、资源等文件夹

考虑到整合的游戏资源一般都是覆盖到Switch版的Retroarch目录,故推荐将Lakka的配置、资源等文件夹设置为共享Switch版的Retroarch目录。反之,如果将Switch版的Retroarch的文件夹设置为共享Lakka的目录也是类似操作方法。

  1. 在Lakka系统的主菜单中打开“设置”,选择“文件夹”选项。
  2. 将所有/storage开头的文件夹都改为/flash/retroarch下的同名目录。
  3. playlists目录不要更改,因为Lakka和Switch版Retroarch的根目录路径并不相同。
  4. 更改后在菜单选择“重启程序”后生效。
  5. 注意:所有/tmp开头的文件夹都不要更改设置,这些是Lakka镜像自带目录,更改后可能造成系统不兼容问题。

存储空间优化

  1. 如果只游玩少数几种模拟游戏机类型,可以将cores目录下的无关的模拟核心进行删除,例如只保留FC模拟器的整体占用不超过200M(含游戏和缩略图)。
  2. 清理不需要的游戏的缩略图等资源文件。
  3. 其他(不太占容量):
    • 不需要的模拟核心的关联配置等文件。
    • 同一个游戏一般会有多个平台版本或移植版本,只保留一个偏好的平台版本即可。

添加模拟器核心

Switch版RetroArch

RetroArch 官网下载Switch版本最新版后,解压覆盖到SD卡根目录即可完成程序版本和核心的整体更新。

如果只需要添加部分核心,则下载对应的RetroArch版本后,将其解压后的cores子目录中的所需核心拷贝到SD卡对应目录中,查找子目录,例如config文件夹等,寻找该核心配套的配置、资源等文件也拷贝到SD卡对应目录。

Lakka

配置连接WiFi后,选择在线更新,可以更新Lakka系统版本,其自带的RetroArch程序版本和核心都会被更新到最新自带版本。

Lakka系统中,不能单独更新 RetroArch 版本。但可以添加、更新核心,只需要将RetroArch的Linux版本(最好和自带RetroArch版本一致)的对应核心文件拷贝到 /lakka/storage/cores 目录下,即可添加新核心或更新同名核心。

注意:Lakka系统中缺失的是低性能已被兼容的核心,直接使用升级版本即可,无影响。比如,Arcade (FB Alpha 2012 CPS-1)直接使用Arcade (FinalBurn Neo)即可。

添加游戏

Lakka系统可以在线更新游戏,但是因为版权原因,只能下载到极少数自制游戏,例如贪吃蛇等。

自行寻找到ROM资源后,可以按照如下方法进行添加游戏:

  1. 拷贝 ROM 文件等

    • 游戏ROM通常是按照机型来分类在不同文件夹的,也可以按照喜好自行组织和命名文件夹。该文件夹命名很关键,之后缩略图资源等要和该文件夹命名保持一致。
    • 将游戏 ROM 文件夹拷贝到SD卡的根目录的ROM文件夹中。
    • 将游戏附带的各种资源的目录拷贝到/Retroarch目录下进行覆盖。
    • 如果没有该游戏类型的模拟器核心,需要先参照上文进行对应核心的安装。
  2. 尝试运行游戏

    • 游戏附带资源一般会附带palylist目录,拷贝安装后,就可以看到游戏列表。
    • 选择游戏列表中的游戏,点击运行,如果成功则结束游戏安装。
    • 如果没有附带游戏列表,或者游戏列表中的游戏点击后没反应、报错,则继续按照如下步骤,重新生成游戏列表。
  3. 在主菜单选择“导入”、“手动扫描”

    • 在Retroarch或Lakka的“主菜单”中,选择“导入”菜单,选择“手动扫描”选项。
    • 不推荐选择“扫描文件夹”选项。该选项会根据模拟器核心的数据库根据“游戏ROM名”进行匹配筛选,因为一般游戏ROM文件命名并不标准,从而会导致很多游戏无法导入。
  4. 指定扫描位置等

    • 选择要扫描的文件夹为游戏 ROM 文件夹。
    • 默认核心根据游戏ROM机型进行选择。如果不选择,则之后运行游戏时还需要手动再指定一次核心。
    • “递归扫描”默认保持开启。
    • “扫描压缩包内部”根据需要开启,比如NES核心不支持zip格式,对于以zip格式提供的NES ROM需要打开该选项,否则扫描不到游戏。
    • “覆盖现有列表”一般选择开启,这样可以覆盖掉原来的有问题的游戏列表。
    • 其他选项一般只需要保持默认值即可。
  5. 开始扫描

    • 确认选择后,RetroArch 将开始扫描指定的文件夹,查找所有支持的游戏 ROM,并将其添加到新建的游戏列表中。
    • 扫描完成后,就可以在 RetroArch 的游戏列表中看到新添加的游戏。
  6. 为另一个系统也添加游戏列表

    • Switch版Retroarch 和 Lakka 的根目录路径不一样,在一个系统操作完毕后需要再在另一个同样进行一遍游戏列表的添加操作。
    • 当添加的游戏列表比较多时,也可以使用复制游戏列表的方式:
      • 生成的游戏列表是playlists目录下同名的lpl文件,将该文件复制一份到另一个系统中,并批量替换其文件里的根目录路径为正确路径即可。
      • 有些低性能核心在Lakka系统中已经不存在,这些还需要将lpl文件的default_core_path、default_core_name字段更改为升级核心即可。
      • 主菜单选择“重启程序”之后生效。
  7. 修正游戏缩略图

    • 在Lakka系统中,可以在线更新缩略图资源,更新的是游戏封面、标题画面、游戏截图3图齐全。但是因为是根据游戏文件名进行数据库匹配,所以,大部分游戏都无法通过该方式匹配到。
    • 游戏资源一般会附带缩略图,即/retroarch/thumbnails下的文件夹,该图是根据文件名进行匹配的,如果没有正常显示则进行如下修正:文件夹名和游戏列表名保持一致,图片名和游戏名保持一致。
    • 对于游戏有子目录,且子目录内zip文件名和子目录名不一致,并且缩略图使用子目录名来命名的情况,使用下面的脚本进行修正。
    • 如果游戏文件名是缩写,而缩略图为正式游戏名等情况,无法统一处理,最好还是使用原游戏的游戏列表文件进行修改后使用,否则,只能手动一一重新命名label或缩略图,使2者一致。
    • 游戏资源没有附带缩略图资源,又想自己补全缩略图的,可以去 Lakka官方库 根据游戏机型、游戏名称来下载对应的缩略图,并按照上面所述来进行修正。

游戏列表文件的label命名修正脚本,对于游戏有子目录,且子目录内zip文件名和子目录名不一致,并且缩略图使用子目录名来命名的情况进行修正,将label名改为子目录名。
Lakka的SSH(以及Mac、Linux)适用,在playlists目录下新建fixLabelName.sh文件,将以下脚本内容粘贴到文件内,执行示例:./fixLabelName.sh CPS*.lpl MAME.lpl

#!/bin/sh# 函数处理单个文件
process_file() {local file="$1"echo "Now is: ${file}"awk 'BEGIN {inPath=0; inPrint=1}/"path": "/ {inPath=1;inPrint=0;print;gsub(/^[^{]*"path": "/, "", $0);gsub(/".*/, "");pathParts=split($0, parts, "/");newLabel=parts[pathParts-1];}inPath && /"label": "/ {gsub(/"label":.*/, "\"label\": \"", $0);print $0 newLabel "\",";inPath=0;inPrint=0;}inPrint {print}!inPrint {inPrint=1}' "$file" > "${file}.tmp" && mv "${file}.tmp" "$file"echo "Processed $file"
}# 主程序开始
if [ "$#" -eq 0 ]; thenecho "Usage: $0 file1 file2 ..."echo "Usage: $0 *.lpl"exit 1
fi# 遍历所有提供的文件模式,手动匹配并处理实际文件
for pattern in "$@"; do# 使用ls命令配合通配符列出文件,注意这种方式在特殊字符处理上可能有限制for file in $(ls -d "$pattern" 2>/dev/null); doif [ -f "$file" ]; thenprocess_file "$file"fidone
doneecho "All specified patterns have been processed."
添加特殊类型模拟游戏示例(尤其是Lakka中需要特别处理)
Dreamcast、NAOMI

需要BIOS配置,将该游戏附带的system文件夹覆盖到SD卡的/retroarch//lakka/storage/目录下。

如果已经在Switch版Retroarch中安装过,则可以在Lakka的SSH终端下执行如下命令进行复制:

# 拷贝Dreamcast的BIOS文件
cp -rf /flash/retroarch/system/dc* /storage/system/
# 拷贝NAOMI的BIOS文件
cp -rf /flash/retroarch/system/naomi* /storage/system/
PS

PS游戏所使用的CD映像,对应的格式是BIN+CUE。还需要检查cue文件的内容是否与bin名称匹配。

如果缺少CUE,可以这样创建它:

FILE "NameOfTheBin.bin" BINARYTRACK 01 MODE2/2352INDEX 01 00:00:00

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/852132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

msf原生shellcode迁移进程后如何获取攻击者ip

msf原生shellcode迁移进程后如何获取攻击者ip仅为ip及端口 木有图,看一下就晓得了 偶尔看到了这个问题,做了一些倒推测试之后得出来的结果 倒推过程 shellcode msf生成一段shellcode,产生的一组16进制数据 msfvenmon -p windows/meterpret…

Ubuntu下使用`sysbench`来测试CPU性能

使用 sysbench 来测试 CPU 性能是一个常见的方法。sysbench 是一个模块化的跨平台基准测试工具,常用于评估系统的各个组件(例如 CPU、内存、I/O 子系统等)的性能。 下面是如何使用 sysbench 来测试 CPU 性能的基本步骤: 1. 安装…

车载电子电气架构 - 智能座舱技术及功能应用

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

论文解读——《I2EDL: Interactive Instruction Error Detection and Localization》

一、研究背景 视觉与语言导航(VLN)是一个AI领域的研究任务,旨在开发能够按照自然语言指令在三维空间中导航到指定位置的智能体。这项任务与人类的日常活动——如按照口头指示到达某个地点——十分相似,对于推动人机交互的自然性和…

【学习笔记9】一些遇到的如何写code的问题

一、计算e(x): import math result math.exp(x)import numpy as np result np.exp(x)二、matplotlib.pyplot坐标无法显示中文: plt.rcParams[font.family] [sans-serif] plt.rcParams[font.sans-serif] [SimHei]三、matplotlib.pyplot横纵坐标无法…

【智能算法应用】基于混合粒子群-蚁群算法的多机器人多点送餐路径规划问题

目录 1.算法原理2.数学模型3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】粒子群算法(PSO)原理及实现 配餐顺序: 采用混合粒子群算法 || 路径规划: 采用蚁群算法 2.数学模型 餐厅送餐多机器人多点配送路径规划&…

配置应用程序的服务和请求处理管道 为啥要在starup而不再program中配置呢

配置应用程序的服务和请求处理管道通常在Startup类中完成,而不是在Program类中,主要基于以下原因: 关注点分离: Program.cs主要关注于应用程序的启动和宿主的构建。它负责初始化应用程序的主机,并设置基本的配置和启动…

linux系统——wget命令

wget命令可以用于下载指定的url地址文件,支持断点续传,支持ftp,http协议下载,在下载普通文件时,即使网络出现故障,依然会不断尝试下载 wget命令直接加url地址 使用-o参数可以将下载文件改名,-c…

【AI】DeepStream(11):deepstream-app源码详解(03)解析配置文件

【AI】AI学习目录汇总 上一篇:【AI】DeepStream(10):deepstream-app源码详解(02)配置文件格式详解 1、简述 deepstream-app的 txt 配置文件,为INI格式,使用 GLib 的 GKeyFile 来解析INI格式的配置文件。 2、解析 application 2.1 配置参数 [application] // 性能测…

python 循环导入(circular imports)解决方法

在 Python 中,大部分人都应该都遇到过循环导入的问题。 循环导入是指两个文件各自尝试导入另一个文件(模块),当一个模块没有完全初始化时会导致失败。解决这种情况的最好方法是将代码分层组织,这样导入的关系就会自然…

Java基础 - 多线程

多线程 创建新线程 实例化一个Thread实例,然后调用它的start()方法 Thread t new Thread(); t.start(); // 启动新线程从Thread派生一个自定义类,然后覆写run()方法: public class Main {public static void main(String[] args) {Threa…

AXI Quad SPI IP核中的STARTUPEn原语参数

启动STARTUPEn Primitive (原语)参数在 FPGA的主 SPI模式下非常有用。当你启用这个参数时,对于 7 系列设备,STARTUPE2 原语会被包含在设计中;而对于 UltraScale™ 设备,则是 STARTUPE3 原语。这些原语在 FP…

CentOS手工升级curl记

笔者一台服务器装有 CentOS 7.9 系统,运行 curl -V 查询 curl 的版本是 7.29,这个老版本的 curl 不支持 HTTP/2 协议。为了使 curl 能连接HTTP/2,curl 必须升级到至少7.46.0版本以上。查询 curl的官网得知当前最新版本是 8.8.0,然…

【ZZULIOJ】1104: 求因子和(函数专题)

题目描述 输入正整数n&#xff08;2<n<1000&#xff09;&#xff0c;计算并输出n的所有正因子(包括1&#xff0c;不包括自身)之和。要求程序定义一个FacSum ()函数和一个main()函数&#xff0c;FacSum ()函数计算并返回n的所有正因子之和&#xff0c;其余功能在main()函…

Kubernetes(K8s)从入门到精通系列之十九:Operator模式

Kubernetes K8s从入门到精通系列之十九&#xff1a;Operator模式 一、动机二、Operators in Kubernetes三、Operator示例四、部署Operator五、使用Operator六、编写自己的operator Operator 是 Kubernetes 的软件扩展&#xff0c;它利用自定义资源来管理应用程序及其组件。 Ope…

49. 简单数字加密

Description 实现一个加密函数&#xff0c;对输入的4位数字进行加密&#xff0c;并输出加密结果。加密规则如下&#xff1a; 对每一位数字都利用该数字对应的ASCII编码加上5&#xff0c;然后用除以10的余数代替该数字。将第一位和第四位交换&#xff0c;第二位和第三位交换。…

【智能算法应用】基于粒子群算法的多尺度Retinex图像去雾方法

目录 1.算法原理2.粒子群算法的多尺度Retinex图像去雾方法3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】粒子群算法&#xff08;PSO&#xff09;原理及实现 多尺度Retinex算法 在Retinex算法中&#xff0c;雾化图像的形成可以总结为入射光和反射光的乘积: I ( x…

第 3 章:Spring Framework 中的 AOP

第 3 章&#xff1a;Spring Framework 中的 AOP 讲完了 IoC&#xff0c;我们再来聊聊 Spring Framework 中的另一个重要内容——面向切面编程&#xff0c;即 AOP。它是框架中众多功能的基础&#xff0c;例如声明式事务就是依靠 AOP 来实现的。此外&#xff0c;Spring 还为我们…

代码详解工厂设计模式【2】

文章1暴露了简单工厂模式的一些局限性。为了解决这些问题&#xff0c;我们可以使用工厂方法模式&#xff0c;它更好地遵循了开闭原则&#xff08;对扩展开放&#xff0c;对修改封闭&#xff09;。在工厂方法模式中&#xff0c;我们为每种产品提供一个工厂类&#xff0c;这样就避…

创邻科技张晨:期待解锁图技术在供应链中的关联力

近日&#xff0c;创邻科技创始人兼CEO张晨博士受浙江省首席信息官协会邀请&#xff0c;参加数字化转型与企业出海研讨会。 此次研讨会旨在深入探讨数字经济时代下&#xff0c;企业如何有效应对成本提升与环境变化所带来的挑战&#xff0c;通过数字化转型实现提效增益&#xff…