Improved SN76477 interface. [Curt Coder]

This commit is contained in:
Curt Coder 2011-12-17 13:46:39 +00:00
parent 9f460844d6
commit 72fcf4d23e
2 changed files with 32 additions and 32 deletions

View File

@ -68,7 +68,7 @@
#define LOG(n,x) do { if (VERBOSE >= (n)) logerror x; } while (0)
#define CHECK_CHIP_NUM assert(sn != NULL)
#define CHECK_CHIP_NUM_AND_BOOLEAN CHECK_CHIP_NUM; assert((data & 0x01) == data)
#define CHECK_CHIP_NUM_AND_BOOLEAN CHECK_CHIP_NUM; assert((state & 0x01) == state)
#define CHECK_CHIP_NUM_AND_POSITIVE CHECK_CHIP_NUM; assert(data >= 0.0)
#define CHECK_CHIP_NUM_AND_VOLTAGE CHECK_CHIP_NUM; assert((data >= 0.0) && (data <= 5.0))
#define CHECK_CHIP_NUM_AND_CAP_VOLTAGE CHECK_CHIP_NUM; assert(((data >= 0.0) && (data <= 5.0)) || (data == SN76477_EXTERNAL_VOLTAGE_DISCONNECT))
@ -999,14 +999,14 @@ static void SN76477_test_enable_w(sn76477_state *sn, UINT32 data)
}
void sn76477_enable_w(device_t *device, UINT32 data)
WRITE_LINE_DEVICE_HANDLER( sn76477_enable_w )
{
#if TEST_MODE == 0
sn76477_state *sn = get_safe_token(device);
CHECK_CHIP_NUM_AND_BOOLEAN;
SN76477_test_enable_w(sn, data);
SN76477_test_enable_w(sn, state);
#endif
}
@ -1024,18 +1024,18 @@ static void _SN76477_mixer_a_w(sn76477_state *sn, UINT32 data)
}
void sn76477_mixer_a_w(device_t *device, UINT32 data)
WRITE_LINE_DEVICE_HANDLER( sn76477_mixer_a_w )
{
#if TEST_MODE == 0
sn76477_state *sn = get_safe_token(device);
CHECK_CHIP_NUM_AND_BOOLEAN;
if (data != ((sn->mixer_mode >> 0) & 0x01))
if (state != ((sn->mixer_mode >> 0) & 0x01))
{
sn->channel->update();
_SN76477_mixer_a_w(sn, data);
_SN76477_mixer_a_w(sn, state);
log_mixer_mode(sn);
}
@ -1049,18 +1049,18 @@ static void _SN76477_mixer_b_w(sn76477_state *sn, UINT32 data)
}
void sn76477_mixer_b_w(device_t *device, UINT32 data)
WRITE_LINE_DEVICE_HANDLER( sn76477_mixer_b_w )
{
#if TEST_MODE == 0
sn76477_state *sn = get_safe_token(device);
CHECK_CHIP_NUM_AND_BOOLEAN;
if (data != ((sn->mixer_mode >> 1) & 0x01))
if (state != ((sn->mixer_mode >> 1) & 0x01))
{
sn->channel->update();
_SN76477_mixer_b_w(sn, data);
_SN76477_mixer_b_w(sn, state);
log_mixer_mode(sn);
}
@ -1074,18 +1074,18 @@ static void _SN76477_mixer_c_w(sn76477_state *sn, UINT32 data)
}
void sn76477_mixer_c_w(device_t *device, UINT32 data)
WRITE_LINE_DEVICE_HANDLER( sn76477_mixer_c_w )
{
#if TEST_MODE == 0
sn76477_state *sn = get_safe_token(device);
CHECK_CHIP_NUM_AND_BOOLEAN;
if (data != ((sn->mixer_mode >> 2) & 0x01))
if (state != ((sn->mixer_mode >> 2) & 0x01))
{
sn->channel->update();
_SN76477_mixer_c_w(sn, data);
_SN76477_mixer_c_w(sn, state);
log_mixer_mode(sn);
}
@ -1106,18 +1106,18 @@ static void _SN76477_envelope_1_w(sn76477_state *sn, UINT32 data)
}
void sn76477_envelope_1_w(device_t *device, UINT32 data)
WRITE_LINE_DEVICE_HANDLER( sn76477_envelope_1_w )
{
#if TEST_MODE == 0
sn76477_state *sn = get_safe_token(device);
CHECK_CHIP_NUM_AND_BOOLEAN;
if (data != ((sn->envelope_mode >> 0) & 0x01))
if (state != ((sn->envelope_mode >> 0) & 0x01))
{
sn->channel->update();
_SN76477_envelope_1_w(sn, data);
_SN76477_envelope_1_w(sn, state);
log_envelope_mode(sn);
}
@ -1131,18 +1131,18 @@ static void _SN76477_envelope_2_w(sn76477_state *sn, UINT32 data)
}
void sn76477_envelope_2_w(device_t *device, UINT32 data)
WRITE_LINE_DEVICE_HANDLER( sn76477_envelope_2_w )
{
#if TEST_MODE == 0
sn76477_state *sn = get_safe_token(device);
CHECK_CHIP_NUM_AND_BOOLEAN;
if (data != ((sn->envelope_mode >> 1) & 0x01))
if (state != ((sn->envelope_mode >> 1) & 0x01))
{
sn->channel->update();
_SN76477_envelope_2_w(sn, data);
_SN76477_envelope_2_w(sn, state);
log_envelope_mode(sn);
}
@ -1163,18 +1163,18 @@ static void _SN76477_vco_w(sn76477_state *sn, UINT32 data)
}
void sn76477_vco_w(device_t *device, UINT32 data)
WRITE_LINE_DEVICE_HANDLER( sn76477_vco_w )
{
#if TEST_MODE == 0
sn76477_state *sn = get_safe_token(device);
CHECK_CHIP_NUM_AND_BOOLEAN;
if (data != sn->vco_mode)
if (state != sn->vco_mode)
{
sn->channel->update();
_SN76477_vco_w(sn, data);
_SN76477_vco_w(sn, state);
log_vco_mode(sn);
}
@ -1578,16 +1578,16 @@ void sn76477_pitch_voltage_w(device_t *device, double data)
*
*****************************************************************************/
void sn76477_noise_clock_w(device_t *device, UINT32 data)
WRITE_LINE_DEVICE_HANDLER( sn76477_noise_clock_w )
{
#if TEST_MODE == 0
sn76477_state *sn = get_safe_token(device);
CHECK_CHIP_NUM_AND_BOOLEAN;
if (data != sn->noise_clock)
if (state != sn->noise_clock)
{
sn->noise_clock = data;
sn->noise_clock = state;
/* on the rising edge shift generate next value,
if external control is enabled */

View File

@ -86,14 +86,14 @@ struct _sn76477_interface
*****************************************************************************/
/* these functions take 0 or 1 as a logic input */
void sn76477_enable_w(device_t *device, UINT32 data); /* active LO, 0 = enabled, 1 = disabled */
void sn76477_mixer_a_w(device_t *device, UINT32 data);
void sn76477_mixer_b_w(device_t *device, UINT32 data);
void sn76477_mixer_c_w(device_t *device, UINT32 data);
void sn76477_envelope_1_w(device_t *device, UINT32 data);
void sn76477_envelope_2_w(device_t *device, UINT32 data);
void sn76477_vco_w(device_t *device, UINT32 data); /* 0 = external, 1 = controlled by SLF */
void sn76477_noise_clock_w(device_t *device, UINT32 data); /* noise clock write, if noise_clock_res = 0 */
WRITE_LINE_DEVICE_HANDLER( sn76477_enable_w ); /* active LO, 0 = enabled, 1 = disabled */
WRITE_LINE_DEVICE_HANDLER( sn76477_mixer_a_w );
WRITE_LINE_DEVICE_HANDLER( sn76477_mixer_b_w );
WRITE_LINE_DEVICE_HANDLER( sn76477_mixer_c_w );
WRITE_LINE_DEVICE_HANDLER( sn76477_envelope_1_w );
WRITE_LINE_DEVICE_HANDLER( sn76477_envelope_2_w );
WRITE_LINE_DEVICE_HANDLER( sn76477_vco_w ); /* 0 = external, 1 = controlled by SLF */
WRITE_LINE_DEVICE_HANDLER( sn76477_noise_clock_w ); /* noise clock write, if noise_clock_res = 0 */
/* these functions take a resistor value in Ohms */
void sn76477_one_shot_res_w(device_t *device, double data);