Introduction: Game Boy Reader Controller

In this Instructable I will try to explain how I made the device above.
It functions as a Game Boy cartridge reader, which can read the ROM and read/write the RAM of a Game Boy game.
Afterwards the game will automatically boot so you can play it on your computer. This currently only works on Windows.

I would see this instructable not for beginners, you need some soldering skills before you attempt this instructable. Please read through all the steps first before beginning, this will save time and money.

Bonus
As a sort of bonus you could use the device as a controller, unfortunately I currently have some problems with the code. I made this device for a school project and could not get this part to work, that's why it's a bonus. If anyone finds a solution to the problems, please feel free to comment below so everyone can enjoy this new way of playing.

Step 1: Parts Needed:

- around 60 wires of 20 centimeters

- a DS (Lite) cartridge slot 2

- an Arduino Uno rev. 3

- minimal 40 holes x 50 holes prototyping board (about 2 mm raster)

- 3mm led (default is red)

- 220 Ohm resistor

- 31 header pins

- 74HC595

- 4 2mm screws with a minimal length of 25mm

Bonus parts:

- 74HC165

- 5 tactile buttons

- rotary encoder with button

- 8 x 10k Ohm resistors

Step 2: Tools Needed:

  • soldering iron
  • solder
  • pincers
  • pliers
  • stripping pliers
  • tweezers
  • rotary tool or utility knife
  • drilling machine (or any other method to drill a hole in the prototyping board)
  • ruler (or other measuring tool)

Step 3: Ordering the Casing

Since 3D printing can take a lot of time, we start with ordering the casing. This will take about 6 days. In the mean time you can make the rest of this instructable.

Ordering
Download the 3 parts here.

After that you can order them at Oceanz.
Feel free to choose your own colors and quality to print the parts. Be sure to still use the SLS printing technique, otherwise the buttons get stuck and you won't be able to use them.

Step 4: Soldering Wires to the Cartridge Slot

We start with soldering all the pins of the cartridge slot.
But first you need to cut some pieces from the adapter, otherwise the Game Boy game won't fit. See the first picture to know which pieces need to be cut off. Also cut of the plastic rectangle at the back of the cartridge slot. This way you will be able to slide the game cart right in the casing later on.

The best way to solder wires to the pins, is by soldering them to the back of the slot. So not to the front of the adapter shown on the picture. You can use the different tools to make the soldering easier.

Schematic
I included a picture of the schematics made by InsideGadgets. The resistors are optional and are not included in this instructable because of the small space we work in. Use the schematics to know which cables need to go where, and which can be connected to each other.

Step 5: Cutting the Prototyping Board

Arduino Shield

The next step is to solder the wires to the prototyping board. Before we can do this, we need to cut the prototyping board to the correct sizes. There are different ways to do this. I used a rotary tool, but you can also use a utility knife to break the pieces of.

Dimensions
For the shield we cut a piece of 20 by 21 holes. After that you could try to fit in some header pins and also cut them to the size needed. As long as they can be inserted in all the pins of the Arduino, you should be good.
Though the pins didn't fit the 0 to 7 pins on the Arduino. Therefore I cut off a little part of the shield board and connected the wires directly to the pins, which I'll show the next step

Step 6: Soldering Everything Together

After cutting the shield board we can start fitting everything on there.
I first started with soldering the 74HC595 shift registers to the board. Be sure to solder them on a place where they can not touch any parts of the Arduino board.

After that solder the header pins to the Arduino and test the board after that. If it doesn't fit properly, be sure to change it so it does.

Again, I included the schematics so you know which cables need to go where. Please look at this carefully. As we don't use any resistors, we can easily make short circuits and fry the shift registers or damage other parts.

*** When you solder wires to the header pins on the shield board, be sure to solder them to the bottom of the board. Otherwise the Arduino with the shield attached won't fit inside the casing ***

The next steps are bonus. If you only want the Game Boy reader part, please continue to step 12.

Step 7: *** BONUS *** Soldering the Buttons

The upcoming parts are bonus.

We now start with soldering the buttons. We also use 10k resistors as pull-down resistors so we get more accurate buttons presses.

I included a datasheet of the tactile buttons, see the image to know which wires go where. Afterward it should look like the one in the second picture.

Step 8: *** BONUS *** Soldering the LED and Rotary Encoder

LED

The LED isn't hard to solder. The longest leg is the 5V side and should also contain a 220 Ohm resistor between the leg and the wire. The shorter leg is the Ground side and should only be soldered with a wire.

Rotary Encoder

The rotary encoder has two sides with pins. The side with 3 pins is the rotary side. The one with 2 pins is the buttons side. Again, see the picture to know for sure how to connect the wires.


The middle pin of the rotary part is Ground. The other two pins are the ones which register the rotating of the part. The most right pin is the "A" pin and the most left pin is the "B" pin. Just be sure to first wire pin A to the shift register and after that pin B. Otherwise you have to switch these pins afterwards in the code.
Also, the pins that go to the shift register, should also have a wire with a 10k resistor to Ground.

Step 9: *** BONUS *** Cutting Another Prototyping Board

For the Buttons we cut another prototyping board. This board will go right below the rotary encoder in the case. We also need to drill two holes for the rotary encoder, otherwise the board doesn't fit in.

Dimensions
But first cut the board to a size of 42mm x 44mm. Still, the board won't fit inside. As pictures can say a thousand words, please see the attached sheet. The red parts need to be cut and drilled away.

Marking
The best way to know if the rotary encoder fits is by first marking the prototyping board and see if the hooks on the side of the rotary encoder are within the marked space. After that drill and cut the pieces away.

Step 10: *** BONUS *** Soldering the Bonus Parts

The bonus parts are now ready to be soldered on the board.
First start with soldering the 74HC165 shift register to the board. I placed the shift register on the right side of the board, below the cut off piece and to the right of the rotary encoder.

Schematic
Then solder all the wires to the board. I attached a schematic to show which wire should go where.
Hopefully this helps to solder everything. Be sure to know what the orientation is of the shift register, you can see this at the little half circle indent. The indent is the top of the chip (just like the one in the schematic).

Step 11: *** BONUS *** Putting Everything In

Now we should have everything soldered and ready to be put in the case.

We start with the bonus parts, as these go in the top of the casing.
So start with putting in the rotary encoder. After that slide in the smaller prototyping board so that it rests on the indents. See the picture.

Then put in all the buttons. These should slide in fairly easily.

Step 12: Putting Everything In

Now we should have everything soldered and ready to be put in the case.

Assembly
First let's put in the LED. It goes right below the hole on the front of the device, behind the "B" button.

Then you can slide in the Game Boy cartridge slot. The best way is to start with the right side. Then you can push the left side in place with your tweezers. You can test if it all fits by sliding a Game Boy cartridge in.

Before we can continue, cut of the top pins, otherwise the Arduino together with the shield won't fit inside.

Step 13: Connecting Everything

Our last step of assembling is connecting the shield with the Arduino Uno and sliding the Arduino in place. If you soldered the wires to the bottom of the pins, it should all fit together.

Then screw on the bottom of the device and we are all set to upload some code to the device.

Step 14: Uploading the Arduino Code

We arrived at one of the last steps of this instructable.

To use this device, we need to upload some code. This code also contains the bonus code, so don't worry about that.

What it does
What this code does, is it communicates with a Python script. The Python script tells the Arduino what to do and the Arduino will then execute a piece of code and send data back to the Python script.
So the Python script will tell the device that it needs to dump the Game Boy game. The device responds to that and your Game Boy game will get downloaded to your computer. When both the game and save file have been downloaded, the game automatically starts in an emulator (BGB).

Download & Install

Please download the attached .zip file. This contains the Arduino sketch together with a custom library.
To install this library, you need to copy the folder "GBController" to your Arduino Libraries folder which normally is placed at "C:\Program Files (x86)\Arduino\libraries"

When you copied the folder, you need to restart Arduino IDE completely. So close all your sketches (please save them before doing so) and then open up the GBCartRead_v1_6_Rev1.ino file. Upload it to your Arduino so we can start testing.

*** Before putting in a game cart you need to unplug the device! Otherwise you stand the risk of deleting your RAM on the game cart and thus losing your progress in the game! ***

Step 15: Testing the Device

When plugged in, your Arduino is ready to send some data. But this won't happen as long as the Python script isn't running. So please download the attached file and put it somewhere on your computer.

Python
If you don't have Python installed on your computer, please download it here.
You also need Pyserial.

Test

Right click the GBControllerReader.py file and select "edit with IDE".
You should see something like in the picture.
Now unplug the device, insert a Game Boy cart and reconnect the device if you haven't done so already.
After that you can press F5 to run the code and the Python script will start read the header of the Game Boy game. After that you can select to dump the game.

Step 16: *** BONUS *** Controlling the Game

After you have dumped the game, it will automatically start in the emulator.
You can now start the Processing sketch attached.

Problems
I had some problems with this part though, but maybe it works for you.
As I said in the intro of this instructable. If anyone knows how to solve this problems, feel free te respond in the comments, so I can learn from this (and others as well). And then we will be able to experience a new way of playing our beloved games.

Step 17: Outro

Thanks for reading this instructable. I hope you enjoyed this and had fun making it.
I also want to thank Oceanz again for helping me out with this. They are really great with 3D printing. They deliver great service with great quality and even the best price available. Without them this wouldn't have worked.

Tips?

If you saw a mistake in this instructable or have any tips to make it even better, please feel free to say so. Then we can all enjoy it even more. Of course I want to see how your version turned out, so also feel free to post some pictures of it in the comments.
I'm looking forward to all your reactions.

Happy playing!