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

Last change on this file since 5087 was 4164, checked in by bird, 25 years ago

Merged in the Grace branch. New Win32k!

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