Cheetah MS6 Firmware Upgrade v1.3

Uppsala, February 12, 2002

Thank you for purchasing this patched version of the Cheetah MS6 firmware!

The rights to the original firmware is/was owned by Cheetah, but since they went bankrupt in the early '90s I have taken the liberty of releasing this version.

The original code is from the v9.0 ROM, which is the last released version as far as I know. All changes are Copyright (C) 1999-2002 by Kristofer Maad.

For more information, visit the Cheetah MS6 Resource Center:

  http://www.maad.net/ms6/

I hope you will be happy with your machine after the upgrade! If not, let me know and I will do my very best to address any problems you may have!

Regards,

Kristofer Maad

(E-mail: kristofer@maad.net)

Installation

Preparations

N.B.! The EPROM chip is not difficult to replace, and the operation is quite safe. However, I cannot make any guarantees that it will not ruin your machine while changing chips, simply because I will not be there to supervise the operation.

If you feel uncomfortable doing this yourself, it is a good idea to ask someone knowledgeable in electronics to help you. If you have any questions, do not hesitate to contact me.

Before starting, ground yourself properly by touching a grounded object, e.g. a wall-mounted radiator. This is to avoid damaging any electronic components due to static electricity.

Step-by-step instructions

1. Turn off the power to the MS6 and disconnect the power cord. Remove the top cover by unscrewing the four small black screws holding it.

2. Locate the EPROM chip. It sits near the battery, has 28 legs and a transparent window on top (quite possibly covered with a sticker), and is usually the only chip that is socketed. Note the position of the small notch on one of the ends.

3. Now, carefully remove the chip. If you don't have a special tool for lifting the EPROM chip and it seems to be stuck, you can try to carefully bend at both ends using two screwdrivers, between the chip and the socket.

4. Once you have removed the original chip, just put the new EPROM chip in the same place and with the notch in the same direction. Be sure to check that no legs get bent during the insertion process.

Finishing the installation

Now it's just a matter of re-placing the top cover and turning the power on. Your machine should now start up as normal, but with added functionality as described below.

New synthesizer and MIDI features

New DCO shapes

Three new DCO shapes are now available. The complete table follows:

0        Pulse

1        Triangle

2        Sawtooth

3        Noise*

4        Off

5        Pulse + triangle

6        Pulse + sawtooth

*) If selected for DCO A, it will simply be turned off.

Shapes 5 and 6 can use PWM, just like the ordinary pulse setting.

Needless to say, machines without upgraded firmware will not reproduce your patches correctly if you use this feature. However, the numbering is compatible with e.g. Ricard Wolf's firmware.

Bank 7 tones usable in performances

It is now possible to use tones from bank 7 in performance patches, so you are not limited to using bank 7 as a "scratch pad" only.

No partial drop-out at bottom C

When e.g. playing a patch with vibrato (LFO pitch modulation), the sound would "pulsate" at the bottom C. This has now been fixed. The phenomenon will still be present though, but occurs around 1½ semitones lower (between Bb and B).

Mono and poly modes

Use CC #126 to activate mono mode - this works both in tone mode and per-part in performance mode. Depending on the value sent, envelope retrigger behaviour is selected according to the following table:

0 - 63        Always retrigger envelopes (as in poly mode)

64 - 127        Do not retrigger envelopes when playing legato (i.e., pressing a new key before releasing the current one)

Use CC #127, any value, to reactivate poly mode. This will also happen automatically whenever a new patch is selected.

Portamento

Use CC #65 to activate portamento, according to the following table:

0        Off

1-31        Fixed-rate, fingered

32-63        Fixed-time, fingered

64-95        Fixed-rate, full-time

96-127        Fixed-time, full-time

Fingered portamento kicks in only in mono mode when playing legato (and works nicely together with the no-retrigger setting), whereas full-time portamento is always active.

CC #5 is used to set portamento time. For fixed-rate mode, it can be set from 0.44 - 400 semitones/s. For fixed-time mode, the range is 0.015 - 18.3 s. Regardless of mode, smaller CC values will always give shorter times.

Because of how the MS6 allocates voices in poly mode, portamento will probably be most usable in mono mode. Like mono mode, portamento will be turned off whenever a new patch is selected.

Per-part program change

In performance mode, program change messages sent to the appropriate channels can now be used to change tones separately for each part.

MIDI bank select

The MS6 will now respond properly to MIDI Bank Select messages, both on the basic receive receive channel to globally switch bank (bank 1-8) and on each part's channel in performance mode (bank 1-7).

For sequencers and devices supporting 7-bit bank numbers (0-127), it is just a matter of selecting bank 1-8. For those supporting 14-bit bank numbers (0-16383), you will have to multiply the desired bank number with 128 to get the correct MIDI bank number, according to the following table:

  MS6 Bank   7-bit MIDI Bank   14-bit MIDI Bank

  ---------------------------------------------

      1             1                 128

      2             2                 256

      3             3                 384

      4             4                 512

      5             5                 640

      6             6                 768

      7             7                 896

      8             8                1024

If your controlling device/application doesn't have direct support for sending MIDI bank messages, you can still switch banks if it is capable of sending Continuous Controller #0 messages (which are actually the same thing as 7-bit bank select messages). In this case, use the “7-bit” column above.

N.B.! Bank select messages sent to the basic receive channel will always globally change the selected patch. So, to utilize this capability to the maximum it is a good idea to set the basic receive channel distinct to any channel used in your performance patches.

Remote editing using Continuous Controllers

Whether in tone mode (bank 1-7), or performance mode (bank 8), all of the tone edit parameters can now be set using Continuous Controller messages sent to the appropriate MIDI channel. The CC assignment for each parameter can be found in the table below.

N.B.! For parameters that can take negative values, you have to add 64 to the desired value before sending it, since the MIDI specification doesn’t allow negative numbers. In this case, the “CC Range” column shows the actual range for the CC value.

Example: You want to set DCO A Coarse Tune to -5. The CC number for this parameter is 15, and to get the correct value to transmit you add 64 to -5, and get 59. So, you have to set CC #15 to 59 to achieve the desired effect. To set the same parameter to 4, you have to set CC #15 to value 68, since 64 + 4 = 68.

  Param   Description                Par Range   CC #   CC Range

  --------------------------------------------------------------

    11    DCO A Shape                   0 - 6     12

    12    DCO A Pulse Width             1 - 15    13

    13    DCO A Range                   0 - 3     14

    14    DCO A Coarse Tune           -12 - 12    15    52 - 76

    15    DCO A LFO Depth               0 - 63    16

    16    DCO A Env Depth             -63 - 63    17     1 - 127

    17    DCO A PWM Depth               0 - 63    18

    18    DCO A Bend Depth              0 - 12    19

    21    DCO A Env Select              1 - 2     20

    22    DCO A PWM Select              0 - 1     21

    23    DCO A Bend Select             0 - 1     22

    24    DCO A Sync To DCO B           0 - 1     23

    31    DCO B Shape                   0 - 6     24

    32    DCO B Pulse Width             1 - 15    25

    33    DCO B Range                   0 - 3     26

    34    DCO B Coarse Tune           -12 - 12    27    52 - 76

    35    DCO B LFO Depth               0 - 63    28

    36    DCO B Env Depth             -63 - 63    29     1 - 127

    37    DCO B PWM Depth               0 - 63    30

    38    DCO B Bend Depth              0 - 12    31

    41    DCO B Env Select              1 - 2     44

    42    DCO B PWM Select              0 - 1     45

    43    DCO B Bend Select             0 - 12    46

    44    DCO B Fine Tune             -31 - 31    47    33 - 95

    45    DCO A To B Mix              -31 - 31    48    33 - 95

    46    DCO A To B Mix Env Depth    -63 - 63    49     1 - 127

    47    DCO A To B Mix Env Select     1 - 2     50

    48    DCO A And B PWM Rate          0 - 63    51

    51    Filter Cutoff Frequency       0 - 99    52

    52    Filter Resonance              0 - 63    53

    53    Filter LFO Depth              0 - 63    54

    54    Filter Env Depth            -63 - 63    55     1 - 127

    55    Filter Pressure Depth       -63 - 63    56     1 - 127

    56    Filter Env Select             1 - 2     57

    57    Filter Key Follow             0 - 63    58

    61    LFO Shape                     0 - 3     59

    62    LFO Delay Time                0 - 63    60

    63    LFO Frequency                 0 - 63    61

    64    LFO Pitch Mod Select          0 - 1     62

    65    LFO Pitch Mod Depth           0 - 15    63

    66    LFO Filter Mod Select         0 - 1     76

    67    LFO Filter Mod Depth          0 - 15    77

    68    VCA Volume                    0 - 63    78

    71    Env 1 Attack Time             0 - 63    79

    72    Env 1 Decay Time              0 - 63    80

    73    Env 1 Sustain Level           0 - 63    81

    74    Env 1 Release Time            0 - 63    82

    75    Env 1 Sustain Switch          0 - 1     83

    76    Env 1 Key Follow              0 - 15    84

    77    Env 1 Vel To Amp Sens         0 - 15    85

    78    Env 1 Vel To Att Time Sens    0 - 15    86

    81    Env 2 Attack Time             0 - 63    87

    82    Env 2 Decay Time              0 - 63    88

    83    Env 2 Sustain Level           0 - 63    89

    84    Env 2 Release Time            0 - 63    90

    85    Env 2 Sustain Switch          0 - 1     91

    86    Env 2 Key Follow              0 - 15    92

    87    Env 2 Vel To Amp Sens         0 - 15    93

    88    Env 2 Vel To Att Time Sens    0 - 15    94

Improved SysEx support

A host of new SysEx messages are now understood by the MS6. These messages make it possible to update single patches, update just the edit buffers (e.g. for auditioning purposes), or to request the MS6 to respond with its current status or a specific dump.

The single patch data formats are the same as of one patch record in the ordinary dumps - i.e., 90 bytes for a tone and 60 bytes for a performance.

In the following section, these abbreviations are used:

bb = bank # (1-8), pp = patch # (0-63), nn = part # (1-6), vv = firmware version ($13 for v1.3), cc = one less the basic receive channel (0-15)

Dump messages

Single tone (updates a single tone):

F0 36 02 00 08 bb pp <data, 90 bytes> F7

Single performance (updates a single performance):

F0 36 02 00 08 08 pp <data, 60 bytes> F7

Performance edit buffer (only works in performance mode):

F0 36 02 00 08 00 00 <data, 60 bytes> F7

Tone edit buffer (use nn = 1 in tone mode, and nn = 1-6 in performance mode):

F0 36 02 00 08 00 nn <data, 90 bytes> F7

Dump request messages

Request tones (MS6 responds with full tone dump):

F0 36 02 00 10 F7

Request performances (MS6 responds with full performance dump):

F0 36 02 00 11 F7

Request single tone (MS6 responds with corresponding single tone dump):

F0 36 02 00 18 bb pp F7

Request single performance (MS6 responds with corresponding single performance dump):

F0 36 02 00 18 08 pp F7

Request performance edit buffer (only works in performance mode; MS6 responds with performance edit buffer dump):

F0 36 02 00 18 00 00 F7

Request tone edit buffer (for technical reasons only works in tone mode; MS6 responds with tone edit buffer dump):

F0 36 02 00 18 00 01 F7

Status messages

Request status (MS6 responds with status):

F0 36 02 00 1F F7

Status (ignored by the MS6 itself, but will be sent as response to a status request message):

F0 36 02 00 0F vv bb pp cc F7

Boot-Time Utilities

RAM cleanup

If the RAM somehow has been corrupted (e.g., due to a weak battery), you can clear the part of RAM where the firmware keeps its state information, by holding any top-row button while turning the power on. The message "CL dn" will be shown briefly, and the machine will then automatically re-calibrate its DCOs again and finally return to normal operation.

Doing this will eliminate many problems where the RAM contains garbage (the original Cheetah firmware doesn't handle this very well). The procedure will not affect your user tones or performances in any way, but you will however need to reconfigure the basic receive channel.