]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Keyboard reset change when reset warning is configured.
authorToni Wilen <twilen@winuae.net>
Sat, 18 Mar 2023 13:04:33 +0000 (15:04 +0200)
committerToni Wilen <twilen@winuae.net>
Sat, 18 Mar 2023 13:04:33 +0000 (15:04 +0200)
cia.cpp
include/inputdevice.h
inputdevice.cpp

diff --git a/cia.cpp b/cia.cpp
index d4be935450ee9dc7bf3d8e3d205244fae423ce09..c5c74e3dc932ef8ab065280a394193682285bd32 100644 (file)
--- 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();
                }
        }
 }
index a3b206eda3bc2b92022d197a7b1d75deb68f8904..2d8d62045e40203168097498b560fc4d2d979762 100644 (file)
@@ -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);
index 5d9331110d8e65ce343307b6a85e053bbefd3673..276e1a30fb640d07a312782954a3c685f02e3269 100644 (file)
@@ -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++;
        }