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

Last change on this file since 1504 was 1467, checked in by bird, 26 years ago

Corrections to make win32k work.
(And now it does work, at least at my test machine...)

File size: 6.8 KB
Line 
1; $Id: d32hlp.asm,v 1.2 1999-10-27 02:02:54 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
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
104 mov cx, ax
105 mov al, dl
106
107 mov dl, DevHlp_GetDOSVar
108 jmp far ptr CODE16:Thunk16_GetDOSVar
109Thunk32_GetDOSVar::
110 jc Error
111 shl ebx, 16
112 mov bx, ax
113 xchg eax, ebx
114 call D32Hlp_VirtToLin
115 jmp Finished
116
117Error:
118 mov ax, 87
119
120Finished:
121 pop bx
122 ret
123D32Hlp_GetDOSVar endp
124
125
126;VOID D32HLPCALL D32Hlp_Yield(VOID);
127D32Hlp_Yield proc near
128 mov dl, DevHlp_Yield
129 jmp far ptr CODE16:Thunk16_Yield
130Thunk32_Yield::
131 ret
132D32Hlp_Yield endp
133
134
135;PVOID D32HLPCALL D32Hlp_VMAlloc(ULONG flFlags, /* eax */
136; ULONG cbSize, /* edx */
137; ULONG ulPhysAddr);/* ecx */
138D32Hlp_VMAlloc proc near
139 push edi
140
141 mov edi, ecx
142 mov ecx, edx
143
144 mov dl, DevHlp_VMAlloc
145 jmp far ptr CODE16:Thunk16_VMAlloc
146Thunk32_VMAlloc::
147 jnc Finished
148 xor eax, eax
149
150Finished:
151 pop edi
152 ret
153D32Hlp_VMAlloc endp
154
155
156;D32RET D32HLPCALL D32Hlp_VMFree(PVOID pvAddress); /* eax */
157D32Hlp_VMFree proc near
158 mov dl, DevHlp_VMFree
159 jmp far ptr CODE16:Thunk16_VMFree
160Thunk32_VMFree::
161 jc Finished
162 xor eax, eax
163Finished:
164 ret
165D32Hlp_VMFree endp
166
167
168;D32RET D32HLPCALL D32Hlp_VMSetMem(PVOID pvAddress, /* eax */
169; ULONG cbSize, /* edx */
170; ULONG flFlags); /* ecx */
171D32Hlp_VMSetMem proc near
172 push ebx
173
174 mov ebx, eax
175 mov eax, ecx
176 mov ecx, edx
177
178 mov dl, DevHlp_VMSetMem
179 jmp far ptr CODE16:Thunk16_VMSetMem
180Thunk32_VMSetMem::
181
182 pop ebx
183 ret
184D32Hlp_VMSetMem endp
185
186
187;D32RET D32HLPCALL D32Hlp_VMLock(PVOID pvAddress, /* eax (ebp + 08h) */
188; ULONG ulLength, /* edx (ebp + 0Ch)*/
189; ULONG flFlags, /* ecx (ebp + 10h)*/
190; PVOID pvPagelist, /* ebp + 14h */
191; PLOCKHANDLE pLockHandle, /* ebp + 18h */
192; PULONG pulPageListCount); /* ebp + 1Ch */
193D32Hlp_VMLock proc near
194 push ebp
195 mov ebp, esp
196 push esi
197 push edi
198 push ebx
199
200 mov edi, [ebp + 14h]
201 mov esi, [ebp + 18h]
202 mov ebx, eax
203 mov eax, ecx
204 mov ecx, edx
205
206 mov dl, DevHlp_VMLock
207 jmp far ptr CODE16:Thunk16_VMLock
208Thunk32_VMLock::
209 jc Finished
210 mov ebx, [ebp + 1Ch]
211 or ebx, ebx
212 jz Success
213 mov [ebx], eax
214
215Success:
216 xor eax, eax
217
218Finished:
219 pop ebx
220 pop edi
221 pop esi
222 pop ebp
223 ret
224D32Hlp_VMLock endp
225
226
227;D32RET D32HLPCALL D32Hlp_VMLock2(PVOID pvAddress, /* eax (ebp + 08h) */
228; ULONG ulLength, /* edx (ebp + 0Ch)*/
229; ULONG flFlags, /* ecx (ebp + 10h)*/
230; PLOCKHANDLE pLockHandle); /* ebp + 14h */
231D32Hlp_VMLock2 proc near
232 push ebp
233 mov ebp, esp
234 push esi
235 push edi
236 push ebx
237
238 mov edi, 0ffffffffh
239 mov esi, [ebp + 14h]
240 mov ebx, eax
241 mov eax, ecx
242 mov ecx, edx
243
244 mov dl, DevHlp_VMLock
245 jmp far ptr CODE16:Thunk16_VMLock2
246Thunk32_VMLock2::
247 jc Finished
248 xor eax, eax
249
250Finished:
251 pop ebx
252 pop edi
253 pop esi
254 pop ebp
255 ret
256D32Hlp_VMLock2 endp
257
258
259;D32RET D32HLPCALL D32Hlp_VMUnLock(PLOCKHANDLE pLockHandle); /* eax */
260D32Hlp_VMUnLock proc near
261 push esi
262
263 mov esi, eax
264 mov dl, DevHlp_VMUnlock
265 jmp far ptr CODE16:Thunk16_VMUnLock
266Thunk32_VMUnLock::
267 jc Finished
268 xor eax, eax
269
270Finished:
271 pop esi
272 ret
273D32Hlp_VMUnLock endp
274
275CODE32 ends
276
277
278
279
280
281;CODE16 segment
282CODE16 segment word public 'CODE' use16
283 assume cs:CODE16, ds:FLAT
284
285Thunk16_VirtToLin:
286 call [_Device_Help]
287 jmp far ptr FLAT:Thunk32_VirtToLin
288
289Thunk16_VirtToLin2:
290 call [_Device_Help]
291 jmp far ptr FLAT:Thunk32_VirtToLin2
292
293Thunk16_VirtToLin3:
294 call [_Device_Help]
295 jmp far ptr FLAT:Thunk32_VirtToLin3
296
297Thunk16_GetDOSVar:
298 call [_Device_Help]
299 jmp far ptr FLAT:Thunk32_GetDOSVar
300
301Thunk16_Yield:
302 call [_Device_Help]
303 jmp far ptr FLAT:Thunk32_Yield
304
305Thunk16_VMAlloc:
306 call [_Device_Help]
307 jmp far ptr FLAT:Thunk32_VMAlloc
308
309Thunk16_VMFree:
310 call [_Device_Help]
311 jmp far ptr FLAT:Thunk32_VMFree
312
313Thunk16_VMLock:
314 call [_Device_Help]
315 jmp far ptr FLAT:Thunk32_VMLock
316
317Thunk16_VMLock2:
318 call [_Device_Help]
319 jmp far ptr FLAT:Thunk32_VMLock2
320
321Thunk16_VMUnLock:
322 call [_Device_Help]
323 jmp far ptr FLAT:Thunk32_VMUnLock
324
325Thunk16_VMSetMem:
326 call [_Device_Help]
327 jmp far ptr FLAT:Thunk32_VMSetMem
328
329CODE16 ends
330end
Note: See TracBrowser for help on using the repository browser.