changeset 1170:9170fc4d9835

Don't adjust cycles every frame. Only when we start getting close to UINT_MAX. Don't adjust all the way down to zero when we do adjust. Shouldn't fix anything, but may make debugging current issues easier.
author Michael Pavone <pavone@retrodev.com>
date Sun, 15 Jan 2017 22:54:01 -0800
parents 82d8b9324b10
children 43fa92976ff2
files genesis.c vdp.c
diffstat 2 files changed, 18 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/genesis.c	Sun Jan 15 22:38:31 2017 -0800
+++ b/genesis.c	Sun Jan 15 22:54:01 2017 -0800
@@ -148,6 +148,10 @@
 uint32_t refresh_counter;
 #endif
 
+#include <limits.h>
+#define ADJUST_BUFFER (8*MCLKS_LINE*313)
+#define MAX_NO_ADJUST (UINT_MAX-ADJUST_BUFFER)
+
 m68k_context * sync_components(m68k_context * context, uint32_t address)
 {
 	genesis_context * gen = context->system;
@@ -176,17 +180,19 @@
 				exit(0);
 			}
 		}
-
-		vdp_adjust_cycles(v_context, mclks);
-		io_adjust_cycles(gen->io.ports, context->current_cycle, mclks);
-		io_adjust_cycles(gen->io.ports+1, context->current_cycle, mclks);
-		io_adjust_cycles(gen->io.ports+2, context->current_cycle, mclks);
-		context->current_cycle -= mclks;
-		z80_adjust_cycles(z_context, mclks);
-		gen->ym->current_cycle -= mclks;
-		gen->psg->cycles -= mclks;
-		if (gen->ym->write_cycle != CYCLE_NEVER) {
-			gen->ym->write_cycle = gen->ym->write_cycle >= mclks ? gen->ym->write_cycle - mclks : 0;
+		if (context->current_cycle > MAX_NO_ADJUST) {
+			uint32_t deduction = mclks - ADJUST_BUFFER;
+			vdp_adjust_cycles(v_context, deduction);
+			io_adjust_cycles(gen->io.ports, context->current_cycle, deduction);
+			io_adjust_cycles(gen->io.ports+1, context->current_cycle, deduction);
+			io_adjust_cycles(gen->io.ports+2, context->current_cycle, deduction);
+			context->current_cycle -= deduction;
+			z80_adjust_cycles(z_context, deduction);
+			gen->ym->current_cycle -= deduction;
+			gen->psg->cycles -= deduction;
+			if (gen->ym->write_cycle != CYCLE_NEVER) {
+				gen->ym->write_cycle = gen->ym->write_cycle >= deduction ? gen->ym->write_cycle - deduction : 0;
+			}
 		}
 	}
 	gen->frame_end = vdp_cycles_to_frame_end(v_context);
--- a/vdp.c	Sun Jan 15 22:38:31 2017 -0800
+++ b/vdp.c	Sun Jan 15 22:54:01 2017 -0800
@@ -1174,7 +1174,7 @@
 		}
 		col -= 2;
 		dst = context->output + col * 8;
-		uint32_t color = context->colors[context->regs[REG_BG_COLOR]];
+		uint32_t color = context->colors[context->regs[REG_BG_COLOR] & 0x3F];
 		for (int i = 0; i < 16; i++)
 		{
 			*(dst++) = color;