diff options
author | hap <happppp@users.noreply.github.com> | 2019-07-18 02:00:25 +0200 |
---|---|---|
committer | hap <happppp@users.noreply.github.com> | 2019-07-18 02:00:44 +0200 |
commit | fd388706909f5ee0a83a4eb0e940381d2edb3be5 (patch) | |
tree | e783607cdc8993f72fd9908df336390d10c24f71 | |
parent | af9a1577ebf22eb6dbe4f77903621d32b46a9828 (diff) |
New not working machine added
--------------
Kasparov Turbo King [hap, CB-Emu]
Kasparov Corona [hap, CB-Emu]
-rw-r--r-- | src/mame/drivers/saitek_stratos.cpp | 146 | ||||
-rw-r--r-- | src/mame/mame.lst | 7 |
2 files changed, 131 insertions, 22 deletions
diff --git a/src/mame/drivers/saitek_stratos.cpp b/src/mame/drivers/saitek_stratos.cpp index 9bce9fc98d0..8c09af2c0f1 100644 --- a/src/mame/drivers/saitek_stratos.cpp +++ b/src/mame/drivers/saitek_stratos.cpp @@ -5,8 +5,8 @@ Scisys Kasparov Stratos Chess Computer TODO: -- add LCD, maybe Hughes serial chip? (188:88, 88:88, and 7*7 DMD bottom-left) -- add Turbo King/Corona (same hardware family) +- add LCD (188:88, 88:88, and 7*7 DMD bottom-left) +- corona: different addressmap, 64 leds - add endgame rom (softwarelist?) - clean up driver - does nvram work? maybe both ram chips battery-backed @@ -16,8 +16,10 @@ TODO: #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" #include "sound/dac.h" #include "sound/volt_reg.h" #include "speaker.h" @@ -36,6 +38,7 @@ public: bank_8000(*this, "bank_8000"), bank_4000(*this, "bank_4000"), nvram_bank(*this, "nvram_bank"), + m_lcd_busy(*this, "lcd_busy"), m_board(*this, "board"), m_display(*this, "display"), m_dac(*this, "dac"), @@ -43,6 +46,9 @@ public: { } void stratos(machine_config &config); + void corona(machine_config &config); + void tking(machine_config &config); + void tkingd(machine_config &config); void init_stratos(); @@ -58,9 +64,18 @@ private: void stratos_mem(address_map &map); + TIMER_DEVICE_CALLBACK_MEMBER(helios_tick); + std::unique_ptr<uint8_t[]> nvram_data; uint8_t control, m_select; uint32_t ind_leds; + bool m_lcd_written; + + 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; @@ -69,12 +84,11 @@ private: required_memory_bank bank_8000; required_memory_bank bank_4000; required_memory_bank nvram_bank; + required_device<timer_device> m_lcd_busy; required_device<sensorboard_device> m_board; required_device<pwm_display_device> m_display; required_device<dac_bit_interface> m_dac; required_ioport_array<8> m_inputs; - - bool m_lcd_busy; }; void stratos_state::init_stratos() @@ -102,6 +116,12 @@ void stratos_state::show_leds() m_display->matrix_partial(0, 2, 1 << (control >> 5 & 1), (~ind_leds & 0xff) | (~control << 6 & 0x100)); } +TIMER_DEVICE_CALLBACK_MEMBER(stratos_state::helios_tick) +{ + + + m_maincpu->set_input_line(M65C02_IRQ_LINE, HOLD_LINE); +} WRITE8_MEMBER(stratos_state::p2000_w) { @@ -136,20 +156,24 @@ READ8_MEMBER(stratos_state::control_r) if (sel == 8) { // lcd busy flag? - data = m_lcd_busy ? 0x20: 0; - m_lcd_busy = false; + if (m_lcd_busy->enabled()) + data |= 0x20; + + // battery low? + data |= 0x80; } if (sel < 8) data |= m_inputs[sel]->read() << 5; + return data; } WRITE8_MEMBER(stratos_state::control_w) { control = data; - bank_8000->set_entry(data & 1); + bank_8000->set_entry(data >> 0 & 1); bank_4000->set_entry(data >> 1 & 1); // ? nvram_bank->set_entry((data >> 1) & 1); @@ -164,9 +188,10 @@ READ8_MEMBER(stratos_state::lcd_r) WRITE8_MEMBER(stratos_state::lcd_w) { - m_lcd_busy = true; // ? + m_lcd_data = data; + m_lcd_written = true; - // TODO.. + m_lcd_busy->adjust(attotime::from_usec(50)); // ? } void stratos_state::stratos_mem(address_map &map) @@ -229,19 +254,18 @@ void stratos_state::stratos(machine_config &config) /* basic machine hardware */ M65C02(config, m_maincpu, 5.67_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &stratos_state::stratos_mem); - m_maincpu->set_periodic_int(FUNC(stratos_state::irq0_line_hold), attotime::from_hz(5.67_MHz_XTAL / 0x1000)); NVRAM(config, "nvram", 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(100)); + 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, "lcd_busy").configure_generic(timer_device::expired_delegate()); /* video hardware */ PWM_DISPLAY(config, m_display).set_size(2+4, 8+1); - m_display->set_bri_levels(0.05); // leds supposed to flicker - m_display->set_bri_maximum(0.1); // " - config.set_default_layout(layout_saitek_stratos); /* sound hardware */ @@ -250,14 +274,94 @@ void stratos_state::stratos(machine_config &config) VOLTAGE_REGULATOR(config, "vref").add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); } +void stratos_state::corona(machine_config &config) +{ + stratos(config); + + m_board->set_type(sensorboard_device::MAGNETS); +} + +void stratos_state::tking(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_LOAD("w1_728m_u3.u3", 0x0000, 0x8000, CRC(b58a7256) SHA1(75b3a3a65f4ca8d52aa5b17a06319bff59d9014f)) - ROM_LOAD("bw1_918n_u4.u4", 0x8000, 0x8000, CRC(cb0de631) SHA1(f78d40213be21775966cbc832d64acd9b73de632)) + ROM_REGION( 0x10000, "roms_8000", 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_FILL( 0x0000, 0x8000, 0xff ) +ROM_END + +ROM_START( stratosl ) + ROM_REGION( 0x10000, "roms_8000", 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_FILL( 0x0000, 0x8000, 0xff ) +ROM_END + +ROM_START( tking ) + ROM_REGION( 0x10000, "roms_8000", 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(0x10000, "roms_4000", 0) - ROM_FILL(0x00000, 0x10000, 0xff) + ROM_REGION( 0x8000, "roms_4000", 0 ) + ROM_FILL( 0x0000, 0x8000, 0xff ) ROM_END -/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -CONS( 1986, stratos, 0, 0, stratos, stratos, stratos_state, init_stratos, "SciSys", "Kasparov Stratos", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) +ROM_START( tkingl ) + ROM_REGION( 0x10000, "roms_8000", 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_FILL( 0x0000, 0x8000, 0xff ) +ROM_END + +ROM_START( tkingp ) + ROM_REGION( 0x10000, "roms_8000", 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_FILL( 0x0000, 0x8000, 0xff ) +ROM_END + +ROM_START( corona ) + ROM_REGION( 0x10000, "roms_8000", 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_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 ) + +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( 1988, corona, 0, 0, corona, stratos, stratos_state, init_stratos, "Saitek", "Kasparov Corona (rev. G)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 41f761bd98b..661e939068d 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -34115,7 +34115,12 @@ risc2500 // montreux // @source:saitek_stratos.cpp -stratos // Kasparov Stratos Chess Computer +corona +stratos +stratosl +tking +tkingl +tkingp @source:sam.cpp 24_130 // |