rustation, 在 Rust 编程语言中,ps 模拟器

分享于 

5分钟阅读

GitHub

  繁體 雙語
Playstation emulator in the Rust programing language
  • 源代码名称:rustation
  • 源代码网址:http://www.github.com/simias/rustation
  • rustation源代码文档
  • rustation源代码下载
  • Git URL:
    git://www.github.com/simias/rustation.git
    Git Clone代码到本地:
    git clone http://www.github.com/simias/rustation
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/simias/rustation
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    Build Status

    Rustation 模拟器

    Rustation logo

    Rust 编程语言中的ps 模拟器。

    这个库只包含 模拟器 核心的源代码。 OpenGL渲染器和libretro接口是 rustation-libretro 存储库。

    这个 模拟器的重点是编写干净。准确和易于理解的代码。 没有插件基础设施,模拟器 是整体的。

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

    因为当时它只能引导一些游戏。 崩溃 Bandicoot ( 日语版本) 几乎可以播放,虽然我有随机崩溃。 一些其他游戏( 像 Spyro ) 在介绍之后或者期间冻结。

    如果你有任何问题,特别是如果代码中的某些内容没有明确或者正确注释,请填写一个问题。

    如果你喜欢一些不太正式的讨论,我也会在 8chan 上创建一个 /psx/板,并且所有的游戏都可以用它来讨论。 我们会看到这是否是个好主意。

    目前实现( 甚至部分)

    Crash Bandicoot (Japan)

    • CPU
    • 基本GTE支持( 从 mednafen PSX移植)
    • 指令高速缓存
    • 中断
    • 基本 GPU ( 无半透明或者掩模位仿真)
    • 计时器( 不完整)
    • DMA
    • 调试程序
    • CDROM控制器( 缺少多个命令)
    • 游戏手柄控制器( 目前只有数字小键盘)

    待办事项列表

    • GPU中的许多东西
    • MDEC
    • SPU
    • 内存卡
    • CPU管道仿真
    • 更精确的计时
    • 很多其他的。

    插件生成

    你需要 Rust 及其软件包管理器 Cargo,SDL2 和 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连接。

    命令行调试器

    为了调试,你需要一个GDB启动 mipsel-unknown-elf。 运行 模拟器 之后按 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
    
    
    
    

    调试器支持非常实验和 quircky,但它适用于基本调试需要。

    指南

    在 模拟器 中,我还尝试将写入过程记录在psx指南库中可用的一个 LaTeX 文档中。 它通常滞后于实际代码,但我将尽可能频繁地更新它。

    资源

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

    我还在实际硬件上运行测试并将它们存储在 psx-hardware-tests存储库中。


    play  LAN  LANG  RUST  playstation  
    相关文章