certain segment loading parameters are invalid (normal core);
add hlt entry in 32bit addressing mode (full core) Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3056
This commit is contained in:
parent
26722f8d4e
commit
57da409fe7
5 changed files with 31 additions and 11 deletions
|
@ -528,7 +528,7 @@ static OpCode OpCodeTable[1024]={
|
|||
/* 0x2f0 - 0x2f7 */
|
||||
{D_LOCK ,0 ,0 ,0 },{D_ICEBP ,0 ,0 ,0 },
|
||||
{L_PREREPNE ,0 ,0 ,0 },{L_PREREP ,0 ,0 ,0 },
|
||||
{0 ,0 ,0 ,0 },{D_CMC ,0 ,0 ,0 },
|
||||
{D_HLT ,0 ,0 ,0 },{D_CMC ,0 ,0 ,0 },
|
||||
{L_MODRM ,8 ,0 ,M_GRP },{L_MODRM ,0xa ,0 ,M_GRP },
|
||||
/* 0x2f8 - 0x2ff */
|
||||
{D_CLC ,0 ,0 ,0 },{D_STC ,0 ,0 ,0 },
|
||||
|
|
|
@ -344,7 +344,9 @@
|
|||
break;
|
||||
CASE_0F_W(0xb2) /* LSS Ew */
|
||||
{
|
||||
GetRMrw;GetEAa;
|
||||
GetRMrw;
|
||||
if (rm >= 0xc0) goto illegal_opcode;
|
||||
GetEAa;
|
||||
if (CPU_SetSegGeneral(ss,LoadMw(eaa+2))) RUNEXCEPTION();
|
||||
*rmrw=LoadMw(eaa);
|
||||
break;
|
||||
|
@ -367,14 +369,18 @@
|
|||
}
|
||||
CASE_0F_W(0xb4) /* LFS Ew */
|
||||
{
|
||||
GetRMrw;GetEAa;
|
||||
GetRMrw;
|
||||
if (rm >= 0xc0) goto illegal_opcode;
|
||||
GetEAa;
|
||||
if (CPU_SetSegGeneral(fs,LoadMw(eaa+2))) RUNEXCEPTION();
|
||||
*rmrw=LoadMw(eaa);
|
||||
break;
|
||||
}
|
||||
CASE_0F_W(0xb5) /* LGS Ew */
|
||||
{
|
||||
GetRMrw;GetEAa;
|
||||
GetRMrw;
|
||||
if (rm >= 0xc0) goto illegal_opcode;
|
||||
GetEAa;
|
||||
if (CPU_SetSegGeneral(gs,LoadMw(eaa+2))) RUNEXCEPTION();
|
||||
*rmrw=LoadMw(eaa);
|
||||
break;
|
||||
|
|
|
@ -462,14 +462,18 @@
|
|||
continue;
|
||||
CASE_D(0xc4) /* LES */
|
||||
{
|
||||
GetRMrd;GetEAa;
|
||||
GetRMrd;
|
||||
if (rm >= 0xc0) goto illegal_opcode;
|
||||
GetEAa;
|
||||
if (CPU_SetSegGeneral(es,LoadMw(eaa+4))) RUNEXCEPTION();
|
||||
*rmrd=LoadMd(eaa);
|
||||
break;
|
||||
}
|
||||
CASE_D(0xc5) /* LDS */
|
||||
{
|
||||
GetRMrd;GetEAa;
|
||||
GetRMrd;
|
||||
if (rm >= 0xc0) goto illegal_opcode;
|
||||
GetEAa;
|
||||
if (CPU_SetSegGeneral(ds,LoadMw(eaa+4))) RUNEXCEPTION();
|
||||
*rmrd=LoadMd(eaa);
|
||||
break;
|
||||
|
|
|
@ -237,7 +237,9 @@
|
|||
}
|
||||
CASE_0F_D(0xb2) /* LSS Ed */
|
||||
{
|
||||
GetRMrd;GetEAa;
|
||||
GetRMrd;
|
||||
if (rm >= 0xc0) goto illegal_opcode;
|
||||
GetEAa;
|
||||
if (CPU_SetSegGeneral(ss,LoadMw(eaa+4))) RUNEXCEPTION();
|
||||
*rmrd=LoadMd(eaa);
|
||||
break;
|
||||
|
@ -260,14 +262,18 @@
|
|||
}
|
||||
CASE_0F_D(0xb4) /* LFS Ed */
|
||||
{
|
||||
GetRMrd;GetEAa;
|
||||
GetRMrd;
|
||||
if (rm >= 0xc0) goto illegal_opcode;
|
||||
GetEAa;
|
||||
if (CPU_SetSegGeneral(fs,LoadMw(eaa+4))) RUNEXCEPTION();
|
||||
*rmrd=LoadMd(eaa);
|
||||
break;
|
||||
}
|
||||
CASE_0F_D(0xb5) /* LGS Ed */
|
||||
{
|
||||
GetRMrd;GetEAa;
|
||||
GetRMrd;
|
||||
if (rm >= 0xc0) goto illegal_opcode;
|
||||
GetEAa;
|
||||
if (CPU_SetSegGeneral(gs,LoadMw(eaa+4))) RUNEXCEPTION();
|
||||
*rmrd=LoadMd(eaa);
|
||||
break;
|
||||
|
|
|
@ -687,14 +687,18 @@
|
|||
continue;
|
||||
CASE_W(0xc4) /* LES */
|
||||
{
|
||||
GetRMrw;GetEAa;
|
||||
GetRMrw;
|
||||
if (rm >= 0xc0) goto illegal_opcode;
|
||||
GetEAa;
|
||||
if (CPU_SetSegGeneral(es,LoadMw(eaa+2))) RUNEXCEPTION();
|
||||
*rmrw=LoadMw(eaa);
|
||||
break;
|
||||
}
|
||||
CASE_W(0xc5) /* LDS */
|
||||
{
|
||||
GetRMrw;GetEAa;
|
||||
GetRMrw;
|
||||
if (rm >= 0xc0) goto illegal_opcode;
|
||||
GetEAa;
|
||||
if (CPU_SetSegGeneral(ds,LoadMw(eaa+2))) RUNEXCEPTION();
|
||||
*rmrw=LoadMw(eaa);
|
||||
break;
|
||||
|
|
Loading…
Add table
Reference in a new issue