mirror of
https://github.com/mamedev/mame.git
synced 2024-11-16 07:48:32 +01:00
sp0256.c: [Wilbert Pol]
- Added a little delay before settling LRQ when resetting the device. Fixes MT05103. - When reading the LRQ signal, force an update of the stream. This fixes support for 'The Voice' in 'Turtles' for the odyssey2.
This commit is contained in:
parent
dfccb0a2f7
commit
7f7a6a084a
3 changed files with 24 additions and 2 deletions
|
@ -1275,6 +1275,9 @@ READ_LINE_DEVICE_HANDLER( sp0256_lrq_r )
|
||||||
{
|
{
|
||||||
sp0256_state *sp = get_safe_token(device);
|
sp0256_state *sp = get_safe_token(device);
|
||||||
|
|
||||||
|
// force stream update
|
||||||
|
sp->stream->update();
|
||||||
|
|
||||||
return sp->lrq == 0x8000;
|
return sp->lrq == 0x8000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1282,6 +1285,8 @@ READ_LINE_DEVICE_HANDLER( sp0256_sby_r )
|
||||||
{
|
{
|
||||||
sp0256_state *sp = get_safe_token(device);
|
sp0256_state *sp = get_safe_token(device);
|
||||||
|
|
||||||
|
// TODO: force stream update??
|
||||||
|
|
||||||
return sp->sby_line;
|
return sp->sby_line;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1390,8 +1395,18 @@ void sp0256_device::device_config_complete()
|
||||||
void sp0256_device::device_start()
|
void sp0256_device::device_start()
|
||||||
{
|
{
|
||||||
DEVICE_START_NAME( sp0256 )(this);
|
DEVICE_START_NAME( sp0256 )(this);
|
||||||
|
|
||||||
|
m_lrq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sp0256_device::set_lrq_timer_proc),this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TIMER_CALLBACK_MEMBER(sp0256_device::set_lrq_timer_proc)
|
||||||
|
{
|
||||||
|
sp0256_state *sp = get_safe_token(this);
|
||||||
|
|
||||||
|
sp->lrq = 0x8000;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// device_reset - device-specific reset
|
// device_reset - device-specific reset
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
@ -1399,6 +1414,10 @@ void sp0256_device::device_start()
|
||||||
void sp0256_device::device_reset()
|
void sp0256_device::device_reset()
|
||||||
{
|
{
|
||||||
DEVICE_RESET_NAME( sp0256 )(this);
|
DEVICE_RESET_NAME( sp0256 )(this);
|
||||||
|
|
||||||
|
sp0256_state *sp = get_safe_token(this);
|
||||||
|
sp->lrq = 0;
|
||||||
|
m_lrq_timer->adjust( attotime::from_ticks( 50, m_clock ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
|
@ -79,6 +79,9 @@ public:
|
||||||
|
|
||||||
// access to legacy token
|
// access to legacy token
|
||||||
void *token() const { assert(m_token != NULL); return m_token; }
|
void *token() const { assert(m_token != NULL); return m_token; }
|
||||||
|
|
||||||
|
TIMER_CALLBACK_MEMBER(set_lrq_timer_proc);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// device-level overrides
|
// device-level overrides
|
||||||
virtual void device_config_complete();
|
virtual void device_config_complete();
|
||||||
|
@ -90,6 +93,7 @@ protected:
|
||||||
private:
|
private:
|
||||||
// internal state
|
// internal state
|
||||||
void *m_token;
|
void *m_token;
|
||||||
|
emu_timer *m_lrq_timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const device_type SP0256;
|
extern const device_type SP0256;
|
||||||
|
|
|
@ -333,7 +333,7 @@ WRITE_LINE_MEMBER(odyssey2_state::the_voice_lrq_callback)
|
||||||
|
|
||||||
READ8_MEMBER(odyssey2_state::t0_read)
|
READ8_MEMBER(odyssey2_state::t0_read)
|
||||||
{
|
{
|
||||||
return sp0256_lrq_r( m_sp0256 ) ? 1 : 0;
|
return sp0256_lrq_r( m_sp0256 ) ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -438,7 +438,6 @@ WRITE8_MEMBER(odyssey2_state::io_write)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* TODO: Reset sp0256 in this case */
|
|
||||||
m_sp0256->reset();
|
m_sp0256->reset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue