upd7759 use devcb2 now (nw)

This commit is contained in:
Miodrag Milanovic 2014-03-23 11:54:19 +00:00
parent 35083e3a9d
commit 3d87782c0d
7 changed files with 34 additions and 75 deletions

View File

@ -189,7 +189,8 @@ upd775x_device::upd775x_device(const machine_config &mconfig, device_type type,
m_rom(NULL),
m_rombase(NULL),
m_romoffset(0),
m_rommask(0)
m_rommask(0),
m_drqcallback(*this)
{
}
@ -208,26 +209,6 @@ upd7756_device::upd7756_device(const machine_config &mconfig, const char *tag, d
{
}
//-------------------------------------------------
// device_config_complete - perform any
// operations now that the configuration is
// complete
//-------------------------------------------------
void upd775x_device::device_config_complete()
{
// inherit a copy of the static data
const upd775x_interface *intf = reinterpret_cast<const upd775x_interface *>(static_config());
if (intf != NULL)
*static_cast<upd775x_interface *>(this) = *intf;
// or initialize to defaults if none provided
else
{
m_drqcallback = NULL;
}
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@ -238,6 +219,8 @@ void upd775x_device::device_start()
void upd7759_device::device_start()
{
m_drqcallback.resolve_safe();
/* chip configuration */
m_sample_offset_shift = (type() == UPD7759) ? 1 : 0;
@ -268,7 +251,7 @@ void upd7759_device::device_start()
if (romsize >= 0x20000) m_rommask = 0x1ffff;
else m_rommask = romsize - 1;
m_drqcallback = NULL;
m_drqcallback.set_callback(DEVCB2_NULL);
}
/* assume /RESET and /START are both high */
@ -311,6 +294,8 @@ void upd7759_device::device_start()
void upd7756_device::device_start()
{
m_drqcallback.resolve_safe();
/* chip configuration */
m_sample_offset_shift = (type() == UPD7759) ? 1 : 0;
@ -339,7 +324,7 @@ void upd7756_device::device_start()
if (romsize >= 0x20000) m_rommask = 0x1ffff;
else m_rommask = romsize - 1;
m_drqcallback = NULL;
m_drqcallback.set_callback(DEVCB2_NULL);
}
/* assume /RESET and /START are both high */
@ -720,8 +705,8 @@ void upd7759_device::device_timer(emu_timer &timer, device_timer_id id, int para
/* if the DRQ changed, update it */
logerror("upd7759_slave_update: DRQ %d->%d\n", olddrq, m_drq);
if (olddrq != m_drq && m_drqcallback)
(*m_drqcallback)(this, m_drq);
if (olddrq != m_drq)
m_drqcallback(m_drq);
/* set a timer to go off when that is done */
if (m_state != STATE_IDLE)

View File

@ -14,19 +14,15 @@
#define UPD7759_STANDARD_CLOCK XTAL_640kHz
struct upd775x_interface
{
void (*m_drqcallback)(device_t *device, int param); /* drq callback (per chip, slave mode only) */
};
class upd775x_device : public device_t,
public device_sound_interface,
public upd775x_interface
public device_sound_interface
{
public:
upd775x_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
~upd775x_device() {}
template<class _Object> static devcb2_base &set_drq_callback(device_t &device, _Object object) { return downcast<upd775x_device &>(device).m_drqcallback.set_callback(object); }
void set_bank_base(offs_t base);
void reset_w(UINT8 data);
@ -36,7 +32,6 @@ public:
protected:
// device-level overrides
virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
@ -86,6 +81,8 @@ protected:
UINT32 m_romoffset; /* ROM offset to make save/restore easier */
UINT32 m_rommask; /* maximum address offset */
devcb2_write_line m_drqcallback;
void update_adpcm(int data);
void advance_state();
};
@ -125,5 +122,10 @@ public:
extern const device_type UPD7759;
extern const device_type UPD7756;
#define MCFG_UPD7759_DRQ_CALLBACK(_write) \
devcb = &upd7759_device::set_drq_callback(*device, DEVCB2_##_write);
#define MCFG_UPD7756_DRQ_CALLBACK(_write) \
devcb = &upd7756_device::set_drq_callback(*device, DEVCB2_##_write);
#endif /* __UPD7759_H__ */

View File

@ -1249,11 +1249,10 @@ READ8_MEMBER( segas16b_state::upd7759_status_r )
// NMI to the sound CPU
//-------------------------------------------------
void segas16b_state::upd7759_generate_nmi(device_t *device, int state)
WRITE_LINE_MEMBER(segas16b_state::upd7759_generate_nmi)
{
segas16b_state *driver = device->machine().driver_data<segas16b_state>();
if (state)
driver->m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
@ -3231,17 +3230,6 @@ INPUT_PORTS_END
//**************************************************************************
// SOUND CONFIGURATIONS
//**************************************************************************
static const upd775x_interface upd7759_config =
{
&segas16b_state::upd7759_generate_nmi
};
//**************************************************************************
// GRAPHICS DECODING
//**************************************************************************
@ -3291,7 +3279,7 @@ static MACHINE_CONFIG_START( system16b, segas16b_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.43)
MCFG_SOUND_ADD("upd", UPD7759, UPD7759_STANDARD_CLOCK)
MCFG_SOUND_CONFIG(upd7759_config)
MCFG_UPD7759_DRQ_CALLBACK(WRITELINE(segas16b_state,upd7759_generate_nmi))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.48)
MACHINE_CONFIG_END

View File

@ -2022,21 +2022,12 @@ static MACHINE_CONFIG_START( system16, segas1x_bootleg_state )
MACHINE_CONFIG_END
static void sound_cause_nmi( device_t *device, int chip )
WRITE_LINE_MEMBER(segas1x_bootleg_state::sound_cause_nmi)
{
segas1x_bootleg_state *state = device->machine().driver_data<segas1x_bootleg_state>();
/* upd7759 callback */
state->m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
const upd775x_interface sys16_upd7759_interface =
{
sound_cause_nmi
};
static MACHINE_CONFIG_DERIVED( system16_7759, system16 )
/* basic machine hardware */
@ -2047,7 +2038,7 @@ static MACHINE_CONFIG_DERIVED( system16_7759, system16 )
/* sound hardware */
MCFG_SOUND_ADD("7759", UPD7759, UPD7759_STANDARD_CLOCK)
MCFG_SOUND_CONFIG(sys16_upd7759_interface)
MCFG_UPD7759_DRQ_CALLBACK(WRITELINE(segas1x_bootleg_state,sound_cause_nmi))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.48)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.48)
MACHINE_CONFIG_END

View File

@ -72,7 +72,7 @@ public:
DECLARE_READ8_MEMBER( upd7759_status_r );
// other callbacks
static void upd7759_generate_nmi(device_t *device, int state);
DECLARE_WRITE_LINE_MEMBER(upd7759_generate_nmi);
INTERRUPT_GEN_MEMBER( i8751_main_cpu_vblank );
// ROM board-specific driver init

View File

@ -214,4 +214,5 @@ public:
void datsu_set_pages( );
DECLARE_WRITE_LINE_MEMBER(tturfbl_msm5205_callback);
DECLARE_WRITE_LINE_MEMBER(shdancbl_msm5205_callback);
DECLARE_WRITE_LINE_MEMBER(sound_cause_nmi);
};

View File

@ -145,6 +145,7 @@ public:
UINT16 pico_read_penpos(int pen);
DECLARE_READ16_MEMBER(pico_68k_io_read);
DECLARE_WRITE16_MEMBER(pico_68k_io_write);
DECLARE_WRITE_LINE_MEMBER(sound_cause_irq);
};
class pico_state : public pico_base_state
@ -156,7 +157,6 @@ public:
optional_device<pico_cart_slot_device> m_picocart;
DECLARE_MACHINE_START(pico);
};
@ -268,21 +268,13 @@ READ16_MEMBER(pico_base_state::pico_68k_io_read )
}
static void sound_cause_irq( device_t *device, int chip )
WRITE_LINE_MEMBER(pico_base_state::sound_cause_irq)
{
pico_base_state *state = device->machine().driver_data<pico_base_state>();
// printf("sound irq\n");
/* upd7759 callback */
state->m_maincpu->set_input_line(3, HOLD_LINE);
m_maincpu->set_input_line(3, HOLD_LINE);
}
const upd775x_interface pico_upd7759_interface =
{
sound_cause_irq
};
WRITE16_MEMBER(pico_base_state::pico_68k_io_write )
{
// printf("pico_68k_io_write %04x %04x %04x\n", offset*2, data, mem_mask);
@ -369,7 +361,7 @@ static MACHINE_CONFIG_START( pico, pico_state )
MCFG_SOFTWARE_LIST_ADD("cart_list","pico")
MCFG_SOUND_ADD("7759", UPD7759, UPD7759_STANDARD_CLOCK)
MCFG_SOUND_CONFIG(pico_upd7759_interface)
MCFG_UPD7759_DRQ_CALLBACK(WRITELINE(pico_state,sound_cause_irq))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.48)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.48)
MACHINE_CONFIG_END
@ -389,7 +381,7 @@ static MACHINE_CONFIG_START( picopal, pico_state )
MCFG_SOFTWARE_LIST_ADD("cart_list","pico")
MCFG_SOUND_ADD("7759", UPD7759, UPD7759_STANDARD_CLOCK)
MCFG_SOUND_CONFIG(pico_upd7759_interface)
MCFG_UPD7759_DRQ_CALLBACK(WRITELINE(pico_state,sound_cause_irq))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.48)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.48)
MACHINE_CONFIG_END
@ -559,7 +551,7 @@ static MACHINE_CONFIG_START( copera, copera_state )
MCFG_SOFTWARE_LIST_ADD("cart_list","copera")
MCFG_SOUND_ADD("7759", UPD7759, UPD7759_STANDARD_CLOCK)
MCFG_SOUND_CONFIG(pico_upd7759_interface)
MCFG_UPD7759_DRQ_CALLBACK(WRITELINE(copera_state,sound_cause_irq))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.48)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.48)
MACHINE_CONFIG_END