Game Boy Catridge plus Programmer

not the first cartridge on this platform

Similar projects worth following
Finally! After all these years I've made some progress and finished one of 5 designs I had in mind :D This might be working together with my ESP boards at some point, but first things first.

This one fits the DIP and PLCC sized ATMEL AT28C256 EEPROMs with the audio line / 5th channel of the Game Boy connected to the Programming pin.

I'll try to talk with the game boy over the Port on the side, basically start from here:

Boards are ordered after midnight! Not the brightest IDEA! Board is 0.8mm, hopefully will fit in a cartridge without cutting the cartridge.

Cartridge costs so far:

1,5 EUR for 1 out of 10 pack AT28C256

1,3 EUR for 1 out of 10 pack boards

Plus some cents filament costs and a reasonable part of the price of the 3D printer I technically don't own, it's just here for the blog commenters.

I need Ideas for a cartridge header / socket. Taking apart classic consoles is a bit on the "don't want to do" side.

Library contains footprints for ICs and Edge connector.

lbr - 20.17 kB - 10/11/2016 at 00:31


brd - 114.21 kB - 10/11/2016 at 00:20


sch - 308.89 kB - 10/11/2016 at 00:20

See BOM Download


Datasheet for rom chip

Adobe Portable Document Format - 659.59 kB - 10/10/2016 at 11:19

Preview Download

View all 4 files

  • DFU made me jump around

    davedarko3 days ago 0 comments

    This board is way out of my Arduino comfort zone... so I'm writing down what I've managed to learn or am able to estimate. I was trying to get this code running - and the way it was given to upload was via a program called dfu_programmer, that is probably best installed via homebrew for mac (my given machine).

    brew install dfu_programmer

    I tried and tried and couldn't figure out what I'm doing (wrong) until I've read someone writing in a forum that in a case of a flashed program there wouldn't be the generic dfu bootloader anymore. Luckily Atmel gives you the DFU hex files on the download page. Here is the datasheet for the bootloader:

    To activate the bootloader you have to have pulled down the HWE pin when releasing the RST pin, a state that my board is constantly set to, since I've copied the teensy design not knowing "better". At this point I'm not sure if this is working well with the bootloader, but I have my concerns since I can't flash anything, but see the devices as " AT90USB128 DFU" in my USB list.

    I have to bodge some buttons and resistor / capacitor thingies together, like in the Hardware Guide of the AT90USBKEY

    The following link [] is still pretty useful for getting the values for the fuse bytes to set the HWBE fuse and the Boot Reset fuse. They seem to be important. Also weird:

    sudo dfu-programmer at90usb1287 getfuse 
    target doesn't support fuse set operation.

    And this is my log of failure, when trying to flash the Atmega1287. Another thing to do is looking up the Halfkey bootloader on the teensy.

    dfu-programmer at90usb1287 flash main.hex --debug 100
         target: at90usb1287
        chip_id: 0x2ffb
      vendor_id: 0x03eb
        command: flash
          quiet: false
          debug: 100
    device_type: AVR
    ------ command specific below ------
       validate: true
       hex file: main.hex
    atmel.c:1153: atmel_flash( 0x7fff5d5b1b40, 0x7fff5d5b1a08, false, false )
    intel_hex.c:673: intel_flash_prep_buffer( 0x7fff5d5b1a08 )
    atmel.c:1193: Flash available from 0x0 to 0x1DFFF (64kB p. 0 to 1), 0x1E000 bytes.
    atmel.c:1197: Data start @ 0x0: 64kB p 0; 128B p 0x0 + 0x0 offset.
    atmel.c:1201: Data end @ 0x17F: 64kB p 0; 128B p 0x2 + 0x7F offset.
    atmel.c:1206: Totals: 0x180 bytes, 3 128B pages, 1 64kB byte pages.
    atmel.c:819: atmel_blank_check( 0x7fff5d5b1b40, 0x00000000, 0x0000017F )
    atmel.c:927: atmel_select_memory_unit( 0x7fff5d5b1b40, 0 )
    atmel.c:941: Ignore Select Memory Unit for non GRP_AVR32 device.
    Checking memory from 0x0 to 0x17F...  
    atmel.c:986: atmel_select_page( 0x7fff5d5b1b40, 0 )
    atmel.c:1000: Selecting page 0, address 0x0.
    atmel.c:752: __atmel_blank_page_check( 0x7fff5d5b1b40, 0x00000000, 0x0000017f )
    atmel.c:784: Flash region from 0x0 to 0x17F is blank.
    atmel.c:862: Flash blank from 0x0 to 0x17F.
    atmel.c:927: atmel_select_memory_unit( 0x7fff5d5b1b40, 0 )
    atmel.c:941: Ignore Select Memory Unit for non GRP_AVR32 device.
    Programming 0x180 bytes...
    atmel.c:986: atmel_select_page( 0x7fff5d5b1b40, 0 )
    atmel.c:1000: Selecting page 0, address 0x0.
    atmel.c:1289: Program data block: 0x0 to 0x17F (p. 0), 0x180 bytes.
    atmel.c:1424: __atmel_flash_block( 0x7fff5d5b1b40, 0x7fff5d5b1a08, false )
    atmel.c:1386: atmel_flash_populate_header( 0x7fff5d5b14a0, 0x0, 0x17F, false )
    atmel.c:1340: atmel_flash_populate_footer( 0x7fff5d5b14a0, 0x7fff5d5b1640, 65535, 65535, 65535 )
    atmel.c:1485: atmel_flash: flash data dfu_download failed.
    atmel.c:1487: Expected message length of 432, got -9.
    atmel.c:1292: Error flashing the block: err -2.
    Memory write error, use debug for more info.
    commands.c:514: Error writing memory data. (err -4)

  • The most expensive RGB light

    davedarko12/22/2016 at 16:25 0 comments


  • boards ordered

    davedarko11/24/2016 at 16:07 2 comments

    The LCD display board and the Socket board are both ordered, as well as a tiny QFN Attiny85 board.

    All boards were upgraded to be send with "super swift" - so I'm looking forward to a 5x3 boards delivery :) :) :)

    yo - @Stefan-Xp - here's a picture of the socket and the super game boy it's from:

  • Tutorial, Guidelines and Informations

    davedarko11/17/2016 at 20:04 0 comments
  • programming Game Boy games on a Mac in 2016

    davedarko11/17/2016 at 00:21 4 comments

    First - get homebrew if you haven't.

    /usr/bin/ruby -e "$(curl -fsSL"
    brew install wget

    Then follow this for installing gbdk, or do what's in the box.

    brew tap mistydemeo/formulae
    brew install --HEAD mistydemeo/formulae/gbdk

    Then start a new.c file with your text editor of choice

    nano new.c 

    and copy this example I borrowed from the credited site

    #include <gb/gb.h>
    #include <stdio.h>
    void main()
            printf("Welcome to GAMEBOY\nProgramming");
            printf("\nPress Start");
            waitpad(J_START);  // other keys are J_A, J_UP, J_SELECT, etc.
            printf("\nIsn't it easy!");

    Run the compiler

    lcc -o new.c

    Lastly, get mGBA to emulate your "game" - example

    and after you hit [ENTER]

  • it feels like midnight, so no order!

    davedarko11/15/2016 at 19:00 7 comments

    Almost every pin is in use or broken out! I've ran all checks that eagle offers me, but I refuse to order because of the time!

    There'a a via on the power line on the right o.O - fixed

    So beautiful! - Sometimes I only upload them to see what they would look like :3

    This is the LCD board that I also have to check again and order soon, not just this evening. It makes sense to have this separate, since the game boy classic also had a separate lcd board - so that's what I do, staying original :D I should make one pin header side 5V and one 3.3V and add some level converting stuff, before I order.

  • It's over 9000

    davedarko11/14/2016 at 22:30 6 comments

    Too. Much. Overkill. what started as a basic teensy++ 2.0 based cartridge reader/writer is now a full blown project with a nokia 5110 LCD display with rgb backlight, 3D printed, vintage looking case, pcb for an at90usb1286. At least in my head. Please. Somebody stop me.

    I slept a night (read: 3hours) over it, I'm going to cut off the display part and will make it a separate board with mounting holes. Furthermore I will find another crystal and button and rearrange everything.

  • inspirational links

    davedarko11/06/2016 at 13:46 0 comments
  • pew pew - 12min down to 5min

    davedarko10/14/2016 at 12:29 4 comments

  • found this on thingiverse

    davedarko10/11/2016 at 19:17 0 comments

View all 10 project logs

Enjoy this project?



Jeremy g. wrote 11/27/2016 at 17:21 point

you can actually use PCI headers as they match up pretty well with the Gameboy cart headers.. this almost makes me want to complete my Gameboy cartridge project..

  Are you sure? yes | no

davedarko wrote 11/27/2016 at 18:20 point

:) thanks for the advice, for now I have the super game boy socket to work with.

  Are you sure? yes | no

Jeremy g. wrote 11/29/2016 at 17:50 point

nice! I'll keep an eye on this project. I'd like to see where it goes. I have to get motivated again to re start the project.. 

also look for gba replacement headers their surface mount and only need a small tab busted out and they work just fine. cost about 3$ if I remember right.

Good luck!

  Are you sure? yes | no

Yvan256 wrote 11/18/2016 at 21:14 point

Maybe contact the people on to learn where they got their connectors?

  Are you sure? yes | no

jaromir.sukuba wrote 10/11/2016 at 12:48 point

Never ever order boards after the midnight. No, it's not quote from Mr. Wing, but actual experience. Leave it for morning and you'll spot error or two. Granted.

  Are you sure? yes | no

davedarko wrote 10/11/2016 at 14:53 point

That's actually my rule, too :) boards are like gremlins..

  Are you sure? yes | no

jaromir.sukuba wrote 10/11/2016 at 16:40 point

Oh here we go. Sometimes I find fascinating how people around the world independently get to the same knowledge, as result of the same conditions :-)

  Are you sure? yes | no

Stuart Longland wrote 10/15/2016 at 03:10 point

But it's always midnight *somewhere*… ;-)

  Are you sure? yes | no

davedarko wrote 10/15/2016 at 05:48 point

This is not a gremlins plothole recovery project :) it's about the position relative to the gremlin because sience btw.

  Are you sure? yes | no

Does this project spark your interest?

Become a member to follow this project and never miss any updates