Mercurial > sdl-ios-xcode
comparison src/video/ataricommon/SDL_xbiosevents.c @ 820:0b9b4bf3c1e7
Important crash fix: system vectors for mouse/joystick were not restored
author | Patrice Mandin <patmandin@gmail.com> |
---|---|
date | Sat, 14 Feb 2004 10:12:27 +0000 |
parents | b8d311d90021 |
children | a8068adf156b |
comparison
equal
deleted
inserted
replaced
819:1318a8b87f48 | 820:0b9b4bf3c1e7 |
---|---|
29 * XBIOS mouse & joystick vectors | 29 * XBIOS mouse & joystick vectors |
30 * | 30 * |
31 * Patrice Mandin | 31 * Patrice Mandin |
32 */ | 32 */ |
33 | 33 |
34 #include <stdio.h> | |
34 #include <stdlib.h> | 35 #include <stdlib.h> |
35 #include <string.h> | 36 #include <string.h> |
37 | |
36 #include <mint/osbind.h> | 38 #include <mint/osbind.h> |
37 | 39 |
38 #include "SDL_events_c.h" | 40 #include "SDL_events_c.h" |
39 #include "SDL_xbiosevents_c.h" | 41 #include "SDL_xbiosevents_c.h" |
40 #include "SDL_xbiosinterrupt_s.h" | 42 #include "SDL_xbiosinterrupt_s.h" |
41 | 43 |
42 /* Variables */ | 44 /* Variables */ |
43 | 45 |
44 int SDL_AtariXbios_enabled=0; | 46 int SDL_AtariXbios_enabled=0; |
45 | 47 |
46 static _KBDVECS *kbdvecs; /* Pointer to access vectors */ | 48 /* Local variables */ |
47 static _KBDVECS sys_kbdvecs; /* Backup of system vectors */ | 49 |
50 static _KBDVECS *kbdvecs; /* Pointer to access system vectors */ | |
48 static Uint16 atari_prevmouseb; /* buttons */ | 51 static Uint16 atari_prevmouseb; /* buttons */ |
52 | |
53 /* Functions */ | |
49 | 54 |
50 void SDL_AtariXbios_InstallVectors(int vectors_mask) | 55 void SDL_AtariXbios_InstallVectors(int vectors_mask) |
51 { | 56 { |
52 void *oldpile; | 57 void *oldpile; |
53 | 58 |
62 kbdvecs=Kbdvbase(); | 67 kbdvecs=Kbdvbase(); |
63 | 68 |
64 /* Go to supervisor mode */ | 69 /* Go to supervisor mode */ |
65 oldpile=(void *)Super(0); | 70 oldpile=(void *)Super(0); |
66 | 71 |
67 /* Backup system vectors */ | 72 /* Install our vectors */ |
68 memcpy(&sys_kbdvecs, kbdvecs, sizeof(_KBDVECS)); | |
69 | |
70 /* Install our vector */ | |
71 SDL_AtariXbios_Install( | 73 SDL_AtariXbios_Install( |
72 kbdvecs, | 74 kbdvecs, |
73 (vectors_mask & ATARI_XBIOS_MOUSEEVENTS) ? SDL_AtariXbios_MouseVector : NULL, | 75 (vectors_mask & ATARI_XBIOS_MOUSEEVENTS) ? SDL_AtariXbios_MouseVector : NULL, |
74 (vectors_mask & ATARI_XBIOS_JOYSTICKEVENTS) ? SDL_AtariXbios_JoystickVector : NULL | 76 (vectors_mask & ATARI_XBIOS_JOYSTICKEVENTS) ? SDL_AtariXbios_JoystickVector : NULL |
75 ); | 77 ); |
82 | 84 |
83 void SDL_AtariXbios_RestoreVectors(void) | 85 void SDL_AtariXbios_RestoreVectors(void) |
84 { | 86 { |
85 void *oldpile; | 87 void *oldpile; |
86 | 88 |
89 /* Read IKBD vectors base */ | |
90 kbdvecs=Kbdvbase(); | |
91 | |
87 /* Go to supervisor mode */ | 92 /* Go to supervisor mode */ |
88 oldpile=(void *)Super(NULL); | 93 oldpile=(void *)Super(NULL); |
89 | 94 |
90 /* Reinstall system vector */ | 95 /* Reinstall system vector */ |
91 SDL_AtariXbios_Install(kbdvecs,sys_kbdvecs.mousevec,sys_kbdvecs.joyvec); | 96 SDL_AtariXbios_Restore(kbdvecs); |
92 | 97 |
93 /* Back to user mode */ | 98 /* Back to user mode */ |
94 Super(oldpile); | 99 Super(oldpile); |
95 } | 100 } |
96 | 101 |