From 76add106d2115a8191fbaae23f88e00cf6e0e58d Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Mon, 5 Mar 2018 15:04:18 +1100 Subject: [PATCH] bit more cleanup (nw) --- src/mame/drivers/gts1.cpp | 110 +++++++------ src/mame/drivers/peyper.cpp | 80 +++++---- src/mame/drivers/risc2500.cpp | 44 +++-- src/mame/includes/mpu4.h | 30 +++- src/mame/machine/mpu4.cpp | 300 +++++++++++++++++----------------- 5 files changed, 312 insertions(+), 252 deletions(-) diff --git a/src/mame/drivers/gts1.cpp b/src/mame/drivers/gts1.cpp index 93b8d27499c..f2af3533546 100644 --- a/src/mame/drivers/gts1.cpp +++ b/src/mame/drivers/gts1.cpp @@ -86,10 +86,10 @@ public: , m_maincpu(*this, "maincpu") , m_dips(*this, "DSW%u", 0) , m_switches(*this, "X.%u", 0) + , m_digit8(*this, "digit8_%u", 0U) + , m_digit7(*this, "digit7_%u", 0U) { } - DECLARE_DRIVER_INIT(gts1); - void gts1(machine_config &config); protected: @@ -107,6 +107,7 @@ protected: DECLARE_READ8_MEMBER (gts1_pa_r); DECLARE_WRITE8_MEMBER(gts1_do_w); + virtual void machine_start() override; virtual void machine_reset() override; void gts1_map(address_map &map); @@ -117,6 +118,9 @@ private: required_device m_maincpu; required_ioport_array<3> m_dips; required_ioport_array<5> m_switches; + output_finder<32> m_digit8; // driver currently uses 0-6, 8-14, 16-22 and 24-30 + output_finder<32> m_digit7; // driver currently uses 7, 15, 23 and 31 + uint8_t m_strobe; //!< switches strobe lines (5 lower bits used) uint8_t m_nvram_addr; //!< NVRAM address bool m_nvram_e2; //!< NVRWAM enable (E2 line) @@ -332,8 +336,25 @@ static INPUT_PORTS_START( jokrpokr ) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) INPUT_PORTS_END +void gts1_state::machine_start() +{ + genpin_class::machine_start(); + + m_digit8.resolve(); + m_digit7.resolve(); + + save_item(NAME(m_strobe)); + save_item(NAME(m_nvram_addr)); + save_item(NAME(m_nvram_e2)); + save_item(NAME(m_nvram_wr)); + save_item(NAME(m_6351_addr)); + save_item(NAME(m_z30_out)); +} + void gts1_state::machine_reset() { + genpin_class::machine_reset(); + m_strobe = 0; m_nvram_addr = 0; m_nvram_e2 = false; @@ -342,10 +363,6 @@ void gts1_state::machine_reset() m_z30_out = 0; } -DRIVER_INIT_MEMBER(gts1_state,gts1) -{ -} - READ8_MEMBER (gts1_state::gts1_solenoid_r) { uint8_t data = 0; @@ -437,15 +454,18 @@ WRITE8_MEMBER(gts1_state::gts1_display_w) * when the input is 0001, and in this case the extra * output H is generated instead. */ -#define _a (1 << 0) -#define _b (1 << 1) -#define _c (1 << 2) -#define _d (1 << 3) -#define _e (1 << 4) -#define _f (1 << 5) -#define _g (1 << 6) -#define _h (1 << 7) - static const uint8_t ttl7448_mod[16] = { + enum : uint8_t + { + _a = 1 << 0, + _b = 1 << 1, + _c = 1 << 2, + _d = 1 << 3, + _e = 1 << 4, + _f = 1 << 5, + _g = 1 << 6, + _h = 1 << 7 + }; + static constexpr uint8_t ttl7448_mod[16] = { /* 0 */ _a | _b | _c | _d | _e | _f, /* 1 */ _h, /* 2 */ _a | _b | _d | _e | _g, @@ -466,9 +486,9 @@ WRITE8_MEMBER(gts1_state::gts1_display_w) uint8_t a = ttl7448_mod[(data >> 0) & 15]; uint8_t b = ttl7448_mod[(data >> 4) & 15]; // LOG("%s: offset:%d data:%02x a:%02x b:%02x\n", __FUNCTION__, offset, data, a, b); - if ((offset % 8) < 7) { - output().set_indexed_value("digit8_", offset, a); - output().set_indexed_value("digit8_", offset + 16, b); + if ((offset % 8) < 7) { // FIXME: layout suggests this should be < 6 rather than < 7 + m_digit8[offset] = a; + m_digit8[offset + 16] = b; } else { /* * For the 4 7-seg displays the segment h is turned back into @@ -478,18 +498,10 @@ WRITE8_MEMBER(gts1_state::gts1_display_w) a = _b | _c; if (b & _h) b = _b | _c; - output().set_indexed_value("digit7_", offset, a); + m_digit7[offset] = a; // FIXME: there is nothing on outputs 22, 23, 30 and 31? - output().set_indexed_value("digit7_", offset + 16, b); + m_digit7[offset + 16] = b; } -#undef _a -#undef _b -#undef _c -#undef _d -#undef _e -#undef _f -#undef _g -#undef _h } /** @@ -978,34 +990,34 @@ ROM_START(sys1test) ROM_END -GAME(1977, gts1, 0, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "System 1", MACHINE_IS_BIOS_ROOT | MACHINE_NOT_WORKING) +GAME(1977, gts1, 0, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "System 1", MACHINE_IS_BIOS_ROOT | MACHINE_NOT_WORKING) //Exact same roms as gts1 with added hardware we'll likely need roms for to emulate properly -GAME(1979, gts1s, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "System 1 with sound board", MACHINE_IS_BIOS_ROOT | MACHINE_NOT_WORKING ) -GAME(19??, sys1test, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "System 1 Test prom", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1979, gts1s, gts1, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "System 1 with sound board", MACHINE_IS_BIOS_ROOT | MACHINE_NOT_WORKING ) +GAME(19??, sys1test, gts1, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "System 1 Test prom", MACHINE_IS_SKELETON_MECHANICAL) // chimes -GAME(1977, cleoptra, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Cleopatra", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1978, sinbad, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Sinbad", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1978, sinbadn, sinbad, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Sinbad (Norway)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1978, jokrpokr, gts1, gts1, jokrpokr, gts1_state, gts1, ROT0, "Gottlieb", "Joker Poker", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1978, dragon, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Dragon", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1979, solaride, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Solar Ride", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1979, countdwn, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Count-Down", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1977, cleoptra, gts1, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Cleopatra", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1978, sinbad, gts1, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Sinbad", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1978, sinbadn, sinbad, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Sinbad (Norway)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1978, jokrpokr, gts1, gts1, jokrpokr, gts1_state, 0, ROT0, "Gottlieb", "Joker Poker", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1978, dragon, gts1, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Dragon", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1979, solaride, gts1, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Solar Ride", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1979, countdwn, gts1, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Count-Down", MACHINE_IS_SKELETON_MECHANICAL) // NE555 beeper -GAME(1978, closeenc, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Close Encounters of the Third Kind", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1978, charlies, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Charlie's Angels", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1979, pinpool, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Pinball Pool", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1978, closeenc, gts1, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Close Encounters of the Third Kind", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1978, charlies, gts1, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Charlie's Angels", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1979, pinpool, gts1, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Pinball Pool", MACHINE_IS_SKELETON_MECHANICAL) // sound card -GAME(1979, totem, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Totem", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1979, hulk, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "The Incredible Hulk", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1979, geniep, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Genie (Pinball)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1980, buckrgrs, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Buck Rogers", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1980, torch, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Torch", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1980, roldisco, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Roller Disco", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1980, astannie, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Asteroid Annie and the Aliens", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1979, totem, gts1s, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Totem", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1979, hulk, gts1s, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "The Incredible Hulk", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1979, geniep, gts1s, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Genie (Pinball)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1980, buckrgrs, gts1s, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Buck Rogers", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1980, torch, gts1s, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Torch", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1980, roldisco, gts1s, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Roller Disco", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1980, astannie, gts1s, gts1, gts1, gts1_state, 0, ROT0, "Gottlieb", "Asteroid Annie and the Aliens", MACHINE_IS_SKELETON_MECHANICAL) // homebrew -GAME(1986, hexagone, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Christian Tabart", "L'Hexagone (France)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1986, hexagone, gts1s, gts1, gts1, gts1_state, 0, ROT0, "Christian Tabart", "L'Hexagone (France)", MACHINE_IS_SKELETON_MECHANICAL) diff --git a/src/mame/drivers/peyper.cpp b/src/mame/drivers/peyper.cpp index a1f5335103e..8c18d6942c9 100644 --- a/src/mame/drivers/peyper.cpp +++ b/src/mame/drivers/peyper.cpp @@ -50,31 +50,42 @@ public: : genpin_class(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_switch(*this, "SWITCH.%u", 0) + , m_led(*this, "led_%u", 1U) + , m_dpl(*this, "dpl_%u", 0U) { } + DECLARE_CUSTOM_INPUT_MEMBER(wolfman_replay_hs_r); + DECLARE_DRIVER_INIT(peyper); + DECLARE_DRIVER_INIT(odin); + DECLARE_DRIVER_INIT(wolfman); + + void peyper(machine_config &config); + +protected: DECLARE_READ8_MEMBER(sw_r); DECLARE_WRITE8_MEMBER(col_w); DECLARE_WRITE8_MEMBER(disp_w); DECLARE_WRITE8_MEMBER(lamp_w); DECLARE_WRITE8_MEMBER(lamp7_w); DECLARE_WRITE8_MEMBER(sol_w); - DECLARE_WRITE8_MEMBER(p1a_w) { }; // more lamps - DECLARE_WRITE8_MEMBER(p1b_w) { }; // more lamps - DECLARE_WRITE8_MEMBER(p2a_w) { }; // more lamps - DECLARE_WRITE8_MEMBER(p2b_w) { }; // more lamps - DECLARE_CUSTOM_INPUT_MEMBER(wolfman_replay_hs_r); - DECLARE_DRIVER_INIT(peyper); - DECLARE_DRIVER_INIT(odin); - DECLARE_DRIVER_INIT(wolfman); - void peyper(machine_config &config); + DECLARE_WRITE8_MEMBER(p1a_w) { } // more lamps + DECLARE_WRITE8_MEMBER(p1b_w) { } // more lamps + DECLARE_WRITE8_MEMBER(p2a_w) { } // more lamps + DECLARE_WRITE8_MEMBER(p2b_w) { } // more lamps + + virtual void machine_start() override; + virtual void machine_reset() override; + void peyper_io(address_map &map); void peyper_map(address_map &map); + private: uint8_t m_digit; uint8_t m_disp_layout[36]; - virtual void machine_reset() override; required_device m_maincpu; required_ioport_array<4> m_switch; + output_finder<4> m_led; + output_finder<34> m_dpl; // 0 used as black hole }; WRITE8_MEMBER( peyper_state::col_w ) @@ -112,31 +123,28 @@ WRITE8_MEMBER( peyper_state::disp_w ) 15 -> DPL31,DPL32 */ - uint8_t i,q,hex_a,a; - uint8_t p = m_digit << 1; - - for (i = 0; i < 2; i++) + uint8_t const p = m_digit << 1; + for (uint8_t i = 0; i < 2; i++, data >>= 4) { - q = m_disp_layout[p++]; // get control code or digit - a = data & 15; // get bcd - data >>= 4; // rotate for next iteration - hex_a = patterns[a]; // get segments + uint8_t const q = m_disp_layout[p | i]; // get control code or digit + uint8_t const a = data & 15; // get bcd + uint8_t const hex_a = patterns[a]; // get segments // special codes switch (q) { case 34: // player indicator lights (7-digit only) - output().set_indexed_value("led_",1,BIT(a,0)); // PLAYER 1 - output().set_indexed_value("led_",2,BIT(a,1)); // PLAYER 2 - output().set_indexed_value("led_",3,BIT(a,2)); // PLAYER 3 - output().set_indexed_value("led_",4,BIT(a,3)); // PLAYER 4 + m_led[0] = BIT(a, 0); // PLAYER 1 + m_led[1] = BIT(a, 1); // PLAYER 2 + m_led[2] = BIT(a, 2); // PLAYER 3 + m_led[3] = BIT(a, 3); // PLAYER 4 break; case 35: // units digits show 0 - if (!BIT(a,0)) output().set_indexed_value("dpl_",m_disp_layout[32], 0x3f); - if (!BIT(a,1)) output().set_indexed_value("dpl_",m_disp_layout[33], 0x3f); - if (!BIT(a,2)) output().set_indexed_value("dpl_",m_disp_layout[34], 0x3f); - if (!BIT(a,3)) output().set_indexed_value("dpl_",m_disp_layout[35], 0x3f); + if (!BIT(a, 0)) m_dpl[m_disp_layout[32]] = 0x3f; + if (!BIT(a, 1)) m_dpl[m_disp_layout[33]] = 0x3f; + if (!BIT(a, 2)) m_dpl[m_disp_layout[34]] = 0x3f; + if (!BIT(a, 3)) m_dpl[m_disp_layout[35]] = 0x3f; break; case 36: // game status indicators @@ -152,13 +160,13 @@ WRITE8_MEMBER( peyper_state::disp_w ) case 38: // player 2 indicators (6-digit only) case 39: // player 3 indicators (6-digit only) case 40: // player 4 indicators (6-digit only) - output().set_indexed_value("led_",q-36,BIT(a,1)); // player indicator - output().set_indexed_value("dpl_",q-7,BIT(a,2) ? 6:0); // million led (we show blank or 1 in millions digit) + m_led[q - 37] = BIT(a, 1); // player indicator + m_dpl[q - 7] = BIT(a, 2) ? 6 : 0; // million led (we show blank or 1 in millions digit) // bit 3, looks like it turns on all the decimal points, reason unknown break; default: // display a digit - output().set_indexed_value("dpl_",q,hex_a); + m_dpl[q] = hex_a; } } } @@ -577,13 +585,25 @@ static INPUT_PORTS_START( odisea ) INPUT_PORTS_END +void peyper_state::machine_start() +{ + genpin_class::machine_start(); + + m_led.resolve(); + m_dpl.resolve(); + + save_item(NAME(m_digit)); +} + void peyper_state::machine_reset() { + genpin_class::machine_reset(); } + MACHINE_CONFIG_START(peyper_state::peyper) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", Z80, 2500000) + MCFG_CPU_ADD("maincpu", Z80, 2'500'000) MCFG_CPU_PROGRAM_MAP(peyper_map) MCFG_CPU_IO_MAP(peyper_io) MCFG_CPU_PERIODIC_INT_DRIVER(peyper_state, irq0_line_hold, 1250) diff --git a/src/mame/drivers/risc2500.cpp b/src/mame/drivers/risc2500.cpp index 294dc74ce39..153354fd54c 100644 --- a/src/mame/drivers/risc2500.cpp +++ b/src/mame/drivers/risc2500.cpp @@ -27,14 +27,22 @@ class risc2500_state : public driver_device { public: risc2500_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_ram(*this, "ram"), - m_nvram(*this, "nvram"), - m_dac(*this, "dac"), - m_inputs(*this, "P%u", 0) - { } + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_ram(*this, "ram") + , m_nvram(*this, "nvram") + , m_dac(*this, "dac") + , m_inputs(*this, "P%u", 0) + , m_digits(*this, "digit%u", 0U) + , m_syms(*this, "sym%u", 0U) + , m_leds(*this, "led%u", 0U) + { } + DECLARE_INPUT_CHANGED_MEMBER(on_button); + + void risc2500(machine_config &config); + +protected: DECLARE_READ32_MEMBER(p1000_r); DECLARE_WRITE32_MEMBER(p1000_w); DECLARE_READ32_MEMBER(disable_boot_rom); @@ -43,18 +51,20 @@ public: virtual void machine_start() override; virtual void machine_reset() override; uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_INPUT_CHANGED_MEMBER(on_button); void install_boot_rom(); void remove_boot_rom(); - void risc2500(machine_config &config); void risc2500_mem(address_map &map); + private: required_device m_maincpu; required_device m_ram; required_device m_nvram; required_device m_dac; required_ioport_array<8> m_inputs; + output_finder<12> m_digits; + output_finder<14> m_syms; + output_finder<16> m_leds; uint32_t m_p1000; uint16_t m_vram_addr; @@ -90,12 +100,12 @@ uint32_t risc2500_state::screen_update(screen_device &screen, bitmap_ind16 &bitm uint16_t data = ((m_vram[data_addr + 1] & 0x3) << 5) | ((m_vram[data_addr + 2] & 0x7) << 2) | (m_vram[data_addr + 4] & 0x3); data = bitswap<8>(data, 7,3,0,1,4,6,5,2) | ((m_vram[data_addr - 1] & 0x04) ? 0x80 : 0); - output().set_digit_value(c, data); - output().set_indexed_value("sym", c, BIT(m_vram[data_addr + 1], 2)); + m_digits[c] = data; + m_syms[c] = BIT(m_vram[data_addr + 1], 2); } - output().set_indexed_value("sym", 12, BIT(m_vram[0x63], 0)); - output().set_indexed_value("sym", 13, BIT(m_vram[0x4a], 0)); + m_syms[12] = BIT(m_vram[0x63], 0); + m_syms[13] = BIT(m_vram[0x4a], 0); return 0; } @@ -241,12 +251,12 @@ WRITE32_MEMBER(risc2500_state::p1000_w) else if (data & 0x80000000) // Vertical LED { for(int i=0; i<8; i++) - output().set_led_value(i, BIT(data, i)); + m_leds[i] = BIT(data, i); } else if (data & 0x40000000) // Horizontal LED { for(int i=0; i<8; i++) - output().set_led_value(8 + i, BIT(data, i)); + m_leds[8 + i] = BIT(data, i); } else if ((data & 0xff000000) == 0x08000000) // Power OFF { @@ -271,6 +281,10 @@ TIMER_CALLBACK_MEMBER(risc2500_state::disable_boot_rom) void risc2500_state::machine_start() { + m_digits.resolve(); + m_syms.resolve(); + m_leds.resolve(); + m_nvram->set_base(m_ram->pointer(), m_ram->size()); save_item(NAME(m_p1000)); diff --git a/src/mame/includes/mpu4.h b/src/mame/includes/mpu4.h index cd850b643f3..4fe88f88aae 100644 --- a/src/mame/includes/mpu4.h +++ b/src/mame/includes/mpu4.h @@ -126,6 +126,9 @@ public: , m_palette(*this, "palette") , m_meters(*this, "meters") , m_lamps(*this, "lamp%u", 0U) + , m_mpu4leds(*this, "mpu4led%u", 0U) + , m_digits(*this, "digit%u", 0U) + , m_triacs(*this, "triac%u", 0U) { } uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) @@ -252,14 +255,7 @@ public: DECLARE_MACHINE_START(mpu4bwb); DECLARE_MACHINE_START(mpu4cry); TIMER_DEVICE_CALLBACK_MEMBER(gen_50hz); - DECLARE_WRITE_LINE_MEMBER(reel0_optic_cb) { if (state) m_optic_pattern |= 0x01; else m_optic_pattern &= ~0x01; } - DECLARE_WRITE_LINE_MEMBER(reel1_optic_cb) { if (state) m_optic_pattern |= 0x02; else m_optic_pattern &= ~0x02; } - DECLARE_WRITE_LINE_MEMBER(reel2_optic_cb) { if (state) m_optic_pattern |= 0x04; else m_optic_pattern &= ~0x04; } - DECLARE_WRITE_LINE_MEMBER(reel3_optic_cb) { if (state) m_optic_pattern |= 0x08; else m_optic_pattern &= ~0x08; } - DECLARE_WRITE_LINE_MEMBER(reel4_optic_cb) { if (state) m_optic_pattern |= 0x10; else m_optic_pattern &= ~0x10; } - DECLARE_WRITE_LINE_MEMBER(reel5_optic_cb) { if (state) m_optic_pattern |= 0x20; else m_optic_pattern &= ~0x20; } - DECLARE_WRITE_LINE_MEMBER(reel6_optic_cb) { if (state) m_optic_pattern |= 0x40; else m_optic_pattern &= ~0x40; } - DECLARE_WRITE_LINE_MEMBER(reel7_optic_cb) { if (state) m_optic_pattern |= 0x80; else m_optic_pattern &= ~0x80; } + template DECLARE_WRITE_LINE_MEMBER(reel_optic_cb) { if (state) m_optic_pattern |= (1 << N); else m_optic_pattern &= ~(1 << N); } void bwboki(machine_config &config); void mod2(machine_config &config); void mod2_alt(machine_config &config); @@ -340,13 +336,29 @@ protected: optional_device m_palette; required_device m_meters; - // not all systems have this many lamps but the driver is too much of a mess to split up now + // not all systems have this many lamps/LEDs/digits but the driver is too much of a mess to split up now + // 0-63 are on PIA IC3 port A (always present) // 64-127 are on PIA IC3 port B (always present) // 128-132 136-140 144-148 152-156 160-164 168-172 176-180 184-188 are on small lamp extender // 128-255 are on large lamp externders output_finder<256> m_lamps; + // 0-63 are on PIA IC4 port A (always present) + // 0-143 are on card B (possibly incorrectly mapped?) + // 64-127 are on card C + // 0-127 are on large card B + output_finder<144> m_mpu4leds; + + // 0-7 are on PIA IC4 port A with no LED extender + // 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 136 are on card B (possible incorrectly mapped?) + // 8-15 are on card C + // 8-9 are mapped to lamp lines for Connect 4 + // 0-15 are on large card B + output_finder<144> m_digits; + + output_finder<8> m_triacs; + enum { TIMER_IC24 diff --git a/src/mame/machine/mpu4.cpp b/src/mame/machine/mpu4.cpp index 8d48c7e3436..7dd302831b0 100644 --- a/src/mame/machine/mpu4.cpp +++ b/src/mame/machine/mpu4.cpp @@ -355,18 +355,19 @@ void mpu4_state::led_write_latch(int latch, int data, int column) column = 7 - column; // like main board, these are wired up in reverse data = ~data;//inverted drive lines? - for(i=0; i<5; i++) + for (i=0; i<5; i++) { + // FIXME: this doesn't look like it could possibly be correct - it can produce 0..17 but with lots of aliasing if (diff & (1<a_output(),m_input_strobe); } - else if ((m_led_extender != CARD_A)&&(m_led_extender != NO_EXTENDER)) + else if ((m_led_extender != CARD_A) && (m_led_extender != NO_EXTENDER)) { for(i=0; i<8; i++) { - output().set_indexed_value("mpu4led",((m_input_strobe + 8) * 8) +i,(data & (1 << i)) !=0); + m_mpu4leds[((m_input_strobe | 8) << 3) | i] = BIT(data, i); } - output().set_digit_value((m_input_strobe+8),data); + m_digits[m_input_strobe | 8] = data; } break; @@ -902,9 +902,9 @@ WRITE8_MEMBER(mpu4_state::pia_ic5_porta_w) { for(i=0; i<8; i++) { - output().set_indexed_value("mpu4led",(((8*(m_last_b7 >>7))+ m_input_strobe) * 8) +i,(~data & (1 << i)) !=0); + m_mpu4leds[((m_last_b7 >> 7) << 6) | (m_input_strobe << 3) | i] = BIT(~data, i); } - output().set_digit_value(((8*(m_last_b7 >>7))+m_input_strobe),~data); + m_digits[((m_last_b7 >> 7) << 3) | m_input_strobe] = ~data; } break; @@ -1304,11 +1304,10 @@ WRITE8_MEMBER(mpu4_state::pia_ic8_portb_w) { // duart.drive_sensor(data & 0x04, data & 0x01, data & 0x04, data & 0x02); } - int i; LOG_IC8(("%s: IC8 PIA Port B Set to %2x (OUTPUT PORT, TRIACS)\n", machine().describe_context(),data)); - for (i = 0; i < 8; i++) + for (int i = 0; i < 8; i++) { - output().set_indexed_value("triac", i, data & (1 << i)); + m_triacs[i] = BIT(data, i); } } @@ -2156,6 +2155,9 @@ void mpu4_state::mpu4_install_mod4bwb_space(address_space &space) void mpu4_state::mpu4_config_common() { m_lamps.resolve(); + m_mpu4leds.resolve(); + m_digits.resolve(); + m_triacs.resolve(); m_ic24_timer = timer_alloc(TIMER_IC24); m_lamp_strobe_ext_persistence = 0; @@ -2665,338 +2667,338 @@ ADDRESS_MAP_END MACHINE_CONFIG_START(mpu4_state::mpu4_std_3reel) MCFG_MPU4_STD_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_STD_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_STD_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type2_3reel) MCFG_MPU4_TYPE2_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE2_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE2_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type3_3reel) MCFG_MPU4_TYPE3_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE3_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE3_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type4_3reel) MCFG_MPU4_TYPE4_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE4_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE4_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_bwb_3reel) MCFG_MPU4_BWB_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_BWB_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_BWB_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_std_4reel) MCFG_MPU4_STD_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_STD_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_STD_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_STD_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type2_4reel) MCFG_MPU4_TYPE2_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE2_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE2_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_TYPE2_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type3_4reel) MCFG_MPU4_TYPE3_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE3_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE3_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_TYPE3_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type4_4reel) MCFG_MPU4_TYPE4_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE4_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE4_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_TYPE4_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_bwb_4reel) MCFG_MPU4_BWB_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_BWB_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_BWB_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_BWB_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_std_5reel) MCFG_MPU4_STD_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_STD_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_STD_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_STD_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_STD_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type2_5reel) MCFG_MPU4_TYPE2_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE2_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE2_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_TYPE2_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_TYPE2_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type3_5reel) MCFG_MPU4_TYPE3_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE3_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE3_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_TYPE3_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_TYPE3_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type4_5reel) MCFG_MPU4_TYPE4_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE4_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE4_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_TYPE4_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_TYPE4_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_bwb_5reel) MCFG_MPU4_BWB_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_BWB_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_BWB_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_BWB_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_BWB_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_std_6reel) MCFG_MPU4_STD_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_STD_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_STD_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_STD_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_STD_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MCFG_MPU4_STD_REEL_ADD("reel5") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type2_6reel) MCFG_MPU4_TYPE2_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE2_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE2_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_TYPE2_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_TYPE2_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MCFG_MPU4_TYPE2_REEL_ADD("reel5") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<5>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type3_6reel) MCFG_MPU4_TYPE3_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE3_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE3_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_TYPE3_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_TYPE3_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MCFG_MPU4_TYPE3_REEL_ADD("reel5") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<5>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type4_6reel) MCFG_MPU4_TYPE4_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE4_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE4_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_TYPE4_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_TYPE4_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MCFG_MPU4_TYPE4_REEL_ADD("reel5") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<5>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_bwb_6reel) MCFG_MPU4_BWB_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_BWB_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_BWB_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_BWB_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_BWB_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MCFG_MPU4_BWB_REEL_ADD("reel5") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<5>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_std_7reel) MCFG_MPU4_STD_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_STD_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_STD_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_STD_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_STD_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MCFG_MPU4_STD_REEL_ADD("reel5") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<5>)) MCFG_MPU4_STD_REEL_ADD("reel6") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel6_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<6>)) MCFG_MPU4_STD_REEL_ADD("reel7") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<7>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type2_7reel) MCFG_MPU4_TYPE2_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE2_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE2_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_TYPE2_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_TYPE2_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MCFG_MPU4_TYPE2_REEL_ADD("reel5") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<5>)) MCFG_MPU4_TYPE2_REEL_ADD("reel6") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel6_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<6>)) MCFG_MPU4_TYPE2_REEL_ADD("reel7") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<7>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type3_7reel) MCFG_MPU4_TYPE3_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE3_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE3_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_TYPE3_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_TYPE3_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MCFG_MPU4_TYPE3_REEL_ADD("reel5") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<5>)) MCFG_MPU4_TYPE3_REEL_ADD("reel6") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel6_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<6>)) MCFG_MPU4_TYPE3_REEL_ADD("reel7") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<7>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_type4_7reel) MCFG_MPU4_TYPE4_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_TYPE4_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_TYPE4_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_TYPE4_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_TYPE4_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MCFG_MPU4_TYPE4_REEL_ADD("reel5") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<5>)) MCFG_MPU4_TYPE4_REEL_ADD("reel6") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel6_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<6>)) MCFG_MPU4_TYPE4_REEL_ADD("reel7") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<7>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_bwb_7reel) MCFG_MPU4_BWB_REEL_ADD("reel0") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<0>)) MCFG_MPU4_BWB_REEL_ADD("reel1") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<1>)) MCFG_MPU4_BWB_REEL_ADD("reel2") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<2>)) MCFG_MPU4_BWB_REEL_ADD("reel3") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<3>)) MCFG_MPU4_BWB_REEL_ADD("reel4") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<4>)) MCFG_MPU4_BWB_REEL_ADD("reel5") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<5>)) MCFG_MPU4_BWB_REEL_ADD("reel6") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel6_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<6>)) MCFG_MPU4_BWB_REEL_ADD("reel7") - MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb)) + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel_optic_cb<7>)) MACHINE_CONFIG_END MACHINE_CONFIG_START(mpu4_state::mpu4_common)