Personal Projects

This is a list of any notable hardware and software projects that I am either currently working on or have worked on in the past. You can find a small amount of information on them as well as their current status here. In many cases, I also have a link to a more complete page or a GitHub repository hosting the project itself.

Name: libnaomi
Status: Active (2020-Present)
Platform: Linux
Language: C/C++
Description: A GCC-based toolchain and accompanying system library that allows for fully open-source development of games and utilities for the Sega Naomi arcade platform. Loosely based on the excellent KallistiOS, this includes a full suite of drivers for the various custom hardware in a Naomi, a custom RTOS-like microkernel, a fairly complete POSIX compatibility layer and a set of tools and makefile bases. Together these allow you to write C or C++ code which compiles natively to the Sega Naomi.
More Info: libnaomi

Name: Netboot Utilities
Status: Active (2019-Present)
Platform: Windows/Linux/OSX + Sega Naomi
Language: Python 3/C
Description: Born out of my frustration at the primitive state of tools for netbooting the Sega Naomi. This includes a full suite of tools for sending games to and receiving communications from a Sega Naomi with a NetDimm running firmware revision 3.06 or newer. It also includes a small executable stub that can be attached to a commercial game before booting it which modifies the EEPROM game settings. This is assisted by a set of tools which allows game options to be selected on a PC before booting the game so you don't have to enter the test menu every single boot. It also includes a full menu application that runs on PC and Sega Naomi which allows you to select games to boot from your arcade cabinet. I use these to provide a solid-state replacement to the aging GD-ROM drives in my various arcade games.
More Info: Netboot Utilities

Name: The Grid SRAM Dumper
Status: Complete (2019-2020)
Platform: Windows/Linux/OSX + Arduino
Language: Python 3/C
Description: A schematic and board layout for an Arduino shield as well as supporting PC and Arduino code that can interface with the SRAM chip found on The Grid arcade boards. This is the chip that holds player profiles. The project includes an Arduino sketch which interfaces with the SRAM chip and talks to utilities running on the PC. The utilities include a full profile editor as well as SRAM chip backup and restore. It also includes a BOM for those who wish to have the shield manufactured with a PCB fabricator and assemble it themselves. Several people have made their own and backed up their profiles!
More Info: The Grid SRAM Dumper

Name: MiniDragon
Status: Inactive (2019-2020)
Platform: Custom
Language: Python/Assembly
Description: A from-scratch designed and assembled CPU made entirely out of transistors, resistors, capacitors and diodes. Loosely based off of accumulator processors like the 6502. I got as far as writing an assembler/disassembler and much of the standard library and assembling a portion of the registers and control circuitry before the prototype was damaged in a move. I don't have the disposable income to manufacture boards anymore so I stopped working on it. There are several major issues with the design that I ran into while assembling it so it is unclear whether I'll ever finish it at this point. The assembler, disassembler, microcode simulator and a ROM board programmer are all written in fully-typed Python 3 and the system library that exists is written in pure MiniDragon assembly language. There also includes a test suite for the microcode to ensure that in theory it is bug free.
More Info: MiniDragon

Name: ACIOLauncher
Status: Inactive (2017-2019)
Platform: BemaniPC (Windows XP Embedded)
Language: C++
Description: A simple program capable of initializing a slotted or wavepass e-Amusement card reader and reading input from the keypad. It uses this input combined with an ini file to launch various executables. Its main use is in allowing for various BEMANI arcade cabinets to present a selection of games to boot. For years now I've wanted to rewrite this to use a simple graphical interface so that it looks much better. However, I've never gotten around to it.
More Info: ACIOLauncher

Name: BEMANI Utils
Status: Inactive (2016-2021)
Platform: LAMP
Language: Python 3/JS
Description: A large collection of tools for working with and preserving dead BEMANI games. This includes a hobby server which can provide score services to several games in the BEMANI series. It also contains a fairly complete renderer of Konami's AFP format which is a fork of Flash that is still in use in their games. The renderer is capable of accurately reproducing most non-interactive game animations including 2D and 3D transformations and animations using Flash bytecode. It also includes a full bytecode decompiler which displays contained bytecode in a C-like pseudo-language. Aside from a web frontend for the score server which is written in JS, the entire project is written in pure Python 3 and is fully typed. There are some cythonized files and in a few cases there are parallel C++ implementations that can be used if a compiler is available which offer speed-ups on the order of 10-100x. However, the whole project can be run with just vanilla Python 3.6 and has been tested on Windows, OSX and various Linux distributions.
More Info: BEMANI Utils

Name: Japanese Practice Guru
Status: Abandoned (2014-2017)
Platform: LAMP
Language: Python/JS
Description: My attempt to solidify my understanding of Angular, join the modern world of cross-platform rich web applications and learn Japanese at the same time. Mostly helped me accomplish the first two as I've abandoned my attempt to learn Japanese.
More Info: N/A

Name: GameRepair.info
Status: Active (2013-Present)
Platform: LAMP
Language: PHP/MySQL
Description: A repair wiki for arcade games that spun out of necessity. Written using the Laravel 3 platform and upgraded to Laravel 4 several years later. The codebase is in maintenance mode at this point but the wiki itself sees occasional use and updates from community contributors. The vast majority of arcade-related repair info got moved to Discord and a few remaining private forums so it never flourished into the reference I hoped that it would.
More Info: GameRepair.info

Name: DragonMedia Player
Status: Abandoned (2008-2013)
Platform: Nintendo Wii
Language: C++
Description: An attempt to dabble in an object oriented model of media players. Frustration with information hiding amongst the inner circle of Wii hackers lead to my abandonment of the project originally. Once the Wii homebrew scene matured I picked it back up again but I didn't have much of a use for a TV-based media player anymore. It never gained the ability to play video and fell into obscurity. I don't think I've booted it up to use it in years. It was written in C++ and supported playing back about twenty audio formats from a variety of sources including the SD card, USB-attached hard drives and SAMBA shares.
More Info: DragonMedia Player

Name: libdragon
Status: Open-Sourced (2009-2012)
Platform: Nintendo 64
Language: C
Description: An open source toolchain and system library to facilitate development of homebrew on the Nintendo 64. Neoflash used it for their official N64 products and several homebrew games and tools are based on it. I no longer work on it aside from occasionally commenting on GitHub and the community has taken over maintenance and new feature additions. libdragon consits of a custom-rolled version of GCC and newlib targeted at the MIPS R4300 processor inside the Nintendo 64 as well as an open source system library written in C to aid in homebrew development. The system library includes low-level drivers enabling users to code software using controllers, memory packs, rumble packs, play back audio and most significantly interface with the hardware 2D and 3D rasterizing hardware for image generation.
More Info: libdragon

Name: DSOrganize
Status: Abandoned (2006-2008)
Platform: Nintendo DS
Language: C
Description: An attempt at an all-in-one application on the DS that ended up being one of the more popular homebrew releases during the height of the platform's popularity. It was a good learning opportunity for me to strengthen my embedded skills. I used the media player for several years after I stopped working on it while I finished college. It was written in C and takes advantage of both the ARM9 and ARM7 processors as well as supporting all of the Nintendo DS hardware peripherals (touch, sound, microphone, wifi, dual screens). It includes a complete audio player, an organizer suite, an IRC client, a simple paint program and a ground up implementation of a web browser that could at the time successfully render websites using HTML, HTTPS, CSS, images and cookies.
More Info: DSOrganize

Name: YoungMX
Status: Abandoned (2001-2013)
Platform: Windows 98, Windows XP
Language: Visual Basic 6.0
Description: My own personal media player that I worked on over the years. I started it for a friend on IRC in order to revive the old Napster interface for playing music. I used to revisit this every few months to fix something here and there but after Windows 7 came out the sockets library no longer worked and a lot of the functionality was broken for good. Very much geared towards my own style of management for large libraries but included a few useful features almost anyone could use. I used toy with the idea of a ground-up rewrite but I no longer listen to music while sitting at a desktop so the idea died with my changing habits. In its heyday it supported playing back audio and video files, audio CDs and shoutcast streams. It supported both Windows codec-based audio and video as well as Winamp plugins for esoteric audio formats. It had a fairly robust set of integrations such as an IRC announcer that also let people request the currently playing file be sent to them, an AIM profile extender HTTP server that showed the current media playing and allowed it to be downloaded, skins for the main interface as well as a mini-interface, integration with media keys, library statistics, bulk renaming and ID3 editing features and a host of other convenient things.
More Info: N/A

Name: DrugWars DS
Status: Complete (2005-2006)
Platform: Nintendo DS
Language: C
Description: My own take on a classic economics simulator and my first released homebrew for the Nintendo DS. It was also the genesis of my libfb library that I used as a basis for DSOrganize. I included this because it is one of the few things I can consider complete and polished. Even though it is simple, I'm proud of it, and it is kind-of fun.
More Info: DrugWars DS

Name: Schematic Nopaste
Status: Complete (2009)
Platform: LAMP
Language: PHP/MySQL
Description: Born out of what I thought was necessity. Allowed a version 5 or version 6 schematic to be uploaded from the Xilinx software suite and displayed in a web browser in a similar fashion to various code nopaste sites. It was more of a proof of concept than a useful tool as nobody seemed to use it. I'd be willing to bet if it was rewritten for KiCad that it might actually see some use.
More Info: Schematic Nopaste

Name: LUG CMS
Status: Complete (2009)
Platform: LAMP
Language: PHP/MySQL
Description: The Linux Users Group at UCLA was still using static web pages on their site when I joined it. As a result, nobody ever updated the site as it was a huge pain. I stepped in due to boredom and coded them a solution that would fit their needs. The custom solution was eventually replaced with a WordPress installation so this work is now lost to time.
More Info: N/A