diff --git a/src/mame/drivers/fidel_as12.cpp b/src/mame/drivers/fidel_as12.cpp index 5a578a71144..1e4cd37ee7e 100644 --- a/src/mame/drivers/fidel_as12.cpp +++ b/src/mame/drivers/fidel_as12.cpp @@ -215,7 +215,7 @@ void as12_state::as12(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &as12_state::div_trampoline); ADDRESS_MAP_BANK(config, m_mainmap).set_map(&as12_state::main_map).set_options(ENDIANNESS_LITTLE, 8, 16); - const attotime irq_period = attotime::from_hz(585); // from 556 timer (22nF, 110K, 1K) + const attotime irq_period = attotime::from_hz(600); // from 556 timer (22nF, 110K, 1K), ideal frequency is 600Hz TIMER(config, m_irq_on).configure_periodic(FUNC(as12_state::irq_on), 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(as12_state::irq_off), irq_period); diff --git a/src/mame/drivers/fidel_desdis.cpp b/src/mame/drivers/fidel_desdis.cpp index 684338992d3..ad8126b6f0a 100644 --- a/src/mame/drivers/fidel_desdis.cpp +++ b/src/mame/drivers/fidel_desdis.cpp @@ -296,7 +296,7 @@ void desdis_state::fdes2100d(machine_config &config) 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) + const attotime irq_period = attotime::from_hz(600); // from 556 timer (22nF, 102K, 1K), ideal frequency is 600Hz TIMER(config, m_irq_on).configure_periodic(FUNC(desdis_state::irq_on), 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), irq_period); @@ -333,10 +333,7 @@ void desmas_state::fdes2265(machine_config &config) M68000(config.replace(), 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.replace(), 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.replace(), "irq_off").configure_periodic(FUNC(desmas_state::irq_off), irq_period); + m_irq_on->set_start_delay(attotime::from_hz(600) - attotime::from_usec(6)); // irq active for 6us config.set_default_layout(layout_fidel_desdis_68kr); } diff --git a/src/mame/drivers/fidel_eag68k.cpp b/src/mame/drivers/fidel_eag68k.cpp index 8425cdae0b9..4b34e968533 100644 --- a/src/mame/drivers/fidel_eag68k.cpp +++ b/src/mame/drivers/fidel_eag68k.cpp @@ -5,10 +5,12 @@ Fidelity 68000-based Elite Avant Garde driver For 6502-based EAG, see fidel_elite.cpp + Excel 68000 I/O is very similar to EAG, so it's handled in this driver as well TODO: -- USART is not emulated +- unemulated waitstates with DTACK +- EAG USART is not emulated - V11 CPU should be M68EC060, not yet emulated. Now using M68EC040 in its place at twice the frequency due to lack of superscalar. - V11 beeper is too high pitched, related to wrong CPU type too? But even at 72MHz @@ -25,10 +27,13 @@ Excel 68000 (model 6094) overview: There's room for 2 SIMMs at U22 and U23, unpopulated in Excel 68000 and Mach III. Mach II has 2*64KB DRAM with a MB1422A DRAM controller @ 25MHz. Mach III has wire mods from U22/U23 to U8/U9(2*8KB + 2*32KB piggybacked). -Mach IV has 2*256KB DRAM, and a daughterboard(510.1123B01) for the 68020. +Mach IV has 2*256KB DRAM, and a daughterboard(510.1123B01) for the 68020 + 32KB RAM. I/O is via TTL, overall very similar to EAG. +fex68km4 continuously tests RAM at boot and displays "512", this is normal. +To start, hold New Game or Clear. + ******************************************************************************* Elite Avant Garde (EAG, model 6114) @@ -294,12 +299,14 @@ public: void fex68k(machine_config &config); void fex68km2(machine_config &config); void fex68km3(machine_config &config); + void fex68km4(machine_config &config); private: // address maps void fex68k_map(address_map &map); void fex68km2_map(address_map &map); void fex68km3_map(address_map &map); + void fex68km4_map(address_map &map); }; @@ -438,6 +445,18 @@ void excel68k_state::fex68km3_map(address_map &map) map(0x200000, 0x20ffff).ram(); } +void excel68k_state::fex68km4_map(address_map &map) +{ + map(0x00000000, 0x0000ffff).rom(); + map(0x00000000, 0x0000000f).mirror(0x00fff0).w(FUNC(excel68k_state::leds_w)).umask32(0x00ff00ff); + map(0x00000000, 0x0000000f).mirror(0x00fff0).w(FUNC(excel68k_state::digit_w)).umask32(0xff00ff00); + map(0x00044000, 0x00047fff).ram(); // unused? + map(0x00100000, 0x0010000f).mirror(0x03fff0).r(FUNC(excel68k_state::input1_r)).umask32(0x00ff00ff); + map(0x00140000, 0x0014000f).mirror(0x03fff0).w(FUNC(excel68k_state::mux_w)).umask32(0x00ff00ff); + map(0x00200000, 0x0027ffff).ram(); + map(0x00400000, 0x00407fff).ram(); +} + // EAG @@ -549,7 +568,7 @@ void excel68k_state::fex68k(machine_config &config) M68000(config, m_maincpu, 12_MHz_XTAL); // HD68HC000P12 m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68k_map); - const attotime irq_period = attotime::from_hz(618); // theoretical frequency from 556 timer (22nF, 91K + 20K POT @ 14.8K, 0.1K), measurement was 580Hz + const attotime irq_period = attotime::from_hz(600); // 556 timer (22nF, 91K + 20K POT @ 14.8K, 0.1K), ideal is 600Hz (measured 580Hz, 604Hz, 632Hz) TIMER(config, m_irq_on).configure_periodic(FUNC(excel68k_state::irq_on), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_nsec(1528)); // active for 1.525us TIMER(config, "irq_off").configure_periodic(FUNC(excel68k_state::irq_off), irq_period); @@ -586,6 +605,17 @@ void excel68k_state::fex68km3(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68km3_map); } +void excel68k_state::fex68km4(machine_config &config) +{ + fex68k(config); + + /* basic machine hardware */ + M68020(config.replace(), m_maincpu, 20_MHz_XTAL); // XC68020RC16 or MC68020RC20E + m_maincpu->set_addrmap(AS_PROGRAM, &excel68k_state::fex68km4_map); + + m_irq_on->set_start_delay(attotime::from_hz(600) - attotime::from_usec(10)); // irq active for 10us +} + void eag_state::eag_base(machine_config &config) { /* basic machine hardware */ @@ -743,6 +773,12 @@ ROM_START( fex68km3 ) // model 6098, PCB label 510.1120B01 ROM_LOAD16_BYTE("mo_yellow.u7", 0x00001, 0x08000, CRC(b96b0b5f) SHA1(281145be802efb38ed764aecb26b511dcd71cb87) ) // " ROM_END +ROM_START( fex68km4 ) // model 6110, PCB label 510.1120B01 + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD16_BYTE("68020_even_master_2325.u6", 0x00000, 0x08000, CRC(13ea816c) SHA1(98d00fc382ddcbccb0a47c3f8d7fc73f30a15fbd) ) + ROM_LOAD16_BYTE("68020_odd_master_2325.u7", 0x00001, 0x08000, CRC(d24c7b54) SHA1(3204fd600786792a618965715990c44890cc7119) ) +ROM_END + ROM_START( feagv2 ) ROM_REGION16_BE( 0x20000, "maincpu", 0 ) @@ -814,6 +850,7 @@ CONS( 1987, fex68kb, fex68k, 0, fex68k, excel68k, excel68k_state, empty_ini CONS( 1988, fex68km2, fex68k, 0, fex68km2, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1988, fex68km2a, fex68k, 0, fex68km2, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach II (rev. C+, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1988, fex68km3, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1989, fex68km4, fex68k, 0, fex68km4, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach IV 68020 Master 2325", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1989, feagv2, 0, 0, eagv2, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1989, feagv3, feagv2, 0, eagv3, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/fidel_excel.cpp b/src/mame/drivers/fidel_excel.cpp index 0f4c3ec2328..5d15aa74f45 100644 --- a/src/mame/drivers/fidel_excel.cpp +++ b/src/mame/drivers/fidel_excel.cpp @@ -399,7 +399,7 @@ void excel_state::fexcel(machine_config &config) M65SC02(config, m_maincpu, 12_MHz_XTAL/4); // G65SC102P-3, 12.0M ceramic resonator m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcel_map); - const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K) + const attotime irq_period = attotime::from_hz(600); // from 556 timer (22nF, 102K, 1K), ideal frequency is 600Hz TIMER(config, m_irq_on).configure_periodic(FUNC(excel_state::irq_on), 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(excel_state::irq_off), irq_period); @@ -462,12 +462,6 @@ void excel_state::fdes2100(machine_config &config) M65C02(config.replace(), m_maincpu, 5_MHz_XTAL); // WDC 65C02 m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcelb_map); - // change irq timer frequency - const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K) - TIMER(config.replace(), m_irq_on).configure_periodic(FUNC(excel_state::irq_on), irq_period); - m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us - TIMER(config.replace(), "irq_off").configure_periodic(FUNC(excel_state::irq_off), irq_period); - config.set_default_layout(layout_fidel_des); } diff --git a/src/mame/drivers/fidel_sc12.cpp b/src/mame/drivers/fidel_sc12.cpp index 40a77100192..81d9e395a60 100644 --- a/src/mame/drivers/fidel_sc12.cpp +++ b/src/mame/drivers/fidel_sc12.cpp @@ -234,7 +234,7 @@ void sc12_state::sc12(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &sc12_state::div_trampoline); ADDRESS_MAP_BANK(config, m_mainmap).set_map(&sc12_state::main_map).set_options(ENDIANNESS_LITTLE, 8, 16); - const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K) + const attotime irq_period = attotime::from_hz(600); // from 556 timer (22nF, 102K, 1K), ideal frequency is 600Hz TIMER(config, m_irq_on).configure_periodic(FUNC(sc12_state::irq_on), 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(sc12_state::irq_off), irq_period); @@ -265,12 +265,6 @@ void sc12_state::sc12b(machine_config &config) /* basic machine hardware */ m_maincpu->set_clock(4_MHz_XTAL); // R65C02P4 - - // change irq timer frequency - const attotime irq_period = attotime::from_hz(596); // from 556 timer (22nF, 82K+26K, 1K) - TIMER(config.replace(), m_irq_on).configure_periodic(FUNC(sc12_state::irq_on), irq_period); - m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us - TIMER(config.replace(), "irq_off").configure_periodic(FUNC(sc12_state::irq_off), irq_period); } diff --git a/src/mame/drivers/fidel_sc9.cpp b/src/mame/drivers/fidel_sc9.cpp index 97027b125da..764dd048735 100644 --- a/src/mame/drivers/fidel_sc9.cpp +++ b/src/mame/drivers/fidel_sc9.cpp @@ -280,7 +280,7 @@ void sc9_state::sc9d(machine_config &config) M6502(config, m_maincpu, 3.9_MHz_XTAL/2); // R6502AP, 3.9MHz resonator m_maincpu->set_addrmap(AS_PROGRAM, &sc9_state::sc9d_map); - const attotime irq_period = attotime::from_hz(610); // from 555 timer (22nF, 102K, 2.7K) + const attotime irq_period = attotime::from_hz(600); // from 555 timer (22nF, 102K, 2.7K), ideal frequency is 600Hz TIMER(config, m_irq_on).configure_periodic(FUNC(sc9_state::irq_on), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_usec(41)); // active for 41us TIMER(config, "irq_off").configure_periodic(FUNC(sc9_state::irq_off), irq_period); diff --git a/src/mame/drivers/fidel_vsc.cpp b/src/mame/drivers/fidel_vsc.cpp index 5892becc7ba..f2038f1cec0 100644 --- a/src/mame/drivers/fidel_vsc.cpp +++ b/src/mame/drivers/fidel_vsc.cpp @@ -426,7 +426,7 @@ void vsc_state::vsc(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &vsc_state::main_map); m_maincpu->set_addrmap(AS_IO, &vsc_state::main_io); - const attotime irq_period = attotime::from_hz(587); // 555 timer, measured + const attotime irq_period = attotime::from_hz(600); // 555 timer, ideal frequency is 600Hz (measurement was 587Hz) TIMER(config, m_irq_on).configure_periodic(FUNC(vsc_state::irq_on), irq_period); m_irq_on->set_start_delay(irq_period - attotime::from_usec(845)); // active for 0.845ms (approx half) TIMER(config, "irq_off").configure_periodic(FUNC(vsc_state::irq_off), irq_period); diff --git a/src/mame/mame.lst b/src/mame/mame.lst index d9102a4d837..b5d66f811b0 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -13417,6 +13417,7 @@ fex68kb // fex68km2 // fex68km2a // fex68km3 // +fex68km4 // @source:fidel_elite.cpp feasbu //