-sh2, sh4, sat_ctrl: Removed MCFG, nw

-ticket: Added separate hopper_device, nw

-aristmk6, atvtrack, cps3, cv1k, hikaru, saturn, sh4robot, stv: Removed MACHINE_CONFIG, nw

-sat_ctrl/multitap, segatap: Refactored to use required_devicee_array, removed MACHINE_CONFIG, simplified code, nw

-mega32x: Removed code duplication, eliminated MACHINE_CONFIG, nw

-vegaeo: Removed machine().device, nw
This commit is contained in:
mooglyguy 2018-12-09 19:40:25 +01:00
parent 278fa09713
commit 6fd96f5907
26 changed files with 498 additions and 627 deletions

View File

@ -46,7 +46,17 @@ class saturn_control_port_device : public device_t,
{
public:
// construction/destruction
saturn_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
template <typename T>
saturn_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, char const* dflt)
: saturn_control_port_device(mconfig, tag, owner, (uint32_t)0)
{
option_reset();
opts(*this);
set_default_option(dflt);
set_fixed(false);
}
saturn_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~saturn_control_port_device();
uint16_t read_direct();
@ -61,20 +71,9 @@ protected:
device_saturn_control_port_interface *m_device;
};
// device type definition
DECLARE_DEVICE_TYPE(SATURN_CONTROL_PORT, saturn_control_port_device)
//**************************************************************************
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_SATURN_CONTROL_PORT_ADD(_tag, _slot_intf, _def_slot) \
MCFG_DEVICE_ADD(_tag, SATURN_CONTROL_PORT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
void saturn_controls(device_slot_interface &device);
void saturn_joys(device_slot_interface &device);

View File

@ -26,15 +26,10 @@ DEFINE_DEVICE_TYPE(SATURN_MULTITAP, saturn_multitap_device, "saturn_multitap", "
// saturn_multitap_device - constructor
//-------------------------------------------------
saturn_multitap_device::saturn_multitap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, SATURN_MULTITAP, tag, owner, clock),
device_saturn_control_port_interface(mconfig, *this),
m_subctrl1_port(*this, "ctrl1"),
m_subctrl2_port(*this, "ctrl2"),
m_subctrl3_port(*this, "ctrl3"),
m_subctrl4_port(*this, "ctrl4"),
m_subctrl5_port(*this, "ctrl5"),
m_subctrl6_port(*this, "ctrl6")
saturn_multitap_device::saturn_multitap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SATURN_MULTITAP, tag, owner, clock)
, device_saturn_control_port_interface(mconfig, *this)
, m_subctrl_port(*this, "ctrl%u", 1U)
{
}
@ -45,12 +40,8 @@ saturn_multitap_device::saturn_multitap_device(const machine_config &mconfig, co
void saturn_multitap_device::device_start()
{
m_subctrl1_port->device_start();
m_subctrl2_port->device_start();
m_subctrl3_port->device_start();
m_subctrl4_port->device_start();
m_subctrl5_port->device_start();
m_subctrl6_port->device_start();
for (int i = 0; i < 6; i++)
m_subctrl_port[i]->device_start();
}
//-------------------------------------------------
@ -67,36 +58,7 @@ void saturn_multitap_device::device_reset()
uint8_t saturn_multitap_device::read_ctrl(uint8_t offset)
{
uint8_t res = 0;
switch (offset)
{
default:
case 0:
case 1:
res = m_subctrl1_port->read_ctrl(offset & 1);
break;
case 2:
case 3:
res = m_subctrl2_port->read_ctrl(offset & 1);
break;
case 4:
case 5:
res = m_subctrl3_port->read_ctrl(offset & 1);
break;
case 6:
case 7:
res = m_subctrl4_port->read_ctrl(offset & 1);
break;
case 8:
case 9:
res = m_subctrl5_port->read_ctrl(offset & 1);
break;
case 10:
case 11:
res = m_subctrl6_port->read_ctrl(offset & 1);
break;
}
return res;
return m_subctrl_port[offset < 12 ? (offset >> 1) : 0]->read_ctrl(offset & 1);
}
//-------------------------------------------------
@ -105,30 +67,16 @@ uint8_t saturn_multitap_device::read_ctrl(uint8_t offset)
uint8_t saturn_multitap_device::read_id(int idx)
{
switch (idx)
{
case 0:
default:
return m_subctrl1_port->read_id(0);
case 1:
return m_subctrl2_port->read_id(0);
case 2:
return m_subctrl3_port->read_id(0);
case 3:
return m_subctrl4_port->read_id(0);
case 4:
return m_subctrl5_port->read_id(0);
case 5:
return m_subctrl6_port->read_id(0);
}
return m_subctrl_port[idx < 6 ? idx : 0]->read_id(0);
}
MACHINE_CONFIG_START(saturn_multitap_device::device_add_mconfig)
MCFG_SATURN_CONTROL_PORT_ADD("ctrl1", saturn_joys, "joypad")
MCFG_SATURN_CONTROL_PORT_ADD("ctrl2", saturn_joys, "joypad")
MCFG_SATURN_CONTROL_PORT_ADD("ctrl3", saturn_joys, "joypad")
MCFG_SATURN_CONTROL_PORT_ADD("ctrl4", saturn_joys, "joypad")
MCFG_SATURN_CONTROL_PORT_ADD("ctrl5", saturn_joys, "joypad")
MCFG_SATURN_CONTROL_PORT_ADD("ctrl6", saturn_joys, "joypad")
MACHINE_CONFIG_END
void saturn_multitap_device::device_add_mconfig(machine_config &config)
{
SATURN_CONTROL_PORT(config, m_subctrl_port[0], saturn_joys, "joypad");
SATURN_CONTROL_PORT(config, m_subctrl_port[1], saturn_joys, "joypad");
SATURN_CONTROL_PORT(config, m_subctrl_port[2], saturn_joys, "joypad");
SATURN_CONTROL_PORT(config, m_subctrl_port[3], saturn_joys, "joypad");
SATURN_CONTROL_PORT(config, m_subctrl_port[4], saturn_joys, "joypad");
SATURN_CONTROL_PORT(config, m_subctrl_port[5], saturn_joys, "joypad");
}

View File

@ -43,12 +43,7 @@ protected:
virtual uint8_t read_id(int idx) override;
private:
required_device<saturn_control_port_device> m_subctrl1_port;
required_device<saturn_control_port_device> m_subctrl2_port;
required_device<saturn_control_port_device> m_subctrl3_port;
required_device<saturn_control_port_device> m_subctrl4_port;
required_device<saturn_control_port_device> m_subctrl5_port;
required_device<saturn_control_port_device> m_subctrl6_port;
required_device_array<saturn_control_port_device, 6> m_subctrl_port;
};

View File

@ -26,13 +26,10 @@ DEFINE_DEVICE_TYPE(SATURN_SEGATAP, saturn_segatap_device, "saturn_segatap", "sat
// saturn_segatap_device - constructor
//-------------------------------------------------
saturn_segatap_device::saturn_segatap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, SATURN_SEGATAP, tag, owner, clock),
device_saturn_control_port_interface(mconfig, *this),
m_subctrl1_port(*this, "ctrl1"),
m_subctrl2_port(*this, "ctrl2"),
m_subctrl3_port(*this, "ctrl3"),
m_subctrl4_port(*this, "ctrl4")
saturn_segatap_device::saturn_segatap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, SATURN_SEGATAP, tag, owner, clock)
, device_saturn_control_port_interface(mconfig, *this)
, m_subctrl_port(*this, "ctrl%u", 1U)
{
}
@ -43,10 +40,8 @@ saturn_segatap_device::saturn_segatap_device(const machine_config &mconfig, cons
void saturn_segatap_device::device_start()
{
m_subctrl1_port->device_start();
m_subctrl2_port->device_start();
m_subctrl3_port->device_start();
m_subctrl4_port->device_start();
for (int i = 0; i < 4; i++)
m_subctrl_port[i]->device_start();
}
//-------------------------------------------------
@ -63,28 +58,7 @@ void saturn_segatap_device::device_reset()
uint8_t saturn_segatap_device::read_ctrl(uint8_t offset)
{
uint8_t res = 0;
switch (offset)
{
default:
case 0:
case 1:
res = m_subctrl1_port->read_ctrl(offset & 1);
break;
case 2:
case 3:
res = m_subctrl2_port->read_ctrl(offset & 1);
break;
case 4:
case 5:
res = m_subctrl3_port->read_ctrl(offset & 1);
break;
case 6:
case 7:
res = m_subctrl4_port->read_ctrl(offset & 1);
break;
}
return res;
return m_subctrl_port[offset < 8 ? (offset >> 1) : 0]->read_ctrl(offset & 1);
}
//-------------------------------------------------
@ -93,24 +67,14 @@ uint8_t saturn_segatap_device::read_ctrl(uint8_t offset)
uint8_t saturn_segatap_device::read_id(int idx)
{
switch (idx)
{
case 0:
default:
return m_subctrl1_port->read_id(0);
case 1:
return m_subctrl2_port->read_id(0);
case 2:
return m_subctrl3_port->read_id(0);
case 3:
return m_subctrl4_port->read_id(0);
}
return m_subctrl_port[idx < 4 ? idx : 0]->read_id(0);
}
MACHINE_CONFIG_START(saturn_segatap_device::device_add_mconfig)
MCFG_SATURN_CONTROL_PORT_ADD("ctrl1", saturn_joys, "joypad")
MCFG_SATURN_CONTROL_PORT_ADD("ctrl2", saturn_joys, "joypad")
MCFG_SATURN_CONTROL_PORT_ADD("ctrl3", saturn_joys, "joypad")
MCFG_SATURN_CONTROL_PORT_ADD("ctrl4", saturn_joys, "joypad")
MACHINE_CONFIG_END
void saturn_segatap_device::device_add_mconfig(machine_config &config)
{
SATURN_CONTROL_PORT(config, m_subctrl_port[0], saturn_joys, "joypad");
SATURN_CONTROL_PORT(config, m_subctrl_port[1], saturn_joys, "joypad");
SATURN_CONTROL_PORT(config, m_subctrl_port[2], saturn_joys, "joypad");
SATURN_CONTROL_PORT(config, m_subctrl_port[3], saturn_joys, "joypad");
}

View File

@ -43,10 +43,7 @@ protected:
virtual uint8_t read_id(int idx) override;
private:
required_device<saturn_control_port_device> m_subctrl1_port;
required_device<saturn_control_port_device> m_subctrl2_port;
required_device<saturn_control_port_device> m_subctrl3_port;
required_device<saturn_control_port_device> m_subctrl4_port;
required_device_array<saturn_control_port_device, 4> m_subctrl_port;
};

View File

@ -40,24 +40,9 @@
#define SH2_INT_ABUS 16
#define SH2_DMA_KLUDGE_CB(name) int name(uint32_t src, uint32_t dst, uint32_t data, int size)
#define SH2_DMA_FIFO_DATA_AVAILABLE_CB(name) int name(uint32_t src, uint32_t dst, uint32_t data, int size)
#define SH2_FTCSR_READ_CB(name) void name(uint32_t data)
#define MCFG_SH2_IS_SLAVE(_slave) \
downcast<sh2_device &>(*device).set_is_slave(_slave);
#define MCFG_SH2_DMA_KLUDGE_CB(_class, _method) \
downcast<sh2_device &>(*device).set_dma_kludge_callback(sh2_device::dma_kludge_delegate(&_class::_method, #_class "::" #_method, this));
#define MCFG_SH2_FIFO_DATA_AVAIL_CB(_class, _method) \
downcast<sh2_device &>(*device).set_dma_fifo_data_available_callback(sh2_device::dma_fifo_data_available_delegate(&_class::_method, #_class "::" #_method, this));
#define MCFG_SH2_FTCSR_READ_CB(_class, _method) \
downcast<sh2_device &>(*device).set_ftcsr_read_callback(sh2_device::ftcsr_read_delegate(&_class::_method, #_class "::" #_method, this));
class sh2_frontend;
class sh2_device : public sh_common_execution
@ -74,9 +59,27 @@ public:
virtual ~sh2_device() override;
void set_is_slave(int slave) { m_is_slave = slave; }
template <typename Object> void set_dma_kludge_callback(Object &&cb) { m_dma_kludge_cb = std::forward<Object>(cb); }
template <class FunctionClass> void set_dma_kludge_callback(
int (FunctionClass::*callback)(uint32_t, uint32_t, uint32_t, int), const char *name)
{
set_dma_kludge_callback(dma_kludge_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
}
template <typename Object> void set_dma_fifo_data_available_callback(Object &&cb) { m_dma_fifo_data_available_cb = std::forward<Object>(cb); }
template <class FunctionClass> void set_dma_fifo_data_available_callback(
int (FunctionClass::*callback)(uint32_t, uint32_t, uint32_t, int), const char *name)
{
set_dma_fifo_data_available_callback(dma_fifo_data_available_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
}
template <typename Object> void set_ftcsr_read_callback(Object &&cb) { m_ftcsr_read_cb = std::forward<Object>(cb); }
template <class FunctionClass> void set_ftcsr_read_callback(void (FunctionClass::*callback)(uint32_t), const char *name)
{
set_ftcsr_read_callback(ftcsr_read_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
}
DECLARE_WRITE32_MEMBER( sh7604_w );
DECLARE_READ32_MEMBER( sh7604_r );

View File

@ -76,16 +76,7 @@ sh34_base_device::sh34_base_device(const machine_config &mconfig, device_type ty
: sh_common_execution(mconfig, type, tag, owner, clock, endianness, internal)
, m_program_config("program", endianness, 64, 32, 0, internal)
, m_io_config("io", endianness, 64, 8)
, c_md2(0)
, c_md1(0)
, c_md0(0)
, c_md6(0)
, c_md4(0)
, c_md3(0)
, c_md5(0)
, c_md7(0)
, c_md8(0)
, c_clock(0)
, m_clock(0)
, m_mmuhack(1)
, m_bigendian(endianness == ENDIANNESS_BIG)
{

View File

@ -155,41 +155,6 @@ struct sh4_utlb
typedef void (*sh4_ftcsr_callback)(uint32_t);
#define MCFG_SH4_MD0(_md0) \
downcast<sh34_base_device &>(*device).set_md0(_md0);
#define MCFG_SH4_MD1(_md1) \
downcast<sh34_base_device &>(*device).set_md1(_md1);
#define MCFG_SH4_MD2(_md2) \
downcast<sh34_base_device &>(*device).set_md2(_md2);
#define MCFG_SH4_MD3(_md3) \
downcast<sh34_base_device &>(*device).set_md3(_md3);
#define MCFG_SH4_MD4(_md4) \
downcast<sh34_base_device &>(*device).set_md4(_md4);
#define MCFG_SH4_MD5(_md5) \
downcast<sh34_base_device &>(*device).set_md5(_md5);
#define MCFG_SH4_MD6(_md6) \
downcast<sh34_base_device &>(*device).set_md6(_md6);
#define MCFG_SH4_MD7(_md7) \
downcast<sh34_base_device &>(*device).set_md7(_md7);
#define MCFG_SH4_MD8(_md8) \
downcast<sh34_base_device &>(*device).set_md8(_md8);
#define MCFG_SH4_CLOCK(_clock) \
downcast<sh34_base_device &>(*device).set_sh4_clock(_clock);
#define MCFG_MMU_HACK_TYPE(_hacktype) \
downcast<sh34_base_device &>(*device).set_mmu_hacktype(_hacktype);
class sh4_frontend;
class sh4be_frontend;
@ -197,16 +162,8 @@ class sh34_base_device : public sh_common_execution
{
public:
void set_md0(int md0) { c_md0 = md0; }
void set_md1(int md0) { c_md1 = md0; }
void set_md2(int md0) { c_md2 = md0; }
void set_md3(int md0) { c_md3 = md0; }
void set_md4(int md0) { c_md4 = md0; }
void set_md5(int md0) { c_md5 = md0; }
void set_md6(int md0) { c_md6 = md0; }
void set_md7(int md0) { c_md7 = md0; }
void set_md8(int md0) { c_md8 = md0; }
void set_sh4_clock(int clock) { c_clock = clock; }
void set_md(int bit, int md) { m_md[bit] = md; }
void set_sh4_clock(int clock) { m_clock = clock; }
void set_sh4_clock(const XTAL &xtal) { set_sh4_clock(xtal.value()); }
void set_mmu_hacktype(int hacktype) { m_mmuhack = hacktype; }
@ -328,16 +285,8 @@ protected:
uml::parameter m_fs_regmap[16];
uml::parameter m_fd_regmap[16];
int c_md2;
int c_md1;
int c_md0;
int c_md6;
int c_md4;
int c_md3;
int c_md5;
int c_md7;
int c_md8;
int c_clock;
int m_md[9];
int m_clock;
// hack 1 = Naomi hack, hack 2 = Work in Progress implementation
int m_mmuhack;

View File

@ -1218,42 +1218,42 @@ void sh34_base_device::execute_set_input(int irqline, int state) // set state of
void sh34_base_device::sh4_parse_configuration()
{
if(c_clock > 0)
if(m_clock > 0)
{
switch((c_md2 << 2) | (c_md1 << 1) | (c_md0))
switch((m_md[2] << 2) | (m_md[1] << 1) | (m_md[0]))
{
case 0:
m_cpu_clock = c_clock;
m_bus_clock = c_clock / 4;
m_pm_clock = c_clock / 4;
m_cpu_clock = m_clock;
m_bus_clock = m_clock / 4;
m_pm_clock = m_clock / 4;
break;
case 1:
m_cpu_clock = c_clock;
m_bus_clock = c_clock / 6;
m_pm_clock = c_clock / 6;
m_cpu_clock = m_clock;
m_bus_clock = m_clock / 6;
m_pm_clock = m_clock / 6;
break;
case 2:
m_cpu_clock = c_clock;
m_bus_clock = c_clock / 3;
m_pm_clock = c_clock / 6;
m_cpu_clock = m_clock;
m_bus_clock = m_clock / 3;
m_pm_clock = m_clock / 6;
break;
case 3:
m_cpu_clock = c_clock;
m_bus_clock = c_clock / 3;
m_pm_clock = c_clock / 6;
m_cpu_clock = m_clock;
m_bus_clock = m_clock / 3;
m_pm_clock = m_clock / 6;
break;
case 4:
m_cpu_clock = c_clock;
m_bus_clock = c_clock / 2;
m_pm_clock = c_clock / 4;
m_cpu_clock = m_clock;
m_bus_clock = m_clock / 2;
m_pm_clock = m_clock / 4;
break;
case 5:
m_cpu_clock = c_clock;
m_bus_clock = c_clock / 2;
m_pm_clock = c_clock / 4;
m_cpu_clock = m_clock;
m_bus_clock = m_clock / 2;
m_pm_clock = m_clock / 4;
break;
}
m_is_slave = (~(c_md7)) & 1;
m_is_slave = (~(m_md[7])) & 1;
}
else
{

View File

@ -27,6 +27,7 @@
// device type definition
DEFINE_DEVICE_TYPE(TICKET_DISPENSER, ticket_dispenser_device, "ticket_dispenser", "Ticket Dispenser")
DEFINE_DEVICE_TYPE(HOPPER, hopper_device, "coin_hopper", "Coin Hopper")
@ -38,22 +39,31 @@ DEFINE_DEVICE_TYPE(TICKET_DISPENSER, ticket_dispenser_device, "ticket_dispenser"
// ticket_dispenser_device - constructor
//-------------------------------------------------
ticket_dispenser_device::ticket_dispenser_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, TICKET_DISPENSER, tag, owner, clock),
m_motor_sense(TICKET_MOTOR_ACTIVE_LOW),
m_status_sense(TICKET_STATUS_ACTIVE_LOW),
m_period(attotime::from_msec(100)),
m_hopper_type(false),
m_motoron(0),
m_ticketdispensed(0),
m_ticketnotdispensed(0),
m_status(0),
m_power(0),
m_timer(nullptr),
m_output(*this, "led2") // TODO: probably shouldn't be hardcoded
ticket_dispenser_device::ticket_dispenser_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
, m_motor_sense(TICKET_MOTOR_ACTIVE_LOW)
, m_status_sense(TICKET_STATUS_ACTIVE_LOW)
, m_period(attotime::from_msec(100))
, m_hopper_type(false)
, m_motoron(0)
, m_ticketdispensed(0)
, m_ticketnotdispensed(0)
, m_status(0)
, m_power(0)
, m_timer(nullptr)
, m_output(*this, "led2") // TODO: probably shouldn't be hardcoded
{
}
ticket_dispenser_device::ticket_dispenser_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: ticket_dispenser_device(mconfig, TICKET_DISPENSER, tag, owner, clock)
{
}
hopper_device::hopper_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: ticket_dispenser_device(mconfig, HOPPER, tag, owner, clock)
{
}
//-------------------------------------------------
// ~ticket_dispenser_device - destructor

View File

@ -19,7 +19,7 @@
// device type definition
DECLARE_DEVICE_TYPE(TICKET_DISPENSER, ticket_dispenser_device)
DECLARE_DEVICE_TYPE(HOPPER, hopper_device)
//**************************************************************************
@ -60,7 +60,7 @@ class ticket_dispenser_device : public device_t
public:
// construction/destruction
ticket_dispenser_device(const machine_config &mconfig, const char *tag, device_t *owner, const attotime &period, uint8_t motor_sense, uint8_t status_sense)
: ticket_dispenser_device(mconfig, tag, owner, 0)
: ticket_dispenser_device(mconfig, tag, owner)
{
set_period(period);
set_senses(motor_sense, status_sense, false);
@ -82,6 +82,8 @@ public:
DECLARE_WRITE_LINE_MEMBER( motor_w );
protected:
ticket_dispenser_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock = 0);
// device-level overrides
virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;
@ -104,4 +106,17 @@ protected:
output_finder<> m_output;
};
class hopper_device : public ticket_dispenser_device
{
public:
// construction/destruction
hopper_device(const machine_config &mconfig, const char *tag, device_t *owner, const attotime &period, uint8_t motor_sense, uint8_t status_sense)
: hopper_device(mconfig, tag, owner)
{
set_period(period);
set_senses(motor_sense, status_sense, true);
}
hopper_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
#endif // MAME_MACHINE_TICKET_H

View File

@ -73,7 +73,7 @@ private:
u8 irl3pend0, irl3en0;
u8 irl3pend1, irl3en1;
required_device<cpu_device> m_maincpu;
required_device<sh4_device> m_maincpu;
required_device<ns16550_device> m_uart0;
required_device<ns16550_device> m_uart1;
required_device<eeprom_serial_93cxx_device> m_eeprom0;
@ -331,41 +331,41 @@ INPUT_PORTS_END
static constexpr XTAL ARISTMK6_CPU_CLOCK = 200_MHz_XTAL;
// ?
MACHINE_CONFIG_START(aristmk6_state::aristmk6)
void aristmk6_state::aristmk6(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", SH4LE, ARISTMK6_CPU_CLOCK)
MCFG_SH4_MD0(1)
MCFG_SH4_MD1(0)
MCFG_SH4_MD2(1)
MCFG_SH4_MD3(0)
MCFG_SH4_MD4(0)
MCFG_SH4_MD5(1)
MCFG_SH4_MD6(0)
MCFG_SH4_MD7(1)
MCFG_SH4_MD8(0)
MCFG_SH4_CLOCK(ARISTMK6_CPU_CLOCK)
MCFG_DEVICE_PROGRAM_MAP(aristmk6_map)
MCFG_DEVICE_IO_MAP(aristmk6_port)
MCFG_MMU_HACK_TYPE(2)
MCFG_CPU_FORCE_NO_DRC()
// MCFG_DEVICE_DISABLE()
SH4LE(config, m_maincpu, ARISTMK6_CPU_CLOCK);
m_maincpu->set_md(0, 1);
m_maincpu->set_md(1, 0);
m_maincpu->set_md(2, 1);
m_maincpu->set_md(3, 0);
m_maincpu->set_md(4, 0);
m_maincpu->set_md(5, 1);
m_maincpu->set_md(6, 0);
m_maincpu->set_md(7, 1);
m_maincpu->set_md(8, 0);
m_maincpu->set_sh4_clock(ARISTMK6_CPU_CLOCK);
m_maincpu->set_addrmap(AS_PROGRAM, &aristmk6_state::aristmk6_map);
m_maincpu->set_addrmap(AS_IO, &aristmk6_state::aristmk6_port);
m_maincpu->set_mmu_hacktype(2);
m_maincpu->set_force_no_drc(true);
// m_maincpu->set_disable();
MCFG_DEVICE_ADD( "uart0", NS16550, 8_MHz_XTAL )
MCFG_DEVICE_ADD( "uart1", NS16550, 8_MHz_XTAL )
NS16550(config, "uart0", 8_MHz_XTAL);
NS16550(config, "uart1", 8_MHz_XTAL);
EEPROM_93C56_16BIT(config, m_eeprom0).default_value(0xff);
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
MCFG_SCREEN_UPDATE_DRIVER(aristmk6_state, screen_update_aristmk6)
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(640, 480);
screen.set_visarea(0, 640-1, 0, 480-1);
screen.set_screen_update(FUNC(aristmk6_state::screen_update_aristmk6));
MCFG_PALETTE_ADD("palette", 0x1000)
MACHINE_CONFIG_END
PALETTE(config, m_palette, 0x1000);
}
#define ROM_LOAD32_WORD_BIOS(bios, name, offset, length, hash) \
ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_SKIP(2) | ROM_BIOS(bios))

View File

@ -571,56 +571,56 @@ INPUT_PORTS_END
#define ATV_CPU_CLOCK XTAL(33'000'000)*6
MACHINE_CONFIG_START(atvtrack_state::atvtrack)
void atvtrack_state::atvtrack(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", SH4LE, ATV_CPU_CLOCK)
MCFG_SH4_MD0(1)
MCFG_SH4_MD1(1)
MCFG_SH4_MD2(0)
MCFG_SH4_MD3(0)
MCFG_SH4_MD4(0)
MCFG_SH4_MD5(1)
MCFG_SH4_MD6(0)
MCFG_SH4_MD7(1)
MCFG_SH4_MD8(0)
MCFG_SH4_CLOCK(ATV_CPU_CLOCK)
MCFG_DEVICE_PROGRAM_MAP(atvtrack_main_map)
MCFG_DEVICE_IO_MAP(atvtrack_main_port)
MCFG_CPU_FORCE_NO_DRC()
SH4LE(config, m_maincpu, ATV_CPU_CLOCK);
m_maincpu->set_md(0, 1);
m_maincpu->set_md(1, 1);
m_maincpu->set_md(2, 0);
m_maincpu->set_md(3, 0);
m_maincpu->set_md(4, 0);
m_maincpu->set_md(5, 1);
m_maincpu->set_md(6, 0);
m_maincpu->set_md(7, 1);
m_maincpu->set_md(8, 0);
m_maincpu->set_sh4_clock(ATV_CPU_CLOCK);
m_maincpu->set_addrmap(AS_PROGRAM, &atvtrack_state::atvtrack_main_map);
m_maincpu->set_addrmap(AS_IO, &atvtrack_state::atvtrack_main_port);
m_maincpu->set_force_no_drc(true);
MCFG_DEVICE_ADD("subcpu", SH4LE, ATV_CPU_CLOCK)
MCFG_SH4_MD0(1)
MCFG_SH4_MD1(1)
MCFG_SH4_MD2(0)
MCFG_SH4_MD3(0)
MCFG_SH4_MD4(0)
MCFG_SH4_MD5(1)
MCFG_SH4_MD6(0)
MCFG_SH4_MD7(1)
MCFG_SH4_MD8(0)
MCFG_SH4_CLOCK(ATV_CPU_CLOCK)
MCFG_DEVICE_PROGRAM_MAP(atvtrack_sub_map)
MCFG_DEVICE_IO_MAP(atvtrack_sub_port)
MCFG_CPU_FORCE_NO_DRC()
SH4LE(config, m_subcpu, ATV_CPU_CLOCK);
m_subcpu->set_md(0, 1);
m_subcpu->set_md(1, 1);
m_subcpu->set_md(2, 0);
m_subcpu->set_md(3, 0);
m_subcpu->set_md(4, 0);
m_subcpu->set_md(5, 1);
m_subcpu->set_md(6, 0);
m_subcpu->set_md(7, 1);
m_subcpu->set_md(8, 0);
m_subcpu->set_sh4_clock(ATV_CPU_CLOCK);
m_subcpu->set_addrmap(AS_PROGRAM, &atvtrack_state::atvtrack_sub_map);
m_subcpu->set_addrmap(AS_IO, &atvtrack_state::atvtrack_sub_port);
m_subcpu->set_force_no_drc(true);
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
MCFG_SCREEN_UPDATE_DRIVER(atvtrack_state, screen_update_atvtrack)
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(640, 480);
screen.set_visarea(0, 640-1, 0, 480-1);
screen.set_screen_update(FUNC(atvtrack_state::screen_update_atvtrack));
MCFG_PALETTE_ADD("palette", 0x1000)
MACHINE_CONFIG_END
PALETTE(config, "palette", 0x1000);
}
MACHINE_CONFIG_START(smashdrv_state::smashdrv)
void smashdrv_state::smashdrv(machine_config &config)
{
atvtrack(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(smashdrv_main_map)
MCFG_DEVICE_IO_MAP(smashdrv_main_port)
MACHINE_CONFIG_END
m_maincpu->set_addrmap(AS_PROGRAM, &smashdrv_state::smashdrv_main_map);
m_maincpu->set_addrmap(AS_IO, &smashdrv_state::smashdrv_main_port);
}
ROM_START( atvtrack )

View File

@ -2493,25 +2493,26 @@ void cps3_state::simm6_128mbit(machine_config &config)
FUJITSU_29F016A(config, "simm6.7");
}
MACHINE_CONFIG_START(cps3_state::cps3)
void cps3_state::cps3(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", SH2, 6250000*4) // external clock is 6.25 Mhz, it sets the internal multiplier to 4x (this should probably be handled in the core..)
MCFG_DEVICE_PROGRAM_MAP(cps3_map)
MCFG_DEVICE_OPCODES_MAP(decrypted_opcodes_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cps3_state, cps3_vbl_interrupt)
MCFG_DEVICE_PERIODIC_INT_DRIVER(cps3_state, cps3_other_interrupt, 80) /* ?source? */
MCFG_SH2_DMA_KLUDGE_CB(cps3_state, dma_callback)
SH2(config, m_maincpu, 6250000*4); // external clock is 6.25 Mhz, it sets the internal multiplier to 4x (this should probably be handled in the core..)
m_maincpu->set_addrmap(AS_PROGRAM, &cps3_state::cps3_map);
m_maincpu->set_addrmap(AS_OPCODES, &cps3_state::decrypted_opcodes_map);
m_maincpu->set_vblank_int("screen", FUNC(cps3_state::cps3_vbl_interrupt));
m_maincpu->set_periodic_int(FUNC(cps3_state::cps3_other_interrupt), attotime::from_hz(80)); /* ?source? */
m_maincpu->set_dma_kludge_callback(FUNC(cps3_state::dma_callback));
MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0)
MCFG_SCSIDEV_ADD("scsi:" SCSI_PORT_DEVICE1, "cdrom", SCSICD, SCSI_ID_1)
scsi_port_device &scsi(SCSI_PORT(config, "scsi"));
scsi.set_slot_device(1, "cdrom", SCSICD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_1));
wd33c93_device& wd33c93(WD33C93(config, "wd33c93"));
wd33c93.set_scsi_port("scsi");
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL(60'000'000)/8, 486, 0, 384, 259, 0, 224)
MCFG_SCREEN_UPDATE_DRIVER(cps3_state, screen_update_cps3)
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(XTAL(60'000'000)/8, 486, 0, 384, 259, 0, 224);
screen.set_screen_update(FUNC(cps3_state::screen_update_cps3));
/*
Measured clocks:
V = 59.5992Hz
@ -2524,56 +2525,61 @@ MACHINE_CONFIG_START(cps3_state::cps3)
*/
NVRAM(config, "eeprom", nvram_device::DEFAULT_ALL_0);
MCFG_PALETTE_ADD("palette", 0x10000) // actually 0x20000 ...
PALETTE(config, m_palette, 0x10000); // actually 0x20000 ...
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty)
GFXDECODE(config, m_gfxdecode, m_palette, gfxdecode_device::empty);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
MCFG_DEVICE_ADD("cps3sound", CPS3, MASTER_CLOCK / 3)
MCFG_SOUND_ROUTE(1, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(0, "rspeaker", 1.0)
MACHINE_CONFIG_END
CPS3(config, m_cps3sound, MASTER_CLOCK / 3);
m_cps3sound->add_route(1, "lspeaker", 1.0);
m_cps3sound->add_route(0, "rspeaker", 1.0);
}
/* individual configs for each machine, depending on the SIMMs installed */
MACHINE_CONFIG_START(cps3_state::redearth)
void cps3_state::redearth(machine_config &config)
{
cps3(config);
simm1_64mbit(config);
simm3_128mbit(config);
simm4_128mbit(config);
simm5_32mbit(config);
MACHINE_CONFIG_END
}
MACHINE_CONFIG_START(cps3_state::sfiii)
void cps3_state::sfiii(machine_config &config)
{
cps3(config);
simm1_64mbit(config);
simm3_128mbit(config);
simm4_128mbit(config);
simm5_32mbit(config);
MACHINE_CONFIG_END
}
MACHINE_CONFIG_START(cps3_state::sfiii2)
void cps3_state::sfiii2(machine_config &config)
{
cps3(config);
simm1_64mbit(config);
simm2_64mbit(config);
simm3_128mbit(config);
simm4_128mbit(config);
simm5_128mbit(config);
MACHINE_CONFIG_END
}
MACHINE_CONFIG_START(cps3_state::jojo)
void cps3_state::jojo(machine_config &config)
{
cps3(config);
simm1_64mbit(config);
simm2_64mbit(config);
simm3_128mbit(config);
simm4_128mbit(config);
simm5_32mbit(config);
MACHINE_CONFIG_END
}
MACHINE_CONFIG_START(cps3_state::sfiii3)
void cps3_state::sfiii3(machine_config &config)
{
cps3(config);
simm1_64mbit(config);
simm2_64mbit(config);
@ -2581,16 +2587,17 @@ MACHINE_CONFIG_START(cps3_state::sfiii3)
simm4_128mbit(config);
simm5_128mbit(config);
simm6_128mbit(config);
MACHINE_CONFIG_END
}
MACHINE_CONFIG_START(cps3_state::jojoba)
void cps3_state::jojoba(machine_config &config)
{
cps3(config);
simm1_64mbit(config);
simm2_64mbit(config);
simm3_128mbit(config);
simm4_128mbit(config);
simm5_128mbit(config);
MACHINE_CONFIG_END
}
/* CD sets - use CD BIOS roms */

View File

@ -457,69 +457,66 @@ void cv1k_state::machine_reset()
m_blitter->reset();
}
MACHINE_CONFIG_START(cv1k_state::cv1k)
void cv1k_state::cv1k(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", SH3BE, 12.8_MHz_XTAL*8) // 102.4MHz
MCFG_SH4_MD0(0) // none of this is verified
MCFG_SH4_MD1(0) // (the sh3 is different to the sh4 anyway, should be changed)
MCFG_SH4_MD2(0)
MCFG_SH4_MD3(0)
MCFG_SH4_MD4(0)
MCFG_SH4_MD5(1)
MCFG_SH4_MD6(0)
MCFG_SH4_MD7(1)
MCFG_SH4_MD8(0)
MCFG_SH4_CLOCK(12.8_MHz_XTAL*8) // 102.4MHz
MCFG_DEVICE_PROGRAM_MAP(cv1k_map)
MCFG_DEVICE_IO_MAP(cv1k_port)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cv1k_state, irq2_line_hold)
SH3BE(config, m_maincpu, 12.8_MHz_XTAL*8); // 102.4MHz
m_maincpu->set_md(0, 0); // none of this is verified
m_maincpu->set_md(1, 0); // (the sh3 is different to the sh4 anyway, should be changed)
m_maincpu->set_md(2, 0);
m_maincpu->set_md(3, 0);
m_maincpu->set_md(4, 0);
m_maincpu->set_md(5, 1);
m_maincpu->set_md(6, 0);
m_maincpu->set_md(7, 1);
m_maincpu->set_md(8, 0);
m_maincpu->set_sh4_clock(12.8_MHz_XTAL*8); // 102.4MHz
m_maincpu->set_addrmap(AS_PROGRAM, &cv1k_state::cv1k_map);
m_maincpu->set_addrmap(AS_IO, &cv1k_state::cv1k_port);
m_maincpu->set_vblank_int("screen", FUNC(cv1k_state::irq2_line_hold));
RTC9701(config, m_eeprom);
SERFLASH(config, m_serflash, 0);
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(0x200, 0x200)
MCFG_SCREEN_VISIBLE_AREA(0, 0x140-1, 0, 0xf0-1)
MCFG_SCREEN_UPDATE_DRIVER(cv1k_state, screen_update)
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(0x200, 0x200);
screen.set_visarea(0, 0x140-1, 0, 0xf0-1);
screen.set_screen_update(FUNC(cv1k_state::screen_update));
MCFG_PALETTE_ADD("palette", 0x10000)
PALETTE(config, "palette", 0x10000);
SPEAKER(config, "mono").front_center();
MCFG_DEVICE_ADD("ymz770", YMZ770, 16.384_MHz_XTAL)
MCFG_SOUND_ROUTE(1, "mono", 1.0) // only Right output used, Left is not connected
YMZ770(config, "ymz770", 16.384_MHz_XTAL).add_route(1, "mono", 1.0); // only Right output used, Left is not connected
MCFG_EPIC12_ADD("blitter")
MCFG_EPIC12_SET_MAINRAMSIZE(0x800000)
MACHINE_CONFIG_END
EPIC12(config, m_blitter, 0);
m_blitter->set_mainramsize(0x800000);
}
MACHINE_CONFIG_START(cv1k_state::cv1k_d)
void cv1k_state::cv1k_d(machine_config &config)
{
cv1k(config);
/* basic machine hardware */
MCFG_DEVICE_REMOVE("maincpu")
SH3BE(config.replace(), m_maincpu, 12.8_MHz_XTAL*8); // 102.4MHz
m_maincpu->set_md(0, 0); // none of this is verified
m_maincpu->set_md(1, 0); // (the sh3 is different to the sh4 anyway, should be changed)
m_maincpu->set_md(2, 0);
m_maincpu->set_md(3, 0);
m_maincpu->set_md(4, 0);
m_maincpu->set_md(5, 1);
m_maincpu->set_md(6, 0);
m_maincpu->set_md(7, 1);
m_maincpu->set_md(8, 0);
m_maincpu->set_sh4_clock(12.8_MHz_XTAL*8); // 102.4MHz
m_maincpu->set_addrmap(AS_PROGRAM, &cv1k_state::cv1k_d_map);
m_maincpu->set_addrmap(AS_IO, &cv1k_state::cv1k_port);
m_maincpu->set_vblank_int("screen", FUNC(cv1k_state::irq2_line_hold));
MCFG_DEVICE_ADD("maincpu", SH3BE, 12.8_MHz_XTAL*8) // 102.4MHz
MCFG_SH4_MD0(0) // none of this is verified
MCFG_SH4_MD1(0) // (the sh3 is different to the sh4 anyway, should be changed)
MCFG_SH4_MD2(0)
MCFG_SH4_MD3(0)
MCFG_SH4_MD4(0)
MCFG_SH4_MD5(1)
MCFG_SH4_MD6(0)
MCFG_SH4_MD7(1)
MCFG_SH4_MD8(0)
MCFG_SH4_CLOCK(12.8_MHz_XTAL*8) // 102.4MHz
MCFG_DEVICE_PROGRAM_MAP(cv1k_d_map)
MCFG_DEVICE_IO_MAP(cv1k_port)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cv1k_state, irq2_line_hold)
MCFG_DEVICE_MODIFY("blitter")
MCFG_EPIC12_SET_MAINRAMSIZE(0x1000000)
MACHINE_CONFIG_END
m_blitter->set_mainramsize(0x1000000);
}

View File

@ -583,19 +583,19 @@ void dc_cons_state::gdrom_config(device_t *device)
MACHINE_CONFIG_START(dc_cons_state::dc)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", SH4LE, CPU_CLOCK)
MCFG_SH4_MD0(1)
MCFG_SH4_MD1(0)
MCFG_SH4_MD2(1)
MCFG_SH4_MD3(0)
MCFG_SH4_MD4(0)
MCFG_SH4_MD5(1)
MCFG_SH4_MD6(0)
MCFG_SH4_MD7(1)
MCFG_SH4_MD8(0)
MCFG_SH4_CLOCK(CPU_CLOCK)
MCFG_DEVICE_PROGRAM_MAP(dc_map)
MCFG_DEVICE_IO_MAP(dc_port)
SH4LE(config, m_maincpu, CPU_CLOCK);
m_maincpu->set_md(0, 1);
m_maincpu->set_md(1, 0);
m_maincpu->set_md(2, 1);
m_maincpu->set_md(3, 0);
m_maincpu->set_md(4, 0);
m_maincpu->set_md(5, 1);
m_maincpu->set_md(6, 0);
m_maincpu->set_md(7, 1);
m_maincpu->set_md(8, 0);
m_maincpu->set_sh4_clock(CPU_CLOCK);
m_maincpu->set_addrmap(AS_PROGRAM, &dc_cons_state::dc_map);
m_maincpu->set_addrmap(AS_IO, &dc_cons_state::dc_port);
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dc_state, dc_scanline, "screen", 0, 1)

View File

@ -393,17 +393,23 @@ class hikaru_state : public driver_device
{
public:
hikaru_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu") { }
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_slave(*this, "slave")
{ }
void hikaru(machine_config &config);
private:
virtual void video_start() override;
uint32_t screen_update_hikaru(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu;
void hikaru_map(address_map &map);
void hikaru_map_slave(address_map &map);
uint32_t screen_update_hikaru(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
required_device<sh4_device> m_maincpu;
required_device<sh4_device> m_slave;
};
void hikaru_state::video_start()
@ -490,47 +496,43 @@ void hikaru_state::hikaru_map_slave(address_map &map)
}
MACHINE_CONFIG_START(hikaru_state::hikaru)
void hikaru_state::hikaru(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", SH4LE, CPU_CLOCK)
// MCFG_SH4_MD0(1)
// MCFG_SH4_MD1(0)
// MCFG_SH4_MD2(1)
// MCFG_SH4_MD3(0)
// MCFG_SH4_MD4(0)
// MCFG_SH4_MD5(1)
// MCFG_SH4_MD6(0)
// MCFG_SH4_MD7(1)
// MCFG_SH4_MD8(0)
// MCFG_SH4_CLOCK(CPU_CLOCK)
MCFG_DEVICE_PROGRAM_MAP(hikaru_map)
// MCFG_DEVICE_IO_MAP(hikaru_port)
MCFG_CPU_FORCE_NO_DRC()
// MCFG_CPU_VBLANK_INT("screen", hikaru,vblank)
SH4LE(config, m_maincpu, CPU_CLOCK);
// m_maincpu->set_md(0, 1);
// m_maincpu->set_md(1, 0);
// m_maincpu->set_md(2, 1);
// m_maincpu->set_md(3, 0);
// m_maincpu->set_md(4, 0);
// m_maincpu->set_md(5, 1);
// m_maincpu->set_md(6, 0);
// m_maincpu->set_md(7, 1);
// m_maincpu->set_md(8, 0);
// m_maincpu->set_sh4_clock(CPU_CLOCK);
m_maincpu->set_addrmap(AS_PROGRAM, &hikaru_state::hikaru_map);
// m_maincpu->set_addrmap(AS_IO, &hikaru_state::hikaru_port);
m_maincpu->set_force_no_drc(true);
// m_maincpu->set_vblank_int("screen", FUNC(hikaru_state::vblank));
MCFG_DEVICE_ADD("slave", SH4LE, CPU_CLOCK)
MCFG_DEVICE_PROGRAM_MAP(hikaru_map_slave)
MCFG_CPU_FORCE_NO_DRC()
// MCFG_MACHINE_START_OVERRIDE(hikaru_state, hikaru )
// MCFG_MACHINE_RESET_OVERRIDE(hikaru_state, hikaru )
SH4LE(config, m_slave, CPU_CLOCK);
m_slave->set_addrmap(AS_PROGRAM, &hikaru_state::hikaru_map_slave);
m_slave->set_force_no_drc(true);
// MCFG_NVRAM_HANDLER(hikaru_eeproms)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
MCFG_SCREEN_UPDATE_DRIVER(hikaru_state, screen_update_hikaru)
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_size(640, 480);
screen.set_visarea(0, 640-1, 0, 480-1);
screen.set_screen_update(FUNC(hikaru_state::screen_update_hikaru));
MCFG_PALETTE_ADD("palette", 0x1000)
PALETTE(config, "palette", 0x1000);
// SPEAKER(config, "lspeaker").front_left();
// SPEAKER(config, "rspeaker").front_right();
// SPEAKER(config, "lspeaker").front_left();
// SPEAKER(config, "rspeaker").front_right();
// MCFG_DEVICE_ADD("aica", AICA, (XTAL(33'868'800)*2)/3) // 67.7376MHz(2*33.8688MHz), div 3 for audio block // 33.8688MHz on Board
// MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
@ -539,7 +541,7 @@ MACHINE_CONFIG_START(hikaru_state::hikaru)
// MCFG_DEVICE_ADD("aica_pcb", AICA, (XTAL(33'868'800)*2)/3) // AICA PCB
// MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
// MCFG_SOUND_ROUTE(1, "rspeaker", 2.0)
MACHINE_CONFIG_END
}
#define ROM_LOAD16_WORD_SWAP_BIOS(bios,name,offset,length,hash) \

View File

@ -2898,17 +2898,17 @@ MACHINE_RESET_MEMBER(naomi_state,naomi)
// TODO: merge with Dreamcast base machine
MACHINE_CONFIG_START(dc_state::naomi_aw_base)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", SH4LE, CPU_CLOCK) // SH4!!!
MCFG_SH4_MD0(1)
MCFG_SH4_MD1(0)
MCFG_SH4_MD2(1)
MCFG_SH4_MD3(0)
MCFG_SH4_MD4(0)
MCFG_SH4_MD5(1)
MCFG_SH4_MD6(0)
MCFG_SH4_MD7(1)
MCFG_SH4_MD8(0)
MCFG_SH4_CLOCK(CPU_CLOCK)
SH4LE(config, m_maincpu, CPU_CLOCK);
m_maincpu->set_md(0, 1);
m_maincpu->set_md(1, 0);
m_maincpu->set_md(2, 1);
m_maincpu->set_md(3, 0);
m_maincpu->set_md(4, 0);
m_maincpu->set_md(5, 1);
m_maincpu->set_md(6, 0);
m_maincpu->set_md(7, 1);
m_maincpu->set_md(8, 0);
m_maincpu->set_sh4_clock(CPU_CLOCK);
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dc_state, dc_scanline, "screen", 0, 1)

View File

@ -790,21 +790,21 @@ uint8_t sat_console_state::smpc_direct_mode(uint16_t in_value,bool which)
return 0x80 | 0x10 | ((in_value >> shift_bit[hshake]) & 0xf);
}
MACHINE_CONFIG_START(sat_console_state::saturn)
void sat_console_state::saturn(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", SH2, MASTER_CLOCK_352/2) // 28.6364 MHz
MCFG_DEVICE_PROGRAM_MAP(saturn_mem)
MCFG_SH2_IS_SLAVE(0)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", sat_console_state, saturn_scanline, "screen", 0, 1)
SH2(config, m_maincpu, MASTER_CLOCK_352/2); // 28.6364 MHz
m_maincpu->set_addrmap(AS_PROGRAM, &sat_console_state::saturn_mem);
m_maincpu->set_is_slave(0);
TIMER(config, "scantimer").configure_scanline(FUNC(sat_console_state::saturn_scanline), "screen", 0, 1);
MCFG_DEVICE_ADD("slave", SH2, MASTER_CLOCK_352/2) // 28.6364 MHz
MCFG_DEVICE_PROGRAM_MAP(saturn_mem)
MCFG_SH2_IS_SLAVE(1)
MCFG_TIMER_DRIVER_ADD_SCANLINE("slave_scantimer", sat_console_state, saturn_slave_scanline, "screen", 0, 1)
SH2(config, m_slave, MASTER_CLOCK_352/2); // 28.6364 MHz
m_slave->set_addrmap(AS_PROGRAM, &sat_console_state::saturn_mem);
m_slave->set_is_slave(1);
TIMER(config, "slave_scantimer").configure_scanline(FUNC(sat_console_state::saturn_slave_scanline), "screen", 0, 1);
MCFG_DEVICE_ADD("audiocpu", M68000, 11289600) //256 x 44100 Hz = 11.2896 MHz
MCFG_DEVICE_PROGRAM_MAP(sound_mem)
M68000(config, m_audiocpu, 11289600); //256 x 44100 Hz = 11.2896 MHz
m_audiocpu->set_addrmap(AS_PROGRAM, &sat_console_state::sound_mem);
SEGA_SCU(config, m_scu, 0);
m_scu->set_hostcpu(m_maincpu);
@ -834,12 +834,13 @@ MACHINE_CONFIG_START(sat_console_state::saturn)
NVRAM(config, "nvram").set_custom_handler(FUNC(sat_console_state::nvram_init));
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK_320/8, 427, 0, 320, 263, 0, 224)
MCFG_SCREEN_UPDATE_DRIVER(sat_console_state, screen_update_stv_vdp2)
MCFG_PALETTE_ADD("palette", 2048+(2048*2))//standard palette + extra memory for rgb brightness.
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(MASTER_CLOCK_320/8, 427, 0, 320, 263, 0, 224);
m_screen->set_screen_update(FUNC(sat_console_state::screen_update_stv_vdp2));
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_stv)
PALETTE(config, m_palette, 2048+(2048*2)); //standard palette + extra memory for rgb brightness.
GFXDECODE(config, m_gfxdecode, m_palette, gfx_stv);
MCFG_VIDEO_START_OVERRIDE(sat_console_state,stv_vdp2)
@ -853,13 +854,13 @@ MACHINE_CONFIG_START(sat_console_state::saturn)
m_scsp->add_route(0, "lspeaker", 1.0);
m_scsp->add_route(1, "rspeaker", 1.0);
MCFG_DEVICE_ADD("stvcd", STVCD, 0)
MCFG_SOUND_ROUTE(0, "scsp", 1.0, 0)
MCFG_SOUND_ROUTE(1, "scsp", 1.0, 1)
stvcd_device &stvcd(STVCD(config, "stvcd", 0));
stvcd.add_route(0, "scsp", 1.0, 0);
stvcd.add_route(1, "scsp", 1.0, 1);
MCFG_SATURN_CONTROL_PORT_ADD("ctrl1", saturn_controls, "joypad")
MCFG_SATURN_CONTROL_PORT_ADD("ctrl2", saturn_controls, "joypad")
MACHINE_CONFIG_END
SATURN_CONTROL_PORT(config, "ctrl1", saturn_controls, "joypad");
SATURN_CONTROL_PORT(config, "ctrl2", saturn_controls, "joypad");
}
static void saturn_cart(device_slot_interface &device)
{

View File

@ -47,7 +47,7 @@ private:
void io_map(address_map &map);
void mem_map(address_map &map);
required_device<cpu_device> m_maincpu;
required_device<sh4_device> m_maincpu;
};
@ -68,24 +68,24 @@ void sh4robot_state::io_map(address_map &map)
static INPUT_PORTS_START( sh4robot )
INPUT_PORTS_END
MACHINE_CONFIG_START(sh4robot_state::sh4robot)
void sh4robot_state::sh4robot(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", SH4LE, 200000000) // SH7750
MCFG_SH4_MD0(1)
MCFG_SH4_MD1(0)
MCFG_SH4_MD2(1)
MCFG_SH4_MD3(0)
MCFG_SH4_MD4(0)
MCFG_SH4_MD5(1)
MCFG_SH4_MD6(0)
MCFG_SH4_MD7(1)
MCFG_SH4_MD8(0)
MCFG_SH4_CLOCK(200000000)
MCFG_DEVICE_PROGRAM_MAP(mem_map)
MCFG_DEVICE_IO_MAP(io_map)
MCFG_CPU_FORCE_NO_DRC()
MACHINE_CONFIG_END
SH4LE(config, m_maincpu, 200000000); // SH7750
m_maincpu->set_md(0, 1);
m_maincpu->set_md(1, 0);
m_maincpu->set_md(2, 1);
m_maincpu->set_md(3, 0);
m_maincpu->set_md(4, 0);
m_maincpu->set_md(5, 1);
m_maincpu->set_md(6, 0);
m_maincpu->set_md(7, 1);
m_maincpu->set_md(8, 0);
m_maincpu->set_sh4_clock(200000000);
m_maincpu->set_addrmap(AS_PROGRAM, &sh4robot_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &sh4robot_state::io_map);
m_maincpu->set_force_no_drc(true);
}
/* ROM definition */
ROM_START( sh4robot )

View File

@ -1122,21 +1122,21 @@ WRITE8_MEMBER( stv_state::pdr2_output_w )
}
MACHINE_CONFIG_START(stv_state::stv)
void stv_state::stv(machine_config &config)
{
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", SH2, MASTER_CLOCK_352/2) // 28.6364 MHz
MCFG_DEVICE_PROGRAM_MAP(stv_mem)
MCFG_SH2_IS_SLAVE(0)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", stv_state, saturn_scanline, "screen", 0, 1)
SH2(config, m_maincpu, MASTER_CLOCK_352/2); // 28.6364 MHz
m_maincpu->set_addrmap(AS_PROGRAM, &stv_state::stv_mem);
m_maincpu->set_is_slave(0);
TIMER(config, "scantimer").configure_scanline(FUNC(stv_state::saturn_scanline), "screen", 0, 1);
MCFG_DEVICE_ADD("slave", SH2, MASTER_CLOCK_352/2) // 28.6364 MHz
MCFG_DEVICE_PROGRAM_MAP(stv_mem)
MCFG_SH2_IS_SLAVE(1)
MCFG_TIMER_DRIVER_ADD_SCANLINE("slave_scantimer", stv_state, saturn_slave_scanline, "screen", 0, 1)
SH2(config, m_slave, MASTER_CLOCK_352/2); // 28.6364 MHz
m_slave->set_addrmap(AS_PROGRAM, &stv_state::stv_mem);
m_slave->set_is_slave(1);
TIMER(config, "slave_scantimer").configure_scanline(FUNC(stv_state::saturn_slave_scanline), "screen", 0, 1);
MCFG_DEVICE_ADD("audiocpu", M68000, 11289600) //11.2896 MHz
MCFG_DEVICE_PROGRAM_MAP(sound_mem)
M68000(config, m_audiocpu, 11289600); //11.2896 MHz
m_audiocpu->set_addrmap(AS_PROGRAM, &stv_state::sound_mem);
SEGA_SCU(config, m_scu, 0);
m_scu->set_hostcpu(m_maincpu);
@ -1163,13 +1163,13 @@ MACHINE_CONFIG_START(stv_state::stv)
EEPROM_93C46_16BIT(config, "eeprom"); /* Actually AK93C45F */
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK_320/8, 427, 0, 352, 263, 0, 224)
MCFG_SCREEN_UPDATE_DRIVER(stv_state, screen_update_stv_vdp2)
MCFG_PALETTE_ADD("palette", 2048+(2048*2))//standard palette + extra memory for rgb brightness.
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
m_screen->set_raw(MASTER_CLOCK_320/8, 427, 0, 352, 263, 0, 224);
m_screen->set_screen_update(FUNC(stv_state::screen_update_stv_vdp2));
PALETTE(config, m_palette, 2048+(2048*2)); //standard palette + extra memory for rgb brightness.
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_stv)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_stv);
MCFG_VIDEO_START_OVERRIDE(stv_state,stv_vdp2)
@ -1182,26 +1182,26 @@ MACHINE_CONFIG_START(stv_state::stv)
m_scsp->main_irq_cb().set(m_scu, FUNC(sega_scu_device::sound_req_w));
m_scsp->add_route(0, "lspeaker", 1.0);
m_scsp->add_route(1, "rspeaker", 1.0);
MACHINE_CONFIG_END
}
MACHINE_CONFIG_START(stv_state::stv_5881)
void stv_state::stv_5881(machine_config &config)
{
stv(config);
MCFG_DEVICE_ADD("315_5881", SEGA315_5881_CRYPT, 0)
MCFG_SET_READ_CALLBACK(stv_state, crypt_read_callback)
MACHINE_CONFIG_END
SEGA315_5881_CRYPT(config, m_cryptdevice, 0);
m_cryptdevice->set_read_cb(FUNC(stv_state::crypt_read_callback));
}
MACHINE_CONFIG_START(stv_state::stvcd)
void stv_state::stvcd(machine_config &config)
{
stv(config);
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(stvcd_mem)
MCFG_DEVICE_MODIFY("slave")
MCFG_DEVICE_PROGRAM_MAP(stvcd_mem)
m_maincpu->set_addrmap(AS_PROGRAM, &stv_state::stvcd_mem);
m_slave->set_addrmap(AS_PROGRAM, &stv_state::stvcd_mem);
MCFG_DEVICE_ADD("stvcd", STVCD, 0)
MCFG_SOUND_ROUTE(0, "scsp", 1.0, 0)
MCFG_SOUND_ROUTE(1, "scsp", 1.0, 1)
MACHINE_CONFIG_END
stvcd_device &stvcd(STVCD(config, "stvcd", 0));
stvcd.add_route(0, "scsp", 1.0, 0);
stvcd.add_route(1, "scsp", 1.0, 1);
}
void stv_state::sega5838_map(address_map &map)
@ -1209,13 +1209,13 @@ void stv_state::sega5838_map(address_map &map)
map(0x000000, 0x7fffff).bankr("protbank");
}
MACHINE_CONFIG_START(stv_state::stv_5838)
void stv_state::stv_5838(machine_config &config)
{
stv(config);
MCFG_DEVICE_ADD("315_5838", SEGA315_5838_COMP, 0)
MCFG_DEVICE_ADDRESS_MAP(0, sega5838_map)
MACHINE_CONFIG_END
SEGA315_5838_COMP(config, m_5838crypt, 0);
m_5838crypt->set_addrmap(0, stv_state::sega5838_map);
}
/*
@ -1233,35 +1233,37 @@ WRITE32_MEMBER( stv_state::batmanfr_sound_comms_w )
}
MACHINE_CONFIG_START(stv_state::batmanfr)
void stv_state::batmanfr(machine_config &config)
{
stv(config);
MCFG_DEVICE_ADD("rax", ACCLAIM_RAX, 0)
MACHINE_CONFIG_END
ACCLAIM_RAX(config, "rax", 0);
}
#define STV_CARTSLOT_ADD(_tag, _load) \
GENERIC_CARTSLOT(config, _tag, generic_plain_slot, "stv_cart") \
.set_device_load(device_image_load_delegate(&stv_state::device_image_load_##_load, this));
#define MCFG_STV_CARTSLOT_ADD(_tag, _load) \
MCFG_GENERIC_CARTSLOT_ADD(_tag, generic_plain_slot, "stv_cart") \
MCFG_GENERIC_LOAD(stv_state, _load)
void stv_state::stv_cartslot(machine_config &config)
{
STV_CARTSLOT_ADD("stv_slot1", stv_cart1);
STV_CARTSLOT_ADD("stv_slot2", stv_cart2);
STV_CARTSLOT_ADD("stv_slot3", stv_cart3);
STV_CARTSLOT_ADD("stv_slot4", stv_cart4);
MACHINE_CONFIG_START(stv_state::stv_cartslot)
SOFTWARE_LIST(config, "cart_list").set_original("stv");
}
MCFG_STV_CARTSLOT_ADD("stv_slot1", stv_cart1)
MCFG_STV_CARTSLOT_ADD("stv_slot2", stv_cart2)
MCFG_STV_CARTSLOT_ADD("stv_slot3", stv_cart3)
MCFG_STV_CARTSLOT_ADD("stv_slot4", stv_cart4)
MCFG_SOFTWARE_LIST_ADD("cart_list","stv")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(stv_state::stv_slot)
void stv_state::stv_slot(machine_config &config)
{
stv(config);
stv_cartslot(config);
MACHINE_CONFIG_END
}
MACHINE_CONFIG_START(stv_state::hopper)
void stv_state::hopper(machine_config &config)
{
stv(config);
MCFG_HOPPER_ADD("hopper", attotime::from_msec(100), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH)
MACHINE_CONFIG_END
HOPPER(config, m_hopper, attotime::from_msec(100), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH);
}
MACHINE_RESET_MEMBER(stv_state,stv)
{

View File

@ -292,7 +292,7 @@ ROM_END
void vegaeo_state::init_vegaeo()
{
// Set up the QS1000 program ROM banking, taking care not to overlap the internal RAM
machine().device("qs1000:cpu")->memory().space(AS_IO).install_read_bank(0x0100, 0xffff, "bank");
m_qs1000->subdevice<i8052_device>("cpu")->space(AS_IO).install_read_bank(0x0100, 0xffff, "bank");
membank("qs1000:bank")->configure_entries(0, 8, memregion("qs1000:cpu")->base()+0x100, 0x10000);
init_speedup();

View File

@ -55,17 +55,17 @@ INPUT_PORTS_END
MACHINE_CONFIG_START(system_board_y2_state::system_board_y2)
/*
MCFG_CPU_ADD("maincpu", SH4LE, 266666666)
MCFG_SH4_MD0(1)
MCFG_SH4_MD1(0)
MCFG_SH4_MD2(1)
MCFG_SH4_MD3(0)
MCFG_SH4_MD4(0)
MCFG_SH4_MD5(1)
MCFG_SH4_MD6(0)
MCFG_SH4_MD7(1)
MCFG_SH4_MD8(0)
MCFG_SH4_CLOCK(CPU_CLOCK)
SH4LE(config, m_maincpu, 266666666);
m_maincpu->set_md(0, 1);
m_maincpu->set_md(1, 0);
m_maincpu->set_md(2, 1);
m_maincpu->set_md(3, 0);
m_maincpu->set_md(4, 0);
m_maincpu->set_md(5, 1);
m_maincpu->set_md(6, 0);
m_maincpu->set_md(7, 1);
m_maincpu->set_md(8, 0);
m_maincpu->set_sh4_clock(CPU_CLOCK);
*/
MCFG_SCREEN_ADD("screen", RASTER)

View File

@ -12,12 +12,12 @@ class eolith_state : public driver_device
public:
eolith_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_qs1000(*this, "qs1000")
, m_eepromoutport(*this, "EEPROMOUT")
, m_maincpu(*this, "maincpu")
, m_soundcpu(*this, "soundcpu")
, m_screen(*this, "screen")
, m_palette(*this, "palette")
, m_qs1000(*this, "qs1000")
, m_in0(*this, "IN0")
, m_penxport(*this, "PEN_X_P%u", 1)
, m_penyport(*this, "PEN_Y_P%u", 1)
@ -46,6 +46,7 @@ public:
protected:
optional_device<qs1000_device> m_qs1000;
optional_ioport m_eepromoutport;
TIMER_DEVICE_CALLBACK_MEMBER(eolith_speedup);
@ -81,7 +82,6 @@ private:
optional_device<i8032_device> m_soundcpu;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
optional_device<qs1000_device> m_qs1000;
optional_ioport m_in0; // klondkp doesn't have it
optional_ioport_array<2> m_penxport;

View File

@ -1760,67 +1760,57 @@ const rom_entry *sega_32x_device::device_rom_region() const
// some games appear to dislike 'perfect' levels of interleave, probably due to
// non-emulated cache, ram waitstates and other issues?
#define _32X_INTERLEAVE_LEVEL \
MCFG_QUANTUM_TIME(attotime::from_hz(1800000))
MACHINE_CONFIG_START(sega_32x_ntsc_device::device_add_mconfig)
config.m_minimum_quantum = attotime::from_hz(1800000);
void sega_32x_device::device_add_mconfig(machine_config &config)
{
#ifndef _32X_SWAP_MASTER_SLAVE_HACK
MCFG_DEVICE_ADD("32x_master_sh2", SH2, DERIVED_CLOCK(1, 1) )
MCFG_DEVICE_PROGRAM_MAP(sh2_main_map)
MCFG_SH2_IS_SLAVE(0)
MCFG_SH2_FIFO_DATA_AVAIL_CB(sega_32x_device, _32x_fifo_available_callback)
SH2(config, m_master_cpu, DERIVED_CLOCK(1, 1));
m_master_cpu->set_is_slave(0);
m_master_cpu->set_dma_fifo_data_available_callback(FUNC(sega_32x_device::_32x_fifo_available_callback));
#endif
MCFG_DEVICE_ADD("32x_slave_sh2", SH2, DERIVED_CLOCK(1, 1) )
MCFG_DEVICE_PROGRAM_MAP(sh2_slave_map)
MCFG_SH2_IS_SLAVE(1)
MCFG_SH2_FIFO_DATA_AVAIL_CB(sega_32x_device, _32x_fifo_available_callback)
SH2(config, m_slave_cpu, DERIVED_CLOCK(1, 1));
m_slave_cpu->set_is_slave(1);
m_slave_cpu->set_dma_fifo_data_available_callback(FUNC(sega_32x_device::_32x_fifo_available_callback));
#ifdef _32X_SWAP_MASTER_SLAVE_HACK
MCFG_DEVICE_ADD("32x_master_sh2", SH2, DERIVED_CLOCK(1, 1) )
MCFG_DEVICE_PROGRAM_MAP(sh2_main_map)
MCFG_SH2_IS_SLAVE(0)
MCFG_SH2_FIFO_DATA_AVAIL_CB(sega_32x_device, _32x_fifo_available_callback)
SH2(config, m_master_cpu, DERIVED_CLOCK(1, 1));
m_master_cpu->set_is_slave(0);
m_master_cpu->set_dma_fifo_data_available_callback(FUNC(sega_32x_device::_32x_fifo_available_callback));
#endif
MCFG_DEVICE_ADD("ldac", DAC_12BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, ":lspeaker", 0.4) // unknown DAC
MCFG_DEVICE_ADD("rdac", DAC_12BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, ":rspeaker", 0.4) // unknown DAC
MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
MCFG_SOUND_ROUTE(0, "ldac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "ldac", -1.0, DAC_VREF_NEG_INPUT)
MCFG_SOUND_ROUTE(0, "rdac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "rdac", -1.0, DAC_VREF_NEG_INPUT)
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
vref.set_output(5.0);
vref.add_route(0, "ldac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "ldac", -1.0, DAC_VREF_NEG_INPUT);
vref.add_route(0, "rdac", 1.0, DAC_VREF_POS_INPUT);
vref.add_route(0, "rdac", -1.0, DAC_VREF_NEG_INPUT);
_32X_INTERLEAVE_LEVEL
MACHINE_CONFIG_END
}
MACHINE_CONFIG_START(sega_32x_pal_device::device_add_mconfig)
void sega_32x_ntsc_device::device_add_mconfig(machine_config &config)
{
sega_32x_device::device_add_mconfig(config);
#ifndef _32X_SWAP_MASTER_SLAVE_HACK
MCFG_DEVICE_ADD("32x_master_sh2", SH2, DERIVED_CLOCK(1, 1) )
MCFG_DEVICE_PROGRAM_MAP(sh2_main_map)
MCFG_SH2_IS_SLAVE(0)
MCFG_SH2_FIFO_DATA_AVAIL_CB(sega_32x_device, _32x_fifo_available_callback)
#endif
m_master_cpu->set_addrmap(AS_PROGRAM, &sega_32x_ntsc_device::sh2_main_map);
m_slave_cpu->set_addrmap(AS_PROGRAM, &sega_32x_ntsc_device::sh2_slave_map);
MCFG_DEVICE_ADD("32x_slave_sh2", SH2, DERIVED_CLOCK(1, 1) )
MCFG_DEVICE_PROGRAM_MAP(sh2_slave_map)
MCFG_SH2_IS_SLAVE(1)
MCFG_SH2_FIFO_DATA_AVAIL_CB(sega_32x_device, _32x_fifo_available_callback)
DAC_12BIT_R2R(config, m_ldac, 0).add_route(ALL_OUTPUTS, ":lspeaker", 0.4); // unknown DAC
DAC_12BIT_R2R(config, m_rdac, 0).add_route(ALL_OUTPUTS, ":rspeaker", 0.4); // unknown DAC
}
#ifdef _32X_SWAP_MASTER_SLAVE_HACK
MCFG_DEVICE_ADD("32x_master_sh2", SH2, DERIVED_CLOCK(1, 1) )
MCFG_DEVICE_PROGRAM_MAP(sh2_main_map)
MCFG_SH2_IS_SLAVE(0)
MCFG_SH2_FIFO_DATA_AVAIL_CB(sega_32x_device, _32x_fifo_available_callback)
#endif
void sega_32x_pal_device::device_add_mconfig(machine_config &config)
{
sega_32x_device::device_add_mconfig(config);
MCFG_DEVICE_ADD("ldac", DAC_16BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, ":lspeaker", 0.4) // unknown DAC
MCFG_DEVICE_ADD("rdac", DAC_16BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, ":rspeaker", 0.4) // unknown DAC
MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
MCFG_SOUND_ROUTE(0, "ldac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "ldac", -1.0, DAC_VREF_NEG_INPUT)
MCFG_SOUND_ROUTE(0, "rdac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "rdac", -1.0, DAC_VREF_NEG_INPUT)
m_master_cpu->set_addrmap(AS_PROGRAM, &sega_32x_pal_device::sh2_main_map);
m_slave_cpu->set_addrmap(AS_PROGRAM, &sega_32x_pal_device::sh2_slave_map);
_32X_INTERLEAVE_LEVEL
MACHINE_CONFIG_END
DAC_16BIT_R2R(config, m_ldac, 0).add_route(ALL_OUTPUTS, ":lspeaker", 0.4); // unknown DAC
DAC_16BIT_R2R(config, m_rdac, 0).add_route(ALL_OUTPUTS, ":rspeaker", 0.4); // unknown DAC
}
void sega_32x_device::device_start()

View File

@ -118,6 +118,7 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
void update_total_scanlines(bool mode3) { m_total_scanlines = mode3 ? (m_base_total_scanlines * 2) : m_base_total_scanlines; } // this gets set at each EOF