I'm tinkering with a PlayStation homebrew (voxel space renderer) and development for fifth generation consoles has never been easier.
Modern toolchains, programming languages, dev cartridges and libraries from the community makes all the difference. Outside of some niceties like ICE (gotta write that GDB stub for target hardware at some point), it's not that different from what you'd experience with modern embedded work.
There is something so charming about the N64/PS1 era. They were so unique in their own right and you could tell at a passing glance which system was displaying on the screen even if you didn't know what game it was. Two radically different systems at the dawning of 3D console games.
I bought a MiSTer for me and my son and we played the heck out of Mario Kart 64 and Mario Golf. I think he picked up my "gaming is dead now" outlook since he doesn't really have any interest in new systems or games anymore
I've been on-and-off writing a Zig library for writing N64 games and it's indeed pretty wild how getting working code was as simple as telling the compiler to use LLVM's MIPS III target.
Of course, getting working code that actually does anything useful is a much different story (it's taking multiple days just to write the wrappers for RDP commands, for example; lots of cross-referencing between N64Brew wiki pages v. official SGI docs v. libdragon source code v. Peter Lemon's assembly code to figure out what all the different bitpacked fields really mean and how to best represent them), but it still feels magical that I can just use an ordinary toolchain and not some ancient proprietary monstrosity.
How did they do it back in the day? Was basically everything from the tooling etc. just created inhouse from scratch?
I am still amazed my own minimalist PS1 tutorial series [1] became as popular as it did, given that prior to it basically all learning material on the internet was written around the decent-for-the-time-but-horrible-now Sony SDK and often based on 30-year-old example code full of 30-year-old C practices (in particular the complete disregard for aliasing and concurrency, which resulted in plenty of headaches once people started using those ancient libraries and example code with modern GCC). We even have bleeding-edge C++ SDK options [2] complete with an STL and coroutine support, so if anybody here wants to try their hand at PS1 homebrew development I would highly encourage checking out the modern tooling we have now.
[1] https://github.com/spicyjpeg/ps1-bare-metal
[2] https://github.com/grumpycoders/pcsx-redux/tree/main/src/mip...