Sequential Circuits Prophet 10 firmware "tweak"

      Several people mentioned recently that the Prophet 10 did not support saving patches as MIDI sysex.  I decided to take a look at the code and see if I could work out how to add this one feature.  I set up a simulation of the synthesizer to learn more about how the code operated.   While running simulations, I discovered a few things that may be of interest:   The SCI MIDI manual states that Lower patches in the P10 are numbered 0-31 and Upper ones are numbered 32-63.   As it turns out, this is not accurate.   Upper patches are numbered 0-31, and are stored in the RAM which is addressed at the lower CPU address.  Lower patches are numbered 32-63 and are stored in the RAM addressed at the higher CPU address.   Some of the sysex files on the web are labelled incorrectly.  If the patch numbers are 0-31, these are Upper patches and will load into the Upper patch RAM.

    When I simulated the synthesizer reading Lower patch bank 1, program 1 from RAM, I was surprised to see that the address it was loading from was 0x2004.   This is a hexadecimal address whch corresponds to the 4th address in the SRAM.  Normally the first patch would start at the beginning of the RAM chip.   In the case of the Prophet 10, patches occupy 32 bytes and there are 32 of them for each keybed.   32 x 32 is 1024, which exactly fills each 1K SRAM chip.   So why was the first patch starting at address 4 in the RAM?   As it turns out, there is a bug in the code that computes the addresses for lower patches, and all 32 of them start four addresses above where you would expect.   The same routine is used to compute the read address and the write address, so the patches are written to the offset address and read from the same address, and it all works out.   But what about the last patch (bank 4, program 8)?   Won't the last four bytes of that patch go beyond the end of the RAM chip?   Well, yes, but since 2K of CPU space is allocated to each of the 1K SRAM chips, those addresses simply wrap to the first four addresses in the SRAM and everything is still OK.   So the first 28 bytes of Lower patch 4-8 are stored at the top of the RAM and the last 4 bytes are at the beginning.   I did not fix this bug, as that would mess up any dumps of patches written with the old firmware.  It doesn't hurt anything the way it is.

Anyway, I now have a slightly modified version of the P10 V6.1 MIDI firmware with the following features:

1) Poly MIDI mode is selected at power up (was Omni mode)

2) Both Upper and Lower MIDI enables are turned on at power up (was just Upper)

3) Pressing RECORD after booting now displays Poly MIDI mode correctly (Omni was selected, but not displayed)

4) It is now possible to save both sets of 32 patches by holding RECORD and pressing PRESET.   Since the Prophet 10 firmware already had code to dump one patch, I just had to call it 64 times.   Also, the Prophet 10 already had code to receive a single patch stored as a sysex packet, so I didn't need to write code for that.   I have changed the patch dump code a little to add the F7 "EOX" byte which properly terminates each sysex packet.




Copyright © 2007-2020 by All rights reserved.