]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - board/MAI/bios_emulator/scitech/src/pm/win32/_pmwin32.asm
* Patch by Thomas Frieden, 13 Nov 2002:
[karo-tx-uboot.git] / board / MAI / bios_emulator / scitech / src / pm / win32 / _pmwin32.asm
1 ;****************************************************************************
2 ;*
3 ;*                  SciTech OS Portability Manager Library
4 ;*
5 ;*  ========================================================================
6 ;*
7 ;*    The contents of this file are subject to the SciTech MGL Public
8 ;*    License Version 1.0 (the "License"); you may not use this file
9 ;*    except in compliance with the License. You may obtain a copy of
10 ;*    the License at http://www.scitechsoft.com/mgl-license.txt
11 ;*
12 ;*    Software distributed under the License is distributed on an
13 ;*    "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
14 ;*    implied. See the License for the specific language governing
15 ;*    rights and limitations under the License.
16 ;*
17 ;*    The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.
18 ;*
19 ;*    The Initial Developer of the Original Code is SciTech Software, Inc.
20 ;*    All Rights Reserved.
21 ;*
22 ;*  ========================================================================
23 ;*
24 ;* Language:    80386 Assembler, TASM 4.0 or NASM
25 ;* Environment: Win32
26 ;*
27 ;* Description: Low level assembly support for the PM library specific
28 ;*              to Windows.
29 ;*
30 ;****************************************************************************
31
32         IDEAL
33
34 include "scitech.mac"               ; Memory model macros
35
36 header      _pmwin32                    ; Set up memory model
37
38 begdataseg  _pmwin32
39
40         cglobal _PM_ioentry
41         cglobal _PM_gdt
42 _PM_ioentry     dd  0               ; Offset to call gate
43 _PM_gdt         dw  0               ; Selector to call gate
44
45 enddataseg  _pmwin32
46
47 begcodeseg  _pmwin32                    ; Start of code segment
48
49 ;----------------------------------------------------------------------------
50 ; int PM_setIOPL(int iopl)
51 ;----------------------------------------------------------------------------
52 ; Change the IOPL level for the 32-bit task. Returns the previous level
53 ; so it can be restored for the task correctly.
54 ;----------------------------------------------------------------------------
55 cprocstart  _PM_setIOPLViaCallGate
56
57         ARG     iopl:UINT
58
59         enter_c
60         pushfd                      ; Save the old EFLAGS for later
61         mov     ecx,[iopl]          ; ECX := IOPL level
62         xor     ebx,ebx             ; Change IOPL level function code
63 ifdef   USE_NASM
64         call far dword [_PM_ioentry]
65 else
66         call    [FWORD _PM_ioentry]
67 endif
68         pop     eax
69         and     eax,0011000000000000b
70         shr     eax,12
71         leave_c
72         ret
73
74 cprocend
75
76 endcodeseg  _pmwin32
77
78         END                         ; End of module