diff options
Diffstat (limited to 'uisimulator/sdl/uisdl.c')
-rw-r--r-- | uisimulator/sdl/uisdl.c | 17 |
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 | ||
171 | bool gui_shutdown(void) | 180 | bool 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; |