Atmega32u4 on the Arduino Micro has a connected GPIO each GameBoy button line. The mechanism for pressing button is very plain- when you press a button you connect the MCU line to GND. To simulate this behaviour Atmega sets the line as output LOW. Realising the button equals configuring the I/O as input. Setting it as output HIGH would do as well but ive noticed theres some Voltage variations between the GameBoy MCU voltage and the bear batteries voltage that the Arduino Micro is connected to (probably some DC-DC Converter in line).


The board itself had to be trimmed a little to fit the space, I had to get rid of the unused pin holes.

The board is reachable with USB on the side of the device. On powerup the program counter steps into the bootloader where it waits 5 seconds for user. If the user wont start programming in that time, it will jump into application code. The bootloader I used is a LUFA library CDC bootloader with some features I have added (ie. the timeout I described). Programming is possible using AVRdude.

I have added a youtube demo to show the project working.