diff options
Diffstat (limited to 'src/mame/drivers/saitek_stratos.cpp')
-rw-r--r-- | src/mame/drivers/saitek_stratos.cpp | 238 |
1 files changed, 134 insertions, 104 deletions
diff --git a/src/mame/drivers/saitek_stratos.cpp b/src/mame/drivers/saitek_stratos.cpp index 8c09af2c0f1..d297f030b19 100644 --- a/src/mame/drivers/saitek_stratos.cpp +++ b/src/mame/drivers/saitek_stratos.cpp @@ -9,14 +9,12 @@ TODO: - corona: different addressmap, 64 leds - add endgame rom (softwarelist?) - clean up driver -- does nvram work? maybe both ram chips battery-backed -- add soft power off with STOP button(writes 0 to control_w), power-on with GO button +- does nvram.u7 work? ***************************************************************************/ #include "emu.h" #include "cpu/m6502/m65c02.h" -#include "cpu/m6502/r65c02.h" #include "machine/nvram.h" #include "machine/sensorboard.h" #include "machine/timer.h" @@ -34,10 +32,11 @@ public: stratos_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - nvram(*this, "nvram"), - bank_8000(*this, "bank_8000"), - bank_4000(*this, "bank_4000"), - nvram_bank(*this, "nvram_bank"), + m_nvram(*this, "nvram.u7"), + m_rombank(*this, "rombank"), + m_extbank(*this, "extbank"), + m_nvrambank(*this, "nvrambank"), + m_irqtimer(*this, "irqtimer"), m_lcd_busy(*this, "lcd_busy"), m_board(*this, "board"), m_display(*this, "display"), @@ -47,10 +46,10 @@ public: void stratos(machine_config &config); void corona(machine_config &config); - void tking(machine_config &config); - void tkingd(machine_config &config); + void tking2(machine_config &config); - void init_stratos(); + DECLARE_INPUT_CHANGED_MEMBER(cpu_freq) { set_cpu_freq(); } + DECLARE_INPUT_CHANGED_MEMBER(go_button); private: DECLARE_WRITE8_MEMBER(p2000_w); @@ -64,26 +63,30 @@ private: void stratos_mem(address_map &map); - TIMER_DEVICE_CALLBACK_MEMBER(helios_tick); + TIMER_DEVICE_CALLBACK_MEMBER(interrupt); + void set_cpu_freq(); - std::unique_ptr<uint8_t[]> nvram_data; - uint8_t control, m_select; - uint32_t ind_leds; + std::unique_ptr<uint8_t[]> m_nvram_data; + u8 m_select; + u8 m_control; + u8 m_led_data; bool m_lcd_written; - u8 m_lcd_address; - u8 m_lcd_ram[0x100]; - u8 m_lcd_latch; + //u8 m_lcd_address; + //u8 m_lcd_ram[0x100]; + //u8 m_lcd_latch; u8 m_lcd_data; void show_leds(); virtual void machine_reset() override; + virtual void machine_start() override; required_device<m65c02_device> m_maincpu; - required_device<nvram_device> nvram; - required_memory_bank bank_8000; - required_memory_bank bank_4000; - required_memory_bank nvram_bank; + required_device<nvram_device> m_nvram; + required_memory_bank m_rombank; + required_memory_bank m_extbank; + required_memory_bank m_nvrambank; + required_device<timer_device> m_irqtimer; required_device<timer_device> m_lcd_busy; required_device<sensorboard_device> m_board; required_device<pwm_display_device> m_display; @@ -91,44 +94,62 @@ private: required_ioport_array<8> m_inputs; }; -void stratos_state::init_stratos() + +void stratos_state::machine_start() { - nvram_data = std::make_unique<uint8_t[]>(0x2000); - nvram->set_base(nvram_data.get(), 0x2000); + m_nvram_data = std::make_unique<uint8_t[]>(0x2000); + m_nvram->set_base(m_nvram_data.get(), 0x2000); + + m_rombank->configure_entries(0, 2, memregion("maincpu")->base(), 0x8000); + m_extbank->configure_entries(0, 2, memregion("ext")->base(), 0x4000); + m_nvrambank->configure_entries(0, 2, m_nvram_data.get(), 0x1000); - bank_8000 ->configure_entries(0, 2, memregion("roms_8000")->base(), 0x8000); - bank_4000 ->configure_entries(0, 2, memregion("roms_4000")->base(), 0x4000); - nvram_bank->configure_entries(0, 2, nvram_data.get(), 0x1000); + m_control = 0x40; } void stratos_state::machine_reset() { - control = 0x00; + set_cpu_freq(); + m_control = 0x40; m_select = 0x00; - bank_8000 ->set_entry(0); - bank_4000 ->set_entry(0); - nvram_bank->set_entry(0); + m_rombank->set_entry(0); + m_extbank->set_entry(0); + m_nvrambank->set_entry(0); } -void stratos_state::show_leds() +void stratos_state::set_cpu_freq() { - m_display->matrix_partial(2, 4, ~m_select >> 4 & 0xf, 1 << (m_select & 0xf), false); - m_display->matrix_partial(0, 2, 1 << (control >> 5 & 1), (~ind_leds & 0xff) | (~control << 6 & 0x100)); + m_maincpu->set_unscaled_clock((ioport("FAKE")->read() & 1) ? 5.67_MHz_XTAL : 5_MHz_XTAL); + + attotime period = attotime::from_hz(m_maincpu->unscaled_clock() / 0x10000); + m_irqtimer->adjust(period, 0, period); } -TIMER_DEVICE_CALLBACK_MEMBER(stratos_state::helios_tick) +void stratos_state::show_leds() { + m_display->matrix_partial(0, 2, 1 << (m_control >> 5 & 1), (~m_led_data & 0xff) | (~m_control << 6 & 0x100)); +} - +TIMER_DEVICE_CALLBACK_MEMBER(stratos_state::interrupt) +{ m_maincpu->set_input_line(M65C02_IRQ_LINE, HOLD_LINE); } +INPUT_CHANGED_MEMBER(stratos_state::go_button) +{ + if (newval && ~m_control & 0x40) + { + m_maincpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); + machine_reset(); + } +} + WRITE8_MEMBER(stratos_state::p2000_w) { m_dac->write(0); // guessed m_select = data; - show_leds(); + m_display->matrix_partial(2, 4, ~m_select >> 4 & 0xf, 1 << (m_select & 0xf)); } READ8_MEMBER(stratos_state::p2200_r) @@ -143,7 +164,7 @@ WRITE8_MEMBER(stratos_state::p2200_w) WRITE8_MEMBER(stratos_state::p2400_w) { - ind_leds = data; + m_led_data = data; show_leds(); } @@ -172,12 +193,23 @@ READ8_MEMBER(stratos_state::control_r) WRITE8_MEMBER(stratos_state::control_w) { - control = data; - bank_8000->set_entry(data >> 0 & 1); - bank_4000->set_entry(data >> 1 & 1); // ? - nvram_bank->set_entry((data >> 1) & 1); + u8 prev = m_control; + + m_control = data; + m_rombank->set_entry(data >> 0 & 1); + m_extbank->set_entry(data >> 1 & 1); // ? + m_nvrambank->set_entry((data >> 1) & 1); show_leds(); + + // d6 falling edge: power-off request + if (~data & prev & 0x40) + { + m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + + // clear display + m_display->matrix(0, 0); + } } @@ -196,72 +228,81 @@ WRITE8_MEMBER(stratos_state::lcd_w) void stratos_state::stratos_mem(address_map &map) { - map(0x0000, 0x1fff).ram(); + map(0x0000, 0x1fff).ram().share("nvram.u6"); map(0x2000, 0x2000).w(FUNC(stratos_state::p2000_w)); map(0x2200, 0x2200).rw(FUNC(stratos_state::p2200_r), FUNC(stratos_state::p2200_w)); map(0x2400, 0x2400).w(FUNC(stratos_state::p2400_w)); map(0x2600, 0x2600).rw(FUNC(stratos_state::control_r), FUNC(stratos_state::control_w)); - map(0x2800, 0x37ff).bankrw("nvram_bank"); + map(0x2800, 0x37ff).bankrw("nvrambank"); map(0x3800, 0x3800).rw(FUNC(stratos_state::lcd_r), FUNC(stratos_state::lcd_w)); - map(0x4000, 0x7fff).bankr("bank_4000"); - map(0x8000, 0xffff).bankr("bank_8000"); + map(0x4000, 0x7fff).bankr("extbank"); + map(0x8000, 0xffff).bankr("rombank"); } static INPUT_PORTS_START( stratos ) PORT_START("IN.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) // setup - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) // level - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Set Up") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_L) PORT_NAME("Level") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_START("IN.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) // sound - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) // stop? - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) // new game? + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_X) PORT_NAME("Sound") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Z) PORT_NAME("Stop") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_CODE(KEYCODE_N) PORT_NAME("New Game") PORT_START("IN.2") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) // rook - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) // pawn - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) // bishop + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Rook") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Pawn") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Bishop") PORT_START("IN.3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) // queen - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) // knight - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) // king + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Queen") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Knight") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("King") PORT_START("IN.4") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) // play - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) // tab/color - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) // - + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Play") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("Tab / Color") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-") PORT_START("IN.5") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) // + - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) // function - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_EQUALS) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Function") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_START("IN.6") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) // library - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) // info - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Library") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Info") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_START("IN.7") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) // analysis - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) // normal + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Analysis") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Normal") + + PORT_START("RESET") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CHANGED_MEMBER(DEVICE_SELF, stratos_state, go_button, nullptr) PORT_NAME("Go") + + PORT_START("FAKE") + PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, stratos_state, cpu_freq, nullptr) // factory set + PORT_CONFSETTING( 0x00, "5MHz" ) + PORT_CONFSETTING( 0x01, "5.67MHz" ) INPUT_PORTS_END void stratos_state::stratos(machine_config &config) { /* basic machine hardware */ - M65C02(config, m_maincpu, 5.67_MHz_XTAL); + M65C02(config, m_maincpu, 5_MHz_XTAL); // see set_cpu_freq m_maincpu->set_addrmap(AS_PROGRAM, &stratos_state::stratos_mem); - NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + NVRAM(config, "nvram.u6", nvram_device::DEFAULT_ALL_0); + NVRAM(config, "nvram.u7", nvram_device::DEFAULT_ALL_0); SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); m_board->set_delay(attotime::from_msec(350)); - TIMER(config, "helios").configure_periodic(FUNC(stratos_state::helios_tick), attotime::from_hz(5.67_MHz_XTAL / 0x10000)); + TIMER(config, "irqtimer").configure_generic(FUNC(stratos_state::interrupt)); TIMER(config, "lcd_busy").configure_generic(timer_device::expired_delegate()); /* video hardware */ @@ -281,87 +322,76 @@ void stratos_state::corona(machine_config &config) m_board->set_type(sensorboard_device::MAGNETS); } -void stratos_state::tking(machine_config &config) +void stratos_state::tking2(machine_config &config) { stratos(config); - /* basic machine hardware */ - R65C02(config.replace(), m_maincpu, 5_MHz_XTAL); // R65C02P4 - m_maincpu->set_addrmap(AS_PROGRAM, &stratos_state::stratos_mem); - - TIMER(config.replace(), "helios").configure_periodic(FUNC(stratos_state::helios_tick), attotime::from_hz(5_MHz_XTAL / 0x10000)); -} - -void stratos_state::tkingd(machine_config &config) -{ - tking(config); - // seems much more responsive m_board->set_delay(attotime::from_msec(200)); } ROM_START( stratos ) - ROM_REGION( 0x10000, "roms_8000", 0 ) + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("w1y01f_728m_u3.u3", 0x0000, 0x8000, CRC(b58a7256) SHA1(75b3a3a65f4ca8d52aa5b17a06319bff59d9014f) ) ROM_LOAD("bw1_819n_u4.u4", 0x8000, 0x8000, CRC(cb0de631) SHA1(f78d40213be21775966cbc832d64acd9b73de632) ) - ROM_REGION( 0x8000, "roms_4000", 0 ) + ROM_REGION( 0x8000, "ext", 0 ) ROM_FILL( 0x0000, 0x8000, 0xff ) ROM_END ROM_START( stratosl ) - ROM_REGION( 0x10000, "roms_8000", 0 ) + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("w1y01f_728l_u3.u3", 0x0000, 0x8000, CRC(19a22058) SHA1(a5ca54d870c70b7ce9c7be2951800bf49cc57527) ) ROM_LOAD("bw1_819n_u4.u4", 0x8000, 0x8000, CRC(cb0de631) SHA1(f78d40213be21775966cbc832d64acd9b73de632) ) - ROM_REGION( 0x8000, "roms_4000", 0 ) + ROM_REGION( 0x8000, "ext", 0 ) ROM_FILL( 0x0000, 0x8000, 0xff ) ROM_END ROM_START( tking ) - ROM_REGION( 0x10000, "roms_8000", 0 ) + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("y01f_713d_u3.u3", 0x0000, 0x8000, CRC(b8c6d853) SHA1(98923f44bbbd2ea17c269850971d3df229e6057e) ) ROM_LOAD("y01f_712a_u4.u4", 0x8000, 0x8000, CRC(7d3f8f7b) SHA1(8be5d8d988ff0577ccfec0a773bfd94599f2534f) ) - ROM_REGION( 0x8000, "roms_4000", 0 ) + ROM_REGION( 0x8000, "ext", 0 ) ROM_FILL( 0x0000, 0x8000, 0xff ) ROM_END ROM_START( tkingl ) - ROM_REGION( 0x10000, "roms_8000", 0 ) + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("w1y01f_728l_u3.u3", 0x0000, 0x8000, CRC(19a22058) SHA1(a5ca54d870c70b7ce9c7be2951800bf49cc57527) ) ROM_LOAD("y01f-b_819o_u4.u4", 0x8000, 0x8000, CRC(336040d4) SHA1(aca662b8cc4d6bafd61ca158c768ba8896117169) ) - ROM_REGION( 0x8000, "roms_4000", 0 ) + ROM_REGION( 0x8000, "ext", 0 ) ROM_FILL( 0x0000, 0x8000, 0xff ) ROM_END ROM_START( tkingp ) - ROM_REGION( 0x10000, "roms_8000", 0 ) + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("w1y01f_728p_u3.u3", 0x0000, 0x8000, CRC(ad77f83e) SHA1(598fdb1e40267d9d43a3d8f287723070b9afa349) ) ROM_LOAD("y01f-b_819o_u4.u4", 0x8000, 0x8000, CRC(336040d4) SHA1(aca662b8cc4d6bafd61ca158c768ba8896117169) ) - ROM_REGION( 0x8000, "roms_4000", 0 ) + ROM_REGION( 0x8000, "ext", 0 ) ROM_FILL( 0x0000, 0x8000, 0xff ) ROM_END ROM_START( corona ) - ROM_REGION( 0x10000, "roms_8000", 0 ) + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("w2_708g_u2-a.u2", 0x0000, 0x8000, CRC(52568bb4) SHA1(83fe91787e17bbefc2b3ec651ddb11c88990060d) ) ROM_LOAD("bw2_708a_u3-b.u3", 0x8000, 0x8000, CRC(32848f73) SHA1(a447543e3eb4757f9afed26fde77b66985eb96a7) ) - ROM_REGION( 0x8000, "roms_4000", 0 ) + ROM_REGION( 0x8000, "ext", 0 ) ROM_FILL( 0x0000, 0x8000, 0xff ) ROM_END -/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */ -CONS( 1986, stratos, 0, 0, stratos, stratos, stratos_state, init_stratos, "SciSys", "Kasparov Stratos (rev. M)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1986, stratosl, stratos, 0, stratos, stratos, stratos_state, init_stratos, "SciSys", "Kasparov Stratos (rev. L)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) +/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */ +CONS( 1986, stratos, 0, 0, stratos, stratos, stratos_state, empty_init, "SciSys", "Kasparov Stratos (rev. M)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1986, stratosl, stratos, 0, stratos, stratos, stratos_state, empty_init, "SciSys", "Kasparov Stratos (rev. L)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1990, tking, 0, 0, tkingd, stratos, stratos_state, init_stratos, "Saitek", "Kasparov Turbo King (rev. D)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) // aka Turbo King II -CONS( 1988, tkingl, tking, 0, tking, stratos, stratos_state, init_stratos, "Saitek", "Kasparov Turbo King (rev. L)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1988, tkingp, tking, 0, tking, stratos, stratos_state, init_stratos, "Saitek", "Kasparov Turbo King (rev. P)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, tking, 0, 0, tking2, stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (rev. D)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) // aka Turbo King II +CONS( 1988, tkingl, tking, 0, stratos, stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (rev. L)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1988, tkingp, tking, 0, stratos, stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (rev. P)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1988, corona, 0, 0, corona, stratos, stratos_state, init_stratos, "Saitek", "Kasparov Corona (rev. G)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1988, corona, 0, 0, corona, stratos, stratos_state, empty_init, "Saitek", "Kasparov Corona (rev. G)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) |