diff options
Diffstat (limited to 'src/mame/drivers/merit.cpp')
-rw-r--r-- | src/mame/drivers/merit.cpp | 68 |
1 files changed, 33 insertions, 35 deletions
diff --git a/src/mame/drivers/merit.cpp b/src/mame/drivers/merit.cpp index 65fe447c3c4..0cd46ca556d 100644 --- a/src/mame/drivers/merit.cpp +++ b/src/mame/drivers/merit.cpp @@ -95,6 +95,7 @@ public: , m_ram_video(*this, "ravideo") , m_backup_ram(*this, "backup_ram") , m_maincpu(*this, "maincpu") + , m_ppi(*this, "ppi8255_%u", 0U) , m_screen(*this, "screen") , m_leds(*this, "led%u", 0U) { } @@ -166,6 +167,7 @@ private: int m_decryption_key; optional_shared_ptr<uint8_t> m_backup_ram; required_device<cpu_device> m_maincpu; + required_device_array<i8255_device, 2> m_ppi; required_device<screen_device> m_screen; output_finder<10> m_leds; }; @@ -418,8 +420,8 @@ void merit_state::pitboss_map(address_map &map) { map(0x0000, 0x5fff).rom(); map(0x6000, 0x67ff).ram(); - map(0xa000, 0xa003).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0xc000, 0xc003).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xa000, 0xa003).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc000, 0xc003).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xe000, 0xe000).w("crtc", FUNC(mc6845_device::address_w)); map(0xe001, 0xe001).w("crtc", FUNC(mc6845_device::register_w)); map(0xe800, 0xefff).ram().share("raattr"); @@ -435,8 +437,8 @@ void merit_state::casino5_map(address_map &map) map(0x6000, 0x6fff).ram().share("nvram"); map(0x7000, 0x7000).w(FUNC(merit_state::casino5_bank_w)); map(0x7001, 0x7fff).ram(); - map(0xa000, 0xa003).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0xc000, 0xc003).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xa000, 0xa003).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc000, 0xc003).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xe000, 0xe000).w("crtc", FUNC(mc6845_device::address_w)); map(0xe001, 0xe001).w("crtc", FUNC(mc6845_device::register_w)); map(0xe800, 0xefff).ram().share("raattr"); @@ -448,8 +450,8 @@ void merit_state::bigappg_map(address_map &map) { map(0x0000, 0x7fff).rom(); map(0xa000, 0xbfff).ram().share("nvram"); - map(0xc004, 0xc007).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0xc008, 0xc00b).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc004, 0xc007).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc008, 0xc00b).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xe000, 0xe000).w("crtc", FUNC(mc6845_device::address_w)); map(0xe001, 0xe001).w("crtc", FUNC(mc6845_device::register_w)); map(0xe800, 0xefff).ram().share("raattr"); @@ -462,8 +464,8 @@ void merit_state::misdraw_map(address_map &map) map(0x0000, 0x7fff).rom(); map(0xa000, 0xbfff).ram().share("nvram"); map(0xb000, 0xb7ff).ram().share("cpunvram"); // overlays other NVRAM? or is it banked? - map(0xc004, 0xc007).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); // swapped compared to other set? - map(0xc008, 0xc00b).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc004, 0xc007).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write)); // swapped compared to other set? + map(0xc008, 0xc00b).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xe000, 0xe000).w("crtc", FUNC(mc6845_device::address_w)); map(0xe001, 0xe001).w("crtc", FUNC(mc6845_device::register_w)); map(0xe800, 0xefff).ram().share("raattr"); @@ -475,8 +477,8 @@ void merit_state::dodge_map(address_map &map) { map(0x0000, 0x7fff).rom(); map(0xa000, 0xbfff).ram().share("nvram"); - map(0xc004, 0xc007).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0xc008, 0xc00b).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc004, 0xc007).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc008, 0xc00b).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xe000, 0xe000).w("crtc", FUNC(mc6845_device::address_w)); map(0xe001, 0xe001).w("crtc", FUNC(mc6845_device::register_w)); map(0xe800, 0xefff).ram().share("raattr"); @@ -496,8 +498,8 @@ void merit_state::trvwhiz_map(address_map &map) map(0x5400, 0x54ff).w(FUNC(merit_state::low_offset_w)); map(0x5800, 0x58ff).w(FUNC(merit_state::med_offset_w)); map(0x6000, 0x67ff).ram(); - map(0xa000, 0xa003).mirror(0x1df0).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0xc000, 0xc003).mirror(0x1df0).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xa000, 0xa003).mirror(0x1df0).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc000, 0xc003).mirror(0x1df0).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xe000, 0xe000).mirror(0x05f0).w("crtc", FUNC(mc6845_device::address_w)); map(0xe001, 0xe001).mirror(0x05f0).w("crtc", FUNC(mc6845_device::register_w)); map(0xe800, 0xefff).ram().share("raattr"); @@ -516,8 +518,8 @@ void merit_state::phrcraze_map(address_map &map) { map(0x0000, 0x7fff).rom(); map(0xa000, 0xbfff).ram(); - map(0xc008, 0xc00b).mirror(0x1df0).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0xc00c, 0xc00f).mirror(0x1df0).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc008, 0xc00b).mirror(0x1df0).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc00c, 0xc00f).mirror(0x1df0).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xce00, 0xceff).rw(FUNC(merit_state::questions_r), FUNC(merit_state::high_offset_w)); map(0xd600, 0xd6ff).w(FUNC(merit_state::low_offset_w)); map(0xda00, 0xdaff).w(FUNC(merit_state::med_offset_w)); @@ -539,8 +541,8 @@ void merit_state::tictac_map(address_map &map) { map(0x0000, 0x7fff).rom(); map(0x8000, 0x9fff).ram(); - map(0xc004, 0xc007).mirror(0x1df0).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0xc008, 0xc00b).mirror(0x1df0).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc004, 0xc007).mirror(0x1df0).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc008, 0xc00b).mirror(0x1df0).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xce00, 0xceff).rw(FUNC(merit_state::questions_r), FUNC(merit_state::high_offset_w)); map(0xd600, 0xd6ff).w(FUNC(merit_state::low_offset_w)); map(0xda00, 0xdaff).w(FUNC(merit_state::med_offset_w)); @@ -562,8 +564,8 @@ void merit_state::trvwhziv_map(address_map &map) { map(0x0000, 0x7fff).rom(); map(0xa000, 0xbfff).ram(); - map(0xc004, 0xc007).mirror(0x1df0).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0xc008, 0xc00b).mirror(0x1df0).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc004, 0xc007).mirror(0x1df0).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc008, 0xc00b).mirror(0x1df0).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xce00, 0xceff).rw(FUNC(merit_state::questions_r), FUNC(merit_state::high_offset_w)); map(0xd600, 0xd6ff).w(FUNC(merit_state::low_offset_w)); map(0xda00, 0xdaff).w(FUNC(merit_state::med_offset_w)); @@ -579,8 +581,8 @@ void merit_state::dtrvwz5_map(address_map &map) map(0x0000, 0x7fff).rom(); map(0x8000, 0x9fff).ram().share("nvram"); map(0xb000, 0xb0ff).rom(); /* protection? code jumps here */ - map(0xc004, 0xc007).mirror(0x1df0).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0xc008, 0xc00b).mirror(0x1df0).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc004, 0xc007).mirror(0x1df0).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc008, 0xc00b).mirror(0x1df0).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xce00, 0xceff).rw(FUNC(merit_state::questions_r), FUNC(merit_state::high_offset_w)); map(0xd600, 0xd6ff).w(FUNC(merit_state::low_offset_w)); map(0xda00, 0xdaff).w(FUNC(merit_state::med_offset_w)); @@ -596,8 +598,8 @@ void merit_state::couple_map(address_map &map) map(0x0000, 0x7fff).rom(); map(0x8000, 0x9fff).bankr("bank1"); map(0xa000, 0xbfff).ram().share("backup_ram"); - map(0xc004, 0xc007).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0xc008, 0xc00b).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc004, 0xc007).rw(m_ppi[0], FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0xc008, 0xc00b).rw(m_ppi[1], FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xe000, 0xe000).w("crtc", FUNC(mc6845_device::address_w)); map(0xe001, 0xe001).w("crtc", FUNC(mc6845_device::register_w)); map(0xe800, 0xefff).ram().share("raattr"); @@ -1412,15 +1414,15 @@ MACHINE_CONFIG_START(merit_state::pitboss) MCFG_DEVICE_PROGRAM_MAP(pitboss_map) MCFG_DEVICE_IO_MAP(trvwhiz_io_map) - MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0) - MCFG_I8255_IN_PORTA_CB(IOPORT("IN0")) - MCFG_I8255_IN_PORTB_CB(IOPORT("IN1")) - MCFG_I8255_IN_PORTC_CB(IOPORT("IN2")) + I8255A(config, m_ppi[0]); + m_ppi[0]->in_pa_callback().set_ioport("IN0"); + m_ppi[0]->in_pb_callback().set_ioport("IN1"); + m_ppi[0]->in_pc_callback().set_ioport("IN2"); - MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0) - MCFG_I8255_IN_PORTA_CB(IOPORT("DSW")) - MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, merit_state, led1_w)) - MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, merit_state, misc_w)) + I8255A(config, m_ppi[1]); + m_ppi[1]->in_pa_callback().set_ioport("DSW"); + m_ppi[1]->out_pb_callback().set(FUNC(merit_state::led1_w)); + m_ppi[1]->out_pc_callback().set(FUNC(merit_state::misc_w)); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -1530,11 +1532,7 @@ MACHINE_CONFIG_START(merit_state::couple) MCFG_DEVICE_PROGRAM_MAP(couple_map) MCFG_DEVICE_IO_MAP(tictac_io_map) - MCFG_DEVICE_REMOVE("ppi8255_1") - MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0) - MCFG_I8255_IN_PORTA_CB(IOPORT("DSW")) - MCFG_I8255_OUT_PORTB_CB(WRITE8(*this, merit_state, led1_w)) - MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, merit_state, misc_couple_w)) + m_ppi[1]->out_pc_callback().set(FUNC(merit_state::misc_couple_w)); MACHINE_CONFIG_END |