1
0
Fork 0

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:
Sebastian Strohhäcker 2007-12-08 10:24:41 +00:00
parent 26722f8d4e
commit 57da409fe7
5 changed files with 31 additions and 11 deletions

View file

@ -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 },

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;