

Vgm teensy
Hardware music player for YM2612 and SN76489
- Size
- 67.3 × 74.5 mm
- Copper layers
- 2
- Thickness
- 0.44 mm
- Parts
- 41
- Nets
- 88
- Pads
- 201
- Tracks, vias
- 442, 12
- Pours
- 2
- Routed
- Yes
- KiCad
- KiCad 6 (file 20211014)
- Created
- 8 Jun 2021
- Updated
- 6 Jun 2022
Overview
Vgm teensy is an open-source printed circuit board by ldursw, from the ldursw/vgm-player repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 67.3 × 74.5 mm with 41 parts on 88 nets, routed with 442 tracks and 12 vias.
It is built around the TL072, 74HC595 and AMS1117-3.3, with the L7805 and TXS0108EPW among its other parts. Its parts include 12 capacitors, 11 resistors, 9 ICs, 3 connectors and 1 inductor. It belongs with the NXP (LPC, Kinetis, i.MX RT) boards of this library.
Main components
5TL072
SOP-8-18V~18V 0℃~+70℃ 1.4mA 1.5nA 10V/us 10mV 2 2.5nA 3MHz 85dB SOP-8 Operational Amplifier ROHSGcoreOperational Amplifier74HC595
SOP-16-40℃~+85℃ 1 100ns@5V,50pF 10MHz 2V~6V 74HC 8 Serial-to-Serial or Parallel Tri-State SOP-16 Shift Registers ROHSGRShift RegistersAMS1117-3.3
SOT-223-40℃~+125℃ 0.003%Vout 1 1.1V@(800mA) 15V 1A 3.3V 5mA 72dB@(120Hz) Fixed Over Current Protection、Short Circuit Protection、Thermal shutdown Positive SOT-223 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSAdvanced Monolithic SystemsVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsL7805
TO-220ST0℃~+125℃@(Tj) 1 1.2A 20V 2V@(1A) 42uV 500uA 5V 73dB@(120Hz) Fixed Positive Short Circuit Protection TO-220ST Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSOSENVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsTXS0108EPW
TSSOP-20-40℃~+85℃ 1 1.4V~3.6V 1.65V~5.5V 60Mbps 8 Automatic direction detection、Output enable high-impedance、Integrated pull-up resistor Bidirectional Level translator Push-Pull、Open-drain TSSOP-20 Translators, Level Shifters ROHSTexas InstrumentsTranslators, Level Shifters
README
README.mdVGM Player
This project allows VGM (Video Game Music) files from Sega Master System, Sega Game Gear, and Sega Mega Drive/Genesis to be played on real hardware using the YM2612 sound chip and the Teensy 3.6 board.
Features
- Support for Master System, Game Gear, Mega Drive/Genesis
- Standalone player using the SD Card slot
- Can be controlled by a computer using the USB port
- Correct volume for PSG and FM
- Integration with emulators available
- Supports emulated and discrete SN76489
- Uses the Mega Amp circuit for amplification
- Hardware support for Teensy 3.6 and Arduino Due
- Player support for Windows and Linux (experimental)
Supported boards
| Board | SD Card | Stream | Real PSG | Emulated PSG |
|---|---|---|---|---|
| Teensy 3.6 | ✔️ | ✔️ | ✔️ | ✔️ |
| Arduino Due | ❔ | ✔️ | ✔️ | ✔️ |
✔️ Fully supported
❔ Not tested
Demo
Difference between other implementations
PSG
One of the biggest differences between this project and other implementations is that an emulated PSG is used instead of the discrete SN76489. It is widely known that the Sega version has some differences mainly in the noise channel.
For example, most games get a weird artifact instead of the expected noise channel. After Burner II has a constant tone on a discrete chip whereas on emulation it sounds right.
When using an emulated PSG the microcontroller will emulate the chip and the output is
sent to the DAC0 pin at 44.1 kHz.
If you want to use a discrete PSG anyway, all you have to do is uncomment -DUSE_REAL_PSG
on hardware/platformio.ini, connect the D0..D7 lines from the shift register to the
SN76489 and connect /WE to pin 29 though a voltage converter.
Remote control
Another difference is that the hardware can be controlled via a companion application written in .NET Core that accepts a generic input class and sends to the hardware via USB and also displays the current state on screen.

There are 3 available input methods. VgmFile reads standard .vgm and .vgz files.
VgmPipe creates a named pipe vgmstream that accepts commands from other applications,
such as emulators. VgmPCM streams 44.1 kHz signed 8-bit mono PCM files to the chip.
Compiling and Running the project
To compile the code for the hardware you will need PlatformIO.
You can use the CLI or an IDE with extension support such as Visual Studio Code. After
installing PlatformIO just open the hardware directory and upload the code to the board.
To compile the player application you will need the
.NET Core SDK. You can use the CLI or an IDE
such as Visual Studio Community or Visual Studio Code. On Linux you may have to install
the libSDL2 package.
License
All files in this repository are licensed under GNU General Public License Version 3.
Credits
Thank you very much for all these awesome people
- Maxim - PSG emulation code
- Dave, Maxim, Valley Bell - VGM Format
- zamaz - DGen/SDL emulator
- Softdev, Eke-Eke - Genesis Plus GX emulator
- Ace, Villahed94 - Mega Amp
- Stephane-D - XGM Tool and XGM Player
- SDL Community - SDL
- greiman - SdFat library
- ivanseidel - DueTimer library
Parts
41| Qty | Value | Footprint | References |
|---|---|---|---|
| 3 | 100n | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C10, C11, C12 |
| 3 | 10u | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C1, C2, C7 |
| 2 | 100k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R24, R25 |
| 2 | 10u | Capacitor_THT:CP_Radial_D5.0mm_P2.50mm | C3, C6 |
| 2 | 1u | Capacitor_THT:CP_Radial_D5.0mm_P2.50mm | C4, C5 |
| 2 | 220 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R13, R14 |
| 2 | 2k2 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R7, R9 |
| 2 | 47p | Capacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mm | C8, C9 |
| 2 | 4k7 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R12, R15 |
| 2 | MountingHole | MountingHole:MountingHole_3.2mm_M3 | H1, H2 |
| 2 | TestPoint | TestPoint:TestPoint_Pad_D1.0mm | TP1, TP2 |
| 1 | 100u | proj:Choke_CD105 | L1 |
| 1 | 330 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R8 |
| 1 | 470 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R20 |
| 1 | 680 | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R21 |
| 1 | 74HC595 | Package_SO:SOP-16_3.9x9.9mm_P1.27mm | U3 |
| 1 | AMS1117-3.3 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U9 |
| 1 | Adafruit_Si5351_Module | proj:Adafruit_Si5351_Module | U2 |
| 1 | AudioJack3 | Connector_Audio:Jack_3.5mm_Lumberg_1503_07_Horizontal | J1 |
| 1 | Barrel_Jack | Connector_BarrelJack:BarrelJack_Horizontal | J2 |
| 1 | Conn_01x04_Male | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J3 |
| 1 | Jumper_2_Open | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | JP2 |
| 1 | L7805 | Package_TO_SOT_THT:TO-220-3_Vertical | U8 |
| 1 | TL072 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U6 |
| 1 | TXS0108EPW | Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm | U5 |
| 1 | Teensy3.6 | proj:Teensy35_36 | U1 |
| 1 | YAAJ_DCDC_StepUp_SX1308 | proj:YAAJ_DCDC_StepUp_SX1308 | U7 |
| 1 | YM2612 | Package_DIP:DIP-24_W15.24mm_Socket | U4 |
Questions
How big is the Vgm teensy PCB?
It measures 67.3 × 74.5 mm and has 2 copper layers, 0.44 mm thick.
What parts does the Vgm teensy use?
41 parts, built around the TL072, 74HC595, AMS1117-3.3 and L7805. 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 Vgm teensy KiCad files?
From the ldursw/vgm-player repository on GitHub, at the commit this page was made from: the board is pcb/vgm-teensy/vgm-teensy.kicad_pcb and its schematic pcb/vgm-teensy/vgm-teensy.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Vgm teensy 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).
Similar boards
- 2 layers150 × 150 mm

- 4 layers71.1 × 99.1 mm

- 6 layers100.1 × 112 mm

Picones
WiiMake/picones
In the last 40 years, technology has advanced to the point were what used to be done in hardware can now be done in software. This project uses an rp2350 to emulate a ROM chip on an NES Cartridge.
59 parts1 - 4 layers95 × 113 mm

- 2 layers66 × 64.8 mm

M48t59y pic18f
siliconvalleyar-oss/m48t59y_rpi_kcd
Diseño de PCB en KiCad para interfaz M48T59Y (RTC/NVRAM) con PIC18F.
23 parts - 4 layers63.9 × 82.6 mm

- 2 layers145 × 100 mm

ShowerController
grserwe/KiCadToGCodeSvelte
Convert KiCad PCB designs into CNC GCode for isolation-engraving traces on copper-clad board and drilling through-holes — entirely in the browser.
22 parts - 2 layers94.5 × 74.4 mm

Ax58100-stm32-ethercat
MetalMusings/MyOwnEtherCATDevice
Documentation accompanying the "Make My Own EtherCAT device" video serie on Youtube.
184 parts93