diff --git a/lib/soft386/CMakeLists.txt b/lib/soft386/CMakeLists.txt index 93cccf65de3..e27f6fa5d89 100644 --- a/lib/soft386/CMakeLists.txt +++ b/lib/soft386/CMakeLists.txt @@ -4,6 +4,7 @@ include_directories(${REACTOS_SOURCE_DIR}/include/reactos/libs/soft386) list(APPEND SOURCE soft386.c opcodes.c + opgroups.c common.c) add_library(soft386 ${SOURCE}) diff --git a/lib/soft386/opcodes.c b/lib/soft386/opcodes.c index 6e3d91be5fb..146831febe3 100644 --- a/lib/soft386/opcodes.c +++ b/lib/soft386/opcodes.c @@ -18,6 +18,7 @@ #include #include "opcodes.h" +#include "opgroups.h" #include "common.h" /* PUBLIC VARIABLES ***********************************************************/ @@ -153,10 +154,10 @@ Soft386OpcodeHandlers[SOFT386_NUM_OPCODE_HANDLERS] = Soft386OpcodeShortConditionalJmp, Soft386OpcodeShortConditionalJmp, Soft386OpcodeShortConditionalJmp, - NULL, // TODO: OPCODE 0x80 NOT SUPPORTED - NULL, // TODO: OPCODE 0x81 NOT SUPPORTED - NULL, // TODO: OPCODE 0x82 NOT SUPPORTED - NULL, // TODO: OPCODE 0x83 NOT SUPPORTED + Soft386OpcodeGroup80, + Soft386OpcodeGroup81, + Soft386OpcodeGroup82, + Soft386OpcodeGroup83, Soft386OpcodeTestByteModrm, Soft386OpcodeTestModrm, Soft386OpcodeXchgByteModrm, @@ -168,7 +169,7 @@ Soft386OpcodeHandlers[SOFT386_NUM_OPCODE_HANDLERS] = Soft386OpcodeMovStoreSeg, Soft386OpcodeLea, Soft386OpcodeMovLoadSeg, - NULL, // TODO: OPCODE 0x8F NOT SUPPORTED + Soft386OpcodeGroup8F, Soft386OpcodeNop, Soft386OpcodeExchangeEax, Soft386OpcodeExchangeEax, @@ -217,14 +218,14 @@ Soft386OpcodeHandlers[SOFT386_NUM_OPCODE_HANDLERS] = Soft386OpcodeMovRegImm, Soft386OpcodeMovRegImm, Soft386OpcodeMovRegImm, - NULL, // TODO: OPCODE 0xC0 NOT SUPPORTED - NULL, // TODO: OPCODE 0xC1 NOT SUPPORTED + Soft386OpcodeGroupC0, + Soft386OpcodeGroupC1, Soft386OpcodeRet, Soft386OpcodeRet, Soft386OpcodeLdsLes, Soft386OpcodeLdsLes, - NULL, // TODO: OPCODE 0xC6 NOT SUPPORTED - NULL, // TODO: OPCODE 0xC7 NOT SUPPORTED + Soft386OpcodeGroupC6, + Soft386OpcodeGroupC7, Soft386OpcodeEnter, Soft386OpcodeLeave, Soft386OpcodeRetFarImm, @@ -233,10 +234,10 @@ Soft386OpcodeHandlers[SOFT386_NUM_OPCODE_HANDLERS] = Soft386OpcodeInt, Soft386OpcodeInt, Soft386OpcodeIret, - NULL, // TODO: OPCODE 0xD0 NOT SUPPORTED - NULL, // TODO: OPCODE 0xD1 NOT SUPPORTED - NULL, // TODO: OPCODE 0xD2 NOT SUPPORTED - NULL, // TODO: OPCODE 0xD3 NOT SUPPORTED + Soft386OpcodeGroupD0, + Soft386OpcodeGroupD1, + Soft386OpcodeGroupD2, + Soft386OpcodeGroupD3, Soft386OpcodeAam, Soft386OpcodeAad, NULL, // TODO: OPCODE 0xD6 NOT SUPPORTED @@ -271,16 +272,16 @@ Soft386OpcodeHandlers[SOFT386_NUM_OPCODE_HANDLERS] = Soft386OpcodePrefix, Soft386OpcodeHalt, Soft386OpcodeComplCarry, - NULL, // TODO: OPCODE 0xF6 NOT SUPPORTED - NULL, // TODO: OPCODE 0xF7 NOT SUPPORTED + Soft386OpcodeGroupF6, + Soft386OpcodeGroupF7, Soft386OpcodeClearCarry, Soft386OpcodeSetCarry, Soft386OpcodeClearInt, Soft386OpcodeSetInt, Soft386OpcodeClearDir, Soft386OpcodeSetDir, - NULL, // TODO: OPCODE 0xFE NOT SUPPORTED - NULL, // TODO: OPCODE 0xFF NOT SUPPORTED + Soft386OpcodeGroupFE, + Soft386OpcodeGroupFF, }; /* PUBLIC FUNCTIONS ***********************************************************/ diff --git a/lib/soft386/opgroups.c b/lib/soft386/opgroups.c new file mode 100644 index 00000000000..a5c28eb9d78 --- /dev/null +++ b/lib/soft386/opgroups.c @@ -0,0 +1,127 @@ +/* + * COPYRIGHT: GPL - See COPYING in the top level directory + * PROJECT: 386/486 CPU Emulation Library + * FILE: opgroups.c + * PURPOSE: Opcode group handlers. + * PROGRAMMERS: Aleksandar Andrejevic + */ + +/* INCLUDES *******************************************************************/ + +// #define WIN32_NO_STATUS +// #define _INC_WINDOWS +#include + +// #define NDEBUG +#include + +#include +#include "opcodes.h" +#include "common.h" + +/* PUBLIC FUNCTIONS ***********************************************************/ + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroup80) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroup81) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroup82) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroup83) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroup8F) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupC0) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupC1) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupC6) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupC7) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupD0) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupD1) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupD2) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupD3) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupF6) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupF7) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupFE) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupFF) +{ + UNIMPLEMENTED; + return FALSE; // TODO: NOT IMPLEMENTED +} + +/* EOF */ + diff --git a/lib/soft386/opgroups.h b/lib/soft386/opgroups.h new file mode 100644 index 00000000000..80ba24fbfcb --- /dev/null +++ b/lib/soft386/opgroups.h @@ -0,0 +1,35 @@ +/* + * COPYRIGHT: GPL - See COPYING in the top level directory + * PROJECT: 386/486 CPU Emulation Library + * FILE: opgroups.h + * PURPOSE: Opcode group handlers. (header file) + * PROGRAMMERS: Aleksandar Andrejevic + */ + +#ifndef _OPGROUPS_H_ +#define _OPGROUPS_H_ + +/* DEFINES ********************************************************************/ + +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroup80); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroup81); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroup82); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroup83); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroup8F); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupC0); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupC1); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupC6); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupC7); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupD0); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupD1); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupD2); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupD3); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupF6); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupF7); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupFE); +SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupFF); + +#endif // _OPGROUPS_H_ + +/* EOF */ +