stenzek/duckstation

GitHub: stenzek/duckstation

一款跨平台高性能 PlayStation 1 模拟器,注重精确度与可玩性平衡。

Stars: 9796 | Forks: 886

# DuckStation - PlayStation 1,即 PSX 模拟器 [功能](#features) | [下载与运行](#downloading-and-running) | [构建](#building) | [免责声明](#disclaimers) **Windows 10/11 (x64/ARM64)、Linux (AppImage x64/ARM32/ARM64) 和 macOS (13.3+ Universal) 的最新构建版本:** https://github.com/stenzek/duckstation/releases/tag/latest **Discord 服务器:** https://www.duckstation.org/discord.html DuckStation 是 Sony PlayStation(TM) 主机的模拟器,专注于可玩性、速度和长期的可维护性。其目标是在保持针对低端设备性能的同时,尽可能做到精确。我们不鼓励使用“Hack(修改/作弊)”选项,默认配置应支持所有可玩游戏,仅部分增强功能可能存在兼容性问题。 启动模拟器和游戏需要 PS1 或 PS2 的“BIOS”ROM 镜像。你可以使用任何硬件版本或区域的镜像,尽管游戏区域与 BIOS 区域不匹配可能会导致兼容性问题。出于法律原因,模拟器未提供 ROM 镜像,你应该使用 Caetla 或其他手段从自己的主机中转储该文件。 ## 功能 DuckStation 具有使用 Qt 构建的功能齐全的前端,以及基于 Dear ImGui 的全屏/电视 UI。

Main Window Screenshot Fullscreen UI Screenshot

其他功能包括: - CPU Recompiler/JIT(x86-64, armv7/AArch32, AArch64, RISC-V/RV64)。 - 支持 D3D11、D3D12、OpenGL、Vulkan 和 Metal API 的硬件渲染器。 - 硬件渲染器中的升级渲染、纹理过滤和真彩色(24-bit)。 - PGXP,用于几何精度、纹理校正和深度缓冲仿真。 - 通过 Rasterizer Order Views/Fragment Shader Interlock 实现精确混合。 - 硬件渲染器中的纹理替换系统。 - 向量化和多线程软件渲染器。 - 运动自适应去隔行。 - 自适应下采样滤波器。 - 针对纵向或“TATE”射击游戏的屏幕旋转。 - 后处理着色器链(GLSL, Reshade FX 和 Slang Presets)。 - 游戏内容周围显示的边框叠加/边框。 - “快速启动”,用于跳过 BIOS 启动画面/简介。 - 存档状态支持,具有超前运行和回溯功能。 - 支持 Windows、Linux、macOS。 - 支持直接从 CD、bin/cue 镜像、MAME CHD、单轨 ECM、MDS/MDF、CCD 和未加密的 PBP 格式读取。 - 将光盘镜像预加载到 RAM 以避免磁盘休眠卡顿。 - 在游戏列表/网格中合并多光盘游戏,并在光盘间共享记忆卡。 - 自动加载/应用 PPF 补丁。 - 直接启动自制可执行文件。 - 直接加载 Portable Sound Format (psf) 文件。 - 在非 100% 速度运行时进行音频时间拉伸。 - 数字和模拟控制器输入(震动会转发给主机)。 - GunCon 和 Justifier 光枪支持(用鼠标模拟)。 - NeGcon 支持。 - 控制器预设和逐游戏配置。 - Qt 和“Big Picture” UI。 - 自动更新,提供预览版和最新版通道。 - 自动内容扫描 - 游戏标题/哈希由 redump.org 提供。 - 每个游戏可选的自动切换记忆卡。 - 支持从现有列表加载作弊码。 - 记忆卡编辑器和存档导入器。 - 模拟 CPU 超频。 - 集成和远程调试。 - 多分插控制器(最多 8 个设备)。 - RetroAchievements。 - Discord Rich Presence。 - 使用 Media Foundation (Windows) 和 [FFmpeg](https://www.ffmpeg.org/)(所有平台)后端进行视频捕获。 - 自由视角功能。 - 并行端口卡带模拟。 ## 系统要求 - CPU 速度要快。但需要是 x86_64、AArch32/armv7、AArch64/ARMv8 或 RISC-V/RV64。 - 支持 OpenGL 3.1/OpenGL ES 3.1/Direct3D 11 Feature Level 10.0/Vulkan 1.0 的 GPU。基本上是过去 10 年左右制造的任何产品。 - 兼容 SDL、XInput 或 DInput 的游戏控制器(例如 XB360/XBOne/XBSeries)。Windows 上的 DualShock 3 用户需要安装作为 PlayStation Now 一部分的官方 DualShock 3 驱动程序。 ## 下载与运行 适用于 Windows x64/ARM64、Linux x86_64/ARM32/ARM64(AppImage 格式)和 macOS Universal Binaries 的 DuckStation 二进制文件可通过 GitHub Releases 获取,并会在每次提交/推送时自动构建。 根据 CC-BY-NC-ND 的条款,允许重新分发**未修改的发布版本和代码**。但是,我们更希望你链接到 https://www.duckstation.org/。请注意,预配置的设置和包被视为修改。 对于 x86 机器(大多数系统),你需要支持 SSE4.1 指令集的 CPU 才能运行“普通”版本。这包括 2007 年后制造的所有 Intel CPU,以及 2011 年后制造的 AMD CPU。如果你的 CPU 更老,则需要从发布页面下载“SSE2”版本,其性能较低但仍支持这些 CPU。 由于自动更新程序的限制,主要发布页面仅限于最近 30 个版本。较旧的版本可以从 https://github.com/duckstation/old-releases/releases 下载。 ### 更新通道 DuckStation 的自动更新程序有两个通道:“Stable(稳定版)”和“Preview(预览版)”。 - “Stable Releases”:更新频率较低,跟踪 GitHub 上的“latest”发布版本。此通道中的版本经过了更多测试。 - “Preview Releases”:在向存储库推送提交时构建,跟踪 GitHub 上的预发布版本。此通道包含经过最少测试的构建,可能包含 Bug 或问题。 默认情况下,更新程序将跟踪你下载的通道。你可以在 `Settings -> Interface -> Updates` 中更改通道。 ### Windows DuckStation **要求** Windows 10/11,特别是版本 1809 或更新版本。如果你仍在使用 Windows 7/8/8.1,DuckStation **将无法**在你的操作系统上运行。在 2026 年运行这些操作系统应被视为安全风险,我建议更新到接收供应商支持的系统。 如果你必须使用较旧的操作系统,[v0.1-5624](https://github.com/duckstation/old-releases/releases/tag/v0.1-5624) 是可以运行的最后一个版本。但不要指望获得任何帮助,这些版本不再受支持。 Windows 构建以两种格式提供: - **安装程序 (.exe,推荐):** 将 DuckStation 解压到你的用户本地程序目录的安装程序,并可选择创建开始菜单/桌面快捷方式。 - **存档 (.zip):** 包含预构建二进制文件的 zip 存档。如果你想要“便携式”安装,或者不想运行安装程序,请选择此选项。 要使用安装程序,只需从发布页面下载安装程序,运行它,然后按照提示操作。 - 直接下载链接:https://github.com/stenzek/duckstation/releases/download/latest/duckstation-windows-x64-installer.exe - ARM64 下载链接(Snapdragon 笔记本电脑):https://github.com/stenzek/duckstation/releases/download/latest/duckstation-windows-arm64-installer.exe - 旧版 SSE2 安装程序(适用于 2008 年前的 CPU):https://github.com/stenzek/duckstation/releases/download/latest/duckstation-windows-x64-sse2-installer.exe 安装程序仍是一项新功能,因此如果你遇到问题,请通过 Discord 告知我们。 要使用存档或便携式安装,请按照以下步骤操作: 1. 下载 https://github.com/stenzek/duckstation/releases/download/latest/duckstation-windows-x64-release.zip。如果你有 Snapdragon 等 ARM64 Windows 机器,请改为下载 `duckstation-windows-arm64-release.zip`。 2. 将存档**解压到子目录**。存档没有根子目录,因此如果不解压到子目录,解压到当前目录会将一堆文件丢在你的下载目录中。 3. 如果你想要便携式安装(请参阅 [用户目录](#user-directories)),请在可执行文件所在的同一目录中创建一个名为 `portable.txt` 的空文件。 4. 下载并解压后,你可以使用 `duckstation-qt-x64-ReleaseLTCG.exe` 启动模拟器。按照设置向导开始操作。 **如果你收到关于缺少 `vcruntime140_1.dll` 的错误,你需要更新 Visual C++ 运行时。** 你可以从此页面进行更新:https://support.microsoft.com/en-au/help/2977003/the-latest-supported-visual-c-downloads。具体来说,你需要 x64 运行时,可以从 https://aka.ms/vs/17/release/vc_redist.x64.exe 下载。 ### Linux DuckStation 以 AppImage 格式提供适用于 x86_64/ARM32/ARM64 Linux 的版本。 #### AppImage AppImage 需要相当于 Ubuntu 22.04 或更新版本的发行版才能运行。 1. 下载 https://github.com/stenzek/duckstation/releases/download/latest/DuckStation-x64.AppImage。如果你有 ARM64 Linux 机器,你应该下载 `DuckStation-arm64.AppImage`。 2. 对下载的 AppImage 运行 `chmod a+x` —— 执行此步骤后,AppImage 可以像典型的可执行文件一样运行。或者,在你选择的文件管理器中,通过文件属性对话框启用执行权限。 3. 首次运行 AppImage 时,它会提示创建启动器快捷方式。 如果你之前使用的是 Flatpak 包,要将数据从 Flatpak 迁移到 AppImage,你可以运行以下命令: ``` mv ~/.var/app/org.duckstation.DuckStation/config/duckstation ~/.local/share ``` 切换到 AppImage 后,你需要重新添加游戏目录。 ### macOS 通用的 macOS 构建同时适用于 x86_64 (Intel) 和 ARM64 (Apple Silicon)。 需要 macOS Ventura (13.3),因为这也是 Qt 的最低要求。 下载方法: 1. 下载 https://github.com/stenzek/duckstation/releases/download/latest/duckstation-mac-release.zip。 2. 通过双击解压 zip。 3. 打开 `DuckStation.app`,可以选择先将其移动到你想要的位置。 如果你收到关于应用来自身份不明开发者的消息: 1. 打开系统设置 -> 隐私与安全性,或在搜索栏中输入“Gatekeeper”。 2. 在“安全性”部分下,应该有一条关于 DuckStation 被阻止的消息。点击“仍要打开”。 遗憾的是,这是必需的,因为 Apple 要求应用必须经过代码签名才能在没有警告的情况下运行,而我没有代码签名证书,因为对于一个零收入的项目来说,年度费用是无法承受的。 ### Android 你需要具有 armv7 (32-bit ARM)、AArch64 (64-bit ARM) 或 x86_64 (64-bit x86) 的设备。首选 64 位,32 位的要求更高,你可能至少需要 1.5GHz 的 CPU。 从 Google Play 下载:https://play.google.com/store/apps/details?id=com.github.stenzek.duckstation **不对 Android 应用提供支持**,它是免费的,你的期望应与此相符。请**不要**给我发送关于它的电子邮件,或寻求帮助,你将被忽略。 使用方法: 1. 首次安装并运行该应用。 2. 按照设置向导操作。 如果你有外部控制器,则需要在设置中映射按钮和摇杆。 ### LibCrypt 保护和 SBI 文件 许多 PAL 区域游戏使用 LibCrypt 保护,需要额外的 CD 子通道信息才能正常运行。libcrypt 功能失常通常表现为挂起或崩溃,但有时也会影响游戏玩法,具体取决于游戏的实现方式。 对于这些游戏,请确保 CD 镜像及其对应的 SBI (.sbi) 文件具有相同的名称,并放置在同一目录中。当在 CD 镜像旁边发现 SBI 文件时,DuckStation 将自动加载它。 例如,如果你的光盘镜像名为 `Spyro3.cue`,你可以将 SBI 文件放在同一目录中,并将其命名为 `Spyro3.sbi`。 也支持具有内置子通道信息的 CHD 镜像。 如果你直接从光盘玩游戏,并且你的 CD/DVD 驱动器不支持子通道读取,或者返回的 SubQ 有偏差,你可以将 SBI 文件放在用户目录下的 `subchannels` 目录中,文件名为游戏的序列号或标题。 ### 作弊码和补丁数据库 DuckStation 附带内置的作弊码和补丁数据库,均由社区提供。欢迎在 https://github.com/duckstation/chtdb 贡献内容。 每个版本都包含最新版本的数据库,但是你也可以手动更新到最新版本。 ## 构建 ### Windows 要求: - 安装了“Desktop development with C++”工作负载的 Visual Studio 2026 或更新版本。 1. 克隆存储库:`git clone https://github.com/stenzek/duckstation.git`。 2. 从 https://github.com/duckstation/dependencies 下载依赖包。你需要 `deps-windows-x64.7z` 文件,如果你想交叉编译 ARM64,还需要 `deps-windows-arm64.7z`。将这些存档解压到 `dep\prebuilt。 3. 打开根目录中的 Visual Studio 解决方案 `duckstation.sln`(推荐),或“打开文件夹”进行 CMake 构建(不推荐/不支持)。 4. 构建解决方案。 5. 二进制文件位于 `bin/x64`。 6. 运行 `duckstation-qt-x64-Release.exe` 或你使用的任何配置。 ### Linux #### 必需的依赖项 Ubuntu/Debian 软件包名称: ``` autoconf automake build-essential clang cmake curl extra-cmake-modules git libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdecor-0-dev libegl-dev libevdev-dev libfontconfig-dev libfreetype-dev libgtk-3-dev libgudev-1.0-dev libharfbuzz-dev libinput-dev libopengl-dev libpipewire-0.3-dev libpulse-dev libssl-dev libudev-dev libwayland-dev libx11-dev libx11-xcb-dev libxcb1-dev libxcb-composite0-dev libxcb-cursor-dev libxcb-damage0-dev libxcb-glx0-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-present-dev libxcb-randr0-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-shape0-dev libxcb-shm0-dev libxcb-sync-dev libxcb-util-dev libxcb-xfixes0-dev libxcb-xinput-dev libxcb-xkb-dev libxext-dev libxkbcommon-x11-dev libxrandr-dev libxss-dev libtool lld llvm nasm ninja-build pkg-config zlib1g-dev ``` Fedora 软件包名称: ``` alsa-lib-devel autoconf automake brotli-devel clang cmake dbus-devel egl-wayland-devel extra-cmake-modules fontconfig-devel gcc-c++ gtk3-devel libavcodec-free-devel libavformat-free-devel libavutil-free-devel libcurl-devel libdecor-devel libevdev-devel libICE-devel libinput-devel libSM-devel libswresample-free-devel libswscale-free-devel libX11-devel libXau-devel libxcb-devel libXcomposite-devel libXcursor-devel libXext-devel libXfixes-devel libXft-devel libXi-devel libxkbcommon-devel libxkbcommon-x11-devel libXpresent-devel libXrandr-devel libXrender-devel libXScrnSaver-devel libtool lld llvm make mesa-libEGL-devel mesa-libGL-devel nasm ninja-build openssl-devel patch pcre2-devel perl-Digest-SHA pipewire-devel pulseaudio-libs-devel systemd-devel wayland-devel xcb-util-cursor-devel xcb-util-devel xcb-util-errors-devel xcb-util-image-devel xcb-util-keysyms-devel xcb-util-renderutil-devel xcb-util-wm-devel xcb-util-xrm-devel zlib-devel ``` #### 构建 1. 克隆存储库:`git clone https://github.com/stenzek/duckstation.git`,`cd duckstation`。 2. 从 https://github.com/duckstation/dependencies 下载依赖包。你需要 `deps-linux-x64.tar.xz` 文件,如果你想交叉编译 ARM,还需要交叉变体。将这些存档解压到 `dep\prebuilt`。 3. 运行 CMake 以配置构建系统。假设构建子目录为 `build-release`,运行 `cmake -B build-release -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_MODULE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_SHARED_LINKER_FLAGS_INIT="-fuse-ld=lld" -G Ninja`。如果你想要发布(优化)构建,请包含 `-DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON`。 4. 编译源代码。对于上面的示例,运行 `ninja -C build-release` 5. 运行二进制文件,位于构建目录下的 `./build-release/bin/duckstation-qt`。 ### macOS 要求: - CMake - Xcode 1. 克隆存储库:`git clone https://github.com/stenzek/duckstation.git`。 2. 从 https://github.com/duckstation/dependencies 下载依赖包。你需要 ` deps-macos-universal.tar.xz` 文件。将存档解压到 `dep\prebuilt`。 3. 运行 CMake 以配置构建系统:`cmake -Bbuild-release -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON`。 4. 编译源代码:`cmake --build build-release --parallel`。 5. 运行二进制文件,位于构建目录下的 `bin/DuckStation.app`。 ## 用户目录 “用户目录”是你应该放置 BIOS 镜像的地方,设置保存在这里,记忆卡/存档状态默认也保存在这里。 也可以在此处放置可选的 [SDL 游戏控制器数据库文件](#sdl-game-controller-database)。 根据你使用的平台,它位于以下位置: - Windows: `AppData\Local\DuckStation`(旧安装将使用 `Documents\DuckStation`)。 - Linux: `$XDG_DATA_HOME/duckstation` 或 `~/.local/share/duckstation`。 - macOS: `~/Library/Application Support/DuckStation`。 因此,如果你使用的是 Linux,则应将 BIOS 镜像放在 `~/.local/share/duckstation/bios` 中。该目录将在首次运行 DuckStation 时创建。 如果你希望使用“便携式”版本,即用户目录与可执行文件所在的目录相同,请在 DuckStation 可执行文件所在的同一目录中创建一个名为 `portable.txt` 的空文件。 可以通过从 `Tools` 菜单中选择 `Open Data Directory` 来使用打开用户目录的快捷方式。 DuckStation 允许你通过将文件放在用户目录的 `resources` 子目录中来覆盖某些资源。这包括图像和音效(例如菜单导航/成就解锁)。请参阅 https://github.com/stenzek/duckstation/wiki/Resource-Overrides 获取更多信息。 ## Qt 前端绑定 你的键盘或游戏控制器可用于模拟各种 PlayStation 控制器。控制器输入通过 DInput、XInput 和 SDL 后端支持,可以通过 `Settings -> Controllers` 进行更改。 要绑定你的输入设备,请转到 `Settings -> Controllers`,然后选择要映射的虚拟控制器。自动映射可处理大多数控制器。但是,如果你需要手动绑定控制器,请单击按钮/轴名称下方的框,然后在输入设备上按下希望绑定的按键或按钮。 ## SDL 游戏控制器数据库 DuckStation 版本附带了 SDL 控制器后端的游戏控制器映射数据库,由 https://github.com/mdqinc/SDL_GameControllerDB 提供。包含的 `gamecontrollerdb.txt` 文件可以在 DuckStation 程序目录的 `resources` 子目录中找到。 如果你在使用 SDL 控制器后端绑定控制器时遇到问题,可能需要向数据库文件添加自定义映射。复制 `gamecontrollerdb.txt` 并将其放在你的[用户目录](#user-directories)(如果是便携模式运行,则直接放在程序目录中)中,然后按照 [SDL_GameControllerDB 存储库](https://github.com/mdqinc/SDL_GameControllerDB)中的说明创建新映射。将此映射添加到 `gamecontrollerdb.txt` 的新副本中,你的控制器应该会被正确识别。 ## 默认绑定 控制器和热键的绑定可以在 `Settings -> Controllers` 中更改。 控制器 1: - **左摇杆:** W/A/S/D - **右摇杆:** T/F/G/H - **方向键:** 上/左/下/右 - **三角/方块/圆圈/叉:** I/J/L/K - **L1/R1:** Q/E - **L2/R2:** 1/3 - **L3/R3:** 2/4 - **Start:** 回车键 - **Select:** 退格键 热键: - **Escape:** 打开暂停菜单 - **F1:** 加载存档 - **F2:** 保存存档 - **F3:** 选择上一个存档 - **F4:** 选择下一个存档 - **F10:** 保存截图 - **F11:** 切换全屏 - **Tab:** 暂时禁用速度限制器 - **空格键:** 暂停/恢复模拟 ## 免责声明 图标由 icons8 提供:https://icons8.com/icon/74847/platforms.undefined.short-title “PlayStation”和“PSX”是 Sony Interactive Entertainment Europe Limited 的注册商标。本项目与 Sony Interactive Entertainment 没有任何关联。
标签:AArch64, Bash脚本, BIOS, C++, CPU 重编译器, Dear ImGui, Direct3D 11, Direct3D 12, DNS解析, DuckStation, JIT 编译器, Metal, OpenGL, PGXP, PlayStation 1 模拟器, PSX 模拟器, RISC-V, ROM, Vulkan, x86-64, 低延迟, 图形增强, 复古游戏, 开源项目, 数据擦除, 游戏保藏, 游戏机模拟, 硬件渲染, 纹理替换, 高帧率