From acb2c7168edc718198e94cd0607794f114b3612f Mon Sep 17 00:00:00 2001 From: Robbbert Date: Mon, 18 Aug 2014 00:16:16 +0000 Subject: [PATCH] by17,hankin,st_mp100,st_mp200: used same display method as by35. --- src/mame/drivers/by17.c | 239 ++++++++++++++++++----------------- src/mame/drivers/by35.c | 8 +- src/mame/drivers/hankin.c | 42 +++--- src/mame/drivers/st_mp100.c | 29 +++-- src/mame/drivers/st_mp200.c | 40 +++--- src/mame/layout/by17.lay | 44 +++---- src/mame/layout/st_mp100.lay | 36 +++--- src/mame/layout/st_mp200.lay | 42 +++--- 8 files changed, 255 insertions(+), 225 deletions(-) diff --git a/src/mame/drivers/by17.c b/src/mame/drivers/by17.c index f2cd8c7fecb..a65992d25c0 100644 --- a/src/mame/drivers/by17.c +++ b/src/mame/drivers/by17.c @@ -42,7 +42,6 @@ public: , m_io_x4(*this, "X4") { } - DECLARE_DRIVER_INIT(by17); DECLARE_READ8_MEMBER(u10_a_r); DECLARE_WRITE8_MEMBER(u10_a_w); DECLARE_READ8_MEMBER(u10_b_r); @@ -56,20 +55,21 @@ public: DECLARE_WRITE_LINE_MEMBER(u11_cb2_w); DECLARE_INPUT_CHANGED_MEMBER(activity_test); DECLARE_INPUT_CHANGED_MEMBER(self_test); - TIMER_DEVICE_CALLBACK_MEMBER(u10_timer); + TIMER_DEVICE_CALLBACK_MEMBER(timer_x); TIMER_DEVICE_CALLBACK_MEMBER(u11_timer); private: - UINT8 m_u10; - UINT8 m_u10_a; - UINT8 m_u10_b; - UINT8 m_u11_a; - UINT8 m_u11_b; + UINT8 m_u10a; + UINT8 m_u10b; + UINT8 m_u11a; + UINT8 m_u11b; bool m_u10_ca2; bool m_u10_cb2; - bool m_u10_timer; + bool m_u11_cb2; + bool m_timer_x; bool m_u11_timer; UINT8 m_digit; - UINT8 m_segment; + UINT8 m_counter; + UINT8 m_segment[5]; virtual void machine_reset(); required_device m_maincpu; required_device m_pia_u10; @@ -308,8 +308,10 @@ INPUT_CHANGED_MEMBER( by17_state::self_test ) WRITE_LINE_MEMBER( by17_state::u10_ca2_w ) { m_u10_ca2 = state; + if (!state) + m_counter = 0; } - + WRITE_LINE_MEMBER( by17_state::u10_cb2_w ) { } @@ -321,36 +323,36 @@ WRITE_LINE_MEMBER( by17_state::u11_ca2_w ) WRITE_LINE_MEMBER( by17_state::u11_cb2_w ) { + m_u11_cb2 = state; } READ8_MEMBER( by17_state::u10_a_r ) { - return m_u10_a; + return m_u10a; } WRITE8_MEMBER( by17_state::u10_a_w ) { - static const UINT8 patterns[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543 - m_segment = data >> 4; - m_u10_a = data; - m_u10 = (data & 15) | (BIT(m_u11_a, 0) << 4); + m_u10a = data; if (!m_u10_ca2) { - if (!BIT(m_u10, 0)) - output_set_digit_value(m_digit, patterns[m_segment]); + m_counter++; + + if (m_counter==1) + m_segment[0] = data>>4; else - if (m_u10==0x1d) - output_set_digit_value(8+m_digit, patterns[m_segment]); + if (m_counter==3) + m_segment[1] = data>>4; else - if (m_u10==0x1b) - output_set_digit_value(16+m_digit, patterns[m_segment]); + if (m_counter==5) + m_segment[2] = data>>4; else - if (m_u10==0x07) - output_set_digit_value(24+m_digit, patterns[m_segment]); + if (m_counter==7) + m_segment[3] = data>>4; else - if (!BIT(m_u10, 4)) - output_set_digit_value(32+m_digit, patterns[m_segment]); + if (m_counter==9) + m_segment[4] = data>>4; } } @@ -358,28 +360,28 @@ READ8_MEMBER( by17_state::u10_b_r ) { UINT8 data = 0; - if (BIT(m_u10_a, 0)) + if (BIT(m_u10a, 0)) data |= m_io_x0->read(); - if (BIT(m_u10_a, 1)) + if (BIT(m_u10a, 1)) data |= m_io_x1->read(); - if (BIT(m_u10_a, 2)) + if (BIT(m_u10a, 2)) data |= m_io_x2->read(); - if (BIT(m_u10_a, 3)) + if (BIT(m_u10a, 3)) data |= m_io_x3->read(); - if (BIT(m_u10_a, 4)) + if (BIT(m_u10a, 4)) data |= m_io_x4->read(); - if (BIT(m_u10_a, 5)) + if (BIT(m_u10a, 5)) data |= m_io_dsw0->read(); - if (BIT(m_u10_a, 6)) + if (BIT(m_u10a, 6)) data |= m_io_dsw1->read(); - if (BIT(m_u10_a, 7)) + if (BIT(m_u10a, 7)) data |= m_io_dsw2->read(); if (m_u10_cb2) @@ -390,100 +392,111 @@ READ8_MEMBER( by17_state::u10_b_r ) WRITE8_MEMBER( by17_state::u10_b_w ) { - m_u10_b = data; + m_u10b = data; } READ8_MEMBER( by17_state::u11_a_r ) { - return m_u11_a; + return m_u11a; } WRITE8_MEMBER( by17_state::u11_a_w ) { - m_u11_a = data; + m_u11a = data; - m_digit = 0xff; - if BIT(data, 2) - m_digit = 4; - else - if BIT(data, 3) - m_digit = 3; - else - if BIT(data, 4) - m_digit = 2; - else - if BIT(data, 5) - m_digit = 1; - else - if BIT(data, 6) - m_digit = 0; - else - if BIT(data, 7) - m_digit = 5; + if (!m_u10_ca2) + { + if BIT(data, 2) + m_digit = 5; + else + if BIT(data, 3) + m_digit = 4; + else + if BIT(data, 4) + m_digit = 3; + else + if BIT(data, 5) + m_digit = 2; + else + if BIT(data, 6) + m_digit = 1; + else + if BIT(data, 7) + m_digit = 0; + + if (BIT(data, 0) && (m_counter > 8)) + { + static const UINT8 patterns[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543 + output_set_digit_value(m_digit, patterns[m_segment[0]]); + output_set_digit_value(10+m_digit, patterns[m_segment[1]]); + output_set_digit_value(20+m_digit, patterns[m_segment[2]]); + output_set_digit_value(30+m_digit, patterns[m_segment[3]]); + output_set_digit_value(40+m_digit, patterns[m_segment[4]]); + } + } } WRITE8_MEMBER( by17_state::u11_b_w ) { - m_u11_b = data; - switch (data & 15) + m_u11b = data; + if (!m_u11_cb2) { - case 0x0: // chime 10 - m_samples->start(1, 1); - break; - case 0x1: // chime 100 - m_samples->start(2, 2); - break; - case 0x2: // chime 1000 - m_samples->start(3, 3); - break; - case 0x3: // chime 10000 - m_samples->start(0, 4); - break; - case 0x4: - break; - case 0x5: // knocker - m_samples->start(0, 6); - break; - case 0x6: // outhole - m_samples->start(0, 5); - break; - // from here, vary per game - case 0x7: - case 0x8: - case 0x9: - break; - case 0xa: - case 0xb: - case 0xc: // bumpers - m_samples->start(0, 0); - break; - case 0xd: - case 0xe: - case 0xf: - break; + switch (data & 15) + { + case 0x0: // chime 10 + m_samples->start(1, 1); + break; + case 0x1: // chime 100 + m_samples->start(2, 2); + break; + case 0x2: // chime 1000 + m_samples->start(3, 3); + break; + case 0x3: // chime 10000 + m_samples->start(0, 4); + break; + case 0x4: + break; + case 0x5: // knocker + m_samples->start(0, 6); + break; + case 0x6: // outhole + m_samples->start(0, 5); + break; + // from here, vary per game + case 0x7: + case 0x8: + case 0x9: + break; + case 0xa: + case 0xb: + case 0xc: // bumpers + m_samples->start(0, 0); + break; + case 0xd: + case 0xe: + case 0xf: + break; + } } } void by17_state::machine_reset() { - m_u10_a = 0; - m_u10_b = 0; + m_u10a = 0; + m_u10b = 0; m_u10_cb2 = 0; - m_u11_a = 0; - m_u11_b = 0; - m_u10_timer = 0; + m_u11a = 0; + m_u11b = 0; + m_timer_x = 0; m_u11_timer = 0; } -DRIVER_INIT_MEMBER( by17_state, by17 ) -{ -} - // zero-cross detection -TIMER_DEVICE_CALLBACK_MEMBER( by17_state::u10_timer ) +TIMER_DEVICE_CALLBACK_MEMBER( by17_state::timer_x ) { - m_u10_timer ^= 1; - m_pia_u10->cb1_w(m_u10_timer); + m_timer_x ^= 1; + m_pia_u10->cb1_w(m_timer_x); } // 555 timer for display refresh @@ -516,7 +529,7 @@ static MACHINE_CONFIG_START( by17, by17_state ) MCFG_PIA_CB2_HANDLER(WRITELINE(by17_state, u10_cb2_w)) MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line)) MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line)) - MCFG_TIMER_DRIVER_ADD_PERIODIC("timer_z", by17_state, u10_timer, attotime::from_hz(120)) // mains freq*2 + MCFG_TIMER_DRIVER_ADD_PERIODIC("timer_x", by17_state, timer_x, attotime::from_hz(120)) // mains freq*2 MCFG_DEVICE_ADD("pia_u11", PIA6821, 0) MCFG_PIA_READPA_HANDLER(READ8(by17_state, u11_a_r)) @@ -627,13 +640,13 @@ ROM_END /---------------------------------------------------------------*/ -GAME( 1976, bowarrow, 0, by17, by17, by17_state, by17, ROT0, "Bally", "Bow & Arrow (Prototype)", GAME_IS_SKELETON_MECHANICAL) -GAME( 1977, freedom, 0, by17, by17, by17_state, by17, ROT0, "Bally", "Freedom", GAME_MECHANICAL) -GAME( 1977, nightrdr, 0, by17, by17, by17_state, by17, ROT0, "Bally", "Night Rider (rev. 21)", GAME_MECHANICAL) -GAME( 1977, nightr20, nightrdr, by17, by17, by17_state, by17, ROT0, "Bally", "Night Rider (rev. 20)", GAME_MECHANICAL) -GAME( 1978, blackjck, 0, by17, by17, by17_state, by17, ROT0, "Bally", "Black Jack (Pinball)", GAME_MECHANICAL) -GAME( 1977, evelknie, 0, by17, by17, by17_state, by17, ROT0, "Bally", "Evel Knievel", GAME_MECHANICAL) -GAME( 1978, matahari, 0, by17, by17, by17_state, by17, ROT0, "Bally", "Mata Hari", GAME_MECHANICAL) -GAME( 1977, eightbll, 0, by17, by17, by17_state, by17, ROT0, "Bally", "Eight Ball", GAME_MECHANICAL) -GAME( 1978, pwerplay, 0, by17, by17, by17_state, by17, ROT0, "Bally", "Power Play (Pinball)", GAME_MECHANICAL) -GAME( 1978, stk_sprs, 0, by17, by17, by17_state, by17, ROT0, "Bally", "Strikes and Spares", GAME_MECHANICAL) +GAME( 1976, bowarrow, 0, by17, by17, driver_device, 0, ROT0, "Bally", "Bow & Arrow (Prototype)", GAME_IS_SKELETON_MECHANICAL) +GAME( 1977, freedom, 0, by17, by17, driver_device, 0, ROT0, "Bally", "Freedom", GAME_MECHANICAL) +GAME( 1977, nightrdr, 0, by17, by17, driver_device, 0, ROT0, "Bally", "Night Rider (rev. 21)", GAME_MECHANICAL) +GAME( 1977, nightr20, nightrdr, by17, by17, driver_device, 0, ROT0, "Bally", "Night Rider (rev. 20)", GAME_MECHANICAL) +GAME( 1978, blackjck, 0, by17, by17, driver_device, 0, ROT0, "Bally", "Black Jack (Pinball)", GAME_MECHANICAL) +GAME( 1977, evelknie, 0, by17, by17, driver_device, 0, ROT0, "Bally", "Evel Knievel", GAME_MECHANICAL) +GAME( 1978, matahari, 0, by17, by17, driver_device, 0, ROT0, "Bally", "Mata Hari", GAME_MECHANICAL) +GAME( 1977, eightbll, 0, by17, by17, driver_device, 0, ROT0, "Bally", "Eight Ball", GAME_MECHANICAL) +GAME( 1978, pwerplay, 0, by17, by17, driver_device, 0, ROT0, "Bally", "Power Play (Pinball)", GAME_MECHANICAL) +GAME( 1978, stk_sprs, 0, by17, by17, driver_device, 0, ROT0, "Bally", "Strikes and Spares", GAME_MECHANICAL) diff --git a/src/mame/drivers/by35.c b/src/mame/drivers/by35.c index 9246394458a..17880b8859b 100644 --- a/src/mame/drivers/by35.c +++ b/src/mame/drivers/by35.c @@ -111,7 +111,7 @@ private: bool m_u11_cb2; bool m_timer_x; bool m_u11_timer; - bool m_6d; + bool m_7d; UINT8 m_digit; UINT8 m_counter; UINT8 m_segment[5]; @@ -449,7 +449,7 @@ WRITE8_MEMBER( by35_state::u11_a_w ) if (!m_u10_ca2) { - if (!m_6d & BIT(data, 1)) + if (m_7d & BIT(data, 1)) m_digit = 6; else if BIT(data, 2) @@ -550,12 +550,12 @@ void by35_state::machine_reset() DRIVER_INIT_MEMBER( by35_state, by35_6 ) { - m_6d = 1; + m_7d = 0; } DRIVER_INIT_MEMBER( by35_state, by35_7 ) { - m_6d = 0; + m_7d = 1; } // zero-cross detection diff --git a/src/mame/drivers/hankin.c b/src/mame/drivers/hankin.c index d5e57372b24..571a3ebc940 100644 --- a/src/mame/drivers/hankin.c +++ b/src/mame/drivers/hankin.c @@ -7,7 +7,7 @@ ToDo: - High score isn't saved or remembered -- Display should be flouro blue 9-segment +- Display should be flouro blue 12-segment - Sound - Mechanical @@ -52,13 +52,13 @@ public: TIMER_DEVICE_CALLBACK_MEMBER(timer_x); private: bool m_timer_x; + UINT8 m_ic10a; + UINT8 m_ic11a; bool m_ic11_ca2; bool m_ic10_cb2; UINT8 m_counter; UINT8 m_digit; - UINT8 m_segment; - UINT8 m_ic10a; - UINT8 m_ic11a; + UINT8 m_segment[5]; virtual void machine_reset(); required_device m_maincpu; required_device m_audiocpu; @@ -254,7 +254,15 @@ WRITE8_MEMBER( hankin_state::ic10_a_w ) if BIT(data, 7) m_digit = 0; - m_counter++; + if (BIT(data, 0) && (m_counter > 8)) + { + static const UINT8 patterns[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543 + output_set_digit_value(m_digit, patterns[m_segment[0]]); + output_set_digit_value(10+m_digit, patterns[m_segment[1]]); + output_set_digit_value(20+m_digit, patterns[m_segment[2]]); + output_set_digit_value(30+m_digit, patterns[m_segment[3]]); + output_set_digit_value(40+m_digit, patterns[m_segment[4]]); + } } } @@ -298,28 +306,26 @@ WRITE_LINE_MEMBER( hankin_state::ic10_cb2_w ) WRITE8_MEMBER( hankin_state::ic11_a_w ) { - static const UINT8 patterns[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543 m_ic11a = data; if (!m_ic11_ca2) { - if (m_counter==3) - output_set_digit_value(m_digit, patterns[m_segment]); - m_counter++; - m_segment = data >> 4; - if (m_counter==4) - output_set_digit_value(10+m_digit, patterns[m_segment]); + if (m_counter==1) + m_segment[0] = data>>4; else - if (m_counter==6) - output_set_digit_value(20+m_digit, patterns[m_segment]); + if (m_counter==3) + m_segment[1] = data>>4; else - if (m_counter==8) - output_set_digit_value(30+m_digit, patterns[m_segment]); + if (m_counter==5) + m_segment[2] = data>>4; else - if (m_counter==10) - output_set_digit_value(40+m_digit, patterns[m_segment]); + if (m_counter==7) + m_segment[3] = data>>4; + else + if (m_counter==9) + m_segment[4] = data>>4; } } diff --git a/src/mame/drivers/st_mp100.c b/src/mame/drivers/st_mp100.c index d58824b0414..60a93e59f6b 100644 --- a/src/mame/drivers/st_mp100.c +++ b/src/mame/drivers/st_mp100.c @@ -66,6 +66,7 @@ private: bool m_u11_timer; UINT8 m_digit; UINT8 m_counter; + UINT8 m_segment[5]; virtual void machine_reset(); required_device m_maincpu; required_device m_pia_u10; @@ -519,28 +520,26 @@ READ8_MEMBER( st_mp100_state::u10_a_r ) WRITE8_MEMBER( st_mp100_state::u10_a_w ) { - static const UINT8 patterns[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543 m_u10a = data; if (!m_u10_ca2) { m_counter++; - UINT8 segment = data >> 4; if (m_counter==1) - output_set_digit_value(m_digit, patterns[segment]); - + m_segment[0] = data>>4; + else if (m_counter==3) - output_set_digit_value(10+m_digit, patterns[segment]); + m_segment[1] = data>>4; else if (m_counter==5) - output_set_digit_value(20+m_digit, patterns[segment]); + m_segment[2] = data>>4; else - if (m_counter==8) - output_set_digit_value(30+m_digit, patterns[segment]); + if (m_counter==7) + m_segment[3] = data>>4; else - if (m_counter==10) - output_set_digit_value(40+m_digit, patterns[segment]); + if (m_counter==9) + m_segment[4] = data>>4; } } @@ -612,7 +611,15 @@ WRITE8_MEMBER( st_mp100_state::u11_a_w ) if BIT(data, 7) m_digit = 0; - m_counter++; + if (BIT(data, 0) && (m_counter > 8)) + { + static const UINT8 patterns[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543 + output_set_digit_value(m_digit, patterns[m_segment[0]]); + output_set_digit_value(10+m_digit, patterns[m_segment[1]]); + output_set_digit_value(20+m_digit, patterns[m_segment[2]]); + output_set_digit_value(30+m_digit, patterns[m_segment[3]]); + output_set_digit_value(40+m_digit, patterns[m_segment[4]]); + } } } diff --git a/src/mame/drivers/st_mp200.c b/src/mame/drivers/st_mp200.c index b9bfc6267a7..8c502a011ed 100644 --- a/src/mame/drivers/st_mp200.c +++ b/src/mame/drivers/st_mp200.c @@ -72,9 +72,10 @@ private: bool m_timer_x; bool m_u11_timer; bool m_su; // speech unit fitted yes/no - bool m_6d; // 6-digit display yes/no + bool m_7d; // 7-digit display yes/no UINT8 m_digit; UINT8 m_counter; + UINT8 m_segment[5]; virtual void machine_reset(); required_device m_maincpu; optional_device m_s14001a; @@ -362,31 +363,26 @@ READ8_MEMBER( st_mp200_state::u10_a_r ) WRITE8_MEMBER( st_mp200_state::u10_a_w ) { - static const UINT8 patterns[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543 m_u10a = data; if (!m_u10_ca2) { m_counter++; - UINT8 segment = data >> 4; - - if (m_6d && !m_digit && (m_counter < 6)) - m_digit = 6; // handle 6-digit display if (m_counter==1) - output_set_digit_value(m_digit, patterns[segment]); + m_segment[0] = data>>4; else if (m_counter==3) - output_set_digit_value(10+m_digit, patterns[segment]); + m_segment[1] = data>>4; else if (m_counter==5) - output_set_digit_value(20+m_digit, patterns[segment]); + m_segment[2] = data>>4; else - if (m_counter==8) - output_set_digit_value(30+m_digit, patterns[segment]); + if (m_counter==7) + m_segment[3] = data>>4; else - if (m_counter==10) - output_set_digit_value(40+m_digit, patterns[segment]); + if (m_counter==9) + m_segment[4] = data>>4; } } @@ -440,7 +436,7 @@ WRITE8_MEMBER( st_mp200_state::u11_a_w ) if (!m_u10_ca2) { - if BIT(data, 1) + if (m_7d & BIT(data, 1)) m_digit = 6; else if BIT(data, 2) @@ -461,7 +457,15 @@ WRITE8_MEMBER( st_mp200_state::u11_a_w ) if BIT(data, 7) m_digit = 0; - m_counter++; + if (BIT(data, 0) && (m_counter > 8)) + { + static const UINT8 patterns[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543 + output_set_digit_value(m_digit, patterns[m_segment[0]]); + output_set_digit_value(10+m_digit, patterns[m_segment[1]]); + output_set_digit_value(20+m_digit, patterns[m_segment[2]]); + output_set_digit_value(30+m_digit, patterns[m_segment[3]]); + output_set_digit_value(40+m_digit, patterns[m_segment[4]]); + } } } @@ -531,19 +535,19 @@ void st_mp200_state::machine_reset() DRIVER_INIT_MEMBER( st_mp200_state, st_mp200 ) { - m_6d = 0; + m_7d = 1; m_su = 0; } DRIVER_INIT_MEMBER( st_mp200_state, st_mp201 ) { - m_6d = 0; + m_7d = 1; m_su = 1; } DRIVER_INIT_MEMBER( st_mp200_state, st_mp202 ) { - m_6d = 1; + m_7d = 0; m_su = 0; } diff --git a/src/mame/layout/by17.lay b/src/mame/layout/by17.lay index cc45587d20a..f8d3a97a5a9 100644 --- a/src/mame/layout/by17.lay +++ b/src/mame/layout/by17.lay @@ -57,76 +57,76 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/src/mame/layout/st_mp100.lay b/src/mame/layout/st_mp100.lay index 5f74d63e411..79386af4277 100644 --- a/src/mame/layout/st_mp100.lay +++ b/src/mame/layout/st_mp100.lay @@ -37,62 +37,62 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/src/mame/layout/st_mp200.lay b/src/mame/layout/st_mp200.lay index 9de27601f8e..2aeb138fec4 100644 --- a/src/mame/layout/st_mp200.lay +++ b/src/mame/layout/st_mp200.lay @@ -37,71 +37,71 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +