// license:BSD-3-Clause
// copyright-holders:Zsolt Vasvari
/*
* Pulsar sound routines
*
* TODO: change heart rate based on bit 7 of Port 1
*
*/
#include "emu.h"
#include "includes/vicdual.h"
/* output port 0x01 definitions - sound effect drive outputs */
#define OUT_PORT_1_CLANG 0x01
#define OUT_PORT_1_KEY 0x02
#define OUT_PORT_1_ALIENHIT 0x04
#define OUT_PORT_1_PHIT 0x08
#define OUT_PORT_1_ASHOOT 0x10
#define OUT_PORT_1_PSHOOT 0x20
#define OUT_PORT_1_BONUS 0x40
#define OUT_PORT_1_HBEAT_RATE 0x80 /* currently not used */
/* output port 0x02 definitions - sound effect drive outputs */
#define OUT_PORT_2_SIZZLE 0x01
#define OUT_PORT_2_GATE 0x02
#define OUT_PORT_2_BIRTH 0x04
#define OUT_PORT_2_HBEAT 0x08
#define OUT_PORT_2_MOVMAZE 0x10
#define PLAY(samp,id,loop) samp->start( id, id, loop )
#define STOP(samp,id) samp->stop( id )
/* sample file names */
static const char *const pulsar_sample_names[] =
{
"*pulsar",
"clang",
"key",
"alienhit",
"phit",
"ashoot",
"pshoot",
"bonus",
"sizzle",
"gate",
"birth",
"hbeat",
"movmaze",
nullptr
};
/* sample IDs - must match sample file name table above */
enum
{
SND_CLANG = 0,
SND_KEY,
SND_ALIENHIT,
SND_PHIT,
SND_ASHOOT,
SND_PSHOOT,
SND_BONUS,
SND_SIZZLE,
SND_GATE,
SND_BIRTH,
SND_HBEAT,
SND_MOVMAZE
};
void vicdual_state::pulsar_audio_1_w(uint8_t data)
{
int bitsChanged;
//int bitsGoneHigh;
int bitsGoneLow;
bitsChanged = m_port1State ^ data;
//bitsGoneHigh = bitsChanged & data;
bitsGoneLow = bitsChanged & ~data;
m_port1State = data;
if ( bitsGoneLow & OUT_PORT_1_CLANG )
{
PLAY( m_samples, SND_CLANG, 0 );
}
if ( bitsGoneLow & OUT_PORT_1_KEY )
{
PLAY( m_samples, SND_KEY, 0 );
}
if ( bitsGoneLow & OUT_PORT_1_ALIENHIT )
{
PLAY( m_samples, SND_ALIENHIT, 0 );
}
if ( bitsGoneLow & OUT_PORT_1_PHIT )
{
PLAY( m_samples, SND_PHIT, 0 );
}
if ( bitsGoneLow & OUT_PORT_1_ASHOOT )
{
PLAY( m_samples, SND_ASHOOT, 0 );
}
if ( bitsGoneLow & OUT_PORT_1_PSHOOT )
{
PLAY( m_samples, SND_PSHOOT, 0 );
}
if ( bitsGoneLow & OUT_PORT_1_BONUS )
{
PLAY( m_samples, SND_BONUS, 0 );
}
}
void vicdual_state::pulsar_audio_2_w(uint8_t data)
{
int bitsChanged;
int bitsGoneHigh;
int bitsGoneLow;
bitsChanged = m_port2State ^ data;
bitsGoneHigh = bitsChanged & data;
bitsGoneLow = bitsChanged & ~data;
m_port2State = data;
if ( bitsGoneLow & OUT_PORT_2_SIZZLE )
{
PLAY( m_samples, SND_SIZZLE, 0 );
}
if ( bitsGoneLow & OUT_PORT_2_GATE )
{
m_samples->start(SND_CLANG, SND_GATE);
}
if ( bitsGoneHigh & OUT_PORT_2_GATE )
{
STOP( m_samples, SND_CLANG );
}
if ( bitsGoneLow & OUT_PORT_2_BIRTH )
{
PLAY( m_samples, SND_BIRTH, 0 );
}
if ( bitsGoneLow & OUT_PORT_2_HBEAT )
{
PLAY( m_samples, SND_HBEAT, 1 );
}
if ( bitsGoneHigh & OUT_PORT_2_HBEAT )
{
STOP( m_samples, SND_HBEAT );
}
if ( bitsGoneLow & OUT_PORT_2_MOVMAZE )
{
PLAY( m_samples, SND_MOVMAZE, 1 );
}
if ( bitsGoneHigh & OUT_PORT_2_MOVMAZE )
{
STOP( m_samples, SND_MOVMAZE );
}
}
void vicdual_state::pulsar_audio(machine_config &config)
{
/* samples */
SAMPLES(config, m_samples);
m_samples->set_channels(12);
m_samples->set_samples_names(pulsar_sample_names);
m_samples->add_route(ALL_OUTPUTS, "mono", 0.5);
}