From 6600710c7aa3aa59cd07029473853c9ed190b6bd Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 2 May 2020 23:57:17 +0200 Subject: [PATCH] leonardo: fix lockup and add buttonpanel leds (nw) --- src/devices/cpu/m6800/m6801.cpp | 2 +- src/mame/drivers/saitek_leonardo.cpp | 34 +++++------ src/mame/drivers/saitek_minichess.cpp | 4 +- src/mame/layout/mephisto_3.lay | 7 ++- src/mame/layout/mephisto_esb2.lay | 7 ++- src/mame/layout/saitek_leonardo.lay | 81 +++++++++++++++------------ src/mame/layout/saitek_mark6.lay | 30 +++++----- 7 files changed, 86 insertions(+), 79 deletions(-) diff --git a/src/devices/cpu/m6800/m6801.cpp b/src/devices/cpu/m6800/m6801.cpp index 5052b436e2a..56b893a3c5e 100644 --- a/src/devices/cpu/m6800/m6801.cpp +++ b/src/devices/cpu/m6800/m6801.cpp @@ -462,7 +462,7 @@ void m6801_cpu_device::set_timer_event() void hd6301x_cpu_device::set_timer_event() { m6801_cpu_device::set_timer_event(); - if (OC2D - CTD < m_timer_next) + if (OC2D - CTD < OCD - CTD && OC2D - CTD < TOD - CTD) m_timer_next = OC2D; } diff --git a/src/mame/drivers/saitek_leonardo.cpp b/src/mame/drivers/saitek_leonardo.cpp index f7c262d6082..4f7a93b4bf2 100644 --- a/src/mame/drivers/saitek_leonardo.cpp +++ b/src/mame/drivers/saitek_leonardo.cpp @@ -42,15 +42,8 @@ Expansion modules released: - Sparc (SPARClite, Spracklen's) TODO: -- It locks up a short time after you make an input error (eg. on computer's - turn, enter the wrong move so it will give a low pitch error beep, then hold - INS to fast-forward and it will lock up) - happens with leonardoa too, but - after a longer delay. At first glance, it looks like it's caused by inaccurate - 6801 timer emulation. It also locks up when you get checkmated, seems to be - the same problem as above. - OSA module support (softwarelist, devices/bus) - OSA PC link (probably uses MCU serial interface) -- unsure about white/black/check/end/module/comm leds - add nvram - finish internal artwork @@ -134,13 +127,14 @@ void leo_state::machine_start() void leo_state::update_display() { m_display->matrix_partial(0, 8, 1 << (m_inp_mux & 0xf), m_led_data[0], false); - m_display->matrix_partial(8, 3, ~m_inp_mux >> 5 & 7, (~m_inp_mux << 3 & 0x700) | m_led_data[1], true); + m_display->matrix_partial(8, 2, 1 << BIT(m_inp_mux, 5), (~m_inp_mux << 2 & 0x300) | m_led_data[1], true); } void leo_state::mux_w(u8 data) { - // d0-d3: input/chessboard leds mux - // d5-d7: button leds mux + // d0-d3: input/chessboard led mux + // d5: button led select + // d6,d7: button led data m_inp_mux = data; update_display(); @@ -150,7 +144,7 @@ void leo_state::mux_w(u8 data) void leo_state::leds_w(u8 data) { - // button leds data + // button led data m_led_data[1] = ~data; update_display(); } @@ -253,17 +247,17 @@ static INPUT_PORTS_START( leo ) PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) // pawn PORT_START("IN.2") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) // n + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN) PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) // tab/color PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) // + PORT_START("IN.3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) // freq + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_CUSTOM) // freq sel PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) // function? PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) // sound PORT_START("IN.4") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) // freq + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_CUSTOM) // freq sel PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) // stop? PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) // library? @@ -278,14 +272,16 @@ static INPUT_PORTS_START( leo ) PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) // analysis? PORT_START("IN.7") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_F) // n + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) // new game PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) // setup? PORT_START("IN.8") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_J) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_K) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_L) // low battery + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN) + PORT_CONFNAME( 0x04, 0x04, "Battery Status" ) + PORT_CONFSETTING( 0x00, "Low" ) + PORT_CONFSETTING( 0x04, DEF_STR( Normal ) ) INPUT_PORTS_END @@ -311,7 +307,7 @@ void leo_state::leo(machine_config &config) m_board->set_delay(attotime::from_msec(150)); /* video hardware */ - PWM_DISPLAY(config, m_display).set_size(8+3, 8+3); + PWM_DISPLAY(config, m_display).set_size(8+2, 8+2); config.set_default_layout(layout_saitek_leonardo); /* sound hardware */ diff --git a/src/mame/drivers/saitek_minichess.cpp b/src/mame/drivers/saitek_minichess.cpp index 8c60779f436..0783351bb95 100644 --- a/src/mame/drivers/saitek_minichess.cpp +++ b/src/mame/drivers/saitek_minichess.cpp @@ -67,7 +67,7 @@ private: void update_display(); template void seg_w(u8 data); void mux_w(u16 data); - u16 input_r(offs_t offset); + u16 input_r(); u8 m_inp_mux = 0; u8 m_lcd_select = 0; @@ -124,7 +124,7 @@ void mini_state::mux_w(u16 data) update_display(); } -u16 mini_state::input_r(offs_t offset) +u16 mini_state::input_r() { // D0,D2: switches u16 data = m_inputs[4]->read() & 5; diff --git a/src/mame/layout/mephisto_3.lay b/src/mame/layout/mephisto_3.lay index 868f20e483e..2953620b42d 100644 --- a/src/mame/layout/mephisto_3.lay +++ b/src/mame/layout/mephisto_3.lay @@ -643,6 +643,10 @@ license:CC0 + + + + @@ -671,7 +675,4 @@ license:CC0 - - - diff --git a/src/mame/layout/mephisto_esb2.lay b/src/mame/layout/mephisto_esb2.lay index 9126e05a520..3b91bb28e61 100644 --- a/src/mame/layout/mephisto_esb2.lay +++ b/src/mame/layout/mephisto_esb2.lay @@ -640,6 +640,10 @@ license:CC0 + + + + @@ -668,7 +672,4 @@ license:CC0 - - - diff --git a/src/mame/layout/saitek_leonardo.lay b/src/mame/layout/saitek_leonardo.lay index c23c95a8533..be76ae61b55 100644 --- a/src/mame/layout/saitek_leonardo.lay +++ b/src/mame/layout/saitek_leonardo.lay @@ -9,8 +9,20 @@ license:CC0 - - + + + + + + + + + + + + + + @@ -374,7 +386,7 @@ license:CC0 - + @@ -456,42 +468,39 @@ license:CC0 + + + + - - - - - - - - - - - + + + + + + - - - - - - - - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/saitek_mark6.lay b/src/mame/layout/saitek_mark6.lay index 5ad2f9e937e..32eae34d825 100644 --- a/src/mame/layout/saitek_mark6.lay +++ b/src/mame/layout/saitek_mark6.lay @@ -781,6 +781,21 @@ license:CC0 + + + + + + + + + + + + + + + @@ -799,19 +814,4 @@ license:CC0 - - - - - - - - - - - - - - -