by17 and by35 back in sync - should make a device or common base out of this (nw)

This commit is contained in:
Vas Crabb 2018-03-03 23:47:27 +11:00
parent 51abb7d862
commit b40f058c90
2 changed files with 29 additions and 37 deletions

View File

@ -545,9 +545,7 @@ WRITE_LINE_MEMBER( by17_state::u10_ca2_w )
#if 0 // Display Blanking - Out of sync with video redraw rate and causes flicker so it's disabled
if (state == 0)
{
int digit;
for (digit=0; digit<8; digit++)
for (int digit=0; digit<8; digit++)
{
m_digits[0][digit] = 0
m_digits[1][digit] = 0
@ -734,8 +732,7 @@ WRITE8_MEMBER( by17_state::u11_b_w )
}
else // Rest output - all momentary solenoids are off
{
for (int i=0; i<15; i++)
m_solenoids[i] = false;
std::fill_n(std::begin(m_solenoids), 15, false);
}
}

View File

@ -123,6 +123,7 @@ protected:
, m_io_x3(*this, "X3")
, m_io_x4(*this, "X4")
, m_lamps(*this, "lamp%u", 0U)
, m_digits(*this, "digit%u%u", 1U, 1U)
, m_solenoids(*this, "solenoid%u", 0U)
{ }
@ -167,7 +168,6 @@ private:
bool m_u11_ca1;
bool m_u11_cb2;
bool m_7d;
uint8_t m_digit;
uint8_t m_segment[6];
uint8_t m_lamp_decode;
solenoid_feature_data const &m_solenoid_features;
@ -187,6 +187,7 @@ private:
required_ioport m_io_x3;
required_ioport m_io_x4;
output_finder<15 * 4> m_lamps;
output_finder<5, 8> m_digits;
output_finder<20> m_solenoids;
};
@ -585,15 +586,13 @@ WRITE_LINE_MEMBER( by35_state::u10_ca2_w )
#if 0 // Display Blanking - Out of sync with video redraw rate and causes flicker so it's disabled
if (state == 0)
{
int digit;
for (digit=1; digit<=8; digit++)
for (int digit=0; digit<8; digit++)
{
output().set_digit_value(10+digit, 0);
output().set_digit_value(20+digit, 0);
output().set_digit_value(30+digit, 0);
output().set_digit_value(40+digit, 0);
output().set_digit_value(50+digit, 0);
m_digits[0][digit] = 0
m_digits[1][digit] = 0
m_digits[2][digit] = 0
m_digits[3][digit] = 0
m_digits[4][digit] = 0
}
}
#endif
@ -741,35 +740,34 @@ WRITE8_MEMBER( by35_state::u11_a_w )
}
m_digit = 0;
uint8_t digit = 0;
if (BIT(data, 7))
m_digit = 1;
digit = 1;
else if (BIT(data, 6))
m_digit = 2;
digit = 2;
else if (BIT(data, 5))
m_digit = 3;
digit = 3;
else if (BIT(data, 4))
m_digit = 4;
digit = 4;
else if (BIT(data, 3))
m_digit = 5;
digit = 5;
else if (BIT(data, 2))
m_digit = 6;
digit = 6;
else if (BIT(data, 2) && BIT(data, 3)) // Aftermarket 7th digit strobe for 6 digit games
m_digit = 7;
digit = 7;
else if (BIT(data, 1) && m_7d)
m_digit = 7;
digit = 7;
if ((m_u10_ca2==0) && m_digit)
if ((m_u10_ca2==0) && digit)
{
static const uint8_t patterns[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543 - BCD to 7 Segment Display Decoder
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]]);
output().set_digit_value(50+m_digit, patterns[m_segment[5]]);
static constexpr uint8_t patterns[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543 - BCD to 7 Segment Display Decoder
m_digits[0][digit - 1] = patterns[m_segment[1]];
m_digits[1][digit - 1] = patterns[m_segment[2]];
m_digits[2][digit - 1] = patterns[m_segment[3]];
m_digits[3][digit - 1] = patterns[m_segment[4]];
m_digits[4][digit - 1] = patterns[m_segment[5]];
}
m_u11a = data;
@ -786,7 +784,7 @@ WRITE8_MEMBER( by35_state::u11_b_w )
m_samples->start(m_solenoid_features[(data & 0x0f)][0], m_solenoid_features[(data & 0x0f)][1]);
}
output().set_indexed_value( "solenoid", (data & 0x0f), true);
m_solenoids[data & 0x0f] = true;
if (m_solenoid_features[(data & 0x0f)][3]) // Reset/release relevant switch after firing Solenoid
m_io_hold_x[(m_solenoid_features[(data & 0x0f)][2])] &= (m_solenoid_features[(data & 0x0f)][3]);
@ -877,11 +875,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( by35_state::timer_z_freq )
/*** Zero Crossing - power to all Lamp SCRs is cut off and reset ***/
for (int i=0; i<60; i++)
{
output().set_indexed_value( "lamp", i, 0 );
}
std::fill(std::begin(m_lamps), std::end(m_lamps), 0);
}
TIMER_DEVICE_CALLBACK_MEMBER( by35_state::timer_z_pulse )
{
@ -1016,6 +1010,7 @@ void by35_state::machine_start()
genpin_class::machine_start();
m_lamps.resolve();
m_digits.resolve();
m_solenoids.resolve();
}