diff --git a/src/mame/drivers/atari_s2.cpp b/src/mame/drivers/atari_s2.cpp index 19a68dd077c..d3e762dd366 100644 --- a/src/mame/drivers/atari_s2.cpp +++ b/src/mame/drivers/atari_s2.cpp @@ -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; diff --git a/src/mame/drivers/babbage.cpp b/src/mame/drivers/babbage.cpp index 85745754097..89625c9e85b 100644 --- a/src/mame/drivers/babbage.cpp +++ b/src/mame/drivers/babbage.cpp @@ -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 @@ -42,8 +42,11 @@ public: , m_pio_2(*this, "z80pio_2") , m_ctc(*this, "z80ctc") , 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[] = diff --git a/src/mame/drivers/beta.cpp b/src/mame/drivers/beta.cpp index 7d8513e3fed..1995b4d3950 100644 --- a/src/mame/drivers/beta.cpp +++ b/src/mame/drivers/beta.cpp @@ -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 m_maincpu; - required_device m_speaker; - required_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 m_maincpu; + required_device m_speaker; + required_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); diff --git a/src/mame/drivers/et3400.cpp b/src/mame/drivers/et3400.cpp index ad607a59f73..bbe3a48bda9 100644 --- a/src/mame/drivers/et3400.cpp +++ b/src/mame/drivers/et3400.cpp @@ -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 DECLARE_WRITE8_MEMBER(led_w); + template 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 m_maincpu; required_device m_pia; required_device_array m_displatch; required_device m_rs232; required_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 +template 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 diff --git a/src/mame/drivers/hankin.cpp b/src/mame/drivers/hankin.cpp index c9d204145b0..423f425ed2f 100644 --- a/src/mame/drivers/hankin.cpp +++ b/src/mame/drivers/hankin.cpp @@ -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 m_p_prom; required_device m_maincpu; required_device m_audiocpu; required_device m_ic10; @@ -94,14 +96,8 @@ private: required_device m_ic2; required_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 diff --git a/src/mame/drivers/kim1.cpp b/src/mame/drivers/kim1.cpp index 7a4834879e9..0f1656ea9de 100644 --- a/src/mame/drivers/kim1.cpp +++ b/src/mame/drivers/kim1.cpp @@ -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)); diff --git a/src/mame/includes/kim1.h b/src/mame/includes/kim1.h index 75872556125..0a59e5d776e 100644 --- a/src/mame/includes/kim1.h +++ b/src/mame/includes/kim1.h @@ -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 m_maincpu; - required_device m_riot2; - required_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 m_maincpu; + required_device m_riot2; + required_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 diff --git a/src/mame/layout/hankin.lay b/src/mame/layout/hankin.lay index 0f15e650f92..1fbb6cf3134 100644 --- a/src/mame/layout/hankin.lay +++ b/src/mame/layout/hankin.lay @@ -38,22 +38,22 @@ - + - + - + - + - + - +