extern void setcapslockstate (int);
extern void keybuf_inject(const uae_char*);
extern void keybuf_ignore_next_release(void);
+extern void keybuf_vsync(void);
#endif /* UAE_KEYBUF_H */
static bool keyinject_state;
static bool keyinject_do;
static bool ignore_next_release;
+static int delayed_released_code;
+static int delayed_released_time;
+
struct kbtab
{
kpb_last = 0;
// send release immediately in warp mode if not qualifier key
+ delayed_released_time = 0;
if (currprefs.turbo_emulation && !(key & 0x01) && (key >> 1) < 0x60) {
if (!keys_available()) {
- record_key(key | 0x01);
+ delayed_released_code = key | 0x01;
+ delayed_released_time = 5;
}
}
return key;
}
+void keybuf_vsync(void)
+{
+ if (delayed_released_time > 0) {
+ delayed_released_time--;
+ if (delayed_released_time == 0) {
+ record_key(delayed_released_code);
+ }
+ }
+}
+
int record_key (int kc)
{
if (pause_emulation)
keyinject_offset = 0;
xfree(keyinject);
keyinject = NULL;
+ delayed_released_code = -1;
+ delayed_released_time = 0;
inputdevice_updateconfig (&changed_prefs, &currprefs);
}