Forgot your password?
typodupeerror
Emulation (Games) Portables (Games) Games

Gameboy Color Boot ROM Dumped After 10 Years 124

Posted by Soulskill
from the what's-a-decade-among-friends dept.
An anonymous reader writes "Costis was able to dump the elusive boot ROM from the Gameboy Color by using various voltage and clock glitching tricks. The boot ROM is what initializes the Gameboy hardware, displays the 'GAMEBOY' logo and animation, and makes the trademarked 'cling!' sound effect. Even decapping the CPU had failed previously, but now the boot image and specifics on how it was dumped (along with many photos) are available for download."
This discussion has been archived. No new comments can be posted.

Gameboy Color Boot ROM Dumped After 10 Years

Comments Filter:
  • Cool (Score:5, Interesting)

    by dintech (998802) on Tuesday September 29, 2009 @03:54AM (#29577465)

    I really love reading about the lengths enthusiasts go to when trying to do this kind of thing. For some reason I had assumed that this had been done already since there is already emulation for gameboy color, right? Can someone explain the significance of this development?

  • by noidentity (188756) on Tuesday September 29, 2009 @04:45AM (#29577667)

    Here's my summary of how he did it, since the linked blog posting is quite long:

    When the Game Boy Color powers up, a small internal boot ROM is enabled inside the CPU. This displays the logo, verifies that the game ROM is "genuine", then starts executing it. Just before it starts executing user code, it disables the boot ROM by writing to an I/O register. Once disabled, there is no way to re-enable it, thus user code can't easily read the ROM.

    Costis found that if he stopped the CPU clock for a few seconds, then restarted it, many of the CPU registers (including the program counter) would take on random values. So he placed NOP instructions in all external memory, along with a small dump routine, then stopped and restarted the clock just before the boot ROM wrote to the I/O location to disable itself. This caused the program counter to take on a value outside the boot ROM, and execute all the NOPs until it hit his small dump routine.

  • by Xin Jing (1587107) on Tuesday September 29, 2009 @04:53AM (#29577691)

    This reminds me of the epiphanic moment during the garage scene in Primer:

    "I did not remove any of the bypass caps on the mainboard for the 3.3V rail and it seems like a few seconds are actually required for the internal logic to discharge appreciably (anything less and the system continues running just fine afterward.)"

    Why a few seconds, why not an exact time?

  • by TheSunborn (68004) <tiller&daimi,au,dk> on Tuesday September 29, 2009 @05:09AM (#29577731)

    Why can't you just take the rom chip out of the gameboy, put it in a socket on a computer and just read the rom 1 byte at a time?

    I am just a software guy, with no real lowlevel knowledge of hardware, but I would think you could just take the chip out*, solder the legs from the rom chip, on any kind of socket that take a rom chip, and then just read it from there. But I guess there is a reason you can't just do that. So what reason is that?

    *Might take som magic, but when thinking about how the *&#*$ surface mounted chips serial/io chip were changed on the Amiga 500, it can't be that impossible.

  • by Zombie Ryushu (803103) on Tuesday September 29, 2009 @05:26AM (#29577821)

    Does this mean that we will be able to colorize Non-Super Gameboy Game Boy Games?

    When a Gameboy Color starts up with a Super Gameboy boy game is put into a Super Game Boy, it uses the Super Gameboy Palette with the border that would normally be used on a TV omitted.

    Examples of this:

    Pokemon Red/Blue/Yellow
    Donkey Kong

    Alot of people thought that Pokemon games were Gameboy Color games, and some are, like Pokemon Crystal, but alot of the games are actually Super Gameboy Games.

    Classic Gameboy games such as Tetris, Super Mario Land, and Metroid II had no colorization, so the Gameboy color and Super Gameboy would color them based on an alogorithm. No emulators exist that can colorize a non-Super Gameboy game. They are displayed in Gray Scale.

    My question is, will the dumping of this Bios lead to a better understanding of how Non-Super Gameboy Games are colorized on the Game Boy Color?

  • Re:What the ROM does (Score:3, Interesting)

    by marcansoft (727665) <hector@marcan s o f t . c om> on Tuesday September 29, 2009 @10:05AM (#29579891) Homepage

    I doubt it powers on the LED. The LED on a GBC turns on even without a clock crystal, before the CPU runs any instructions. It may just be redundantly enabling an already enabled LED though. There's also no such thing as the clang "WAV": this is fixed-function sound hardware, so all it does is configure it to output the two notes. And it certainly doesn't copy the game binary to memory, since this is a system that uses ROM cartridges with in-place execution.

  • Re:Cool (Score:5, Interesting)

    by byuu (1455609) on Tuesday September 29, 2009 @10:21AM (#29580095)

    It happens the same with the GBA. While you can emulate games for the GBA without the need for a BIOS file, if you have one, they'll run better \ more accurately (or in some cases, they run instead of not running).

    It really just displays the logo and validates that the Nintendo copyrighted startup logo is present in the ROM. It was a trick to try and prevent third-party publishers from making their own releases. As soon as the Game Boy cartridge is started, the boot ROM is locked out completely and no longer needed. The GBA BIOS is quite different, it has tons of functions like various decompression routines, and without it you tend to have far less accurate timing and you may miss potential edge cases. Think of it as low-level emulation with the BIOS, and high-level emulation (in the vain of N64 graphics emulation) without it.

"Call immediately. Time is running out. We both need to do something monstrous before we die." -- Message from Ralph Steadman to Hunter Thompson

Working...