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

Last change on this file since 1330 was 847, checked in by bird, 26 years ago

Initial checkin of Win32k. (not tested & pe2lx not up-to-date!)

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