bit more cleanup (nw)

This commit is contained in:
Vas Crabb 2018-03-05 15:04:18 +11:00
parent 48f7473754
commit 76add106d2
5 changed files with 312 additions and 252 deletions

View File

@ -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<cpu_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)

View File

@ -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<cpu_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)

View File

@ -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<cpu_device> m_maincpu;
required_device<ram_device> m_ram;
required_device<nvram_device> m_nvram;
required_device<dac_byte_interface> 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));

View File

@ -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 <unsigned N> 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<palette_device> m_palette;
required_device<meters_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

View File

@ -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<<i))
{
column += i;
}
}
for(j=0; j<8; j++)
for (j=0; j<8; j++)
{
output().set_indexed_value("mpu4led",(8*column)+j,(data & (1 << j)) !=0);
m_mpu4leds[(column << 3) | j], BIT(data, j);
}
output().set_digit_value(column * 8, data);
m_digits[column << 3] = data; // FIXME should this really be so sparse?
m_last_latch = diff;
}
@ -615,8 +616,8 @@ WRITE8_MEMBER(mpu4_state::pia_ic3_portb_w)
if (m_lamps[lamps2[i]]) pled_segs[1] |= (1 << i);
}
output().set_digit_value(8,pled_segs[0]);
output().set_digit_value(9,pled_segs[1]);
m_digits[8] = pled_segs[0];
m_digits[9] = pled_segs[1];
}
}
}
@ -714,18 +715,17 @@ void mpu4_state::device_timer(emu_timer &timer, device_timer_id id, int param, v
/* IC4, 7 seg leds, 50Hz timer reel sensors, current sensors */
WRITE8_MEMBER(mpu4_state::pia_ic4_porta_w)
{
int i;
if(m_ic23_active)
{
if (((m_lamp_extender == NO_EXTENDER)||(m_lamp_extender == SMALL_CARD)||(m_lamp_extender == LARGE_CARD_C))&& (m_led_extender == NO_EXTENDER))
if (((m_lamp_extender == NO_EXTENDER) || (m_lamp_extender == SMALL_CARD) || (m_lamp_extender == LARGE_CARD_C)) && (m_led_extender == NO_EXTENDER))
{
if(m_led_strobe != m_input_strobe)
{
for(i=0; i<8; i++)
for(int i=0; i<8; i++)
{
output().set_indexed_value("mpu4led",((7 - m_input_strobe) * 8) +i,(data & (1 << i)) !=0);
m_mpu4leds[((7 - m_input_strobe) << 3) | i] = BIT(data, i);
}
output().set_digit_value(7 - m_input_strobe,data);
m_digits[7 - m_input_strobe] = data;
}
m_led_strobe = m_input_strobe;
}
@ -875,13 +875,13 @@ WRITE8_MEMBER(mpu4_state::pia_ic5_porta_w)
{
led_write_latch(data & 0x1f, m_pia4->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)