Skip to the content
PCBKitNew board
4 layers36 × 48 mmApollo3 module, the printed circuit board in 3D

Apollo3 module

TUDSSL/ENGAGE286

Source code repository for ENGAGE: Battery-Free Game Boy

Size
36 × 48 mm
Copper layers
4
Thickness
1.6 mm
Parts
44
Nets
81
Pads
250
Tracks, vias
763, 117
Pours
6
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
22 Jul 2020
Updated
6 Feb 2024

Overview

Apollo3 module is an open-source printed circuit board by TUDSSL, from the TUDSSL/ENGAGE repository on GitHub, published under the MIT licence. It is a 4-layer board of 36 × 48 mm with 44 parts on 81 nets, routed with 763 tracks and 117 vias.

It is built around the B3U-1000P and ECS-320-8-47-JTN-TR. Its parts include 19 capacitors, 8 resistors, 6 connectors, 4 inductors and 2 ICs. It belongs with the retro computing and games and power boards of this library.

Main components

2

README

README.md

Battery-Free Game Boy

This is the official public repository for ENGAGE: the battery-free gaming console.

Project Overview

Rationale

Battery-free devices can make phone calls, facilitate machine learning, or even track eyes, but immersive interactive experience without batteries has not been explored so far. In this project we focus on this ignored part of the battery-free device ecosystem. We explore how reactive and user-centric applications, mobile gaming in particular, can also be battery-free.

The Basic Problem of Gaming without Batteries: Power Failures

Powering small embedded computer only with energy harvesting would cause frequent power failures, resulting in a constant restart of a long-running application. Let us look at the above figure which symbolically represents an execution of a Tetris game on a battery-free platform powered by harvested (fluctuating) energy. Without any protection against power failures the game would play until energy is lost (i.e. at line 185) and then would restart from the loading screen. Intermittent computing techniques would protect from this unwanted behaviour: after a power failure, line 186 would be executed proceeding from the exact system state as before the power failure. This way a game state will resume at the exact frame where the play ended due to power failure (in other words, tetromino will be in the same place when the game resumes).

System Design: Game Boy Emulation and System State Checkpointing

We designed a Nintendo Game Boy emulator, which we call Energy Aware Gaming (ENGAGE) platform, as a proof of concept that interactive systems powered by only by (intermittently-available) energy harvesting is possible. ENGAGE is build around four key components (see also figure above):

  1. Game emulation: Use processor emulation to play (Game Boy) retro games to resemble classic Game Boy platform feel;
  2. Kernel: Efficiently checkpoint minimal game state to the dedicated non-volatile memory to protect from a restart after a power failure, enabling continuous game play;
  3. Energy: Power battery-free gaming console from gaming actions (button presses) and from ambient solar energy and store this energy in a small capacitor;
  4. Hardware: Exploit leading (but off-the-shelf and accessible to everyone) low-power 32-bit ARM Cortex M4 microcontroller and external FRAM to support checkpointing system.

Hardware

ENGAGE internal PCB is depicted on the above figure (left-hand side: front, right-hand side: back) with the main components (A) Ambiq Apollo3 Blue ARM Cortex-M4 MCU, (B) Fujitsu MB85RS4MT 512 KB FRAM, (C) ZF AFIG-0007 energy harvesting switch, (D) Semiconductor Components Industries NSR1030QMUTWG low forward voltage diode bridge, (E) micro USB debugging port, (F) display connector, (G) solar panels connector, (H) cartridge interface, (I) Texas Instruments BQ25570 harvester/power manager, and (J) Texas Instruments TPS61099 boost converter.

The specific internals of ENGAGE are as follows.

Microcontroller: ENGAGE is based on ARM MCU architecture, a departure from Texas Instruments MSP430 FRAM series microcontrollers typically used in intermittent computing systems. Specifically, we have used Ambiq Apollo3 Blue ARM Cortex-M4 (operating at a clock frequency of 96 MHz) chosen for its best-in-class energy efficiency. Apollo3 MCU (marked as (A) in the above figure) runs the Game Boy emulator and checkpointing software.

Memory: A fast, byte-addressable, non-volatile memory is crucial to enable saving and restoring ENGAGE state (in other words, game state) in spite of power failures. To enable this, we equipped ENGAGE with an external dedicated FRAM IC: Fujitsu MB85RS4MT 512 KB FRAM, marked as (B) in the above figure, connected through SPI to the MCU providing a fast (enough) and durable method of non-volatile storage for checkpoints.

Energy Harvesting: We extract energy from two sources: (i) button presses, using six mechanical off-the-shelf ZF AFIG-0007 energy harvesting switches - four switches at the D-pad and one switch per "A" and "B" button (see (C) in the above figure), and (ii) a set of Panasonic AM-1417CA amorphous silicon solar cells attached to the front of the Game Boy chassis. Solar panels are managed by Texas Instruments BQ25570 harvester/power manager. Harvested energy is stored in a 3.3 mF capacitor.

Cartridges: To be able to read Game Boy game cartridges, a cartridge connector is placed on the back of the ENGAGE platform PCB (marked as (H) in the above figure). The cartridge interfaces with the MCU using Semtech SX1503 I/O expanders. This extender translates the 3V system voltage to 5V logic required by the cartridge.

Display: It was difficult to source a large display that had reasonable power requirements, a decent refresh rate, and minimal external driving circuitry. We quickly discarded the use of electronic ink displays because of its slow refresh rate and complex driving circuitry. Instead we use a 26.02 × 27.82 mm Japan Display LPM013M126A LCD. The display is is smaller than the original Game Boy screen (47 × 43 mm) but has a better resolution of 176 × 176 pixels compared to original 160 × 144 pixel matrix.

Checkpointing

The core software component of ENGAGE is differential checkpointing library called MPatch located in software/libs/mpatch folder of this repository. Further description of MPatch is provided in a separate document.

Getting Started

This repository contains everything required to build your own Battery-Free Game Boy. Below we describe how to build your own ENGAGE hardware and software.

Building the Hardware

Hardware-related sources are stored in the following folders.

  • /enclosure: Complete set of 3D STL files of the complete ENGAGE enclosure (front, back, buttons, D-pad, LCD holder)
  • /hardware/main-board: Main ENGAGE board KiCad files. Specifically, the folder contains .gbr Gerber output files for manufacturing, .drl drill file for manufacturing, schematics of the PCB in .pdf format, .csv file with bill of materials and the KiCad project files .kicad_pcb, .pro and .sch.
  • /hardware/apollo-3-module: As above, but for the de-attachable board with the MCU and FRAM (see above figure - component (A) and (B))

Enclosure can be printed using your favorite 3D printer or you can send all /enclosure files to one of online-available 3D printing services. As for the PCBs, you can either assemble everything yourself or send all /hardware files to many online-available PCB assembly companies for production.

Building the Software

Software-related sources are stored in the following folders.

Note on the Game Boy Emulator

We do not provide the copy of the Game Boy emulator in this repository. Our build system (using /software/scripts) automatically downloads and patches (applying optimizations and improvements) an external, not written by us, Game Boy emulator. Specifically, we have used Game Boy emulator for STM32F746 Discovery board written by Uwe Becker.

Build Process

After cloning this repository to your local computer the following instructions can be used to generate the ENGAGE binaries. From the project directory execute the following.

bash
$ cd software/build
$ cmake ..
$ make install

Then using your favorite debugger (we have used one of SEGGER J-Link debug probes for this project) the ENGAGE binaries (stored in the /software/bin folder) can be uploaded to the MCU using a debugger whilst powering the platform using USB. The main binary is called emulator whilst the others provide a means to reproduce the results obtained in the paper. After this step a game cartridge can be loaded.

Last Tested Software Versions

This software was build successfully using the following software versions.

How to Operate ENGAGE

There are two important operations when using ENGAGE that are not related to normal gaming: loading game cartridge and system reset, both described below.

Load Game Cartridge

After programming the emulator binary to ENGAGE, a Game Boy cartridge with your favorite game needs to be loaded to ENGAGE. To load a cartridge, first put the physical cartridge in the cartridge slot (at the back of ENGAGE) and then hold down Start and A buttons on ENGAGE while powering ENGAGE through the USB port. You can let go Start and A buttons after a few seconds. When loading of the cartridge has completed the game will start. Note that there is currently no progress indication of this operation on the screen of ENGAGE. Remember that the process can take five minutes (or more) for large cartridges! After a cartridge has been loaded it can be removed from the device.

System Reset

Due to the unique nature of ENGAGE's state resuming after power failure, resetting ENGAGE requires a unique key combination (unlike the original Game Boy that you could turn off and on again easily). This reset is performed by holding Start and Select buttons while powering ENGAGE through an USB port. Please note that this reset operation does not require you to reload the game cartridge.

Frequently Asked Questions

  • When the energy source is changed from solar to button-mashing, how long is ENGAGE temporarily off?

We actually harvest from both energy sources at the same time! We developed a circuit that manages this internally. However, this still means that the user will experience interruptions of play, that can vary between sub-second (in extreme well outdoor light conditions) to many seconds (on a gloomy day, indoors). While the button presses generate extra energy to sustain game play, most of the energy is still generated by solar panels. More discussion on this can be found in our research paper.

  • How do the buttons generate power?

The buttons generate power by moving a small but powerful magnet inside a tightly wound wire coil. The change in the magnetic field generates power. When you press the button (and when you release) it moves the magnet through the coil, this energy is then siphoned into a capacitor for immediate use by the ENGAGE hardware to support all activities. Because of advances in manufacturing over the past decade the magnet and coil are so small that they can fit inside a button that is acceptable to a user.

  • Why is the screen so small?

Yes, the screen is smaller that in the original Game Boy (which is a source of complaints of many internauts), but the one we used in the initial ENGAGE design the best one we could find in terms of resolution and energy consumption. If you have a better screen to suggest, then make a new project issue and send us a pull request.

  • Can ENGAGE play sound?

Unfortunately not. Sound generation costs extra energy and as we operate on a very thin energy budget we had to make choices which features of original Game Boy had to be excluded from ENGAGE.

  • Can I buy one?

Unfortunately not. But you can build one! All hardware and software of ENGAGE, together with the process of how to make it run is simply in this repository. Please remember that ENGAGE was not (and is not meant to be) a product we can sell. This is a research project and a concept demonstration.

How to Contribute to this Project

We look forward to your contributions, improvements, additions and changes. Please follow the standard GitHub flow for code contributions. In macro terms this means the following.

  1. Fork the master branch of this repository; make sure that your fork will be up to date with the latest master branch.
  2. Create an issue here with a new feature or a bug report.
  3. Perform changes on your local branch and push them to your forked clone.
  4. Create a pull request referencing the issue it covers and wait for our response.

List of Known Issues

List of all known issues is listed in the Issues list of this project. If you found a bug or you would like to enhance ENGAGE: please contribute! We look forward to your additions. Let ENGAGE grow and become a better and more sustainable gaming experience.

How to Cite This Work

The results of this project have been published in a peer-reviewed academic publication (from which all technical figures in this file originate). Details of the publication are as follows.

To cite this publication please use the following BiBTeX entry.

text
@article{dewinkel:imwut:2020:gameboy,
  title = {Battery-Free Game Boy},
  author = {Jasper {de Winkel} and Vito {Kortbeek} and Josiah {Hester} and Przemys{\l}aw {Pawe{\l}czak}},
  journal = {Proc. ACM Interact. Mob. Wearable Ubiquitous Technol.},
  volume = {4},
  number = {3},
  pages = {111:1--111:34},
  year = {2020},
  publisher = {ACM}
}

Related Websites

The Press

The project has been covered extensively by international media. Here is the list of example posts and articles (as of October 30, 2020).

CNET, The Wall Street Journal, Mashable, Hackaday, The Verge, Gizmodo, Engadget, PCMag, The Register, Tech Times, Nintendo Life, Daily Mail, The Independent, r/gadgets

Acknowledgments

This research project was supported by Netherlands Organisation for Scientific Research, partly funded by the Dutch Ministry of Economic Affairs and Climate Policy, through TTW Perspective program ZERO (P15-06) within Project P1 and P4, and by the National Science Foundation through grants CNS-1850496 and CNS-2032408. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.

Copyright

Copyright (C) 2020 TU Delft Embedded and Networked Systems Group/Sustainable Systems Laboratory.

MIT License or otherwise specified. See license file for details.

Parts

44
QtyValueFootprintReferences
51uFCapacitor_SMD:C_0402_1005MetricC1, C5, C10, C11, C15
5DNPCapacitor_SMD:C_0402_1005MetricC2, C4, C13, C17, C18
42.2uFCapacitor_SMD:C_0402_1005MetricC7, C8, C9, C16
4DNPResistor_SMD:R_0603_1608MetricR2, R6, R7, R8
210kResistor_SMD:R_0603_1608MetricR4, R5
251338-0374jaspers_footprints:51338-0374J1, J2
2eC_Registrationjaspers_footprints:eC_MountH1, H2
10Resistor_SMD:R_0402_1005MetricR3
10Resistor_SMD:R_0603_1608MetricR1
10.5pFCapacitor_SMD:C_0402_1005MetricC12
11uFCapacitor_SMD:C_0603_1608MetricC19
11uHInductor_SMD:L_0603_1608MetricL2
12.2uHInductor_SMD:L_0805_2012MetricL1
12.7nHInductor_SMD:L_0402_1005MetricL3
12nHInductor_SMD:L_0402_1005MetricL4
14.7uFCapacitor_SMD:C_0402_1005MetricC14
1470nFCapacitor_SMD:C_0402_1005MetricC3
147nFCapacitor_SMD:C_0402_1005MetricC6
1ABS06W-32.678kHz-D-2jaspers_footprints:Crystal_SMD_MicroCrystal_CC8V-T1A-2Pin_2.0x1.2mmY2
1APOLLO3jaspers_footprints:BGA-81_9x9_5.0x5.0mmU1
1B3U-1000PButton_Switch_SMD:SW_SPST_B3U-1000PSW1
1Conn_01x02Connector_PinHeader_1.27mm:PinHeader_1x02_P1.27mm_VerticalJ6
1Conn_01x04Connector_PinHeader_1.27mm:PinHeader_1x04_P1.27mm_VerticalJ3
1Conn_CoaxialConnector_Coaxial:U.FL_Hirose_U.FL-R-SMT-1_VerticalJ5
1ECS-320-8-47-JTNjaspers_footprints:ECX-1247Y1
1MB85RS4MTPackage_SO:SO-8_5.3x6.2mm_P1.27mmU2
1SWD_10jaspers_footprints:FTSH-105-01-F-D-KJ4

Questions

How big is the Apollo3 module PCB?

It measures 36 × 48 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Apollo3 module use?

44 parts, built around the B3U-1000P and ECS-320-8-47-JTN-TR. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Apollo3 module KiCad files?

From the TUDSSL/ENGAGE repository on GitHub, at the commit this page was made from: the board is hardware/apollo-3-module/apollo3_module.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Apollo3 module design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

More from TUDSSL/ENGAGE

1
  • 2 layers98 × 128 mmENGAGE, the printed circuit board in 3D

    ENGAGE

    TUDSSL/ENGAGE

    Source code repository for ENGAGE: Battery-Free Game Boy

    125 parts286MIT

Similar boards

  • 2 layers208.8 × 396.9 mmFerris, the printed circuit board in 3D

    Ferris

    pierrechevalier83/ferris

    A low profile split keyboard designed to satisfy one single use case elegantly

    145 parts1.3k
  • 4 layers38 × 49 mmNDS TV OUT V1I2, the printed circuit board in 3D

    NDS TV OUT V1I2

    LNH-team/Lost-NDS-TV

    The Lost Nintendo DS Television Output, brought back to life

    48 parts488GPL-3.0
  • 8 layers110 × 90 mmLpddr4-test board, the printed circuit board in 3D

    Lpddr4-test board

    antmicro/lpddr4-test-board

    Experimental development board interfacing Xilinx Kintex-7 FPGA with LPDDR4 SDRAM

    497 parts57Apache-2.0
  • 2 layers38.1 × 38.1 mmSIM868, the printed circuit board in 3D

    SIM868

    vul-os/sirboard

    Open hardware: 107 KiCad PCB designs — SMD-to-THT breakout adapters, ATTiny/ATMega/ESP development boards, and a 39-part sensor line on a common JST-SH connector.

    73 parts56Apache-2.0
  • 2 layers40.6 × 108 mmUseq1, the printed circuit board in 3D

    Useq1

    Emute-Lab-Instruments/uSEQ

    Hardware & firmware of the uSEQ Live Coding CV & Gate Sequencer

    172 parts44
  • 16 layers147.4 × 90 mmAPT KRIA FMC, the printed circuit board in 3D

    APT KRIA FMC

    ApotheoTech/Aper-Oculus

    An open-source Xilinx Kria SOM Carrier for high-speed camera design

    565 parts32GPL-3.0
  • 2 layers97.6 × 78.2 mmTired Seagull, the printed circuit board in 3D

    Tired Seagull

    klouderone/SeagullMacropad

    The Seagull Macropad is based off the Rhino Pad, that supports both MX and Choc switches. The Macropad features an aesthetic but functional diode layout, an encoder, and pads for a battery and battery switch for…

    38 parts31
  • 2 layers60 × 60 mmHighPower Mechaduino, the printed circuit board in 3D

    HighPower Mechaduino

    pointhi/HighPower-Mechaduino

    Mechaduino derivative which drives up to 10A, drawn using KiCad

    140 parts31