The idea that eventually led to this project came to me around 2022. I was looking for an emulator to play Megaman Legends on as my copy would freeze when I opened the main gate towards the end of the game. This led me to pcsx-redux which I found out also has tools to look at memory and other stuff. I thought it was neat and so I loaded up Ape Escape which to date is my favorite PS1 game. I had no idea at what I was looking at but started changing values in memory which most of the time crashed the game but a few times I got lucky and got some interesting audio and graphic glitches.

This sparked a small curiosity and I had so many questions yet they all boiled down to, could I figure out how this game works? I ended up doing a ton of research on what to do, how to do it and found this blogpost. I somehow stumbled into getting Ghidra to open and analyze the code and let me tell you it was basically gibberish. tried to do what they said and start with named functions but all of that was not helpful, not a single function was I able to decode. Around that time the only experience I had with programming was single Unity Create with Code tutorial, I didn’t even know about main.

I decided there was too much stuff I didn’t know and stopped but I was still doing research in the background. I found websites such as psx.dev, psx.arthus.net, psx-spx. most of the stuff flew over my head but at least I knew there were resources available. I knew my next step had to be to learn proper programming. I enrolled in a Udemy course for C# and shortly there after decided to go back and finish my college degree which a coworker at my old retail job convinced me to switch it to the combo IT/programming degree.

Through 2024 I poked some more, read documentation but no real progress and unfortunately didn’t document any of my findings. I also started an internship, got more comfortable with programming, bought The C Programming Language book to start getting comfortable with working at a lower level. Around this time I successfully compiled ghidra_psx_ldr for the latest version of Ghidra as this was before maintenance was restarted which was a pretty big milestone for me. The biggest breakthroughs here were when I found main and what looked like initialization routines thanks to becoming more comfortable with the Ghidra decomp. But while the Ghidra decomp is helpful its not the source of truth, that role belongs to the assembly. Regardless around this time is when I felt that the idea might be feasible.

Finally last year in my last semester of college I took computer architecture and added the last basic toolset required for reverse engineering, being able to interpret assembly and low level control flow. From here my progress exploded, at least compared to what i was previously doing, and officially started calling this a project. During last year’s summer to fall I had figured out initialization routines, how the cd system queues and dispatches commands as well as retrieves the data, the basics of the overlay system with the locations of 8 overlays and a few other smaller things and then took a hiatus to focus on other stuff. Which brings us to today.

Right now im focusing on getting my work so far properly documented which as I took decent notes in Ghidra shouldn’t be terrible, so the next few devlog posts will cover exploring and getting reacquainted with what I found last year. Once I am caught up I’ll either continue working on the cd system or the sound engine.