dosinite.asm
来自「开放源码的编译器open watcom 1.6.0版的源代码」· 汇编 代码 · 共 555 行 · 第 1/2 页
ASM
555 行
; need to resolve this extension business
;_OS=_PLDT
; fixme:
; This file contains translations that should be made in the asm source files.
; They are being done here as a stopgap measure.
;
ifdef __PENPOINT__
_PENPOINT=1
endif
ifdef __OS2__
ifdef __386__
_OS220=1
endif
endif
ifdef __NT__
_NT=1
endif
ifdef __NETWARE__
__NET386__=1
endif
ifdef __REGISTER__
STACK=0
endif
ifdef __STACK__
STACK=1
__3S__=1
endif
;
; date by reason
; ==== == ======
; call to set the cr0 register
; split the emu libs out of mathlib
;include struct3.inc
;include struct.inc
; Structured macros for MASM.
__label = 0
__depth = 0
__inner_loop = 0
_guess macro name
__depth = __depth + 1
__label = __label + 1
_set __astk,%__depth,__label,<>
__label = __label + 1
_set __estk,%__depth,__label,<>
ifnb <name>
name = __label
endif
endm
_quif macro cc,name
ifnb <name>
_set __elbl,,name,<>
_j cc,_l,%__elbl
else
_set __albl,,__astk,%__depth
_j cc,_l,%__albl
endif
endm
_quit macro name
_quif ,name
endm
_admit macro
_set __albl,,__astk,%__depth
__label = __label + 1
_set __astk,%__depth,__label,<>
_set __elbl,,__estk,%__depth
_j ,_l,%__elbl
_label _l,%__albl
endm
_endguess macro
_set __albl,,__astk,%__depth
_label _l,%__albl
_set __elbl,,__estk,%__depth
_label _l,%__elbl
__depth = __depth - 1
endm
_loop macro name
_guess name
_set __albl,,__astk,%__depth
_label _m,%__albl
_set __elbl,,__estk,%__depth
_label _m,%__elbl
_set __llbl,%__depth,%__inner_loop,<>
_set __inner_loop,,%__depth,<>
endm
_loopif macro cc,name
ifnb <name>
_set __elbl,,name,<>
_j cc,_m,%__elbl
else
_set __albl,,__astk,%__inner_loop
_j cc,_m,%__albl
endif
endm
_until macro cc
_set __albl,,__astk,%__depth
_jn cc,_m,%__albl
_set __inner_loop,,__llbl,%__depth
_endguess
endm
_endloop macro
_set __albl,,__astk,%__depth
_j ,_m,%__albl
_set __inner_loop,,__llbl,%__depth
_endguess
endm
_if macro cc
_guess
_set __albl,,__astk,%__depth
_jn cc,_l,%__albl
endm
_else macro
_admit
endm
_endif macro
_endguess
endm
_set macro base1,ext1,base2,ext2
base1&ext1 = base2&ext2
endm
_label macro base,ext
base&ext:
endm
_j macro cc,base,ext
j&cc base&ext
endm
_jn macro cc,base,ext
jn&cc base&ext
endm
jnna macro label
ja label
endm
jnnae macro label
jae label
endm
jnnb macro label
jb label
endm
jnnbe macro label
jbe label
endm
jnnc macro label
jc label
endm
jnne macro label
je label
endm
jnng macro label
jg label
endm
jnnge macro label
jge label
endm
jnnl macro label
jl label
endm
jnnle macro label
jle label
endm
jnno macro label
jo label
endm
jnnp macro label
jp label
endm
jnns macro label
js label
endm
jnnz macro label
jz label
endm
jnpe macro label
jpo label
endm
jnpo macro label
jpe label
endm
j macro label
jmp short label
endm
jn macro label
nop
endm
_shl macro reg,count
add reg,reg
endm
_rcl macro reg,count
adc reg,reg
endm
;include extender.inc
;
; 386 DOS Extender Equates for __Extender variable
;
X_ERGO equ 0
X_RATIONAL equ 1
X_PHARLAP_V2 equ 2
X_PHARLAP_V3 equ 3
X_PHARLAP_V4 equ 4
X_PHARLAP_V5 equ 5
X_INTEL equ 9
.386p
.387
name dosinite
extrn __int7 : near
extrn __int7_pl3 : near
extrn __hook387 : near
extrn __unhook387 : near
_DATA segment dword public 'DATA'
extrn __8087 : byte
extrn __8087cw : word
extrn __Extender : byte
extrn __X32VM : byte
extrn __D16Infoseg : word
extrn __x386_zero_base_selector : word
extrn __GDAptr : dword
sysregs dd 14 dup(0) ; only need 12, but just in case
oldidt dd 0,0
old7off dd 0
old7seg dw 0
msw dw 0
hooked db 0
_DATA ends
DGROUP group _DATA
_TEXT segment word public 'CODE'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; void _sys_init_387_emulator( int )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
assume cs:_TEXT,ds:DGROUP
MP equ 02h
EM equ 04h
ET equ 10h
GDA_SERV equ 48 ; offset into GDA to extender service routine addr
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?