Adapt timer code for Coldfire
--HG-- branch : SDL-1.2 extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/branches/SDL-1.2%404159
This commit is contained in:
parent
9c7075fc0b
commit
1ccc6106e8
1 changed files with 83 additions and 14 deletions
|
@ -36,14 +36,61 @@
|
||||||
|
|
||||||
.globl _SDL_MintAudio_hasfpu
|
.globl _SDL_MintAudio_hasfpu
|
||||||
|
|
||||||
|
/*--- Save/restore FPU context ---*/
|
||||||
|
|
||||||
|
#if defined(__mcoldfire__)
|
||||||
|
|
||||||
|
#define SAVE_FPU_CONTEXT \
|
||||||
|
lea sp@(-216),sp; \
|
||||||
|
fsave sp@; \
|
||||||
|
fmovel fpiar,sp@-; \
|
||||||
|
lea sp@(-64),sp; \
|
||||||
|
fmovemd fp0-fp7,sp@
|
||||||
|
|
||||||
|
#define RESTORE_FPU_CONTEXT \
|
||||||
|
fmovemd sp@,fp0-fp7; \
|
||||||
|
lea sp@(64),sp; \
|
||||||
|
fmovel sp@+,fpiar; \
|
||||||
|
frestore sp@; \
|
||||||
|
lea sp@(216),sp
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define SAVE_FPU_CONTEXT \
|
||||||
|
.chip 68k/68881; \
|
||||||
|
fsave sp@-; \
|
||||||
|
fmoveml fpcr/fpsr/fpiar,sp@-; \
|
||||||
|
fmovemx fp0-fp7,sp@-; \
|
||||||
|
.chip 68k
|
||||||
|
|
||||||
|
#define RESTORE_FPU_CONTEXT \
|
||||||
|
.chip 68k/68881; \
|
||||||
|
fmovemx sp@+,fp0-fp7; \
|
||||||
|
fmoveml sp@+,fpcr/fpsr/fpiar; \
|
||||||
|
frestore sp@+; \
|
||||||
|
.chip 68k
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/*--- Vector installer ---*/
|
/*--- Vector installer ---*/
|
||||||
|
|
||||||
_SDL_AtariVblInstall:
|
_SDL_AtariVblInstall:
|
||||||
|
#if defined(__mcoldfire__)
|
||||||
|
movel sp@(4),d0
|
||||||
|
movel d0,my_vector
|
||||||
|
#else
|
||||||
movel sp@(4),my_vector
|
movel sp@(4),my_vector
|
||||||
|
#endif
|
||||||
|
|
||||||
lea _my_vbl,a0
|
lea _my_vbl,a0
|
||||||
|
|
||||||
clrw vbl_mutex
|
clrw vbl_mutex
|
||||||
|
#if defined(__mcoldfire__)
|
||||||
|
movel _hz_200.w,d0
|
||||||
|
movel d0, _SDL_Atari_hz200
|
||||||
|
#else
|
||||||
movel _hz_200.w, _SDL_Atari_hz200
|
movel _hz_200.w, _SDL_Atari_hz200
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Stop interrupts */
|
/* Stop interrupts */
|
||||||
|
|
||||||
|
@ -58,7 +105,12 @@ bcl_search_place:
|
||||||
movel (a1),d1
|
movel (a1),d1
|
||||||
beqs place_found
|
beqs place_found
|
||||||
addql #4,a1
|
addql #4,a1
|
||||||
|
#if defined(__mcoldfire__)
|
||||||
|
subql #1,d0
|
||||||
|
bpls bcl_search_place
|
||||||
|
#else
|
||||||
dbra d0,bcl_search_place
|
dbra d0,bcl_search_place
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Not found */
|
/* Not found */
|
||||||
moveq #1,d0
|
moveq #1,d0
|
||||||
|
@ -100,7 +152,12 @@ bcl2_search_place:
|
||||||
moveq #0,d1
|
moveq #0,d1
|
||||||
next_place:
|
next_place:
|
||||||
addql #4,a1
|
addql #4,a1
|
||||||
|
#if defined(__mcoldfire__)
|
||||||
|
subql #1,d1
|
||||||
|
bpls bcl_search_place
|
||||||
|
#else
|
||||||
dbra d1,bcl2_search_place
|
dbra d1,bcl2_search_place
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Restart interrupts */
|
/* Restart interrupts */
|
||||||
movew #0x2300,sr
|
movew #0x2300,sr
|
||||||
|
@ -110,25 +167,37 @@ badvector:
|
||||||
/*--- Our vbl ---*/
|
/*--- Our vbl ---*/
|
||||||
|
|
||||||
_my_vbl:
|
_my_vbl:
|
||||||
|
#if defined(__mcoldfire__)
|
||||||
|
lea sp@(-60),sp
|
||||||
|
moveml d0-d7/a0-a6,sp@
|
||||||
|
#else
|
||||||
|
moveml d0-d7/a0-a6,sp@-
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Update _hz_200 */
|
/* Update _hz_200 */
|
||||||
|
#if defined(__mcoldfire__)
|
||||||
|
movel _hz_200.w,d0
|
||||||
|
movel d0, _SDL_Atari_hz200
|
||||||
|
#else
|
||||||
movel _hz_200.w, _SDL_Atari_hz200
|
movel _hz_200.w, _SDL_Atari_hz200
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Verify if this is not already running */
|
/* Verify if this is not already running */
|
||||||
|
|
||||||
tstw vbl_mutex
|
tstw vbl_mutex
|
||||||
bnes vbl_end
|
bnes vbl_end
|
||||||
|
#if defined(__mcoldfire__)
|
||||||
|
movew vbl_mutex,d0
|
||||||
|
notl d0
|
||||||
|
movew d0,vbl_mutex
|
||||||
|
#else
|
||||||
notw vbl_mutex
|
notw vbl_mutex
|
||||||
|
#endif
|
||||||
moveml d0-d7/a0-a6,sp@-
|
|
||||||
|
|
||||||
/* Save FPU if needed */
|
/* Save FPU if needed */
|
||||||
tstw _SDL_MintAudio_hasfpu
|
tstw _SDL_MintAudio_hasfpu
|
||||||
beqs SDL_AtariVbl_nofpu1
|
beqs SDL_AtariVbl_nofpu1
|
||||||
.chip 68060
|
SAVE_FPU_CONTEXT
|
||||||
fsave sp@-
|
|
||||||
fmoveml fpcr/fpsr/fpiar,sp@-
|
|
||||||
fmovemx fp0-fp7,sp@-
|
|
||||||
.chip 68000
|
|
||||||
SDL_AtariVbl_nofpu1:
|
SDL_AtariVbl_nofpu1:
|
||||||
|
|
||||||
movel my_vector,a0
|
movel my_vector,a0
|
||||||
|
@ -137,17 +206,17 @@ SDL_AtariVbl_nofpu1:
|
||||||
/* Restore FPU if needed */
|
/* Restore FPU if needed */
|
||||||
tstw _SDL_MintAudio_hasfpu
|
tstw _SDL_MintAudio_hasfpu
|
||||||
beqs SDL_AtariVbl_Xbios_nofpu2
|
beqs SDL_AtariVbl_Xbios_nofpu2
|
||||||
.chip 68060
|
RESTORE_FPU_CONTEXT
|
||||||
fmovemx sp@+,fp0-fp7
|
|
||||||
fmoveml sp@+,fpcr/fpsr/fpiar
|
|
||||||
frestore sp@+
|
|
||||||
.chip 68000
|
|
||||||
SDL_AtariVbl_Xbios_nofpu2:
|
SDL_AtariVbl_Xbios_nofpu2:
|
||||||
|
|
||||||
moveml sp@+,d0-d7/a0-a6
|
|
||||||
|
|
||||||
clrw vbl_mutex
|
clrw vbl_mutex
|
||||||
vbl_end:
|
vbl_end:
|
||||||
|
#if defined(__mcoldfire__)
|
||||||
|
moveml sp@,d0-d7/a0-a6
|
||||||
|
lea sp@(60),sp
|
||||||
|
#else
|
||||||
|
moveml sp@+,d0-d7/a0-a6
|
||||||
|
#endif
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.data
|
.data
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue