Close
0%
0%

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:

Game: Duke Nukem 3D(Native Pi Version)

Word Processor Cart: WordGrinder

Boot Without Cart Inserted: Thonny

Current Options Under Consideration:

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) Boot from Flash Memory Over GPIO Pins (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, referring 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. I have yet to find a way to actually implement this and will start elsewhere first.

2) Install a Program to Load and Manage PiCart Hardware

A special program is made to load the carts that could run on boot, and is installed into the main 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 often run into problems with software I installed, so this is far from ideal, but would likely be the easiest to implement, and therefor, the most likely to get done. Starting here. 

3) Boot from a Custom OS to Load and Manage PiCart Hardware

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, but one I will explore. This would be ideal for children and education use as there would be no software to install. Once a minimal OS is chosen, a custom image will be made for use with these carts.

4) Bootable USB Drive

Have a tiny USB flash drive that boots the cart load OS, and just leave it plugged into one of the USB 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 I PiCart is detected. Otherwise, the system would boot from the usual boot device. 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

  • Critical Decisions Made

    Dustin06/08/2022 at 22:43 0 comments

    I've had to put this project on the back burner, and out of mind, so many times that it's absurd. It makes me rather angry. I've been thinking more on this recently, though, as I settle into my new home and job.

    Some of the biggest hurdles have been a few crucial decisions in tools and methods. I've found time to finally research and decide on a few tools.

    PCB Design software: KiCAD

    PCB manufacturing: Camptech, Canada

    Game engine: Godot

    Pixel art editor: Pixelorama

    Cartridge case material: PCB

     First game: Bird Battle(name subject to change)

    Development system: Atari VCS

    Development OS: Pop!_OS

    Connector type: card edge, pin header, magnetic pogo pins

    The above represent most of the tough decisions I had to make. I'll elaborate further on those in a future update. Time is limited as I settle into my new home and job. New camera gear is on the way, so video logs are likely in the future.

    I have the Atari VCS and it's 1TB SSD waiting for this project. I'll get it ready this weekend and start working on the game design and PCB designs. I need to learn the entire process of game development and PCB development for this project. I have a SoundStripe account for audio assets, and will purchase some game asset packs to help speed up development. I have very little time, so I won't be doing things the hard way any longer. Game engines and premade assets will get the first prototype working, and I can fill in the skill gaps later.

  • Card Edge Connectors

    Dustin05/07/2022 at 01:21 0 comments

    After thinking about pogo pins a little longer, I decided that a card Edge Connectors option should be delevoped as well. They're durable, cheap, and easy to implement. The removal and insertion force for a card Edge Connectors, even with 40 pins, should be lower and less damage prone than with a 40 pin header connected directly to the Pi GPIO pins. Offering a card Edge adapter, as well as simple pin header connection on the carts would allow kids to handle the carts with less risk of damage to the GPIO pins(when using a card Edge connector), while allowing others to use the simpler and cheaper pin header. I dislike connecting anything to the GPIO header as the force required to insert and remove is fairly high and could cause damage to the system.

    The simplest card Edge connector setup would be to just have the carts lay flat and plug the edge directly into the GPIO pins on the Pi 400. This would leave the cart sticking out of the back, and difficult to see when insterted. I'd prefer it to stand up right, so I could design a right angle edge connector adapter that would let the carts plug in vertically. There are benefits to both, and I will develop both and test. Vertical carts have the benefit of being visible at all times, which is handy for displays, speakers, and various switches. Horizontal carts have the advantage of not blocking the view of a display sitting on the same surface as the Pi 400, as well as being able to support things on top of them. Like coffee mugs and other hazards to electronics. A postal scale cart comes to mind here.

    There are endless possibilities with this project and feature creep has to be managed to ever make any progress on it. I'll be buying some hardware and setting aside time to work on this soon. I have other large projects planned, but this one may end up being the most satisfying in the end.

  • Breakthrough: eMMC HAT

    Dustin05/07/2022 at 01:04 0 comments

    This project has been stalled out for quite a while due to my lack of knowledge, funds, and working hardware. I recently found the 8086 makes an eMMC HAT that works with the Pi 4 that only requires a quick edit to the config.txt file. I failed to get the SD flash chips to work previously and gave up for a while. I just found this HAT and decided to start looking into this again. While not exactly what I'm looking for, it is close enough to allow me to actually get this working and start developing software for the system. The SD flash chips act just like an SD card, but in a smaller and cheaper form factor. I plan to order a few of these HATs quite soon and will start testing when they arrive. I still dream of making my own custom cartridges for the Pi 400, including boxes with proper box art, instruction manuals, and all sorts of fun features. I start learning KiCAD soon and will get some rest PCBs ordered.

    Update: Found a link to said device.

    eMMC HAT for Raspberry Pi

  • Pogo Pin Pricing

    Dustin04/27/2022 at 04:08 0 comments

    A quick search of Digikey brings up the cheapest pogo pins at $0.59 each. At this price, it would cost $23.60 per board to break out all 40 GPIO pins using pogo pins. It's unlikely that anything other than the initial prototyping boards, or a dedicated development board would need all 40 GPIO. A typical PiCart board may need 10 pins, costing $5.90 per board in pogo pins. There may be cheaper off brand pins available, but I refuse to sacrifice quality on such a vital component. A bad electrical connection caused by a faulty pogo Pin would likely render the entire board useless and impossible to troubleshoot for the intended users. If my initial testing goes well, I may place a very large order to get a bulk discount on the pins. I may also be able to get them through the PCB fab house directly at a better price, with assembly.

    Though the price of these pins is off putting, I still plan to use them unless I can find a better solution. Edge connectors do come to mind though.

  • Pogo Pin Prototype: Initial Research

    Dustin04/27/2022 at 03:16 0 comments

    Initial Research suggests that using pogo pins, mated to gold plated pads should provide a good electrical connection between cartridge and GPIO pins. Pogo pins are far more expensive than typical header pins, but eliminating the wear and tear on the Pi GPIO pins is the primary concern. I'd planned on waiting until I had a working board design, then adding pogo pins, but I have less time to work on this porject and work out PCB bugs, so I'll likely design a simple prototyping board that simply breaks out all GPIO pins to traces, connected to pogo pins. Essentially a PiHAT breadboard with pogo pins instead of pin headers. The adapter that connects to the Pi should be fairly simple as well, and at least allow me to start testing the hardware concepts immediately. Strong magnets in both the board and adapter would hold the two together, with the pogo pins providing electrical connection. Once I get some experience with KiCAD, I'll design both boards and get some prototypes made for testing. After finalizing the physical connection between boards, I can start on the case, which will also be PCB. The cases will need to be hand assembled, which will add to the cost of production. The extra cost is acceptable as these boards are meant to be used in educational environments, by children. I work with children and know how destructive they can be. I also work in industrial food production, so I know the value of quality, durability, and good design of equipment.

    This is still a top priority project for me, and the most exciting one o have going on. I hope to have the prototype boards ordered in the next month or so. Funding is no longer an issue, but time and energy are severely limited. I may pay someone to design the prototype board for me just to get it done even faster. I'd normally never consider such a thing, but I will break my DIY rules for things that I already have a good understanding of. I will not outsource essential code design until I'm a good enough programmer to disect and check other coder's work. This is still a learning project for me, but it has stalled due to lack of time and skills.

  • Physical Connections and Updates

    Dustin04/11/2022 at 16:02 0 comments

    Random Updates

    With the new job consuming 60 hours a week, plus commute time and extra sleep, I have had very little time to dedicate to any of my projects. This project comes to mind at times, and I wish I had the skill to just sit down and knock it out quickly. I am still learning all the needed skills, so progress is painfully slow. On a brighter note, funding for the project will be readily available in the next few weeks to months, and I could just order everything I need all at once and get started. I plan to order a few more Pi 400 kits. I have my main one, which I still use as my daily driver laptop and Jellyfin server. I am typing on it now. I'd rather not use it for testing. I plan to buy a Pi 400 as a dedicated Jellyfin server, another as a test platform for this project, and maybe even another as a backup, or for a secondary development platform so I can work on 2 projects at the same time. I'll be ordering some bulk SD cards, and setting up a formatting station for managing and backing them up. I currently don't have enough space for so many Pis, as I'm renting from a friend, but I should be setting up a workshop here soon and will have ample room.

    OS Support

    I know that it makes the most sense to support the official Raspberry Pi OS, and that's where I'll likely start, but I also want full support for Pop!_OS by System76 as I've found it to be the best daily driver OS on the Pi to date. They're a small, friendly company who I suspect would really enjoy this project, and I might be able to get some official support, even if it's just some advice over email. I use Pop OS on my Pi 400, only switching it out for Raspberry Pi OS to run my Jellyfin server. Once Jellyfin has offical support for Ubuntu 21.10, I'll switch over to Pop OS entirely. I feel that it would make a friendlier experience for kids as well, since the entire OS is geared towards the scientific, engineering, and educational fields. Ideally, the system could be ported to any Linux OS, but that isn't always feasible. I'm sure Windows 11 will continue to mature on the Pi, and I may end up supporting it at some point, but not right away. I can't stand Windows, and will avoid it as long as I can.

    Physical Cartridge Connection

    This is a very important aspect of the project to me. I've been thinking about wear and tear for years, but have started thinking more deeply about it as a new maintenance engineer. I watch these industrial machines wear themselves out and fall apart in a matter of hours to days, where most consumer equipment would last years. It's quite the eye opener. With the PiCarts, I want to build to an industrial standard, as I know these systems may end up in the hands or children, with their sticky, maximum-effort hands, and complete disregard for strain relief and longevity. I don't blame them, I just understand them. The biggest failure point I have identified so far is the GPIO pins on the Pi 400. Though recessed, they remain exposed and vulnerable. Plugging and unplugging things to and from the GPIO port also requires a significant amount of force, especially if not done straight on.

    I have been really enjoying the magnetic connectors I have on my phone charging cable, as well as the magnetic phone stand I built. I'd like to be able to integrate such a feature into the PiCarts, if feasible, for use with educational systems. The typical hacker will do fine with the regular pins. The matter of being able to short pins still needs addressed. I have been considering pogo pins on the carts, and an adapter that plugs into the GPIO port. I could possibly have the contacts on the Pi side adapter recessed into a PCB, with longer pogo pins on the cart that would fit down into those recesses, and connect when they are safe from the poking and prodding of various objects. This would protect the power pins on the Pi from being shorted. Rare earth magnets in the cart and the adapter could be used to hold the cart to the system, while allowing them to come...

    Read more »

  • Cart Idea: Video Carts

    Dustin11/21/2021 at 20:53 0 comments

    As a kid, I annoyed my parents to no end making them rewind the same few VHS tapes for me several times a day so I could rewatch things over and over again. It also annoyed me to no end when my favorite tapes wore out and died. Sad times to be a kid. These days, we have far better technology. I was listening to a song by Omnia called "The Well" and really enjoyed the story it tells, though simple. It reminded me of the animated tale of The Deathly Hollows from the Harry Potter movie. It got me thinking about how to get more story time into the world. Then I remembered my project here. I imagined having a cartridge that you could just plug in and it would play videos. You could put anything you want on them of course, but something useful and educational would be best. Unless you're like me and like to binge watch Futurama or Spongebob on shuffle. There would be obvious licensing conflicts with selling copyrighted media, so a blank cart with an SD slot or built in flash memory and the video player software could just be sold.

    The hardware would be simple enough and could be a generic design that could be used for media playback of any kind. Headphone jack, media control buttons, perhaps volume control, a "shuffle" button, maybe even a small screen for controlling the software. Another option could be to add a small screen to the GPIO port such as a Pimoroni Hyperpixel 4" display. Being able to watch TV on a tiny display attached to the keyboard and work on a larger HDMI monitor would be quite nice. Also being able to leave the main monitor off, or take the Pi 400 on the road and play media with a tiny display would be great. Such a cart would end up being more expensive than most other carts, as the display itself is rather expensive. Would be well worth it for what I do. I have a Vilros Pidock 400 that turns the Pi 400 into a laptop, but the display uses a fair bit of power and has no brightness control at all, which bothers me at night. Sometimes I wish I could just hit a single button and have something start playing, like a random TV show or movie. Another thought occurred to me: the Pi 400 doesn't have much processing power, and playing media on it will slow it down and may make it less pleasant to use. This could be solved by adding something like a Raspberry Pi Zero 2 W to the cart to handle the actual playback. That would add options to have it stream things from other sources as well.

    Possible hardware:

    The two pieces of hardware above would be enough to get me started, with only buttons needed. A custom board with buttons and audio output would make up the finished item.

    Software wise, I'd either use VLC Media Player for playback, or maybe write a custom program using ffmpeg as the backend. It would be easy to let feature creep take over on this and never get it done. Sticking to the core functions would leave it with play, pause, stop, rewind, fast forward, next, back, and volume controls.

    This particular cart will have to wait until I get a few other pieces of the puzzle put together, but it would be something that I would use regularly as I work.The thought occurred to make a version or some sort of cable that would let it connect to a Pi 400 in the Pidock 400 and mount to the main screen to act as a secondary display as well.

  • SD Card Breakout Board Testing​ 2

    Dustin11/14/2021 at 15:13 0 comments

    I was able to get the board to stop resetting the entire system by hooking it up to 5 volts. I also finally got the SD0 overlay working and confirmed the pins are configured correctly in software. I was unable to get the card to mount, and no activity light action on the breakout board. I'm starting to suspect there is a hardware problem with this breakout board. The overlay is set up to use all of the data pins of the SD card, not just the two that are broken out on this board. I'm going to order a simpler SD breakout board for the next round of testing. I was very frustrated with the lack of progress on this, but I have the software sorted and am happy with that. I'm hoping to have an SD card working over GPIO shortly after the new SD breakout board arrives. If that's the case, this project can move forward onto the software development stage. As much as I want to skip ahead to hat and start making games and programs for this, I don't want to get distracted and put off the hardware aspect, as it's the most important part. 

    The problem I was having with the software was my own dumb fault. I put the sd0 overlay file in "/boot/" instead of "/boot/overlays". That caused it to fail to load. I was also playing around with different overclock settings and such, which I reverted to the original settings. The pins are now configured properly and the OS tries to mount the SD card over SDIO at boot, but fails and starts the OS afterwards. 

    I still have the 512MB SD flash chip I'm not using. It uses the SPI interface, which I have no idea how to use with the Raspberry Pi OS as a mounted drive. I may just use the SPI interface for saving configuration files and data I don't want the end use to mess with. I'd include documentation and ways to modify it of course. 

    Still many important decisions to make, but progress has been made. The first step after getting the SD card working over GPIO will be performance testing. I need to know just what I can do with this card. I'll start with simlpe benchmarks, then move onto real word testing, such as streaming high bitrate video files from it. Read speed is most important to me for this project. I don't have a working SDIO SD flash chip yet, just the SD card itself. The datasheet for the chip claims class 10 performance, I believe. I will just have to get a similar SD card for initial testing an confirm with the flash chip when I get one working.

  • Initial SD Breakout Testing

    Dustin11/14/2021 at 13:26 0 comments

    A few days ago I started testing with the two SD breakout boards I got. One is a micro SD card breakout board, the other is an SD flash chip breakout board. I got the device tree overlay in place as well as turning on polling so it would check for a card inserted every second. When I boot the Pi up, it gives an error saying device timed out and unable to mount, but that's to be expected as I couldn't physically connect the card to the GPIO. When I hook up ground and power the Pi reboots immediately. I couldn't figure out why for a few days, but I have a theory to test now: Too much current draw. That could be a major problem. I don't believe I had the breakout boards powered directly from the 5 volt pins which can provide far more current than the 3.3 volt pins that were recommended in the document I was following. I have a 5 volt tolerant micro SD breakout board, so I'll start with that. If that works, I'll have a second SD card over GPIO and a working proof of concept for this project. That would be good enough for me to move onto software development. 

    I'm going to post this quick update before I try to hook it up so I don't crash the system again. I'm running the latest Raspberry Pi OS (32 bit) from a Samsung Bar 32GB flash drive on a USB 3.0 port to avoid the corrupted SD cards I've been having trouble with lately. I had a 256GB SD card I was going to use for extra storage and backups on the Pi, but it got corrupted so badly I couldn't save it. Ordering a new 512GB soon.

    I'll post another update soon with the test results.

  • Pi 400 Everyday Use Experience

    Dustin11/10/2021 at 15:54 0 comments

    I've had this for a few days now and really enjoy it for the most part. I have a Pi 400 inside the Pidock 400 as my everyday computer as well as the development kit for this project. It is very good so far. My main issue is with the software. I'm having trouble with OS reliability. It crashes randomly and I haven't had the chance to figure out why. I'll keep using it and try to make this my primary PC. I made the switch to Linux in 2018 or so, and have been using it exclusively since. I hope to do the same with the Pi 400. I don't really need much more from an every day computer. I feel it's worth the effort to figure out how to make it more every day friendly. I do need more processing power for video editing and re-encoding, but I have a minimalistic plan for that as well. I'm considering ordering the Minis Forum HX90. It's a very powerful and portable pc that would handle the heavy work the Pi 400 can't. I can even use the Pi 400 as a keyboard and mouse for it, as well as use the Pidock 400 as the monitor, as it has a standard HDMI input. This would let me use my Pi 400 laptop exactly as I already do, but with a very powerful PC running behind the scenes. I plan to travel the country on a motorcycle soon, and don't want to give up a proper desktop PC or my Raspberry Pi projects. This solves many of my issues all at once.

    Overall I love the Pi 400 and Pidock 400. The keyboard is good enough for me, it's portable and powerful enough for my everyday research and programming, and I love the fact that I have such an interesting and useful laptop now.

View all 50 project logs

Enjoy this project?

Share

Discussions

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: https://hackaday.io/project/177861-retrocart-usb-cartridge-system

  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