--- a/src/video/ataricommon/SDL_xbiosevents.c Sat Feb 14 06:04:41 2004 +0000
+++ b/src/video/ataricommon/SDL_xbiosevents.c Sat Feb 14 10:12:27 2004 +0000
@@ -31,8 +31,10 @@
* Patrice Mandin
*/
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+
#include <mint/osbind.h>
#include "SDL_events_c.h"
@@ -43,10 +45,13 @@
int SDL_AtariXbios_enabled=0;
-static _KBDVECS *kbdvecs; /* Pointer to access vectors */
-static _KBDVECS sys_kbdvecs; /* Backup of system vectors */
+/* Local variables */
+
+static _KBDVECS *kbdvecs; /* Pointer to access system vectors */
static Uint16 atari_prevmouseb; /* buttons */
+/* Functions */
+
void SDL_AtariXbios_InstallVectors(int vectors_mask)
{
void *oldpile;
@@ -64,10 +69,7 @@
/* Go to supervisor mode */
oldpile=(void *)Super(0);
- /* Backup system vectors */
- memcpy(&sys_kbdvecs, kbdvecs, sizeof(_KBDVECS));
-
- /* Install our vector */
+ /* Install our vectors */
SDL_AtariXbios_Install(
kbdvecs,
(vectors_mask & ATARI_XBIOS_MOUSEEVENTS) ? SDL_AtariXbios_MouseVector : NULL,
@@ -84,11 +86,14 @@
{
void *oldpile;
+ /* Read IKBD vectors base */
+ kbdvecs=Kbdvbase();
+
/* Go to supervisor mode */
oldpile=(void *)Super(NULL);
/* Reinstall system vector */
- SDL_AtariXbios_Install(kbdvecs,sys_kbdvecs.mousevec,sys_kbdvecs.joyvec);
+ SDL_AtariXbios_Restore(kbdvecs);
/* Back to user mode */
Super(oldpile);
--- a/src/video/ataricommon/SDL_xbiosinterrupt.S Sat Feb 14 06:04:41 2004 +0000
+++ b/src/video/ataricommon/SDL_xbiosinterrupt.S Sat Feb 14 10:12:27 2004 +0000
@@ -34,6 +34,7 @@
.text
.globl _SDL_AtariXbios_Install
+ .globl _SDL_AtariXbios_Restore
.globl _SDL_AtariXbios_MouseVector
.globl _SDL_AtariXbios_JoystickVector
@@ -53,6 +54,7 @@
/* Save old mouse vector, set our routine */
+ clrl oldmousevector
movel sp@(8),d0
beqs no_new_mouse_vector
movel a0@(16),oldmousevector
@@ -61,6 +63,7 @@
/* Save old joystick vector, set our routine */
+ clrl oldjoystickvector
movel sp@(12),d0
beqs no_new_joystick_vector
movel a0@(24),oldjoystickvector
@@ -73,6 +76,35 @@
rts
+/*--- Vector restorer ---*/
+
+_SDL_AtariXbios_Restore:
+ movel sp@(4),a0
+
+ /* Stop interrupts */
+
+ movew #0x2700,sr
+
+ /* Restore mouse vector */
+
+ movel oldmousevector,d0
+ beqs no_restore_mouse
+ movel d0,a0@(16)
+no_restore_mouse:
+
+ /* Restore joystick vector */
+
+ movel oldjoystickvector,d0
+ beqs no_restore_joystick
+ movel d0,a0@(24)
+no_restore_joystick:
+
+ /* Restart interrupts */
+
+ movew #0x2300,sr
+
+ rts
+
/*--- Our mouse vector ---*/
.text
@@ -138,4 +170,3 @@
.data
.even
.comm _SDL_AtariXbios_joystick,2*1
-
--- a/src/video/ataricommon/SDL_xbiosinterrupt_s.h Sat Feb 14 06:04:41 2004 +0000
+++ b/src/video/ataricommon/SDL_xbiosinterrupt_s.h Sat Feb 14 10:12:27 2004 +0000
@@ -48,6 +48,7 @@
/* Functions */
extern void SDL_AtariXbios_Install(_KBDVECS *kbdvecs,void *newmousevector,void *newjoystickvector);
+extern void SDL_AtariXbios_Restore(_KBDVECS *kbdvecs);
extern void SDL_AtariXbios_MouseVector(void *buf);
extern void SDL_AtariXbios_JoystickVector(void *buf);