Skip to content

SC‐55 Control ROM

skjelten edited this page Dec 12, 2024 · 45 revisions

Some names and expressions seems to have changed over time with the different generations of the Sound Canvas line. All documentation used in EmuSC uses names and expressions from the SC-88Pro documentation.

Memory Layout

This is the memory layout of the SC-55 Control ROM v. 1.20. Total size of ROM is 262144 bytes.

Address Short name Description
0x00000 - 0x08893 - Initialization code, LCD menu definitions ++
0x08894 - 0x0F366 MIDI files 2 demo songs stored as MIDI files
0x0F367 - 0x0FFFF Version ROM version and date as ASCII, rest is unused
0x10000 - 0x1BCFF Instrument 1/2 Instrument definitions (216 bytes each)
0x1BD00 - 0x1DEBF Partials 1/2 Partial definitions (60 bytes each)
0x1DEC0 - 0x1FFFF Samples 1/2 Sample definitions (16 bytes each)
0x20000 - 0x2BCFF Instrument 2/2 Instrument definitions (216 bytes each)
0x2BD00 - 0x2DEBF Partials 2/2 Partial definitions (60 bytes each)
0x2DEC0 - 0x2FFFF Samples 2/2 Sample definitions (16 bytes each)
0x30000 - 0x30BFF Variations Variation definitions, 128x128 GS instrument table
0x30C00 - 0x37FFF - Unknown, mostly unused
0x38000 - 0x3C027 Drums Drum set definitions (128 bytes LUT + 1164 bytes each)
0x3CA00 - 0x3D147 Init Initial values of system / patch common and blocks
0x3D148 - 0x3D167 GS version GS version string
0x3D1E8 - 0x3FFFF LUTs Lookup tables (LUTs) and other unknown data

Instrument definitions

Index Length EmuSC Description
0 12 ✔️ Instrument name in ASCII. Padded with space.
12 20 Instrument parameters common between partials.
32 4 + 88 Instrument partial 1
124 4 + 88 Instrument partial 2 (not used for all instruments)

Instrument parameters (20 bytes)

Index Inst. index Length EmuSC Description
0 12 1 ✔️ Volume Attenuation
Range: 1 - 127
Defines volume attenuation on instrument level. The range has the same attenuation level function as all other volume attenuations, see e.g. partial volume attenuation and drum volume attenuation. A good approximation of the function is $0.1 \cdot 2 ^ {value \over 36.7111} - 0.1$. The function is very likely defined in one of the LUTs below.
1 13 1 Unknown
2 14 1 LFO1 Waveform
Range: 0 - 8 (but 0x10 is sometimes used??)
Specifies the waveform used by LFO1:
0 => Sine
1 => Square
2 => Sawtooth
3 => Triangle
8 => Random
There are other values that effects the waveform as well, such as 9 and 16, but waveform is not yet understood.
3 15 1 ✔️ LFO1 Rate
Range: 0 - 127
The modulation rate of the LFO1. Value is a linear function of frequency defined as 0.1Hz. A value of e.g. 10 = 1Hz.
4 16 1 ✔️ LFO1 Delay
Range: 0 -127
A non-linear function of time from note on and until the LFO Fade starts. The function is very likely defined by one of the LUTs below.
5 17 1 ✔️ LFO1 Fade
Range: 0 - 127
A non-linear function of time from LFO1 Delay is finished and until the LFO has reached maximum amplitude. The function is very likely defined by one of the LUTs below.
6 18 1 ✔️ Partials In Use
Range: 0 - 3
The two first bits indicate which of the partials that are being used:
0 => No partials used (no audio)
1 => Only 1st. partial is used
2 => Only 2nd. partial is used
3 => Both partials are used
7 19 1 Unknown
Range: 0 - 2
8 20 2 Unknown. Most likely a 2 byte value
10 22 4 N/A Unused
14 26 2 Unknown. Most likely a 2 byte value
16 28 4 N/A Unused

Note that values in 8 - 13 and 14 - 19 seems to be linked.

Instrument partial definition (2 * (4 + 88) bytes)

Index Inst. index Length Default EmuSC Description
- 32 / 124 2 0x0040
- 34 / 126 2 0x0000 ✔️ Partial #
0 36 / 128 1 0x00 LFO2 Waveform
Range: 0 - 127
Specifies the waveform used by LFO2. See description of LFO1 Waveform above to see details of values and supported waveforms.
1 37 / 129 1 0x00 ✔️ LFO2 Rate
Range: 0 - 127
The modulation rate of the LFO2. Value is, similarly to LFO1 Rate, a linear function of frequency defined as 0.1Hz. A value of e.g. 10 = 1Hz.
2 38 / 130 1 0x00 ✔️ LFO2 Delay
Range: 0 - 127
See description of values in LFO1 Delay above.
3 39 / 131 1 0x00 ✔️ LFO2 Fade
Range: 0 - 127
See description of values in LFO1 Fade above.
4 40 / 132 1 0xff N/A Unused
5 41 / 133 1 0x40 ✔️ Panpot
Range: -64 - +63
Pan, or stereo, position of the partial:
-64 => all left
0 => centered
+63 => all right
Note that this value is added to the panpot from part settings while the sum is limited to the same range. Exception to this logic is when panpot from part settings is -64 (random / RND), which overrides any partial panpot value and makes new random panpot values for each note.
6 42 / 134 1 0x40 ✔️ Coarse pitch
Range: -64 - +63
Partial pitch correction in semitones.
7 43 / 135 1 0x40 ✔️ Fine pitch
Range: -64 - +63
Partial pitch correction in cents.
8 44 / 136 1 0x00 Random Pitch Depth
Range: 0 - 100
Random pitch that is calculated at the note on event and constant for the duration of the note. 0 indicates no random pitch adjustment. Exact function is difficult to measure precisely, but is most likely linear ±x cent. A value of 100 seems to create pitch variation between -1 and +1 semitone (100 cents). Values larger than 100 (up to 0xff) seems to calculate larger pitch variations, but are always capped at ±1 semitone. This is quite different than most Roland synths that have a scale from 0 to 1200 cents for this parameter.
9 45 / 137 1 0x4a ✔️ Pitch Key Follow
Range: -10 - 0
A value of 0 gives a natural pitch adjustment with changing note frequencies, while the more negative the pitch key follow the less will the partial pitch scale / follow note frequencies. With a value of -10 there is no change in partial pitch between different keys.
10 46 / 138 1 0x00 LFO1 Pitch Depth
Range: 0 - 127?
Specifies how much the LFO1 will affect pitch. The parameter has an unknown function and emusc is currently using a crude linear approximation: value * 0.0011.
Note: There are 8-bit values in the ROM indicating that the MSB is some kind of flag.
11 47 / 139 1 0x00 LFO2 Pitch Depth
Range: 0 - 127?
Specifies how much the LFO2 will affect pitch. The parameter is expected to have the same function as LFO1 Pitch Depth.
12 48 / 140 1 0x00 ✔️ Pitch Envelope Multiplier
Range: 0 - 127
Coefficient to be multiplied to output from pitch envelopes (see e.g. Pitch Envelope Level P0).
13 49 / 141 1 0x00 N/A Unused
14 50 / 142 1 0x40 ✔️ Pitch Envelope Level P0
Range: -63 - +63
Initial value for pitch envelope. Pitch level transitions to Pitch Envelope Level P1 during the time of Pitch Envelope Duration P1. Pitch envelope values are calculated as: Envelope value \cdot Pitch Envelope Multiplier \cdot 0.3 => pitch change in cents.
15 51 / 143 1 0x40 ✔️ Pitch Envelope Level P1
Range: -63 - +63
Pitch envelope value at end of P1. See _Pitch Envelope Level P0 for more details.
16 52 / 144 1 0x40 ✔️ Pitch Envelope Level P2
Range: -63 - +63
Pitch envelope value at end of P2. See _Pitch Envelope Level P0 for more details.
17 53 / 145 1 0x40 ✔️ Pitch Envelope Level P3
Range: -63 - +63
Pitch envelope value at end of P3. See _Pitch Envelope Level P0 for more details.
18 54 / 146 1 0x40 ✔️ Pitch Envelope Level P4
Range: -63 - +63
Pitch envelope value at end of P4. See _Pitch Envelope Level P4 for more details.
19 55 / 147 1 0x00 ✔️ Pitch Envelope Duration P1
Range: 0 - 127
Duration for pitch envelope transition from initial value, P0, to P1 (phase 1). The phase time duration value is a non-linear function similarly to what is used for e.g. TVA and TVF envelopes. This function is defined in a LUT internally, but EmuSC is currently unable to properly use this LUT. Instead using a pretty accurate approximation to convert to seconds: ${2^{value \over 18.0} \over 5.45} - 0.183$
20 56 / 148 1 0x00 ✔️ Pitch Envelope Duration P2
Range: 0 - 127
Duration for pitch envelope phase 2. See Pitch Envelope Duration P1 for more information.
21 57 / 149 1 0x00 ✔️ Pitch Envelope Duration P3
Range: 0 - 127
Duration for pitch envelope phase 3. See Pitch Envelope Duration P1 for more information.
22 58 / 150 1 0x00 ✔️ Pitch Envelope Duration P4
Range: 0 - 127
Duration for pitch envelope phase 4. See Pitch Envelope Duration P1 for more information.
23 59 / 151 1 0x00 ✔️ Pitch Envelope Duration P5
Range: 0 - 127
Duration for pitch envelope phase 5. See Pitch Envelope Duration P1 for more information.
24 60 / 152 1 0x00 N/A Unused
25 61 / 153 1 0x00 N/A Unused
26 62 / 154 1 0x00 N/A Unused
27 63 / 155 1 0x00 N/A Unused
28 64 / 156 1 0x40 Unknown
29 65 / 157 1 0x40 Unknown
30 66 / 158 1 0x40 Pitch Envelope Velocity Sensitivity?
Range: -64 - +64?
Positive values with low velocity => pitch envelope is almost cancelled out. High positive values flattens out pitch envelope even at full velocity. Value of 0 gives the same pitch envelope independent of velocity => no effect. Negative values seems to invert the pitch envelope somehow. A negative value of 11 results in static pitch for the entire time of the partial independent of velocity. WIP
31 67 / 159 1 0x40 Unknown
32 68 / 160 1 0x00 Bend pitch
33 69 / 161 1 0x00 TVF Cutoff Frequency
Range: 0 - 127
The cutoff frequency of the 2nd. order low-pass filter applied to all partials. This is applied independently of the filter envelope(?). The exact function translating values into frequencies is not known and WIP.
34 70 / 162 1 0x00 TVF Resonance
Range: 0 - 127
The resonance (Q) of the low-pass filter. The exact function translating values into Q-values is not known and WIP.
35 71 / 163 1 0x03 Low velocity clearer. If 0 then Level Key Follow work as described in 73 / 165. If != 0, then Level Key Follow is disabled.
36 72 / 164 1 0x00 Flags?
37 73 / 165 1 0x40 Level Key Follow. Affects keys above C4. Positive number increases volume, negative decreases volume.
38 74 / 166 1 0x00 LFO1 TVF Depth
Range: 1 - 127
Specifies how much the LFO1 will affect the cutoff filter frequency. Exact function is currently unknown.
39 75 / 167 1 0x00 LFO2 TVF Depth
Range: 1 - 127
Specifies how much the LFO2 will affect the cutoff filter frequency. See description of LFO1 TVF Depth above.
40 76 / 168 1 0x00 TVF Envelope Level Initial
Range: 1 - 127
Factor of the effect of envelope values.
41 77 / 169 1 0x40 TVF Envelope Level P1
Range: 1 - 127
Relative change to filter cutoff value.
42 78 / 170 1 0x40 TVF Envelope Level P2
Range: 1 - 127
Relative change to filter cutoff value.
43 79 / 171 1 0x40 TVF Envelope Level P3
Range: 1 - 127
Relative change to filter cutoff value.
44 80 / 172 1 0x40 TVF Envelope Level P4
Range: 1 - 127
Relative change to filter cutoff value.
45 81 / 173 1 0x40 TVF Envelope Level P5
Range: 1 - 127
Relative change to filter cutoff value.
46 82 / 174 1 0x00 ✔️ TVF Envelope Duration P1
Range: 1 - 127
Same as for TVA.
47 83 / 175 1 0x00 ✔️ TVF Envelope Duration P2
Range: 1 - 127
Same as for TVA.
48 84 / 176 1 0x00 ✔️ TVF Envelope Duration P3
Range: 1 - 127
Same as for TVA.
49 85 / 177 1 0x00 ✔️ TVF Envelope Duration P4
Range: 1 - 127
Same as for TVA.
50 86 / 178 1 0x00 ✔️ TVF Envelope Duration P5
Range: 1 - 127
Same as for TVA.
51 87 / 179 1 0x40 N/A Unused
52 88 / 180 1 0x00 Space voice?
53 89 / 181 1 0x00 Fr Horn 1?
54 90 / 182 1 0x00 N/A Unused
55 91 / 183 1 0x40 Unknown
56 92 / 184 1 0x40 Unknown
57 93 / 185 1 0x40 TVF Cutoff Velocity Sensitivity
Range: -64 - +63
Changes TVF cutoff frequency based on key velocity. Stronger effect the lower the key velocity is, and no effect when velocity = 127. Function is WIP
58 94 / 186 1 0x40 Unknown
59 95 / 187 1 0x40 Unknown
60 96 / 188 1 0x00 Breath noise?
61 97 / 189 1 0x00 N/A Unused
62 98 / 190 1 0x00 Pressure sensitivity (A)
63 99 / 191 1 0x7F N/A Unused
64 100 / 192 1 0x7F N/A Unused
65 101 / 193 1 0x00 ✔️ Volume attenuation
Range: 1 - 127
Defines volume attenuation for this partial. The range has the same attenuation level function as all other volume attenuations, see Volume Attenuation in Instrument Parameters for more information.
66 102 / 194 1 0x00 Bias Position
Range: 0 - 2
0 => bias centered on note #60(C4)
1 => bias centered on note #0(or nearby)
2 => bias centered on note #120(C9)(or nearby)
67 103 / 195 1 0x40 Bias Level
Range: -20 - +20
A value of 0 makes no effect. Negative values results in gradually lower volume level for notes of higher frequencies than Bias Position, while positive values gives similar effect just on notes of lower frequencies than Bias Position
68 104 / 196 1 0x00 LFO1 TVA Depth
Range: 1 - 64?
Specifies how much the LFO1 will affect level. Exact function is unknown, but a sample multiplication of "value / 100" seems to give a pretty good approximation.
69 105 / 197 1 0x00 LFO2 TVA Depth
Range: 1 - 64?
Specifies how much the LFO2 will affect level. For details, see LFO1 TVA Depth above.
70 106 / 198 1 0x00 ✔️ TVA Envelope Level P1
Range: 0 - 127
Volume level for 1st attack phase.
71 107 / 199 1 0x00 ✔️ TVA Envelope Level P2
Range: 0 - 127
Volume level for 2nd attack phase.
72 108 / 200 1 0x00 ✔️ TVA Envelope Level P3
Range: 0 - 127
Volume level for 1st decay phase.
73 109 / 201 1 0x00 ✔️ TVA Envelope Level P4
Range: 0 - 127
Volume level for 2nd decay phase. If this is non-zero, there will be a sustained tone at this level after P4 is complete and until key release.
74 110 / 202 1 0x00 ✔️ TVA Envelope Duration T1
Range: 0 - 255
Time duration for 1st attack phase. The MSB specify the transition curve
0 => Exponential curve
1 => Linear curve
Remaining 7 bit describes the time; see Pitch Envelope Duration P1 for function description.
75 111 / 203 1 0x00 ✔️ TVA Envelope Duration T2
Range: 0 - 255
Time duration for 2nd attack phase. See P1 above.
76 112 / 204 1 0x00 ✔️ TVA Envelope Duration T3
Range: 0 - 255
Time duration for 1st decay phase. See P1 above.
77 113 / 205 1 0x00 ✔️ TVA Envelope Duration T4
Range: 0 - 255
Time duration for 2nd decay phase. See P1 above.
78 114 / 206 1 0x00 ✔️ TVA Envelope Duration T5
Range: 0 - 255
Time duration for release phase. See P1 above.
79 115 / 207 1 0x00 Note high?
80 116 / 208 1 0x00 Note low?
81 117 / 209 1 0x00 TVA Envelope Time Presets T1-T4
Range: 0 - 2
0 => no effect
1 => TVA envelope times are inverted; key = 127 - key? This gives approx the correct behavior, but there are more nuances to it. Needs more investigation.
2 => TVA envelope times are adjusted as if key = 127
82 118 / 210 1 0x00 TVA Envelope Time Presets T5
Range: 0 - 2
Same as effect as TVA Envelope Time Presets T1-T4 above, but for the release phase.
83 119 / 211 1 0x40 ✔️ TVA Envelope Time Key Follow T1-T4
Range: -20 - +20
Defines how much the TVA envelope duration for attack and decays phases (T1 - T4) are adjusted based on key / frequency. Positive values makes notes with key < C4 have shorter TVA envelope duration, while keys > C4 have longer duration. Negative values have the inverted effect. The exact function is not found yet, but a pretty good estimation is: y = $0.87075^{value} \cdot e^{0.0021586 \cdot value \cdot key}$
84 120 / 212 1 0x40 ✔️ TVA Envelope Time Key Follow T5
Range: -20 - +20
Same as effect as TVA Envelope Time Key Follow T1-T4 above, but for release phase.
85 121 / 213 1 0x40 TVA Envelope Attack Time Velocity Sensitivity
Range: -24 - +24
Higher values gives shorter TVA attack phase duration based on key velocity. Function not known yet.
86 122 / 214 1 0x40 TVA Envelope Release Time Velocity Sensitivity
Range: -24 - +24
Higher values gives shorter TVA release phase duration based on key velocity. Function not known yet.
87 123 / 215 1 0x00 N/A Unused

Note

Default value of e.g. 0x40 means that the ROM value is a number ranging from -64 - +63 and value 0x40 (decimal 64) = 0.

Partial definitions (60 bytes)

Important

Not to be confused with Instrument partials. Should probably rename Partial to something else (Tone?) to avoid confusion.

Index Length EmuSC Description
0 12 ✔️ Partial name in ASCII. Padded with space.
12 16 ✔️ 16 multi-sample split points. Each value is note value
12 32 ✔️ 16 sample references (2 byte)

The split points dictates which sample to use for different notes (pitch levels)

Sample definitions (16 bytes)

Index Length EmuSC Description
0 1 ✔️ Coarse volume
1 3 ✔️ Address in PCM ROMs
4 2 Unknown (related to looped samples)
6 2 ✔️ Sample length
8 2 ✔️ Loop length
10 1 ✔️ Loop mode
11 1 ✔️ Original key number
12 2 ✔️ Fine Pitch
14 2 ✔️ Fine Volume

Variations definitions (3072 bytes)

Index Length EmuSC Description
0 256 ✔️ 128 capital instruments (GM instruments). 2 byte instrument reference.
1 256 ✔️ 128 instrument GS variations (many are not used). 2 byte instrument reference.
.. 256 ✔️ 128 instrument GS variations (many are not used). 2 byte instrument reference.
127 256 ✔️ 128 instrument MT-32 variations. 2 byte instrument reference.

Drum set LUT (128 bytes)

This is a lookup table used to map drum set index with drum set definitions (see below).

Drum set definitions (1164 bytes)

Index Length EmuSC Description
0 256 ✔️ 16 bit instrument reference
256 128 ✔️ Volume
384 128 ✔️ Key
512 128 ✔️ Assign Group
640 128 ✔️ Panpot
768 128 Reverb
896 128 Chorus
1024 128 ✔️ Flags
1152 12 ✔️ Drum kit name in ASCII

In the Drum set definitions all parameters, except the name, are in packs of 128 values; corresponding to the MIDI key number.

Note

Note that the SC-55 actually have 13 valid drum sets even though only 9 are available. The remaining drum sets are AC.STANDARD, AC.ELEC., AC.BRUSH and AC.TR-808. Why these drum sets have been hidden from users are unknown.

Initial values

Address Name Description
0x3CA00 - 0x3CA47 Initial values (Common) Initial values of System Common and Patch Common
0x3CA48 - 0x3D147 Initial values (Blocks) Initial values of each block / part (112 bytes each)

Initial values of the internal state. The SC-55 stores its internal state at 0x8000-0x905F in its RAM. This area is sent and received by bulk dump transmission and reception.

Below is a table showing the content of the initial values stored in ROM together with RAM address and SysEx bulk dump addresses.

ROM Addr. RAM Addr. Bulk Dump Addr. Length Category Description
0x3CA00 0x8000 48 00 00 2 System Master Tune
0x3CA02 0x8002 48 00 04 1 System Master Volume
0x3CA03 0x8003 48 00 06 1 System LGC Controller Number
0x3CA04 0x8004 48 00 08 1 System Unknown
0x3CA05 0x8005 48 00 0A 1 System Master Key Shift
0x3CA06 0x8006 48 00 0C 1 System Master Pan
0x3CA07 0x8007 48 00 0E 1 System Unknown
0x3CA08 0x8008 48 00 10 16 Patch Common Patch Name
0x3CA18 0x8018 48 00 30 16 Patch Common Voice Reserve
0x3CA28 0x8028 48 00 50 1 Patch Common Assigner Separate Wall
0x3CA29 0x8029 48 00 52 1 Patch Common Unknown
0x3CA2A 0x802A 48 00 54 1 Patch Common Reverb Macro
0x3CA2B 0x802B 48 00 56 1 Patch Common Reverb Character
0x3CA2C 0x802C 48 00 58 1 Patch Common Reverb Pre-LPF
0x3CA2D 0x802D 48 00 5A 1 Patch Common Reverb Level
0x3CA2E 0x802E 48 00 5C 1 Patch Common Reverb Time
0x3CA2F 0x802F 48 00 5E 1 Patch Common Reverb Delay Feedback
0x3CA30 0x8030 48 00 60 1 Patch Common Reverb Send Level to Chorus
0x3CA31 0x8031 48 00 62 1 Patch Common Reverb Pre-Delay Time
0x3CA32 0x8032 48 00 64 1 Patch Common Chorus Macro
0x3CA33 0x8033 48 00 66 1 Patch Common Chorus Pre-LPF
0x3CA34 0x8034 48 00 68 1 Patch Common Chorus Level
0x3CA35 0x8035 48 00 6A 1 Patch Common Chorus Feedback
0x3CA36 0x8036 48 00 6C 1 Patch Common Chorus Delay
0x3CA37 0x8037 48 00 6E 1 Patch Common Chorus Rate
0x3CA38 0x8038 48 00 70 1 Patch Common Chorus Depth
0x3CA39 0x8039 48 00 72 1 Patch Common Chorus Send Level to Reverb
0x3CA3A 0x803A 48 00 74 1 Patch Common Chorus Send Level to Delay
0x3CA3B 0x803B 48 00 76 1 Patch Common Unknown (SC-88 or later: Delay Macro)
0x3CA3C 0x803C 48 00 78 1 Patch Common Unknown (SC-88 or later: Delay Pre-LPF)
0x3CA3D 0x803D 48 00 7A 1 Patch Common Unknown (SC-88 or later: Delay Time Center)
0x3CA3E 0x803E 48 00 7C 1 Patch Common Unknown (SC-88 or later: Delay Time Ratio Left)
0x3CA3F 0x803F 48 00 7E 1 Patch Common Unknown (SC-88 or later: Delay Time Ratio Right)
0x3CA40 0x8040 48 01 00 1 Patch Common Unknown (SC-88 or later: Delay Level Center)
0x3CA41 0x8041 48 01 02 1 Patch Common Unknown (SC-88 or later: Delay Level Left)
0x3CA42 0x8042 48 01 04 1 Patch Common Unknown (SC-88 or later: Delay Level Right)
0x3CA43 0x8043 48 01 06 1 Patch Common Unknown (SC-88 or later: Delay Level)
0x3CA44 0x8044 48 01 08 1 Patch Common Unknown (SC-88 or later: Delay Feedback)
0x3CA45 0x8045 48 01 0A 1 Patch Common Unknown (SC-88 or later: Delay Send Level to Reverb)
0x3CA46 0x8046 48 01 0C 1 Patch Common Unknown
0x3CA47 0x8047 48 01 0E 1 Patch Common Unknown
0x3CA48 0x8048 48 01 10 1 Patch Part 10 Bank Select
0x3CA49 0x8049 48 01 12 1 Patch Part 10 Program Change
0x3CA4A 0x804A 48 01 14 1 Patch Part 10 Rx. NRPN/PB/CAf/PC/PAf/Note/Soft
0x3CA4B 0x804B 48 01 16 1 Patch Part 10 Rx. Sos/Por/Hold/Exp/Pan/Vol/Mod/RPN
0x3CA4C 0x804C 48 01 18 1 Patch Part 10 Rx. Channel
0x3CA4D 0x804D 48 01 1A 1 Patch Part 10 Mono/Poly, Assign, Rhythm
0x3CA4E 0x804E 48 01 1C 1 Patch Part 10 Pitch Key Shift
0x3CA4F 0x804F 48 01 1E 1 Patch Part 10 Pitch Offset Fine
0x3CA50 0x8050 48 01 20 1 Patch Part 10 Part Level
0x3CA51 0x8051 48 01 22 1 Patch Part 10 Part Panpot
0x3CA52 0x8052 48 01 24 1 Patch Part 10 Velocity Sense Depth
0x3CA53 0x8053 48 01 26 1 Patch Part 10 Velocity Sense Offset
0x3CA54 0x8054 48 01 28 1 Patch Part 10 Keyboard Range Low
0x3CA55 0x8055 48 01 2A 1 Patch Part 10 Keyboard Range High
0x3CA56 0x8056 48 01 2C 1 Patch Part 10 Chorus Send Level
0x3CA57 0x8057 48 01 2E 1 Patch Part 10 Reverb Send Level
0x3CA58 0x8058 48 01 30 1 Patch Part 10 Tone Modify 1 (Vibrato Rate)
0x3CA59 0x8059 48 01 32 1 Patch Part 10 Tone Modify 2 (Vibrato Depth)
0x3CA5A 0x805A 48 01 34 1 Patch Part 10 Tone Modify 3 (TVF Cutoff Freq)
0x3CA5B 0x805B 48 01 36 1 Patch Part 10 Tone Modify 4 (TVF Resonance)
0x3CA5C 0x805C 48 01 38 1 Patch Part 10 Tone Modify 5 (TVF & TVA Env. Attack)
0x3CA5D 0x805D 48 01 3A 1 Patch Part 10 Tone Modify 6 (TVF & TVA Env. Decay)
0x3CA5E 0x805E 48 01 3C 1 Patch Part 10 Tone Modify 7 (TVF & TVA Env. Release)
0x3CA5F 0x805F 48 01 3E 1 Patch Part 10 Tone Modify 8 (Vibrato Delay)
0x3CA60 0x8060 48 01 40 1 Patch Part 10 Unknown (SC-55mkII or later: Rx. Bank Select MSB/LSB, Tone Remain)
0x3CA61 0x8061 48 01 42 1 Patch Part 10 Unknown (SC-88 or later: Delay Send Level)
0x3CA62 0x8062 48 01 44 1 Patch Part 10 Scale Tuning C
0x3CA63 0x8063 48 01 46 1 Patch Part 10 Scale Tuning C#
0x3CA64 0x8064 48 01 48 1 Patch Part 10 Scale Tuning D
0x3CA65 0x8065 48 01 4A 1 Patch Part 10 Scale Tuning D#
0x3CA66 0x8066 48 01 4C 1 Patch Part 10 Scale Tuning E
0x3CA67 0x8067 48 01 4E 1 Patch Part 10 Scale Tuning F
0x3CA68 0x8068 48 01 50 1 Patch Part 10 Scale Tuning F#
0x3CA69 0x8069 48 01 52 1 Patch Part 10 Scale Tuning G
0x3CA6A 0x806A 48 01 54 1 Patch Part 10 Scale Tuning G#
0x3CA6B 0x806B 48 01 56 1 Patch Part 10 Scale Tuning A
0x3CA6C 0x806C 48 01 58 1 Patch Part 10 Scale Tuning A#
0x3CA6D 0x806D 48 01 5A 1 Patch Part 10 Scale Tuning B
0x3CA6E 0x806E 48 01 5C 1 Patch Part 10 CC1 Controller Number
0x3CA6F 0x806F 48 01 5E 1 Patch Part 10 CC2 Controller Number
0x3CA70 0x8070 48 01 60 1 Patch Part 10 Mod. Pitch Control
0x3CA71 0x8071 48 01 62 1 Patch Part 10 Mod. TVF Cutoff Control
0x3CA72 0x8072 48 01 64 1 Patch Part 10 Mod. Amplitude Control
0x3CA73 0x8073 48 01 66 1 Patch Part 10 Unknown
0x3CA74 0x8074 48 01 68 1 Patch Part 10 Mod. LFO1 Rate Control
0x3CA75 0x8075 48 01 6A 1 Patch Part 10 Mod. LFO1 Pitch Depth
0x3CA76 0x8076 48 01 6C 1 Patch Part 10 Mod. LFO1 TVF Depth
0x3CA77 0x8077 48 01 6E 1 Patch Part 10 Mod. LFO1 TVA Depth
0x3CA78 0x8078 48 01 70 1 Patch Part 10 Mod. LFO2 Rate Control
0x3CA79 0x8079 48 01 72 1 Patch Part 10 Mod. LFO2 Pitch Depth
0x3CA7A 0x807A 48 01 74 1 Patch Part 10 Mod. LFO2 TVF Depth
0x3CA7B 0x807B 48 01 76 1 Patch Part 10 Mod. LFO2 TVA Depth
0x3CA7C 0x807C 48 01 78 1 Patch Part 10 Bend Pitch Control
0x3CA7D 0x807D 48 01 7A 1 Patch Part 10 Bend TVF Cutoff Control
0x3CA7E 0x807E 48 01 7C 1 Patch Part 10 Bend Amplitude Control
0x3CA7F 0x807F 48 01 7E 1 Patch Part 10 Unknown
0x3CA80 0x8080 48 02 00 1 Patch Part 10 Bend LFO1 Rate Control
0x3CA81 0x8081 48 02 02 1 Patch Part 10 Bend LFO1 Pitch Depth
0x3CA82 0x8082 48 02 04 1 Patch Part 10 Bend LFO1 TVF Depth
0x3CA83 0x8083 48 02 06 1 Patch Part 10 Bend LFO1 TVA Depth
0x3CA84 0x8084 48 02 08 1 Patch Part 10 Bend LFO2 Rate Control
0x3CA85 0x8085 48 02 0A 1 Patch Part 10 Bend LFO2 Pitch Depth
0x3CA86 0x8086 48 02 0C 1 Patch Part 10 Bend LFO2 TVF Depth
0x3CA87 0x8087 48 02 0E 1 Patch Part 10 Bend LFO2 TVA Depth
0x3CA88 0x8088 48 02 10 1 Patch Part 10 CAf Pitch Control
0x3CA89 0x8089 48 02 12 1 Patch Part 10 CAf TVF Cutoff Control
0x3CA8A 0x808A 48 02 14 1 Patch Part 10 CAf Amplitude Control
0x3CA8B 0x808B 48 02 16 1 Patch Part 10 Unknown
0x3CA8C 0x808C 48 02 18 1 Patch Part 10 CAf LFO1 Rate Control
0x3CA8D 0x808D 48 02 1A 1 Patch Part 10 CAf LFO1 Pitch Depth
0x3CA8E 0x808E 48 02 1C 1 Patch Part 10 CAf LFO1 TVF Depth
0x3CA8F 0x808F 48 02 1E 1 Patch Part 10 CAf LFO1 TVA Depth
0x3CA90 0x8090 48 02 20 1 Patch Part 10 CAf LFO2 Rate Control
0x3CA91 0x8091 48 02 22 1 Patch Part 10 CAf LFO2 Pitch Depth
0x3CA92 0x8092 48 02 24 1 Patch Part 10 CAf LFO2 TVF Depth
0x3CA93 0x8093 48 02 26 1 Patch Part 10 CAf LFO2 TVA Depth
0x3CA94 0x8094 48 02 28 1 Patch Part 10 PAf Pitch Control
0x3CA95 0x8095 48 02 2A 1 Patch Part 10 PAf TVF Cutoff Control
0x3CA96 0x8096 48 02 2C 1 Patch Part 10 PAf Amplitude Control
0x3CA97 0x8097 48 02 2E 1 Patch Part 10 Unknown
0x3CA98 0x8098 48 02 30 1 Patch Part 10 PAf LFO1 Rate Control
0x3CA99 0x8099 48 02 32 1 Patch Part 10 PAf LFO1 Pitch Depth
0x3CA9A 0x809A 48 02 34 1 Patch Part 10 PAf LFO1 TVF Depth
0x3CA9B 0x809B 48 02 36 1 Patch Part 10 PAf LFO1 TVA Depth
0x3CA9C 0x809C 48 02 38 1 Patch Part 10 PAf LFO2 Rate Control
0x3CA9D 0x809D 48 02 3A 1 Patch Part 10 PAf LFO2 Pitch Depth
0x3CA9E 0x809E 48 02 3C 1 Patch Part 10 PAf LFO2 TVF Depth
0x3CA9F 0x809F 48 02 3E 1 Patch Part 10 PAf LFO2 TVA Depth
0x3CAA0 0x80A0 48 02 40 1 Patch Part 10 CC1 Pitch Control
0x3CAA1 0x80A1 48 02 42 1 Patch Part 10 CC1 TVF Cutoff Control
0x3CAA2 0x80A2 48 02 44 1 Patch Part 10 CC1 Amplitude Control
0x3CAA3 0x80A3 48 02 46 1 Patch Part 10 Unknown
0x3CAA4 0x80A4 48 02 48 1 Patch Part 10 CC1 LFO1 Rate Control
0x3CAA5 0x80A5 48 02 4A 1 Patch Part 10 CC1 LFO1 Pitch Depth
0x3CAA6 0x80A6 48 02 4C 1 Patch Part 10 CC1 LFO1 TVF Depth
0x3CAA7 0x80A7 48 02 4E 1 Patch Part 10 CC1 LFO1 TVA Depth
0x3CAA8 0x80A8 48 02 50 1 Patch Part 10 CC1 LFO2 Rate Control
0x3CAA9 0x80A9 48 02 52 1 Patch Part 10 CC1 LFO2 Pitch Depth
0x3CAAA 0x80AA 48 02 54 1 Patch Part 10 CC1 LFO2 TVF Depth
0x3CAAB 0x80AB 48 02 56 1 Patch Part 10 CC1 LFO2 TVA Depth
0x3CAAC 0x80AC 48 02 58 1 Patch Part 10 CC2 Pitch Control
0x3CAAD 0x80AD 48 02 5A 1 Patch Part 10 CC2 TVF Cutoff Control
0x3CAAE 0x80AE 48 02 5C 1 Patch Part 10 CC2 Amplitude Control
0x3CAAF 0x80AF 48 02 5E 1 Patch Part 10 Unknown
0x3CAB0 0x80B0 48 02 60 1 Patch Part 10 CC2 LFO1 Rate Control
0x3CAB1 0x80B1 48 02 62 1 Patch Part 10 CC2 LFO1 Pitch Depth
0x3CAB2 0x80B2 48 02 64 1 Patch Part 10 CC2 LFO1 TVF Depth
0x3CAB3 0x80B3 48 02 66 1 Patch Part 10 CC2 LFO1 TVA Depth
0x3CAB4 0x80B4 48 02 68 1 Patch Part 10 CC2 LFO2 Rate Control
0x3CAB5 0x80B5 48 02 6A 1 Patch Part 10 CC2 LFO2 Pitch Depth
0x3CAB6 0x80B6 48 02 6C 1 Patch Part 10 CC2 LFO2 TVF Depth
0x3CAB7 0x80B7 48 02 6E 1 Patch Part 10 CC2 LFO2 TVA Depth
0x3CAB8 0x80B8 48 02 70 112 Patch Part 1 (Same as Patch Part 10)
0x3CB28 0x8128 48 04 50 112 Patch Part 2 (Same as Patch Part 10)
0x3CB98 0x8198 48 06 30 112 Patch Part 3 (Same as Patch Part 10)
0x3CC08 0x8208 48 08 10 112 Patch Part 4 (Same as Patch Part 10)
0x3CC78 0x8278 48 09 70 112 Patch Part 5 (Same as Patch Part 10)
0x3CCE8 0x82E8 48 0b 50 112 Patch Part 6 (Same as Patch Part 10)
0x3CD58 0x8358 48 0d 30 112 Patch Part 7 (Same as Patch Part 10)
0x3CDC8 0x83C8 48 0f 10 112 Patch Part 8 (Same as Patch Part 10)
0x3CE38 0x8438 48 10 70 112 Patch Part 9 (Same as Patch Part 10)
0x3CEA8 0x84A8 48 12 50 112 Patch Part 11 (Same as Patch Part 10)
0x3CF18 0x8518 48 14 30 112 Patch Part 12 (Same as Patch Part 10)
0x3CF88 0x8588 48 16 10 112 Patch Part 13 (Same as Patch Part 10)
0x3CFF8 0x85F8 48 17 70 112 Patch Part 14 (Same as Patch Part 10)
0x3D068 0x8668 48 19 50 112 Patch Part 15 (Same as Patch Part 10)
0x3D0D8 0x86D8 48 1b 30 112 Patch Part 16 (Same as Patch Part 10)
49 00 00 128 Drum Setup 1 Play Note Number
49 02 00 128 Drum Setup 1 Level
49 04 00 128 Drum Setup 1 Assign Group Number
49 06 00 128 Drum Setup 1 Panpot
49 08 00 128 Drum Setup 1 Reverb Depth
49 0a 00 128 Drum Setup 1 Chorus Depth
49 0c 00 128 Drum Setup 1 Rx. Note On/Off
49 0e 00 12 Drum Setup 1 Drum Map Name
49 10 00 128 Drum Setup 2 Play Note Number
49 12 00 128 Drum Setup 2 Level
49 14 00 128 Drum Setup 2 Assign Group Number
49 16 00 128 Drum Setup 2 Panpot
49 18 00 128 Drum Setup 2 Reverb Depth
49 1a 00 128 Drum Setup 2 Chorus Depth
49 1c 00 128 Drum Setup 2 Rx. Note On/Off
49 1e 00 12 Drum Setup 2 Drum Map Name

Lookup tables (LUTs)

Address Length EmuSC Description
0x3D1E8 128 Unknown
0x3D268 128 Unknown
0x3D2E8 128 Unknown
0x3D368 128 Envelope time values -> seconds
0x3D3E8 128 Unknown
0x3D468 128 Unknown
0x3D4E8 128 Unknown
0x3D568 128 Unknown
0x3D5E8 128 Unknown
0x3D668 128 Unknown
0x3D6E8 128 Unknown
0x3D768 128 Unknown
0x3D7E8 130 Unknown 10 * 13 byte table
0x3D868 130 Unknown 10 * 13 byte table
0x3D8E8 130 Unknown 10 * 13 byte table
0x3D968 130 Unknown 10 * 13 byte table
0x3D9E8 130 Unknown 10 * 13 byte table
0x3DA68 130 Unknown 10 * 13 byte table
0x3DAE8 130 Unknown 10 * 13 byte table
0x3DB68 130 Unknown 10 * 13 byte table
0x3DBE8 130 Unknown 10 * 13 byte table
0x3DC68 130 Unknown 10 * 13 byte table
0x3DCE8 130 Unknown 10 * 13 byte table
0x3DE78 128 Unknown
0x3DEF8 128 Unknown
0x3E078 128 Unknown
0x3E0F8 128 Unknown
0x3E278 128 Unknown
0x3E2F8 128 Unknown
0x3E478 128 Unknown
0x3E4F8 256 Unknown
0x3E5F8 256 Unknown
0x3E6F8 256 Unknown
0x3E7F8 256 Unknown
0x3E8F8 256 Unknown
0x3E9F8 256 Unknown
0x3EDF8 256 Unknown
0x3EEF8 256 Unknown
0x3EFF8 256 Unknown
0x3F0F8 256 Unknown
0x3F1F8 256 Unknown
0x3F2F8 256 Unknown
0x3F3F8 256 Unknown

Note

Lookup tables are not used as we have not been able to understand how to use them properly. For calculating the envelope times we can see that the function matches the values in the LUT at address 0x3D368, but the table has only 1 byte values (0-127) giving too imprecise vales to be used for calculating time. There has to be another table to increase the precision somehow.

Plot showing tables from 0x3D1E8 to 0x3D768.

Plot showing tables from 0x3DEF8 to 0x3DE78.

Plot showing tables from 0x3E4F8 to 0x3F3F8.

Credits

Most of the memory structure used in the original SC-55 was reverse-engineered and documented by Kitrinx as part of the SC55_Soundfont project. Initial values, SysEx messages and some other parts where found and documented by shingo45endo. The remaining details have been found and documented by skjelten as part of the EmuSC project.