mirror of
https://github.com/holub/mame
synced 2025-05-31 01:51:46 +03:00
(nw) output finder for 24cdjuke,30test,allied,cvicny,datum,k1003,prodigy
This commit is contained in:
parent
c80846895b
commit
109691ca5c
@ -61,13 +61,14 @@ class midcoin24cdjuke_state : public driver_device
|
||||
{
|
||||
public:
|
||||
midcoin24cdjuke_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_io_row0(*this, "ROW0"),
|
||||
m_io_row1(*this, "ROW1"),
|
||||
m_io_row2(*this, "ROW2"),
|
||||
m_io_row3(*this, "ROW3"),
|
||||
m_charset(*this, "charset")
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_io_row0(*this, "ROW0")
|
||||
, m_io_row1(*this, "ROW1")
|
||||
, m_io_row2(*this, "ROW2")
|
||||
, m_io_row3(*this, "ROW3")
|
||||
, m_charset(*this, "charset")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
@ -76,6 +77,7 @@ public:
|
||||
required_ioport m_io_row2;
|
||||
required_ioport m_io_row3;
|
||||
required_region_ptr<uint16_t> m_charset;
|
||||
output_finder<16> m_digits;
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
@ -121,7 +123,7 @@ WRITE8_MEMBER(midcoin24cdjuke_state::digit_w)
|
||||
|
||||
char_data = bitswap<16>(char_data, 13,11,9,15,14,10,12,8,7,6,5,4,3,2,1,0);
|
||||
|
||||
output().set_digit_value(offset, char_data ^ 0xffff);
|
||||
m_digits[offset] = char_data ^ 0xffff;
|
||||
}
|
||||
|
||||
|
||||
@ -271,6 +273,7 @@ INPUT_PORTS_END
|
||||
|
||||
void midcoin24cdjuke_state::machine_start()
|
||||
{
|
||||
m_digits.resolve();
|
||||
}
|
||||
|
||||
void midcoin24cdjuke_state::machine_reset()
|
||||
|
@ -56,9 +56,11 @@ class namco_30test_state : public driver_device
|
||||
{
|
||||
public:
|
||||
namco_30test_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_oki(*this, "oki") { }
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_oki(*this, "oki")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
uint8_t m_mux_data;
|
||||
uint8_t m_oki_bank;
|
||||
@ -77,6 +79,7 @@ public:
|
||||
void _30test(machine_config &config);
|
||||
void namco_30test_io(address_map &map);
|
||||
void namco_30test_map(address_map &map);
|
||||
output_finder<72> m_digits;
|
||||
};
|
||||
|
||||
|
||||
@ -85,14 +88,17 @@ static const uint8_t led_map[16] =
|
||||
|
||||
WRITE8_MEMBER(namco_30test_state::namco_30test_led_w)
|
||||
{
|
||||
output().set_digit_value(0 + offset * 2, led_map[(data & 0xf0) >> 4]);
|
||||
output().set_digit_value(1 + offset * 2, led_map[(data & 0x0f) >> 0]);
|
||||
m_digits[offset * 2] = led_map[data >> 4];
|
||||
m_digits[1 + offset * 2] = led_map[data & 0x0f];
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(namco_30test_state::namco_30test_led_rank_w)
|
||||
{
|
||||
output().set_digit_value(64 + offset * 2, led_map[(data & 0xf0) >> 4]);
|
||||
output().set_digit_value(65 + offset * 2, led_map[(data & 0x0f) >> 0]);
|
||||
if (offset < 4)
|
||||
{
|
||||
m_digits[64 + offset * 2] = led_map[data >> 4];
|
||||
m_digits[65 + offset * 2] = led_map[data & 0x0f];
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(namco_30test_state::namco_30test_lamps_w)
|
||||
@ -233,6 +239,7 @@ INPUT_PORTS_END
|
||||
|
||||
void namco_30test_state::machine_start()
|
||||
{
|
||||
m_digits.resolve();
|
||||
save_item(NAME(m_mux_data));
|
||||
save_item(NAME(m_oki_bank));
|
||||
}
|
||||
|
@ -27,6 +27,7 @@
|
||||
For some reason the 'rol $46' instruction outputs the original data
|
||||
followed by the new result, so I've had to employ a horrible hack.
|
||||
|
||||
Hold down X while inserting a coin.
|
||||
At the start of each ball, the display will be flashing. You need to
|
||||
hit Z, and then you can get a score. When the ball indicator goes out,
|
||||
your game is over.
|
||||
@ -63,6 +64,7 @@ public:
|
||||
, m_ic6(*this, "ic6")
|
||||
, m_ic7(*this, "ic7")
|
||||
, m_ic8(*this, "ic8")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
DECLARE_WRITE8_MEMBER(ic1_b_w);
|
||||
@ -99,6 +101,7 @@ private:
|
||||
uint8_t m_ic6b4;
|
||||
uint8_t m_ic6b7;
|
||||
virtual void machine_reset() override;
|
||||
virtual void machine_start() override { m_digits.resolve(); }
|
||||
required_device<m6504_device> m_maincpu;
|
||||
required_device<pia6821_device> m_ic1;
|
||||
required_device<pia6821_device> m_ic2;
|
||||
@ -107,6 +110,7 @@ private:
|
||||
required_device<mos6530_device> m_ic6;
|
||||
required_device<pia6821_device> m_ic7;
|
||||
required_device<pia6821_device> m_ic8;
|
||||
output_finder<42> m_digits;
|
||||
};
|
||||
|
||||
|
||||
@ -413,34 +417,34 @@ WRITE8_MEMBER( allied_state::ic4_b_w )
|
||||
{
|
||||
if (!BIT(data, i+4))
|
||||
{
|
||||
output().set_digit_value(i*10, patterns[0]);
|
||||
m_digits[i*10] = patterns[0];
|
||||
segment = (m_player_score[i] >> 0) & 15;
|
||||
output().set_digit_value(i*10+1, patterns[segment]);
|
||||
m_digits[i*10+1] = patterns[segment];
|
||||
segment = (m_player_score[i] >> 4) & 15;
|
||||
output().set_digit_value(i*10+2, patterns[segment]);
|
||||
m_digits[i*10+2] = patterns[segment];
|
||||
segment = (m_player_score[i] >> 8) & 15;
|
||||
output().set_digit_value(i*10+3, patterns[segment]);
|
||||
m_digits[i*10+3] = patterns[segment];
|
||||
segment = (m_player_score[i] >> 12) & 15;
|
||||
output().set_digit_value(i*10+4, patterns[segment]);
|
||||
m_digits[i*10+4] = patterns[segment];
|
||||
segment = (m_player_score[i] >> 16) & 15;
|
||||
output().set_digit_value(i*10+5, patterns[segment]);
|
||||
m_digits[i*10+5] = patterns[segment];
|
||||
}
|
||||
else
|
||||
{
|
||||
output().set_digit_value(i*10, 0);
|
||||
output().set_digit_value(i*10+1, 0);
|
||||
output().set_digit_value(i*10+2, 0);
|
||||
output().set_digit_value(i*10+3, 0);
|
||||
output().set_digit_value(i*10+4, 0);
|
||||
output().set_digit_value(i*10+5, 0);
|
||||
m_digits[i*10] = 0;
|
||||
m_digits[i*10+1] = 0;
|
||||
m_digits[i*10+2] = 0;
|
||||
m_digits[i*10+3] = 0;
|
||||
m_digits[i*10+4] = 0;
|
||||
m_digits[i*10+5] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// doesn't seem to be a strobe for the credits display
|
||||
segment = (m_player_score[4] >> 0) & 15;
|
||||
output().set_digit_value(40, patterns[segment]);
|
||||
m_digits[40] = patterns[segment];
|
||||
segment = (m_player_score[4] >> 4) & 15;
|
||||
output().set_digit_value(41, patterns[segment]);
|
||||
m_digits[41] = patterns[segment];
|
||||
|
||||
// PB0-3 - player 1-4 LED - to do
|
||||
}
|
||||
|
@ -40,25 +40,29 @@ class cvicny_state : public driver_device
|
||||
{
|
||||
public:
|
||||
cvicny_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_digit_last(0)
|
||||
{ }
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_digit_last(0)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
void cvicny(machine_config &config);
|
||||
void cvicny_mem(address_map &map);
|
||||
DECLARE_READ8_MEMBER(key_r);
|
||||
DECLARE_WRITE8_MEMBER(digit_w);
|
||||
DECLARE_WRITE8_MEMBER(segment_w );
|
||||
private:
|
||||
uint8_t m_digit;
|
||||
uint8_t m_digit_last;
|
||||
void cvicny(machine_config &config);
|
||||
void cvicny_mem(address_map &map);
|
||||
virtual void machine_start() override { m_digits.resolve(); }
|
||||
required_device<cpu_device> m_maincpu;
|
||||
output_finder<8> m_digits;
|
||||
};
|
||||
|
||||
WRITE8_MEMBER( cvicny_state::segment_w ) // output segments on the selected digit
|
||||
{
|
||||
if (m_digit != m_digit_last)
|
||||
output().set_digit_value(m_digit, data);
|
||||
m_digits[m_digit] = data;
|
||||
|
||||
m_digit_last = m_digit;
|
||||
}
|
||||
|
@ -63,6 +63,7 @@ public:
|
||||
, m_pia1(*this, "pia1")
|
||||
, m_keyboard(*this, "X%u", 0)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
DECLARE_READ8_MEMBER(pa_r);
|
||||
@ -75,9 +76,11 @@ public:
|
||||
private:
|
||||
uint8_t m_keydata;
|
||||
virtual void machine_reset() override;
|
||||
virtual void machine_start() override { m_digits.resolve(); }
|
||||
required_device<pia6821_device> m_pia1;
|
||||
required_ioport_array<4> m_keyboard;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
output_finder<16> m_digits;
|
||||
};
|
||||
|
||||
|
||||
@ -164,7 +167,7 @@ WRITE8_MEMBER( datum_state::pa_w )
|
||||
data ^= 0xff;
|
||||
if (m_keydata > 3)
|
||||
{
|
||||
output().set_digit_value(m_keydata, bitswap<8>(data & 0x7f, 7, 0, 5, 6, 4, 2, 1, 3));
|
||||
m_digits[m_keydata] = bitswap<8>(data & 0x7f, 7, 0, 5, 6, 4, 2, 1, 3);
|
||||
m_keydata = 0;
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,9 @@ class k1003_state : public driver_device
|
||||
public:
|
||||
k1003_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu") { }
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
DECLARE_READ8_MEMBER(port2_r);
|
||||
DECLARE_READ8_MEMBER(key_r);
|
||||
@ -67,7 +69,9 @@ private:
|
||||
uint8_t m_disp_2;
|
||||
uint8_t bit_to_dec(uint8_t val);
|
||||
virtual void machine_reset() override;
|
||||
virtual void machine_start() override { m_digits.resolve(); }
|
||||
required_device<cpu_device> m_maincpu;
|
||||
output_finder<16> m_digits;
|
||||
};
|
||||
|
||||
|
||||
@ -117,8 +121,8 @@ uint8_t k1003_state::bit_to_dec(uint8_t val)
|
||||
|
||||
WRITE8_MEMBER( k1003_state::disp_w )
|
||||
{
|
||||
output().set_digit_value(bit_to_dec(data)*2, m_disp_1);
|
||||
output().set_digit_value(bit_to_dec(data)*2+1, m_disp_2);
|
||||
m_digits[bit_to_dec(data)*2] = m_disp_1;
|
||||
m_digits[bit_to_dec(data)*2+1] = m_disp_2;
|
||||
}
|
||||
|
||||
void k1003_state::k1003_io(address_map &map)
|
||||
|
@ -137,6 +137,7 @@ public:
|
||||
, m_cb2(*this, "bcd:cb2")
|
||||
, m_digit(0.0)
|
||||
, m_io_line(*this, "LINE%u", 0)
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
#if HTTPUI
|
||||
, m_connection(NULL)
|
||||
, m_web_line0(0)
|
||||
@ -180,6 +181,7 @@ private:
|
||||
|
||||
virtual void device_start() override;
|
||||
required_ioport_array<5> m_io_line;
|
||||
output_finder<4> m_digits;
|
||||
uint16_t m_line[5];
|
||||
|
||||
#if HTTPUI
|
||||
@ -212,6 +214,7 @@ NETDEV_LOGIC_CALLBACK_MEMBER(prodigy_state::bcd_bit7_cb) { if (data != 0) m_digi
|
||||
|
||||
void prodigy_state::device_start()
|
||||
{
|
||||
m_digits.resolve();
|
||||
memset(m_line, 0, sizeof(m_line));
|
||||
#if HTTPUI
|
||||
m_server = machine().manager().http();
|
||||
@ -554,22 +557,27 @@ void prodigy_state::update_bcd()
|
||||
LOGBCD(" - segments: %02x -> ", m_digit);
|
||||
m_segments = m_digit;
|
||||
LOGBCD("%02x\n", m_segments);
|
||||
if (m_digit_cache[digit_nbr] != m_segments)
|
||||
|
||||
if (digit_nbr < 4)
|
||||
{
|
||||
output().set_digit_value( digit_nbr, m_segments);
|
||||
m_digit_cache[digit_nbr] = m_segments;
|
||||
if (m_digit_cache[digit_nbr] != m_segments)
|
||||
{
|
||||
m_digits[digit_nbr] = m_segments;
|
||||
m_digit_cache[digit_nbr] = m_segments;
|
||||
#if HTTPUI
|
||||
update_web_bcd(digit_nbr, m_segments);
|
||||
update_web_bcd(digit_nbr, m_segments);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ADDRESS_MAP_START(prodigy_state::maincpu_map)
|
||||
AM_RANGE(0x0000, 0x07ff) AM_RAM
|
||||
AM_RANGE(0x2000, 0x200f) AM_DEVREADWRITE("via", via6522_device, read, write)
|
||||
AM_RANGE(0x6000, 0x7fff) AM_ROM AM_REGION("roms", 0x0000) AM_MIRROR(0x8000)
|
||||
ADDRESS_MAP_END
|
||||
void prodigy_state::maincpu_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x07ff).ram();
|
||||
map(0x2000, 0x200f).rw("via", FUNC(via6522_device::read),FUNC(via6522_device::write));
|
||||
map(0x6000, 0x7fff).rom().region("roms", 0).mirror(0x8000);
|
||||
}
|
||||
|
||||
/*
|
||||
* The keypad was modelled after the physical appearance but altered after finding out how it was working so
|
||||
|
Loading…
Reference in New Issue
Block a user