Table of Contents
Development
Version 001a
23/3/2021 Circuit design drafted, board layout draft, proceeding to prototype.
31/3/2021 SN76489s prototyped and working. VGM files play.
1/4/2021 12Mhz wouldn't work. Tried adding clock switch code. Turned out had bad SN76489, 74LS245.
3/4/2021 YM2612 prototyped. Fakes chips :( Realized need a clock divider. Added. Space very tight now. Changed port decoding. Added jumper to disable wait signal for interrupt driven driver. Identified some test code.
Version 001b
Change name to SBC-VGM since this is a bit esoteric and the SND moniker should probably be reserved for a more generic design.
6/4/2021 Routed digital section.
3/10/2021 Delayed due to inability to get genuine YM2612 parts and work on DMA and 4PIO board. Rerouted using Freerouting. Ordered YM3834 to continue developement.
7/11/2021 Verson 001b has been build and tested with a YM3834. Issue 1 GND and VCC not connected to U6. Issue 2 R18 & R19 incorrectly connect to wrong input on the TL072. Issue 3 Footprints for small capacitors too big. Issue 4 C20 & C21 too close to speaker terminals. Issue 5 1000uF C20 & C21 physically too large. VGMPLAY software working on YM and SN chip.
Version 001c
Board rerouted with above corrections. Adjustments to capacitors. Addition of vent hole under YM2612. Routing refinements. Found out two of my 4 “fake” YM2612's were actually real :)
Errata
Version 001b
U6 - VCC not connected - Bridge pins 13 and 14 on the PCB side
U6 - GND not connected - Link pin 7 to pin 11 on the PCB side (or to pin C32 on the ECB connector)
U6 is not required. Remove and link pins 3 & 5
R18 and R19 incorrect connection - With both, solder in the end at the PCB edge. Link the free end of R18 to the PCB edge end of R16. Link the free end of R19 to the PCB end of R17. Both links done on the component side.
C6 - Change to 100uF (for commonality)
C5 - Change to 470uF
Version 001c
U6 is not required. Remove and link pins 3 & 5
Key Learnings
SN76489
- Mono output. Two devices required for stereo output.
- Write only. Cannot probe for existence.
- No reset or power on initialization.
- Sound needs to be turned off at boot or clock blocked at startup.
- Incorrect write can cause READY signal to stay low causing a wait state lockup.
- Original Sega Genesis clock is 3579545Hz for NTSC systems and 3546893Hz for PAL
- Data sheet has a reverse interpretation of D0-D7 order. Kicad symbol uses standard representation.
YM2612
- Original Sega Genesis clock is 7.67Mhz/2 = ~3835000Hz
- No Kicad symbol.
References
Hardware
J.B. Langston's RC2014 SN76489 board
Aidan Lawrence's Mega MIDI: A Playable Version of my Hardware Sega Genesis Synth
hiromasa's esp32-genesis-player Fabien Batteix VGM Player project for AVR mcu
Technical
SMS Power Maxim's World of Stuff : YM2612
SMS Power Chiptune Frequencies
Plutiedev YM2612 Register reference Usage
Ym2612 Pinouts and descriptions
Software
VGMPlayer Marco Maccaferri dual chip version based on J.B. Langston's original VGM Player
MTX VGM Player Paul Daniels single chip CTC driven
skywodd avr_vgm_player test code
DefleMask The multi-system Chiptune Tracker
Digital Audio Programming Example Code
Data Sheets
TL072 Operation Amplfier Overview Datasheet
YM2612 Official Overview Programming