From: Toni Wilen Date: Mon, 20 Dec 2021 19:08:38 +0000 (+0200) Subject: Delay warp mode automatic release by few frames X-Git-Tag: 4910~38 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=10b4ac20499c176a61aba543121d96793ac3c964;p=francis%2Fwinuae.git Delay warp mode automatic release by few frames --- diff --git a/cia.cpp b/cia.cpp index b6f72f51..a39f3586 100644 --- a/cia.cpp +++ b/cia.cpp @@ -969,6 +969,7 @@ void CIA_vsync_prehandler (void) led_vsync (); CIA_handler (); + keybuf_vsync(); if (kblostsynccnt > 0) { kblostsynccnt -= maxvpos; if (kblostsynccnt <= 0) { diff --git a/include/keybuf.h b/include/keybuf.h index 01f629f0..d411ec02 100644 --- a/include/keybuf.h +++ b/include/keybuf.h @@ -19,5 +19,6 @@ extern int getcapslockstate (void); 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 */ diff --git a/keybuf.cpp b/keybuf.cpp index 21d0bedc..a9ba38eb 100644 --- a/keybuf.cpp +++ b/keybuf.cpp @@ -33,6 +33,9 @@ static uae_u8 keyinject_previous; 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 { @@ -241,9 +244,11 @@ int get_next_key (void) 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; } } @@ -251,6 +256,16 @@ int get_next_key (void) 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) @@ -288,6 +303,8 @@ void keybuf_init (void) keyinject_offset = 0; xfree(keyinject); keyinject = NULL; + delayed_released_code = -1; + delayed_released_time = 0; inputdevice_updateconfig (&changed_prefs, &currprefs); }