Added support to c6280.cpp for volume and left/right selection for each route. Updated necessary drivers to support.
This commit is contained in:
parent
fc7a55b5c1
commit
c63f55c3d0
|
@ -519,6 +519,8 @@ static INT32 CommonInit(int type)
|
||||||
vce_palette_init(DrvPalette);
|
vce_palette_init(DrvPalette);
|
||||||
|
|
||||||
c6280_init(3579545, 0);
|
c6280_init(3579545, 0);
|
||||||
|
c6280_set_route(BURN_SND_C6280_ROUTE_1, 1.00, BURN_SND_ROUTE_LEFT);
|
||||||
|
c6280_set_route(BURN_SND_C6280_ROUTE_2, 1.00, BURN_SND_ROUTE_RIGHT);
|
||||||
|
|
||||||
GenericTilesInit();
|
GenericTilesInit();
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,7 @@
|
||||||
|
|
||||||
#include "burnint.h"
|
#include "burnint.h"
|
||||||
#include "h6280_intf.h"
|
#include "h6280_intf.h"
|
||||||
|
#include "c6280.h"
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -81,6 +82,8 @@ typedef struct {
|
||||||
UINT32 noise_freq_tab[32];
|
UINT32 noise_freq_tab[32];
|
||||||
UINT32 wave_freq_tab[4096];
|
UINT32 wave_freq_tab[4096];
|
||||||
INT32 bAdd;
|
INT32 bAdd;
|
||||||
|
double gain[2];
|
||||||
|
INT32 output_dir[2];
|
||||||
} c6280_t;
|
} c6280_t;
|
||||||
|
|
||||||
static INT16 *stream_buffer = NULL;
|
static INT16 *stream_buffer = NULL;
|
||||||
|
@ -152,6 +155,10 @@ void c6280_init(double clk, INT32 bAdd)
|
||||||
p->volume_table[31] = 0;
|
p->volume_table[31] = 0;
|
||||||
|
|
||||||
p->bAdd = bAdd;
|
p->bAdd = bAdd;
|
||||||
|
p->gain[BURN_SND_C6280_ROUTE_1] = 1.00;
|
||||||
|
p->gain[BURN_SND_C6280_ROUTE_2] = 1.00;
|
||||||
|
p->output_dir[BURN_SND_C6280_ROUTE_1] = BURN_SND_ROUTE_LEFT;
|
||||||
|
p->output_dir[BURN_SND_C6280_ROUTE_2] = BURN_SND_ROUTE_RIGHT;
|
||||||
|
|
||||||
stream_buffer = (INT16*)BurnMalloc(nBurnSoundLen * 2 * sizeof(INT16));
|
stream_buffer = (INT16*)BurnMalloc(nBurnSoundLen * 2 * sizeof(INT16));
|
||||||
|
|
||||||
|
@ -163,6 +170,14 @@ void c6280_init(double clk, INT32 bAdd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void c6280_set_route(INT32 nIndex, double nVolume, INT32 nRouteDir)
|
||||||
|
{
|
||||||
|
c6280_t *p = &chip[0];
|
||||||
|
|
||||||
|
p->gain[nIndex] = nVolume;
|
||||||
|
p->output_dir[nIndex] = nRouteDir;
|
||||||
|
}
|
||||||
|
|
||||||
void c6280_exit()
|
void c6280_exit()
|
||||||
{
|
{
|
||||||
if (stream_buffer) {
|
if (stream_buffer) {
|
||||||
|
@ -367,11 +382,28 @@ void c6280_update(INT16 *pBuffer, INT32 samples)
|
||||||
c6280_stream_update();
|
c6280_stream_update();
|
||||||
|
|
||||||
if (!p->bAdd) {
|
if (!p->bAdd) {
|
||||||
memset (pBuffer, 0, samples * sizeof(short) * 2); // 16-bit * 2 channels
|
memset (pBuffer, 0, samples * sizeof(INT16) * 2); // 16-bit * 2 channels
|
||||||
}
|
}
|
||||||
|
|
||||||
for (INT32 i = 0; i < samples*2; i++) {
|
for (INT32 i = 0; i < samples; i++) {
|
||||||
pBuffer[i] += stream_buffer[i];
|
INT32 nLeftSample = 0, nRightSample = 0;
|
||||||
|
|
||||||
|
if ((p->output_dir[BURN_SND_C6280_ROUTE_1] & BURN_SND_ROUTE_LEFT) == BURN_SND_ROUTE_LEFT) {
|
||||||
|
nLeftSample += (INT32)(stream_buffer[(i << 1) + 0] * p->gain[BURN_SND_C6280_ROUTE_1]);
|
||||||
|
}
|
||||||
|
if ((p->output_dir[BURN_SND_C6280_ROUTE_1] & BURN_SND_ROUTE_RIGHT) == BURN_SND_ROUTE_RIGHT) {
|
||||||
|
nRightSample += (INT32)(stream_buffer[(i << 1) + 0] * p->gain[BURN_SND_C6280_ROUTE_1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((p->output_dir[BURN_SND_C6280_ROUTE_2] & BURN_SND_ROUTE_LEFT) == BURN_SND_ROUTE_LEFT) {
|
||||||
|
nLeftSample += (INT32)(stream_buffer[(i << 1) + 1] * p->gain[BURN_SND_C6280_ROUTE_2]);
|
||||||
|
}
|
||||||
|
if ((p->output_dir[BURN_SND_C6280_ROUTE_2] & BURN_SND_ROUTE_RIGHT) == BURN_SND_ROUTE_RIGHT) {
|
||||||
|
nRightSample += (INT32)(stream_buffer[(i << 1) + 1] * p->gain[BURN_SND_C6280_ROUTE_2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
pBuffer[(i << 1) + 0] = BURN_SND_CLIP(nLeftSample);
|
||||||
|
pBuffer[(i << 1) + 1] = BURN_SND_CLIP(nRightSample);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
|
|
||||||
void c6280_init(double clk, INT32 bAdd);
|
void c6280_init(double clk, INT32 bAdd);
|
||||||
|
void c6280_set_route(INT32 nIndex, double nVolume, INT32 nRouteDir);
|
||||||
void c6280_exit();
|
void c6280_exit();
|
||||||
|
|
||||||
void c6280_reset();
|
void c6280_reset();
|
||||||
|
@ -10,3 +11,10 @@ void c6280_write(UINT8 offset, UINT8 data);
|
||||||
UINT8 c6280_read();
|
UINT8 c6280_read();
|
||||||
|
|
||||||
INT32 c6280_scan(INT32 nAction, INT32 *pnMin);
|
INT32 c6280_scan(INT32 nAction, INT32 *pnMin);
|
||||||
|
|
||||||
|
#define BURN_SND_C6280_ROUTE_1 0
|
||||||
|
#define BURN_SND_C6280_ROUTE_2 1
|
||||||
|
|
||||||
|
#define c6280_set_all_routes(v, d) \
|
||||||
|
c6280_set_route(BURN_SND_C6280_ROUTE_1, v, d); \
|
||||||
|
c6280_set_route(BURN_SND_C6280_ROUTE_2, v, d);
|
||||||
|
|
Loading…
Reference in New Issue