Hello Element14! It's Nobble!
This is my first entry into the Project14 Monthly Competition!
What's also important, is that I have been a fan of benheck's work since I was a kid. He is one of the main sources of inspiration for my own projects and ideas to make custom builds!
The theme is "A Question of Scale" and the idea is to shrink or grow a project. But as I thought about what I should enter, the idea of portablizing a video game console or making a giant handheld device seemed too cliché. After a while it came to me! What if I turn a small handheld into a even smaller home console? I could morph one of my favorite portable systems into a full-fledged Big Screen device! Thus playing off of both the "Shrink" AND "Grow" theme.
I have always been a big fan of Gameboys, and especially the DMG-01. I love its ability to mod easily, and add extra features like backlights & circuit bending capabilities. (Ben's Giant Gameboy tops 'em all!)
The hardware is pretty solid and lasts the test of time. Since it's been around for so long, the community behind it is vast and ever-growing. Recently, uXe has come up with a VGA-out board for the DMG. It is based off of FPGA circuits and a microcontroller to convert the video signals. Dubbed Easy_VGA, it stays true to the E-Z while installing. Once you install it, the ability for video out functionality to a larger screen is possible.
Kitschbent sent me a few to try out, and after testing them for a bit, I decided I should make an enclosure for the board. But what if I replaced the handheld casing completely, redesigned the case, and made it fit just the parts I needed? With Easy_VGA you do not need the front lcd/button PCB to output video. But that eliminates any inputs for controls. We now need to add a way for the gameboy to communicate with an external controller. So to bypass and remove this pcb, we need to first program an arduino to act in it's replacement. Further understanding of the front pcb was needed.
I disassembled a DMG and removed the PCBs. Then I stripped the boards of unnecessary components so I could make a few board scans and map out the tracings.
After examining where the button pad traces go, we can figure out which pins are used for input signals.
These traces lead to a few components labeled "DAN215", they are used for sending the input signals to the CPU of the Gameboy.
A full schematic of the DMG can be found HERE.
The gameboy uses 4 bits of data to send signals for button presses. Since this is a very basic form of processing controls, we could use a controller with similar specs. The NES controller is a good candidate since it is well documented and also is from around the same era. It has also been used in other related projects.
The IC inside of the controller is a 4021 shift register.
With this schematic we are able to figure out how it sends signal data to the NES console.
Having this info will help with determining how to wire the controller, and writing code for the Arduino. I chose a Pro Micro for the board.
The next image is a board scan of the back PCB with pinouts to wire the arduino to the CPU of the DMG.
As you can see, the back (CPU/Cartridge slot) side of the Gameboy PCBs is smaller than a full DMG.
Since the Gameboy can be powered off of the DC jack, we do not need the battery contacts and removing the batteries can make the case even smaller!
With some wire soldered to the DMG pins labeled in the diagram we can move forward wiring the NES controller and the Pro Micro.
This shows the Pro Micro pinout and the NES controller plug pinout and the listed pins to connect. Use this image to also solder the DMG PCB pins to the Arduino.
Now that the full procedure for wiring an Arduino to a Gameboy and NES controller is solved, the code to communicate between the three circuits is still needed.
This is the FINAL CODE used for interpreting the NES controller button presses.
There are a couple of lines in the code to test that the NES side of it works. Open the Arduino IDE serial monitor and you should see eight ones (11111111) being printed repeatedly, and when you press a button the corresponding 1 should change to a 0. You can comment out/delete: //Serial.println(buttons_state, BIN);
(If using a generic Pro Micro, select Leonardo as your board type in Arduino IDE)
Here is the desoldered 4021 IC breadboarded for testing.
With the code uploaded to the Arduino, it is working on only the back Gameboy PCB using Easy_VGA!
*You can also do a ProSound mod to the DMG allowing for higher quality stereo sound using a 3.5mm headphone jack.
Removal of the old headphone jack is first needed, by removing the 4 wires connecting it to the PCB.
The wiring side of this project is now finished. The next step is to design a case to house everything. I had gone through a few different case designs and revisions toying with a couple types of ideas. One was a box that held the Easy_VGA board and used a GB Link Cable to connect to the DMG. That ended up only working when the link cable was shortened. I also made a case that fit right over the LCD and attached to the front of the Gameboy. This works, but it leaves you with a top heavy handheld...
Since I wanted to stick to the theme of this competition, I spent some time measuring out every detail of the back half of the Gameboy casing. I self-taught myself 3d modelling using Fusion360 a few months ago. 3D design is something I have wanted to learn for years, and I'm surprised at how easy it is once you understand it. I ended up with a case that is smaller than an original DMG-01, and keeps to the look of the original casing. After all, this mod is based on original hardware. I wanted it to look very similar.
This is a render of my final design, minus the lid. It allows access to all needed ports and fits everything inside with adequate space.
The cartridge slot is kept in it's original position and the original power switch cover is used.
After making it into the top 10 in Hack Like Heck, I purchased a couple 3D Printers to help improve my projects and case design. It also reduced the amount of time spent on the casing in the end, which is where I had issues when building my entry for HLH. It took a few test prints until I was happy with the outcome. I wanted it to have a two-tone color scheme and give it a "Nintendo Classics" feel.
The final print was done in Black/Silver using Hatchbox PLA on my Creality Ender3.
I also took apart a generic NES controller to discover the PCB was quite smaller than the casing.
So, I designed a mini controller casing to match the system! It uses original DMG buttons for added "real-feel".
The end result is quite amazing.
A completely redesigned way to play your favorite Gameboy Classics on original hardware!
After completing this project, I have to say, this is my favorite mod so far that I've done to a DMG. And I thought backlighting and biverting was fun!
The hard part was understanding and figuring out how to get the controller to communicate with the Arduino and DMG. I have to give credit to my friends Postman and uXe for helping me with that. Without their advanced knowledge of programming, I wouldn't have been able to complete this project in time to submit.
I hope to keep working with video and audio mods as well as delving into more original hardware tinkering. I have relied on SBCs lately to emulate hardware on TVs, but they only can perform so well. The same effect can be done on modified systems now!
I really enjoyed building yet another project to showcase on Element14!
Please feel free to leave any comments/feedback on my work.
If you enjoyed this project and are interested in building one yourself, check out my listing where you can purchase the case kit!