New working systems

-------------------
Star Trek: 25th Anniversary (handheld) [hap, Sean Riddle, Mr. Do]
Top Gun: Second Mission (handheld) [hap, Sean Riddle]
Elite Premiere [hap, Berger]
This commit is contained in:
hap 2023-09-08 19:19:19 +02:00
parent 7b45bf1403
commit 8a333d14e0
7 changed files with 400 additions and 61 deletions

View File

@ -15,7 +15,7 @@ It was not manufactured by Elektor, only described as a homebrew project.
FN 1 = new game, FN 2 = set level, FN 3 = principle variation.
Moves are confirmed by pressing GO twice.
The program is the same for all versions, only the display differs.
The chess program is the same for all versions, only the display differs.
Hardware notes:

View File

@ -5,7 +5,7 @@
Fidelity Chesster Challenger
These were made after Hegener + Glaser took over Fidelity(design phase started
These were made after Hegener + Glaser took over Fidelity (design phase started
before that). Kishon Chesster was released under both Fidelity, and Mephisto brands.
********************************************************************************

View File

@ -10,7 +10,7 @@ Excel 68000 I/O is very similar to EAG, so it's handled in this driver as well
TODO:
- unemulated waitstates with DTACK
- EAG USART is not emulated, conflict with input2_r?
- EAG USART doesn't work right? it should be able to connect to a serial printer
- V10 CPU emulation is too slow, MAME 68040 opcode timing is same as 68030 but in
reality it is much faster, same goes for V11 of course (see note below)
- V11 CPU should be M68EC060, not yet emulated. Now using M68EC040 in its place
@ -19,6 +19,8 @@ TODO:
- Do the opening book modules work? It detects the rom, but then does nothing
with it. Maybe support is limited since the basic CB9/CB16 modules have no use
on newer chesscomputers with a large internal opening library.
- does premiere only use half of the nvram? 0x600000-0x603fff seems unused
- premiere unknown reads/writes to 0x500000 with the Vancouver program
Currently(May 2020) when compared to the real chesscomputers, to get closer to the
actual speed, overclock V10 and V11 to 230%. This can be done by starting MAME
@ -45,8 +47,8 @@ To start, hold New Game or Clear.
********************************************************************************
Elite Avant Garde (EAG, model 6114)
-----------------------------------
Elite Avant Garde 2265 (EAG, model 6114)
----------------------------------------
There are 5 versions of model 6114(V1 to V5):
@ -98,15 +100,15 @@ Memory map: (of what is known)
********************************************************************************
Elite Avant Garde (EAG, model 6117)
-----------------------------------
Elite Avant Garde 2325 (EAG, model 6117)
----------------------------------------
There are 6 versions of model 6117(V6 to V11). From a programmer's point of view,
the hardware is very similar to model 6114.
V6: 68020, 512KB hashtable RAM
V7: 68020, 1MB h.RAM
V8: 2*68020, 512KB+128KB h.RAM
V8: 2*68020, 512KB+128KB h.RAM (unreleased?)
V9: 68030, 1MB h.RAM
V10: 68040, 1MB h.RAM
V11: 68060, high speed, 2MB h.RAM (half unused?)
@ -154,7 +156,7 @@ V11 Hardware info:
- MC68EC060RC75 CPU, 36MHz XTAL(36MHz bus, 72MHz CPU), CPU cooler required
- 4*CXK5863AP-20 8KB SRAM, 4*K6X4008C1F-DF55 512KB CMOS SRAM
- 4*M27C256B 32KB EPROM, 2*AT28C64 8KB EEPROM, 5*GAL16V8D
- NEC D71051C USART, assume 8MHz, on quick glance it's same as the OKI USART
- NEC D71051C USART, on quick glance it's same as the OKI USART
- same as 6114: NE555, SN74HC4060, module slot, chessboard, ..
This is a custom overclocked V10, manufactured by Wilfried Bucke. PCB is marked:
@ -168,18 +170,46 @@ V1x Memory map:
280000-37FFFF: hashtable SRAM
B0000x-xxxxxx: see V7, -800000
********************************************************************************
Elite Premiere (model 6131)
---------------------------
This 2-in-1 chesscomputer was manufactured after Fidelity became a H+G subsidiary,
it's still Fidelity branded. It has a switch where the module slot used to be,
for selecting between Vancouver (Richard Lang) and 2265 (Spracklen's) programs.
The 2265 ROM half is almost identical to EAG V2 (the elite_1.6 one), the handful
of bytes difference is due to the changed hash RAM start address.
The switch is not supposed to be flipped while power is on, hence MAME will only
check it at reset (otherwise, the CPU will crash and may overwrite NVRAM). Each
program has its own NVRAM bank, so unfortunately the user can't save the game on
one program and then analyze or continue on the other.
Hardware info:
--------------
- TMP68HC000P-16, 16MHz XTAL
- 256KB ROM (2*M27C1001), 256KB RAM (2*TC551001PL-10)
- 64KB battery-backed RAM (2*KM62256AP-10), Dallas DS1210
- OKI M82C51A-2 USART, 4.9152MHz XTAL
RAM can't be expanded, there are MB1422A and SIMM PCB markings, but unpopulated.
The I/O remains the same as EAG V2.
*******************************************************************************/
#include "emu.h"
#include "bus/generic/carts.h"
#include "bus/generic/slot.h"
#include "bus/rs232/rs232.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m68000/m68020.h"
#include "cpu/m68000/m68030.h"
#include "cpu/m68000/m68040.h"
#include "machine/clock.h"
#include "machine/gen_latch.h"
#include "machine/i8251.h"
#include "machine/ram.h"
#include "machine/nvram.h"
#include "machine/sensorboard.h"
@ -205,6 +235,7 @@ public:
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_ram(*this, "ram"),
m_usart(*this, "usart"),
m_board(*this, "board"),
m_display(*this, "display"),
m_dac(*this, "dac"),
@ -222,17 +253,22 @@ public:
void init_eag();
DECLARE_INPUT_CHANGED_MEMBER(in1_changed) { update_dsr(); }
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
void eag_base(machine_config &config);
// devices/pointers
required_device<m68000_base_device> m_maincpu;
optional_device<ram_device> m_ram;
optional_device<i8251_device> m_usart;
required_device<sensorboard_device> m_board;
required_device<pwm_display_device> m_display;
required_device<dac_bit_interface> m_dac;
optional_ioport_array<2> m_inputs;
optional_ioport_array<3> m_inputs;
// address maps
void eag_map(address_map &map);
@ -241,9 +277,9 @@ protected:
// I/O handlers
void update_display();
virtual void mux_w(offs_t offset, u8 data);
u8 input1_r(offs_t offset);
u8 input2_r();
void update_dsr();
void mux_w(offs_t offset, u8 data);
u8 input_r(offs_t offset);
void leds_w(offs_t offset, u8 data);
void digit_w(offs_t offset, u8 data);
@ -261,6 +297,11 @@ void eag_state::machine_start()
save_item(NAME(m_led_data));
}
void eag_state::machine_reset()
{
update_dsr();
}
// EAG V5
class eagv5_state : public eag_state
@ -292,6 +333,54 @@ private:
u8 sub_ack_r();
};
// Elite Premiere
class premiere_state : public eag_state
{
public:
premiere_state(const machine_config &mconfig, device_type type, const char *tag) :
eag_state(mconfig, type, tag),
m_nvram(*this, "nvram", 0x10000, ENDIANNESS_BIG),
m_nvrambank(*this, "nvrambank"),
m_rombank(*this, "rombank")
{ }
// machine configs
void premiere(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
private:
// devices/pointers
memory_share_creator<u16> m_nvram;
required_memory_bank m_nvrambank;
required_memory_bank m_rombank;
// address maps
void main_map(address_map &map);
};
void premiere_state::machine_start()
{
eag_state::machine_start();
// init banks
m_rombank->configure_entries(0, 2, memregion("maincpu")->base(), 0x20000);
m_nvrambank->configure_entries(0, 2, m_nvram, 0x8000);
}
void premiere_state::machine_reset()
{
eag_state::machine_reset();
// program switch directly selects bank
const u8 bank = m_inputs[2]->read() & 1;
m_rombank->set_entry(bank);
m_nvrambank->set_entry(bank);
}
// Excel 68000
class excel68k_state : public eag_state
@ -333,6 +422,13 @@ void eag_state::update_display()
m_display->matrix(1 << m_select, m_led_data << 8 | seg_data);
}
void eag_state::update_dsr()
{
// USART DSR: 3 more buttons on EAG
if (m_usart != nullptr)
m_usart->write_dsr(!BIT(m_inputs[1]->read(), m_select));
}
void eag_state::mux_w(offs_t offset, u8 data)
{
// a1-a3,d0: 74259
@ -341,6 +437,7 @@ void eag_state::mux_w(offs_t offset, u8 data)
// 74259 Q0-Q3: 74145 A-D (Q4-Q7 N/C)
m_select &= 0xf;
update_dsr();
// 74145 0-8: input mux, digit/led select
// 74145 9: speaker out
@ -348,7 +445,7 @@ void eag_state::mux_w(offs_t offset, u8 data)
update_display();
}
u8 eag_state::input1_r(offs_t offset)
u8 eag_state::input_r(offs_t offset)
{
u8 data = 0;
@ -370,12 +467,6 @@ u8 eag_state::input1_r(offs_t offset)
return (data >> offset & 1) ? 0 : 0x80;
}
u8 eag_state::input2_r()
{
// d7: 3 more buttons on EAG
return (BIT(m_inputs[1]->read(), m_select)) ? 0x80 : 0;
}
void eag_state::leds_w(offs_t offset, u8 data)
{
// a1-a3,d0: led data
@ -425,7 +516,7 @@ void excel68k_state::fex68k_map(address_map &map)
map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(excel68k_state::leds_w)).umask16(0x00ff);
map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(excel68k_state::digit_w)).umask16(0xff00);
map(0x044000, 0x047fff).ram();
map(0x100000, 0x10000f).mirror(0x03fff0).r(FUNC(excel68k_state::input1_r)).umask16(0x00ff);
map(0x100000, 0x10000f).mirror(0x03fff0).r(FUNC(excel68k_state::input_r)).umask16(0x00ff);
map(0x140000, 0x14000f).mirror(0x03fff0).w(FUNC(excel68k_state::mux_w)).umask16(0x00ff);
}
@ -447,7 +538,7 @@ void excel68k_state::fex68km4_map(address_map &map)
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(0x00100000, 0x0010000f).mirror(0x03fff0).r(FUNC(excel68k_state::input_r)).umask32(0x00ff00ff);
map(0x00140000, 0x0014000f).mirror(0x03fff0).w(FUNC(excel68k_state::mux_w)).umask32(0x00ff00ff);
map(0x00200000, 0x0027ffff).ram();
map(0x00400000, 0x00407fff).ram();
@ -467,11 +558,11 @@ void eag_state::eag_map(address_map &map)
map(0x000000, 0x01ffff).rom();
map(0x104000, 0x107fff).ram();
map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(eag_state::digit_w)).umask16(0xff00).nopr();
map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask16(0x00ff);
map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input_r), FUNC(eag_state::leds_w)).umask16(0x00ff);
map(0x400000, 0x400007).w(FUNC(eag_state::mux_w)).umask16(0x00ff);
map(0x400000, 0x407fff).r("cartslot", FUNC(generic_slot_device::read_rom)).umask16(0xff00);
map(0x604000, 0x607fff).ram().share("nvram");
map(0x700003, 0x700003).r(FUNC(eag_state::input2_r));
map(0x700000, 0x700003).rw(m_usart, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
}
void eagv5_state::main_map(address_map &map)
@ -495,11 +586,11 @@ void eag_state::eagv7_map(address_map &map)
map(0x000000, 0x01ffff).rom();
map(0x104000, 0x107fff).ram();
map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(eag_state::digit_w)).umask32(0xff00ff00).nopr();
map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff);
map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(eag_state::input_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff);
map(0x400000, 0x400007).w(FUNC(eag_state::mux_w)).umask32(0x00ff00ff);
map(0x400000, 0x407fff).r("cartslot", FUNC(generic_slot_device::read_rom)).umask32(0xff00ff00);
map(0x604000, 0x607fff).ram().share("nvram");
map(0x700003, 0x700003).r(FUNC(eag_state::input2_r));
map(0x700000, 0x700003).rw(m_usart, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask32(0x00ff00ff);
map(0x800000, 0x807fff).ram();
}
@ -508,12 +599,23 @@ void eag_state::eagv10_map(address_map &map)
map(0x00000000, 0x0001ffff).rom();
map(0x00280000, 0x0037ffff).ram();
map(0x00b00000, 0x00b0000f).mirror(0x00000010).w(FUNC(eag_state::digit_w)).umask32(0xff00ff00).nopr();
map(0x00b00000, 0x00b0000f).mirror(0x00000010).rw(FUNC(eag_state::input1_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff);
map(0x00b00000, 0x00b0000f).mirror(0x00000010).rw(FUNC(eag_state::input_r), FUNC(eag_state::leds_w)).umask32(0x00ff00ff);
map(0x00c00000, 0x00c00007).w(FUNC(eag_state::mux_w)).umask32(0x00ff00ff);
map(0x00c00000, 0x00c07fff).r("cartslot", FUNC(generic_slot_device::read_rom)).umask32(0xff00ff00);
map(0x00e04000, 0x00e07fff).ram().share("nvram");
map(0x00f00003, 0x00f00003).r(FUNC(eag_state::input2_r));
map(0x01000000, 0x0101ffff).ram();
map(0x00f00000, 0x00f00003).rw(m_usart, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask32(0x00ff00ff);
map(0x01018000, 0x0101ffff).ram();
}
void premiere_state::main_map(address_map &map)
{
map(0x000000, 0x01ffff).bankr(m_rombank);
map(0x100000, 0x13ffff).ram();
map(0x300000, 0x30000f).mirror(0x000010).w(FUNC(premiere_state::digit_w)).umask16(0xff00).nopr();
map(0x300000, 0x30000f).mirror(0x000010).rw(FUNC(premiere_state::input_r), FUNC(premiere_state::leds_w)).umask16(0x00ff);
map(0x400000, 0x400007).w(FUNC(premiere_state::mux_w)).umask16(0x00ff);
map(0x600000, 0x607fff).mirror(0x008000).bankrw(m_nvrambank);
map(0x700000, 0x700003).rw(m_usart, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
}
@ -546,9 +648,18 @@ static INPUT_PORTS_START( eag )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("RV")
PORT_START("IN.1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("DM")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL") PORT_CHANGED_MEMBER(DEVICE_SELF, eag_state, in1_changed, 0)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("DM") PORT_CHANGED_MEMBER(DEVICE_SELF, eag_state, in1_changed, 0)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_N) PORT_NAME("New Game") PORT_CHANGED_MEMBER(DEVICE_SELF, eag_state, in1_changed, 0)
INPUT_PORTS_END
static INPUT_PORTS_START( premiere )
PORT_INCLUDE( eag )
PORT_START("IN.2")
PORT_CONFNAME( 0x01, 0x00, "Program" )
PORT_CONFSETTING( 0x00, "Vancouver" )
PORT_CONFSETTING( 0x01, "2265" )
INPUT_PORTS_END
@ -622,6 +733,14 @@ void eag_state::eag_base(machine_config &config)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
I8251(config, m_usart, 4.9152_MHz_XTAL);
m_usart->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
m_usart->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
m_usart->rxrdy_handler().set_inputline(m_maincpu, M68K_IRQ_IPL2);
auto &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr));
rs232.rxd_handler().set(m_usart, FUNC(i8251_device::write_rxd));
SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(150));
@ -702,6 +821,9 @@ void eag_state::eagv10(machine_config &config)
M68040(config.replace(), m_maincpu, 25_MHz_XTAL);
m_maincpu->set_interrupt_mixer(false);
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv10_map);
// IRQ pulse should be shorter, guessed here
subdevice<clock_device>("irq_clock")->set_pulse_width(attotime::from_nsec(1000));
}
void eag_state::eagv11(machine_config &config)
@ -710,10 +832,20 @@ void eag_state::eagv11(machine_config &config)
// basic machine hardware
M68EC040(config.replace(), m_maincpu, 36_MHz_XTAL*2); // wrong! should be M68EC060
m_maincpu->set_interrupt_mixer(false);
m_maincpu->set_addrmap(AS_PROGRAM, &eag_state::eagv10_map);
}
config.device_remove("irq_clock"); // 8.25us is too long
m_maincpu->set_periodic_int(FUNC(eag_state::irq2_line_hold), attotime::from_hz(600));
void premiere_state::premiere(machine_config &config)
{
eag_base(config);
// basic machine hardware
m_maincpu->set_addrmap(AS_PROGRAM, &premiere_state::main_map);
// no cartridge
config.device_remove("cartslot");
config.device_remove("cart_list");
}
@ -839,6 +971,12 @@ ROM_START( feagv11 )
ROM_LOAD32_BYTE("19", 0x00003, 0x08000, CRC(a70c5468) SHA1(7f6b4f46577d5cfdaa84d387c7ce35d941e5bbc7) ) // "
ROM_END
ROM_START( premiere ) // model 6131, PCB label 510.1157A01
ROM_REGION16_BE( 0x40000, "maincpu", 0 )
ROM_LOAD16_BYTE("101.1103a01_1meg_even.u22", 0x00000, 0x20000, CRC(0df2d4d8) SHA1(2c6cd8d83768d14aeb9860be76ed2ec0f64f118b) ) // M27C1001
ROM_LOAD16_BYTE("101.1104a01_1meg_odd.u19", 0x00001, 0x20000, CRC(afae9d5e) SHA1(7ab5fb8b8a2fa30f2fd444a050eae2432c9236d0) ) // "
ROM_END
} // anonymous namespace
@ -853,17 +991,19 @@ SYST( 1987, fex68ka, fex68k, 0, fex68k, excel68k, excel68k_state, empt
SYST( 1987, fex68kb, fex68k, 0, fex68k, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 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 )
SYST( 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 )
SYST( 1988, fex68km3, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1988, fex68km3a, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1988, fex68km3b, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1988, fex68km3, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master 2265 (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1988, fex68km3a, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master 2265 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1988, fex68km3b, fex68k, 0, fex68km3, excel68k, excel68k_state, empty_init, "Fidelity Electronics", "Excel 68000 Mach III Master 2265 (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 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 )
SYST( 1989, feagv4, 0, 0, eagv4, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1989, feagv4a, feagv4, 0, eagv4, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-2/3/4, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1989, feagv5, feagv4, 0, eagv5, eag, eagv5_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1990, feagv7, feagv4, 0, eagv7, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6117-6/7, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1990, feagv7a, feagv4, 0, eagv7, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6117-6/7, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1990, feagv7b, feagv4, 0, eagv7, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6117-6/7, set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1990, feagv9, feagv4, 0, eagv9, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde (model 6117-9)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1990, feagv10, feagv4, 0, eagv10, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING )
SYST( 2002, feagv11, feagv4, 0, eagv11, eag, eag_state, empty_init, "hack (Wilfried Bucke)", "Elite Avant Garde (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING )
SYST( 1989, feagv4, 0, 0, eagv4, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde 2265 (model 6114-2/3/4, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1989, feagv4a, feagv4, 0, eagv4, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde 2265 (model 6114-2/3/4, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1989, feagv5, feagv4, 0, eagv5, eag, eagv5_state, init_eag, "Fidelity Electronics", "Elite Avant Garde 2265 (model 6114-5)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1989, feagv7, feagv4, 0, eagv7, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde 2325 (model 6117-6/7, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1989, feagv7a, feagv4, 0, eagv7, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde 2325 (model 6117-6/7, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1989, feagv7b, feagv4, 0, eagv7, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde 2325 (model 6117-6/7, set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1990, feagv9, feagv4, 0, eagv9, eag, eag_state, init_eag, "Fidelity Electronics", "Elite Avant Garde 2325 (model 6117-9)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1990, feagv10, feagv4, 0, eagv10, eag, eag_state, empty_init, "Fidelity Electronics", "Elite Avant Garde 2325 (model 6117-10)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING )
SYST( 2001, feagv11, feagv4, 0, eagv11, eag, eag_state, empty_init, "hack (Wilfried Bucke)", "Elite Avant Garde 2325 (model 6117-11)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING )
SYST( 1992, premiere, 0, 0, premiere, premiere, premiere_state, empty_init, "Fidelity Electronics", "Elite Premiere", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )

View File

@ -5367,14 +5367,14 @@ public:
static INPUT_PORTS_START( knascar )
PORT_START("IN.0") // S1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_LEFT ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_CB(input_changed) PORT_NAME("Pause")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_CHANGED_CB(input_changed) PORT_NAME("Power On/Start")
PORT_START("IN.1") // S2
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_RIGHT ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VOLUME_DOWN ) PORT_CHANGED_CB(input_changed) PORT_NAME("Sound")
@ -5480,8 +5480,8 @@ ROM_END
Konami Teenage Mutant Ninja Turtles II: Splinter Speaks (model 13012)
* PCB label: BH012
* Sharp SM511 under epoxy (die label KMS73B, 785)
* lcd screen with custom segments, 1-bit sound
* OKI MSM6373 ADPCM under epoxy
* lcd screen with custom segments, 1-bit sound (on top of ADPCM)
*******************************************************************************/
@ -5495,7 +5495,7 @@ public:
void ktmnt2(machine_config &config);
private:
protected:
required_device<samples_device> m_samples;
void sound_w(u8 data);
@ -5522,8 +5522,12 @@ void ktmnt2_state::sound_w(u8 data)
if (sample == 0)
m_samples->stop(0);
}
else if (sample < m_samples->samples() + 1)
m_samples->start(0, sample - 1);
else
{
sample--;
if (sample < m_samples->samples() && strncmp(m_samples->names()[sample + 1], "none", 4))
m_samples->start(0, sample);
}
}
// other: input mux
@ -5683,6 +5687,192 @@ ROM_END
/*******************************************************************************
Konami Star Trek: 25th Anniversary (model 13015)
* PCB label: BH015
* Sharp SM511 under epoxy (die label KMS73B, 787)
* OKI MSM6373 ADPCM under epoxy
* lcd screen with custom segments, 1-bit sound (on top of ADPCM)
*******************************************************************************/
class kst25_state : public ktmnt2_state
{
public:
kst25_state(const machine_config &mconfig, device_type type, const char *tag) :
ktmnt2_state(mconfig, type, tag)
{
// increase lcd decay: bullets flicker
m_decay_len = 30;
}
void kst25(machine_config &config);
};
// inputs
static INPUT_PORTS_START( kst25 )
PORT_START("IN.0") // S1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x02, 0x02, IPT_CUSTOM ) PORT_CONDITION("FAKE", 0x03, NOTEQUALS, 0x00) // Up/Down
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_CB(input_changed)
PORT_START("IN.1") // S2
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_VOLUME_DOWN ) PORT_CHANGED_CB(input_changed) PORT_NAME("Sound")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_CB(input_changed) PORT_NAME("Pause")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_CHANGED_CB(input_changed) PORT_NAME("Power On/Start")
PORT_START("IN.2") // S3
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x0b, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("FAKE") // Up/Down are electronically the same button
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_CHANGED_CB(input_changed)
INPUT_PORTS_END
// config
static const char *const kst25_sample_names[] =
{
"*kst25",
"beammeupscotty",
"warpspeed",
"thatsnotlogical",
"shieldsup",
"firethephotontorpedos",
"orbittheplanet",
"engage",
"boom",
"teleporter",
"klaxon",
"photontorpedo",
"hum",
nullptr
};
void kst25_state::kst25(machine_config &config)
{
ktmnt2(config);
config.device_remove("screen");
mcfg_svg_screen(config, 1464, 1080);
m_samples->set_samples_names(kst25_sample_names);
}
// roms
ROM_START( kst25 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "787.program", 0x0000, 0x1000, CRC(05abdeec) SHA1(b947fcf4c6c9696b606eabdc74594076013ff73c) )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "787.melody", 0x000, 0x100, CRC(3f1c63d4) SHA1(efdfa49c4fd89f2ca5d5cfc6bf9fa741ac227338) )
ROM_REGION( 570121, "screen", 0)
ROM_LOAD( "kst25.svg", 0, 570121, CRC(6529d2de) SHA1(993c84ae46277d0d8e0af66473f6ce324b697638) )
ROM_REGION( 0x8000, "adpcm", 0)
ROM_LOAD( "msm6373", 0, 0x8000, NO_DUMP )
ROM_END
/*******************************************************************************
Konami Top Gun: Second Mission
* PCB label: BH017
* Sharp SM511 under epoxy (die label KMS73B, 792)
* OKI MSM6373 ADPCM under epoxy
* lcd screen with custom segments, 1-bit sound (on top of ADPCM)
*******************************************************************************/
class ktopgun2_state : public ktmnt2_state
{
public:
ktopgun2_state(const machine_config &mconfig, device_type type, const char *tag) :
ktmnt2_state(mconfig, type, tag)
{ }
void ktopgun2(machine_config &config);
};
// inputs
static INPUT_PORTS_START( ktopgun2 )
PORT_START("IN.0") // S1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_LEFT ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_CB(input_changed) PORT_NAME("Pause")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_CHANGED_CB(input_changed) PORT_NAME("Power On/Start")
PORT_START("IN.1") // S2
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_RIGHT ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_CHANGED_CB(input_changed)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VOLUME_DOWN ) PORT_CHANGED_CB(input_changed) PORT_NAME("Sound")
PORT_START("ACL")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_CB(acl_button) PORT_NAME("All Clear")
INPUT_PORTS_END
// config
static const char *const ktopgun2_sample_names[] =
{
"*ktopgun2",
"explosion",
"crash",
"none",
"machinegun",
"boom",
"lockon",
"none",
"danger",
"missioncomplete",
"targetinrange",
"none",
"bailout",
"none",
"gameover",
nullptr
};
void ktopgun2_state::ktopgun2(machine_config &config)
{
ktmnt2(config);
config.device_remove("screen");
mcfg_svg_screen(config, 1496, 1080);
m_samples->set_samples_names(ktopgun2_sample_names);
}
// roms
ROM_START( ktopgun2 )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "792.program", 0x0000, 0x1000, CRC(bb6eeeb6) SHA1(7bb21d1736ef7fdfc58ffc0e9dc633ec3c491117) )
ROM_REGION( 0x100, "maincpu:melody", 0 )
ROM_LOAD( "792.melody", 0x000, 0x100, CRC(dce276ae) SHA1(27ce9c02e69c38120fd3608577176cdce29f6f06) )
ROM_REGION( 756991, "screen", 0)
ROM_LOAD( "ktopgun2.svg", 0, 756991, CRC(d65dbf75) SHA1(f2b55bfba784919f6601a7adaeeb7e5951a03367) )
ROM_REGION( 0x8000, "adpcm", 0)
ROM_LOAD( "msm6373", 0, 0x8000, NO_DUMP )
ROM_END
/*******************************************************************************
Konami Teenage Mutant Ninja Turtles 3: Shredder's Last Stand (model 13017)
@ -11277,8 +11467,10 @@ SYST( 1990, kbottom9, 0, 0, kbottom9, kbottom9, kbott
SYST( 1990, kloneran, 0, 0, kloneran, kloneran, kloneran_state, empty_init, "Konami", "The Lone Ranger (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
SYST( 1990, knascar, 0, 0, knascar, knascar, knascar_state, empty_init, "Konami", "Bill Elliott's NASCAR Racing (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
SYST( 1990, kblades, 0, 0, kblades, kblades, kblades_state, empty_init, "Konami", "Blades of Steel (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
SYST( 1990, ktmnt2, 0, 0, ktmnt2, ktmnt2, ktmnt2_state, empty_init, "Konami", "Teenage Mutant Ninja Turtles II: Splinter Speaks (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
SYST( 1990, ktmnt2, 0, 0, ktmnt2, ktmnt2, ktmnt2_state, empty_init, "Konami", "Teenage Mutant Ninja Turtles II: Splinter Speaks (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK | MACHINE_IMPERFECT_SOUND )
SYST( 1990, knfl, 0, 0, knfl, knfl, knfl_state, empty_init, "Konami", "NFL Football (Konami, handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
SYST( 1991, kst25, 0, 0, kst25, kst25, kst25_state, empty_init, "Konami", "Star Trek: 25th Anniversary (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK | MACHINE_IMPERFECT_SOUND )
SYST( 1991, ktopgun2, 0, 0, ktopgun2, ktopgun2, ktopgun2_state, empty_init, "Konami", "Top Gun: Second Mission (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK | MACHINE_IMPERFECT_SOUND )
SYST( 1991, ktmnt3, 0, 0, ktmnt3, ktmnt3, ktmnt3_state, empty_init, "Konami", "Teenage Mutant Ninja Turtles 3: Shredder's Last Stand (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
SYST( 1991, ktmntbb, 0, 0, ktmntbb, ktmntbb, ktmntbb_state, empty_init, "Konami", "Teenage Mutant Ninja Turtles: Basketball", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
SYST( 1991, kbucky, 0, 0, kbucky, kbucky, kbucky_state, empty_init, "Konami", "Bucky O'Hare (handheld)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )

View File

@ -117,8 +117,9 @@ license:CC0-1.0
<element name="text_r92"><text string="NEW" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r93"><text string="GAME" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_rx1"><text string="YOUR MOVE"><color red="0.61" green="0.6" blue="0.59" /></text></element>
<element name="text_ry1"><text string="CHECK"><color red="0.61" green="0.6" blue="0.59" /></text></element>
<element name="text_rx1a"><text string="YOUR"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_rx1b"><text string="MOVE"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_ry1"><text string="CHECK"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_rx2"><text string="CL" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_ry2"><text string="DM" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
@ -503,7 +504,8 @@ license:CC0-1.0
<element ref="text_rx2"><bounds x="96.8" y="79.65" width="10" height="1.5" /></element>
<element ref="text_ry2"><bounds x="96.8" y="82.15" width="10" height="1.5" /></element>
<element ref="text_rx1"><bounds x="88" y="78.75" width="6" height="1" /></element>
<element ref="text_rx1a"><bounds x="88" y="78.0" width="5.5" height="1" /></element>
<element ref="text_rx1b"><bounds x="88" y="78.75" width="5.5" height="1" /></element>
<element ref="text_ry1"><bounds x="88" y="81.25" width="5.5" height="1" /></element>
<element name="8.14" ref="led2y"><bounds x="90" y="79.75" width="1.5" height="1.5" /></element>

View File

@ -117,8 +117,9 @@ license:CC0-1.0
<element name="text_r92"><text string="NEW" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_r93"><text string="GAME" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_rx1"><text string="YOUR MOVE"><color red="0.61" green="0.6" blue="0.59" /></text></element>
<element name="text_ry1"><text string="CHECK"><color red="0.61" green="0.6" blue="0.59" /></text></element>
<element name="text_rx1a"><text string="YOUR"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_rx1b"><text string="MOVE"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_ry1"><text string="CHECK"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_rx2"><text string="CL" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_ry2"><text string="DM" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
@ -503,7 +504,8 @@ license:CC0-1.0
<element ref="text_rx2"><bounds x="96.8" y="79.65" width="10" height="1.5" /></element>
<element ref="text_ry2"><bounds x="96.8" y="82.15" width="10" height="1.5" /></element>
<element ref="text_rx1"><bounds x="88" y="78.75" width="6" height="1" /></element>
<element ref="text_rx1a"><bounds x="88" y="78.0" width="5.5" height="1" /></element>
<element ref="text_rx1b"><bounds x="88" y="78.75" width="5.5" height="1" /></element>
<element ref="text_ry1"><bounds x="88" y="81.25" width="5.5" height="1" /></element>
<element name="8.9" ref="led2y"><bounds x="90" y="79.75" width="1.5" height="1.5" /></element>

View File

@ -17808,6 +17808,7 @@ fex68km3 //
fex68km3a //
fex68km3b //
fex68km4 //
premiere //
@source:fidelity/eldorado.cpp
feldo
@ -18917,11 +18918,13 @@ kosmicmt // Elektronika
kosmicpt // Elektronika
krybolov // Elektronika
kskatedie // Konami
kst25 // Konami
ktmnt // Konami
ktmnt2 // Konami
ktmnt3 // Konami
ktmntbb // Konami
ktopgun // Konami
ktopgun2 // Konami
kvakazad // Elektronika
morataka // Elektronika
nochnyev // Elektronika