home *** CD-ROM | disk | FTP | other *** search
- ; emuVars.asi last modified :- 13 Jul 88
-
- ; Turbo-C Run Time Library version 2.0
-
- ; Copyright (c) 1986,87,88 by Borland International Inc.
- ; All Rights Reserved.
-
- ; This file is designed to be included both by the start-up
- ; module (C0.asm, for TC) and by the emulator. The data is
- ; actually allocated in startup, and externally referenced
- ; from the emulator.
-
- ; 4/15/88 ah:
- ; Modified for Turbo Pascal using _Pascal_ conditional.
- ; 7/13/88 rss:
- ; Data initialization removed, moved to emualor FINIT code.
- ; Added Safety Stamp so debugger can detect emulator.
-
- IFNDEF _Pascal_ ; if Turbo C version
-
- IFNDEF _InsideEmu87_
- PUBLIC emws_limitSP, emws_initialSP,
- PUBLIC emws_saveVector,emws_nmiVector
- PUBLIC emws_status, emws_control, emws_TOS, emws_adjust
- PUBLIC emws_fixSeg, emws_BPsafe
- PUBLIC emws_stamp, emws_version
-
- IF _Strict87_
- PUBLIC emws_instrnPtr, emws_dataPtr, emws_instruction
- ENDIF
- ENDIF
-
- ; The Use of Interrupt Vectors
-
- ; There are 11 interrupt vectors. The first 8 map onto the 8 floating
- ; point instruction patterns:
-
- ; {WAIT ESC n } --> INT (34h + n), where n is in (0..7)
-
- ; No segment prefixes may apply to these patterns.
-
- ; The ninth interrupt provides instructions with segment prefixes:
-
- ; {WAIT ES: ESC n } --> INT (3Ch), byte (C0h + n)
- ; {WAIT CS: ESC n } --> INT (3Ch), byte (80h + n)
- ; {WAIT SS: ESC n } --> INT (3Ch), byte (40h + n)
- ; {WAIT DS: ESC n } --> INT (3Ch), byte (00h + n)
-
-
- ; The tenth interrupt corresponds to the sequence NOP, FWAIT, and
- ; is a no-op for emulation purposes.
-
- ; The eleventh interrupt provides Borland-defined shortcuts.
-
-
-
- ; Data space is actually allocated in the stack segment by C0.asm,
- ; the start-up module, and accessed by the emulator via externs.
- ; It is initialized during the first emulated FINIT instruction.
-
- IFNDEF _InsideEmu87_ ; if we are building C0.obj
-
- ; Allocate a set of 8 iNDP registers, plus extras for workspace
-
- emws_limitSP label word
-
- db (16 * 12) DUP (?)
-
- emws_initialSP label word
-
- ; Append a spare for underflow situations.
-
- dw 6 dup (?)
-
-
- emws_saveVector dd ? ; prior contents of NMI vector
- emws_nmiVector dd ? ; PC/AT error vector for 80287 exceptions
-
- emws_status dw ? ; result of comparisons
- emws_control dw ? ; processing options and exceptions.
-
- emws_TOS dw ? ; current level of e87 register stack
- emws_adjust dw ? ; adjusts TOS at exit
-
- emws_fixSeg dw ? ; selector implied by segFix
- emws_BPsafe dw ? ; keep BP --> userRegs here for safety.
- emws_stamp dd ? ; after initialization, 'emu', 87h
- emws_version dw ? ; 1 for TC2, TP5; 2 for TB2
-
- IF _Strict87_
- emws_instrnPtr dd ? ; used with error recovery
- emws_dataPtr dd ? ; --------- " ------------
- emws_instruction dw ? ; bytes swapped, used for error recovery
- ENDIF
-
- ELSE ; _InsideEmu87_, we are building the emulator
-
- EXTRN emws_limitSP : WORD
- EXTRN emws_initialSP : WORD
- EXTRN emws_saveVector : DWORD
- EXTRN emws_nmiVector : DWORD
- EXTRN emws_status : WORD
- EXTRN emws_control : WORD
- EXTRN emws_TOS : WORD
- EXTRN emws_adjust : WORD
- EXTRN emws_fixSeg : WORD
- EXTRN emws_BPsafe : WORD
- EXTRN emws_stamp : DWORD
- EXTRN emws_version : WORD
-
- IF _Strict87_
- EXTRN emws_instrnPtr : DWORD
- EXTRN emws_dataPtr : DWORD
- EXTRN emws_instruction: DWORD
- ENDIF
-
- EmuAssume@ MACRO aSeg
- ASSUME aSeg : SEG emws_TOS
- ENDM
- EmuNothing@ MACRO aSeg
- ASSUME aSeg : NOTHING
- ENDM
- ENDIF
-
- ELSE ; _Pascal_, Turbo Pascal version
-
- ; Turbo Pascal's linker does not allow explicit references to the
- ; stack segment, so instead of the above PUBLICs and EXTRNs we
- ; define the following equates for the emulators variables. These
- ; declarations cause the assembler to use DS as the default segment
- ; register, so an SS: override MUST be coded in places where DS is
- ; not yet set up.
-
- ; Note: The Turbo Pascal runtime library assumes that an FINIT will
- ; correctly initialize all emulator variables. Turbo Pascal never
- ; initializes them, nor does it ever directly reference any of them.
-
- emws_limitSP equ (word ptr DS: 0)
- emws_initialSP equ (word ptr DS: 192)
- emws_saveVector equ (dword ptr DS: 204)
- emws_nmiVector equ (dword ptr DS: 208)
- emws_status equ (word ptr DS: 212)
- emws_control equ (word ptr DS: 214)
- emws_TOS equ (word ptr DS: 216)
- emws_adjust equ (word ptr DS: 218)
- emws_fixSeg equ (word ptr DS: 220)
- emws_BPsafe equ (word ptr DS: 222)
- emws_stamp equ (word ptr DS: 224)
- emws_version equ (word ptr DS: 228)
-
- EmuAssume@ MACRO aSeg
- ASSUME aSeg : NOTHING
- ENDM
- EmuNothing@ MACRO aSeg
- ASSUME aSeg : NOTHING
- ENDM
-
- ENDIF
-