mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
Moved OSX osd_sleep and friends to modules/lib (nw)
This commit is contained in:
parent
dfb34cdb00
commit
d1f0fd9fe8
@ -6,11 +6,17 @@
|
||||
|
||||
#include <mach/mach.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <mach/mach_traps.h>
|
||||
#include <Carbon/Carbon.h>
|
||||
|
||||
// MAME headers
|
||||
#include "osdcore.h"
|
||||
#include "osdlib.h"
|
||||
|
||||
// FIXME: We shouldn't use SDL functions in here
|
||||
|
||||
#include "sdlinc.h"
|
||||
|
||||
//============================================================
|
||||
// osd_process_kill
|
||||
//============================================================
|
||||
@ -102,3 +108,121 @@ int osd_setenv(const char *name, const char *value, int overwrite)
|
||||
{
|
||||
return setenv(name, value, overwrite);
|
||||
}
|
||||
|
||||
//============================================================
|
||||
// PROTOTYPES
|
||||
//============================================================
|
||||
|
||||
static osd_ticks_t init_cycle_counter(void);
|
||||
static osd_ticks_t mach_cycle_counter(void);
|
||||
|
||||
//============================================================
|
||||
// STATIC VARIABLES
|
||||
//============================================================
|
||||
|
||||
static osd_ticks_t (*cycle_counter)(void) = init_cycle_counter;
|
||||
static osd_ticks_t (*ticks_counter)(void) = init_cycle_counter;
|
||||
static osd_ticks_t ticks_per_second;
|
||||
|
||||
//============================================================
|
||||
// init_cycle_counter
|
||||
//
|
||||
// to avoid total grossness, this function is split by subarch
|
||||
//============================================================
|
||||
|
||||
static osd_ticks_t init_cycle_counter(void)
|
||||
{
|
||||
osd_ticks_t start, end;
|
||||
osd_ticks_t a, b;
|
||||
|
||||
cycle_counter = mach_cycle_counter;
|
||||
ticks_counter = mach_cycle_counter;
|
||||
|
||||
// wait for an edge on the timeGetTime call
|
||||
a = SDL_GetTicks();
|
||||
do
|
||||
{
|
||||
b = SDL_GetTicks();
|
||||
} while (a == b);
|
||||
|
||||
// get the starting cycle count
|
||||
start = (*cycle_counter)();
|
||||
|
||||
// now wait for 1/4 second total
|
||||
do
|
||||
{
|
||||
a = SDL_GetTicks();
|
||||
} while (a - b < 250);
|
||||
|
||||
// get the ending cycle count
|
||||
end = (*cycle_counter)();
|
||||
|
||||
// compute ticks_per_sec
|
||||
ticks_per_second = (end - start) * 4;
|
||||
|
||||
// return the current cycle count
|
||||
return (*cycle_counter)();
|
||||
}
|
||||
|
||||
//============================================================
|
||||
// performance_cycle_counter
|
||||
//============================================================
|
||||
|
||||
//============================================================
|
||||
// mach_cycle_counter
|
||||
//============================================================
|
||||
static osd_ticks_t mach_cycle_counter(void)
|
||||
{
|
||||
return mach_absolute_time();
|
||||
}
|
||||
|
||||
//============================================================
|
||||
// osd_cycles
|
||||
//============================================================
|
||||
|
||||
osd_ticks_t osd_ticks(void)
|
||||
{
|
||||
return (*cycle_counter)();
|
||||
}
|
||||
|
||||
|
||||
//============================================================
|
||||
// osd_ticks_per_second
|
||||
//============================================================
|
||||
|
||||
osd_ticks_t osd_ticks_per_second(void)
|
||||
{
|
||||
if (ticks_per_second == 0)
|
||||
{
|
||||
// if we haven't computed the value yet, there's no time like the present
|
||||
init_cycle_counter();
|
||||
}
|
||||
return ticks_per_second;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//============================================================
|
||||
// osd_sleep
|
||||
//============================================================
|
||||
|
||||
void osd_sleep(osd_ticks_t duration)
|
||||
{
|
||||
UINT32 msec;
|
||||
|
||||
// make sure we've computed ticks_per_second
|
||||
if (ticks_per_second == 0)
|
||||
(void)osd_ticks();
|
||||
|
||||
// convert to milliseconds, rounding down
|
||||
msec = (UINT32)(duration * 1000 / ticks_per_second);
|
||||
|
||||
// only sleep if at least 2 full milliseconds
|
||||
if (msec >= 2)
|
||||
{
|
||||
// take a couple of msecs off the top for good measure
|
||||
msec -= 2;
|
||||
usleep(msec*1000);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,123 +22,6 @@
|
||||
// MAME headers
|
||||
#include "osdcore.h"
|
||||
|
||||
//============================================================
|
||||
// PROTOTYPES
|
||||
//============================================================
|
||||
|
||||
static osd_ticks_t init_cycle_counter(void);
|
||||
static osd_ticks_t mach_cycle_counter(void);
|
||||
|
||||
//============================================================
|
||||
// STATIC VARIABLES
|
||||
//============================================================
|
||||
|
||||
static osd_ticks_t (*cycle_counter)(void) = init_cycle_counter;
|
||||
static osd_ticks_t (*ticks_counter)(void) = init_cycle_counter;
|
||||
static osd_ticks_t ticks_per_second;
|
||||
|
||||
//============================================================
|
||||
// init_cycle_counter
|
||||
//
|
||||
// to avoid total grossness, this function is split by subarch
|
||||
//============================================================
|
||||
|
||||
static osd_ticks_t init_cycle_counter(void)
|
||||
{
|
||||
osd_ticks_t start, end;
|
||||
osd_ticks_t a, b;
|
||||
|
||||
cycle_counter = mach_cycle_counter;
|
||||
ticks_counter = mach_cycle_counter;
|
||||
|
||||
// wait for an edge on the timeGetTime call
|
||||
a = SDL_GetTicks();
|
||||
do
|
||||
{
|
||||
b = SDL_GetTicks();
|
||||
} while (a == b);
|
||||
|
||||
// get the starting cycle count
|
||||
start = (*cycle_counter)();
|
||||
|
||||
// now wait for 1/4 second total
|
||||
do
|
||||
{
|
||||
a = SDL_GetTicks();
|
||||
} while (a - b < 250);
|
||||
|
||||
// get the ending cycle count
|
||||
end = (*cycle_counter)();
|
||||
|
||||
// compute ticks_per_sec
|
||||
ticks_per_second = (end - start) * 4;
|
||||
|
||||
// return the current cycle count
|
||||
return (*cycle_counter)();
|
||||
}
|
||||
|
||||
//============================================================
|
||||
// performance_cycle_counter
|
||||
//============================================================
|
||||
|
||||
//============================================================
|
||||
// mach_cycle_counter
|
||||
//============================================================
|
||||
static osd_ticks_t mach_cycle_counter(void)
|
||||
{
|
||||
return mach_absolute_time();
|
||||
}
|
||||
|
||||
//============================================================
|
||||
// osd_cycles
|
||||
//============================================================
|
||||
|
||||
osd_ticks_t osd_ticks(void)
|
||||
{
|
||||
return (*cycle_counter)();
|
||||
}
|
||||
|
||||
|
||||
//============================================================
|
||||
// osd_ticks_per_second
|
||||
//============================================================
|
||||
|
||||
osd_ticks_t osd_ticks_per_second(void)
|
||||
{
|
||||
if (ticks_per_second == 0)
|
||||
{
|
||||
// if we haven't computed the value yet, there's no time like the present
|
||||
init_cycle_counter();
|
||||
}
|
||||
return ticks_per_second;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//============================================================
|
||||
// osd_sleep
|
||||
//============================================================
|
||||
|
||||
void osd_sleep(osd_ticks_t duration)
|
||||
{
|
||||
UINT32 msec;
|
||||
|
||||
// make sure we've computed ticks_per_second
|
||||
if (ticks_per_second == 0)
|
||||
(void)osd_ticks();
|
||||
|
||||
// convert to milliseconds, rounding down
|
||||
msec = (UINT32)(duration * 1000 / ticks_per_second);
|
||||
|
||||
// only sleep if at least 2 full milliseconds
|
||||
if (msec >= 2)
|
||||
{
|
||||
// take a couple of msecs off the top for good measure
|
||||
msec -= 2;
|
||||
usleep(msec*1000);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//============================================================
|
||||
// osd_get_clipboard_text
|
||||
|
Loading…
Reference in New Issue
Block a user