One of my favorite features of the Game Boy Advance growing up was the ability for some games to be played multiplayer with just one cartridge - the first player would have the cartridge and all the other Game Boys would download their side of the client from them. Wanting to replicate this myself, I later learned that this was accomplished with an external 256 KB RAM bank, starting at 0x00200000, that would hold a program that was sent to it via the cable.

However, bafflingly enough, I can't seem to find any resources about how to actually send such a program over the cable. The official programmer's guide from Nintendo is full of information about the different communications modes available to it (multiplayer link, UART, JOY BUS, etc.) and how to operate each of them, but it gives no indication of what communication mode you'd have to use and what bits you would have to send in order to get another Game Boy at the boot screen to start receiving a program. Most of the online resources I've consulted have been similar - lots of information about communication modes, but nothing filled in about the protocol. The most I've been able to find are sources calling it "multiboot", and one piece of ARM MBED source code that runs through the protocol via an ARM microcontroller board.

I know that it's been done, since hobbyists have been doing it for decades, so is there any definitive, general information on how to do it posted anywhere?

  • Can you describe more what kind of answer you want? I looked at the code and in general it is quite simple, the code fully describes and documents how it is done. It just sends the commands and the executable payload over a synchronous serial interface. The payload is just transmitted in slightly obfuscated form based on a key value coming from the receiving unit.
    – Justme
    Apr 7 '20 at 15:33
  • @Justme I'm looking for documentation with the same style and clarity as the other extant documentation on Game Boy Advance functions, going over things like acceptable ranges, edge cases, etc. If that doesn't exist, then I would accept a code sample of doing this from a host GBA.
    – TheHans255
    Apr 7 '20 at 15:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.