[Scummvm-cvs-logs] scummvm master -> 7c2f5e2d0e1df26de3d18e12d1cf644fb80f20e6

lordhoto lordhoto at gmail.com
Fri Nov 23 02:29:25 CET 2012


This automated email contains information about 16 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
a222e0640f AUDIO: Rename global variables in SCUMM AdLib code.
b63950f40d AUDIO: Fix formatting in adlib.cpp.
2d01b7de43 AUDIO: Enforce variable naming guidelines in adlib.cpp.
c2d39e9152 AUDIO: Enforce method naming guidelines in adlib.cpp.
8eeb3f2bf9 AUDIO: Give AdLibSetParam's members more descriptive names.
e5c41cbf9a AUDIO: Comment out unused member in AdLibPart.
78e8b9dd59 AUDIO: Properly handle AdLibPercussionChannel::noteOff.
04baadcf7a AUDIO: Switch MidiDriver_ADLIB to new OPL API.
1c024519d5 AUDIO: Add easy way to write to OPL3's secondary register set.
abe637b0f5 AUDIO: Add support for Sam&Max's OPL3 output in our SCUMM AdLib driver.
40ab5f8788 SCUMM: Ignore detune for Sam&Max.
be60a641bf AUDIO: Slight cleanup and typo fix in S&M OPL3 code.
689497f06e AUDIO: Only enable OPL3 code in MIDI->AdLib, when we have the DOSBox emulator builtin.
761a98997c AUDIO: Disallow custom percussion instruments in MIDI->AdLib code.
1f69192f7d AUDIO: Remove two extra commas.
7c2f5e2d0e Merge pull request #283 from lordhoto/scumm-opl3


Commit: a222e0640f320351eb3787d1b36fa9cafb8df9f5
    https://github.com/scummvm/scummvm/commit/a222e0640f320351eb3787d1b36fa9cafb8df9f5
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-09-30T12:11:15-07:00

Commit Message:
AUDIO: Rename global variables in SCUMM AdLib code.

This does give them slightly nicer names and also adds a "g_" prefix to them.

Changed paths:
    audio/softsynth/adlib.cpp



diff --git a/audio/softsynth/adlib.cpp b/audio/softsynth/adlib.cpp
index 32a5f4a..e1f78c3 100644
--- a/audio/softsynth/adlib.cpp
+++ b/audio/softsynth/adlib.cpp
@@ -32,7 +32,7 @@
 #include "common/translation.h"
 
 #ifdef DEBUG_ADLIB
-static int tick;
+static int g_tick;
 #endif
 
 class MidiDriver_ADLIB;
@@ -227,19 +227,19 @@ struct AdLibSetParams {
 	byte a, b, c, d;
 };
 
-static const byte channel_mappings[9] = {
+static const byte g_operator1Offsets[9] = {
 	0, 1, 2, 8,
 	9, 10, 16, 17,
 	18
 };
 
-static const byte channel_mappings_2[9] = {
+static const byte g_operator2Offsets[9] = {
 	3, 4, 5, 11,
 	12, 13, 19, 20,
 	21
 };
 
-static const AdLibSetParams adlib_setparam_table[] = {
+static const AdLibSetParams g_setParamTable[] = {
 	{0x40, 0, 63, 63},  // level
 	{0xE0, 2, 0, 0},    // unused
 	{0x40, 6, 192, 0},  // level key scaling
@@ -257,21 +257,21 @@ static const AdLibSetParams adlib_setparam_table[] = {
 	{0xC0, 1, 14, 0}    // feedback
 };
 
-static const byte param_table_1[16] = {
+static const byte g_paramTable1[16] = {
 	29, 28, 27, 0,
 	3, 4, 7, 8,
 	13, 16, 17, 20,
 	21, 30, 31, 0
 };
 
-static const uint16 maxval_table[16] = {
+static const uint16 g_maxValTable[16] = {
 	0x2FF, 0x1F, 0x7, 0x3F,
 	0x0F, 0x0F, 0x0F, 0x3,
 	0x3F, 0x0F, 0x0F, 0x0F,
 	0x3, 0x3E, 0x1F, 0
 };
 
-static const uint16 num_steps_table[] = {
+static const uint16 g_numStepsTable[] = {
 	1, 2, 4, 5,
 	6, 7, 8, 9,
 	10, 12, 14, 16,
@@ -282,7 +282,7 @@ static const uint16 num_steps_table[] = {
 	600, 860, 1200, 1600
 };
 
-static const byte note_to_f_num[] = {
+static const byte g_noteFrequencies[] = {
 	90, 91, 92, 92, 93, 94, 94, 95,
 	96, 96, 97, 98, 98, 99, 100, 101,
 	101, 102, 103, 104, 104, 105, 106, 107,
@@ -303,7 +303,7 @@ static const byte note_to_f_num[] = {
 	242, 243, 245, 247, 249, 251, 252, 254
 };
 
-static const AdLibInstrument map_gm_to_fm[128] = {
+static const AdLibInstrument g_gmInstruments[128] = {
 	// 0x00
 { 0xC2, 0xC5, 0x2B, 0x99, 0x58, 0xC2, 0x1F, 0x1E, 0xC8, 0x7C, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x23 },
 { 0x22, 0x53, 0x0E, 0x8A, 0x30, 0x14, 0x06, 0x1D, 0x7A, 0x5C, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
@@ -442,7 +442,7 @@ static const AdLibInstrument map_gm_to_fm[128] = {
 { 0x00, 0x3F, 0x4C, 0xFB, 0x00, 0x00, 0x3F, 0x0A, 0xE9, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x05 }
 };
 
-static AdLibInstrument gm_percussion_to_fm[39] = {
+static AdLibInstrument g_gmPercussionInstruments[39] = {
 { 0x1A, 0x3F, 0x15, 0x05, 0x7C, 0x02, 0x21, 0x2B, 0xE4, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x06 },
 { 0x11, 0x12, 0x04, 0x07, 0x7C, 0x02, 0x23, 0x0B, 0xE5, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x05 },
 { 0x0A, 0x3F, 0x0B, 0x01, 0x7C, 0x1F, 0x1C, 0x46, 0xD0, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x01 },
@@ -484,7 +484,7 @@ static AdLibInstrument gm_percussion_to_fm[39] = {
 { 0x0A, 0x0E, 0x7F, 0x00, 0x7D, 0x13, 0x20, 0x28, 0x03, 0x7C, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 }
 };
 
-static const byte gm_percussion_lookup[128] = {
+static const byte g_gmPercussionInstrumentMap[128] = {
 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
 	0xFF, 0xFF, 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
@@ -495,9 +495,9 @@ static const byte gm_percussion_lookup[128] = {
 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
 };
 
-static byte lookup_table[64][32];
+static byte g_volumeLookupTable[64][32];
 
-static const byte volume_table[] = {
+static const byte g_volumeTable[] = {
 	0, 4, 7, 11,
 	13, 16, 18, 20,
 	22, 24, 26, 27,
@@ -529,15 +529,15 @@ static int lookup_volume(int a, int b) {
 
 	if (b < 0) {
 		if (a < 0) {
-			return lookup_table[-a][-b];
+			return g_volumeLookupTable[-a][-b];
 		} else {
-			return -lookup_table[a][-b];
+			return -g_volumeLookupTable[a][-b];
 		}
 	} else {
 		if (a < 0) {
-			return -lookup_table[-a][b];
+			return -g_volumeLookupTable[-a][b];
 		} else {
-			return lookup_table[a][b];
+			return g_volumeLookupTable[a][b];
 		}
 	}
 }
@@ -549,12 +549,12 @@ static void create_lookup_table() {
 	for (i = 0; i < 64; i++) {
 		sum = i;
 		for (j = 0; j < 32; j++) {
-			lookup_table[i][j] = sum >> 5;
+			g_volumeLookupTable[i][j] = sum >> 5;
 			sum += i;
 		}
 	}
 	for (i = 0; i < 64; i++)
-		lookup_table[i][0] = 0;
+		g_volumeLookupTable[i][0] = 0;
 }
 
 ////////////////////////////////////////
@@ -657,14 +657,14 @@ void AdLibPart::send(uint32 b) {
 
 void AdLibPart::noteOff(byte note) {
 #ifdef DEBUG_ADLIB
-	debug(6, "%10d: noteOff(%d)", tick, note);
+	debug(6, "%10d: noteOff(%d)", g_tick, note);
 #endif
 	_owner->part_key_off(this, note);
 }
 
 void AdLibPart::noteOn(byte note, byte velocity) {
 #ifdef DEBUG_ADLIB
-	debug(6, "%10d: noteOn(%d,%d)", tick, note, velocity);
+	debug(6, "%10d: noteOn(%d,%d)", g_tick, note, velocity);
 #endif
 	_owner->part_key_on(this, &_part_instr, note, velocity);
 }
@@ -676,13 +676,13 @@ void AdLibPart::programChange(byte program) {
 /*
 	uint i;
 	uint count = 0;
-	for (i = 0; i < ARRAYSIZE(map_gm_to_fm[0]); ++i)
-		count += map_gm_to_fm[program][i];
+	for (i = 0; i < ARRAYSIZE(g_gmInstruments[0]); ++i)
+		count += g_gmInstruments[program][i];
 	if (!count)
 		warning("No AdLib instrument defined for GM program %d", (int)program);
 */
 	_program = program;
-	memcpy(&_part_instr, &map_gm_to_fm[program], sizeof(AdLibInstrument));
+	memcpy(&_part_instr, &g_gmInstruments[program], sizeof(AdLibInstrument));
 }
 
 void AdLibPart::pitchBend(int16 bend) {
@@ -739,9 +739,9 @@ void AdLibPart::volume(byte value) {
 
 	_vol_eff = value;
 	for (voice = _voice; voice; voice = voice->_next) {
-		_owner->adlib_set_param(voice->_channel, 0, volume_table[lookup_table[voice->_vol_2][_vol_eff >> 2]]);
+		_owner->adlib_set_param(voice->_channel, 0, g_volumeTable[g_volumeLookupTable[voice->_vol_2][_vol_eff >> 2]]);
 		if (voice->_twochan) {
-			_owner->adlib_set_param(voice->_channel, 13, volume_table[lookup_table[voice->_vol_1][_vol_eff >> 2]]);
+			_owner->adlib_set_param(voice->_channel, 13, g_volumeTable[g_volumeLookupTable[voice->_vol_1][_vol_eff >> 2]]);
 		}
 	}
 }
@@ -835,10 +835,10 @@ void AdLibPercussionChannel::noteOn(byte note, byte velocity) {
 		note = _notes[note];
 
 	if (!inst) {
-		// Use the default GM to FM mapping as a fallback as a fallback
-		byte key = gm_percussion_lookup[note];
+		// Use the default GM to FM mapping as a fallback
+		byte key = g_gmPercussionInstrumentMap[note];
 		if (key != 0xFF)
-			inst = &gm_percussion_to_fm[key];
+			inst = &g_gmPercussionInstruments[key];
 	}
 
 	if (!inst) {
@@ -1047,7 +1047,7 @@ void MidiDriver_ADLIB::adlib_write(byte reg, byte value) {
 	if (_adlib_reg_cache[reg] == value)
 		return;
 #ifdef DEBUG_ADLIB
-	debug(6, "%10d: adlib_write[%x] = %x", tick, reg, value);
+	debug(6, "%10d: adlib_write[%x] = %x", g_tick, reg, value);
 #endif
 	_adlib_reg_cache[reg] = value;
 
@@ -1067,7 +1067,7 @@ void MidiDriver_ADLIB::onTimer() {
 	while (_adlib_timer_counter >= _timer_q) {
 		_adlib_timer_counter -= _timer_q;
 #ifdef DEBUG_ADLIB
-		tick++;
+		g_tick++;
 #endif
 		voice = _voices;
 		for (i = 0; i != ARRAYSIZE(_voices); i++, voice++) {
@@ -1115,7 +1115,7 @@ void MidiDriver_ADLIB::mc_inc_stuff(AdLibVoice *voice, Struct10 *s10, Struct11 *
 			voice->_vol_2 = s10->start_value + s11->modify_val;
 			if (!_scummSmallHeader) {
 				adlib_set_param(voice->_channel, 0,
-												volume_table[lookup_table[voice->_vol_2]
+												g_volumeTable[g_volumeLookupTable[voice->_vol_2]
 																		 [part->_vol_eff >> 2]]);
 			} else {
 				adlib_set_param(voice->_channel, 0, voice->_vol_2);
@@ -1125,7 +1125,7 @@ void MidiDriver_ADLIB::mc_inc_stuff(AdLibVoice *voice, Struct10 *s10, Struct11 *
 			voice->_vol_1 = s10->start_value + s11->modify_val;
 			if (voice->_twochan && !_scummSmallHeader) {
 				adlib_set_param(voice->_channel, 13,
-												volume_table[lookup_table[voice->_vol_1]
+												g_volumeTable[g_volumeLookupTable[voice->_vol_1]
 												[part->_vol_eff >> 2]]);
 			} else {
 				adlib_set_param(voice->_channel, 13, voice->_vol_1);
@@ -1203,10 +1203,10 @@ void MidiDriver_ADLIB::adlib_set_param(int channel, byte param, int value) {
 	assert(channel >= 0 && channel < 9);
 
 	if (param <= 12) {
-		reg = channel_mappings_2[channel];
+		reg = g_operator2Offsets[channel];
 	} else if (param <= 25) {
 		param -= 13;
-		reg = channel_mappings[channel];
+		reg = g_operator1Offsets[channel];
 	} else if (param <= 27) {
 		param -= 13;
 		reg = channel;
@@ -1223,7 +1223,7 @@ void MidiDriver_ADLIB::adlib_set_param(int channel, byte param, int value) {
 		return;
 	}
 
-	as = &adlib_setparam_table[param];
+	as = &g_setParamTable[param];
 	if (as->d)
 		value = as->d - value;
 	reg += as->a;
@@ -1248,7 +1248,7 @@ void MidiDriver_ADLIB::struct10_setup(Struct10 *s10) {
 	f = s10->active - 1;
 
 	t = s10->table_a[f];
-	e = num_steps_table[lookup_table[t & 0x7F][b]];
+	e = g_numStepsTable[g_volumeLookupTable[t & 0x7F][b]];
 	if (t & 0x80) {
 		e = random_nr(e);
 	}
@@ -1321,7 +1321,7 @@ void MidiDriver_ADLIB::adlib_playnote(int channel, int note) {
 	}
 
 	i = (notex << 3) + ((note >> 4) & 0x7);
-	adlib_write(channel + 0xA0, note_to_f_num[i]);
+	adlib_write(channel + 0xA0, g_noteFrequencies[i]);
 	adlib_write(channel + 0xB0, oct | 0x20);
 }
 
@@ -1410,7 +1410,7 @@ void MidiDriver_ADLIB::mc_key_on(AdLibVoice *voice, AdLibInstrument *instr, byte
 		voice->_duration *= 63;
 
 	if (!_scummSmallHeader)
-		vol_1 = (instr->mod_scalingOutputLevel & 0x3F) + lookup_table[velocity >> 1][instr->mod_waveformSelect >> 2];
+		vol_1 = (instr->mod_scalingOutputLevel & 0x3F) + g_volumeLookupTable[velocity >> 1][instr->mod_waveformSelect >> 2];
 	else
 		vol_1 = 0x3f - (instr->mod_scalingOutputLevel & 0x3F);
 	if (vol_1 > 0x3F)
@@ -1418,7 +1418,7 @@ void MidiDriver_ADLIB::mc_key_on(AdLibVoice *voice, AdLibInstrument *instr, byte
 	voice->_vol_1 = vol_1;
 
 	if (!_scummSmallHeader)
-		vol_2 = (instr->car_scalingOutputLevel & 0x3F) + lookup_table[velocity >> 1][instr->car_waveformSelect >> 2];
+		vol_2 = (instr->car_scalingOutputLevel & 0x3F) + g_volumeLookupTable[velocity >> 1][instr->car_waveformSelect >> 2];
 	else
 		vol_2 = 0x3f - (instr->car_scalingOutputLevel & 0x3F);
 	if (vol_2 > 0x3F)
@@ -1428,9 +1428,9 @@ void MidiDriver_ADLIB::mc_key_on(AdLibVoice *voice, AdLibInstrument *instr, byte
 	c = part->_vol_eff >> 2;
 
 	if (!_scummSmallHeader) {
-		vol_2 = volume_table[lookup_table[vol_2][c]];
+		vol_2 = g_volumeTable[g_volumeLookupTable[vol_2][c]];
 		if (voice->_twochan)
-			vol_1 = volume_table[lookup_table[vol_1][c]];
+			vol_1 = g_volumeTable[g_volumeLookupTable[vol_1][c]];
 	}
 
 	adlib_setup_channel(voice->_channel, instr, vol_1, vol_2);
@@ -1454,14 +1454,14 @@ void MidiDriver_ADLIB::adlib_setup_channel(int chan, AdLibInstrument *instr, byt
 
 	assert(chan >= 0 && chan < 9);
 
-	channel = channel_mappings[chan];
+	channel = g_operator1Offsets[chan];
 	adlib_write(channel + 0x20, instr->mod_characteristic);
 	adlib_write(channel + 0x40, (instr->mod_scalingOutputLevel | 0x3F) - vol_1 );
 	adlib_write(channel + 0x60, 0xff & (~instr->mod_attackDecay));
 	adlib_write(channel + 0x80, 0xff & (~instr->mod_sustainRelease));
 	adlib_write(channel + 0xE0, instr->mod_waveformSelect);
 
-	channel = channel_mappings_2[chan];
+	channel = g_operator2Offsets[chan];
 	adlib_write(channel + 0x20, instr->car_characteristic);
 	adlib_write(channel + 0x40, (instr->car_scalingOutputLevel | 0x3F) - vol_2 );
 	adlib_write(channel + 0x60, 0xff & (~instr->car_attackDecay));
@@ -1487,8 +1487,8 @@ void MidiDriver_ADLIB::mc_init_stuff(AdLibVoice *voice, Struct10 *s10,
 	s11->flag0x40 = flags & 0x40;
 	s10->loop = flags & 0x20;
 	s11->flag0x10 = flags & 0x10;
-	s11->param = param_table_1[flags & 0xF];
-	s10->max_value = maxval_table[flags & 0xF];
+	s11->param = g_paramTable1[flags & 0xF];
+	s10->max_value = g_maxValTable[flags & 0xF];
 	s10->unk3 = 31;
 	if (s11->flag0x40) {
 		s10->modwheel = part->_modwheel >> 2;
@@ -1551,10 +1551,10 @@ int MidiDriver_ADLIB::adlib_get_reg_value_param(int chan, byte param) {
 	assert(chan >= 0 && chan < 9);
 
 	if (param <= 12) {
-		channel = channel_mappings_2[chan];
+		channel = g_operator2Offsets[chan];
 	} else if (param <= 25) {
 		param -= 13;
-		channel = channel_mappings[chan];
+		channel = g_operator1Offsets[chan];
 	} else if (param <= 27) {
 		param -= 13;
 		channel = chan;
@@ -1566,7 +1566,7 @@ int MidiDriver_ADLIB::adlib_get_reg_value_param(int chan, byte param) {
 		return 0;
 	}
 
-	as = &adlib_setparam_table[param];
+	as = &g_setParamTable[param];
 	val = adlib_get_reg_value(channel + as->a);
 	val &= as->c;
 	val >>= as->b;
@@ -1581,7 +1581,7 @@ void MidiDriver_ADLIB::adlib_note_on(int chan, byte note, int mod) {
 	assert(chan >= 0 && chan < 9);
 	code = (note << 7) + mod;
 	curnote_table[chan] = code;
-	adlib_playnote(chan, (int16) channel_table_2[chan] + code);
+	adlib_playnote(chan, (int16)channel_table_2[chan] + code);
 }
 
 


Commit: b63950f40d705d1f8316cf0a291797933ba0a03f
    https://github.com/scummvm/scummvm/commit/b63950f40d705d1f8316cf0a291797933ba0a03f
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-09-30T12:12:05-07:00

Commit Message:
AUDIO: Fix formatting in adlib.cpp.

Powered by astyle.cpp.

Changed paths:
    audio/softsynth/adlib.cpp



diff --git a/audio/softsynth/adlib.cpp b/audio/softsynth/adlib.cpp
index e1f78c3..2c6668e 100644
--- a/audio/softsynth/adlib.cpp
+++ b/audio/softsynth/adlib.cpp
@@ -305,183 +305,183 @@ static const byte g_noteFrequencies[] = {
 
 static const AdLibInstrument g_gmInstruments[128] = {
 	// 0x00
-{ 0xC2, 0xC5, 0x2B, 0x99, 0x58, 0xC2, 0x1F, 0x1E, 0xC8, 0x7C, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x23 },
-{ 0x22, 0x53, 0x0E, 0x8A, 0x30, 0x14, 0x06, 0x1D, 0x7A, 0x5C, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x06, 0x00, 0x1C, 0x79, 0x40, 0x02, 0x00, 0x4B, 0x79, 0x58, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xC2, 0x89, 0x2A, 0x89, 0x49, 0xC2, 0x16, 0x1C, 0xB8, 0x7C, 0x04, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x23 },
-{ 0xC2, 0x17, 0x3D, 0x6A, 0x00, 0xC4, 0x2E, 0x2D, 0xC9, 0x20, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x06, 0x1E, 0x1C, 0x99, 0x00, 0x02, 0x3A, 0x4C, 0x79, 0x00, 0x0C, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x84, 0x40, 0x3B, 0x5A, 0x6F, 0x81, 0x0E, 0x3B, 0x5A, 0x7F, 0x0B, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x84, 0x40, 0x3B, 0x5A, 0x63, 0x81, 0x00, 0x3B, 0x5A, 0x7F, 0x01, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x8C, 0x80, 0x05, 0xEA, 0x59, 0x82, 0x0A, 0x3C, 0xAA, 0x64, 0x07, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x85, 0x40, 0x0D, 0xEC, 0x71, 0x84, 0x58, 0x3E, 0xCB, 0x7C, 0x01, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x8A, 0xC0, 0x0C, 0xDC, 0x50, 0x88, 0x58, 0x3D, 0xDA, 0x7C, 0x01, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xC9, 0x40, 0x2B, 0x78, 0x42, 0xC2, 0x04, 0x4C, 0x8A, 0x7C, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x1A },
-{ 0x2A, 0x0E, 0x17, 0x89, 0x28, 0x22, 0x0C, 0x1B, 0x09, 0x70, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE7, 0x9B, 0x08, 0x08, 0x26, 0xE2, 0x06, 0x0A, 0x08, 0x70, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xC5, 0x05, 0x00, 0xFC, 0x40, 0x84, 0x00, 0x00, 0xDC, 0x50, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x86, 0x40, 0x5D, 0x5A, 0x41, 0x81, 0x00, 0x0B, 0x5A, 0x7F, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
+	{ 0xC2, 0xC5, 0x2B, 0x99, 0x58, 0xC2, 0x1F, 0x1E, 0xC8, 0x7C, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x23 },
+	{ 0x22, 0x53, 0x0E, 0x8A, 0x30, 0x14, 0x06, 0x1D, 0x7A, 0x5C, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x06, 0x00, 0x1C, 0x79, 0x40, 0x02, 0x00, 0x4B, 0x79, 0x58, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xC2, 0x89, 0x2A, 0x89, 0x49, 0xC2, 0x16, 0x1C, 0xB8, 0x7C, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x23 },
+	{ 0xC2, 0x17, 0x3D, 0x6A, 0x00, 0xC4, 0x2E, 0x2D, 0xC9, 0x20, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x06, 0x1E, 0x1C, 0x99, 0x00, 0x02, 0x3A, 0x4C, 0x79, 0x00, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x84, 0x40, 0x3B, 0x5A, 0x6F, 0x81, 0x0E, 0x3B, 0x5A, 0x7F, 0x0B, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x84, 0x40, 0x3B, 0x5A, 0x63, 0x81, 0x00, 0x3B, 0x5A, 0x7F, 0x01, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x8C, 0x80, 0x05, 0xEA, 0x59, 0x82, 0x0A, 0x3C, 0xAA, 0x64, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x85, 0x40, 0x0D, 0xEC, 0x71, 0x84, 0x58, 0x3E, 0xCB, 0x7C, 0x01, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x8A, 0xC0, 0x0C, 0xDC, 0x50, 0x88, 0x58, 0x3D, 0xDA, 0x7C, 0x01, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xC9, 0x40, 0x2B, 0x78, 0x42, 0xC2, 0x04, 0x4C, 0x8A, 0x7C, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x1A },
+	{ 0x2A, 0x0E, 0x17, 0x89, 0x28, 0x22, 0x0C, 0x1B, 0x09, 0x70, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE7, 0x9B, 0x08, 0x08, 0x26, 0xE2, 0x06, 0x0A, 0x08, 0x70, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xC5, 0x05, 0x00, 0xFC, 0x40, 0x84, 0x00, 0x00, 0xDC, 0x50, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x86, 0x40, 0x5D, 0x5A, 0x41, 0x81, 0x00, 0x0B, 0x5A, 0x7F, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
 	// 0x10
-{ 0xED, 0x00, 0x7B, 0xC8, 0x40, 0xE1, 0x99, 0x4A, 0xE9, 0x7E, 0x07, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE8, 0x4F, 0x3A, 0xD7, 0x7C, 0xE2, 0x97, 0x49, 0xF9, 0x7D, 0x05, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE1, 0x10, 0x2F, 0xF7, 0x7D, 0xF3, 0x45, 0x8F, 0xC7, 0x62, 0x07, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x01, 0x8C, 0x9F, 0xDA, 0x70, 0xE4, 0x50, 0x9F, 0xDA, 0x6A, 0x09, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x08, 0xD5, 0x9D, 0xA5, 0x45, 0xE2, 0x3F, 0x9F, 0xD6, 0x49, 0x07, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE5, 0x0F, 0x7D, 0xB8, 0x2E, 0xA2, 0x0F, 0x7C, 0xC7, 0x61, 0x04, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xF2, 0x2A, 0x9F, 0xDB, 0x01, 0xE1, 0x04, 0x8F, 0xD7, 0x62, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE4, 0x88, 0x9C, 0x50, 0x64, 0xE2, 0x18, 0x70, 0xC4, 0x7C, 0x0B, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x02, 0xA3, 0x0D, 0xDA, 0x01, 0xC2, 0x35, 0x5D, 0x58, 0x00, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x18 },
-{ 0x42, 0x55, 0x3E, 0xEB, 0x24, 0xD4, 0x08, 0x0D, 0xA9, 0x71, 0x04, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x18 },
-{ 0xC2, 0x00, 0x2B, 0x17, 0x51, 0xC2, 0x1E, 0x4D, 0x97, 0x7C, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x19 },
-{ 0xC6, 0x01, 0x2D, 0xA7, 0x44, 0xC2, 0x06, 0x0E, 0xA7, 0x79, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xC2, 0x0C, 0x06, 0x06, 0x55, 0xC2, 0x3F, 0x09, 0x86, 0x7D, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x0A },
-{ 0xC2, 0x2E, 0x4F, 0x77, 0x00, 0xC4, 0x08, 0x0E, 0x98, 0x59, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xC2, 0x30, 0x4F, 0xCA, 0x01, 0xC4, 0x0D, 0x0E, 0xB8, 0x7F, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xC4, 0x29, 0x4F, 0xCA, 0x03, 0xC8, 0x0D, 0x0C, 0xB7, 0x7D, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x0B },
+	{ 0xED, 0x00, 0x7B, 0xC8, 0x40, 0xE1, 0x99, 0x4A, 0xE9, 0x7E, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE8, 0x4F, 0x3A, 0xD7, 0x7C, 0xE2, 0x97, 0x49, 0xF9, 0x7D, 0x05, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE1, 0x10, 0x2F, 0xF7, 0x7D, 0xF3, 0x45, 0x8F, 0xC7, 0x62, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x01, 0x8C, 0x9F, 0xDA, 0x70, 0xE4, 0x50, 0x9F, 0xDA, 0x6A, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x08, 0xD5, 0x9D, 0xA5, 0x45, 0xE2, 0x3F, 0x9F, 0xD6, 0x49, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE5, 0x0F, 0x7D, 0xB8, 0x2E, 0xA2, 0x0F, 0x7C, 0xC7, 0x61, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xF2, 0x2A, 0x9F, 0xDB, 0x01, 0xE1, 0x04, 0x8F, 0xD7, 0x62, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE4, 0x88, 0x9C, 0x50, 0x64, 0xE2, 0x18, 0x70, 0xC4, 0x7C, 0x0B, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x02, 0xA3, 0x0D, 0xDA, 0x01, 0xC2, 0x35, 0x5D, 0x58, 0x00, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x18 },
+	{ 0x42, 0x55, 0x3E, 0xEB, 0x24, 0xD4, 0x08, 0x0D, 0xA9, 0x71, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x18 },
+	{ 0xC2, 0x00, 0x2B, 0x17, 0x51, 0xC2, 0x1E, 0x4D, 0x97, 0x7C, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x19 },
+	{ 0xC6, 0x01, 0x2D, 0xA7, 0x44, 0xC2, 0x06, 0x0E, 0xA7, 0x79, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xC2, 0x0C, 0x06, 0x06, 0x55, 0xC2, 0x3F, 0x09, 0x86, 0x7D, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0A },
+	{ 0xC2, 0x2E, 0x4F, 0x77, 0x00, 0xC4, 0x08, 0x0E, 0x98, 0x59, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xC2, 0x30, 0x4F, 0xCA, 0x01, 0xC4, 0x0D, 0x0E, 0xB8, 0x7F, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xC4, 0x29, 0x4F, 0xCA, 0x03, 0xC8, 0x0D, 0x0C, 0xB7, 0x7D, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0B },
 	// 0x20
-{ 0xC2, 0x40, 0x3C, 0x96, 0x58, 0xC4, 0xDE, 0x0E, 0xC7, 0x7C, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x20 },
-{ 0x31, 0x13, 0x2D, 0xD7, 0x3C, 0xE2, 0x18, 0x2E, 0xB8, 0x7C, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x22, 0x86, 0x0D, 0xD7, 0x50, 0xE4, 0x18, 0x5E, 0xB8, 0x7C, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x28 },
-{ 0xF2, 0x0A, 0x0D, 0xD7, 0x40, 0xE4, 0x1F, 0x5E, 0xB8, 0x7C, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xF2, 0x09, 0x4B, 0xD6, 0x48, 0xE4, 0x1F, 0x1C, 0xB8, 0x7C, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x28 },
-{ 0x62, 0x11, 0x0C, 0xE6, 0x3C, 0xE4, 0x1F, 0x0C, 0xC8, 0x7C, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE2, 0x12, 0x3D, 0xE6, 0x34, 0xE4, 0x1F, 0x7D, 0xB8, 0x7C, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE2, 0x13, 0x3D, 0xE6, 0x34, 0xE4, 0x1F, 0x5D, 0xB8, 0x7D, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xA2, 0x40, 0x5D, 0xBA, 0x3F, 0xE2, 0x00, 0x8F, 0xD8, 0x79, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE2, 0x40, 0x3D, 0xDA, 0x3B, 0xE1, 0x00, 0x7E, 0xD8, 0x7A, 0x04, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x62, 0x00, 0x6D, 0xFA, 0x5D, 0xE2, 0x00, 0x8F, 0xC8, 0x79, 0x04, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE1, 0x00, 0x4E, 0xDB, 0x4A, 0xE3, 0x18, 0x6F, 0xE9, 0x7E, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE1, 0x00, 0x4E, 0xDB, 0x66, 0xE2, 0x00, 0x7F, 0xE9, 0x7E, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x02, 0x0F, 0x66, 0xAA, 0x51, 0x02, 0x64, 0x29, 0xF9, 0x7C, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x04 },
-{ 0x16, 0x4A, 0x04, 0xBA, 0x39, 0xC2, 0x58, 0x2D, 0xCA, 0x7C, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x03 },
-{ 0x02, 0x00, 0x01, 0x7A, 0x79, 0x02, 0x3F, 0x28, 0xEA, 0x7C, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
+	{ 0xC2, 0x40, 0x3C, 0x96, 0x58, 0xC4, 0xDE, 0x0E, 0xC7, 0x7C, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x20 },
+	{ 0x31, 0x13, 0x2D, 0xD7, 0x3C, 0xE2, 0x18, 0x2E, 0xB8, 0x7C, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x22, 0x86, 0x0D, 0xD7, 0x50, 0xE4, 0x18, 0x5E, 0xB8, 0x7C, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x28 },
+	{ 0xF2, 0x0A, 0x0D, 0xD7, 0x40, 0xE4, 0x1F, 0x5E, 0xB8, 0x7C, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xF2, 0x09, 0x4B, 0xD6, 0x48, 0xE4, 0x1F, 0x1C, 0xB8, 0x7C, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x28 },
+	{ 0x62, 0x11, 0x0C, 0xE6, 0x3C, 0xE4, 0x1F, 0x0C, 0xC8, 0x7C, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE2, 0x12, 0x3D, 0xE6, 0x34, 0xE4, 0x1F, 0x7D, 0xB8, 0x7C, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE2, 0x13, 0x3D, 0xE6, 0x34, 0xE4, 0x1F, 0x5D, 0xB8, 0x7D, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xA2, 0x40, 0x5D, 0xBA, 0x3F, 0xE2, 0x00, 0x8F, 0xD8, 0x79, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE2, 0x40, 0x3D, 0xDA, 0x3B, 0xE1, 0x00, 0x7E, 0xD8, 0x7A, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x62, 0x00, 0x6D, 0xFA, 0x5D, 0xE2, 0x00, 0x8F, 0xC8, 0x79, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE1, 0x00, 0x4E, 0xDB, 0x4A, 0xE3, 0x18, 0x6F, 0xE9, 0x7E, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE1, 0x00, 0x4E, 0xDB, 0x66, 0xE2, 0x00, 0x7F, 0xE9, 0x7E, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x02, 0x0F, 0x66, 0xAA, 0x51, 0x02, 0x64, 0x29, 0xF9, 0x7C, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 },
+	{ 0x16, 0x4A, 0x04, 0xBA, 0x39, 0xC2, 0x58, 0x2D, 0xCA, 0x7C, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	{ 0x02, 0x00, 0x01, 0x7A, 0x79, 0x02, 0x3F, 0x28, 0xEA, 0x7C, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
 	// 0x30
-{ 0x62, 0x53, 0x9C, 0xBA, 0x31, 0x62, 0x5B, 0xAD, 0xC9, 0x55, 0x04, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xF2, 0x40, 0x6E, 0xDA, 0x49, 0xE2, 0x13, 0x8F, 0xF9, 0x7D, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE2, 0x40, 0x8F, 0xFA, 0x50, 0xF2, 0x04, 0x7F, 0xFA, 0x7D, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE4, 0xA0, 0xCE, 0x5B, 0x02, 0xE2, 0x32, 0x7F, 0xFB, 0x3D, 0x04, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE6, 0x80, 0x9C, 0x99, 0x42, 0xE2, 0x04, 0x7D, 0x78, 0x60, 0x04, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xEA, 0xA0, 0xAC, 0x67, 0x02, 0xE2, 0x00, 0x7C, 0x7A, 0x7C, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE7, 0x94, 0xAD, 0xB7, 0x03, 0xE2, 0x00, 0x7C, 0xBA, 0x7C, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xC3, 0x3F, 0x4B, 0xE9, 0x7E, 0xC1, 0x3F, 0x9B, 0xF9, 0x7F, 0x0B, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x06 },
-{ 0xB2, 0x20, 0xAD, 0xE9, 0x00, 0x62, 0x05, 0x8F, 0xC8, 0x68, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xF2, 0x00, 0x8F, 0xFB, 0x50, 0xF6, 0x47, 0x8F, 0xE9, 0x68, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xF2, 0x00, 0xAF, 0x88, 0x58, 0xF2, 0x54, 0x6E, 0xC9, 0x7C, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xF2, 0x2A, 0x9F, 0x98, 0x01, 0xE2, 0x84, 0x4E, 0x78, 0x6C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE2, 0x02, 0x9F, 0xB8, 0x48, 0x22, 0x89, 0x9F, 0xE8, 0x7C, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE2, 0x2A, 0x7F, 0xB8, 0x01, 0xE4, 0x00, 0x0D, 0xC5, 0x7C, 0x0C, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE4, 0x28, 0x8E, 0xE8, 0x01, 0xF2, 0x00, 0x4D, 0xD6, 0x7D, 0x0C, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x62, 0x23, 0x8F, 0xEA, 0x00, 0xF2, 0x00, 0x5E, 0xD9, 0x7C, 0x0C, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
+	{ 0x62, 0x53, 0x9C, 0xBA, 0x31, 0x62, 0x5B, 0xAD, 0xC9, 0x55, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xF2, 0x40, 0x6E, 0xDA, 0x49, 0xE2, 0x13, 0x8F, 0xF9, 0x7D, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE2, 0x40, 0x8F, 0xFA, 0x50, 0xF2, 0x04, 0x7F, 0xFA, 0x7D, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE4, 0xA0, 0xCE, 0x5B, 0x02, 0xE2, 0x32, 0x7F, 0xFB, 0x3D, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE6, 0x80, 0x9C, 0x99, 0x42, 0xE2, 0x04, 0x7D, 0x78, 0x60, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xEA, 0xA0, 0xAC, 0x67, 0x02, 0xE2, 0x00, 0x7C, 0x7A, 0x7C, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE7, 0x94, 0xAD, 0xB7, 0x03, 0xE2, 0x00, 0x7C, 0xBA, 0x7C, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xC3, 0x3F, 0x4B, 0xE9, 0x7E, 0xC1, 0x3F, 0x9B, 0xF9, 0x7F, 0x0B, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x06 },
+	{ 0xB2, 0x20, 0xAD, 0xE9, 0x00, 0x62, 0x05, 0x8F, 0xC8, 0x68, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xF2, 0x00, 0x8F, 0xFB, 0x50, 0xF6, 0x47, 0x8F, 0xE9, 0x68, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xF2, 0x00, 0xAF, 0x88, 0x58, 0xF2, 0x54, 0x6E, 0xC9, 0x7C, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xF2, 0x2A, 0x9F, 0x98, 0x01, 0xE2, 0x84, 0x4E, 0x78, 0x6C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE2, 0x02, 0x9F, 0xB8, 0x48, 0x22, 0x89, 0x9F, 0xE8, 0x7C, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE2, 0x2A, 0x7F, 0xB8, 0x01, 0xE4, 0x00, 0x0D, 0xC5, 0x7C, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE4, 0x28, 0x8E, 0xE8, 0x01, 0xF2, 0x00, 0x4D, 0xD6, 0x7D, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x62, 0x23, 0x8F, 0xEA, 0x00, 0xF2, 0x00, 0x5E, 0xD9, 0x7C, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
 	// 0x40
-{ 0xB4, 0x26, 0x6E, 0x98, 0x01, 0x62, 0x00, 0x7D, 0xC8, 0x7D, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE2, 0x2E, 0x20, 0xD9, 0x01, 0xF2, 0x0F, 0x90, 0xF8, 0x78, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE4, 0x28, 0x7E, 0xF8, 0x01, 0xE2, 0x23, 0x8E, 0xE8, 0x7D, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xB8, 0x28, 0x9E, 0x98, 0x01, 0x62, 0x00, 0x3D, 0xC8, 0x7D, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x62, 0x00, 0x8E, 0xC9, 0x3D, 0xE6, 0x00, 0x7E, 0xD8, 0x68, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE2, 0x00, 0x5F, 0xF9, 0x48, 0xE6, 0x98, 0x8F, 0xF8, 0x7D, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x62, 0x0C, 0x6E, 0xD8, 0x3D, 0x2A, 0x06, 0x7D, 0xD8, 0x58, 0x04, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE4, 0x00, 0x7E, 0x89, 0x38, 0xE6, 0x84, 0x80, 0xF8, 0x68, 0x0C, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE4, 0x80, 0x6C, 0xD9, 0x30, 0xE2, 0x00, 0x8D, 0xC8, 0x7C, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE2, 0x80, 0x88, 0x48, 0x40, 0xE2, 0x0A, 0x7D, 0xA8, 0x7C, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE4, 0x00, 0x77, 0xC5, 0x54, 0xE2, 0x00, 0x9E, 0xD7, 0x70, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE4, 0x80, 0x86, 0xB9, 0x64, 0xE2, 0x05, 0x9F, 0xD7, 0x78, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE2, 0x00, 0x68, 0x68, 0x56, 0xE2, 0x08, 0x9B, 0xB3, 0x7C, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE4, 0x00, 0xA6, 0x87, 0x41, 0xE2, 0x0A, 0x7E, 0xC9, 0x7C, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE4, 0x80, 0x9A, 0xB8, 0x48, 0xE2, 0x00, 0x9E, 0xF9, 0x60, 0x09, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE2, 0x80, 0x8E, 0x64, 0x68, 0xE2, 0x28, 0x6F, 0x73, 0x7C, 0x01, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
+	{ 0xB4, 0x26, 0x6E, 0x98, 0x01, 0x62, 0x00, 0x7D, 0xC8, 0x7D, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE2, 0x2E, 0x20, 0xD9, 0x01, 0xF2, 0x0F, 0x90, 0xF8, 0x78, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE4, 0x28, 0x7E, 0xF8, 0x01, 0xE2, 0x23, 0x8E, 0xE8, 0x7D, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xB8, 0x28, 0x9E, 0x98, 0x01, 0x62, 0x00, 0x3D, 0xC8, 0x7D, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x62, 0x00, 0x8E, 0xC9, 0x3D, 0xE6, 0x00, 0x7E, 0xD8, 0x68, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE2, 0x00, 0x5F, 0xF9, 0x48, 0xE6, 0x98, 0x8F, 0xF8, 0x7D, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x62, 0x0C, 0x6E, 0xD8, 0x3D, 0x2A, 0x06, 0x7D, 0xD8, 0x58, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE4, 0x00, 0x7E, 0x89, 0x38, 0xE6, 0x84, 0x80, 0xF8, 0x68, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE4, 0x80, 0x6C, 0xD9, 0x30, 0xE2, 0x00, 0x8D, 0xC8, 0x7C, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE2, 0x80, 0x88, 0x48, 0x40, 0xE2, 0x0A, 0x7D, 0xA8, 0x7C, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE4, 0x00, 0x77, 0xC5, 0x54, 0xE2, 0x00, 0x9E, 0xD7, 0x70, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE4, 0x80, 0x86, 0xB9, 0x64, 0xE2, 0x05, 0x9F, 0xD7, 0x78, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE2, 0x00, 0x68, 0x68, 0x56, 0xE2, 0x08, 0x9B, 0xB3, 0x7C, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE4, 0x00, 0xA6, 0x87, 0x41, 0xE2, 0x0A, 0x7E, 0xC9, 0x7C, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE4, 0x80, 0x9A, 0xB8, 0x48, 0xE2, 0x00, 0x9E, 0xF9, 0x60, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE2, 0x80, 0x8E, 0x64, 0x68, 0xE2, 0x28, 0x6F, 0x73, 0x7C, 0x01, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
 	// 0x50
-{ 0xE8, 0x00, 0x7D, 0x99, 0x54, 0xE6, 0x80, 0x80, 0xF8, 0x7C, 0x0C, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE6, 0x00, 0x9F, 0xB9, 0x6D, 0xE1, 0x00, 0x8F, 0xC8, 0x7D, 0x02, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE4, 0x00, 0x09, 0x68, 0x4A, 0xE2, 0x2B, 0x9E, 0xF3, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xC4, 0x00, 0x99, 0xE8, 0x3B, 0xE2, 0x25, 0x6F, 0x93, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE6, 0x00, 0x6F, 0xDA, 0x69, 0xE2, 0x05, 0x2F, 0xD8, 0x6A, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xEC, 0x60, 0x9D, 0xC7, 0x00, 0xE2, 0x21, 0x7F, 0xC9, 0x7C, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE3, 0x00, 0x0F, 0xF7, 0x7D, 0xE1, 0x3F, 0x0F, 0xA7, 0x01, 0x0D, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE4, 0xA9, 0x0F, 0xA8, 0x02, 0xE2, 0x3C, 0x5F, 0xDA, 0x3C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE8, 0x40, 0x0D, 0x89, 0x7D, 0xE2, 0x17, 0x7E, 0xD9, 0x7C, 0x07, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE1, 0x00, 0xDF, 0x8A, 0x56, 0xE2, 0x5E, 0xCF, 0xBA, 0x7E, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE2, 0x00, 0x0B, 0x68, 0x60, 0xE2, 0x01, 0x9E, 0xB8, 0x7C, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xEA, 0x00, 0xAE, 0xAB, 0x49, 0xE2, 0x00, 0xAE, 0xBA, 0x6C, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xEB, 0x80, 0x8C, 0xCB, 0x3A, 0xE2, 0x86, 0xAF, 0xCA, 0x7C, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE5, 0x40, 0xDB, 0x3B, 0x3C, 0xE2, 0x80, 0xBE, 0xCA, 0x71, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE4, 0x00, 0x9E, 0xAA, 0x3D, 0xE1, 0x43, 0x0F, 0xBA, 0x7E, 0x04, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE7, 0x40, 0xEC, 0xCA, 0x44, 0xE2, 0x03, 0xBF, 0xBA, 0x66, 0x02, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
+	{ 0xE8, 0x00, 0x7D, 0x99, 0x54, 0xE6, 0x80, 0x80, 0xF8, 0x7C, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE6, 0x00, 0x9F, 0xB9, 0x6D, 0xE1, 0x00, 0x8F, 0xC8, 0x7D, 0x02, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE4, 0x00, 0x09, 0x68, 0x4A, 0xE2, 0x2B, 0x9E, 0xF3, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xC4, 0x00, 0x99, 0xE8, 0x3B, 0xE2, 0x25, 0x6F, 0x93, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE6, 0x00, 0x6F, 0xDA, 0x69, 0xE2, 0x05, 0x2F, 0xD8, 0x6A, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xEC, 0x60, 0x9D, 0xC7, 0x00, 0xE2, 0x21, 0x7F, 0xC9, 0x7C, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE3, 0x00, 0x0F, 0xF7, 0x7D, 0xE1, 0x3F, 0x0F, 0xA7, 0x01, 0x0D, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE4, 0xA9, 0x0F, 0xA8, 0x02, 0xE2, 0x3C, 0x5F, 0xDA, 0x3C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE8, 0x40, 0x0D, 0x89, 0x7D, 0xE2, 0x17, 0x7E, 0xD9, 0x7C, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE1, 0x00, 0xDF, 0x8A, 0x56, 0xE2, 0x5E, 0xCF, 0xBA, 0x7E, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE2, 0x00, 0x0B, 0x68, 0x60, 0xE2, 0x01, 0x9E, 0xB8, 0x7C, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xEA, 0x00, 0xAE, 0xAB, 0x49, 0xE2, 0x00, 0xAE, 0xBA, 0x6C, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xEB, 0x80, 0x8C, 0xCB, 0x3A, 0xE2, 0x86, 0xAF, 0xCA, 0x7C, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE5, 0x40, 0xDB, 0x3B, 0x3C, 0xE2, 0x80, 0xBE, 0xCA, 0x71, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE4, 0x00, 0x9E, 0xAA, 0x3D, 0xE1, 0x43, 0x0F, 0xBA, 0x7E, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE7, 0x40, 0xEC, 0xCA, 0x44, 0xE2, 0x03, 0xBF, 0xBA, 0x66, 0x02, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
 	// 0x60
-{ 0xEA, 0x00, 0x68, 0xB8, 0x48, 0xE2, 0x0A, 0x8E, 0xB8, 0x7C, 0x0C, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x61, 0x00, 0xBE, 0x99, 0x7E, 0xE3, 0x40, 0xCF, 0xCA, 0x7D, 0x09, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xCD, 0x00, 0x0B, 0x00, 0x48, 0xC2, 0x58, 0x0C, 0x00, 0x7C, 0x0C, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x1C },
-{ 0xE2, 0x00, 0x0E, 0x00, 0x52, 0xE2, 0x58, 0x5F, 0xD0, 0x7D, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xCC, 0x00, 0x7D, 0xDA, 0x40, 0xC2, 0x00, 0x5E, 0x9B, 0x58, 0x0C, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE9, 0xC0, 0xEE, 0xD8, 0x43, 0xE2, 0x05, 0xDD, 0xAA, 0x70, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xDA, 0x00, 0x8F, 0xAC, 0x4A, 0x22, 0x05, 0x8D, 0x8A, 0x75, 0x02, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x62, 0x8A, 0xCB, 0x7A, 0x74, 0xE6, 0x56, 0xAF, 0xDB, 0x70, 0x02, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xC2, 0x41, 0xAC, 0x5B, 0x5B, 0xC2, 0x80, 0x0D, 0xCB, 0x7D, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x12 },
-{ 0x75, 0x00, 0x0E, 0xCB, 0x5A, 0xE2, 0x1E, 0x0A, 0xC9, 0x7D, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x10 },
-{ 0x41, 0x00, 0x0E, 0xEA, 0x53, 0xC2, 0x00, 0x08, 0xCA, 0x7C, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x07 },
-{ 0xC1, 0x40, 0x0C, 0x59, 0x6A, 0xC2, 0x80, 0x3C, 0xAB, 0x7C, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x0D },
-{ 0x4B, 0x00, 0x0A, 0xF5, 0x61, 0xC2, 0x19, 0x0C, 0xE9, 0x7C, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x07 },
-{ 0x62, 0x00, 0x7F, 0xD8, 0x54, 0xEA, 0x00, 0x8F, 0xD8, 0x7D, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE1, 0x00, 0x7F, 0xD9, 0x56, 0xE1, 0x00, 0x8F, 0xD8, 0x7E, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0xE1, 0x00, 0x7F, 0xD9, 0x56, 0xE1, 0x00, 0x8F, 0xD8, 0x7E, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
+	{ 0xEA, 0x00, 0x68, 0xB8, 0x48, 0xE2, 0x0A, 0x8E, 0xB8, 0x7C, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x61, 0x00, 0xBE, 0x99, 0x7E, 0xE3, 0x40, 0xCF, 0xCA, 0x7D, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xCD, 0x00, 0x0B, 0x00, 0x48, 0xC2, 0x58, 0x0C, 0x00, 0x7C, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x1C },
+	{ 0xE2, 0x00, 0x0E, 0x00, 0x52, 0xE2, 0x58, 0x5F, 0xD0, 0x7D, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xCC, 0x00, 0x7D, 0xDA, 0x40, 0xC2, 0x00, 0x5E, 0x9B, 0x58, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE9, 0xC0, 0xEE, 0xD8, 0x43, 0xE2, 0x05, 0xDD, 0xAA, 0x70, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xDA, 0x00, 0x8F, 0xAC, 0x4A, 0x22, 0x05, 0x8D, 0x8A, 0x75, 0x02, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x62, 0x8A, 0xCB, 0x7A, 0x74, 0xE6, 0x56, 0xAF, 0xDB, 0x70, 0x02, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xC2, 0x41, 0xAC, 0x5B, 0x5B, 0xC2, 0x80, 0x0D, 0xCB, 0x7D, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x12 },
+	{ 0x75, 0x00, 0x0E, 0xCB, 0x5A, 0xE2, 0x1E, 0x0A, 0xC9, 0x7D, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x10 },
+	{ 0x41, 0x00, 0x0E, 0xEA, 0x53, 0xC2, 0x00, 0x08, 0xCA, 0x7C, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x07 },
+	{ 0xC1, 0x40, 0x0C, 0x59, 0x6A, 0xC2, 0x80, 0x3C, 0xAB, 0x7C, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0D },
+	{ 0x4B, 0x00, 0x0A, 0xF5, 0x61, 0xC2, 0x19, 0x0C, 0xE9, 0x7C, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x07 },
+	{ 0x62, 0x00, 0x7F, 0xD8, 0x54, 0xEA, 0x00, 0x8F, 0xD8, 0x7D, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE1, 0x00, 0x7F, 0xD9, 0x56, 0xE1, 0x00, 0x8F, 0xD8, 0x7E, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0xE1, 0x00, 0x7F, 0xD9, 0x56, 0xE1, 0x00, 0x8F, 0xD8, 0x7E, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
 	// 0x70
-{ 0xCF, 0x40, 0x09, 0xEA, 0x54, 0xC4, 0x00, 0x0C, 0xDB, 0x64, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0xCF, 0x40, 0x0C, 0xAA, 0x54, 0xC4, 0x00, 0x18, 0xF9, 0x64, 0x0C, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0xC9, 0x0E, 0x88, 0xD9, 0x3E, 0xC2, 0x08, 0x1A, 0xEA, 0x6C, 0x0C, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x05 },
-{ 0x03, 0x00, 0x15, 0x00, 0x64, 0x02, 0x00, 0x08, 0x00, 0x7C, 0x09, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0x01, 0x00, 0x47, 0xD7, 0x6C, 0x01, 0x3F, 0x0C, 0xFB, 0x7C, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x04 },
-{ 0x00, 0x00, 0x36, 0x67, 0x7C, 0x01, 0x3F, 0x0E, 0xFA, 0x7C, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x05 },
-{ 0x02, 0x00, 0x36, 0x68, 0x7C, 0x01, 0x3F, 0x0E, 0xFA, 0x7C, 0x00, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x05 },
-{ 0xCB, 0x00, 0xAF, 0x00, 0x7E, 0xC0, 0x00, 0xC0, 0x06, 0x7F, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x0F },
-{ 0x05, 0x0D, 0x80, 0xA6, 0x7F, 0x0B, 0x38, 0xA9, 0xD8, 0x00, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x04 },
-{ 0x0F, 0x00, 0x90, 0xFA, 0x68, 0x06, 0x00, 0xA7, 0x39, 0x54, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x06 },
-{ 0xC9, 0x15, 0xDD, 0xFF, 0x7C, 0x00, 0x00, 0xE7, 0xFC, 0x6C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x38 },
-{ 0x48, 0x3C, 0x30, 0xF6, 0x03, 0x0A, 0x38, 0x97, 0xE8, 0x00, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x04 },
-{ 0x07, 0x80, 0x0B, 0xC8, 0x65, 0x02, 0x3F, 0x0C, 0xEA, 0x7C, 0x0F, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x05 },
-{ 0x00, 0x21, 0x66, 0x40, 0x03, 0x00, 0x3F, 0x47, 0x00, 0x00, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0x08, 0x00, 0x0B, 0x3C, 0x7C, 0x08, 0x3F, 0x06, 0xF3, 0x00, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0x00, 0x3F, 0x4C, 0xFB, 0x00, 0x00, 0x3F, 0x0A, 0xE9, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x05 }
+	{ 0xCF, 0x40, 0x09, 0xEA, 0x54, 0xC4, 0x00, 0x0C, 0xDB, 0x64, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0xCF, 0x40, 0x0C, 0xAA, 0x54, 0xC4, 0x00, 0x18, 0xF9, 0x64, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0xC9, 0x0E, 0x88, 0xD9, 0x3E, 0xC2, 0x08, 0x1A, 0xEA, 0x6C, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	{ 0x03, 0x00, 0x15, 0x00, 0x64, 0x02, 0x00, 0x08, 0x00, 0x7C, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0x01, 0x00, 0x47, 0xD7, 0x6C, 0x01, 0x3F, 0x0C, 0xFB, 0x7C, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 },
+	{ 0x00, 0x00, 0x36, 0x67, 0x7C, 0x01, 0x3F, 0x0E, 0xFA, 0x7C, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	{ 0x02, 0x00, 0x36, 0x68, 0x7C, 0x01, 0x3F, 0x0E, 0xFA, 0x7C, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	{ 0xCB, 0x00, 0xAF, 0x00, 0x7E, 0xC0, 0x00, 0xC0, 0x06, 0x7F, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0F },
+	{ 0x05, 0x0D, 0x80, 0xA6, 0x7F, 0x0B, 0x38, 0xA9, 0xD8, 0x00, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 },
+	{ 0x0F, 0x00, 0x90, 0xFA, 0x68, 0x06, 0x00, 0xA7, 0x39, 0x54, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x06 },
+	{ 0xC9, 0x15, 0xDD, 0xFF, 0x7C, 0x00, 0x00, 0xE7, 0xFC, 0x6C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x38 },
+	{ 0x48, 0x3C, 0x30, 0xF6, 0x03, 0x0A, 0x38, 0x97, 0xE8, 0x00, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 },
+	{ 0x07, 0x80, 0x0B, 0xC8, 0x65, 0x02, 0x3F, 0x0C, 0xEA, 0x7C, 0x0F, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	{ 0x00, 0x21, 0x66, 0x40, 0x03, 0x00, 0x3F, 0x47, 0x00, 0x00, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0x08, 0x00, 0x0B, 0x3C, 0x7C, 0x08, 0x3F, 0x06, 0xF3, 0x00, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0x00, 0x3F, 0x4C, 0xFB, 0x00, 0x00, 0x3F, 0x0A, 0xE9, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 }
 };
 
 static AdLibInstrument g_gmPercussionInstruments[39] = {
-{ 0x1A, 0x3F, 0x15, 0x05, 0x7C, 0x02, 0x21, 0x2B, 0xE4, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x06 },
-{ 0x11, 0x12, 0x04, 0x07, 0x7C, 0x02, 0x23, 0x0B, 0xE5, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x05 },
-{ 0x0A, 0x3F, 0x0B, 0x01, 0x7C, 0x1F, 0x1C, 0x46, 0xD0, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x01 },
-{ 0x00, 0x3F, 0x0F, 0x00, 0x7C, 0x10, 0x12, 0x07, 0x00, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0x0F, 0x3F, 0x0B, 0x00, 0x7C, 0x1F, 0x0F, 0x19, 0xD0, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0x00, 0x3F, 0x1F, 0x00, 0x7E, 0x1F, 0x16, 0x07, 0x00, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x03 },
-{ 0x12, 0x3F, 0x05, 0x06, 0x7C, 0x03, 0x1F, 0x4A, 0xD9, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x03 },
-{ 0xCF, 0x7F, 0x08, 0xFF, 0x7E, 0x00, 0xC7, 0x2D, 0xF7, 0x73, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0x12, 0x3F, 0x05, 0x06, 0x7C, 0x43, 0x21, 0x0C, 0xE9, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x03 },
-{ 0xCF, 0x7F, 0x08, 0xCF, 0x7E, 0x00, 0x45, 0x2A, 0xF8, 0x4B, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x0C },
-{ 0x12, 0x3F, 0x06, 0x17, 0x7C, 0x03, 0x27, 0x0B, 0xE9, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x03 },
-{ 0xCF, 0x7F, 0x08, 0xCD, 0x7E, 0x00, 0x40, 0x1A, 0x69, 0x63, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x0C },
-{ 0x13, 0x3F, 0x05, 0x06, 0x7C, 0x03, 0x17, 0x0A, 0xD9, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x03 },
-{ 0x15, 0x3F, 0x05, 0x06, 0x7C, 0x03, 0x21, 0x0C, 0xE9, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x03 },
-{ 0xCF, 0x3F, 0x2B, 0xFB, 0x7E, 0xC0, 0x1E, 0x1A, 0xCA, 0x7F, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x10 },
-{ 0x17, 0x3F, 0x04, 0x09, 0x7C, 0x03, 0x22, 0x0D, 0xE9, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x03 },
-{ 0xCF, 0x3F, 0x0F, 0x5E, 0x7C, 0xC6, 0x13, 0x00, 0xCA, 0x7F, 0x04, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x03 },
-{ 0xCF, 0x3F, 0x7E, 0x9D, 0x7C, 0xC8, 0xC0, 0x0A, 0xBA, 0x74, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x06 },
-{ 0xCF, 0x3F, 0x4D, 0x9F, 0x7C, 0xC6, 0x00, 0x08, 0xDA, 0x5B, 0x04, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x04 },
-{ 0xCF, 0x3F, 0x5D, 0xAA, 0x7A, 0xC0, 0xA4, 0x67, 0x99, 0x7C, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0xCF, 0x3F, 0x4A, 0xFD, 0x7C, 0xCF, 0x00, 0x59, 0xEA, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0x0F, 0x18, 0x0A, 0xFA, 0x57, 0x06, 0x07, 0x06, 0x39, 0x7C, 0x0A, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0xCF, 0x3F, 0x2B, 0xFC, 0x7C, 0xCC, 0xC6, 0x0B, 0xEA, 0x7F, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x10 },
-{ 0x05, 0x1A, 0x04, 0x00, 0x7C, 0x12, 0x10, 0x0C, 0xEA, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x07 },
-{ 0x04, 0x19, 0x04, 0x00, 0x7C, 0x12, 0x10, 0x2C, 0xEA, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x04 },
-{ 0x04, 0x0A, 0x04, 0x00, 0x6C, 0x01, 0x07, 0x0D, 0xFA, 0x74, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x07 },
-{ 0x15, 0x14, 0x05, 0x00, 0x7D, 0x01, 0x07, 0x5C, 0xE9, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x05 },
-{ 0x10, 0x10, 0x05, 0x08, 0x7C, 0x01, 0x08, 0x0D, 0xEA, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x05 },
-{ 0x11, 0x00, 0x06, 0x87, 0x7F, 0x02, 0x40, 0x09, 0x59, 0x68, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x08 },
-{ 0x13, 0x26, 0x04, 0x6A, 0x7F, 0x01, 0x00, 0x08, 0x5A, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x08 },
-{ 0xCF, 0x4E, 0x0C, 0xAA, 0x50, 0xC4, 0x00, 0x18, 0xF9, 0x54, 0x04, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0xCF, 0x4E, 0x0C, 0xAA, 0x50, 0xC3, 0x00, 0x18, 0xF8, 0x54, 0x04, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0xCB, 0x3F, 0x8F, 0x00, 0x7E, 0xC5, 0x00, 0x98, 0xD6, 0x5F, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x0D },
-{ 0x0C, 0x18, 0x87, 0xB3, 0x7F, 0x19, 0x10, 0x55, 0x75, 0x7C, 0x0E, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0x05, 0x11, 0x15, 0x00, 0x64, 0x02, 0x08, 0x08, 0x00, 0x5C, 0x09, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0x04, 0x08, 0x15, 0x00, 0x48, 0x01, 0x08, 0x08, 0x00, 0x60, 0x08, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x02 },
-{ 0xDA, 0x00, 0x53, 0x30, 0x68, 0x07, 0x1E, 0x49, 0xC4, 0x7E, 0x03, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 },
-{ 0x1C, 0x00, 0x07, 0xBC, 0x6C, 0x0C, 0x14, 0x0B, 0x6A, 0x7E, 0x0B, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x03 },
-{ 0x0A, 0x0E, 0x7F, 0x00, 0x7D, 0x13, 0x20, 0x28, 0x03, 0x7C, 0x06, 0, { 0,0,0,0,0,0,0,0 }, 0, { 0,0,0,0,0,0,0,0 }, 0x00 }
+	{ 0x1A, 0x3F, 0x15, 0x05, 0x7C, 0x02, 0x21, 0x2B, 0xE4, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x06 },
+	{ 0x11, 0x12, 0x04, 0x07, 0x7C, 0x02, 0x23, 0x0B, 0xE5, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	{ 0x0A, 0x3F, 0x0B, 0x01, 0x7C, 0x1F, 0x1C, 0x46, 0xD0, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x01 },
+	{ 0x00, 0x3F, 0x0F, 0x00, 0x7C, 0x10, 0x12, 0x07, 0x00, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0x0F, 0x3F, 0x0B, 0x00, 0x7C, 0x1F, 0x0F, 0x19, 0xD0, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0x00, 0x3F, 0x1F, 0x00, 0x7E, 0x1F, 0x16, 0x07, 0x00, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	{ 0x12, 0x3F, 0x05, 0x06, 0x7C, 0x03, 0x1F, 0x4A, 0xD9, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	{ 0xCF, 0x7F, 0x08, 0xFF, 0x7E, 0x00, 0xC7, 0x2D, 0xF7, 0x73, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0x12, 0x3F, 0x05, 0x06, 0x7C, 0x43, 0x21, 0x0C, 0xE9, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	{ 0xCF, 0x7F, 0x08, 0xCF, 0x7E, 0x00, 0x45, 0x2A, 0xF8, 0x4B, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0C },
+	{ 0x12, 0x3F, 0x06, 0x17, 0x7C, 0x03, 0x27, 0x0B, 0xE9, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	{ 0xCF, 0x7F, 0x08, 0xCD, 0x7E, 0x00, 0x40, 0x1A, 0x69, 0x63, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0C },
+	{ 0x13, 0x3F, 0x05, 0x06, 0x7C, 0x03, 0x17, 0x0A, 0xD9, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	{ 0x15, 0x3F, 0x05, 0x06, 0x7C, 0x03, 0x21, 0x0C, 0xE9, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	{ 0xCF, 0x3F, 0x2B, 0xFB, 0x7E, 0xC0, 0x1E, 0x1A, 0xCA, 0x7F, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x10 },
+	{ 0x17, 0x3F, 0x04, 0x09, 0x7C, 0x03, 0x22, 0x0D, 0xE9, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	{ 0xCF, 0x3F, 0x0F, 0x5E, 0x7C, 0xC6, 0x13, 0x00, 0xCA, 0x7F, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	{ 0xCF, 0x3F, 0x7E, 0x9D, 0x7C, 0xC8, 0xC0, 0x0A, 0xBA, 0x74, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x06 },
+	{ 0xCF, 0x3F, 0x4D, 0x9F, 0x7C, 0xC6, 0x00, 0x08, 0xDA, 0x5B, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 },
+	{ 0xCF, 0x3F, 0x5D, 0xAA, 0x7A, 0xC0, 0xA4, 0x67, 0x99, 0x7C, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0xCF, 0x3F, 0x4A, 0xFD, 0x7C, 0xCF, 0x00, 0x59, 0xEA, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0x0F, 0x18, 0x0A, 0xFA, 0x57, 0x06, 0x07, 0x06, 0x39, 0x7C, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0xCF, 0x3F, 0x2B, 0xFC, 0x7C, 0xCC, 0xC6, 0x0B, 0xEA, 0x7F, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x10 },
+	{ 0x05, 0x1A, 0x04, 0x00, 0x7C, 0x12, 0x10, 0x0C, 0xEA, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x07 },
+	{ 0x04, 0x19, 0x04, 0x00, 0x7C, 0x12, 0x10, 0x2C, 0xEA, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 },
+	{ 0x04, 0x0A, 0x04, 0x00, 0x6C, 0x01, 0x07, 0x0D, 0xFA, 0x74, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x07 },
+	{ 0x15, 0x14, 0x05, 0x00, 0x7D, 0x01, 0x07, 0x5C, 0xE9, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	{ 0x10, 0x10, 0x05, 0x08, 0x7C, 0x01, 0x08, 0x0D, 0xEA, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	{ 0x11, 0x00, 0x06, 0x87, 0x7F, 0x02, 0x40, 0x09, 0x59, 0x68, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x08 },
+	{ 0x13, 0x26, 0x04, 0x6A, 0x7F, 0x01, 0x00, 0x08, 0x5A, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x08 },
+	{ 0xCF, 0x4E, 0x0C, 0xAA, 0x50, 0xC4, 0x00, 0x18, 0xF9, 0x54, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0xCF, 0x4E, 0x0C, 0xAA, 0x50, 0xC3, 0x00, 0x18, 0xF8, 0x54, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0xCB, 0x3F, 0x8F, 0x00, 0x7E, 0xC5, 0x00, 0x98, 0xD6, 0x5F, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0D },
+	{ 0x0C, 0x18, 0x87, 0xB3, 0x7F, 0x19, 0x10, 0x55, 0x75, 0x7C, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0x05, 0x11, 0x15, 0x00, 0x64, 0x02, 0x08, 0x08, 0x00, 0x5C, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0x04, 0x08, 0x15, 0x00, 0x48, 0x01, 0x08, 0x08, 0x00, 0x60, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	{ 0xDA, 0x00, 0x53, 0x30, 0x68, 0x07, 0x1E, 0x49, 0xC4, 0x7E, 0x03, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	{ 0x1C, 0x00, 0x07, 0xBC, 0x6C, 0x0C, 0x14, 0x0B, 0x6A, 0x7E, 0x0B, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	{ 0x0A, 0x0E, 0x7F, 0x00, 0x7D, 0x13, 0x20, 0x28, 0x03, 0x7C, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 }
 };
 
 static const byte g_gmPercussionInstrumentMap[128] = {
@@ -588,7 +588,7 @@ public:
 	int getRate() const { return _mixer->getOutputRate(); }
 
 private:
-	bool _scummSmallHeader;	// FIXME: This flag controls a special mode for SCUMM V3 games
+	bool _scummSmallHeader; // FIXME: This flag controls a special mode for SCUMM V3 games
 
 	FM_OPL *_opl;
 	byte *_adlib_reg_cache;
@@ -629,7 +629,7 @@ private:
 	static void link_mc(AdLibPart *part, AdLibVoice *voice);
 	void mc_inc_stuff(AdLibVoice *voice, Struct10 *s10, Struct11 *s11);
 	void mc_init_stuff(AdLibVoice *voice, Struct10 *s10, Struct11 *s11, byte flags,
-						InstrumentExtra *ie);
+					   InstrumentExtra *ie);
 
 	void struct10_init(Struct10 *s10, InstrumentExtra *ie);
 	static byte struct10_ontimer(Struct10 *s10, Struct11 *s11);
@@ -673,14 +673,14 @@ void AdLibPart::programChange(byte program) {
 	if (program > 127)
 		return;
 
-/*
+	/*
 	uint i;
 	uint count = 0;
 	for (i = 0; i < ARRAYSIZE(g_gmInstruments[0]); ++i)
 		count += g_gmInstruments[program][i];
 	if (!count)
 		warning("No AdLib instrument defined for GM program %d", (int)program);
-*/
+	*/
 	_program = program;
 	memcpy(&_part_instr, &g_gmInstruments[program], sizeof(AdLibInstrument));
 }
@@ -691,7 +691,7 @@ void AdLibPart::pitchBend(int16 bend) {
 	_pitchbend = bend;
 	for (voice = _voice; voice; voice = voice->_next) {
 		_owner->adlib_note_on(voice->_channel, voice->_note + _transpose_eff,
-						(_pitchbend * _pitchbend_factor >> 6) + _detune_eff);
+							  (_pitchbend * _pitchbend_factor >> 6) + _detune_eff);
 	}
 }
 
@@ -699,26 +699,50 @@ void AdLibPart::controlChange(byte control, byte value) {
 	switch (control) {
 	case 0:
 	case 32:
-		break; // Bank select. Not supported
-	case 1:   modulationWheel(value); break;
-	case 7:   volume(value); break;
-	case 10:  break; // Pan position. Not supported.
-	case 16:  pitchBendFactor(value); break;
-	case 17:  detune(value); break;
-	case 18:  priority(value); break;
-	case 64:  sustain(value > 0); break;
-	case 91:  break; // Effects level. Not supported.
-	case 93:  break; // Chorus level. Not supported.
-	case 119: break; // Unknown, used in Simon the Sorcerer 2
-	case 121: // reset all controllers
+		// Bank select. Not supported
+		break;
+	case 1:
+		modulationWheel(value);
+		break;
+	case 7:
+		volume(value);
+		break;
+	case 10:
+		// Pan position. Not supported.
+		break;
+	case 16:
+		pitchBendFactor(value);
+		break;
+	case 17:
+		detune(value);
+		break;
+	case 18:
+		priority(value);
+		break;
+	case 64:
+		sustain(value > 0);
+		break;
+	case 91:
+		// Effects level. Not supported.
+		break;
+	case 93:
+		// Chorus level. Not supported.
+		break;
+	case 119:
+		// Unknown, used in Simon the Sorcerer 2
+		break;
+	case 121:
+		// reset all controllers
 		modulationWheel(0);
 		pitchBendFactor(0);
 		detune(0);
 		sustain(0);
 		break;
-	case 123: allNotesOff(); break;
+	case 123:
+		allNotesOff();
+		break;
 	default:
-		warning("AdLib: Unknown control change message %d (%d)", (int) control, (int)value);
+		warning("AdLib: Unknown control change message %d (%d)", (int)control, (int)value);
 	}
 }
 
@@ -752,7 +776,7 @@ void AdLibPart::pitchBendFactor(byte value) {
 	_pitchbend_factor = value;
 	for (voice = _voice; voice; voice = voice->_next) {
 		_owner->adlib_note_on(voice->_channel, voice->_note + _transpose_eff,
-							(_pitchbend * _pitchbend_factor >> 6) + _detune_eff);
+							  (_pitchbend * _pitchbend_factor >> 6) + _detune_eff);
 	}
 }
 
@@ -762,7 +786,7 @@ void AdLibPart::detune(byte value) {
 	_detune_eff = value;
 	for (voice = _voice; voice; voice = voice->_next) {
 		_owner->adlib_note_on(voice->_channel, voice->_note + _transpose_eff,
-						(_pitchbend * _pitchbend_factor >> 6) + _detune_eff);
+							  (_pitchbend * _pitchbend_factor >> 6) + _detune_eff);
 	}
 }
 
@@ -821,9 +845,9 @@ void AdLibPercussionChannel::noteOff(byte note) {
 	// anyway, we know that "hanging" percussion sounds will
 	// not prevent later musical instruments (or even other
 	// percussion sounds) from playing.
-/*
-	_owner->part_key_off(this, note);
-*/
+	/*
+	 _owner->part_key_off(this, note);
+	*/
 }
 
 void AdLibPercussionChannel::noteOn(byte note, byte velocity) {
@@ -954,9 +978,9 @@ void MidiDriver_ADLIB::send(uint32 b) {
 
 void MidiDriver_ADLIB::send(byte chan, uint32 b) {
 	//byte param3 = (byte) ((b >> 24) & 0xFF);
-	byte param2 = (byte) ((b >> 16) & 0xFF);
-	byte param1 = (byte) ((b >>  8) & 0xFF);
-	byte cmd    = (byte) (b & 0xF0);
+	byte param2 = (byte)((b >> 16) & 0xFF);
+	byte param1 = (byte)((b >>  8) & 0xFF);
+	byte cmd    = (byte)(b & 0xF0);
 
 	AdLibPart *part;
 	if (chan == 9)
@@ -997,16 +1021,16 @@ void MidiDriver_ADLIB::send(byte chan, uint32 b) {
 
 uint32 MidiDriver_ADLIB::property(int prop, uint32 param) {
 	switch (prop) {
-		case PROP_OLD_ADLIB: // Older games used a different operator volume algorithm
-			_scummSmallHeader = (param > 0);
-			if (_scummSmallHeader) {
-				_timer_p = 473;
-				_timer_q = 1000;
-			} else {
-				_timer_p = 0xD69;
-				_timer_q = 0x411B;
-			}
-			return 1;
+	case PROP_OLD_ADLIB: // Older games used a different operator volume algorithm
+		_scummSmallHeader = (param > 0);
+		if (_scummSmallHeader) {
+			_timer_p = 473;
+			_timer_q = 1000;
+		} else {
+			_timer_p = 0xD69;
+			_timer_q = 0x411B;
+		}
+		return 1;
 	}
 
 	return 0;
@@ -1019,7 +1043,7 @@ void MidiDriver_ADLIB::setPitchBendRange(byte channel, uint range) {
 	part->_pitchbend_factor = range;
 	for (voice = part->_voice; voice; voice = voice->_next) {
 		adlib_note_on(voice->_channel, voice->_note + part->_transpose_eff,
-					(part->_pitchbend * part->_pitchbend_factor >> 6) + part->_detune_eff);
+					  (part->_pitchbend * part->_pitchbend_factor >> 6) + part->_detune_eff);
 	}
 }
 
@@ -1115,8 +1139,8 @@ void MidiDriver_ADLIB::mc_inc_stuff(AdLibVoice *voice, Struct10 *s10, Struct11 *
 			voice->_vol_2 = s10->start_value + s11->modify_val;
 			if (!_scummSmallHeader) {
 				adlib_set_param(voice->_channel, 0,
-												g_volumeTable[g_volumeLookupTable[voice->_vol_2]
-																		 [part->_vol_eff >> 2]]);
+								g_volumeTable[g_volumeLookupTable[voice->_vol_2]
+											  [part->_vol_eff >> 2]]);
 			} else {
 				adlib_set_param(voice->_channel, 0, voice->_vol_2);
 			}
@@ -1125,8 +1149,8 @@ void MidiDriver_ADLIB::mc_inc_stuff(AdLibVoice *voice, Struct10 *s10, Struct11 *
 			voice->_vol_1 = s10->start_value + s11->modify_val;
 			if (voice->_twochan && !_scummSmallHeader) {
 				adlib_set_param(voice->_channel, 13,
-												g_volumeTable[g_volumeLookupTable[voice->_vol_1]
-												[part->_vol_eff >> 2]]);
+								g_volumeTable[g_volumeLookupTable[voice->_vol_1]
+											  [part->_vol_eff >> 2]]);
 			} else {
 				adlib_set_param(voice->_channel, 13, voice->_vol_1);
 			}
@@ -1148,7 +1172,7 @@ void MidiDriver_ADLIB::mc_inc_stuff(AdLibVoice *voice, Struct10 *s10, Struct11 *
 		adlib_key_onoff(voice->_channel);
 }
 
-void MidiDriver_ADLIB::adlib_key_off(int chan){
+void MidiDriver_ADLIB::adlib_key_off(int chan) {
 	byte reg = chan + 0xB0;
 	adlib_write(reg, adlib_get_reg_value(reg) & ~0x20);
 }
@@ -1456,14 +1480,14 @@ void MidiDriver_ADLIB::adlib_setup_channel(int chan, AdLibInstrument *instr, byt
 
 	channel = g_operator1Offsets[chan];
 	adlib_write(channel + 0x20, instr->mod_characteristic);
-	adlib_write(channel + 0x40, (instr->mod_scalingOutputLevel | 0x3F) - vol_1 );
+	adlib_write(channel + 0x40, (instr->mod_scalingOutputLevel | 0x3F) - vol_1);
 	adlib_write(channel + 0x60, 0xff & (~instr->mod_attackDecay));
 	adlib_write(channel + 0x80, 0xff & (~instr->mod_sustainRelease));
 	adlib_write(channel + 0xE0, instr->mod_waveformSelect);
 
 	channel = g_operator2Offsets[chan];
 	adlib_write(channel + 0x20, instr->car_characteristic);
-	adlib_write(channel + 0x40, (instr->car_scalingOutputLevel | 0x3F) - vol_2 );
+	adlib_write(channel + 0x40, (instr->car_scalingOutputLevel | 0x3F) - vol_2);
 	adlib_write(channel + 0x60, 0xff & (~instr->car_attackDecay));
 	adlib_write(channel + 0x80, 0xff & (~instr->car_sustainRelease));
 	adlib_write(channel + 0xE0, instr->car_waveformSelect);
@@ -1481,7 +1505,7 @@ void MidiDriver_ADLIB::adlib_note_on_ex(int chan, byte note, int mod) {
 }
 
 void MidiDriver_ADLIB::mc_init_stuff(AdLibVoice *voice, Struct10 *s10,
-									Struct11 *s11, byte flags, InstrumentExtra *ie) {
+									 Struct11 *s11, byte flags, InstrumentExtra *ie) {
 	AdLibPart *part = voice->_part;
 	s11->modify_val = 0;
 	s11->flag0x40 = flags & 0x40;


Commit: 2d01b7de4355611792b6f3704b2ab81840a3c3b3
    https://github.com/scummvm/scummvm/commit/2d01b7de4355611792b6f3704b2ab81840a3c3b3
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-09-30T12:13:05-07:00

Commit Message:
AUDIO: Enforce variable naming guidelines in adlib.cpp.

Changed paths:
    audio/softsynth/adlib.cpp



diff --git a/audio/softsynth/adlib.cpp b/audio/softsynth/adlib.cpp
index 2c6668e..bf13ad1 100644
--- a/audio/softsynth/adlib.cpp
+++ b/audio/softsynth/adlib.cpp
@@ -52,21 +52,21 @@ struct InstrumentExtra {
 } PACKED_STRUCT;
 
 struct AdLibInstrument {
-	byte mod_characteristic;
-	byte mod_scalingOutputLevel;
-	byte mod_attackDecay;
-	byte mod_sustainRelease;
-	byte mod_waveformSelect;
-	byte car_characteristic;
-	byte car_scalingOutputLevel;
-	byte car_attackDecay;
-	byte car_sustainRelease;
-	byte car_waveformSelect;
+	byte modCharacteristic;
+	byte modScalingOutputLevel;
+	byte modAttackDecay;
+	byte modSustainRelease;
+	byte modWaveformSelect;
+	byte carCharacteristic;
+	byte carScalingOutputLevel;
+	byte carAttackDecay;
+	byte carSustainRelease;
+	byte carWaveformSelect;
 	byte feedback;
-	byte flags_a;
-	InstrumentExtra extra_a;
-	byte flags_b;
-	InstrumentExtra extra_b;
+	byte flagsA;
+	InstrumentExtra extraA;
+	byte flagsB;
+	InstrumentExtra extraB;
 	byte duration;
 } PACKED_STRUCT;
 #include "common/pack-end.h"
@@ -77,16 +77,16 @@ class AdLibPart : public MidiChannel {
 protected:
 //	AdLibPart *_prev, *_next;
 	AdLibVoice *_voice;
-	int16 _pitchbend;
-	byte _pitchbend_factor;
-	int8 _transpose_eff;
-	byte _vol_eff;
-	int8 _detune_eff;
-	byte _modwheel;
+	int16 _pitchBend;
+	byte _pitchBendFactor;
+	int8 _transposeEff;
+	byte _volEff;
+	int8 _detuneEff;
+	byte _modWheel;
 	bool _pedal;
 	byte _program;
-	byte _pri_eff;
-	AdLibInstrument _part_instr;
+	byte _priEff;
+	AdLibInstrument _partInstr;
 
 protected:
 	MidiDriver_ADLIB *_owner;
@@ -99,21 +99,21 @@ protected:
 public:
 	AdLibPart() {
 		_voice = 0;
-		_pitchbend = 0;
-		_pitchbend_factor = 2;
-		_transpose_eff = 0;
-		_vol_eff = 0;
-		_detune_eff = 0;
-		_modwheel = 0;
+		_pitchBend = 0;
+		_pitchBendFactor = 2;
+		_transposeEff = 0;
+		_volEff = 0;
+		_detuneEff = 0;
+		_modWheel = 0;
 		_pedal = 0;
 		_program = 0;
-		_pri_eff = 0;
+		_priEff = 0;
 
 		_owner = 0;
 		_allocated = false;
 		_channel = 0;
 
-		memset(&_part_instr, 0, sizeof(_part_instr));
+		memset(&_partInstr, 0, sizeof(_partInstr));
 	}
 
 	MidiDriver *device();
@@ -181,26 +181,26 @@ private:
 
 struct Struct10 {
 	byte active;
-	int16 cur_val;
+	int16 curVal;
 	int16 count;
-	uint16 max_value;
-	int16 start_value;
+	uint16 maxValue;
+	int16 startValue;
 	byte loop;
-	byte table_a[4];
-	byte table_b[4];
+	byte tableA[4];
+	byte tableB[4];
 	int8 unk3;
-	int8 modwheel;
-	int8 modwheel_last;
-	uint16 speed_lo_max;
-	uint16 num_steps;
-	int16 speed_hi;
+	int8 modWheel;
+	int8 modWheelLast;
+	uint16 speedLoMax;
+	uint16 numSteps;
+	int16 speedHi;
 	int8 direction;
-	uint16 speed_lo;
-	uint16 speed_lo_counter;
+	uint16 speedLo;
+	uint16 speedLoCounter;
 };
 
 struct Struct11 {
-	int16 modify_val;
+	int16 modifyVal;
 	byte param, flag0x40, flag0x10;
 	Struct10 *s10;
 };
@@ -208,11 +208,11 @@ struct Struct11 {
 struct AdLibVoice {
 	AdLibPart *_part;
 	AdLibVoice *_next, *_prev;
-	byte _waitforpedal;
+	byte _waitForPedal;
 	byte _note;
 	byte _channel;
-	byte _twochan;
-	byte _vol_1, _vol_2;
+	byte _twoChan;
+	byte _vol1, _vol2;
 	int16 _duration;
 
 	Struct10 _s10a;
@@ -591,15 +591,15 @@ private:
 	bool _scummSmallHeader; // FIXME: This flag controls a special mode for SCUMM V3 games
 
 	FM_OPL *_opl;
-	byte *_adlib_reg_cache;
+	byte *_regCache;
 
-	int _adlib_timer_counter;
+	int _timerCounter;
 
-	uint16 channel_table_2[9];
-	int _voice_index;
-	int _timer_p;
-	int _timer_q;
-	uint16 curnote_table[9];
+	uint16 _channelTable2[9];
+	int _voiceIndex;
+	int _timerIncrease;
+	int _timerThreshold;
+	uint16 _curNotTable[9];
 	AdLibVoice _voices[9];
 	AdLibPart _parts[32];
 	AdLibPercussionChannel _percussion;
@@ -613,9 +613,9 @@ private:
 	void adlib_note_on(int chan, byte note, int mod);
 	void adlib_note_on_ex(int chan, byte note, int mod);
 	int adlib_get_reg_value_param(int chan, byte data);
-	void adlib_setup_channel(int chan, AdLibInstrument *instr, byte vol_1, byte vol_2);
+	void adlib_setup_channel(int chan, AdLibInstrument *instr, byte vol1, byte vol2);
 	byte adlib_get_reg_value(byte reg) {
-		return _adlib_reg_cache[reg];
+		return _regCache[reg];
 	}
 	void adlib_set_param(int channel, byte param, int value);
 	void adlib_key_onoff(int channel);
@@ -643,7 +643,7 @@ private:
 void AdLibPart::init(MidiDriver_ADLIB *owner, byte channel) {
 	_owner = owner;
 	_channel = channel;
-	_pri_eff = 127;
+	_priEff = 127;
 	programChange(0);
 }
 
@@ -666,7 +666,7 @@ void AdLibPart::noteOn(byte note, byte velocity) {
 #ifdef DEBUG_ADLIB
 	debug(6, "%10d: noteOn(%d,%d)", g_tick, note, velocity);
 #endif
-	_owner->part_key_on(this, &_part_instr, note, velocity);
+	_owner->part_key_on(this, &_partInstr, note, velocity);
 }
 
 void AdLibPart::programChange(byte program) {
@@ -682,16 +682,16 @@ void AdLibPart::programChange(byte program) {
 		warning("No AdLib instrument defined for GM program %d", (int)program);
 	*/
 	_program = program;
-	memcpy(&_part_instr, &g_gmInstruments[program], sizeof(AdLibInstrument));
+	memcpy(&_partInstr, &g_gmInstruments[program], sizeof(AdLibInstrument));
 }
 
 void AdLibPart::pitchBend(int16 bend) {
 	AdLibVoice *voice;
 
-	_pitchbend = bend;
+	_pitchBend = bend;
 	for (voice = _voice; voice; voice = voice->_next) {
-		_owner->adlib_note_on(voice->_channel, voice->_note + _transpose_eff,
-							  (_pitchbend * _pitchbend_factor >> 6) + _detune_eff);
+		_owner->adlib_note_on(voice->_channel, voice->_note + _transposeEff,
+							  (_pitchBend * _pitchBendFactor >> 6) + _detuneEff);
 	}
 }
 
@@ -749,23 +749,23 @@ void AdLibPart::controlChange(byte control, byte value) {
 void AdLibPart::modulationWheel(byte value) {
 	AdLibVoice *voice;
 
-	_modwheel = value;
+	_modWheel = value;
 	for (voice = _voice; voice; voice = voice->_next) {
 		if (voice->_s10a.active && voice->_s11a.flag0x40)
-			voice->_s10a.modwheel = _modwheel >> 2;
+			voice->_s10a.modWheel = _modWheel >> 2;
 		if (voice->_s10b.active && voice->_s11b.flag0x40)
-			voice->_s10b.modwheel = _modwheel >> 2;
+			voice->_s10b.modWheel = _modWheel >> 2;
 	}
 }
 
 void AdLibPart::volume(byte value) {
 	AdLibVoice *voice;
 
-	_vol_eff = value;
+	_volEff = value;
 	for (voice = _voice; voice; voice = voice->_next) {
-		_owner->adlib_set_param(voice->_channel, 0, g_volumeTable[g_volumeLookupTable[voice->_vol_2][_vol_eff >> 2]]);
-		if (voice->_twochan) {
-			_owner->adlib_set_param(voice->_channel, 13, g_volumeTable[g_volumeLookupTable[voice->_vol_1][_vol_eff >> 2]]);
+		_owner->adlib_set_param(voice->_channel, 0, g_volumeTable[g_volumeLookupTable[voice->_vol2][_volEff >> 2]]);
+		if (voice->_twoChan) {
+			_owner->adlib_set_param(voice->_channel, 13, g_volumeTable[g_volumeLookupTable[voice->_vol1][_volEff >> 2]]);
 		}
 	}
 }
@@ -773,25 +773,25 @@ void AdLibPart::volume(byte value) {
 void AdLibPart::pitchBendFactor(byte value) {
 	AdLibVoice *voice;
 
-	_pitchbend_factor = value;
+	_pitchBendFactor = value;
 	for (voice = _voice; voice; voice = voice->_next) {
-		_owner->adlib_note_on(voice->_channel, voice->_note + _transpose_eff,
-							  (_pitchbend * _pitchbend_factor >> 6) + _detune_eff);
+		_owner->adlib_note_on(voice->_channel, voice->_note + _transposeEff,
+							  (_pitchBend * _pitchBendFactor >> 6) + _detuneEff);
 	}
 }
 
 void AdLibPart::detune(byte value) {
 	AdLibVoice *voice;
 
-	_detune_eff = value;
+	_detuneEff = value;
 	for (voice = _voice; voice; voice = voice->_next) {
-		_owner->adlib_note_on(voice->_channel, voice->_note + _transpose_eff,
-							  (_pitchbend * _pitchbend_factor >> 6) + _detune_eff);
+		_owner->adlib_note_on(voice->_channel, voice->_note + _transposeEff,
+							  (_pitchBend * _pitchBendFactor >> 6) + _detuneEff);
 	}
 }
 
 void AdLibPart::priority(byte value) {
-	_pri_eff = value;
+	_priEff = value;
 }
 
 void AdLibPart::sustain(bool value) {
@@ -800,7 +800,7 @@ void AdLibPart::sustain(bool value) {
 	_pedal = value;
 	if (!value) {
 		for (voice = _voice; voice; voice = voice->_next) {
-			if (voice->_waitforpedal)
+			if (voice->_waitForPedal)
 				_owner->mc_off(voice);
 		}
 	}
@@ -813,7 +813,7 @@ void AdLibPart::allNotesOff() {
 
 void AdLibPart::sysEx_customInstrument(uint32 type, const byte *instr) {
 	if (type == 'ADL ') {
-		memcpy(&_part_instr, instr, sizeof(AdLibInstrument));
+		memcpy(&_partInstr, instr, sizeof(AdLibInstrument));
 	}
 }
 
@@ -827,8 +827,8 @@ AdLibPercussionChannel::~AdLibPercussionChannel() {
 
 void AdLibPercussionChannel::init(MidiDriver_ADLIB *owner, byte channel) {
 	AdLibPart::init(owner, channel);
-	_pri_eff = 0;
-	_vol_eff = 127;
+	_priEff = 0;
+	_volEff = 127;
 
 	// Initialize the custom instruments data
 	memset(_notes, 0, sizeof(_notes));
@@ -885,16 +885,16 @@ void AdLibPercussionChannel::sysEx_customInstrument(uint32 type, const byte *ins
 		}
 
 		// Save the new instrument data
-		_customInstruments[note]->mod_characteristic     = instr[2];
-		_customInstruments[note]->mod_scalingOutputLevel = instr[3];
-		_customInstruments[note]->mod_attackDecay        = instr[4];
-		_customInstruments[note]->mod_sustainRelease     = instr[5];
-		_customInstruments[note]->mod_waveformSelect     = instr[6];
-		_customInstruments[note]->car_characteristic     = instr[7];
-		_customInstruments[note]->car_scalingOutputLevel = instr[8];
-		_customInstruments[note]->car_attackDecay        = instr[9];
-		_customInstruments[note]->car_sustainRelease     = instr[10];
-		_customInstruments[note]->car_waveformSelect     = instr[11];
+		_customInstruments[note]->modCharacteristic     = instr[2];
+		_customInstruments[note]->modScalingOutputLevel = instr[3];
+		_customInstruments[note]->modAttackDecay        = instr[4];
+		_customInstruments[note]->modSustainRelease     = instr[5];
+		_customInstruments[note]->modWaveformSelect     = instr[6];
+		_customInstruments[note]->carCharacteristic     = instr[7];
+		_customInstruments[note]->carScalingOutputLevel = instr[8];
+		_customInstruments[note]->carAttackDecay        = instr[9];
+		_customInstruments[note]->carSustainRelease     = instr[10];
+		_customInstruments[note]->carWaveformSelect     = instr[11];
 		_customInstruments[note]->feedback               = instr[12];
 	}
 }
@@ -907,20 +907,20 @@ MidiDriver_ADLIB::MidiDriver_ADLIB(Audio::Mixer *mixer)
 
 	_scummSmallHeader = false;
 
-	_adlib_reg_cache = 0;
+	_regCache = 0;
 
-	_adlib_timer_counter = 0;
-	_voice_index = 0;
-	for (i = 0; i < ARRAYSIZE(curnote_table); ++i) {
-		curnote_table[i] = 0;
+	_timerCounter = 0;
+	_voiceIndex = 0;
+	for (i = 0; i < ARRAYSIZE(_curNotTable); ++i) {
+		_curNotTable[i] = 0;
 	}
 
 	for (i = 0; i < ARRAYSIZE(_parts); ++i) {
 		_parts[i].init(this, i + ((i >= 9) ? 1 : 0));
 	}
 	_percussion.init(this, 9);
-	_timer_p = 0xD69;
-	_timer_q = 0x411B;
+	_timerIncrease = 0xD69;
+	_timerThreshold = 0x411B;
 }
 
 int MidiDriver_ADLIB::open() {
@@ -938,7 +938,7 @@ int MidiDriver_ADLIB::open() {
 		voice->_s11b.s10 = &voice->_s10a;
 	}
 
-	_adlib_reg_cache = (byte *)calloc(256, 1);
+	_regCache = (byte *)calloc(256, 1);
 
 	_opl = makeAdLibOPL(getRate());
 
@@ -969,7 +969,7 @@ void MidiDriver_ADLIB::close() {
 	OPLDestroy(_opl);
 //	YM3812Shutdown();
 
-	free(_adlib_reg_cache);
+	free(_regCache);
 }
 
 void MidiDriver_ADLIB::send(uint32 b) {
@@ -1024,11 +1024,11 @@ uint32 MidiDriver_ADLIB::property(int prop, uint32 param) {
 	case PROP_OLD_ADLIB: // Older games used a different operator volume algorithm
 		_scummSmallHeader = (param > 0);
 		if (_scummSmallHeader) {
-			_timer_p = 473;
-			_timer_q = 1000;
+			_timerIncrease = 473;
+			_timerThreshold = 1000;
 		} else {
-			_timer_p = 0xD69;
-			_timer_q = 0x411B;
+			_timerIncrease = 0xD69;
+			_timerThreshold = 0x411B;
 		}
 		return 1;
 	}
@@ -1040,10 +1040,10 @@ void MidiDriver_ADLIB::setPitchBendRange(byte channel, uint range) {
 	AdLibVoice *voice;
 	AdLibPart *part = &_parts[channel];
 
-	part->_pitchbend_factor = range;
+	part->_pitchBendFactor = range;
 	for (voice = part->_voice; voice; voice = voice->_next) {
-		adlib_note_on(voice->_channel, voice->_note + part->_transpose_eff,
-					  (part->_pitchbend * part->_pitchbend_factor >> 6) + part->_detune_eff);
+		adlib_note_on(voice->_channel, voice->_note + part->_transposeEff,
+					  (part->_pitchBend * part->_pitchBendFactor >> 6) + part->_detuneEff);
 	}
 }
 
@@ -1068,12 +1068,12 @@ MidiChannel *MidiDriver_ADLIB::allocateChannel() {
 // All the code brought over from IMuseAdLib
 
 void MidiDriver_ADLIB::adlib_write(byte reg, byte value) {
-	if (_adlib_reg_cache[reg] == value)
+	if (_regCache[reg] == value)
 		return;
 #ifdef DEBUG_ADLIB
 	debug(6, "%10d: adlib_write[%x] = %x", g_tick, reg, value);
 #endif
-	_adlib_reg_cache[reg] = value;
+	_regCache[reg] = value;
 
 	OPLWriteReg(_opl, reg, value);
 }
@@ -1087,9 +1087,9 @@ void MidiDriver_ADLIB::onTimer() {
 	AdLibVoice *voice;
 	int i;
 
-	_adlib_timer_counter += _timer_p;
-	while (_adlib_timer_counter >= _timer_q) {
-		_adlib_timer_counter -= _timer_q;
+	_timerCounter += _timerIncrease;
+	while (_timerCounter >= _timerThreshold) {
+		_timerCounter -= _timerThreshold;
 #ifdef DEBUG_ADLIB
 		g_tick++;
 #endif
@@ -1136,34 +1136,34 @@ void MidiDriver_ADLIB::mc_inc_stuff(AdLibVoice *voice, Struct10 *s10, Struct11 *
 	if (code & 1) {
 		switch (s11->param) {
 		case 0:
-			voice->_vol_2 = s10->start_value + s11->modify_val;
+			voice->_vol2 = s10->startValue + s11->modifyVal;
 			if (!_scummSmallHeader) {
 				adlib_set_param(voice->_channel, 0,
-								g_volumeTable[g_volumeLookupTable[voice->_vol_2]
-											  [part->_vol_eff >> 2]]);
+								g_volumeTable[g_volumeLookupTable[voice->_vol2]
+											  [part->_volEff >> 2]]);
 			} else {
-				adlib_set_param(voice->_channel, 0, voice->_vol_2);
+				adlib_set_param(voice->_channel, 0, voice->_vol2);
 			}
 			break;
 		case 13:
-			voice->_vol_1 = s10->start_value + s11->modify_val;
-			if (voice->_twochan && !_scummSmallHeader) {
+			voice->_vol1 = s10->startValue + s11->modifyVal;
+			if (voice->_twoChan && !_scummSmallHeader) {
 				adlib_set_param(voice->_channel, 13,
-								g_volumeTable[g_volumeLookupTable[voice->_vol_1]
-											  [part->_vol_eff >> 2]]);
+								g_volumeTable[g_volumeLookupTable[voice->_vol1]
+											  [part->_volEff >> 2]]);
 			} else {
-				adlib_set_param(voice->_channel, 13, voice->_vol_1);
+				adlib_set_param(voice->_channel, 13, voice->_vol1);
 			}
 			break;
 		case 30:
-			s11->s10->modwheel = (char)s11->modify_val;
+			s11->s10->modWheel = (char)s11->modifyVal;
 			break;
 		case 31:
-			s11->s10->unk3 = (char)s11->modify_val;
+			s11->s10->unk3 = (char)s11->modifyVal;
 			break;
 		default:
 			adlib_set_param(voice->_channel, s11->param,
-							s10->start_value + s11->modify_val);
+							s10->startValue + s11->modifyVal);
 			break;
 		}
 	}
@@ -1186,23 +1186,23 @@ byte MidiDriver_ADLIB::struct10_ontimer(Struct10 *s10, Struct11 *s11) {
 		return 0;
 	}
 
-	i = s10->cur_val + s10->speed_hi;
-	s10->speed_lo_counter += s10->speed_lo;
-	if (s10->speed_lo_counter >= s10->speed_lo_max) {
-		s10->speed_lo_counter -= s10->speed_lo_max;
+	i = s10->curVal + s10->speedHi;
+	s10->speedLoCounter += s10->speedLo;
+	if (s10->speedLoCounter >= s10->speedLoMax) {
+		s10->speedLoCounter -= s10->speedLoMax;
 		i += s10->direction;
 	}
-	if (s10->cur_val != i || s10->modwheel != s10->modwheel_last) {
-		s10->cur_val = i;
-		s10->modwheel_last = s10->modwheel;
-		i = lookup_volume(i, s10->modwheel_last);
-		if (i != s11->modify_val) {
-			s11->modify_val = i;
+	if (s10->curVal != i || s10->modWheel != s10->modWheelLast) {
+		s10->curVal = i;
+		s10->modWheelLast = s10->modWheel;
+		i = lookup_volume(i, s10->modWheelLast);
+		if (i != s11->modifyVal) {
+			s11->modifyVal = i;
 			result = 1;
 		}
 	}
 
-	if (!--s10->num_steps) {
+	if (!--s10->numSteps) {
 		s10->active++;
 		if (s10->active > 4) {
 			if (s10->loop) {
@@ -1240,8 +1240,8 @@ void MidiDriver_ADLIB::adlib_set_param(int channel, byte param, int value) {
 		else
 			value -= 383;
 		value <<= 4;
-		channel_table_2[channel] = value;
-		adlib_playnote(channel, curnote_table[channel] + value);
+		_channelTable2[channel] = value;
+		adlib_playnote(channel, _curNotTable[channel] + value);
 		return;
 	} else {
 		return;
@@ -1271,7 +1271,7 @@ void MidiDriver_ADLIB::struct10_setup(Struct10 *s10) {
 	b = s10->unk3;
 	f = s10->active - 1;
 
-	t = s10->table_a[f];
+	t = s10->tableA[f];
 	e = g_numStepsTable[g_volumeLookupTable[t & 0x7F][b]];
 	if (t & 0x80) {
 		e = random_nr(e);
@@ -1279,12 +1279,12 @@ void MidiDriver_ADLIB::struct10_setup(Struct10 *s10) {
 	if (e == 0)
 		e++;
 
-	s10->num_steps = s10->speed_lo_max = e;
+	s10->numSteps = s10->speedLoMax = e;
 
 	if (f != 2) {
-		c = s10->max_value;
-		g = s10->start_value;
-		t = s10->table_b[f];
+		c = s10->maxValue;
+		g = s10->startValue;
+		t = s10->tableB[f];
 		d = lookup_volume(c, (t & 0x7F) - 31);
 		if (t & 0x80) {
 			d = random_nr(d);
@@ -1296,12 +1296,12 @@ void MidiDriver_ADLIB::struct10_setup(Struct10 *s10) {
 			if (d + g < 0)
 				h = -g;
 		}
-		h -= s10->cur_val;
+		h -= s10->curVal;
 	} else {
 		h = 0;
 	}
 
-	s10->speed_hi = h / e;
+	s10->speedHi = h / e;
 	if (h < 0) {
 		h = -h;
 		s10->direction = -1;
@@ -1309,8 +1309,8 @@ void MidiDriver_ADLIB::struct10_setup(Struct10 *s10) {
 		s10->direction = 1;
 	}
 
-	s10->speed_lo = h % e;
-	s10->speed_lo_counter = 0;
+	s10->speedLo = h % e;
+	s10->speedLoCounter = 0;
 }
 
 void MidiDriver_ADLIB::adlib_playnote(int channel, int note) {
@@ -1350,14 +1350,14 @@ void MidiDriver_ADLIB::adlib_playnote(int channel, int note) {
 }
 
 int MidiDriver_ADLIB::random_nr(int a) {
-	static byte _rand_seed = 1;
-	if (_rand_seed & 1) {
-		_rand_seed >>= 1;
-		_rand_seed ^= 0xB8;
+	static byte _randSeed = 1;
+	if (_randSeed & 1) {
+		_randSeed >>= 1;
+		_randSeed ^= 0xB8;
 	} else {
-		_rand_seed >>= 1;
+		_randSeed >>= 1;
 	}
-	return _rand_seed * a >> 8;
+	return _randSeed * a >> 8;
 }
 
 void MidiDriver_ADLIB::part_key_off(AdLibPart *part, byte note) {
@@ -1366,7 +1366,7 @@ void MidiDriver_ADLIB::part_key_off(AdLibPart *part, byte note) {
 	for (voice = part->_voice; voice; voice = voice->_next) {
 		if (voice->_note == note) {
 			if (part->_pedal)
-				voice->_waitforpedal = true;
+				voice->_waitForPedal = true;
 			else
 				mc_off(voice);
 		}
@@ -1376,7 +1376,7 @@ void MidiDriver_ADLIB::part_key_off(AdLibPart *part, byte note) {
 void MidiDriver_ADLIB::part_key_on(AdLibPart *part, AdLibInstrument *instr, byte note, byte velocity) {
 	AdLibVoice *voice;
 
-	voice = allocate_voice(part->_pri_eff);
+	voice = allocate_voice(part->_priEff);
 	if (!voice)
 		return;
 
@@ -1389,14 +1389,14 @@ AdLibVoice *MidiDriver_ADLIB::allocate_voice(byte pri) {
 	int i;
 
 	for (i = 0; i < 9; i++) {
-		if (++_voice_index >= 9)
-			_voice_index = 0;
-		ac = &_voices[_voice_index];
+		if (++_voiceIndex >= 9)
+			_voiceIndex = 0;
+		ac = &_voices[_voiceIndex];
 		if (!ac->_part)
 			return ac;
 		if (!ac->_next) {
-			if (ac->_part->_pri_eff <= pri) {
-				pri = ac->_part->_pri_eff;
+			if (ac->_part->_priEff <= pri) {
+				pri = ac->_part->_priEff;
 				best = ac;
 			}
 		}
@@ -1424,73 +1424,73 @@ void MidiDriver_ADLIB::link_mc(AdLibPart *part, AdLibVoice *voice) {
 void MidiDriver_ADLIB::mc_key_on(AdLibVoice *voice, AdLibInstrument *instr, byte note, byte velocity) {
 	AdLibPart *part = voice->_part;
 	int c;
-	byte vol_1, vol_2;
+	byte vol1, vol2;
 
-	voice->_twochan = instr->feedback & 1;
+	voice->_twoChan = instr->feedback & 1;
 	voice->_note = note;
-	voice->_waitforpedal = false;
+	voice->_waitForPedal = false;
 	voice->_duration = instr->duration;
 	if (voice->_duration != 0)
 		voice->_duration *= 63;
 
 	if (!_scummSmallHeader)
-		vol_1 = (instr->mod_scalingOutputLevel & 0x3F) + g_volumeLookupTable[velocity >> 1][instr->mod_waveformSelect >> 2];
+		vol1 = (instr->modScalingOutputLevel & 0x3F) + g_volumeLookupTable[velocity >> 1][instr->modWaveformSelect >> 2];
 	else
-		vol_1 = 0x3f - (instr->mod_scalingOutputLevel & 0x3F);
-	if (vol_1 > 0x3F)
-		vol_1 = 0x3F;
-	voice->_vol_1 = vol_1;
+		vol1 = 0x3f - (instr->modScalingOutputLevel & 0x3F);
+	if (vol1 > 0x3F)
+		vol1 = 0x3F;
+	voice->_vol1 = vol1;
 
 	if (!_scummSmallHeader)
-		vol_2 = (instr->car_scalingOutputLevel & 0x3F) + g_volumeLookupTable[velocity >> 1][instr->car_waveformSelect >> 2];
+		vol2 = (instr->carScalingOutputLevel & 0x3F) + g_volumeLookupTable[velocity >> 1][instr->carWaveformSelect >> 2];
 	else
-		vol_2 = 0x3f - (instr->car_scalingOutputLevel & 0x3F);
-	if (vol_2 > 0x3F)
-		vol_2 = 0x3F;
-	voice->_vol_2 = vol_2;
+		vol2 = 0x3f - (instr->carScalingOutputLevel & 0x3F);
+	if (vol2 > 0x3F)
+		vol2 = 0x3F;
+	voice->_vol2 = vol2;
 
-	c = part->_vol_eff >> 2;
+	c = part->_volEff >> 2;
 
 	if (!_scummSmallHeader) {
-		vol_2 = g_volumeTable[g_volumeLookupTable[vol_2][c]];
-		if (voice->_twochan)
-			vol_1 = g_volumeTable[g_volumeLookupTable[vol_1][c]];
+		vol2 = g_volumeTable[g_volumeLookupTable[vol2][c]];
+		if (voice->_twoChan)
+			vol1 = g_volumeTable[g_volumeLookupTable[vol1][c]];
 	}
 
-	adlib_setup_channel(voice->_channel, instr, vol_1, vol_2);
-	adlib_note_on_ex(voice->_channel, part->_transpose_eff + note, part->_detune_eff + (part->_pitchbend * part->_pitchbend_factor >> 6));
+	adlib_setup_channel(voice->_channel, instr, vol1, vol2);
+	adlib_note_on_ex(voice->_channel, part->_transposeEff + note, part->_detuneEff + (part->_pitchBend * part->_pitchBendFactor >> 6));
 
-	if (instr->flags_a & 0x80) {
-		mc_init_stuff(voice, &voice->_s10a, &voice->_s11a, instr->flags_a, &instr->extra_a);
+	if (instr->flagsA & 0x80) {
+		mc_init_stuff(voice, &voice->_s10a, &voice->_s11a, instr->flagsA, &instr->extraA);
 	} else {
 		voice->_s10a.active = 0;
 	}
 
-	if (instr->flags_b & 0x80) {
-		mc_init_stuff(voice, &voice->_s10b, &voice->_s11b, instr->flags_b, &instr->extra_b);
+	if (instr->flagsB & 0x80) {
+		mc_init_stuff(voice, &voice->_s10b, &voice->_s11b, instr->flagsB, &instr->extraB);
 	} else {
 		voice->_s10b.active = 0;
 	}
 }
 
-void MidiDriver_ADLIB::adlib_setup_channel(int chan, AdLibInstrument *instr, byte vol_1, byte vol_2) {
+void MidiDriver_ADLIB::adlib_setup_channel(int chan, AdLibInstrument *instr, byte vol1, byte vol2) {
 	byte channel;
 
 	assert(chan >= 0 && chan < 9);
 
 	channel = g_operator1Offsets[chan];
-	adlib_write(channel + 0x20, instr->mod_characteristic);
-	adlib_write(channel + 0x40, (instr->mod_scalingOutputLevel | 0x3F) - vol_1);
-	adlib_write(channel + 0x60, 0xff & (~instr->mod_attackDecay));
-	adlib_write(channel + 0x80, 0xff & (~instr->mod_sustainRelease));
-	adlib_write(channel + 0xE0, instr->mod_waveformSelect);
+	adlib_write(channel + 0x20, instr->modCharacteristic);
+	adlib_write(channel + 0x40, (instr->modScalingOutputLevel | 0x3F) - vol1);
+	adlib_write(channel + 0x60, 0xff & (~instr->modAttackDecay));
+	adlib_write(channel + 0x80, 0xff & (~instr->modSustainRelease));
+	adlib_write(channel + 0xE0, instr->modWaveformSelect);
 
 	channel = g_operator2Offsets[chan];
-	adlib_write(channel + 0x20, instr->car_characteristic);
-	adlib_write(channel + 0x40, (instr->car_scalingOutputLevel | 0x3F) - vol_2);
-	adlib_write(channel + 0x60, 0xff & (~instr->car_attackDecay));
-	adlib_write(channel + 0x80, 0xff & (~instr->car_sustainRelease));
-	adlib_write(channel + 0xE0, instr->car_waveformSelect);
+	adlib_write(channel + 0x20, instr->carCharacteristic);
+	adlib_write(channel + 0x40, (instr->carScalingOutputLevel | 0x3F) - vol2);
+	adlib_write(channel + 0x60, 0xff & (~instr->carAttackDecay));
+	adlib_write(channel + 0x80, 0xff & (~instr->carSustainRelease));
+	adlib_write(channel + 0xE0, instr->carWaveformSelect);
 
 	adlib_write((byte)chan + 0xC0, instr->feedback);
 }
@@ -1499,44 +1499,44 @@ void MidiDriver_ADLIB::adlib_note_on_ex(int chan, byte note, int mod) {
 	int code;
 	assert(chan >= 0 && chan < 9);
 	code = (note << 7) + mod;
-	curnote_table[chan] = code;
-	channel_table_2[chan] = 0;
+	_curNotTable[chan] = code;
+	_channelTable2[chan] = 0;
 	adlib_playnote(chan, code);
 }
 
 void MidiDriver_ADLIB::mc_init_stuff(AdLibVoice *voice, Struct10 *s10,
 									 Struct11 *s11, byte flags, InstrumentExtra *ie) {
 	AdLibPart *part = voice->_part;
-	s11->modify_val = 0;
+	s11->modifyVal = 0;
 	s11->flag0x40 = flags & 0x40;
 	s10->loop = flags & 0x20;
 	s11->flag0x10 = flags & 0x10;
 	s11->param = g_paramTable1[flags & 0xF];
-	s10->max_value = g_maxValTable[flags & 0xF];
+	s10->maxValue = g_maxValTable[flags & 0xF];
 	s10->unk3 = 31;
 	if (s11->flag0x40) {
-		s10->modwheel = part->_modwheel >> 2;
+		s10->modWheel = part->_modWheel >> 2;
 	} else {
-		s10->modwheel = 31;
+		s10->modWheel = 31;
 	}
 
 	switch (s11->param) {
 	case 0:
-		s10->start_value = voice->_vol_2;
+		s10->startValue = voice->_vol2;
 		break;
 	case 13:
-		s10->start_value = voice->_vol_1;
+		s10->startValue = voice->_vol1;
 		break;
 	case 30:
-		s10->start_value = 31;
-		s11->s10->modwheel = 0;
+		s10->startValue = 31;
+		s11->s10->modWheel = 0;
 		break;
 	case 31:
-		s10->start_value = 0;
+		s10->startValue = 0;
 		s11->s10->unk3 = 0;
 		break;
 	default:
-		s10->start_value = adlib_get_reg_value_param(voice->_channel, s11->param);
+		s10->startValue = adlib_get_reg_value_param(voice->_channel, s11->param);
 	}
 
 	struct10_init(s10, ie);
@@ -1545,24 +1545,24 @@ void MidiDriver_ADLIB::mc_init_stuff(AdLibVoice *voice, Struct10 *s10,
 void MidiDriver_ADLIB::struct10_init(Struct10 *s10, InstrumentExtra *ie) {
 	s10->active = 1;
 	if (!_scummSmallHeader) {
-		s10->cur_val = 0;
+		s10->curVal = 0;
 	} else {
-		s10->cur_val = s10->start_value;
-		s10->start_value = 0;
+		s10->curVal = s10->startValue;
+		s10->startValue = 0;
 	}
-	s10->modwheel_last = 31;
+	s10->modWheelLast = 31;
 	s10->count = ie->a;
 	if (s10->count)
 		s10->count *= 63;
-	s10->table_a[0] = ie->b;
-	s10->table_a[1] = ie->d;
-	s10->table_a[2] = ie->f;
-	s10->table_a[3] = ie->g;
+	s10->tableA[0] = ie->b;
+	s10->tableA[1] = ie->d;
+	s10->tableA[2] = ie->f;
+	s10->tableA[3] = ie->g;
 
-	s10->table_b[0] = ie->c;
-	s10->table_b[1] = ie->e;
-	s10->table_b[2] = 0;
-	s10->table_b[3] = ie->h;
+	s10->tableB[0] = ie->c;
+	s10->tableB[1] = ie->e;
+	s10->tableB[2] = 0;
+	s10->tableB[3] = ie->h;
 
 	struct10_setup(s10);
 }
@@ -1604,8 +1604,8 @@ void MidiDriver_ADLIB::adlib_note_on(int chan, byte note, int mod) {
 	int code;
 	assert(chan >= 0 && chan < 9);
 	code = (note << 7) + mod;
-	curnote_table[chan] = code;
-	adlib_playnote(chan, (int16)channel_table_2[chan] + code);
+	_curNotTable[chan] = code;
+	adlib_playnote(chan, (int16)_channelTable2[chan] + code);
 }
 
 


Commit: c2d39e91527450f9e592fc06a533ac3b183fa91c
    https://github.com/scummvm/scummvm/commit/c2d39e91527450f9e592fc06a533ac3b183fa91c
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-09-30T12:13:07-07:00

Commit Message:
AUDIO: Enforce method naming guidelines in adlib.cpp.

Changed paths:
    audio/softsynth/adlib.cpp



diff --git a/audio/softsynth/adlib.cpp b/audio/softsynth/adlib.cpp
index bf13ad1..d71dca1 100644
--- a/audio/softsynth/adlib.cpp
+++ b/audio/softsynth/adlib.cpp
@@ -516,7 +516,7 @@ static const byte g_volumeTable[] = {
 	62, 63, 63, 63
 };
 
-static int lookup_volume(int a, int b) {
+static int lookupVolume(int a, int b) {
 	if (b == 0)
 		return 0;
 
@@ -542,7 +542,7 @@ static int lookup_volume(int a, int b) {
 	}
 }
 
-static void create_lookup_table() {
+static void createLookupTable() {
 	int i, j;
 	int sum;
 
@@ -606,36 +606,36 @@ private:
 
 	void generateSamples(int16 *buf, int len);
 	void onTimer();
-	void part_key_on(AdLibPart *part, AdLibInstrument *instr, byte note, byte velocity);
-	void part_key_off(AdLibPart *part, byte note);
-
-	void adlib_key_off(int chan);
-	void adlib_note_on(int chan, byte note, int mod);
-	void adlib_note_on_ex(int chan, byte note, int mod);
-	int adlib_get_reg_value_param(int chan, byte data);
-	void adlib_setup_channel(int chan, AdLibInstrument *instr, byte vol1, byte vol2);
-	byte adlib_get_reg_value(byte reg) {
+	void partKeyOn(AdLibPart *part, AdLibInstrument *instr, byte note, byte velocity);
+	void partKeyOff(AdLibPart *part, byte note);
+
+	void adlibKeyOff(int chan);
+	void adlibNoteOn(int chan, byte note, int mod);
+	void adlibNoteOnEx(int chan, byte note, int mod);
+	int adlibGetRegValueParam(int chan, byte data);
+	void adlibSetupChannel(int chan, AdLibInstrument *instr, byte vol1, byte vol2);
+	byte adlibGetRegValue(byte reg) {
 		return _regCache[reg];
 	}
-	void adlib_set_param(int channel, byte param, int value);
-	void adlib_key_onoff(int channel);
-	void adlib_write(byte reg, byte value);
-	void adlib_playnote(int channel, int note);
+	void adlibSetParam(int channel, byte param, int value);
+	void adlibKeyOnOff(int channel);
+	void adlibWrite(byte reg, byte value);
+	void adlibPlayNote(int channel, int note);
 
-	AdLibVoice *allocate_voice(byte pri);
+	AdLibVoice *allocateVoice(byte pri);
 
-	void mc_off(AdLibVoice *voice);
+	void mcOff(AdLibVoice *voice);
 
-	static void link_mc(AdLibPart *part, AdLibVoice *voice);
-	void mc_inc_stuff(AdLibVoice *voice, Struct10 *s10, Struct11 *s11);
-	void mc_init_stuff(AdLibVoice *voice, Struct10 *s10, Struct11 *s11, byte flags,
+	static void linkMc(AdLibPart *part, AdLibVoice *voice);
+	void mcIncStuff(AdLibVoice *voice, Struct10 *s10, Struct11 *s11);
+	void mcInitStuff(AdLibVoice *voice, Struct10 *s10, Struct11 *s11, byte flags,
 					   InstrumentExtra *ie);
 
-	void struct10_init(Struct10 *s10, InstrumentExtra *ie);
-	static byte struct10_ontimer(Struct10 *s10, Struct11 *s11);
-	static void struct10_setup(Struct10 *s10);
-	static int random_nr(int a);
-	void mc_key_on(AdLibVoice *voice, AdLibInstrument *instr, byte note, byte velocity);
+	void struct10Init(Struct10 *s10, InstrumentExtra *ie);
+	static byte struct10OnTimer(Struct10 *s10, Struct11 *s11);
+	static void struct10Setup(Struct10 *s10);
+	static int randomNr(int a);
+	void mcKeyOn(AdLibVoice *voice, AdLibInstrument *instr, byte note, byte velocity);
 };
 
 // MidiChannel method implementations
@@ -659,14 +659,14 @@ void AdLibPart::noteOff(byte note) {
 #ifdef DEBUG_ADLIB
 	debug(6, "%10d: noteOff(%d)", g_tick, note);
 #endif
-	_owner->part_key_off(this, note);
+	_owner->partKeyOff(this, note);
 }
 
 void AdLibPart::noteOn(byte note, byte velocity) {
 #ifdef DEBUG_ADLIB
 	debug(6, "%10d: noteOn(%d,%d)", g_tick, note, velocity);
 #endif
-	_owner->part_key_on(this, &_partInstr, note, velocity);
+	_owner->partKeyOn(this, &_partInstr, note, velocity);
 }
 
 void AdLibPart::programChange(byte program) {
@@ -690,7 +690,7 @@ void AdLibPart::pitchBend(int16 bend) {
 
 	_pitchBend = bend;
 	for (voice = _voice; voice; voice = voice->_next) {
-		_owner->adlib_note_on(voice->_channel, voice->_note + _transposeEff,
+		_owner->adlibNoteOn(voice->_channel, voice->_note + _transposeEff,
 							  (_pitchBend * _pitchBendFactor >> 6) + _detuneEff);
 	}
 }
@@ -763,9 +763,9 @@ void AdLibPart::volume(byte value) {
 
 	_volEff = value;
 	for (voice = _voice; voice; voice = voice->_next) {
-		_owner->adlib_set_param(voice->_channel, 0, g_volumeTable[g_volumeLookupTable[voice->_vol2][_volEff >> 2]]);
+		_owner->adlibSetParam(voice->_channel, 0, g_volumeTable[g_volumeLookupTable[voice->_vol2][_volEff >> 2]]);
 		if (voice->_twoChan) {
-			_owner->adlib_set_param(voice->_channel, 13, g_volumeTable[g_volumeLookupTable[voice->_vol1][_volEff >> 2]]);
+			_owner->adlibSetParam(voice->_channel, 13, g_volumeTable[g_volumeLookupTable[voice->_vol1][_volEff >> 2]]);
 		}
 	}
 }
@@ -775,7 +775,7 @@ void AdLibPart::pitchBendFactor(byte value) {
 
 	_pitchBendFactor = value;
 	for (voice = _voice; voice; voice = voice->_next) {
-		_owner->adlib_note_on(voice->_channel, voice->_note + _transposeEff,
+		_owner->adlibNoteOn(voice->_channel, voice->_note + _transposeEff,
 							  (_pitchBend * _pitchBendFactor >> 6) + _detuneEff);
 	}
 }
@@ -785,7 +785,7 @@ void AdLibPart::detune(byte value) {
 
 	_detuneEff = value;
 	for (voice = _voice; voice; voice = voice->_next) {
-		_owner->adlib_note_on(voice->_channel, voice->_note + _transposeEff,
+		_owner->adlibNoteOn(voice->_channel, voice->_note + _transposeEff,
 							  (_pitchBend * _pitchBendFactor >> 6) + _detuneEff);
 	}
 }
@@ -801,14 +801,14 @@ void AdLibPart::sustain(bool value) {
 	if (!value) {
 		for (voice = _voice; voice; voice = voice->_next) {
 			if (voice->_waitForPedal)
-				_owner->mc_off(voice);
+				_owner->mcOff(voice);
 		}
 	}
 }
 
 void AdLibPart::allNotesOff() {
 	while (_voice)
-		_owner->mc_off(_voice);
+		_owner->mcOff(_voice);
 }
 
 void AdLibPart::sysEx_customInstrument(uint32 type, const byte *instr) {
@@ -846,7 +846,7 @@ void AdLibPercussionChannel::noteOff(byte note) {
 	// not prevent later musical instruments (or even other
 	// percussion sounds) from playing.
 	/*
-	 _owner->part_key_off(this, note);
+	 _owner->partKeyOff(this, note);
 	*/
 }
 
@@ -870,7 +870,7 @@ void AdLibPercussionChannel::noteOn(byte note, byte velocity) {
 		return;
 	}
 
-	_owner->part_key_on(this, inst, note, velocity);
+	_owner->partKeyOn(this, inst, note, velocity);
 }
 
 void AdLibPercussionChannel::sysEx_customInstrument(uint32 type, const byte *instr) {
@@ -942,10 +942,10 @@ int MidiDriver_ADLIB::open() {
 
 	_opl = makeAdLibOPL(getRate());
 
-	adlib_write(1, 0x20);
-	adlib_write(8, 0x40);
-	adlib_write(0xBD, 0x00);
-	create_lookup_table();
+	adlibWrite(1, 0x20);
+	adlibWrite(8, 0x40);
+	adlibWrite(0xBD, 0x00);
+	createLookupTable();
 
 	_mixer->playStream(Audio::Mixer::kPlainSoundType, &_mixerSoundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true);
 
@@ -962,7 +962,7 @@ void MidiDriver_ADLIB::close() {
 	uint i;
 	for (i = 0; i < ARRAYSIZE(_voices); ++i) {
 		if (_voices[i]._part)
-			mc_off(&_voices[i]);
+			mcOff(&_voices[i]);
 	}
 
 	// Turn off the OPL emulation
@@ -1042,7 +1042,7 @@ void MidiDriver_ADLIB::setPitchBendRange(byte channel, uint range) {
 
 	part->_pitchBendFactor = range;
 	for (voice = part->_voice; voice; voice = voice->_next) {
-		adlib_note_on(voice->_channel, voice->_note + part->_transposeEff,
+		adlibNoteOn(voice->_channel, voice->_note + part->_transposeEff,
 					  (part->_pitchBend * part->_pitchBendFactor >> 6) + part->_detuneEff);
 	}
 }
@@ -1067,11 +1067,11 @@ MidiChannel *MidiDriver_ADLIB::allocateChannel() {
 
 // All the code brought over from IMuseAdLib
 
-void MidiDriver_ADLIB::adlib_write(byte reg, byte value) {
+void MidiDriver_ADLIB::adlibWrite(byte reg, byte value) {
 	if (_regCache[reg] == value)
 		return;
 #ifdef DEBUG_ADLIB
-	debug(6, "%10d: adlib_write[%x] = %x", g_tick, reg, value);
+	debug(6, "%10d: adlibWrite[%x] = %x", g_tick, reg, value);
 #endif
 	_regCache[reg] = value;
 
@@ -1098,23 +1098,23 @@ void MidiDriver_ADLIB::onTimer() {
 			if (!voice->_part)
 				continue;
 			if (voice->_duration && (voice->_duration -= 0x11) <= 0) {
-				mc_off(voice);
+				mcOff(voice);
 				return;
 			}
 			if (voice->_s10a.active) {
-				mc_inc_stuff(voice, &voice->_s10a, &voice->_s11a);
+				mcIncStuff(voice, &voice->_s10a, &voice->_s11a);
 			}
 			if (voice->_s10b.active) {
-				mc_inc_stuff(voice, &voice->_s10b, &voice->_s11b);
+				mcIncStuff(voice, &voice->_s10b, &voice->_s11b);
 			}
 		}
 	}
 }
 
-void MidiDriver_ADLIB::mc_off(AdLibVoice *voice) {
+void MidiDriver_ADLIB::mcOff(AdLibVoice *voice) {
 	AdLibVoice *tmp;
 
-	adlib_key_off(voice->_channel);
+	adlibKeyOff(voice->_channel);
 
 	tmp = voice->_prev;
 
@@ -1127,32 +1127,32 @@ void MidiDriver_ADLIB::mc_off(AdLibVoice *voice) {
 	voice->_part = NULL;
 }
 
-void MidiDriver_ADLIB::mc_inc_stuff(AdLibVoice *voice, Struct10 *s10, Struct11 *s11) {
+void MidiDriver_ADLIB::mcIncStuff(AdLibVoice *voice, Struct10 *s10, Struct11 *s11) {
 	byte code;
 	AdLibPart *part = voice->_part;
 
-	code = struct10_ontimer(s10, s11);
+	code = struct10OnTimer(s10, s11);
 
 	if (code & 1) {
 		switch (s11->param) {
 		case 0:
 			voice->_vol2 = s10->startValue + s11->modifyVal;
 			if (!_scummSmallHeader) {
-				adlib_set_param(voice->_channel, 0,
+				adlibSetParam(voice->_channel, 0,
 								g_volumeTable[g_volumeLookupTable[voice->_vol2]
 											  [part->_volEff >> 2]]);
 			} else {
-				adlib_set_param(voice->_channel, 0, voice->_vol2);
+				adlibSetParam(voice->_channel, 0, voice->_vol2);
 			}
 			break;
 		case 13:
 			voice->_vol1 = s10->startValue + s11->modifyVal;
 			if (voice->_twoChan && !_scummSmallHeader) {
-				adlib_set_param(voice->_channel, 13,
+				adlibSetParam(voice->_channel, 13,
 								g_volumeTable[g_volumeLookupTable[voice->_vol1]
 											  [part->_volEff >> 2]]);
 			} else {
-				adlib_set_param(voice->_channel, 13, voice->_vol1);
+				adlibSetParam(voice->_channel, 13, voice->_vol1);
 			}
 			break;
 		case 30:
@@ -1162,22 +1162,22 @@ void MidiDriver_ADLIB::mc_inc_stuff(AdLibVoice *voice, Struct10 *s10, Struct11 *
 			s11->s10->unk3 = (char)s11->modifyVal;
 			break;
 		default:
-			adlib_set_param(voice->_channel, s11->param,
+			adlibSetParam(voice->_channel, s11->param,
 							s10->startValue + s11->modifyVal);
 			break;
 		}
 	}
 
 	if (code & 2 && s11->flag0x10)
-		adlib_key_onoff(voice->_channel);
+		adlibKeyOnOff(voice->_channel);
 }
 
-void MidiDriver_ADLIB::adlib_key_off(int chan) {
+void MidiDriver_ADLIB::adlibKeyOff(int chan) {
 	byte reg = chan + 0xB0;
-	adlib_write(reg, adlib_get_reg_value(reg) & ~0x20);
+	adlibWrite(reg, adlibGetRegValue(reg) & ~0x20);
 }
 
-byte MidiDriver_ADLIB::struct10_ontimer(Struct10 *s10, Struct11 *s11) {
+byte MidiDriver_ADLIB::struct10OnTimer(Struct10 *s10, Struct11 *s11) {
 	byte result = 0;
 	int i;
 
@@ -1195,7 +1195,7 @@ byte MidiDriver_ADLIB::struct10_ontimer(Struct10 *s10, Struct11 *s11) {
 	if (s10->curVal != i || s10->modWheel != s10->modWheelLast) {
 		s10->curVal = i;
 		s10->modWheelLast = s10->modWheel;
-		i = lookup_volume(i, s10->modWheelLast);
+		i = lookupVolume(i, s10->modWheelLast);
 		if (i != s11->modifyVal) {
 			s11->modifyVal = i;
 			result = 1;
@@ -1208,19 +1208,19 @@ byte MidiDriver_ADLIB::struct10_ontimer(Struct10 *s10, Struct11 *s11) {
 			if (s10->loop) {
 				s10->active = 1;
 				result |= 2;
-				struct10_setup(s10);
+				struct10Setup(s10);
 			} else {
 				s10->active = 0;
 			}
 		} else {
-			struct10_setup(s10);
+			struct10Setup(s10);
 		}
 	}
 
 	return result;
 }
 
-void MidiDriver_ADLIB::adlib_set_param(int channel, byte param, int value) {
+void MidiDriver_ADLIB::adlibSetParam(int channel, byte param, int value) {
 	const AdLibSetParams *as;
 	byte reg;
 
@@ -1241,7 +1241,7 @@ void MidiDriver_ADLIB::adlib_set_param(int channel, byte param, int value) {
 			value -= 383;
 		value <<= 4;
 		_channelTable2[channel] = value;
-		adlib_playnote(channel, _curNotTable[channel] + value);
+		adlibPlayNote(channel, _curNotTable[channel] + value);
 		return;
 	} else {
 		return;
@@ -1251,20 +1251,20 @@ void MidiDriver_ADLIB::adlib_set_param(int channel, byte param, int value) {
 	if (as->d)
 		value = as->d - value;
 	reg += as->a;
-	adlib_write(reg, (adlib_get_reg_value(reg) & ~as->c) | (((byte)value) << as->b));
+	adlibWrite(reg, (adlibGetRegValue(reg) & ~as->c) | (((byte)value) << as->b));
 }
 
-void MidiDriver_ADLIB::adlib_key_onoff(int channel) {
+void MidiDriver_ADLIB::adlibKeyOnOff(int channel) {
 	byte val;
 	byte reg = channel + 0xB0;
 	assert(channel >= 0 && channel < 9);
 
-	val = adlib_get_reg_value(reg);
-	adlib_write(reg, val & ~0x20);
-	adlib_write(reg, val | 0x20);
+	val = adlibGetRegValue(reg);
+	adlibWrite(reg, val & ~0x20);
+	adlibWrite(reg, val | 0x20);
 }
 
-void MidiDriver_ADLIB::struct10_setup(Struct10 *s10) {
+void MidiDriver_ADLIB::struct10Setup(Struct10 *s10) {
 	int b, c, d, e, f, g, h;
 	byte t;
 
@@ -1274,7 +1274,7 @@ void MidiDriver_ADLIB::struct10_setup(Struct10 *s10) {
 	t = s10->tableA[f];
 	e = g_numStepsTable[g_volumeLookupTable[t & 0x7F][b]];
 	if (t & 0x80) {
-		e = random_nr(e);
+		e = randomNr(e);
 	}
 	if (e == 0)
 		e++;
@@ -1285,9 +1285,9 @@ void MidiDriver_ADLIB::struct10_setup(Struct10 *s10) {
 		c = s10->maxValue;
 		g = s10->startValue;
 		t = s10->tableB[f];
-		d = lookup_volume(c, (t & 0x7F) - 31);
+		d = lookupVolume(c, (t & 0x7F) - 31);
 		if (t & 0x80) {
-			d = random_nr(d);
+			d = randomNr(d);
 		}
 		if (d + g > c) {
 			h = c - g;
@@ -1313,7 +1313,7 @@ void MidiDriver_ADLIB::struct10_setup(Struct10 *s10) {
 	s10->speedLoCounter = 0;
 }
 
-void MidiDriver_ADLIB::adlib_playnote(int channel, int note) {
+void MidiDriver_ADLIB::adlibPlayNote(int channel, int note) {
 	byte old, oct, notex;
 	int note2;
 	int i;
@@ -1328,7 +1328,7 @@ void MidiDriver_ADLIB::adlib_playnote(int channel, int note) {
 		oct <<= 2;
 	notex = note2 % 12 + 3;
 
-	old = adlib_get_reg_value(channel + 0xB0);
+	old = adlibGetRegValue(channel + 0xB0);
 	if (old & 0x20) {
 		old &= ~0x20;
 		if (oct > old) {
@@ -1345,11 +1345,11 @@ void MidiDriver_ADLIB::adlib_playnote(int channel, int note) {
 	}
 
 	i = (notex << 3) + ((note >> 4) & 0x7);
-	adlib_write(channel + 0xA0, g_noteFrequencies[i]);
-	adlib_write(channel + 0xB0, oct | 0x20);
+	adlibWrite(channel + 0xA0, g_noteFrequencies[i]);
+	adlibWrite(channel + 0xB0, oct | 0x20);
 }
 
-int MidiDriver_ADLIB::random_nr(int a) {
+int MidiDriver_ADLIB::randomNr(int a) {
 	static byte _randSeed = 1;
 	if (_randSeed & 1) {
 		_randSeed >>= 1;
@@ -1360,7 +1360,7 @@ int MidiDriver_ADLIB::random_nr(int a) {
 	return _randSeed * a >> 8;
 }
 
-void MidiDriver_ADLIB::part_key_off(AdLibPart *part, byte note) {
+void MidiDriver_ADLIB::partKeyOff(AdLibPart *part, byte note) {
 	AdLibVoice *voice;
 
 	for (voice = part->_voice; voice; voice = voice->_next) {
@@ -1368,23 +1368,23 @@ void MidiDriver_ADLIB::part_key_off(AdLibPart *part, byte note) {
 			if (part->_pedal)
 				voice->_waitForPedal = true;
 			else
-				mc_off(voice);
+				mcOff(voice);
 		}
 	}
 }
 
-void MidiDriver_ADLIB::part_key_on(AdLibPart *part, AdLibInstrument *instr, byte note, byte velocity) {
+void MidiDriver_ADLIB::partKeyOn(AdLibPart *part, AdLibInstrument *instr, byte note, byte velocity) {
 	AdLibVoice *voice;
 
-	voice = allocate_voice(part->_priEff);
+	voice = allocateVoice(part->_priEff);
 	if (!voice)
 		return;
 
-	link_mc(part, voice);
-	mc_key_on(voice, instr, note, velocity);
+	linkMc(part, voice);
+	mcKeyOn(voice, instr, note, velocity);
 }
 
-AdLibVoice *MidiDriver_ADLIB::allocate_voice(byte pri) {
+AdLibVoice *MidiDriver_ADLIB::allocateVoice(byte pri) {
 	AdLibVoice *ac, *best = NULL;
 	int i;
 
@@ -1407,11 +1407,11 @@ AdLibVoice *MidiDriver_ADLIB::allocate_voice(byte pri) {
 		return NULL;
 
 	if (best)
-		mc_off(best);
+		mcOff(best);
 	return best;
 }
 
-void MidiDriver_ADLIB::link_mc(AdLibPart *part, AdLibVoice *voice) {
+void MidiDriver_ADLIB::linkMc(AdLibPart *part, AdLibVoice *voice) {
 	voice->_part = part;
 	voice->_next = (AdLibVoice *)part->_voice;
 	part->_voice = voice;
@@ -1421,7 +1421,7 @@ void MidiDriver_ADLIB::link_mc(AdLibPart *part, AdLibVoice *voice) {
 		voice->_next->_prev = voice;
 }
 
-void MidiDriver_ADLIB::mc_key_on(AdLibVoice *voice, AdLibInstrument *instr, byte note, byte velocity) {
+void MidiDriver_ADLIB::mcKeyOn(AdLibVoice *voice, AdLibInstrument *instr, byte note, byte velocity) {
 	AdLibPart *part = voice->_part;
 	int c;
 	byte vol1, vol2;
@@ -1457,54 +1457,54 @@ void MidiDriver_ADLIB::mc_key_on(AdLibVoice *voice, AdLibInstrument *instr, byte
 			vol1 = g_volumeTable[g_volumeLookupTable[vol1][c]];
 	}
 
-	adlib_setup_channel(voice->_channel, instr, vol1, vol2);
-	adlib_note_on_ex(voice->_channel, part->_transposeEff + note, part->_detuneEff + (part->_pitchBend * part->_pitchBendFactor >> 6));
+	adlibSetupChannel(voice->_channel, instr, vol1, vol2);
+	adlibNoteOnEx(voice->_channel, part->_transposeEff + note, part->_detuneEff + (part->_pitchBend * part->_pitchBendFactor >> 6));
 
 	if (instr->flagsA & 0x80) {
-		mc_init_stuff(voice, &voice->_s10a, &voice->_s11a, instr->flagsA, &instr->extraA);
+		mcInitStuff(voice, &voice->_s10a, &voice->_s11a, instr->flagsA, &instr->extraA);
 	} else {
 		voice->_s10a.active = 0;
 	}
 
 	if (instr->flagsB & 0x80) {
-		mc_init_stuff(voice, &voice->_s10b, &voice->_s11b, instr->flagsB, &instr->extraB);
+		mcInitStuff(voice, &voice->_s10b, &voice->_s11b, instr->flagsB, &instr->extraB);
 	} else {
 		voice->_s10b.active = 0;
 	}
 }
 
-void MidiDriver_ADLIB::adlib_setup_channel(int chan, AdLibInstrument *instr, byte vol1, byte vol2) {
+void MidiDriver_ADLIB::adlibSetupChannel(int chan, AdLibInstrument *instr, byte vol1, byte vol2) {
 	byte channel;
 
 	assert(chan >= 0 && chan < 9);
 
 	channel = g_operator1Offsets[chan];
-	adlib_write(channel + 0x20, instr->modCharacteristic);
-	adlib_write(channel + 0x40, (instr->modScalingOutputLevel | 0x3F) - vol1);
-	adlib_write(channel + 0x60, 0xff & (~instr->modAttackDecay));
-	adlib_write(channel + 0x80, 0xff & (~instr->modSustainRelease));
-	adlib_write(channel + 0xE0, instr->modWaveformSelect);
+	adlibWrite(channel + 0x20, instr->modCharacteristic);
+	adlibWrite(channel + 0x40, (instr->modScalingOutputLevel | 0x3F) - vol1);
+	adlibWrite(channel + 0x60, 0xff & (~instr->modAttackDecay));
+	adlibWrite(channel + 0x80, 0xff & (~instr->modSustainRelease));
+	adlibWrite(channel + 0xE0, instr->modWaveformSelect);
 
 	channel = g_operator2Offsets[chan];
-	adlib_write(channel + 0x20, instr->carCharacteristic);
-	adlib_write(channel + 0x40, (instr->carScalingOutputLevel | 0x3F) - vol2);
-	adlib_write(channel + 0x60, 0xff & (~instr->carAttackDecay));
-	adlib_write(channel + 0x80, 0xff & (~instr->carSustainRelease));
-	adlib_write(channel + 0xE0, instr->carWaveformSelect);
+	adlibWrite(channel + 0x20, instr->carCharacteristic);
+	adlibWrite(channel + 0x40, (instr->carScalingOutputLevel | 0x3F) - vol2);
+	adlibWrite(channel + 0x60, 0xff & (~instr->carAttackDecay));
+	adlibWrite(channel + 0x80, 0xff & (~instr->carSustainRelease));
+	adlibWrite(channel + 0xE0, instr->carWaveformSelect);
 
-	adlib_write((byte)chan + 0xC0, instr->feedback);
+	adlibWrite((byte)chan + 0xC0, instr->feedback);
 }
 
-void MidiDriver_ADLIB::adlib_note_on_ex(int chan, byte note, int mod) {
+void MidiDriver_ADLIB::adlibNoteOnEx(int chan, byte note, int mod) {
 	int code;
 	assert(chan >= 0 && chan < 9);
 	code = (note << 7) + mod;
 	_curNotTable[chan] = code;
 	_channelTable2[chan] = 0;
-	adlib_playnote(chan, code);
+	adlibPlayNote(chan, code);
 }
 
-void MidiDriver_ADLIB::mc_init_stuff(AdLibVoice *voice, Struct10 *s10,
+void MidiDriver_ADLIB::mcInitStuff(AdLibVoice *voice, Struct10 *s10,
 									 Struct11 *s11, byte flags, InstrumentExtra *ie) {
 	AdLibPart *part = voice->_part;
 	s11->modifyVal = 0;
@@ -1536,13 +1536,13 @@ void MidiDriver_ADLIB::mc_init_stuff(AdLibVoice *voice, Struct10 *s10,
 		s11->s10->unk3 = 0;
 		break;
 	default:
-		s10->startValue = adlib_get_reg_value_param(voice->_channel, s11->param);
+		s10->startValue = adlibGetRegValueParam(voice->_channel, s11->param);
 	}
 
-	struct10_init(s10, ie);
+	struct10Init(s10, ie);
 }
 
-void MidiDriver_ADLIB::struct10_init(Struct10 *s10, InstrumentExtra *ie) {
+void MidiDriver_ADLIB::struct10Init(Struct10 *s10, InstrumentExtra *ie) {
 	s10->active = 1;
 	if (!_scummSmallHeader) {
 		s10->curVal = 0;
@@ -1564,10 +1564,10 @@ void MidiDriver_ADLIB::struct10_init(Struct10 *s10, InstrumentExtra *ie) {
 	s10->tableB[2] = 0;
 	s10->tableB[3] = ie->h;
 
-	struct10_setup(s10);
+	struct10Setup(s10);
 }
 
-int MidiDriver_ADLIB::adlib_get_reg_value_param(int chan, byte param) {
+int MidiDriver_ADLIB::adlibGetRegValueParam(int chan, byte param) {
 	const AdLibSetParams *as;
 	byte val;
 	byte channel;
@@ -1591,7 +1591,7 @@ int MidiDriver_ADLIB::adlib_get_reg_value_param(int chan, byte param) {
 	}
 
 	as = &g_setParamTable[param];
-	val = adlib_get_reg_value(channel + as->a);
+	val = adlibGetRegValue(channel + as->a);
 	val &= as->c;
 	val >>= as->b;
 	if (as->d)
@@ -1600,12 +1600,12 @@ int MidiDriver_ADLIB::adlib_get_reg_value_param(int chan, byte param) {
 	return val;
 }
 
-void MidiDriver_ADLIB::adlib_note_on(int chan, byte note, int mod) {
+void MidiDriver_ADLIB::adlibNoteOn(int chan, byte note, int mod) {
 	int code;
 	assert(chan >= 0 && chan < 9);
 	code = (note << 7) + mod;
 	_curNotTable[chan] = code;
-	adlib_playnote(chan, (int16)_channelTable2[chan] + code);
+	adlibPlayNote(chan, (int16)_channelTable2[chan] + code);
 }
 
 


Commit: 8eeb3f2bf9857ab8ef082689ed2c064a474164c0
    https://github.com/scummvm/scummvm/commit/8eeb3f2bf9857ab8ef082689ed2c064a474164c0
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-09-30T12:17:04-07:00

Commit Message:
AUDIO: Give AdLibSetParam's members more descriptive names.

Changed paths:
    audio/softsynth/adlib.cpp



diff --git a/audio/softsynth/adlib.cpp b/audio/softsynth/adlib.cpp
index d71dca1..a892e2e 100644
--- a/audio/softsynth/adlib.cpp
+++ b/audio/softsynth/adlib.cpp
@@ -224,7 +224,10 @@ struct AdLibVoice {
 };
 
 struct AdLibSetParams {
-	byte a, b, c, d;
+	byte registerBase;
+	byte shift;
+	byte mask;
+	byte inversion;
 };
 
 static const byte g_operator1Offsets[9] = {
@@ -1248,10 +1251,10 @@ void MidiDriver_ADLIB::adlibSetParam(int channel, byte param, int value) {
 	}
 
 	as = &g_setParamTable[param];
-	if (as->d)
-		value = as->d - value;
-	reg += as->a;
-	adlibWrite(reg, (adlibGetRegValue(reg) & ~as->c) | (((byte)value) << as->b));
+	if (as->inversion)
+		value = as->inversion - value;
+	reg += as->registerBase;
+	adlibWrite(reg, (adlibGetRegValue(reg) & ~as->mask) | (((byte)value) << as->shift));
 }
 
 void MidiDriver_ADLIB::adlibKeyOnOff(int channel) {
@@ -1591,11 +1594,11 @@ int MidiDriver_ADLIB::adlibGetRegValueParam(int chan, byte param) {
 	}
 
 	as = &g_setParamTable[param];
-	val = adlibGetRegValue(channel + as->a);
-	val &= as->c;
-	val >>= as->b;
-	if (as->d)
-		val = as->d - val;
+	val = adlibGetRegValue(channel + as->registerBase);
+	val &= as->mask;
+	val >>= as->shift;
+	if (as->inversion)
+		val = as->inversion - val;
 
 	return val;
 }


Commit: e5c41cbf9a5d00ee1b78112536c6916119964590
    https://github.com/scummvm/scummvm/commit/e5c41cbf9a5d00ee1b78112536c6916119964590
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-09-30T12:22:03-07:00

Commit Message:
AUDIO: Comment out unused member in AdLibPart.

Changed paths:
    audio/softsynth/adlib.cpp



diff --git a/audio/softsynth/adlib.cpp b/audio/softsynth/adlib.cpp
index a892e2e..0009397 100644
--- a/audio/softsynth/adlib.cpp
+++ b/audio/softsynth/adlib.cpp
@@ -79,7 +79,7 @@ protected:
 	AdLibVoice *_voice;
 	int16 _pitchBend;
 	byte _pitchBendFactor;
-	int8 _transposeEff;
+	//int8 _transposeEff;
 	byte _volEff;
 	int8 _detuneEff;
 	byte _modWheel;
@@ -101,7 +101,7 @@ public:
 		_voice = 0;
 		_pitchBend = 0;
 		_pitchBendFactor = 2;
-		_transposeEff = 0;
+		//_transposeEff = 0;
 		_volEff = 0;
 		_detuneEff = 0;
 		_modWheel = 0;
@@ -693,7 +693,7 @@ void AdLibPart::pitchBend(int16 bend) {
 
 	_pitchBend = bend;
 	for (voice = _voice; voice; voice = voice->_next) {
-		_owner->adlibNoteOn(voice->_channel, voice->_note + _transposeEff,
+		_owner->adlibNoteOn(voice->_channel, voice->_note/* + _transposeEff*/,
 							  (_pitchBend * _pitchBendFactor >> 6) + _detuneEff);
 	}
 }
@@ -778,7 +778,7 @@ void AdLibPart::pitchBendFactor(byte value) {
 
 	_pitchBendFactor = value;
 	for (voice = _voice; voice; voice = voice->_next) {
-		_owner->adlibNoteOn(voice->_channel, voice->_note + _transposeEff,
+		_owner->adlibNoteOn(voice->_channel, voice->_note/* + _transposeEff*/,
 							  (_pitchBend * _pitchBendFactor >> 6) + _detuneEff);
 	}
 }
@@ -788,7 +788,7 @@ void AdLibPart::detune(byte value) {
 
 	_detuneEff = value;
 	for (voice = _voice; voice; voice = voice->_next) {
-		_owner->adlibNoteOn(voice->_channel, voice->_note + _transposeEff,
+		_owner->adlibNoteOn(voice->_channel, voice->_note/* + _transposeEff*/,
 							  (_pitchBend * _pitchBendFactor >> 6) + _detuneEff);
 	}
 }
@@ -1045,7 +1045,7 @@ void MidiDriver_ADLIB::setPitchBendRange(byte channel, uint range) {
 
 	part->_pitchBendFactor = range;
 	for (voice = part->_voice; voice; voice = voice->_next) {
-		adlibNoteOn(voice->_channel, voice->_note + part->_transposeEff,
+		adlibNoteOn(voice->_channel, voice->_note/* + part->_transposeEff*/,
 					  (part->_pitchBend * part->_pitchBendFactor >> 6) + part->_detuneEff);
 	}
 }
@@ -1461,7 +1461,7 @@ void MidiDriver_ADLIB::mcKeyOn(AdLibVoice *voice, AdLibInstrument *instr, byte n
 	}
 
 	adlibSetupChannel(voice->_channel, instr, vol1, vol2);
-	adlibNoteOnEx(voice->_channel, part->_transposeEff + note, part->_detuneEff + (part->_pitchBend * part->_pitchBendFactor >> 6));
+	adlibNoteOnEx(voice->_channel, /*part->_transposeEff + */note, part->_detuneEff + (part->_pitchBend * part->_pitchBendFactor >> 6));
 
 	if (instr->flagsA & 0x80) {
 		mcInitStuff(voice, &voice->_s10a, &voice->_s11a, instr->flagsA, &instr->extraA);


Commit: 78e8b9dd5901fa396e06611c3320b17e50ef0822
    https://github.com/scummvm/scummvm/commit/78e8b9dd5901fa396e06611c3320b17e50ef0822
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-09-30T12:28:18-07:00

Commit Message:
AUDIO: Properly handle AdLibPercussionChannel::noteOff.

Changed paths:
    audio/softsynth/adlib.cpp



diff --git a/audio/softsynth/adlib.cpp b/audio/softsynth/adlib.cpp
index 0009397..a0429e5 100644
--- a/audio/softsynth/adlib.cpp
+++ b/audio/softsynth/adlib.cpp
@@ -839,18 +839,16 @@ void AdLibPercussionChannel::init(MidiDriver_ADLIB *owner, byte channel) {
 }
 
 void AdLibPercussionChannel::noteOff(byte note) {
-	// Jamieson630: Unless I run into a specific instrument that
-	// may require a key off, I'm going to ignore this message.
-	// The rationale is that a percussion instrument should
-	// fade out of its own accord, and the AdLib instrument
-	// definitions used should follow this rule. Since
-	// percussion voices are allocated at the lowest priority
-	// anyway, we know that "hanging" percussion sounds will
-	// not prevent later musical instruments (or even other
-	// percussion sounds) from playing.
-	/*
+	if (_customInstruments[note]) {
+		note = _notes[note];
+	}
+
+	// This used to ignore note off events, since the builtin percussion
+	// instrument data has a duration value, which causes the percussion notes
+	// to stop automatically. This is not the case for (Groovie's) custom
+	// percussion instruments though. Also the OPL3 driver of Sam&Max actually
+	// does not handle the duration value, so we need it there too.
 	 _owner->partKeyOff(this, note);
-	*/
 }
 
 void AdLibPercussionChannel::noteOn(byte note, byte velocity) {


Commit: 04baadcf7a205b3da7b830463f2189b4e018330f
    https://github.com/scummvm/scummvm/commit/04baadcf7a205b3da7b830463f2189b4e018330f
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-09-30T12:36:52-07:00

Commit Message:
AUDIO: Switch MidiDriver_ADLIB to new OPL API.

Changed paths:
    audio/softsynth/adlib.cpp



diff --git a/audio/softsynth/adlib.cpp b/audio/softsynth/adlib.cpp
index a0429e5..44cd79b 100644
--- a/audio/softsynth/adlib.cpp
+++ b/audio/softsynth/adlib.cpp
@@ -593,7 +593,7 @@ public:
 private:
 	bool _scummSmallHeader; // FIXME: This flag controls a special mode for SCUMM V3 games
 
-	FM_OPL *_opl;
+	OPL::OPL *_opl;
 	byte *_regCache;
 
 	int _timerCounter;
@@ -941,7 +941,8 @@ int MidiDriver_ADLIB::open() {
 
 	_regCache = (byte *)calloc(256, 1);
 
-	_opl = makeAdLibOPL(getRate());
+	_opl = OPL::Config::create();
+	_opl->init(getRate());
 
 	adlibWrite(1, 0x20);
 	adlibWrite(8, 0x40);
@@ -967,8 +968,7 @@ void MidiDriver_ADLIB::close() {
 	}
 
 	// Turn off the OPL emulation
-	OPLDestroy(_opl);
-//	YM3812Shutdown();
+	delete _opl;
 
 	free(_regCache);
 }
@@ -1076,12 +1076,15 @@ void MidiDriver_ADLIB::adlibWrite(byte reg, byte value) {
 #endif
 	_regCache[reg] = value;
 
-	OPLWriteReg(_opl, reg, value);
+	_opl->writeReg(reg, value);
 }
 
 void MidiDriver_ADLIB::generateSamples(int16 *data, int len) {
-	memset(data, 0, sizeof(int16) * len);
-	YM3812UpdateOne(_opl, data, len);
+	if (_opl->isStereo()) {
+		len *= 2;
+	}
+
+	_opl->readBuffer(data, len);
 }
 
 void MidiDriver_ADLIB::onTimer() {


Commit: 1c024519d538c34431362678c925ea99958ddb6b
    https://github.com/scummvm/scummvm/commit/1c024519d538c34431362678c925ea99958ddb6b
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-09-30T16:50:23-07:00

Commit Message:
AUDIO: Add easy way to write to OPL3's secondary register set.

Changed paths:
    audio/fmopl.h
    audio/softsynth/opl/dosbox.cpp



diff --git a/audio/fmopl.h b/audio/fmopl.h
index 323cc3d..ad1794d 100644
--- a/audio/fmopl.h
+++ b/audio/fmopl.h
@@ -129,7 +129,9 @@ public:
 
 	/**
 	 * Function to directly write to a specific OPL register.
-	 * This writes to *both* chips for a Dual OPL2.
+	 * This writes to *both* chips for a Dual OPL2. We allow
+	 * writing to secondary OPL registers by using register
+	 * values >= 0x100.
 	 *
 	 * @param r		hardware register number to write to
 	 * @param v		value, which will be written
diff --git a/audio/softsynth/opl/dosbox.cpp b/audio/softsynth/opl/dosbox.cpp
index e039845..a1a736f 100644
--- a/audio/softsynth/opl/dosbox.cpp
+++ b/audio/softsynth/opl/dosbox.cpp
@@ -247,7 +247,7 @@ byte OPL::read(int port) {
 }
 
 void OPL::writeReg(int r, int v) {
-	byte tempReg = 0;
+	int tempReg = 0;
 	switch (_type) {
 	case Config::kOpl2:
 	case Config::kDualOpl2:
@@ -257,12 +257,27 @@ void OPL::writeReg(int r, int v) {
 		// Backup old setup register
 		tempReg = _reg.normal;
 
-		// We need to set the register we want to write to via port 0x388
-		write(0x388, r);
-		// Do the real writing to the register
-		write(0x389, v);
+		// We directly allow writing to secondary OPL3 registers by using
+		// register values >= 0x100.
+		if (_type == Config::kOpl3 && r >= 0x100) {
+			// We need to set the register we want to write to via port 0x222,
+			// since we want to write to the secondary register set.
+			write(0x222, r);
+			// Do the real writing to the register
+			write(0x223, v);
+		} else {
+			// We need to set the register we want to write to via port 0x388
+			write(0x388, r);
+			// Do the real writing to the register
+			write(0x389, v);
+		}
+
 		// Restore the old register
-		write(0x388, tempReg);
+		if (_type == Config::kOpl3 && tempReg >= 0x100) {
+			write(0x222, tempReg & ~0x100);
+		} else {
+			write(0x388, tempReg);
+		}
 		break;
 	};
 }


Commit: abe637b0f52cc0da583928ab0e3dac1460afff20
    https://github.com/scummvm/scummvm/commit/abe637b0f52cc0da583928ab0e3dac1460afff20
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-09-30T18:10:44-07:00

Commit Message:
AUDIO: Add support for Sam&Max's OPL3 output in our SCUMM AdLib driver.

This is an initial implementation and does not implement the differences
in voice allocation.

Changed paths:
    audio/mididrv.h
    audio/softsynth/adlib.cpp
    engines/scumm/scumm.cpp



diff --git a/audio/mididrv.h b/audio/mididrv.h
index fb3e29b..56b4a26 100644
--- a/audio/mididrv.h
+++ b/audio/mididrv.h
@@ -194,7 +194,9 @@ public:
 	enum {
 //		PROP_TIMEDIV = 1,
 		PROP_OLD_ADLIB = 2,
-		PROP_CHANNEL_MASK = 3
+		PROP_CHANNEL_MASK = 3,
+		// HACK: Not so nice, but our SCUMM AdLib code is in audio/
+		PROP_SCUMM_OPL3 = 4
 	};
 
 	/**
diff --git a/audio/softsynth/adlib.cpp b/audio/softsynth/adlib.cpp
index 44cd79b..ba39e6d 100644
--- a/audio/softsynth/adlib.cpp
+++ b/audio/softsynth/adlib.cpp
@@ -86,7 +86,9 @@ protected:
 	bool _pedal;
 	byte _program;
 	byte _priEff;
+	byte _pan;
 	AdLibInstrument _partInstr;
+	AdLibInstrument _partInstrSecondary;
 
 protected:
 	MidiDriver_ADLIB *_owner;
@@ -108,12 +110,14 @@ public:
 		_pedal = 0;
 		_program = 0;
 		_priEff = 0;
+		_pan = 64;
 
 		_owner = 0;
 		_allocated = false;
 		_channel = 0;
 
 		memset(&_partInstr, 0, sizeof(_partInstr));
+		memset(&_partInstrSecondary, 0, sizeof(_partInstrSecondary));
 	}
 
 	MidiDriver *device();
@@ -132,7 +136,7 @@ public:
 	void controlChange(byte control, byte value);
 	void modulationWheel(byte value);
 	void volume(byte value);
-	void panPosition(byte value) { return; } // Not supported
+	void panPosition(byte value);
 	void pitchBendFactor(byte value);
 	void detune(byte value);
 	void priority(byte value);
@@ -162,7 +166,6 @@ public:
 	void noteOff(byte note);
 	void noteOn(byte note, byte velocity);
 	void programChange(byte program) { }
-	void pitchBend(int16 bend) { }
 
 	// Control Change messages
 	void modulationWheel(byte value) { }
@@ -220,6 +223,9 @@ struct AdLibVoice {
 	Struct10 _s10b;
 	Struct11 _s11b;
 
+	byte _secTwoChan;
+	byte _secVol1, _secVol2;
+
 	AdLibVoice() { memset(this, 0, sizeof(AdLibVoice)); }
 };
 
@@ -487,6 +493,346 @@ static AdLibInstrument g_gmPercussionInstruments[39] = {
 	{ 0x0A, 0x0E, 0x7F, 0x00, 0x7D, 0x13, 0x20, 0x28, 0x03, 0x7C, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 }
 };
 
+static const AdLibInstrument g_gmInstrumentsOPL3[128][2] = {
+	{ { 0xC2, 0xC2, 0x0A, 0x6B, 0xA0, 0xC2, 0x08, 0x0D, 0x88, 0xC8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x23 },
+	  { 0x02, 0x00, 0x0C, 0x78, 0x61, 0x04, 0x4C, 0x0B, 0x9A, 0xC8, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x23 } },
+	{ { 0x22, 0x53, 0x0E, 0x8A, 0x60, 0x14, 0x06, 0x1D, 0x7A, 0xB8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x22, 0x5A, 0x0E, 0x8A, 0x40, 0x14, 0x2F, 0x0E, 0x7A, 0x88, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x06, 0x00, 0x1C, 0x79, 0x70, 0x02, 0x00, 0x4B, 0x79, 0xA8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x06, 0x00, 0x1A, 0x79, 0x60, 0x02, 0x00, 0x4C, 0xA9, 0xC8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xC2, 0x80, 0x0B, 0x89, 0x90, 0xC2, 0x06, 0x1B, 0xA8, 0xB0, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x23 },
+	  { 0x04, 0x28, 0x5D, 0xB8, 0x01, 0x02, 0x00, 0x3C, 0x70, 0x88, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xC2, 0x17, 0x3D, 0x6A, 0x00, 0xC4, 0x2E, 0x2D, 0xC9, 0x40, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xC2, 0x17, 0x3D, 0x6A, 0x00, 0xC4, 0x2E, 0x2D, 0xC9, 0x40, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x06, 0x1E, 0x1C, 0x99, 0x00, 0x02, 0x3A, 0x4C, 0x79, 0x00, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x06, 0x1E, 0x1C, 0x99, 0x00, 0x02, 0x3A, 0x4C, 0x79, 0x00, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x84, 0x40, 0x3B, 0x5A, 0x63, 0x81, 0x00, 0x3B, 0x5A, 0xD3, 0x0B, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x87, 0x40, 0x3A, 0x5A, 0x94, 0x82, 0x04, 0x3D, 0x59, 0xAC, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x84, 0x40, 0x3B, 0x5A, 0xC3, 0x81, 0x00, 0x3B, 0x5A, 0xFB, 0x01, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x84, 0x40, 0x3B, 0x5A, 0xC3, 0x81, 0x00, 0x3B, 0x5A, 0xFB, 0x01, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x8C, 0x80, 0x05, 0xEA, 0xA9, 0x82, 0x04, 0x3D, 0xAA, 0xB0, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x8C, 0x80, 0x06, 0x98, 0xA9, 0x86, 0x10, 0x36, 0x7A, 0xFD, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x85, 0x40, 0x0D, 0xEC, 0xE1, 0x84, 0x58, 0x3E, 0xCB, 0xF8, 0x01, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x84, 0x40, 0x0D, 0xEB, 0xE0, 0x84, 0x48, 0x3E, 0xCA, 0xC0, 0x05, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x8A, 0xC0, 0x0C, 0xDC, 0xA0, 0x88, 0x58, 0x3D, 0xDA, 0xF8, 0x01, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x8A, 0xC0, 0x0C, 0xDC, 0xA0, 0x88, 0x58, 0x3D, 0xDA, 0xF8, 0x01, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xC9, 0x40, 0x2B, 0x78, 0x8A, 0xC2, 0x0A, 0x4C, 0x8A, 0xF8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x1A },
+	  { 0xCA, 0x40, 0x47, 0xCA, 0xB4, 0xC2, 0x00, 0x57, 0x8A, 0xB8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x1A } },
+	{ { 0x2A, 0x0E, 0x17, 0x89, 0x50, 0x22, 0x0C, 0x1B, 0x09, 0xE0, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x2A, 0x1A, 0x19, 0x8A, 0x00, 0x22, 0x38, 0x0B, 0x0A, 0x00, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE7, 0x9B, 0x08, 0x08, 0x4A, 0xE2, 0x06, 0x0A, 0x08, 0xE0, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE7, 0x9B, 0x08, 0x08, 0x4A, 0xE2, 0x2F, 0x0A, 0x08, 0x68, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xC5, 0x0A, 0x05, 0xDC, 0xB8, 0x84, 0x06, 0x00, 0xEC, 0xC0, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x09, 0x10, 0x04, 0x5B, 0xA5, 0x02, 0x08, 0x00, 0xEC, 0x70, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x86, 0x40, 0x5D, 0x5A, 0x81, 0x81, 0x00, 0x0B, 0x5A, 0xFB, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x86, 0x40, 0x5D, 0x5A, 0x81, 0x81, 0x00, 0x0B, 0x5A, 0xFB, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xED, 0x0F, 0x5B, 0xC8, 0xC8, 0xE2, 0x9F, 0x4A, 0xE9, 0xF9, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE6, 0x40, 0x0A, 0xA7, 0x64, 0xE2, 0x8B, 0x6A, 0x79, 0xB1, 0x01, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE8, 0x4F, 0x3A, 0xD7, 0xF8, 0xE2, 0x97, 0x49, 0xF9, 0xF9, 0x05, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xC9, 0x02, 0x16, 0x9A, 0xAB, 0xC4, 0x15, 0x46, 0xBA, 0xF8, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE1, 0x08, 0x2F, 0xF7, 0xE1, 0xF3, 0x42, 0x8F, 0xC7, 0xC2, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE3, 0x00, 0x2D, 0xF7, 0xC1, 0xE4, 0x40, 0x7F, 0xC7, 0xD2, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x01, 0x8C, 0x9F, 0xDA, 0xE8, 0xE4, 0x50, 0x9F, 0xDA, 0xF2, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x02, 0x80, 0x9F, 0xDA, 0x00, 0xE3, 0x50, 0x9F, 0xD9, 0xFA, 0x03, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x08, 0xD5, 0x9D, 0xA5, 0x89, 0xE2, 0x3F, 0x9F, 0xD6, 0x91, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x08, 0xD5, 0x9D, 0xA5, 0x89, 0xE2, 0x3F, 0x9F, 0xD6, 0x91, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE5, 0x0F, 0x7D, 0xB8, 0x5A, 0xA2, 0x0C, 0x7C, 0xC7, 0xC1, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x06, 0x4C, 0xAC, 0x56, 0x31, 0x02, 0x08, 0x8D, 0x46, 0xDC, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xF2, 0x2A, 0x9F, 0xDB, 0x01, 0xE1, 0x04, 0x8F, 0xD7, 0xC2, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xF2, 0x00, 0x9F, 0xDB, 0xA9, 0xE1, 0x00, 0x8F, 0xD7, 0xBA, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE4, 0x88, 0x9C, 0x50, 0xC8, 0xE2, 0x18, 0x70, 0xC4, 0xF8, 0x0B, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE6, 0x00, 0x9C, 0x50, 0xB0, 0xE4, 0x00, 0x70, 0xC4, 0xA0, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x02, 0xA3, 0x0D, 0xDA, 0x01, 0xC2, 0x35, 0x5D, 0x58, 0x00, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x18 },
+	  { 0x02, 0xA3, 0x0D, 0xDA, 0x01, 0xC2, 0x35, 0x5D, 0x58, 0x00, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x18 } },
+	{ { 0x42, 0x53, 0x3E, 0xEB, 0x48, 0xD4, 0x05, 0x1D, 0xA9, 0xC9, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x18 },
+	  { 0x42, 0x54, 0x6F, 0xEB, 0x61, 0xD4, 0x02, 0x2E, 0xA9, 0xC8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x18 } },
+	{ { 0xC2, 0x00, 0x59, 0x17, 0xB1, 0xC2, 0x1E, 0x6D, 0x98, 0xF8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x19 },
+	  { 0xC2, 0x00, 0x08, 0xB3, 0x99, 0xC2, 0x06, 0x2B, 0x58, 0xFA, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x19 } },
+	{ { 0xC6, 0x01, 0x2D, 0xA7, 0x88, 0xC2, 0x08, 0x0E, 0xA7, 0xC1, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xC4, 0x00, 0x2D, 0xA7, 0x91, 0xC2, 0x02, 0x0E, 0xA7, 0xD1, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xC2, 0x0C, 0x06, 0x06, 0xA9, 0xC2, 0x3F, 0x08, 0xB8, 0xF9, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0A },
+	  { 0xC1, 0x00, 0x68, 0x50, 0xB8, 0xC2, 0x00, 0x48, 0x84, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0A } },
+	{ { 0xC2, 0x2E, 0x4F, 0x77, 0x00, 0xC4, 0x08, 0x0E, 0x98, 0xB1, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xC2, 0x2F, 0x6F, 0x79, 0x00, 0xC8, 0x0F, 0x5E, 0x98, 0xB9, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xC2, 0x30, 0x4F, 0xCA, 0x01, 0xC4, 0x0D, 0x0E, 0xB8, 0xFB, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xC2, 0x30, 0x4F, 0xCA, 0x01, 0xC4, 0x0D, 0x0E, 0xB8, 0xFB, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xC4, 0x29, 0x4F, 0xCA, 0x03, 0xC8, 0x0D, 0x0C, 0xB7, 0xF9, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0B },
+	  { 0xC4, 0x29, 0x4F, 0xCA, 0x03, 0xC8, 0x0D, 0x0C, 0xB7, 0xF9, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0B } },
+	{ { 0xC2, 0x41, 0x3D, 0x96, 0x88, 0xC4, 0xCA, 0x0E, 0xC7, 0xF8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x20 },
+	  { 0xC2, 0x04, 0x58, 0xC9, 0x90, 0xC2, 0x94, 0x2C, 0xB9, 0xF0, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x20 } },
+	{ { 0x31, 0x13, 0x2D, 0xD7, 0x78, 0xE2, 0x18, 0x2E, 0xB8, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x31, 0x13, 0x2D, 0xD7, 0x78, 0xE2, 0x18, 0x2E, 0xB8, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x22, 0x86, 0x0D, 0xD7, 0xA0, 0xE4, 0x18, 0x5E, 0xB8, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x28 },
+	  { 0x22, 0x86, 0x0D, 0xD7, 0xA0, 0xE4, 0x18, 0x5E, 0xB8, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x28 } },
+	{ { 0xF2, 0x0A, 0x0D, 0xD7, 0x80, 0xE4, 0x1F, 0x5E, 0xB8, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xD2, 0x06, 0x9A, 0xD7, 0xA0, 0xC2, 0x1F, 0x59, 0xB8, 0xF8, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xF2, 0x09, 0x4B, 0xD6, 0x90, 0xE4, 0x1F, 0x1C, 0xB8, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x28 },
+	  { 0xF2, 0x09, 0x4B, 0xD6, 0x90, 0xE4, 0x1F, 0x1C, 0xB8, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x28 } },
+	{ { 0x62, 0x11, 0x0C, 0xE6, 0x78, 0xE4, 0x1F, 0x0C, 0xC8, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x62, 0x11, 0x0C, 0xE6, 0x78, 0xE4, 0x1F, 0x0C, 0xC8, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE2, 0x12, 0x3D, 0xE6, 0x68, 0xE4, 0x1F, 0x7D, 0xB8, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE2, 0x12, 0x3D, 0xE6, 0x68, 0xE4, 0x1F, 0x7D, 0xB8, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE2, 0x13, 0x3D, 0xE6, 0x68, 0xE4, 0x1F, 0x5D, 0xB8, 0xF9, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE2, 0x13, 0x3D, 0xE6, 0x68, 0xE4, 0x1F, 0x5D, 0xB8, 0xF9, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xA2, 0x40, 0x5D, 0xBA, 0x7B, 0xE2, 0x00, 0x8F, 0xD8, 0xF1, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xA2, 0x40, 0x5D, 0xBA, 0x7B, 0xE2, 0x00, 0x8F, 0xD8, 0xF1, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE2, 0x40, 0x3D, 0xDA, 0x73, 0xE1, 0x00, 0x7E, 0xD8, 0xF2, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE2, 0x40, 0x3D, 0xDA, 0x73, 0xE1, 0x00, 0x7E, 0xD8, 0xF2, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x62, 0x00, 0x6D, 0xFA, 0xB9, 0xE2, 0x00, 0x8F, 0xC8, 0xF1, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x62, 0x00, 0x6D, 0xFA, 0xB9, 0xE2, 0x00, 0x8F, 0xC8, 0xF1, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE1, 0x00, 0x4E, 0xDB, 0x92, 0xE3, 0x18, 0x6F, 0xE9, 0xFA, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE1, 0x00, 0x4E, 0xDB, 0xCA, 0xE2, 0x00, 0x6F, 0xE9, 0xFA, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE1, 0x00, 0x4E, 0xDB, 0xCA, 0xE2, 0x00, 0x7F, 0xE9, 0xFA, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE1, 0x00, 0x4E, 0xDB, 0xCA, 0xE2, 0x00, 0x7F, 0xE9, 0xFA, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x02, 0x0F, 0x66, 0xAA, 0xA1, 0x02, 0x64, 0x29, 0xF9, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 },
+	  { 0x02, 0x00, 0x65, 0xAA, 0xF1, 0x02, 0x4A, 0x28, 0xF9, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 } },
+	{ { 0x16, 0x4A, 0x04, 0xBA, 0x71, 0xC2, 0x48, 0x2E, 0xCA, 0xF0, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	  { 0x14, 0xC0, 0x66, 0x08, 0x90, 0xC2, 0x48, 0x2C, 0x0A, 0xA0, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 } },
+	{ { 0x02, 0x0A, 0x01, 0x7A, 0xB1, 0x02, 0x12, 0x2A, 0xEA, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x02, 0x06, 0x75, 0x05, 0xB1, 0x01, 0x3F, 0x28, 0xEA, 0xF9, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x16 } },
+	{ { 0x62, 0x53, 0x9C, 0xBA, 0x61, 0x62, 0x5A, 0xAD, 0xCA, 0xC1, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xF2, 0x40, 0x9F, 0x8A, 0x98, 0xE2, 0x11, 0x7F, 0xB8, 0xFA, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xF2, 0x40, 0x6E, 0xDA, 0x91, 0xE2, 0x13, 0x8F, 0xF9, 0xF9, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xF2, 0x40, 0x6E, 0xDA, 0x91, 0xE2, 0x13, 0x8F, 0xF9, 0xF9, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE2, 0x40, 0x8F, 0xFA, 0xA0, 0xF2, 0x04, 0x7F, 0xFA, 0xF9, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE2, 0x40, 0x8F, 0xFA, 0xA0, 0xF2, 0x04, 0x7F, 0xFA, 0xF9, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE4, 0xA0, 0xCE, 0x5B, 0x02, 0xE2, 0x32, 0x7F, 0xFB, 0x79, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE4, 0xA0, 0xCE, 0x5B, 0x02, 0xE2, 0x32, 0x7F, 0xFB, 0x79, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE6, 0x80, 0x9C, 0x99, 0x82, 0xE2, 0x04, 0x8D, 0x78, 0xC0, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE0, 0x44, 0x8A, 0xA9, 0x5B, 0xE1, 0x06, 0x8D, 0x79, 0xBA, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE8, 0xA0, 0xAC, 0x67, 0x02, 0xE2, 0x06, 0x7C, 0x7A, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xEA, 0xA0, 0xAC, 0x67, 0x02, 0xE2, 0x00, 0x7C, 0x7A, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE7, 0x94, 0xAD, 0xB7, 0x03, 0xE2, 0x00, 0x7C, 0xBA, 0xF8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE7, 0x94, 0xAD, 0xB7, 0x03, 0xE2, 0x00, 0x7C, 0xBA, 0xF8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xC3, 0x3F, 0x4B, 0xE9, 0xFA, 0xC1, 0x3F, 0x9B, 0xF9, 0xFB, 0x0B, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x06 },
+	  { 0xC3, 0x3F, 0x4B, 0xE9, 0xFA, 0xC1, 0x3F, 0x9B, 0xF9, 0xFB, 0x0B, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x06 } },
+	{ { 0xB2, 0x20, 0xAD, 0xE9, 0x00, 0x62, 0x05, 0x8F, 0xC8, 0xD0, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xB2, 0x25, 0xAD, 0xE9, 0x00, 0x62, 0x00, 0x8F, 0xC8, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xF2, 0x02, 0xAF, 0xFB, 0x90, 0xF6, 0x54, 0x8F, 0xE9, 0xF8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE2, 0x00, 0x9F, 0xFA, 0xB0, 0xF2, 0x58, 0x7F, 0xEA, 0xF8, 0x02, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xF2, 0x00, 0xAF, 0x88, 0xA8, 0xF2, 0x46, 0x6E, 0xC9, 0xE0, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xD2, 0x00, 0x7B, 0x88, 0xA8, 0xD2, 0x4C, 0x69, 0xE9, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xF2, 0x2A, 0x9F, 0x98, 0x01, 0xE2, 0x8F, 0x4E, 0x78, 0xC0, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xD2, 0x02, 0x85, 0x89, 0xC8, 0xD2, 0x94, 0x77, 0x49, 0xF9, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE2, 0x02, 0x9F, 0xB8, 0x90, 0x22, 0x8A, 0x9F, 0xE8, 0xF8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xC2, 0x00, 0x86, 0xB8, 0x98, 0x02, 0x8F, 0x89, 0xE8, 0xF9, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE2, 0x2A, 0x7F, 0xB8, 0x01, 0xE4, 0x00, 0x0D, 0xC5, 0xF8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE2, 0x2A, 0x7F, 0xB8, 0x01, 0xE4, 0x00, 0x0D, 0xC5, 0xF8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE4, 0x28, 0x8E, 0xE8, 0x01, 0xF2, 0x00, 0x4D, 0xD6, 0xF9, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE4, 0x28, 0x8E, 0xE8, 0x01, 0xF2, 0x00, 0x4D, 0xD6, 0xF9, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x62, 0x23, 0x8F, 0xEA, 0x00, 0xF2, 0x00, 0x5E, 0xD9, 0xF8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x62, 0x23, 0x8F, 0xEA, 0x00, 0xF2, 0x00, 0x5E, 0xD9, 0xF8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xB4, 0x26, 0x6E, 0x98, 0x01, 0x62, 0x00, 0x7D, 0xC8, 0xF9, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xB4, 0x26, 0x6E, 0x98, 0x01, 0x62, 0x00, 0x7D, 0xC8, 0xF9, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE2, 0x2E, 0x20, 0xD9, 0x01, 0xF2, 0x1A, 0x90, 0xF8, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xD2, 0x10, 0x69, 0x18, 0xCF, 0xD4, 0x14, 0x5B, 0x04, 0xFD, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE4, 0x28, 0x7E, 0xF8, 0x01, 0xE2, 0x23, 0x8E, 0xE8, 0xF9, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE4, 0x28, 0x7E, 0xF8, 0x01, 0xE2, 0x23, 0x8E, 0xE8, 0xF9, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xB8, 0x28, 0x9E, 0x98, 0x01, 0x62, 0x00, 0x3D, 0xC8, 0xF9, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xB8, 0x28, 0x9E, 0x98, 0x01, 0x62, 0x00, 0x3D, 0xC8, 0xF9, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x62, 0x00, 0x8E, 0xC9, 0x79, 0xE6, 0x00, 0x7E, 0xD8, 0xD0, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x62, 0x00, 0x8E, 0xC9, 0x79, 0xE6, 0x00, 0x7E, 0xD8, 0xD0, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE2, 0x00, 0x5F, 0xF9, 0x88, 0xE4, 0x9E, 0x8F, 0xF8, 0xF9, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xC2, 0x00, 0x97, 0xF9, 0x90, 0xC9, 0x80, 0x69, 0x98, 0xA0, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x62, 0x0C, 0x6E, 0xD8, 0x79, 0x2A, 0x09, 0x7D, 0xD8, 0xC0, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x02, 0x04, 0x8A, 0xD8, 0x80, 0x0C, 0x12, 0x85, 0xD8, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE4, 0x00, 0x7E, 0x89, 0x70, 0xE6, 0x8F, 0x80, 0xF8, 0xF0, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xC4, 0x00, 0x67, 0x59, 0x70, 0xC6, 0x8A, 0x77, 0xA8, 0xF8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE4, 0x80, 0x6C, 0xD9, 0x60, 0xE2, 0x00, 0x8D, 0xC8, 0xF8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE4, 0x80, 0x6C, 0xD9, 0x60, 0xE2, 0x00, 0x8D, 0xC8, 0xF8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE2, 0x80, 0x88, 0x48, 0x98, 0xE2, 0x1E, 0x8E, 0xC9, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xF2, 0x40, 0xA8, 0xB9, 0x80, 0xE2, 0x0C, 0x89, 0x09, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE4, 0x00, 0x77, 0xC5, 0xA8, 0xE2, 0x00, 0x9E, 0xD7, 0xE0, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE4, 0x00, 0x77, 0xC5, 0xA8, 0xE2, 0x00, 0x9E, 0xD7, 0xE0, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE4, 0x80, 0x86, 0xB9, 0xA8, 0xE2, 0x14, 0x9F, 0xD7, 0xB0, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xC2, 0x80, 0x94, 0x09, 0x78, 0xC2, 0x00, 0x97, 0x97, 0xF8, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE2, 0x00, 0x68, 0x68, 0xAA, 0xE2, 0x0A, 0x9B, 0xB3, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xC2, 0x00, 0x86, 0x68, 0xA0, 0xC2, 0x00, 0x77, 0x47, 0xE0, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE4, 0x00, 0xA6, 0x87, 0x81, 0xE2, 0x0A, 0x7E, 0xC9, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE2, 0x00, 0x89, 0x40, 0x79, 0xE2, 0x00, 0x7E, 0xC9, 0x90, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE4, 0x80, 0xAA, 0xB8, 0x90, 0xE2, 0x00, 0x9E, 0xF9, 0xC0, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE6, 0x80, 0x9D, 0xB8, 0x51, 0xE2, 0x00, 0x9E, 0xF9, 0xA0, 0x01, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE2, 0x80, 0x8E, 0x64, 0xD0, 0xE2, 0x28, 0x6F, 0x73, 0xF8, 0x01, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE2, 0x80, 0x8E, 0x64, 0xD0, 0xE2, 0x28, 0x6F, 0x73, 0xF8, 0x01, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE8, 0x00, 0x7D, 0x99, 0xA8, 0xE6, 0x80, 0x80, 0xF8, 0xF8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE8, 0x00, 0x7D, 0x99, 0xA8, 0xE6, 0x80, 0x80, 0xF8, 0xF8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE6, 0x00, 0x9F, 0xB9, 0xD9, 0xE1, 0x00, 0x8F, 0xC8, 0xF9, 0x02, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE6, 0x00, 0x9F, 0xB9, 0xD9, 0xE1, 0x00, 0x8F, 0xC8, 0xF9, 0x02, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE4, 0x00, 0x09, 0x68, 0x92, 0xE2, 0x2B, 0x9E, 0xF3, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE4, 0x00, 0x09, 0x68, 0x92, 0xE2, 0x2B, 0x9E, 0xF3, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xC4, 0x00, 0x99, 0xE8, 0x73, 0xE2, 0x25, 0x6F, 0x93, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xC4, 0x00, 0x99, 0xE8, 0x73, 0xE2, 0x25, 0x6F, 0x93, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE6, 0x00, 0x6F, 0xDA, 0xC9, 0xE2, 0x05, 0x2F, 0xD8, 0xAA, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE2, 0x00, 0x4F, 0xDA, 0xC8, 0xE2, 0x00, 0x0F, 0xD8, 0xD0, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xEC, 0x60, 0x9D, 0xC7, 0x00, 0xE2, 0x21, 0x7F, 0xC9, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xEC, 0x60, 0x9D, 0xC7, 0x00, 0xE2, 0x21, 0x7F, 0xC9, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE3, 0x00, 0x0F, 0xF7, 0xF9, 0xE1, 0x3F, 0x0F, 0xA7, 0x01, 0x0D, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE3, 0x00, 0x0F, 0xF7, 0xF9, 0xE1, 0x3F, 0x0F, 0xA7, 0x01, 0x0D, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE4, 0xA9, 0x0F, 0xA8, 0x02, 0xE2, 0x3C, 0x5F, 0xDA, 0x78, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE4, 0xA9, 0x0F, 0xA8, 0x02, 0xE2, 0x3C, 0x5F, 0xDA, 0x78, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE8, 0x40, 0x0D, 0x89, 0xF9, 0xE2, 0x17, 0x7E, 0xD9, 0xF8, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE8, 0x40, 0x0D, 0x89, 0xF9, 0xE2, 0x17, 0x7E, 0xD9, 0xF8, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE1, 0x00, 0xDF, 0x8A, 0xAA, 0xE2, 0x5E, 0xCF, 0xBA, 0xFA, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE1, 0x00, 0xDF, 0x8A, 0xAA, 0xE2, 0x5E, 0xCF, 0xBA, 0xFA, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE2, 0x00, 0x0B, 0x68, 0xC0, 0xE2, 0x01, 0x9E, 0xB8, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE2, 0x00, 0x0B, 0x68, 0xC0, 0xE2, 0x01, 0x9E, 0xB8, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xEA, 0x00, 0xAE, 0xAB, 0x91, 0xE2, 0x00, 0xAE, 0xBA, 0xD8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xEA, 0x00, 0xAE, 0xAB, 0x91, 0xE2, 0x00, 0xAE, 0xBA, 0xD8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xEB, 0x80, 0x8C, 0xCB, 0x72, 0xE2, 0x86, 0xAF, 0xCA, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xEB, 0xC3, 0x9C, 0xCB, 0xA2, 0xE2, 0x4C, 0xAE, 0xCA, 0xFA, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE5, 0x40, 0xDB, 0x3B, 0x78, 0xE2, 0x80, 0xBE, 0xCA, 0xE1, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE2, 0x80, 0x8E, 0xCB, 0xC0, 0xE2, 0x90, 0xAE, 0xCA, 0xFB, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE4, 0x00, 0x9E, 0xAA, 0x79, 0xE1, 0x43, 0x0F, 0xBA, 0xFA, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE4, 0x00, 0x9E, 0xAA, 0x79, 0xE1, 0x43, 0x0F, 0xBA, 0xFA, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE7, 0x40, 0xEB, 0xCA, 0x80, 0xE2, 0x03, 0xBF, 0xBA, 0xC2, 0x02, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE3, 0x80, 0xDB, 0xCA, 0x40, 0xE2, 0x08, 0xDF, 0xBA, 0xC1, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xEA, 0x00, 0x68, 0xB8, 0x90, 0xE2, 0x0A, 0x8E, 0xB8, 0xF8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xEA, 0x00, 0x68, 0xB8, 0x90, 0xE2, 0x0A, 0x8E, 0xB8, 0xF8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x61, 0x00, 0xBE, 0x99, 0xFA, 0xE3, 0x40, 0xCF, 0xCA, 0xF9, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x62, 0x00, 0xCE, 0x9A, 0xA8, 0xE2, 0x45, 0xCF, 0xCA, 0xA0, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xCD, 0x00, 0x0B, 0x00, 0x90, 0xC2, 0x58, 0x0C, 0x00, 0xF8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x1C },
+	  { 0xCD, 0x00, 0x0B, 0x00, 0x90, 0xC2, 0x58, 0x0C, 0x00, 0xF8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x1C } },
+	{ { 0xE2, 0x00, 0x0E, 0x00, 0xA2, 0xE2, 0x58, 0x5F, 0xD0, 0xF9, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE2, 0x00, 0x0E, 0x00, 0xA2, 0xE2, 0x58, 0x5F, 0xD0, 0xF9, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xEC, 0x00, 0x7D, 0xDA, 0x80, 0xE2, 0x00, 0x5E, 0x9B, 0xA8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE6, 0x0A, 0x4C, 0xC9, 0x60, 0xE2, 0x07, 0x0C, 0x7A, 0xB8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE9, 0xC0, 0xEE, 0xD8, 0x83, 0xE2, 0x05, 0xDD, 0xAA, 0xE0, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xED, 0x48, 0xDE, 0xD8, 0xB4, 0xE1, 0x00, 0xDD, 0xAA, 0xA9, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xDA, 0x00, 0x8F, 0xAC, 0x92, 0x22, 0x05, 0x8D, 0x8A, 0xE9, 0x02, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xEF, 0x00, 0x8C, 0xAA, 0x67, 0x25, 0x00, 0x9D, 0xAB, 0xC1, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x62, 0x82, 0xCB, 0x7A, 0xD8, 0xE6, 0x56, 0xAF, 0xDB, 0xE0, 0x02, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x62, 0x84, 0xBB, 0xAA, 0xCA, 0xCF, 0x41, 0xAC, 0xDA, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xC2, 0x41, 0xAC, 0xBB, 0xBB, 0xC2, 0x85, 0x0E, 0xCB, 0xF9, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x12 },
+	  { 0xC2, 0x03, 0x6A, 0x5B, 0xA4, 0xC2, 0x0D, 0x2A, 0xBB, 0xFC, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x12 } },
+	{ { 0x75, 0x00, 0x0E, 0xBB, 0xB2, 0xE2, 0x1E, 0x0A, 0xA9, 0xF9, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x10 },
+	  { 0x62, 0x00, 0x04, 0x9A, 0xE8, 0xE2, 0x00, 0x0A, 0x48, 0xFD, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x10 } },
+	{ { 0x41, 0x00, 0x0E, 0xEA, 0xA3, 0xC2, 0x00, 0x08, 0xCA, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x07 },
+	  { 0x41, 0x00, 0x0E, 0xEA, 0xA3, 0xC2, 0x00, 0x08, 0xCA, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x07 } },
+	{ { 0xC1, 0x40, 0x0C, 0x59, 0xD2, 0xC2, 0x80, 0x3C, 0xAB, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0D },
+	  { 0xC1, 0x40, 0x0C, 0x59, 0xD2, 0xC2, 0x80, 0x3C, 0xAB, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0D } },
+	{ { 0x4B, 0x00, 0x0A, 0xF5, 0xC1, 0xC2, 0x19, 0x0C, 0xE9, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x07 },
+	  { 0x4B, 0x00, 0x0A, 0xF5, 0xC1, 0xC2, 0x19, 0x0C, 0xE9, 0xF8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x07 } },
+	{ { 0x62, 0x00, 0x7F, 0xD8, 0xA8, 0xEA, 0x00, 0x8F, 0xD8, 0xF9, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x62, 0x00, 0x7F, 0xD8, 0xA8, 0xEA, 0x00, 0x8F, 0xD8, 0xF9, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE1, 0x00, 0x7F, 0xD9, 0xAA, 0xE1, 0x00, 0x8F, 0xD8, 0xFA, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE1, 0x00, 0x7F, 0xD9, 0xAA, 0xE1, 0x00, 0x8F, 0xD8, 0xFA, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xE1, 0x00, 0x7F, 0xD9, 0xAA, 0xE1, 0x00, 0x8F, 0xD8, 0xFA, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xE1, 0x00, 0x7F, 0xD9, 0xAA, 0xE1, 0x00, 0x8F, 0xD8, 0xFA, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0xCF, 0x40, 0x09, 0xEA, 0xA8, 0xC4, 0x00, 0x0C, 0xDB, 0xC8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0xCF, 0x40, 0x09, 0xEA, 0xA8, 0xC4, 0x00, 0x0C, 0xDB, 0xC8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0xCF, 0x40, 0x0C, 0xAA, 0xA8, 0xC4, 0x00, 0x18, 0xF9, 0xC8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0xCF, 0x40, 0x0C, 0xAA, 0xA8, 0xC4, 0x00, 0x18, 0xF9, 0xC8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0xC9, 0x0C, 0x88, 0xD9, 0x6A, 0xC2, 0x14, 0x3A, 0xEA, 0xF8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	  { 0xC5, 0x00, 0x98, 0xD9, 0x92, 0xC1, 0x16, 0x6E, 0xF9, 0xE8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 } },
+	{ { 0x03, 0x00, 0x15, 0x00, 0xC8, 0x02, 0x00, 0x08, 0x00, 0xF8, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0x03, 0x00, 0x15, 0x00, 0xC8, 0x02, 0x00, 0x08, 0x00, 0xF8, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0x01, 0x0C, 0x44, 0xE6, 0xE8, 0x01, 0x3F, 0x0C, 0xEA, 0xF8, 0x0C, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 },
+	  { 0x02, 0x3F, 0x05, 0x08, 0xF8, 0x03, 0x3F, 0x3C, 0xF9, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x06 } },
+	{ { 0x00, 0x00, 0x36, 0x67, 0xF8, 0x01, 0x3F, 0x0E, 0xFA, 0xF8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	  { 0x00, 0x00, 0x36, 0x67, 0xF8, 0x01, 0x3F, 0x0E, 0xFA, 0xF8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 } },
+	{ { 0x02, 0x00, 0x36, 0x68, 0xF8, 0x01, 0x3F, 0x0E, 0xFA, 0xF8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	  { 0x02, 0x00, 0x36, 0x68, 0xF8, 0x01, 0x3F, 0x0E, 0xFA, 0xF8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 } },
+	{ { 0xCB, 0x00, 0xAF, 0x00, 0xFA, 0xC0, 0x00, 0xC0, 0x06, 0xFB, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0F },
+	  { 0xCB, 0x00, 0xAF, 0x00, 0xFA, 0xC0, 0x00, 0xC0, 0x06, 0xFB, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0F } },
+	{ { 0x05, 0x0D, 0x80, 0xA6, 0xFB, 0x0B, 0x38, 0xA9, 0xD8, 0x00, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 },
+	  { 0x05, 0x0D, 0x80, 0xA6, 0xFB, 0x0B, 0x38, 0xA9, 0xD8, 0x00, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 } },
+	{ { 0x0F, 0x00, 0x90, 0xFA, 0xD0, 0x06, 0x00, 0xA7, 0x39, 0xA8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x06 },
+	  { 0x0F, 0x00, 0x90, 0xFA, 0xD0, 0x06, 0x00, 0xA7, 0x39, 0xA8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x06 } },
+	{ { 0xC9, 0x15, 0xDD, 0xFF, 0xF8, 0x00, 0x00, 0xE7, 0xFC, 0xD8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x38 },
+	  { 0xC9, 0x15, 0xDD, 0xFF, 0xF8, 0x00, 0x00, 0xE7, 0xFC, 0xD8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x38 } },
+	{ { 0x48, 0x3C, 0x30, 0xF6, 0x03, 0x0A, 0x38, 0x97, 0xE8, 0x00, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 },
+	  { 0x48, 0x3C, 0x30, 0xF6, 0x03, 0x0A, 0x38, 0x97, 0xE8, 0x00, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 } },
+	{ { 0x07, 0x80, 0x0B, 0xC8, 0xC9, 0x02, 0x3F, 0x0C, 0xEA, 0xF8, 0x0F, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	  { 0x07, 0x80, 0x0B, 0xC8, 0xC9, 0x02, 0x3F, 0x0C, 0xEA, 0xF8, 0x0F, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 } },
+	{ { 0x00, 0x21, 0x66, 0x40, 0x03, 0x00, 0x3F, 0x47, 0x00, 0x00, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0x00, 0x21, 0x66, 0x40, 0x03, 0x00, 0x3F, 0x47, 0x00, 0x00, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0x08, 0x00, 0x0B, 0x3C, 0xF8, 0x08, 0x3F, 0x06, 0xF3, 0x00, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0x08, 0x00, 0x0B, 0x3C, 0xF8, 0x08, 0x3F, 0x06, 0xF3, 0x00, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0x00, 0x3F, 0x4C, 0xFB, 0x00, 0x00, 0x3F, 0x0A, 0xE9, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	  { 0x00, 0x3F, 0x4C, 0xFB, 0x00, 0x00, 0x3F, 0x0A, 0xE9, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 } },
+};
+
+static const AdLibInstrument g_gmPercussionInstrumentsOPL3[39][2] = {
+	{ { 0x1A, 0x3F, 0x15, 0x05, 0xF8, 0x02, 0x21, 0x2B, 0xE4, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x06 },
+	  { 0x11, 0x18, 0x15, 0x00, 0xF8, 0x12, 0x00, 0x2B, 0x03, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x06 } },
+	{ { 0x11, 0x12, 0x04, 0x07, 0xF8, 0x02, 0x18, 0x0B, 0xE5, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	  { 0x11, 0x28, 0x06, 0x04, 0xF8, 0x02, 0x1E, 0x1B, 0x02, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 } },
+	{ { 0x0A, 0x3F, 0x0B, 0x01, 0xF8, 0x1F, 0x13, 0x46, 0xD0, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x01 },
+	  { 0x04, 0x18, 0x06, 0x01, 0xB0, 0x10, 0x00, 0x07, 0x00, 0x90, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x01 } },
+	{ { 0x00, 0x3F, 0x0F, 0x00, 0xF8, 0x10, 0x0A, 0x07, 0x00, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0x02, 0x14, 0x04, 0x00, 0xC0, 0x11, 0x08, 0x07, 0x00, 0xC6, 0x02, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0x0F, 0x3F, 0x0B, 0x00, 0xF8, 0x1F, 0x07, 0x19, 0xD0, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0x0E, 0x32, 0x76, 0x03, 0xF8, 0x1F, 0x0F, 0x77, 0xD4, 0xFC, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0x00, 0x3F, 0x1F, 0x00, 0xFA, 0x1F, 0x0C, 0x07, 0x00, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	  { 0x07, 0x11, 0x13, 0x00, 0xA0, 0x13, 0x00, 0x07, 0x00, 0xC8, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 } },
+	{ { 0x12, 0x3F, 0x05, 0x06, 0xF8, 0x03, 0x16, 0x4A, 0xD9, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	  { 0x02, 0x22, 0x05, 0xB6, 0xF8, 0x04, 0x0A, 0x59, 0x03, 0xF8, 0x0B, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 } },
+	{ { 0xCF, 0x7F, 0x08, 0xFF, 0xFA, 0x00, 0xC0, 0x2D, 0xF7, 0xE3, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0xD2, 0x7F, 0x04, 0x0F, 0xFA, 0x10, 0xCD, 0x24, 0x07, 0xFB, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0x12, 0x3F, 0x05, 0x06, 0xF8, 0x43, 0x17, 0x0C, 0xE9, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	  { 0x12, 0x13, 0x09, 0x96, 0xF8, 0x44, 0x0A, 0x07, 0x03, 0xF8, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 } },
+	{ { 0xCF, 0x7F, 0x08, 0xCF, 0xFA, 0x00, 0x40, 0x2A, 0xF8, 0x8B, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0C },
+	  { 0xCF, 0x7F, 0x05, 0x07, 0xFA, 0x00, 0x40, 0x25, 0x08, 0xC3, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0C } },
+	{ { 0x12, 0x3F, 0x06, 0x17, 0xF8, 0x03, 0x1D, 0x0B, 0xE9, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	  { 0x12, 0x1A, 0x08, 0x96, 0xF8, 0x44, 0x00, 0x08, 0x03, 0xF8, 0x05, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 } },
+	{ { 0xCF, 0x7F, 0x08, 0xCD, 0xFA, 0x00, 0x40, 0x1A, 0x69, 0xB3, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0C },
+	  { 0xCD, 0x3F, 0x36, 0x05, 0xFC, 0x0F, 0x47, 0x46, 0x06, 0xDF, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0C } },
+	{ { 0x13, 0x3F, 0x05, 0x06, 0xF8, 0x03, 0x0D, 0x0A, 0xD9, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	  { 0x12, 0x14, 0x09, 0x96, 0xF8, 0x44, 0x02, 0x07, 0x03, 0xF8, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 } },
+	{ { 0x15, 0x3F, 0x05, 0x06, 0xF8, 0x03, 0x16, 0x0C, 0xE9, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	  { 0x12, 0x00, 0x07, 0x96, 0xE8, 0x44, 0x02, 0x08, 0x03, 0xF8, 0x07, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 } },
+	{ { 0xCF, 0x3F, 0x2B, 0xFB, 0xFA, 0xC0, 0x16, 0x1A, 0xCA, 0xFB, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x10 },
+	  { 0xCF, 0x3F, 0x2B, 0xFB, 0xFA, 0xC0, 0x1E, 0x1A, 0xCA, 0xFB, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x10 } },
+	{ { 0x17, 0x3F, 0x04, 0x09, 0xF8, 0x03, 0x18, 0x0D, 0xE9, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	  { 0x12, 0x00, 0x07, 0x96, 0xF8, 0x44, 0x02, 0x08, 0xF9, 0xF8, 0x01, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 } },
+	{ { 0xCF, 0x3F, 0x0F, 0x5E, 0xF8, 0xC6, 0x0C, 0x00, 0xCA, 0xFB, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	  { 0xCF, 0x3F, 0x04, 0x57, 0xF8, 0xC5, 0x13, 0x06, 0x05, 0xFF, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 } },
+	{ { 0xCF, 0x3F, 0x7E, 0x9D, 0xF8, 0xC8, 0xC0, 0x0A, 0xBA, 0xD0, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x06 },
+	  { 0xCF, 0x3F, 0x77, 0x09, 0xF8, 0xC2, 0xC0, 0x08, 0xB5, 0xEA, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x06 } },
+	{ { 0xCF, 0x3F, 0x4D, 0x9F, 0xF8, 0xC6, 0x00, 0x08, 0xDA, 0xAB, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 },
+	  { 0xCF, 0x3F, 0x47, 0x06, 0xF8, 0xCD, 0x00, 0x07, 0x05, 0xB3, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 } },
+	{ { 0xCF, 0x3F, 0x5D, 0xAA, 0xF2, 0xC0, 0x8A, 0x67, 0x99, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0xCF, 0x3F, 0x9A, 0x69, 0xF8, 0xCF, 0x88, 0x88, 0x48, 0xFA, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0xCF, 0x3F, 0x4A, 0xFD, 0xF8, 0xCF, 0x00, 0x59, 0xEA, 0xD8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0xCF, 0x3F, 0x48, 0x06, 0xF8, 0xCF, 0x00, 0x54, 0x04, 0xF9, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0x0F, 0x18, 0x0A, 0xFA, 0xAB, 0x06, 0x06, 0x06, 0x39, 0xF8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0x03, 0x18, 0x04, 0x09, 0xAC, 0x05, 0x07, 0x08, 0x07, 0xF8, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0xCF, 0x3F, 0x2B, 0xFC, 0xF8, 0xCC, 0xC4, 0x0B, 0xEA, 0xFB, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x10 },
+	  { 0xCF, 0x3F, 0x25, 0x06, 0xF8, 0xCC, 0xD7, 0x05, 0x02, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x10 } },
+	{ { 0x05, 0x1A, 0x04, 0x00, 0xF8, 0x12, 0x08, 0x0C, 0xEA, 0xE0, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x07 },
+	  { 0x01, 0x00, 0x09, 0x08, 0x40, 0x13, 0x00, 0x2A, 0x0A, 0xD8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x07 } },
+	{ { 0x04, 0x19, 0x04, 0x00, 0xF8, 0x12, 0x08, 0x2C, 0xEA, 0xE0, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 },
+	  { 0x04, 0x00, 0x07, 0x08, 0x40, 0x12, 0x00, 0x29, 0x08, 0xE0, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x04 } },
+	{ { 0x04, 0x0A, 0x04, 0x00, 0xD8, 0x01, 0x02, 0x0D, 0xFA, 0xE0, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x07 },
+	  { 0x04, 0x00, 0x03, 0x09, 0x93, 0x02, 0x00, 0x28, 0x09, 0xE8, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x07 } },
+	{ { 0x15, 0x14, 0x05, 0x00, 0xF9, 0x01, 0x03, 0x5C, 0xE9, 0xD8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	  { 0x05, 0x00, 0x03, 0x03, 0x49, 0x02, 0x00, 0x58, 0x08, 0xE0, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 } },
+	{ { 0x10, 0x10, 0x05, 0x08, 0xF8, 0x01, 0x03, 0x0D, 0xEA, 0xE8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
+	  { 0x10, 0x00, 0x0C, 0x0C, 0x48, 0x02, 0x00, 0x08, 0xB9, 0xE0, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 } },
+	{ { 0x11, 0x00, 0x06, 0x87, 0xFB, 0x02, 0x40, 0x09, 0x59, 0xC0, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x08 },
+	  { 0x15, 0x00, 0x04, 0x87, 0xFB, 0x02, 0x40, 0x09, 0x59, 0xD0, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x08 } },
+	{ { 0x13, 0x26, 0x04, 0x6A, 0xFB, 0x01, 0x00, 0x08, 0x5A, 0xE0, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x08 },
+	  { 0x12, 0x26, 0x03, 0x6A, 0xFB, 0x02, 0x00, 0x06, 0x5A, 0xC0, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x08 } },
+	{ { 0xCF, 0x4D, 0x0C, 0xAA, 0xA0, 0xC4, 0x00, 0x18, 0xF9, 0x90, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0xCF, 0x4E, 0x05, 0xA6, 0xA0, 0xC6, 0x00, 0x16, 0xF8, 0x60, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0xCF, 0x4D, 0x0C, 0xAA, 0xA0, 0xC3, 0x00, 0x18, 0xF8, 0x98, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0xCF, 0x4E, 0x06, 0xAA, 0xA0, 0xC5, 0x00, 0x19, 0xF9, 0x90, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0xCB, 0x3F, 0x8F, 0x00, 0xFA, 0xC5, 0x06, 0x98, 0xD6, 0xBB, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0D },
+	  { 0xC0, 0x00, 0xF0, 0x00, 0x00, 0xC0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x0D } },
+	{ { 0x0C, 0x18, 0x87, 0xB3, 0xFB, 0x19, 0x0B, 0x55, 0x75, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0x0C, 0x18, 0x87, 0xB3, 0xFB, 0x1B, 0x10, 0x57, 0x75, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0x05, 0x11, 0x15, 0x00, 0xC8, 0x02, 0x00, 0x08, 0x00, 0xA8, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0x02, 0x11, 0x13, 0x00, 0xC8, 0x02, 0x00, 0x05, 0x00, 0x80, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0x04, 0x08, 0x15, 0x00, 0x90, 0x01, 0x00, 0x08, 0x00, 0xC0, 0x08, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
+	  { 0x03, 0x08, 0x14, 0x00, 0x90, 0x02, 0x00, 0x07, 0x00, 0xA8, 0x00, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
+	{ { 0xDA, 0x00, 0x53, 0x30, 0xC0, 0x07, 0x10, 0x49, 0xC4, 0xDA, 0x03, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0xD2, 0x00, 0x56, 0x30, 0x90, 0x06, 0x00, 0x46, 0x56, 0x62, 0x09, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	{ { 0x1C, 0x00, 0x07, 0xBC, 0xC8, 0x0C, 0x0A, 0x0B, 0x6A, 0xF2, 0x0B, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
+	  { 0x18, 0x00, 0x07, 0xBC, 0x88, 0x09, 0x00, 0x0B, 0x6A, 0xBA, 0x0B, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 } },
+	{ { 0x0A, 0x0E, 0x7F, 0x00, 0xF9, 0x13, 0x16, 0x28, 0x03, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
+	  { 0x01, 0x0E, 0x54, 0x00, 0xF9, 0x15, 0x03, 0x27, 0x03, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+};
+
 static const byte g_gmPercussionInstrumentMap[128] = {
 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
@@ -587,14 +933,16 @@ public:
 
 
 	// AudioStream API
-	bool isStereo() const { return false; }
+	bool isStereo() const { return _opl->isStereo(); }
 	int getRate() const { return _mixer->getOutputRate(); }
 
 private:
 	bool _scummSmallHeader; // FIXME: This flag controls a special mode for SCUMM V3 games
+	bool _opl3Mode;
 
 	OPL::OPL *_opl;
 	byte *_regCache;
+	byte *_regCacheSecondary;
 
 	int _timerCounter;
 
@@ -609,20 +957,25 @@ private:
 
 	void generateSamples(int16 *buf, int len);
 	void onTimer();
-	void partKeyOn(AdLibPart *part, AdLibInstrument *instr, byte note, byte velocity);
+	void partKeyOn(AdLibPart *part, const AdLibInstrument *instr, byte note, byte velocity, const AdLibInstrument *second, byte pan);
 	void partKeyOff(AdLibPart *part, byte note);
 
 	void adlibKeyOff(int chan);
 	void adlibNoteOn(int chan, byte note, int mod);
 	void adlibNoteOnEx(int chan, byte note, int mod);
 	int adlibGetRegValueParam(int chan, byte data);
-	void adlibSetupChannel(int chan, AdLibInstrument *instr, byte vol1, byte vol2);
+	void adlibSetupChannel(int chan, const AdLibInstrument *instr, byte vol1, byte vol2);
+	void adlibSetupChannelSecondary(int chan, const AdLibInstrument *instr, byte vol1, byte vol2, byte pan);
 	byte adlibGetRegValue(byte reg) {
 		return _regCache[reg];
 	}
-	void adlibSetParam(int channel, byte param, int value);
+	byte adlibGetRegValueSecondary(byte reg) {
+		return _regCacheSecondary[reg];
+	}
+	void adlibSetParam(int channel, byte param, int value, bool primary = true);
 	void adlibKeyOnOff(int channel);
 	void adlibWrite(byte reg, byte value);
+	void adlibWriteSecondary(byte reg, byte value);
 	void adlibPlayNote(int channel, int note);
 
 	AdLibVoice *allocateVoice(byte pri);
@@ -632,13 +985,13 @@ private:
 	static void linkMc(AdLibPart *part, AdLibVoice *voice);
 	void mcIncStuff(AdLibVoice *voice, Struct10 *s10, Struct11 *s11);
 	void mcInitStuff(AdLibVoice *voice, Struct10 *s10, Struct11 *s11, byte flags,
-					   InstrumentExtra *ie);
+					   const InstrumentExtra *ie);
 
-	void struct10Init(Struct10 *s10, InstrumentExtra *ie);
+	void struct10Init(Struct10 *s10, const InstrumentExtra *ie);
 	static byte struct10OnTimer(Struct10 *s10, Struct11 *s11);
 	static void struct10Setup(Struct10 *s10);
 	static int randomNr(int a);
-	void mcKeyOn(AdLibVoice *voice, AdLibInstrument *instr, byte note, byte velocity);
+	void mcKeyOn(AdLibVoice *voice, const AdLibInstrument *instr, byte note, byte velocity, const AdLibInstrument *second, byte pan);
 };
 
 // MidiChannel method implementations
@@ -669,7 +1022,7 @@ void AdLibPart::noteOn(byte note, byte velocity) {
 #ifdef DEBUG_ADLIB
 	debug(6, "%10d: noteOn(%d,%d)", g_tick, note, velocity);
 #endif
-	_owner->partKeyOn(this, &_partInstr, note, velocity);
+	_owner->partKeyOn(this, &_partInstr, note, velocity, &_partInstrSecondary, _pan);
 }
 
 void AdLibPart::programChange(byte program) {
@@ -685,7 +1038,12 @@ void AdLibPart::programChange(byte program) {
 		warning("No AdLib instrument defined for GM program %d", (int)program);
 	*/
 	_program = program;
-	memcpy(&_partInstr, &g_gmInstruments[program], sizeof(AdLibInstrument));
+	if (!_owner->_opl3Mode) {
+		memcpy(&_partInstr, &g_gmInstruments[program], sizeof(AdLibInstrument));
+	} else {
+		memcpy(&_partInstr,          &g_gmInstrumentsOPL3[program][0], sizeof(AdLibInstrument));
+		memcpy(&_partInstrSecondary, &g_gmInstrumentsOPL3[program][1], sizeof(AdLibInstrument));
+	}
 }
 
 void AdLibPart::pitchBend(int16 bend) {
@@ -693,8 +1051,12 @@ void AdLibPart::pitchBend(int16 bend) {
 
 	_pitchBend = bend;
 	for (voice = _voice; voice; voice = voice->_next) {
-		_owner->adlibNoteOn(voice->_channel, voice->_note/* + _transposeEff*/,
-							  (_pitchBend * _pitchBendFactor >> 6) + _detuneEff);
+		if (!_owner->_opl3Mode) {
+			_owner->adlibNoteOn(voice->_channel, voice->_note/* + _transposeEff*/,
+								  (_pitchBend * _pitchBendFactor >> 6) + _detuneEff);
+		} else {
+			_owner->adlibNoteOn(voice->_channel, voice->_note, _pitchBend >> 1);
+		}
 	}
 }
 
@@ -711,7 +1073,7 @@ void AdLibPart::controlChange(byte control, byte value) {
 		volume(value);
 		break;
 	case 10:
-		// Pan position. Not supported.
+		panPosition(value);
 		break;
 	case 16:
 		pitchBendFactor(value);
@@ -766,14 +1128,34 @@ void AdLibPart::volume(byte value) {
 
 	_volEff = value;
 	for (voice = _voice; voice; voice = voice->_next) {
-		_owner->adlibSetParam(voice->_channel, 0, g_volumeTable[g_volumeLookupTable[voice->_vol2][_volEff >> 2]]);
-		if (voice->_twoChan) {
-			_owner->adlibSetParam(voice->_channel, 13, g_volumeTable[g_volumeLookupTable[voice->_vol1][_volEff >> 2]]);
+		if (!_owner->_opl3Mode) {
+			_owner->adlibSetParam(voice->_channel, 0, g_volumeTable[g_volumeLookupTable[voice->_vol2][_volEff >> 2]]);
+			if (voice->_twoChan) {
+				_owner->adlibSetParam(voice->_channel, 13, g_volumeTable[g_volumeLookupTable[voice->_vol1][_volEff >> 2]]);
+			}
+		} else {
+			_owner->adlibSetParam(voice->_channel, 0, g_volumeTable[((voice->_vol2    + 1) * _volEff) >> 7], true);
+			_owner->adlibSetParam(voice->_channel, 0, g_volumeTable[((voice->_secVol2 + 1) * _volEff) >> 7], false);
+			if (voice->_twoChan) {
+				_owner->adlibSetParam(voice->_channel, 13, g_volumeTable[((voice->_vol1    + 1) * _volEff) >> 7], true);
+			}
+			if (voice->_secTwoChan) {
+				_owner->adlibSetParam(voice->_channel, 13, g_volumeTable[((voice->_secVol1 + 1) * _volEff) >> 7], false);
+			}
 		}
 	}
 }
 
+void AdLibPart::panPosition(byte value) {
+	_pan = value;
+}
+
 void AdLibPart::pitchBendFactor(byte value) {
+	// Not supported in OPL3 mode.
+	if (_owner->_opl3Mode) {
+		return;
+	}
+
 	AdLibVoice *voice;
 
 	_pitchBendFactor = value;
@@ -784,6 +1166,16 @@ void AdLibPart::pitchBendFactor(byte value) {
 }
 
 void AdLibPart::detune(byte value) {
+	// Sam&Max's OPL3 driver uses this for a completly different purpose. It
+	// is related to voice allocation. We ignore this for now.
+	// TODO: We probably need to look how the interpreter side of Sam&Max's
+	// iMuse version handles all this too. Implementing the driver side here
+	// would be not that hard.
+	if (_owner->_opl3Mode) {
+		//_maxNotes = value;
+		return;
+	}
+
 	AdLibVoice *voice;
 
 	_detuneEff = value;
@@ -815,6 +1207,13 @@ void AdLibPart::allNotesOff() {
 }
 
 void AdLibPart::sysEx_customInstrument(uint32 type, const byte *instr) {
+	// Sam&Max allows for instrument overwrites, but we will not support it
+	// until we can find any track actually using it.
+	if (_owner->_opl3Mode) {
+		warning("AdLibPart::sysEx_customInstrument: Used in OPL3 mode");
+		return;
+	}
+
 	if (type == 'ADL ') {
 		memcpy(&_partInstr, instr, sizeof(AdLibInstrument));
 	}
@@ -852,7 +1251,8 @@ void AdLibPercussionChannel::noteOff(byte note) {
 }
 
 void AdLibPercussionChannel::noteOn(byte note, byte velocity) {
-	AdLibInstrument *inst = NULL;
+	const AdLibInstrument *inst = NULL;
+	const AdLibInstrument *sec  = NULL;
 
 	// The custom instruments have priority over the default mapping
 	inst = _customInstruments[note];
@@ -862,8 +1262,14 @@ void AdLibPercussionChannel::noteOn(byte note, byte velocity) {
 	if (!inst) {
 		// Use the default GM to FM mapping as a fallback
 		byte key = g_gmPercussionInstrumentMap[note];
-		if (key != 0xFF)
-			inst = &g_gmPercussionInstruments[key];
+		if (key != 0xFF) {
+			if (!_owner->_opl3Mode) {
+				inst = &g_gmPercussionInstruments[key];
+			} else {
+				inst = &g_gmPercussionInstrumentsOPL3[key][0];
+				sec  = &g_gmPercussionInstrumentsOPL3[key][1];
+			}
+		}
 	}
 
 	if (!inst) {
@@ -871,7 +1277,7 @@ void AdLibPercussionChannel::noteOn(byte note, byte velocity) {
 		return;
 	}
 
-	_owner->partKeyOn(this, inst, note, velocity);
+	_owner->partKeyOn(this, inst, note, velocity, sec, _pan);
 }
 
 void AdLibPercussionChannel::sysEx_customInstrument(uint32 type, const byte *instr) {
@@ -907,11 +1313,13 @@ MidiDriver_ADLIB::MidiDriver_ADLIB(Audio::Mixer *mixer)
 	uint i;
 
 	_scummSmallHeader = false;
+	_opl3Mode = false;
 
 	_regCache = 0;
+	_regCacheSecondary = 0;
 
 	_timerCounter = 0;
-	_voiceIndex = 0;
+	_voiceIndex = -1;
 	for (i = 0; i < ARRAYSIZE(_curNotTable); ++i) {
 		_curNotTable[i] = 0;
 	}
@@ -922,6 +1330,7 @@ MidiDriver_ADLIB::MidiDriver_ADLIB(Audio::Mixer *mixer)
 	_percussion.init(this, 9);
 	_timerIncrease = 0xD69;
 	_timerThreshold = 0x411B;
+	_opl = 0;
 }
 
 int MidiDriver_ADLIB::open() {
@@ -939,15 +1348,29 @@ int MidiDriver_ADLIB::open() {
 		voice->_s11b.s10 = &voice->_s10a;
 	}
 
-	_regCache = (byte *)calloc(256, 1);
+	// Try to use OPL3 when requested.
+	if (_opl3Mode) {
+		_opl = OPL::Config::create(OPL::Config::kOpl3);
+	}
 
-	_opl = OPL::Config::create();
+	// Initialize plain OPL2 when no OPL3 is intiailized already.
+	if (!_opl) {
+		_opl = OPL::Config::create();
+		_opl3Mode = false;
+	}
 	_opl->init(getRate());
 
-	adlibWrite(1, 0x20);
+	_regCache = (byte *)calloc(256, 1);
+
 	adlibWrite(8, 0x40);
 	adlibWrite(0xBD, 0x00);
-	createLookupTable();
+	if (!_opl3Mode) {
+		adlibWrite(1, 0x20);
+		createLookupTable();
+	} else {
+		_regCacheSecondary = (byte *)calloc(256, 1);
+		adlibWriteSecondary(5, 1);
+	}
 
 	_mixer->playStream(Audio::Mixer::kPlainSoundType, &_mixerSoundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true);
 
@@ -969,8 +1392,10 @@ void MidiDriver_ADLIB::close() {
 
 	// Turn off the OPL emulation
 	delete _opl;
+	_opl = 0;
 
 	free(_regCache);
+	free(_regCacheSecondary);
 }
 
 void MidiDriver_ADLIB::send(uint32 b) {
@@ -1032,12 +1457,21 @@ uint32 MidiDriver_ADLIB::property(int prop, uint32 param) {
 			_timerThreshold = 0x411B;
 		}
 		return 1;
+
+	case PROP_SCUMM_OPL3: // Sam&Max OPL3 support.
+		_opl3Mode = (param > 0);
+		return 1;
 	}
 
 	return 0;
 }
 
 void MidiDriver_ADLIB::setPitchBendRange(byte channel, uint range) {
+	// Not supported in OPL3 mode.
+	if (_opl3Mode) {
+		return;
+	}
+
 	AdLibVoice *voice;
 	AdLibPart *part = &_parts[channel];
 
@@ -1069,8 +1503,9 @@ MidiChannel *MidiDriver_ADLIB::allocateChannel() {
 // All the code brought over from IMuseAdLib
 
 void MidiDriver_ADLIB::adlibWrite(byte reg, byte value) {
-	if (_regCache[reg] == value)
+	if (_regCache[reg] == value) {
 		return;
+	}
 #ifdef DEBUG_ADLIB
 	debug(6, "%10d: adlibWrite[%x] = %x", g_tick, reg, value);
 #endif
@@ -1079,37 +1514,50 @@ void MidiDriver_ADLIB::adlibWrite(byte reg, byte value) {
 	_opl->writeReg(reg, value);
 }
 
+void MidiDriver_ADLIB::adlibWriteSecondary(byte reg, byte value) {
+	assert(_opl3Mode);
+
+	if (_regCacheSecondary[reg] == value) {
+		return;
+	}
+#ifdef DEBUG_ADLIB
+	debug(6, "%10d: adlibWriteSecondary[%x] = %x", g_tick, reg, value);
+#endif
+	_regCacheSecondary[reg] = value;
+
+	_opl->writeReg(reg | 0x100, value);
+}
+
 void MidiDriver_ADLIB::generateSamples(int16 *data, int len) {
 	if (_opl->isStereo()) {
 		len *= 2;
 	}
-
 	_opl->readBuffer(data, len);
 }
 
 void MidiDriver_ADLIB::onTimer() {
-	AdLibVoice *voice;
-	int i;
-
 	_timerCounter += _timerIncrease;
 	while (_timerCounter >= _timerThreshold) {
 		_timerCounter -= _timerThreshold;
 #ifdef DEBUG_ADLIB
 		g_tick++;
 #endif
-		voice = _voices;
-		for (i = 0; i != ARRAYSIZE(_voices); i++, voice++) {
-			if (!voice->_part)
-				continue;
-			if (voice->_duration && (voice->_duration -= 0x11) <= 0) {
-				mcOff(voice);
-				return;
-			}
-			if (voice->_s10a.active) {
-				mcIncStuff(voice, &voice->_s10a, &voice->_s11a);
-			}
-			if (voice->_s10b.active) {
-				mcIncStuff(voice, &voice->_s10b, &voice->_s11b);
+		// Sam&Max's OPL3 driver does not have any timer handling like this.
+		if (!_opl3Mode) {
+			AdLibVoice *voice = _voices;
+			for (int i = 0; i != ARRAYSIZE(_voices); i++, voice++) {
+				if (!voice->_part)
+					continue;
+				if (voice->_duration && (voice->_duration -= 0x11) <= 0) {
+					mcOff(voice);
+					return;
+				}
+				if (voice->_s10a.active) {
+					mcIncStuff(voice, &voice->_s10a, &voice->_s11a);
+				}
+				if (voice->_s10b.active) {
+					mcIncStuff(voice, &voice->_s10b, &voice->_s11b);
+				}
 			}
 		}
 	}
@@ -1179,6 +1627,9 @@ void MidiDriver_ADLIB::mcIncStuff(AdLibVoice *voice, Struct10 *s10, Struct11 *s1
 void MidiDriver_ADLIB::adlibKeyOff(int chan) {
 	byte reg = chan + 0xB0;
 	adlibWrite(reg, adlibGetRegValue(reg) & ~0x20);
+	if (_opl3Mode) {
+		adlibWriteSecondary(reg, adlibGetRegValueSecondary(reg) & ~0x20);
+	}
 }
 
 byte MidiDriver_ADLIB::struct10OnTimer(Struct10 *s10, Struct11 *s11) {
@@ -1224,11 +1675,12 @@ byte MidiDriver_ADLIB::struct10OnTimer(Struct10 *s10, Struct11 *s11) {
 	return result;
 }
 
-void MidiDriver_ADLIB::adlibSetParam(int channel, byte param, int value) {
+void MidiDriver_ADLIB::adlibSetParam(int channel, byte param, int value, bool primary) {
 	const AdLibSetParams *as;
 	byte reg;
 
 	assert(channel >= 0 && channel < 9);
+	assert(!_opl3Mode || (param == 0 || param == 13));
 
 	if (param <= 12) {
 		reg = g_operator2Offsets[channel];
@@ -1255,10 +1707,16 @@ void MidiDriver_ADLIB::adlibSetParam(int channel, byte param, int value) {
 	if (as->inversion)
 		value = as->inversion - value;
 	reg += as->registerBase;
-	adlibWrite(reg, (adlibGetRegValue(reg) & ~as->mask) | (((byte)value) << as->shift));
+	if (primary) {
+		adlibWrite(reg, (adlibGetRegValue(reg) & ~as->mask) | (((byte)value) << as->shift));
+	} else {
+		adlibWriteSecondary(reg, (adlibGetRegValueSecondary(reg) & ~as->mask) | (((byte)value) << as->shift));
+	}
 }
 
 void MidiDriver_ADLIB::adlibKeyOnOff(int channel) {
+	assert(!_opl3Mode);
+
 	byte val;
 	byte reg = channel + 0xB0;
 	assert(channel >= 0 && channel < 9);
@@ -1377,7 +1835,7 @@ void MidiDriver_ADLIB::partKeyOff(AdLibPart *part, byte note) {
 	}
 }
 
-void MidiDriver_ADLIB::partKeyOn(AdLibPart *part, AdLibInstrument *instr, byte note, byte velocity) {
+void MidiDriver_ADLIB::partKeyOn(AdLibPart *part, const AdLibInstrument *instr, byte note, byte velocity, const AdLibInstrument *second, byte pan) {
 	AdLibVoice *voice;
 
 	voice = allocateVoice(part->_priEff);
@@ -1385,7 +1843,7 @@ void MidiDriver_ADLIB::partKeyOn(AdLibPart *part, AdLibInstrument *instr, byte n
 		return;
 
 	linkMc(part, voice);
-	mcKeyOn(voice, instr, note, velocity);
+	mcKeyOn(voice, instr, note, velocity, second, pan);
 }
 
 AdLibVoice *MidiDriver_ADLIB::allocateVoice(byte pri) {
@@ -1425,10 +1883,10 @@ void MidiDriver_ADLIB::linkMc(AdLibPart *part, AdLibVoice *voice) {
 		voice->_next->_prev = voice;
 }
 
-void MidiDriver_ADLIB::mcKeyOn(AdLibVoice *voice, AdLibInstrument *instr, byte note, byte velocity) {
+void MidiDriver_ADLIB::mcKeyOn(AdLibVoice *voice, const AdLibInstrument *instr, byte note, byte velocity, const AdLibInstrument *second, byte pan) {
 	AdLibPart *part = voice->_part;
-	int c;
 	byte vol1, vol2;
+	byte secVol1, secVol2;
 
 	voice->_twoChan = instr->feedback & 1;
 	voice->_note = note;
@@ -1437,52 +1895,81 @@ void MidiDriver_ADLIB::mcKeyOn(AdLibVoice *voice, AdLibInstrument *instr, byte n
 	if (voice->_duration != 0)
 		voice->_duration *= 63;
 
-	if (!_scummSmallHeader)
+	if (!_opl3Mode)
 		vol1 = (instr->modScalingOutputLevel & 0x3F) + g_volumeLookupTable[velocity >> 1][instr->modWaveformSelect >> 2];
+	else if (!_scummSmallHeader)
+		vol1 = (instr->modScalingOutputLevel & 0x3F) + (velocity * ((instr->modWaveformSelect >> 3) + 1)) / 64;
 	else
 		vol1 = 0x3f - (instr->modScalingOutputLevel & 0x3F);
 	if (vol1 > 0x3F)
 		vol1 = 0x3F;
 	voice->_vol1 = vol1;
 
-	if (!_scummSmallHeader)
+	if (!_opl3Mode)
 		vol2 = (instr->carScalingOutputLevel & 0x3F) + g_volumeLookupTable[velocity >> 1][instr->carWaveformSelect >> 2];
+	else if (!_scummSmallHeader)
+		vol2 = (instr->carScalingOutputLevel & 0x3F) + (velocity * ((instr->carWaveformSelect >> 3) + 1)) / 64;
 	else
 		vol2 = 0x3f - (instr->carScalingOutputLevel & 0x3F);
 	if (vol2 > 0x3F)
 		vol2 = 0x3F;
 	voice->_vol2 = vol2;
 
-	c = part->_volEff >> 2;
+	if (_opl3Mode) {
+		voice->_secTwoChan = second->feedback & 1;
+		secVol1 = (second->modScalingOutputLevel & 0x3F) + (velocity * ((second->modWaveformSelect >> 3) + 1)) / 64;
+		if (secVol1 > 0x3F) {
+			secVol1 = 0x3F;
+		}
+		voice->_secVol1 = secVol1;
+		secVol2 = (second->carScalingOutputLevel & 0x3F) + (velocity * ((second->carWaveformSelect >> 3) + 1)) / 64;
+		if (secVol2 > 0x3F) {
+			secVol2 = 0x3F;
+		}
+		voice->_secVol2 = secVol2;
+	}
 
 	if (!_scummSmallHeader) {
-		vol2 = g_volumeTable[g_volumeLookupTable[vol2][c]];
-		if (voice->_twoChan)
-			vol1 = g_volumeTable[g_volumeLookupTable[vol1][c]];
+		if (!_opl3Mode) {
+			int c = part->_volEff >> 2;
+			vol2 = g_volumeTable[g_volumeLookupTable[vol2][c]];
+			if (voice->_twoChan)
+				vol1 = g_volumeTable[g_volumeLookupTable[vol1][c]];
+		} else {
+			vol2    = g_volumeTable[((vol2    + 1) * part->_volEff) >> 7];
+			secVol2 = g_volumeTable[((secVol2 + 1) * part->_volEff) >> 7];
+			if (voice->_twoChan)
+				vol1    = g_volumeTable[((vol1    + 1) * part->_volEff) >> 7];
+			if (voice->_secTwoChan)
+				secVol1 = g_volumeTable[((secVol1 + 1) * part->_volEff) >> 7];
+		}
 	}
 
 	adlibSetupChannel(voice->_channel, instr, vol1, vol2);
-	adlibNoteOnEx(voice->_channel, /*part->_transposeEff + */note, part->_detuneEff + (part->_pitchBend * part->_pitchBendFactor >> 6));
+	if (!_opl3Mode) {
+		adlibNoteOnEx(voice->_channel, /*part->_transposeEff + */note, part->_detuneEff + (part->_pitchBend * part->_pitchBendFactor >> 6));
 
-	if (instr->flagsA & 0x80) {
-		mcInitStuff(voice, &voice->_s10a, &voice->_s11a, instr->flagsA, &instr->extraA);
-	} else {
-		voice->_s10a.active = 0;
-	}
+		if (instr->flagsA & 0x80) {
+			mcInitStuff(voice, &voice->_s10a, &voice->_s11a, instr->flagsA, &instr->extraA);
+		} else {
+			voice->_s10a.active = 0;
+		}
 
-	if (instr->flagsB & 0x80) {
-		mcInitStuff(voice, &voice->_s10b, &voice->_s11b, instr->flagsB, &instr->extraB);
+		if (instr->flagsB & 0x80) {
+			mcInitStuff(voice, &voice->_s10b, &voice->_s11b, instr->flagsB, &instr->extraB);
+		} else {
+			voice->_s10b.active = 0;
+		}
 	} else {
-		voice->_s10b.active = 0;
+		adlibSetupChannelSecondary(voice->_channel, second, secVol1, secVol2, pan);
+		adlibNoteOnEx(voice->_channel, note, part->_pitchBend >> 1);
 	}
 }
 
-void MidiDriver_ADLIB::adlibSetupChannel(int chan, AdLibInstrument *instr, byte vol1, byte vol2) {
-	byte channel;
-
+void MidiDriver_ADLIB::adlibSetupChannel(int chan, const AdLibInstrument *instr, byte vol1, byte vol2) {
 	assert(chan >= 0 && chan < 9);
 
-	channel = g_operator1Offsets[chan];
+	byte channel = g_operator1Offsets[chan];
 	adlibWrite(channel + 0x20, instr->modCharacteristic);
 	adlibWrite(channel + 0x40, (instr->modScalingOutputLevel | 0x3F) - vol1);
 	adlibWrite(channel + 0x60, 0xff & (~instr->modAttackDecay));
@@ -1496,20 +1983,40 @@ void MidiDriver_ADLIB::adlibSetupChannel(int chan, AdLibInstrument *instr, byte
 	adlibWrite(channel + 0x80, 0xff & (~instr->carSustainRelease));
 	adlibWrite(channel + 0xE0, instr->carWaveformSelect);
 
-	adlibWrite((byte)chan + 0xC0, instr->feedback);
+	adlibWrite((byte)chan + 0xC0, instr->feedback | (_opl3Mode ? 0x30 : 0));
 }
 
-void MidiDriver_ADLIB::adlibNoteOnEx(int chan, byte note, int mod) {
-	int code;
+void MidiDriver_ADLIB::adlibSetupChannelSecondary(int chan, const AdLibInstrument *instr, byte vol1, byte vol2, byte pan) {
 	assert(chan >= 0 && chan < 9);
-	code = (note << 7) + mod;
-	_curNotTable[chan] = code;
-	_channelTable2[chan] = 0;
-	adlibPlayNote(chan, code);
+	assert(_opl3Mode);
+
+	byte channel = g_operator1Offsets[chan];
+	adlibWriteSecondary(channel + 0x20, instr->modCharacteristic);
+	adlibWriteSecondary(channel + 0x40, (instr->modScalingOutputLevel | 0x3F) - vol1);
+	adlibWriteSecondary(channel + 0x60, 0xff & (~instr->modAttackDecay));
+	adlibWriteSecondary(channel + 0x80, 0xff & (~instr->modSustainRelease));
+	adlibWriteSecondary(channel + 0xE0, instr->modWaveformSelect);
+
+	channel = g_operator2Offsets[chan];
+	adlibWriteSecondary(channel + 0x20, instr->carCharacteristic);
+	adlibWriteSecondary(channel + 0x40, (instr->carScalingOutputLevel | 0x3F) - vol2);
+	adlibWriteSecondary(channel + 0x60, 0xff & (~instr->carAttackDecay));
+	adlibWriteSecondary(channel + 0x80, 0xff & (~instr->carSustainRelease));
+	adlibWriteSecondary(channel + 0xE0, instr->carWaveformSelect);
+
+	// The original uses the following (strange) behavior:
+#if 0
+	if (instr->feedback | (pan > 64)) {
+		adlibWriteSecondary((byte)chan + 0xC0, 0x10);
+	} else {
+		adlibWriteSecondary((byte)chan + 0xC0, 0x20);
+	}
+#endif
+	adlibWriteSecondary((byte)chan + 0xC0, instr->feedback | ((pan > 64) ? 0x20 : 0x10));
 }
 
 void MidiDriver_ADLIB::mcInitStuff(AdLibVoice *voice, Struct10 *s10,
-									 Struct11 *s11, byte flags, InstrumentExtra *ie) {
+									 Struct11 *s11, byte flags, const InstrumentExtra *ie) {
 	AdLibPart *part = voice->_part;
 	s11->modifyVal = 0;
 	s11->flag0x40 = flags & 0x40;
@@ -1546,7 +2053,7 @@ void MidiDriver_ADLIB::mcInitStuff(AdLibVoice *voice, Struct10 *s10,
 	struct10Init(s10, ie);
 }
 
-void MidiDriver_ADLIB::struct10Init(Struct10 *s10, InstrumentExtra *ie) {
+void MidiDriver_ADLIB::struct10Init(Struct10 *s10, const InstrumentExtra *ie) {
 	s10->active = 1;
 	if (!_scummSmallHeader) {
 		s10->curVal = 0;
@@ -1605,13 +2112,35 @@ int MidiDriver_ADLIB::adlibGetRegValueParam(int chan, byte param) {
 }
 
 void MidiDriver_ADLIB::adlibNoteOn(int chan, byte note, int mod) {
-	int code;
+	if (_opl3Mode) {
+		adlibNoteOnEx(chan, note, mod);
+		return;
+	}
+
 	assert(chan >= 0 && chan < 9);
-	code = (note << 7) + mod;
+	int code = (note << 7) + mod;
 	_curNotTable[chan] = code;
 	adlibPlayNote(chan, (int16)_channelTable2[chan] + code);
 }
 
+void MidiDriver_ADLIB::adlibNoteOnEx(int chan, byte note, int mod) {
+	assert(chan >= 0 && chan < 9);
+
+	if (_opl3Mode) {
+		const int noteAdjusted = note + (mod >> 8) - 7;
+		const int pitchAdjust = (mod >> 5) & 7;
+
+		adlibWrite(0xA0 + chan, g_noteFrequencies[(noteAdjusted % 12) * 8 + pitchAdjust + 6 * 8]);
+		adlibWriteSecondary(0xA0 + chan, g_noteFrequencies[(noteAdjusted % 12) * 8 + pitchAdjust + 6 * 8]);
+		adlibWrite(0xB0 + chan, (CLIP(noteAdjusted / 12, 0, 7) << 2) | 0x20);
+		adlibWriteSecondary(0xB0 + chan, (CLIP(noteAdjusted / 12, 0, 7) << 2) | 0x20);
+	} else {
+		int code = (note << 7) + mod;
+		_curNotTable[chan] = code;
+		_channelTable2[chan] = 0;
+		adlibPlayNote(chan, code);
+	}
+}
 
 // Plugin interface
 
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 2c79fb8..6a4fe23 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -1858,6 +1858,8 @@ void ScummEngine::setupMusic(int midi) {
 			if (_sound->_musicType == MDT_ADLIB || _sound->_musicType == MDT_TOWNS || multi_midi) {
 				adlibMidiDriver = MidiDriver::createMidi(MidiDriver::detectDevice(_sound->_musicType == MDT_TOWNS ? MDT_TOWNS : MDT_ADLIB));
 				adlibMidiDriver->property(MidiDriver::PROP_OLD_ADLIB, (_game.features & GF_SMALL_HEADER) ? 1 : 0);
+				// Try to use OPL3 mode for Sam&Max when possible.
+				adlibMidiDriver->property(MidiDriver::PROP_SCUMM_OPL3, (_game.id == GID_SAMNMAX) ? 1 : 0);
 			} else if (_sound->_musicType == MDT_PCSPK) {
 				adlibMidiDriver = new PcSpkDriver(_mixer);
 			}


Commit: 40ab5f878896006c0997626496511536fbb045b9
    https://github.com/scummvm/scummvm/commit/40ab5f878896006c0997626496511536fbb045b9
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-09-30T18:11:09-07:00

Commit Message:
SCUMM: Ignore detune for Sam&Max.

Changed paths:
    engines/scumm/imuse/imuse_part.cpp



diff --git a/engines/scumm/imuse/imuse_part.cpp b/engines/scumm/imuse/imuse_part.cpp
index 89c16a8..5e928f3 100644
--- a/engines/scumm/imuse/imuse_part.cpp
+++ b/engines/scumm/imuse/imuse_part.cpp
@@ -111,8 +111,19 @@ void Part::saveLoadWithSerializer(Serializer *ser) {
 }
 
 void Part::set_detune(int8 detune) {
-	_detune_eff = clamp((_detune = detune) + _player->getDetune(), -128, 127);
-	sendPitchBend();
+	// Sam&Max does not have detune, so we just ignore this here. We still get
+	// this called, since Sam&Max uses the same controller for a different
+	// purpose.
+	if (_se->_game_id == GID_SAMNMAX) {
+#if 0
+		if (_mc) {
+			_mc->controlChange(17, detune + 0x40);
+		}
+#endif
+	} else {
+		_detune_eff = clamp((_detune = detune) + _player->getDetune(), -128, 127);
+		sendPitchBend();
+	}
 }
 
 void Part::pitchBend(int16 value) {


Commit: be60a641bfb624c0b1b455c751790b28cdcdd45f
    https://github.com/scummvm/scummvm/commit/be60a641bfb624c0b1b455c751790b28cdcdd45f
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-11-19T18:27:12-08:00

Commit Message:
AUDIO: Slight cleanup and typo fix in S&M OPL3 code.

Changed paths:
    audio/softsynth/adlib.cpp



diff --git a/audio/softsynth/adlib.cpp b/audio/softsynth/adlib.cpp
index ba39e6d..eb2f109 100644
--- a/audio/softsynth/adlib.cpp
+++ b/audio/softsynth/adlib.cpp
@@ -2007,12 +2007,13 @@ void MidiDriver_ADLIB::adlibSetupChannelSecondary(int chan, const AdLibInstrumen
 	// The original uses the following (strange) behavior:
 #if 0
 	if (instr->feedback | (pan > 64)) {
-		adlibWriteSecondary((byte)chan + 0xC0, 0x10);
-	} else {
 		adlibWriteSecondary((byte)chan + 0xC0, 0x20);
+	} else {
+		adlibWriteSecondary((byte)chan + 0xC0, 0x10);
 	}
-#endif
+#else
 	adlibWriteSecondary((byte)chan + 0xC0, instr->feedback | ((pan > 64) ? 0x20 : 0x10));
+#endif
 }
 
 void MidiDriver_ADLIB::mcInitStuff(AdLibVoice *voice, Struct10 *s10,


Commit: 689497f06e8563d7fc02df268e47dc36a576cd61
    https://github.com/scummvm/scummvm/commit/689497f06e8563d7fc02df268e47dc36a576cd61
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-11-21T17:18:51-08:00

Commit Message:
AUDIO: Only enable OPL3 code in MIDI->AdLib, when we have the DOSBox emulator builtin.

Changed paths:
    audio/softsynth/adlib.cpp



diff --git a/audio/softsynth/adlib.cpp b/audio/softsynth/adlib.cpp
index eb2f109..2fd620a 100644
--- a/audio/softsynth/adlib.cpp
+++ b/audio/softsynth/adlib.cpp
@@ -35,6 +35,12 @@
 static int g_tick;
 #endif
 
+// Only include OPL3 when we actually have an AdLib emulator builtin, which
+// supports OPL3.
+#ifndef DISABLE_DOSBOX_OPL
+#define ENABLE_OPL3
+#endif
+
 class MidiDriver_ADLIB;
 struct AdLibVoice;
 
@@ -88,7 +94,9 @@ protected:
 	byte _priEff;
 	byte _pan;
 	AdLibInstrument _partInstr;
+#ifdef ENABLE_OPL3
 	AdLibInstrument _partInstrSecondary;
+#endif
 
 protected:
 	MidiDriver_ADLIB *_owner;
@@ -117,7 +125,9 @@ public:
 		_channel = 0;
 
 		memset(&_partInstr, 0, sizeof(_partInstr));
+#ifdef ENABLE_OPL3
 		memset(&_partInstrSecondary, 0, sizeof(_partInstrSecondary));
+#endif
 	}
 
 	MidiDriver *device();
@@ -223,8 +233,10 @@ struct AdLibVoice {
 	Struct10 _s10b;
 	Struct11 _s11b;
 
+#ifdef ENABLE_OPL3
 	byte _secTwoChan;
 	byte _secVol1, _secVol2;
+#endif
 
 	AdLibVoice() { memset(this, 0, sizeof(AdLibVoice)); }
 };
@@ -493,6 +505,7 @@ static AdLibInstrument g_gmPercussionInstruments[39] = {
 	{ 0x0A, 0x0E, 0x7F, 0x00, 0x7D, 0x13, 0x20, 0x28, 0x03, 0x7C, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 }
 };
 
+#ifdef ENABLE_OPL3
 static const AdLibInstrument g_gmInstrumentsOPL3[128][2] = {
 	{ { 0xC2, 0xC2, 0x0A, 0x6B, 0xA0, 0xC2, 0x08, 0x0D, 0x88, 0xC8, 0x0A, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x23 },
 	  { 0x02, 0x00, 0x0C, 0x78, 0x61, 0x04, 0x4C, 0x0B, 0x9A, 0xC8, 0x04, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x23 } },
@@ -832,6 +845,7 @@ static const AdLibInstrument g_gmPercussionInstrumentsOPL3[39][2] = {
 	{ { 0x0A, 0x0E, 0x7F, 0x00, 0xF9, 0x13, 0x16, 0x28, 0x03, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
 	  { 0x01, 0x0E, 0x54, 0x00, 0xF9, 0x15, 0x03, 0x27, 0x03, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
 };
+#endif
 
 static const byte g_gmPercussionInstrumentMap[128] = {
 	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
@@ -938,11 +952,15 @@ public:
 
 private:
 	bool _scummSmallHeader; // FIXME: This flag controls a special mode for SCUMM V3 games
+#ifdef ENABLE_OPL3
 	bool _opl3Mode;
+#endif
 
 	OPL::OPL *_opl;
 	byte *_regCache;
+#ifdef ENABLE_OPL3
 	byte *_regCacheSecondary;
+#endif
 
 	int _timerCounter;
 
@@ -965,17 +983,23 @@ private:
 	void adlibNoteOnEx(int chan, byte note, int mod);
 	int adlibGetRegValueParam(int chan, byte data);
 	void adlibSetupChannel(int chan, const AdLibInstrument *instr, byte vol1, byte vol2);
+#ifdef ENABLE_OPL3
 	void adlibSetupChannelSecondary(int chan, const AdLibInstrument *instr, byte vol1, byte vol2, byte pan);
+#endif
 	byte adlibGetRegValue(byte reg) {
 		return _regCache[reg];
 	}
+#ifdef ENABLE_OPL3
 	byte adlibGetRegValueSecondary(byte reg) {
 		return _regCacheSecondary[reg];
 	}
+#endif
 	void adlibSetParam(int channel, byte param, int value, bool primary = true);
 	void adlibKeyOnOff(int channel);
 	void adlibWrite(byte reg, byte value);
+#ifdef ENABLE_OPL3
 	void adlibWriteSecondary(byte reg, byte value);
+#endif
 	void adlibPlayNote(int channel, int note);
 
 	AdLibVoice *allocateVoice(byte pri);
@@ -1022,7 +1046,13 @@ void AdLibPart::noteOn(byte note, byte velocity) {
 #ifdef DEBUG_ADLIB
 	debug(6, "%10d: noteOn(%d,%d)", g_tick, note, velocity);
 #endif
-	_owner->partKeyOn(this, &_partInstr, note, velocity, &_partInstrSecondary, _pan);
+	_owner->partKeyOn(this, &_partInstr, note, velocity,
+#ifdef ENABLE_OPL3
+			&_partInstrSecondary,
+#else
+			NULL,
+#endif
+			_pan);
 }
 
 void AdLibPart::programChange(byte program) {
@@ -1038,12 +1068,16 @@ void AdLibPart::programChange(byte program) {
 		warning("No AdLib instrument defined for GM program %d", (int)program);
 	*/
 	_program = program;
+#ifdef ENABLE_OPL3
 	if (!_owner->_opl3Mode) {
+#endif
 		memcpy(&_partInstr, &g_gmInstruments[program], sizeof(AdLibInstrument));
+#ifdef ENABLE_OPL3
 	} else {
 		memcpy(&_partInstr,          &g_gmInstrumentsOPL3[program][0], sizeof(AdLibInstrument));
 		memcpy(&_partInstrSecondary, &g_gmInstrumentsOPL3[program][1], sizeof(AdLibInstrument));
 	}
+#endif
 }
 
 void AdLibPart::pitchBend(int16 bend) {
@@ -1051,12 +1085,16 @@ void AdLibPart::pitchBend(int16 bend) {
 
 	_pitchBend = bend;
 	for (voice = _voice; voice; voice = voice->_next) {
+#ifdef ENABLE_OPL3
 		if (!_owner->_opl3Mode) {
+#endif
 			_owner->adlibNoteOn(voice->_channel, voice->_note/* + _transposeEff*/,
 								  (_pitchBend * _pitchBendFactor >> 6) + _detuneEff);
+#ifdef ENABLE_OPL3
 		} else {
 			_owner->adlibNoteOn(voice->_channel, voice->_note, _pitchBend >> 1);
 		}
+#endif
 	}
 }
 
@@ -1128,11 +1166,14 @@ void AdLibPart::volume(byte value) {
 
 	_volEff = value;
 	for (voice = _voice; voice; voice = voice->_next) {
+#ifdef ENABLE_OPL3
 		if (!_owner->_opl3Mode) {
+#endif
 			_owner->adlibSetParam(voice->_channel, 0, g_volumeTable[g_volumeLookupTable[voice->_vol2][_volEff >> 2]]);
 			if (voice->_twoChan) {
 				_owner->adlibSetParam(voice->_channel, 13, g_volumeTable[g_volumeLookupTable[voice->_vol1][_volEff >> 2]]);
 			}
+#ifdef ENABLE_OPL3
 		} else {
 			_owner->adlibSetParam(voice->_channel, 0, g_volumeTable[((voice->_vol2    + 1) * _volEff) >> 7], true);
 			_owner->adlibSetParam(voice->_channel, 0, g_volumeTable[((voice->_secVol2 + 1) * _volEff) >> 7], false);
@@ -1143,6 +1184,7 @@ void AdLibPart::volume(byte value) {
 				_owner->adlibSetParam(voice->_channel, 13, g_volumeTable[((voice->_secVol1 + 1) * _volEff) >> 7], false);
 			}
 		}
+#endif
 	}
 }
 
@@ -1151,10 +1193,12 @@ void AdLibPart::panPosition(byte value) {
 }
 
 void AdLibPart::pitchBendFactor(byte value) {
+#ifdef ENABLE_OPL3
 	// Not supported in OPL3 mode.
 	if (_owner->_opl3Mode) {
 		return;
 	}
+#endif
 
 	AdLibVoice *voice;
 
@@ -1171,10 +1215,12 @@ void AdLibPart::detune(byte value) {
 	// TODO: We probably need to look how the interpreter side of Sam&Max's
 	// iMuse version handles all this too. Implementing the driver side here
 	// would be not that hard.
+#ifdef ENABLE_OPL3
 	if (_owner->_opl3Mode) {
 		//_maxNotes = value;
 		return;
 	}
+#endif
 
 	AdLibVoice *voice;
 
@@ -1209,10 +1255,12 @@ void AdLibPart::allNotesOff() {
 void AdLibPart::sysEx_customInstrument(uint32 type, const byte *instr) {
 	// Sam&Max allows for instrument overwrites, but we will not support it
 	// until we can find any track actually using it.
+#ifdef ENABLE_OPL3
 	if (_owner->_opl3Mode) {
 		warning("AdLibPart::sysEx_customInstrument: Used in OPL3 mode");
 		return;
 	}
+#endif
 
 	if (type == 'ADL ') {
 		memcpy(&_partInstr, instr, sizeof(AdLibInstrument));
@@ -1263,12 +1311,16 @@ void AdLibPercussionChannel::noteOn(byte note, byte velocity) {
 		// Use the default GM to FM mapping as a fallback
 		byte key = g_gmPercussionInstrumentMap[note];
 		if (key != 0xFF) {
+#ifdef ENABLE_OPL3
 			if (!_owner->_opl3Mode) {
+#endif
 				inst = &g_gmPercussionInstruments[key];
+#ifdef ENABLE_OPL3
 			} else {
 				inst = &g_gmPercussionInstrumentsOPL3[key][0];
 				sec  = &g_gmPercussionInstrumentsOPL3[key][1];
 			}
+#endif
 		}
 	}
 
@@ -1313,10 +1365,14 @@ MidiDriver_ADLIB::MidiDriver_ADLIB(Audio::Mixer *mixer)
 	uint i;
 
 	_scummSmallHeader = false;
+#ifdef ENABLE_OPL3
 	_opl3Mode = false;
+#endif
 
 	_regCache = 0;
+#ifdef ENABLE_OPL3
 	_regCacheSecondary = 0;
+#endif
 
 	_timerCounter = 0;
 	_voiceIndex = -1;
@@ -1349,28 +1405,36 @@ int MidiDriver_ADLIB::open() {
 	}
 
 	// Try to use OPL3 when requested.
+#ifdef ENABLE_OPL3
 	if (_opl3Mode) {
 		_opl = OPL::Config::create(OPL::Config::kOpl3);
 	}
 
 	// Initialize plain OPL2 when no OPL3 is intiailized already.
 	if (!_opl) {
+#endif
 		_opl = OPL::Config::create();
+#ifdef ENABLE_OPL3
 		_opl3Mode = false;
 	}
+#endif
 	_opl->init(getRate());
 
 	_regCache = (byte *)calloc(256, 1);
 
 	adlibWrite(8, 0x40);
 	adlibWrite(0xBD, 0x00);
+#ifdef ENABLE_OPL3
 	if (!_opl3Mode) {
+#endif
 		adlibWrite(1, 0x20);
 		createLookupTable();
+#ifdef ENABLE_OPL3
 	} else {
 		_regCacheSecondary = (byte *)calloc(256, 1);
 		adlibWriteSecondary(5, 1);
 	}
+#endif
 
 	_mixer->playStream(Audio::Mixer::kPlainSoundType, &_mixerSoundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true);
 
@@ -1395,7 +1459,9 @@ void MidiDriver_ADLIB::close() {
 	_opl = 0;
 
 	free(_regCache);
+#ifdef ENABLE_OPL3
 	free(_regCacheSecondary);
+#endif
 }
 
 void MidiDriver_ADLIB::send(uint32 b) {
@@ -1459,7 +1525,9 @@ uint32 MidiDriver_ADLIB::property(int prop, uint32 param) {
 		return 1;
 
 	case PROP_SCUMM_OPL3: // Sam&Max OPL3 support.
+#ifdef ENABLE_OPL3
 		_opl3Mode = (param > 0);
+#endif
 		return 1;
 	}
 
@@ -1467,10 +1535,12 @@ uint32 MidiDriver_ADLIB::property(int prop, uint32 param) {
 }
 
 void MidiDriver_ADLIB::setPitchBendRange(byte channel, uint range) {
+#ifdef ENABLE_OPL3
 	// Not supported in OPL3 mode.
 	if (_opl3Mode) {
 		return;
 	}
+#endif
 
 	AdLibVoice *voice;
 	AdLibPart *part = &_parts[channel];
@@ -1514,6 +1584,7 @@ void MidiDriver_ADLIB::adlibWrite(byte reg, byte value) {
 	_opl->writeReg(reg, value);
 }
 
+#ifdef ENABLE_OPL3
 void MidiDriver_ADLIB::adlibWriteSecondary(byte reg, byte value) {
 	assert(_opl3Mode);
 
@@ -1527,6 +1598,7 @@ void MidiDriver_ADLIB::adlibWriteSecondary(byte reg, byte value) {
 
 	_opl->writeReg(reg | 0x100, value);
 }
+#endif
 
 void MidiDriver_ADLIB::generateSamples(int16 *data, int len) {
 	if (_opl->isStereo()) {
@@ -1543,7 +1615,9 @@ void MidiDriver_ADLIB::onTimer() {
 		g_tick++;
 #endif
 		// Sam&Max's OPL3 driver does not have any timer handling like this.
+#ifdef ENABLE_OPL3
 		if (!_opl3Mode) {
+#endif
 			AdLibVoice *voice = _voices;
 			for (int i = 0; i != ARRAYSIZE(_voices); i++, voice++) {
 				if (!voice->_part)
@@ -1559,7 +1633,9 @@ void MidiDriver_ADLIB::onTimer() {
 					mcIncStuff(voice, &voice->_s10b, &voice->_s11b);
 				}
 			}
+#ifdef ENABLE_OPL3
 		}
+#endif
 	}
 }
 
@@ -1627,9 +1703,11 @@ void MidiDriver_ADLIB::mcIncStuff(AdLibVoice *voice, Struct10 *s10, Struct11 *s1
 void MidiDriver_ADLIB::adlibKeyOff(int chan) {
 	byte reg = chan + 0xB0;
 	adlibWrite(reg, adlibGetRegValue(reg) & ~0x20);
+#ifdef ENABLE_OPL3
 	if (_opl3Mode) {
 		adlibWriteSecondary(reg, adlibGetRegValueSecondary(reg) & ~0x20);
 	}
+#endif
 }
 
 byte MidiDriver_ADLIB::struct10OnTimer(Struct10 *s10, Struct11 *s11) {
@@ -1680,7 +1758,9 @@ void MidiDriver_ADLIB::adlibSetParam(int channel, byte param, int value, bool pr
 	byte reg;
 
 	assert(channel >= 0 && channel < 9);
+#ifdef ENABLE_OPL3
 	assert(!_opl3Mode || (param == 0 || param == 13));
+#endif
 
 	if (param <= 12) {
 		reg = g_operator2Offsets[channel];
@@ -1707,15 +1787,21 @@ void MidiDriver_ADLIB::adlibSetParam(int channel, byte param, int value, bool pr
 	if (as->inversion)
 		value = as->inversion - value;
 	reg += as->registerBase;
+#ifdef ENABLE_OPL3
 	if (primary) {
+#endif
 		adlibWrite(reg, (adlibGetRegValue(reg) & ~as->mask) | (((byte)value) << as->shift));
+#ifdef ENABLE_OPL3
 	} else {
 		adlibWriteSecondary(reg, (adlibGetRegValueSecondary(reg) & ~as->mask) | (((byte)value) << as->shift));
 	}
+#endif
 }
 
 void MidiDriver_ADLIB::adlibKeyOnOff(int channel) {
+#ifdef ENABLE_OPL3
 	assert(!_opl3Mode);
+#endif
 
 	byte val;
 	byte reg = channel + 0xB0;
@@ -1886,7 +1972,9 @@ void MidiDriver_ADLIB::linkMc(AdLibPart *part, AdLibVoice *voice) {
 void MidiDriver_ADLIB::mcKeyOn(AdLibVoice *voice, const AdLibInstrument *instr, byte note, byte velocity, const AdLibInstrument *second, byte pan) {
 	AdLibPart *part = voice->_part;
 	byte vol1, vol2;
+#ifdef ENABLE_OPL3
 	byte secVol1, secVol2;
+#endif
 
 	voice->_twoChan = instr->feedback & 1;
 	voice->_note = note;
@@ -1895,9 +1983,12 @@ void MidiDriver_ADLIB::mcKeyOn(AdLibVoice *voice, const AdLibInstrument *instr,
 	if (voice->_duration != 0)
 		voice->_duration *= 63;
 
+#ifdef ENABLE_OPL3
 	if (!_opl3Mode)
 		vol1 = (instr->modScalingOutputLevel & 0x3F) + g_volumeLookupTable[velocity >> 1][instr->modWaveformSelect >> 2];
-	else if (!_scummSmallHeader)
+	else
+#endif
+	if (!_scummSmallHeader)
 		vol1 = (instr->modScalingOutputLevel & 0x3F) + (velocity * ((instr->modWaveformSelect >> 3) + 1)) / 64;
 	else
 		vol1 = 0x3f - (instr->modScalingOutputLevel & 0x3F);
@@ -1905,9 +1996,12 @@ void MidiDriver_ADLIB::mcKeyOn(AdLibVoice *voice, const AdLibInstrument *instr,
 		vol1 = 0x3F;
 	voice->_vol1 = vol1;
 
+#ifdef ENABLE_OPL3
 	if (!_opl3Mode)
 		vol2 = (instr->carScalingOutputLevel & 0x3F) + g_volumeLookupTable[velocity >> 1][instr->carWaveformSelect >> 2];
-	else if (!_scummSmallHeader)
+	else
+#endif
+	if (!_scummSmallHeader)
 		vol2 = (instr->carScalingOutputLevel & 0x3F) + (velocity * ((instr->carWaveformSelect >> 3) + 1)) / 64;
 	else
 		vol2 = 0x3f - (instr->carScalingOutputLevel & 0x3F);
@@ -1915,6 +2009,7 @@ void MidiDriver_ADLIB::mcKeyOn(AdLibVoice *voice, const AdLibInstrument *instr,
 		vol2 = 0x3F;
 	voice->_vol2 = vol2;
 
+#ifdef ENABLE_OPL3
 	if (_opl3Mode) {
 		voice->_secTwoChan = second->feedback & 1;
 		secVol1 = (second->modScalingOutputLevel & 0x3F) + (velocity * ((second->modWaveformSelect >> 3) + 1)) / 64;
@@ -1928,13 +2023,17 @@ void MidiDriver_ADLIB::mcKeyOn(AdLibVoice *voice, const AdLibInstrument *instr,
 		}
 		voice->_secVol2 = secVol2;
 	}
+#endif
 
 	if (!_scummSmallHeader) {
+#ifdef ENABLE_OPL3
 		if (!_opl3Mode) {
+#endif
 			int c = part->_volEff >> 2;
 			vol2 = g_volumeTable[g_volumeLookupTable[vol2][c]];
 			if (voice->_twoChan)
 				vol1 = g_volumeTable[g_volumeLookupTable[vol1][c]];
+#ifdef ENABLE_OPL3
 		} else {
 			vol2    = g_volumeTable[((vol2    + 1) * part->_volEff) >> 7];
 			secVol2 = g_volumeTable[((secVol2 + 1) * part->_volEff) >> 7];
@@ -1943,10 +2042,13 @@ void MidiDriver_ADLIB::mcKeyOn(AdLibVoice *voice, const AdLibInstrument *instr,
 			if (voice->_secTwoChan)
 				secVol1 = g_volumeTable[((secVol1 + 1) * part->_volEff) >> 7];
 		}
+#endif
 	}
 
 	adlibSetupChannel(voice->_channel, instr, vol1, vol2);
+#ifdef ENABLE_OPL3
 	if (!_opl3Mode) {
+#endif
 		adlibNoteOnEx(voice->_channel, /*part->_transposeEff + */note, part->_detuneEff + (part->_pitchBend * part->_pitchBendFactor >> 6));
 
 		if (instr->flagsA & 0x80) {
@@ -1960,10 +2062,12 @@ void MidiDriver_ADLIB::mcKeyOn(AdLibVoice *voice, const AdLibInstrument *instr,
 		} else {
 			voice->_s10b.active = 0;
 		}
+#ifdef ENABLE_OPL3
 	} else {
 		adlibSetupChannelSecondary(voice->_channel, second, secVol1, secVol2, pan);
 		adlibNoteOnEx(voice->_channel, note, part->_pitchBend >> 1);
 	}
+#endif
 }
 
 void MidiDriver_ADLIB::adlibSetupChannel(int chan, const AdLibInstrument *instr, byte vol1, byte vol2) {
@@ -1983,9 +2087,14 @@ void MidiDriver_ADLIB::adlibSetupChannel(int chan, const AdLibInstrument *instr,
 	adlibWrite(channel + 0x80, 0xff & (~instr->carSustainRelease));
 	adlibWrite(channel + 0xE0, instr->carWaveformSelect);
 
-	adlibWrite((byte)chan + 0xC0, instr->feedback | (_opl3Mode ? 0x30 : 0));
+	adlibWrite((byte)chan + 0xC0, instr->feedback
+#ifdef ENABLE_OPL3
+			| (_opl3Mode ? 0x30 : 0)
+#endif
+			);
 }
 
+#ifdef ENABLE_OPL3
 void MidiDriver_ADLIB::adlibSetupChannelSecondary(int chan, const AdLibInstrument *instr, byte vol1, byte vol2, byte pan) {
 	assert(chan >= 0 && chan < 9);
 	assert(_opl3Mode);
@@ -2015,6 +2124,7 @@ void MidiDriver_ADLIB::adlibSetupChannelSecondary(int chan, const AdLibInstrumen
 	adlibWriteSecondary((byte)chan + 0xC0, instr->feedback | ((pan > 64) ? 0x20 : 0x10));
 #endif
 }
+#endif
 
 void MidiDriver_ADLIB::mcInitStuff(AdLibVoice *voice, Struct10 *s10,
 									 Struct11 *s11, byte flags, const InstrumentExtra *ie) {
@@ -2113,10 +2223,12 @@ int MidiDriver_ADLIB::adlibGetRegValueParam(int chan, byte param) {
 }
 
 void MidiDriver_ADLIB::adlibNoteOn(int chan, byte note, int mod) {
+#ifdef ENABLE_OPL3
 	if (_opl3Mode) {
 		adlibNoteOnEx(chan, note, mod);
 		return;
 	}
+#endif
 
 	assert(chan >= 0 && chan < 9);
 	int code = (note << 7) + mod;
@@ -2127,6 +2239,7 @@ void MidiDriver_ADLIB::adlibNoteOn(int chan, byte note, int mod) {
 void MidiDriver_ADLIB::adlibNoteOnEx(int chan, byte note, int mod) {
 	assert(chan >= 0 && chan < 9);
 
+#ifdef ENABLE_OPL3
 	if (_opl3Mode) {
 		const int noteAdjusted = note + (mod >> 8) - 7;
 		const int pitchAdjust = (mod >> 5) & 7;
@@ -2136,11 +2249,14 @@ void MidiDriver_ADLIB::adlibNoteOnEx(int chan, byte note, int mod) {
 		adlibWrite(0xB0 + chan, (CLIP(noteAdjusted / 12, 0, 7) << 2) | 0x20);
 		adlibWriteSecondary(0xB0 + chan, (CLIP(noteAdjusted / 12, 0, 7) << 2) | 0x20);
 	} else {
+#endif
 		int code = (note << 7) + mod;
 		_curNotTable[chan] = code;
 		_channelTable2[chan] = 0;
 		adlibPlayNote(chan, code);
+#ifdef ENABLE_OPL3
 	}
+#endif
 }
 
 // Plugin interface


Commit: 761a98997c0ad74a760a224d84acb72073641b31
    https://github.com/scummvm/scummvm/commit/761a98997c0ad74a760a224d84acb72073641b31
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-11-21T17:22:25-08:00

Commit Message:
AUDIO: Disallow custom percussion instruments in MIDI->AdLib code.

Changed paths:
    audio/softsynth/adlib.cpp



diff --git a/audio/softsynth/adlib.cpp b/audio/softsynth/adlib.cpp
index 2fd620a..85311dd 100644
--- a/audio/softsynth/adlib.cpp
+++ b/audio/softsynth/adlib.cpp
@@ -1303,9 +1303,16 @@ void AdLibPercussionChannel::noteOn(byte note, byte velocity) {
 	const AdLibInstrument *sec  = NULL;
 
 	// The custom instruments have priority over the default mapping
-	inst = _customInstruments[note];
-	if (inst)
-		note = _notes[note];
+	// We do not support custom instruments in OPL3 mode though.
+#ifdef ENABLE_OPL3
+	if (!_owner->_opl3Mode) {
+#endif
+		inst = _customInstruments[note];
+		if (inst)
+			note = _notes[note];
+#ifdef ENABLE_OPL3
+	}
+#endif
 
 	if (!inst) {
 		// Use the default GM to FM mapping as a fallback
@@ -1333,6 +1340,14 @@ void AdLibPercussionChannel::noteOn(byte note, byte velocity) {
 }
 
 void AdLibPercussionChannel::sysEx_customInstrument(uint32 type, const byte *instr) {
+	// We do not allow custom instruments in OPL3 mode right now.
+#ifdef ENABLE_OPL3
+	if (_owner->_opl3Mode) {
+		warning("AdLibPercussionChannel::sysEx_customInstrument: Used in OPL3 mode");
+		return;
+	}
+#endif
+
 	if (type == 'ADLP') {
 		byte note = instr[0];
 		_notes[note] = instr[1];


Commit: 1f69192f7d187ad3948e89f85913df5617306c10
    https://github.com/scummvm/scummvm/commit/1f69192f7d187ad3948e89f85913df5617306c10
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2012-11-21T17:29:57-08:00

Commit Message:
AUDIO: Remove two extra commas.

Changed paths:
    audio/softsynth/adlib.cpp



diff --git a/audio/softsynth/adlib.cpp b/audio/softsynth/adlib.cpp
index 85311dd..6000a41 100644
--- a/audio/softsynth/adlib.cpp
+++ b/audio/softsynth/adlib.cpp
@@ -762,7 +762,7 @@ static const AdLibInstrument g_gmInstrumentsOPL3[128][2] = {
 	{ { 0x08, 0x00, 0x0B, 0x3C, 0xF8, 0x08, 0x3F, 0x06, 0xF3, 0x00, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 },
 	  { 0x08, 0x00, 0x0B, 0x3C, 0xF8, 0x08, 0x3F, 0x06, 0xF3, 0x00, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x02 } },
 	{ { 0x00, 0x3F, 0x4C, 0xFB, 0x00, 0x00, 0x3F, 0x0A, 0xE9, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 },
-	  { 0x00, 0x3F, 0x4C, 0xFB, 0x00, 0x00, 0x3F, 0x0A, 0xE9, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 } },
+	  { 0x00, 0x3F, 0x4C, 0xFB, 0x00, 0x00, 0x3F, 0x0A, 0xE9, 0xF8, 0x0E, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x05 } }
 };
 
 static const AdLibInstrument g_gmPercussionInstrumentsOPL3[39][2] = {
@@ -843,7 +843,7 @@ static const AdLibInstrument g_gmPercussionInstrumentsOPL3[39][2] = {
 	{ { 0x1C, 0x00, 0x07, 0xBC, 0xC8, 0x0C, 0x0A, 0x0B, 0x6A, 0xF2, 0x0B, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 },
 	  { 0x18, 0x00, 0x07, 0xBC, 0x88, 0x09, 0x00, 0x0B, 0x6A, 0xBA, 0x0B, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x03 } },
 	{ { 0x0A, 0x0E, 0x7F, 0x00, 0xF9, 0x13, 0x16, 0x28, 0x03, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 },
-	  { 0x01, 0x0E, 0x54, 0x00, 0xF9, 0x15, 0x03, 0x27, 0x03, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } },
+	  { 0x01, 0x0E, 0x54, 0x00, 0xF9, 0x15, 0x03, 0x27, 0x03, 0xF8, 0x06, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, { 0, 0, 0, 0, 0, 0, 0, 0 }, 0x00 } }
 };
 #endif
 


Commit: 7c2f5e2d0e1df26de3d18e12d1cf644fb80f20e6
    https://github.com/scummvm/scummvm/commit/7c2f5e2d0e1df26de3d18e12d1cf644fb80f20e6
Author: Johannes Schickel (lordhoto at gmail.com)
Date: 2012-11-22T17:28:31-08:00

Commit Message:
Merge pull request #283 from lordhoto/scumm-opl3

SCUMM: Support OPL3 in Sam&Max

Changed paths:
    audio/fmopl.h
    audio/mididrv.h
    audio/softsynth/adlib.cpp
    audio/softsynth/opl/dosbox.cpp
    engines/scumm/imuse/imuse_part.cpp
    engines/scumm/scumm.cpp









More information about the Scummvm-git-logs mailing list