diff --git a/src/emu/cpu/i386/i386op32.c b/src/emu/cpu/i386/i386op32.c index 35de63673f0..c95d4276902 100644 --- a/src/emu/cpu/i386/i386op32.c +++ b/src/emu/cpu/i386/i386op32.c @@ -2655,6 +2655,42 @@ static void I386OP(group0F00_32)(i386_state *cpustate) // Opcode 0x0f 00 switch( (modrm >> 3) & 0x7 ) { + case 0: /* SLDT */ + if ( PROTECTED_MODE && !V8086_MODE ) + { + if( modrm >= 0xc0 ) { + address = LOAD_RM32(modrm); + STORE_RM32(address, cpustate->ldtr.segment); + CYCLES(cpustate,CYCLES_SLDT_REG); + } else { + ea = GetEA(cpustate,modrm); + WRITE32(cpustate, ea, cpustate->ldtr.segment); + CYCLES(cpustate,CYCLES_SLDT_MEM); + } + } + else + { + i386_trap(cpustate,6, 0); + } + break; + case 1: /* STR */ + if ( PROTECTED_MODE && !V8086_MODE ) + { + if( modrm >= 0xc0 ) { + address = LOAD_RM32(modrm); + STORE_RM32(address, cpustate->task.segment); + CYCLES(cpustate,CYCLES_STR_REG); + } else { + ea = GetEA(cpustate,modrm); + WRITE32(cpustate, ea, cpustate->task.segment); + CYCLES(cpustate,CYCLES_STR_MEM); + } + } + else + { + i386_trap(cpustate,6, 0); + } + break; case 2: /* LLDT */ if ( PROTECTED_MODE && !V8086_MODE ) { diff --git a/src/emu/cpu/i386/i386ops.c b/src/emu/cpu/i386/i386ops.c index adcfd9bd8d1..89b668f3a54 100644 --- a/src/emu/cpu/i386/i386ops.c +++ b/src/emu/cpu/i386/i386ops.c @@ -2212,6 +2212,11 @@ static void I386OP(into)(i386_state *cpustate) // Opcode 0xce static void I386OP(escape)(i386_state *cpustate) // Opcodes 0xd8 - 0xdf { UINT8 modrm = FETCH(cpustate); + if(modrm < 0xc0) + { + UINT32 ea; + ea = GetEA(cpustate,modrm); + } CYCLES(cpustate,3); // TODO: confirm this (void) LOAD_RM8(modrm); }