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") , 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(sound0_w);
DECLARE_WRITE8_MEMBER(sound1_w); DECLARE_WRITE8_MEMBER(sound1_w);
DECLARE_WRITE8_MEMBER(lamp_w) { }; DECLARE_WRITE8_MEMBER(lamp_w) { };
@ -53,10 +57,10 @@ public:
DECLARE_WRITE8_MEMBER(display_w); DECLARE_WRITE8_MEMBER(display_w);
TIMER_DEVICE_CALLBACK_MEMBER(irq); TIMER_DEVICE_CALLBACK_MEMBER(irq);
TIMER_DEVICE_CALLBACK_MEMBER(timer_s); 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_s2_map(address_map &map);
void atari_s3_map(address_map &map); void atari_s3_map(address_map &map);
private: private:
bool m_timer_sb; bool m_timer_sb;
uint8_t m_timer_s[5]; uint8_t m_timer_s[5];
@ -354,9 +358,11 @@ WRITE8_MEMBER( atari_s2_state::sol0_w )
WRITE8_MEMBER( atari_s2_state::display_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 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) if (offset < 7)
{
m_segment[offset] = patterns[data&15]; m_segment[offset] = patterns[data&15];
}
else else
{ {
data &= 7; data &= 7;

View File

@ -4,7 +4,7 @@
Babbage-2nd skeleton driver (19/OCT/2011) 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: Pasting:
0-F : as is 0-F : as is
@ -42,8 +42,11 @@ public:
, m_pio_2(*this, "z80pio_2") , m_pio_2(*this, "z80pio_2")
, m_ctc(*this, "z80ctc") , m_ctc(*this, "z80ctc")
, m_keyboard(*this, "X%u", 0) , m_keyboard(*this, "X%u", 0)
{ } { }
void babbage(machine_config &config);
protected:
DECLARE_READ8_MEMBER(pio2_a_r); DECLARE_READ8_MEMBER(pio2_a_r);
DECLARE_WRITE8_MEMBER(pio1_b_w); DECLARE_WRITE8_MEMBER(pio1_b_w);
DECLARE_WRITE8_MEMBER(pio2_b_w); DECLARE_WRITE8_MEMBER(pio2_b_w);
@ -52,9 +55,9 @@ public:
DECLARE_WRITE_LINE_MEMBER(ctc_z2_w); DECLARE_WRITE_LINE_MEMBER(ctc_z2_w);
TIMER_DEVICE_CALLBACK_MEMBER(keyboard_callback); TIMER_DEVICE_CALLBACK_MEMBER(keyboard_callback);
void babbage(machine_config &config);
void babbage_io(address_map &map); void babbage_io(address_map &map);
void babbage_map(address_map &map); void babbage_map(address_map &map);
private: private:
uint8_t m_segment; uint8_t m_segment;
uint8_t m_key; uint8_t m_key;
@ -164,15 +167,18 @@ READ8_MEMBER( babbage_state::pio2_a_r )
WRITE8_MEMBER( babbage_state::pio2_b_w ) WRITE8_MEMBER( babbage_state::pio2_b_w )
{ {
if (BIT(data, 7)) if (BIT(data, 7))
{
m_step = false; m_step = false;
else }
if (!m_step) else if (!m_step)
{ {
m_segment = data; m_segment = data;
m_step = true; m_step = true;
} }
else else
{
output().set_digit_value(data, m_segment); output().set_digit_value(data, m_segment);
}
} }
static const z80_daisy_config babbage_daisy_chain[] = static const z80_daisy_config babbage_daisy_chain[] =

View File

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

View File

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

View File

@ -32,6 +32,7 @@ class hankin_state : public genpin_class
public: public:
hankin_state(const machine_config &mconfig, device_type type, const char *tag) hankin_state(const machine_config &mconfig, device_type type, const char *tag)
: genpin_class(mconfig, type, tag) : genpin_class(mconfig, type, tag)
, m_p_prom(*this, "prom")
, m_maincpu(*this, "maincpu") , m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu") , m_audiocpu(*this, "audiocpu")
, m_ic10(*this, "ic10") , m_ic10(*this, "ic10")
@ -39,16 +40,14 @@ public:
, m_ic2(*this, "ic2") , m_ic2(*this, "ic2")
, m_dac(*this, "dac") , m_dac(*this, "dac")
, m_io_test(*this, "TEST") , m_io_test(*this, "TEST")
, m_io_dsw0(*this, "DSW0") , m_io_x(*this, { "X0", "X1", "X2", "X3", "X4", "DSW0", "DSW1", "DSW2" })
, m_io_dsw1(*this, "DSW1") , m_display(*this, "digit%u%u", 0U, 0U)
, 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")
{ } { }
DECLARE_INPUT_CHANGED_MEMBER(self_test);
void hankin(machine_config &config);
protected:
DECLARE_WRITE_LINE_MEMBER(ic10_ca2_w); DECLARE_WRITE_LINE_MEMBER(ic10_ca2_w);
DECLARE_WRITE_LINE_MEMBER(ic10_cb2_w); DECLARE_WRITE_LINE_MEMBER(ic10_cb2_w);
DECLARE_WRITE_LINE_MEMBER(ic11_ca2_w); DECLARE_WRITE_LINE_MEMBER(ic11_ca2_w);
@ -62,12 +61,15 @@ public:
DECLARE_WRITE8_MEMBER(ic2_a_w); DECLARE_WRITE8_MEMBER(ic2_a_w);
DECLARE_READ8_MEMBER(ic11_b_r); DECLARE_READ8_MEMBER(ic11_b_r);
DECLARE_READ8_MEMBER(ic2_a_r); DECLARE_READ8_MEMBER(ic2_a_r);
DECLARE_INPUT_CHANGED_MEMBER(self_test);
TIMER_DEVICE_CALLBACK_MEMBER(timer_s); TIMER_DEVICE_CALLBACK_MEMBER(timer_s);
TIMER_DEVICE_CALLBACK_MEMBER(timer_x); 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_map(address_map &map);
void hankin_sub_map(address_map &map); void hankin_sub_map(address_map &map);
private: private:
bool m_timer_x; bool m_timer_x;
bool m_timer_sb; bool m_timer_sb;
@ -85,8 +87,8 @@ private:
uint8_t m_counter; uint8_t m_counter;
uint8_t m_digit; uint8_t m_digit;
uint8_t m_segment[5]; 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_maincpu;
required_device<m6802_cpu_device> m_audiocpu; required_device<m6802_cpu_device> m_audiocpu;
required_device<pia6821_device> m_ic10; required_device<pia6821_device> m_ic10;
@ -94,14 +96,8 @@ private:
required_device<pia6821_device> m_ic2; required_device<pia6821_device> m_ic2;
required_device<dac_4bit_r2r_device> m_dac; required_device<dac_4bit_r2r_device> m_dac;
required_ioport m_io_test; required_ioport m_io_test;
required_ioport m_io_dsw0; required_ioport_array<8> m_io_x;
required_ioport m_io_dsw1; output_finder<5, 6> m_display;
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;
}; };
@ -111,14 +107,14 @@ ADDRESS_MAP_START(hankin_state::hankin_map)
AM_RANGE(0x0088, 0x008b) AM_DEVREADWRITE("ic11", pia6821_device, read, write) AM_RANGE(0x0088, 0x008b) AM_DEVREADWRITE("ic11", pia6821_device, read, write)
AM_RANGE(0x0090, 0x0093) AM_DEVREADWRITE("ic10", 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(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_END
ADDRESS_MAP_START(hankin_state::hankin_sub_map) ADDRESS_MAP_START(hankin_state::hankin_sub_map)
ADDRESS_MAP_GLOBAL_MASK(0x1fff) ADDRESS_MAP_GLOBAL_MASK(0x1fff)
AM_RANGE(0x0000, 0x007f) AM_RAM // internal to the cpu AM_RANGE(0x0000, 0x007f) AM_RAM // internal to the cpu
AM_RANGE(0x0080, 0x0083) AM_DEVREADWRITE("ic2", pia6821_device, read, write) 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 ADDRESS_MAP_END
static INPUT_PORTS_START( hankin ) 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. // use is to place the '1' digit in the centre segments.
if (BIT(data, 0) && (m_counter > 8)) 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 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
uint16_t i, seg1, seg2; for (unsigned i = 0U; i < 5U; ++i)
for (i = 0; i < 5; i++) m_display[i][m_digit] = bitswap<10>(uint16_t(patterns[m_segment[i]]), 7, 7, 6, 6, 5, 4, 3, 2, 1, 0);
{
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);
}
} }
} }
} }
@ -363,29 +354,11 @@ READ8_MEMBER( hankin_state::ic11_b_r )
{ {
uint8_t data = 0; uint8_t data = 0;
if (BIT(m_ic11a, 0)) for (unsigned i = 0U; i < 8U; ++i)
data |= m_io_x0->read(); {
if (BIT(m_ic11a, i))
if (BIT(m_ic11a, 1)) data |= m_io_x[i]->read();
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();
return data; 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() void hankin_state::machine_reset()
{ {
m_p_prom = memregion("roms")->base() + 0x1800;
m_vol = 0; m_vol = 0;
m_dac->set_output_gain(0, 0); m_dac->set_output_gain(0, 0);
} }
@ -554,55 +531,75 @@ MACHINE_CONFIG_END
/ FJ Holden / FJ Holden
/-------------------------------*/ /-------------------------------*/
ROM_START(fjholden) 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_ic2.mpu", 0x0000, 0x0800, CRC(b47bc2c7) SHA1(42c985d83a9454fcd08b87e572e5563ebea0d052))
ROM_LOAD("fj_ic3.mpu", 0x0800, 0x0800, CRC(ceaeb7d3) SHA1(9e479b985f8500983e71d6ff33ee94160e99650d)) 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 ROM_END
/*-------------------------------- /*--------------------------------
/ Howzat! / Howzat!
/-------------------------------*/ /-------------------------------*/
ROM_START(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_ic2.mpu", 0x0000, 0x0800, CRC(b47bc2c7) SHA1(42c985d83a9454fcd08b87e572e5563ebea0d052))
ROM_LOAD("hz_ic3.mpu", 0x0800, 0x0800, CRC(d13df4bc) SHA1(27a70260698d3eaa7cf7a56edc5dd9a4af3f4103)) 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 ROM_END
/*-------------------------------- /*--------------------------------
/ Orbit 1 / Orbit 1
/-------------------------------*/ /-------------------------------*/
ROM_START(orbit1) 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_ic2.mpu", 0x0000, 0x0800, CRC(b47bc2c7) SHA1(42c985d83a9454fcd08b87e572e5563ebea0d052))
ROM_LOAD("o1_ic3.mpu", 0x0800, 0x0800, CRC(fe7b61be) SHA1(c086b0433bb9ab3f2139c705d4372beb1656b27f)) 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 ROM_END
/*-------------------------------- /*--------------------------------
/ Shark / Shark
/-------------------------------*/ /-------------------------------*/
ROM_START(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_ic2.mpu", 0x0000, 0x0800, CRC(b47bc2c7) SHA1(42c985d83a9454fcd08b87e572e5563ebea0d052))
ROM_LOAD("shk_ic3.mpu", 0x0800, 0x0800, CRC(c3ef936c) SHA1(14668496d162a77e03c1142bef2956d5b76afc99)) 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 ROM_END
/*-------------------------------- /*--------------------------------
/ The Empire Strike Back / The Empire Strike Back
/-------------------------------*/ /-------------------------------*/
ROM_START(empsback) 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_ic2.mpu", 0x0000, 0x0800, CRC(b47bc2c7) SHA1(42c985d83a9454fcd08b87e572e5563ebea0d052))
ROM_LOAD("sw_ic3.mpu", 0x0800, 0x0800, CRC(837ffe32) SHA1(9affc5d9345ce15394553d3204e5234cc6348d2e)) 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 ROM_END

View File

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

View File

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

View File

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