# trapezoid-core
[](https://crates.io/crates/trapezoid-core)
[](https://docs.rs/trapezoid-core/latest/trapezoid-core/)
This is the core of a PSX emulator [`trapezoid`](https://github.com/Amjad50/trapezoid).
It contains all the components of a working emulator, the rest is a frontend.
You can create your own frontend for this project, or use it as a server.
## Components implemented
- CPU: Mips R3000A
- GPU: backed by [`vulkano`]. `i.e. for now, you need a project running vulkano to use this`.
- SPU: produce PCM frames that should be taken out regularly by the frontend.
- CDROM: can read the contents of a PSX CDROM, and can be used to load games
- Support XA-ADPCM audio.
- MDEC: Able to decode MDEC frames and play videos
- GTE: Geometry Transformation Engine
- DMA: Direct Memory Access
- Timers
- Interrupts
- Memory: Hosts the whole memory as a `Box<[u8]>` and provides access to it.
- Memory card: will save/load memcard to/from disk, it will save to the current folder.
- TODO: add API to control this
- Debugging: We have an API to easily create a debugger for this emulator. This is used by the frontend [`trapezoid`].
## TODO
- Multiple tracks in cdrom
- A better API, currently the API only expose what the frontend needs. and thus doesn't have access
to GPU, SPU, etc...
- Better docs for the API
- Add support for more CDROM formats
- Better control over audio channels
[`vulkano`]: https://github.com/vulkano-rs/vulkano
[`trapezoid`]: https://crates.io/crates/trapezoid