Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
260 lines (179 loc) · 4.19 KB

SDL_ikbdinterrupt.S

File metadata and controls

260 lines (179 loc) · 4.19 KB
 
1
2
/*
SDL - Simple DirectMedia Layer
3
Copyright (C) 1997-2009 Sam Lantinga
4
5
This library is free software; you can redistribute it and/or
6
modify it under the terms of the GNU Lesser General Public
7
License as published by the Free Software Foundation; either
8
version 2.1 of the License, or (at your option) any later version.
9
10
11
12
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
13
Lesser General Public License for more details.
15
16
17
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Sam Lantinga
slouken@libsdl.org
*/
/*
* IKBD 6301 interrupt routine
*
* Patrice Mandin
*/
.text
.globl _SDL_AtariIkbdInstall
.globl _SDL_AtariIkbdUninstall
.globl _SDL_AtariIkbd_keyboard
.globl _SDL_AtariIkbd_mouseb
.globl _SDL_AtariIkbd_mousex
.globl _SDL_AtariIkbd_mousey
.globl _SDL_AtariIkbd_joystick
40
41
.globl _SDL_AtariIkbd_enabled
42
43
44
45
46
/*--- Install our IKBD vector ---*/
_SDL_AtariIkbdInstall:
moveml d0-d1/a0-a1,sp@-
48
49
50
51
52
53
54
movew #0x2700,sr
| Save MFP registers used for keyboard
lea 0xfffffa00:w,a0
btst #6,a0@(0x09)
58
59
60
61
62
63
64
65
| Set our routine
movel 0x118:w,old_ikbd
movel #ikbd,0x118:w
bset #6,0xfffffa09:w | IERB
bset #6,0xfffffa15:w | IMRB
72
73
74
75
movew #0x2300,sr
| Interrupts done
76
77
movew #0xffff,_SDL_AtariIkbd_enabled
78
79
80
81
82
83
84
85
moveml sp@+,d0-d1/a0-a1
rts
/*--- Uninstall our IKBD vector ---*/
_SDL_AtariIkbdUninstall:
movel a0,sp@-
87
88
89
90
91
92
93
94
95
movew #0x2700,sr
| Restore previous MFP registers
lea 0xfffffa00:w,a0
bclr #6,a0@(0x09)
tstb ikbd_ierb
97
98
99
100
101
bset #6,a0@(0x09)
ikbd_restoreierb:
bclr #6,a0@(0x15)
tstb ikbd_imrb
103
104
105
106
107
108
109
110
111
112
bset #6,a0@(0x15)
ikbd_restoreimrb:
movel old_ikbd,0x118:w
| Clear keyboard buffer
lea 0xfffffc00:w,a0
ikbd_videbuffer:
btst #0,a0@
120
121
122
123
124
movew #0x2300,sr
movel sp@+,a0
rts
128
129
.comm ikbd_ierb,1
.comm ikbd_imrb,1
130
131
132
133
134
135
/*--- Our custom IKBD vector ---*/
.text
.even
.ascii "XBRA"
136
137
.ascii "LSDL"
.comm old_ikbd,4*1
139
| Check if source is IKBD or MIDI
140
141
btst #0,0xfffffc00.w
beqs ikbd_oldmidi
143
144
145
moveml d0-d1/a0,sp@-
moveb 0xfffffc02:w,d0
160
161
162
163
164
ikbd_yes_mouse:
andw #3,d0
movew d0,_SDL_AtariIkbd_mouseb
movel #ikbd_mousex,0x118:w
169
170
ikbd_yes_joystick:
movel #ikbd_joystick,0x118:w
177
178
179
180
lea _SDL_AtariIkbd_keyboard,a0
andw #0x7f,d1
tas d0
spl a0@(0,d1:w)
187
188
189
bclr #6,0xfffffa11:w
rte
190
191
192
193
194
195
| Call old MIDI interrupt
ikbd_oldmidi:
movel old_ikbd,sp@-
rts
200
| Check if source is IKBD or MIDI
201
202
btst #0,0xfffffc00.w
beqs ikbd_oldmidi
205
206
207
208
209
moveb 0xfffffc02:w,d0
extw d0
addw d0,_SDL_AtariIkbd_mousex
211
212
movel #ikbd_mousey,0x118:w
219
| Check if source is IKBD or MIDI
220
221
btst #0,0xfffffc00.w
beqs ikbd_oldmidi
224
225
226
227
228
moveb 0xfffffc02:w,d0
extw d0
addw d0,_SDL_AtariIkbd_mousey
238
| Check if source is IKBD or MIDI
239
240
btst #0,0xfffffc00.w
beqs ikbd_oldmidi
242
243
244
moveb 0xfffffc02:w,_SDL_AtariIkbd_joystick+1
movel #ikbd,0x118:w
250
251
_SDL_AtariIkbd_enabled:
.word 0
256
.comm _SDL_AtariIkbd_keyboard,128
257
258
259
260
.comm _SDL_AtariIkbd_mousex,2
.comm _SDL_AtariIkbd_mousey,2
.comm _SDL_AtariIkbd_mouseb,2
.comm _SDL_AtariIkbd_joystick,2