# ProjectPSX  **ProjectPSX is a C# coded emulator of the original Sony Playstation (Playstation 1/PS1/PSX)** *This is a personal project with the scope to learn about hardware and the development of emulators.* ProjectPSX dosn't use any external dependency and uses rather simplistic C# code. At the moment the following is implemented: - CPU (MIPS R3000A) with the Coprocessor 0 and Geometry Transformation Engine (GTE) Coprocessor. - A BUS to interconnect the components. - GPU with all the commands implemented with a software polygonal rasterizer. - CDROM: Implemented the common commands. - DMA transfers. - Timers. - Digital controller support (currently hardcoded to keyboard). - A basic BIOS and MIPS disassembler. - MDEC for video decoding 16/24 bpp FMV. - Display Screen with 24 bpp support. - Memory Card support. - SPU (Reverb is not supported) What is not implemented (but should be...): - DMA resumable transfers - CDROM: Proper timmings. > **Note:** A valid PlayStation Bios is needed to run the emulator. SCPH1001.BIN is the default bios on the development but some others like SCPH5501 or SCPH7001 have been reported to work. ## Compatibility There's no compatibility list. Many games boot and go ingame althought some may have random problems. Some of the games I tested that woked were: Ridge Racer, Castlevania Symphony of the Night, Final Fantasy 7, Crash Bandicoot 1, 2 and 3, Spyro the dragon, Tekken 1, 2 and 3, Toshinden, Time Crisis, Tobal 1 and 2, Vagrant Story, Street Fighter Zero 3, Rockman/Megaman 8/X4, Parasite Eve, Metal Gear Solid, Crash Team Racing... Some others like Final Fantasy IX, Gran Turismo, Resident Evil 3 or Marvel vs Capcom boot but have random problems to be fixed. > **Note:** Memory Card files are hardcoded to "memcard.mcr" on the root directory. If there's no one a new one will be generated on save. ## Using the emulator ProjectPSX core itself is a headless library with no dependencies. The solution comes with 2 additional projects ProjectPSX.Winforms and ProjectPSX.OpenTK. The Winforms project uses NAudio to output sound. When using the Winform project a file dialog will prompt on execution. Select a Bin file (use track1) or a Cue file to generate CD tracks to feed the CDROM. When using the OpenTK project just drag and drop a bin/cue file to the window. The bios and expansion files are hardcoded on the BUS class. Once power on, Input is mapped as: * D-Pad UP: **Up** * D-Pad Left: **Left** * D-Pad Down: **Down** * D-Pad Right: **Right** * Triangle: **W** * Square: **A** * X: **S** * Circle: **D** * Start: **Enter** * Select: **Space** * L1: **Q** * R1: **E** * L2: **1** * R2: **2** ## Screenshots