Tweaks
This commit is contained in:
parent
f2cb4dc18d
commit
ea04535880
2 changed files with 8 additions and 28 deletions
|
|
@ -1272,7 +1272,7 @@ X86.aOps0F[0x05] = X86.opLOADALL;
|
||||||
X86.aOps0F[0x06] = X86.opCLTS;
|
X86.aOps0F[0x06] = X86.opCLTS;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On all processors (except the 8086/8088, of course), 0x0F,0x0B is also referred to as "UD2": an
|
* On all processors (except the 8086/8088, of course), X86.OPCODE.UD2 (0x0F,0x0B), aka "UD2", is an
|
||||||
* instruction guaranteed to raise a #UD (Invalid Opcode) exception (INT 0x06) on all future x86 processors.
|
* instruction guaranteed to raise a #UD (Invalid Opcode) exception (INT 0x06) on all future x86 processors.
|
||||||
*/
|
*/
|
||||||
X86.aOps0F[0x0B] = X86.opInvalid;
|
X86.aOps0F[0x0B] = X86.opInvalid;
|
||||||
|
|
|
||||||
|
|
@ -3263,24 +3263,7 @@ X86.opMOVw = function MOVw()
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* op=0xC8 (ENTER imm,imm8) (80186/80188 and up)
|
* op=0xC8 (ENTER imm16,imm8) (80186/80188 and up)
|
||||||
*
|
|
||||||
* Here's the pseudo-code from http://www.pcjs.org/pubs/pc/reference/intel/80286/progref, p.B-40 (p.250):
|
|
||||||
*
|
|
||||||
* LEVEL := LEVEL MOD 32
|
|
||||||
* Push BP
|
|
||||||
* Set a temporary value FRAME_PTR := SP
|
|
||||||
* If LEVEL > 0 then
|
|
||||||
* Repeat (LEVEL-1) times:
|
|
||||||
* BP := BP - 2
|
|
||||||
* Push the word pointed to by BP
|
|
||||||
* End repeat
|
|
||||||
* Push FRAME_PTR
|
|
||||||
* End if
|
|
||||||
* BP := FRAME_PTR
|
|
||||||
* SP := SP - first operand
|
|
||||||
*
|
|
||||||
* TODO: Verify that this pseudo-code is identical on the 80186/80188 (eg, is LEVEL MOD 32 performed in both instances?)
|
|
||||||
*
|
*
|
||||||
* @this {X86CPU}
|
* @this {X86CPU}
|
||||||
*/
|
*/
|
||||||
|
|
@ -3294,24 +3277,22 @@ X86.opENTER = function ENTER()
|
||||||
*/
|
*/
|
||||||
this.nStepCycles -= 11;
|
this.nStepCycles -= 11;
|
||||||
this.pushWord(this.regEBP);
|
this.pushWord(this.regEBP);
|
||||||
var wFrame = this.getSP() & this.segSS.addrMask;
|
var wFrame = this.getSP() & this.dataMask;
|
||||||
if (bLevel > 0) {
|
if (bLevel > 0) {
|
||||||
this.nStepCycles -= (bLevel << 2) + (bLevel > 1? 1 : 0);
|
this.nStepCycles -= (bLevel << 2) + (bLevel > 1? 1 : 0);
|
||||||
while (--bLevel) {
|
while (--bLevel) {
|
||||||
this.regEBP = (this.regEBP & ~this.segSS.addrMask) | ((this.regEBP - this.dataSize) & this.segSS.addrMask);
|
this.regEBP = (this.regEBP & ~this.dataMask) | ((this.regEBP - this.dataSize) & this.dataMask);
|
||||||
this.pushWord(this.getSOWord(this.segSS, this.regEBP & this.segSS.addrMask));
|
this.pushWord(this.getSOWord(this.segSS, this.regEBP & this.dataMask));
|
||||||
}
|
}
|
||||||
this.pushWord(wFrame);
|
this.pushWord(wFrame);
|
||||||
}
|
}
|
||||||
this.regEBP = (this.regEBP & ~this.segSS.addrMask) | wFrame;
|
this.regEBP = (this.regEBP & ~this.dataMask) | wFrame;
|
||||||
this.setSP((this.getSP() & ~this.segSS.addrMask) | ((this.getSP() - wLocal) & this.segSS.addrMask));
|
this.setSP((this.getSP() & ~this.segSS.addrMask) | ((this.getSP() - wLocal) & this.segSS.addrMask));
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* op=0xC9 (LEAVE) (80186/80188 and up)
|
* op=0xC9 (LEAVE) (80186/80188 and up)
|
||||||
*
|
*
|
||||||
* Set SP to BP, then pop BP.
|
|
||||||
*
|
|
||||||
* @this {X86CPU}
|
* @this {X86CPU}
|
||||||
*/
|
*/
|
||||||
X86.opLEAVE = function LEAVE()
|
X86.opLEAVE = function LEAVE()
|
||||||
|
|
@ -3489,7 +3470,7 @@ X86.opAAD = function AAD()
|
||||||
*
|
*
|
||||||
* Sets AL to 0xFF if CF=1, 0x00 otherwise; no flags are affected (similar to SBB AL,AL, but without side-effects)
|
* Sets AL to 0xFF if CF=1, 0x00 otherwise; no flags are affected (similar to SBB AL,AL, but without side-effects)
|
||||||
*
|
*
|
||||||
* WARNING: I have no idea how many clocks this instruction originally consumed, so for now, I'm going with the minimum of 2.
|
* WARNING: I have no idea how many clocks this instruction originally required, so for now, I'm going with a minimum of 2.
|
||||||
*
|
*
|
||||||
* @this {X86CPU}
|
* @this {X86CPU}
|
||||||
*/
|
*/
|
||||||
|
|
@ -3581,7 +3562,7 @@ X86.opLOOP = function LOOP()
|
||||||
X86.opJCXZ = function JCXZ()
|
X86.opJCXZ = function JCXZ()
|
||||||
{
|
{
|
||||||
var disp = this.getIPDisp();
|
var disp = this.getIPDisp();
|
||||||
if (!this.regECX) {
|
if (!(this.regECX & this.addrMask)) {
|
||||||
this.setIP(this.getIP() + disp);
|
this.setIP(this.getIP() + disp);
|
||||||
this.nStepCycles -= this.cycleCounts.nOpCyclesLoopZ;
|
this.nStepCycles -= this.cycleCounts.nOpCyclesLoopZ;
|
||||||
return;
|
return;
|
||||||
|
|
@ -3833,7 +3814,6 @@ X86.opHLT = function HLT()
|
||||||
if (!this.getIF()) {
|
if (!this.getIF()) {
|
||||||
if (DEBUGGER && this.dbg) this.advanceIP(-1);
|
if (DEBUGGER && this.dbg) this.advanceIP(-1);
|
||||||
this.stopCPU();
|
this.stopCPU();
|
||||||
// return;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue