All Projects → VelocityRa → pctation

VelocityRa / pctation

Licence: MIT license
PlayStation emulator & debugger in C++17

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to pctation

POPS-binaries
PlayStation One Portable Station binaries for POPStarter
Stars: ✭ 68 (-33.98%)
Mutual labels:  ps1, playstation, sony
Duckstation
Fast PlayStation 1 emulator for x86-64/AArch32/AArch64
Stars: ✭ 2,888 (+2703.88%)
Mutual labels:  ps1, playstation, psx
CTR-tools
Crash Team Racing (PS1) tools - a C# framework by DCxDemo and a set of tools to parse files found in the original kart racing game by Naughty Dog.
Stars: ✭ 93 (-9.71%)
Mutual labels:  ps1, playstation, psx
pseudo-js
PLAYSTATION emulator in JavaScript
Stars: ✭ 76 (-26.21%)
Mutual labels:  mips, psx
kpspemu
PSP Emulator written in Kotlin for JVM, JS and Native. Can work as PWA.
Stars: ✭ 57 (-44.66%)
Mutual labels:  mips, emulation
PsxNewLib
Playstation controller interface library for Arduino
Stars: ✭ 81 (-21.36%)
Mutual labels:  playstation, sony
Provenance
iOS & tvOS multi-emulator frontend, supporting various Atari, Bandai, NEC, Nintendo, Sega, SNK and Sony console systems… Get Started: https://wiki.provenance-emu.com |
Stars: ✭ 4,732 (+4494.17%)
Mutual labels:  emulation, playstation
godot-psx-style-demo
Demo project featuring a collection of PS1 style shaders and materials for Godot engine.
Stars: ✭ 266 (+158.25%)
Mutual labels:  ps1, psx
nolibgs hello worlds
Collection of PsyQ basic examples NOT using libgs
Stars: ✭ 88 (-14.56%)
Mutual labels:  ps1, psx
PS1-Argonaut-Reverse
Harry Potter, Croc 2 (& Demo) PS1 Reverse Engineering (documentation & scripts)
Stars: ✭ 70 (-32.04%)
Mutual labels:  ps1, playstation
em400
MERA 400 emulator
Stars: ✭ 36 (-65.05%)
Mutual labels:  emulation
demo-emulator
Nintendo Game Boy emulator written in Go to be used in workshops about emulator programming
Stars: ✭ 41 (-60.19%)
Mutual labels:  emulation
apint
Arbitrary precision integers library.
Stars: ✭ 23 (-77.67%)
Mutual labels:  emulation
UTM
Virtual machines for iOS and macOS
Stars: ✭ 16,904 (+16311.65%)
Mutual labels:  emulation
zemu
Ledger Nano Emulation/testing framework
Stars: ✭ 28 (-72.82%)
Mutual labels:  emulation
angrylion-rdp-plus
A low-level N64 video emulation plugin, based on the pixel-perfect angrylion RDP plugin with some improvements.
Stars: ✭ 143 (+38.83%)
Mutual labels:  emulation
dust
A DS emulator written in Rust
Stars: ✭ 56 (-45.63%)
Mutual labels:  emulation
xavc rtmd2srt
Extract real time meta-data and GPS tracks from Sony XAVC video
Stars: ✭ 29 (-71.84%)
Mutual labels:  sony
dvcon download
Download proccedings from DVCon
Stars: ✭ 20 (-80.58%)
Mutual labels:  emulation
Percona-TokuBackup
No description or website provided.
Stars: ✭ 37 (-64.08%)
Mutual labels:  ps

pctation

pctation is a PlayStation (PS1/PSX) emulator written in C++17. While quite incomplete, it can run some commercial games.

Screenshots

Games

Crash Bandicoot

*graphical bug that makes Crash dark, haven't gotten around to fixing that yet

Ridge Racer

*graphical glitch in the game UI on race start

Aeon Flux

Deuce

Puzzle Bobble

Batman Forever - The Arcade Game

Debugger

VRAM view

There's the option of displaying the entire GPU (video) memory.

You can see in the above example (the game is Puzzle Bobble) that on the PS1, everything, including the framebuffer(s) reside in VRAM.

In this case and in most games you can see two framebuffers, because double-buffering is used.

Everything else shown in the above screenshot is either a texture (image applied to surfaces when rendering), or whatever other arbitrary data the game programmers have placed in VRAM.

Debug Windows

I prioritized the development of debug tools early on in the project and this helped solve various bugs along with Visual Studio's debugger and some good-old logging.

Debug windows implemented:

  • TTY Output Shows any test printed to the TTY console by the BIOS, Shell or app/game.
  • BIOS Function Calls Tracks any call to the BIOS and logs it, along with the arguments passed.
  • RAM Contents
    • RAM viewer. Editable.
  • GPU Registers
    • Displays the registers/state of the GPU.
  • CPU Registers
    • Basic CPU register viwer.
  • Timers
    • Registers/state of all 3 Timers (window not shown here)
  • GP0 (Drawing) Command Viewer
    • Shows details for every drawing command of every frame (cleared periodically, to preserve memory usage).
    • Details include things like draw position, texture coordinates, color, shading type, etc.
    • When a command is selected, the associated primitive (triangle/quad) pulses on the screen, so it can be determined without any hassle.

UI

The UI elements other than the debugger windows are the initial Game Select screen and the Settings dialog.

Game Select

Scans through game dumps or executables in the data/ directory (see "Usage" below).

Settings Dialog

User-tweakable settings.

Motivation

Apart from a basic Game Boy emulator, most of my experience in emulation development had been working on relatively HLE [1] emulators like Vita3K and RPCS3. This project stems from my curiosity in making an LLE [2] emulator from scratch.

It's also meant to serve as a thesis project for my BSc in Computer Engineering.

[1,2] The terms HLE/LLE are explained succinctly in this blog post.

Devlogs

I recorded a few short videos as I was making progress, here's the Youtube playlist.

Features

  • Hardware implemented (some items are incomplete)
    • CPU, with a fairly accurate MIPS I interpreter
    • GPU, using a software rasterizer
    • Geometry Transform Engine (GTE)
    • Memory mapping
    • CD-ROM
    • Digital Controller
    • Timers
    • Direct Memory Access (DMA) controller
  • UI
    • Immediate mode GUI using the excellent dear imgui library
    • CD-ROM Explorer (file explorer for CDROM images)
    • PSX-EXE Explorer (file explorer for raw executables like tests, homebrew or demoscene demos)
    • FPS & Emulation Speed metrics
    • Debug UI
      • TTY Output
      • BIOS Function Calls
      • RAM Contents
      • GPU Registers
      • CPU Registers
      • Timers
      • GP0 (Drawing) Command Viewer

Unimplemented

  • Audio
    • Sound processing unit (SPU) emulation is not implemented
  • Video playback
    • Motion Decoder (MDEC) emulation is not implemented
  • 24bit Direct display mode
    • Used for video playback and a few games while playing (ie. Heart of Darkness)
  • Cue sheet parsing
    • Metadata files that describe how the tracks of CD image are laid out.
  • Lots of more minor things

Usage

Put your bios in data/bios, CD-ROM game dumps (.iso/.bin, etc) in data/cdrom. Optionally put executables in data/exe or expansion slot binaries (ie. Caetla) in data/expansion. Then simply run the main executable.

Alternatively, run the following command to quickly start up a CD-ROM game dump without going to the Game Select screen.

pctation <cdrom_path>

where cdrom_path is a path to the main game binary.

Building

Windows

Run setup-windows.bat in the root directory.

Linux

Note: Untested

Run setup-linux.sh in the root directory.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].