blob: 3b6fc6329e3b398fa61a013fb9fd50f0e5c84a82 [file] [log] [blame]
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2012 Sam Lantinga
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Sam Lantinga
slouken@libsdl.org
*/
/*
* XBIOS mouse & joystick vectors
*
* Patrice Mandin
*/
.text
.globl _SDL_AtariXbios_Install
.globl _SDL_AtariXbios_Restore
.globl _SDL_AtariXbios_MouseVector
.globl _SDL_AtariXbios_JoystickVector
.globl _SDL_AtariXbios_mouselock
.globl _SDL_AtariXbios_mouseb
.globl _SDL_AtariXbios_mousex
.globl _SDL_AtariXbios_mousey
.globl _SDL_AtariXbios_joystick
/*--- Vector installer ---*/
_SDL_AtariXbios_Install:
movel sp@(4),a0
/* Stop interrupts */
movew sr,d1
movew #0x2700,sr
/* Save old mouse vector, set our routine */
clrl oldmousevector
movel sp@(8),d0
beqs no_new_mouse_vector
#if defined(__mcoldfire__)
movel a0@(16),a1
movel a1,oldmousevector
#else
movel a0@(16),oldmousevector
#endif
movel d0,a0@(16)
no_new_mouse_vector:
/* Save old joystick vector, set our routine */
clrl oldjoystickvector
movel sp@(12),d0
beqs no_new_joystick_vector
#if defined(__mcoldfire__)
movel a0@(24),a1
movel a1,oldjoystickvector
#else
movel a0@(24),oldjoystickvector
#endif
movel d0,a0@(24)
no_new_joystick_vector:
/* Restart interrupts */
movew d1,sr
rts
/*--- Vector restorer ---*/
_SDL_AtariXbios_Restore:
movel sp@(4),a0
/* Stop interrupts */
movew sr,d1
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 d1,sr
rts
/*--- Our mouse vector ---*/
.text
.even
.ascii "XBRA"
.ascii "LSDL"
.comm oldmousevector,4*1
_SDL_AtariXbios_MouseVector:
#if defined(__mcoldfire__)
lea sp@(-8),sp
moveml d0-d1,sp@
#else
movel d0,sp@-
#endif
/* Mouse buttons */
moveb (a0),d0
#if defined(__mcoldfire__)
andl #3,d0
#else
andw #3,d0
#endif
movew d0,_SDL_AtariXbios_mouseb
/* X movement */
moveb a0@(1),d0
extw d0
#if defined(__mcoldfire__)
movew _SDL_AtariXbios_mousex,d1
addl d1,d0
movew d0,_SDL_AtariXbios_mousex
#else
addw d0,_SDL_AtariXbios_mousex
#endif
/* Y movement */
moveb a0@(2),d0
extw d0
#if defined(__mcoldfire__)
movew _SDL_AtariXbios_mousey,d1
addl d1,d0
movew d0,_SDL_AtariXbios_mousey
#else
addw d0,_SDL_AtariXbios_mousey
#endif
/* Lock mouse position ? */
tstw _SDL_AtariXbios_mouselock
beq.s no_mouse_lock
clrb a0@(1)
clrb a0@(2)
no_mouse_lock:
/* Jump through old vector */
#if defined(__mcoldfire__)
moveml sp@,d0-d1
lea sp@(8),sp
#else
movel sp@+,d0
#endif
movel oldmousevector,sp@-
rts
.data
.even
.comm _SDL_AtariXbios_mouselock,2*1
.comm _SDL_AtariXbios_mousex,2*1
.comm _SDL_AtariXbios_mousey,2*1
.comm _SDL_AtariXbios_mouseb,2*1
/*--- Our joystick vector ---*/
.text
.even
.ascii "XBRA"
.ascii "LSDL"
.comm oldjoystickvector,4*1
_SDL_AtariXbios_JoystickVector:
movel d0,sp@-
/* New joystick state */
moveb a0@(2),d0
#if defined(__mcoldfire__)
andl #0x8f,d0
#else
andw #0x8f,d0
#endif
movew d0,_SDL_AtariXbios_joystick
/* Jump through old vector */
movel sp@+,d0
movel oldjoystickvector,sp@-
rts
.data
.even
.comm _SDL_AtariXbios_joystick,2*1