Intro
Of all the projects I've ever conceived, the Jamestation is the most complex. I've never put any work into it other than learning and ideation, but there's plenty I'd need to do to see it through, most of which is currently beyond me. It started from conversations with a co-worker a couple of years before COVID hit, and the name is a play on Playstation and my name.
Concept
The idea behind the Jamestation is to make a game console based loosely on tech available when the original Playstation came out. 32-bit processor, small amount of RAM, that sort of thing. There'd need to be some sort of physical media to give it the flavour of that era of console, probably something NFC based, since who wants to have a spinning media like a CD, or a physical cartridge interface that'd cost quite a bit to implement?
I'd implement a lot of components, but I'd make use of off-the-shelf bits when appropriate. In an ideal world it could be productized and made for purchase, but that's way off in some pie-in-the-sky future.
Emulation
My first plan was to make an emulator for the hypothetical system, as that's usually the best place for a programmer to start with a hardware project. My original idea was to use an ARM emulation library since it seemed like the closest modern CPU architecture and is pretty common. That was a good starting point for thinking about the project.
I never ended up putting together an emulator, just did a bit of research. That's all I get to with some projects, but it helps inform future project ideas. However, I have written an emulator before, so the ideas aren't new to me.
FPGA
After creating an emulator, an FPGA, or Field-Programmable Gate Array, implementation would be the next logical step. It's easy to iterate on, and cheaper than committing to buying individual components. This is a path used by retro video game enthusiasts to recreate old game consoles in a way that preserves the timing considerations of the original hardware. Emulation can often leave the more hardcore enthusiast disappointed in performance or timing characteristics.
The ARM CPU cores that you can get for FPGAs cost money. ARM is a business, and their chief product is their intellectual property (IP) for CPUs and the like. I'm not likely to ever get around to this project, but if I do, I don't want to sink a bunch of money into an ARM license. No, I'll be going for the RISC-V architecture, which is a free CPU architecture that's on its way to becoming a serious player in the CPU market. I'd like use the Hazard3 core that's currently implemented on the RP2350 microcontroller from the Raspberry Pi Foundation.
That'd leave me with a few bits and pieces to implement myself in Verilog, namely the rasterizer and the matrix/vector arithmetic unit. These would be where the bulk of the work would occur, since they're the most custom bits of the whole machine.
The RAM, peripherals, and sound chip could probably just be made with off-the-shelf IP cores from OpenCores, or predefined IP cores from the FPGA manufacturer.
I'd need to up my FPGA game to much higher levels, hopefully helped by the nand2tetris implementation I plan on making. That was one of my intended goals for that project, to prepare me for doing bigger and better things.
Games
I have no idea if I could implement interesting enough samples for the Jamestation to get people interested in making games for it. I'd need the emulator, at least, to be able to attract people looking to develop for a machine like this. Since I'm unlikely to get that far, it's a bit moot.
Conclusion
Any part of it beyond an emulator is a project that's beyond my current skill set. I'll need to spend a lot of time learning Verilog and hardware implementations for matrices and rasterizers. Learning is something I enjoy, though, so maybe I'll set aside some time for improving my hardware knowledge.
Hoped you enjoyed this, and maybe it helped you with inspiration for your own projects!
Comments