]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Delay warp mode automatic release by few frames
authorToni Wilen <twilen@winuae.net>
Mon, 20 Dec 2021 19:08:38 +0000 (21:08 +0200)
committerToni Wilen <twilen@winuae.net>
Mon, 20 Dec 2021 19:08:38 +0000 (21:08 +0200)
cia.cpp
include/keybuf.h
keybuf.cpp

diff --git a/cia.cpp b/cia.cpp
index b6f72f517f0df5bb7b32d8744c609bc2f2c0f5c9..a39f3586314608e70cf5d9e73d2a68a25206a141 100644 (file)
--- 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) {
index 01f629f0a87a39b71d5b4042e53ba89a924b1c3f..d411ec0235ac5633eb314866cb2249970eec887a 100644 (file)
@@ -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 */
index 21d0bedc275d8f12cd5a8aefeeb9a2f0ff57e7b5..a9ba38eb575fa0400c7e03aa4cd6f09920830aa4 100644 (file)
@@ -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);
 }