User:Gilgamesh~enwiki/Gnuboy

gnuboy (all lowercase, but sometimes unofficially spelled GNU Boy) is a Free Software emulator released under the terms of the GNU General Public License ("GPL"). It is 99% execution-compatible with software targeted for the Game Boy ("DMG") and Game Boy Color ("CGB") handheld game consoles sold by Nintendo. It is not compatible with Super Game Boy-specific features or with Game Boy Advance, though it can run Super Game Boy games in DMG or CGB mode.

History
gnuboy was created in 2000 by hobbyist programmers who went by the pseudonyms Laguna and Gilgamesh. Designed from the start with Free Software in mind, the intent was to make a Free reference implementation of DMG and CGB hardware emulation as a humble alternative to many closed source or sloppily-coded emulators available at the time. Laguna disagreed with the vast majority of the existing emulation community, but enjoyed the prospect of such a challenging project. Likewise, Gilgamesh lamented that the scene was dominated by closed source software and programmers who wished to make themselves popular; he felt that what he called "emulation science" was not well appreciated, and should be properly made into art. As a natural result of this collaboration, Laguna wrote most of the code, and Gilgamesh gathered most of the research scattered over the world wide web.

Design
Programmed in the C programming language with optional pluggable GNU assembly, gnuboy was designed as much as a presentational work of programming art as it was an emulator. Laguna employed strict code design philosophies to divide the code into highly independent codebases that could be mixed and matched with relative ease towards compiling the program to a target platform.

The central codebase, encompassing the primary core functionality and abstraction layers of the emulator itself, was the most portable codebase, designed to be conservatively portable to nearly every dialect of plain C on nearly every commonly used C compiler. This codebase was further subdivided into highly independent code modules to handle various separate tasks while sharing as few common variables as possible. Most of the data that was shared between modules was handled through an interface Laguna wrote called rc, largely inspired by the global variable abstraction layer used in the Quake shell. 99% of this code was written by Laguna, while Gilgamesh wrote part of the CPU debugger, and gathered and organized most of the abstract technical information for Laguna to use.

The gnuboy project also supported a documented series of abstract functions that could join the central codebase with peripheral (system-specific) modules so that the program could be ported to a target operating system. This interface extended the rc system, but also included an event queue in the central codebase, where peripheral modules could send events to the queue, and then code in the central codebase could poll the queue for new information, such as when a button was pressed on the game controller, or when the display device reached a vertical blank.

At first, the project included only the central codebase, and minimal peripheral modules to compile the program at first in Linux, and then in both Linux and Win32 using the Simple DirectMedia Library, and with minimal architecture-specific optional optimized assembly language code only for the x86 target. As the project evolved, more programmers joined, and more peripheral modules were written and bundled with the distribution to allow the program to be compiled on more target platforms, including MS-DOS and the UNIX-like environment in general.

Project Status
The gnuboy project was quietly abandoned by Laguna in 2002 due to reduced interest in the project, as well as the fact that his annoyance towards the lameness in the emulation scene had reached critical mass. Gilgamesh quit at the same time because he had significantly less intimate familiarity with the code than Laguna, and could not easily continue the project on his own. But the project did not die, and the number of ports multiplied at the hands of independent programmers. Eventually, gnuboy became widespread on personal digital assistants and cellular phones, becoming the most popular DMG- and CGB-compatible emulator for these environments. None of these wireless ports had any involvement from Laguna nor Gilgamesh.

As gnuboy matured, the original problem that influenced its creation had largely (though not completely) disappeared all over the emulation scene. Popular emulators such as ZSNES had become open source, even under the GPL. Later, the emulator VisualBoyAdvance ("VBA") was published under the GPL with significantly more compatibility than gnuboy, but without nearly as much portability nor elegant modular design.

Today, VBA &mdash; with its added Game Boy Advance-compatible emulation &mdash; is generally also the most popular GB-compatible emulator for Win32, while gnuboy dominates outside Win32 in availability of ports for different target operating systems. gnuboy has greater portability, flexibility and configurability of its internal settings, while VBA offers considerably more optional features and an integrated GUI.

Independently of the gnuboy project, it has been ported to Sega Dreamcast as "DCGNUboy", and on iPod Linux as "iBoy". Running in iPod Linux 2.4, the newest version can run almost all monochrome ROMs and Gameboy Colour ROMs. It has also been integrated into the plugins list of Rockbox as Rockboy and also ported to the PlayStation Portable as a homebrew application.

External links and references

 * iBoy (Wiki article) A port of gnuboy for iPodLinux
 * Freshmeat project page
 * Old homepage contains sources and binaries if the new home page is down
 * gnuboy home page on the wayback machine
 * The last version of the official gnuboy sources, from the short-lived CVS server originally hosted by Joshua_ from EFNet #gameboy. This version fixes a number of small bugs in 1.0.3 and should fix one or two CGB games which wouldn't run before.
 * Free Software Foundation software directory listing for gnuboy
 * gnuboy in Debian Linux
 * A port of gnuboy for Smartphone 2002/2003
 * A port of gnuboy for Windows CE
 * A port of gnuboy for H/PC
 * WAC gnuboy CE at Softpedia
 * gnuboy page at Zophar's Domain
 * gnuboy saved state archive at Zophar's Domain
 * A port of gnuboy for PSP

iPodLinux Category:IPod software Category:Custom firmware Category:Game Boy emulators Category:Free emulation software Category:GP2X emulation software Category:Linux emulation software

fr:Gnuboy pt:Gnuboy