GameBoy Monumental

From Hitchin Hackspace
Revision as of 13:23, 24 May 2024 by Brian (talk | contribs) (Made a start - still a work in progress. Lots more words, pictures and diagrams needed)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Overview

It's a massive retrogaming system in the shape of a "monument-sized" GameBoy that looks like it's been dropped into the ground.

The screen is made of 48 of the LED panels Hitchin Hackspace has possession of, 6 Raspberry Pi Pico microcontrollers and 1 Raspberry Pi 5 to run the show.

Components

Frame

The frame is made of aluminum extrusion mounted onto a wooden base. To answer the obvious question, yes, it is supposed to be tilted.

To be added: Shell

Screen

The screen is made of 48 panels in a 16 x 3 panel arrangement. Each panel, in its vertical orientation, is 16 pixels wide and 64 high, 12.5cm x 50cm, totaling 256x192 pixels and 2m x 1.5m

256x192 is the native resolution of a Sega Master System, ZX Spectrum and probably several other things from that era. It is also somewhat bigger than the native resolution of a GameBoy (160x144). The screen also occupies nearly the entire width of the "case" shell, in a way that the original didn't. As such, when displaying a GameBoy game, the screen displays a GameBoy-themed surround.

Similar surrounds can be used for other emulators which don't fit the full screen resolution, such as the GameBoy Advance (240x160) or TIC-80 (240x136).

The screen is split into 6 "superpanels", each of which is 8 panels wide. The superpanels are in a 2x3 arrangement. Each superpanel has its own 5V power supply and Pi Pico to run the panels. The screen data is supplied by the Raspberry Pi 5 via SPI.

Software

The games are run under the libretro emulator, which provides a framework for any emulator to provide a common interface to host software which takes care of display, keyboard, joysticks, sound, etc.

The emulators are the GearBoy emulator for GameBoy/GameBoy Color games, and emux for Sega. Other emulators could also be used if they support libretro.

The host software is retroarch, which has been lightly modified to copy its screen into a shared memory area, and add the appropriate border if running a GameBoy game.

The modified graphics driver works with 256x192 RGB565 (eg Sega) and 160x144 RGB565 (GB/GBC) screens. If the screen output is something else, such as the RetroArch menu, it won't copy it.

A separate process, screendriver, listens for updates to the shared memory area and copies those updates to the panels as two SPI channels. One SPI channel is 128x192 pixels for the left half of the screen, while the other is 128x192 for the right half. A GPIO pin signals the start (rising edge) and end (falling edge) of the frame data.

Each Pico receives half of a screen in the frame update, which consists of 128x192 16-bit words of RGB565 data. As the update is signalled by a separate GPIO pin, and the size is known, there is no need to frame the data. Once the data has been fully received, the Pico will display the appropriate (top/middle/bottom) portion of it on the panels. If the GPIO pin returns to zero without the full update being received (eg, lost clock signal), the transfer is aborted.

The Pico uses 5 bits/pixel, so it drops the least significant bit of the green data.

On boot, the Pico clears any data from the panel and displays a splash screen until a valid frame of data is received.

Superpanel hardware

Power supply and distribution

Controller

The controller is a modified "SNES-style" USB gamepad which fits into a custom-designed case which resembles the "bottom half" of a GameBoy that has been snapped from the full device.

As a backup, we have several unmodified SNES-style gamepads. When driving a GameBoy or Sega game, only the direction keys, Start, Select, A and B are needed.

You also need a USB extension lead. Or, failing that, sunglasses

Safety considerations

The individual screen panels are waterproof. The rest of the system, however, is not, so care should be taken when used outdoors.

At full brightness, the whole screen requires about 1.5kW, which is a not insignificant amount of power.