Author: aandrejevic Date: Sat Oct 19 18:36:04 2013 New Revision: 60711
URL: http://svn.reactos.org/svn/reactos?rev=60711&view=rev Log: [FAST486] Implement PUSH/POP FS/GS.
Modified: branches/ntvdm/lib/fast486/extraops.c branches/ntvdm/lib/fast486/extraops.h
Modified: branches/ntvdm/lib/fast486/extraops.c URL: http://svn.reactos.org/svn/reactos/branches/ntvdm/lib/fast486/extraops.c?rev... ============================================================================== --- branches/ntvdm/lib/fast486/extraops.c [iso-8859-1] (original) +++ branches/ntvdm/lib/fast486/extraops.c [iso-8859-1] Sat Oct 19 18:36:04 2013 @@ -198,16 +198,16 @@ Fast486ExtOpcodeConditionalSet, Fast486ExtOpcodeConditionalSet, Fast486ExtOpcodeConditionalSet, - NULL, // TODO: OPCODE 0xA0 NOT IMPLEMENTED - NULL, // TODO: OPCODE 0xA1 NOT IMPLEMENTED + Fast486ExtOpcodePushFs, + Fast486ExtOpcodePopFs, NULL, // Invalid NULL, // TODO: OPCODE 0xA3 NOT IMPLEMENTED NULL, // TODO: OPCODE 0xA4 NOT IMPLEMENTED NULL, // TODO: OPCODE 0xA5 NOT IMPLEMENTED NULL, // Invalid NULL, // Invalid - NULL, // TODO: OPCODE 0xA8 NOT IMPLEMENTED - NULL, // TODO: OPCODE 0xA9 NOT IMPLEMENTED + Fast486ExtOpcodePushGs, + Fast486ExtOpcodePopGs, NULL, // TODO: OPCODE 0xAA NOT IMPLEMENTED NULL, // TODO: OPCODE 0xAB NOT IMPLEMENTED NULL, // TODO: OPCODE 0xAC NOT IMPLEMENTED @@ -298,6 +298,46 @@
/* 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) { BOOLEAN Jump = FALSE;
Modified: branches/ntvdm/lib/fast486/extraops.h URL: http://svn.reactos.org/svn/reactos/branches/ntvdm/lib/fast486/extraops.h?rev... ============================================================================== --- branches/ntvdm/lib/fast486/extraops.h [iso-8859-1] (original) +++ branches/ntvdm/lib/fast486/extraops.h [iso-8859-1] Sat Oct 19 18:36:04 2013 @@ -23,6 +23,10 @@ #define _EXTRAOPS_H_
/* DEFINES ********************************************************************/ +FAST486_OPCODE_HANDLER(Fast486ExtOpcodePushFs); +FAST486_OPCODE_HANDLER(Fast486ExtOpcodePopFs); +FAST486_OPCODE_HANDLER(Fast486ExtOpcodePushGs); +FAST486_OPCODE_HANDLER(Fast486ExtOpcodePopGs); FAST486_OPCODE_HANDLER(Fast486ExtOpcodeConditionalJmp); FAST486_OPCODE_HANDLER(Fast486ExtOpcodeConditionalSet); FAST486_OPCODE_HANDLER(Fast486OpcodeExtended);