From 360b6bf9d1bae03da9b4f885d6fddf4b0b449255 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 21 Jul 2019 14:44:22 +0200 Subject: saitek_corona: add IO 1/2 (nw) --- src/mame/drivers/saitek_stratos.cpp | 70 +++++++++------ src/mame/includes/saitek_stratos.h | 10 +-- src/mame/layout/saitek_corona.lay | 72 +++++++-------- src/mame/layout/saitek_stratos.lay | 170 ++++++++++++++++++------------------ 4 files changed, 168 insertions(+), 154 deletions(-) diff --git a/src/mame/drivers/saitek_stratos.cpp b/src/mame/drivers/saitek_stratos.cpp index 2d6ca005429..9ef63d74484 100644 --- a/src/mame/drivers/saitek_stratos.cpp +++ b/src/mame/drivers/saitek_stratos.cpp @@ -68,7 +68,8 @@ public: m_rombank(*this, "rombank"), m_nvrambank(*this, "nvrambank"), m_board(*this, "board"), - m_dac(*this, "dac") + m_dac(*this, "dac"), + m_inputs(*this, "IN.%u", 0) { } // machine drivers @@ -86,18 +87,19 @@ private: required_memory_bank m_nvrambank; required_device m_board; required_device m_dac; + required_ioport_array<8+1> m_inputs; void main_map(address_map &map); - void update_leds(); // I/O handlers + void update_leds(); DECLARE_WRITE8_MEMBER(select_w); DECLARE_READ8_MEMBER(chessboard_r); DECLARE_WRITE8_MEMBER(sound_w); DECLARE_WRITE8_MEMBER(leds_w); DECLARE_READ8_MEMBER(control_r); DECLARE_WRITE8_MEMBER(control_w); - DECLARE_READ8_MEMBER(lcd_r); + DECLARE_READ8_MEMBER(lcd_data_r); DECLARE_READ8_MEMBER(extrom_r); std::unique_ptr m_nvram_data; @@ -117,11 +119,13 @@ void saitek_stratos_state::machine_start() // zerofill m_power = false; + m_lcd_ready = false; m_lcd_count = 0; m_lcd_address = 0; // register for savestates save_item(NAME(m_power)); + save_item(NAME(m_lcd_ready)); save_item(NAME(m_lcd_count)); save_item(NAME(m_lcd_address)); save_item(NAME(m_lcd_data)); @@ -130,6 +134,7 @@ void saitek_stratos_state::machine_start() void saitek_stratos_state::machine_reset() { m_power = true; + m_lcd_ready = false; m_lcd_count = 0; clear_lcd(); @@ -241,16 +246,16 @@ void saitek_stratos_state::update_lcd() m_out_digit[0] = 0; // where? - // upper digits + // upper digits (colon is at 0x00) for (int i = 0; i < 4; i++) m_out_digit[i + 1] = (m_lcd_data[0x01 + i * 2] << 4 | m_lcd_data[0x01 + i * 2 + 1]) & 0x7f; - // lower digits + // lower digits (colon is at 0x10) for (int i = 0; i < 4; i++) m_out_digit[i + 5] = (m_lcd_data[0x11 + i * 2] << 4 | m_lcd_data[0x11 + i * 2 + 1]) & 0x7f; } -void saitek_stratos_state::lcd_w(u8 data) +void saitek_stratos_state::lcd_data_w(u8 data) { // d0-d3: lcd data // d4-d7: unused? @@ -274,14 +279,12 @@ void saitek_stratos_state::lcd_w(u8 data) } else m_lcd_count++; - - m_lcd_busy->adjust(attotime::from_usec(50)); // ? } -READ8_MEMBER(stratos_state::lcd_r) +void saitek_stratos_state::lcd_reset_w(u8 data) { - // unknown, maybe resets lcd controller - return 0; + m_lcd_count = 0; + m_lcd_ready = true; } @@ -294,7 +297,7 @@ void stratos_state::update_leds() WRITE8_MEMBER(stratos_state::leds_w) { - // d0-d7: button leds data + // d0-d7: button led data m_led_data = data; update_leds(); @@ -327,11 +330,12 @@ READ8_MEMBER(stratos_state::control_r) if (sel == 8) { - // lcd busy flag? - if (m_lcd_busy->enabled()) + // d5: lcd status flag? + if (m_lcd_ready) data |= 0x20; + m_lcd_ready = false; - // battery low + // d7: battery low data |= m_inputs[8]->read(); } @@ -354,7 +358,7 @@ WRITE8_MEMBER(stratos_state::control_w) m_nvrambank->set_entry((data >> 1) & 1); // d2: mode led state - // d5: button leds select + // d5: button led select update_leds(); // d6 falling edge: power-off request @@ -362,6 +366,13 @@ WRITE8_MEMBER(stratos_state::control_w) power_off(); } +READ8_MEMBER(stratos_state::lcd_data_r) +{ + // reset lcd? + lcd_reset_w(); + return 0; +} + /****************************************************************************** @@ -376,7 +387,7 @@ void stratos_state::main_map(address_map &map) map(0x2400, 0x2400).w(FUNC(stratos_state::leds_w)); map(0x2600, 0x2600).rw(FUNC(stratos_state::control_r), FUNC(stratos_state::control_w)); map(0x2800, 0x37ff).bankrw("nvrambank"); - map(0x3800, 0x3800).rw(FUNC(stratos_state::lcd_r), FUNC(stratos_state::lcd_w)); + map(0x3800, 0x3800).rw(FUNC(stratos_state::lcd_data_r), FUNC(stratos_state::lcd_data_w)); map(0x4000, 0x7fff).r(FUNC(stratos_state::extrom_r)); map(0x8000, 0xffff).bankr("rombank"); } @@ -421,7 +432,7 @@ INPUT_PORTS_START( saitek_stratos ) PORT_START("IN.6") 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_LOW, IPT_CUSTOM) // freq sel + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_CUSTOM) // freq sel PORT_START("IN.7") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) @@ -443,9 +454,16 @@ INPUT_PORTS_START( saitek_stratos ) PORT_CONFSETTING( 0x01, "5.67MHz" ) INPUT_PORTS_END -static INPUT_PORTS_START( tking2 ) +static INPUT_PORTS_START( stratos ) PORT_INCLUDE( saitek_stratos ) + PORT_MODIFY("IN.6") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_CUSTOM) +INPUT_PORTS_END + +static INPUT_PORTS_START( tking2 ) + PORT_INCLUDE( stratos ) + PORT_MODIFY("IN.5") PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_CUSTOM) INPUT_PORTS_END @@ -474,8 +492,6 @@ void stratos_state::stratos(machine_config &config) PWM_DISPLAY(config, m_display).set_size(2+4, 8+1); config.set_default_layout(layout_saitek_stratos); - TIMER(config, "lcd_busy").configure_generic(timer_device::expired_delegate()); - /* sound hardware */ SPEAKER(config, "speaker").front_center(); DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); @@ -540,10 +556,10 @@ ROM_END Drivers ******************************************************************************/ -/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */ -CONS( 1986, stratos, 0, 0, stratos, saitek_stratos, stratos_state, empty_init, "SciSys", "Kasparov Stratos (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1986, stratosa, stratos, 0, stratos, saitek_stratos, stratos_state, empty_init, "SciSys", "Kasparov Stratos (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | 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 (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1986, stratosa, stratos, 0, stratos, stratos, stratos_state, empty_init, "SciSys", "Kasparov Stratos (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1990, tking, 0, 0, tking2, tking2, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 1, ver. D)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // aka Turbo King II -CONS( 1988, tkinga, tking, 0, stratos, saitek_stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // oldest? -CONS( 1988, tkingb, tking, 0, stratos, saitek_stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1990, tking, 0, 0, tking2, tking2, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 1, ver. D)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // aka Turbo King II +CONS( 1988, tkinga, tking, 0, stratos, stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // oldest? +CONS( 1988, tkingb, tking, 0, stratos, stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/includes/saitek_stratos.h b/src/mame/includes/saitek_stratos.h index 231ea8b53b9..7cb55bc9d85 100644 --- a/src/mame/includes/saitek_stratos.h +++ b/src/mame/includes/saitek_stratos.h @@ -26,12 +26,10 @@ public: saitek_stratos_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_lcd_busy(*this, "lcd_busy"), m_display(*this, "display"), m_extrom(*this, "extrom"), m_out_digit(*this, "digit%u", 0U), - m_out_lcd(*this, "lcd%u.%u.%u", 0U, 0U, 0U), - m_inputs(*this, "IN.%u", 0) + m_out_lcd(*this, "lcd%u.%u.%u", 0U, 0U, 0U) { } DECLARE_INPUT_CHANGED_MEMBER(cpu_freq) { set_cpu_freq(); } @@ -45,12 +43,10 @@ protected: // devices/pointers required_device m_maincpu; - required_device m_lcd_busy; required_device m_display; required_device m_extrom; output_finder<8+1> m_out_digit; output_finder<4, 16, 4> m_out_lcd; - required_ioport_array<8+1> m_inputs; // common handlers void clear_lcd() { std::fill_n(m_lcd_data, ARRAY_LENGTH(m_lcd_data), 0); } @@ -59,9 +55,11 @@ protected: void set_cpu_freq(); DECLARE_DEVICE_IMAGE_LOAD_MEMBER(extrom_load); - void lcd_w(u8 data); + void lcd_data_w(u8 data); + void lcd_reset_w(u8 data = 0); bool m_power; + bool m_lcd_ready; u8 m_lcd_count; u8 m_lcd_address; u8 m_lcd_data[0x40]; diff --git a/src/mame/layout/saitek_corona.lay b/src/mame/layout/saitek_corona.lay index af4152e892a..9f07fc171d2 100644 --- a/src/mame/layout/saitek_corona.lay +++ b/src/mame/layout/saitek_corona.lay @@ -330,7 +330,7 @@ - + @@ -499,7 +499,7 @@ - + @@ -598,39 +598,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -654,7 +654,7 @@ - + diff --git a/src/mame/layout/saitek_stratos.lay b/src/mame/layout/saitek_stratos.lay index 989b2697a24..f5fbac491a6 100644 --- a/src/mame/layout/saitek_stratos.lay +++ b/src/mame/layout/saitek_stratos.lay @@ -478,7 +478,7 @@ - + @@ -509,57 +509,57 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -628,39 +628,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3