diff --git a/src/mame/drivers/s11.cpp b/src/mame/drivers/s11.cpp index 3f5f1f69a91..3a53877ea4b 100644 --- a/src/mame/drivers/s11.cpp +++ b/src/mame/drivers/s11.cpp @@ -25,7 +25,7 @@ Status: - All machines are playable ToDo: -- Outputs +- Machanical sounds *****************************************************************************************/ @@ -170,10 +170,10 @@ void s11_state::device_timer(emu_timer &timer, device_timer_id id, int param) { #ifndef S11_W15 // W14 jumper present (Q7), W15 absent (Q10) - m_timer_irq_active = (BIT(m_timer_count, 7) && BIT(m_timer_count, 8) && BIT(m_timer_count, 9)); + m_timer_irq_active = (BIT(m_timer_count, 7, 3) == 7); #else // W14 jumper absent (Q7), W15 present (Q10) - m_timer_irq_active = (BIT(m_timer_count, 10) && BIT(m_timer_count, 8) && BIT(m_timer_count, 9)); + m_timer_irq_active = (BIT(m_timer_count, 8, 3) == 7); #endif } @@ -185,12 +185,6 @@ void s11_state::device_timer(emu_timer &timer, device_timer_id id, int param) } } -void s11_state::machine_reset() -{ - membank("bank0")->set_entry(0); - membank("bank1")->set_entry(0); -} - INPUT_CHANGED_MEMBER( s11_state::main_nmi ) { // Diagnostic button sends a pulse to NMI pin @@ -228,10 +222,6 @@ WRITE_LINE_MEMBER( s11_state::main_irq ) m_maincpu->set_input_line(M6802_IRQ_LINE, state); } -void s11_state::sol3_w(u8 data) -{ -} - void s11_state::sound_w(u8 data) { m_sound_data = data; @@ -246,14 +236,23 @@ WRITE_LINE_MEMBER( s11_state::pia21_ca2_w ) void s11_state::lamp0_w(u8 data) { + m_lamp_data = data ^ 0xff; +} + +void s11_state::lamp1_w(u8 data) +{ + // find out which row is active + for (u8 i = 0; i < 8; i++) + if (BIT(data, i)) + for (u8 j = 0; j < 8; j++) + m_io_outputs[16U+i*8U+j] = BIT(m_lamp_data, j); } void s11_state::dig0_w(u8 data) { static const u8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7447 - data &= 0x7f; m_strobe = data & 15; - m_diag = (data & 0x70) >> 4; + m_diag = BIT(data, 4, 3); m_digits[60] = patterns[data>>4]; // diag digit m_segment1 = 0; m_segment2 = 0; @@ -263,11 +262,6 @@ void s11_state::dig1_w(u8 data) { m_segment2 |= data; m_segment2 |= 0x20000; - if ((m_segment2 & 0x70000) == 0x30000) - { - m_digits[m_strobe+16] = bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0); - m_segment2 |= 0x40000; - } } u8 s11_state::pia28_w7_r() @@ -298,18 +292,13 @@ void s11_state::pia2c_pb_w(u8 data) { m_segment1 |= data; m_segment1 |= 0x20000; - if ((m_segment1 & 0x70000) == 0x30000) - { - m_digits[m_strobe] = bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0); - m_segment1 |= 0x40000; - } } u8 s11_state::switch_r() { u8 data = 0; // scan all 8 input columns, since multiple can be selected at once - for (int i = 0; i < 8; i++) + for (u8 i = 0; i < 8; i++) if (BIT(m_row, i)) data |= m_io_keyboard[i]->read(); @@ -319,8 +308,6 @@ u8 s11_state::switch_r() void s11_state::switch_w(u8 data) { - // this drives the pulldown 2N3904 NPN transistors Q42-Q49, each of which drives one column of the switch matrix low - // it is possible for multiple columns to be enabled at once, this is handled in switch_r above. m_row = data; } @@ -376,6 +363,38 @@ u8 s11_state::sound_r() return m_sound_data; } +void s11_state::machine_start() +{ + genpin_class::machine_start(); + m_io_outputs.resolve(); + m_digits.resolve(); + + save_item(NAME(m_sound_data)); + save_item(NAME(m_diag)); + save_item(NAME(m_segment1)); + save_item(NAME(m_segment2)); + save_item(NAME(m_timer_count)); + save_item(NAME(m_timer_irq_active)); + save_item(NAME(m_pia_irq_active)); + save_item(NAME(m_strobe)); + save_item(NAME(m_row)); + //save_item(NAME(m_data_ok)); + save_item(NAME(m_lamp_data)); + + m_irq_timer = timer_alloc(TIMER_IRQ); + m_irq_timer->adjust(attotime::from_ticks(980,1e6),1); +} + +void s11_state::machine_reset() +{ + genpin_class::machine_reset(); + for (u8 i = 0; i < m_io_outputs.size(); i++) + m_io_outputs[i] = 0; + + membank("bank0")->set_entry(0); + membank("bank1")->set_entry(0); +} + void s11_state::init_s11() { u8 *ROM = memregion("audiocpu")->base(); @@ -383,11 +402,8 @@ void s11_state::init_s11() membank("bank1")->configure_entries(0, 2, &ROM[0x8000], 0x4000); membank("bank0")->set_entry(0); membank("bank1")->set_entry(0); - m_timer_count = 0; m_irq_timer = timer_alloc(TIMER_IRQ); m_irq_timer->adjust(attotime::from_ticks(32,E_CLOCK),0); - m_timer_irq_active = false; - m_pia_irq_active = false; } void s11_state::s11(machine_config &config) diff --git a/src/mame/drivers/s11a.cpp b/src/mame/drivers/s11a.cpp index 884e5787751..20037878667 100644 --- a/src/mame/drivers/s11a.cpp +++ b/src/mame/drivers/s11a.cpp @@ -132,13 +132,12 @@ static INPUT_PORTS_START( s11a ) PORT_CONFSETTING( 0x10, "English" ) INPUT_PORTS_END -void s11a_state::s11a_dig0_w(uint8_t data) +void s11a_state::s11a_dig0_w(u8 data) { - data &= 0x7f; set_strobe(data & 15); - set_diag((data & 0x70) >> 4); + set_diag(BIT(data, 4, 3)); m_digits[60] = 0; // +5VDC (always on) - m_digits[61] = get_diag() & 0x01; // connected to PA4 + m_digits[61] = BIT(data, 4); // connected to PA4 m_digits[62] = 0; // Blanking (pretty much always on) set_segment1(0); set_segment2(0); diff --git a/src/mame/drivers/s11b.cpp b/src/mame/drivers/s11b.cpp index 7788ba61d2b..a51845c3e5f 100644 --- a/src/mame/drivers/s11b.cpp +++ b/src/mame/drivers/s11b.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Miodrag Milanovic +// copyright-holders:Miodrag Milanovic, Robbbert /************************************************************************************************************* PINBALL @@ -33,7 +33,6 @@ Status: - All machines are playable ToDo: -- Some machines use 7-segment displays for player 3/4, so need s new layout for them - Some digits flicker Known issues: @@ -52,7 +51,6 @@ Known issues: the ram at 0x780-0x7ff, so it is possible that the protection being active prevents the real machine from crashing) - Black Knight 2000 LG-1 set reports U26 ROM FAILURE. Bad/hacked dump or original bug? -- Taxi and Police Force both have issues with the display showing garbage overlaid by the alphanumerics. ***************************************************************************************************************/ @@ -147,17 +145,25 @@ static INPUT_PORTS_START( s11b ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("INP64") PORT_START("DIAGS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_1_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s11b_state, audio_nmi, 1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_4_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s11b_state, main_nmi, 1) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Advance") PORT_CODE(KEYCODE_5_PAD) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_9_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s11b_state, audio_nmi, 1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_0_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s11b_state, main_nmi, 1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Advance") PORT_CODE(KEYCODE_1_PAD) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Up/Down") PORT_CODE(KEYCODE_6_PAD) PORT_TOGGLE PORT_CONFNAME( 0x10, 0x10, "Language" ) PORT_CONFSETTING( 0x00, "German" ) PORT_CONFSETTING( 0x10, "English" ) INPUT_PORTS_END +void s11b_state::machine_start() +{ + s11_state::machine_start(); + save_item(NAME(m_invert)); + save_item(NAME(m_is7seg34)); +} + void s11b_state::machine_reset() { + s11_state::machine_reset(); membank("bank0")->set_entry(0); membank("bank1")->set_entry(0); // reset the CPUs again, so that the CPUs are starting with the right vectors (otherwise sound may die on reset) @@ -166,80 +172,84 @@ void s11b_state::machine_reset() m_bg->device_reset(); } -void s11b_state::s11b_dig1_w(uint8_t data) +void s11b_state::s11b_dig1_w(u8 data) { - uint32_t seg = get_segment2(); + u32 seg = get_segment2(); seg |= data; seg |= 0x20000; - if((seg & 0x70000) == 0x30000) - { - if(m_invert) - m_digits[get_strobe()+16] = bitswap<16>(~seg, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0); - else - m_digits[get_strobe()+16] = bitswap<16>(seg, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0); - seg |= 0x40000; - } set_segment2(seg); } -void s11b_state::s11b_pia2c_pa_w(uint8_t data) +void s11b_state::s11b_pia2c_pa_w(u8 data) { - uint32_t seg = get_segment1(); + u32 seg = get_segment1(); seg |= (data<<8); seg |= 0x10000; if((seg & 0x70000) == 0x30000) { - if(m_invert) - m_digits[get_strobe()] = bitswap<16>(~seg, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0); - else - m_digits[get_strobe()] = bitswap<16>(seg, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0); + u16 segd = (m_invert) ? ~seg : seg; + m_digits[get_strobe()] = bitswap<16>(segd, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0); seg |= 0x40000; } set_segment1(seg); } -void s11b_state::s11b_pia2c_pb_w(uint8_t data) +void s11b_state::s11b_pia2c_pb_w(u8 data) { - uint32_t seg = get_segment1(); + u32 seg = get_segment1(); seg |= data; seg |= 0x20000; - if((seg & 0x70000) == 0x30000) - { - if(m_invert) - m_digits[get_strobe()] = bitswap<16>(~seg, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0); - else - m_digits[get_strobe()] = bitswap<16>(seg, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0); - seg |= 0x40000; - } set_segment1(seg); } -void s11b_state::s11b_pia34_pa_w(uint8_t data) +void s11b_state::s11b_pia34_pa_w(u8 data) { - uint32_t seg = get_segment2(); + u32 seg = get_segment2(); seg |= (data<<8); seg |= 0x10000; if((seg & 0x70000) == 0x30000) { - if(m_invert) - m_digits[get_strobe()+16] = bitswap<16>(~seg, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0); - else - m_digits[get_strobe()+16] = bitswap<16>(seg, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0); + u16 segd = (m_invert) ? ~seg : seg; + if (m_is7seg34) + { + segd &= 0xff; // discard diagonal segs + if (BIT(segd, 6)) + segd |= 0x800; // fix g seg + if (BIT(segd, 7)) + segd |= 0x8000; // fix comma + } + m_digits[get_strobe()+16] = bitswap<16>(segd, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0); seg |= 0x40000; } set_segment2(seg); } -void s11b_state::init_s11b() +void s11b_state::init_s11bnn() { - s11a_state::init_s11a(); + s11_state::init_s11(); m_invert = false; + m_is7seg34 = false; } -void s11b_state::init_s11b_invert() +void s11b_state::init_s11bin() { - s11a_state::init_s11a(); + s11_state::init_s11(); m_invert = true; + m_is7seg34 = false; +} + +void s11b_state::init_s11bn7() +{ + s11_state::init_s11(); + m_invert = false; + m_is7seg34 = true; +} + +void s11b_state::init_s11bi7() +{ + s11_state::init_s11(); + m_invert = true; + m_is7seg34 = true; } void s11b_state::s11b_base(machine_config &config) @@ -1566,63 +1576,63 @@ ROM_START(whirl_l2) ROM_RELOAD(0x58000,0x8000) ROM_END -GAME(1989, bcats_l5, 0, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Bad Cats (L-5)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, bcats_l2, bcats_l5, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Bad Cats (LA-2)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, bcats_g4, bcats_l5, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Bad Cats (LG-4)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, bnzai_l3, 0, s11b, s11b, s11b_state, init_s11b, ROT0, "Williams", "Banzai Run (L-3)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, bnzai_g3, bnzai_l3, s11b, s11b, s11b_state, init_s11b, ROT0, "Williams", "Banzai Run (L-3) Germany", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, bnzai_l1, bnzai_l3, s11b, s11b, s11b_state, init_s11b, ROT0, "Williams", "Banzai Run (L-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, bnzai_pa, bnzai_l3, s11b, s11b, s11b_state, init_s11b, ROT0, "Williams", "Banzai Run (P-A)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1987, bguns_l8, 0, s11b, s11b, s11b_state, init_s11b, ROT0, "Williams", "Big Guns (L-8)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1987, bguns_l7, bguns_l8, s11b, s11b, s11b_state, init_s11b, ROT0, "Williams", "Big Guns (L-7)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1987, bguns_la, bguns_l8, s11b, s11b, s11b_state, init_s11b, ROT0, "Williams", "Big Guns (L-A)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1987, bguns_p1, bguns_l8, s11b, s11b, s11b_state, init_s11b, ROT0, "Williams", "Big Guns (P-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, bk2k_l4, 0, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Black Knight 2000 (L-4)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, bk2k_lg1, bk2k_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Black Knight 2000 (LG-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, bk2k_lg3, bk2k_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Black Knight 2000 (LG-3)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, bk2k_pu1, bk2k_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Black Knight 2000 (PU-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, bk2k_pf1, bk2k_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Black Knight 2000 (PF-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, bk2k_la2, bk2k_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Black Knight 2000 (LA-2)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, bk2k_pa7, bk2k_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Black Knight 2000 (PA-7)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, bk2k_pa5, bk2k_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Black Knight 2000 (PA-5)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, cycln_l5, 0, s11b, s11b, s11b_state, init_s11b, ROT0, "Williams", "Cyclone (L-5)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, cycln_l4, cycln_l5, s11b, s11b, s11b_state, init_s11b, ROT0, "Williams", "Cyclone (L-4)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, cycln_l1, cycln_l5, s11b, s11b, s11b_state, init_s11b, ROT0, "Williams", "Cyclone (L-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, esha_la3, 0, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Earthshaker (LA-3)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, esha_ma3, esha_la3, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Earthshaker (Metallica) (LA-3)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, esha_pr4, esha_la3, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Earthshaker (Family version) (PR-4)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, esha_lg1, esha_la3, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Earthshaker (German) (LG-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, esha_lg2, esha_la3, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Earthshaker (German) (LG-2)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, esha_la1, esha_la3, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Earthshaker (LA-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, esha_pa1, esha_la3, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Earthshaker (Prototype) (PA-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, esha_pa4, esha_la3, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Earthshaker (Prototype) (PA-4)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, eatpm_l4, 0, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Elvira and the Party Monsters (LA-4)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, eatpm_l1, eatpm_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Elvira and the Party Monsters (LA-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, eatpm_l2, eatpm_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Elvira and the Party Monsters (LA-2)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, eatpm_4g, eatpm_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Elvira and the Party Monsters (LG-4)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, eatpm_4u, eatpm_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Elvira and the Party Monsters (LU-4)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, eatpm_f1, eatpm_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Elvira and the Party Monsters (LF-1) French", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, eatpm_p7, eatpm_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Elvira and the Party Monsters (PA-7)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, jokrz_l6, 0, s11b_jokerz, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Jokerz! (L-6)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, jokrz_l3, jokrz_l6, s11b_jokerz, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Jokerz! (L-3)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, jokrz_g4, jokrz_l6, s11b_jokerz, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Jokerz! (G-4)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, mousn_l4, 0, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Mousin' Around! (LA-4)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, mousn_l1, mousn_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Mousin' Around! (LA-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, mousn_lu, mousn_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Mousin' Around! (LU-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, mousn_lx, mousn_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Mousin' Around! (LX-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, polic_l4, 0, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Police Force (LA-4)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, polic_l3, polic_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Police Force (LA-3)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, polic_l2, polic_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Police Force (LA-2)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, polic_g4, polic_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Police Force (LG-4) Germany", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, spstn_l5, 0, s11b, s11b, s11b_state, init_s11b, ROT0, "Williams", "Space Station (L-5)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, swrds_l2, 0, s11b, s11b, s11b_state, init_s11b, ROT0, "Williams", "Swords of Fury (L-2)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, swrds_l1, swrds_l2, s11b, s11b, s11b_state, init_s11b, ROT0, "Williams", "Swords of Fury (L-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, taxi_l4, 0, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Taxi (Lola) (L-4)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, taxi_l3, taxi_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Taxi (Marilyn) (L-3)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, taxi_lu1, taxi_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Taxi (Marilyn) (LU-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, taxi_lg1, taxi_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Taxi (Marilyn) (L-1) Germany", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1988, taxi_p5, taxi_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Taxi (P-5)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, tsptr_l3, 0, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Transporter the Rescue (L-3)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, whirl_l3, 0, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Whirlwind (L-3)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, whirl_l2, whirl_l3, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Whirlwind (L-2)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, whirl_lg3, whirl_l3, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Whirlwind (LG-3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, bcats_l5, 0, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Bad Cats (L-5)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, bcats_l2, bcats_l5, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Bad Cats (LA-2)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, bcats_g4, bcats_l5, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Bad Cats (LG-4)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, bnzai_l3, 0, s11b, s11b, s11b_state, init_s11bn7, ROT0, "Williams", "Banzai Run (L-3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, bnzai_g3, bnzai_l3, s11b, s11b, s11b_state, init_s11bn7, ROT0, "Williams", "Banzai Run (L-3) Germany", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, bnzai_l1, bnzai_l3, s11b, s11b, s11b_state, init_s11bn7, ROT0, "Williams", "Banzai Run (L-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, bnzai_pa, bnzai_l3, s11b, s11b, s11b_state, init_s11bn7, ROT0, "Williams", "Banzai Run (P-A)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1987, bguns_l8, 0, s11b, s11b, s11b_state, init_s11bnn, ROT0, "Williams", "Big Guns (L-8)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1987, bguns_l7, bguns_l8, s11b, s11b, s11b_state, init_s11bnn, ROT0, "Williams", "Big Guns (L-7)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1987, bguns_la, bguns_l8, s11b, s11b, s11b_state, init_s11bnn, ROT0, "Williams", "Big Guns (L-A)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1987, bguns_p1, bguns_l8, s11b, s11b, s11b_state, init_s11bnn, ROT0, "Williams", "Big Guns (P-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, bk2k_l4, 0, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Black Knight 2000 (L-4)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, bk2k_lg1, bk2k_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Black Knight 2000 (LG-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, bk2k_lg3, bk2k_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Black Knight 2000 (LG-3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, bk2k_pu1, bk2k_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Black Knight 2000 (PU-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, bk2k_pf1, bk2k_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Black Knight 2000 (PF-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, bk2k_la2, bk2k_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Black Knight 2000 (LA-2)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, bk2k_pa7, bk2k_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Black Knight 2000 (PA-7)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, bk2k_pa5, bk2k_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Black Knight 2000 (PA-5)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, cycln_l5, 0, s11b, s11b, s11b_state, init_s11bnn, ROT0, "Williams", "Cyclone (L-5)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, cycln_l4, cycln_l5, s11b, s11b, s11b_state, init_s11bnn, ROT0, "Williams", "Cyclone (L-4)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, cycln_l1, cycln_l5, s11b, s11b, s11b_state, init_s11bnn, ROT0, "Williams", "Cyclone (L-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, esha_la3, 0, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Earthshaker (LA-3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, esha_ma3, esha_la3, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Earthshaker (Metallica) (LA-3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, esha_pr4, esha_la3, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Earthshaker (Family version) (PR-4)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, esha_lg1, esha_la3, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Earthshaker (German) (LG-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, esha_lg2, esha_la3, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Earthshaker (German) (LG-2)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, esha_la1, esha_la3, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Earthshaker (LA-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, esha_pa1, esha_la3, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Earthshaker (Prototype) (PA-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, esha_pa4, esha_la3, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Earthshaker (Prototype) (PA-4)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, eatpm_l4, 0, s11b, s11b, s11b_state, init_s11bin, ROT0, "Bally", "Elvira and the Party Monsters (LA-4)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, eatpm_l1, eatpm_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Bally", "Elvira and the Party Monsters (LA-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, eatpm_l2, eatpm_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Bally", "Elvira and the Party Monsters (LA-2)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, eatpm_4g, eatpm_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Bally", "Elvira and the Party Monsters (LG-4)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, eatpm_4u, eatpm_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Bally", "Elvira and the Party Monsters (LU-4)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, eatpm_f1, eatpm_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Bally", "Elvira and the Party Monsters (LF-1) French", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, eatpm_p7, eatpm_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Bally", "Elvira and the Party Monsters (PA-7)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, jokrz_l6, 0, s11b_jokerz, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Jokerz! (L-6)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, jokrz_l3, jokrz_l6, s11b_jokerz, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Jokerz! (L-3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, jokrz_g4, jokrz_l6, s11b_jokerz, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Jokerz! (G-4)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, mousn_l4, 0, s11b, s11b, s11b_state, init_s11bin, ROT0, "Bally", "Mousin' Around! (LA-4)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, mousn_l1, mousn_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Bally", "Mousin' Around! (LA-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, mousn_lu, mousn_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Bally", "Mousin' Around! (LU-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, mousn_lx, mousn_l4, s11b, s11b, s11b_state, init_s11bin, ROT0, "Bally", "Mousin' Around! (LX-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, polic_l4, 0, s11b, s11b, s11b_state, init_s11bi7, ROT0, "Williams", "Police Force (LA-4)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, polic_l3, polic_l4, s11b, s11b, s11b_state, init_s11bi7, ROT0, "Williams", "Police Force (LA-3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, polic_l2, polic_l4, s11b, s11b, s11b_state, init_s11bi7, ROT0, "Williams", "Police Force (LA-2)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, polic_g4, polic_l4, s11b, s11b, s11b_state, init_s11bi7, ROT0, "Williams", "Police Force (LG-4) Germany", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, spstn_l5, 0, s11b, s11b, s11b_state, init_s11bnn, ROT0, "Williams", "Space Station (L-5)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, swrds_l2, 0, s11b, s11b, s11b_state, init_s11bn7, ROT0, "Williams", "Swords of Fury (L-2)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, swrds_l1, swrds_l2, s11b, s11b, s11b_state, init_s11bn7, ROT0, "Williams", "Swords of Fury (L-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, taxi_l4, 0, s11b, s11b, s11b_state, init_s11bi7, ROT0, "Williams", "Taxi (Lola) (L-4)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, taxi_l3, taxi_l4, s11b, s11b, s11b_state, init_s11bi7, ROT0, "Williams", "Taxi (Marilyn) (L-3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, taxi_lu1, taxi_l4, s11b, s11b, s11b_state, init_s11bi7, ROT0, "Williams", "Taxi (Marilyn) (LU-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, taxi_lg1, taxi_l4, s11b, s11b, s11b_state, init_s11bi7, ROT0, "Williams", "Taxi (Marilyn) (L-1) Germany", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, taxi_p5, taxi_l4, s11b, s11b, s11b_state, init_s11bi7, ROT0, "Williams", "Taxi (P-5)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, tsptr_l3, 0, s11b, s11b, s11b_state, init_s11bin, ROT0, "Bally", "Transporter the Rescue (L-3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, whirl_l3, 0, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Whirlwind (L-3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, whirl_l2, whirl_l3, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Whirlwind (L-2)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, whirl_lg3, whirl_l3, s11b, s11b, s11b_state, init_s11bin, ROT0, "Williams", "Whirlwind (LG-3)", MACHINE_IS_SKELETON_MECHANICAL) diff --git a/src/mame/drivers/s11c.cpp b/src/mame/drivers/s11c.cpp index b27d9fb7298..d666ec7099e 100644 --- a/src/mame/drivers/s11c.cpp +++ b/src/mame/drivers/s11c.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Miodrag Milanovic +// copyright-holders:Miodrag Milanovic, Robbbert /******************************************************************************************************************* PINBALL @@ -27,11 +27,11 @@ Star Trax --- unknown unknown Status: - All pinball machines are playable -- Star Trax requires many ball bearings (no pinball), so will not be able to run +- Star Trax has no pinball, but instead has many ball bearings (800 was mentioned), so will not be able to run ToDo: -- Some machines use 7-segment displays for player 3/4, so need s new layout for them +- Riverboat Gambler: first 4 digits of Player 4 don't work. (see code around BBB8) - Some digits flicker - Star Trax: there's no documentation. Need manual, schematics, etc @@ -129,9 +129,9 @@ static INPUT_PORTS_START( s11c ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("INP64") PORT_START("DIAGS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_1_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s11b_state, audio_nmi, 1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_4_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s11b_state, main_nmi, 1) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Advance") PORT_CODE(KEYCODE_5_PAD) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Audio Diag") PORT_CODE(KEYCODE_9_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s11b_state, audio_nmi, 1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Main Diag") PORT_CODE(KEYCODE_0_PAD) PORT_CHANGED_MEMBER(DEVICE_SELF, s11b_state, main_nmi, 1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Advance") PORT_CODE(KEYCODE_1_PAD) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Up/Down") PORT_CODE(KEYCODE_6_PAD) PORT_TOGGLE PORT_CONFNAME( 0x10, 0x10, "Language" ) PORT_CONFSETTING( 0x00, "German" ) @@ -151,6 +151,12 @@ void s11c_state::init_s11c() timer->adjust(attotime::from_ticks(32,E_CLOCK),0); } +void s11c_state::init_s11c7() +{ + init_s11c(); + set_7seg(true); +} + void s11c_state::s11c(machine_config &config) { /* basic machine hardware */ @@ -727,38 +733,38 @@ ROM_START(strax_p7) ROM_END -GAME(1990, bbnny_l2, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Bugs Bunny Birthday Ball (L-2)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, bbnny_lu, bbnny_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Bugs Bunny Birthday Ball (LU-2) European", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, diner_l4, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Diner (LA-4)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, diner_l3, diner_l4, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Diner (LA-3)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, diner_l2, diner_l4, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Diner (LU-2) Europe", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, diner_f2, diner_l4, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Diner (LF-2) French", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, diner_l1, diner_l4, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Diner (LU-1) Europe", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, diner_p0, diner_l4, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Diner (PA-0 prototype)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, dd_l2, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Dr. Dude (LA-2)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, dd_lu1, dd_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Dr. Dude (LU-1) Europe", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, dd_p6, dd_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Dr. Dude (PA-6)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, pool_l7, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Pool Sharks (LA-7)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, pool_l6, pool_l7, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Pool Sharks (LA-6)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, pool_l5, pool_l7, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Pool Sharks (LA-5)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, pool_le2, pool_l7, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Pool Sharks (LE-2)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1989, pool_p7, pool_l7, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Pool Sharks (PA-7)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, radcl_l1, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Radical! (L-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, radcl_g1, radcl_l1, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Radical! (G-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, radcl_p3, radcl_l1, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Radical! (P-3)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, rvrbt_l3, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Riverboat Gambler (L-3)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, rvrbt_p7, rvrbt_l3, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Riverboat Gambler (PA-7)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, rollr_l2, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (L-2)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1991, rollr_ex, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (EXPERIMENTAL)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1991, rollr_e1, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (PU-1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1991, rollr_p2, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (PA-2 / PA-1 Sound)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, rollr_l3, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (LU-3) Europe", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, rollr_g3, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (LG-3) Germany", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1991, rollr_f2, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (LF-2) French", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, rollr_f3, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (LF-3) French", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, rollr_d2, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (AD-2) Prototype", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, gs_lu4, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "The Bally Game Show (LU-4) Europe", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, gs_lu3, gs_lu4, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "The Bally Game Show (LU-3) Europe", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, gs_la3, gs_lu4, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "The Bally Game Show (LA-3)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, gs_lg6, gs_lu4, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "The Bally Game Show (LG-6) Germany", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1990, strax_p7, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Krell Development", "Star Trax (domestic prototype)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, bbnny_l2, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Bugs Bunny Birthday Ball (L-2)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, bbnny_lu, bbnny_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Bugs Bunny Birthday Ball (LU-2) European", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, diner_l4, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Diner (LA-4)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, diner_l3, diner_l4, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Diner (LA-3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, diner_l2, diner_l4, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Diner (LU-2) Europe", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, diner_f2, diner_l4, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Diner (LF-2) French", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, diner_l1, diner_l4, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Diner (LU-1) Europe", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, diner_p0, diner_l4, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Diner (PA-0 prototype)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, dd_l2, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Dr. Dude (LA-2)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, dd_lu1, dd_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Dr. Dude (LU-1) Europe", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, dd_p6, dd_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Dr. Dude (PA-6)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, pool_l7, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Pool Sharks (LA-7)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, pool_l6, pool_l7, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Pool Sharks (LA-6)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, pool_l5, pool_l7, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Pool Sharks (LA-5)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, pool_le2, pool_l7, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Pool Sharks (LE-2)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1989, pool_p7, pool_l7, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Pool Sharks (PA-7)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, radcl_l1, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Radical! (L-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, radcl_g1, radcl_l1, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Radical! (G-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, radcl_p3, radcl_l1, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "Radical! (P-3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, rvrbt_l3, 0, s11c, s11c, s11c_state, init_s11c7, ROT0, "Williams", "Riverboat Gambler (L-3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, rvrbt_p7, rvrbt_l3, s11c, s11c, s11c_state, init_s11c7, ROT0, "Williams", "Riverboat Gambler (PA-7)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, rollr_l2, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (L-2)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1991, rollr_ex, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (EXPERIMENTAL)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1991, rollr_e1, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (PU-1)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1991, rollr_p2, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (PA-2 / PA-1 Sound)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, rollr_l3, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (LU-3) Europe", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, rollr_g3, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (LG-3) Germany", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1991, rollr_f2, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (LF-2) French", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, rollr_f3, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (LF-3) French", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, rollr_d2, rollr_l2, s11c, s11c, s11c_state, init_s11c, ROT0, "Williams", "Rollergames (AD-2) Prototype", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, gs_lu4, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "The Bally Game Show (LU-4) Europe", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, gs_lu3, gs_lu4, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "The Bally Game Show (LU-3) Europe", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, gs_la3, gs_lu4, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "The Bally Game Show (LA-3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, gs_lg6, gs_lu4, s11c, s11c, s11c_state, init_s11c, ROT0, "Bally", "The Bally Game Show (LG-6) Germany", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1990, strax_p7, 0, s11c, s11c, s11c_state, init_s11c, ROT0, "Krell Development", "Star Trax (domestic prototype)", MACHINE_IS_SKELETON_MECHANICAL) diff --git a/src/mame/drivers/s9.cpp b/src/mame/drivers/s9.cpp index 63065eceff8..27831d86e63 100644 --- a/src/mame/drivers/s9.cpp +++ b/src/mame/drivers/s9.cpp @@ -98,10 +98,10 @@ private: void main_map(address_map &map); - u8 m_strobe = 0; - u8 m_row = 0; + u8 m_strobe = 0U; + u8 m_row = 0U; bool m_data_ok = 0; - u8 m_lamp_data = 0; + u8 m_lamp_data = 0U; emu_timer* m_irq_timer; static const device_timer_id TIMER_IRQ = 0; required_device m_maincpu; diff --git a/src/mame/includes/s11.h b/src/mame/includes/s11.h index 98a35cf341f..94cae040dd9 100644 --- a/src/mame/includes/s11.h +++ b/src/mame/includes/s11.h @@ -3,7 +3,7 @@ /* * s11.h * - * Created on: 1/01/2013 + * Created on: 2013-01-01 */ #ifndef MAME_INCLUDES_S11_H @@ -61,6 +61,7 @@ public: , m_ps88(*this, "ps88") , m_digits(*this, "digit%d", 0U) , m_io_keyboard(*this, "X%d", 0U) + , m_io_outputs(*this, "out%d", 0U) { } void s11(machine_config &config); @@ -79,9 +80,9 @@ protected: void bank_w(u8 data); void dig1_w(u8 data); void lamp0_w(u8 data); - void lamp1_w(u8 data) { } - void sol2_w(u8 data) { } // solenoids 8-15 - void sol3_w(u8 data); // solenoids 0-7 + void lamp1_w(u8 data); + void sol2_w(u8 data) { for (u8 i = 0; i < 8; i++) m_io_outputs[8U+i] = BIT(data, i); }; // solenoids 8-15 + void sol3_w(u8 data) { for (u8 i = 0; i < 8; i++) m_io_outputs[i] = BIT(data, i); }; // solenoids 0-7 void sound_w(u8 data); void pia2c_pa_w(u8 data); @@ -108,9 +109,9 @@ protected: void s11_main_map(address_map &map); void s11_audio_map(address_map &map); - virtual void machine_start() override { m_digits.resolve(); } - virtual void device_timer(emu_timer &timer, device_timer_id id, int param) override; + virtual void machine_start() override; virtual void machine_reset() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param) override; // devices required_device m_maincpu; @@ -135,6 +136,7 @@ protected: optional_device m_ps88; output_finder<63> m_digits; required_ioport_array<8> m_io_keyboard; + output_finder<80> m_io_outputs; // 16 solenoids + 64 lamps // getters/setters u8 get_strobe() { return m_strobe; } @@ -142,25 +144,27 @@ protected: u8 get_diag() { return m_diag; } void set_diag(u8 d) { m_diag = d; } u32 get_segment1() { return m_segment1; } - void set_segment1(uint32_t s) { m_segment1 = s; } + void set_segment1(u32 s) { m_segment1 = s; } u32 get_segment2() { return m_segment2; } - void set_segment2(uint32_t s) { m_segment2 = s; } + void set_segment2(u32 s) { m_segment2 = s; } void set_timer(emu_timer* t) { m_irq_timer = t; } static const device_timer_id TIMER_IRQ = 0; -private: - void dig0_w(u8 data); u8 m_sound_data = 0U; u8 m_strobe = 0U; u8 m_row = 0U; u8 m_diag = 0U; + u8 m_lamp_data = 0U; u32 m_segment1 = 0U; u32 m_segment2 = 0U; u32 m_timer_count = 0U; emu_timer* m_irq_timer; bool m_timer_irq_active = false; bool m_pia_irq_active = false; + +private: + void dig0_w(u8 data); }; @@ -193,19 +197,22 @@ public: void s11b(machine_config &config); void s11b_jokerz(machine_config &config); - void init_s11b(); - void init_s11b_invert(); + void init_s11bnn(); // normal + void init_s11bin(); // invert + void init_s11bn7(); // 7seg34 + void init_s11bi7(); // invert and 7seg34 protected: + virtual void machine_start() override; virtual void machine_reset() override; - void set_invert(bool inv) { m_invert = inv; } + void set_invert(bool i) { m_invert = i; } + void set_7seg(bool i) { m_is7seg34 = i; } void s11b_dig1_w(u8 data); void s11b_pia2c_pa_w(u8 data); void s11b_pia2c_pb_w(u8 data); void s11b_pia34_pa_w(u8 data); - -private: + bool m_is7seg34 = false; // some games use 7-segment displays for players 3 and 4 bool m_invert = false; // later System 11B games start expecting inverted data to the display LED segments. }; @@ -220,6 +227,7 @@ public: void s11c(machine_config &config); void init_s11c(); + void init_s11c7(); protected: virtual void machine_reset() override;