Skip to the content
PCBKitNew board
2 layers75 × 67 mmTrashboy, the printed circuit board in 3D

A handheld retro gaming device

Size
75 × 67 mm
Copper layers
2
Thickness
1.6 mm
Parts
29
Nets
58
Pads
134
Tracks, vias
242, 8
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
9 Feb 2026
Updated
27 Oct 2026

Overview

Trashboy is an open-source printed circuit board by shaeberling, from the shaeberling/trashboy repository on GitHub. It is a 2-layer board of 75 × 67 mm with 29 parts on 58 nets, routed with 242 tracks and 8 vias.

Its parts include 3 capacitors, 3 resistors, 1 IC, 1 connector and 1 crystal.

README

README.md

TRASHBOY

A pocketable TRS-80 Model III/IV. Yes, really.

ESP32-S3 ESP-IDF v6.0.1 LVGL v9.1 Z80 / libz80 TRS-80

What is this?

A handheld TRS-80 Model III / IV emulator running on an ESP32-S3 board with a 640×480 RGB LCD.

It runs at original-hardware clock speed — 2.028 MHz for Model III, 4.055 MHz for Model IV — synchronised to wall-clock time so games play at their original speed. The 8 × 12 (M3) and 8 × 10 (M4) glyphs are blitted into an LVGL canvas with 90° rotation, so the portrait panel reads as a landscape Model III screen.

Hardware

PartRole
ESP32-S3 with 8 MB octal PSRAMRuns the emulator, LVGL UI, BT, Wi-Fi, and a 16-bit RGB LCD bus simultaneously.
ST7701S 480×640 RGB LCDDrawn as 640×480 landscape via software rotation in the LVGL flush callback.
GT911 capacitive touchI²C; used for the boot-time input-test screen.
TCA9554PWR I/O expander @ 0x20On-board: LCD CS, backlight enable, buzzer reset, etc.
MCP23017 I/O expander @ 0x21Physical board buttons. Interrupt-driven via INTA → GPIO4.
Bluetooth HID keyboardAny generic BT keyboard. Pairing persists in NVS.
BuzzerLEDC PWM on GPIO 6 (shared with the LCD backlight channel).

Software stack

  • ESP-IDF — Official ESP32 software stack
  • LVGL v9.1 in LV_DISPLAY_RENDER_MODE_PARTIAL with software rotation done inside the flush callback (the panel has no hardware rotation, and lv_display_set_rotation alone only swaps reported dimensions). An adaptive flush callback skips the rotation entirely when the emulator is running, since its TRSCanvas pre-rotates glyphs into an unrotated buffer.
  • libz80 Z80 emulation core in components/ptrs/, derived from apuder/pTRS-80.
  • RetroStore C SDK (components/retrostore-c-sdk/, git submodule) for fetching downloadable game media. HTTP and decode buffers live in PSRAM to keep internal SRAM available for BT/Wi-Fi coexistence working memory.
  • esp-hid wrapping BT Classic + BLE for the keyboard host.
  • TRS-IO / TRS-LIB (components/trs-io/, components/trs-lib/) for on-screen menus, the F5 settings UI, and TRS-80 system I/O glue.

Want the full picture? See firmware/ARCHITECTURE.md — boot sequence, task layout, the rotation handoff between splash and emulator, memory placement rules, and lessons-learned annotations.

Build & flash

bash
# Once per shell session:
source ~/.espressif/tools/activate_idf_v6.0.1.sh

cd firmware
idf.py set-target esp32s3        # only the first time
idf.py build
idf.py -p /dev/ttyACM0 flash monitor

On WSL2, the USB device routing is its own little adventure — see firmware/wsl.md.

Repo layout

text
.
├── assets/         Artwork (logo PNGs)
└── firmware/       ESP-IDF project — the action lives here
    ├── main/         app_main, LVGL UI, splash, Wi-Fi setup,
    │                 RetroStore browser, MCP23017 buttons, input test
    ├── components/   Z80 core, TRS-80 emulator, BT keyboard,
    │                 RetroStore SDK, TRS-IO, TRS-LIB
    ├── scripts/      Serial logger, asset rotation helpers
    ├── ARCHITECTURE.md
    └── wsl.md

Status

Active development on the lvgl9 branch. Recent direction: ESP-IDF v6 migration, MCP23017 board buttons over IRQs, GT911 touch driver, RetroStore game launching with PSRAM-backed buffers, an adaptive flush callback for the LVGL pipeline.


Not affiliated with Tandy or Radio Shack. The TRS-80 trademark belongs to whoever owns it now.

Parts

29
QtyValueFootprintReferences
14SW_Push_Dualbuttons:SW_Push_Silicone_8x5mmBTN_L_DOWN1, BTN_L_UP1, BTN_META_DOWN1, BTN_META_UP1, BTN_R_DOWN1, BTN_R_UP1, CR_L_DOWN1, CR_L_LEFT1, CR_L_RIGHT1, CR_L_UP1, CR_R_DOWN1, CR_R_LEFT1, CR_R_RIGHT1, CR_R_UP1
310nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1, C2, C3
3Conn_01x02Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ_BTN_L_BACK1, J_BTN_R_BACK1, J1
21KResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R2
2R_Network08_USResistor_THT:R_Array_SIP9RN1, RN2
110KResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR3
1Conn_01x07_SocketConnector_PinHeader_2.54mm:PinHeader_1x07_P2.54mm_VerticalJ2
1HEADER-1X570MILPAM8302A:1X05_ROUND_70JP1
1MCP23017x-x-SPPackage_DIP:DIP-28_W7.62mmU1
1TERMBLOCK_1X2PAM8302A:TERMBLOCK_1X2-3.5MMX1

Questions

How big is the Trashboy PCB?

It measures 75 × 67 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Trashboy use?

29 parts. 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 Trashboy KiCad files?

From the shaeberling/trashboy repository on GitHub, at the commit this page was made from: the board is kicad/trashboy.kicad_pcb and its schematic kicad/trashboy.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Trashboy design in my own project?

Its repository states no licence, so its author keeps all rights: ask shaeberling before reusing the design.

Similar boards

  • 2 layers52.3 × 10.5 mmStackLink, the printed circuit board in 3D

    StackLink

    gusmanb/logicanalyzer

    24 channel, 100Msps logic analyzer hardware and software

    29 parts5.1kGPL-3.0
  • 2 layers56 × 20 mmHallEffectXY Endstop, the printed circuit board in 3D

    HallEffectXY Endstop

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    29 parts1.1kGPL-3.0
  • 2 layers50 × 23.2 mmAnalog, the printed circuit board in 3D

    Analog

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    29 parts1kGPL-3.0
  • 2 layers16.8 × 13.6 mmE Fidget Lite, the printed circuit board in 3D

    E Fidget Lite

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    29 parts915
  • 2 layers85 × 12.5 mmTERES PCB3-TOUCH BTN Rev.A, the printed circuit board in 3D

    TERES PCB3-TOUCH BTN Rev.A

    OLIMEX/DIY-LAPTOP

    Do It Yourself Open Source Hardware and Software Modular Hacker's Friendly Laptop

    29 parts578Apache-2.0
  • 2 layers33.7 × 97.8 mmHAN ESP TSS721, the printed circuit board in 3D

    HAN ESP TSS721

    UtilitechAS/amsreader-firmware

    ESP8266 and ESP32 compatible firmware to read, interpret and publish data to MQTT from smart electrical meters, both DLMS and DSMR is supported

    29 parts470
  • 2 layers80 × 55 mmGB CARTPP XC, the printed circuit board in 3D

    GB CARTPP XC

    Gekkio/gb-hardware

    Game Boy -related custom hardware by gekkio

    29 parts379CC-BY-4.0
  • 2 layers55 × 58 mmProto ads bee mcu board, the printed circuit board in 3D

    Proto ads bee mcu board

    PantsForBirds/adsbee

    Open Source Embedded ADS-B Receiver

    29 parts344GPL-3.0