mirror of
https://github.com/holub/mame
synced 2025-06-30 16:00:01 +03:00
tms5110r.c: Add new LPC table data for CD2802, CD2801; TMS5110A/TMC0281D; add new information regarding each chip. Reorganize LPC tables to use #defines rather than repeating identical data. [PlgDavid, Lord_Nightmare, NullMoogleCable]
This commit is contained in:
parent
bda42378b4
commit
6e35c3f90a
@ -68,17 +68,15 @@
|
||||
|
||||
#define MAX_SAMPLE_CHUNK 512
|
||||
|
||||
/* Variants */
|
||||
/* 6 Variants, from tms5110r.inc */
|
||||
|
||||
#define TMS5110_IS_5110A (1)
|
||||
#define TMS5110_IS_5100 (2)
|
||||
#define TMS5110_IS_5110 (3)
|
||||
#define TMS5110_IS_TMC0281 (1)
|
||||
#define TMS5110_IS_TMC0281D (2)
|
||||
#define TMS5110_IS_CD2801 (3)
|
||||
#define TMS5110_IS_CD2802 (4)
|
||||
#define TMS5110_IS_TMS5110A (5)
|
||||
#define TMS5110_IS_M58817 (6)
|
||||
|
||||
#define TMS5110_IS_CD2801 TMS5110_IS_5100
|
||||
#define TMS5110_IS_TMC0281 TMS5110_IS_5100
|
||||
|
||||
#define TMS5110_IS_CD2802 TMS5110_IS_5110
|
||||
#define TMS5110_IS_M58817 TMS5110_IS_5110
|
||||
|
||||
/* States for CTL */
|
||||
|
||||
@ -104,15 +102,24 @@ void tms5110_device::set_variant(int variant)
|
||||
{
|
||||
switch (variant)
|
||||
{
|
||||
case TMS5110_IS_5110A:
|
||||
case TMS5110_IS_TMC0281:
|
||||
m_coeff = &T0280B_0281A_coeff;
|
||||
break;
|
||||
case TMS5110_IS_TMC0281D:
|
||||
m_coeff = &T0280D_0281D_coeff;
|
||||
break;
|
||||
case TMS5110_IS_CD2801:
|
||||
m_coeff = &T0280F_2801A_coeff;
|
||||
break;
|
||||
case TMS5110_IS_M58817:
|
||||
m_coeff = &M58817_coeff;
|
||||
break;
|
||||
case TMS5110_IS_CD2802:
|
||||
m_coeff = &T0280F_2802_coeff;
|
||||
break;
|
||||
case TMS5110_IS_TMS5110A:
|
||||
m_coeff = &tms5110a_coeff;
|
||||
break;
|
||||
case TMS5110_IS_5100:
|
||||
m_coeff = &pat4209836_coeff;
|
||||
break;
|
||||
case TMS5110_IS_5110:
|
||||
m_coeff = &pat4403965_coeff;
|
||||
break;
|
||||
default:
|
||||
fatalerror("Unknown variant in tms5110_create\n");
|
||||
}
|
||||
@ -873,7 +880,7 @@ void tms5110_device::device_start()
|
||||
{
|
||||
m_table = region()->base();
|
||||
|
||||
set_variant(TMS5110_IS_5110A);
|
||||
set_variant(TMS5110_IS_TMS5110A);
|
||||
|
||||
/* resolve lines */
|
||||
m_m0_cb.resolve();
|
||||
@ -898,27 +905,7 @@ void tms5110_device::device_start()
|
||||
void tms5100_device::device_start()
|
||||
{
|
||||
tms5110_device::device_start();
|
||||
set_variant(TMS5110_IS_5100);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void tms5110a_device::device_start()
|
||||
{
|
||||
tms5110_device::device_start();
|
||||
set_variant(TMS5110_IS_5110A);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void cd2801_device::device_start()
|
||||
{
|
||||
tms5110_device::device_start();
|
||||
set_variant(TMS5110_IS_CD2801);
|
||||
set_variant(TMS5110_IS_TMC0281);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -935,6 +922,36 @@ void tmc0281_device::device_start()
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void tms5100a_device::device_start()
|
||||
{
|
||||
tms5110_device::device_start();
|
||||
set_variant(TMS5110_IS_TMC0281D);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void tmc0281d_device::device_start()
|
||||
{
|
||||
tms5110_device::device_start();
|
||||
set_variant(TMS5110_IS_TMC0281D);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void cd2801_device::device_start()
|
||||
{
|
||||
tms5110_device::device_start();
|
||||
set_variant(TMS5110_IS_CD2801);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void cd2802_device::device_start()
|
||||
{
|
||||
tms5110_device::device_start();
|
||||
@ -945,6 +962,16 @@ void cd2802_device::device_start()
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void tms5110a_device::device_start()
|
||||
{
|
||||
tms5110_device::device_start();
|
||||
set_variant(TMS5110_IS_TMS5110A);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void m58817_device::device_start()
|
||||
{
|
||||
tms5110_device::device_start();
|
||||
@ -1365,29 +1392,11 @@ tms5110_device::tms5110_device(const machine_config &mconfig, device_type type,
|
||||
|
||||
const device_type TMS5100 = &device_creator<tms5100_device>;
|
||||
|
||||
|
||||
tms5100_device::tms5100_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: tms5110_device(mconfig, TMS5100, "TMS5100", tag, owner, clock, "tms5100", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
const device_type TMS5110A = &device_creator<tms5110a_device>;
|
||||
|
||||
tms5110a_device::tms5110a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: tms5110_device(mconfig, TMS5110A, "TMS5110A", tag, owner, clock, "tms5110a", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
const device_type CD2801 = &device_creator<cd2801_device>;
|
||||
|
||||
cd2801_device::cd2801_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: tms5110_device(mconfig, CD2801, "CD2801", tag, owner, clock, "cd2801", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
const device_type TMC0281 = &device_creator<tmc0281_device>;
|
||||
|
||||
tmc0281_device::tmc0281_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
@ -1395,6 +1404,26 @@ tmc0281_device::tmc0281_device(const machine_config &mconfig, const char *tag, d
|
||||
{
|
||||
}
|
||||
|
||||
const device_type TMS5100A = &device_creator<tms5100a_device>;
|
||||
|
||||
tms5100a_device::tms5100a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: tms5110_device(mconfig, TMS5100A, "TMS5100A", tag, owner, clock, "tms5100a", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
const device_type TMC0281D = &device_creator<tmc0281d_device>;
|
||||
|
||||
tmc0281d_device::tmc0281d_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: tms5110_device(mconfig, TMC0281D, "TMC0281D", tag, owner, clock, "tmc0281d", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
const device_type CD2801 = &device_creator<cd2801_device>;
|
||||
|
||||
cd2801_device::cd2801_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: tms5110_device(mconfig, CD2801, "CD2801", tag, owner, clock, "cd2801", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
const device_type CD2802 = &device_creator<cd2802_device>;
|
||||
|
||||
@ -1403,6 +1432,12 @@ cd2802_device::cd2802_device(const machine_config &mconfig, const char *tag, dev
|
||||
{
|
||||
}
|
||||
|
||||
const device_type TMS5110A = &device_creator<tms5110a_device>;
|
||||
|
||||
tms5110a_device::tms5110a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: tms5110_device(mconfig, TMS5110A, "TMS5110A", tag, owner, clock, "tms5110a", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
const device_type M58817 = &device_creator<m58817_device>;
|
||||
|
||||
|
@ -185,16 +185,38 @@ protected:
|
||||
|
||||
extern const device_type TMS5100;
|
||||
|
||||
class tms5110a_device : public tms5110_device
|
||||
class tmc0281_device : public tms5110_device
|
||||
{
|
||||
public:
|
||||
tms5110a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
tmc0281_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
};
|
||||
|
||||
extern const device_type TMS5110A;
|
||||
extern const device_type TMC0281;
|
||||
|
||||
class tms5100a_device : public tms5110_device
|
||||
{
|
||||
public:
|
||||
tms5100a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
};
|
||||
|
||||
extern const device_type TMS5100A;
|
||||
|
||||
class tmc0281d_device : public tms5110_device
|
||||
{
|
||||
public:
|
||||
tmc0281d_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
};
|
||||
|
||||
extern const device_type TMC0281D;
|
||||
|
||||
class cd2801_device : public tms5110_device
|
||||
{
|
||||
@ -207,17 +229,6 @@ protected:
|
||||
|
||||
extern const device_type CD2801;
|
||||
|
||||
class tmc0281_device : public tms5110_device
|
||||
{
|
||||
public:
|
||||
tmc0281_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
};
|
||||
|
||||
extern const device_type TMC0281;
|
||||
|
||||
class cd2802_device : public tms5110_device
|
||||
{
|
||||
public:
|
||||
@ -229,6 +240,17 @@ protected:
|
||||
|
||||
extern const device_type CD2802;
|
||||
|
||||
class tms5110a_device : public tms5110_device
|
||||
{
|
||||
public:
|
||||
tms5110a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
};
|
||||
|
||||
extern const device_type TMS5110A;
|
||||
|
||||
class m58817_device : public tms5110_device
|
||||
{
|
||||
public:
|
||||
|
@ -37,14 +37,34 @@
|
||||
/* quick note on derivative analysis:
|
||||
Judging by all the TI chips I (Lord Nightmare) have done this test on, the first derivative between successive values of the LPC tables should follow a roughly triangular or sine shaped curve, the second derivative should start at a value, increase slightly, then decrease smoothly and become negative right around where the LPC curve passes 0, finally increase slightly right near the end. If it doesn't do this, there is probably a wrong value in there somewhere. The pitch and energy tables follow similar patterns but aren't the same since they never cross 0. The chirp table doesn't follow this pattern at all.
|
||||
*/
|
||||
/* chip type defines */
|
||||
#define SUBTYPE_TMS5100 1
|
||||
#define SUBTYPE_M58817 2
|
||||
#define SUBTYPE_TMS5110 4
|
||||
#define SUBTYPE_TMS5200 8
|
||||
#define SUBTYPE_TMS5220 16
|
||||
#define SUBTYPE_PAT4335277 32
|
||||
#define SUBTYPE_VLM5030 64
|
||||
|
||||
/* Chip types based on die marks from decap:
|
||||
chip type
|
||||
|||||| rom number
|
||||
|||||| |||||
|
||||
VVVVVV VVVVV
|
||||
T0280A 0281 = 1978 speak & spell, unknown difference to below, assumed same? uses old chirp
|
||||
T0280B 0281A = 1979 speak & spell, also == TMS5100, uses old chirp
|
||||
?????? ????? (no decap; likely 'T0280D 0281D') = 1980 speak & spell, 1981 speak & spell compact, changed energy table, otherwise same as above, uses old chirp
|
||||
T0280F 2801A = 1980 speak & math, 1980 speak and read, uses old chirp
|
||||
?????? ????? (no decap; likely 'T0280F 2802') = touch and tell, language translator; uses a unique chirp rom.
|
||||
?????? ????? = TMS5110
|
||||
T0280F 5110A = TMS5110AN2L
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/* chip rom contents defines */
|
||||
#define SUBTYPE_0281A 1
|
||||
#define SUBTYPE_0281D 2
|
||||
#define SUBTYPE_2801A 4
|
||||
#define SUBTYPE_M58817 8
|
||||
#define SUBTYPE_2802 16
|
||||
#define SUBTYPE_5110 32
|
||||
#define SUBTYPE_2501E 64
|
||||
#define SUBTYPE_5220 128
|
||||
#define SUBTYPE_PAT4335277 256
|
||||
#define SUBTYPE_VLM5030 512
|
||||
|
||||
/* coefficient defines */
|
||||
#define MAX_K 10
|
||||
@ -67,85 +87,324 @@ struct tms5100_coeffs
|
||||
INT8 interp_coeff[8];
|
||||
};
|
||||
|
||||
/*
|
||||
TMS5100/TMC0281 Die revs A, B
|
||||
History
|
||||
The TMS5100NL was decapped and imaged by digshadow in April, 2013.
|
||||
The LPC table is verified to match the decap.
|
||||
/* common, shared coefficients */
|
||||
/* energy */
|
||||
#define TI_0280_PATENT_ENERGY \
|
||||
/* E */\
|
||||
{ 0, 0, 1, 1, 2, 3, 5, 7, \
|
||||
10, 15, 21, 30, 43, 61, 86, COEFF_ENERGY_SENTINEL }, // last rom value is actually really 0, but the tms5110.c code still requires the sentinel value to function correctly, until it is properly updated or merged with tms5220.c
|
||||
|
||||
#define TI_0280_LATER_ENERGY \
|
||||
/* E */\
|
||||
{ 0, 1, 2, 3, 4, 6, 8, 11, \
|
||||
16, 23, 33, 47, 63, 85,114, COEFF_ENERGY_SENTINEL }, // last rom value is actually really 0, but the tms5110.c code still requires the sentinel value to function correctly, until it is properly updated or merged with tms5220.c
|
||||
|
||||
//technically this is the same as above, but tms5220.c expects the 0 rather than needing a sentinel value
|
||||
//TODO: when tms5110.c no longer needs sentinel, get rid of this and merge with above.
|
||||
#define TI_0285_LATER_ENERGY \
|
||||
/* E */\
|
||||
{ 0, 1, 2, 3, 4, 6, 8, 11, \
|
||||
16, 23, 33, 47, 63, 85,114, 0 },
|
||||
|
||||
|
||||
/* pitch */
|
||||
#define TI_0280_2801_PATENT_PITCH \
|
||||
/* P */\
|
||||
{ 0, 41, 43, 45, 47, 49, 51, 53, \
|
||||
55, 58, 60, 63, 66, 70, 73, 76, \
|
||||
79, 83, 87, 90, 94, 99, 103, 107, \
|
||||
112, 118, 123, 129, 134, 140, 147, 153 },
|
||||
|
||||
#define TI_2802_PITCH \
|
||||
/* P */\
|
||||
{ 0, 16, 18, 19, 21, 24, 26, 28, \
|
||||
31, 35, 37, 42, 44, 47, 50, 53, \
|
||||
56, 59, 63, 67, 71, 75, 79, 84, \
|
||||
89, 94, 100, 106, 112, 126, 141, 150},
|
||||
|
||||
#define TI_5110_PITCH \
|
||||
/* P */\
|
||||
{ 0, 15, 16, 17, 19, 21, 22, 25, \
|
||||
26, 29, 32, 36, 40, 42, 46, 50, \
|
||||
55, 60, 64, 68, 72, 76, 80, 84, \
|
||||
86, 93, 101, 110, 120, 132, 144, 159},
|
||||
|
||||
#define TI_2501E_PITCH \
|
||||
/* P */\
|
||||
{ 0, 14, 15, 16, 17, 18, 19, 20, \
|
||||
21, 22, 23, 24, 25, 26, 27, 28, \
|
||||
29, 30, 31, 32, 34, 36, 38, 40, \
|
||||
41, 43, 45, 48, 49, 51, 54, 55, \
|
||||
57, 60, 62, 64, 68, 72, 74, 76, \
|
||||
81, 85, 87, 90, 96, 99, 103, 107, \
|
||||
112, 117, 122, 127, 133, 139, 145, 151, \
|
||||
157, 164, 171, 178, 186, 194, 202, 211},
|
||||
|
||||
#define TI_5220_PITCH \
|
||||
/* P */\
|
||||
{ 0, 15, 16, 17, 18, 19, 20, 21, \
|
||||
22, 23, 24, 25, 26, 27, 28, 29, \
|
||||
30, 31, 32, 33, 34, 35, 36, 37, \
|
||||
38, 39, 40, 41, 42, 44, 46, 48, \
|
||||
50, 52, 53, 56, 58, 60, 62, 65, \
|
||||
68, 70, 72, 76, 78, 80, 84, 86, \
|
||||
91, 94, 98, 101, 105, 109, 114, 118, \
|
||||
122, 127, 132, 137, 142, 148, 153, 159},
|
||||
|
||||
/* LPC */
|
||||
#define TI_0280_PATENT_LPC \
|
||||
/* K1 */\
|
||||
{ -501, -497, -493, -488, -480, -471, -460, -446,\
|
||||
-427, -405, -378, -344, -305, -259, -206, -148,\
|
||||
-86, -21, 45, 110, 171, 227, 277, 320,\
|
||||
357, 388, 413, 434, 451, 464, 474, 498 },\
|
||||
/* K2 */\
|
||||
{ -349, -328, -305, -280, -252, -223, -192, -158,\
|
||||
-124, -88, -51, -14, 23, 60, 97, 133,\
|
||||
167, 199, 230, 259, 286, 310, 333, 354,\
|
||||
372, 389, 404, 417, 429, 439, 449, 506 },\
|
||||
/* K3 */\
|
||||
{ -397, -365, -327, -282, -229, -170, -104, -36,\
|
||||
35, 104, 169, 228, 281, 326, 364, 396 },\
|
||||
/* K4 */\
|
||||
{ -369, -334, -293, -245, -191, -131, -67, -1,\
|
||||
64, 128, 188, 243, 291, 332, 367, 397 },\
|
||||
/* K5 */\
|
||||
{ -319, -286, -250, -211, -168, -122, -74, -25,\
|
||||
24, 73, 121, 167, 210, 249, 285, 318 },\
|
||||
/* K6 */\
|
||||
{ -290, -252, -209, -163, -114, -62, -9, 44,\
|
||||
97, 147, 194, 238, 278, 313, 344, 371 },\
|
||||
/* K7 */\
|
||||
{ -291, -256, -216, -174, -128, -80, -31, 19,\
|
||||
69, 117, 163, 206, 246, 283, 316, 345 },\
|
||||
/* K8 */\
|
||||
{ -218, -133, -38, 59, 152, 235, 305, 361 },\
|
||||
/* K9 */\
|
||||
{ -226, -157, -82, -3, 76, 151, 220, 280 },\
|
||||
/* K10 */\
|
||||
{ -179, -122, -61, 1, 62, 123, 179, 231 },
|
||||
|
||||
#define TI_2801A_2501E_LPC \
|
||||
/* K1 */\
|
||||
{ -501, -498, -495, -490, -485, -478, -469, -459,\
|
||||
-446, -431, -412, -389, -362, -331, -295, -253,\
|
||||
-207, -156, -102, -45, 13, 70, 126, 179,\
|
||||
228, 272, 311, 345, 374, 399, 420, 437 },\
|
||||
/* K2 */\
|
||||
{ -376, -357, -335, -312, -286, -258, -227, -195,\
|
||||
-161, -124, -87, -49, -10, 29, 68, 106,\
|
||||
143, 178, 212, 243, 272, 299, 324, 346,\
|
||||
366, 384, 400, 414, 427, 438, 448, 506 },\
|
||||
/* K3 */\
|
||||
{ -407, -381, -349, -311, -268, -218, -162, -102,\
|
||||
-39, 25, 89, 149, 206, 257, 302, 341 },\
|
||||
/* K4 */\
|
||||
{ -290, -252, -209, -163, -114, -62, -9, 44,\
|
||||
97, 147, 194, 238, 278, 313, 344, 371 },\
|
||||
/* K5 */\
|
||||
{ -318, -283, -245, -202, -156, -107, -56, -3,\
|
||||
49, 101, 150, 196, 239, 278, 313, 344 },\
|
||||
/* K6 */\
|
||||
{ -193, -152, -109, -65, -20, 26, 71, 115,\
|
||||
158, 198, 235, 270, 301, 330, 355, 377 },\
|
||||
/* K7 */\
|
||||
{ -254, -218, -180, -140, -97, -53, -8, 36,\
|
||||
81, 124, 165, 204, 240, 274, 304, 332 },\
|
||||
/* K8 */\
|
||||
{ -205, -112, -10, 92, 187, 269, 336, 387 },\
|
||||
/* K9 */\
|
||||
{ -249, -183, -110, -32, 48, 126, 198, 261 }, /* on patents 4,403,965 and 4,946,391 the 4th entry is -19 which is wrong! should be -32*/\
|
||||
/* K10 */\
|
||||
{ -190, -133, -73, -10, 53, 115, 173, 227 },
|
||||
|
||||
// below is the same as 2801/2501E above EXCEPT for K4 which is completely different.
|
||||
#define TI_2802_LPC \
|
||||
/* K1 */\
|
||||
{ -501, -498, -495, -490, -485, -478, -469, -459,\
|
||||
-446, -431, -412, -389, -362, -331, -295, -253,\
|
||||
-207, -156, -102, -45, 13, 70, 126, 179,\
|
||||
228, 272, 311, 345, 374, 399, 420, 437},\
|
||||
/* K2 */\
|
||||
{ -376, -357, -335, -312, -286, -258, -227, -195,\
|
||||
-161, -124, -87, -49, -10, 29, 68, 106,\
|
||||
143, 178, 212, 243, 272, 299, 324, 346,\
|
||||
366, 384, 400, 414, 427, 438, 448, 506},\
|
||||
/* K3 */\
|
||||
{ -407, -381, -349, -311, -268, -218, -162, -102,\
|
||||
-39, 25, 89, 149, 206, 257, 302, 341},\
|
||||
/* K4 */\
|
||||
{ -289, -248, -202, -152, -98, -43, 14, 71,\
|
||||
125, 177, 225, 269, 307, 341, 371, 506},\
|
||||
/* K5 */\
|
||||
{ -318, -283, -245, -202, -156, -107, -56, -3,\
|
||||
49, 101, 150, 196, 239, 278, 313, 344},\
|
||||
/* K6 */\
|
||||
{ -193, -152, -109, -65, -20, 26, 71, 115,\
|
||||
158, 198, 235, 270, 301, 330, 355, 377},\
|
||||
/* K7 */\
|
||||
{ -254, -218, -180, -140, -97, -53, -8, 36,\
|
||||
81, 124, 165, 204, 240, 274, 304, 332},\
|
||||
/* K8 */\
|
||||
{ -205, -112, -10, 92, 187, 269, 336, 387},\
|
||||
/* K9 */\
|
||||
{ -249, -183, -110, -32, 48, 126, 198, 261},\
|
||||
/* K10 */\
|
||||
{ -190, -133, -73, -10, 53, 115, 173, 227},
|
||||
|
||||
#define TI_5110_5220_LPC \
|
||||
/* K1 */\
|
||||
{ -501, -498, -497, -495, -493, -491, -488, -482,\
|
||||
-478, -474, -469, -464, -459, -452, -445, -437,\
|
||||
-412, -380, -339, -288, -227, -158, -81, -1,\
|
||||
80, 157, 226, 287, 337, 379, 411, 436 },\
|
||||
/* K2 */\
|
||||
{ -328, -303, -274, -244, -211, -175, -138, -99,\
|
||||
-59, -18, 24, 64, 105, 143, 180, 215,\
|
||||
248, 278, 306, 331, 354, 374, 392, 408,\
|
||||
422, 435, 445, 455, 463, 470, 476, 506 },\
|
||||
/* K3 */\
|
||||
{ -441, -387, -333, -279, -225, -171, -117, -63,\
|
||||
-9, 45, 98, 152, 206, 260, 314, 368 },\
|
||||
/* K4 */\
|
||||
{ -328, -273, -217, -161, -106, -50, 5, 61,\
|
||||
116, 172, 228, 283, 339, 394, 450, 506 },\
|
||||
/* K5 */\
|
||||
{ -328, -282, -235, -189, -142, -96, -50, -3,\
|
||||
43, 90, 136, 182, 229, 275, 322, 368 },\
|
||||
/* K6 */\
|
||||
{ -256, -212, -168, -123, -79, -35, 10, 54,\
|
||||
98, 143, 187, 232, 276, 320, 365, 409 },\
|
||||
/* K7 */\
|
||||
{ -308, -260, -212, -164, -117, -69, -21, 27,\
|
||||
75, 122, 170, 218, 266, 314, 361, 409 },\
|
||||
/* K8 */\
|
||||
{ -256, -161, -66, 29, 124, 219, 314, 409 },\
|
||||
/* K9 */\
|
||||
{ -256, -176, -96, -15, 65, 146, 226, 307 },\
|
||||
/* K10 */\
|
||||
{ -205, -132, -59, 14, 87, 160, 234, 307 },
|
||||
|
||||
/* chirp */
|
||||
#define TI_0280_PATENT_CHIRP \
|
||||
/* Chirp table */\
|
||||
{ 0, 42, -44, 50, -78, 18, 37, 20,\
|
||||
2, -31, -59, 2, 95, 90, 5, 15,\
|
||||
38, -4, -91,-91, -42,-35,-36, -4,\
|
||||
37, 43, 34, 33, 15, -1, -8,-18,\
|
||||
-19,-17, -9,-10, -6, 0, 3, 2,\
|
||||
1, 0, 0, 0, 0, 0, 0, 0,\
|
||||
0, 0, 0, 0 },
|
||||
|
||||
// below is INACCURATE, no decap of 2802 yet!
|
||||
#define TI_2802_CHIRP \
|
||||
/* Chirp table */\
|
||||
{ 0, 42, -44, 50, -78, 18, 37, 20,\
|
||||
2, -31, -59, 2, 95, 90, 5, 15,\
|
||||
38, -4, -91,-91, -42,-35,-36, -4,\
|
||||
37, 43, 34, 33, 15, -1, -8,-18,\
|
||||
-19,-17, -9,-10, -6, 0, 3, 2,\
|
||||
1, 0, 0, 0, 0, 0, 0, 0,\
|
||||
0, 0, 0, 0 },
|
||||
|
||||
#define TI_LATER_CHIRP \
|
||||
/* Chirp table */\
|
||||
{ 0x00, 0x03, 0x0F, 0x28, 0x4C, 0x6C, 0x71, 0x50,\
|
||||
0x25, 0x26, 0x4C, 0x44, 0x1A, 0x32, 0x3B, 0x13,\
|
||||
0x37, 0x1A, 0x25, 0x1F, 0x1D, 0x00, 0x00, 0x00,\
|
||||
0, 0, 0, 0, 0, 0, 0, 0,\
|
||||
0, 0, 0, 0, 0, 0, 0, 0,\
|
||||
0, 0, 0, 0, 0, 0, 0, 0,\
|
||||
0, 0, 0, 0 },
|
||||
|
||||
/* TMS5100/TMC0281:
|
||||
(Die revs A, B)
|
||||
The TMS5100NL was decapped and imaged by digshadow in April, 2013.
|
||||
The LPC table is verified to match the decap.
|
||||
It also matches the intended contents of US Patent 4,209,836 and several others.
|
||||
The chirp table is verified to match the decap, and also matches the patents.
|
||||
The TMS5100 (development name: TMC0280) and the Speak & Spell's "CD2801" chip
|
||||
are believed to be the same silicon. The 5100 decapped by digshadow had the die
|
||||
markings: "0281 B 281A"
|
||||
In December 2014, Sean riddle decapped a TMC0281 die from 1978 from an early speak
|
||||
and spell. The TMC0281 die had the die markings "0281 A 281"; the chirp table matches
|
||||
what digshadow had decapped earlier.
|
||||
The chirp table is verified to match the decap, and also matches the patents.
|
||||
In April, 2013, digshadow decapped a TMS5100 chip from 1980: http://siliconpr0n.org/map/ti/tms5100nl/
|
||||
The TMS5100 had the die markings: "0281 B 281A"
|
||||
In December 2014, Sean riddle decapped a TMC0281 chip from 1978 from an early speak
|
||||
and spell.
|
||||
The TMC0281 die had the die markings "0281 A 281"
|
||||
The chirp table matches what digshadow had decapped earlier.
|
||||
The LPC table hasn't been fully typed yet.
|
||||
Digitally dumped via PROMOUT by PlgDavid in 2014 for verification.
|
||||
*/
|
||||
static const struct tms5100_coeffs pat4209836_coeff =
|
||||
static const struct tms5100_coeffs T0280B_0281A_coeff =
|
||||
{
|
||||
/* subtype */
|
||||
SUBTYPE_TMS5100,
|
||||
SUBTYPE_0281A,
|
||||
10,
|
||||
4,
|
||||
5,
|
||||
{ 5, 5, 4, 4, 4, 4, 4, 3, 3, 3 },
|
||||
/* E */
|
||||
{ 0, 0, 1, 1, 2, 3, 5, 7,
|
||||
10, 15, 21, 30, 43, 61, 86, COEFF_ENERGY_SENTINEL }, // last rom value is actually really 0, but the tms5110.c code still requires the sentinel value to function correctly, until it is properly updated or merged with tms5220.c
|
||||
/* P */
|
||||
{ 0, 41, 43, 45, 47, 49, 51, 53,
|
||||
55, 58, 60, 63, 66, 70, 73, 76,
|
||||
79, 83, 87, 90, 94, 99, 103, 107,
|
||||
112, 118, 123, 129, 134, 140, 147, 153 },
|
||||
TI_0280_PATENT_ENERGY
|
||||
TI_0280_2801_PATENT_PITCH
|
||||
{
|
||||
/* K1 */
|
||||
{ -501, -497, -493, -488, -480, -471, -460, -446,
|
||||
-427, -405, -378, -344, -305, -259, -206, -148,
|
||||
-86, -21, 45, 110, 171, 227, 277, 320,
|
||||
357, 388, 413, 434, 451, 464, 474, 498 },
|
||||
/* K2 */
|
||||
{ -349, -328, -305, -280, -252, -223, -192, -158,
|
||||
-124, -88, -51, -14, 23, 60, 97, 133,
|
||||
167, 199, 230, 259, 286, 310, 333, 354,
|
||||
372, 389, 404, 417, 429, 439, 449, 506 },
|
||||
/* K3 */
|
||||
{ -397, -365, -327, -282, -229, -170, -104, -36,
|
||||
35, 104, 169, 228, 281, 326, 364, 396 },
|
||||
/* K4 */
|
||||
{ -369, -334, -293, -245, -191, -131, -67, -1,
|
||||
64, 128, 188, 243, 291, 332, 367, 397 },
|
||||
/* K5 */
|
||||
{ -319, -286, -250, -211, -168, -122, -74, -25,
|
||||
24, 73, 121, 167, 210, 249, 285, 318 },
|
||||
/* K6 */
|
||||
{ -290, -252, -209, -163, -114, -62, -9, 44,
|
||||
97, 147, 194, 238, 278, 313, 344, 371 },
|
||||
/* K7 */
|
||||
{ -291, -256, -216, -174, -128, -80, -31, 19,
|
||||
69, 117, 163, 206, 246, 283, 316, 345 },
|
||||
/* K8 */
|
||||
{ -218, -133, -38, 59, 152, 235, 305, 361 },
|
||||
/* K9 */
|
||||
{ -226, -157, -82, -3, 76, 151, 220, 280 },
|
||||
/* K10 */
|
||||
{ -179, -122, -61, 1, 62, 123, 179, 231 },
|
||||
TI_0280_PATENT_LPC
|
||||
},
|
||||
/* Chirp table */
|
||||
{ 0, 42, -44, 50, -78, 18, 37, 20,
|
||||
2, -31, -59, 2, 95, 90, 5, 15,
|
||||
38, -4, -91,-91, -42,-35,-36, -4,
|
||||
37, 43, 34, 33, 15, -1, -8,-18,
|
||||
-19,-17, -9,-10, -6, 0, 3, 2,
|
||||
1, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0 },
|
||||
TI_0280_PATENT_CHIRP
|
||||
/* interpolation coefficients */
|
||||
{ 3, 3, 3, 2, 2, 1, 1, 0 }
|
||||
};
|
||||
|
||||
/* The following CD2802 coefficients come from US Patents 4,403,965 and 4,946,391; They have not yet been verified using derivatives. The M58817 seems to work best with these coefficients, so its possible the engineers of that chip copied them from the TI patents.
|
||||
***These values have not yet been verified against a real CD2802 (used in touch & tell)***
|
||||
*/
|
||||
static const struct tms5100_coeffs pat4403965_coeff =
|
||||
/* TMS5110A/TMC0281D:
|
||||
This chip is used on the later speak & spell, and speak & spell compact;
|
||||
The energy table differs from the original tmc0281/tms5100, but nothing else does.
|
||||
Digitally dumped via PROMOUT by PlgDavid in 2014
|
||||
*/
|
||||
static const struct tms5100_coeffs T0280D_0281D_coeff =
|
||||
{
|
||||
/* subtype */
|
||||
SUBTYPE_0281D,
|
||||
10,
|
||||
4,
|
||||
5,
|
||||
{ 5, 5, 4, 4, 4, 4, 4, 3, 3, 3 },
|
||||
TI_0280_LATER_ENERGY
|
||||
TI_0280_2801_PATENT_PITCH
|
||||
{
|
||||
TI_0280_PATENT_LPC
|
||||
},
|
||||
TI_0280_PATENT_CHIRP
|
||||
/* interpolation coefficients */
|
||||
{ 3, 3, 3, 2, 2, 1, 1, 0 }
|
||||
};
|
||||
|
||||
/* TMC0280/CD2801:
|
||||
Used in the Speak & Math and Speak & Read
|
||||
Decapped by Digshadow in 2014 http://siliconpr0n.org/map/ti/tmc0280fnl/
|
||||
Digitally dumped via PROMOUT by PlgDavid in 2014
|
||||
The coefficients are exactly the same as the TMS5200
|
||||
The coefficients also come from US Patents 4,403,965 and 4,946,391 (with one error in the patent);
|
||||
The Mitsubishi M58817 also seems to work best with these coefficients, so its possible the engineers of that chip copied them from the TI patents, see next entry
|
||||
***TODO: there are 2 versions of this chip, and the interpolation behavior between the two differs slightly!
|
||||
*/
|
||||
static const struct tms5100_coeffs T0280F_2801A_coeff =
|
||||
{
|
||||
/* subtype */
|
||||
SUBTYPE_2801A,
|
||||
10,
|
||||
4,
|
||||
5,
|
||||
{ 5, 5, 4, 4, 4, 4, 4, 3, 3, 3 },
|
||||
TI_0280_LATER_ENERGY
|
||||
TI_0280_2801_PATENT_PITCH
|
||||
{
|
||||
TI_2801A_2501E_LPC
|
||||
},
|
||||
TI_0280_PATENT_CHIRP
|
||||
/* interpolation coefficients */
|
||||
{ 3, 3, 3, 2, 2, 1, 1, 0 }
|
||||
};
|
||||
|
||||
/* Mitsubishi M58817
|
||||
The Mitsubishi M58817 seems to have (partly?) copied the coefficients from the TMC0280/CD2801 above, but has some slight differences to it within the chip: the main accumulator seems to have 1 extra bit and the digital values are tapped 1 bit higher than on the TI chips. This is emulated within tms5110.c
|
||||
***TODO: there are 2 versions of this chip, and the interpolation behavior between the two differs slightly!
|
||||
*/
|
||||
static const struct tms5100_coeffs M58817_coeff =
|
||||
{
|
||||
/* subtype */
|
||||
SUBTYPE_M58817,
|
||||
@ -153,125 +412,66 @@ static const struct tms5100_coeffs pat4403965_coeff =
|
||||
4,
|
||||
5,
|
||||
{ 5, 5, 4, 4, 4, 4, 4, 3, 3, 3 },
|
||||
/* E */
|
||||
{ 0, 1, 2, 3, 4, 6, 8, 11,
|
||||
16, 23, 33, 47, 63, 85, 114, 511 },
|
||||
/* P */
|
||||
{ 0, 41, 43, 45, 47, 49, 51, 53,
|
||||
55, 58, 60, 63, 66, 70, 73, 76,
|
||||
79, 83, 87, 90, 94, 99, 103, 107,
|
||||
112, 118, 123, 129, 134, 140, 147, 153 },
|
||||
TI_0280_LATER_ENERGY
|
||||
TI_0280_2801_PATENT_PITCH
|
||||
{
|
||||
/* K1 */
|
||||
{ -501, -498, -495, -490, -485, -478, -469, -459,
|
||||
-446, -431, -412, -389, -362, -331, -295, -253,
|
||||
-207, -156, -102, -45, 13, 70, 126, 179,
|
||||
228, 272, 311, 345, 374, 399, 420, 437 },
|
||||
/* K2 */
|
||||
{ -376, -357, -335, -312, -286, -258, -227, -195,
|
||||
-161, -124, -87, -49, -10, 29, 68, 106,
|
||||
143, 178, 212, 243, 272, 299, 324, 346,
|
||||
366, 384, 400, 414, 427, 438, 448, 506 },
|
||||
/* K3 */
|
||||
{ -407, -381, -349, -311, -268, -218, -162, -102,
|
||||
-39, 25, 89, 149, 206, 257, 302, 341 },
|
||||
/* K4 */
|
||||
{ -290, -252, -209, -163, -114, -62, -9, 44,
|
||||
97, 147, 194, 238, 278, 313, 344, 371 },
|
||||
/* K5 */
|
||||
{ -318, -283, -245, -202, -156, -107, -56, -3,
|
||||
49, 101, 150, 196, 239, 278, 313, 344 },
|
||||
/* K6 */
|
||||
{ -193, -152, -109, -65, -20, 26, 71, 115,
|
||||
158, 198, 235, 270, 301, 330, 355, 377 },
|
||||
/* K7 */
|
||||
{ -254, -218, -180, -140, -97, -53, -8, 36,
|
||||
81, 124, 165, 204, 240, 274, 304, 332 },
|
||||
/* K8 */
|
||||
{ -205, -112, -10, 92, 187, 269, 336, 387 },
|
||||
/* K9 */
|
||||
{ -249, -183, -110, -19, 48, 126, 198, 261 }, // on tms5200 the 4th entry is -32
|
||||
/* K10 */
|
||||
{ -190, -133, -73, -10, 53, 115, 173, 227 },
|
||||
TI_2801A_2501E_LPC
|
||||
},
|
||||
/* Chirp table */
|
||||
{ 0, 43, -44, 51,-77, 18, 37, 20,
|
||||
2,-30, -58, 3, 96, 91, 5, 15,
|
||||
38, -4, -90,-91,-42,-35,-35, -3,
|
||||
37, 43, 35, 34, 15, -1, -8,-17,
|
||||
-19,-17, -9, -9, -6, 1, 4, 3,
|
||||
1, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0 },
|
||||
TI_0280_PATENT_CHIRP
|
||||
/* interpolation coefficients */
|
||||
{ 3, 3, 3, 2, 2, 1, 1, 0 }
|
||||
};
|
||||
|
||||
/* The following TMS5110A LPC coefficients were directly read from an actual
|
||||
TMS5110A chip by Jarek Burczynski using the PROMOUT pin, and can be regarded
|
||||
as established fact. However, the chirp table and the interpolation
|
||||
coefficients still come from the patents as there doesn't seem to be an easy
|
||||
way to read those out from the chip without decapping it.
|
||||
The TMS5111NLL was decapped and imaged by digshadow in April, 2013.
|
||||
The LPC table is verified to match the values from Jarek's PROMOUT dump of the TMS5110,
|
||||
and the die even says "TMS5110AJ" on it. It uses the 'newer' 5200-style chirp table.
|
||||
/* CD2802:
|
||||
Used in Touch and Tell as well as the Languag Translator, this chip has a unique pitch, LPC and chirp table.
|
||||
Digitally dumped via PROMOUT by PlgDavid in 2014
|
||||
*/
|
||||
static const struct tms5100_coeffs T0280F_2802_coeff =
|
||||
{
|
||||
/* subtype */
|
||||
SUBTYPE_2802,
|
||||
10,
|
||||
4,
|
||||
5,
|
||||
{ 5, 5, 4, 4, 4, 4, 4, 3, 3, 3 },
|
||||
TI_0280_LATER_ENERGY
|
||||
TI_2802_PITCH
|
||||
{
|
||||
TI_2802_LPC
|
||||
},
|
||||
TI_2802_CHIRP
|
||||
/* interpolation coefficients */
|
||||
{ 3, 3, 3, 2, 2, 1, 1, 0 }
|
||||
};
|
||||
|
||||
/* TMS5110A:
|
||||
The TMS5110A LPC coefficients were originally read from an actual TMS5110A
|
||||
chip by Jarek Burczynski using the PROMOUT pin, later verified/redumped
|
||||
by PlgDavid.
|
||||
NullMoogleCable decapped a TMS5110AN2L in 2015: http://wtfmoogle.com/wp-content/uploads/2015/03/0317_1.jpg
|
||||
which was used to verify the chirp table.
|
||||
The slightly older but otherwise identical TMS5111NLL was decapped and imaged by digshadow in April, 2013.
|
||||
The die is marked "TMS5110AJ"
|
||||
The LPC table is verified from decap to match the values from Jarek and PlgDavid's PROMOUT dumps of the TMS5110.
|
||||
The LPC table matches that of the TMS5220.
|
||||
It uses the 'newer' 5200-style chirp table.
|
||||
*/
|
||||
static const struct tms5100_coeffs tms5110a_coeff =
|
||||
{
|
||||
/* subtype */
|
||||
SUBTYPE_TMS5110,
|
||||
SUBTYPE_5110,
|
||||
10,
|
||||
4,
|
||||
5,
|
||||
{ 5, 5, 4, 4, 4, 4, 4, 3, 3, 3 },
|
||||
/* E */
|
||||
{ 0, 1, 2, 3, 4, 6, 8, 11,
|
||||
16, 23, 33, 47, 63, 85, 114, 511 },
|
||||
TI_0280_LATER_ENERGY
|
||||
/* P */
|
||||
{ 0, 15, 16, 17, 19, 21, 22, 25,
|
||||
26, 29, 32, 36, 40, 42, 46, 50,
|
||||
55, 60, 64, 68, 72, 76, 80, 84,
|
||||
86, 93, 101, 110, 120, 132, 144, 159 },
|
||||
TI_5110_PITCH
|
||||
{
|
||||
/* K1 */
|
||||
{ -501, -498, -497, -495, -493, -491, -488, -482,
|
||||
-478, -474, -469, -464, -459, -452, -445, -437,
|
||||
-412, -380, -339, -288, -227, -158, -81, -1,
|
||||
80, 157, 226, 287, 337, 379, 411, 436 },
|
||||
/* K2 */
|
||||
{ -328, -303, -274, -244, -211, -175, -138, -99,
|
||||
-59, -18, 24, 64, 105, 143, 180, 215,
|
||||
248, 278, 306, 331, 354, 374, 392, 408,
|
||||
422, 435, 445, 455, 463, 470, 476, 506 },
|
||||
/* K3 */
|
||||
{ -441, -387, -333, -279, -225, -171, -117, -63,
|
||||
-9, 45, 98, 152, 206, 260, 314, 368 },
|
||||
/* K4 */
|
||||
{ -328, -273, -217, -161, -106, -50, 5, 61,
|
||||
116, 172, 228, 283, 339, 394, 450, 506 },
|
||||
/* K5 */
|
||||
{ -328, -282, -235, -189, -142, -96, -50, -3,
|
||||
43, 90, 136, 182, 229, 275, 322, 368 },
|
||||
/* K6 */
|
||||
{ -256, -212, -168, -123, -79, -35, 10, 54,
|
||||
98, 143, 187, 232, 276, 320, 365, 409 },
|
||||
/* K7 */
|
||||
{ -308, -260, -212, -164, -117, -69, -21, 27,
|
||||
75, 122, 170, 218, 266, 314, 361, 409 },
|
||||
/* K8 */
|
||||
{ -256, -161, -66, 29, 124, 219, 314, 409 },
|
||||
/* K9 */
|
||||
{ -256, -176, -96, -15, 65, 146, 226, 307 },
|
||||
/* K10 */
|
||||
{ -205, -132, -59, 14, 87, 160, 234, 307 },
|
||||
TI_5110_5220_LPC
|
||||
},
|
||||
/* Chirp table */
|
||||
{ 0x00, 0x03, 0x0F, 0x28, 0x4C, 0x6C, 0x71, 0x50,
|
||||
0x25, 0x26, 0x4C, 0x44, 0x1A, 0x32, 0x3B, 0x13,
|
||||
0x37, 0x1A, 0x25, 0x1F, 0x1D, 0x00, 0x00, 0x00,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0 },
|
||||
TI_LATER_CHIRP
|
||||
/* interpolation coefficients */
|
||||
{ 3, 3, 3, 2, 2, 1, 1, 0 }
|
||||
};
|
||||
@ -279,8 +479,9 @@ static const struct tms5100_coeffs tms5110a_coeff =
|
||||
/* The following coefficients come from US Patent 4,335,277 and 4,581,757.
|
||||
However, the K10 row of coefficients are entirely missing from both of those
|
||||
patents.
|
||||
The K values don't match the values read from an actual TMS5200 chip, but
|
||||
might match the TMS5111 or some other undiscovered chip?
|
||||
The K values don't match the values read from any of the TI chips so far, but
|
||||
might match some other undiscovered chip? Or may be complete garbage put as a red
|
||||
herring in the patent?
|
||||
*/
|
||||
// k* is followed by d if done transcription, c if checked for derivative aberrations
|
||||
static const struct tms5100_coeffs pat4335277_coeff =
|
||||
@ -291,18 +492,8 @@ static const struct tms5100_coeffs pat4335277_coeff =
|
||||
4,
|
||||
6,
|
||||
{ 5, 5, 4, 4, 4, 4, 4, 3, 3, 3 },
|
||||
/* Ed */
|
||||
{ 0, 1, 2, 3, 4, 6, 8, 11,
|
||||
16, 23, 33, 47, 63, 85, 114, 511 }, /* last value is actually 0 in ROM, but 511 is stop sentinel */
|
||||
/* Pd */
|
||||
{ 0, 14, 15, 16, 17, 18, 19, 20,
|
||||
21, 22, 23, 24, 25, 26, 27, 28,
|
||||
29, 30, 31, 32, 34, 36, 38, 40,
|
||||
41, 43, 45, 48, 49, 51, 54, 55,
|
||||
57, 60, 62, 64, 68, 72, 74, 76,
|
||||
81, 85, 87, 90, 96, 99, 103, 107,
|
||||
112, 117, 122, 127, 133, 139, 145, 151,
|
||||
157, 164, 171, 178, 186, 194, 202, 211 },
|
||||
TI_0285_LATER_ENERGY
|
||||
TI_2501E_PITCH
|
||||
{
|
||||
/* K1dc */
|
||||
{ -507, -505, -503, -501, -497, -493, -488, -481,
|
||||
@ -366,71 +557,25 @@ NOTE FROM DECAP: immediately to the left of each of the K1,2,3,4,5,and 6
|
||||
coefficients in the LPC rom are extra columns containing the constants
|
||||
-510, -502, 313, 318, or in hex 0x202, 0x20A, 0x139, 0x13E.
|
||||
Those EXACT constants DO appear (rather nonsensically) on the lpc table in US
|
||||
patent 4,335,277. They don't seem to do anything except take up space and may
|
||||
be a leftover from an older design predating even the patent.
|
||||
patent 4,335,277. They are likely related to the multiplicative interpolator
|
||||
described in us patent 4,419,540; whether the 5200/2501E and the 5220 or 5220C
|
||||
actually implement this interpolator or not is unclear.
|
||||
*/
|
||||
|
||||
static const struct tms5100_coeffs tms5200_coeff =
|
||||
static const struct tms5100_coeffs T0285_2501E_coeff =
|
||||
{
|
||||
/* subtype */
|
||||
SUBTYPE_TMS5200,
|
||||
SUBTYPE_2501E,
|
||||
10,
|
||||
4,
|
||||
6,
|
||||
{ 5, 5, 4, 4, 4, 4, 4, 3, 3, 3 },
|
||||
/* E */
|
||||
{ 0, 1, 2, 3, 4, 6, 8, 11,
|
||||
16, 23, 33, 47, 63, 85, 114, 0 },
|
||||
/* P */
|
||||
{ 0, 14, 15, 16, 17, 18, 19, 20,
|
||||
21, 22, 23, 24, 25, 26, 27, 28,
|
||||
29, 30, 31, 32, 34, 36, 38, 40,
|
||||
41, 43, 45, 48, 49, 51, 54, 55,
|
||||
57, 60, 62, 64, 68, 72, 74, 76,
|
||||
81, 85, 87, 90, 96, 99, 103, 107,
|
||||
112, 117, 122, 127, 133, 139, 145, 151,
|
||||
157, 164, 171, 178, 186, 194, 202, 211 },
|
||||
TI_0285_LATER_ENERGY
|
||||
TI_2501E_PITCH
|
||||
{
|
||||
/* K1 */
|
||||
{ -501, -498, -495, -490, -485, -478, -469, -459,
|
||||
-446, -431, -412, -389, -362, -331, -295, -253,
|
||||
-207, -156, -102, -45, 13, 70, 126, 179,
|
||||
228, 272, 311, 345, 374, 399, 420, 437 },
|
||||
/* K2 */
|
||||
{ -376, -357, -335, -312, -286, -258, -227, -195,
|
||||
-161, -124, -87, -49, -10, 29, 68, 106,
|
||||
143, 178, 212, 243, 272, 299, 324, 346,
|
||||
366, 384, 400, 414, 427, 438, 448, 506 },
|
||||
/* K3 */
|
||||
{ -407, -381, -349, -311, -268, -218, -162, -102,
|
||||
-39, 25, 89, 149, 206, 257, 302, 341 },
|
||||
/* K4 */
|
||||
{ -290, -252, -209, -163, -114, -62, -9, 44,
|
||||
97, 147, 194, 238, 278, 313, 344, 371 },
|
||||
/* K5 */
|
||||
{ -318, -283, -245, -202, -156, -107, -56, -3,
|
||||
49, 101, 150, 196, 239, 278, 313, 344 },
|
||||
/* K6 */
|
||||
{ -193, -152, -109, -65, -20, 26, 71, 115,
|
||||
158, 198, 235, 270, 301, 330, 355, 377 },
|
||||
/* K7 */
|
||||
{ -254, -218, -180, -140, -97, -53, -8, 36,
|
||||
81, 124, 165, 204, 240, 274, 304, 332 },
|
||||
/* K8 */
|
||||
{ -205, -112, -10, 92, 187, 269, 336, 387 },
|
||||
/* K9 */
|
||||
{ -249, -183, -110, -32, 48, 126, 198, 261 }, // verified from decap; on the cd2802 patent the 4th entry is -19 (patent typo?)
|
||||
/* K10 */
|
||||
{ -190, -133, -73, -10, 53, 115, 173, 227 },
|
||||
TI_2801A_2501E_LPC
|
||||
},
|
||||
/* Chirp table */
|
||||
{ 0x00, 0x03, 0x0F, 0x28, 0x4C, 0x6C, 0x71, 0x50,
|
||||
0x25, 0x26, 0x4C, 0x44, 0x1A, 0x32, 0x3B, 0x13,
|
||||
0x37, 0x1A, 0x25, 0x1F, 0x1D, 0x00, 0x00, 0x00,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0 },
|
||||
TI_LATER_CHIRP
|
||||
/* interpolation coefficients */
|
||||
{ 0, 3, 3, 3, 2, 2, 1, 1 }
|
||||
};
|
||||
@ -448,64 +593,17 @@ The chirp table is verified to match the decap. (sum = 0x3da)
|
||||
static const struct tms5100_coeffs tms5220_coeff =
|
||||
{
|
||||
/* subtype */
|
||||
SUBTYPE_TMS5220,
|
||||
SUBTYPE_5220,
|
||||
10,
|
||||
4,
|
||||
6,
|
||||
{ 5, 5, 4, 4, 4, 4, 4, 3, 3, 3 },
|
||||
/* E */
|
||||
{ 0, 1, 2, 3, 4, 6, 8, 11,
|
||||
16, 23, 33, 47, 63, 85, 114, 0 },
|
||||
/* P */
|
||||
{ 0, 15, 16, 17, 18, 19, 20, 21,
|
||||
22, 23, 24, 25, 26, 27, 28, 29,
|
||||
30, 31, 32, 33, 34, 35, 36, 37,
|
||||
38, 39, 40, 41, 42, 44, 46, 48,
|
||||
50, 52, 53, 56, 58, 60, 62, 65,
|
||||
68, 70, 72, 76, 78, 80, 84, 86,
|
||||
91, 94, 98, 101, 105, 109, 114, 118,
|
||||
122, 127, 132, 137, 142, 148, 153, 159 },
|
||||
TI_0285_LATER_ENERGY
|
||||
TI_5220_PITCH
|
||||
{
|
||||
/* K1 */
|
||||
{ -501, -498, -497, -495, -493, -491, -488, -482,
|
||||
-478, -474, -469, -464, -459, -452, -445, -437,
|
||||
-412, -380, -339, -288, -227, -158, -81, -1,
|
||||
80, 157, 226, 287, 337, 379, 411, 436 },
|
||||
/* K2 */
|
||||
{ -328, -303, -274, -244, -211, -175, -138, -99,
|
||||
-59, -18, 24, 64, 105, 143, 180, 215,
|
||||
248, 278, 306, 331, 354, 374, 392, 408,
|
||||
422, 435, 445, 455, 463, 470, 476, 506 },
|
||||
/* K3 */
|
||||
{ -441, -387, -333, -279, -225, -171, -117, -63,
|
||||
-9, 45, 98, 152, 206, 260, 314, 368 },
|
||||
/* K4 */
|
||||
{ -328, -273, -217, -161, -106, -50, 5, 61,
|
||||
116, 172, 228, 283, 339, 394, 450, 506 },
|
||||
/* K5 */
|
||||
{ -328, -282, -235, -189, -142, -96, -50, -3,
|
||||
43, 90, 136, 182, 229, 275, 322, 368 },
|
||||
/* K6 */
|
||||
{ -256, -212, -168, -123, -79, -35, 10, 54,
|
||||
98, 143, 187, 232, 276, 320, 365, 409 },
|
||||
/* K7 */
|
||||
{ -308, -260, -212, -164, -117, -69, -21, 27,
|
||||
75, 122, 170, 218, 266, 314, 361, 409 },
|
||||
/* K8 */
|
||||
{ -256, -161, -66, 29, 124, 219, 314, 409 },
|
||||
/* K9 */
|
||||
{ -256, -176, -96, -15, 65, 146, 226, 307 },
|
||||
/* K10 */
|
||||
{ -205, -132, -59, 14, 87, 160, 234, 307 },
|
||||
TI_5110_5220_LPC
|
||||
},
|
||||
/* Chirp table */
|
||||
{ 0x00, 0x03, 0x0F, 0x28, 0x4C, 0x6C, 0x71, 0x50,
|
||||
0x25, 0x26, 0x4C, 0x44, 0x1A, 0x32, 0x3B, 0x13,
|
||||
0x37, 0x1A, 0x25, 0x1F, 0x1D, 0x00, 0x00, 0x00,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0 },
|
||||
TI_LATER_CHIRP
|
||||
/* interpolation coefficients */
|
||||
{ 0, 3, 3, 3, 2, 2, 1, 1 }
|
||||
};
|
||||
|
@ -338,7 +338,7 @@ void tms5220_device::set_variant(int variant)
|
||||
{
|
||||
case TMS5220_IS_5200:
|
||||
case TMS5220_IS_CD2501ECD:
|
||||
m_coeff = &tms5200_coeff;
|
||||
m_coeff = &T0285_2501E_coeff;
|
||||
break;
|
||||
case TMS5220_IS_5220C:
|
||||
case TMS5220_IS_5220:
|
||||
|
Loading…
Reference in New Issue
Block a user