Hopefully fix all threading issues with VGMPlay.
parent
1375489a8b
commit
84e38a6213
|
@ -34,6 +34,7 @@
|
||||||
|
|
||||||
|
|
||||||
/* struct describing a single operator */
|
/* struct describing a single operator */
|
||||||
|
typedef struct YM2151 YM2151;
|
||||||
typedef struct{
|
typedef struct{
|
||||||
UINT32 phase; /* accumulated operator phase */
|
UINT32 phase; /* accumulated operator phase */
|
||||||
UINT32 freq; /* operator frequency count */
|
UINT32 freq; /* operator frequency count */
|
||||||
|
@ -83,10 +84,11 @@ typedef struct{
|
||||||
UINT32 reserved0; /**/
|
UINT32 reserved0; /**/
|
||||||
UINT32 reserved1; /**/
|
UINT32 reserved1; /**/
|
||||||
|
|
||||||
|
YM2151 * PSG;
|
||||||
} YM2151Operator;
|
} YM2151Operator;
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
struct YM2151
|
||||||
{
|
{
|
||||||
YM2151Operator oper[32]; /* the 32 operators */
|
YM2151Operator oper[32]; /* the 32 operators */
|
||||||
|
|
||||||
|
@ -124,6 +126,10 @@ typedef struct
|
||||||
UINT32 status; /* chip status (BUSY, IRQ Flags) */
|
UINT32 status; /* chip status (BUSY, IRQ Flags) */
|
||||||
UINT8 connect[8]; /* channels connections */
|
UINT8 connect[8]; /* channels connections */
|
||||||
|
|
||||||
|
signed int chanout[8];
|
||||||
|
signed int m2,c1,c2; /* Phase Modulation input for operators 2,3,4 */
|
||||||
|
signed int mem; /* one sample delay memory */
|
||||||
|
|
||||||
#ifdef USE_MAME_TIMERS
|
#ifdef USE_MAME_TIMERS
|
||||||
/* ASG 980324 -- added for tracking timers */
|
/* ASG 980324 -- added for tracking timers */
|
||||||
emu_timer *timer_A;
|
emu_timer *timer_A;
|
||||||
|
@ -175,7 +181,7 @@ typedef struct
|
||||||
//const device_config *device;
|
//const device_config *device;
|
||||||
unsigned int clock; /* chip clock in Hz (passed from 2151intf.c) */
|
unsigned int clock; /* chip clock in Hz (passed from 2151intf.c) */
|
||||||
unsigned int sampfreq; /* sampling frequency in Hz (passed from 2151intf.c) */
|
unsigned int sampfreq; /* sampling frequency in Hz (passed from 2151intf.c) */
|
||||||
} YM2151;
|
};
|
||||||
|
|
||||||
|
|
||||||
#define FREQ_SH 16 /* 16.16 fixed point (frequency calculations) */
|
#define FREQ_SH 16 /* 16.16 fixed point (frequency calculations) */
|
||||||
|
@ -487,13 +493,6 @@ static const UINT8 lfo_noise_waveform[256] = {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* these variables stay here for speedup purposes only */
|
|
||||||
static YM2151 * PSG;
|
|
||||||
static signed int chanout[8];
|
|
||||||
static signed int m2,c1,c2; /* Phase Modulation input for operators 2,3,4 */
|
|
||||||
static signed int mem; /* one sample delay memory */
|
|
||||||
|
|
||||||
|
|
||||||
/* save output as raw 16-bit sample */
|
/* save output as raw 16-bit sample */
|
||||||
// #define SAVE_SAMPLE
|
// #define SAVE_SAMPLE
|
||||||
// #define SAVE_SEPARATE_CHANNELS
|
// #define SAVE_SEPARATE_CHANNELS
|
||||||
|
@ -747,7 +746,7 @@ static void init_chip_tables(YM2151 *chip)
|
||||||
(op)->phase = 0; /* clear phase */ \
|
(op)->phase = 0; /* clear phase */ \
|
||||||
(op)->state = EG_ATT; /* KEY ON = attack */ \
|
(op)->state = EG_ATT; /* KEY ON = attack */ \
|
||||||
(op)->volume += (~(op)->volume * \
|
(op)->volume += (~(op)->volume * \
|
||||||
(eg_inc[(op)->eg_sel_ar + ((PSG->eg_cnt>>(op)->eg_sh_ar)&7)]) \
|
(eg_inc[(op)->eg_sel_ar + (((op)->PSG->eg_cnt>>(op)->eg_sh_ar)&7)]) \
|
||||||
) >>4; \
|
) >>4; \
|
||||||
if ((op)->volume <= MIN_ATT_INDEX) \
|
if ((op)->volume <= MIN_ATT_INDEX) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -876,6 +875,7 @@ static TIMER_CALLBACK( timer_callback_chip_busy )
|
||||||
|
|
||||||
INLINE void set_connect( YM2151Operator *om1, int cha, int v)
|
INLINE void set_connect( YM2151Operator *om1, int cha, int v)
|
||||||
{
|
{
|
||||||
|
YM2151 *PSG = om1->PSG;
|
||||||
YM2151Operator *om2 = om1+1;
|
YM2151Operator *om2 = om1+1;
|
||||||
YM2151Operator *oc1 = om1+2;
|
YM2151Operator *oc1 = om1+2;
|
||||||
|
|
||||||
|
@ -887,47 +887,47 @@ INLINE void set_connect( YM2151Operator *om1, int cha, int v)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
/* M1---C1---MEM---M2---C2---OUT */
|
/* M1---C1---MEM---M2---C2---OUT */
|
||||||
om1->connect = &c1;
|
om1->connect = &PSG->c1;
|
||||||
oc1->connect = &mem;
|
oc1->connect = &PSG->mem;
|
||||||
om2->connect = &c2;
|
om2->connect = &PSG->c2;
|
||||||
om1->mem_connect = &m2;
|
om1->mem_connect = &PSG->m2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
/* M1------+-MEM---M2---C2---OUT */
|
/* M1------+-MEM---M2---C2---OUT */
|
||||||
/* C1-+ */
|
/* C1-+ */
|
||||||
om1->connect = &mem;
|
om1->connect = &PSG->mem;
|
||||||
oc1->connect = &mem;
|
oc1->connect = &PSG->mem;
|
||||||
om2->connect = &c2;
|
om2->connect = &PSG->c2;
|
||||||
om1->mem_connect = &m2;
|
om1->mem_connect = &PSG->m2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
/* M1-----------------+-C2---OUT */
|
/* M1-----------------+-C2---OUT */
|
||||||
/* C1---MEM---M2-+ */
|
/* C1---MEM---M2-+ */
|
||||||
om1->connect = &c2;
|
om1->connect = &PSG->c2;
|
||||||
oc1->connect = &mem;
|
oc1->connect = &PSG->mem;
|
||||||
om2->connect = &c2;
|
om2->connect = &PSG->c2;
|
||||||
om1->mem_connect = &m2;
|
om1->mem_connect = &PSG->m2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
/* M1---C1---MEM------+-C2---OUT */
|
/* M1---C1---MEM------+-C2---OUT */
|
||||||
/* M2-+ */
|
/* M2-+ */
|
||||||
om1->connect = &c1;
|
om1->connect = &PSG->c1;
|
||||||
oc1->connect = &mem;
|
oc1->connect = &PSG->mem;
|
||||||
om2->connect = &c2;
|
om2->connect = &PSG->c2;
|
||||||
om1->mem_connect = &c2;
|
om1->mem_connect = &PSG->c2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
/* M1---C1-+-OUT */
|
/* M1---C1-+-OUT */
|
||||||
/* M2---C2-+ */
|
/* M2---C2-+ */
|
||||||
/* MEM: not used */
|
/* MEM: not used */
|
||||||
om1->connect = &c1;
|
om1->connect = &PSG->c1;
|
||||||
oc1->connect = &chanout[cha];
|
oc1->connect = &PSG->chanout[cha];
|
||||||
om2->connect = &c2;
|
om2->connect = &PSG->c2;
|
||||||
om1->mem_connect = &mem; /* store it anywhere where it will not be used */
|
om1->mem_connect = &PSG->mem; /* store it anywhere where it will not be used */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
|
@ -935,9 +935,9 @@ INLINE void set_connect( YM2151Operator *om1, int cha, int v)
|
||||||
/* M1-+-MEM---M2-+-OUT */
|
/* M1-+-MEM---M2-+-OUT */
|
||||||
/* +----C2----+ */
|
/* +----C2----+ */
|
||||||
om1->connect = 0; /* special mark */
|
om1->connect = 0; /* special mark */
|
||||||
oc1->connect = &chanout[cha];
|
oc1->connect = &PSG->chanout[cha];
|
||||||
om2->connect = &chanout[cha];
|
om2->connect = &PSG->chanout[cha];
|
||||||
om1->mem_connect = &m2;
|
om1->mem_connect = &PSG->m2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
|
@ -945,10 +945,10 @@ INLINE void set_connect( YM2151Operator *om1, int cha, int v)
|
||||||
/* M2-+-OUT */
|
/* M2-+-OUT */
|
||||||
/* C2-+ */
|
/* C2-+ */
|
||||||
/* MEM: not used */
|
/* MEM: not used */
|
||||||
om1->connect = &c1;
|
om1->connect = &PSG->c1;
|
||||||
oc1->connect = &chanout[cha];
|
oc1->connect = &PSG->chanout[cha];
|
||||||
om2->connect = &chanout[cha];
|
om2->connect = &PSG->chanout[cha];
|
||||||
om1->mem_connect = &mem; /* store it anywhere where it will not be used */
|
om1->mem_connect = &PSG->mem; /* store it anywhere where it will not be used */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
|
@ -957,10 +957,10 @@ INLINE void set_connect( YM2151Operator *om1, int cha, int v)
|
||||||
/* M2-+ */
|
/* M2-+ */
|
||||||
/* C2-+ */
|
/* C2-+ */
|
||||||
/* MEM: not used*/
|
/* MEM: not used*/
|
||||||
om1->connect = &chanout[cha];
|
om1->connect = &PSG->chanout[cha];
|
||||||
oc1->connect = &chanout[cha];
|
oc1->connect = &PSG->chanout[cha];
|
||||||
om2->connect = &chanout[cha];
|
om2->connect = &PSG->chanout[cha];
|
||||||
om1->mem_connect = &mem; /* store it anywhere where it will not be used */
|
om1->mem_connect = &PSG->mem; /* store it anywhere where it will not be used */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1089,7 +1089,6 @@ void ym2151_write_reg(void *_chip, int r, int v)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x08:
|
case 0x08:
|
||||||
PSG = chip; /* PSG is used in KEY_ON macro */
|
|
||||||
envelope_KONKOFF(&chip->oper[ (v&7)*4 ], v );
|
envelope_KONKOFF(&chip->oper[ (v&7)*4 ], v );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1573,6 +1572,9 @@ void * ym2151_init(int clock, int rate)
|
||||||
logerror("Could not create file 2151_.cym\n");
|
logerror("Could not create file 2151_.cym\n");
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
for (chn = 0; chn < 32; chn ++)
|
||||||
|
PSG->oper[chn].PSG = PSG;
|
||||||
|
|
||||||
return PSG;
|
return PSG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1707,7 +1709,7 @@ INLINE signed int op_calc1(YM2151Operator * OP, unsigned int env, signed int pm)
|
||||||
|
|
||||||
#define volume_calc(OP) ((OP)->tl + ((UINT32)(OP)->volume) + (AM & (OP)->AMmask))
|
#define volume_calc(OP) ((OP)->tl + ((UINT32)(OP)->volume) + (AM & (OP)->AMmask))
|
||||||
|
|
||||||
INLINE void chan_calc(unsigned int chan)
|
INLINE void chan_calc(YM2151 *PSG, unsigned int chan)
|
||||||
{
|
{
|
||||||
YM2151Operator *op;
|
YM2151Operator *op;
|
||||||
unsigned int env;
|
unsigned int env;
|
||||||
|
@ -1716,7 +1718,7 @@ INLINE void chan_calc(unsigned int chan)
|
||||||
if (PSG->Muted[chan])
|
if (PSG->Muted[chan])
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m2 = c1 = c2 = mem = 0;
|
PSG->m2 = PSG->c1 = PSG->c2 = PSG->mem = 0;
|
||||||
op = &PSG->oper[chan*4]; /* M1 */
|
op = &PSG->oper[chan*4]; /* M1 */
|
||||||
|
|
||||||
*op->mem_connect = op->mem_value; /* restore delayed sample (MEM) value to m2 or c2 */
|
*op->mem_connect = op->mem_value; /* restore delayed sample (MEM) value to m2 or c2 */
|
||||||
|
@ -1730,7 +1732,7 @@ INLINE void chan_calc(unsigned int chan)
|
||||||
|
|
||||||
if (!op->connect)
|
if (!op->connect)
|
||||||
/* algorithm 5 */
|
/* algorithm 5 */
|
||||||
mem = c1 = c2 = op->fb_out_prev;
|
PSG->mem = PSG->c1 = PSG->c2 = op->fb_out_prev;
|
||||||
else
|
else
|
||||||
/* other algorithms */
|
/* other algorithms */
|
||||||
*op->connect = op->fb_out_prev;
|
*op->connect = op->fb_out_prev;
|
||||||
|
@ -1746,22 +1748,22 @@ INLINE void chan_calc(unsigned int chan)
|
||||||
|
|
||||||
env = volume_calc(op+1); /* M2 */
|
env = volume_calc(op+1); /* M2 */
|
||||||
if (env < ENV_QUIET)
|
if (env < ENV_QUIET)
|
||||||
*(op+1)->connect += op_calc(op+1, env, m2);
|
*(op+1)->connect += op_calc(op+1, env, PSG->m2);
|
||||||
|
|
||||||
env = volume_calc(op+2); /* C1 */
|
env = volume_calc(op+2); /* C1 */
|
||||||
if (env < ENV_QUIET)
|
if (env < ENV_QUIET)
|
||||||
*(op+2)->connect += op_calc(op+2, env, c1);
|
*(op+2)->connect += op_calc(op+2, env, PSG->c1);
|
||||||
|
|
||||||
env = volume_calc(op+3); /* C2 */
|
env = volume_calc(op+3); /* C2 */
|
||||||
if (env < ENV_QUIET)
|
if (env < ENV_QUIET)
|
||||||
chanout[chan] += op_calc(op+3, env, c2);
|
PSG->chanout[chan] += op_calc(op+3, env, PSG->c2);
|
||||||
if (chanout[chan] > +8192) chanout[chan] = +8192;
|
if (PSG->chanout[chan] > +8192) PSG->chanout[chan] = +8192;
|
||||||
else if (chanout[chan] < -8192) chanout[chan] = -8192;
|
else if (PSG->chanout[chan] < -8192) PSG->chanout[chan] = -8192;
|
||||||
|
|
||||||
/* M1 */
|
/* M1 */
|
||||||
op->mem_value = mem;
|
op->mem_value = PSG->mem;
|
||||||
}
|
}
|
||||||
INLINE void chan7_calc(void)
|
INLINE void chan7_calc(YM2151 *PSG)
|
||||||
{
|
{
|
||||||
YM2151Operator *op;
|
YM2151Operator *op;
|
||||||
unsigned int env;
|
unsigned int env;
|
||||||
|
@ -1770,7 +1772,7 @@ INLINE void chan7_calc(void)
|
||||||
if (PSG->Muted[7])
|
if (PSG->Muted[7])
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m2 = c1 = c2 = mem = 0;
|
PSG->m2 = PSG->c1 = PSG->c2 = PSG->mem = 0;
|
||||||
op = &PSG->oper[7*4]; /* M1 */
|
op = &PSG->oper[7*4]; /* M1 */
|
||||||
|
|
||||||
*op->mem_connect = op->mem_value; /* restore delayed sample (MEM) value to m2 or c2 */
|
*op->mem_connect = op->mem_value; /* restore delayed sample (MEM) value to m2 or c2 */
|
||||||
|
@ -1784,7 +1786,7 @@ INLINE void chan7_calc(void)
|
||||||
|
|
||||||
if (!op->connect)
|
if (!op->connect)
|
||||||
/* algorithm 5 */
|
/* algorithm 5 */
|
||||||
mem = c1 = c2 = op->fb_out_prev;
|
PSG->mem = PSG->c1 = PSG->c2 = op->fb_out_prev;
|
||||||
else
|
else
|
||||||
/* other algorithms */
|
/* other algorithms */
|
||||||
*op->connect = op->fb_out_prev;
|
*op->connect = op->fb_out_prev;
|
||||||
|
@ -1800,11 +1802,11 @@ INLINE void chan7_calc(void)
|
||||||
|
|
||||||
env = volume_calc(op+1); /* M2 */
|
env = volume_calc(op+1); /* M2 */
|
||||||
if (env < ENV_QUIET)
|
if (env < ENV_QUIET)
|
||||||
*(op+1)->connect += op_calc(op+1, env, m2);
|
*(op+1)->connect += op_calc(op+1, env, PSG->m2);
|
||||||
|
|
||||||
env = volume_calc(op+2); /* C1 */
|
env = volume_calc(op+2); /* C1 */
|
||||||
if (env < ENV_QUIET)
|
if (env < ENV_QUIET)
|
||||||
*(op+2)->connect += op_calc(op+2, env, c1);
|
*(op+2)->connect += op_calc(op+2, env, PSG->c1);
|
||||||
|
|
||||||
env = volume_calc(op+3); /* C2 */
|
env = volume_calc(op+3); /* C2 */
|
||||||
if (PSG->noise & 0x80)
|
if (PSG->noise & 0x80)
|
||||||
|
@ -1814,17 +1816,17 @@ INLINE void chan7_calc(void)
|
||||||
noiseout = 0;
|
noiseout = 0;
|
||||||
if (env < 0x3ff)
|
if (env < 0x3ff)
|
||||||
noiseout = (env ^ 0x3ff) * 2; /* range of the YM2151 noise output is -2044 to 2040 */
|
noiseout = (env ^ 0x3ff) * 2; /* range of the YM2151 noise output is -2044 to 2040 */
|
||||||
chanout[7] += ((PSG->noise_rng&0x10000) ? noiseout: -noiseout); /* bit 16 -> output */
|
PSG->chanout[7] += ((PSG->noise_rng&0x10000) ? noiseout: -noiseout); /* bit 16 -> output */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (env < ENV_QUIET)
|
if (env < ENV_QUIET)
|
||||||
chanout[7] += op_calc(op+3, env, c2);
|
PSG->chanout[7] += op_calc(op+3, env, PSG->c2);
|
||||||
}
|
}
|
||||||
if (chanout[7] > +8192) chanout[7] = +8192;
|
if (PSG->chanout[7] > +8192) PSG->chanout[7] = +8192;
|
||||||
else if (chanout[7] < -8192) chanout[7] = -8192;
|
else if (PSG->chanout[7] < -8192) PSG->chanout[7] = -8192;
|
||||||
/* M1 */
|
/* M1 */
|
||||||
op->mem_value = mem;
|
op->mem_value = PSG->mem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2036,7 +2038,7 @@ rate 11 1 |
|
||||||
--
|
--
|
||||||
*/
|
*/
|
||||||
|
|
||||||
INLINE void advance_eg(void)
|
INLINE void advance_eg(YM2151 *PSG)
|
||||||
{
|
{
|
||||||
YM2151Operator *op;
|
YM2151Operator *op;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -2120,7 +2122,7 @@ INLINE void advance_eg(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
INLINE void advance(void)
|
INLINE void advance(YM2151 *PSG)
|
||||||
{
|
{
|
||||||
YM2151Operator *op;
|
YM2151Operator *op;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -2352,11 +2354,11 @@ INLINE signed int acc_calc(signed int value)
|
||||||
#else /*STEREO*/
|
#else /*STEREO*/
|
||||||
#ifdef SAVE_SEPARATE_CHANNELS
|
#ifdef SAVE_SEPARATE_CHANNELS
|
||||||
#define SAVE_SINGLE_CHANNEL(j) \
|
#define SAVE_SINGLE_CHANNEL(j) \
|
||||||
{ signed int pom = -(chanout[j] & PSG->pan[j*2]); \
|
{ signed int pom = -(PSG->chanout[j] & PSG->pan[j*2]); \
|
||||||
if (pom > 32767) pom = 32767; else if (pom < -32768) pom = -32768; \
|
if (pom > 32767) pom = 32767; else if (pom < -32768) pom = -32768; \
|
||||||
fputc((unsigned short)pom&0xff,sample[j]); \
|
fputc((unsigned short)pom&0xff,sample[j]); \
|
||||||
fputc(((unsigned short)pom>>8)&0xff,sample[j]); \
|
fputc(((unsigned short)pom>>8)&0xff,sample[j]); \
|
||||||
pom = -(chanout[j] & PSG->pan[j*2+1]); \
|
pom = -(PSG->chanout[j] & PSG->pan[j*2+1]); \
|
||||||
if (pom > 32767) pom = 32767; else if (pom < -32768) pom = -32768; \
|
if (pom > 32767) pom = 32767; else if (pom < -32768) pom = -32768; \
|
||||||
fputc((unsigned short)pom&0xff,sample[j]); \
|
fputc((unsigned short)pom&0xff,sample[j]); \
|
||||||
fputc(((unsigned short)pom>>8)&0xff,sample[j]); \
|
fputc(((unsigned short)pom>>8)&0xff,sample[j]); \
|
||||||
|
@ -2407,6 +2409,7 @@ void ym2151_update_one(void *chip, SAMP **buffers, int length)
|
||||||
int i; // , chn;
|
int i; // , chn;
|
||||||
signed int outl,outr;
|
signed int outl,outr;
|
||||||
SAMP *bufL, *bufR;
|
SAMP *bufL, *bufR;
|
||||||
|
YM2151 *PSG;
|
||||||
|
|
||||||
bufL = buffers[0];
|
bufL = buffers[0];
|
||||||
bufR = buffers[1];
|
bufR = buffers[1];
|
||||||
|
@ -2434,50 +2437,50 @@ void ym2151_update_one(void *chip, SAMP **buffers, int length)
|
||||||
|
|
||||||
for (i=0; i<length; i++)
|
for (i=0; i<length; i++)
|
||||||
{
|
{
|
||||||
advance_eg();
|
advance_eg(PSG);
|
||||||
|
|
||||||
chanout[0] = 0;
|
PSG->chanout[0] = 0;
|
||||||
chanout[1] = 0;
|
PSG->chanout[1] = 0;
|
||||||
chanout[2] = 0;
|
PSG->chanout[2] = 0;
|
||||||
chanout[3] = 0;
|
PSG->chanout[3] = 0;
|
||||||
chanout[4] = 0;
|
PSG->chanout[4] = 0;
|
||||||
chanout[5] = 0;
|
PSG->chanout[5] = 0;
|
||||||
chanout[6] = 0;
|
PSG->chanout[6] = 0;
|
||||||
chanout[7] = 0;
|
PSG->chanout[7] = 0;
|
||||||
|
|
||||||
chan_calc(0);
|
chan_calc(PSG, 0);
|
||||||
SAVE_SINGLE_CHANNEL(0)
|
SAVE_SINGLE_CHANNEL(0)
|
||||||
chan_calc(1);
|
chan_calc(PSG, 1);
|
||||||
SAVE_SINGLE_CHANNEL(1)
|
SAVE_SINGLE_CHANNEL(1)
|
||||||
chan_calc(2);
|
chan_calc(PSG, 2);
|
||||||
SAVE_SINGLE_CHANNEL(2)
|
SAVE_SINGLE_CHANNEL(2)
|
||||||
chan_calc(3);
|
chan_calc(PSG, 3);
|
||||||
SAVE_SINGLE_CHANNEL(3)
|
SAVE_SINGLE_CHANNEL(3)
|
||||||
chan_calc(4);
|
chan_calc(PSG, 4);
|
||||||
SAVE_SINGLE_CHANNEL(4)
|
SAVE_SINGLE_CHANNEL(4)
|
||||||
chan_calc(5);
|
chan_calc(PSG, 5);
|
||||||
SAVE_SINGLE_CHANNEL(5)
|
SAVE_SINGLE_CHANNEL(5)
|
||||||
chan_calc(6);
|
chan_calc(PSG, 6);
|
||||||
SAVE_SINGLE_CHANNEL(6)
|
SAVE_SINGLE_CHANNEL(6)
|
||||||
chan7_calc();
|
chan7_calc(PSG);
|
||||||
SAVE_SINGLE_CHANNEL(7)
|
SAVE_SINGLE_CHANNEL(7)
|
||||||
|
|
||||||
outl = chanout[0] & PSG->pan[0];
|
outl = PSG->chanout[0] & PSG->pan[0];
|
||||||
outr = chanout[0] & PSG->pan[1];
|
outr = PSG->chanout[0] & PSG->pan[1];
|
||||||
outl += (chanout[1] & PSG->pan[2]);
|
outl += (PSG->chanout[1] & PSG->pan[2]);
|
||||||
outr += (chanout[1] & PSG->pan[3]);
|
outr += (PSG->chanout[1] & PSG->pan[3]);
|
||||||
outl += (chanout[2] & PSG->pan[4]);
|
outl += (PSG->chanout[2] & PSG->pan[4]);
|
||||||
outr += (chanout[2] & PSG->pan[5]);
|
outr += (PSG->chanout[2] & PSG->pan[5]);
|
||||||
outl += (chanout[3] & PSG->pan[6]);
|
outl += (PSG->chanout[3] & PSG->pan[6]);
|
||||||
outr += (chanout[3] & PSG->pan[7]);
|
outr += (PSG->chanout[3] & PSG->pan[7]);
|
||||||
outl += (chanout[4] & PSG->pan[8]);
|
outl += (PSG->chanout[4] & PSG->pan[8]);
|
||||||
outr += (chanout[4] & PSG->pan[9]);
|
outr += (PSG->chanout[4] & PSG->pan[9]);
|
||||||
outl += (chanout[5] & PSG->pan[10]);
|
outl += (PSG->chanout[5] & PSG->pan[10]);
|
||||||
outr += (chanout[5] & PSG->pan[11]);
|
outr += (PSG->chanout[5] & PSG->pan[11]);
|
||||||
outl += (chanout[6] & PSG->pan[12]);
|
outl += (PSG->chanout[6] & PSG->pan[12]);
|
||||||
outr += (chanout[6] & PSG->pan[13]);
|
outr += (PSG->chanout[6] & PSG->pan[13]);
|
||||||
outl += (chanout[7] & PSG->pan[14]);
|
outl += (PSG->chanout[7] & PSG->pan[14]);
|
||||||
outr += (chanout[7] & PSG->pan[15]);
|
outr += (PSG->chanout[7] & PSG->pan[15]);
|
||||||
|
|
||||||
outl >>= FINAL_SH;
|
outl >>= FINAL_SH;
|
||||||
outr >>= FINAL_SH;
|
outr >>= FINAL_SH;
|
||||||
|
@ -2511,7 +2514,7 @@ void ym2151_update_one(void *chip, SAMP **buffers, int length)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
advance();
|
advance(PSG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue