Mercurial > sdl-ios-xcode
comparison src/timer/amigaos/SDL_systimer.c @ 1668:4da1ee79c9af SDL-1.3
more tweaking indent options
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 29 May 2006 04:04:35 +0000 |
parents | 782fd950bd46 |
children |
comparison
equal
deleted
inserted
replaced
1667:1fddae038bc8 | 1668:4da1ee79c9af |
---|---|
58 | 58 |
59 #if !defined(__PPC__) || defined(STORMC4_WOS) || defined(MORPHOS) | 59 #if !defined(__PPC__) || defined(STORMC4_WOS) || defined(MORPHOS) |
60 static clock_t start; | 60 static clock_t start; |
61 | 61 |
62 void | 62 void |
63 SDL_StartTicks (void) | 63 SDL_StartTicks(void) |
64 { | 64 { |
65 /* Set first ticks value */ | 65 /* Set first ticks value */ |
66 start = clock (); | 66 start = clock(); |
67 } | 67 } |
68 | 68 |
69 Uint32 | 69 Uint32 |
70 SDL_GetTicks (void) | 70 SDL_GetTicks(void) |
71 { | 71 { |
72 clock_t ticks; | 72 clock_t ticks; |
73 | 73 |
74 ticks = clock () - start; | 74 ticks = clock() - start; |
75 | 75 |
76 #ifdef __SASC | 76 #ifdef __SASC |
77 // CLOCKS_PER_SEC == 1000 ! | 77 // CLOCKS_PER_SEC == 1000 ! |
78 | 78 |
79 return (ticks); | 79 return (ticks); |
83 return ticks * (1000 / CLOCKS_PER_SEC); | 83 return ticks * (1000 / CLOCKS_PER_SEC); |
84 #endif | 84 #endif |
85 } | 85 } |
86 | 86 |
87 void | 87 void |
88 SDL_Delay (Uint32 ms) | 88 SDL_Delay(Uint32 ms) |
89 { | 89 { |
90 // Do a busy wait if time is less than 50ms | 90 // Do a busy wait if time is less than 50ms |
91 | 91 |
92 if (ms < 50) { | 92 if (ms < 50) { |
93 clock_t to_wait = clock (); | 93 clock_t to_wait = clock(); |
94 | 94 |
95 #ifndef __SASC | 95 #ifndef __SASC |
96 ms *= (CLOCKS_PER_SEC / 1000); | 96 ms *= (CLOCKS_PER_SEC / 1000); |
97 #endif | 97 #endif |
98 to_wait += ms; | 98 to_wait += ms; |
99 | 99 |
100 while (clock () < to_wait); | 100 while (clock() < to_wait); |
101 } else { | 101 } else { |
102 Delay (ms / 20); | 102 Delay(ms / 20); |
103 } | 103 } |
104 } | 104 } |
105 | 105 |
106 #else | 106 #else |
107 | 107 |
108 ULONG MY_CLOCKS_PER_SEC; | 108 ULONG MY_CLOCKS_PER_SEC; |
109 | 109 |
110 void PPC_TimerInit (void); | 110 void PPC_TimerInit(void); |
111 APTR MyTimer; | 111 APTR MyTimer; |
112 | 112 |
113 ULONG start[2]; | 113 ULONG start[2]; |
114 | 114 |
115 void | 115 void |
116 SDL_StartTicks (void) | 116 SDL_StartTicks(void) |
117 { | 117 { |
118 /* Set first ticks value */ | 118 /* Set first ticks value */ |
119 if (!MyTimer) | 119 if (!MyTimer) |
120 PPC_TimerInit (); | 120 PPC_TimerInit(); |
121 | 121 |
122 PPCGetTimerObject (MyTimer, PPCTIMERTAG_CURRENTTICKS, start); | 122 PPCGetTimerObject(MyTimer, PPCTIMERTAG_CURRENTTICKS, start); |
123 start[1] >>= 10; | 123 start[1] >>= 10; |
124 start[1] |= ((result[0] & 0x3ff) << 22); | 124 start[1] |= ((result[0] & 0x3ff) << 22); |
125 start[0] >>= 10; | 125 start[0] >>= 10; |
126 } | 126 } |
127 | 127 |
128 Uint32 | 128 Uint32 |
129 SDL_GetTicks (void) | 129 SDL_GetTicks(void) |
130 { | 130 { |
131 ULONG result[2]; | 131 ULONG result[2]; |
132 PPCGetTimerObject (MyTimer, PPCTIMERTAG_CURRENTTICKS, result); | 132 PPCGetTimerObject(MyTimer, PPCTIMERTAG_CURRENTTICKS, result); |
133 | 133 |
134 // PPCAsr64p(result,10); | 134 // PPCAsr64p(result,10); |
135 // Non va, la emulo: | 135 // Non va, la emulo: |
136 | 136 |
137 result[1] >>= 10; | 137 result[1] >>= 10; |
141 | 141 |
142 return result[1] * 1000 / MY_CLOCKS_PER_SEC; | 142 return result[1] * 1000 / MY_CLOCKS_PER_SEC; |
143 } | 143 } |
144 | 144 |
145 void | 145 void |
146 SDL_Delay (Uint32 ms) | 146 SDL_Delay(Uint32 ms) |
147 { | 147 { |
148 // Do a busy wait if time is less than 50ms | 148 // Do a busy wait if time is less than 50ms |
149 | 149 |
150 if (ms < 50) { | 150 if (ms < 50) { |
151 ULONG to_wait[2], actual[2]; | 151 ULONG to_wait[2], actual[2]; |
152 PPCGetTimerObject (MyTimer, PPCTIMERTAG_CURRENTTICKS, result); | 152 PPCGetTimerObject(MyTimer, PPCTIMERTAG_CURRENTTICKS, result); |
153 actual[1] = 0; | 153 actual[1] = 0; |
154 to_wait[1] += ms * 1000 / MY_CLOCKS_PER_SEC; | 154 to_wait[1] += ms * 1000 / MY_CLOCKS_PER_SEC; |
155 | 155 |
156 while (actual[1] < to_wait[1]) { | 156 while (actual[1] < to_wait[1]) { |
157 PPCGetTimerObject (MyTimer, PPCTIMERTAG_CURRENTTICKS, actual); | 157 PPCGetTimerObject(MyTimer, PPCTIMERTAG_CURRENTTICKS, actual); |
158 } | 158 } |
159 } else { | 159 } else { |
160 Delay (ms / 50); | 160 Delay(ms / 50); |
161 } | 161 } |
162 } | 162 } |
163 | 163 |
164 void | 164 void |
165 PPC_TimerInit (void) | 165 PPC_TimerInit(void) |
166 { | 166 { |
167 struct TagItem tags[] = { | 167 struct TagItem tags[] = { |
168 PPCTIMERTAG_CPU, TRUE, | 168 PPCTIMERTAG_CPU, TRUE, |
169 TAG_DONE, 0 | 169 TAG_DONE, 0 |
170 }; | 170 }; |
171 | 171 |
172 | 172 |
173 if (MyTimer = PPCCreateTimerObject (tags)) { | 173 if (MyTimer = PPCCreateTimerObject(tags)) { |
174 ULONG result[2]; | 174 ULONG result[2]; |
175 | 175 |
176 PPCGetTimerObject (MyTimer, PPCTIMERTAG_TICKSPERSEC, result); | 176 PPCGetTimerObject(MyTimer, PPCTIMERTAG_TICKSPERSEC, result); |
177 D (bug | 177 D(bug("Timer inizializzato, TPS: %lu - %lu\n", result[0], result[1])); |
178 ("Timer inizializzato, TPS: %lu - %lu\n", result[0], result[1])); | |
179 // PPCAsr64p(result,10); | 178 // PPCAsr64p(result,10); |
180 result[1] >>= 10; | 179 result[1] >>= 10; |
181 result[1] |= ((result[0] & 0x3ff) << 22); | 180 result[1] |= ((result[0] & 0x3ff) << 22); |
182 result[0] >>= 10; | 181 result[0] >>= 10; |
183 | 182 |
184 D (bug ("Shiftato TPS: %lu - %lu\n", result[0], result[1])); | 183 D(bug("Shiftato TPS: %lu - %lu\n", result[0], result[1])); |
185 MY_CLOCKS_PER_SEC = result[1]; | 184 MY_CLOCKS_PER_SEC = result[1]; |
186 | 185 |
187 PPCGetTimerObject (MyTimer, PPCTIMERTAG_CURRENTTICKS, result); | 186 PPCGetTimerObject(MyTimer, PPCTIMERTAG_CURRENTTICKS, result); |
188 | 187 |
189 D (bug ("Current ticks: %lu - %lu\n", result[0], result[1])); | 188 D(bug("Current ticks: %lu - %lu\n", result[0], result[1])); |
190 result[1] >>= 10; | 189 result[1] >>= 10; |
191 result[1] |= ((result[0] & 0x3ff) << 22); | 190 result[1] |= ((result[0] & 0x3ff) << 22); |
192 result[0] >>= 10; | 191 result[0] >>= 10; |
193 // PPCAsr64p(result,10); | 192 // PPCAsr64p(result,10); |
194 D (bug ("Shiftato: %lu - %lu\n", result[0], result[1])); | 193 D(bug("Shiftato: %lu - %lu\n", result[0], result[1])); |
195 } else { | 194 } else { |
196 D (bug ("Errore nell'inizializzazione del timer!\n")); | 195 D(bug("Errore nell'inizializzazione del timer!\n")); |
197 } | 196 } |
198 } | 197 } |
199 | 198 |
200 #endif | 199 #endif |
201 | 200 |
204 /* Data to handle a single periodic alarm */ | 203 /* Data to handle a single periodic alarm */ |
205 static int timer_alive = 0; | 204 static int timer_alive = 0; |
206 static SDL_Thread *timer_thread = NULL; | 205 static SDL_Thread *timer_thread = NULL; |
207 | 206 |
208 static int | 207 static int |
209 RunTimer (void *unused) | 208 RunTimer(void *unused) |
210 { | 209 { |
211 D (bug ("SYSTimer: Entering RunTimer loop...")); | 210 D(bug("SYSTimer: Entering RunTimer loop...")); |
212 | 211 |
213 if (GfxBase == NULL) | 212 if (GfxBase == NULL) |
214 GfxBase = (struct GfxBase *) OpenLibrary ("graphics.library", 37); | 213 GfxBase = (struct GfxBase *) OpenLibrary("graphics.library", 37); |
215 | 214 |
216 while (timer_alive) { | 215 while (timer_alive) { |
217 if (SDL_timer_running) { | 216 if (SDL_timer_running) { |
218 SDL_ThreadedTimerCheck (); | 217 SDL_ThreadedTimerCheck(); |
219 } | 218 } |
220 if (GfxBase) | 219 if (GfxBase) |
221 WaitTOF (); // Check the timer every fifth of seconds. Was SDL_Delay(1)->BusyWait! | 220 WaitTOF(); // Check the timer every fifth of seconds. Was SDL_Delay(1)->BusyWait! |
222 else | 221 else |
223 Delay (1); | 222 Delay(1); |
224 } | 223 } |
225 D (bug ("SYSTimer: EXITING RunTimer loop...")); | 224 D(bug("SYSTimer: EXITING RunTimer loop...")); |
226 return (0); | 225 return (0); |
227 } | 226 } |
228 | 227 |
229 /* This is only called if the event thread is not running */ | 228 /* This is only called if the event thread is not running */ |
230 int | 229 int |
231 SDL_SYS_TimerInit (void) | 230 SDL_SYS_TimerInit(void) |
232 { | 231 { |
233 D (bug ("Creating thread for the timer (NOITIMER)...\n")); | 232 D(bug("Creating thread for the timer (NOITIMER)...\n")); |
234 | 233 |
235 timer_alive = 1; | 234 timer_alive = 1; |
236 timer_thread = SDL_CreateThread (RunTimer, NULL); | 235 timer_thread = SDL_CreateThread(RunTimer, NULL); |
237 if (timer_thread == NULL) { | 236 if (timer_thread == NULL) { |
238 D (bug ("Creazione del thread fallita...\n")); | 237 D(bug("Creazione del thread fallita...\n")); |
239 | 238 |
240 return (-1); | 239 return (-1); |
241 } | 240 } |
242 return (SDL_SetTimerThreaded (1)); | 241 return (SDL_SetTimerThreaded(1)); |
243 } | 242 } |
244 | 243 |
245 void | 244 void |
246 SDL_SYS_TimerQuit (void) | 245 SDL_SYS_TimerQuit(void) |
247 { | 246 { |
248 timer_alive = 0; | 247 timer_alive = 0; |
249 if (timer_thread) { | 248 if (timer_thread) { |
250 SDL_WaitThread (timer_thread, NULL); | 249 SDL_WaitThread(timer_thread, NULL); |
251 timer_thread = NULL; | 250 timer_thread = NULL; |
252 } | 251 } |
253 } | 252 } |
254 | 253 |
255 int | 254 int |
256 SDL_SYS_StartTimer (void) | 255 SDL_SYS_StartTimer(void) |
257 { | 256 { |
258 SDL_SetError ("Internal logic error: AmigaOS uses threaded timer"); | 257 SDL_SetError("Internal logic error: AmigaOS uses threaded timer"); |
259 return (-1); | 258 return (-1); |
260 } | 259 } |
261 | 260 |
262 void | 261 void |
263 SDL_SYS_StopTimer (void) | 262 SDL_SYS_StopTimer(void) |
264 { | 263 { |
265 return; | 264 return; |
266 } | 265 } |
267 | 266 |
268 #endif /* SDL_TIMER_AMIGA */ | 267 #endif /* SDL_TIMER_AMIGA */ |