📄 _pmos2.asm
字号:
;****************************************************************************;*;* SciTech OS Portability Manager Library;*;* ========================================================================;*;* The contents of this file are subject to the SciTech MGL Public;* License Version 1.0 (the "License"); you may not use this file;* except in compliance with the License. You may obtain a copy of;* the License at http://www.scitechsoft.com/mgl-license.txt;*;* Software distributed under the License is distributed on an;* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or;* implied. See the License for the specific language governing;* rights and limitations under the License.;*;* The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.;*;* The Initial Developer of the Original Code is SciTech Software, Inc.;* All Rights Reserved.;*;* ========================================================================;*;* Language: 80386 Assembler, TASM 4.0 or NASM;* Environment: OS/2 32 bit protected mode;*;* Description: Low level assembly support for the PM library specific;* to OS/2;*;**************************************************************************** IDEALinclude "scitech.mac" ; Memory model macrosheader _pmos2 ; Set up memory modelbegdataseg _pmos2 cglobal _PM_ioentry cglobal _PM_gdt_PM_ioentry dd 0 ; Offset to call gate_PM_gdt dw 0 ; Selector to call gateenddataseg _pmos2begcodeseg _pmos2 ; Start of code segment;----------------------------------------------------------------------------; int PM_setIOPL(int iopl);----------------------------------------------------------------------------; Change the IOPL level for the 32-bit task. Returns the previous level; so it can be restored for the task correctly.;----------------------------------------------------------------------------cprocstart PM_setIOPL ARG iopl:UINT enter_c pushfd ; Save the old EFLAGS for later mov ecx,[iopl] ; ECX := IOPL level xor ebx,ebx ; Change IOPL level function code (0)ifdef USE_NASM call far dword [_PM_ioentry]else call [FWORD _PM_ioentry]endif pop eax and eax,0011000000000000b shr eax,12 leave_c retcprocend;----------------------------------------------------------------------------; void _PM_setGDTSelLimit(ushort selector, ulong limit);;----------------------------------------------------------------------------; Change the GDT selector limit to given value. Used to change selector; limits to address the entire system address space.;----------------------------------------------------------------------------cprocstart _PM_setGDTSelLimit ARG selector:USHORT, limit:UINT enter_c sub esp,20 ; Make room for selector data on stack mov ecx,esp ; ECX := selector data structure mov bx,[selector] ; Fill out the data structure and bx,0FFF8h ; Kick out the LDT/GDT and DPL bits mov [WORD ecx],bx mov ebx,[limit] mov [DWORD ecx+4],ebx mov ebx,5 ; Set GDT selector limit function code ifdef USE_NASM call far dword [_PM_ioentry]else call [FWORD _PM_ioentry]endif add esp,20 leave_c retcprocend ;----------------------------------------------------------------------------; uchar _MTRR_getCx86(uchar reg);;----------------------------------------------------------------------------; Read a Cyrix CPU indexed register;----------------------------------------------------------------------------cprocstart _MTRR_getCx86 ARG reg:UCHAR enter_c mov al,[reg] out 22h,al in al,23h leave_c retcprocend;----------------------------------------------------------------------------; uchar _MTRR_setCx86(uchar reg,uchar val);;----------------------------------------------------------------------------; Write a Cyrix CPU indexed register;----------------------------------------------------------------------------cprocstart _MTRR_setCx86 ARG reg:UCHAR, val:UCHAR enter_c mov al,[reg] out 22h,al mov al,[val] out 23h,al leave_c retcprocend;----------------------------------------------------------------------------; ulong _MTRR_disableInt(void);;----------------------------------------------------------------------------; Return processor interrupt status and disable interrupts.;----------------------------------------------------------------------------cprocstart _MTRR_disableInt; Do nothing! retcprocend;----------------------------------------------------------------------------; void _MTRR_restoreInt(ulong ps);;----------------------------------------------------------------------------; Restore processor interrupt status.;----------------------------------------------------------------------------cprocstart _MTRR_restoreInt; Do nothing! retcprocend;----------------------------------------------------------------------------; void DebugInt(void);----------------------------------------------------------------------------cprocstart DebugInt int 3 retcprocendendcodeseg _pmos2 END ; End of module
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -