The GameBoy, Nintendo's handheld gaming console is a nice 8 bit microcomputer system at low cost.
It has a cpu core similar to a Z80, a graphical LC display and a little amount of ram (8kBytes) and it
has a normal Z80 peripheral bus, which is accessible for external hardware via the cartridge connector.
The GameBoy has no internal program memory (besides the little
boot rom which is switched off of the address map as soon as an appropriate
cartridge is recognized). So a cart containing the program memory must be connected.
To do your own programming you need the information about the peculiarities
of the hardware and the registers by which it may be controlled. This information
is collected in the so called Pan
document, which may be found together with other useful docs at Marc
Rawer's GameBoy site.
There exist some freeware tools for software development for the GameBoy:
RGBDS, an assembler/linker by Carsten Sørensen (his site is
maintained now by Otaku No Zoku (RGBDS).
a C compiler by Pascal Felber, now maintained by Michael Hope,
some tools for tile design and such, and
several emulators, which enable you to develop software without the need
of having a programmable cartridge. The emulators to recommend are NO$GMB
by NoCash and VGB by Marat Fayzullin.
How to Get the Code into a Cartridge
The normal game cartridges contain mask programmed roms. Therefore
it is not possible to load your own code into them. But if your electronics
skills are not too bad, you might be able to replace the mask rom af a
game cart by an eprom socket or even better by a flash rom.
If you decide to make a modified game cart with flash rom, you will
need to build a programming device for it. On
Reiner Ziegler's Readplus page you can find detailed instructions on how to
modify a cart. Also explained there are the various possibilities to build
a programming device. Furthermore it is the home of the Readplus software
by which most of existing cart programmers may be controlled.
As programming device there exist my
own version of CartIO which is based on a single sided PCB for easy self making.
If you don't want to modify a game cart, you can buy a programmable
cart 'Doctor GB cart' and the matching programming device 'GB Xchanger'
from Bung Enterprises, Hongkong.
Bung has given up their business (probably because of Nintendo's intervention).
But there are other possibilities: look at
Because of the fact that the cart connector exhibits the processor
bus, it is possible to design carts not only containing program memory
but also specialized peripheral IO. One
example of such a cart you can find at Marc Rawers GB site.
Me myself am trying to design a cart, where the Nintendo's custom memory
bank controller 'mbc' chip is replaced by a programmable logic chip. This
would give the possibility to reserve some address space for IO or for
a big battery backed ram for data acquisition purposes.
My results so far can be found here.
I have a design for a EPROM-only and a Flash/RAM/Battery cart.
BUT these are only first ideas not tested designs!
There is a very detailed FAQ by "GeeBee".
Have a look at
Jeff Frohwein's GB devrs.com and look at the
There are a lot of websites with demo code in assembler and C, home
brown games and tools. Jeff's devrs.com site is the starting point.
A collection of the
most important documents about GameBoy programming can be found at
Marc Rawer's site.
There exists also a mailing list dedicated to GameBoy development.
See at GBDEV subscribing page
(This is the successor of vip.co.za maintained by the same person).
Jeff Frohwein, Pascal Felber, Carsten Sørensen, Reiner Ziegler,
Martin Korth, Michael Mc Cormack and to others for their excellent work
and for making it publicly available. And to Kalle Pihlajasaari for hosting
the mailing list.