Tesseract is an early Sony PlayStation emulator. It's not yet ready for public use.
It was meant to be a series of patches to the ares/higan emulator by Near. I wanted to get his PSX/N64 cores to a point of playing most games at full speed. But it required making changes and tradeoffs that went against the upstream higan-emu project goals. I respect that, so I'm releasing this code in the hopes it's useful to someone else, or that some parts of it can be merged upstream. I tried to match the higan coding style as much as possible to facilitate that but there may be some differences.
I've also set up https://ps1.asuramaru.com to document the PSX hardware as I go along, and this project is meant as a learning experience.
- a dynamic CPU recompiler was added
- all known GTE bugs were fixed, and amidog-GTE now passes save for timing tests
- the GPU renderer has been massively sped up by using deltas
- the GPU and the video blitter have been multi-threaded for a large speedup
- the MDEC unit was emulated
- memory cards have been emulated
- CD-XA audio playback support was added
- the missing CD-ROM controller commands were added
- the debugger was extended with more features like function call logging
- save state support was added
- lots of bugfixes and timing improvements were added
The ares v115 release only booted one or two games at 30fps and played none. With Tesseract, most games are now fully playable at 100fps on average. But there is still a long way to go, both for compatibility and performance.
Where do we go from here?
I don't know how to debug the issues that remain in games. Some examples:
- no sound effects in Crash Bandicoot
- Spyro the Dragon and Wild ARMs require different, incompatible controller delays to work
I'm hoping someone can help either with fixing bugs or teaching me how to fix them. In return, I commit to documenting these issues for future PSX emudevs.
If you can help me, please submit pull requests or get in touch!
Where can I reach you?
- @asuramaru on GitHub
- @asuradevu on Twitter
- Asura on the emudev Discord
Where are the binaries?
I don't know how to set up CI/CD yet, and it's not ready for public use, so for now it's source only. To compile it, go into tesseract-hiro and run make. You may need to install some third-party libraries first.
Tesseract was tested on Windows and Linux, but should also work on macOS and the BSDs.
You will need an official Sony PlayStation BIOS to use Tesseract. There is no BIOS HLE at this time.
Where are the other cores?
Aside from the PSX and N64 cores, I broke them when adding multi-threading support. I don't want to maintain 14 emulator cores in a fork by myself, so for now they're removed. If higan-emu merges my threading support, I'll get them working there and then include them with Tesseract, but for now they're gone.
What about the N64 core?
For right now it's just there but disabled. I got it working with angrylion, but it's license incompatible and I can't include it. It is too slow anyway. If I ever feel done with the PSX I might work on the N64 a bit, but don't count on it. I'm including it since I ported the threading code and save states to it.
I will accept pull requests though. What I need most is a hardware accelerated renderer.
What about the license?
I merged some patches from higan-emu which is under the GPLv3+, so I made Tesseract licensed under the GPLv3+ rather than the original ares ISC license.
What about the GUIs?
The current GUI is tesseract-hiro, which is forked from ares-lucia. My changes broke ares-luna (the GUI used by higan-emu), so it's been removed for now. Like the other cores, I don't want to maintain multiple GUIs alone.
I've been experimenting a bit with Dear Imgui, in the hopes I can make a more robust debugger, but the amount of work to create an entire GUI is a little overwhelming for me, so right now it doesn't do anything.