Mercurial > sdl-ios-xcode
diff src/timer/mint/SDL_vbltimer.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/timer/mint/SDL_vbltimer.S Sun Feb 17 19:54:28 2002 +0000 @@ -0,0 +1,137 @@ +/* + 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 + +/* + * VBL queue routine + * + * Patrice Mandin + */ + +#define _vbl_queue 0x456 + + .text + + .globl _SDL_AtariVblInstall + .globl _SDL_AtariVblUninstall + +/*--- Vector installer ---*/ + +_SDL_AtariVblInstall: + movel sp@(4),my_vector + lea _my_vbl,a0 + + clrw vbl_mutex + + /* Stop interrupts */ + + movew #0x2700,sr + + /* Read vbl_queue pointer */ + movel _vbl_queue.w,a1 + + /* Search a free place */ + moveq #7,d0 +bcl_search_place: + movel (a1),d1 + beqs place_found + addql #4,a1 + dbra d0,bcl_search_place + + /* Not found */ + moveq #1,d0 + bras exit_vbl_queue + + /* Then install ourselves */ +place_found: + movel a0,(a1) + moveq #0,d0 + +exit_vbl_queue: + /* Restart interrupts */ + movew #0x2300,sr + + rts + +/*--- Vector uninstaller ---*/ + +_SDL_AtariVblUninstall: + movel sp@(4),d0 + cmpl my_vector,d0 + bnes badvector + + movel #_my_vbl,d0 + + /* Stop interrupts */ + + movew #0x2700,sr + + /* Read vbl_queue pointer */ + movel _vbl_queue.w,a1 + + /* Search where we are */ + moveq #7,d1 +bcl2_search_place: + cmpl (a1),d0 + bnes next_place + clrl (a1) + moveq #0,d1 +next_place: + addql #4,a1 + dbra d1,bcl2_search_place + + /* Restart interrupts */ + movew #0x2300,sr +badvector: + rts + +/*--- Our vbl ---*/ + + .text + .even + .ascii "XBRA" + .ascii "_SDL" +_my_vbl: + /* Verify if this is not already running */ + + tstw vbl_mutex + bnes vbl_end + notw vbl_mutex + + moveml d0-d7/a0-a6,sp@- + movel my_vector,a0 + jsr a0@ + moveml sp@+,d0-d7/a0-a6 + + clrw vbl_mutex +vbl_end: + rts + + .data + .even + .comm vbl_mutex,2*1 + .even + .comm my_vector,4*1