I'm going to touch on a bunch of things that have happened since my last update; I'll keep this short, because I've got some more detailed posts to follow.
Right now I'm working on a lot of itty bitty jobs that are not particularly interesting, but they're all important, because they're all to do with manufacturing and testing.
Item the first: beta PCBs!
These have arrived, still empaneled, and the soldering quality looks great. The next step will be to put them all through the test system.
The test system hardware is sorted. Here is the prototype test system on my desk:
The funny L-shaped layout is because of how they will stack in a final enclosure. It's a lot harder to debug stacked boards, though. Don't do that.
The test system is driven by a Raspberry Pi with a monitor and keyboard attached. It's made so that any part of it is easy to replace. This is critical in a factory environment, where time is $$$, and doubly so when the factory is on the other side of the planet from me.
All of the actual hardware tests have been written and tested, so I can test a board and know it's good when I'm sitting at home. Now I have to do a whole lot more work to make this work in a factory: there needs to be a database of test results, and serial numbers, and a way to distribute the latest firmware, and all of this has to be operable by an almost completely untrained worker, so it has to phone home for software updates and stuff. These problems are not hard, just time consuming. I've knocked up the phone-home gear (OpenVPN + Docker, for those who like stacks), software updates (rsync), and the production database (Flask and also SQLAlchemy). There's just a little work left to tie them all together.
Today I've also been setting up a build environment for CI-style reproducible builds of the bootloader and firmware. The purpose of this is to eliminate many sources of manual error in building these important objects, like forgetting to check in changes, or having stale files in a build tree. Finding out you've flashed a dud bootloader at the factory and sent busted carts to hundreds of people would be a ruinous experience! This sort of job is pretty straightforward these days; most CI systems will do the needful and it's just a matter of spending the time and energy to set one up. The only issue here is that I need to encapsulate a couple of funky toolchains; the SuperH architecture in particular is not well supported. In the end I more or less shoved the toolchains I currently use into a Docker image and called it a day ^_^ I might strap it to a proper CI tool once I get some more tests under the hood; once it comes to game compatibility expansion I will want to keep tabs on regressions if I can.
Another area of progress is the case. Sticking a raw PCB into the back of a Saturn isn't impossible, but it's not exactly pleasant, and it never seems like a great idea with all that metal around; the production Satiators will have a custom moulded plastic enclosure. But someone's got to design it first! I've done a whole lot of work to get the dimensions right; here are all the ones that didn't make it:
These are printed with my FDM printer, which is fast and cheap but gives quite ugly results - this is definitely not what the final shells will look like.
I also have some SLA printed cases on the way, which will be much closer to what will be coming off the moulds. They have taken a *lot* longer than I expected (weeks and weeks), but apparently they're not far away now. Hopefully they're spot on and I can start the process of getting the actual moulds made.
I'm off on holiday in a week and a bit, and I'll be in still-chilly Tokyo, so I expect I'll have time to get caught up on some of the longer posts. Until then, thanks for your support, and for bearing with me through some tricky times. I appreciate it!