Skip to content

Latest commit

 

History

History
226 lines (165 loc) · 3.69 KB

SDL_ikbdinterrupt.S

File metadata and controls

226 lines (165 loc) · 3.69 KB
 
1
2
/*
SDL - Simple DirectMedia Layer
Mar 6, 2002
Mar 6, 2002
3
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Sam Lantinga
slouken@libsdl.org
*/
#ifdef SAVE_RCSID
static char rcsid =
"@(#) $Id$";
#endif
/*
* 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
Mar 10, 2002
Mar 10, 2002
45
46
.globl _SDL_AtariIkbd_enabled
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*--- Install our IKBD vector ---*/
_SDL_AtariIkbdInstall:
moveml d0-d1/a0-a1,sp@-
| Init interrupts
movew #0x2700,sr
| Save MFP registers used for keyboard
lea 0xfffffa00:w,a0
btst #6,a0@(0x09)
sne ikbd_ierb
btst #6,a0@(0x15)
sne ikbd_imrb
| Set our routine
movel 0x118:w,old_ikbd
movel #ikbd,0x118:w
bset #6,0xfffffa09:w | IERB
bset #6,0xfffffa15:w | IMRB
moveb #8,0xfffffc02:w
movew #0x2300,sr
| Interrupts done
Mar 10, 2002
Mar 10, 2002
77
78
movew #0xffff,_SDL_AtariIkbd_enabled
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
moveml sp@+,d0-d1/a0-a1
rts
/*--- Uninstall our IKBD vector ---*/
_SDL_AtariIkbdUninstall:
movel a0,sp@-
| Stop interrupt
movew #0x2700,sr
| Restore previous MFP registers
lea 0xfffffa00:w,a0
bclr #6,a0@(0x09)
tstb ikbd_ierb
beq ikbd_restoreierb
bset #6,a0@(0x09)
ikbd_restoreierb:
bclr #6,a0@(0x15)
tstb ikbd_imrb
beq ikbd_restoreimrb
bset #6,a0@(0x15)
ikbd_restoreimrb:
movel old_ikbd,0x118:w
| Clear keyboard buffer
lea 0xfffffc00:w,a0
ikbd_videbuffer:
btst #0,a0@
beq ikbd_finbuffer
tstb a0@(0x02)
bra ikbd_videbuffer
ikbd_finbuffer:
movew #0x2300,sr
movel sp@+,a0
rts
.data
.even
.comm ikbd_ierb,4*1
.even
.comm ikbd_imrb,4*1
/*--- Our custom IKBD vector ---*/
.text
.even
.ascii "XBRA"
Feb 27, 2002
Feb 27, 2002
135
136
.ascii "LSDL"
.comm old_ikbd,4*1
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
ikbd:
moveml d0-d1/a0,sp@-
moveb 0xfffffc02:w,d0
| paquet joystick ?
cmpb #0xff,d0
beq ikbd_yes_joystick
| paquet souris ?
cmpb #0xf8,d0
bmi ikbd_no_mouse
cmpb #0xfc,d0
bpl ikbd_no_mouse
ikbd_yes_mouse:
andw #3,d0
movew d0,_SDL_AtariIkbd_mouseb
movel #ikbd_mousex,0x118:w
bra ikbd_endit
ikbd_yes_joystick:
movel #ikbd_joystick,0x118:w
bra ikbd_endit
ikbd_no_mouse:
moveb d0,d1
lea _SDL_AtariIkbd_keyboard,a0
andl #0x7f,d1
tas d0
spl a0@(0,d1:w)
ikbd_fin:
| Fin interruption
ikbd_endit:
moveml sp@+,d0-d1/a0
bclr #6,0xfffffa11:w
rte
ikbd_mousex:
movel d0,sp@-
moveb 0xfffffc02:w,d0
extw d0
addw d0,_SDL_AtariIkbd_mousex
movel sp@+,d0
movel #ikbd_mousey,0x118:w
bclr #6,0xfffffa11:w
rte
ikbd_mousey:
movel d0,sp@-
moveb 0xfffffc02:w,d0
extw d0
addw d0,_SDL_AtariIkbd_mousey
movel sp@+,d0
movel #ikbd,0x118:w
bclr #6,0xfffffa11:w
rte
ikbd_joystick:
moveb 0xfffffc02:w,_SDL_AtariIkbd_joystick+1
movel #ikbd,0x118:w
bclr #6,0xfffffa11:w
rte
.data
.even
Mar 10, 2002
Mar 10, 2002
215
216
217
_SDL_AtariIkbd_enabled:
.word 0
.even
218
219
220
221
222
223
224
225
226
.comm _SDL_AtariIkbd_keyboard,128
.even
.comm _SDL_AtariIkbd_mousex,2*1
.even
.comm _SDL_AtariIkbd_mousey,2*1
.even
.comm _SDL_AtariIkbd_mouseb,2*1
.even
.comm _SDL_AtariIkbd_joystick,2*1