home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
vol_300
/
359_11
/
patch5.000
/
EMU387
/
EMU.H
< prev
next >
Wrap
C/C++ Source or Header
|
1991-09-11
|
4KB
|
178 lines
#ifndef _NPX_H_
#define _NPX_H_
void emu_install();
extern int modrm;
extern unsigned eax;
extern unsigned ebx;
extern unsigned ecx;
extern unsigned edx;
extern unsigned esi;
extern unsigned edi;
extern unsigned ebp;
extern unsigned esp;
extern unsigned char *eip;
struct reg {
char sign;
char tag;
short exp;
unsigned sigl;
unsigned sigh;
};
#define EXP_BIAS 16383
#define EXP_MAX 32767
#define SIGN_POS 0
#define SIGN_NEG 1
#define TW_V 0 // valid
#define TW_Z 1 // zero
#define TW_S 2 // special
#define TW_E 3 // empty
#define EX_SO 0x02C1 // stack overflow
#define EX_SU 0x00C1 // stack underflow
#define EX_P 0x00A0 // loss of precision
#define EX_U 0x0090 // underflow
#define EX_O 0x0088 // overflow
#define EX_Z 0x0084 // divide by zero
#define EX_D 0x0082 // denormalized operand
#define EX_I 0x0081 // invalid operation
#define SW_B 0x8000 // backward compatibility (=ES)
#define SW_C3 0x4000 // condition bit 3
#define SW_TOP 0x3800 // top of stack
#define SW_TOPS 0x0800 // scale for TOS
#define SW_C2 0x0400 // condition bit 2
#define SW_C1 0x0200 // condition bit 1
#define SW_C0 0x0100 // condition bit 0
#define SW_ES 0x0080 // exception summary
#define SW_SF 0x0040 // stack fault
#define SW_PE 0x0020 // loss of precision
#define SW_UE 0x0010 // underflow
#define SW_OE 0x0008 // overflow
#define SW_ZE 0x0004 // divide by zero
#define SW_DE 0x0002 // denormalized operand
#define SW_IE 0x0001 // invalid operation
#define CW_RC 0x0C00 // rounding control
#define CW_PC 0x0300 // precision control
#define CW_PM 0x0020 // precision mask
#define CW_UM 0x0010 // underflow mask
#define CW_OM 0x0008 // overflow mask
#define CW_ZM 0x0004 // divide by zero mask
#define CW_DM 0x0002 // denormalized operand mask
#define CW_IM 0x0001 // invalid operation mask
#define CW_EXM 0x007f // all masks
#define RC_RND 0x0000
#define RC_DOWN 0x0400
#define RC_UP 0x0800
#define RC_CHOP 0x0C00
/*
** THE NPX ENVIRONMENT
*/
extern int status_word;
extern int control_word;
extern reg regs[8];
extern int top;
/*
** UTILITY FUNCTIONS
*/
extern void *get_modrm();
inline reg& st(int which=0) { return regs[(top+which)&7]; }
extern void emu_printall();
extern void exception(int which); // returns 1 if unmasked
extern void setcc(int cc);
extern int full(); // returns 1 if exception, handles exception
extern int empty(int i=0); // returns 1 if exception, handles exception
typedef void (*FUNC)();
void emu_bad();
void r_add(reg& a, reg& b, reg& s); // a + b -> s
void r_sub(reg& a, reg& b, reg& d); // a - b -> d
void r_mul(reg& a, reg& b, reg& p); // a * b -> p
void r_div(reg& a, reg& b, reg& q); // a / b -> q
void r_mov(reg& s, reg& d);
int val_same(reg& a, reg& b);
int mag_same(reg& a, reg& b);
void emu_00();
void emu_01();
void emu_02();
void emu_03();
void emu_04();
void emu_05();
void emu_06();
void emu_07();
void emu_10();
void emu_11();
void emu_12();
void emu_13();
void emu_14();
void emu_15();
void emu_16();
void emu_17();
void emu_20();
void emu_21();
void emu_22();
void emu_23();
void emu_24();
void emu_25();
void emu_26();
void emu_27();
void emu_30();
void emu_31();
void emu_32();
void emu_33();
void emu_34();
void emu_35();
void emu_36();
void emu_37();
void emu_40();
void emu_41();
void emu_42();
void emu_43();
void emu_44();
void emu_45();
void emu_46();
void emu_47();
void emu_50();
void emu_51();
void emu_52();
void emu_53();
void emu_54();
void emu_55();
void emu_56();
void emu_57();
void emu_60();
void emu_61();
void emu_62();
void emu_63();
void emu_64();
void emu_65();
void emu_66();
void emu_67();
void emu_70();
void emu_71();
void emu_72();
void emu_73();
void emu_74();
void emu_75();
void emu_76();
void emu_77();
#endif