Uzebox

The Uzebox is an open source 8-bit game console design created by Belogic Software. It is based on the Atmel ATmega644 AVR general purpose microcontroller. The particularity of the system is that it has an interrupt driven kernel and no frame buffer. All functions such as video sync generation, tile rendering and music mixing are done by a background task so games can be developed easily in C/C++.

Two companies introduced commercial implementations: The Fuzebox and the Uzebox AVCore. Since then, about 50 games and demos ranging from classic arcade ports to original games were released by various developers. The Uzebox was listed in Make Magazine's definitive open source hardware projects of 2009.

Design
The design goal was to be as simple as possible yet have good enough sound and graphics and leave enough CPU to implement interesting games. Emphasis was put on making it easy and fun to assemble and program for any hobbyists. The final design contains only two chips: an ATmega644 and an AD725 RGB-to-NTSC converter.

Features

 * Low parts count and cost: The system is made of only two chips and discrete components.
 * Interrupt-driven kernel: No cycle counting required, sound mixing and video generation are all made in the background.
 * 256 simultaneous colors: Accomplished by using a R-2R resistor ladder DAC.
 * 5 channels sound engine: The sound subsystem is composed of 3 wavetable channels, 1 noise channel and 1 PCM channel.
 * MIDI In: With a music sequencer, allows the creation of music directly on the console.
 * Retro controllers: The joypad inputs uses standard SNES controllers interface.
 * SNES Mouse Support.
 * Expandable: I/O lines and peripherals are still available, like the UART and SPI port for one to experiment.
 * Emulator: A fully cycle-perfect emulator greatly eases development.
 * Gameloader: An AVR bootloader that loads and flashes games stored on SD cards.
 * API: Develop games using an API that provides multiple video modes, sound driver and more.
 * Open source: The software and hardware design are totally free and licensed under the GPL.
 * Content: Over 90 games and demos plus tools and documentation all created by a dedicated community.

Specifications

 * CPU: ATmega644 microcontroller
 * Total RAM: 4K
 * Program Memory: 64K
 * Extended Memory: SD/MicroSD Card interface
 * Speed: 28.63636Mhz (Overclocked)
 * Colors: 256 simultaneous colors arranged in a 3:3:2 color space (Red:3 bits, Green:3 bits, Blue: 2 bits)
 * Resolution: Various video modes supporting up to 360x224 pixels. in tiles-only mode
 * Video output: NTSC Composite and S-VIDEO
 * Sound: 5 channels wavetable synthesis, 8-bit mono, mixed at ~15Khz and output via PWM
 * Inputs: Two SNES compatible joypad inputs
 * Options: MIDI-in interface

Video
The video is output on one of the 8-bit I/O port as RGB, 3 bits are allocated for the red component, 3 bits for the green and 2 bits for the blue. Those are fed to a DAC composed of three R-2R resistor ladders which in turn feeds an AD725 RGB-to-NTSC converter from Analog Devices. This gives 256 fixed but simultaneous colors on screen.

The latest video engine boasts 9 video modes that supports bitmapped and sprites-based modes as well a SD card streaming mode that allows the playback of movies. The highest usable resolution attainable on the console is 360x224.

Sound
The sound subsystem is composed of 3 wavetable oscillators channels, one LFSR-based noise channel and a PCM channel (to play samples). Each have independent timbre, frequency and volume. Resolution is 8-bit and is mixed at NTSC line rate (~15Khz) and is output on a single pin via pulse width modulation (PWM). A hi-level engine can play specially formatted MIDI files. The engine also support the concept of "patch streams" for music instruments and sound fx. Similar to a MIDI stream of notes, but instead the stream is composed of sound changing parameters.

Input
The joypad input uses a standard SNES controller interface. An optional MIDI In interface and driver allows to compose music from any sequencer.

Implementations
Since its inception, the Uzebox design has been commercially implemented as:
 * The Fuzebox, a Do-It-Yourself kit
 * The Uzebox AVCore, a fully assembled unit
 * The Uzebox EX1, a Do-It-Yourself kit
 * The EUzebox, a Do-It-Yourself kit with SCART output for the European market

Tools
All developement is done in AVR Studio, an IDE developed by Atmel. Besides being free and easy to use, it includes a cycle-perfect software simulator for all AVR devices. By adding the free WinAVR GCC package, C development is possible on the AVR platform.

A set of tools developed in C and Java help generate content for the game. There is a converter to transform raw images to tiles and maps, a MIDI file converter and a patch/fx editor. Uzem, a fully functional emulator was created to ease development. It supports sound, all graphics modes, integrates a GDB (GNU debugger) server and support the SD card interface and PC joysticks.