Mercurial > sdl-ios-xcode
diff src/video/ataricommon/SDL_ikbdinterrupt.S @ 281:c5010ab8ba35
Added initial support for Atari (thanks Patrice!)
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 17 Feb 2002 19:54:28 +0000 |
parents | |
children | e4bd0cf95506 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/video/ataricommon/SDL_ikbdinterrupt.S Sun Feb 17 19:54:28 2002 +0000 @@ -0,0 +1,220 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997, 1998, 1999, 2000, 2001 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Sam Lantinga + slouken@libsdl.org +*/ + +#ifdef SAVE_RCSID +static char rcsid = + "@(#) $Id$"; +#endif + +/* + * IKBD 6301 interrupt routine + * + * Patrice Mandin + */ + + .text + + .globl _SDL_AtariIkbdInstall + .globl _SDL_AtariIkbdUninstall + + .globl _SDL_AtariIkbd_keyboard + .globl _SDL_AtariIkbd_mouseb + .globl _SDL_AtariIkbd_mousex + .globl _SDL_AtariIkbd_mousey + .globl _SDL_AtariIkbd_joystick + +/*--- Install our IKBD vector ---*/ + +_SDL_AtariIkbdInstall: + moveml d0-d1/a0-a1,sp@- + + | Init interrupts + + movew #0x2700,sr + + | Save MFP registers used for keyboard + + lea 0xfffffa00:w,a0 + btst #6,a0@(0x09) + sne ikbd_ierb + btst #6,a0@(0x15) + sne ikbd_imrb + + | Set our routine + + movel 0x118:w,old_ikbd + movel #ikbd,0x118:w + bset #6,0xfffffa09:w | IERB + bset #6,0xfffffa15:w | IMRB + + moveb #8,0xfffffc02:w + + movew #0x2300,sr + + | Interrupts done + + moveml sp@+,d0-d1/a0-a1 + rts + +/*--- Uninstall our IKBD vector ---*/ + +_SDL_AtariIkbdUninstall: + movel a0,sp@- + + | Stop interrupt + + movew #0x2700,sr + + | Restore previous MFP registers + + lea 0xfffffa00:w,a0 + + bclr #6,a0@(0x09) + tstb ikbd_ierb + beq ikbd_restoreierb + bset #6,a0@(0x09) +ikbd_restoreierb: + + bclr #6,a0@(0x15) + tstb ikbd_imrb + beq ikbd_restoreimrb + bset #6,a0@(0x15) +ikbd_restoreimrb: + + movel old_ikbd,0x118:w + + | Clear keyboard buffer + + lea 0xfffffc00:w,a0 +ikbd_videbuffer: + btst #0,a0@ + beq ikbd_finbuffer + tstb a0@(0x02) + bra ikbd_videbuffer +ikbd_finbuffer: + + movew #0x2300,sr + + movel sp@+,a0 + rts + + .data + .even + .comm old_ikbd,4*1 + .even + .comm ikbd_ierb,4*1 + .even + .comm ikbd_imrb,4*1 + +/*--- Our custom IKBD vector ---*/ + + .text + .even + .ascii "XBRA" + .ascii "_SDL" +ikbd: + moveml d0-d1/a0,sp@- + moveb 0xfffffc02:w,d0 + + | paquet joystick ? + + cmpb #0xff,d0 + beq ikbd_yes_joystick + + | paquet souris ? + + cmpb #0xf8,d0 + bmi ikbd_no_mouse + cmpb #0xfc,d0 + bpl ikbd_no_mouse + +ikbd_yes_mouse: + andw #3,d0 + movew d0,_SDL_AtariIkbd_mouseb + + movel #ikbd_mousex,0x118:w + bra ikbd_endit + +ikbd_yes_joystick: + movel #ikbd_joystick,0x118:w + bra ikbd_endit + +ikbd_no_mouse: + moveb d0,d1 + lea _SDL_AtariIkbd_keyboard,a0 + andl #0x7f,d1 + tas d0 + spl a0@(0,d1:w) +ikbd_fin: + + | Fin interruption + +ikbd_endit: + moveml sp@+,d0-d1/a0 + bclr #6,0xfffffa11:w + rte + +ikbd_mousex: + movel d0,sp@- + + moveb 0xfffffc02:w,d0 + extw d0 + addw d0,_SDL_AtariIkbd_mousex + + movel sp@+,d0 + + movel #ikbd_mousey,0x118:w + bclr #6,0xfffffa11:w + rte + +ikbd_mousey: + movel d0,sp@- + + moveb 0xfffffc02:w,d0 + extw d0 + addw d0,_SDL_AtariIkbd_mousey + + movel sp@+,d0 + + movel #ikbd,0x118:w + bclr #6,0xfffffa11:w + rte + +ikbd_joystick: + moveb 0xfffffc02:w,_SDL_AtariIkbd_joystick+1 + + movel #ikbd,0x118:w + bclr #6,0xfffffa11:w + rte + + .data + + .even + .comm _SDL_AtariIkbd_keyboard,128 + .even + .comm _SDL_AtariIkbd_mousex,2*1 + .even + .comm _SDL_AtariIkbd_mousey,2*1 + .even + .comm _SDL_AtariIkbd_mouseb,2*1 + .even + .comm _SDL_AtariIkbd_joystick,2*1