summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pavone <pavone@retrodev.com>2013-06-17 19:34:47 -0700
committerMike Pavone <pavone@retrodev.com>2013-06-17 19:34:47 -0700
commit58c629c1f383be5094587ac57a5187387ad0270d (patch)
treef5b954606444fc38084fa82a3a6b911477d2fcc9
parentd2d71ada1e127eb06bdc8987ede5ab874c28b079 (diff)
Process events in vgm player so that quitting works
-rw-r--r--render.h1
-rw-r--r--render_sdl.c8
-rw-r--r--vgmplay.c11
3 files changed, 16 insertions, 4 deletions
diff --git a/render.h b/render.h
index bcf0913..5fb9818 100644
--- a/render.h
+++ b/render.h
@@ -15,6 +15,7 @@ uint32_t render_audio_buffer();
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>
diff --git a/render_sdl.c b/render_sdl.c
index 084adaf..e164b6c 100644
--- a/render_sdl.c
+++ b/render_sdl.c
@@ -366,6 +366,14 @@ int wait_render_frame(vdp_context * context, int frame_limit)
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);
diff --git a/vgmplay.c b/vgmplay.c
index bb296ab..98fb7f1 100644
--- a/vgmplay.c
+++ b/vgmplay.c
@@ -72,16 +72,19 @@ void handle_keyup(int keycode)
{
}
+#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();
}
}