(nw) output finder for micropin,mmd1,nsm,play_1,play_2,rowamet

This commit is contained in:
Robbbert 2018-04-04 21:06:26 +10:00
parent 49e9c460ef
commit b232bb88d8
6 changed files with 73 additions and 56 deletions

View File

@ -43,6 +43,7 @@ public:
, m_v2cpu(*this, "v2cpu") , m_v2cpu(*this, "v2cpu")
, m_pia51(*this, "pia51") , m_pia51(*this, "pia51")
, m_beep(*this, "beeper") , m_beep(*this, "beeper")
, m_digits(*this, "digit%u", 0U)
{ } { }
DECLARE_READ8_MEMBER(pia51_r); DECLARE_READ8_MEMBER(pia51_r);
@ -68,10 +69,12 @@ private:
uint8_t m_beep_time; uint8_t m_beep_time;
uint8_t m_led_time[8]; uint8_t m_led_time[8];
virtual void machine_reset() override; virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
optional_device<m6800_cpu_device> m_v1cpu; optional_device<m6800_cpu_device> m_v1cpu;
optional_device<i8085a_cpu_device> m_v2cpu; optional_device<i8085a_cpu_device> m_v2cpu;
optional_device<pia6821_device> m_pia51; optional_device<pia6821_device> m_pia51;
optional_device<beep_device> m_beep; optional_device<beep_device> m_beep;
output_finder<76> m_digits;
}; };
@ -203,8 +206,8 @@ WRITE8_MEMBER( micropin_state::p50a_w )
if (m_counter == 1) if (m_counter == 1)
{ {
static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7448 static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7448
output().set_digit_value(m_row, patterns[data&15]); m_digits[m_row] = patterns[data&15];
output().set_digit_value(m_row+20, patterns[data>>4]); m_digits[m_row+20] = patterns[data>>4];
} }
} }
@ -214,8 +217,8 @@ WRITE8_MEMBER( micropin_state::p50b_w )
if (m_counter == 2) if (m_counter == 2)
{ {
static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7448 static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7448
output().set_digit_value(m_row+40, patterns[data&15]); m_digits[m_row+40] = patterns[data&15];
output().set_digit_value(m_row+60, patterns[data>>4]); m_digits[m_row+60] = patterns[data>>4];
} }
} }

View File

@ -155,8 +155,10 @@ class mmd1_state : public driver_device
{ {
public: public:
mmd1_state(const machine_config &mconfig, device_type type, const char *tag) mmd1_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) , : driver_device(mconfig, type, tag)
m_maincpu(*this, "maincpu") { } , m_maincpu(*this, "maincpu")
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_WRITE8_MEMBER(mmd1_port0_w); DECLARE_WRITE8_MEMBER(mmd1_port0_w);
DECLARE_WRITE8_MEMBER(mmd1_port1_w); DECLARE_WRITE8_MEMBER(mmd1_port1_w);
@ -169,18 +171,22 @@ public:
DECLARE_WRITE8_MEMBER(mmd2_digit_w); DECLARE_WRITE8_MEMBER(mmd2_digit_w);
DECLARE_WRITE8_MEMBER(mmd2_status_callback); DECLARE_WRITE8_MEMBER(mmd2_status_callback);
DECLARE_WRITE_LINE_MEMBER(mmd2_inte_callback); DECLARE_WRITE_LINE_MEMBER(mmd2_inte_callback);
uint8_t m_return_code;
uint8_t m_digit;
DECLARE_DRIVER_INIT(mmd2); DECLARE_DRIVER_INIT(mmd2);
DECLARE_MACHINE_RESET(mmd1); DECLARE_MACHINE_RESET(mmd1);
DECLARE_MACHINE_RESET(mmd2); DECLARE_MACHINE_RESET(mmd2);
required_device<cpu_device> m_maincpu;
void mmd1(machine_config &config); void mmd1(machine_config &config);
void mmd2(machine_config &config); void mmd2(machine_config &config);
void mmd1_io(address_map &map); void mmd1_io(address_map &map);
void mmd1_mem(address_map &map); void mmd1_mem(address_map &map);
void mmd2_io(address_map &map); void mmd2_io(address_map &map);
void mmd2_mem(address_map &map); void mmd2_mem(address_map &map);
private:
uint8_t m_return_code;
uint8_t m_digit;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
output_finder<9> m_digits;
}; };
@ -404,7 +410,7 @@ WRITE8_MEMBER( mmd1_state::mmd2_scanlines_w )
WRITE8_MEMBER( mmd1_state::mmd2_digit_w ) WRITE8_MEMBER( mmd1_state::mmd2_digit_w )
{ {
if (m_digit < 9) if (m_digit < 9)
output().set_digit_value(m_digit, data); m_digits[m_digit] = data;
} }
READ8_MEMBER( mmd1_state::mmd2_kbd_r ) READ8_MEMBER( mmd1_state::mmd2_kbd_r )

View File

@ -31,9 +31,10 @@ class nsm_state : public driver_device
{ {
public: public:
nsm_state(const machine_config &mconfig, device_type type, const char *tag) nsm_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag)
m_maincpu(*this, "maincpu") , m_maincpu(*this, "maincpu")
{ } , m_digits(*this, "digit%u", 0U)
{ }
DECLARE_READ8_MEMBER(ff_r); DECLARE_READ8_MEMBER(ff_r);
DECLARE_WRITE8_MEMBER(cru_w); DECLARE_WRITE8_MEMBER(cru_w);
@ -41,16 +42,14 @@ public:
void nsm(machine_config &config); void nsm(machine_config &config);
void nsm_io_map(address_map &map); void nsm_io_map(address_map &map);
void nsm_map(address_map &map); void nsm_map(address_map &map);
protected:
// devices
required_device<cpu_device> m_maincpu;
// driver_device overrides
virtual void machine_reset() override;
private: private:
uint8_t m_cru_data[9]; uint8_t m_cru_data[9];
uint8_t m_cru_count; uint8_t m_cru_count;
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
output_finder<60> m_digits;
}; };
void nsm_state::nsm_map(address_map &map) void nsm_state::nsm_map(address_map &map)
@ -111,7 +110,7 @@ WRITE8_MEMBER( nsm_state::cru_w )
for (j = 0; j < 5; j++) for (j = 0; j < 5; j++)
{ {
segments = m_cru_data[8-j]^0xff; segments = m_cru_data[8-j]^0xff;
output().set_digit_value(j * 10 + i, bitswap<16>(segments, 8, 8, 8, 8, 8, 8, 0, 0, 1, 1, 2, 3, 4, 5, 6, 7)); m_digits[j * 10 + i] = bitswap<16>(segments, 8, 8, 8, 8, 8, 8, 0, 0, 1, 1, 2, 3, 4, 5, 6, 7);
} }
} }
} }

View File

@ -38,6 +38,7 @@ public:
, m_maincpu(*this, "maincpu") , m_maincpu(*this, "maincpu")
, m_dips(*this, "X.%u", 0) , m_dips(*this, "X.%u", 0)
, m_monotone(*this, "monotone") , m_monotone(*this, "monotone")
, m_digits(*this, "digit%u", 0U)
{ } { }
DECLARE_READ8_MEMBER(port07_r); DECLARE_READ8_MEMBER(port07_r);
@ -67,9 +68,11 @@ private:
uint8_t m_match; uint8_t m_match;
uint8_t m_ball; uint8_t m_ball;
virtual void machine_reset() override; virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cosmac_device> m_maincpu; required_device<cosmac_device> m_maincpu;
required_ioport_array<4> m_dips; required_ioport_array<4> m_dips;
required_device<clock_device> m_monotone; required_device<clock_device> m_monotone;
output_finder<46> m_digits;
}; };
void play_1_state::play_1_map(address_map &map) void play_1_state::play_1_map(address_map &map)
@ -273,19 +276,19 @@ WRITE8_MEMBER( play_1_state::port01_w )
// d0-1 via 4013 to match-game board // d0-1 via 4013 to match-game board
// d4-7 via 4511 to match-game board // d4-7 via 4511 to match-game board
if (BIT(data, 0)) if (BIT(data, 0))
output().set_digit_value(40, patterns[1]); m_digits[40] = patterns[1];
else else
output().set_digit_value(40, 0); m_digits[40] = 0;
if (BIT(data, 1)) if (BIT(data, 1))
{ {
output().set_digit_value(44, patterns[0]); m_digits[44] = patterns[0];
output().set_digit_value(45, patterns[0]); m_digits[45] = patterns[0];
} }
else else
{ {
output().set_digit_value(44, 0); m_digits[44] = 0;
output().set_digit_value(45, 0); m_digits[45] = 0;
} }
m_match = patterns[data>>4]; m_match = patterns[data>>4];
@ -342,47 +345,47 @@ WRITE8_MEMBER( play_1_state::port03_w )
} }
break; break;
case 2: case 2:
output().set_digit_value(0, patterns[m_segment>>4]); m_digits[0] = patterns[m_segment>>4];
output().set_digit_value(1, patterns[m_segment&15]); m_digits[1] = patterns[m_segment&15];
break; break;
case 3: case 3:
output().set_digit_value(2, patterns[m_segment>>4]); m_digits[2] = patterns[m_segment>>4];
output().set_digit_value(3, patterns[m_segment&15]); m_digits[3] = patterns[m_segment&15];
break; break;
case 4: case 4:
output().set_digit_value(4, patterns[m_segment>>4]); m_digits[4] = patterns[m_segment>>4];
output().set_digit_value(5, patterns[m_segment&15]); m_digits[5] = patterns[m_segment&15];
output().set_digit_value(14, patterns[m_segment>>4]); m_digits[14] = patterns[m_segment>>4];
output().set_digit_value(15, patterns[m_segment&15]); m_digits[15] = patterns[m_segment&15];
output().set_digit_value(24, patterns[m_segment>>4]); m_digits[24] = patterns[m_segment>>4];
output().set_digit_value(25, patterns[m_segment&15]); m_digits[25] = patterns[m_segment&15];
output().set_digit_value(34, patterns[m_segment>>4]); m_digits[34] = patterns[m_segment>>4];
output().set_digit_value(35, patterns[m_segment&15]); m_digits[35] = patterns[m_segment&15];
break; break;
case 5: case 5:
output().set_digit_value(10, patterns[m_segment>>4]); m_digits[10] = patterns[m_segment>>4];
output().set_digit_value(11, patterns[m_segment&15]); m_digits[11] = patterns[m_segment&15];
break; break;
case 6: case 6:
output().set_digit_value(12, patterns[m_segment>>4]); m_digits[12] = patterns[m_segment>>4];
output().set_digit_value(13, patterns[m_segment&15]); m_digits[13] = patterns[m_segment&15];
break; break;
case 7: case 7:
output().set_digit_value(20, patterns[m_segment>>4]); m_digits[20] = patterns[m_segment>>4];
output().set_digit_value(21, patterns[m_segment&15]); m_digits[21] = patterns[m_segment&15];
break; break;
case 8: case 8:
output().set_digit_value(22, patterns[m_segment>>4]); m_digits[22] = patterns[m_segment>>4];
output().set_digit_value(23, patterns[m_segment&15]); m_digits[23] = patterns[m_segment&15];
break; break;
case 9: case 9:
output().set_digit_value(30, patterns[m_segment>>4]); m_digits[30] = patterns[m_segment>>4];
output().set_digit_value(31, patterns[m_segment&15]); m_digits[31] = patterns[m_segment&15];
break; break;
case 10: case 10:
case 11: case 11:
output().set_digit_value(32, patterns[m_segment>>4]); m_digits[32] = patterns[m_segment>>4];
output().set_digit_value(33, patterns[m_segment&15]); m_digits[33] = patterns[m_segment&15];
break; break;
default: default:
break; break;
@ -452,10 +455,10 @@ WRITE_LINE_MEMBER( play_1_state::clock_w )
m_maincpu->int_w(BIT(m_clockcnt, 0)); // inverted m_maincpu->int_w(BIT(m_clockcnt, 0)); // inverted
m_maincpu->ef1_w(BIT(m_clockcnt, 1)); // inverted m_maincpu->ef1_w(BIT(m_clockcnt, 1)); // inverted
if (BIT(m_clockcnt, 1)) if (BIT(m_clockcnt, 1))
output().set_digit_value(41, m_match); m_digits[41] = m_match;
else else
{ {
output().set_digit_value(43, m_match); m_digits[43] = m_match;
output().set_value("led1", !BIT(m_ball, 1)); output().set_value("led1", !BIT(m_ball, 1));
output().set_value("led2", !BIT(m_ball, 2)); output().set_value("led2", !BIT(m_ball, 2));
output().set_value("led3", !BIT(m_ball, 3)); output().set_value("led3", !BIT(m_ball, 3));

View File

@ -56,6 +56,7 @@ public:
, m_1863(*this, "1863") , m_1863(*this, "1863")
, m_aysnd1(*this, "aysnd1") , m_aysnd1(*this, "aysnd1")
, m_keyboard(*this, "X.%u", 0) , m_keyboard(*this, "X.%u", 0)
, m_digits(*this, "digit%u", 0U)
{ } { }
DECLARE_WRITE8_MEMBER(port01_w); DECLARE_WRITE8_MEMBER(port01_w);
@ -94,12 +95,14 @@ private:
uint8_t m_psg_latch; uint8_t m_psg_latch;
uint8_t m_port06; uint8_t m_port06;
virtual void machine_reset() override; virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cosmac_device> m_maincpu; required_device<cosmac_device> m_maincpu;
required_device<ttl7474_device> m_4013a; required_device<ttl7474_device> m_4013a;
required_device<ttl7474_device> m_4013b; required_device<ttl7474_device> m_4013b;
optional_device<cdp1863_device> m_1863; optional_device<cdp1863_device> m_1863;
optional_device<ay8910_device> m_aysnd1; optional_device<ay8910_device> m_aysnd1;
required_ioport_array<8> m_keyboard; required_ioport_array<8> m_keyboard;
output_finder<60> m_digits;
}; };
@ -223,7 +226,7 @@ WRITE8_MEMBER( play_2_state::port01_w )
for (uint8_t j = 0; j < 6; j++) for (uint8_t j = 0; j < 6; j++)
if (BIT(m_kbdrow, j)) if (BIT(m_kbdrow, j))
for (uint8_t i = 0; i < 5; i++) for (uint8_t i = 0; i < 5; i++)
output().set_digit_value(j*10 + i, m_segment[i] & 0x7f); m_digits[j*10 + i] = m_segment[i] & 0x7f;
} }
m_1863->set_output_gain(0, BIT(data, 7) ? 1.00 : 0.00); m_1863->set_output_gain(0, BIT(data, 7) ? 1.00 : 0.00);
} }
@ -395,7 +398,7 @@ MACHINE_CONFIG_START(play_2_state::play_2)
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_CDP1863_ADD("1863", 0, XTAL(2'950'000) / 8) MCFG_CDP1863_ADD("1863", 0, XTAL(2'950'000) / 8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
MACHINE_CONFIG_END MACHINE_CONFIG_END
MACHINE_CONFIG_START(play_2_state::zira) MACHINE_CONFIG_START(play_2_state::zira)

View File

@ -42,6 +42,7 @@ public:
, m_maincpu(*this, "maincpu") , m_maincpu(*this, "maincpu")
, m_cpu2(*this, "cpu2") , m_cpu2(*this, "cpu2")
, m_p_ram(*this, "ram") , m_p_ram(*this, "ram")
, m_digits(*this, "digit%u", 0U)
{ } { }
DECLARE_READ8_MEMBER(sound_r); DECLARE_READ8_MEMBER(sound_r);
@ -58,9 +59,11 @@ private:
uint8_t m_sndcmd; uint8_t m_sndcmd;
uint8_t m_io[16]; uint8_t m_io[16];
virtual void machine_reset() override; virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_cpu2; required_device<cpu_device> m_cpu2;
required_shared_ptr<uint8_t> m_p_ram; required_shared_ptr<uint8_t> m_p_ram;
output_finder<32> m_digits;
}; };
@ -213,8 +216,8 @@ TIMER_DEVICE_CALLBACK_MEMBER( rowamet_state::timer_a )
m_out_offs &= 15; m_out_offs &= 15;
uint8_t digit = m_out_offs << 1; uint8_t digit = m_out_offs << 1;
output().set_digit_value(digit, patterns[m_p_ram[m_out_offs]>>4]); m_digits[digit] = patterns[m_p_ram[m_out_offs]>>4];
output().set_digit_value(++digit, patterns[m_p_ram[m_out_offs++]&15]); m_digits[++digit] = patterns[m_p_ram[m_out_offs++]&15];
} }
MACHINE_CONFIG_START(rowamet_state::rowamet) MACHINE_CONFIG_START(rowamet_state::rowamet)