From 47d205c39a93a5d98ce8d015a8185eb6ea672baa Mon Sep 17 00:00:00 2001 From: Patrice Mandin Date: Fri, 6 Nov 2009 22:32:16 +0000 Subject: [PATCH] Adapt IKBD asm routine for Coldfire --- src/video/ataricommon/SDL_ikbdinterrupt.S | 175 +++++++++++++++++++--- 1 file changed, 158 insertions(+), 17 deletions(-) diff --git a/src/video/ataricommon/SDL_ikbdinterrupt.S b/src/video/ataricommon/SDL_ikbdinterrupt.S index 558ccdf89..9188e6110 100644 --- a/src/video/ataricommon/SDL_ikbdinterrupt.S +++ b/src/video/ataricommon/SDL_ikbdinterrupt.S @@ -42,7 +42,12 @@ /*--- Install our IKBD vector ---*/ _SDL_AtariIkbdInstall: +#if defined(__mcoldfire__) + lea sp@(-16),sp + moveml d0-d1/a0-a1,sp@ +#else moveml d0-d1/a0-a1,sp@- +#endif | Disable interrupts @@ -52,20 +57,42 @@ _SDL_AtariIkbdInstall: lea 0xfffffa00:w,a0 btst #6,a0@(0x09) - sne ikbd_ierb +#if defined(__mcoldfire__) + sne d0 + move.b d0,ikbd_ierb +#else + sne ikbd_ierb +#endif btst #6,a0@(0x15) - sne ikbd_imrb +#if defined(__mcoldfire__) + sne d0 + move.b d0,ikbd_imrb +#else + sne ikbd_imrb +#endif | Set our routine +#if defined(__mcoldfire__) + movel 0x118:w,d0 + movel d0,old_ikbd + lea ikbd,a0 + movel a0,0x118:w +#else movel 0x118:w,old_ikbd movel #ikbd,0x118:w bset #6,0xfffffa09:w | IERB bset #6,0xfffffa15:w | IMRB +#endif | Set mouse relative mode +#if defined(__mcoldfire__) + moveql #8,d0 + moveb d0,0xfffffc02:w +#else moveb #8,0xfffffc02:w +#endif | Reenable interrupts @@ -73,9 +100,17 @@ _SDL_AtariIkbdInstall: | Interrupts done +#if defined(__mcoldfire__) + movel #0xffff,d0 + movew d0,_SDL_AtariIkbd_enabled + + moveml sp@,d0-d1/a0-a1 + lea sp@(16),sp +#else movew #0xffff,_SDL_AtariIkbd_enabled moveml sp@+,d0-d1/a0-a1 +#endif rts /*--- Uninstall our IKBD vector ---*/ @@ -103,7 +138,12 @@ ikbd_restoreierb: bset #6,a0@(0x15) ikbd_restoreimrb: +#if defined(__mcoldfire__) + movel old_ikbd,a0 + movel a0,0x118:w +#else movel old_ikbd,0x118:w +#endif | Clear keyboard buffer @@ -136,11 +176,22 @@ ikbd_finbuffer: .ascii "LSDL" .comm old_ikbd,4*1 ikbd: +#if defined(__mcoldfire__) + lea sp@(-12),sp + moveml sp@,d0-d1/a0 +#else + moveml d0-d1/a0,sp@- +#endif + | Check if source is IKBD or MIDI +#if defined(__mcoldfire__) + moveql #0,d0 + btst d0,0xfffffc00.w +#else btst #0,0xfffffc00.w +#endif beqs ikbd_oldmidi - moveml d0-d1/a0,sp@- moveb 0xfffffc02:w,d0 | Joystick packet ? @@ -158,16 +209,30 @@ ikbd: | Mouse packet, byte #1 ikbd_yes_mouse: +#if defined(__mcoldfire__) + andl #3,d0 +#else andw #3,d0 +#endif movew d0,_SDL_AtariIkbd_mouseb +#if defined(__mcoldfire__) + movel #ikbd_mousex,d0 + movel d0,0x118:w +#else movel #ikbd_mousex,0x118:w +#endif bras ikbd_endit_stack | Joystick packet, byte #1 ikbd_yes_joystick: +#if defined(__mcoldfire__) + movel #ikbd_joystick,d0 + movel d0,0x118:w +#else movel #ikbd_joystick,0x118:w +#endif bras ikbd_endit_stack | Keyboard press/release @@ -175,74 +240,150 @@ ikbd_yes_joystick: ikbd_no_mouse: moveb d0,d1 lea _SDL_AtariIkbd_keyboard,a0 +#if defined(__mcoldfire__) + andl #0x7f,d1 + btst #7,d0 + spl d0 + moveb d0,a0@(0,d1:l) +#else andw #0x7f,d1 - tas d0 - spl a0@(0,d1:w) + tas d0 + spl a0@(0,d1:w) +#endif | End of interrupt ikbd_endit_stack: +#if defined(__mcoldfire__) + moveql #6,d0 + bclr d0,0xfffffa11:w + + moveml sp@,d0-d1/a0 + lea sp@(12),sp +#else moveml sp@+,d0-d1/a0 -ikbd_endit: + bclr #6,0xfffffa11:w +#endif rte | Call old MIDI interrupt ikbd_oldmidi: +#if defined(__mcoldfire__) + moveml sp@,d0-d1/a0 + lea sp@(12),sp +#else + moveml sp@+,d0-d1/a0 +#endif + movel old_ikbd,sp@- rts | Mouse packet, byte #2 ikbd_mousex: +#if defined(__mcoldfire__) + lea sp@(-12),sp + moveml sp@,d0-d1/a0 +#else + moveml d0-d1/a0,sp@- +#endif | Check if source is IKBD or MIDI +#if defined(__mcoldfire__) + moveql #0,d0 + btst d0,0xfffffc00.w +#else btst #0,0xfffffc00.w +#endif beqs ikbd_oldmidi - movew d0,sp@- - moveb 0xfffffc02:w,d0 extw d0 +#if defined(__mcoldfire__) + movew _SDL_AtariIkbd_mousex,d1 + addl d1,d0 + movew d0,_SDL_AtariIkbd_mousex + + movel #ikbd_mousey,d0 + movel d0,0x118:w +#else addw d0,_SDL_AtariIkbd_mousex - movew sp@+,d0 - movel #ikbd_mousey,0x118:w - bras ikbd_endit +#endif + bras ikbd_endit_stack | Mouse packet, byte #3 ikbd_mousey: +#if defined(__mcoldfire__) + lea sp@(-12),sp + moveml sp@,d0-d1/a0 +#else + moveml d0-d1/a0,sp@- +#endif | Check if source is IKBD or MIDI +#if defined(__mcoldfire__) + moveql #0,d0 + btst d0,0xfffffc00.w +#else btst #0,0xfffffc00.w +#endif beqs ikbd_oldmidi - movew d0,sp@- - moveb 0xfffffc02:w,d0 extw d0 +#if defined(__mcoldfire__) + movew _SDL_AtariIkbd_mousey,d1 + addl d1,d0 + movew d0,_SDL_AtariIkbd_mousey + + movel #ikbd,d0 + movel d0,0x118:w +#else addw d0,_SDL_AtariIkbd_mousey - movew sp@+,d0 - movel #ikbd,0x118:w - bras ikbd_endit +#endif + bras ikbd_endit_stack | Joystick packet, byte #2 ikbd_joystick: +#if defined(__mcoldfire__) + lea sp@(-12),sp + moveml sp@,d0-d1/a0 +#else + moveml d0-d1/a0,sp@- +#endif | Check if source is IKBD or MIDI +#if defined(__mcoldfire__) + moveql #0,d0 + btst d0,0xfffffc00.w +#else btst #0,0xfffffc00.w +#endif beqs ikbd_oldmidi +#if defined(__mcoldfire__) + moveb 0xfffffc02:w,d0 + moveb d0,_SDL_AtariIkbd_joystick+1 + + movel #ikbd,d0 + movel d0,0x118:w + + bra ikbd_endit_stack +#else moveb 0xfffffc02:w,_SDL_AtariIkbd_joystick+1 movel #ikbd,0x118:w - bras ikbd_endit + + bras ikbd_endit_stack +#endif .data