diff options
Diffstat (limited to 'src/mame/skeleton/didact.cpp')
-rw-r--r-- | src/mame/skeleton/didact.cpp | 72 |
1 files changed, 37 insertions, 35 deletions
diff --git a/src/mame/skeleton/didact.cpp b/src/mame/skeleton/didact.cpp index f8b4b24e1b4..f383f442380 100644 --- a/src/mame/skeleton/didact.cpp +++ b/src/mame/skeleton/didact.cpp @@ -95,7 +95,7 @@ namespace { /* Didact base class */ class didact_state : public driver_device { - public: +public: didact_state(const machine_config &mconfig, device_type type, const char * tag) : driver_device(mconfig, type, tag) , m_cass(*this, "cassette") @@ -107,6 +107,7 @@ class didact_state : public driver_device DECLARE_INPUT_CHANGED_MEMBER(trigger_reset); DECLARE_INPUT_CHANGED_MEMBER(trigger_shift); + protected: virtual void machine_start() override { m_led.resolve(); } @@ -179,10 +180,10 @@ protected: void pia2_kbB_w(uint8_t data); void pia2_ca2_w(int state); - virtual void machine_reset() override; - virtual void machine_start() override; + virtual void machine_reset() override ATTR_COLD; + virtual void machine_start() override ATTR_COLD; - void md6802_map(address_map &map); + void md6802_map(address_map &map) ATTR_COLD; private: required_device<m6802_cpu_device> m_maincpu; @@ -327,14 +328,12 @@ void md6802_state::md6802_map(address_map &map) */ /* Didact mp68a driver class */ -// Just a statement that the real mp68a hardware was designed with 6820 and not 6821 +// The real mp68a hardware was designed with 6820 and not 6821. // They are functional equivalents BUT has different electrical characteristics. // 2019-07-27 Cassette added: saves ok, load is unreliable, probably an original design problem. -#define pia6820_device pia6821_device -#define PIA6820 PIA6821 class mp68a_state : public didact_state { - public: +public: mp68a_state(const machine_config &mconfig, device_type type, const char * tag) : didact_state(mconfig, type, tag) , m_maincpu(*this, "maincpu") @@ -357,13 +356,14 @@ class mp68a_state : public didact_state int pia2_cb1_r(); template <unsigned N> void digit_w(uint8_t data) { m_7segs[N] = data; } - virtual void machine_reset() override; - virtual void machine_start() override; + virtual void machine_reset() override ATTR_COLD; + virtual void machine_start() override ATTR_COLD; void mp68a(machine_config &config); - void mp68a_map(address_map &map); + void mp68a_map(address_map &map) ATTR_COLD; + protected: - required_device<pia6820_device> m_pia1; - required_device<pia6820_device> m_pia2; + required_device<pia6821_device> m_pia1; + required_device<pia6821_device> m_pia2; }; INPUT_CHANGED_MEMBER(didact_state::trigger_shift) @@ -425,13 +425,13 @@ uint8_t mp68a_state::pia2_kbB_r() while (a012 > 0 && !(line & (1 << --a012))); a012 += 8; } - if ( a012 == 0 && (line = ((m_lines[2]) | m_lines[3])) != 0) + if (a012 == 0 && (line = ((m_lines[2]) | m_lines[3])) != 0) { a012 = 8; while (a012 > 0 && !(line & (1 << --a012))); } - pb = a012; // A0-A2 -> PB0-PB3 + pb = a012; // A0-A2 -> PB0-PB3 if (m_shift) { @@ -486,8 +486,8 @@ void mp68a_state::machine_start() void mp68a_state::mp68a_map(address_map &map) { map(0x0000, 0x00ff).ram().mirror(0xf000); - map(0x0500, 0x0503).rw(m_pia1, FUNC(pia6820_device::read), FUNC(pia6820_device::write)).mirror(0xf0fc); - map(0x0600, 0x0603).rw(m_pia2, FUNC(pia6820_device::read), FUNC(pia6820_device::write)).mirror(0xf0fc); + map(0x0500, 0x0503).rw(m_pia1, FUNC(pia6821_device::read), FUNC(pia6821_device::write)).mirror(0xf0fc); + map(0x0600, 0x0603).rw(m_pia2, FUNC(pia6821_device::read), FUNC(pia6821_device::write)).mirror(0xf0fc); map(0x0700, 0x07ff).ram().mirror(0xf000); map(0x0800, 0x0bff).rom().mirror(0xf400).region("maincpu", 0x0800); } @@ -536,7 +536,7 @@ void mp68a_state::mp68a_map(address_map &map) /* Didact modulab driver class */ class modulab_state : public didact_state { - public: +public: modulab_state(const machine_config &mconfig, device_type type, const char * tag) : didact_state(mconfig, type, tag) , m_maincpu(*this, "maincpu") @@ -550,15 +550,17 @@ class modulab_state : public didact_state output_finder<6> m_7segs; - virtual void machine_reset() override; - virtual void machine_start() override; + virtual void machine_reset() override ATTR_COLD; + virtual void machine_start() override ATTR_COLD; void modulab(machine_config &config); + protected: uint8_t io_r(offs_t offset); void io_w(offs_t offset, u8 data); void da_w(int state); + private: - void modulab_map(address_map &map); + void modulab_map(address_map &map) ATTR_COLD; // Offsets for display and keyboard i/o enum { @@ -571,7 +573,7 @@ private: class shift8 { public: - shift8(){ byte = 0; } + shift8() { byte = 0; } void shiftIn(uint8_t in){ byte = ((byte << 1) & 0xfe) | (in & 1 ? 1 : 0); } uint8_t byte; }; @@ -694,7 +696,7 @@ static INPUT_PORTS_START( modulab ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("C/B") PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_START("LINE4") /* Special KEY ROW for reset key */ - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_F12) PORT_CHANGED_MEMBER(DEVICE_SELF, modulab_state, trigger_reset, 0) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_F12) PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(modulab_state::trigger_reset), 0) PORT_BIT(0xfb, 0x00, IPT_UNUSED ) INPUT_PORTS_END @@ -728,8 +730,8 @@ static INPUT_PORTS_START( md6802 ) PORT_BIT(0xf0, 0x00, IPT_UNUSED ) PORT_START("LINE4") /* Special KEY ROW for reset and Shift/'*' keys */ - PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR('*') PORT_CHANGED_MEMBER(DEVICE_SELF, md6802_state, trigger_shift, 0) - PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_F12) PORT_CHANGED_MEMBER(DEVICE_SELF, md6802_state, trigger_reset, 0) + PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR('*') PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(md6802_state::trigger_shift), 0) + PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_F12) PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(md6802_state::trigger_reset), 0) PORT_BIT(0xf3, 0x00, IPT_UNUSED ) INPUT_PORTS_END @@ -763,9 +765,9 @@ static INPUT_PORTS_START( mp68a ) PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_START("LINE4") /* Special KEY ROW for reset and Shift/'*' keys, they are hard wired */ - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR('*') PORT_CHANGED_MEMBER(DEVICE_SELF, mp68a_state, trigger_shift, 0) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR('*') PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(mp68a_state::trigger_shift), 0) //PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_F12) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_F12) PORT_CHANGED_MEMBER(DEVICE_SELF, mp68a_state, trigger_reset, 0) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_F12) PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(mp68a_state::trigger_reset), 0) PORT_BIT(0xf3, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END @@ -850,10 +852,10 @@ void mp68a_state::mp68a(machine_config &config) /* Devices */ /* PIA #1 0x500-0x503 - used differently by laborations and loaded software */ - PIA6820(config, m_pia1, 0); + PIA6821(config, m_pia1, 0); // actually 6820 /* PIA #2 Keyboard & Display 0x600-0x603 */ - PIA6820(config, m_pia2, 0); + PIA6821(config, m_pia2, 0); // actually 6820 /* --PIA inits----------------------- */ /* 0x0BAF 0x601 (Control A) = 0x30 - CA2 is low and enable DDRA */ /* 0x0BB1 0x603 (Control B) = 0x30 - CB2 is low and enable DDRB */ @@ -886,12 +888,12 @@ void mp68a_state::mp68a(machine_config &config) /* 0x086B 0x600 (Port A) = 0x70 */ /* 0x086B 0x600 (Port A) = 0x50 */ /* 0x086B 0x600 (Port A) = 0x70 */ - DM9368(config, m_digits[0], 0).update_cb().set(FUNC(mp68a_state::digit_w<0>)); - DM9368(config, m_digits[1], 0).update_cb().set(FUNC(mp68a_state::digit_w<1>)); - DM9368(config, m_digits[2], 0).update_cb().set(FUNC(mp68a_state::digit_w<2>)); - DM9368(config, m_digits[3], 0).update_cb().set(FUNC(mp68a_state::digit_w<3>)); - DM9368(config, m_digits[4], 0).update_cb().set(FUNC(mp68a_state::digit_w<4>)); - DM9368(config, m_digits[5], 0).update_cb().set(FUNC(mp68a_state::digit_w<5>)); + DM9368(config, m_digits[0]).update_cb().set(FUNC(mp68a_state::digit_w<0>)); + DM9368(config, m_digits[1]).update_cb().set(FUNC(mp68a_state::digit_w<1>)); + DM9368(config, m_digits[2]).update_cb().set(FUNC(mp68a_state::digit_w<2>)); + DM9368(config, m_digits[3]).update_cb().set(FUNC(mp68a_state::digit_w<3>)); + DM9368(config, m_digits[4]).update_cb().set(FUNC(mp68a_state::digit_w<4>)); + DM9368(config, m_digits[5]).update_cb().set(FUNC(mp68a_state::digit_w<5>)); /* Cassette */ SPEAKER(config, "mono").front_center(); |