From 68b09f8d89ab2731893ed5ae0184c327e9084172 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 23 Feb 2019 21:52:15 +0100 Subject: New working clone added ---------------- Fidelity Elite Avant Garde (model 6081) [hap, Berger] --- src/mame/drivers/fidel_elite.cpp | 109 +++++++++++++++++++++++++++++---------- src/mame/mame.lst | 4 ++ 2 files changed, 87 insertions(+), 26 deletions(-) diff --git a/src/mame/drivers/fidel_elite.cpp b/src/mame/drivers/fidel_elite.cpp index 6a6a5fa96be..593f4e3332c 100644 --- a/src/mame/drivers/fidel_elite.cpp +++ b/src/mame/drivers/fidel_elite.cpp @@ -69,19 +69,19 @@ public: // machine drivers void eas(machine_config &config); void eag(machine_config &config); + void eag2100(machine_config &config); void pc(machine_config &config); template void init_eag(); private: - void eas_base(machine_config &config); - // devices/pointers optional_device m_ppi8255; // address maps void eas_map(address_map &map); void eag_map(address_map &map); + void eag2100_map(address_map &map); void pc_map(address_map &map); // I/O handlers @@ -218,15 +218,20 @@ void elite_state::eas_map(address_map &map) void elite_state::eag_map(address_map &map) { map.unmap_value_high(); - map(0x0000, 0x1fff).ram().share("nvram"); + map(0x0000, 0x1fff).ram().share("nvram.ic8"); map(0x2000, 0x5fff).r(FUNC(elite_state::cartridge_r)); map(0x7000, 0x7003).rw(m_ppi8255, FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0x7020, 0x7027).w(FUNC(elite_state::segment_w)).nopr(); map(0x7030, 0x7037).w(FUNC(elite_state::led_w)).nopr(); map(0x7050, 0x7050).r(FUNC(elite_state::input_r)); - map(0x8000, 0x9fff).ram(); + map(0x8000, 0x9fff).ram().share("nvram.ic6"); + map(0xa000, 0xffff).rom(); +} + +void elite_state::eag2100_map(address_map &map) +{ + eag_map(map); map(0xa000, 0xbfff).bankr("rombank"); - map(0xc000, 0xffff).rom(); } void elite_state::pc_map(address_map &map) @@ -304,14 +309,14 @@ INPUT_PORTS_END Machine Drivers ******************************************************************************/ -void elite_state::eas_base(machine_config &config) +void elite_state::pc(machine_config &config) { /* basic machine hardware */ - R65C02(config, m_maincpu, 3_MHz_XTAL); + R65C02(config, m_maincpu, 4_MHz_XTAL); // R65C02P4 m_maincpu->set_addrmap(AS_PROGRAM, &elite_state::div_trampoline); - ADDRESS_MAP_BANK(config, m_mainmap).set_map(&elite_state::eas_map).set_options(ENDIANNESS_LITTLE, 8, 16); + ADDRESS_MAP_BANK(config, m_mainmap).set_map(&elite_state::pc_map).set_options(ENDIANNESS_LITTLE, 8, 16); - TIMER(config, "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(3_MHz_XTAL)); + TIMER(config, "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(4_MHz_XTAL)); const attotime irq_period = attotime::from_hz(38.4_kHz_XTAL/64); // through 4060 IC, 600Hz TIMER(config, m_irq_on).configure_periodic(FUNC(elite_state::irq_on), irq_period); @@ -319,7 +324,7 @@ void elite_state::eas_base(machine_config &config) TIMER(config, "irq_off").configure_periodic(FUNC(elite_state::irq_off), irq_period); TIMER(config, "display_decay").configure_periodic(FUNC(elite_state::display_decay_tick), attotime::from_msec(1)); - config.set_default_layout(layout_fidel_eas); + config.set_default_layout(layout_fidel_pc); /* sound hardware */ SPEAKER(config, "speaker").front_center(); @@ -339,7 +344,12 @@ void elite_state::eas_base(machine_config &config) void elite_state::eas(machine_config &config) { - eas_base(config); + pc(config); + + /* basic machine hardware */ + m_maincpu->set_clock(3_MHz_XTAL); + m_mainmap->set_addrmap(AS_PROGRAM, &elite_state::eas_map); + TIMER(config.replace(), "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(3_MHz_XTAL)); I8255(config, m_ppi8255); // port B: input, port A & C: output m_ppi8255->out_pa_callback().set(FUNC(elite_state::ppi_porta_w)); @@ -348,18 +358,8 @@ void elite_state::eas(machine_config &config) m_ppi8255->out_pc_callback().set(FUNC(elite_state::ppi_portc_w)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); -} -void elite_state::pc(machine_config &config) -{ - eas_base(config); - - /* basic machine hardware */ - m_maincpu->set_clock(4_MHz_XTAL); // R65C02P4 - m_mainmap->set_addrmap(AS_PROGRAM, &elite_state::pc_map); - TIMER(config.replace(), "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(4_MHz_XTAL)); - - config.set_default_layout(layout_fidel_pc); + config.set_default_layout(layout_fidel_eas); } void elite_state::eag(machine_config &config) @@ -371,9 +371,21 @@ void elite_state::eag(machine_config &config) m_mainmap->set_addrmap(AS_PROGRAM, &elite_state::eag_map); TIMER(config.replace(), "dummy_timer").configure_periodic(timer_device::expired_delegate(), attotime::from_hz(5_MHz_XTAL)); + config.device_remove("nvram"); + NVRAM(config, "nvram.ic8", nvram_device::DEFAULT_ALL_0); + NVRAM(config, "nvram.ic6", nvram_device::DEFAULT_ALL_0); + config.set_default_layout(layout_fidel_eag); } +void elite_state::eag2100(machine_config &config) +{ + eag(config); + + /* basic machine hardware */ + m_mainmap->set_addrmap(AS_PROGRAM, &elite_state::eag2100_map); +} + /****************************************************************************** @@ -659,6 +671,47 @@ ROM_START( feag2100fr ) ROM_LOAD("101-64105", 0x0000, 0x2000, BAD_DUMP CRC(fe8c5c18) SHA1(2b64279ab3747ee81c86963c13e78321c6cfa3a3) ) // taken from fexcelv, assume correct ROM_END +ROM_START( feag ) // model 6081, aka "Mobile Master" + ROM_REGION( 0x10000, "mainmap", 0 ) + ROM_LOAD("eg_orange.ic9", 0xa000, 0x2000, CRC(df9e7e74) SHA1(db76750eba5515213ecce07402c4d974c14e1a23) ) // M5L2764K, orange sticker + ROM_LOAD("eg_black.ic5", 0xc000, 0x2000, CRC(a5f6f295) SHA1(319f00d4b7a1704a3ca722c40f4096004b4b89d2) ) // M5L2764K, black sticker + ROM_LOAD("eg_green.ic4", 0xe000, 0x2000, CRC(1dc6508a) SHA1(6f2e730b216bfb900074d1d786124fc3cb038a8d) ) // M5L2764K, green sticker + + ROM_REGION( 0x2000, "speech", 0 ) + ROM_LOAD("101-32107", 0x0000, 0x1000, BAD_DUMP CRC(f35784f9) SHA1(348e54a7fa1e8091f89ac656b4da22f28ca2e44d) ) // taken from csc, assume correct + ROM_RELOAD( 0x1000, 0x1000) +ROM_END + +ROM_START( feagg ) // model 6081, aka "Mobile Master" + ROM_REGION( 0x10000, "mainmap", 0 ) + ROM_LOAD("eg_orange.ic9", 0xa000, 0x2000, CRC(df9e7e74) SHA1(db76750eba5515213ecce07402c4d974c14e1a23) ) // M5L2764K, orange sticker + ROM_LOAD("eg_black.ic5", 0xc000, 0x2000, CRC(a5f6f295) SHA1(319f00d4b7a1704a3ca722c40f4096004b4b89d2) ) // M5L2764K, black sticker + ROM_LOAD("eg_green.ic4", 0xe000, 0x2000, CRC(1dc6508a) SHA1(6f2e730b216bfb900074d1d786124fc3cb038a8d) ) // M5L2764K, green sticker + + ROM_REGION( 0x2000, "speech", 0 ) + ROM_LOAD("101-64101", 0x0000, 0x2000, BAD_DUMP CRC(6c85e310) SHA1(20d1d6543c1e6a1f04184a2df2a468f33faec3ff) ) // taken from fexcelv, assume correct +ROM_END + +ROM_START( feagsp ) // model 6081, aka "Mobile Master" + ROM_REGION( 0x10000, "mainmap", 0 ) + ROM_LOAD("eg_orange.ic9", 0xa000, 0x2000, CRC(df9e7e74) SHA1(db76750eba5515213ecce07402c4d974c14e1a23) ) // M5L2764K, orange sticker + ROM_LOAD("eg_black.ic5", 0xc000, 0x2000, CRC(a5f6f295) SHA1(319f00d4b7a1704a3ca722c40f4096004b4b89d2) ) // M5L2764K, black sticker + ROM_LOAD("eg_green.ic4", 0xe000, 0x2000, CRC(1dc6508a) SHA1(6f2e730b216bfb900074d1d786124fc3cb038a8d) ) // M5L2764K, green sticker + + ROM_REGION( 0x2000, "speech", 0 ) + ROM_LOAD("101-64106", 0x0000, 0x2000, BAD_DUMP CRC(8766e128) SHA1(78c7413bf240159720b131ab70bfbdf4e86eb1e9) ) // taken from vcc/fexcelv, assume correct +ROM_END + +ROM_START( feagfr ) // model 6081, aka "Mobile Master" + ROM_REGION( 0x10000, "mainmap", 0 ) + ROM_LOAD("eg_orange.ic9", 0xa000, 0x2000, CRC(df9e7e74) SHA1(db76750eba5515213ecce07402c4d974c14e1a23) ) // M5L2764K, orange sticker + ROM_LOAD("eg_black.ic5", 0xc000, 0x2000, CRC(a5f6f295) SHA1(319f00d4b7a1704a3ca722c40f4096004b4b89d2) ) // M5L2764K, black sticker + ROM_LOAD("eg_green.ic4", 0xe000, 0x2000, CRC(1dc6508a) SHA1(6f2e730b216bfb900074d1d786124fc3cb038a8d) ) // M5L2764K, green sticker + + ROM_REGION( 0x2000, "speech", 0 ) + ROM_LOAD("101-64105", 0x0000, 0x2000, BAD_DUMP CRC(fe8c5c18) SHA1(2b64279ab3747ee81c86963c13e78321c6cfa3a3) ) // taken from fexcelv, assume correct +ROM_END + } // anonymous namespace @@ -686,7 +739,11 @@ CONS( 1983, fpresbug, fpres, 0, pc, eas, elite_state, init_language< CONS( 1983, fpresbusp, fpres, 0, pc, eas, elite_state, init_language<2>, "Fidelity Electronics", "Prestige Challenger (Budapest program, Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) CONS( 1983, fpresbufr, fpres, 0, pc, eas, elite_state, init_language<3>, "Fidelity Electronics", "Prestige Challenger (Budapest program, French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) -CONS( 1986, feag2100, 0, 0, eag, eag, elite_state, init_eag<0>, "Fidelity Electronics", "Elite Avant Garde 2100 (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) -CONS( 1986, feag2100g, feag2100, 0, eag, eag, elite_state, init_eag<1>, "Fidelity Electronics", "Elite Avant Garde 2100 (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) -CONS( 1986, feag2100sp, feag2100, 0, eag, eag, elite_state, init_eag<2>, "Fidelity Electronics", "Elite Avant Garde 2100 (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) -CONS( 1986, feag2100fr, feag2100, 0, eag, eag, elite_state, init_eag<3>, "Fidelity Electronics", "Elite Avant Garde 2100 (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) +CONS( 1986, feag2100, 0, 0, eag2100, eag, elite_state, init_eag<0>, "Fidelity Electronics", "Elite Avant Garde 2100 (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) +CONS( 1986, feag2100g, feag2100, 0, eag2100, eag, elite_state, init_eag<1>, "Fidelity Electronics", "Elite Avant Garde 2100 (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) +CONS( 1986, feag2100sp, feag2100, 0, eag2100, eag, elite_state, init_eag<2>, "Fidelity Electronics", "Elite Avant Garde 2100 (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) +CONS( 1986, feag2100fr, feag2100, 0, eag2100, eag, elite_state, init_eag<3>, "Fidelity Electronics", "Elite Avant Garde 2100 (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) +CONS( 1986, feag, feag2100, 0, eag, eag, elite_state, init_language<0>, "Fidelity Electronics", "Elite Avant Garde (model 6081, English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) +CONS( 1986, feagg, feag2100, 0, eag, eag, elite_state, init_language<1>, "Fidelity Electronics", "Elite Avant Garde (model 6081, German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) +CONS( 1986, feagsp, feag2100, 0, eag, eag, elite_state, init_language<2>, "Fidelity Electronics", "Elite Avant Garde (model 6081, Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) +CONS( 1986, feagfr, feag2100, 0, eag, eag, elite_state, init_language<3>, "Fidelity Electronics", "Elite Avant Garde (model 6081, French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index aef1796322e..71a88e86498 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -12917,6 +12917,10 @@ feasgla // EAS: Elite A/S Challenger (Glasgow program, E feasglafr // * French feasglag // * German feasglasp // * Spanish +feag // +feagfr // +feagg // +feagsp // feag2100 // EAG: Elite Avant Garde 2100 (English) feag2100fr // * French feag2100g // * German -- cgit v1.2.3