skjelten / emusc

A software synthesizer emulating the Sound Canvas SC-55 lineup
GNU General Public License v3.0
214 stars 16 forks source link

Research on SC-55 Control ROM #60

Open shingo45endo opened 6 months ago

shingo45endo commented 6 months ago

I'd like to add some information to your excellent research.

Drum set

Address Short name Description
0x38000 - 0x3807F LUT (Drum set) A LUT between program number and drum set

This table shows the correspondence between the program number and the internal drum set number.

As a side note, the SC-33 also has "AC." hidden drum sets, which are assigned to program numbers 112-115 respectively.

Initial values

Address Short 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.

Since these initial values are the same as the internal representation of the bulk dump message, omit a description of the individual bytes.

SysEx

Address Short name Description
0x3D6E8 - 0x3D725 SysEx (40 00 xx) SysEx (System) definitions (10 bytes * 6 + 2 bytes)
0x3D726 - 0x3D7DB SysEx (40 01 xx) SysEx (Patch Common) definitions (10 bytes * 18 + 2 bytes)
0x3D7DC - 0x3D981 SysEx (40 1n xx) SysEx (Patch Part 1n) definitions (10 bytes * 42 + 2 bytes)
0x3D982 - 0x3DC15 SysEx (40 2n xx) SysEx (Patch Part 2n) definitions (10 bytes * 66)
0x3DC16 - 0x3DC71 SysEx (41 mx rr) SysEx (Drum Setup) definitions (10 bytes * 9 + 2 bytes)

The SysEx definition area consists of the above 5 tables. Each table consists of the following 10-byte areas for each address.

SysEx definitions (10 bytes)

Index Length Description
0 1 SysEx address
1 1 Kind (0: Multiple bytes, 1: Single byte, 2: Voicing?, 3: Rx. On/Off, 4: Nibbled 2 bytes, 5: Nibbled 4 bytes, 6: Use for drum set)
2 2 Memory address (MSB On: Absolute address, MSB Off: Offset)
4 2 Depends on kind?
6 2 Minimum value
8 2 Maximum value
skjelten commented 6 months ago

Hi shingo45endo, and thank you very much for the info!

I will update the wiki with your info together with some other updates I have in the pipeline soon. The SysEx definitions could probably be used to properly initialize the internal emulator values without static defaults in the source code.

shingo45endo commented 6 months ago

Thanks. My native language is not English, so please correct it appropriately when posting it on the Wiki.

If you use the SysEx definition table for initial values, be aware of differences in ROM content between models. As far as I know, the number of entries in the SysEx tables are the same for all versions of the original SC-55, but the contents are slightly different between Ver.2.00 and others. However, in the SC-55 variants, there are additions and deletions to each entry in the SysEx table. If you plan to support other synths in the future, you may need to consider these differences as well.

Also, the structure of the SysEx table is completely different for the SC-88 series and SC-8820. The SysEx tables of the SC-88 and Pro are 8 bytes per entry, and the mechanism for indicating the end of the table is also different from the SC-55. For SC-8820, each entry is 5 bytes.

shingo45endo commented 6 months ago

Since these initial values are the same as the internal representation of the bulk dump message, omit a description of the individual bytes.

Since there does not seem to be any documentation out there that describes the details of the SC-55 bulk dump data, I've included it below. This would be rather useful for firmware program analysis by disassembly.

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

Rx. NRPN/PB/CAf/PC/PAf/Note/Soft

Rx. Sos/Por/Hold/Exp/Pan/Vol/Mod/RPN

Mono/Poly, Assign, Rhythm

skjelten commented 6 months ago

That is great information!!

SysEx bulk dump is one of the synth parts that is completely missing in EmuSC.

PS: If you ever suffer from severe lack of hobby projects, may I propose that you have a look at the SysEx code in EmuSC? 😉