mirror of
https://github.com/holub/mame
synced 2025-04-19 23:12:11 +03:00
(nw) output finder for micropin,mmd1,nsm,play_1,play_2,rowamet
This commit is contained in:
parent
49e9c460ef
commit
b232bb88d8
@ -43,6 +43,7 @@ public:
|
||||
, m_v2cpu(*this, "v2cpu")
|
||||
, m_pia51(*this, "pia51")
|
||||
, m_beep(*this, "beeper")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
DECLARE_READ8_MEMBER(pia51_r);
|
||||
@ -68,10 +69,12 @@ private:
|
||||
uint8_t m_beep_time;
|
||||
uint8_t m_led_time[8];
|
||||
virtual void machine_reset() override;
|
||||
virtual void machine_start() override { m_digits.resolve(); }
|
||||
optional_device<m6800_cpu_device> m_v1cpu;
|
||||
optional_device<i8085a_cpu_device> m_v2cpu;
|
||||
optional_device<pia6821_device> m_pia51;
|
||||
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)
|
||||
{
|
||||
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]);
|
||||
output().set_digit_value(m_row+20, patterns[data>>4]);
|
||||
m_digits[m_row] = patterns[data&15];
|
||||
m_digits[m_row+20] = patterns[data>>4];
|
||||
}
|
||||
}
|
||||
|
||||
@ -214,8 +217,8 @@ WRITE8_MEMBER( micropin_state::p50b_w )
|
||||
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
|
||||
output().set_digit_value(m_row+40, patterns[data&15]);
|
||||
output().set_digit_value(m_row+60, patterns[data>>4]);
|
||||
m_digits[m_row+40] = patterns[data&15];
|
||||
m_digits[m_row+60] = patterns[data>>4];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -155,8 +155,10 @@ class mmd1_state : public driver_device
|
||||
{
|
||||
public:
|
||||
mmd1_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag) ,
|
||||
m_maincpu(*this, "maincpu") { }
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
DECLARE_WRITE8_MEMBER(mmd1_port0_w);
|
||||
DECLARE_WRITE8_MEMBER(mmd1_port1_w);
|
||||
@ -169,18 +171,22 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(mmd2_digit_w);
|
||||
DECLARE_WRITE8_MEMBER(mmd2_status_callback);
|
||||
DECLARE_WRITE_LINE_MEMBER(mmd2_inte_callback);
|
||||
uint8_t m_return_code;
|
||||
uint8_t m_digit;
|
||||
DECLARE_DRIVER_INIT(mmd2);
|
||||
DECLARE_MACHINE_RESET(mmd1);
|
||||
DECLARE_MACHINE_RESET(mmd2);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
void mmd1(machine_config &config);
|
||||
void mmd2(machine_config &config);
|
||||
void mmd1_io(address_map &map);
|
||||
void mmd1_mem(address_map &map);
|
||||
void mmd2_io(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 )
|
||||
{
|
||||
if (m_digit < 9)
|
||||
output().set_digit_value(m_digit, data);
|
||||
m_digits[m_digit] = data;
|
||||
}
|
||||
|
||||
READ8_MEMBER( mmd1_state::mmd2_kbd_r )
|
||||
|
@ -31,9 +31,10 @@ class nsm_state : public driver_device
|
||||
{
|
||||
public:
|
||||
nsm_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu")
|
||||
{ }
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
DECLARE_READ8_MEMBER(ff_r);
|
||||
DECLARE_WRITE8_MEMBER(cru_w);
|
||||
@ -41,16 +42,14 @@ public:
|
||||
void nsm(machine_config &config);
|
||||
void nsm_io_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:
|
||||
uint8_t m_cru_data[9];
|
||||
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)
|
||||
@ -111,7 +110,7 @@ WRITE8_MEMBER( nsm_state::cru_w )
|
||||
for (j = 0; j < 5; j++)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ public:
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_dips(*this, "X.%u", 0)
|
||||
, m_monotone(*this, "monotone")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
DECLARE_READ8_MEMBER(port07_r);
|
||||
@ -67,9 +68,11 @@ private:
|
||||
uint8_t m_match;
|
||||
uint8_t m_ball;
|
||||
virtual void machine_reset() override;
|
||||
virtual void machine_start() override { m_digits.resolve(); }
|
||||
required_device<cosmac_device> m_maincpu;
|
||||
required_ioport_array<4> m_dips;
|
||||
required_device<clock_device> m_monotone;
|
||||
output_finder<46> m_digits;
|
||||
};
|
||||
|
||||
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
|
||||
// d4-7 via 4511 to match-game board
|
||||
if (BIT(data, 0))
|
||||
output().set_digit_value(40, patterns[1]);
|
||||
m_digits[40] = patterns[1];
|
||||
else
|
||||
output().set_digit_value(40, 0);
|
||||
m_digits[40] = 0;
|
||||
|
||||
if (BIT(data, 1))
|
||||
{
|
||||
output().set_digit_value(44, patterns[0]);
|
||||
output().set_digit_value(45, patterns[0]);
|
||||
m_digits[44] = patterns[0];
|
||||
m_digits[45] = patterns[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
output().set_digit_value(44, 0);
|
||||
output().set_digit_value(45, 0);
|
||||
m_digits[44] = 0;
|
||||
m_digits[45] = 0;
|
||||
}
|
||||
|
||||
m_match = patterns[data>>4];
|
||||
@ -342,47 +345,47 @@ WRITE8_MEMBER( play_1_state::port03_w )
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
output().set_digit_value(0, patterns[m_segment>>4]);
|
||||
output().set_digit_value(1, patterns[m_segment&15]);
|
||||
m_digits[0] = patterns[m_segment>>4];
|
||||
m_digits[1] = patterns[m_segment&15];
|
||||
break;
|
||||
case 3:
|
||||
output().set_digit_value(2, patterns[m_segment>>4]);
|
||||
output().set_digit_value(3, patterns[m_segment&15]);
|
||||
m_digits[2] = patterns[m_segment>>4];
|
||||
m_digits[3] = patterns[m_segment&15];
|
||||
break;
|
||||
case 4:
|
||||
output().set_digit_value(4, patterns[m_segment>>4]);
|
||||
output().set_digit_value(5, patterns[m_segment&15]);
|
||||
output().set_digit_value(14, patterns[m_segment>>4]);
|
||||
output().set_digit_value(15, patterns[m_segment&15]);
|
||||
output().set_digit_value(24, patterns[m_segment>>4]);
|
||||
output().set_digit_value(25, patterns[m_segment&15]);
|
||||
output().set_digit_value(34, patterns[m_segment>>4]);
|
||||
output().set_digit_value(35, patterns[m_segment&15]);
|
||||
m_digits[4] = patterns[m_segment>>4];
|
||||
m_digits[5] = patterns[m_segment&15];
|
||||
m_digits[14] = patterns[m_segment>>4];
|
||||
m_digits[15] = patterns[m_segment&15];
|
||||
m_digits[24] = patterns[m_segment>>4];
|
||||
m_digits[25] = patterns[m_segment&15];
|
||||
m_digits[34] = patterns[m_segment>>4];
|
||||
m_digits[35] = patterns[m_segment&15];
|
||||
break;
|
||||
case 5:
|
||||
output().set_digit_value(10, patterns[m_segment>>4]);
|
||||
output().set_digit_value(11, patterns[m_segment&15]);
|
||||
m_digits[10] = patterns[m_segment>>4];
|
||||
m_digits[11] = patterns[m_segment&15];
|
||||
break;
|
||||
case 6:
|
||||
output().set_digit_value(12, patterns[m_segment>>4]);
|
||||
output().set_digit_value(13, patterns[m_segment&15]);
|
||||
m_digits[12] = patterns[m_segment>>4];
|
||||
m_digits[13] = patterns[m_segment&15];
|
||||
break;
|
||||
case 7:
|
||||
output().set_digit_value(20, patterns[m_segment>>4]);
|
||||
output().set_digit_value(21, patterns[m_segment&15]);
|
||||
m_digits[20] = patterns[m_segment>>4];
|
||||
m_digits[21] = patterns[m_segment&15];
|
||||
break;
|
||||
case 8:
|
||||
output().set_digit_value(22, patterns[m_segment>>4]);
|
||||
output().set_digit_value(23, patterns[m_segment&15]);
|
||||
m_digits[22] = patterns[m_segment>>4];
|
||||
m_digits[23] = patterns[m_segment&15];
|
||||
break;
|
||||
case 9:
|
||||
output().set_digit_value(30, patterns[m_segment>>4]);
|
||||
output().set_digit_value(31, patterns[m_segment&15]);
|
||||
m_digits[30] = patterns[m_segment>>4];
|
||||
m_digits[31] = patterns[m_segment&15];
|
||||
break;
|
||||
case 10:
|
||||
case 11:
|
||||
output().set_digit_value(32, patterns[m_segment>>4]);
|
||||
output().set_digit_value(33, patterns[m_segment&15]);
|
||||
m_digits[32] = patterns[m_segment>>4];
|
||||
m_digits[33] = patterns[m_segment&15];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -452,10 +455,10 @@ WRITE_LINE_MEMBER( play_1_state::clock_w )
|
||||
m_maincpu->int_w(BIT(m_clockcnt, 0)); // inverted
|
||||
m_maincpu->ef1_w(BIT(m_clockcnt, 1)); // inverted
|
||||
if (BIT(m_clockcnt, 1))
|
||||
output().set_digit_value(41, m_match);
|
||||
m_digits[41] = m_match;
|
||||
else
|
||||
{
|
||||
output().set_digit_value(43, m_match);
|
||||
m_digits[43] = m_match;
|
||||
output().set_value("led1", !BIT(m_ball, 1));
|
||||
output().set_value("led2", !BIT(m_ball, 2));
|
||||
output().set_value("led3", !BIT(m_ball, 3));
|
||||
|
@ -56,6 +56,7 @@ public:
|
||||
, m_1863(*this, "1863")
|
||||
, m_aysnd1(*this, "aysnd1")
|
||||
, m_keyboard(*this, "X.%u", 0)
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
DECLARE_WRITE8_MEMBER(port01_w);
|
||||
@ -94,12 +95,14 @@ private:
|
||||
uint8_t m_psg_latch;
|
||||
uint8_t m_port06;
|
||||
virtual void machine_reset() override;
|
||||
virtual void machine_start() override { m_digits.resolve(); }
|
||||
required_device<cosmac_device> m_maincpu;
|
||||
required_device<ttl7474_device> m_4013a;
|
||||
required_device<ttl7474_device> m_4013b;
|
||||
optional_device<cdp1863_device> m_1863;
|
||||
optional_device<ay8910_device> m_aysnd1;
|
||||
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++)
|
||||
if (BIT(m_kbdrow, j))
|
||||
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);
|
||||
}
|
||||
@ -395,7 +398,7 @@ MACHINE_CONFIG_START(play_2_state::play_2)
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
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_START(play_2_state::zira)
|
||||
|
@ -42,6 +42,7 @@ public:
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_cpu2(*this, "cpu2")
|
||||
, m_p_ram(*this, "ram")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
DECLARE_READ8_MEMBER(sound_r);
|
||||
@ -58,9 +59,11 @@ private:
|
||||
uint8_t m_sndcmd;
|
||||
uint8_t m_io[16];
|
||||
virtual void machine_reset() override;
|
||||
virtual void machine_start() override { m_digits.resolve(); }
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_cpu2;
|
||||
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;
|
||||
|
||||
uint8_t digit = m_out_offs << 1;
|
||||
output().set_digit_value(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]>>4];
|
||||
m_digits[++digit] = patterns[m_p_ram[m_out_offs++]&15];
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START(rowamet_state::rowamet)
|
||||
|
Loading…
Reference in New Issue
Block a user