mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
ym3812: Synchronize IRQ outputs to prevent lossage (nw)
This commit is contained in:
parent
95d60edf0a
commit
834867ce58
@ -25,8 +25,7 @@
|
||||
|
||||
void ym3812_device::irq_handler(int irq)
|
||||
{
|
||||
if (!m_irq_handler.isnull())
|
||||
m_irq_handler(irq);
|
||||
m_timer[2]->adjust(attotime::zero, irq);
|
||||
}
|
||||
|
||||
/* Timer overflow callback from timer.c */
|
||||
@ -34,13 +33,18 @@ void ym3812_device::device_timer(emu_timer &timer, device_timer_id id, int param
|
||||
{
|
||||
switch(id)
|
||||
{
|
||||
case 0:
|
||||
case TIMER_A:
|
||||
ym3812_timer_over(m_chip,0);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
case TIMER_B:
|
||||
ym3812_timer_over(m_chip,1);
|
||||
break;
|
||||
|
||||
case TIMER_IRQ_SYNC:
|
||||
if (!m_irq_handler.isnull())
|
||||
m_irq_handler(param);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -87,8 +91,9 @@ void ym3812_device::device_start()
|
||||
ym3812_set_irq_handler (m_chip, ym3812_device::static_irq_handler, this);
|
||||
ym3812_set_update_handler(m_chip, ym3812_device::static_update_request, this);
|
||||
|
||||
m_timer[0] = timer_alloc(0);
|
||||
m_timer[1] = timer_alloc(1);
|
||||
m_timer[0] = timer_alloc(TIMER_A);
|
||||
m_timer[1] = timer_alloc(TIMER_B);
|
||||
m_timer[2] = timer_alloc(TIMER_IRQ_SYNC);
|
||||
}
|
||||
|
||||
void ym3812_device::device_clock_changed()
|
||||
|
@ -36,6 +36,13 @@ protected:
|
||||
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
|
||||
|
||||
private:
|
||||
enum
|
||||
{
|
||||
TIMER_A,
|
||||
TIMER_B,
|
||||
TIMER_IRQ_SYNC
|
||||
};
|
||||
|
||||
void irq_handler(int irq);
|
||||
void timer_handler(int c, const attotime &period);
|
||||
void update_request() { m_stream->update(); }
|
||||
@ -47,7 +54,7 @@ private:
|
||||
static void static_update_request(device_t *param, int interval) { downcast<ym3812_device *>(param)->update_request(); }
|
||||
|
||||
sound_stream * m_stream;
|
||||
emu_timer * m_timer[2];
|
||||
emu_timer * m_timer[3];
|
||||
void * m_chip;
|
||||
devcb_write_line m_irq_handler;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user