Ben Heck Reverse Engineers Game Boy Printer

alavy110
منتشر شده در 19 فروردین 1397

A Game Boy printer is used to teach reverse engineering and how data transmission works. The printer is taken apart and hooked up to a Tektronix oscilloscope. Signals are captured, reverse engineered, and replaced with new signals. Win Ben Heck’s Pi-Top Laptop: http://bit.ly/2fG0j0U


Visit the Ben Heck Page on element14: http://bit.ly/2fG30l3


Is the Arduino Merger Good for Innovation or a Cause for Concern: http://bit.ly/2fG4Tyb


Panduit Tool Promo: http://bit.ly/2eO8mti


Using the Game Boy Camera, Ben manages to capture a solid white frame and a solid black frame for testing purposes. This allows him to see how the data is organized. He then hooks up the gamelink cable to the printer and made some test prints. The printer uses thermal paper so it doesn’t have any ink as that would have dried out by now. He discovers that even if you unplug the game boy half way through the print it still finishes the print. This means that the printer has local RAM that stores the image after it starts printing.


Ben proceeds to do a teardown of the Game Boy printer. It contains 8 KB RAM to capture images and print it. There’s also an 8 Bit microcontroller. There are no other major IC’s so the code must be inside the MCU, not on an external ROM. There are two optocouplers, also called “opto isolators” because they’re used to isolate signals from each other. The optocoupler has a pair of LEDS inside of it, one emits light, while the other detects light and uses it to trigger a circuit. It’s like a buffer but it’s completely electrically isolated from one side to the other. This is most likely to prevent spikes of current on the print head from affecting the microcontroller.


There are 18 pins going to the print head. It sends 5 V to the print head and only syncs to ground, turns on, when something is printing. This gives you power, ground, and 16 bits of data. The communication cable interfaces with the microcontroller, taking the 16 bit connection going into it and using it to send out all 16 pixels vertically and send out more data for every horizontal line. When data is sent over, the Microcontroller puts it into the RAM, once completed, the Microcontroller prints it itself from the RAM.


A Tektronix scope is used to capture all the data lines together and figure out how it works. The game boy sends out data vertically rather than horizontally to make it easier for the microcontroller to actually use it. The Game Boy stores the data in 2 bit, 4 shade grey scale, it sends the data to the printer also in 2 bit, 4 shade grey scale and most likely throws out half the data. Commands into the printer’s MCU are likely interrupt-driven, just like the Power Glove. Finally, an Arduino microcontroller is used to simulate how data is sent to the printer and how that data is organized.

دیدگاه کاربران