This commit was generated by cvs2svn to compensate for changes in r2,
[btb/d2x.git] / unused / bios / mouse.asm
1 ; THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX\r
2 ; SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO\r
3 ; END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A\r
4 ; ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS\r
5 ; IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS\r
6 ; SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE\r
7 ; FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE\r
8 ; CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS\r
9 ; AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  \r
10 ; COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.\r
11 ;***************************************************************************\r
12 ;***************************************************************************\r
13 ;*****                                                                 *****\r
14 ;*****                      M O U S E . A S M                          *****\r
15 ;*****                                                                 *****\r
16 ;***** Contains routines for a mouse interface.                        *****\r
17 ;*****                                                                 *****\r
18 ;*****                                                                 *****\r
19 ;***** PROCEDURES                                                      *****\r
20 ;*****                                                                 *****\r
21 ;***** VARIABLES                                                       *****\r
22 ;*****                                                                 *****\r
23 ;*****                                                                 *****\r
24 ;***** CONSTANTS                                                       *****\r
25 ;*****                                                                 *****\r
26 ;*****                                                                 *****\r
27 ;***************************************************************************\r
28 ;***************************************************************************\r
29 \r
30 .386\r
31 \r
32 ;************************************************************************\r
33 ;**************** FLAT MODEL DATA SEGMENT STUFF *************************\r
34 ;************************************************************************\r
35 \r
36 _DATA   SEGMENT BYTE PUBLIC USE32 'DATA'\r
37 \r
38 rcsid   db  "$Id: mouse.asm,v 1.1.1.1 2001-01-19 03:30:14 bradleyb Exp $"\r
39 \r
40                 MOUSE_EVENT STRUCT 2\r
41                         MouseDX         dw  ?\r
42                         MouseDY         dw  ?\r
43                         MouseButtons    dw  ?\r
44                         MouseFlags      dw  ?\r
45                 MOUSE_EVENT ENDS\r
46 \r
47                 NumberOfButtons dw ?\r
48 \r
49                 MyEvent             MOUSE_EVENT < >\r
50                 MyEventHandler      dd  0\r
51 \r
52 \r
53 \r
54 _DATA   ENDS\r
55 \r
56 DGROUP  GROUP _DATA\r
57 \r
58 \r
59 ;************************************************************************\r
60 ;**************** FLAT MODEL CODE SEGMENT STUFF *************************\r
61 ;************************************************************************\r
62 \r
63 _TEXT   SEGMENT BYTE PUBLIC USE32 'CODE'\r
64 \r
65                 ASSUME  ds:_DATA\r
66                 ASSUME  cs:_TEXT\r
67 \r
68 PUBLIC  mouse_init_\r
69 \r
70 mouse_init_:\r
71 \r
72                 push    bx\r
73                 xor     ax, ax      ; Reset mouse\r
74                 int     33h\r
75                 mov     NumberOfButtons, bx\r
76                 pop     bx\r
77                 or      ax, ax\r
78                 jnz     present\r
79                 jmp     absent\r
80 \r
81 \r
82 present:\r
83                 mov     ax, 0020h   ; Enable driver\r
84                 int     33h\r
85 \r
86                 mov     ax, 1\r
87                 ret\r
88 \r
89 absent:\r
90                 mov     ax, 0\r
91                 ret\r
92 \r
93 \r
94 \r
95 PUBLIC  mouse_get_pos_\r
96 \r
97 mouse_get_pos_:\r
98 \r
99                 push    eax\r
100                 push    ebx\r
101                 push    ecx\r
102                 push    edx\r
103 \r
104                 push    eax\r
105 \r
106                 mov     ax, 03h     ; Get Mouse Position and Button Status\r
107                 int     33h\r
108                 ; bx = buttons, cx = x, dx = y\r
109 \r
110                 pop     eax\r
111                 mov     [eax], cx\r
112                 pop     eax\r
113                 mov     [eax], dx\r
114                 mov     edx, eax\r
115 \r
116                 pop     ecx\r
117                 pop     ebx\r
118                 pop     eax\r
119 \r
120                 ret\r
121 \r
122 PUBLIC  mouse_get_delta_\r
123 \r
124 mouse_get_delta_:\r
125 \r
126                 push    eax\r
127                 push    ebx\r
128                 push    ecx\r
129                 push    edx\r
130 \r
131 \r
132                 push    eax\r
133 \r
134                 mov     eax, 0bh    ; Read Mouse Motion Counters\r
135                 int     33h\r
136 \r
137                 pop     eax\r
138                 mov     [eax], cx\r
139                 pop     eax\r
140                 mov     [eax], dx\r
141                 mov     edx, eax\r
142 \r
143                 pop     ecx\r
144                 pop     ebx\r
145                 pop     eax\r
146                 ret\r
147 \r
148 \r
149 PUBLIC  mouse_get_btns_\r
150 \r
151 mouse_get_btns_:\r
152 \r
153                 push    ebx\r
154                 push    ecx\r
155                 push    edx\r
156 \r
157                 mov     ax, 03h     ; Get Mouse Position and Button Status\r
158                 int     33h\r
159                 ; bx = buttons, cx = x, dx = y\r
160 \r
161                 movzx   eax, bx\r
162 \r
163                 pop     edx\r
164                 pop     ecx\r
165                 pop     ebx\r
166 \r
167                 ret\r
168 \r
169 \r
170 PUBLIC  mouse_close_\r
171 \r
172 mouse_close_:\r
173 \r
174                 push    eax\r
175                 push    ebx\r
176                 push    es\r
177 \r
178                 mov     ax, 01fh    ; Disable mouse driver\r
179                 int     33h\r
180 \r
181                 pop     es\r
182                 pop     ebx\r
183                 pop     eax\r
184 \r
185                 ret\r
186 \r
187 MyHandler:\r
188 \r
189                 pushad\r
190                 push    ds\r
191 \r
192                 push    ax\r
193                 mov     ax, DGROUP\r
194                 mov     ds, ax\r
195                 pop     ax\r
196 \r
197                 mov     MyEvent.MouseDX, cx\r
198                 mov     MyEvent.MouseDY, dx\r
199                 mov     MyEvent.MouseButtons, bx\r
200                 mov     MyEvent.MouseFlags, ax\r
201 \r
202                 mov     eax, offset MyEvent\r
203 \r
204                 call    MyEventHandler\r
205 \r
206                 pop     ds\r
207                 popad\r
208 \r
209                 retf\r
210 \r
211 PUBLIC  mouse_set_handler_\r
212 \r
213 mouse_set_handler_:\r
214 \r
215                 push    eax\r
216                 push    ebx\r
217                 push    ecx\r
218                 push    edx\r
219                 push    es\r
220 \r
221                 mov     MyEventHandler, edx\r
222 \r
223                 mov     ecx, eax    ; Event flags\r
224                 mov     edx, MyHandler\r
225                 mov     ax, cs\r
226                 mov     es, ax\r
227                 mov     ax, 0Ch     ; Set User-defined Mouse Event Handler\r
228                 int     33h\r
229 \r
230                 pop     es\r
231                 pop     edx\r
232                 pop     ecx\r
233                 pop     edx\r
234                 pop     eax\r
235 \r
236                 ret\r
237 \r
238 PUBLIC  mouse_clear_handler_\r
239 \r
240 mouse_clear_handler_:\r
241 \r
242                 push    eax\r
243                 push    ebx\r
244                 push    ecx\r
245                 push    edx\r
246                 push    es\r
247 \r
248                 mov     MyEventHandler, 0\r
249 \r
250                 mov     ecx, 0    ; Event flags\r
251                 mov     edx, MyHandler\r
252                 mov     ax, cs\r
253                 mov     es, ax\r
254                 mov     ax, 0Ch     ; Set User-defined Mouse Event Handler\r
255                 int     33h\r
256 \r
257                 pop     es\r
258                 pop     edx\r
259                 pop     ecx\r
260                 pop     edx\r
261                 pop     eax\r
262 \r
263                 ret\r
264 \r
265 \r
266 PUBLIC  mouse_set_limits_\r
267 \r
268 mouse_set_limits_:\r
269 \r
270                 ; EAX = minx\r
271                 ; EDX = miny\r
272                 ; EBX = maxx\r
273                 ; ECX = maxy\r
274 \r
275                 push    edx     ; Save Vertical stuff\r
276                 push    ecx\r
277 \r
278                 mov     cx, ax\r
279                 mov     dx, bx\r
280                 mov     ax, 7\r
281                 int     33h\r
282 \r
283                 pop     edx\r
284                 pop     ecx\r
285                 mov     ax, 8\r
286                 int     33h\r
287 \r
288                 ret\r
289 \r
290 \r
291 ;extern void mouse_set_pos( short x, short y);\r
292 \r
293 \r
294 PUBLIC  mouse_set_pos_\r
295 \r
296 mouse_set_pos_:\r
297 \r
298                 ; EAX = x\r
299                 ; EDX = y\r
300 \r
301                 push    ecx\r
302 \r
303                 mov     ecx, eax\r
304                 mov     eax, 04h\r
305                 int     33h\r
306                 pop     ecx\r
307 \r
308 \r
309                 ret\r
310 \r
311 \r
312 \r
313 _TEXT   ENDS\r
314 \r
315 \r
316                 END\r