aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/adldata.cpp1122
-rw-r--r--src/adlmidi.cpp249
-rw-r--r--src/adlmidi_opl3.cpp18
-rw-r--r--src/adlmidi_private.hpp6
-rw-r--r--src/chips/dosbox/dbopl.cpp143
-rw-r--r--src/chips/dosbox/dbopl.h6
-rw-r--r--src/midi_sequencer.hpp13
-rw-r--r--src/midi_sequencer_impl.hpp92
8 files changed, 919 insertions, 730 deletions
diff --git a/src/adldata.cpp b/src/adldata.cpp
index d99ee74..64280aa 100644
--- a/src/adldata.cpp
+++ b/src/adldata.cpp
@@ -4,7 +4,7 @@
* FROM A NUMBER OF SOURCES, MOSTLY PC GAMES.
* PREPROCESSED, CONVERTED, AND POSTPROCESSED OFF-SCREEN.
*/
-const adldata adl[4537] =
+const adldata adl[4528] =
{ // ,---------+-------- Wave select settings
// | ,-------ч-+------ Sustain/release rates
// | | ,-----ч-ч-+---- Attack/decay rates
@@ -3969,8 +3969,8 @@ const adldata adl[4537] =
{ 0x185DC85,0x055F401, 0x91,0x0E, 0x3, +0 },
{ 0x0F6E181,0x0F6E798, 0x00,0x2B, 0x1, +0 },
{ 0x0F4F194,0x0A7E98A, 0x00,0x15, 0x1, +0 },
- { 0x0B3D407,0x0B4C202, 0xA0,0x00, 0xA, -12 },
- { 0x082D307,0x0E3A302, 0x58,0x80, 0xB, +0 },
+ { 0x0B3D407,0x0B4C202, 0x9A,0x00, 0xA, -12 },
+ { 0x082D307,0x0E3A302, 0x9A,0x00, 0xA, -12 },
{ 0x156940A,0x132F411, 0xA7,0x05, 0x5, +0 },
{ 0x027A2A0,0x023A522, 0x85,0x9E, 0x7, +0 },
{ 0x02AA5A2,0x02AA168, 0x80,0x8F, 0x7, +0 },
@@ -3982,7 +3982,8 @@ const adldata adl[4537] =
{ 0x013C321,0x00B7022, 0x22,0x00, 0xE, +0 },
{ 0x0F4F505,0x0F9F200, 0x29,0x1E, 0x6, +12 },
{ 0x0F1F101,0x0F7F100, 0x2F,0x00, 0x6, +0 },
- { 0x0F4F405,0x0F6F100, 0x20,0x19, 0x6, +12 },
+ { 0x0F4F405,0x0F6F110, 0x29,0x19, 0x6, +12 },
+ { 0x0F1F111,0x0F7F100, 0x31,0x00, 0x6, +0 },
{ 0x19F53C8,0x07FFAE4, 0x1C,0x03, 0x9, +0 },
{ 0x0049420,0x0A5C523, 0x2A,0x24, 0xE, +12 },
{ 0x0F9F200,0x0F8F101, 0x21,0x00, 0xE, +0 },
@@ -4005,15 +4006,20 @@ const adldata adl[4537] =
{ 0x0049100,0x2045240, 0x0F,0x00, 0x9, +0 },
{ 0x0157620,0x0368261, 0x94,0x00, 0xC, +12 },
{ 0x02661B1,0x0276171, 0xD3,0x80, 0xD, +0 },
+ { 0x118543A,0x5177472, 0x1E,0x00, 0x4, -12 },
{ 0x04A6121,0x00B7F21, 0x9F,0x00, 0xE, +0 },
{ 0x00A65A1,0x0067F61, 0xA2,0x00, 0xF, +0 },
{ 0x0277221,0x0067F21, 0x16,0x05, 0xC, +0 },
{ 0x0866131,0x0D6C261, 0x1A,0x00, 0xE, +0 },
- { 0x0678221,0x0179222, 0x17,0x00, 0xE, +0 },
+ { 0x0866131,0x0D6C261, 0x16,0x00, 0xF, +0 },
+ { 0x0678221,0x0179222, 0x1A,0x00, 0xE, +0 },
+ { 0x0678221,0x0179222, 0x15,0x0A, 0x7, +0 },
{ 0x00AD961,0x006A861, 0x28,0x1E, 0xE, +0 },
{ 0x0069A21,0x00ACF24, 0x25,0x00, 0xE, +0 },
{ 0x02A9B32,0x0177221, 0x90,0x00, 0x4, +0 },
{ 0x01CB632,0x01B66E1, 0x92,0x82, 0x5, +0 },
+ { 0x00457F2,0x0375761, 0xA8,0x00, 0xE, +0 },
+ { 0x2545C73,0x0776821, 0x00,0x0D, 0xE, +0 },
{ 0x00FFF61,0x00FFF22, 0x1C,0x00, 0xE, +0 },
{ 0x00FFF21,0x009CF62, 0x1C,0x00, 0xF, +0 },
{ 0x0559622,0x0187421, 0x46,0x80, 0xF, +0 },
@@ -4023,31 +4029,50 @@ const adldata adl[4537] =
{ 0x2164460,0x00450E1, 0xAB,0x01, 0xB, +0 },
{ 0x0022A55,0x0F34212, 0x97,0x86, 0x1, +0 },
{ 0x1623524,0x1023171, 0x20,0x05, 0x1, +0 },
+ { 0x155F261,0x0A5F242, 0x4D,0x00, 0x0, +0 },
+ { 0x2343161,0x00532A1, 0x9D,0x80, 0xD, +0 },
{ 0x011A131,0x0137D16, 0x87,0x08, 0x1, +0 },
- { 0x0F0A101,0x0437516, 0x0C,0x03, 0x1, +0 },
- { 0x053F201,0x052F317, 0x8F,0x09, 0x5, +0 },
+ { 0x1127533,0x4F4F211, 0x58,0x03, 0x6, +0 },
+ { 0x3F0F014,0x6F7F611, 0x40,0x43, 0xA, +0 },
+ { 0x033F201,0x373F402, 0xD1,0x8A, 0x0, +0 },
+ { 0x6A7F907,0x229A904, 0x1A,0x00, 0xA, -12 },
{ 0x055C902,0x024A601, 0x1A,0x05, 0xD, +0 },
- { 0x0175E31,0x20C7B21, 0x18,0x08, 0x7, +0 },
+ { 0x1397931,0x2099B22, 0x80,0x00, 0x6, +0 },
+ { 0x2137931,0x1079B22, 0x42,0xC2, 0xA, +0 },
{ 0x119FFA1,0x0089024, 0x0C,0x11, 0x7, +0 },
{ 0x004F007,0x004F081, 0x51,0x13, 0x7, +0 },
{ 0x026EC07,0x016F801, 0x15,0x00, 0xA, +0 },
{ 0x001FF17,0x0057A12, 0x1C,0x0B, 0xB, +0 },
+ { 0x4046306,0x005A902, 0xCA,0x08, 0x6, +0 },
+ { 0x0045413,0x005A601, 0x51,0x08, 0xA, +0 },
{ 0x09FF831,0x004FF10, 0x8B,0x05, 0x7, +0 },
+ { 0x5C8FB00,0x0B7E601, 0x00,0x00, 0x0, +0 },
+ { 0x2F0F00F,0x0F8F800, 0x00,0x40, 0xE, +12 },
{ 0x001FF0E,0x20F2F01, 0x00,0x0D, 0xE, +0 },
- { 0x2077405,0x106F403, 0x80,0x0F, 0xF, +0 },
+ { 0x0534313,0x7574A1F, 0x20,0x03, 0xE, -14 },
{ 0x003FF15,0x0934511, 0x09,0x1F, 0xF, +0 },
- { 0x000200E,0x0022F0E, 0x00,0x0F, 0xF, +0 },
+ { 0x200C327,0x6021300, 0x80,0x12, 0xE, -23 },
+ { 0x200C32B,0x6021300, 0x80,0x12, 0xE, -24 },
{ 0x060F209,0x072F214, 0x4F,0x19, 0xB, +0 },
{ 0x1111EF0,0x11311E2, 0x00,0xC5, 0xF, +0 },
{ 0x000FFEE,0x30318EE, 0x00,0x00, 0xE, +0 },
+ { 0x059F802,0x01CF600, 0x11,0x00, 0xC, +0 },
+ { 0x2159506,0x65AB701, 0x00,0x04, 0xE, +0 },
+ { 0x10F5F81,0x0164611, 0x00,0x0A, 0x6, +0 },
+ { 0x00F5F01,0x20F5F00, 0x00,0x00, 0x8, +0 },
+ { 0x0D6D725,0x3A9A909, 0x1F,0x00, 0xE, -9 },
+ { 0x0F0A00F,0x0F8F80F, 0x80,0x8C, 0xF, +0 },
+ { 0x2FDFD00,0x6FAFA00, 0x00,0x00, 0xE, +0 },
+ { 0x4F1F103,0x6FAFA07, 0x00,0x00, 0x8, +0 },
+ { 0x0F0F007,0x2F6F60F, 0x27,0x00, 0x0, +21 },
{ 0x0F7B710,0x005F011, 0x42,0x00, 0x8, +0 },
{ 0x6EF8801,0x608B502, 0x0D,0x00, 0x0, +0 },
{ 0x0F1F10F,0x007840F, 0x00,0x08, 0xC, +12 },
{ 0x6EF8800,0x608F502, 0x13,0x00, 0x0, +8 },
{ 0x0F1D101,0x0078400, 0x00,0x00, 0xE, +1 },
- { 0x254F307,0x307F905, 0x04,0x0B, 0x6, -5 },
- { 0x254F307,0x207F905, 0x04,0x0B, 0x8, +0 },
- { 0x25CD808,0x32B8A06, 0x04,0x08, 0xC, +0 },
+ { 0x254F307,0x307F905, 0x04,0x08, 0x6, -5 },
+ { 0x254F307,0x207F905, 0x04,0x08, 0x8, +0 },
+ { 0x254D307,0x3288905, 0x04,0x03, 0xA, -5 },
{ 0x2F2E327,0x3F5C525, 0x04,0x08, 0xA, -5 },
{ 0x2F2F326,0x2F5C525, 0x04,0x08, 0x8, +0 },
{ 0x292F108,0x354F201, 0x00,0x08, 0x8, +12 },
@@ -4057,17 +4082,24 @@ const adldata adl[4537] =
{ 0x251F206,0x263C504, 0x04,0x09, 0xA, +0 },
{ 0x241F287,0x353B502, 0x05,0x09, 0xA, +1 },
{ 0x292F108,0x354F201, 0x00,0x03, 0x8, +12 },
- { 0x456FB02,0x017F700, 0x81,0x00, 0x0, +12 },
- { 0x556FA01,0x117F701, 0x00,0x0D, 0x6, +10 },
- { 0x556FB02,0x117F701, 0x81,0x0D, 0x6, +10 },
- { 0x106F680,0x016F610, 0x00,0x00, 0xC, +0 },
- { 0x20F6F00,0x20F6F00, 0x00,0x00, 0x0, +0 },
- { 0x106F680,0x016F610, 0x00,0x00, 0x6, +0 },
- { 0x20F4F00,0x20F4F00, 0x00,0x00, 0x6, +0 },
- { 0x1DC5D01,0x06FF79F, 0x0B,0x00, 0xA, +12 },
- { 0x1C7C900,0x05FF49F, 0x07,0x00, 0xA, +12 },
+ { 0x456FB02,0x017F700, 0x81,0x00, 0xC, +12 },
+ { 0x556FA01,0x117F701, 0x00,0x0D, 0xA, +10 },
+ { 0x556FB02,0x117F701, 0x81,0x0D, 0xA, +10 },
+ { 0x0F00000,0x0F00000, 0x3F,0x3F, 0xC, +0 },
+ { 0x000F020,0x40A8A00, 0x0A,0x00, 0xE, +0 },
+ { 0x70F5F20,0x70F4F00, 0x00,0x00, 0x2, -12 },
+ { 0x0D1F815,0x078F512, 0x44,0x00, 0x8, +12 },
+ { 0x2D1F213,0x098F614, 0x9D,0x00, 0x0, +0 },
+ { 0x2D1F213,0x098F614, 0x9D,0x21, 0x0, -2 },
+ { 0x0985900,0x039870F, 0x07,0x00, 0x8, +13 },
+ { 0x2F3F307,0x09C9B0F, 0x1D,0x00, 0x0, +13 },
+ { 0x09C4B00,0x43A6705, 0x21,0x00, 0xC, +13 },
+ { 0x0F7F907,0x2987805, 0x1C,0x00, 0x0, +13 },
{ 0x3F0E00A,0x0F7F21F, 0x7C,0x40, 0x8, +0 },
{ 0x3E0F50A,0x0FAF31F, 0x7C,0x40, 0x9, +0 },
+ { 0x227A305,0x36A560A, 0x87,0x08, 0xE, +12 },
+ { 0x247C345,0x3697809, 0x87,0x08, 0xE, +12 },
+ { 0x037A309,0x06DF904, 0x11,0x00, 0xE, +0 },
{ 0x1F5F213,0x0F5F111, 0xC6,0x0A, 0x0, +0 },
{ 0x019F603,0x0F4F212, 0x30,0x10, 0xF, +0 },
{ 0x1069FB2,0x10F94B0, 0xC0,0x86, 0x9, +0 },
@@ -4226,7 +4258,6 @@ const adldata adl[4537] =
{ 0x0235271,0x0198161, 0x1E,0x08, 0xE, +0 },
{ 0x0235361,0x0196161, 0x1D,0x03, 0xE, +0 },
{ 0x0155331,0x0378261, 0x94,0x00, 0xA, +0 },
- { 0x118543A,0x5177472, 0x1E,0x00, 0x4, -12 },
{ 0x0365121,0x0257221, 0x1E,0x08, 0x0, +0 },
{ 0x2844521,0x20592A0, 0x23,0x03, 0x0, +0 },
{ 0x0578321,0x117C021, 0x19,0x03, 0xC, +0 },
@@ -4250,8 +4281,6 @@ const adldata adl[4537] =
{ 0x2176522,0x0277421, 0x5A,0x00, 0x6, +0 },
{ 0x1267532,0x0166531, 0x8D,0x05, 0x4, +0 },
{ 0x2F0F011,0x0987801, 0x03,0x17, 0xA, +0 },
- { 0x00457F2,0x0375761, 0xA8,0x00, 0xE, +0 },
- { 0x2545C73,0x0776821, 0x00,0x0D, 0xE, +0 },
{ 0x5543737,0x25D67A1, 0x28,0x00, 0x8, +0 },
{ 0x6243371,0x46D6331, 0x20,0x00, 0x6, +0 },
{ 0x00F31D1,0x0053271, 0xC7,0x00, 0xB, +0 },
@@ -4304,35 +4333,22 @@ const adldata adl[4537] =
{ 0x2645321,0x2445521, 0x15,0x0D, 0xA, +0 },
{ 0x0B37121,0x5F48221, 0x16,0x08, 0x2, +0 },
{ 0x2B37102,0x5F48221, 0x90,0x08, 0x6, +0 },
- { 0x1127533,0x4F4F211, 0x58,0x03, 0x6, +0 },
- { 0x3F0F014,0x6F7F611, 0x40,0x43, 0xA, +0 },
- { 0x033F201,0x373F402, 0xD1,0x8A, 0x0, +0 },
- { 0x6A7F907,0x229A904, 0x1A,0x00, 0xA, -12 },
{ 0x5E2F321,0x6E4F523, 0x1B,0x08, 0x8, +0 },
{ 0x455F71C,0x0D68501, 0xA3,0x08, 0x6, +0 },
{ 0x055F718,0x0D6E501, 0x23,0x08, 0x0, +0 },
- { 0x1397931,0x2099B22, 0x80,0x00, 0x6, +0 },
- { 0x2137931,0x1079B22, 0x42,0xC2, 0xA, +0 },
{ 0x302A130,0x0266221, 0x1E,0x00, 0xE, +0 },
{ 0x0136031,0x1169131, 0x12,0x80, 0x8, +0 },
{ 0x032A115,0x172B212, 0x00,0x80, 0x1, +5 },
{ 0x001E79A,0x067961C, 0x81,0x00, 0x4, +0 },
- { 0x4046306,0x005A902, 0xCA,0x08, 0x6, +0 },
- { 0x0045413,0x005A601, 0x51,0x08, 0xA, +0 },
{ 0x4D1F214,0x098F715, 0xA0,0x00, 0xC, +0 },
{ 0x008F312,0x004F600, 0x08,0xC8, 0x4, -12 },
{ 0x27CFA01,0x004F200, 0x08,0x08, 0x0, +0 },
- { 0x5C8FB00,0x0B7E601, 0x00,0x00, 0x0, +0 },
- { 0x2F0F00F,0x0F8F800, 0x00,0x40, 0xE, +12 },
{ 0x518F890,0x0E7F310, 0x00,0x00, 0x8, -12 },
{ 0x250F610,0x0E7F510, 0x00,0xC8, 0x6, +0 },
{ 0x2114109,0x51D2101, 0x05,0x80, 0xA, +0 },
{ 0x2114108,0x31D2101, 0x05,0x80, 0xA, +12 },
- { 0x0534313,0x7574A1F, 0x20,0x03, 0xE, -14 },
{ 0x00437D2,0x0343471, 0xA1,0x07, 0xC, +0 },
{ 0x0F0F00C,0x0F66700, 0x00,0xCD, 0xE, +0 },
- { 0x200C327,0x6021300, 0x80,0x12, 0xE, -23 },
- { 0x200C32B,0x6021300, 0x80,0x12, 0xE, -24 },
{ 0x003EBD7,0x06845D8, 0xD4,0x00, 0x7, +12 },
{ 0x62FDA20,0x614B009, 0x42,0x48, 0x4, -24 },
{ 0x62FDA20,0x614B009, 0x82,0x48, 0x4, -20 },
@@ -4341,15 +4357,7 @@ const adldata adl[4537] =
{ 0x200832F,0x6044020, 0x80,0x00, 0xE, -36 },
{ 0x200832F,0x6044020, 0x80,0x00, 0xE, -35 },
{ 0x2305431,0x6E7F600, 0x00,0x00, 0xE, +0 },
- { 0x059F802,0x01CF600, 0x11,0x00, 0xC, +0 },
- { 0x2159506,0x65AB701, 0x00,0x04, 0xE, +0 },
- { 0x10F5F81,0x0164611, 0x00,0x0A, 0x6, +0 },
- { 0x00F5F01,0x20F5F00, 0x00,0x00, 0x8, +0 },
- { 0x0D6D725,0x3A9A909, 0x1F,0x00, 0xE, -9 },
{ 0x0F0A00F,0x0F8F80F, 0x00,0x0C, 0xE, +0 },
- { 0x2FDFD00,0x6FAFA00, 0x00,0x00, 0xE, +0 },
- { 0x4F1F103,0x6FAFA07, 0x00,0x00, 0x8, +0 },
- { 0x0F0F007,0x2F6F60F, 0x27,0x00, 0x0, +21 },
{ 0x559FA00,0x047F800, 0x00,0x00, 0x4, +0 },
{ 0x3F1F102,0x0078400, 0x00,0x26, 0xC, +0 },
{ 0x048FA00,0x008F900, 0x00,0x00, 0x6, +12 },
@@ -4365,7 +4373,6 @@ const adldata adl[4537] =
{ 0x255F308,0x308F909, 0x04,0x08, 0x8, +4 },
{ 0x006C604,0x007C604, 0x08,0x08, 0x1, +0 },
{ 0x201F312,0x057AB09, 0x03,0x07, 0xC, +12 },
- { 0x254D307,0x3288905, 0x04,0x03, 0xA, -5 },
{ 0x0015500,0x007C716, 0x0C,0x00, 0x0, +0 },
{ 0x201F312,0x057AB09, 0x00,0x07, 0xC, +12 },
{ 0x0015500,0x007C718, 0x0C,0x00, 0x0, +0 },
@@ -4393,9 +4400,6 @@ const adldata adl[4537] =
{ 0x0A5F7E9,0x0D8994A, 0x29,0x08, 0xC, +10 },
{ 0x2A8F9E2,0x0779642, 0x1E,0x00, 0xE, +8 },
{ 0x0A5F7E9,0x5D8994A, 0x08,0x00, 0xC, +0 },
- { 0x456FB02,0x017F700, 0x81,0x00, 0xC, +12 },
- { 0x556FA01,0x117F701, 0x00,0x0D, 0xA, +10 },
- { 0x556FB02,0x117F701, 0x81,0x0D, 0xA, +10 },
{ 0x367FE06,0x668F701, 0x09,0x08, 0x8, +12 },
{ 0x367FD10,0x098F901, 0x00,0x0D, 0x8, +6 },
{ 0x367FE05,0x678F701, 0x09,0x08, 0x8, +12 },
@@ -4403,25 +4407,12 @@ const adldata adl[4537] =
{ 0x098600F,0x3FC8590, 0x08,0xC0, 0xE, +12 },
{ 0x009F020,0x27DA788, 0x25,0x00, 0x0, +12 },
{ 0x00FC020,0x22DA388, 0x25,0x00, 0xA, +12 },
- { 0x0F00000,0x0F00000, 0x3F,0x3F, 0xC, +0 },
- { 0x000F020,0x40A8A00, 0x0A,0x00, 0xE, +0 },
- { 0x70F5F20,0x70F4F00, 0x00,0x00, 0x2, -12 },
- { 0x0D1F815,0x078F512, 0x44,0x00, 0x8, +12 },
- { 0x2D1F213,0x098F614, 0x9D,0x00, 0x0, +0 },
- { 0x2D1F213,0x098F614, 0x9D,0x21, 0x0, -2 },
- { 0x0985900,0x039870F, 0x07,0x00, 0x8, +13 },
- { 0x2F3F307,0x09C9B0F, 0x1D,0x00, 0x0, +13 },
- { 0x09C4B00,0x43A6705, 0x21,0x00, 0xC, +13 },
- { 0x0F7F907,0x2987805, 0x1C,0x00, 0x0, +13 },
{ 0x160F2C6,0x07AF4D4, 0x4F,0x80, 0x8, +12 },
{ 0x160F286,0x0B7F294, 0x4F,0x80, 0x8, +12 },
- { 0x227A305,0x36A560A, 0x87,0x08, 0xE, +12 },
- { 0x247C345,0x3697809, 0x87,0x08, 0xE, +12 },
{ 0x4755406,0x3667601, 0x87,0x08, 0x6, +12 },
{ 0x275A346,0x3667601, 0x87,0x08, 0x6, +12 },
{ 0x6E4840B,0x6E4B409, 0x12,0x09, 0x1, +0 },
{ 0x6E4440B,0x6E46407, 0x21,0x13, 0x1, +3 },
- { 0x037A309,0x06DF904, 0x11,0x00, 0xE, +0 },
{ 0x6F9A902,0x2F7C801, 0x00,0x40, 0x8, +0 },
{ 0x4F9F901,0x4F7C713, 0x1F,0x48, 0x0, -7 },
{ 0x4B7C720,0x1F3F300, 0x0B,0x00, 0x0, +0 },
@@ -4554,7 +4545,7 @@ const adldata adl[4537] =
{ 0x07BF003,0x07BF502, 0x8A,0x80, 0x8, +0 },
{ 0x07BF003,0x07BF402, 0x8A,0x80, 0x8, +0 },
};
-const struct adlinsdata adlins[4687] =
+const struct adlinsdata adlins[4678] =
{
{ 0, 0, 0, 0, 9006, 133, 0, 0 },
{ 1, 1, 0, 0, 9206, 146, 0, 0 },
@@ -8732,77 +8723,95 @@ const struct adlinsdata adlins[4687] =
{3948,3949, 0, 4, 9320, 133, 0, 0 },
{ 9,3950, 0, 4, 1606, 426, 0, 0 },
{3951,3952, 0, 4, 18373, 240, 0, 0 },
- {3953,3954, 0, 4, 4640, 1486, 0, 0 },
+ {3953,3954, 0, 1, 7440, 1100, 0, 0.0625 },
{ 15,3955, 0, 4, 5640, 1986, 0, 0 },
{3956,3957, 0, 4, 40000, 100, 0, 0 },
{3958,3959, 0, 4, 40000, 73, 0, 0 },
{3960,3961, 0, 4, 40000, 73, 0, 0 },
{3962,3963, 0, 4, 40000, 73, 0, 0 },
{3964,3965, 0, 4, 18186, 153, 0, 0 },
- {3966,3965, 0, 4, 18546, 160, 0, 0 },
- { 31,3967, 0, 4, 40000, 0, 0, 0 },
- {3968,3969, 0, 4, 17886, 100, 0, 0 },
- {3970,3971, 0, 4, 40000, 66, 0, 0 },
- {3972,3971, 0, 4, 40000, 66, 0, 0 },
- {3973,3974, 0, 4, 40000, 46, 0, 0 },
- {3975,3976, 0, 4, 18553, 106, 0, 0 },
- {3977,3976, 0, 4, 18460, 106, 0, 0 },
- {3978,3979, 0, 4, 9366, 106, 0, 0 },
- {3980,3981, 0, 4, 9073, 226, 0, 0 },
- {3982,3983, 0, 4, 40000, 140, 0, 0 },
- {3984,3985, 0, 4, 40000, 800, 0, 0 },
- { 54,3986, 0, 4, 2513, 706, 0, 0 },
- {3987,3988, 0, 4, 40000, 86, 0, 0 },
- {3989,3990, 0, 4, 40000, 233, 0, 0 },
- {3991, 253, 0, 4, 40000, 66, 0, 0 },
- {3992,3992, 0, 0, 40000, 0, 0, 0 },
- {3993,3993, 0, 0, 40000, 120, 0, 0 },
- {3994,3995, 0, 4, 40000, 80, 0, 0 },
- {3996,3997, 0, 4, 40000, 73, 0, 0 },
- {3998,3999, 0, 4, 40000, 86, 0, 0 },
- {1503,4000, 0, 4, 40000, 93, 0, 0 },
- { 88,4001, 0, 4, 40000, 1220, 0, 0 },
- {3743,4002, 0, 4, 7646, 1260, 0, 0 },
- { 92,4003, 0, 4, 40000, 186, 0, 0 },
- { 93,4004, 0, 4, 40000, 813, 0, 0 },
- { 94,4005, 0, 4, 7660, 1260, 0, 0 },
- { 96,4006, 0, 4, 40000, 2460, 0, 0 },
- { 103,4007, 0, 4, 3673, 1240, 0, 0 },
- { 104,4008, 0, 4, 2993, 1226, 0, 0 },
- { 105,4009, 0, 4, 6000, 2453, 0, 0 },
- { 107,4010, 0, 4, 2086, 760, 0, 0 },
- { 108,4011, 0, 4, 40000, 73, 0, 0 },
- { 110,4012, 0, 4, 40000, 100, 0, 0 },
- { 111,4013, 0, 4, 2300, 820, 0, 0 },
- {4014,4015, 0, 4, 1013, 326, 0, 0 },
- { 115,4016, 0, 4, 1813, 0, 0, 0 },
- { 118,4017, 0, 4, 1553, 53, 0, 0 },
- { 119,4018, 0, 4, 580, 0, 0, 0 },
- { 120,4019, 0, 4, 2126, 1166, 0, 0 },
- { 121,4020, 0, 4, 10500, 2986, 0, 0 },
- { 123,4021, 0, 4, 7080, 2473, 0, 0 },
- { 124,4022, 0, 4, 40000, 1126, 0, 0 },
- { 125,4023, 0, 4, 40000, 1546, 0, 0 },
- {4024,4024, 35, 0, 706, 266, 0, 0 },
- {4025,4026, 38, 1, 273, 106, 0, 0 },
- {4027,4028, 38, 1, 366, 133, 0, 0 },
- {4029,4030, 48, 1, 280, 133, 0, -1.90625 },
- {4031,4031, 51, 0, 113, 80, 0, 0 },
- {4032,4033, 48, 1, 953, 346, 0, -1.90625 },
- {4034,4034, 61, 1, 3200, 540, 0, 0.09375 },
+ {3966,3967, 0, 4, 18453, 153, 0, 0 },
+ { 31,3968, 0, 4, 40000, 0, 0, 0 },
+ {3969,3970, 0, 4, 17886, 100, 0, 0 },
+ {3971,3972, 0, 4, 40000, 66, 0, 0 },
+ {3973,3972, 0, 4, 40000, 66, 0, 0 },
+ {3974,3975, 0, 4, 40000, 46, 0, 0 },
+ {3976,3977, 0, 4, 18553, 106, 0, 0 },
+ {3978,3977, 0, 4, 18460, 106, 0, 0 },
+ {3979,3980, 0, 4, 9366, 106, 0, 0 },
+ {3981,3982, 0, 4, 9073, 226, 0, 0 },
+ {3983,3984, 0, 4, 40000, 140, 0, 0 },
+ {3985,3986, 0, 4, 40000, 800, 0, 0 },
+ { 54,3987, 0, 4, 2513, 706, 0, 0 },
+ {3988,3989, 0, 4, 40000, 86, 0, 0 },
+ {3990,3990, 0, 0, 40000, 126, 0, 0 },
+ {3991,3992, 0, 4, 40000, 233, 0, 0 },
+ {3993, 253, 0, 4, 40000, 66, 0, 0 },
+ {3994,3995, 0, 4, 40000, 0, 0, 0 },
+ {3996,3997, 0, 4, 40000, 126, 0, 0 },
+ {3998,3999, 0, 4, 40000, 80, 0, 0 },
+ {4000,4001, 0, 4, 40000, 73, 0, 0 },
+ {4002,4003, 0, 1, 40000, 86, 0, 0.046875 },
+ {4004,4005, 0, 4, 40000, 86, 0, 0 },
+ {1503,4006, 0, 4, 40000, 93, 0, 0 },
+ { 88,4007, 0, 4, 40000, 1220, 0, 0 },
+ {3743,4008, 0, 4, 7646, 1260, 0, 0 },
+ { 92,4009, 0, 4, 40000, 186, 0, 0 },
+ { 93,4010, 0, 4, 40000, 813, 0, 0 },
+ { 94,4011, 0, 4, 7660, 1260, 0, 0 },
+ { 96,4012, 0, 4, 40000, 2460, 0, 0 },
+ {4013,4014, 0, 4, 40000, 420, 0, 0 },
+ { 103,4015, 0, 4, 3673, 1240, 0, 0 },
+ {4016,4017, 0, 1, 6286, 380, 0, 0 },
+ {4018,4019, 0, 1, 2220, 426, 0, 0.03125 },
+ { 107,4020, 0, 4, 2086, 760, 0, 0 },
+ {4021,4022, 0, 1, 40000, 100, 0, 0.0625 },
+ { 110,4023, 0, 4, 40000, 100, 0, 0 },
+ { 111,4024, 0, 4, 2300, 820, 0, 0 },
+ {4025,4026, 0, 4, 1013, 326, 0, 0 },
+ {4027,4028, 0, 1, 1220, 393, 0, 0.03125 },
+ { 115,4029, 0, 4, 1813, 0, 0, 0 },
+ {4030,4031, 0, 1, 566, 146, 0, 0 },
+ { 118,4032, 0, 4, 1553, 53, 0, 0 },
+ {4033,4033, 0, 0, 613, 60, 0, 0 },
+ { 120,4034, 0, 4, 2126, 1166, 0, 0 },
+ {4035,4036, 0, 1, 11880, 2993, 0, 0 },
+ { 123,4037, 0, 4, 7080, 2473, 0, 0 },
+ { 124,4038, 0, 4, 40000, 1126, 0, 0 },
+ { 125,4039, 0, 4, 40000, 1546, 0, 0 },
+ {4040,4040, 34, 0, 133, 40, 0, 0 },
+ {4041,4041, 28, 0, 193, 46, 0, 0 },
+ {4042,4043, 39, 1, 553, 126, 0, 0 },
+ {4042,4043, 33, 1, 553, 126, 0, 0 },
+ {4044,4045, 63, 4, 166, 0, 0, 0 },
+ {4046,4046, 15, 0, 113, 0, 0, 0 },
+ {4047,4047, 36, 0, 106, 0, 0, 0 },
+ {4047,4048, 36, 1, 480, 173, 0, 0.40625 },
+ {4049,4049, 35, 0, 706, 266, 0, 0 },
+ {4050,4051, 38, 1, 273, 106, 0, 0 },
+ {4052,4053, 38, 1, 366, 133, 0, 0 },
+ {4054,4055, 48, 1, 280, 133, 0, -1.90625 },
+ {4056,4056, 48, 0, 180, 86, 0, 0 },
+ {4057,4058, 48, 1, 953, 346, 0, -1.90625 },
+ {4059,4059, 61, 1, 3200, 540, 0, 0.09375 },
{3369,1557, 70, 4, 766, 0, 0, 0 },
- {4035,4036, 79, 1, 1306, 513, 0, 0.078125 },
- {4037,4037, 62, 0, 5200, 466, 0, 0 },
- {4038,4039, 67, 1, 2153, 1080, 0, 0.078125 },
- {4040,4040, 62, 1, 3226, 573, 0, 0.09375 },
- {4041,4042, 54, 1, 286, 133, 0, 0 },
- {4041,4043, 48, 1, 286, 126, 0, 0 },
+ {4060,4061, 79, 1, 1306, 513, 0, 0.078125 },
+ {4062,4062, 62, 0, 5200, 466, 0, 0 },
+ {4063,4064, 67, 1, 2153, 1080, 0, 0.078125 },
+ {4065,4065, 62, 1, 3226, 573, 0, 0.09375 },
+ {4066,4067, 54, 1, 286, 133, 0, 0 },
+ {4066,4068, 48, 1, 286, 126, 0, 0 },
+ {1589,1589, 71, 0, 106, 46, 0, 0 },
{ 389, 389, 42, 0, 266, 73, 0, 0 },
- {4044,4045, 48, 1, 280, 126, 0, 0 },
- {4046,4047, 48, 1, 380, 60, 0, 0 },
- {4048,4048, 16, 0, 180, 20, 0, 0 },
- {4049,4049, 16, 0, 740, 20, 0, 0 },
- {4050,4051, 64, 4, 1346, 0, 0, 0 },
+ {4069,4070, 60, 1, 120, 80, 0, 0 },
+ {4070,4071, 60, 1, 380, 80, 0, 0 },
+ {4072,4072, 73, 0, 166, 33, 0, 0 },
+ {4073,4074, 68, 1, 153, 40, 0, 0 },
+ {4075,4076, 18, 1, 200, 80, 0, 0 },
+ {4077,4078, 18, 1, 253, 73, 0, 0 },
+ {4079,4080, 64, 4, 1346, 0, 0, 0 },
+ {4081,4082, 64, 1, 373, 73, 0, 0.03125 },
+ {4083,4083, 67, 0, 106, 26, 0, 0 },
{ 844, 844,244, 2, 6, 0, 0, 0 },
{ 855, 855,244, 2, 6, 0, 0, 0 },
{ 880, 880,232, 0, 253, 80, 0, 0 },
@@ -8834,415 +8843,388 @@ const struct adlinsdata adlins[4687] =
{ 902, 902, 35, 0, 1093, 73, 0, 0 },
{ 903, 903, 35, 0, 126, 73, 0, 0 },
{3500,3500, 35, 2, 6, 0, 0, 0 },
- {4052,4052, 0, 0, 14166, 320, 0, 0 },
- {4053,4053, 0, 0, 7413, 653, 0, 0 },
- {4054,4054, 0, 0, 40000, 146, 0, 0 },
- {4055,4055, 0, 0, 40000, 113, 0, 0 },
- {4056,4056, 0, 0, 16773, 193, 0, 0 },
- {4057,4057, 0, 0, 40000, 73, 0, 0 },
- {4058,4058, 0, 0, 40000, 0, 0, 0 },
- {4059,4059, 0, 0, 966, 373, 0, 0 },
- {4060,4060, 0, 0, 40000, 80, 0, 0 },
- {4061,4061, 0, 0, 40000, 80, 0, 0 },
- {4062,4062, 0, 0, 18473, 93, 0, 0 },
- {4063,4063, 0, 0, 40000, 60, 0, 0 },
- {4064,4064, 0, 0, 40000, 73, 0, 0 },
- {4065,4065, 0, 0, 40000, 0, 0, 0 },
- {4066,4066, 0, 0, 40000, 213, 0, 0 },
- {4067,4067, 0, 0, 40000, 66, 0, 0 },
- {4068,4068, 0, 0, 1413, 1026, 0, 0 },
- {4069,4069, 0, 0, 506, 200, 0, 0 },
- {4070,4070, 0, 0, 3793, 1106, 0, 0 },
- {4071,4071, 0, 0, 40000, 220, 0, 0 },
- {4072,4072, 0, 0, 40000, 46, 0, 0 },
- {4073,4073, 0, 0, 40000, 0, 0, 0 },
- {4074,4074, 0, 0, 40000, 60, 0, 0 },
- {4075,4075, 0, 0, 40000, 0, 0, 0 },
- {4076,4076, 0, 0, 40000, 33, 0, 0 },
- {4077,4077, 0, 0, 40000, 0, 0, 0 },
- {4078,4078, 0, 0, 40000, 146, 0, 0 },
- {4079,4079, 0, 0, 40000, 66, 0, 0 },
- {4080,4080, 0, 0, 40000, 353, 0, 0 },
- {4081,4081, 0, 0, 40000, 66, 0, 0 },
- {4082,4082, 0, 0, 40000, 53, 0, 0 },
- {4083,4083, 0, 0, 40000, 73, 0, 0 },
- {4084,4084, 0, 0, 40000, 66, 0, 0 },
- {4085,4085, 0, 0, 40000, 926, 0, 0 },
- {4086,4086, 0, 0, 2833, 200, 0, 0 },
+ {4084,4084, 0, 0, 14166, 320, 0, 0 },
+ {4085,4085, 0, 0, 7413, 653, 0, 0 },
+ {4086,4086, 0, 0, 40000, 146, 0, 0 },
+ {4087,4087, 0, 0, 40000, 113, 0, 0 },
+ {4088,4088, 0, 0, 16773, 193, 0, 0 },
+ {4089,4089, 0, 0, 40000, 73, 0, 0 },
+ {4090,4090, 0, 0, 40000, 0, 0, 0 },
+ {4091,4091, 0, 0, 966, 373, 0, 0 },
+ {4092,4092, 0, 0, 40000, 80, 0, 0 },
+ {4093,4093, 0, 0, 40000, 80, 0, 0 },
+ {4094,4094, 0, 0, 18473, 93, 0, 0 },
+ {4095,4095, 0, 0, 40000, 60, 0, 0 },
+ {4096,4096, 0, 0, 40000, 73, 0, 0 },
+ {4097,4097, 0, 0, 40000, 0, 0, 0 },
+ {4098,4098, 0, 0, 40000, 213, 0, 0 },
+ {4099,4099, 0, 0, 40000, 66, 0, 0 },
+ {4100,4100, 0, 0, 1413, 1026, 0, 0 },
+ {4101,4101, 0, 0, 506, 200, 0, 0 },
+ {4102,4102, 0, 0, 3793, 1106, 0, 0 },
+ {4103,4103, 0, 0, 40000, 220, 0, 0 },
+ {4104,4104, 0, 0, 40000, 46, 0, 0 },
+ {4105,4105, 0, 0, 40000, 0, 0, 0 },
+ {4106,4106, 0, 0, 40000, 60, 0, 0 },
+ {4107,4107, 0, 0, 40000, 0, 0, 0 },
+ {4108,4108, 0, 0, 40000, 33, 0, 0 },
+ {4109,4109, 0, 0, 40000, 0, 0, 0 },
+ {4110,4110, 0, 0, 40000, 146, 0, 0 },
+ {4111,4111, 0, 0, 40000, 66, 0, 0 },
+ {4112,4112, 0, 0, 40000, 353, 0, 0 },
+ {4113,4113, 0, 0, 40000, 66, 0, 0 },
+ {4114,4114, 0, 0, 40000, 53, 0, 0 },
+ {4115,4115, 0, 0, 40000, 73, 0, 0 },
+ {4116,4116, 0, 0, 40000, 66, 0, 0 },
+ {4117,4117, 0, 0, 40000, 926, 0, 0 },
+ {4118,4118, 0, 0, 2833, 200, 0, 0 },
{ 127, 127, 36, 0, 386, 166, 0, 0 },
- {4087,4087, 36, 0, 100, 0, 0, 0 },
+ {4119,4119, 36, 0, 100, 0, 0, 0 },
{2030,2030, 36, 0, 346, 140, 0, 0 },
{3782,3782, 48, 0, 93, 0, 0, 0 },
{3783,3783, 36, 0, 146, 0, 0, 0 },
- {4088,4088, 48, 0, 1886, 653, 0, 0 },
+ {4120,4120, 48, 0, 1886, 653, 0, 0 },
{ 132, 132, 69, 0, 126, 66, 0, 0 },
- {4088,4088, 52, 0, 1853, 626, 0, 0 },
+ {4120,4120, 52, 0, 1853, 626, 0, 0 },
{ 152, 152, 48, 0, 220, 86, 0, 0 },
- {4088,4088, 55, 0, 1886, 640, 0, 0 },
+ {4120,4120, 55, 0, 1886, 640, 0, 0 },
{ 139, 139, 57, 0, 293, 133, 0, 0 },
- {4088,4088, 58, 0, 1860, 633, 0, 0 },
- {4088,4088, 60, 0, 1886, 633, 0, 0 },
- {4089,4089, 62, 0, 2660, 900, 0, 0 },
- {4088,4088, 63, 0, 1880, 646, 0, 0 },
+ {4120,4120, 58, 0, 1860, 633, 0, 0 },
+ {4120,4120, 60, 0, 1886, 633, 0, 0 },
+ {4121,4121, 62, 0, 2660, 900, 0, 0 },
+ {4120,4120, 63, 0, 1880, 646, 0, 0 },
{ 134, 134, 70, 0, 966, 360, 0, 0 },
- {4090,4090, 70, 0, 973, 346, 0, 0 },
- {4091,4091, 53, 0, 1866, 640, 0, 0 },
+ {4122,4122, 70, 0, 973, 346, 0, 0 },
+ {4123,4123, 53, 0, 1866, 640, 0, 0 },
{3516,3516, 48, 0, 180, 93, 0, 0 },
- {4092,4092, 84, 0, 1360, 473, 0, 0 },
- {4093,4093, 43, 0, 513, 206, 0, 0 },
- {4094,4094, 56, 0, 1353, 480, 0, 0 },
+ {4124,4124, 84, 0, 1360, 473, 0, 0 },
+ {4125,4125, 43, 0, 513, 206, 0, 0 },
+ {4126,4126, 56, 0, 1353, 480, 0, 0 },
{3791,3791, 24, 0, 1866, 613, 0, 0 },
{ 134, 134, 65, 0, 1346, 486, 0, 0 },
{ 146, 146, 48, 0, 173, 93, 0, 0 },
{ 146, 146, 54, 0, 173, 93, 0, 0 },
- {4095,4095, 42, 0, 246, 140, 0, 0 },
- {4095,4095, 39, 0, 240, 133, 0, 0 },
+ {4127,4127, 42, 0, 246, 140, 0, 0 },
+ {4127,4127, 39, 0, 240, 133, 0, 0 },
{3816,3816, 52, 0, 306, 113, 0, 0 },
- {4096,4096, 52, 0, 413, 86, 0, 0 },
+ {4128,4128, 52, 0, 413, 86, 0, 0 },
{ 158, 158, 60, 0, 146, 166, 0, 0 },
{ 158, 158, 66, 0, 146, 166, 0, 0 },
{ 158, 158, 59, 0, 146, 166, 0, 0 },
{3538,3538, 91, 0, 773, 233, 0, 0 },
{3547,3547,109, 0, 5300, 1786, 0, 0 },
- {4097,4097, 79, 0, 560, 313, 0, 0 },
- {4098,4098, 0, 0, 10646, 73, 0, 0 },
- {4099,4100, 0, 1, 14166, 586, 0, 0.03125 },
- {4101,4102, 0, 1, 15553, 546, 0, 0.03125 },
- {4103,4104, 0, 1, 11746, 320, 0, 0.046875 },
- {4105,4106, 0, 1, 14706, 646, 0, 0.15625 },
- {4107,4108, 0, 1, 7320, 100, 0, 0.046875 },
- {4109,4110, 0, 1, 40000, 0, 0, 0.0625 },
- {4111,4112, 0, 1, 13660, 260, 0, 0 },
- {4113,4114, 0, 1, 15026, 133, 0, 0 },
- {4115,4116, 0, 1, 40000, 0, 0, 2.5e-05 },
- {4117,4118, 0, 1, 4980, 3400, 0, 0 },
- {4119,4120, 0, 1, 7840, 2660, 0, 0.046875 },
- {4121,4122, 0, 1, 8326, 180, 0, 0 },
- {4123,4124, 0, 1, 1093, 140, 0, 0 },
- {4125,4126, 0, 1, 2280, 400, 0, 0 },
- {4127,4128, 0, 1, 4553, 1486, 0, 0.03125 },
- {4129,4129, 0, 1, 40000, 0, 0, 0.03125 },
- {4130,4131, 0, 1, 40000, 60, 0, 0.15625 },
- {4132,4133, 0, 1, 40000, 93, 0, 0.078125 },
- {4134,4135, 0, 1, 40000, 86, 0, 0.15625 },
- {4136,4137, 0, 1, 40000, 520, 0, 0.03125 },
- {4138,4139, 0, 1, 40000, 140, 0, 0.0625 },
- {4140,4141, 0, 1, 40000, 133, 0, 0.140625 },
- {4142,4143, 0, 1, 40000, 73, 0, 0 },
- {4144,4145, 0, 1, 40000, 346, 0, 0.109375 },
- {4146,4147, 0, 1, 3693, 86, 0, 0 },
- {4148,4149, 0, 1, 6586, 460, 0, 2.5e-05 },
- {4150,4151, 0, 1, 4320, 93, 0, 0 },
- {4152,4153, 0, 1, 7346, 126, 0, 0.046875 },
- {4154,4155, 0, 1, 3633, 260, 0, 0 },
- {4156,4157, 0, 1, 40000, 126, 0, -1.95312 },
- {4158,4159, 0, 1, 40000, 126, 0, -1.9375 },
- {4160,4161, 0, 1, 40000, 46, 0, 0.234375 },
- {4162,4163, 0, 1, 40000, 0, 0, 0.03125 },
- {4164,4165, 0, 1, 10320, 86, 0, 0 },
- {4166,4167, 0, 1, 12933, 133, 0, 0 },
- {4168,4169, 0, 1, 11820, 240, 0, 0.046875 },
- {4170,4171, 0, 1, 3966, 166, 0, 0 },
- {4172,4173, 0, 1, 40000, 0, 0, 0 },
- {4174,4174, 0, 0, 2666, 160, 0, 0 },
- {4175,4176, 0, 1, 15046, 93, 0, 0.078125 },
- {4177,4178, 0, 1, 40000, 100, 0, 0 },
- {4179,4179, 0, 0, 40000, 260, 0, 0 },
- {4180,4181, 0, 1, 40000, 126, 0, 2.5e-05 },
- {4182,4182, 0, 0, 40000, 233, 0, 0 },
- {4183,4184, 0, 1, 40000, 440, 0, 0.078125 },
- {4185,4186, 0, 1, 2160, 606, 0, 0.109375 },
- {4187,4188, 0, 1, 14753, 2400, 0, 0.03125 },
- {4189,4190, 0, 1, 7680, 646, 0, 0.03125 },
- {4191,4192, 0, 1, 40000, 446, 0, 0.0625 },
- {4193,4194, 0, 1, 40000, 866, 0, -0.0625 },
- {4195,4195, 0, 1, 40000, 1220, 0, 0.078125 },
- {4196,4196, 0, 1, 40000, 1960, 0, 0.0625 },
- {4197,4198, 0, 1, 40000, 433, 0, 0.125 },
- {4199,4200, 0, 1, 40000, 140, 0, 0.140625 },
- {4201,4202, 0, 1, 40000, 806, 0, 0.109375 },
- {4203,4204, 0, 1, 2040, 486, 0, 0.125 },
- {4205,4206, 0, 1, 40000, 86, 0, 0 },
- {4207,4208, 0, 1, 40000, 80, 0, 0.03125 },
- {4209,4209, 0, 0, 40000, 73, 0, 0 },
- {4210,4210, 0, 0, 40000, 126, 0, 0 },
- {4211,4212, 0, 1, 40000, 400, 0, 0.0625 },
- {4213,4214, 0, 1, 40000, 120, 0, 0.0625 },
- {4215,4216, 0, 1, 40000, 0, 0, 0.09375 },
- {4217,4217, 0, 1, 40000, 0, 0, 0.125 },
- {4218,4219, 0, 1, 40000, 186, 0, 0 },
- {4220,4220, 0, 0, 40000, 166, 0, 0 },
- {4221,4221, 0, 0, 40000, 73, 0, 0 },
- {4222,4222, 0, 0, 40000, 60, 0, 0 },
- {4223,4224, 0, 1, 40000, 140, 0, 0 },
- {4225,4225, 0, 0, 40000, 140, 0, 0 },
- {4226,4226, 0, 0, 40000, 66, 0, 0 },
- {4227,4228, 0, 1, 40000, 133, 0, 0 },
- {4229,4229, 0, 0, 40000, 86, 0, 0 },
- {4230,4230, 0, 0, 40000, 73, 0, 0 },
- {4231,4231, 0, 0, 40000, 106, 0, 0 },
- {4232,4233, 0, 1, 40000, 186, 0, 0.03125 },
- {4234,4235, 0, 1, 40000, 86, 0, 0.046875 },
- {4236,4237, 0, 1, 40000, 0, 0, 0.03125 },
- {4238,4238, 0, 0, 40000, 300, 0, 0 },
- {4239,4239, 0, 0, 40000, 66, 0, 0 },
- {4240,4241, 0, 1, 40000, 73, 0, 0.125 },
- {4242,4243, 0, 1, 40000, 86, 0, 0.109375 },
- {4244,4245, 0, 1, 40000, 146, 0, 0.109375 },
- {4246,4247, 0, 1, 40000, 66, 0, -0.03125 },
- {4248,4248, 0, 0, 40000, 60, 0, 0 },
- {4249,4250, 0, 1, 40000, 213, 0, 0.15625 },
- {4251,4252, 0, 1, 40000, 66, 0, 0.125 },
- {4253,4254, 0, 1, 40000, 100, 0, 0.03125 },
- {4255,4256, 0, 1, 40000, 1513, 0, 0.078125 },
- {4257,4258, 0, 1, 40000, 353, 0, 0.109375 },
- {4259,4260, 0, 1, 40000, 133, 0, 0.078125 },
- {4261,4262, 0, 1, 40000, 746, 0, 0.140625 },
- {4263,4264, 0, 1, 40000, 0, 0, 0.109375 },
- {4265,4266, 0, 1, 5033, 1606, 0, 0.0625 },
- {4267,4268, 0, 1, 40000, 1146, 0, 0.09375 },
- {4269,4270, 0, 1, 40000, 1586, 0, 0.109375 },
- {4271,4272, 0, 1, 40000, 0, 0, 0.09375 },
- {4273,4274, 0, 1, 40000, 1006, 0, 0.125 },
- {4275,4275, 0, 1, 2680, 793, 0, 0.109375 },
- {4276,4277, 0, 1, 40000, 0, 0, -0.046875 },
- {4278,4279, 0, 1, 9000, 3186, 0, 0.125 },
- {4280,4281, 0, 1, 40000, 1073, 0, -0.078125 },
- {4282,4283, 0, 1, 40000, 2093, 0, 0.140625 },
- {4284,4285, 0, 1, 40000, 0, 0, 0.078125 },
- {4286,4287, 0, 1, 9580, 713, 0, 0.03125 },
- {4288,4289, 0, 1, 6286, 380, 0, 0 },
- {4290,4291, 0, 1, 2220, 426, 0, 0.03125 },
- {4292,4292, 0, 0, 1166, 760, 0, 0 },
- {4293,4294, 0, 1, 1186, 240, 0, 0 },
- {4295,4296, 0, 1, 40000, 100, 0, 0.0625 },
- {4297,4297, 0, 0, 40000, 160, 0, 0 },
- {4298,4298, 0, 0, 40000, 120, 0, 0 },
- {4299,4299, 0, 0, 8673, 2413, 0, 0 },
- {4300,4300, 0, 0, 393, 126, 0, 0 },
- {4301,4302, 0, 1, 1220, 393, 0, 0.03125 },
- {4303,4303, 0, 0, 246, 93, 0, 0 },
- {4304,4305, 0, 1, 1953, 393, 0, 0 },
- {4306,4307, 0, 1, 566, 146, 0, 0 },
- {4308,4309, 0, 1, 4220, 133, 0, 0 },
- {4310,4311, 0, 1, 2873, 73, 0, 0.109375 },
- {4312,4312, 0, 0, 613, 60, 0, 0 },
- {4313,4314, 0, 1, 40000, 186, 0, 0 },
- {4315,4316, 0, 1, 11880, 2993, 0, 0 },
- {4317,4317, 0, 0, 1573, 86, 0, 0 },
- {4318,4319, 0, 1, 40000, 793, 0, 0 },
- {4320,4321, 0, 1, 40000, 173, 0, 0 },
- {4322,4323, 0, 1, 40000, 793, 0, 0 },
- {4324,4324, 0, 0, 606, 133, 0, 0 },
- {4325,4325, 34, 0, 133, 40, 0, 0 },
- {4326,4326, 28, 0, 193, 46, 0, 0 },
- {4327,4328, 39, 1, 553, 126, 0, 0 },
- {4327,4328, 33, 1, 553, 126, 0, 0 },
- {4329,4330, 63, 1, 160, 80, 0, 0 },
- {4331,4331, 15, 0, 113, 0, 0, 0 },
- {4332,4332, 36, 0, 106, 0, 0, 0 },
- {4332,4333, 36, 1, 480, 173, 0, 0.40625 },
- {4334,4335, 25, 1, 313, 153, 0, 0 },
- {4336,4335, 25, 1, 206, 100, 0, 0 },
- {4337,4338, 61, 1, 153, 93, 0, 0 },
- {4339,4340, 38, 1, 340, 133, 0, 0 },
- {4341,4342, 37, 1, 206, 93, 0, 0 },
- {4343,4344, 15, 1, 346, 153, 10, 0 },
- {4345,4346,100, 1, 146, 0, 0, 0.140625 },
- {4347,4348, 19, 1, 553, 200, 10, 0 },
- {4349,4349, 48, 0, 180, 86, 0, 0 },
- {4350,4351, 15, 1, 333, 153, 20, 0 },
- {4352,4353, 12, 1, 340, 146, 20, 0 },
- {4354,4355, 11, 1, 346, 146, 20, 0 },
- {4356,4357, 61, 1, 2706, 1033, 0, 0.09375 },
- {4358,4355, 8, 1, 340, 146, 20, 0 },
- {4359,4360, 91, 1, 1166, 366, 0, -0.046875 },
- {4361,4361, 70, 0, 966, 346, 0, 0 },
- {4362,4363, 80, 1, 300, 93, 0, 0.125 },
- {4364,4364, 58, 0, 206, 53, 0, 0 },
- {4365,4357, 62, 1, 2333, 820, 0, 0.09375 },
- {4366,4367, 31, 1, 773, 200, 0, 0 },
- {4368,4360, 91, 1, 1160, 360, 0, -0.03125 },
- {4369,4370, 41, 1, 373, 113, 0, 0 },
- {4371,4372, 35, 1, 406, 126, 0, 0 },
- {4373,4374, 29, 1, 146, 106, 0, 0 },
- {4375,4376, 41, 1, 400, 126, 0, 0 },
- {4375,4376, 37, 1, 400, 126, 0, 0 },
- {4377,4378, 54, 1, 286, 133, 0, 0 },
- {4377,4379, 48, 1, 286, 126, 0, 0 },
- {4380,4381, 77, 1, 193, 93, 0, 0 },
- {4382,4383, 72, 1, 200, 93, 0, 0 },
- {4384,4384, 40, 0, 513, 0, 0, 0 },
- {4385,4385, 38, 0, 200, 20, 0, 0 },
- {4386,4386, 36, 0, 620, 20, 0, 0 },
- {4387,4388, 60, 1, 120, 80, 0, 0 },
- {4388,4389, 60, 1, 380, 80, 0, 0 },
- {4390,4390, 73, 0, 166, 33, 0, 0 },
- {4391,4392, 68, 1, 153, 40, 0, 0 },
- {4393,4394, 18, 1, 200, 80, 0, 0 },
- {4395,4396, 18, 1, 253, 73, 0, 0 },
- {4397,4397, 90, 0, 193, 20, 0, 0 },
- {4398,4398, 90, 0, 793, 40, 0, 0 },
- {4399,4400, 64, 1, 373, 73, 0, 0.03125 },
- {4401,4402, 80, 1, 406, 153, 0, 0.03125 },
- {4403,4404, 64, 1, 1866, 606, 0, 0 },
- {4405,4405, 67, 0, 106, 26, 0, 0 },
- {4406,4407, 50, 1, 173, 0, 0, 0 },
- {4408,4408, 36, 0, 4646, 0, 0, 0 },
- {4409,4409, 0, 0, 40000, 86, 0, 0 },
- {4410,4410, 0, 0, 40000, 73, 0, 0 },
- {4411,4411, 0, 0, 2433, 700, 0, 0 },
- {4412,4412, 0, 0, 1233, 26, 0, 0 },
- {4413,4413, 0, 0, 40000, 66, 0, 0 },
- {4414,4414, 0, 0, 40000, 60, 0, 0 },
- {4415,4415, 0, 0, 40000, 60, 0, 0 },
- {4416,4416, 0, 0, 40000, 66, 0, 0 },
- {4417,4417, 0, 0, 40000, 66, 0, 0 },
- {4418,4418, 0, 0, 40000, 0, 0, 0 },
- {4418,4418, 73, 0, 40000, 0, 0, 0 },
- {4419,4419, 0, 0, 40000, 60, 0, 0 },
- {4420,4420, 0, 0, 40000, 60, 0, 0 },
- {4421,4421, 0, 0, 7326, 2486, 0, 0 },
- {4422,4422, 0, 0, 4886, 1586, 0, 0 },
- {4423,4423, 0, 0, 646, 20, 0, 0 },
- {4424,4424, 0, 0, 253, 20, 0, 0 },
- {4424,4424, 12, 0, 253, 20, 0, 0 },
- {4425,4425, 0, 0, 640, 100, 0, 0 },
- {4425,4425, 1, 0, 640, 106, 0, 0 },
- {4426,4426, 0, 0, 133, 106, 0, 0 },
- {4426,4426, 23, 0, 133, 106, 0, 0 },
- {4427,4427, 0, 0, 653, 100, 0, 0 },
- {4428,4428, 0, 0, 4166, 1546, 0, 0 },
- {4429,4429, 0, 0, 40000, 73, 0, 0 },
- {4430,4430, 0, 0, 40000, 60, 0, 0 },
- {4431,4431, 0, 0, 40000, 53, 0, 0 },
- {4432,4432, 0, 0, 40000, 0, 0, 0 },
- {4433,4433, 0, 0, 246, 20, 0, 0 },
- {4434,4434, 0, 2, 6, 0, 0, 0 },
- {4435,4435, 0, 0, 4946, 233, 0, 0 },
- {4436,4436, 0, 0, 4946, 233, 0, 0 },
- {4437,4437, 0, 0, 4953, 240, 0, 0 },
- {4438,4438, 0, 0, 4946, 233, 0, 0 },
- {4439,4439, 0, 0, 18233, 46, 0, 0 },
- {4440,4440, 0, 0, 2386, 26, 0, 0 },
- {4441,4441, 0, 0, 4640, 633, 0, 0 },
- {4442,4442, 0, 0, 18466, 100, 0, 0 },
- {4443,4443, 0, 0, 18440, 66, 0, -2 },
- {4444,4444, 0, 0, 18440, 6140, 0, -2 },
- {4445,4445, 0, 0, 1206, 433, 0, -2 },
- {4446,4446, 0, 0, 4626, 240, 0, 0 },
- {4447,4447, 0, 0, 726, 400, 0, 0 },
- {4448,4448, 0, 0, 5866, 73, 0, 0 },
- {4449,4449, 0, 0, 40000, 73, 0, 0 },
- {4450,4450, 0, 0, 40000, 73, 0, 0 },
- {4451,4451, 0, 0, 40000, 73, 0, 0 },
- {4452,4452, 0, 0, 40000, 73, 0, 0 },
- {4453,4453, 0, 0, 6500, 346, 0, 0 },
- {4454,4454, 0, 0, 6506, 346, 0, 0 },
- {4455,4455, 0, 0, 40000, 66, 0, -2 },
- {4456,4456, 0, 0, 40000, 66, 0, -2 },
- {4457,4457, 0, 0, 40000, 0, 0, 0 },
- {4458,4458, 0, 0, 40000, 46, 0, 0 },
- {4459,4459, 0, 0, 40000, 0, 0, 0 },
- {4459,4459, 0, 0, 40000, 0, 0, -2 },
- {4460,4460, 0, 0, 2386, 26, 0, 0 },
- {4461,4461, 0, 0, 40000, 73, 0, -2 },
- {4462,4462, 0, 0, 5866, 26, 0, -2 },
- {4463,4463, 0, 0, 40000, 133, 0, 0 },
- {4464,4464, 0, 0, 40000, 133, 0, 0 },
- {4465,4465, 0, 0, 40000, 126, 0, 0 },
- {4466,4466, 0, 0, 253, 20, 0, 0 },
- {4467,4467, 0, 0, 8866, 1366, 0, 0 },
- {4468,4468, 0, 0, 1040, 766, 0, 0 },
- {4469,4469, 0, 0, 40000, 146, 0, -2 },
- {4470,4470, 0, 0, 40000, 153, 0, -2 },
- {4471,4471, 0, 0, 40000, 466, 0, -2 },
- {4472,4472, 0, 0, 40000, 66, 0, 0 },
- {4473,4473, 0, 0, 2333, 566, 0, 0 },
- {4474,4474, 0, 0, 40000, 140, 0, -2 },
- {4475,4475, 0, 0, 40000, 100, 0, -2 },
- {4476,4476, 0, 0, 40000, 226, 0, -2 },
- {4477,4477, 0, 0, 40000, 0, 0, 0 },
+ {4129,4129, 79, 0, 560, 313, 0, 0 },
+ {4130,4130, 0, 0, 10646, 73, 0, 0 },
+ {4131,4132, 0, 1, 14166, 586, 0, 0.03125 },
+ {4133,4134, 0, 1, 15553, 546, 0, 0.03125 },
+ {4135,4136, 0, 1, 11746, 320, 0, 0.046875 },
+ {4137,4138, 0, 1, 14706, 646, 0, 0.15625 },
+ {4139,4140, 0, 1, 7320, 100, 0, 0.046875 },
+ {4141,4142, 0, 1, 40000, 0, 0, 0.0625 },
+ {4143,4144, 0, 1, 13660, 260, 0, 0 },
+ {4145,4146, 0, 1, 15026, 133, 0, 0 },
+ {4147,4148, 0, 1, 40000, 0, 0, 2.5e-05 },
+ {4149,4150, 0, 1, 4980, 3400, 0, 0 },
+ {4151,4152, 0, 1, 7840, 2660, 0, 0.046875 },
+ {4153,4154, 0, 1, 8326, 180, 0, 0 },
+ {4155,4156, 0, 1, 1093, 140, 0, 0 },
+ {4157,4158, 0, 1, 2280, 400, 0, 0 },
+ {4159,4160, 0, 1, 4553, 1486, 0, 0.03125 },
+ {4161,4161, 0, 1, 40000, 0, 0, 0.03125 },
+ {4162,4163, 0, 1, 40000, 60, 0, 0.15625 },
+ {4164,4165, 0, 1, 40000, 93, 0, 0.078125 },
+ {4166,4167, 0, 1, 40000, 86, 0, 0.15625 },
+ {4168,4169, 0, 1, 40000, 520, 0, 0.03125 },
+ {4170,4171, 0, 1, 40000, 140, 0, 0.0625 },
+ {4172,4173, 0, 1, 40000, 133, 0, 0.140625 },
+ {4174,4175, 0, 1, 40000, 73, 0, 0 },
+ {4176,4177, 0, 1, 40000, 346, 0, 0.109375 },
+ {4178,4179, 0, 1, 3693, 86, 0, 0 },
+ {4180,4181, 0, 1, 6586, 460, 0, 2.5e-05 },
+ {4182,4183, 0, 1, 4320, 93, 0, 0 },
+ {4184,4185, 0, 1, 7346, 126, 0, 0.046875 },
+ {4186,4187, 0, 1, 3633, 260, 0, 0 },
+ {4188,4189, 0, 1, 40000, 126, 0, -1.95312 },
+ {4190,4191, 0, 1, 40000, 126, 0, -1.9375 },
+ {4192,4193, 0, 1, 40000, 46, 0, 0.234375 },
+ {4194,4195, 0, 1, 40000, 0, 0, 0.03125 },
+ {4196,4197, 0, 1, 10320, 86, 0, 0 },
+ {4198,4199, 0, 1, 12933, 133, 0, 0 },
+ {4200,4201, 0, 1, 11820, 240, 0, 0.046875 },
+ {4202,4203, 0, 1, 3966, 166, 0, 0 },
+ {4204,4205, 0, 1, 40000, 0, 0, 0 },
+ {4206,4206, 0, 0, 2666, 160, 0, 0 },
+ {4207,4208, 0, 1, 15046, 93, 0, 0.078125 },
+ {4209,4210, 0, 1, 40000, 100, 0, 0 },
+ {4211,4211, 0, 0, 40000, 260, 0, 0 },
+ {4212,4213, 0, 1, 40000, 126, 0, 2.5e-05 },
+ {4214,4214, 0, 0, 40000, 233, 0, 0 },
+ {4215,4216, 0, 1, 40000, 440, 0, 0.078125 },
+ {4217,4218, 0, 1, 2160, 606, 0, 0.109375 },
+ {4219,4220, 0, 1, 14753, 2400, 0, 0.03125 },
+ {4221,4222, 0, 1, 7680, 646, 0, 0.03125 },
+ {4223,4224, 0, 1, 40000, 446, 0, 0.0625 },
+ {4225,4226, 0, 1, 40000, 866, 0, -0.0625 },
+ {4227,4227, 0, 1, 40000, 1220, 0, 0.078125 },
+ {4228,4228, 0, 1, 40000, 1960, 0, 0.0625 },
+ {4229,4230, 0, 1, 40000, 433, 0, 0.125 },
+ {4231,4232, 0, 1, 40000, 140, 0, 0.140625 },
+ {4233,4234, 0, 1, 40000, 806, 0, 0.109375 },
+ {4235,4236, 0, 1, 2040, 486, 0, 0.125 },
+ {4237,4238, 0, 1, 40000, 86, 0, 0 },
+ {4239,4240, 0, 1, 40000, 80, 0, 0.03125 },
+ {4241,4241, 0, 0, 40000, 73, 0, 0 },
+ {4242,4243, 0, 1, 40000, 400, 0, 0.0625 },
+ {4244,4245, 0, 1, 40000, 120, 0, 0.0625 },
+ {4246,4247, 0, 1, 40000, 0, 0, 0.09375 },
+ {4248,4248, 0, 1, 40000, 0, 0, 0.125 },
+ {4249,4250, 0, 1, 40000, 186, 0, 0 },
+ {4251,4251, 0, 0, 40000, 166, 0, 0 },
+ {4252,4252, 0, 0, 40000, 73, 0, 0 },
+ {4253,4253, 0, 0, 40000, 60, 0, 0 },
+ {4254,4255, 0, 1, 40000, 140, 0, 0 },
+ {4256,4256, 0, 0, 40000, 140, 0, 0 },
+ {4257,4257, 0, 0, 40000, 66, 0, 0 },
+ {4258,4259, 0, 1, 40000, 133, 0, 0 },
+ {4260,4260, 0, 0, 40000, 86, 0, 0 },
+ {4261,4261, 0, 0, 40000, 73, 0, 0 },
+ {4262,4262, 0, 0, 40000, 106, 0, 0 },
+ {4263,4264, 0, 1, 40000, 186, 0, 0.03125 },
+ {4265,4266, 0, 1, 40000, 0, 0, 0.03125 },
+ {4267,4267, 0, 0, 40000, 300, 0, 0 },
+ {4268,4268, 0, 0, 40000, 66, 0, 0 },
+ {4269,4270, 0, 1, 40000, 73, 0, 0.125 },
+ {4271,4272, 0, 1, 40000, 86, 0, 0.109375 },
+ {4273,4274, 0, 1, 40000, 146, 0, 0.109375 },
+ {4275,4276, 0, 1, 40000, 66, 0, -0.03125 },
+ {4277,4277, 0, 0, 40000, 60, 0, 0 },
+ {4278,4279, 0, 1, 40000, 213, 0, 0.15625 },
+ {4280,4281, 0, 1, 40000, 66, 0, 0.125 },
+ {4282,4283, 0, 1, 40000, 100, 0, 0.03125 },
+ {4284,4285, 0, 1, 40000, 1513, 0, 0.078125 },
+ {4286,4287, 0, 1, 40000, 353, 0, 0.109375 },
+ {4288,4289, 0, 1, 40000, 133, 0, 0.078125 },
+ {4290,4291, 0, 1, 40000, 746, 0, 0.140625 },
+ {4292,4293, 0, 1, 40000, 0, 0, 0.109375 },
+ {4294,4295, 0, 1, 5033, 1606, 0, 0.0625 },
+ {4296,4297, 0, 1, 40000, 1146, 0, 0.09375 },
+ {4298,4299, 0, 1, 40000, 1586, 0, 0.109375 },
+ {4300,4301, 0, 1, 40000, 0, 0, 0.09375 },
+ {4302,4303, 0, 1, 40000, 1006, 0, 0.125 },
+ {4304,4304, 0, 1, 2680, 793, 0, 0.109375 },
+ {4305,4306, 0, 1, 40000, 0, 0, -0.046875 },
+ {4307,4308, 0, 1, 9000, 3186, 0, 0.125 },
+ {4309,4310, 0, 1, 40000, 1073, 0, -0.078125 },
+ {4311,4312, 0, 1, 40000, 2093, 0, 0.140625 },
+ {4313,4314, 0, 1, 40000, 0, 0, 0.078125 },
+ {4315,4316, 0, 1, 9580, 713, 0, 0.03125 },
+ {4317,4317, 0, 0, 1166, 760, 0, 0 },
+ {4318,4319, 0, 1, 1186, 240, 0, 0 },
+ {4320,4320, 0, 0, 40000, 160, 0, 0 },
+ {4321,4321, 0, 0, 40000, 120, 0, 0 },
+ {4322,4322, 0, 0, 8673, 2413, 0, 0 },
+ {4323,4323, 0, 0, 393, 126, 0, 0 },
+ {4324,4324, 0, 0, 246, 93, 0, 0 },
+ {4325,4326, 0, 1, 1953, 393, 0, 0 },
+ {4327,4328, 0, 1, 4220, 133, 0, 0 },
+ {4329,4330, 0, 1, 2873, 73, 0, 0.109375 },
+ {4331,4332, 0, 1, 40000, 186, 0, 0 },
+ {4333,4333, 0, 0, 1573, 86, 0, 0 },
+ {4334,4335, 0, 1, 40000, 793, 0, 0 },
+ {4336,4337, 0, 1, 40000, 173, 0, 0 },
+ {4338,4339, 0, 1, 40000, 793, 0, 0 },
+ {4340,4340, 0, 0, 606, 133, 0, 0 },
+ {4044,4341, 63, 1, 160, 80, 0, 0 },
+ {4342,4343, 25, 1, 313, 153, 0, 0 },
+ {4344,4343, 25, 1, 206, 100, 0, 0 },
+ {4345,4346, 61, 1, 153, 93, 0, 0 },
+ {4347,4348, 38, 1, 340, 133, 0, 0 },
+ {4349,4350, 37, 1, 206, 93, 0, 0 },
+ {4351,4352, 15, 1, 346, 153, 10, 0 },
+ {4353,4354,100, 1, 146, 0, 0, 0.140625 },
+ {4355,4356, 19, 1, 553, 200, 10, 0 },
+ {4357,4358, 15, 1, 333, 153, 20, 0 },
+ {4359,4360, 12, 1, 340, 146, 20, 0 },
+ {4361,4362, 11, 1, 346, 146, 20, 0 },
+ {4363,4364, 61, 1, 2706, 1033, 0, 0.09375 },
+ {4365,4362, 8, 1, 340, 146, 20, 0 },
+ {4366,4367, 91, 1, 1166, 366, 0, -0.046875 },
+ {4368,4368, 70, 0, 966, 346, 0, 0 },
+ {4369,4370, 80, 1, 300, 93, 0, 0.125 },
+ {4371,4371, 58, 0, 206, 53, 0, 0 },
+ {4372,4364, 62, 1, 2333, 820, 0, 0.09375 },
+ {4373,4374, 31, 1, 773, 200, 0, 0 },
+ {4375,4367, 91, 1, 1160, 360, 0, -0.03125 },
+ {4376,4377, 41, 1, 373, 113, 0, 0 },
+ {4378,4379, 35, 1, 406, 126, 0, 0 },
+ {4380,4381, 29, 1, 146, 106, 0, 0 },
+ {4382,4383, 41, 1, 400, 126, 0, 0 },
+ {4382,4383, 37, 1, 400, 126, 0, 0 },
+ {4384,4385, 77, 1, 193, 93, 0, 0 },
+ {4386,4387, 72, 1, 200, 93, 0, 0 },
+ {4388,4388, 40, 0, 513, 0, 0, 0 },
+ {4389,4389, 38, 0, 200, 20, 0, 0 },
+ {4390,4390, 36, 0, 620, 20, 0, 0 },
+ {4391,4391, 90, 0, 193, 20, 0, 0 },
+ {4392,4392, 90, 0, 793, 40, 0, 0 },
+ {4393,4394, 80, 1, 406, 153, 0, 0.03125 },
+ {4395,4396, 64, 1, 1866, 606, 0, 0 },
+ {4397,4398, 50, 1, 173, 0, 0, 0 },
+ {4399,4399, 36, 0, 4646, 0, 0, 0 },
+ {4400,4400, 0, 0, 40000, 86, 0, 0 },
+ {4401,4401, 0, 0, 40000, 73, 0, 0 },
+ {4402,4402, 0, 0, 2433, 700, 0, 0 },
+ {4403,4403, 0, 0, 1233, 26, 0, 0 },
+ {4404,4404, 0, 0, 40000, 66, 0, 0 },
+ {4405,4405, 0, 0, 40000, 60, 0, 0 },
+ {4406,4406, 0, 0, 40000, 60, 0, 0 },
+ {4407,4407, 0, 0, 40000, 66, 0, 0 },
+ {4408,4408, 0, 0, 40000, 66, 0, 0 },
+ {4409,4409, 0, 0, 40000, 0, 0, 0 },
+ {4409,4409, 73, 0, 40000, 0, 0, 0 },
+ {4410,4410, 0, 0, 40000, 60, 0, 0 },
+ {4411,4411, 0, 0, 40000, 60, 0, 0 },
+ {4412,4412, 0, 0, 7326, 2486, 0, 0 },
+ {4413,4413, 0, 0, 4886, 1586, 0, 0 },
+ {4414,4414, 0, 0, 646, 20, 0, 0 },
+ {4415,4415, 0, 0, 253, 20, 0, 0 },
+ {4415,4415, 12, 0, 253, 20, 0, 0 },
+ {4416,4416, 0, 0, 640, 100, 0, 0 },
+ {4416,4416, 1, 0, 640, 106, 0, 0 },
+ {4417,4417, 0, 0, 133, 106, 0, 0 },
+ {4417,4417, 23, 0, 133, 106, 0, 0 },
+ {4418,4418, 0, 0, 653, 100, 0, 0 },
+ {4419,4419, 0, 0, 4166, 1546, 0, 0 },
+ {4420,4420, 0, 0, 40000, 73, 0, 0 },
+ {4421,4421, 0, 0, 40000, 60, 0, 0 },
+ {4422,4422, 0, 0, 40000, 53, 0, 0 },
+ {4423,4423, 0, 0, 40000, 0, 0, 0 },
+ {4424,4424, 0, 0, 246, 20, 0, 0 },
+ {4425,4425, 0, 2, 6, 0, 0, 0 },
+ {4426,4426, 0, 0, 4946, 233, 0, 0 },
+ {4427,4427, 0, 0, 4946, 233, 0, 0 },
+ {4428,4428, 0, 0, 4953, 240, 0, 0 },
+ {4429,4429, 0, 0, 4946, 233, 0, 0 },
+ {4430,4430, 0, 0, 18233, 46, 0, 0 },
+ {4431,4431, 0, 0, 2386, 26, 0, 0 },
+ {4432,4432, 0, 0, 4640, 633, 0, 0 },
+ {4433,4433, 0, 0, 18466, 100, 0, 0 },
+ {4434,4434, 0, 0, 18440, 66, 0, -2 },
+ {4435,4435, 0, 0, 18440, 6140, 0, -2 },
+ {4436,4436, 0, 0, 1206, 433, 0, -2 },
+ {4437,4437, 0, 0, 4626, 240, 0, 0 },
+ {4438,4438, 0, 0, 726, 400, 0, 0 },
+ {4439,4439, 0, 0, 5866, 73, 0, 0 },
+ {4440,4440, 0, 0, 40000, 73, 0, 0 },
+ {4441,4441, 0, 0, 40000, 73, 0, 0 },
+ {4442,4442, 0, 0, 40000, 73, 0, 0 },
+ {4443,4443, 0, 0, 40000, 73, 0, 0 },
+ {4444,4444, 0, 0, 6500, 346, 0, 0 },
+ {4445,4445, 0, 0, 6506, 346, 0, 0 },
+ {4446,4446, 0, 0, 40000, 66, 0, -2 },
+ {4447,4447, 0, 0, 40000, 66, 0, -2 },
+ {4448,4448, 0, 0, 40000, 0, 0, 0 },
+ {4449,4449, 0, 0, 40000, 46, 0, 0 },
+ {4450,4450, 0, 0, 40000, 0, 0, 0 },
+ {4450,4450, 0, 0, 40000, 0, 0, -2 },
+ {4451,4451, 0, 0, 2386, 26, 0, 0 },
+ {4452,4452, 0, 0, 40000, 73, 0, -2 },
+ {4453,4453, 0, 0, 5866, 26, 0, -2 },
+ {4454,4454, 0, 0, 40000, 133, 0, 0 },
+ {4455,4455, 0, 0, 40000, 133, 0, 0 },
+ {4456,4456, 0, 0, 40000, 126, 0, 0 },
+ {4457,4457, 0, 0, 253, 20, 0, 0 },
+ {4458,4458, 0, 0, 8866, 1366, 0, 0 },
+ {4459,4459, 0, 0, 1040, 766, 0, 0 },
+ {4460,4460, 0, 0, 40000, 146, 0, -2 },
+ {4461,4461, 0, 0, 40000, 153, 0, -2 },
+ {4462,4462, 0, 0, 40000, 466, 0, -2 },
+ {4463,4463, 0, 0, 40000, 66, 0, 0 },
+ {4464,4464, 0, 0, 2333, 566, 0, 0 },
+ {4465,4465, 0, 0, 40000, 140, 0, -2 },
+ {4466,4466, 0, 0, 40000, 100, 0, -2 },
+ {4467,4467, 0, 0, 40000, 226, 0, -2 },
+ {4468,4468, 0, 0, 40000, 0, 0, 0 },
{3712,3712, 0, 0, 40000, 226, 0, -2 },
- {4478,4478, 0, 0, 40000, 140, 0, -2 },
- {4479,4479, 0, 0, 40000, 66, 0, 0 },
- {4480,4480, 0, 0, 40000, 73, 0, 0 },
+ {4469,4469, 0, 0, 40000, 140, 0, -2 },
+ {4470,4470, 0, 0, 40000, 66, 0, 0 },
+ {4471,4471, 0, 0, 40000, 73, 0, 0 },
+ {4472,4472, 0, 0, 40000, 73, 0, 0 },
+ {4473,4473, 0, 0, 40000, 86, 0, -2 },
+ {4474,4474, 0, 0, 40000, 80, 0, 0 },
+ {4475,4475, 0, 0, 40000, 73, 0, -2 },
+ {4476,4476, 0, 0, 40000, 80, 0, -2 },
+ {4477,4477, 0, 0, 40000, 73, 0, -2 },
+ {4478,4478, 0, 0, 40000, 73, 0, 0 },
+ {4479,4479, 0, 0, 40000, 73, 0, 0 },
+ {4480,4480, 0, 0, 40000, 93, 0, 0 },
{4481,4481, 0, 0, 40000, 73, 0, 0 },
- {4482,4482, 0, 0, 40000, 86, 0, -2 },
- {4483,4483, 0, 0, 40000, 80, 0, 0 },
- {4484,4484, 0, 0, 40000, 73, 0, -2 },
- {4485,4485, 0, 0, 40000, 80, 0, -2 },
- {4486,4486, 0, 0, 40000, 73, 0, -2 },
- {4487,4487, 0, 0, 40000, 73, 0, 0 },
- {4488,4488, 0, 0, 40000, 73, 0, 0 },
- {4489,4489, 0, 0, 40000, 93, 0, 0 },
- {4490,4490, 0, 0, 40000, 73, 0, 0 },
- {4491,4491, 0, 0, 11946, 13, 0, 0 },
- {4492,4492, 0, 0, 40000, 73, 0, 0 },
- {4462,4462, 0, 0, 5866, 26, 0, 0 },
- {4493,4493, 0, 0, 40000, 820, 0, 0 },
- {4494,4494, 0, 0, 2153, 873, 0, 0 },
+ {4482,4482, 0, 0, 11946, 13, 0, 0 },
+ {4483,4483, 0, 0, 40000, 73, 0, 0 },
+ {4453,4453, 0, 0, 5866, 26, 0, 0 },
+ {4484,4484, 0, 0, 40000, 820, 0, 0 },
+ {4485,4485, 0, 0, 2153, 873, 0, 0 },
{1221,1221, 0, 0, 40000, 293, 0, 0.171875 },
- {4495,4495, 0, 0, 1620, 120, 0, 0 },
- {4496,4496, 0, 0, 15120, 93, 0, 0 },
- {4497,4497, 0, 0, 14613, 93, 0, 0 },
- {4498,4498, 0, 0, 2346, 793, 0, 0 },
- {4499,4499, 0, 0, 40000, 2380, 0, 0 },
- {4500,4500, 0, 0, 40000, 1280, 0, 0 },
- {4501,4501, 0, 0, 40000, 1460, 0, 0 },
- {4502,4502, 0, 0, 40000, 2513, 0, 0 },
- {4503,4503, 0, 0, 14840, 1266, 0, 0 },
- {4504,4504, 0, 0, 4513, 640, 0, 0 },
- {4505,4505, 0, 0, 4680, 806, 0, 0 },
- {4506,4506, 0, 0, 40000, 100, 0, 0 },
- {4507,4507, 0, 0, 40000, 66, 0, 0 },
- {4508,4508, 0, 0, 2420, 413, 0, 0 },
- {4509,4509, 0, 0, 406, 73, 0, -2 },
- {4510,4510, 0, 0, 1166, 400, 0, 0 },
- {4511,4511, 0, 0, 1213, 106, 0, 0 },
- {4512,4512, 0, 0, 273, 60, 0, -2 },
- {4513,4513, 0, 0, 40000, 2380, 0, 0 },
- {4514,4514, 0, 0, 40000, 440, 0, 0 },
+ {4486,4486, 0, 0, 1620, 120, 0, 0 },
+ {4487,4487, 0, 0, 15120, 93, 0, 0 },
+ {4488,4488, 0, 0, 14613, 93, 0, 0 },
+ {4489,4489, 0, 0, 2346, 793, 0, 0 },
+ {4490,4490, 0, 0, 40000, 2380, 0, 0 },
+ {4491,4491, 0, 0, 40000, 1280, 0, 0 },
+ {4492,4492, 0, 0, 40000, 1460, 0, 0 },
+ {4493,4493, 0, 0, 40000, 2513, 0, 0 },
+ {4494,4494, 0, 0, 14840, 1266, 0, 0 },
+ {4495,4495, 0, 0, 4513, 640, 0, 0 },
+ {4496,4496, 0, 0, 4680, 806, 0, 0 },
+ {4497,4497, 0, 0, 40000, 100, 0, 0 },
+ {4498,4498, 0, 0, 40000, 66, 0, 0 },
+ {4499,4499, 0, 0, 2420, 413, 0, 0 },
+ {4500,4500, 0, 0, 406, 73, 0, -2 },
+ {4501,4501, 0, 0, 1166, 400, 0, 0 },
+ {4502,4502, 0, 0, 1213, 106, 0, 0 },
+ {4503,4503, 0, 0, 273, 60, 0, -2 },
+ {4504,4504, 0, 0, 40000, 2380, 0, 0 },
+ {4505,4505, 0, 0, 40000, 440, 0, 0 },
{1261,1261, 0, 0, 40000, 2960, 0, 0 },
- {4515,4515, 37, 0, 973, 73, 0, -2 },
- {4516,4516, 48, 0, 106, 0, 0, -2 },
- {4517,4517, 48, 0, 286, 133, 0, -2 },
- {4518,4518, 62, 0, 166, 60, 0, 0 },
- {4519,4519, 44, 0, 980, 360, 0, 0 },
- {4520,4520, 80, 0, 100, 0, 0, 0 },
- {4519,4519, 50, 0, 980, 346, 0, 0 },
- {4521,4521, 48, 0, 106, 0, 0, -2 },
- {4519,4519, 55, 0, 973, 360, 0, 0 },
- {4522,4522, 61, 0, 513, 20, 0, 0 },
- {4519,4519, 58, 0, 966, 353, 0, 0 },
- {4519,4519, 63, 0, 973, 353, 0, 0 },
- {4523,4523, 71, 0, 1366, 580, 0, 0 },
- {4519,4519, 72, 0, 820, 306, 0, 0 },
- {4524,4524, 70, 0, 1886, 666, 0, 0 },
- {4523,4523, 88, 0, 1353, 560, 0, 0 },
- {4525,4525, 76, 0, 1873, 653, 0, 0 },
- {4526,4526, 84, 0, 260, 113, 0, 0 },
- {4523,4523, 68, 0, 1366, 553, 0, 0 },
- {4527,4527, 72, 0, 153, 53, 0, 0 },
- {4528,4528, 28, 0, 1193, 413, 0, 0 },
- {4524,4524, 81, 0, 1353, 480, 0, 0 },
- {4529,4529, 58, 0, 246, 120, 0, -2 },
- {4529,4529, 55, 0, 246, 120, 0, -2 },
- {4529,4529, 44, 0, 246, 120, 0, -2 },
- {4529,4529, 49, 0, 246, 120, 0, -2 },
- {4529,4529, 40, 0, 286, 133, 0, -2 },
- {4530,4530, 55, 0, 740, 560, 0, -2 },
- {4530,4530, 48, 0, 893, 693, 0, -2 },
- {4531,4531, 52, 0, 513, 206, 0, 0 },
- {4531,4531, 45, 0, 513, 206, 0, 0 },
- {4532,4532, 48, 0, 173, 100, 0, -2 },
- {4533,4533, 48, 0, 120, 266, 0, -2 },
- {4534,4534, 48, 0, 253, 60, 0, -2 },
- {4509,4509, 73, 0, 160, 20, 0, -2 },
- {4509,4509, 68, 0, 160, 20, 0, -2 },
- {4509,4509, 63, 0, 193, 20, 0, -2 },
- {4535,4535,108, 0, 406, 26, 0, 0 },
- {4536,4536,108, 0, 740, 26, 0, 0 },
+ {4506,4506, 37, 0, 973, 73, 0, -2 },
+ {4507,4507, 48, 0, 106, 0, 0, -2 },
+ {4508,4508, 48, 0, 286, 133, 0, -2 },
+ {4509,4509, 62, 0, 166, 60, 0, 0 },
+ {4510,4510, 44, 0, 980, 360, 0, 0 },
+ {4511,4511, 80, 0, 100, 0, 0, 0 },
+ {4510,4510, 50, 0, 980, 346, 0, 0 },
+ {4512,4512, 48, 0, 106, 0, 0, -2 },
+ {4510,4510, 55, 0, 973, 360, 0, 0 },
+ {4513,4513, 61, 0, 513, 20, 0, 0 },
+ {4510,4510, 58, 0, 966, 353, 0, 0 },
+ {4510,4510, 63, 0, 973, 353, 0, 0 },
+ {4514,4514, 71, 0, 1366, 580, 0, 0 },
+ {4510,4510, 72, 0, 820, 306, 0, 0 },
+ {4515,4515, 70, 0, 1886, 666, 0, 0 },
+ {4514,4514, 88, 0, 1353, 560, 0, 0 },
+ {4516,4516, 76, 0, 1873, 653, 0, 0 },
+ {4517,4517, 84, 0, 260, 113, 0, 0 },
+ {4514,4514, 68, 0, 1366, 553, 0, 0 },
+ {4518,4518, 72, 0, 153, 53, 0, 0 },
+ {4519,4519, 28, 0, 1193, 413, 0, 0 },
+ {4515,4515, 81, 0, 1353, 480, 0, 0 },
+ {4520,4520, 58, 0, 246, 120, 0, -2 },
+ {4520,4520, 55, 0, 246, 120, 0, -2 },
+ {4520,4520, 44, 0, 246, 120, 0, -2 },
+ {4520,4520, 49, 0, 246, 120, 0, -2 },
+ {4520,4520, 40, 0, 286, 133, 0, -2 },
+ {4521,4521, 55, 0, 740, 560, 0, -2 },
+ {4521,4521, 48, 0, 893, 693, 0, -2 },
+ {4522,4522, 52, 0, 513, 206, 0, 0 },
+ {4522,4522, 45, 0, 513, 206, 0, 0 },
+ {4523,4523, 48, 0, 173, 100, 0, -2 },
+ {4524,4524, 48, 0, 120, 266, 0, -2 },
+ {4525,4525, 48, 0, 253, 60, 0, -2 },
+ {4500,4500, 73, 0, 160, 20, 0, -2 },
+ {4500,4500, 68, 0, 160, 20, 0, -2 },
+ {4500,4500, 63, 0, 193, 20, 0, -2 },
+ {4526,4526,108, 0, 406, 26, 0, 0 },
+ {4527,4527,108, 0, 740, 26, 0, 0 },
};
@@ -10562,17 +10544,17 @@ const unsigned short banks[75][256] =
4170,4171,1553,1554, 181,4172,4173,1555, 185,4174,3497,4175,1559, 188,4176,4177,
4178,1562,4179,4180,1565, 195,4181, 197,4182,4183, 200, 201, 28,1566,1567,4184,
4185,4186,4187,4188,4189,4190,4191,4192,1572,1573, 214, 215, 216, 217, 218, 219,
- 220,4193,4194,1575,1576,1577,1578,4195,1579,1580,4196,1581,4197,4198,4199,4200,
- 232, 233, 234, 235,4201, 237, 238,4202,1584,1585, 240,1586, 242, 243, 244,1587,
- 246,4203,4204,1589, 249, 250, 251,1590, 252,4205, 254, 255,4206,4207,4208,4209,
-1595,4210,1596,1597,1598,1599,1600,1601,4211,4212,4213, 267,4214,4215, 270,4216,
-4217,4218, 273,1603,4219,1605, 276,4220,4221,4222,4223,1610,4224,4225,4226, 126,
- 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295,4227,1470,1613,4228,1615,4229,1475,4230,1477,4231,1479,4232,1481,
-1482,4233,1484,4234,4235,4236,1630,4237,2291,4238,1634,3514,1636,1637,1638,1639,
-1640,4239,4240,1643,1644,1645,1646,4241, 342,4242,4243,1651,1652,1653,4244,4245,
-1656,4246,1658,1659,1660,1661,1662,1663, 295, 295, 295, 295, 295, 295, 295, 295,
+ 220,4193,4194,1575,1576,3852,1578,4195,1579,1580,4196,4197,4198,4199,4200,4201,
+ 232, 233, 234, 235,4202, 237, 238,4203,1584,1585, 240,1586,4204, 243, 244,1587,
+ 246,4205,4206,1589, 249, 250, 251,1590, 252,4207, 254,3889,4208,4209,4210,4211,
+1595,4212,1596,1597,4213,1599,1600,1601,4214,4215,4216, 267,4217,4218, 270,4219,
+4220,4221,4222,1603,4223,4224, 276,4225,4226,4227,4228,1610,4229,4230,4231, 126,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,1662,1663, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,4232,4233,4234,4235,4236,
+4237,4238,4239,4240,1470,1613,4241,1615,4242,1475,4243,1477,4244,1479,4245,1481,
+1482,4246,1484,4247,4248,4249,1630,4250,2291,4251,1634,3514,1636,1637,1638,1639,
+1640,4252,4253,1643,1644, 320,4254,4255, 342,4256,4257,4258,4259,1374,4260,4261,
+1656,4262,4263,1659,1660,4264,1662,1663, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
@@ -10584,9 +10566,9 @@ const unsigned short banks[75][256] =
2224, 909,2225, 911, 912,2226,2227, 915, 916,2228,2229, 919, 920, 921, 922, 923,
2230, 925, 926, 927, 928, 929, 295, 931, 932, 933, 934, 935,2232,2233, 938,2234,
940, 295, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955,
- 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966,4249, 968,4250, 295, 295,
-4251,4252,4253,4254,4255,4256,4257, 978,4258,4259,4260,4261,4262,4263,4264,4265,
-4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276, 975, 971, 972, 973, 974,
+ 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966,4267, 968,4268, 295, 295,
+4269,4270,4271,4272,4273,4274,4275, 978,4276,4277,4278,4279,4280,4281,4282,4283,
+4284,4285,4286,4287,4288,4289,4290,4291,4292,4293,4294, 975, 971, 972, 973, 974,
975, 310, 976, 977, 978, 974,2239, 980,2240, 982,2241, 984,2242, 985,2243, 987,
988,2244, 990, 325,2244, 325, 991,2244,2245,2246, 330, 993,2247,2248,2249, 997,
998,2250,2251,1001,1002,1003, 340,1004,1005,1006,1007,1008,1009, 310,1010,1011,
@@ -10595,20 +10577,20 @@ const unsigned short banks[75][256] =
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-3287,4278,3196,3196,4279,3196,3196,3196,3196,3196,3196, 378,3196,3196,3694,3196,
-3196,4280,3196,4281,4282,4283,3196,3196,3196, 370,3196,4284,4285,4286,4287,4288,
-3196,4289,4290,4291,3310,3310,4292, 442,4293,3196,3196,4294,4295,4294, 676,4296,
-4297,3196,3196,4298, 51,3196,3196,3196,4299,3324,4300,3196, 59,4301,4299, 62,
-3196,4302,4302,4303, 67,3196, 664,4304,3196,2316,3196,4305, 70,3196,4306, 78,
-4307,4308, 81,3196,3196,3196,3196,3196,3196,3196,3196, 90,3196,4309, 93,4310,
-3196,3196,3196,3196,3196,3196,3196,4311,3196,3196,3196,3196,3196,3196,3196,3196,
-3196,3196,3196,3196,3196,4112,3196,4312,3196,3196,3196,3196,3196,3196,3196,3196,
+3287,4296,3196,3196,4297,3196,3196,3196,3196,3196,3196, 378,3196,3196,3694,3196,
+3196,4298,3196,4299,4300,4301,3196,3196,3196, 370,3196,4302,4303,4304,4305,4306,
+3196,4307,4308,4309,3310,3310,4310, 442,4311,3196,3196,4312,4313,4312, 676,4314,
+4315,3196,3196,4316, 51,3196,3196,3196,4317,3324,4318,3196, 59,4319,4317, 62,
+3196,4320,4320,4321, 67,3196, 664,4322,3196,2316,3196,4323, 70,3196,4324, 78,
+4325,4326, 81,3196,3196,3196,3196,3196,3196,3196,3196, 90,3196,4327, 93,4328,
+3196,3196,3196,3196,3196,3196,3196,4329,3196,3196,3196,3196,3196,3196,3196,3196,
+3196,3196,3196,3196,3196,4112,3196,4330,3196,3196,3196,3196,3196,3196,3196,3196,
3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,
3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,
-3196,3196,3196,4313,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,
-4325,4326,4327,4328,4329,4330,4331,4332,4333,4334,4335,4336,3196,3196,4337, 154,
-4338,4339,4340,3196,3196, 160,3196,3196,3196,4341,4342,4343,4344,4345,4346,3196,
-3196,4347, 160,4348,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,
+3196,3196,3196,4331,4331,4332,4333,4334,4335,4336,4337,4338,4339,4340,4341,4342,
+4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,3196,3196,4355, 154,
+4356,4357,4358,3196,3196, 160,3196,3196,3196,4359,4360,4361,4362,4363,4364,3196,
+3196,4365, 160,4366,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,
3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,
3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,3196,
},
@@ -10620,7 +10602,7 @@ const unsigned short banks[75][256] =
3863,3864,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,
3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,
3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,
-3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,4349,3921,3922,3923,3924,3925,
+3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,4367,3921,3922,3923,3924,3925,
3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,
3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3986,3987,3987,3987,3987,3987,
3987,3987,3987,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,
@@ -10631,26 +10613,26 @@ const unsigned short banks[75][256] =
3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,3996,
},
{
-4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,
-4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,
-4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,
-4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,
-4414,4415,4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,
-4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,
+4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,
+4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,
+4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,
+4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4197,4427,4428,4429,4430,
+4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4204,4443,4444,4445,
4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,
-4462,4463,4464,4465,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476,4477,
+4462,4463,4464,4465,4466,4467,4468,4469,4470,4215,4216,4471,4472,4218,4473,4474,
+4475,4476,4222,4477,4478,4224,4479,4480,4226,4481,4228,4482,4483,4484,4485,4486,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,4478,4479,4480,4481,4482,
-4483,4484,4485,4486,4487,4488,4489,4490,4229,4491,4492,4493,4494,4495,4232,4496,
-4497,4498,4499,4500,4235,4501,4502,4237,4503,4504,4505,4506,4507,4508,4509,4510,
-4511,4512,4513,4514,4515, 320,4516,4517,4518,4519,4520,4521,4522,1374,4523,4524,
-4525,4526,4527,4528,4529,4530,4531,4532, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,4232,4233,4234,4235,4487,
+4237,4238,4239,4488,4489,4490,4491,4492,4242,4493,4494,4495,4244,4496,4245,4497,
+4498,4499,4500,4501,4248,4502,4503,4250,4504,4505,4506,4507,4508,4509,4510,4511,
+4512,4252,4253,4513,4514, 320,4515,4516,4517,4256,4257,4258,4259,1374,4260,4261,
+4518,4519,4263,4520,4521,4264,4522,4523, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-4533,4534,4535,4536,4534,4537,4538,4539,4540,4541,4542,4544,4545,4546,4547,4548,
-4549,4551,4553,4546,4555,4556,4557,4558,4559,4560,4561, 295, 28, 29, 30, 31,
+4524,4525,4526,4527,4525,4528,4529,4530,4531,4532,4533,4535,4536,4537,4538,4539,
+4540,4542,4544,4537,4546,4547,4548,4549,4550,4551,4552, 295, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 33, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
@@ -10659,28 +10641,28 @@ const unsigned short banks[75][256] =
111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295, 127,4550, 128,4552, 130, 131, 132,4554, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144,4543, 146, 147, 148, 149, 150, 151, 152, 153, 154,
+ 295, 295, 295, 127,4541, 128,4543, 130, 131, 132,4545, 134, 135, 136, 137, 138,
+ 139, 140, 141, 142, 143, 144,4534, 146, 147, 148, 149, 150, 151, 152, 153, 154,
155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
{
-4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574,4575,3295,4572,4576,
-3298,4577,4578,3298,4579,4580,4580,4580, 868, 869, 870,4581,4582,4583,4584,4585,
-4586,4587,4588,4588,4589,4586,4590,4591,3842,4592,4593,4593,4594,4595,4596,4597,
-4598,4599,4600,4600,4601,4107,3322,4602,4603,4604,4605,4606,4607,4603,4603,4608,
-3329, 769,3330,3331,4609,4610,4611,4612,4613,4614,4615,4616,4617,4614,1300,4618,
-4619,4620,4614,4579,4621,4603,4622,4623,3347,4624,4625,4626,4627,1314,4628,4629,
-4630,4631,4632,4625,4625,1322,4633,4634,4635,4636,4637,4636,3295,4638,3842,4639,
-4640,1334,4640,4641,4642,4643, 792,4644,1341,1342,1343,1344,4645,4646,4647,1348,
- 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
- 295, 295, 295,4648,4648,4649,4650,4649,4651,4652,4653,4654,4655,4656,4657,4658,
-4659,4660,4661,4662,4663,4664,4665,4666,4667,4660,4668,4669,4670,4671,4672,4673,
-4674,4675,4676,4677,4678,4679,4680,4677,4678,4679,4681,4682,4683,4684,1375, 295,
-4685,4686, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,3295,4563,4567,
+3298,4568,4569,3298,4570,4571,4571,4571, 868, 869, 870,4572,4573,4574,4575,4576,
+4577,4578,4579,4579,4580,4577,4581,4582,3842,4583,4584,4584,4585,4586,4587,4588,
+4589,4590,4591,4591,4592,4107,3322,4593,4594,4595,4596,4597,4598,4594,4594,4599,
+3329, 769,3330,3331,4600,4601,4602,4603,4604,4605,4606,4607,4608,4605,1300,4609,
+4610,4611,4605,4570,4612,4594,4613,4614,3347,4615,4616,4617,4618,1314,4619,4620,
+4621,4622,4623,4616,4616,1322,4624,4625,4626,4627,4628,4627,3295,4629,3842,4630,
+4631,1334,4631,4632,4633,4634, 792,4635,1341,1342,1343,1344,4636,4637,4638,1348,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
+ 295, 295, 295,4639,4639,4640,4641,4640,4642,4643,4644,4645,4646,4647,4648,4649,
+4650,4651,4652,4653,4654,4655,4656,4657,4658,4651,4659,4660,4661,4662,4663,4664,
+4665,4666,4667,4668,4669,4670,4671,4668,4669,4670,4672,4673,4674,4675,1375, 295,
+4676,4677, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
},
diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp
index 26a21e4..bde8757 100644
--- a/src/adlmidi.cpp
+++ b/src/adlmidi.cpp
@@ -60,7 +60,7 @@ ADLMIDI_EXPORT struct ADL_MIDIPlayer *adl_init(long sample_rate)
return NULL;
}
- MIDIplay *player = new MIDIplay(static_cast<unsigned long>(sample_rate));
+ MIDIplay *player = new(std::nothrow) MIDIplay(static_cast<unsigned long>(sample_rate));
if(!player)
{
free(midi_device);
@@ -76,9 +76,9 @@ ADLMIDI_EXPORT void adl_close(struct ADL_MIDIPlayer *device)
{
if(!device)
return;
- MIDIplay * play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
- if(play)
- delete play;
+ MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
+ delete play;
device->adl_midiPlayer = NULL;
free(device);
device = NULL;
@@ -89,8 +89,7 @@ ADLMIDI_EXPORT int adl_setDeviceIdentifier(ADL_MIDIPlayer *device, unsigned id)
if(!device || id > 0x0f)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1;
+ assert(play);
play->setDeviceId(static_cast<uint8_t>(id));
return 0;
}
@@ -101,6 +100,7 @@ ADLMIDI_EXPORT int adl_setNumChips(ADL_MIDIPlayer *device, int numChips)
return -2;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
#ifdef ADLMIDI_HW_OPL
ADL_UNUSED(numChips);
play->m_setup.numChips = 1;
@@ -124,9 +124,8 @@ ADLMIDI_EXPORT int adl_getNumChips(struct ADL_MIDIPlayer *device)
if(device == NULL)
return -2;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(play)
- return (int)play->m_setup.numChips;
- return -2;
+ assert(play);
+ return (int)play->m_setup.numChips;
}
ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank)
@@ -134,6 +133,7 @@ ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank)
#ifdef DISABLE_EMBEDDED_BANKS
ADL_UNUSED(bank);
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->setErrorString("This build of libADLMIDI has no embedded banks. "
"Please load banks by using adl_openBankFile() or "
"adl_openBankData() functions instead of adl_setBank().");
@@ -146,6 +146,7 @@ ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank)
bankno = 0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
if(static_cast<uint32_t>(bankno) >= NumBanks)
{
char errBuf[150];
@@ -185,6 +186,7 @@ ADLMIDI_EXPORT int adl_reserveBanks(ADL_MIDIPlayer *device, unsigned banks)
if(!device)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
OPL3::BankMap &map = play->m_synth.m_insBanks;
map.reserve(banks);
return (int)map.capacity();
@@ -201,6 +203,7 @@ ADLMIDI_EXPORT int adl_getBank(ADL_MIDIPlayer *device, const ADL_BankId *idp, in
size_t idnumber = ((id.msb << 8) | id.lsb | (id.percussive ? size_t(OPL3::PercussionTag) : 0));
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
OPL3::BankMap &map = play->m_synth.m_insBanks;
OPL3::BankMap::iterator it;
@@ -253,6 +256,7 @@ ADLMIDI_EXPORT int adl_removeBank(ADL_MIDIPlayer *device, ADL_Bank *bank)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
OPL3::BankMap &map = play->m_synth.m_insBanks;
OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer);
size_t size = map.size();
@@ -266,6 +270,7 @@ ADLMIDI_EXPORT int adl_getFirstBank(ADL_MIDIPlayer *device, ADL_Bank *bank)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
OPL3::BankMap &map = play->m_synth.m_insBanks;
OPL3::BankMap::iterator it = map.begin();
@@ -282,6 +287,7 @@ ADLMIDI_EXPORT int adl_getNextBank(ADL_MIDIPlayer *device, ADL_Bank *bank)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
OPL3::BankMap &map = play->m_synth.m_insBanks;
OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer);
@@ -295,7 +301,7 @@ ADLMIDI_EXPORT int adl_getNextBank(ADL_MIDIPlayer *device, ADL_Bank *bank)
ADLMIDI_EXPORT int adl_getInstrument(ADL_MIDIPlayer *device, const ADL_Bank *bank, unsigned index, ADL_Instrument *ins)
{
if(!device || !bank || index > 127 || !ins)
- return 1;
+ return -1;
OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer);
cvt_FMIns_to_ADLI(*ins, it->second.ins[index]);
@@ -306,10 +312,10 @@ ADLMIDI_EXPORT int adl_getInstrument(ADL_MIDIPlayer *device, const ADL_Bank *ban
ADLMIDI_EXPORT int adl_setInstrument(ADL_MIDIPlayer *device, ADL_Bank *bank, unsigned index, const ADL_Instrument *ins)
{
if(!device || !bank || index > 127 || !ins)
- return 1;
+ return -1;
if(ins->version != 0)
- return 1;
+ return -1;
OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer);
cvt_ADLI_to_FMIns(it->second.ins[index], *ins);
@@ -320,13 +326,12 @@ ADLMIDI_EXPORT int adl_loadEmbeddedBank(struct ADL_MIDIPlayer *device, ADL_Bank
{
if(!device)
return -1;
- MidiPlayer *play = GET_MIDI_PLAYER(device);
- if (!play)
- return -1;
#ifdef DISABLE_EMBEDDED_BANKS
ADL_UNUSED(bank);
ADL_UNUSED(num);
+ MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->setErrorString("This build of libADLMIDI has no embedded banks. "
"Please load banks by using adl_openBankFile() or "
"adl_openBankData() functions instead of adl_loadEmbeddedBank().");
@@ -356,6 +361,7 @@ ADLMIDI_EXPORT int adl_setNumFourOpsChn(ADL_MIDIPlayer *device, int ops4)
return adlRefreshNumCards(device);
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
if((unsigned int)ops4 > 6 * play->m_setup.numChips)
{
char errBuff[250];
@@ -376,15 +382,15 @@ ADLMIDI_EXPORT int adl_getNumFourOpsChn(struct ADL_MIDIPlayer *device)
if(!device)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(play)
- return (int)play->m_setup.numFourOps;
- return -1;
+ assert(play);
+ return (int)play->m_setup.numFourOps;
}
ADLMIDI_EXPORT void adl_setPercMode(ADL_MIDIPlayer *device, int percmod)
{
if(!device) return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->m_setup.rhythmMode = percmod;
play->m_synth.m_rhythmMode = play->m_setup.rhythmMode < 0 ?
(play->m_synth.m_insBankSetup.adLibPercussions) :
@@ -396,6 +402,7 @@ ADLMIDI_EXPORT void adl_setHVibrato(ADL_MIDIPlayer *device, int hvibro)
{
if(!device) return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->m_setup.deepVibratoMode = hvibro;
play->m_synth.m_deepVibratoMode = play->m_setup.deepVibratoMode < 0 ?
play->m_synth.m_insBankSetup.deepVibrato :
@@ -403,10 +410,19 @@ ADLMIDI_EXPORT void adl_setHVibrato(ADL_MIDIPlayer *device, int hvibro)
play->m_synth.commitDeepFlags();
}
+ADLMIDI_EXPORT int adl_getHVibrato(struct ADL_MIDIPlayer *device)
+{
+ if(!device) return -1;
+ MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
+ return play->m_synth.m_deepVibratoMode;
+}
+
ADLMIDI_EXPORT void adl_setHTremolo(ADL_MIDIPlayer *device, int htremo)
{
if(!device) return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->m_setup.deepTremoloMode = htremo;
play->m_synth.m_deepTremoloMode = play->m_setup.deepTremoloMode < 0 ?
play->m_synth.m_insBankSetup.deepTremolo :
@@ -414,13 +430,20 @@ ADLMIDI_EXPORT void adl_setHTremolo(ADL_MIDIPlayer *device, int htremo)
play->m_synth.commitDeepFlags();
}
+ADLMIDI_EXPORT int adl_getHTremolo(struct ADL_MIDIPlayer *device)
+{
+ if(!device) return -1;
+ MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
+ return play->m_synth.m_deepTremoloMode;
+}
+
ADLMIDI_EXPORT void adl_setScaleModulators(ADL_MIDIPlayer *device, int smod)
{
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->m_setup.scaleModulators = smod;
play->m_synth.m_scaleModulators = play->m_setup.scaleModulators < 0 ?
play->m_synth.m_insBankSetup.scaleModulators :
@@ -432,8 +455,7 @@ ADLMIDI_EXPORT void adl_setFullRangeBrightness(struct ADL_MIDIPlayer *device, in
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->m_setup.fullRangeBrightnessCC74 = (fr_brightness != 0);
}
@@ -442,8 +464,7 @@ ADLMIDI_EXPORT void adl_setLoopEnabled(ADL_MIDIPlayer *device, int loopEn)
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
play->m_sequencer.setLoopEnabled(loopEn != 0);
#else
@@ -456,8 +477,7 @@ ADLMIDI_EXPORT void adl_setSoftPanEnabled(ADL_MIDIPlayer *device, int softPanEn)
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->m_synth.m_softPanning = (softPanEn != 0);
}
@@ -467,8 +487,7 @@ ADLMIDI_EXPORT void adl_setLogarithmicVolumes(struct ADL_MIDIPlayer *device, int
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->m_setup.logarithmicVolumes = (logvol != 0);
if(play->m_setup.logarithmicVolumes)
play->m_synth.setVolumeScaleModel(ADLMIDI_VolumeModel_NativeOPL3);
@@ -481,8 +500,7 @@ ADLMIDI_EXPORT void adl_setVolumeRangeModel(struct ADL_MIDIPlayer *device, int v
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->m_setup.volumeScaleModel = volumeModel;
if(play->m_setup.volumeScaleModel == ADLMIDI_VolumeModel_AUTO)//Use bank default volume model
play->m_synth.m_volumeScale = (OPL3::VolumesScale)play->m_synth.m_insBankSetup.volumeModel;
@@ -490,11 +508,21 @@ ADLMIDI_EXPORT void adl_setVolumeRangeModel(struct ADL_MIDIPlayer *device, int v
play->m_synth.setVolumeScaleModel(static_cast<ADLMIDI_VolumeModels>(volumeModel));
}
+ADLMIDI_EXPORT int adl_getVolumeRangeModel(struct ADL_MIDIPlayer *device)
+{
+ if(!device)
+ return -1;
+ MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
+ return play->m_synth.getVolumeScaleModel();
+}
+
ADLMIDI_EXPORT int adl_openBankFile(struct ADL_MIDIPlayer *device, const char *filePath)
{
- if(device && device->adl_midiPlayer)
+ if(device)
{
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->m_setup.tick_skip_samples_delay = 0;
if(!play->LoadBank(filePath))
{
@@ -512,11 +540,10 @@ ADLMIDI_EXPORT int adl_openBankFile(struct ADL_MIDIPlayer *device, const char *f
ADLMIDI_EXPORT int adl_openBankData(struct ADL_MIDIPlayer *device, const void *mem, unsigned long size)
{
- if(device && device->adl_midiPlayer)
+ if(device)
{
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1;
+ assert(play);
play->m_setup.tick_skip_samples_delay = 0;
if(!play->LoadBank(mem, static_cast<size_t>(size)))
{
@@ -534,11 +561,10 @@ ADLMIDI_EXPORT int adl_openBankData(struct ADL_MIDIPlayer *device, const void *m
ADLMIDI_EXPORT int adl_openFile(ADL_MIDIPlayer *device, const char *filePath)
{
- if(device && device->adl_midiPlayer)
+ if(device)
{
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1;
+ assert(play);
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
play->m_setup.tick_skip_samples_delay = 0;
if(!play->LoadMIDI(filePath))
@@ -562,11 +588,10 @@ ADLMIDI_EXPORT int adl_openFile(ADL_MIDIPlayer *device, const char *filePath)
ADLMIDI_EXPORT int adl_openData(ADL_MIDIPlayer *device, const void *mem, unsigned long size)
{
- if(device && device->adl_midiPlayer)
+ if(device)
{
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1;
+ assert(play);
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
play->m_setup.tick_skip_samples_delay = 0;
if(!play->LoadMIDI(mem, static_cast<size_t>(size)))
@@ -600,9 +625,10 @@ ADLMIDI_EXPORT const char *adl_chipEmulatorName(struct ADL_MIDIPlayer *device)
{
#ifndef ADLMIDI_HW_OPL
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(play && !play->m_synth.m_chips.empty())
+ assert(play);
+ if(!play->m_synth.m_chips.empty())
return play->m_synth.m_chips[0]->emulatorName();
- #else
+#else
return "Hardware OPL3 chip on 0x330";
#endif
}
@@ -615,8 +641,6 @@ ADLMIDI_EXPORT int adl_switchEmulator(struct ADL_MIDIPlayer *device, int emulato
{
MidiPlayer *play = GET_MIDI_PLAYER(device);
assert(play);
- if(!play)
- return -1;
if(adl_isEmulatorAvailable(emulator))
{
play->m_setup.emulator = emulator;
@@ -634,12 +658,10 @@ ADLMIDI_EXPORT int adl_setRunAtPcmRate(ADL_MIDIPlayer *device, int enabled)
if(device)
{
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(play)
- {
- play->m_setup.runAtPcmRate = (enabled != 0);
- play->partialReset();
- return 0;
- }
+ assert(play);
+ play->m_setup.runAtPcmRate = (enabled != 0);
+ play->partialReset();
+ return 0;
}
return -1;
}
@@ -679,6 +701,7 @@ ADLMIDI_EXPORT void adl_reset(struct ADL_MIDIPlayer *device)
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->partialReset();
play->resetMIDI();
}
@@ -689,8 +712,7 @@ ADLMIDI_EXPORT double adl_totalTimeLength(struct ADL_MIDIPlayer *device)
if(!device)
return -1.0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1.0;
+ assert(play);
return play->m_sequencer.timeLength();
#else
ADL_UNUSED(device);
@@ -704,8 +726,7 @@ ADLMIDI_EXPORT double adl_loopStartTime(struct ADL_MIDIPlayer *device)
if(!device)
return -1.0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1.0;
+ assert(play);
return play->m_sequencer.getLoopStart();
#else
ADL_UNUSED(device);
@@ -719,8 +740,7 @@ ADLMIDI_EXPORT double adl_loopEndTime(struct ADL_MIDIPlayer *device)
if(!device)
return -1.0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1.0;
+ assert(play);
return play->m_sequencer.getLoopEnd();
#else
ADL_UNUSED(device);
@@ -734,8 +754,7 @@ ADLMIDI_EXPORT double adl_positionTell(struct ADL_MIDIPlayer *device)
if(!device)
return -1.0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1.0;
+ assert(play);
return play->m_sequencer.tell();
#else
ADL_UNUSED(device);
@@ -751,8 +770,7 @@ ADLMIDI_EXPORT void adl_positionSeek(struct ADL_MIDIPlayer *device, double secon
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_panic();
play->m_setup.delay = play->m_sequencer.seek(seconds, play->m_setup.mindelay);
play->m_setup.carry = 0.0;
@@ -768,8 +786,7 @@ ADLMIDI_EXPORT void adl_positionRewind(struct ADL_MIDIPlayer *device)
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_panic();
play->m_sequencer.rewind();
#else
@@ -783,8 +800,7 @@ ADLMIDI_EXPORT void adl_setTempo(struct ADL_MIDIPlayer *device, double tempo)
if(!device || (tempo <= 0.0))
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->m_sequencer.setTempo(tempo);
#else
ADL_UNUSED(device);
@@ -797,9 +813,8 @@ ADLMIDI_EXPORT int adl_describeChannels(struct ADL_MIDIPlayer *device, char *str
{
if(!device)
return -1;
- MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
- if(!play)
- return -1;
+ MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->describeChannels(str, attr, size);
return 0;
}
@@ -811,8 +826,7 @@ ADLMIDI_EXPORT const char *adl_metaMusicTitle(struct ADL_MIDIPlayer *device)
if(!device)
return "";
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return "";
+ assert(play);
return play->m_sequencer.getMusicTitle().c_str();
#else
ADL_UNUSED(device);
@@ -827,8 +841,7 @@ ADLMIDI_EXPORT const char *adl_metaMusicCopyright(struct ADL_MIDIPlayer *device)
if(!device)
return "";
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return "";
+ assert(play);
return play->m_sequencer.getMusicCopyright().c_str();
#else
ADL_UNUSED(device);
@@ -842,8 +855,7 @@ ADLMIDI_EXPORT size_t adl_metaTrackTitleCount(struct ADL_MIDIPlayer *device)
if(!device)
return 0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return 0;
+ assert(play);
return play->m_sequencer.getTrackTitles().size();
#else
ADL_UNUSED(device);
@@ -857,6 +869,7 @@ ADLMIDI_EXPORT const char *adl_metaTrackTitle(struct ADL_MIDIPlayer *device, siz
if(!device)
return "";
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
const std::vector<std::string> &titles = play->m_sequencer.getTrackTitles();
if(index >= titles.size())
return "INVALID";
@@ -875,8 +888,7 @@ ADLMIDI_EXPORT size_t adl_metaMarkerCount(struct ADL_MIDIPlayer *device)
if(!device)
return 0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return 0;
+ assert(play);
return play->m_sequencer.getMarkers().size();
#else
ADL_UNUSED(device);
@@ -887,23 +899,32 @@ ADLMIDI_EXPORT size_t adl_metaMarkerCount(struct ADL_MIDIPlayer *device)
ADLMIDI_EXPORT Adl_MarkerEntry adl_metaMarker(struct ADL_MIDIPlayer *device, size_t index)
{
struct Adl_MarkerEntry marker;
+
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
- MidiPlayer *play = GET_MIDI_PLAYER(device);
- const std::vector<MidiSequencer::MIDI_MarkerEntry> &markers = play->m_sequencer.getMarkers();
- if(!device || !play || (index >= markers.size()))
+ if(!device)
{
marker.label = "INVALID";
marker.pos_time = 0.0;
marker.pos_ticks = 0;
return marker;
}
- else
+
+ MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
+
+ const std::vector<MidiSequencer::MIDI_MarkerEntry> &markers = play->m_sequencer.getMarkers();
+ if(index >= markers.size())
{
- const MidiSequencer::MIDI_MarkerEntry &mk = markers[index];
- marker.label = mk.label.c_str();
- marker.pos_time = mk.pos_time;
- marker.pos_ticks = (unsigned long)mk.pos_ticks;
+ marker.label = "INVALID";
+ marker.pos_time = 0.0;
+ marker.pos_ticks = 0;
+ return marker;
}
+
+ const MidiSequencer::MIDI_MarkerEntry &mk = markers[index];
+ marker.label = mk.label.c_str();
+ marker.pos_time = mk.pos_time;
+ marker.pos_ticks = (unsigned long)mk.pos_ticks;
#else
ADL_UNUSED(device);
ADL_UNUSED(index);
@@ -920,6 +941,7 @@ ADLMIDI_EXPORT void adl_setRawEventHook(struct ADL_MIDIPlayer *device, ADL_RawEv
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->m_sequencerInterface.onEvent = rawEventHook;
play->m_sequencerInterface.onEvent_userData = userData;
#else
@@ -935,6 +957,7 @@ ADLMIDI_EXPORT void adl_setNoteHook(struct ADL_MIDIPlayer *device, ADL_NoteHook
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->hooks.onNote = noteHook;
play->hooks.onNote_userData = userData;
}
@@ -945,6 +968,7 @@ ADLMIDI_EXPORT void adl_setDebugMessageHook(struct ADL_MIDIPlayer *device, ADL_D
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
+ assert(play);
play->hooks.onDebugMessage = debugMessageHook;
play->hooks.onDebugMessage_userData = userData;
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
@@ -1169,6 +1193,7 @@ ADLMIDI_EXPORT int adl_playFormat(ADL_MIDIPlayer *device, int sampleCount,
return 0;
MidiPlayer *player = GET_MIDI_PLAYER(device);
+ assert(player);
MidiPlayer::Setup &setup = player->m_setup;
ssize_t gotten_len = 0;
@@ -1275,6 +1300,7 @@ ADLMIDI_EXPORT int adl_generateFormat(struct ADL_MIDIPlayer *device, int sampleC
return 0;
MidiPlayer *player = GET_MIDI_PLAYER(device);
+ assert(player);
MidiPlayer::Setup &setup = player->m_setup;
ssize_t gotten_len = 0;
@@ -1335,8 +1361,7 @@ ADLMIDI_EXPORT double adl_tickEvents(struct ADL_MIDIPlayer *device, double secon
if(!device)
return -1.0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1.0;
+ assert(play);
return play->Tick(seconds, granulality);
#else
ADL_UNUSED(device);
@@ -1352,8 +1377,7 @@ ADLMIDI_EXPORT int adl_atEnd(struct ADL_MIDIPlayer *device)
if(!device)
return 1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return 1;
+ assert(play);
return (int)play->m_sequencer.positionAtEnd();
#else
ADL_UNUSED(device);
@@ -1367,8 +1391,7 @@ ADLMIDI_EXPORT size_t adl_trackCount(struct ADL_MIDIPlayer *device)
if(!device)
return 0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return 0;
+ assert(play);
return play->m_sequencer.getTrackCount();
#else
ADL_UNUSED(device);
@@ -1382,8 +1405,7 @@ ADLMIDI_EXPORT int adl_setTrackOptions(struct ADL_MIDIPlayer *device, size_t tra
if(!device)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1;
+ assert(play);
MidiSequencer &seq = play->m_sequencer;
unsigned enableFlag = trackOptions & 3;
@@ -1424,8 +1446,7 @@ ADLMIDI_EXPORT int adl_setTriggerHandler(struct ADL_MIDIPlayer *device, ADL_Trig
if(!device)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1;
+ assert(play);
MidiSequencer &seq = play->m_sequencer;
seq.setTriggerHandler(handler, userData);
return 0;
@@ -1442,8 +1463,7 @@ ADLMIDI_EXPORT void adl_panic(struct ADL_MIDIPlayer *device)
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_panic();
}
@@ -1452,8 +1472,7 @@ ADLMIDI_EXPORT void adl_rt_resetState(struct ADL_MIDIPlayer *device)
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_ResetState();
}
@@ -1462,8 +1481,7 @@ ADLMIDI_EXPORT int adl_rt_noteOn(struct ADL_MIDIPlayer *device, ADL_UInt8 channe
if(!device)
return 0;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return 0;
+ assert(play);
return (int)play->realTime_NoteOn(channel, note, velocity);
}
@@ -1472,8 +1490,7 @@ ADLMIDI_EXPORT void adl_rt_noteOff(struct ADL_MIDIPlayer *device, ADL_UInt8 chan
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_NoteOff(channel, note);
}
@@ -1482,8 +1499,7 @@ ADLMIDI_EXPORT void adl_rt_noteAfterTouch(struct ADL_MIDIPlayer *device, ADL_UIn
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_NoteAfterTouch(channel, note, atVal);
}
@@ -1492,8 +1508,7 @@ ADLMIDI_EXPORT void adl_rt_channelAfterTouch(struct ADL_MIDIPlayer *device, ADL_
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_ChannelAfterTouch(channel, atVal);
}
@@ -1502,8 +1517,7 @@ ADLMIDI_EXPORT void adl_rt_controllerChange(struct ADL_MIDIPlayer *device, ADL_U
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_Controller(channel, type, value);
}
@@ -1512,8 +1526,7 @@ ADLMIDI_EXPORT void adl_rt_patchChange(struct ADL_MIDIPlayer *device, ADL_UInt8
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_PatchChange(channel, patch);
}
@@ -1522,8 +1535,7 @@ ADLMIDI_EXPORT void adl_rt_pitchBend(struct ADL_MIDIPlayer *device, ADL_UInt8 ch
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_PitchBend(channel, pitch);
}
@@ -1532,8 +1544,7 @@ ADLMIDI_EXPORT void adl_rt_pitchBendML(struct ADL_MIDIPlayer *device, ADL_UInt8
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_PitchBend(channel, msb, lsb);
}
@@ -1542,8 +1553,7 @@ ADLMIDI_EXPORT void adl_rt_bankChangeLSB(struct ADL_MIDIPlayer *device, ADL_UInt
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_BankChangeLSB(channel, lsb);
}
@@ -1552,8 +1562,7 @@ ADLMIDI_EXPORT void adl_rt_bankChangeMSB(struct ADL_MIDIPlayer *device, ADL_UInt
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_BankChangeMSB(channel, msb);
}
@@ -1562,8 +1571,7 @@ ADLMIDI_EXPORT void adl_rt_bankChange(struct ADL_MIDIPlayer *device, ADL_UInt8 c
if(!device)
return;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return;
+ assert(play);
play->realTime_BankChange(channel, (uint16_t)bank);
}
@@ -1572,7 +1580,6 @@ ADLMIDI_EXPORT int adl_rt_systemExclusive(struct ADL_MIDIPlayer *device, const A
if(!device)
return -1;
MidiPlayer *play = GET_MIDI_PLAYER(device);
- if(!play)
- return -1;
+ assert(play);
return play->realTime_SysEx(msg, size);
}
diff --git a/src/adlmidi_opl3.cpp b/src/adlmidi_opl3.cpp
index aff879a..e486dd6 100644
--- a/src/adlmidi_opl3.cpp
+++ b/src/adlmidi_opl3.cpp
@@ -631,6 +631,24 @@ void OPL3::setVolumeScaleModel(ADLMIDI_VolumeModels volumeModel)
}
}
+ADLMIDI_VolumeModels OPL3::getVolumeScaleModel()
+{
+ switch(m_volumeScale)
+ {
+ default:
+ case OPL3::VOLUME_Generic:
+ return ADLMIDI_VolumeModel_Generic;
+ case OPL3::VOLUME_NATIVE:
+ return ADLMIDI_VolumeModel_NativeOPL3;
+ case OPL3::VOLUME_DMX:
+ return ADLMIDI_VolumeModel_DMX;
+ case OPL3::VOLUME_APOGEE:
+ return ADLMIDI_VolumeModel_APOGEE;
+ case OPL3::VOLUME_9X:
+ return ADLMIDI_VolumeModel_9X;
+ }
+}
+
#ifndef ADLMIDI_HW_OPL
void OPL3::clearChips()
{
diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp
index 2fc12a4..c5b70ee 100644
--- a/src/adlmidi_private.hpp
+++ b/src/adlmidi_private.hpp
@@ -82,6 +82,7 @@ typedef int32_t ssize_t;
//#else
#include <map>
#include <set>
+#include <new> // nothrow
//#endif
#include <cstdlib>
#include <cstring>
@@ -448,6 +449,11 @@ public:
*/
void setVolumeScaleModel(ADLMIDI_VolumeModels volumeModel);
+ /**
+ * @brief Get the volume scaling model
+ */
+ ADLMIDI_VolumeModels getVolumeScaleModel();
+
#ifndef ADLMIDI_HW_OPL
/**
* @brief Clean up all running emulated chip instances
diff --git a/src/chips/dosbox/dbopl.cpp b/src/chips/dosbox/dbopl.cpp
index 4eb79f8..2d31708 100644
--- a/src/chips/dosbox/dbopl.cpp
+++ b/src/chips/dosbox/dbopl.cpp
@@ -37,6 +37,7 @@
#include <math.h>
#include <stdlib.h>
#include <string.h>
+#include <vector>
#include "dbopl.h"
#if defined(__GNUC__) && __GNUC__ > 3
@@ -70,6 +71,36 @@
#define PI 3.14159265358979323846
#endif
+struct NoCopy {
+ NoCopy() {}
+private:
+ NoCopy(const NoCopy &);
+ NoCopy &operator=(const NoCopy &);
+};
+#if !defined(_WIN32)
+#include <pthread.h>
+struct Mutex : NoCopy {
+ Mutex() : m(PTHREAD_MUTEX_INITIALIZER) {}
+ void lock() { pthread_mutex_lock(&m); }
+ void unlock() { pthread_mutex_unlock(&m); }
+ pthread_mutex_t m;
+};
+#else
+#include <windows.h>
+struct Mutex : NoCopy {
+ Mutex() { InitializeCriticalSection(&m); }
+ ~Mutex() { DeleteCriticalSection(&m); }
+ void lock() { EnterCriticalSection(&m); }
+ void unlock() { LeaveCriticalSection(&m); }
+ CRITICAL_SECTION m;
+};
+#endif
+struct MutexHolder : NoCopy {
+ explicit MutexHolder(Mutex &m) : m(m) { m.lock(); }
+ ~MutexHolder() { m.unlock(); }
+ Mutex &m;
+};
+
namespace DBOPL {
#define OPLRATE ((double)(14318180.0 / 288.0))
@@ -222,24 +253,24 @@ static const Bit8u KslShiftTable[4] = {
// Pan law table
static const Bit16u PanLawTable[] =
{
- 65535, 65529, 65514, 65489, 65454, 65409, 65354, 65289,
- 65214, 65129, 65034, 64929, 64814, 64689, 64554, 64410,
- 64255, 64091, 63917, 63733, 63540, 63336, 63123, 62901,
- 62668, 62426, 62175, 61914, 61644, 61364, 61075, 60776,
- 60468, 60151, 59825, 59489, 59145, 58791, 58428, 58057,
- 57676, 57287, 56889, 56482, 56067, 55643, 55211, 54770,
- 54320, 53863, 53397, 52923, 52441, 51951, 51453, 50947,
- 50433, 49912, 49383, 48846, 48302, 47750, 47191,
- 46340, /* Center left */
- 46340, /* Center right */
- 45472, 44885, 44291, 43690, 43083, 42469, 41848, 41221,
- 40588, 39948, 39303, 38651, 37994, 37330, 36661, 35986,
- 35306, 34621, 33930, 33234, 32533, 31827, 31116, 30400,
- 29680, 28955, 28225, 27492, 26754, 26012, 25266, 24516,
- 23762, 23005, 22244, 21480, 20713, 19942, 19169, 18392,
- 17613, 16831, 16046, 15259, 14469, 13678, 12884, 12088,
- 11291, 10492, 9691, 8888, 8085, 7280, 6473, 5666,
- 4858, 4050, 3240, 2431, 1620, 810, 0
+ 65535, 65529, 65514, 65489, 65454, 65409, 65354, 65289,
+ 65214, 65129, 65034, 64929, 64814, 64689, 64554, 64410,
+ 64255, 64091, 63917, 63733, 63540, 63336, 63123, 62901,
+ 62668, 62426, 62175, 61914, 61644, 61364, 61075, 60776,
+ 60468, 60151, 59825, 59489, 59145, 58791, 58428, 58057,
+ 57676, 57287, 56889, 56482, 56067, 55643, 55211, 54770,
+ 54320, 53863, 53397, 52923, 52441, 51951, 51453, 50947,
+ 50433, 49912, 49383, 48846, 48302, 47750, 47191,
+ 46340, /* Center left */
+ 46340, /* Center right */
+ 45472, 44885, 44291, 43690, 43083, 42469, 41848, 41221,
+ 40588, 39948, 39303, 38651, 37994, 37330, 36661, 35986,
+ 35306, 34621, 33930, 33234, 32533, 31827, 31116, 30400,
+ 29680, 28955, 28225, 27492, 26754, 26012, 25266, 24516,
+ 23762, 23005, 22244, 21480, 20713, 19942, 19169, 18392,
+ 17613, 16831, 16046, 15259, 14469, 13678, 12884, 12088,
+ 11291, 10492, 9691, 8888, 8085, 7280, 6473, 5666,
+ 4858, 4050, 3240, 2431, 1620, 810, 0
};
//Generate a table index and table shift value using input value from a selected rate
@@ -465,7 +496,7 @@ Bits Operator::TemplateVolume( ) {
return vol;
}
//In sustain phase, but not sustaining, do regular release
- /* fall through */
+ /* fall through */
case RELEASE:
vol += RateForward( releaseAdd );;
if ( GCC_UNLIKELY(vol >= ENV_MAX) ) {
@@ -1294,21 +1325,40 @@ void Chip::GenerateBlock3_Mix( Bitu total, Bit32s* output ) {
}
}
-void Chip::Setup( Bit32u rate ) {
+struct CacheEntry {
+ Bit32u rate;
+ Bit32u freqMul[16];
+ Bit32u linearRates[76];
+ Bit32u attackRates[76];
+};
+static std::vector<CacheEntry> cache;
+static Mutex cacheMutex;
+
+static const CacheEntry *CacheLookupRateDependent( Bit32u rate )
+{
+ for ( size_t i = 0, n = cache.size(); i < n; ++i ) {
+ if (cache[i].rate == rate)
+ return &cache[i];
+ }
+ return NULL;
+}
+
+static const CacheEntry &ComputeRateDependent( Bit32u rate )
+{
+ {
+ MutexHolder lock( cacheMutex );
+ if (const CacheEntry *entry = CacheLookupRateDependent( rate ))
+ return *entry;
+ }
+
double original = OPLRATE;
-// double original = rate;
double scale = original / (double)rate;
- //Noise counter is run at the same precision as general waves
- noiseAdd = (Bit32u)( 0.5 + scale * ( 1 << LFO_SH ) );
- noiseCounter = 0;
- noiseValue = 1; //Make sure it triggers the noise xor the first time
- //The low frequency oscillation counter
- //Every time his overflows vibrato and tremoloindex are increased
- lfoAdd = (Bit32u)( 0.5 + scale * ( 1 << LFO_SH ) );
- lfoCounter = 0;
- vibratoIndex = 0;
- tremoloIndex = 0;
+ CacheEntry entry;
+ entry.rate = rate;
+ Bit32u *freqMul = entry.freqMul;
+ Bit32u *linearRates = entry.linearRates;
+ Bit32u *attackRates = entry.attackRates;
//With higher octave this gets shifted up
//-1 since the freqCreateTable = *2
@@ -1330,6 +1380,7 @@ void Chip::Setup( Bit32u rate ) {
EnvelopeSelect( i, index, shift );
linearRates[i] = (Bit32u)( scale * (EnvelopeIncreaseTable[ index ] << ( RATE_SH + ENV_EXTRA - shift - 3 )));
}
+
// Bit32s attackDiffs[62];
//Generate the best matching attack rate
for ( Bit8u i = 0; i < 62; i++ ) {
@@ -1382,6 +1433,36 @@ void Chip::Setup( Bit32u rate ) {
//This should provide instant volume maximizing
attackRates[i] = 8 << RATE_SH;
}
+
+ MutexHolder lock( cacheMutex );
+ if (const CacheEntry *entry = CacheLookupRateDependent( rate ))
+ return *entry;
+
+ cache.push_back(entry);
+ return cache.back();
+}
+
+void Chip::Setup( Bit32u rate ) {
+ double original = OPLRATE;
+// double original = rate;
+ double scale = original / (double)rate;
+
+ //Noise counter is run at the same precision as general waves
+ noiseAdd = (Bit32u)( 0.5 + scale * ( 1 << LFO_SH ) );
+ noiseCounter = 0;
+ noiseValue = 1; //Make sure it triggers the noise xor the first time
+ //The low frequency oscillation counter
+ //Every time his overflows vibrato and tremoloindex are increased
+ lfoAdd = (Bit32u)( 0.5 + scale * ( 1 << LFO_SH ) );
+ lfoCounter = 0;
+ vibratoIndex = 0;
+ tremoloIndex = 0;
+
+ const CacheEntry &entry = ComputeRateDependent( rate );
+ freqMul = entry.freqMul;
+ linearRates = entry.linearRates;
+ attackRates = entry.attackRates;
+
//Setup the channels with the correct four op flags
//Channels are accessed through a table so they appear linear here
chan[ 0].fourMask = 0x00 | ( 1 << 0 );
diff --git a/src/chips/dosbox/dbopl.h b/src/chips/dosbox/dbopl.h
index 429735f..89d2019 100644
--- a/src/chips/dosbox/dbopl.h
+++ b/src/chips/dosbox/dbopl.h
@@ -227,11 +227,11 @@ struct Chip {
Bit32u noiseValue;
//Frequency scales for the different multiplications
- Bit32u freqMul[16];
+ const Bit32u *freqMul/*[16]*/;
//Rates for decay and release for rate of this chip
- Bit32u linearRates[76];
+ const Bit32u *linearRates/*[76]*/;
//Best match attack rates for the rate of this chip
- Bit32u attackRates[76];
+ const Bit32u *attackRates/*[76]*/;
//18 channels with 2 operators each
Channel chan[18];
diff --git a/src/midi_sequencer.hpp b/src/midi_sequencer.hpp
index a8cbfac..54ceeea 100644
--- a/src/midi_sequencer.hpp
+++ b/src/midi_sequencer.hpp
@@ -315,11 +315,24 @@ public:
Format_XMIDI
};
+ /**
+ * @brief Format of loop points implemented by CC events
+ */
+ enum LoopFormat
+ {
+ Loop_Default,
+ Loop_RPGMaker = 1,
+ Loop_EMIDI,
+ Loop_HMI
+ };
+
private:
//! Music file format type. MIDI is default.
FileFormat m_format;
//! SMF format identifier.
unsigned m_smfFormat;
+ //! Loop points format
+ LoopFormat m_loopFormat;
//! Current position
Position m_currentPosition;
diff --git a/src/midi_sequencer_impl.hpp b/src/midi_sequencer_impl.hpp
index 59da621..6d6b2d8 100644
--- a/src/midi_sequencer_impl.hpp
+++ b/src/midi_sequencer_impl.hpp
@@ -270,6 +270,7 @@ BW_MidiSequencer::BW_MidiSequencer() :
m_interface(NULL),
m_format(Format_MIDI),
m_smfFormat(0),
+ m_loopFormat(Loop_Default),
m_loopEnabled(false),
m_fullSongTimeLength(0.0),
m_postSongWaitDelay(1.0),
@@ -399,6 +400,7 @@ void BW_MidiSequencer::buildSmfSetupReset(size_t trackCount)
m_fullSongTimeLength = 0.0;
m_loopStartTime = -1.0;
m_loopEndTime = -1.0;
+ m_loopFormat = Loop_Default;
m_trackDisable.clear();
m_trackSolo = ~(size_t)0;
m_musTitle.clear();
@@ -1374,12 +1376,92 @@ BW_MidiSequencer::MidiEvent BW_MidiSequencer::parseEvent(const uint8_t **pptr, c
if(evType == MidiEvent::T_CTRLCHANGE)
{
//111'th loopStart controller (RPG Maker and others)
- if((m_format == Format_MIDI) && (evt.data[0] == 111))
+ if(m_format == Format_MIDI)
{
- //Change event type to custom Loop Start event and clear data
- evt.type = MidiEvent::T_SPECIAL;
- evt.subtype = MidiEvent::ST_LOOPSTART;
- evt.data.clear();
+ switch(evt.data[0])
+ {
+ case 110:
+ if(m_loopFormat == Loop_Default)
+ {
+ //Change event type to custom Loop Start event and clear data
+ evt.type = MidiEvent::T_SPECIAL;
+ evt.subtype = MidiEvent::ST_LOOPSTART;
+ evt.data.clear();
+ m_loopFormat = Loop_HMI;
+ }
+ else if(m_loopFormat == Loop_HMI)
+ {
+ // Repeating of 110'th point is BAD practice, treat as EMIDI
+ m_loopFormat = Loop_EMIDI;
+ }
+ break;
+
+ case 111:
+ if(m_loopFormat == Loop_HMI)
+ {
+ //Change event type to custom Loop End event and clear data
+ evt.type = MidiEvent::T_SPECIAL;
+ evt.subtype = MidiEvent::ST_LOOPEND;
+ evt.data.clear();
+ }
+ else if(m_loopFormat != Loop_EMIDI)
+ {
+ // Change event type to custom Loop Start event and clear data
+ evt.type = MidiEvent::T_SPECIAL;
+ evt.subtype = MidiEvent::ST_LOOPSTART;
+ evt.data.clear();
+ }
+ break;
+
+ case 113:
+ if(m_loopFormat == Loop_EMIDI)
+ {
+ //EMIDI does using of CC113 with same purpose as CC7
+ evt.data[0] = 7;
+ }
+ break;
+#if 0 //WIP
+ case 116:
+ if(m_loopFormat == Loop_EMIDI)
+ {
+ evt.type = MidiEvent::T_SPECIAL;
+ evt.subtype = MidiEvent::ST_LOOPSTACK_BEGIN;
+ evt.data[0] = evt.data[1];
+ evt.data.pop_back();
+
+ if(m_interface->onDebugMessage)
+ {
+ m_interface->onDebugMessage(
+ m_interface->onDebugMessage_userData,
+ "Stack EMIDI Loop Start at %d to %d level with %d loops",
+ m_loop.stackLevel,
+ m_loop.stackLevel + 1,
+ evt.data[0]
+ );
+ }
+ }
+ break;
+
+ case 117: // Next/Break Loop Controller
+ if(m_loopFormat == Loop_EMIDI)
+ {
+ evt.type = MidiEvent::T_SPECIAL;
+ evt.subtype = MidiEvent::ST_LOOPSTACK_END;
+ evt.data.clear();
+
+ if(m_interface->onDebugMessage)
+ {
+ m_interface->onDebugMessage(
+ m_interface->onDebugMessage_userData,
+ "Stack EMIDI Loop End at %d to %d level",
+ m_loop.stackLevel,
+ m_loop.stackLevel - 1
+ );
+ }
+ }
+ break;
+#endif
+ }
}
if(m_format == Format_XMIDI)