Over the years, I have spent a ton of time playing with embedded Linux/Android systems and vintage video game console hardware. Most of my work focuses on using the BeagleBone Black (an ARM-based single board computer developed by BeagleBoard.org) in various ways, though I do quite a bit of desktop Linux development, as well. I have spent a great deal of time playing around with this particular platform, and I served as a mentor in the Google Summer of Code program for BeagleBoard.org in 2015 and 2016.

I have accounts on Github and Hackaday.io that contain source code and documentation about many of my projects.


These are some of my own software projects that I work on during those five free minutes that I have each week:

  • BeagleSNES turns the BeagleBone Black into a retrogaming console that plays thousands of classic games from vintage Nintendo-based gaming systems.

  • BBBAndroid is a full port of Android (AOSP) KitKat 4.4.4 to the BeagleBone Black. The port uses a custom 3.8 Linux kernel that contains support for the BeagleBone cape manager, allowing hardware hobbyists to easily interface custom I2C/SPI/GPIO circuits to an Android system.

  • I spent some time integrating a metadata pathway into the Nintendo Entertainment System's Picture Processing Unit (PPU) to encode depth data into its rendering to create voxel output, eventually leading to some augmented reality rendering...

  • Before I could begin adding a metadata pathway into the NES, though, I had to have a good understanding of how software for the system worked. I wrote a bunch of custom tools for the disassembly and reverse engineering of NES games to discover the locations of memory variables, dump PPU tables, and integrate with various other tools that were already available.


I also have a few hardware projects that I've put together to test out a few ideas:

  • BESCape is a BeagleBone Black cape board designed to natively interface with Super Nintendo/Famicom gamepads using the BeagleBone Programmable Realtime Units (PRUs). Additionally, the cape has a configuration EEPROM and a battery-backed real-time clock. The PCB and schematics were designed using Eagle PCB.

  • I spent some time developing a pin-compatible Ricoh 2A03 in VHDL, but I got distracted by that pesky "PhD research" thing and had to set it aside.


    Every now and then, I contribute patches to open source software projects. Here are a few of them:


    Back when I worked at Loki Software around 2000 or so, I worked on porting several commercial PC game codebases from Windows to Linux. Here are a few of the titles that I worked on:

    • Deus Ex
    • Kohan: Immortal Sovereigns
    • Sid Meier's Alpha Centauri/Alien Crossfire
    • Unreal Tournament
    • Quake III Arena


    When I was working in the inflight entertainment (IFE) industry at Panasonic Avionics Corporation and then at eFlyte/DTI, I ported and localized a large number of Windows PC casual games to resource starved, multimedia embedded Linux platforms.

    Here is a partial list of the titles that I worked on:

    • Alchemy (PopCap)
    • Astropop (PopCap)
    • Atomica (PopCap)
    • Bejeweled (PopCap)
    • Bejeweled 2 (PopCap)
    • Big Money (PopCap)
    • Bookworm (PopCap)
    • Chainz 2 (Mumbo Jumbo)
    • Dynomite (PopCap)
    • Equilibria (Mumbo Jumbo)
    • Feeding Frenzy (PopCap)
    • Gearz (Mumbo Jumbo)
    • Heavy Weapon (PopCap)
    • High Roller (Mumbo Jumbo)
    • IgglePop (PopCap)
    • Insaniquarium (PopCap)
    • Luxor (Mumbo Jumbo)
    • MadCaps (Mumbo Jumbo)
    • Mummy Maze (PopCap)
    • Noah's Ark (PopCap)
    • Pixelus (PopCap)
    • Pizza Frenzy (PopCap)
    • Power Chips (Mumbo Jumbo)
    • Seven Seas (PopCap)
    • Zuma (PopCap)

    There are a few more commercial casual games on the list, but I can't remember them off the top of my head. I also developed a few game titles in-house like multiplayer Texas Holdem and Solitaire. Non-game software that I developed for the inflight market included some SATCOM communications applications (Live Text News and In-Flight Communicator) and a few SATCOM unit-test utilities here and there.