added yet more names, almost done!

This commit is contained in:
Anselm Levskaya 2011-12-23 22:21:17 -08:00
parent ba06acb66d
commit d4984fa44c

View File

@ -3685,7 +3685,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
}
/* used only in CALLF, and InterruptF in paged mode */
function ge(he) {
var ie, Rb, je, ke, le;
if (!(cpu.tr.flags & (1 << 15)))
@ -3709,7 +3709,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
return [ke, le];
}
function do_interrupt_paged_mode(intno, ne, error_code, oe, pe) {
var descriptor_table, qe, ie, he, selector, re, se;
var descriptor_table, qe, ie, he, selector, re, cpl_var;
var te, ue, je;
var e, descriptor_low4bytes, descriptor_high4bytes, ve, ke, le, we, xe;
var ye, SS_mask;
@ -3752,8 +3752,8 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
break;
}
he = (descriptor_high4bytes >> 13) & 3;
se = cpu.cpl;
if (ne && he < se)
cpl_var = cpu.cpl;
if (ne && he < cpl_var)
abort_with_error_code(13, intno * 8 + 2);
if (!(descriptor_high4bytes & (1 << 15)))
abort_with_error_code(11, intno * 8 + 2);
@ -3769,11 +3769,11 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
if (!(descriptor_high4bytes & (1 << 12)) || !(descriptor_high4bytes & ((1 << 11))))
abort_with_error_code(13, selector & 0xfffc);
he = (descriptor_high4bytes >> 13) & 3;
if (he > se)
if (he > cpl_var)
abort_with_error_code(13, selector & 0xfffc);
if (!(descriptor_high4bytes & (1 << 15)))
abort_with_error_code(11, selector & 0xfffc);
if (!(descriptor_high4bytes & (1 << 10)) && he < se) {
if (!(descriptor_high4bytes & (1 << 10)) && he < cpl_var) {
e = ge(he);
ke = e[0];
le = e[1];
@ -3796,14 +3796,14 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
ue = 1;
SS_mask = SS_mask_from_flags(xe);
qe = calculate_descriptor_base(we, xe);
} else if ((descriptor_high4bytes & (1 << 10)) || he == se) {
} else if ((descriptor_high4bytes & (1 << 10)) || he == cpl_var) {
if (cpu.eflags & 0x00020000)
abort_with_error_code(13, selector & 0xfffc);
ue = 0;
SS_mask = SS_mask_from_flags(cpu.segs[2].flags);
qe = cpu.segs[2].base;
le = regs[4];
he = se;
he = cpl_var;
} else {
abort_with_error_code(13, selector & 0xfffc);
ue = 0;
@ -4070,13 +4070,13 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
}
cpu.tr.selector = selector;
}
function Fe(Ge, selector) {
var descriptor_low4bytes, descriptor_high4bytes, se, he, He, descriptor_table, Rb;
se = cpu.cpl;
function Fe(register, selector) {
var descriptor_low4bytes, descriptor_high4bytes, cpl_var, he, He, descriptor_table, Rb;
cpl_var = cpu.cpl;
if ((selector & 0xfffc) == 0) {
if (Ge == 2)
if (register == 2)
abort_with_error_code(13, 0);
set_segment_vars(Ge, selector, 0, 0, 0);
set_segment_vars(register, selector, 0, 0, 0);
} else {
if (selector & 0x4)
descriptor_table = cpu.ldt;
@ -4093,21 +4093,21 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
abort_with_error_code(13, selector & 0xfffc);
He = selector & 3;
he = (descriptor_high4bytes >> 13) & 3;
if (Ge == 2) {
if (register == 2) {
if ((descriptor_high4bytes & (1 << 11)) || !(descriptor_high4bytes & (1 << 9)))
abort_with_error_code(13, selector & 0xfffc);
if (He != se || he != se)
if (He != cpl_var || he != cpl_var)
abort_with_error_code(13, selector & 0xfffc);
} else {
if ((descriptor_high4bytes & ((1 << 11) | (1 << 9))) == (1 << 11))
abort_with_error_code(13, selector & 0xfffc);
if (!(descriptor_high4bytes & (1 << 11)) || !(descriptor_high4bytes & (1 << 10))) {
if (he < se || he < He)
if (he < cpl_var || he < He)
abort_with_error_code(13, selector & 0xfffc);
}
}
if (!(descriptor_high4bytes & (1 << 15))) {
if (Ge == 2)
if (register == 2)
abort_with_error_code(12, selector & 0xfffc);
else
abort_with_error_code(11, selector & 0xfffc);
@ -4116,20 +4116,20 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
descriptor_high4bytes |= (1 << 8);
st32_mem8_kernel_write(descriptor_high4bytes);
}
set_segment_vars(Ge, selector, calculate_descriptor_base(descriptor_low4bytes, descriptor_high4bytes), calculate_descriptor_limit(descriptor_low4bytes, descriptor_high4bytes), descriptor_high4bytes);
set_segment_vars(register, selector, calculate_descriptor_base(descriptor_low4bytes, descriptor_high4bytes), calculate_descriptor_limit(descriptor_low4bytes, descriptor_high4bytes), descriptor_high4bytes);
}
}
function Ie(Ge, selector) {
function Ie(register, selector) {
var descriptor_table;
selector &= 0xffff;
if (!(cpu.cr0 & (1 << 0))) {
descriptor_table = cpu.segs[Ge];
descriptor_table = cpu.segs[register];
descriptor_table.selector = selector;
descriptor_table.base = selector << 4;
} else if (cpu.eflags & 0x00020000) {
init_segment_vars_with_selector(Ge, selector);
init_segment_vars_with_selector(register, selector);
} else {
Fe(Ge, selector);
Fe(register, selector);
}
}
function Je(Ke, Le) {
@ -4139,7 +4139,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
init_segment_local_vars();
}
function Me(Ke, Le) {
var Ne, ie, descriptor_low4bytes, descriptor_high4bytes, se, he, He, limit, e;
var Ne, ie, descriptor_low4bytes, descriptor_high4bytes, cpl_var, he, He, limit, e;
if ((Ke & 0xfffc) == 0)
abort_with_error_code(13, 0);
e = load_from_descriptor_table(Ke);
@ -4147,19 +4147,19 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
abort_with_error_code(13, Ke & 0xfffc);
descriptor_low4bytes = e[0];
descriptor_high4bytes = e[1];
se = cpu.cpl;
cpl_var = cpu.cpl;
if (descriptor_high4bytes & (1 << 12)) {
if (!(descriptor_high4bytes & (1 << 11)))
abort_with_error_code(13, Ke & 0xfffc);
he = (descriptor_high4bytes >> 13) & 3;
if (descriptor_high4bytes & (1 << 10)) {
if (he > se)
if (he > cpl_var)
abort_with_error_code(13, Ke & 0xfffc);
} else {
He = Ke & 3;
if (He > se)
if (He > cpl_var)
abort_with_error_code(13, Ke & 0xfffc);
if (he != se)
if (he != cpl_var)
abort_with_error_code(13, Ke & 0xfffc);
}
if (!(descriptor_high4bytes & (1 << 15)))
@ -4167,7 +4167,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
limit = calculate_descriptor_limit(descriptor_low4bytes, descriptor_high4bytes);
if ((Le >>> 0) > (limit >>> 0))
abort_with_error_code(13, Ke & 0xfffc);
set_segment_vars(1, (Ke & 0xfffc) | se, calculate_descriptor_base(descriptor_low4bytes, descriptor_high4bytes), limit, descriptor_high4bytes);
set_segment_vars(1, (Ke & 0xfffc) | cpl_var, calculate_descriptor_base(descriptor_low4bytes, descriptor_high4bytes), limit, descriptor_high4bytes);
eip = Le, physmem8_ptr = initial_mem_ptr = 0;
} else {
cpu_abort("unsupported jump to call or task gate");
@ -4180,18 +4180,21 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
Me(Ke, Le);
}
}
function Pe(Ge, se) {
/* used only in do_return_paged_mode */
function Pe(register, cpl_var) {
var he, descriptor_high4bytes;
if ((Ge == 4 || Ge == 5) && (cpu.segs[Ge].selector & 0xfffc) == 0)
if ((register == 4 || register == 5) && (cpu.segs[register].selector & 0xfffc) == 0)
return;
descriptor_high4bytes = cpu.segs[Ge].flags;
descriptor_high4bytes = cpu.segs[register].flags;
he = (descriptor_high4bytes >> 13) & 3;
if (!(descriptor_high4bytes & (1 << 11)) || !(descriptor_high4bytes & (1 << 10))) {
if (he < se) {
set_segment_vars(Ge, 0, 0, 0, 0);
if (he < cpl_var) {
set_segment_vars(register, 0, 0, 0, 0);
}
}
}
function op_CALLF_not_paged_mode(je, Ke, Le, oe) {
var le;
le = regs[4];
@ -4226,7 +4229,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
}
function op_CALLF_paged_mode(je, Ke, Le, oe) {
var ue, i, e;
var descriptor_low4bytes, descriptor_high4bytes, se, he, He, selector, ve, Se;
var descriptor_low4bytes, descriptor_high4bytes, cpl_var, he, He, selector, ve, Se;
var ke, we, xe, Te, ie, re, SS_mask;
var x, limit, Ue;
var qe, Ve, We;
@ -4237,20 +4240,20 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
abort_with_error_code(13, Ke & 0xfffc);
descriptor_low4bytes = e[0];
descriptor_high4bytes = e[1];
se = cpu.cpl;
cpl_var = cpu.cpl;
We = regs[4];
if (descriptor_high4bytes & (1 << 12)) {
if (!(descriptor_high4bytes & (1 << 11)))
abort_with_error_code(13, Ke & 0xfffc);
he = (descriptor_high4bytes >> 13) & 3;
if (descriptor_high4bytes & (1 << 10)) {
if (he > se)
if (he > cpl_var)
abort_with_error_code(13, Ke & 0xfffc);
} else {
He = Ke & 3;
if (He > se)
if (He > cpl_var)
abort_with_error_code(13, Ke & 0xfffc);
if (he != se)
if (he != cpl_var)
abort_with_error_code(13, Ke & 0xfffc);
}
if (!(descriptor_high4bytes & (1 << 15)))
@ -4286,7 +4289,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
if (Le > limit)
abort_with_error_code(13, Ke & 0xfffc);
regs[4] = (regs[4] & ~SS_mask) | ((Te) & SS_mask);
set_segment_vars(1, (Ke & 0xfffc) | se, calculate_descriptor_base(descriptor_low4bytes, descriptor_high4bytes), limit, descriptor_high4bytes);
set_segment_vars(1, (Ke & 0xfffc) | cpl_var, calculate_descriptor_base(descriptor_low4bytes, descriptor_high4bytes), limit, descriptor_high4bytes);
eip = Le, physmem8_ptr = initial_mem_ptr = 0;
}
} else {
@ -4307,7 +4310,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
break;
}
je = ie >> 3;
if (he < se || he < He)
if (he < cpl_var || he < He)
abort_with_error_code(13, Ke & 0xfffc);
if (!(descriptor_high4bytes & (1 << 15)))
abort_with_error_code(11, Ke & 0xfffc);
@ -4324,11 +4327,11 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
if (!(descriptor_high4bytes & (1 << 12)) || !(descriptor_high4bytes & ((1 << 11))))
abort_with_error_code(13, selector & 0xfffc);
he = (descriptor_high4bytes >> 13) & 3;
if (he > se)
if (he > cpl_var)
abort_with_error_code(13, selector & 0xfffc);
if (!(descriptor_high4bytes & (1 << 15)))
abort_with_error_code(11, selector & 0xfffc);
if (!(descriptor_high4bytes & (1 << 10)) && he < se) {
if (!(descriptor_high4bytes & (1 << 10)) && he < cpl_var) {
e = ge(he);
ke = e[0];
Te = e[1];
@ -4497,7 +4500,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
var Ke, df, gf;
var hf, jf, kf, lf;
var e, descriptor_low4bytes, descriptor_high4bytes, we, xe;
var se, he, He, ef, iopl;
var cpl_var, he, He, ef, iopl;
var qe, Te, Le, wd, SS_mask;
SS_mask = SS_mask_from_flags(cpu.segs[2].flags);
Te = regs[4];
@ -4591,9 +4594,9 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
descriptor_high4bytes = e[1];
if (!(descriptor_high4bytes & (1 << 12)) || !(descriptor_high4bytes & (1 << 11)))
abort_with_error_code(13, Ke & 0xfffc);
se = cpu.cpl;
cpl_var = cpu.cpl;
He = Ke & 3;
if (He < se)
if (He < cpl_var)
abort_with_error_code(13, Ke & 0xfffc);
he = (descriptor_high4bytes >> 13) & 3;
if (descriptor_high4bytes & (1 << 10)) {
@ -4606,7 +4609,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
if (!(descriptor_high4bytes & (1 << 15)))
abort_with_error_code(11, Ke & 0xfffc);
Te = (Te + cf) & -1;
if (He == se) {
if (He == cpl_var) {
set_segment_vars(1, Ke, calculate_descriptor_base(descriptor_low4bytes, descriptor_high4bytes), calculate_descriptor_limit(descriptor_low4bytes, descriptor_high4bytes), descriptor_high4bytes);
} else {
if (je == 1) {
@ -4666,10 +4669,10 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
eip = Le, physmem8_ptr = initial_mem_ptr = 0;
if (bf) {
ef = 0x00000100 | 0x00040000 | 0x00200000 | 0x00010000 | 0x00004000;
if (se == 0)
if (cpl_var == 0)
ef |= 0x00003000;
iopl = (cpu.eflags >> 12) & 3;
if (se <= iopl)
if (cpl_var <= iopl)
ef |= 0x00000200;
if (je == 0)
ef &= 0xffff;
@ -4703,7 +4706,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
//utility function for op_LAR_LSL
function of(selector, pf) {
var e, descriptor_low4bytes, descriptor_high4bytes, He, he, se, ie;
var e, descriptor_low4bytes, descriptor_high4bytes, He, he, cpl_var, ie;
if ((selector & 0xfffc) == 0)
return null;
e = load_from_descriptor_table(selector);
@ -4713,11 +4716,11 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
descriptor_high4bytes = e[1];
He = selector & 3;
he = (descriptor_high4bytes >> 13) & 3;
se = cpu.cpl;
cpl_var = cpu.cpl;
if (descriptor_high4bytes & (1 << 12)) {
if ((descriptor_high4bytes & (1 << 11)) && (descriptor_high4bytes & (1 << 10))) {
} else {
if (he < se || he < He)
if (he < cpl_var || he < He)
return null;
}
} else {
@ -4738,7 +4741,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
default:
return null;
}
if (he < se || he < He)
if (he < cpl_var || he < He)
return null;
}
if (pf) {
@ -4776,7 +4779,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
//utility function for op_VERR_VERW
function rf(selector, ud) {
var e, descriptor_low4bytes, descriptor_high4bytes, He, he, se;
var e, descriptor_low4bytes, descriptor_high4bytes, He, he, cpl_var;
if ((selector & 0xfffc) == 0)
return 0;
e = load_from_descriptor_table(selector);
@ -4788,7 +4791,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
return 0;
He = selector & 3;
he = (descriptor_high4bytes >> 13) & 3;
se = cpu.cpl;
cpl_var = cpu.cpl;
if (descriptor_high4bytes & (1 << 11)) {
if (ud) {
return 0;
@ -4796,12 +4799,12 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
if (!(descriptor_high4bytes & (1 << 9)))
return 1;
if (!(descriptor_high4bytes & (1 << 10))) {
if (he < se || he < He)
if (he < cpl_var || he < He)
return 0;
}
}
} else {
if (he < se || he < He)
if (he < cpl_var || he < He)
return 0;
if (ud && !(descriptor_high4bytes & (1 << 9)))
return 0;
@ -4989,7 +4992,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
if (z < x || z > y)
abort(5);
}
function If() {
function op_16_BOUND() {
var mem8, x, y, z;
mem8 = phys_mem8[physmem8_ptr++];
if ((mem8 >> 3) == 3)
@ -5003,7 +5006,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
if (z < x || z > y)
abort(5);
}
function Jf() {
function op_16_PUSHA() {
var x, y, reg_idx1;
y = (regs[4] - 16) >> 0;
mem8_loc = ((y & SS_mask) + SS_base) >> 0;
@ -5014,7 +5017,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
}
regs[4] = (regs[4] & ~SS_mask) | ((y) & SS_mask);
}
function Kf() {
function op_PUSHA() {
var x, y, reg_idx1;
y = (regs[4] - 32) >> 0;
mem8_loc = ((y & SS_mask) + SS_base) >> 0;
@ -5025,7 +5028,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
}
regs[4] = (regs[4] & ~SS_mask) | ((y) & SS_mask);
}
function Lf() {
function op_16_POPA() {
var reg_idx1;
mem8_loc = ((regs[4] & SS_mask) + SS_base) >> 0;
for (reg_idx1 = 7; reg_idx1 >= 0; reg_idx1--) {
@ -5036,7 +5039,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
}
regs[4] = (regs[4] & ~SS_mask) | ((regs[4] + 16) & SS_mask);
}
function Mf() {
function op_POPA() {
var reg_idx1;
mem8_loc = ((regs[4] & SS_mask) + SS_base) >> 0;
for (reg_idx1 = 7; reg_idx1 >= 0; reg_idx1--) {
@ -5047,7 +5050,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
}
regs[4] = (regs[4] & ~SS_mask) | ((regs[4] + 32) & SS_mask);
}
function Nf() {
function op_16_LEAVE() {
var x, y;
y = regs[5];
mem8_loc = ((y & SS_mask) + SS_base) >> 0;
@ -5055,7 +5058,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
set_lower_word_in_register(5, x);
regs[4] = (regs[4] & ~SS_mask) | ((y + 2) & SS_mask);
}
function Of() {
function op_LEAVE() {
var x, y;
y = regs[5];
mem8_loc = ((y & SS_mask) + SS_base) >> 0;
@ -5063,7 +5066,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
regs[5] = x;
regs[4] = (regs[4] & ~SS_mask) | ((y + 4) & SS_mask);
}
function Pf() {
function op_16_ENTER() {
var cf, Qf, le, Rf, x, Sf;
cf = ld16_mem8_direct();
Qf = phys_mem8[physmem8_ptr++];
@ -5100,7 +5103,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
regs[5] = (regs[5] & ~SS_mask) | (Sf & SS_mask);
regs[4] = le;
}
function Tf() {
function op_ENTER() {
var cf, Qf, le, Rf, x, Sf;
cf = ld16_mem8_direct();
Qf = phys_mem8[physmem8_ptr++];
@ -5137,7 +5140,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
regs[5] = (regs[5] & ~SS_mask) | (Sf & SS_mask);
regs[4] = (regs[4] & ~SS_mask) | ((le) & SS_mask);
}
function Uf(Sb) {
function op_16_load_far_pointer32(Sb) {
var x, y, mem8;
mem8 = phys_mem8[physmem8_ptr++];
if ((mem8 >> 3) == 3)
@ -5149,7 +5152,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
Ie(Sb, y);
regs[(mem8 >> 3) & 7] = x;
}
function Vf(Sb) {
function op_16_load_far_pointer16(Sb) {
var x, y, mem8;
mem8 = phys_mem8[physmem8_ptr++];
if ((mem8 >> 3) == 3)
@ -5389,7 +5392,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
regs[7] = (Yf & ~Xf) | ((Yf + (cpu.df << 0)) & Xf);
}
}
function jg() {
function op_16_INS() {
var Xf, Yf, Zf, ag, iopl, x;
iopl = (cpu.eflags >> 12) & 3;
if (cpu.cpl > iopl)
@ -5418,7 +5421,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
regs[7] = (Yf & ~Xf) | ((Yf + (cpu.df << 1)) & Xf);
}
}
function kg() {
function op_16_OUTS() {
var Xf, cg, Sb, ag, Zf, iopl, x;
iopl = (cpu.eflags >> 12) & 3;
if (cpu.cpl > iopl)
@ -5452,7 +5455,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
regs[6] = (cg & ~Xf) | ((cg + (cpu.df << 1)) & Xf);
}
}
function lg() {
function op_16_MOVS() {
var Xf, Yf, cg, ag, Sb, eg;
if (CS_flags & 0x0080)
Xf = 0xffff;
@ -5489,7 +5492,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
regs[7] = (Yf & ~Xf) | ((Yf + (cpu.df << 1)) & Xf);
}
}
function mg() {
function op_16_STOS() {
var Xf, Yf, ag;
if (CS_flags & 0x0080)
Xf = 0xffff;
@ -5513,7 +5516,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
regs[7] = (Yf & ~Xf) | ((Yf + (cpu.df << 1)) & Xf);
}
}
function ng() {
function op_16_CMPS() {
var Xf, Yf, cg, ag, Sb, eg;
if (CS_flags & 0x0080)
Xf = 0xffff;
@ -5557,7 +5560,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
regs[7] = (Yf & ~Xf) | ((Yf + (cpu.df << 1)) & Xf);
}
}
function og() {
function op_16_LODS() {
var Xf, cg, Sb, ag, x;
if (CS_flags & 0x0080)
Xf = 0xffff;
@ -5586,7 +5589,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
regs[6] = (cg & ~Xf) | ((cg + (cpu.df << 1)) & Xf);
}
}
function pg() {
function op_16_SCAS() {
var Xf, Yf, ag, x;
if (CS_flags & 0x0080)
Xf = 0xffff;
@ -6248,10 +6251,10 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
}
break EXEC_LOOP;
case 0xc4://LES Mp ES Load Far Pointer
Uf(0);
op_16_load_far_pointer32(0);
break EXEC_LOOP;
case 0xc5://LDS Mp DS Load Far Pointer
Uf(3);
op_16_load_far_pointer32(3);
break EXEC_LOOP;
case 0x00://ADD Gb Eb Add
case 0x08://OR Gb Eb Logical Inclusive OR
@ -6970,10 +6973,10 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
break EXEC_LOOP;
case 0x60://PUSHA AX SS:[rSP] Push All General-Purpose Registers
Kf();
op_PUSHA();
break EXEC_LOOP;
case 0x61://POPA SS:[rSP] DI Pop All General-Purpose Registers
Mf();
op_POPA();
break EXEC_LOOP;
case 0x8f://POP SS:[rSP] Ev Pop a Value from the Stack
mem8 = phys_mem8[physmem8_ptr++];
@ -7016,7 +7019,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
}
break EXEC_LOOP;
case 0xc8://ENTER Iw SS:[rSP] Make Stack Frame for Procedure Parameters
Tf();
op_ENTER();
break EXEC_LOOP;
case 0xc9://LEAVE SS:[rSP] eBP High Level Procedure Exit
if (FS_usage_flag) {
@ -7025,7 +7028,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
regs[5] = x;
regs[4] = (mem8_loc + 4) >> 0;
} else {
Of();
op_LEAVE();
}
break EXEC_LOOP;
case 0x9c://PUSHF Flags SS:[rSP] Push FLAGS Register onto the Stack
@ -8036,7 +8039,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
case 0xb2://LSS Mptp SS Load Far Pointer
case 0xb4://LFS Mptp FS Load Far Pointer
case 0xb5://LGS Mptp GS Load Far Pointer
Uf(OPbyte & 7);
op_16_load_far_pointer32(OPbyte & 7);
break EXEC_LOOP;
case 0xa2://CPUID IA32_BIOS_SIGN_ID CPU Identification
op_CPUID();
@ -8549,10 +8552,10 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
set_lower_word_in_register(reg_idx1, x);
break EXEC_LOOP;
case 0x1c4://LES Mp ES Load Far Pointer
Vf(0);
op_16_load_far_pointer16(0);
break EXEC_LOOP;
case 0x1c5://LDS Mp DS Load Far Pointer
Vf(3);
op_16_load_far_pointer16(3);
break EXEC_LOOP;
case 0x101://ADD Gvqp Evqp Add
case 0x109://OR Gvqp Evqp Logical Inclusive OR
@ -8874,10 +8877,10 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
set_lower_word_in_register(OPbyte & 7, x);
break EXEC_LOOP;
case 0x160://PUSHA AX SS:[rSP] Push All General-Purpose Registers
Jf();
op_16_PUSHA();
break EXEC_LOOP;
case 0x161://POPA SS:[rSP] DI Pop All General-Purpose Registers
Lf();
op_16_POPA();
break EXEC_LOOP;
case 0x18f://POP SS:[rSP] Ev Pop a Value from the Stack
mem8 = phys_mem8[physmem8_ptr++];
@ -8905,10 +8908,10 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
push_word_to_stack(x);
break EXEC_LOOP;
case 0x1c8://ENTER Iw SS:[rSP] Make Stack Frame for Procedure Parameters
Pf();
op_16_ENTER();
break EXEC_LOOP;
case 0x1c9://LEAVE SS:[rSP] eBP High Level Procedure Exit
Nf();
op_16_LEAVE();
break EXEC_LOOP;
case 0x106://PUSH ES SS:[rSP] Push Word, Doubleword or Quadword Onto the Stack
case 0x10e://PUSH CS SS:[rSP] Push Word, Doubleword or Quadword Onto the Stack
@ -9046,32 +9049,32 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
eip = (eip + physmem8_ptr - initial_mem_ptr + x) & 0xffff, physmem8_ptr = initial_mem_ptr = 0;
break EXEC_LOOP;
case 0x162://BOUND Gv SS:[rSP] Check Array Index Against Bounds
If();
op_16_BOUND();
break EXEC_LOOP;
case 0x1a5://MOVS DS:[SI] ES:[DI] Move Data from String to String
lg();
op_16_MOVS();
break EXEC_LOOP;
case 0x1a7://CMPS ES:[DI] Compare String Operands
ng();
op_16_CMPS();
break EXEC_LOOP;
case 0x1ad://LODS DS:[SI] AX Load String
og();
op_16_LODS();
break EXEC_LOOP;
case 0x1af://SCAS ES:[DI] Scan String
pg();
op_16_SCAS();
break EXEC_LOOP;
case 0x1ab://STOS AX ES:[DI] Store String
mg();
op_16_STOS();
break EXEC_LOOP;
case 0x16d://INS DX ES:[DI] Input from Port to String
jg();
op_16_INS();
{
if (cpu.hard_irq != 0 && (cpu.eflags & 0x00000200))
break OUTER_LOOP;
}
break EXEC_LOOP;
case 0x16f://OUTS DS:[SI] DX Output String to Port
kg();
op_16_OUTS();
{
if (cpu.hard_irq != 0 && (cpu.eflags & 0x00000200))
break OUTER_LOOP;
@ -9357,7 +9360,7 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
case 0x1b2://LSS Mptp SS Load Far Pointer
case 0x1b4://LFS Mptp FS Load Far Pointer
case 0x1b5://LGS Mptp GS Load Far Pointer
Vf(OPbyte & 7);
op_16_load_far_pointer16(OPbyte & 7);
break EXEC_LOOP;
case 0x1a4://SHLD Gvqp Evqp Double Precision Shift Left
case 0x1ac://SHRD Gvqp Evqp Double Precision Shift Right
@ -9770,6 +9773,27 @@ CPU_X86.prototype.load_binary = function(url, mem8_loc) {