diff --git a/Frameworks/HivelyPlayer/HivelyPlayer/hvl_replay.c b/Frameworks/HivelyPlayer/HivelyPlayer/hvl_replay.c index 7a2978e04..69c616ec2 100644 --- a/Frameworks/HivelyPlayer/HivelyPlayer/hvl_replay.c +++ b/Frameworks/HivelyPlayer/HivelyPlayer/hvl_replay.c @@ -18,6 +18,8 @@ #include "hvl_replay.h" +// USE_HVL_FILTER_FOR_HVL - see hvl_replay.h - define there to use original hvl filter gen function for hvl files + #undef min #define min(a,b) (((a) < (b)) ? (a) : (b)) @@ -48,7 +50,9 @@ const int32 stereopan_right[] = { 128, 160, 193, 225, 255 }; #define WAVES_SIZE (WO_HIGHPASSES+((0xfc+0xfc+0x80*0x1f+0x80+3*0x280)*31)) int8 waves[WAVES_SIZE]; -int16 waves2[WAVES_SIZE]; +#ifdef USE_HVL_FILTER_FOR_HVL +int8 ahxwaves[WAVES_SIZE]; +#endif const int16 vib_tab[] = { @@ -172,6 +176,7 @@ static float64 clip( float64 x ) return x; } +#ifdef USE_HVL_FILTER_FOR_HVL void hvl_GenFilterWaves( int8 *buf, int8 *lowbuf, int8 *highbuf ) { static const uint16 lentab[45] = { 3, 7, 0xf, 0x1f, 0x3f, 0x7f, 3, 7, 0xf, 0x1f, 0x3f, 0x7f, @@ -222,6 +227,414 @@ void hvl_GenFilterWaves( int8 *buf, int8 *lowbuf, int8 *highbuf ) } } } +#endif + +static const int16 filter_thing[] = +{ + 0xFB77, 0xEEC3, 0xE407, 0xCCDA, 0x027B, 0x33C7, 0x088D, 0x1901, + 0x2351, 0x3F02, 0x3494, 0x14F0, 0x18CD, 0x319B, 0x4A69, 0x6336, + 0x7700, 0x7F00, 0x7F00, 0x7F03, 0x7B89, 0x743C, 0x6A16, 0x5DFC, + 0x50BB, 0x4304, 0x3692, 0x2C6F, 0x242F, 0x1D77, 0x17FE, 0x138A, + 0x0FEA, 0x0CF6, 0x0A8E, 0x0882, 0x06DB, 0x0587, 0x0475, 0x038D, + 0x02CC, 0x0233, 0x01BC, 0x014B, 0xFD67, 0xF7DE, 0xE7E6, 0xDBED, + 0xCACA, 0x3101, 0x2591, 0x0F6F, 0x2099, 0x2BEE, 0x4836, 0x1B05, + 0x0F08, 0x21BB, 0x4377, 0x6533, 0x7DA3, 0x7F00, 0x7EC7, 0x780E, + 0x6B20, 0x5A61, 0x47DD, 0x362D, 0x28BD, 0x1EA3, 0x1709, 0x1153, + 0x0D07, 0x09CB, 0x075D, 0x056D, 0x03FF, 0x02D0, 0x0212, 0x0161, + 0x0104, 0x00AD, 0x0060, 0x0020, 0xFFEE, 0xFFC9, 0xFFB1, 0xFFA4, + 0xFFA1, 0xFCBA, 0xF363, 0xE37E, 0xCF9E, 0xE43D, 0x367A, 0x1965, + 0x1752, 0x23AD, 0x3A63, 0x41F1, 0x17C1, 0x0BE8, 0x2AA9, 0x5553, + 0x7A8B, 0x7F00, 0x7D44, 0x70C0, 0x5C86, 0x4508, 0x2FC9, 0x2115, + 0x16E6, 0x0FDA, 0x0AF9, 0x0798, 0x0542, 0x0384, 0x0259, 0x0173, + 0x00DF, 0x0089, 0x0040, 0x0007, 0xFFDE, 0xFFC6, 0xFFBB, 0xFFBA, + 0xFFC1, 0xFFCC, 0xFFD9, 0xFFE6, 0xFFF2, 0xFFFB, 0x1378, 0xEE84, + 0xE05A, 0xC5D4, 0x0B4E, 0x31B3, 0x1313, 0x1F4A, 0x2616, 0x45DF, + 0x2E0E, 0x13EB, 0x09D8, 0x3397, 0x672F, 0x7F00, 0x7EC9, 0x7012, + 0x564D, 0x3949, 0x2460, 0x1719, 0x0EAA, 0x0950, 0x05E9, 0x038F, + 0x0224, 0x014A, 0x008F, 0x0003, 0xFFAA, 0xFF7E, 0xFF75, 0xFF83, + 0xFF9F, 0xFFBF, 0xFFDD, 0xFFF5, 0x0006, 0x000F, 0x0013, 0x0013, + 0x0010, 0x000C, 0x0008, 0x1ADD, 0xE985, 0xDC57, 0xC2A3, 0x25E9, + 0x2A8D, 0x103D, 0x269A, 0x2A91, 0x4B24, 0x1FD9, 0x10BD, 0x0865, + 0x3C85, 0x779A, 0x7F00, 0x760C, 0x599E, 0x377B, 0x2031, 0x12AD, + 0x0AD6, 0x0649, 0x03A5, 0x01F5, 0x00DC, 0x0051, 0x0023, 0x0002, + 0xFFEE, 0xFFE6, 0xFFE7, 0xFFEC, 0xFFF3, 0xFFF9, 0xFFFF, 0x0002, + 0x0004, 0x0004, 0x0003, 0x0002, 0x0001, 0x0000, 0x0000, 0xFFFF, + 0x097F, 0xE4D4, 0xD636, 0xC6FE, 0x31B0, 0x2314, 0x0E82, 0x2A8C, + 0x314E, 0x4C62, 0x1B03, 0x0EA1, 0x0750, 0x4573, 0x7F00, 0x7F6E, + 0x66AE, 0x3FAE, 0x219D, 0x11BE, 0x095D, 0x04F1, 0x0257, 0x011B, + 0x002D, 0xFFA4, 0xFF73, 0xFF7D, 0xFFA3, 0xFFCF, 0xFFF2, 0x0008, + 0x0012, 0x0012, 0x000E, 0x0008, 0x0003, 0x0000, 0xFFFE, 0xFFFD, + 0xFFFE, 0xFFFE, 0xFFFF, 0x0000, 0x0000, 0xF1BA, 0xE0B8, 0xCE39, + 0xD4B0, 0x3539, 0x1CAE, 0x0D02, 0x2C42, 0x3A0B, 0x4951, 0x1954, + 0x0CF7, 0x067C, 0x4E61, 0x7F00, 0x77EB, 0x5274, 0x2978, 0x13D3, + 0x0979, 0x0487, 0x01DD, 0x00C4, 0x0001, 0xFFA3, 0xFF93, 0xFFAE, + 0xFFD4, 0xFFF4, 0x0007, 0x000E, 0x000D, 0x0009, 0x0004, 0x0000, + 0xFFFE, 0xFFFE, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xE1AB, 0xDD5D, 0xC593, 0xE91A, 0x34EE, 0x17FB, + 0x0BAC, 0x2C14, 0x429E, 0x40DA, 0x1781, 0x0BA3, 0x05D1, 0x574F, + 0x7F00, 0x6DB3, 0x3CD8, 0x1A34, 0x0B48, 0x04DB, 0x0217, 0x00BC, + 0x0020, 0xFFD1, 0xFFC0, 0xFFD1, 0xFFEA, 0xFFFD, 0x0007, 0x0008, + 0x0005, 0x0003, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xDC89, + 0xDAC4, 0xBDC0, 0xFEB1, 0x32C9, 0x14D5, 0x0A90, 0x2BB8, 0x4936, + 0x3581, 0x1551, 0x0A8F, 0x0547, 0x603D, 0x7F00, 0x5FEC, 0x2A63, + 0x1059, 0x064E, 0x026E, 0x00B8, 0x000F, 0xFFC7, 0xFFC5, 0xFFDE, + 0xFFF7, 0x0005, 0x0008, 0x0006, 0x0002, 0x0000, 0xFFFF, 0xFFFF, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xDE80, 0xD8C5, 0xB789, 0x1114, + 0x2F9E, 0x12C9, 0x09A8, 0x2BDE, 0x4D5B, 0x2BA2, 0x1359, 0x09A9, + 0x04D4, 0x692B, 0x7F00, 0x5057, 0x1D06, 0x09F6, 0x036B, 0x00D4, + 0x0033, 0xFFE2, 0xFFD5, 0xFFE7, 0xFFFA, 0x0003, 0x0005, 0x0003, + 0x0001, 0x0000, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xE4D0, 0xD70B, 0xB2E4, 0x1EB8, 0x2BD7, 0x1161, 0x08E7, + 0x2D67, 0x4F9C, 0x2510, 0x11C9, 0x08E8, 0x0474, 0x7219, 0x7C55, + 0x3F6B, 0x133C, 0x05D5, 0x01C4, 0x0056, 0xFFF9, 0xFFE0, 0xFFEC, + 0xFFFB, 0x0002, 0x0003, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xED7D, 0xD522, + 0xB289, 0x2800, 0x27CE, 0x1049, 0x0842, 0x30EC, 0x50A9, 0x2153, + 0x1082, 0x0842, 0x0421, 0x7B07, 0x73E8, 0x2E8C, 0x0C60, 0x0349, + 0x0079, 0x0011, 0xFFEA, 0xFFEE, 0xFFFB, 0x0002, 0x0002, 0x0001, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF6E3, 0xD287, 0xB4A8, 0x2DF5, 0x23D7, + 0x0F53, 0x07B3, 0x3641, 0x50A6, 0x1F47, 0x0F66, 0x07B3, 0x03D9, + 0x7F00, 0x6B22, 0x20FE, 0x079D, 0x01C1, 0x002D, 0xFFF5, 0xFFF0, + 0xFFFB, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x001D, 0xCEB8, 0xB9CD, 0x3192, 0x2037, 0x0E6D, 0x0736, 0x3D2E, + 0x4F2F, 0x1DEA, 0x0E6C, 0x0736, 0x039B, 0x7F00, 0x622C, 0x188C, + 0x04DD, 0x00F6, 0xFFB9, 0xFFB2, 0xFFEF, 0x0008, 0x0007, 0x0001, + 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x08B8, 0xC94F, 0xC47E, + 0x338E, 0x1D17, 0x0D96, 0x06C8, 0x4401, 0x4BD3, 0x1CA4, 0x0D90, + 0x06C8, 0x0364, 0x7F00, 0x5811, 0x1100, 0x02DB, 0x0012, 0xFF8B, + 0xFFD8, 0x0008, 0x0009, 0x0002, 0xFFFF, 0xFFFF, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x1065, 0xC224, 0xD328, 0x3460, 0x1A87, 0x0CD1, + 0x0667, 0x4B18, 0x469A, 0x1B42, 0x0CCC, 0x0667, 0x0333, 0x7F00, + 0x4CC9, 0x0A92, 0x017C, 0xFF6C, 0xFFAA, 0x0002, 0x000D, 0x0003, + 0xFFFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x16E7, + 0xBA2A, 0xDB0C, 0x344D, 0x187E, 0x0C20, 0x060F, 0x5204, 0x402F, + 0x19D8, 0x0C1E, 0x060F, 0x0308, 0x7F00, 0x40F9, 0x0781, 0x00DD, + 0xFFA1, 0xFFD9, 0x0005, 0x0005, 0x0000, 0xFFFF, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x1C0C, 0xB0D2, 0xE7CE, 0x337D, + 0x16EA, 0x0B82, 0x05C1, 0x5814, 0x399A, 0x1881, 0x0B82, 0x05C1, + 0x02E1, 0x7F00, 0x3535, 0x04EF, 0x0074, 0xFFCB, 0xFFF1, 0x0004, + 0x0002, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x1FB5, 0xAD77, 0xF515, 0x3209, 0x15AE, 0x0AF4, 0x057A, + 0x5CA5, 0x340E, 0x174A, 0x0AF4, 0x057A, 0x02BD, 0x7F00, 0x29BF, + 0x0308, 0xFFC8, 0xFFC8, 0x0004, 0x0004, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2170, 0xB20F, + 0x01FC, 0x300B, 0x14AF, 0x0A73, 0x0539, 0x6215, 0x2FE7, 0x1634, + 0x0A73, 0x053A, 0x029D, 0x7F00, 0x1EE1, 0x01B1, 0xFFDC, 0xFFEA, + 0x0003, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x2128, 0xB6D5, 0x0E58, 0x2D9F, 0x13D8, + 0x09FE, 0x04FF, 0x68E7, 0x2CD8, 0x153A, 0x09FD, 0x04FF, 0x027F, + 0x7F00, 0x14ED, 0x00D4, 0xFFA1, 0x0000, 0x0004, 0xFFFF, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x1F29, 0xA209, 0x1989, 0x2AEA, 0x1313, 0x0992, 0x04C9, 0x6FC3, + 0x2AA6, 0x1456, 0x0992, 0x04C9, 0x0264, 0x7F00, 0x0C3B, 0x0053, + 0xFFDD, 0x0002, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1BB0, 0x8888, 0x235E, + 0x2819, 0x1258, 0x092F, 0x0498, 0x7023, 0x28FE, 0x1384, 0x092F, + 0x0497, 0x024C, 0x7F00, 0x0780, 0xFF65, 0xFFF3, 0x0004, 0xFFFF, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x1740, 0x808D, 0x2BF1, 0x255C, 0x11A7, 0x08D4, + 0x046A, 0x7006, 0x2781, 0x12C3, 0x08D4, 0x046A, 0x0235, 0x7F00, + 0x0423, 0xFFB7, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1215, + 0x800F, 0x338F, 0x22E6, 0x10FF, 0x087F, 0x0440, 0x6F1E, 0x262F, + 0x120F, 0x087F, 0x043F, 0x0220, 0x7F00, 0x01B2, 0xFFEA, 0x0001, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0C3C, 0x8000, 0x3B79, 0x20EE, + 0x1062, 0x0831, 0x0419, 0x780C, 0x24DF, 0x1168, 0x0831, 0x0419, + 0x020C, 0x7F00, 0x004B, 0xFFFA, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0541, 0x8000, 0x417D, 0x1FAB, 0x0FD0, 0x07E9, 0x03F4, + 0x7F00, 0x2398, 0x10CE, 0x07E9, 0x03F4, 0x01FA, 0x7E81, 0x0188, + 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFD3E, 0x8000, + 0x45D7, 0x1F45, 0x0F49, 0x07A4, 0x03D2, 0x7F00, 0x228B, 0x103D, + 0x07A5, 0x03D2, 0x01E9, 0x79D0, 0x0687, 0x007A, 0x000A, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xF416, 0x8000, 0x49EB, 0x1FE3, 0x0ED7, + 0x0765, 0x03B2, 0x7F00, 0x21A5, 0x0FB6, 0x0765, 0x03B1, 0x01D9, + 0x74CF, 0x0C02, 0x013C, 0x0034, 0x000B, 0x0003, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xE94C, 0x8000, 0x4D8B, 0x21B2, 0x0E9B, 0x0729, 0x0395, 0x7F00, + 0x1F2E, 0x0F31, 0x0729, 0x0394, 0x01CB, 0x6F7D, 0x11D7, 0x02DB, + 0x00CE, 0x0042, 0x0017, 0x0008, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xDBED, 0x8000, 0x506B, + 0x24C0, 0x0F01, 0x06F8, 0x0379, 0x7F00, 0x1956, 0x0E68, 0x06F0, + 0x0379, 0x01BF, 0x69DB, 0x17E0, 0x0563, 0x0139, 0x0087, 0x0041, + 0x0021, 0x0011, 0x0007, 0x0004, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, + 0x0002, 0x0002, 0xCE57, 0x04A4, 0x0526, 0xFB66, 0xEF30, 0x9930, + 0xC5AD, 0xF94C, 0xFA32, 0x09BE, 0x0E1B, 0x5703, 0x6B3A, 0x83A1, + 0x8C1C, 0x996E, 0xAB98, 0xC1F8, 0xDAA8, 0xF375, 0x0C42, 0x2499, + 0x3BB1, 0x50ED, 0x63E3, 0x744E, 0x7F00, 0x7F00, 0x7F00, 0x7F00, + 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, + 0x7F00, 0x7FEC, 0x7F58, 0x7FEE, 0x7F36, 0x7F93, 0x7FDA, 0x22B6, + 0x06E2, 0x01FA, 0xF97F, 0xD0B0, 0x9FBF, 0xDEBF, 0xF750, 0x00F7, + 0x0CD8, 0x26C6, 0x64BB, 0x70ED, 0x86B8, 0x9666, 0xAF0A, 0xCF0C, + 0xF0C8, 0x127D, 0x32F3, 0x5058, 0x6982, 0x7DD7, 0x7F00, 0x7F00, + 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7FFA, 0x7FB8, 0x7F87, + 0x7F00, 0x7F99, 0x7F00, 0x7F4B, 0x7F7E, 0x7F9D, 0x7FA9, 0x7FA7, + 0x7F9B, 0x7F88, 0x7F70, 0x7F56, 0x1827, 0x085D, 0xFD8A, 0xF58E, + 0xAAA0, 0xB87E, 0xE9B1, 0xF78F, 0x089F, 0x1097, 0x44D0, 0x676B, + 0x7417, 0x8ABF, 0xA3D4, 0xCA53, 0xF4FD, 0x1F5D, 0x4681, 0x6766, + 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7FE2, + 0x7F97, 0x7F64, 0x7FF4, 0x7F25, 0x7F5A, 0x7F75, 0x7F7C, 0x7F74, + 0x7F62, 0x7F4C, 0x7F34, 0x7F1E, 0x7F0C, 0x7EFE, 0x7EF4, 0x7EEE, + 0x7EEC, 0x0E14, 0x08C8, 0xFA29, 0xEA14, 0x9750, 0xCB17, 0xED77, + 0xFA92, 0x0D73, 0x1B3D, 0x5BC7, 0x6C4C, 0x7626, 0x8FB7, 0xB465, + 0xE741, 0x1ACD, 0x4A39, 0x7012, 0x7F00, 0x7F00, 0x7F00, 0x7F00, + 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F9B, 0x7FE7, 0x7FF5, 0x7FDA, + 0x7FA9, 0x7F70, 0x7F3C, 0x7F11, 0x7EF4, 0x7EE2, 0x7EDC, 0x7EDD, + 0x7EE2, 0x7EE9, 0x7EF1, 0x7EF8, 0x7EFD, 0x7F01, 0x1F29, 0x07B7, + 0xF8BB, 0xD9E8, 0x9ADB, 0xD85A, 0xEF6F, 0x0056, 0x105E, 0x2993, + 0x6293, 0x6F41, 0x779A, 0x95A1, 0xC7C2, 0x0448, 0x3E6E, 0x6CE0, + 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7FDE, 0x7F77, 0x7FFF, + 0x7F13, 0x7F29, 0x7F2D, 0x7F27, 0x7F1B, 0x7F0F, 0x7F04, 0x7EFD, + 0x7EF9, 0x7EF8, 0x7EF9, 0x7EFA, 0x7EFC, 0x7EFE, 0x7EFF, 0x7F00, + 0x7F00, 0x7F00, 0x7EFF, 0x38C1, 0x056D, 0xF814, 0xC623, 0xA713, + 0xE15B, 0xF142, 0x07C2, 0x1262, 0x38E2, 0x63C5, 0x715B, 0x78AE, + 0x9C7C, 0xDBB2, 0x2144, 0x5DAB, 0x7F00, 0x7F00, 0x7F00, 0x7F00, + 0x7F00, 0x7F00, 0x7FC4, 0x7FFA, 0x7FD7, 0x7F8E, 0x7F43, 0x7F0A, + 0x7EEA, 0x7EDE, 0x7EE0, 0x7EE8, 0x7EF2, 0x7EFB, 0x7F00, 0x7F03, + 0x7F03, 0x7F02, 0x7F01, 0x7F00, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x44FF, 0x022D, 0xF638, 0xB1EC, 0xB3D3, 0xE6DC, 0xF2F4, 0x1027, + 0x1555, 0x4964, 0x65A0, 0x7308, 0x7983, 0xA447, 0xEFC0, 0x3BF3, + 0x755D, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7FA2, 0x7FBC, + 0x7F8E, 0x7F4A, 0x7F13, 0x7EF2, 0x7EE6, 0x7EE8, 0x7EF0, 0x7EF8, + 0x7EFE, 0x7F01, 0x7F02, 0x7F01, 0x7F00, 0x7EFF, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x3F9E, 0xFE6E, 0xF23E, + 0xA271, 0xBEFF, 0xEA01, 0xF459, 0x186B, 0x1AB5, 0x58FD, 0x6858, + 0x745C, 0x7A2D, 0xAD04, 0x0454, 0x552E, 0x7F00, 0x7F00, 0x7F00, + 0x7F00, 0x7FB7, 0x7F40, 0x7F6E, 0x7F58, 0x7F2D, 0x7F08, 0x7EF5, + 0x7EF0, 0x7EF4, 0x7EF9, 0x7EFD, 0x7F00, 0x7F00, 0x7F00, 0x7EFF, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x347C, 0xFAB9, 0xED47, 0x9AA4, 0xC870, 0xEBE1, + 0xF572, 0x1E07, 0x2265, 0x6469, 0x6AD4, 0x7570, 0x7AB7, 0xB6B2, + 0x16F0, 0x681C, 0x7F00, 0x7F00, 0x7F00, 0x7FEB, 0x7F45, 0x7F6C, + 0x7F4A, 0x7F1C, 0x7EFC, 0x7EF1, 0x7EF3, 0x7EF9, 0x7EFE, 0x7F00, + 0x7F00, 0x7F00, 0x7EFF, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x28BB, + 0xF78E, 0xE420, 0x99DD, 0xD05D, 0xED36, 0xF656, 0x2213, 0x2B5A, + 0x6A73, 0x6CB8, 0x7655, 0x7B2A, 0xC151, 0x2A7D, 0x790E, 0x7F00, + 0x7F00, 0x7F00, 0x7F00, 0x7F48, 0x7F3B, 0x7F18, 0x7EFF, 0x7EF6, + 0x7EF7, 0x7EFB, 0x7EFE, 0x7F00, 0x7F00, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x1E75, 0xF544, 0xD834, 0x9DAA, + 0xD6E9, 0xEE5D, 0xF717, 0x24B5, 0x34A1, 0x6D21, 0x6E35, 0x7717, + 0x7B8B, 0xCCE1, 0x3DC8, 0x7F00, 0x7F00, 0x7F00, 0x7FCB, 0x7F26, + 0x7F30, 0x7F16, 0x7F00, 0x7EF9, 0x7EFA, 0x7EFC, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x16D0, 0xF3F4, 0xCBF1, 0xA3BF, 0xDC27, 0xEF79, 0xF7BC, + 0x26A4, 0x3DE3, 0x6E84, 0x6F7A, 0x77BC, 0x7BDE, 0xD962, 0x4F0B, + 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F26, 0x7F16, 0x7F02, 0x7EFB, + 0x7EFB, 0x7EFE, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x11F0, 0xF371, + 0xC1E6, 0xAAA0, 0xE033, 0xF08A, 0xF84C, 0x28A1, 0x4735, 0x6FC4, + 0x7098, 0x784C, 0x7C25, 0xE441, 0x5DE5, 0x7F00, 0x7F00, 0x7FE9, + 0x7F17, 0x7F16, 0x7F05, 0x7EFC, 0x7EFC, 0x7EFD, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x0F7C, 0xF342, 0xB6DF, 0xB189, 0xE338, + 0xF187, 0xF8C9, 0x2B06, 0x509A, 0x7144, 0x7193, 0x78C8, 0x7C63, + 0xED84, 0x6A6B, 0x7F00, 0x7F00, 0x7F88, 0x7F73, 0x7F12, 0x7EEF, + 0x7EF4, 0x7EFE, 0x7F00, 0x7F00, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x0F12, 0xF2B4, 0xAA33, 0xB822, 0xE56F, 0xF269, 0xF936, 0x2EE9, + 0x59B0, 0x72F5, 0x726E, 0x7936, 0x7C9A, 0xF717, 0x75F2, 0x7F00, + 0x7F00, 0x7FBB, 0x7F39, 0x7EF0, 0x7EF0, 0x7EFD, 0x7F01, 0x7F00, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x1051, 0xF0E3, 0xA18C, + 0xBE4C, 0xE714, 0xF330, 0xF998, 0x33B3, 0x61CB, 0x74A7, 0x7332, + 0x7998, 0x7CCB, 0x00FB, 0x7FF6, 0x7F00, 0x7FED, 0x7F8C, 0x7EFC, + 0x7EEA, 0x7EFB, 0x7F01, 0x7F00, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x12E5, 0xECCF, 0x98BC, 0xC3FC, 0xE858, 0xF3E1, + 0xF9EF, 0x39A7, 0x6850, 0x7630, 0x73E0, 0x79EF, 0x7CF7, 0x0B2F, + 0x7F00, 0x7F00, 0x7F91, 0x7F44, 0x7EF7, 0x7EF5, 0x7EFE, 0x7F00, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x167B, + 0xE76E, 0x93CA, 0xC92C, 0xE964, 0xF47D, 0xFA3E, 0x40A5, 0x6D08, + 0x778A, 0x747D, 0x7A3E, 0x7D1E, 0x15B3, 0x7F00, 0x7F00, 0x7F50, + 0x7F1D, 0x7EF9, 0x7EFB, 0x7EFF, 0x7EFF, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x1AF2, 0xDD31, 0x9374, 0xCDD7, + 0xEA52, 0xF50B, 0xFA85, 0x484D, 0x700F, 0x78BA, 0x750B, 0x7A84, + 0x7D42, 0x2088, 0x7F00, 0x7F00, 0x7F6F, 0x7EFF, 0x7EF6, 0x7EFE, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x1FAB, 0xD337, 0x963B, 0xD1F3, 0xEB33, 0xF58C, 0xFAC5, + 0x4D79, 0x721D, 0x79CB, 0x758C, 0x7AC5, 0x7D62, 0x2BAD, 0x7F00, + 0x7F00, 0x7F31, 0x7EFC, 0x7EFC, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x241F, 0xCC6D, + 0x9B30, 0xD57A, 0xEC0B, 0xF601, 0xFB00, 0x5244, 0x73C4, 0x7AC4, + 0x7601, 0x7B00, 0x7D7F, 0x3722, 0x7F00, 0x7FA9, 0x7F11, 0x7EF6, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x280C, 0xBE21, 0xA145, 0xD867, 0xECDA, + 0xF66D, 0xFB36, 0x55B1, 0x7546, 0x7BA8, 0x766D, 0x7B36, 0x7D9A, + 0x42E8, 0x7F00, 0x7F45, 0x7F02, 0x7EFC, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x2B18, 0xA865, 0xA7BA, 0xDAC1, 0xED9F, 0xF6CF, 0xFB67, 0x5207, + 0x76C6, 0x7C7B, 0x76CF, 0x7B67, 0x7DB3, 0x4EFE, 0x7F00, 0x7F4F, + 0x7EF5, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x2D13, 0xB2BE, 0xAE1E, + 0xDC9C, 0xEE56, 0xF72B, 0xFB95, 0x4C1E, 0x7845, 0x7D3D, 0x772B, + 0x7B95, 0x7DC9, 0x5B64, 0x7F00, 0x7F17, 0x7EFC, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x2E1B, 0xCE29, 0xB467, 0xDE0E, 0xEEFF, 0xF77F, + 0xFBBF, 0x4843, 0x79BD, 0x7DF0, 0x777F, 0x7BBE, 0x7DDE, 0x681B, + 0x7F00, 0x7F02, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x2E32, + 0xE25E, 0xBB9A, 0xDF40, 0xEF9C, 0xF7CD, 0xFBE6, 0x68ED, 0x7B21, + 0x7E96, 0x77CD, 0x7BE6, 0x7DF1, 0x7522, 0x7F49, 0x7EFE, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, + 0x7EFF, 0x7EFF, 0x7EFF, 0x7EFF, 0x2D4F, 0xF4E0, 0xC241, 0xE05F, + 0xF02D, 0xF817, 0xFC0A, 0x77E5, 0x7C6A, 0x7F31, 0x7817, 0x7C0B, + 0x7E05, 0x7F00, 0x7F0C, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x2B1D, 0xEB4A, 0xC91D, 0xE1A6, 0xF0B7, 0xF85A, 0xFC2C, + 0x6D81, 0x7DA5, 0x7FC1, 0x785A, 0x7C2D, 0x7E16, 0x7F00, 0x7FD9, + 0x7F18, 0x7F01, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x2782, 0xE163, + 0xCFFB, 0xE34C, 0xF13A, 0xF89A, 0xFC4C, 0x615E, 0x7ED9, 0x7F00, + 0x7899, 0x7C4B, 0x7E26, 0x7F00, 0x7F00, 0x7F44, 0x7F0F, 0x7F03, + 0x7F00, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x2237, 0xD728, 0xD6A1, 0xE592, 0xF1CA, + 0xF8D5, 0xFC6B, 0x5DFA, 0x7F58, 0x7F00, 0x78D6, 0x7C6A, 0x7E35, + 0x7F00, 0x7F00, 0x7FD9, 0x7F4F, 0x7F19, 0x7F08, 0x7F02, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, 0x7EFE, + 0x1A9B, 0xCC9C, 0xDCAB, 0xE8B3, 0xF2A3, 0xF910, 0xFC86, 0x7B5E, + 0x7DF6, 0x7F00, 0x790C, 0x7C86, 0x7E44, 0x7F00, 0x7F00, 0x7F00, + 0x7F74, 0x7F3D, 0x7F1D, 0x7F0E, 0x7F06, 0x7F02, 0x7F01, 0x7F00, + 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, + 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, + 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x12E3 +}; + +static int32 clipshifted8(int32 in) +{ + int16 top = (int16)(in >> 16); + if (top > 127) in = 127 << 16; + else if (top < -128) in = -128 << 16; + return in; +} + +static void hvl_AhxGenFilterWaves( int8 *buf, int8 *lowbuf, int8 *highbuf ) +{ + static const uint16 lentab[45] = { 3, 7, 0xf, 0x1f, 0x3f, 0x7f, 3, 7, 0xf, 0x1f, 0x3f, 0x7f, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, + 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, + (0x280*3)-1 }; + + const int16 * mid_table = &filter_thing[0]; + const int16 * low_table = &filter_thing[1395]; + + int32 d5; + int32 temp; + + for( temp=0, d5 = 25; temp<31; temp++, d5 += 9 ) + { + uint32 wv; + int8 *a0 = buf; + + for( wv=0; wv<6+6+0x20+1; wv++ ) + { + int32 d2, d3; + uint32 i; + + d2 = *mid_table++ << 8; + d3 = *low_table++ << 8; + + for( i=0; i<=lentab[wv]; i++ ) + { + int32 d0, d1, d4; + d0 = (int32)a0[i] << 16; + d1 = clipshifted8( d0 - d2 - d3 ); + *highbuf++ = d1 >> 16; + d4 = d1 >> 8; + d4 *= d5; + d2 = clipshifted8(d2 + d4); + d4 = d2 >> 8; + d4 *= d5; + d3 = clipshifted8(d3 + d4); + *lowbuf++ = d3 >> 16; + } + + a0 += lentab[wv]+1; + } + } +} void hvl_GenWhiteNoise( int8 *buf, uint32 len ) { @@ -372,7 +785,13 @@ void hvl_InitReplayer( void ) hvl_GenTriangle( &waves[WO_TRIANGLE_80], 0x80 ); hvl_GenSquare( &waves[WO_SQUARES] ); hvl_GenWhiteNoise( &waves[WO_WHITENOISE], WHITENOISELEN ); +#ifdef USE_HVL_FILTER_FOR_HVL + memcpy( &ahxwaves[WO_TRIANGLE_04], &waves[WO_TRIANGLE_04], WO_HIGHPASSES - WO_TRIANGLE_04 ); hvl_GenFilterWaves( &waves[WO_TRIANGLE_04], &waves[WO_LOWPASSES], &waves[WO_HIGHPASSES] ); + hvl_AhxGenFilterWaves( &ahxwaves[WO_TRIANGLE_04], &ahxwaves[WO_LOWPASSES], &ahxwaves[WO_HIGHPASSES] ); +#else + hvl_AhxGenFilterWaves( &waves[WO_TRIANGLE_04], &waves[WO_LOWPASSES], &waves[WO_HIGHPASSES] ); +#endif } struct hvl_tune *hvl_load_ahx( uint8 *buf, uint32 buflen, uint32 defstereo, uint32 freq ) @@ -421,7 +840,10 @@ struct hvl_tune *hvl_load_ahx( uint8 *buf, uint32 buflen, uint32 defstereo, uint { return NULL; } - + +#ifdef USE_HVL_FILTER_FOR_HVL + ht->ht_IsHt = 0; +#endif ht->ht_Frequency = freq; ht->ht_FreqF = (float64)freq; @@ -437,9 +859,15 @@ struct hvl_tune *hvl_load_ahx( uint8 *buf, uint32 buflen, uint32 defstereo, uint hvl_blip_set_rates(ht->ht_BlipBuffers[0], 65536, 1); hvl_blip_set_rates(ht->ht_BlipBuffers[1], 65536, 1); +#ifdef USE_HVL_FILTER_FOR_HVL + ht->ht_WaveformTab[0] = &ahxwaves[WO_TRIANGLE_04]; + ht->ht_WaveformTab[1] = &ahxwaves[WO_SAWTOOTH_04]; + ht->ht_WaveformTab[3] = &ahxwaves[WO_WHITENOISE]; +#else ht->ht_WaveformTab[0] = &waves[WO_TRIANGLE_04]; ht->ht_WaveformTab[1] = &waves[WO_SAWTOOTH_04]; ht->ht_WaveformTab[3] = &waves[WO_WHITENOISE]; +#endif ht->ht_Channels = 4; ht->ht_PositionNr = posn; @@ -680,6 +1108,9 @@ struct hvl_tune *hvl_LoadTune( const uint8 *buf, uint32 buflen, uint32 freq, uin return NULL; } +#ifdef USE_HVL_FILTER_FOR_HVL + ht->ht_IsHt = 1; +#endif ht->ht_Version = buf[3]; // 1.5 ht->ht_Frequency = freq; ht->ht_FreqF = (float64)freq; @@ -1658,8 +2089,13 @@ void hvl_process_frame( struct hvl_tune *ht, struct hvl_voice *voice ) int32 Delta; int8 *SquarePtr; int32 X; - +#ifdef USE_HVL_FILTER_FOR_HVL + int8 *thewaves = (ht->ht_IsHt) ? waves : ahxwaves; + + SquarePtr = &thewaves[WO_SQUARES+(voice->vc_FilterPos-0x20)*(0xfc+0xfc+0x80*0x1f+0x80+0x280*3)]; +#else SquarePtr = &waves[WO_SQUARES+(voice->vc_FilterPos-0x20)*(0xfc+0xfc+0x80*0x1f+0x80+0x280*3)]; +#endif X = voice->vc_SquarePos << (5 - voice->vc_WaveLength); if( X > 0x20 ) diff --git a/Frameworks/HivelyPlayer/HivelyPlayer/hvl_replay.h b/Frameworks/HivelyPlayer/HivelyPlayer/hvl_replay.h index 148c9e0a8..e3178c46f 100644 --- a/Frameworks/HivelyPlayer/HivelyPlayer/hvl_replay.h +++ b/Frameworks/HivelyPlayer/HivelyPlayer/hvl_replay.h @@ -7,6 +7,8 @@ extern "C" { #include +// #define USE_HVL_FILTER_FOR_HVL + typedef int8_t int8; typedef uint8_t uint8; typedef int16_t int16; @@ -15,7 +17,11 @@ typedef int32_t int32; typedef uint32_t uint32; typedef double float64; typedef char TEXT; +#ifdef _WIN32 +typedef int BOOL; +#else typedef signed char BOOL; +#endif #define TRUE 1 #define FALSE 0 @@ -224,6 +230,9 @@ struct hvl_tune int32 ht_defpanright; int32 ht_mixgain; uint8 ht_Version; +#ifdef USE_HVL_FILTER_FOR_HVL + uint8 ht_IsHt; +#endif }; void hvl_DecodeFrame( struct hvl_tune *ht, int8 *buf1, int8 *buf2, int32 bufmod );