From fc72c5375813a6bbc0845aca984147a944a7e62a Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Fri, 3 Feb 2006 15:19:58 +0000 Subject: Patch #1417462 by Dan Everton - Improved SDL simulator git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8546 a1c6a512-1295-4272-9138-f99709370657 --- uisimulator/sdl/thread-sdl.c | 78 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 uisimulator/sdl/thread-sdl.c (limited to 'uisimulator/sdl/thread-sdl.c') diff --git a/uisimulator/sdl/thread-sdl.c b/uisimulator/sdl/thread-sdl.c new file mode 100644 index 0000000000..41a60c9bc5 --- /dev/null +++ b/uisimulator/sdl/thread-sdl.c @@ -0,0 +1,78 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2006 Dan Everton + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include +#include +#include +#include +#include "thread-sdl.h" +#include "kernel.h" +#include "debug.h" + +SDL_Thread *threads[256]; +int threadCount = 0; +long current_tick = 0; +SDL_mutex *m; + +void yield(void) +{ + SDL_mutexV(m); + SDL_Delay(1); + SDL_mutexP(m); +} + +void sim_sleep(int ticks) +{ + SDL_mutexV(m); + SDL_Delay((1000/HZ) * ticks); + SDL_mutexP(m); +} + +int runthread(void *data) +{ + SDL_mutexV(m); + ((void(*)())data) (); + SDL_mutexV(m); + return 0; +} + +int create_thread(void (*fp)(void), void* sp, int stk_size) +{ + /** Avoid compiler warnings */ + (void)sp; + (void)stk_size; + + if (threadCount == 256) { + return -1; + } + + threads[threadCount++] = SDL_CreateThread(runthread, fp); + + return 0; +} + +void init_threads(void) +{ + m = SDL_CreateMutex(); + + if (SDL_mutexP(m) == -1) { + fprintf(stderr, "Couldn't lock mutex\n"); + exit(-1); + } +} -- cgit