diff --git a/builds/genesis_plus_gx_libretro.dll b/builds/genesis_plus_gx_libretro.dll index 4fa5c36..f49787c 100644 Binary files a/builds/genesis_plus_gx_libretro.dll and b/builds/genesis_plus_gx_libretro.dll differ diff --git a/builds/genplus_cube.dol b/builds/genplus_cube.dol index 03c0f3c..23e4458 100644 Binary files a/builds/genplus_cube.dol and b/builds/genplus_cube.dol differ diff --git a/builds/genplus_wii.dol b/builds/genplus_wii.dol index c0e40d8..9a52846 100644 Binary files a/builds/genplus_wii.dol and b/builds/genplus_wii.dol differ diff --git a/core/vdp_ctrl.c b/core/vdp_ctrl.c index 6d4aea0..c3a7573 100644 --- a/core/vdp_ctrl.c +++ b/core/vdp_ctrl.c @@ -622,6 +622,13 @@ void vdp_dma_update(unsigned int cycles) /* Adjust for 68k bus DMA to VRAM (one word = 2 access) or DMA Copy (one read + one write = 2 access) */ rate = rate >> (dma_type & 1); + + /* Adjust for 68k bus DMA to CRAM or VSRAM when display is off (one additional access slot is lost for each refresh slot) */ + if (dma_type == 0) + { + if (rate == 166) rate = 161; /* 5 refresh slots per line in H32 mode when display is off */ + else if (rate == 204) rate = 198; /* 6 refresh slots per line in H40 mode when display is off */ + } /* Remaining DMA cycles */ if (status & 8) @@ -2444,6 +2451,9 @@ static void vdp_68k_data_w_m5(unsigned int data) dma_length = 0x10000; } + /* Take into account initial data word processing */ + dma_length += 2; + /* Trigger DMA */ vdp_dma_update(m68k.cycles); }