Adapt IKBD asm routine for Coldfire SDL-1.2
authorPatrice Mandin <patmandin@gmail.com>
Fri, 06 Nov 2009 22:32:16 +0000
branchSDL-1.2
changeset 4376 40e4536ad0c3
parent 4375 a52047c790a2
child 4377 c92927bd421a
Adapt IKBD asm routine for Coldfire
src/video/ataricommon/SDL_ikbdinterrupt.S
--- a/src/video/ataricommon/SDL_ikbdinterrupt.S	Fri Nov 06 21:17:16 2009 +0000
+++ b/src/video/ataricommon/SDL_ikbdinterrupt.S	Fri Nov 06 22:32:16 2009 +0000
@@ -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 @@
 
 	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 @@
 
 	| 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 @@
 	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 @@
 	.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 @@
 	| 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_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