| 4639 | } |
| 4640 | |
| 4641 | void inputdevice_do_keyboard(int code, int state) |
| 4642 | { |
| 4643 | #ifdef CDTV |
| 4644 | if (code >= 0x72 && code <= 0x77) { // CDTV keys |
| 4645 | if (cdtv_front_panel(-1)) { |
| 4646 | // front panel active |
| 4647 | if (!state) |
| 4648 | return; |
| 4649 | cdtv_front_panel(code - 0x72); |
| 4650 | return; |
| 4651 | } |
| 4652 | } |
| 4653 | #endif |
| 4654 | if (code < 0x80) { |
| 4655 | uae_u8 key = code | (state ? 0x00 : 0x80); |
| 4656 | keybuf[key & 0x7f] = (key & 0x80) ? 0 : 1; |
| 4657 | |
| 4658 | if (keyboard_reset_seq_mode > 0) { |
| 4659 | if (keyboard_reset_seq_mode == 3) { |
| 4660 | if (keyboard_reset_seq >= 15 * 50) { |
| 4661 | if (!keyboardresetkeys()) { |
| 4662 | keyboard_reset_seq_mode = 0; |
| 4663 | } else { |
| 4664 | keyboard_reset_seq_mode = 4; |
| 4665 | } |
| 4666 | keyboard_reset_seq = 0; |
| 4667 | } |
| 4668 | return; |
| 4669 | } |
| 4670 | if (!keyboardresetkeys()) { |
| 4671 | memset(keybuf, 0, sizeof(keybuf)); |
| 4672 | if (keyboard_reset_seq >= 5 * 50 || keyboard_reset_seq_mode > 0) { |
| 4673 | send_internalevent(INTERNALEVENT_KBRESET); |
| 4674 | if (keyboard_reset_seq >= 5 * 50 || keyboard_reset_seq_mode == 2) { |
| 4675 | custom_reset(true, true); |
| 4676 | uae_reset(1, 1); |
| 4677 | } else { |
| 4678 | custom_reset(false, true); |
| 4679 | uae_reset(0, 1); |
| 4680 | } |
| 4681 | } |
| 4682 | keyboard_reset_seq = 0; |
| 4683 | keyboard_reset_seq_mode = 0; |
| 4684 | release_keys(); |
| 4685 | } |
| 4686 | return; |
| 4687 | } |
| 4688 | if (currprefs.keyboard_mode > 0) { |
| 4689 | if (!currprefs.cs_resetwarning) { |
| 4690 | if (keyboardresetkeys() || key == AK_RESETWARNING) { |
| 4691 | int r = keybuf[AK_LALT] | keybuf[AK_RALT]; |
| 4692 | if (r) { |
| 4693 | custom_reset(true, true); |
| 4694 | cpu_inreset(); |
| 4695 | keyboard_reset_seq_mode = 2; |
| 4696 | } else { |
| 4697 | custom_reset(false, true); |
| 4698 | cpu_inreset(); |
no test coverage detected