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 + -
显示快捷键?