ADS-Boy
Lately I’ve been building a jukebox for Game Boy cartridges and I’ve become fascinated by some of the more obscure “games” like the Bandai Pocket Sonar that mostly didn’t leave Japan. The great thing about cartridges is that we can add whatever chips we want, allowing us to bring this 40-year-old hardware into modern times.
With Game Boy on the brain, I set out to build an offline flight radar cartridge that works on the original Game Boy. After the hardware worked, I took it further with a “Lemonade Stand meets StreetPass” Airline Simulator.
ADS-B Background
Most aircraft broadcast a steady stream of information about themselves at 1090 MHz via a system called Automatic Dependent Surveillance–Broadcast or ADS-B. The data contained is actually quite rich and includes its position, altitude, speed, and call sign, updated several times a second. ADS-B is used by air traffic control and other surrounding aircraft. The protocol itself isn’t encrypted, so anyone with an antenna can listen in too. Sites like Flightradar24 are built on thousands of hobbyists who have a receiver actively feeding a map.
A few things are useful to know about what a plane actually sends:
- The transponder address is a unique number that belongs to the airframe itself. It stays the same no matter who’s flying the plane or where it’s going.
- The call sign, or ident, is the flight’s name, like
ASA412for Alaska Airlines flight 412. For private planes it’s usually the tail number. - The position comes in two halves that get paired up, and together they give the plane’s latitude and longitude.
Putting It All In A Cart
The board mostly fits inside a standard cartridge shell and does three jobs:
Receive. A small radio along the top of the board filters out everything except 1090 MHz, amplifies what’s left, and turns the pulses from nearby planes into a digital signal.
Decode. An RP2350 microcontroller, the chip in the Raspberry Pi Pico 2, turns those pulses into messages, error corrects them, and keeps a table of every aircraft it’s heard from.
Service Requests. The Game Boy expects a cartridge to have a ROM chip that answers the instant it queries an address. The RP2350 pretends to be that ROM, serving the game ROM and a small window of memory where the game can read the aircraft table.
The board also has 16 MB of flash for the game, the save file, and the lookup tables, plus a real-time clock with a coin cell so the cart always knows what day it is.
I had to pick up a Raspberry Pi Debug Probe to be able to flash the RP2350.
Once that chip is flashed properly, the cart presents itself as a writeable flash cart so Retro Song Bird can flash the game ROM (.gb file) onto the cart.
I was super proud of this image showing my PCB for Retro Song Bird properly reading and flashing the PCB for ADS-Boy! It was kind of funny to have the cart SWD plugged into USB-C and then Retro Song Bird also on a different USB-C and both of them connected to each other to complete the loop. Hardware is fun.
Offline Lookups
Since a plane only broadcasts its call sign and its transponder address, the cart fills in the rest from tables stored in its flash. Everything is looked up on the cartridge, so none of it needs a network connection.
Airlines fly the same flight numbers on the same routes day after
day, so a table of call signs and the airports can turn ASA412 into
SFO->LAX. The cart carries over 600,000 call signs and about
3,800 airports, built from the free
Virtual Radar Server standing data.
The first three letters of an airline call sign are the
airline’s code, so ASA is Alaska, BAW is British Airways, and UAL is
United. The cart knows about 5,900 airlines.
The transponder address belongs to the airframe, so a registry keyed on it gives the make, model, and seats. The cart carries about 330,000 aircraft, combining the FAA’s public aircraft registry with Virtual Radar Server’s data for planes registered outside the US.
Put together, a call sign and an address can produce “British Airways 49, London to
Seattle, Boeing 787-9.” Schedules can change seasonally, so in theory we’d want to update this data, but we just call it the 2026 Edition.
Cartridge
I used my 3D printer to print a simple cartridge case. The PCB is pressure fit in and then the enclosure gets taller at the top to fit the antenna connector. It could be a little smaller but the antenna adapter I got has a bit of wire that I needed to stuff into the shell.
Airline Manager
Once the hardware was working, I built Airline Manager, a small Lemonade Stand-style game that shows off what the cart can do. It’s a native Game Boy ROM, and it reads the cart’s aircraft table and lookups like any other memory.
To start the game, your grandmother leaves you her regional airline, NorthBest Air, along with a single Cessna flying Seattle to Vancouver and $1,000,000 (she was pretty generous).
To expand your fleet, you can only purchase planes that you’ve actually seen fly over you. Additionally, you can only purchase routes between cities that you have seen aircraft service. If a 747 from London to Frankfurt passes over your house, you can buy that 747 and start flying to or from Frankfurt and London.
The radar shows every flight in range, with the planes most likely to be overhead at the top. Picking one shows the flight, where it’s flying from and to, the aircraft, its altitude and speed, how many people it seats, and how far it can fly. If it’s a plane or a city you haven’t seen before, it’s added to your inventory.
From another menu you buy planes, open routes, set fares, and fly each day. Bigger planes carry more passengers but burn more fuel and cost more. Each plane also has a max range. Each day might bring news like a storm at an airport, a fuel price spike, a holiday rush, or a plane in the shop for repairs. After a day’s flights a receipt with the day’s revenue and expenses is shown.
As I was balancing the game, I thought of Virgin founder Richard Branson’s quote about becoming a millionaire:
If you want to be a millionaire, start with a billion dollars and launch a new airline.
Without loans, it’s pretty impossible to start an airline, or even grow a regional one when you see the scale of the numbers. $60,000,000 on an aircraft and then five to six figures just to fuel up. To simplify the game and make it more fun, I adjusted prices and simplified how fares are assigned (no dynamic prices!). You can also sell planes to help you climb the ladder from Cessna to 787.
Wrapping Up
Overall this was a super fun side side project. I wanted to create a custom cart so I could have the experience and knowledge so that I could potentially build a companion cart for Retro Song Bird. I’m really happy the way this turned out and whenever I’m out and about and see a plane overhead, I wish I had my Game Boy so I could know what the plane was and add it to my inventory!
One upgrade for v2 would be to add a GPS module so I could draw an accurate radar of where the user is and where the planes all are (including elevation). I was worried about overcomplicating the project and the power draw, so I left this out of v1.
I doubt there is a ton of demand, but if you’re interested in buying an ADS-Boy cart, email me and let me know. If you get a Retro Song Bird, it will announce the new planes and their origin and destination as they enter radio range. I think the DMG game code of DMG-ADSB-USA is quite cool!