+ USHORT i;
+
+ FAST486_MEM_READ_PROC MemReadCallback = State->MemReadCallback;
+ FAST486_MEM_WRITE_PROC MemWriteCallback = State->MemWriteCallback;
+ FAST486_IO_READ_PROC IoReadCallback = State->IoReadCallback;
+ FAST486_IO_WRITE_PROC IoWriteCallback = State->IoWriteCallback;
+ FAST486_IDLE_PROC IdleCallback = State->IdleCallback;
+ FAST486_BOP_PROC BopCallback = State->BopCallback;
+ FAST486_INT_ACK_PROC IntAckCallback = State->IntAckCallback;
+
+ /* Clear the entire structure */
+ RtlZeroMemory(State, sizeof(*State));
+
+ /* Initialize the registers */
+ State->Flags.AlwaysSet = 1;
+ State->InstPtr.LowWord = 0xFFF0;
+
+ /* Initialize segments */
+ for (i = 0; i < FAST486_NUM_SEG_REGS; i++)
+ {
+ /* Set the selector, base and limit, other values don't apply in real mode */
+ State->SegmentRegs[i].Selector = 0;
+ State->SegmentRegs[i].Base = 0;
+ State->SegmentRegs[i].Limit = 0xFFFF;
+ }
+
+ /* Initialize the code segment */
+ State->SegmentRegs[FAST486_REG_CS].Selector = 0xF000;
+ State->SegmentRegs[FAST486_REG_CS].Base = 0xFFFF0000;
+
+ /* Initialize the IDT */
+ State->Idtr.Size = 0x3FF;
+ State->Idtr.Address = 0;
+
+ /* Initialize CR0 */
+ State->ControlRegisters[FAST486_REG_CR0] |= FAST486_CR0_ET;
+
+ /* Restore the callbacks */
+ State->MemReadCallback = MemReadCallback;
+ State->MemWriteCallback = MemWriteCallback;
+ State->IoReadCallback = IoReadCallback;
+ State->IoWriteCallback = IoWriteCallback;
+ State->IdleCallback = IdleCallback;
+ State->BopCallback = BopCallback;
+ State->IntAckCallback = IntAckCallback;