summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/merit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/merit.cpp')
-rw-r--r--src/mame/drivers/merit.cpp68
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