From ba79ea22d548dfe638dcd108ee630e0427ca1de4 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Sun, 27 Jan 2013 18:55:55 +0000 Subject: [PATCH] some mpu4.c tagmap reduction (nw) --- src/mame/drivers/mpu4hw.c | 70 +++++++++++++++++--------------------- src/mame/drivers/mpu4vid.c | 31 ++++++++++------- src/mame/includes/mpu4.h | 30 ++++++++++++++-- 3 files changed, 79 insertions(+), 52 deletions(-) diff --git a/src/mame/drivers/mpu4hw.c b/src/mame/drivers/mpu4hw.c index 8b7eb1e3027..1d27edbeb44 100644 --- a/src/mame/drivers/mpu4hw.c +++ b/src/mame/drivers/mpu4hw.c @@ -462,15 +462,15 @@ MACHINE_RESET_MEMBER(mpu4_state,mpu4) int numbanks = romsize / 0x10000; - membank("bank1")->configure_entries(0, 8, &rom[0x01000], 0x10000); + m_bank1->configure_entries(0, 8, &rom[0x01000], 0x10000); // some Bwb games must default to the last bank, does anything not like this // behavior? // some Bwb games don't work anyway tho, they seem to dislike something else // about the way the regular banking behaves, not related to the CB2 stuff - membank("bank1")->set_entry(numbanks-1); + m_bank1->set_entry(numbanks-1); - machine().device("maincpu")->reset(); + m_maincpu->reset(); } } @@ -515,13 +515,13 @@ WRITE8_MEMBER(mpu4_state::bankswitch_w) // m_pageset is never even set?? m_pageval = (data & 0x03); - membank("bank1")->set_entry((m_pageval + (m_pageset ? 4 : 0)) & 0x07); + m_bank1->set_entry((m_pageval + (m_pageset ? 4 : 0)) & 0x07); } READ8_MEMBER(mpu4_state::bankswitch_r) { - return membank("bank1")->entry(); + return m_bank1->entry(); } @@ -532,7 +532,7 @@ WRITE8_MEMBER(mpu4_state::bankset_w) // m_pageset is never even set?? m_pageval = (data - 2);//writes 2 and 3, to represent 0 and 1 - a hangover from the half page design? - membank("bank1")->set_entry((m_pageval + (m_pageset ? 4 : 0)) & 0x07); + m_bank1->set_entry((m_pageval + (m_pageset ? 4 : 0)) & 0x07); } @@ -782,7 +782,7 @@ WRITE8_MEMBER(mpu4_state::pia_ic4_portb_w) READ8_MEMBER(mpu4_state::pia_ic4_portb_r) { - pia6821_device *pia = machine().device("pia_ic4"); + pia6821_device *pia = m_pia4; if ( m_serial_data ) { m_ic4_input_b |= 0x80; @@ -897,14 +897,14 @@ READ8_MEMBER(mpu4_state::pia_ic5_porta_r) } LOG(("%s: IC5 PIA Read of Port A (AUX1)\n",machine().describe_context())); - return machine().root_device().ioport("AUX1")->read()|m_aux1_input; + return m_aux1_port->read()|m_aux1_input; } WRITE8_MEMBER(mpu4_state::pia_ic5_porta_w) { int i; mpu4_state *state = machine().driver_data(); - pia6821_device *pia_ic4 = machine().device("pia_ic4"); + pia6821_device *pia_ic4 = m_pia4; if (m_hopper == HOPPER_NONDUART_A) { //hopper1_drive_sensor(data&0x10); @@ -1084,7 +1084,7 @@ READ8_MEMBER(mpu4_state::pia_ic5_portb_r) coin_lockout_w(machine(), 1, (pia_ic5->b_output() & 0x02) ); coin_lockout_w(machine(), 2, (pia_ic5->b_output() & 0x04) ); coin_lockout_w(machine(), 3, (pia_ic5->b_output() & 0x08) ); - return machine().root_device().ioport("AUX2")->read() | m_aux2_input; + return m_aux2_port->read() | m_aux2_input; } @@ -1382,15 +1382,14 @@ static const pia6821_interface pia_ic7_intf = /* IC8, Inputs, TRIACS, alpha clock */ READ8_MEMBER(mpu4_state::pia_ic8_porta_r) { - static const char *const portnames[] = { "ORANGE1", "ORANGE2", "BLACK1", "BLACK2", "ORANGE1", "ORANGE2", "DIL1", "DIL2" }; - pia6821_device *pia_ic5 = machine().device("pia_ic5"); + ioport_port * portnames[] = { m_orange1_port, m_orange2_port, m_black1_port, m_black2_port, m_orange1_port, m_orange2_port, m_dil1_port, m_dil2_port }; LOG_IC8(("%s: IC8 PIA Read of Port A (MUX input data)\n", machine().describe_context())); /* The orange inputs are polled twice as often as the black ones, for reasons of efficiency. This is achieved via connecting every input line to an AND gate, thus allowing two strobes to represent each orange input bank (strobes are active low). */ - pia_ic5->cb1_w(machine().root_device().ioport("AUX2")->read() & 0x80); - return machine().root_device().ioport(portnames[m_input_strobe])->read(); + m_pia5->cb1_w(m_aux2_port->read() & 0x80); + return (portnames[m_input_strobe])->read(); } @@ -1458,16 +1457,12 @@ static const pia6821_interface pia_ic8_intf = // Sampled sound card, using a PIA and PTM for timing and data handling WRITE8_MEMBER(mpu4_state::pia_gb_porta_w) { - device_t *msm6376 = machine().device("msm6376"); LOG_SS(("%s: GAMEBOARD: PIA Port A Set to %2x\n", machine().describe_context(),data)); - okim6376_w(msm6376, space, 0, data); + okim6376_w(m_msm6376, space, 0, data); } WRITE8_MEMBER(mpu4_state::pia_gb_portb_w) { - device_t *msm6376 = machine().device("msm6376"); - okim6376_device *msm = machine().device("msm6376"); - int changed = m_expansion_latch^data; LOG_SS(("%s: GAMEBOARD: PIA Port B Set to %2x\n", machine().describe_context(),data)); @@ -1487,17 +1482,16 @@ WRITE8_MEMBER(mpu4_state::pia_gb_portb_w) { float percent = (32-m_global_volume)/32.0; - msm->set_output_gain(0, percent); - msm->set_output_gain(1, percent); + m_msm6376->set_output_gain(0, percent); + m_msm6376->set_output_gain(1, percent); } } } - okim6376_ch2_w(msm6376,data&0x02); - okim6376_st_w(msm6376,data&0x01); + okim6376_ch2_w(m_msm6376,data&0x02); + okim6376_st_w(m_msm6376,data&0x01); } READ8_MEMBER(mpu4_state::pia_gb_portb_r) { - device_t *msm6376 = machine().device("msm6376"); LOG_SS(("%s: GAMEBOARD: PIA Read of Port B\n",machine().describe_context())); int data=0; // b7 NAR - we can load another address into Channel 1 @@ -1506,10 +1500,10 @@ READ8_MEMBER(mpu4_state::pia_gb_portb_r) // b4, 1 = Vol down, 0 = Vol up // - if ( okim6376_nar_r(msm6376) ) data |= 0x80; + if ( okim6376_nar_r(m_msm6376) ) data |= 0x80; else data &= ~0x80; - if ( okim6376_busy_r(msm6376) ) data |= 0x40; + if ( okim6376_busy_r(m_msm6376) ) data |= 0x40; else data &= ~0x40; return ( data | m_expansion_latch ); @@ -1529,7 +1523,7 @@ WRITE_LINE_MEMBER(mpu4_state::pia_gb_cb2_w) { //printf("pia_gb_cb2_w %d\n", state); m_pageval = state; - membank("bank1")->set_entry((m_pageval + (m_pageset ? 4 : 0)) & 0x07); + m_bank1->set_entry((m_pageval + (m_pageset ? 4 : 0)) & 0x07); } } @@ -1589,7 +1583,6 @@ WRITE8_MEMBER(mpu4_state::ic3ss_w) { device_t *ic3ss = machine().device("ptm_ic3ss"); downcast(ic3ss)->write(offset,data); - device_t *msm6376 = machine().device("msm6376"); if (offset == 3) { @@ -1612,7 +1605,7 @@ WRITE8_MEMBER(mpu4_state::ic3ss_w) if (freq) { - okim6376_set_frequency(msm6376, freq); + okim6376_set_frequency(m_msm6376, freq); } } @@ -1774,10 +1767,10 @@ INPUT_PORTS_START( mpu4 ) PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_SPECIAL) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("10p")PORT_IMPULSE(5) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_COIN2) PORT_NAME("20p")PORT_IMPULSE(5) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN3) PORT_NAME("50p")PORT_IMPULSE(5) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_COIN4) PORT_NAME("100p")PORT_IMPULSE(5) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("10p")//PORT_IMPULSE(5) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_COIN2) PORT_NAME("20p")//PORT_IMPULSE(5) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN3) PORT_NAME("50p")//PORT_IMPULSE(5) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_COIN4) PORT_NAME("100p")//PORT_IMPULSE(5) INPUT_PORTS_END INPUT_PORTS_START( mpu4jackpot8tkn ) @@ -1993,10 +1986,10 @@ INPUT_PORTS_START( grtecp ) PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_SPECIAL) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("10p")PORT_IMPULSE(5) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_COIN2) PORT_NAME("20p")PORT_IMPULSE(5) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN3) PORT_NAME("50p")PORT_IMPULSE(5) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_COIN4) PORT_NAME("100p")PORT_IMPULSE(5) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("10p")//PORT_IMPULSE(5) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_COIN2) PORT_NAME("20p")//PORT_IMPULSE(5) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN3) PORT_NAME("50p")//PORT_IMPULSE(5) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_COIN4) PORT_NAME("100p")//PORT_IMPULSE(5) INPUT_PORTS_END static const stepper_interface barcrest_reel_interface = @@ -2332,6 +2325,7 @@ void mpu4_config_common(running_machine &machine) mpu4_state *state = machine.driver_data(); state->m_ic24_timer = machine.scheduler().timer_alloc(FUNC(ic24_timeout)); state->m_lamp_strobe_ext_persistence = 0; + /* setup 8 mechanical meters */ MechMtr_config(machine,8); @@ -2665,7 +2659,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mpu4_state::gen_50hz) falling edges of the pulse are used means the timer actually gives a 100Hz oscillating signal.*/ m_signal_50hz = m_signal_50hz?0:1; - machine().device("pia_ic4")->ca1_w(m_signal_50hz); /* signal is connected to IC4 CA1 */ + m_pia4->ca1_w(m_signal_50hz); /* signal is connected to IC4 CA1 */ update_meters(this);//run at 100Hz to sync with PIAs } diff --git a/src/mame/drivers/mpu4vid.c b/src/mame/drivers/mpu4vid.c index 4d115d58392..fef7b066049 100644 --- a/src/mame/drivers/mpu4vid.c +++ b/src/mame/drivers/mpu4vid.c @@ -218,15 +218,23 @@ class mpu4vid_state : public mpu4_state public: mpu4vid_state(const machine_config &mconfig, device_type type, const char *tag) : mpu4_state(mconfig, type, tag), + m_videocpu(*this, "video"), m_scn2674(*this, "scn2674_vid"), m_vid_vidram(*this, "vid_vidram"), - m_vid_mainram(*this, "vid_mainram") + m_vid_mainram(*this, "vid_mainram"), + m_acia_0(*this, "acia6850_0"), + m_acia_1(*this, "acia6850_1"), + m_ptm(*this, "6840ptm_68k") { } + required_device m_videocpu; optional_device m_scn2674; optional_shared_ptr m_vid_vidram; optional_shared_ptr m_vid_mainram; + required_device m_acia_0; + required_device m_acia_1; + required_device m_ptm; struct ef9369_t m_pal; struct bt471_t m_bt471; @@ -425,29 +433,27 @@ WRITE_LINE_MEMBER(mpu4vid_state::cpu1_ptm_irq) WRITE8_MEMBER(mpu4vid_state::vid_o1_callback) { - downcast(machine().device("6840ptm_68k"))->set_c2(data); /* this output is the clock for timer2 */ + m_ptm->set_c2(data); /* this output is the clock for timer2 */ if (data) { - acia6850_device *acia_0 = machine().device("acia6850_0"); - acia6850_device *acia_1 = machine().device("acia6850_1"); - acia_0->tx_clock_in(); - acia_0->rx_clock_in(); - acia_1->tx_clock_in(); - acia_1->rx_clock_in(); + m_acia_0->tx_clock_in(); + m_acia_0->rx_clock_in(); + m_acia_1->tx_clock_in(); + m_acia_1->rx_clock_in(); } } WRITE8_MEMBER(mpu4vid_state::vid_o2_callback) { - downcast(machine().device("6840ptm_68k"))->set_c3(data); /* this output is the clock for timer3 */ + m_ptm->set_c3(data); /* this output is the clock for timer3 */ } WRITE8_MEMBER(mpu4vid_state::vid_o3_callback) { - downcast(machine().device("6840ptm_68k"))->set_c1(data); /* this output is the clock for timer1 */ + m_ptm->set_c1(data); /* this output is the clock for timer1 */ } @@ -1352,8 +1358,9 @@ INPUT_PORTS_END static void video_reset(device_t *device) { - device->machine().device("6840ptm_68k")->reset(); - device->machine().device("acia6850_1")->reset(); + mpu4vid_state *state = device->machine().driver_data(); + state->m_ptm->reset(); + state->m_acia_1->reset(); } /* machine start (called only once) */ diff --git a/src/mame/includes/mpu4.h b/src/mame/includes/mpu4.h index 7dff244fc63..a45a02f0801 100644 --- a/src/mame/includes/mpu4.h +++ b/src/mame/includes/mpu4.h @@ -94,6 +94,7 @@ class mpu4_state : public driver_device public: mpu4_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), m_vfd(*this, "vfd"), m_6840ptm(*this, "ptm_ic2"), m_pia3(*this, "pia_ic3"), @@ -101,13 +102,26 @@ public: m_pia5(*this, "pia_ic5"), m_pia6(*this, "pia_ic6"), m_pia7(*this, "pia_ic7"), - m_pia8(*this, "pia_ic8") - { } + m_pia8(*this, "pia_ic8"), + m_orange1_port(*this, "ORANGE1"), + m_orange2_port(*this, "ORANGE2"), + m_black1_port(*this, "BLACK1"), + m_black2_port(*this, "BLACK2"), + m_dil1_port(*this, "DIL1"), + m_dil2_port(*this, "DIL2"), + m_aux1_port(*this, "AUX1"), + m_aux2_port(*this, "AUX2"), + m_bank1(*this, "bank1"), + m_msm6376(*this, "msm6376") + {} + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { return 0; } + required_device m_maincpu; optional_device m_vfd; optional_device m_6840ptm; optional_device m_pia3; @@ -116,6 +130,18 @@ public: optional_device m_pia6; optional_device m_pia7; optional_device m_pia8; + required_ioport m_orange1_port; + required_ioport m_orange2_port; + required_ioport m_black1_port; + required_ioport m_black2_port; + required_ioport m_dil1_port; + required_ioport m_dil2_port; + required_ioport m_aux1_port; + required_ioport m_aux2_port; + optional_memory_bank m_bank1; + optional_device m_msm6376; + + int m_mod_number; int m_mmtr_data; int m_alpha_data_line;