www.pudn.com > linuxcici1.rar > EMUVARS.ASI


;	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