rendered paste body"use strict";
var aa = [1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1];
var ba = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];
var ca = [0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4];
function CPU_X86() {
var i, da;
this.regs = new Array();
for (i = 0; i < 8; i++) this.regs[i] = 0;
this.eip = 0;
this.cc_op = 0;
this.cc_dst = 0;
this.cc_src = 0;
this.cc_op2 = 0;
this.cc_dst2 = 0;
this.df = 1;
this.eflags = 0x2;
this.cycle_count = 0;
this.hard_irq = 0;
this.hard_intno = -1;
this.cpl = 0;
this.cr0 = (1 << 0);
this.cr2 = 0;
this.cr3 = 0;
this.cr4 = 0;
this.idt = {
base: 0,
limit: 0
};
this.gdt = {
base: 0,
limit: 0
};
this.segs = new Array();
for (i = 0; i < 6; i++) {
this.segs[i] = {
selector: 0,
base: 0,
limit: 0,
flags: 0
};
}
this.tr = {
selector: 0,
base: 0,
limit: 0,
flags: 0
};
this.ldt = {
selector: 0,
base: 0,
limit: 0,
flags: 0
};
this.halted = 0;
this.phys_mem = null;
da = 0x100000;
this.tlb_read_kernel = new Array();
this.tlb_write_kernel = new Array();
this.tlb_read_user = new Array();
this.tlb_write_user = new Array();
for (i = 0; i < da; i++) {
this.tlb_read_kernel[i] = -1;
this.tlb_write_kernel[i] = -1;
this.tlb_read_user[i] = -1;
this.tlb_write_user[i] = -1;
}
this.tlb_pages = new Array();
for (i = 0; i < 2048; i++) this.tlb_pages[i] = 0;
this.tlb_pages_count = 0;
}
CPU_X86.prototype.phys_mem_resize = function (ea) {
this.mem_size = ea;
var i, fa, ga, ha;
this.phys_mem8 = null;
ha = document.getElementById("dummy_canvas");
if (ha && ha.getContext) {
ga = ha.getContext("2d");
if (ga && ga.createImageData) {
this.phys_mem8 = ga.createImageData(1024, (ea + 4095) >> 12).data;
}
}
if (!this.phys_mem8) {
fa = this.phys_mem8 = new Array();
for (i = 0; i < ea; i++) fa[i] = 0;
}
};
CPU_X86.prototype.ld8_phys = function (ia) {
return this.phys_mem8[ia];
};
CPU_X86.prototype.st8_phys = function (ia, ja) {
this.phys_mem8[ia] = ja & 0xff;
};
CPU_X86.prototype.ld32_phys = function (ia) {
return this.phys_mem8[ia] | (this.phys_mem8[ia + 1] << 8) | (this.phys_mem8[ia + 2] << 16) | (this.phys_mem8[ia + 3] << 24);
};
CPU_X86.prototype.st32_phys = function (ia, ja) {
this.phys_mem8[ia] = ja & 0xff;
this.phys_mem8[ia + 1] = (ja >> 8) & 0xff;
this.phys_mem8[ia + 2] = (ja >> 16) & 0xff;
this.phys_mem8[ia + 3] = (ja >> 24) & 0xff;
};
CPU_X86.prototype.tlb_set_page = function (ia, ka, la, ma) {
var i, ja, j;
ka &= -4096;
ia &= -4096;
ja = ia ^ ka;
i = ia >>> 12;
if (this.tlb_read_kernel[i] == -1) {
if (this.tlb_pages_count >= 2048) {
this.tlb_flush_all1((i - 1) & 0xfffff);
}
this.tlb_pages[this.tlb_pages_count++] = i;
}
this.tlb_read_kernel[i] = ja;
if (la) {
this.tlb_write_kernel[i] = ja;
} else {
this.tlb_write_kernel[i] = -1;
}
if (ma) {
this.tlb_read_user[i] = ja;
if (la) {
this.tlb_write_user[i] = ja;
} else {
this.tlb_write_user[i] = -1;
}
} else {
this.tlb_read_user[i] = -1;
this.tlb_write_user[i] = -1;
}
};
CPU_X86.prototype.tlb_flush_page = function (ia) {
var i;
i = ia >>> 12;
this.tlb_read_kernel[i] = -1;
this.tlb_write_kernel[i] = -1;
this.tlb_read_user[i] = -1;
this.tlb_write_user[i] = -1;
};
CPU_X86.prototype.tlb_flush_all = function () {
var i, j, n, na;
na = this.tlb_pages;
n = this.tlb_pages_count;
for (j = 0; j < n; j++) {
i = na[j];
this.tlb_read_kernel[i] = -1;
this.tlb_write_kernel[i] = -1;
this.tlb_read_user[i] = -1;
this.tlb_write_user[i] = -1;
}
this.tlb_pages_count = 0;
};
CPU_X86.prototype.tlb_flush_all1 = function (oa) {
var i, j, n, na, pa;
na = this.tlb_pages;
n = this.tlb_pages_count;
pa = 0;
for (j = 0; j < n; j++) {
i = na[j];
if (i == oa) {
na[pa++] = i;
} else {
this.tlb_read_kernel[i] = -1;
this.tlb_write_kernel[i] = -1;
this.tlb_read_user[i] = -1;
this.tlb_write_user[i] = -1;
}
}
this.tlb_pages_count = pa;
};
CPU_X86.prototype.st8_N = function (ia, fa) {
var i;
for (i = 0; i < fa.length; i++) {
this.st8_phys(ia + i, fa[i]);
}
};
function qa(ja, n) {
var i, s;
var h = "0123456789ABCDEF";
s = "";
for (i = n - 1; i >= 0; i--) {
s = s + h[(ja >>> (i * 4)) & 15];
}
return s;
}
function ra(n) {
return qa(n, 8);
}
function sa(n) {
return qa(n, 2);
}
function ta(n) {
return qa(n, 4);
}
CPU_X86.prototype.dump = function () {
var i, ua, va;
var wa = [" ES", " CS", " SS", " DS", " FS", " GS", "LDT", " TR"];
console.log("TSC=" + ra(this.cycle_count) + " EIP=" + ra(this.eip) + "\nEAX=" + ra(this.regs[0]) + " ECX=" + ra(this.regs[1]) + " EDX=" + ra(this.regs[2]) + " EBX=" + ra(this.regs[3]) + " ESP=" + ra(this.regs[4]) + " EBP=" + ra(this.regs[5]));
console.log("ESI=" + ra(this.regs[6]) + " EDI=" + ra(this.regs[7]));
console.log("EFL=" + ra(this.eflags) + " OP=" + sa(this.cc_op) + " SRC=" + ra(this.cc_src) + " DST=" + ra(this.cc_dst) + " OP2=" + sa(this.cc_op2) + " DST2=" + ra(this.cc_dst2));
console.log("CPL=" + this.cpl + " CR0=" + ra(this.cr0) + " CR2=" + ra(this.cr2) + " CR3=" + ra(this.cr3) + " CR4=" + ra(this.cr4));
va = "";
for (i = 0; i < 8; i++) {
if (i == 6) ua = this.ldt;
else if (i == 7) ua = this.tr;
else ua = this.segs[i];
va += wa[i] + "=" + ta(ua.selector) + " " + ra(ua.base) + " " + ra(ua.limit) + " " + ta((ua.flags >> 8) & 0xf0ff);
if (i & 1) {
console.log(va);
va = "";
} else {
va += " ";
}
}
ua = this.gdt;
va = "GDT= " + ra(ua.base) + " " + ra(ua.limit) + " ";
ua = this.idt;
va += "IDT= " + ra(ua.base) + " " + ra(ua.limit);
console.log(va);
};
CPU_X86.prototype.exec_internal = function (xa, ya) {
var za, ia, Aa;
var Ba, Ca, Da, Ea, Fa;
var Ga, Ha, Ia, b, Ja, ja, Ka, La, Ma, Na, Oa, Pa;
var Qa, Ra;
var Sa, Ta, Ua, Va, Wa, Xa;
function Ya() {
var Za;
ab(ia, 0, za.cpl == 3);
Za = Wa[ia >>> 12] ^ ia;
return Qa[Za];
}
function bb() {
var Ra;
return (((Ra = Wa[ia >>> 12]) == -1) ? Ya() : Qa[ia ^ Ra]);
}
function cb() {
var ja;
ja = bb();
ia++;
ja |= bb() << 8;
ia--;
return ja;
}
function db() {
var Ra;
return (((Ra = Wa[ia >>> 12]) | ia) & 1 ? cb() : (Ra ^= ia, Qa[Ra] | (Qa[Ra + 1] << 8)));
}
function eb() {
var ja;
ja = bb();
ia++;
ja |= bb() << 8;
ia++;
ja |= bb() << 16;
ia++;
ja |= bb() << 24;
ia -= 3;
return ja;
}
function fb() {
var Ra;
return (((Ra = Wa[ia >>> 12]) | ia) & 3 ? eb() : (Ra ^= ia, Qa[Ra] | (Qa[Ra + 1] << 8) | (Qa[Ra + 2] << 16) | (Qa[Ra + 3] << 24)));
}
function gb() {
var Za;
ab(ia, 1, za.cpl == 3);
Za = Xa[ia >>> 12] ^ ia;
return Qa[Za];
}
function hb() {
var Za;
return ((Za = Xa[ia >>> 12]) == -1) ? gb() : Qa[ia ^ Za];
}
function ib() {
var ja;
ja = hb();
ia++;
ja |= hb() << 8;
ia--;
return ja;
}
function jb() {
var Za;
return ((Za = Xa[ia >>> 12]) | ia) & 1 ? ib() : (Za ^= ia, Qa[Za] | (Qa[Za + 1] << 8));
}
function kb() {
var ja;
ja = hb();
ia++;
ja |= hb() << 8;
ia++;
ja |= hb() << 16;
ia++;
ja |= hb() << 24;
ia -= 3;
return ja;
}
function lb() {
var Za;
return ((Za = Xa[ia >>> 12]) | ia) & 3 ? kb() : (Za ^= ia, Qa[Za] | (Qa[Za + 1] << 8) | (Qa[Za + 2] << 16) | (Qa[Za + 3] << 24));
}
function mb(ja) {
var Za;
ab(ia, 1, za.cpl == 3);
Za = Xa[ia >>> 12] ^ ia;
Qa[Za] = ja & 0xff;
}
function nb(ja) {
var Ra; {
Ra = Xa[ia >>> 12];
if (Ra == -1) {
mb(ja);
} else {
Qa[ia ^ Ra] = ja & 0xff;
}
};
}
function ob(ja) {
nb(ja);
ia++;
nb(ja >> 8);
ia--;
}
function pb(ja) {
var Ra; {
Ra = Xa[ia >>> 12];
if ((Ra | ia) & 1) {
ob(ja);
} else {
Ra ^= ia;
Qa[Ra] = ja & 0xff;
Qa[Ra + 1] = (ja >> 8) & 0xff;
}
};
}
function qb(ja) {
nb(ja);
ia++;
nb(ja >> 8);
ia++;
nb(ja >> 16);
ia++;
nb(ja >> 24);
ia -= 3;
}
function rb(ja) {
var Ra; {
Ra = Xa[ia >>> 12];
if ((Ra | ia) & 3) {
qb(ja);
} else {
Ra ^= ia;
Qa[Ra] = ja & 0xff;
Qa[Ra + 1] = (ja >> 8) & 0xff;
Qa[Ra + 2] = (ja >> 16) & 0xff;
Qa[Ra + 3] = (ja >> 24) & 0xff;
}
};
}
function sb() {
var Za;
ab(ia, 0, 0);
Za = Sa[ia >>> 12] ^ ia;
return Qa[Za];
}
function tb() {
var Za;
return ((Za = Sa[ia >>> 12]) == -1) ? sb() : Qa[ia ^ Za];
}
function ub() {
var ja;
ja = tb();
ia++;
ja |= tb() << 8;
ia--;
return ja;
}
function vb() {
var Za;
return ((Za = Sa[ia >>> 12]) | ia) & 1 ? ub() : (Za ^= ia, Qa[Za] | (Qa[Za + 1] << 8));
}
function wb() {
var ja;
ja = tb();
ia++;
ja |= tb() << 8;
ia++;
ja |= tb() << 16;
ia++;
ja |= tb() << 24;
ia -= 3;
return ja;
}
function xb() {
var Za;
return ((Za = Sa[ia >>> 12]) | ia) & 3 ? wb() : (Za ^= ia, Qa[Za] | (Qa[Za + 1] << 8) | (Qa[Za + 2] << 16) | (Qa[Za + 3] << 24));
}
function yb(ja) {
var Za;
ab(ia, 1, 0);
Za = Ta[ia >>> 12] ^ ia;
Qa[Za] = ja & 0xff;
}
function zb(ja) {
var Za;
Za = Ta[ia >>> 12];
if (Za == -1) {
yb(ja);
} else {
Qa[ia ^ Za] = ja & 0xff;
}
}
function Ab(ja) {
zb(ja);
ia++;
zb(ja >> 8);
ia--;
}
function Bb(ja) {
var Za;
Za = Ta[ia >>> 12];
if ((Za | ia) & 1) {
Ab(ja);
} else {
Za ^= ia;
Qa[Za] = ja & 0xff;
Qa[Za + 1] = (ja >> 8) & 0xff;
}
}
function Cb(ja) {
zb(ja);
ia++;
zb(ja >> 8);
ia++;
zb(ja >> 16);
ia++;
zb(ja >> 24);
ia -= 3;
}
function Db(ja) {
var Za;
Za = Ta[ia >>> 12];
if ((Za | ia) & 3) {
Cb(ja);
} else {
Za ^= ia;
Qa[Za] = ja & 0xff;
Qa[Za + 1] = (ja >> 8) & 0xff;
Qa[Za + 2] = (ja >> 16) & 0xff;
Qa[Za + 3] = (ja >> 24) & 0xff;
}
}
var Eb, Fb;
function Gb(ia) {
var Za;
ab(ia, 0, za.cpl == 3);
Za = Wa[ia >>> 12] ^ ia;
return Qa[Za];
}
function Hb() {
var ja, Ka;
ja = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
return ja | (Ka << 8);
}
function Ib() {
var ja, Ka, Za;
Za = Wa[Eb >>> 12];
if (((Eb | Za) & 0xfff) <= 4092) {
Za ^= Eb;
ja = Qa[Za] | (Qa[Za + 1] << 8) | (Qa[Za + 2] << 16) | (Qa[Za + 3] << 24);
Eb += 4;
} else {
ja = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja |= Ka << 8;
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja |= Ka << 16;
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja |= Ka << 24;
}
return ja;
}
function Jb(Ha, Kb) {
var base, ia, Lb, Mb;
switch ((Ha & 7) | ((Ha >> 3) & 0x18)) {
case 0x04:
Lb = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
base = Lb & 7;
if (base == 5) {
ia = Ib();
} else {
ia = Aa[base];
if (Kb && base == 4) ia = (ia + Kb) & -1;
}
Mb = (Lb >> 3) & 7;
if (Mb != 4) {
ia = (ia + (Aa[Mb] << (Lb >> 6))) & -1;
}
break;
case 0x0c:
Lb = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ia = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
base = Lb & 7;
ia = (ia + Aa[base]) & -1;
if (Kb && base == 4) ia = (ia + Kb) & -1;
Mb = (Lb >> 3) & 7;
if (Mb != 4) {
ia = (ia + (Aa[Mb] << (Lb >> 6))) & -1;
}
break;
case 0x14:
Lb = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ia = Ib();
base = Lb & 7;
ia = (ia + Aa[base]) & -1;
if (Kb && base == 4) ia = (ia + Kb) & -1;
Mb = (Lb >> 3) & 7;
if (Mb != 4) {
ia = (ia + (Aa[Mb] << (Lb >> 6))) & -1;
}
break;
case 0x05:
ia = Ib();
break;
case 0x00:
case 0x01:
case 0x02:
case 0x03:
case 0x06:
case 0x07:
base = Ha & 7;
ia = Aa[base];
break;
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0d:
case 0x0e:
case 0x0f:
ia = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
base = Ha & 7;
ia = (ia + Aa[base]) & -1;
break;
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x15:
case 0x16:
case 0x17:
ia = Ib();
base = Ha & 7;
ia = (ia + Aa[base]) & -1;
break;
default:
throw "get_modrm";
}
if (Ga & 0x000f) {
ia = (ia + za.segs[(Ga & 0x000f) - 1].base) & -1;
}
return ia;
}
function Nb() {
var ia;
ia = Ib();
if (Ga & 0x000f) {
ia = (ia + za.segs[(Ga & 0x000f) - 1].base) & -1;
}
return ia;
}
function Ob(Ja, ja) {
if (Ja & 4) Aa[Ja & 3] = (Aa[Ja & 3] & -65281) | ((ja & 0xff) << 8);
else Aa[Ja & 3] = (Aa[Ja & 3] & -256) | (ja & 0xff);
}
function Pb(Ja, ja) {
Aa[Ja] = (Aa[Ja] & -65536) | (ja & 0xffff);
}
function Qb(Ma, Rb, Sb) {
var Tb;
switch (Ma) {
case 0:
Ba = Sb;
Rb = (Rb + Sb) & -1;
Ca = Rb;
Da = 0;
break;
case 1:
Rb = Rb | Sb;
Ca = Rb;
Da = 12;
break;
case 2:
Tb = Ub(2);
Ba = Sb;
Rb = (Rb + Sb + Tb) & -1;
Ca = Rb;
Da = Tb ? 3 : 0;
break;
case 3:
Tb = Ub(2);
Ba = Sb;
Rb = (Rb - Sb - Tb) & -1;
Ca = Rb;
Da = Tb ? 9 : 6;
break;
case 4:
Rb = Rb & Sb;
Ca = Rb;
Da = 12;
break;
case 5:
Ba = Sb;
Rb = (Rb - Sb) & -1;
Ca = Rb;
Da = 6;
break;
case 6:
Rb = Rb ^ Sb;
Ca = Rb;
Da = 12;
break;
case 7:
Ba = Sb;
Ca = (Rb - Sb) & -1;
Da = 6;
break;
default:
throw "arith" + 8 + ": invalid op";
}
return Rb;
}
function Vb(ja) {
if (Da < 25) {
Ea = Da;
}
Fa = (ja + 1) & -1;
Da = 25;
return Fa;
}
function Wb(ja) {
if (Da < 25) {
Ea = Da;
}
Fa = (ja - 1) & -1;
Da = 28;
return Fa;
}
function Xb(Ma, Rb, Sb) {
var Tb;
switch (Ma) {
case 0:
Ba = Sb;
Rb = (Rb + Sb) & -1;
Ca = Rb;
Da = 1;
break;
case 1:
Rb = Rb | Sb;
Ca = Rb;
Da = 13;
break;
case 2:
Tb = Ub(2);
Ba = Sb;
Rb = (Rb + Sb + Tb) & -1;
Ca = Rb;
Da = Tb ? 4 : 1;
break;
case 3:
Tb = Ub(2);
Ba = Sb;
Rb = (Rb - Sb - Tb) & -1;
Ca = Rb;
Da = Tb ? 10 : 7;
break;
case 4:
Rb = Rb & Sb;
Ca = Rb;
Da = 13;
break;
case 5:
Ba = Sb;
Rb = (Rb - Sb) & -1;
Ca = Rb;
Da = 7;
break;
case 6:
Rb = Rb ^ Sb;
Ca = Rb;
Da = 13;
break;
case 7:
Ba = Sb;
Ca = (Rb - Sb) & -1;
Da = 7;
break;
default:
throw "arith" + 16 + ": invalid op";
}
return Rb;
}
function Yb(ja) {
if (Da < 25) {
Ea = Da;
}
Fa = (ja + 1) & -1;
Da = 26;
return Fa;
}
function Zb(ja) {
if (Da < 25) {
Ea = Da;
}
Fa = (ja - 1) & -1;
Da = 29;
return Fa;
}
function ac(Ma, Rb, Sb) {
var Tb;
switch (Ma) {
case 0:
Ba = Sb;
Rb = (Rb + Sb) & -1;
Ca = Rb;
Da = 2;
break;
case 1:
Rb = Rb | Sb;
Ca = Rb;
Da = 14;
break;
case 2:
Tb = Ub(2);
Ba = Sb;
Rb = (Rb + Sb + Tb) & -1;
Ca = Rb;
Da = Tb ? 5 : 2;
break;
case 3:
Tb = Ub(2);
Ba = Sb;
Rb = (Rb - Sb - Tb) & -1;
Ca = Rb;
Da = Tb ? 11 : 8;
break;
case 4:
Rb = Rb & Sb;
Ca = Rb;
Da = 14;
break;
case 5:
Ba = Sb;
Rb = (Rb - Sb) & -1;
Ca = Rb;
Da = 8;
break;
case 6:
Rb = Rb ^ Sb;
Ca = Rb;
Da = 14;
break;
case 7:
Ba = Sb;
Ca = (Rb - Sb) & -1;
Da = 8;
break;
default:
throw "arith" + 32 + ": invalid op";
}
return Rb;
}
function bc(ja) {
if (Da < 25) {
Ea = Da;
}
Fa = (ja + 1) & -1;
Da = 27;
return Fa;
}
function cc(ja) {
if (Da < 25) {
Ea = Da;
}
Fa = (ja - 1) & -1;
Da = 30;
return Fa;
}
function dc(Ma, Rb, Sb) {
var ec, Tb;
switch (Ma) {
case 0:
if (Sb & 0x1f) {
Sb &= 0x7;
Rb &= 0xff;
ec = Rb;
Rb = (Rb << Sb) | (Rb >>> (8 - Sb));
Ba = fc() & ~ (0x0800 | 0x0001);
Ba |= (Rb & 0x0001) | (((ec ^ Rb) << 4) & 0x0800);
Da = 24;
}
break;
case 1:
if (Sb & 0x1f) {
Sb &= 0x7;
Rb &= 0xff;
ec = Rb;
Rb = (Rb >>> Sb) | (Rb << (8 - Sb));
Ba = fc() & ~ (0x0800 | 0x0001);
Ba |= ((Rb >> 7) & 0x0001) | (((ec ^ Rb) << 4) & 0x0800);
Da = 24;
}
break;
case 2:
Sb = ca[Sb & 0x1f];
if (Sb) {
Rb &= 0xff;
ec = Rb;
Tb = Ub(2);
Rb = (Rb << Sb) | (Tb << (Sb - 1));
if (Sb > 1) Rb |= ec >>> (9 - Sb);
Ba = fc() & ~ (0x0800 | 0x0001);
Ba |= (((ec ^ Rb) << 4) & 0x0800) | ((ec >> (8 - Sb)) & 0x0001);
Da = 24;
}
break;
case 3:
Sb = ca[Sb & 0x1f];
if (Sb) {
Rb &= 0xff;
ec = Rb;
Tb = Ub(2);
Rb = (Rb >>> Sb) | (Tb << (8 - Sb));
if (Sb > 1) Rb |= ec << (9 - Sb);
Ba = fc() & ~ (0x0800 | 0x0001);
Ba |= (((ec ^ Rb) << 4) & 0x0800) | ((ec >> (Sb - 1)) & 0x0001);
Da = 24;
}
break;
case 4:
case 6:
Sb &= 0x1f;
if (Sb) {
Ba = Rb << (Sb - 1);
Ca = Rb = Rb << Sb;
Da = 15;
}
break;
case 5:
Sb &= 0x1f;
if (Sb) {
Rb &= 0xff;
Ba = Rb >>> (Sb - 1);
Ca = Rb = Rb >>> Sb;
Da = 18;
}
break;
case 7:
Sb &= 0x1f;
if (Sb) {
Rb = (Rb << 24) >> 24;
Ba = Rb >> (Sb - 1);
Ca = Rb = Rb >> Sb;
Da = 18;
}
break;
default:
throw "unsupported shift8=" + Ma;
}
return Rb;
}
function gc(Ma, Rb, Sb) {
var ec, Tb;
switch (Ma) {
case 0:
if (Sb & 0x1f) {
Sb &= 0xf;
Rb &= 0xffff;
ec = Rb;
Rb = (Rb << Sb) | (Rb >>> (16 - Sb));
Ba = fc() & ~ (0x0800 | 0x0001);
Ba |= (Rb & 0x0001) | (((ec ^ Rb) >> 4) & 0x0800);
Da = 24;
}
break;
case 1:
if (Sb & 0x1f) {
Sb &= 0xf;
Rb &= 0xffff;
ec = Rb;
Rb = (Rb >>> Sb) | (Rb << (16 - Sb));
Ba = fc() & ~ (0x0800 | 0x0001);
Ba |= ((Rb >> 15) & 0x0001) | (((ec ^ Rb) >> 4) & 0x0800);
Da = 24;
}
break;
case 2:
Sb = ba[Sb & 0x1f];
if (Sb) {
Rb &= 0xffff;
ec = Rb;
Tb = Ub(2);
Rb = (Rb << Sb) | (Tb << (Sb - 1));
if (Sb > 1) Rb |= ec >>> (17 - Sb);
Ba = fc() & ~ (0x0800 | 0x0001);
Ba |= (((ec ^ Rb) >> 4) & 0x0800) | ((ec >> (16 - Sb)) & 0x0001);
Da = 24;
}
break;
case 3:
Sb = ba[Sb & 0x1f];
if (Sb) {
Rb &= 0xffff;
ec = Rb;
Tb = Ub(2);
Rb = (Rb >>> Sb) | (Tb << (16 - Sb));
if (Sb > 1) Rb |= ec << (17 - Sb);
Ba = fc() & ~ (0x0800 | 0x0001);
Ba |= (((ec ^ Rb) >> 4) & 0x0800) | ((ec >> (Sb - 1)) & 0x0001);
Da = 24;
}
break;
case 4:
case 6:
Sb &= 0x1f;
if (Sb) {
Ba = Rb << (Sb - 1);
Ca = Rb = Rb << Sb;
Da = 16;
}
break;
case 5:
Sb &= 0x1f;
if (Sb) {
Rb &= 0xffff;
Ba = Rb >>> (Sb - 1);
Ca = Rb = Rb >>> Sb;
Da = 19;
}
break;
case 7:
Sb &= 0x1f;
if (Sb) {
Rb = (Rb << 16) >> 16;
Ba = Rb >> (Sb - 1);
Ca = Rb = Rb >> Sb;
Da = 19;
}
break;
default:
throw "unsupported shift16=" + Ma;
}
return Rb;
}
function hc(Ma, Rb, Sb) {
var ec, Tb;
switch (Ma) {
case 0:
Sb &= 0x1f;
if (Sb) {
ec = Rb;
Rb = (Rb << Sb) | (Rb >>> (32 - Sb));
Ba = fc() & ~ (0x0800 | 0x0001);
Ba |= (Rb & 0x0001) | (((ec ^ Rb) >> 20) & 0x0800);
Da = 24;
}
break;
case 1:
Sb &= 0x1f;
if (Sb) {
ec = Rb;
Rb = (Rb >>> Sb) | (Rb << (32 - Sb));
Ba = fc() & ~ (0x0800 | 0x0001);
Ba |= ((Rb >> 31) & 0x0001) | (((ec ^ Rb) >> 20) & 0x0800);
Da = 24;
}
break;
case 2:
Sb &= 0x1f;
if (Sb) {
ec = Rb;
Tb = Ub(2);
Rb = (Rb << Sb) | (Tb << (Sb - 1));
if (Sb > 1) Rb |= ec >>> (33 - Sb);
Ba = fc() & ~ (0x0800 | 0x0001);
Ba |= (((ec ^ Rb) >> 20) & 0x0800) | ((ec >> (32 - Sb)) & 0x0001);
Da = 24;
}
break;
case 3:
Sb &= 0x1f;
if (Sb) {
ec = Rb;
Tb = Ub(2);
Rb = (Rb >>> Sb) | (Tb << (32 - Sb));
if (Sb > 1) Rb |= ec << (33 - Sb);
Ba = fc() & ~ (0x0800 | 0x0001);
Ba |= (((ec ^ Rb) >> 20) & 0x0800) | ((ec >> (Sb - 1)) & 0x0001);
Da = 24;
}
break;
case 4:
case 6:
Sb &= 0x1f;
if (Sb) {
Ba = Rb << (Sb - 1);
Ca = Rb = Rb << Sb;
Da = 17;
}
break;
case 5:
Sb &= 0x1f;
if (Sb) {
Ba = Rb >>> (Sb - 1);
Ca = Rb = Rb >>> Sb;
Da = 20;
}
break;
case 7:
Sb &= 0x1f;
if (Sb) {
Ba = Rb >> (Sb - 1);
Ca = Rb = Rb >> Sb;
Da = 20;
}
break;
default:
throw "unsupported shift32=" + Ma;
}
return Rb;
}
function ic(Rb, Sb, jc) {
jc &= 0x1f;
if (jc) {
Ba = Rb << (jc - 1);
Ca = Rb = (Rb << jc) | (Sb >>> (32 - jc));
Da = 17;
}
return Rb;
}
function kc(Rb, Sb, jc) {
jc &= 0x1f;
if (jc) {
Ba = Rb >> (jc - 1);
Ca = Rb = (Rb >>> jc) | (Sb << (32 - jc));
Da = 20;
}
return Rb;
}
function lc(Rb, Sb) {
Sb &= 0x1f;
Ba = Rb >> Sb;
Da = 20;
}
function mc(Rb, Sb) {
Sb &= 0x1f;
Ba = Rb >> Sb;
Rb |= (1 << Sb);
Da = 20;
return Rb;
}
function nc(Rb, Sb) {
Sb &= 0x1f;
Ba = Rb >> Sb;
Rb &= ~ (1 << Sb);
Da = 20;
return Rb;
}
function oc(Rb, Sb) {
Sb &= 0x1f;
Ba = Rb >> Sb;
Rb ^= (1 << Sb);
Da = 20;
return Rb;
}
function pc(Rb, Sb) {
if (Sb) {
Rb = 0;
while ((Sb & 1) == 0) {
Rb++;
Sb >>= 1;
}
Ca = 1;
} else {
Ca = 0;
}
Da = 14;
return Rb;
}
function qc(Rb, Sb) {
if (Sb) {
Rb = 31;
while (Sb >= 0) {
Rb--;
Sb <<= 1;
}
Ca = 1;
} else {
Ca = 0;
}
Da = 14;
return Rb;
}
function rc(b) {
var a, q, r;
a = Aa[0] & 0xffff;
b &= 0xff;
if ((a >> 8) >= b) sc(0);
q = (a / b) & -1;
r = (a % b);
Pb(0, (q & 0xff) | (r << 8));
}
function tc(b) {
var a, q, r;
a = (Aa[0] << 16) >> 16;
b = (b << 24) >> 24;
if (b == 0) sc(0);
q = (a / b) & -1;
if (((q << 24) >> 24) != q) sc(0);
r = (a % b);
Pb(0, (q & 0xff) | (r << 8));
}
function uc(b) {
var a, q, r;
a = (Aa[2] << 16) | (Aa[0] & 0xffff);
b &= 0xffff;
if ((a >>> 16) >= b) sc(0);
q = (a / b) & -1;
r = (a % b);
Pb(0, q);
Pb(2, r);
}
function vc(b) {
var a, q, r;
a = (Aa[2] << 16) | (Aa[0] & 0xffff);
b = (b << 16) >> 16;
if (b == 0) sc(0);
q = (a / b) & -1;
if (((q << 16) >> 16) != q) sc(0);
r = (a % b);
Pb(0, q);
Pb(2, r);
}
function wc(xc, yc, b) {
var a, i, zc;
xc = xc >>> 0;
yc = yc >>> 0;
b = b >>> 0;
if (xc >= b) {
sc(0);
}
if (xc >= 0 && xc <= 0x200000) {
a = xc * 4294967296 + yc;
Pa = (a % b) & -1;
return (a / b) & -1;
} else {
for (i = 0; i < 32; i++) {
zc = xc >> 31;
xc = ((xc << 1) | (yc >>> 31)) >>> 0;
if (zc || xc >= b) {
xc = xc - b;
yc = (yc << 1) | 1;
} else {
yc = yc << 1;
}
}
Pa = xc & -1;
return yc;
}
}
function Ac(xc, yc, b) {
var Bc, Cc, q;
if (xc < 0) {
Bc = 1;
xc = ~xc;
yc = (-yc) & -1;
if (yc == 0) xc = (xc + 1) & -1;
} else {
Bc = 0;
}
if (b < 0) {
b = -b & -1;
Cc = 1;
} else {
Cc = 0;
}
q = wc(xc, yc, b);
Cc ^= Bc;
if (Cc) {
if ((q >>> 0) > 0x80000000) sc(0);
q = (-q) & -1;
} else {
if ((q >>> 0) >= 0x80000000) sc(0);
}
if (Bc) {
Pa = (-Pa) & -1;
}
return q;
}
function Dc(a, b) {
a &= 0xff;
b &= 0xff;
Ca = (Aa[0] & 0xff) * (b & 0xff);
Ba = Ca >> 8;
Da = 21;
return Ca;
}
function Ec(a, b) {
a = (a << 24) >> 24;
b = (b << 24) >> 24;
Ca = (a * b) & -1;
Ba = (Ca != ((Ca << 24) >> 24)) >> 0;
Da = 21;
return Ca;
}
function Fc(a, b) {
Ca = ((a & 0xffff) * (b & 0xffff)) & -1;
Ba = Ca >>> 16;
Da = 22;
return Ca;
}
function Gc(a, b) {
a = (a << 16) >> 16;
b = (b << 16) >> 16;
Ca = (a * b) & -1;
Ba = (Ca != ((Ca << 16) >> 16)) >> 0;
Da = 22;
return Ca;
}
function Hc(a, b) {
var r, yc, xc, Ic, Jc, m;
a = a >>> 0;
b = b >>> 0;
r = a * b;
if (r <= 0xffffffff) {
Pa = 0;
r &= -1;
} else {
yc = a & 0xffff;
xc = a >>> 16;
Ic = b & 0xffff;
Jc = b >>> 16;
r = yc * Ic;
Pa = xc * Jc;
m = yc * Jc;
r += (((m & 0xffff) << 16) >>> 0);
Pa += (m >>> 16);
if (r >= 4294967296) {
r -= 4294967296;
Pa++;
}
m = xc * Ic;
r += (((m & 0xffff) << 16) >>> 0);
Pa += (m >>> 16);
if (r >= 4294967296) {
r -= 4294967296;
Pa++;
}
r &= -1;
Pa &= -1;
}
return r;
}
function Kc(a, b) {
Ca = Hc(a, b);
Ba = Pa;
Da = 23;
return Ca;
}
function Lc(a, b) {
var s, r;
s = 0;
if (a < 0) {
a = -a;
s = 1;
}
if (b < 0) {
b = -b;
s ^= 1;
}
r = Hc(a, b);
if (s) {
Pa = ~Pa;
r = (-r) & -1;
if (r == 0) {
Pa = (Pa + 1) & -1;
}
}
Ca = r;
Ba = (Pa - (r >> 31)) & -1;
Da = 23;
return r;
}
function Mc(Da) {
var Rb, Nc;
switch (Da) {
case 0:
Nc = (Ca & 0xff) < (Ba & 0xff);
break;
case 1:
Nc = (Ca & 0xffff) < (Ba & 0xffff);
break;
case 2:
Nc = (Ca >>> 0) < (Ba >>> 0);
break;
case 3:
Nc = (Ca & 0xff) <= (Ba & 0xff);
break;
case 4:
Nc = (Ca & 0xffff) <= (Ba & 0xffff);
break;
case 5:
Nc = (Ca >>> 0) <= (Ba >>> 0);
break;
case 6:
Nc = ((Ca + Ba) & 0xff) < (Ba & 0xff);
break;
case 7:
Nc = ((Ca + Ba) & 0xffff) < (Ba & 0xffff);
break;
case 8:
Nc = ((Ca + Ba) >>> 0) < (Ba >>> 0);
break;
case 9:
Rb = (Ca + Ba + 1) & 0xff;
Nc = Rb <= (Ba & 0xff);
break;
case 10:
Rb = (Ca + Ba + 1) & 0xffff;
Nc = Rb <= (Ba & 0xffff);
break;
case 11:
Rb = (Ca + Ba + 1) >>> 0;
Nc = Rb <= (Ba >>> 0);
break;
case 12:
case 13:
case 14:
Nc = 0;
break;
case 15:
Nc = (Ba >> 7) & 1;
break;
case 16:
Nc = (Ba >> 15) & 1;
break;
case 17:
Nc = (Ba >> 31) & 1;
break;
case 18:
case 19:
case 20:
Nc = Ba & 1;
break;
case 21:
case 22:
case 23:
Nc = Ba != 0;
break;
case 24:
Nc = Ba & 1;
break;
default:
throw "GET_CARRY: unsupported cc_op=" + Da;
}
return Nc;
}
function Ub(Oc) {
var Nc, Rb;
switch (Oc >> 1) {
case 0:
switch (Da) {
case 0:
Rb = (Ca - Ba) & -1;
Nc = (((Rb ^ Ba ^ -1) & (Rb ^ Ca)) >> 7) & 1;
break;
case 1:
Rb = (Ca - Ba) & -1;
Nc = (((Rb ^ Ba ^ -1) & (Rb ^ Ca)) >> 15) & 1;
break;
case 2:
Rb = (Ca - Ba) & -1;
Nc = (((Rb ^ Ba ^ -1) & (Rb ^ Ca)) >> 31) & 1;
break;
case 3:
Rb = (Ca - Ba - 1) & -1;
Nc = (((Rb ^ Ba ^ -1) & (Rb ^ Ca)) >> 7) & 1;
break;
case 4:
Rb = (Ca - Ba - 1) & -1;
Nc = (((Rb ^ Ba ^ -1) & (Rb ^ Ca)) >> 15) & 1;
break;
case 5:
Rb = (Ca - Ba - 1) & -1;
Nc = (((Rb ^ Ba ^ -1) & (Rb ^ Ca)) >> 31) & 1;
break;
case 6:
Rb = (Ca + Ba) & -1;
Nc = (((Rb ^ Ba) & (Rb ^ Ca)) >> 7) & 1;
break;
case 7:
Rb = (Ca + Ba) & -1;
Nc = (((Rb ^ Ba) & (Rb ^ Ca)) >> 15) & 1;
break;
case 8:
Rb = (Ca + Ba) & -1;
Nc = (((Rb ^ Ba) & (Rb ^ Ca)) >> 31) & 1;
break;
case 9:
Rb = (Ca + Ba + 1) & -1;
Nc = (((Rb ^ Ba) & (Rb ^ Ca)) >> 7) & 1;
break;
case 10:
Rb = (Ca + Ba + 1) & -1;
Nc = (((Rb ^ Ba) & (Rb ^ Ca)) >> 15) & 1;
break;
case 11:
Rb = (Ca + Ba + 1) & -1;
Nc = (((Rb ^ Ba) & (Rb ^ Ca)) >> 31) & 1;
break;
case 12:
case 13:
case 14:
Nc = 0;
break;
case 15:
case 18:
Nc = ((Ba ^ Ca) >> 7) & 1;
break;
case 16:
case 19:
Nc = ((Ba ^ Ca) >> 15) & 1;
break;
case 17:
case 20:
Nc = ((Ba ^ Ca) >> 31) & 1;
break;
case 21:
case 22:
case 23:
Nc = Ba != 0;
break;
case 24:
Nc = (Ba >> 11) & 1;
break;
case 25:
Nc = (Fa & 0xff) == 0x80;
break;
case 26:
Nc = (Fa & 0xffff) == 0x8000;
break;
case 27:
Nc = (Fa == -2147483648);
break;
case 28:
Nc = (Fa & 0xff) == 0x7f;
break;
case 29:
Nc = (Fa & 0xffff) == 0x7fff;
break;
case 30:
Nc = Fa == 0x7fffffff;
break;
default:
throw "JO: unsupported cc_op=" + Da;
}
break;
case 1:
if (Da >= 25) {
Nc = Mc(Ea);
} else {
Nc = Mc(Da);
}
break;
case 2:
switch (Da) {
case 0:
case 3:
case 6:
case 9:
case 12:
case 15:
case 18:
case 21:
Nc = (Ca & 0xff) == 0;
break;
case 1:
case 4:
case 7:
case 10:
case 13:
case 16:
case 19:
case 22:
Nc = (Ca & 0xffff) == 0;
break;
case 2:
case 5:
case 8:
case 11:
case 14:
case 17:
case 20:
case 23:
Nc = Ca == 0;
break;
case 24:
Nc = (Ba >> 6) & 1;
break;
case 25:
case 28:
Nc = (Fa & 0xff) == 0;
break;
case 26:
case 29:
Nc = (Fa & 0xffff) == 0;
break;
case 27:
case 30:
Nc = Fa == 0;
break;
default:
throw "JZ: unsupported cc_op=" + Da;
};
break;
case 3:
switch (Da) {
case 6:
Nc = ((Ca + Ba) & 0xff) <= (Ba & 0xff);
break;
case 7:
Nc = ((Ca + Ba) & 0xffff) <= (Ba & 0xffff);
break;
case 8:
Nc = ((Ca + Ba) >>> 0) <= (Ba >>> 0);
break;
case 24:
Nc = (Ba & (0x0040 | 0x0001)) != 0;
break;
default:
Nc = Ub(2) | Ub(4);
break;
}
break;
case 4:
switch (Da) {
case 0:
case 3:
case 6:
case 9:
case 12:
case 15:
case 18:
case 21:
Nc = (Ca >> 7) & 1;
break;
case 1:
case 4:
case 7:
case 10:
case 13:
case 16:
case 19:
case 22:
Nc = (Ca >> 15) & 1;
break;
case 2:
case 5:
case 8:
case 11:
case 14:
case 17:
case 20:
case 23:
Nc = Ca < 0;
break;
case 24:
Nc = (Ba >> 7) & 1;
break;
case 25:
case 28:
Nc = (Fa >> 7) & 1;
break;
case 26:
case 29:
Nc = (Fa >> 15) & 1;
break;
case 27:
case 30:
Nc = Fa < 0;
break;
default:
throw "JS: unsupported cc_op=" + Da;
}
break;
case 5:
switch (Da) {
case 0:
case 3:
case 6:
case 9:
case 12:
case 15:
case 18:
case 21:
case 1:
case 4:
case 7:
case 10:
case 13:
case 16:
case 19:
case 22:
case 2:
case 5:
case 8:
case 11:
case 14:
case 17:
case 20:
case 23:
Nc = aa[Ca & 0xff];
break;
case 24:
Nc = (Ba >> 2) & 1;
break;
case 25:
case 28:
case 26:
case 29:
case 27:
case 30:
Nc = aa[Fa & 0xff];
break;
default:
throw "JP: unsupported cc_op=" + Da;
}
break;
case 6:
switch (Da) {
case 6:
Nc = ((Ca + Ba) << 24) < (Ba << 24);
break;
case 7:
Nc = ((Ca + Ba) << 16) < (Ba << 16);
break;
case 8:
Nc = ((Ca + Ba) & -1) < Ba;
break;
case 12:
Nc = (Ca << 24) < 0;
break;
case 13:
Nc = (Ca << 16) < 0;
break;
case 14:
Nc = Ca < 0;
break;
case 24:
Nc = ((Ba >> 7) ^ (Ba >> 11)) & 1;
break;
case 25:
case 28:
Nc = (Fa << 24) < 0;
break;
case 26:
case 29:
Nc = (Fa << 16) < 0;
break;
case 27:
case 30:
Nc = Fa < 0;
break;
default:
Nc = Ub(8) ^ Ub(0);
break;
}
break;
case 7:
switch (Da) {
case 6:
Nc = ((Ca + Ba) << 24) <= (Ba << 24);
break;
case 7:
Nc = ((Ca + Ba) << 16) <= (Ba << 16);
break;
case 8:
Nc = ((Ca + Ba) & -1) <= Ba;
break;
case 12:
Nc = (Ca << 24) <= 0;
break;
case 13:
Nc = (Ca << 16) <= 0;
break;
case 14:
Nc = Ca <= 0;
break;
case 24:
Nc = (((Ba >> 7) ^ (Ba >> 11)) | (Ba >> 6)) & 1;
break;
case 25:
case 28:
Nc = (Fa << 24) <= 0;
break;
case 26:
case 29:
Nc = (Fa << 16) <= 0;
break;
case 27:
case 30:
Nc = Fa <= 0;
break;
default:
Nc = (Ub(8) ^ Ub(0)) | Ub(4);
break;
}
break;
default:
throw "unsupported cond: " + Oc;
}
return Nc ^ (Oc & 1);
}
function fc() {
return (Ub(2) << 0) | (Ub(10) << 2) | (Ub(4) << 6) | (Ub(8) << 7) | (Ub(0) << 11);
}
function Pc() {
var Qc;
Qc = fc();
Qc |= za.df & 0x00000400;
Qc |= za.eflags;
return Qc;
}
function Rc(Qc, Sc) {
Da = 24;
Ba = Qc & (0x0800 | 0x0080 | 0x0040 | 0x0010 | 0x0004 | 0x0001);
za.df = 1 - (2 * ((Qc >> 10) & 1));
za.eflags = (za.eflags & ~Sc) | (Qc & Sc);
}
function Tc() {
return za.cycle_count + (xa - Na);
}
function Uc(va) {
throw "CPU abort: " + va;
}
function Vc() {
za.eip = Fb;
za.cc_src = Ba;
za.cc_dst = Ca;
za.cc_op = Da;
za.cc_op2 = Ea;
za.cc_dst2 = Fa;
za.dump();
}
function Wc(intno, error_code) {
za.cycle_count += (xa - Na);
za.eip = Fb;
za.cc_src = Ba;
za.cc_dst = Ca;
za.cc_op = Da;
za.cc_op2 = Ea;
za.cc_dst2 = Fa;
throw {
intno: intno,
error_code: error_code
};
}
function sc(intno) {
Wc(intno, 0);
}
function Xc(Yc) {
za.cpl = Yc;
if (za.cpl == 3) {
Wa = Ua;
Xa = Va;
} else {
Wa = Sa;
Xa = Ta;
}
}
function Zc(ia, ad) {
var Za;
if (ad) {
Za = Xa[ia >>> 12];
} else {
Za = Wa[ia >>> 12];
}
if (Za == -1) {
ab(ia, ad, za.cpl == 3);
if (ad) {
Za = Xa[ia >>> 12];
} else {
Za = Wa[ia >>> 12];
}
}
return Za ^ ia;
}
function bd() {
var cd, l, dd, ed, i, fd;
cd = Aa[1] >>> 0;
l = (4096 - (Aa[6] & 0xfff)) >> 2;
if (cd > l) cd = l;
l = (4096 - (Aa[7] & 0xfff)) >> 2;
if (cd > l) cd = l;
if (cd) {
dd = Zc(Aa[6], 0);
ed = Zc(Aa[7], 1);
fd = cd << 2;
for (i = 0; i < fd; i++) Qa[ed + i] = Qa[dd + i];
Aa[6] = (Aa[6] + fd) & -1;
Aa[7] = (Aa[7] + fd) & -1;
Aa[1] = (Aa[1] - cd) & -1;
return true;
}
return false;
}
function gd() {
var cd, l, ed, i, fd, ja;
cd = Aa[1] >>> 0;
l = (4096 - (Aa[7] & 0xfff)) >> 2;
if (cd > l) cd = l;
if (cd) {
ed = Zc(Aa[7], 1);
ja = Aa[0];
for (i = 0; i < cd; i++) {
Qa[ed] = ja & 0xff;
Qa[ed + 1] = (ja >> 8) & 0xff;
Qa[ed + 2] = (ja >> 16) & 0xff;
Qa[ed + 3] = (ja >> 24) & 0xff;
ed += 4;
}
fd = cd << 2;
Aa[7] = (Aa[7] + fd) & -1;
Aa[1] = (Aa[1] - cd) & -1;
return true;
}
return false;
}
function ab(hd, id, ma) {
var jd, kd, error_code, ld, md, nd, od, ad, pd;
if (!(za.cr0 & (1 << 31))) {
za.tlb_set_page(hd & -4096, hd & -4096, 1);
} else {
jd = (za.cr3 & -4096) + ((hd >> 20) & 0xffc);
kd = za.ld32_phys(jd);
if (!(kd & 0x00000001)) {
error_code = 0;
} else {
if (!(kd & 0x00000020)) {
kd |= 0x00000020;
za.st32_phys(jd, kd);
}
ld = (kd & -4096) + ((hd >> 10) & 0xffc);
md = za.ld32_phys(ld);
if (!(md & 0x00000001)) {
error_code = 0;
} else {
nd = md & kd;
if (ma && !(nd & 0x00000004)) {
error_code = 0x01;
} else if (id && !(nd & 0x00000002)) {
error_code = 0x01;
} else {
od = (id && !(md & 0x00000040));
if (!(md & 0x00000020) || od) {
md |= 0x00000020;
if (od) md |= 0x00000040;
za.st32_phys(ld, md);
}
ad = 0;
if ((md & 0x00000040) && (nd & 0x00000002)) ad = 1;
pd = 0;
if (nd & 0x00000004) pd = 1;
za.tlb_set_page(hd & -4096, md & -4096, ad, pd);
return;
}
}
}
error_code |= id << 1;
if (ma) error_code |= 0x04;
za.cr2 = hd;
Wc(14, error_code);
}
}
function qd(rd) {
if (!(rd & (1 << 0))) Uc("real mode not supported");
if ((rd & ((1 << 31) | (1 << 16) | (1 << 0))) != (za.cr0 & ((1 << 31) | (1 << 16) | (1 << 0)))) {
za.tlb_flush_all();
}
za.cr0 = rd | (1 << 4);
}
function sd(td) {
za.cr3 = td;
if (za.cr0 & (1 << 31)) {
za.tlb_flush_all();
}
}
function ud(vd) {
za.cr4 = vd;
}
function wd(xd) {
if (xd & (1 << 22)) return -1;
else return 0xffff;
}
function yd(selector) {
var ua, Mb, zd, xd;
if (selector & 0x4) ua = za.ldt;
else ua = za.gdt;
Mb = selector & ~7;
if ((Mb + 7) > ua.limit) return null;
ia = ua.base + Mb;
zd = xb();
ia += 4;
xd = xb();
return [zd, xd];
}
function Ad(zd, xd) {
var limit;
limit = (zd & 0xffff) | (xd & 0x000f0000);
if (xd & (1 << 23)) limit = (limit << 12) | 0xfff;
return limit;
}
function Bd(zd, xd) {
return (((zd >>> 16) | ((xd & 0xff) << 16) | (xd & 0xff000000))) & -1;
}
function Cd(ua, zd, xd) {
ua.base = Bd(zd, xd);
ua.limit = Ad(zd, xd);
ua.flags = xd;
}
function Dd(Ed, selector, base, limit, flags) {
za.segs[Ed] = {
selector: selector,
base: base,
limit: limit,
flags: flags
};
}
function Fd(Gd) {
var Hd, Mb, Id, Jd, Kd;
if (!(za.tr.flags & (1 << 15))) Uc("invalid tss");
Hd = (za.tr.flags >> 8) & 0xf;
if ((Hd & 7) != 1) Uc("invalid tss type");
Id = Hd >> 3;
Mb = (Gd * 4 + 2) << Id;
if (Mb + (4 << Id) - 1 > za.tr.limit) Wc(10, za.tr.selector & 0xfffc);
ia = (za.tr.base + Mb) & -1;
if (Id == 0) {
Kd = vb();
ia += 2;
} else {
Kd = xb();
ia += 4;
}
Jd = vb();
return [Jd, Kd];
}
function Ld(intno, Md, error_code, Nd, Od) {
var ua, Pd, Hd, Gd, selector, Qd, Rd;
var Sd, Td, Id;
var e, zd, xd, Ud, Jd, Kd, Vd, Wd;
var Xd, Yd;
if (intno == 0x06) {
var Zd = Fb;
va = "do_interrupt: intno=" + sa(intno) + " error_code=" + ra(error_code) + " EIP=" + ra(Zd) + " ESP=" + ra(Aa[4]) + " EAX=" + ra(Aa[0]) + " EBX=" + ra(Aa[3]) + " ECX=" + ra(Aa[1]);
if (intno == 0x0e) {
va += " CR2=" + ra(za.cr2);
}
console.log(va);
if (intno == 0x06) {
var va, i, n;
va = "Code:";
n = 4096 - (Zd & 0xfff);
if (n > 15) n = 15;
for (i = 0; i < n; i++) {
ia = (Zd + i) & -1;
va += " " + sa(bb());
}
console.log(va);
}
}
Sd = 0;
if (!Md && !Od) {
switch (intno) {
case 8:
case 10:
case 11:
case 12:
case 13:
case 14:
case 17:
Sd = 1;
break;
}
}
if (Md) Xd = Nd;
else Xd = Fb;
ua = za.idt;
if (intno * 8 + 7 > ua.limit) Wc(13, intno * 8 + 2);
ia = (ua.base + intno * 8) & -1;
zd = xb();
ia += 4;
xd = xb();
Hd = (xd >> 8) & 0x1f;
switch (Hd) {
case 5:
case 7:
case 6:
throw "unsupported task gate";
case 14:
case 15:
break;
default:
Wc(13, intno * 8 + 2);
break;
}
Gd = (xd >> 13) & 3;
Rd = za.cpl;
if (Md && Gd < Rd) Wc(13, intno * 8 + 2);
if (!(xd & (1 << 15))) Wc(11, intno * 8 + 2);
selector = zd >> 16;
Ud = (xd & -65536) | (zd & 0x0000ffff);
if ((selector & 0xfffc) == 0) Wc(13, 0);
e = yd(selector);
if (!e) Wc(13, selector & 0xfffc);
zd = e[0];
xd = e[1];
if (!(xd & (1 << 12)) || !(xd & ((1 << 11)))) Wc(13, selector & 0xfffc);
Gd = (xd >> 13) & 3;
if (Gd > Rd) Wc(13, selector & 0xfffc);
if (!(xd & (1 << 15))) Wc(11, selector & 0xfffc);
if (!(xd & (1 << 10)) && Gd < Rd) {
e = Fd(Gd);
Jd = e[0];
Kd = e[1];
if ((Jd & 0xfffc) == 0) Wc(10, Jd & 0xfffc);
if ((Jd & 3) != Gd) Wc(10, Jd & 0xfffc);
e = yd(Jd);
if (!e) Wc(10, Jd & 0xfffc);
Vd = e[0];
Wd = e[1];
Qd = (Wd >> 13) & 3;
if (Qd != Gd) Wc(10, Jd & 0xfffc);
if (!(Wd & (1 << 12)) || (Wd & (1 << 11)) || !(Wd & (1 << 9))) Wc(10, Jd & 0xfffc);
if (!(Wd & (1 << 15))) Wc(10, Jd & 0xfffc);
Td = 1;
Yd = wd(Wd);
Pd = Bd(Vd, Wd);
} else if ((xd & (1 << 10)) || Gd == Rd) {
if (za.eflags & 0x00020000) Wc(13, selector & 0xfffc);
Td = 0;
Yd = wd(za.segs[2].flags);
Pd = za.segs[2].base;
Kd = Aa[4];
Gd = Rd;
} else {
Wc(13, selector & 0xfffc);
Td = 0;
Yd = 0;
Pd = 0;
Kd = 0;
}
Id = Hd >> 3;
if (Td) {
if (za.eflags & 0x00020000) {
{
Kd = (Kd - 4) & -1;
ia = (Pd + (Kd & Yd)) & -1;
Db(za.segs[5].selector);
}; {
Kd = (Kd - 4) & -1;
ia = (Pd + (Kd & Yd)) & -1;
Db(za.segs[4].selector);
}; {
Kd = (Kd - 4) & -1;
ia = (Pd + (Kd & Yd)) & -1;
Db(za.segs[3].selector);
}; {
Kd = (Kd - 4) & -1;
ia = (Pd + (Kd & Yd)) & -1;
Db(za.segs[0].selector);
};
} {
Kd = (Kd - 4) & -1;
ia = (Pd + (Kd & Yd)) & -1;
Db(za.segs[2].selector);
}; {
Kd = (Kd - 4) & -1;
ia = (Pd + (Kd & Yd)) & -1;
Db(Aa[4]);
};
} {
Kd = (Kd - 4) & -1;
ia = (Pd + (Kd & Yd)) & -1;
Db(Pc());
}; {
Kd = (Kd - 4) & -1;
ia = (Pd + (Kd & Yd)) & -1;
Db(za.segs[1].selector);
}; {
Kd = (Kd - 4) & -1;
ia = (Pd + (Kd & Yd)) & -1;
Db(Xd);
};
if (Sd) {
{
Kd = (Kd - 4) & -1;
ia = (Pd + (Kd & Yd)) & -1;
Db(error_code);
};
}
if (Td) {
if (za.eflags & 0x00020000) {
Dd(0, 0, 0, 0, 0);
Dd(3, 0, 0, 0, 0);
Dd(4, 0, 0, 0, 0);
Dd(5, 0, 0, 0, 0);
}
Jd = (Jd & ~3) | Gd;
Dd(2, Jd, Pd, Ad(Vd, Wd), Wd);
}
Aa[4] = (Aa[4] & ~ (Yd)) | ((Kd) & (Yd));
selector = (selector & ~3) | Gd;
Dd(1, selector, Bd(zd, xd), Ad(zd, xd), xd);
Xc(Gd);
Eb = Ud;
if ((Hd & 1) == 0) {
za.eflags &= ~0x00000200;
}
za.eflags &= ~ (0x00000100 | 0x00020000 | 0x00010000 | 0x00004000);
}
function ae(selector) {
var ua, zd, xd, Mb, be;
selector &= 0xffff;
if ((selector & 0xfffc) == 0) {
za.ldt.base = 0;
za.ldt.limit = 0;
} else {
if (selector & 0x4) Wc(13, selector & 0xfffc);
ua = za.gdt;
Mb = selector & ~7;
be = 7;
if ((Mb + be) > ua.limit) Wc(13, selector & 0xfffc);
ia = (ua.base + Mb) & -1;
zd = xb();
ia += 4;
xd = xb();
if ((xd & (1 << 12)) || ((xd >> 8) & 0xf) != 2) Wc(13, selector & 0xfffc);
if (!(xd & (1 << 15))) Wc(11, selector & 0xfffc);
Cd(za.ldt, zd, xd);
}
za.ldt.selector = selector;
}
function ce(selector) {
var ua, zd, xd, Mb, Hd, be;
selector &= 0xffff;
if ((selector & 0xfffc) == 0) {
za.tr.base = 0;
za.tr.limit = 0;
za.tr.flags = 0;
} else {
if (selector & 0x4) Wc(13, selector & 0xfffc);
ua = za.gdt;
Mb = selector & ~7;
be = 7;
if ((Mb + be) > ua.limit) Wc(13, selector & 0xfffc);
ia = (ua.base + Mb) & -1;
zd = xb();
ia += 4;
xd = xb();
Hd = (xd >> 8) & 0xf;
if ((xd & (1 << 12)) || (Hd != 1 && Hd != 9)) Wc(13, selector & 0xfffc);
if (!(xd & (1 << 15))) Wc(11, selector & 0xfffc);
Cd(za.tr, zd, xd);
xd |= (1 << 9);
Db(xd);
}
za.tr.selector = selector;
}
function de(ee, selector) {
var zd, xd, Rd, Gd, fe, ua, Mb;
selector &= 0xffff;
Rd = za.cpl;
if ((selector & 0xfffc) == 0) {
if (ee == 2) Wc(13, 0);
Dd(ee, selector, 0, 0, 0);
} else {
if (selector & 0x4) ua = za.ldt;
else ua = za.gdt;
Mb = selector & ~7;
if ((Mb + 7) > ua.limit) Wc(13, selector & 0xfffc);
ia = (ua.base + Mb) & -1;
zd = xb();
ia += 4;
xd = xb();
if (!(xd & (1 << 12))) Wc(13, selector & 0xfffc);
fe = selector & 3;
Gd = (xd >> 13) & 3;
if (ee == 2) {
if ((xd & (1 << 11)) || !(xd & (1 << 9))) Wc(13, selector & 0xfffc);
if (fe != Rd || Gd != Rd) Wc(13, selector & 0xfffc);
} else {
if ((xd & ((1 << 11) | (1 << 9))) == (1 << 11)) Wc(13, selector & 0xfffc);
if (!(xd & (1 << 11)) || !(xd & (1 << 10))) {
if (Gd < Rd || Gd < fe) Wc(13, selector & 0xfffc);
}
}
if (!(xd & (1 << 15))) {
if (ee == 2) Wc(12, selector & 0xfffc);
else Wc(11, selector & 0xfffc);
}
if (!(xd & (1 << 8))) {
xd |= (1 << 8);
Db(xd);
}
Dd(ee, selector, Bd(zd, xd), Ad(zd, xd), xd);
}
}
function ge(he, ie) {
var je, Hd, zd, xd, Rd, Gd, fe, limit, e;
if ((he & 0xfffc) == 0) Wc(13, 0);
e = yd(he);
if (!e) Wc(13, he & 0xfffc);
zd = e[0];
xd = e[1];
Rd = za.cpl;
if (xd & (1 << 12)) {
if (!(xd & (1 << 11))) Wc(13, he & 0xfffc);
Gd = (xd >> 13) & 3;
if (xd & (1 << 10)) {
if (Gd > Rd) Wc(13, he & 0xfffc);
} else {
fe = he & 3;
if (fe > Rd) Wc(13, he & 0xfffc);
if (Gd != Rd) Wc(13, he & 0xfffc);
}
if (!(xd & (1 << 15))) Wc(11, he & 0xfffc);
limit = Ad(zd, xd);
if ((ie >>> 0) > (limit >>> 0)) Wc(13, he & 0xfffc);
Dd(1, (he & 0xfffc) | Rd, Bd(zd, xd), limit, xd);
Eb = ie;
} else {
Uc("unsupported jump to call or task gate");
}
}
function ke(ee, Rd) {
var Gd, xd;
if ((ee == 4 || ee == 5) && (za.segs[ee].selector & 0xfffc) == 0) return;
xd = za.segs[ee].flags;
Gd = (xd >> 13) & 3;
if (!(xd & (1 << 11)) || !(xd & (1 << 10))) {
if (Gd < Rd) {
Dd(ee, 0, 0, 0, 0);
}
}
}
function le(Id, me, ne) {
var he, oe, pe;
var qe, re, se, te;
var e, zd, xd, Vd, Wd;
var Rd, Gd, fe, ue, ve;
var Pd, we, ie, xe, Yd;
Yd = wd(za.segs[2].flags);
we = Aa[4];
Pd = za.segs[2].base;
oe = 0;
if (Id == 1) {
{
ia = (Pd + (we & Yd)) & -1;
ie = fb();
we = (we + 4) & -1;
}; {
ia = (Pd + (we & Yd)) & -1;
he = fb();
we = (we + 4) & -1;
};
he &= 0xffff;
if (me) {
{
ia = (Pd + (we & Yd)) & -1;
oe = fb();
we = (we + 4) & -1;
};
if (oe & 0x00020000) throw "VM86 unsupported";
}
} else {
throw "unsupported";
}
if ((he & 0xfffc) == 0) Wc(13, he & 0xfffc);
e = yd(he);
if (!e) Wc(13, he & 0xfffc);
zd = e[0];
xd = e[1];
if (!(xd & (1 << 12)) || !(xd & (1 << 11))) Wc(13, he & 0xfffc);
Rd = za.cpl;
fe = he & 3;
if (fe < Rd) Wc(13, he & 0xfffc);
Gd = (xd >> 13) & 3;
if (xd & (1 << 10)) {
if (Gd > fe) Wc(13, he & 0xfffc);
} else {
if (Gd != fe) Wc(13, he & 0xfffc);
}
if (!(xd & (1 << 15))) Wc(11, he & 0xfffc);
we = (we + ne) & -1;
if (fe == Rd) {
Dd(1, he, Bd(zd, xd), Ad(zd, xd), xd);
} else {
if (Id == 1) {
{
ia = (Pd + (we & Yd)) & -1;
xe = fb();
we = (we + 4) & -1;
}; {
ia = (Pd + (we & Yd)) & -1;
pe = fb();
we = (we + 4) & -1;
};
pe &= 0xffff;
} else {
throw "unsupported";
}
if ((pe & 0xfffc) == 0) {
Wc(13, 0);
} else {
if ((pe & 3) != fe) Wc(13, pe & 0xfffc);
e = yd(pe);
if (!e) Wc(13, pe & 0xfffc);
Vd = e[0];
Wd = e[1];
if (!(Wd & (1 << 12)) || (Wd & (1 << 11)) || !(Wd & (1 << 9))) Wc(13, pe & 0xfffc);
Gd = (Wd >> 13) & 3;
if (Gd != fe) Wc(13, pe & 0xfffc);
if (!(Wd & (1 << 15))) Wc(11, pe & 0xfffc);
Dd(2, pe, Bd(Vd, Wd), Ad(Vd, Wd), Wd);
}
Dd(1, he, Bd(zd, xd), Ad(zd, xd), xd);
Xc(fe);
we = xe;
Yd = wd(Wd);
ke(0, fe);
ke(3, fe);
ke(4, fe);
ke(5, fe);
we = (we + ne) & -1;
}
Aa[4] = (Aa[4] & ~ (Yd)) | ((we) & (Yd));
Eb = ie;
if (me) {
ue = 0x00000100 | 0x00040000 | 0x00200000 | 0x00010000 | 0x00004000;
if (Rd == 0) ue |= 0x00003000;
ve = (za.eflags >> 12) & 3;
if (Rd <= ve) ue |= 0x00000200;
if (Id == 0) ue &= 0xffff;
Rc(oe, ue);
}
}
function ye(Id) {
if (za.eflags & 0x00004000) {
Wc(13, 0);
} else {
le(Id, 1, 0);
}
}
function ze() {
var Mb;
Mb = Aa[0];
switch (Mb) {
case 0:
Aa[0] = 1;
Aa[3] = 0x756e6547 & -1;
Aa[2] = 0x49656e69 & -1;
Aa[1] = 0x6c65746e & -1;
break;
case 1:
default:
Aa[0] = (5 << 8) | (4 << 4) | 3;
Aa[3] = 8 << 8;
Aa[1] = 0;
Aa[2] = (1 << 4);
break;
}
}
za = this;
Qa = this.phys_mem8;
Ua = this.tlb_read_user;
Va = this.tlb_write_user;
Sa = this.tlb_read_kernel;
Ta = this.tlb_write_kernel;
if (za.cpl == 3) {
Wa = Ua;
Xa = Va;
} else {
Wa = Sa;
Xa = Ta;
}
if (za.halted) {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) {
za.halted = 0;
} else {
return 257;
}
}
Aa = this.regs;
Ba = this.cc_src;
Ca = this.cc_dst;
Da = this.cc_op;
Ea = this.cc_op2;
Fa = this.cc_dst2;
Eb = this.eip;
Oa = 256;
Na = xa;
if (ya) {
Fb = Eb;
Ld(ya.intno, 0, ya.error_code, 0, 0);
}
if (za.hard_intno >= 0) {
Fb = Eb;
Ld(za.hard_intno, 0, 0, 0, 1);
za.hard_intno = -1;
}
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) {
za.hard_intno = za.get_hard_intno();
Fb = Eb;
Ld(za.hard_intno, 0, 0, 0, 1);
za.hard_intno = -1;
}
Ae: do {
Fb = Eb;
Ga = 0;
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if (0) {
console.log("exec: EIP=" + ra(Fb) + " OPCODE=" + ra(b));
}
Be: for (;;) {
switch (b) {
case 0x66:
Ga |= 0x0100;
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
b |= (Ga & 0x0100);
break;
case 0xf0:
Ga |= 0x0040;
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
b |= (Ga & 0x0100);
break;
case 0xf2:
Ga |= 0x0020;
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
b |= (Ga & 0x0100);
break;
case 0xf3:
Ga |= 0x0010;
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
b |= (Ga & 0x0100);
break;
case 0x64:
Ga = (Ga & ~0x000f) | (4 + 1);
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
b |= (Ga & 0x0100);;
break;
case 0x65:
Ga = (Ga & ~0x000f) | (5 + 1);
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
b |= (Ga & 0x0100);;
break;
case 0xb0:
case 0xb1:
case 0xb2:
case 0xb3:
case 0xb4:
case 0xb5:
case 0xb6:
case 0xb7:
ja = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ob(b & 7, ja);
break Be;
case 0xb8:
case 0xb9:
case 0xba:
case 0xbb:
case 0xbc:
case 0xbd:
case 0xbe:
case 0xbf:
ja = Ib();
Aa[b & 7] = ja;
break Be;
case 0x88:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
ja = ((Aa[Ja & 3] >> ((Ja & 4) << 1)) & 0xff);
if ((Ha >> 6) == 3) {
Ob(Ha & 7, ja);
} else {
ia = Jb(Ha); {
Ra = Xa[ia >>> 12];
if (Ra == -1) {
mb(ja);
} else {
Qa[ia ^ Ra] = ja & 0xff;
}
};
}
break Be;
case 0x89:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja = Aa[(Ha >> 3) & 7];
if ((Ha >> 6) == 3) {
Aa[Ha & 7] = ja;
} else {
ia = Jb(Ha); {
Ra = Xa[ia >>> 12];
if ((Ra | ia) & 3) {
qb(ja);
} else {
Ra ^= ia;
Qa[Ra] = ja & 0xff;
Qa[Ra + 1] = (ja >> 8) & 0xff;
Qa[Ra + 2] = (ja >> 16) & 0xff;
Qa[Ra + 3] = (ja >> 24) & 0xff;
}
};
}
break Be;
case 0x8a:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff);
} else {
ia = Jb(Ha);
ja = (((Ra = Wa[ia >>> 12]) == -1) ? Ya() : Qa[ia ^ Ra]);
}
Ob((Ha >> 3) & 7, ja);
break Be;
case 0x8b:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = (((Ra = Wa[ia >>> 12]) | ia) & 3 ? eb() : (Ra ^= ia, Qa[Ra] | (Qa[Ra + 1] << 8) | (Qa[Ra + 2] << 16) | (Qa[Ra + 3] << 24)));
}
Aa[(Ha >> 3) & 7] = ja;
break Be;
case 0xa0:
ia = Nb();
ja = bb();
Ob(0, ja);
break Be;
case 0xa1:
ia = Nb();
ja = fb();
Aa[0] = ja;
break Be;
case 0xa2:
ia = Nb();
nb(Aa[0]);
break Be;
case 0xa3:
ia = Nb();
rb(Aa[0]);
break Be;
case 0xc6:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) == 3) {
ja = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ob(Ha & 7, ja);
} else {
ia = Jb(Ha);
ja = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
nb(ja);
}
break Be;
case 0xc7:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) == 3) {
ja = Ib();
Aa[Ha & 7] = ja;
} else {
ia = Jb(Ha);
ja = Ib();
rb(ja);
}
break Be;
case 0x91:
case 0x92:
case 0x93:
case 0x94:
case 0x95:
case 0x96:
case 0x97:
Ja = b & 7;
ja = Aa[0];
Aa[0] = Aa[Ja];
Aa[Ja] = ja;
break Be;
case 0x86:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff);
Ob(Ia, ((Aa[Ja & 3] >> ((Ja & 4) << 1)) & 0xff));
} else {
ia = Jb(Ha);
ja = hb();
nb(((Aa[Ja & 3] >> ((Ja & 4) << 1)) & 0xff));
}
Ob(Ja, ja);
break Be;
case 0x87:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = Aa[Ia];
Aa[Ia] = Aa[Ja];
} else {
ia = Jb(Ha);
ja = lb();
rb(Aa[Ja]);
}
Aa[Ja] = ja;
break Be;
case 0x8e:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if (Ja >= 6 || Ja == 1) sc(6);
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7] & 0xffff;
} else {
ia = Jb(Ha);
ja = db();
}
de(Ja, ja);
break Be;
case 0x8c:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if (Ja >= 6) sc(6);
ja = za.segs[Ja].selector;
if ((Ha >> 6) == 3) {
Aa[Ha & 7] = ja;
} else {
ia = Jb(Ha);
pb(ja);
}
break Be;
case 0xc4:
{
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 3) == 3) sc(6);
ia = Jb(Ha);
ja = fb();
ia += 4;
Ka = db();
de(0, Ka);
Aa[(Ha >> 3) & 7] = ja;
};
break Be;
case 0xc5:
{
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 3) == 3) sc(6);
ia = Jb(Ha);
ja = fb();
ia += 4;
Ka = db();
de(3, Ka);
Aa[(Ha >> 3) & 7] = ja;
};
break Be;
case 0x00:
case 0x08:
case 0x10:
case 0x18:
case 0x20:
case 0x28:
case 0x30:
case 0x38:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = b >> 3;
Ja = (Ha >> 3) & 7;
Ka = ((Aa[Ja & 3] >> ((Ja & 4) << 1)) & 0xff);
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ob(Ia, Qb(Ma, ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff), Ka));
} else {
ia = Jb(Ha);
if (Ma != 7) {
ja = hb();
ja = Qb(Ma, ja, Ka);
nb(ja);
} else {
ja = bb();
Qb(7, ja, Ka);
}
}
break Be;
case 0x01:
case 0x09:
case 0x11:
case 0x19:
case 0x21:
case 0x29:
case 0x31:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = b >> 3;
Ka = Aa[(Ha >> 3) & 7];
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Aa[Ia] = ac(Ma, Aa[Ia], Ka);
} else {
ia = Jb(Ha);
ja = lb();
ja = ac(Ma, ja, Ka);
rb(ja);
}
break Be;
case 0x39:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = b >> 3;
Ka = Aa[(Ha >> 3) & 7];
if ((Ha >> 6) == 3) {
Ia = Ha & 7; {
Ba = Ka;
Ca = (Aa[Ia] - Ba) & -1;
Da = 8;
};
} else {
ia = Jb(Ha);
ja = fb(); {
Ba = Ka;
Ca = (ja - Ba) & -1;
Da = 8;
};
}
break Be;
case 0x02:
case 0x0a:
case 0x12:
case 0x1a:
case 0x22:
case 0x2a:
case 0x32:
case 0x3a:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = b >> 3;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ka = ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff);
} else {
ia = Jb(Ha);
Ka = bb();
}
Ob(Ja, Qb(Ma, ((Aa[Ja & 3] >> ((Ja & 4) << 1)) & 0xff), Ka));
break Be;
case 0x03:
case 0x0b:
case 0x13:
case 0x1b:
case 0x23:
case 0x2b:
case 0x33:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = b >> 3;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ka = Aa[Ha & 7];
} else {
ia = Jb(Ha);
Ka = fb();
}
Aa[Ja] = ac(Ma, Aa[Ja], Ka);
break Be;
case 0x3b:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = b >> 3;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ka = Aa[Ha & 7];
} else {
ia = Jb(Ha);
Ka = fb();
} {
Ba = Ka;
Ca = (Aa[Ja] - Ba) & -1;
Da = 8;
};
break Be;
case 0x04:
case 0x0c:
case 0x14:
case 0x1c:
case 0x24:
case 0x2c:
case 0x34:
case 0x3c:
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = b >> 3;
Ob(0, Qb(Ma, Aa[0] & 0xff, Ka));
break Be;
case 0x05:
case 0x0d:
case 0x15:
case 0x1d:
case 0x25:
case 0x2d:
case 0x35:
case 0x3d:
Ka = Ib();
Ma = b >> 3;
Aa[0] = ac(Ma, Aa[0], Ka);
break Be;
case 0x80:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ob(Ia, Qb(Ma, ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff), Ka));
} else {
ia = Jb(Ha);
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if (Ma != 7) {
ja = hb();
ja = Qb(Ma, ja, Ka);
nb(ja);
} else {
ja = bb();
Qb(7, ja, Ka);
}
}
break Be;
case 0x81:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ka = Ib();
Aa[Ia] = ac(Ma, Aa[Ia], Ka);
} else {
ia = Jb(Ha);
Ka = Ib();
if (Ma != 7) {
ja = lb();
ja = ac(Ma, ja, Ka);
rb(ja);
} else {
ja = fb();
ac(7, ja, Ka);
}
}
break Be;
case 0x83:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ka = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
Aa[Ia] = ac(Ma, Aa[Ia], Ka);
} else {
ia = Jb(Ha);
Ka = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
if (Ma != 7) {
ja = lb();
ja = ac(Ma, ja, Ka);
rb(ja);
} else {
ja = fb();
ac(7, ja, Ka);
}
}
break Be;
case 0x40:
case 0x41:
case 0x42:
case 0x43:
case 0x44:
case 0x45:
case 0x46:
case 0x47:
Ja = b & 7; {
if (Da < 25) {
Ea = Da;
}
Aa[Ja] = Fa = (Aa[Ja] + 1) & -1;
Da = 27;
};
break Be;
case 0x48:
case 0x49:
case 0x4a:
case 0x4b:
case 0x4c:
case 0x4d:
case 0x4e:
case 0x4f:
Ja = b & 7; {
if (Da < 25) {
Ea = Da;
}
Aa[Ja] = Fa = (Aa[Ja] - 1) & -1;
Da = 30;
};
break Be;
case 0x6b:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ka = Aa[Ha & 7];
} else {
ia = Jb(Ha);
Ka = fb();
}
La = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
Aa[Ja] = Lc(Ka, La);
break Be;
case 0x69:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ka = Aa[Ha & 7];
} else {
ia = Jb(Ha);
Ka = fb();
}
La = Ib();
Aa[Ja] = Lc(Ka, La);
break Be;
case 0x84:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff);
} else {
ia = Jb(Ha);
ja = bb();
}
Ja = (Ha >> 3) & 7;
Ka = ((Aa[Ja & 3] >> ((Ja & 4) << 1)) & 0xff);
Ca = ja & Ka;
Da = 12;
break Be;
case 0x85:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = fb();
}
Ka = Aa[(Ha >> 3) & 7];
Ca = ja & Ka;
Da = 14;
break Be;
case 0xa8:
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ca = Aa[0] & Ka;
Da = 12;
break Be;
case 0xa9:
Ka = Ib();
Ca = Aa[0] & Ka;
Da = 14;
break Be;
case 0xf6:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
switch (Ma) {
case 0:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff);
} else {
ia = Jb(Ha);
ja = bb();
}
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ca = ja & Ka;
Da = 12;
break;
case 2:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ob(Ia, ~ ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff));
} else {
ia = Jb(Ha);
ja = hb();
ja = ~ja;
nb(ja);
}
break;
case 3:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ob(Ia, Qb(5, 0, ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff)));
} else {
ia = Jb(Ha);
ja = hb();
ja = Qb(5, 0, ja);
nb(ja);
}
break;
case 4:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff);
} else {
ia = Jb(Ha);
ja = bb();
}
Pb(0, Dc(Aa[0], ja));
break;
case 5:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff);
} else {
ia = Jb(Ha);
ja = bb();
}
Pb(0, Ec(Aa[0], ja));
break;
case 6:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff);
} else {
ia = Jb(Ha);
ja = bb();
}
rc(ja);
break;
case 7:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff);
} else {
ia = Jb(Ha);
ja = bb();
}
tc(ja);
break;
default:
sc(6);
}
break Be;
case 0xf7:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
switch (Ma) {
case 0:
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = fb();
}
Ka = Ib();
Ca = ja & Ka;
Da = 14;
break;
case 2:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Aa[Ia] = ~Aa[Ia];
} else {
ia = Jb(Ha);
ja = lb();
ja = ~ja;
rb(ja);
}
break;
case 3:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Aa[Ia] = ac(5, 0, Aa[Ia]);
} else {
ia = Jb(Ha);
ja = lb();
ja = ac(5, 0, ja);
rb(ja);
}
break;
case 4:
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = fb();
}
Aa[0] = Kc(Aa[0], ja);
Aa[2] = Pa;
break;
case 5:
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = fb();
}
Aa[0] = Lc(Aa[0], ja);
Aa[2] = Pa;
break;
case 6:
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = fb();
}
Aa[0] = wc(Aa[2], Aa[0], ja);
Aa[2] = Pa;
break;
case 7:
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = fb();
}
Aa[0] = Ac(Aa[2], Aa[0], ja);
Aa[2] = Pa;
break;
default:
sc(6);
}
break Be;
case 0xc0:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ia = Ha & 7;
Ob(Ia, dc(Ma, ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff), Ka));
} else {
ia = Jb(Ha);
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja = hb();
ja = dc(Ma, ja, Ka);
nb(ja);
}
break Be;
case 0xc1:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ia = Ha & 7;
Aa[Ia] = hc(Ma, Aa[Ia], Ka);
} else {
ia = Jb(Ha);
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja = lb();
ja = hc(Ma, ja, Ka);
rb(ja);
}
break Be;
case 0xd0:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ob(Ia, dc(Ma, ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff), 1));
} else {
ia = Jb(Ha);
ja = hb();
ja = dc(Ma, ja, 1);
nb(ja);
}
break Be;
case 0xd1:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Aa[Ia] = hc(Ma, Aa[Ia], 1);
} else {
ia = Jb(Ha);
ja = lb();
ja = hc(Ma, ja, 1);
rb(ja);
}
break Be;
case 0xd2:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
Ka = Aa[1] & 0xff;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ob(Ia, dc(Ma, ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff), Ka));
} else {
ia = Jb(Ha);
ja = hb();
ja = dc(Ma, ja, Ka);
nb(ja);
}
break Be;
case 0xd3:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
Ka = Aa[1] & 0xff;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Aa[Ia] = hc(Ma, Aa[Ia], Ka);
} else {
ia = Jb(Ha);
ja = lb();
ja = hc(Ma, ja, Ka);
rb(ja);
}
break Be;
case 0x98:
Aa[0] = (Aa[0] << 16) >> 16;
break Be;
case 0x99:
Aa[2] = Aa[0] >> 31;
break Be;
case 0x50:
case 0x51:
case 0x52:
case 0x53:
case 0x54:
case 0x55:
case 0x56:
case 0x57:
ja = Aa[b & 7];
ia = (Aa[4] - 4) & -1; {
Ra = Xa[ia >>> 12];
if ((Ra | ia) & 3) {
qb(ja);
} else {
Ra ^= ia;
Qa[Ra] = ja & 0xff;
Qa[Ra + 1] = (ja >> 8) & 0xff;
Qa[Ra + 2] = (ja >> 16) & 0xff;
Qa[Ra + 3] = (ja >> 24) & 0xff;
}
};
Aa[4] = ia;
break Be;
case 0x58:
case 0x59:
case 0x5a:
case 0x5b:
case 0x5c:
case 0x5d:
case 0x5e:
case 0x5f:
ia = Aa[4];
ja = (((Ra = Wa[ia >>> 12]) | ia) & 3 ? eb() : (Ra ^= ia, Qa[Ra] | (Qa[Ra + 1] << 8) | (Qa[Ra + 2] << 16) | (Qa[Ra + 3] << 24)));
Aa[4] = (ia + 4) & -1;
Aa[b & 7] = ja;
break Be;
case 0x60:
ia = (Aa[4] - 32) & -1;
Ka = ia;
for (Ja = 7; Ja >= 0; Ja--) {
ja = Aa[Ja]; {
Ra = Xa[ia >>> 12];
if ((Ra | ia) & 3) {
qb(ja);
} else {
Ra ^= ia;
Qa[Ra] = ja & 0xff;
Qa[Ra + 1] = (ja >> 8) & 0xff;
Qa[Ra + 2] = (ja >> 16) & 0xff;
Qa[Ra + 3] = (ja >> 24) & 0xff;
}
};
ia = (ia + 4) & -1;
}
Aa[4] = Ka;
break Be;
case 0x61:
ia = Aa[4];
for (Ja = 7; Ja >= 0; Ja--) {
if (Ja != 4) {
Aa[Ja] = (((Ra = Wa[ia >>> 12]) | ia) & 3 ? eb() : (Ra ^= ia, Qa[Ra] | (Qa[Ra + 1] << 8) | (Qa[Ra + 2] << 16) | (Qa[Ra + 3] << 24)));
}
ia = (ia + 4) & -1;
}
Aa[4] = ia;
break Be;
case 0x8f:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) == 3) {
ia = Aa[4];
ja = fb();
Aa[4] = (ia + 4) & -1;
Aa[Ha & 7] = ja;
} else {
ia = Aa[4];
ja = fb();
ia = Jb(Ha, 4);
rb(ja);
Aa[4] = (Aa[4] + 4) & -1;
}
break Be;
case 0x68:
ja = Ib();
ia = (Aa[4] - 4) & -1;
rb(ja);
Aa[4] = ia;
break Be;
case 0x6a:
ja = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
ia = (Aa[4] - 4) & -1;
rb(ja);
Aa[4] = ia;
break Be;
case 0xc9:
ia = Aa[5];
ja = fb();
Aa[5] = ja;
Aa[4] = (ia + 4) & -1;
break Be;
case 0x9c:
ja = Pc();
ia = (Aa[4] - 4) & -1;
rb(ja);
Aa[4] = ia;
break Be;
case 0x9d:
ia = Aa[4];
ja = fb();
Aa[4] = (ia + 4) & -1;
if (za.cpl == 0) {
Rc(ja, (0x00000100 | 0x00040000 | 0x00200000 | 0x00004000 | 0x00000200 | 0x00003000)); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
} else {
var ve;
ve = (za.eflags >> 12) & 3;
if (za.cpl <= ve) {
Rc(ja, (0x00000100 | 0x00040000 | 0x00200000 | 0x00004000 | 0x00000200)); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
} else {
Rc(ja, (0x00000100 | 0x00040000 | 0x00200000 | 0x00004000));
}
}
break Be;
case 0x06:
{
ja = za.segs[0].selector;
ia = (Aa[4] - 4) & -1;
rb(ja);
Aa[4] = ia;
};
break Be;
case 0x0e:
{
ja = za.segs[1].selector;
ia = (Aa[4] - 4) & -1;
rb(ja);
Aa[4] = ia;
};
break Be;
case 0x16:
{
ja = za.segs[2].selector;
ia = (Aa[4] - 4) & -1;
rb(ja);
Aa[4] = ia;
};
break Be;
case 0x1e:
{
ja = za.segs[3].selector;
ia = (Aa[4] - 4) & -1;
rb(ja);
Aa[4] = ia;
};
break Be;
case 0x07:
{
ia = Aa[4];
ja = fb();
de(0, ja & 0xffff);
Aa[4] = (Aa[4] + 4) & -1;
};
break Be;
case 0x17:
{
ia = Aa[4];
ja = fb();
de(2, ja & 0xffff);
Aa[4] = (Aa[4] + 4) & -1;
};
break Be;
case 0x1f:
{
ia = Aa[4];
ja = fb();
de(3, ja & 0xffff);
Aa[4] = (Aa[4] + 4) & -1;
};
break Be;
case 0x8d:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) == 3) sc(6);
Aa[(Ha >> 3) & 7] = Jb(Ha);
break Be;
case 0xfe:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
switch (Ma) {
case 0:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ob(Ia, Vb(((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff)));
} else {
ia = Jb(Ha);
ja = hb();
ja = Vb(ja);
nb(ja);
}
break;
case 1:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ob(Ia, Wb(((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff)));
} else {
ia = Jb(Ha);
ja = hb();
ja = Wb(ja);
nb(ja);
}
break;
default:
sc(6);
}
break Be;
case 0xff:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
switch (Ma) {
case 0:
if ((Ha >> 6) == 3) {
Ia = Ha & 7; {
if (Da < 25) {
Ea = Da;
}
Aa[Ia] = Fa = (Aa[Ia] + 1) & -1;
Da = 27;
};
} else {
ia = Jb(Ha);
ja = lb(); {
if (Da < 25) {
Ea = Da;
}
ja = Fa = (ja + 1) & -1;
Da = 27;
};
rb(ja);
}
break;
case 1:
if ((Ha >> 6) == 3) {
Ia = Ha & 7; {
if (Da < 25) {
Ea = Da;
}
Aa[Ia] = Fa = (Aa[Ia] - 1) & -1;
Da = 30;
};
} else {
ia = Jb(Ha);
ja = lb(); {
if (Da < 25) {
Ea = Da;
}
ja = Fa = (ja - 1) & -1;
Da = 30;
};
rb(ja);
}
break;
case 2:
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = fb();
}
ia = (Aa[4] - 4) & -1;
rb(Eb);
Aa[4] = ia;
Eb = ja;
break;
case 4:
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = fb();
}
Eb = ja;
break;
case 6:
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = fb();
}
ia = (Aa[4] - 4) & -1;
rb(ja);
Aa[4] = ia;
break;
case 3:
case 5:
default:
throw "GRP5";
}
break Be;
case 0xeb:
ja = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
Eb = (Eb + ja) >> 0;
break Be;
case 0xe9:
ja = Ib();
Eb = (Eb + ja) >> 0;
break Be;
case 0xea:
ja = Ib();
Ka = Hb();
ge(Ka, ja);
break Be;
case 0x70:
case 0x71:
case 0x72:
case 0x73:
case 0x76:
case 0x77:
case 0x78:
case 0x79:
case 0x7a:
case 0x7b:
case 0x7c:
case 0x7d:
case 0x7e:
case 0x7f:
if (Ub(b & 0xf)) {
ja = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
Eb = (Eb + ja) >> 0;
} else {
Eb = (Eb + 1) >> 0;
}
break Be;
case 0x74:
switch (Da) {
case 0:
case 3:
case 6:
case 9:
case 12:
case 15:
case 18:
case 21:
Ka = (Ca & 0xff) == 0;
break;
case 1:
case 4:
case 7:
case 10:
case 13:
case 16:
case 19:
case 22:
Ka = (Ca & 0xffff) == 0;
break;
case 2:
case 5:
case 8:
case 11:
case 14:
case 17:
case 20:
case 23:
Ka = Ca == 0;
break;
case 24:
Ka = (Ba >> 6) & 1;
break;
case 25:
case 28:
Ka = (Fa & 0xff) == 0;
break;
case 26:
case 29:
Ka = (Fa & 0xffff) == 0;
break;
case 27:
case 30:
Ka = Fa == 0;
break;
default:
throw "JZ: unsupported cc_op=" + Da;
};
if (Ka) {
ja = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
Eb = (Eb + ja) >> 0;
} else {
Eb = (Eb + 1) >> 0;
}
break Be;
case 0x75:
switch (Da) {
case 0:
case 3:
case 6:
case 9:
case 12:
case 15:
case 18:
case 21:
Ka = (Ca & 0xff) == 0;
break;
case 1:
case 4:
case 7:
case 10:
case 13:
case 16:
case 19:
case 22:
Ka = (Ca & 0xffff) == 0;
break;
case 2:
case 5:
case 8:
case 11:
case 14:
case 17:
case 20:
case 23:
Ka = Ca == 0;
break;
case 24:
Ka = (Ba >> 6) & 1;
break;
case 25:
case 28:
Ka = (Fa & 0xff) == 0;
break;
case 26:
case 29:
Ka = (Fa & 0xffff) == 0;
break;
case 27:
case 30:
Ka = Fa == 0;
break;
default:
throw "JZ: unsupported cc_op=" + Da;
};
if (!Ka) {
ja = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
Eb = (Eb + ja) >> 0;
} else {
Eb = (Eb + 1) >> 0;
}
break Be;
case 0xe2:
ja = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
Aa[1] = (Aa[1] - 1) & -1;
if (Aa[1]) Eb = (Eb + ja) >> 0;
break Be;
case 0xe3:
ja = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
if (Aa[1] == 0) Eb = (Eb + ja) >> 0;
break Be;
case 0xc2:
Ka = (Hb() << 16) >> 16;
ia = Aa[4];
ja = fb();
Aa[4] = (Aa[4] + 4 + Ka) & -1;
Eb = ja;
break Be;
case 0xc3:
ia = Aa[4];
ja = fb();
Aa[4] = (Aa[4] + 4) & -1;
Eb = ja;
break Be;
case 0xe8:
ja = Ib();
ia = (Aa[4] - 4) & -1;
rb(Eb);
Aa[4] = ia;
Eb = (Eb + ja) >> 0;
break Be;
case 0x90:
break Be;
case 0xcc:
Ka = Eb;
Ld(3, 1, 0, Ka, 0);
break Be;
case 0xcd:
ja = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ka = Eb;
Ld(ja, 1, 0, Ka, 0);
break Be;
case 0xce:
if (Ub(0)) {
Ka = Eb;
Ld(4, 1, 0, Ka, 0);
}
break Be;
case 0xcf:
ye(1); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
break Be;
case 0xf5:
Ba = fc() ^ 0x0001;
Da = 24;
break Be;
case 0xf8:
Ba = fc() & ~0x0001;
Da = 24;
break Be;
case 0xf9:
Ba = fc() | 0x0001;
Da = 24;
break Be;
case 0xfc:
za.df = 1;
break Be;
case 0xfd:
za.df = -1;
break Be;
case 0xfa:
ve = (za.eflags >> 12) & 3;
if (za.cpl > ve) sc(13);
za.eflags &= ~0x00000200;
break Be;
case 0xfb:
ve = (za.eflags >> 12) & 3;
if (za.cpl > ve) sc(13);
za.eflags |= 0x00000200; {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
break Be;
case 0x9e:
ja = ((Aa[0] >> 8) & (0x0080 | 0x0040 | 0x0010 | 0x0004 | 0x0001)) | (Ub(0) << 11);
Ba = ja;
Da = 24;
break Be;
case 0x9f:
ja = Pc();
Ob(4, ja);
break Be;
case 0xf4:
if (za.cpl != 0) sc(13);
za.halted = 1;
Oa = 257;
break Ae;
case 0xa4:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
if (8 === 32 && (Aa[1] >>> 0) >= 4 && za.df == 1 && ((Aa[6] | Aa[7]) & 3) == 0 && bd()) {} else {
ia = Aa[6];
ja = bb();
ia = Aa[7];
nb(ja);
Aa[6] = (Aa[6] + (za.df << 0)) & -1;
Aa[7] = (Aa[7] + (za.df << 0)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
}
Eb = Fb;
}
} else {
ia = Aa[6];
ja = bb();
ia = Aa[7];
nb(ja);
Aa[6] = (Aa[6] + (za.df << 0)) & -1;
Aa[7] = (Aa[7] + (za.df << 0)) & -1;
};
break Be;
case 0xa5:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
if (32 === 32 && (Aa[1] >>> 0) >= 4 && za.df == 1 && ((Aa[6] | Aa[7]) & 3) == 0 && bd()) {} else {
ia = Aa[6];
ja = fb();
ia = Aa[7];
rb(ja);
Aa[6] = (Aa[6] + (za.df << 2)) & -1;
Aa[7] = (Aa[7] + (za.df << 2)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
}
Eb = Fb;
}
} else {
ia = Aa[6];
ja = fb();
ia = Aa[7];
rb(ja);
Aa[6] = (Aa[6] + (za.df << 2)) & -1;
Aa[7] = (Aa[7] + (za.df << 2)) & -1;
};
break Be;
case 0xaa:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
if (8 === 32 && (Aa[1] >>> 0) >= 4 && za.df == 1 && (Aa[7] & 3) == 0 && gd()) {} else {
ia = Aa[7];
nb(Aa[0]);
Aa[7] = (ia + (za.df << 0)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
}
Eb = Fb;
}
} else {
ia = Aa[7];
nb(Aa[0]);
Aa[7] = (ia + (za.df << 0)) & -1;
};
break Be;
case 0xab:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
if (32 === 32 && (Aa[1] >>> 0) >= 4 && za.df == 1 && (Aa[7] & 3) == 0 && gd()) {} else {
ia = Aa[7];
rb(Aa[0]);
Aa[7] = (ia + (za.df << 2)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
}
Eb = Fb;
}
} else {
ia = Aa[7];
rb(Aa[0]);
Aa[7] = (ia + (za.df << 2)) & -1;
};
break Be;
case 0xa6:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
ia = Aa[6];
ja = bb();
ia = Aa[7];
Ka = bb();
Qb(7, ja, Ka);
Aa[6] = (Aa[6] + (za.df << 0)) & -1;
Aa[7] = (Aa[7] + (za.df << 0)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
if (Ga & 0x0010) {
if (!Ub(4)) break Be;
} else {
if (Ub(4)) break Be;
}
Eb = Fb;
}
} else {
ia = Aa[6];
ja = bb();
ia = Aa[7];
Ka = bb();
Qb(7, ja, Ka);
Aa[6] = (Aa[6] + (za.df << 0)) & -1;
Aa[7] = (Aa[7] + (za.df << 0)) & -1;
};
break Be;
case 0xa7:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
ia = Aa[6];
ja = fb();
ia = Aa[7];
Ka = fb();
ac(7, ja, Ka);
Aa[6] = (Aa[6] + (za.df << 2)) & -1;
Aa[7] = (Aa[7] + (za.df << 2)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
if (Ga & 0x0010) {
if (!Ub(4)) break Be;
} else {
if (Ub(4)) break Be;
}
Eb = Fb;
}
} else {
ia = Aa[6];
ja = fb();
ia = Aa[7];
Ka = fb();
ac(7, ja, Ka);
Aa[6] = (Aa[6] + (za.df << 2)) & -1;
Aa[7] = (Aa[7] + (za.df << 2)) & -1;
};
break Be;
case 0xac:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
ia = Aa[6];
if (8 == 32) Aa[0] = fb();
else Ob(0, bb());
Aa[6] = (ia + (za.df << 0)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
Eb = Fb;
}
} else {
ia = Aa[6];
if (8 == 32) Aa[0] = fb();
else Ob(0, bb());
Aa[6] = (ia + (za.df << 0)) & -1;
};
break Be;
case 0xad:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
ia = Aa[6];
if (32 == 32) Aa[0] = fb();
else Ce(0, fb());
Aa[6] = (ia + (za.df << 2)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
Eb = Fb;
}
} else {
ia = Aa[6];
if (32 == 32) Aa[0] = fb();
else Ce(0, fb());
Aa[6] = (ia + (za.df << 2)) & -1;
};
break Be;
case 0xae:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
ia = Aa[7];
ja = bb();
Qb(7, Aa[0], ja);
Aa[7] = (Aa[7] + (za.df << 0)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
if (Ga & 0x0010) {
if (!Ub(4)) break Be;
} else {
if (Ub(4)) break Be;
}
Eb = Fb;
}
} else {
ia = Aa[7];
ja = bb();
Qb(7, Aa[0], ja);
Aa[7] = (Aa[7] + (za.df << 0)) & -1;
};
break Be;
case 0xaf:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
ia = Aa[7];
ja = fb();
ac(7, Aa[0], ja);
Aa[7] = (Aa[7] + (za.df << 2)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
if (Ga & 0x0010) {
if (!Ub(4)) break Be;
} else {
if (Ub(4)) break Be;
}
Eb = Fb;
}
} else {
ia = Aa[7];
ja = fb();
ac(7, Aa[0], ja);
Aa[7] = (Aa[7] + (za.df << 2)) & -1;
};
break Be;
case 0xd8:
case 0xd9:
case 0xda:
case 0xdb:
case 0xdc:
case 0xdd:
case 0xde:
case 0xdf:
if (za.cr0 & ((1 << 2) | (1 << 3))) {
sc(7);
}
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
Ia = Ha & 7;
Ma = ((b & 7) << 3) | ((Ha >> 3) & 7);
Pb(0, 0xffff);
if ((Ha >> 6) == 3) {} else {
ia = Jb(Ha);
}
break Be;
case 0x9b:
break Be;
case 0xe4:
ve = (za.eflags >> 12) & 3;
if (za.cpl > ve) sc(13);
ja = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ob(0, za.ld8_port(ja)); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
break Be;
case 0xe5:
ve = (za.eflags >> 12) & 3;
if (za.cpl > ve) sc(13);
ja = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Aa[0] = za.ld32_port(ja); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
break Be;
case 0xe6:
ve = (za.eflags >> 12) & 3;
if (za.cpl > ve) sc(13);
ja = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
za.st8_port(ja, Aa[0] & 0xff); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
break Be;
case 0xe7:
ve = (za.eflags >> 12) & 3;
if (za.cpl > ve) sc(13);
ja = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
za.st32_port(ja, Aa[0]); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
break Be;
case 0xec:
ve = (za.eflags >> 12) & 3;
if (za.cpl > ve) sc(13);
Ob(0, za.ld8_port(Aa[2] & 0xffff)); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
break Be;
case 0xed:
ve = (za.eflags >> 12) & 3;
if (za.cpl > ve) sc(13);
Aa[0] = za.ld32_port(Aa[2] & 0xffff); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
break Be;
case 0xee:
ve = (za.eflags >> 12) & 3;
if (za.cpl > ve) sc(13);
za.st8_port(Aa[2] & 0xffff, Aa[0] & 0xff); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
break Be;
case 0xef:
ve = (za.eflags >> 12) & 3;
if (za.cpl > ve) sc(13);
za.st32_port(Aa[2] & 0xffff, Aa[0]); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
break Be;
case 0x26:
case 0x27:
case 0x2e:
case 0x2f:
case 0x36:
case 0x37:
case 0x3e:
case 0x3f:
case 0x62:
case 0x63:
case 0x67:
case 0x6c:
case 0x6d:
case 0x6e:
case 0x6f:
case 0x82:
case 0x9a:
case 0xc8:
case 0xca:
case 0xcb:
case 0xd4:
case 0xd5:
case 0xd6:
case 0xd7:
case 0xe0:
case 0xe1:
case 0xf1:
sc(6);
break;
case 0x0f:
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
switch (b) {
case 0x80:
case 0x81:
case 0x82:
case 0x83:
case 0x84:
case 0x85:
case 0x86:
case 0x87:
case 0x88:
case 0x89:
case 0x8a:
case 0x8b:
case 0x8c:
case 0x8d:
case 0x8e:
case 0x8f:
Ka = Ub(b & 0xf);
ja = Ib();
if (Ka) Eb = (Eb + ja) >> 0;
break Be;
case 0x90:
case 0x91:
case 0x92:
case 0x93:
case 0x94:
case 0x95:
case 0x96:
case 0x97:
case 0x98:
case 0x99:
case 0x9a:
case 0x9b:
case 0x9c:
case 0x9d:
case 0x9e:
case 0x9f:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja = Ub(b & 0xf);
if ((Ha >> 6) == 3) {
Ob(Ha & 7, ja);
} else {
ia = Jb(Ha);
nb(ja);
}
break Be;
case 0x40:
case 0x41:
case 0x42:
case 0x43:
case 0x44:
case 0x45:
case 0x46:
case 0x47:
case 0x48:
case 0x49:
case 0x4a:
case 0x4b:
case 0x4c:
case 0x4d:
case 0x4e:
case 0x4f:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = fb();
}
if (Ub(b & 0xf)) Aa[(Ha >> 3) & 7] = ja;
break Be;
case 0xb6:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff);
} else {
ia = Jb(Ha);
ja = bb();
}
Aa[Ja] = ja;
break Be;
case 0xb7:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = db();
}
Aa[Ja] = ja & 0xffff;
break Be;
case 0xbe:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff);
} else {
ia = Jb(Ha);
ja = bb();
}
Aa[Ja] = (ja << 24) >> 24;
break Be;
case 0xbf:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = db();
}
Aa[Ja] = (ja << 16) >> 16;
break Be;
case 0x00:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
switch (Ma) {
case 0:
case 1:
if (Ma == 0) ja = za.ldt.selector;
else ja = za.tr.selector;
if ((Ha >> 6) == 3) {
Pb(Ha & 7, ja);
} else {
ia = Jb(Ha);
pb(ja);
}
break;
case 2:
if (za.cpl != 0) sc(13);
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7] & 0xffff;
} else {
ia = Jb(Ha);
ja = db();
}
ae(ja);
break;
case 3:
if (za.cpl != 0) sc(13);
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7] & 0xffff;
} else {
ia = Jb(Ha);
ja = db();
}
ce(ja);
break;
default:
sc(6);
}
break Be;
case 0x01:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
switch (Ma) {
case 2:
case 3:
if ((Ha >> 6) == 3) sc(6);
if (this.cpl != 0) sc(13);
ia = Jb(Ha);
ja = db();
ia += 2;
Ka = fb();
if (Ma == 2) {
this.gdt.base = Ka;
this.gdt.limit = ja;
} else {
this.idt.base = Ka;
this.idt.limit = ja;
}
break;
case 7:
if (this.cpl != 0) sc(13);
if ((Ha >> 6) == 3) sc(6);
ia = Jb(Ha);
za.tlb_flush_page(ia & -4096);
break;
default:
sc(6);
}
break Be;
case 0x20:
if (za.cpl != 0) sc(13);
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) != 3) sc(6);
Ja = (Ha >> 3) & 7;
switch (Ja) {
case 0:
ja = za.cr0;
break;
case 2:
ja = za.cr2;
break;
case 3:
ja = za.cr3;
break;
case 4:
ja = za.cr4;
break;
default:
sc(6);
}
Aa[Ha & 7] = ja;
break Be;
case 0x22:
if (za.cpl != 0) sc(13);
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) != 3) sc(6);
Ja = (Ha >> 3) & 7;
ja = Aa[Ha & 7];
switch (Ja) {
case 0:
qd(ja);
break;
case 2:
za.cr2 = ja;
break;
case 3:
sd(ja);
break;
case 4:
ud(ja);
break;
default:
sc(6);
}
break Be;
case 0x06:
if (za.cpl != 0) sc(13);
qd(za.cr0 & ~ (1 << 3));
break Be;
case 0x23:
if (za.cpl != 0) sc(13);
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) != 3) sc(6);
Ja = (Ha >> 3) & 7;
ja = Aa[Ha & 7];
if (Ja == 4 || Ja == 5) sc(6);
break Be;
case 0xb2:
{
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 3) == 3) sc(6);
ia = Jb(Ha);
ja = fb();
ia += 4;
Ka = db();
de(2, Ka);
Aa[(Ha >> 3) & 7] = ja;
};
break Be;
case 0xb4:
{
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 3) == 3) sc(6);
ia = Jb(Ha);
ja = fb();
ia += 4;
Ka = db();
de(4, Ka);
Aa[(Ha >> 3) & 7] = ja;
};
break Be;
case 0xb5:
{
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 3) == 3) sc(6);
ia = Jb(Ha);
ja = fb();
ia += 4;
Ka = db();
de(5, Ka);
Aa[(Ha >> 3) & 7] = ja;
};
break Be;
case 0xa2:
ze();
break Be;
case 0xa4:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ka = Aa[(Ha >> 3) & 7];
if ((Ha >> 6) == 3) {
La = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ia = Ha & 7;
Aa[Ia] = ic(Aa[Ia], Ka, La);
} else {
ia = Jb(Ha);
La = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja = lb();
ja = ic(Ma, ja, Ka, La);
rb(ja);
}
break Be;
case 0xa5:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ka = Aa[(Ha >> 3) & 7];
La = Aa[1];
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Aa[Ia] = ic(Aa[Ia], Ka, La);
} else {
ia = Jb(Ha);
ja = lb();
ja = ic(Ma, ja, Ka, La);
rb(ja);
}
break Be;
case 0xac:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ka = Aa[(Ha >> 3) & 7];
if ((Ha >> 6) == 3) {
La = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ia = Ha & 7;
Aa[Ia] = kc(Aa[Ia], Ka, La);
} else {
ia = Jb(Ha);
La = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja = lb();
ja = kc(Ma, ja, Ka, La);
rb(ja);
}
break Be;
case 0xad:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ka = Aa[(Ha >> 3) & 7];
La = Aa[1];
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Aa[Ia] = kc(Aa[Ia], Ka, La);
} else {
ia = Jb(Ha);
ja = lb();
ja = kc(Ma, ja, Ka, La);
rb(ja);
}
break Be;
case 0xba:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
switch (Ma) {
case 4:
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
} else {
ia = Jb(Ha);
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja = lb();
}
lc(ja, Ka);
break;
case 5:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Aa[Ia] = mc(Aa[Ia], Ka);
} else {
ia = Jb(Ha);
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja = lb();
ja = mc(ja, Ka);
rb(ja);
};
break;
case 6:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Aa[Ia] = nc(Aa[Ia], Ka);
} else {
ia = Jb(Ha);
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja = lb();
ja = nc(ja, Ka);
rb(ja);
};
break;
case 7:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Aa[Ia] = oc(Aa[Ia], Ka);
} else {
ia = Jb(Ha);
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja = lb();
ja = oc(ja, Ka);
rb(ja);
};
break;
default:
sc(6);
}
break Be;
case 0xa3:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ka = Aa[(Ha >> 3) & 7];
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ia = (ia + ((Ka >> 5) << 2)) & -1;
ja = fb();
}
lc(ja, Ka);
break Be;
case 0xab:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ka = Aa[(Ha >> 3) & 7];
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Aa[Ia] = mc(Aa[Ia], Ka);
} else {
ia = Jb(Ha);
ia = (ia + ((Ka >> 5) << 2)) & -1;
ja = lb();
ja = mc(ja, Ka);
rb(ja);
}
break Be;
case 0xb3:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ka = Aa[(Ha >> 3) & 7];
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Aa[Ia] = nc(Aa[Ia], Ka);
} else {
ia = Jb(Ha);
ia = (ia + ((Ka >> 5) << 2)) & -1;
ja = lb();
ja = nc(ja, Ka);
rb(ja);
}
break Be;
case 0xbb:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ka = Aa[(Ha >> 3) & 7];
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Aa[Ia] = oc(Aa[Ia], Ka);
} else {
ia = Jb(Ha);
ia = (ia + ((Ka >> 5) << 2)) & -1;
ja = lb();
ja = oc(ja, Ka);
rb(ja);
}
break Be;
case 0xbc:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ka = Aa[Ha & 7];
} else {
ia = Jb(Ha);
Ka = fb();
}
Aa[Ja] = pc(Aa[Ja], Ka);
break Be;
case 0xbd:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ka = Aa[Ha & 7];
} else {
ia = Jb(Ha);
Ka = fb();
}
Aa[Ja] = qc(Aa[Ja], Ka);
break Be;
case 0xaf:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ka = Aa[Ha & 7];
} else {
ia = Jb(Ha);
Ka = fb();
}
Aa[Ja] = Lc(Aa[Ja], Ka);
break Be;
case 0x31:
if ((za.cr4 & (1 << 2)) && za.cpl != 0) sc(13);
ja = Tc();
Aa[0] = ja >>> 0;
Aa[2] = (ja / 0x100000000) >>> 0;
break Be;
case 0xc0:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff);
Ka = Qb(0, ja, ((Aa[Ja & 3] >> ((Ja & 4) << 1)) & 0xff));
Ob(Ja, ja);
Ob(Ia, Ka);
} else {
ia = Jb(Ha);
ja = hb();
Ka = Qb(0, ja, ((Aa[Ja & 3] >> ((Ja & 4) << 1)) & 0xff));
nb(Ka);
Ob(Ja, ja);
}
break Be;
case 0xc1:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = Aa[Ia];
Ka = ac(0, ja, Aa[Ja]);
Aa[Ja] = ja;
Aa[Ia] = Ka;
} else {
ia = Jb(Ha);
ja = lb();
Ka = ac(0, ja, Aa[Ja]);
rb(Ka);
Aa[Ja] = ja;
}
break Be;
case 0xb1:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = Aa[Ia];
Ka = ac(5, Aa[0], ja);
if (Ka == 0) {
Aa[Ia] = Aa[Ja];
} else {
Aa[0] = ja;
}
} else {
ia = Jb(Ha);
ja = lb();
Ka = ac(5, Aa[0], ja);
if (Ka == 0) {
rb(Aa[Ja]);
} else {
Aa[0] = ja;
}
}
break Be;
case 0xa0:
{
ja = za.segs[4].selector;
ia = (Aa[4] - 4) & -1;
rb(ja);
Aa[4] = ia;
};
break Be;
case 0xa8:
{
ja = za.segs[5].selector;
ia = (Aa[4] - 4) & -1;
rb(ja);
Aa[4] = ia;
};
break Be;
case 0xa1:
{
ia = Aa[4];
ja = fb();
de(4, ja & 0xffff);
Aa[4] = (Aa[4] + 4) & -1;
};
break Be;
case 0xa9:
{
ia = Aa[4];
ja = fb();
de(5, ja & 0xffff);
Aa[4] = (Aa[4] + 4) & -1;
};
break Be;
case 0xc8:
case 0xc9:
case 0xca:
case 0xcb:
case 0xcc:
case 0xcd:
case 0xce:
case 0xcf:
Ja = b & 7;
ja = Aa[Ja];
ja = (ja >>> 24) | ((ja >> 8) & 0x0000ff00) | ((ja << 8) & 0x00ff0000) | (ja << 24);
Aa[Ja] = ja;
break Be;
case 0x02:
case 0x03:
case 0x04:
case 0x05:
case 0x07:
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0c:
case 0x0d:
case 0x0e:
case 0x0f:
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x14:
case 0x15:
case 0x16:
case 0x17:
case 0x18:
case 0x19:
case 0x1a:
case 0x1b:
case 0x1c:
case 0x1d:
case 0x1e:
case 0x1f:
case 0x21:
case 0x24:
case 0x25:
case 0x26:
case 0x27:
case 0x28:
case 0x29:
case 0x2a:
case 0x2b:
case 0x2c:
case 0x2d:
case 0x2e:
case 0x2f:
case 0x30:
case 0x32:
case 0x33:
case 0x34:
case 0x35:
case 0x36:
case 0x37:
case 0x38:
case 0x39:
case 0x3a:
case 0x3b:
case 0x3c:
case 0x3d:
case 0x3e:
case 0x3f:
case 0x50:
case 0x51:
case 0x52:
case 0x53:
case 0x54:
case 0x55:
case 0x56:
case 0x57:
case 0x58:
case 0x59:
case 0x5a:
case 0x5b:
case 0x5c:
case 0x5d:
case 0x5e:
case 0x5f:
case 0x60:
case 0x61:
case 0x62:
case 0x63:
case 0x64:
case 0x65:
case 0x66:
case 0x67:
case 0x68:
case 0x69:
case 0x6a:
case 0x6b:
case 0x6c:
case 0x6d:
case 0x6e:
case 0x6f:
case 0x70:
case 0x71:
case 0x72:
case 0x73:
case 0x74:
case 0x75:
case 0x76:
case 0x77:
case 0x78:
case 0x79:
case 0x7a:
case 0x7b:
case 0x7c:
case 0x7d:
case 0x7e:
case 0x7f:
case 0xa6:
case 0xa7:
case 0xaa:
case 0xae:
case 0xb0:
case 0xb8:
case 0xb9:
case 0xc2:
case 0xc3:
case 0xc4:
case 0xc5:
case 0xc6:
case 0xc7:
case 0xd0:
case 0xd1:
case 0xd2:
case 0xd3:
case 0xd4:
case 0xd5:
case 0xd6:
case 0xd7:
case 0xd8:
case 0xd9:
case 0xda:
case 0xdb:
case 0xdc:
case 0xdd:
case 0xde:
case 0xdf:
case 0xe0:
case 0xe1:
case 0xe2:
case 0xe3:
case 0xe4:
case 0xe5:
case 0xe6:
case 0xe7:
case 0xe8:
case 0xe9:
case 0xea:
case 0xeb:
case 0xec:
case 0xed:
case 0xee:
case 0xef:
case 0xf0:
case 0xf1:
case 0xf2:
case 0xf3:
case 0xf4:
case 0xf5:
case 0xf6:
case 0xf7:
case 0xf8:
case 0xf9:
case 0xfa:
case 0xfb:
case 0xfc:
case 0xfd:
case 0xfe:
case 0xff:
default:
sc(6);
}
break;
default:
switch (b) {
case 0x166:
Ga |= 0x0100;
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
b |= (Ga & 0x0100);
break;
case 0x1f0:
Ga |= 0x0040;
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
b |= (Ga & 0x0100);
break;
case 0x1f2:
Ga |= 0x0020;
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
b |= (Ga & 0x0100);
break;
case 0x1f3:
Ga |= 0x0010;
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
b |= (Ga & 0x0100);
break;
case 0x164:
Ga = (Ga & ~0x000f) | (4 + 1);
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
b |= (Ga & 0x0100);;
break;
case 0x165:
Ga = (Ga & ~0x000f) | (5 + 1);
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
b |= (Ga & 0x0100);;
break;
case 0x189:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja = Aa[(Ha >> 3) & 7];
if ((Ha >> 6) == 3) {
Pb(Ha & 7, ja);
} else {
ia = Jb(Ha);
pb(ja);
}
break Be;
case 0x18b:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = db();
}
Pb((Ha >> 3) & 7, ja);
break Be;
case 0x1b8:
case 0x1b9:
case 0x1ba:
case 0x1bb:
case 0x1bc:
case 0x1bd:
case 0x1be:
case 0x1bf:
Pb(b & 7, Hb());
break Be;
case 0x1a1:
ia = Nb();
ja = db();
Pb(0, ja);
break Be;
case 0x1a3:
ia = Nb();
pb(Aa[0]);
break Be;
case 0x1c7:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) == 3) {
ja = Hb();
Pb(Ha & 7, ja);
} else {
ia = Jb(Ha);
ja = Hb();
pb(ja);
}
break Be;
case 0x191:
case 0x192:
case 0x193:
case 0x194:
case 0x195:
case 0x196:
case 0x197:
Ja = b & 7;
ja = Aa[0];
Pb(0, Aa[Ja]);
Pb(Ja, ja);
break Be;
case 0x187:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = Aa[Ia];
Pb(Ia, Aa[Ja]);
} else {
ia = Jb(Ha);
ja = jb();
pb(Aa[Ja]);
}
Pb(Ja, ja);
break Be;
case 0x101:
case 0x109:
case 0x111:
case 0x119:
case 0x121:
case 0x129:
case 0x131:
case 0x139:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (b >> 3) & 7;
Ka = Aa[(Ha >> 3) & 7];
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Pb(Ia, Xb(Ma, Aa[Ia], Ka));
} else {
ia = Jb(Ha);
if (Ma != 7) {
ja = jb();
ja = Xb(Ma, ja, Ka);
pb(ja);
} else {
ja = db();
Xb(7, ja, Ka);
}
}
break Be;
case 0x103:
case 0x10b:
case 0x113:
case 0x11b:
case 0x123:
case 0x12b:
case 0x133:
case 0x13b:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (b >> 3) & 7;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ka = Aa[Ha & 7];
} else {
ia = Jb(Ha);
Ka = db();
}
Pb(Ja, Xb(Ma, Aa[Ja], Ka));
break Be;
case 0x105:
case 0x10d:
case 0x115:
case 0x11d:
case 0x125:
case 0x12d:
case 0x135:
case 0x13d:
Ka = Hb();
Ma = (b >> 3) & 7;
Pb(0, Xb(Ma, Aa[0], Ka));
break Be;
case 0x181:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ka = Hb();
Aa[Ia] = Xb(Ma, Aa[Ia], Ka);
} else {
ia = Jb(Ha);
Ka = Hb();
if (Ma != 7) {
ja = jb();
ja = Xb(Ma, ja, Ka);
pb(ja);
} else {
ja = db();
Xb(7, ja, Ka);
}
}
break Be;
case 0x183:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Ka = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
Pb(Ia, Xb(Ma, Aa[Ia], Ka));
} else {
ia = Jb(Ha);
Ka = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
if (Ma != 7) {
ja = jb();
ja = Xb(Ma, ja, Ka);
pb(ja);
} else {
ja = db();
Xb(7, ja, Ka);
}
}
break Be;
case 0x140:
case 0x141:
case 0x142:
case 0x143:
case 0x144:
case 0x145:
case 0x146:
case 0x147:
Ja = b & 7;
Pb(Ja, Yb(Aa[Ja]));
break Be;
case 0x148:
case 0x149:
case 0x14a:
case 0x14b:
case 0x14c:
case 0x14d:
case 0x14e:
case 0x14f:
Ja = b & 7;
Pb(Ja, Zb(Aa[Ja]));
break Be;
case 0x16b:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ka = Aa[Ha & 7];
} else {
ia = Jb(Ha);
Ka = db();
}
La = ((((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra]) << 24) >> 24;
Eb++;;
Pb(Ja, Gc(Ka, La));
break Be;
case 0x169:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ka = Aa[Ha & 7];
} else {
ia = Jb(Ha);
Ka = db();
}
La = Hb();
Pb(Ja, Gc(Ka, La));
break Be;
case 0x185:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = db();
}
Ka = Aa[(Ha >> 3) & 7];
Ca = ja & Ka;
Da = 13;
break Be;
case 0x1a9:
Ka = Hb();
Ca = Aa[0] & Ka;
Da = 13;
break Be;
case 0x1f7:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
switch (Ma) {
case 0:
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = db();
}
Ka = Hb();
Ca = ja & Ka;
Da = 13;
break;
case 2:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Pb(Ia, ~Aa[Ia]);
} else {
ia = Jb(Ha);
ja = jb();
ja = ~ja;
pb(ja);
}
break;
case 3:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Pb(Ia, Xb(5, 0, Aa[Ia]));
} else {
ia = Jb(Ha);
ja = jb();
ja = Xb(5, 0, ja);
pb(ja);
}
break;
case 4:
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = db();
}
ja = Fc(Aa[0], ja);
Pb(0, ja);
Pb(2, ja >> 16);
break;
case 5:
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = db();
}
ja = Gc(Aa[0], ja);
Pb(0, ja);
Pb(2, ja >> 16);
break;
case 6:
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = db();
}
uc(ja);
break;
case 7:
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = db();
}
vc(ja);
break;
default:
sc(6);
}
break Be;
case 0x1c1:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ia = Ha & 7;
Pb(Ia, gc(Ma, Aa[Ia], Ka));
} else {
ia = Jb(Ha);
Ka = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
ja = jb();
ja = gc(Ma, ja, Ka);
pb(ja);
}
break Be;
case 0x1d1:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Pb(Ia, gc(Ma, Aa[Ia], 1));
} else {
ia = Jb(Ha);
ja = jb();
ja = gc(Ma, ja, 1);
pb(ja);
}
break Be;
case 0x1d3:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
Ka = Aa[1] & 0xff;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Pb(Ia, gc(Ma, Aa[Ia], Ka));
} else {
ia = Jb(Ha);
ja = jb();
ja = gc(Ma, ja, Ka);
pb(ja);
}
break Be;
case 0x198:
Pb(0, (Aa[0] << 24) >> 24);
break Be;
case 0x199:
Pb(2, (Aa[0] << 16) >> 31);
break Be;
case 0x1ff:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ma = (Ha >> 3) & 7;
switch (Ma) {
case 0:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Pb(Ia, Yb(Aa[Ia]));
} else {
ia = Jb(Ha);
ja = jb();
ja = Yb(ja);
pb(ja);
}
break;
case 1:
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
Pb(Ia, Zb(Aa[Ia]));
} else {
ia = Jb(Ha);
ja = jb();
ja = Zb(ja);
pb(ja);
}
break;
case 2:
case 4:
case 6:
case 3:
case 5:
default:
throw "GRP5";
}
break Be;
case 0x190:
break Be;
case 0x1a5:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
if (16 === 32 && (Aa[1] >>> 0) >= 4 && za.df == 1 && ((Aa[6] | Aa[7]) & 3) == 0 && bd()) {} else {
ia = Aa[6];
ja = db();
ia = Aa[7];
pb(ja);
Aa[6] = (Aa[6] + (za.df << 1)) & -1;
Aa[7] = (Aa[7] + (za.df << 1)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
}
Eb = Fb;
}
} else {
ia = Aa[6];
ja = db();
ia = Aa[7];
pb(ja);
Aa[6] = (Aa[6] + (za.df << 1)) & -1;
Aa[7] = (Aa[7] + (za.df << 1)) & -1;
};
break Be;
case 0x1a7:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
ia = Aa[6];
ja = db();
ia = Aa[7];
Ka = db();
Xb(7, ja, Ka);
Aa[6] = (Aa[6] + (za.df << 1)) & -1;
Aa[7] = (Aa[7] + (za.df << 1)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
if (Ga & 0x0010) {
if (!Ub(4)) break Be;
} else {
if (Ub(4)) break Be;
}
Eb = Fb;
}
} else {
ia = Aa[6];
ja = db();
ia = Aa[7];
Ka = db();
Xb(7, ja, Ka);
Aa[6] = (Aa[6] + (za.df << 1)) & -1;
Aa[7] = (Aa[7] + (za.df << 1)) & -1;
};
break Be;
case 0x1ad:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
ia = Aa[6];
if (16 == 32) Aa[0] = fb();
else Pb(0, db());
Aa[6] = (ia + (za.df << 1)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
Eb = Fb;
}
} else {
ia = Aa[6];
if (16 == 32) Aa[0] = fb();
else Pb(0, db());
Aa[6] = (ia + (za.df << 1)) & -1;
};
break Be;
case 0x1af:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
ia = Aa[7];
ja = db();
Xb(7, Aa[0], ja);
Aa[7] = (Aa[7] + (za.df << 1)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
if (Ga & 0x0010) {
if (!Ub(4)) break Be;
} else {
if (Ub(4)) break Be;
}
Eb = Fb;
}
} else {
ia = Aa[7];
ja = db();
Xb(7, Aa[0], ja);
Aa[7] = (Aa[7] + (za.df << 1)) & -1;
};
break Be;
case 0x1ab:
if (Ga & (0x0010 | 0x0020)) {
if (Aa[1]) {
if (16 === 32 && (Aa[1] >>> 0) >= 4 && za.df == 1 && (Aa[7] & 3) == 0 && gd()) {} else {
ia = Aa[7];
pb(Aa[0]);
Aa[7] = (ia + (za.df << 1)) & -1;
Aa[1] = (Aa[1] - 1) & -1;
}
Eb = Fb;
}
} else {
ia = Aa[7];
pb(Aa[0]);
Aa[7] = (ia + (za.df << 1)) & -1;
};
break Be;
case 0x1d8:
case 0x1d9:
case 0x1da:
case 0x1db:
case 0x1dc:
case 0x1dd:
case 0x1de:
case 0x1df:
b &= 0xff;
break;
case 0x1e5:
ve = (za.eflags >> 12) & 3;
if (za.cpl > ve) sc(13);
ja = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Pb(0, za.ld16_port(ja)); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
break Be;
case 0x1e7:
ve = (za.eflags >> 12) & 3;
if (za.cpl > ve) sc(13);
ja = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
za.st16_port(ja, Aa[0] & 0xffff); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
break Be;
case 0x1ed:
ve = (za.eflags >> 12) & 3;
if (za.cpl > ve) sc(13);
Pb(0, za.ld16_port(Aa[2] & 0xffff)); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
break Be;
case 0x1ef:
ve = (za.eflags >> 12) & 3;
if (za.cpl > ve) sc(13);
za.st16_port(Aa[2] & 0xffff, Aa[0] & 0xffff); {
if (za.hard_irq != 0 && (za.eflags & 0x00000200)) break Ae;
};
break Be;
case 0x100:
case 0x102:
case 0x104:
case 0x106:
case 0x107:
case 0x108:
case 0x10a:
case 0x10c:
case 0x10e:
case 0x110:
case 0x112:
case 0x114:
case 0x116:
case 0x117:
case 0x118:
case 0x11a:
case 0x11c:
case 0x11e:
case 0x11f:
case 0x120:
case 0x122:
case 0x124:
case 0x126:
case 0x127:
case 0x128:
case 0x12a:
case 0x12c:
case 0x12e:
case 0x12f:
case 0x130:
case 0x132:
case 0x134:
case 0x136:
case 0x137:
case 0x138:
case 0x13a:
case 0x13c:
case 0x13e:
case 0x13f:
case 0x150:
case 0x151:
case 0x152:
case 0x153:
case 0x154:
case 0x155:
case 0x156:
case 0x157:
case 0x158:
case 0x159:
case 0x15a:
case 0x15b:
case 0x15c:
case 0x15d:
case 0x15e:
case 0x15f:
case 0x160:
case 0x161:
case 0x162:
case 0x163:
case 0x167:
case 0x168:
case 0x16a:
case 0x16c:
case 0x16d:
case 0x16e:
case 0x16f:
case 0x170:
case 0x171:
case 0x172:
case 0x173:
case 0x174:
case 0x175:
case 0x176:
case 0x177:
case 0x178:
case 0x179:
case 0x17a:
case 0x17b:
case 0x17c:
case 0x17d:
case 0x17e:
case 0x17f:
case 0x180:
case 0x182:
case 0x184:
case 0x186:
case 0x188:
case 0x18a:
case 0x18c:
case 0x18d:
case 0x18e:
case 0x18f:
case 0x19a:
case 0x19b:
case 0x19c:
case 0x19d:
case 0x19e:
case 0x19f:
case 0x1a0:
case 0x1a2:
case 0x1a4:
case 0x1a6:
case 0x1a8:
case 0x1aa:
case 0x1ac:
case 0x1ae:
case 0x1b0:
case 0x1b1:
case 0x1b2:
case 0x1b3:
case 0x1b4:
case 0x1b5:
case 0x1b6:
case 0x1b7:
case 0x1c0:
case 0x1c2:
case 0x1c3:
case 0x1c4:
case 0x1c5:
case 0x1c6:
case 0x1c8:
case 0x1c9:
case 0x1ca:
case 0x1cb:
case 0x1cc:
case 0x1cd:
case 0x1ce:
case 0x1cf:
case 0x1d0:
case 0x1d2:
case 0x1d4:
case 0x1d5:
case 0x1d6:
case 0x1d7:
case 0x1e0:
case 0x1e1:
case 0x1e2:
case 0x1e3:
case 0x1e4:
case 0x1e6:
case 0x1e8:
case 0x1e9:
case 0x1ea:
case 0x1eb:
case 0x1ec:
case 0x1ee:
case 0x1f1:
case 0x1f4:
case 0x1f5:
case 0x1f6:
case 0x1f8:
case 0x1f9:
case 0x1fa:
case 0x1fb:
case 0x1fc:
case 0x1fd:
case 0x1fe:
default:
sc(6);
case 0x10f:
b = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
b |= 0x0100;
switch (b) {
case 0x140:
case 0x141:
case 0x142:
case 0x143:
case 0x144:
case 0x145:
case 0x146:
case 0x147:
case 0x148:
case 0x149:
case 0x14a:
case 0x14b:
case 0x14c:
case 0x14d:
case 0x14e:
case 0x14f:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
if ((Ha >> 6) == 3) {
ja = Aa[Ha & 7];
} else {
ia = Jb(Ha);
ja = db();
}
if (Ub(b & 0xf)) Pb((Ha >> 3) & 7, ja);
break Be;
case 0x1b6:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff);
} else {
ia = Jb(Ha);
ja = bb();
}
Pb(Ja, ja);
break Be;
case 0x1be:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = ((Aa[Ia & 3] >> ((Ia & 4) << 1)) & 0xff);
} else {
ia = Jb(Ha);
ja = bb();
}
Pb(Ja, (ja << 24) >> 24);
break Be;
case 0x1af:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ka = Aa[Ha & 7];
} else {
ia = Jb(Ha);
Ka = db();
}
Pb(Ja, Gc(Aa[Ja], Ka));
break Be;
case 0x1c1:
Ha = ((Ra = Wa[Eb >>> 12]) == -1) ? Gb(Eb) : Qa[Eb ^ Ra];
Eb++;;
Ja = (Ha >> 3) & 7;
if ((Ha >> 6) == 3) {
Ia = Ha & 7;
ja = Aa[Ia];
Ka = Xb(0, ja, Aa[Ja]);
Pb(Ja, ja);
Pb(Ia, Ka);
} else {
ia = Jb(Ha);
ja = jb();
Ka = Xb(0, ja, Aa[Ja]);
pb(Ka);
Pb(Ja, ja);
}
break Be;
case 0x100:
case 0x101:
case 0x102:
case 0x103:
case 0x104:
case 0x105:
case 0x106:
case 0x107:
case 0x108:
case 0x109:
case 0x10a:
case 0x10b:
case 0x10c:
case 0x10d:
case 0x10e:
case 0x10f:
case 0x110:
case 0x111:
case 0x112:
case 0x113:
case 0x114:
case 0x115:
case 0x116:
case 0x117:
case 0x118:
case 0x119:
case 0x11a:
case 0x11b:
case 0x11c:
case 0x11d:
case 0x11e:
case 0x11f:
case 0x120:
case 0x121:
case 0x122:
case 0x123:
case 0x124:
case 0x125:
case 0x126:
case 0x127:
case 0x128:
case 0x129:
case 0x12a:
case 0x12b:
case 0x12c:
case 0x12d:
case 0x12e:
case 0x12f:
case 0x130:
case 0x131:
case 0x132:
case 0x133:
case 0x134:
case 0x135:
case 0x136:
case 0x137:
case 0x138:
case 0x139:
case 0x13a:
case 0x13b:
case 0x13c:
case 0x13d:
case 0x13e:
case 0x13f:
case 0x150:
case 0x151:
case 0x152:
case 0x153:
case 0x154:
case 0x155:
case 0x156:
case 0x157:
case 0x158:
case 0x159:
case 0x15a:
case 0x15b:
case 0x15c:
case 0x15d:
case 0x15e:
case 0x15f:
case 0x160:
case 0x161:
case 0x162:
case 0x163:
case 0x164:
case 0x165:
case 0x166:
case 0x167:
case 0x168:
case 0x169:
case 0x16a:
case 0x16b:
case 0x16c:
case 0x16d:
case 0x16e:
case 0x16f:
case 0x170:
case 0x171:
case 0x172:
case 0x173:
case 0x174:
case 0x175:
case 0x176:
case 0x177:
case 0x178:
case 0x179:
case 0x17a:
case 0x17b:
case 0x17c:
case 0x17d:
case 0x17e:
case 0x17f:
case 0x180:
case 0x181:
case 0x182:
case 0x183:
case 0x184:
case 0x185:
case 0x186:
case 0x187:
case 0x188:
case 0x189:
case 0x18a:
case 0x18b:
case 0x18c:
case 0x18d:
case 0x18e:
case 0x18f:
case 0x190:
case 0x191:
case 0x192:
case 0x193:
case 0x194:
case 0x195:
case 0x196:
case 0x197:
case 0x198:
case 0x199:
case 0x19a:
case 0x19b:
case 0x19c:
case 0x19d:
case 0x19e:
case 0x19f:
case 0x1a0:
case 0x1a1:
case 0x1a2:
case 0x1a3:
case 0x1a4:
case 0x1a5:
case 0x1a6:
case 0x1a7:
case 0x1a8:
case 0x1a9:
case 0x1aa:
case 0x1ab:
case 0x1ac:
case 0x1ad:
case 0x1ae:
case 0x1b0:
case 0x1b1:
case 0x1b2:
case 0x1b3:
case 0x1b4:
case 0x1b5:
case 0x1b7:
case 0x1b8:
case 0x1b9:
case 0x1ba:
case 0x1bb:
case 0x1bc:
case 0x1bd:
case 0x1bf:
case 0x1c0:
default:
sc(6);
}
break;
}
}
}
}
while (--Na);
this.cycle_count += (xa - Na);
this.eip = Eb;
this.cc_src = Ba;
this.cc_dst = Ca;
this.cc_op = Da;
this.cc_op2 = Ea;
this.cc_dst2 = Fa;
return Oa;
};
CPU_X86.prototype.exec = function (xa) {
var De, Oa, Ee, ya;
Ee = this.cycle_count + xa;
Oa = 256;
ya = null;
while (this.cycle_count < Ee) {
try {
Oa = this.exec_internal(Ee - this.cycle_count, ya);
if (Oa != 256) break;
ya = null;
} catch (Fe) {
if (Fe.hasOwnProperty("intno")) {
ya = Fe;
} else {
throw Fe;
}
}
}
return Oa;
};
CPU_X86.prototype.load_binary_ie9 = function (Ge, ia) {
var He, Ie, cd, i;
He = new XMLHttpRequest();
He.open('GET', Ge, false);
He.send(null);
if (He.status != 200 && He.status != 0) {
throw "Error while loading " + Ge;
}
Ie = new VBArray(He.responseBody).toArray();
cd = Ie.length;
for (i = 0; i < cd; i++) {
this.st8_phys(ia + i, Ie[i]);
}
return cd;
};
CPU_X86.prototype.load_binary = function (Ge, ia) {
var He, Ie, cd, i, Je, Ke;
if (typeof ActiveXObject == "function") return this.load_binary_ie9(Ge, ia);
He = new XMLHttpRequest();
He.open('GET', Ge, false);
if ('mozResponseType' in He) {
He.mozResponseType = 'arraybuffer';
} else if ('responseType' in He) {
He.responseType = 'arraybuffer';
} else {
He.overrideMimeType('text/plain; charset=x-user-defined');
}
He.send(null);
if (He.status != 200 && He.status != 0) {
throw "Error while loading " + Ge;
}
Ke = true;
if ('mozResponse' in He) {
Ie = He.mozResponse;
} else if (He.mozResponseArrayBuffer) {
Ie = He.mozResponseArrayBuffer;
} else if ('responseType' in He) {
Ie = He.response;
} else {
Ie = He.responseText;
Ke = false;
}
if (Ke) {
cd = Ie.byteLength;
Je = new Uint8Array(Ie, 0, cd);
for (i = 0; i < cd; i++) {
this.st8_phys(ia + i, Je[i]);
}
} else {
cd = Ie.length;
for (i = 0; i < cd; i++) {
this.st8_phys(ia + i, Ie.charCodeAt(i));
}
}
return cd;
};
function Le(a) {
return ((a / 10) << 4) | (a % 10);
}
function Me(Ne) {
var Oe, d;
var i;
Oe = new Array();
for (i = 0; i < 128; i++) Oe[i] = 0;
this.cmos_data = Oe;
this.cmos_index = 0;
d = new Date();
Oe[0] = Le(d.getUTCSeconds());
Oe[2] = Le(d.getUTCMinutes());
Oe[4] = Le(d.getUTCHours());
Oe[6] = Le(d.getUTCDay());
Oe[7] = Le(d.getUTCDate());
Oe[8] = Le(d.getUTCMonth() + 1);
Oe[9] = Le(d.getUTCFullYear() % 100);
Oe[10] = 0x26;
Oe[11] = 0x02;
Oe[12] = 0x00;
Oe[13] = 0x80;
Oe[0x14] = 0x02;
Ne.register_ioport_write(0x70, 2, 1, this.ioport_write.bind(this));
Ne.register_ioport_read(0x70, 2, 1, this.ioport_read.bind(this));
}
Me.prototype.ioport_write = function (ia, Ie) {
if (ia == 0x70) {
this.cmos_index = Ie & 0x7f;
}
};
Me.prototype.ioport_read = function (ia) {
var Pe;
if (ia == 0x70) {
return 0xff;
} else {
Pe = this.cmos_data[this.cmos_index];
if (this.cmos_index == 10) this.cmos_data[10] ^= 0x80;
else if (this.cmos_index == 12) this.cmos_data[12] = 0x00;
return Pe;
}
};
function Qe(Ne, Re) {
Ne.register_ioport_write(Re, 2, 1, this.ioport_write.bind(this));
Ne.register_ioport_read(Re, 2, 1, this.ioport_read.bind(this));
this.reset();
}
Qe.prototype.reset = function () {
this.last_irr = 0;
this.irr = 0;
this.imr = 0;
this.isr = 0;
this.priority_add = 0;
this.irq_base = 0;
this.read_reg_select = 0;
this.special_mask = 0;
this.init_state = 0;
this.auto_eoi = 0;
this.rotate_on_autoeoi = 0;
this.init4 = 0;
this.elcr = 0;
this.elcr_mask = 0;
};
Qe.prototype.set_irq1 = function (Se, Te) {
var Ue;
Ue = 1 << Se;
if (Te) {
if ((this.last_irr & Ue) == 0) this.irr |= Ue;
this.last_irr |= Ue;
} else {
this.last_irr &= ~Ue;
}
};
Qe.prototype.get_priority = function (Ue) {
var Ve;
if (Ue == 0) return -1;
Ve = 7;
while ((Ue & (1 << ((Ve + this.priority_add) & 7))) == 0) Ve--;
return Ve;
};
Qe.prototype.get_irq = function () {
var Ue, We, Ve;
Ue = this.irr & ~this.imr;
Ve = this.get_priority(Ue);
if (Ve < 0) return -1;
We = this.get_priority(this.isr);
if (Ve > We) {
return Ve;
} else {
return -1;
}
};
Qe.prototype.intack = function (Se) {
if (this.auto_eoi) {
if (this.rotate_on_auto_eoi) this.priority_add = (Se + 1) & 7;
} else {
this.isr |= (1 << Se);
}
if (!(this.elcr & (1 << Se))) this.irr &= ~ (1 << Se);
};
Qe.prototype.ioport_write = function (ia, ja) {
var Ve;
ia &= 1;
if (ia == 0) {
if (ja & 0x10) {
this.reset();
this.init_state = 1;
this.init4 = ja & 1;
if (ja & 0x02) throw "single mode not supported";
if (ja & 0x08) throw "level sensitive irq not supported";
} else if (ja & 0x08) {
if (ja & 0x02) this.read_reg_select = ja & 1;
if (ja & 0x40) this.special_mask = (ja >> 5) & 1;
} else {
switch (ja) {
case 0x00:
case 0x80:
this.rotate_on_autoeoi = ja >> 7;
break;
case 0x20:
case 0xa0:
Ve = this.get_priority(this.isr);
if (Ve >= 0) {
this.isr &= ~ (1 << ((Ve + this.priority_add) & 7));
}
if (ja == 0xa0) this.priority_add = (this.priority_add + 1) & 7;
break;
case 0x60:
case 0x61:
case 0x62:
case 0x63:
case 0x64:
case 0x65:
case 0x66:
case 0x67:
Ve = ja & 7;
this.isr &= ~ (1 << Ve);
break;
case 0xc0:
case 0xc1:
case 0xc2:
case 0xc3:
case 0xc4:
case 0xc5:
case 0xc6:
case 0xc7:
this.priority_add = (ja + 1) & 7;
break;
case 0xe0:
case 0xe1:
case 0xe2:
case 0xe3:
case 0xe4:
case 0xe5:
case 0xe6:
case 0xe7:
Ve = ja & 7;
this.isr &= ~ (1 << Ve);
this.priority_add = (Ve + 1) & 7;
break;
}
}
} else {
switch (this.init_state) {
case 0:
this.imr = ja;
this.update_irq();
break;
case 1:
this.irq_base = ja & 0xf8;
this.init_state = 2;
break;
case 2:
if (this.init4) {
this.init_state = 3;
} else {
this.init_state = 0;
}
break;
case 3:
this.auto_eoi = (ja >> 1) & 1;
this.init_state = 0;
break;
}
}
};
Qe.prototype.ioport_read = function (Xe) {
var ia, Pe;
ia = Xe & 1;
if (ia == 0) {
if (this.read_reg_select) Pe = this.isr;
else Pe = this.irr;
} else {
Pe = this.imr;
}
return Pe;
};
function Ye(Ne, Ze, Xe, af) {
this.pics = new Array();
this.pics[0] = new Qe(Ne, Ze);
this.pics[1] = new Qe(Ne, Xe);
this.pics[0].elcr_mask = 0xf8;
this.pics[1].elcr_mask = 0xde;
this.irq_requested = 0;
this.cpu_set_irq = af;
this.pics[0].update_irq = this.update_irq.bind(this);
this.pics[1].update_irq = this.update_irq.bind(this);
}
Ye.prototype.update_irq = function () {
var bf, Se;
bf = this.pics[1].get_irq();
if (bf >= 0) {
this.pics[0].set_irq1(2, 1);
this.pics[0].set_irq1(2, 0);
}
Se = this.pics[0].get_irq();
if (Se >= 0) {
this.cpu_set_irq(1);
} else {
this.cpu_set_irq(0);
}
};
Ye.prototype.set_irq = function (Se, Te) {
this.pics[Se >> 3].set_irq1(Se & 7, Te);
this.update_irq();
};
Ye.prototype.get_hard_intno = function () {
var Se, bf, intno;
Se = this.pics[0].get_irq();
if (Se >= 0) {
this.pics[0].intack(Se);
if (Se == 2) {
bf = this.pics[1].get_irq();
if (bf >= 0) {
this.pics[1].intack(bf);
} else {
bf = 7;
}
intno = this.pics[1].irq_base + bf;
Se = bf + 8;
} else {
intno = this.pics[0].irq_base + Se;
}
} else {
Se = 7;
intno = this.pics[0].irq_base + Se;
}
this.update_irq();
return intno;
};
function cf(Ne, df, ef) {
var s, i;
this.pit_channels = new Array();
for (i = 0; i < 3; i++) {
s = new ff(ef);
this.pit_channels[i] = s;
s.mode = 3;
s.gate = (i != 2) >> 0;
s.pit_load_count(0);
}
this.speaker_data_on = 0;
this.set_irq = df;
Ne.register_ioport_write(0x40, 4, 1, this.ioport_write.bind(this));
Ne.register_ioport_read(0x40, 3, 1, this.ioport_read.bind(this));
Ne.register_ioport_read(0x61, 1, 1, this.speaker_ioport_read.bind(this));
Ne.register_ioport_write(0x61, 1, 1, this.speaker_ioport_write.bind(this));
}
function ff(ef) {
this.count = 0;
this.latched_count = 0;
this.rw_state = 0;
this.mode = 0;
this.bcd = 0;
this.gate = 0;
this.count_load_time = 0;
this.get_ticks = ef;
this.pit_time_unit = 1193182 / 2000000;
}
ff.prototype.get_time = function () {
return Math.floor(this.get_ticks() * this.pit_time_unit);
};
ff.prototype.pit_get_count = function () {
var d, gf;
d = this.get_time() - this.count_load_time;
switch (this.mode) {
case 0:
case 1:
case 4:
case 5:
gf = (this.count - d) & 0xffff;
break;
default:
gf = this.count - (d % this.count);
break;
}
return gf;
};
ff.prototype.pit_get_out = function () {
var d, hf;
d = this.get_time() - this.count_load_time;
switch (this.mode) {
default:
case 0:
hf = (d >= this.count) >> 0;
break;
case 1:
hf = (d < this.count) >> 0;
break;
case 2:
if ((d % this.count) == 0 && d != 0) hf = 1;
else hf = 0;
break;
case 3:
hf = ((d % this.count) < (this.count >> 1)) >> 0;
break;
case 4:
case 5:
hf = (d == this.count) >> 0;
break;
}
return hf;
};
ff.prototype.get_next_transition_time = function () {
var d, jf, base, kf;
d = this.get_time() - this.count_load_time;
switch (this.mode) {
default:
case 0:
case 1:
if (d < this.count) jf = this.count;
else return -1;
break;
case 2:
base = (d / this.count) * this.count;
if ((d - base) == 0 && d != 0) jf = base + this.count;
else jf = base + this.count + 1;
break;
case 3:
base = (d / this.count) * this.count;
kf = ((this.count + 1) >> 1);
if ((d - base) < kf) jf = base + kf;
else jf = base + this.count;
break;
case 4:
case 5:
if (d < this.count) jf = this.count;
else if (d == this.count) jf = this.count + 1;
else return -1;
break;
}
jf = this.count_load_time + jf;
return jf;
};
ff.prototype.pit_load_count = function (ja) {
if (ja == 0) ja = 0x10000;
this.count_load_time = this.get_time();
this.count = ja;
};
cf.prototype.ioport_write = function (ia, ja) {
var lf, mf, s;
ia &= 3;
if (ia == 3) {
lf = ja >> 6;
if (lf == 3) return;
s = this.pit_channels[lf];
mf = (ja >> 4) & 3;
switch (mf) {
case 0:
s.latched_count = s.pit_get_count();
s.rw_state = 4;
break;
default:
s.mode = (ja >> 1) & 7;
s.bcd = ja & 1;
s.rw_state = mf - 1 + 0;
break;
}
} else {
s = this.pit_channels[ia];
switch (s.rw_state) {
case 0:
s.pit_load_count(ja);
break;
case 1:
s.pit_load_count(ja << 8);
break;
case 2:
case 3:
if (s.rw_state & 1) {
s.pit_load_count((s.latched_count & 0xff) | (ja << 8));
} else {
s.latched_count = ja;
}
s.rw_state ^= 1;
break;
}
}
};
cf.prototype.ioport_read = function (ia) {
var Pe, pa, s;
ia &= 3;
s = this.pit_channels[ia];
switch (s.rw_state) {
case 0:
case 1:
case 2:
case 3:
pa = s.pit_get_count();
if (s.rw_state & 1) Pe = (pa >> 8) & 0xff;
else Pe = pa & 0xff;
if (s.rw_state & 2) s.rw_state ^= 1;
break;
default:
case 4:
case 5:
if (s.rw_state & 1) Pe = s.latched_count >> 8;
else Pe = s.latched_count & 0xff;
s.rw_state ^= 1;
break;
}
return Pe;
};
cf.prototype.speaker_ioport_write = function (ia, ja) {
this.speaker_data_on = (ja >> 1) & 1;
this.pit_channels[2].gate = ja & 1;
};
cf.prototype.speaker_ioport_read = function (ia) {
var hf, s, ja;
s = this.pit_channels[2];
hf = s.pit_get_out();
ja = (this.speaker_data_on << 1) | s.gate | (hf << 5);
return ja;
};
cf.prototype.update_irq = function () {
this.set_irq(1);
this.set_irq(0);
};
function nf(Ne, ia, of, pf) {
this.divider = 0;
this.rbr = 0;
this.ier = 0;
this.iir = 0x01;
this.lcr = 0;
this.mcr;
this.lsr = 0x40 | 0x20;
this.msr = 0;
this.scr = 0;
this.set_irq_func = of;
this.write_func = pf;
this.receive_fifo = "";
Ne.register_ioport_write(0x3f8, 8, 1, this.ioport_write.bind(this));
Ne.register_ioport_read(0x3f8, 8, 1, this.ioport_read.bind(this));
}
nf.prototype.update_irq = function () {
if ((this.lsr & 0x01) && (this.ier & 0x01)) {
this.iir = 0x04;
} else if ((this.lsr & 0x20) && (this.ier & 0x02)) {
this.iir = 0x02;
} else {
this.iir = 0x01;
}
if (this.iir != 0x01) {
this.set_irq_func(1);
} else {
this.set_irq_func(0);
}
};
nf.prototype.ioport_write = function (ia, ja) {
ia &= 7;
switch (ia) {
default:
case 0:
if (this.lcr & 0x80) {
this.divider = (this.divider & 0xff00) | ja;
} else {
this.lsr &= ~0x20;
this.update_irq();
this.write_func(String.fromCharCode(ja));
this.lsr |= 0x20;
this.lsr |= 0x40;
this.update_irq();
}
break;
case 1:
if (this.lcr & 0x80) {
this.divider = (this.divider & 0x00ff) | (ja << 8);
} else {
this.ier = ja;
this.update_irq();
}
break;
case 2:
break;
case 3:
this.lcr = ja;
break;
case 4:
this.mcr = ja;
break;
case 5:
break;
case 6:
this.msr = ja;
break;
case 7:
this.scr = ja;
break;
}
};
nf.prototype.ioport_read = function (ia) {
var Pe;
ia &= 7;
switch (ia) {
default:
case 0:
if (this.lcr & 0x80) {
Pe = this.divider & 0xff;
} else {
Pe = this.rbr;
this.lsr &= ~ (0x01 | 0x10);
this.update_irq();
this.send_char_from_fifo();
}
break;
case 1:
if (this.lcr & 0x80) {
Pe = (this.divider >> 8) & 0xff;
} else {
Pe = this.ier;
}
break;
case 2:
Pe = this.iir;
break;
case 3:
Pe = this.lcr;
break;
case 4:
Pe = this.mcr;
break;
case 5:
Pe = this.lsr;
break;
case 6:
Pe = this.msr;
break;
case 7:
Pe = this.scr;
break;
}
return Pe;
};
nf.prototype.send_break = function () {
this.rbr = 0;
this.lsr |= 0x10 | 0x01;
this.update_irq();
};
nf.prototype.send_char = function (qf) {
this.rbr = qf;
this.lsr |= 0x01;
this.update_irq();
};
nf.prototype.send_char_from_fifo = function () {
var rf;
rf = this.receive_fifo;
if (rf != "" && !(this.lsr & 0x01)) {
this.send_char(rf.charCodeAt(0));
this.receive_fifo = rf.substr(1, rf.length - 1);
}
};
nf.prototype.send_chars = function (va) {
this.receive_fifo += va;
this.send_char_from_fifo();
};
function sf(Ne, tf) {
Ne.register_ioport_read(0x64, 1, 1, this.read_status.bind(this));
Ne.register_ioport_write(0x64, 1, 1, this.write_command.bind(this));
this.reset_request = tf;
}
sf.prototype.read_status = function (ia) {
return 0;
};
sf.prototype.write_command = function (ia, ja) {
switch (ja) {
case 0xfe:
this.reset_request();
break;
default:
break;
}
};
function uf(Ne, Re, vf, pf) {
Ne.register_ioport_read(Re, 16, 4, this.ioport_readl.bind(this));
Ne.register_ioport_write(Re, 16, 4, this.ioport_writel.bind(this));
Ne.register_ioport_read(Re + 8, 1, 1, this.ioport_readb.bind(this));
Ne.register_ioport_write(Re + 8, 1, 1, this.ioport_writeb.bind(this));
this.cur_pos = 0;
this.doc_str = "";
this.read_func = vf;
this.write_func = pf;
}
uf.prototype.ioport_writeb = function (ia, ja) {
this.doc_str += String.fromCharCode(ja);
};
uf.prototype.ioport_readb = function (ia) {
var c, va, ja;
va = this.doc_str;
if (this.cur_pos < va.length) {
ja = va.charCodeAt(this.cur_pos) & 0xff;
} else {
ja = 0;
}
this.cur_pos++;
return ja;
};
uf.prototype.ioport_writel = function (ia, ja) {
var va;
ia = (ia >> 2) & 3;
switch (ia) {
case 0:
this.doc_str = this.doc_str.substr(0, ja >>> 0);
break;
case 1:
return this.cur_pos = ja >>> 0;
case 2:
va = String.fromCharCode(ja & 0xff) + String.fromCharCode((ja >> 8) & 0xff) + String.fromCharCode((ja >> 16) & 0xff) + String.fromCharCode((ja >> 24) & 0xff);
this.doc_str += va;
break;
case 3:
this.write_func(this.doc_str);
}
};
uf.prototype.ioport_readl = function (ia) {
var ja;
ia = (ia >> 2) & 3;
switch (ia) {
case 0:
this.doc_str = this.read_func();
return this.doc_str.length >> 0;
case 1:
return this.cur_pos >> 0;
case 2:
ja = this.ioport_readb(0);
ja |= this.ioport_readb(0) << 8;
ja |= this.ioport_readb(0) << 16;
ja |= this.ioport_readb(0) << 24;
return ja;
case 3:
return 0;
}
};
function af(Te) {
this.hard_irq = Te;
}
function wf() {
return this.cycle_count;
}
function PCEmulator(xf) {
var za;
za = new CPU_X86();
this.cpu = za;
za.phys_mem_resize(xf.mem_size);
this.init_ioports();
this.register_ioport_write(0x80, 1, 1, this.ioport80_write);
this.pic = new Ye(this, 0x20, 0xa0, af.bind(za));
this.pit = new cf(this, this.pic.set_irq.bind(this.pic, 0), wf.bind(za));
this.cmos = new Me(this);
this.serial = new nf(this, 0x3f8, this.pic.set_irq.bind(this.pic, 4), xf.serial_write);
this.kbd = new sf(this, this.reset.bind(this));
this.reset_request = 0;
if (xf.clipboard_get && xf.clipboard_set) {
this.jsclipboard = new uf(this, 0x3c0, xf.clipboard_get, xf.clipboard_set);
}
za.ld8_port = this.ld8_port.bind(this);
za.ld16_port = this.ld16_port.bind(this);
za.ld32_port = this.ld32_port.bind(this);
za.st8_port = this.st8_port.bind(this);
za.st16_port = this.st16_port.bind(this);
za.st32_port = this.st32_port.bind(this);
za.get_hard_intno = this.pic.get_hard_intno.bind(this.pic);
}
PCEmulator.prototype.load_binary = function (Ge, ka) {
return this.cpu.load_binary(Ge, ka);
};
PCEmulator.prototype.start = function () {
setTimeout(this.timer_func.bind(this), 10);
};
PCEmulator.prototype.timer_func = function () {
var Oa, yf, zf, Af, Bf, Ne, za;
Ne = this;
za = Ne.cpu;
zf = za.cycle_count + 100000;
Af = false;
Bf = false;
Cf: while (za.cycle_count < zf) {
Ne.pit.update_irq();
Oa = za.exec(zf - za.cycle_count);
if (Oa == 256) {
if (Ne.reset_request) {
Af = true;
break;
}
} else if (Oa == 257) {
Bf = true;
break;
} else {
Af = true;
break;
}
}
if (!Af) {
if (Bf) {
setTimeout(this.timer_func.bind(this), 10);
} else {
setTimeout(this.timer_func.bind(this), 0);
}
}
};
PCEmulator.prototype.init_ioports = function () {
var i;
this.ioport_readb_table = new Array();
this.ioport_writeb_table = new Array();
this.ioport_readw_table = new Array();
this.ioport_writew_table = new Array();
this.ioport_readl_table = new Array();
this.ioport_writel_table = new Array();
for (i = 0; i < 1024; i++) {
this.ioport_readb_table[i] = this.default_ioport_readb;
this.ioport_writeb_table[i] = this.default_ioport_writeb;
this.ioport_readw_table[i] = this.default_ioport_readw;
this.ioport_writew_table[i] = this.default_ioport_writew;
this.ioport_readl_table[i] = this.default_ioport_readl;
this.ioport_writel_table[i] = this.default_ioport_writel;
}
};
PCEmulator.prototype.default_ioport_readb = function (Re) {
var ja;
ja = 0xff;
return ja;
};
PCEmulator.prototype.default_ioport_readw = function (Re) {
var ja;
ja = this.default_ioport_readb[Re](Re);
Re = (Re + 1) & (1024 - 1);
ja |= this.default_ioport_readb[Re](Re) << 8;
return ja;
};
PCEmulator.prototype.default_ioport_readl = function (Re) {
var ja;
ja = -1;
return ja;
};
PCEmulator.prototype.default_ioport_writeb = function (Re, ja) {};
PCEmulator.prototype.default_ioport_writew = function (Re, ja) {
this.ioport_writeb_table[Re](Re, ja & 0xff);
Re = (Re + 1) & (1024 - 1);
this.ioport_writeb_table[Re](Re, (ja >> 8) & 0xff);
};
PCEmulator.prototype.default_ioport_writel = function (Re, ja) {};
PCEmulator.prototype.ld8_port = function (Re) {
var ja;
ja = this.ioport_readb_table[Re & (1024 - 1)](Re);
return ja;
};
PCEmulator.prototype.ld16_port = function (Re) {
var ja;
ja = this.ioport_readw_table[Re & (1024 - 1)](Re);
return ja;
};
PCEmulator.prototype.ld32_port = function (Re) {
var ja;
ja = this.ioport_readl_table[Re & (1024 - 1)](Re);
return ja;
};
PCEmulator.prototype.st8_port = function (Re, ja) {
this.ioport_writeb_table[Re & (1024 - 1)](Re, ja);
};
PCEmulator.prototype.st16_port = function (Re, ja) {
this.ioport_writew_table[Re & (1024 - 1)](Re, ja);
};
PCEmulator.prototype.st32_port = function (Re, ja) {
this.ioport_writel_table[Re & (1024 - 1)](Re, ja);
};
PCEmulator.prototype.register_ioport_read = function (start, cd, Df, Ef) {
var i;
switch (Df) {
case 1:
for (i = start; i < start + cd; i++) {
this.ioport_readb_table[i] = Ef;
}
break;
case 2:
for (i = start; i < start + cd; i += 2) {
this.ioport_readw_table[i] = Ef;
}
break;
case 4:
for (i = start; i < start + cd; i += 4) {
this.ioport_readl_table[i] = Ef;
}
break;
}
};
PCEmulator.prototype.register_ioport_write = function (start, cd, Df, Ef) {
var i;
switch (Df) {
case 1:
for (i = start; i < start + cd; i++) {
this.ioport_writeb_table[i] = Ef;
}
break;
case 2:
for (i = start; i < start + cd; i += 2) {
this.ioport_writew_table[i] = Ef;
}
break;
case 4:
for (i = start; i < start + cd; i += 4) {
this.ioport_writel_table[i] = Ef;
}
break;
}
};
PCEmulator.prototype.ioport80_write = function (ia, Ie) {};
PCEmulator.prototype.reset = function () {
this.request_request = 1;
};