Marshmallow on the Raspberry Pi

Marshmallow Entertainment System

Back when I was a kid, I decided I wanted to make my own game console. Granted I also wanted to be an astronaut and the first man on Mars, but I had to draw the line somewhere.

Marshmallow Game Engine started as a way for me to keep my cross-platform game engine chops up during my spare time (not that I have that much spare time mind you). But with the advent of both powerful and affordable hardware like the Raspberry Pi, I started looking into creating my own game console again, and I have to admit, I’m very excited.


Thanks to the wonderful Raspberry Pi, I’m finally able to create an affordable DIY console kit for my game engine.

The following are some common components in game consoles, I’ll go through the list so you can get an idea of how the end product will work.

Controllers & Ports

Luckily the RPI has a couple of built in USB ports. A simple USB port hub or something like the Mayflash Wii classic controller pro to PC which can handle two controllers per USB slot can be used to add more ports when needed.

Not all USB controllers will be supported, but I will target the most common ones in the beginning, user submitted mappings will soon follow.

Reliable power cycle

Since we can’t have people cut power to the running system willy-nilly, I created a little board to take care of the power distribution.


An ATtiny85 MCU is the brains behind the board, it will later on output debug messages via the indicator LED, but for now it flashes at two different frequencies for boot and shutdown, it also signals the main board when it’s time to shutdown properly.


The board is powered by a 5V@2A power supply which is forwarded to the main board when the console is turned on, the rest of the board runs on 3V3 and consumes about 0.007ma in stand-by mode, and about 10ma when the indicator light is on.

Hardware specs and source code can be found on my GitHub account, all covered under the BSD and CERN OH licenses.

Media Slot

Since I’m planning on having mainly downloadable content, an optical media drive or cartage slot would not make much sense (fun as it may be). I might add external USB storage support.


No definitive case design yet. I’m considering laser cut PCB.

Operating System

Since speed and boot time are very high priority when it comes to game consoles, I decided to build my own distro. It’s lean, mean and comes in one single flavor, COUGAR.

You can see it boot here, don’t look away or you might not see it boot up at all.

I found that on some LCD displays, screen settling takes longer than the actual system boot, which is pretty awesome. The game engine waits for the screen to be ready before it continues running, this applies for first boot and for video output switching (HDMI <=> Composite).

Game Engine

I’m using my own game engine which is still under heavy development, I’m trying to get people interested in helping out with port maintenance (specially the Windows and MacOS X ports). If you’re interested please contact me.

See it in action

I showed off my progress on Adafruit Industries Show and Tell

Fast-forward to the 11 minute mark.

Using real marshmallows and the MakeyMakey

Try it out!

If you want to try out the demo, just follow the instructions below:

xz -d sdcard.img.xz
sudo dd if=sdcard.img of=/dev/**YOUR-DEV-NODE**

After it’s done, insert the sdcard in your Raspberry Pi and plug it in!


You will need to have a keyboard handy since the odds you have a supported gamepad/joystick is pretty thin (donations welcome!).

F1 – restarts the demo ESC – kills the demo SPACE – Jumps LEFT – Move left RIGHT – Move right LSHIFT – Run


You are probably asking yourself “How can I help?”, well I’m glad you asked!

I’m currently taking hardware and PayPal donations, if you have a game controller you want supported, a Raspberry Pi laying around or too much cash in your bank account and want to fund further development, feel free to contact me or hit that nifty PayPal Donate button on my site.

Thanks for your interest in my project, please feel free to leave comments or suggestions below.

Also, I’m usually around on IRC #marshmallow_h @ freenode


32 thoughts on “Marshmallow Entertainment System”

  1. You could have the cartridge be a pointer to the downloadable content…

    How about printing box-art with a QR of the URL for the content on some cardboard and have a webcam be the interface to the pi?

  2. A NES like case would be wonderfull. 2 USB ports where the controller ports are and a SD card slot where the cardridge slot is :D

    I can only help with some graphical design and interaction stuff (OS, menus etc. etc.)

    Just mail me if you need someone for that.

    Good luck from The Netherlands!

        1. Thanks for pointing out the problem, Fixed! New image uploaded. The distro is my custom distro based off buildroot, no game engine. The MES/Game-Console is both the hardware and software (i.e. the RPI and a special build of my distro with a few tweaks and the demo).

  3. Hello,

    Your distro boots insanely fast, awesome! I found where you start your game from. Instead of your game, I would like to start feh photo viewer. However, to install feh, I need the terminal. Could you tell me how to get into the terminal? I have removed the line where you start your game from, but now it hangs on the colory screen.

    Thanks in advance,


    1. The MES image is tuned to work with Marshmallow and little else, it has no frame buffer console for example, you will need a TTL cable (like this one if you plan on messing around with it TTY. It might be easier if you play around with rpi-buildroot (my vanilla Raspberry Pi distro) since it has no MES-specific tweaks.

      As a side note, I think feh requires X11 does it not? if so, you will need to turn X11 on in builroot so it actually gets built in your system. The demo image and the MES image don’t have X11 and friends.

      I’ll soon be releasing more details on how to use rpi-buildroot to build a custom Raspberry Pi image, maybe you can wait a little for it to be released, if not, feel free to email me and I can give you a hand. :)

      You can find rpi-buildroot here:

  4. I really like the idea, you mentioned making a dashboard for MES, does this mean that eventually multiple games will be available with the potential for people to code games specifically for MES?

    1. Bingo, after I finish refactoring I will continue development on the dashboard. I’m planning on offering a system-wide marshmallow build which developers can specifically target if they so choose. developers could also bundle their own custom version. This means that other non-marshmallow games could run as well, that’s if they can work directly with Video Core.

  5. Hello, I tryed the buildroot toolchain to compile

    wget tar -xvJf rpi-buildroot-toolchain.tar.xz source rpi-buildroot-toolchain/env $CC -I”${BUILDROOT_STAGING_DIR}/usr/include” \ -I”${BUILDROOT_STAGING_DIR}/opt/vc/include” \ -L”${BUILDROOT_STAGING_DIR}/opt/vc/lib” \ -L”${BUILDROOT_STAGING_DIR}/usr/lib” \ -L”${BUILDROOT_STAGING_DIR}/lib” \ -L”${BUILDROOT_TARGET_DIR}/opt/vc/lib” \ -L”${BUILDROOT_TARGET_DIR}/usr/lib” \ -L”${BUILDROOT_TARGET_DIR}/lib” \ main.c

    But at the end i just get an error : /home/fred/rpi-buildroot-toolchain-x86_64/host/usr/bin/../libexec/gcc/arm-buildroot-linux-uclibcgnueabi/4.7.3/cc1: error while loading shared libraries: cannot open shared object file: No such file or directory

  6. That kind of attention to details that make or break an experience, like the simple act halting the game during display initialization, is uncommon in both hardware and software designers these days. I think you might have the right idea. I will be following this project as I learn more about it – I’ve always wanted a practical, easy-to-use, detail-oriented, open-source dedicated game console with good support so I’ll be very excited if that’s what this turns into.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>