mirror of
https://github.com/holub/mame
synced 2025-05-25 23:35:26 +03:00
Refactored YM3526 to use devcb. [Curt Coder]
This commit is contained in:
parent
6c65c7f868
commit
a54ae8335f
@ -30,6 +30,8 @@ struct _ym3526_state
|
||||
void * chip;
|
||||
const ym3526_interface *intf;
|
||||
device_t *device;
|
||||
|
||||
devcb_resolved_write_line out_int_func;
|
||||
};
|
||||
|
||||
|
||||
@ -45,7 +47,7 @@ INLINE ym3526_state *get_safe_token(device_t *device)
|
||||
static void IRQHandler(void *param,int irq)
|
||||
{
|
||||
ym3526_state *info = (ym3526_state *)param;
|
||||
if (info->intf->handler) (info->intf->handler)(info->device, irq ? ASSERT_LINE : CLEAR_LINE);
|
||||
info->out_int_func(irq ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
/* Timer overflow callback from timer.c */
|
||||
static TIMER_CALLBACK( timer_callback_0 )
|
||||
@ -88,13 +90,16 @@ static void _stream_update(void *param, int interval)
|
||||
|
||||
static DEVICE_START( ym3526 )
|
||||
{
|
||||
static const ym3526_interface dummy = { 0 };
|
||||
static const ym3526_interface dummy = { DEVCB_NULL };
|
||||
ym3526_state *info = get_safe_token(device);
|
||||
int rate = device->clock()/72;
|
||||
|
||||
info->intf = device->static_config() ? (const ym3526_interface *)device->static_config() : &dummy;
|
||||
info->device = device;
|
||||
|
||||
// resolve callbacks
|
||||
info->out_int_func.resolve(info->intf->out_int_func, *device);
|
||||
|
||||
/* stream system initialize */
|
||||
info->chip = ym3526_init(device,device->clock(),rate);
|
||||
assert_always(info->chip != NULL, "Error creating YM3526 chip");
|
||||
|
@ -8,7 +8,7 @@
|
||||
typedef struct _ym3526_interface ym3526_interface;
|
||||
struct _ym3526_interface
|
||||
{
|
||||
void (*handler)(device_t *device, int linestate);
|
||||
devcb_write_line out_int_func;
|
||||
};
|
||||
|
||||
READ8_DEVICE_HANDLER( ym3526_r );
|
||||
|
@ -256,15 +256,9 @@ GFXDECODE_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static void irqhandler( device_t *device, int irq )
|
||||
{
|
||||
battlane_state *state = device->machine().driver_data<battlane_state>();
|
||||
device_set_input_line(state->m_maincpu, M6809_FIRQ_LINE, irq ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
static const ym3526_interface ym3526_config =
|
||||
{
|
||||
irqhandler
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", M6809_FIRQ_LINE)
|
||||
};
|
||||
|
||||
|
||||
|
@ -354,16 +354,9 @@ GFXDECODE_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
/* handler called by the 3812 emulator when the internal timers cause an IRQ */
|
||||
static void irqhandler( device_t *device, int linestate )
|
||||
{
|
||||
brkthru_state *state = device->machine().driver_data<brkthru_state>();
|
||||
device_set_input_line(state->m_audiocpu, M6809_IRQ_LINE, linestate);
|
||||
}
|
||||
|
||||
static const ym3526_interface ym3526_config =
|
||||
{
|
||||
irqhandler
|
||||
DEVCB_CPU_INPUT_LINE("audiocpu", M6809_IRQ_LINE)
|
||||
};
|
||||
|
||||
|
||||
|
@ -1911,7 +1911,7 @@ static void irqhandler( device_t *device, int linestate )
|
||||
|
||||
static const ym3526_interface ym3526_config =
|
||||
{
|
||||
irqhandler
|
||||
DEVCB_CPU_INPUT_LINE("audiocpu", M6502_IRQ_LINE)
|
||||
};
|
||||
|
||||
static const ym3812_interface ym3812_config =
|
||||
|
@ -439,15 +439,15 @@ GFXDECODE_END
|
||||
|
||||
|
||||
/* handler called by the 3812 emulator when the internal timers cause an IRQ */
|
||||
static void irqhandler( device_t *device, int linestate )
|
||||
static WRITE_LINE_DEVICE_HANDLER( irqhandler )
|
||||
{
|
||||
exprraid_state *state = device->machine().driver_data<exprraid_state>();
|
||||
device_set_input_line_and_vector(state->m_slave, 0, linestate, 0xff);
|
||||
exprraid_state *driver_state = device->machine().driver_data<exprraid_state>();
|
||||
device_set_input_line_and_vector(driver_state->m_slave, 0, state, 0xff);
|
||||
}
|
||||
|
||||
static const ym3526_interface ym3526_config =
|
||||
{
|
||||
irqhandler
|
||||
DEVCB_LINE(irqhandler)
|
||||
};
|
||||
|
||||
#if 0
|
||||
|
@ -1047,16 +1047,9 @@ static MACHINE_CONFIG_START( borntofi, fantland_state )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
||||
static void wheelrun_ym3526_irqhandler( device_t *device, int state )
|
||||
{
|
||||
fantland_state *driver = device->machine().driver_data<fantland_state>();
|
||||
device_set_input_line(driver->m_audio_cpu, INPUT_LINE_IRQ0, state);
|
||||
}
|
||||
|
||||
static const ym3526_interface wheelrun_ym3526_interface =
|
||||
{
|
||||
wheelrun_ym3526_irqhandler
|
||||
DEVCB_CPU_INPUT_LINE("audiocpu", INPUT_LINE_IRQ0)
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( wheelrun, fantland_state )
|
||||
|
@ -756,15 +756,9 @@ static INTERRUPT_GEN( karnov_interrupt )
|
||||
device_set_input_line(device, 7, HOLD_LINE); /* VBL */
|
||||
}
|
||||
|
||||
static void sound_irq( device_t *device, int linestate )
|
||||
{
|
||||
karnov_state *state = device->machine().driver_data<karnov_state>();
|
||||
device_set_input_line(state->m_audiocpu, 0, linestate); /* IRQ */
|
||||
}
|
||||
|
||||
static const ym3526_interface ym3526_config =
|
||||
{
|
||||
sound_irq
|
||||
DEVCB_CPU_INPUT_LINE("audiocpu", M6502_IRQ_LINE)
|
||||
};
|
||||
|
||||
/*************************************
|
||||
|
@ -350,17 +350,9 @@ static MACHINE_CONFIG_START( matmania, matmania_state )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
||||
/* handler called by the 3526 emulator when the internal timers cause an IRQ */
|
||||
static void irqhandler(device_t *device, int linestate)
|
||||
{
|
||||
matmania_state *state = device->machine().driver_data<matmania_state>();
|
||||
device_set_input_line(state->m_audiocpu, 1, linestate);
|
||||
}
|
||||
|
||||
static const ym3526_interface ym3526_config =
|
||||
{
|
||||
irqhandler
|
||||
DEVCB_CPU_INPUT_LINE("audiocpu", M6809_FIRQ_LINE)
|
||||
};
|
||||
|
||||
|
||||
|
@ -259,15 +259,9 @@ GFXDECODE_END
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static void metlclsh_irqhandler(device_t *device, int linestate)
|
||||
{
|
||||
metlclsh_state *state = device->machine().driver_data<metlclsh_state>();
|
||||
device_set_input_line(state->m_maincpu, M6809_IRQ_LINE, linestate);
|
||||
}
|
||||
|
||||
static const ym3526_interface ym3526_config =
|
||||
{
|
||||
metlclsh_irqhandler
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", M6809_IRQ_LINE)
|
||||
};
|
||||
|
||||
|
||||
|
@ -407,7 +407,7 @@ GFXDECODE_END
|
||||
/* Sound Interfaces */
|
||||
|
||||
// Handler called by the 3526 emulator when the internal timers cause an IRQ
|
||||
static void irqhandler(device_t *device, int irq)
|
||||
static WRITE_LINE_DEVICE_HANDLER( irqhandler )
|
||||
{
|
||||
logerror("YM3526 firing an IRQ\n");
|
||||
// cputag_set_input_line(device->machine(), "audiocpu", 0, irq ? ASSERT_LINE : CLEAR_LINE);
|
||||
@ -415,7 +415,7 @@ static void irqhandler(device_t *device, int irq)
|
||||
|
||||
static const ym3526_interface ym3526_config =
|
||||
{
|
||||
irqhandler
|
||||
DEVCB_LINE(irqhandler)
|
||||
};
|
||||
|
||||
/* Interrupt Generator */
|
||||
|
@ -890,16 +890,9 @@ static GFXDECODE_START( renegade )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
|
||||
/* handler called by the 3526 emulator when the internal timers cause an IRQ */
|
||||
static void irqhandler(device_t *device, int linestate)
|
||||
{
|
||||
cputag_set_input_line(device->machine(), "audiocpu", M6809_FIRQ_LINE, linestate);
|
||||
}
|
||||
|
||||
static const ym3526_interface ym3526_config =
|
||||
{
|
||||
irqhandler
|
||||
DEVCB_CPU_INPUT_LINE("audiocpu", M6809_FIRQ_LINE)
|
||||
};
|
||||
|
||||
|
||||
|
@ -245,16 +245,9 @@ static GFXDECODE_START( sidepckt )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
|
||||
/* handler called by the 3526 emulator when the internal timers cause an IRQ */
|
||||
static void irqhandler(device_t *device, int linestate)
|
||||
{
|
||||
cputag_set_input_line(device->machine(), "audiocpu", 0, linestate);
|
||||
}
|
||||
|
||||
static const ym3526_interface ym3526_config =
|
||||
{
|
||||
irqhandler
|
||||
DEVCB_CPU_INPUT_LINE("audiocpu", M6502_IRQ_LINE)
|
||||
};
|
||||
|
||||
|
||||
|
@ -457,27 +457,27 @@ static TIMER_CALLBACK( sndirq_update_callback )
|
||||
|
||||
|
||||
|
||||
static void ymirq_callback_1(device_t *device, int irq)
|
||||
static WRITE_LINE_DEVICE_HANDLER( ymirq_callback_1 )
|
||||
{
|
||||
if (irq)
|
||||
if (state)
|
||||
device->machine().scheduler().synchronize(FUNC(sndirq_update_callback), YM1IRQ_ASSERT);
|
||||
}
|
||||
|
||||
static void ymirq_callback_2(device_t *device, int irq)
|
||||
static WRITE_LINE_DEVICE_HANDLER( ymirq_callback_2 )
|
||||
{
|
||||
if (irq)
|
||||
if (state)
|
||||
device->machine().scheduler().synchronize(FUNC(sndirq_update_callback), YM2IRQ_ASSERT);
|
||||
}
|
||||
|
||||
|
||||
static const ym3526_interface ym3526_config_1 =
|
||||
{
|
||||
ymirq_callback_1
|
||||
DEVCB_LINE(ymirq_callback_1)
|
||||
};
|
||||
|
||||
static const ym3526_interface ym3526_config_2 =
|
||||
{
|
||||
ymirq_callback_2
|
||||
DEVCB_LINE(ymirq_callback_2)
|
||||
};
|
||||
|
||||
static const ym3812_interface ym3812_config_1 =
|
||||
|
@ -910,14 +910,9 @@ MACHINE_CONFIG_END
|
||||
Best Of Best
|
||||
***************************************************************************/
|
||||
|
||||
static void bestbest_ym3526_irqhandler(device_t *device, int state)
|
||||
{
|
||||
cputag_set_input_line(device->machine(), "audiocpu", INPUT_LINE_IRQ0, state);
|
||||
}
|
||||
|
||||
static const ym3526_interface bestbest_ym3526_interface =
|
||||
{
|
||||
bestbest_ym3526_irqhandler
|
||||
DEVCB_CPU_INPUT_LINE("audiocpu", INPUT_LINE_IRQ0)
|
||||
};
|
||||
|
||||
static WRITE8_DEVICE_HANDLER( bestbest_ay8910_port_a_w )
|
||||
|
Loading…
Reference in New Issue
Block a user