Soft386OpcodeGroupD3,
Soft386OpcodeAam,
Soft386OpcodeAad,
- NULL, // TODO: OPCODE 0xD6 NOT SUPPORTED
+ Soft386OpcodeSalc,
Soft386OpcodeXlat,
NULL, // TODO: OPCODE 0xD8 NOT SUPPORTED
NULL, // TODO: OPCODE 0xD9 NOT SUPPORTED
sizeof(USHORT));
}
}
+
+SOFT386_OPCODE_HANDLER(Soft386OpcodeSalc)
+{
+ /* Make sure this is the right instruction */
+ ASSERT(Opcode == 0xD6);
+
+ if (State->PrefixFlags & SOFT386_PREFIX_LOCK)
+ {
+ /* Invalid prefix */
+ Soft386Exception(State, SOFT386_EXCEPTION_UD);
+ return FALSE;
+ }
+
+ /* Set all the bits of AL to CF */
+ State->GeneralRegs[SOFT386_REG_EAX].LowByte = State->Flags.Cf ? 0xFF : 0x00;
+
+ return TRUE;
+}
SOFT386_OPCODE_HANDLER(Soft386OpcodeMovEaxOffset);
SOFT386_OPCODE_HANDLER(Soft386OpcodeMovOffsetAl);
SOFT386_OPCODE_HANDLER(Soft386OpcodeMovOffsetEax);
+SOFT386_OPCODE_HANDLER(Soft386OpcodeSalc);
#endif // _OPCODES_H_