Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/amjad50/trapezoid

PSX emulator powered with Vulkan and Rust
https://github.com/amjad50/trapezoid

emulator hacktoberfest psx rust vulkan

Last synced: about 1 month ago
JSON representation

PSX emulator powered with Vulkan and Rust

Awesome Lists containing this project

README

        

# Trapezoid

[![Build status](https://github.com/Amjad50/trapezoid/workflows/Rust/badge.svg)](https://actions-badge.atrox.dev/Amjad50/trapezoid/goto)
[![dependency status](https://deps.rs/repo/github/Amjad50/trapezoid/status.svg)](https://deps.rs/repo/github/Amjad50/trapezoid)
[![license](https://img.shields.io/github/license/Amjad50/trapezoid)](./LICENSE)
[![Crates.io trapezoid](https://img.shields.io/crates/v/trapezoid)](https://crates.io/crates/trapezoid)

**trapezoid** is a [PSX/PS1](https://en.wikipedia.org/wiki/PlayStation_(console)) emulator built from scratch using [Rust].

This is a personal project for fun and to experience emulating hardware and connecting them together.

## Showcase

demo

## Building and installation

### Installing
You can install `trapezoid` from [`crates.io`](https://crates.io/crates/trapezoid) using `cargo`:
```
cargo install trapezoid
```

### Building
If you want to experience the latest development version, you can build `trapezoid` yourself.
```
cargo build --release
```
> The emulator will be slow without optimization, that's why we have `opt-level = 2` in `debug` profile.

## Emulator core
The emulator core is implemented as a library in [`trapezoid-core`], this library is the emulator core, and contain
all the components. You can easily take the core and build a frontend around it, or use it as a server.

Check the [`trapezoid-core`] for more info and documentation.

## Frontend

### Controls
The Frontend implementations has its own controls mapping, this can be configured
if you decide to use [`trapezoid-core`] directly

#### Keyboard
| keyboard | PSX controller |
| --------- | -------------- |
| Enter | Start |
| Backspace | Select |
| Num1 | L1 |
| Num2 | L2 |
| Num3 | L3 |
| Num0 | R1 |
| Num9 | R2 |
| Num8 | R3 |
| W | Up |
| S | Down |
| D | Right |
| A | Left |
| I | Triangle |
| K | X |
| L | Circle |
| J | Square |

### Debugging
`trapezoid` has a built-in powerfull debugger to help debug games and access to data.

Check [DEBUGGER.md](./DEBUGGER.md) for more information.

#### VRAM

We can view the raw vram state, which you can think of as an image of 1024x512 pixels

This can be triggerd with the keyboard button `v`.

![vram](assets/psx_vram.png)

### Contributions and TODO
Check the [`trapezoid-core`] for more information about TODO items related to the emulator.

Also check the [issues](https://github.com/Amjad50/Trapezoid/issues).

Really appreciate any contributions. Thanks!

### License
This project is under [MIT](./LICENSE) license.

NES is a product and/or trademark of Nintendo Co., Ltd. Nintendo Co., Ltd. and is not affiliated in any way with Plastic or its author

### References
Most of the documentation for PSX components can be found in the [consoledev website](https://psx-spx.consoledev.net/)

[Rust]: https://www.rust-lang.org/
[`trapezoid-core`]: ./trapezoid-core/README.md