mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +03:00
necdsp_device: converted to devcb2 (nw)
removed some leftovers from previous devcb2 conversions (nw)
This commit is contained in:
parent
0343870ee2
commit
69e0d908a7
@ -26,10 +26,21 @@ necdsp_device::necdsp_device(const machine_config &mconfig, device_type type, co
|
||||
: cpu_device(mconfig, type, name, tag, owner, clock, shortname, source),
|
||||
m_program_config("program", ENDIANNESS_BIG, 32, abits, -2), // data bus width, address bus width, -2 means DWORD-addressable
|
||||
m_data_config("data", ENDIANNESS_BIG, 16, dbits, -1), // -1 for WORD-addressable
|
||||
m_irq(0),
|
||||
m_program(NULL),
|
||||
m_data(NULL),
|
||||
m_direct(NULL)
|
||||
m_irq(0),
|
||||
m_program(NULL),
|
||||
m_data(NULL),
|
||||
m_direct(NULL),
|
||||
m_in_int_cb(*this),
|
||||
//m_in_si_cb(*this),
|
||||
//m_in_sck_cb(*this),
|
||||
//m_in_sien_cb(*this),
|
||||
//m_in_soen_cb(*this),
|
||||
//m_in_dack_cb(*this),
|
||||
m_out_p0_cb(*this),
|
||||
m_out_p1_cb(*this)
|
||||
//m_out_so_cb(*this),
|
||||
//m_out_sorq_cb(*this),
|
||||
//m_out_drq_cb(*this)
|
||||
{
|
||||
}
|
||||
|
||||
@ -44,35 +55,6 @@ upd96050_device::upd96050_device(const machine_config &mconfig, const char *tag,
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
//-------------------------------------------------
|
||||
|
||||
void necdsp_device::device_config_complete()
|
||||
{
|
||||
// inherit a copy of the static data
|
||||
const necdsp_interface *intf = reinterpret_cast<const necdsp_interface *>(static_config());
|
||||
if (intf != NULL)
|
||||
*static_cast<necdsp_interface *>(this) = *intf;
|
||||
|
||||
// or initialize to defaults if none provided
|
||||
else
|
||||
{
|
||||
memset(&m_in_int_cb, 0, sizeof(m_in_int_cb));
|
||||
//memset(&m_in_si_cb, 0, sizeof(m_in_si_cb));
|
||||
//memset(&m_in_sck_cb, 0, sizeof(m_in_sck_cb));
|
||||
//memset(&m_in_sien_cb, 0, sizeof(m_in_sien_cb));
|
||||
//memset(&m_in_soen_cb, 0, sizeof(m_in_soen_cb));
|
||||
//memset(&m_in_dack_cb, 0, sizeof(m_in_dack_cb));
|
||||
memset(&m_out_p0_cb, 0, sizeof(m_out_p0_cb));
|
||||
memset(&m_out_p1_cb, 0, sizeof(m_out_p1_cb));
|
||||
//memset(&m_out_so_cb, 0, sizeof(m_out_so_cb));
|
||||
//memset(&m_out_sorq_cb, 0, sizeof(m_out_sorq_cb));
|
||||
//memset(&m_out_drq_cb, 0, sizeof(m_out_drq_cb));
|
||||
}
|
||||
}
|
||||
//-------------------------------------------------
|
||||
// device_start - start up the device
|
||||
//-------------------------------------------------
|
||||
@ -105,17 +87,17 @@ void necdsp_device::device_start()
|
||||
state_add(UPD7725_IDB, "IDB", regs.idb);
|
||||
|
||||
// resolve callbacks
|
||||
m_in_int_func.resolve(m_in_int_cb, *this);
|
||||
//m_in_si_func.resolve(m_in_si_cb, *this);
|
||||
//m_in_sck_func.resolve(m_in_sck_cb, *this);
|
||||
//m_in_sien_func.resolve(m_in_sien_cb, *this);
|
||||
//m_in_soen_func.resolve(m_in_soen_cb, *this);
|
||||
//m_in_dack_func.resolve(m_in_dack_cb, *this);
|
||||
m_out_p0_func.resolve(m_out_p0_cb, *this);
|
||||
m_out_p1_func.resolve(m_out_p1_cb, *this);
|
||||
//m_out_so_func.resolve(m_out_so_cb, *this);
|
||||
//m_out_sorq_func.resolve(m_out_sorq_cb, *this);
|
||||
//m_out_drq_func.resolve(m_out_drq_cb, *this);
|
||||
m_in_int_cb.resolve_safe(0);
|
||||
//m_in_si_cb.resolve_safe(0);
|
||||
//m_in_sck_cb.resolve_safe(0);
|
||||
//m_in_sien_cb.resolve_safe(0);
|
||||
//m_in_soen_cb.resolve_safe(0);
|
||||
//m_in_dack_cb.resolve_safe(0);
|
||||
m_out_p0_cb.resolve_safe();
|
||||
m_out_p1_cb.resolve_safe();
|
||||
//m_out_so_cb.resolve_safe();
|
||||
//m_out_sorq_cb.resolve_safe();
|
||||
//m_out_drq_cb.resolve_safe();
|
||||
|
||||
// save state registrations
|
||||
save_item(NAME(regs.pc));
|
||||
@ -568,8 +550,8 @@ void necdsp_device::exec_ld(UINT32 opcode) {
|
||||
case 5: regs.rp = id; break;
|
||||
case 6: regs.dr = id; regs.sr.rqm = 1; break;
|
||||
case 7: regs.sr = (regs.sr & 0x907c) | (id & ~0x907c);
|
||||
m_out_p0_func(regs.sr&0x1);
|
||||
m_out_p1_func((regs.sr&0x2)>>1);
|
||||
m_out_p0_cb(regs.sr&0x1);
|
||||
m_out_p1_cb((regs.sr&0x2)>>1);
|
||||
break;
|
||||
case 8: regs.so = id; break; //LSB
|
||||
case 9: regs.so = id; break; //MSB
|
||||
|
@ -30,41 +30,68 @@ class necdsp_device;
|
||||
class upd7725_device;
|
||||
class upd96050_device;
|
||||
|
||||
// ======================> necdsp_interface
|
||||
|
||||
struct necdsp_interface
|
||||
{
|
||||
devcb_read_line m_in_int_cb;
|
||||
//devcb_read8 m_in_si_cb;
|
||||
//devcb_read_line m_in_sck_cb;
|
||||
//devcb_read_line m_in_sien_cb;
|
||||
//devcb_read_line m_in_soen_cb;
|
||||
//devcb_read_line m_in_dack_cb;
|
||||
devcb_write_line m_out_p0_cb;
|
||||
devcb_write_line m_out_p1_cb;
|
||||
//devcb_write8 m_out_so_cb;
|
||||
//devcb_write_line m_out_sorq_cb;
|
||||
//devcb_write_line m_out_drq_cb;
|
||||
};
|
||||
#define MCFG_NECDSP_IN_INT_CB(_devcb) \
|
||||
devcb = &necdsp_device::set_in_int_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define NECDSP_INTERFACE(name) \
|
||||
const necdsp_interface (name) =
|
||||
#define MCFG_NECDSP_IN_SI_CB(_devcb) \
|
||||
devcb = &necdsp_device::set_in_si_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_NECDSP_IN_SCK_CB(_devcb) \
|
||||
devcb = &necdsp_device::set_in_sck_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_NECDSP_IN_SIEN_CB(_devcb) \
|
||||
devcb = &necdsp_device::set_in_sien_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_NECDSP_IN_SOEN_CB(_devcb) \
|
||||
devcb = &necdsp_device::set_in_soen_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_NECDSP_IN_DACK_CB(_devcb) \
|
||||
devcb = &necdsp_device::set_in_dack_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_NECDSP_OUT_P0_CB(_devcb) \
|
||||
devcb = &necdsp_device::set_out_p0_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_NECDSP_OUT_P1_CB(_devcb) \
|
||||
devcb = &necdsp_device::set_out_p1_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_NECDSP_OUT_SO_CB(_devcb) \
|
||||
devcb = &necdsp_device::set_out_so_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_NECDSP_OUT_SORQ_CB(_devcb) \
|
||||
devcb = &necdsp_device::set_out_sorq_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
#define MCFG_NECDSP_OUT_DRQ_CB(_devcb) \
|
||||
devcb = &necdsp_device::set_out_drq_callback(*device, DEVCB2_##_devcb);
|
||||
|
||||
|
||||
// ======================> necdsp_device
|
||||
|
||||
class necdsp_device : public cpu_device, public necdsp_interface
|
||||
class necdsp_device : public cpu_device
|
||||
{
|
||||
protected:
|
||||
// construction/destruction
|
||||
necdsp_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, UINT32 clock, UINT32 abits, UINT32 dbits, const char *name, const char *shortname, const char *source);
|
||||
|
||||
public:
|
||||
|
||||
template<class _Object> static devcb2_base &set_in_int_callback(device_t &device, _Object object) { return downcast<necdsp_device &>(device).m_in_int_cb.set_callback(object); }
|
||||
//template<class _Object> static devcb2_base &set_in_si_callback(device_t &device, _Object object) { return downcast<necdsp_device &>(device).m_in_si_cb.set_callback(object); }
|
||||
//template<class _Object> static devcb2_base &set_in_sck_callback(device_t &device, _Object object) { return downcast<necdsp_device &>(device).m_in_sck_cb.set_callback(object); }
|
||||
//template<class _Object> static devcb2_base &set_in_sien_callback(device_t &device, _Object object) { return downcast<necdsp_device &>(device).m_in_sien_cb.set_callback(object); }
|
||||
//template<class _Object> static devcb2_base &set_in_soen_callback(device_t &device, _Object object) { return downcast<necdsp_device &>(device).m_in_soen_cb.set_callback(object); }
|
||||
//template<class _Object> static devcb2_base &set_in_dack_callback(device_t &device, _Object object) { return downcast<necdsp_device &>(device).m_in_dack_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_p0_callback(device_t &device, _Object object) { return downcast<necdsp_device &>(device).m_out_p0_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_p1_callback(device_t &device, _Object object) { return downcast<necdsp_device &>(device).m_out_p1_cb.set_callback(object); }
|
||||
//template<class _Object> static devcb2_base &set_out_so_callback(device_t &device, _Object object) { return downcast<necdsp_device &>(device).m_out_so_cb.set_callback(object); }
|
||||
//template<class _Object> static devcb2_base &set_out_sorq_callback(device_t &device, _Object object) { return downcast<necdsp_device &>(device).m_out_sorq_cb.set_callback(object); }
|
||||
//template<class _Object> static devcb2_base &set_out_drq_callback(device_t &device, _Object object) { return downcast<necdsp_device &>(device).m_out_drq_cb.set_callback(object); }
|
||||
|
||||
UINT8 snesdsp_read(bool mode);
|
||||
void snesdsp_write(bool mode, UINT8 data);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete();
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
@ -170,17 +197,17 @@ private:
|
||||
|
||||
protected:
|
||||
// device callbacks
|
||||
devcb_resolved_read_line m_in_int_func;
|
||||
//devcb_resolved_read8 m_in_si_func;
|
||||
//devcb_resolved_read_line m_in_sck_func;
|
||||
//devcb_resolved_read_line m_in_sien_func;
|
||||
//devcb_resolved_read_line m_in_soen_func;
|
||||
//devcb_resolved_read_line m_in_dack_func;
|
||||
devcb_resolved_write_line m_out_p0_func;
|
||||
devcb_resolved_write_line m_out_p1_func;
|
||||
//devcb_resolved_write8 m_out_so_func;
|
||||
//devcb_resolved_write_line m_out_sorq_func;
|
||||
//devcb_resolved_write_line m_out_drq_func;
|
||||
devcb2_read_line m_in_int_cb;
|
||||
//devcb2_read8 m_in_si_cb;
|
||||
//devcb2_read_line m_in_sck_cb;
|
||||
//devcb2_read_line m_in_sien_cb;
|
||||
//devcb2_read_line m_in_soen_cb;
|
||||
//devcb2_read_line m_in_dack_cb;
|
||||
devcb2_write_line m_out_p0_cb;
|
||||
devcb2_write_line m_out_p1_cb;
|
||||
//devcb2_write8 m_out_so_cb;
|
||||
//devcb2_write_line m_out_sorq_cb;
|
||||
//devcb2_write_line m_out_drq_cb;
|
||||
};
|
||||
|
||||
class upd7725_device : public necdsp_device
|
||||
|
@ -129,9 +129,6 @@ private:
|
||||
devcb2_write8 m_out_pa_cb;
|
||||
devcb2_write8 m_out_pb_cb;
|
||||
devcb2_write8 m_out_pc_cb;
|
||||
|
||||
devcb_resolved_read8 m_in_port_func[3];
|
||||
devcb_resolved_write8 m_out_port_func[3];
|
||||
|
||||
UINT8 m_control; // mode control word
|
||||
UINT8 m_output[3]; // output latch
|
||||
|
@ -170,12 +170,6 @@ private:
|
||||
void update_interrupts();
|
||||
|
||||
mc68681_channel *get_channel(int chan);
|
||||
|
||||
devcb_resolved_write_line m_out_irq_func;
|
||||
devcb_resolved_write_line m_out_a_tx_func;
|
||||
devcb_resolved_write_line m_out_b_tx_func;
|
||||
devcb_resolved_read8 m_in_port_func;
|
||||
devcb_resolved_write8 m_out_port_func;
|
||||
};
|
||||
|
||||
extern const device_type MC68681;
|
||||
|
@ -137,14 +137,6 @@
|
||||
/*
|
||||
Devices and handlers
|
||||
*/
|
||||
//upd7720 (TODO: hook up p0, p1, int)
|
||||
static NECDSP_INTERFACE( upd7720_config )
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
USART 8251 and Terminal stuff
|
||||
@ -409,10 +401,10 @@ static MACHINE_CONFIG_START( prose2k, tsispch_state )
|
||||
|
||||
/* TODO: the UPD7720 has a 10KHz clock to its INT pin */
|
||||
/* TODO: the UPD7720 has a 2MHz clock to its SCK pin */
|
||||
/* TODO: hook up p0, p1, int */
|
||||
MCFG_CPU_ADD("dsp", UPD7725, 8000000) /* VERIFIED clock, unknown divider; correct dsp type is UPD77P20 */
|
||||
MCFG_CPU_PROGRAM_MAP(dsp_prg_map)
|
||||
MCFG_CPU_DATA_MAP(dsp_data_map)
|
||||
MCFG_CPU_CONFIG(upd7720_config)
|
||||
|
||||
/* PIC 8259 */
|
||||
MCFG_PIC8259_ADD("pic8259", WRITELINE(tsispch_state,pic8259_set_int_line), VCC, NULL)
|
||||
|
Loading…
Reference in New Issue
Block a user