#if 1 'def Emu86_EnableFPU type FpuCtl union as u16 w type bMasks :6 as u16 'exception masks Precision,Underflow,Overflow,Zero Divide,Denormal Operand,Invalid Operation bZ2 :2 as u16 'unused bPrecision:2 as u16 'Precision control (nearest,down,up,fix) bRounding :2 as u16 'Rounding control bInfinity :1 as u16 'Infinity control bZ3 :3 as u16 'unused end type end union end type type FpuSts union as u16 w type bInvalid :1 as u16 bDenormal :1 as u16 bDivZero :1 as u16 bOverflow :1 as u16 bUnderflow:1 as u16 bPrecision:1 as u16 bStkFault :1 as u16 bErrSumSta:1 as u16 bCode0 :1 as u16 'C bCode1 :1 as u16 '1 bCode2 :1 as u16 'P wTop :3 as u16 bCode3 :1 as u16 'Z FpuBusy :1 as u16 end type end union end type #endif type OpcodeFlags union dw as ubyte type bSize16 :1 as ulong bAddr16 :1 as ulong bLock :1 as ulong bRep :1 as ulong bRepNE :1 as ulong end type end union end type type ThreadStruct as long ID as double dWakeTime as any ptr pStack as long iStackSz, iDoSleep as ulongint llCycles as ulong iReturnValue end type type FlagsStruct union dw as ulong type CF:1 as ulong 'carry flag _1:1 as ulong 'always 1 PF:1 as ulong 'parity flag _0:1 as ulong 'always 0 AF:1 as ulong 'auxiliar flag _O:1 as ulong 'always 0 ZF:1 as ulong 'zero flag SF:1 as ulong 'sign flag TF:1 as ulong 'trap flag _I:1 as ulong 'interrupt flag DF:1 as ulong 'direction flag OF:1 as ulong 'overflow flag _x:8 as ulong 'IOPL/NT/MD/RF/VM/AC/VIF/VIP ID:1 as ulong 'auble to use CPUID end type end union end type #ifdef Emu86_EnableMMX type StructMMX union as u64 q 'qword as s64 ll 'long long as u32 d(3) 'dword as s32 i(3) 'integer as u16 w(7) 'word as s16 s(7) 'short as u8 c(15) 'char as s8 b(15) 'byte end union end type #endif #ifdef Emu86_AutoDebug type Emu86Context as u32 rEAX,rECX,rEDX,rEBX as u32 rESP,rEBP,rESI,rEDI as FlagsStruct uFlags end type #endif #define _N &hCC884422 type CpuStruct as u32 rEAX=_N,rECX=_N,rEDX=_N,rEBX=_N as u32 rESP=_N,rEBP=_N,rESI=_N,rEDI =_N as ubyte ptr pEIP 'as FlagsStruct tFlags as OpcodeFlags tOpFlags as byte Carry , Parity , Direction , bStop as u32 xF_Result '(other flags) result of last operation (lazy flags) as u32 xF_2ndNum 'second number for the operation as u32 xF_Number '(other flags) original number of last operation (lazy flags) as ThreadStruct tThread #ifdef Emu86_EnableFPU as FpuCtl FpuC as FpuSts tSTS #endif #if defined(Emu86_EnableFPU) orelse defined(Emu86_EnableMMX) union #ifdef Emu86_EnableFPU as double dST(7) #endif #ifdef Emu86_EnableMMX as u64 qMM(7) as StructMMX tMM(7) #endif end union #endif #ifdef Emu86_AutoDebug tCtx as Emu86Context #endif end type #undef _N