]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Add delay between LD reply bytes
authorToni Wilen <twilen@winuae.net>
Sat, 3 Feb 2024 13:59:51 +0000 (15:59 +0200)
committerToni Wilen <twilen@winuae.net>
Sat, 3 Feb 2024 13:59:51 +0000 (15:59 +0200)
arcadia.cpp

index a0f8b9ad80a051f0f77dfd21911840693babda75..0358b35a4692cdc270e0b89686ccc997080b818c 100644 (file)
@@ -66,6 +66,7 @@ static void multigame (int);
 
 int arcadia_flag, arcadia_coin[2];
 struct arcadiarom *arcadia_bios, *arcadia_game;
+static int arcadia_hsync_cnt;
 
 static struct arcadiarom roms[]        = {
 
@@ -478,6 +479,11 @@ static void nvram_read (void)
 
 static void alg_vsync(void);
 static void cubo_vsync(void);
+
+static void arcadia_hsync(void)
+{
+       arcadia_hsync_cnt++;
+}
 static void arcadia_vsync(void)
 {
        if (alg_flag)
@@ -526,6 +532,8 @@ int arcadia_map_banks (void)
        multigame (0);
        map_banks (&arcadia_boot_bank, 0xf0, 8, 0);
        device_add_vsync_pre(arcadia_vsync);
+       device_add_hsync(arcadia_hsync);
+       arcadia_hsync_cnt = 0;
        return 1;
 }
 
@@ -688,6 +696,7 @@ static int ser_buf_offset;
 static int ld_wait_ack;
 static int ld_audio;
 static int ld_vsync;
+static int alg_hsync_delay;
 
 static void sb(uae_u8 v)
 {
@@ -936,12 +945,19 @@ void ld_serial_read(uae_u16 w)
 
 int ld_serial_write(void)
 {
+       int v = -1;
+       if (arcadia_hsync_cnt < alg_hsync_delay) {
+               return -1;
+       }
        if (alg_flag || currprefs.genlock_image == 7) {
-               return sony_serial_write();
+               v = sony_serial_write();
        } else if (currprefs.genlock_image == 8) {
-               return pioneer_serial_write();
+               v = pioneer_serial_write();
        }
-       return -1;
+       if (v >= 0) {
+               alg_hsync_delay = arcadia_hsync_cnt + 3;
+       }
+       return v;
 }
 
 /*
@@ -1080,7 +1096,10 @@ void alg_map_banks(void)
        ld_wait_ack = 0;
        ld_direction = 0;
        ser_buf_offset = 0;
+       alg_hsync_delay = 0;
+       arcadia_hsync_cnt = 0;
        device_add_vsync_pre(arcadia_vsync);
+       device_add_hsync(arcadia_hsync);
        if (!currprefs.genlock) {
                currprefs.genlock = changed_prefs.genlock = 1;
        }