1 |
|
/* |
2 |
|
* main_amiga.cpp - Startup code for AmigaOS |
3 |
|
* |
4 |
< |
* Basilisk II (C) 1997-1999 Christian Bauer |
4 |
> |
* Basilisk II (C) 1997-2000 Christian Bauer |
5 |
|
* |
6 |
|
* This program is free software; you can redistribute it and/or modify |
7 |
|
* it under the terms of the GNU General Public License as published by |
91 |
|
struct Library *IFFParseBase = NULL; |
92 |
|
struct Library *AslBase = NULL; |
93 |
|
struct Library *P96Base = NULL; |
94 |
+ |
struct Library *CyberGfxBase = NULL; |
95 |
|
struct Library *TimerBase = NULL; |
96 |
|
struct Library *AHIBase = NULL; |
97 |
|
struct Library *DiskBase = NULL; |
181 |
|
ErrorAlert(GetString(STR_NO_ASL_LIB_ERR)); |
182 |
|
QuitEmulator(); |
183 |
|
} |
184 |
+ |
|
185 |
+ |
// These two can fail (the respective gfx support won't be available, then) |
186 |
|
P96Base = OpenLibrary((UBYTE *)"Picasso96API.library", 2); |
187 |
+ |
CyberGfxBase = OpenLibrary((UBYTE *)"cybergraphics.library", 2); |
188 |
|
|
189 |
|
// Read preferences |
190 |
|
PrefsInit(); |
347 |
|
|
348 |
|
void QuitEmulator(void) |
349 |
|
{ |
350 |
+ |
// Stop 60Hz thread |
351 |
+ |
if (tick_proc) { |
352 |
+ |
SetSignal(0, SIGF_SINGLE); |
353 |
+ |
tick_proc_active = false; |
354 |
+ |
Wait(SIGF_SINGLE); |
355 |
+ |
} |
356 |
+ |
|
357 |
|
// Restore stack |
358 |
|
if (stack_swapped) { |
359 |
|
stack_swapped = false; |
367 |
|
FreeSignal(IRQSig); |
368 |
|
} |
369 |
|
|
359 |
– |
// Stop 60Hz thread |
360 |
– |
if (tick_proc) { |
361 |
– |
SetSignal(0, SIGF_SINGLE); |
362 |
– |
tick_proc_active = false; |
363 |
– |
Wait(SIGF_SINGLE); |
364 |
– |
} |
365 |
– |
|
370 |
|
// Remove trap handler |
371 |
|
MainTask->tc_TrapCode = OldTrapHandler; |
372 |
|
|
402 |
|
PrefsExit(); |
403 |
|
|
404 |
|
// Close libraries |
405 |
+ |
if (CyberGfxBase) |
406 |
+ |
CloseLibrary(CyberGfxBase); |
407 |
|
if (P96Base) |
408 |
|
CloseLibrary(P96Base); |
409 |
|
if (AslBase) |
495 |
|
if (++tick_counter > 60) { |
496 |
|
tick_counter = 0; |
497 |
|
WriteMacInt32(0x20c, TimerDateTime()); |
498 |
+ |
SetInterruptFlag(INTFLAG_1HZ); |
499 |
+ |
TriggerInterrupt(); |
500 |
|
} |
501 |
|
|
502 |
|
// Trigger 60Hz interrupt |