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