shithub: choc

Download patch

ref: e4d9b85aa45fe31cb9b18a1ac8e9a95c7bc6ea5b
parent: 2afa4144dbb898e3e746a5aeb0af562958fbc27a
author: Simon Howard <fraggle@gmail.com>
date: Tue Oct 7 18:47:29 EDT 2014

opl: Use uint64_t for microsecond times.

Previous revamping of the OPL library changed delay times from ms
to us, and switched to 64-bit times for storage for them. However
this type change was botched and some functions were still using
32-bit arguments. Change to 64-bit types.

Thanks Quasar for reporting this. This fixes #438.

--- a/opl/opl.c
+++ b/opl/opl.c
@@ -357,7 +357,7 @@
 // Timer functions.
 //
 
-void OPL_SetCallback(unsigned int us, opl_callback_t callback, void *data)
+void OPL_SetCallback(uint64_t us, opl_callback_t callback, void *data)
 {
     if (driver != NULL)
     {
@@ -409,7 +409,7 @@
     SDL_UnlockMutex(delay_data->mutex);
 }
 
-void OPL_Delay(unsigned int us)
+void OPL_Delay(uint64_t us)
 {
     delay_data_t delay_data;
 
--- a/opl/opl.h
+++ b/opl/opl.h
@@ -110,7 +110,7 @@
 // Set a timer callback.  After the specified number of microseconds
 // have elapsed, the callback will be invoked.
 
-void OPL_SetCallback(unsigned int us, opl_callback_t callback, void *data);
+void OPL_SetCallback(uint64_t us, opl_callback_t callback, void *data);
 
 // Adjust callback times by the specified factor. For example, a value of
 // 0.5 will halve all remaining times.
@@ -132,7 +132,7 @@
 
 // Block until the specified number of microseconds have elapsed.
 
-void OPL_Delay(unsigned int us);
+void OPL_Delay(uint64_t us);
 
 // Pause the OPL callbacks.
 
--- a/opl/opl_internal.h
+++ b/opl/opl_internal.h
@@ -25,7 +25,7 @@
 typedef void (*opl_shutdown_func)(void);
 typedef unsigned int (*opl_read_port_func)(opl_port_t port);
 typedef void (*opl_write_port_func)(opl_port_t port, unsigned int value);
-typedef void (*opl_set_callback_func)(unsigned int us,
+typedef void (*opl_set_callback_func)(uint64_t us,
                                       opl_callback_t callback,
                                       void *data);
 typedef void (*opl_clear_callbacks_func)(void);
--- a/opl/opl_sdl.c
+++ b/opl/opl_sdl.c
@@ -457,8 +457,7 @@
     }
 }
 
-static void OPL_SDL_SetCallback(unsigned int us,
-                                opl_callback_t callback,
+static void OPL_SDL_SetCallback(uint64_t us, opl_callback_t callback,
                                 void *data)
 {
     SDL_LockMutex(callback_queue_mutex);