Anybody who has even a passing familiarity with IT — and even most who don't — encounters open source software on a daily basis. Whether it's Mozilla's Firefox Web browser, the Apache HTTP Server, which powers most of the world's Web sites, or Google's Android mobile platform, open source software has gone from being solely the domain of geeks to part of many people's everyday life — and it's become big business.
Open source hardware — hardware built using freely distributed and freely modifiable blueprints — is still more of niche category. It is not an area bereft of its high-profile projects, however; the RepRap 3D printer, for example, and the Open Graphics Project.
The Uzebox is another open source hardware project, and, unlike many that begin with grand plans but have fallen by the wayside, it has met with success. The 8-bit games console, which is licensed under version 3.0 of the GNU GPL, has not only been successful in the sense that its design can be downloaded and an actual, working console be constructed. It's also got enough of a following that a completed Uzebox can be purchased online from multiple sources, and, for those who know which end of a soldering iron is more likely to burn a hole in the kitchen bench, DIY component kits can be purchased.
Techworld Australia caught up with Alec Bourque, the creator of the Uzebox, to find out what makes it — and him — tick.
Could you give a brief outline of the Uzebox is? What sort of capabilities and specifications are on offer?
The Uzebox is a "retro minimalist" game console design based on an 8-bit general purpose microcontroller. The main design goal was to keep it simple so it would be easy to understand and assemble by hobbyists. It's made of only two chips and a few discrete parts like resistors and capacitors. Audio and video are generated real-time in software by the microcontroller as a background task, so games can easily be programmed in C language. It's also fully open source so anyone can make and sell their own version. The console uses an overclocked ATmega644 microcontroller and classic Super Nintendo controllers, supports 256 colors and 4 sound channels and has a SD card interface from which games can be loaded from.
Where did the idea for the Uzebox come from? Has creating it been primarily a solo effort?
Ever since I was a youngster, I'd wanted to build my very own game console. When I started the project a couple of years ago, there were some home-made game consoles out there, but they somehow most failed to attract significant interest. No wonder: Some had overly complex, multi-CPU designs, a lot were limited to black-and-white video with basic sound and with some you even had to count machine cycles to make a game! Moreover, none had any API or support forums for curious folks to ask questions and share ideas.
It quickly became obvious that I would need to overcome all these issues at once if I wanted my project to catch on. It was the kind of challenge I needed and the Uzebox project was born. It was mainly a solo effort, but after the initial release some awesome folks contributed key improvements like the SD card interface and the Uzem emulator.
Are there any aspects of the design you're particularly happy with? Especially technical challenging aspects, for example.
I'm pretty proud of the "kernel", the engine that generates video on the fly, mixes music, reads the controllers, etc. It's been written to be extremely customisable and extensible. For instance, since everything is done by the microcontroller, it also means the Uzebox supports unlimited video modes! And there are currently nine video modes, each with their own unique features like tile-based, with sprites, bitmap, high-resolution, etc. Game creators can choose which mode they want by simple specifying a compile-time configuration switch.
Another aspect that enticed a lot of folks to join the Uzebox project was the "Gameloader". It's a small AVR bootloader which displays a video menu, reads games stored on a SD card and programs them on the Atmega644 on the fly. With it, there is no need to be tethered to your PC to play different games; just drag and drop them on a regular SD card and you're free to go and show it off to your friends. It sort of works just like the regular console we're you would pop in a cartridge.
Then there's the approach I used for colour generation. Such circuits are not trivial and I could have decided to roll my own, but I settled for the simpler AD725, a chip that does all the hard work of converting the RGB signals made by the microcontroller into standard NTSC composite video. What's nice is that some Uzebox variants use the RGB signals directly and don't even need the AD725, cutting down costs. That the case of the EUzebox, made for European TVs that have RGB inputs, and the Uzebox JAMMA, a cool implementation that interfaces with Arcade cabinets!
What did you find particularly attractive about the AVR microcontroller you went with?
The ATmega644 is an amazing chip for hobbyists. At the time it went to market, it was the AVR chip with the most RAM and flash available in a hobbyist-friendly "DIP" package. It included many I/O ports, timers and peripherals. You could easily flash your program on it with a $30 programmer. And, most importantly, it could be overclocked by 30 per cent to the frequency required by the AD725 colour converted chip.