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
Feb 1, 2006
Feb 1, 2006
3
Copyright (C) 1997-2006 Sam Lantinga
4
5
This library is free software; you can redistribute it and/or
Feb 1, 2006
Feb 1, 2006
6
modify it under the terms of the GNU Lesser General Public
7
License as published by the Free Software Foundation; either
Feb 1, 2006
Feb 1, 2006
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
Feb 1, 2006
Feb 1, 2006
13
Lesser General Public License for more details.
Feb 1, 2006
Feb 1, 2006
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
Mar 10, 2002
Mar 10, 2002
40
41
.globl _SDL_AtariIkbd_enabled
42
43
44
45
46
/*--- Install our IKBD vector ---*/
_SDL_AtariIkbdInstall:
moveml d0-d1/a0-a1,sp@-
Jun 29, 2005
Jun 29, 2005
47
| Disable interrupts
48
49
50
51
52
53
54
movew #0x2700,sr
| Save MFP registers used for keyboard
lea 0xfffffa00:w,a0
btst #6,a0@(0x09)
Jun 29, 2005
Jun 29, 2005
55
sne ikbd_ierb
56
btst #6,a0@(0x15)
Jun 29, 2005
Jun 29, 2005
57
sne ikbd_imrb
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
Jun 29, 2005
Jun 29, 2005
66
67
| Set mouse relative mode
68
69
moveb #8,0xfffffc02:w
Jun 29, 2005
Jun 29, 2005
70
71
| Reenable interrupts
72
73
74
75
movew #0x2300,sr
| Interrupts done
Mar 10, 2002
Mar 10, 2002
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@-
Jun 29, 2005
Jun 29, 2005
86
| Disable interrupts
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
Jun 29, 2005
Jun 29, 2005
96
beqs ikbd_restoreierb
97
98
99
100
101
bset #6,a0@(0x09)
ikbd_restoreierb:
bclr #6,a0@(0x15)
tstb ikbd_imrb
Jun 29, 2005
Jun 29, 2005
102
beqs ikbd_restoreimrb
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@
Jun 29, 2005
Jun 29, 2005
113
beqs ikbd_finbuffer
114
tstb a0@(0x02)
Jun 29, 2005
Jun 29, 2005
115
bras ikbd_videbuffer
116
117
ikbd_finbuffer:
Jun 29, 2005
Jun 29, 2005
118
119
| Reenable interrupts
120
121
122
123
124
movew #0x2300,sr
movel sp@+,a0
rts
Jun 29, 2005
Jun 29, 2005
125
126
.bss
127
.even
Jun 29, 2005
Jun 29, 2005
128
129
.comm ikbd_ierb,1
.comm ikbd_imrb,1
130
131
132
133
134
135
/*--- Our custom IKBD vector ---*/
.text
.even
.ascii "XBRA"
Feb 27, 2002
Feb 27, 2002
136
137
.ascii "LSDL"
.comm old_ikbd,4*1
Jun 29, 2005
Jun 29, 2005
139
| Check if source is IKBD or MIDI
Aug 9, 2005
Aug 9, 2005
140
141
btst #0,0xfffffc00.w
beqs ikbd_oldmidi
Jun 29, 2005
Jun 29, 2005
142
143
144
145
moveml d0-d1/a0,sp@-
moveb 0xfffffc02:w,d0
Jun 29, 2005
Jun 29, 2005
146
| Joystick packet ?
147
148
cmpb #0xff,d0
Jun 29, 2005
Jun 29, 2005
149
beqs ikbd_yes_joystick
Jun 29, 2005
Jun 29, 2005
151
| Mouse packet ?
152
153
cmpb #0xf8,d0
Jun 29, 2005
Jun 29, 2005
154
bmis ikbd_no_mouse
155
cmpb #0xfc,d0
Jun 29, 2005
Jun 29, 2005
156
bpls ikbd_no_mouse
Jun 29, 2005
Jun 29, 2005
158
159
| Mouse packet, byte #1
160
161
162
163
164
ikbd_yes_mouse:
andw #3,d0
movew d0,_SDL_AtariIkbd_mouseb
movel #ikbd_mousex,0x118:w
Jun 29, 2005
Jun 29, 2005
165
bras ikbd_endit_stack
Jun 29, 2005
Jun 29, 2005
167
168
| Joystick packet, byte #1
169
170
ikbd_yes_joystick:
movel #ikbd_joystick,0x118:w
Jun 29, 2005
Jun 29, 2005
171
bras ikbd_endit_stack
Jun 29, 2005
Jun 29, 2005
173
174
| Keyboard press/release
175
176
ikbd_no_mouse:
moveb d0,d1
Jun 29, 2005
Jun 29, 2005
177
178
179
180
lea _SDL_AtariIkbd_keyboard,a0
andw #0x7f,d1
tas d0
spl a0@(0,d1:w)
Jun 29, 2005
Jun 29, 2005
182
| End of interrupt
Jun 29, 2005
Jun 29, 2005
184
ikbd_endit_stack:
185
moveml sp@+,d0-d1/a0
Jun 29, 2005
Jun 29, 2005
186
ikbd_endit:
187
188
189
bclr #6,0xfffffa11:w
rte
Jun 29, 2005
Jun 29, 2005
190
191
192
193
194
195
| Call old MIDI interrupt
ikbd_oldmidi:
movel old_ikbd,sp@-
rts
Jun 29, 2005
Jun 29, 2005
196
197
| Mouse packet, byte #2
198
ikbd_mousex:
Jun 29, 2005
Jun 29, 2005
199
Jun 29, 2005
Jun 29, 2005
200
| Check if source is IKBD or MIDI
Aug 9, 2005
Aug 9, 2005
201
202
btst #0,0xfffffc00.w
beqs ikbd_oldmidi
Jun 29, 2005
Jun 29, 2005
203
204
movew d0,sp@-
205
206
207
208
209
moveb 0xfffffc02:w,d0
extw d0
addw d0,_SDL_AtariIkbd_mousex
Jun 29, 2005
Jun 29, 2005
210
movew sp@+,d0
211
212
movel #ikbd_mousey,0x118:w
Jun 29, 2005
Jun 29, 2005
213
bras ikbd_endit
Jun 29, 2005
Jun 29, 2005
215
216
| Mouse packet, byte #3
217
ikbd_mousey:
Jun 29, 2005
Jun 29, 2005
218
Jun 29, 2005
Jun 29, 2005
219
| Check if source is IKBD or MIDI
Aug 9, 2005
Aug 9, 2005
220
221
btst #0,0xfffffc00.w
beqs ikbd_oldmidi
Jun 29, 2005
Jun 29, 2005
222
223
movew d0,sp@-
224
225
226
227
228
moveb 0xfffffc02:w,d0
extw d0
addw d0,_SDL_AtariIkbd_mousey
Jun 29, 2005
Jun 29, 2005
229
movew sp@+,d0
230
231
movel #ikbd,0x118:w
Jun 29, 2005
Jun 29, 2005
232
bras ikbd_endit
Jun 29, 2005
Jun 29, 2005
234
235
| Joystick packet, byte #2
236
ikbd_joystick:
Jun 29, 2005
Jun 29, 2005
237
Jun 29, 2005
Jun 29, 2005
238
| Check if source is IKBD or MIDI
Aug 9, 2005
Aug 9, 2005
239
240
btst #0,0xfffffc00.w
beqs ikbd_oldmidi
Jun 29, 2005
Jun 29, 2005
241
242
243
244
moveb 0xfffffc02:w,_SDL_AtariIkbd_joystick+1
movel #ikbd,0x118:w
Jun 29, 2005
Jun 29, 2005
245
bras ikbd_endit
246
247
248
249
.data
.even
Mar 10, 2002
Mar 10, 2002
250
251
_SDL_AtariIkbd_enabled:
.word 0
Jun 29, 2005
Jun 29, 2005
252
253
254
.bss
Mar 10, 2002
Mar 10, 2002
255
.even
256
.comm _SDL_AtariIkbd_keyboard,128
Jun 29, 2005
Jun 29, 2005
257
258
259
260
.comm _SDL_AtariIkbd_mousex,2
.comm _SDL_AtariIkbd_mousey,2
.comm _SDL_AtariIkbd_mouseb,2
.comm _SDL_AtariIkbd_joystick,2