SOFT386_IO_READ_PROC IoReadCallback = State->IoReadCallback;
SOFT386_IO_WRITE_PROC IoWriteCallback = State->IoWriteCallback;
SOFT386_IDLE_PROC IdleCallback = State->IdleCallback;
+ SOFT386_BOP_PROC BopCallback = State->BopCallback;
/* Clear the entire structure */
RtlZeroMemory(State, sizeof(*State));
/* Initialize CR0 */
State->ControlRegisters[SOFT386_REG_CR0] |= SOFT386_CR0_ET;
-
+
/* Restore the callbacks */
State->MemReadCallback = MemReadCallback;
State->MemWriteCallback = MemWriteCallback;
State->IoReadCallback = IoReadCallback;
State->IoWriteCallback = IoWriteCallback;
State->IdleCallback = IdleCallback;
+ State->BopCallback = BopCallback;
}
VOID
State->InstPtr.Long = Offset;
}
+VOID
+NTAPI
+Soft386SetStack(PSOFT386_STATE State, USHORT Segment, ULONG Offset)
+{
+ /* Load the new SS */
+ if (!Soft386LoadSegment(State, SOFT386_REG_SS, Segment))
+ {
+ /* An exception occurred, let the handler execute instead */
+ return;
+ }
+
+ /* Set the new SP */
+ State->GeneralRegs[SOFT386_REG_ESP].Long = Offset;
+}
+
+
/* EOF */