allkern/iris
GitHub: allkern/iris
跨平台 PlayStation 2 模拟器,采用 Vulkan 硬件渲染并内置调试器,致力于完整模拟 PS2 及其衍生系统
Stars: 417 | Forks: 14
# 🐣 Iris
适用于 Windows、Linux 和 macOS 的 Sony PlayStation 2 模拟器
## 截图
## 用法
### GUI
导航至 `Iris > Open...` 并选择光盘镜像或 ELF 可执行文件,同时也支持拖放操作
### CLI
```
Usage: iris [OPTION]...
-b, --bios Specify a PlayStation 2 BIOS dump file
--rom1 Specify a DVD player dump file
--rom2 Specify a ROM2 dump file
-d, --boot Specify a direct kernel boot path
-i, --disc Specify a path to a disc image file
-x, --executable Specify a path to an ELF executable to be
loaded on system startup
--slot1 Specify a path to a memory card file to
be inserted on slot 1
--slot2 Specify a path to a memory card file to
be inserted on slot 2
-h, --help Display this help and exit
-v, --version Output version information and exit
```
## 功能特性
- 支持 ISO、BIN/CUE、CHD 和 CSO/ZSO 光盘镜像格式
- 硬件加速的 Vulkan GS 渲染器,支持高达 16x SSAA
- 功能丰富的调试器
- 易于使用的图形界面
- 支持游戏控制器及输入重映射
- 支持后处理着色器
## 构建
### Linux
在 Linux 上构建需要安装 SDL3 依赖项,如果希望生成 AppImages,还需要安装 FUSE。
```
sudo apt update
sudo apt upgrade
sudo add-apt-repository universe
sudo apt-get install build-essential git make \
pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \
libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \
libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \
libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \
libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev libfuse2t64
```
然后克隆仓库并运行 CMake:
```
git clone https://github.com/allkern/iris --recursive
cd iris
cmake -S . -B build
cmake --build build -j8
```
可以选择运行 `cmake --install build` 来生成 AppImage。
### Windows
我们目前在 Windows 上仅支持 GCC 作为编译器,这是因为 MSVC 没有内联汇编器,而我们需要它来将资源嵌入到可执行文件中。不过这个问题将来可能会得到解决!
```
git clone https://github.com/allkern/iris --recursive
cd iris
cmake -S . -B build -G "MinGW Makefiles"
cmake --build build -j8
```
### macOS
```
git clone https://github.com/allkern/iris --recursive
cd iris
cmake -S . -B build
cmake --build build -j8
```
可以选择运行 `sudo cmake --install build` 来生成 macOS App Bundle
## 进展/洞察
Iris 可以启动/运行相当多的商业游戏,但可玩性可能参差不齐,有些游戏运行相当流畅,而另一些则无法突破个位数的 FPS 大关,这是由于缺少 EE/VU JIT,这一问题将很快得到解决。
PlayStation 2 最多可以同时运行三个约 300 MHz 的处理器,加上运行在 33 MHz 的 IOP,这还不包括所有各自工作的不同外设/芯片,例如渲染大量图形的 GS、解码 MPEG-2 视频的 IPU、以 48 KHz 渲染多达 48 个 ADPCM 音频通道的 SPU2 等等。一旦将每帧所做的所有处理计算在内,您就会发现模拟该系统会变成一项相当复杂的任务。
为了缓解模拟 PS2 的艰难,我们有许多优化技术可供使用,其中一些已经实现:
- 调度(已完成)
- 软件 fastmem(已完成)
- EE 解释器缓存(已完成)
- 硬件加速 GS 渲染(已完成)
- EE JIT/Dynarec(即将推出)
- VU JIT/Dynarec(即将推出)
- 硬件 fastmem(最终会实现)
- 等等。
集成 Parallel-GS 是 Iris 的一个重要里程碑,现在我们需要致力于 EE 的 JIT 化。一旦完成,我预计模拟器将开始以可玩的速度运行更多游戏。
## 保存
Iris 旨在不仅模拟零售版 PlayStation 2,还模拟基于 PS2 的其他系统,例如 PSX DESR(日本 PS2/DVR 混合机型)以及所有或大多数基于 PS2 的街机系统,朝着这一目标的工作正在进行中,事实上,Iris 是第一个启动 [PSX DESR BIOS/bootrom](https://www.youtube.com/watch?v=YtsoRjofYKA) 的 PS2 模拟器。
为了模拟这些系统,需要实现一堆额外的硬件,例如 PSX DESR 上的板载闪存,以及所有 Namco 板上的 NAND 存储。这并非易事,而且缺乏文档使其成为一项相当艰巨的任务,但我们正在努力解决。
值得一提的是,PSX DESR 支持已合并到主分支中,这意味着您(我们要爱的用户)应该能够从您的 PSX DESR 机器中转储 BIOS 并在 Iris 上运行它。虽然运行启动动画后无法通过一些错误屏幕,但我认为这仍然很酷。
除了模拟基于 PS2 的其他系统外,Iris 还旨在支持零售系统的**所有**功能/能力,这包括经常被忽视的 DVD 播放器、PSBBN、Linux,以及最终支持所有可用的外部 USB/SIO 外设和输入/输出设备。
# 特别感谢与致谢
我要感谢 emudev Discord 服务器、Ziemas、Nelson (ncarrillo)、cakehonolulu、PSI-rockin、noumi 以及 PCSX2 团队的亲切支持。
本项目使用了以下第三方库:
- [ImGui](https://github.com/ocornut/imgui)
- [ImPlot](https://github.com/epezent/implot)
- [SDL3](https://github.com/libsdl-org/SDL)
- [SDL_GameControllerDB](https://github.com/mdqinc/SDL_GameControllerDB)
- [incbin](https://github.com/graphitemaster/incbin)
- [Parallel-GS](https://github.com/Arntzen-software/parallel-gs)
- [libchdr](https://github.com/rtissera/libchdr)
- [libdeflate](https://github.com/ebiggers/libdeflate)
- [lz4](https://github.com/lz4/lz4)
- [toml++](https://marzer.github.io/tomlplusplus/)
- [Portable File Dialogs](https://github.com/samhocevar/portable-file-dialogs)
- [stb_image](https://github.com/nothings/stb)
感谢这些库的开发者,没有你们出色的工作,Iris 就不可能诞生。
### 组件
与 PS1 相比,这台主机明显更加复杂,以下是组件的粗略列表:
```
🟡 EE (R5900) CPU
- 🟡 FPU
- 🟡 MMI (SIMD)
- 🟡 TLB
- 🟡 DMAC
- 🟢 INTC
- 🟡 Timers
- 🟢 GIF
- 🟡 GS
- 🟡 VU0
= 🟡 Macro mode
= 🟡 Micro mode
= 🟡 VIF0
- 🟡 VU1 (always micro mode)
= 🟡 VIF1
- 🟡 IPU
🟢 IOP (R3000) CPU
- 🟡 DMAC
- 🟢 INTC
- 🟡 Timers
- 🟢 CDVD
- 🟢 SIO2 (controllers and Memory Cards)
- 🟢 SPU2
- 🟡 DEV9
- 🟡 USB/FireWire?
- 🔴 Ethernet
- 🔴 PS1 backcompat (PS1 hardware)
🟢 SIF
```
标签:Bash脚本, BIOS加载, C++, DNS解析, ELF执行, Iris, ISO加载, Linux软件, macOS应用, PlayStation 2, PS2模拟器, ROM运行, UML, Windows软件, 仿真器, 图形用户界面, 复古游戏, 客户端加密, 开源项目, 怀旧游戏, 数据擦除, 游戏存档, 游戏机模拟, 硬件模拟, 系统仿真