Project Description

The idea is to learn about the PlayStation 1 CPU and GPU.

Goal for this Hackweek

  1. Learn specifics of PlayStation 1 architecture: CPU, GTE, GPU, MMC, etc.
  2. Understand differences between common MIPS1 architecture and PS1.
  3. Build a simple assembler/disassembler (as PS executables aren't relocatable).

Eventually, building an emulator would be awesome!

Resources

  • MIPS:
    • IDT R30xx Family Software Reference Manual (PS1 CPU, PS2 IOP): https://cgi.cse.unsw.edu.au/~cs3231/doc/R3000.pdf
  • Guide to writing a PSX emulator: https://github.com/simias/psx-guide
    • Rendered: https://cdn.discordapp.com/attachments/492036343376117778/492037613721616406/guide.PDF
  • psx-spx: https://psx-spx.consoledev.net/ (original: https://problemkaputt.de/psx-spx.htm)
  • PSX reverse engineering project: https://github.com/ogamespec/psxdev/tree/master/reverse
  • BIOS info: http://wiki.psxdev.ru/index.php/BIOS
    • Translated: https://translate.google.com/translate?sl=auto&tl=en&u=http://wiki.psxdev.ru/index.php/BIOS
  • The PSX GPU texture pipeline and how to emulate it: https://www.reddit.com/r/EmuDev/comments/fmhtcn
  • PSX EXE header (also see "CDROM File Formats" section in psx-spx): http://www.emulatronia.com/doctec/consolas/psx/exeheader.txt
  • PSX system software reverse engineering project: https://github.com/ogamespec/psxdev/tree/master/reverse
  • Other PSX documentation (including a CPU reference manual): http://hitmen.c02.at/html/psx_docs.html
  • PSX GTE docs/reverse engineering: https://github.com/ogamespec/pops-gte
  • PSX MDEC & CD-ROM info: https://github.com/m35/jpsxdec/blob/readme/jpsxdec/PlayStation1STRformat.txt
  • Dithering on the PSX: https://www.youtube.com/watch?v=3XDyQnY5GHI
  • PlayStation emulator development info: https://drhell.web.fc2.com/ps1/index.html
    • Translated: https://translate.google.com/translate?sl=auto&tl=en&u=http%3A%2F%2Fdrhell.web.fc2.com%2Fps1%2Findex.html
  • Test ROMs:
    • Amidog's tests: https://emulation.gametechwiki.com/index.php/PS1_Tests
    • https://github.com/PeterLemon/PSX
    • https://github.com/JaCzekanski/ps1-tests
    • https://github.com/simias/psx-hardware-tests/tree/master/tests
    • PSX demos: https://www.pouet.net/prodlist.php?order=thumbup&platform%5B0%5D=Playstation&page=1
  • Open-source BIOS: https://github.com/grumpycoders/pcsx-redux/tree/main/src/mips/openbios

Looking for hackers with the skills:

playstation retro assembly mips emulation

This project is part of:

Hack Week 21

Activity

  • over 3 years ago: e_bischoff liked this project.
  • over 3 years ago: dirkmueller liked this project.
  • over 3 years ago: dmdiss liked this project.
  • over 3 years ago: mbrugger liked this project.
  • over 3 years ago: david.anes added keyword "assembly" to this project.
  • over 3 years ago: david.anes added keyword "mips" to this project.
  • over 3 years ago: david.anes added keyword "emulation" to this project.
  • over 3 years ago: david.anes added keyword "playstation" to this project.
  • over 3 years ago: david.anes added keyword "retro" to this project.
  • over 3 years ago: david.anes liked this project.
  • over 3 years ago: david.anes started this project.
  • over 3 years ago: david.anes originated this project.

  • Comments

    Be the first to comment!

    Similar Projects

    pudc - A PID 1 process that barks to the internet by mssola

    Description

    As a fun exercise in order to dig deeper into the Linux kernel, its interfaces, the RISC-V architecture, and all the dragons in between; I'm building a blog site cooked like this:

    • The backend is written in a mixture of C and RISC-V assembly.
    • The backend is actually PID1 (for real, not within a container).
    • We poll and parse incoming HTTP requests ourselves.
    • The frontend is a mere HTML page with htmx.

    The project is meant to be Linux-specific, so I'm going to use io_uring, pidfs, namespaces, and Linux-specific features in order to drive all of this.

    I'm open for suggestions and so on, but this is meant to be a solo project, as this is more of a learning exercise for me than anything else.

    Goals

    • Have a better understanding of different Linux features from user space down to the kernel internals.
    • Most importantly: have fun.

    Resources