PiCarts: GPIO ROM Carts

Loading from ROM cartridges plugged into the GPIO port. Just like the old days.

Public Chat
Similar projects worth following
A cartridge hardware and software solution to HOPEFULLY boot a Raspberry Pi 400 over GPIO and load software, such as games. Similar to the Commodore 64, in that you insert a cart, turn it on, and it just goes. No software to install, no updates to worry about, no distractions. Just games and programs.
The Raspberry Pi 400 captures the spirit of the 8-bit home computer era better than any modern system I've seen so far. Aside from systems like the C64 Max, which are struggling to meet inital supply demands, the Raspberry Pi 400 should be able to meet demand fairly easily. As much as I love the C64 and other retro PC products out there, they're niche and not easy to get ahold of just yet. My plan is to develop a system for the Raspberry Pi, so that anyone can build a console, or just run native Pi games, assuming they ever become a thing. The Pi seems to be lacking in the games department, aside from emulation. I'd love to see the Pi 400 create new developers.

Test Software:

High Capacity: SuperTuxKart for Linux: ~1GB

Word Processor Cart: WordGrinder

Boot Without Cart Inserted: Python programming environment

I have a few ideas on how I might get the Pi to boot into an OS stored on a ROM chip connected to GPIO. I know the ideal solution is a bit of a stretch, but I feel it's well worth investigating. 

1) (Ideal solution)

OS and program code are stored on SD NAND chips, connected to the SDIO GPIO port. GPIO Boot Mode would tell the Pi to boot from SDIO, which would load the minimal OS and program code.

 GPIO Boot Mode holds some clues, and then there's this GitHub link, refering to booting from EEPROM over SPI on the GPIO ports. It is possible, but not implemented, because the developers don't have a compelling reason to implement it.

2) (Not ideal, but likely far easier)

A special program is made to load the carts that could run on boot, and is installed into the SD card OS. That would be less reliable, as there are so many OS varieties that people could be running, and you'd have to install something. I always run into problems with software I installed, so this is far from ideal. 

3) (Similar to above)

Use a special SD card that just loads a minimal OS that looks for the cartridges to boot. This would require swapping SD cards, which is a hassle and would risk wearing out the SD car slot prematurely. This is my least favorite option.

4) (Most likey right now)

Have a tiny USB flash drive that boots the cart load OS, and just leave it plugged into one of the USB 2.0 ports at all times. USB ports are more robust, so I wouldn't feel as bad about plugging and unplugging it regularly. You could program the flash drive with a standardized cart boot OS, then use the GPIO Boot Mode to tell the Pi to boot from USB. If the developer of the cart needed to add code to the Cart Load OS, the OS could check for a certain code in the cart ROM and install it to the OS flash drive, updating the OS via cart. This would allow developers to add whatever features they want, and wouldn't be nearly as limited by the OS. The problem with that is that there would be a chance of bugs developing in the OS. It might actually be best to just write protect the USB drive and force developers to load everything they need into RAM. 

This system is essentially two parts right now: ROM cart and boot drive. The hardware should be simple enough, but the software to getting working in the ideal manner is a bit beyond me at the moment. I plan to keep it all open source, of course, and just want to see it happen. 

  • 1 × Raspberry Pi 400 The main system being used a game console
  • 1 × Raspberry Pi 4 Alternate system to be built into custom consoles
  • 1 × 1GB SDIO NAND Flash Chip XTX XTSD01GLGEAG. Mass storage chip, appears as SD card over SDIO or SPI interface
  • 1 × 1Mbit SPI ROM Chip for Game Storage The basic SPI ROM chip for game and program storage
  • 1 × 4Mbit SPI ROM Chip for Game Storage Larger, but slower ROM chip for slightly larger games and code

View all 6 components

  • A Better Solution Found...

    Dustin07/24/2021 at 18:04 0 comments

    My original idea, one I still wish to pursue, was to boot a Raspberry Pi 400 from cartridges attached to the GPIO port. I've found simple ways to run code from that port, but no confirmed way of booting an operating system from it. I'm sure it would be possible, but would require digging deeper into the Pi firmware and boot code than I could even comprehend. This limits my project greatly and makes it difficult to realize my original dream. Recently, though, I came across something very simple that does exactly what I want. Something that gives the Pi 4 a robust and user friendly cartridge system. It lacks GPIO access, but would be perfect for simple games and software. 

    The Retroflag nespi 4 Case is simply a very well made Pi 4 Case that looks like a NES, and uses a carriage that houses an SSD. The Pi 4 can boot from USB 3.0, which is how the cartridge connects the SSD to the Pi. The Pi 4 can boot from a cartridge. Exactly what I was trying to do. It's almost perfect. The only thing I don't like about the system is the high cost of SSD cartridge cases and high cost of SSDs themselves. I could get around both of these by designing my own cartridges for this system that use PCB material as the case, which cheap memory chips soldered to the board. They could be made to whatever capacity and style the game developer wants, and would likely be far cheaper than the official Retroflag offerings. Since the case uses a simple USB to SATA adapter, I suspect I could easily make a board that has the SD flash chips on it which converts an SD card chip to SATA over USB. I'm not sure exactly what would be required to do that, both mechanically or electrically, but it may be cheaper than an SSD. The cheapest SSD a lazy Newegg search found was $17.99USD. At only 32GB, it's far larger than needed for simple games, and hardly cheap. The SD flash chips I found are far cheaper and the smaller capacities would force smaller games and hopefully more creativity. Artificial hardware limits aren't always fun, but keeping things reasonably priced just makes things far more viable in the long run. Who wants to pay $50+ for a game cartridge with a ton of wasted blank space? I suppose it could be used to save user files. In any case, the challenge of designing a cartridge for this case intrigues me and I'll add it to my list of things to work towards. I'll be ordering a few of those cases soon. At least two. One as a main console for me to use in my camper, and one for development. This case could immediately put a new, modern, open source game console into the hands of developers. I know my dreams with this project are massive, but it's something to keep me moving forward and learning. I don't like easy things. Turning a simple educational computer into a viable video game console seems to be a challenge worth my efforts these days. 

    This case would make for a very different console than the Pi 400, but in a very good way. While my PiCarts 400 project is complex, with almost endless hardware possibilities, the nespi 4 console is very simple and robust. The 400 gives access to all GPIO, while the nespi 4 denies it. I can imagine kids using the nespi as a game console, eventually learning to program, and moving onto the Pi 400 and developing their own games and software for both platforms. We don't really have many mainstream, open consoles out there, like the 8 bit era had. I think these two Pi based systems are a great place to start dreaming and building. Hopefully I won't be the only one who thinks so. 

    This all makes me wonder how many people actually read my log entries. I'd love to see more discussion here at some point. I feel completely alone on this project. It's a little boring at times. 

  • New Case Idea: PCB

    Dustin07/24/2021 at 17:37 0 comments

    I've been struggling with cases for these carts. Injection molding is the standard, but I can't afford the molds and tooling for production runs. I've seen setup costs run into the hundreds of thousands of dollars. I don't have $100,000+ just laying around to finish this project. What I do have is access to PCB fab houses that don't care what they're making, and are reasonably priced. Price per unit of a PCB case will likely be higher than injection molded, but that's ok as it gets this project completed. 

    FR4 Enclosures(HaD Article)

    That article came to mind recently and makes the most sense for this project. Cheap, strong, mechanically and electrically useful, and can be made into works of art. The missing piece to this project is the case, and I do believe I've found that missing link. The possibilities of FR4 as a case material are nearly endless. It's this endless possibility that draws me to certain things, such as programming. This project is a way for me to explore the possibilities of some of my favorite things, and come out with something useful others can enjoy. Just picturing the closet cases made of FR4 gave me an idea for an entire game console made with the stuff. One complete with status lights, switches and dials, input and output ports, and even expansion and carriage ports with robust edge connectors, instead of the more fragile pin headers. This project is growing in scope in my mind, so I'll need to manage the old feature creep if I ever want to get this done. I've just put together a list of development Hardware for this project, so I'm just waiting on the pay from my new job I start I'm a few days. 

    Anyway, the case dilemma, which has haunted me from the start, has been resolved. The idea is solid, I just need to out in the work to bring it to life. Very satisfying.

  • More Resources Coming Soon

    Dustin07/23/2021 at 15:36 0 comments

    I've recently started as a tow truck driver and really enjoy it. It pays better than any other jobs I've had as well. I will soon have the time, energy, and money to finish this project, after all this time. I should have had the money and time already, but tension with the new job and the lady has cost me everything. We split up and I'm just diving back into my work and projects to deal with the extra stress. 

    There are a few critical pieces of equipment I need, such as a soldering station, helping hands, magnifying glass, and all the supporting equipment to assemble the test boards. I got a small tv which I can use for testing with a Pi. The Pi4 wasn't mine, so I have to get a new Pi. I'll pick up a 4 and 400 soon. I want to make sure the carts will be able to work on both, though the target system is the 400. I may stock up on basic components and development boards as well. I haven't been as interested in programming lately, as I've been very tired and stressed, with no quiet time to spare. I am excited to get this project done though. I never seem to get a chance to finish my projects, so it will be nice to knock this out. Been trying to finish a project for years now...

  • Possible GPIO Boot Method: SMI

    Dustin06/22/2021 at 18:44 0 comments

    I was recently scrolling through HaD and found an article on a Raspberry Pi Zero hat that contains an SDR module. I'm not into that stuff yet, but I did find out something very interesting: The Pis all have an SMI(Secondary Memory Interface).  I know very little about it, but I am starting to suspect that it's possible to boot the Pi from that interface. It also seems that older Roku devices used to boot using SMI, which tells me that the Broadcom SOC is capable of doing what I dreamed of initially. All I wanted was to boot the Pi over GPIO. It still seems possible, but difficult, and with a catch: it seems the Pi 4 doesn't support that feature anymore. Considering I am developing this project for the Pi 400, that's no fun. It does occur to me to finish developing this project, then start developing boot carts for older Pi models. Maybe I'll make my own cartridge based computer system that boots to a Python prompt without a cartridge installed. Tons o options here, just exploring them and taking notes before I forget about the details. A little more reading reveals that the bcm2835, which is known to be able to boot from SMI, is the CPU used in the original series of the Pi, and the Pi Zero. While all versions have SMI, only the old ones are known to have an SOC that can boot SMI. I don't want to build things for such slow systems, so I'll keep researching and working on this as I go. I'm in way over my head here with SMI, but there's no reason I can't revisit the topic in the future.

    There is very little useful information I could find on the SMI front, but I put links to what I did find below. Kind of a shame there isn't better documentation on this interface. It would have been perfect for this project. Oh well, onwards. 


  • SD Flash Chips Have Arrived

    Dustin06/19/2021 at 02:56 0 comments

    I got an email alert last night saying I had a package waiting for me at the UPS store. I figured it was something else, as I hadn't even gotten a valid tracking number on the flash chip order. Happily, it was the 1GB and 8GB chips I'd ordered. They got here faster than I was expecting. They're very tiny. Like half of a pinky finger nail tiny. I might get around to wiring up the break out boards and the flash chips tomorrow evening. If so, I'll post another log and upload some photos. After that begins the software development process. I've struggled my whole life with finishing big projects, so it's exciting to be making such good progress with this one. I still don't have the programming skill to finish this just yet, but there's nothing stopping me from learning. The plan is to start by just getting the SD chip to show up as a removable drive on the Pi 4. After that, I'll start filling in the back end code for the simple interface I made. It needs to be able to mount and eject the cart, load software from the cart, and back up and restore the cart. I want to find a way to make the EEPROM code trigger a python script at start up that runs on the Pi and loads the PiCart program. I need to really dig into the OS Python module soon. 

    Another big milestone for my little project. Hope everyone is enjoying the updates. I know they've not been anything major. I'm just excited to be making any progress at all.

  • First Prototype Nearly Complete

    Dustin06/17/2021 at 17:33 0 comments

    I've finally gotten some of the hardware for this project. The two Pi HAT prototyping boards and the SMT breakout boards from Adafruit have arrived. I tried to record a video of the assembly and introduction of this project for my channel, but my phone failed 4 times in a row to record. Fifth time's a charm, it would seem. These Pi HATs have the EEPROM on them for identifying the board and setting up the GPIO boards. I actually didn't know that was a thing until I found the standards for a board to be a Pi HAT. I love this feature and plan to use it on every cart. I still don't have the SD flash chips, but I at least have the main board assembled. All that's left is to solder the flash chips on when they arrive and wire them to the GPIO pins. I haven't started working with the software yet. I'm pretty tired today, so I'll likely call it quits for now and get some chores and rest in. These are at least ready for me to start developing the EEPROM files and get them written and tested. I need a vendor name, and I think I'll just go with PiCarts. Next update should be regarding the EEPROMs or when the flash chips arrive. Very exciting day for me. I had a wonderful job interview yesterday that would pay decent and give me tons of hours. I'll be able to fund this project quite easily soon. I'll be placing the order for portable HDMI monitor and a few other goodies, as well as picking up the Pi 400 kit and the M5Stack Faces kit from Microcenter. Finally feel as though I'm making progress on this project. 

  • Education Applications

    Dustin06/16/2021 at 12:19 2 comments

    My first experience with computers came when I was very young. Unfortunately, my mother would dump my sister and I off at The Boys and Girls club every chance she got, so that's how I spent much of my early childhood. It always made me very uncomfortable around other people, and there were probably at least a hundred other kids there every day. Once I was old enough, maybe 5 or 6, they granted me access to the computer lab, with it's many iMacs. On these were installed many games. My favorite was always Age of Empires. I played for countless hours on those computers, and they got me very comfortable with computers of all kinds. This was a very important experience for me, as I had something to do that was oddly comforting. I spent much of my life so far being very uncomfortable, but my computers have kept me sane over the years. While scrolling around on the internet today, I found an article that really made me happy. An engineer donated his time and efforts to a local library to teach Python to kids. He used the Raspberry Pi 400. This is the exact context I imagine the Pi 400 is best suited for. I imagine an entire computer lab full of them, with all kinds of interesting programs, documentation, books, video tutorials, and education games. I believe that learning how to use computers is an essential skill these days, and I know there are many kids out there that don't get the chance, or don't get access to higher levels of knowledge. The computer labs of my past shaped me and gave me direction in life. I know my little project isn't likely to grow to the level that the Raspberry Pi Foundation has, but I admire their work and hope to enhance the experience. My PiCart project is being developed initially for games and software, but the ability to add hardware is what I think would really help people learn new skills faster. It's really not that hard to plug an Arduino into a USB port and open the IDE, unless you're a librarian, teacher, or parent who has no idea how to help. I remember my parents and teachers trying to help me with my rarely went well. I'd always wished I grew up in the 8 bit era of computing with its simple, rugged, and functional cartridges. They added extra software, and often extra hardware to work with, teaching new skills at times. Even if I have to find it myself someday, I'd love to see a library computer lab loaded with Pi 400s, tons of books and cheat sheets, and shelves of cartridges that could be borrowed and bought. There aren't many native games for Linux that will run on the Pi either, so I'd love to see that take off as well. Especially open source Python games that people could tinker with and make their own. I may be moving back to my he town for a few months for a new job, which gives me a chance to visit my childhood library. I may be able to donate some Pis and carts to them and set up a small programming area in the computer lab and teach some basic classes. I've taught a few things over the years and find it to be some of the most rewarding work I could find. At only $100 per kit plus monitor, I could afford to get a few stations set up. They may even offer to fund the project. Leaving something like that behind when I move to California would be very satisfying to me. I may eventually sell these carts if there is demand, and just use the income for more educational work. I've always wanted to give back, but wasn't sure how. I know this project is ambitious and may never take off, but I want to give it the greatest chance possible. If a single kid sits down at a Pi, plugs in a cartridge, and learns something, I'll be entirely happy.

  • Real Time Clock: Initial Research​

    Dustin06/12/2021 at 19:53 0 comments

    For a while now, I've been wanting to learn how to work with real time clock(RTC) chips. This project is a great way to get started on it. The reason I want to integrate an RTC into the carts is for running in game events after the system is turned off. I could just check the system time, but it's easy to mess with that, as well as having incorrect system time. I always loved the features of Pokemon Gold and Silver versions when they came out. Encountering different Pokemon during the day and night. I never stopped to think about how this worked when I was young. Now I understand how such features existed. With an RTC on the cart, I can duplicate in game events like that. Maybe certain enemies only come out at night, or only certain riddles can be solved with by the light of a certain moon. 

    I've started looking at different RTC chips and settled on the ‎DS3231MZ/V+‎. The main problem I have with this chip is the per unit cost of $7.75. Even with bulk discounts, it's still an expensive chip. I wouldn't mind for my own use, but I want this to be an affordable board for the average hacker. I do plan to order a few of them for testing in the future and will decide if I want to integrate them or not. The chip shortage doesn't seem to be helping matters any either. 

    Interfacing with this chip should be fairly simple using I2C over GPIO on the Pi 400. I haven't made too may plans for other devices to use I2C, so the interface should remain free for this chip to use. I've not gotten much done on this part of the project, but wanted to record some thoughts for future reference. Looking forward to assembling the hardware and programming for it.

  • Hardware Setup: Pi 4 and USB to HDMI

    Dustin06/12/2021 at 18:39 0 comments

    I finally had some time to sit down and work on a few things this morning. I didn't get very far though before my allergies made it impossible to see what I was doing. I got the Raspberry Pi ready for some testing. Removed the back panel from the touchscreen terminal case, replaced it with one that can handle the GPIO extension cable, and camera cable. I had to remove the heatsink and fan, as well as comment out the overclock settings I was using in the config.txt file. I connected to my phone's hotspot and got the system fully updated. Before assembling it all, I hooked up the micro HDMI adapter and cable. That was about it for the Pi. It's ready for testing when the cart hardware arrives.

    I had ordered a cheap HDMI to USB capture card so I could use my laptop as a monitopr for the Pi. That thing turned out to be garbage after a few hours of tweaking. I could not get a steady useable frame rate, or a useable image. I suspect the device was overheating, but I don't have the time or energy to deal with that. I took a chance on something cheap, and lost. Never again. I'll just save up and buy a portable monitor for the Pi 400 when I get it. So tired of cheap crap. 

    The prototype cart hardware should be waiting for me in the city, so I'll pick that up in a few days. I'll solder it all together and get started on programming for the SD flash chips. The goal is to just get them to auto mount and safely eject them through the test interface I made with tkinter. I bought some cheap USB flash drives for testing so I don't mess up my other drives or the flash chips. I'm having trouble mounting drives, as I don't understand how to create mount points and such in Linux. Still have a lot to learn these days. It's slowly coming together though.

  • Development Hardware: Raspberry Pi 4

    Dustin06/09/2021 at 13:40 0 comments

    As I'm still saving for the Pi 400 and the M5stack Faces kits, I've decided to start development on the PiCarts using the Raspberry Pi 4. It used to live in my camcorder, but has recently been put back in it's case for use as a control center and entertainment center for the camper. It's not the exact system I want to work with, as it's rather stationary, but it will work for now. The hardware should arrive soon for the carts, and I'm too excited to wait for the Pi 400 to start development. The Pi 4 has the official 7 inch touchscreen, a Smartypi Touch 2(I think that's the proper name) case, official power supply, and a Creative Stage Air portable sound bar. I love that speaker as it has Bluetooth, line in, and even a USB port that turns it into a simple and reliable portable music player. This setup will work just fine for now, but it needs a few things. Currently, the audio cable is very long and requires taking the stand off to access. Not great for when I need to plug headphones in. I may buy a short cable and a coupler so I can just plug headphones into the end of the cable. Then I can work on audio or just watch videos without disturbing anyone. I'd also like to get a very large battery bank that won't trigger the Pi low voltage ⚡ warning. I remember seeing a way to disable that, and I might just do it. I've already got a Bluetooth keyboard I really like, and I have a USB mouse. I need a new flash drive to boot from, so I can start working with a fresh system. I really don't want to have to reconfigure all the software that's currently on the Pi. The good thing about these little investments is that they will carry over to the Pi 400 when I get it. Double checking, I confirmed that the Pi 40p has no analog audio output. No headphone jack. This is very inconvenient in general, and especially for me when I want to do testing of audio in public. The thought occurs to include a headphone jack and circuitry on some carts. If that doesn't work out for me, I'll just get a Bluetooth adapter for my in ear monitors headphones, or a USB headphone adapter. The 3.5mm audio jack is one connection I really wish they would have kept. Bluetooth is terrible and I hate it. I could possibly design a cart PCB that has the option to add audio hardware and just leave it unpopulated if not needed. I almost always listen to music or working with audio files while working though, so I'll most likely end up with with it populated on my development boards. 

    Thinking about all of the hardware, I realize that the software is likely going to be the hardest part for me. It's almost all custom, but hopefully just a custom selection of well established things. I want a system tray object that runs on boot, so I have to figure out how to add those entries. I also need to make an installer of some sort that makes this stuff simple enough for the average user. Then I need to figure out how to distribute this software. This project is for me specifically, but I want the practice and experience of releasing a commercial product for my portfolio and own satisfaction. 

    I've got tons of research and work to do, and I should be updating this page far more often when the new hardware arrives. I'll be picking up a package today. It should contain an esp32 board and the HDMI to USB adapter. I realized I can even use the Pi 4 as a display for the Pi 400 when it arrives. Next order to arrive should be the Digikey with the Adafruit perma-proto HATs with EEPROM. I'm expecting my order of SD NAND Flash chips to arrive next week. Until then, I'll continue development on things like the user interface, start up scripts, and board design.

View all 32 project logs

Enjoy this project?



Mike Szczys wrote 05/24/2021 at 16:15 point

I love the idea of booting up cartridges. If you do go with the "most likely" scenario you outlined of running from USB, you might enjoy this one from @Tom Nardi that designs cases for the USB devices that make them look like cartidges:

  Are you sure? yes | no

Dustin wrote 05/26/2021 at 22:23 point

I saw that article! It helped me out on this project, actually. Thanks for the tip. I've actually not found a way to get USB through GPIO, but I can use SDIO over GPIO, which is almost as good. Can't seem to boot from SDIO, but that's ok for now. Developing the hardware now, will sort that out soon. I'm willing to be someone out there can find a way to get the Pi 4 to boot from SDIO... My latest logs have more detail on my latest thoughts. 

  Are you sure? yes | no

ee334 wrote 12/01/2020 at 17:25 point

  Are you sure? yes | no

Dustin wrote 12/01/2020 at 20:27 point

Wait, why? What would I use these for? 

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates