1 ;****************************************************************************
3 ;* SciTech OS Portability Manager Library
5 ;* ========================================================================
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
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.
17 ;* The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.
19 ;* The Initial Developer of the Original Code is SciTech Software, Inc.
20 ;* All Rights Reserved.
22 ;* ========================================================================
24 ;* Language: 80386 Assembler, TASM 4.0 or NASM
25 ;* Environment: OS/2 32 bit protected mode
27 ;* Description: Low level assembly support for the PM library specific
30 ;****************************************************************************
34 include "scitech.mac" ; Memory model macros
36 header _pmos2 ; Set up memory model
42 _PM_ioentry dd 0 ; Offset to call gate
43 _PM_gdt dw 0 ; Selector to call gate
47 begcodeseg _pmos2 ; Start of code segment
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 ;----------------------------------------------------------------------------
60 pushfd ; Save the old EFLAGS for later
61 mov ecx,[iopl] ; ECX := IOPL level
62 xor ebx,ebx ; Change IOPL level function code (0)
64 call far dword [_PM_ioentry]
66 call [FWORD _PM_ioentry]
69 and eax,0011000000000000b
76 ;----------------------------------------------------------------------------
77 ; void _PM_setGDTSelLimit(ushort selector, ulong limit);
78 ;----------------------------------------------------------------------------
79 ; Change the GDT selector limit to given value. Used to change selector
80 ; limits to address the entire system address space.
81 ;----------------------------------------------------------------------------
82 cprocstart _PM_setGDTSelLimit
84 ARG selector:USHORT, limit:UINT
87 sub esp,20 ; Make room for selector data on stack
88 mov ecx,esp ; ECX := selector data structure
89 mov bx,[selector] ; Fill out the data structure
90 and bx,0FFF8h ; Kick out the LDT/GDT and DPL bits
94 mov ebx,5 ; Set GDT selector limit function code
96 call far dword [_PM_ioentry]
98 call [FWORD _PM_ioentry]
106 ;----------------------------------------------------------------------------
107 ; uchar _MTRR_getCx86(uchar reg);
108 ;----------------------------------------------------------------------------
109 ; Read a Cyrix CPU indexed register
110 ;----------------------------------------------------------------------------
111 cprocstart _MTRR_getCx86
124 ;----------------------------------------------------------------------------
125 ; uchar _MTRR_setCx86(uchar reg,uchar val);
126 ;----------------------------------------------------------------------------
127 ; Write a Cyrix CPU indexed register
128 ;----------------------------------------------------------------------------
129 cprocstart _MTRR_setCx86
131 ARG reg:UCHAR, val:UCHAR
143 ;----------------------------------------------------------------------------
144 ; ulong _MTRR_disableInt(void);
145 ;----------------------------------------------------------------------------
146 ; Return processor interrupt status and disable interrupts.
147 ;----------------------------------------------------------------------------
148 cprocstart _MTRR_disableInt
155 ;----------------------------------------------------------------------------
156 ; void _MTRR_restoreInt(ulong ps);
157 ;----------------------------------------------------------------------------
158 ; Restore processor interrupt status.
159 ;----------------------------------------------------------------------------
160 cprocstart _MTRR_restoreInt
167 ;----------------------------------------------------------------------------
168 ; void DebugInt(void)
169 ;----------------------------------------------------------------------------