blob: 007f9a330a9bae1c8d3e14f2507c4667bbf00982 [file] [log] [blame] [raw]
;(function(){'use strict';window.requestAnimationFrame || (window.requestAnimationFrame = window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame);
function ScreenAdapter(a, c) {
function d(a) {
a = a.toString(16);
return "#" + Array(7 - a.length).join("0") + a;
}
function e() {
for (var a = 0;a < B;a++) {
A[a] && (H.text_update_row(a), A[a] = 0);
}
this.timer();
}
function f() {
u < v && (m.putImageData(p, 0, 0, 0, u / C >> 2, C, ((v - u) / C >> 2) + 1), u = 1E7, v = 0);
this.timer();
}
function g(a, c, d) {
c = "" + (1 === c ? "" : " scaleX(" + c + ")") + (1 === d ? "" : " scaleY(" + d + ")");
a.style.webkitTransform = a.style.MozTransform = c;
}
console.assert(a, "1st argument must be a DOM container");
for (var k = a.getElementsByTagName("canvas")[0], m = k.getContext("2d"), l = k.nextElementSibling || k.previousElementSibling, n = document.createElement("div"), p, q, r, s, t, x = 1, D = 1, C, u = 0, v = 0, A, F = !1, w, z, B, H = this, I = new Uint16Array([199, 252, 233, 226, 228, 224, 229, 231, 234, 235, 232, 239, 238, 236, 196, 197, 201, 230, 198, 244, 246, 242, 251, 249, 255, 214, 220, 162, 163, 165, 8359, 402, 225, 237, 243, 250, 241, 209, 170, 186, 191, 8976, 172, 189, 188, 161, 171, 187,
9617, 9618, 9619, 9474, 9508, 9569, 9570, 9558, 9557, 9571, 9553, 9559, 9565, 9564, 9563, 9488, 9492, 9524, 9516, 9500, 9472, 9532, 9566, 9567, 9562, 9556, 9577, 9574, 9568, 9552, 9580, 9575, 9576, 9572, 9573, 9561, 9560, 9554, 9555, 9579, 9578, 9496, 9484, 9608, 9604, 9612, 9616, 9600, 945, 223, 915, 960, 931, 963, 181, 964, 934, 920, 937, 948, 8734, 966, 949, 8745, 8801, 177, 8805, 8804, 8992, 8993, 247, 8776, 176, 8729, 183, 8730, 8319, 178, 9632, 160]), J = new Uint16Array([32, 9786, 9787,
9829, 9830, 9827, 9824, 8226, 9688, 9675, 9689, 9794, 9792, 9834, 9835, 9788, 9658, 9668, 8597, 8252, 182, 167, 9644, 8616, 8593, 8595, 8594, 8592, 8735, 8596, 9650, 9660]), G = [], E, y = 0;256 > y;y++) {
127 < y ? E = I[y - 128] : 32 > y ? E = J[y] : E = y, G[y] = String.fromCharCode(E);
}
m.imageSmoothingEnabled = !1;
m.mozImageSmoothingEnabled = !1;
m.webkitImageSmoothingEnabled = !1;
n.style.position = "absolute";
n.style.backgroundColor = "#ccc";
n.style.width = "7px";
n.style.display = "inline-block";
l.style.display = "block";
k.style.display = "none";
this.bus = c;
c.register("screen-set-mode", function(a) {
this.set_mode(a);
}, this);
c.register("screen-put-pixel-linear", function(a) {
this.put_pixel_linear(a[0], a[1]);
}, this);
c.register("screen-put-pixel-linear32", function(a) {
this.put_pixel_linear32(a[0], a[1]);
}, this);
c.register("screen-put-char", function(a) {
this.put_char(a[0], a[1], a[2], a[3], a[4]);
}, this);
c.register("screen-update-cursor", function(a) {
this.update_cursor(a[0], a[1]);
}, this);
c.register("screen-update-cursor-scanline", function(a) {
this.update_cursor_scanline(a[0], a[1]);
}, this);
c.register("screen-set-size-text", function(a) {
this.set_size_text(a[0], a[1]);
}, this);
c.register("screen-set-size-graphical", function(a) {
this.set_size_graphical(a[0], a[1]);
}, this);
this.init = function() {
this.set_size_text(80, 25);
this.timer();
};
this.make_screenshot = function() {
try {
window.open(k.toDataURL());
} catch (a) {
}
};
this.put_char = function(a, c, d, f, e) {
a < B && c < z && (c = 3 * (a * z + c), w[c] = d, w[c + 1] = f, w[c + 2] = e, A[a] = 1);
};
this.timer = function() {
requestAnimationFrame(F ? f : e);
};
e = e.bind(this);
f = f.bind(this);
this.put_pixel_linear = function(a, c) {
a >= q.length || (u = a < u ? a : u, v = a > v ? a : v, q[a + 1 ^ 3] = c);
};
this.put_pixel_linear32 = function(a, c) {
u = a < u ? a : u;
v = a > v ? a : v;
r[a >> 2] = 4278190080 | c >> 16 & 255 | c << 16 | c & 65280;
};
this.destroy = function() {
};
this.set_mode = function(a) {
(F = a) ? (l.style.display = "none", k.style.display = "block") : (l.style.display = "block", k.style.display = "none");
};
this.set_size_text = function(a, c) {
if (a !== z && c !== B) {
A = new Int8Array(c);
w = new Int32Array(a * c * 3);
z = a;
for (B = c;l.childNodes.length > c;) {
l.removeChild(l.firstChild);
}
for (;l.childNodes.length < c;) {
l.appendChild(document.createElement("div"));
}
for (var d = 0;d < c;d++) {
this.text_update_row(d);
}
}
};
this.set_size_graphical = function(a, c) {
k.style.display = "block";
k.width = a;
k.height = c;
p = m.createImageData(a, c);
q = new Uint8Array(p.data.buffer);
r = new Int32Array(p.data.buffer);
for (var d = 3;d < q.length;d += 4) {
q[d] = 255;
}
C = a;
};
this.set_scale = function(a, c) {
x = a;
D = c;
g(k, x, D);
g(l, x, D);
};
this.set_scale(x, D);
this.update_cursor_scanline = function(a, c) {
a & 32 ? n.style.display = "none" : (n.style.display = "inline", n.style.height = Math.min(15, c - a) + "px", n.style.marginTop = Math.min(15, a) + "px");
};
this.update_cursor = function(a, c) {
if (a !== s || c !== t) {
A[a] = 1, A[s] = 1, s = a, t = c;
}
};
this.text_update_row = function(a) {
var c = 3 * a * z, f, e, g, k, m, p;
f = l.childNodes[a];
for (g = document.createDocumentFragment();f.firstChild;) {
f.removeChild(f.firstChild);
}
for (var q = 0;q < z;) {
e = document.createElement("span");
k = w[c + 1];
m = w[c + 2];
e.style.backgroundColor = d(k);
e.style.color = d(m);
for (p = "";q < z && w[c + 1] === k && w[c + 2] === m;) {
if (p += G[w[c]], q++, c += 3, a === s) {
if (q === t) {
break;
} else {
if (q === t + 1) {
g.appendChild(n);
break;
}
}
}
}
e.textContent = p;
g.appendChild(e);
}
f.appendChild(g);
};
this.init();
}
;function Virtio9p(a) {
this.fs = a;
this.SendReply = function() {
};
this.configspace = [6, 0, 104, 111, 115, 116, 57, 112];
this.msize = this.BLOCKSIZE = 8192;
this.replybuffer = new Uint8Array(2 * this.msize);
this.replybuffersize = 0;
this.fid2inode = [];
this.fidtype = [];
this._state_skip = ["fs", "SendReply"];
}
Virtio9p.prototype.BuildReply = function(a, c, d) {
Marshall(["w", "b", "h"], [d + 7, a + 1, c], this.replybuffer, 0);
this.replybuffersize = d + 7;
};
Virtio9p.prototype.SendError = function(a, c) {
var d = Marshall(["w"], [c], this.replybuffer, 7);
this.BuildReply(6, a, d);
};
Virtio9p.prototype.ReceiveRequest = function(a, c) {
var d = Unmarshall2(["w", "b", "h"], c), e = d[1], f = d[2];
switch(e) {
case 8:
var d = 1234567, g = [16914839];
g[1] = this.BLOCKSIZE;
g[2] = Math.floor(1073741824 / g[1]);
g[3] = g[2] - Math.floor(d / g[1]);
g[4] = g[2] - Math.floor(d / g[1]);
g[5] = this.fs.inodes.length;
g[6] = 1048576;
g[7] = 0;
g[8] = 256;
d = Marshall("wwddddddw".split(""), g, this.replybuffer, 7);
this.BuildReply(e, f, d);
this.SendReply(a);
break;
case 112:
;
case 12:
var g = Unmarshall2(["w", "w"], c), k = g[0], m = g[1], l = this.fs.GetInode(this.fid2inode[k]);
g[0] = l.qid;
g[1] = this.msize - 24;
Marshall(["Q", "w"], g, this.replybuffer, 7);
this.BuildReply(e, f, 17);
d = this.fs.OpenInode(this.fid2inode[k]);
this.fs.AddEvent(this.fid2inode[k], function() {
g[0] = l.qid;
g[1] = this.msize - 24;
Marshall(["Q", "w"], g, this.replybuffer, 7);
this.BuildReply(e, f, 17);
this.SendReply(a);
}.bind(this));
break;
case 70:
var g = Unmarshall2(["w", "w", "s"], c), m = g[0], k = g[1], d = g[2], l = this.fs.CreateInode(), n = this.fs.GetInode(this.fid2inode[k]), p = this.fs.inodedata[this.fid2inode[k]];
l.mode = n.mode;
l.size = n.size;
l.symlink = n.symlink;
for (var q = this.fs.inodedata[this.fs.inodes.length] = new Uint8Array(l.size), n = 0;n < l.size;n++) {
q[n] = p[n];
}
l.name = d;
l.parentid = this.fid2inode[m];
this.fs.PushInode(l);
this.BuildReply(e, f, 0);
this.SendReply(a);
break;
case 16:
g = Unmarshall2(["w", "s", "s", "w"], c);
k = g[0];
d = g[1];
n = g[3];
d = this.fs.CreateSymlink(d, this.fid2inode[k], g[2]);
l = this.fs.GetInode(d);
l.uid = n;
l.gid = n;
Marshall(["Q"], [l.qid], this.replybuffer, 7);
this.BuildReply(e, f, 13);
this.SendReply(a);
break;
case 18:
g = Unmarshall2("wswwww".split(""), c);
k = g[0];
d = g[1];
m = g[2];
d = this.fs.CreateNode(d, this.fid2inode[k], g[3], g[4]);
l = this.fs.GetInode(d);
l.mode = m;
l.uid = n;
l.gid = n;
Marshall(["Q"], [l.qid], this.replybuffer, 7);
this.BuildReply(e, f, 13);
this.SendReply(a);
break;
case 22:
g = Unmarshall2(["w"], c);
k = g[0];
l = this.fs.GetInode(this.fid2inode[k]);
d = Marshall(["s"], [l.symlink], this.replybuffer, 7);
this.BuildReply(e, f, d);
this.SendReply(a);
break;
case 72:
g = Unmarshall2(["w", "s", "w", "w"], c);
k = g[0];
d = g[1];
m = g[2];
n = g[3];
d = this.fs.CreateDirectory(d, this.fid2inode[k]);
l = this.fs.GetInode(d);
l.mode = m | S_IFDIR;
l.uid = n;
l.gid = n;
Marshall(["Q"], [l.qid], this.replybuffer, 7);
this.BuildReply(e, f, 13);
this.SendReply(a);
break;
case 14:
g = Unmarshall2(["w", "s", "w", "w", "w"], c);
k = g[0];
d = g[1];
m = g[3];
n = g[4];
d = this.fs.CreateFile(d, this.fid2inode[k]);
this.fid2inode[k] = d;
this.fidtype[k] = 1;
l = this.fs.GetInode(d);
l.uid = n;
l.gid = n;
l.mode = m;
Marshall(["Q", "w"], [l.qid, this.msize - 24], this.replybuffer, 7);
this.BuildReply(e, f, 17);
this.SendReply(a);
break;
case 52:
Marshall(["w"], [0], this.replybuffer, 7);
this.BuildReply(e, f, 1);
this.SendReply(a);
break;
case 24:
g = Unmarshall2(["w", "d"], c);
k = g[0];
l = this.fs.GetInode(this.fid2inode[k]);
g[0] |= 4096;
g[0] = g[1];
g[1] = l.qid;
g[2] = l.mode;
g[3] = l.uid;
g[4] = l.gid;
g[5] = 1;
g[6] = l.major << 8 | l.minor;
g[7] = l.size;
g[8] = l.size;
g[9] = Math.floor(l.size / this.BLOCKSIZE + 1);
g[10] = l.atime;
g[11] = 0;
g[12] = l.mtime;
g[13] = 0;
g[14] = l.ctime;
g[15] = 0;
g[16] = 0;
g[17] = 0;
g[18] = 0;
g[19] = 0;
Marshall("dQwwwddddddddddddddd".split(""), g, this.replybuffer, 7);
this.BuildReply(e, f, 153);
this.SendReply(a);
break;
case 26:
g = Unmarshall2("wwwwwddddd".split(""), c);
k = g[0];
l = this.fs.GetInode(this.fid2inode[k]);
g[1] & 1 && (l.mode = g[2]);
g[1] & 2 && (l.uid = g[3]);
g[1] & 4 && (l.gid = g[4]);
g[1] & 128 && (l.atime = g[6]);
g[1] & 256 && (l.atime = g[8]);
g[1] & 16 && (l.atime = Math.floor((new Date).getTime() / 1E3));
g[1] & 32 && (l.mtime = Math.floor((new Date).getTime() / 1E3));
g[1] & 64 && (l.ctime = Math.floor((new Date).getTime() / 1E3));
g[1] & 8 && this.fs.ChangeSize(this.fid2inode[k], g[5]);
this.BuildReply(e, f, 0);
this.SendReply(a);
break;
case 50:
g = Unmarshall2(["w", "d"], c);
k = g[0];
this.BuildReply(e, f, 0);
this.SendReply(a);
break;
case 40:
;
case 116:
var g = Unmarshall2(["w", "d", "w"], c), k = g[0], r = g[1], s = g[2], l = this.fs.GetInode(this.fid2inode[k]);
if (2 == this.fidtype[k]) {
l.caps.length < r + s && (s = l.caps.length - r);
for (n = 0;n < s;n++) {
this.replybuffer[11 + n] = l.caps[r + n];
}
Marshall(["w"], [s], this.replybuffer, 7);
this.BuildReply(e, f, 4 + s);
this.SendReply(a);
} else {
this.fs.OpenInode(this.fid2inode[k]), this.fs.AddEvent(this.fid2inode[k], function() {
l.size < r + s && (s = l.size - r);
var c = this.fs.inodedata[this.fid2inode[k]];
if (c) {
for (var d = 0;d < s;d++) {
this.replybuffer[11 + d] = c[r + d];
}
}
Marshall(["w"], [s], this.replybuffer, 7);
this.BuildReply(e, f, 4 + s);
this.SendReply(a);
}.bind(this));
}
break;
case 118:
g = Unmarshall2(["w", "d", "w"], c);
k = g[0];
r = g[1];
s = g[2];
this.fs.Write(this.fid2inode[k], r, s, c);
Marshall(["w"], [s], this.replybuffer, 7);
this.BuildReply(e, f, 4);
this.SendReply(a);
break;
case 74:
g = Unmarshall2(["w", "s", "w", "s"], c);
d = this.fs.Rename(this.fid2inode[g[0]], g[1], this.fid2inode[g[2]], g[3]);
if (0 == d) {
this.SendError(f, 2);
this.SendReply(a);
break;
}
this.BuildReply(e, f, 0);
this.SendReply(a);
break;
case 76:
g = Unmarshall2(["w", "s", "w"], c);
n = g[0];
d = g[1];
k = this.fs.Search(this.fid2inode[n], d);
if (-1 == k) {
this.SendError(f, 2);
this.SendReply(a);
break;
}
d = this.fs.Unlink(k);
if (!d) {
this.SendError(f, 39);
this.SendReply(a);
break;
}
this.BuildReply(k, f, 0);
this.SendReply(a);
break;
case 100:
this.msize = Unmarshall2(["w", "s"], c)[0];
d = Marshall(["w", "s"], [this.msize, "9P2000.L"], this.replybuffer, 7);
this.BuildReply(e, f, d);
this.SendReply(a);
break;
case 104:
g = Unmarshall2(["w", "w", "s", "s"], c);
k = g[0];
this.fid2inode[k] = 0;
this.fidtype[k] = 1;
l = this.fs.GetInode(this.fid2inode[k]);
Marshall(["Q"], [l.qid], this.replybuffer, 7);
this.BuildReply(e, f, 13);
this.SendReply(a);
break;
case 108:
g = Unmarshall2(["h"], c);
this.BuildReply(e, f, 0);
this.SendReply(a);
break;
case 110:
g = Unmarshall2(["w", "w", "h"], c);
k = g[0];
m = g[1];
p = g[2];
if (0 == p) {
this.fid2inode[m] = this.fid2inode[k];
Marshall(["h"], [0], this.replybuffer, 7);
this.BuildReply(e, f, 2);
this.SendReply(a);
break;
}
d = [];
for (n = 0;n < p;n++) {
d.push("s");
}
for (var q = Unmarshall2(d, c), d = this.fid2inode[k], r = 9, t = 0, n = 0;n < p;n++) {
d = this.fs.Search(d, q[n]);
if (-1 == d) {
break;
}
r += Marshall(["Q"], [this.fs.inodes[d].qid], this.replybuffer, r);
t++;
this.fid2inode[m] = d;
this.fidtype[m] = 1;
}
Marshall(["h"], [t], this.replybuffer, 7);
this.BuildReply(e, f, r - 7);
this.SendReply(a);
break;
case 120:
g = Unmarshall2(["w"], c);
0 <= this.fid2inode[g[0]] && (this.fs.CloseInode(this.fid2inode[g[0]]), this.fid2inode[g[0]] = -1, this.fidtype[g[0]] = -1);
this.BuildReply(e, f, 0);
this.SendReply(a);
break;
case 32:
this.SendError(f, 524);
this.SendReply(a);
break;
case 30:
g = Unmarshall2(["w", "w", "s"], c), k = g[0], n = g[1], d = g[2], this.fid2inode[n] = this.fid2inode[k], this.fidtype[n] = -1, m = 0, "security.capability" == d && (m = this.fs.PrepareCAPs(this.fid2inode[k]), this.fidtype[n] = 2), Marshall(["d"], [m], this.replybuffer, 7), this.BuildReply(e, f, 8), this.SendReply(a);
}
};
function CPU() {
this.memory_size = 0;
this.segment_is_null = [];
this.segment_offsets = [];
this.segment_limits = [];
this.tlb_data = new Int32Array(1048576);
this.tlb_info = new Uint8Array(1048576);
this.tlb_info_global = new Uint8Array(1048576);
this.protected_mode = !1;
this.gdtr_offset = this.gdtr_size = this.idtr_offset = this.idtr_size = 0;
this.page_fault = !1;
this.page_size_extensions = this.cpl = this.cr4 = this.cr3 = this.cr2 = this.cr0 = 0;
this.in_hlt = this.address_size_32 = this.stack_size_32 = this.operand_size_32 = this.is_32 = !1;
this.devices = {vga:{timer:function() {
}, destroy:function() {
}}, ps2:{timer:function() {
}, destroy:function() {
}}};
this.tsc_offset = this.last_result = this.last_add_result = this.last_op_size = this.last_op2 = this.last_op1 = this.flags_changed = this.flags = this.repeat_string_prefix = this.sysenter_eip = this.sysenter_esp = this.sysenter_cs = this.eip_phys = this.last_virt_eip = 0;
this.regv = this.reg16;
this.reg_vdi = this.reg_vsi = this.reg_vcx = 0;
this.table = [];
this.table0F = [];
this.paging = !1;
this.previous_ip = this.instruction_pointer = 0;
this.bios = {main:null, vga:null};
this.timestamp_counter = 0;
this.reg32s = new Int32Array(8);
this.reg32 = new Uint32Array(this.reg32s.buffer);
this.reg16s = new Int16Array(this.reg32s.buffer);
this.reg16 = new Uint16Array(this.reg32s.buffer);
this.reg8s = new Int8Array(this.reg32s.buffer);
this.reg8 = new Uint8Array(this.reg32s.buffer);
this.sreg = new Uint16Array(8);
this.dreg = new Int32Array(8);
this.stack_reg = this.reg16;
this.reg_vbp = this.reg_vsp = 0;
this.memory = null;
this.segment_prefix = -1;
this.last_instr_jump = !1;
this.fpu = this.io = void 0;
"use strict";
(function(a) {
var c = {};
a.debug = c;
c.step_mode = !1;
c.ops = void 0;
c.all_ops = [];
c.trace_all = !1;
c.show = function(a) {
if ("undefined" !== typeof document) {
var c = document.getElementById("log");
if (c) {
c.textContent += a + "\n";
c.style.display = "block";
c.scrollTop = 1E9;
return;
}
}
console.log(c);
};
c.init = function() {
};
c.dump_regs = function() {
};
c.dump_instructions = function() {
};
c.get_instructions = function() {
};
c.dump_regs_short = function() {
};
c.dump_stack = function() {
};
c.dump_page_directory = function() {
};
c.dump_gdt_ldt = function() {
};
c.dump_idt = function() {
};
c.get_memory_dump = function() {
};
c.memory_hex_dump = function() {
};
c.used_memory_dump = function() {
};
c.step = function() {
};
c.run_until = function() {
};
c.debugger = function() {
};
c.unimpl = function(a) {
a = "Unimplemented" + (a ? ": " + a : "");
c.show(a);
c.show("Execution stopped");
return a;
};
c.logop = function() {
};
})(this);
this._state_restore();
}
CPU.prototype._state_restore = function() {
this.reg32 = new Uint32Array(this.reg32s.buffer);
this.reg16s = new Int16Array(this.reg32s.buffer);
this.reg16 = new Uint16Array(this.reg32s.buffer);
this.reg8s = new Int8Array(this.reg32s.buffer);
this.reg8 = new Uint8Array(this.reg32s.buffer);
this.update_address_size();
this.update_operand_size();
this.stack_size_32 ? this.stack_reg = this.reg32s : this.stack_reg = this.reg16;
this.full_clear_tlb();
this.timestamp_counter = 0;
this.tsc_offset = v86.microtick();
this._state_skip = [this.bios, this.debug, this.table16, this.table32, this.table0F_16, this.table0F_32, this.tlb_data, this.tlb_info, this.tlb_info_global];
};
"use strict";
(function() {
CPU.prototype.modrm_table16 = Array(192);
CPU.prototype.modrm_table32 = Array(192);
CPU.prototype.sib_table = Array(256);
CPU.prototype.modrm_table16[0] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[6] + a.reg16[12] & 65535) | 0;
};
CPU.prototype.modrm_table16[64] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[6] + a.reg16[12] + a.read_imm8s() & 65535) | 0;
};
CPU.prototype.modrm_table16[128] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[6] + a.reg16[12] + a.read_imm16() & 65535) | 0;
};
CPU.prototype.modrm_table16[1] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[6] + a.reg16[14] & 65535) | 0;
};
CPU.prototype.modrm_table16[65] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[6] + a.reg16[14] + a.read_imm8s() & 65535) | 0;
};
CPU.prototype.modrm_table16[129] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[6] + a.reg16[14] + a.read_imm16() & 65535) | 0;
};
CPU.prototype.modrm_table16[2] = function(a) {
return a.get_seg_prefix_ss() + (a.reg16[10] + a.reg16[12] & 65535) | 0;
};
CPU.prototype.modrm_table16[66] = function(a) {
return a.get_seg_prefix_ss() + (a.reg16[10] + a.reg16[12] + a.read_imm8s() & 65535) | 0;
};
CPU.prototype.modrm_table16[130] = function(a) {
return a.get_seg_prefix_ss() + (a.reg16[10] + a.reg16[12] + a.read_imm16() & 65535) | 0;
};
CPU.prototype.modrm_table16[3] = function(a) {
return a.get_seg_prefix_ss() + (a.reg16[10] + a.reg16[14] & 65535) | 0;
};
CPU.prototype.modrm_table16[67] = function(a) {
return a.get_seg_prefix_ss() + (a.reg16[10] + a.reg16[14] + a.read_imm8s() & 65535) | 0;
};
CPU.prototype.modrm_table16[131] = function(a) {
return a.get_seg_prefix_ss() + (a.reg16[10] + a.reg16[14] + a.read_imm16() & 65535) | 0;
};
CPU.prototype.modrm_table16[4] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[12] & 65535) | 0;
};
CPU.prototype.modrm_table16[68] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[12] + a.read_imm8s() & 65535) | 0;
};
CPU.prototype.modrm_table16[132] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[12] + a.read_imm16() & 65535) | 0;
};
CPU.prototype.modrm_table16[5] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[14] & 65535) | 0;
};
CPU.prototype.modrm_table16[69] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[14] + a.read_imm8s() & 65535) | 0;
};
CPU.prototype.modrm_table16[133] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[14] + a.read_imm16() & 65535) | 0;
};
CPU.prototype.modrm_table16[6] = function(a) {
return a.get_seg_prefix_ss() + (a.reg16[10] & 65535) | 0;
};
CPU.prototype.modrm_table16[70] = function(a) {
return a.get_seg_prefix_ss() + (a.reg16[10] + a.read_imm8s() & 65535) | 0;
};
CPU.prototype.modrm_table16[134] = function(a) {
return a.get_seg_prefix_ss() + (a.reg16[10] + a.read_imm16() & 65535) | 0;
};
CPU.prototype.modrm_table16[7] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[6] & 65535) | 0;
};
CPU.prototype.modrm_table16[71] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[6] + a.read_imm8s() & 65535) | 0;
};
CPU.prototype.modrm_table16[135] = function(a) {
return a.get_seg_prefix_ds() + (a.reg16[6] + a.read_imm16() & 65535) | 0;
};
CPU.prototype.modrm_table32[0] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.modrm_table32[64] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[0] + a.read_imm8s() | 0;
};
CPU.prototype.modrm_table32[128] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[0] + a.read_imm32s() | 0;
};
CPU.prototype.modrm_table32[1] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.modrm_table32[65] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[1] + a.read_imm8s() | 0;
};
CPU.prototype.modrm_table32[129] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[1] + a.read_imm32s() | 0;
};
CPU.prototype.modrm_table32[2] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.modrm_table32[66] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[2] + a.read_imm8s() | 0;
};
CPU.prototype.modrm_table32[130] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[2] + a.read_imm32s() | 0;
};
CPU.prototype.modrm_table32[3] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.modrm_table32[67] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[3] + a.read_imm8s() | 0;
};
CPU.prototype.modrm_table32[131] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[3] + a.read_imm32s() | 0;
};
CPU.prototype.modrm_table32[4] = function(a) {
return a.sib_table[a.read_imm8()](a, !1) | 0;
};
CPU.prototype.modrm_table32[68] = function(a) {
return a.sib_table[a.read_imm8()](a, !1) + a.read_imm8s() | 0;
};
CPU.prototype.modrm_table32[132] = function(a) {
return a.sib_table[a.read_imm8()](a, !1) + a.read_imm32s() | 0;
};
CPU.prototype.modrm_table32[5] = function(a) {
return a.get_seg_prefix_ss() + a.reg32s[5] | 0;
};
CPU.prototype.modrm_table32[69] = function(a) {
return a.get_seg_prefix_ss() + a.reg32s[5] + a.read_imm8s() | 0;
};
CPU.prototype.modrm_table32[133] = function(a) {
return a.get_seg_prefix_ss() + a.reg32s[5] + a.read_imm32s() | 0;
};
CPU.prototype.modrm_table32[6] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.modrm_table32[70] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[6] + a.read_imm8s() | 0;
};
CPU.prototype.modrm_table32[134] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[6] + a.read_imm32s() | 0;
};
CPU.prototype.modrm_table32[7] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.modrm_table32[71] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[7] + a.read_imm8s() | 0;
};
CPU.prototype.modrm_table32[135] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[7] + a.read_imm32s() | 0;
};
CPU.prototype.modrm_table16[6] = function(a) {
return a.get_seg_prefix_ds() + a.read_imm16() | 0;
};
CPU.prototype.modrm_table32[5] = function(a) {
return a.get_seg_prefix_ds() + a.read_imm32s() | 0;
};
CPU.prototype.modrm_table32[4] = function(a) {
return a.sib_table[a.read_imm8()](a, !1) | 0;
};
CPU.prototype.modrm_table32[68] = function(a) {
return a.sib_table[a.read_imm8()](a, !0) + a.read_imm8s() | 0;
};
CPU.prototype.modrm_table32[132] = function(a) {
return a.sib_table[a.read_imm8()](a, !0) + a.read_imm32s() | 0;
};
for (var a = 0;8 > a;a++) {
for (var c = 0;3 > c;c++) {
for (var d = a | c << 6, e = 1;8 > e;e++) {
CPU.prototype.modrm_table32[d | e << 3] = CPU.prototype.modrm_table32[d], CPU.prototype.modrm_table16[d | e << 3] = CPU.prototype.modrm_table16[d];
}
}
}
CPU.prototype.sib_table[0] = function(a) {
return a.reg32s[0] + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[1] = function(a) {
return a.reg32s[0] + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[2] = function(a) {
return a.reg32s[0] + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[3] = function(a) {
return a.reg32s[0] + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[4] = function(a) {
return a.reg32s[0] + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[5] = function(a, c) {
return a.reg32s[0] + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[6] = function(a) {
return a.reg32s[0] + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[7] = function(a) {
return a.reg32s[0] + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[64] = function(a) {
return(a.reg32s[0] << 1) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[65] = function(a) {
return(a.reg32s[0] << 1) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[66] = function(a) {
return(a.reg32s[0] << 1) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[67] = function(a) {
return(a.reg32s[0] << 1) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[68] = function(a) {
return(a.reg32s[0] << 1) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[69] = function(a, c) {
return(a.reg32s[0] << 1) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[70] = function(a) {
return(a.reg32s[0] << 1) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[71] = function(a) {
return(a.reg32s[0] << 1) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[128] = function(a) {
return(a.reg32s[0] << 2) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[129] = function(a) {
return(a.reg32s[0] << 2) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[130] = function(a) {
return(a.reg32s[0] << 2) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[131] = function(a) {
return(a.reg32s[0] << 2) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[132] = function(a) {
return(a.reg32s[0] << 2) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[133] = function(a, c) {
return(a.reg32s[0] << 2) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[134] = function(a) {
return(a.reg32s[0] << 2) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[135] = function(a) {
return(a.reg32s[0] << 2) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[192] = function(a) {
return(a.reg32s[0] << 3) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[193] = function(a) {
return(a.reg32s[0] << 3) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[194] = function(a) {
return(a.reg32s[0] << 3) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[195] = function(a) {
return(a.reg32s[0] << 3) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[196] = function(a) {
return(a.reg32s[0] << 3) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[197] = function(a, c) {
return(a.reg32s[0] << 3) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[198] = function(a) {
return(a.reg32s[0] << 3) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[199] = function(a) {
return(a.reg32s[0] << 3) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[8] = function(a) {
return a.reg32s[1] + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[9] = function(a) {
return a.reg32s[1] + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[10] = function(a) {
return a.reg32s[1] + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[11] = function(a) {
return a.reg32s[1] + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[12] = function(a) {
return a.reg32s[1] + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[13] = function(a, c) {
return a.reg32s[1] + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[14] = function(a) {
return a.reg32s[1] + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[15] = function(a) {
return a.reg32s[1] + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[72] = function(a) {
return(a.reg32s[1] << 1) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[73] = function(a) {
return(a.reg32s[1] << 1) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[74] = function(a) {
return(a.reg32s[1] << 1) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[75] = function(a) {
return(a.reg32s[1] << 1) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[76] = function(a) {
return(a.reg32s[1] << 1) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[77] = function(a, c) {
return(a.reg32s[1] << 1) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[78] = function(a) {
return(a.reg32s[1] << 1) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[79] = function(a) {
return(a.reg32s[1] << 1) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[136] = function(a) {
return(a.reg32s[1] << 2) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[137] = function(a) {
return(a.reg32s[1] << 2) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[138] = function(a) {
return(a.reg32s[1] << 2) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[139] = function(a) {
return(a.reg32s[1] << 2) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[140] = function(a) {
return(a.reg32s[1] << 2) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[141] = function(a, c) {
return(a.reg32s[1] << 2) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[142] = function(a) {
return(a.reg32s[1] << 2) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[143] = function(a) {
return(a.reg32s[1] << 2) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[200] = function(a) {
return(a.reg32s[1] << 3) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[201] = function(a) {
return(a.reg32s[1] << 3) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[202] = function(a) {
return(a.reg32s[1] << 3) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[203] = function(a) {
return(a.reg32s[1] << 3) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[204] = function(a) {
return(a.reg32s[1] << 3) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[205] = function(a, c) {
return(a.reg32s[1] << 3) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[206] = function(a) {
return(a.reg32s[1] << 3) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[207] = function(a) {
return(a.reg32s[1] << 3) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[16] = function(a) {
return a.reg32s[2] + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[17] = function(a) {
return a.reg32s[2] + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[18] = function(a) {
return a.reg32s[2] + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[19] = function(a) {
return a.reg32s[2] + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[20] = function(a) {
return a.reg32s[2] + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[21] = function(a, c) {
return a.reg32s[2] + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[22] = function(a) {
return a.reg32s[2] + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[23] = function(a) {
return a.reg32s[2] + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[80] = function(a) {
return(a.reg32s[2] << 1) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[81] = function(a) {
return(a.reg32s[2] << 1) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[82] = function(a) {
return(a.reg32s[2] << 1) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[83] = function(a) {
return(a.reg32s[2] << 1) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[84] = function(a) {
return(a.reg32s[2] << 1) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[85] = function(a, c) {
return(a.reg32s[2] << 1) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[86] = function(a) {
return(a.reg32s[2] << 1) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[87] = function(a) {
return(a.reg32s[2] << 1) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[144] = function(a) {
return(a.reg32s[2] << 2) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[145] = function(a) {
return(a.reg32s[2] << 2) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[146] = function(a) {
return(a.reg32s[2] << 2) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[147] = function(a) {
return(a.reg32s[2] << 2) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[148] = function(a) {
return(a.reg32s[2] << 2) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[149] = function(a, c) {
return(a.reg32s[2] << 2) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[150] = function(a) {
return(a.reg32s[2] << 2) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[151] = function(a) {
return(a.reg32s[2] << 2) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[208] = function(a) {
return(a.reg32s[2] << 3) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[209] = function(a) {
return(a.reg32s[2] << 3) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[210] = function(a) {
return(a.reg32s[2] << 3) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[211] = function(a) {
return(a.reg32s[2] << 3) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[212] = function(a) {
return(a.reg32s[2] << 3) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[213] = function(a, c) {
return(a.reg32s[2] << 3) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[214] = function(a) {
return(a.reg32s[2] << 3) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[215] = function(a) {
return(a.reg32s[2] << 3) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[24] = function(a) {
return a.reg32s[3] + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[25] = function(a) {
return a.reg32s[3] + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[26] = function(a) {
return a.reg32s[3] + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[27] = function(a) {
return a.reg32s[3] + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[28] = function(a) {
return a.reg32s[3] + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[29] = function(a, c) {
return a.reg32s[3] + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[30] = function(a) {
return a.reg32s[3] + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[31] = function(a) {
return a.reg32s[3] + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[88] = function(a) {
return(a.reg32s[3] << 1) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[89] = function(a) {
return(a.reg32s[3] << 1) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[90] = function(a) {
return(a.reg32s[3] << 1) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[91] = function(a) {
return(a.reg32s[3] << 1) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[92] = function(a) {
return(a.reg32s[3] << 1) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[93] = function(a, c) {
return(a.reg32s[3] << 1) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[94] = function(a) {
return(a.reg32s[3] << 1) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[95] = function(a) {
return(a.reg32s[3] << 1) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[152] = function(a) {
return(a.reg32s[3] << 2) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[153] = function(a) {
return(a.reg32s[3] << 2) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[154] = function(a) {
return(a.reg32s[3] << 2) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[155] = function(a) {
return(a.reg32s[3] << 2) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[156] = function(a) {
return(a.reg32s[3] << 2) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[157] = function(a, c) {
return(a.reg32s[3] << 2) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[158] = function(a) {
return(a.reg32s[3] << 2) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[159] = function(a) {
return(a.reg32s[3] << 2) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[216] = function(a) {
return(a.reg32s[3] << 3) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[217] = function(a) {
return(a.reg32s[3] << 3) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[218] = function(a) {
return(a.reg32s[3] << 3) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[219] = function(a) {
return(a.reg32s[3] << 3) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[220] = function(a) {
return(a.reg32s[3] << 3) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[221] = function(a, c) {
return(a.reg32s[3] << 3) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[222] = function(a) {
return(a.reg32s[3] << 3) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[223] = function(a) {
return(a.reg32s[3] << 3) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[32] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[33] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[34] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[35] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[36] = function(a) {
return a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[37] = function(a, c) {
return(c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[38] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[39] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[96] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[97] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[98] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[99] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[100] = function(a) {
return a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[101] = function(a, c) {
return(c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[102] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[103] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[160] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[161] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[162] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[163] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[164] = function(a) {
return a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[165] = function(a, c) {
return(c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[166] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[167] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[224] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[225] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[226] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[227] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[228] = function(a) {
return a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[229] = function(a, c) {
return(c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[230] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[231] = function(a) {
return a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[40] = function(a) {
return a.reg32s[5] + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[41] = function(a) {
return a.reg32s[5] + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[42] = function(a) {
return a.reg32s[5] + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[43] = function(a) {
return a.reg32s[5] + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[44] = function(a) {
return a.reg32s[5] + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[45] = function(a, c) {
return a.reg32s[5] + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[46] = function(a) {
return a.reg32s[5] + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[47] = function(a) {
return a.reg32s[5] + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[104] = function(a) {
return(a.reg32s[5] << 1) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[105] = function(a) {
return(a.reg32s[5] << 1) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[106] = function(a) {
return(a.reg32s[5] << 1) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[107] = function(a) {
return(a.reg32s[5] << 1) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[108] = function(a) {
return(a.reg32s[5] << 1) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[109] = function(a, c) {
return(a.reg32s[5] << 1) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[110] = function(a) {
return(a.reg32s[5] << 1) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[111] = function(a) {
return(a.reg32s[5] << 1) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[168] = function(a) {
return(a.reg32s[5] << 2) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[169] = function(a) {
return(a.reg32s[5] << 2) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[170] = function(a) {
return(a.reg32s[5] << 2) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[171] = function(a) {
return(a.reg32s[5] << 2) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[172] = function(a) {
return(a.reg32s[5] << 2) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[173] = function(a, c) {
return(a.reg32s[5] << 2) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[174] = function(a) {
return(a.reg32s[5] << 2) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[175] = function(a) {
return(a.reg32s[5] << 2) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[232] = function(a) {
return(a.reg32s[5] << 3) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[233] = function(a) {
return(a.reg32s[5] << 3) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[234] = function(a) {
return(a.reg32s[5] << 3) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[235] = function(a) {
return(a.reg32s[5] << 3) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[236] = function(a) {
return(a.reg32s[5] << 3) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[237] = function(a, c) {
return(a.reg32s[5] << 3) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[238] = function(a) {
return(a.reg32s[5] << 3) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[239] = function(a) {
return(a.reg32s[5] << 3) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[48] = function(a) {
return a.reg32s[6] + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[49] = function(a) {
return a.reg32s[6] + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[50] = function(a) {
return a.reg32s[6] + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[51] = function(a) {
return a.reg32s[6] + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[52] = function(a) {
return a.reg32s[6] + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[53] = function(a, c) {
return a.reg32s[6] + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[54] = function(a) {
return a.reg32s[6] + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[55] = function(a) {
return a.reg32s[6] + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[112] = function(a) {
return(a.reg32s[6] << 1) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[113] = function(a) {
return(a.reg32s[6] << 1) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[114] = function(a) {
return(a.reg32s[6] << 1) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[115] = function(a) {
return(a.reg32s[6] << 1) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[116] = function(a) {
return(a.reg32s[6] << 1) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[117] = function(a, c) {
return(a.reg32s[6] << 1) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[118] = function(a) {
return(a.reg32s[6] << 1) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[119] = function(a) {
return(a.reg32s[6] << 1) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[176] = function(a) {
return(a.reg32s[6] << 2) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[177] = function(a) {
return(a.reg32s[6] << 2) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[178] = function(a) {
return(a.reg32s[6] << 2) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[179] = function(a) {
return(a.reg32s[6] << 2) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[180] = function(a) {
return(a.reg32s[6] << 2) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[181] = function(a, c) {
return(a.reg32s[6] << 2) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[182] = function(a) {
return(a.reg32s[6] << 2) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[183] = function(a) {
return(a.reg32s[6] << 2) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[240] = function(a) {
return(a.reg32s[6] << 3) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[241] = function(a) {
return(a.reg32s[6] << 3) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[242] = function(a) {
return(a.reg32s[6] << 3) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[243] = function(a) {
return(a.reg32s[6] << 3) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[244] = function(a) {
return(a.reg32s[6] << 3) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[245] = function(a, c) {
return(a.reg32s[6] << 3) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[246] = function(a) {
return(a.reg32s[6] << 3) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[247] = function(a) {
return(a.reg32s[6] << 3) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[56] = function(a) {
return a.reg32s[7] + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[57] = function(a) {
return a.reg32s[7] + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[58] = function(a) {
return a.reg32s[7] + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[59] = function(a) {
return a.reg32s[7] + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[60] = function(a) {
return a.reg32s[7] + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[61] = function(a, c) {
return a.reg32s[7] + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[62] = function(a) {
return a.reg32s[7] + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[63] = function(a) {
return a.reg32s[7] + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[120] = function(a) {
return(a.reg32s[7] << 1) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[121] = function(a) {
return(a.reg32s[7] << 1) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[122] = function(a) {
return(a.reg32s[7] << 1) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[123] = function(a) {
return(a.reg32s[7] << 1) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[124] = function(a) {
return(a.reg32s[7] << 1) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[125] = function(a, c) {
return(a.reg32s[7] << 1) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[126] = function(a) {
return(a.reg32s[7] << 1) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[127] = function(a) {
return(a.reg32s[7] << 1) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[184] = function(a) {
return(a.reg32s[7] << 2) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[185] = function(a) {
return(a.reg32s[7] << 2) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[186] = function(a) {
return(a.reg32s[7] << 2) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[187] = function(a) {
return(a.reg32s[7] << 2) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[188] = function(a) {
return(a.reg32s[7] << 2) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[189] = function(a, c) {
return(a.reg32s[7] << 2) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[190] = function(a) {
return(a.reg32s[7] << 2) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[191] = function(a) {
return(a.reg32s[7] << 2) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.sib_table[248] = function(a) {
return(a.reg32s[7] << 3) + a.get_seg_prefix_ds() + a.reg32s[0] | 0;
};
CPU.prototype.sib_table[249] = function(a) {
return(a.reg32s[7] << 3) + a.get_seg_prefix_ds() + a.reg32s[1] | 0;
};
CPU.prototype.sib_table[250] = function(a) {
return(a.reg32s[7] << 3) + a.get_seg_prefix_ds() + a.reg32s[2] | 0;
};
CPU.prototype.sib_table[251] = function(a) {
return(a.reg32s[7] << 3) + a.get_seg_prefix_ds() + a.reg32s[3] | 0;
};
CPU.prototype.sib_table[252] = function(a) {
return(a.reg32s[7] << 3) + a.get_seg_prefix_ss() + a.reg32s[4] | 0;
};
CPU.prototype.sib_table[253] = function(a, c) {
return(a.reg32s[7] << 3) + (c ? a.get_seg_prefix_ss() + a.reg32s[5] : a.get_seg_prefix_ds() + a.read_imm32s()) | 0;
};
CPU.prototype.sib_table[254] = function(a) {
return(a.reg32s[7] << 3) + a.get_seg_prefix_ds() + a.reg32s[6] | 0;
};
CPU.prototype.sib_table[255] = function(a) {
return(a.reg32s[7] << 3) + a.get_seg_prefix_ds() + a.reg32s[7] | 0;
};
CPU.prototype.modrm_resolve = function(a) {
return(this.address_size_32 ? this.modrm_table32 : this.modrm_table16)[a](this);
};
})();
"use strict";
CPU.prototype.add = function(a, c, d) {
this.last_op1 = a;
this.last_op2 = c;
this.last_add_result = this.last_result = a + c | 0;
this.last_op_size = d;
this.flags_changed = 2261;
return this.last_result;
};
CPU.prototype.adc = function(a, c, d) {
var e = this.getcf();
this.last_op1 = a;
this.last_op2 = c;
this.last_add_result = this.last_result = (a + c | 0) + e | 0;
this.last_op_size = d;
this.flags_changed = 2261;
return this.last_result;
};
CPU.prototype.sub = function(a, c, d) {
this.last_add_result = a;
this.last_op2 = c;
this.last_op1 = this.last_result = a - c | 0;
this.last_op_size = d;
this.flags_changed = 2261;
return this.last_result;
};
CPU.prototype.sbb = function(a, c, d) {
var e = this.getcf();
this.last_add_result = a;
this.last_op2 = c;
this.last_op1 = this.last_result = a - c - e | 0;
this.last_op_size = d;
this.flags_changed = 2261;
return this.last_result;
};
CPU.prototype.inc = function(a, c) {
this.flags = this.flags & -2 | this.getcf();
this.last_op1 = a;
this.last_op2 = 1;
this.last_add_result = this.last_result = a + 1 | 0;
this.last_op_size = c;
this.flags_changed = 2260;
return this.last_result;
};
CPU.prototype.dec = function(a, c) {
this.flags = this.flags & -2 | this.getcf();
this.last_add_result = a;
this.last_op2 = 1;
this.last_op1 = this.last_result = a - 1 | 0;
this.last_op_size = c;
this.flags_changed = 2260;
return this.last_result;
};
CPU.prototype.neg = function(a, c) {
this.last_op1 = this.last_result = -a | 0;
this.flags_changed = 2261;
this.last_add_result = 0;
this.last_op2 = a;
this.last_op_size = c;
return this.last_result;
};
CPU.prototype.mul8 = function(a) {
a = a * this.reg8[0];
this.reg16[0] = a;
this.flags = 256 > a ? this.flags & -2050 : this.flags | 2049;
this.flags_changed = 0;
};
CPU.prototype.imul8 = function(a) {
a = a * this.reg8s[0];
this.reg16[0] = a;
this.flags = 127 < a || -128 > a ? this.flags | 2049 : this.flags & -2050;
this.flags_changed = 0;
};
CPU.prototype.mul16 = function(a) {
a = a * this.reg16[0];
var c = a >>> 16;
this.reg16[0] = a;
this.reg16[4] = c;
this.flags = 0 === c ? this.flags & -2050 : this.flags | 2049;
this.flags_changed = 0;
};
CPU.prototype.imul16 = function(a) {
a = a * this.reg16s[0];
this.reg16[0] = a;
this.reg16[4] = a >> 16;
this.flags = 32767 < a || -32768 > a ? this.flags | 2049 : this.flags & -2050;
this.flags_changed = 0;
};
CPU.prototype.imul_reg16 = function(a, c) {
var d = a * c;
this.flags = 32767 < d || -32768 > d ? this.flags | 2049 : this.flags & -2050;
this.flags_changed = 0;
return d;
};
CPU.prototype.mul32 = function(a) {
var c = this.reg32s[0], d = c & 65535, c = c >>> 16, e = a & 65535;
a = a >>> 16;
var f = d * e, e = (f >>> 16) + (c * e | 0) | 0, g = e >>> 16, e = (e & 65535) + (d * a | 0) | 0, g = ((e >>> 16) + (c * a | 0) | 0) + g | 0;
this.reg32s[0] = e << 16 | f & 65535;
this.reg32s[2] = g;
this.flags = 0 === g ? this.flags & -2050 : this.flags | 2049;
this.flags_changed = 0;
};
CPU.prototype.imul32 = function(a) {
var c = this.reg32s[0], d = !1;
0 > c && (d = !0, c = -c | 0);
0 > a && (d = !d, a = -a | 0);
var e = c & 65535, c = c >>> 16, f = a & 65535;
a = a >>> 16;
var g = e * f, f = (g >>> 16) + (c * f | 0) | 0, k = f >>> 16, f = (f & 65535) + (e * a | 0) | 0, g = f << 16 | g & 65535, k = ((f >>> 16) + (c * a | 0) | 0) + k | 0;
d && (g = -g | 0, k = ~k + !g | 0);
this.reg32s[0] = g;
this.reg32s[2] = k;
this.flags = k === g >> 31 ? this.flags & -2050 : this.flags | 2049;
this.flags_changed = 0;
};
CPU.prototype.imul_reg32 = function(a, c) {
var d = !1;
0 > a && (d = !0, a = -a | 0);
0 > c && (d = !d, c = -c | 0);
var e = a & 65535, f = a >>> 16, g = c & 65535, k = c >>> 16, m = e * g, g = (m >>> 16) + (f * g | 0) | 0, l = g >>> 16, g = (g & 65535) + (e * k | 0) | 0, m = g << 16 | m & 65535, l = ((g >>> 16) + (f * k | 0) | 0) + l | 0;
d && (m = -m | 0, l = ~l + !m | 0);
this.flags = l === m >> 31 ? this.flags & -2050 : this.flags | 2049;
this.flags_changed = 0;
return m;
};
CPU.prototype.div8 = function(a) {
var c = this.reg16[0], d = c / a | 0;
256 <= d || 0 === a ? this.trigger_de() : (this.reg8[0] = d, this.reg8[1] = c % a);
};
CPU.prototype.idiv8 = function(a) {
var c = this.reg16s[0], d = c / a | 0;
128 <= d || -129 >= d || 0 === a ? this.trigger_de() : (this.reg8[0] = d, this.reg8[1] = c % a);
};
CPU.prototype.div16 = function(a) {
var c = (this.reg16[0] | this.reg16[4] << 16) >>> 0, d = c / a | 0;
65536 <= d || 0 > d || 0 === a ? this.trigger_de() : (this.reg16[0] = d, this.reg16[4] = c % a);
};
CPU.prototype.idiv16 = function(a) {
var c = this.reg16[0] | this.reg16[4] << 16, d = c / a | 0;
32768 <= d || -32769 >= d || 0 === a ? this.trigger_de() : (this.reg16[0] = d, this.reg16[4] = c % a);
};
CPU.prototype.div32 = function(a) {
var c = this.reg32[0], d = this.reg32[2];
(d >= a || !a) && this.trigger_de();
var e = 0;
if (1048576 < d) {
for (var f = 32, g = a;g > d;) {
g >>>= 1, f--;
}
for (;1048576 < d;) {
if (d >= g) {
var d = d - g, k = a << f >>> 0;
k > c && d--;
c = c - k >>> 0;
e |= 1 << f;
}
f--;
g >>= 1;
}
e >>>= 0;
}
c += 4294967296 * d;
d = c % a;
e += c / a | 0;
4294967296 <= e || 0 === a ? this.trigger_de() : (this.reg32s[0] = e, this.reg32s[2] = d);
};
CPU.prototype.idiv32 = function(a) {
var c = this.reg32[0], d = this.reg32s[2], e = !1, f = !1;
0 > a && (f = !0, a = -a);
0 > d && (e = !0, f = !f, c = -c | 0, d = ~d + !c);
(d >= a || !a) && this.trigger_de();
var g = 0;
if (1048576 < d) {
for (var k = 32, m = a;m > d;) {
m >>>= 1, k--;
}
for (;1048576 < d;) {
if (d >= m) {
var d = d - m, l = a << k >>> 0;
l > c && d--;
c = c - l >>> 0;
g |= 1 << k;
}
k--;
m >>= 1;
}
g >>>= 0;
}
c += 4294967296 * d;
d = c % a;
g += c / a | 0;
f && (g = -g | 0);
e && (d = -d | 0);
2147483648 <= g || -2147483649 >= g || 0 === a ? this.trigger_de() : (this.reg32s[0] = g, this.reg32s[2] = d);
};
CPU.prototype.xadd8 = function(a, c) {
var d = this.reg8[c];
this.reg8[c] = a;
return this.add(a, d, 7);
};
CPU.prototype.xadd16 = function(a, c) {
var d = this.reg16[c];
this.reg16[c] = a;
return this.add(a, d, 15);
};
CPU.prototype.xadd32 = function(a, c) {
var d = this.reg32s[c];
this.reg32s[c] = a;
return this.add(a, d, 31);
};
CPU.prototype.bcd_daa = function() {
var a = this.reg8[0], c = this.getcf(), d = this.getaf();
this.flags &= -18;
if (9 < (a & 15) || d) {
this.reg8[0] += 6, this.flags |= 16;
}
if (153 < a || c) {
this.reg8[0] += 96, this.flags |= 1;
}
this.last_result = this.reg8[0];
this.last_op_size = 7;
this.last_op1 = this.last_op2 = 0;
this.flags_changed = 196;
};
CPU.prototype.bcd_das = function() {
var a = this.reg8[0], c = this.getcf();
this.flags &= -2;
9 < (a & 15) || this.getaf() ? (this.reg8[0] -= 6, this.flags |= 16, this.flags = this.flags & -2 | c | this.reg8[0] >> 7) : this.flags &= -17;
if (153 < a || c) {
this.reg8[0] -= 96, this.flags |= 1;
}
this.last_result = this.reg8[0];
this.last_op_size = 7;
this.last_op1 = this.last_op2 = 0;
this.flags_changed = 196;
};
CPU.prototype.bcd_aam = function() {
var a = this.read_imm8();
if (0 === a) {
this.trigger_de();
} else {
var c = this.reg8[0];
this.reg8[1] = c / a;
this.reg8[0] = c % a;
this.last_result = this.reg8[0];
this.flags_changed = 196;
this.flags &= -2066;
}
};
CPU.prototype.bcd_aad = function() {
var a = this.read_imm8();
this.last_result = this.reg8[0] + this.reg8[1] * a;
this.reg16[0] = this.last_result & 255;
this.last_op_size = 7;
this.flags_changed = 196;
this.flags &= -2066;
};
CPU.prototype.bcd_aaa = function() {
9 < (this.reg8[0] & 15) || this.getaf() ? (this.reg16[0] += 6, this.reg8[1] += 1, this.flags |= 17) : this.flags &= -18;
this.reg8[0] &= 15;
this.flags_changed &= -18;
};
CPU.prototype.bcd_aas = function() {
9 < (this.reg8[0] & 15) || this.getaf() ? (this.reg16[0] -= 6, --this.reg8[1], this.flags |= 17) : this.flags &= -18;
this.reg8[0] &= 15;
this.flags_changed &= -18;
};
CPU.prototype.and = function(a, c, d) {
this.last_result = a & c;
this.last_op_size = d;
this.flags &= -2066;
this.flags_changed = 196;
return this.last_result;
};
CPU.prototype.or = function(a, c, d) {
this.last_result = a | c;
this.last_op_size = d;
this.flags &= -2066;
this.flags_changed = 196;
return this.last_result;
};
CPU.prototype.xor = function(a, c, d) {
this.last_result = a ^ c;
this.last_op_size = d;
this.flags &= -2066;
this.flags_changed = 196;
return this.last_result;
};
CPU.prototype.rol8 = function(a, c) {
if (!c) {
return a;
}
c &= 7;
var d = a << c | a >> 8 - c;
this.flags_changed &= -2050;
this.flags = this.flags & -2050 | d & 1 | (d << 11 ^ d << 4) & 2048;
return d;
};
CPU.prototype.rol16 = function(a, c) {
if (!c) {
return a;
}
c &= 15;
var d = a << c | a >> 16 - c;
this.flags_changed &= -2050;
this.flags = this.flags & -2050 | d & 1 | (d << 11 ^ d >> 4) & 2048;
return d;
};
CPU.prototype.rol32 = function(a, c) {
if (!c) {
return a;
}
var d = a << c | a >>> 32 - c;
this.flags_changed &= -2050;
this.flags = this.flags & -2050 | d & 1 | (d << 11 ^ d >> 20) & 2048;
return d;
};
CPU.prototype.rcl8 = function(a, c) {
c %= 9;
if (!c) {
return a;
}
var d = a << c | this.getcf() << c - 1 | a >> 9 - c;
this.flags_changed &= -2050;
this.flags = this.flags & -2050 | d >> 8 & 1 | (d << 3 ^ d << 4) & 2048;
return d;
};
CPU.prototype.rcl16 = function(a, c) {
c %= 17;
if (!c) {
return a;
}
var d = a << c | this.getcf() << c - 1 | a >> 17 - c;
this.flags_changed &= -2050;
this.flags = this.flags & -2050 | d >> 16 & 1 | (d >> 5 ^ d >> 4) & 2048;
return d;
};
CPU.prototype.rcl32 = function(a, c) {
if (!c) {
return a;
}
var d = a << c | this.getcf() << c - 1;
1 < c && (d |= a >>> 33 - c);
this.flags_changed &= -2050;
this.flags = this.flags & -2050 | a >>> 32 - c & 1;
this.flags |= (this.flags << 11 ^ d >> 20) & 2048;
return d;
};
CPU.prototype.ror8 = function(a, c) {
c &= 7;
if (!c) {
return a;
}
var d = a >> c | a << 8 - c;
this.flags_changed &= -2050;
this.flags = this.flags & -2050 | d >> 7 & 1 | (d << 4 ^ d << 5) & 2048;
return d;
};
CPU.prototype.ror16 = function(a, c) {
c &= 15;
if (!c) {
return a;
}
var d = a >> c | a << 16 - c;
this.flags_changed &= -2050;
this.flags = this.flags & -2050 | d >> 15 & 1 | (d >> 4 ^ d >> 3) & 2048;
return d;
};
CPU.prototype.ror32 = function(a, c) {
if (!c) {
return a;
}
var d = a >>> c | a << 32 - c;
this.flags_changed &= -2050;
this.flags = this.flags & -2050 | d >> 31 & 1 | (d >> 20 ^ d >> 19) & 2048;
return d;
};
CPU.prototype.rcr8 = function(a, c) {
c %= 9;
if (!c) {
return a;
}
var d = a >> c | this.getcf() << 8 - c | a << 9 - c;
this.flags_changed &= -2050;
this.flags = this.flags & -2050 | d >> 8 & 1 | (d << 4 ^ d << 5) & 2048;
return d;
};
CPU.prototype.rcr16 = function(a, c) {
c %= 17;
if (!c) {
return a;
}
var d = a >> c | this.getcf() << 16 - c | a << 17 - c;
this.flags_changed &= -2050;
this.flags = this.flags & -2050 | d >> 16 & 1 | (d >> 4 ^ d >> 3) & 2048;
return d;
};
CPU.prototype.rcr32 = function(a, c) {
if (!c) {
return a;
}
var d = a >>> c | this.getcf() << 32 - c;
1 < c && (d |= a << 33 - c);
this.flags_changed &= -2050;
this.flags = this.flags & -2050 | a >> c - 1 & 1 | (d >> 20 ^ d >> 19) & 2048;
return d;
};
CPU.prototype.shl8 = function(a, c) {
if (0 === c) {
return a;
}
this.last_result = a << c;
this.last_op_size = 7;
this.flags_changed = 212;
this.flags = this.flags & -2050 | this.last_result >> 8 & 1 | (this.last_result << 3 ^ this.last_result << 4) & 2048;
return this.last_result;
};
CPU.prototype.shl16 = function(a, c) {
if (0 === c) {
return a;
}
this.last_result = a << c;
this.last_op_size = 15;
this.flags_changed = 212;
this.flags = this.flags & -2050 | this.last_result >> 16 & 1 | (this.last_result >> 5 ^ this.last_result >> 4) & 2048;
return this.last_result;
};
CPU.prototype.shl32 = function(a, c) {
if (0 === c) {
return a;
}
this.last_result = a << c;
this.last_op_size = 31;
this.flags_changed = 212;
this.flags = this.flags & -2050 | a >>> 32 - c & 1;
this.flags |= (this.flags & 1 ^ this.last_result >> 31 & 1) << 11 & 2048;
return this.last_result;
};
CPU.prototype.shr8 = function(a, c) {
if (0 === c) {
return a;
}
this.last_result = a >> c;
this.last_op_size = 7;
this.flags_changed = 212;
this.flags = this.flags & -2050 | a >> c - 1 & 1 | (a >> 7 & 1) << 11 & 2048;
return this.last_result;
};
CPU.prototype.shr16 = function(a, c) {
if (0 === c) {
return a;
}
this.last_result = a >> c;
this.last_op_size = 15;
this.flags_changed = 212;
this.flags = this.flags & -2050 | a >> c - 1 & 1 | a >> 4 & 2048;
return this.last_result;
};
CPU.prototype.shr32 = function(a, c) {
if (0 === c) {
return a;
}
this.last_result = a >>> c;
this.last_op_size = 31;
this.flags_changed = 212;
this.flags = this.flags & -2050 | a >>> c - 1 & 1 | a >> 20 & 2048;
return this.last_result;
};
CPU.prototype.sar8 = function(a, c) {
if (0 === c) {
return a;
}
this.last_result = a >> c;
this.last_op_size = 7;
this.flags_changed = 212;
this.flags = this.flags & -2050 | a >> c - 1 & 1;
return this.last_result;
};
CPU.prototype.sar16 = function(a, c) {
if (0 === c) {
return a;
}
this.last_result = a >> c;
this.last_op_size = 15;
this.flags_changed = 212;
this.flags = this.flags & -2050 | a >> c - 1 & 1;
return this.last_result;
};
CPU.prototype.sar32 = function(a, c) {
if (0 === c) {
return a;
}
this.last_result = a >> c;
this.last_op_size = 31;
this.flags_changed = 212;
this.flags = this.flags & -2050 | a >>> c - 1 & 1;
return this.last_result;
};
CPU.prototype.shrd16 = function(a, c, d) {
if (0 === d) {
return a;
}
16 >= d ? (this.last_result = a >> d | c << 16 - d, this.flags = this.flags & -2 | a >> d - 1 & 1) : (this.last_result = a << 32 - d | c >> d - 16, this.flags = this.flags & -2 | c >> d - 17 & 1);
this.last_op_size = 15;
this.flags_changed = 212;
this.flags = this.flags & -2049 | (this.last_result ^ a) >> 4 & 2048;
return this.last_result;
};
CPU.prototype.shrd32 = function(a, c, d) {
if (0 === d) {
return a;
}
this.last_result = a >>> d | c << 32 - d;
this.last_op_size = 31;
this.flags_changed = 212;
this.flags = this.flags & -2 | a >>> d - 1 & 1;
this.flags = this.flags & -2049 | (this.last_result ^ a) >> 20 & 2048;
return this.last_result;
};
CPU.prototype.shld16 = function(a, c, d) {
if (0 === d) {
return a;
}
16 >= d ? (this.last_result = a << d | c >>> 16 - d, this.flags = this.flags & -2 | a >>> 16 - d & 1) : (this.last_result = a >> 32 - d | c << d - 16, this.flags = this.flags & -2 | c >>> 32 - d & 1);
this.last_op_size = 15;
this.flags_changed = 212;
this.flags = this.flags & -2049 | (this.flags & 1 ^ this.last_result >> 15 & 1) << 11;
return this.last_result;
};
CPU.prototype.shld32 = function(a, c, d) {
if (0 === d) {
return a;
}
this.last_result = a << d | c >>> 32 - d;
this.last_op_size = 31;
this.flags_changed = 212;
this.flags = this.flags & -2 | a >>> 32 - d & 1;
this.flags = this.flags & -2049 | (this.flags & 1 ^ this.last_result >> 31 & 1) << 11;
return this.last_result;
};
CPU.prototype.bt_reg = function(a, c) {
this.flags = this.flags & -2 | a >> c & 1;
this.flags_changed &= -2;
};
CPU.prototype.btc_reg = function(a, c) {
this.flags = this.flags & -2 | a >> c & 1;
this.flags_changed &= -2;
return a ^ 1 << c;
};
CPU.prototype.bts_reg = function(a, c) {
this.flags = this.flags & -2 | a >> c & 1;
this.flags_changed &= -2;
return a | 1 << c;
};
CPU.prototype.btr_reg = function(a, c) {
this.flags = this.flags & -2 | a >> c & 1;
this.flags_changed &= -2;
return a & ~(1 << c);
};
CPU.prototype.bt_mem = function(a, c) {
var d = this.safe_read8(a + (c >> 3));
this.flags = this.flags & -2 | d >> (c & 7) & 1;
this.flags_changed &= -2;
};
CPU.prototype.btc_mem = function(a, c) {
var d = this.translate_address_write(a + (c >> 3)), e = this.memory.read8(d);
c &= 7;
this.flags = this.flags & -2 | e >> c & 1;
this.flags_changed &= -2;
this.memory.write8(d, e ^ 1 << c);
};
CPU.prototype.btr_mem = function(a, c) {
var d = this.translate_address_write(a + (c >> 3)), e = this.memory.read8(d);
c &= 7;
this.flags = this.flags & -2 | e >> c & 1;
this.flags_changed &= -2;
this.memory.write8(d, e & ~(1 << c));
};
CPU.prototype.bts_mem = function(a, c) {
var d = this.translate_address_write(a + (c >> 3)), e = this.memory.read8(d);
c &= 7;
this.flags = this.flags & -2 | e >> c & 1;
this.flags_changed &= -2;
this.memory.write8(d, e | 1 << c);
};
CPU.prototype.bsf16 = function(a, c) {
this.flags_changed = 0;
if (0 === c) {
return this.flags |= 64, a;
}
this.flags &= -65;
return Math.int_log2(-c & c);
};
CPU.prototype.bsf32 = function(a, c) {
this.flags_changed = 0;
if (0 === c) {
return this.flags |= 64, a;
}
this.flags &= -65;
return Math.int_log2((-c & c) >>> 0);
};
CPU.prototype.bsr16 = function(a, c) {
this.flags_changed = 0;
if (0 === c) {
return this.flags |= 64, a;
}
this.flags &= -65;
return Math.int_log2(c);
};
CPU.prototype.bsr32 = function(a, c) {
this.flags_changed = 0;
if (0 === c) {
return this.flags |= 64, a;
}
this.flags &= -65;
return Math.int_log2(c >>> 0);
};
CPU.prototype.popcnt = function(a) {
this.flags_changed = 0;
this.flags &= -2262;
if (a) {
return a = a - (a >> 1 & 1431655765), a = (a & 858993459) + (a >> 2 & 858993459), 16843009 * (a + (a >> 4) & 252645135) >> 24;
}
this.flags |= 64;
return 0;
};
"use strict";
var data_dest, data_src;
CPU.prototype.string_instruction = function(a, c, d, e, f, g) {
var k, m, l, n, p = this.flags & 1024 ? -(a >> 3) : a >> 3, q = !1;
c && !d && (data_src = 32 === a ? this.reg32s[0] : 16 === a ? this.reg16[0] : this.reg8[0]);
e && (m = this.get_seg(0) + this.regv[this.reg_vdi] | 0);
d && (k = this.get_seg_prefix(3) + this.regv[this.reg_vsi] | 0);
if (0 !== this.repeat_string_prefix) {
var r = this.regv[this.reg_vcx] >>> 0, s = r;
if (0 === r) {
return;
}
var t = 16384;
if (8 !== a && (e && m & (a >> 3) - 1 || d && k & (a >> 3) - 1)) {
do {
f(this, k, m), e && (m += p, this.regv[this.reg_vdi] += p), d && (k += p, this.regv[this.reg_vsi] += p), q = 0 !== --this.regv[this.reg_vcx] && (!c || data_src === data_dest === (2 === this.repeat_string_prefix));
} while (q && t--);
} else {
f = p >> 31 | 1;
this.paging ? (d && (t = (f >> 1 ^ ~k) & 4095, n = this.translate_address_read(k)), e && (t = Math.min(t, (f >> 1 ^ ~m) & 4095), l = c ? this.translate_address_read(m) : this.translate_address_write(m)), 32 === a ? t >>= 2 : 16 === a && (t >>= 1)) : (e && (l = m), d && (n = k));
32 === a ? (e && (l >>>= 2), d && (n >>>= 2)) : 16 === a && (e && (l >>>= 1), d && (n >>>= 1));
do {
g(this, n, l), e && (l += f), d && (n += f), q = 0 !== --r && (!c || data_src === data_dest === (2 === this.repeat_string_prefix));
} while (q && t--);
g = p * (s - r) | 0;
e && (this.regv[this.reg_vdi] += g);
d && (this.regv[this.reg_vsi] += g);
this.regv[this.reg_vcx] = r;
this.timestamp_counter += s - r;
}
} else {
8 === a ? (d && (n = this.translate_address_read(k)), e && (l = c ? this.translate_address_read(m) : this.translate_address_write(m)), g(this, n, l)) : f(this, k, m), e && (this.regv[this.reg_vdi] += p), d && (this.regv[this.reg_vsi] += p);
}
c && (32 === a ? this.sub(data_src, data_dest, 31) : 16 === a ? this.sub(data_src, data_dest, 15) : this.sub(data_src, data_dest, 7));
q && (this.instruction_pointer = this.previous_ip);
};
function movsb(a) {
a.string_instruction(8, !1, !0, !0, function() {
}, function(a, d, e) {
a.memory.write8(e, a.memory.read8(d));
});
}
function movsw(a) {
a.string_instruction(16, !1, !0, !0, function(a, d, e) {
a.safe_write16(e, a.safe_read16(d));
}, function(a, d, e) {
a.memory.write_aligned16(e, a.memory.read_aligned16(d));
});
}
function movsd(a) {
if (0 !== a.repeat_string_prefix) {
var c = a.get_seg_prefix(3) + a.regv[a.reg_vsi], d = a.get_seg(0) + a.regv[a.reg_vdi], e = a.regv[a.reg_vcx] >>> 0;
if (!e) {
return;
}
var f = a.paging ? 4095 : 3;
if (0 === (d & f) && 0 === (c & f) && 0 === (a.flags & 1024) && (f = !1, a.paging && (c = a.translate_address_read(c), d = a.translate_address_write(d), 1024 < e && (e = 1024, f = !0)), !a.io.in_mmap_range(c, e) && !a.io.in_mmap_range(d, e))) {
var g = e << 2;
a.regv[a.reg_vcx] -= e;
a.regv[a.reg_vdi] += g;
a.regv[a.reg_vsi] += g;
c >>= 2;
a.memory.mem32s.set(a.memory.mem32s.subarray(c, c + e), d >> 2);
f && (a.instruction_pointer = a.previous_ip);
return;
}
}
a.string_instruction(32, !1, !0, !0, function(a, c, d) {
a.safe_write32(d, a.safe_read32s(c));
}, function(a, c, d) {
a.memory.write_aligned32(d, a.memory.read_aligned32(c));
});
}
function cmpsb(a) {
a.string_instruction(8, !0, !0, !0, function() {
}, function(a, d, e) {
data_dest = a.memory.read8(e);
data_src = a.memory.read8(d);
});
}
function cmpsw(a) {
a.string_instruction(16, !0, !0, !0, function(a, d, e) {
data_dest = a.safe_read16(e);
data_src = a.safe_read16(d);
}, function(a, d, e) {
data_dest = a.memory.read_aligned16(e);
data_src = a.memory.read_aligned16(d);
});
}
function cmpsd(a) {
a.string_instruction(32, !0, !0, !0, function(a, d, e) {
data_dest = a.safe_read32s(e);
data_src = a.safe_read32s(d);
}, function(a, d, e) {
data_dest = a.memory.read_aligned32(e);
data_src = a.memory.read_aligned32(d);
});
}
function stosb(a) {
var c = a.reg8[0];
a.string_instruction(8, !1, !1, !0, function() {
}, function(a, e, f) {
a.memory.write8(f, c);
});
}
function stosw(a) {
var c = a.reg16[0];
a.string_instruction(16, !1, !1, !0, function(a, e, f) {
a.safe_write16(f, c);
}, function(a, e, f) {
a.memory.write_aligned16(f, c);
});
}
function stosd(a) {
var c = a.reg32s[0];
a.string_instruction(32, !1, !1, !0, function(a, e, f) {
a.safe_write32(f, c);
}, function(a, e, f) {
a.memory.write_aligned32(f, c);
});
}
function lodsb(a) {
a.string_instruction(8, !1, !0, !1, function() {
}, function(a, d) {
a.reg8[0] = a.memory.read8(d);
});
}
function lodsw(a) {
a.string_instruction(16, !1, !0, !1, function(a, d) {
a.reg16[0] = a.safe_read16(d);
}, function(a, d) {
a.reg16[0] = a.memory.read_aligned16(d);
});
}
function lodsd(a) {
a.string_instruction(32, !1, !0, !1, function(a, d) {
a.reg32s[0] = a.safe_read32s(d);
}, function(a, d) {
a.reg32s[0] = a.memory.read_aligned32(d);
});
}
function scasb(a) {
a.string_instruction(8, !0, !1, !0, function() {
}, function(a, d, e) {
data_dest = a.memory.read8(e);
});
}
function scasw(a) {
a.string_instruction(16, !0, !1, !0, function(a, d, e) {
data_dest = a.safe_read16(e);
}, function(a, d, e) {
data_dest = a.memory.read_aligned16(e);
});
}
function scasd(a) {
a.string_instruction(32, !0, !1, !0, function(a, d, e) {
data_dest = a.safe_read32s(e);
}, function(a, d, e) {
data_dest = a.memory.read_aligned32(e);
});
}
function insb(a) {
var c = a.reg16[4];
a.test_privileges_for_io(c, 1);
a.string_instruction(8, !1, !1, !0, function() {
}, function(a, e, f) {
a.memory.write8(f, a.io.port_read8(c));
});
}
function insw(a) {
var c = a.reg16[4];
a.test_privileges_for_io(c, 2);
a.string_instruction(16, !1, !1, !0, function(a, e, f) {
a.safe_write16(f, a.io.port_read16(c));
}, function(a, e, f) {
a.memory.write_aligned16(f, a.io.port_read16(c));
});
}
function insd(a) {
var c = a.reg16[4];
a.test_privileges_for_io(c, 4);
a.string_instruction(32, !1, !1, !0, function(a, e, f) {
a.safe_write32(f, a.io.port_read32(c));
}, function(a, e, f) {
a.memory.write_aligned32(f, a.io.port_read32(c));
});
}
function outsb(a) {
var c = a.reg16[4];
a.test_privileges_for_io(c, 1);
a.string_instruction(8, !1, !0, !1, function() {
}, function(a, e) {
a.io.port_write8(c, a.memory.read8(e));
});
}
function outsw(a) {
var c = a.reg16[4];
a.test_privileges_for_io(c, 2);
a.string_instruction(16, !1, !0, !1, function(a, e) {
a.io.port_write16(c, a.safe_read16(e));
}, function(a, e) {
a.io.port_write16(c, a.memory.read_aligned16(e));
});
}
function outsd(a) {
var c = a.reg16[4];
a.test_privileges_for_io(c, 4);
a.string_instruction(32, !1, !0, !1, function(a, e) {
a.io.port_write32(c, a.safe_read32s(e));
}, function(a, e) {
a.io.port_write32(c, a.memory.read_aligned32(e));
});
}
"use strict";
var table16 = [], table32 = [], table0F_16 = [], table0F_32 = [];
CPU.prototype.table16 = table16;
CPU.prototype.table32 = table32;
CPU.prototype.table0F_16 = table0F_16;
CPU.prototype.table0F_32 = table0F_32;
table16[0] = table32[0] = function(a) {
var c = a.read_imm8(), d, e;
192 > c ? (e = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(e)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1];
d = a.add(d, a.reg8[c >> 1 & 12 | c >> 5 & 1], 7);
192 > c ? a.memory.write8(e, d) : a.reg8[c << 2 & 12 | c >> 2 & 1] = d;
};
table16[1] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.add(d, a.reg16[c >> 2 & 14], 15);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
};
table32[1] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.add(d, a.reg32s[c >> 3 & 7], 31);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
};
table16[2] = table32[2] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.reg8[c >> 1 & 12 | c >> 5 & 1] = a.add(a.reg8[c >> 1 & 12 | c >> 5 & 1], d, 7);
};
table16[3] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.reg16[c >> 2 & 14] = a.add(a.reg16[c >> 2 & 14], d, 15);
};
table32[3] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.reg32s[c >> 3 & 7] = a.add(a.reg32s[c >> 3 & 7], d, 31);
};
table16[4] = table32[4] = function(a) {
a.reg8[0] = a.add(a.reg8[0], a.read_imm8(), 7);
};
table16[5] = function(a) {
a.reg16[0] = a.add(a.reg16[0], a.read_imm16(), 15);
};
table32[5] = function(a) {
a.reg32s[0] = a.add(a.reg32s[0], a.read_imm32s(), 31);
};
table16[6] = function(a) {
a.push16(a.sreg[0]);
};
table32[6] = function(a) {
a.push32(a.sreg[0]);
};
table16[7] = function(a) {
a.switch_seg(0, a.safe_read16(a.get_stack_pointer(0)));
a.stack_reg[a.reg_vsp] += 2;
};
table32[7] = function(a) {
a.switch_seg(0, a.safe_read16(a.get_stack_pointer(0)));
a.stack_reg[a.reg_vsp] += 4;
};
table16[8] = table32[8] = function(a) {
var c = a.read_imm8(), d, e;
192 > c ? (e = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(e)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1];
d = a.or(d, a.reg8[c >> 1 & 12 | c >> 5 & 1], 7);
192 > c ? a.memory.write8(e, d) : a.reg8[c << 2 & 12 | c >> 2 & 1] = d;
};
table16[9] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.or(d, a.reg16[c >> 2 & 14], 15);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
};
table32[9] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.or(d, a.reg32s[c >> 3 & 7], 31);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
};
table16[10] = table32[10] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.reg8[c >> 1 & 12 | c >> 5 & 1] = a.or(a.reg8[c >> 1 & 12 | c >> 5 & 1], d, 7);
};
table16[11] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.reg16[c >> 2 & 14] = a.or(a.reg16[c >> 2 & 14], d, 15);
};
table32[11] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.reg32s[c >> 3 & 7] = a.or(a.reg32s[c >> 3 & 7], d, 31);
};
table16[12] = table32[12] = function(a) {
a.reg8[0] = a.or(a.reg8[0], a.read_imm8(), 7);
};
table16[13] = function(a) {
a.reg16[0] = a.or(a.reg16[0], a.read_imm16(), 15);
};
table32[13] = function(a) {
a.reg32s[0] = a.or(a.reg32s[0], a.read_imm32s(), 31);
};
table16[14] = function(a) {
a.push16(a.sreg[1]);
};
table32[14] = function(a) {
a.push32(a.sreg[1]);
};
table16[15] = table32[15] = function(a) {
a.table0F[a.read_imm8()](a);
};
table16[16] = table32[16] = function(a) {
var c = a.read_imm8(), d, e;
192 > c ? (e = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(e)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1];
d = a.adc(d, a.reg8[c >> 1 & 12 | c >> 5 & 1], 7);
192 > c ? a.memory.write8(e, d) : a.reg8[c << 2 & 12 | c >> 2 & 1] = d;
};
table16[17] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.adc(d, a.reg16[c >> 2 & 14], 15);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
};
table32[17] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.adc(d, a.reg32s[c >> 3 & 7], 31);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
};
table16[18] = table32[18] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.reg8[c >> 1 & 12 | c >> 5 & 1] = a.adc(a.reg8[c >> 1 & 12 | c >> 5 & 1], d, 7);
};
table16[19] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.reg16[c >> 2 & 14] = a.adc(a.reg16[c >> 2 & 14], d, 15);
};
table32[19] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.reg32s[c >> 3 & 7] = a.adc(a.reg32s[c >> 3 & 7], d, 31);
};
table16[20] = table32[20] = function(a) {
a.reg8[0] = a.adc(a.reg8[0], a.read_imm8(), 7);
};
table16[21] = function(a) {
a.reg16[0] = a.adc(a.reg16[0], a.read_imm16(), 15);
};
table32[21] = function(a) {
a.reg32s[0] = a.adc(a.reg32s[0], a.read_imm32s(), 31);
};
table16[22] = function(a) {
a.push16(a.sreg[2]);
};
table32[22] = function(a) {
a.push32(a.sreg[2]);
};
table16[23] = function(a) {
a.switch_seg(2, a.safe_read16(a.get_stack_pointer(0)));
a.stack_reg[a.reg_vsp] += 2;
};
table32[23] = function(a) {
a.switch_seg(2, a.safe_read16(a.get_stack_pointer(0)));
a.stack_reg[a.reg_vsp] += 4;
};
table16[24] = table32[24] = function(a) {
var c = a.read_imm8(), d, e;
192 > c ? (e = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(e)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1];
d = a.sbb(d, a.reg8[c >> 1 & 12 | c >> 5 & 1], 7);
192 > c ? a.memory.write8(e, d) : a.reg8[c << 2 & 12 | c >> 2 & 1] = d;
};
table16[25] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.sbb(d, a.reg16[c >> 2 & 14], 15);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
};
table32[25] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.sbb(d, a.reg32s[c >> 3 & 7], 31);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
};
table16[26] = table32[26] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.reg8[c >> 1 & 12 | c >> 5 & 1] = a.sbb(a.reg8[c >> 1 & 12 | c >> 5 & 1], d, 7);
};
table16[27] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.reg16[c >> 2 & 14] = a.sbb(a.reg16[c >> 2 & 14], d, 15);
};
table32[27] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.reg32s[c >> 3 & 7] = a.sbb(a.reg32s[c >> 3 & 7], d, 31);
};
table16[28] = table32[28] = function(a) {
a.reg8[0] = a.sbb(a.reg8[0], a.read_imm8(), 7);
};
table16[29] = function(a) {
a.reg16[0] = a.sbb(a.reg16[0], a.read_imm16(), 15);
};
table32[29] = function(a) {
a.reg32s[0] = a.sbb(a.reg32s[0], a.read_imm32s(), 31);
};
table16[30] = function(a) {
a.push16(a.sreg[3]);
};
table32[30] = function(a) {
a.push32(a.sreg[3]);
};
table16[31] = function(a) {
a.switch_seg(3, a.safe_read16(a.get_stack_pointer(0)));
a.stack_reg[a.reg_vsp] += 2;
};
table32[31] = function(a) {
a.switch_seg(3, a.safe_read16(a.get_stack_pointer(0)));
a.stack_reg[a.reg_vsp] += 4;
};
table16[32] = table32[32] = function(a) {
var c = a.read_imm8(), d, e;
192 > c ? (e = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(e)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1];
d = a.and(d, a.reg8[c >> 1 & 12 | c >> 5 & 1], 7);
192 > c ? a.memory.write8(e, d) : a.reg8[c << 2 & 12 | c >> 2 & 1] = d;
};
table16[33] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.and(d, a.reg16[c >> 2 & 14], 15);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
};
table32[33] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.and(d, a.reg32s[c >> 3 & 7], 31);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
};
table16[34] = table32[34] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.reg8[c >> 1 & 12 | c >> 5 & 1] = a.and(a.reg8[c >> 1 & 12 | c >> 5 & 1], d, 7);
};
table16[35] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.reg16[c >> 2 & 14] = a.and(a.reg16[c >> 2 & 14], d, 15);
};
table32[35] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.reg32s[c >> 3 & 7] = a.and(a.reg32s[c >> 3 & 7], d, 31);
};
table16[36] = table32[36] = function(a) {
a.reg8[0] = a.and(a.reg8[0], a.read_imm8(), 7);
};
table16[37] = function(a) {
a.reg16[0] = a.and(a.reg16[0], a.read_imm16(), 15);
};
table32[37] = function(a) {
a.reg32s[0] = a.and(a.reg32s[0], a.read_imm32s(), 31);
};
table16[38] = table32[38] = function(a) {
a.seg_prefix(0);
};
table16[39] = table32[39] = function(a) {
a.bcd_daa();
};
table16[40] = table32[40] = function(a) {
var c = a.read_imm8(), d, e;
192 > c ? (e = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(e)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1];
d = a.sub(d, a.reg8[c >> 1 & 12 | c >> 5 & 1], 7);
192 > c ? a.memory.write8(e, d) : a.reg8[c << 2 & 12 | c >> 2 & 1] = d;
};
table16[41] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.sub(d, a.reg16[c >> 2 & 14], 15);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
};
table32[41] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.sub(d, a.reg32s[c >> 3 & 7], 31);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
};
table16[42] = table32[42] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.reg8[c >> 1 & 12 | c >> 5 & 1] = a.sub(a.reg8[c >> 1 & 12 | c >> 5 & 1], d, 7);
};
table16[43] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.reg16[c >> 2 & 14] = a.sub(a.reg16[c >> 2 & 14], d, 15);
};
table32[43] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.reg32s[c >> 3 & 7] = a.sub(a.reg32s[c >> 3 & 7], d, 31);
};
table16[44] = table32[44] = function(a) {
a.reg8[0] = a.sub(a.reg8[0], a.read_imm8(), 7);
};
table16[45] = function(a) {
a.reg16[0] = a.sub(a.reg16[0], a.read_imm16(), 15);
};
table32[45] = function(a) {
a.reg32s[0] = a.sub(a.reg32s[0], a.read_imm32s(), 31);
};
table16[46] = table32[46] = function(a) {
a.seg_prefix(1);
};
table16[47] = table32[47] = function(a) {
a.bcd_das();
};
table16[48] = table32[48] = function(a) {
var c = a.read_imm8(), d, e;
192 > c ? (e = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(e)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1];
d = a.xor(d, a.reg8[c >> 1 & 12 | c >> 5 & 1], 7);
192 > c ? a.memory.write8(e, d) : a.reg8[c << 2 & 12 | c >> 2 & 1] = d;
};
table16[49] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.xor(d, a.reg16[c >> 2 & 14], 15);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
};
table32[49] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.xor(d, a.reg32s[c >> 3 & 7], 31);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
};
table16[50] = table32[50] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.reg8[c >> 1 & 12 | c >> 5 & 1] = a.xor(a.reg8[c >> 1 & 12 | c >> 5 & 1], d, 7);
};
table16[51] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.reg16[c >> 2 & 14] = a.xor(a.reg16[c >> 2 & 14], d, 15);
};
table32[51] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.reg32s[c >> 3 & 7] = a.xor(a.reg32s[c >> 3 & 7], d, 31);
};
table16[52] = table32[52] = function(a) {
a.reg8[0] = a.xor(a.reg8[0], a.read_imm8(), 7);
};
table16[53] = function(a) {
a.reg16[0] = a.xor(a.reg16[0], a.read_imm16(), 15);
};
table32[53] = function(a) {
a.reg32s[0] = a.xor(a.reg32s[0], a.read_imm32s(), 31);
};
table16[54] = table32[54] = function(a) {
a.seg_prefix(2);
};
table16[55] = table32[55] = function(a) {
a.bcd_aaa();
};
table16[56] = table32[56] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.sub(d, a.reg8[c >> 1 & 12 | c >> 5 & 1], 7);
};
table16[57] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.sub(d, a.reg16[c >> 2 & 14], 15);
};
table32[57] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.sub(d, a.reg32s[c >> 3 & 7], 31);
};
table16[58] = table32[58] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.sub(a.reg8[c >> 1 & 12 | c >> 5 & 1], d, 7);
};
table16[59] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.sub(a.reg16[c >> 2 & 14], d, 15);
};
table32[59] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.sub(a.reg32s[c >> 3 & 7], d, 31);
};
table16[60] = table32[60] = function(a) {
a.sub(a.reg8[0], a.read_imm8(), 7);
};
table16[61] = function(a) {
a.sub(a.reg16[0], a.read_imm16(), 15);
};
table32[61] = function(a) {
a.sub(a.reg32s[0], a.read_imm32s(), 31);
};
table16[62] = table32[62] = function(a) {
a.seg_prefix(3);
};
table16[63] = table32[63] = function(a) {
a.bcd_aas();
};
table16[64] = function(a) {
a.reg16[0] = a.inc(a.reg16[0], 15);
};
table32[64] = function(a) {
a.reg32s[0] = a.inc(a.reg32s[0], 31);
};
table16[65] = function(a) {
a.reg16[2] = a.inc(a.reg16[2], 15);
};
table32[65] = function(a) {
a.reg32s[1] = a.inc(a.reg32s[1], 31);
};
table16[66] = function(a) {
a.reg16[4] = a.inc(a.reg16[4], 15);
};
table32[66] = function(a) {
a.reg32s[2] = a.inc(a.reg32s[2], 31);
};
table16[67] = function(a) {
a.reg16[6] = a.inc(a.reg16[6], 15);
};
table32[67] = function(a) {
a.reg32s[3] = a.inc(a.reg32s[3], 31);
};
table16[68] = function(a) {
a.reg16[8] = a.inc(a.reg16[8], 15);
};
table32[68] = function(a) {
a.reg32s[4] = a.inc(a.reg32s[4], 31);
};
table16[69] = function(a) {
a.reg16[10] = a.inc(a.reg16[10], 15);
};
table32[69] = function(a) {
a.reg32s[5] = a.inc(a.reg32s[5], 31);
};
table16[70] = function(a) {
a.reg16[12] = a.inc(a.reg16[12], 15);
};
table32[70] = function(a) {
a.reg32s[6] = a.inc(a.reg32s[6], 31);
};
table16[71] = function(a) {
a.reg16[14] = a.inc(a.reg16[14], 15);
};
table32[71] = function(a) {
a.reg32s[7] = a.inc(a.reg32s[7], 31);
};
table16[72] = function(a) {
a.reg16[0] = a.dec(a.reg16[0], 15);
};
table32[72] = function(a) {
a.reg32s[0] = a.dec(a.reg32s[0], 31);
};
table16[73] = function(a) {
a.reg16[2] = a.dec(a.reg16[2], 15);
};
table32[73] = function(a) {
a.reg32s[1] = a.dec(a.reg32s[1], 31);
};
table16[74] = function(a) {
a.reg16[4] = a.dec(a.reg16[4], 15);
};
table32[74] = function(a) {
a.reg32s[2] = a.dec(a.reg32s[2], 31);
};
table16[75] = function(a) {
a.reg16[6] = a.dec(a.reg16[6], 15);
};
table32[75] = function(a) {
a.reg32s[3] = a.dec(a.reg32s[3], 31);
};
table16[76] = function(a) {
a.reg16[8] = a.dec(a.reg16[8], 15);
};
table32[76] = function(a) {
a.reg32s[4] = a.dec(a.reg32s[4], 31);
};
table16[77] = function(a) {
a.reg16[10] = a.dec(a.reg16[10], 15);
};
table32[77] = function(a) {
a.reg32s[5] = a.dec(a.reg32s[5], 31);
};
table16[78] = function(a) {
a.reg16[12] = a.dec(a.reg16[12], 15);
};
table32[78] = function(a) {
a.reg32s[6] = a.dec(a.reg32s[6], 31);
};
table16[79] = function(a) {
a.reg16[14] = a.dec(a.reg16[14], 15);
};
table32[79] = function(a) {
a.reg32s[7] = a.dec(a.reg32s[7], 31);
};
table16[80] = function(a) {
a.push16(a.reg16[0]);
};
table32[80] = function(a) {
a.push32(a.reg32s[0]);
};
table16[81] = function(a) {
a.push16(a.reg16[2]);
};
table32[81] = function(a) {
a.push32(a.reg32s[1]);
};
table16[82] = function(a) {
a.push16(a.reg16[4]);
};
table32[82] = function(a) {
a.push32(a.reg32s[2]);
};
table16[83] = function(a) {
a.push16(a.reg16[6]);
};
table32[83] = function(a) {
a.push32(a.reg32s[3]);
};
table16[84] = function(a) {
a.push16(a.reg16[8]);
};
table32[84] = function(a) {
a.push32(a.reg32s[4]);
};
table16[85] = function(a) {
a.push16(a.reg16[10]);
};
table32[85] = function(a) {
a.push32(a.reg32s[5]);
};
table16[86] = function(a) {
a.push16(a.reg16[12]);
};
table32[86] = function(a) {
a.push32(a.reg32s[6]);
};
table16[87] = function(a) {
a.push16(a.reg16[14]);
};
table32[87] = function(a) {
a.push32(a.reg32s[7]);
};
table16[88] = function(a) {
a.reg16[0] = a.pop16();
};
table32[88] = function(a) {
a.reg32s[0] = a.pop32s();
};
table16[89] = function(a) {
a.reg16[2] = a.pop16();
};
table32[89] = function(a) {
a.reg32s[1] = a.pop32s();
};
table16[90] = function(a) {
a.reg16[4] = a.pop16();
};
table32[90] = function(a) {
a.reg32s[2] = a.pop32s();
};
table16[91] = function(a) {
a.reg16[6] = a.pop16();
};
table32[91] = function(a) {
a.reg32s[3] = a.pop32s();
};
table16[92] = function(a) {
a.reg16[8] = a.pop16();
};
table32[92] = function(a) {
a.reg32s[4] = a.pop32s();
};
table16[93] = function(a) {
a.reg16[10] = a.pop16();
};
table32[93] = function(a) {
a.reg32s[5] = a.pop32s();
};
table16[94] = function(a) {
a.reg16[12] = a.pop16();
};
table32[94] = function(a) {
a.reg32s[6] = a.pop32s();
};
table16[95] = function(a) {
a.reg16[14] = a.pop16();
};
table32[95] = function(a) {
a.reg32s[7] = a.pop32s();
};
table16[96] = function(a) {
a.pusha16();
};
table32[96] = function(a) {
a.pusha32();
};
table16[97] = function(a) {
a.popa16();
};
table32[97] = function(a) {
a.popa32();
};
table16[98] = table32[98] = function() {
};
table16[99] = table32[99] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.arpl(d, c >> 2 & 14);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
};
table16[100] = table32[100] = function(a) {
a.seg_prefix(4);
};
table16[101] = table32[101] = function(a) {
a.seg_prefix(5);
};
table16[102] = table32[102] = function(a) {
a.operand_size_32 = !a.is_32;
a.update_operand_size();
a.do_op();
a.operand_size_32 = a.is_32;
a.update_operand_size();
};
table16[103] = table32[103] = function(a) {
a.address_size_32 = !a.is_32;
a.update_address_size();
a.do_op();
a.address_size_32 = a.is_32;
a.update_address_size();
};
table16[104] = function(a) {
a.push16(a.read_imm16());
};
table32[104] = function(a) {
a.push32(a.read_imm32s());
};
table16[105] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) << 16 >> 16 : a.reg16s[c << 1 & 14];
a.reg16[c >> 2 & 14] = a.imul_reg16(a.read_imm16s(), d);
};
table32[105] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.reg32s[c >> 3 & 7] = a.imul_reg32(a.read_imm32s(), d);
};
table16[106] = function(a) {
a.push16(a.read_imm8s());
};
table32[106] = function(a) {
a.push32(a.read_imm8s());
};
table16[107] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) << 16 >> 16 : a.reg16s[c << 1 & 14];
a.reg16[c >> 2 & 14] = a.imul_reg16(a.read_imm8s(), d);
};
table32[107] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.reg32s[c >> 3 & 7] = a.imul_reg32(a.read_imm8s(), d);
};
table16[108] = table32[108] = function(a) {
insb(a);
};
table16[109] = function(a) {
insw(a);
};
table32[109] = function(a) {
insd(a);
};
table16[110] = table32[110] = function(a) {
outsb(a);
};
table16[111] = function(a) {
outsw(a);
};
table32[111] = function(a) {
outsd(a);
};
table16[112] = table32[112] = function(a) {
a.test_o() && (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[113] = table32[113] = function(a) {
a.test_o() || (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[114] = table32[114] = function(a) {
a.test_b() && (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[115] = table32[115] = function(a) {
a.test_b() || (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[116] = table32[116] = function(a) {
a.test_z() && (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[117] = table32[117] = function(a) {
a.test_z() || (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[118] = table32[118] = function(a) {
a.test_be() && (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[119] = table32[119] = function(a) {
a.test_be() || (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[120] = table32[120] = function(a) {
a.test_s() && (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[121] = table32[121] = function(a) {
a.test_s() || (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[122] = table32[122] = function(a) {
a.test_p() && (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[123] = table32[123] = function(a) {
a.test_p() || (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[124] = table32[124] = function(a) {
a.test_l() && (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[125] = table32[125] = function(a) {
a.test_l() || (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[126] = table32[126] = function(a) {
a.test_le() && (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[127] = table32[127] = function(a) {
a.test_le() || (a.instruction_pointer = a.instruction_pointer + a.read_imm8s() | 0);
a.instruction_pointer++;
a.last_instr_jump = !0;
};
table16[128] = table32[128] = function(a) {
var c = a.read_imm8();
if (56 === (c & 56)) {
var d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.sub(d, a.read_imm8(), 7);
} else {
var e, f, g;
192 > c ? (f = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(f)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1];
g = 0;
e = a.read_imm8();
switch(c >> 3 & 7) {
case 0:
g = a.add(d, e, 7);
break;
case 1:
g = a.or(d, e, 7);
break;
case 2:
g = a.adc(d, e, 7);
break;
case 3:
g = a.sbb(d, e, 7);
break;
case 4:
g = a.and(d, e, 7);
break;
case 5:
g = a.sub(d, e, 7);
break;
case 6:
g = a.xor(d, e, 7);
break;
case 7:
g = dbg_assert.bind(this, 0)(d, e);
}
192 > c ? a.memory.write8(f, g) : a.reg8[c << 2 & 12 | c >> 2 & 1] = g;
}
};
table16[129] = function(a) {
var c = a.read_imm8();
if (56 === (c & 56)) {
var d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.sub(d, a.read_imm16(), 15);
} else {
var e, f, g = 0, k;
192 > c ? (d = a.modrm_resolve(c), f = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (g = a.translate_address_write(d + 1), d = a.virt_boundary_read16(f, g)) : d = a.memory.read16(f)) : d = a.reg16[c << 1 & 14];
k = 0;
e = a.read_imm16();
switch(c >> 3 & 7) {
case 0:
k = a.add(d, e, 15);
break;
case 1:
k = a.or(d, e, 15);
break;
case 2:
k = a.adc(d, e, 15);
break;
case 3:
k = a.sbb(d, e, 15);
break;
case 4:
k = a.and(d, e, 15);
break;
case 5:
k = a.sub(d, e, 15);
break;
case 6:
k = a.xor(d, e, 15);
break;
case 7:
k = dbg_assert.bind(this, 0)(d, e);
}
192 > c ? g ? a.virt_boundary_write16(f, g, k) : a.memory.write16(f, k) : a.reg16[c << 1 & 14] = k;
}
};
table32[129] = function(a) {
var c = a.read_imm8();
if (56 === (c & 56)) {
var d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.sub(d, a.read_imm32s(), 31);
} else {
var e, f, g = 0, k;
192 > c ? (d = a.modrm_resolve(c), f = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (g = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(f, g)) : d = a.memory.read32s(f)) : d = a.reg32s[c & 7];
k = 0;
e = a.read_imm32s();
switch(c >> 3 & 7) {
case 0:
k = a.add(d, e, 31);
break;
case 1:
k = a.or(d, e, 31);
break;
case 2:
k = a.adc(d, e, 31);
break;
case 3:
k = a.sbb(d, e, 31);
break;
case 4:
k = a.and(d, e, 31);
break;
case 5:
k = a.sub(d, e, 31);
break;
case 6:
k = a.xor(d, e, 31);
break;
case 7:
k = dbg_assert.bind(this, 0)(d, e);
}
192 > c ? g ? a.virt_boundary_write32(f, g, k) : a.memory.write32(f, k) : a.reg32s[c & 7] = k;
}
};
table16[130] = table32[130] = function(a) {
a.table[128](a);
};
table16[131] = function(a) {
var c = a.read_imm8();
if (56 === (c & 56)) {
var d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.sub(d, a.read_imm8s(), 15);
} else {
var e, f, g = 0, k;
192 > c ? (d = a.modrm_resolve(c), f = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (g = a.translate_address_write(d + 1), d = a.virt_boundary_read16(f, g)) : d = a.memory.read16(f)) : d = a.reg16[c << 1 & 14];
k = 0;
e = a.read_imm8s();
switch(c >> 3 & 7) {
case 0:
k = a.add(d, e, 15);
break;
case 1:
k = a.or(d, e, 15);
break;
case 2:
k = a.adc(d, e, 15);
break;
case 3:
k = a.sbb(d, e, 15);
break;
case 4:
k = a.and(d, e, 15);
break;
case 5:
k = a.sub(d, e, 15);
break;
case 6:
k = a.xor(d, e, 15);
break;
case 7:
k = dbg_assert.bind(this, 0)(d, e);
}
192 > c ? g ? a.virt_boundary_write16(f, g, k) : a.memory.write16(f, k) : a.reg16[c << 1 & 14] = k;
}
};
table32[131] = function(a) {
var c = a.read_imm8();
if (56 === (c & 56)) {
var d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.sub(d, a.read_imm8s(), 31);
} else {
var e, f, g = 0, k;
192 > c ? (d = a.modrm_resolve(c), f = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (g = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(f, g)) : d = a.memory.read32s(f)) : d = a.reg32s[c & 7];
k = 0;
e = a.read_imm8s();
switch(c >> 3 & 7) {
case 0:
k = a.add(d, e, 31);
break;
case 1:
k = a.or(d, e, 31);
break;
case 2:
k = a.adc(d, e, 31);
break;
case 3:
k = a.sbb(d, e, 31);
break;
case 4:
k = a.and(d, e, 31);
break;
case 5:
k = a.sub(d, e, 31);
break;
case 6:
k = a.xor(d, e, 31);
break;
case 7:
k = dbg_assert.bind(this, 0)(d, e);
}
192 > c ? g ? a.virt_boundary_write32(f, g, k) : a.memory.write32(f, k) : a.reg32s[c & 7] = k;
}
};
table16[132] = table32[132] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.and(d, a.reg8[c >> 1 & 12 | c >> 5 & 1], 7);
};
table16[133] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.and(d, a.reg16[c >> 2 & 14], 15);
};
table32[133] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.and(d, a.reg32s[c >> 3 & 7], 31);
};
table16[134] = table32[134] = function(a) {
var c = a.read_imm8(), d, e;
192 > c ? (e = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(e)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1];
d = a.xchg8(d, c);
192 > c ? a.memory.write8(e, d) : a.reg8[c << 2 & 12 | c >> 2 & 1] = d;
};
table16[135] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.xchg16(d, c);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
};
table32[135] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.xchg32(d, c);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
};
table16[136] = table32[136] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = a.reg8[c >> 1 & 12 | c >> 5 & 1];
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table16[137] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = a.reg16[c >> 2 & 14];
192 > c ? a.safe_write16(d, e) : a.reg16[c << 1 & 14] = e;
};
table32[137] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = a.reg32s[c >> 3 & 7];
192 > c ? a.safe_write32(d, e) : a.reg32[c & 7] = e;
};
table16[138] = table32[138] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.reg8[c >> 1 & 12 | c >> 5 & 1] = d;
};
table16[139] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.reg16[c >> 2 & 14] = d;
};
table32[139] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.reg32s[c >> 3 & 7] = d;
};
table16[140] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = a.sreg[c >> 3 & 7];
192 > c ? a.safe_write16(d, e) : a.reg16[c << 1 & 14] = e;
};
table32[140] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = a.sreg[c >> 3 & 7];
192 > c ? a.safe_write32(d, e) : a.reg32[c & 7] = e;
};
table16[141] = function(a) {
var c = a.read_imm8();
192 <= c && a.trigger_ud();
a.segment_prefix = 9;
a.reg16[(c >> 3 & 7) << 1] = a.modrm_resolve(c);
a.segment_prefix = -1;
};
table32[141] = function(a) {
var c = a.read_imm8();
192 <= c && a.trigger_ud();
a.segment_prefix = 9;
a.reg32s[c >> 3 & 7] = a.modrm_resolve(c);
a.segment_prefix = -1;
};
table16[142] = table32[142] = function(a) {
var c = a.read_imm8(), d = c >> 3 & 7, c = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.switch_seg(d, c);
};
table16[143] = function(a) {
var c = a.read_imm8(), d = a.safe_read16(a.get_stack_pointer(0));
a.stack_reg[a.reg_vsp] += 2;
192 > c ? (c = a.modrm_resolve(c), a.stack_reg[a.reg_vsp] -= 2, a.safe_write16(c, d), a.stack_reg[a.reg_vsp] += 2) : a.reg16[c << 1 & 14] = d;
};
table32[143] = function(a) {
var c = a.read_imm8(), d = a.safe_read32s(a.get_stack_pointer(0));
a.stack_reg[a.reg_vsp] += 4;
192 > c ? (c = a.modrm_resolve(c), a.stack_reg[a.reg_vsp] -= 4, a.safe_write32(c, d), a.stack_reg[a.reg_vsp] += 4) : a.reg32s[c & 7] = d;
};
table16[144] = table32[144] = function() {
};
table16[145] = function(a) {
a.xchg16r(2);
};
table32[145] = function(a) {
a.xchg32r(1);
};
table16[146] = function(a) {
a.xchg16r(4);
};
table32[146] = function(a) {
a.xchg32r(2);
};
table16[147] = function(a) {
a.xchg16r(6);
};
table32[147] = function(a) {
a.xchg32r(3);
};
table16[148] = function(a) {
a.xchg16r(8);
};
table32[148] = function(a) {
a.xchg32r(4);
};
table16[149] = function(a) {
a.xchg16r(10);
};
table32[149] = function(a) {
a.xchg32r(5);
};
table16[150] = function(a) {
a.xchg16r(12);
};
table32[150] = function(a) {
a.xchg32r(6);
};
table16[151] = function(a) {
a.xchg16r(14);
};
table32[151] = function(a) {
a.xchg32r(7);
};
table16[152] = function(a) {
a.reg16[0] = a.reg8s[0];
};
table32[152] = function(a) {
a.reg32s[0] = a.reg16s[0];
};
table16[153] = function(a) {
a.reg16[4] = a.reg16s[0] >> 15;
};
table32[153] = function(a) {
a.reg32s[2] = a.reg32s[0] >> 31;
};
table16[154] = function(a) {
var c = a.read_imm16(), d = a.read_imm16();
a.writable_or_pagefault(a.get_stack_pointer(-4), 4);
a.push16(a.sreg[1]);
a.push16(a.get_real_eip());
a.switch_seg(1, d);
a.instruction_pointer = a.get_seg(1) + c | 0;
a.last_instr_jump = !0;
};
table32[154] = function(a) {
var c = a.read_imm32s(), d = a.read_imm16();
a.writable_or_pagefault(a.get_stack_pointer(-8), 8);
a.push32(a.sreg[1]);
a.push32(a.get_real_eip());
a.switch_seg(1, d);
a.instruction_pointer = a.get_seg(1) + c | 0;
a.last_instr_jump = !0;
};
table16[155] = table32[155] = function(a) {
10 === (a.cr0 & 10) && a.trigger_nm();
};
table16[156] = function(a) {
a.flags & 131072 && 3 > a.getiopl() ? a.trigger_gp(0) : (a.load_eflags(), a.push16(a.flags));
};
table32[156] = function(a) {
a.flags & 131072 && 3 > a.getiopl() ? a.trigger_gp(0) : (a.load_eflags(), a.push32(a.flags & -196609));
};
table16[157] = function(a) {
a.flags & 131072 && 3 > a.getiopl() && a.trigger_gp(0);
a.update_eflags(a.flags & -65536 | a.pop16());
a.handle_irqs();
};
table32[157] = function(a) {
a.flags & 131072 && 3 > a.getiopl() && a.trigger_gp(0);
a.update_eflags(a.pop32s());
a.handle_irqs();
};
table16[158] = table32[158] = function(a) {
a.flags = a.flags & -256 | a.reg8[1];
a.flags = a.flags & 4161493 | 2;
a.flags_changed = 0;
};
table16[159] = table32[159] = function(a) {
a.load_eflags();
a.reg8[1] = a.flags;
};
table16[160] = table32[160] = function(a) {
var c = a.safe_read8(a.read_moffs());
a.reg8[0] = c;
};
table16[161] = function(a) {
var c = a.safe_read16(a.read_moffs());
a.reg16[0] = c;
};
table32[161] = function(a) {
var c = a.safe_read32s(a.read_moffs());
a.reg32s[0] = c;
};
table16[162] = table32[162] = function(a) {
a.safe_write8(a.read_moffs(), a.reg8[0]);
};
table16[163] = function(a) {
a.safe_write16(a.read_moffs(), a.reg16[0]);
};
table32[163] = function(a) {
a.safe_write32(a.read_moffs(), a.reg32s[0]);
};
table16[164] = table32[164] = function(a) {
movsb(a);
};
table16[165] = function(a) {
movsw(a);
};
table32[165] = function(a) {
movsd(a);
};
table16[166] = table32[166] = function(a) {
cmpsb(a);
};
table16[167] = function(a) {
cmpsw(a);
};
table32[167] = function(a) {
cmpsd(a);
};
table16[168] = table32[168] = function(a) {
a.and(a.reg8[0], a.read_imm8(), 7);
};
table16[169] = function(a) {
a.and(a.reg16[0], a.read_imm16(), 15);
};
table32[169] = function(a) {
a.and(a.reg32s[0], a.read_imm32s(), 31);
};
table16[170] = table32[170] = function(a) {
stosb(a);
};
table16[171] = function(a) {
stosw(a);
};
table32[171] = function(a) {
stosd(a);
};
table16[172] = table32[172] = function(a) {
lodsb(a);
};
table16[173] = function(a) {
lodsw(a);
};
table32[173] = function(a) {
lodsd(a);
};
table16[174] = table32[174] = function(a) {
scasb(a);
};
table16[175] = function(a) {
scasw(a);
};
table32[175] = function(a) {
scasd(a);
};
table16[176] = table32[176] = function(a) {
a.reg8[0] = a.read_imm8();
};
table16[177] = table32[177] = function(a) {
a.reg8[4] = a.read_imm8();
};
table16[178] = table32[178] = function(a) {
a.reg8[8] = a.read_imm8();
};
table16[179] = table32[179] = function(a) {
a.reg8[12] = a.read_imm8();
};
table16[180] = table32[180] = function(a) {
a.reg8[1] = a.read_imm8();
};
table16[181] = table32[181] = function(a) {
a.reg8[5] = a.read_imm8();
};
table16[182] = table32[182] = function(a) {
a.reg8[9] = a.read_imm8();
};
table16[183] = table32[183] = function(a) {
a.reg8[13] = a.read_imm8();
};
table16[184] = function(a) {
a.reg16[0] = a.read_imm16();
};
table32[184] = function(a) {
a.reg32s[0] = a.read_imm32s();
};
table16[185] = function(a) {
a.reg16[2] = a.read_imm16();
};
table32[185] = function(a) {
a.reg32s[1] = a.read_imm32s();
};
table16[186] = function(a) {
a.reg16[4] = a.read_imm16();
};
table32[186] = function(a) {
a.reg32s[2] = a.read_imm32s();
};
table16[187] = function(a) {
a.reg16[6] = a.read_imm16();
};
table32[187] = function(a) {
a.reg32s[3] = a.read_imm32s();
};
table16[188] = function(a) {
a.reg16[8] = a.read_imm16();
};
table32[188] = function(a) {
a.reg32s[4] = a.read_imm32s();
};
table16[189] = function(a) {
a.reg16[10] = a.read_imm16();
};
table32[189] = function(a) {
a.reg32s[5] = a.read_imm32s();
};
table16[190] = function(a) {
a.reg16[12] = a.read_imm16();
};
table32[190] = function(a) {
a.reg32s[6] = a.read_imm32s();
};
table16[191] = function(a) {
a.reg16[14] = a.read_imm16();
};
table32[191] = function(a) {
a.reg32s[7] = a.read_imm32s();
};
table16[192] = table32[192] = function(a) {
var c = a.read_imm8(), d, e, f, g;
192 > c ? (f = a.translate_address_write(a.modrm_resolve(c)), e = a.memory.read8(f)) : e = a.reg8[c << 2 & 12 | c >> 2 & 1];
g = 0;
d = a.read_imm8() & 31;
switch(c >> 3 & 7) {
case 0:
g = a.rol8(e, d);
break;
case 1:
g = a.ror8(e, d);
break;
case 2:
g = a.rcl8(e, d);
break;
case 3:
g = a.rcr8(e, d);
break;
case 4:
g = a.shl8(e, d);
break;
case 5:
g = a.shr8(e, d);
break;
case 6:
g = a.shl8(e, d);
break;
case 7:
g = a.sar8(e, d);
}
192 > c ? a.memory.write8(f, g) : a.reg8[c << 2 & 12 | c >> 2 & 1] = g;
};
table16[193] = function(a) {
var c = a.read_imm8(), d, e, f, g = 0, k;
192 > c ? (d = a.modrm_resolve(c), f = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (g = a.translate_address_write(d + 1), e = a.virt_boundary_read16(f, g)) : e = a.memory.read16(f)) : e = a.reg16[c << 1 & 14];
k = 0;
d = a.read_imm8() & 31;
switch(c >> 3 & 7) {
case 0:
k = a.rol16(e, d);
break;
case 1:
k = a.ror16(e, d);
break;
case 2:
k = a.rcl16(e, d);
break;
case 3:
k = a.rcr16(e, d);
break;
case 4:
k = a.shl16(e, d);
break;
case 5:
k = a.shr16(e, d);
break;
case 6:
k = a.shl16(e, d);
break;
case 7:
k = a.sar16(e, d);
}
192 > c ? g ? a.virt_boundary_write16(f, g, k) : a.memory.write16(f, k) : a.reg16[c << 1 & 14] = k;
};
table32[193] = function(a) {
var c = a.read_imm8(), d, e, f, g = 0, k;
192 > c ? (d = a.modrm_resolve(c), f = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (g = a.translate_address_write(d + 3), e = a.virt_boundary_read32s(f, g)) : e = a.memory.read32s(f)) : e = a.reg32s[c & 7];
k = 0;
d = a.read_imm8() & 31;
switch(c >> 3 & 7) {
case 0:
k = a.rol32(e, d);
break;
case 1:
k = a.ror32(e, d);
break;
case 2:
k = a.rcl32(e, d);
break;
case 3:
k = a.rcr32(e, d);
break;
case 4:
k = a.shl32(e, d);
break;
case 5:
k = a.shr32(e, d);
break;
case 6:
k = a.shl32(e, d);
break;
case 7:
k = a.sar32(e, d);
}
192 > c ? g ? a.virt_boundary_write32(f, g, k) : a.memory.write32(f, k) : a.reg32s[c & 7] = k;
};
table16[194] = function(a) {
var c = a.read_imm16();
a.instruction_pointer = a.get_seg(1) + a.pop16() | 0;
a.stack_reg[a.reg_vsp] += c;
a.last_instr_jump = !0;
};
table32[194] = function(a) {
var c = a.read_imm16();
a.instruction_pointer = a.get_seg(1) + a.pop32s() | 0;
a.stack_reg[a.reg_vsp] += c;
a.last_instr_jump = !0;
};
table16[195] = function(a) {
a.instruction_pointer = a.get_seg(1) + a.pop16() | 0;
a.last_instr_jump = !0;
};
table32[195] = function(a) {
a.instruction_pointer = a.get_seg(1) + a.pop32s() | 0;
a.last_instr_jump = !0;
};
table16[196] = function(a) {
var c = a.read_imm8();
192 <= c && a.trigger_ud();
a.lss16(0, a.modrm_resolve(c), c >> 2 & 14);
};
table32[196] = function(a) {
var c = a.read_imm8();
192 <= c && a.trigger_ud();
a.lss32(0, a.modrm_resolve(c), c >> 3 & 7);
};
table16[197] = function(a) {
var c = a.read_imm8();
192 <= c && a.trigger_ud();
a.lss16(3, a.modrm_resolve(c), c >> 2 & 14);
};
table32[197] = function(a) {
var c = a.read_imm8();
192 <= c && a.trigger_ud();
a.lss32(3, a.modrm_resolve(c), c >> 3 & 7);
};
table16[198] = table32[198] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = a.read_imm8();
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table16[199] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = a.read_imm16();
192 > c ? a.safe_write16(d, e) : a.reg16[c << 1 & 14] = e;
};
table32[199] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = a.read_imm32s();
192 > c ? a.safe_write32(d, e) : a.reg32[c & 7] = e;
};
table16[200] = function(a) {
a.enter16();
};
table32[200] = function(a) {
a.enter32();
};
table16[201] = function(a) {
a.stack_reg[a.reg_vsp] = a.stack_reg[a.reg_vbp];
a.reg16[10] = a.pop16();
};
table32[201] = function(a) {
a.stack_reg[a.reg_vsp] = a.stack_reg[a.reg_vbp];
a.reg32s[5] = a.pop32s();
};
table16[202] = function(a) {
a.translate_address_read(a.get_seg(2) + a.stack_reg[a.reg_vsp] + 4);
var c = a.read_imm16(), d = a.pop16();
a.switch_seg(1, a.pop16());
a.instruction_pointer = a.get_seg(1) + d | 0;
a.stack_reg[a.reg_vsp] += c;
a.last_instr_jump = !0;
};
table32[202] = function(a) {
a.translate_address_read(a.get_seg(2) + a.stack_reg[a.reg_vsp] + 8);
var c = a.read_imm16(), d = a.pop32s();
a.switch_seg(1, a.pop32s() & 65535);
a.instruction_pointer = a.get_seg(1) + d | 0;
a.stack_reg[a.reg_vsp] += c;
a.last_instr_jump = !0;
};
table16[203] = function(a) {
a.translate_address_read(a.get_seg(2) + a.stack_reg[a.reg_vsp] + 4);
var c = a.pop16();
a.switch_seg(1, a.pop16());
a.instruction_pointer = a.get_seg(1) + c | 0;
a.last_instr_jump = !0;
};
table32[203] = function(a) {
a.translate_address_read(a.get_seg(2) + a.stack_reg[a.reg_vsp] + 8);
var c = a.pop32s();
a.switch_seg(1, a.pop32s() & 65535);
a.instruction_pointer = a.get_seg(1) + c | 0;
a.last_instr_jump = !0;
};
table16[204] = table32[204] = function(a) {
a.call_interrupt_vector(3, !0, !1);
};
table16[205] = table32[205] = function(a) {
var c = a.read_imm8();
a.call_interrupt_vector(c, !0, !1);
};
table16[206] = table32[206] = function(a) {
a.getof() && a.call_interrupt_vector(4, !0, !1);
};
table16[207] = function(a) {
a.iret16();
};
table32[207] = function(a) {
a.iret32();
};
table16[208] = table32[208] = function(a) {
var c = a.read_imm8(), d, e, f;
192 > c ? (e = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(e)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1];
f = 0;
switch(c >> 3 & 7) {
case 0:
f = a.rol8(d, 1);
break;
case 1:
f = a.ror8(d, 1);
break;
case 2:
f = a.rcl8(d, 1);
break;
case 3:
f = a.rcr8(d, 1);
break;
case 4:
f = a.shl8(d, 1);
break;
case 5:
f = a.shr8(d, 1);
break;
case 6:
f = a.shl8(d, 1);
break;
case 7:
f = a.sar8(d, 1);
}
192 > c ? a.memory.write8(e, f) : a.reg8[c << 2 & 12 | c >> 2 & 1] = f;
};
table16[209] = function(a) {
var c = a.read_imm8(), d, e, f = 0, g;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
g = 0;
switch(c >> 3 & 7) {
case 0:
g = a.rol16(d, 1);
break;
case 1:
g = a.ror16(d, 1);
break;
case 2:
g = a.rcl16(d, 1);
break;
case 3:
g = a.rcr16(d, 1);
break;
case 4:
g = a.shl16(d, 1);
break;
case 5:
g = a.shr16(d, 1);
break;
case 6:
g = a.shl16(d, 1);
break;
case 7:
g = a.sar16(d, 1);
}
192 > c ? f ? a.virt_boundary_write16(e, f, g) : a.memory.write16(e, g) : a.reg16[c << 1 & 14] = g;
};
table32[209] = function(a) {
var c = a.read_imm8(), d, e, f = 0, g;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
g = 0;
switch(c >> 3 & 7) {
case 0:
g = a.rol32(d, 1);
break;
case 1:
g = a.ror32(d, 1);
break;
case 2:
g = a.rcl32(d, 1);
break;
case 3:
g = a.rcr32(d, 1);
break;
case 4:
g = a.shl32(d, 1);
break;
case 5:
g = a.shr32(d, 1);
break;
case 6:
g = a.shl32(d, 1);
break;
case 7:
g = a.sar32(d, 1);
}
192 > c ? f ? a.virt_boundary_write32(e, f, g) : a.memory.write32(e, g) : a.reg32s[c & 7] = g;
};
table16[210] = table32[210] = function(a) {
var c = a.read_imm8(), d, e, f, g;
192 > c ? (f = a.translate_address_write(a.modrm_resolve(c)), e = a.memory.read8(f)) : e = a.reg8[c << 2 & 12 | c >> 2 & 1];
g = 0;
d = a.reg8[4] & 31;
switch(c >> 3 & 7) {
case 0:
g = a.rol8(e, d);
break;
case 1:
g = a.ror8(e, d);
break;
case 2:
g = a.rcl8(e, d);
break;
case 3:
g = a.rcr8(e, d);
break;
case 4:
g = a.shl8(e, d);
break;
case 5:
g = a.shr8(e, d);
break;
case 6:
g = a.shl8(e, d);
break;
case 7:
g = a.sar8(e, d);
}
192 > c ? a.memory.write8(f, g) : a.reg8[c << 2 & 12 | c >> 2 & 1] = g;
};
table16[211] = function(a) {
var c = a.read_imm8(), d, e, f, g = 0, k;
192 > c ? (d = a.modrm_resolve(c), f = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (g = a.translate_address_write(d + 1), e = a.virt_boundary_read16(f, g)) : e = a.memory.read16(f)) : e = a.reg16[c << 1 & 14];
k = 0;
d = a.reg8[4] & 31;
switch(c >> 3 & 7) {
case 0:
k = a.rol16(e, d);
break;
case 1:
k = a.ror16(e, d);
break;
case 2:
k = a.rcl16(e, d);
break;
case 3:
k = a.rcr16(e, d);
break;
case 4:
k = a.shl16(e, d);
break;
case 5:
k = a.shr16(e, d);
break;
case 6:
k = a.shl16(e, d);
break;
case 7:
k = a.sar16(e, d);
}
192 > c ? g ? a.virt_boundary_write16(f, g, k) : a.memory.write16(f, k) : a.reg16[c << 1 & 14] = k;
};
table32[211] = function(a) {
var c = a.read_imm8(), d, e, f, g = 0, k;
192 > c ? (d = a.modrm_resolve(c), f = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (g = a.translate_address_write(d + 3), e = a.virt_boundary_read32s(f, g)) : e = a.memory.read32s(f)) : e = a.reg32s[c & 7];
k = 0;
d = a.reg8[4] & 31;
switch(c >> 3 & 7) {
case 0:
k = a.rol32(e, d);
break;
case 1:
k = a.ror32(e, d);
break;
case 2:
k = a.rcl32(e, d);
break;
case 3:
k = a.rcr32(e, d);
break;
case 4:
k = a.shl32(e, d);
break;
case 5:
k = a.shr32(e, d);
break;
case 6:
k = a.shl32(e, d);
break;
case 7:
k = a.sar32(e, d);
}
192 > c ? g ? a.virt_boundary_write32(f, g, k) : a.memory.write32(f, k) : a.reg32s[c & 7] = k;
};
table16[212] = table32[212] = function(a) {
a.bcd_aam();
};
table16[213] = table32[213] = function(a) {
a.bcd_aad();
};
table16[214] = table32[214] = function(a) {
a.reg8[0] = -a.getcf();
};
table16[215] = table32[215] = function(a) {
a.reg8[0] = a.address_size_32 ? a.safe_read8(a.get_seg_prefix(3) + a.reg32s[3] + a.reg8[0]) : a.safe_read8(a.get_seg_prefix(3) + a.reg16[6] + a.reg8[0]);
};
table16[216] = table32[216] = function(a) {
var c = a.read_imm8();
a.cr0 & 12 && a.trigger_nm();
192 > c ? a.fpu.op_D8_mem(c, a.modrm_resolve(c)) : a.fpu.op_D8_reg(c);
};
table16[217] = table32[217] = function(a) {
var c = a.read_imm8();
a.cr0 & 12 && a.trigger_nm();
192 > c ? a.fpu.op_D9_mem(c, a.modrm_resolve(c)) : a.fpu.op_D9_reg(c);
};
table16[218] = table32[218] = function(a) {
var c = a.read_imm8();
a.cr0 & 12 && a.trigger_nm();
192 > c ? a.fpu.op_DA_mem(c, a.modrm_resolve(c)) : a.fpu.op_DA_reg(c);
};
table16[219] = table32[219] = function(a) {
var c = a.read_imm8();
a.cr0 & 12 && a.trigger_nm();
192 > c ? a.fpu.op_DB_mem(c, a.modrm_resolve(c)) : a.fpu.op_DB_reg(c);
};
table16[220] = table32[220] = function(a) {
var c = a.read_imm8();
a.cr0 & 12 && a.trigger_nm();
192 > c ? a.fpu.op_DC_mem(c, a.modrm_resolve(c)) : a.fpu.op_DC_reg(c);
};
table16[221] = table32[221] = function(a) {
var c = a.read_imm8();
a.cr0 & 12 && a.trigger_nm();
192 > c ? a.fpu.op_DD_mem(c, a.modrm_resolve(c)) : a.fpu.op_DD_reg(c);
};
table16[222] = table32[222] = function(a) {
var c = a.read_imm8();
a.cr0 & 12 && a.trigger_nm();
192 > c ? a.fpu.op_DE_mem(c, a.modrm_resolve(c)) : a.fpu.op_DE_reg(c);
};
table16[223] = table32[223] = function(a) {
var c = a.read_imm8();
a.cr0 & 12 && a.trigger_nm();
192 > c ? a.fpu.op_DF_mem(c, a.modrm_resolve(c)) : a.fpu.op_DF_reg(c);
};
table16[224] = table32[224] = function(a) {
a.loopne();
};
table16[225] = table32[225] = function(a) {
a.loope();
};
table16[226] = table32[226] = function(a) {
a.loop();
};
table16[227] = table32[227] = function(a) {
a.jcxz();
};
table16[228] = table32[228] = function(a) {
var c = a.read_imm8();
a.test_privileges_for_io(c, 1);
a.reg8[0] = a.io.port_read8(c);
};
table16[229] = function(a) {
var c = a.read_imm8();
a.test_privileges_for_io(c, 2);
a.reg16[0] = a.io.port_read16(c);
};
table32[229] = function(a) {
var c = a.read_imm8();
a.test_privileges_for_io(c, 4);
a.reg32s[0] = a.io.port_read32(c);
};
table16[230] = table32[230] = function(a) {
var c = a.read_imm8();
a.test_privileges_for_io(c, 1);
a.io.port_write8(c, a.reg8[0]);
};
table16[231] = function(a) {
var c = a.read_imm8();
a.test_privileges_for_io(c, 2);
a.io.port_write16(c, a.reg16[0]);
};
table32[231] = function(a) {
var c = a.read_imm8();
a.test_privileges_for_io(c, 4);
a.io.port_write32(c, a.reg32s[0]);
};
table16[232] = function(a) {
var c = a.read_imm16s();
a.push16(a.get_real_eip());
a.jmp_rel16(c);
a.last_instr_jump = !0;
};
table32[232] = function(a) {
var c = a.read_imm32s();
a.push32(a.get_real_eip());
a.instruction_pointer = a.instruction_pointer + c | 0;
a.last_instr_jump = !0;
};
table16[233] = function(a) {
var c = a.read_imm16s();
a.jmp_rel16(c);
a.last_instr_jump = !0;
};
table32[233] = function(a) {
var c = a.read_imm32s();
a.instruction_pointer = a.instruction_pointer + c | 0;
a.last_instr_jump = !0;
};
table16[234] = function(a) {
var c = a.read_imm16();
a.switch_seg(1, a.read_imm16());
a.instruction_pointer = c + a.get_seg(1) | 0;
a.last_instr_jump = !0;
};
table32[234] = function(a) {
var c = a.read_imm32s();
a.switch_seg(1, a.read_imm16());
a.instruction_pointer = c + a.get_seg(1) | 0;
a.last_instr_jump = !0;
};
table16[235] = table32[235] = function(a) {
var c = a.read_imm8s();
a.instruction_pointer = a.instruction_pointer + c | 0;
a.last_instr_jump = !0;
};
table16[236] = table32[236] = function(a) {
var c = a.reg16[4];
a.test_privileges_for_io(c, 1);
a.reg8[0] = a.io.port_read8(c);
};
table16[237] = function(a) {
var c = a.reg16[4];
a.test_privileges_for_io(c, 2);
a.reg16[0] = a.io.port_read16(c);
};
table32[237] = function(a) {
var c = a.reg16[4];
a.test_privileges_for_io(c, 4);
a.reg32s[0] = a.io.port_read32(c);
};
table16[238] = table32[238] = function(a) {
var c = a.reg16[4];
a.test_privileges_for_io(c, 1);
a.io.port_write8(c, a.reg8[0]);
};
table16[239] = function(a) {
var c = a.reg16[4];
a.test_privileges_for_io(c, 2);
a.io.port_write16(c, a.reg16[0]);
};
table32[239] = function(a) {
var c = a.reg16[4];
a.test_privileges_for_io(c, 4);
a.io.port_write32(c, a.reg32s[0]);
};
table16[240] = table32[240] = function(a) {
a.do_op();
};
table16[241] = table32[241] = function(a) {
throw a.debug.unimpl("int1 instruction");
};
table16[242] = table32[242] = function(a) {
a.repeat_string_prefix = 1;
a.do_op();
a.repeat_string_prefix = 0;
};
table16[243] = table32[243] = function(a) {
a.repeat_string_prefix = 2;
a.do_op();
a.repeat_string_prefix = 0;
};
table16[244] = table32[244] = function(a) {
a.hlt_op();
};
table16[245] = table32[245] = function(a) {
a.flags = (a.flags | 1) ^ a.getcf();
a.flags_changed &= -2;
};
table16[246] = table32[246] = function(a) {
var c = a.read_imm8();
switch(c >> 3 & 7) {
case 0:
var d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.and(d, a.read_imm8(), 7);
break;
case 1:
d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.and(d, a.read_imm8(), 7);
break;
case 2:
var e;
192 > c ? (e = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(e)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1];
d = ~d;
192 > c ? a.memory.write8(e, d) : a.reg8[c << 2 & 12 | c >> 2 & 1] = d;
break;
case 3:
192 > c ? (e = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(e)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1];
d = a.neg(d, 7);
192 > c ? a.memory.write8(e, d) : a.reg8[c << 2 & 12 | c >> 2 & 1] = d;
break;
case 4:
d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.mul8(d);
break;
case 5:
192 > c ? d = a.safe_read8(a.modrm_resolve(c)) << 24 >> 24 : d = a.reg8s[c << 2 & 12 | c >> 2 & 1];
a.imul8(d);
break;
case 6:
d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.div8(d);
break;
case 7:
192 > c ? d = a.safe_read8(a.modrm_resolve(c)) << 24 >> 24 : d = a.reg8s[c << 2 & 12 | c >> 2 & 1], a.idiv8(d);
}
};
table16[247] = function(a) {
var c = a.read_imm8();
switch(c >> 3 & 7) {
case 0:
var d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.and(d, a.read_imm16(), 15);
break;
case 1:
d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.and(d, a.read_imm16(), 15);
break;
case 2:
var e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = ~d;
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
break;
case 3:
f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.neg(d, 15);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
break;
case 4:
d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.mul16(d);
break;
case 5:
192 > c ? d = a.safe_read16(a.modrm_resolve(c)) << 16 >> 16 : d = a.reg16s[c << 1 & 14];
a.imul16(d);
break;
case 6:
d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.div16(d);
break;
case 7:
192 > c ? d = a.safe_read16(a.modrm_resolve(c)) << 16 >> 16 : d = a.reg16s[c << 1 & 14], a.idiv16(d);
}
};
table32[247] = function(a) {
var c = a.read_imm8();
switch(c >> 3 & 7) {
case 0:
var d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.and(d, a.read_imm32s(), 31);
break;
case 1:
d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.and(d, a.read_imm32s(), 31);
break;
case 2:
var e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = ~d;
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
break;
case 3:
f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.neg(d, 31);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
break;
case 4:
192 > c ? d = a.safe_read32s(a.modrm_resolve(c)) >>> 0 : d = a.reg32[c & 7];
a.mul32(d);
break;
case 5:
d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.imul32(d);
break;
case 6:
192 > c ? d = a.safe_read32s(a.modrm_resolve(c)) >>> 0 : d = a.reg32[c & 7];
a.div32(d);
break;
case 7:
d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7], a.idiv32(d);
}
};
table16[248] = table32[248] = function(a) {
a.flags &= -2;
a.flags_changed &= -2;
};
table16[249] = table32[249] = function(a) {
a.flags |= 1;
a.flags_changed &= -2;
};
table16[250] = table32[250] = function(a) {
!a.protected_mode || (a.flags & 131072 ? 3 === a.getiopl() : a.getiopl() >= a.cpl) ? a.flags &= -513 : 3 > a.getiopl() && (a.flags & 131072 ? a.cr4 & 1 : 3 === a.cpl && a.cr4 & 2) ? a.flags &= -524289 : a.trigger_gp(0);
};
table16[251] = table32[251] = function(a) {
!a.protected_mode || (a.flags & 131072 ? 3 === a.getiopl() : a.getiopl() >= a.cpl) ? (a.flags |= 512, a.cycle(), a.handle_irqs()) : 3 > a.getiopl() && 0 === (a.flags & 1048576) && (a.flags & 131072 ? a.cr4 & 1 : 3 === a.cpl && a.cr4 & 2) ? a.flags |= 524288 : a.trigger_gp(0);
};
table16[252] = table32[252] = function(a) {
a.flags &= -1025;
};
table16[253] = table32[253] = function(a) {
a.flags |= 1024;
};
table16[254] = table32[254] = function(a) {
var c = a.read_imm8(), d = c & 56;
if (0 === d) {
var e;
192 > c ? (e = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(e)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1];
d = a.inc(d, 7);
192 > c ? a.memory.write8(e, d) : a.reg8[c << 2 & 12 | c >> 2 & 1] = d;
} else {
8 === d ? (192 > c ? (e = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(e)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1], d = a.dec(d, 7), 192 > c ? a.memory.write8(e, d) : a.reg8[c << 2 & 12 | c >> 2 & 1] = d) : a.trigger_ud();
}
};
table16[255] = function(a) {
var c = a.read_imm8();
switch(c >> 3 & 7) {
case 0:
var d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.inc(d, 15);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
break;
case 1:
f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.dec(d, 15);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
break;
case 2:
d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.push16(a.get_real_eip());
a.instruction_pointer = a.get_seg(1) + d | 0;
a.last_instr_jump = !0;
break;
case 3:
192 <= c && a.trigger_ud();
d = a.modrm_resolve(c);
c = a.safe_read16(d + 2);
e = a.safe_read16(d);
a.writable_or_pagefault(a.get_stack_pointer(-4), 4);
a.push16(a.sreg[1]);
a.push16(a.get_real_eip());
a.switch_seg(1, c);
a.instruction_pointer = a.get_seg(1) + e | 0;
a.last_instr_jump = !0;
break;
case 4:
d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.instruction_pointer = a.get_seg(1) + d | 0;
a.last_instr_jump = !0;
break;
case 5:
192 <= c && a.trigger_ud();
d = a.modrm_resolve(c);
c = a.safe_read16(d + 2);
e = a.safe_read16(d);
a.switch_seg(1, c);
a.instruction_pointer = a.get_seg(1) + e | 0;
a.last_instr_jump = !0;
break;
case 6:
d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.push16(d);
break;
case 7:
a.trigger_ud();
}
};
table32[255] = function(a) {
var c = a.read_imm8();
switch(c >> 3 & 7) {
case 0:
var d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.inc(d, 31);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
break;
case 1:
f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.dec(d, 31);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
break;
case 2:
d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.push32(a.get_real_eip());
a.instruction_pointer = a.get_seg(1) + d | 0;
a.last_instr_jump = !0;
break;
case 3:
192 <= c && a.trigger_ud();
d = a.modrm_resolve(c);
c = a.safe_read16(d + 4);
e = a.safe_read32s(d);
a.writable_or_pagefault(a.get_stack_pointer(-8), 8);
a.push32(a.sreg[1]);
a.push32(a.get_real_eip());
a.switch_seg(1, c);
a.instruction_pointer = a.get_seg(1) + e | 0;
a.last_instr_jump = !0;
break;
case 4:
d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.instruction_pointer = a.get_seg(1) + d | 0;
a.last_instr_jump = !0;
break;
case 5:
192 <= c && a.trigger_ud();
d = a.modrm_resolve(c);
c = a.safe_read16(d + 4);
e = a.safe_read32s(d);
a.switch_seg(1, c);
a.instruction_pointer = a.get_seg(1) + e | 0;
a.last_instr_jump = !0;
break;
case 6:
d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.push32(d);
break;
case 7:
a.trigger_ud();
}
};
table0F_16[0] = table0F_32[0] = function(a) {
var c = a.read_imm8();
a.protected_mode || a.trigger_ud();
a.cpl && a.trigger_gp(0);
switch(c >> 3 & 7) {
case 0:
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = a.sreg[7];
192 > c ? a.safe_write16(d, e) : a.reg16[c << 1 & 14] = e;
break;
case 1:
192 > c && (d = a.modrm_resolve(c));
e = a.sreg[6];
192 > c ? a.safe_write16(d, e) : a.reg16[c << 1 & 14] = e;
break;
case 2:
e = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.load_ldt(e);
break;
case 3:
e = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.load_tr(e);
break;
default:
a.trigger_ud();
}
};
table0F_16[1] = table0F_32[1] = function(a) {
var c = a.read_imm8();
a.cpl && a.trigger_gp(0);
var d = c >> 3 & 7;
if (4 === d) {
if (192 > c) {
var e = a.modrm_resolve(c)
}
d = a.cr0;
192 > c ? a.safe_write16(e, d) : a.reg16[c << 1 & 14] = d;
} else {
if (6 === d) {
d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14], a.cr0 = a.cr0 & -16 | d & 15, a.protected_mode && (a.cr0 |= 1), a.cr0_changed();
} else {
switch(192 <= c && a.trigger_ud(), 2 !== d && 3 !== d || !a.protected_mode || (a.segment_prefix = 9), e = a.modrm_resolve(c), a.segment_prefix = -1, d) {
case 0:
a.writable_or_pagefault(e, 6);
a.safe_write16(e, a.gdtr_size);
a.safe_write32(e + 2, a.gdtr_offset);
break;
case 1:
a.writable_or_pagefault(e, 6);
a.safe_write16(e, a.idtr_size);
a.safe_write32(e + 2, a.idtr_offset);
break;
case 2:
c = a.safe_read16(e);
e = a.safe_read32s(e + 2);
a.gdtr_size = c;
a.gdtr_offset = e;
a.operand_size_32 || (a.gdtr_offset &= 16777215);
break;
case 3:
c = a.safe_read16(e);
e = a.safe_read32s(e + 2);
a.idtr_size = c;
a.idtr_offset = e;
a.operand_size_32 || (a.idtr_offset &= 16777215);
break;
case 7:
a.invlpg(e);
break;
default:
a.trigger_ud();
}
}
}
};
table0F_16[2] = table0F_32[2] = function(a) {
a.read_imm8();
a.trigger_ud();
};
table0F_16[3] = table0F_32[3] = function(a) {
a.read_imm8();
a.trigger_ud();
};
table0F_16[4] = table0F_32[4] = function(a) {
a.trigger_ud();
};
table0F_16[5] = table0F_32[5] = function(a) {
a.trigger_ud();
};
table0F_16[6] = table0F_32[6] = function(a) {
a.cpl ? a.trigger_gp(0) : a.cr0 &= -9;
};
table0F_16[7] = table0F_32[7] = function(a) {
a.trigger_ud();
};
table0F_16[8] = table0F_32[8] = function(a) {
a.trigger_ud();
};
table0F_16[9] = table0F_32[9] = function(a) {
a.cpl && a.trigger_gp(0);
};
table0F_16[10] = table0F_32[10] = function(a) {
a.trigger_ud();
};
table0F_16[11] = table0F_32[11] = function(a) {
a.trigger_ud();
};
table0F_16[12] = table0F_32[12] = function(a) {
a.trigger_ud();
};
table0F_16[13] = table0F_32[13] = function(a) {
a.trigger_ud();
};
table0F_16[14] = table0F_32[14] = function(a) {
a.trigger_ud();
};
table0F_16[15] = table0F_32[15] = function(a) {
a.trigger_ud();
};
table0F_16[16] = table0F_32[16] = function(a) {
a.trigger_ud();
};
table0F_16[17] = table0F_32[17] = function(a) {
a.trigger_ud();
};
table0F_16[18] = table0F_32[18] = function(a) {
a.trigger_ud();
};
table0F_16[19] = table0F_32[19] = function(a) {
a.trigger_ud();
};
table0F_16[20] = table0F_32[20] = function(a) {
a.trigger_ud();
};
table0F_16[21] = table0F_32[21] = function(a) {
a.trigger_ud();
};
table0F_16[22] = table0F_32[22] = function(a) {
a.trigger_ud();
};
table0F_16[23] = table0F_32[23] = function(a) {
a.trigger_ud();
};
table0F_16[24] = table0F_32[24] = function(a) {
var c = a.read_imm8();
192 > c && a.modrm_resolve(c);
};
table0F_16[25] = table0F_32[25] = function(a) {
a.trigger_ud();
};
table0F_16[26] = table0F_32[26] = function(a) {
a.trigger_ud();
};
table0F_16[27] = table0F_32[27] = function(a) {
a.trigger_ud();
};
table0F_16[28] = table0F_32[28] = function(a) {
a.trigger_ud();
};
table0F_16[29] = table0F_32[29] = function(a) {
a.trigger_ud();
};
table0F_16[30] = table0F_32[30] = function(a) {
a.trigger_ud();
};
table0F_16[31] = table0F_32[31] = function(a) {
a.trigger_ud();
};
table0F_16[32] = table0F_32[32] = function(a) {
var c = a.read_imm8();
a.cpl && a.trigger_gp(0);
switch(c >> 3 & 7) {
case 0:
a.reg32s[c & 7] = a.cr0;
break;
case 2:
a.reg32s[c & 7] = a.cr2;
break;
case 3:
a.reg32s[c & 7] = a.cr3;
break;
case 4:
a.reg32s[c & 7] = a.cr4;
break;
default:
a.trigger_ud();
}
};
table0F_16[33] = table0F_32[33] = function(a) {
var c = a.read_imm8();
a.cpl && a.trigger_gp(0);
a.reg32s[c & 7] = a.dreg[c >> 3 & 7];
};
table0F_16[34] = table0F_32[34] = function(a) {
var c = a.read_imm8();
a.cpl && a.trigger_gp(0);
var d = a.reg32s[c & 7];
switch(c >> 3 & 7) {
case 0:
a.cr0 = d;
if (-2147483648 === (a.cr0 & -2147483647)) {
throw a.debug.unimpl("#GP handler");
}
a.cr0_changed();
break;
case 2:
a.cr2 = d;
break;
case 3:
a.cr3 = d;
a.clear_tlb();
break;
case 4:
d & -3565568 && a.trigger_gp(0);
(a.cr4 ^ d) & 128 && (d & 128 ? a.clear_tlb() : a.full_clear_tlb());
a.cr4 = d;
a.page_size_extensions = a.cr4 & 16 ? 128 : 0;
if (a.cr4 & 32) {
throw a.debug.unimpl("PAE");
}
break;
default:
a.trigger_ud();
}
};
table0F_16[35] = table0F_32[35] = function(a) {
var c = a.read_imm8();
a.cpl && a.trigger_gp(0);
a.dreg[c >> 3 & 7] = a.reg32s[c & 7];
};
table0F_16[36] = table0F_32[36] = function(a) {
a.trigger_ud();
};
table0F_16[37] = table0F_32[37] = function(a) {
a.trigger_ud();
};
table0F_16[38] = table0F_32[38] = function(a) {
a.trigger_ud();
};
table0F_16[39] = table0F_32[39] = function(a) {
a.trigger_ud();
};
table0F_16[40] = table0F_32[40] = function(a) {
a.trigger_ud();
};
table0F_16[41] = table0F_32[41] = function(a) {
a.trigger_ud();
};
table0F_16[42] = table0F_32[42] = function(a) {
a.trigger_ud();
};
table0F_16[43] = table0F_32[43] = function(a) {
a.trigger_ud();
};
table0F_16[44] = table0F_32[44] = function(a) {
a.trigger_ud();
};
table0F_16[45] = table0F_32[45] = function(a) {
a.trigger_ud();
};
table0F_16[46] = table0F_32[46] = function(a) {
a.trigger_ud();
};
table0F_16[47] = table0F_32[47] = function(a) {
a.trigger_ud();
};
table0F_16[48] = table0F_32[48] = function(a) {
a.cpl && a.trigger_gp(0);
var c = a.reg32s[0];
switch(a.reg32s[1]) {
case 372:
a.sysenter_cs = c & 65535;
break;
case 374:
a.sysenter_eip = c;
break;
case 373:
a.sysenter_esp = c;
}
};
table0F_16[49] = table0F_32[49] = function(a) {
if (a.cpl && a.cr4 & 4) {
a.trigger_gp(0);
} else {
var c = v86.microtick() - a.tsc_offset;
a.reg32s[0] = 8192 * c;
a.reg32s[2] = 1.9073486328125E-6 * c;
}
};
table0F_16[50] = table0F_32[50] = function(a) {
a.cpl && a.trigger_gp(0);
var c = 0;
switch(a.reg32s[1]) {
case 372:
c = a.sysenter_cs;
break;
case 374:
c = a.sysenter_eip;
break;
case 373:
c = a.sysenter_esp;
}
a.reg32s[0] = c;
a.reg32s[2] = 0;
};
table0F_16[51] = table0F_32[51] = function(a) {
a.trigger_ud();
};
table0F_16[52] = table0F_32[52] = function(a) {
var c = a.sysenter_cs & 65532;
a.protected_mode && 0 !== c || a.trigger_gp(0);
a.flags &= -131585;
a.instruction_pointer = a.sysenter_eip;
a.reg32s[4] = a.sysenter_esp;
a.sreg[1] = c;
a.segment_is_null[1] = 0;
a.segment_limits[1] = -1;
a.segment_offsets[1] = 0;
a.is_32 || a.update_cs_size(!0);
a.cpl = 0;
a.cpl_changed();
a.sreg[2] = c + 8;
a.segment_is_null[2] = 0;
a.segment_limits[2] = -1;
a.segment_offsets[2] = 0;
a.stack_size_32 = !0;
a.stack_reg = a.reg32s;
a.reg_vsp = 4;
a.reg_vbp = 5;
};
table0F_16[53] = table0F_32[53] = function(a) {
var c = a.sysenter_cs & 65532;
a.protected_mode && !a.cpl && 0 !== c || a.trigger_gp(0);
a.instruction_pointer = a.reg32s[2];
a.reg32s[4] = a.reg32s[1];
a.sreg[1] = c + 16 | 3;
a.segment_is_null[1] = 0;
a.segment_limits[1] = -1;
a.segment_offsets[1] = 0;
a.is_32 || a.update_cs_size(!0);
a.cpl = 3;
a.cpl_changed();
a.sreg[2] = c + 24 | 3;
a.segment_is_null[2] = 0;
a.segment_limits[2] = -1;
a.segment_offsets[2] = 0;
a.stack_size_32 = !0;
a.stack_reg = a.reg32s;
a.reg_vsp = 4;
a.reg_vbp = 5;
};
table0F_16[54] = table0F_32[54] = function(a) {
a.trigger_ud();
};
table0F_16[55] = table0F_32[55] = function(a) {
a.trigger_ud();
};
table0F_16[56] = table0F_32[56] = function(a) {
a.trigger_ud();
};
table0F_16[57] = table0F_32[57] = function(a) {
a.trigger_ud();
};
table0F_16[58] = table0F_32[58] = function(a) {
a.trigger_ud();
};
table0F_16[59] = table0F_32[59] = function(a) {
a.trigger_ud();
};
table0F_16[60] = table0F_32[60] = function(a) {
a.trigger_ud();
};
table0F_16[61] = table0F_32[61] = function(a) {
a.trigger_ud();
};
table0F_16[62] = table0F_32[62] = function(a) {
a.trigger_ud();
};
table0F_16[63] = table0F_32[63] = function(a) {
a.trigger_ud();
};
table0F_16[64] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_o() && (a.reg16[c >> 2 & 14] = d);
};
table0F_32[64] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_o() && (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[65] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_o() || (a.reg16[c >> 2 & 14] = d);
};
table0F_32[65] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_o() || (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[66] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_b() && (a.reg16[c >> 2 & 14] = d);
};
table0F_32[66] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_b() && (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[67] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_b() || (a.reg16[c >> 2 & 14] = d);
};
table0F_32[67] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_b() || (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[68] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_z() && (a.reg16[c >> 2 & 14] = d);
};
table0F_32[68] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_z() && (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[69] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_z() || (a.reg16[c >> 2 & 14] = d);
};
table0F_32[69] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_z() || (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[70] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_be() && (a.reg16[c >> 2 & 14] = d);
};
table0F_32[70] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_be() && (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[71] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_be() || (a.reg16[c >> 2 & 14] = d);
};
table0F_32[71] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_be() || (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[72] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_s() && (a.reg16[c >> 2 & 14] = d);
};
table0F_32[72] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_s() && (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[73] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_s() || (a.reg16[c >> 2 & 14] = d);
};
table0F_32[73] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_s() || (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[74] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_p() && (a.reg16[c >> 2 & 14] = d);
};
table0F_32[74] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_p() && (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[75] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_p() || (a.reg16[c >> 2 & 14] = d);
};
table0F_32[75] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_p() || (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[76] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_l() && (a.reg16[c >> 2 & 14] = d);
};
table0F_32[76] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_l() && (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[77] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_l() || (a.reg16[c >> 2 & 14] = d);
};
table0F_32[77] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_l() || (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[78] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_le() && (a.reg16[c >> 2 & 14] = d);
};
table0F_32[78] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_le() && (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[79] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.test_le() || (a.reg16[c >> 2 & 14] = d);
};
table0F_32[79] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.test_le() || (a.reg32s[c >> 3 & 7] = d);
};
table0F_16[80] = table0F_32[80] = function(a) {
a.trigger_ud();
};
table0F_16[81] = table0F_32[81] = function(a) {
a.trigger_ud();
};
table0F_16[82] = table0F_32[82] = function(a) {
a.trigger_ud();
};
table0F_16[83] = table0F_32[83] = function(a) {
a.trigger_ud();
};
table0F_16[84] = table0F_32[84] = function(a) {
a.trigger_ud();
};
table0F_16[85] = table0F_32[85] = function(a) {
a.trigger_ud();
};
table0F_16[86] = table0F_32[86] = function(a) {
a.trigger_ud();
};
table0F_16[87] = table0F_32[87] = function(a) {
a.trigger_ud();
};
table0F_16[88] = table0F_32[88] = function(a) {
a.trigger_ud();
};
table0F_16[89] = table0F_32[89] = function(a) {
a.trigger_ud();
};
table0F_16[90] = table0F_32[90] = function(a) {
a.trigger_ud();
};
table0F_16[91] = table0F_32[91] = function(a) {
a.trigger_ud();
};
table0F_16[92] = table0F_32[92] = function(a) {
a.trigger_ud();
};
table0F_16[93] = table0F_32[93] = function(a) {
a.trigger_ud();
};
table0F_16[94] = table0F_32[94] = function(a) {
a.trigger_ud();
};
table0F_16[95] = table0F_32[95] = function(a) {
a.trigger_ud();
};
table0F_16[96] = table0F_32[96] = function(a) {
a.trigger_ud();
};
table0F_16[97] = table0F_32[97] = function(a) {
a.trigger_ud();
};
table0F_16[98] = table0F_32[98] = function(a) {
a.trigger_ud();
};
table0F_16[99] = table0F_32[99] = function(a) {
a.trigger_ud();
};
table0F_16[100] = table0F_32[100] = function(a) {
a.trigger_ud();
};
table0F_16[101] = table0F_32[101] = function(a) {
a.trigger_ud();
};
table0F_16[102] = table0F_32[102] = function(a) {
a.trigger_ud();
};
table0F_16[103] = table0F_32[103] = function(a) {
a.trigger_ud();
};
table0F_16[104] = table0F_32[104] = function(a) {
a.trigger_ud();
};
table0F_16[105] = table0F_32[105] = function(a) {
a.trigger_ud();
};
table0F_16[106] = table0F_32[106] = function(a) {
a.trigger_ud();
};
table0F_16[107] = table0F_32[107] = function(a) {
a.trigger_ud();
};
table0F_16[108] = table0F_32[108] = function(a) {
a.trigger_ud();
};
table0F_16[109] = table0F_32[109] = function(a) {
a.trigger_ud();
};
table0F_16[110] = table0F_32[110] = function(a) {
a.trigger_ud();
};
table0F_16[111] = table0F_32[111] = function(a) {
a.trigger_ud();
};
table0F_16[112] = table0F_32[112] = function(a) {
a.trigger_ud();
};
table0F_16[113] = table0F_32[113] = function(a) {
a.trigger_ud();
};
table0F_16[114] = table0F_32[114] = function(a) {
a.trigger_ud();
};
table0F_16[115] = table0F_32[115] = function(a) {
a.trigger_ud();
};
table0F_16[116] = table0F_32[116] = function(a) {
a.trigger_ud();
};
table0F_16[117] = table0F_32[117] = function(a) {
a.trigger_ud();
};
table0F_16[118] = table0F_32[118] = function(a) {
a.trigger_ud();
};
table0F_16[119] = table0F_32[119] = function(a) {
a.trigger_ud();
};
table0F_16[120] = table0F_32[120] = function(a) {
a.trigger_ud();
};
table0F_16[121] = table0F_32[121] = function(a) {
a.trigger_ud();
};
table0F_16[122] = table0F_32[122] = function(a) {
a.trigger_ud();
};
table0F_16[123] = table0F_32[123] = function(a) {
a.trigger_ud();
};
table0F_16[124] = table0F_32[124] = function(a) {
a.trigger_ud();
};
table0F_16[125] = table0F_32[125] = function(a) {
a.trigger_ud();
};
table0F_16[126] = table0F_32[126] = function(a) {
a.trigger_ud();
};
table0F_16[127] = table0F_32[127] = function(a) {
a.trigger_ud();
};
table0F_16[128] = function(a) {
a.jmpcc16(a.test_o());
};
table0F_32[128] = function(a) {
a.jmpcc32(a.test_o());
};
table0F_16[129] = function(a) {
a.jmpcc16(!a.test_o());
};
table0F_32[129] = function(a) {
a.jmpcc32(!a.test_o());
};
table0F_16[130] = function(a) {
a.jmpcc16(a.test_b());
};
table0F_32[130] = function(a) {
a.jmpcc32(a.test_b());
};
table0F_16[131] = function(a) {
a.jmpcc16(!a.test_b());
};
table0F_32[131] = function(a) {
a.jmpcc32(!a.test_b());
};
table0F_16[132] = function(a) {
a.jmpcc16(a.test_z());
};
table0F_32[132] = function(a) {
a.jmpcc32(a.test_z());
};
table0F_16[133] = function(a) {
a.jmpcc16(!a.test_z());
};
table0F_32[133] = function(a) {
a.jmpcc32(!a.test_z());
};
table0F_16[134] = function(a) {
a.jmpcc16(a.test_be());
};
table0F_32[134] = function(a) {
a.jmpcc32(a.test_be());
};
table0F_16[135] = function(a) {
a.jmpcc16(!a.test_be());
};
table0F_32[135] = function(a) {
a.jmpcc32(!a.test_be());
};
table0F_16[136] = function(a) {
a.jmpcc16(a.test_s());
};
table0F_32[136] = function(a) {
a.jmpcc32(a.test_s());
};
table0F_16[137] = function(a) {
a.jmpcc16(!a.test_s());
};
table0F_32[137] = function(a) {
a.jmpcc32(!a.test_s());
};
table0F_16[138] = function(a) {
a.jmpcc16(a.test_p());
};
table0F_32[138] = function(a) {
a.jmpcc32(a.test_p());
};
table0F_16[139] = function(a) {
a.jmpcc16(!a.test_p());
};
table0F_32[139] = function(a) {
a.jmpcc32(!a.test_p());
};
table0F_16[140] = function(a) {
a.jmpcc16(a.test_l());
};
table0F_32[140] = function(a) {
a.jmpcc32(a.test_l());
};
table0F_16[141] = function(a) {
a.jmpcc16(!a.test_l());
};
table0F_32[141] = function(a) {
a.jmpcc32(!a.test_l());
};
table0F_16[142] = function(a) {
a.jmpcc16(a.test_le());
};
table0F_32[142] = function(a) {
a.jmpcc32(a.test_le());
};
table0F_16[143] = function(a) {
a.jmpcc16(!a.test_le());
};
table0F_32[143] = function(a) {
a.jmpcc32(!a.test_le());
};
table0F_16[144] = table0F_32[144] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !a.test_o() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[145] = table0F_32[145] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !!a.test_o() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[146] = table0F_32[146] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !a.test_b() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[147] = table0F_32[147] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !!a.test_b() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[148] = table0F_32[148] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !a.test_z() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[149] = table0F_32[149] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !!a.test_z() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[150] = table0F_32[150] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !a.test_be() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[151] = table0F_32[151] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !!a.test_be() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[152] = table0F_32[152] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !a.test_s() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[153] = table0F_32[153] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !!a.test_s() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[154] = table0F_32[154] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !a.test_p() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[155] = table0F_32[155] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !!a.test_p() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[156] = table0F_32[156] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !a.test_l() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[157] = table0F_32[157] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !!a.test_l() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[158] = table0F_32[158] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !a.test_le() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[159] = table0F_32[159] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c)
}
var e = !!a.test_le() ^ 1;
192 > c ? a.safe_write8(d, e) : a.reg8[c << 2 & 12 | c >> 2 & 1] = e;
};
table0F_16[160] = function(a) {
a.push16(a.sreg[4]);
};
table0F_32[160] = function(a) {
a.push32(a.sreg[4]);
};
table0F_16[161] = function(a) {
a.switch_seg(4, a.safe_read16(a.get_stack_pointer(0)));
a.stack_reg[a.reg_vsp] += 2;
};
table0F_32[161] = function(a) {
a.switch_seg(4, a.safe_read16(a.get_stack_pointer(0)));
a.stack_reg[a.reg_vsp] += 4;
};
table0F_16[162] = table0F_32[162] = function(a) {
a.cpuid();
};
table0F_16[163] = function(a) {
var c = a.read_imm8();
192 > c ? a.bt_mem(a.modrm_resolve(c), a.reg16s[c >> 2 & 14]) : a.bt_reg(a.reg16[c << 1 & 14], a.reg16[c >> 2 & 14] & 15);
};
table0F_32[163] = function(a) {
var c = a.read_imm8();
192 > c ? a.bt_mem(a.modrm_resolve(c), a.reg32s[c >> 3 & 7]) : a.bt_reg(a.reg32s[c & 7], a.reg32s[c >> 3 & 7] & 31);
};
table0F_16[164] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.shld16(d, a.reg16[c >> 2 & 14], a.read_imm8() & 31);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
};
table0F_32[164] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.shld32(d, a.reg32s[c >> 3 & 7], a.read_imm8() & 31);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
};
table0F_16[165] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.shld16(d, a.reg16[c >> 2 & 14], a.reg8[4] & 31);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
};
table0F_32[165] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.shld32(d, a.reg32s[c >> 3 & 7], a.reg8[4] & 31);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
};
table0F_16[166] = table0F_32[166] = function(a) {
a.trigger_ud();
};
table0F_16[167] = table0F_32[167] = function(a) {
a.trigger_ud();
};
table0F_16[168] = function(a) {
a.push16(a.sreg[5]);
};
table0F_32[168] = function(a) {
a.push32(a.sreg[5]);
};
table0F_16[169] = function(a) {
a.switch_seg(5, a.safe_read16(a.get_stack_pointer(0)));
a.stack_reg[a.reg_vsp] += 2;
};
table0F_32[169] = function(a) {
a.switch_seg(5, a.safe_read16(a.get_stack_pointer(0)));
a.stack_reg[a.reg_vsp] += 4;
};
table0F_16[170] = table0F_32[170] = function(a) {
a.trigger_ud();
};
table0F_16[171] = function(a) {
var c = a.read_imm8();
192 > c ? a.bts_mem(a.modrm_resolve(c), a.reg16s[c >> 2 & 14]) : a.reg16[c << 1 & 14] = a.bts_reg(a.reg16[c << 1 & 14], a.reg16s[c >> 2 & 14] & 15);
};
table0F_32[171] = function(a) {
var c = a.read_imm8();
192 > c ? a.bts_mem(a.modrm_resolve(c), a.reg32s[c >> 3 & 7]) : a.reg32s[c & 7] = a.bts_reg(a.reg32s[c & 7], a.reg32s[c >> 3 & 7] & 31);
};
table0F_16[172] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.shrd16(d, a.reg16[c >> 2 & 14], a.read_imm8() & 31);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
};
table0F_32[172] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.shrd32(d, a.reg32s[c >> 3 & 7], a.read_imm8() & 31);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
};
table0F_16[173] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.shrd16(d, a.reg16[c >> 2 & 14], a.reg8[4] & 31);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
};
table0F_32[173] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.shrd32(d, a.reg32s[c >> 3 & 7], a.reg8[4] & 31);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
};
table0F_16[174] = table0F_32[174] = function(a) {
switch(a.read_imm8() >> 3 & 7) {
case 6:
break;
default:
a.trigger_ud();
}
};
table0F_16[175] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) << 16 >> 16 : a.reg16s[c << 1 & 14];
a.reg16[c >> 2 & 14] = a.imul_reg16(a.reg16s[c >> 2 & 14], d);
};
table0F_32[175] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.reg32s[c >> 3 & 7] = a.imul_reg32(a.reg32s[c >> 3 & 7], d);
};
table0F_16[176] = table0F_32[176] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c);
a.writable_or_pagefault(d, 1);
var e = a.safe_read8(d);
} else {
e = a.reg8[c << 2 & 12 | c >> 2 & 1];
}
a.sub(e, a.reg8[0], 7);
a.getzf() ? 192 > c ? a.safe_write8(d, a.reg8[c >> 1 & 12 | c >> 5 & 1]) : a.reg8[c << 2 & 12 | c >> 2 & 1] = a.reg8[c >> 1 & 12 | c >> 5 & 1] : a.reg8[0] = e;
};
table0F_16[177] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c);
a.writable_or_pagefault(d, 2);
var e = a.safe_read16(d);
} else {
e = a.reg16[c << 1 & 14];
}
a.sub(e, a.reg16[0], 15);
a.getzf() ? 192 > c ? a.safe_write16(d, a.reg16[c >> 2 & 14]) : a.reg16[c << 1 & 14] = a.reg16[c >> 2 & 14] : a.reg16[0] = e;
};
table0F_32[177] = function(a) {
var c = a.read_imm8();
if (192 > c) {
var d = a.modrm_resolve(c);
a.writable_or_pagefault(d, 4);
var e = a.safe_read32s(d);
} else {
e = a.reg32s[c & 7];
}
a.sub(e, a.reg32s[0], 31);
a.getzf() ? 192 > c ? a.safe_write32(d, a.reg32s[c >> 3 & 7]) : a.reg32s[c & 7] = a.reg32s[c >> 3 & 7] : a.reg32s[0] = e;
};
table0F_16[178] = function(a) {
var c = a.read_imm8();
192 <= c && a.trigger_ud();
a.lss16(2, a.modrm_resolve(c), c >> 2 & 14);
};
table0F_32[178] = function(a) {
var c = a.read_imm8();
192 <= c && a.trigger_ud();
a.lss32(2, a.modrm_resolve(c), c >> 3 & 7);
};
table0F_16[179] = function(a) {
var c = a.read_imm8();
192 > c ? a.btr_mem(a.modrm_resolve(c), a.reg16s[c >> 2 & 14]) : a.reg16[c << 1 & 14] = a.btr_reg(a.reg16[c << 1 & 14], a.reg16s[c >> 2 & 14] & 15);
};
table0F_32[179] = function(a) {
var c = a.read_imm8();
192 > c ? a.btr_mem(a.modrm_resolve(c), a.reg32s[c >> 3 & 7]) : a.reg32s[c & 7] = a.btr_reg(a.reg32s[c & 7], a.reg32s[c >> 3 & 7] & 31);
};
table0F_16[180] = function(a) {
var c = a.read_imm8();
192 <= c && a.trigger_ud();
a.lss16(4, a.modrm_resolve(c), c >> 2 & 14);
};
table0F_32[180] = function(a) {
var c = a.read_imm8();
192 <= c && a.trigger_ud();
a.lss32(4, a.modrm_resolve(c), c >> 3 & 7);
};
table0F_16[181] = function(a) {
var c = a.read_imm8();
192 <= c && a.trigger_ud();
a.lss16(5, a.modrm_resolve(c), c >> 2 & 14);
};
table0F_32[181] = function(a) {
var c = a.read_imm8();
192 <= c && a.trigger_ud();
a.lss32(5, a.modrm_resolve(c), c >> 3 & 7);
};
table0F_16[182] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.reg16[c >> 2 & 14] = d;
};
table0F_32[182] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) : a.reg8[c << 2 & 12 | c >> 2 & 1];
a.reg32s[c >> 3 & 7] = d;
};
table0F_16[183] = table0F_32[183] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.reg32s[c >> 3 & 7] = d;
};
table0F_16[184] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.reg16[c >> 2 & 14] = a.popcnt(d);
};
table0F_32[184] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.reg32s[c >> 3 & 7] = a.popcnt(d);
};
table0F_16[185] = table0F_32[185] = function(a) {
a.trigger_ud();
};
table0F_16[186] = function(a) {
var c = a.read_imm8();
switch(c >> 3 & 7) {
case 4:
192 > c ? a.bt_mem(a.modrm_resolve(c), a.read_imm8() & 15) : a.bt_reg(a.reg16[c << 1 & 14], a.read_imm8() & 15);
break;
case 5:
192 > c ? a.bts_mem(a.modrm_resolve(c), a.read_imm8()) : a.reg16[c << 1 & 14] = a.bts_reg(a.reg16[c << 1 & 14], a.read_imm8() & 15);
break;
case 6:
192 > c ? a.btr_mem(a.modrm_resolve(c), a.read_imm8()) : a.reg16[c << 1 & 14] = a.btr_reg(a.reg16[c << 1 & 14], a.read_imm8() & 15);
break;
case 7:
192 > c ? a.btc_mem(a.modrm_resolve(c), a.read_imm8()) : a.reg16[c << 1 & 14] = a.btc_reg(a.reg16[c << 1 & 14], a.read_imm8() & 15);
break;
default:
a.trigger_ud();
}
};
table0F_32[186] = function(a) {
var c = a.read_imm8();
switch(c >> 3 & 7) {
case 4:
192 > c ? a.bt_mem(a.modrm_resolve(c), a.read_imm8() & 31) : a.bt_reg(a.reg32s[c & 7], a.read_imm8() & 31);
break;
case 5:
192 > c ? a.bts_mem(a.modrm_resolve(c), a.read_imm8()) : a.reg32s[c & 7] = a.bts_reg(a.reg32s[c & 7], a.read_imm8() & 31);
break;
case 6:
192 > c ? a.btr_mem(a.modrm_resolve(c), a.read_imm8()) : a.reg32s[c & 7] = a.btr_reg(a.reg32s[c & 7], a.read_imm8() & 31);
break;
case 7:
192 > c ? a.btc_mem(a.modrm_resolve(c), a.read_imm8()) : a.reg32s[c & 7] = a.btc_reg(a.reg32s[c & 7], a.read_imm8() & 31);
break;
default:
a.trigger_ud();
}
};
table0F_16[187] = function(a) {
var c = a.read_imm8();
192 > c ? a.btc_mem(a.modrm_resolve(c), a.reg16s[c >> 2 & 14]) : a.reg16[c << 1 & 14] = a.btc_reg(a.reg16[c << 1 & 14], a.reg16s[c >> 2 & 14] & 15);
};
table0F_32[187] = function(a) {
var c = a.read_imm8();
192 > c ? a.btc_mem(a.modrm_resolve(c), a.reg32s[c >> 3 & 7]) : a.reg32s[c & 7] = a.btc_reg(a.reg32s[c & 7], a.reg32s[c >> 3 & 7] & 31);
};
table0F_16[188] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.reg16[c >> 2 & 14] = a.bsf16(a.reg16[c >> 2 & 14], d);
};
table0F_32[188] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.reg32s[c >> 3 & 7] = a.bsf32(a.reg32s[c >> 3 & 7], d);
};
table0F_16[189] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) : a.reg16[c << 1 & 14];
a.reg16[c >> 2 & 14] = a.bsr16(a.reg16[c >> 2 & 14], d);
};
table0F_32[189] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read32s(a.modrm_resolve(c)) : a.reg32s[c & 7];
a.reg32s[c >> 3 & 7] = a.bsr32(a.reg32s[c >> 3 & 7], d);
};
table0F_16[190] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) << 24 >> 24 : a.reg8s[c << 2 & 12 | c >> 2 & 1];
a.reg16[c >> 2 & 14] = d;
};
table0F_32[190] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read8(a.modrm_resolve(c)) << 24 >> 24 : a.reg8s[c << 2 & 12 | c >> 2 & 1];
a.reg32s[c >> 3 & 7] = d;
};
table0F_16[191] = table0F_32[191] = function(a) {
var c = a.read_imm8(), d = 192 > c ? a.safe_read16(a.modrm_resolve(c)) << 16 >> 16 : a.reg16s[c << 1 & 14];
a.reg32s[c >> 3 & 7] = d;
};
table0F_16[192] = table0F_32[192] = function(a) {
var c = a.read_imm8(), d, e;
192 > c ? (e = a.translate_address_write(a.modrm_resolve(c)), d = a.memory.read8(e)) : d = a.reg8[c << 2 & 12 | c >> 2 & 1];
d = a.xadd8(d, c >> 1 & 12 | c >> 5 & 1);
192 > c ? a.memory.write8(e, d) : a.reg8[c << 2 & 12 | c >> 2 & 1] = d;
};
table0F_16[193] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4095 === (d & 4095) ? (f = a.translate_address_write(d + 1), d = a.virt_boundary_read16(e, f)) : d = a.memory.read16(e)) : d = a.reg16[c << 1 & 14];
d = a.xadd16(d, c >> 2 & 14);
192 > c ? f ? a.virt_boundary_write16(e, f, d) : a.memory.write16(e, d) : a.reg16[c << 1 & 14] = d;
};
table0F_32[193] = function(a) {
var c = a.read_imm8(), d, e, f = 0;
192 > c ? (d = a.modrm_resolve(c), e = a.translate_address_write(d), a.paging && 4093 <= (d & 4095) ? (f = a.translate_address_write(d + 3), d = a.virt_boundary_read32s(e, f)) : d = a.memory.read32s(e)) : d = a.reg32s[c & 7];
d = a.xadd32(d, c >> 3 & 7);
192 > c ? f ? a.virt_boundary_write32(e, f, d) : a.memory.write32(e, d) : a.reg32s[c & 7] = d;
};
table0F_16[194] = table0F_32[194] = function(a) {
a.trigger_ud();
};
table0F_16[195] = table0F_32[195] = function(a) {
a.trigger_ud();
};
table0F_16[196] = table0F_32[196] = function(a) {
a.trigger_ud();
};
table0F_16[197] = table0F_32[197] = function(a) {
a.trigger_ud();
};
table0F_16[198] = table0F_32[198] = function(a) {
a.trigger_ud();
};
table0F_16[199] = table0F_32[199] = function(a) {
var c = a.read_imm8();
192 <= c && a.trigger_ud();
c = a.modrm_resolve(c);
a.writable_or_pagefault(c, 8);
var d = a.safe_read32s(c), e = a.safe_read32s(c + 4);
a.reg32s[0] === d && a.reg32s[2] === e ? (a.flags |= 64, a.safe_write32(c, a.reg32s[3]), a.safe_write32(c + 4, a.reg32s[1])) : (a.flags &= -65, a.reg32s[0] = d, a.reg32s[2] = e);
a.flags_changed &= -65;
};
table0F_16[200] = table0F_32[200] = function(a) {
a.bswap(0);
};
table0F_16[201] = table0F_32[201] = function(a) {
a.bswap(1);
};
table0F_16[202] = table0F_32[202] = function(a) {
a.bswap(2);
};
table0F_16[203] = table0F_32[203] = function(a) {
a.bswap(3);
};
table0F_16[204] = table0F_32[204] = function(a) {
a.bswap(4);
};
table0F_16[205] = table0F_32[205] = function(a) {
a.bswap(5);
};
table0F_16[206] = table0F_32[206] = function(a) {
a.bswap(6);
};
table0F_16[207] = table0F_32[207] = function(a) {
a.bswap(7);
};
table0F_16[208] = table0F_32[208] = function(a) {
a.trigger_ud();
};
table0F_16[209] = table0F_32[209] = function(a) {
a.trigger_ud();
};
table0F_16[210] = table0F_32[210] = function(a) {
a.trigger_ud();
};
table0F_16[211] = table0F_32[211] = function(a) {
a.trigger_ud();
};
table0F_16[212] = table0F_32[212] = function(a) {
a.trigger_ud();
};
table0F_16[213] = table0F_32[213] = function(a) {
a.trigger_ud();
};
table0F_16[214] = table0F_32[214] = function(a) {
a.trigger_ud();
};
table0F_16[215] = table0F_32[215] = function(a) {
a.trigger_ud();
};
table0F_16[216] = table0F_32[216] = function(a) {
a.trigger_ud();
};
table0F_16[217] = table0F_32[217] = function(a) {
a.trigger_ud();
};
table0F_16[218] = table0F_32[218] = function(a) {
a.trigger_ud();
};
table0F_16[219] = table0F_32[219] = function(a) {
a.trigger_ud();
};
table0F_16[220] = table0F_32[220] = function(a) {
a.trigger_ud();
};
table0F_16[221] = table0F_32[221] = function(a) {
a.trigger_ud();
};
table0F_16[222] = table0F_32[222] = function(a) {
a.trigger_ud();
};
table0F_16[223] = table0F_32[223] = function(a) {
a.trigger_ud();
};
table0F_16[224] = table0F_32[224] = function(a) {
a.trigger_ud();
};
table0F_16[225] = table0F_32[225] = function(a) {
a.trigger_ud();
};
table0F_16[226] = table0F_32[226] = function(a) {
a.trigger_ud();
};
table0F_16[227] = table0F_32[227] = function(a) {
a.trigger_ud();
};
table0F_16[228] = table0F_32[228] = function(a) {
a.trigger_ud();
};
table0F_16[229] = table0F_32[229] = function(a) {
a.trigger_ud();
};
table0F_16[230] = table0F_32[230] = function(a) {
a.trigger_ud();
};
table0F_16[231] = table0F_32[231] = function(a) {
a.trigger_ud();
};
table0F_16[232] = table0F_32[232] = function(a) {
a.trigger_ud();
};
table0F_16[233] = table0F_32[233] = function(a) {
a.trigger_ud();
};
table0F_16[234] = table0F_32[234] = function(a) {
a.trigger_ud();
};
table0F_16[235] = table0F_32[235] = function(a) {
a.trigger_ud();
};
table0F_16[236] = table0F_32[236] = function(a) {
a.trigger_ud();
};
table0F_16[237] = table0F_32[237] = function(a) {
a.trigger_ud();
};
table0F_16[238] = table0F_32[238] = function(a) {
a.trigger_ud();
};
table0F_16[239] = table0F_32[239] = function(a) {
a.trigger_ud();
};
table0F_16[240] = table0F_32[240] = function(a) {
a.trigger_ud();
};
table0F_16[241] = table0F_32[241] = function(a) {
a.trigger_ud();
};
table0F_16[242] = table0F_32[242] = function(a) {
a.trigger_ud();
};
table0F_16[243] = table0F_32[243] = function(a) {
a.trigger_ud();
};
table0F_16[244] = table0F_32[244] = function(a) {
a.trigger_ud();
};
table0F_16[245] = table0F_32[245] = function(a) {
a.trigger_ud();
};
table0F_16[246] = table0F_32[246] = function(a) {
a.trigger_ud();
};
table0F_16[247] = table0F_32[247] = function(a) {
a.trigger_ud();
};
table0F_16[248] = table0F_32[248] = function(a) {
a.trigger_ud();
};
table0F_16[249] = table0F_32[249] = function(a) {
a.trigger_ud();
};
table0F_16[250] = table0F_32[250] = function(a) {
a.trigger_ud();
};
table0F_16[251] = table0F_32[251] = function(a) {
a.trigger_ud();
};
table0F_16[252] = table0F_32[252] = function(a) {
a.trigger_ud();
};
table0F_16[253] = table0F_32[253] = function(a) {
a.trigger_ud();
};
table0F_16[254] = table0F_32[254] = function(a) {
a.trigger_ud();
};
table0F_16[255] = table0F_32[255] = function(a) {
a.trigger_ud();
};
"use strict";
CPU.prototype.jmp_rel16 = function(a) {
var c = this.get_seg(1);
this.instruction_pointer -= c;
this.instruction_pointer = this.instruction_pointer + a & 65535;
this.instruction_pointer = this.instruction_pointer + c | 0;
this.last_instr_jump = !0;
};
CPU.prototype.jmpcc16 = function(a) {
a ? this.jmp_rel16(this.read_imm16()) : this.instruction_pointer = this.instruction_pointer + 2 | 0;
this.last_instr_jump = !0;
};
CPU.prototype.jmpcc32 = function(a) {
a ? (a = this.read_imm32s(), this.instruction_pointer = this.instruction_pointer + a | 0) : this.instruction_pointer = this.instruction_pointer + 4 | 0;
this.last_instr_jump = !0;
};
CPU.prototype.loopne = function() {
if (--this.regv[this.reg_vcx] && !this.getzf()) {
var a = this.read_imm8s();
this.instruction_pointer = this.instruction_pointer + a | 0;
} else {
this.instruction_pointer++;
}
this.last_instr_jump = !0;
};
CPU.prototype.loope = function() {
if (--this.regv[this.reg_vcx] && this.getzf()) {
var a = this.read_imm8s();
this.instruction_pointer = this.instruction_pointer + a | 0;
} else {
this.instruction_pointer++;
}
this.last_instr_jump = !0;
};
CPU.prototype.loop = function() {
if (--this.regv[this.reg_vcx]) {
var a = this.read_imm8s();
this.instruction_pointer = this.instruction_pointer + a | 0;
} else {
this.instruction_pointer++;
}
this.last_instr_jump = !0;
};
CPU.prototype.jcxz = function() {
var a = this.read_imm8s();
0 === this.regv[this.reg_vcx] && (this.instruction_pointer = this.instruction_pointer + a | 0);
this.last_instr_jump = !0;
};
CPU.prototype.getcf = function() {
return this.flags_changed & 1 ? (this.last_op1 ^ (this.last_op1 ^ this.last_op2) & (this.last_op2 ^ this.last_add_result)) >>> this.last_op_size & 1 : this.flags & 1;
};
CPU.prototype.getpf = function() {
return this.flags_changed & 4 ? 154020 >> ((this.last_result ^ this.last_result >> 4) & 15) & 4 : this.flags & 4;
};
CPU.prototype.getaf = function() {
return this.flags_changed & 16 ? (this.last_op1 ^ this.last_op2 ^ this.last_add_result) & 16 : this.flags & 16;
};
CPU.prototype.getzf = function() {
return this.flags_changed & 64 ? (~this.last_result & this.last_result - 1) >>> this.last_op_size & 1 : this.flags & 64;
};
CPU.prototype.getsf = function() {
return this.flags_changed & 128 ? this.last_result >>> this.last_op_size & 1 : this.flags & 128;
};
CPU.prototype.getof = function() {
return this.flags_changed & 2048 ? ((this.last_op1 ^ this.last_add_result) & (this.last_op2 ^ this.last_add_result)) >>> this.last_op_size & 1 : this.flags & 2048;
};
CPU.prototype.test_o = CPU.prototype.getof;
CPU.prototype.test_b = CPU.prototype.getcf;
CPU.prototype.test_z = CPU.prototype.getzf;
CPU.prototype.test_s = CPU.prototype.getsf;
CPU.prototype.test_p = CPU.prototype.getpf;
CPU.prototype.test_be = function() {
return this.getcf() || this.getzf();
};
CPU.prototype.test_l = function() {
return!this.getsf() !== !this.getof();
};
CPU.prototype.test_le = function() {
return this.getzf() || !this.getsf() !== !this.getof();
};
CPU.prototype.push16 = function(a) {
var c = this.get_stack_pointer(-2);
this.safe_write16(c, a);
this.stack_reg[this.reg_vsp] -= 2;
};
CPU.prototype.push32 = function(a) {
var c = this.get_stack_pointer(-4);
this.safe_write32(c, a);
this.stack_reg[this.reg_vsp] -= 4;
};
CPU.prototype.pop16 = function() {
var a = this.get_seg(2) + this.stack_reg[this.reg_vsp] | 0, a = this.safe_read16(a);
this.stack_reg[this.reg_vsp] += 2;
return a;
};
CPU.prototype.pop32s = function() {
var a = this.get_seg(2) + this.stack_reg[this.reg_vsp] | 0, a = this.safe_read32s(a);
this.stack_reg[this.reg_vsp] += 4;
return a;
};
CPU.prototype.pusha16 = function() {
var a = this.reg16[8];
this.translate_address_write(this.get_seg(2) + a - 15 | 0);
this.push16(this.reg16[0]);
this.push16(this.reg16[2]);
this.push16(this.reg16[4]);
this.push16(this.reg16[6]);
this.push16(a);
this.push16(this.reg16[10]);
this.push16(this.reg16[12]);
this.push16(this.reg16[14]);
};
CPU.prototype.pusha32 = function() {
var a = this.reg32s[4];
this.translate_address_write(this.get_seg(2) + a - 31 | 0);
this.push32(this.reg32s[0]);
this.push32(this.reg32s[1]);
this.push32(this.reg32s[2]);
this.push32(this.reg32s[3]);
this.push32(a);
this.push32(this.reg32s[5]);
this.push32(this.reg32s[6]);
this.push32(this.reg32s[7]);
};
CPU.prototype.popa16 = function() {
this.translate_address_read(this.get_seg(2) + this.stack_reg[this.reg_vsp] + 15 | 0);
this.reg16[14] = this.pop16();
this.reg16[12] = this.pop16();
this.reg16[10] = this.pop16();
this.stack_reg[this.reg_vsp] += 2;
this.reg16[6] = this.pop16();
this.reg16[4] = this.pop16();
this.reg16[2] = this.pop16();
this.reg16[0] = this.pop16();
};
CPU.prototype.popa32 = function() {
this.translate_address_read(this.get_seg(2) + this.stack_reg[this.reg_vsp] + 31 | 0);
this.reg32s[7] = this.pop32s();
this.reg32s[6] = this.pop32s();
this.reg32s[5] = this.pop32s();
this.stack_reg[this.reg_vsp] += 4;
this.reg32s[3] = this.pop32s();
this.reg32s[2] = this.pop32s();
this.reg32s[1] = this.pop32s();
this.reg32s[0] = this.pop32s();
};
CPU.prototype.xchg8 = function(a, c) {
var d = c >> 1 & 12 | c >> 5 & 1, e = this.reg8[d];
this.reg8[d] = a;
return e;
};
CPU.prototype.xchg16 = function(a, c) {
var d = c >> 2 & 14, e = this.reg16[d];
this.reg16[d] = a;
return e;
};
CPU.prototype.xchg16r = function(a) {
var c = this.reg16[0];
this.reg16[0] = this.reg16[a];
this.reg16[a] = c;
};
CPU.prototype.xchg32 = function(a, c) {
var d = c >> 3 & 7, e = this.reg32s[d];
this.reg32s[d] = a;
return e;
};
CPU.prototype.xchg32r = function(a) {
var c = this.reg32s[0];
this.reg32s[0] = this.reg32s[a];
this.reg32s[a] = c;
};
CPU.prototype.lss16 = function(a, c, d) {
var e = this.safe_read16(c);
c = this.safe_read16(c + 2 | 0);
this.switch_seg(a, c);
this.reg16[d] = e;
};
CPU.prototype.lss32 = function(a, c, d) {
var e = this.safe_read32s(c);
c = this.safe_read16(c + 4 | 0);
this.switch_seg(a, c);
this.reg32s[d] = e;
};
CPU.prototype.enter16 = function() {
var a = this.read_imm16(), c = this.read_imm8() & 31, d, e;
this.push16(this.reg16[10]);
d = this.reg16[8];
if (0 < c) {
e = this.reg16[5];
for (var f = 1;f < c;f++) {
e -= 2, this.push16(this.safe_read16(this.get_seg(2) + e | 0));
}
this.push16(d);
}
this.reg16[10] = d;
this.reg16[8] -= a;
};
CPU.prototype.enter32 = function() {
var a = this.read_imm16(), c = this.read_imm8() & 31, d, e;
this.push32(this.reg32s[5]);
d = this.reg32s[4];
if (0 < c) {
e = this.reg32s[5];
for (var f = 1;f < c;f++) {
e -= 4, this.push32(this.safe_read32s(this.get_seg(2) + e | 0));
}
this.push32(d);
}
this.reg32s[5] = d;
this.reg32s[4] -= a;
};
CPU.prototype.bswap = function(a) {
var c = this.reg32s[a];
this.reg32s[a] = c >>> 24 | c << 24 | c >> 8 & 65280 | c << 8 & 16711680;
};
CPU.prototype.main_run = function() {
try {
if (this.in_hlt) {
return this.hlt_loop();
}
this.do_run();
} catch (a) {
this.exception_cleanup(a);
}
return 0;
};
CPU.prototype.exception_cleanup = function(a) {
if (233495534 === a) {
this.page_fault = !1, this.repeat_string_prefix = 0, this.segment_prefix = -1, this.address_size_32 = this.is_32, this.update_address_size(), this.operand_size_32 = this.is_32, this.update_operand_size();
} else {
throw console.log(a), console.log(a.stack), a;
}
};
CPU.prototype.reboot_internal = function() {
this.CPU_prototype$reset();
this.load_bios();
throw 233495534;
};
CPU.prototype.CPU_prototype$reset = function() {
this.segment_is_null = new Uint8Array(8);
this.segment_limits = new Uint32Array(8);
this.segment_offsets = new Int32Array(8);
this.full_clear_tlb();
this.reg32s = new Int32Array(8);
this.reg32 = new Uint32Array(this.reg32s.buffer);
this.reg16s = new Int16Array(this.reg32s.buffer);
this.reg16 = new Uint16Array(this.reg32s.buffer);
this.reg8s = new Int8Array(this.reg32s.buffer);
this.reg8 = new Uint8Array(this.reg32s.buffer);
this.sreg = new Uint16Array(8);
this.dreg = new Int32Array(8);
this.protected_mode = !1;
this.gdtr_offset = this.gdtr_size = this.idtr_offset = this.idtr_size = 0;
this.page_fault = !1;
this.cr0 = 1610612752;
this.cr4 = this.cr3 = this.cr2 = 0;
this.dreg[6] = -61456;
this.dreg[7] = 1024;
this.cpl = 0;
this.paging = !1;
this.page_size_extensions = 0;
this.address_size_32 = this.stack_size_32 = this.operand_size_32 = this.is_32 = !1;
this.paging_changed();
this.update_operand_size();
this.update_address_size();
this.stack_reg = this.reg16;
this.reg_vsp = 8;
this.reg_vbp = 10;
this.previous_ip = this.timestamp_counter = 0;
this.in_hlt = !1;
this.sysenter_eip = this.sysenter_esp = this.sysenter_cs = 0;
this.segment_prefix = -1;
this.repeat_string_prefix = 0;
this.flags = 2;
this.last_op_size = this.last_op2 = this.last_op1 = this.last_add_result = this.last_result = this.flags_changed = 0;
this.tsc_offset = v86.microtick();
this.instruction_pointer = 1048560;
this.switch_seg(2, 48);
this.reg16[8] = 256;
};
CPU.prototype.init = function(a, c) {
this.memory_size = a.memory_size || 67108864;
this.memory = new Memory(this.memory_size);
this.CPU_prototype$reset();
var d = new IO(this.memory);
this.io = d;
this.bios.main = a.bios;
this.bios.vga = a.vga_bios;
this.load_bios();
var e = 0;
d.register_read(146, this, function() {
return e;
});
d.register_write(146, this, function(a) {
e = a;
});
this.devices = {};
a.load_devices && (this.devices.pic = new PIC(this), this.devices.pci = new PCI(this), this.devices.dma = new DMA(this), this.devices.acpi = new ACPI, this.devices.vga = new VGAScreen(this, c, a.vga_memory_size || 8388608), this.fpu = new FPU(this), this.devices.ps2 = new PS2(this, c), this.devices.uart = new UART(this, 1016, c), this.devices.fdc = new FloppyController(this, a.fda, a.fdb), a.cdrom && (this.devices.cdrom = new IDEDevice(this, a.cdrom, !0, 1)), a.hda && (this.devices.hda = new IDEDevice(this,
a.hda, !1, 0)), this.devices.pit = new PIT(this), this.devices.rtc = new RTC(this, this.devices.fdc.type, a.boot_order || 531), a.enable_ne2k && (this.devices.net = new Ne2k(this, c)), a.fs9p && (this.devices.virtio = new VirtIO(this, a.fs9p)));
};
CPU.prototype.load_bios = function() {
var a = this.bios.main, c = this.bios.vga;
if (a) {
var d = new Uint8Array(a);
this.memory.mem8.set(d, 1048576 - a.byteLength);
c && (d = new Uint8Array(c), this.memory.mem8.set(d, 786432));
this.io.mmap_register(4293918720, 1048576, function(a) {
return this.memory.mem8[a & 1048575];
}.bind(this), function(a, c) {
this.memory.mem8[a & 1048575] = c;
}.bind(this));
}
};
CPU.prototype.do_run = function() {
var a = Date.now(), c = a;
for (this.devices.vga.timer();33 > c - a;) {
this.devices.pit.timer(c, !1);
this.devices.rtc.timer(c, !1);
this.handle_irqs();
for (c = 11001;c--;) {
this.cycle();
}
c = Date.now();
}
};
"undefined" !== typeof window && (window.__no_inline1 = CPU.prototype.do_run, window.__no_inline2 = CPU.prototype.exception_cleanup, window.__no_inline3 = CPU.prototype.hlt_loop);
CPU.prototype.cycle = function() {
this.timestamp_counter++;
this.previous_ip = this.instruction_pointer;
var a = this.read_imm8();
this.table[a](this);
};
CPU.prototype.do_op = function() {
this.table[this.read_imm8()](this);
};
CPU.prototype.hlt_loop = function() {
var a = Date.now();
this.devices.pit.timer(a, !1);
this.devices.rtc.timer(a, !1);
this.devices.vga.timer(a);
return 4;
};
CPU.prototype.cr0_changed = function() {
var a = -2147483648 === (this.cr0 & -2147483648);
this.fpu || (this.cr0 |= 4);
this.cr0 |= 16;
a !== this.paging && (this.paging = a, this.full_clear_tlb());
};
CPU.prototype.paging_changed = function() {
this.last_virt_eip = -1;
};
CPU.prototype.cpl_changed = function() {
this.last_virt_eip = -1;
};
CPU.prototype.read_imm8 = function() {
this.instruction_pointer & -4096 ^ this.last_virt_eip && (this.eip_phys = this.translate_address_read(this.instruction_pointer) ^ this.instruction_pointer, this.last_virt_eip = this.instruction_pointer & -4096);
var a = this.memory.mem8[this.eip_phys ^ this.instruction_pointer] | 0;
this.instruction_pointer = this.instruction_pointer + 1 | 0;
return a;
};
CPU.prototype.read_imm8s = function() {
return this.read_imm8() << 24 >> 24;
};
CPU.prototype.read_imm16 = function() {
if (4094 < (this.instruction_pointer ^ this.last_virt_eip) >>> 0) {
return this.read_imm8() | this.read_imm8() << 8;
}
var a = this.memory.read16(this.eip_phys ^ this.instruction_pointer);
this.instruction_pointer = this.instruction_pointer + 2 | 0;
return a;
};
CPU.prototype.read_imm16s = function() {
return this.read_imm16() << 16 >> 16;
};
CPU.prototype.read_imm32s = function() {
if (4092 < (this.instruction_pointer ^ this.last_virt_eip) >>> 0) {
return this.read_imm16() | this.read_imm16() << 16;
}
var a = this.memory.read32s(this.eip_phys ^ this.instruction_pointer);
this.instruction_pointer = this.instruction_pointer + 4 | 0;
return a;
};
CPU.prototype.virt_boundary_read16 = function(a, c) {
return this.memory.read8(a) | this.memory.read8(c) << 8;
};
CPU.prototype.virt_boundary_read32s = function(a, c) {
var d;
d = a & 1 ? a & 2 ? this.memory.read_aligned16(c - 2 >> 1) : this.memory.read_aligned16(a + 1 >> 1) : this.virt_boundary_read16(a + 1, c - 1);
return this.memory.read8(a) | d << 8 | this.memory.read8(c) << 24;
};
CPU.prototype.virt_boundary_write16 = function(a, c, d) {
this.memory.write8(a, d);
this.memory.write8(c, d >> 8);
};
CPU.prototype.virt_boundary_write32 = function(a, c, d) {
this.memory.write8(a, d);
this.memory.write8(c, d >> 24);
a & 1 ? a & 2 ? (this.memory.write8(c - 2, d >> 8), this.memory.write8(c - 1, d >> 16)) : (this.memory.write8(a + 1, d >> 8), this.memory.write8(a + 2, d >> 16)) : (this.memory.write8(a + 1, d >> 8), this.memory.write8(c - 1, d >> 16));
};
CPU.prototype.safe_read8 = function(a) {
return this.memory.read8(this.translate_address_read(a));
};
CPU.prototype.safe_read16 = function(a) {
return this.paging && 4095 === (a & 4095) ? this.safe_read8(a) | this.safe_read8(a + 1) << 8 : this.memory.read16(this.translate_address_read(a));
};
CPU.prototype.safe_read32s = function(a) {
return this.paging && 4093 <= (a & 4095) ? this.safe_read16(a) | this.safe_read16(a + 2) << 16 : this.memory.read32s(this.translate_address_read(a));
};
CPU.prototype.safe_write8 = function(a, c) {
this.memory.write8(this.translate_address_write(a), c);
};
CPU.prototype.safe_write16 = function(a, c) {
var d = this.translate_address_write(a);
4095 === (a & 4095) ? this.virt_boundary_write16(d, this.translate_address_write(a + 1), c) : this.memory.write16(d, c);
};
CPU.prototype.safe_write32 = function(a, c) {
var d = this.translate_address_write(a);
4093 <= (a & 4095) ? this.virt_boundary_write32(d, this.translate_address_write(a + 3), c) : this.memory.write32(d, c);
};
CPU.prototype.read_moffs = function() {
return this.address_size_32 ? this.get_seg_prefix(3) + this.read_imm32s() | 0 : this.get_seg_prefix(3) + this.read_imm16() | 0;
};
CPU.prototype.getiopl = function() {
return this.flags >> 12 & 3;
};
CPU.prototype.vm86_mode = function() {
return!!(this.flags & 131072);
};
CPU.prototype.get_eflags = function() {
return this.flags & -2262 | !!this.getcf() | !!this.getpf() << 2 | !!this.getaf() << 4 | !!this.getzf() << 6 | !!this.getsf() << 7 | !!this.getof() << 11;
};
CPU.prototype.load_eflags = function() {
this.flags = this.get_eflags();
this.flags_changed = 0;
};
CPU.prototype.update_eflags = function(a) {
var c = 1769472, d = 2588629;
this.flags & 131072 ? (c |= 12288, d |= 1572864) : this.cpl && (c |= 12288, this.cpl > this.getiopl() && (c |= 512));
this.flags = (a ^ (this.flags ^ a) & c) & d | 2;
this.flags_changed = 0;
};
CPU.prototype.get_stack_pointer = function(a) {
return this.get_seg(2) + this.stack_reg[this.reg_vsp] + a | 0;
};
CPU.prototype.get_real_eip = function() {
return this.instruction_pointer - this.get_seg(1) | 0;
};
CPU.prototype.call_interrupt_vector = function(a, c, d) {
this.in_hlt = !1;
if (this.protected_mode) {
if (this.vm86_mode() && this.cr4 & 1) {
throw this.debug.unimpl("VME");
}
this.vm86_mode() && c && 3 > this.getiopl() && this.trigger_gp(0);
if ((a << 3 | 7) > this.idtr_size) {
throw this.debug.unimpl("#GP handler");
}
var e = this.idtr_offset + (a << 3) | 0;
this.paging && (e = this.translate_address_system_read(e));
var f = this.memory.read16(e) | this.memory.read16(e + 6) << 16, g = this.memory.read16(e + 2), e = this.memory.read8(e + 5), k = e >> 5 & 3;
if (0 === (e & 128)) {
throw this.debug.unimpl("#NP handler");
}
c && k < this.cpl && this.trigger_gp(a << 3 | 2);
e &= 31;
if (14 === e) {
a = !1;
} else {
if (15 === e) {
a = !0;
} else {
if (5 === e) {
throw this.debug.unimpl("call int to task gate");
}
if (6 === e) {
throw this.debug.unimpl("16 bit interrupt gate");
}
if (7 === e) {
throw this.debug.unimpl("16 bit trap gate");
}
throw this.debug.unimpl("#GP handler");
}
}
c = this.lookup_segment_selector(g);
if (c.is_null) {
throw this.debug.unimpl("#GP handler");
}
if (!c.is_executable || c.dpl > this.cpl) {
throw this.debug.unimpl("#GP handler");
}
if (!c.is_present) {
throw this.debug.unimpl("#NP handler");
}
this.load_eflags();
e = this.flags;
if (!c.dc_bit && c.dpl < this.cpl) {
var m = (c.dpl << 3) + 4;
if (m + 5 > this.segment_limits[6]) {
throw this.debug.unimpl("#TS handler");
}
m = m + this.segment_offsets[6] | 0;
this.paging && (m = this.translate_address_system_read(m));
var k = this.memory.read32s(m), m = this.memory.read16(m + 4), l = this.lookup_segment_selector(m);
if (l.is_null) {
throw this.debug.unimpl("#TS handler");
}
if (l.rpl !== c.dpl) {
throw this.debug.unimpl("#TS handler");
}
if (l.dpl !== c.dpl || !l.rw_bit) {
throw this.debug.unimpl("#TS handler");
}
if (!l.is_present) {
throw this.debug.unimpl("#TS handler");
}
var l = this.reg32s[4], n = this.sreg[2];
this.cpl = c.dpl;
this.cpl_changed();
this.is_32 !== c.size && this.update_cs_size(c.size);
this.flags &= -196609;
this.reg32s[4] = k;
this.switch_seg(2, m);
e & 131072 && (this.push32(this.sreg[5]), this.push32(this.sreg[4]), this.push32(this.sreg[3]), this.push32(this.sreg[0]));
this.push32(n);
this.push32(l);
} else {
if (c.dc_bit || c.dpl === this.cpl) {
this.flags & 131072 && this.trigger_gp(g & -4);
} else {
throw this.debug.unimpl("#GP handler");
}
}
this.push32(e);
this.push32(this.sreg[1]);
this.push32(this.get_real_eip());
e & 131072 && (this.switch_seg(5, 0), this.switch_seg(4, 0), this.switch_seg(3, 0), this.switch_seg(0, 0));
!1 !== d && this.push32(d);
this.sreg[1] = g;
this.is_32 !== c.size && this.update_cs_size(c.size);
this.segment_limits[1] = c.effective_limit;
this.segment_offsets[1] = c.base;
this.instruction_pointer = this.get_seg(1) + f | 0;
a ? this.handle_irqs() : this.flags &= -513;
} else {
this.load_eflags(), this.push16(this.flags), this.push16(this.sreg[1]), this.push16(this.get_real_eip()), this.flags &= -513, this.switch_seg(1, this.memory.read16((a << 2) + 2)), this.instruction_pointer = this.get_seg(1) + this.memory.read16(a << 2) | 0;
}
this.last_instr_jump = !0;
};
CPU.prototype.iret16 = function() {
if (!this.protected_mode || this.vm86_mode() && 3 === this.getiopl()) {
var a = this.pop16();
this.switch_seg(1, this.pop16());
var c = this.pop16();
this.instruction_pointer = a + this.get_seg(1) | 0;
this.update_eflags(c);
this.handle_irqs();
} else {
throw this.vm86_mode() && this.trigger_gp(0), this.debug.unimpl("16 bit iret in protected mode");
}
this.last_instr_jump = !0;
};
CPU.prototype.iret32 = function() {
if (!this.protected_mode || this.vm86_mode() && 3 === this.getiopl()) {
var a = this.pop32s();
this.switch_seg(1, this.pop32s() & 65535);
var c = this.pop32s();
this.instruction_pointer = a + this.get_seg(1) | 0;
this.update_eflags(c);
this.handle_irqs();
} else {
this.vm86_mode() && this.trigger_gp(0);
this.instruction_pointer = this.pop32s();
this.sreg[1] = this.pop32s();
c = this.pop32s();
if (c & 131072) {
if (0 === this.cpl) {
this.update_eflags(c);
this.flags |= 131072;
this.switch_seg(1, this.sreg[1]);
this.instruction_pointer = this.instruction_pointer + this.get_seg(1) | 0;
var a = this.pop32s(), d = this.pop32s();
this.switch_seg(0, this.pop32s() & 65535);
this.switch_seg(3, this.pop32s() & 65535);
this.switch_seg(4, this.pop32s() & 65535);
this.switch_seg(5, this.pop32s() & 65535);
this.reg32s[4] = a;
this.switch_seg(2, d & 65535);
this.cpl = 3;
this.update_cs_size(!1);
return;
}
c &= -131073;
}
var e = this.lookup_segment_selector(this.sreg[1]);
if (e.is_null) {
throw this.debug.unimpl("is null");
}
if (!e.is_present) {
throw this.debug.unimpl("not present");
}
if (!e.is_executable) {
throw this.debug.unimpl("not exec");
}
if (e.rpl < this.cpl) {
throw this.debug.unimpl("rpl < cpl");
}
if (e.dc_bit && e.dpl > e.rpl) {
throw this.debug.unimpl("conforming and dpl > rpl");
}
e.rpl > this.cpl ? (a = this.pop32s(), d = this.pop32s(), this.reg32s[4] = a, this.update_eflags(c), this.cpl = e.rpl, this.switch_seg(2, d & 65535), this.cpl_changed()) : this.update_eflags(c);
e.size !== this.is_32 && this.update_cs_size(e.size);
this.segment_limits[1] = e.effective_limit;
this.segment_offsets[1] = e.base;
this.instruction_pointer = this.instruction_pointer + this.get_seg(1) | 0;
this.handle_irqs();
this.last_instr_jump = !0;
}
};
CPU.prototype.hlt_op = function() {
this.cpl && this.trigger_gp(0);
if (0 === (this.flags & 512)) {
throw this.debug.show("cpu halted"), "HALT";
}
this.in_hlt = !0;
throw 233495534;
};
CPU.prototype.raise_exception = function(a) {
this.call_interrupt_vector(a, !1, !1);
throw 233495534;
};
CPU.prototype.raise_exception_with_code = function(a, c) {
this.call_interrupt_vector(a, !1, c);
throw 233495534;
};
CPU.prototype.trigger_de = function() {
this.instruction_pointer = this.previous_ip;
this.raise_exception(0);
};
CPU.prototype.trigger_ud = function() {
this.instruction_pointer = this.previous_ip;
this.raise_exception(6);
};
CPU.prototype.trigger_nm = function() {
this.instruction_pointer = this.previous_ip;
this.raise_exception(7);
};
CPU.prototype.trigger_gp = function(a) {
this.instruction_pointer = this.previous_ip;
this.raise_exception_with_code(13, a);
};
CPU.prototype.trigger_np = function(a) {
this.instruction_pointer = this.previous_ip;
this.raise_exception_with_code(11, a);
};
CPU.prototype.trigger_ss = function(a) {
this.instruction_pointer = this.previous_ip;
this.raise_exception_with_code(12, a);
};
CPU.prototype.seg_prefix = function(a) {
this.segment_prefix = a;
this.table[this.read_imm8()](this);
this.segment_prefix = -1;
};
CPU.prototype.get_seg_prefix_ds = function() {
return this.get_seg_prefix(3);
};
CPU.prototype.get_seg_prefix_ss = function() {
return this.get_seg_prefix(2);
};
CPU.prototype.get_seg_prefix = function(a) {
return-1 === this.segment_prefix ? this.get_seg(a) : 9 === this.segment_prefix ? 0 : this.get_seg(this.segment_prefix);
};
CPU.prototype.get_seg = function(a) {
return this.segment_offsets[a];
};
CPU.prototype.handle_irqs = function() {
this.devices.pic && this.flags & 512 && !this.page_fault && this.devices.pic.check_irqs();
};
CPU.prototype.test_privileges_for_io = function(a, c) {
if (this.protected_mode && (this.cpl > this.getiopl() || this.flags & 131072)) {
var d = this.segment_limits[6], e = this.segment_offsets[6];
if (103 <= d) {
var f = this.memory.read16(this.translate_address_system_read(e + 100 + 2));
if (d >= f + (a + c - 1 >> 3) && (d = (1 << c) - 1 << (a & 7), e = this.translate_address_system_read(e + f + (a >> 3)), !((d & 65280 ? this.memory.read16(e) : this.memory.read8(e)) & d))) {
return;
}
}
this.trigger_gp(0);
}
};
CPU.prototype.cpuid = function() {
var a = 0, c = 0, d = 0, e = 0;
switch(this.reg32s[0]) {
case 0:
a = 5;
e = 1970169159;
d = 1231384169;
c = 1818588270;
break;
case 1:
a = 3939;
e = 0;
c = 8388608;
d = (this.fpu ? 1 : 0) | 43322;
break;
case 2:
a = 1717260289;
c = e = 0;
d = 8024064;
break;
case 4:
switch(this.reg32s[1]) {
case 0:
a = 289;
e = 29360191;
c = 63;
d = 1;
break;
case 1:
a = 290;
e = 29360191;
c = 63;
d = 1;
break;
case 2:
a = 323, e = 96469055, c = 4095, d = 1;
}
break;
case -2147483648:
a = 5;
}
this.reg32s[0] = a;
this.reg32s[1] = c;
this.reg32s[2] = d;
this.reg32s[3] = e;
};
CPU.prototype.update_cs_size = function(a) {
this.is_32 = this.operand_size_32 = this.address_size_32 = a;
this.update_operand_size();
this.update_address_size();
};
CPU.prototype.update_operand_size = function() {
this.operand_size_32 ? (this.table = this.table32, this.table0F = this.table0F_32) : (this.table = this.table16, this.table0F = this.table0F_16);
};
CPU.prototype.update_address_size = function() {
this.address_size_32 ? (this.regv = this.reg32s, this.reg_vcx = 1, this.reg_vsi = 6, this.reg_vdi = 7) : (this.regv = this.reg16, this.reg_vcx = 2, this.reg_vsi = 12, this.reg_vdi = 14);
};
CPU.prototype.lookup_segment_selector = function(a) {
var c = 0 === (a & 4), d = a & -8, e, f;
e = {rpl:a & 3, from_gdt:c, is_null:!1, is_valid:!0, base:0, access:0, flags:0, type:0, dpl:0, is_system:!1, is_present:!1, is_executable:!1, rw_bit:!1, dc_bit:!1, size:!1, effective_limit:0, is_writable:!1, is_readable:!1, table_offset:0};
c ? (c = this.gdtr_offset, f = this.gdtr_size) : (c = this.segment_offsets[7], f = this.segment_limits[7]);
if (0 === d) {
return e.is_null = !0, e;
}
if ((a | 7) > f) {
return e.is_valid = !1, e;
}
c = c + d | 0;
this.paging && (c = this.translate_address_system_read(c));
e.table_offset = c;
e.base = this.memory.read16(c + 2) | this.memory.read8(c + 4) << 16 | this.memory.read8(c + 7) << 24;
e.access = this.memory.read8(c + 5);
e.flags = this.memory.read8(c + 6) >> 4;
e.type = e.access & 15;
e.dpl = e.access >> 5 & 3;
e.is_system = 0 === (e.access & 16);
e.is_present = 128 === (e.access & 128);
e.is_executable = 8 === (e.access & 8);
e.rw_bit = 2 === (e.access & 2);
e.dc_bit = 4 === (e.access & 4);
e.size = 4 === (e.flags & 4);
a = this.memory.read16(c) | (this.memory.read8(c + 6) & 15) << 16;
e.effective_limit = e.flags & 8 ? (a << 12 | 4095) >>> 0 : a;
e.is_writable = e.rw_bit && !e.is_executable;
e.is_readable = e.rw_bit || !e.is_executable;
return e;
};
CPU.prototype.switch_seg = function(a, c) {
1 === a && (this.protected_mode = 1 === (this.cr0 & 1));
if (!this.protected_mode || this.vm86_mode()) {
this.sreg[a] = c, this.segment_is_null[a] = 0, this.segment_limits[a] = 1048575, this.segment_offsets[a] = c << 4;
} else {
var d = this.lookup_segment_selector(c);
if (2 === a) {
if (d.is_null) {
this.trigger_gp(0);
return;
}
if (!d.is_valid || d.is_system || d.rpl !== this.cpl || !d.is_writable || d.dpl !== this.cpl) {
this.trigger_gp(c & -4);
return;
}
if (!d.is_present) {
this.trigger_ss(c & -4);
return;
}
(this.stack_size_32 = d.size) ? (this.stack_reg = this.reg32s, this.reg_vsp = 4, this.reg_vbp = 5) : (this.stack_reg = this.reg16, this.reg_vsp = 8, this.reg_vbp = 10);
} else {
if (1 === a) {
if (!d.is_executable) {
throw this.debug.unimpl("#GP handler");
}
if (d.is_system) {
throw this.debug.unimpl("load system segment descriptor, type = " + (d.access & 15));
}
if (d.rpl !== this.cpl) {
throw this.debug.unimpl("privilege change");
}
if (!d.dc_bit && d.dpl < this.cpl) {
throw this.debug.unimpl("inter privilege call");
}
if (!d.dc_bit && d.dpl !== this.cpl) {
throw this.debug.unimpl("#GP handler");
}
d.size !== this.is_32 && this.update_cs_size(d.size);
} else {
if (d.is_null) {
this.sreg[a] = c;
this.segment_is_null[a] = 1;
return;
}
if (!d.is_valid || d.is_system || !d.is_readable || (!d.is_executable || !d.dc_bit) && d.rpl > d.dpl && this.cpl > d.dpl) {
this.trigger_gp(c & -4);
return;
}
if (!d.is_present) {
this.trigger_np(c & -4);
return;
}
}
}
this.segment_is_null[a] = 0;
this.segment_limits[a] = d.effective_limit;
this.segment_offsets[a] = d.base;
this.sreg[a] = c;
}
};
CPU.prototype.load_tr = function(a) {
var c = this.lookup_segment_selector(a);
if (!c.from_gdt) {
throw this.debug.unimpl("TR can only be loaded from GDT");
}
if (c.is_null) {
throw this.debug.unimpl("#GP handler");
}
if (!c.is_present) {
throw this.debug.unimpl("#GP handler");
}
if (!c.is_system) {
throw this.debug.unimpl("#GP handler");
}
if (9 !== c.type) {
throw this.debug.unimpl("#GP handler");
}
this.segment_offsets[6] = c.base;
this.segment_limits[6] = c.effective_limit;
this.sreg[6] = a;
this.memory.write8(c.table_offset + 5, this.memory.read8(c.table_offset + 5) | 2);
};
CPU.prototype.load_ldt = function(a) {
var c = this.lookup_segment_selector(a);
if (c.is_null) {
this.segment_offsets[7] = 0, this.segment_limits[7] = 0;
} else {
if (!c.from_gdt) {
throw this.debug.unimpl("LDTR can only be loaded from GDT");
}
if (!c.is_present) {
throw this.debug.unimpl("#GP handler");
}
if (!c.is_system) {
throw this.debug.unimpl("#GP handler");
}
if (2 !== c.type) {
throw this.debug.unimpl("#GP handler");
}
this.segment_offsets[7] = c.base;
this.segment_limits[7] = c.effective_limit;
this.sreg[7] = a;
}
};
CPU.prototype.arpl = function(a, c) {
this.flags_changed &= -65;
if ((a & 3) < (this.reg16[c] & 3)) {
return this.flags |= 64, a & -4 | this.reg16[c] & 3;
}
this.flags &= -65;
return a;
};
CPU.prototype.clear_tlb = function() {
this.last_virt_eip = -1;
this.tlb_info.set(this.tlb_info_global);
};
CPU.prototype.full_clear_tlb = function() {
for (var a = new Int32Array(this.tlb_info_global.buffer), c = 0;262144 > c;) {
a[c++] = a[c++] = a[c++] = a[c++] = 0;
}
this.clear_tlb();
};
CPU.prototype.invlpg = function(a) {
a = a >>> 12;
this.tlb_info[a] = 0;
this.tlb_info_global[a] = 0;
this.last_virt_eip = -1;
};
CPU.prototype.translate_address_read = function(a) {
return this.paging ? 3 === this.cpl ? this.translate_address_user_read(a) : this.translate_address_system_read(a) : a;
};
CPU.prototype.translate_address_write = function(a) {
return this.paging ? 3 === this.cpl ? this.translate_address_user_write(a) : this.translate_address_system_write(a) : a;
};
CPU.prototype.translate_address_user_write = function(a) {
var c = a >>> 12;
return this.tlb_info[c] & 8 ? this.tlb_data[c] ^ a : this.do_page_translation(a, 1, 1) | a & 4095;
};
CPU.prototype.translate_address_user_read = function(a) {
var c = a >>> 12;
return this.tlb_info[c] & 4 ? this.tlb_data[c] ^ a : this.do_page_translation(a, 0, 1) | a & 4095;
};
CPU.prototype.translate_address_system_write = function(a) {
var c = a >>> 12;
return this.tlb_info[c] & 2 ? this.tlb_data[c] ^ a : this.do_page_translation(a, 1, 0) | a & 4095;
};
CPU.prototype.translate_address_system_read = function(a) {
var c = a >>> 12;
return this.tlb_info[c] & 1 ? this.tlb_data[c] ^ a : this.do_page_translation(a, 0, 0) | a & 4095;
};
CPU.prototype.do_page_translation = function(a, c, d) {
var e = a >>> 12, f = (this.cr3 >>> 2) + (e >> 10), g = this.memory.mem32s[f], k = !0, m = !0;
g & 1 || (this.cr2 = a, this.trigger_pagefault(c, d, 0));
0 === (g & 2) && (k = !1, c && (d || this.cr0 & 65536) && (this.cr2 = a, this.trigger_pagefault(c, d, 1)));
0 === (g & 4) && (m = !1, d && (this.cr2 = a, this.trigger_pagefault(c, d, 1)));
if (g & this.page_size_extensions) {
this.memory.mem32s[f] = g | 32 | c << 6, a = g & 4290772992 | a & 4190208, g = g & 256;
} else {
var l = ((g & 4294963200) >>> 2) + (e & 1023), n = this.memory.mem32s[l];
0 === (n & 1) && (this.cr2 = a, this.trigger_pagefault(c, d, 0));
0 === (n & 2) && (k = !1, c && (d || this.cr0 & 65536) && (this.cr2 = a, this.trigger_pagefault(c, d, 1)));
0 === (n & 4) && (m = !1, d && (this.cr2 = a, this.trigger_pagefault(c, d, 1)));
this.memory.mem32s[f] = g | 32;
this.memory.mem32s[l] = n | 32 | c << 6;
a = n & 4294963200;
g = n & 256;
}
this.tlb_data[e] = a ^ e << 12;
k = m ? k ? 15 : 5 : k ? 3 : 1;
this.tlb_info[e] = k;
g && this.cr4 & 128 && (this.tlb_info_global[e] = k);
return a;
};
CPU.prototype.writable_or_pagefault = function(a, c) {
if (this.paging) {
var d = 3 === this.cpl ? 1 : 0, e = d ? 8 : 2, f = a >>> 12;
0 === (this.tlb_info[f] & e) && this.do_page_translation(a, 1, d);
4096 <= (a & 4095) + c - 1 && 0 === (this.tlb_info[f + 1] & e) && this.do_page_translation(a + c - 1, 1, d);
}
};
CPU.prototype.trigger_pagefault = function(a, c, d) {
if (this.page_fault) {
throw this.debug.unimpl("Double fault");
}
var e = this.cr2 >>> 12;
this.tlb_info[e] = 0;
this.tlb_info_global[e] = 0;
this.instruction_pointer = this.previous_ip;
this.page_fault = !0;
this.call_interrupt_vector(14, !1, c << 2 | a << 1 | d);
throw 233495534;
};
function IO(a) {
function c() {
return 255;
}
function d() {
return 65535;
}
function e() {
return-1;
}
function f() {
}
var g = a.size;
this.IO$ports = [];
this.devices = Array(65536);
this._state_skip = [this.IO$ports, this.devices];
for (var k = 0;65536 > k;k++) {
this.IO$ports[k] = {read8:c, read16:d, read32:e, write8:f, write16:f, write32:f, device:void 0};
}
this.register_read = function(a, c, d, e, f) {
d && (this.IO$ports[a].read8 = d);
e && (this.IO$ports[a].read16 = e);
f && (this.IO$ports[a].read32 = f);
this.IO$ports[a].device = c;
};
this.register_write = function(a, c, d, e, f) {
d && (this.IO$ports[a].write8 = d);
e && (this.IO$ports[a].write16 = e);
f && (this.IO$ports[a].write32 = f);
this.IO$ports[a].device = c;
};
this.register_read_consecutive = function(a, c, d, e, f, g) {
function k() {
return d.call(this) | e.call(this) << 8;
}
function t() {
return f.call(this) | g.call(this) << 8;
}
function x() {
return d.call(this) | e.call(this) << 8 | f.call(this) << 16 | g.call(this) << 24;
}
f && g ? (this.register_read(a, c, d, k, x), this.register_read(a + 1, c, e), this.register_read(a + 2, c, f, t), this.register_read(a + 3, c, g)) : (this.register_read(a, c, d, k), this.register_read(a + 1, c, e));
};
this.register_write_consecutive = function(a, c, d, e, f, g) {
function k(a) {
d.call(this, a & 255);
e.call(this, a >> 8 & 255);
}
function t(a) {
f.call(this, a & 255);
g.call(this, a >> 8 & 255);
}
function x(a) {
d.call(this, a & 255);
e.call(this, a >> 8 & 255);
f.call(this, a >> 16 & 255);
g.call(this, a >>> 24);
}
f && g ? (this.register_write(a, c, d, k, x), this.register_write(a + 1, c, e), this.register_write(a + 2, c, f, t), this.register_write(a + 3, c, g)) : (this.register_write(a, c, d, k), this.register_write(a + 1, c, e));
};
this.mmap_read32_shim = function(c) {
var d = a.memory_map_read8[c >>> 14];
return d(c) | d(c + 1) << 8 | d(c + 2) << 16 | d(c + 3) << 24;
};
this.mmap_write32_shim = function(c, d) {
var e = a.memory_map_write8[c >>> 14];
e(c, d & 255);
e(c + 1, d >> 8 & 255);
e(c + 2, d >> 16 & 255);
e(c + 3, d >>> 24);
};
this.mmap_register = function(c, d, e, f, g, k) {
g || (g = this.mmap_read32_shim);
k || (k = this.mmap_write32_shim);
for (c >>>= 14;0 < d;c++) {
a.memory_map_registered[c] = 1, a.memory_map_read8[c] = e, a.memory_map_write8[c] = f, a.memory_map_read32[c] = g, a.memory_map_write32[c] = k, d -= 16384;
}
};
for (k = 0;k << 14 < g;k++) {
a.memory_map_read8[k] = a.memory_map_write8[k] = void 0, a.memory_map_read32[k] = a.memory_map_write32[k] = void 0;
}
this.mmap_register(g, 4294967296 - g, function() {
return 255;
}, function() {
}, function() {
return-1;
}, function() {
});
this.in_mmap_range = function(c, d) {
c >>>= 0;
var e = c + (d >>> 0);
if (e >= g) {
return!0;
}
for (c &= -16384;c < e;) {
if (a.memory_map_registered[c >> 14]) {
return!0;
}
c += 16384;
}
return!1;
};
this.port_write8 = function(a, c) {
var d = this.IO$ports[a];
d.write8.call(d.device, c);
};
this.port_write16 = function(a, c) {
var d = this.IO$ports[a];
d.write16.call(d.device, c);
};
this.port_write32 = function(a, c) {
var d = this.IO$ports[a];
d.write32.call(d.device, c);
};
this.port_read8 = function(a) {
a = this.IO$ports[a];
return a.read8.call(a.device);
};
this.port_read16 = function(a) {
a = this.IO$ports[a];
return a.read16.call(a.device);
};
this.port_read32 = function(a) {
a = this.IO$ports[a];
return a.read32.call(a.device);
};
}
;function v86(a) {
this.first_init = !0;
this.stopped = this.running = !1;
this.cpu = new CPU;
this.bus = a;
a.register("cpu-init", this.init, this);
a.register("cpu-run", this.v86_prototype$run, this);
a.register("cpu-stop", this.v86_prototype$stop, this);
this.fast_next_tick = function() {
console.assert(!1);
};
this.v86$next_tick = function() {
console.assert(!1);
};
}
v86.prototype.v86_prototype$run = function() {
this.running || this.fast_next_tick();
};
v86.prototype.do_tick = function() {
if (this.stopped) {
this.stopped = this.running = !1;
} else {
this.running = !0;
var a = this.cpu.main_run();
this.v86$next_tick(a);
}
};
v86.prototype.v86_prototype$stop = function() {
this.running && (this.stopped = !0);
};
v86.prototype.v86_prototype$restart = function() {
this.cpu.CPU_prototype$reset();
this.cpu.load_bios();
};
v86.prototype.init = function(a) {
this.first_init && (this.first_init = !1, this.lazy_init());
this.cpu.init(a, this.bus);
this.bus.send_async();
};
v86.prototype.lazy_init = function() {
var a = this;
"undefined" !== typeof setImmediate ? this.fast_next_tick = function() {
setImmediate(function() {
a.do_tick();
});
} : "undefined" !== typeof window && "undefined" !== typeof postMessage ? (window.addEventListener("message", function(c) {
c.source === window && 43605 === c.data && a.do_tick();
}, !1), this.fast_next_tick = function() {
window.postMessage(43605, "*");
}) : this.fast_next_tick = function() {
setTimeout(function() {
a.do_tick();
}, 0);
};
this.v86$next_tick = "undefined" !== typeof document && "boolean" === typeof document.hidden ? function(c) {
4 > c || document.hidden ? this.fast_next_tick() : setTimeout(function() {
a.do_tick();
}, c);
} : function(c) {
setTimeout(function() {
a.do_tick();
}, c);
};
};
v86.prototype.v86_prototype$save_state = function() {
return this.cpu.CPU_prototype$save_state();
};
v86.prototype.v86_prototype$restore_state = function(a) {
this.cpu.CPU_prototype$restore_state(a);
};
"object" === typeof performance && performance.now ? v86.microtick = function() {
return performance.now();
} : v86.microtick = Date.now;
String.pads = function(a) {
for (a = a ? a + "" : "";20 > a.length;) {
a += " ";
}
return a;
};
String.pad0 = function() {
for (var a = "", a = a ? a + "" : "";1 > a.length;) {
a = "0" + a;
}
return a;
};
function h(a) {
return a ? a.toString(16).toUpperCase() : String.pad0();
}
function SyncBuffer(a) {
this.buffer = a;
this.byteLength = a.byteLength;
}
SyncBuffer.prototype.get = function(a, c, d) {
d(new Uint8Array(this.buffer, a, c));
};
SyncBuffer.prototype.set = function(a, c, d) {
(new Uint8Array(this.buffer, a, c.byteLength)).set(c);
d();
};
for (var int_log2_table = new Int8Array(256), i = 0, b = -2;256 > i;i++) {
i & i - 1 || b++, int_log2_table[i] = b;
}
Math.int_log2 = function(a) {
var c = a >>> 16;
if (c) {
var d = c >>> 8;
return d ? 24 + int_log2_table[d] : 16 + int_log2_table[c];
}
return(d = a >>> 8) ? 8 + int_log2_table[d] : int_log2_table[a];
};
function ByteQueue(a) {
var c = new Uint8Array(a), d, e;
this.length = 0;
this.push = function(d) {
this.length !== a && this.length++;
c[e] = d;
e = e + 1 & a - 1;
};
this.shift = function() {
if (this.length) {
var e = c[d];
d = d + 1 & a - 1;
this.length--;
return e;
}
return-1;
};
this.clear = function() {
this.length = e = d = 0;
};
this.clear();
}
Array.setify = function(a) {
for (var c = {}, d = 0;d < a.length;d++) {
c[a[d]] = !0;
}
return c;
};
function FPU(a) {
this.cpu = a;
this.st = new Float64Array(8);
this._state_restore();
this.stack_empty = 255;
this.stack_ptr = 0;
this.control_word = 895;
this.fpu_dp_selector = this.fpu_dp = this.fpu_opcode = this.fpu_ip_selector = this.fpu_ip = this.status_word = 0;
this.indefinite_nan = NaN;
this.constants = new Float64Array([1, Math.log(10) / Math.LN2, Math.LOG2E, Math.PI, Math.log(2) / Math.LN10, Math.LN2, 0]);
}
FPU.prototype._state_restore = function() {
this.float32 = new Float32Array(1);
this.float32_byte = new Uint8Array(this.float32.buffer);
this.float32_int = new Int32Array(this.float32.buffer);
this.float64 = new Float64Array(1);
this.float64_byte = new Uint8Array(this.float64.buffer);
this.float64_int = new Int32Array(this.float64.buffer);
this.st8 = new Uint8Array(this.st.buffer);
this.st32 = new Int32Array(this.st.buffer);
this._state_skip = [this.cpu, this.float32, this.float32_byte, this.float32_int, this.float64, this.float64_byte, this.float64_int, this.st8, this.st32];
};
FPU.prototype.fpu_unimpl = function() {
this.cpu.trigger_ud();
};
FPU.prototype.stack_fault = function() {
this.status_word |= 65;
};
FPU.prototype.invalid_arithmatic = function() {
this.status_word |= 1;
};
FPU.prototype.fcom = function(a) {
var c = this.get_st0();
this.status_word &= -18177;
c > a || (this.status_word = a > c ? this.status_word | 256 : c === a ? this.status_word | 16384 : this.status_word | 17664);
};
FPU.prototype.fucom = function(a) {
this.fcom(a);
};
FPU.prototype.fcomi = function(a) {
var c = this.st[this.stack_ptr];
this.cpu.flags_changed &= -70;
this.cpu.flags &= -70;
c > a || (this.cpu.flags = a > c ? this.cpu.flags | 1 : c === a ? this.cpu.flags | 64 : this.cpu.flags | 69);
};
FPU.prototype.fucomi = function(a) {
this.fcomi(a);
};
FPU.prototype.ftst = function(a) {
this.status_word &= -18177;
isNaN(a) ? this.status_word |= 17664 : 0 === a ? this.status_word |= 16384 : 0 > a && (this.status_word |= 256);
};
FPU.prototype.fxam = function(a) {
this.status_word &= -18177;
this.status_word |= this.sign(0) << 9;
this.status_word = this.stack_empty >> this.stack_ptr & 1 ? this.status_word | 16640 : isNaN(a) ? this.status_word | 256 : 0 === a ? this.status_word | 16384 : Infinity === a || -Infinity === a ? this.status_word | 1280 : this.status_word | 1024;
};
FPU.prototype.finit = function() {
this.control_word = 895;
this.fpu_opcode = this.fpu_dp = this.fpu_ip = this.status_word = 0;
this.stack_empty = 255;
this.stack_ptr = 0;
};
FPU.prototype.load_status_word = function() {
return this.status_word & -14337 | this.stack_ptr << 11;
};
FPU.prototype.safe_status_word = function(a) {
this.status_word = a & -14337;
this.stack_ptr = a >> 11 & 7;
};
FPU.prototype.load_tag_word = function() {
for (var a = 0, c, d = 0;8 > d;d++) {
c = this.st[d], this.stack_empty >> d & 1 ? a |= 3 << (d << 1) : 0 === c ? a |= 1 << (d << 1) : isFinite(c) || (a |= 2 << (d << 1));
}
return a;
};
FPU.prototype.safe_tag_word = function(a) {
for (var c = this.stack_empty = 0;8 > c;c++) {
this.stack_empty |= a >> c & a >> c + 1 & 1 << c;
}
};
FPU.prototype.fstenv = function(a) {
this.cpu.operand_size_32 ? (this.cpu.writable_or_pagefault(a, 26), this.cpu.safe_write16(a, this.control_word), this.cpu.safe_write16(a + 4, this.load_status_word()), this.cpu.safe_write16(a + 8, this.load_tag_word()), this.cpu.safe_write32(a + 12, this.fpu_ip), this.cpu.safe_write16(a + 16, this.fpu_ip_selector), this.cpu.safe_write16(a + 18, this.fpu_opcode), this.cpu.safe_write32(a + 20, this.fpu_dp), this.cpu.safe_write16(a + 24, this.fpu_dp_selector)) : this.fpu_unimpl();
};
FPU.prototype.fldenv = function(a) {
this.cpu.operand_size_32 ? (this.control_word = this.cpu.safe_read16(a), this.safe_status_word(this.cpu.safe_read16(a + 4)), this.safe_tag_word(this.cpu.safe_read16(a + 8)), this.fpu_ip = this.cpu.safe_read32s(a + 12), this.fpu_ip_selector = this.cpu.safe_read16(a + 16), this.fpu_opcode = this.cpu.safe_read16(a + 18), this.fpu_dp = this.cpu.safe_read32s(a + 20), this.fpu_dp_selector = this.cpu.safe_read16(a + 24)) : this.fpu_unimpl();
};
FPU.prototype.fsave = function(a) {
this.cpu.writable_or_pagefault(a, 108);
this.fstenv(a);
a += 28;
for (var c = 0;8 > c;c++) {
this.store_m80(a, c - this.stack_ptr & 7), a += 10;
}
this.finit();
};
FPU.prototype.frstor = function(a) {
this.fldenv(a);
a += 28;
for (var c = 0;8 > c;c++) {
this.st[c] = this.load_m80(a), a += 10;
}
};
FPU.prototype.integer_round = function(a) {
var c = this.control_word >> 10 & 3;
return 0 === c ? (c = Math.round(a), .5 === c - a && c % 2 && c--, c) : 1 === c || 3 === c && 0 < a ? Math.floor(a) : Math.ceil(a);
};
FPU.prototype.FPU_prototype$truncate = function(a) {
return 0 < a ? Math.floor(a) : Math.ceil(a);
};
FPU.prototype.push = function(a) {
this.stack_ptr = this.stack_ptr - 1 & 7;
this.stack_empty >> this.stack_ptr & 1 ? (this.status_word &= -513, this.stack_empty &= ~(1 << this.stack_ptr), this.st[this.stack_ptr] = a) : (this.status_word |= 512, this.stack_fault(), this.st[this.stack_ptr] = this.indefinite_nan);
};
FPU.prototype.pop = function() {
this.stack_empty |= 1 << this.stack_ptr;
this.stack_ptr = this.stack_ptr + 1 & 7;
};
FPU.prototype.get_sti = function(a) {
a = a + this.stack_ptr & 7;
return this.stack_empty >> a & 1 ? (this.status_word &= -513, this.stack_fault(), this.indefinite_nan) : this.st[a];
};
FPU.prototype.get_st0 = function() {
return this.stack_empty >> this.stack_ptr & 1 ? (this.status_word &= -513, this.stack_fault(), this.indefinite_nan) : this.st[this.stack_ptr];
};
FPU.prototype.load_m80 = function(a) {
var c = this.cpu.safe_read16(a + 8), d = this.cpu.safe_read32s(a) >>> 0, e = this.cpu.safe_read32s(a + 4) >>> 0;
a = c >> 15;
c &= -32769;
if (0 === c) {
return 0;
}
if (!(32767 > c)) {
return this.float64_byte[7] = 127 | a << 7, this.float64_byte[6] = 240 | e >> 30 << 3 & 8, this.float64_byte[5] = 0, this.float64_byte[4] = 0, this.float64_int[0] = 0, this.float64[0];
}
d += 4294967296 * e;
a && (d = -d);
return d * Math.pow(2, c - 16383 - 63);
};
FPU.prototype.store_m80 = function(a, c) {
this.float64[0] = this.st[this.stack_ptr + c & 7];
var d = this.float64_byte[7] & 128, e = (this.float64_byte[7] & 127) << 4 | this.float64_byte[6] >> 4, f, g;
2047 === e ? (e = 32767, f = 0, g = 2147483648 | (this.float64_int[1] & 524288) << 11) : 0 === e ? g = f = 0 : (e += 15360, f = this.float64_int[0] << 11, g = 2147483648 | (this.float64_int[1] & 1048575) << 11 | this.float64_int[0] >>> 21);
this.cpu.safe_write32(a, f);
this.cpu.safe_write32(a + 4, g);
this.cpu.safe_write16(a + 8, d << 8 | e);
};
FPU.prototype.load_m64 = function(a) {
var c = this.cpu.safe_read32s(a);
a = this.cpu.safe_read32s(a + 4);
this.float64_int[0] = c;
this.float64_int[1] = a;
return this.float64[0];
};
FPU.prototype.store_m64 = function(a) {
this.cpu.writable_or_pagefault(a, 8);
this.float64[0] = this.get_sti(0);
this.cpu.safe_write32(a, this.float64_int[0]);
this.cpu.safe_write32(a + 4, this.float64_int[1]);
};
FPU.prototype.load_m32 = function(a) {
this.float32_int[0] = this.cpu.safe_read32s(a);
return this.float32[0];
};
FPU.prototype.store_m32 = function(a, c) {
this.float32[0] = c;
this.cpu.safe_write32(a, this.float32_int[0]);
};
FPU.prototype.sign = function(a) {
return this.st8[(this.stack_ptr + a & 7) << 3 | 7] >> 7;
};
FPU.prototype.op_D8_reg = function(a) {
var c = a >> 3 & 7;
a = this.get_sti(a & 7);
var d = this.get_st0();
switch(c) {
case 0:
this.st[this.stack_ptr] = d + a;
break;
case 1:
this.st[this.stack_ptr] = d * a;
break;
case 2:
this.fcom(a);
break;
case 3:
this.fcom(a);
this.pop();
break;
case 4:
this.st[this.stack_ptr] = d - a;
break;
case 5:
this.st[this.stack_ptr] = a - d;
break;
case 6:
this.st[this.stack_ptr] = d / a;
break;
case 7:
this.st[this.stack_ptr] = a / d;
}
};
FPU.prototype.op_D8_mem = function(a, c) {
var d = a >> 3 & 7, e = this.load_m32(c), f = this.get_st0();
switch(d) {
case 0:
this.st[this.stack_ptr] = f + e;
break;
case 1:
this.st[this.stack_ptr] = f * e;
break;
case 2:
this.fcom(e);
break;
case 3:
this.fcom(e);
this.pop();
break;
case 4:
this.st[this.stack_ptr] = f - e;
break;
case 5:
this.st[this.stack_ptr] = e - f;
break;
case 6:
this.st[this.stack_ptr] = f / e;
break;
case 7:
this.st[this.stack_ptr] = e / f;
}
};
FPU.prototype.op_D9_reg = function(a) {
var c = a & 7;
switch(a >> 3 & 7) {
case 0:
a = this.get_sti(c);
this.push(a);
break;
case 1:
a = this.get_sti(c);
this.st[this.stack_ptr + c & 7] = this.get_st0();
this.st[this.stack_ptr] = a;
break;
case 2:
switch(c) {
case 0:
break;
default:
this.fpu_unimpl();
}
break;
case 3:
this.fpu_unimpl();
break;
case 4:
a = this.get_st0();
switch(c) {
case 0:
this.st[this.stack_ptr] = -a;
break;
case 1:
this.st[this.stack_ptr] = Math.abs(a);
break;
case 4:
this.ftst(a);
break;
case 5:
this.fxam(a);
break;
default:
this.fpu_unimpl();
}
break;
case 5:
this.push(this.constants[c]);
break;
case 6:
a = this.get_st0();
switch(c) {
case 0:
this.st[this.stack_ptr] = Math.pow(2, a) - 1;
break;
case 1:
this.st[this.stack_ptr + 1 & 7] = this.get_sti(1) * Math.log(a) / Math.LN2;
this.pop();
break;
case 2:
this.st[this.stack_ptr] = Math.tan(a);
this.push(1);
break;
case 3:
this.st[this.stack_ptr + 1 & 7] = Math.atan2(this.get_sti(1), a);
this.pop();
break;
case 4:
this.fpu_unimpl();
break;
case 5:
this.st[this.stack_ptr] = a % this.get_sti(1);
break;
case 6:
this.fpu_unimpl();
break;
case 7:
this.fpu_unimpl();
}
break;
case 7:
switch(a = this.get_st0(), c) {
case 0:
this.st[this.stack_ptr] = a % this.get_sti(1);
break;
case 1:
this.st[this.stack_ptr + 1 & 7] = this.get_sti(1) * Math.log(a + 1) / Math.LN2;
this.pop();
break;
case 2:
this.st[this.stack_ptr] = Math.sqrt(a);
break;
case 3:
this.st[this.stack_ptr] = Math.sin(a);
this.push(Math.cos(a));
break;
case 4:
this.st[this.stack_ptr] = this.integer_round(a);
break;
case 5:
this.st[this.stack_ptr] = a * Math.pow(2, this.FPU_prototype$truncate(this.get_sti(1)));
break;
case 6:
this.st[this.stack_ptr] = Math.sin(a);
break;
case 7:
this.st[this.stack_ptr] = Math.cos(a);
}
;
}
};
FPU.prototype.op_D9_mem = function(a, c) {
switch(a >> 3 & 7) {
case 0:
var d = this.load_m32(c);
this.push(d);
break;
case 1:
this.fpu_unimpl();
break;
case 2:
this.store_m32(c, this.get_st0());
break;
case 3:
this.store_m32(c, this.get_st0());
this.pop();
break;
case 4:
this.fldenv(c);
break;
case 5:
this.control_word = this.cpu.safe_read16(c);
break;
case 6:
this.fstenv(c);
break;
case 7:
this.cpu.safe_write16(c, this.control_word);
}
};
FPU.prototype.op_DA_reg = function(a) {
var c = a & 7;
switch(a >> 3 & 7) {
case 0:
this.cpu.test_b() && (this.st[this.stack_ptr] = this.get_sti(c), this.stack_empty &= ~(1 << this.stack_ptr));
break;
case 1:
this.cpu.test_z() && (this.st[this.stack_ptr] = this.get_sti(c), this.stack_empty &= ~(1 << this.stack_ptr));
break;
case 2:
this.cpu.test_be() && (this.st[this.stack_ptr] = this.get_sti(c), this.stack_empty &= ~(1 << this.stack_ptr));
break;
case 3:
this.cpu.test_p() && (this.st[this.stack_ptr] = this.get_sti(c), this.stack_empty &= ~(1 << this.stack_ptr));
break;
case 5:
1 === c ? (this.fucom(this.get_sti(1)), this.pop(), this.pop()) : this.fpu_unimpl();
break;
default:
this.fpu_unimpl();
}
};
FPU.prototype.op_DA_mem = function(a, c) {
var d = a >> 3 & 7, e = this.cpu.safe_read32s(c), f = this.get_st0();
switch(d) {
case 0:
this.st[this.stack_ptr] = f + e;
break;
case 1:
this.st[this.stack_ptr] = f * e;
break;
case 2:
this.fcom(e);
break;
case 3:
this.fcom(e);
this.pop();
break;
case 4:
this.st[this.stack_ptr] = f - e;
break;
case 5:
this.st[this.stack_ptr] = e - f;
break;
case 6:
this.st[this.stack_ptr] = f / e;
break;
case 7:
this.st[this.stack_ptr] = e / f;
}
};
FPU.prototype.op_DB_reg = function(a) {
var c = a & 7;
switch(a >> 3 & 7) {
case 0:
this.cpu.test_b() || (this.st[this.stack_ptr] = this.get_sti(c), this.stack_empty &= ~(1 << this.stack_ptr));
break;
case 1:
this.cpu.test_z() || (this.st[this.stack_ptr] = this.get_sti(c), this.stack_empty &= ~(1 << this.stack_ptr));
break;
case 2:
this.cpu.test_be() || (this.st[this.stack_ptr] = this.get_sti(c), this.stack_empty &= ~(1 << this.stack_ptr));
break;
case 3:
this.cpu.test_p() || (this.st[this.stack_ptr] = this.get_sti(c), this.stack_empty &= ~(1 << this.stack_ptr));
break;
case 4:
227 === a ? this.finit() : 228 !== a && 225 !== a && (226 === a ? this.status_word = 0 : this.fpu_unimpl());
break;
case 5:
this.fucomi(this.get_sti(c));
break;
case 6:
this.fcomi(this.get_sti(c));
break;
default:
this.fpu_unimpl();
}
};
FPU.prototype.op_DB_mem = function(a, c) {
switch(a >> 3 & 7) {
case 0:
var d = this.cpu.safe_read32s(c);
this.push(d);
break;
case 2:
d = this.integer_round(this.get_st0());
2147483647 >= d && -2147483648 <= d ? this.cpu.safe_write32(c, d) : (this.invalid_arithmatic(), this.cpu.safe_write32(c, -2147483648));
break;
case 3:
d = this.integer_round(this.get_st0());
2147483647 >= d && -2147483648 <= d ? this.cpu.safe_write32(c, d) : (this.invalid_arithmatic(), this.cpu.safe_write32(c, -2147483648));
this.pop();
break;
case 5:
this.push(this.load_m80(c));
break;
case 7:
this.cpu.writable_or_pagefault(c, 10);
this.store_m80(c, 0);
this.pop();
break;
default:
this.fpu_unimpl();
}
};
FPU.prototype.op_DC_reg = function(a) {
var c = a >> 3 & 7, d = a & 7;
a = this.stack_ptr + d & 7;
var d = this.get_sti(d), e = this.get_st0();
switch(c) {
case 0:
this.st[a] = d + e;
break;
case 1:
this.st[a] = d * e;
break;
case 2:
this.fcom(d);
break;
case 3:
this.fcom(d);
this.pop();
break;
case 4:
this.st[a] = e - d;
break;
case 5:
this.st[a] = d - e;
break;
case 6:
this.st[a] = e / d;
break;
case 7:
this.st[a] = d / e;
}
};
FPU.prototype.op_DC_mem = function(a, c) {
var d = a >> 3 & 7, e = this.load_m64(c), f = this.get_st0();
switch(d) {
case 0:
this.st[this.stack_ptr] = f + e;
break;
case 1:
this.st[this.stack_ptr] = f * e;
break;
case 2:
this.fcom(e);
break;
case 3:
this.fcom(e);
this.pop();
break;
case 4:
this.st[this.stack_ptr] = f - e;
break;
case 5:
this.st[this.stack_ptr] = e - f;
break;
case 6:
this.st[this.stack_ptr] = f / e;
break;
case 7:
this.st[this.stack_ptr] = e / f;
}
};
FPU.prototype.op_DD_reg = function(a) {
var c = a & 7;
switch(a >> 3 & 7) {
case 0:
this.stack_empty |= 1 << (this.stack_ptr + c & 7);
break;
case 2:
this.st[this.stack_ptr + c & 7] = this.get_st0();
break;
case 3:
0 !== c && (this.st[this.stack_ptr + c & 7] = this.get_st0());
this.pop();
break;
case 4:
this.fucom(this.get_sti(c));
break;
case 5:
this.fucom(this.get_sti(c));
this.pop();
break;
default:
this.fpu_unimpl();
}
};
FPU.prototype.op_DD_mem = function(a, c) {
switch(a >> 3 & 7) {
case 0:
var d = this.load_m64(c);
this.push(d);
break;
case 1:
this.fpu_unimpl();
break;
case 2:
this.store_m64(c);
break;
case 3:
this.store_m64(c);
this.pop();
break;
case 4:
this.frstor(c);
break;
case 5:
this.fpu_unimpl();
break;
case 6:
this.fsave(c);
break;
case 7:
this.cpu.safe_write16(c, this.load_status_word());
}
};
FPU.prototype.op_DE_reg = function(a) {
var c = a >> 3 & 7;
a = a & 7;
var d = this.stack_ptr + a & 7, e = this.get_sti(a), f = this.get_st0();
switch(c) {
case 0:
this.st[d] = e + f;
break;
case 1:
this.st[d] = e * f;
break;
case 2:
this.fcom(e);
break;
case 3:
1 === a ? (this.fcom(this.st[d]), this.pop()) : this.fpu_unimpl();
break;
case 4:
this.st[d] = f - e;
break;
case 5:
this.st[d] = e - f;
break;
case 6:
this.st[d] = f / e;
break;
case 7:
this.st[d] = e / f;
}
this.pop();
};
FPU.prototype.op_DE_mem = function(a, c) {
var d = a >> 3 & 7, e = this.cpu.safe_read16(c) << 16 >> 16, f = this.get_st0();
switch(d) {
case 0:
this.st[this.stack_ptr] = f + e;
break;
case 1:
this.st[this.stack_ptr] = f * e;
break;
case 2:
this.fcom(e);
break;
case 3:
this.fcom(e);
this.pop();
break;
case 4:
this.st[this.stack_ptr] = f - e;
break;
case 5:
this.st[this.stack_ptr] = e - f;
break;
case 6:
this.st[this.stack_ptr] = f / e;
break;
case 7:
this.st[this.stack_ptr] = e / f;
}
};
FPU.prototype.op_DF_reg = function(a) {
var c = a & 7;
switch(a >> 3 & 7) {
case 4:
224 === a ? this.cpu.reg16[0] = this.load_status_word() : this.fpu_unimpl();
break;
case 5:
this.fucomi(this.get_sti(c));
this.pop();
break;
case 6:
this.fcomi(this.get_sti(c));
this.pop();
break;
default:
this.fpu_unimpl();
}
};
FPU.prototype.op_DF_mem = function(a, c) {
switch(a >> 3 & 7) {
case 0:
var d = this.cpu.safe_read16(c) << 16 >> 16;
this.push(d);
break;
case 1:
this.fpu_unimpl();
break;
case 2:
d = this.integer_round(this.get_st0());
32767 >= d && -32768 <= d ? this.cpu.safe_write16(c, d) : (this.invalid_arithmatic(), this.cpu.safe_write16(c, 32768));
break;
case 3:
d = this.integer_round(this.get_st0());
32767 >= d && -32768 <= d ? this.cpu.safe_write16(c, d) : (this.invalid_arithmatic(), this.cpu.safe_write16(c, 32768));
this.pop();
break;
case 4:
this.fpu_unimpl();
break;
case 5:
var e = this.cpu.safe_read32s(c) >>> 0, d = this.cpu.safe_read32s(c + 4) >>> 0, e = e + 4294967296 * d;
d >> 31 && (e -= 1.8446744073709552E19);
this.push(e);
break;
case 6:
this.fpu_unimpl();
break;
case 7:
this.cpu.writable_or_pagefault(c, 8);
var d = this.integer_round(this.get_st0()), f;
0x7fffffffffffffff > d && -9223372036854775808 <= d ? (e = d | 0, f = d / 4294967296 | 0, 0 === f && 0 > d && (f = -1)) : (e = 0, f = -2147483648, this.invalid_arithmatic());
this.cpu.safe_write32(c, e);
this.cpu.safe_write32(c + 4, f);
this.pop();
}
};
function IDEDevice(a, c, d, e) {
0 === e ? (this.ata_port = 496, this.IDEDevice$irq = 14, this.pci_id = 240) : (this.ata_port = 496, this.IDEDevice$irq = 14, this.pci_id = 248);
this.ata_port_high = this.ata_port | 516;
this.pic = a.devices.pic;
this.memory = a.memory;
this.buffer = c;
this.sector_size = d ? 2048 : 512;
this.is_atapi = d;
this.cylinder_count = this.IDEDevice$sectors_per_track = this.head_count = this.sector_count = 0;
this.buffer && (this.sector_count = this.buffer.byteLength / this.sector_size, this.sector_count !== (this.sector_count | 0) && (this.sector_count = Math.ceil(this.sector_count)), d ? (this.head_count = 1, this.IDEDevice$sectors_per_track = 0) : (this.head_count = 255, this.IDEDevice$sectors_per_track = 63), this.cylinder_count = this.sector_count / (this.head_count + 1) / (this.IDEDevice$sectors_per_track + 1), this.cylinder_count !== (this.cylinder_count | 0) && (this.cylinder_count = Math.ceil(this.cylinder_count)));
this.stats = {sectors_read:0, sectors_written:0, bytes_read:0, bytes_written:0, loading:!1};
this.pci_space = [134, 128, 32, 58, 5, 0, 160, 2, 0, 143, 1, 1, 0, 0, 0, 0, this.ata_port & 255 | 1, this.ata_port >> 8, 0, 0, this.ata_port_high & 255 | 1, this.ata_port_high >> 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 16, 212, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, this.IDEDevice$irq, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
this.pci_bars = [{size:8}, {size:4}, !1, !1, {size:16}];
a.devices.pci.register_device(this);
a.io.register_read(this.ata_port | 7, this, this.read_status);
a.io.register_read(this.ata_port_high | 2, this, this.read_status);
a.io.register_write(this.ata_port | 7, this, this.write_control);
a.io.register_write(this.ata_port_high | 2, this, this.write_control);
this.device_control = 2;
this.data_pointer = 0;
this.pio_data = new Uint8Array(0);
this.drive_head = this.head = this.cylinder_high = this.cylinder_low = this.lba_count = this.sector = this.bytecount = this.is_lba = 0;
this.status = 80;
this.sectors_per_drq = 1;
this.data_port_current = this.data_port_count = this.write_dest = 0;
this.data_port_buffer = new Uint8Array(0);
this.data_port_callback = 0;
this.next_status = -1;
this.dma_status = this.prdt_addr = 0;
a.io.register_read(this.ata_port | 0, this, this.read_data_port8, this.read_data_port16, this.read_data_port32);
a.io.register_read(this.ata_port | 1, this, this.read_lba_port);
a.io.register_read(this.ata_port | 2, this, this.read_bytecount_port);
a.io.register_read(this.ata_port | 3, this, this.read_sector_port);
a.io.register_read(this.ata_port | 4, this, function() {
return this.cylinder_low & 255;
});
a.io.register_read(this.ata_port | 5, this, function() {
return this.cylinder_high & 255;
});
a.io.register_read(this.ata_port | 6, this, function() {
return this.drive_head;
});
a.io.register_write(this.ata_port | 0, this, this.write_data_port8, this.write_data_port16, this.write_data_port32);
a.io.register_write(this.ata_port | 1, this, this.write_lba_port);
a.io.register_write(this.ata_port | 2, this, this.write_bytecount_port);
a.io.register_write(this.ata_port | 3, this, this.write_sector_port);
a.io.register_write(this.ata_port | 4, this, function(a) {
this.cylinder_low = (this.cylinder_low << 8 | a) & 65535;
});
a.io.register_write(this.ata_port | 5, this, function(a) {
this.cylinder_high = (this.cylinder_high << 8 | a) & 65535;
});
a.io.register_write(this.ata_port | 6, this, function(a) {
a & 16 || (this.drive_head = a, this.is_lba = a >> 6 & 1, this.head = a & 15);
});
a.io.register_write(this.ata_port | 7, this, this.ata_command);
a.io.register_read(49156, this, void 0, void 0, this.dma_read_addr);
a.io.register_write(49156, this, void 0, void 0, this.dma_set_addr);
a.io.register_read(49152, this, this.dma_read_command8, void 0, this.dma_read_command);
a.io.register_write(49152, this, this.dma_write_command8, void 0, this.dma_write_command);
a.io.register_read(49154, this, this.dma_read_status);
a.io.register_write(49154, this, this.dma_write_status);
this._state_skip = [this.memory, this.pic, this.stats, this.buffer];
}
IDEDevice.prototype.do_callback = function() {
switch(this.data_port_callback) {
case 1:
this.do_write();
break;
case 2:
this.atapi_handle();
}
};
IDEDevice.prototype.push_irq = function() {
0 === (this.device_control & 2) && (this.dma_status |= 4, this.pic.push_irq(this.IDEDevice$irq));
};
IDEDevice.prototype.ata_command = function(a) {
switch(a) {
case 0:
this.push_irq();
this.status = 80;
break;
case 8:
this.data_pointer = 0;
this.pio_data = new Uint8Array(0);
this.status = 80;
this.push_irq();
break;
case 16:
this.push_irq();
break;
case 39:
this.push_irq();
this.pio_data = new Uint8Array([0, 0, 0, 0, this.buffer.byteLength & 255, this.buffer.byteLength >> 8 & 255, this.buffer.byteLength >> 16 & 255, this.buffer.byteLength >> 24 & 255, 0, 0, 0, 0]);
this.status = 88;
break;
case 32:
;
case 41:
;
case 36:
;
case 196:
this.ata_read_sectors(a);
break;
case 48:
;
case 52:
;
case 57:
this.ata_write(a);
break;
case 144:
this.push_irq();
this.lba_count = 257;
this.status = 80;
break;
case 145:
this.push_irq();
break;
case 160:
this.is_atapi && (this.status = 88, this.allocate_in_buffer(12), this.data_port_callback = 2, this.bytecount = 1, this.push_irq());
break;
case 161:
this.is_atapi ? (this.create_identify_packet(), this.status = 88) : this.status = 80;
this.push_irq();
break;
case 198:
this.sectors_per_drq = this.bytecount;
this.push_irq();
break;
case 200:
this.ata_read_sectors_dma();
break;
case 202:
this.ata_write_dma();
break;
case 225:
this.push_irq();
break;
case 236:
if (this.is_atapi) {
break;
}
this.create_identify_packet();
this.status = 88;
this.push_irq();
break;
case 234:
this.push_irq();
break;
case 239:
this.push_irq();
break;
default:
this.lba_count = 4;
}
};
IDEDevice.prototype.atapi_handle = function() {
this.bytecount = 2;
switch(this.data_port_buffer[0]) {
case 0:
this.status = 64;
this.cylinder_low = 8;
this.cylinder_high = 0;
this.push_irq();
break;
case 3:
this.pio_data = new Uint8Array(Math.min(this.data_port_buffer[4], 15));
this.status = 88;
this.pio_data[0] = 240;
this.pio_data[7] = 8;
this.data_pointer = 0;
this.bytecount = 2;
this.cylinder_low = 8;
this.cylinder_high = 0;
this.push_irq();
break;
case 18:
this.pio_data = new Uint8Array(Math.min(this.data_port_buffer[4], 36));
this.status = 88;
this.pio_data.set([5, 128, 1, 49, 0, 0, 0, 0, 83, 79, 78, 89, 32, 32, 32, 32, 67, 68, 45, 82, 79, 77, 32, 67, 68, 85, 45, 49, 48, 48, 48, 32, 49, 46, 49, 97]);
this.data_pointer = 0;
this.bytecount = 2;
this.push_irq();
break;
case 30:
this.pio_data = new Uint8Array(0);
this.status = 80;
this.data_pointer = 0;
this.bytecount = 2;
this.push_irq();
break;
case 37:
this.pio_data = new Uint8Array([this.sector_count >> 24 & 255, this.sector_count >> 16 & 255, this.sector_count >> 8 & 255, this.sector_count & 255, 0, 0, this.sector_size >> 8 & 255, this.sector_size & 255]);
this.status = 88;
this.data_pointer = 0;
this.bytecount = 2;
this.cylinder_low = 8;
this.cylinder_high = 0;
this.push_irq();
break;
case 40:
this.lba_count & 1 ? this.atapi_read_dma(this.data_port_buffer) : this.atapi_read(this.data_port_buffer);
break;
case 67:
this.pio_data = new Uint8Array(2048);
this.pio_data[0] = 0;
this.pio_data[1] = 10;
this.pio_data[2] = 1;
this.pio_data[3] = 1;
this.status = 88;
this.data_pointer = 0;
this.bytecount = 2;
this.cylinder_high = 8;
this.cylinder_low = 0;
this.push_irq();
break;
case 70:
this.pio_data = new Uint8Array(this.data_port_buffer[8] | this.data_port_buffer[7] << 8);
this.status = 88;
this.data_pointer = 0;
this.bytecount = 2;
this.push_irq();
break;
case 74:
this.pio_data = new Uint8Array(this.data_port_buffer[8] | this.data_port_buffer[7] << 8);
this.status = 88;
this.data_pointer = 0;
this.bytecount = 2;
this.push_irq();
break;
case 81:
this.pio_data = new Uint8Array(0);
this.status = 80;
this.data_pointer = 0;
this.bytecount = 2;
this.push_irq();
break;
case 90:
this.push_irq();
this.status = 80;
break;
default:
this.status = 80;
}
};
IDEDevice.prototype.do_write = function() {
this.status = 80;
this.buffer.set(this.write_dest, this.data_port_buffer.subarray(0, this.data_port_count), function() {
this.push_irq();
}.bind(this));
this.stats.sectors_written += this.data_port_count / this.sector_size | 0;
this.stats.bytes_written += this.data_port_count;
};
IDEDevice.prototype.read_status = function() {
var a = this.status;
0 <= this.next_status && (this.status = this.next_status, this.next_status = -1);
return a;
};
IDEDevice.prototype.write_control = function(a) {
this.device_control = a;
a & 4 && (this.is_atapi ? (this.status = 81, this.sector = this.lba_count = this.bytecount = 1, this.cylinder_low = 20, this.cylinder_high = 235) : (this.status = 81, this.sector = this.lba_count = this.bytecount = 1, this.cylinder_low = 60, this.cylinder_high = 195));
};
IDEDevice.prototype.allocate_in_buffer = function(a) {
a > this.data_port_buffer.length && (this.data_port_buffer = new Uint8Array(a));
this.data_port_count = a;
this.data_port_current = 0;
};
IDEDevice.prototype.atapi_read = function(a) {
var c = (a[7] << 8 | a[8]) * this.sector_size, d = (this.cylinder_high & 255) << 8 | this.cylinder_low & 255;
a = (a[2] << 24 | a[3] << 16 | a[4] << 8 | a[5]) * this.sector_size;
d || (d = 32768);
d = Math.min(c, d);
this.cylinder_low = d & 255;
this.cylinder_high = d >> 8 & 255;
a >= this.buffer.byteLength ? (this.status = 255, this.push_irq()) : (c = Math.min(c, this.buffer.byteLength - a), this.status = 128, this.stats.loading = !0, this.buffer.get(a, c, function(a) {
this.pio_data = a;
this.status = 88;
this.data_pointer = 0;
this.push_irq();
this.stats.loading = !1;
this.stats.sectors_read += c / this.sector_size | 0;
this.stats.bytes_read += c;
}.bind(this)));
};
IDEDevice.prototype.atapi_read_dma = function(a) {
var c = (a[7] << 8 | a[8]) * this.sector_size;
a = (a[2] << 24 | a[3] << 16 | a[4] << 8 | a[5]) * this.sector_size;
a >= this.buffer.byteLength ? (this.status = 255, this.push_irq()) : (c = Math.min(c, this.buffer.byteLength - a), this.status = 128, this.stats.loading = !0, this.buffer.get(a, c, function(a) {
var e = this.prdt_addr, f = 0;
do {
var g = this.memory.read32s(e), k = this.memory.read16(e + 4), m = this.memory.read8(e + 7) & 128;
k || (k = 65536);
this.memory.write_blob(a.subarray(f, f + k), g);
f += k;
e += 8;
} while (!m);
this.status = 80;
this.dma_status &= -4;
this.dma_status |= 4;
this.push_irq();
this.stats.loading = !1;
this.stats.sectors_read += c / this.sector_size | 0;
this.stats.bytes_read += c;
}.bind(this)));
};
IDEDevice.prototype.read_data_port8 = function() {
return this.read_data();
};
IDEDevice.prototype.read_data_port16 = function() {
return this.read_data() | this.read_data() << 8;
};
IDEDevice.prototype.read_data_port32 = function() {
return this.read_data() | this.read_data() << 8 | this.read_data() << 16 | this.read_data() << 24;
};
IDEDevice.prototype.read_lba_port = function() {
return this.lba_count & 255;
};
IDEDevice.prototype.read_bytecount_port = function() {
return this.bytecount & 255;
};
IDEDevice.prototype.read_sector_port = function() {
return this.sector & 255;
};
IDEDevice.prototype.read_data = function() {
if (this.data_pointer < this.pio_data.length) {
0 !== (this.data_pointer + 1) % (512 * this.sectors_per_drq) && this.data_pointer + 1 !== this.pio_data.length || this.push_irq();
this.cylinder_low ? this.cylinder_low-- : this.cylinder_high && (this.cylinder_high--, this.cylinder_low = 255);
if (!this.cylinder_low && !this.cylinder_high) {
var a = this.pio_data.length - this.data_pointer - 1;
65536 <= a ? (this.cylinder_high = 240, this.cylinder_low = 0) : (this.cylinder_high = a >> 8, this.cylinder_low = a);
}
this.data_pointer + 1 >= this.pio_data.length && (this.status = 80);
return this.pio_data[this.data_pointer++];
}
this.data_pointer++;
return 0;
};
IDEDevice.prototype.write_data_port8 = function(a) {
this.data_port_current >= this.data_port_count || (this.data_port_buffer[this.data_port_current++] = a, 0 === this.data_port_current % (512 * this.sectors_per_drq) && this.push_irq(), this.data_port_current === this.data_port_count && this.do_callback());
};
IDEDevice.prototype.write_data_port16 = function(a) {
this.write_data_port8(a & 255);
this.write_data_port8(a >> 8 & 255);
};
IDEDevice.prototype.write_data_port32 = function(a) {
this.write_data_port8(a & 255);
this.write_data_port8(a >> 8 & 255);
this.write_data_port8(a >> 16 & 255);
this.write_data_port8(a >> 24 & 255);
};
IDEDevice.prototype.write_lba_port = function(a) {
this.lba_count = (this.lba_count << 8 | a) & 65535;
};
IDEDevice.prototype.write_bytecount_port = function(a) {
this.bytecount = (this.bytecount << 8 | a) & 65535;
};
IDEDevice.prototype.write_sector_port = function(a) {
this.sector = (this.sector << 8 | a) & 65535;
};
IDEDevice.prototype.ata_read_sectors = function(a) {
if (32 === a || 196 === a) {
a = this.bytecount & 255;
var c = this.is_lba ? this.get_lba28() : this.get_chs();
0 === a && (a = 256);
} else {
if (36 === a || 41 === a) {
a = this.bytecount, c = this.get_lba48(), 0 === a && (a = 65536);
} else {
return;
}
}
var d = a * this.sector_size, c = c * this.sector_size;
this.cylinder_low += a;
c + d > this.buffer.byteLength ? (this.status = 255, this.push_irq()) : (this.status = 128, this.stats.loading = !0, this.buffer.get(c, d, function(a) {
this.pio_data = a;
this.status = 88;
this.data_pointer = 0;
this.push_irq();
this.stats.loading = !1;
this.stats.sectors_read += d / this.sector_size | 0;
this.stats.bytes_read += d;
}.bind(this)));
};
IDEDevice.prototype.ata_read_sectors_dma = function() {
var a = this.bytecount & 255, c = a * this.sector_size, d = this.get_lba28() * this.sector_size;
this.cylinder_low += a;
d + c > this.buffer.byteLength ? (this.status = 255, this.push_irq()) : (this.status = 128, this.dma_status |= 1, this.stats.loading = !0, this.buffer.get(d, c, function(a) {
var d = this.prdt_addr, g = 0;
do {
var k = this.memory.read32s(d), m = this.memory.read16(d + 4), l = this.memory.read8(d + 7) & 128;
m || (m = 65536);
this.memory.write_blob(a.subarray(g, g + m), k);
g += m;
d += 8;
} while (!l);
this.status = 80;
this.dma_status &= -4;
this.dma_status |= 4;
this.push_irq();
this.stats.loading = !1;
this.stats.sectors_read += c / this.sector_size | 0;
this.stats.bytes_read += c;
}.bind(this)));
};
IDEDevice.prototype.ata_write = function(a) {
if (48 === a) {
a = this.bytecount & 255;
var c = this.is_lba ? this.get_lba28() : this.get_chs();
0 === a && (a = 256);
} else {
if (52 === a || 57 === a) {
a = this.bytecount, c = this.get_lba48(), 0 === a && (a = 65536);
} else {
return;
}
}
var d = a * this.sector_size, c = c * this.sector_size;
this.cylinder_low += a;
c + d > this.buffer.byteLength ? this.status = 255 : (this.status = 80, this.next_status = 88, this.allocate_in_buffer(d), this.write_dest = c, this.data_port_callback = 1);
this.push_irq();
};
IDEDevice.prototype.ata_write_dma = function() {
var a = this.bytecount & 255, c = a * this.sector_size, d = this.get_lba28() * this.sector_size;
this.cylinder_low += a;
if (d + c > this.buffer.byteLength) {
this.status = 255, this.push_irq();
} else {
this.status = 128;
this.dma_status |= 1;
var a = this.prdt_addr, e = 0, f = 0, g = 0;
do {
var k = this.memory.read32s(a), m = this.memory.read16(a + 4), l = this.memory.read8(a + 7) & 128;
m || (m = 65536);
this.buffer.set(d + g, this.memory.mem8.subarray(k, k + m), function() {
f++;
f === e && (this.status = 80, this.push_irq(), this.dma_status &= -4, this.dma_status |= 4);
}.bind(this));
g += m;
a += 8;
e++;
} while (!l);
f === e && (this.status = 80, this.push_irq(), this.dma_status &= -4, this.dma_status |= 4);
this.stats.sectors_written += c / this.sector_size | 0;
this.stats.bytes_written += c;
}
};
IDEDevice.prototype.get_chs = function() {
return((this.cylinder_low & 255 | this.cylinder_high << 8 & 65280) * this.head_count + this.head) * this.IDEDevice$sectors_per_track + (this.sector & 255) - 1;
};
IDEDevice.prototype.get_lba28 = function() {
return this.sector & 255 | this.cylinder_low << 8 & 65280 | this.cylinder_high << 16 & 16711680;
};
IDEDevice.prototype.get_lba48 = function() {
return(this.sector & 255 | this.cylinder_low << 8 & 65280 | this.cylinder_high << 16 & 16711680 | this.sector >> 8 << 24 & 4278190080) >>> 0;
};
IDEDevice.prototype.create_identify_packet = function() {
this.data_pointer = 0;
this.drive_head & 16 ? this.pio_data = new Uint8Array(0) : (this.pio_data = new Uint8Array([64, this.is_atapi ? 133 : 0, this.cylinder_count, this.cylinder_count >> 8, 0, 0, this.head_count, this.head_count >> 8, 0, 0, 0, 0, this.IDEDevice$sectors_per_track, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 255, 0, 1, 0, 0, 3, 0, 0, 0, 2, 0, 2, 7, 0, this.cylinder_count, this.cylinder_count >> 8, this.head_count, this.head_count >> 8, this.IDEDevice$sectors_per_track, 0, this.sector_count & 255, this.sector_count >> 8 & 255, this.sector_count >> 16 & 255, this.sector_count >> 24 & 255, 0, 0, this.sector_count & 255, this.sector_count >> 8 & 255, this.sector_count >> 16 & 255, this.sector_count >> 24 & 255, 0, 0, 0, 4, 0, 0, 30, 0, 30, 0, 30, 0, 30, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 116, 0, 64, 0, 64, 0, 116, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, this.sector_count & 255, this.sector_count >> 8 & 255, this.sector_count >> 16 & 255, this.sector_count >> 24 & 255]), 16383 < this.cylinder_count && (this.pio_data[2] = this.pio_data[108] = 255, this.pio_data[3] = this.pio_data[109] = 63));
};
IDEDevice.prototype.dma_read_addr = function() {
return this.prdt_addr;
};
IDEDevice.prototype.dma_set_addr = function(a) {
this.prdt_addr = a;
};
IDEDevice.prototype.dma_read_status = function() {
return this.dma_status;
};
IDEDevice.prototype.dma_write_status = function(a) {
this.dma_status &= ~a;
};
IDEDevice.prototype.dma_read_command = function() {
return 1 | this.dma_status << 16;
};
IDEDevice.prototype.dma_read_command8 = function() {
return 1;
};
IDEDevice.prototype.dma_write_command = function(a) {
a & 1 && this.push_irq();
this.dma_write_status(a >> 16 & 255);
};
IDEDevice.prototype.dma_write_command8 = function(a) {
a & 1 && this.push_irq();
};
function PCI(a) {
function c(a) {
var c = d[2] << 8 | d[1], e = d[0] & 252, f = m[c], c = l[c];
f && 3 === a && 16 <= e && 40 > e && (a = e - 16 >> 2, c = c.pci_bars, a < c.length && c[a] || (f[e >> 2] = 0));
}
a = a.io;
var d = new Uint8Array(4), e = new Uint8Array(4), f = new Uint8Array(4);
new Int32Array(d.buffer);
var g = new Int32Array(e.buffer), k = new Int32Array(f.buffer), m = Array(65536), l = Array(65536);
a.register_write_consecutive(3324, this, function() {
c(0);
}, function() {
c(1);
}, function() {
c(2);
}, function() {
c(3);
});
a.register_read_consecutive(3324, this, function() {
return e[0];
}, function() {
return e[1];
}, function() {
return e[2];
}, function() {
return e[3];
});
a.register_read_consecutive(3320, this, function() {
return f[0];
}, function() {
return f[1];
}, function() {
return f[2];
}, function() {
return f[3];
});
a.register_write_consecutive(3320, this, function(a) {
d[0] = a;
}, function(a) {
d[1] = a;
}, function(a) {
d[2] = a;
}, function(a) {
d[3] = a;
a = d[0] & 252;
var c = m[d[2] << 8 | d[1]];
void 0 !== c ? (k[0] = -2147483648, g[0] = a < c.byteLength ? c[a >> 2] : -1) : (g[0] = -1, k[0] = 0);
});
this.register_device = function(a) {
var c = a.pci_id;
m[c] = new Int32Array((new Uint8Array(a.pci_space)).buffer);
l[c] = a;
};
this.register_device({pci_id:0, pci_space:[134, 128, 55, 18, 0, 0, 0, 0, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], pci_bars:[]});
this.register_device({pci_id:8, pci_space:[134, 128, 0, 112, 7, 0, 0, 2, 0, 0, 1, 6, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], pci_bars:[]});
}
;function FloppyController(a, c, d) {
this.io = a.io;
this.pic = a.devices.pic;
this.dma = a.devices.dma;
this.bytes_expecting = 0;
this.receiving_command = new Uint8Array(10);
this.receiving_index = 0;
this.next_command = null;
this.response_data = new Uint8Array(10);
this.floppy_size = this.response_length = this.response_index = 0;
this.fda_image = c;
this.fdb_image = d;
this.last_cylinder = 0;
this._state_skip = [this.io, this.pic, this.dma];
this.fdb_image && this._state_skip.push(this.fdb_image);
if (c) {
this._state_skip.push(this.fda_image);
this.floppy_size = c.byteLength;
if ((a = {160:{type:1, tracks:40, sectors:8, heads:1}, 180:{type:1, tracks:40, sectors:9, heads:1}, 200:{type:1, tracks:40, sectors:10, heads:1}, 320:{type:1, tracks:40, sectors:8, heads:2}, 360:{type:1, tracks:40, sectors:9, heads:2}, 400:{type:1, tracks:40, sectors:10, heads:2}, 720:{type:3, tracks:80, sectors:9, heads:2}, 1200:{type:2, tracks:80, sectors:15, heads:2}, 1440:{type:4, tracks:80, sectors:18, heads:2}, 1722:{type:5, tracks:82, sectors:21, heads:2}, 2880:{type:5, tracks:80, sectors:36,
heads:2}}[this.floppy_size >> 10]) && 0 === (this.floppy_size & 1023)) {
this.type = a.type, c = a.sectors, a = a.heads;
} else {
throw "Unknown floppy size: " + h(c.byteLength);
}
this.FloppyController$sectors_per_track = c;
this.number_of_heads = a;
this.io.register_read(1008, this, this.port3F0_read);
this.io.register_read(1010, this, this.port3F2_read);
this.io.register_read(1012, this, this.port3F4_read);
this.io.register_read(1013, this, this.port3F5_read);
this.io.register_read(1015, this, this.port3F7_read);
this.io.register_write(1010, this, this.port3F2_write);
this.io.register_write(1013, this, this.port3F5_write);
} else {
this.type = 4, this.io.register_read(1012, this, function() {
return 255;
});
}
}
FloppyController.prototype.port3F0_read = function() {
return 0;
};
FloppyController.prototype.port3F4_read = function() {
var a = 128;
this.response_index < this.response_length && (a |= 80);
0 === (dor & 8) && (a |= 32);
return a;
};
FloppyController.prototype.port3F7_read = function() {
return 0;
};
FloppyController.prototype.port3F5_read = function() {
return this.response_index < this.response_length ? this.response_data[this.response_index++] : 255;
};
FloppyController.prototype.port3F5_write = function(a) {
if (0 < this.bytes_expecting) {
this.receiving_command[this.receiving_index++] = a, this.bytes_expecting--, 0 === this.bytes_expecting && this.next_command.call(this, this.receiving_command);
} else {
switch(a) {
case 3:
this.next_command = this.fix_drive_data;
this.bytes_expecting = 2;
break;
case 4:
this.next_command = this.check_drive_status;
this.bytes_expecting = 1;
break;
case 5:
;
case 197:
this.next_command = function(a) {
this.do_sector(!0, a);
};
this.bytes_expecting = 8;
break;
case 230:
this.next_command = function(a) {
this.do_sector(!1, a);
};
this.bytes_expecting = 8;
break;
case 7:
this.next_command = this.calibrate;
this.bytes_expecting = 1;
break;
case 8:
this.check_interrupt_status();
break;
case 74:
this.next_command = this.read_sector_id;
this.bytes_expecting = 1;
break;
case 15:
this.bytes_expecting = 2;
this.next_command = this.FloppyController_prototype$seek;
break;
case 14:
this.response_data[0] = 128, this.response_index = 0, this.response_length = 1, this.bytes_expecting = 0;
}
this.receiving_index = 0;
}
};
var dor = 0;
FloppyController.prototype.port3F2_read = function() {
return dor;
};
FloppyController.prototype.port3F2_write = function(a) {
4 === (a & 4) && 0 === (dor & 4) && this.pic.push_irq(6);
dor = a;
};
FloppyController.prototype.check_drive_status = function() {
this.response_index = 0;
this.response_length = 1;
this.response_data[0] = 32;
};
FloppyController.prototype.FloppyController_prototype$seek = function(a) {
this.last_cylinder = a[1];
dor & 8 && this.pic.push_irq(6);
};
FloppyController.prototype.calibrate = function() {
dor & 8 && this.pic.push_irq(6);
};
FloppyController.prototype.check_interrupt_status = function() {
this.response_index = 0;
this.response_length = 2;
this.response_data[0] = 32;
this.response_data[1] = this.last_cylinder;
};
FloppyController.prototype.do_sector = function(a, c) {
var d = c[2], e = c[1], f = c[3], g = 128 << c[4], k = c[5] - c[3] + 1, m = ((d + this.number_of_heads * e) * this.FloppyController$sectors_per_track + f - 1) * g;
a ? this.dma.do_write(this.fda_image, m, k * g, 2, this.done.bind(this, c, e, d, f)) : this.dma.do_read(this.fda_image, m, this.done.bind(this, c, e, d, f));
};
FloppyController.prototype.done = function(a, c, d, e, f) {
f || (e++, e > this.FloppyController$sectors_per_track && (e = 1, d++, d >= this.number_of_heads && (d = 0, a++)), this.last_cylinder = a, this.response_index = 0, this.response_length = 7, this.response_data[0] = d << 2 | 32, this.response_data[1] = 0, this.response_data[2] = 0, this.response_data[3] = a, this.response_data[4] = d, this.response_data[5] = e, this.response_data[6] = c[4], dor & 8 && this.pic.push_irq(6));
};
FloppyController.prototype.fix_drive_data = function() {
};
FloppyController.prototype.read_sector_id = function() {
this.response_index = 0;
this.response_length = 7;
this.response_data[0] = 0;
this.response_data[1] = 0;
this.response_data[2] = 0;
this.response_data[3] = 0;
this.response_data[4] = 0;
this.response_data[5] = 0;
this.response_data[6] = 0;
dor & 8 && this.pic.push_irq(6);
};
function Memory(a) {
this.size = a;
this.memory_map_registered = new Uint8Array(262144);
this.memory_map_read8 = [];
this.memory_map_write8 = [];
this.memory_map_read32 = [];
this.memory_map_write32 = [];
this.buffer = new ArrayBuffer(a);
this._state_restore();
}
Memory.prototype._state_restore = function() {
this.mem8 = new Uint8Array(this.buffer);
this.mem16 = new Uint16Array(this.buffer);
this.mem32s = new Int32Array(this.buffer);
this._state_skip = [this.mem8, this.mem16, this.mem32s, this.memory_map_registered, this.memory_map_read8, this.memory_map_read32, this.memory_map_write8, this.memory_map_write32];
};
Memory.prototype.mmap_read8 = function(a) {
return this.memory_map_read8[a >>> 14](a);
};
Memory.prototype.mmap_write8 = function(a, c) {
this.memory_map_write8[a >>> 14](a, c);
};
Memory.prototype.mmap_read16 = function(a) {
var c = this.memory_map_read8[a >>> 14];
return c(a) | c(a + 1) << 8;
};
Memory.prototype.mmap_write16 = function(a, c) {
var d = this.memory_map_write8[a >>> 14];
d(a, c & 255);
d(a + 1, c >> 8 & 255);
};
Memory.prototype.mmap_read32 = function(a) {
return this.memory_map_read32[a >>> 14](a);
};
Memory.prototype.mmap_write32 = function(a, c) {
this.memory_map_write32[a >>> 14](a, c);
};
Memory.prototype.read8 = function(a) {
return this.memory_map_registered[a >>> 14] ? this.mmap_read8(a) : this.mem8[a];
};
Memory.prototype.read16 = function(a) {
return this.memory_map_registered[a >>> 14] ? this.mmap_read16(a) : this.mem8[a] | this.mem8[a + 1] << 8;
};
Memory.prototype.read_aligned16 = function(a) {
return this.memory_map_registered[a >>> 13] ? this.mmap_read16(a << 1) : this.mem16[a];
};
Memory.prototype.read32s = function(a) {
return this.memory_map_registered[a >>> 14] ? this.mmap_read32(a) : this.mem8[a] | this.mem8[a + 1] << 8 | this.mem8[a + 2] << 16 | this.mem8[a + 3] << 24;
};
Memory.prototype.read_aligned32 = function(a) {
return this.memory_map_registered[a >>> 12] ? this.mmap_read32(a << 2) : this.mem32s[a];
};
Memory.prototype.write8 = function(a, c) {
this.memory_map_registered[a >>> 14] ? this.mmap_write8(a, c) : this.mem8[a] = c;
};
Memory.prototype.write16 = function(a, c) {
this.memory_map_registered[a >>> 14] ? this.mmap_write16(a, c) : (this.mem8[a] = c, this.mem8[a + 1] = c >> 8);
};
Memory.prototype.write_aligned16 = function(a, c) {
this.memory_map_registered[a >>> 13] ? this.mmap_write16(a << 1, c) : this.mem16[a] = c;
};
Memory.prototype.write32 = function(a, c) {
this.memory_map_registered[a >>> 14] ? this.mmap_write32(a, c) : (this.mem8[a] = c, this.mem8[a + 1] = c >> 8, this.mem8[a + 2] = c >> 16, this.mem8[a + 3] = c >> 24);
};
Memory.prototype.write_aligned32 = function(a, c) {
this.memory_map_registered[a >>> 12] ? this.mmap_write32(a << 2, c) : this.mem32s[a] = c;
};
Memory.prototype.write_blob = function(a, c) {
this.mem8.set(a, c);
};
function DMA(a) {
this.memory = a.memory;
this.channels = [{address:0, count:0}, {address:0, count:0}, {address:0, count:0}, {address:0, count:0}];
this.lsb_msb_flipflop = 0;
a = a.io;
a.register_write(4, this, this.port_write.bind(this, 4));
a.register_write(5, this, this.port_write.bind(this, 5));
a.register_write(10, this, this.portA_write);
a.register_write(11, this, this.portB_write);
a.register_write(12, this, this.portC_write);
a.register_write(129, this, this.port81_write);
this._state_skip = [this.memory];
}
DMA.prototype.port_write = function(a, c) {
if (8 > a) {
var d = a >> 1;
a & 1 ? this.channels[d].count = this.flipflop_get(this.channels[d].count, c) : this.channels[d].address = this.flipflop_get(this.channels[d].address, c);
}
};
DMA.prototype.portA_write = function() {
};
DMA.prototype.portB_write = function() {
};
DMA.prototype.portC_write = function() {
this.lsb_msb_flipflop = 0;
};
DMA.prototype.port81_write = function(a) {
this.channels[2].address = this.channels[2].address & 65535 | a << 16;
};
DMA.prototype.do_read = function(a, c, d) {
var e = this.channels[2].count + 1, f = this.channels[2].address;
if (c + e > a.byteLength) {
d(!0);
} else {
var g = this.memory;
this.channels[2].address += e;
a.get(c, e, function(a) {
g.write_blob(a, f);
d(!1);
});
}
};
DMA.prototype.do_write = function(a, c, d, e, f) {
d = this.channels[e].count;
var g = this.channels[e].address;
c + d > a.byteLength ? f(!0) : (this.channels[e].address += d, a.set(c, new Uint8Array(this.memory.buffer, g, d + 1), function() {
f(!1);
}));
};
DMA.prototype.flipflop_get = function(a, c) {
return(this.lsb_msb_flipflop ^= 1) ? a & -256 | c : a & -65281 | c << 8;
};
function PIT(a) {
this.pic = a.devices.pic;
this.PIT$next_tick = Date.now();
this.counter_next_low = new Uint8Array(4);
this.counter_enabled = new Uint8Array(4);
this.counter_mode = new Uint8Array(4);
this.counter_read_mode = new Uint8Array(4);
this.counter_latch = new Uint8Array(4);
this.counter_latch_value = new Uint16Array(3);
this.counter_reload = new Uint16Array(3);
this.counter_current = new Uint16Array(3);
this.counter2_out = 0;
a.io.register_read(97, this, function() {
return(66.66666666666667 * v86.microtick() & 1) << 4 | this.counter2_out << 5;
});
a.io.register_read(64, this, function() {
return this.counter_read(0);
});
a.io.register_read(65, this, function() {
return this.counter_read(1);
});
a.io.register_read(66, this, function() {
return this.counter_read(2);
});
a.io.register_write(64, this, function(a) {
this.counter_write(0, a);
});
a.io.register_write(65, this, function(a) {
this.counter_write(1, a);
});
a.io.register_write(66, this, function(a) {
this.counter_write(2, a);
});
a.io.register_write(67, this, this.port43_write);
this._state_skip = [this.pic];
}
PIT.prototype.timer = function(a, c) {
var d, e, f = 1193.1816666 * (a - this.PIT$next_tick) >>> 0;
if (f) {
this.PIT$next_tick += f / 1193.1816666;
if (!c && this.counter_enabled[0] && (d = this.counter_current[0] -= f, 0 >= d)) {
if (this.pic.push_irq(0), e = this.counter_mode[0], 0 === e) {
this.counter_enabled[0] = 0, this.counter_current[0] = 0;
} else {
if (3 === e || 2 === e) {
this.counter_current[0] = this.counter_reload[0] + d % this.counter_reload[0];
}
}
}
this.counter_enabled[2] && (d = this.counter_current[2] -= f, 0 >= d && (e = this.counter_mode[2], 0 === e ? (this.counter2_out = 1, this.counter_enabled[2] = 0, this.counter_current[2] = 0) : 2 === e ? (this.counter2_out = 1, this.counter_current[2] = this.counter_reload[2] + d % this.counter_reload[2]) : 3 === e && (this.counter2_out ^= 1, this.counter_current[2] = this.counter_reload[2] + d % this.counter_reload[2])));
}
};
PIT.prototype.counter_read = function(a) {
var c = this.counter_latch[a];
if (c) {
return this.counter_latch[a]--, 2 === c ? this.counter_latch_value[a] & 255 : this.counter_latch_value[a] >> 8;
}
c = this.counter_next_low[a];
3 === this.counter_mode[a] && (this.counter_next_low[a] ^= 1);
return c ? this.counter_current[a] & 255 : this.counter_current[a] >> 8;
};
PIT.prototype.counter_write = function(a, c) {
this.counter_reload[a] = this.counter_next_low[a] ? this.counter_reload[a] & -256 | c : this.counter_reload[a] & 255 | c << 8;
3 === this.counter_read_mode[a] && this.counter_next_low[a] || (this.counter_reload[a] || (this.counter_reload[a] = 65535), this.counter_current[a] = this.counter_reload[a], this.counter_enabled[a] = !0);
3 === this.counter_read_mode[a] && (this.counter_next_low[a] ^= 1);
};
PIT.prototype.port43_write = function(a) {
var c = a >> 1 & 7, d = a >> 6 & 3;
a = a >> 4 & 3;
3 !== d && (0 === a ? (this.counter_latch[d] = 2, this.counter_latch_value[d] = this.counter_current[d]) : (6 <= c && (c &= -5), this.counter_next_low[d] = 1 === a ? 0 : 1, this.counter_mode[d] = c, this.counter_read_mode[d] = a, 2 === d && (this.counter2_out = 0 === c ? 0 : 1)));
};
function VGAScreen(a, c, d) {
this.bus = c;
this.vga_memory_size = d;
this.cursor_address = 0;
this.cursor_scanline_start = 14;
this.cursor_scanline_end = 15;
this.max_cols = 80;
this.max_rows = 25;
this.start_address = this.screen_height = this.screen_width = 0;
this.graphical_mode_is_linear = !0;
this.do_complete_redraw = this.graphical_mode = !1;
this.vga256_palette = new Int32Array(256);
this.svga_height = this.svga_width = this.latch3 = this.latch2 = this.latch1 = this.latch0 = 0;
this.text_mode_width = 80;
this.svga_enabled = !1;
this.svga_offset = this.svga_bpp = 0;
this.pci_space = [222, 16, 32, 10, 7, 0, 0, 0, 162, 0, 0, 3, 0, 0, 128, 0, 8, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 1, 0, 0];
this.pci_id = 144;
this.pci_bars = [{size:this.vga_memory_size}];
a.devices.pci.register_device(this);
this.stats = {is_graphical:!1, res_x:0, res_y:0, bpp:0};
this.dac_color_index = this.index_crtc = 0;
this.attribute_controller_index = -1;
this.dac_map = new Uint8Array(16);
this.sequencer_index = -1;
this.plane_write_bm = 15;
this.sequencer_memory_mode = 0;
this.graphics_index = -1;
this.planar_rotate_reg = this.planar_mode = this.plane_read = 0;
this.planar_bitmap = 255;
this.max_scan_line = 0;
this.port_3DA_value = this.miscellaneous_output_register = 255;
a = a.io;
a.register_write(960, this, this.port3C0_write);
a.register_read(960, this, this.port3C0_read);
a.register_read(961, this, this.port3C1_read);
a.register_write(962, this, this.port3C2_write);
a.register_write_consecutive(964, this, this.port3C4_write, this.port3C5_write);
a.register_read(964, this, this.port3C4_read);
a.register_read(965, this, this.port3C5_read);
a.register_write_consecutive(974, this, this.port3CE_write, this.port3CF_write);
a.register_read(974, this, this.port3CE_read);
a.register_read(975, this, this.port3CF_read);
a.register_write(967, this, this.port3C7_write);
a.register_write(968, this, this.port3C8_write);
a.register_write(969, this, this.port3C9_write);
a.register_read(972, this, this.port3CC_read);
a.register_write_consecutive(980, this, this.port3D4_write, this.port3D5_write);
a.register_read(981, this, this.port3D5_read);
a.register_read(986, this, this.port3DA_read);
this.dispi_index = -1;
this.dispi_enable_value = 0;
a.register_write(462, this, void 0, this.port1CE_write);
a.register_write(463, this, void 0, this.port1CF_write);
a.register_read(463, this, void 0, this.port1CF_read);
void 0 === this.vga_memory_size || 262144 > this.vga_memory_size ? this.vga_memory_size = 262144 : this.vga_memory_size & 65535 && (this.vga_memory_size |= 65535, this.vga_memory_size++);
this.svga_memory = new Uint8Array(this.vga_memory_size);
this._state_restore();
var e = this;
a.mmap_register(655360, 131072, function(a) {
return e.vga_memory_read(a);
}, function(a, c) {
e.vga_memory_write(a, c);
});
a.mmap_register(3758096384, this.vga_memory_size, function(a) {
return e.svga_memory_read8(a);
}, function(a, c) {
e.svga_memory_write8(a, c);
}, function(a) {
return e.svga_memory_read32(a);
}, function(a, c) {
e.svga_memory_write32(a, c);
});
}
VGAScreen.prototype._state_restore = function() {
this.svga_memory16 = new Uint16Array(this.svga_memory.buffer);
this.svga_memory32 = new Int32Array(this.svga_memory.buffer);
this.vga_memory = new Uint8Array(this.svga_memory.buffer, 0, 262144);
this.plane0 = new Uint8Array(this.svga_memory.buffer, 0, 65536);
this.plane1 = new Uint8Array(this.svga_memory.buffer, 65536, 65536);
this.plane2 = new Uint8Array(this.svga_memory.buffer, 131072, 65536);
this.plane3 = new Uint8Array(this.svga_memory.buffer, 196608, 65536);
this._state_skip = [this.bus, this.svga_memory16, this.svga_memory32, this.vga_memory, this.plane0, this.plane1, this.plane2, this.plane3];
this.bus.send("screen-set-mode", this.graphical_mode || this.svga_enabled);
this.graphical_mode || this.svga_enabled ? this.set_size_graphical(this.svga_width, this.svga_height) : (this.set_size_text(this.max_cols, this.max_rows), this.update_cursor_scanline(), this.update_cursor());
this.do_complete_redraw = !0;
};
VGAScreen.prototype.vga_memory_read = function(a) {
a -= 655360;
if (!this.graphical_mode || this.graphical_mode_is_linear) {
return this.vga_memory[a];
}
a &= 65535;
this.latch0 = this.plane0[a];
this.latch1 = this.plane1[a];
this.latch2 = this.plane2[a];
this.latch3 = this.plane3[a];
return this.vga_memory[this.plane_read << 16 | a];
};
VGAScreen.prototype.vga_memory_write = function(a, c) {
a -= 655360;
this.graphical_mode ? this.graphical_mode_is_linear ? this.vga_memory_write_graphical_linear(a, c) : this.vga_memory_write_graphical_planar(a, c) : this.vga_memory_write_text_mode(a, c);
};
VGAScreen.prototype.vga_memory_write_graphical_linear = function(a, c) {
var d = a << 2, e = this.vga256_palette[c];
this.bus.send("screen-put-pixel-linear", [d | 2, e >> 16 & 255]);
this.bus.send("screen-put-pixel-linear", [d | 1, e >> 8 & 255]);
this.bus.send("screen-put-pixel-linear", [d, e & 255]);
this.vga_memory[a] = c;
};
VGAScreen.prototype.vga_memory_write_graphical_planar = function(a, c) {
if (!(65535 < a)) {
var d, e, f, g, k = this.planar_mode & 3;
0 === k ? d = e = f = g = c : 2 === k && (this.plane_write_bm & 1 && (d = this.latch0 & ~this.planar_bitmap | (c & 1 ? 255 : 0) & this.planar_bitmap), this.plane_write_bm & 2 && (e = this.latch1 & ~this.planar_bitmap | (c & 2 ? 255 : 0) & this.planar_bitmap), this.plane_write_bm & 4 && (f = this.latch2 & ~this.planar_bitmap | (c & 4 ? 255 : 0) & this.planar_bitmap), this.plane_write_bm & 8 && (g = this.latch3 & ~this.planar_bitmap | (c & 8 ? 255 : 0) & this.planar_bitmap));
if (0 === k || 2 === k) {
switch(this.planar_rotate_reg & 24) {
case 8:
d &= this.latch0;
e &= this.latch1;
f &= this.latch2;
g &= this.latch3;
break;
case 16:
d |= this.latch0;
e |= this.latch1;
f |= this.latch2;
g |= this.latch3;
break;
case 24:
d ^= this.latch0, e ^= this.latch1, f ^= this.latch2, g ^= this.latch3;
}
this.plane_write_bm & 1 && (d = this.latch0 & ~this.planar_bitmap | d & this.planar_bitmap);
this.plane_write_bm & 2 && (e = this.latch1 & ~this.planar_bitmap | e & this.planar_bitmap);
this.plane_write_bm & 4 && (f = this.latch2 & ~this.planar_bitmap | f & this.planar_bitmap);
this.plane_write_bm & 8 && (g = this.latch3 & ~this.planar_bitmap | g & this.planar_bitmap);
} else {
1 === k && (d = this.latch0, e = this.latch1, f = this.latch2, g = this.latch3);
}
this.plane_write_bm & 1 ? this.plane0[a] = d : d = this.plane0[a];
this.plane_write_bm & 2 ? this.plane1[a] = e : e = this.plane1[a];
this.plane_write_bm & 4 ? this.plane2[a] = f : f = this.plane2[a];
this.plane_write_bm & 8 ? this.plane3[a] = g : g = this.plane3[a];
if (!(a >= this.screen_width * this.screen_height << 3)) {
e <<= 1;
f <<= 2;
g <<= 3;
for (var k = (a << 3 | 7) << 2, m = 0;8 > m;m++) {
var l = this.vga256_palette[this.dac_map[d >> m & 1 | e >> m & 2 | f >> m & 4 | g >> m & 8]];
this.bus.send("screen-put-pixel-linear", [k | 2, l >> 16]);
this.bus.send("screen-put-pixel-linear", [k | 1, l >> 8 & 255]);
this.bus.send("screen-put-pixel-linear", [k, l & 255]);
k -= 4;
}
}
}
};
VGAScreen.prototype.text_mode_redraw = function() {
for (var a = 98304 | this.start_address << 1, c, d, e = 0;e < this.max_rows;e++) {
for (var f = 0;f < this.max_cols;f++) {
c = this.vga_memory[a], d = this.vga_memory[a | 1], this.bus.send("screen-put-char", [e, f, c, this.vga256_palette[d >> 4 & 15], this.vga256_palette[d & 15]]), a += 2;
}
}
};
VGAScreen.prototype.graphical_planar_redraw = function() {
for (var a = 0, c = 0;c < this.screen_height;c++) {
for (var d = 0;d < this.screen_width;d += 8) {
for (var e = 0;8 > e;e++) {
this.bus.send("screen-put-pixel-linear32", [c * this.screen_width + d << 2, this.vga256_palette[this.dac_map[this.plane0[a] >> e & 1 | this.plane1[a] >> e << 1 & 2 | this.plane2[a] >> e << 2 & 4 | this.plane3[a] >> e << 3 & 8]]]);
}
a++;
}
}
};
VGAScreen.prototype.vga_memory_write_text_mode = function(a, c) {
if (!(98304 > a)) {
var d = (a - 98304 >> 1) - this.start_address, e = d / this.max_cols | 0, d = d % this.max_cols, f, g;
a & 1 ? (g = c, f = this.vga_memory[a & -2]) : (f = c, g = this.vga_memory[a | 1]);
this.bus.send("screen-put-char", [e, d, f, this.vga256_palette[g >> 4 & 15], this.vga256_palette[g & 15]]);
this.vga_memory[a] = c;
}
};
VGAScreen.prototype.update_cursor = function() {
var a = (this.cursor_address - this.start_address) / this.max_cols | 0, c = (this.cursor_address - this.start_address) % this.max_cols, a = Math.min(this.max_rows - 1, a);
this.bus.send("screen-update-cursor", [a, c]);
};
VGAScreen.prototype.svga_memory_read8 = function(a) {
return this.svga_memory[a & 268435455];
};
VGAScreen.prototype.svga_memory_read32 = function(a) {
a &= 268435455;
return a & 3 ? this.svga_memory[a] | this.svga_memory[a + 1] << 8 | this.svga_memory[a + 2] << 16 | this.svga_memory[a + 3] << 24 : this.svga_memory32[a >> 2];
};
VGAScreen.prototype.svga_memory_write8 = function(a, c) {
a &= 268435455;
this.svga_memory[a] = c;
if (this.svga_enabled && (a -= this.svga_offset, !(0 > a))) {
switch(this.svga_bpp) {
case 32:
3 !== (a & 3) && this.bus.send("screen-put-pixel-linear", [a, c]);
break;
case 24:
this.bus.send("screen-put-pixel-linear", [(a << 2) / 3 | 0, c]);
break;
case 16:
if (a & 1) {
var d = this.svga_memory16[a >> 1], e, f;
f = 255 * (c >> 3 & 31) / 31 | 0;
e = 255 * (d >> 5 & 63) / 63 | 0;
d = 255 * (d & 31) / 31 | 0;
a <<= 1;
this.bus.send("screen-put-pixel-linear", [a, d]);
this.bus.send("screen-put-pixel-linear", [a - 1, e]);
this.bus.send("screen-put-pixel-linear", [a - 2, f]);
}
break;
case 8:
e = this.vga256_palette[c], f = a << 2, this.bus.send("screen-put-pixel-linear", [f, e >> 16 & 255]), this.bus.send("screen-put-pixel-linear", [f | 1, e >> 8 & 255]), this.bus.send("screen-put-pixel-linear", [f | 2, e & 255]);
}
}
};
VGAScreen.prototype.svga_memory_write32 = function(a, c) {
a &= 268435455;
if (a & 3 || 32 !== this.svga_bpp) {
this.svga_memory_write8(a, c & 255), this.svga_memory_write8(a + 1, c >> 8 & 255), this.svga_memory_write8(a + 2, c >> 16 & 255), this.svga_memory_write8(a + 3, c >> 24 & 255);
} else {
if (this.svga_memory32[a >> 2] = c, this.svga_enabled && (a -= this.svga_offset, !(0 > a))) {
switch(this.svga_bpp) {
case 32:
this.bus.send("screen-put-pixel-linear32", [a, c]);
}
}
}
};
VGAScreen.prototype.svga_redraw = function() {
var a = this.svga_offset, c = this.svga_height * this.svga_width, d = 0;
if (32 === this.svga_bpp) {
for (var e = new Int32Array(this.svga_memory.buffer), a = a >> 2, c = c << 2;d < c;) {
this.bus.send("screen-put-pixel-linear32", [d, e[a++]]), d += 4;
}
} else {
if (24 === this.svga_bpp) {
for (c <<= 2;d < c;) {
this.bus.send("screen-put-pixel-linear", [d++, this.svga_memory[a++]]), this.bus.send("screen-put-pixel-linear", [d++, this.svga_memory[a++]]), this.bus.send("screen-put-pixel-linear", [d++, this.svga_memory[a++]]), d++;
}
}
}
};
VGAScreen.prototype.timer = function() {
this.do_complete_redraw && (this.do_complete_redraw = !1, this.svga_enabled ? this.svga_redraw() : this.graphical_mode ? this.graphical_mode_is_linear || this.graphical_planar_redraw() : this.text_mode_redraw());
};
VGAScreen.prototype.destroy = function() {
};
VGAScreen.prototype.set_size_text = function(a, c) {
this.max_cols = a;
this.max_rows = c;
this.bus.send("screen-set-size-text", [a, c]);
};
VGAScreen.prototype.set_size_graphical = function(a, c) {
this.bus.send("screen-set-size-graphical", [a, c]);
};
VGAScreen.prototype.update_cursor_scanline = function() {
this.bus.send("screen-update-cursor-scanline", [this.cursor_scanline_start, this.cursor_scanline_end]);
};
VGAScreen.prototype.set_video_mode = function(a) {
var c = !1;
switch(a) {
case 3:
this.set_size_text(this.text_mode_width, 25);
break;
case 16:
this.screen_width = 640;
this.screen_height = 350;
c = !0;
this.graphical_mode_is_linear = !1;
break;
case 18:
this.screen_width = 640;
this.screen_height = 480;
c = !0;
this.graphical_mode_is_linear = !1;
break;
case 19:
this.screen_width = 320, this.screen_height = 200, this.graphical_mode_is_linear = c = !0;
}
this.bus.send("screen-set-mode", c);
if (this.stats.is_graphical = c) {
this.set_size_graphical(this.screen_width, this.screen_height), this.stats.res_x = this.screen_width, this.stats.res_y = this.screen_height, this.stats.bpp = 8;
}
this.graphical_mode = c;
};
VGAScreen.prototype.port3C0_write = function(a) {
-1 === this.attribute_controller_index ? this.attribute_controller_index = a : (16 > this.attribute_controller_index && (this.dac_map[this.attribute_controller_index] = a), this.attribute_controller_index = -1);
};
VGAScreen.prototype.port3C0_read = function() {
var a = this.attribute_controller_index;
this.attribute_controller_index = -1;
return a;
};
VGAScreen.prototype.port3C1_read = function() {
return this.attribute_controller_index = -1;
};
VGAScreen.prototype.port3C2_write = function(a) {
this.miscellaneous_output_register = a;
this.switch_video_mode(a);
};
VGAScreen.prototype.port3C4_write = function(a) {
this.sequencer_index = a;
};
VGAScreen.prototype.port3C4_read = function() {
return this.sequencer_index;
};
VGAScreen.prototype.port3C5_write = function(a) {
switch(this.sequencer_index) {
case 2:
this.plane_write_bm = a;
break;
case 4:
this.sequencer_memory_mode = a;
}
};
VGAScreen.prototype.port3C5_read = function() {
switch(this.sequencer_index) {
case 2:
return this.plane_write_bm;
case 4:
return this.sequencer_memory_mode;
case 6:
return 18;
}
return 0;
};
VGAScreen.prototype.port3C7_write = function() {
};
VGAScreen.prototype.port3C8_write = function(a) {
this.dac_color_index = 3 * a;
};
VGAScreen.prototype.port3C9_write = function(a) {
var c = this.dac_color_index / 3 | 0, d = this.dac_color_index % 3, e = this.vga256_palette[c];
a = 255 * a / 63 & 255;
this.vga256_palette[c] = 0 === d ? e & -16711681 | a << 16 : 1 === d ? e & -65281 | a << 8 : e & -256 | a;
this.dac_color_index++;
this.do_complete_redraw = !0;
};
VGAScreen.prototype.port3CC_read = function() {
return this.miscellaneous_output_register;
};
VGAScreen.prototype.port3CE_write = function(a) {
this.graphics_index = a;
};
VGAScreen.prototype.port3CE_read = function() {
return this.graphics_index;
};
VGAScreen.prototype.port3CF_write = function(a) {
switch(this.graphics_index) {
case 3:
this.planar_rotate_reg = a;
break;
case 4:
this.plane_read = a;
break;
case 5:
this.planar_mode = a;
break;
case 8:
this.planar_bitmap = a;
}
};
VGAScreen.prototype.port3CF_read = function() {
switch(this.graphics_index) {
case 3:
return this.planar_rotate_reg;
case 4:
return this.plane_read;
case 5:
return this.planar_mode;
case 8:
return this.planar_bitmap;
}
return 0;
};
VGAScreen.prototype.port3D4_write = function(a) {
this.index_crtc = a;
};
VGAScreen.prototype.port3D5_write = function(a) {
switch(this.index_crtc) {
case 2:
this.text_mode_width = a;
break;
case 9:
this.max_scan_line = a;
7 === (a & 31) ? this.set_size_text(this.text_mode_width, 50) : this.set_size_text(this.text_mode_width, 25);
break;
case 10:
this.cursor_scanline_start = a;
this.update_cursor_scanline();
break;
case 11:
this.cursor_scanline_end = a;
this.update_cursor_scanline();
break;
case 12:
this.start_address = this.start_address & 255 | a << 8;
this.do_complete_redraw = !0;
break;
case 13:
this.start_address = this.start_address & 65280 | a;
this.do_complete_redraw = !0;
break;
case 14:
this.cursor_address = this.cursor_address & 255 | a << 8;
this.update_cursor();
break;
case 15:
this.cursor_address = this.cursor_address & 65280 | a, this.update_cursor();
}
};
VGAScreen.prototype.port3D5_read = function() {
return 9 === this.index_crtc ? this.max_scan_line : 10 === this.index_crtc ? this.cursor_scanline_start : 11 === this.index_crtc ? this.cursor_scanline_end : 14 === this.index_crtc ? this.cursor_address >> 8 : 15 === this.index_crtc ? this.cursor_address & 255 : 0;
};
VGAScreen.prototype.port3DA_read = function() {
this.port_3DA_value ^= 8;
this.attribute_controller_index = -1;
return this.port_3DA_value;
};
VGAScreen.prototype.switch_video_mode = function(a) {
103 === a ? this.set_video_mode(3) : 227 === a ? this.set_video_mode(18) : 99 === a ? this.set_video_mode(19) : 163 === a ? this.set_video_mode(16) : this.set_video_mode(3);
};
VGAScreen.prototype.svga_bytes_per_line = function() {
return this.svga_width * (15 === this.svga_bpp ? 16 : this.svga_bpp) / 8;
};
VGAScreen.prototype.port1CE_write = function(a) {
this.dispi_index = a;
};
VGAScreen.prototype.port1CF_write = function(a) {
switch(this.dispi_index) {
case 1:
this.svga_width = a;
2560 < this.svga_width && (this.svga_width = 2560);
break;
case 2:
this.svga_height = a;
1600 < this.svga_height && (this.svga_height = 1600);
break;
case 3:
this.svga_bpp = a;
break;
case 4:
this.svga_enabled = 1 === (a & 1);
this.dispi_enable_value = a;
break;
case 9:
this.svga_offset = a * this.svga_bytes_per_line(), this.do_complete_redraw = !0;
}
!this.svga_enabled || this.svga_width && this.svga_height || (this.svga_enabled = !1);
this.svga_enabled && 4 === this.dispi_index && (this.set_size_graphical(this.svga_width, this.svga_height), this.bus.send("screen-set-mode", !0), this.stats.bpp = this.svga_bpp, this.stats.is_graphical = !0, this.stats.res_x = this.svga_width, this.stats.res_y = this.svga_height);
};
VGAScreen.prototype.port1CF_read = function() {
return this.svga_register_read(this.dispi_index);
};
VGAScreen.prototype.svga_register_read = function(a) {
switch(a) {
case 0:
return 45248;
case 1:
return this.dispi_enable_value & 2 ? 2560 : this.svga_width;
case 2:
return this.dispi_enable_value & 2 ? 1600 : this.svga_height;
case 3:
return this.dispi_enable_value & 2 ? 32 : this.svga_bpp;
case 4:
return this.dispi_enable_value;
case 6:
return this.svga_width;
case 10:
return this.vga_memory_size / 65536 | 0;
}
return 255;
};
function PS2(a, c) {
this.pic = a.devices.pic;
this.cpu = a;
this.bus = c;
this.use_mouse = this.enable_mouse_stream = !1;
this.mouse_clicks = this.mouse_delta_y = this.mouse_delta_x = 0;
this.next_read_resolution = this.next_read_rate = this.next_handle_scan_code_set = this.next_read_led = this.next_read_sample = this.next_is_mouse_command = this.enable_keyboard_stream = !1;
this.kbd_buffer = new ByteQueue(32);
this.last_port60_byte = 0;
this.sample_rate = 100;
this.resolution = 4;
this.scaling2 = !1;
this.last_mouse_packet = -1;
this.mouse_buffer = new ByteQueue(32);
this.bus.register("keyboard-code", function(a) {
this.kbd_send_code(a);
}, this);
this.bus.register("mouse-click", function(a) {
this.mouse_send_click(a[0], a[1], a[2]);
}, this);
this.bus.register("mouse-delta", function(a) {
this.mouse_send_delta(a[0], a[1]);
}, this);
this.bus.register("mouse-wheel", function() {
}, this);
this.command_register = 5;
this.read_command_register = this.read_output_register = !1;
a.io.register_read(96, this, this.port60_read);
a.io.register_read(100, this, this.port64_read);
a.io.register_write(96, this, this.port60_write);
a.io.register_write(100, this, this.port64_write);
this._state_skip = [this.bus, this.pic, this.cpu];
}
PS2.prototype.mouse_irq = function() {
this.command_register & 2 && this.pic.push_irq(12);
};
PS2.prototype.kbd_irq = function() {
this.command_register & 1 && this.pic.push_irq(1);
};
PS2.prototype.kbd_send_code = function(a) {
this.enable_keyboard_stream && (this.kbd_buffer.push(a), this.kbd_irq());
};
PS2.prototype.mouse_send_delta = function(a, c) {
if (this.use_mouse) {
var d = this.resolution * this.sample_rate / 80;
this.mouse_delta_x += a * d;
this.mouse_delta_y += c * d;
if (this.enable_mouse_stream) {
var d = this.mouse_delta_x | 0, e = this.mouse_delta_y | 0;
!d && !e || Date.now() - this.last_mouse_packet < 1E3 / this.sample_rate || (this.mouse_delta_x -= d, this.mouse_delta_y -= e, this.send_mouse_packet(d, e));
}
}
};
PS2.prototype.mouse_send_click = function(a, c, d) {
this.use_mouse && (this.mouse_clicks = a | d << 1 | c << 2, this.enable_mouse_stream && this.send_mouse_packet(0, 0));
};
PS2.prototype.send_mouse_packet = function(a, c) {
var d = (0 > c) << 5 | (0 > a) << 4 | 8 | this.mouse_clicks, e = a, f = c;
this.last_mouse_packet = Date.now();
this.scaling2 && (e = this.apply_scaling2(e), f = this.apply_scaling2(f));
this.mouse_buffer.push(d);
this.mouse_buffer.push(e);
this.mouse_buffer.push(f);
this.mouse_irq();
};
PS2.prototype.apply_scaling2 = function(a) {
var c = a >> 31;
switch(Math.abs(a)) {
case 0:
;
case 1:
;
case 3:
return a;
case 2:
return c;
case 4:
return 6 * c;
case 5:
return 9 * c;
default:
return a << 1;
}
};
PS2.prototype.destroy = function() {
};
PS2.prototype.port60_read = function() {
if (!this.kbd_buffer.length && !this.mouse_buffer.length) {
return this.last_port60_byte;
}
(this.kbd_buffer.length && this.mouse_buffer.length ? 0 !== (this.pic.isr & 2) : this.kbd_buffer.length) ? (this.last_port60_byte = this.kbd_buffer.shift(), 1 <= this.kbd_buffer.length && this.kbd_irq()) : (this.last_port60_byte = this.mouse_buffer.shift(), 1 <= this.mouse_buffer.length && this.mouse_irq());
return this.last_port60_byte;
};
PS2.prototype.port64_read = function() {
var a = 16;
if (this.mouse_buffer.length || this.kbd_buffer.length) {
a |= 1;
}
this.mouse_buffer.length && (a |= 32);
return a;
};
PS2.prototype.port60_write = function(a) {
if (this.read_command_register) {
this.kbd_irq(), this.command_register = a, this.read_command_register = !1;
} else {
if (this.read_output_register) {
this.read_output_register = !1, this.mouse_buffer.clear(), this.mouse_buffer.push(a), this.mouse_irq();
} else {
if (this.next_read_sample) {
this.next_read_sample = !1, this.mouse_buffer.clear(), this.mouse_buffer.push(250), this.sample_rate = a, this.mouse_irq();
} else {
if (this.next_read_resolution) {
this.next_read_resolution = !1, this.mouse_buffer.clear(), this.mouse_buffer.push(250), this.resolution = 3 < a ? 4 : 1 << a, this.mouse_irq();
} else {
if (this.next_read_led) {
this.next_read_led = !1, this.kbd_buffer.push(250), this.kbd_irq();
} else {
if (this.next_handle_scan_code_set) {
this.next_handle_scan_code_set = !1, this.kbd_buffer.push(250), this.kbd_irq(), a || this.kbd_buffer.push(2);
} else {
if (this.next_read_rate) {
this.next_read_rate = !1, this.kbd_buffer.push(250), this.kbd_irq();
} else {
if (this.next_is_mouse_command) {
this.next_is_mouse_command = !1;
this.kbd_buffer.clear();
this.mouse_buffer.clear();
this.mouse_buffer.push(250);
switch(a) {
case 230:
this.scaling2 = !1;
break;
case 231:
this.scaling2 = !0;
break;
case 232:
this.next_read_resolution = !0;
break;
case 233:
this.send_mouse_packet(0, 0);
break;
case 242:
this.mouse_buffer.push(0);
this.mouse_buffer.push(0);
this.mouse_clicks = this.mouse_delta_x = this.mouse_delta_y = 0;
break;
case 243:
this.next_read_sample = !0;
break;
case 244:
this.use_mouse = this.enable_mouse_stream = !0;
this.bus.send("mouse-enable", !0);
this.mouse_clicks = this.mouse_delta_x = this.mouse_delta_y = 0;
break;
case 245:
this.enable_mouse_stream = !1;
break;
case 246:
this.enable_mouse_stream = !1;
this.sample_rate = 100;
this.scaling2 = !1;
this.resolution = 4;
break;
case 255:
this.mouse_buffer.push(170), this.mouse_buffer.push(0), this.use_mouse = !0, this.bus.send("mouse-enable", !0), this.enable_mouse_stream = !1, this.sample_rate = 100, this.scaling2 = !1, this.resolution = 4, this.mouse_clicks = this.mouse_delta_x = this.mouse_delta_y = 0;
}
this.mouse_irq();
} else {
this.mouse_buffer.clear();
this.kbd_buffer.clear();
this.kbd_buffer.push(250);
switch(a) {
case 237:
this.next_read_led = !0;
break;
case 240:
this.next_handle_scan_code_set = !0;
break;
case 242:
this.kbd_buffer.push(171);
this.kbd_buffer.push(83);
break;
case 243:
this.next_read_rate = !0;
break;
case 244:
this.enable_keyboard_stream = !0;
break;
case 245:
this.enable_keyboard_stream = !1;
break;
case 255:
this.kbd_buffer.clear(), this.kbd_buffer.push(250), this.kbd_buffer.push(170);
}
this.kbd_irq();
}
}
}
}
}
}
}
}
};
PS2.prototype.port64_write = function(a) {
switch(a) {
case 32:
this.kbd_buffer.clear();
this.mouse_buffer.clear();
this.kbd_buffer.push(this.command_register);
break;
case 96:
this.read_command_register = !0;
break;
case 211:
this.read_output_register = !0;
break;
case 212:
this.next_is_mouse_command = !0;
break;
case 167:
this.command_register |= 32;
break;
case 168:
this.command_register &= -33;
break;
case 169:
this.kbd_buffer.clear();
this.mouse_buffer.clear();
this.kbd_buffer.push(0);
break;
case 170:
this.kbd_buffer.clear();
this.mouse_buffer.clear();
this.kbd_buffer.push(85);
break;
case 171:
this.kbd_buffer.clear();
this.mouse_buffer.clear();
this.kbd_buffer.push(0);
break;
case 173:
this.command_register |= 16;
break;
case 174:
this.command_register &= -17;
break;
case 254:
this.cpu.reboot_internal();
}
};
function PIC(a, c) {
this.irr = this.isr = this.irq_map = this.irq_mask = 0;
this.is_master = void 0 === c;
this.slave = void 0;
this.expect_icw4 = !1;
this.state = 0;
this.auto_eoi = this.read_irr = 1;
this.is_master ? (this.slave = new PIC(a, this), this.check_irqs = function() {
var c = this.irr & this.irq_mask;
if (!c) {
return this.slave.check_irqs();
}
c &= -c;
if (this.isr && (this.isr & -this.isr) <= c) {
return!1;
}
var d = int_log2_table[c], c = 1 << d;
this.irr &= ~c;
if (4 === c) {
return this.slave.check_irqs();
}
this.auto_eoi || (this.isr |= c);
a.previous_ip = a.instruction_pointer;
a.call_interrupt_vector(this.irq_map | d, !1, !1);
return!0;
}) : this.check_irqs = function() {
var d = this.irr & this.irq_mask;
if (!d) {
return!1;
}
d &= -d;
if (this.isr && (this.isr & -this.isr) <= d) {
return!1;
}
var f = int_log2_table[d], d = 1 << f;
this.irr &= ~d;
this.isr |= d;
a.previous_ip = a.instruction_pointer;
a.call_interrupt_vector(this.irq_map | f, !1, !1);
this.irr && c.push_irq(2);
this.auto_eoi || (this.isr &= ~d);
return!0;
};
this.PIC$dump = function() {
this.is_master && this.slave.PIC$dump();
};
var d;
d = this.is_master ? 32 : 160;
a.io.register_write(d, this, function(a) {
if (a & 16) {
this.expect_icw4 = a & 1, this.state = 1;
} else {
if (a & 8) {
this.read_irr = a & 1;
} else {
var c = a >> 5;
1 === c ? this.isr &= this.isr - 1 : 3 === c && (this.isr &= ~(1 << (a & 7)));
}
}
});
a.io.register_read(d, this, function() {
return this.read_irr ? this.irr : this.isr;
});
a.io.register_write(d | 1, this, function(a) {
0 === this.state ? this.expect_icw4 ? (this.expect_icw4 = !1, this.auto_eoi = a & 2) : this.irq_mask = ~a : 1 === this.state ? (this.irq_map = a, this.state++) : 2 === this.state && (this.state = 0);
});
a.io.register_read(d | 1, this, function() {
return~this.irq_mask & 255;
});
this.push_irq = this.is_master ? function(c) {
8 <= c && (this.slave.push_irq(c - 8), c = 2);
this.irr |= 1 << c;
a.handle_irqs();
} : function(a) {
this.irr |= 1 << a;
};
}
;function RTC(a, c, d) {
this.cpu = a;
this.pic = a.devices.pic;
this.cmos_index = 0;
this.boot_order = d;
this.diskette_type = c;
this.last_update = this.rtc_time = Date.now();
this.next_interrupt = 0;
this.cmos_c_was_read = !0;
this.periodic_interrupt = !1;
this.periodic_interrupt_time = .9765625;
this.cmos_a = 38;
this.cmos_b = 2;
this.cmos_c = 0;
a.io.register_write(112, this, function(a) {
this.cmos_index = a & 127;
});
a.io.register_write(113, this, this.cmos_write);
a.io.register_read(113, this, this.cmos_read);
this._state_skip = [this.cpu, this.pic];
}
RTC.prototype.timer = function(a) {
this.periodic_interrupt && this.cmos_c_was_read && this.next_interrupt < a && (this.cmos_c_was_read = !1, this.pic.push_irq(8), this.cmos_c |= 64, this.next_interrupt += this.periodic_interrupt_time * Math.ceil((a - this.next_interrupt) / this.periodic_interrupt_time));
this.rtc_time += a - this.last_update;
this.last_update = a;
};
RTC.prototype.bcd_pack = function(a) {
for (var c = 0, d = 0, e;a;) {
e = a % 10, d |= e << 4 * c, c++, a = (a - e) / 10;
}
return d;
};
RTC.prototype.encode_time = function(a) {
return this.cmos_b & 4 ? a : this.bcd_pack(a);
};
RTC.prototype.cmos_read = function() {
switch(this.cmos_index) {
case 0:
return this.encode_time((new Date(this.rtc_time)).getUTCSeconds());
case 2:
return this.encode_time((new Date(this.rtc_time)).getUTCMinutes());
case 4:
return this.encode_time((new Date(this.rtc_time)).getUTCHours());
case 7:
return this.encode_time((new Date(this.rtc_time)).getUTCDate());
case 8:
return this.encode_time((new Date(this.rtc_time)).getUTCMonth() + 1);
case 9:
return this.encode_time((new Date(this.rtc_time)).getUTCFullYear() % 100);
case 10:
return this.cmos_a;
case 11:
return this.cmos_b;
case 14:
return 0;
case 12:
return this.cmos_c_was_read = !0, this.cmos_c;
case 15:
return 0;
case 16:
return this.diskette_type;
case 20:
return 45;
case 50:
return this.encode_time((new Date(this.rtc_time)).getUTCFullYear() / 100 | 0);
case 52:
return this.cpu.memory_size - 16777216 >> 16 & 255;
case 53:
return this.cpu.memory_size - 16777216 >> 24 & 255;
case 56:
return 1 | this.boot_order >> 4 & 240;
case 61:
return this.boot_order & 255;
case 91:
;
case 92:
;
case 93:
return 0;
}
return 255;
};
RTC.prototype.cmos_write = function(a) {
switch(this.cmos_index) {
case 10:
this.cmos_a = a & 127;
this.periodic_interrupt_time = 1E3 / (32768 >> (this.cmos_a & 15) - 1);
break;
case 11:
this.cmos_b = a, this.cmos_b & 64 && (this.next_interrupt = Date.now());
}
this.periodic_interrupt = 64 === (this.cmos_b & 64) && 0 < (this.cmos_a & 15);
};
function UART(a, c, d) {
this.bus = d;
this.pic = a.devices.pic;
this.ier = this.line_control = this.baud_rate = this.ints = 0;
this.iir = 1;
this.UART$irq = this.scratch_register = this.modem_status = this.modem_control = 0;
this.input = new ByteQueue(4096);
this.current_line = "";
if (1E3 === c || 1016 === c) {
this.UART$irq = 4;
} else {
if (1E3 === c || 1E3 === c) {
this.UART$irq = 3;
} else {
return;
}
}
this.bus.register("serial0-input", function(a) {
this.data_received(a);
}, this);
a = a.io;
a.register_write(c, this, function(a) {
this.line_control & 128 ? this.baud_rate = this.baud_rate & -256 | a : (this.ThrowTHRI(), 255 !== a && (a = String.fromCharCode(a), this.bus.send("serial0-output-char", a), this.bus.should_send() && (this.current_line += a, "\n" === a && (this.bus.send("serial0-output-line", this.current_line), this.current_line = ""))));
});
a.register_write(c | 1, this, function(a) {
this.line_control & 128 ? this.baud_rate = this.baud_rate & 255 | a << 8 : (this.ier = a, this.NextInterrupt());
});
a.register_read(c, this, function() {
if (this.line_control & 128) {
return this.baud_rate & 255;
}
var a = this.input.shift();
this.input.length && this.ThrowCTI();
return a;
});
a.register_read(c | 1, this, function() {
return this.line_control & 128 ? this.baud_rate >> 8 : this.ier;
});
a.register_read(c | 2, this, function() {
var a = this.iir & 15 | 192;
2 === this.iir ? this.ClearInterrupt(2) : 12 === this.iir && this.ClearInterrupt(12);
return a;
});
a.register_write(c | 2, this, function() {
});
a.register_read(c | 3, this, function() {
return this.line_control;
});
a.register_write(c | 3, this, function(a) {
this.line_control = a;
});
a.register_read(c | 4, this, function() {
return this.modem_control;
});
a.register_write(c | 4, this, function(a) {
this.modem_control = a;
});
a.register_read(c | 5, this, function() {
var a = 0;
this.input.length && (a |= 1);
return a | 96;
});
a.register_write(c | 5, this, function() {
});
a.register_read(c | 6, this, function() {
return this.modem_status;
});
a.register_write(c | 6, this, function() {
});
a.register_read(c | 7, this, function() {
return this.scratch_register;
});
a.register_write(c | 7, this, function(a) {
this.scratch_register = a;
});
this._state_skip = [this.bus, this.pic];
}
UART.prototype.push_irq = function() {
this.pic.push_irq(this.UART$irq);
};
UART.prototype.ClearInterrupt = function(a) {
this.ints &= ~(1 << a);
this.iir = 1;
a === this.iir && this.NextInterrupt();
};
UART.prototype.ThrowCTI = function() {
this.ints |= 4096;
this.ier & 1 && 6 != this.iir && 4 != this.iir && (this.iir = 12, this.push_irq());
};
UART.prototype.ThrowTHRI = function() {
this.ints |= 4;
this.ier & 2 && (this.iir & 1 || 0 == this.iir || 2 == this.iir) && (this.iir = 2, this.push_irq());
};
UART.prototype.NextInterrupt = function() {
this.ints & 4096 && this.ier & 1 ? this.ThrowCTI() : this.ints & 4 && this.ier & 2 ? this.ThrowTHRI() : this.iir = 1;
};
UART.prototype.data_received = function(a) {
this.input.push(a);
this.ints |= 4096;
this.ier & 1 && this.ThrowCTI();
};
function ACPI() {
}
;function StateLoadError(a) {
this.message = a;
}
StateLoadError.prototype = Error();
function save_object(a, c) {
if ("object" !== typeof a || null === a || a instanceof Array) {
return a;
}
if (a.constructor === Object) {
for (var d = Object.keys(a), e = {}, f = 0;f < d.length;f++) {
var g = d[f];
e[g] = save_object(a[g], c);
}
return e;
}
if (a.BYTES_PER_ELEMENT) {
return{__state_type__:a.constructor.name, buffer_id:c.push(a.buffer) - 1};
}
if (a instanceof ArrayBuffer) {
return{__state_type__:"ArrayBuffer", buffer_id:c.push(a) - 1};
}
var k;
a._state_skip && (k = a._state_skip.slice(), k.push(a._state_skip));
d = Object.keys(a);
e = {};
f = 0;
a: for (;f < d.length;f++) {
var g = d[f], m = a[g];
if ("function" !== typeof m) {
if (k && "object" === typeof m && m) {
for (var l = 0;l < k.length;l++) {
if (k[l] === m) {
continue a;
}
}
}
e[g] = save_object(m, c);
}
}
return e;
}
function restore_object(a, c, d) {
if ("object" !== typeof c || c instanceof Array || null === c) {
return c;
}
var e = c.__state_type__;
if (void 0 === e) {
for (var e = Object.keys(c), f = 0;f < e.length;f++) {
var g = e[f];
a[g] = restore_object(a[g], c[g], d);
}
a._state_restore && a._state_restore();
return a;
}
if ("ArrayBuffer" === e) {
return c = d.infos[c.buffer_id], a && a.byteLength === c.length && (new Uint8Array(a)).set(new Uint8Array(d.full, c.offset, c.length)), a;
}
e = {Uint8Array:Uint8Array, Int8Array:Int8Array, Uint16Array:Uint16Array, Int16Array:Int16Array, Uint32Array:Uint32Array, Int32Array:Int32Array, Float32Array:Float32Array, Float64Array:Float64Array}[e];
c = d.infos[c.buffer_id];
return a && a.constructor === e && 0 === a.byteOffset && a.byteLength === c.length ? ((new Uint8Array(a.buffer)).set(new Uint8Array(d.full, c.offset, c.length), a.byteOffset), a) : new e(d.full.slice(c.offset, c.offset + c.length));
}
CPU.prototype.CPU_prototype$save_state = function() {
for (var a = [], c = save_object(this, a), d = [], e = 0, f = 0;f < a.length;f++) {
var g = a[f].byteLength;
d[f] = {offset:e, length:g};
e += g;
e = e + 3 & -4;
}
var c = JSON.stringify({buffer_infos:d, state:c}), f = 16 + 2 * c.length, k = f + e, e = new ArrayBuffer(k), m = new Int32Array(e, 0, 4), g = new Uint16Array(e, 16, c.length), l = new Uint8Array(e, f);
m[0] = -2039052682;
m[1] = 0;
m[2] = k;
m[3] = 2 * c.length;
for (f = 0;f < c.length;f++) {
g[f] = c.charCodeAt(f);
}
for (f = 0;f < a.length;f++) {
l.set(new Uint8Array(a[f]), d[f].offset);
}
return e;
};
CPU.prototype.CPU_prototype$restore_state = function(a) {
var c = a.byteLength;
if (16 > c) {
throw new StateLoadError("Invalid length: " + c);
}
var d = new Int32Array(a, 0, 4);
if (-2039052682 !== d[0]) {
throw new StateLoadError("Invalid header: " + h(d[0] >>> 0));
}
if (0 !== d[1]) {
throw new StateLoadError("Version mismatch: dump=" + d[1] + " we=0");
}
if (d[2] !== c) {
throw new StateLoadError("Length doesn't match header: real=" + c + " header=" + d[2]);
}
d = d[3];
if (0 > d || d + 12 >= c || d % 2) {
throw new StateLoadError("Invalid info block length: " + d);
}
for (var e = d / 2, f = new Uint16Array(a, 16, e), g = "", c = 0;c < e - 8;) {
g += String.fromCharCode(f[c++], f[c++], f[c++], f[c++], f[c++], f[c++], f[c++], f[c++]);
}
for (;c < e;) {
g += String.fromCharCode(f[c++]);
}
e = JSON.parse(g);
d = 16 + d;
f = e.buffer_infos;
for (c = 0;c < f.length;c++) {
f[c].offset += d;
}
restore_object(this, e.state, {full:a, infos:f});
};
function Ne2k(a, c) {
this.pic = a.devices.pic;
this.bus = c;
this.bus.register("net0-receive", function(a) {
this.receive(a);
}, this);
this.pci_space = [236, 16, 41, 128, 3, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 26, 0, 17, 0, 0, 184, 254, 0, 0, 0, 0, 0, 0, 0, 0, 11, 1, 0, 0];
this.pci_id = 40;
this.pci_bars = [{size:131072}];
a.devices.pci.register_device(this);
this.imr = this.isr = 0;
this.cr = 1;
this.rcnt = 0;
this.remote_buffer = new Uint8Array(0);
this.remote_pointer = 0;
this.receive_buffer = new Uint8Array(32768);
this.receive_buffer[0] = 0;
this.receive_buffer[1] = 34;
this.receive_buffer[2] = 21;
this.receive_buffer[3] = 255 * Math.random() | 0;
this.receive_buffer[4] = 255 * Math.random() | 0;
this.receive_buffer[5] = 255 * Math.random() | 0;
this.rsar = 0;
this.boundary = this.curpg = 76;
var d = a.io;
d.register_read(47104, this, function() {
return this.cr;
});
d.register_write(47104, this, function(a) {
this.cr = a | this.cr & 4;
this.remote_pointer = 0;
this.rcnt > this.remote_buffer.length && (this.remote_buffer = new Uint8Array(this.rcnt));
});
d.register_read(47117, this, function() {
return 0;
});
d.register_read(47118, this, function() {
return 0;
});
d.register_read(47119, this, function() {
return 0;
});
d.register_read(47135, this, function() {
if (0 === (this.cr & 192)) {
return this.do_interrupt(128), 0;
}
});
d.register_write(47135, this, function() {
});
d.register_read(47111, this, function() {
return 0 === (this.cr & 192) ? this.isr : this.curpg;
});
d.register_write(47111, this, function(a) {
0 === (this.cr & 192) ? this.isr &= ~a : this.curpg = a;
});
d.register_write(47117, this, function() {
});
d.register_write(47118, this, function() {
});
d.register_write(47114, this, function(a) {
0 === (this.cr & 192) && (this.rcnt = this.rcnt & 65280 | a & 255);
});
d.register_write(47115, this, function(a) {
0 === (this.cr & 192) && (this.rcnt = this.rcnt & 255 | a << 8 & 65280);
});
d.register_write(47112, this, function(a) {
0 === (this.cr & 192) && (this.rsar = this.rsar & 65280 | a & 255);
});
d.register_write(47113, this, function(a) {
0 === (this.cr & 192) && (this.rsar = this.rsar & 255 | a << 8 & 65280);
});
d.register_write(47119, this, function(a) {
0 === (this.cr & 192) && (this.imr = a);
});
d.register_read(47107, this, function() {
return 0 === (this.cr & 192) ? this.boundary : 0;
});
d.register_write(47107, this, function(a) {
0 === (this.cr & 192) && (this.boundary = a);
});
d.register_read(47108, this, function() {
return 0 === (this.cr & 192) ? 35 : 0;
});
d.register_read(47116, this, function() {
return 0 === (this.cr & 192) ? 9 : 0;
});
d.register_read(47120, this, this.data_port_read, this.data_port_read16, this.data_port_read32);
d.register_write(47120, this, this.data_port_write, this.data_port_write16, this.data_port_write32);
this._state_skip = [this.bus, this.pic];
}
Ne2k.prototype.do_interrupt = function(a) {
this.isr |= a;
this.imr & a && this.pic.push_irq(11);
};
Ne2k.prototype.data_port_write = function(a) {
this.remote_buffer[this.remote_pointer++] = a;
this.remote_pointer === this.rcnt && (a = this.remote_buffer.subarray(0, this.rcnt), this.do_interrupt(64), this.cr &= -5, this.bus.send("net0-send", a), this.do_interrupt(2));
};
Ne2k.prototype.data_port_write16 = function(a) {
this.data_port_write(a);
this.data_port_write(a >> 8);
};
Ne2k.prototype.data_port_write32 = function(a) {
this.data_port_write(a);
this.data_port_write(a >> 8);
this.data_port_write(a >> 16);
this.data_port_write(a >> 24);
};
Ne2k.prototype.data_port_read = function() {
return this.receive_buffer[this.rsar++];
};
Ne2k.prototype.data_port_read16 = function() {
return this.data_port_read() | this.data_port_read() << 8;
};
Ne2k.prototype.data_port_read32 = function() {
return this.data_port_read() | this.data_port_read() << 8 | this.data_port_read() << 16 | this.data_port_read() << 24;
};
Ne2k.prototype.receive = function(a) {
if (!(this.cr & 1)) {
if (60 > a.length) {
var c = a;
a = new Uint8Array(60);
a.set(c);
}
var c = this.curpg << 8, d = a.length + 4, e = c + 4, f = this.curpg + 1 + (d >> 8);
if (c + d > this.receive_buffer.length) {
var g = this.receive_buffer.length - e;
this.receive_buffer.set(a.subarray(0, g), e);
this.receive_buffer.set(a.subarray(g), 76);
} else {
this.receive_buffer.set(a, e);
}
128 <= f && (f += -52);
this.receive_buffer[c] = 1;
this.receive_buffer[c + 1] = f;
this.receive_buffer[c + 2] = d;
this.receive_buffer[c + 3] = d >> 8;
this.curpg = f;
this.do_interrupt(1);
}
};
function VirtIO(a, c) {
this.pci_space = [244, 26, 9, 16, 7, 5, 16, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 168, 0, 0, 0, 16, 191, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 26, 9, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0];
this.pci_id = 48;
this.pci_bars = [{size:131072}];
a.devices.pci.register_device(this);
var d = a.io;
d.register_read(43008, this, void 0, void 0, function() {
return 1;
});
d.register_write(43012, this, void 0, void 0, function() {
});
d.register_write(43022, this, void 0, function(a) {
this.queue_select = a;
}, void 0);
d.register_read(43020, this, void 0, function() {
return this.queue_size;
}, void 0);
d.register_read(43016, this, void 0, void 0, function() {
return 0 === this.queue_select ? this.queue_address : 0;
});
d.register_write(43016, this, void 0, void 0, function(a) {
this.queue_address = a;
});
d.register_write(43026, this, function(a) {
this.device_status = a;
});
d.register_read(43026, this, function() {
return this.device_status;
});
d.register_read(43027, this, function() {
var a = this.isr;
this.isr = 0;
return a;
});
d.register_write(43024, this, void 0, function() {
var a = (this.queue_address << 12) + 16 * this.queue_size, c = a + 4;
this.memory.read16(a);
for (var a = this.memory.read16(a + 2), d = this.queue_size - 1, a = a & d;this.last_idx !== a;) {
var e = this.memory.read16(c + 2 * this.last_idx);
this.handle_descriptor(e);
this.last_idx = this.last_idx + 1 & d;
}
});
this.pic = a.devices.pic;
this.last_idx = this.isr = this.device_status = this.queue_select = 0;
this.queue_size = 32;
this.queue_address = 0;
this.memory = a.memory;
for (var e = 0;128 > e;e++) {
d.register_read(43028 + e, this, function(a) {
return this.device.configspace[a];
}.bind(this, e), void 0, void 0), d.register_write(43028 + e, this, function() {
}.bind(this, e), void 0, void 0);
}
this.device = new Virtio9p(c);
this.device.SendReply = this.device_reply.bind(this);
this._state_skip = [this.memory, this.pic, this.device];
this._state_restore = function() {
this.device.SendReply = this.device_reply.bind(this);
};
}
VirtIO.prototype.handle_descriptor = function(a) {
var c = a, d = this.queue_address << 12, e = 0, f = [];
do {
var g = d + 16 * c, k = this.memory.read16(g + 12);
if (k & 2) {
break;
}
var m = this.memory.read32s(g), c = this.memory.read32s(g + 4), l = this.memory.read32s(g + 8) >>> 0;
f.push({addr_low:m, addr_high:c, len:l});
if (k & 1) {
c = this.memory.read16(g + 14);
} else {
c = -1;
break;
}
} while (1);
var n = -1, p = 0;
this.device.ReceiveRequest({start:a, next:c}, function() {
if (p >= n) {
if (e === f.length) {
return 0;
}
var a = f[e++];
m = a.addr_low;
n = a.len;
p = 0;
}
return this.memory.read8(m + p++);
}.bind(this));
};
VirtIO.prototype.device_reply = function(a) {
if (-1 !== a.next) {
var c = this.device.replybuffersize, d = a.next, e = this.queue_address << 12, f = 0, g = [];
do {
var d = e + 16 * d, k = this.memory.read16(d + 12);
if (0 === (k & 2)) {
break;
}
var m = this.memory.read32s(d), l = this.memory.read32s(d + 4), n = this.memory.read32s(d + 8) >>> 0;
g.push({addr_low:m, addr_high:l, len:n});
if (k & 1) {
d = this.memory.read16(d + 14);
} else {
break;
}
} while (1);
k = -1;
for (e = l = 0;e < c;e++) {
d = this.device.replybuffer[e];
if (l >= k) {
if (f === g.length) {
return 0;
}
k = g[f++];
m = k.addr_low;
k = k.len;
l = 0;
}
this.memory.write8(m + l++, d);
}
f = (this.queue_address << 12) + 580;
f = f + 4095 & -4096;
this.memory.read16(f);
g = this.memory.read16(f + 2);
this.memory.write16(f + 2, g + 1);
f = f + 4 + 8 * (g & 31);
this.memory.write32(f, a.start);
this.memory.write32(f + 4, c);
this.isr |= 1;
this.pic.push_irq(12);
}
};
var Bus = {Connector:function() {
this.listeners = {};
this.pair = void 0;
}};
Bus.Connector.prototype.register = function(a, c, d) {
var e = this.listeners[a];
void 0 === e && (e = this.listeners[a] = []);
e.push({fn:c, this_value:d});
};
Bus.Connector.prototype.unregister = function(a, c) {
var d = this.listeners[a];
void 0 !== d && (this.listeners[a] = d.filter(function(a) {
return a.fn !== c;
}));
};
Bus.Connector.prototype.send = function(a, c) {
if (this.pair) {
var d = this.pair.listeners[a];
if (void 0 !== d) {
for (var e = 0;e < d.length;e++) {
var f = d[e];
f.fn.call(f.this_value, c);
}
}
}
};
Bus.Connector.prototype.send_async = function() {
setTimeout(this.send.bind(this, "emulator-ready", void 0), 0);
};
Bus.Connector.prototype.should_send = function() {
if (!this.pair) {
return!1;
}
var a = this.pair.listeners["serial0-output-line"];
return void 0 !== a && 0 < a.length;
};
Bus.create = function() {
var a = new Bus.Connector, c = new Bus.Connector;
a.pair = c;
c.pair = a;
return[a, c];
};
[[1, ""], [2, "CPU"], [32768, "DISK"], [4, "FPU"], [8, "MEM"], [16, "DMA"], [32, "IO"], [64, "PS2"], [128, "PIC"], [256, "VGA"], [512, "PIT"], [1024, "MOUS"], [2048, "PCI"], [4096, "BIOS"], [8192, "CD"], [16384, "SERI"], [65536, "RTC"], [131072, "HPET"], [262144, "ACPI"], [524288, "APIC"], [1048576, "NET"], [2097152, "VIO"], [4194304, "9P"]].reduce(function(a, c) {
a[c[0]] = c[1];
return a;
}, {});
function dbg_assert() {
}
;function KeyboardAdapter(a) {
function c(a) {
return a.shiftKey && a.ctrlKey && 74 === a.keyCode || !l.KeyboardAdapter$emu_enabled ? !1 : a.target ? "phone_keyboard" === a.target.className || "INPUT" !== a.target.nodeName && "TEXTAREA" !== a.target.nodeName : !0;
}
function d(a) {
if (c(a)) {
var d = a.keyCode;
if (!m[d]) {
return!1;
}
m[d] = !1;
g(d, !1) || a.preventDefault();
}
}
function e(a) {
if (c(a)) {
var d = a.keyCode;
m[d] && g(d, !1);
m[d] = !0;
g(d, !0) || a.preventDefault();
}
}
function f() {
for (var a = Object.keys(m), c, d = 0;d < a.length;d++) {
c = +a[d], m[c] && g(c, !1);
}
m = {};
}
function g(a, c) {
if (l.bus) {
if (a >= n.length || 0 === n[a]) {
return console.log("Missing char in map: " + a.toString(16)), !0;
}
var d = n[a];
c || (d |= 128);
255 < d ? (k(d >> 8), k(d & 255)) : k(d);
return!1;
}
}
function k(a) {
l.bus.send("keyboard-code", a);
}
var m = {}, l = this;
this.KeyboardAdapter$emu_enabled = !0;
var n = new Uint16Array([0, 0, 0, 0, 0, 0, 0, 0, 14, 15, 0, 0, 0, 28, 0, 0, 42, 29, 56, 0, 58, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 57, 57417, 57425, 57423, 57415, 57419, 57416, 57421, 80, 0, 0, 0, 0, 82, 83, 0, 11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 39, 0, 13, 0, 0, 0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38, 50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 57435, 57436, 57437, 0, 0, 82, 79, 80, 81, 75, 76, 77, 71, 72, 73, 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 87, 88,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 13, 51, 12, 52, 53, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 43, 27, 40, 0, 57435, 57400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
this.bus = a;
this.destroy = function() {
window.removeEventListener("keyup", d, !1);
window.removeEventListener("keydown", e, !1);
window.removeEventListener("blur", f, !1);
};
this.init = function() {
this.destroy();
window.addEventListener("keyup", d, !1);
window.addEventListener("keydown", e, !1);
window.addEventListener("blur", f, !1);
};
this.init();
}
;function MouseAdapter(a) {
function c(a) {
return p.enabled && p.MouseAdapter$emu_enabled && (!a.target || "mousemove" === a.type || "INPUT" !== a.target.nodeName && "TEXTAREA" !== a.target.nodeName);
}
function d(a) {
if (p.bus && c(a)) {
var d;
d = a.webkitMovementX || a.mozMovementX || 0;
a = a.webkitMovementY || a.mozMovementY || 0;
a = -(.15 * a);
p.bus.send("mouse-delta", [.15 * d, a]);
}
}
function e(a) {
c(a) && a.preventDefault();
}
function f(a) {
c(a) && k(a, !0);
}
function g(a) {
c(a) && k(a, !1);
}
function k(a, c) {
p.bus && (1 === a.which ? m = c : 2 === a.which ? n = c : 3 === a.which ? l = c : console.log("Unknown event.which: " + a.which), p.bus.send("mouse-click", [m, n, l]), a.preventDefault());
}
var m = !1, l = !1, n = !1, p = this;
this.enabled = !1;
this.MouseAdapter$emu_enabled = !0;
this.bus = a;
this.bus.register("mouse-enable", function(a) {
this.enabled = a;
}, this);
this.destroy = function() {
window.removeEventListener("mousemove", d, !1);
document.removeEventListener("contextmenu", e, !1);
window.removeEventListener("mousedown", f, !1);
window.removeEventListener("mouseup", g, !1);
};
this.init = function() {
this.destroy();
window.addEventListener("mousemove", d, !1);
document.addEventListener("contextmenu", e, !1);
window.addEventListener("mousedown", f, !1);
window.addEventListener("mouseup", g, !1);
};
this.init();
}
;function SerialAdapter(a, c) {
function d(a) {
g.bus && g.enabled && (g.send_char(a.keyCode), a.preventDefault());
}
function e(a) {
8 === a.keyCode && (g.send_char(127), a.preventDefault());
}
function f(a) {
for (var c = a.clipboardData.getData("text/plain"), d = 0;d < c.length;d++) {
g.send_char(c.charCodeAt(d));
}
a.preventDefault();
}
var g = this;
this.enabled = !0;
this.bus = c;
this.bus.register("serial0-output-char", function(a) {
this.show_char(a);
}, this);
this.destroy = function() {
a.removeEventListener("keypress", d, !1);
a.removeEventListener("keydown", e, !1);
a.removeEventListener("paste", f, !1);
};
this.init = function() {
this.destroy();
a.addEventListener("keypress", d, !1);
a.addEventListener("keydown", e, !1);
a.addEventListener("paste", f, !1);
};
this.init();
this.show_char = function(c) {
"\b" === c ? (c = a.value, a.value = c.substr(0, c.length - 1)) : "\r" !== c && (a.value += c, "\n" === c && (a.scrollTop = 1E9));
};
this.send_char = function(a) {
g.bus && g.bus.send("serial0-input", a);
};
}
;function NetworkAdapter(a, c) {
this.bus = c;
this.socket = void 0;
this.send_queue = [];
this.url = a;
this.last_connect_attempt = Date.now() - 1E4;
this.bus.register("net0-send", function(a) {
this.send(a);
}, this);
}
NetworkAdapter.prototype.handle_message = function(a) {
this.bus && this.bus.send("net0-receive", new Uint8Array(a.data));
};
NetworkAdapter.prototype.handle_close = function() {
this.connect();
setTimeout(this.connect.bind(this), 1E4);
};
NetworkAdapter.prototype.handle_open = function() {
for (var a = 0;a < this.send_queue.length;a++) {
this.send(this.send_queue[a]);
}
this.send_queue = [];
};
NetworkAdapter.prototype.handle_error = function() {
};
NetworkAdapter.prototype.destroy = function() {
this.socket && this.socket.close();
};
NetworkAdapter.prototype.connect = function() {
if (this.socket) {
var a = this.socket.readyState;
if (0 === a || 1 === a) {
return;
}
}
this.last_connect_attempt + 1E4 > Date.now() || (this.last_connect_attempt = Date.now(), this.socket = new WebSocket(this.url), this.socket.binaryType = "arraybuffer", this.socket.onopen = this.handle_open.bind(this), this.socket.onmessage = this.handle_message.bind(this), this.socket.onclose = this.handle_close.bind(this), this.socket.onerror = this.handle_error.bind(this));
};
NetworkAdapter.prototype.send = function(a) {
this.socket && 1 === this.socket.readyState ? this.socket.send(a) : (this.send_queue.push(a), 128 < this.send_queue.length && (this.send_queue = this.send_queue.slice(-64)), this.connect());
};
var v86util = v86util || {};
(function() {
function a(a, c, d, e) {
var l = new XMLHttpRequest;
l.open("get", a, !0);
l.responseType = "arraybuffer";
if (e) {
for (var n = Object.keys(e), p = 0;p < n.length;p++) {
var q = n[p];
l.setRequestHeader(q, e[q]);
}
}
l.onload = function() {
4 === l.readyState && (200 !== l.status && 206 !== l.status ? console.log("Loading the image `" + a + "` failed") : l.response && c(l.response));
};
d && (l.onprogress = function(a) {
d(a);
});
l.send(null);
}
function c(a, c, d) {
console.assert(a + c.length <= this.byteLength);
var e = c.length;
console.assert(0 === a % this.block_size);
console.assert(0 === e % this.block_size);
console.assert(e);
a = a / this.block_size;
for (var e = e / this.block_size, l = 0;l < e;l++) {
var n = this.loaded_blocks[a + l];
void 0 === n && (n = this.loaded_blocks[a + l] = new Uint8Array(this.block_size));
var p = c.subarray(l * this.block_size, (l + 1) * this.block_size);
n.set(p);
console.assert(n.byteLength === p.length);
}
d();
}
function d(a, c, d) {
this.AsyncXHRBuffer$filename = a;
this.block_size = c;
this.AsyncXHRBuffer$block_count = d / c;
console.assert(this.AsyncXHRBuffer$block_count === (this.AsyncXHRBuffer$block_count | 0));
this.loaded_blocks = {};
this.byteLength = d;
}
function e(a) {
this.AsyncFileBuffer$file = a;
this.byteLength = a.size;
this.block_size = 512;
this.loaded_blocks = {};
this.load = function() {
this.onload && this.onload({});
};
}
v86util.load_file = a;
v86util.AsyncXHRBuffer = d;
v86util.AsyncFileBuffer = e;
v86util.SyncFileBuffer = function(a) {
var c = !1, d = this;
this.byteLength = a.size;
1073741824 < a.size && console.log("Warning: Allocating buffer of " + (a.size >> 20) + " MB ...");
var e = new ArrayBuffer(a.size), l = 0, n = new FileReader;
this.load = function() {
function p() {
if (d.onprogress) {
d.onprogress({loaded:l, total:a.size, lengthComputable:!0});
}
if (l < a.size) {
n.readAsArrayBuffer(a.slice(l, Math.min(l + 4194304, a.size)));
} else {
if (c = !0, d.onload) {
d.onload({});
}
}
}
n.onload = function(a) {
(new Uint8Array(e, l)).set(new Uint8Array(a.target.result));
l += 4194304;
p();
};
p();
};
this.get = function(a, d, f) {
if (c) {
console.assert(a + d <= e.byteLength), f(new Uint8Array(e, a, d));
} else {
throw "SyncFileBuffer: Wait for ready";
}
};
this.set = function(a, d, f) {
if (c) {
console.assert(a + d.byteLength <= e.byteLength), (new Uint8Array(e, a, d.byteLength)).set(d), f();
} else {
throw "SyncFileBuffer: Wait for ready";
}
};
};
d.prototype.get = function(c, d, e) {
console.assert(0 === c % this.block_size);
console.assert(0 === d % this.block_size);
console.assert(d);
a(this.AsyncXHRBuffer$filename, function(a) {
a = new Uint8Array(a);
this.handle_read(c, d, a);
e(a);
}.bind(this), null, {Range:"bytes=" + c + "-" + (c + d - 1)});
};
d.prototype.set = c;
d.prototype.handle_read = function(a, c, d) {
a = a / this.block_size;
c = c / this.block_size;
for (var e = 0;e < c;e++) {
var l = this.loaded_blocks[a + e];
l && d.set(l, e * this.block_size);
}
};
e.prototype.get = function(a, c, d) {
console.assert(0 === a % this.block_size);
console.assert(0 === c % this.block_size);
console.assert(c);
var e = new FileReader;
e.onload = function(e) {
e = new Uint8Array(e.target.result);
this.handle_read(a, c, e);
d(e);
}.bind(this);
e.readAsArrayBuffer(this.AsyncFileBuffer$file.slice(a, a + c));
};
e.prototype.set = c;
e.prototype.handle_read = d.prototype.handle_read;
})();
function V86Starter(a) {
function c(a, c) {
a && (a.buffer ? (console.assert(a.buffer instanceof ArrayBuffer || a.buffer instanceof File, "buffer should be ArrayBuffer or File"), c(a.buffer)) : a.url && (a.async ? c(a) : n.push({url:a.url, handler:c, size:a.size})));
}
function d(a, c) {
switch(a) {
case "hda":
l.hda = c;
break;
case "hdb":
l.hdb = c;
break;
case "cdrom":
l.cdrom = c;
break;
case "fda":
l.fda = c;
break;
case "fdb":
l.fdb = c;
break;
case "bios":
l.bios = c;
break;
case "vga_bios":
l.vga_bios = c;
}
}
function e(a, c) {
if (c instanceof ArrayBuffer) {
var e = new SyncBuffer(c)
} else {
c instanceof File ? e = new v86util.AsyncFileBuffer(c) : c.async ? e = new v86util.AsyncXHRBuffer(c.url, 512, c.size) : console.assert(!1);
}
d(a, e);
}
function f(c) {
var d = n.length;
if (c < d) {
var e = n[c];
v86util.load_file(e.url, function(a) {
e.handler(a);
f(c + 1);
}, function(a) {
q.emulator_bus.send("download-progress", {file_index:c, file_count:d, lengthComputable:a.lengthComputable, total:e.size || a.total, loaded:a.loaded});
});
} else {
m.init(l), p && m.v86_prototype$restore_state(p), a.autostart && m.v86_prototype$run();
}
}
var g = Bus.create(), k = this.bus = g[0];
this.emulator_bus = g[1];
var m = this.v86 = new v86(g[1]), l = {load_devices:!0};
l.memory_size = a.memory_size || 67108864;
l.vga_memory_size = a.vga_memory_size || 8388608;
l.boot_order = a.boot_order || 531;
l.fda = void 0;
l.fdb = void 0;
a.network_relay_url && (new NetworkAdapter(a.network_relay_url, k), l.enable_ne2k = !0);
a.disable_keyboard || (this.keyboard_adapter = new KeyboardAdapter(k));
a.disable_mouse || (this.mouse_adapter = new MouseAdapter(k));
a.screen_container && (this.screen_adapter = new ScreenAdapter(a.screen_container, k));
a.serial_container && new SerialAdapter(a.serial_container, k);
var n = [];
c(a.bios, d.bind(this, "bios"));
c(a.vga_bios, d.bind(this, "vga_bios"));
c(a.cdrom, e.bind(this, "cdrom"));
c(a.hda, e.bind(this, "hda"));
c(a.hdb, e.bind(this, "hdb"));
c(a.fda, e.bind(this, "fda"));
c(a.fdb, e.bind(this, "fdb"));
a.filesystem && (g = new FS(a.filesystem.baseurl), l.fs9p = g, g.LoadFilesystem({basefsURL:a.filesystem.basefs}));
var p;
a.initial_state && c(a.initial_state, function(a) {
p = a;
});
var q = this;
f(0);
}
V86Starter.prototype.V86Starter_prototype$run = function() {
this.v86.v86_prototype$run();
};
V86Starter.prototype.V86Starter_prototype$stop = function() {
this.v86.v86_prototype$stop();
};
V86Starter.prototype.V86Starter_prototype$restart = function() {
this.v86.v86_prototype$restart();
};
V86Starter.prototype.add_listener = function(a, c) {
this.bus.register(a, c, this);
};
V86Starter.prototype.remove_listener = function(a, c) {
this.bus.unregister(a, c);
};
V86Starter.prototype.V86Starter_prototype$restore_state = function(a) {
this.v86.v86_prototype$restore_state(a);
};
V86Starter.prototype.V86Starter_prototype$save_state = function(a) {
var c = this;
setTimeout(function() {
try {
a(null, c.v86.v86_prototype$save_state());
} catch (d) {
a(d, null);
}
}, 0);
};
V86Starter.prototype.get_statistics = function() {
var a = {cpu:{instruction_counter:this.v86.cpu.timestamp_counter}}, c = this.v86.cpu.devices;
c.hda && (a.hda = c.hda.stats);
c.cdrom && (a.cdrom = c.cdrom.stats);
c.ps2 && (a.mouse = {enabled:c.ps2.use_mouse});
c.vga && (a.vga = c.vga.stats);
return a;
};
V86Starter.prototype.is_running = function() {
return this.v86.running;
};
V86Starter.prototype.keyboard_send_scancodes = function(a) {
for (var c = this.v86.cpu.devices.ps2, d = 0;d < a.length;d++) {
c.kbd_send_code(a[d]);
}
};
V86Starter.prototype.screen_make_screenshot = function() {
this.screen_adapter && this.screen_adapter.make_screenshot();
};
V86Starter.prototype.screen_set_scale = function(a, c) {
this.screen_adapter && this.screen_adapter.set_scale(a, c);
};
V86Starter.prototype.screen_go_fullscreen = function() {
if (this.screen_adapter) {
var a = document.getElementById("screen_container");
if (a) {
var c = a.requestFullScreen || a.webkitRequestFullscreen || a.mozRequestFullScreen || a.msRequestFullScreen;
c && (c.call(a), (a = document.getElementsByClassName("phone_keyboard")[0]) && a.focus());
this.lock_mouse();
}
}
};
V86Starter.prototype.lock_mouse = function() {
var a = document.body, c = a.requestPointerLock || a.mozRequestPointerLock || a.webkitRequestPointerLock;
c && c.call(a);
};
V86Starter.prototype.mouse_set_status = function(a) {
this.mouse_adapter && (this.mouse_adapter.MouseAdapter$emu_enabled = a);
};
V86Starter.prototype.keyboard_set_status = function(a) {
this.keyboard_adapter && (this.keyboard_adapter.KeyboardAdapter$emu_enabled = a);
};
V86Starter.prototype.serial0_send = function(a) {
for (var c = 0;c < a.length;c++) {
this.bus.send("serial0-input", a.charCodeAt(c));
}
};
"undefined" !== typeof window && (window.V86Starter = V86Starter, V86Starter.prototype.run = V86Starter.prototype.V86Starter_prototype$run, V86Starter.prototype.stop = V86Starter.prototype.V86Starter_prototype$stop, V86Starter.prototype.restart = V86Starter.prototype.V86Starter_prototype$restart, V86Starter.prototype.add_listener = V86Starter.prototype.add_listener, V86Starter.prototype.remove_listener = V86Starter.prototype.remove_listener, V86Starter.prototype.restore_state = V86Starter.prototype.V86Starter_prototype$restore_state,
V86Starter.prototype.save_state = V86Starter.prototype.V86Starter_prototype$save_state, V86Starter.prototype.get_statistics = V86Starter.prototype.get_statistics, V86Starter.prototype.is_running = V86Starter.prototype.is_running, V86Starter.prototype.keyboard_send_scancodes = V86Starter.prototype.keyboard_send_scancodes, V86Starter.prototype.screen_make_screenshot = V86Starter.prototype.screen_make_screenshot, V86Starter.prototype.screen_set_scale = V86Starter.prototype.screen_set_scale, V86Starter.prototype.screen_go_fullscreen =
V86Starter.prototype.screen_go_fullscreen, V86Starter.prototype.lock_mouse = V86Starter.prototype.lock_mouse, V86Starter.prototype.mouse_set_status = V86Starter.prototype.mouse_set_status, V86Starter.prototype.keyboard_set_status = V86Starter.prototype.keyboard_set_status, V86Starter.prototype.serial0_send = V86Starter.prototype.serial0_send);
var S_IFDIR = 16384;
function FS(a) {
this.inodes = [];
this.events = [];
this.baseurl = a;
this.filesinloadingqueue = this.qidnumber = 0;
this.OnLoaded = function() {
};
this.inodedata = {};
this.CreateDirectory("", -1);
this._state_skip = ["OnLoaded"];
}
FS.prototype.LoadFilesystem = function(a) {
this.LoadFSXML(a.basefsURL);
};
FS.prototype.AddEvent = function(a, c) {
0 == this.inodes[a].status ? c() : this.events.push({id:a, OnEvent:c});
};
FS.prototype.HandleEvent = function(a) {
0 == this.filesinloadingqueue && (this.OnLoaded = function() {
});
for (var c = this.events.length - 1;0 <= c;c--) {
this.events[c].id == a && (this.events[c].OnEvent(), this.events.splice(c, 1));
}
};
FS.prototype.LoadFSXML = function(a) {
LoadXMLResource(a, this.OnJSONLoaded.bind(this), function(a) {
throw a;
});
};
FS.prototype.OnJSONLoaded = function(a) {
var c = JSON.parse(a).fsroot, d = this;
setTimeout(function() {
for (var a = 0;a < c.length;a++) {
d.LoadRecursive(c[a], 0);
}
d.OnLoaded = function() {
};
}, 0);
};
FS.prototype.LoadRecursive = function(a, c) {
var d = this.CreateInode();
d.name = a.name;
d.uid = a.uid || 0;
d.gid = a.gid || 0;
d.ctime = a.ctime || Math.floor(Date.now() / 1E3);
d.mtime = a.mtime || d.ctime;
d.atime = a.atime || d.ctime;
d.parentid = c;
d.mode = void 0 === a.mode ? 420 : a.mode & 511;
d.size = a.size || 0;
0 === a.type ? this.LoadDir(d, a.children) : (1 === a.type ? (d.mode |= 32768, d.status = 2) : (d.mode |= 40960, d.symlink = a.target), this.PushInode(d));
};
FS.prototype.LoadDir = function(a, c) {
a.updatedir = !0;
a.mode |= S_IFDIR;
var d = this.inodes.length;
this.PushInode(a);
for (var e = 0;e < c.length;e++) {
this.LoadRecursive(c[e], d);
}
};
FS.prototype.LoadFile = function(a) {
var c = this.inodes[a];
2 == c.status && (c.status = 3, this.filesinloadingqueue++, LoadBinaryResource(this.baseurl + this.GetFullPath(c.fid), function(d) {
d = this.inodedata[a] = new Uint8Array(d);
c.size = d.length;
c.status = 0;
this.filesinloadingqueue--;
this.HandleEvent(a);
}.bind(this), function(a) {
throw a;
}));
};
FS.prototype.PushInode = function(a) {
-1 != a.parentid ? (this.inodes.push(a), a.fid = this.inodes.length - 1, this.inodes[a.parentid].updatedir = !0, a.nextid = this.inodes[a.parentid].firstid, this.inodes[a.parentid].firstid = this.inodes.length - 1) : 0 == this.inodes.length && this.inodes.push(a);
};
function Inode(a) {
this.updatedir = !1;
this.nextid = this.firstid = this.parentid = -1;
this.status = 0;
this.name = "";
this.minor = this.major = this.mtime = this.atime = this.ctime = this.fid = this.gid = this.uid = this.size = 0;
this.symlink = "";
this.mode = 493;
this.qid = {type:0, version:0, path:a};
}
FS.prototype.CreateInode = function() {
return new Inode(++this.qidnumber);
};
FS.prototype.CreateDirectory = function(a, c) {
var d = this.CreateInode();
d.name = a;
d.parentid = c;
d.mode = 511 | S_IFDIR;
0 <= c && (d.uid = this.inodes[c].uid, d.gid = this.inodes[c].gid, d.mode = this.inodes[c].mode & 511 | S_IFDIR);
d.qid.type = S_IFDIR >> 8;
this.PushInode(d);
return this.inodes.length - 1;
};
FS.prototype.CreateFile = function(a, c) {
var d = this.CreateInode();
d.name = a;
d.parentid = c;
d.uid = this.inodes[c].uid;
d.gid = this.inodes[c].gid;
d.qid.type = 128;
d.mode = this.inodes[c].mode & 438 | 32768;
this.PushInode(d);
return this.inodes.length - 1;
};
FS.prototype.CreateNode = function(a, c, d, e) {
var f = this.CreateInode();
f.name = a;
f.parentid = c;
f.major = d;
f.minor = e;
f.uid = this.inodes[c].uid;
f.gid = this.inodes[c].gid;
f.qid.type = 192;
f.mode = this.inodes[c].mode & 438;
this.PushInode(f);
return this.inodes.length - 1;
};
FS.prototype.CreateSymlink = function(a, c, d) {
var e = this.CreateInode();
e.name = a;
e.parentid = c;
e.uid = this.inodes[c].uid;
e.gid = this.inodes[c].gid;
e.qid.type = 160;
e.symlink = d;
e.mode = 40960;
this.PushInode(e);
return this.inodes.length - 1;
};
FS.prototype.OpenInode = function(a) {
var c = this.GetInode(a);
(c.mode & 61440) == S_IFDIR && this.FillDirectory(a);
return 2 == c.status ? (this.LoadFile(a), !1) : !0;
};
FS.prototype.CloseInode = function(a) {
var c = this.GetInode(a);
4 == c.status && (-1 == c.status, delete this.inodedata[a], c.size = 0);
};
FS.prototype.Rename = function(a, c, d, e) {
if (a == d && c == e) {
return!0;
}
c = this.Search(a, c);
if (-1 == c) {
return!1;
}
var f = this.Search(d, e);
-1 != f && this.Unlink(f);
f = this.inodes[c];
if (this.inodes[f.parentid].firstid == c) {
this.inodes[f.parentid].firstid = f.nextid;
} else {
var g = this.FindPreviousID(c);
this.inodes[g].nextid = f.nextid;
}
f.parentid = d;
f.name = e;
f.qid.version++;
f.nextid = this.inodes[f.parentid].firstid;
this.inodes[f.parentid].firstid = c;
this.inodes[a].updatedir = !0;
return this.inodes[d].updatedir = !0;
};
FS.prototype.Write = function(a, c, d, e) {
var f = this.inodes[a], g = this.inodedata[a];
!g || g.length < c + d ? (this.ChangeSize(a, Math.floor(3 * (c + d) / 2)), f.size = c + d, g = this.inodedata[a]) : f.size < c + d && (f.size = c + d);
for (a = 0;a < d;a++) {
g[c + a] = e();
}
};
FS.prototype.Search = function(a, c) {
for (var d = this.inodes[a].firstid;-1 != d;) {
if (this.inodes[d].name == c) {
return d;
}
d = this.inodes[d].nextid;
}
return-1;
};
FS.prototype.GetFullPath = function(a) {
for (var c = "";0 != a;) {
c = "/" + this.inodes[a].name + c, a = this.inodes[a].parentid;
}
return c.substring(1);
};
FS.prototype.FindPreviousID = function(a) {
for (var c = this.GetInode(a), c = this.inodes[c.parentid].firstid;-1 != c && this.inodes[c].nextid != a;) {
c = this.inodes[c].nextid;
}
return c;
};
FS.prototype.Unlink = function(a) {
if (0 == a) {
return!1;
}
var c = this.GetInode(a);
if ((c.mode & 61440) == S_IFDIR && -1 != c.firstid) {
return!1;
}
this.inodes[c.parentid].firstid == a ? this.inodes[c.parentid].firstid = c.nextid : (a = this.FindPreviousID(a), this.inodes[a].nextid = c.nextid);
this.inodes[c.parentid].updatedir = !0;
c.status = 4;
c.nextid = -1;
c.firstid = -1;
c.parentid = -1;
return!0;
};
FS.prototype.GetInode = function(a) {
return isNaN(a) || 0 > a || a > this.inodes.length ? 0 : this.inodes[a];
};
FS.prototype.ChangeSize = function(a, c) {
var d = this.GetInode(a), e = this.inodedata[a];
if (c != d.size) {
var f = this.inodedata[a] = new Uint8Array(c);
d.size = c;
if (e) {
for (var d = Math.min(e.length, d.size), g = 0;g < d;g++) {
f[g] = e[g];
}
}
}
};
FS.prototype.FillDirectory = function(a) {
var c = this.GetInode(a);
if (c.updatedir) {
var d = c.parentid;
-1 == d && (d = 0);
for (var e = 0, f = this.inodes[a].firstid;-1 != f;) {
e += 24 + UTF8Length(this.inodes[f].name), f = this.inodes[f].nextid;
}
var e = e + 25 + 26, g = this.inodedata[a] = new Uint8Array(e);
c.size = e;
e = 0;
e += Marshall(["Q", "d", "b", "s"], [this.MakeQid(this.inodes[a]), e + 13 + 8 + 1 + 2 + 1, this.inodes[a].mode >> 12, "."], g, e);
e += Marshall(["Q", "d", "b", "s"], [this.MakeQid(this.inodes[d]), e + 13 + 8 + 1 + 2 + 2, this.inodes[d].mode >> 12, ".."], g, e);
for (f = this.inodes[a].firstid;-1 != f;) {
e += Marshall(["Q", "d", "b", "s"], [this.MakeQid(this.inodes[f]), e + 13 + 8 + 1 + 2 + UTF8Length(this.inodes[f].name), this.inodes[f].mode >> 12, this.inodes[f].name], g, e), f = this.inodes[f].nextid;
}
c.updatedir = !1;
}
};
FS.prototype.PrepareCAPs = function(a) {
a = this.GetInode(a);
if (a.caps) {
return a.caps.length;
}
a.caps = new Uint8Array(12);
a.caps[0] = 0;
a.caps[1] = 0;
a.caps[2] = 0;
a.caps[3] = 1;
a.caps[4] = 255;
a.caps[5] = 255;
a.caps[6] = 255;
a.caps[7] = 255;
a.caps[8] = 255;
a.caps[9] = 255;
a.caps[10] = 255;
a.caps[11] = 255;
return a.caps.length;
};
FS.prototype.MakeQid = function(a) {
return a.qid;
};
function LoadXMLResource(a, c, d) {
var e = new XMLHttpRequest;
e.open("GET", a, !0);
e.onreadystatechange = function() {
4 == e.readyState && (200 != e.status && 0 != e.status ? d("Error: Could not load XML file " + a) : c(e.responseText));
};
e.send(null);
}
function LoadBinaryResource(a, c, d) {
var e = new XMLHttpRequest;
e.open("GET", a, !0);
e.responseType = "arraybuffer";
e.onreadystatechange = function() {
if (4 == e.readyState) {
if (200 != e.status && 0 != e.status) {
d("Error: Could not load file " + a);
} else {
var f = e.response;
f ? c(f) : d("Error: No data received from: " + a);
}
}
};
e.send(null);
}
;function Marshall(a, c, d, e) {
for (var f, g = 0, k = 0;k < a.length;k++) {
switch(f = c[k], a[k]) {
case "w":
d[e++] = f & 255;
d[e++] = f >> 8 & 255;
d[e++] = f >> 16 & 255;
d[e++] = f >> 24 & 255;
g += 4;
break;
case "d":
d[e++] = f & 255;
d[e++] = f >> 8 & 255;
d[e++] = f >> 16 & 255;
d[e++] = f >> 24 & 255;
d[e++] = 0;
d[e++] = 0;
d[e++] = 0;
d[e++] = 0;
g += 8;
break;
case "h":
d[e++] = f & 255;
d[e++] = f >> 8;
g += 2;
break;
case "b":
d[e++] = f;
g += 1;
break;
case "s":
var m = e, l = 0;
d[e++] = 0;
d[e++] = 0;
var g = g + 2, n;
for (n in f) {
UnicodeToUTF8Stream(f.charCodeAt(n)).forEach(function(a) {
d[e++] = a;
g += 1;
l++;
});
}
d[m + 0] = l & 255;
d[m + 1] = l >> 8 & 255;
break;
case "Q":
Marshall(["b", "w", "d"], [f.type, f.version, f.path], d, e), e += 13, g += 13;
}
}
return g;
}
function Unmarshall2(a, c) {
for (var d = [], e = 0;e < a.length;e++) {
switch(a[e]) {
case "w":
var f = c(), f = f + (c() << 8), f = f + (c() << 16), f = f + (c() << 24 >>> 0);
d.push(f);
break;
case "d":
f = c();
f += c() << 8;
f += c() << 16;
f += c() << 24 >>> 0;
c();
c();
c();
c();
d.push(f);
break;
case "h":
f = c();
d.push(f + (c() << 8));
break;
case "b":
d.push(c());
break;
case "s":
for (var f = c(), f = f + (c() << 8), g = "", k = new UTF8StreamToUnicode, m = 0;m < f;m++) {
var l = k.Put(c());
-1 != l && (g += String.fromCharCode(l));
}
d.push(g);
}
}
return d;
}
;function UTF8StreamToUnicode() {
this.UTF8StreamToUnicode$stream = new Uint8Array(5);
this.ofs = 0;
this.Put = function(a) {
this.UTF8StreamToUnicode$stream[this.ofs] = a;
this.ofs++;
switch(this.ofs) {
case 1:
if (128 > this.UTF8StreamToUnicode$stream[0]) {
return this.ofs = 0, this.UTF8StreamToUnicode$stream[0];
}
break;
case 2:
if (192 == (this.UTF8StreamToUnicode$stream[0] & 224) && 128 == (this.UTF8StreamToUnicode$stream[1] & 192)) {
return this.ofs = 0, (this.UTF8StreamToUnicode$stream[0] & 31) << 6 | this.UTF8StreamToUnicode$stream[1] & 63;
}
;
}
return-1;
};
}
function UnicodeToUTF8Stream(a) {
if (128 > a) {
return[a];
}
if (2048 > a) {
return[192 | a >> 6 & 31, 128 | a & 63];
}
}
function UTF8Length(a) {
for (var c = 0, d = 0;d < a.length;d++) {
c += 128 > a.charCodeAt(d) ? 1 : 2;
}
return c;
}
;})();