Welcome to the Beagle Entertainment System! BES originally started as BeagleSNES, a class project for a graduate course in embedded system design that I took a few years ago. My goal was to turn the BeagleBoard-xM ARM-based SBC into a stand-alone Linux appliance that mimicked an SNES. I began by building the SNES9X emulator on that platform, but I quickly found out that the kernel was missing some things that I needed and the emulator's performance wasn't very good by default. I ended up hacking on the bootloader and kernel a lot, as well as spending dozens of hours profiling the emulator code and making various tweaks.
After a lot of research, many late nights, and a lot of swearing, BeagleSNES v0.1 escaped into the wild. Little did I know that I was just starting on my quest to make the best retro-gaming platform that I could. Whenever I could spare a few hours (and even when I couldn't spare them), I would chip away at adding new features, squashing bugs, making the boot time shorter, and making the emulation better and faster.
These days, BeagleSNES is primarily used on the BeagleBone Black platform. It has grown into a far more polished stand-alone appliance that can either use your HDMI television or an LCD cape board for its display. Several students and makers (and corporate interns!) have used BeagleSNES as a basis for their own handheld gaming consoles, class coursework, and other retro-gaming projects.
BeagleSNES is actually only one portion of BES. BES is an emulator suite consisting of two large binaries. The first binary, the main part of BES, is the front-end game selection GUI and the NES/GBC/GBA emulators. The second binary is BeagleSNES, the SNES emulator without a front-end GUI. While BES is licensed under the GPL, BeagleSNES is restricted by the SNES9X license and must remain as a separate binary. Not to worry though... all of the technical details have been worked out and the final result is a seamless experience for the end user.
While I didn't expect much when I started developing this project, it has grown and grown as users have requested features such as save state support, other game console emulators, support for multiple gamepads, GPIO input, easier game menu configuration (now XML-based), and various other features. Last I checked, there were over 5000 downloads of the full BeagleSNES microSD card image. That is roughly one download of BeagleSNES for every 45 BeagleBone Black boards that have been made by CircuitCo!
With BES, I'm currently in the process of making the transition from the 3.8 kernel to the 4.1 mainline kernel for the BeagleBone Black. This change brings with it OpenGL ES support, which has opened up a lot of opportunities for hardware-accelerated scaling and various other speed-ups. With NES, Game Boy Color, and Game Boy Advance support slated for the next release, we're well on our way to having the BeagleBone Black be the flexible, hackable retro-gaming console appliance that I always hoped it would become!
In addition to the software that drives the BES system, I have been working on developing a custom BES cape for interfacing with the original SNES controllers. The cape also includes a battery-backed RTC for cartridges that have internal RTCs to track the time (for example, Pokemon Yellow on the Gameboy). Hopefully, the project will be moving towards creating a complete console with low-latency access to inputs generated by the original console controllers. Using the BeagleBone Black's PRUs, I can bitbang the gamepad interface with negligible performance impact to the rest of the system.
BeagleSNES has a very detailed manual that is written to help users both use the system and understand how it all works. You should take a look at it, since it gives many development details that are of interest to anyone that wishes to turn the BB-xM and BBB into stand-alone appliances. The manual is due for an update for the new features of BES, which will happen upon BES's initial release.
This is very cool and clearly a lot of hard work has gone into it. Nice job. It's especially interesting that you took advantage of a PRU as that would be the main reason for using a BeagleBone for such a project. I'll be curious to see what other uses you can put the PRUs to in this project in the future.
Oh, BTW, in my head I am going to call this the BeagleBoy (or possibly BeagleBoy Advanced) because it sounds right to me. ;')