aboutsummaryrefslogtreecommitdiffstats
path: root/distrib/sdl-1.2.15/src/video/ataricommon/SDL_xbiosinterrupt.S
diff options
context:
space:
mode:
Diffstat (limited to 'distrib/sdl-1.2.15/src/video/ataricommon/SDL_xbiosinterrupt.S')
-rw-r--r--distrib/sdl-1.2.15/src/video/ataricommon/SDL_xbiosinterrupt.S212
1 files changed, 212 insertions, 0 deletions
diff --git a/distrib/sdl-1.2.15/src/video/ataricommon/SDL_xbiosinterrupt.S b/distrib/sdl-1.2.15/src/video/ataricommon/SDL_xbiosinterrupt.S
new file mode 100644
index 0000000..3fc1a60
--- /dev/null
+++ b/distrib/sdl-1.2.15/src/video/ataricommon/SDL_xbiosinterrupt.S
@@ -0,0 +1,212 @@
+/*
+ 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 #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),d1
+ movel d1,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),d1
+ movel d1,oldjoystickvector
+#else
+ movel a0@(24),oldjoystickvector
+#endif
+ movel d0,a0@(24)
+no_new_joystick_vector:
+
+ /* Restart interrupts */
+
+ movew #0x2300,sr
+
+ 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
+ .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