mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
upd7810: Replace fake I/O space with callbacks
This commit is contained in:
parent
e365c63476
commit
a4b3eafc7a
@ -209,17 +209,6 @@ static ADDRESS_MAP_START( ex800_mem, AS_PROGRAM, 8, epson_ex800_t )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ADDRESS_MAP( ex800_io )
|
||||
//-------------------------------------------------
|
||||
|
||||
static ADDRESS_MAP_START( ex800_io, AS_IO, 8, epson_ex800_t )
|
||||
AM_RANGE(UPD7810_PORTA, UPD7810_PORTA) AM_READ(porta_r) AM_WRITE(porta_w)
|
||||
AM_RANGE(UPD7810_PORTB, UPD7810_PORTB) AM_READ(portb_r) AM_WRITE(portb_w)
|
||||
AM_RANGE(UPD7810_PORTC, UPD7810_PORTC) AM_READ(portc_r) AM_WRITE(portc_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// MACHINE_DRIVER( epson_ex800 )
|
||||
//-------------------------------------------------
|
||||
@ -228,8 +217,12 @@ static MACHINE_CONFIG_FRAGMENT( epson_ex800 )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", UPD7810, 12000000) /* 12 MHz? */
|
||||
MCFG_CPU_PROGRAM_MAP(ex800_mem)
|
||||
MCFG_CPU_IO_MAP(ex800_io)
|
||||
|
||||
MCFG_UPD7810_PORTA_READ_CB(READ8(epson_ex800_t, porta_r))
|
||||
MCFG_UPD7810_PORTA_WRITE_CB(WRITE8(epson_ex800_t, porta_w))
|
||||
MCFG_UPD7810_PORTB_READ_CB(READ8(epson_ex800_t, portb_r))
|
||||
MCFG_UPD7810_PORTB_WRITE_CB(WRITE8(epson_ex800_t, portb_w))
|
||||
MCFG_UPD7810_PORTC_READ_CB(READ8(epson_ex800_t, portc_r))
|
||||
MCFG_UPD7810_PORTC_WRITE_CB(WRITE8(epson_ex800_t, portc_w))
|
||||
|
||||
MCFG_DEFAULT_LAYOUT(layout_ex800)
|
||||
|
||||
|
@ -60,17 +60,6 @@ static ADDRESS_MAP_START( lx800_mem, AS_PROGRAM, 8, epson_lx800_t )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ADDRESS_MAP( lx800_io )
|
||||
//-------------------------------------------------
|
||||
|
||||
static ADDRESS_MAP_START( lx800_io, AS_IO, 8, epson_lx800_t )
|
||||
AM_RANGE(UPD7810_PORTA, UPD7810_PORTA) AM_READWRITE(porta_r, porta_w)
|
||||
AM_RANGE(UPD7810_PORTB, UPD7810_PORTB) AM_READ_PORT("DIPSW1")
|
||||
AM_RANGE(UPD7810_PORTC, UPD7810_PORTC) AM_READWRITE(portc_r, portc_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// MACHINE_DRIVER( epson_lx800 )
|
||||
//-------------------------------------------------
|
||||
@ -79,7 +68,11 @@ static MACHINE_CONFIG_FRAGMENT( epson_lx800 )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", UPD7810, XTAL_14_7456MHz)
|
||||
MCFG_CPU_PROGRAM_MAP(lx800_mem)
|
||||
MCFG_CPU_IO_MAP(lx800_io)
|
||||
MCFG_UPD7810_PORTA_READ_CB(READ8(epson_lx800_t, porta_r))
|
||||
MCFG_UPD7810_PORTA_WRITE_CB(WRITE8(epson_lx800_t, porta_w))
|
||||
MCFG_UPD7810_PORTB_READ_CB(IOPORT("DIPSW1"))
|
||||
MCFG_UPD7810_PORTC_READ_CB(READ8(epson_lx800_t, portc_r))
|
||||
MCFG_UPD7810_PORTC_WRITE_CB(WRITE8(epson_lx800_t, portc_w))
|
||||
MCFG_UPD7810_AN0(READLINE(epson_lx800_t, an0_r))
|
||||
MCFG_UPD7810_AN1(READLINE(epson_lx800_t, an1_r))
|
||||
MCFG_UPD7810_AN2(READLINE(epson_lx800_t, an2_r))
|
||||
|
@ -103,17 +103,6 @@ static ADDRESS_MAP_START( lx810l_mem, AS_PROGRAM, 8, epson_lx810l_t )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ADDRESS_MAP( lx810l_io )
|
||||
//-------------------------------------------------
|
||||
|
||||
static ADDRESS_MAP_START( lx810l_io, AS_IO, 8, epson_lx810l_t )
|
||||
AM_RANGE(UPD7810_PORTA, UPD7810_PORTA) AM_READWRITE(porta_r, porta_w)
|
||||
AM_RANGE(UPD7810_PORTB, UPD7810_PORTB) AM_READWRITE(portb_r, portb_w)
|
||||
AM_RANGE(UPD7810_PORTC, UPD7810_PORTC) AM_READWRITE(portc_r, portc_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// MACHINE_DRIVER( epson_lx810l )
|
||||
//-------------------------------------------------
|
||||
@ -122,7 +111,12 @@ static MACHINE_CONFIG_FRAGMENT( epson_lx810l )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", UPD7810, XTAL_14_7456MHz)
|
||||
MCFG_CPU_PROGRAM_MAP(lx810l_mem)
|
||||
MCFG_CPU_IO_MAP(lx810l_io)
|
||||
MCFG_UPD7810_PORTA_READ_CB(READ8(epson_lx810l_t, porta_r))
|
||||
MCFG_UPD7810_PORTA_WRITE_CB(WRITE8(epson_lx810l_t, porta_w))
|
||||
MCFG_UPD7810_PORTB_READ_CB(READ8(epson_lx810l_t, portb_r))
|
||||
MCFG_UPD7810_PORTB_WRITE_CB(WRITE8(epson_lx810l_t, portb_w))
|
||||
MCFG_UPD7810_PORTC_READ_CB(READ8(epson_lx810l_t, portc_r))
|
||||
MCFG_UPD7810_PORTC_WRITE_CB(WRITE8(epson_lx810l_t, portc_w))
|
||||
MCFG_UPD7810_AN0(READ8(epson_lx810l_t, an0_r))
|
||||
MCFG_UPD7810_AN1(READ8(epson_lx810l_t, an1_r))
|
||||
MCFG_UPD7810_AN2(READ8(epson_lx810l_t, an2_r))
|
||||
|
@ -381,34 +381,6 @@ const device_type UPD78C05 = &device_creator<upd78c05_device>;
|
||||
const device_type UPD78C06 = &device_creator<upd78c06_device>;
|
||||
|
||||
|
||||
upd7810_device::upd7810_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: cpu_device(mconfig, UPD7810, "uPD7810", tag, owner, clock, "upd7810", __FILE__)
|
||||
, m_to_func(*this)
|
||||
, m_co0_func(*this)
|
||||
, m_co1_func(*this)
|
||||
, m_txd_func(*this)
|
||||
, m_rxd_func(*this)
|
||||
, m_an0_func(*this)
|
||||
, m_an1_func(*this)
|
||||
, m_an2_func(*this)
|
||||
, m_an3_func(*this)
|
||||
, m_an4_func(*this)
|
||||
, m_an5_func(*this)
|
||||
, m_an6_func(*this)
|
||||
, m_an7_func(*this)
|
||||
, m_program_config("program", ENDIANNESS_LITTLE, 8, 16, 0)
|
||||
, m_io_config("io", ENDIANNESS_LITTLE, 8, 8, 0)
|
||||
{
|
||||
m_opXX = s_opXX_7810;
|
||||
m_op48 = s_op48;
|
||||
m_op4C = s_op4C;
|
||||
m_op4D = s_op4D;
|
||||
m_op60 = s_op60;
|
||||
m_op64 = s_op64;
|
||||
m_op70 = s_op70;
|
||||
m_op74 = s_op74;
|
||||
}
|
||||
|
||||
upd7810_device::upd7810_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source)
|
||||
: cpu_device(mconfig, type, name, tag, owner, clock, shortname, source)
|
||||
, m_to_func(*this)
|
||||
@ -424,11 +396,34 @@ upd7810_device::upd7810_device(const machine_config &mconfig, device_type type,
|
||||
, m_an5_func(*this)
|
||||
, m_an6_func(*this)
|
||||
, m_an7_func(*this)
|
||||
, m_pa_in_cb(*this)
|
||||
, m_pb_in_cb(*this)
|
||||
, m_pc_in_cb(*this)
|
||||
, m_pd_in_cb(*this)
|
||||
, m_pf_in_cb(*this)
|
||||
, m_pa_out_cb(*this)
|
||||
, m_pb_out_cb(*this)
|
||||
, m_pc_out_cb(*this)
|
||||
, m_pd_out_cb(*this)
|
||||
, m_pf_out_cb(*this)
|
||||
, m_pt_in_cb(*this)
|
||||
, m_program_config("program", ENDIANNESS_LITTLE, 8, 16, 0)
|
||||
, m_io_config("io", ENDIANNESS_LITTLE, 8, 8, 0)
|
||||
{
|
||||
}
|
||||
|
||||
upd7810_device::upd7810_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: upd7810_device(mconfig, UPD7810, "uPD7810", tag, owner, clock, "upd7810", __FILE__)
|
||||
{
|
||||
m_opXX = s_opXX_7810;
|
||||
m_op48 = s_op48;
|
||||
m_op4C = s_op4C;
|
||||
m_op4D = s_op4D;
|
||||
m_op60 = s_op60;
|
||||
m_op64 = s_op64;
|
||||
m_op70 = s_op70;
|
||||
m_op74 = s_op74;
|
||||
}
|
||||
|
||||
upd7807_device::upd7807_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: upd7810_device(mconfig, UPD7807, "uPD7807", tag, owner, clock, "upd7807", __FILE__)
|
||||
{
|
||||
@ -517,17 +512,17 @@ uint8_t upd7810_device::RP(offs_t port)
|
||||
{
|
||||
case UPD7810_PORTA:
|
||||
if (m_ma) // NS20031301 no need to read if the port is set as output
|
||||
m_pa_in = m_io->read_byte(port);
|
||||
m_pa_in = m_pa_in_cb();
|
||||
data = (m_pa_in & m_ma) | (m_pa_out & ~m_ma);
|
||||
break;
|
||||
case UPD7810_PORTB:
|
||||
if (m_mb) // NS20031301 no need to read if the port is set as output
|
||||
m_pb_in = m_io->read_byte(port);
|
||||
m_pb_in = m_pb_in_cb();
|
||||
data = (m_pb_in & m_mb) | (m_pb_out & ~m_mb);
|
||||
break;
|
||||
case UPD7810_PORTC:
|
||||
if (m_mc) // NS20031301 no need to read if the port is set as output
|
||||
m_pc_in = m_io->read_byte(port);
|
||||
m_pc_in = m_pc_in_cb();
|
||||
data = (m_pc_in & m_mc) | (m_pc_out & ~m_mc);
|
||||
if (m_mcc & 0x01) /* PC0 = TxD output */
|
||||
data = (data & ~0x01) | (m_txd & 1 ? 0x01 : 0x00);
|
||||
@ -547,7 +542,7 @@ uint8_t upd7810_device::RP(offs_t port)
|
||||
data = (data & ~0x80) | (m_co1 & 1 ? 0x80 : 0x00);
|
||||
break;
|
||||
case UPD7810_PORTD:
|
||||
m_pd_in = m_io->read_byte(port);
|
||||
m_pd_in = m_pd_in_cb();
|
||||
switch (m_mm & 0x07)
|
||||
{
|
||||
case 0x00: /* PD input mode, PF port mode */
|
||||
@ -562,7 +557,7 @@ uint8_t upd7810_device::RP(offs_t port)
|
||||
}
|
||||
break;
|
||||
case UPD7810_PORTF:
|
||||
m_pf_in = m_io->read_byte(port);
|
||||
m_pf_in = m_pf_in_cb();
|
||||
switch (m_mm & 0x06)
|
||||
{
|
||||
case 0x00: /* PD input/output mode, PF port mode */
|
||||
@ -582,7 +577,7 @@ uint8_t upd7810_device::RP(offs_t port)
|
||||
}
|
||||
break;
|
||||
case UPD7807_PORTT: // NS20031301 partial implementation
|
||||
data = m_io->read_byte(port);
|
||||
data = m_pt_in_cb();
|
||||
break;
|
||||
default:
|
||||
logerror("uPD7810 internal error: RP() called with invalid port number\n");
|
||||
@ -598,13 +593,13 @@ void upd7810_device::WP(offs_t port, uint8_t data)
|
||||
m_pa_out = data;
|
||||
// data = (data & ~m_ma) | (m_pa_in & m_ma);
|
||||
data = (data & ~m_ma) | (m_ma); // NS20031401
|
||||
m_io->write_byte(port, data);
|
||||
m_pa_out_cb(data);
|
||||
break;
|
||||
case UPD7810_PORTB:
|
||||
m_pb_out = data;
|
||||
// data = (data & ~m_mb) | (m_pb_in & m_mb);
|
||||
data = (data & ~m_mb) | (m_mb); // NS20031401
|
||||
m_io->write_byte(port, data);
|
||||
m_pb_out_cb(data);
|
||||
break;
|
||||
case UPD7810_PORTC:
|
||||
m_pc_out = data;
|
||||
@ -626,7 +621,7 @@ void upd7810_device::WP(offs_t port, uint8_t data)
|
||||
data = (data & ~0x40) | (m_co0 & 1 ? 0x40 : 0x00);
|
||||
if (m_mcc & 0x80) /* PC7 = CO1 output */
|
||||
data = (data & ~0x80) | (m_co1 & 1 ? 0x80 : 0x00);
|
||||
m_io->write_byte(port, data);
|
||||
m_pc_out_cb(data);
|
||||
break;
|
||||
case UPD7810_PORTD:
|
||||
m_pd_out = data;
|
||||
@ -641,7 +636,7 @@ void upd7810_device::WP(offs_t port, uint8_t data)
|
||||
default: /* PD extension mode, PF port/extension mode */
|
||||
return;
|
||||
}
|
||||
m_io->write_byte(port, data);
|
||||
m_pd_out_cb(data);
|
||||
break;
|
||||
case UPD7810_PORTF:
|
||||
m_pf_out = data;
|
||||
@ -660,7 +655,7 @@ void upd7810_device::WP(offs_t port, uint8_t data)
|
||||
data |= 0xff; /* what would come out for the lower bits here? */
|
||||
break;
|
||||
}
|
||||
m_io->write_byte(port, data);
|
||||
m_pf_out_cb(data);
|
||||
break;
|
||||
default:
|
||||
logerror("uPD7810 internal error: RP() called with invalid port number\n");
|
||||
@ -1512,7 +1507,6 @@ void upd7810_device::base_device_start()
|
||||
{
|
||||
m_program = &space(AS_PROGRAM);
|
||||
m_direct = &m_program->direct();
|
||||
m_io = &space(AS_IO);
|
||||
|
||||
m_to_func.resolve_safe();
|
||||
m_co0_func.resolve_safe();
|
||||
@ -1528,6 +1522,20 @@ void upd7810_device::base_device_start()
|
||||
m_an6_func.resolve_safe(0);
|
||||
m_an7_func.resolve_safe(0);
|
||||
|
||||
m_pa_in_cb.resolve_safe(0);
|
||||
m_pb_in_cb.resolve_safe(0);
|
||||
m_pc_in_cb.resolve_safe(0);
|
||||
m_pd_in_cb.resolve_safe(0);
|
||||
m_pf_in_cb.resolve_safe(0);
|
||||
|
||||
m_pa_out_cb.resolve_safe();
|
||||
m_pb_out_cb.resolve_safe();
|
||||
m_pc_out_cb.resolve_safe();
|
||||
m_pd_out_cb.resolve_safe();
|
||||
m_pf_out_cb.resolve_safe();
|
||||
|
||||
m_pt_in_cb.resolve_safe(0); // TODO: uPD7807 only
|
||||
|
||||
save_item(NAME(m_ppc.w.l));
|
||||
save_item(NAME(m_pc.w.l));
|
||||
save_item(NAME(m_sp.w.l));
|
||||
|
@ -30,18 +30,6 @@ enum
|
||||
UPD7810_LV0, UPD7810_LV1
|
||||
};
|
||||
|
||||
/* port numbers for PA,PB,PC,PD and PF */
|
||||
enum
|
||||
{
|
||||
UPD7810_PORTA, UPD7810_PORTB, UPD7810_PORTC, UPD7810_PORTD, UPD7810_PORTF
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
UPD7807_PORTA, UPD7807_PORTB, UPD7807_PORTC, UPD7807_PORTD, UPD7807_PORTF,
|
||||
UPD7807_PORTT
|
||||
};
|
||||
|
||||
/* IRQ lines */
|
||||
#define UPD7810_INTF1 0
|
||||
#define UPD7810_INTF2 1
|
||||
@ -90,6 +78,52 @@ enum
|
||||
devcb = &upd7810_device::set_an7_func(*device, DEVCB_##_devcb);
|
||||
|
||||
|
||||
#define MCFG_UPD7810_PORTA_READ_CB(_devcb) \
|
||||
devcb = &upd7810_device::set_pa_in_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_UPD7810_PORTB_READ_CB(_devcb) \
|
||||
devcb = &upd7810_device::set_pb_in_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_UPD7810_PORTC_READ_CB(_devcb) \
|
||||
devcb = &upd7810_device::set_pc_in_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_UPD7810_PORTD_READ_CB(_devcb) \
|
||||
devcb = &upd7810_device::set_pd_in_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_UPD7810_PORTF_READ_CB(_devcb) \
|
||||
devcb = &upd7810_device::set_pf_in_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_UPD7810_PORTA_WRITE_CB(_devcb) \
|
||||
devcb = &upd7810_device::set_pa_out_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_UPD7810_PORTB_WRITE_CB(_devcb) \
|
||||
devcb = &upd7810_device::set_pb_out_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_UPD7810_PORTC_WRITE_CB(_devcb) \
|
||||
devcb = &upd7810_device::set_pc_out_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_UPD7810_PORTD_WRITE_CB(_devcb) \
|
||||
devcb = &upd7810_device::set_pd_out_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_UPD7810_PORTF_WRITE_CB(_devcb) \
|
||||
devcb = &upd7810_device::set_pf_out_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
|
||||
#define MCFG_UPD7807_PORTA_READ_CB MCFG_UPD7810_PORTA_READ_CB
|
||||
#define MCFG_UPD7807_PORTB_READ_CB MCFG_UPD7810_PORTB_READ_CB
|
||||
#define MCFG_UPD7807_PORTC_READ_CB MCFG_UPD7810_PORTC_READ_CB
|
||||
#define MCFG_UPD7807_PORTD_READ_CB MCFG_UPD7810_PORTD_READ_CB
|
||||
#define MCFG_UPD7807_PORTF_READ_CB MCFG_UPD7810_PORTF_READ_CB
|
||||
#define MCFG_UPD7807_PORTA_WRITE_CB MCFG_UPD7810_PORTA_WRITE_CB
|
||||
#define MCFG_UPD7807_PORTB_WRITE_CB MCFG_UPD7810_PORTB_WRITE_CB
|
||||
#define MCFG_UPD7807_PORTC_WRITE_CB MCFG_UPD7810_PORTC_WRITE_CB
|
||||
#define MCFG_UPD7807_PORTD_WRITE_CB MCFG_UPD7810_PORTD_WRITE_CB
|
||||
#define MCFG_UPD7807_PORTF_WRITE_CB MCFG_UPD7810_PORTF_WRITE_CB
|
||||
|
||||
#define MCFG_UPD7807_PORTT_READ_CB(_devcb) \
|
||||
devcb = &upd7810_device::set_pt_in_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
|
||||
class upd7810_device : public cpu_device
|
||||
{
|
||||
public:
|
||||
@ -112,6 +146,19 @@ public:
|
||||
template<class _Object> static devcb_base &set_an6_func(device_t &device, _Object object) { return downcast<upd7810_device &>(device).m_an6_func.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_an7_func(device_t &device, _Object object) { return downcast<upd7810_device &>(device).m_an7_func.set_callback(object); }
|
||||
|
||||
template<class _Object> static devcb_base &set_pa_in_cb(device_t &device, _Object object) { return downcast<upd7810_device &>(device).m_pa_in_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_pb_in_cb(device_t &device, _Object object) { return downcast<upd7810_device &>(device).m_pb_in_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_pc_in_cb(device_t &device, _Object object) { return downcast<upd7810_device &>(device).m_pc_in_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_pd_in_cb(device_t &device, _Object object) { return downcast<upd7810_device &>(device).m_pd_in_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_pf_in_cb(device_t &device, _Object object) { return downcast<upd7810_device &>(device).m_pf_in_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_pa_out_cb(device_t &device, _Object object) { return downcast<upd7810_device &>(device).m_pa_out_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_pb_out_cb(device_t &device, _Object object) { return downcast<upd7810_device &>(device).m_pb_out_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_pc_out_cb(device_t &device, _Object object) { return downcast<upd7810_device &>(device).m_pc_out_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_pd_out_cb(device_t &device, _Object object) { return downcast<upd7810_device &>(device).m_pd_out_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_pf_out_cb(device_t &device, _Object object) { return downcast<upd7810_device &>(device).m_pf_out_cb.set_callback(object); }
|
||||
|
||||
template<class _Object> static devcb_base &set_pt_in_cb(device_t &device, _Object object) { return downcast<upd7810_device &>(device).m_pt_in_cb.set_callback(object); }
|
||||
|
||||
protected:
|
||||
// flags
|
||||
enum
|
||||
@ -167,7 +214,7 @@ protected:
|
||||
virtual void execute_set_input(int inputnum, int state) override;
|
||||
|
||||
// device_memory_interface overrides
|
||||
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override { return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : nullptr ); }
|
||||
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override { return (spacenum == AS_PROGRAM) ? &m_program_config : nullptr; }
|
||||
|
||||
// device_state_interface overrides
|
||||
virtual void state_string_export(const device_state_entry &entry, std::string &str) const override;
|
||||
@ -200,6 +247,19 @@ protected:
|
||||
devcb_read8 m_an6_func;
|
||||
devcb_read8 m_an7_func;
|
||||
|
||||
devcb_read8 m_pa_in_cb;
|
||||
devcb_read8 m_pb_in_cb;
|
||||
devcb_read8 m_pc_in_cb;
|
||||
devcb_read8 m_pd_in_cb;
|
||||
devcb_read8 m_pf_in_cb;
|
||||
devcb_write8 m_pa_out_cb;
|
||||
devcb_write8 m_pb_out_cb;
|
||||
devcb_write8 m_pc_out_cb;
|
||||
devcb_write8 m_pd_out_cb;
|
||||
devcb_write8 m_pf_out_cb;
|
||||
|
||||
devcb_read8 m_pt_in_cb; // TODO: uPD7807 only
|
||||
|
||||
typedef void (upd7810_device::*opcode_func)();
|
||||
|
||||
struct opcode_s {
|
||||
@ -245,7 +305,6 @@ protected:
|
||||
static const struct opcode_s s_opXX_78c06[256];
|
||||
|
||||
address_space_config m_program_config;
|
||||
address_space_config m_io_config;
|
||||
|
||||
PAIR m_ppc; /* previous program counter */
|
||||
PAIR m_pc; /* program counter */
|
||||
@ -346,7 +405,6 @@ protected:
|
||||
const struct opcode_s *m_op74;
|
||||
address_space *m_program;
|
||||
direct_read_data *m_direct;
|
||||
address_space *m_io;
|
||||
int m_icount;
|
||||
|
||||
uint8_t RP(offs_t port);
|
||||
|
@ -110,6 +110,23 @@
|
||||
#define WM(A,V) m_program->write_byte(A,V)
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// I/O PORTS
|
||||
//**************************************************************************
|
||||
|
||||
/* port numbers for PA,PB,PC,PD and PF */
|
||||
enum
|
||||
{
|
||||
UPD7810_PORTA, UPD7810_PORTB, UPD7810_PORTC, UPD7810_PORTD, UPD7810_PORTF
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
UPD7807_PORTA, UPD7807_PORTB, UPD7807_PORTC, UPD7807_PORTD, UPD7807_PORTF,
|
||||
UPD7807_PORTT
|
||||
};
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// PSW OPERATIONS
|
||||
//**************************************************************************
|
||||
|
@ -71,13 +71,10 @@ static ADDRESS_MAP_START( ax80_map, AS_PROGRAM, 8, ax80_state )
|
||||
AM_RANGE(0xff00, 0xffff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( ax80_io, AS_IO, 8, ax80_state )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static MACHINE_CONFIG_START( ax80, ax80_state )
|
||||
MCFG_CPU_ADD("maincpu", UPD7810, XTAL_12MHz)
|
||||
MCFG_CPU_PROGRAM_MAP(ax80_map)
|
||||
MCFG_CPU_IO_MAP(ax80_io)
|
||||
//MCFG_CPU_IO_MAP(ax80_io)
|
||||
|
||||
MCFG_DEVICE_ADD(PIT0_TAG, PIT8253, 0)
|
||||
MCFG_DEVICE_ADD(PIT1_TAG, PIT8253, 0)
|
||||
|
@ -253,12 +253,6 @@ WRITE8_MEMBER(fitfight_state::snd_portc_w)
|
||||
//osd_printf_debug("PC W %x @%x\n",data,space.device().safe_pc());
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( snd_io, AS_IO, 8, fitfight_state )
|
||||
AM_RANGE(UPD7810_PORTA, UPD7810_PORTA) AM_READ(snd_porta_r) AM_WRITE(snd_porta_w)
|
||||
AM_RANGE(UPD7810_PORTB, UPD7810_PORTB) AM_READ(snd_portb_r) AM_WRITE(snd_portb_w)
|
||||
AM_RANGE(UPD7810_PORTC, UPD7810_PORTC) AM_READ(snd_portc_r) AM_WRITE(snd_portc_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
INTERRUPT_GEN_MEMBER(fitfight_state::snd_irq)
|
||||
{
|
||||
generic_pulse_irq_line(device.execute(), UPD7810_INTF2, 1);
|
||||
@ -733,10 +727,14 @@ static MACHINE_CONFIG_START( fitfight, fitfight_state )
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", UPD7810, 12000000)
|
||||
MCFG_CPU_PROGRAM_MAP(snd_mem)
|
||||
MCFG_CPU_IO_MAP(snd_io)
|
||||
MCFG_UPD7810_PORTA_READ_CB(READ8(fitfight_state, snd_porta_r))
|
||||
MCFG_UPD7810_PORTA_WRITE_CB(WRITE8(fitfight_state, snd_porta_w))
|
||||
MCFG_UPD7810_PORTB_READ_CB(READ8(fitfight_state, snd_portb_r))
|
||||
MCFG_UPD7810_PORTB_WRITE_CB(WRITE8(fitfight_state, snd_portb_w))
|
||||
MCFG_UPD7810_PORTC_READ_CB(READ8(fitfight_state, snd_portc_r))
|
||||
MCFG_UPD7810_PORTC_WRITE_CB(WRITE8(fitfight_state, snd_portc_w))
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", fitfight_state, snd_irq)
|
||||
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", fitfight)
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -348,13 +348,6 @@ WRITE8_MEMBER( fp1100_state::portc_w )
|
||||
m_centronics->write_strobe(BIT(data, 6));
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START(fp1100_slave_io, AS_IO, 8, fp1100_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(porta_w)
|
||||
AM_RANGE(0x01, 0x01) AM_READ(portb_r) AM_DEVWRITE("cent_data_out", output_latch_device, write)
|
||||
AM_RANGE(0x02, 0x02) AM_READWRITE(portc_r,portc_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
/* Input ports */
|
||||
static INPUT_PORTS_START( fp1100 )
|
||||
@ -648,7 +641,11 @@ static MACHINE_CONFIG_START( fp1100, fp1100_state )
|
||||
|
||||
MCFG_CPU_ADD( "sub", UPD7801, MAIN_CLOCK/4 )
|
||||
MCFG_CPU_PROGRAM_MAP( fp1100_slave_map )
|
||||
MCFG_CPU_IO_MAP( fp1100_slave_io )
|
||||
MCFG_UPD7810_PORTA_WRITE_CB(WRITE8(fp1100_state, porta_w))
|
||||
MCFG_UPD7810_PORTB_READ_CB(READ8(fp1100_state, portb_r))
|
||||
MCFG_UPD7810_PORTB_WRITE_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
|
||||
MCFG_UPD7810_PORTC_READ_CB(READ8(fp1100_state, portc_r))
|
||||
MCFG_UPD7810_PORTC_WRITE_CB(WRITE8(fp1100_state, portc_w))
|
||||
MCFG_UPD7810_TXD(WRITELINE(fp1100_state, cass_w))
|
||||
|
||||
MCFG_MACHINE_RESET_OVERRIDE(fp1100_state, fp1100)
|
||||
|
@ -20,13 +20,6 @@ static ADDRESS_MAP_START(gamepock_mem, AS_PROGRAM, 8, gamepock_state)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START(gamepock_io, AS_IO, 8, gamepock_state )
|
||||
AM_RANGE( 0x00, 0x00 ) AM_WRITE( port_a_w )
|
||||
AM_RANGE( 0x01, 0x01 ) AM_READWRITE( port_b_r, port_b_w )
|
||||
AM_RANGE( 0x02, 0x02 ) AM_READ( port_c_r )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( gamepock )
|
||||
PORT_START("IN0")
|
||||
PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
|
||||
@ -47,7 +40,10 @@ INPUT_PORTS_END
|
||||
static MACHINE_CONFIG_START( gamepock, gamepock_state )
|
||||
MCFG_CPU_ADD("maincpu", UPD78C06, XTAL_6MHz) /* uPD78C06AG */
|
||||
MCFG_CPU_PROGRAM_MAP( gamepock_mem)
|
||||
MCFG_CPU_IO_MAP( gamepock_io)
|
||||
MCFG_UPD7810_PORTA_WRITE_CB(WRITE8(gamepock_state, port_a_w))
|
||||
MCFG_UPD7810_PORTB_READ_CB(READ8(gamepock_state, port_b_r))
|
||||
MCFG_UPD7810_PORTB_WRITE_CB(WRITE8(gamepock_state, port_b_w))
|
||||
MCFG_UPD7810_PORTC_READ_CB(READ8(gamepock_state, port_c_r))
|
||||
MCFG_UPD7810_TO(WRITELINE(gamepock_state,gamepock_to_w))
|
||||
|
||||
MCFG_SCREEN_ADD("screen", LCD)
|
||||
|
@ -20,14 +20,20 @@ public:
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_speaker(*this, "speaker")
|
||||
, m_cart(*this, "cartslot")
|
||||
, m_io_joy(*this, "JOY")
|
||||
{ }
|
||||
|
||||
DECLARE_PALETTE_INIT(gmaster);
|
||||
DECLARE_READ8_MEMBER(gmaster_io_r);
|
||||
DECLARE_WRITE8_MEMBER(gmaster_io_w);
|
||||
DECLARE_READ8_MEMBER(gmaster_port_r);
|
||||
DECLARE_WRITE8_MEMBER(gmaster_port_w);
|
||||
DECLARE_READ8_MEMBER(gmaster_portb_r);
|
||||
DECLARE_READ8_MEMBER(gmaster_portc_r);
|
||||
DECLARE_READ8_MEMBER(gmaster_portd_r);
|
||||
DECLARE_READ8_MEMBER(gmaster_portf_r);
|
||||
DECLARE_WRITE8_MEMBER(gmaster_porta_w);
|
||||
DECLARE_WRITE8_MEMBER(gmaster_portb_w);
|
||||
DECLARE_WRITE8_MEMBER(gmaster_portc_w);
|
||||
DECLARE_WRITE8_MEMBER(gmaster_portd_w);
|
||||
DECLARE_WRITE8_MEMBER(gmaster_portf_w);
|
||||
DECLARE_DRIVER_INIT(gmaster) { memset(&m_video, 0, sizeof(m_video)); memset(m_ram, 0, sizeof(m_ram)); }
|
||||
uint32_t screen_update_gmaster(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
@ -49,7 +55,6 @@ private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<speaker_sound_device> m_speaker;
|
||||
required_device<generic_slot_device> m_cart;
|
||||
required_ioport m_io_joy;
|
||||
};
|
||||
|
||||
|
||||
@ -149,34 +154,78 @@ WRITE8_MEMBER(gmaster_state::gmaster_io_w)
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER(gmaster_state::gmaster_port_r)
|
||||
READ8_MEMBER(gmaster_state::gmaster_portb_r)
|
||||
{
|
||||
// uint8_t data = m_ports[offset];
|
||||
// uint8_t data = m_ports[1];
|
||||
uint8_t data = 0xff;
|
||||
switch (offset)
|
||||
{
|
||||
case UPD7810_PORTA:
|
||||
data = m_io_joy->read();
|
||||
break;
|
||||
default:
|
||||
logerror("%.4x port %d read %.2x\n", m_maincpu->pc(), offset, data);
|
||||
break;
|
||||
|
||||
logerror("%.4x port B read %.2x\n", m_maincpu->pc(), data);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(gmaster_state::gmaster_portc_r)
|
||||
{
|
||||
// uint8_t data = m_ports[2];
|
||||
uint8_t data = 0xff;
|
||||
|
||||
logerror("%.4x port C read %.2x\n", m_maincpu->pc(), data);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(gmaster_state::gmaster_portd_r)
|
||||
{
|
||||
// uint8_t data = m_ports[3];
|
||||
uint8_t data = 0xff;
|
||||
|
||||
logerror("%.4x port D read %.2x\n", m_maincpu->pc(), data);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(gmaster_state::gmaster_portf_r)
|
||||
{
|
||||
// uint8_t data = m_ports[4];
|
||||
uint8_t data = 0xff;
|
||||
|
||||
logerror("%.4x port F read %.2x\n", m_maincpu->pc(), data);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(gmaster_state::gmaster_port_w)
|
||||
WRITE8_MEMBER(gmaster_state::gmaster_porta_w)
|
||||
{
|
||||
m_ports[offset] = data;
|
||||
logerror("%.4x port %d written %.2x\n", m_maincpu->pc(), offset, data);
|
||||
switch (offset)
|
||||
m_ports[0] = data;
|
||||
logerror("%.4x port A written %.2x\n", m_maincpu->pc(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(gmaster_state::gmaster_portb_w)
|
||||
{
|
||||
case UPD7810_PORTC:
|
||||
m_ports[1] = data;
|
||||
logerror("%.4x port B written %.2x\n", m_maincpu->pc(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(gmaster_state::gmaster_portc_w)
|
||||
{
|
||||
m_ports[2] = data;
|
||||
logerror("%.4x port C written %.2x\n", m_maincpu->pc(), data);
|
||||
|
||||
m_video.y = BLITTER_Y;
|
||||
m_speaker->level_w(BIT(data, 4));
|
||||
break;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(gmaster_state::gmaster_portd_w)
|
||||
{
|
||||
m_ports[3] = data;
|
||||
logerror("%.4x port D written %.2x\n", m_maincpu->pc(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(gmaster_state::gmaster_portf_w)
|
||||
{
|
||||
m_ports[4] = data;
|
||||
logerror("%.4x port F written %.2x\n", m_maincpu->pc(), data);
|
||||
}
|
||||
|
||||
|
||||
@ -188,11 +237,6 @@ static ADDRESS_MAP_START( gmaster_mem, AS_PROGRAM, 8, gmaster_state )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START(gmaster_io, AS_IO, 8, gmaster_state )
|
||||
AM_RANGE(UPD7810_PORTA, UPD7810_PORTF) AM_READWRITE(gmaster_port_r, gmaster_port_w )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( gmaster )
|
||||
PORT_START("JOY")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT)
|
||||
@ -282,7 +326,16 @@ void gmaster_state::machine_start()
|
||||
static MACHINE_CONFIG_START( gmaster, gmaster_state )
|
||||
MCFG_CPU_ADD("maincpu", UPD7810, XTAL_12MHz/2/*?*/) // upd78c11 in the unit
|
||||
MCFG_CPU_PROGRAM_MAP(gmaster_mem)
|
||||
MCFG_CPU_IO_MAP( gmaster_io)
|
||||
MCFG_UPD7810_PORTA_READ_CB(IOPORT("JOY"))
|
||||
MCFG_UPD7810_PORTB_READ_CB(READ8(gmaster_state, gmaster_portb_r))
|
||||
MCFG_UPD7810_PORTC_READ_CB(READ8(gmaster_state, gmaster_portc_r))
|
||||
MCFG_UPD7810_PORTD_READ_CB(READ8(gmaster_state, gmaster_portd_r))
|
||||
MCFG_UPD7810_PORTF_READ_CB(READ8(gmaster_state, gmaster_portf_r))
|
||||
MCFG_UPD7810_PORTA_WRITE_CB(WRITE8(gmaster_state, gmaster_porta_w))
|
||||
MCFG_UPD7810_PORTB_WRITE_CB(WRITE8(gmaster_state, gmaster_portb_w))
|
||||
MCFG_UPD7810_PORTC_WRITE_CB(WRITE8(gmaster_state, gmaster_portc_w))
|
||||
MCFG_UPD7810_PORTD_WRITE_CB(WRITE8(gmaster_state, gmaster_portd_w))
|
||||
MCFG_UPD7810_PORTF_WRITE_CB(WRITE8(gmaster_state, gmaster_portf_w))
|
||||
|
||||
MCFG_SCREEN_ADD("screen", LCD)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
|
@ -584,13 +584,6 @@ static ADDRESS_MAP_START( reikaids_upd7807_map, AS_PROGRAM, 8, homedata_state )
|
||||
AM_RANGE(0xff00, 0xffff) AM_RAM /* Internal RAM */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( reikaids_upd7807_io_map, AS_IO, 8, homedata_state )
|
||||
AM_RANGE(UPD7807_PORTA, UPD7807_PORTA) AM_READWRITE(reikaids_upd7807_porta_r, reikaids_upd7807_porta_w)
|
||||
AM_RANGE(UPD7807_PORTB, UPD7807_PORTB) AM_DEVWRITE("dac", dac_byte_interface, write)
|
||||
AM_RANGE(UPD7807_PORTC, UPD7807_PORTC) AM_WRITE(reikaids_upd7807_portc_w)
|
||||
AM_RANGE(UPD7807_PORTT, UPD7807_PORTT) AM_READ(reikaids_snd_command_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
|
||||
@ -619,13 +612,6 @@ static ADDRESS_MAP_START( pteacher_upd7807_map, AS_PROGRAM, 8, homedata_state )
|
||||
AM_RANGE(0xff00, 0xffff) AM_RAM /* Internal RAM */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( pteacher_upd7807_io_map, AS_IO, 8, homedata_state )
|
||||
AM_RANGE(UPD7807_PORTA, UPD7807_PORTA) AM_READWRITE(pteacher_upd7807_porta_r, pteacher_upd7807_porta_w)
|
||||
AM_RANGE(UPD7807_PORTB, UPD7807_PORTB) AM_DEVWRITE("dac", dac_byte_interface, write)
|
||||
AM_RANGE(UPD7807_PORTC, UPD7807_PORTC) AM_READ_PORT("COIN") AM_WRITE(pteacher_upd7807_portc_w)
|
||||
AM_RANGE(UPD7807_PORTT, UPD7807_PORTT) AM_READ(pteacher_keyboard_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
|
||||
@ -1275,7 +1261,11 @@ static MACHINE_CONFIG_START( reikaids, homedata_state )
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", UPD7807, 8000000) /* ??? MHz (max speed for the 7807 is 12MHz) */
|
||||
MCFG_CPU_PROGRAM_MAP(reikaids_upd7807_map)
|
||||
MCFG_CPU_IO_MAP(reikaids_upd7807_io_map)
|
||||
MCFG_UPD7807_PORTA_READ_CB(READ8(homedata_state, reikaids_upd7807_porta_r))
|
||||
MCFG_UPD7807_PORTA_WRITE_CB(WRITE8(homedata_state, reikaids_upd7807_porta_w))
|
||||
MCFG_UPD7807_PORTB_WRITE_CB(DEVWRITE8("dac", dac_byte_interface, write))
|
||||
MCFG_UPD7807_PORTC_WRITE_CB(WRITE8(homedata_state, reikaids_upd7807_portc_w))
|
||||
MCFG_UPD7807_PORTT_READ_CB(READ8(homedata_state, reikaids_snd_command_r))
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", homedata_state, upd7807_irq)
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(30000)) // very high interleave required to sync for startup tests
|
||||
@ -1327,7 +1317,12 @@ static MACHINE_CONFIG_START( pteacher, homedata_state )
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", UPD7807, 9000000) /* 9MHz ? */
|
||||
MCFG_CPU_PROGRAM_MAP(pteacher_upd7807_map)
|
||||
MCFG_CPU_IO_MAP(pteacher_upd7807_io_map)
|
||||
MCFG_UPD7807_PORTA_READ_CB(READ8(homedata_state, pteacher_upd7807_porta_r))
|
||||
MCFG_UPD7807_PORTA_WRITE_CB(WRITE8(homedata_state, pteacher_upd7807_porta_w))
|
||||
MCFG_UPD7807_PORTB_WRITE_CB(DEVWRITE8("dac", dac_byte_interface, write))
|
||||
MCFG_UPD7807_PORTC_READ_CB(IOPORT("COIN"))
|
||||
MCFG_UPD7807_PORTC_WRITE_CB(WRITE8(homedata_state, pteacher_upd7807_portc_w))
|
||||
MCFG_UPD7807_PORTT_READ_CB(READ8(homedata_state, pteacher_keyboard_r))
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", homedata_state, upd7807_irq)
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) // should be enough
|
||||
|
@ -707,21 +707,6 @@ static ADDRESS_MAP_START( metro_sound_map, AS_PROGRAM, 8, metro_state )
|
||||
AM_RANGE(0xff00, 0xffff) AM_RAM /* Internal RAM */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( metro_sound_io_map, AS_IO, 8, metro_state )
|
||||
AM_RANGE(UPD7810_PORTA, UPD7810_PORTA) AM_READWRITE(metro_porta_r, metro_porta_w)
|
||||
AM_RANGE(UPD7810_PORTB, UPD7810_PORTB) AM_WRITE(metro_portb_w)
|
||||
AM_RANGE(UPD7810_PORTC, UPD7810_PORTC) AM_WRITE(metro_sound_rombank_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/*****************/
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( daitorid_sound_io_map, AS_IO, 8, metro_state )
|
||||
AM_RANGE(UPD7810_PORTA, UPD7810_PORTA) AM_READWRITE(metro_porta_r, metro_porta_w)
|
||||
AM_RANGE(UPD7810_PORTB, UPD7810_PORTB) AM_WRITE(daitorid_portb_w)
|
||||
AM_RANGE(UPD7810_PORTC, UPD7810_PORTC) AM_WRITE(daitorid_sound_rombank_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/*****************/
|
||||
|
||||
|
||||
@ -3656,6 +3641,27 @@ static MACHINE_CONFIG_DERIVED( batlbubl, msgogo )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( metro_upd7810_sound )
|
||||
MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2)
|
||||
MCFG_UPD7810_RXD(READLINE(metro_state, metro_rxd_r))
|
||||
MCFG_CPU_PROGRAM_MAP(metro_sound_map)
|
||||
MCFG_UPD7810_PORTA_READ_CB(READ8(metro_state, metro_porta_r))
|
||||
MCFG_UPD7810_PORTA_WRITE_CB(WRITE8(metro_state, metro_porta_w))
|
||||
MCFG_UPD7810_PORTB_WRITE_CB(WRITE8(metro_state, metro_portb_w))
|
||||
MCFG_UPD7810_PORTC_WRITE_CB(WRITE8(metro_state, metro_sound_rombank_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( daitorid_upd7810_sound )
|
||||
MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_12MHz)
|
||||
MCFG_UPD7810_RXD(READLINE(metro_state, metro_rxd_r))
|
||||
MCFG_CPU_PROGRAM_MAP(metro_sound_map)
|
||||
MCFG_UPD7810_PORTA_READ_CB(READ8(metro_state, metro_porta_r))
|
||||
MCFG_UPD7810_PORTA_WRITE_CB(WRITE8(metro_state, metro_porta_w))
|
||||
MCFG_UPD7810_PORTB_WRITE_CB(WRITE8(metro_state, daitorid_portb_w))
|
||||
MCFG_UPD7810_PORTC_WRITE_CB(WRITE8(metro_state, daitorid_sound_rombank_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( daitorid, metro_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -3664,10 +3670,7 @@ static MACHINE_CONFIG_START( daitorid, metro_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, metro_vblank_interrupt)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 8*60) // ?
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_12MHz)
|
||||
MCFG_UPD7810_RXD(READLINE(metro_state,metro_rxd_r))
|
||||
MCFG_CPU_PROGRAM_MAP(metro_sound_map)
|
||||
MCFG_CPU_IO_MAP(daitorid_sound_io_map)
|
||||
MCFG_FRAGMENT_ADD(daitorid_upd7810_sound)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -3705,10 +3708,7 @@ static MACHINE_CONFIG_START( dharma, metro_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, metro_vblank_interrupt)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 8*60) // ?
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2)
|
||||
MCFG_UPD7810_RXD(READLINE(metro_state,metro_rxd_r))
|
||||
MCFG_CPU_PROGRAM_MAP(metro_sound_map)
|
||||
MCFG_CPU_IO_MAP(metro_sound_io_map)
|
||||
MCFG_FRAGMENT_ADD(metro_upd7810_sound)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -3745,10 +3745,7 @@ static MACHINE_CONFIG_START( karatour, metro_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, karatour_interrupt)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 8*60) // ?
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2)
|
||||
MCFG_UPD7810_RXD(READLINE(metro_state,metro_rxd_r))
|
||||
MCFG_CPU_PROGRAM_MAP(metro_sound_map)
|
||||
MCFG_CPU_IO_MAP(metro_sound_io_map)
|
||||
MCFG_FRAGMENT_ADD(metro_upd7810_sound)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -3785,10 +3782,7 @@ static MACHINE_CONFIG_START( 3kokushi, metro_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, karatour_interrupt)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 8*60) // ?
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2)
|
||||
MCFG_UPD7810_RXD(READLINE(metro_state,metro_rxd_r))
|
||||
MCFG_CPU_PROGRAM_MAP(metro_sound_map)
|
||||
MCFG_CPU_IO_MAP(metro_sound_io_map)
|
||||
MCFG_FRAGMENT_ADD(metro_upd7810_sound)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -3825,10 +3819,7 @@ static MACHINE_CONFIG_START( lastfort, metro_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, metro_vblank_interrupt)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 8*60) // ?
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2)
|
||||
MCFG_UPD7810_RXD(READLINE(metro_state,metro_rxd_r))
|
||||
MCFG_CPU_PROGRAM_MAP(metro_sound_map)
|
||||
MCFG_CPU_IO_MAP(metro_sound_io_map)
|
||||
MCFG_FRAGMENT_ADD(metro_upd7810_sound)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -3864,10 +3855,7 @@ static MACHINE_CONFIG_START( lastforg, metro_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, karatour_interrupt)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 8*60) // ?
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2)
|
||||
MCFG_UPD7810_RXD(READLINE(metro_state,metro_rxd_r))
|
||||
MCFG_CPU_PROGRAM_MAP(metro_sound_map)
|
||||
MCFG_CPU_IO_MAP(metro_sound_io_map)
|
||||
MCFG_FRAGMENT_ADD(metro_upd7810_sound)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -4046,10 +4034,7 @@ static MACHINE_CONFIG_START( pangpoms, metro_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, metro_vblank_interrupt)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 8*60) // ?
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2)
|
||||
MCFG_UPD7810_RXD(READLINE(metro_state,metro_rxd_r))
|
||||
MCFG_CPU_PROGRAM_MAP(metro_sound_map)
|
||||
MCFG_CPU_IO_MAP(metro_sound_io_map)
|
||||
MCFG_FRAGMENT_ADD(metro_upd7810_sound)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -4086,10 +4071,7 @@ static MACHINE_CONFIG_START( poitto, metro_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, metro_vblank_interrupt)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 8*60) // ?
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2)
|
||||
MCFG_UPD7810_RXD(READLINE(metro_state,metro_rxd_r))
|
||||
MCFG_CPU_PROGRAM_MAP(metro_sound_map)
|
||||
MCFG_CPU_IO_MAP(metro_sound_io_map)
|
||||
MCFG_FRAGMENT_ADD(metro_upd7810_sound)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -4126,10 +4108,7 @@ static MACHINE_CONFIG_START( pururun, metro_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, metro_vblank_interrupt)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 8*60) // ?
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2) /* Not confiremd */
|
||||
MCFG_UPD7810_RXD(READLINE(metro_state,metro_rxd_r))
|
||||
MCFG_CPU_PROGRAM_MAP(metro_sound_map)
|
||||
MCFG_CPU_IO_MAP(daitorid_sound_io_map)
|
||||
MCFG_FRAGMENT_ADD(daitorid_upd7810_sound)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -4167,10 +4146,7 @@ static MACHINE_CONFIG_START( skyalert, metro_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, metro_vblank_interrupt)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 8*60) // ?
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2)
|
||||
MCFG_UPD7810_RXD(READLINE(metro_state,metro_rxd_r))
|
||||
MCFG_CPU_PROGRAM_MAP(metro_sound_map)
|
||||
MCFG_CPU_IO_MAP(metro_sound_io_map)
|
||||
MCFG_FRAGMENT_ADD(metro_upd7810_sound)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -4207,10 +4183,7 @@ static MACHINE_CONFIG_START( toride2g, metro_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, metro_vblank_interrupt)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 8*60) // ?
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2)
|
||||
MCFG_UPD7810_RXD(READLINE(metro_state,metro_rxd_r))
|
||||
MCFG_CPU_PROGRAM_MAP(metro_sound_map)
|
||||
MCFG_CPU_IO_MAP(metro_sound_io_map)
|
||||
MCFG_FRAGMENT_ADD(metro_upd7810_sound)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -76,13 +76,6 @@ static ADDRESS_MAP_START( scv_mem, AS_PROGRAM, 8, scv_state )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( scv_io, AS_IO, 8, scv_state )
|
||||
AM_RANGE( 0x00, 0x00 ) AM_WRITE(porta_w)
|
||||
AM_RANGE( 0x01, 0x01 ) AM_READ(portb_r)
|
||||
AM_RANGE( 0x02, 0x02 ) AM_READWRITE(portc_r, portc_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( scv )
|
||||
PORT_START( "PA.0" )
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_8WAY
|
||||
@ -660,7 +653,10 @@ static MACHINE_CONFIG_START( scv, scv_state )
|
||||
|
||||
MCFG_CPU_ADD( "maincpu", UPD7801, XTAL_4MHz )
|
||||
MCFG_CPU_PROGRAM_MAP( scv_mem )
|
||||
MCFG_CPU_IO_MAP( scv_io )
|
||||
MCFG_UPD7810_PORTA_WRITE_CB(WRITE8(scv_state, porta_w))
|
||||
MCFG_UPD7810_PORTB_READ_CB(READ8(scv_state, portb_r))
|
||||
MCFG_UPD7810_PORTC_READ_CB(READ8(scv_state, portc_r))
|
||||
MCFG_UPD7810_PORTC_WRITE_CB(WRITE8(scv_state, portc_w))
|
||||
|
||||
/* Video chip is EPOCH TV-1 */
|
||||
MCFG_SCREEN_ADD( "screen", RASTER )
|
||||
|
Loading…
Reference in New Issue
Block a user