阅读更多
/*
PC Emulator
Copyright (c) 2011 Fabrice Bellard
Redistribution or commercial use is prohibited without the author's
permission.
*/
"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 < 7; i++) {
this.segs[i] = {
selector: 0,
base: 0,
limit: 0,
flags: 0
};
}
this.segs[2].flags = (1 << 22);
this.segs[1].flags = (1 << 22);
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 Int32Array(da);
this.tlb_write_kernel = new Int32Array(da);
this.tlb_read_user = new Int32Array(da);
this.tlb_write_user = new Int32Array(da);
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 Int32Array(2048);
this.tlb_pages_count = 0;
}
CPU_X86.prototype.phys_mem_resize = function(ea) {
this.mem_size = ea;
ea += ((15 + 3) & ~3);
this.phys_mem = new ArrayBuffer(ea);
this.phys_mem8 = new Uint8Array(this.phys_mem, 0, ea);
this.phys_mem16 = new Uint16Array(this.phys_mem, 0, ea / 2);
this.phys_mem32 = new Int32Array(this.phys_mem, 0, ea / 4);
};
CPU_X86.prototype.ld8_phys = function(fa) {
return this.phys_mem8[fa];
};
CPU_X86.prototype.st8_phys = function(fa, ga) {
this.phys_mem8[fa] = ga;
};
CPU_X86.prototype.ld32_phys = function(fa) {
return this.phys_mem32[fa >> 2];
};
CPU_X86.prototype.st32_phys = function(fa, ga) {
this.phys_mem32[fa >> 2] = ga;
};
CPU_X86.prototype.tlb_set_page = function(fa, ha, ia, ja) {
var i, ga, j;
ha &= -4096;
fa &= -4096;
ga = fa ^ ha;
i = fa >>> 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] = ga;
if (ia) {
this.tlb_write_kernel[i] = ga;
} else {
this.tlb_write_kernel[i] = -1;
}
if (ja) {
this.tlb_read_user[i] = ga;
if (ia) {
this.tlb_write_user[i] = ga;
} 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(fa) {
var i;
i = fa >>> 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, ka;
ka = this.tlb_pages;
n = this.tlb_pages_count;
for (j = 0; j < n; j++) {
i = ka[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(la) {
var i, j, n, ka, ma;
ka = this.tlb_pages;
n = this.tlb_pages_count;
ma = 0;
for (j = 0; j < n; j++) {
i = ka[j];
if (i == la) {
ka[ma++] = 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 = ma;
};
CPU_X86.prototype.write_string = function(fa, na) {
var i;
for (i = 0; i < na.length; i++) {
this.st8_phys(fa++, na.charCodeAt(i) & 0xff);
}
this.st8_phys(fa, 0);
};
function oa(ga, n) {
var i, s;
var h = "0123456789ABCDEF";
s = "";
for (i = n - 1; i >= 0; i--) {
s = s + h[(ga >>> (i * 4)) & 15];
}
return s;
}
function pa(n) {
return oa(n, 8);
}
function qa(n) {
return oa(n, 2);
}
function ra(n) {
return oa(n, 4);
}
CPU_X86.prototype.dump_short = function() {
console.log(" EIP=" + pa(this.eip) + " EAX=" + pa(this.regs[0]) + " ECX=" + pa(this.regs[1]) + " EDX=" + pa(this.regs[2]) + " EBX=" + pa(this.regs[3]));
console.log("EFL=" + pa(this.eflags) + " ESP=" + pa(this.regs[4]) + " EBP=" + pa(this.regs[5]) + " ESI=" + pa(this.regs[6]) + " EDI=" + pa(this.regs[7]));
};
CPU_X86.prototype.dump = function() {
var i, sa, na;
var ta = [" ES", " CS", " SS", " DS", " FS", " GS", "LDT", " TR"];
this.dump_short();
console.log("TSC=" + pa(this.cycle_count) + " OP=" + qa(this.cc_op) + " SRC=" + pa(this.cc_src) + " DST=" + pa(this.cc_dst) + " OP2=" + qa(this.cc_op2) + " DST2=" + pa(this.cc_dst2));
console.log("CPL=" + this.cpl + " CR0=" + pa(this.cr0) + " CR2=" + pa(this.cr2) + " CR3=" + pa(this.cr3) + " CR4=" + pa(this.cr4));
na = "";
for (i = 0; i < 8; i++) {
if (i == 6) sa = this.ldt;
else if (i == 7) sa = this.tr;
else sa = this.segs[i];
na += ta[i] + "=" + ra(sa.selector) + " " + pa(sa.base) + " " + pa(sa.limit) + " " + ra((sa.flags >> 8) & 0xf0ff);
if (i & 1) {
console.log(na);
na = "";
} else {
na += " ";
}
}
sa = this.gdt;
na = "GDT= " + pa(sa.base) + " " + pa(sa.limit) + " ";
sa = this.idt;
na += "IDT= " + pa(sa.base) + " " + pa(sa.limit);
console.log(na);
};
CPU_X86.prototype.exec_internal = function(ua, va) {
var wa, fa, xa;
var ya, za, Aa, Ba, Ca;
var Da, Ea, Fa, b, Ga, ga, Ha, Ia, Ja, Ka, La, Ma;
var Na, Oa, Pa, Qa, Ra, Sa;
var Ta, Ua;
var Va, Wa;
var Xa, Ya, Za, ab, bb, cb;
function db() {
var eb;
fb(fa, 0, wa.cpl == 3);
eb = bb[fa >>> 12] ^ fa;
return Ta[eb];
}
function gb() {
var Ua;
return (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
}
function hb() {
var ga;
ga = gb();
fa++;
ga |= gb() << 8;
fa--;
return ga;
}
function ib() {
var Ua;
return (((Ua = bb[fa >>> 12]) | fa) & 1 ? hb() : Va[(fa ^ Ua) >> 1]);
}
function jb() {
var ga;
ga = gb();
fa++;
ga |= gb() << 8;
fa++;
ga |= gb() << 16;
fa++;
ga |= gb() << 24;
fa -= 3;
return ga;
}
function kb() {
var Ua;
return (((Ua = bb[fa >>> 12]) | fa) & 3 ? jb() : Wa[(fa ^ Ua) >> 2]);
}
function lb() {
var eb;
fb(fa, 1, wa.cpl == 3);
eb = cb[fa >>> 12] ^ fa;
return Ta[eb];
}
function mb() {
var eb;
return ((eb = cb[fa >>> 12]) == -1) ? lb() : Ta[fa ^ eb];
}
function nb() {
var ga;
ga = mb();
fa++;
ga |= mb() << 8;
fa--;
return ga;
}
function ob() {
var eb;
return ((eb = cb[fa >>> 12]) | fa) & 1 ? nb() : Va[(fa ^ eb) >> 1];
}
function pb() {
var ga;
ga = mb();
fa++;
ga |= mb() << 8;
fa++;
ga |= mb() << 16;
fa++;
ga |= mb() << 24;
fa -= 3;
return ga;
}
function qb() {
var eb;
return ((eb = cb[fa >>> 12]) | fa) & 3 ? pb() : Wa[(fa ^ eb) >> 2];
}
function rb(ga) {
var eb;
fb(fa, 1, wa.cpl == 3);
eb = cb[fa >>> 12] ^ fa;
Ta[eb] = ga;
}
function sb(ga) {
var Ua; {
Ua = cb[fa >>> 12];
if (Ua == -1) {
rb(ga);
} else {
Ta[fa ^ Ua] = ga;
}
};
}
function tb(ga) {
sb(ga);
fa++;
sb(ga >> 8);
fa--;
}
function ub(ga) {
var Ua; {
Ua = cb[fa >>> 12];
if ((Ua | fa) & 1) {
tb(ga);
} else {
Va[(fa ^ Ua) >> 1] = ga;
}
};
}
function vb(ga) {
sb(ga);
fa++;
sb(ga >> 8);
fa++;
sb(ga >> 16);
fa++;
sb(ga >> 24);
fa -= 3;
}
function wb(ga) {
var Ua; {
Ua = cb[fa >>> 12];
if ((Ua | fa) & 3) {
vb(ga);
} else {
Wa[(fa ^ Ua) >> 2] = ga;
}
};
}
function xb() {
var eb;
fb(fa, 0, 0);
eb = Xa[fa >>> 12] ^ fa;
return Ta[eb];
}
function yb() {
var eb;
return ((eb = Xa[fa >>> 12]) == -1) ? xb() : Ta[fa ^ eb];
}
function zb() {
var ga;
ga = yb();
fa++;
ga |= yb() << 8;
fa--;
return ga;
}
function Ab() {
var eb;
return ((eb = Xa[fa >>> 12]) | fa) & 1 ? zb() : Va[(fa ^ eb) >> 1];
}
function Bb() {
var ga;
ga = yb();
fa++;
ga |= yb() << 8;
fa++;
ga |= yb() << 16;
fa++;
ga |= yb() << 24;
fa -= 3;
return ga;
}
function Cb() {
var eb;
return ((eb = Xa[fa >>> 12]) | fa) & 3 ? Bb() : Wa[(fa ^ eb) >> 2];
}
function Db(ga) {
var eb;
fb(fa, 1, 0);
eb = Ya[fa >>> 12] ^ fa;
Ta[eb] = ga;
}
function Eb(ga) {
var eb;
eb = Ya[fa >>> 12];
if (eb == -1) {
Db(ga);
} else {
Ta[fa ^ eb] = ga;
}
}
function Fb(ga) {
Eb(ga);
fa++;
Eb(ga >> 8);
fa--;
}
function Gb(ga) {
var eb;
eb = Ya[fa >>> 12];
if ((eb | fa) & 1) {
Fb(ga);
} else {
Va[(fa ^ eb) >> 1] = ga;
}
}
function Hb(ga) {
Eb(ga);
fa++;
Eb(ga >> 8);
fa++;
Eb(ga >> 16);
fa++;
Eb(ga >> 24);
fa -= 3;
}
function Ib(ga) {
var eb;
eb = Ya[fa >>> 12];
if ((eb | fa) & 3) {
Hb(ga);
} else {
Wa[(fa ^ eb) >> 2] = ga;
}
}
var Jb, Kb, Lb, Mb, Nb;
function Ob() {
var ga, Ha;
ga = Ta[Kb++];;
Ha = Ta[Kb++];;
return ga | (Ha << 8);
}
function Pb(Ea) {
var base, fa, Qb, Rb, Sb, Tb;
if (Qa && (Da & (0x000f | 0x0080)) == 0) {
switch ((Ea & 7) | ((Ea >> 3) & 0x18)) {
case 0x04:
Qb = Ta[Kb++];;
base = Qb & 7;
if (base == 5) {
{
fa = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
} else {
fa = xa[base];
}
Rb = (Qb >> 3) & 7;
if (Rb != 4) {
fa = (fa + (xa[Rb] << (Qb >> 6))) >> 0;
}
break;
case 0x0c:
Qb = Ta[Kb++];;
fa = ((Ta[Kb++] << 24) >> 24);;
base = Qb & 7;
fa = (fa + xa[base]) >> 0;
Rb = (Qb >> 3) & 7;
if (Rb != 4) {
fa = (fa + (xa[Rb] << (Qb >> 6))) >> 0;
}
break;
case 0x14:
Qb = Ta[Kb++];; {
fa = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
base = Qb & 7;
fa = (fa + xa[base]) >> 0;
Rb = (Qb >> 3) & 7;
if (Rb != 4) {
fa = (fa + (xa[Rb] << (Qb >> 6))) >> 0;
}
break;
case 0x05:
{
fa = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
break;
case 0x00:
case 0x01:
case 0x02:
case 0x03:
case 0x06:
case 0x07:
base = Ea & 7;
fa = xa[base];
break;
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0d:
case 0x0e:
case 0x0f:
fa = ((Ta[Kb++] << 24) >> 24);;
base = Ea & 7;
fa = (fa + xa[base]) >> 0;
break;
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x15:
case 0x16:
case 0x17:
default:
{
fa = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
base = Ea & 7;
fa = (fa + xa[base]) >> 0;
break;
}
return fa;
} else if (Da & 0x0080) {
if ((Ea & 0xc7) == 0x06) {
fa = Ob();
Tb = 3;
} else {
switch (Ea >> 6) {
case 0:
fa = 0;
break;
case 1:
fa = ((Ta[Kb++] << 24) >> 24);;
break;
default:
fa = Ob();
break;
}
switch (Ea & 7) {
case 0:
fa = (fa + xa[3] + xa[6]) & 0xffff;
Tb = 3;
break;
case 1:
fa = (fa + xa[3] + xa[7]) & 0xffff;
Tb = 3;
break;
case 2:
fa = (fa + xa[5] + xa[6]) & 0xffff;
Tb = 2;
break;
case 3:
fa = (fa + xa[5] + xa[7]) & 0xffff;
Tb = 2;
break;
case 4:
fa = (fa + xa[6]) & 0xffff;
Tb = 3;
break;
case 5:
fa = (fa + xa[7]) & 0xffff;
Tb = 3;
break;
case 6:
fa = (fa + xa[5]) & 0xffff;
Tb = 2;
break;
case 7:
default:
fa = (fa + xa[3]) & 0xffff;
Tb = 3;
break;
}
}
Sb = Da & 0x000f;
if (Sb == 0) {
Sb = Tb;
} else {
Sb--;
}
fa = (fa + wa.segs[Sb].base) >> 0;
return fa;
} else {
switch ((Ea & 7) | ((Ea >> 3) & 0x18)) {
case 0x04:
Qb = Ta[Kb++];;
base = Qb & 7;
if (base == 5) {
{
fa = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
base = 0;
} else {
fa = xa[base];
}
Rb = (Qb >> 3) & 7;
if (Rb != 4) {
fa = (fa + (xa[Rb] << (Qb >> 6))) >> 0;
}
break;
case 0x0c:
Qb = Ta[Kb++];;
fa = ((Ta[Kb++] << 24) >> 24);;
base = Qb & 7;
fa = (fa + xa[base]) >> 0;
Rb = (Qb >> 3) & 7;
if (Rb != 4) {
fa = (fa + (xa[Rb] << (Qb >> 6))) >> 0;
}
break;
case 0x14:
Qb = Ta[Kb++];; {
fa = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
base = Qb & 7;
fa = (fa + xa[base]) >> 0;
Rb = (Qb >> 3) & 7;
if (Rb != 4) {
fa = (fa + (xa[Rb] << (Qb >> 6))) >> 0;
}
break;
case 0x05:
{
fa = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
base = 0;
break;
case 0x00:
case 0x01:
case 0x02:
case 0x03:
case 0x06:
case 0x07:
base = Ea & 7;
fa = xa[base];
break;
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0d:
case 0x0e:
case 0x0f:
fa = ((Ta[Kb++] << 24) >> 24);;
base = Ea & 7;
fa = (fa + xa[base]) >> 0;
break;
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x15:
case 0x16:
case 0x17:
default:
{
fa = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
base = Ea & 7;
fa = (fa + xa[base]) >> 0;
break;
}
Sb = Da & 0x000f;
if (Sb == 0) {
if (base == 4 || base == 5) Sb = 2;
else Sb = 3;
} else {
Sb--;
}
fa = (fa + wa.segs[Sb].base) >> 0;
return fa;
}
}
function Ub() {
var fa, Sb;
if (Da & 0x0080) {
fa = Ob();
} else {
{
fa = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
}
Sb = Da & 0x000f;
if (Sb == 0) Sb = 3;
else Sb--;
fa = (fa + wa.segs[Sb].base) >> 0;
return fa;
}
function Vb(Ga, ga) {
if (Ga & 4) xa[Ga & 3] = (xa[Ga & 3] & -65281) | ((ga & 0xff) << 8);
else xa[Ga & 3] = (xa[Ga & 3] & -256) | (ga & 0xff);
}
function Wb(Ga, ga) {
xa[Ga] = (xa[Ga] & -65536) | (ga & 0xffff);
}
function Xb(Ja, Yb, Zb) {
var ac;
switch (Ja) {
case 0:
ya = Zb;
Yb = (Yb + Zb) >> 0;
za = Yb;
Aa = 2;
break;
case 1:
Yb = Yb | Zb;
za = Yb;
Aa = 14;
break;
case 2:
ac = bc();
ya = Zb;
Yb = (Yb + Zb + ac) >> 0;
za = Yb;
Aa = ac ? 5 : 2;
break;
case 3:
ac = bc();
ya = Zb;
Yb = (Yb - Zb - ac) >> 0;
za = Yb;
Aa = ac ? 11 : 8;
break;
case 4:
Yb = Yb & Zb;
za = Yb;
Aa = 14;
break;
case 5:
ya = Zb;
Yb = (Yb - Zb) >> 0;
za = Yb;
Aa = 8;
break;
case 6:
Yb = Yb ^ Zb;
za = Yb;
Aa = 14;
break;
case 7:
ya = Zb;
za = (Yb - Zb) >> 0;
Aa = 8;
break;
default:
throw "arith32: invalid op";
}
return Yb;
}
function cc(Ja, Yb, Zb) {
var ac;
switch (Ja) {
case 0:
ya = Zb;
Yb = (((Yb + Zb) << 16) >> 16);
za = Yb;
Aa = 1;
break;
case 1:
Yb = (((Yb | Zb) << 16) >> 16);
za = Yb;
Aa = 13;
break;
case 2:
ac = bc();
ya = Zb;
Yb = (((Yb + Zb + ac) << 16) >> 16);
za = Yb;
Aa = ac ? 4 : 1;
break;
case 3:
ac = bc();
ya = Zb;
Yb = (((Yb - Zb - ac) << 16) >> 16);
za = Yb;
Aa = ac ? 10 : 7;
break;
case 4:
Yb = (((Yb & Zb) << 16) >> 16);
za = Yb;
Aa = 13;
break;
case 5:
ya = Zb;
Yb = (((Yb - Zb) << 16) >> 16);
za = Yb;
Aa = 7;
break;
case 6:
Yb = (((Yb ^ Zb) << 16) >> 16);
za = Yb;
Aa = 13;
break;
case 7:
ya = Zb;
za = (((Yb - Zb) << 16) >> 16);
Aa = 7;
break;
default:
throw "arith16: invalid op";
}
return Yb;
}
function dc(ga) {
if (Aa < 25) {
Ba = Aa;
Ca = za;
}
za = (((ga + 1) << 16) >> 16);
Aa = 26;
return za;
}
function ec(ga) {
if (Aa < 25) {
Ba = Aa;
Ca = za;
}
za = (((ga - 1) << 16) >> 16);
Aa = 29;
return za;
}
function fc(Ja, Yb, Zb) {
var ac;
switch (Ja) {
case 0:
ya = Zb;
Yb = (((Yb + Zb) << 24) >> 24);
za = Yb;
Aa = 0;
break;
case 1:
Yb = (((Yb | Zb) << 24) >> 24);
za = Yb;
Aa = 12;
break;
case 2:
ac = bc();
ya = Zb;
Yb = (((Yb + Zb + ac) << 24) >> 24);
za = Yb;
Aa = ac ? 3 : 0;
break;
case 3:
ac = bc();
ya = Zb;
Yb = (((Yb - Zb - ac) << 24) >> 24);
za = Yb;
Aa = ac ? 9 : 6;
break;
case 4:
Yb = (((Yb & Zb) << 24) >> 24);
za = Yb;
Aa = 12;
break;
case 5:
ya = Zb;
Yb = (((Yb - Zb) << 24) >> 24);
za = Yb;
Aa = 6;
break;
case 6:
Yb = (((Yb ^ Zb) << 24) >> 24);
za = Yb;
Aa = 12;
break;
case 7:
ya = Zb;
za = (((Yb - Zb) << 24) >> 24);
Aa = 6;
break;
default:
throw "arith8: invalid op";
}
return Yb;
}
function gc(ga) {
if (Aa < 25) {
Ba = Aa;
Ca = za;
}
za = (((ga + 1) << 24) >> 24);
Aa = 25;
return za;
}
function hc(ga) {
if (Aa < 25) {
Ba = Aa;
Ca = za;
}
za = (((ga - 1) << 24) >> 24);
Aa = 28;
return za;
}
function ic(Ja, Yb, Zb) {
var jc, ac;
switch (Ja) {
case 0:
if (Zb & 0x1f) {
Zb &= 0x7;
Yb &= 0xff;
jc = Yb;
Yb = (Yb << Zb) | (Yb >>> (8 - Zb));
ya = kc();
ya |= (Yb & 0x0001) | (((jc ^ Yb) << 4) & 0x0800);
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
break;
case 1:
if (Zb & 0x1f) {
Zb &= 0x7;
Yb &= 0xff;
jc = Yb;
Yb = (Yb >>> Zb) | (Yb << (8 - Zb));
ya = kc();
ya |= ((Yb >> 7) & 0x0001) | (((jc ^ Yb) << 4) & 0x0800);
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
break;
case 2:
Zb = ca[Zb & 0x1f];
if (Zb) {
Yb &= 0xff;
jc = Yb;
ac = bc();
Yb = (Yb << Zb) | (ac << (Zb - 1));
if (Zb > 1) Yb |= jc >>> (9 - Zb);
ya = kc();
ya |= (((jc ^ Yb) << 4) & 0x0800) | ((jc >> (8 - Zb)) & 0x0001);
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
break;
case 3:
Zb = ca[Zb & 0x1f];
if (Zb) {
Yb &= 0xff;
jc = Yb;
ac = bc();
Yb = (Yb >>> Zb) | (ac << (8 - Zb));
if (Zb > 1) Yb |= jc << (9 - Zb);
ya = kc();
ya |= (((jc ^ Yb) << 4) & 0x0800) | ((jc >> (Zb - 1)) & 0x0001);
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
break;
case 4:
case 6:
Zb &= 0x1f;
if (Zb) {
ya = Yb << (Zb - 1);
za = Yb = (((Yb << Zb) << 24) >> 24);
Aa = 15;
}
break;
case 5:
Zb &= 0x1f;
if (Zb) {
Yb &= 0xff;
ya = Yb >>> (Zb - 1);
za = Yb = (((Yb >>> Zb) << 24) >> 24);
Aa = 18;
}
break;
case 7:
Zb &= 0x1f;
if (Zb) {
Yb = (Yb << 24) >> 24;
ya = Yb >> (Zb - 1);
za = Yb = (((Yb >> Zb) << 24) >> 24);
Aa = 18;
}
break;
default:
throw "unsupported shift8=" + Ja;
}
return Yb;
}
function lc(Ja, Yb, Zb) {
var jc, ac;
switch (Ja) {
case 0:
if (Zb & 0x1f) {
Zb &= 0xf;
Yb &= 0xffff;
jc = Yb;
Yb = (Yb << Zb) | (Yb >>> (16 - Zb));
ya = kc();
ya |= (Yb & 0x0001) | (((jc ^ Yb) >> 4) & 0x0800);
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
break;
case 1:
if (Zb & 0x1f) {
Zb &= 0xf;
Yb &= 0xffff;
jc = Yb;
Yb = (Yb >>> Zb) | (Yb << (16 - Zb));
ya = kc();
ya |= ((Yb >> 15) & 0x0001) | (((jc ^ Yb) >> 4) & 0x0800);
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
break;
case 2:
Zb = ba[Zb & 0x1f];
if (Zb) {
Yb &= 0xffff;
jc = Yb;
ac = bc();
Yb = (Yb << Zb) | (ac << (Zb - 1));
if (Zb > 1) Yb |= jc >>> (17 - Zb);
ya = kc();
ya |= (((jc ^ Yb) >> 4) & 0x0800) | ((jc >> (16 - Zb)) & 0x0001);
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
break;
case 3:
Zb = ba[Zb & 0x1f];
if (Zb) {
Yb &= 0xffff;
jc = Yb;
ac = bc();
Yb = (Yb >>> Zb) | (ac << (16 - Zb));
if (Zb > 1) Yb |= jc << (17 - Zb);
ya = kc();
ya |= (((jc ^ Yb) >> 4) & 0x0800) | ((jc >> (Zb - 1)) & 0x0001);
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
break;
case 4:
case 6:
Zb &= 0x1f;
if (Zb) {
ya = Yb << (Zb - 1);
za = Yb = (((Yb << Zb) << 16) >> 16);
Aa = 16;
}
break;
case 5:
Zb &= 0x1f;
if (Zb) {
Yb &= 0xffff;
ya = Yb >>> (Zb - 1);
za = Yb = (((Yb >>> Zb) << 16) >> 16);
Aa = 19;
}
break;
case 7:
Zb &= 0x1f;
if (Zb) {
Yb = (Yb << 16) >> 16;
ya = Yb >> (Zb - 1);
za = Yb = (((Yb >> Zb) << 16) >> 16);
Aa = 19;
}
break;
default:
throw "unsupported shift16=" + Ja;
}
return Yb;
}
function mc(Ja, Yb, Zb) {
var jc, ac;
switch (Ja) {
case 0:
Zb &= 0x1f;
if (Zb) {
jc = Yb;
Yb = (Yb << Zb) | (Yb >>> (32 - Zb));
ya = kc();
ya |= (Yb & 0x0001) | (((jc ^ Yb) >> 20) & 0x0800);
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
break;
case 1:
Zb &= 0x1f;
if (Zb) {
jc = Yb;
Yb = (Yb >>> Zb) | (Yb << (32 - Zb));
ya = kc();
ya |= ((Yb >> 31) & 0x0001) | (((jc ^ Yb) >> 20) & 0x0800);
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
break;
case 2:
Zb &= 0x1f;
if (Zb) {
jc = Yb;
ac = bc();
Yb = (Yb << Zb) | (ac << (Zb - 1));
if (Zb > 1) Yb |= jc >>> (33 - Zb);
ya = kc();
ya |= (((jc ^ Yb) >> 20) & 0x0800) | ((jc >> (32 - Zb)) & 0x0001);
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
break;
case 3:
Zb &= 0x1f;
if (Zb) {
jc = Yb;
ac = bc();
Yb = (Yb >>> Zb) | (ac << (32 - Zb));
if (Zb > 1) Yb |= jc << (33 - Zb);
ya = kc();
ya |= (((jc ^ Yb) >> 20) & 0x0800) | ((jc >> (Zb - 1)) & 0x0001);
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
break;
case 4:
case 6:
Zb &= 0x1f;
if (Zb) {
ya = Yb << (Zb - 1);
za = Yb = Yb << Zb;
Aa = 17;
}
break;
case 5:
Zb &= 0x1f;
if (Zb) {
ya = Yb >>> (Zb - 1);
za = Yb = Yb >>> Zb;
Aa = 20;
}
break;
case 7:
Zb &= 0x1f;
if (Zb) {
ya = Yb >> (Zb - 1);
za = Yb = Yb >> Zb;
Aa = 20;
}
break;
default:
throw "unsupported shift32=" + Ja;
}
return Yb;
}
function nc(Ja, Yb, Zb, oc) {
var pc;
oc &= 0x1f;
if (oc) {
if (Ja == 0) {
Zb &= 0xffff;
pc = Zb | (Yb << 16);
ya = pc >> (32 - oc);
pc <<= oc;
if (oc > 16) pc |= Zb << (oc - 16);
Yb = za = pc >> 16;
Aa = 19;
} else {
pc = (Yb & 0xffff) | (Zb << 16);
ya = pc >> (oc - 1);
pc >>= oc;
if (oc > 16) pc |= Zb << (32 - oc);
Yb = za = (((pc) << 16) >> 16);
Aa = 19;
}
}
return Yb;
}
function qc(Yb, Zb, oc) {
oc &= 0x1f;
if (oc) {
ya = Yb << (oc - 1);
za = Yb = (Yb << oc) | (Zb >>> (32 - oc));
Aa = 17;
}
return Yb;
}
function rc(Yb, Zb, oc) {
oc &= 0x1f;
if (oc) {
ya = Yb >> (oc - 1);
za = Yb = (Yb >>> oc) | (Zb << (32 - oc));
Aa = 20;
}
return Yb;
}
function sc(Yb, Zb) {
Zb &= 0xf;
ya = Yb >> Zb;
Aa = 19;
}
function tc(Yb, Zb) {
Zb &= 0x1f;
ya = Yb >> Zb;
Aa = 20;
}
function uc(Ja, Yb, Zb) {
var vc;
Zb &= 0xf;
ya = Yb >> Zb;
vc = 1 << Zb;
switch (Ja) {
case 1:
Yb |= vc;
break;
case 2:
Yb &= ~vc;
break;
case 3:
default:
Yb ^= vc;
break;
}
Aa = 19;
return Yb;
}
function wc(Ja, Yb, Zb) {
var vc;
Zb &= 0x1f;
ya = Yb >> Zb;
vc = 1 << Zb;
switch (Ja) {
case 1:
Yb |= vc;
break;
case 2:
Yb &= ~vc;
break;
case 3:
default:
Yb ^= vc;
break;
}
Aa = 20;
return Yb;
}
function xc(Yb, Zb) {
Zb &= 0xffff;
if (Zb) {
Yb = 0;
while ((Zb & 1) == 0) {
Yb++;
Zb >>= 1;
}
za = 1;
} else {
za = 0;
}
Aa = 14;
return Yb;
}
function yc(Yb, Zb) {
if (Zb) {
Yb = 0;
while ((Zb & 1) == 0) {
Yb++;
Zb >>= 1;
}
za = 1;
} else {
za = 0;
}
Aa = 14;
return Yb;
}
function zc(Yb, Zb) {
Zb &= 0xffff;
if (Zb) {
Yb = 15;
while ((Zb & 0x8000) == 0) {
Yb--;
Zb <<= 1;
}
za = 1;
} else {
za = 0;
}
Aa = 14;
return Yb;
}
function Ac(Yb, Zb) {
if (Zb) {
Yb = 31;
while (Zb >= 0) {
Yb--;
Zb <<= 1;
}
za = 1;
} else {
za = 0;
}
Aa = 14;
return Yb;
}
function Bc(b) {
var a, q, r;
a = xa[0] & 0xffff;
b &= 0xff;
if ((a >> 8) >= b) Cc(0);
q = (a / b) >> 0;
r = (a % b);
Wb(0, (q & 0xff) | (r << 8));
}
function Dc(b) {
var a, q, r;
a = (xa[0] << 16) >> 16;
b = (b << 24) >> 24;
if (b == 0) Cc(0);
q = (a / b) >> 0;
if (((q << 24) >> 24) != q) Cc(0);
r = (a % b);
Wb(0, (q & 0xff) | (r << 8));
}
function Ec(b) {
var a, q, r;
a = (xa[2] << 16) | (xa[0] & 0xffff);
b &= 0xffff;
if ((a >>> 16) >= b) Cc(0);
q = (a / b) >> 0;
r = (a % b);
Wb(0, q);
Wb(2, r);
}
function Fc(b) {
var a, q, r;
a = (xa[2] << 16) | (xa[0] & 0xffff);
b = (b << 16) >> 16;
if (b == 0) Cc(0);
q = (a / b) >> 0;
if (((q << 16) >> 16) != q) Cc(0);
r = (a % b);
Wb(0, q);
Wb(2, r);
}
function Gc(Hc, Ic, b) {
var a, i, Jc;
Hc = Hc >>> 0;
Ic = Ic >>> 0;
b = b >>> 0;
if (Hc >= b) {
Cc(0);
}
if (Hc >= 0 && Hc <= 0x200000) {
a = Hc * 4294967296 + Ic;
Ma = (a % b) >> 0;
return (a / b) >> 0;
} else {
for (i = 0; i < 32; i++) {
Jc = Hc >> 31;
Hc = ((Hc << 1) | (Ic >>> 31)) >>> 0;
if (Jc || Hc >= b) {
Hc = Hc - b;
Ic = (Ic << 1) | 1;
} else {
Ic = Ic << 1;
}
}
Ma = Hc >> 0;
return Ic;
}
}
function Kc(Hc, Ic, b) {
var Lc, Mc, q;
if (Hc < 0) {
Lc = 1;
Hc = ~Hc;
Ic = ( - Ic) >> 0;
if (Ic == 0) Hc = (Hc + 1) >> 0;
} else {
Lc = 0;
}
if (b < 0) {
b = ( - b) >> 0;
Mc = 1;
} else {
Mc = 0;
}
q = Gc(Hc, Ic, b);
Mc ^= Lc;
if (Mc) {
if ((q >>> 0) > 0x80000000) Cc(0);
q = ( - q) >> 0;
} else {
if ((q >>> 0) >= 0x80000000) Cc(0);
}
if (Lc) {
Ma = ( - Ma) >> 0;
}
return q;
}
function Nc(a, b) {
var pc;
a &= 0xff;
b &= 0xff;
pc = (a * b) >> 0;
ya = pc >> 8;
za = (((pc) << 24) >> 24);
Aa = 21;
return pc;
}
function Oc(a, b) {
var pc;
a = (((a) << 24) >> 24);
b = (((b) << 24) >> 24);
pc = (a * b) >> 0;
za = (((pc) << 24) >> 24);
ya = (pc != za) >> 0;
Aa = 21;
return pc;
}
function Pc(a, b) {
var pc;
a &= 0xffff;
b &= 0xffff;
pc = (a * b) >> 0;
ya = pc >>> 16;
za = (((pc) << 16) >> 16);
Aa = 22;
return pc;
}
function Qc(a, b) {
var pc;
a = (a << 16) >> 16;
b = (b << 16) >> 16;
pc = (a * b) >> 0;
za = (((pc) << 16) >> 16);
ya = (pc != za) >> 0;
Aa = 22;
return pc;
}
function Rc(a, b) {
var r, Ic, Hc, Sc, Tc, m;
a = a >>> 0;
b = b >>> 0;
r = a * b;
if (r <= 0xffffffff) {
Ma = 0;
r &= -1;
} else {
Ic = a & 0xffff;
Hc = a >>> 16;
Sc = b & 0xffff;
Tc = b >>> 16;
r = Ic * Sc;
Ma = Hc * Tc;
m = Ic * Tc;
r += (((m & 0xffff) << 16) >>> 0);
Ma += (m >>> 16);
if (r >= 4294967296) {
r -= 4294967296;
Ma++;
}
m = Hc * Sc;
r += (((m & 0xffff) << 16) >>> 0);
Ma += (m >>> 16);
if (r >= 4294967296) {
r -= 4294967296;
Ma++;
}
r &= -1;
Ma &= -1;
}
return r;
}
function Uc(a, b) {
za = Rc(a, b);
ya = Ma;
Aa = 23;
return za;
}
function Vc(a, b) {
var s, r;
s = 0;
if (a < 0) {
a = -a;
s = 1;
}
if (b < 0) {
b = -b;
s ^= 1;
}
r = Rc(a, b);
if (s) {
Ma = ~Ma;
r = ( - r) >> 0;
if (r == 0) {
Ma = (Ma + 1) >> 0;
}
}
za = r;
ya = (Ma - (r >> 31)) >> 0;
Aa = 23;
return r;
}
function bc() {
var Yb, pc, Wc, Xc;
if (Aa >= 25) {
Wc = Ba;
Xc = Ca;
} else {
Wc = Aa;
Xc = za;
}
switch (Wc) {
case 0:
pc = (Xc & 0xff) < (ya & 0xff);
break;
case 1:
pc = (Xc & 0xffff) < (ya & 0xffff);
break;
case 2:
pc = (Xc >>> 0) < (ya >>> 0);
break;
case 3:
pc = (Xc & 0xff) <= (ya & 0xff);
break;
case 4:
pc = (Xc & 0xffff) <= (ya & 0xffff);
break;
case 5:
pc = (Xc >>> 0) <= (ya >>> 0);
break;
case 6:
pc = ((Xc + ya) & 0xff) < (ya & 0xff);
break;
case 7:
pc = ((Xc + ya) & 0xffff) < (ya & 0xffff);
break;
case 8:
pc = ((Xc + ya) >>> 0) < (ya >>> 0);
break;
case 9:
Yb = (Xc + ya + 1) & 0xff;
pc = Yb <= (ya & 0xff);
break;
case 10:
Yb = (Xc + ya + 1) & 0xffff;
pc = Yb <= (ya & 0xffff);
break;
case 11:
Yb = (Xc + ya + 1) >>> 0;
pc = Yb <= (ya >>> 0);
break;
case 12:
case 13:
case 14:
pc = 0;
break;
case 15:
pc = (ya >> 7) & 1;
break;
case 16:
pc = (ya >> 15) & 1;
break;
case 17:
pc = (ya >> 31) & 1;
break;
case 18:
case 19:
case 20:
pc = ya & 1;
break;
case 21:
case 22:
case 23:
pc = ya != 0;
break;
case 24:
pc = ya & 1;
break;
default:
throw "GET_CARRY: unsupported cc_op=" + Aa;
}
return pc;
}
function Yc() {
var pc, Yb;
switch (Aa) {
case 0:
Yb = (za - ya) >> 0;
pc = (((Yb ^ ya ^ -1) & (Yb ^ za)) >> 7) & 1;
break;
case 1:
Yb = (za - ya) >> 0;
pc = (((Yb ^ ya ^ -1) & (Yb ^ za)) >> 15) & 1;
break;
case 2:
Yb = (za - ya) >> 0;
pc = (((Yb ^ ya ^ -1) & (Yb ^ za)) >> 31) & 1;
break;
case 3:
Yb = (za - ya - 1) >> 0;
pc = (((Yb ^ ya ^ -1) & (Yb ^ za)) >> 7) & 1;
break;
case 4:
Yb = (za - ya - 1) >> 0;
pc = (((Yb ^ ya ^ -1) & (Yb ^ za)) >> 15) & 1;
break;
case 5:
Yb = (za - ya - 1) >> 0;
pc = (((Yb ^ ya ^ -1) & (Yb ^ za)) >> 31) & 1;
break;
case 6:
Yb = (za + ya) >> 0;
pc = (((Yb ^ ya) & (Yb ^ za)) >> 7) & 1;
break;
case 7:
Yb = (za + ya) >> 0;
pc = (((Yb ^ ya) & (Yb ^ za)) >> 15) & 1;
break;
case 8:
Yb = (za + ya) >> 0;
pc = (((Yb ^ ya) & (Yb ^ za)) >> 31) & 1;
break;
case 9:
Yb = (za + ya + 1) >> 0;
pc = (((Yb ^ ya) & (Yb ^ za)) >> 7) & 1;
break;
case 10:
Yb = (za + ya + 1) >> 0;
pc = (((Yb ^ ya) & (Yb ^ za)) >> 15) & 1;
break;
case 11:
Yb = (za + ya + 1) >> 0;
pc = (((Yb ^ ya) & (Yb ^ za)) >> 31) & 1;
break;
case 12:
case 13:
case 14:
pc = 0;
break;
case 15:
case 18:
pc = ((ya ^ za) >> 7) & 1;
break;
case 16:
case 19:
pc = ((ya ^ za) >> 15) & 1;
break;
case 17:
case 20:
pc = ((ya ^ za) >> 31) & 1;
break;
case 21:
case 22:
case 23:
pc = ya != 0;
break;
case 24:
pc = (ya >> 11) & 1;
break;
case 25:
pc = (za & 0xff) == 0x80;
break;
case 26:
pc = (za & 0xffff) == 0x8000;
break;
case 27:
pc = (za == -2147483648);
break;
case 28:
pc = (za & 0xff) == 0x7f;
break;
case 29:
pc = (za & 0xffff) == 0x7fff;
break;
case 30:
pc = za == 0x7fffffff;
break;
default:
throw "JO: unsupported cc_op=" + Aa;
}
return pc;
}
function Zc() {
var pc;
switch (Aa) {
case 6:
pc = ((za + ya) & 0xff) <= (ya & 0xff);
break;
case 7:
pc = ((za + ya) & 0xffff) <= (ya & 0xffff);
break;
case 8:
pc = ((za + ya) >>> 0) <= (ya >>> 0);
break;
case 24:
pc = (ya & (0x0040 | 0x0001)) != 0;
break;
default:
pc = bc() | (za == 0);
break;
}
return pc;
}
function ad() {
if (Aa == 24) {
return (ya >> 2) & 1;
} else {
return aa[za & 0xff];
}
}
function bd() {
var pc;
switch (Aa) {
case 6:
pc = ((za + ya) << 24) < (ya << 24);
break;
case 7:
pc = ((za + ya) << 16) < (ya << 16);
break;
case 8:
pc = ((za + ya) >> 0) < ya;
break;
case 12:
case 25:
case 28:
case 13:
case 26:
case 29:
case 14:
case 27:
case 30:
pc = za < 0;
break;
case 24:
pc = ((ya >> 7) ^ (ya >> 11)) & 1;
break;
default:
pc = (Aa == 24 ? ((ya >> 7) & 1) : (za < 0)) ^ Yc();
break;
}
return pc;
}
function cd() {
var pc;
switch (Aa) {
case 6:
pc = ((za + ya) << 24) <= (ya << 24);
break;
case 7:
pc = ((za + ya) << 16) <= (ya << 16);
break;
case 8:
pc = ((za + ya) >> 0) <= ya;
break;
case 12:
case 25:
case 28:
case 13:
case 26:
case 29:
case 14:
case 27:
case 30:
pc = za <= 0;
break;
case 24:
pc = (((ya >> 7) ^ (ya >> 11)) | (ya >> 6)) & 1;
break;
default:
pc = ((Aa == 24 ? ((ya >> 7) & 1) : (za < 0)) ^ Yc()) | (za == 0);
break;
}
return pc;
}
function dd() {
var Yb, pc;
switch (Aa) {
case 0:
case 1:
case 2:
Yb = (za - ya) >> 0;
pc = (za ^ Yb ^ ya) & 0x10;
break;
case 3:
case 4:
case 5:
Yb = (za - ya - 1) >> 0;
pc = (za ^ Yb ^ ya) & 0x10;
break;
case 6:
case 7:
case 8:
Yb = (za + ya) >> 0;
pc = (za ^ Yb ^ ya) & 0x10;
break;
case 9:
case 10:
case 11:
Yb = (za + ya + 1) >> 0;
pc = (za ^ Yb ^ ya) & 0x10;
break;
case 12:
case 13:
case 14:
pc = 0;
break;
case 15:
case 18:
case 16:
case 19:
case 17:
case 20:
case 21:
case 22:
case 23:
pc = 0;
break;
case 24:
pc = ya & 0x10;
break;
case 25:
case 26:
case 27:
pc = (za ^ (za - 1)) & 0x10;
break;
case 28:
case 29:
case 30:
pc = (za ^ (za + 1)) & 0x10;
break;
default:
throw "AF: unsupported cc_op=" + Aa;
}
return pc;
}
function ed(fd) {
var pc;
switch (fd >> 1) {
case 0:
pc = Yc();
break;
case 1:
pc = bc();
break;
case 2:
pc = (za == 0);
break;
case 3:
pc = Zc();
break;
case 4:
pc = (Aa == 24 ? ((ya >> 7) & 1) : (za < 0));
break;
case 5:
pc = ad();
break;
case 6:
pc = bd();
break;
case 7:
pc = cd();
break;
default:
throw "unsupported cond: " + fd;
}
return pc ^ (fd & 1);
}
function kc() {
return (ad() << 2) | ((za == 0) << 6) | ((Aa == 24 ? ((ya >> 7) & 1) : (za < 0)) << 7) | dd();
}
function gd() {
return (bc() << 0) | (ad() << 2) | ((za == 0) << 6) | ((Aa == 24 ? ((ya >> 7) & 1) : (za < 0)) << 7) | (Yc() << 11) | dd();
}
function hd() {
var id;
id = gd();
id |= wa.df & 0x00000400;
id |= wa.eflags;
return id;
}
function jd(id, kd) {
ya = id & (0x0800 | 0x0080 | 0x0040 | 0x0010 | 0x0004 | 0x0001);
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
wa.df = 1 - (2 * ((id >> 10) & 1));
wa.eflags = (wa.eflags & ~kd) | (id & kd);
}
function ld() {
return wa.cycle_count + (ua - Ka);
}
function md(na) {
throw "CPU abort: " + na;
}
function nd() {
wa.eip = Jb;
wa.cc_src = ya;
wa.cc_dst = za;
wa.cc_op = Aa;
wa.cc_op2 = Ba;
wa.cc_dst2 = Ca;
wa.dump();
}
function od() {
wa.eip = Jb;
wa.cc_src = ya;
wa.cc_dst = za;
wa.cc_op = Aa;
wa.cc_op2 = Ba;
wa.cc_dst2 = Ca;
wa.dump_short();
}
function pd(intno, error_code) {
wa.cycle_count += (ua - Ka);
wa.eip = Jb;
wa.cc_src = ya;
wa.cc_dst = za;
wa.cc_op = Aa;
wa.cc_op2 = Ba;
wa.cc_dst2 = Ca;
throw {
intno: intno,
error_code: error_code
};
}
function Cc(intno) {
pd(intno, 0);
}
function qd(rd) {
wa.cpl = rd;
if (wa.cpl == 3) {
bb = Za;
cb = ab;
} else {
bb = Xa;
cb = Ya;
}
}
function sd(fa, td) {
var eb;
if (td) {
eb = cb[fa >>> 12];
} else {
eb = bb[fa >>> 12];
}
if (eb == -1) {
fb(fa, td, wa.cpl == 3);
if (td) {
eb = cb[fa >>> 12];
} else {
eb = bb[fa >>> 12];
}
}
return eb ^ fa;
}
function ud(ga) {
var vd;
vd = xa[4] - 2;
fa = ((vd & Pa) + Oa) >> 0;
ub(ga);
xa[4] = (xa[4] & ~Pa) | ((vd) & Pa);
}
function wd(ga) {
var vd;
vd = xa[4] - 4;
fa = ((vd & Pa) + Oa) >> 0;
wb(ga);
xa[4] = (xa[4] & ~Pa) | ((vd) & Pa);
}
function xd() {
fa = ((xa[4] & Pa) + Oa) >> 0;
return ib();
}
function yd() {
xa[4] = (xa[4] & ~Pa) | ((xa[4] + 2) & Pa);
}
function zd() {
fa = ((xa[4] & Pa) + Oa) >> 0;
return kb();
}
function Ad() {
xa[4] = (xa[4] & ~Pa) | ((xa[4] + 4) & Pa);
}
function Bd(Nb, b) {
var n, Da, l, Ea, Cd, base, Ja, Dd;
n = 1;
Da = Ra;
if (Da & 0x0100) Dd = 2;
else Dd = 4;
Ed: for (;;) {
switch (b) {
case 0x66:
if (Ra & 0x0100) {
Dd = 4;
Da &= ~0x0100;
} else {
Dd = 2;
Da |= 0x0100;
}
case 0xf0:
case 0xf2:
case 0xf3:
case 0x26:
case 0x2e:
case 0x36:
case 0x3e:
case 0x64:
case 0x65:
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
b = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
break;
case 0x67:
if (Ra & 0x0080) {
Da &= ~0x0080;
} else {
Da |= 0x0080;
} {
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
b = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
break;
case 0x91:
case 0x92:
case 0x93:
case 0x94:
case 0x95:
case 0x96:
case 0x97:
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:
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 0x98:
case 0x99:
case 0xc9:
case 0x9c:
case 0x9d:
case 0x06:
case 0x0e:
case 0x16:
case 0x1e:
case 0x07:
case 0x17:
case 0x1f:
case 0xc3:
case 0xcb:
case 0x90:
case 0xcc:
case 0xce:
case 0xcf:
case 0xf5:
case 0xf8:
case 0xf9:
case 0xfc:
case 0xfd:
case 0xfa:
case 0xfb:
case 0x9e:
case 0x9f:
case 0xf4:
case 0xa4:
case 0xa5:
case 0xaa:
case 0xab:
case 0xa6:
case 0xa7:
case 0xac:
case 0xad:
case 0xae:
case 0xaf:
case 0x9b:
case 0xec:
case 0xed:
case 0xee:
case 0xef:
case 0xd7:
case 0x27:
case 0x2f:
case 0x37:
case 0x3f:
case 0x60:
case 0x61:
case 0x6c:
case 0x6d:
case 0x6e:
case 0x6f:
break Ed;
case 0xb0:
case 0xb1:
case 0xb2:
case 0xb3:
case 0xb4:
case 0xb5:
case 0xb6:
case 0xb7:
case 0x04:
case 0x0c:
case 0x14:
case 0x1c:
case 0x24:
case 0x2c:
case 0x34:
case 0x3c:
case 0xa8:
case 0x6a:
case 0xeb:
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:
case 0x74:
case 0x75:
case 0xe0:
case 0xe1:
case 0xe2:
case 0xe3:
case 0xcd:
case 0xe4:
case 0xe5:
case 0xe6:
case 0xe7:
case 0xd4:
case 0xd5:
n++;
if (n > 15) Cc(6);
break Ed;
case 0xb8:
case 0xb9:
case 0xba:
case 0xbb:
case 0xbc:
case 0xbd:
case 0xbe:
case 0xbf:
case 0x05:
case 0x0d:
case 0x15:
case 0x1d:
case 0x25:
case 0x2d:
case 0x35:
case 0x3d:
case 0xa9:
case 0x68:
case 0xe9:
case 0xe8:
n += Dd;
if (n > 15) Cc(6);
break Ed;
case 0x88:
case 0x89:
case 0x8a:
case 0x8b:
case 0x86:
case 0x87:
case 0x8e:
case 0x8c:
case 0xc4:
case 0xc5:
case 0x00:
case 0x08:
case 0x10:
case 0x18:
case 0x20:
case 0x28:
case 0x30:
case 0x38:
case 0x01:
case 0x09:
case 0x11:
case 0x19:
case 0x21:
case 0x29:
case 0x31:
case 0x39:
case 0x02:
case 0x0a:
case 0x12:
case 0x1a:
case 0x22:
case 0x2a:
case 0x32:
case 0x3a:
case 0x03:
case 0x0b:
case 0x13:
case 0x1b:
case 0x23:
case 0x2b:
case 0x33:
case 0x3b:
case 0x84:
case 0x85:
case 0xd0:
case 0xd1:
case 0xd2:
case 0xd3:
case 0x8f:
case 0x8d:
case 0xfe:
case 0xff:
case 0xd8:
case 0xd9:
case 0xda:
case 0xdb:
case 0xdc:
case 0xdd:
case 0xde:
case 0xdf:
case 0x62:
case 0x63:
{
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
Ea = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
if (Da & 0x0080) {
switch (Ea >> 6) {
case 0:
if ((Ea & 7) == 6) n += 2;
break;
case 1:
n++;
break;
case 2:
n += 2;
break;
case 3:
default:
break;
}
} else {
switch ((Ea & 7) | ((Ea >> 3) & 0x18)) {
case 0x04:
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
Cd = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
if ((Cd & 7) == 5) {
n += 4;
}
break;
case 0x0c:
n += 2;
break;
case 0x14:
n += 5;
break;
case 0x05:
n += 4;
break;
case 0x00:
case 0x01:
case 0x02:
case 0x03:
case 0x06:
case 0x07:
break;
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0d:
case 0x0e:
case 0x0f:
n++;
break;
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x15:
case 0x16:
case 0x17:
n += 4;
break;
}
}
if (n > 15) Cc(6);
};
break Ed;
case 0xa0:
case 0xa1:
case 0xa2:
case 0xa3:
if (Da & 0x0100) n += 2;
else n += 4;
if (n > 15) Cc(6);
break Ed;
case 0xc6:
case 0x80:
case 0x82:
case 0x83:
case 0x6b:
case 0xc0:
case 0xc1:
{
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
Ea = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
if (Da & 0x0080) {
switch (Ea >> 6) {
case 0:
if ((Ea & 7) == 6) n += 2;
break;
case 1:
n++;
break;
case 2:
n += 2;
break;
case 3:
default:
break;
}
} else {
switch ((Ea & 7) | ((Ea >> 3) & 0x18)) {
case 0x04:
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
Cd = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
if ((Cd & 7) == 5) {
n += 4;
}
break;
case 0x0c:
n += 2;
break;
case 0x14:
n += 5;
break;
case 0x05:
n += 4;
break;
case 0x00:
case 0x01:
case 0x02:
case 0x03:
case 0x06:
case 0x07:
break;
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0d:
case 0x0e:
case 0x0f:
n++;
break;
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x15:
case 0x16:
case 0x17:
n += 4;
break;
}
}
if (n > 15) Cc(6);
};
n++;
if (n > 15) Cc(6);
break Ed;
case 0xc7:
case 0x81:
case 0x69:
{
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
Ea = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
if (Da & 0x0080) {
switch (Ea >> 6) {
case 0:
if ((Ea & 7) == 6) n += 2;
break;
case 1:
n++;
break;
case 2:
n += 2;
break;
case 3:
default:
break;
}
} else {
switch ((Ea & 7) | ((Ea >> 3) & 0x18)) {
case 0x04:
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
Cd = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
if ((Cd & 7) == 5) {
n += 4;
}
break;
case 0x0c:
n += 2;
break;
case 0x14:
n += 5;
break;
case 0x05:
n += 4;
break;
case 0x00:
case 0x01:
case 0x02:
case 0x03:
case 0x06:
case 0x07:
break;
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0d:
case 0x0e:
case 0x0f:
n++;
break;
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x15:
case 0x16:
case 0x17:
n += 4;
break;
}
}
if (n > 15) Cc(6);
};
n += Dd;
if (n > 15) Cc(6);
break Ed;
case 0xf6:
{
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
Ea = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
if (Da & 0x0080) {
switch (Ea >> 6) {
case 0:
if ((Ea & 7) == 6) n += 2;
break;
case 1:
n++;
break;
case 2:
n += 2;
break;
case 3:
default:
break;
}
} else {
switch ((Ea & 7) | ((Ea >> 3) & 0x18)) {
case 0x04:
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
Cd = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
if ((Cd & 7) == 5) {
n += 4;
}
break;
case 0x0c:
n += 2;
break;
case 0x14:
n += 5;
break;
case 0x05:
n += 4;
break;
case 0x00:
case 0x01:
case 0x02:
case 0x03:
case 0x06:
case 0x07:
break;
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0d:
case 0x0e:
case 0x0f:
n++;
break;
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x15:
case 0x16:
case 0x17:
n += 4;
break;
}
}
if (n > 15) Cc(6);
};
Ja = (Ea >> 3) & 7;
if (Ja == 0) {
n++;
if (n > 15) Cc(6);
}
break Ed;
case 0xf7:
{
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
Ea = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
if (Da & 0x0080) {
switch (Ea >> 6) {
case 0:
if ((Ea & 7) == 6) n += 2;
break;
case 1:
n++;
break;
case 2:
n += 2;
break;
case 3:
default:
break;
}
} else {
switch ((Ea & 7) | ((Ea >> 3) & 0x18)) {
case 0x04:
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
Cd = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
if ((Cd & 7) == 5) {
n += 4;
}
break;
case 0x0c:
n += 2;
break;
case 0x14:
n += 5;
break;
case 0x05:
n += 4;
break;
case 0x00:
case 0x01:
case 0x02:
case 0x03:
case 0x06:
case 0x07:
break;
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0d:
case 0x0e:
case 0x0f:
n++;
break;
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x15:
case 0x16:
case 0x17:
n += 4;
break;
}
}
if (n > 15) Cc(6);
};
Ja = (Ea >> 3) & 7;
if (Ja == 0) {
n += Dd;
if (n > 15) Cc(6);
}
break Ed;
case 0xea:
case 0x9a:
n += 2 + Dd;
if (n > 15) Cc(6);
break Ed;
case 0xc2:
case 0xca:
n += 2;
if (n > 15) Cc(6);
break Ed;
case 0xc8:
n += 3;
if (n > 15) Cc(6);
break Ed;
case 0xd6:
case 0xf1:
default:
Cc(6);
case 0x0f:
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
b = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
switch (b) {
case 0x06:
case 0xa2:
case 0x31:
case 0xa0:
case 0xa8:
case 0xa1:
case 0xa9:
case 0xc8:
case 0xc9:
case 0xca:
case 0xcb:
case 0xcc:
case 0xcd:
case 0xce:
case 0xcf:
break Ed;
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:
n += Dd;
if (n > 15) Cc(6);
break Ed;
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:
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:
case 0xb6:
case 0xb7:
case 0xbe:
case 0xbf:
case 0x00:
case 0x01:
case 0x02:
case 0x03:
case 0x20:
case 0x22:
case 0x23:
case 0xb2:
case 0xb4:
case 0xb5:
case 0xa5:
case 0xad:
case 0xa3:
case 0xab:
case 0xb3:
case 0xbb:
case 0xbc:
case 0xbd:
case 0xaf:
case 0xc0:
case 0xc1:
case 0xb0:
case 0xb1:
{
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
Ea = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
if (Da & 0x0080) {
switch (Ea >> 6) {
case 0:
if ((Ea & 7) == 6) n += 2;
break;
case 1:
n++;
break;
case 2:
n += 2;
break;
case 3:
default:
break;
}
} else {
switch ((Ea & 7) | ((Ea >> 3) & 0x18)) {
case 0x04:
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
Cd = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
if ((Cd & 7) == 5) {
n += 4;
}
break;
case 0x0c:
n += 2;
break;
case 0x14:
n += 5;
break;
case 0x05:
n += 4;
break;
case 0x00:
case 0x01:
case 0x02:
case 0x03:
case 0x06:
case 0x07:
break;
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0d:
case 0x0e:
case 0x0f:
n++;
break;
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x15:
case 0x16:
case 0x17:
n += 4;
break;
}
}
if (n > 15) Cc(6);
};
break Ed;
case 0xa4:
case 0xac:
case 0xba:
{
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
Ea = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
if (Da & 0x0080) {
switch (Ea >> 6) {
case 0:
if ((Ea & 7) == 6) n += 2;
break;
case 1:
n++;
break;
case 2:
n += 2;
break;
case 3:
default:
break;
}
} else {
switch ((Ea & 7) | ((Ea >> 3) & 0x18)) {
case 0x04:
{
if ((n + 1) > 15) Cc(6);
fa = (Nb + (n++)) >> 0;
Cd = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
};
if ((Cd & 7) == 5) {
n += 4;
}
break;
case 0x0c:
n += 2;
break;
case 0x14:
n += 5;
break;
case 0x05:
n += 4;
break;
case 0x00:
case 0x01:
case 0x02:
case 0x03:
case 0x06:
case 0x07:
break;
case 0x08:
case 0x09:
case 0x0a:
case 0x0b:
case 0x0d:
case 0x0e:
case 0x0f:
n++;
break;
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x15:
case 0x16:
case 0x17:
n += 4;
break;
}
}
if (n > 15) Cc(6);
};
n++;
if (n > 15) Cc(6);
break Ed;
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 0xb8:
case 0xb9:
case 0xc2:
case 0xc3:
case 0xc4:
case 0xc5:
case 0xc6:
case 0xc7:
default:
Cc(6);
}
break;
}
}
return n;
}
function fb(Fd, Gd, ja) {
var Hd, Id, error_code, Jd, Kd, Ld, Md, td, Nd;
if (! (wa.cr0 & (1 << 31))) {
wa.tlb_set_page(Fd & -4096, Fd & -4096, 1);
} else {
Hd = (wa.cr3 & -4096) + ((Fd >> 20) & 0xffc);
Id = wa.ld32_phys(Hd);
if (! (Id & 0x00000001)) {
error_code = 0;
} else {
if (! (Id & 0x00000020)) {
Id |= 0x00000020;
wa.st32_phys(Hd, Id);
}
Jd = (Id & -4096) + ((Fd >> 10) & 0xffc);
Kd = wa.ld32_phys(Jd);
if (! (Kd & 0x00000001)) {
error_code = 0;
} else {
Ld = Kd & Id;
if (ja && !(Ld & 0x00000004)) {
error_code = 0x01;
} else if (Gd && !(Ld & 0x00000002)) {
error_code = 0x01;
} else {
Md = (Gd && !(Kd & 0x00000040));
if (! (Kd & 0x00000020) || Md) {
Kd |= 0x00000020;
if (Md) Kd |= 0x00000040;
wa.st32_phys(Jd, Kd);
}
td = 0;
if ((Kd & 0x00000040) && (Ld & 0x00000002)) td = 1;
Nd = 0;
if (Ld & 0x00000004) Nd = 1;
wa.tlb_set_page(Fd & -4096, Kd & -4096, td, Nd);
return;
}
}
}
error_code |= Gd << 1;
error_code |= ja << 2;
wa.cr2 = Fd;
pd(14, error_code);
}
}
function Od(Pd) {
if (! (Pd & (1 << 0))) md("real mode not supported");
if ((Pd & ((1 << 31) | (1 << 16) | (1 << 0))) != (wa.cr0 & ((1 << 31) | (1 << 16) | (1 << 0)))) {
wa.tlb_flush_all();
}
wa.cr0 = Pd | (1 << 4);
}
function Qd(Rd) {
wa.cr3 = Rd;
if (wa.cr0 & (1 << 31)) {
wa.tlb_flush_all();
}
}
function Sd(Td) {
wa.cr4 = Td;
}
function Ud(Vd) {
if (Vd & (1 << 22)) return - 1;
else return 0xffff;
}
function Wd(selector) {
var sa, Rb, Xd, Vd;
if (selector & 0x4) sa = wa.ldt;
else sa = wa.gdt;
Rb = selector & ~7;
if ((Rb + 7) > sa.limit) return null;
fa = sa.base + Rb;
Xd = Cb();
fa += 4;
Vd = Cb();
return [Xd, Vd];
}
function Yd(Xd, Vd) {
var limit;
limit = (Xd & 0xffff) | (Vd & 0x000f0000);
if (Vd & (1 << 23)) limit = (limit << 12) | 0xfff;
return limit;
}
function Zd(Xd, Vd) {
return (((Xd >>> 16) | ((Vd & 0xff) << 16) | (Vd & 0xff000000))) & -1;
}
function ae(sa, Xd, Vd) {
sa.base = Zd(Xd, Vd);
sa.limit = Yd(Xd, Vd);
sa.flags = Vd;
}
function be() {
Na = wa.segs[1].base;
Oa = wa.segs[2].base;
if (wa.segs[2].flags & (1 << 22)) Pa = -1;
else Pa = 0xffff;
Qa = (((Na | Oa | wa.segs[3].base | wa.segs[0].base) == 0) && Pa == -1);
if (wa.segs[1].flags & (1 << 22)) Ra = 0;
else Ra = 0x0100 | 0x0080;
}
function ce(de, selector, base, limit, flags) {
wa.segs[de] = {
selector: selector,
base: base,
limit: limit,
flags: flags
};
be();
}
function ee(Sb, selector) {
ce(Sb, selector, (selector << 4), 0xffff, (1 << 15) | (3 << 13) | (1 << 12) | (1 << 8) | (1 << 12) | (1 << 9));
}
function fe(ge) {
var he, Rb, ie, je, ke;
if (! (wa.tr.flags & (1 << 15))) md("invalid tss");
he = (wa.tr.flags >> 8) & 0xf;
if ((he & 7) != 1) md("invalid tss type");
ie = he >> 3;
Rb = (ge * 4 + 2) << ie;
if (Rb + (4 << ie) - 1 > wa.tr.limit) pd(10, wa.tr.selector & 0xfffc);
fa = (wa.tr.base + Rb) & -1;
if (ie == 0) {
ke = Ab();
fa += 2;
} else {
ke = Cb();
fa += 4;
}
je = Ab();
return [je, ke];
}
function le(intno, me, error_code, ne, oe) {
var sa, pe, he, ge, selector, qe, re;
var se, te, ie;
var e, Xd, Vd, ue, je, ke, ve, we;
var xe, Pa;
se = 0;
if (!me && !oe) {
switch (intno) {
case 8:
case 10:
case 11:
case 12:
case 13:
case 14:
case 17:
se = 1;
break;
}
}
if (me) xe = ne;
else xe = Jb;
sa = wa.idt;
if (intno * 8 + 7 > sa.limit) pd(13, intno * 8 + 2);
fa = (sa.base + intno * 8) & -1;
Xd = Cb();
fa += 4;
Vd = Cb();
he = (Vd >> 8) & 0x1f;
switch (he) {
case 5:
case 7:
case 6:
throw "unsupported task gate";
case 14:
case 15:
break;
default:
pd(13, intno * 8 + 2);
break;
}
ge = (Vd >> 13) & 3;
re = wa.cpl;
if (me && ge < re) pd(13, intno * 8 + 2);
if (! (Vd & (1 << 15))) pd(11, intno * 8 + 2);
selector = Xd >> 16;
ue = (Vd & -65536) | (Xd & 0x0000ffff);
if ((selector & 0xfffc) == 0) pd(13, 0);
e = Wd(selector);
if (!e) pd(13, selector & 0xfffc);
Xd = e[0];
Vd = e[1];
if (! (Vd & (1 << 12)) || !(Vd & ((1 << 11)))) pd(13, selector & 0xfffc);
ge = (Vd >> 13) & 3;
if (ge > re) pd(13, selector & 0xfffc);
if (! (Vd & (1 << 15))) pd(11, selector & 0xfffc);
if (! (Vd & (1 << 10)) && ge < re) {
e = fe(ge);
je = e[0];
ke = e[1];
if ((je & 0xfffc) == 0) pd(10, je & 0xfffc);
if ((je & 3) != ge) pd(10, je & 0xfffc);
e = Wd(je);
if (!e) pd(10, je & 0xfffc);
ve = e[0];
we = e[1];
qe = (we >> 13) & 3;
if (qe != ge) pd(10, je & 0xfffc);
if (! (we & (1 << 12)) || (we & (1 << 11)) || !(we & (1 << 9))) pd(10, je & 0xfffc);
if (! (we & (1 << 15))) pd(10, je & 0xfffc);
te = 1;
Pa = Ud(we);
pe = Zd(ve, we);
} else if ((Vd & (1 << 10)) || ge == re) {
if (wa.eflags & 0x00020000) pd(13, selector & 0xfffc);
te = 0;
Pa = Ud(wa.segs[2].flags);
pe = wa.segs[2].base;
ke = xa[4];
ge = re;
} else {
pd(13, selector & 0xfffc);
te = 0;
Pa = 0;
pe = 0;
ke = 0;
}
ie = he >> 3;
if (ie == 1) {
if (te) {
if (wa.eflags & 0x00020000) {
{
ke = (ke - 4) & -1;
fa = (pe + (ke & Pa)) & -1;
Ib(wa.segs[5].selector);
}; {
ke = (ke - 4) & -1;
fa = (pe + (ke & Pa)) & -1;
Ib(wa.segs[4].selector);
}; {
ke = (ke - 4) & -1;
fa = (pe + (ke & Pa)) & -1;
Ib(wa.segs[3].selector);
}; {
ke = (ke - 4) & -1;
fa = (pe + (ke & Pa)) & -1;
Ib(wa.segs[0].selector);
};
} {
ke = (ke - 4) & -1;
fa = (pe + (ke & Pa)) & -1;
Ib(wa.segs[2].selector);
}; {
ke = (ke - 4) & -1;
fa = (pe + (ke & Pa)) & -1;
Ib(xa[4]);
};
} {
ke = (ke - 4) & -1;
fa = (pe + (ke & Pa)) & -1;
Ib(hd());
}; {
ke = (ke - 4) & -1;
fa = (pe + (ke & Pa)) & -1;
Ib(wa.segs[1].selector);
}; {
ke = (ke - 4) & -1;
fa = (pe + (ke & Pa)) & -1;
Ib(xe);
};
if (se) {
{
ke = (ke - 4) & -1;
fa = (pe + (ke & Pa)) & -1;
Ib(error_code);
};
}
} else {
if (te) {
if (wa.eflags & 0x00020000) {
{
ke = (ke - 2) & -1;
fa = (pe + (ke & Pa)) & -1;
Gb(wa.segs[5].selector);
}; {
ke = (ke - 2) & -1;
fa = (pe + (ke & Pa)) & -1;
Gb(wa.segs[4].selector);
}; {
ke = (ke - 2) & -1;
fa = (pe + (ke & Pa)) & -1;
Gb(wa.segs[3].selector);
}; {
ke = (ke - 2) & -1;
fa = (pe + (ke & Pa)) & -1;
Gb(wa.segs[0].selector);
};
} {
ke = (ke - 2) & -1;
fa = (pe + (ke & Pa)) & -1;
Gb(wa.segs[2].selector);
}; {
ke = (ke - 2) & -1;
fa = (pe + (ke & Pa)) & -1;
Gb(xa[4]);
};
} {
ke = (ke - 2) & -1;
fa = (pe + (ke & Pa)) & -1;
Gb(hd());
}; {
ke = (ke - 2) & -1;
fa = (pe + (ke & Pa)) & -1;
Gb(wa.segs[1].selector);
}; {
ke = (ke - 2) & -1;
fa = (pe + (ke & Pa)) & -1;
Gb(xe);
};
if (se) {
{
ke = (ke - 2) & -1;
fa = (pe + (ke & Pa)) & -1;
Gb(error_code);
};
}
}
if (te) {
if (wa.eflags & 0x00020000) {
ce(0, 0, 0, 0, 0);
ce(3, 0, 0, 0, 0);
ce(4, 0, 0, 0, 0);
ce(5, 0, 0, 0, 0);
}
je = (je & ~3) | ge;
ce(2, je, pe, Yd(ve, we), we);
}
xa[4] = (xa[4] & ~Pa) | ((ke) & Pa);
selector = (selector & ~3) | ge;
ce(1, selector, Zd(Xd, Vd), Yd(Xd, Vd), Vd);
qd(ge);
Jb = ue,
Kb = Mb = 0;
if ((he & 1) == 0) {
wa.eflags &= ~0x00000200;
}
wa.eflags &= ~ (0x00000100 | 0x00020000 | 0x00010000 | 0x00004000);
}
function ye(intno, me, error_code, ne, oe) {
var sa, pe, selector, ue, ke, xe;
sa = wa.idt;
if (intno * 4 + 3 > sa.limit) pd(13, intno * 8 + 2);
fa = (sa.base + (intno << 2)) >> 0;
ue = Ab();
fa = (fa + 2) >> 0;
selector = Ab();
ke = xa[4];
if (me) xe = ne;
else xe = Jb; {
ke = (ke - 2) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
ub(hd());
}; {
ke = (ke - 2) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
ub(wa.segs[1].selector);
}; {
ke = (ke - 2) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
ub(xe);
};
xa[4] = (xa[4] & ~Pa) | ((ke) & Pa);
Jb = ue,
Kb = Mb = 0;
wa.segs[1].selector = selector;
wa.segs[1].base = (selector << 4);
wa.eflags &= ~ (0x00000200 | 0x00000100 | 0x00040000 | 0x00010000);
}
function ze(intno, me, error_code, ne, oe) {
if (wa.cr0 & (1 << 0)) {
le(intno, me, error_code, ne, oe);
} else {
ye(intno, me, error_code, ne, oe);
}
}
function Ae(selector) {
var sa, Xd, Vd, Rb, Be;
selector &= 0xffff;
if ((selector & 0xfffc) == 0) {
wa.ldt.base = 0;
wa.ldt.limit = 0;
} else {
if (selector & 0x4) pd(13, selector & 0xfffc);
sa = wa.gdt;
Rb = selector & ~7;
Be = 7;
if ((Rb + Be) > sa.limit) pd(13, selector & 0xfffc);
fa = (sa.base + Rb) & -1;
Xd = Cb();
fa += 4;
Vd = Cb();
if ((Vd & (1 << 12)) || ((Vd >> 8) & 0xf) != 2) pd(13, selector & 0xfffc);
if (! (Vd & (1 << 15))) pd(11, selector & 0xfffc);
ae(wa.ldt, Xd, Vd);
}
wa.ldt.selector = selector;
}
function Ce(selector) {
var sa, Xd, Vd, Rb, he, Be;
selector &= 0xffff;
if ((selector & 0xfffc) == 0) {
wa.tr.base = 0;
wa.tr.limit = 0;
wa.tr.flags = 0;
} else {
if (selector & 0x4) pd(13, selector & 0xfffc);
sa = wa.gdt;
Rb = selector & ~7;
Be = 7;
if ((Rb + Be) > sa.limit) pd(13, selector & 0xfffc);
fa = (sa.base + Rb) & -1;
Xd = Cb();
fa += 4;
Vd = Cb();
he = (Vd >> 8) & 0xf;
if ((Vd & (1 << 12)) || (he != 1 && he != 9)) pd(13, selector & 0xfffc);
if (! (Vd & (1 << 15))) pd(11, selector & 0xfffc);
ae(wa.tr, Xd, Vd);
Vd |= (1 << 9);
Ib(Vd);
}
wa.tr.selector = selector;
}
function De(Ee, selector) {
var Xd, Vd, re, ge, Fe, sa, Rb;
re = wa.cpl;
if ((selector & 0xfffc) == 0) {
if (Ee == 2) pd(13, 0);
ce(Ee, selector, 0, 0, 0);
} else {
if (selector & 0x4) sa = wa.ldt;
else sa = wa.gdt;
Rb = selector & ~7;
if ((Rb + 7) > sa.limit) pd(13, selector & 0xfffc);
fa = (sa.base + Rb) & -1;
Xd = Cb();
fa += 4;
Vd = Cb();
if (! (Vd & (1 << 12))) pd(13, selector & 0xfffc);
Fe = selector & 3;
ge = (Vd >> 13) & 3;
if (Ee == 2) {
if ((Vd & (1 << 11)) || !(Vd & (1 << 9))) pd(13, selector & 0xfffc);
if (Fe != re || ge != re) pd(13, selector & 0xfffc);
} else {
if ((Vd & ((1 << 11) | (1 << 9))) == (1 << 11)) pd(13, selector & 0xfffc);
if (! (Vd & (1 << 11)) || !(Vd & (1 << 10))) {
if (ge < re || ge < Fe) pd(13, selector & 0xfffc);
}
}
if (! (Vd & (1 << 15))) {
if (Ee == 2) pd(12, selector & 0xfffc);
else pd(11, selector & 0xfffc);
}
if (! (Vd & (1 << 8))) {
Vd |= (1 << 8);
Ib(Vd);
}
ce(Ee, selector, Zd(Xd, Vd), Yd(Xd, Vd), Vd);
}
}
function Ge(Ee, selector) {
var sa;
selector &= 0xffff;
if (! (wa.cr0 & (1 << 0))) {
sa = wa.segs[Ee];
sa.selector = selector;
sa.base = selector << 4;
} else if (wa.eflags & 0x00020000) {
ee(Ee, selector);
} else {
De(Ee, selector);
}
}
function He(Ie, Je) {
Jb = Je,
Kb = Mb = 0;
wa.segs[1].selector = Ie;
wa.segs[1].base = (Ie << 4);
be();
}
function Ke(Ie, Je) {
var Le, he, Xd, Vd, re, ge, Fe, limit, e;
if ((Ie & 0xfffc) == 0) pd(13, 0);
e = Wd(Ie);
if (!e) pd(13, Ie & 0xfffc);
Xd = e[0];
Vd = e[1];
re = wa.cpl;
if (Vd & (1 << 12)) {
if (! (Vd & (1 << 11))) pd(13, Ie & 0xfffc);
ge = (Vd >> 13) & 3;
if (Vd & (1 << 10)) {
if (ge > re) pd(13, Ie & 0xfffc);
} else {
Fe = Ie & 3;
if (Fe > re) pd(13, Ie & 0xfffc);
if (ge != re) pd(13, Ie & 0xfffc);
}
if (! (Vd & (1 << 15))) pd(11, Ie & 0xfffc);
limit = Yd(Xd, Vd);
if ((Je >>> 0) > (limit >>> 0)) pd(13, Ie & 0xfffc);
ce(1, (Ie & 0xfffc) | re, Zd(Xd, Vd), limit, Vd);
Jb = Je,
Kb = Mb = 0;
} else {
md("unsupported jump to call or task gate");
}
}
function Me(Ie, Je) {
if (! (wa.cr0 & (1 << 0)) || (wa.eflags & 0x00020000)) {
He(Ie, Je);
} else {
Ke(Ie, Je);
}
}
function Ne(Ee, re) {
var ge, Vd;
if ((Ee == 4 || Ee == 5) && (wa.segs[Ee].selector & 0xfffc) == 0) return;
Vd = wa.segs[Ee].flags;
ge = (Vd >> 13) & 3;
if (! (Vd & (1 << 11)) || !(Vd & (1 << 10))) {
if (ge < re) {
ce(Ee, 0, 0, 0, 0);
}
}
}
function Oe(ie, Ie, Je, ne) {
var ke;
ke = xa[4];
if (ie) {
{
ke = (ke - 4) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
wb(wa.segs[1].selector);
}; {
ke = (ke - 4) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
wb(ne);
};
} else {
{
ke = (ke - 2) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
ub(wa.segs[1].selector);
}; {
ke = (ke - 2) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
ub(ne);
};
}
xa[4] = (xa[4] & ~Pa) | ((ke) & Pa);
Jb = Je,
Kb = Mb = 0;
wa.segs[1].selector = Ie;
wa.segs[1].base = (Ie << 4);
be();
}
function Pe(ie, Ie, Je, ne) {
var te, i, e;
var Xd, Vd, re, ge, Fe, selector, ue, Qe;
var je, ve, we, Re, he, qe, Pa;
var ga, limit, Se;
var pe, Te, Ue;
if ((Ie & 0xfffc) == 0) pd(13, 0);
e = Wd(Ie);
if (!e) pd(13, Ie & 0xfffc);
Xd = e[0];
Vd = e[1];
re = wa.cpl;
Ue = xa[4];
if (Vd & (1 << 12)) {
if (! (Vd & (1 << 11))) pd(13, Ie & 0xfffc);
ge = (Vd >> 13) & 3;
if (Vd & (1 << 10)) {
if (ge > re) pd(13, Ie & 0xfffc);
} else {
Fe = Ie & 3;
if (Fe > re) pd(13, Ie & 0xfffc);
if (ge != re) pd(13, Ie & 0xfffc);
}
if (! (Vd & (1 << 15))) pd(11, Ie & 0xfffc); {
Re = Ue;
Pa = Ud(wa.segs[2].flags);
pe = wa.segs[2].base;
if (ie) {
{
Re = (Re - 4) & -1;
fa = (pe + (Re & Pa)) & -1;
Ib(wa.segs[1].selector);
}; {
Re = (Re - 4) & -1;
fa = (pe + (Re & Pa)) & -1;
Ib(ne);
};
} else {
{
Re = (Re - 2) & -1;
fa = (pe + (Re & Pa)) & -1;
Gb(wa.segs[1].selector);
}; {
Re = (Re - 2) & -1;
fa = (pe + (Re & Pa)) & -1;
Gb(ne);
};
}
limit = Yd(Xd, Vd);
if (Je > limit) pd(13, Ie & 0xfffc);
xa[4] = (xa[4] & ~Pa) | ((Re) & Pa);
ce(1, (Ie & 0xfffc) | re, Zd(Xd, Vd), limit, Vd);
Jb = Je,
Kb = Mb = 0;
}
} else {
he = (Vd >> 8) & 0x1f;
ge = (Vd >> 13) & 3;
Fe = Ie & 3;
switch (he) {
case 1:
case 9:
case 5:
throw "unsupported task gate";
return;
case 4:
case 12:
break;
default:
pd(13, Ie & 0xfffc);
break;
}
ie = he >> 3;
if (ge < re || ge < Fe) pd(13, Ie & 0xfffc);
if (! (Vd & (1 << 15))) pd(11, Ie & 0xfffc);
selector = Xd >> 16;
ue = (Vd & 0xffff0000) | (Xd & 0x0000ffff);
Qe = Vd & 0x1f;
if ((selector & 0xfffc) == 0) pd(13, 0);
e = Wd(selector);
if (!e) pd(13, selector & 0xfffc);
Xd = e[0];
Vd = e[1];
if (! (Vd & (1 << 12)) || !(Vd & ((1 << 11)))) pd(13, selector & 0xfffc);
ge = (Vd >> 13) & 3;
if (ge > re) pd(13, selector & 0xfffc);
if (! (Vd & (1 << 15))) pd(11, selector & 0xfffc);
if (! (Vd & (1 << 10)) && ge < re) {
e = fe(ge);
je = e[0];
Re = e[1];
if ((je & 0xfffc) == 0) pd(10, je & 0xfffc);
if ((je & 3) != ge) pd(10, je & 0xfffc);
e = Wd(je);
if (!e) pd(10, je & 0xfffc);
ve = e[0];
we = e[1];
qe = (we >> 13) & 3;
if (qe != ge) pd(10, je & 0xfffc);
if (! (we & (1 << 12)) || (we & (1 << 11)) || !(we & (1 << 9))) pd(10, je & 0xfffc);
if (! (we & (1 << 15))) pd(10, je & 0xfffc);
Se = Ud(wa.segs[2].flags);
Te = wa.segs[2].base;
Pa = Ud(we);
pe = Zd(ve, we);
if (ie) {
{
Re = (Re - 4) & -1;
fa = (pe + (Re & Pa)) & -1;
Ib(wa.segs[2].selector);
}; {
Re = (Re - 4) & -1;
fa = (pe + (Re & Pa)) & -1;
Ib(Ue);
};
for (i = Qe - 1; i >= 0; i--) {
ga = Cb(Te + ((Ue + i * 4) & Se)); {
Re = (Re - 4) & -1;
fa = (pe + (Re & Pa)) & -1;
Ib(ga);
};
}
} else {
{
Re = (Re - 2) & -1;
fa = (pe + (Re & Pa)) & -1;
Gb(wa.segs[2].selector);
}; {
Re = (Re - 2) & -1;
fa = (pe + (Re & Pa)) & -1;
Gb(Ue);
};
for (i = Qe - 1; i >= 0; i--) {
ga = Ab(Te + ((Ue + i * 2) & Se)); {
Re = (Re - 2) & -1;
fa = (pe + (Re & Pa)) & -1;
Gb(ga);
};
}
}
te = 1;
} else {
Re = Ue;
Pa = Ud(wa.segs[2].flags);
pe = wa.segs[2].base;
te = 0;
}
if (ie) {
{
Re = (Re - 4) & -1;
fa = (pe + (Re & Pa)) & -1;
Ib(wa.segs[1].selector);
}; {
Re = (Re - 4) & -1;
fa = (pe + (Re & Pa)) & -1;
Ib(ne);
};
} else {
{
Re = (Re - 2) & -1;
fa = (pe + (Re & Pa)) & -1;
Gb(wa.segs[1].selector);
}; {
Re = (Re - 2) & -1;
fa = (pe + (Re & Pa)) & -1;
Gb(ne);
};
}
if (te) {
je = (je & ~3) | ge;
ce(2, je, pe, Yd(ve, we), we);
}
selector = (selector & ~3) | ge;
ce(1, selector, Zd(Xd, Vd), Yd(Xd, Vd), Vd);
qd(ge);
xa[4] = (xa[4] & ~Pa) | ((Re) & Pa);
Jb = ue,
Kb = Mb = 0;
}
}
function Ve(ie, Ie, Je, ne) {
if (! (wa.cr0 & (1 << 0)) || (wa.eflags & 0x00020000)) {
Oe(ie, Ie, Je, ne);
} else {
Pe(ie, Ie, Je, ne);
}
}
function We(ie, Xe, Ye) {
var Re, Ie, Je, Ze, Pa, pe, af;
Pa = 0xffff;
Re = xa[4];
pe = wa.segs[2].base;
if (ie == 1) {
{
fa = (pe + (Re & Pa)) & -1;
Je = Cb();
Re = (Re + 4) & -1;
}; {
fa = (pe + (Re & Pa)) & -1;
Ie = Cb();
Re = (Re + 4) & -1;
};
Ie &= 0xffff;
if (Xe) {
fa = (pe + (Re & Pa)) & -1;
Ze = Cb();
Re = (Re + 4) & -1;
};
} else {
{
fa = (pe + (Re & Pa)) & -1;
Je = Ab();
Re = (Re + 2) & -1;
}; {
fa = (pe + (Re & Pa)) & -1;
Ie = Ab();
Re = (Re + 2) & -1;
};
if (Xe) {
fa = (pe + (Re & Pa)) & -1;
Ze = Ab();
Re = (Re + 2) & -1;
};
}
xa[4] = (xa[4] & ~Pa) | ((Re + Ye) & Pa);
wa.segs[1].selector = Ie;
wa.segs[1].base = (Ie << 4);
Jb = Je,
Kb = Mb = 0;
if (Xe) {
if (wa.eflags & 0x00020000) af = 0x00000100 | 0x00040000 | 0x00200000 | 0x00000200 | 0x00010000 | 0x00004000;
else af = 0x00000100 | 0x00040000 | 0x00200000 | 0x00000200 | 0x00003000 | 0x00010000 | 0x00004000;
if (ie == 0) af &= 0xffff;
jd(Ze, af);
}
be();
}
function bf(ie, Xe, Ye) {
var Ie, Ze, cf;
var df, ef, ff, gf;
var e, Xd, Vd, ve, we;
var re, ge, Fe, af, Sa;
var pe, Re, Je, vd, Pa;
Pa = Ud(wa.segs[2].flags);
Re = xa[4];
pe = wa.segs[2].base;
Ze = 0;
if (ie == 1) {
{
fa = (pe + (Re & Pa)) & -1;
Je = Cb();
Re = (Re + 4) & -1;
}; {
fa = (pe + (Re & Pa)) & -1;
Ie = Cb();
Re = (Re + 4) & -1;
};
Ie &= 0xffff;
if (Xe) {
{
fa = (pe + (Re & Pa)) & -1;
Ze = Cb();
Re = (Re + 4) & -1;
};
if (Ze & 0x00020000) {
{
fa = (pe + (Re & Pa)) & -1;
vd = Cb();
Re = (Re + 4) & -1;
}; {
fa = (pe + (Re & Pa)) & -1;
cf = Cb();
Re = (Re + 4) & -1;
}; {
fa = (pe + (Re & Pa)) & -1;
df = Cb();
Re = (Re + 4) & -1;
}; {
fa = (pe + (Re & Pa)) & -1;
ef = Cb();
Re = (Re + 4) & -1;
}; {
fa = (pe + (Re & Pa)) & -1;
ff = Cb();
Re = (Re + 4) & -1;
}; {
fa = (pe + (Re & Pa)) & -1;
gf = Cb();
Re = (Re + 4) & -1;
};
jd(Ze, 0x00000100 | 0x00040000 | 0x00200000 | 0x00000200 | 0x00003000 | 0x00020000 | 0x00004000 | 0x00080000 | 0x00100000);
ee(1, Ie & 0xffff);
qd(3);
ee(2, cf & 0xffff);
ee(0, df & 0xffff);
ee(3, ef & 0xffff);
ee(4, ff & 0xffff);
ee(5, gf & 0xffff);
Jb = Je & 0xffff,
Kb = Mb = 0;
xa[4] = (xa[4] & ~Pa) | ((vd) & Pa);
return;
}
}
} else {
{
fa = (pe + (Re & Pa)) & -1;
Je = Ab();
Re = (Re + 2) & -1;
}; {
fa = (pe + (Re & Pa)) & -1;
Ie = Ab();
Re = (Re + 2) & -1;
};
if (Xe) {
fa = (pe + (Re & Pa)) & -1;
Ze = Ab();
Re = (Re + 2) & -1;
};
}
if ((Ie & 0xfffc) == 0) pd(13, Ie & 0xfffc);
e = Wd(Ie);
if (!e) pd(13, Ie & 0xfffc);
Xd = e[0];
Vd = e[1];
if (! (Vd & (1 << 12)) || !(Vd & (1 << 11))) pd(13, Ie & 0xfffc);
re = wa.cpl;
Fe = Ie & 3;
if (Fe < re) pd(13, Ie & 0xfffc);
ge = (Vd >> 13) & 3;
if (Vd & (1 << 10)) {
if (ge > Fe) pd(13, Ie & 0xfffc);
} else {
if (ge != Fe) pd(13, Ie & 0xfffc);
}
if (! (Vd & (1 << 15))) pd(11, Ie & 0xfffc);
Re = (Re + Ye) & -1;
if (Fe == re) {
ce(1, Ie, Zd(Xd, Vd), Yd(Xd, Vd), Vd);
} else {
if (ie == 1) {
{
fa = (pe + (Re & Pa)) & -1;
vd = Cb();
Re = (Re + 4) & -1;
}; {
fa = (pe + (Re & Pa)) & -1;
cf = Cb();
Re = (Re + 4) & -1;
};
cf &= 0xffff;
} else {
{
fa = (pe + (Re & Pa)) & -1;
vd = Ab();
Re = (Re + 2) & -1;
}; {
fa = (pe + (Re & Pa)) & -1;
cf = Ab();
Re = (Re + 2) & -1;
};
}
if ((cf & 0xfffc) == 0) {
pd(13, 0);
} else {
if ((cf & 3) != Fe) pd(13, cf & 0xfffc);
e = Wd(cf);
if (!e) pd(13, cf & 0xfffc);
ve = e[0];
we = e[1];
if (! (we & (1 << 12)) || (we & (1 << 11)) || !(we & (1 << 9))) pd(13, cf & 0xfffc);
ge = (we >> 13) & 3;
if (ge != Fe) pd(13, cf & 0xfffc);
if (! (we & (1 << 15))) pd(11, cf & 0xfffc);
ce(2, cf, Zd(ve, we), Yd(ve, we), we);
}
ce(1, Ie, Zd(Xd, Vd), Yd(Xd, Vd), Vd);
qd(Fe);
Re = vd;
Pa = Ud(we);
Ne(0, Fe);
Ne(3, Fe);
Ne(4, Fe);
Ne(5, Fe);
Re = (Re + Ye) & -1;
}
xa[4] = (xa[4] & ~Pa) | ((Re) & Pa);
Jb = Je,
Kb = Mb = 0;
if (Xe) {
af = 0x00000100 | 0x00040000 | 0x00200000 | 0x00010000 | 0x00004000;
if (re == 0) af |= 0x00003000;
Sa = (wa.eflags >> 12) & 3;
if (re <= Sa) af |= 0x00000200;
if (ie == 0) af &= 0xffff;
jd(Ze, af);
}
}
function hf(ie) {
var Sa;
if (! (wa.cr0 & (1 << 0)) || (wa.eflags & 0x00020000)) {
if (wa.eflags & 0x00020000) {
Sa = (wa.eflags >> 12) & 3;
if (Sa != 3) Cc(13);
}
We(ie, 1, 0);
} else {
if (wa.eflags & 0x00004000) {
throw "unsupported task gate";
} else {
bf(ie, 1, 0);
}
}
}
function jf(ie, Ye) {
if (! (wa.cr0 & (1 << 0)) || (wa.eflags & 0x00020000)) {
We(ie, 0, Ye);
} else {
bf(ie, 0, Ye);
}
}
function kf(selector, lf) {
var e, Xd, Vd, Fe, ge, re, he;
if ((selector & 0xfffc) == 0) return null;
e = Wd(selector);
if (!e) return null;
Xd = e[0];
Vd = e[1];
Fe = selector & 3;
ge = (Vd >> 13) & 3;
re = wa.cpl;
if (Vd & (1 << 12)) {
if ((Vd & (1 << 11)) && (Vd & (1 << 10))) {} else {
if (ge < re || ge < Fe) return null;
}
} else {
he = (Vd >> 8) & 0xf;
switch (he) {
case 1:
case 2:
case 3:
case 9:
case 11:
break;
case 4:
case 5:
case 12:
if (lf) return null;
break;
default:
return null;
}
if (ge < re || ge < Fe) return null;
}
if (lf) {
return Yd(Xd, Vd);
} else {
return Vd & 0x00f0ff00;
}
}
function mf(ie, lf) {
var ga, Ea, Ga, selector;
if (! (wa.cr0 & (1 << 0)) || (wa.eflags & 0x00020000)) Cc(6);
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
selector = xa[Ea & 7] & 0xffff;
} else {
fa = Pb(Ea);
selector = ib();
}
ga = kf(selector, lf);
ya = gd();
if (ga === null) {
ya &= ~0x0040;
} else {
ya |= 0x0040;
if (ie) xa[Ga] = ga;
else Wb(Ga, ga);
}
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
function nf(selector, td) {
var e, Xd, Vd, Fe, ge, re;
if ((selector & 0xfffc) == 0) return 0;
e = Wd(selector);
if (!e) return 0;
Xd = e[0];
Vd = e[1];
if (! (Vd & (1 << 12))) return 0;
Fe = selector & 3;
ge = (Vd >> 13) & 3;
re = wa.cpl;
if (Vd & (1 << 11)) {
if (td) {
return 0;
} else {
if (! (Vd & (1 << 9))) return 1;
if (! (Vd & (1 << 10))) {
if (ge < re || ge < Fe) return 0;
}
}
} else {
if (ge < re || ge < Fe) return 0;
if (td && !(Vd & (1 << 9))) return 0;
}
return 1;
}
function of(selector, td) {
var z;
z = nf(selector, td);
ya = gd();
if (z) ya |= 0x0040;
else ya &= ~0x0040;
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
function pf() {
var Ea, ga, Ha, Fa;
if (! (wa.cr0 & (1 << 0)) || (wa.eflags & 0x00020000)) Cc(6);
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = xa[Fa] & 0xffff;
} else {
fa = Pb(Ea);
ga = ob();
}
Ha = xa[(Ea >> 3) & 7];
ya = gd();
if ((ga & 3) < (Ha & 3)) {
ga = (ga & ~3) | (Ha & 3);
if ((Ea >> 6) == 3) {
Wb(Fa, ga);
} else {
ub(ga);
}
ya |= 0x0040;
} else {
ya &= ~0x0040;
}
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
function qf() {
var Rb;
Rb = xa[0];
switch (Rb) {
case 0:
xa[0] = 1;
xa[3] = 0x756e6547 & -1;
xa[2] = 0x49656e69 & -1;
xa[1] = 0x6c65746e & -1;
break;
case 1:
default:
xa[0] = (5 << 8) | (4 << 4) | 3;
xa[3] = 8 << 8;
xa[1] = 0;
xa[2] = (1 << 4);
break;
}
}
function rf(base) {
var sf, tf;
if (base == 0) Cc(0);
sf = xa[0] & 0xff;
tf = (sf / base) & -1;
sf = (sf % base);
xa[0] = (xa[0] & ~0xffff) | sf | (tf << 8);
za = (((sf) << 24) >> 24);
Aa = 12;
}
function uf(base) {
var sf, tf;
sf = xa[0] & 0xff;
tf = (xa[0] >> 8) & 0xff;
sf = (tf * base + sf) & 0xff;
xa[0] = (xa[0] & ~0xffff) | sf;
za = (((sf) << 24) >> 24);
Aa = 12;
}
function vf() {
var wf, sf, tf, xf, id;
id = gd();
xf = id & 0x0010;
sf = xa[0] & 0xff;
tf = (xa[0] >> 8) & 0xff;
wf = (sf > 0xf9);
if (((sf & 0x0f) > 9) || xf) {
sf = (sf + 6) & 0x0f;
tf = (tf + 1 + wf) & 0xff;
id |= 0x0001 | 0x0010;
} else {
id &= ~ (0x0001 | 0x0010);
sf &= 0x0f;
}
xa[0] = (xa[0] & ~0xffff) | sf | (tf << 8);
ya = id;
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
function yf() {
var wf, sf, tf, xf, id;
id = gd();
xf = id & 0x0010;
sf = xa[0] & 0xff;
tf = (xa[0] >> 8) & 0xff;
wf = (sf < 6);
if (((sf & 0x0f) > 9) || xf) {
sf = (sf - 6) & 0x0f;
tf = (tf - 1 - wf) & 0xff;
id |= 0x0001 | 0x0010;
} else {
id &= ~ (0x0001 | 0x0010);
sf &= 0x0f;
}
xa[0] = (xa[0] & ~0xffff) | sf | (tf << 8);
ya = id;
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
function zf() {
var sf, xf, Af, id;
id = gd();
Af = id & 0x0001;
xf = id & 0x0010;
sf = xa[0] & 0xff;
id = 0;
if (((sf & 0x0f) > 9) || xf) {
sf = (sf + 6) & 0xff;
id |= 0x0010;
}
if ((sf > 0x9f) || Af) {
sf = (sf + 0x60) & 0xff;
id |= 0x0001;
}
xa[0] = (xa[0] & ~0xff) | sf;
id |= (sf == 0) << 6;
id |= aa[sf] << 2;
id |= (sf & 0x80);
ya = id;
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
function Bf() {
var sf, Cf, xf, Af, id;
id = gd();
Af = id & 0x0001;
xf = id & 0x0010;
sf = xa[0] & 0xff;
id = 0;
Cf = sf;
if (((sf & 0x0f) > 9) || xf) {
id |= 0x0010;
if (sf < 6 || Af) id |= 0x0001;
sf = (sf - 6) & 0xff;
}
if ((Cf > 0x99) || Af) {
sf = (sf - 0x60) & 0xff;
id |= 0x0001;
}
xa[0] = (xa[0] & ~0xff) | sf;
id |= (sf == 0) << 6;
id |= aa[sf] << 2;
id |= (sf & 0x80);
ya = id;
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
}
function Df() {
var Ea, ga, Ha, Ia;
Ea = Ta[Kb++];;
if ((Ea >> 3) == 3) Cc(6);
fa = Pb(Ea);
ga = kb();
fa = (fa + 4) & -1;
Ha = kb();
Ga = (Ea >> 3) & 7;
Ia = xa[Ga];
if (Ia < ga || Ia > Ha) Cc(5);
}
function Ef() {
var Ea, ga, Ha, Ia;
Ea = Ta[Kb++];;
if ((Ea >> 3) == 3) Cc(6);
fa = Pb(Ea);
ga = (ib() << 16) >> 16;
fa = (fa + 2) & -1;
Ha = (ib() << 16) >> 16;
Ga = (Ea >> 3) & 7;
Ia = (xa[Ga] << 16) >> 16;
if (Ia < ga || Ia > Ha) Cc(5);
}
function Ff() {
var ga, Ha, Ga;
Ha = (xa[4] - 16) >> 0;
fa = ((Ha & Pa) + Oa) >> 0;
for (Ga = 7; Ga >= 0; Ga--) {
ga = xa[Ga];
ub(ga);
fa = (fa + 2) >> 0;
}
xa[4] = (xa[4] & ~Pa) | ((Ha) & Pa);
}
function Gf() {
var ga, Ha, Ga;
Ha = (xa[4] - 32) >> 0;
fa = ((Ha & Pa) + Oa) >> 0;
for (Ga = 7; Ga >= 0; Ga--) {
ga = xa[Ga];
wb(ga);
fa = (fa + 4) >> 0;
}
xa[4] = (xa[4] & ~Pa) | ((Ha) & Pa);
}
function Hf() {
var Ga;
fa = ((xa[4] & Pa) + Oa) >> 0;
for (Ga = 7; Ga >= 0; Ga--) {
if (Ga != 4) {
Wb(Ga, ib());
}
fa = (fa + 2) >> 0;
}
xa[4] = (xa[4] & ~Pa) | ((xa[4] + 16) & Pa);
}
function If() {
var Ga;
fa = ((xa[4] & Pa) + Oa) >> 0;
for (Ga = 7; Ga >= 0; Ga--) {
if (Ga != 4) {
xa[Ga] = kb();
}
fa = (fa + 4) >> 0;
}
xa[4] = (xa[4] & ~Pa) | ((xa[4] + 32) & Pa);
}
function Jf() {
var ga, Ha;
Ha = xa[5];
fa = ((Ha & Pa) + Oa) >> 0;
ga = ib();
Wb(5, ga);
xa[4] = (xa[4] & ~Pa) | ((Ha + 2) & Pa);
}
function Kf() {
var ga, Ha;
Ha = xa[5];
fa = ((Ha & Pa) + Oa) >> 0;
ga = kb();
xa[5] = ga;
xa[4] = (xa[4] & ~Pa) | ((Ha + 4) & Pa);
}
function Lf() {
var Ye, Mf, ke, Nf, ga, Of;
Ye = Ob();
Mf = Ta[Kb++];;
Mf &= 0x1f;
ke = xa[4];
Nf = xa[5]; {
ke = (ke - 2) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
ub(Nf);
};
Of = ke;
if (Mf != 0) {
while (Mf > 1) {
Nf = (Nf - 2) >> 0;
fa = ((Nf & Pa) + Oa) >> 0;
ga = ib(); {
ke = (ke - 2) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
ub(ga);
};
Mf--;
} {
ke = (ke - 2) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
ub(Of);
};
}
ke = (ke - Ye) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
ob();
xa[5] = (xa[5] & ~Pa) | (Of & Pa);
xa[4] = ke;
}
function Pf() {
var Ye, Mf, ke, Nf, ga, Of;
Ye = Ob();
Mf = Ta[Kb++];;
Mf &= 0x1f;
ke = xa[4];
Nf = xa[5]; {
ke = (ke - 4) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
wb(Nf);
};
Of = ke;
if (Mf != 0) {
while (Mf > 1) {
Nf = (Nf - 4) >> 0;
fa = ((Nf & Pa) + Oa) >> 0;
ga = kb(); {
ke = (ke - 4) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
wb(ga);
};
Mf--;
} {
ke = (ke - 4) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
wb(Of);
};
}
ke = (ke - Ye) >> 0;
fa = ((ke & Pa) + Oa) >> 0;
qb();
xa[5] = (xa[5] & ~Pa) | (Of & Pa);
xa[4] = (xa[4] & ~Pa) | ((ke) & Pa);
}
function Qf(Sb) {
var ga, Ha, Ea;
Ea = Ta[Kb++];;
if ((Ea >> 3) == 3) Cc(6);
fa = Pb(Ea);
ga = kb();
fa += 4;
Ha = ib();
Ge(Sb, Ha);
xa[(Ea >> 3) & 7] = ga;
}
function Rf(Sb) {
var ga, Ha, Ea;
Ea = Ta[Kb++];;
if ((Ea >> 3) == 3) Cc(6);
fa = Pb(Ea);
ga = ib();
fa += 2;
Ha = ib();
Ge(Sb, Ha);
Wb((Ea >> 3) & 7, ga);
}
function Sf() {
var Tf, Uf, Vf, Wf, Sa, ga;
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Uf = xa[7];
Vf = xa[2] & 0xffff;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;; {
ga = wa.ld8_port(Vf);
fa = ((Uf & Tf) + wa.segs[0].base) >> 0;
sb(ga);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 0)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
}
} else {
ga = wa.ld8_port(Vf);
fa = ((Uf & Tf) + wa.segs[0].base) >> 0;
sb(ga);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 0)) & Tf);
}
}
function Xf() {
var Tf, Yf, Sb, Wf, Vf, Sa, ga;
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Sb = Da & 0x000f;
if (Sb == 0) Sb = 3;
else Sb--;
Yf = xa[6];
Vf = xa[2] & 0xffff;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
ga = gb();
wa.st8_port(Vf, ga);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 0)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
} else {
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
ga = gb();
wa.st8_port(Vf, ga);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 0)) & Tf);
}
}
function Zf() {
var Tf, Uf, Yf, Wf, Sb, ag;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Sb = Da & 0x000f;
if (Sb == 0) Sb = 3;
else Sb--;
Yf = xa[6];
Uf = xa[7];
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
ag = ((Uf & Tf) + wa.segs[0].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;; {
ga = gb();
fa = ag;
sb(ga);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 0)) & Tf);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 0)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
}
} else {
ga = gb();
fa = ag;
sb(ga);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 0)) & Tf);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 0)) & Tf);
}
}
function bg() {
var Tf, Uf, Wf;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Uf = xa[7];
fa = ((Uf & Tf) + wa.segs[0].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;; {
sb(xa[0]);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 0)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
}
} else {
sb(xa[0]);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 0)) & Tf);
}
}
function cg() {
var Tf, Uf, Yf, Wf, Sb, ag;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Sb = Da & 0x000f;
if (Sb == 0) Sb = 3;
else Sb--;
Yf = xa[6];
Uf = xa[7];
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
ag = ((Uf & Tf) + wa.segs[0].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
ga = gb();
fa = ag;
Ha = gb();
fc(7, ga, Ha);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 0)) & Tf);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 0)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Da & 0x0010) {
if (! (za == 0)) return;
} else {
if ((za == 0)) return;
}
if (Wf & Tf) Kb = Mb;;
} else {
ga = gb();
fa = ag;
Ha = gb();
fc(7, ga, Ha);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 0)) & Tf);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 0)) & Tf);
}
}
function dg() {
var Tf, Yf, Sb, Wf, ga;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Sb = Da & 0x000f;
if (Sb == 0) Sb = 3;
else Sb--;
Yf = xa[6];
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
ga = gb();
xa[0] = (xa[0] & -256) | ga;
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 0)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
} else {
ga = gb();
xa[0] = (xa[0] & -256) | ga;
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 0)) & Tf);
}
}
function eg() {
var Tf, Uf, Wf, ga;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Uf = xa[7];
fa = ((Uf & Tf) + wa.segs[0].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
ga = gb();
fc(7, xa[0], ga);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 0)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Da & 0x0010) {
if (! (za == 0)) return;
} else {
if ((za == 0)) return;
}
if (Wf & Tf) Kb = Mb;;
} else {
ga = gb();
fc(7, xa[0], ga);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 0)) & Tf);
}
}
function fg() {
var Tf, Uf, Vf, Wf, Sa, ga;
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Uf = xa[7];
Vf = xa[2] & 0xffff;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;; {
ga = wa.ld16_port(Vf);
fa = ((Uf & Tf) + wa.segs[0].base) >> 0;
ub(ga);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 1)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
}
} else {
ga = wa.ld16_port(Vf);
fa = ((Uf & Tf) + wa.segs[0].base) >> 0;
ub(ga);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 1)) & Tf);
}
}
function gg() {
var Tf, Yf, Sb, Wf, Vf, Sa, ga;
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Sb = Da & 0x000f;
if (Sb == 0) Sb = 3;
else Sb--;
Yf = xa[6];
Vf = xa[2] & 0xffff;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
ga = ib();
wa.st16_port(Vf, ga);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 1)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
} else {
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
ga = ib();
wa.st16_port(Vf, ga);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 1)) & Tf);
}
}
function hg() {
var Tf, Uf, Yf, Wf, Sb, ag;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Sb = Da & 0x000f;
if (Sb == 0) Sb = 3;
else Sb--;
Yf = xa[6];
Uf = xa[7];
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
ag = ((Uf & Tf) + wa.segs[0].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;; {
ga = ib();
fa = ag;
ub(ga);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 1)) & Tf);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 1)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
}
} else {
ga = ib();
fa = ag;
ub(ga);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 1)) & Tf);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 1)) & Tf);
}
}
function ig() {
var Tf, Uf, Wf;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Uf = xa[7];
fa = ((Uf & Tf) + wa.segs[0].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;; {
ub(xa[0]);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 1)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
}
} else {
ub(xa[0]);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 1)) & Tf);
}
}
function jg() {
var Tf, Uf, Yf, Wf, Sb, ag;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Sb = Da & 0x000f;
if (Sb == 0) Sb = 3;
else Sb--;
Yf = xa[6];
Uf = xa[7];
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
ag = ((Uf & Tf) + wa.segs[0].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
ga = ib();
fa = ag;
Ha = ib();
cc(7, ga, Ha);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 1)) & Tf);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 1)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Da & 0x0010) {
if (! (za == 0)) return;
} else {
if ((za == 0)) return;
}
if (Wf & Tf) Kb = Mb;;
} else {
ga = ib();
fa = ag;
Ha = ib();
cc(7, ga, Ha);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 1)) & Tf);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 1)) & Tf);
}
}
function kg() {
var Tf, Yf, Sb, Wf, ga;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Sb = Da & 0x000f;
if (Sb == 0) Sb = 3;
else Sb--;
Yf = xa[6];
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
ga = ib();
xa[0] = (xa[0] & -65536) | ga;
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 1)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
} else {
ga = ib();
xa[0] = (xa[0] & -65536) | ga;
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 1)) & Tf);
}
}
function lg() {
var Tf, Uf, Wf, ga;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Uf = xa[7];
fa = ((Uf & Tf) + wa.segs[0].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
ga = ib();
cc(7, xa[0], ga);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 1)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Da & 0x0010) {
if (! (za == 0)) return;
} else {
if ((za == 0)) return;
}
if (Wf & Tf) Kb = Mb;;
} else {
ga = ib();
cc(7, xa[0], ga);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 1)) & Tf);
}
}
function mg() {
var Tf, Uf, Vf, Wf, Sa, ga;
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Uf = xa[7];
Vf = xa[2] & 0xffff;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
if (Tf == -1 && wa.df == 1 && (fa & 3) == 0) {
var ng, l, og, i, pg, ga, qg;
ng = Wf >>> 0;
l = (4096 - (fa & 0xfff)) >> 2;
if (ng > l) ng = l;
og = sd(xa[7], 1);
qg = wa.ld32_port;
og >>= 2;
for (i = 0; i < ng; i++) {
ga = qg(Vf);
Wa[og + i] = ga;
}
pg = ng << 2;
xa[7] = (Uf + pg) >> 0;
xa[1] = Wf = (Wf - ng) >> 0;
if (Wf) Kb = Mb;
} else {
ga = wa.ld32_port(Vf);
fa = ((Uf & Tf) + wa.segs[0].base) >> 0;
wb(ga);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 2)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
}
} else {
ga = wa.ld32_port(Vf);
fa = ((Uf & Tf) + wa.segs[0].base) >> 0;
wb(ga);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 2)) & Tf);
}
}
function rg() {
var Tf, Yf, Sb, Wf, Vf, Sa, ga;
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Sb = Da & 0x000f;
if (Sb == 0) Sb = 3;
else Sb--;
Yf = xa[6];
Vf = xa[2] & 0xffff;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
ga = kb();
wa.st32_port(Vf, ga);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 2)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
} else {
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
ga = kb();
wa.st32_port(Vf, ga);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 2)) & Tf);
}
}
function sg() {
var Tf, Uf, Yf, Wf, Sb, ag;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Sb = Da & 0x000f;
if (Sb == 0) Sb = 3;
else Sb--;
Yf = xa[6];
Uf = xa[7];
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
ag = ((Uf & Tf) + wa.segs[0].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
if (Tf == -1 && wa.df == 1 && ((fa | ag) & 3) == 0) {
var ng, l, tg, og, i, pg;
ng = Wf >>> 0;
l = (4096 - (fa & 0xfff)) >> 2;
if (ng > l) ng = l;
l = (4096 - (ag & 0xfff)) >> 2;
if (ng > l) ng = l;
tg = sd(fa, 0);
og = sd(ag, 1);
pg = ng << 2;
og >>= 2;
tg >>= 2;
for (i = 0; i < ng; i++) Wa[og + i] = Wa[tg + i];
xa[6] = (Yf + pg) >> 0;
xa[7] = (Uf + pg) >> 0;
xa[1] = Wf = (Wf - ng) >> 0;
if (Wf) Kb = Mb;
} else {
ga = kb();
fa = ag;
wb(ga);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 2)) & Tf);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 2)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
}
} else {
ga = kb();
fa = ag;
wb(ga);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 2)) & Tf);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 2)) & Tf);
}
}
function ug() {
var Tf, Uf, Wf;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Uf = xa[7];
fa = ((Uf & Tf) + wa.segs[0].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
if (Tf == -1 && wa.df == 1 && (fa & 3) == 0) {
var ng, l, og, i, pg, ga;
ng = Wf >>> 0;
l = (4096 - (fa & 0xfff)) >> 2;
if (ng > l) ng = l;
og = sd(xa[7], 1);
ga = xa[0];
og >>= 2;
for (i = 0; i < ng; i++) Wa[og + i] = ga;
pg = ng << 2;
xa[7] = (Uf + pg) >> 0;
xa[1] = Wf = (Wf - ng) >> 0;
if (Wf) Kb = Mb;
} else {
wb(xa[0]);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 2)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
}
} else {
wb(xa[0]);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 2)) & Tf);
}
}
function vg() {
var Tf, Uf, Yf, Wf, Sb, ag;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Sb = Da & 0x000f;
if (Sb == 0) Sb = 3;
else Sb--;
Yf = xa[6];
Uf = xa[7];
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
ag = ((Uf & Tf) + wa.segs[0].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
ga = kb();
fa = ag;
Ha = kb();
Xb(7, ga, Ha);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 2)) & Tf);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 2)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Da & 0x0010) {
if (! (za == 0)) return;
} else {
if ((za == 0)) return;
}
if (Wf & Tf) Kb = Mb;;
} else {
ga = kb();
fa = ag;
Ha = kb();
Xb(7, ga, Ha);
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 2)) & Tf);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 2)) & Tf);
}
}
function wg() {
var Tf, Yf, Sb, Wf, ga;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Sb = Da & 0x000f;
if (Sb == 0) Sb = 3;
else Sb--;
Yf = xa[6];
fa = ((Yf & Tf) + wa.segs[Sb].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
ga = kb();
xa[0] = ga;
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 2)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Wf & Tf) Kb = Mb;;
} else {
ga = kb();
xa[0] = ga;
xa[6] = (Yf & ~Tf) | ((Yf + (wa.df << 2)) & Tf);
}
}
function xg() {
var Tf, Uf, Wf, ga;
if (Da & 0x0080) Tf = 0xffff;
else Tf = -1;
Uf = xa[7];
fa = ((Uf & Tf) + wa.segs[0].base) >> 0;
if (Da & (0x0010 | 0x0020)) {
Wf = xa[1];
if ((Wf & Tf) == 0) return;;
ga = kb();
Xb(7, xa[0], ga);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 2)) & Tf);
xa[1] = Wf = (Wf & ~Tf) | ((Wf - 1) & Tf);
if (Da & 0x0010) {
if (! (za == 0)) return;
} else {
if ((za == 0)) return;
}
if (Wf & Tf) Kb = Mb;;
} else {
ga = kb();
Xb(7, xa[0], ga);
xa[7] = (Uf & ~Tf) | ((Uf + (wa.df << 2)) & Tf);
}
}
wa = this;
Ta = this.phys_mem8;
Va = this.phys_mem16;
Wa = this.phys_mem32;
Za = this.tlb_read_user;
ab = this.tlb_write_user;
Xa = this.tlb_read_kernel;
Ya = this.tlb_write_kernel;
if (wa.cpl == 3) {
bb = Za;
cb = ab;
} else {
bb = Xa;
cb = Ya;
}
if (wa.halted) {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) {
wa.halted = 0;
} else {
return 257;
}
}
xa = this.regs;
ya = this.cc_src;
za = this.cc_dst;
Aa = this.cc_op;
Ba = this.cc_op2;
Ca = this.cc_dst2;
Jb = this.eip;
be();
La = 256;
Ka = ua;
if (va) {;
ze(va.intno, 0, va.error_code, 0, 0);
}
if (wa.hard_intno >= 0) {;
ze(wa.hard_intno, 0, 0, 0, 1);
wa.hard_intno = -1;
}
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) {
wa.hard_intno = wa.get_hard_intno();;
ze(wa.hard_intno, 0, 0, 0, 1);
wa.hard_intno = -1;
}
Kb = 0;
Mb = 0;
yg: do {;
Jb = (Jb + Kb - Mb) >> 0;
Nb = (Jb + Na) >> 0;
Lb = bb[Nb >>> 12];
if (((Lb | Nb) & 0xfff) >= (4096 - 15 + 1)) {
var zg;
if (Lb == -1) fb(Nb, 0, wa.cpl == 3);
Lb = bb[Nb >>> 12];
Mb = Kb = Nb ^ Lb;
b = Ta[Kb++];;
zg = Nb & 0xfff;
if (zg >= (4096 - 15 + 1)) {
ga = Bd(Nb, b);
if ((zg + ga) > 4096) {
Mb = Kb = this.mem_size;
for (Ha = 0; Ha < ga; Ha++) {
fa = (Nb + Ha) >> 0;
Ta[Kb + Ha] = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
}
Kb++;
}
}
} else {
Mb = Kb = Nb ^ Lb;
b = Ta[Kb++];;
}
b |= (Da = Ra) & 0x0100;
Ed: for (;;) {
switch (b) {
case 0x66:
if (Da == Ra) Bd(Nb, b);
if (Ra & 0x0100) Da &= ~0x0100;
else Da |= 0x0100;
b = Ta[Kb++];;
b |= (Da & 0x0100);
break;
case 0x67:
if (Da == Ra) Bd(Nb, b);
if (Ra & 0x0080) Da &= ~0x0080;
else Da |= 0x0080;
b = Ta[Kb++];;
b |= (Da & 0x0100);
break;
case 0xf0:
if (Da == Ra) Bd(Nb, b);
Da |= 0x0040;
b = Ta[Kb++];;
b |= (Da & 0x0100);
break;
case 0xf2:
if (Da == Ra) Bd(Nb, b);
Da |= 0x0020;
b = Ta[Kb++];;
b |= (Da & 0x0100);
break;
case 0xf3:
if (Da == Ra) Bd(Nb, b);
Da |= 0x0010;
b = Ta[Kb++];;
b |= (Da & 0x0100);
break;
case 0x26:
case 0x2e:
case 0x36:
case 0x3e:
if (Da == Ra) Bd(Nb, b);
Da = (Da & ~0x000f) | (((b >> 3) & 3) + 1);
b = Ta[Kb++];;
b |= (Da & 0x0100);;
break;
case 0x64:
case 0x65:
if (Da == Ra) Bd(Nb, b);
Da = (Da & ~0x000f) | ((b & 7) + 1);
b = Ta[Kb++];;
b |= (Da & 0x0100);;
break;
case 0xb0:
case 0xb1:
case 0xb2:
case 0xb3:
case 0xb4:
case 0xb5:
case 0xb6:
case 0xb7:
ga = Ta[Kb++];;
b &= 7;
Ua = (b & 4) << 1;
xa[b & 3] = (xa[b & 3] & ~ (0xff << Ua)) | (((ga) & 0xff) << Ua);
break Ed;
case 0xb8:
case 0xb9:
case 0xba:
case 0xbb:
case 0xbc:
case 0xbd:
case 0xbe:
case 0xbf:
{
ga = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
xa[b & 7] = ga;
break Ed;
case 0x88:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
ga = (xa[Ga & 3] >> ((Ga & 4) << 1));
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Ua = (Fa & 4) << 1;
xa[Fa & 3] = (xa[Fa & 3] & ~ (0xff << Ua)) | (((ga) & 0xff) << Ua);
} else {
fa = Pb(Ea); {
Ua = cb[fa >>> 12];
if (Ua == -1) {
rb(ga);
} else {
Ta[fa ^ Ua] = ga;
}
};
}
break Ed;
case 0x89:
Ea = Ta[Kb++];;
ga = xa[(Ea >> 3) & 7];
if ((Ea >> 6) == 3) {
xa[Ea & 7] = ga;
} else {
fa = Pb(Ea); {
Ua = cb[fa >>> 12];
if ((Ua | fa) & 3) {
vb(ga);
} else {
Wa[(fa ^ Ua) >> 2] = ga;
}
};
}
break Ed;
case 0x8a:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = (xa[Fa & 3] >> ((Fa & 4) << 1));
} else {
fa = Pb(Ea);
ga = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
}
Ga = (Ea >> 3) & 7;
Ua = (Ga & 4) << 1;
xa[Ga & 3] = (xa[Ga & 3] & ~ (0xff << Ua)) | (((ga) & 0xff) << Ua);
break Ed;
case 0x8b:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = (((Ua = bb[fa >>> 12]) | fa) & 3 ? jb() : Wa[(fa ^ Ua) >> 2]);
}
xa[(Ea >> 3) & 7] = ga;
break Ed;
case 0xa0:
fa = Ub();
ga = gb();
xa[0] = (xa[0] & -256) | ga;
break Ed;
case 0xa1:
fa = Ub();
ga = kb();
xa[0] = ga;
break Ed;
case 0xa2:
fa = Ub();
sb(xa[0]);
break Ed;
case 0xa3:
fa = Ub();
wb(xa[0]);
break Ed;
case 0xd7:
fa = (xa[3] + (xa[0] & 0xff)) >> 0;
if (Da & 0x0080) fa &= 0xffff;
Ga = Da & 0x000f;
if (Ga == 0) Ga = 3;
else Ga--;
fa = (fa + wa.segs[Ga].base) >> 0;
ga = gb();
Vb(0, ga);
break Ed;
case 0xc6:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) {
ga = Ta[Kb++];;
Vb(Ea & 7, ga);
} else {
fa = Pb(Ea);
ga = Ta[Kb++];;
sb(ga);
}
break Ed;
case 0xc7:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) {
{
ga = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
xa[Ea & 7] = ga;
} else {
fa = Pb(Ea); {
ga = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
wb(ga);
}
break Ed;
case 0x91:
case 0x92:
case 0x93:
case 0x94:
case 0x95:
case 0x96:
case 0x97:
Ga = b & 7;
ga = xa[0];
xa[0] = xa[Ga];
xa[Ga] = ga;
break Ed;
case 0x86:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = (xa[Fa & 3] >> ((Fa & 4) << 1));
Vb(Fa, (xa[Ga & 3] >> ((Ga & 4) << 1)));
} else {
fa = Pb(Ea);
ga = mb();
sb((xa[Ga & 3] >> ((Ga & 4) << 1)));
}
Vb(Ga, ga);
break Ed;
case 0x87:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = xa[Fa];
xa[Fa] = xa[Ga];
} else {
fa = Pb(Ea);
ga = qb();
wb(xa[Ga]);
}
xa[Ga] = ga;
break Ed;
case 0x8e:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if (Ga >= 6 || Ga == 1) Cc(6);
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7] & 0xffff;
} else {
fa = Pb(Ea);
ga = ib();
}
Ge(Ga, ga);
break Ed;
case 0x8c:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if (Ga >= 6) Cc(6);
ga = wa.segs[Ga].selector;
if ((Ea >> 6) == 3) {
if ((((Da >> 8) & 1) ^ 1)) {
xa[Ea & 7] = ga;
} else {
Wb(Ea & 7, ga);
}
} else {
fa = Pb(Ea);
ub(ga);
}
break Ed;
case 0xc4:
Qf(0);
break Ed;
case 0xc5:
Qf(3);
break Ed;
case 0x00:
case 0x08:
case 0x10:
case 0x18:
case 0x20:
case 0x28:
case 0x30:
case 0x38:
Ea = Ta[Kb++];;
Ja = b >> 3;
Ga = (Ea >> 3) & 7;
Ha = (xa[Ga & 3] >> ((Ga & 4) << 1));
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Vb(Fa, fc(Ja, (xa[Fa & 3] >> ((Fa & 4) << 1)), Ha));
} else {
fa = Pb(Ea);
if (Ja != 7) {
ga = mb();
ga = fc(Ja, ga, Ha);
sb(ga);
} else {
ga = gb();
fc(7, ga, Ha);
}
}
break Ed;
case 0x01:
Ea = Ta[Kb++];;
Ha = xa[(Ea >> 3) & 7];
if ((Ea >> 6) == 3) {
Fa = Ea & 7; {
ya = Ha;
za = xa[Fa] = (xa[Fa] + ya) >> 0;
Aa = 2;
};
} else {
fa = Pb(Ea);
ga = qb(); {
ya = Ha;
za = ga = (ga + ya) >> 0;
Aa = 2;
};
wb(ga);
}
break Ed;
case 0x09:
case 0x11:
case 0x19:
case 0x21:
case 0x29:
case 0x31:
Ea = Ta[Kb++];;
Ja = b >> 3;
Ha = xa[(Ea >> 3) & 7];
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
xa[Fa] = Xb(Ja, xa[Fa], Ha);
} else {
fa = Pb(Ea);
ga = qb();
ga = Xb(Ja, ga, Ha);
wb(ga);
}
break Ed;
case 0x39:
Ea = Ta[Kb++];;
Ja = b >> 3;
Ha = xa[(Ea >> 3) & 7];
if ((Ea >> 6) == 3) {
Fa = Ea & 7; {
ya = Ha;
za = (xa[Fa] - ya) >> 0;
Aa = 8;
};
} else {
fa = Pb(Ea);
ga = kb(); {
ya = Ha;
za = (ga - ya) >> 0;
Aa = 8;
};
}
break Ed;
case 0x02:
case 0x0a:
case 0x12:
case 0x1a:
case 0x22:
case 0x2a:
case 0x32:
case 0x3a:
Ea = Ta[Kb++];;
Ja = b >> 3;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Ha = (xa[Fa & 3] >> ((Fa & 4) << 1));
} else {
fa = Pb(Ea);
Ha = gb();
}
Vb(Ga, fc(Ja, (xa[Ga & 3] >> ((Ga & 4) << 1)), Ha));
break Ed;
case 0x03:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = xa[Ea & 7];
} else {
fa = Pb(Ea);
Ha = kb();
} {
ya = Ha;
za = xa[Ga] = (xa[Ga] + ya) >> 0;
Aa = 2;
};
break Ed;
case 0x0b:
case 0x13:
case 0x1b:
case 0x23:
case 0x2b:
case 0x33:
Ea = Ta[Kb++];;
Ja = b >> 3;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = xa[Ea & 7];
} else {
fa = Pb(Ea);
Ha = kb();
}
xa[Ga] = Xb(Ja, xa[Ga], Ha);
break Ed;
case 0x3b:
Ea = Ta[Kb++];;
Ja = b >> 3;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = xa[Ea & 7];
} else {
fa = Pb(Ea);
Ha = kb();
} {
ya = Ha;
za = (xa[Ga] - ya) >> 0;
Aa = 8;
};
break Ed;
case 0x04:
case 0x0c:
case 0x14:
case 0x1c:
case 0x24:
case 0x2c:
case 0x34:
case 0x3c:
Ha = Ta[Kb++];;
Ja = b >> 3;
Vb(0, fc(Ja, xa[0] & 0xff, Ha));
break Ed;
case 0x05:
{
Ha = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
}; {
ya = Ha;
za = xa[0] = (xa[0] + ya) >> 0;
Aa = 2;
};
break Ed;
case 0x0d:
case 0x15:
case 0x1d:
case 0x25:
case 0x2d:
{
Ha = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
Ja = b >> 3;
xa[0] = Xb(Ja, xa[0], Ha);
break Ed;
case 0x35:
{
Ha = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
}; {
za = xa[0] = xa[0] ^ Ha;
Aa = 14;
};
break Ed;
case 0x3d:
{
Ha = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
}; {
ya = Ha;
za = (xa[0] - ya) >> 0;
Aa = 8;
};
break Ed;
case 0x80:
case 0x82:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Ha = Ta[Kb++];;
Vb(Fa, fc(Ja, (xa[Fa & 3] >> ((Fa & 4) << 1)), Ha));
} else {
fa = Pb(Ea);
Ha = Ta[Kb++];;
if (Ja != 7) {
ga = mb();
ga = fc(Ja, ga, Ha);
sb(ga);
} else {
ga = gb();
fc(7, ga, Ha);
}
}
break Ed;
case 0x81:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
if (Ja == 7) {
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = kb();
} {
Ha = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
}; {
ya = Ha;
za = (ga - ya) >> 0;
Aa = 8;
};
} else {
if ((Ea >> 6) == 3) {
Fa = Ea & 7; {
Ha = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
xa[Fa] = Xb(Ja, xa[Fa], Ha);
} else {
fa = Pb(Ea); {
Ha = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
ga = qb();
ga = Xb(Ja, ga, Ha);
wb(ga);
}
}
break Ed;
case 0x83:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
if (Ja == 7) {
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = kb();
}
Ha = ((Ta[Kb++] << 24) >> 24);; {
ya = Ha;
za = (ga - ya) >> 0;
Aa = 8;
};
} else {
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Ha = ((Ta[Kb++] << 24) >> 24);;
xa[Fa] = Xb(Ja, xa[Fa], Ha);
} else {
fa = Pb(Ea);
Ha = ((Ta[Kb++] << 24) >> 24);;
ga = qb();
ga = Xb(Ja, ga, Ha);
wb(ga);
}
}
break Ed;
case 0x40:
case 0x41:
case 0x42:
case 0x43:
case 0x44:
case 0x45:
case 0x46:
case 0x47:
Ga = b & 7; {
if (Aa < 25) {
Ba = Aa;
Ca = za;
}
xa[Ga] = za = (xa[Ga] + 1) >> 0;
Aa = 27;
};
break Ed;
case 0x48:
case 0x49:
case 0x4a:
case 0x4b:
case 0x4c:
case 0x4d:
case 0x4e:
case 0x4f:
Ga = b & 7; {
if (Aa < 25) {
Ba = Aa;
Ca = za;
}
xa[Ga] = za = (xa[Ga] - 1) >> 0;
Aa = 30;
};
break Ed;
case 0x6b:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = xa[Ea & 7];
} else {
fa = Pb(Ea);
Ha = kb();
}
Ia = ((Ta[Kb++] << 24) >> 24);;
xa[Ga] = Vc(Ha, Ia);
break Ed;
case 0x69:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = xa[Ea & 7];
} else {
fa = Pb(Ea);
Ha = kb();
} {
Ia = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
xa[Ga] = Vc(Ha, Ia);
break Ed;
case 0x84:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = (xa[Fa & 3] >> ((Fa & 4) << 1));
} else {
fa = Pb(Ea);
ga = gb();
}
Ga = (Ea >> 3) & 7;
Ha = (xa[Ga & 3] >> ((Ga & 4) << 1)); {
za = (((ga & Ha) << 24) >> 24);
Aa = 12;
};
break Ed;
case 0x85:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = kb();
}
Ha = xa[(Ea >> 3) & 7]; {
za = ga & Ha;
Aa = 14;
};
break Ed;
case 0xa8:
Ha = Ta[Kb++];; {
za = (((xa[0] & Ha) << 24) >> 24);
Aa = 12;
};
break Ed;
case 0xa9:
{
Ha = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
}; {
za = xa[0] & Ha;
Aa = 14;
};
break Ed;
case 0xf6:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
switch (Ja) {
case 0:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = (xa[Fa & 3] >> ((Fa & 4) << 1));
} else {
fa = Pb(Ea);
ga = gb();
}
Ha = Ta[Kb++];; {
za = (((ga & Ha) << 24) >> 24);
Aa = 12;
};
break;
case 2:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Vb(Fa, ~ (xa[Fa & 3] >> ((Fa & 4) << 1)));
} else {
fa = Pb(Ea);
ga = mb();
ga = ~ga;
sb(ga);
}
break;
case 3:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Vb(Fa, fc(5, 0, (xa[Fa & 3] >> ((Fa & 4) << 1))));
} else {
fa = Pb(Ea);
ga = mb();
ga = fc(5, 0, ga);
sb(ga);
}
break;
case 4:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = (xa[Fa & 3] >> ((Fa & 4) << 1));
} else {
fa = Pb(Ea);
ga = gb();
}
Wb(0, Nc(xa[0], ga));
break;
case 5:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = (xa[Fa & 3] >> ((Fa & 4) << 1));
} else {
fa = Pb(Ea);
ga = gb();
}
Wb(0, Oc(xa[0], ga));
break;
case 6:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = (xa[Fa & 3] >> ((Fa & 4) << 1));
} else {
fa = Pb(Ea);
ga = gb();
}
Bc(ga);
break;
case 7:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = (xa[Fa & 3] >> ((Fa & 4) << 1));
} else {
fa = Pb(Ea);
ga = gb();
}
Dc(ga);
break;
default:
Cc(6);
}
break Ed;
case 0xf7:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
switch (Ja) {
case 0:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = kb();
} {
Ha = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
}; {
za = ga & Ha;
Aa = 14;
};
break;
case 2:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
xa[Fa] = ~xa[Fa];
} else {
fa = Pb(Ea);
ga = qb();
ga = ~ga;
wb(ga);
}
break;
case 3:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
xa[Fa] = Xb(5, 0, xa[Fa]);
} else {
fa = Pb(Ea);
ga = qb();
ga = Xb(5, 0, ga);
wb(ga);
}
break;
case 4:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = kb();
}
xa[0] = Uc(xa[0], ga);
xa[2] = Ma;
break;
case 5:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = kb();
}
xa[0] = Vc(xa[0], ga);
xa[2] = Ma;
break;
case 6:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = kb();
}
xa[0] = Gc(xa[2], xa[0], ga);
xa[2] = Ma;
break;
case 7:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = kb();
}
xa[0] = Kc(xa[2], xa[0], ga);
xa[2] = Ma;
break;
default:
Cc(6);
}
break Ed;
case 0xc0:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = Ta[Kb++];;
Fa = Ea & 7;
Vb(Fa, ic(Ja, (xa[Fa & 3] >> ((Fa & 4) << 1)), Ha));
} else {
fa = Pb(Ea);
Ha = Ta[Kb++];;
ga = mb();
ga = ic(Ja, ga, Ha);
sb(ga);
}
break Ed;
case 0xc1:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = Ta[Kb++];;
Fa = Ea & 7;
xa[Fa] = mc(Ja, xa[Fa], Ha);
} else {
fa = Pb(Ea);
Ha = Ta[Kb++];;
ga = qb();
ga = mc(Ja, ga, Ha);
wb(ga);
}
break Ed;
case 0xd0:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Vb(Fa, ic(Ja, (xa[Fa & 3] >> ((Fa & 4) << 1)), 1));
} else {
fa = Pb(Ea);
ga = mb();
ga = ic(Ja, ga, 1);
sb(ga);
}
break Ed;
case 0xd1:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
xa[Fa] = mc(Ja, xa[Fa], 1);
} else {
fa = Pb(Ea);
ga = qb();
ga = mc(Ja, ga, 1);
wb(ga);
}
break Ed;
case 0xd2:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
Ha = xa[1] & 0xff;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Vb(Fa, ic(Ja, (xa[Fa & 3] >> ((Fa & 4) << 1)), Ha));
} else {
fa = Pb(Ea);
ga = mb();
ga = ic(Ja, ga, Ha);
sb(ga);
}
break Ed;
case 0xd3:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
Ha = xa[1] & 0xff;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
xa[Fa] = mc(Ja, xa[Fa], Ha);
} else {
fa = Pb(Ea);
ga = qb();
ga = mc(Ja, ga, Ha);
wb(ga);
}
break Ed;
case 0x98:
xa[0] = (xa[0] << 16) >> 16;
break Ed;
case 0x99:
xa[2] = xa[0] >> 31;
break Ed;
case 0x50:
case 0x51:
case 0x52:
case 0x53:
case 0x54:
case 0x55:
case 0x56:
case 0x57:
ga = xa[b & 7];
if (Qa) {
fa = (xa[4] - 4) >> 0; {
Ua = cb[fa >>> 12];
if ((Ua | fa) & 3) {
vb(ga);
} else {
Wa[(fa ^ Ua) >> 2] = ga;
}
};
xa[4] = fa;
} else {
wd(ga);
}
break Ed;
case 0x58:
case 0x59:
case 0x5a:
case 0x5b:
case 0x5c:
case 0x5d:
case 0x5e:
case 0x5f:
if (Qa) {
fa = xa[4];
ga = (((Ua = bb[fa >>> 12]) | fa) & 3 ? jb() : Wa[(fa ^ Ua) >> 2]);
xa[4] = (fa + 4) >> 0;
} else {
ga = zd();
Ad();
}
xa[b & 7] = ga;
break Ed;
case 0x60:
Gf();
break Ed;
case 0x61:
If();
break Ed;
case 0x8f:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) {
ga = zd();
Ad();
xa[Ea & 7] = ga;
} else {
ga = zd();
Ha = xa[4];
Ad();
Ia = xa[4];
fa = Pb(Ea);
xa[4] = Ha;
wb(ga);
xa[4] = Ia;
}
break Ed;
case 0x68:
{
ga = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
if (Qa) {
fa = (xa[4] - 4) >> 0;
wb(ga);
xa[4] = fa;
} else {
wd(ga);
}
break Ed;
case 0x6a:
ga = ((Ta[Kb++] << 24) >> 24);;
if (Qa) {
fa = (xa[4] - 4) >> 0;
wb(ga);
xa[4] = fa;
} else {
wd(ga);
}
break Ed;
case 0xc8:
Pf();
break Ed;
case 0xc9:
if (Qa) {
fa = xa[5];
ga = kb();
xa[5] = ga;
xa[4] = (fa + 4) >> 0;
} else {
Kf();
}
break Ed;
case 0x9c:
Sa = (wa.eflags >> 12) & 3;
if ((wa.eflags & 0x00020000) && Sa != 3) Cc(13);
ga = hd() & ~ (0x00020000 | 0x00010000);
if ((((Da >> 8) & 1) ^ 1)) {
wd(ga);
} else {
ud(ga);
}
break Ed;
case 0x9d:
Sa = (wa.eflags >> 12) & 3;
if ((wa.eflags & 0x00020000) && Sa != 3) Cc(13);
if ((((Da >> 8) & 1) ^ 1)) {
ga = zd();
Ad();
Ha = -1;
} else {
ga = xd();
yd();
Ha = 0xffff;
}
Ia = (0x00000100 | 0x00040000 | 0x00200000 | 0x00004000);
if (wa.cpl == 0) {
Ia |= 0x00000200 | 0x00003000;
} else {
if (wa.cpl <= Sa) Ia |= 0x00000200;
}
jd(ga, Ia & Ha); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0x06:
case 0x0e:
case 0x16:
case 0x1e:
wd(wa.segs[b >> 3].selector);
break Ed;
case 0x07:
case 0x17:
case 0x1f:
Ge(b >> 3, zd() & 0xffff);
Ad();
break Ed;
case 0x8d:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) Cc(6);
Da = (Da & ~0x000f) | (6 + 1);
xa[(Ea >> 3) & 7] = Pb(Ea);
break Ed;
case 0xfe:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
switch (Ja) {
case 0:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Vb(Fa, gc((xa[Fa & 3] >> ((Fa & 4) << 1))));
} else {
fa = Pb(Ea);
ga = mb();
ga = gc(ga);
sb(ga);
}
break;
case 1:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Vb(Fa, hc((xa[Fa & 3] >> ((Fa & 4) << 1))));
} else {
fa = Pb(Ea);
ga = mb();
ga = hc(ga);
sb(ga);
}
break;
default:
Cc(6);
}
break Ed;
case 0xff:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
switch (Ja) {
case 0:
if ((Ea >> 6) == 3) {
Fa = Ea & 7; {
if (Aa < 25) {
Ba = Aa;
Ca = za;
}
xa[Fa] = za = (xa[Fa] + 1) >> 0;
Aa = 27;
};
} else {
fa = Pb(Ea);
ga = qb(); {
if (Aa < 25) {
Ba = Aa;
Ca = za;
}
ga = za = (ga + 1) >> 0;
Aa = 27;
};
wb(ga);
}
break;
case 1:
if ((Ea >> 6) == 3) {
Fa = Ea & 7; {
if (Aa < 25) {
Ba = Aa;
Ca = za;
}
xa[Fa] = za = (xa[Fa] - 1) >> 0;
Aa = 30;
};
} else {
fa = Pb(Ea);
ga = qb(); {
if (Aa < 25) {
Ba = Aa;
Ca = za;
}
ga = za = (ga - 1) >> 0;
Aa = 30;
};
wb(ga);
}
break;
case 2:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = kb();
}
Ha = (Jb + Kb - Mb);
if (Qa) {
fa = (xa[4] - 4) >> 0;
wb(Ha);
xa[4] = fa;
} else {
wd(Ha);
}
Jb = ga,
Kb = Mb = 0;
break;
case 4:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = kb();
}
Jb = ga,
Kb = Mb = 0;
break;
case 6:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = kb();
}
if (Qa) {
fa = (xa[4] - 4) >> 0;
wb(ga);
xa[4] = fa;
} else {
wd(ga);
}
break;
case 3:
case 5:
if ((Ea >> 6) == 3) Cc(6);
fa = Pb(Ea);
ga = kb();
fa = (fa + 4) >> 0;
Ha = ib();
if (Ja == 3) Ve(1, Ha, ga, (Jb + Kb - Mb));
else Me(Ha, ga);
break;
default:
Cc(6);
}
break Ed;
case 0xeb:
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
break Ed;
case 0xe9:
{
ga = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
Kb = (Kb + ga) >> 0;
break Ed;
case 0xea:
if ((((Da >> 8) & 1) ^ 1)) {
{
ga = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
} else {
ga = Ob();
}
Ha = Ob();
Me(Ha, ga);
break Ed;
case 0x70:
if (Yc()) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x71:
if (!Yc()) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x72:
if (bc()) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x73:
if (!bc()) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x74:
if ((za == 0)) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x75:
if (! (za == 0)) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x76:
if (Zc()) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x77:
if (!Zc()) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x78:
if ((Aa == 24 ? ((ya >> 7) & 1) : (za < 0))) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x79:
if (! (Aa == 24 ? ((ya >> 7) & 1) : (za < 0))) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x7a:
if (ad()) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x7b:
if (!ad()) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x7c:
if (bd()) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x7d:
if (!bd()) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x7e:
if (cd()) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0x7f:
if (!cd()) {
ga = ((Ta[Kb++] << 24) >> 24);;
Kb = (Kb + ga) >> 0;
} else {
Kb = (Kb + 1) >> 0;
}
break Ed;
case 0xe0:
case 0xe1:
case 0xe2:
ga = ((Ta[Kb++] << 24) >> 24);;
if (Da & 0x0080) Ja = 0xffff;
else Ja = -1;
Ha = (xa[1] - 1) & Ja;
xa[1] = (xa[1] & ~Ja) | Ha;
b &= 3;
if (b == 0) Ia = !(za == 0);
else if (b == 1) Ia = (za == 0);
else Ia = 1;
if (Ha && Ia) {
if (Da & 0x0100) {
Jb = (Jb + Kb - Mb + ga) & 0xffff,
Kb = Mb = 0;
} else {
Kb = (Kb + ga) >> 0;
}
}
break Ed;
case 0xe3:
ga = ((Ta[Kb++] << 24) >> 24);;
if (Da & 0x0080) Ja = 0xffff;
else Ja = -1;
if ((xa[1] & Ja) == 0) {
if (Da & 0x0100) {
Jb = (Jb + Kb - Mb + ga) & 0xffff,
Kb = Mb = 0;
} else {
Kb = (Kb + ga) >> 0;
}
}
break Ed;
case 0xc2:
Ha = (Ob() << 16) >> 16;
ga = zd();
xa[4] = (xa[4] & ~Pa) | ((xa[4] + 4 + Ha) & Pa);
Jb = ga,
Kb = Mb = 0;
break Ed;
case 0xc3:
if (Qa) {
fa = xa[4];
ga = kb();
xa[4] = (xa[4] + 4) >> 0;
} else {
ga = zd();
Ad();
}
Jb = ga,
Kb = Mb = 0;
break Ed;
case 0xe8:
{
ga = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
Ha = (Jb + Kb - Mb);
if (Qa) {
fa = (xa[4] - 4) >> 0;
wb(Ha);
xa[4] = fa;
} else {
wd(Ha);
}
Kb = (Kb + ga) >> 0;
break Ed;
case 0x9a:
Ia = (((Da >> 8) & 1) ^ 1);
if (Ia) {
{
ga = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
} else {
ga = Ob();
}
Ha = Ob();
Ve(Ia, Ha, ga, (Jb + Kb - Mb)); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0xca:
Ha = (Ob() << 16) >> 16;
jf((((Da >> 8) & 1) ^ 1), Ha); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0xcb:
jf((((Da >> 8) & 1) ^ 1), 0); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0xcf:
hf((((Da >> 8) & 1) ^ 1)); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0x90:
break Ed;
case 0xcc:
Ha = (Jb + Kb - Mb);
ze(3, 1, 0, Ha, 0);
break Ed;
case 0xcd:
ga = Ta[Kb++];;
if ((wa.eflags & 0x00020000) && ((wa.eflags >> 12) & 3) != 3) Cc(13);
Ha = (Jb + Kb - Mb);
ze(ga, 1, 0, Ha, 0);
break Ed;
case 0xce:
if (Yc()) {
Ha = (Jb + Kb - Mb);
ze(4, 1, 0, Ha, 0);
}
break Ed;
case 0x62:
Df();
break Ed;
case 0xf5:
ya = gd() ^ 0x0001;
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
break Ed;
case 0xf8:
ya = gd() & ~0x0001;
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
break Ed;
case 0xf9:
ya = gd() | 0x0001;
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
break Ed;
case 0xfc:
wa.df = 1;
break Ed;
case 0xfd:
wa.df = -1;
break Ed;
case 0xfa:
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
wa.eflags &= ~0x00000200;
break Ed;
case 0xfb:
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
wa.eflags |= 0x00000200; {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0x9e:
ya = ((xa[0] >> 8) & (0x0080 | 0x0040 | 0x0010 | 0x0004 | 0x0001)) | (Yc() << 11);
za = ((ya >> 6) & 1) ^ 1;
Aa = 24;
break Ed;
case 0x9f:
ga = hd();
Vb(4, ga);
break Ed;
case 0xf4:
if (wa.cpl != 0) Cc(13);
wa.halted = 1;
La = 257;
break yg;
case 0xa4:
Zf();
break Ed;
case 0xa5:
sg();
break Ed;
case 0xaa:
bg();
break Ed;
case 0xab:
ug();
break Ed;
case 0xa6:
cg();
break Ed;
case 0xa7:
vg();
break Ed;
case 0xac:
dg();
break Ed;
case 0xad:
wg();
break Ed;
case 0xae:
eg();
break Ed;
case 0xaf:
xg();
break Ed;
case 0x6c:
Sf(); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0x6d:
mg(); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0x6e:
Xf(); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0x6f:
rg(); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0xd8:
case 0xd9:
case 0xda:
case 0xdb:
case 0xdc:
case 0xdd:
case 0xde:
case 0xdf:
if (wa.cr0 & ((1 << 2) | (1 << 3))) {
Cc(7);
}
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
Fa = Ea & 7;
Ja = ((b & 7) << 3) | ((Ea >> 3) & 7);
Wb(0, 0xffff);
if ((Ea >> 6) == 3) {} else {
fa = Pb(Ea);
}
break Ed;
case 0x9b:
break Ed;
case 0xe4:
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
ga = Ta[Kb++];;
Vb(0, wa.ld8_port(ga)); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0xe5:
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
ga = Ta[Kb++];;
xa[0] = wa.ld32_port(ga); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0xe6:
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
ga = Ta[Kb++];;
wa.st8_port(ga, xa[0] & 0xff); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0xe7:
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
ga = Ta[Kb++];;
wa.st32_port(ga, xa[0]); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0xec:
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
Vb(0, wa.ld8_port(xa[2] & 0xffff)); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0xed:
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
xa[0] = wa.ld32_port(xa[2] & 0xffff); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0xee:
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
wa.st8_port(xa[2] & 0xffff, xa[0] & 0xff); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0xef:
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
wa.st32_port(xa[2] & 0xffff, xa[0]); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0x27:
zf();
break Ed;
case 0x2f:
Bf();
break Ed;
case 0x37:
vf();
break Ed;
case 0x3f:
yf();
break Ed;
case 0xd4:
ga = Ta[Kb++];;
rf(ga);
break Ed;
case 0xd5:
ga = Ta[Kb++];;
uf(ga);
break Ed;
case 0x63:
pf();
break Ed;
case 0xd6:
case 0xf1:
Cc(6);
break;
case 0x0f:
b = Ta[Kb++];;
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:
{
ga = Ta[Kb] | (Ta[Kb + 1] << 8) | (Ta[Kb + 2] << 16) | (Ta[Kb + 3] << 24);
Kb += 4;
};
if (ed(b & 0xf)) Kb = (Kb + ga) >> 0;
break Ed;
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:
Ea = Ta[Kb++];;
ga = ed(b & 0xf);
if ((Ea >> 6) == 3) {
Vb(Ea & 7, ga);
} else {
fa = Pb(Ea);
sb(ga);
}
break Ed;
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:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = kb();
}
if (ed(b & 0xf)) xa[(Ea >> 3) & 7] = ga;
break Ed;
case 0xb6:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = (xa[Fa & 3] >> ((Fa & 4) << 1)) & 0xff;
} else {
fa = Pb(Ea);
ga = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
}
xa[Ga] = ga;
break Ed;
case 0xb7:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7] & 0xffff;
} else {
fa = Pb(Ea);
ga = ib();
}
xa[Ga] = ga;
break Ed;
case 0xbe:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = (xa[Fa & 3] >> ((Fa & 4) << 1));
} else {
fa = Pb(Ea);
ga = (((Ua = bb[fa >>> 12]) == -1) ? db() : Ta[fa ^ Ua]);
}
xa[Ga] = (((ga) << 24) >> 24);
break Ed;
case 0xbf:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = ib();
}
xa[Ga] = (((ga) << 16) >> 16);
break Ed;
case 0x00:
if (! (wa.cr0 & (1 << 0)) || (wa.eflags & 0x00020000)) Cc(6);
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
switch (Ja) {
case 0:
case 1:
if (Ja == 0) ga = wa.ldt.selector;
else ga = wa.tr.selector;
if ((Ea >> 6) == 3) {
Wb(Ea & 7, ga);
} else {
fa = Pb(Ea);
ub(ga);
}
break;
case 2:
case 3:
if (wa.cpl != 0) Cc(13);
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7] & 0xffff;
} else {
fa = Pb(Ea);
ga = ib();
}
if (Ja == 2) Ae(ga);
else Ce(ga);
break;
case 4:
case 5:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7] & 0xffff;
} else {
fa = Pb(Ea);
ga = ib();
}
of(ga, Ja & 1);
break;
default:
Cc(6);
}
break Ed;
case 0x01:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
switch (Ja) {
case 2:
case 3:
if ((Ea >> 6) == 3) Cc(6);
if (this.cpl != 0) Cc(13);
fa = Pb(Ea);
ga = ib();
fa += 2;
Ha = kb();
if (Ja == 2) {
this.gdt.base = Ha;
this.gdt.limit = ga;
} else {
this.idt.base = Ha;
this.idt.limit = ga;
}
break;
case 7:
if (this.cpl != 0) Cc(13);
if ((Ea >> 6) == 3) Cc(6);
fa = Pb(Ea);
wa.tlb_flush_page(fa & -4096);
break;
default:
Cc(6);
}
break Ed;
case 0x02:
case 0x03:
mf((((Da >> 8) & 1) ^ 1), b & 1);
break Ed;
case 0x20:
if (wa.cpl != 0) Cc(13);
Ea = Ta[Kb++];;
if ((Ea >> 6) != 3) Cc(6);
Ga = (Ea >> 3) & 7;
switch (Ga) {
case 0:
ga = wa.cr0;
break;
case 2:
ga = wa.cr2;
break;
case 3:
ga = wa.cr3;
break;
case 4:
ga = wa.cr4;
break;
default:
Cc(6);
}
xa[Ea & 7] = ga;
break Ed;
case 0x22:
if (wa.cpl != 0) Cc(13);
Ea = Ta[Kb++];;
if ((Ea >> 6) != 3) Cc(6);
Ga = (Ea >> 3) & 7;
ga = xa[Ea & 7];
switch (Ga) {
case 0:
Od(ga);
break;
case 2:
wa.cr2 = ga;
break;
case 3:
Qd(ga);
break;
case 4:
Sd(ga);
break;
default:
Cc(6);
}
break Ed;
case 0x06:
if (wa.cpl != 0) Cc(13);
Od(wa.cr0 & ~ (1 << 3));
break Ed;
case 0x23:
if (wa.cpl != 0) Cc(13);
Ea = Ta[Kb++];;
if ((Ea >> 6) != 3) Cc(6);
Ga = (Ea >> 3) & 7;
ga = xa[Ea & 7];
if (Ga == 4 || Ga == 5) Cc(6);
break Ed;
case 0xb2:
case 0xb4:
case 0xb5:
Qf(b & 7);
break Ed;
case 0xa2:
qf();
break Ed;
case 0xa4:
Ea = Ta[Kb++];;
Ha = xa[(Ea >> 3) & 7];
if ((Ea >> 6) == 3) {
Ia = Ta[Kb++];;
Fa = Ea & 7;
xa[Fa] = qc(xa[Fa], Ha, Ia);
} else {
fa = Pb(Ea);
Ia = Ta[Kb++];;
ga = qb();
ga = qc(ga, Ha, Ia);
wb(ga);
}
break Ed;
case 0xa5:
Ea = Ta[Kb++];;
Ha = xa[(Ea >> 3) & 7];
Ia = xa[1];
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
xa[Fa] = qc(xa[Fa], Ha, Ia);
} else {
fa = Pb(Ea);
ga = qb();
ga = qc(ga, Ha, Ia);
wb(ga);
}
break Ed;
case 0xac:
Ea = Ta[Kb++];;
Ha = xa[(Ea >> 3) & 7];
if ((Ea >> 6) == 3) {
Ia = Ta[Kb++];;
Fa = Ea & 7;
xa[Fa] = rc(xa[Fa], Ha, Ia);
} else {
fa = Pb(Ea);
Ia = Ta[Kb++];;
ga = qb();
ga = rc(ga, Ha, Ia);
wb(ga);
}
break Ed;
case 0xad:
Ea = Ta[Kb++];;
Ha = xa[(Ea >> 3) & 7];
Ia = xa[1];
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
xa[Fa] = rc(xa[Fa], Ha, Ia);
} else {
fa = Pb(Ea);
ga = qb();
ga = rc(ga, Ha, Ia);
wb(ga);
}
break Ed;
case 0xba:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
switch (Ja) {
case 4:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
Ha = Ta[Kb++];;
} else {
fa = Pb(Ea);
Ha = Ta[Kb++];;
ga = kb();
}
tc(ga, Ha);
break;
case 5:
case 6:
case 7:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Ha = Ta[Kb++];;
xa[Fa] = wc(Ja & 3, xa[Fa], Ha);
} else {
fa = Pb(Ea);
Ha = Ta[Kb++];;
ga = qb();
ga = wc(Ja & 3, ga, Ha);
wb(ga);
}
break;
default:
Cc(6);
}
break Ed;
case 0xa3:
Ea = Ta[Kb++];;
Ha = xa[(Ea >> 3) & 7];
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
fa = (fa + ((Ha >> 5) << 2)) >> 0;
ga = kb();
}
tc(ga, Ha);
break Ed;
case 0xab:
case 0xb3:
case 0xbb:
Ea = Ta[Kb++];;
Ha = xa[(Ea >> 3) & 7];
Ja = (b >> 3) & 3;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
xa[Fa] = wc(Ja, xa[Fa], Ha);
} else {
fa = Pb(Ea);
fa = (fa + ((Ha >> 5) << 2)) >> 0;
ga = qb();
ga = wc(Ja, ga, Ha);
wb(ga);
}
break Ed;
case 0xbc:
case 0xbd:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = xa[Ea & 7];
} else {
fa = Pb(Ea);
Ha = kb();
}
if (b & 1) xa[Ga] = Ac(xa[Ga], Ha);
else xa[Ga] = yc(xa[Ga], Ha);
break Ed;
case 0xaf:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = xa[Ea & 7];
} else {
fa = Pb(Ea);
Ha = kb();
}
xa[Ga] = Vc(xa[Ga], Ha);
break Ed;
case 0x31:
if ((wa.cr4 & (1 << 2)) && wa.cpl != 0) Cc(13);
ga = ld();
xa[0] = ga >>> 0;
xa[2] = (ga / 0x100000000) >>> 0;
break Ed;
case 0xc0:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = (xa[Fa & 3] >> ((Fa & 4) << 1));
Ha = fc(0, ga, (xa[Ga & 3] >> ((Ga & 4) << 1)));
Vb(Ga, ga);
Vb(Fa, Ha);
} else {
fa = Pb(Ea);
ga = mb();
Ha = fc(0, ga, (xa[Ga & 3] >> ((Ga & 4) << 1)));
sb(Ha);
Vb(Ga, ga);
}
break Ed;
case 0xc1:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = xa[Fa];
Ha = Xb(0, ga, xa[Ga]);
xa[Ga] = ga;
xa[Fa] = Ha;
} else {
fa = Pb(Ea);
ga = qb();
Ha = Xb(0, ga, xa[Ga]);
wb(Ha);
xa[Ga] = ga;
}
break Ed;
case 0xb0:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = (xa[Fa & 3] >> ((Fa & 4) << 1));
Ha = fc(5, xa[0], ga);
if (Ha == 0) {
Vb(Fa, (xa[Ga & 3] >> ((Ga & 4) << 1)));
} else {
Vb(0, ga);
}
} else {
fa = Pb(Ea);
ga = mb();
Ha = fc(5, xa[0], ga);
if (Ha == 0) {
sb((xa[Ga & 3] >> ((Ga & 4) << 1)));
} else {
Vb(0, ga);
}
}
break Ed;
case 0xb1:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = xa[Fa];
Ha = Xb(5, xa[0], ga);
if (Ha == 0) {
xa[Fa] = xa[Ga];
} else {
xa[0] = ga;
}
} else {
fa = Pb(Ea);
ga = qb();
Ha = Xb(5, xa[0], ga);
if (Ha == 0) {
wb(xa[Ga]);
} else {
xa[0] = ga;
}
}
break Ed;
case 0xa0:
case 0xa8:
wd(wa.segs[(b >> 3) & 7].selector);
break Ed;
case 0xa1:
case 0xa9:
Ge((b >> 3) & 7, zd() & 0xffff);
Ad();
break Ed;
case 0xc8:
case 0xc9:
case 0xca:
case 0xcb:
case 0xcc:
case 0xcd:
case 0xce:
case 0xcf:
Ga = b & 7;
ga = xa[Ga];
ga = (ga >>> 24) | ((ga >> 8) & 0x0000ff00) | ((ga << 8) & 0x00ff0000) | (ga << 24);
xa[Ga] = ga;
break Ed;
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 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:
Cc(6);
}
break;
default:
switch (b) {
case 0x189:
Ea = Ta[Kb++];;
ga = xa[(Ea >> 3) & 7];
if ((Ea >> 6) == 3) {
Wb(Ea & 7, ga);
} else {
fa = Pb(Ea);
ub(ga);
}
break Ed;
case 0x18b:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = ib();
}
Wb((Ea >> 3) & 7, ga);
break Ed;
case 0x1b8:
case 0x1b9:
case 0x1ba:
case 0x1bb:
case 0x1bc:
case 0x1bd:
case 0x1be:
case 0x1bf:
Wb(b & 7, Ob());
break Ed;
case 0x1a1:
fa = Ub();
ga = ib();
Wb(0, ga);
break Ed;
case 0x1a3:
fa = Ub();
ub(xa[0]);
break Ed;
case 0x1c7:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) {
ga = Ob();
Wb(Ea & 7, ga);
} else {
fa = Pb(Ea);
ga = Ob();
ub(ga);
}
break Ed;
case 0x191:
case 0x192:
case 0x193:
case 0x194:
case 0x195:
case 0x196:
case 0x197:
Ga = b & 7;
ga = xa[0];
Wb(0, xa[Ga]);
Wb(Ga, ga);
break Ed;
case 0x187:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = xa[Fa];
Wb(Fa, xa[Ga]);
} else {
fa = Pb(Ea);
ga = ob();
ub(xa[Ga]);
}
Wb(Ga, ga);
break Ed;
case 0x1c4:
Rf(0);
break Ed;
case 0x1c5:
Rf(3);
break Ed;
case 0x101:
case 0x109:
case 0x111:
case 0x119:
case 0x121:
case 0x129:
case 0x131:
case 0x139:
Ea = Ta[Kb++];;
Ja = (b >> 3) & 7;
Ha = xa[(Ea >> 3) & 7];
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Wb(Fa, cc(Ja, xa[Fa], Ha));
} else {
fa = Pb(Ea);
if (Ja != 7) {
ga = ob();
ga = cc(Ja, ga, Ha);
ub(ga);
} else {
ga = ib();
cc(7, ga, Ha);
}
}
break Ed;
case 0x103:
case 0x10b:
case 0x113:
case 0x11b:
case 0x123:
case 0x12b:
case 0x133:
case 0x13b:
Ea = Ta[Kb++];;
Ja = (b >> 3) & 7;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = xa[Ea & 7];
} else {
fa = Pb(Ea);
Ha = ib();
}
Wb(Ga, cc(Ja, xa[Ga], Ha));
break Ed;
case 0x105:
case 0x10d:
case 0x115:
case 0x11d:
case 0x125:
case 0x12d:
case 0x135:
case 0x13d:
Ha = Ob();
Ja = (b >> 3) & 7;
Wb(0, cc(Ja, xa[0], Ha));
break Ed;
case 0x181:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Ha = Ob();
xa[Fa] = cc(Ja, xa[Fa], Ha);
} else {
fa = Pb(Ea);
Ha = Ob();
if (Ja != 7) {
ga = ob();
ga = cc(Ja, ga, Ha);
ub(ga);
} else {
ga = ib();
cc(7, ga, Ha);
}
}
break Ed;
case 0x183:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Ha = ((Ta[Kb++] << 24) >> 24);;
Wb(Fa, cc(Ja, xa[Fa], Ha));
} else {
fa = Pb(Ea);
Ha = ((Ta[Kb++] << 24) >> 24);;
if (Ja != 7) {
ga = ob();
ga = cc(Ja, ga, Ha);
ub(ga);
} else {
ga = ib();
cc(7, ga, Ha);
}
}
break Ed;
case 0x140:
case 0x141:
case 0x142:
case 0x143:
case 0x144:
case 0x145:
case 0x146:
case 0x147:
Ga = b & 7;
Wb(Ga, dc(xa[Ga]));
break Ed;
case 0x148:
case 0x149:
case 0x14a:
case 0x14b:
case 0x14c:
case 0x14d:
case 0x14e:
case 0x14f:
Ga = b & 7;
Wb(Ga, ec(xa[Ga]));
break Ed;
case 0x16b:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = xa[Ea & 7];
} else {
fa = Pb(Ea);
Ha = ib();
}
Ia = ((Ta[Kb++] << 24) >> 24);;
Wb(Ga, Qc(Ha, Ia));
break Ed;
case 0x169:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = xa[Ea & 7];
} else {
fa = Pb(Ea);
Ha = ib();
}
Ia = Ob();
Wb(Ga, Qc(Ha, Ia));
break Ed;
case 0x185:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = ib();
}
Ha = xa[(Ea >> 3) & 7]; {
za = (((ga & Ha) << 16) >> 16);
Aa = 13;
};
break Ed;
case 0x1a9:
Ha = Ob(); {
za = (((xa[0] & Ha) << 16) >> 16);
Aa = 13;
};
break Ed;
case 0x1f7:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
switch (Ja) {
case 0:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = ib();
}
Ha = Ob(); {
za = (((ga & Ha) << 16) >> 16);
Aa = 13;
};
break;
case 2:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Wb(Fa, ~xa[Fa]);
} else {
fa = Pb(Ea);
ga = ob();
ga = ~ga;
ub(ga);
}
break;
case 3:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Wb(Fa, cc(5, 0, xa[Fa]));
} else {
fa = Pb(Ea);
ga = ob();
ga = cc(5, 0, ga);
ub(ga);
}
break;
case 4:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = ib();
}
ga = Pc(xa[0], ga);
Wb(0, ga);
Wb(2, ga >> 16);
break;
case 5:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = ib();
}
ga = Qc(xa[0], ga);
Wb(0, ga);
Wb(2, ga >> 16);
break;
case 6:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = ib();
}
Ec(ga);
break;
case 7:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = ib();
}
Fc(ga);
break;
default:
Cc(6);
}
break Ed;
case 0x1c1:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = Ta[Kb++];;
Fa = Ea & 7;
Wb(Fa, lc(Ja, xa[Fa], Ha));
} else {
fa = Pb(Ea);
Ha = Ta[Kb++];;
ga = ob();
ga = lc(Ja, ga, Ha);
ub(ga);
}
break Ed;
case 0x1d1:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Wb(Fa, lc(Ja, xa[Fa], 1));
} else {
fa = Pb(Ea);
ga = ob();
ga = lc(Ja, ga, 1);
ub(ga);
}
break Ed;
case 0x1d3:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
Ha = xa[1] & 0xff;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Wb(Fa, lc(Ja, xa[Fa], Ha));
} else {
fa = Pb(Ea);
ga = ob();
ga = lc(Ja, ga, Ha);
ub(ga);
}
break Ed;
case 0x198:
Wb(0, (xa[0] << 24) >> 24);
break Ed;
case 0x199:
Wb(2, (xa[0] << 16) >> 31);
break Ed;
case 0x190:
break Ed;
case 0x150:
case 0x151:
case 0x152:
case 0x153:
case 0x154:
case 0x155:
case 0x156:
case 0x157:
ud(xa[b & 7]);
break Ed;
case 0x158:
case 0x159:
case 0x15a:
case 0x15b:
case 0x15c:
case 0x15d:
case 0x15e:
case 0x15f:
ga = xd();
yd();
Wb(b & 7, ga);
break Ed;
case 0x160:
Ff();
break Ed;
case 0x161:
Hf();
break Ed;
case 0x18f:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) {
ga = xd();
yd();
Wb(Ea & 7, ga);
} else {
ga = xd();
Ha = xa[4];
yd();
Ia = xa[4];
fa = Pb(Ea);
xa[4] = Ha;
ub(ga);
xa[4] = Ia;
}
break Ed;
case 0x168:
ga = Ob();
ud(ga);
break Ed;
case 0x16a:
ga = ((Ta[Kb++] << 24) >> 24);;
ud(ga);
break Ed;
case 0x1c8:
Lf();
break Ed;
case 0x1c9:
Jf();
break Ed;
case 0x106:
case 0x10e:
case 0x116:
case 0x11e:
ud(wa.segs[(b >> 3) & 3].selector);
break Ed;
case 0x107:
case 0x117:
case 0x11f:
Ge((b >> 3) & 3, xd());
yd();
break Ed;
case 0x18d:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) Cc(6);
Da = (Da & ~0x000f) | (6 + 1);
Wb((Ea >> 3) & 7, Pb(Ea));
break Ed;
case 0x1ff:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
switch (Ja) {
case 0:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Wb(Fa, dc(xa[Fa]));
} else {
fa = Pb(Ea);
ga = ob();
ga = dc(ga);
ub(ga);
}
break;
case 1:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Wb(Fa, ec(xa[Fa]));
} else {
fa = Pb(Ea);
ga = ob();
ga = ec(ga);
ub(ga);
}
break;
case 2:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7] & 0xffff;
} else {
fa = Pb(Ea);
ga = ib();
}
ud((Jb + Kb - Mb));
Jb = ga,
Kb = Mb = 0;
break;
case 4:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7] & 0xffff;
} else {
fa = Pb(Ea);
ga = ib();
}
Jb = ga,
Kb = Mb = 0;
break;
case 6:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = ib();
}
ud(ga);
break;
case 3:
case 5:
if ((Ea >> 6) == 3) Cc(6);
fa = Pb(Ea);
ga = ib();
fa = (fa + 2) >> 0;
Ha = ib();
if (Ja == 3) Ve(0, Ha, ga, (Jb + Kb - Mb));
else Me(Ha, ga);
break;
default:
Cc(6);
}
break Ed;
case 0x1eb:
ga = ((Ta[Kb++] << 24) >> 24);;
Jb = (Jb + Kb - Mb + ga) & 0xffff,
Kb = Mb = 0;
break Ed;
case 0x1e9:
ga = Ob();
Jb = (Jb + Kb - Mb + ga) & 0xffff,
Kb = Mb = 0;
break Ed;
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:
ga = ((Ta[Kb++] << 24) >> 24);;
Ha = ed(b & 0xf);
if (Ha) Jb = (Jb + Kb - Mb + ga) & 0xffff,
Kb = Mb = 0;
break Ed;
case 0x1c2:
Ha = (Ob() << 16) >> 16;
ga = xd();
xa[4] = (xa[4] & ~Pa) | ((xa[4] + 2 + Ha) & Pa);
Jb = ga,
Kb = Mb = 0;
break Ed;
case 0x1c3:
ga = xd();
yd();
Jb = ga,
Kb = Mb = 0;
break Ed;
case 0x1e8:
ga = Ob();
ud((Jb + Kb - Mb));
Jb = (Jb + Kb - Mb + ga) & 0xffff,
Kb = Mb = 0;
break Ed;
case 0x162:
Ef();
break Ed;
case 0x1a5:
hg();
break Ed;
case 0x1a7:
jg();
break Ed;
case 0x1ad:
kg();
break Ed;
case 0x1af:
lg();
break Ed;
case 0x1ab:
ig();
break Ed;
case 0x16d:
fg(); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0x16f:
gg(); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0x1e5:
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
ga = Ta[Kb++];;
Wb(0, wa.ld16_port(ga)); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0x1e7:
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
ga = Ta[Kb++];;
wa.st16_port(ga, xa[0] & 0xffff); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0x1ed:
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
Wb(0, wa.ld16_port(xa[2] & 0xffff)); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0x1ef:
Sa = (wa.eflags >> 12) & 3;
if (wa.cpl > Sa) Cc(13);
wa.st16_port(xa[2] & 0xffff, xa[0] & 0xffff); {
if (wa.hard_irq != 0 && (wa.eflags & 0x00000200)) break yg;
};
break Ed;
case 0x166:
case 0x167:
case 0x1f0:
case 0x1f2:
case 0x1f3:
case 0x126:
case 0x12e:
case 0x136:
case 0x13e:
case 0x164:
case 0x165:
case 0x100:
case 0x108:
case 0x110:
case 0x118:
case 0x120:
case 0x128:
case 0x130:
case 0x138:
case 0x102:
case 0x10a:
case 0x112:
case 0x11a:
case 0x122:
case 0x12a:
case 0x132:
case 0x13a:
case 0x104:
case 0x10c:
case 0x114:
case 0x11c:
case 0x124:
case 0x12c:
case 0x134:
case 0x13c:
case 0x1a0:
case 0x1a2:
case 0x1d8:
case 0x1d9:
case 0x1da:
case 0x1db:
case 0x1dc:
case 0x1dd:
case 0x1de:
case 0x1df:
case 0x184:
case 0x1a8:
case 0x1f6:
case 0x1c0:
case 0x1d0:
case 0x1d2:
case 0x1fe:
case 0x1cd:
case 0x1ce:
case 0x1f5:
case 0x1f8:
case 0x1f9:
case 0x1fc:
case 0x1fd:
case 0x1fa:
case 0x1fb:
case 0x19e:
case 0x19f:
case 0x1f4:
case 0x127:
case 0x12f:
case 0x137:
case 0x13f:
case 0x1d4:
case 0x1d5:
case 0x16c:
case 0x16e:
case 0x1a4:
case 0x1a6:
case 0x1aa:
case 0x1ac:
case 0x1ae:
case 0x180:
case 0x182:
case 0x186:
case 0x188:
case 0x18a:
case 0x18c:
case 0x18e:
case 0x19b:
case 0x1b0:
case 0x1b1:
case 0x1b2:
case 0x1b3:
case 0x1b4:
case 0x1b5:
case 0x1b6:
case 0x1b7:
case 0x1c6:
case 0x1cc:
case 0x1d7:
case 0x1e4:
case 0x1e6:
case 0x1ec:
case 0x1ee:
case 0x1cf:
case 0x1ca:
case 0x1cb:
case 0x19a:
case 0x19c:
case 0x19d:
case 0x1ea:
case 0x1e0:
case 0x1e1:
case 0x1e2:
case 0x1e3:
b &= 0xff;
break;
case 0x163:
case 0x1d6:
case 0x1f1:
default:
Cc(6);
case 0x10f:
b = Ta[Kb++];;
b |= 0x0100;
switch (b) {
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:
ga = Ob();
if (ed(b & 0xf)) Jb = (Jb + Kb - Mb + ga) & 0xffff,
Kb = Mb = 0;
break Ed;
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:
Ea = Ta[Kb++];;
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
ga = ib();
}
if (ed(b & 0xf)) Wb((Ea >> 3) & 7, ga);
break Ed;
case 0x1b6:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = (xa[Fa & 3] >> ((Fa & 4) << 1)) & 0xff;
} else {
fa = Pb(Ea);
ga = gb();
}
Wb(Ga, ga);
break Ed;
case 0x1be:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = (xa[Fa & 3] >> ((Fa & 4) << 1));
} else {
fa = Pb(Ea);
ga = gb();
}
Wb(Ga, (((ga) << 24) >> 24));
break Ed;
case 0x1af:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = xa[Ea & 7];
} else {
fa = Pb(Ea);
Ha = ib();
}
Wb(Ga, Qc(xa[Ga], Ha));
break Ed;
case 0x1c1:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = xa[Fa];
Ha = cc(0, ga, xa[Ga]);
Wb(Ga, ga);
Wb(Fa, Ha);
} else {
fa = Pb(Ea);
ga = ob();
Ha = cc(0, ga, xa[Ga]);
ub(Ha);
Wb(Ga, ga);
}
break Ed;
case 0x1a0:
case 0x1a8:
ud(wa.segs[(b >> 3) & 7].selector);
break Ed;
case 0x1a1:
case 0x1a9:
Ge((b >> 3) & 7, xd());
yd();
break Ed;
case 0x1b2:
case 0x1b4:
case 0x1b5:
Rf(b & 7);
break Ed;
case 0x1a4:
case 0x1ac:
Ea = Ta[Kb++];;
Ha = xa[(Ea >> 3) & 7];
Ja = (b >> 3) & 1;
if ((Ea >> 6) == 3) {
Ia = Ta[Kb++];;
Fa = Ea & 7;
Wb(Fa, nc(Ja, xa[Fa], Ha, Ia));
} else {
fa = Pb(Ea);
Ia = Ta[Kb++];;
ga = ob();
ga = nc(Ja, ga, Ha, Ia);
ub(ga);
}
break Ed;
case 0x1a5:
case 0x1ad:
Ea = Ta[Kb++];;
Ha = xa[(Ea >> 3) & 7];
Ia = xa[1];
Ja = (b >> 3) & 1;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Wb(Fa, nc(Ja, xa[Fa], Ha, Ia));
} else {
fa = Pb(Ea);
ga = ob();
ga = nc(Ja, ga, Ha, Ia);
ub(ga);
}
break Ed;
case 0x1ba:
Ea = Ta[Kb++];;
Ja = (Ea >> 3) & 7;
switch (Ja) {
case 4:
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
Ha = Ta[Kb++];;
} else {
fa = Pb(Ea);
Ha = Ta[Kb++];;
ga = ib();
}
sc(ga, Ha);
break;
case 5:
case 6:
case 7:
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Ha = Ta[Kb++];;
xa[Fa] = uc(Ja & 3, xa[Fa], Ha);
} else {
fa = Pb(Ea);
Ha = Ta[Kb++];;
ga = ob();
ga = uc(Ja & 3, ga, Ha);
ub(ga);
}
break;
default:
Cc(6);
}
break Ed;
case 0x1a3:
Ea = Ta[Kb++];;
Ha = xa[(Ea >> 3) & 7];
if ((Ea >> 6) == 3) {
ga = xa[Ea & 7];
} else {
fa = Pb(Ea);
fa = (fa + (((Ha & 0xffff) >> 4) << 1)) >> 0;
ga = ib();
}
sc(ga, Ha);
break Ed;
case 0x1ab:
case 0x1b3:
case 0x1bb:
Ea = Ta[Kb++];;
Ha = xa[(Ea >> 3) & 7];
Ja = (b >> 3) & 3;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
Wb(Fa, uc(Ja, xa[Fa], Ha));
} else {
fa = Pb(Ea);
fa = (fa + (((Ha & 0xffff) >> 4) << 1)) >> 0;
ga = ob();
ga = uc(Ja, ga, Ha);
ub(ga);
}
break Ed;
case 0x1bc:
case 0x1bd:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Ha = xa[Ea & 7];
} else {
fa = Pb(Ea);
Ha = ib();
}
ga = xa[Ga];
if (b & 1) ga = zc(ga, Ha);
else ga = xc(ga, Ha);
Wb(Ga, ga);
break Ed;
case 0x1b1:
Ea = Ta[Kb++];;
Ga = (Ea >> 3) & 7;
if ((Ea >> 6) == 3) {
Fa = Ea & 7;
ga = xa[Fa];
Ha = cc(5, xa[0], ga);
if (Ha == 0) {
Wb(Fa, xa[Ga]);
} else {
Wb(0, ga);
}
} else {
fa = Pb(Ea);
ga = ob();
Ha = cc(5, xa[0], ga);
if (Ha == 0) {
ub(xa[Ga]);
} else {
Wb(0, ga);
}
}
break Ed;
case 0x100:
case 0x101:
case 0x102:
case 0x103:
case 0x120:
case 0x122:
case 0x106:
case 0x123:
case 0x1a2:
case 0x131:
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 0x1b0:
b = 0x0f;
Kb--;
break;
case 0x104:
case 0x105:
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 0x121:
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 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 0x1a6:
case 0x1a7:
case 0x1aa:
case 0x1ae:
case 0x1b7:
case 0x1b8:
case 0x1b9:
case 0x1bf:
case 0x1c0:
default:
Cc(6);
}
break;
}
}
}
} while (-- Ka );
this.cycle_count += (ua - Ka);
this.eip = (Jb + Kb - Mb);
this.cc_src = ya;
this.cc_dst = za;
this.cc_op = Aa;
this.cc_op2 = Ba;
this.cc_dst2 = Ca;
return La;
};
CPU_X86.prototype.exec = function(ua) {
var Ag, La, Bg, va;
Bg = this.cycle_count + ua;
La = 256;
va = null;
while (this.cycle_count < Bg) {
try {
La = this.exec_internal(Bg - this.cycle_count, va);
if (La != 256) break;
va = null;
} catch(Cg) {
if (Cg.hasOwnProperty("intno")) {
va = Cg;
} else {
throw Cg;
}
}
}
return La;
};
CPU_X86.prototype.load_binary = function(Dg, fa, Eg) {
var Fg, wa;
wa = this;
Fg = function(Gg, ng) {
var i;
if (ng < 0) {
Eg(ng);
} else {
if (typeof Gg == "string") {
for (i = 0; i < ng; i++) {
wa.st8_phys(fa + i, Gg.charCodeAt(i));
}
} else {
for (i = 0; i < ng; i++) {
wa.st8_phys(fa + i, Gg[i]);
}
}
Eg(ng);
}
};
load_binary(Dg, Fg);
};
function Hg(a) {
return ((a / 10) << 4) | (a % 10);
}
function Ig(n) {
return new Uint8Array(n);
}
function Jg(Kg) {
var Lg, d;
Lg = Ig(128);
this.cmos_data = Lg;
this.cmos_index = 0;
d = new Date();
Lg[0] = Hg(d.getUTCSeconds());
Lg[2] = Hg(d.getUTCMinutes());
Lg[4] = Hg(d.getUTCHours());
Lg[6] = Hg(d.getUTCDay());
Lg[7] = Hg(d.getUTCDate());
Lg[8] = Hg(d.getUTCMonth() + 1);
Lg[9] = Hg(d.getUTCFullYear() % 100);
Lg[10] = 0x26;
Lg[11] = 0x02;
Lg[12] = 0x00;
Lg[13] = 0x80;
Lg[0x14] = 0x02;
Kg.register_ioport_write(0x70, 2, 1, this.ioport_write.bind(this));
Kg.register_ioport_read(0x70, 2, 1, this.ioport_read.bind(this));
}
Jg.prototype.ioport_write = function(fa, Gg) {
if (fa == 0x70) {
this.cmos_index = Gg & 0x7f;
}
};
Jg.prototype.ioport_read = function(fa) {
var Mg;
if (fa == 0x70) {
return 0xff;
} else {
Mg = 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 Mg;
}
};
function Ng(Kg, Vf) {
Kg.register_ioport_write(Vf, 2, 1, this.ioport_write.bind(this));
Kg.register_ioport_read(Vf, 2, 1, this.ioport_read.bind(this));
this.reset();
}
Ng.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;
};
Ng.prototype.set_irq1 = function(Og, Mf) {
var vc;
vc = 1 << Og;
if (Mf) {
if ((this.last_irr & vc) == 0) this.irr |= vc;
this.last_irr |= vc;
} else {
this.last_irr &= ~vc;
}
};
Ng.prototype.get_priority = function(vc) {
var Pg;
if (vc == 0) return - 1;
Pg = 7;
while ((vc & (1 << ((Pg + this.priority_add) & 7))) == 0) Pg--;
return Pg;
};
Ng.prototype.get_irq = function() {
var vc, Qg, Pg;
vc = this.irr & ~this.imr;
Pg = this.get_priority(vc);
if (Pg < 0) return - 1;
Qg = this.get_priority(this.isr);
if (Pg > Qg) {
return Pg;
} else {
return - 1;
}
};
Ng.prototype.intack = function(Og) {
if (this.auto_eoi) {
if (this.rotate_on_auto_eoi) this.priority_add = (Og + 1) & 7;
} else {
this.isr |= (1 << Og);
}
if (! (this.elcr & (1 << Og))) this.irr &= ~ (1 << Og);
};
Ng.prototype.ioport_write = function(fa, ga) {
var Pg;
fa &= 1;
if (fa == 0) {
if (ga & 0x10) {
this.reset();
this.init_state = 1;
this.init4 = ga & 1;
if (ga & 0x02) throw "single mode not supported";
if (ga & 0x08) throw "level sensitive irq not supported";
} else if (ga & 0x08) {
if (ga & 0x02) this.read_reg_select = ga & 1;
if (ga & 0x40) this.special_mask = (ga >> 5) & 1;
} else {
switch (ga) {
case 0x00:
case 0x80:
this.rotate_on_autoeoi = ga >> 7;
break;
case 0x20:
case 0xa0:
Pg = this.get_priority(this.isr);
if (Pg >= 0) {
this.isr &= ~ (1 << ((Pg + this.priority_add) & 7));
}
if (ga == 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:
Pg = ga & 7;
this.isr &= ~ (1 << Pg);
break;
case 0xc0:
case 0xc1:
case 0xc2:
case 0xc3:
case 0xc4:
case 0xc5:
case 0xc6:
case 0xc7:
this.priority_add = (ga + 1) & 7;
break;
case 0xe0:
case 0xe1:
case 0xe2:
case 0xe3:
case 0xe4:
case 0xe5:
case 0xe6:
case 0xe7:
Pg = ga & 7;
this.isr &= ~ (1 << Pg);
this.priority_add = (Pg + 1) & 7;
break;
}
}
} else {
switch (this.init_state) {
case 0:
this.imr = ga;
this.update_irq();
break;
case 1:
this.irq_base = ga & 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 = (ga >> 1) & 1;
this.init_state = 0;
break;
}
}
};
Ng.prototype.ioport_read = function(Rg) {
var fa, Mg;
fa = Rg & 1;
if (fa == 0) {
if (this.read_reg_select) Mg = this.isr;
else Mg = this.irr;
} else {
Mg = this.imr;
}
return Mg;
};
function Sg(Kg, Tg, Rg, Ug) {
this.pics = new Array();
this.pics[0] = new Ng(Kg, Tg);
this.pics[1] = new Ng(Kg, Rg);
this.pics[0].elcr_mask = 0xf8;
this.pics[1].elcr_mask = 0xde;
this.irq_requested = 0;
this.cpu_set_irq = Ug;
this.pics[0].update_irq = this.update_irq.bind(this);
this.pics[1].update_irq = this.update_irq.bind(this);
}
Sg.prototype.update_irq = function() {
var Vg, Og;
Vg = this.pics[1].get_irq();
if (Vg >= 0) {
this.pics[0].set_irq1(2, 1);
this.pics[0].set_irq1(2, 0);
}
Og = this.pics[0].get_irq();
if (Og >= 0) {
this.cpu_set_irq(1);
} else {
this.cpu_set_irq(0);
}
};
Sg.prototype.set_irq = function(Og, Mf) {
this.pics[Og >> 3].set_irq1(Og & 7, Mf);
this.update_irq();
};
Sg.prototype.get_hard_intno = function() {
var Og, Vg, intno;
Og = this.pics[0].get_irq();
if (Og >= 0) {
this.pics[0].intack(Og);
if (Og == 2) {
Vg = this.pics[1].get_irq();
if (Vg >= 0) {
this.pics[1].intack(Vg);
} else {
Vg = 7;
}
intno = this.pics[1].irq_base + Vg;
Og = Vg + 8;
} else {
intno = this.pics[0].irq_base + Og;
}
} else {
Og = 7;
intno = this.pics[0].irq_base + Og;
}
this.update_irq();
return intno;
};
function Wg(Kg, Xg, Yg) {
var s, i;
this.pit_channels = new Array();
for (i = 0; i < 3; i++) {
s = new Zg(Yg);
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 = Xg;
Kg.register_ioport_write(0x40, 4, 1, this.ioport_write.bind(this));
Kg.register_ioport_read(0x40, 3, 1, this.ioport_read.bind(this));
Kg.register_ioport_read(0x61, 1, 1, this.speaker_ioport_read.bind(this));
Kg.register_ioport_write(0x61, 1, 1, this.speaker_ioport_write.bind(this));
}
function Zg(Yg) {
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 = Yg;
this.pit_time_unit = 1193182 / 2000000;
}
Zg.prototype.get_time = function() {
return Math.floor(this.get_ticks() * this.pit_time_unit);
};
Zg.prototype.pit_get_count = function() {
var d, ah;
d = this.get_time() - this.count_load_time;
switch (this.mode) {
case 0:
case 1:
case 4:
case 5:
ah = (this.count - d) & 0xffff;
break;
default:
ah = this.count - (d % this.count);
break;
}
return ah;
};
Zg.prototype.pit_get_out = function() {
var d, bh;
d = this.get_time() - this.count_load_time;
switch (this.mode) {
default:
case 0:
bh = (d >= this.count) >> 0;
break;
case 1:
bh = (d < this.count) >> 0;
break;
case 2:
if ((d % this.count) == 0 && d != 0) bh = 1;
else bh = 0;
break;
case 3:
bh = ((d % this.count) < (this.count >> 1)) >> 0;
break;
case 4:
case 5:
bh = (d == this.count) >> 0;
break;
}
return bh;
};
Zg.prototype.get_next_transition_time = function() {
var d, ch, base, dh;
d = this.get_time() - this.count_load_time;
switch (this.mode) {
default:
case 0:
case 1:
if (d < this.count) ch = this.count;
else return - 1;
break;
case 2:
base = (d / this.count) * this.count;
if ((d - base) == 0 && d != 0) ch = base + this.count;
else ch = base + this.count + 1;
break;
case 3:
base = (d / this.count) * this.count;
dh = ((this.count + 1) >> 1);
if ((d - base) < dh) ch = base + dh;
else ch = base + this.count;
break;
case 4:
case 5:
if (d < this.count) ch = this.count;
else if (d == this.count) ch = this.count + 1;
else return - 1;
break;
}
ch = this.count_load_time + ch;
return ch;
};
Zg.prototype.pit_load_count = function(ga) {
if (ga == 0) ga = 0x10000;
this.count_load_time = this.get_time();
this.count = ga;
};
Wg.prototype.ioport_write = function(fa, ga) {
var eh, fh, s;
fa &= 3;
if (fa == 3) {
eh = ga >> 6;
if (eh == 3) return;
s = this.pit_channels[eh];
fh = (ga >> 4) & 3;
switch (fh) {
case 0:
s.latched_count = s.pit_get_count();
s.rw_state = 4;
break;
default:
s.mode = (ga >> 1) & 7;
s.bcd = ga & 1;
s.rw_state = fh - 1 + 0;
break;
}
} else {
s = this.pit_channels[fa];
switch (s.rw_state) {
case 0:
s.pit_load_count(ga);
break;
case 1:
s.pit_load_count(ga << 8);
break;
case 2:
case 3:
if (s.rw_state & 1) {
s.pit_load_count((s.latched_count & 0xff) | (ga << 8));
} else {
s.latched_count = ga;
}
s.rw_state ^= 1;
break;
}
}
};
Wg.prototype.ioport_read = function(fa) {
var Mg, ma, s;
fa &= 3;
s = this.pit_channels[fa];
switch (s.rw_state) {
case 0:
case 1:
case 2:
case 3:
ma = s.pit_get_count();
if (s.rw_state & 1) Mg = (ma >> 8) & 0xff;
else Mg = ma & 0xff;
if (s.rw_state & 2) s.rw_state ^= 1;
break;
default:
case 4:
case 5:
if (s.rw_state & 1) Mg = s.latched_count >> 8;
else Mg = s.latched_count & 0xff;
s.rw_state ^= 1;
break;
}
return Mg;
};
Wg.prototype.speaker_ioport_write = function(fa, ga) {
this.speaker_data_on = (ga >> 1) & 1;
this.pit_channels[2].gate = ga & 1;
};
Wg.prototype.speaker_ioport_read = function(fa) {
var bh, s, ga;
s = this.pit_channels[2];
bh = s.pit_get_out();
ga = (this.speaker_data_on << 1) | s.gate | (bh << 5);
return ga;
};
Wg.prototype.update_irq = function() {
this.set_irq(1);
this.set_irq(0);
};
function gh(Kg, fa, hh, ih) {
this.divider = 0;
this.rbr = 0;
this.ier = 0;
this.iir = 0x01;
this.lcr = 0;
this.mcr = 0;
this.lsr = 0x40 | 0x20;
this.msr = 0;
this.scr = 0;
this.fcr = 0;
this.set_irq_func = hh;
this.write_func = ih;
this.tx_fifo = "";
this.rx_fifo = "";
Kg.register_ioport_write(0x3f8, 8, 1, this.ioport_write.bind(this));
Kg.register_ioport_read(0x3f8, 8, 1, this.ioport_read.bind(this));
}
gh.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);
}
};
gh.prototype.write_tx_fifo = function() {
if (this.tx_fifo != "") {
this.write_func(this.tx_fifo);
this.tx_fifo = "";
this.lsr |= 0x20;
this.lsr |= 0x40;
this.update_irq();
}
};
gh.prototype.ioport_write = function(fa, ga) {
fa &= 7;
switch (fa) {
default:
case 0:
if (this.lcr & 0x80) {
this.divider = (this.divider & 0xff00) | ga;
} else {
if (this.fcr & 0x01) {
this.tx_fifo += String.fromCharCode(ga);
this.lsr &= ~0x20;
this.update_irq();
if (this.tx_fifo.length >= 16) {
this.write_tx_fifo();
}
} else {
this.lsr &= ~0x20;
this.update_irq();
this.write_func(String.fromCharCode(ga));
this.lsr |= 0x20;
this.lsr |= 0x40;
this.update_irq();
}
}
break;
case 1:
if (this.lcr & 0x80) {
this.divider = (this.divider & 0x00ff) | (ga << 8);
} else {
this.ier = ga;
this.update_irq();
}
break;
case 2:
if ((this.fcr ^ ga) & 0x01) {
ga |= 0x04 | 0x02;
}
if (ga & 0x04) this.tx_fifo = "";
if (ga & 0x02) this.rx_fifo = "";
this.fcr = ga & 0x01;
break;
case 3:
this.lcr = ga;
break;
case 4:
this.mcr = ga;
break;
case 5:
break;
case 6:
this.msr = ga;
break;
case 7:
this.scr = ga;
break;
}
};
gh.prototype.ioport_read = function(fa) {
var Mg;
fa &= 7;
switch (fa) {
default:
case 0:
if (this.lcr & 0x80) {
Mg = this.divider & 0xff;
} else {
Mg = this.rbr;
this.lsr &= ~ (0x01 | 0x10);
this.update_irq();
this.send_char_from_fifo();
}
break;
case 1:
if (this.lcr & 0x80) {
Mg = (this.divider >> 8) & 0xff;
} else {
Mg = this.ier;
}
break;
case 2:
Mg = this.iir;
if (this.fcr & 0x01) Mg |= 0xC0;
break;
case 3:
Mg = this.lcr;
break;
case 4:
Mg = this.mcr;
break;
case 5:
Mg = this.lsr;
break;
case 6:
Mg = this.msr;
break;
case 7:
Mg = this.scr;
break;
}
return Mg;
};
gh.prototype.send_break = function() {
this.rbr = 0;
this.lsr |= 0x10 | 0x01;
this.update_irq();
};
gh.prototype.send_char = function(jh) {
this.rbr = jh;
this.lsr |= 0x01;
this.update_irq();
};
gh.prototype.send_char_from_fifo = function() {
var kh;
kh = this.rx_fifo;
if (kh != "" && !(this.lsr & 0x01)) {
this.send_char(kh.charCodeAt(0));
this.rx_fifo = kh.substr(1, kh.length - 1);
}
};
gh.prototype.send_chars = function(na) {
this.rx_fifo += na;
this.send_char_from_fifo();
};
function lh(Kg, mh) {
Kg.register_ioport_read(0x64, 1, 1, this.read_status.bind(this));
Kg.register_ioport_write(0x64, 1, 1, this.write_command.bind(this));
this.reset_request = mh;
}
lh.prototype.read_status = function(fa) {
return 0;
};
lh.prototype.write_command = function(fa, ga) {
switch (ga) {
case 0xfe:
this.reset_request();
break;
default:
break;
}
};
function nh(Kg, Vf, oh, ih, ph) {
Kg.register_ioport_read(Vf, 16, 4, this.ioport_readl.bind(this));
Kg.register_ioport_write(Vf, 16, 4, this.ioport_writel.bind(this));
Kg.register_ioport_read(Vf + 8, 1, 1, this.ioport_readb.bind(this));
Kg.register_ioport_write(Vf + 8, 1, 1, this.ioport_writeb.bind(this));
this.cur_pos = 0;
this.doc_str = "";
this.read_func = oh;
this.write_func = ih;
this.get_boot_time = ph;
}
nh.prototype.ioport_writeb = function(fa, ga) {
this.doc_str += String.fromCharCode(ga);
};
nh.prototype.ioport_readb = function(fa) {
var c, na, ga;
na = this.doc_str;
if (this.cur_pos < na.length) {
ga = na.charCodeAt(this.cur_pos) & 0xff;
} else {
ga = 0;
}
this.cur_pos++;
return ga;
};
nh.prototype.ioport_writel = function(fa, ga) {
var na;
fa = (fa >> 2) & 3;
switch (fa) {
case 0:
this.doc_str = this.doc_str.substr(0, ga >>> 0);
break;
case 1:
return this.cur_pos = ga >>> 0;
case 2:
na = String.fromCharCode(ga & 0xff) + String.fromCharCode((ga >> 8) & 0xff) + String.fromCharCode((ga >> 16) & 0xff) + String.fromCharCode((ga >> 24) & 0xff);
this.doc_str += na;
break;
case 3:
this.write_func(this.doc_str);
}
};
nh.prototype.ioport_readl = function(fa) {
var ga;
fa = (fa >> 2) & 3;
switch (fa) {
case 0:
this.doc_str = this.read_func();
return this.doc_str.length >> 0;
case 1:
return this.cur_pos >> 0;
case 2:
ga = this.ioport_readb(0);
ga |= this.ioport_readb(0) << 8;
ga |= this.ioport_readb(0) << 16;
ga |= this.ioport_readb(0) << 24;
return ga;
case 3:
if (this.get_boot_time) return this.get_boot_time() >> 0;
else return 0;
}
};
qh.prototype.identify = function() {
function rh(sh, v) {
th[sh * 2] = v & 0xff;
th[sh * 2 + 1] = (v >> 8) & 0xff;
}
function uh(sh, na, ng) {
var i, v;
for (i = 0; i < ng; i++) {
if (i < na.length) {
v = na.charCodeAt(i) & 0xff;
} else {
v = 32;
}
th[sh * 2 + (i ^ 1)] = v;
}
}
var th, i, vh;
th = this.io_buffer;
for (i = 0; i < 512; i++) th[i] = 0;
rh(0, 0x0040);
rh(1, this.cylinders);
rh(3, this.heads);
rh(4, 512 * this.sectors);
rh(5, 512);
rh(6, this.sectors);
rh(20, 3);
rh(21, 512);
rh(22, 4);
uh(27, "JSLinux HARDDISK", 40);
rh(47, 0x8000 | 128);
rh(48, 0);
rh(49, 1 << 9);
rh(51, 0x200);
rh(52, 0x200);
rh(54, this.cylinders);
rh(55, this.heads);
rh(56, this.sectors);
vh = this.cylinders * this.heads * this.sectors;
rh(57, vh);
rh(58, vh >> 16);
if (this.mult_sectors) rh(59, 0x100 | this.mult_sectors);
rh(60, this.nb_sectors);
rh(61, this.nb_sectors >> 16);
rh(80, (1 << 1) | (1 << 2));
rh(82, (1 << 14));
rh(83, (1 << 14));
rh(84, (1 << 14));
rh(85, (1 << 14));
rh(86, 0);
rh(87, (1 << 14));
};
qh.prototype.set_signature = function() {
this.select &= 0xf0;
this.nsector = 1;
this.sector = 1;
this.lcyl = 0;
this.hcyl = 0;
};
qh.prototype.abort_command = function() {
this.status = 0x40 | 0x01;
this.error = 0x04;
};
qh.prototype.set_irq = function() {
if (! (this.cmd & 0x02)) {
this.ide_if.set_irq_func(1);
}
};
qh.prototype.transfer_start = function(wh, xh) {
this.end_transfer_func = xh;
this.data_index = 0;
this.data_end = wh;
};
qh.prototype.transfer_stop = function() {
this.end_transfer_func = this.transfer_stop.bind(this);
this.data_index = 0;
this.data_end = 0;
};
qh.prototype.get_sector = function() {
var yh;
if (this.select & 0x40) {
yh = ((this.select & 0x0f) << 24) | (this.hcyl << 16) | (this.lcyl << 8) | this.sector;
} else {
yh = ((this.hcyl << 8) | this.lcyl) * this.heads * this.sectors + (this.select & 0x0f) * this.sectors + (this.sector - 1);
}
return yh;
};
qh.prototype.set_sector = function(yh) {
var zh, r;
if (this.select & 0x40) {
this.select = (this.select & 0xf0) | ((yh >> 24) & 0x0f);
this.hcyl = (yh >> 16) & 0xff;
this.lcyl = (yh >> 8) & 0xff;
this.sector = yh & 0xff;
} else {
zh = yh / (this.heads * this.sectors);
r = yh % (this.heads * this.sectors);
this.hcyl = (zh >> 8) & 0xff;
this.lcyl = zh & 0xff;
this.select = (this.select & 0xf0) | ((r / this.sectors) & 0x0f);
this.sector = (r % this.sectors) + 1;
}
};
qh.prototype.sector_read = function() {
var yh, n, Mg;
yh = this.get_sector();
n = this.nsector;
if (n == 0) n = 256;
if (n > this.req_nb_sectors) n = this.req_nb_sectors;
this.io_nb_sectors = n;
Mg = this.bs.read_async(yh, this.io_buffer, n, this.sector_read_cb.bind(this));
if (Mg < 0) {
this.abort_command();
this.set_irq();
} else if (Mg == 0) {
this.sector_read_cb();
} else {
this.status = 0x40 | 0x10 | 0x80;
this.error = 0;
}
};
qh.prototype.sector_read_cb = function() {
var n, Ah;
n = this.io_nb_sectors;
this.set_sector(this.get_sector() + n);
this.nsector = (this.nsector - n) & 0xff;
if (this.nsector == 0) Ah = this.sector_read_cb_end.bind(this);
else Ah = this.sector_read.bind(this);
this.transfer_start(512 * n, Ah);
this.set_irq();
this.status = 0x40 | 0x10 | 0x08;
this.error = 0;
};
qh.prototype.sector_read_cb_end = function() {
this.status = 0x40 | 0x10;
this.error = 0;
this.transfer_stop();
};
qh.prototype.sector_write_cb1 = function() {
var yh, Mg;
this.transfer_stop();
yh = this.get_sector();
Mg = this.bs.write_async(yh, this.io_buffer, this.io_nb_sectors, this.sector_write_cb2.bind(this));
if (Mg < 0) {
this.abort_command();
this.set_irq();
} else if (Mg == 0) {
this.sector_write_cb2();
} else {
this.status = 0x40 | 0x10 | 0x80;
}
};
qh.prototype.sector_write_cb2 = function() {
var n;
n = this.io_nb_sectors;
this.set_sector(this.get_sector() + n);
this.nsector = (this.nsector - n) & 0xff;
if (this.nsector == 0) {
this.status = 0x40 | 0x10;
} else {
n = this.nsector;
if (n > this.req_nb_sectors) n = this.req_nb_sectors;
this.io_nb_sectors = n;
this.transfer_start(512 * n, this.sector_write_cb1.bind(this));
this.status = 0x40 | 0x10 | 0x08;
}
this.set_irq();
};
qh.prototype.sector_write = function() {
var n;
n = this.nsector;
if (n == 0) n = 256;
if (n > this.req_nb_sectors) n = this.req_nb_sectors;
this.io_nb_sectors = n;
this.transfer_start(512 * n, this.sector_write_cb1.bind(this));
this.status = 0x40 | 0x10 | 0x08;
};
qh.prototype.identify_cb = function() {
this.transfer_stop();
this.status = 0x40;
};
qh.prototype.exec_cmd = function(ga) {
var n;
switch (ga) {
case 0xA1:
case 0xEC:
this.identify();
this.status = 0x40 | 0x10 | 0x08;
this.transfer_start(512, this.identify_cb.bind(this));
this.set_irq();
break;
case 0x91:
case 0x10:
this.error = 0;
this.status = 0x40 | 0x10;
this.set_irq();
break;
case 0xC6:
if (this.nsector > 128 || (this.nsector & (this.nsector - 1)) != 0) {
this.abort_command();
} else {
this.mult_sectors = this.nsector;
this.status = 0x40;
}
this.set_irq();
break;
case 0x20:
case 0x21:
this.req_nb_sectors = 1;
this.sector_read();
break;
case 0x30:
case 0x31:
this.req_nb_sectors = 1;
this.sector_write();
break;
case 0xC4:
if (!this.mult_sectors) {
this.abort_command();
this.set_irq();
} else {
this.req_nb_sectors = this.mult_sectors;
this.sector_read();
}
break;
case 0xC5:
if (!this.mult_sectors) {
this.abort_command();
this.set_irq();
} else {
this.req_nb_sectors = this.mult_sectors;
this.sector_write();
}
break;
case 0xF8:
this.set_sector(this.nb_sectors - 1);
this.status = 0x40;
this.set_irq();
break;
default:
this.abort_command();
this.set_irq();
break;
}
};
Bh.prototype.ioport_write = function(fa, ga) {
var s = this.cur_drive;
var Ch;
fa &= 7;
switch (fa) {
case 0:
break;
case 1:
if (s) {
s.feature = ga;
}
break;
case 2:
if (s) {
s.nsector = ga;
}
break;
case 3:
if (s) {
s.sector = ga;
}
break;
case 4:
if (s) {
s.lcyl = ga;
}
break;
case 5:
if (s) {
s.hcyl = ga;
}
break;
case 6:
s = this.cur_drive = this.drives[(ga >> 4) & 1];
if (s) {
s.select = ga;
}
break;
default:
case 7:
if (s) {
s.exec_cmd(ga);
}
break;
}
};
Bh.prototype.ioport_read = function(fa) {
var s = this.cur_drive;
var Mg;
fa &= 7;
if (!s) {
Mg = 0xff;
} else {
switch (fa) {
case 0:
Mg = 0xff;
break;
case 1:
Mg = s.error;
break;
case 2:
Mg = s.nsector;
break;
case 3:
Mg = s.sector;
break;
case 4:
Mg = s.lcyl;
break;
case 5:
Mg = s.hcyl;
break;
case 6:
Mg = s.select;
break;
default:
case 7:
Mg = s.status;
this.set_irq_func(0);
break;
}
}
return Mg;
};
Bh.prototype.status_read = function(fa) {
var s = this.cur_drive;
var Mg;
if (s) {
Mg = s.status;
} else {
Mg = 0;
}
return Mg;
};
Bh.prototype.cmd_write = function(fa, ga) {
var i, s;
if (! (this.cmd & 0x04) && (ga & 0x04)) {
for (i = 0; i < 2; i++) {
s = this.drives[i];
if (s) {
s.status = 0x80 | 0x10;
s.error = 0x01;
}
}
} else if ((this.cmd & 0x04) && !(ga & 0x04)) {
for (i = 0; i < 2; i++) {
s = this.drives[i];
if (s) {
s.status = 0x40 | 0x10;
s.set_signature();
}
}
}
for (i = 0; i < 2; i++) {
s = this.drives[i];
if (s) {
s.cmd = ga;
}
}
};
Bh.prototype.data_writew = function(fa, ga) {
var s = this.cur_drive;
var p, th;
if (!s) return;
p = s.data_index;
th = s.io_buffer;
th[p] = ga & 0xff;
th[p + 1] = (ga >> 8) & 0xff;
p += 2;
s.data_index = p;
if (p >= s.data_end) s.end_transfer_func();
};
Bh.prototype.data_readw = function(fa) {
var s = this.cur_drive;
var p, Mg, th;
if (!s) {
Mg = 0;
} else {
p = s.data_index;
th = s.io_buffer;
Mg = th[p] | (th[p + 1] << 8);
p += 2;
s.data_index = p;
if (p >= s.data_end) s.end_transfer_func();
}
return Mg;
};
Bh.prototype.data_writel = function(fa, ga) {
var s = this.cur_drive;
var p, th;
if (!s) return;
p = s.data_index;
th = s.io_buffer;
th[p] = ga & 0xff;
th[p + 1] = (ga >> 8) & 0xff;
th[p + 2] = (ga >> 16) & 0xff;
th[p + 3] = (ga >> 24) & 0xff;
p += 4;
s.data_index = p;
if (p >= s.data_end) s.end_transfer_func();
};
Bh.prototype.data_readl = function(fa) {
var s = this.cur_drive;
var p, Mg, th;
if (!s) {
Mg = 0;
} else {
p = s.data_index;
th = s.io_buffer;
Mg = th[p] | (th[p + 1] << 8) | (th[p + 2] << 16) | (th[p + 3] << 24);
p += 4;
s.data_index = p;
if (p >= s.data_end) s.end_transfer_func();
}
return Mg;
};
function qh(Dh, Eh) {
var Fh, Gh;
this.ide_if = Dh;
this.bs = Eh;
Gh = Eh.get_sector_count();
Fh = Gh / (16 * 63);
if (Fh > 16383) Fh = 16383;
else if (Fh < 2) Fh = 2;
this.cylinders = Fh;
this.heads = 16;
this.sectors = 63;
this.nb_sectors = Gh;
this.mult_sectors = 128;
this.feature = 0;
this.error = 0;
this.nsector = 0;
this.sector = 0;
this.lcyl = 0;
this.hcyl = 0;
this.select = 0xa0;
this.status = 0x40 | 0x10;
this.cmd = 0;
this.io_buffer = Ig(128 * 512 + 4);
this.data_index = 0;
this.data_end = 0;
this.end_transfer_func = this.transfer_stop.bind(this);
this.req_nb_sectors = 0;
this.io_nb_sectors = 0;
}
function Bh(Kg, fa, Hh, hh, Ih) {
var i, Jh;
this.set_irq_func = hh;
this.drives = [];
for (i = 0; i < 2; i++) {
if (Ih[i]) {
Jh = new qh(this, Ih[i]);
} else {
Jh = null;
}
this.drives[i] = Jh;
}
this.cur_drive = this.drives[0];
Kg.register_ioport_write(fa, 8, 1, this.ioport_write.bind(this));
Kg.register_ioport_read(fa, 8, 1, this.ioport_read.bind(this));
if (Hh) {
Kg.register_ioport_read(Hh, 1, 1, this.status_read.bind(this));
Kg.register_ioport_write(Hh, 1, 1, this.cmd_write.bind(this));
}
Kg.register_ioport_write(fa, 2, 2, this.data_writew.bind(this));
Kg.register_ioport_read(fa, 2, 2, this.data_readw.bind(this));
Kg.register_ioport_write(fa, 4, 4, this.data_writel.bind(this));
Kg.register_ioport_read(fa, 4, 4, this.data_readl.bind(this));
}
function Kh(Dg, Lh, Mh) {
if (Dg.indexOf("%d") < 0) throw "Invalid URL";
if (Mh <= 0 || Lh <= 0) throw "Invalid parameters";
this.block_sectors = Lh * 2;
this.nb_sectors = this.block_sectors * Mh;
this.url = Dg;
this.max_cache_size = Math.max(1, Math.ceil(2536 / Lh));
this.cache = new Array();
this.sector_num = 0;
this.sector_index = 0;
this.sector_count = 0;
this.sector_buf = null;
this.sector_cb = null;
}
Kh.prototype.get_sector_count = function() {
return this.nb_sectors;
};
Kh.prototype.get_time = function() {
return + new Date();
};
Kh.prototype.get_cached_block = function(Nh) {
var Oh, i, Ph = this.cache;
for (i = 0; i < Ph.length; i++) {
Oh = Ph[i];
if (Oh.block_num == Nh) return Oh;
}
return null;
};
Kh.prototype.new_cached_block = function(Nh) {
var Oh, Qh, i, j, Rh, Ph = this.cache;
Oh = new Object();
Oh.block_num = Nh;
Oh.time = this.get_time();
if (Ph.length < this.max_cache_size) {
j = Ph.length;
} else {
for (i = 0; i < Ph.length; i++) {
Qh = Ph[i];
if (i == 0 || Qh.time < Rh) {
Rh = Qh.time;
j = i;
}
}
}
Ph[j] = Oh;
return Oh;
};
Kh.prototype.get_url = function(Dg, Nh) {
var p, s;
s = Nh.toString();
while (s.length < 9) s = "0" + s;
p = Dg.indexOf("%d");
return Dg.substr(0, p) + s + Dg.substring(p + 2, Dg.length);
};
Kh.prototype.read_async_cb = function(Sh) {
var Nh, l, ue, Oh, i, Th, Uh, Vh, Wh;
var Xh, Dg;
while (this.sector_index < this.sector_count) {
Nh = Math.floor(this.sector_num / this.block_sectors);
Oh = this.get_cached_block(Nh);
if (Oh) {
ue = this.sector_num - Nh * this.block_sectors;
l = Math.min(this.sector_count - this.sector_index, this.block_sectors - ue);
Th = l * 512;
Uh = this.sector_buf;
Vh = this.sector_index * 512;
Wh = Oh.buf;
Xh = ue * 512;
for (i = 0; i < Th; i++) {
Uh[i + Vh] = Wh[i + Xh];
}
this.sector_index += l;
this.sector_num += l;
} else {
Dg = this.get_url(this.url, Nh);
load_binary(Dg, this.read_async_cb2.bind(this));
return;
}
}
this.sector_buf = null;
if (!Sh) {
this.sector_cb(0);
}
};
Kh.prototype.add_block = function(Nh, Gg, ng) {
var Oh, Yh, i;
Oh = this.new_cached_block(Nh);
Yh = Oh.buf = Ig(this.block_sectors * 512);
if (typeof Gg == "string") {
for (i = 0; i < ng; i++) Yh[i] = Gg.charCodeAt(i) & 0xff;
} else {
for (i = 0; i < ng; i++) Yh[i] = Gg[i];
}
};
Kh.prototype.read_async_cb2 = function(Gg, ng) {
var Nh;
if (ng < 0 || ng != (this.block_sectors * 512)) {
this.sector_cb( - 1);
} else {
Nh = Math.floor(this.sector_num / this.block_sectors);
this.add_block(Nh, Gg, ng);
this.read_async_cb(false);
}
};
Kh.prototype.read_async = function(yh, Yh, n, Zh) {
if ((yh + n) > this.nb_sectors) return - 1;
this.sector_num = yh;
this.sector_buf = Yh;
this.sector_index = 0;
this.sector_count = n;
this.sector_cb = Zh;
this.read_async_cb(true);
if (this.sector_index >= this.sector_count) {
return 0;
} else {
return 1;
}
};
Kh.prototype.preload = function(th, Eg) {
var i, Dg, Nh;
if (th.length == 0) {
setTimeout(Eg, 0);
} else {
this.preload_cb2 = Eg;
this.preload_count = th.length;
for (i = 0; i < th.length; i++) {
Nh = th[i];
Dg = this.get_url(this.url, Nh);
load_binary(Dg, this.preload_cb.bind(this, Nh));
}
}
};
Kh.prototype.preload_cb = function(Nh, Gg, ng) {
if (ng < 0) {} else {
this.add_block(Nh, Gg, ng);
this.preload_count--;
if (this.preload_count == 0) {
this.preload_cb2(0);
}
}
};
Kh.prototype.write_async = function(yh, Yh, n, Zh) {
return - 1;
};
ai.prototype.reset = function() {
this.isr = 0x80;
};
ai.prototype.update_irq = function() {
var bi;
bi = (this.isr & this.imr) & 0x7f;
if (bi) this.set_irq_func(1);
else this.set_irq_func(0);
};
ai.prototype.compute_mcast_idx = function(ci) {
var di, ac, i, j, b;
di = -1;
for (i = 0; i < 6; i++) {
b = ci[i];
for (j = 0; j < 8; j++) {
ac = (di >>> 31) ^ (b & 0x01);
di <<= 1;
b >>= 1;
if (ac) di = (di ^ 0x04c11db6) | ac;
}
}
return di >>> 26;
};
ai.prototype.buffer_full = function() {
var ei, Rb, fi;
Rb = this.curpag << 8;
fi = this.boundary << 8;
if (Rb < fi) ei = fi - Rb;
else ei = (this.stop - this.start) - (Rb - fi);
return (ei < (1514 + 4));
};
ai.prototype.receive_packet = function(Yh) {
var gi, hi, ng, Rb, ii, wh, ji, fa;
var ki, i;
wh = Yh.length;
if (this.cmd & 0x01 || this.buffer_full() || wh < 6) return;
if (this.rxcr & 0x10) {} else {
if (Yh[0] == 0xff && Yh[1] == 0xff && Yh[2] == 0xff && Yh[3] == 0xff && Yh[4] == 0xff && Yh[5] == 0xff) {
if (! (this.rxcr & 0x04)) return;
} else if (Yh[0] & 0x01) {
if (! (this.rxcr & 0x08)) return;
ii = li(Yh);
if (! (this.mult[ii >> 3] & (1 << (ii & 7)))) return;
} else if (this.phys[0] == Yh[0] && this.phys[1] == Yh[1] && this.phys[2] == Yh[2] && this.phys[3] == Yh[3] && this.phys[4] == Yh[4] && this.phys[5] == Yh[5]) {} else {
return;
}
}
if (wh < 60) wh = 60;
Rb = this.curpag << 8;
ji = this.mem;
gi = wh + 4;
hi = Rb + ((gi + 4 + 255) & ~0xff);
if (hi >= this.stop) hi -= (this.stop - this.start);
this.rsr = 0x01;
if (Yh[0] & 0x01) this.rsr |= 0x20;
fa = Rb & 0x7fff;
if (fa >= 0x4000) {
ji[fa] = this.rsr & 0xff;
ji[fa + 1] = (hi >> 8) & 0xff;
ji[fa + 2] = gi & 0xff;
ji[fa + 3] = (gi >> 8) & 0xff;
}
Rb += 4;
while (wh > 0) {
if (Rb >= this.stop) break;
ng = Math.min(wh, this.stop - Rb);
if (ki < Yh.length) ng = Math.min(ng, Yh.length - ki);
ng = Math.min(ng, 0x4000 - (Rb & 0x3fff));
fa = Rb & 0x7fff;
if (fa >= 0x4000) {
if (ki < Yh.length) {
for (i = 0; i < ng; i++) ji[fa + i] = Yh[ki + i];
} else {
for (i = 0; i < ng; i++) ji[fa + i] = 0;
}
}
ki += ng;
Rb += ng;
if (Rb == this.stop) Rb = this.start;
wh -= ng;
}
this.curpag = hi >> 8;
this.isr |= 0x01;
this.update_irq();
};
ai.prototype.send_packet = function() {
var Rb;
Rb = (this.tpsr << 8) & 0x7fff;
if (Rb + this.tcnt <= (32 * 1024)) {
this.send_packet_func(this.mem, Rb, this.tcnt);
}
this.tsr = 0x01;
this.isr |= 0x02;
this.cmd &= ~0x04;
this.update_irq();
};
ai.prototype.ioport_write = function(fa, ga) {
var ue, mi;
fa &= 0xf;
if (fa == 0x00) {
this.cmd = ga;
if (! (ga & 0x01)) {
this.isr &= ~0x80;
if ((ga & (0x08 | 0x10)) && this.rcnt == 0) {
this.isr |= 0x40;
this.update_irq();
}
if (ga & 0x04) {
this.send_packet();
}
}
} else {
mi = this.cmd >> 6;
ue = fa | (mi << 4);
switch (ue) {
case 0x01:
this.start = ga << 8;
break;
case 0x02:
this.stop = ga << 8;
break;
case 0x03:
this.boundary = ga;
break;
case 0x0f:
this.imr = ga;
this.update_irq();
break;
case 0x04:
this.tpsr = ga;
break;
case 0x05:
this.tcnt = (this.tcnt & 0xff00) | ga;
break;
case 0x06:
this.tcnt = (this.tcnt & 0x00ff) | (ga << 8);
break;
case 0x08:
this.rsar = (this.rsar & 0xff00) | ga;
break;
case 0x09:
this.rsar = (this.rsar & 0x00ff) | (ga << 8);
break;
case 0x0a:
this.rcnt = (this.rcnt & 0xff00) | ga;
break;
case 0x0b:
this.rcnt = (this.rcnt & 0x00ff) | (ga << 8);
break;
case 0x0c:
this.rxcr = ga;
break;
case 0x0e:
this.dcfg = ga;
break;
case 0x07:
this.isr &= ~ (ga & 0x7f);
this.update_irq();
break;
case 0x11:
case 0x11 + 1 : case 0x11 + 2 : case 0x11 + 3 : case 0x11 + 4 : case 0x11 + 5 : this.phys[ue - 0x11] = ga;
break;
case 0x17:
this.curpag = ga;
break;
case 0x18:
case 0x18 + 1 : case 0x18 + 2 : case 0x18 + 3 : case 0x18 + 4 : case 0x18 + 5 : case 0x18 + 6 : case 0x18 + 7 : this.mult[ue - 0x18] = ga;
break;
}
}
};
ai.prototype.ioport_read = function(fa) {
var ue, mi, Mg;
fa &= 0xf;
if (fa == 0x00) {
Mg = this.cmd;
} else {
mi = this.cmd >> 6;
ue = fa | (mi << 4);
switch (ue) {
case 0x04:
Mg = this.tsr;
break;
case 0x03:
Mg = this.boundary;
break;
case 0x07:
Mg = this.isr;
break;
case 0x08:
Mg = this.rsar & 0x00ff;
break;
case 0x09:
Mg = this.rsar >> 8;
break;
case 0x11:
case 0x11 + 1 : case 0x11 + 2 : case 0x11 + 3 : case 0x11 + 4 : case 0x11 + 5 : Mg = this.phys[ue - 0x11];
break;
case 0x17:
Mg = this.curpag;
break;
case 0x18:
case 0x18 + 1 : case 0x18 + 2 : case 0x18 + 3 : case 0x18 + 4 : case 0x18 + 5 : case 0x18 + 6 : case 0x18 + 7 : Mg = this.mult[ue - 0x18];
break;
case 0x0c:
Mg = this.rsr;
break;
case 0x21:
Mg = this.start >> 8;
break;
case 0x22:
Mg = this.stop >> 8;
break;
case 0x0a:
Mg = 0x50;
break;
case 0x0b:
Mg = 0x43;
break;
case 0x33:
Mg = 0;
break;
case 0x35:
Mg = 0x40;
break;
case 0x36:
Mg = 0x40;
break;
default:
Mg = 0x00;
break;
}
}
return Mg;
};
ai.prototype.dma_update = function(ng) {
this.rsar += ng;
if (this.rsar == this.stop) this.rsar = this.start;
if (this.rcnt <= ng) {
this.rcnt = 0;
this.isr |= 0x40;
this.update_irq();
} else {
this.rcnt -= ng;
}
};
ai.prototype.asic_ioport_write = function(fa, ga) {
var fa;
if (this.rcnt == 0) return;
if (this.dcfg & 0x01) {
fa = (this.rsar & ~1) & 0x7fff;
if (fa >= 0x4000) {
this.mem[fa] = ga & 0xff;
this.mem[fa + 1] = (ga >> 8) & 0xff;
}
this.dma_update(2);
} else {
fa = this.rsar & 0x7fff;
if (fa >= 0x4000) {
this.mem[fa] = ga & 0xff;
}
this.dma_update(1);
}
};
ai.prototype.asic_ioport_read = function(fa) {
var fa, Mg;
if (this.dcfg & 0x01) {
fa = (this.rsar & ~1) & 0x7fff;
Mg = this.mem[fa] | (this.mem[fa + 1] << 8);
this.dma_update(2);
} else {
fa = this.rsar & 0x7fff;
Mg = this.mem[fa];
this.dma_update(1);
}
return Mg;
};
ai.prototype.asic_ioport_writel = function(fa, ga) {
var fa;
if (this.rcnt == 0) return;
fa = (this.rsar & ~1) & 0x7fff;
if (fa >= 0x4000) {
this.mem[fa] = ga & 0xff;
this.mem[fa + 1] = (ga >> 8) & 0xff;
}
fa = (fa + 2) & 0x7fff;
if (fa >= 0x4000) {
this.mem[fa] = (ga >> 16) & 0xff;
this.mem[fa + 1] = (ga >> 24) & 0xff;
}
this.dma_update(4);
};
ai.prototype.asic_ioport_readl = function(fa) {
var fa, Mg;
fa = (this.rsar & ~1) & 0x7fff;
Mg = this.mem[fa] | (this.mem[fa + 1] << 8);
fa = (fa + 2) & 0x7fff;
Mg |= (this.mem[fa] << 16) | (this.mem[fa + 1] << 24);
this.dma_update(4);
return Mg;
};
ai.prototype.reset_ioport_write = function(fa, ga) {};
ai.prototype.reset_ioport_read = function(fa) {
this.reset();
};
function ai(Kg, base, hh, ni, oi) {
var i;
this.set_irq_func = hh;
this.send_packet_func = oi;
Kg.register_ioport_write(base, 16, 1, this.ioport_write.bind(this));
Kg.register_ioport_read(base, 16, 1, this.ioport_read.bind(this));
Kg.register_ioport_write(base + 0x10, 1, 1, this.asic_ioport_write.bind(this));
Kg.register_ioport_read(base + 0x10, 1, 1, this.asic_ioport_read.bind(this));
Kg.register_ioport_write(base + 0x10, 2, 2, this.asic_ioport_write.bind(this));
Kg.register_ioport_read(base + 0x10, 2, 2, this.asic_ioport_read.bind(this));
Kg.register_ioport_write(base + 0x1f, 1, 1, this.reset_ioport_write.bind(this));
Kg.register_ioport_read(base + 0x1f, 1, 1, this.reset_ioport_read.bind(this));
this.cmd = 0;
this.start = 0;
this.stop = 0;
this.boundary = 0;
this.tsr = 0;
this.tpsr = 0;
this.tcnt = 0;
this.rcnt = 0;
this.rsar = 0;
this.rsr = 0;
this.rxcr = 0;
this.isr = 0;
this.dcfg = 0;
this.imr = 0;
this.phys = Ig(6);
this.curpag = 0;
this.mult = Ig(8);
this.mem = Ig((32 * 1024));
for (i = 0; i < 6; i++) this.mem[i] = ni[i];
this.mem[14] = 0x57;
this.mem[15] = 0x57;
for (i = 15; i >= 0; i--) {
this.mem[2 * i] = this.mem[i];
this.mem[2 * i + 1] = this.mem[i];
}
this.reset();
}
function pi(Yh, Rb, ng) {
console.log("send packet len=" + ng);
}
function Ug(Mf) {
this.hard_irq = Mf;
}
function qi() {
return this.cycle_count;
}
function PCEmulator(ri) {
var wa, si, ti, i, p;
wa = new CPU_X86();
this.cpu = wa;
wa.phys_mem_resize(ri.mem_size);
this.init_ioports();
this.register_ioport_write(0x80, 1, 1, this.ioport80_write);
this.pic = new Sg(this, 0x20, 0xa0, Ug.bind(wa));
this.pit = new Wg(this, this.pic.set_irq.bind(this.pic, 0), qi.bind(wa));
this.cmos = new Jg(this);
this.serial = new gh(this, 0x3f8, this.pic.set_irq.bind(this.pic, 4), ri.serial_write);
this.kbd = new lh(this, this.reset.bind(this));
this.reset_request = 0;
ti = ["hda", "hdb"];
si = new Array();
for (i = 0; i < ti.length; i++) {
p = ri[ti[i]];
si[i] = null;
if (p) {
si[i] = new Kh(p.url, p.block_size, p.nb_blocks);
}
}
this.ide0 = new Bh(this, 0x1f0, 0x3f6, this.pic.set_irq.bind(this.pic, 14), si);
this.net0 = new ai(this, 0x300, this.pic.set_irq.bind(this.pic, 9), [0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa], pi);
if (ri.clipboard_get && ri.clipboard_set) {
this.jsclipboard = new nh(this, 0x3c0, ri.clipboard_get, ri.clipboard_set, ri.get_boot_time);
}
wa.ld8_port = this.ld8_port.bind(this);
wa.ld16_port = this.ld16_port.bind(this);
wa.ld32_port = this.ld32_port.bind(this);
wa.st8_port = this.st8_port.bind(this);
wa.st16_port = this.st16_port.bind(this);
wa.st32_port = this.st32_port.bind(this);
wa.get_hard_intno = this.pic.get_hard_intno.bind(this.pic);
}
PCEmulator.prototype.load_binary = function(Dg, ha, Eg) {
return this.cpu.load_binary(Dg, ha, Eg);
};
PCEmulator.prototype.start = function() {
setTimeout(this.timer_func.bind(this), 10);
};
PCEmulator.prototype.timer_func = function() {
var La, ui, vi, wi, xi, Kg, wa;
Kg = this;
wa = Kg.cpu;
vi = wa.cycle_count + 100000;
wi = false;
xi = false;
yi: while (wa.cycle_count < vi) {
Kg.serial.write_tx_fifo();
Kg.pit.update_irq();
La = wa.exec(vi - wa.cycle_count);
if (La == 256) {
if (Kg.reset_request) {
wi = true;
break;
}
} else if (La == 257) {
xi = true;
break;
} else {
wi = true;
break;
}
}
if (!wi) {
if (xi) {
setTimeout(this.timer_func.bind(this), 10);
} else {
setTimeout(this.timer_func.bind(this), 0);
}
}
};
PCEmulator.prototype.init_ioports = function() {
var i, zi, Ai;
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();
zi = this.default_ioport_readw.bind(this);
Ai = this.default_ioport_writew.bind(this);
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] = zi;
this.ioport_writew_table[i] = Ai;
this.ioport_readl_table[i] = this.default_ioport_readl;
this.ioport_writel_table[i] = this.default_ioport_writel;
}
};
PCEmulator.prototype.default_ioport_readb = function(Vf) {
var ga;
ga = 0xff;
return ga;
};
PCEmulator.prototype.default_ioport_readw = function(Vf) {
var ga;
ga = this.ioport_readb_table[Vf](Vf);
Vf = (Vf + 1) & (1024 - 1);
ga |= this.ioport_readb_table[Vf](Vf) << 8;
return ga;
};
PCEmulator.prototype.default_ioport_readl = function(Vf) {
var ga;
ga = -1;
return ga;
};
PCEmulator.prototype.default_ioport_writeb = function(Vf, ga) {};
PCEmulator.prototype.default_ioport_writew = function(Vf, ga) {
this.ioport_writeb_table[Vf](Vf, ga & 0xff);
Vf = (Vf + 1) & (1024 - 1);
this.ioport_writeb_table[Vf](Vf, (ga >> 8) & 0xff);
};
PCEmulator.prototype.default_ioport_writel = function(Vf, ga) {};
PCEmulator.prototype.ld8_port = function(Vf) {
var ga;
ga = this.ioport_readb_table[Vf & (1024 - 1)](Vf);
return ga;
};
PCEmulator.prototype.ld16_port = function(Vf) {
var ga;
ga = this.ioport_readw_table[Vf & (1024 - 1)](Vf);
return ga;
};
PCEmulator.prototype.ld32_port = function(Vf) {
var ga;
ga = this.ioport_readl_table[Vf & (1024 - 1)](Vf);
return ga;
};
PCEmulator.prototype.st8_port = function(Vf, ga) {
this.ioport_writeb_table[Vf & (1024 - 1)](Vf, ga);
};
PCEmulator.prototype.st16_port = function(Vf, ga) {
this.ioport_writew_table[Vf & (1024 - 1)](Vf, ga);
};
PCEmulator.prototype.st32_port = function(Vf, ga) {
this.ioport_writel_table[Vf & (1024 - 1)](Vf, ga);
};
PCEmulator.prototype.register_ioport_read = function(start, ng, wh, Ah) {
var i;
switch (wh) {
case 1:
for (i = start; i < start + ng; i++) {
this.ioport_readb_table[i] = Ah;
}
break;
case 2:
for (i = start; i < start + ng; i += 2) {
this.ioport_readw_table[i] = Ah;
}
break;
case 4:
for (i = start; i < start + ng; i += 4) {
this.ioport_readl_table[i] = Ah;
}
break;
}
};
PCEmulator.prototype.register_ioport_write = function(start, ng, wh, Ah) {
var i;
switch (wh) {
case 1:
for (i = start; i < start + ng; i++) {
this.ioport_writeb_table[i] = Ah;
}
break;
case 2:
for (i = start; i < start + ng; i += 2) {
this.ioport_writew_table[i] = Ah;
}
break;
case 4:
for (i = start; i < start + ng; i += 4) {
this.ioport_writel_table[i] = Ah;
}
break;
}
};
PCEmulator.prototype.ioport80_write = function(fa, Gg) {};
PCEmulator.prototype.reset = function() {
this.reset_request = 1;
};