small cleanup, and start removing set_digit_value - this function does slow string formatting and hashing in the critical path - consider it deprecated (nw)

This commit is contained in:
Vas Crabb 2018-02-28 11:20:34 +11:00
parent 58a60f12ff
commit 81fa412066
8 changed files with 178 additions and 156 deletions

View File

@ -44,6 +44,10 @@ public:
, m_dac1(*this, "dac1")
{ }
void atari_s2(machine_config &config);
void atari_s3(machine_config &config);
protected:
DECLARE_WRITE8_MEMBER(sound0_w);
DECLARE_WRITE8_MEMBER(sound1_w);
DECLARE_WRITE8_MEMBER(lamp_w) { };
@ -53,10 +57,10 @@ public:
DECLARE_WRITE8_MEMBER(display_w);
TIMER_DEVICE_CALLBACK_MEMBER(irq);
TIMER_DEVICE_CALLBACK_MEMBER(timer_s);
void atari_s2(machine_config &config);
void atari_s3(machine_config &config);
void atari_s2_map(address_map &map);
void atari_s3_map(address_map &map);
private:
bool m_timer_sb;
uint8_t m_timer_s[5];
@ -354,9 +358,11 @@ WRITE8_MEMBER( atari_s2_state::sol0_w )
WRITE8_MEMBER( atari_s2_state::display_w )
{
static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511
if (offset<7)
static constexpr uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511
if (offset < 7)
{
m_segment[offset] = patterns[data&15];
}
else
{
data &= 7;

View File

@ -4,7 +4,7 @@
Babbage-2nd skeleton driver (19/OCT/2011)
http://homepage3.nifty.com/takeda-toshiya/babbage/index.html
http://takeda-toshiya.my.coocan.jp/babbage/index.html
Pasting:
0-F : as is
@ -44,6 +44,9 @@ public:
, m_keyboard(*this, "X%u", 0)
{ }
void babbage(machine_config &config);
protected:
DECLARE_READ8_MEMBER(pio2_a_r);
DECLARE_WRITE8_MEMBER(pio1_b_w);
DECLARE_WRITE8_MEMBER(pio2_b_w);
@ -52,9 +55,9 @@ public:
DECLARE_WRITE_LINE_MEMBER(ctc_z2_w);
TIMER_DEVICE_CALLBACK_MEMBER(keyboard_callback);
void babbage(machine_config &config);
void babbage_io(address_map &map);
void babbage_map(address_map &map);
private:
uint8_t m_segment;
uint8_t m_key;
@ -164,15 +167,18 @@ READ8_MEMBER( babbage_state::pio2_a_r )
WRITE8_MEMBER( babbage_state::pio2_b_w )
{
if (BIT(data, 7))
{
m_step = false;
else
if (!m_step)
}
else if (!m_step)
{
m_segment = data;
m_step = true;
}
else
{
output().set_digit_value(data, m_segment);
}
}
static const z80_daisy_config babbage_daisy_chain[] =

View File

@ -52,36 +52,40 @@
class beta_state : public driver_device
{
public:
beta_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
beta_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, M6502_TAG),
m_speaker(*this, "speaker"),
m_eprom(*this, EPROM_TAG),
m_q6(*this, "Q6"),
m_q7(*this, "Q7"),
m_q8(*this, "Q8"),
m_q9(*this, "Q9")
m_q(*this, "Q%u", 6U),
m_digit(*this, "digit%u", 0U)
{ }
required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
required_device<generic_slot_device> m_eprom;
required_ioport m_q6;
required_ioport m_q7;
required_ioport m_q8;
required_ioport m_q9;
DECLARE_INPUT_CHANGED_MEMBER( trigger_reset );
void beta(machine_config &config);
protected:
virtual void machine_start() override;
DECLARE_READ8_MEMBER( riot_pa_r );
DECLARE_WRITE8_MEMBER( riot_pa_w );
DECLARE_READ8_MEMBER( riot_pb_r );
DECLARE_WRITE8_MEMBER( riot_pb_w );
DECLARE_INPUT_CHANGED_MEMBER( trigger_reset );
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( beta_eprom );
DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( beta_eprom );
TIMER_CALLBACK_MEMBER(led_refresh);
void beta_mem(address_map &map);
private:
required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
required_device<generic_slot_device> m_eprom;
required_ioport_array<4> m_q;
output_finder<6> m_digit;
/* EPROM state */
int m_eprom_oe;
int m_eprom_ce;
@ -95,9 +99,6 @@ public:
uint8_t m_segment;
emu_timer *m_led_refresh_timer;
TIMER_CALLBACK_MEMBER(led_refresh);
void beta(machine_config &config);
void beta_mem(address_map &map);
};
@ -158,9 +159,7 @@ INPUT_PORTS_END
TIMER_CALLBACK_MEMBER(beta_state::led_refresh)
{
if (m_ls145_p < 6)
{
output().set_digit_value(m_ls145_p, m_segment);
}
m_digit[m_ls145_p] = m_segment;
}
READ8_MEMBER( beta_state::riot_pa_r )
@ -184,10 +183,12 @@ READ8_MEMBER( beta_state::riot_pa_r )
switch (m_ls145_p)
{
case 6: data &= m_q6->read(); break;
case 7: data &= m_q7->read(); break;
case 8: data &= m_q8->read(); break;
case 9: data &= m_q9->read(); break;
case 6:
case 7:
case 8:
case 9:
data &= m_q[m_ls145_p - 6]->read();
break;
default:
if (!m_eprom_oe && !m_eprom_ce)
{
@ -312,6 +313,8 @@ DEVICE_IMAGE_UNLOAD_MEMBER( beta_state, beta_eprom )
void beta_state::machine_start()
{
m_digit.resolve();
m_led_refresh_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(beta_state::led_refresh),this));
m_eprom_rom.resize(0x800);

View File

@ -45,39 +45,52 @@ public:
, m_displatch(*this, "displatch%u", 1)
, m_rs232(*this, "rs232")
, m_cass(*this, "cassette")
, m_x(*this, "X%u", 0U)
, m_digit(*this, "digit%u", 1U)
{ }
DECLARE_WRITE_LINE_MEMBER(reset_key_w);
DECLARE_WRITE_LINE_MEMBER(segment_test_w);
void et3400(machine_config &config);
protected:
virtual void machine_start() override;
DECLARE_READ8_MEMBER(keypad_r);
DECLARE_WRITE8_MEMBER(display_w);
template<int digit> DECLARE_WRITE8_MEMBER(led_w);
template <int Digit> DECLARE_WRITE8_MEMBER(led_w);
DECLARE_READ8_MEMBER(pia_ar);
DECLARE_WRITE8_MEMBER(pia_aw);
DECLARE_READ8_MEMBER(pia_br);
DECLARE_WRITE8_MEMBER(pia_bw);
DECLARE_WRITE_LINE_MEMBER(reset_key_w);
DECLARE_WRITE_LINE_MEMBER(segment_test_w);
void et3400(machine_config &config);
void mem_map(address_map &map);
private:
required_device<cpu_device> m_maincpu;
required_device<pia6821_device> m_pia;
required_device_array<ls259_device, 6> m_displatch;
required_device<rs232_port_device> m_rs232;
required_device<cassette_image_device> m_cass;
required_ioport_array<3> m_x;
output_finder<6> m_digit;
};
void et3400_state::machine_start()
{
m_digit.resolve();
}
READ8_MEMBER(et3400_state::keypad_r)
{
uint8_t data = 0xff;
if (~offset & 4)
data &= ioport("X2")->read();
if (~offset & 2)
data &= ioport("X1")->read();
if (~offset & 1)
data &= ioport("X0")->read();
if (~offset & 4) data &= m_x[2]->read();
if (~offset & 2) data &= m_x[1]->read();
if (~offset & 1) data &= m_x[0]->read();
return data;
}
@ -90,12 +103,11 @@ WRITE8_MEMBER(et3400_state::display_w)
m_displatch[digit - 1]->write_bit(offset & 7, !BIT(data, 0));
}
template<int digit>
template <int Digit>
WRITE8_MEMBER(et3400_state::led_w)
{
/* This computer sets each segment, one at a time. */
uint8_t segdata = bitswap<8>(~data, 7, 0, 1, 2, 3, 4, 5, 6);
output().set_digit_value(digit, segdata);
// This computer sets each segment, one at a time.
m_digit[Digit - 1] = bitswap<8>(~data, 7, 0, 1, 2, 3, 4, 5, 6);
}
// d1,2,3 = Baud rate

View File

@ -32,6 +32,7 @@ class hankin_state : public genpin_class
public:
hankin_state(const machine_config &mconfig, device_type type, const char *tag)
: genpin_class(mconfig, type, tag)
, m_p_prom(*this, "prom")
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_ic10(*this, "ic10")
@ -39,16 +40,14 @@ public:
, m_ic2(*this, "ic2")
, m_dac(*this, "dac")
, m_io_test(*this, "TEST")
, m_io_dsw0(*this, "DSW0")
, m_io_dsw1(*this, "DSW1")
, m_io_dsw2(*this, "DSW2")
, m_io_x0(*this, "X0")
, m_io_x1(*this, "X1")
, m_io_x2(*this, "X2")
, m_io_x3(*this, "X3")
, m_io_x4(*this, "X4")
, m_io_x(*this, { "X0", "X1", "X2", "X3", "X4", "DSW0", "DSW1", "DSW2" })
, m_display(*this, "digit%u%u", 0U, 0U)
{ }
DECLARE_INPUT_CHANGED_MEMBER(self_test);
void hankin(machine_config &config);
protected:
DECLARE_WRITE_LINE_MEMBER(ic10_ca2_w);
DECLARE_WRITE_LINE_MEMBER(ic10_cb2_w);
DECLARE_WRITE_LINE_MEMBER(ic11_ca2_w);
@ -62,12 +61,15 @@ public:
DECLARE_WRITE8_MEMBER(ic2_a_w);
DECLARE_READ8_MEMBER(ic11_b_r);
DECLARE_READ8_MEMBER(ic2_a_r);
DECLARE_INPUT_CHANGED_MEMBER(self_test);
TIMER_DEVICE_CALLBACK_MEMBER(timer_s);
TIMER_DEVICE_CALLBACK_MEMBER(timer_x);
void hankin(machine_config &config);
virtual void machine_start() override;
virtual void machine_reset() override;
void hankin_map(address_map &map);
void hankin_sub_map(address_map &map);
private:
bool m_timer_x;
bool m_timer_sb;
@ -85,8 +87,8 @@ private:
uint8_t m_counter;
uint8_t m_digit;
uint8_t m_segment[5];
uint8_t *m_p_prom;
virtual void machine_reset() override;
required_region_ptr<uint8_t> m_p_prom;
required_device<m6802_cpu_device> m_maincpu;
required_device<m6802_cpu_device> m_audiocpu;
required_device<pia6821_device> m_ic10;
@ -94,14 +96,8 @@ private:
required_device<pia6821_device> m_ic2;
required_device<dac_4bit_r2r_device> m_dac;
required_ioport m_io_test;
required_ioport m_io_dsw0;
required_ioport m_io_dsw1;
required_ioport m_io_dsw2;
required_ioport m_io_x0;
required_ioport m_io_x1;
required_ioport m_io_x2;
required_ioport m_io_x3;
required_ioport m_io_x4;
required_ioport_array<8> m_io_x;
output_finder<5, 6> m_display;
};
@ -111,14 +107,14 @@ ADDRESS_MAP_START(hankin_state::hankin_map)
AM_RANGE(0x0088, 0x008b) AM_DEVREADWRITE("ic11", pia6821_device, read, write)
AM_RANGE(0x0090, 0x0093) AM_DEVREADWRITE("ic10", pia6821_device, read, write)
AM_RANGE(0x0200, 0x02ff) AM_RAM AM_SHARE("nvram") // 5101L 4-bit static ram
AM_RANGE(0x1000, 0x1fff) AM_ROM AM_REGION("roms", 0)
AM_RANGE(0x1000, 0x1fff) AM_ROM AM_REGION("maincpu", 0)
ADDRESS_MAP_END
ADDRESS_MAP_START(hankin_state::hankin_sub_map)
ADDRESS_MAP_GLOBAL_MASK(0x1fff)
AM_RANGE(0x0000, 0x007f) AM_RAM // internal to the cpu
AM_RANGE(0x0080, 0x0083) AM_DEVREADWRITE("ic2", pia6821_device, read, write)
AM_RANGE(0x1000, 0x17ff) AM_ROM AM_MIRROR(0x800) AM_REGION("roms", 0x1000)
AM_RANGE(0x1000, 0x17ff) AM_ROM AM_MIRROR(0x800) AM_REGION("audiocpu", 0)
ADDRESS_MAP_END
static INPUT_PORTS_START( hankin )
@ -281,14 +277,9 @@ WRITE8_MEMBER( hankin_state::ic10_a_w )
// use is to place the '1' digit in the centre segments.
if (BIT(data, 0) && (m_counter > 8))
{
static const uint8_t patterns[16] = { 0x3f,0x80,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543 with '1' adjusted
uint16_t i, seg1, seg2;
for (i = 0; i < 5; i++)
{
seg1 = patterns[m_segment[i]];
seg2 = bitswap<16>(seg1, 8, 8, 8, 8, 8, 8, 7, 7, 6, 6, 5, 4, 3, 2, 1, 0);
output().set_digit_value(i*10+m_digit, seg2);
}
static constexpr uint8_t patterns[16] = { 0x3f,0x80,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0,0,0,0,0 }; // MC14543 with '1' adjusted
for (unsigned i = 0U; i < 5U; ++i)
m_display[i][m_digit] = bitswap<10>(uint16_t(patterns[m_segment[i]]), 7, 7, 6, 6, 5, 4, 3, 2, 1, 0);
}
}
}
@ -363,29 +354,11 @@ READ8_MEMBER( hankin_state::ic11_b_r )
{
uint8_t data = 0;
if (BIT(m_ic11a, 0))
data |= m_io_x0->read();
if (BIT(m_ic11a, 1))
data |= m_io_x1->read();
if (BIT(m_ic11a, 2))
data |= m_io_x2->read();
if (BIT(m_ic11a, 3))
data |= m_io_x3->read();
if (BIT(m_ic11a, 4))
data |= m_io_x4->read();
if (BIT(m_ic11a, 5))
data |= m_io_dsw0->read();
if (BIT(m_ic11a, 6))
data |= m_io_dsw1->read();
if (BIT(m_ic11a, 7))
data |= m_io_dsw2->read();
for (unsigned i = 0U; i < 8U; ++i)
{
if (BIT(m_ic11a, i))
data |= m_io_x[i]->read();
}
return data;
}
@ -445,9 +418,13 @@ TIMER_DEVICE_CALLBACK_MEMBER( hankin_state::timer_s )
}
}
void hankin_state::machine_start()
{
m_display.resolve();
}
void hankin_state::machine_reset()
{
m_p_prom = memregion("roms")->base() + 0x1800;
m_vol = 0;
m_dac->set_output_gain(0, 0);
}
@ -554,55 +531,75 @@ MACHINE_CONFIG_END
/ FJ Holden
/-------------------------------*/
ROM_START(fjholden)
ROM_REGION(0x1a00, "roms", 0)
ROM_REGION(0x1000, "maincpu", 0)
ROM_LOAD("fj_ic2.mpu", 0x0000, 0x0800, CRC(b47bc2c7) SHA1(42c985d83a9454fcd08b87e572e5563ebea0d052))
ROM_LOAD("fj_ic3.mpu", 0x0800, 0x0800, CRC(ceaeb7d3) SHA1(9e479b985f8500983e71d6ff33ee94160e99650d))
ROM_LOAD("fj_ic14.snd", 0x1000, 0x0800, CRC(34fe3587) SHA1(132714675a23c101ceb5a4d544818650ae5ccea2))
ROM_LOAD("fj_ic3.snd", 0x1800, 0x0200, CRC(09d3f020) SHA1(274be0b94d341ee43357011691da82e83a7c4a00))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_LOAD("fj_ic14.snd", 0x0000, 0x0800, CRC(34fe3587) SHA1(132714675a23c101ceb5a4d544818650ae5ccea2))
ROM_REGION(0x0200, "prom", 0)
ROM_LOAD("fj_ic3.snd", 0x0000, 0x0200, CRC(09d3f020) SHA1(274be0b94d341ee43357011691da82e83a7c4a00))
ROM_END
/*--------------------------------
/ Howzat!
/-------------------------------*/
ROM_START(howzat)
ROM_REGION(0x1a00, "roms", 0)
ROM_REGION(0x1000, "maincpu", 0)
ROM_LOAD("hz_ic2.mpu", 0x0000, 0x0800, CRC(b47bc2c7) SHA1(42c985d83a9454fcd08b87e572e5563ebea0d052))
ROM_LOAD("hz_ic3.mpu", 0x0800, 0x0800, CRC(d13df4bc) SHA1(27a70260698d3eaa7cf7a56edc5dd9a4af3f4103))
ROM_LOAD("hz_ic14.snd", 0x1000, 0x0800, CRC(0e3fdb59) SHA1(cae3c85b2c32a0889785f770ece66b959bcf21e1))
ROM_LOAD("hz_ic3.snd", 0x1800, 0x0200, CRC(dfc57606) SHA1(638853c8e46bf461f2ecde02b8b2aa68c2d414b8))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_LOAD("hz_ic14.snd", 0x0000, 0x0800, CRC(0e3fdb59) SHA1(cae3c85b2c32a0889785f770ece66b959bcf21e1))
ROM_REGION(0x0200, "prom", 0)
ROM_LOAD("hz_ic3.snd", 0x0000, 0x0200, CRC(dfc57606) SHA1(638853c8e46bf461f2ecde02b8b2aa68c2d414b8))
ROM_END
/*--------------------------------
/ Orbit 1
/-------------------------------*/
ROM_START(orbit1)
ROM_REGION(0x1a00, "roms", 0)
ROM_REGION(0x1000, "maincpu", 0)
ROM_LOAD("o1_ic2.mpu", 0x0000, 0x0800, CRC(b47bc2c7) SHA1(42c985d83a9454fcd08b87e572e5563ebea0d052))
ROM_LOAD("o1_ic3.mpu", 0x0800, 0x0800, CRC(fe7b61be) SHA1(c086b0433bb9ab3f2139c705d4372beb1656b27f))
ROM_LOAD("o1_ic14.snd", 0x1000, 0x0800, CRC(323bfbd5) SHA1(2e89aa4fcd33f9bfeea5c310ffb0a5be45fb70a9))
ROM_LOAD("o1_ic3.snd", 0x1800, 0x0200, CRC(dfc57606) SHA1(638853c8e46bf461f2ecde02b8b2aa68c2d414b8))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_LOAD("o1_ic14.snd", 0x0000, 0x0800, CRC(323bfbd5) SHA1(2e89aa4fcd33f9bfeea5c310ffb0a5be45fb70a9))
ROM_REGION(0x0200, "prom", 0)
ROM_LOAD("o1_ic3.snd", 0x0000, 0x0200, CRC(dfc57606) SHA1(638853c8e46bf461f2ecde02b8b2aa68c2d414b8))
ROM_END
/*--------------------------------
/ Shark
/-------------------------------*/
ROM_START(shark)
ROM_REGION(0x1a00, "roms", 0)
ROM_REGION(0x1000, "maincpu", 0)
ROM_LOAD("shk_ic2.mpu", 0x0000, 0x0800, CRC(b47bc2c7) SHA1(42c985d83a9454fcd08b87e572e5563ebea0d052))
ROM_LOAD("shk_ic3.mpu", 0x0800, 0x0800, CRC(c3ef936c) SHA1(14668496d162a77e03c1142bef2956d5b76afc99))
ROM_LOAD("shk_ic14.snd", 0x1000, 0x0800, CRC(8f8b0e48) SHA1(72d94aa9b32c603b1ca681b0ab3bf8ddbf5c9afe))
ROM_LOAD("shk_ic3.snd", 0x1800, 0x0200, CRC(dfc57606) SHA1(638853c8e46bf461f2ecde02b8b2aa68c2d414b8))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_LOAD("shk_ic14.snd", 0x0000, 0x0800, CRC(8f8b0e48) SHA1(72d94aa9b32c603b1ca681b0ab3bf8ddbf5c9afe))
ROM_REGION(0x0200, "prom", 0)
ROM_LOAD("shk_ic3.snd", 0x0000, 0x0200, CRC(dfc57606) SHA1(638853c8e46bf461f2ecde02b8b2aa68c2d414b8))
ROM_END
/*--------------------------------
/ The Empire Strike Back
/-------------------------------*/
ROM_START(empsback)
ROM_REGION(0x1a00, "roms", 0)
ROM_REGION(0x1000, "maincpu", 0)
ROM_LOAD("sw_ic2.mpu", 0x0000, 0x0800, CRC(b47bc2c7) SHA1(42c985d83a9454fcd08b87e572e5563ebea0d052))
ROM_LOAD("sw_ic3.mpu", 0x0800, 0x0800, CRC(837ffe32) SHA1(9affc5d9345ce15394553d3204e5234cc6348d2e))
ROM_LOAD("sw_ic14.snd", 0x1000, 0x0800, CRC(c1eeb53b) SHA1(7a800dd0a8ae392e14639e1819198d4215cc2251))
ROM_LOAD("sw_ic3.snd", 0x1800, 0x0200, CRC(db214f65) SHA1(1a499cf2059a5c0d860d5a4251a89a5735937ef8))
ROM_REGION(0x0800, "audiocpu", 0)
ROM_LOAD("sw_ic14.snd", 0x0000, 0x0800, CRC(c1eeb53b) SHA1(7a800dd0a8ae392e14639e1819198d4215cc2251))
ROM_REGION(0x0200, "prom", 0)
ROM_LOAD("sw_ic3.snd", 0x0000, 0x0200, CRC(db214f65) SHA1(1a499cf2059a5c0d860d5a4251a89a5735937ef8))
ROM_END

View File

@ -140,18 +140,10 @@ READ8_MEMBER( kim1_state::kim1_u2_read_a )
{
uint8_t data = 0xff;
switch( ( m_u2_port_b >> 1 ) & 0x0f )
{
case 0:
data = m_row0->read();
break;
case 1:
data = m_row1->read();
break;
case 2:
data = m_row2->read();
break;
}
offs_t const sel = ( m_u2_port_b >> 1 ) & 0x0f;
if ( 3U > sel )
data = m_row[sel]->read();
return data;
}
@ -164,7 +156,7 @@ WRITE8_MEMBER( kim1_state::kim1_u2_write_a )
{
if ( data & 0x80 )
{
output().set_digit_value( idx-4, data & 0x7f );
m_digit[idx - 4] = data & 0x7f;
m_led_time[idx - 4] = 15;
}
}
@ -218,13 +210,15 @@ TIMER_DEVICE_CALLBACK_MEMBER(kim1_state::kim1_update_leds)
if ( m_led_time[i] )
m_led_time[i]--;
else
output().set_digit_value( i, 0 );
m_digit[i] = 0;
}
}
// Register for save states
void kim1_state::machine_start()
{
m_digit.resolve();
save_item(NAME(m_u2_port_b));
save_item(NAME(m_311_output));
save_item(NAME(m_cassette_high_count));

View File

@ -25,45 +25,49 @@
class kim1_state : public driver_device
{
public:
kim1_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
kim1_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_riot2(*this, "miot_u2"),
m_cass(*this, "cassette"),
m_row0(*this, "ROW0"),
m_row1(*this, "ROW1"),
m_row2(*this, "ROW2"),
m_special(*this, "SPECIAL") { }
m_row(*this, "ROW%u", 0U),
m_special(*this, "SPECIAL"),
m_digit(*this, "digit%u", 0U)
{ }
// devices
required_device<cpu_device> m_maincpu;
required_device<mos6530_device> m_riot2;
required_device<cassette_image_device> m_cass;
DECLARE_INPUT_CHANGED_MEMBER(trigger_reset);
DECLARE_INPUT_CHANGED_MEMBER(trigger_nmi);
void kim1(machine_config &config);
protected:
DECLARE_READ8_MEMBER(kim1_u2_read_a);
DECLARE_WRITE8_MEMBER(kim1_u2_write_a);
DECLARE_READ8_MEMBER(kim1_u2_read_b);
DECLARE_WRITE8_MEMBER(kim1_u2_write_b);
uint8_t m_u2_port_b;
uint8_t m_311_output;
uint32_t m_cassette_high_count;
uint8_t m_led_time[6];
// device overrides
virtual void machine_start() override;
virtual void machine_reset() override;
DECLARE_INPUT_CHANGED_MEMBER(trigger_reset);
DECLARE_INPUT_CHANGED_MEMBER(trigger_nmi);
TIMER_DEVICE_CALLBACK_MEMBER(kim1_cassette_input);
TIMER_DEVICE_CALLBACK_MEMBER(kim1_update_leds);
void kim1(machine_config &config);
void kim1_map(address_map &map);
protected:
required_ioport m_row0;
required_ioport m_row1;
required_ioport m_row2;
// devices
required_device<cpu_device> m_maincpu;
required_device<mos6530_device> m_riot2;
required_device<cassette_image_device> m_cass;
required_ioport_array<3> m_row;
required_ioport m_special;
output_finder<6> m_digit;
uint8_t m_u2_port_b;
uint8_t m_311_output;
uint32_t m_cassette_high_count;
uint8_t m_led_time[6];
};
#endif // MAME_INCLUDES_KIM1_H

View File

@ -38,22 +38,22 @@
<!-- Player 1 Score -->
<bezel name="digit5" element="digit">
<bezel name="digit05" element="digit">
<bounds left="10" top="45" right="44" bottom="84" />
</bezel>
<bezel name="digit4" element="digit">
<bezel name="digit04" element="digit">
<bounds left="54" top="45" right="88" bottom="84" />
</bezel>
<bezel name="digit3" element="digit">
<bezel name="digit03" element="digit">
<bounds left="98" top="45" right="132" bottom="84" />
</bezel>
<bezel name="digit2" element="digit">
<bezel name="digit02" element="digit">
<bounds left="142" top="45" right="176" bottom="84" />
</bezel>
<bezel name="digit1" element="digit">
<bezel name="digit01" element="digit">
<bounds left="186" top="45" right="220" bottom="84" />
</bezel>
<bezel name="digit0" element="digit">
<bezel name="digit00" element="digit">
<bounds left="230" top="45" right="264" bottom="84" />
</bezel>