mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
New working clones
------------------ Excel 68000 Mach IV 68020 Master 2325 [hap, Berger]
This commit is contained in:
parent
b2c486b0c2
commit
659e410ec6
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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 )
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -13417,6 +13417,7 @@ fex68kb //
|
||||
fex68km2 //
|
||||
fex68km2a //
|
||||
fex68km3 //
|
||||
fex68km4 //
|
||||
|
||||
@source:fidel_elite.cpp
|
||||
feasbu //
|
||||
|
Loading…
Reference in New Issue
Block a user