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);
}
}
+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
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);
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;
}
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];
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();
}
}
}
- 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
pausemode(1);
}
}
- if (keyboard_reset_seq > 0) {
+ if (keyboard_reset_seq_mode && keyboard_reset_seq > 0) {
keyboard_reset_seq++;
}