From 8a333d14e0b810c5caddaf58c603afa383f72b24 Mon Sep 17 00:00:00 2001 From: hap Date: Fri, 8 Sep 2023 19:19:19 +0200 Subject: 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] --- src/mame/elektor/avrmax.cpp | 2 +- src/mame/fidelity/chesster.cpp | 2 +- src/mame/fidelity/eag68k.cpp | 228 ++++++++++++++++++++++++++++++-------- src/mame/handheld/hh_sm510.cpp | 210 +++++++++++++++++++++++++++++++++-- src/mame/layout/fidel_eag.lay | 8 +- src/mame/layout/fidel_eag_68k.lay | 8 +- src/mame/mame.lst | 3 + 7 files changed, 400 insertions(+), 61 deletions(-) diff --git a/src/mame/elektor/avrmax.cpp b/src/mame/elektor/avrmax.cpp index 508060fd37a..2f532723750 100644 --- a/src/mame/elektor/avrmax.cpp +++ b/src/mame/elektor/avrmax.cpp @@ -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: diff --git a/src/mame/fidelity/chesster.cpp b/src/mame/fidelity/chesster.cpp index da9b442b24a..d0e89ef4d69 100644 --- a/src/mame/fidelity/chesster.cpp +++ b/src/mame/fidelity/chesster.cpp @@ -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. ******************************************************************************** diff --git a/src/mame/fidelity/eag68k.cpp b/src/mame/fidelity/eag68k.cpp index 0ca424f2f73..4da63b7363c 100644 --- a/src/mame/fidelity/eag68k.cpp +++ b/src/mame/fidelity/eag68k.cpp @@ -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 m_maincpu; optional_device m_ram; + optional_device m_usart; required_device m_board; required_device m_display; required_device 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 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("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); +} + +void premiere_state::premiere(machine_config &config) +{ + eag_base(config); - 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)); + // 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 ) diff --git a/src/mame/handheld/hh_sm510.cpp b/src/mame/handheld/hh_sm510.cpp index f0084a8dcc9..2a056d671ac 100644 --- a/src/mame/handheld/hh_sm510.cpp +++ b/src/mame/handheld/hh_sm510.cpp @@ -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 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 ) diff --git a/src/mame/layout/fidel_eag.lay b/src/mame/layout/fidel_eag.lay index 789da1b33ea..24b1ede5368 100644 --- a/src/mame/layout/fidel_eag.lay +++ b/src/mame/layout/fidel_eag.lay @@ -117,8 +117,9 @@ license:CC0-1.0 - - + + + @@ -503,7 +504,8 @@ license:CC0-1.0 - + + diff --git a/src/mame/layout/fidel_eag_68k.lay b/src/mame/layout/fidel_eag_68k.lay index 8e0d00b289e..2156c284859 100644 --- a/src/mame/layout/fidel_eag_68k.lay +++ b/src/mame/layout/fidel_eag_68k.lay @@ -117,8 +117,9 @@ license:CC0-1.0 - - + + + @@ -503,7 +504,8 @@ license:CC0-1.0 - + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index d9752ceea4f..76cf0fbf4aa 100755 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -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 -- cgit v1.2.3