summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/gei.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/gei.cpp')
-rw-r--r--src/mame/drivers/gei.cpp76
1 files changed, 33 insertions, 43 deletions
diff --git a/src/mame/drivers/gei.cpp b/src/mame/drivers/gei.cpp
index e6da3f1ccb0..9af0823a872 100644
--- a/src/mame/drivers/gei.cpp
+++ b/src/mame/drivers/gei.cpp
@@ -89,6 +89,7 @@ public:
gei_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_ppi(*this, "ppi8255_%u", 0U)
, m_dac(*this, "dac")
, m_ticket(*this, "ticket")
, m_screen(*this, "screen")
@@ -157,6 +158,7 @@ private:
uint8_t m_nmi_mask;
required_device<cpu_device> m_maincpu;
+ required_device_array<i8255_device, 2> m_ppi;
required_device<dac_bit_interface> m_dac;
optional_device<ticket_dispenser_device> m_ticket;
required_device<screen_device> m_screen;
@@ -355,8 +357,8 @@ void gei_state::getrivia_map(address_map &map)
map(0x0000, 0x1fff).rom();
map(0x2000, 0x3fff).bankr("rombank");
map(0x4000, 0x47ff).ram().share("nvram");
- map(0x4800, 0x4803).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0x5000, 0x5003).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x4800, 0x4803).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x5000, 0x5003).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x600f, 0x600f).w(FUNC(gei_state::banksel_w<8>));
map(0x6017, 0x6017).w(FUNC(gei_state::banksel_w<6>));
map(0x601b, 0x601b).w(FUNC(gei_state::banksel_w<4>));
@@ -382,8 +384,8 @@ void gei_state::gselect_map(address_map &map)
map(0x4401, 0x4401).w(FUNC(gei_state::banksel_w<1>));
map(0x4402, 0x4402).w(FUNC(gei_state::banksel_w<2>));
map(0x4403, 0x4403).w(FUNC(gei_state::banksel_w<3>));
- map(0x4800, 0x4803).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0x5000, 0x5003).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x4800, 0x4803).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x5000, 0x5003).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x8000, 0x8002).w(FUNC(gei_state::gei_drawctrl_w));
map(0xc000, 0xffff).ram().w(FUNC(gei_state::gei_bitmap_w));
}
@@ -394,8 +396,8 @@ void gei_state::amuse_map(address_map &map)
map(0x0000, 0x1fff).rom();
map(0x2000, 0x3fff).bankr("rombank");
map(0x4000, 0x47ff).ram().share("nvram");
- map(0x4800, 0x4803).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0x5000, 0x5003).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x4800, 0x4803).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x5000, 0x5003).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x606f, 0x606f).w(FUNC(gei_state::banksel_w<8>));
map(0x6077, 0x6077).w(FUNC(gei_state::banksel_w<6>));
map(0x607b, 0x607b).w(FUNC(gei_state::banksel_w<4>));
@@ -411,8 +413,8 @@ void gei_state::gepoker_map(address_map &map)
map(0x0000, 0x1fff).rom();
map(0x2000, 0x3fff).bankr("rombank");
map(0x4000, 0x47ff).ram().share("nvram");
- map(0x4800, 0x4803).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0x5000, 0x5003).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x4800, 0x4803).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x5000, 0x5003).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x60ef, 0x60ef).w(FUNC(gei_state::banksel_w<4>));
map(0x60f7, 0x60f7).w(FUNC(gei_state::banksel_w<3>));
map(0x60fb, 0x60fb).w(FUNC(gei_state::banksel_w<2>));
@@ -433,8 +435,8 @@ void gei_state::amuse1_map(address_map &map)
map(0x4401, 0x4401).w(FUNC(gei_state::banksel_w<2>));
map(0x4402, 0x4402).w(FUNC(gei_state::banksel_w<4>));
map(0x4403, 0x4403).w(FUNC(gei_state::banksel_w<6>));
- map(0x4800, 0x4803).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0x5000, 0x5003).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x4800, 0x4803).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x5000, 0x5003).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x5800, 0x5fff).rom();
map(0x8000, 0x8002).w(FUNC(gei_state::gei_drawctrl_w));
map(0x8000, 0xbfff).rom(); /* space for diagnostic ROM? */
@@ -447,8 +449,8 @@ void gei_state::findout_map(address_map &map)
map(0x0000, 0xffff).r(FUNC(gei_state::catchall));
map(0x0000, 0x3fff).rom();
map(0x4000, 0x47ff).ram().share("nvram");
- map(0x4800, 0x4803).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0x5000, 0x5003).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x4800, 0x4803).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x5000, 0x5003).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write));
/* banked ROMs are enabled by low 6 bits of the address */
map(0x601f, 0x601f).w(FUNC(gei_state::banksel_w<0>));
map(0x602f, 0x602f).w(FUNC(gei_state::banksel_w<5>));
@@ -469,8 +471,8 @@ void gei_state::quizvid_map(address_map &map)
map(0x0000, 0xffff).r(FUNC(gei_state::catchall));
map(0x0000, 0x3fff).rom();
map(0x4000, 0x47ff).ram().share("nvram");
- map(0x4800, 0x4803).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0x5000, 0x5003).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x4800, 0x4803).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x5000, 0x5003).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write));
/* banked ROMs are enabled by low 6 bits of the address */
map(0x602f, 0x602f).r(FUNC(gei_state::banksel_r<5>));
map(0x6037, 0x6037).r(FUNC(gei_state::banksel_r<4>));
@@ -487,8 +489,8 @@ void gei_state::suprpokr_map(address_map &map)
{
map(0x0000, 0x3fff).rom();
map(0x4000, 0x47ff).ram().share("nvram");
- map(0x4800, 0x4803).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0x5000, 0x5003).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x4800, 0x4803).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x5000, 0x5003).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x6200, 0x6200).w(FUNC(gei_state::signature_w));
map(0x6400, 0x6400).r(FUNC(gei_state::signature_r));
map(0x8000, 0x8002).w(FUNC(gei_state::gei_drawctrl_w));
@@ -500,8 +502,8 @@ void gei_state::sprtauth_map(address_map &map)
{
map(0x0000, 0x3fff).rom();
map(0x4000, 0x47ff).ram().share("nvram");
- map(0x4800, 0x4803).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0x5000, 0x5003).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x4800, 0x4803).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x5000, 0x5003).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x5600, 0x5600).r(FUNC(gei_state::signature_r));
map(0x5800, 0x5800).w(FUNC(gei_state::signature_w));
map(0x5a00, 0x5cff).w(FUNC(gei_state::geimulti_bank_w));
@@ -994,15 +996,15 @@ MACHINE_CONFIG_START(gei_state::getrivia)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0)
- MCFG_I8255_IN_PORTA_CB(IOPORT("DSWA"))
- MCFG_I8255_IN_PORTB_CB(IOPORT("IN0"))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, gei_state, sound_w))
+ I8255A(config, m_ppi[0]);
+ m_ppi[0]->in_pa_callback().set_ioport("DSWA");
+ m_ppi[0]->in_pb_callback().set_ioport("IN0");
+ m_ppi[0]->out_pc_callback().set(FUNC(gei_state::sound_w));
- MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
- MCFG_I8255_IN_PORTA_CB(IOPORT("IN1"))
- MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, gei_state, lamps_w))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, gei_state, lamps2_w))
+ I8255A(config, m_ppi[1]);
+ m_ppi[1]->in_pa_callback().set_ioport("IN1");
+ m_ppi[1]->out_pb_callback().set(FUNC(gei_state::lamps_w));
+ m_ppi[1]->out_pc_callback().set(FUNC(gei_state::lamps2_w));
MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(100), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH)
@@ -1019,11 +1021,8 @@ MACHINE_CONFIG_START(gei_state::findout)
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(findout_map)
- MCFG_DEVICE_REMOVE("ppi8255_1")
- MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
- MCFG_I8255_IN_PORTA_CB(IOPORT("IN1"))
- MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, gei_state, lamps_w))
- MCFG_I8255_IN_PORTC_CB(READ8(*this, gei_state, portC_r))
+ m_ppi[1]->in_pc_callback().set(FUNC(gei_state::portC_r));
+ m_ppi[1]->out_pc_callback().set_nop();
MACHINE_CONFIG_END
MACHINE_CONFIG_START(gei_state::quizvid)
@@ -1046,19 +1045,10 @@ MACHINE_CONFIG_START(gei_state::gselect)
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_PROGRAM_MAP(gselect_map)
- MCFG_DEVICE_REMOVE("ppi8255_0")
- MCFG_DEVICE_REMOVE("ppi8255_1")
+ m_ppi[0]->out_pc_callback().set(FUNC(gei_state::sound2_w));
- MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0)
- MCFG_I8255_IN_PORTA_CB(IOPORT("DSWA"))
- MCFG_I8255_IN_PORTB_CB(IOPORT("IN0"))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, gei_state, sound2_w))
-
- MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
- MCFG_I8255_IN_PORTA_CB(IOPORT("IN1"))
- MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, gei_state, lamps_w))
- MCFG_I8255_IN_PORTC_CB(IOPORT("IN2"))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, gei_state, nmi_w))
+ m_ppi[1]->in_pc_callback().set_ioport("IN2");
+ m_ppi[1]->out_pc_callback().set(FUNC(gei_state::nmi_w));
MACHINE_CONFIG_END
MACHINE_CONFIG_START(gei_state::jokpokera)