summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2020-01-24 15:55:11 +0100
committer hap <happppp@users.noreply.github.com>2020-01-24 15:55:24 +0100
commit659e410ec6674cd53b7e2bfe7fc85e8c005dbd18 (patch)
tree8e4910d6f62d6f5ac951eed2557cbd5d34ba6c38
parentb2c486b0c2530425eb14d3012c4403d5251559cf (diff)
New working clones
------------------ Excel 68000 Mach IV 68020 Master 2325 [hap, Berger]
-rw-r--r--src/mame/drivers/fidel_as12.cpp2
-rw-r--r--src/mame/drivers/fidel_desdis.cpp7
-rw-r--r--src/mame/drivers/fidel_eag68k.cpp43
-rw-r--r--src/mame/drivers/fidel_excel.cpp8
-rw-r--r--src/mame/drivers/fidel_sc12.cpp8
-rw-r--r--src/mame/drivers/fidel_sc9.cpp2
-rw-r--r--src/mame/drivers/fidel_vsc.cpp2
-rw-r--r--src/mame/mame.lst1
8 files changed, 48 insertions, 25 deletions
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<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(as12_state::irq_off<M6502_IRQ_LINE>), 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<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);
@@ -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<M68K_IRQ_4>), 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<M68K_IRQ_4>), 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<M68K_IRQ_2>), 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<M68K_IRQ_2>), 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<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(excel_state::irq_off<M6502_IRQ_LINE>), 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<M6502_IRQ_LINE>), 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<M6502_IRQ_LINE>), 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<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(sc12_state::irq_off<M6502_IRQ_LINE>), 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<M6502_IRQ_LINE>), 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<M6502_IRQ_LINE>), 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<M6502_IRQ_LINE>), 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<M6502_IRQ_LINE>), 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<INPUT_LINE_NMI>), 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<INPUT_LINE_NMI>), 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 //