(nw) output finder for eacc,instruct,mk2,mkit09,sc1,sdk85,sdk86

This commit is contained in:
Robbbert 2018-03-29 00:25:36 +11:00
parent 0ec48c3f40
commit 25bddc881b
7 changed files with 57 additions and 60 deletions

View File

@ -59,10 +59,11 @@ class eacc_state : public driver_device
{
public:
eacc_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_pia(*this, "pia"),
m_p_nvram(*this, "nvram")
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_pia(*this, "pia")
, m_p_nvram(*this, "nvram")
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_READ_LINE_MEMBER( eacc_cb1_r );
@ -72,19 +73,21 @@ public:
DECLARE_WRITE_LINE_MEMBER( eacc_cb2_w );
DECLARE_WRITE8_MEMBER( eacc_digit_w );
DECLARE_WRITE8_MEMBER( eacc_segment_w );
bool m_cb1;
bool m_cb2;
bool m_nmi;
required_device<cpu_device> m_maincpu;
required_device<pia6821_device> m_pia;
required_shared_ptr<uint8_t> m_p_nvram;
virtual void machine_reset() override;
TIMER_DEVICE_CALLBACK_MEMBER(eacc_cb1);
TIMER_DEVICE_CALLBACK_MEMBER(eacc_nmi);
void eacc(machine_config &config);
void eacc_mem(address_map &map);
private:
uint8_t m_digit;
bool m_cb1;
bool m_cb2;
bool m_nmi;
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
required_device<pia6821_device> m_pia;
required_shared_ptr<uint8_t> m_p_nvram;
output_finder<7> m_digits;
};
@ -221,7 +224,7 @@ WRITE8_MEMBER( eacc_state::eacc_segment_w )
{
for (i = 3; i < 7; i++)
if (BIT(m_digit, i))
output().set_digit_value(i, bitswap<8>(data, 7, 0, 1, 4, 5, 6, 2, 3));
m_digits[i] = bitswap<8>(data, 7, 0, 1, 4, 5, 6, 2, 3);
}
}
}

View File

@ -63,6 +63,7 @@ public:
, m_p_smiram(*this, "smiram")
, m_p_extram(*this, "extram")
, m_cass(*this, "cassette")
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_READ8_MEMBER(port_r);
@ -83,6 +84,7 @@ public:
void mem_map(address_map &map);
private:
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
uint16_t m_lar;
uint8_t m_digit;
bool m_valid_digit;
@ -93,6 +95,7 @@ private:
required_shared_ptr<uint8_t> m_p_smiram;
required_shared_ptr<uint8_t> m_p_extram;
required_device<cassette_image_device> m_cass;
output_finder<129> m_digits;
};
// flag led
@ -127,7 +130,7 @@ WRITE8_MEMBER( instruct_state::portf8_w )
WRITE8_MEMBER( instruct_state::portf9_w )
{
if (m_valid_digit)
output().set_digit_value(m_digit, data);
m_digits[m_digit] = data;
m_valid_digit = false;
}

View File

@ -68,20 +68,23 @@ public:
, m_maincpu(*this, "maincpu")
, m_speaker(*this, "speaker")
, m_miot(*this, "miot")
, m_digits(*this, "digit%u", 0U)
{ }
required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
required_device<mos6530_device> m_miot;
DECLARE_READ8_MEMBER(mk2_read_a);
DECLARE_WRITE8_MEMBER(mk2_write_a);
DECLARE_READ8_MEMBER(mk2_read_b);
DECLARE_WRITE8_MEMBER(mk2_write_b);
uint8_t m_led[5];
virtual void machine_start() override;
TIMER_DEVICE_CALLBACK_MEMBER(update_leds);
void mk2(machine_config &config);
void mk2_mem(address_map &map);
private:
uint8_t m_led[5];
virtual void machine_start() override;
required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
required_device<mos6530_device> m_miot;
output_finder<6> m_digits;
};
@ -126,7 +129,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mk2_state::update_leds)
int i;
for (i=0; i<4; i++)
output().set_digit_value(i, m_led[i]);
m_digits[i] = m_led[i];
output().set_led_value(0, BIT(m_led[4], 3));
output().set_led_value(1, BIT(m_led[4], 5));
@ -138,6 +141,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mk2_state::update_leds)
void mk2_state::machine_start()
{
m_digits.resolve();
}
READ8_MEMBER( mk2_state::mk2_read_a )

View File

@ -49,6 +49,7 @@ public:
, m_pia(*this, "pia")
, m_cass(*this, "cassette")
, m_maincpu(*this, "maincpu")
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_READ8_MEMBER(pa_r);
@ -64,9 +65,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_pia;
required_device<cassette_image_device> m_cass;
required_device<cpu_device> m_maincpu;
output_finder<10> m_digits;
};
@ -175,7 +178,8 @@ WRITE8_MEMBER( mkit09_state::pa_w )
data ^= 0xff;
if (m_keydata > 3)
{
output().set_digit_value(m_keydata, bitswap<8>(data, 7, 0, 5, 6, 4, 2, 1, 3));
if (m_keydata < 10)
m_digits[m_keydata] = bitswap<8>(data, 7, 0, 5, 6, 4, 2, 1, 3);
m_keydata = 0;
}

View File

@ -2,37 +2,15 @@
// copyright-holders:Sandro Ronco
/***************************************************************************
Schachcomputer SC1
Schachcomputer SC1
12/05/2009 Skeleton driver.
2009-05-12 Skeleton driver.
ToDo:
- speaker
- LEDs
- 7seg sometimes flashes
Port 80-83 could be a device
This happens at the start:
'maincpu' (04EF): unmapped i/o memory write to 0081 = 0F & FF
'maincpu' (04F3): unmapped i/o memory write to 0083 = CF & FF
'maincpu' (04F7): unmapped i/o memory write to 0083 = BB & FF
'maincpu' (04FB): unmapped i/o memory write to 0082 = 01 & FF
'maincpu' (0523): unmapped i/o memory write to 00FC = 02 & FF **
'maincpu' (0523): unmapped i/o memory write to 00FC = 04 & FF **
** These two happen for a while (making a tone from a speaker?)
Then:
'maincpu' (0523): unmapped i/o memory write to 00FC = 00 & FF
'maincpu' (0075): unmapped i/o memory write to 0080 = 02 & FF
'maincpu' (0523): unmapped i/o memory write to 00FC = 20 & FF
Then this happens continuously:
Port 80 out - 00, 02, FF
Port FC out - 00, 01, 02, 04, 08, 10, 20, 40, 80 (selecting rows?)
Port 80 in - upper byte = 20 thru 26
Port 82 in - upper byte = 0 thru 7
****************************************************************************/
@ -52,19 +30,22 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_speaker(*this, "speaker")
, m_digits(*this, "digit%u", 0U)
{ }
required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
DECLARE_WRITE8_MEMBER( matrix_w );
DECLARE_WRITE8_MEMBER( pio_port_a_w );
DECLARE_READ8_MEMBER( pio_port_b_r );
uint8_t m_matrix;
void sc1(machine_config &config);
void sc1_io(address_map &map);
void sc1_mem(address_map &map);
private:
uint8_t m_matrix;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
output_finder<4> m_digits;
};
/***************************************************************************
@ -75,16 +56,16 @@ public:
WRITE8_MEMBER( sc1_state::pio_port_a_w )
{
uint8_t digit = bitswap<8>( data,3,4,6,0,1,2,7,5 );
uint8_t digit = bitswap<8>( data,3,4,6,0,1,2,7,5 ) & 0x7f;
if (m_matrix & 0x04)
output().set_digit_value(3, digit & 0x7f);
m_digits[3] = digit;
if (m_matrix & 0x08)
output().set_digit_value(2, digit & 0x7f);
m_digits[2] = digit;
if (m_matrix & 0x10)
output().set_digit_value(1, digit & 0x7f);
m_digits[1] = digit;
if (m_matrix & 0x20)
output().set_digit_value(0, digit & 0x7f);
m_digits[0] = digit;
}

View File

@ -52,23 +52,22 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_keyboard(*this, "X%u", 0)
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_WRITE8_MEMBER(scanlines_w);
DECLARE_WRITE8_MEMBER(digit_w);
DECLARE_READ8_MEMBER(kbd_r);
void sdk85(machine_config &config);
void sdk85_io(address_map &map);
void sdk85_mem(address_map &map);
protected:
virtual void machine_reset() override;
private:
u8 m_digit;
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
required_ioport_array<3> m_keyboard;
output_finder<6> m_digits;
};
void sdk85_state::machine_reset()
@ -138,7 +137,7 @@ WRITE8_MEMBER( sdk85_state::scanlines_w )
WRITE8_MEMBER( sdk85_state::digit_w )
{
if (m_digit < 6)
output().set_digit_value(m_digit, bitswap<8>(data, 3, 2, 1, 0, 7, 6, 5, 4)^0xff);
m_digits[m_digit] = bitswap<8>(~data, 3, 2, 1, 0, 7, 6, 5, 4);
}
READ8_MEMBER( sdk85_state::kbd_r )

View File

@ -45,6 +45,7 @@ public:
sdk86_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_digits(*this, "digit%u", 0U)
{ }
DECLARE_WRITE8_MEMBER(scanlines_w);
@ -56,7 +57,9 @@ public:
void sdk86_mem(address_map &map);
private:
uint8_t m_digit;
virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
output_finder<8> m_digits;
};
void sdk86_state::sdk86_mem(address_map &map)
@ -116,7 +119,7 @@ WRITE8_MEMBER( sdk86_state::scanlines_w )
WRITE8_MEMBER( sdk86_state::digit_w )
{
if (m_digit < 8)
output().set_digit_value(m_digit, data);
m_digits[m_digit] = data;
}
READ8_MEMBER( sdk86_state::kbd_r )