* Fast486 386/486 CPU Emulation Library
* fast486.h
*
- * Copyright (C) 2013 Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
+ * Copyright (C) 2014 Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
#define FAST486_PREFIX_REPNZ (1 << 4)
#define FAST486_PREFIX_REP (1 << 5)
+#define FAST486_FPU_DEFAULT_CONTROL 0x037F
+
struct _FAST486_STATE;
typedef struct _FAST486_STATE FAST486_STATE, *PFAST486_STATE;
{
FAST486_INT_NONE = 0,
FAST486_INT_EXECUTE = 1,
- FAST486_INT_SIGNAL = 2
+ FAST486_INT_SIGNAL = 2,
+ FAST486_INT_DELAYED = 3
} FAST486_INT_STATUS, *PFAST486_INT_STATUS;
typedef
(NTAPI *FAST486_IO_READ_PROC)
(
PFAST486_STATE State,
- ULONG Port,
+ USHORT Port,
PVOID Buffer,
ULONG DataCount,
UCHAR DataSize
(NTAPI *FAST486_IO_WRITE_PROC)
(
PFAST486_STATE State,
- ULONG Port,
+ USHORT Port,
PVOID Buffer,
ULONG DataCount,
UCHAR DataSize
);
-typedef
-VOID
-(NTAPI *FAST486_IDLE_PROC)
-(
- PFAST486_STATE State
-);
-
typedef
VOID
(NTAPI *FAST486_BOP_PROC)
ULONG DirConf : 1;
ULONG Executable : 1;
ULONG SystemType : 1;
+ ULONG Rpl : 2;
ULONG Dpl : 2;
ULONG Present : 1;
ULONG Size : 1;
ULONG Base;
} FAST486_SEG_REG, *PFAST486_SEG_REG;
-typedef struct
+typedef struct _FAST486_LDT_REG
{
USHORT Selector;
ULONG Base;
ULONG Limit;
-} FAST486_LDT_REG;
+} FAST486_LDT_REG, *PFAST486_LDT_REG;
-typedef struct
+typedef struct _FAST486_TASK_REG
{
USHORT Selector;
ULONG Base;
BOOLEAN Busy;
} FAST486_TASK_REG, *PFAST486_TASK_REG;
-#pragma pack(push, 1)
+#include <pshpack1.h>
typedef struct
{
/* Verify the structure size */
C_ASSERT(sizeof(FAST486_IDT_ENTRY) == sizeof(ULONGLONG));
-#pragma pack(pop)
+#include <poppack.h>
typedef struct _FAST486_TABLE_REG
{
{
ULONGLONG Mantissa;
USHORT Exponent;
+ UCHAR Sign;
} FAST486_FPU_DATA_REG, *PFAST486_FPU_DATA_REG;
typedef union _FAST486_FPU_STATUS_REG
FAST486_MEM_WRITE_PROC MemWriteCallback;
FAST486_IO_READ_PROC IoReadCallback;
FAST486_IO_WRITE_PROC IoWriteCallback;
- FAST486_IDLE_PROC IdleCallback;
FAST486_BOP_PROC BopCallback;
FAST486_INT_ACK_PROC IntAckCallback;
FAST486_REG GeneralRegs[FAST486_NUM_GEN_REGS];
ULONG ExceptionCount;
ULONG PrefixFlags;
FAST486_SEG_REGS SegmentOverride;
+ BOOLEAN Halted;
FAST486_INT_STATUS IntStatus;
UCHAR PendingIntNum;
PULONG Tlb;
+#ifndef FAST486_NO_FPU
FAST486_FPU_DATA_REG FpuRegisters[FAST486_NUM_FPU_REGS];
FAST486_FPU_STATUS_REG FpuStatus;
FAST486_FPU_CONTROL_REG FpuControl;
USHORT FpuTag;
+#endif
};
/* FUNCTIONS ******************************************************************/
FAST486_MEM_WRITE_PROC MemWriteCallback,
FAST486_IO_READ_PROC IoReadCallback,
FAST486_IO_WRITE_PROC IoWriteCallback,
- FAST486_IDLE_PROC IdleCallback,
FAST486_BOP_PROC BopCallback,
FAST486_INT_ACK_PROC IntAckCallback,
PULONG Tlb);