From: Toni Wilen Date: Sat, 3 Feb 2024 13:59:51 +0000 (+0200) Subject: Add delay between LD reply bytes X-Git-Tag: 5200~26 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=37a38925766b91a34babe0a13c3a32db863b5a92;p=francis%2Fwinuae.git Add delay between LD reply bytes --- diff --git a/arcadia.cpp b/arcadia.cpp index a0f8b9ad..0358b35a 100644 --- a/arcadia.cpp +++ b/arcadia.cpp @@ -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; }