From: Toni Wilen Date: Sat, 18 Mar 2023 13:04:33 +0000 (+0200) Subject: Keyboard reset change when reset warning is configured. X-Git-Tag: 5.0.0~111 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=60fc6ab7184730155a4ee16bbbf2a82ad8835975;p=francis%2Fwinuae.git Keyboard reset change when reset warning is configured. --- diff --git a/cia.cpp b/cia.cpp index d4be9354..c5c74e3d 100644 --- a/cia.cpp +++ b/cia.cpp @@ -982,7 +982,7 @@ static void resetwarning_check(void) write_log(_T("KB: reset warning forced reset. Phase=%d\n"), resetwarning_phase); resetwarning_phase = -1; kblostsynccnt = 0; - inputdevice_do_kb_reset(0); + inputdevice_do_kb_reset(); } } if (resetwarning_phase == 1) { @@ -1004,7 +1004,7 @@ static void resetwarning_check(void) write_log(_T("KB: reset warning end by software. reset.\n")); resetwarning_phase = -1; kblostsynccnt = 0; - inputdevice_do_kb_reset(0); + inputdevice_do_kb_reset(); } } } diff --git a/include/inputdevice.h b/include/inputdevice.h index a3b206ed..2d8d6204 100644 --- a/include/inputdevice.h +++ b/include/inputdevice.h @@ -264,7 +264,7 @@ extern int inputdevice_translatekeycode (int keyboard, int scancode, int state, extern void inputdevice_checkqualifierkeycode (int keyboard, int scancode, int state); extern void inputdevice_setkeytranslation (struct uae_input_device_kbr_default **trans, int **kbmaps); extern void inputdevice_do_keyboard(int code, int state); -extern void inputdevice_do_kb_reset(int); +extern void inputdevice_do_kb_reset(void); extern int inputdevice_iskeymapped (int keyboard, int scancode); extern int inputdevice_synccapslock (int, int*); extern void inputdevice_testrecord (int type, int num, int wtype, int wnum, int state, int max); diff --git a/inputdevice.cpp b/inputdevice.cpp index 5d933111..276e1a30 100644 --- a/inputdevice.cpp +++ b/inputdevice.cpp @@ -4451,6 +4451,11 @@ void inputdevice_add_inputcode (int code, int state, const TCHAR *s) } } +static bool keyboardresetkeys(void) +{ + return (keybuf[AK_CTRL] || keybuf[AK_RCTRL]) && keybuf[AK_LAMI] && keybuf[AK_RAMI]; +} + void inputdevice_do_keyboard(int code, int state) { #ifdef CDTV @@ -4467,8 +4472,18 @@ void inputdevice_do_keyboard(int code, int state) if (code < 0x80) { uae_u8 key = code | (state ? 0x00 : 0x80); keybuf[key & 0x7f] = (key & 0x80) ? 0 : 1; - if (keyboard_reset_seq_mode) { - if (!(keybuf[AK_CTRL] || keybuf[AK_RCTRL]) || !keybuf[AK_LAMI] || !keybuf[AK_RAMI]) { + if (keyboard_reset_seq_mode > 0) { + if (keyboard_reset_seq_mode == 3) { + if (keyboard_reset_seq >= 15 * 50) { + if (!keyboardresetkeys()) { + keyboard_reset_seq_mode = 0; + } else { + keyboard_reset_seq_mode = 4; + } + } + return; + } + if (!keyboardresetkeys()) { memset(keybuf, 0, sizeof(keybuf)); if (keyboard_reset_seq >= 5 * 50 || keyboard_reset_seq_mode > 0) { send_internalevent(INTERNALEVENT_KBRESET); @@ -4479,8 +4494,6 @@ void inputdevice_do_keyboard(int code, int state) custom_reset(false, true); uae_reset(0, 1); } - } else if (keyboard_reset_seq_mode == -1) { - resetwarning_do(0); } keyboard_reset_seq = 0; keyboard_reset_seq_mode = 0; @@ -4490,9 +4503,11 @@ void inputdevice_do_keyboard(int code, int state) } if (key == AK_RESETWARNING) { - resetwarning_do(0); + if (resetwarning_do(0)) { + keyboard_reset_seq_mode = 3; + } return; - } else if ((keybuf[AK_CTRL] || keybuf[AK_RCTRL]) && keybuf[AK_LAMI] && keybuf[AK_RAMI]) { + } else if (keyboardresetkeys()) { keyboard_reset_seq = 0; keyboard_reset_seq_mode = 0; int r = keybuf[AK_LALT] | keybuf[AK_RALT]; @@ -4501,9 +4516,8 @@ void inputdevice_do_keyboard(int code, int state) custom_reset(true, true); cpu_inreset(); } else { - keyboard_reset_seq = 1; - if (currprefs.cs_resetwarning) { - keyboard_reset_seq_mode = -1; + if (currprefs.cs_resetwarning && resetwarning_do(0)) { + keyboard_reset_seq_mode = 3; } else { custom_reset(false, true); cpu_inreset(); @@ -4511,21 +4525,28 @@ void inputdevice_do_keyboard(int code, int state) } } } - if (record_key((uae_u8)((key << 1) | (key >> 7)))) { - if (inputdevice_logging & 1) - write_log(_T("Amiga key %02X %d\n"), key & 0x7f, key >> 7); + if (!keyboard_reset_seq_mode) { + if (record_key((uae_u8)((key << 1) | (key >> 7)))) { + if (inputdevice_logging & 1) + write_log(_T("Amiga key %02X %d\n"), key & 0x7f, key >> 7); + } } return; } inputdevice_add_inputcode(code, state, NULL); } -void inputdevice_do_kb_reset(int hardreset) +void inputdevice_do_kb_reset(void) { - send_internalevent(INTERNALEVENT_KBRESET); - uae_reset(hardreset, 1); - keyboard_reset_seq_mode = 0; - keyboard_reset_seq = 0; + custom_reset(false, true); + if (keyboard_reset_seq_mode == 3) { + if (!keyboardresetkeys()) { + keyboard_reset_seq_mode = 0; + uae_reset(0, 1); + } else { + keyboard_reset_seq_mode = 4; + } + } } // these need cpu trace data @@ -5599,7 +5620,7 @@ void inputdevice_vsync (void) pausemode(1); } } - if (keyboard_reset_seq > 0) { + if (keyboard_reset_seq_mode && keyboard_reset_seq > 0) { keyboard_reset_seq++; }