(nw) output finder for speedbal,chesstrv,fireball

This commit is contained in:
Robbbert 2018-04-05 02:32:57 +10:00
parent fe7fa9c237
commit 3a7e5ed9f8
4 changed files with 55 additions and 51 deletions

View File

@ -20,10 +20,10 @@ class chesstrv_state : public driver_device
{
public:
chesstrv_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) ,
m_maincpu(*this, "maincpu") { }
virtual void machine_start() override;
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_READ8_MEMBER( ram_addr_r );
DECLARE_WRITE8_MEMBER( ram_addr_w );
@ -34,17 +34,20 @@ public:
DECLARE_READ8_MEMBER( keypad_r );
DECLARE_WRITE8_MEMBER( diplomat_display_w );
DECLARE_READ8_MEMBER( diplomat_keypad_r );
uint8_t m_ram_addr;
uint8_t *m_ram;
uint8_t m_matrix;
//TIMER_DEVICE_CALLBACK_MEMBER(borisdpl_timer_interrupt);
required_device<cpu_device> m_maincpu;
void chesstrv(machine_config &config);
void borisdpl(machine_config &config);
void borisdpl_io(address_map &map);
void chesstrv_io(address_map &map);
void chesstrv_mem(address_map &map);
private:
uint8_t m_ram_addr;
uint8_t *m_ram;
uint8_t m_matrix;
virtual void machine_start() override;
required_device<cpu_device> m_maincpu;
output_finder<8> m_digits;
};
WRITE8_MEMBER( chesstrv_state::ram_addr_w )
@ -72,13 +75,13 @@ WRITE8_MEMBER( chesstrv_state::display_w )
uint8_t seg_data = bitswap<8>(data,0,1,2,3,4,5,6,7);
if(!(m_matrix & 0x01))
output().set_digit_value( 3, seg_data );
m_digits[ 3 ] = seg_data;
if(!(m_matrix & 0x02))
output().set_digit_value( 2, seg_data );
m_digits[ 2 ] = seg_data;
if(!(m_matrix & 0x04))
output().set_digit_value( 1, seg_data );
m_digits[ 1 ] = seg_data;
if(!(m_matrix & 0x08))
output().set_digit_value( 0, seg_data );
m_digits[ 0 ] = seg_data;
}
WRITE8_MEMBER( chesstrv_state::matrix_w )
@ -104,7 +107,7 @@ READ8_MEMBER( chesstrv_state::keypad_r )
WRITE8_MEMBER( chesstrv_state::diplomat_display_w )
{
output().set_digit_value( m_matrix & 7, data ^ 0xff );
m_digits[m_matrix & 7] = data ^ 0xff;
}
READ8_MEMBER( chesstrv_state::diplomat_keypad_r )
@ -216,6 +219,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(chesstrv_state::borisdpl_timer_interrupt)
void chesstrv_state::machine_start()
{
m_digits.resolve();
m_ram = memregion("ram")->base();
save_item(NAME(m_ram_addr));

View File

@ -2,7 +2,7 @@
// copyright-holders:ANY
/***********************************************************************************
fireball.c
fireball.cpp
Mechanical game where you have a gun shooting rubber balls.
@ -48,20 +48,13 @@ class fireball_state : public driver_device
{
public:
fireball_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_ay(*this, "aysnd"),
m_eeprom(*this, "eeprom")
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_ay(*this, "aysnd")
, m_eeprom(*this, "eeprom")
, m_digits(*this, "digit%u", 0U)
{ }
uint8_t m_p1_data;
uint8_t m_p3_data;
uint8_t int_timing;
uint8_t int_data;
uint8_t ay_data;
uint8_t to_ay_data;
uint8_t m_display_data;
DECLARE_WRITE8_MEMBER(io_00_w);
DECLARE_READ8_MEMBER(io_00_r);
DECLARE_WRITE8_MEMBER(io_02_w);
@ -79,17 +72,21 @@ public:
void fireball(machine_config &config);
void fireball_io_map(address_map &map);
void fireball_map(address_map &map);
protected:
// devices
private:
uint8_t m_p1_data;
uint8_t m_p3_data;
uint8_t int_timing;
uint8_t int_data;
uint8_t ay_data;
uint8_t to_ay_data;
uint8_t m_display_data;
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
required_device<ay8912_device> m_ay;
required_device<eeprom_serial_x24c44_device> m_eeprom;
// driver_device overrides
virtual void machine_reset() override;
private:
output_finder<8> m_digits;
};
/****************************
@ -116,13 +113,13 @@ WRITE8_MEMBER(fireball_state::io_00_w)
switch (data&0x0f)
{
case 1: output().set_digit_value(2, m_display_data);
case 1: m_digits[2] = m_display_data;
break;
case 2: output().set_digit_value(1, m_display_data);
case 2: m_digits[1] = m_display_data;
break;
case 4: output().set_digit_value(4, m_display_data);
case 4: m_digits[4] = m_display_data;
break;
case 8: output().set_digit_value(3, m_display_data);
case 8: m_digits[3] = m_display_data;
break;
}
@ -201,7 +198,7 @@ WRITE8_MEMBER(fireball_state::io_06_w)
if (LOG_DISPLAY2)
logerror("On board display write %02X\n",uint8_t(~(data&0xff)));
output().set_digit_value(7, uint8_t(~(data&0xff)));
m_digits[7] = uint8_t(~(data&0xff));
}
@ -448,8 +445,8 @@ INPUT_PORTS_END
void fireball_state::machine_reset()
{
int_timing=1;
output().set_digit_value(5, 0x3f);
output().set_digit_value(6, 0x3f);
m_digits[5] = 0x3f;
m_digits[6] = 0x3f;
output().set_value("Hopper1", 0);
output().set_value("Hopper2", 0);

View File

@ -42,6 +42,7 @@ Interrupt frequency on audio CPU is not a periodical signal, but there are a lot
void speedbal_state::machine_start()
{
m_digits.resolve();
save_item(NAME(m_leds_start));
save_item(NAME(m_leds_shiftreg));
}
@ -101,9 +102,9 @@ WRITE8_MEMBER(speedbal_state::leds_output_block)
// The shift register is 28 bits, led block number is in the upper bits
// and the other 3 bytes in it go to each 7seg led of the current block.
int block = m_leds_shiftreg >> 24 & 7;
output().set_digit_value(10 * block + 0, ~m_leds_shiftreg >> 0 & 0xff);
output().set_digit_value(10 * block + 1, ~m_leds_shiftreg >> 8 & 0xff);
output().set_digit_value(10 * block + 2, ~m_leds_shiftreg >> 16 & 0xff);
m_digits[10 * block] = ~m_leds_shiftreg & 0xff;
m_digits[10 * block + 1] = ~m_leds_shiftreg >> 8 & 0xff;
m_digits[10 * block + 2] = ~m_leds_shiftreg >> 16 & 0xff;
}
WRITE8_MEMBER(speedbal_state::leds_start_block)

View File

@ -4,13 +4,14 @@ class speedbal_state : public driver_device
{
public:
speedbal_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_spriteram(*this, "spriteram"),
m_background_videoram(*this, "bg_videoram"),
m_foreground_videoram(*this, "fg_videoram")
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "palette")
, m_spriteram(*this, "spriteram")
, m_background_videoram(*this, "bg_videoram")
, m_foreground_videoram(*this, "fg_videoram")
, m_digits(*this, "digit%u", 0U)
{ }
required_device<cpu_device> m_maincpu;
@ -20,6 +21,7 @@ public:
required_shared_ptr<uint8_t> m_spriteram;
required_shared_ptr<uint8_t> m_background_videoram;
required_shared_ptr<uint8_t> m_foreground_videoram;
output_finder<73> m_digits;
bool m_leds_start;
uint32_t m_leds_shiftreg;