summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2019-02-18 02:00:34 +0100
committer hap <happppp@users.noreply.github.com>2019-02-18 02:00:34 +0100
commit2f428400fdcd7473f0b0025e03c0fe94c74ceb57 (patch)
tree7d2b788043248f2b63a88246298d27ee414d87ff
parent300755f7bec13a1679b3de2f2e7bd0131148c22b (diff)
fidel*: put designer display in its own file (nw)
-rw-r--r--scripts/target/mame/mess.lua2
-rw-r--r--src/mame/drivers/fidel6502.cpp155
-rw-r--r--src/mame/drivers/fidel68k.cpp152
-rw-r--r--src/mame/drivers/fidel_desdis.cpp356
-rw-r--r--src/mame/includes/fidel_desdis_common.h33
-rw-r--r--src/mame/mame.lst10
-rw-r--r--src/mame/mess.flt1
7 files changed, 364 insertions, 345 deletions
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index aa122a10aee..ba905b8d6a5 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -2131,9 +2131,9 @@ createMESSProjects(_target, _subtarget, "fidelity")
files {
MAME_DIR .. "src/mame/drivers/fidelbase.cpp",
MAME_DIR .. "src/mame/includes/fidelbase.h",
+ MAME_DIR .. "src/mame/includes/fidel_desdis.cpp",
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 9995d55a560..b2c5dc68e40 100644
--- a/src/mame/drivers/fidel6502.cpp
+++ b/src/mame/drivers/fidel6502.cpp
@@ -442,7 +442,6 @@ 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"
@@ -459,7 +458,6 @@ I/O is via TTL, very similar to Designer Display
#include "fidel_chesster.lh" // clickable
#include "fidel_csc.lh" // clickable, with preliminary boardpieces simulation
#include "fidel_des.lh" // clickable
-#include "fidel_desdis.lh" // clickable
#include "fidel_eag.lh" // clickable
#include "fidel_eas.lh" // clickable
#include "fidel_ex.lh" // clickable
@@ -727,23 +725,6 @@ void su9_state::su9_set_cpu_freq()
-class desdis_state : public desdis_common_state
-{
-public:
- desdis_state(const machine_config &mconfig, device_type type, const char *tag) :
- desdis_common_state(mconfig, type, tag)
- { }
-
- void fdes2000d(machine_config &config);
- void fdes2100d(machine_config &config);
- void init_fdes2100d();
-
-private:
- void fdes2100d_map(address_map &map);
-};
-
-
-
/***************************************************************************
Helper Functions
@@ -1240,70 +1221,6 @@ READ8_MEMBER(excel_state::fexcelb_ttl_r)
-/******************************************************************************
- Designer Display
-******************************************************************************/
-
-// TTL/generic
-
-WRITE8_MEMBER(desdis_common_state::control_w)
-{
- u8 q3_old = m_led_select & 8;
-
- // a0-a2,d7: 74259
- u8 mask = 1 << offset;
- m_led_select = (m_led_select & ~mask) | ((data & 0x80) ? 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 Q2: book rom A14
- if (m_rombank != nullptr)
- m_rombank->set_entry(~m_led_select >> 2 & 1);
-
- // 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();
-}
-
-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);
- for (int i = 0; i < 4; i++)
- {
- m_7seg_data = (m_7seg_data & ~mask) | ((data >> i & 1) ? 0 : mask);
- mask <<= 8;
- }
-}
-
-READ8_MEMBER(desdis_common_state::input_r)
-{
- // a0-a2,d7: multiplexed inputs (active low)
- return (read_inputs(9) >> offset & 1) ? 0 : 0x80;
-}
-
-void desdis_state::init_fdes2100d()
-{
- m_rombank->configure_entries(0, 2, memregion("rombank")->base(), 0x4000);
-}
-
-
/******************************************************************************
Phantom
@@ -1514,15 +1431,6 @@ void excel_state::fexcelb_map(address_map &map)
// Designer Display, Phantom, Chesster
-void desdis_state::fdes2100d_map(address_map &map)
-{
- map(0x0000, 0x1fff).ram();
- map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(desdis_state::input_r), FUNC(desdis_state::control_w));
- map(0x4000, 0x7fff).bankr("rombank");
- map(0x6000, 0x6007).mirror(0x1ff8).w(FUNC(desdis_state::lcd_w));
- map(0x8000, 0xffff).rom();
-}
-
void fidel6502_state::fphantom_map(address_map &map)
{
map(0x0000, 0x1fff).ram();
@@ -1872,20 +1780,6 @@ static INPUT_PORTS_START( fdes )
INPUT_PORTS_END
-INPUT_PORTS_START( desdis )
- 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( chesster )
PORT_INCLUDE( fidel_cb_buttons )
@@ -2271,36 +2165,6 @@ void excel_state::fexceld(machine_config &config)
config.set_default_layout(layout_fidel_exd);
}
-void desdis_state::fdes2100d(machine_config &config)
-{
- /* basic machine hardware */
- M65C02(config, m_maincpu, 6_MHz_XTAL); // W65C02P-6
- m_maincpu->set_addrmap(AS_PROGRAM, &desdis_state::fdes2100d_map);
-
- const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K)
- TIMER(config, m_irq_on).configure_periodic(FUNC(desdis_state::irq_on<M6502_IRQ_LINE>), irq_period);
- m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us
- TIMER(config, "irq_off").configure_periodic(FUNC(desdis_state::irq_off<M6502_IRQ_LINE>), 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);
-
- /* sound hardware */
- SPEAKER(config, "speaker").front_center();
- DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
- voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
- vref.set_output(5.0);
- vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
-}
-
-void desdis_state::fdes2000d(machine_config &config)
-{
- fdes2100d(config);
-
- /* basic machine hardware */
- R65C02(config.replace(), m_maincpu, 3_MHz_XTAL); // R65C02P3
- m_maincpu->set_addrmap(AS_PROGRAM, &desdis_state::fdes2100d_map);
-}
void fidel6502_state::fphantom(machine_config &config)
{
@@ -2849,22 +2713,6 @@ ROM_START( fdes2100 ) // model 6103, PCB label 510.1129A01
ROM_END
-ROM_START( fdes2100d ) // model 6106, PCB label 510.1130A01. The 'rev B' dump came from a post-release bugfix by Fidelity
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("i9_orange.ic9", 0x8000, 0x8000, CRC(83fec02a) SHA1(6f43ab05bc605061989b05d0592dbd184efff9d4) ) // WSI 27C256L-12
-
- ROM_REGION( 0x8000, "rombank", 0 )
- ROM_LOAD("bk3_white.ic10", 0x0000, 0x8000, CRC(3857cc35) SHA1(f073dafb9fd885c7ddb7fbff10e3653f343ef1c6) ) // WSI 27C256L-12
-ROM_END
-
-ROM_START( fdes2000d ) // model 6105, PCB label 510.1130A01
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("27c256.ic9", 0x8000, 0x8000, CRC(b136d1a1) SHA1(8438790a62f45284ff33a0255c5c89f526726d3e) ) // 27C256, no label
-
- ROM_REGION( 0x8000, "rombank", ROMREGION_ERASEFF ) // no rom in ic10
-ROM_END
-
-
ROM_START( fphantom ) // model 6100, PCB label 510.1128A01
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("u_3c_yellow.u3", 0x8000, 0x8000, CRC(fb7c38ae) SHA1(a1aa7637705052cb4eec92644dc79aee7ba4d77c) ) // 27C256
@@ -2963,9 +2811,6 @@ CONS( 1986, granits, fexcelp, 0, granits, fexcel, excel_state, empty_in
CONS( 1988, fdes2000, fexcelp, 0, fdes2000, fdes, excel_state, empty_init, "Fidelity Electronics", "Designer 2000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fdes2100, fexcelp, 0, fdes2100, fdes, excel_state, empty_init, "Fidelity Electronics", "Designer 2100", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
-CONS( 1988, fdes2100d, 0, 0, fdes2100d, desdis, desdis_state, init_fdes2100d, "Fidelity Electronics", "Designer 2100 Display (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
-CONS( 1988, fdes2000d, fdes2100d,0, fdes2000d, desdis, desdis_state, init_fdes2100d, "Fidelity Electronics", "Designer 2000 Display", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
-
CONS( 1988, fphantom, 0, 0, fphantom, fphantom, fidel6502_state, init_fphantom, "Fidelity Electronics", "Phantom (Fidelity)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
CONS( 1990, chesster, 0, 0, chesster, chesster, chesster_state, init_chesster, "Fidelity Electronics", "Chesster Challenger (V1.3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
diff --git a/src/mame/drivers/fidel68k.cpp b/src/mame/drivers/fidel68k.cpp
index 175e82d2b79..4606c527242 100644
--- a/src/mame/drivers/fidel68k.cpp
+++ b/src/mame/drivers/fidel68k.cpp
@@ -38,27 +38,6 @@ I/O is via TTL, overall very similar to EAG.
******************************************************************************
-Designer Mach III Master 2265 (model 6113)
-------------------------------------------
-80KB RAM(2*KM6264AL-10, 2*KM62256AP-10), 64KB ROM(2*WSI 27C256L-12)
-MC68HC000P12F CPU, 16MHz XTAL
-IRQ(IPL2) from 555 timer, 1.67ms low, 6us high
-PCB label 510.1134A02
-
-ROM address/data lines are scrambled, presumed for easy placement on PCB and not
-for obfuscation. I/O is nearly the same as Designer Display on 6502 hardware.
-
-Designer Mach IV Master 2325 (model 6129)
------------------------------------------
-32KB(4*P5164-70) + 512KB(TC518512PL-80) RAM, 64KB ROM(TMS 27C512-120JL)
-MC68EC020RP25 CPU, 20MHz XTAL
-PCB label 510.1149A01
-It has a green "Shift" led instead of red, and ROM is not scrambled.
-
-
-******************************************************************************
-
-
Elite Avant Garde (EAG, model 6114)
-----------------------------------
@@ -181,7 +160,6 @@ 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"
@@ -190,8 +168,6 @@ B0000x-xxxxxx: see V7, -800000
#include "speaker.h"
// internal artwork
-#include "fidel_desdis_68kg.lh" // clickable
-#include "fidel_desdis_68kr.lh" // clickable
#include "fidel_ex_68k.lh" // clickable
#include "fidel_eag_68k.lh" // clickable
@@ -233,28 +209,6 @@ protected:
};
-class desmas_state : public desdis_common_state
-{
-public:
- desmas_state(const machine_config &mconfig, device_type type, const char *tag) :
- desdis_common_state(mconfig, type, tag)
- { }
-
- void fdes2265(machine_config &config);
- void fdes2325(machine_config &config);
-
- void init_fdes2265();
-
-private:
- void fdes2265_map(address_map &map);
- void fdes2325_map(address_map &map);
-
- // I/O handlers
- virtual DECLARE_WRITE8_MEMBER(control_w) override;
- virtual DECLARE_WRITE8_MEMBER(lcd_w) override;
-};
-
-
class excel68k_state : public eag_state
{
public:
@@ -295,37 +249,6 @@ WRITE8_MEMBER(excel68k_state::mux_w)
-/******************************************************************************
- Designer Master
-******************************************************************************/
-
-WRITE8_MEMBER(desmas_state::control_w)
-{
- // same as desdis, d0 instead of d7
- desdis_common_state::control_w(space, offset, data << 7);
-}
-
-WRITE8_MEMBER(desmas_state::lcd_w)
-{
- // same as desdis, inverted data
- desdis_common_state::lcd_w(space, offset, ~data);
-}
-
-void desmas_state::init_fdes2265()
-{
- u16 *rom = (u16*)memregion("maincpu")->base();
- const u32 len = memregion("maincpu")->bytes() / 2;
-
- // descramble data lines
- for (int i = 0; i < len; i++)
- rom[i] = bitswap<16>(rom[i], 15,14,8,13,9,12,10,11, 3,4,5,7,6,0,1,2);
-
- // descramble address lines
- std::vector<u16> buf(len);
- memcpy(&buf[0], rom, len*2);
- for (int i = 0; i < len; i++)
- rom[i] = buf[bitswap<24>(i, 23,22,21,20,19,18,17,16, 15,14,13,12,11,8,10,9, 7,6,5,4,3,2,1,0)];
-}
@@ -413,30 +336,6 @@ void excel68k_state::fex68km3_map(address_map &map)
}
-// Designer Master
-
-void desmas_state::fdes2265_map(address_map &map)
-{
- map.unmap_value_high();
- map(0x000000, 0x00ffff).rom();
- map(0x000000, 0x00000f).w(FUNC(desmas_state::lcd_w)).umask16(0x00ff);
- map(0x044000, 0x047fff).ram();
- map(0x100000, 0x10ffff).ram();
- map(0x140000, 0x14000f).r(FUNC(desmas_state::input_r)).umask16(0xff00);
- map(0x140000, 0x14000f).w(FUNC(desmas_state::control_w)).umask16(0x00ff);
-}
-
-void desmas_state::fdes2325_map(address_map &map)
-{
- map.unmap_value_high();
- map(0x000000, 0x00ffff).rom();
- 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();
-}
-
// EAG
@@ -583,39 +482,6 @@ void excel68k_state::fex68km3(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68km3_map);
}
-void desmas_state::fdes2265(machine_config &config)
-{
- /* basic machine hardware */
- M68000(config, m_maincpu, 16_MHz_XTAL); // MC68HC000P12F
- 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(desmas_state::irq_on<M68K_IRQ_4>), irq_period);
- m_irq_on->set_start_delay(irq_period - attotime::from_nsec(6000)); // active for 6us
- TIMER(config, "irq_off").configure_periodic(FUNC(desmas_state::irq_off<M68K_IRQ_4>), 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);
-
- /* sound hardware */
- SPEAKER(config, "speaker").front_center();
- DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
- voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
- vref.set_output(5.0);
- vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
-}
-
-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, &desmas_state::fdes2325_map);
-
- config.set_default_layout(layout_fidel_desdis_68kg);
-}
-
void eag_state::eag_base(machine_config &config)
{
/* basic machine hardware */
@@ -740,21 +606,6 @@ ROM_START( fex68km3 ) // model 6098, PCB label 510.1120B01
ROM_END
-ROM_START( fdes2265 ) // model 6113, PCB label 510.1134A02
- ROM_REGION16_BE( 0x10000, "maincpu", 0 )
- ROM_LOAD16_BYTE("13e_red.ic11", 0x00000, 0x08000, CRC(15a35628) SHA1(8213862e129951c6943a80f73cd0b63a31bb1357) ) // 27c256
- ROM_LOAD16_BYTE("13o_blue.ic10", 0x00001, 0x08000, CRC(81ce7ab2) SHA1(f01a70bcf2fbfe66c7a77d3c4437d897e5cc682d) ) // "
-ROM_END
-
-ROM_START( fdes2325 ) // model 6129, PCB label 510.1149A01
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("61_29_white.ic10", 0x00000, 0x10000, CRC(f74157e1) SHA1(87f3f2d584e292f81593e053240d022cc477834d) ) // 27c512
-
- ROM_REGION( 0x100, "pals", 0 )
- ROM_LOAD("101-1097a01.ic19", 0x000, 0x100, NO_DUMP ) // PALCE16V8Q-25PC
-ROM_END
-
-
ROM_START( feagv2 ) // from a V2 board
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE("6114_e5_yellow.u22", 0x00000, 0x10000, CRC(f9c7bada) SHA1(60e545f829121b9a4f1100d9e85ac83797715e80) ) // 27c512
@@ -824,9 +675,6 @@ 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, 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 )
CONS( 1989, feagv5, feagv2, 0, eagv5, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/fidel_desdis.cpp b/src/mame/drivers/fidel_desdis.cpp
new file mode 100644
index 00000000000..aeae9e53604
--- /dev/null
+++ b/src/mame/drivers/fidel_desdis.cpp
@@ -0,0 +1,356 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+// thanks-to:Berger,yoyo_chessboard
+/******************************************************************************
+
+Designer 2100 Display (model 6106)
+----------------
+8KB RAM(MS6264L-10), 2*32KB ROM(27C256)
+WDC W65C02P-6 CPU, 6MHz XTAL
+4-digit LCD panel
+PCB label 510.1130A01
+
+Designer 2000 Display (model 6105): same hardware, no bookrom, 3MHz
+
+******************************************************************************
+
+Designer Mach III Master 2265 (model 6113)
+------------------------------------------
+80KB RAM(2*KM6264AL-10, 2*KM62256AP-10), 64KB ROM(2*WSI 27C256L-12)
+MC68HC000P12F CPU, 16MHz XTAL
+IRQ(IPL2) from 555 timer, 1.67ms low, 6us high
+PCB label 510.1134A02
+
+ROM address/data lines are scrambled, presumed for easy placement on PCB and not
+for obfuscation. I/O is nearly the same as Designer Display on 6502 hardware.
+
+Designer Mach IV Master 2325 (model 6129)
+-----------------------------------------
+32KB(4*P5164-70) + 512KB(TC518512PL-80) RAM, 64KB ROM(TMS 27C512-120JL)
+MC68EC020RP25 CPU, 20MHz XTAL
+PCB label 510.1149A01
+It has a green "Shift" led instead of red, and ROM is not scrambled.
+
+******************************************************************************/
+
+#include "emu.h"
+#include "includes/fidelbase.h"
+
+#include "cpu/m6502/r65c02.h"
+#include "cpu/m6502/m65sc02.h"
+#include "cpu/m68000/m68000.h"
+#include "sound/volt_reg.h"
+#include "speaker.h"
+
+// internal artwork
+#include "fidel_desdis.lh" // clickable
+#include "fidel_desdis_68kg.lh" // clickable
+#include "fidel_desdis_68kr.lh" // clickable
+
+
+namespace {
+
+class desdis_state : public fidelbase_state
+{
+public:
+ desdis_state(const machine_config &mconfig, device_type type, const char *tag) :
+ fidelbase_state(mconfig, type, tag)
+ { }
+
+ void fdes2000d(machine_config &config);
+ void fdes2100d(machine_config &config);
+
+ void init_fdes2100d();
+
+protected:
+ void fdes2100d_map(address_map &map);
+
+ // I/O handlers
+ virtual DECLARE_WRITE8_MEMBER(control_w);
+ virtual DECLARE_WRITE8_MEMBER(lcd_w);
+ virtual DECLARE_READ8_MEMBER(input_r);
+};
+
+class desmas_state : public desdis_state
+{
+public:
+ desmas_state(const machine_config &mconfig, device_type type, const char *tag) :
+ desdis_state(mconfig, type, tag)
+ { }
+
+ void fdes2265(machine_config &config);
+ void fdes2325(machine_config &config);
+
+ void init_fdes2265();
+
+private:
+ void fdes2265_map(address_map &map);
+ void fdes2325_map(address_map &map);
+
+ // I/O handlers, slightly different (control_w is d0 instead of d7, lcd_w is inverted)
+ virtual DECLARE_WRITE8_MEMBER(control_w) override { desdis_state::control_w(space, offset, data << 7); }
+ virtual DECLARE_WRITE8_MEMBER(lcd_w) override { desdis_state::lcd_w(space, offset, ~data); }
+};
+
+
+// init
+
+void desdis_state::init_fdes2100d()
+{
+ m_rombank->configure_entries(0, 2, memregion("rombank")->base(), 0x4000);
+}
+
+void desmas_state::init_fdes2265()
+{
+ u16 *rom = (u16*)memregion("maincpu")->base();
+ const u32 len = memregion("maincpu")->bytes() / 2;
+
+ // descramble data lines
+ for (int i = 0; i < len; i++)
+ rom[i] = bitswap<16>(rom[i], 15,14,8,13,9,12,10,11, 3,4,5,7,6,0,1,2);
+
+ // descramble address lines
+ std::vector<u16> buf(len);
+ memcpy(&buf[0], rom, len*2);
+ for (int i = 0; i < len; i++)
+ rom[i] = buf[bitswap<24>(i, 23,22,21,20,19,18,17,16, 15,14,13,12,11,8,10,9, 7,6,5,4,3,2,1,0)];
+}
+
+
+
+/******************************************************************************
+ Devices, I/O
+******************************************************************************/
+
+// TTL/generic
+
+WRITE8_MEMBER(desdis_state::control_w)
+{
+ u8 q3_old = m_led_select & 8;
+
+ // a0-a2,d7: 74259
+ u8 mask = 1 << offset;
+ m_led_select = (m_led_select & ~mask) | ((data & 0x80) ? 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 Q2: book rom A14
+ if (m_rombank != nullptr)
+ m_rombank->set_entry(~m_led_select >> 2 & 1);
+
+ // 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();
+}
+
+WRITE8_MEMBER(desdis_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);
+ for (int i = 0; i < 4; i++)
+ {
+ m_7seg_data = (m_7seg_data & ~mask) | ((data >> i & 1) ? 0 : mask);
+ mask <<= 8;
+ }
+}
+
+READ8_MEMBER(desdis_state::input_r)
+{
+ // a0-a2,d7: multiplexed inputs (active low)
+ return (read_inputs(9) >> offset & 1) ? 0 : 0x80;
+}
+
+
+
+/******************************************************************************
+ Address Maps
+******************************************************************************/
+
+void desdis_state::fdes2100d_map(address_map &map)
+{
+ map(0x0000, 0x1fff).ram();
+ map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(desdis_state::input_r), FUNC(desdis_state::control_w));
+ map(0x4000, 0x7fff).bankr("rombank");
+ map(0x6000, 0x6007).mirror(0x1ff8).w(FUNC(desdis_state::lcd_w));
+ map(0x8000, 0xffff).rom();
+}
+
+void desmas_state::fdes2265_map(address_map &map)
+{
+ map.unmap_value_high();
+ map(0x000000, 0x00ffff).rom();
+ map(0x000000, 0x00000f).w(FUNC(desmas_state::lcd_w)).umask16(0x00ff);
+ map(0x044000, 0x047fff).ram();
+ map(0x100000, 0x10ffff).ram();
+ map(0x140000, 0x14000f).r(FUNC(desmas_state::input_r)).umask16(0xff00);
+ map(0x140000, 0x14000f).w(FUNC(desmas_state::control_w)).umask16(0x00ff);
+}
+
+void desmas_state::fdes2325_map(address_map &map)
+{
+ map.unmap_value_high();
+ map(0x000000, 0x00ffff).rom();
+ 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();
+}
+
+
+
+
+/******************************************************************************
+ Input Ports
+******************************************************************************/
+
+static INPUT_PORTS_START( desdis )
+ 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
+
+
+
+/******************************************************************************
+ Machine Drivers
+******************************************************************************/
+
+void desdis_state::fdes2100d(machine_config &config)
+{
+ /* basic machine hardware */
+ M65C02(config, m_maincpu, 6_MHz_XTAL); // W65C02P-6
+ m_maincpu->set_addrmap(AS_PROGRAM, &desdis_state::fdes2100d_map);
+
+ const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K)
+ TIMER(config, m_irq_on).configure_periodic(FUNC(desdis_state::irq_on<M6502_IRQ_LINE>), irq_period);
+ m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us
+ TIMER(config, "irq_off").configure_periodic(FUNC(desdis_state::irq_off<M6502_IRQ_LINE>), 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);
+
+ /* sound hardware */
+ SPEAKER(config, "speaker").front_center();
+ DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.set_output(5.0);
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+}
+
+void desdis_state::fdes2000d(machine_config &config)
+{
+ fdes2100d(config);
+
+ /* basic machine hardware */
+ R65C02(config.replace(), m_maincpu, 3_MHz_XTAL); // R65C02P3
+ m_maincpu->set_addrmap(AS_PROGRAM, &desdis_state::fdes2100d_map);
+}
+
+void desmas_state::fdes2265(machine_config &config)
+{
+ /* basic machine hardware */
+ M68000(config, m_maincpu, 16_MHz_XTAL); // MC68HC000P12F
+ 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(desmas_state::irq_on<M68K_IRQ_4>), irq_period);
+ m_irq_on->set_start_delay(irq_period - attotime::from_nsec(6000)); // active for 6us
+ TIMER(config, "irq_off").configure_periodic(FUNC(desmas_state::irq_off<M68K_IRQ_4>), 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);
+
+ /* sound hardware */
+ SPEAKER(config, "speaker").front_center();
+ DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
+ vref.set_output(5.0);
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+}
+
+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, &desmas_state::fdes2325_map);
+
+ config.set_default_layout(layout_fidel_desdis_68kg);
+}
+
+
+
+/******************************************************************************
+ ROM Definitions
+******************************************************************************/
+
+ROM_START( fdes2100d ) // model 6106, PCB label 510.1130A01. The 'rev B' dump came from a post-release bugfix by Fidelity
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("i9_orange.ic9", 0x8000, 0x8000, CRC(83fec02a) SHA1(6f43ab05bc605061989b05d0592dbd184efff9d4) ) // WSI 27C256L-12
+
+ ROM_REGION( 0x8000, "rombank", 0 )
+ ROM_LOAD("bk3_white.ic10", 0x0000, 0x8000, CRC(3857cc35) SHA1(f073dafb9fd885c7ddb7fbff10e3653f343ef1c6) ) // WSI 27C256L-12
+ROM_END
+
+ROM_START( fdes2000d ) // model 6105, PCB label 510.1130A01
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("27c256.ic9", 0x8000, 0x8000, CRC(b136d1a1) SHA1(8438790a62f45284ff33a0255c5c89f526726d3e) ) // 27C256, no label
+
+ ROM_REGION( 0x8000, "rombank", ROMREGION_ERASEFF ) // no rom in ic10
+ROM_END
+
+
+ROM_START( fdes2265 ) // model 6113, PCB label 510.1134A02
+ ROM_REGION16_BE( 0x10000, "maincpu", 0 )
+ ROM_LOAD16_BYTE("13e_red.ic11", 0x00000, 0x08000, CRC(15a35628) SHA1(8213862e129951c6943a80f73cd0b63a31bb1357) ) // 27c256
+ ROM_LOAD16_BYTE("13o_blue.ic10", 0x00001, 0x08000, CRC(81ce7ab2) SHA1(f01a70bcf2fbfe66c7a77d3c4437d897e5cc682d) ) // "
+ROM_END
+
+ROM_START( fdes2325 ) // model 6129, PCB label 510.1149A01
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("61_29_white.ic10", 0x00000, 0x10000, CRC(f74157e1) SHA1(87f3f2d584e292f81593e053240d022cc477834d) ) // 27c512
+
+ ROM_REGION( 0x100, "pals", 0 )
+ ROM_LOAD("101-1097a01.ic19", 0x000, 0x100, NO_DUMP ) // PALCE16V8Q-25PC
+ROM_END
+
+} // anonymous namespace
+
+
+
+/******************************************************************************
+ Drivers
+******************************************************************************/
+
+// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
+CONS( 1988, fdes2100d, 0, 0, fdes2100d, desdis, desdis_state, init_fdes2100d, "Fidelity Electronics", "Designer 2100 Display (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
+CONS( 1988, fdes2000d, fdes2100d, 0, fdes2000d, desdis, desdis_state, init_fdes2100d, "Fidelity Electronics", "Designer 2000 Display", 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 )
diff --git a/src/mame/includes/fidel_desdis_common.h b/src/mame/includes/fidel_desdis_common.h
deleted file mode 100644
index c6721b32aa7..00000000000
--- a/src/mame/includes/fidel_desdis_common.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// 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
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 50419ca0fe2..6a6b57070f5 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -12849,6 +12849,12 @@ feversoc // (c) 2004
fgoal // TF (c) 1979 Taito Corporation
fgoala // MF (c) 1979 Taito Corporation
+@source:fidel_desdis.cpp
+fdes2000d //
+fdes2100d //
+fdes2265 //
+fdes2325 //
+
@source:fidel_sc6.cpp
fscc6 //
@@ -12862,8 +12868,6 @@ cscg // * German
cscsp // * Spanish
fdes2000 //
fdes2100 //
-fdes2000d //
-fdes2100d //
feasbu // EAS: Elite A/S Challenger (Budapest program, English)
feasbufr // * French
feasbug // * German
@@ -12908,8 +12912,6 @@ super9ccg // * German
super9ccsp // * Spanish
@source:fidel68k.cpp
-fdes2265 //
-fdes2325 //
feagv10 //
feagv11 //
feagv2 //
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index 5971cac2f34..0b7a45010f9 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -241,6 +241,7 @@ fb01.cpp
fc100.cpp
fccpu20.cpp
fccpu30.cpp
+fidel_desdis.cpp
fidel_sc6.cpp
fidel6502.cpp
fidel68k.cpp