NeoGB Printer an SD card-based standalone Game Boy Printer emulator.

Overview

The NeoGB Printer

The NeoGB Printer is an SD card-based standalone Game Boy Printer emulator. It is very easy to build with parts readily available on the market. It does require little to no soldering skill and is very easy to flash (no complicated dependancies). Using it is straigthforward and intuitive. Mounting the device with all parts on a table requires about an afternoon from opening the component bags to printing.

This project is very similar to a popular ready-to-use solution available on the market, but the NeoGB Printer is open-source, cheap and tested with success with all officially released games (110 in total) that support the original Gameboy Printer. The total cost for all the parts bougth new is below $15. All parts can be easily exchanged with other projects, reused or harvested from dead electronics as they are all very common.

You just need to upload the code using the Arduino IDE, connect the components like described here, plug your SD card and print any image directly from a Gameboy compatible game. Serial protocol is directly recorded under binary form on SD card. Once your printing session is finished, hold the button (see below) for a few seconds and all the recorded data will be quickly converted to BMP and/or PNG images, ready to use with social media.

Software Setup

First of all, rename the config.h.txt to just config.h to import the pinout settings. This file contains all the options that can be changed in the emulator (pinout, OLED and LEDs features for example). Customize it according to the board and modules you are using.

To install the ESP32 board for the Arduino IDE, follow the instructions here. I highly recommended following the instructions to install via Boards Manager.

You need to install some Libraries from the Arduino Library Manager - Tools > Manage Libraries...

  • ESP32 library (Mandatory)
  • Adafruit SSD1306 and Adafruit GFX Library (If you want to use the OLED Display).

Hardware Setup

This code has been created for a "DOIT ESP32 DEVKIT V1" ESP32 based board. All my tests was executed using this chinese board. You can use any other board available in the market. Just make sure of few points:

  • The number of total pins available in the board doesn't matter (Could be with 30 pins, 36 pins, 38 pins, whatever)
  • It's a Dual Core module (some ESP32 modules are single core, like the ESP32-S2 and ESP32-C3)
  • Have, at least, 2 SPI pins gourps like this example (normally it's called HSPI and VSPI, or sometimes have one called SPI and the other called VSPI or HSPI), make sure to check the pinout before buy one;

Some boards already have a SD Card slot built in. We've never tested this kind of board, but IN THEORY it should work fine (as long as it has SPI pins available). If you choose to use this type of board, we however won't be able to provide any support in case of bug...But feel free to experiment.

Gameboy Link Cable Setup

Gameboy Original/Color Link Cable Pinout. If you don't want to sacrifice a Link Cable, you can use this Gameboy Link Cable Breakout PCB to connect the pins and keep your Link Cable safely ! You can buy this board here, from OSH Park. A bit of do-it-yourself is necessary at this step if you do not use a breakout board.

Different from Arduino that operates in 5V like the GameBoy, the ESP32 operate is in 3.3V on its pins by default. You will need a tiny bidirectionnal Level Shifter like this to handle the communication protocol and prevent any overvoltage/undervoltage from any side. Direct connection between Game Boy and ESP pins without level shifter may work but we do not recommend this for reliability reasons.

Connect the Game Boy serial pins to the ESP pins following this scheme:

 __________
|  6  4  2 |
 \_5__3__1_/ (at cable, front view, Game boy side)

| Link Cable |Level Shifter|  ESP32  |
|------------|-------------|---------|
| Pin 1      |             |   N/A   | <- 5v from Game Boy (unreliable voltage source)
| Pin 2      |  HV1<->LV1  |   G19   | <- Serial Out (Game Boy side)
| Pin 3      |  HV2<->LV2  |   G23   | <- Serial In (Game Boy side)
| Pin 4      |             |   N/A   | <- Serial Data
| Pin 5      |  HV3<->LV3  |   G18   | <- Clock Out
| Pin 6      |  GND<->GND  |   GND   | <- GND
|            |      LV     |  +3.3V  | <- +3.3 volts from ESP32
|            |      HV     |   +5V   | <- +5 volts from ESP32 or USB

If the connection does not work, uncomment the line #define INVERT_SERIAL_PINS in config.h !

SD Card Reader Setup

You need to use a Micro SD Card Module or a SD Card Module to save the data. I highly recommend to get one, especially the SD Card Module, It's more stable than Micro SD Card Module, at least during my tests. To use it, connect the pins following this scheme:

| SD ADAPTER |  ESP32  |
|------------|---------|
| CS         |   G15   | 
| SCK        |   G14   |
| MISO       |   G26   | <-- DON'T USE THE G12! YOU CAN USE ANY OTHER PIN AVAILABLE
| MOSI       |   G13   |
| GND        |   GND   |
| VCC/5v     |   VIN   |
| 3v3        |   N/A   |

Push Button Setup

You will need to add a little Push Button like this to convert all RAW data to BMP and/or PNG. To use it, just set the #define BTN_PUSH in config.h to any pin you want.

The function is simple:

  • Single short press: Force to refresh the image ID (only two games require this action: E.T.: Digital Companion and Mary-Kate and Ashley Pocket Planner).
  • Long Press: Convert all RAW data to BMP/PNG images.
PushButton Schematic
     __________
    |          |
1 --|----------|-- 2
    |          |
3 --|----------|-- 4
    |__________|

| Button | ESP32 |
|--------|-------|
| 1 or 2 |  3v3  | 
| 3 or 4 |  G34  | <-- I recommend to connect a 5K to 10K resistor to the GND together, to act as a Pull Down.

LED to display the Status (optional)

You can add a simple RGB LED like this and/or a standard one. This LED will be very useful to display the printer status, like Idle, Converting, Receiving Data, etc.

To use it, you need to uncomment #define COMMON_ANODE or #define COMMON_CATHODE for RGB LED (based on your LED) or #define LED_STATUS_PIN to use the standard one. Edit the pins in the config.h based on your setup. If your RGB LED uses a Common Anode, connect it to the 3.3v Pin. If it's Common Cathode, connect it to the GND. For the other legs, you need to use at least a 220 Ohm Resistor on each RGB leg. Connect them following the example scheme below (always based on your config.h file)

| RGB | ESP32 |
|-----|-------|
|  R  |  G16  | <-- YOU CAN USE ANY GPIO AVAILABLE. Connect at least a 220 Ohm Resistor with it.
|  G  |  G17  | <-- YOU CAN USE ANY GPIO AVAILABLE. Connect at least a 220 Ohm Resistor with it.
|  B  |  G4   | <-- YOU CAN USE ANY GPIO AVAILABLE. Connect at least a 220 Ohm Resistor with it.

If you are using a standard single color LED, connect it by following the example scheme below (always based on your config.h file). Using a single color LED in combination with OLED display is an interesting setup.

| LED | ESP32 |
|-----|-------|
|  +  |  G5   | <-- ANODE LED (the long one) - YOU CAN USE ANY GPIO AVAILABLE. Connect at least a 220 Ohm Resistor with it.
|  -  |  GND  | <-- CATHODE LED (the short one)

OLED Display Setup (optional)

You can add a tiny oled display like this. To use it, you need to uncomment #define USE_OLED and the following lines. The display will show the current status of the printer.

| OLED DISPLAY |   ESP32   |
|--------------|-----------|
| GND          |    GND    | 
| VIN          | 5v or 3v3 |
| SCL          |    G22    | <-- YOU CAN USE ANY GPIO AVAILABLE
| SDA          |    G21    | <-- YOU CAN USE ANY GPIO AVAILABLE

Powering the beast

Any 5 Volts source available will do the job as the device consumes less than 1 W: powerbank with USB cable, mobile phone with OTG cable, lithium battery with charger circuit, regular AA batteries with 5 volts regulator like the DD1205UA, etc.

How to use it ?

  • Power the ESP, white LED flashes 3 times immediately, followed by an RGB test (Must blink Red first, than Green and than Blue. In this exactly order. Otherwise, change the pin order in the config.h), wait for the next 3 green flashes indicating that the filesystem is ready for printing.
  • Print as with the real Game Boy Printer, as many prints as you wish in a single session. Data are stored in binaries .bin files called "dumps" on the SD card. Batch printing with Game Boy Camera is of course possible.
  • Some rare games require a short press on pushbutton to separate the files after printing as they do not have a margin indication in the print command. If button is pressed short, magenta led make a long flash to indicate that command have been acknowledged.
  • In the same session or later after a reboot, press the pushbutton for about 2 seconds to convert all .bin binaries in .bmp, .png or both. The scaling factor could be independently chosen between 1 and any value for each output format. The conversion begins and ends with 3 blue flashes. Each image requires some time to be converted (depending on the scaling factor used), so convert them regularly and/or be patient.
  • Remove the SD card and enjoy your images ready to be published online !
  • Additionnaly, remote connection with WIFI is under development.
  • There is an easter egg in the printer, will you find it ?

User manual in brief

user_manual

Builds Showcases:

My personal prototype build - zenaro147 Setup by Raphaël BOICHOTy

Take care

You should not power the ESP from the GameBoy, as this might damage the GameBoy itself. The +5 volts from Game Boy serial is not a reliable power source.

Posts about:

Based on existing projects:

Authors contribution:

  • Rafael Zenaro: main code, hardware setting, new ideas, concept art, technical innovations and group facilitation.
  • Brian Khuu: architect of the Matrix, Game Boy Printer emulator core, BMP image decoder core.
  • Raphaël Boichot: serial protocol and code debugging, BMP and PNG upscalers, RGB led support, hardcore gaming with Japanese kusoge.
  • Cristofer Cruz: 3D model for the GB Printer shell.

Want to discuss with the authors or share your art and projects with people fond of the Game Boy Camera and Pocket Printer ? Join the Game Boy Camera Club Discord: https://discord.gg/dKND7cFuqM

credits

List of games tested and fully compatible with the NeoGB Printer:

  • 1942 (never released in Japan)
  • Alice in Wonderland (never released in Japan)
  • Animal Breeder 3 (あにまるぶりーだー3)
  • Animal Breeder 4 (あにまるぶり〜だ〜4)
  • Aqualife (アクアライフ)
  • Asteroids (never released in Japan)
  • Austin Powers: Oh, Behave! (never released in Japan)
  • Austin Powers: Welcome to My Underground Lair! (never released in Japan)
  • Austin Power Episode 3 - Yeah Baby Yeah (unreleased, rom CGBBA3P0.3)
  • Austin Power Episode 4 - Why Make Millions (unreleased, rom CGBBA4P0.0)
  • Cardcaptor Sakura: Itsumo Sakura-chan to Issho! (カードキャプターさくら 〜いつもさくらちゃんと一緒〜)
  • Cardcaptor Sakura: Tomoe Shōgakkō Daiundōkai (カードキャプターさくら 〜友枝小学校大運動会〜)
  • Chee-Chai Alien (ちっちゃいエイリアン)
  • Cross Hunter - Monster Hunter Version (クロスハンター モンスター・ハンター・バージョン)
  • Cross Hunter - Treasure Hunter (クロスハンター トレジャー・ハンター・バージョン)
  • Cross Hunter - X Hunter Version (クロスハンター エックス・ハンター・バージョン)
  • Daa! Daa! Daa! Totsuzen ★ Card de Battle de Uranai de!? (だぁ!だぁ!だぁ! とつぜん★カードでバトルで占いで!?)
  • Daikaijuu Monogatari: The Miracle of the Zone II (大貝獣物語 ザ・ミラクル オブ ザ・ゾーンII)
  • Dejiko no Mahjong Party (でじこの麻雀パーティー)
  • Densha de GO! 2 (電車でGO!2)
  • Dino Breeder 3 - Gaia Fukkatsu (ディノブリーダー3 〜ガイア復活〜)
  • Disney's Dinosaur (never released in Japan)
  • Disney's Tarzan (ディズニーズ ターザン)
  • Donkey Kong Country (ドンキーコング2001)
  • Doraemon Kart 2 (ドラえもんカート2)
  • Doraemon Memories - Nobita no Omoide Daibouken (ドラえもんメモリーズ のび太の想い出大冒険)
  • Doraemon no Game Boy de Asobouyo Deluxe 10 (ドラえもんのGBであそぼうよ デラックス10)
  • Doraemon no Quiz Boy (ドラえもんのクイズボーイ)
  • Dungeon Savior (ダンジョンセイバー)
  • E.T.: Digital Companion (never released in Japan)
  • Fairy Kitty no Kaiun Jiten: Yousei no Kuni no Uranai Shugyou (フェアリーキティの開運辞典 妖精の国の占い修行)
  • Fisher-Price Rescue Heroes: Fire Frenzy (never released in Japan)
  • Game Boy Camera or Pocket Camera (ポケットカメラ)
  • Golf Ou: The King of Golf (ゴルフ王)
  • Hamster Club (ハムスター倶楽部)
  • Hamster Paradise (ハムスターパラダイス)
  • Hamster Paradise 2 (ハムスターパラダイス2)
  • Harvest Moon 2 (牧場物語GB2)
  • Hello Kitty no Beads Koubou (ハローキティのビーズ工房)
  • Hello Kitty no Magical Museum (ハローキティのマジカルミュージアム)
  • Hello Kitty Pocket Camera (ハローキティのポケットカメラ, unreleased, rom GBDHKAJ0.2)
  • Jinsei Game Tomodachi takusan Tsukurou Yo! (人生ゲーム 友達たくさんつくろうよ!)
  • Kakurenbo Battle Monster Tactics (モンスタータクティクス)
  • Kanji Boy (漢字BOY)
  • Karamuchou wa Oosawagi!: Porinkiis to Okashina Nakamatachi (カラムー町は大さわぎ! 〜ポリンキーズとおかしな仲間たち〜)
  • Karamuchou wa Oosawagi!: Okawari! (カラムー町は大さわぎ!おかわりっ!)
  • Kaseki Sousei Reborn II: Monster Digger (化石創世リボーン2 〜モンスターティガー〜)
  • Kettou Transformers Beast Wars - Beast Senshi Saikyou Ketteisen (決闘トランスフォーマービーストウォーズ ビースト戦士最強決定戦)
  • Kidou Senkan Nadesico - Ruri Ruri Mahjong (機動戦艦ナデシコ ルリルリ麻雀)
  • Kisekae Monogatari (きせかえ物語)
  • Klax (never released in Japan)
  • Konchuu Hakase 2 (昆虫博士2)
  • Little Nicky (never released in Japan)
  • Logical (never released in Japan)
  • Love Hina Pocket (ラブ ひな)
  • Magical Drop (never released in Japan)
  • Mary-Kate and Ashley Pocket Planner (never released in Japan)
  • McDonald's Monogatari : Honobono Tenchou Ikusei Game (マクドナルド物語)
  • Mickey's Racing Adventure (never released in Japan)
  • Mickey's Speedway USA (never released in Japan)
  • Mission: Impossible (never released in Japan)
  • Monster ★ Race 2 (もんすたあ★レース2)
  • Monster ★ Race Okawari (もんすたあ★レース おかわり)
  • Nakayoshi Cooking Series 1 - Oishii Cake-ya-san (なかよしクッキングシリーズ1 おいしいケーキ屋さん)
  • Nakayoshi Cooking Series 2 - Oishii Panya-san (なかよしクッキングシリーズ2 おいしいパン屋さん)
  • Nakayoshi Cooking Series 3 - Tanoshii Obentou (なかよしクッキングシリーズ3 たのしいお弁当)
  • Nakayoshi Cooking Series 4 - Tanoshii Dessert (なかよしクッキングシリーズ4 たのしいデザート)
  • Nakayoshi Cooking Series 5 - Cake Wo Tsukurou (なかよしクッキングシリーズ5 こむぎちゃんのケーキをつくろう!)
  • Nakayoshi Pet Series 1: Kawaii Hamster (なかよしペットシリーズ1 かわいいハムスタ)
  • Nakayoshi Pet Series 2: Kawaii Usagi (なかよしペットシリーズ2 かわいいウサギ)
  • Nakayoshi Pet Series 3: Kawaii koinu (なかよしペットシリーズ3 かわいい仔犬)
  • NFL Blitz (never released in Japan)
  • Nintama Rantarou GB: Eawase Challenge Puzzle (忍たま乱太郎GB えあわせチャレンジパズル)
  • Ojarumaru: Mitsunegai Jinja no Ennichi de Ojaru! (おじゃる丸 〜満願神社は縁日でおじゃる!)
  • Pachinko Data Card - Chou Ataru-kun (Pachinko Data Card ちょ〜あたる君〜)
  • Perfect Dark (never released in Japan)
  • Pocket Family 2 (ポケットファミリーGB2)
  • Pocket Kanjirou (ポケット漢字郎)
  • Pocket Puyo Puyo-n (ぽけっとぷよぷよ〜ん)
  • Pokémon Card GB2: Great Rocket-Dan Sanjō! (ポケモンカードGB2 GR団参上!)
  • Pokémon Crystal (ポケットモンスター クリスタルバージョン)
  • Pokémon Gold (ポケットモンスター 金)
  • Pokémon Picross (ポケモンピクロス, unreleased, rom DMGAKVJ0.1)
  • Pokémon Pinball (ポケモンピンボール)
  • Pokémon Silver (ポケットモンスター 銀)
  • Pokémon Trading Card Game (ポケモンカードGB)
  • Pokémon Yellow: Special Pikachu Edition (ポケットモンスター ピカチュウ)
  • Pro Mahjong Tsuwamono GB (プロ麻雀兵 GB)
  • Purikura Pocket 3 - Talent Debut Daisakusen (プリクラポケット3 〜タレントデビュー大作戦〜)
  • Puzzled (never released in Japan)
  • Quest for Camelot (never released in Japan)
  • Roadsters Trophy (never released in Japan)
  • Sanrio Timenet: Kako Hen (サンリオタイムネット 過去編)
  • Sanrio Timenet: Mirai Hen (サンリオタイムネット 未来編)
  • Shinseiki Evangelion Mahjong Hokan Keikaku (新世紀エヴァンゲリオン 麻雀補完計画)
  • SMARTCOM (never released in Japan)
  • Sōko-ban Densetsu: Hikari to Yami no Kuni (倉庫番伝説 光と闇の国)
  • Super Black Bass Pocket 3 (スーパーブラックバスポケット3)
  • Super Mario Bros. Deluxe (スーパーマリオブラザーズデラックス)
  • Sweet Angel (スウィートアンジェ)
  • Sylvanian Families: Otogi no Kuni no Pendant (シルバニアファミリー 〜おとぎの国のペンダント〜)
  • Sylvanian Families 2 - Irozuku Mori no Fantasy (シルバニアファミリー2~色づく森のファンタジー)
  • Sylvanian Families 3 - Hoshi Furu Yoru no Sunadokei (シルバニアファミリー3 星ふる夜のすなどけい)
  • Tales of Phantasia: Nakiri's Dungeon (テイルズ オブ ファンタジア なりきりダンジョン)
  • The Legend of Zelda: Link's Awakening DX (ゼルダの伝説 夢をみる島DX)
  • The Little Mermaid 2: Pinball Frenzy (never released in Japan)
  • Tony Hawk's Pro Skater 2 (never released in Japan)
  • Trade & Battle: Card Hero (トレード&バトル カードヒーロー)
  • Tsuri Sensei 2 (釣り先生2)
  • VS Lemmings (VS.レミングス)

ToDo List:

  • Update the code to support all games
  • Use the original BMP library from Mofosyne C decoder
  • Write the BMP file on SD
  • Fix Palette issue with some games
  • Handle with storage % instead number of files
  • Parse the Output directory too, to return the next image ID
  • Update documetation (wiring, compatible devices, etc)
  • Improve the LED status using a RGB LED
  • Add support to PNG in addition to BMP
  • Add a message to display the number of images printed
  • Add a web interface

Things that can be improved in the future (or not... but feel free to contribute)

  • RTC (Real Time Clock) can be implemented but is not planned with this device. RTC obliges the device to be constantly powered even if it can be placed easily in deep sleep mode. Consequence is that the image files generated on SD card do not own time attributes. Copying the files into your favorite storage folder fixes this "issue".
  • The file conversion to PNG uses BMP image as source material. It would be perfectly possible to embed a faster PNG converter that would directly use the binary stream of data. It is not planned for today as png support is yet fast.
  • The BMP upscaling is quite slow due to the lack of onboard memory and because it makes two things. First, all images are processed by reading/writing to the SD card on the fly, using a very limited buffer (one line of pixels per image at most). Second, it compresses the native 24-bits BMP format output by the C decoder library to 4-bits indexed BMP in order to save storage space.
  • The ESP is forced to run at 80 MHz instead of its native 240 MHz during serial protocol. At full speed we experienced protocol unstability with few games. We did not investigate what was the reason (faulty boards sold on Aliexpress ? Need for a magic cap on serial line ?). Anyway, image conversion is made at full speed, so experience for the user is not altered by this programming design choice.
  • The choice of implementing a short press button function for dealing with some games is due to the fact that automatic splitting of images can be tricky as Game Boy Printer protocol specifications appeared to be rather unstrict. On the 110 games, most of them sends an after margin after printing one image to feed the paper and allow proper cutting. But sometimes, games send an after margin within image for aesthetic reason or no margin at all between images (but white packets instead). This render the automatic splitting of images all but obvious. Reverse engineering the protocol on 110 games was a very huge effort and we have debated a lot on how dealing with particular games that are perhaps totally unknown or forgotten. We hope that the solution provided here is the most convenient for users. It is at least the most conservative from a video game history point of view.
Comments
  • Issues with SD card access on ESP32 board versions 2.0.0, 2.0.1 and 2.0.2

    Issues with SD card access on ESP32 board versions 2.0.0, 2.0.1 and 2.0.2

    I could not get the SD card mounting on my ESP32 when compiled using ESP32 board version 2.0.0 and above. It took me a while to work out what the issue was, until everything suddenly started working when I soldered an SD card to VSPI pins.

    This is not an issue in NeoGB-Printer itself though - there are several upstream issues in ESP32 libraries with SD card access via HSPI, I found at least these three:

    • espressif/arduino-esp32#6162
    • espressif/arduino-esp32#6189
    • espressif/arduino-esp32#6295

    I believe that 2.0.3-RC1 includes some of these fixes, and I had some success running NeoGB-Printer on that version, but I found that 1.0.6 worked the best.

    I think it would be great to update the Software Setup wiki page to suggest using 1.0.6, at least until 2.0.3 is released.

    documentation ESP32 bug 
    opened by 6d64 7
  • SD card keeps corrupting

    SD card keeps corrupting

    This happens randomly when transfering images from my gameboy camera to the ESP32. The oled screen would be stuck at the printer idle screen where it hangs and pressing the button does not do anyth unless i restart the ESP32.

    It would then boot into either access point webserver mode with a 404 webpage on its IP and the usual gbprinter.local on the oled would be replaced by just .local.

    OR

    It would boot into the dumping screen with either 0 dumps or some impossibly large number. I can still transfer images but i would be stuck back at the printer idle screen with unresponsive buttons.

    Am using a TTGO T8 1.7.1 with integrated sd card reader. Wired everything up properly as per my config file below:

    /*********************************
     * GAMEBOY LINK CABLE DEFINITIONS
     *********************************/
    // Note: Serial Clock Pin must be attached to an interrupt pin of the arduino (Pins 1 and 4 are not used)
    //  ___________
    // |  6  4  2  |
    //  \_5__3__1_/   (at cable)
    //
    #define ESP_MOSI_PIN 23
    #define ESP_MISO_PIN 19
    #define ESP_CLK_PIN 18
    #define INVERT_SERIAL_PINS //Invert pin 2 and 3 order, since the pin 2 goes o 3 in the other side of the cable, and 3 goes to 2. This is useful if you are using a breakout board for the link cable
    
    /*****************************
     * SD CARD MODULE DEFINITIONS 
     *****************************/
    //Define the SD Card Module Pins
    #define SD_CS   13
    #define SD_SCK  14
    #define SD_MOSI 15
    #define SD_MISO 2
    
    /************************************
     * PUSH BUTTON AND IMAGE DEFINITIONS 
     ************************************/
    #define BTN_PUSH 34             // Define a PushButton to use to Force a new file/Generate the images.
    //#define BTN_INVERT            //Define to use the LOW state instead HIGH state. Useful for the TTGO board.
    #define BMP_UPSCALE_FACTOR 1    //Set the Upscale factor for the BMP output (Set 0 to disable)
    #define PNG_UPSCALE_FACTOR 1    //Set the Upscale factor for the PNG output (Set 0 to disable)
    
    /***************************
     * OLED DISPLAY DEFINITIONS
     ***************************/
    #define USE_OLED        //Enable OLED
    
    //Uncomment this if you are using SSD1306 display driver (I2C)
    #define USE_SSD1306
    #define OLED_SDA 21
    #define OLED_SCL 22
    #define OLED_COMPINS 1 //If you have some issues with the image, try to change this with values between 1 and 4
    
    //Uncomment this if you are using SSD1331 display driver (SPI)
    //#define USE_SSD1331
    //#define OLED_SCLK 14
    //#define OLED_MOSI 13
    //#define OLED_MISO 12
    //#define OLED_CS   15
    //#define OLED_DC   16
    //#define OLED_RST   4
    
    //Set your display dimensions
    #define SCREEN_WIDTH 128
    #define SCREEN_HEIGHT 32
    //#define OLED_ROTATE   //Rotate the display by 180°
    
    /*************************
     * LED STATUS DEFINITIONS
     *************************/
    // Standard LED Definitions
    #define LED_STATUS_PIN    1       // LED blink on packet reception (2 is internal LED)
    
    // RGB LED Definitions
    //#define LED_STATUS_BLUE  17
    //#define LED_STATUS_RED   16
    //#define LED_STATUS_GREEN 4
    //#define COMMON_ANODE
    //#define COMMON_CATHODE
    
    /*************************
     * WEB SERVER DEFINITIONS
     *************************/
    #define ENABLE_WEBSERVER
    #define WIFI_CONNECT_TIMEOUT 10000              //Connection Timeout in ms
    
    /*************************
     * RTC DEFINITIONS
     *************************/
     #define RTC_TIMEZONE -3 //Define your timezone
     #define RTC_TIMEDIFF 0 //Define the time difference between the NTP server and the real time
    
    opened by Wallnutts 3
  • Issue with Pokemon Pinball Score

    Issue with Pokemon Pinball Score

    Apparently, after some while, the game checks the printer connection sending some "init commands'

    No bin file is saved, but this causes some bugs on printer, like wrong File count and some corrupted score print bins.

    NeoGBP bug 
    opened by zenaro147 2
  • Redunding command

    Redunding command

    This commands in config.h.txt #define BMP_UPSCALE_FACTOR 1 //Set the Upscale factor for the BMP output (Set 0 to disable) #define PNG_UPSCALE_FACTOR 1 //Set the Upscale factor for the PNG output (Set 0 to disable)

    Is redunding with:

    "bmpimage": { "scale":1 }, "pngimage": { "scale":1 }

    In conf.json

    NeoGBP bug 
    opened by Raphael-Boichot 1
  • Couple fixes for latest changes

    Couple fixes for latest changes

    • Fixes a typo (missing semicolon)
    • Adds display for dump count and version after date seek
    • Lowers boot delay to speed up start time
    • Moves initWifi so it doesn't get called twice in print mode
    opened by cristofercruz 0
  • Add config.h preset for LilyGo TTGO-T2 board

    Add config.h preset for LilyGo TTGO-T2 board

    • Adds the config.h preset for LilyGo TTGO-T2 board
    • Adds an option to initialize WiFi when in print mode (avoid TTGO-T2 sleep mode)
    • Updates my showcase build photo
    opened by cristofercruz 0
  • Help or advices wanted

    Help or advices wanted

    Things that can be improved in the future (or not... but feel free to contribute):

    • A better/responsive Web interface. Since the actual is pretty simple.

    • A direct PNG file encoder without using a core BMP encoder first. We were too lazy to write one after the BMP encoder was OK, the PNG encoding being a real pain, it was made starting from a BMP image as separate function rather than integrated it into the emulator core. BMP step could be skipped to gain some time.

    • The ESP is forced to run at 80 MHz instead of its native 240 MHz during serial protocol. At full speed we experienced protocol unstability with few games. We did not investigate what was the reason (faulty boards sold on Aliexpress ? Need for a magic cap on serial line ?). I someone feels qualified to investigate...

    • An embedded image display in 4 shades of gray ?

    enhancement help wanted 
    opened by Raphael-Boichot 0
  • Adjustments for display rotation and webserver idle image fix (96x64)

    Adjustments for display rotation and webserver idle image fix (96x64)

    Added rotate check for SSD1306 Fixed rotate condition for SSD1331 (was upside down) Replaced webserver idle image for 96x64 (was covering up IP address)

    opened by cristofercruz 0
  • Handle power loss during conversion

    Handle power loss during conversion

    I accidentally hit reset while converting files, and it happened after the dump files were already deleted, but before the final file was written out. As result, the dump counter never got decremented, and it would always show that there is one dump to be converted.

    This PR reduces the likelihood that dumps will be irrecoverably lost in case of power loss or reset during conversion:

    • Only delete the dumps after all the conversion is done.
    • In case the dump files get deleted before the dump counter is decremented, the counter would be out of sync with the actual number of files under /dumps. If that happens, set the dumps count to 0 after all the files have been processed.
    enhancement 
    opened by 6d64 0
  • Soft AP config and display IP

    Soft AP config and display IP

    Added constants to config to set the SSID and password when running in access point mode. Fixed display of the server IP address when running in SoftAP mode.

    enhancement 
    opened by 6d64 0
  • Why ESP crashes at 240 MHz in printer mode with some games ?

    Why ESP crashes at 240 MHz in printer mode with some games ?

    We experienced instability with serial protocol if the ESP runs at full speed (240 MHz). We've fixed this by switching to 80 MHz during serial data transmission but we do not understand why it works.

    question 
    opened by Raphael-Boichot 0
  • A PNG encoder instead of BMP encoder in the printer core

    A PNG encoder instead of BMP encoder in the printer core

    The PNG output is currently made by converting a BMP image encoded by the emulator core. It would be possible to skip this step and directly embed PNG encoder into the emulator core.

    enhancement 
    opened by Raphael-Boichot 0
Releases(NeoGBP-1.6.12_v1)
  • NeoGBP-1.6.12_v1(Dec 20, 2022)

    New Features

    • Added Auto-Convertion during the server boot
    • Added a Debug Mode to easily show the Printer Data in a Serial Monitor

    Improvements

    • Add config.h preset for LilyGo TTGO-T2 board by @cristofercruz in https://github.com/zenaro147/NeoGB-Printer/pull/21
    • Couple fixes for latest changes by @cristofercruz in https://github.com/zenaro147/NeoGB-Printer/pull/23
    • Fix "Photo! issue" by @@Raphael-Boichot in https://github.com/zenaro147/NeoGB-Printer/pull/25
    • Fix for Pokémon Pinball by @Raphael-Boichot in https://github.com/zenaro147/NeoGB-Printer/pull/27

    New Contributors

    • @Raphael-Boichot made their first contribution in https://github.com/zenaro147/NeoGB-Printer/pull/27
    Source code(tar.gz)
    Source code(zip)
  • NeoGBP-1.6.10(Jun 5, 2022)

    New Features

    • Added full compatibility with LilyGo TTGO T2 Board. A nice all-in-one solution. Thanks to @cristofercruz
    • Simple RTC functionality (using the EPS internal RTC). It connects to an already configured WiFi Network and retrieves the approximate time via NTP service on each boot. (Useful to add Creation Date/Time on Dump Files and new images). Unfortunately, it doesn't hold the config when you power off.
    • New libraries needed: ArduinoJson / LovyanGFX / NTPClient (You can find these libraries in the Tools > Manage Libraries... option in Arduino IDE)
    • Now, we have 2 configuration files to edit: config.h and conf.json, each one with its own parameters. Make sure you have the most updated layout.

    Improvements

    • Set the config.h to work with the NeoGBP PCB project as default
    • Fix Linux compile by @6d64 in https://github.com/zenaro147/NeoGB-Printer/pull/5
    • Soft AP config and display IP by @6d64 in https://github.com/zenaro147/NeoGB-Printer/pull/6
    • Fix BMP file access by @6d64 in https://github.com/zenaro147/NeoGB-Printer/pull/7
    • Handle power loss during conversion by @6d64 in https://github.com/zenaro147/NeoGB-Printer/pull/8
    • New config file located in /SD/www/ folder called conf.json in the SD card to store custom output settings and change the network settings(WiFi, AccessPoint and MDNS) without flashing the ESP every time. Check out the file here (See above).
    • New config.h file available with a new layout. Please make sure you have the most recent template. Check out the lasted layout here
    • New GFX library for the OLED Display - LovyanGFX
    • Adjustments for display rotation and webserver idle image fix (96x64) by @cristofercruz in https://github.com/zenaro147/NeoGB-Printer/pull/12
    • Display updates - center text, add info by @cristofercruz in https://github.com/zenaro147/NeoGB-Printer/pull/13

    New Contributors

    • @6d64 made their first contribution in https://github.com/zenaro147/NeoGB-Printer/pull/5
    • @cristofercruz made their first contribution in https://github.com/zenaro147/NeoGB-Printer/pull/12

    Full Changelog: https://github.com/zenaro147/NeoGB-Printer/compare/NeoGBP-1.6.8...NeoGBP-1.6.10

    Source code(tar.gz)
    Source code(zip)
  • NeoGBP-1.6.10-BETA(May 10, 2022)

    New Config Files (config.h and conf.json)

    Now, we have 2 configuration files to edit: config.h and conf.json, each one with its own parameters. Make sure you have the most updated layout.

    config.h

    This file still the same, with some changes. There is some new options to set in this file:

    PUSH BUTTON AND IMAGE DEFINITIONS

    • #define BTN_INVERT - Invert the button logic, to use the LOW state instead the HIGH state (useful for PullUp button settings and LilyGo TTGO T2 board)

    OLED DISPLAY DEFINITIONS Before you change any settings in this section, make sure to know what display you are using. Choose only one driver listed below: SSD1306 or SSD1331

    • #define USE_SSD1306 - Uncomment this line and the following three lines below if you are using an I2C display that uses the SSD1306 driver.

    • #define OLED_SDA - Define the SDA pin for the display

    • #define OLED_SCL - Define the SCL pin for the display

    • #define OLED_COMPINS - Let the default value. If you have some issue with the display (like an squeezed image) try to change this value between 1 and 4 (only integer numbers)

    • #define USE_SSD1331 - Uncomment this line and the following three lines below if you are using an SPI monitor that uses the SSD1331 driver.

    • #define OLED_SCLK - Define the SCLK pin for the display

    • #define OLED_MOSI - Define the MOSI pin for the display

    • #define OLED_MISO - Define the MISO pin for the display

    • #define OLED_CS - Define the CS pin for the display

    • #define OLED_DC - Define the DC pin for the display

    • #define OLED_RST - Define the RST pin for the display

    • #define SCREEN_WIDTH - Set your display width

    • #define SCREEN_HEIGHT - Set your display height

    RTC DEFINITIONS

    • #define RTC_TIMEZONE - Set your TimeZone UTC offset (In my case, is -3)
    • #define RTC_TIMEDIFF - Since the RTC included in the ESP is not so accurate, it could be necessary to add this little "time adjust" to match with your actual Date/Time (in ms). Each board will have his own value

    conf.json

    This file will store all customizable configurations, like the mDNS, AccessPoint settings (if the NeoGBP can't connect to a valid network), WiFi settings (useful to access the Web Interface in any device and retrieve the current Date/Time information via NTP during each boot). Any information in this file will replace the default value in the Arduino IDE code.

    This file have the following schema:

    {
      "mdns": "gameboyprinter",
      "ap": {
        "ssid":"gameboyprinter",
        "psk":"gameboyprinter"
      },    
      "network": {
        "ssid":"Your SSID",
        "psk":"Your wifi password"
      },
      "bmpimage": {
        "scale":1
      },
      "pngimage": {
        "scale":1
      }
    }
    
    • mdns - Change the name by which the printer will be accessible
    • ap - AccessPoint settings. Enter your own SSID/Password to access the printer when the NeoGBP can't connect to a valid WiFi network.
    • network - Your WiFi Network settings. Enter your WiFi SSID/Password make the printer connects to your Local Network and access the NeoGBP through any device
    • bmpimage - Set a new upscale value for your BMP images (Set 0 to disable the BMP output)
    • pngimage - Set a new upscale value for your PNG images (Set 0 to disable the PNG output)

    All these settings will be editable through the Web Server Interface in a future update. (Maybe the RTC option will be add to this file)


    New Features

    • Added full compatibility with LilyGo TTGO T2 Board. A nice all-in-one solution. Thanks to @cristofercruz
    • Simple RTC functionality (using the EPS internal RTC). It connects to an already configured WiFi Network and retrieves the approximate time via NTP service on each boot. (Useful to add Creation Date/Time on Dump Files and new images). Unfortunately, it doesn't hold the config when you power off.
    • New libraries needed: ArduinoJson / LovyanGFX / NTPClient (You can find these libraries in the Tools > Manage Libraries... option in Arduino IDE)

    Improvements

    • New config file located in /SD/www/ folder called conf.json in the SD card to store custom output settings and change the network settings(WiFi, AccessPoint and MDNS) without flashing the ESP every time. Check out the file here (See above).
    • New config.h file available with a new layout. Please make sure you have the most recent template. Check out the lasted layout here
    • New GFX library for the OLED Display - LovyanGFX
    • Adjustments for display rotation and webserver idle image fix (96x64) by @cristofercruz in https://github.com/zenaro147/NeoGB-Printer/pull/12
    • Display updates - center text, add info by @cristofercruz in https://github.com/zenaro147/NeoGB-Printer/pull/13

    New Contributors

    • @cristofercruz made their first contribution in https://github.com/zenaro147/NeoGB-Printer/pull/12

    Full Changelog: https://github.com/zenaro147/NeoGB-Printer/compare/NeoGBP-1.6.9-BETA...NeoGBP-1.6.10-BETA

    Source code(tar.gz)
    Source code(zip)
  • NeoGBP-1.6.9-BETA(Apr 21, 2022)

    Improvements

    • Set the config.h to work with the NeoGBP PCB project as default
    • Fix Linux compile by @6d64 in https://github.com/zenaro147/NeoGB-Printer/pull/5
    • Soft AP config and display IP by @6d64 in https://github.com/zenaro147/NeoGB-Printer/pull/6
    • Fix BMP file access by @6d64 in https://github.com/zenaro147/NeoGB-Printer/pull/7
    • Handle power loss during conversion by @6d64 in https://github.com/zenaro147/NeoGB-Printer/pull/8

    New Contributors

    • @6d64 made their first contribution in https://github.com/zenaro147/NeoGB-Printer/pull/5

    Full Changelog: https://github.com/zenaro147/NeoGB-Printer/compare/NeoGBP-1.6.8...NeoGBP-1.6.9-BETA

    Source code(tar.gz)
    Source code(zip)
  • NeoGBP-1.6.8(Apr 2, 2022)

  • NeoGBP-1.6.7-a(Mar 14, 2022)

  • NeoGBP-1.6.6(Nov 29, 2021)

    New Features

    • A basic Web Server to easily delete/donwload your pictures as PNG and BMP
    • Added compatibility with the @HerrZatacke - Game Boy Printer Web App (https://herrzatacke.github.io/gb-printer-web/) via Remote Access (Go to Settings > Printer URL and enter the IP of your printer)
    • Added compatibility with the @Raphael-Boichot - Gameboy Printer Paper Simulation. Just open the NeoGBPrinter_E_paper.m script inside the E_paper folder in the SD root (requires GNU Octave)

    Improvements

    • Enhanced the status messages on the OLED display
    • New dump count system
    • Appended the PNGenc library fixed to the main code. You don't need to install the PNGenc library though the Library Manager.
    • Fast BMP and PNG support and upscaling (no limit in upscaling factor or image length)
    • Code cleaning and optimization
    • Bugs fixed
    Source code(tar.gz)
    Source code(zip)
  • NeoGBP-1.6.5-beta(Nov 28, 2021)

    New Features

    • A basic Web Server to easily delete/donwload your pictures as PNG and BMP
    • Added compatibility with the @HerrZatacke - Game Boy Printer Web App (https://herrzatacke.github.io/gb-printer-web/) via Remote Access (Go to Settings > Printer URL and enter the IP of your printer)
    • Added compatibility with the @Raphael-Boichot - Gameboy Printer Paper Simulation. Just open the NeoGBPrinter_E_paper.m script inside the E_paper folder in the SD root (requires GNU Octave interpreter)

    Improvements

    • Enhanced the status messages on the OLED display
    • New dump count system
    • Fast BMP and PNG support and upscaling (no limit in upscaling factor or image length)
    • Code cleaning and optimization
    • Bugs fixed
    Source code(tar.gz)
    Source code(zip)
  • NeoGBP-1.6.2-beta(Nov 11, 2021)

    Improvements

    • Appended the PNGenc library fixed to the main code. You don't need to install the PNGenc library though the Library Manager.
    • Cleaning-up the Serial messages
    • Added new status to the Display

    Under Development

    • Web Server interface to download the images without remove the SD card (preparation)
    Source code(tar.gz)
    Source code(zip)
  • NeoGBP-v.1.5.1(Nov 6, 2021)

  • NeoGBP-V1.5.0(Nov 6, 2021)

    Bug Fixed:

    • LED report if you use a RGB LED and a standard LED

    Improvements

    • Added a logic to invert the Serial Connection to make easy to configure if you cut a Gameboy GameLink cable in half, or use the breakout board
    • Change from TXT to BIN to store the RAW data received from Gameboy
    Source code(tar.gz)
    Source code(zip)
  • NeoGBP-v1.4.4(Nov 6, 2021)

    Features

    • Receive data directly from any Gameboy game compatible with the Original Gameboy Printer
    • Save the print as BMP and/or PNG images directly in the SD Card
    • Can display the current printer status thought RGB LED and/or Standard LED (single color)
    • The OLED Display can also shows the printer status, plus can show the number of images to convert/converted
    • Use a PushButton to force to refresh the image ID (only two games require this action: E.T.: Digital Companion and Mary-Kate and Ashley Pocket Planner) as a single press action, or hold for 2 seconds to process all RAW data received before to BMP/PNG images

    Also, there is an easter egg in the printer, will you find it?

    Source code(tar.gz)
    Source code(zip)
Owner
Rafael Zenaro
Rafael Zenaro
A Game Boy Printer emulator that supports the Phomemo T02 printer

ESP32 + Phomemo T02 Game Boy Printer This project lets you print Game Boy Printer images via Bluetooth using a Phomemo T02 thermal printer and an ESP3

Jack Gaino 11 Aug 25, 2022
SameBoy DX is a Qt-based interface of SameBoy, a free, highly accurate Game Boy and Game Boy Color emulator.

SameBoy DX SameBoy DX is a Qt-based interface of SameBoy, a free, highly accurate Game Boy and Game Boy Color emulator. Build requirements: CMake Pyth

Snowy 7 Oct 2, 2022
A cycle-accurate Game Boy and Game Boy Color Emulator, with rewind feature.

Azayaka is a free and open-source Game Boy and Game Boy Color emulator written in C++. Features Cycle-Accurate emulation. Console based Debugg

Zach Collins 23 Dec 3, 2022
The Game Boy ROM of the Game Boy bitcoin miner!

game-boy-bitcoin-miner The Game Boy ROM of the Game Boy bitcoin miner! To build this, currently this patch needs to be applied to GBDK: https://gist.g

Ghidra Ninja 80 Dec 11, 2022
A Game Boy emulator with serial data transfer (link cable) support over tcp.

gbmulator A Game Boy emulator with serial data transfer (link cable) support over tcp. Key bindings Key bindings are not configurable yet. Key Action

null 6 Dec 30, 2022
A Game Boy game that rewards you for playing it on several console models!

GB Corp. A Game Boy game for the Game Boy Competition 2021 by Dr. Ludos (2021) This is the source code, you can get a precompiled rom from here: https

Dr. Ludos 10 Sep 25, 2022
GB Studio is a quick and easy to use retro adventure game creator for Game Boy available for Mac, Linux and Windows

GB Studio is a quick and easy to use retro adventure game creator for Game Boy available for Mac, Linux and Windows

Chris Maltby 6.8k Jan 8, 2023
Custom Deflemask .vgm based playback engine for the Nintendo Game Boy

-DeflemaskGBVGM- Custom Deflemask .vgm based playback engine for the Nintendo Game Boy. Now the official Deflemask ROM exporter as of v1.0.3. this eng

Daniel Chu 10 Feb 20, 2022
civilized Game Boy Advance development from the comfort of your own editor

Rath - civilized Game Boy Advance development from the comfort of your own editor what is it Rath is an interactive development environment for the Ga

Ties Stuij 25 Dec 12, 2022
A repository of gate-level simulators and tools for the original Game Boy.

GateBoy is a gate-level simulation of the original Game Boy hardware that was reverse-engineered from die shots of the original DMG-01 chip.

null 1k Dec 24, 2022
A WiFi cartridge for the original Game Boy.

wifi-game-boy-cartridge A WiFi cartridge for the original Game Boy. This open source and open hardware Game Boy cartridge uses an ESP8266 to allow WiF

Sebastian Staacks 130 Dec 29, 2022
Exploit allowing to load arbitrary code on the PSX using only a memory card (no game needed)

FreePSXBoot Exploit allowing to load arbitrary code on the PSX (i.e. PlayStation 1) using only a memory card (no game needed). In other words, it's a

null 399 Jan 2, 2023
Online version of the greatest card game known to man

10Flips Online version of the greatest card game known to man Client The client is made using Emscripten. Installing # Get the emsdk repo git clone ht

Oskar Mendel 2 Oct 26, 2021
Card game with Objective-C using Allegro 4/5

Card game with Objective-C using Allegro 4/5 , This is an alternative of the real game for personal reasons .

Cerbah Kamel 3 Nov 7, 2021
Magarena is a single-player fantasy card game played against a computer opponent.

Magarena is a single-player fantasy card game played against a computer opponent.

MagArena 358 Dec 9, 2022
Freecell Solver - a C library for automatically solving Freecell and some other variants of card Solitaire

The Freecell Solver Repository Root README Freecell Solver is an open source (distributed under the MIT/Expat licence) library, written in C, for atte

Shlomi Fish 55 Dec 23, 2022
Improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World.

OpenXRay OpenXRay is an improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World. S

null 2.2k Jan 1, 2023
Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve external game process read/write with minimum footprint.

Launcher Abuser Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve ex

Ricardo Nacif 80 Nov 25, 2022
To recreate the board game Scotland yard and enable a single player to play the game by letting one of the roles being played by the computer based on written algorithm

Scotland Yard GAME OF SCOTLAND YARD This is a custom version of the classic board game, Scotland Yard .The game uses the London map used in the origin

Brshank 2 Nov 11, 2021