
ProjectPSX 是原始 Sony Playstation (Playstation 1/PS1/PSX) 的 C# 编码模拟器
这是一个个人项目,旨在了解硬件和模拟器的开发。
ProjectPSX 不使用任何外部依赖项,并使用相当简单的 C# 代码。
目前已实施以下内容:
未实现的内容(但应该......):
注意:运行模拟器需要有效的 PlayStation Bios。 SCPH1001.BIN 是开发中的默认 BIOS,但据报道其他一些如 SCPH5501 或 SCPH7001 也可以工作。
没有兼容性列表。尽管有些游戏可能会出现随机问题,但许多游戏都会启动并进入游戏。我测试过的一些唤醒游戏有:《山脊赛车》、《恶魔城月下交响曲》、《最终幻想 7》、《古惑狼 1、2 和 3》、《小龙斯派罗》、《铁拳 1、2 和 3》、《Toshinden》、《时间危机》、《Tobal 1》和2、《流浪物语》、《街头霸王零式3》、《洛克人/洛克人8/X4》、《寄生前夜》、《合金装备》、《速成队》赛车...其他一些游戏如《最终幻想 IX》、《GT赛车》、《生化危机3》或《Marvel vs Capcom》启动,但都有随机问题需要修复。
注意:存储卡文件被硬编码到根目录中的“memcard.mcr”。如果没有,保存时会生成一个新的。
ProjectPSX 核心本身是一个无头库,没有依赖项。该解决方案附带 2 个附加项目 ProjectPSX.Winforms 和 ProjectPSX.OpenTK。 Winforms项目使用NAudio来输出声音。
使用 Winform 项目时,执行时会出现一个文件对话框提示。选择 Bin 文件(使用 track1)或 Cue 文件来生成 CD 轨道以馈送到 CDROM。
使用 OpenTK 项目时,只需将 bin/cue 文件拖放到窗口中即可。
BIOS 和扩展文件被硬编码在 BUS 类上。
上电后,输入映射为:






是的,你可以,但你不应该。还有很多其他功能更强大的模拟器。这是一个正在进行的个人项目,旨在了解模拟器和硬件实现。它可能并且将会在仿真过程中中断,因为有许多未实现的硬件功能。
这是 VRAM 查看器。它包括游戏机软件使用的所有纹理、颜色锁定表和显示缓冲区。它用于调试目的。您可以通过按键盘上的 TAB 来切换它。
可能是由于未实现硬件或不正确实现硬件,主要是 cdrom/dma/mdec 计时。
取消 CPU 主循环上的 BIOS.verbose() 或 TTY() 函数的注释。您还可以 dissasemble() MIPS CPU 指令和 printRegs() 当前操作码。
我对模拟硬件感兴趣已经有一段时间了。我开始制作 Java Chip8 和 C# Intel 8080 CPU(用于经典街机 Space Invaders)。后来我做了任天堂 Gameboy。我想继续做一些 3D,所以我最终选择了 PSX,因为它有一个很好的游戏库......
我主要使用了关于 Playstation 硬件的 Martin Korth PSX-SPX 文档,网址为 https://problemkaputt.de/psx-spx.htm 另外,#playstation 频道的 emudev 不和谐频道的人员 https://discord.gg/dkmJAes 是非常有帮助。
Winforms 对我来说是最简单的输出方式,因为它可以快速原型化。目前,UI 与核心分离,因此只要实现了 IHostWindow 接口,就可以添加任何窗口系统。还有一个关于在 Linux 上运行的解决方案的 OpenTK 项目。
在这个项目开始时,我是一个从事与编码无关的无聊工作的人。我不想一辈子都这样,所以我开始学习,试图改变职业。最终学会了(一点)并开始编写任何让我高兴的东西。最终找到了一份 Android 开发人员的工作...