changeset 409:c1bddeadc566

Process events in vgm player so that quitting works
author Mike Pavone <pavone@retrodev.com>
date Mon, 17 Jun 2013 19:34:47 -0700
parents a13a83934ba3
children 41c079dbee73
files render.h render_sdl.c vgmplay.c
diffstat 3 files changed, 16 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/render.h	Mon Jun 17 00:54:14 2013 -0700
+++ b/render.h	Mon Jun 17 19:34:47 2013 -0700
@@ -15,6 +15,7 @@
 uint32_t render_sample_rate();
 void render_debug_mode(uint8_t mode);
 void render_debug_pal(uint8_t pal);
+void process_events();
 
 //TODO: Throw an ifdef in here once there's more than one renderer
 #include <SDL.h>
--- a/render_sdl.c	Mon Jun 17 00:54:14 2013 -0700
+++ b/render_sdl.c	Mon Jun 17 19:34:47 2013 -0700
@@ -366,6 +366,14 @@
 	return ret;
 }
 
+void process_events()
+{
+	SDL_Event event;
+	while(SDL_PollEvent(&event)) {
+		handle_event(&event);
+	}
+}
+
 void render_wait_psg(psg_context * context)
 {
 	SDL_LockMutex(audio_mutex);
--- a/vgmplay.c	Mon Jun 17 00:54:14 2013 -0700
+++ b/vgmplay.c	Mon Jun 17 19:34:47 2013 -0700
@@ -72,16 +72,19 @@
 {
 }
 
+#define CYCLE_LIMIT MCLKS_NTSC/60
+
 void wait(ym2612_context * y_context, psg_context * p_context, uint32_t * current_cycle, uint32_t cycles)
 {
 	*current_cycle += cycles;
 	psg_run(p_context, *current_cycle);
 	ym_run(y_context, *current_cycle);
 	
-	if (*current_cycle > 0x1FFFFFFF) {
-		*current_cycle -= 0x1FFFFFFF;
-		p_context->cycles -= 0x1FFFFFFF;
-		y_context->current_cycle -= 0x1FFFFFFF;
+	if (*current_cycle > CYCLE_LIMIT) {
+		*current_cycle -= CYCLE_LIMIT;
+		p_context->cycles -= CYCLE_LIMIT;
+		y_context->current_cycle -= CYCLE_LIMIT;
+		process_events();
 	}
 }