Skip to content

Software simulation of the Yamaha DX7 with a MIDI interface for the Raspberry Pi Pico

License

Notifications You must be signed in to change notification settings

AnotherJohnH/picoX7

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

306 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

picoX7

picox7

A software simulation of the Yamaha DX7 with a USB and physical MIDI interface for the Raspberry Pi Pico

Slightly boring video of the picoX7 playing the Yamaha DX7 ROM cartridge 1A patches...

picoX7 rom1A

Status

Done...

  • I2S (via PIO) 16-bit stereo DAC interface at 49096 Hz
  • Use of the 2nd Arm Cortex-M, 8 voices per core
  • MIDI in support via UART and USB (including SYSEX in)
  • YM21280 OPS simulation (logarithmic)
  • YM21290 EGS simulation
  • Firmware simulation including pitch envelope, LFO, key sensitivity, level scaling, amplitude modulation
  • DX7 voice patches sounding close

To do...

  • Tune EGS simulation
  • Rate scaling
  • Portamento and glissando
  • Optimise to squeeze in more voices (?)

Limitations...

  • DAC implementation is quite different to the original. Dynamic range might be reduced?
  • Hitachi 6303 (~MC6803) CPU controller and firmware are not being emulated or fully simulated
  • 8 voices are on the left channel and 8 on the right ... stereo output needs to mixed to mono externally

Deviations/enhancements compared to a real DX7...

  • Each voice has it's own LFO
  • Each voice has it's own patch state (in theory when supported could load a different patch into each voice)
  • Support for 128 voice patches (DX7 had 32 internal and 32 cartridge)

See the software blog and hardware blog for more detailed progress updates.

Hardware

prototype

Schematic for the above.

For more information see README and the hardware blog

The Pico is significantly overclocked to 191.08 MHz to support 16 voices and generate a jitter free sample rate of 49096 Hz.

RP2350 Picos as well as the older RP2040 Picos are supported.

Software

Checkout

This repo uses git sub-modules, so checkout using --recurse to clone all the dependent source...

git clone --recurse https://github.com/AnotherJohnH/picoX7.git

or

git clone --recurse ssh://git@github.com/AnotherJohnH/picoX7.git

Software dependencies

Build

Being developed on MacOS but should build on Linux too.

Indirect build of all supported targets, rpipico, rpipico2 and native with cmake and make (or ninja)...

make

Build a single hardware target e.g. rpipico2 using cmake...

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DPLT_TARGET=rp2350 -DCMAKE_TOOLCHAIN_FILE=Platform/MTL/rp2350/target/toolchain.cmake ..
make

flashable images will be found under the build sub-directory here...

build/<target>/picoX7_RPIPIOC_I2S_DAC.uf2
build/<target>/picoX7_RPIPIOC_PWM_DAC.uf2
build/<target>/picoX7_RPIPIOC_PIMORONI_PICO_AUDIO.uf2
build/<target>/picoX7_RPIPIOC_WAVESHARE_REV2_1.uf2
build/<target>/picoX7_PIMORONI_VGA_DEMO.uf2

Build the native target...

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DPLT_TARGET=native ..
make

a runable binary image will be found under the build subdirectory here...

build/Source/picoX7_NATIVE

License

This project is licensed under the MIT License - see the LICENSE file for details

Acknowledgements

  • Ken Shirriff for his very helpful series of blogs reverse engineering the YM21280
  • AJXS for their annotated disassembly of the DX7 firmware ROM
  • The Dexed developers for providing an easily accessible DX7 audio reference
  • The raspberry-pi foundation for the innovative RP2040
  • The engineers at Yamaha

About

Software simulation of the Yamaha DX7 with a MIDI interface for the Raspberry Pi Pico

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •