So... a couple of years ago, Neil of the Retro Collective showed off this project: It loads games on a MiSTer Multisystem by reading a barcode on an actual game box. I've used the system myself a few times when I've visited, and it is indeed really cool . Wind forward to this year, and there's a brief snippet in a MiSTer Multisystem 2 overview video that caught my attention - skip straight to 15:24 for the relevant portion: Around the same time, I see this video from a channel called The Stock Pot: A 'cartridge' media player, which uses an NFC reader and some (messy & nasty) Home Assistant actions to play media files. The idea is that it works like an old-school VHS player: pop the 'cartridge' in and your film plays. So. My interest was thoroughly piqued. I resolved to build a 'game cartridge' reader for the MiSTer Multisystem, using Zaparoo and NFC tags. Zaparoo is an open source universal game-launching system: it reads an NFC tag and launches the appropriate game using a background agent . It’s available for MiSTer FPGA, MiSTex (like MiSTer but for other FPGA systems), Batocera, SteamOS, LibreELEC, Windows, and even an actual real Commodore 64 (via something called the “TeensyROM” project). I have the OG MiSTer Multisystem, not the fancy MiSTer Multisystem 2 that just launched, but for these purposes they are functionally identical. First step was the design for the reader itself. Initially my plan was to just use The Stock Pot's design - it's up on Printables with a fairly permissive licence. So I ordered a couple of NFC readers and some NTAG215 tags and waited. You can get an 'official' Zaparoo reader, the Zap Pad, but it does support commodity NFC readers which are available all over the place, like the PN532 or ACR122U USB readers which can be found all over places like Amazon, AliExpress, eBay, etc. Ideally I wanted a mechanism that had an 'eject' button, so it worked a bit more like a SNES cartridge or even a floppy disk. Which is where I discovered this: It's specifically designed for the 'TapTo' project, which I soon learned is what 'Zaparoo' used to be called before it had to change because of a trademark dispute - there's always some kind of trademark or copyright issue... Perfect! It means using cards rather than cartridges, but that's not exactly a problem. It also makes it compatible with the 'slot' cut into the MMS2 case, if I ever upgrade. And there's a web-based Zaparoo Designer to help create your own artwork, which is intended for creating artwork for 'CR80' sized NFC cards - which turns out to be a standard size for ID cards and the same size as credit cards. After printing everything it works perfectly! Cards are a little loose in the slot, but the original model is designed with very loose tolerances to account for all manner of 3D printers. Mine's pretty good in terms of accuracy however. I've narrowed the slot from 54.5mm to 53.95mm and it's pretty good now. It'll still rattle loose if you shake it around, but it's a much better fit. Cool. On to the next part! Now... For each of the platforms that I use my MiSTer for, there might be a couple dozen games that I would want cards for... Finding the cover artwork for each one and manually creating a design in Zaparoo Designer, or A.N.OtherSoftware is a tedious ballache. I tracked down the source code for Zaparoo Designer, and crucially discovered that the templates are part of the repo and happen to be in SVG format. Cool - SVG is vector-based, not bitmapped, there's a much better chance I can do something with that programmatically. But I still need to scrape both the game artwork and the platform logo from somewhere. I quickly landed back somewhere I'd been before: the Internet Game Database (IGDB) API. There are many many endpoints available, so take a flick through at your own leisure. So... a couple of days of spare-time programming lands me with a Python program that can automatically find all the info I want. It reads platforms I'm interested from a CSV file and then scrapes IGDB for info on the 'top n' games for each platform. For now it's a bit manual in that I have to match up the MiSTer's supported systems to 'platform IDs' in the IGDB API, but I do later plan to add automatic searching & matching. I also plan to add a separate list of games that I'm specifically interested in; for example, Final Fantasy VII is possibly my favourite game of all time, but it doesn't appear in the list of 'top 20' PSX games. But I want a card for it! I'll spare you the detail, and the github link, because the code is messy and needs a lot of cleanup. There's a lot of over-engineered AI slop in there that I need to take a hatchet to. Yes, I used an AI programming assistant, but only because it can type faster than I can; I know what the code it generated does, I've edited quite a lot of it myself, I've thoroughly reviewed all its outputs, and the base underlying classes were written by me to start with. The point is, I now have a way to automatically produce card designs like this: Of course, the home computers aren't being left out OK... Now we come to the last part... how do I get the artwork onto the cards... I don't have a 'regular' printer. I had a colour laser printer, but I gave it away last year; I was only using it to print shipping labels, so... I got a label printer instead. But that label printer only does black & white, and I obviously want full colour. I could just borrow my mother's printer for a while, but that would mean finding labels that are the right size or cutting labels to size. The latter is just not an option. I could go to a professional print service, and that was my plan for a while. But that still means sticking labels to cards, which will be a ballache to do. And I will mess it up: I can never get stickers aligned properly... I know you can print directly to ID cards. We have an ID card printer at work. I am aware that this was a thing. So an idea forms. My first plan was to talk nicely to people at work and use their printer with my cards and a ribbon I'd pay for myself. But I started looking into the card printer we use and it has all sorts of firmware security features, such as locking it down to specific computers, password-protection, etc... OK, forget that, that's a headache I don't need to deal with. So I started looking at ID card printers on eBay and... HOLY COW ARE THEY EXPENSIVE! But a couple of 'untested' ones caught my eye. They were cheap enough that I was willing to risk taking a punt on it, even though they'd need consumables and a power supply. I eventually got my hands on this: a Javelin J230i colour ID card printer - this bad boy: It was sold as 'spares & repair', but I paid £23 for it, so I was willing to take a punt. I did think that it might be a stupid idea at the time... and as soon as I opened it I realised it might have been a very stupid idea: So... that sloppy goop you're looking at... that's supposed to be a rubber roller... yeah... You know that 'soft touch' rubber-ish coating that used to be on electronics all the time? Remember how it degrades over time and gets really sticky? Well imagine that but completely melted. But I quickly noticed that there is a plastic 'inner' section of the roller, it's only the outer rubber part that's degraded. I soon realised I might actually be able to salvage it. It's a bit narrow in the printer, so time for cotton buds... There were many more cotton buds by the end of the day, and a hell of a lot of isopropyl alcohol! I wasn't really willing to take it apart at this stage - I had no idea if it even worked - but I did spot a flap on the bottom, which made it a lot easier to access the lower rollers Unfortunately, this revealed just how far the gunk contamination went Much much cleaning later, I thought I had got all the gunk cleared from the path the card would take, so I decided it was time to fire it up. And it powered on, which was an excellent sign! So I fed a card in, it pulled it part-way through the mechanism, and promptly spat the card back out. Spitting it out was fine - it couldn't get all the way through the mechanism because half of the rollers were missing. But the disappointing part was that the card came back out with splodges of goo on it. Several more cleaning rounds later, and I realised I was going to have to go further... I really was going to have to 'Dave Jones' the **** out of it: "Don't turn it on, take it apaaaahhht!" You'll note that wires are still connected, that was intentional: this is a fairly complex beast, both eletronically and mechanically. I still wasn't willing to go too far, because I still didn't know if it would work. Though it did give me much better access to be able to clean the internals, and I found the offending splodge of goo that gunking up the cards I fed in. It gave me much better access for properly cleaning the rollers, and they came out pretty decent: Just as a reminder, this is what they looked like at the start of the day! So! Fed a couple of cards in, and... no splodges! By this point, I'd been working on this for about 5-6 hours. I really needed to know if it was even capable of printing anything before I invested any more time in it. If the print head is knackered... well... that's game over - they're incredibly expensive to replace. £150 used and £400 brand new. But that's for a newer model - I can't even find one for my printer on eBay. There are a few websites out there listing them for sale... at just over £400. So I bodged together a couple of temporary rollers with some 4mm weather-sealing tape I had lying round and tried the printer's built-in test print. I don't like the look of that... Found the Windows drivers, hooked it up, and did some test page prints while I tweaked various settings. No joy - in fact it was worse. Craaaaaaaap. OK... Take the print head out, give it one more thoroughly good clean, just to give it the best chance of success... As I did so, I noticed that the print head's cable was barely plugged in properly. Once I'd cleaned it again and reconnected it... Wow... ok... what...? It does print...! Popped the lid open again just to make extra-double-triple-super-sure that the print head cable was fully plugged in... and realised that it needed to be seated even further than it was... Come on, one last try... F'ING. YES. I have never been so happy to see such a washed-out print! So I did a few more tests to see if I could get a 'darker' print. Still a bit washed out... tweak some settings and... OK, that's better... OK... that's... actually not half-bad! Especially considering where I started the day! So. I still need to refurbish the rollers properly, I still need to make sure the gunk is fully cleaned out, and I need to see if the 'washed out' nature of the print is something I can tweak in software or if the print head is actually wearing out. It could just be a rubbish quality printer, to be honest! The rollers aren't easy to remove without some serious mechanical disassembly. I didn't really want to do that to start with... but now I know it works and I've already had it disassembled once already. I feel a lot more confident about fully disassembling it for a 'proper' refurbishment: through clean, contact cleaner, grease where grease is needed, etc. My plan with the rollers was some self-adhesive neoprene strips that I cut to size and wrap around the plastic wheel. @Flibblebot suggested yesterday that it 'sounds like a job for some TPU prints'... . Now that I know how to strip it down, it might actually be possible to do this. But, for now, I'm pretty damn over the moon that the printer works. I have never felt quite so vindicated for making such a stupid decision . There's more to come with this project, so I'll try to update here as I do . The next step is to make sure I've got the ROMs for the MiSTer in good order. I might also look into integrating my scraper with a project called ROMM. That'll basically allow the scraper to only generate artwork for games where I actually have the ROM available, and it also may help gather the data that will be written to the NFC tags so I can automate that element. Stay tuned!
Bah. Geometry makes my head hurt, haven’t had to do this stuff in ages. Trying to model some replacement rollers, which are essentially a hollow cylinder. So, two cylinders, one bigger than the other, Boolean subtraction, and hey presto: hollow cylinder, right? The inner diameter of the plastic roller is 15mm, so that’s the diameter of the “cutaway” cylinder - easy. I want the replacement roller to be 1.5mm thick, so I make the larger cylinder 16.5mm diameter. So why is the wall thickness only 0.75mm now?! Wrong. I need to think in terms of radius, not diameter. So for a 1.5mm wall, I actually need an outer cylinder with a diameter of 19mm. Really simple now that I think about it, but I haven’t had to think this way in a long time… Took me about 40 minutes to work out what I was doing wrong! But now I have a freezer to defrost, so I have to pause for now while the rollers print.
I did do some more test prints yesterday, tweaking various settings like colour intensity, colour saturation, brightness, contrast… Nothing really changed how “faded” the prints were, it didn’t really get any better. I did notice that the print head resistance setting was incorrect, and that did seem to make prints a little more consistent. I did try bumping that up further to force more power into the print head, but it didn’t make a visible difference. Ok fine, that might be as good as it gets. Main thing I need to do now is strip the printer down fully to clean it and replace the rollers.