Skip to content
Permalink
Browse files
Adapt IKBD asm routine for Coldfire
  • Loading branch information
pmandin committed Nov 6, 2009
1 parent c6a243b commit 47d205c39a93a5d98ce8d015a8185eb6ea672baa
Showing with 158 additions and 17 deletions.
  1. +158 −17 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,30 +57,60 @@ _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

movew #0x2300,sr

| 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,91 +209,181 @@ 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

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

0 comments on commit 47d205c

Please sign in to comment.