2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
5 * PURPOSE: Exported functions for manipulating registers
6 * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr)
9 /* INCLUDES *******************************************************************/
15 /* PUBLIC FUNCTIONS ***********************************************************/
17 static inline BOOLEAN
EmulatorGetFlag(ULONG Flag
)
19 return (EmulatorContext
.Flags
.Long
& Flag
) ? TRUE
: FALSE
;
22 static inline VOID
EmulatorSetFlag(ULONG Flag
)
24 EmulatorContext
.Flags
.Long
|= Flag
;
27 static inline VOID
EmulatorClearFlag(ULONG Flag
)
29 EmulatorContext
.Flags
.Long
&= ~Flag
;
32 VOID
EmulatorSetStack(WORD Segment
, DWORD Offset
)
34 Fast486SetStack(&EmulatorContext
, Segment
, Offset
);
41 getIntelRegistersPointer(VOID
)
51 return EmulatorContext
.GeneralRegs
[FAST486_REG_EAX
].Long
;
58 EmulatorContext
.GeneralRegs
[FAST486_REG_EAX
].Long
= Value
;
65 return EmulatorContext
.GeneralRegs
[FAST486_REG_EAX
].LowWord
;
72 EmulatorContext
.GeneralRegs
[FAST486_REG_EAX
].LowWord
= Value
;
79 return EmulatorContext
.GeneralRegs
[FAST486_REG_EAX
].HighByte
;
86 EmulatorContext
.GeneralRegs
[FAST486_REG_EAX
].HighByte
= Value
;
93 return EmulatorContext
.GeneralRegs
[FAST486_REG_EAX
].LowByte
;
100 EmulatorContext
.GeneralRegs
[FAST486_REG_EAX
].LowByte
= Value
;
107 return EmulatorContext
.GeneralRegs
[FAST486_REG_EBX
].Long
;
114 EmulatorContext
.GeneralRegs
[FAST486_REG_EBX
].Long
= Value
;
121 return EmulatorContext
.GeneralRegs
[FAST486_REG_EBX
].LowWord
;
128 EmulatorContext
.GeneralRegs
[FAST486_REG_EBX
].LowWord
= Value
;
135 return EmulatorContext
.GeneralRegs
[FAST486_REG_EBX
].HighByte
;
142 EmulatorContext
.GeneralRegs
[FAST486_REG_EBX
].HighByte
= Value
;
149 return EmulatorContext
.GeneralRegs
[FAST486_REG_EBX
].LowByte
;
156 EmulatorContext
.GeneralRegs
[FAST486_REG_EBX
].LowByte
= Value
;
165 return EmulatorContext
.GeneralRegs
[FAST486_REG_ECX
].Long
;
172 EmulatorContext
.GeneralRegs
[FAST486_REG_ECX
].Long
= Value
;
179 return EmulatorContext
.GeneralRegs
[FAST486_REG_ECX
].LowWord
;
186 EmulatorContext
.GeneralRegs
[FAST486_REG_ECX
].LowWord
= Value
;
193 return EmulatorContext
.GeneralRegs
[FAST486_REG_ECX
].HighByte
;
200 EmulatorContext
.GeneralRegs
[FAST486_REG_ECX
].HighByte
= Value
;
207 return EmulatorContext
.GeneralRegs
[FAST486_REG_ECX
].LowByte
;
214 EmulatorContext
.GeneralRegs
[FAST486_REG_ECX
].LowByte
= Value
;
223 return EmulatorContext
.GeneralRegs
[FAST486_REG_EDX
].Long
;
230 EmulatorContext
.GeneralRegs
[FAST486_REG_EDX
].Long
= Value
;
237 return EmulatorContext
.GeneralRegs
[FAST486_REG_EDX
].LowWord
;
244 EmulatorContext
.GeneralRegs
[FAST486_REG_EDX
].LowWord
= Value
;
251 return EmulatorContext
.GeneralRegs
[FAST486_REG_EDX
].HighByte
;
258 EmulatorContext
.GeneralRegs
[FAST486_REG_EDX
].HighByte
= Value
;
265 return EmulatorContext
.GeneralRegs
[FAST486_REG_EDX
].LowByte
;
272 EmulatorContext
.GeneralRegs
[FAST486_REG_EDX
].LowByte
= Value
;
281 return EmulatorContext
.GeneralRegs
[FAST486_REG_ESP
].Long
;
288 EmulatorSetStack(getSS(), Value
);
295 return EmulatorContext
.GeneralRegs
[FAST486_REG_ESP
].LowWord
;
302 EmulatorSetStack(getSS(), Value
);
311 return EmulatorContext
.GeneralRegs
[FAST486_REG_EBP
].Long
;
318 EmulatorContext
.GeneralRegs
[FAST486_REG_EBP
].Long
= Value
;
325 return EmulatorContext
.GeneralRegs
[FAST486_REG_EBP
].LowWord
;
332 EmulatorContext
.GeneralRegs
[FAST486_REG_EBP
].LowWord
= Value
;
341 return EmulatorContext
.GeneralRegs
[FAST486_REG_ESI
].Long
;
348 EmulatorContext
.GeneralRegs
[FAST486_REG_ESI
].Long
= Value
;
355 return EmulatorContext
.GeneralRegs
[FAST486_REG_ESI
].LowWord
;
362 EmulatorContext
.GeneralRegs
[FAST486_REG_ESI
].LowWord
= Value
;
371 return EmulatorContext
.GeneralRegs
[FAST486_REG_EDI
].Long
;
378 EmulatorContext
.GeneralRegs
[FAST486_REG_EDI
].Long
= Value
;
385 return EmulatorContext
.GeneralRegs
[FAST486_REG_EDI
].LowWord
;
392 EmulatorContext
.GeneralRegs
[FAST486_REG_EDI
].LowWord
= Value
;
401 return EmulatorContext
.InstPtr
.Long
;
408 EmulatorExecute(getCS(), Value
);
415 return EmulatorContext
.InstPtr
.LowWord
;
422 EmulatorExecute(getCS(), Value
);
431 return EmulatorContext
.SegmentRegs
[FAST486_REG_CS
].Selector
;
438 Fast486SetSegment(&EmulatorContext
, FAST486_REG_CS
, Value
);
445 return EmulatorContext
.SegmentRegs
[FAST486_REG_SS
].Selector
;
452 Fast486SetSegment(&EmulatorContext
, FAST486_REG_SS
, Value
);
459 return EmulatorContext
.SegmentRegs
[FAST486_REG_DS
].Selector
;
466 Fast486SetSegment(&EmulatorContext
, FAST486_REG_DS
, Value
);
473 return EmulatorContext
.SegmentRegs
[FAST486_REG_ES
].Selector
;
480 Fast486SetSegment(&EmulatorContext
, FAST486_REG_ES
, Value
);
487 return EmulatorContext
.SegmentRegs
[FAST486_REG_FS
].Selector
;
494 Fast486SetSegment(&EmulatorContext
, FAST486_REG_FS
, Value
);
501 return EmulatorContext
.SegmentRegs
[FAST486_REG_GS
].Selector
;
508 Fast486SetSegment(&EmulatorContext
, FAST486_REG_GS
, Value
);
517 return EmulatorGetFlag(EMULATOR_FLAG_CF
);
525 EmulatorSetFlag(EMULATOR_FLAG_CF
);
527 EmulatorClearFlag(EMULATOR_FLAG_CF
);
534 return EmulatorGetFlag(EMULATOR_FLAG_PF
);
542 EmulatorSetFlag(EMULATOR_FLAG_PF
);
544 EmulatorClearFlag(EMULATOR_FLAG_PF
);
551 return EmulatorGetFlag(EMULATOR_FLAG_AF
);
559 EmulatorSetFlag(EMULATOR_FLAG_AF
);
561 EmulatorClearFlag(EMULATOR_FLAG_AF
);
568 return EmulatorGetFlag(EMULATOR_FLAG_ZF
);
576 EmulatorSetFlag(EMULATOR_FLAG_ZF
);
578 EmulatorClearFlag(EMULATOR_FLAG_ZF
);
585 return EmulatorGetFlag(EMULATOR_FLAG_SF
);
593 EmulatorSetFlag(EMULATOR_FLAG_SF
);
595 EmulatorClearFlag(EMULATOR_FLAG_SF
);
602 return EmulatorGetFlag(EMULATOR_FLAG_IF
);
610 EmulatorSetFlag(EMULATOR_FLAG_IF
);
612 EmulatorClearFlag(EMULATOR_FLAG_IF
);
619 return EmulatorGetFlag(EMULATOR_FLAG_DF
);
627 EmulatorSetFlag(EMULATOR_FLAG_DF
);
629 EmulatorClearFlag(EMULATOR_FLAG_DF
);
636 return EmulatorGetFlag(EMULATOR_FLAG_OF
);
644 EmulatorSetFlag(EMULATOR_FLAG_OF
);
646 EmulatorClearFlag(EMULATOR_FLAG_OF
);
655 return EmulatorContext
.Flags
.Long
;
660 setEFLAGS(ULONG Flags
)
662 EmulatorContext
.Flags
.Long
= Flags
;
671 return LOWORD(EmulatorContext
.ControlRegisters
[FAST486_REG_CR0
]);
678 /* Set the lower 16 bits (Machine Status Word) of CR0 */
679 EmulatorContext
.ControlRegisters
[FAST486_REG_CR0
] &= 0xFFFF0000;
680 EmulatorContext
.ControlRegisters
[FAST486_REG_CR0
] |= Value
& 0xFFFF;