Skip to the content
2 layers90 × 25 mmST7789 Shim, the printed circuit board in 3D

A Raspberry Pi Pico display replacement for the Roland MT-32, with a modern TFT/OLED, MIDI VU meters, and MIDI buffer-overflow protection.

Size
90 × 25 mm
Copper layers
2
Thickness
0.8 mm
Parts
16
Nets
8
Pads
16
Tracks, vias
14, 0
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
12 Oct 2024
Updated
27 Jun 2026

Overview

ST7789 Shim is an open-source printed circuit board by RetroLoom, from the RetroLoom/sed1200emu repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 90 × 25 mm with 16 parts on 8 nets, routed with 14 tracks and 0 vias.

It belongs with the lEDs and displays and audio and music boards and the RP2040 boards of this library.

README

README.md

SED1200Emu

This project replaces the hard-to-obtain Epson SED1200-based LCD module found in the Roland MT-32 (and similar gear) with a modern Raspberry Pi Pico driving a color TFT or grayscale OLED panel. It captures the MT-32's native SED1200 display bus, mirrors the text onto the new panel, and adds a layer of modern features on top: real-time MIDI VU meters, color themes, screensavers/burn-in protection, and a browser-based monitor and control panel.

The project began as a drop-in replacement for the SED1200 using an ATMEGA8 and a standard HD44780 LCD. The original project page can be found at http://sensi.org/~tnt23/sed1200emu/index.html. All attempts to reach the original designer have failed — please reach out if you have any information. This Pico-based revision supersedes the ATMEGA8 design and is where active development now happens.

⚠️ This project is still in active testing. It works and is in use, but it has not been validated across every MT-32 revision, display, or MIDI host. Installation involves opening your synth and soldering to its main board. Use it at your own risk — there is no warranty. See Disclaimer & Warranty before you build or install.

The emulator running in a Roland MT-32, showing live per-channel activity and master volume.

Raspberry Pi Pico installed inside the MT-32, tapping the display bus and MIDI lines.

Features

  • Native SED1200 bus capture — reads the MT-32's original display data and re-renders it on a modern panel.
  • Two supported displays, selectable at compile time:
    • ST7789 — 284×76 RGB565 color TFT
    • SH1122 — 256×64 4-bit grayscale OLED
  • MIDI pass-through forwarder with overflow protection — sits inline between the MIDI source and the MT-32 CPU, solving a long-standing MT-32 problem: SysEx-heavy games can overflow the MT-32's small input buffer, causing dropped data, checksum errors, and stuck or wrong sounds. See MIDI Forwarding & Overflow Protection below.
  • Real-time VU meters — per-channel note activity with velocity-driven brightness, configurable size, position, and labels.
  • Color themes — selectable background/foreground color schemes (color on ST7789, grayscale on SH1122).
  • Screensavers & burn-in protection — automatic dimming and a choice of screensaver styles (blank, waves, plasma, ribbons, and customizable moving text).
  • Persistent settings in flash — all layout, theme, brightness, and behavior options survive power cycles.
  • Live configuration over USB serial or MIDI SysEx — no reflashing needed to tune the display.
  • Web-based monitor & control panel (MT32_Monitor.html) — a browser UI using the Web MIDI API to mirror the display, watch the MIDI buffer, and adjust device settings live.

Hardware

The core is a Raspberry Pi Pico. This repository also includes KiCad designs for the supporting hardware modules:

  • PC910 Module — opto-isolated MIDI input buffering.
  • ST7789 Shim — adapter/carrier for the ST7789 TFT panel.
  • SH1122 Shim — adapter/carrier for the SH1122 OLED panel.

Note: The MT-32 bezel blocks the lower portion of the display, so content is positioned in the upper area. A shim adapter determines the physical display position; see the module folders for the current designs.

Installation

The Pico and its shim board mount inside the MT-32, replacing the original SED1200 LCD. It taps the MT-32's internal display bus to read the text the synth wants to show, and sits inline on the MIDI input path so it can buffer and forward MIDI to the MT-32 CPU.

The Raspberry Pi Pico on its carrier board, wired into the MT-32 main board.

Opto-isolated MIDI tap soldered to the MT-32's CPU, feeding the forwarder's MIDI-in (MI) and MIDI-out (MO) lines.

MIDI Forwarding & Overflow Protection

One of the biggest benefits of this mod is what it does for MIDI reliability. The Pico doesn't just listen to the display — it sits inline between the MIDI source and the MT-32's CPU, forwarding every message. This solves a well-known MT-32 weakness: SysEx-heavy software can overrun the synth's small input buffer, causing dropped bytes, checksum errors, and missing or incorrect instruments.

The forwarder runs on the Pico's second core, isolating MIDI timing from display rendering. Incoming MIDI is received via DMA and sorted into three priority queues:

  • Real-time messages (clock, active sensing) can interleave anywhere, even mid-SysEx.
  • Channel-voice messages (notes, CCs, program changes) flow through at full wire speed, so game and song timing is preserved.
  • SysEx messages are sent atomically with address-aware pacing — the forwarder knows which MT-32 memory regions are slow to write and inserts just enough delay after each message to keep the synth's buffer from overflowing.

Additional reliability features:

  • Overflow & checksum monitoring — the firmware watches both the MIDI input hardware (for overrun/framing errors) and the MT-32's own display bus for its native "buffer overflow" and "checksum error" messages, with counters and diagnostics on the serial log.
  • Runtime pacing toggle — pacing can be turned off for hosts that already pace SysEx themselves (e.g. Orpheus PCMIDI intelligent mode, SoftMPU, DOSBox mt32.delay), letting MIDI pass through transparently at wire speed.
  • MIDI back-channel — responses are sent to the MT-32 with a manufacturer ID the synth ignores, so they appear on its MIDI THRU jack where the web monitor can read device state.

Building the Firmware

The firmware is built with the Raspberry Pi Pico SDK and CMake. The source lives in src/pico/.

Prerequisites

  • Raspberry Pi Pico SDK
  • CMake (3.13+) and the ARM GCC toolchain (arm-none-eabi-gcc)
  • Ninja or Make

Select your display

Open src/pico/display.h and set the display type:

c
// SELECT YOUR DISPLAY HERE:
#define DISPLAY_TYPE DISPLAY_TYPE_ST7789   // or DISPLAY_TYPE_SH1122

Configure and build

Point CMake at your SDK (use an absolute path) and build:

bash
cd src/pico
cmake -B build -DPICO_SDK_PATH=/path/to/pico-sdk
cmake --build build

The resulting firmware image is build/sed1200_display.uf2.

Flashing

Hold the BOOTSEL button while plugging the Pico into USB so it mounts as a mass-storage device, then copy sed1200_display.uf2 onto it. The Pico reboots and runs the firmware automatically.

Configuration

Settings are stored persistently in the Pico's flash and can be changed at runtime — no reflashing required.

Web Monitor & Control

Open MT32_Monitor.html in a browser that supports the Web MIDI API (e.g. Chrome/Edge). It connects to the device over MIDI and lets you:

  • Mirror the SED display text live
  • Monitor MIDI activity and the forwarder's buffer state
  • Adjust themes, VU meters, brightness, screensaver behavior, and layout
  • Toggle SysEx pacing
  • Save settings to flash or reset to factory defaults

The device exposes a MIDI back-channel via the MT-32's MIDI THRU, allowing the browser to read device state and push changes.

USB Serial / SysEx

The same configuration parameters are available over USB serial and over MIDI SysEx (MT-32-compatible message format), including theme, SED text position/scale, display offset and brightness, VU meter layout and labels, channel indicators, screen-protection timeouts, screensaver style and text, and SysEx pacing. Settings can be saved, loaded, or reset to defaults.

Serial Debugging

The firmware uses USB for stdio output. Connect a serial terminal to view debug and status messages.

Documentation

Reference material lives in documents/, including the MT-32 Implementation Guide (patch/timbre system and SysEx details), the Roland MT-32 owner's manual and service notes, the SED1200 and display datasheets, and the MT-32 sound list.

Original ATMEGA8 Version

Before the Pico-based redesign, this project used an ATMEGA8 to drive a standard HD44780 character LCD as a direct SED1200 replacement. That version is preserved in the project's git history.

The original ATMEGA8 + HD44780 build.

Disclaimer & Warranty

This project is provided "as is," without warranty of any kind. It is an enthusiast hardware/firmware modification that is still in its testing phases — actively developed and in use, but not exhaustively validated across all MT-32 hardware revisions, displays, MIDI sources, or operating conditions. Bugs, regressions, and breaking changes should be expected between revisions.

Please understand and accept the following before building or installing:

  • You install and use this at your own risk. Installation requires opening a vintage instrument and soldering to its main board. Done incorrectly, this can permanently damage your MT-32, the Pico, the display, or connected equipment.
  • No guarantee of fitness. There is no guarantee that the hardware or firmware will work for your particular unit or use case, or that it is free of defects.
  • Not affiliated with Roland. "Roland" and "MT-32" are trademarks of their respective owners. This is an independent, unofficial project and is not endorsed by or affiliated with Roland.
  • Modifications void any remaining manufacturer warranty and may affect the value of collectible hardware.

To the fullest extent permitted by law, the authors and contributors accept no liability for any damage, loss, or injury arising from the use of this project. The full legal terms are in the GPL v3 (software) and CERN OHL-S (hardware) licenses below — note especially their "no warranty" and "disclaimer of liability" sections.

If you find a problem or have improvements, contributions and bug reports are very welcome.

License Information

This project is derived from the original release by Tim Tashpulatov, which was released without license or warranty. The updated revisions of this project (2024 onward) include a GPL v3 license, found in the LICENSE file.

Source code and software license — GPL v3

Hardware design license — CERN OHL-S

Parts

16
QtyValueFootprintReferences
1BLTestPoint:TestPoint_Pad_D2.0mmTP8
1BLTestPoint:TestPoint_Pad_1.5x1.5mmTP16
1CSTestPoint:TestPoint_Pad_1.5x1.5mmTP15
1CSTestPoint:TestPoint_Pad_D2.0mmTP7
1DCTestPoint:TestPoint_Pad_D2.0mmTP6
1DCTestPoint:TestPoint_Pad_1.5x1.5mmTP14
1GNDTestPoint:TestPoint_Pad_D2.0mmTP1
1GNDTestPoint:TestPoint_Pad_1.5x1.5mmTP9
1RSTTestPoint:TestPoint_Pad_1.5x1.5mmTP13
1RSTTestPoint:TestPoint_Pad_D2.0mmTP5
1SCLTestPoint:TestPoint_Pad_D2.0mmTP3
1SCLTestPoint:TestPoint_Pad_1.5x1.5mmTP11
1SDATestPoint:TestPoint_Pad_D2.0mmTP4
1SDATestPoint:TestPoint_Pad_1.5x1.5mmTP12
1VDDTestPoint:TestPoint_Pad_1.5x1.5mmTP10
1VDDTestPoint:TestPoint_Pad_D2.0mmTP2

More from RetroLoom/sed1200emu

2
  • 2 layers62.5 × 39.8 mmSed1200emu, the printed circuit board in 3D

    Sed1200emu

    RetroLoom/sed1200emu

    A Raspberry Pi Pico display replacement for the Roland MT-32, with a modern TFT/OLED, MIDI VU meters, and MIDI buffer-overflow protection.

    15 parts4GPL-3.0
  • 2 layers21.5 × 12.2 mmPC910 Module, the printed circuit board in 3D

    PC910 Module

    RetroLoom/sed1200emu

    A Raspberry Pi Pico display replacement for the Roland MT-32, with a modern TFT/OLED, MIDI VU meters, and MIDI buffer-overflow protection.

    7 parts4GPL-3.0

Similar boards

  • 2 layers140.5 × 30 mmType e, the printed circuit board in 3D

    Type e

    google/mozc-devices

    Circuit diagrams and firmware source code for Gboard DIY keyboards

    16 parts3kApache-2.0
  • 2 layers41.4 × 14.5 mmU2f zero, the printed circuit board in 3D

    U2f zero

    conorpp/u2f-zero

    U2F USB token optimized for physical security, affordability, and style

    16 parts2.4k
  • 2 layers122 × 37 mmV0-UmbilicalBoard, the printed circuit board in 3D

    V0-UmbilicalBoard

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    16 parts1.1kGPL-3.0
  • 2 layers152 × 57.6 mmVideoslotadapter, the printed circuit board in 3D

    Videoslotadapter

    hoglet67/RGBtoHDMI

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

    16 parts1kGPL-3.0
  • 2 layers36 × 63.4 mmSmart ringfinal layout, the printed circuit board in 3D

    Smart ringfinal layout

    hackclub/OnBoard

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

    16 parts915
  • 2 layers60 × 40 mmHASwitchPlate, the printed circuit board in 3D

    HASwitchPlate

    aderusha/HASwitchPlate

    LCD touchscreen for Home Automation

    16 parts738MIT
  • 2 layers21.1 × 26.9 mmDemo, the printed circuit board in 3D

    Demo

    easyw/kicadStepUpMod

    kicadStepUp: ECAD to MCAD FreeCAD WorkBench

    16 parts704

Questions

How big is the ST7789 Shim PCB?

It measures 90 × 25 mm and has 2 copper layers, 0.8 mm thick.

What parts does the ST7789 Shim use?

16 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 ST7789 Shim KiCad files?

From the RetroLoom/sed1200emu repository on GitHub, at the commit this page was made from: the board is ST7789/ST7789 Shim.kicad_pcb and its schematic PC910 Module/PC910 Module.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the ST7789 Shim design in my own project?

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