[FAST486]

Implement PUSH/POP FS/GS.


svn path=/branches/ntvdm/; revision=60711
This commit is contained in:
Aleksandar Andrejevic 2013-10-19 18:36:04 +00:00
parent ca7d21eff4
commit a98544e517
2 changed files with 48 additions and 4 deletions

View file

@ -198,16 +198,16 @@ Fast486ExtendedHandlers[FAST486_NUM_OPCODE_HANDLERS] =
Fast486ExtOpcodeConditionalSet, Fast486ExtOpcodeConditionalSet,
Fast486ExtOpcodeConditionalSet, Fast486ExtOpcodeConditionalSet,
Fast486ExtOpcodeConditionalSet, Fast486ExtOpcodeConditionalSet,
NULL, // TODO: OPCODE 0xA0 NOT IMPLEMENTED Fast486ExtOpcodePushFs,
NULL, // TODO: OPCODE 0xA1 NOT IMPLEMENTED Fast486ExtOpcodePopFs,
NULL, // Invalid NULL, // Invalid
NULL, // TODO: OPCODE 0xA3 NOT IMPLEMENTED NULL, // TODO: OPCODE 0xA3 NOT IMPLEMENTED
NULL, // TODO: OPCODE 0xA4 NOT IMPLEMENTED NULL, // TODO: OPCODE 0xA4 NOT IMPLEMENTED
NULL, // TODO: OPCODE 0xA5 NOT IMPLEMENTED NULL, // TODO: OPCODE 0xA5 NOT IMPLEMENTED
NULL, // Invalid NULL, // Invalid
NULL, // Invalid NULL, // Invalid
NULL, // TODO: OPCODE 0xA8 NOT IMPLEMENTED Fast486ExtOpcodePushGs,
NULL, // TODO: OPCODE 0xA9 NOT IMPLEMENTED Fast486ExtOpcodePopGs,
NULL, // TODO: OPCODE 0xAA NOT IMPLEMENTED NULL, // TODO: OPCODE 0xAA NOT IMPLEMENTED
NULL, // TODO: OPCODE 0xAB NOT IMPLEMENTED NULL, // TODO: OPCODE 0xAB NOT IMPLEMENTED
NULL, // TODO: OPCODE 0xAC NOT IMPLEMENTED NULL, // TODO: OPCODE 0xAC NOT IMPLEMENTED
@ -298,6 +298,46 @@ Fast486ExtendedHandlers[FAST486_NUM_OPCODE_HANDLERS] =
/* PUBLIC FUNCTIONS ***********************************************************/ /* PUBLIC FUNCTIONS ***********************************************************/
FAST486_OPCODE_HANDLER(Fast486ExtOpcodePushFs)
{
/* Call the internal API */
return Fast486StackPush(State, State->SegmentRegs[FAST486_REG_FS].Selector);
}
FAST486_OPCODE_HANDLER(Fast486ExtOpcodePopFs)
{
ULONG NewSelector;
if (!Fast486StackPop(State, &NewSelector))
{
/* Exception occurred */
return FALSE;
}
/* Call the internal API */
return Fast486LoadSegment(State, FAST486_REG_FS, LOWORD(NewSelector));
}
FAST486_OPCODE_HANDLER(Fast486ExtOpcodePushGs)
{
/* Call the internal API */
return Fast486StackPush(State, State->SegmentRegs[FAST486_REG_GS].Selector);
}
FAST486_OPCODE_HANDLER(Fast486ExtOpcodePopGs)
{
ULONG NewSelector;
if (!Fast486StackPop(State, &NewSelector))
{
/* Exception occurred */
return FALSE;
}
/* Call the internal API */
return Fast486LoadSegment(State, FAST486_REG_GS, LOWORD(NewSelector));
}
FAST486_OPCODE_HANDLER(Fast486ExtOpcodeConditionalJmp) FAST486_OPCODE_HANDLER(Fast486ExtOpcodeConditionalJmp)
{ {
BOOLEAN Jump = FALSE; BOOLEAN Jump = FALSE;

View file

@ -23,6 +23,10 @@
#define _EXTRAOPS_H_ #define _EXTRAOPS_H_
/* DEFINES ********************************************************************/ /* DEFINES ********************************************************************/
FAST486_OPCODE_HANDLER(Fast486ExtOpcodePushFs);
FAST486_OPCODE_HANDLER(Fast486ExtOpcodePopFs);
FAST486_OPCODE_HANDLER(Fast486ExtOpcodePushGs);
FAST486_OPCODE_HANDLER(Fast486ExtOpcodePopGs);
FAST486_OPCODE_HANDLER(Fast486ExtOpcodeConditionalJmp); FAST486_OPCODE_HANDLER(Fast486ExtOpcodeConditionalJmp);
FAST486_OPCODE_HANDLER(Fast486ExtOpcodeConditionalSet); FAST486_OPCODE_HANDLER(Fast486ExtOpcodeConditionalSet);
FAST486_OPCODE_HANDLER(Fast486OpcodeExtended); FAST486_OPCODE_HANDLER(Fast486OpcodeExtended);