diff options
Diffstat (limited to 'src/mame/drivers/gei.cpp')
-rw-r--r-- | src/mame/drivers/gei.cpp | 76 |
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) |