source: GPL/drv32/devhlp.asm@ 18

Last change on this file since 18 was 18, checked in by vladest, 20 years ago

initial import

File size: 4.2 KB
Line 
1; $Id: devhlp.asm,v 1.1.1.1 2003/07/02 13:56:56 eleph Exp $
2;*
3;* 32bit DevHelp implementations. Usually thunk down to the well known
4;* 16bit OS/2 DevHelp calls
5;*
6;* (C) 2000-2002 InnoTek Systemberatung GmbH
7;* (C) 2000-2001 Sander van Leeuwen (sandervl@xs4all.nl)
8;*
9;* This program is free software; you can redistribute it and/or
10;* modify it under the terms of the GNU General Public License as
11;* published by the Free Software Foundation; either version 2 of
12;* the License, or (at your option) any later version.
13;*
14;* This program is distributed in the hope that it will be useful,
15;* but WITHOUT ANY WARRANTY; without even the implied warranty of
16;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17;* GNU General Public License for more details.
18;*
19;* You should have received a copy of the GNU General Public
20;* License along with this program; if not, write to the Free
21;* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
22;* USA.
23;*
24
25 .386p
26
27 include bseerr.inc
28 include devhlp.inc
29 include segments.inc
30
31DosTable2 struc
32 d2_ErrMap24 dd ?
33 d2_MsgMap24 dd ?
34 d2_Err_Table_24 dd ?
35 d2_CDSAddr dd ?
36 d2_GDT_RDR1 dd ?
37 d2_InterruptLevel dd ?
38 d2__cInDos dd ?
39 d2_zero_1 dd ?
40 d2_zero_2 dd ?
41 d2_FlatCS dd ?
42 d2_FlatDS dd ?
43 d2__TKSSBase dd ?
44 d2_intSwitchStack dd ?
45 d2_privateStack dd ?
46 d2_PhysDiskTablePtr dd ?
47 d2_forceEMHandler dd ?
48 d2_ReserveVM dd ?
49 d2_pgpPageDir dd ?
50 d2_unknown dd ?
51DosTable2 ends
52
53DATA32 segment
54 public DevHelp32
55 public intSwitchStack
56
57DevHelp32 dd 0
58intSwitchStack dd 0
59
60 public _TKSSBase
61_TKSSBase dd 0
62
63DATA32 ends
64
65
66CODE32 segment
67ASSUME CS:FLAT, DS:FLAT, ES:FLAT
68
69 public iodelay32_
70
71 extrn DevHlp : near
72 extrn DOSIODELAYCNT : ABS
73
74 ALIGN 4
75
76 public GetTKSSBase
77
78GetTKSSBase proc near
79 push ebp
80 mov ebp, esp
81 push es
82 push ebx
83 push ecx
84 push edx
85
86 ;
87 ; Gets the TKSSBase pointer from DosTable. TKSSBase is used by
88 ; __StackToFlat() to convert a stack based address to a FLAT address
89 ; without the overhead of DevHlp_VirtToLin
90 ;
91 ; DosTable is obtained through GetDOSVar with undocumented index 9
92 ; The layout is :
93 ; byte count of following dword (n)
94 ; dword 1 -+
95 ; . |
96 ; . | this is DosTable1
97 ; . |
98 ; dword n -+
99 ; byte count of following dword (p)
100 ; dword 1 -+
101 ; . |
102 ; . | this is DosTable2
103 ; . |
104 ; dword p -+
105 ;
106 ; Flat CS is dword number 10 in DosTable2
107 ; Flat DS is dword number 11 in DosTable2
108 ; TKSSBase is dword number 12 in DosTable2
109 ;
110 mov eax, 9 ; undocumented DosVar : DosTable pointer
111 xor ecx, ecx
112 mov edx, DevHlp_GetDOSVar
113 call DevHlp
114 jc short GetTKSSBase_Err
115 mov es, ax ; es:bx points to DosTable
116 movzx ebx, bx
117 movzx ecx, byte ptr es:[ebx] ; count of dword in DosTable1
118 mov eax, es:[ebx + 4 * ecx + 2].d2__TKSSBase
119 mov _TKSSBase, eax
120
121 mov eax, es:[ebx + 4 * ecx + 2].d2_intSwitchStack
122 mov intSwitchStack, eax
123
124 xor eax, eax
125GetTKSSBase_Err:
126 pop edx
127 pop ecx
128 pop ebx
129 pop es
130 leave
131 ret
132GetTKSSBase endp
133
134 ALIGN 4
135
136iodelay32_ proc near
137 mov eax, DOSIODELAYCNT
138 align 4
139@@: dec eax
140 jnz @b
141 loop iodelay32_
142 ret
143iodelay32_ endp
144
145CODE32 ends
146
147 end
Note: See TracBrowser for help on using the repository browser.