menu
[eradicate] / src / dos / mouse.asm
1 ; vi:set filetype=nasm:
2 ; foo_ are watcom functions, _foo are djgpp functions
3
4 QUERY equ 0
5 SHOW equ 1
6 HIDE equ 2
7 READ equ 3
8 WRITE equ 4
9 PIXRATE equ 15
10 XLIM equ 7
11 YLIM equ 8
12
13 PUSHA_EAX_OFFS equ 28
14 PUSHA_ECX_OFFS equ 20
15 PUSHA_EDX_OFFS equ 16
16
17         section .text
18         bits 32
19
20 ; int have_mouse(void)
21         global have_mouse_
22         global _have_mouse
23 have_mouse_:
24 _have_mouse:
25         pusha
26         mov ax, QUERY
27         int 0x33
28         and eax, 0xffff
29         mov [esp + PUSHA_EAX_OFFS], eax
30         popa
31         ret
32
33 ; void show_mouse(int show)
34         global show_mouse_
35 show_mouse_:
36         pusha
37         test ax, ax
38         mov ax, HIDE
39         jz .skip
40         mov ax, SHOW
41 .skip:  int 0x33
42         popa
43         ret
44
45         global _show_mouse
46 _show_mouse:
47         push ebp
48         mov ebp, esp
49         push ebx
50         push esi
51         push edi
52         mov ax, [ebp + 8]
53         test ax, ax
54         mov ax, HIDE
55         jz .skip
56         mov ax, SHOW
57 .skip:  int 0x33
58         pop edi
59         pop esi
60         pop ebx
61         pop ebp
62         ret
63
64 ; int read_mouse(int *xp, int *yp)
65         global read_mouse_
66 read_mouse_:
67         pusha
68         mov esi, eax    ; xp
69         mov edi, edx    ; yp
70         mov ax, READ
71         int 0x33
72         xor eax, eax
73         and ecx, 0xffff
74         and edx, 0xffff
75         mov ax, bx
76         mov [esp + PUSHA_EAX_OFFS], eax
77         mov [esi], ecx
78         mov [edi], edx
79         popa
80         ret
81
82         global _read_mouse
83 _read_mouse:
84         push ebp
85         mov ebp, esp
86         push ebx
87         push esi
88         push edi
89         mov ax, READ
90         int 0x33
91         xor eax, eax
92         mov ax, bx
93         and ecx, 0xffff
94         mov ebx, [ebp + 8]
95         mov [ebx], ecx
96         and edx, 0xffff
97         mov ebx, [ebp + 12]
98         mov [ebx], edx
99         pop edi
100         pop esi
101         pop ebx
102         pop ebp
103         ret
104
105 ; void set_mouse(int x, int y)
106         global set_mouse_
107 set_mouse_:
108         pusha
109         mov cx, ax
110         mov ax, WRITE
111         int 0x33
112         popa
113         ret
114         
115         global _set_mouse
116 _set_mouse:
117         push ebp
118         mov ebp, esp
119         push ebx
120         push esi
121         push edi
122         mov ax, WRITE
123         mov cx, [ebp + 8]
124         mov dx, [ebp + 12]
125         int 0x33
126         pop edi
127         pop esi
128         pop ebx
129         pop ebp
130         ret
131
132 ; void set_mouse_limits(int xmin, int ymin, int xmax, int ymax)
133         global set_mouse_limits_
134 set_mouse_limits_:
135         pusha
136         mov cx, ax
137         mov dx, bx
138         mov ax, XLIM
139         int 0x33
140         mov ax, YLIM
141         mov cx, [esp + PUSHA_EDX_OFFS]
142         mov dx, [esp + PUSHA_ECX_OFFS]
143         int 0x33
144         popa
145         ret
146
147         global _set_mouse_limits
148 _set_mouse_limits:
149         push ebp
150         mov ebp, esp
151         push ebx
152         push esi
153         push edi
154         mov ax, XLIM
155         mov cx, [ebp + 8]
156         mov dx, [ebp + 16]
157         int 0x33
158         mov ax, YLIM
159         mov cx, [ebp + 12]
160         mov dx, [ebp + 20]
161         int 0x33
162         pop edi
163         pop esi
164         pop ebx
165         pop ebp
166         ret
167
168 ; void set_mouse_rate(int xrate, int yrate)
169         global set_mouse_rate_
170 set_mouse_rate_:
171         pusha
172         mov cx, ax
173         mov ax, PIXRATE
174         int 0x33
175         popa
176         ret
177
178         global _set_mouse_rate
179 _set_mouse_rate:
180         push ebp
181         mov ebp, esp
182         push ebx
183         push esi
184         push edi
185         mov ax, PIXRATE
186         mov cx, [esp + 4]
187         mov dx, [esp + 8]
188         int 0x33
189         pop edi
190         pop esi
191         pop ebx
192         pop ebp
193         ret