1 个不稳定版本

使用旧的 Rust 2015

0.0.3 2016年11月8日

#159仿真器

552 星 & 24 关注者

GPL-2.0+

570KB
13K SLoC

Build Status

此项目不再开发。

我决定从头开始,修复 Rustation 中的某些架构缺陷。一些代码已从该项目导入,其他部分已彻底重写。新的存储库是 rustation-ng。它现在比这个项目更先进,具有正确的声音支持和更准确的仿真。

两个项目之间一个显著的不同之处在于,rustation-ng 放弃了 GL 渲染器,转而使用线程化的软件渲染器。Rustation 的 GL 渲染器已移植到 C++ 并集成到 Beetle PSX 仿真器中,因此它并未完全消失。

Rustation PlayStation 仿真器

Rustation logo

Rust 程序设计语言编写的 PlayStation 仿真器。

此存储库仅包含仿真器核心的源代码。OpenGL 渲染器和 libretro 接口位于 rustation-libretro 存储库中。

此仿真器的重点是编写干净、准确且希望易于理解的代码。没有插件基础设施,仿真器是单块的。

目前性能相当差,但应该足以在现代 CPU 上接近实时运行。

目前只能启动一些游戏。Crash Bandicoot(日版)大部分可玩,尽管我遇到了随机崩溃。一些其他游戏(如 Spyro)在开场或开场之后冻结。

如果您有任何问题,特别是如果代码中的某些内容不清楚或没有适当注释,请毫不犹豫地填写问题。

我还创建了一个 /psx/ 论坛在 8chan,如果您更喜欢非正式地讨论此仿真器和所有与 PlayStation 相关的事情。我们将看看这会变成一个好主意...

当前实现(部分实现)

Crash Bandicoot (Japan)

  • CPU
  • 基本 GTE 支持(从 mednafen PSX 移植过来)
  • 指令缓存
  • 中断
  • 基本 GPU(没有半透明或掩码位仿真)
  • 定时器(不完整)
  • DMA
  • 调试器
  • CDROM 控制器(缺少许多命令)
  • 游戏手柄控制器(目前只有数字垫)

待办事项列表

  • GPU 中许多内容
  • MDEC
  • SPU
  • 内存卡
  • CPU流水线仿真
  • 更精确的时间控制
  • 许多、许多其他事项...

构建

您需要Rust及其包管理器CargoSDL2和PlayStation BIOS。该仿真器主要使用BIOS版本SCPH1001进行测试,其SHA-1值为10155d8d6e6e832d6ea66db9bc098321fb5e8ebf

然后您应该可以使用以下命令构建仿真器:

cargo build --release

别忘了使用--release标志来开启优化。没有这些优化,生成的二进制文件将会非常慢。

如果构建成功,您可以使用以下命令运行仿真器:

cargo run --release /path/to/SCPH1001.BIN

对于Windows,请查看问题#12

使用Escape键退出仿真器,使用Pause/Break键“中断”到调试器,仿真器将在TCP端口9001上监听GDB连接。

调试器

为了调试,您需要一个针对mipsel-unknown-elf的GDB。一旦仿真器运行,按下Pause/Break键来触发调试器,然后使用以下命令通过GDB连接到它(在gdb命令提示符下):

target remote localhost:9001

GDB可能会抱怨找不到符号或当前函数的边界,但您可以忽略这些。从那时起,您应该可以使用熟悉的GDB命令来调试正在运行的仿真器。

一些示例

# Dump the CPU registers
info registers
# Disassemble 20 instructions around PC
disassemble $pc-40,+80
# Display word at address 0x1f801814 (GPU status)
x/x 0x1f801814
# Add code breakpoint at address 0x00004588
break *0x00004588
# Add write watchpoint at address 0x1f801070 (IRQ ack)
watch *0x1f801070
# Step over a single instruction
stepi
# Continue until a break/watchpoint is reached (or Pause/Break is pressed)
continue

调试支持相当实验性和不稳定,但对于基本的调试需求来说它是可行的。

指南

我还在尝试用LaTeX文档记录仿真器的编写过程,该文档可在psx-guide存储库中找到。它通常落后于实际代码,但我将尽量经常更新它。

资源

我在上面的指南中尽量引用了所有来源,但我主要使用无价的No$ PSX规范以及当我觉得需要作弊时,使用mednafen的源代码。

我还对真实硬件进行了测试,并将它们存储在psx-hardware-tests存储库中。

依赖关系

~1MB
~16K SLoC