changeset 678:a7971650c04e

Adjusted h40_hsync_cycles so that lines actually take 3420 mclks. Fixed vdp_cycles_next_line to take h40_sync_cycles into account
author Michael Pavone <pavone@retrodev.com>
date Sun, 04 Jan 2015 12:24:34 -0800
parents 687c1dd3bcb9
children 7dd83295193a
files vdp.c
diffstat 1 files changed, 10 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/vdp.c	Sat Jan 03 21:54:41 2015 -0800
+++ b/vdp.c	Sun Jan 04 12:24:34 2015 -0800
@@ -1420,7 +1420,7 @@
 	}
 }
 
-uint32_t h40_hsync_cycles[] = {19, 20, 20, 20, 18, 20, 20, 20, 18, 20, 20, 20, 18, 20, 20, 20, 19};
+uint32_t const h40_hsync_cycles[] = {19, 20, 20, 20, 19, 20, 20, 20, 19, 20, 20, 20, 19, 20, 20, 20, 19};
 
 void vdp_run_context(vdp_context * context, uint32_t target_cycles)
 {
@@ -1827,6 +1827,15 @@
 			return (HBLANK_START_H40 - context->hslot) * MCLKS_SLOT_H40;
 		} else if (context->hslot < 183) {
 			return MCLKS_LINE - (context->hslot - LINE_CHANGE_H40) * MCLKS_SLOT_H40;
+		} else if (context->hslot < HSYNC_END_H40){
+			uint32_t before_hsync = context->hslot < HSYNC_SLOT_H40 ? (HSYNC_SLOT_H40 - context->hslot) * MCLKS_SLOT_H40 : 0;
+			uint32_t hsync = 0;
+			for (int i = context->hslot <= HSYNC_SLOT_H40 ? 0 : context->hslot - HSYNC_SLOT_H40; i < sizeof(h40_hsync_cycles)/sizeof(uint32_t); i++)
+			{
+				hsync += h40_hsync_cycles[i];
+			}
+			uint32_t after_hsync = (256- HSYNC_END_H40 + LINE_CHANGE_H40) * MCLKS_SLOT_H40;
+			return before_hsync + hsync + after_hsync;
 		} else {
 			return (256-context->hslot + LINE_CHANGE_H40) * MCLKS_SLOT_H40;
 		}