source: trunk/src/win32k/dev32/d32hlp.asm@ 2013

Last change on this file since 2013 was 1535, checked in by bird, 26 years ago

Updated option/argument handling.
Corrected a few bugs.

File size: 6.8 KB
Line 
1; $Id: d32hlp.asm,v 1.3 1999-10-31 23:57:02 bird Exp $
2;
3; d32hlp - 32-bit Device Driver Helper Function.
4;
5; Copyright (c) 1999 knut st. osmundsen
6;
7; Project Odin Software License can be found in LICENSE.TXT
8;
9 .386p
10
11
12;
13; Include files
14;
15 include devsegdf.inc
16 include devhlp.inc
17
18;
19; Exported symbols
20;
21 public D32Hlp_VirtToLin
22 public D32Hlp_VirtToLin2
23 public D32Hlp_VirtToLin3
24 public D32Hlp_GetDOSVar
25 public D32Hlp_Yield
26 public D32Hlp_VMAlloc
27 public D32Hlp_VMFree
28 public D32Hlp_VMSetMem
29 public D32Hlp_VMLock
30 public D32Hlp_VMLock2
31 public D32Hlp_VMUnLock
32
33;
34; extrns
35;
36extrn _Device_Help:dword
37
38;CODE32 segment
39CODE32 segment dword public 'CODE' use32
40 assume cs:CODE32, ds:flat, ss:nothing, es:nothing
41 .386p
42
43;PVOID D32HLPCALL D32Hlp_VirtToLin(ULONG ulPtr16); /* eax */
44D32Hlp_VirtToLin proc near
45 push esi
46
47 movzx esi, ax
48 shr eax, 16
49 mov dl, DevHlp_VirtToLin
50 jmp far ptr CODE16:Thunk16_VirtToLin
51Thunk32_VirtToLin::
52 jnc Finished
53 xor eax, eax
54
55Finished:
56 pop esi
57 ret
58D32Hlp_VirtToLin endp
59
60
61;PVOID D32HLPCALL D32Hlp_VirtToLin2(USHORT usSelector, /* ax */
62; ULONG ulOffset); /* edx */
63D32Hlp_VirtToLin2 proc near
64 push esi
65
66 mov esi, edx
67 mov dl, DevHlp_VirtToLin
68 jmp far ptr CODE16:Thunk16_VirtToLin2
69Thunk32_VirtToLin2::
70 jnc Finished
71 xor eax, eax
72
73Finished:
74 pop esi
75 ret
76D32Hlp_VirtToLin2 endp
77
78
79;D32RET D32HLPCALL D32Hlp_VirtToLin3(USHORT usSelector, /* ax */
80; ULONG ulOffset, /* edx */
81; PPVOID ppvLinAddress); /* ecx */
82D32Hlp_VirtToLin3 proc near
83 push esi
84
85 mov esi, edx
86 mov dl, DevHlp_VirtToLin
87 jmp far ptr CODE16:Thunk16_VirtToLin3
88Thunk32_VirtToLin3::
89 jc Finished
90 mov [ecx], eax
91 xor eax, eax
92
93Finished:
94 pop esi
95 ret
96D32Hlp_VirtToLin3 endp
97
98
99;PVOID D32HLPCALL D32Hlp_GetDOSVar(ULONG ulVarNumber, /* eax */
100; ULONG ulVarMember); /* edx */
101D32Hlp_GetDOSVar proc near
102 push bx
103 mov ecx, edx
104 mov dl, DevHlp_GetDOSVar
105 jmp far ptr CODE16:Thunk16_GetDOSVar
106Thunk32_GetDOSVar::
107 jc Error
108 shl ebx, 16
109 mov bx, ax
110 xchg eax, ebx
111 call D32Hlp_VirtToLin
112 jmp Finished
113
114Error:
115 xor eax, eax
116
117Finished:
118 pop bx
119 ret
120D32Hlp_GetDOSVar endp
121
122
123;VOID D32HLPCALL D32Hlp_Yield(VOID);
124D32Hlp_Yield proc near
125 mov dl, DevHlp_Yield
126 jmp far ptr CODE16:Thunk16_Yield
127Thunk32_Yield::
128 ret
129D32Hlp_Yield endp
130
131
132;PVOID D32HLPCALL D32Hlp_VMAlloc(ULONG flFlags, /* eax */
133; ULONG cbSize, /* edx */
134; ULONG ulPhysAddr);/* ecx */
135D32Hlp_VMAlloc proc near
136 push edi
137
138 mov edi, ecx
139 mov ecx, edx
140
141 mov dl, DevHlp_VMAlloc
142 jmp far ptr CODE16:Thunk16_VMAlloc
143Thunk32_VMAlloc::
144 jnc Finished
145 xor eax, eax
146
147Finished:
148 pop edi
149 ret
150D32Hlp_VMAlloc endp
151
152
153;D32RET D32HLPCALL D32Hlp_VMFree(PVOID pvAddress); /* eax */
154D32Hlp_VMFree proc near
155 mov dl, DevHlp_VMFree
156 jmp far ptr CODE16:Thunk16_VMFree
157Thunk32_VMFree::
158 jc Finished
159 xor eax, eax
160Finished:
161 ret
162D32Hlp_VMFree endp
163
164
165;D32RET D32HLPCALL D32Hlp_VMSetMem(PVOID pvAddress, /* eax */
166; ULONG cbSize, /* edx */
167; ULONG flFlags); /* ecx */
168D32Hlp_VMSetMem proc near
169 push ebx
170
171 mov ebx, eax
172 mov eax, ecx
173 mov ecx, edx
174
175 mov dl, DevHlp_VMSetMem
176 jmp far ptr CODE16:Thunk16_VMSetMem
177Thunk32_VMSetMem::
178
179 pop ebx
180 ret
181D32Hlp_VMSetMem endp
182
183
184;D32RET D32HLPCALL D32Hlp_VMLock(PVOID pvAddress, /* eax (ebp + 08h) */
185; ULONG ulLength, /* edx (ebp + 0Ch)*/
186; ULONG flFlags, /* ecx (ebp + 10h)*/
187; PVOID pvPagelist, /* ebp + 14h */
188; PLOCKHANDLE pLockHandle, /* ebp + 18h */
189; PULONG pulPageListCount); /* ebp + 1Ch */
190D32Hlp_VMLock proc near
191 push ebp
192 mov ebp, esp
193 push esi
194 push edi
195 push ebx
196
197 mov edi, [ebp + 14h]
198 mov esi, [ebp + 18h]
199 mov ebx, eax
200 mov eax, ecx
201 mov ecx, edx
202
203 mov dl, DevHlp_VMLock
204 jmp far ptr CODE16:Thunk16_VMLock
205Thunk32_VMLock::
206 jc Finished
207 mov ebx, [ebp + 1Ch]
208 or ebx, ebx
209 jz Success
210 mov [ebx], eax
211
212Success:
213 xor eax, eax
214
215Finished:
216 pop ebx
217 pop edi
218 pop esi
219 pop ebp
220 ret
221D32Hlp_VMLock endp
222
223
224;D32RET D32HLPCALL D32Hlp_VMLock2(PVOID pvAddress, /* eax (ebp + 08h) */
225; ULONG ulLength, /* edx (ebp + 0Ch)*/
226; ULONG flFlags, /* ecx (ebp + 10h)*/
227; PLOCKHANDLE pLockHandle); /* ebp + 14h */
228D32Hlp_VMLock2 proc near
229 push ebp
230 mov ebp, esp
231 push esi
232 push edi
233 push ebx
234
235 mov edi, 0ffffffffh
236 mov esi, [ebp + 14h]
237 mov ebx, eax
238 mov eax, ecx
239 mov ecx, edx
240
241 mov dl, DevHlp_VMLock
242 jmp far ptr CODE16:Thunk16_VMLock2
243Thunk32_VMLock2::
244 jc Finished
245 xor eax, eax
246
247Finished:
248 pop ebx
249 pop edi
250 pop esi
251 pop ebp
252 ret
253D32Hlp_VMLock2 endp
254
255
256;D32RET D32HLPCALL D32Hlp_VMUnLock(PLOCKHANDLE pLockHandle); /* eax */
257D32Hlp_VMUnLock proc near
258 push esi
259
260 mov esi, eax
261 mov dl, DevHlp_VMUnlock
262 jmp far ptr CODE16:Thunk16_VMUnLock
263Thunk32_VMUnLock::
264 jc Finished
265 xor eax, eax
266
267Finished:
268 pop esi
269 ret
270D32Hlp_VMUnLock endp
271
272CODE32 ends
273
274
275
276
277
278;CODE16 segment
279CODE16 segment word public 'CODE' use16
280 assume cs:CODE16, ds:FLAT
281
282Thunk16_VirtToLin:
283 call [_Device_Help]
284 jmp far ptr FLAT:Thunk32_VirtToLin
285
286Thunk16_VirtToLin2:
287 call [_Device_Help]
288 jmp far ptr FLAT:Thunk32_VirtToLin2
289
290Thunk16_VirtToLin3:
291 call [_Device_Help]
292 jmp far ptr FLAT:Thunk32_VirtToLin3
293
294Thunk16_GetDOSVar:
295 call [_Device_Help]
296 jmp far ptr FLAT:Thunk32_GetDOSVar
297
298Thunk16_Yield:
299 call [_Device_Help]
300 jmp far ptr FLAT:Thunk32_Yield
301
302Thunk16_VMAlloc:
303 call [_Device_Help]
304 jmp far ptr FLAT:Thunk32_VMAlloc
305
306Thunk16_VMFree:
307 call [_Device_Help]
308 jmp far ptr FLAT:Thunk32_VMFree
309
310Thunk16_VMLock:
311 call [_Device_Help]
312 jmp far ptr FLAT:Thunk32_VMLock
313
314Thunk16_VMLock2:
315 call [_Device_Help]
316 jmp far ptr FLAT:Thunk32_VMLock2
317
318Thunk16_VMUnLock:
319 call [_Device_Help]
320 jmp far ptr FLAT:Thunk32_VMUnLock
321
322Thunk16_VMSetMem:
323 call [_Device_Help]
324 jmp far ptr FLAT:Thunk32_VMSetMem
325
326CODE16 ends
327end
Note: See TracBrowser for help on using the repository browser.