From 53c514eb2ecff4126a824cc9b1763a175307a873 Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Thu, 17 Apr 2003 18:31:16 +0000 Subject: [PATCH] Fixes to SMSW/LMSW and LAR Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@938 --- src/cpu/core_full/op.h | 17 +++++++---------- src/cpu/core_full/optable.h | 8 ++++---- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/cpu/core_full/op.h b/src/cpu/core_full/op.h index 5d18605e..5c5ed872 100644 --- a/src/cpu/core_full/op.h +++ b/src/cpu/core_full/op.h @@ -399,7 +399,7 @@ switch (inst.code.op) { CPU_SGDT(limit,base); SaveMw(inst.rm_eaa,limit); SaveMd(inst.rm_eaa+2,base); - break; + goto nextopcode; } case 1: /* SIDT */ { @@ -407,26 +407,23 @@ switch (inst.code.op) { CPU_SIDT(limit,base); SaveMw(inst.rm_eaa,limit); SaveMd(inst.rm_eaa+2,base); - break; + goto nextopcode; } case 2: /* LGDT */ CPU_LGDT(LoadMw(inst.rm_eaa),LoadMd(inst.rm_eaa+2)&((inst.code.op == O_GRP7w) ? 0xFFFFFF : 0xFFFFFFFF)); - break; + goto nextopcode; case 3: /* LIDT */ CPU_LIDT(LoadMw(inst.rm_eaa),LoadMd(inst.rm_eaa+2)&((inst.code.op == O_GRP7w) ? 0xFFFFFF : 0xFFFFFFFF)); - break; + goto nextopcode; case 4: /* SMSW */ { Bitu word;CPU_SMSW(word); - SaveMw(inst.rm_eaa,word); + inst.op1.d=word; break; } case 6: /* LMSW */ - { - Bitu word=LoadMw(inst.rm_eaa); - CPU_LMSW(word); - break; - } + CPU_LMSW(inst.op1.w); + goto nextopcode; default: LOG(LOG_ERROR|LOG_CPU,"Group 7 Illegal subfunction %X",inst.rm_index); } diff --git a/src/cpu/core_full/optable.h b/src/cpu/core_full/optable.h index 011f41ab..08054c04 100644 --- a/src/cpu/core_full/optable.h +++ b/src/cpu/core_full/optable.h @@ -181,8 +181,8 @@ static OpCode OpCodeTable[1024]={ {L_MODRM ,0xb ,0 ,M_GRP },{L_MODRM ,0xc ,0 ,M_GRP }, /* 0x100 - 0x107 */ -{L_MODRM ,O_GRP6w ,0 ,0 },{L_MODRM ,O_GRP7w ,0 ,0 }, -{0 ,0 ,0 ,0 },{0 ,0 ,0 ,0 }, +{L_MODRM ,O_GRP6w ,S_Ew ,M_Ew },{L_MODRM ,O_GRP7w ,S_Ew ,M_Ew }, +{L_MODRM ,O_LAR ,S_Gw ,M_Ew },{0 ,0 ,0 ,0 }, {0 ,0 ,0 ,0 },{0 ,0 ,0 ,0 }, {0 ,0 ,0 ,0 },{0 ,0 ,0 ,0 }, /* 0x108 - 0x10f */ @@ -538,8 +538,8 @@ static OpCode OpCodeTable[1024]={ /* 0x300 - 0x307 */ -{L_MODRM ,O_GRP6d ,S_Ew ,M_Ew },{L_MODRM ,O_GRP7d ,0 ,0 }, -{L_MODRM ,O_LAR ,S_Gw ,M_Ew },{0 ,0 ,0 ,0 }, +{L_MODRM ,O_GRP6d ,S_Ew ,M_Ew },{L_MODRM ,O_GRP7d ,S_Ew ,M_Ew }, +{L_MODRM ,O_LAR ,S_Gd ,M_Ed },{0 ,0 ,0 ,0 }, {0 ,0 ,0 ,0 },{0 ,0 ,0 ,0 }, {0 ,0 ,0 ,0 },{0 ,0 ,0 ,0 }, /* 0x308 - 0x30f */