From d6303dcccae14376d56631962ecb580cd15eafe7 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 17 Feb 2019 01:11:47 +0100 Subject: fidel*: make desmas a child class of desdis (nw) --- scripts/target/mame/mess.lua | 1 + src/mame/drivers/fidel6502.cpp | 18 ++---- src/mame/drivers/fidel68k.cpp | 109 +++++++++----------------------- src/mame/includes/fidel_desdis_common.h | 33 ++++++++++ 4 files changed, 70 insertions(+), 91 deletions(-) create mode 100644 src/mame/includes/fidel_desdis_common.h diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 24db5d6b1a5..28575d12132 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2129,6 +2129,7 @@ files { MAME_DIR .. "src/mame/includes/fidelbase.h", MAME_DIR .. "src/mame/drivers/fidel_sc6.cpp", MAME_DIR .. "src/mame/drivers/fidel6502.cpp", + MAME_DIR .. "src/mame/includes/fidel_desdis_common.h", MAME_DIR .. "src/mame/drivers/fidel68k.cpp", } diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp index 72737eeb26c..87d41339b2e 100644 --- a/src/mame/drivers/fidel6502.cpp +++ b/src/mame/drivers/fidel6502.cpp @@ -441,6 +441,7 @@ I/O is via TTL, very similar to Designer Display #include "emu.h" #include "includes/fidelbase.h" +#include "includes/fidel_desdis_common.h" #include "cpu/m6502/m6502.h" #include "cpu/m6502/r65c02.h" @@ -634,11 +635,11 @@ void fidel6502_state::machine_reset() -class desdis_state : public fidelbase_state +class desdis_state : public desdis_common_state { public: desdis_state(const machine_config &mconfig, device_type type, const char *tag) : - fidelbase_state(mconfig, type, tag) + desdis_common_state(mconfig, type, tag) { } void fdes2000d(machine_config &config); @@ -647,11 +648,6 @@ public: private: void fdes2100d_map(address_map &map); - - // I/O handlers - DECLARE_WRITE8_MEMBER(control_w); - DECLARE_WRITE8_MEMBER(lcd_w); - DECLARE_READ8_MEMBER(input_r); }; @@ -1182,7 +1178,7 @@ READ8_MEMBER(fidel6502_state::fexcel_ttl_r) // TTL/generic -WRITE8_MEMBER(desdis_state::control_w) +WRITE8_MEMBER(desdis_common_state::control_w) { u8 q3_old = m_led_select & 8; @@ -1217,7 +1213,7 @@ WRITE8_MEMBER(desdis_state::control_w) display_update(); } -WRITE8_MEMBER(desdis_state::lcd_w) +WRITE8_MEMBER(desdis_common_state::lcd_w) { // a0-a2,d0-d3: 4*74259 to lcd digit segments u32 mask = bitswap<8>(1 << offset,3,7,6,0,1,2,4,5); @@ -1228,7 +1224,7 @@ WRITE8_MEMBER(desdis_state::lcd_w) } } -READ8_MEMBER(desdis_state::input_r) +READ8_MEMBER(desdis_common_state::input_r) { // a0-a2,d7: multiplexed inputs (active low) return (read_inputs(9) >> offset & 1) ? 0 : 0x80; @@ -1815,7 +1811,7 @@ static INPUT_PORTS_START( fdes ) INPUT_PORTS_END -static INPUT_PORTS_START( desdis ) +INPUT_PORTS_START( desdis ) PORT_INCLUDE( fidel_cb_buttons ) PORT_START("IN.8") diff --git a/src/mame/drivers/fidel68k.cpp b/src/mame/drivers/fidel68k.cpp index 6d6f551ab66..ecc1156f045 100644 --- a/src/mame/drivers/fidel68k.cpp +++ b/src/mame/drivers/fidel68k.cpp @@ -181,6 +181,7 @@ B0000x-xxxxxx: see V7, -800000 #include "emu.h" #include "includes/fidelbase.h" +#include "includes/fidel_desdis_common.h" #include "cpu/m68000/m68000.h" #include "machine/ram.h" @@ -232,11 +233,11 @@ private: }; -class desmaster_state : public fidelbase_state +class desmas_state : public desdis_common_state { public: - desmaster_state(const machine_config &mconfig, device_type type, const char *tag) : - fidelbase_state(mconfig, type, tag) + desmas_state(const machine_config &mconfig, device_type type, const char *tag) : + desdis_common_state(mconfig, type, tag) { } void fdes2265(machine_config &config); @@ -249,9 +250,8 @@ private: void fdes2325_map(address_map &map); // I/O handlers - DECLARE_WRITE8_MEMBER(control_w); - DECLARE_READ8_MEMBER(input_r); - DECLARE_WRITE8_MEMBER(lcd_w); + virtual DECLARE_WRITE8_MEMBER(control_w) override; + virtual DECLARE_WRITE8_MEMBER(lcd_w) override; }; @@ -336,55 +336,19 @@ WRITE8_MEMBER(excel68k_state::mux_w) Designer Master ******************************************************************************/ -WRITE8_MEMBER(desmaster_state::control_w) -{ - u8 q3_old = m_led_select & 8; - - // a1-a3,d0: 74259 - u8 mask = 1 << offset; - m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0); - - // 74259 Q4-Q7: 7442 a0-a3 - // 7442 0-8: led data, input mux - u16 sel = 1 << (m_led_select >> 4 & 0xf) & 0x3ff; - m_inp_mux = sel & 0x1ff; - - // 7442 9: speaker out - m_dac->write(BIT(sel, 9)); - - // 74259 Q0,Q1: led select (active low) - display_matrix(9, 2, m_inp_mux, ~m_led_select & 3, false); - - // 74259 Q3: lcd common, update on rising edge - if (~q3_old & m_led_select & 8) - { - for (int i = 0; i < 4; i++) - m_display_state[i+2] = m_7seg_data >> (8*i) & 0xff; - } - - m_display_maxy += 4; - set_display_segmask(0x3c, 0x7f); - display_update(); -} - -READ8_MEMBER(desmaster_state::input_r) +WRITE8_MEMBER(desmas_state::control_w) { - // a1-a3,d7(d15): multiplexed inputs (active low) - return (read_inputs(9) >> offset & 1) ? 0 : 0x80; + // same as desdis, d0 instead of d7 + desdis_common_state::control_w(space, offset, data << 7); } -WRITE8_MEMBER(desmaster_state::lcd_w) +WRITE8_MEMBER(desmas_state::lcd_w) { - // a1-a3,d0-d3: 4*74259 to lcd digit segments - u32 mask = bitswap<8>(1 << offset,3,7,6,0,1,2,4,5); - for (int i = 0; i < 4; i++) - { - m_7seg_data = (m_7seg_data & ~mask) | ((data >> i & 1) ? mask : 0); - mask <<= 8; - } + // same as desdis, inverted data + desdis_common_state::lcd_w(space, offset, ~data); } -void desmaster_state::init_fdes2265() +void desmas_state::init_fdes2265() { u16 *rom = (u16*)memregion("maincpu")->base(); const u32 len = memregion("maincpu")->bytes() / 2; @@ -486,24 +450,24 @@ void excel68k_state::fex68km3_map(address_map &map) // Designer Master -void desmaster_state::fdes2265_map(address_map &map) +void desmas_state::fdes2265_map(address_map &map) { map.unmap_value_high(); map(0x000000, 0x00ffff).rom(); - map(0x000000, 0x00000f).w(FUNC(desmaster_state::lcd_w)).umask16(0x00ff); + map(0x000000, 0x00000f).w(FUNC(desmas_state::lcd_w)).umask16(0x00ff); map(0x044000, 0x047fff).ram(); map(0x100000, 0x10ffff).ram(); - map(0x140000, 0x14000f).r(FUNC(desmaster_state::input_r)).umask16(0xff00); - map(0x140000, 0x14000f).w(FUNC(desmaster_state::control_w)).umask16(0x00ff); + map(0x140000, 0x14000f).r(FUNC(desmas_state::input_r)).umask16(0xff00); + map(0x140000, 0x14000f).w(FUNC(desmas_state::control_w)).umask16(0x00ff); } -void desmaster_state::fdes2325_map(address_map &map) +void desmas_state::fdes2325_map(address_map &map) { map.unmap_value_high(); map(0x000000, 0x00ffff).rom(); - map(0x100000, 0x10000f).w(FUNC(desmaster_state::lcd_w)).umask32(0x00ff00ff); - map(0x140000, 0x14000f).w(FUNC(desmaster_state::control_w)).umask32(0x00ff00ff); - map(0x180000, 0x18000f).r(FUNC(desmaster_state::input_r)).umask32(0xff00ff00); + map(0x100000, 0x10000f).w(FUNC(desmas_state::lcd_w)).umask32(0x00ff00ff); + map(0x140000, 0x14000f).w(FUNC(desmas_state::control_w)).umask32(0x00ff00ff); + map(0x180000, 0x18000f).r(FUNC(desmas_state::input_r)).umask32(0xff00ff00); map(0x300000, 0x37ffff).ram(); map(0x500000, 0x507fff).ram(); } @@ -586,21 +550,6 @@ static INPUT_PORTS_START( excel68k ) INPUT_PORTS_END -static INPUT_PORTS_START( desmaster ) - PORT_INCLUDE( fidel_cb_buttons ) - - PORT_START("IN.8") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Move / Alternate") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Hint / Info") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Take Back / Replay") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Level / New") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Option / Time") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Verify / Problem") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("Shift") -INPUT_PORTS_END - - static INPUT_PORTS_START( eag ) PORT_INCLUDE( fidel_cb_magnets ) @@ -669,16 +618,16 @@ void excel68k_state::fex68km3(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68km3_map); } -void desmaster_state::fdes2265(machine_config &config) +void desmas_state::fdes2265(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, 16_MHz_XTAL); // MC68HC000P12F - m_maincpu->set_addrmap(AS_PROGRAM, &desmaster_state::fdes2265_map); + m_maincpu->set_addrmap(AS_PROGRAM, &desmas_state::fdes2265_map); const attotime irq_period = attotime::from_hz(597); // from 555 timer, measured - TIMER(config, m_irq_on).configure_periodic(FUNC(desmaster_state::irq_on), irq_period); + TIMER(config, m_irq_on).configure_periodic(FUNC(desmas_state::irq_on), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_nsec(6000)); // active for 6us - TIMER(config, "irq_off").configure_periodic(FUNC(desmaster_state::irq_off), irq_period); + TIMER(config, "irq_off").configure_periodic(FUNC(desmas_state::irq_off), irq_period); TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_fidel_desdis_68kr); @@ -691,13 +640,13 @@ void desmaster_state::fdes2265(machine_config &config) vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); } -void desmaster_state::fdes2325(machine_config &config) +void desmas_state::fdes2325(machine_config &config) { fdes2265(config); /* basic machine hardware */ M68EC020(config.replace(), m_maincpu, 20_MHz_XTAL); // MC68EC020RP25 - m_maincpu->set_addrmap(AS_PROGRAM, &desmaster_state::fdes2325_map); + m_maincpu->set_addrmap(AS_PROGRAM, &desmas_state::fdes2325_map); config.set_default_layout(layout_fidel_desdis_68kg); } @@ -910,8 +859,8 @@ CONS( 1987, fex68kb, fex68k, 0, fex68k, excel68k, excel68k_state, empty_in CONS( 1988, fex68km2, fex68k, 0, fex68km2, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1988, fex68km3, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1989, fdes2265, 0, 0, fdes2265, desmaster, desmaster_state, init_fdes2265, "Fidelity Electronics", "Designer Mach III Master 2265", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) -CONS( 1991, fdes2325, fdes2265, 0, fdes2325, desmaster, desmaster_state, empty_init, "Fidelity Electronics", "Designer Mach IV Master 2325", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1989, fdes2265, 0, 0, fdes2265, desdis, desmas_state, init_fdes2265, "Fidelity Electronics", "Designer Mach III Master 2265", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) +CONS( 1991, fdes2325, fdes2265, 0, fdes2325, desdis, desmas_state, empty_init, "Fidelity Electronics", "Designer Mach IV Master 2325", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1989, feagv2, 0, 0, eag, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) CONS( 1989, feagv2a, feagv2, 0, eag, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) diff --git a/src/mame/includes/fidel_desdis_common.h b/src/mame/includes/fidel_desdis_common.h new file mode 100644 index 00000000000..c6721b32aa7 --- /dev/null +++ b/src/mame/includes/fidel_desdis_common.h @@ -0,0 +1,33 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/****************************************************************************** +* +* Fidelity Electronics Designer Display common class +* +******************************************************************************/ + +#pragma once + +#ifndef MAME_INCLUDES_DESDIS_COMMON_H +#define MAME_INCLUDES_DESDIS_COMMON_H + +#include "includes/fidelbase.h" + +class desdis_common_state : public fidelbase_state +{ +public: + desdis_common_state(const machine_config &mconfig, device_type type, const char *tag) : + fidelbase_state(mconfig, type, tag) + { } + +protected: + // I/O handlers + virtual DECLARE_WRITE8_MEMBER(control_w); + virtual DECLARE_WRITE8_MEMBER(lcd_w); + virtual DECLARE_READ8_MEMBER(input_r); +}; + + +INPUT_PORTS_EXTERN( desdis ); + +#endif // MAME_INCLUDES_DESDIS_COMMON_H -- cgit v1.2.3