summaryrefslogtreecommitdiff
path: root/uisimulator/sdl/uisdl.c
diff options
context:
space:
mode:
Diffstat (limited to 'uisimulator/sdl/uisdl.c')
-rw-r--r--uisimulator/sdl/uisdl.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/uisimulator/sdl/uisdl.c b/uisimulator/sdl/uisdl.c
index 9dcdbc7e26..d9c64abce2 100644
--- a/uisimulator/sdl/uisdl.c
+++ b/uisimulator/sdl/uisdl.c
@@ -22,6 +22,7 @@
22#include <setjmp.h> 22#include <setjmp.h>
23#include "autoconf.h" 23#include "autoconf.h"
24#include "button.h" 24#include "button.h"
25#include "system-sdl.h"
25#include "thread.h" 26#include "thread.h"
26#include "kernel.h" 27#include "kernel.h"
27#include "uisdl.h" 28#include "uisdl.h"
@@ -75,7 +76,11 @@ Uint32 tick_timer(Uint32 interval, void *param)
75 if (new_tick != current_tick) { 76 if (new_tick != current_tick) {
76 long i; 77 long i;
77 for (i = new_tick - current_tick; i > 0; i--) 78 for (i = new_tick - current_tick; i > 0; i--)
79 {
80 sim_enter_irq_handler();
78 sim_tick_tasks(); 81 sim_tick_tasks();
82 sim_exit_irq_handler();
83 }
79 current_tick = new_tick; 84 current_tick = new_tick;
80 } 85 }
81 86
@@ -92,10 +97,14 @@ void gui_message_loop(void)
92 switch(event.type) 97 switch(event.type)
93 { 98 {
94 case SDL_KEYDOWN: 99 case SDL_KEYDOWN:
100 sim_enter_irq_handler();
95 button_event(event.key.keysym.sym, true); 101 button_event(event.key.keysym.sym, true);
102 sim_exit_irq_handler();
96 break; 103 break;
97 case SDL_KEYUP: 104 case SDL_KEYUP:
105 sim_enter_irq_handler();
98 button_event(event.key.keysym.sym, false); 106 button_event(event.key.keysym.sym, false);
107 sim_exit_irq_handler();
99 break; 108 break;
100 case SDL_QUIT: 109 case SDL_QUIT:
101 done = true; 110 done = true;
@@ -170,11 +179,12 @@ bool gui_startup(void)
170 179
171bool gui_shutdown(void) 180bool gui_shutdown(void)
172{ 181{
173 SDL_RemoveTimer(tick_timer_id);
174 /* Order here is relevent to prevent deadlocks and use of destroyed 182 /* Order here is relevent to prevent deadlocks and use of destroyed
175 sync primitives by kernel threads */ 183 sync primitives by kernel threads */
176 thread_sdl_shutdown(); 184 thread_sdl_shutdown();
185 SDL_RemoveTimer(tick_timer_id);
177 sim_io_shutdown(); 186 sim_io_shutdown();
187 sim_kernel_shutdown();
178 return true; 188 return true;
179} 189}
180 190
@@ -228,6 +238,11 @@ int main(int argc, char *argv[])
228 background = false; 238 background = false;
229 } 239 }
230 240
241 if (!sim_kernel_init()) {
242 fprintf(stderr, "sim_kernel_init failed\n");
243 return -1;
244 }
245
231 if (!sim_io_init()) { 246 if (!sim_io_init()) {
232 fprintf(stderr, "sim_io_init failed\n"); 247 fprintf(stderr, "sim_io_init failed\n");
233 return -1; 248 return -1;