v86 0.5.367 → 0.5.372
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/libv86-debug.js +88 -76
- package/build/libv86-debug.mjs +88 -76
- package/build/libv86.js +185 -185
- package/build/libv86.mjs +236 -235
- package/build/v86-debug.wasm +0 -0
- package/build/v86-fallback.wasm +0 -0
- package/build/v86.wasm +0 -0
- package/package.json +1 -1
package/build/libv86.mjs
CHANGED
|
@@ -9,22 +9,22 @@ h=0;h<g.length;h++){var l=g[h];e.setRequestHeader(l,b.headers[l])}b.range&&(g=b.
|
|
|
9
9
|
a+" failed (status %d)",e.status),500<=e.status&&600>e.status&&d();else if(e.response){if(b.range){const m=e.getResponseHeader("Content-Encoding");m&&"identity"!==m&&console.error("Server sent Content-Encoding in response to ranged request",{filename:a,enc:m})}b.done&&b.done(e.response,e)}};e.onerror=function(m){b.signal&&b.signal.removeEventListener("abort",f);console.error("Loading the image "+a+" failed",m);d()};b.progress&&(e.onprogress=function(m){b.progress(m)});e.send(null)},qa=async function(a){return new Promise((b,
|
|
10
10
|
c)=>{pa(a,{done:(d,e)=>{d=e.getResponseHeader("Content-Range")||"";(e=d.match(/\/(\d+)\s*$/))?b(+e[1]):c(Error("`Range: bytes=...` header not supported (Got `"+d+"`)"))},headers:{Range:"bytes=0-0","X-Accept-Encoding":"identity"}})})};function ra(a,b,c){return String.fromCharCode(...(new Uint8Array(a.buffer,b>>>0,c>>>0)))}const sa={cp437:" \u263a\u263b\u2665\u2666\u2663\u2660\u2022\u25d8\u25cb\u25d9\u2642\u2640\u266a\u266b\u263c\u25ba\u25c4\u2195\u203c\u00b6\u00a7\u25ac\u21a8\u2191\u2193\u2192\u2190\u221f\u2194\u25b2\u25bc !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u2302\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00a2\u00a3\u00a5\u20a7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u2310\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\u00df\u0393\u03c0\u03a3\u03c3\u00b5\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u03c6\u03b5\u2229\u2261\u00b1\u2265\u2264\u2320\u2321\u00f7\u2248\u00b0\u2219\u00b7\u221a\u207f\u00b2\u25a0 ",
|
|
11
11
|
cp858:"\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f8\u00a3\u00d8\u00d7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u00ae\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb\u2591\u2592\u2593\u2502\u2524\u00c1\u00c2\u00c0\u00a9\u2563\u2551\u2557\u255d\u00a2\u00a5\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u00e3\u00c3\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u00a4\u00f0\u00d0\u00ca\u00cb\u00c8\u20ac\u00cd\u00ce\u00cf\u2518\u250c\u2588\u2584\u00a6\u00cc\u2580\u00d3\u00df\u00d4\u00d2\u00f5\u00d5\u00b5\u00fe\u00de\u00da\u00db\u00d9\u00fd\u00dd\u00af\u00b4\u00ad\u00b1\u2017\u00be\u00b6\u00a7\u00f7\u00b8\u00b0\u00a8\u00b7\u00b9\u00b3\u00b2\u25a0 "};
|
|
12
|
-
sa.cp858=sa.cp437.slice(0,128)+sa.cp858;sa.ascii=sa.cp437.split("").map((a,b)=>31<b&&128>b?a:".").join("");function ta(a){return a&&sa[a]?sa[a]:sa.cp437}function va(){}function wa(){}function xa(a,b){function c(
|
|
13
|
-
aa;Q
|
|
14
|
-
(1===t?"":" scaleX("+t+")")+(1===
|
|
15
|
-
1;this.FLAG_FONT_PAGE_B=2;let g=f.getElementsByTagName("canvas")[0];g||(g=document.createElement("canvas"),f.appendChild(g));const h=g.getContext("2d",{alpha:!1});let l=f.getElementsByTagName("div")[0];l||(l=document.createElement("div"),f.appendChild(l));const m=document.createElement("div");var n,p,q=void 0!==a.scale?a.scale:1,r=void 0!==a.scale?a.scale:1,x=1,
|
|
16
|
-
m.style.position="absolute";m.style.backgroundColor="#ccc";m.style.width="7px";m.style.display="inline-block";this.set_mode(!1);this.set_size_text(80,25);2===
|
|
17
|
-
M.textBaseline="top";for(let
|
|
18
|
-
|
|
19
|
-
0,ha=0;la<
|
|
20
|
-
Fa&&(
|
|
21
|
-
zb=0)};this.pause=function(){Ub=!0;m.classList.remove("blinking-cursor")};this.continue=function(){Ub=!1;m.classList.add("blinking-cursor")};this.clear_text_state=function(){vb=ub=
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
1),n<
|
|
26
|
-
|
|
27
|
-
this.onload=void 0}
|
|
12
|
+
sa.cp858=sa.cp437.slice(0,128)+sa.cp858;sa.ascii=sa.cp437.split("").map((a,b)=>31<b&&128>b?a:".").join("");function ta(a){return a&&sa[a]?sa[a]:sa.cp437}function va(){}function wa(){}function xa(a,b){function c(v){v=v.toString(16);return"#"+"0".repeat(6-v.length)+v}function d(v){var t=256*ka,J=8*T,M=Ua?Ua.canvas:null;M&&M.width===t&&M.height===J||(M?(M.width=t,M.height=J):(M=new OffscreenCanvas(t,J),Ua=M.getContext("2d")),Ob=Ua.createImageData(t,J));const R=Ob.data;let Q=0,U;J=Pb?function(aa){U=U||
|
|
13
|
+
aa;R[Q+3]=aa;R[Q+7]=aa;Q+=8}:function(aa){U=U||aa;R[Q+3]=aa;Q+=4};M=32-T;const la=t*(T-1)*4;t=4*(ka-t*T);const ha=1020*ka;for(let aa=0,Fa=0;2048>aa;++aa,Fa+=M,Q+=t){const Ga=aa%256;aa&&!Ga&&(Q+=la);U=!1;for(let Ma=0;Ma<T;++Ma,++Fa,Q+=ha){const Na=v[Fa];for(let ua=128;0<ua;ua>>=1)J(Na&ua?255:0);Qb&&J(Rb&&192<=Ga&&223>=Ga&&Na&1?255:0)}hc[aa]=U?1:0}Ua.putImageData(Ob,0,0)}function e(v,t,J,M){if(t&&J){v.style.width="";v.style.height="";M&&(v.style.transform="");var R=v.getBoundingClientRect();M?v.style.transform=
|
|
14
|
+
(1===t?"":" scaleX("+t+")")+(1===J?"":" scaleY("+J+")"):(0===t%1&&0===J%1?(g.style.imageRendering="crisp-edges",g.style.imageRendering="pixelated",g.style["-ms-interpolation-mode"]="nearest-neighbor"):(g.style.imageRendering="",g.style["-ms-interpolation-mode"]=""),M=window.devicePixelRatio||1,0!==M%1&&(t/=M,J/=M));1!==t&&(v.style.width=R.width*t+"px");1!==J&&(v.style.height=R.height*J+"px")}}const f=a.container;this.screen_fill_buffer=b;console.assert(f,"options.container must be provided");this.FLAG_BLINKING=
|
|
15
|
+
1;this.FLAG_FONT_PAGE_B=2;let g=f.getElementsByTagName("canvas")[0];g||(g=document.createElement("canvas"),f.appendChild(g));const h=g.getContext("2d",{alpha:!1});let l=f.getElementsByTagName("div")[0];l||(l=document.createElement("div"),f.appendChild(l));const m=document.createElement("div");var n,p,q=void 0!==a.scale?a.scale:1,r=void 0!==a.scale?a.scale:1,x=1,E,B,C,w,u,I,O,Ua,Ob,hc=new Int8Array(2048),T,ka,Qb,Pb,Rb,ub=0,vb=0,wb,ic=0,xb,Sb,yb,Tb=ta(a.encoding),zb=0,Ub=!1;this.init=function(){m.classList.add("cursor");
|
|
16
|
+
m.style.position="absolute";m.style.backgroundColor="#ccc";m.style.width="7px";m.style.display="inline-block";this.set_mode(!1);this.set_size_text(80,25);2===B&&this.set_size_graphical(720,400,720,400);this.set_scale(q,r);this.timer()};this.make_screenshot=function(){const v=new Image;if(1===B||2===B)v.src=g.toDataURL("image/png");else{const t=[9,16],J=document.createElement("canvas");J.width=w*t[0];J.height=u*t[1];const M=J.getContext("2d");M.imageSmoothingEnabled=!1;M.font=window.getComputedStyle(l).font;
|
|
17
|
+
M.textBaseline="top";for(let R=0;R<u;R++)for(let Q=0;Q<w;Q++){const U=4*(R*w+Q),la=C[U+0],ha=C[U+3];M.fillStyle=c(C[U+2]);M.fillRect(Q*t[0],R*t[1],t[0],t[1]);M.fillStyle=c(ha);M.fillText(Tb[la],Q*t[0],R*t[1])}"none"!==m.style.display&&n<u&&p<w&&(M.fillStyle=m.style.backgroundColor,M.fillRect(p*t[0],n*t[1]+parseInt(m.style.marginTop,10),parseInt(m.style.width,10),parseInt(m.style.height,10)));v.src=J.toDataURL("image/png")}return v};this.put_char=function(v,t,J,M,R,Q){t=4*(v*w+t);C[t+0]=J;C[t+1]=M;
|
|
18
|
+
C[t+2]=R;C[t+3]=Q;E[v]=1};this.timer=function(){zb=requestAnimationFrame(()=>this.update_screen())};this.update_screen=function(){Ub||(0===B?this.update_text():1===B?this.update_graphical():this.update_graphical_text());this.timer()};this.update_text=function(){for(var v=0;v<u;v++)E[v]&&(this.text_update_row(v),E[v]=0)};this.update_graphical=function(){this.screen_fill_buffer()};this.update_graphical_text=function(){if(I){var v=performance.now();if(266<v-ic){wb=!wb;yb&&(E[n]=1);var t=4*w;for(let la=
|
|
19
|
+
0,ha=0;la<u;++la)if(E[la])ha+=t;else for(var J=0;J<w;++J,ha+=4)if(C[ha+1]&1){E[la]=1;ha+=t-4*J;break}ic=v}v=Ua.canvas;t=O.canvas;J=4*w;const R=w*ka,Q=T;let U=0;for(let la=0,ha=0,aa=0;la<u;++la,ha+=T){if(!E[la]){aa+=J;continue}++U;O.clearRect(0,Q,R,T);let Fa,Ga,Ma,Na;for(let ua=0;ua<R;ua+=ka,aa+=4){const jc=C[aa+0];var M=C[aa+1];const kc=C[aa+2],lc=C[aa+3],mc=M&2?vb:ub;M=(!(M&1)||wb)&&hc[(mc<<8)+jc];Ma!==kc&&(void 0!==Ma&&(I.fillStyle=c(Ma),I.fillRect(Na,ha,ua-Na,T)),Ma=kc,Na=ua);Fa!==lc&&(void 0!==
|
|
20
|
+
Fa&&(O.fillStyle=c(Fa),O.fillRect(Ga,0,ua-Ga,T)),Fa=lc,Ga=ua);M&&O.drawImage(v,jc*ka,mc*T,ka,T,ua,Q,ka,T)}O.fillStyle=c(Fa);O.fillRect(Ga,0,R-Ga,T);O.globalCompositeOperation="destination-in";O.drawImage(t,0,Q,R,T,0,0,R,T);O.globalCompositeOperation="source-over";I.fillStyle=c(Ma);I.fillRect(Na,ha,R-Na,T);I.drawImage(t,0,0,R,T,0,ha,R,T)}U&&(wb&&yb&&E[n]&&(I.fillStyle=c(C[4*(n*w+p)+3]),I.fillRect(p*ka,n*T+xb,ka,Sb-xb+1)),E.fill(0));U&&h.drawImage(I.canvas,0,0)}};this.destroy=function(){zb&&(cancelAnimationFrame(zb),
|
|
21
|
+
zb=0)};this.pause=function(){Ub=!0;m.classList.remove("blinking-cursor")};this.continue=function(){Ub=!1;m.classList.add("blinking-cursor")};this.clear_text_state=function(){vb=ub=u=w=T=ka=null};this.set_mode=function(v){B=v?1:a.use_graphical_text?2:0;0===B?(l.style.display="block",g.style.display="none"):(l.style.display="none",g.style.display="block",2===B&&E&&E.fill(1))};this.set_font_bitmap=function(v,t,J,M,R,Q){const U=J?16:t?9:8;if(T!==v||ka!==U||Qb!==t||Pb!==J||Rb!==M||Q)Q=ka!==U||T!==v,T=
|
|
22
|
+
v,ka=U,Qb=t,Pb=J,Rb=M,2===B&&(d(R),E.fill(1),Q&&this.set_size_graphical_text())};this.set_font_page=function(v,t){if(ub!==v||vb!==t)ub=v,vb=t,E.fill(1)};this.clear_screen=function(){h.fillStyle="#000";h.fillRect(0,0,g.width,g.height)};this.set_size_graphical_text=function(){if(Ua){var v=ka*w,t=T*u,J=2*T;I&&I.canvas.width===v&&I.canvas.height===t&&O.canvas.height===J||(I?(I.canvas.width=v,I.canvas.height=t,O.canvas.width=v,O.canvas.height=J):(I=(new OffscreenCanvas(v,t)).getContext("2d",{alpha:!1}),
|
|
23
|
+
O=(new OffscreenCanvas(v,J)).getContext("2d")),this.set_size_graphical(v,t,v,t),E.fill(1))}};this.set_size_text=function(v,t){if(v!==w||t!==u)if(E=new Int8Array(t),E.fill(1),C=new Int32Array(v*t*4),w=v,u=t,0===B){for(;l.childNodes.length>t;)l.removeChild(l.firstChild);for(;l.childNodes.length<t;)l.appendChild(document.createElement("div"));for(v=0;v<t;v++)this.text_update_row(v);e(l,q,r,!0)}else 2===B&&this.set_size_graphical_text()};this.set_size_graphical=function(v,t){g.style.display="block";g.width=
|
|
24
|
+
v;g.height=t;h.imageSmoothingEnabled=!1;x=640>=v&&2*v<window.innerWidth*window.devicePixelRatio&&2*t<window.innerHeight*window.devicePixelRatio?2:1;e(g,q*x,r*x,!1)};this.set_scale=function(v,t){q=v;r=t;e(l,q,r,!0);e(g,q*x,r*x,!1)};this.update_cursor_scanline=function(v,t,J){if(v!==xb||t!==Sb||J!==yb)0===B?J?(m.style.display="inline",m.style.height=t-v+"px",m.style.marginTop=v+"px"):m.style.display="none":2===B&&n<u&&(E[n]=1),xb=v,Sb=t,yb=J};this.update_cursor=function(v,t){if(v!==n||t!==p)v<u&&(E[v]=
|
|
25
|
+
1),n<u&&(E[n]=1),n=v,p=t};this.text_update_row=function(v){var t=4*v*w,J;var M=l.childNodes[v];var R=document.createElement("div");for(var Q=0;Q<w;){var U=document.createElement("span");var la=C[t+1]&1;var ha=C[t+2];var aa=C[t+3];la&&U.classList.add("blink");U.style.backgroundColor=c(ha);U.style.color=c(aa);for(J="";Q<w&&(C[t+1]&1)===la&&C[t+2]===ha&&C[t+3]===aa;)if(J+=Tb[C[t+0]],Q++,t+=4,v===n)if(Q===p)break;else if(Q===p+1){m.style.backgroundColor=U.style.color;R.appendChild(m);break}U.textContent=
|
|
26
|
+
J;R.appendChild(U)}M.parentNode.replaceChild(R,M)};this.update_buffer=function(v){for(const t of v)h.putImageData(t.image_data,t.screen_x-t.buffer_x,t.screen_y-t.buffer_y,t.buffer_x,t.buffer_y,t.buffer_width,t.buffer_height)};this.get_text_screen=function(){for(var v=[],t=0;t<u;t++)v.push(this.get_text_row(t));return v};this.get_text_row=function(v){var t=v*w*4;v=t+4*w;let J="";for(;t<v;t+=4)J+=Tb[C[t]];return J};this.init()}function z(a){this.buffer=a;this.byteLength=a.byteLength;this.onprogress=
|
|
27
|
+
this.onload=void 0}z.prototype.load=function(){this.onload&&this.onload({buffer:this.buffer})};z.prototype.get=function(a,b,c){c(new Uint8Array(this.buffer,a,b))};z.prototype.set=function(a,b,c){(new Uint8Array(this.buffer,a,b.byteLength)).set(b);c()};z.prototype.get_buffer=function(a){a(this.buffer)};z.prototype.get_state=function(){const a=[];a[0]=this.byteLength;a[1]=new Uint8Array(this.buffer);return a};z.prototype.set_state=function(a){this.byteLength=a[0];this.buffer=a[1].slice().buffer};function ya(a,
|
|
28
28
|
b,c){this.filename=a;this.byteLength=b;this.block_cache=new Map;this.block_cache_is_write=new Set;this.fixed_chunk_size=c;this.cache_reads=!!c;this.onprogress=this.onload=void 0}ya.prototype.load=async function(){void 0===this.byteLength&&(this.byteLength=await qa(this.filename));this.onload&&this.onload(Object.create(null))};ya.prototype.get_from_cache=function(a,b){var c=b/256;a/=256;for(var d=0;d<c;d++)if(!this.block_cache.get(a+d))return;if(1===c)return this.block_cache.get(a);b=new Uint8Array(b);
|
|
29
29
|
for(d=0;d<c;d++)b.set(this.block_cache.get(a+d),256*d);return b};ya.prototype.get=function(a,b,c,d){var e=this.get_from_cache(a,b);if(e)c(e);else{var f=a,g=b;this.fixed_chunk_size&&(f=a-a%this.fixed_chunk_size,g=Math.ceil((a-f+b)/this.fixed_chunk_size)*this.fixed_chunk_size);pa(this.filename,{done:function(h){h=new Uint8Array(h);this.handle_read(f,g,h);f===a&&g===b?c(h):c(h.subarray(a-f,a-f+b))}.bind(this),range:{start:f,length:g},signal:d?.signal})}};ya.prototype.set=function(a,b,c){a/=256;for(var d=
|
|
30
30
|
b.length/256,e=0;e<d;e++){var f=this.block_cache.get(a+e);if(void 0===f)f=b.slice(256*e,256*(e+1)),this.block_cache.set(a+e,f);else{const g=b.subarray(256*e,256*(e+1));f.set(g)}this.block_cache_is_write.add(a+e)}c()};ya.prototype.handle_read=function(a,b,c){a/=256;b/=256;for(var d=0;d<b;d++){const e=this.block_cache.get(a+d);e?c.set(e,256*d):this.cache_reads&&this.block_cache.set(a+d,c.slice(256*d,256*(d+1)))}};ya.prototype.get_buffer=function(a){a()};ya.prototype.get_state=function(){const a=[],
|
|
@@ -33,10 +33,10 @@ b=[];for(const [c,d]of this.block_cache)isFinite(c),this.block_cache_is_write.ha
|
|
|
33
33
|
this.fixed_chunk_size),m=new Uint8Array(l*this.fixed_chunk_size);let n=0;for(let p=0;p<l;p++){var f=(g+p)*this.fixed_chunk_size;e=this.partfile_alt_format?this.basename+(g+p+"").padStart(8,"0")+this.extension:this.basename+f+"-"+(f+this.fixed_chunk_size)+this.extension;(f=this.get_from_cache(f,this.fixed_chunk_size))?(m.set(f,p*this.fixed_chunk_size),n++,n===l&&c(m.subarray(h,h+b))):pa(e,{done:async function(q){q=new Uint8Array(q);this.is_zstd&&(q=await this.zstd_decompress(this.fixed_chunk_size,
|
|
34
34
|
q),q=new Uint8Array(q));m.set(q,p*this.fixed_chunk_size);this.handle_read((g+p)*this.fixed_chunk_size,this.fixed_chunk_size|0,q);n++;n===l&&c(m.subarray(h,h+b))}.bind(this),signal:d?.signal})}}else pa(this.basename+a+"-"+(a+b)+this.extension,{done:function(g){g=new Uint8Array(g);this.handle_read(a,b,g);c(g)}.bind(this),signal:d?.signal})};za.prototype.get_from_cache=ya.prototype.get_from_cache;za.prototype.set=ya.prototype.set;za.prototype.handle_read=ya.prototype.handle_read;za.prototype.get_state=
|
|
35
35
|
ya.prototype.get_state;za.prototype.set_state=ya.prototype.set_state;function Aa(a){this.file=a;this.byteLength=a.size;1073741824<a.size&&console.warn("SyncFileBuffer: Allocating buffer of "+(a.size>>20)+" MB ...");this.buffer=new ArrayBuffer(a.size);this.onprogress=this.onload=void 0}Aa.prototype.load=function(){this.load_next(0)};Aa.prototype.load_next=function(a){var b=new FileReader;b.onload=function(d){d=new Uint8Array(d.target.result);(new Uint8Array(this.buffer,a)).set(d);this.load_next(a+
|
|
36
|
-
4194304)}.bind(this);if(this.onprogress)this.onprogress({loaded:a,total:this.byteLength,lengthComputable:!0});if(a<this.byteLength){var c=this.file.slice(a,Math.min(a+4194304,this.byteLength));b.readAsArrayBuffer(c)}else this.file=void 0,this.onload&&this.onload({buffer:this.buffer})};Aa.prototype.get=
|
|
36
|
+
4194304)}.bind(this);if(this.onprogress)this.onprogress({loaded:a,total:this.byteLength,lengthComputable:!0});if(a<this.byteLength){var c=this.file.slice(a,Math.min(a+4194304,this.byteLength));b.readAsArrayBuffer(c)}else this.file=void 0,this.onload&&this.onload({buffer:this.buffer})};Aa.prototype.get=z.prototype.get;Aa.prototype.set=z.prototype.set;Aa.prototype.get_buffer=z.prototype.get_buffer;Aa.prototype.get_state=z.prototype.get_state;Aa.prototype.set_state=z.prototype.set_state;function Ba(a){this.file=
|
|
37
37
|
a;this.byteLength=a.size;this.block_cache=new Map;this.block_cache_is_write=new Set;this.onprogress=this.onload=void 0}Ba.prototype.load=function(){this.onload&&this.onload(Object.create(null))};Ba.prototype.get=function(a,b,c){var d=this.get_from_cache(a,b);d?c(d):(d=new FileReader,d.onload=function(e){e=new Uint8Array(e.target.result);this.handle_read(a,b,e);c(e)}.bind(this),d.readAsArrayBuffer(this.file.slice(a,a+b)))};Ba.prototype.get_from_cache=ya.prototype.get_from_cache;Ba.prototype.set=ya.prototype.set;
|
|
38
38
|
Ba.prototype.handle_read=ya.prototype.handle_read;Ba.prototype.get_state=ya.prototype.get_state;Ba.prototype.set_state=ya.prototype.set_state;Ba.prototype.get_buffer=function(a){a()};Ba.prototype.get_as_file=function(a){for(var b=[],c=Array.from(this.block_cache.keys()).sort(function(h,l){return h-l}),d=0,e=0;e<c.length;e++){var f=c[e],g=this.block_cache.get(f);f*=256;f!==d&&(b.push(this.file.slice(d,f)),d=f);b.push(g);d+=g.length}d!==this.file.size&&b.push(this.file.slice(d));return new File(b,a)};
|
|
39
|
-
function Ca(a,b){if(a.buffer instanceof ArrayBuffer)return new
|
|
39
|
+
function Ca(a,b){if(a.buffer instanceof ArrayBuffer)return new z(a.buffer);if("undefined"!==typeof File&&a.buffer instanceof File)return b=a.async,void 0===b&&(b=268435456<=a.buffer.size),b?new Ba(a.buffer):new Aa(a.buffer);if(a.url)return a.use_parts?new za(a.url,a.size,a.fixed_chunk_size,!1,b):new ya(a.url,a.size,a.fixed_chunk_size)}function A(a){this.cpu=a;this.channel_page=new Uint8Array(8);this.channel_pagehi=new Uint8Array(8);this.channel_addr=new Uint16Array(8);this.channel_addr_init=new Uint16Array(8);
|
|
40
40
|
this.channel_count=new Uint16Array(8);this.channel_count_init=new Uint16Array(8);this.channel_mask=new Uint8Array(8);this.channel_mode=new Uint8Array(8);this.unmask_listeners=[];this.lsb_msb_flipflop=0;a=a.io;a.register_write(0,this,this.port_addr_write.bind(this,0));a.register_write(2,this,this.port_addr_write.bind(this,1));a.register_write(4,this,this.port_addr_write.bind(this,2));a.register_write(6,this,this.port_addr_write.bind(this,3));a.register_write(1,this,this.port_count_write.bind(this,
|
|
41
41
|
0));a.register_write(3,this,this.port_count_write.bind(this,1));a.register_write(5,this,this.port_count_write.bind(this,2));a.register_write(7,this,this.port_count_write.bind(this,3));a.register_read(0,this,this.port_addr_read.bind(this,0));a.register_read(2,this,this.port_addr_read.bind(this,1));a.register_read(4,this,this.port_addr_read.bind(this,2));a.register_read(6,this,this.port_addr_read.bind(this,3));a.register_read(1,this,this.port_count_read.bind(this,0));a.register_read(3,this,this.port_count_read.bind(this,
|
|
42
42
|
1));a.register_read(5,this,this.port_count_read.bind(this,2));a.register_read(7,this,this.port_count_read.bind(this,3));a.register_write(192,this,this.port_addr_write.bind(this,4));a.register_write(196,this,this.port_addr_write.bind(this,5));a.register_write(200,this,this.port_addr_write.bind(this,6));a.register_write(204,this,this.port_addr_write.bind(this,7));a.register_write(194,this,this.port_count_write.bind(this,4));a.register_write(198,this,this.port_count_write.bind(this,5));a.register_write(202,
|
|
@@ -45,14 +45,14 @@ this,this.port_count_write.bind(this,6));a.register_write(206,this,this.port_cou
|
|
|
45
45
|
this,this.port_page_write.bind(this,7));a.register_read(135,this,this.port_page_read.bind(this,0));a.register_read(131,this,this.port_page_read.bind(this,1));a.register_read(129,this,this.port_page_read.bind(this,2));a.register_read(130,this,this.port_page_read.bind(this,3));a.register_read(143,this,this.port_page_read.bind(this,4));a.register_read(139,this,this.port_page_read.bind(this,5));a.register_read(137,this,this.port_page_read.bind(this,6));a.register_read(138,this,this.port_page_read.bind(this,
|
|
46
46
|
7));a.register_write(1159,this,this.port_pagehi_write.bind(this,0));a.register_write(1155,this,this.port_pagehi_write.bind(this,1));a.register_write(1153,this,this.port_pagehi_write.bind(this,2));a.register_write(1154,this,this.port_pagehi_write.bind(this,3));a.register_write(1163,this,this.port_pagehi_write.bind(this,5));a.register_write(1161,this,this.port_pagehi_write.bind(this,6));a.register_write(1162,this,this.port_pagehi_write.bind(this,7));a.register_read(1159,this,this.port_pagehi_read.bind(this,
|
|
47
47
|
0));a.register_read(1155,this,this.port_pagehi_read.bind(this,1));a.register_read(1153,this,this.port_pagehi_read.bind(this,2));a.register_read(1154,this,this.port_pagehi_read.bind(this,3));a.register_read(1163,this,this.port_pagehi_read.bind(this,5));a.register_read(1161,this,this.port_pagehi_read.bind(this,6));a.register_read(1162,this,this.port_pagehi_read.bind(this,7));a.register_write(10,this,this.port_singlemask_write.bind(this,0));a.register_write(212,this,this.port_singlemask_write.bind(this,
|
|
48
|
-
4));a.register_write(15,this,this.port_multimask_write.bind(this,0));a.register_write(222,this,this.port_multimask_write.bind(this,4));a.register_read(15,this,this.port_multimask_read.bind(this,0));a.register_read(222,this,this.port_multimask_read.bind(this,4));a.register_write(11,this,this.port_mode_write.bind(this,0));a.register_write(214,this,this.port_mode_write.bind(this,4));a.register_write(12,this,this.portC_write);a.register_write(216,this,this.portC_write)}
|
|
49
|
-
this.channel_pagehi,this.channel_addr,this.channel_addr_init,this.channel_count,this.channel_count_init,this.channel_mask,this.channel_mode,this.lsb_msb_flipflop]};
|
|
50
|
-
b,!1);this.channel_count_init[a]=this.flipflop_get(this.channel_count_init[a],b,!0)};
|
|
51
|
-
|
|
52
|
-
function(a){var b=0|this.channel_mask[a+0];b|=this.channel_mask[a+1]<<1;b|=this.channel_mask[a+2]<<2;b|=this.channel_mask[a+3]<<3;y(b);return b};
|
|
53
|
-
a)};
|
|
54
|
-
c<h?(f=Math.floor(c/g),h=f*g,m=!0):c>h&&(n=!0);b+h>a.byteLength?e(!0):(this.channel_addr[d]+=f,this.channel_count[d]-=f,!m&&p&&(this.channel_addr[d]=this.channel_addr_init[d],this.channel_count[d]=this.channel_count_init[d]),a.set(b,this.cpu.mem8.subarray(l,l+h),()=>{n&&p?this.do_write(a,b+h,c-h,d,e):e(!1)}))};
|
|
55
|
-
this.channel_count[a]+1;5<=a&&(b*=2);return b};
|
|
48
|
+
4));a.register_write(15,this,this.port_multimask_write.bind(this,0));a.register_write(222,this,this.port_multimask_write.bind(this,4));a.register_read(15,this,this.port_multimask_read.bind(this,0));a.register_read(222,this,this.port_multimask_read.bind(this,4));a.register_write(11,this,this.port_mode_write.bind(this,0));a.register_write(214,this,this.port_mode_write.bind(this,4));a.register_write(12,this,this.portC_write);a.register_write(216,this,this.portC_write)}A.prototype.get_state=function(){return[this.channel_page,
|
|
49
|
+
this.channel_pagehi,this.channel_addr,this.channel_addr_init,this.channel_count,this.channel_count_init,this.channel_mask,this.channel_mode,this.lsb_msb_flipflop]};A.prototype.set_state=function(a){this.channel_page=a[0];this.channel_pagehi=a[1];this.channel_addr=a[2];this.channel_addr_init=a[3];this.channel_count=a[4];this.channel_count_init=a[5];this.channel_mask=a[6];this.channel_mode=a[7];this.lsb_msb_flipflop=a[8]};A.prototype.port_count_write=function(a,b){y(b);this.channel_count[a]=this.flipflop_get(this.channel_count[a],
|
|
50
|
+
b,!1);this.channel_count_init[a]=this.flipflop_get(this.channel_count_init[a],b,!0)};A.prototype.port_count_read=function(a){y(this.channel_count[a]);return this.flipflop_read(this.channel_count[a])};A.prototype.port_addr_write=function(a,b){y(b);this.channel_addr[a]=this.flipflop_get(this.channel_addr[a],b,!1);this.channel_addr_init[a]=this.flipflop_get(this.channel_addr_init[a],b,!0)};A.prototype.port_addr_read=function(a){y(this.channel_addr[a]);return this.flipflop_read(this.channel_addr[a])};
|
|
51
|
+
A.prototype.port_pagehi_write=function(a,b){y(b);this.channel_pagehi[a]=b};A.prototype.port_pagehi_read=function(a){return this.channel_pagehi[a]};A.prototype.port_page_write=function(a,b){y(b);this.channel_page[a]=b};A.prototype.port_page_read=function(a){return this.channel_page[a]};A.prototype.port_singlemask_write=function(a,b){this.update_mask((b&3)+a,b&4?1:0)};A.prototype.port_multimask_write=function(a,b){y(b);for(var c=0;4>c;c++)this.update_mask(a+c,b&1<<c)};A.prototype.port_multimask_read=
|
|
52
|
+
function(a){var b=0|this.channel_mask[a+0];b|=this.channel_mask[a+1]<<1;b|=this.channel_mask[a+2]<<2;b|=this.channel_mask[a+3]<<3;y(b);return b};A.prototype.port_mode_write=function(a,b){a=(b&3)+a;y(b);this.channel_mode[a]=b};A.prototype.portC_write=function(){this.lsb_msb_flipflop=0};A.prototype.on_unmask=function(a,b){this.unmask_listeners.push({fn:a,this_value:b})};A.prototype.update_mask=function(a,b){if(this.channel_mask[a]!==b&&(this.channel_mask[a]=b,!b))for(b=0;b<this.unmask_listeners.length;b++)this.unmask_listeners[b].fn.call(this.unmask_listeners[b].this_value,
|
|
53
|
+
a)};A.prototype.do_read=function(a,b,c,d,e){var f=this.count_get_8bit(d),g=this.address_get_8bit(d);va("to "+y(g)+" len "+y(f),16);c<f&&va("DMA should read more than provided: "+y(c)+" "+y(f),16);if(b+f>a.byteLength)e(!0);else{var h=this.cpu;this.channel_addr[d]+=f;a.get(b,f,function(l){h.write_blob(l,g);e(!1)})}};A.prototype.do_write=function(a,b,c,d,e){var f=this.channel_count[d]+1&65535,g=5<=d?2:1,h=f*g,l=this.address_get_8bit(d),m=!1,n=!1,p=this.channel_mode[d]&16;va("to "+y(l)+" len "+y(h),16);
|
|
54
|
+
c<h?(f=Math.floor(c/g),h=f*g,m=!0):c>h&&(n=!0);b+h>a.byteLength?e(!0):(this.channel_addr[d]+=f,this.channel_count[d]-=f,!m&&p&&(this.channel_addr[d]=this.channel_addr_init[d],this.channel_count[d]=this.channel_count_init[d]),a.set(b,this.cpu.mem8.subarray(l,l+h),()=>{n&&p?this.do_write(a,b+h,c-h,d,e):e(!1)}))};A.prototype.address_get_8bit=function(a){var b=this.channel_addr[a];5<=a&&(b<<=1);b=b&65535|this.channel_page[a]<<16;return b|=this.channel_pagehi[a]<<24};A.prototype.count_get_8bit=function(a){var b=
|
|
55
|
+
this.channel_count[a]+1;5<=a&&(b*=2);return b};A.prototype.flipflop_get=function(a,b,c){c||(this.lsb_msb_flipflop^=1);return this.lsb_msb_flipflop?a&-256|b:a&-65281|b<<8};A.prototype.flipflop_read=function(a){return(this.lsb_msb_flipflop^=1)?a&255:a>>8&255};function Da(a){this.ports=[];this.cpu=a;for(var b=0;65536>b;b++)this.ports[b]=this.create_empty_entry();var c=a.memory_size[0];for(b=0;b<<17<c;b++)a.memory_map_read8[b]=a.memory_map_write8[b]=void 0,a.memory_map_read32[b]=a.memory_map_write32[b]=
|
|
56
56
|
void 0;this.mmap_register(c,4294967296-c,function(d){y(d>>>0,8);return 255},function(d,e){y(d>>>0,8);y(e,2)},function(d){y(d>>>0,8);return-1},function(d,e){y(d>>>0,8);y(e>>>0,8)})}Da.prototype.create_empty_entry=function(){return{read8:this.empty_port_read8,read16:this.empty_port_read16,read32:this.empty_port_read32,write8:this.empty_port_write,write16:this.empty_port_write,write32:this.empty_port_write,device:void 0}};Da.prototype.empty_port_read8=function(){return 255};Da.prototype.empty_port_read16=
|
|
57
57
|
function(){return 65535};Da.prototype.empty_port_read32=function(){return-1};Da.prototype.empty_port_write=function(){};Da.prototype.register_read=function(a,b,c,d,e){c&&(this.ports[a].read8=c);d&&(this.ports[a].read16=d);e&&(this.ports[a].read32=e);this.ports[a].device=b};Da.prototype.register_write=function(a,b,c,d,e){c&&(this.ports[a].write8=c);d&&(this.ports[a].write16=d);e&&(this.ports[a].write32=e);this.ports[a].device=b};Da.prototype.register_read_consecutive=function(a,b,c,d,e,f){function g(){return c.call(this)|
|
|
58
58
|
d.call(this)<<8}function h(){return e.call(this)|f.call(this)<<8}function l(){return c.call(this)|d.call(this)<<8|e.call(this)<<16|f.call(this)<<24}e&&f?(this.register_read(a,b,c,g,l),this.register_read(a+1,b,d),this.register_read(a+2,b,e,h),this.register_read(a+3,b,f)):(this.register_read(a,b,c,g),this.register_read(a+1,b,d))};Da.prototype.register_write_consecutive=function(a,b,c,d,e,f){function g(m){c.call(this,m&255);d.call(this,m>>8&255)}function h(m){e.call(this,m&255);f.call(this,m>>8&255)}
|
|
@@ -63,45 +63,45 @@ a);(0>b||256<=b)&&y(a);return b};Da.prototype.port_read16=function(a){var b=this
|
|
|
63
63
|
13:"PORT_DMA1_MASTER_CLEAR",32:"PORT_PIC1_CMD",33:"PORT_PIC1_DATA",64:"PORT_PIT_COUNTER0",65:"PORT_PIT_COUNTER1",66:"PORT_PIT_COUNTER2",67:"PORT_PIT_MODE",96:"PORT_PS2_DATA",97:"PORT_PS2_CTRLB",100:"PORT_PS2_STATUS",112:"PORT_CMOS_INDEX",113:"PORT_CMOS_DATA",128:"PORT_DIAG",129:"PORT_DMA_PAGE_2",146:"PORT_A20",160:"PORT_PIC2_CMD",161:"PORT_PIC2_DATA",178:"PORT_SMI_CMD",179:"PORT_SMI_STATUS",212:"PORT_DMA2_MASK_REG",214:"PORT_DMA2_MODE_REG",218:"PORT_DMA2_MASTER_CLEAR",240:"PORT_MATH_CLEAR",368:"PORT_ATA2_CMD_BASE",
|
|
64
64
|
496:"PORT_ATA1_CMD_BASE",632:"PORT_LPT2",744:"PORT_SERIAL4",760:"PORT_SERIAL2",884:"PORT_ATA2_CTRL_BASE",888:"PORT_LPT1",1E3:"PORT_SERIAL3",1008:"PORT_FD_BASE",1010:"PORT_FD_DOR",1012:"PORT_FD_STATUS",1013:"PORT_FD_DATA",1014:"PORT_HD_DATA",1015:"PORT_FD_DIR",1016:"PORT_SERIAL1",3320:"PORT_PCI_CMD",3321:"PORT_PCI_REBOOT",3324:"PORT_PCI_DATA",1026:"PORT_BIOS_DEBUG",1296:"PORT_QEMU_CFG_CTL",1297:"PORT_QEMU_CFG_DATA",45056:"PORT_ACPI_PM_BASE",45312:"PORT_SMB_BASE",35072:"PORT_BIOS_APM"};Da.prototype.get_port_description=
|
|
65
65
|
function(a){return Ea[a]?" ("+Ea[a]+")":""};var Ha={};function Ia(){this.listeners={};this.pair=void 0}Ia.prototype.register=function(a,b,c){var d=this.listeners[a];void 0===d&&(d=this.listeners[a]=[]);d.push({fn:b,this_value:c})};Ia.prototype.unregister=function(a,b){var c=this.listeners[a];void 0!==c&&(this.listeners[a]=c.filter(function(d){return d.fn!==b}))};Ia.prototype.send=function(a,b){if(this.pair&&(a=this.pair.listeners[a],void 0!==a))for(var c=0;c<a.length;c++){var d=a[c];d.fn.call(d.this_value,
|
|
66
|
-
b)}};Ia.prototype.send_async=function(a,b){setTimeout(this.send.bind(this,a,b),0)};Ha.create=function(){var a=new Ia,b=new Ia;a.pair=b;b.pair=a;return[a,b]};var Ja=new Uint8Array(256),Ka=[],La=[],Oa=[],Pa=new Uint8Array(256),Qa=[];function
|
|
66
|
+
b)}};Ia.prototype.send_async=function(a,b){setTimeout(this.send.bind(this,a,b),0)};Ha.create=function(){var a=new Ia,b=new Ia;a.pair=b;b.pair=a;return[a,b]};var Ja=new Uint8Array(256),Ka=[],La=[],Oa=[],Pa=new Uint8Array(256),Qa=[];function D(a,b){this.cpu=a;this.bus=b;this.write_buffer=new ma(64);this.read_buffer=new ma(64);this.mixer_current_address=this.command_size=this.command=this.read_buffer_lastvalue=0;this.mixer_registers=new Uint8Array(256);this.mixer_reset();this.dummy_speaker_enabled=!1;
|
|
67
67
|
this.test_register=0;this.dsp_signed=this.dsp_16bit=this.dsp_stereo=this.dsp_highspeed=!1;this.dac_buffers=[new na(65536),new na(65536)];this.dma=a.devices.dma;this.dma_channel=this.dma_irq=this.dma_bytes_block=this.dma_bytes_left=this.dma_bytes_count=this.dma_sample_count=0;this.dma_channel_8bit=1;this.dma_channel_16bit=5;this.dma_autoinit=!1;this.dma_buffer=new ArrayBuffer(65536);this.dma_buffer_int8=new Int8Array(this.dma_buffer);this.dma_buffer_uint8=new Uint8Array(this.dma_buffer);this.dma_buffer_int16=
|
|
68
|
-
new Int16Array(this.dma_buffer);this.dma_buffer_uint16=new Uint16Array(this.dma_buffer);this.dma_syncbuffer=new
|
|
68
|
+
new Int16Array(this.dma_buffer);this.dma_buffer_uint16=new Uint16Array(this.dma_buffer);this.dma_syncbuffer=new z(this.dma_buffer);this.dma_paused=this.dma_waiting_transfer=!1;this.sampling_rate=22050;b.send("dac-tell-sampling-rate",this.sampling_rate);this.bytes_per_sample=1;this.e2_value=170;this.e2_count=0;this.asp_registers=new Uint8Array(256);this.mpu_read_buffer=new ma(64);this.fm_current_address1=this.fm_current_address0=this.mpu_read_buffer_lastvalue=0;this.fm_waveform_select_enable=!1;this.irq=
|
|
69
69
|
5;this.irq_triggered=new Uint8Array(16);a.io.register_read_consecutive(544,this,this.port2x0_read,this.port2x1_read,this.port2x2_read,this.port2x3_read);a.io.register_read_consecutive(904,this,this.port2x0_read,this.port2x1_read);a.io.register_read_consecutive(548,this,this.port2x4_read,this.port2x5_read);a.io.register_read(550,this,this.port2x6_read);a.io.register_read(551,this,this.port2x7_read);a.io.register_read(552,this,this.port2x8_read);a.io.register_read(553,this,this.port2x9_read);a.io.register_read(554,
|
|
70
70
|
this,this.port2xA_read);a.io.register_read(555,this,this.port2xB_read);a.io.register_read(556,this,this.port2xC_read);a.io.register_read(557,this,this.port2xD_read);a.io.register_read_consecutive(558,this,this.port2xE_read,this.port2xF_read);a.io.register_write_consecutive(544,this,this.port2x0_write,this.port2x1_write,this.port2x2_write,this.port2x3_write);a.io.register_write_consecutive(904,this,this.port2x0_write,this.port2x1_write);a.io.register_write_consecutive(548,this,this.port2x4_write,this.port2x5_write);
|
|
71
71
|
a.io.register_write(550,this,this.port2x6_write);a.io.register_write(551,this,this.port2x7_write);a.io.register_write_consecutive(552,this,this.port2x8_write,this.port2x9_write);a.io.register_write(554,this,this.port2xA_write);a.io.register_write(555,this,this.port2xB_write);a.io.register_write(556,this,this.port2xC_write);a.io.register_write(557,this,this.port2xD_write);a.io.register_write(558,this,this.port2xE_write);a.io.register_write(559,this,this.port2xF_write);a.io.register_read_consecutive(816,
|
|
72
|
-
this,this.port3x0_read,this.port3x1_read);a.io.register_write_consecutive(816,this,this.port3x0_write,this.port3x1_write);this.dma.on_unmask(this.dma_on_unmask,this);b.register("dac-request-data",function(){this.dac_handle_request()},this);b.register("speaker-has-initialized",function(){this.mixer_reset()},this);b.send("speaker-confirm-initialized");this.dsp_reset()}
|
|
72
|
+
this,this.port3x0_read,this.port3x1_read);a.io.register_write_consecutive(816,this,this.port3x0_write,this.port3x1_write);this.dma.on_unmask(this.dma_on_unmask,this);b.register("dac-request-data",function(){this.dac_handle_request()},this);b.register("speaker-has-initialized",function(){this.mixer_reset()},this);b.send("speaker-confirm-initialized");this.dsp_reset()}D.prototype.dsp_reset=function(){this.write_buffer.clear();this.read_buffer.clear();this.command_size=this.command=0;this.dummy_speaker_enabled=
|
|
73
73
|
!1;this.test_register=0;this.dsp_signed=this.dsp_16bit=this.dsp_stereo=this.dsp_highspeed=!1;this.dac_buffers[0].clear();this.dac_buffers[1].clear();this.dma_channel=this.dma_irq=this.dma_bytes_block=this.dma_bytes_left=this.dma_bytes_count=this.dma_sample_count=0;this.dma_autoinit=!1;this.dma_buffer_uint8.fill(0);this.dma_paused=this.dma_waiting_transfer=!1;this.e2_value=170;this.e2_count=0;this.sampling_rate=22050;this.bytes_per_sample=1;this.lower_irq(1);this.irq_triggered.fill(0);this.asp_registers.fill(0);
|
|
74
|
-
this.asp_registers[5]=1;this.asp_registers[9]=248};
|
|
75
|
-
this.dma_channel;a[21]=this.dma_channel_8bit;a[22]=this.dma_channel_16bit;a[23]=this.dma_autoinit;a[24]=this.dma_buffer_uint8;a[25]=this.dma_waiting_transfer;a[26]=this.dma_paused;a[27]=this.sampling_rate;a[28]=this.bytes_per_sample;a[29]=this.e2_value;a[30]=this.e2_count;a[31]=this.asp_registers;a[33]=this.mpu_read_buffer_last_value;a[34]=this.irq;a[35]=this.irq_triggered;return a};
|
|
74
|
+
this.asp_registers[5]=1;this.asp_registers[9]=248};D.prototype.get_state=function(){var a=[];a[2]=this.read_buffer_lastvalue;a[3]=this.command;a[4]=this.command_size;a[5]=this.mixer_current_address;a[6]=this.mixer_registers;a[7]=this.dummy_speaker_enabled;a[8]=this.test_register;a[9]=this.dsp_highspeed;a[10]=this.dsp_stereo;a[11]=this.dsp_16bit;a[12]=this.dsp_signed;a[15]=this.dma_sample_count;a[16]=this.dma_bytes_count;a[17]=this.dma_bytes_left;a[18]=this.dma_bytes_block;a[19]=this.dma_irq;a[20]=
|
|
75
|
+
this.dma_channel;a[21]=this.dma_channel_8bit;a[22]=this.dma_channel_16bit;a[23]=this.dma_autoinit;a[24]=this.dma_buffer_uint8;a[25]=this.dma_waiting_transfer;a[26]=this.dma_paused;a[27]=this.sampling_rate;a[28]=this.bytes_per_sample;a[29]=this.e2_value;a[30]=this.e2_count;a[31]=this.asp_registers;a[33]=this.mpu_read_buffer_last_value;a[34]=this.irq;a[35]=this.irq_triggered;return a};D.prototype.set_state=function(a){this.read_buffer_lastvalue=a[2];this.command=a[3];this.command_size=a[4];this.mixer_current_address=
|
|
76
76
|
a[5];this.mixer_registers=a[6];this.mixer_full_update();this.dummy_speaker_enabled=a[7];this.test_register=a[8];this.dsp_highspeed=a[9];this.dsp_stereo=a[10];this.dsp_16bit=a[11];this.dsp_signed=a[12];this.dma_sample_count=a[15];this.dma_bytes_count=a[16];this.dma_bytes_left=a[17];this.dma_bytes_block=a[18];this.dma_irq=a[19];this.dma_channel=a[20];this.dma_channel_8bit=a[21];this.dma_channel_16bit=a[22];this.dma_autoinit=a[23];this.dma_buffer_uint8=a[24];this.dma_waiting_transfer=a[25];this.dma_paused=
|
|
77
|
-
a[26];this.sampling_rate=a[27];this.bytes_per_sample=a[28];this.e2_value=a[29];this.e2_count=a[30];this.asp_registers=a[31];this.mpu_read_buffer_last_value=a[33];this.irq=a[34];this.irq_triggered=a[35];this.dma_buffer=this.dma_buffer_uint8.buffer;this.dma_buffer_int8=new Int8Array(this.dma_buffer);this.dma_buffer_int16=new Int16Array(this.dma_buffer);this.dma_buffer_uint16=new Uint16Array(this.dma_buffer);this.dma_syncbuffer=new
|
|
78
|
-
|
|
79
|
-
function(){return 255};
|
|
80
|
-
!this.dsp_highspeed)<<7|127};
|
|
81
|
-
a,1,this.fm_current_address1)};
|
|
82
|
-
|
|
83
|
-
y(this.mpu_read_buffer_lastvalue);return this.mpu_read_buffer_lastvalue};
|
|
84
|
-
function(){y(this.command)};function
|
|
85
|
-
this.dac_buffers[1].push(a);this.bus.send("dac-enable")});
|
|
86
|
-
this.read_buffer.push(127)});
|
|
87
|
-
this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_signed=!1;this.dsp_highspeed=!0;this.dsp_16bit=!1;this.dma_transfer_start()});
|
|
88
|
-
|
|
89
|
-
0,function(){this.dma_paused=!1;this.bus.send("dac-enable")});
|
|
90
|
-
this.read_buffer.push(5)});
|
|
91
|
-
7;Ta[55]=56;
|
|
92
|
-
y(a);this.mixer_registers[this.mixer_current_address]=a};
|
|
93
|
-
0;this.mixer_registers[57]=0;this.mixer_registers[59]=0;this.mixer_registers[60]=31;this.mixer_registers[61]=21;this.mixer_registers[62]=11;this.mixer_registers[63]=0;this.mixer_registers[64]=0;this.mixer_registers[65]=0;this.mixer_registers[66]=0;this.mixer_registers[67]=0;this.mixer_registers[68]=128;this.mixer_registers[69]=128;this.mixer_registers[70]=128;this.mixer_registers[71]=128;this.mixer_full_update()};
|
|
94
|
-
this.mixer_write(a,this.mixer_registers[a])};function Va(a,b){b||(b=
|
|
77
|
+
a[26];this.sampling_rate=a[27];this.bytes_per_sample=a[28];this.e2_value=a[29];this.e2_count=a[30];this.asp_registers=a[31];this.mpu_read_buffer_last_value=a[33];this.irq=a[34];this.irq_triggered=a[35];this.dma_buffer=this.dma_buffer_uint8.buffer;this.dma_buffer_int8=new Int8Array(this.dma_buffer);this.dma_buffer_int16=new Int16Array(this.dma_buffer);this.dma_buffer_uint16=new Uint16Array(this.dma_buffer);this.dma_syncbuffer=new z(this.dma_buffer);this.dma_paused?this.bus.send("dac-disable"):this.bus.send("dac-enable")};
|
|
78
|
+
D.prototype.port2x0_read=function(){return 255};D.prototype.port2x1_read=function(){return 255};D.prototype.port2x2_read=function(){return 255};D.prototype.port2x3_read=function(){return 255};D.prototype.port2x4_read=function(){return this.mixer_current_address};D.prototype.port2x5_read=function(){return this.mixer_read(this.mixer_current_address)};D.prototype.port2x6_read=function(){return 255};D.prototype.port2x7_read=function(){return 255};D.prototype.port2x8_read=function(){return 255};D.prototype.port2x9_read=
|
|
79
|
+
function(){return 255};D.prototype.port2xA_read=function(){this.read_buffer.length&&(this.read_buffer_lastvalue=this.read_buffer.shift());y(this.read_buffer_lastvalue);String.fromCharCode(this.read_buffer_lastvalue);return this.read_buffer_lastvalue};D.prototype.port2xB_read=function(){return 255};D.prototype.port2xC_read=function(){return 127};D.prototype.port2xD_read=function(){return 255};D.prototype.port2xE_read=function(){this.irq_triggered[1]&&this.lower_irq(1);return(this.read_buffer.length&&
|
|
80
|
+
!this.dsp_highspeed)<<7|127};D.prototype.port2xF_read=function(){this.lower_irq(2);return 0};D.prototype.port2x0_write=function(a){y(a);this.fm_current_address0=0};D.prototype.port2x1_write=function(a){y(a);var b=Qa[this.fm_current_address0];b||(b=this.fm_default_write);b.call(this,a,0,this.fm_current_address0)};D.prototype.port2x2_write=function(a){y(a);this.fm_current_address1=0};D.prototype.port2x3_write=function(a){y(a);var b=Qa[this.fm_current_address1];b||(b=this.fm_default_write);b.call(this,
|
|
81
|
+
a,1,this.fm_current_address1)};D.prototype.port2x4_write=function(a){y(a);this.mixer_current_address=a};D.prototype.port2x5_write=function(a){y(a);this.mixer_write(this.mixer_current_address,a)};D.prototype.port2x6_write=function(a){y(a);this.dsp_highspeed?this.dsp_highspeed=!1:a&&this.dsp_reset();this.read_buffer.clear();this.read_buffer.push(170)};D.prototype.port2x7_write=function(){};D.prototype.port2x8_write=function(){};D.prototype.port2x9_write=function(){};D.prototype.port2xA_write=function(){};
|
|
82
|
+
D.prototype.port2xB_write=function(){};D.prototype.port2xC_write=function(a){0===this.command?(y(a),this.command=a,this.write_buffer.clear(),this.command_size=Ja[a]):(y(a),this.write_buffer.push(a));this.write_buffer.length>=this.command_size&&this.command_do()};D.prototype.port2xD_write=function(){};D.prototype.port2xE_write=function(){};D.prototype.port2xF_write=function(){};D.prototype.port3x0_read=function(){this.mpu_read_buffer.length&&(this.mpu_read_buffer_lastvalue=this.mpu_read_buffer.shift());
|
|
83
|
+
y(this.mpu_read_buffer_lastvalue);return this.mpu_read_buffer_lastvalue};D.prototype.port3x0_write=function(a){y(a)};D.prototype.port3x1_read=function(){return 0|128*!this.mpu_read_buffer.length};D.prototype.port3x1_write=function(a){y(a);255===a&&(this.mpu_read_buffer.clear(),this.mpu_read_buffer.push(254))};D.prototype.command_do=function(){var a=Ka[this.command];a||(a=this.dsp_default_handler);a.call(this);this.command_size=this.command=0;this.write_buffer.clear()};D.prototype.dsp_default_handler=
|
|
84
|
+
function(){y(this.command)};function F(a,b,c){c||(c=D.prototype.dsp_default_handler);for(var d=0;d<a.length;d++)Ja[a[d]]=b,Ka[a[d]]=c}function Ra(a){for(var b=[],c=0;16>c;c++)b.push(a+c);return b}F([14],2,function(){this.asp_registers[this.write_buffer.shift()]=this.write_buffer.shift()});F([15],1,function(){this.read_buffer.clear();this.read_buffer.push(this.asp_registers[this.write_buffer.shift()])});F([16],1,function(){var a=this.write_buffer.shift();a=Sa(a/127.5+-1,-1,1);this.dac_buffers[0].push(a);
|
|
85
|
+
this.dac_buffers[1].push(a);this.bus.send("dac-enable")});F([20,21],2,function(){this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dsp_highspeed=this.dsp_16bit=this.dsp_signed=this.dma_autoinit=!1;this.dma_transfer_size_set();this.dma_transfer_start()});F([22],2);F([23],2);F([28],0,function(){this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_highspeed=this.dsp_16bit=this.dsp_signed=!1;this.dma_transfer_start()});F([31],0);F([32],0,function(){this.read_buffer.clear();
|
|
86
|
+
this.read_buffer.push(127)});F([36],2);F([44],0);F([48],0);F([49],0);F([52],0);F([53],0);F([54],0);F([55],0);F([56],0);F([64],1,function(){this.sampling_rate_change(1E6/(256-this.write_buffer.shift())/this.get_channel_count())});F([65,66],2,function(){this.sampling_rate_change(this.write_buffer.shift()<<8|this.write_buffer.shift())});F([72],2,function(){this.dma_transfer_size_set()});F([116],2);F([117],2);F([118],2);F([119],2);F([125],0);F([127],0);F([128],2);F([144],0,function(){this.dma_irq=1;this.dma_channel=
|
|
87
|
+
this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_signed=!1;this.dsp_highspeed=!0;this.dsp_16bit=!1;this.dma_transfer_start()});F([145],0);F([152],0);F([153],0);F([160],0);F([168],0);F(Ra(176),3,function(){if(this.command&8)this.dsp_default_handler();else{var a=this.write_buffer.shift();this.dma_irq=2;this.dma_channel=this.dma_channel_16bit;this.dma_autoinit=!!(this.command&4);this.dsp_signed=!!(a&16);this.dsp_stereo=!!(a&32);this.dsp_16bit=!0;this.dma_transfer_size_set();this.dma_transfer_start()}});
|
|
88
|
+
F(Ra(192),3,function(){if(this.command&8)this.dsp_default_handler();else{var a=this.write_buffer.shift();this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!!(this.command&4);this.dsp_signed=!!(a&16);this.dsp_stereo=!!(a&32);this.dsp_16bit=!1;this.dma_transfer_size_set();this.dma_transfer_start()}});F([208],0,function(){this.dma_paused=!0;this.bus.send("dac-disable")});F([209],0,function(){this.dummy_speaker_enabled=!0});F([211],0,function(){this.dummy_speaker_enabled=!1});F([212],
|
|
89
|
+
0,function(){this.dma_paused=!1;this.bus.send("dac-enable")});F([213],0,function(){this.dma_paused=!0;this.bus.send("dac-disable")});F([214],0,function(){this.dma_paused=!1;this.bus.send("dac-enable")});F([216],0,function(){this.read_buffer.clear();this.read_buffer.push(255*this.dummy_speaker_enabled)});F([217,218],0,function(){this.dma_autoinit=!1});F([224],1,function(){this.read_buffer.clear();this.read_buffer.push(~this.write_buffer.shift())});F([225],0,function(){this.read_buffer.clear();this.read_buffer.push(4);
|
|
90
|
+
this.read_buffer.push(5)});F([226],1);F([227],0,function(){this.read_buffer.clear();for(var a=0;44>a;a++)this.read_buffer.push("COPYRIGHT (C) CREATIVE TECHNOLOGY LTD, 1992.".charCodeAt(a));this.read_buffer.push(0)});F([228],1,function(){this.test_register=this.write_buffer.shift()});F([232],0,function(){this.read_buffer.clear();this.read_buffer.push(this.test_register)});F([242],0,function(){this.raise_irq(1)});F([243],0,function(){this.raise_irq(2)});var Ta=new Uint8Array(256);Ta[14]=255;Ta[15]=
|
|
91
|
+
7;Ta[55]=56;F([249],1,function(){var a=this.write_buffer.shift();this.read_buffer.clear();this.read_buffer.push(Ta[a])});D.prototype.mixer_read=function(a){var b=La[a];b?b=b.call(this):(b=this.mixer_registers[a],y(a),y(b));return b};D.prototype.mixer_write=function(a,b){var c=Oa[a];c?c.call(this,b):(y(a),y(b))};D.prototype.mixer_default_read=function(){y(this.mixer_current_address);return this.mixer_registers[this.mixer_current_address]};D.prototype.mixer_default_write=function(a){y(this.mixer_current_address);
|
|
92
|
+
y(a);this.mixer_registers[this.mixer_current_address]=a};D.prototype.mixer_reset=function(){this.mixer_registers[4]=204;this.mixer_registers[34]=204;this.mixer_registers[38]=204;this.mixer_registers[40]=0;this.mixer_registers[46]=0;this.mixer_registers[10]=0;this.mixer_registers[48]=192;this.mixer_registers[49]=192;this.mixer_registers[50]=192;this.mixer_registers[51]=192;this.mixer_registers[52]=192;this.mixer_registers[53]=192;this.mixer_registers[54]=0;this.mixer_registers[55]=0;this.mixer_registers[56]=
|
|
93
|
+
0;this.mixer_registers[57]=0;this.mixer_registers[59]=0;this.mixer_registers[60]=31;this.mixer_registers[61]=21;this.mixer_registers[62]=11;this.mixer_registers[63]=0;this.mixer_registers[64]=0;this.mixer_registers[65]=0;this.mixer_registers[66]=0;this.mixer_registers[67]=0;this.mixer_registers[68]=128;this.mixer_registers[69]=128;this.mixer_registers[70]=128;this.mixer_registers[71]=128;this.mixer_full_update()};D.prototype.mixer_full_update=function(){for(var a=1;a<this.mixer_registers.length;a++)Pa[a]||
|
|
94
|
+
this.mixer_write(a,this.mixer_registers[a])};function Va(a,b){b||(b=D.prototype.mixer_default_read);La[a]=b}function Wa(a,b){b||(b=D.prototype.mixer_default_write);Oa[a]=b}function Xa(a,b,c){Pa[a]=1;La[a]=function(){return this.mixer_registers[b]&240|this.mixer_registers[c]>>>4};Oa[a]=function(d){this.mixer_registers[a]=d;var e=d<<4&240|this.mixer_registers[c]&15;this.mixer_write(b,d&240|this.mixer_registers[b]&15);this.mixer_write(c,e)}}function Ya(a,b,c){La[a]=D.prototype.mixer_default_read;Oa[a]=
|
|
95
95
|
function(d){this.mixer_registers[a]=d;this.bus.send("mixer-volume",[b,c,(d>>>2)-62])}}Va(0,function(){this.mixer_reset();return 0});Wa(0);Xa(4,50,51);Xa(34,48,49);Xa(38,52,53);Xa(40,54,55);Xa(46,56,57);Ya(48,0,0);Ya(49,0,1);Ya(50,2,0);Ya(51,2,1);Va(59);Wa(59,function(a){this.mixer_registers[59]=a;this.bus.send("mixer-volume",[1,2,6*(a>>>6)-18])});Va(65);Wa(65,function(a){this.mixer_registers[65]=a;this.bus.send("mixer-gain-left",6*(a>>>6))});Va(66);Wa(66,function(a){this.mixer_registers[66]=a;this.bus.send("mixer-gain-right",
|
|
96
96
|
6*(a>>>6))});Va(68);Wa(68,function(a){this.mixer_registers[68]=a;a>>>=3;this.bus.send("mixer-treble-left",a-(16>a?14:16))});Va(69);Wa(69,function(a){this.mixer_registers[69]=a;a>>>=3;this.bus.send("mixer-treble-right",a-(16>a?14:16))});Va(70);Wa(70,function(a){this.mixer_registers[70]=a;a>>>=3;this.bus.send("mixer-bass-right",a-(16>a?14:16))});Va(71);Wa(71,function(a){this.mixer_registers[71]=a;a>>>=3;this.bus.send("mixer-bass-right",a-(16>a?14:16))});Va(128,function(){switch(this.irq){case 2:return 1;
|
|
97
97
|
case 5:return 2;case 7:return 4;case 10:return 8;default:return 0}});Wa(128,function(a){a&1&&(this.irq=2);a&2&&(this.irq=5);a&4&&(this.irq=7);a&8&&(this.irq=10)});Va(129,function(){var a=0;switch(this.dma_channel_8bit){case 0:a|=1;break;case 1:a|=2;break;case 3:a|=8}switch(this.dma_channel_16bit){case 5:a|=32;break;case 6:a|=64;break;case 7:a|=128}return a});Wa(129,function(a){a&1&&(this.dma_channel_8bit=0);a&2&&(this.dma_channel_8bit=1);a&8&&(this.dma_channel_8bit=3);a&32&&(this.dma_channel_16bit=
|
|
98
|
-
5);a&64&&(this.dma_channel_16bit=6);a&128&&(this.dma_channel_16bit=7)});Va(130,function(){for(var a=32,b=0;16>b;b++)a|=b*this.irq_triggered[b];return a});
|
|
99
|
-
13;ab[18]=14;ab[19]=15;ab[20]=16;ab[21]=17;Za([1],function(a,b){this.fm_waveform_select_enable[b]=a&1;this.fm_update_waveforms()});Za([2]);Za([3]);Za([4],function(){});Za([5],function(a,b,c){0===b&&this.fm_default_write(a,b,c)});Za([8],function(){});Za($a(32,53),function(){});Za($a(64,85),function(){});Za($a(96,117),function(){});Za($a(128,149),function(){});Za($a(160,168),function(){});Za($a(176,184),function(){});Za([189],function(){});Za($a(192,200),function(){});Za($a(224,245),function(){});
|
|
100
|
-
function(){};
|
|
101
|
-
1024*this.bytes_per_sample;this.dma_bytes_block=Math.min(Math.max(this.dma_bytes_count>>2&-4,32),this.dma_bytes_block);this.dma_waiting_transfer=!0;this.dma.channel_mask[this.dma_channel]||this.dma_on_unmask(this.dma_channel)};
|
|
102
|
-
this.dma_bytes_block),b=Math.floor(a/this.bytes_per_sample);this.dma.do_write(this.dma_syncbuffer,0,a,this.dma_channel,c=>{c||(this.dma_to_dac(b),this.dma_bytes_left-=a,this.dma_bytes_left||(this.raise_irq(this.dma_irq),this.dma_autoinit&&(this.dma_bytes_left=this.dma_bytes_count)))})};
|
|
103
|
-
this.dma_buffer_uint8;for(var f=0,g=0;g<a;g++)for(var h=Sa(e[g]/b+c,-1,1),l=0;l<d;l++)this.dac_buffers[f].push(h),f^=1;this.dac_send()};
|
|
104
|
-
|
|
98
|
+
5);a&64&&(this.dma_channel_16bit=6);a&128&&(this.dma_channel_16bit=7)});Va(130,function(){for(var a=32,b=0;16>b;b++)a|=b*this.irq_triggered[b];return a});D.prototype.fm_default_write=function(a,b,c){y(c);y(a)};function Za(a,b){b||(b=D.prototype.fm_default_write);for(var c=0;c<a.length;c++)Qa[a[c]]=b}function $a(a,b){for(var c=[];a<=b;a++)c.push(a);return c}const ab=new Uint8Array(32);ab[0]=0;ab[1]=1;ab[2]=2;ab[3]=3;ab[4]=4;ab[5]=5;ab[8]=6;ab[9]=7;ab[10]=8;ab[11]=9;ab[12]=10;ab[13]=11;ab[16]=12;ab[17]=
|
|
99
|
+
13;ab[18]=14;ab[19]=15;ab[20]=16;ab[21]=17;Za([1],function(a,b){this.fm_waveform_select_enable[b]=a&1;this.fm_update_waveforms()});Za([2]);Za([3]);Za([4],function(){});Za([5],function(a,b,c){0===b&&this.fm_default_write(a,b,c)});Za([8],function(){});Za($a(32,53),function(){});Za($a(64,85),function(){});Za($a(96,117),function(){});Za($a(128,149),function(){});Za($a(160,168),function(){});Za($a(176,184),function(){});Za([189],function(){});Za($a(192,200),function(){});Za($a(224,245),function(){});D.prototype.fm_update_waveforms=
|
|
100
|
+
function(){};D.prototype.sampling_rate_change=function(a){this.sampling_rate=a;this.bus.send("dac-tell-sampling-rate",a)};D.prototype.get_channel_count=function(){return this.dsp_stereo?2:1};D.prototype.dma_transfer_size_set=function(){this.dma_sample_count=1+(this.write_buffer.shift()<<0)+(this.write_buffer.shift()<<8)};D.prototype.dma_transfer_start=function(){this.bytes_per_sample=1;this.dsp_16bit&&(this.bytes_per_sample*=2);this.dma_bytes_count=this.dma_sample_count*this.bytes_per_sample;this.dma_bytes_block=
|
|
101
|
+
1024*this.bytes_per_sample;this.dma_bytes_block=Math.min(Math.max(this.dma_bytes_count>>2&-4,32),this.dma_bytes_block);this.dma_waiting_transfer=!0;this.dma.channel_mask[this.dma_channel]||this.dma_on_unmask(this.dma_channel)};D.prototype.dma_on_unmask=function(a){a===this.dma_channel&&this.dma_waiting_transfer&&(this.dma_waiting_transfer=!1,this.dma_bytes_left=this.dma_bytes_count,this.dma_paused=!1,this.bus.send("dac-enable"))};D.prototype.dma_transfer_next=function(){var a=Math.min(this.dma_bytes_left,
|
|
102
|
+
this.dma_bytes_block),b=Math.floor(a/this.bytes_per_sample);this.dma.do_write(this.dma_syncbuffer,0,a,this.dma_channel,c=>{c||(this.dma_to_dac(b),this.dma_bytes_left-=a,this.dma_bytes_left||(this.raise_irq(this.dma_irq),this.dma_autoinit&&(this.dma_bytes_left=this.dma_bytes_count)))})};D.prototype.dma_to_dac=function(a){var b=this.dsp_16bit?32767.5:127.5,c=this.dsp_signed?0:-1,d=this.dsp_stereo?1:2;var e=this.dsp_16bit?this.dsp_signed?this.dma_buffer_int16:this.dma_buffer_uint16:this.dsp_signed?this.dma_buffer_int8:
|
|
103
|
+
this.dma_buffer_uint8;for(var f=0,g=0;g<a;g++)for(var h=Sa(e[g]/b+c,-1,1),l=0;l<d;l++)this.dac_buffers[f].push(h),f^=1;this.dac_send()};D.prototype.dac_handle_request=function(){!this.dma_bytes_left||this.dma_paused?this.dac_send():this.dma_transfer_next()};D.prototype.dac_send=function(){if(this.dac_buffers[0].length){var a=this.dac_buffers[0].shift_block(this.dac_buffers[0].length),b=this.dac_buffers[1].shift_block(this.dac_buffers[1].length);this.bus.send("dac-send-data",[a,b],[a.buffer,b.buffer])}};
|
|
104
|
+
D.prototype.raise_irq=function(a){this.irq_triggered[a]=1;this.cpu.device_raise_irq(this.irq)};D.prototype.lower_irq=function(a){this.irq_triggered[a]=0;this.cpu.device_lower_irq(this.irq)};function Sa(a,b,c){return(a<b)*b+(a>c)*c+(b<=a&&a<=c)*a}function bb(a){this.message=a}bb.prototype=Error();const cb={Map,Uint8Array,Int8Array,Uint16Array,Int16Array,Uint32Array,Int32Array,Float32Array,Float64Array};function db(a,b){if("object"!==typeof a||null===a)return a;if(Array.isArray(a))return a.map(e=>db(e,
|
|
105
105
|
b));if(a instanceof Map)return{__state_type__:"Map",args:Array.from(a.entries()).map(([e,f])=>[db(e,b),db(f,b)])};a.constructor===Object&&console.log(a);if(a.BYTES_PER_ELEMENT){var c=new Uint8Array(a.buffer,a.byteOffset,a.length*a.BYTES_PER_ELEMENT);return{__state_type__:a.constructor.name.replace("bound ",""),buffer_id:b.push(c)-1}}a=a.get_state();c=[];for(var d=0;d<a.length;d++)c[d]=db(a[d],b);return c}function eb(a,b){if("object"!==typeof a||null===a)return a;if(Array.isArray(a)){for(var c=0;c<
|
|
106
106
|
a.length;c++)a[c]=eb(a[c],b);return a}c=cb[a.__state_type__];return void 0!==a.args?new c(a.args):new c(b[a.buffer_id])}function fb(a,b){function c(q,r){const x=q.length;if(16>x)throw new bb("Invalid length: "+x);q=new Int32Array(q.buffer,q.byteOffset,4);if(-2039052682!==q[0])throw new bb("Invalid header: "+y(q[0]>>>0));if(6!==q[1])throw new bb("Version mismatch: dump="+q[1]+" we=6");if(r&&q[2]!==x)throw new bb("Length doesn't match header: real="+x+" header="+q[2]);return q[3]}function d(q){q=(new TextDecoder).decode(q);
|
|
107
107
|
return JSON.parse(q)}b=new Uint8Array(b);if(4247762216===(new Uint32Array(b.buffer,0,1))[0]){var e=a.zstd_create_ctx(b.length);(new Uint8Array(a.wasm_memory.buffer,a.zstd_get_src_ptr(e)>>>0,b.length)).set(b);var f=a.zstd_read(e,16),g=new Uint8Array(a.wasm_memory.buffer,f>>>0,16),h=c(g,!1);a.zstd_read_free(f,16);f=a.zstd_read(e,h);g=new Uint8Array(a.wasm_memory.buffer,f>>>0,h);g=d(g);a.zstd_read_free(f,h);f=g.state;var l=g.buffer_infos;g=[];h=16+h;for(var m of l){l=(h+3&-4)-h;if(1048576<m.length){var n=
|
|
@@ -115,17 +115,17 @@ a[2];this.last_update=a[3];this.next_interrupt=a[4];this.next_interrupt_alarm=a[
|
|
|
115
115
|
192,this.next_interrupt+=this.periodic_interrupt_time*Math.ceil((a-this.next_interrupt)/this.periodic_interrupt_time)):this.next_interrupt_alarm&&this.next_interrupt_alarm<a?(this.cpu.device_raise_irq(8),this.cmos_c|=160,this.next_interrupt_alarm=0):this.update_interrupt&&this.update_interrupt_time<a&&(this.cpu.device_raise_irq(8),this.cmos_c|=144,this.update_interrupt_time=a+1E3);let b=100;this.periodic_interrupt&&this.next_interrupt&&(b=Math.min(b,Math.max(0,this.next_interrupt-a)));this.next_interrupt_alarm&&
|
|
116
116
|
(b=Math.min(b,Math.max(0,this.next_interrupt_alarm-a)));this.update_interrupt&&(b=Math.min(b,Math.max(0,this.update_interrupt_time-a)));return b};hb.prototype.bcd_pack=function(a){for(var b=0,c=0,d;a;)d=a%10,c|=d<<4*b,b++,a=(a-d)/10;return c};hb.prototype.bcd_unpack=function(a){return(a&15)+10*(a>>4&15)};hb.prototype.encode_time=function(a){return this.cmos_b&4?a:this.bcd_pack(a)};hb.prototype.decode_time=function(a){return this.cmos_b&4?a:this.bcd_unpack(a)};hb.prototype.cmos_port_read=function(){var a=
|
|
117
117
|
this.cmos_index;switch(a){case 0:return y(this.encode_time((new Date(this.rtc_time)).getUTCSeconds())),this.encode_time((new Date(this.rtc_time)).getUTCSeconds());case 2:return y(this.encode_time((new Date(this.rtc_time)).getUTCMinutes())),this.encode_time((new Date(this.rtc_time)).getUTCMinutes());case 4:return y(this.encode_time((new Date(this.rtc_time)).getUTCHours())),this.encode_time((new Date(this.rtc_time)).getUTCHours());case 6:return y(this.encode_time((new Date(this.rtc_time)).getUTCDay()+
|
|
118
|
-
1)),this.encode_time((new Date(this.rtc_time)).getUTCDay()+1);case 7:return y(this.encode_time((new Date(this.rtc_time)).getUTCDate())),this.encode_time((new Date(this.rtc_time)).getUTCDate());case 8:return y(this.encode_time((new Date(this.rtc_time)).getUTCMonth()+1)),this.encode_time((new Date(this.rtc_time)).getUTCMonth()+1);case 9:return y(this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100)),this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100);case 10:return 999<=
|
|
118
|
+
1)),this.encode_time((new Date(this.rtc_time)).getUTCDay()+1);case 7:return y(this.encode_time((new Date(this.rtc_time)).getUTCDate())),this.encode_time((new Date(this.rtc_time)).getUTCDate());case 8:return y(this.encode_time((new Date(this.rtc_time)).getUTCMonth()+1)),this.encode_time((new Date(this.rtc_time)).getUTCMonth()+1);case 9:return y(this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100)),this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100);case 10:return 999<=G.microtick()%
|
|
119
119
|
1E3?this.cmos_a|128:this.cmos_a;case 11:return this.cmos_b;case 12:return this.cpu.device_lower_irq(8),a=this.cmos_c,this.cmos_c&=-241,a;case 13:return 128;case 14:return this.cmos_diag_status;case 50:case 55:return y(this.encode_time((new Date(this.rtc_time)).getUTCFullYear()/100|0)),this.encode_time((new Date(this.rtc_time)).getUTCFullYear()/100|0);default:return y(a),this.cmos_data[this.cmos_index]}};hb.prototype.cmos_port_write=function(a){switch(this.cmos_index){case 10:this.cmos_a=a&127;this.periodic_interrupt_time=
|
|
120
120
|
1E3/(32768>>(this.cmos_a&15)-1);y(this.cmos_a,2);break;case 11:this.cmos_b=a;this.cmos_b&128&&(this.cmos_b&=239);this.cmos_b&64&&(this.next_interrupt=Date.now());if(this.cmos_b&32){a=new Date;const b=this.decode_time(this.cmos_data[1]),c=this.decode_time(this.cmos_data[3]),d=this.decode_time(this.cmos_data[5]);this.next_interrupt_alarm=+new Date(Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),d,c,b))}this.cmos_b&16&&(this.update_interrupt_time=Date.now());y(this.cmos_b,2);break;case 14:this.cmos_diag_status=
|
|
121
121
|
a;break;case 1:case 3:case 5:this.cmos_write(this.cmos_index,a);break;default:y(this.cmos_index),y(a)}this.update_interrupt=16===(this.cmos_b&16)&&0<(this.cmos_a&15);this.periodic_interrupt=64===(this.cmos_b&64)&&0<(this.cmos_a&15)};hb.prototype.cmos_read=function(a){return this.cmos_data[a]};hb.prototype.cmos_write=function(a,b){y(a);y(b);this.cmos_data[a]=b};function ib(a,b){this.cpu=a;this.bus=b;this.counter_start_time=new Float64Array(3);this.counter_start_value=new Uint16Array(3);this.counter_next_low=
|
|
122
|
-
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);a.io.register_read(97,this,function(){var c=
|
|
122
|
+
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);a.io.register_read(97,this,function(){var c=G.microtick(),d=66.66666666666667*c&1;c=this.did_rollover(2,c);return d<<4|c<<5});a.io.register_write(97,this,function(c){c&1?this.bus.send("pcspeaker-enable"):this.bus.send("pcspeaker-disable")});a.io.register_read(64,
|
|
123
123
|
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(c){this.counter_write(0,c)});a.io.register_write(65,this,function(c){this.counter_write(1,c)});a.io.register_write(66,this,function(c){this.counter_write(2,c);this.bus.send("pcspeaker-update",[this.counter_mode[2],this.counter_reload[2]])});a.io.register_write(67,this,this.port43_write)}
|
|
124
124
|
ib.prototype.get_state=function(){var a=[];a[0]=this.counter_next_low;a[1]=this.counter_enabled;a[2]=this.counter_mode;a[3]=this.counter_read_mode;a[4]=this.counter_latch;a[5]=this.counter_latch_value;a[6]=this.counter_reload;a[7]=this.counter_start_time;a[8]=this.counter_start_value;return a};ib.prototype.set_state=function(a){this.counter_next_low=a[0];this.counter_enabled=a[1];this.counter_mode=a[2];this.counter_read_mode=a[3];this.counter_latch=a[4];this.counter_latch_value=a[5];this.counter_reload=
|
|
125
125
|
a[6];this.counter_start_time=a[7];this.counter_start_value=a[8]};ib.prototype.timer=function(a,b){var c=100;b||(this.counter_enabled[0]&&this.did_rollover(0,a)?(this.counter_start_value[0]=this.get_counter_value(0,a),this.counter_start_time[0]=a,this.cpu.device_lower_irq(0),this.cpu.device_raise_irq(0),0===this.counter_mode[0]&&(this.counter_enabled[0]=0)):this.cpu.device_lower_irq(0),this.counter_enabled[0]&&(c=(this.counter_start_value[0]-Math.floor(1193.1816666*(a-this.counter_start_time[0])))/
|
|
126
126
|
1193.1816666));return c};ib.prototype.get_counter_value=function(a,b){if(!this.counter_enabled[a])return 0;b=this.counter_start_value[a]-Math.floor(1193.1816666*(b-this.counter_start_time[a]));a=this.counter_reload[a];b>=a?b%=a:0>b&&(b=b%a+a);return b};ib.prototype.did_rollover=function(a,b){b-=this.counter_start_time[a];return 0>b?!0:this.counter_start_value[a]<Math.floor(1193.1816666*b)};ib.prototype.counter_read=function(a){var b=this.counter_latch[a];if(b)return this.counter_latch[a]--,2===b?
|
|
127
|
-
this.counter_latch_value[a]&255:this.counter_latch_value[a]>>8;b=this.counter_next_low[a];3===this.counter_mode[a]&&(this.counter_next_low[a]^=1);a=this.get_counter_value(a,
|
|
128
|
-
this.counter_reload[a],this.counter_enabled[a]=!0,this.counter_start_time[a]=
|
|
127
|
+
this.counter_latch_value[a]&255:this.counter_latch_value[a]>>8;b=this.counter_next_low[a];3===this.counter_mode[a]&&(this.counter_next_low[a]^=1);a=this.get_counter_value(a,G.microtick());return b?a&255:a>>8};ib.prototype.counter_write=function(a,b){this.counter_reload[a]=this.counter_next_low[a]?this.counter_reload[a]&-256|b:this.counter_reload[a]&255|b<<8;3===this.counter_read_mode[a]&&this.counter_next_low[a]||(this.counter_reload[a]||(this.counter_reload[a]=65535),this.counter_start_value[a]=
|
|
128
|
+
this.counter_reload[a],this.counter_enabled[a]=!0,this.counter_start_time[a]=G.microtick(),y(this.counter_reload[a]));3===this.counter_read_mode[a]&&(this.counter_next_low[a]^=1)};ib.prototype.port43_write=function(a){var b=a>>1&7,c=a>>6&3;a=a>>4&3;3!==c&&(0===a?(this.counter_latch[c]=2,b=this.get_counter_value(c,G.microtick()),this.counter_latch_value[c]=b?b-1:0):(6<=b&&(b&=-5),this.counter_next_low[c]=1===a?1:2===a?0:1,0===c&&this.cpu.device_lower_irq(0),0!==b&&3!==b&&2!==b&&y(b),this.counter_mode[c]=
|
|
129
129
|
b,this.counter_read_mode[c]=a,2===c&&this.bus.send("pcspeaker-update",[this.counter_mode[2],this.counter_reload[2]])))};ib.prototype.dump=function(){};function jb(a){if("undefined"!==typeof window)if(window.AudioContext||window.webkitAudioContext){var b=window.AudioWorklet?kb:lb;this.bus=a;this.audio_context=window.AudioContext?new AudioContext:new webkitAudioContext;this.mixer=new mb(a,this.audio_context);this.pcspeaker=new nb(a,this.audio_context,this.mixer);this.dac=new b(a,this.audio_context,
|
|
130
130
|
this.mixer);this.pcspeaker.start();a.register("emulator-stopped",function(){this.audio_context.suspend()},this);a.register("emulator-started",function(){this.audio_context.resume()},this);a.register("speaker-confirm-initialized",function(){a.send("speaker-has-initialized")},this);a.send("speaker-has-initialized")}else console.warn("Web browser doesn't support Web Audio API")}jb.prototype.destroy=function(){this.audio_context&&this.audio_context.close();this.audio_context=null;this.dac&&this.dac.node_processor&&
|
|
131
131
|
this.dac.node_processor.port.close();this.dac=null};function mb(a,b){function c(d){return function(e){d.gain.setValueAtTime(e,this.audio_context.currentTime)}}this.audio_context=b;this.sources=new Map;this.gain_right=this.gain_left=this.volume_right=this.volume_left=this.volume_both=1;this.node_treble_left=this.audio_context.createBiquadFilter();this.node_treble_right=this.audio_context.createBiquadFilter();this.node_treble_left.type="highshelf";this.node_treble_right.type="highshelf";this.node_treble_left.frequency.setValueAtTime(2E3,
|
|
@@ -140,7 +140,7 @@ ob.prototype.update=function(){var a=this.connected_right*this.gain_hidden*this.
|
|
|
140
140
|
this.mixer_connection=c.add_source(this.node_oscillator,1);this.mixer_connection.disconnect();a.register("pcspeaker-enable",function(){c.connect_source(1)},this);a.register("pcspeaker-disable",function(){c.disconnect_source(1)},this);a.register("pcspeaker-update",function(d){var e=d[1],f=0;3===d[0]&&(f=Math.min(1193181.6665999999/e,this.node_oscillator.frequency.maxValue),f=Math.max(f,0));this.node_oscillator.frequency.setValueAtTime(f,b.currentTime)},this)}nb.prototype.start=function(){this.node_oscillator.start()};
|
|
141
141
|
function kb(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=48E3;b=function(){function g(m){if(0===m)return 1;m*=Math.PI;return Math.sin(m)/m}function h(){var m=Reflect.construct(AudioWorkletProcessor,[],h);m.kernel_size=3;m.queue_data=Array(1024);m.queue_start=0;m.queue_end=0;m.queue_length=0;m.queue_size=m.queue_data.length;m.queued_samples=0;m.source_buffer_previous=l;m.source_buffer_current=l;m.source_samples_per_destination=1;m.source_block_start=0;m.source_time=0;m.source_offset=
|
|
142
142
|
0;m.port.onmessage=n=>{switch(n.data.type){case "queue":m.queue_push(n.data.value);break;case "sampling-rate":m.source_samples_per_destination=n.data.value/sampleRate}};return m}var l=[new Float32Array(256),new Float32Array(256)];Reflect.setPrototypeOf(h.prototype,AudioWorkletProcessor.prototype);Reflect.setPrototypeOf(h,AudioWorkletProcessor);h.prototype.process=h.prototype.process=function(m,n){for(m=0;m<n[0][0].length;m++){for(var p=0,q=0,r=this.source_offset+this.kernel_size,x=this.source_offset-
|
|
143
|
-
this.kernel_size+1;x<=r;x++){var
|
|
143
|
+
this.kernel_size+1;x<=r;x++){var E=this.source_block_start+x;p+=this.get_sample(E,0)*this.kernel(this.source_time-x);q+=this.get_sample(E,1)*this.kernel(this.source_time-x)}if(isNaN(p)||isNaN(q))p=q=0,this.dbg_log("ERROR: NaN values! Ignoring for now.");n[0][0][m]=p;n[0][1][m]=q;this.source_time+=this.source_samples_per_destination;this.source_offset=Math.floor(this.source_time)}n=this.source_offset;n+=this.kernel_size+2;this.source_time-=this.source_offset;this.source_block_start+=this.source_offset;
|
|
144
144
|
this.source_offset=0;this.ensure_enough_data(n);return!0};h.prototype.kernel=function(m){return g(m)*g(m/this.kernel_size)};h.prototype.get_sample=function(m,n){return 0>m?(m+=this.source_buffer_previous[0].length,this.source_buffer_previous[n][m]):this.source_buffer_current[n][m]};h.prototype.ensure_enough_data=function(m){var n=this.source_buffer_current[0].length;n-this.source_block_start<m&&(this.prepare_next_buffer(),this.source_block_start-=n)};h.prototype.prepare_next_buffer=function(){256>
|
|
145
145
|
this.queued_samples&&this.queue_length&&this.dbg_log("Not enough samples - should not happen during midway of playback");this.source_buffer_previous=this.source_buffer_current;this.source_buffer_current=this.queue_shift();var m=this.source_buffer_current[0].length;if(256>m){for(var n=this.queue_start,p=0;256>m&&p<this.queue_length;)m+=this.queue_data[n][0].length,n=n+1&this.queue_size-1,p++;m=Math.max(m,256);m=[new Float32Array(m),new Float32Array(m)];m[0].set(this.source_buffer_current[0]);m[1].set(this.source_buffer_current[1]);
|
|
146
146
|
n=this.source_buffer_current[0].length;for(var q=0;q<p;q++){var r=this.queue_shift();m[0].set(r[0],n);m[1].set(r[1],n);n+=r[0].length}this.source_buffer_current=m}this.pump()};h.prototype.pump=function(){1024>this.queued_samples/this.source_samples_per_destination&&this.port.postMessage({type:"pump"})};h.prototype.queue_push=function(m){this.queue_length<this.queue_size&&(this.queue_data[this.queue_end]=m,this.queue_end=this.queue_end+1&this.queue_size-1,this.queue_length++,this.queued_samples+=m[0].length,
|
|
@@ -160,7 +160,7 @@ a.length);if(b){const e=this.buffer;var c=e.length,d=this.tail+b;d>c?(d%=c,c-=th
|
|
|
160
160
|
f+34,b),udp_payload_view:new DataView(e,f+42,c),text_encoder:new TextEncoder}}function Fb(a,b,c,d){d.eth_frame.set(b,c.byteOffset+a);return b.length}function Gb(a,b,c,d){const e=c.byteOffset+(a&-2);d=d.eth_frame;for(c=c.byteOffset;c<e;c+=2)b+=d[c]<<8|d[c+1];for(a&1&&(b+=d[e]<<8);b>>>16;)b=(b&65535)+(b>>>16);return~b&65535}function Hb(a,b){a.eth_frame.fill(0);var c=a.eth_frame,d=c.subarray,e=a.eth_frame_view;Fb(0,b.eth.dest,e,a);Fb(6,b.eth.src,e,a);e.setUint16(12,b.eth.ethertype);e=14;if(b.arp){var f=
|
|
161
161
|
a.eth_payload_view;f.setUint16(0,b.arp.htype);f.setUint16(2,b.arp.ptype);f.setUint8(4,b.arp.sha.length);f.setUint8(5,b.arp.spa.length);f.setUint16(6,b.arp.oper);Fb(8,b.arp.sha,f,a);Fb(14,b.arp.spa,f,a);Fb(18,b.arp.tha,f,a);Fb(24,b.arp.tpa,f,a);e+=28}else if(b.ipv4){f=a.eth_payload_view;var g=20;if(b.icmp){var h=a.ipv4_payload_view;h.setUint8(0,b.icmp.type);h.setUint8(1,b.icmp.code);h.setUint16(2,0);var l=4+Fb(4,b.icmp.data,h,a);h.setUint16(2,Gb(l,0,h,a));g+=l}else if(b.udp){h=a.ipv4_payload_view;
|
|
162
162
|
var m=8;if(b.dhcp){l=m;var n=a.udp_payload_view;n.setUint8(0,b.dhcp.op);n.setUint8(1,b.dhcp.htype);n.setUint8(2,b.dhcp.hlen);n.setUint8(3,b.dhcp.hops);n.setUint32(4,b.dhcp.xid);n.setUint16(8,b.dhcp.secs);n.setUint16(10,b.dhcp.flags);n.setUint32(12,b.dhcp.ciaddr);n.setUint32(16,b.dhcp.yiaddr);n.setUint32(20,b.dhcp.siaddr);n.setUint32(24,b.dhcp.giaddr);Fb(28,b.dhcp.chaddr,n,a);n.setUint32(236,1669485411);m=240;for(var p of b.dhcp.options)m+=Fb(m,p,n,a);l+=m}else if(b.dns){p=m;m=a.udp_payload_view;m.setUint16(0,
|
|
163
|
-
b.dns.id);m.setUint16(2,b.dns.flags);m.setUint16(4,b.dns.questions.length);m.setUint16(6,b.dns.answers.length);let x=12;for(var q=0;q<b.dns.questions.length;++q){var r=b.dns.questions[q];for(n of r.name){const
|
|
163
|
+
b.dns.id);m.setUint16(2,b.dns.flags);m.setUint16(4,b.dns.questions.length);m.setUint16(6,b.dns.answers.length);let x=12;for(var q=0;q<b.dns.questions.length;++q){var r=b.dns.questions[q];for(n of r.name){const E=a.text_encoder.encodeInto(n,a.eth_frame.subarray(m.byteOffset+(x+1))).written;m.setUint8(x,E);x+=1+E}m.setUint16(x,r.type);x+=2;m.setUint16(x,r.class);x+=2}for(q=0;q<b.dns.answers.length;++q){n=b.dns.answers[q];for(l of n.name)r=a.text_encoder.encodeInto(l,a.eth_frame.subarray(m.byteOffset+
|
|
164
164
|
(x+1))).written,m.setUint8(x,r),x+=1+r;m.setUint16(x,n.type);x+=2;m.setUint16(x,n.class);x+=2;m.setUint32(x,n.ttl);x+=4;m.setUint16(x,n.data.length);x+=2;x+=Fb(x,n.data,m,a)}l=p+x}else b.ntp?(l=m,n=a.udp_payload_view,n.setUint8(0,b.ntp.flags),n.setUint8(1,b.ntp.stratum),n.setUint8(2,b.ntp.poll),n.setUint8(3,b.ntp.precision),n.setUint32(4,b.ntp.root_delay),n.setUint32(8,b.ntp.root_disp),n.setUint32(12,b.ntp.ref_id),n.setUint32(16,b.ntp.ref_ts_i),n.setUint32(20,b.ntp.ref_ts_f),n.setUint32(24,b.ntp.ori_ts_i),
|
|
165
165
|
n.setUint32(28,b.ntp.ori_ts_f),n.setUint32(32,b.ntp.rec_ts_i),n.setUint32(36,b.ntp.rec_ts_f),n.setUint32(40,b.ntp.trans_ts_i),n.setUint32(44,b.ntp.trans_ts_f),l+=48):l=m+Fb(0,b.udp.data,a.udp_payload_view,a);m=l;h.setUint16(0,b.udp.sport);h.setUint16(2,b.udp.dport);h.setUint16(4,m);h.setUint16(6,0);h.setUint16(6,Gb(m,(b.ipv4.src[0]<<8|b.ipv4.src[1])+(b.ipv4.src[2]<<8|b.ipv4.src[3])+(b.ipv4.dest[0]<<8|b.ipv4.dest[1])+(b.ipv4.dest[2]<<8|b.ipv4.dest[3])+17+m,h,a));g+=m}else b.tcp&&(h=a.ipv4_payload_view,
|
|
166
166
|
l=0,n=b.tcp,n.fin&&(l|=1),n.syn&&(l|=2),n.rst&&(l|=4),n.psh&&(l|=8),n.ack&&(l|=16),n.urg&&(l|=32),n.ece&&(l|=64),n.cwr&&(l|=128),p=20,n.options&&n.options.mss&&(h.setUint8(p,2),h.setUint8(p+1,4),h.setUint16(p+2,n.options.mss),p+=4),m=4*Math.ceil(p/4),n.options&&0<m-p&&a.eth_frame.fill(0,h.byteOffset+p,h.byteOffset+p+(m-p)),h.setUint16(0,n.sport),h.setUint16(2,n.dport),h.setUint32(4,n.seq),h.setUint32(8,n.ackn),h.setUint8(12,m>>2<<4),h.setUint8(13,l),h.setUint16(14,n.winsize),h.setUint16(16,0),h.setUint16(18,
|
|
@@ -205,138 +205,139 @@ this.vm_mac=new Uint8Array(6);this.dns_method=c.dns_method||"doh";this.doh_serve
|
|
|
205
205
|
delete this.connections[c]}};Yb.prototype.send_wisp_frame=function(a){let b,c;switch(a.type){case "CONNECT":const d=(new TextEncoder).encode(a.hostname);b=new Uint8Array(8+d.length);c=new DataView(b.buffer);c.setUint8(0,1);c.setUint32(1,a.stream_id,!0);c.setUint8(5,1);c.setUint16(6,a.port,!0);b.set(d,8);this.connections[a.stream_id]={data_callback:a.data_callback,close_callback:a.close_callback,congestion:this.connections[0].congestion};break;case "DATA":b=new Uint8Array(5+a.data.length);c=new DataView(b.buffer);
|
|
206
206
|
c.setUint8(0,2);c.setUint32(1,a.stream_id,!0);b.set(a.data,5);break;case "CLOSE":b=new Uint8Array(6),c=new DataView(b.buffer),c.setUint8(0,4),c.setUint32(1,a.stream_id,!0),c.setUint8(5,a.reason)}this.send_packet(b,a.type,a.stream_id)};Yb.prototype.destroy=function(){this.wispws&&(this.wispws.onmessage=null,this.wispws.onclose=null,this.wispws.close(),this.wispws=null)};Yb.prototype.on_tcp_connection=function(a,b){a.stream_id=this.last_stream++;a.on("data",c=>{0!==c.length&&this.send_wisp_frame({type:"DATA",
|
|
207
207
|
stream_id:a.stream_id,data:c})});a.on_close=()=>{this.send_wisp_frame({type:"CLOSE",stream_id:a.stream_id,reason:2})};a.on_shutdown=a.on_close;this.send_wisp_frame({type:"CONNECT",stream_id:a.stream_id,hostname:b.ipv4.dest.join("."),port:a.sport,data_callback:c=>{a.write(c)},close_callback:()=>{a.close()}});a.accept();return!0};Yb.prototype.send=function(a){Kb(a,this)};Yb.prototype.receive=function(a){this.bus.send("net"+this.id+"-receive",new Uint8Array(a))};const Zb="undefined"!==typeof window&&
|
|
208
|
-
0<=window.navigator.platform.toString().toLowerCase().search("win");function $b(a){function b(
|
|
209
|
-
!1);n={}}function f(
|
|
210
|
-
|
|
211
|
-
this;this.emu_enabled=!0;const
|
|
212
|
-
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]),
|
|
213
|
-
35:51,36:52,37:53,38:55,40:57,41:48,42:56,43:187,58:186,60:188,62:190,63:191,64:50,65:65,66:66,67:67,68:68,69:69,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,82:82,83:83,84:84,85:85,86:86,87:87,88:88,89:89,90:90,94:54,95:189,123:219,124:220,125:221,126:192};var
|
|
208
|
+
0<=window.navigator.platform.toString().toLowerCase().search("win");function $b(a){function b(u){return u.shiftKey&&u.ctrlKey&&(73===u.keyCode||74===u.keyCode||75===u.keyCode)||!x.emu_enabled?!1:u.target?u.target.classList.contains("phone_keyboard")||"INPUT"!==u.target.nodeName&&"TEXTAREA"!==u.target.nodeName:!0}function c(u){!u.altKey&&n[56]&&l(56,!1);return g(u,!1)}function d(u){!u.altKey&&n[56]&&l(56,!1);return g(u,!0)}function e(){for(var u=Object.keys(n),I,O=0;O<u.length;O++)I=+u[O],n[I]&&l(I,
|
|
209
|
+
!1);n={}}function f(u){if(x.bus&&b(u))switch(u.inputType){case "insertText":for(var I=0;I<u.data.length;I++)x.simulate_char(u.data[I]);break;case "insertLineBreak":x.simulate_press(13);break;case "deleteContentBackward":x.simulate_press(8)}}function g(u,I){if(x.bus&&b(u)&&""!==u.code&&"Process"!==u.key&&"Unidentified"!==u.key&&229!==u.keyCode){u.preventDefault&&u.preventDefault();if(Zb&&(p&&(clearTimeout(r),u.getModifierState&&u.getModifierState("AltGraph")&&q===I&&"ControlLeft"===p.code&&"AltRight"===
|
|
210
|
+
u.code||h(p,q),p=null),"ControlLeft"===u.code))return p=u,q=I,r=setTimeout(()=>{h(p,q);p=null},10),!1;h(u,I);return!1}}function h(u,I){a:{if(void 0!==u.code){var O=w[u.code];if(void 0!==O)break a}O=E[u.keyCode]}O?l(O,I,u.repeat):console.log("Missing char in map: keyCode="+(u.keyCode||-1).toString(16)+" code="+u.code)}function l(u,I,O){if(I)n[u]&&!O&&l(u,!1);else if(!n[u])return;(n[u]=I)||(u|=128);255<u?(m(u>>8),m(u&255)):m(u)}function m(u){x.bus.send("keyboard-code",u)}var n={},p=null,q=!1,r=0,x=
|
|
211
|
+
this;this.emu_enabled=!0;const E=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,
|
|
212
|
+
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]),B={8:8,10:13,32:32,39:222,44:188,45:189,46:190,47:191,48:48,49:49,50:50,51:51,52:52,53:53,54:54,55:55,56:56,57:57,59:186,61:187,91:219,92:220,93:221,96:192,97:65,98:66,99:67,100:68,101:69,102:70,103:71,104:72,105:73,106:74,107:75,108:76,109:77,110:78,111:79,112:80,113:81,114:82,115:83,116:84,117:85,118:86,119:87,120:88,121:89,122:90},C={33:49,34:222,
|
|
213
|
+
35:51,36:52,37:53,38:55,40:57,41:48,42:56,43:187,58:186,60:188,62:190,63:191,64:50,65:65,66:66,67:67,68:68,69:69,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,82:82,83:83,84:84,85:85,86:86,87:87,88:88,89:89,90:90,94:54,95:189,123:219,124:220,125:221,126:192};var w={Escape:1,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Digit0:11,Minus:12,Equal:13,Backspace:14,Tab:15,KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,
|
|
214
214
|
KeyP:25,BracketLeft:26,BracketRight:27,Enter:28,ControlLeft:29,KeyA:30,KeyS:31,KeyD:32,KeyF:33,KeyG:34,KeyH:35,KeyJ:36,KeyK:37,KeyL:38,Semicolon:39,Quote:40,Backquote:41,ShiftLeft:42,Backslash:43,KeyZ:44,KeyX:45,KeyC:46,KeyV:47,KeyB:48,KeyN:49,KeyM:50,Comma:51,Period:52,Slash:53,IntlRo:53,ShiftRight:54,NumpadMultiply:55,AltLeft:56,Space:57,CapsLock:58,F1:59,F2:60,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,F10:68,NumLock:69,ScrollLock:70,Numpad7:71,Numpad8:72,Numpad9:73,NumpadSubtract:74,Numpad4:75,
|
|
215
215
|
Numpad5:76,Numpad6:77,NumpadAdd:78,Numpad1:79,Numpad2:80,Numpad3:81,Numpad0:82,NumpadDecimal:83,IntlBackslash:86,F11:87,F12:88,NumpadEnter:57372,ControlRight:57373,NumpadDivide:57397,AltRight:57400,Home:57415,ArrowUp:57416,PageUp:57417,ArrowLeft:57419,ArrowRight:57421,End:57423,ArrowDown:57424,PageDown:57425,Insert:57426,Delete:57427,MetaLeft:57435,OSLeft:57435,MetaRight:57436,OSRight:57436,ContextMenu:57437};this.bus=a;this.destroy=function(){"undefined"!==typeof window&&(window.removeEventListener("keyup",
|
|
216
|
-
c,!1),window.removeEventListener("keydown",d,!1),window.removeEventListener("blur",e,!1),window.removeEventListener("input",f,!1))};this.init=function(){"undefined"!==typeof window&&(this.destroy(),window.addEventListener("keyup",c,!1),window.addEventListener("keydown",d,!1),window.addEventListener("blur",e,!1),window.addEventListener("input",f,!1))};this.init();this.simulate_press=function(
|
|
217
|
-
|
|
218
|
-
r
|
|
219
|
-
[1*
|
|
220
|
-
!1;this.emu_enabled=!0;this.bus=a;this.bus.register("mouse-enable",function(
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
function(){for(var f=[],g=0;g<d;g++)f.push(this.get_text_row(g));return f};this.get_text_row=function(f){var g=f*c*3;f=g+3*c;let h=null,l=null,m="";for(;g<
|
|
226
|
-
function c(g){var h=g.which;8===h?(f.send_char(127),g.preventDefault()):9===h&&(f.send_char(9),g.preventDefault())}function d(g){if(f.enabled){for(var h=g.clipboardData.getData("text/plain"),
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
dc);function
|
|
231
|
-
|
|
232
|
-
this.bus_recv_msgid=`net${b}-receive`;this.channel=new BroadcastChannel(`v86-inbrowser-${b}`);this.is_open=!0;this.nic_to_hub_fn=c=>{this.channel.postMessage(c)};
|
|
233
|
-
this.hub_to_nic_fn),this.channel.close(),this.is_open=!1)};const qc={A:[],D:"custom",E:[0,1,1],H:[0,0,0],I:[3,3],L:[0,3,1],M:[0,2,1],O:[0,0,0],P:[],Q:[0,1,0],S:[0,
|
|
234
|
-
|
|
235
|
-
this
|
|
236
|
-
this.
|
|
237
|
-
this.use_tone_dialling=!1;this.dtr_low_behaviour=2;this.data_mode_esc_count=this.uart_recv_tm=0;this.reset_on_disconnect=!1;this.sreg[0]=0;this.sreg[1]=0;this.sreg[2]=43;this.sreg[3]=
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
this.
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
this.
|
|
244
|
-
this.
|
|
245
|
-
Number(e[m]),m<n?m:-1};const f=d(1,256),g=d(2,256),h=d(3,256),l=d(4,256);d=d(5,65536);0<=f&&0<=g&&0<=h&&0<=l&&(void 0===d||0<=d)&&(c=void 0===
|
|
246
|
-
|
|
247
|
-
new
|
|
248
|
-
c)){c+=2;for(var d=()=>{const g=c;let h=0;for(;c<b;){const l=a.charCodeAt(c)-48;if(0>l||9<l)break;else h=10*h+l,c++}return c===g?void 0:h},e=!0;c<b
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
this.
|
|
252
|
-
a.
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
a[
|
|
258
|
-
|
|
259
|
-
b,
|
|
260
|
-
(d.direntries.
|
|
261
|
-
this.
|
|
262
|
-
|
|
263
|
-
a[
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
c.foreign_id,a=this.follow_fs(c).
|
|
267
|
-
|
|
268
|
-
1};N.prototype.
|
|
269
|
-
b,c),this.create_forwarder(d.mount_id,c);d=this.CreateFile(a,b);
|
|
270
|
-
|
|
271
|
-
b,
|
|
272
|
-
|
|
273
|
-
await this.
|
|
274
|
-
b
|
|
275
|
-
function(){let a=this.
|
|
276
|
-
N.prototype.
|
|
277
|
-
|
|
278
|
-
async function(a
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
c
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
const b
|
|
286
|
-
|
|
287
|
-
this.
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
this.
|
|
291
|
-
a.
|
|
292
|
-
|
|
293
|
-
0
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
r.
|
|
300
|
-
e.
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
b.
|
|
304
|
-
"
|
|
305
|
-
(
|
|
306
|
-
window.Terminal):"textarea"===
|
|
307
|
-
this.zstd_decompress_worker.bind(this))})}};b.state&&console.warn("Warning: Unknown option 'state'. Did you mean 'initial_state'?");f("bios",b.bios);f("vga_bios",b.vga_bios);f("cdrom",
|
|
308
|
-
else if(b.filesystem){f=b.filesystem.basefs;var h=b.filesystem.baseurl;let q=new vc;h&&(q=new wc(q,h,this.zstd_decompress.bind(this)));e.fs9p=this.fs9p=new N(q);if(f){if("object"===
|
|
309
|
-
|
|
310
|
-
function(a,b){const c=this.v86.cpu;this.zstd_context=c.zstd_create_ctx(b.length);(new Uint8Array(c.wasm_memory.buffer)).set(b,c.zstd_get_src_ptr(this.zstd_context));b=c.zstd_read(this.zstd_context,
|
|
311
|
-
decompressed_size:g,id:h}=e.data;e=d.exports;var l=e.zstd_create_ctx(f.length);(new Uint8Array(e.memory.buffer)).set(f,e.zstd_get_src_ptr(l));var m=e.zstd_read(l,g),n=e.memory.buffer.slice(m,
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
()=>{b.insert_disk(
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
a
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
b
|
|
326
|
-
|
|
327
|
-
|
|
216
|
+
c,!1),window.removeEventListener("keydown",d,!1),window.removeEventListener("blur",e,!1),window.removeEventListener("input",f,!1))};this.init=function(){"undefined"!==typeof window&&(this.destroy(),window.addEventListener("keyup",c,!1),window.addEventListener("keydown",d,!1),window.addEventListener("blur",e,!1),window.addEventListener("input",f,!1))};this.init();this.simulate_press=function(u){u={keyCode:u};g(u,!0);g(u,!1)};this.simulate_char=function(u){var I=u.charCodeAt(0);I in B?this.simulate_press(B[I]):
|
|
217
|
+
I in C?(m(42),this.simulate_press(C[I]),m(170)):console.log("ascii -> keyCode not found: ",I,u)}}function ac(a,b){function c(){C.bus.send("mouse-pointer-lock",!!document.pointerLockElement)}function d(w){e(w)&&w.preventDefault()}function e(w){if(!C.enabled||!C.emu_enabled)return!1;var u=b||document.body,I;if(!(I=document.pointerLockElement))a:{for(w=w.target;w.parentNode;){if(w===u){I=!0;break a}w=w.parentNode}I=!1}return I}function f(w){e(w)&&(w=w.changedTouches)&&w.length&&(w=w[w.length-1],E=w.clientX,
|
|
218
|
+
B=w.clientY)}function g(){if(q||x||r)C.bus.send("mouse-click",[!1,!1,!1]),q=x=r=!1}function h(w){if(C.bus&&e(w)&&C.is_running){var u=0,I=0,O=w.changedTouches;O?O.length&&(O=O[O.length-1],u=O.clientX-E,I=O.clientY-B,E=O.clientX,B=O.clientY,w.preventDefault()):"number"===typeof w.movementX?(u=w.movementX,I=w.movementY):"number"===typeof w.webkitMovementX?(u=w.webkitMovementX,I=w.webkitMovementY):"number"===typeof w.mozMovementX?(u=w.mozMovementX,I=w.mozMovementY):(u=w.clientX-E,I=w.clientY-B,E=w.clientX,
|
|
219
|
+
B=w.clientY);C.bus.send("mouse-delta",[1*u,-(1*I)]);b&&!document.pointerLockElement&&C.bus.send("mouse-absolute",[w.pageX-b.offsetLeft,w.pageY-b.offsetTop,b.offsetWidth,b.offsetHeight])}}function l(w){e(w)&&n(w,!0)}function m(w){e(w)&&n(w,!1)}function n(w,u){C.bus&&(1===w.which?q=u:2===w.which?x=u:3===w.which&&(r=u),C.bus.send("mouse-click",[q,x,r]),w.preventDefault())}function p(w){if(e(w)){var u=w.wheelDelta||-w.detail;0>u?u=-1:0<u&&(u=1);C.bus.send("mouse-wheel",[u,0]);w.preventDefault()}}var q=
|
|
220
|
+
!1,r=!1,x=!1,E=0,B=0,C=this;this.enabled=!1;this.emu_enabled=!0;this.absolute_mouse=!1;this.bus=a;this.bus.register("mouse-enable",function(w){this.enabled=w;this.update_cursor()},this);this.bus.register("vmware-absolute-mouse",function(w){this.absolute_mouse=w;this.update_cursor()},this);this.is_running=!1;this.bus.register("emulator-stopped",function(){this.is_running=!1},this);this.bus.register("emulator-started",function(){this.is_running=!0},this);this.update_cursor=function(){b&&(b.style.cursor=
|
|
221
|
+
this.absolute_mouse&&this.enabled&&this.emu_enabled?"none":"")};this.destroy=function(){"undefined"!==typeof window&&(window.removeEventListener("touchstart",f,!1),window.removeEventListener("touchend",g,!1),window.removeEventListener("touchmove",h,!1),window.removeEventListener("mousemove",h,!1),window.removeEventListener("mousedown",l,!1),window.removeEventListener("mouseup",m,!1),window.removeEventListener("wheel",p,{passive:!1}),window.removeEventListener("contextmenu",d,!1),document.removeEventListener("pointerlockchange",
|
|
222
|
+
c,!1))};this.init=function(){"undefined"!==typeof window&&(this.destroy(),window.addEventListener("touchstart",f,!1),window.addEventListener("touchend",g,!1),window.addEventListener("touchmove",h,!1),window.addEventListener("mousemove",h,!1),window.addEventListener("mousedown",l,!1),window.addEventListener("mouseup",m,!1),window.addEventListener("wheel",p,{passive:!1}),window.addEventListener("contextmenu",d,!1),document.addEventListener("pointerlockchange",c,!1))};this.init()}function bc(a){var b,
|
|
223
|
+
c=0,d=0,e=ta(a?.encoding);this.put_char=function(f,g,h){b[f*c+g]=h};this.destroy=function(){};this.pause=function(){};this.continue=function(){};this.clear_text_state=function(){d=c=null};this.set_mode=function(){};this.set_font_bitmap=function(){};this.set_font_page=function(){};this.clear_screen=function(){};this.set_size_text=function(f,g){if(f!==c||g!==d)b=new Uint8Array(f*g),c=f,d=g};this.set_size_graphical=function(){};this.set_scale=function(){};this.update_cursor_scanline=function(){};this.update_cursor=
|
|
224
|
+
function(){};this.update_buffer=function(){};this.get_text_screen=function(){for(var f=[],g=0;g<d;g++)f.push(this.get_text_row(g));return f};this.get_text_row=function(f){f*=c;return Array.from(b.subarray(f,f+c),g=>e[g]).join("")};this.set_size_text(80,25)}function cc(a){var b,c=0,d=0,e=ta(a?.encoding);this.put_char=function(f,g,h,l,m,n){f=3*(f*c+g);b[f+0]=h;b[f+1]=m;b[f+2]=n};this.destroy=function(){};this.pause=function(){};this.continue=function(){};this.set_mode=function(){};this.set_font_bitmap=
|
|
225
|
+
function(){};this.set_font_page=function(){};this.clear_screen=function(){};this.set_size_text=function(f,g){if(f!==c||g!==d)b=new Int32Array(f*g*3),c=f,d=g};this.set_size_graphical=function(){};this.set_scale=function(){};this.update_cursor_scanline=function(){};this.update_cursor=function(){};this.update_buffer=function(){};this.get_text_screen=function(){for(var f=[],g=0;g<d;g++)f.push(this.get_text_row(g));return f};this.get_text_row=function(f){var g=f*c*3;f=g+3*c;let h=null,l=null,m="";for(;g<
|
|
226
|
+
f;g+=3){const n=e[b[g]],p=b[g+1],q=b[g+2];let r="";h!==p&&(r+=`\x1B[48;${`2;${(p&16711680)>>16};${(p&65280)>>8};${p&255}`}m`,h=p);l!==q&&(r+=`\x1B[38;${`2;${(q&16711680)>>16};${(q&65280)>>8};${q&255}`}m`,l=q);m+=r+n}return m+"\u001b[0m"};this.set_size_text(80,25)}function dc(a){function b(g){f.enabled&&(f.send_char(g.which),g.preventDefault())}function c(g){var h=g.which;8===h?(f.send_char(127),g.preventDefault()):9===h&&(f.send_char(9),g.preventDefault())}function d(g){if(f.enabled){for(var h=g.clipboardData.getData("text/plain"),
|
|
227
|
+
l=0;l<h.length;l++)f.send_char(h.charCodeAt(l));g.preventDefault()}}function e(g){g.target!==a&&a.blur()}var f=this;this.enabled=!0;this.text="";this.text_new_line=!1;this.last_update=0;this.destroy=function(){this.enabled=!1;a.removeEventListener("keypress",b,!1);a.removeEventListener("keydown",c,!1);a.removeEventListener("paste",d,!1);window.removeEventListener("mousedown",e,!1)};this.init=function(){this.destroy();this.enabled=!0;a.style.display="block";a.addEventListener("keypress",b,!1);a.addEventListener("keydown",
|
|
228
|
+
c,!1);a.addEventListener("paste",d,!1);window.addEventListener("mousedown",e,!1)};this.init();this.show_char=function(g){"\b"===g?(this.text=this.text.slice(0,-1),this.update()):"\r"!==g&&(this.text+=g,"\n"===g&&(this.text_new_line=!0),this.update())};this.update=function(){var g=Date.now(),h=g-this.last_update;16>h?void 0===this.update_timer&&(this.update_timer=setTimeout(()=>{this.update_timer=void 0;this.last_update=Date.now();this.render()},16-h)):(void 0!==this.update_timer&&(clearTimeout(this.update_timer),
|
|
229
|
+
this.update_timer=void 0),this.last_update=g,this.render())};this.render=function(){a.value=this.text;this.text_new_line&&(this.text_new_line=!1,a.scrollTop=1E9)};this.send_char=function(){}}function ec(a,b){var c=Reflect.construct(dc,[a],ec);c.send_char=function(d){b.send("serial0-input",d)};b.register("serial0-output-byte",function(d){d=String.fromCharCode(d);c.show_char&&c.show_char(d)},c);return c}Reflect.setPrototypeOf(ec.prototype,dc.prototype);Reflect.setPrototypeOf(ec,dc);function fc(a,b){var c=
|
|
230
|
+
Reflect.construct(dc,[a],fc);c.send_char=function(e){b.send("virtio-console0-input-bytes",new Uint8Array([e]))};const d=new TextDecoder;b.register("virtio-console0-output-bytes",function(e){for(const f of d.decode(e))c.show_char&&c.show_char(f)},c);return c}Reflect.setPrototypeOf(fc.prototype,dc.prototype);Reflect.setPrototypeOf(fc,dc);function gc(a,b){this.element=a;var c=this.term=new b({logLevel:"off",convertEol:"true"});this.destroy=function(){this.on_data_disposable&&this.on_data_disposable.dispose();
|
|
231
|
+
c.dispose()}}gc.prototype.show=function(){this.term&&this.term.open(this.element)};function nc(a,b,c){if(c){var d=Reflect.construct(gc,[a,c],nc);b.register("serial0-output-byte",function(f){d.term.write(Uint8Array.of(f))},d);var e=new TextEncoder;d.on_data_disposable=d.term.onData(function(f){for(const g of e.encode(f))b.send("serial0-input",g)});return d}}Reflect.setPrototypeOf(nc.prototype,gc.prototype);Reflect.setPrototypeOf(nc,gc);function oc(a,b,c){if(c){var d=Reflect.construct(gc,[a,c],oc);
|
|
232
|
+
b.register("virtio-console0-output-bytes",function(f){d.term.write(f)},d);var e=new TextEncoder;d.on_data_disposable=d.term.onData(function(f){b.send("virtio-console0-input-bytes",e.encode(f))});return d}}Reflect.setPrototypeOf(oc.prototype,gc.prototype);Reflect.setPrototypeOf(oc,gc);function pc(a,b){b=b.id||0;this.bus=a;this.bus_send_msgid=`net${b}-send`;this.bus_recv_msgid=`net${b}-receive`;this.channel=new BroadcastChannel(`v86-inbrowser-${b}`);this.is_open=!0;this.nic_to_hub_fn=c=>{this.channel.postMessage(c)};
|
|
233
|
+
this.bus.register(this.bus_send_msgid,this.nic_to_hub_fn,this);this.hub_to_nic_fn=c=>{this.bus.send(this.bus_recv_msgid,c.data)};this.channel.addEventListener("message",this.hub_to_nic_fn)}pc.prototype.destroy=function(){this.is_open&&(this.bus.unregister(this.bus_send_msgid,this.nic_to_hub_fn),this.channel.removeEventListener("message",this.hub_to_nic_fn),this.channel.close(),this.is_open=!1)};const qc={A:[],D:"custom",E:[0,1,1],H:[0,0,0],I:[3,3],L:[0,3,1],M:[0,2,1],O:[0,0,0],P:[],Q:[0,1,0],S:[0,
|
|
234
|
+
5],T:[],V:[0,1,0],X:[0,4,0],Z:[0,0,0],"&C":[0,1,1],"&D":[0,2,2],"&F":[0,0,0],"&K":[0,6,3]},rc={[0]:"OK",[1]:"CONNECT",[2]:"RING",[3]:"NO CARRIER",[4]:"ERROR"},sc=/^ws[s]?:\/\//i,tc=new TextEncoder,uc=new TextDecoder;function H(a,b){this.bus=a;this.uart=b.uart;this.cli_buffer=new Uint8Array(256);this.rts_state=this.dtr_state=this.destroyed=!1;this.sreg=new Uint8Array(6);this.in_data_mode=!1;this.data_mode_send_buffer=new Uint8Array(512);this.data_mode_send_cursor=0;this.data_mode_esc_timer=this.data_mode_send_timer=
|
|
235
|
+
null;this.phonebook=b.phonebook||{};this.socket=null;this.reset();this.bus.register(`serial${this.uart}-data-terminal-ready-output`,this.uart_dtr_changed,this);this.bus.register(`serial${this.uart}-request-to-send-output`,this.uart_rts_changed,this);this.bus.register(`serial${this.uart}-output-byte`,this.uart_byte_received,this)}H.prototype.initialize=function(){this.uart_set_dsr(!0);this.uart_set_cts(!0);this.uart_set_ring(!1);this.uart_set_dcd(!1)};H.prototype.destroy=function(){this.destroyed=
|
|
236
|
+
!0;this.bus.unregister(`serial${this.uart}-data-terminal-ready-output`,this.uart_dtr_changed);this.bus.unregister(`serial${this.uart}-request-to-send-output`,this.uart_rts_changed);this.bus.unregister(`serial${this.uart}-output-byte`,this.uart_byte_received);this.cancel_data_mode_send_timer();this.cancel_data_mode_esc_timer();this.socket&&this.socket.close()};H.prototype.cancel_data_mode_send_timer=function(){null!==this.data_mode_send_timer&&(clearTimeout(this.data_mode_send_timer),this.data_mode_send_timer=
|
|
237
|
+
null)};H.prototype.cancel_data_mode_esc_timer=function(){null!==this.data_mode_esc_timer&&(clearTimeout(this.data_mode_esc_timer),this.data_mode_esc_timer=null)};H.prototype.reset=function(){this.do_echo=!0;this.cli_cursor=0;this.resp_suppress=this.cli_overflow=!1;this.use_rtscts_flowctrl=this.resp_verbose=!0;this.dcd_always_on=this.use_tone_dialling=!1;this.dtr_low_behaviour=2;this.data_mode_esc_count=this.uart_recv_tm=0;this.reset_on_disconnect=!1;this.sreg[0]=0;this.sreg[1]=0;this.sreg[2]=43;this.sreg[3]=
|
|
238
|
+
13;this.sreg[4]=10;this.sreg[5]=8};H.prototype.uart_set_dcd=function(a){this.bus.send(`serial${this.uart}-carrier-detect-input`,a)};H.prototype.uart_set_ring=function(a){this.bus.send(`serial${this.uart}-ring-indicator-input`,a)};H.prototype.uart_set_dsr=function(a){this.bus.send(`serial${this.uart}-data-set-ready-input`,a)};H.prototype.uart_set_cts=function(a){this.bus.send(`serial${this.uart}-clear-to-send-input`,a)};H.prototype.uart_write_byte=function(a){this.bus.send(`serial${this.uart}-input`,
|
|
239
|
+
a)};H.prototype.uart_write=function(a){for(const b of tc.encode(a))this.uart_write_byte(b)};H.prototype.uart_dtr_changed=function(a){a=!!a;this.dtr_state!==a&&(this.dtr_state=a,this.socket&&!a&&(1===this.dtr_low_behaviour?(this.enter_cli_mode(),this.cli_write_response_code(0)):2===this.dtr_low_behaviour&&this.socket.close()))};H.prototype.uart_rts_changed=function(a){a=!!a;this.rts_state!==a&&(this.rts_state=a)};H.prototype.uart_byte_received=function(a){this.cancel_data_mode_esc_timer();this.in_data_mode?
|
|
240
|
+
this.data_mode_uart_recv(a):this.cli_mode_uart_recv(a)};H.prototype.enter_cli_mode=function(){this.in_data_mode&&(this.in_data_mode=!1,this.cancel_data_mode_esc_timer(),this.cancel_data_mode_send_timer(),this.data_mode_flush(),this.uart_set_dsr(!0),this.uart_set_cts(!0),this.uart_set_ring(!1),this.dcd_always_on||this.uart_set_dcd(null!==this.socket))};H.prototype.enter_data_mode=function(){this.in_data_mode||(this.in_data_mode=!0,this.data_mode_send_cursor=0,this.uart_set_ring(!1),this.dcd_always_on||
|
|
241
|
+
this.uart_set_dcd(!0))};H.prototype.flush_escape_buffer=function(){for(;0<this.data_mode_esc_count;this.data_mode_esc_count--)this.in_data_mode?this.data_mode_send(this.sreg[2]):this.uart_write_byte(this.sreg[2])};H.prototype.data_mode_send=function(a){this.socket&&(this.cancel_data_mode_send_timer(),this.data_mode_send_buffer[this.data_mode_send_cursor++]=a,this.data_mode_send_cursor===this.data_mode_send_buffer.byteLength?this.data_mode_flush():this.data_mode_send_timer=setTimeout(()=>{this.data_mode_flush()},
|
|
242
|
+
5))};H.prototype.data_mode_flush=function(){this.data_mode_send_cursor&&this.socket&&this.socket.readyState===WebSocket.OPEN&&(this.data_mode_send_cursor===this.data_mode_send_buffer.byteLength?this.socket.send(this.data_mode_send_buffer):this.socket.send(this.data_mode_send_buffer.subarray(0,this.data_mode_send_cursor)));this.data_mode_send_cursor=0};H.prototype.data_mode_uart_recv=function(a){a===this.sreg[2]&&3>this.data_mode_esc_count&&(0<this.data_mode_esc_count||1E3<performance.now()-this.uart_recv_tm)?
|
|
243
|
+
3>++this.data_mode_esc_count?this.data_mode_esc_timer=setTimeout(()=>{this.data_mode_esc_timer=null;this.flush_escape_buffer()},200):this.data_mode_esc_timer=setTimeout(()=>{this.data_mode_esc_timer=null;this.enter_cli_mode();this.flush_escape_buffer();this.cli_write_response_code(0)},1E3):(this.uart_recv_tm=performance.now(),this.flush_escape_buffer(),this.data_mode_send(a))};H.prototype.cli_mode_uart_recv=function(a){this.do_echo&&(this.uart_write_byte(a),a===this.sreg[5]&&(this.uart_write_byte(32),
|
|
244
|
+
this.uart_write_byte(this.sreg[5])));switch(a){case this.sreg[5]:0<this.cli_cursor&&this.cli_cursor--;break;case this.sreg[3]:this.cli_overflow?(uc.decode(this.cli_buffer.buffer),this.cli_overflow=!1):this.cli_exec(uc.decode(this.cli_buffer.slice(0,this.cli_cursor)).replace(/\s/g,""));this.cli_cursor=0;break;case this.sreg[4]:break;default:this.cli_cursor<this.cli_buffer.length?this.cli_buffer[this.cli_cursor++]=a:(this.cli_overflow=!0,this.uart_write_byte(7))}};H.prototype.cli_decode_arg=function(a,
|
|
245
|
+
b){if(void 0===b){if(a.length)return 2<a.length?a[2]:!1}else if(2>a.length||b<a[0]||b>a[1])return!1;return b};H.prototype.cli_translate_dial_address=function(a,b){let c;if(a in this.phonebook)c=this.phonebook[a];else if(a.length){const e=a.match(/(\d{1,3})[^\d]*(\d{1,3})[^\d]*(\d{1,3})[^\d]*(\d{1,3})[^\d]*(\d{0,5})/);if(e){var d=(m,n)=>{if(e[m].length)return m=Number(e[m]),m<n?m:-1};const f=d(1,256),g=d(2,256),h=d(3,256),l=d(4,256);d=d(5,65536);0<=f&&0<=g&&0<=h&&0<=l&&(void 0===d||0<=d)&&(c=void 0===
|
|
246
|
+
d?`${f}.${g}.${h}.${l}`:`${f}.${g}.${h}.${l}:${d}`)}void 0===c&&(c=a);sc.test(c)||(c=(b?"wss://":"ws://")+c)}return c};H.prototype.cli_exec_dial=function(a,b){let c=!0,d=this.use_tone_dialling;var e=a.lastIndexOf(";");0<=e&&(c=!1,a=a.substring(0,e));b<a.length&&(e=a[b].toUpperCase(),"T"===e||"P"===e)&&(b++,d="T"===e);b<a.length&&'"'===a[b]&&(b++,e=a.indexOf('"',b),0<=e&&(a=a.substring(0,e)));a=a.substring(b);a=this.cli_translate_dial_address(a,d);if(void 0===a)this.cli_write_response_code(4);else{try{this.socket=
|
|
247
|
+
new WebSocket(a)}catch(f){this.cli_write_response_code(4);return}this.socket.binaryType="arraybuffer";this.socket.addEventListener("open",()=>{c?(this.enter_data_mode(),this.cli_write_response_code(1)):this.cli_write_response_code(0)});this.socket.addEventListener("message",f=>{if(this.in_data_mode&&(!this.use_rtscts_flowctrl||this.rts_state)){const g=new Uint8Array(f.data);for(let h=0;h<f.data.byteLength;h++)this.uart_write_byte(g[h])}});this.socket.addEventListener("close",()=>{this.socket=null;
|
|
248
|
+
this.destroyed||(this.enter_cli_mode(),this.reset_on_disconnect&&(this.reset(),this.reset_on_disconnect=!1),this.cli_write_response_code(3))})}};H.prototype.cli_exec=function(a){const b=a.length;if(0===b)this.socket&&this.socket.readyState===WebSocket.CONNECTING?this.socket.close():this.cli_write_response_code(0);else{var c=a.search(/(at|AT)/);if(!(0>c)){c+=2;for(var d=()=>{const g=c;let h=0;for(;c<b;){const l=a.charCodeAt(c)-48;if(0>l||9<l)break;else h=10*h+l,c++}return c===g?void 0:h},e=!0;c<b&&
|
|
249
|
+
!0===e;){var f=a[c++].toUpperCase();c<b&&"&"===f&&(f+=a[c++].toUpperCase());if(!(f in qc)){e=4;break}const g=qc[f];let h;if("custom"!==g&&(h=this.cli_decode_arg(g,d()),!1===h)){e=4;break}switch(f){case "D":this.socket?e=4:(this.cli_exec_dial(a,c),e=!1);break;case "E":this.do_echo=1===h;break;case "H":this.socket?(this.socket.close(),e=!1):e=4;break;case "I":this.cli_write_info_text("V86 Modem Emulation");break;case "L":break;case "M":break;case "O":this.socket?(this.enter_data_mode(),e=1):e=4;break;
|
|
250
|
+
case "P":this.use_tone_dialling=!1;break;case "Q":this.resp_suppress=1===h;break;case "S":c<b&&"?"===a[c]?(c++,this.cli_write_info_text(this.sreg[h].toString().padStart(3,"0"))):c<b&&"="===a[c]?(c++,f=d(),void 0!==f&&256>f?this.sreg[h]=f:e=4):e=4;break;case "T":this.use_tone_dialling=!0;break;case "V":this.resp_verbose=1===h;break;case "X":break;case "Z":case "&F":this.socket?(this.reset_on_disconnect=!0,this.socket.close(),e=!1):this.reset();break;case "&C":(this.dcd_always_on=0===h)?this.uart_set_dcd(!0):
|
|
251
|
+
this.uart_set_dcd(null!==this.socket);break;case "&D":this.dtr_low_behaviour=h;break;case "&K":0===h||3===h?this.use_rtscts_flowctrl=3===h:e=4;break;default:e=4}}!0===e?this.cli_write_response_code(0):"number"===typeof e&&this.cli_write_response_code(e)}}};H.prototype.cli_write_info_text=function(a){this.resp_verbose&&(this.uart_write_byte(this.sreg[3]),this.uart_write_byte(this.sreg[4]));this.uart_write(a);this.uart_write_byte(this.sreg[3]);this.uart_write_byte(this.sreg[4])};H.prototype.cli_write_response_code=
|
|
252
|
+
function(a){if(!this.resp_suppress){const b=rc[a in rc?a:4];this.resp_verbose?(this.uart_write_byte(this.sreg[3]),this.uart_write_byte(this.sreg[4]),this.uart_write(b),this.uart_write_byte(this.sreg[3]),this.uart_write_byte(this.sreg[4])):(this.uart_write(a.toString()),this.uart_write_byte(this.sreg[3]))}};function vc(){this.filedata=new Map}vc.prototype.read=async function(a,b,c){return(a=this.filedata.get(a))?a.subarray(b,b+c):null};vc.prototype.cache=async function(a,b){this.filedata.set(a,b)};
|
|
253
|
+
vc.prototype.uncache=function(a){this.filedata.delete(a)};function wc(a,b,c){b.endsWith("/")||(b+="/");this.storage=a;this.baseurl=b;this.zstd_decompress=c}wc.prototype.load_from_server=function(a,b){return new Promise(c=>{pa(this.baseurl+a,{done:async d=>{d=new Uint8Array(d);a.endsWith(".zst")&&(d=new Uint8Array(this.zstd_decompress(b,d)));await this.cache(a,d);c(d)}})})};wc.prototype.read=async function(a,b,c,d){const e=await this.storage.read(a,b,c,d);return e?e:(await this.load_from_server(a,
|
|
254
|
+
d)).subarray(b,b+c)};wc.prototype.cache=async function(a,b){return await this.storage.cache(a,b)};wc.prototype.uncache=function(a){this.storage.uncache(a)};const xc=new TextDecoder,yc=new TextEncoder;function K(a,b,c,d){for(var e,f=0,g=0;g<a.length;g++)switch(e=b[g],a[g]){case "w":c[d++]=e&255;c[d++]=e>>8&255;c[d++]=e>>16&255;c[d++]=e>>24&255;f+=4;break;case "d":c[d++]=e&255;c[d++]=e>>8&255;c[d++]=e>>16&255;c[d++]=e>>24&255;c[d++]=0;c[d++]=0;c[d++]=0;c[d++]=0;f+=8;break;case "h":c[d++]=e&255;c[d++]=
|
|
255
|
+
e>>8;f+=2;break;case "b":c[d++]=e;f+=1;break;case "s":var h=d,l=0;c[d++]=0;c[d++]=0;f+=2;e=yc.encode(e);f+=e.byteLength;l+=e.byteLength;c.set(e,d);d+=e.byteLength;c[h+0]=l&255;c[h+1]=l>>8&255;break;case "Q":K(["b","w","d"],[e.type,e.version,e.path],c,d),d+=13,f+=13}return f}function L(a,b,c){let d=c.offset;for(var e=[],f=0;f<a.length;f++)switch(a[f]){case "w":var g=b[d++];g+=b[d++]<<8;g+=b[d++]<<16;g+=b[d++]<<24>>>0;e.push(g);break;case "d":g=b[d++];g+=b[d++]<<8;g+=b[d++]<<16;g+=b[d++]<<24>>>0;d+=
|
|
256
|
+
4;e.push(g);break;case "h":g=b[d++];e.push(g+(b[d++]<<8));break;case "b":e.push(b[d++]);break;case "s":g=b[d++];g+=b[d++]<<8;var h=b.slice(d,d+g);d+=g;e.push(xc.decode(h));break;case "Q":c.offset=d,g=L(["b","w","d"],b,c),d=c.offset,e.push({type:g[0],version:g[1],path:g[2]})}c.offset=d;return e}const zc=new TextEncoder;function N(a,b){this.inodes=[];this.storage=a;this.qidcounter=b||{last_qidnumber:0};this.inodedata={};this.total_size=274877906944;this.used_size=0;this.mounts=[];this.CreateDirectory("",
|
|
257
|
+
-1)}N.prototype.get_state=function(){let a=[];a[0]=this.inodes;a[1]=this.qidcounter.last_qidnumber;a[2]=[];for(const [b,c]of Object.entries(this.inodedata))0===(this.inodes[b].mode&16384)&&a[2].push([b,c]);a[3]=this.total_size;a[4]=this.used_size;return a=a.concat(this.mounts)};N.prototype.set_state=function(a){this.inodes=a[0].map(b=>{const c=new Ac(0);c.set_state(b);return c});this.qidcounter.last_qidnumber=a[1];this.inodedata={};for(let [b,c]of a[2])c.buffer.byteLength!==c.byteLength&&(c=c.slice()),
|
|
258
|
+
this.inodedata[b]=c;this.total_size=a[3];this.used_size=a[4];this.mounts=a.slice(5)};N.prototype.load_from_json=function(a){if(3!==a.version)throw"The filesystem JSON format has changed. Please recreate the filesystem JSON.";var b=a.fsroot;this.used_size=a.size;for(a=0;a<b.length;a++)this.LoadRecursive(b[a],0)};N.prototype.LoadRecursive=function(a,b){var c=this.CreateInode();const d=a[0];c.size=a[1];c.mtime=a[2];c.ctime=c.mtime;c.atime=c.mtime;c.mode=a[3];c.uid=a[4];c.gid=a[5];var e=c.mode&61440;
|
|
259
|
+
16384===e?(this.PushInode(c,b,d),this.LoadDir(this.inodes.length-1,a[6])):32768===e?(c.status=2,c.sha256sum=a[6],this.PushInode(c,b,d)):40960===e?(c.symlink=a[6],this.PushInode(c,b,d)):49152!==e&&y(e)};N.prototype.LoadDir=function(a,b){for(var c=0;c<b.length;c++)this.LoadRecursive(b[c],a)};N.prototype.should_be_linked=function(a){return!this.is_forwarder(a)||0===a.foreign_id};N.prototype.link_under_dir=function(a,b,c){const d=this.inodes[b],e=this.inodes[a];this.is_forwarder(e);this.IsDirectory(a);
|
|
260
|
+
this.should_be_linked(d);e.direntries.has(c);e.direntries.set(c,b);d.nlinks++;this.IsDirectory(b)&&(d.direntries.has(".."),d.direntries.has(".")||d.nlinks++,d.direntries.set(".",b),d.direntries.set("..",a),e.nlinks++)};N.prototype.unlink_from_dir=function(a,b){const c=this.Search(a,b),d=this.inodes[c],e=this.inodes[a];this.is_forwarder(e);this.IsDirectory(a);e.direntries.delete(b)&&(d.nlinks--,this.IsDirectory(c)&&(d.direntries.get(".."),d.direntries.delete(".."),e.nlinks--))};N.prototype.PushInode=
|
|
261
|
+
function(a,b,c){-1!==b?(this.inodes.push(a),a.fid=this.inodes.length-1,this.link_under_dir(b,a.fid,c)):0===this.inodes.length&&(this.inodes.push(a),a.direntries.set(".",0),a.direntries.set("..",0),a.nlinks=2)};function Ac(a){this.direntries=new Map;this.minor=this.major=this.mtime=this.atime=this.ctime=this.fid=this.gid=this.uid=this.size=this.status=0;this.symlink="";this.mode=493;this.qid={type:0,version:0,path:a};this.caps=void 0;this.nlinks=0;this.sha256sum="";this.locks=[];this.foreign_id=this.mount_id=
|
|
262
|
+
-1}Ac.prototype.get_state=function(){const a=[];a[0]=this.mode;a[1]=16384===(this.mode&61440)?[...this.direntries]:32768===(this.mode&61440)?this.sha256sum:40960===(this.mode&61440)?this.symlink:49152===(this.mode&61440)?[this.minor,this.major]:null;a[2]=this.locks;a[3]=this.status;a[4]=this.size;a[5]=this.uid;a[6]=this.gid;a[7]=this.fid;a[8]=this.ctime;a[9]=this.atime;a[10]=this.mtime;a[11]=this.qid.version;a[12]=this.qid.path;a[13]=this.nlinks;return a};Ac.prototype.set_state=function(a){this.mode=
|
|
263
|
+
a[0];if(16384===(this.mode&61440)){this.direntries=new Map;for(const [b,c]of a[1])this.direntries.set(b,c)}else 32768===(this.mode&61440)?this.sha256sum=a[1]:40960===(this.mode&61440)?this.symlink=a[1]:49152===(this.mode&61440)&&([this.minor,this.major]=a[1]);this.locks=[];for(const b of a[2]){const c=new Bc;c.set_state(b);this.locks.push(c)}this.status=a[3];this.size=a[4];this.uid=a[5];this.gid=a[6];this.fid=a[7];this.ctime=a[8];this.atime=a[9];this.mtime=a[10];this.qid.type=(this.mode&61440)>>8;
|
|
264
|
+
this.qid.version=a[11];this.qid.path=a[12];this.nlinks=a[13]};N.prototype.divert=function(a,b){const c=this.Search(a,b),d=this.inodes[c],e=new Ac(-1);this.IsDirectory(c);Object.assign(e,d);const f=this.inodes.length;this.inodes.push(e);e.fid=f;this.is_forwarder(d)&&this.mounts[d.mount_id].backtrack.set(d.foreign_id,f);this.should_be_linked(d)&&(this.unlink_from_dir(a,b),this.link_under_dir(a,f,b));if(this.IsDirectory(c)&&!this.is_forwarder(d))for(const [g,h]of e.direntries)"."!==g&&".."!==g&&this.IsDirectory(h)&&
|
|
265
|
+
this.inodes[h].direntries.set("..",f);this.inodedata[f]=this.inodedata[c];delete this.inodedata[c];d.direntries=new Map;d.nlinks=0;return f};N.prototype.copy_inode=function(a,b){Object.assign(b,a,{fid:b.fid,direntries:b.direntries,nlinks:b.nlinks})};N.prototype.CreateInode=function(){const a=Math.round(Date.now()/1E3),b=new Ac(++this.qidcounter.last_qidnumber);b.atime=b.ctime=b.mtime=a;return b};N.prototype.CreateDirectory=function(a,b){var c=this.inodes[b];if(0<=b&&this.is_forwarder(c))return b=
|
|
266
|
+
c.foreign_id,a=this.follow_fs(c).CreateDirectory(a,b),this.create_forwarder(c.mount_id,a);c=this.CreateInode();c.mode=16895;0<=b&&(c.uid=this.inodes[b].uid,c.gid=this.inodes[b].gid,c.mode=this.inodes[b].mode&511|16384);c.qid.type=64;this.PushInode(c,b,a);this.NotifyListeners(this.inodes.length-1,"newdir");return this.inodes.length-1};N.prototype.CreateFile=function(a,b){var c=this.inodes[b];if(this.is_forwarder(c))return b=c.foreign_id,a=this.follow_fs(c).CreateFile(a,b),this.create_forwarder(c.mount_id,
|
|
267
|
+
a);c=this.CreateInode();c.uid=this.inodes[b].uid;c.gid=this.inodes[b].gid;c.qid.type=128;c.mode=this.inodes[b].mode&438|32768;this.PushInode(c,b,a);this.NotifyListeners(this.inodes.length-1,"newfile");return this.inodes.length-1};N.prototype.CreateNode=function(a,b,c,d){var e=this.inodes[b];if(this.is_forwarder(e))return b=e.foreign_id,a=this.follow_fs(e).CreateNode(a,b,c,d),this.create_forwarder(e.mount_id,a);e=this.CreateInode();e.major=c;e.minor=d;e.uid=this.inodes[b].uid;e.gid=this.inodes[b].gid;
|
|
268
|
+
e.qid.type=192;e.mode=this.inodes[b].mode&438;this.PushInode(e,b,a);return this.inodes.length-1};N.prototype.CreateSymlink=function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=d.foreign_id,a=this.follow_fs(d).CreateSymlink(a,b,c),this.create_forwarder(d.mount_id,a);d=this.CreateInode();d.uid=this.inodes[b].uid;d.gid=this.inodes[b].gid;d.qid.type=160;d.symlink=c;d.mode=40960;this.PushInode(d,b,a);return this.inodes.length-1};N.prototype.CreateTextFile=async function(a,b,c){var d=this.inodes[b];
|
|
269
|
+
if(this.is_forwarder(d))return b=d.foreign_id,c=await this.follow_fs(d).CreateTextFile(a,b,c),this.create_forwarder(d.mount_id,c);d=this.CreateFile(a,b);b=this.inodes[d];a=new Uint8Array(c.length);b.size=c.length;for(b=0;b<c.length;b++)a[b]=c.charCodeAt(b);await this.set_data(d,a);return d};N.prototype.CreateBinaryFile=async function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=d.foreign_id,c=await this.follow_fs(d).CreateBinaryFile(a,b,c),this.create_forwarder(d.mount_id,c);d=this.CreateFile(a,
|
|
270
|
+
b);a=this.inodes[d];b=new Uint8Array(c.length);b.set(c);await this.set_data(d,b);a.size=c.length;return d};N.prototype.OpenInode=async function(a,b){var c=this.inodes[a];if(this.is_forwarder(c))return await this.follow_fs(c).OpenInode(c.foreign_id,b);16384===(c.mode&61440)&&this.FillDirectory(a)};N.prototype.CloseInode=async function(a){var b=this.inodes[a];if(this.is_forwarder(b))return await this.follow_fs(b).CloseInode(b.foreign_id);2===b.status&&this.storage.uncache(b.sha256sum);4===b.status&&
|
|
271
|
+
(b.status=-1,await this.DeleteData(a))};N.prototype.Rename=async function(a,b,c,d){if(a===c&&b===d)return 0;var e=this.Search(a,b);if(-1===e)return-2;var f=this.GetFullPath(a)+"/"+b;if(-1!==this.Search(c,d)){var g=this.Unlink(c,d);if(0>g)return g}var h=this.inodes[e],l=this.inodes[a];g=this.inodes[c];if(this.is_forwarder(l)||this.is_forwarder(g))if(this.is_forwarder(l)&&l.mount_id===g.mount_id){if(a=await this.follow_fs(l).Rename(l.foreign_id,b,g.foreign_id,d),0>a)return a}else{if(this.is_a_root(e)||
|
|
272
|
+
!this.IsDirectory(e)&&1<this.GetInode(e).nlinks)return-1;l=this.divert(a,b);const m=this.GetInode(e),n=await this.Read(l,0,m.size);this.is_forwarder(g)?(c=this.follow_fs(g),d=this.IsDirectory(l)?c.CreateDirectory(d,g.foreign_id):c.CreateFile(d,g.foreign_id),c=c.GetInode(d),this.copy_inode(m,c),this.set_forwarder(e,g.mount_id,d)):(this.delete_forwarder(h),this.copy_inode(m,h),this.link_under_dir(c,e,d));await this.ChangeSize(e,m.size);n&&n.length&&await this.Write(e,0,n.length,n);if(this.IsDirectory(e))for(const p of this.GetChildren(l))if(g=
|
|
273
|
+
await this.Rename(l,p,e,p),0>g)return g;await this.DeleteData(l);a=this.Unlink(a,b);if(0>a)return a}else this.unlink_from_dir(a,b),this.link_under_dir(c,e,d),h.qid.version++;this.NotifyListeners(e,"rename",{oldpath:f});return 0};N.prototype.Write=async function(a,b,c,d){this.NotifyListeners(a,"write");var e=this.inodes[a];if(this.is_forwarder(e))a=e.foreign_id,await this.follow_fs(e).Write(a,b,c,d);else{var f=await this.get_buffer(a);!f||f.length<b+c?(await this.ChangeSize(a,Math.floor(3*(b+c)/2)),
|
|
274
|
+
e.size=b+c,f=await this.get_buffer(a)):e.size<b+c&&(e.size=b+c);d&&f.set(d.subarray(0,c),b);await this.set_data(a,f)}};N.prototype.Read=async function(a,b,c){const d=this.inodes[a];return this.is_forwarder(d)?(a=d.foreign_id,await this.follow_fs(d).Read(a,b,c)):await this.get_data(a,b,c)};N.prototype.Search=function(a,b){a=this.inodes[a];if(this.is_forwarder(a)){const c=a.foreign_id;b=this.follow_fs(a).Search(c,b);return-1===b?-1:this.get_forwarder(a.mount_id,b)}b=a.direntries.get(b);return void 0===
|
|
275
|
+
b?-1:b};N.prototype.CountUsedInodes=function(){let a=this.inodes.length;for(const {fs:b,backtrack:c}of this.mounts)a+=b.CountUsedInodes(),a-=c.size;return a};N.prototype.CountFreeInodes=function(){let a=1048576;for(const {fs:b}of this.mounts)a+=b.CountFreeInodes();return a};N.prototype.GetTotalSize=function(){let a=this.used_size;for(const {fs:b}of this.mounts)a+=b.GetTotalSize();return a};N.prototype.GetSpace=function(){let a=this.total_size;for(const {fs:b}of this.mounts)a+=b.GetSpace();return this.total_size};
|
|
276
|
+
N.prototype.GetDirectoryName=function(a){const b=this.inodes[this.GetParent(a)];if(this.is_forwarder(b))return this.follow_fs(b).GetDirectoryName(this.inodes[a].foreign_id);if(!b)return"";for(const [c,d]of b.direntries)if(d===a)return c;return""};N.prototype.GetFullPath=function(a){this.IsDirectory(a);for(var b="";0!==a;)b="/"+this.GetDirectoryName(a)+b,a=this.GetParent(a);return b.substring(1)};N.prototype.Link=function(a,b,c){if(this.IsDirectory(b))return-1;const d=this.inodes[a],e=this.inodes[b];
|
|
277
|
+
if(this.is_forwarder(d))return this.is_forwarder(e)&&e.mount_id===d.mount_id?this.follow_fs(d).Link(d.foreign_id,e.foreign_id,c):-1;if(this.is_forwarder(e))return-1;this.link_under_dir(a,b,c);return 0};N.prototype.Unlink=function(a,b){if("."===b||".."===b)return-1;const c=this.Search(a,b),d=this.inodes[c],e=this.inodes[a];if(this.is_forwarder(e))return this.is_forwarder(d),a=e.foreign_id,this.follow_fs(e).Unlink(a,b);if(this.IsDirectory(c)&&!this.IsEmpty(c))return-39;this.unlink_from_dir(a,b);0===
|
|
278
|
+
d.nlinks&&(d.status=4,this.NotifyListeners(c,"delete"));return 0};N.prototype.DeleteData=async function(a){const b=this.inodes[a];this.is_forwarder(b)?await this.follow_fs(b).DeleteData(b.foreign_id):(b.size=0,delete this.inodedata[a])};N.prototype.get_buffer=async function(a){const b=this.inodes[a];return this.inodedata[a]?this.inodedata[a]:2===b.status?await this.storage.read(b.sha256sum,0,b.size,b.size):null};N.prototype.get_data=async function(a,b,c){const d=this.inodes[a];return this.inodedata[a]?
|
|
279
|
+
this.inodedata[a].subarray(b,b+c):2===d.status?await this.storage.read(d.sha256sum,b,c,d.size):null};N.prototype.set_data=async function(a,b){this.inodedata[a]=b;2===this.inodes[a].status&&(this.inodes[a].status=0,this.storage.uncache(this.inodes[a].sha256sum))};N.prototype.GetInode=function(a){isNaN(a);a=this.inodes[a];return this.is_forwarder(a)?this.follow_fs(a).GetInode(a.foreign_id):a};N.prototype.ChangeSize=async function(a,b){var c=this.GetInode(a),d=await this.get_data(a,0,c.size);if(b!==
|
|
280
|
+
c.size){var e=new Uint8Array(b);c.size=b;d&&e.set(d.subarray(0,Math.min(d.length,c.size)),0);await this.set_data(a,e)}};N.prototype.SearchPath=function(a){a=a.replace("//","/");a=a.split("/");0<a.length&&0===a[a.length-1].length&&a.pop();0<a.length&&0===a[0].length&&a.shift();const b=a.length;var c=-1,d=0;let e=null;for(var f=0;f<b;f++)if(c=d,d=this.Search(c,a[f]),!e&&this.is_forwarder(this.inodes[c])&&(e="/"+a.slice(f).join("/")),-1===d)return f<b-1?{id:-1,parentid:-1,name:a[f],forward_path:e}:{id:-1,
|
|
281
|
+
parentid:c,name:a[f],forward_path:e};return{id:d,parentid:c,name:a[f],forward_path:e}};N.prototype.GetRecursiveList=function(a,b){if(this.is_forwarder(this.inodes[a])){const c=this.follow_fs(this.inodes[a]),d=this.inodes[a].mount_id,e=b.length;c.GetRecursiveList(this.inodes[a].foreign_id,b);for(a=e;a<b.length;a++)b[a].parentid=this.get_forwarder(d,b[a].parentid)}else for(const [c,d]of this.inodes[a].direntries)"."!==c&&".."!==c&&(b.push({parentid:a,name:c}),this.IsDirectory(d)&&this.GetRecursiveList(d,
|
|
282
|
+
b))};N.prototype.RecursiveDelete=function(a){var b=[];a=this.SearchPath(a);if(-1!==a.id)for(this.GetRecursiveList(a.id,b),a=b.length-1;0<=a;a--)this.Unlink(b[a].parentid,b[a].name)};N.prototype.DeleteNode=function(a){var b=this.SearchPath(a);-1!==b.id&&(32768===(this.inodes[b.id].mode&61440)?this.Unlink(b.parentid,b.name):16384===(this.inodes[b.id].mode&61440)&&(this.RecursiveDelete(a),this.Unlink(b.parentid,b.name)))};N.prototype.NotifyListeners=function(){};N.prototype.Check=function(){for(var a=
|
|
283
|
+
1;a<this.inodes.length;a++)if(-1!==this.inodes[a].status&&(this.GetInode(a),this.IsDirectory(a))){const b=this.GetInode(a);this.IsDirectory(a)&&this.GetParent(a);for(const [c]of b.direntries)for(const d of c);}};N.prototype.FillDirectory=function(a){var b=this.inodes[a];if(this.is_forwarder(b))this.follow_fs(b).FillDirectory(b.foreign_id);else{var c=0;for(const d of b.direntries.keys())c+=24+zc.encode(d).length;a=this.inodedata[a]=new Uint8Array(c);b.size=c;c=0;for(const [d,e]of b.direntries)b=this.GetInode(e),
|
|
284
|
+
c+=K(["Q","d","b","s"],[b.qid,c+13+8+1+2+zc.encode(d).length,b.mode>>12,d],a,c)}};N.prototype.RoundToDirentry=function(a,b){a=this.inodedata[a];if(b>=a.length)return a.length;let c=0;for(;;){const d=L(["Q","d"],a,{offset:c})[1];if(d>b)break;c=d}return c};N.prototype.IsDirectory=function(a){a=this.inodes[a];return this.is_forwarder(a)?this.follow_fs(a).IsDirectory(a.foreign_id):16384===(a.mode&61440)};N.prototype.IsEmpty=function(a){a=this.inodes[a];if(this.is_forwarder(a))return this.follow_fs(a).IsDirectory(a.foreign_id);
|
|
285
|
+
for(const b of a.direntries.keys())if("."!==b&&".."!==b)return!1;return!0};N.prototype.GetChildren=function(a){this.IsDirectory(a);a=this.inodes[a];if(this.is_forwarder(a))return this.follow_fs(a).GetChildren(a.foreign_id);const b=[];for(const c of a.direntries.keys())"."!==c&&".."!==c&&b.push(c);return b};N.prototype.GetParent=function(a){this.IsDirectory(a);a=this.inodes[a];if(this.should_be_linked(a))return a.direntries.get("..");const b=this.follow_fs(a).GetParent(a.foreign_id);return this.get_forwarder(a.mount_id,
|
|
286
|
+
b)};N.prototype.PrepareCAPs=function(a){a=this.GetInode(a);if(a.caps)return a.caps.length;a.caps=new Uint8Array(20);a.caps[0]=0;a.caps[1]=0;a.caps[2]=0;a.caps[3]=2;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;a.caps[12]=63;a.caps[13]=0;a.caps[14]=0;a.caps[15]=0;a.caps[16]=63;a.caps[17]=0;a.caps[18]=0;a.caps[19]=0;return a.caps.length};function Cc(a){this.fs=a;this.backtrack=new Map}Cc.prototype.get_state=function(){const a=[];a[0]=
|
|
287
|
+
this.fs;a[1]=[...this.backtrack];return a};Cc.prototype.set_state=function(a){this.fs=a[0];this.backtrack=new Map(a[1])};N.prototype.set_forwarder=function(a,b,c){const d=this.inodes[a];this.is_forwarder(d)&&this.mounts[d.mount_id].backtrack.delete(d.foreign_id);d.status=5;d.mount_id=b;d.foreign_id=c;this.mounts[b].backtrack.set(c,a)};N.prototype.create_forwarder=function(a,b){const c=this.CreateInode(),d=this.inodes.length;this.inodes.push(c);c.fid=d;this.set_forwarder(d,a,b);return d};N.prototype.is_forwarder=
|
|
288
|
+
function(a){return 5===a.status};N.prototype.is_a_root=function(a){return 0===this.GetInode(a).fid};N.prototype.get_forwarder=function(a,b){const c=this.mounts[a].backtrack.get(b);return void 0===c?this.create_forwarder(a,b):c};N.prototype.delete_forwarder=function(a){this.is_forwarder(a);a.status=-1;this.mounts[a.mount_id].backtrack.delete(a.foreign_id)};N.prototype.follow_fs=function(a){const b=this.mounts[a.mount_id];this.is_forwarder(a);return b.fs};N.prototype.Mount=function(a,b){a=this.SearchPath(a);
|
|
289
|
+
if(-1===a.parentid)return-2;if(-1!==a.id)return-17;if(a.forward_path){var c=this.inodes[a.parentid];b=this.follow_fs(c).Mount(a.forward_path,b);return 0>b?b:this.get_forwarder(c.mount_id,b)}c=this.mounts.length;this.mounts.push(new Cc(b));b=this.create_forwarder(c,0);this.link_under_dir(a.parentid,b,a.name);return b};function Bc(){this.type=2;this.start=0;this.length=Infinity;this.proc_id=-1;this.client_id=""}Bc.prototype.get_state=function(){const a=[];a[0]=this.type;a[1]=this.start;a[2]=Infinity===
|
|
290
|
+
this.length?0:this.length;a[3]=this.proc_id;a[4]=this.client_id;return a};Bc.prototype.set_state=function(a){this.type=a[0];this.start=a[1];this.length=0===a[2]?Infinity:a[2];this.proc_id=a[3];this.client_id=a[4]};Bc.prototype.clone=function(){const a=new Bc;a.set_state(this.get_state());return a};Bc.prototype.conflicts_with=function(a){return this.proc_id===a.proc_id&&this.client_id===a.client_id||2===this.type||2===a.type||1!==this.type&&1!==a.type||this.start+this.length<=a.start||a.start+a.length<=
|
|
291
|
+
this.start?!1:!0};Bc.prototype.is_alike=function(a){return a.proc_id===this.proc_id&&a.client_id===this.client_id&&a.type===this.type};Bc.prototype.may_merge_after=function(a){return this.is_alike(a)&&a.start+a.length===this.start};N.prototype.DescribeLock=function(a,b,c,d,e){const f=new Bc;f.type=a;f.start=b;f.length=c;f.proc_id=d;f.client_id=e;return f};N.prototype.GetLock=function(a,b){a=this.inodes[a];if(this.is_forwarder(a)){var c=a.foreign_id;return this.follow_fs(a).GetLock(c,b)}for(c of a.locks)if(b.conflicts_with(c))return c.clone();
|
|
292
|
+
return null};N.prototype.Lock=function(a,b,c){const d=this.inodes[a];if(this.is_forwarder(d))return a=d.foreign_id,this.follow_fs(d).Lock(a,b,c);b=b.clone();if(2!==b.type&&this.GetLock(a,b))return 1;for(c=0;c<d.locks.length;c++){a=d.locks[c];if(a.start+a.length<=b.start)continue;if(b.start+b.length<=a.start)break;if(a.proc_id!==b.proc_id||a.client_id!==b.client_id){a.conflicts_with(b);continue}var e=b.start+b.length;const f=b.start-a.start,g=a.start+a.length-e;if(0<f&&0<g&&a.type===b.type)return 0;
|
|
293
|
+
0<f&&(a.length=f);if(0>=f&&0<g)a.start=e,a.length=g;else if(0<g){for(;c<d.locks.length&&d.locks[c].start<e;)c++;d.locks.splice(c,0,this.DescribeLock(a.type,e,g,a.proc_id,a.client_id))}else 0>=f&&(d.locks.splice(c,1),c--)}if(2!==b.type){c=b;a=!1;for(e=0;e<d.locks.length&&!(c.may_merge_after(d.locks[e])&&(d.locks[e].length+=b.length,c=d.locks[e],a=!0),b.start<=d.locks[e].start);e++);a||(d.locks.splice(e,0,c),e++);for(;e<d.locks.length;e++)if(d.locks[e].is_alike(c)){d.locks[e].may_merge_after(c)&&(c.length+=
|
|
294
|
+
d.locks[e].length,d.locks.splice(e,1));break}}return 0};N.prototype.read_dir=function(a){a=this.SearchPath(a);if(-1!==a.id)return a=this.GetInode(a.id),Array.from(a.direntries.keys()).filter(b=>"."!==b&&".."!==b)};N.prototype.read_file=function(a){a=this.SearchPath(a);if(-1===a.id)return Promise.resolve(null);const b=this.GetInode(a.id);return this.Read(a.id,0,b.size)};function P(a){this.cpu_is_running=!1;this.cpu_exception_hook=function(){};var b=Ha.create();this.bus=b[0];this.emulator_bus=b[1];
|
|
295
|
+
var c,d;const e=new WebAssembly.Table({element:"anyfunc",initial:1924});b={cpu_exception_hook:g=>this.cpu_exception_hook(g),run_hardware_timers:function(g,h){return c.run_hardware_timers(g,h)},cpu_event_halt:()=>{this.emulator_bus.send("cpu-event-halt")},abort:function(){},microtick:G.microtick,get_rand_int:function(){return ca()},stop_idling:function(){return c.stop_idling()},io_port_read8:function(g){return c.io.port_read8(g)},io_port_read16:function(g){return c.io.port_read16(g)},io_port_read32:function(g){return c.io.port_read32(g)},
|
|
296
|
+
io_port_write8:function(g,h){c.io.port_write8(g,h)},io_port_write16:function(g,h){c.io.port_write16(g,h)},io_port_write32:function(g,h){c.io.port_write32(g,h)},mmap_read8:function(g){return c.mmap_read8(g)},mmap_read32:function(g){return c.mmap_read32(g)},mmap_write8:function(g,h){c.mmap_write8(g,h)},mmap_write16:function(g,h){c.mmap_write16(g,h)},mmap_write32:function(g,h){c.mmap_write32(g,h)},mmap_write64:function(g,h,l){c.mmap_write64(g,h,l)},mmap_write128:function(g,h,l,m,n){c.mmap_write128(g,
|
|
297
|
+
h,l,m,n)},log_from_wasm:function(g,h){ra(d,g,h)},console_log_from_wasm:function(g,h){g=ra(d,g,h);console.error(g)},dbg_trace_from_wasm:function(){},codegen_finalize:(g,h,l,m,n)=>{c.codegen_finalize(g,h,l,m,n)},jit_clear_func:g=>c.jit_clear_func(g),jit_clear_all_funcs:()=>c.jit_clear_all_funcs(),__indirect_function_table:e};let f=a.wasm_fn;f||(f=g=>new Promise(h=>{let l="v86.wasm",m="v86-fallback.wasm";a.wasm_path?(l=a.wasm_path,m=l.replace("v86.wasm","v86-fallback.wasm")):"undefined"===typeof window&&
|
|
298
|
+
"string"===typeof __dirname?(l=__dirname+"/"+l,m=__dirname+"/"+m):(l="build/"+l,m="build/"+m);pa(l,{done:async n=>{try{const {instance:p}=await WebAssembly.instantiate(n,g);this.wasm_source=n;h(p.exports)}catch(p){pa(m,{done:async q=>{const {instance:r}=await WebAssembly.instantiate(q,g);this.wasm_source=q;h(r.exports)}})}},progress:n=>{this.emulator_bus.send("download-progress",{file_index:0,file_count:1,file_name:l,lengthComputable:n.lengthComputable,total:n.total,loaded:n.loaded})}})}));f({env:b}).then(g=>
|
|
299
|
+
{d=g.memory;g.rust_init();g=this.v86=new G(this.emulator_bus,{exports:g,wasm_table:e});c=g.cpu;this.continue_init(g,a)});this.zstd_worker=null;this.zstd_worker_request_id=0}P.prototype.continue_init=async function(a,b){function c(q,r){switch(q){case "hda":e.hda=r;break;case "hdb":e.hdb=r;break;case "cdrom":e.cdrom=r;break;case "fda":e.fda=r;break;case "fdb":e.fdb=r;break;case "multiboot":e.multiboot=r.buffer;break;case "bzimage":e.bzimage=r.buffer;break;case "initrd":e.initrd=r.buffer;break;case "bios":e.bios=
|
|
300
|
+
r.buffer;break;case "vga_bios":e.vga_bios=r.buffer;break;case "initial_state":e.initial_state=r.buffer;break;case "fs9p_json":e.fs9p_json=r}}async function d(){if(e.fs9p&&e.fs9p_json&&!e.initial_state&&(e.fs9p.load_from_json(e.fs9p_json),b.bzimage_initrd_from_filesystem)){const {bzimage_path:q,initrd_path:r}=this.get_bzimage_initrd_from_filesystem(e.fs9p),[x,E]=await Promise.all([e.fs9p.read_file(r),e.fs9p.read_file(q)]);c.call(this,"initrd",new z(x.buffer));c.call(this,"bzimage",new z(E.buffer))}this.serial_adapter&&
|
|
301
|
+
this.serial_adapter.show&&this.serial_adapter.show();this.virtio_console_adapter&&this.virtio_console_adapter.show&&this.virtio_console_adapter.show();this.v86.init(e);this.modem&&this.modem.initialize();e.initial_state&&(a.restore_state(e.initial_state),e.initial_state=void 0);b.autostart&&this.v86.run();this.emulator_bus.send("emulator-loaded")}this.bus.register("emulator-stopped",function(){this.cpu_is_running=!1;this.screen_adapter.pause()},this);this.bus.register("emulator-started",function(){this.cpu_is_running=
|
|
302
|
+
!0;this.screen_adapter.continue()},this);var e={},f=b.boot_order?b.boot_order:b.fda?801:b.hda?786:291;if(b.modem)switch(e.modem=b.modem,b.modem.uart){case 1:b.uart1=!0;break;case 2:b.uart2=!0;break;case 3:b.uart3=!0}e.acpi=b.acpi;e.disable_jit=b.disable_jit;e.load_devices=!0;e.memory_size=b.memory_size||67108864;e.vga_memory_size=b.vga_memory_size||8388608;e.boot_order=f;e.fastboot=b.fastboot||!1;e.fda=void 0;e.fdb=void 0;e.uart1=b.uart1;e.uart2=b.uart2;e.uart3=b.uart3;e.cmdline=b.cmdline;e.preserve_mac_from_state_image=
|
|
303
|
+
b.preserve_mac_from_state_image;e.mac_address_translation=b.mac_address_translation;e.cpuid_level=b.cpuid_level;e.virtio_balloon=b.virtio_balloon;e.virtio_console=!!b.virtio_console;if(f=b.network_relay_url||b.net_device&&b.net_device.relay_url)"fetch"===f?this.network_adapter=new Wb(this.bus,b.net_device):"inbrowser"===f?this.network_adapter=new pc(this.bus,b.net_device):f.startsWith("wisp://")||f.startsWith("wisps://")?this.network_adapter=new Yb(f,this.bus,b.net_device):this.network_adapter=new pb(f,
|
|
304
|
+
this.bus);e.net_device=b.net_device||{type:"ne2k"};f=b.screen||{};b.screen_container&&(f.container=b.screen_container);b.disable_keyboard||(this.keyboard_adapter=new $b(this.bus));b.disable_mouse||(this.mouse_adapter=new ac(this.bus,f.container));this.absolute_pointer_enabled=!1;this.bus.register("vmware-absolute-mouse",function(q){q&&!this.absolute_pointer_enabled&&"undefined"!==typeof document&&document.pointerLockElement&&document.exitPointerLock();this.absolute_pointer_enabled=q},this);this.screen_adapter=
|
|
305
|
+
f.container?new xa(f,()=>this.v86.cpu.devices.vga&&this.v86.cpu.devices.vga.screen_fill_buffer()):f.ansi?new cc(f):new bc(f);e.screen=this.screen_adapter;e.screen_options=f;e.serial_console=b.serial_console||{type:"none"};b.serial_container_xtermjs?(e.serial_console.type="xtermjs",e.serial_console.container=b.serial_container_xtermjs):b.serial_container&&(e.serial_console.type="textarea",e.serial_console.container=b.serial_container);"xtermjs"===e.serial_console?.type?this.serial_adapter=new nc(e.serial_console.container,
|
|
306
|
+
this.bus,e.serial_console.xterm_lib||window.Terminal):"textarea"===e.serial_console?.type&&(this.serial_adapter=new ec(e.serial_console.container,this.bus));f=b.virtio_console&&"boolean"===typeof b.virtio_console?{type:"none"}:b.virtio_console;"xtermjs"===f?.type?this.virtio_console_adapter=new oc(f.container,this.bus,f.xterm_lib||window.Terminal):"textarea"===f?.type&&(this.virtio_console_adapter=new fc(f.container,this.bus));e.modem&&(this.modem=new H(this.bus,e.modem));b.disable_speaker||(this.speaker_adapter=
|
|
307
|
+
new jb(this.bus));var g=[];f=(q,r)=>{if(r)if(r.get&&r.set&&r.load)g.push({name:q,loadable:r});else{if("bios"===q||"vga_bios"===q||"initial_state"===q||"multiboot"===q||"bzimage"===q||"initrd"===q)r.async=!1;if("fda"===q||"fdb"===q)r.async=!1;r.url&&!r.async?g.push({name:q,url:r.url,size:r.size}):g.push({name:q,loadable:Ca(r,this.zstd_decompress_worker.bind(this))})}};b.state&&console.warn("Warning: Unknown option 'state'. Did you mean 'initial_state'?");f("bios",b.bios);f("vga_bios",b.vga_bios);f("cdrom",
|
|
308
|
+
b.cdrom);f("hda",b.hda);f("hdb",b.hdb);f("fda",b.fda);f("fdb",b.fdb);f("initial_state",b.initial_state);f("multiboot",b.multiboot);f("bzimage",b.bzimage);f("initrd",b.initrd);if(b.filesystem&&b.filesystem.handle9p)e.handle9p=b.filesystem.handle9p;else if(b.filesystem&&b.filesystem.proxy_url)e.proxy9p=b.filesystem.proxy_url;else if(b.filesystem){f=b.filesystem.basefs;var h=b.filesystem.baseurl;let q=new vc;h&&(q=new wc(q,h,this.zstd_decompress.bind(this)));e.fs9p=this.fs9p=new N(q);if(f){if("object"===
|
|
309
|
+
typeof f){var l=f.size;f=f.url}g.push({name:"fs9p_json",url:f,size:l,as_json:!0})}}var m=this,n=g.length,p=function(q){if(q===n)setTimeout(d.bind(this),0);else{var r=g[q];r.loadable?(r.loadable.onload=function(){c.call(this,r.name,r.loadable);p(q+1)}.bind(this),r.loadable.load()):pa(r.url,{done:function(x){r.url.endsWith(".zst")&&"initial_state"!==r.name&&(x=this.zstd_decompress(r.size,new Uint8Array(x)));c.call(this,r.name,r.as_json?x:new z(x));p(q+1)}.bind(this),progress:function(x){200===x.target.status?
|
|
310
|
+
m.emulator_bus.send("download-progress",{file_index:q,file_count:n,file_name:r.url,lengthComputable:x.lengthComputable,total:x.total||r.size,loaded:x.loaded}):m.emulator_bus.send("download-error",{file_index:q,file_count:n,file_name:r.url,request:x.target})},as_json:r.as_json})}}.bind(this);p(0)};P.prototype.zstd_decompress=function(a,b){const c=this.v86.cpu;this.zstd_context=c.zstd_create_ctx(b.length);(new Uint8Array(c.wasm_memory.buffer)).set(b,c.zstd_get_src_ptr(this.zstd_context));b=c.zstd_read(this.zstd_context,
|
|
311
|
+
a);const d=c.wasm_memory.buffer.slice(b,b+a);c.zstd_read_free(b,a);c.zstd_free_ctx(this.zstd_context);this.zstd_context=null;return d};P.prototype.zstd_decompress_worker=async function(a,b){if(!this.zstd_worker){const c=URL.createObjectURL(new Blob(["("+function(){let d;globalThis.onmessage=function(e){if(d){var {src:f,decompressed_size:g,id:h}=e.data;e=d.exports;var l=e.zstd_create_ctx(f.length);(new Uint8Array(e.memory.buffer)).set(f,e.zstd_get_src_ptr(l));var m=e.zstd_read(l,g),n=e.memory.buffer.slice(m,
|
|
312
|
+
m+g);e.zstd_read_free(m,g);e.zstd_free_ctx(l);postMessage({result:n,id:h},[n])}else l=Object.fromEntries("cpu_exception_hook run_hardware_timers cpu_event_halt microtick get_rand_int stop_idling io_port_read8 io_port_read16 io_port_read32 io_port_write8 io_port_write16 io_port_write32 mmap_read8 mmap_read32 mmap_write8 mmap_write16 mmap_write32 mmap_write64 mmap_write128 codegen_finalize jit_clear_func jit_clear_all_funcs".split(" ").map(p=>[p,()=>console.error("zstd worker unexpectedly called "+
|
|
313
|
+
p)])),l.__indirect_function_table=new WebAssembly.Table({element:"anyfunc",initial:1024}),l.abort=()=>{throw Error("zstd worker aborted");},l.log_from_wasm=l.console_log_from_wasm=(p,q)=>{console.log(ra(d.exports.memory.buffer,p,q))},l.dbg_trace_from_wasm=()=>console.trace(),d=new WebAssembly.Instance(new WebAssembly.Module(e.data),{env:l})}}.toString()+")()"],{type:"text/javascript"}));this.zstd_worker=new Worker(c);URL.revokeObjectURL(c);this.zstd_worker.postMessage(this.wasm_source,[this.wasm_source])}return new Promise(c=>
|
|
314
|
+
{const d=this.zstd_worker_request_id++,e=async f=>{f.data.id===d&&(this.zstd_worker.removeEventListener("message",e),c(f.data.result))};this.zstd_worker.addEventListener("message",e);this.zstd_worker.postMessage({src:b,decompressed_size:a,id:d},[b.buffer])})};P.prototype.get_bzimage_initrd_from_filesystem=function(a){const b=(a.read_dir("/")||[]).map(e=>"/"+e);a=(a.read_dir("/boot/")||[]).map(e=>"/boot/"+e);let c,d;for(const e of[].concat(b,a)){const f=/old/i.test(e)||/fallback/i.test(e),g=/vmlinuz/i.test(e)||
|
|
315
|
+
/bzimage/i.test(e),h=/initrd/i.test(e)||/initramfs/i.test(e);!g||d&&f||(d=e);!h||c&&f||(c=e)}c&&d||(console.log("Failed to find bzimage or initrd in filesystem. Files:"),console.log(b.join(" ")),console.log(a.join(" ")));return{initrd_path:c,bzimage_path:d}};P.prototype.run=async function(){this.v86.run()};P.prototype.stop=async function(){this.cpu_is_running&&await new Promise(a=>{const b=()=>{this.remove_listener("emulator-stopped",b);a()};this.add_listener("emulator-stopped",b);this.v86.stop()})};
|
|
316
|
+
P.prototype.destroy=async function(){await this.stop();this.v86.destroy();this.keyboard_adapter&&this.keyboard_adapter.destroy();this.network_adapter&&this.network_adapter.destroy();this.mouse_adapter&&this.mouse_adapter.destroy();this.screen_adapter&&this.screen_adapter.destroy();this.serial_adapter&&this.serial_adapter.destroy();this.speaker_adapter&&this.speaker_adapter.destroy();this.virtio_console_adapter&&this.virtio_console_adapter.destroy();this.modem&&this.modem.destroy()};P.prototype.restart=
|
|
317
|
+
function(){this.v86.restart()};P.prototype.add_listener=function(a,b){this.bus.register(a,b,this)};P.prototype.remove_listener=function(a,b){this.bus.unregister(a,b)};P.prototype.restore_state=async function(a){this.v86.restore_state(a)};P.prototype.save_state=async function(){return this.v86.save_state()};P.prototype.get_instruction_counter=function(){return this.v86?this.v86.cpu.instruction_counter[0]>>>0:0};P.prototype.is_running=function(){return this.cpu_is_running};P.prototype.set_fda=async function(a){const b=
|
|
318
|
+
this.v86.cpu.devices.fdc.drives[0];if(a.url&&!a.async)await new Promise(c=>{pa(a.url,{done:d=>{b.insert_disk(new z(d));c()}})});else{const c=Ca(a,this.zstd_decompress_worker.bind(this));c.onload=()=>{b.insert_disk(c)};await c.load()}};P.prototype.set_fdb=async function(a){const b=this.v86.cpu.devices.fdc.drives[1];if(a.url&&!a.async)await new Promise(c=>{pa(a.url,{done:d=>{b.insert_disk(new z(d));c()}})});else{const c=Ca(a,this.zstd_decompress_worker.bind(this));c.onload=()=>{b.insert_disk(c)};await c.load()}};
|
|
319
|
+
P.prototype.eject_fda=function(){this.v86.cpu.devices.fdc.drives[0].eject_disk()};P.prototype.eject_fdb=function(){this.v86.cpu.devices.fdc.drives[1].eject_disk()};P.prototype.get_disk_fda=function(){return this.v86.cpu.devices.fdc.drives[0].get_buffer()};P.prototype.get_disk_fdb=function(){return this.v86.cpu.devices.fdc.drives[1].get_buffer()};P.prototype.set_cdrom=async function(a){if(a.url&&!a.async)pa(a.url,{done:b=>{this.v86.cpu.devices.cdrom.set_cdrom(new z(b))}});else{const b=Ca(a,this.zstd_decompress_worker.bind(this));
|
|
320
|
+
b.onload=()=>{this.v86.cpu.devices.cdrom.set_cdrom(b)};await b.load()}};P.prototype.eject_cdrom=function(){this.v86.cpu.devices.cdrom.eject()};P.prototype.keyboard_send_scancodes=async function(a,b){for(var c=0;c<a.length;c++)this.bus.send("keyboard-code",a[c]),b&&await new Promise(d=>setTimeout(d,b))};P.prototype.keyboard_send_keys=async function(a,b){for(var c=0;c<a.length;c++)this.keyboard_adapter.simulate_press(a[c]),b&&await new Promise(d=>setTimeout(d,b))};P.prototype.keyboard_send_text=async function(a,
|
|
321
|
+
b){for(var c=0;c<a.length;c++)this.keyboard_adapter.simulate_char(a[c]),b&&await new Promise(d=>setTimeout(d,b))};P.prototype.screen_make_screenshot=function(){return this.screen_adapter?this.screen_adapter.make_screenshot():null};P.prototype.screen_set_scale=function(a,b){this.screen_adapter&&this.screen_adapter.set_scale(a,b)};P.prototype.screen_go_fullscreen=function(){if(this.screen_adapter){var a=document.getElementById("screen_container");if(a){var b=a.requestFullScreen||a.webkitRequestFullscreen||
|
|
322
|
+
a.mozRequestFullScreen||a.msRequestFullScreen;b&&(b.call(a),(a=document.getElementsByClassName("phone_keyboard")[0])&&a.focus());try{navigator.keyboard.lock()}catch(c){}this.lock_mouse()}}};P.prototype.lock_mouse=async function(){const a=document.body;try{await a.requestPointerLock({unadjustedMovement:!0})}catch(b){await a.requestPointerLock()}};P.prototype.mouse_set_enabled=function(a){this.mouse_adapter&&(this.mouse_adapter.emu_enabled=a,this.mouse_adapter.update_cursor())};P.prototype.mouse_set_status=
|
|
323
|
+
P.prototype.mouse_set_enabled;P.prototype.keyboard_set_enabled=function(a){this.keyboard_adapter&&(this.keyboard_adapter.emu_enabled=a)};P.prototype.keyboard_set_status=P.prototype.keyboard_set_enabled;P.prototype.serial0_send=function(a){for(var b=0;b<a.length;b++)this.bus.send("serial0-input",a.charCodeAt(b))};P.prototype.serial_send_bytes=function(a,b){for(var c=0;c<b.length;c++)this.bus.send("serial"+a+"-input",b[c])};P.prototype.serial_set_carrier_detect=function(a,b){this.bus.send("serial"+
|
|
324
|
+
a+"-carrier-detect-input",b)};P.prototype.serial_set_ring_indicator=function(a,b){this.bus.send("serial"+a+"-ring-indicator-input",b)};P.prototype.serial_set_data_set_ready=function(a,b){this.bus.send("serial"+a+"-data-set-ready-input",b)};P.prototype.serial_set_clear_to_send=function(a,b){this.bus.send("serial"+a+"-clear-to-send-input",b)};P.prototype.create_file=async function(a,b){var c=this.fs9p;if(c){var d=a.split("/");d=d[d.length-1];a=c.SearchPath(a).parentid;if(""!==d&&-1!==a)await c.CreateBinaryFile(d,
|
|
325
|
+
a,b);else return Promise.reject(new Dc)}};P.prototype.read_file=async function(a){var b=this.fs9p;if(b)return(a=await b.read_file(a))?a:Promise.reject(new Dc)};P.prototype.automatically=function(a){const b=c=>{const d=c[0];if(d){var e=c.slice(1);d.sleep?setTimeout(()=>b(e),1E3*d.sleep):d.vga_text?this.wait_until_vga_screen_contains(d.vga_text).then(()=>b(e)):d.keyboard_send?(Array.isArray(d.keyboard_send)?this.keyboard_send_scancodes(d.keyboard_send):this.keyboard_send_text(d.keyboard_send),b(e)):
|
|
326
|
+
d.call&&(d.call(),b(e))}};b(a)};P.prototype.wait_until_vga_screen_contains=async function(a,b){const c=Array.isArray(a);var d=b?.timeout_msec||0;const e=new Set;b=m=>e.add(m[0]);const f=(m,n)=>n.test?n.test(m):m.startsWith(n),g=[];this.add_listener("screen-put-char",b);for(var h of this.screen_adapter.get_text_screen())if(c)g.push(h.trimRight());else if(f(h,a))return this.remove_listener("screen-put-char",b),!0;h=!1;d=d?performance.now()+d:0;a:for(;!d||performance.now()<d;){if(c){for(var l=g.length;0<
|
|
327
|
+
l&&""===g[l-1];)l--;l-=a.length;if(0<=l){let m=!0;for(let n=0;n<a.length&&m;n++)m=f(g[l+n],a[n]);if(m){h=!0;break}}}await new Promise(m=>setTimeout(m,100));for(const m of e)if(l=this.screen_adapter.get_text_row(m),c)g[m]=l.trimRight();else if(f(l,a)){h=!0;break a}e.clear()}this.remove_listener("screen-put-char",b);return h};P.prototype.read_memory=function(a,b){return this.v86.cpu.read_blob(a,b)};P.prototype.write_memory=function(a,b){this.v86.cpu.write_blob(a,b)};P.prototype.set_serial_container_xtermjs=
|
|
328
|
+
function(a,b=window.Terminal){this.serial_adapter&&this.serial_adapter.destroy&&this.serial_adapter.destroy();this.serial_adapter=new nc(a,this.bus,b);this.serial_adapter.show()};P.prototype.set_virtio_console_container_xtermjs=function(a,b=window.Terminal){this.virtio_console_adapter&&this.virtio_console_adapter.destroy&&this.virtio_console_adapter.destroy();this.virtio_console_adapter=new oc(a,this.bus,b);this.virtio_console_adapter.show()};P.prototype.get_instruction_stats=function(){var a=this.v86.cpu;
|
|
328
329
|
var b="";var c="COMPILE COMPILE_SKIPPED_NO_NEW_ENTRY_POINTS COMPILE_WRONG_ADDRESS_SPACE COMPILE_CUT_OFF_AT_END_OF_PAGE COMPILE_WITH_LOOP_SAFETY COMPILE_PAGE COMPILE_PAGE/COMPILE COMPILE_BASIC_BLOCK COMPILE_DUPLICATED_BASIC_BLOCK COMPILE_WASM_BLOCK COMPILE_WASM_LOOP COMPILE_DISPATCHER COMPILE_ENTRY_POINT COMPILE_WASM_TOTAL_BYTES COMPILE_WASM_TOTAL_BYTES/COMPILE_PAGE RUN_INTERPRETED RUN_INTERPRETED_NEW_PAGE RUN_INTERPRETED_PAGE_HAS_CODE RUN_INTERPRETED_PAGE_HAS_ENTRY_AFTER_PAGE_WALK RUN_INTERPRETED_NEAR_END_OF_PAGE RUN_INTERPRETED_DIFFERENT_STATE RUN_INTERPRETED_DIFFERENT_STATE_CPL3 RUN_INTERPRETED_DIFFERENT_STATE_FLAT RUN_INTERPRETED_DIFFERENT_STATE_IS32 RUN_INTERPRETED_DIFFERENT_STATE_SS32 RUN_INTERPRETED_MISSED_COMPILED_ENTRY_RUN_INTERPRETED RUN_INTERPRETED_STEPS RUN_FROM_CACHE RUN_FROM_CACHE_STEPS RUN_FROM_CACHE_STEPS/RUN_FROM_CACHE RUN_FROM_CACHE_STEPS/RUN_INTERPRETED_STEPS DIRECT_EXIT INDIRECT_JUMP INDIRECT_JUMP_NO_ENTRY NORMAL_PAGE_CHANGE NORMAL_FALLTHRU NORMAL_FALLTHRU_WITH_TARGET_BLOCK NORMAL_BRANCH NORMAL_BRANCH_WITH_TARGET_BLOCK CONDITIONAL_JUMP CONDITIONAL_JUMP_PAGE_CHANGE CONDITIONAL_JUMP_EXIT CONDITIONAL_JUMP_FALLTHRU CONDITIONAL_JUMP_FALLTHRU_WITH_TARGET_BLOCK CONDITIONAL_JUMP_BRANCH CONDITIONAL_JUMP_BRANCH_WITH_TARGET_BLOCK DISPATCHER_SMALL DISPATCHER_LARGE LOOP LOOP_SAFETY CONDITION_OPTIMISED CONDITION_UNOPTIMISED CONDITION_UNOPTIMISED_PF CONDITION_UNOPTIMISED_UNHANDLED_L CONDITION_UNOPTIMISED_UNHANDLED_LE FAILED_PAGE_CHANGE SAFE_READ_FAST SAFE_READ_SLOW_PAGE_CROSSED SAFE_READ_SLOW_NOT_VALID SAFE_READ_SLOW_NOT_USER SAFE_READ_SLOW_IN_MAPPED_RANGE SAFE_WRITE_FAST SAFE_WRITE_SLOW_PAGE_CROSSED SAFE_WRITE_SLOW_NOT_VALID SAFE_WRITE_SLOW_NOT_USER SAFE_WRITE_SLOW_IN_MAPPED_RANGE SAFE_WRITE_SLOW_READ_ONLY SAFE_WRITE_SLOW_HAS_CODE SAFE_READ_WRITE_FAST SAFE_READ_WRITE_SLOW_PAGE_CROSSED SAFE_READ_WRITE_SLOW_NOT_VALID SAFE_READ_WRITE_SLOW_NOT_USER SAFE_READ_WRITE_SLOW_IN_MAPPED_RANGE SAFE_READ_WRITE_SLOW_READ_ONLY SAFE_READ_WRITE_SLOW_HAS_CODE PAGE_FAULT TLB_MISS MAIN_LOOP MAIN_LOOP_IDLE DO_MANY_CYCLES CYCLE_INTERNAL INVALIDATE_ALL_MODULES_NO_FREE_WASM_INDICES INVALIDATE_MODULE_WRITTEN_WHILE_COMPILED INVALIDATE_MODULE_UNUSED_AFTER_OVERWRITE INVALIDATE_MODULE_DIRTY_PAGE INVALIDATE_PAGE_HAD_CODE INVALIDATE_PAGE_HAD_ENTRY_POINTS DIRTY_PAGE_DID_NOT_HAVE_CODE RUN_FROM_CACHE_EXIT_SAME_PAGE RUN_FROM_CACHE_EXIT_NEAR_END_OF_PAGE RUN_FROM_CACHE_EXIT_DIFFERENT_PAGE CLEAR_TLB FULL_CLEAR_TLB TLB_FULL TLB_GLOBAL_FULL MODRM_SIMPLE_REG MODRM_SIMPLE_REG_WITH_OFFSET MODRM_SIMPLE_CONST_OFFSET MODRM_COMPLEX SEG_OFFSET_OPTIMISED SEG_OFFSET_NOT_OPTIMISED SEG_OFFSET_NOT_OPTIMISED_ES SEG_OFFSET_NOT_OPTIMISED_FS SEG_OFFSET_NOT_OPTIMISED_GS SEG_OFFSET_NOT_OPTIMISED_NOT_FLAT".split(" "),
|
|
329
330
|
d=0;const e={};for(let g=0;g<c.length;g++){const h=c[g];var f=void 0;if(h.includes("/")){d++;const [l,m]=h.split("/");f=e[l]/e[m]}else f=e[h]=a.wm.exports.profiler_stat_get(g-d),f=1E8<=f?Math.round(f/1E6)+"m":1E5<=f?Math.round(f/1E3)+"k":f;b+=h+"="+f+"\n"}b+="\n";c=a.wm.exports.get_valid_tlb_entries_count();d=a.wm.exports.get_valid_global_tlb_entries_count();b=b+("TLB_ENTRIES="+c+" ("+d+" global, "+(c-d)+" non-global)\nWASM_TABLE_FREE=")+(a.wm.exports.jit_get_wasm_table_index_free_list_count()+"\n");
|
|
330
331
|
b+="JIT_CACHE_SIZE="+a.wm.exports.jit_get_cache_size()+"\n";b+="FLAT_SEGMENTS="+a.wm.exports.has_flat_segmentation()+"\n";b+="wasm memory size: "+(a.wasm_memory.buffer.byteLength>>20)+"m\n";b=b+"Config:\nJIT_DISABLED="+(a.wm.exports.get_jit_config(0)+"\n");b+="MAX_PAGES="+a.wm.exports.get_jit_config(1)+"\n";b+="JIT_USE_LOOP_SAFETY="+!!a.wm.exports.get_jit_config(2)+"\n";b+="MAX_EXTRA_BASIC_BLOCKS="+a.wm.exports.get_jit_config(3)+"\n";a=[gb(a,!1,!1,!1,!1),gb(a,!0,!1,!1,!1),gb(a,!1,!0,!1,!1),gb(a,!1,
|
|
331
|
-
!1,!0,!1),gb(a,!1,!1,!1,!0)].join("\n\n");return b+a};function Dc(a){this.message=a||"File not found"}Dc.prototype=Error.prototype;"undefined"!==typeof module&&"undefined"!==typeof module.exports?module.exports.V86=
|
|
332
|
-
function(){this.stopping=!1;this.running||(this.running=!0,this.bus.send("emulator-started"));this.next_tick(0)};
|
|
333
|
-
(this.stopping=!0)};
|
|
334
|
-
typeof globalThis.scheduler.postTask&&location.href.includes("use-scheduling-api"))
|
|
335
|
-
function(){const b=URL.createObjectURL(new Blob(["("+a.toString()+")()"],{type:"text/javascript"}));this.worker=new Worker(b);this.worker.onmessage=c=>this.yield_callback(c.data);URL.revokeObjectURL(b)};
|
|
336
|
-
function(){};
|
|
337
|
-
function(a){return fb(this.cpu,a)};if("object"===typeof performance&&performance.now)
|
|
338
|
-
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,9,1,0,0],pci_bars:[],name:"acpi"});this.timer_imprecision_offset=this.timer_last_value=0;this.status=1;this.pm1_enable=this.pm1_status=0;this.last_timer=this.get_timer(
|
|
339
|
-
b.register_write(45058,this,void 0,function(c){y(c);this.pm1_enable=c});b.register_read(45060,this,function(){return this.status&255},function(){return this.status});b.register_write(45060,this,void 0,function(c){y(c);this.status=c});b.register_read(45064,this,void 0,void 0,function(){return this.get_timer(
|
|
332
|
+
!1,!0,!1),gb(a,!1,!1,!1,!0)].join("\n\n");return b+a};function Dc(a){this.message=a||"File not found"}Dc.prototype=Error.prototype;"undefined"!==typeof module&&"undefined"!==typeof module.exports?module.exports.V86=P:"undefined"!==typeof window?window.V86=P:"function"===typeof importScripts&&(self.V86=P);function G(a,b){this.stopping=this.running=!1;this.idle=!0;this.tick_counter=0;this.worker=null;this.cpu=new S(a,b,()=>{this.idle&&this.next_tick(0)});this.bus=a;this.register_yield()}G.prototype.run=
|
|
333
|
+
function(){this.stopping=!1;this.running||(this.running=!0,this.bus.send("emulator-started"));this.next_tick(0)};G.prototype.do_tick=function(){if(this.stopping||!this.running)this.stopping=this.running=!1,this.bus.send("emulator-stopped");else{this.idle=!1;var a=this.cpu.main_loop();this.next_tick(a)}};G.prototype.next_tick=function(a){const b=++this.tick_counter;this.idle=!0;this.yield(a,b)};G.prototype.yield_callback=function(a){a===this.tick_counter&&this.do_tick()};G.prototype.stop=function(){this.running&&
|
|
334
|
+
(this.stopping=!0)};G.prototype.destroy=function(){this.unregister_yield()};G.prototype.restart=function(){this.cpu.reboot_internal()};G.prototype.init=function(a){this.cpu.init(a,this.bus);this.bus.send("emulator-ready")};if("undefined"!==typeof process)G.prototype.yield=function(a,b){1>a?global.setImmediate(c=>this.yield_callback(c),b):setTimeout(c=>this.yield_callback(c),a,b)},G.prototype.register_yield=function(){},G.prototype.unregister_yield=function(){};else if(globalThis.scheduler&&"function"===
|
|
335
|
+
typeof globalThis.scheduler.postTask&&location.href.includes("use-scheduling-api"))G.prototype.yield=function(a,b){a=Math.max(0,a);globalThis.scheduler.postTask(()=>this.yield_callback(b),{delay:a})},G.prototype.register_yield=function(){},G.prototype.unregister_yield=function(){};else if("undefined"!==typeof Worker){function a(){let b;globalThis.onmessage=function(c){const d=c.data.t;b=b&&clearTimeout(b);1>d?postMessage(c.data.tick):b=setTimeout(()=>postMessage(c.data.tick),d)}}G.prototype.register_yield=
|
|
336
|
+
function(){const b=URL.createObjectURL(new Blob(["("+a.toString()+")()"],{type:"text/javascript"}));this.worker=new Worker(b);this.worker.onmessage=c=>this.yield_callback(c.data);URL.revokeObjectURL(b)};G.prototype.yield=function(b,c){this.worker.postMessage({t:b,tick:c})};G.prototype.unregister_yield=function(){this.worker&&this.worker.terminate();this.worker=null}}else G.prototype.yield=function(a){setTimeout(()=>{this.do_tick()},a)},G.prototype.register_yield=function(){},G.prototype.unregister_yield=
|
|
337
|
+
function(){};G.prototype.save_state=function(){for(var a=[],b=db(this.cpu,a),c=[],d=0,e=0;e<a.length;e++){var f=a[e].byteLength;c[e]={offset:d,length:f};d+=f;d=d+3&-4}e=JSON.stringify({buffer_infos:c,state:b});e=(new TextEncoder).encode(e);b=16+e.length;b=b+3&-4;f=b+d;d=new ArrayBuffer(f);var g=new Int32Array(d,0,4);(new Uint8Array(d,16,e.length)).set(e);b=new Uint8Array(d,b);g[0]=-2039052682;g[1]=6;g[2]=f;g[3]=e.length;for(e=0;e<a.length;e++)b.set(a[e],c[e].offset);return d};G.prototype.restore_state=
|
|
338
|
+
function(a){return fb(this.cpu,a)};if("object"===typeof performance&&performance.now)G.microtick=performance.now.bind(performance);else if("function"===typeof require){const {performance:a}=require("perf_hooks");G.microtick=a.now.bind(a)}else G.microtick="object"===typeof process&&process.hrtime?function(){var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:Date.now;function Ec(a){this.cpu=a;var b=a.io;a.devices.pci.register_device({pci_id:56,pci_space:[134,128,19,113,7,0,128,2,8,0,128,6,0,0,128,0,0,
|
|
339
|
+
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,9,1,0,0],pci_bars:[],name:"acpi"});this.timer_imprecision_offset=this.timer_last_value=0;this.status=1;this.pm1_enable=this.pm1_status=0;this.last_timer=this.get_timer(G.microtick());this.gpe=new Uint8Array(4);b.register_read(45056,this,void 0,function(){return this.pm1_status});b.register_write(45056,this,void 0,function(c){y(c,4);this.pm1_status&=~c});b.register_read(45058,this,void 0,function(){return this.pm1_enable});
|
|
340
|
+
b.register_write(45058,this,void 0,function(c){y(c);this.pm1_enable=c});b.register_read(45060,this,function(){return this.status&255},function(){return this.status});b.register_write(45060,this,void 0,function(c){y(c);this.status=c});b.register_read(45064,this,void 0,void 0,function(){return this.get_timer(G.microtick())&16777215});b.register_read(45024,this,function(){return this.gpe[0]});b.register_read(45025,this,function(){return this.gpe[1]});b.register_read(45026,this,function(){return this.gpe[2]});
|
|
340
341
|
b.register_read(45027,this,function(){return this.gpe[3]});b.register_write(45024,this,function(c){y(c);this.gpe[0]=c});b.register_write(45025,this,function(c){y(c);this.gpe[1]=c});b.register_write(45026,this,function(c){y(c);this.gpe[2]=c});b.register_write(45027,this,function(c){y(c);this.gpe[3]=c})}Ec.prototype.timer=function(a){a=this.get_timer(a);var b=0!==((a^this.last_timer)&8388608);this.pm1_enable&1&&b?(this.pm1_status|=1,this.cpu.device_raise_irq(9)):this.cpu.device_lower_irq(9);this.last_timer=
|
|
341
342
|
a;return 100};Ec.prototype.get_timer=function(a){a=Math.round(3579.545*a);a===this.timer_last_value?3579.545>this.timer_imprecision_offset&&this.timer_imprecision_offset++:this.timer_last_value+this.timer_imprecision_offset<=a&&(this.timer_imprecision_offset=0,this.timer_last_value=a);return this.timer_last_value+this.timer_imprecision_offset};Ec.prototype.get_state=function(){var a=[];a[0]=this.status;a[1]=this.pm1_status;a[2]=this.pm1_enable;a[3]=this.gpe;return a};Ec.prototype.set_state=function(a){this.status=
|
|
342
343
|
a[0];this.pm1_status=a[1];this.pm1_enable=a[2];this.gpe=a[3]};function Fc(a,b,c){this.bus=c;this.cpu=a;this.ints=4;this.line_control=this.baud_rate=0;this.lsr=96;this.ier=this.fifo_control=0;this.iir=1;this.irq=this.scratch_register=this.modem_status=this.modem_control=0;this.input=[];this.current_line="";switch(b){case 1016:this.com=0;this.irq=4;break;case 760:this.com=1;this.irq=3;break;case 1E3:this.com=2;this.irq=4;break;case 744:this.irq=this.com=3;break;default:va("Invalid serial port: "+y(b),
|
|
@@ -382,8 +383,8 @@ y(this.curpg),y(g),y(this.boundary),y(h)):(f>this.pstop<<8?(f=(this.pstop<<8)-d,
|
|
|
382
383
|
handlers:[()=>{},c=>{const d=this.virtio.queues[c],e=3<c?c-3>>1:0;for(;d.has_request();){const f=d.pop_request(),g=new Uint8Array(f.length_readable);f.get_next_blob(g);this.bus.send("virtio-console"+e+"-output-bytes",g);this.Ack(c,f)}},()=>{},c=>{if(3===c)for(var d=this.virtio.queues[c];d.has_request();){var e=d.pop_request(),f=new Uint8Array(e.length_readable);e.get_next_blob(f);var g=L(["w","h","h"],f,{offset:0});f=g[0];g=g[1];this.Ack(c,e);switch(g){case 0:for(e=0;e<this.ports;++e)this.SendEvent(e,
|
|
383
384
|
1,0);break;case 3:this.Ack(c,e);this.SendEvent(f,4,1);this.SendName(f,"virtio-"+f);this.SendEvent(f,6,1);break;case 6:this.Ack(c,e);0===f&&this.SendWindowSize(f);break;default:return}}}]},isr_status:{initial_port:46848},device_specific:{initial_port:46592,struct:[{bytes:2,name:"cols",read:()=>this.cols,write:()=>{}},{bytes:2,name:"rows",read:()=>this.rows,write:()=>{}},{bytes:4,name:"max_nr_ports",read:()=>this.ports,write:()=>{}},{bytes:4,name:"emerg_wr",read:()=>0,write:()=>{}}]}});for(let c=0;c<
|
|
384
385
|
this.ports;++c){const d=0===c?0:2*c+2;this.bus.register("virtio-console"+c+"-input-bytes",function(e){var f=this.virtio.queues[d];f.has_request()&&(f=f.pop_request(),this.Send(d,f,new Uint8Array(e)))},this);this.bus.register("virtio-console"+c+"-resize",function(e){0===c&&(this.cols=e[0],this.rows=e[1]);this.virtio.queues[2].is_configured()&&this.virtio.queues[2].has_request()&&this.SendWindowSize(c,e[0],e[1])},this)}}Kc.prototype.SendWindowSize=function(a,b,c){c=c||this.rows;b=b||this.cols;const d=
|
|
385
|
-
this.virtio.queues[2].pop_request(),e=new Uint8Array(12);
|
|
386
|
-
function(a){this.virtio.set_state(a[0]);this.rows=a[1];this.cols=a[2];this.ports=a[3]};Kc.prototype.reset=function(){this.virtio.reset()};Kc.prototype.SendEvent=function(a,b,c){const d=this.virtio.queues[2].pop_request(),e=new Uint8Array(8);
|
|
386
|
+
this.virtio.queues[2].pop_request(),e=new Uint8Array(12);K(["w","h","h","h","h"],[a,5,0,c,b],e,0);this.Send(2,d,e)};Kc.prototype.SendName=function(a,b){const c=this.virtio.queues[2].pop_request();b=(new TextEncoder).encode(b);const d=new Uint8Array(8+b.length+1);K(["w","h","h"],[a,7,1],d,0);for(a=0;a<b.length;++a)d[a+8]=b[a];d[8+b.length]=0;this.Send(2,c,d)};Kc.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.rows;a[2]=this.cols;a[3]=this.ports;return a};Kc.prototype.set_state=
|
|
387
|
+
function(a){this.virtio.set_state(a[0]);this.rows=a[1];this.cols=a[2];this.ports=a[3]};Kc.prototype.reset=function(){this.virtio.reset()};Kc.prototype.SendEvent=function(a,b,c){const d=this.virtio.queues[2].pop_request(),e=new Uint8Array(8);K(["w","h","h"],[a,b,c],e,0);this.Send(2,d,e)};Kc.prototype.Send=function(a,b,c){b.set_next_blob(c);this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};Kc.prototype.Ack=function(a,b){b.set_next_blob(new Uint8Array(0));this.virtio.queues[a].push_reply(b);
|
|
387
388
|
this.virtio.queues[a].flush_replies()};function Mc(a,b){this.cpu=a;this.bus=b;this.reset();this.bus.register("keyboard-code",function(c){this.kbd_send_code(c)},this);this.bus.register("mouse-click",function(c){this.mouse_send_click(c[0],c[1],c[2])},this);this.bus.register("mouse-delta",function(c){this.mouse_send_delta(c[0],c[1])},this);this.bus.register("mouse-wheel",function(c){this.wheel_movement-=c[0];this.wheel_movement-=2*c[1];this.wheel_movement=Math.min(7,Math.max(-8,this.wheel_movement));
|
|
388
389
|
this.send_mouse_packet(0,0)},this);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)}Mc.prototype.reset=function(){this.use_mouse=this.enable_mouse_stream=!1;this.have_mouse=!0;this.mouse_clicks=this.mouse_delta_y=this.mouse_delta_x=0;this.have_keyboard=!0;this.next_read_resolution=this.next_read_rate=this.next_handle_scan_code_set=this.next_read_led=this.next_read_sample=
|
|
389
390
|
this.next_is_mouse_command=this.enable_keyboard_stream=!1;this.kbd_buffer=new ma(1024);this.last_port60_byte=0;this.sample_rate=100;this.mouse_id=this.mouse_detect_state=0;this.mouse_reset_workaround=!1;this.wheel_movement=0;this.resolution=4;this.scaling2=!1;this.last_mouse_packet=-1;this.mouse_buffer=new ma(1024);this.next_byte_is_aux=this.next_byte_is_ready=!1;this.command_register=5;this.controller_output_port=0;this.read_controller_output_port=this.read_command_register=this.read_output_register=
|
|
@@ -440,10 +441,10 @@ const Zc=[{drive_type:4,sectors:18,tracks:80,heads:2},{drive_type:4,sectors:20,t
|
|
|
440
441
|
sectors:44,tracks:80,heads:2},{drive_type:5,sectors:48,tracks:80,heads:2},{drive_type:4,sectors:8,tracks:80,heads:2},{drive_type:4,sectors:9,tracks:80,heads:2},{drive_type:4,sectors:10,tracks:80,heads:2},{drive_type:4,sectors:10,tracks:82,heads:2},{drive_type:4,sectors:10,tracks:83,heads:2},{drive_type:4,sectors:13,tracks:80,heads:2},{drive_type:4,sectors:14,tracks:80,heads:2},{drive_type:2,sectors:15,tracks:80,heads:2},{drive_type:2,sectors:18,tracks:80,heads:2},{drive_type:2,sectors:18,tracks:82,
|
|
441
442
|
heads:2},{drive_type:2,sectors:18,tracks:83,heads:2},{drive_type:2,sectors:20,tracks:80,heads:2},{drive_type:2,sectors:9,tracks:80,heads:2},{drive_type:2,sectors:11,tracks:80,heads:2},{drive_type:2,sectors:9,tracks:40,heads:2},{drive_type:2,sectors:9,tracks:40,heads:1},{drive_type:2,sectors:10,tracks:41,heads:2},{drive_type:2,sectors:10,tracks:42,heads:2},{drive_type:2,sectors:8,tracks:40,heads:2},{drive_type:2,sectors:8,tracks:40,heads:1},{drive_type:4,sectors:9,tracks:80,heads:1},{drive_type:1,
|
|
442
443
|
sectors:10,tracks:40,heads:1},{drive_type:1,sectors:10,tracks:40,heads:2}];function Yc(a,b,c,d){this.name=a;this.curr_head=this.curr_track=this.max_sect=this.max_head=this.max_track=this.drive_type=0;this.curr_sect=1;this.perpendicular=0;this.read_only=!1;this.media_changed=!0;this.buffer=null;Object.seal(this);a=b?.drive_type;void 0!==a&&0<=a&&5>=a&&(this.drive_type=a);this.insert_disk(c,!!b?.read_only);0===this.drive_type&&void 0===a&&(this.drive_type=d)}Yc.prototype.insert_disk=function(a,b){if(!a)return!1;
|
|
443
|
-
a instanceof Uint8Array&&(a=new
|
|
444
|
+
a instanceof Uint8Array&&(a=new z(a.buffer));const [c,d]=this.find_disk_format(a,this.drive_type);if(!c)return!1;this.max_track=d.tracks;this.max_head=d.heads;this.max_sect=d.sectors;this.read_only=!!b;this.media_changed=!0;this.buffer=c;0===this.drive_type&&(this.drive_type=d.drive_type);return!0};Yc.prototype.eject_disk=function(){this.max_sect=this.max_head=this.max_track=0;this.media_changed=!0;this.buffer=null};Yc.prototype.get_buffer=function(){return this.buffer?new Uint8Array(this.buffer.buffer):
|
|
444
445
|
null};Yc.prototype.chs2lba=function(a,b,c){return(a*this.max_head+b)*this.max_sect+c-1};Yc.prototype.find_disk_format=function(a,b){const c=0===b,d=a.byteLength;let e=-1,f=-1,g=-1,h=-1,l=-1;for(let m=0;m<Zc.length;m++){const n=Zc[m],p=n.sectors*n.tracks*n.heads*512;if(d===p)if(c||n.drive_type===b){e=m;break}else c||Xc[n.drive_type]!==Xc[b]?g=-1===g?m:g:f=-1===f?m:f;else d<p&&(-1===l||p<l)&&(h=m,l=p)}return-1!==e?[a,Zc[e]]:-1!==f?[a,Zc[f]]:-1!==g?[a,Zc[g]]:-1!==h?(b=new Uint8Array(l),b.set(new Uint8Array(a.buffer)),
|
|
445
|
-
[new
|
|
446
|
-
a[3]=this.max_sect;a[4]=this.curr_track;a[5]=this.curr_head;a[6]=this.curr_sect;a[7]=this.perpendicular;a[8]=this.read_only;a[9]=this.media_changed;a[10]=this.buffer?this.buffer.get_state():null;return a};Yc.prototype.set_state=function(a){this.drive_type=a[0];this.max_track=a[1];this.max_head=a[2];this.max_sect=a[3];this.curr_track=a[4];this.curr_head=a[5];this.curr_sect=a[6];this.perpendicular=a[7];this.read_only=a[8];this.media_changed=a[9];a[10]?(this.buffer||(this.buffer=new
|
|
446
|
+
[new z(b.buffer),Zc[h]]):[null,null]};Yc.prototype.seek=function(a,b,c){if(b>this.max_track||0!==a&&1===this.max_head)return 2;if(c>this.max_sect)return 3;let d=0;const e=this.chs2lba(this.curr_track,this.curr_head,this.curr_sect),f=this.chs2lba(b,a,c);e!==f&&(this.curr_track!==b&&(this.buffer&&(this.media_changed=!1),d=1),this.curr_head=a,this.curr_track=b,this.curr_sect=c);this.buffer||(d=2);return d};Yc.prototype.get_state=function(){const a=[];a[0]=this.drive_type;a[1]=this.max_track;a[2]=this.max_head;
|
|
447
|
+
a[3]=this.max_sect;a[4]=this.curr_track;a[5]=this.curr_head;a[6]=this.curr_sect;a[7]=this.perpendicular;a[8]=this.read_only;a[9]=this.media_changed;a[10]=this.buffer?this.buffer.get_state():null;return a};Yc.prototype.set_state=function(a){this.drive_type=a[0];this.max_track=a[1];this.max_head=a[2];this.max_sect=a[3];this.curr_track=a[4];this.curr_head=a[5];this.curr_sect=a[6];this.perpendicular=a[7];this.read_only=a[8];this.media_changed=a[9];a[10]?(this.buffer||(this.buffer=new z(new ArrayBuffer(0))),
|
|
447
448
|
this.buffer.set_state(a[10])):this.buffer=null};const $c={[70]:{name:"GET CONFIGURATION",flags:0},[74]:{name:"GET EVENT STATUS NOTIFICATION",flags:0},[18]:{name:"INQUIRY",flags:0},[189]:{name:"MECHANISM STATUS",flags:0},[26]:{name:"MODE SENSE (6)",flags:0},[90]:{name:"MODE SENSE (10)",flags:0},[69]:{name:"PAUSE",flags:1},[30]:{name:"PREVENT ALLOW MEDIUM REMOVAL",flags:0},[40]:{name:"READ (10)",flags:1},[168]:{name:"READ (12)",flags:1},[37]:{name:"READ CAPACITY",flags:1},[190]:{name:"READ CD",flags:1},
|
|
448
449
|
[81]:{name:"READ DISK INFORMATION",flags:1},[66]:{name:"READ SUBCHANNEL",flags:1},[67]:{name:"READ TOC PMA ATIP",flags:1},[82]:{name:"READ TRACK INFORMATION",flags:1},[3]:{name:"REQUEST SENSE",flags:0},[27]:{name:"START STOP UNIT",flags:0},[0]:{name:"TEST UNIT READY",flags:1}};function ad(a,b,c){this.cpu=a;this.bus=b;this.secondary=this.primary=void 0;b=c&&c[0][0];const d=c&&c[1][0];if(b||d){b&&(this.primary=new bd(this,0,c[0],496,1014,14));d&&(this.secondary=new bd(this,1,c[1],368,886,15));c=b?this.primary.command_base:
|
|
449
450
|
0;const e=b?this.primary.control_base:0,f=d?this.secondary.command_base:0,g=d?this.secondary.control_base:0;this.name="ide";this.pci_id=240;this.pci_space=[134,128,16,112,5,0,160,2,0,128,1,1,0,0,0,0,c&255|1,c>>8,0,0,e&255|1,e>>8,0,0,f&255|1,f>>8,0,0,g&255|1,g>>8,0,0,1,180,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,0,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,
|
|
@@ -576,56 +577,56 @@ d.pop_request();const f=new Uint8Array(e.length_readable);e.get_next_blob(f);thi
|
|
|
576
577
|
this.virtio.queues[c];for(;d.has_request();){const f=d.pop_request();if(0<f.length_readable){var e=new Uint8Array(f.length_readable);f.get_next_blob(e);[e]=L(["w"],e,{offset:0});0===e&&(this.free_cb&&this.free_cb(this.zeroed),1<this.fp_cmd&&(this.fp_cmd=1),this.virtio.notify_config_changes())}if(0<f.length_writable)for(new Uint8Array(0),e=0;e<f.write_buffers.length;++e){let g=f.write_buffers[e];this.zeroed+=g.len;this.virtio.cpu.zero_memory(g.addr_low,g.len)}this.virtio.queues[c].push_reply(f)}this.virtio.queues[c].flush_replies()}]},
|
|
577
578
|
isr_status:{initial_port:55040},device_specific:{initial_port:54784,struct:[{bytes:4,name:"num_pages",read:()=>this.num_pages,write:()=>{}},{bytes:4,name:"actual",read:()=>this.actual,write:()=>{}},{bytes:4,name:"free_page_hint_cmd_id",read:()=>this.fp_cmd,write:()=>{}}]}})}gd.prototype.Inflate=function(a){this.num_pages+=a;this.virtio.notify_config_changes()};gd.prototype.Deflate=function(a){this.num_pages-=a;this.virtio.notify_config_changes()};gd.prototype.Cleanup=function(a){this.fp_cmd=2;this.free_cb=
|
|
578
579
|
a;this.zeroed=0;this.virtio.notify_config_changes()};gd.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.num_pages;a[2]=this.actual;return a};gd.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.num_pages=a[1];this.actual=a[2]};gd.prototype.GetStats=function(a){this.stats_cb=a;for(a=this.virtio.queues[2];a.has_request();){const b=a.pop_request();this.virtio.queues[2].push_reply(b)}this.virtio.queues[2].flush_replies()};gd.prototype.Reset=function(){};function hd(a,
|
|
579
|
-
b,c,d){var e=new Uint8Array(b);const f=new Uint16Array(b);var g=new Uint32Array(b),h=e[497]||4,l=f[255];if(43605!==l)y(l);else if(l=f[257]|f[258]<<16,1400005704!==l)y(l);else{l=f[259];var m=e[529],n=f[283],p=g[139],q=g[140],r=e[565],x=518<=l?g[142]:255,
|
|
580
|
+
b,c,d){var e=new Uint8Array(b);const f=new Uint16Array(b);var g=new Uint32Array(b),h=e[497]||4,l=f[255];if(43605!==l)y(l);else if(l=f[257]|f[258]<<16,1400005704!==l)y(l);else{l=f[259];var m=e[529],n=f[283],p=g[139],q=g[140],r=e[565],x=518<=l?g[142]:255,E=g[146],B=g[147],C=g[150],w=g[151],u=g[152];y(l);y(m);y(n);y(g[133]);y(p);y(q);y(r);y(x);y(E);y(B);y(w);y(C);y(u);e[528]=255;e[529]=m&-97|128;f[274]=56832;f[253]=65535;y(56832);d+="\x00";y(581632);g[138]=581632;for(e=0;e<d.length;e++)a[581632+e]=d.charCodeAt(e);
|
|
580
581
|
h=512*(h+1);y(h);d=new Uint8Array(b,0,h);b=new Uint8Array(b,h);e=h=0;c&&(h=67108864,e=c.byteLength,a.set(new Uint8Array(c),h));g[134]=h;g[135]=e;a.set(d,524288);a.set(b,1048576);a=new Uint8Array(512);(new Uint16Array(a.buffer))[0]=43605;a[2]=1;c=3;a[c++]=250;a[c++]=184;a[c++]=32768;a[c++]=128;a[c++]=142;a[c++]=192;a[c++]=142;a[c++]=216;a[c++]=142;a[c++]=224;a[c++]=142;a[c++]=232;a[c++]=142;a[c++]=208;a[c++]=188;a[c++]=57344;a[c++]=224;a[c++]=234;a[c++]=0;a[c++]=0;a[c++]=32800;a[c++]=128;g=a[c]=0;
|
|
581
|
-
for(b=0;b<a.length;b++)g+=a[b];a[c]=-g;return{name:"genroms/kernel.bin",data:a}}}function
|
|
582
|
+
for(b=0;b<a.length;b++)g+=a[b];a[c]=-g;return{name:"genroms/kernel.bin",data:a}}}function S(a,b,c){this.stop_idling=c;this.wm=b;this.wasm_patch();this.create_jit_imports();this.wasm_memory=b=this.wm.exports.memory;this.memory_size=k(Uint32Array,b,812,1);this.mem8=new Uint8Array(0);this.mem32s=new Int32Array(this.mem8.buffer);this.segment_is_null=k(Uint8Array,b,724,8);this.segment_offsets=k(Int32Array,b,736,8);this.segment_limits=k(Uint32Array,b,768,8);this.segment_access_bytes=k(Uint8Array,b,512,
|
|
582
583
|
8);this.protected_mode=k(Int32Array,b,800,1);this.idtr_size=k(Int32Array,b,564,1);this.idtr_offset=k(Int32Array,b,568,1);this.gdtr_size=k(Int32Array,b,572,1);this.gdtr_offset=k(Int32Array,b,576,1);this.tss_size_32=k(Int32Array,b,1128,1);this.page_fault=k(Uint32Array,b,540,8);this.cr=k(Int32Array,b,580,8);this.cpl=k(Uint8Array,b,612,1);this.is_32=k(Int32Array,b,804,1);this.stack_size_32=k(Int32Array,b,808,1);this.in_hlt=k(Uint8Array,b,616,1);this.last_virt_eip=k(Int32Array,b,620,1);this.eip_phys=k(Int32Array,
|
|
583
584
|
b,624,1);this.sysenter_cs=k(Int32Array,b,636,1);this.sysenter_esp=k(Int32Array,b,640,1);this.sysenter_eip=k(Int32Array,b,644,1);this.prefixes=k(Int32Array,b,648,1);this.flags=k(Int32Array,b,120,1);this.flags_changed=k(Int32Array,b,100,1);this.last_op_size=k(Int32Array,b,96,1);this.last_op1=k(Int32Array,b,104,1);this.last_result=k(Int32Array,b,112,1);this.current_tsc=k(Uint32Array,b,960,2);this.devices={};this.instruction_pointer=k(Int32Array,b,556,1);this.previous_ip=k(Int32Array,b,560,1);this.apic_enabled=
|
|
584
585
|
k(Uint8Array,b,548,1);this.acpi_enabled=k(Uint8Array,b,552,1);this.memory_map_read8=[];this.memory_map_write8=[];this.memory_map_read32=[];this.memory_map_write32=[];this.bios={main:null,vga:null};this.instruction_counter=k(Uint32Array,b,664,1);this.reg32=k(Int32Array,b,64,8);this.fpu_st=k(Int32Array,b,1152,32);this.fpu_stack_empty=k(Uint8Array,b,816,1);this.fpu_stack_empty[0]=255;this.fpu_stack_ptr=k(Uint8Array,b,1032,1);this.fpu_stack_ptr[0]=0;this.fpu_control_word=k(Uint16Array,b,1036,1);this.fpu_control_word[0]=
|
|
585
586
|
895;this.fpu_status_word=k(Uint16Array,b,1040,1);this.fpu_status_word[0]=0;this.fpu_ip=k(Int32Array,b,1048,1);this.fpu_ip[0]=0;this.fpu_ip_selector=k(Int32Array,b,1052,1);this.fpu_ip_selector[0]=0;this.fpu_opcode=k(Int32Array,b,1044,1);this.fpu_opcode[0]=0;this.fpu_dp=k(Int32Array,b,1056,1);this.fpu_dp[0]=0;this.fpu_dp_selector=k(Int32Array,b,1060,1);this.fpu_dp_selector[0]=0;this.reg_xmm32s=k(Int32Array,b,832,32);this.mxcsr=k(Int32Array,b,824,1);this.sreg=k(Uint16Array,b,668,8);this.dreg=k(Int32Array,
|
|
586
|
-
b,684,8);this.reg_pdpte=k(Int32Array,b,968,8);this.svga_dirty_bitmap_min_offset=k(Uint32Array,b,716,1);this.svga_dirty_bitmap_max_offset=k(Uint32Array,b,720,1);this.fw_value=[];this.fw_pointer=0;this.option_roms=[];this.io=void 0;this.bus=a;this.set_tsc(0,0)}
|
|
587
|
-
1|0,b>>8)};
|
|
588
|
-
b+a.length),this.mem8.set(a,b))};
|
|
589
|
-
this.jit_imports=a};
|
|
587
|
+
b,684,8);this.reg_pdpte=k(Int32Array,b,968,8);this.svga_dirty_bitmap_min_offset=k(Uint32Array,b,716,1);this.svga_dirty_bitmap_max_offset=k(Uint32Array,b,720,1);this.fw_value=[];this.fw_pointer=0;this.option_roms=[];this.io=void 0;this.bus=a;this.set_tsc(0,0)}S.prototype.mmap_read8=function(a){return this.memory_map_read8[a>>>17](a)};S.prototype.mmap_write8=function(a,b){this.memory_map_write8[a>>>17](a,b)};S.prototype.mmap_write16=function(a,b){var c=this.memory_map_write8[a>>>17];c(a,b&255);c(a+
|
|
588
|
+
1|0,b>>8)};S.prototype.mmap_read32=function(a){return this.memory_map_read32[a>>>17](a)};S.prototype.mmap_write32=function(a,b){this.memory_map_write32[a>>>17](a,b)};S.prototype.mmap_write64=function(a,b,c){var d=this.memory_map_write32[a>>>17];d(a,b);d(a+4,c)};S.prototype.mmap_write128=function(a,b,c,d,e){var f=this.memory_map_write32[a>>>17];f(a,b);f(a+4,c);f(a+8,d);f(a+12,e)};S.prototype.write_blob=function(a,b){a.length&&(this.in_mapped_range(b),this.in_mapped_range(b+a.length-1),this.jit_dirty_cache(b,
|
|
589
|
+
b+a.length),this.mem8.set(a,b))};S.prototype.read_blob=function(a,b){b&&(this.in_mapped_range(a),this.in_mapped_range(a+b-1));return this.mem8.subarray(a,a+b)};S.prototype.clear_opstats=function(){(new Uint8Array(this.wasm_memory.buffer,32768,131072)).fill(0);this.wm.exports.profiler_init()};S.prototype.create_jit_imports=function(){const a=Object.create(null);a.m=this.wm.exports.memory;for(const b of Object.keys(this.wm.exports))b.startsWith("_")||b.startsWith("zstd")||b.endsWith("_js")||(a[b]=this.wm.exports[b]);
|
|
590
|
+
this.jit_imports=a};S.prototype.wasm_patch=function(){const a=c=>this.wm.exports[c],b=c=>{const d=a(c);console.assert(d,"Missing import: "+c);return d};this.reset_cpu=b("reset_cpu");this.getiopl=b("getiopl");this.get_eflags=b("get_eflags");this.handle_irqs=b("handle_irqs");this.main_loop=b("main_loop");this.set_jit_config=b("set_jit_config");this.read8=b("read8");this.read16=b("read16");this.read32s=b("read32s");this.write8=b("write8");this.write16=b("write16");this.write32=b("write32");this.in_mapped_range=
|
|
590
591
|
b("in_mapped_range");this.fpu_load_tag_word=b("fpu_load_tag_word");this.fpu_load_status_word=b("fpu_load_status_word");this.fpu_get_sti_f64=b("fpu_get_sti_f64");this.translate_address_system_read=b("translate_address_system_read_js");this.get_seg_cs=b("get_seg_cs");this.get_real_eip=b("get_real_eip");this.clear_tlb=b("clear_tlb");this.full_clear_tlb=b("full_clear_tlb");this.update_state_flags=b("update_state_flags");this.set_tsc=b("set_tsc");this.store_current_tsc=b("store_current_tsc");this.set_cpuid_level=
|
|
591
592
|
b("set_cpuid_level");this.device_raise_irq=b("device_raise_irq");this.device_lower_irq=b("device_lower_irq");this.apic_timer=b("apic_timer");this.jit_clear_cache=b("jit_clear_cache_js");this.jit_dirty_cache=b("jit_dirty_cache");this.codegen_finalize_finished=b("codegen_finalize_finished");this.allocate_memory=b("allocate_memory");this.zero_memory=b("zero_memory");this.is_memory_zeroed=b("is_memory_zeroed");this.svga_allocate_memory=b("svga_allocate_memory");this.svga_allocate_dest_buffer=b("svga_allocate_dest_buffer");
|
|
592
|
-
this.svga_fill_pixel_buffer=b("svga_fill_pixel_buffer");this.svga_mark_dirty=b("svga_mark_dirty");this.get_pic_addr_master=b("get_pic_addr_master");this.get_pic_addr_slave=b("get_pic_addr_slave");this.get_apic_addr=b("get_apic_addr");this.get_ioapic_addr=b("get_ioapic_addr");this.zstd_create_ctx=b("zstd_create_ctx");this.zstd_get_src_ptr=b("zstd_get_src_ptr");this.zstd_free_ctx=b("zstd_free_ctx");this.zstd_read=b("zstd_read");this.zstd_read_free=b("zstd_read_free")};
|
|
593
|
-
function(a){this.jit_force_generate_unsafe&&this.jit_force_generate_unsafe(a)};
|
|
593
|
+
this.svga_fill_pixel_buffer=b("svga_fill_pixel_buffer");this.svga_mark_dirty=b("svga_mark_dirty");this.get_pic_addr_master=b("get_pic_addr_master");this.get_pic_addr_slave=b("get_pic_addr_slave");this.get_apic_addr=b("get_apic_addr");this.get_ioapic_addr=b("get_ioapic_addr");this.zstd_create_ctx=b("zstd_create_ctx");this.zstd_get_src_ptr=b("zstd_get_src_ptr");this.zstd_free_ctx=b("zstd_free_ctx");this.zstd_read=b("zstd_read");this.zstd_read_free=b("zstd_read_free")};S.prototype.jit_force_generate=
|
|
594
|
+
function(a){this.jit_force_generate_unsafe&&this.jit_force_generate_unsafe(a)};S.prototype.jit_clear_func=function(a){this.wm.wasm_table.set(a+1024,null)};S.prototype.jit_clear_all_funcs=function(){const a=this.wm.wasm_table;for(let b=0;900>b;b++)a.set(1024+b,null)};S.prototype.get_state=function(){var a=[];a[0]=this.memory_size[0];a[1]=new Uint8Array([...this.segment_is_null,...this.segment_access_bytes]);a[2]=this.segment_offsets;a[3]=this.segment_limits;a[4]=this.protected_mode[0];a[5]=this.idtr_offset[0];
|
|
594
595
|
a[6]=this.idtr_size[0];a[7]=this.gdtr_offset[0];a[8]=this.gdtr_size[0];a[9]=this.page_fault[0];a[10]=this.cr;a[11]=this.cpl[0];a[13]=this.is_32[0];a[16]=this.stack_size_32[0];a[17]=this.in_hlt[0];a[18]=this.last_virt_eip[0];a[19]=this.eip_phys[0];a[22]=this.sysenter_cs[0];a[23]=this.sysenter_eip[0];a[24]=this.sysenter_esp[0];a[25]=this.prefixes[0];a[26]=this.flags[0];a[27]=this.flags_changed[0];a[28]=this.last_op1[0];a[30]=this.last_op_size[0];a[37]=this.instruction_pointer[0];a[38]=this.previous_ip[0];
|
|
595
596
|
a[39]=this.reg32;a[40]=this.sreg;a[41]=this.dreg;a[42]=this.reg_pdpte;this.store_current_tsc();a[43]=this.current_tsc;a[45]=this.devices.virtio_9p;a[46]=this.get_state_apic();a[47]=this.devices.rtc;a[48]=this.devices.pci;a[49]=this.devices.dma;a[50]=this.devices.acpi;a[52]=this.devices.vga;a[53]=this.devices.ps2;a[54]=this.devices.uart0;a[55]=this.devices.fdc;this.devices.ide.secondary?a[85]=this.devices.ide:this.devices.ide.primary?.master.is_atapi?a[56]=this.devices.ide.primary:a[57]=this.devices.ide.primary;
|
|
596
597
|
a[58]=this.devices.pit;a[59]=this.devices.net;a[60]=this.get_state_pic();a[61]=this.devices.sb16;a[62]=this.fw_value;a[63]=this.get_state_ioapic();a[64]=this.tss_size_32[0];a[66]=this.reg_xmm32s;a[67]=this.fpu_st;a[68]=this.fpu_stack_empty[0];a[69]=this.fpu_stack_ptr[0];a[70]=this.fpu_control_word[0];a[71]=this.fpu_ip[0];a[72]=this.fpu_ip_selector[0];a[73]=this.fpu_dp[0];a[74]=this.fpu_dp_selector[0];a[75]=this.fpu_opcode[0];const {packed_memory:b,bitmap:c}=this.pack_memory();a[77]=b;a[78]=new Uint8Array(c.get_buffer());
|
|
597
|
-
a[79]=this.devices.uart1;a[80]=this.devices.uart2;a[81]=this.devices.uart3;a[82]=this.devices.virtio_console;a[83]=this.devices.virtio_net;a[84]=this.devices.virtio_balloon;a[86]=this.last_result;a[87]=this.fpu_status_word;a[88]=this.mxcsr;a[89]=this.devices.vmware;return a};
|
|
598
|
-
c[3]=a[3];c[4]=a[4];c[5]=d;c[6]=a[6];c[7]=a[7];c[8]=a[8];c[9]=a[9];c[10]=a[10];c[11]=a[11];c[12]=a[12];d[0]=b[0];d[1]=b[1];d[2]=b[2];d[3]=b[3];d[4]=b[4];d[5]=null;d[6]=b[6];d[7]=b[7];d[8]=b[8];d[9]=b[9];d[10]=b[10];d[11]=b[11];d[12]=b[12];return c};
|
|
598
|
+
a[79]=this.devices.uart1;a[80]=this.devices.uart2;a[81]=this.devices.uart3;a[82]=this.devices.virtio_console;a[83]=this.devices.virtio_net;a[84]=this.devices.virtio_balloon;a[86]=this.last_result;a[87]=this.fpu_status_word;a[88]=this.mxcsr;a[89]=this.devices.vmware;return a};S.prototype.get_state_pic=function(){const a=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_master(),13),b=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_slave(),13),c=[],d=[];c[0]=a[0];c[1]=a[1];c[2]=a[2];
|
|
599
|
+
c[3]=a[3];c[4]=a[4];c[5]=d;c[6]=a[6];c[7]=a[7];c[8]=a[8];c[9]=a[9];c[10]=a[10];c[11]=a[11];c[12]=a[12];d[0]=b[0];d[1]=b[1];d[2]=b[2];d[3]=b[3];d[4]=b[4];d[5]=null;d[6]=b[6];d[7]=b[7];d[8]=b[8];d[9]=b[9];d[10]=b[10];d[11]=b[11];d[12]=b[12];return c};S.prototype.get_state_apic=function(){return new Uint8Array(this.wasm_memory.buffer,this.get_apic_addr(),184)};S.prototype.get_state_ioapic=function(){return new Uint8Array(this.wasm_memory.buffer,this.get_ioapic_addr(),208)};S.prototype.set_state=function(a){this.memory_size[0]=
|
|
599
600
|
a[0];this.mem8.length!==this.memory_size[0]&&console.warn("Note: Memory size mismatch. we="+this.mem8.length+" state="+this.memory_size[0]);8===a[1].length?(this.segment_is_null.set(a[1]),this.segment_access_bytes.fill(242),this.segment_access_bytes[1]=250):16===a[1].length&&(this.segment_is_null.set(a[1].subarray(0,8)),this.segment_access_bytes.set(a[1].subarray(8,16)));this.segment_offsets.set(a[2]);this.segment_limits.set(a[3]);this.protected_mode[0]=a[4];this.idtr_offset[0]=a[5];this.idtr_size[0]=
|
|
600
601
|
a[6];this.gdtr_offset[0]=a[7];this.gdtr_size[0]=a[8];this.page_fault[0]=a[9];this.cr.set(a[10]);this.cpl[0]=a[11];this.is_32[0]=a[13];this.stack_size_32[0]=a[16];this.in_hlt[0]=a[17];this.last_virt_eip[0]=a[18];this.eip_phys[0]=a[19];this.sysenter_cs[0]=a[22];this.sysenter_eip[0]=a[23];this.sysenter_esp[0]=a[24];this.prefixes[0]=a[25];this.flags[0]=a[26];this.flags_changed[0]=a[27];this.last_op1[0]=a[28];this.last_op_size[0]=a[30];this.instruction_pointer[0]=a[37];this.previous_ip[0]=a[38];this.reg32.set(a[39]);
|
|
601
602
|
this.sreg.set(a[40]);this.dreg.set(a[41]);a[42]&&this.reg_pdpte.set(a[42]);this.set_tsc(a[43][0],a[43][1]);this.devices.virtio_9p&&this.devices.virtio_9p.set_state(a[45]);a[46]&&this.set_state_apic(a[46]);this.devices.rtc&&this.devices.rtc.set_state(a[47]);this.devices.dma&&this.devices.dma.set_state(a[49]);this.devices.acpi&&this.devices.acpi.set_state(a[50]);this.devices.vga&&this.devices.vga.set_state(a[52]);this.devices.ps2&&this.devices.ps2.set_state(a[53]);this.devices.uart0&&this.devices.uart0.set_state(a[54]);
|
|
602
603
|
this.devices.fdc&&this.devices.fdc.set_state(a[55]);if(a[56]||a[57]){var b=[[void 0,void 0],[void 0,void 0]];b[0][0]=a[56]?{is_cdrom:!0,buffer:this.devices.cdrom.buffer}:{is_cdrom:!1,buffer:this.devices.ide.primary.master.buffer};this.devices.ide=new ad(this,this.devices.ide.bus,b);this.devices.cdrom=a[56]?this.devices.ide.primary.master:void 0;this.devices.ide.primary.set_state(a[56]||a[57])}else a[85]&&this.devices.ide.set_state(a[85]);this.devices.pci&&this.devices.pci.set_state(a[48]);this.devices.pit&&
|
|
603
604
|
this.devices.pit.set_state(a[58]);this.devices.net&&this.devices.net.set_state(a[59]);this.set_state_pic(a[60]);this.devices.sb16&&this.devices.sb16.set_state(a[61]);this.devices.uart1&&this.devices.uart1.set_state(a[79]);this.devices.uart2&&this.devices.uart2.set_state(a[80]);this.devices.uart3&&this.devices.uart3.set_state(a[81]);this.devices.virtio_console&&this.devices.virtio_console.set_state(a[82]);this.devices.virtio_net&&this.devices.virtio_net.set_state(a[83]);this.devices.virtio_balloon&&
|
|
604
605
|
this.devices.virtio_balloon.set_state(a[84]);this.devices.vmware&&a[89]&&this.devices.vmware.set_state(a[89]);this.fw_value=a[62];a[63]&&this.set_state_ioapic(a[63]);this.tss_size_32[0]=a[64];this.reg_xmm32s.set(a[66]);this.fpu_st.set(a[67]);this.fpu_stack_empty[0]=a[68];this.fpu_stack_ptr[0]=a[69];this.fpu_control_word[0]=a[70];this.fpu_ip[0]=a[71];this.fpu_ip_selector[0]=a[72];this.fpu_dp[0]=a[73];this.fpu_dp_selector[0]=a[74];this.fpu_opcode[0]=a[75];void 0!==a[86]&&(this.last_result=a[86]);void 0!==
|
|
605
|
-
a[87]&&(this.fpu_status_word=a[87]);void 0!==a[88]&&(this.mxcsr=a[88]);b=new oa(a[78].buffer);this.unpack_memory(b,a[77]);this.update_state_flags();this.full_clear_tlb();this.jit_clear_cache()};
|
|
606
|
-
a[11];b[12]=a[12];c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=d[4];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12]};
|
|
607
|
-
b[43]=a[20];b[44]=a[21];b[45]=a[22]||65536}else(new Uint8Array(this.wasm_memory.buffer,this.get_apic_addr(),184)).set(a)};
|
|
608
|
-
12,4096)||b.push(c);a=new oa(a);c=new Uint8Array(b.length<<12);for(const [d,e]of b.entries())a.set(e,1),b=e<<12,b=this.mem8.subarray(b,b+4096),c.set(b,d<<12);return{bitmap:a,packed_memory:c}};
|
|
609
|
-
this.devices.virtio_9p.reset();this.devices.virtio_console&&this.devices.virtio_console.reset();this.devices.virtio_net&&this.devices.virtio_net.reset();this.devices.ps2&&this.devices.ps2.reset();this.load_bios()};
|
|
610
|
-
k(Uint8Array,this.wasm_memory,b,a);this.mem32s=k(Uint32Array,this.wasm_memory,b,a>>2)};
|
|
606
|
+
a[87]&&(this.fpu_status_word=a[87]);void 0!==a[88]&&(this.mxcsr=a[88]);b=new oa(a[78].buffer);this.unpack_memory(b,a[77]);this.update_state_flags();this.full_clear_tlb();this.jit_clear_cache()};S.prototype.set_state_pic=function(a){const b=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_master(),13),c=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_slave(),13);b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];const d=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=
|
|
607
|
+
a[11];b[12]=a[12];c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=d[4];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12]};S.prototype.set_state_apic=function(a){if(a instanceof Array){const b=new Int32Array(this.wasm_memory.buffer,this.get_apic_addr(),46);b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[8]=a[6];b[9]=a[7];b[10]=a[8];b[11]=a[9];b[12]=a[10];b[13]=a[11];b[14]=a[12];b[15]=a[13];b.set(a[15],16);b.set(a[15],24);b.set(a[16],32);b[40]=a[17];b[41]=a[18];b[42]=a[19];
|
|
608
|
+
b[43]=a[20];b[44]=a[21];b[45]=a[22]||65536}else(new Uint8Array(this.wasm_memory.buffer,this.get_apic_addr(),184)).set(a)};S.prototype.set_state_ioapic=function(a){if(a instanceof Array){const b=new Int32Array(this.wasm_memory.buffer,this.get_ioapic_addr(),52);b.set(a[0],0);b.set(a[1],24);b[48]=a[2];b[49]=a[3];b[50]=a[4];b[51]=a[5]}else(new Uint8Array(this.wasm_memory.buffer,this.get_ioapic_addr(),208)).set(a)};S.prototype.pack_memory=function(){var a=this.mem8.length>>12,b=[];for(var c=0;c<a;c++)this.is_memory_zeroed(c<<
|
|
609
|
+
12,4096)||b.push(c);a=new oa(a);c=new Uint8Array(b.length<<12);for(const [d,e]of b.entries())a.set(e,1),b=e<<12,b=this.mem8.subarray(b,b+4096),c.set(b,d<<12);return{bitmap:a,packed_memory:c}};S.prototype.unpack_memory=function(a,b){this.zero_memory(0,this.memory_size[0]);const c=this.memory_size[0]>>12;let d=0;for(let f=0;f<c;f++)if(a.get(f)){var e=d<<12;e=b.subarray(e,e+4096);this.mem8.set(e,f<<12);d++}};S.prototype.reboot_internal=function(){this.reset_cpu();this.fw_value=[];this.devices.virtio_9p&&
|
|
610
|
+
this.devices.virtio_9p.reset();this.devices.virtio_console&&this.devices.virtio_console.reset();this.devices.virtio_net&&this.devices.virtio_net.reset();this.devices.ps2&&this.devices.ps2.reset();this.load_bios()};S.prototype.reset_memory=function(){this.mem8.fill(0)};S.prototype.create_memory=function(a,b){a<b?a=b:0>(a|0)&&(a=Math.pow(2,31)-131072);a=(a-1|131071)+1|0;console.assert(0===this.memory_size[0],"Expected uninitialised memory");this.memory_size[0]=a;b=this.allocate_memory(a);this.mem8=
|
|
611
|
+
k(Uint8Array,this.wasm_memory,b,a);this.mem32s=k(Uint32Array,this.wasm_memory,b,a>>2)};S.prototype.init=function(a,b){this.create_memory(a.memory_size||67108864,a.initrd?67108864:1048576);a.disable_jit&&this.set_jit_config(0,1);a.cpuid_level&&this.set_cpuid_level(a.cpuid_level);this.acpi_enabled[0]=+a.acpi;this.reset_cpu();var c=new Da(this);this.io=c;this.bios.main=a.bios;this.bios.vga=a.vga_bios;this.load_bios();if(a.bzimage){const e=hd(this.mem8,a.bzimage,a.initrd,a.cmdline||"");e&&this.option_roms.push(e)}c.register_read(179,
|
|
611
612
|
this,function(){return 0});var d=0;c.register_read(146,this,function(){return d});c.register_write(146,this,function(e){d=e});c.register_read(1297,this,function(){return this.fw_pointer<this.fw_value.length?this.fw_value[this.fw_pointer++]:0});c.register_write(1296,this,void 0,function(e){function f(l){return new Uint8Array(Int32Array.of(l).buffer)}function g(l){return l>>8|l<<8&65280}function h(l){return l<<24|l<<8&16711680|l>>8&65280|l>>>24}va("bios config port, index="+y(e));this.fw_pointer=0;
|
|
612
613
|
if(0===e)this.fw_value=f(1431127377);else if(1===e)this.fw_value=f(0);else if(3===e)this.fw_value=f(this.memory_size[0]);else if(5===e)this.fw_value=f(1);else if(15===e)this.fw_value=f(1);else if(13===e)this.fw_value=new Uint8Array(16);else if(25===e){e=new Int32Array(4+64*this.option_roms.length);const l=new Uint8Array(e.buffer);e[0]=h(this.option_roms.length);for(let m=0;m<this.option_roms.length;m++){const {name:n,data:p}=this.option_roms[m],q=4+64*m;e[q+0>>2]=h(p.length);e[q+4>>2]=g(49152+m);
|
|
613
|
-
for(let r=0;r<n.length;r++)l[q+8+r]=n.charCodeAt(r)}this.fw_value=l}else 32768<=e&&49152>e?this.fw_value=f(0):49152<=e&&e-49152<this.option_roms.length?this.fw_value=this.option_roms[e-49152].data:(va("Warning: Unimplemented fw index: "+y(e)),this.fw_value=f(0))});this.devices={};a.load_devices&&(this.devices.pci=new Gc(this),this.acpi_enabled[0]&&(this.devices.acpi=new Ec(this)),this.devices.rtc=new hb(this),this.fill_cmos(this.devices.rtc,a),this.devices.dma=new
|
|
614
|
+
for(let r=0;r<n.length;r++)l[q+8+r]=n.charCodeAt(r)}this.fw_value=l}else 32768<=e&&49152>e?this.fw_value=f(0):49152<=e&&e-49152<this.option_roms.length?this.fw_value=this.option_roms[e-49152].data:(va("Warning: Unimplemented fw index: "+y(e)),this.fw_value=f(0))});this.devices={};a.load_devices&&(this.devices.pci=new Gc(this),this.acpi_enabled[0]&&(this.devices.acpi=new Ec(this)),this.devices.rtc=new hb(this),this.fill_cmos(this.devices.rtc,a),this.devices.dma=new A(this),this.devices.vga=new Y(this,
|
|
614
615
|
b,a.screen,a.vga_memory_size||8388608),this.devices.ps2=new Mc(this,b),this.devices.vmware=new Nc(this,b),this.devices.uart0=new Fc(this,1016,b),a.uart1&&(this.devices.uart1=new Fc(this,760,b)),a.uart2&&(this.devices.uart2=new Fc(this,1E3,b)),a.uart3&&(this.devices.uart3=new Fc(this,744,b)),this.devices.fdc=new W(this,a.fda,a.fdb),c=[[void 0,void 0],[void 0,void 0]],a.hda&&(c[0][0]={buffer:a.hda},c[0][1]={buffer:a.hdb}),c[1][0]={is_cdrom:!0,buffer:a.cdrom},this.devices.ide=new ad(this,b,c),this.devices.cdrom=
|
|
615
616
|
this.devices.ide.secondary.master,this.devices.pit=new ib(this,b),"ne2k"===a.net_device.type?this.devices.net=new Jc(this,b,a.preserve_mac_from_state_image,a.mac_address_translation):"virtio"===a.net_device.type&&(this.devices.virtio_net=new cd(this,b,a.preserve_mac_from_state_image,a.net_device.mtu)),a.fs9p?this.devices.virtio_9p=new id(a.fs9p,this,b):a.handle9p?this.devices.virtio_9p=new jd(a.handle9p,this):a.proxy9p&&(this.devices.virtio_9p=new kd(a.proxy9p,this)),a.virtio_console&&(this.devices.virtio_console=
|
|
616
|
-
new Kc(this,b)),a.virtio_balloon&&(this.devices.virtio_balloon=new gd(this,b)),this.devices.sb16=new
|
|
617
|
+
new Kc(this,b)),a.virtio_balloon&&(this.devices.virtio_balloon=new gd(this,b)),this.devices.sb16=new D(this,b));a.multiboot&&(a=this.load_multiboot_option_rom(a.multiboot,a.initrd,a.cmdline))&&(this.bios.main?this.option_roms.push(a):this.reg32[0]=this.io.port_read32(244));this.debug_init()};S.prototype.load_multiboot=function(a){this.load_multiboot_option_rom(a,void 0,"")&&(this.reg32[0]=this.io.port_read32(244))};S.prototype.load_multiboot_option_rom=function(a,b,c){if(8192>a.byteLength){var d=
|
|
617
618
|
new Int32Array(2048);(new Uint8Array(d.buffer)).set(new Uint8Array(a))}else d=new Int32Array(a,0,2048);for(var e=0;8192>e;e+=4){if(464367618===d[e>>2]){var f=d[e+4>>2];if(464367618+f+d[e+8>>2]|0)continue}else continue;va("Multiboot magic found, flags: "+y(f>>>0,8),2);var g=this;this.io.register_read(244,this,function(){return 0},function(){return 0},function(){var n,p=31860;let q=0;if(c){q|=4;g.write32(31760,p);c+="\x00";var r=(new TextEncoder).encode(c);g.write_blob(r,p);p+=r.length}if(f&2){q|=64;
|
|
618
|
-
r=0;g.write32(31788,0);g.write32(31792,p);var x=0;var
|
|
619
|
-
r);r=
|
|
620
|
-
console.assert(40===
|
|
621
|
-
3===
|
|
619
|
+
r=0;g.write32(31788,0);g.write32(31792,p);var x=0;var E=!1;for(n=0;4294967296>n;n+=131072)E&&void 0!==g.memory_map_read8[n>>>17]?(g.write32(p,20),g.write32(p+4,x),g.write32(p+8,0),g.write32(p+12,n-x),g.write32(p+16,0),g.write32(p+20,1),p+=24,r+=24,E=!1):E||void 0!==g.memory_map_read8[n>>>17]||(x=n,E=!0);g.write32(31788,r)}x=r=0;if(f&65536){n=d[e+12>>2];r=d[e+16>>2];var B=d[e+20>>2];x=d[e+24>>2];E=d[e+28>>2];y(n,8);y(r,8);y(B,8);y(x,8);y(E,8);n=new Uint8Array(a,e-(n-r),0===B?void 0:B-r);g.write_blob(n,
|
|
620
|
+
r);r=E|0;x=Math.max(B,x)}else if(1179403647===d[0]){E=new DataView(a);const [C,w]=Vc(E,Sc);console.assert(52===w);console.assert(1179403647===C.magic,"Bad magic");console.assert(1===C.class,"Unimplemented: 64 bit elf");console.assert(1===C.data,"Unimplemented: big endian");console.assert(1===C.version0,"Bad version0");console.assert(2===C.type,"Unimplemented type");console.assert(1===C.version1,"Bad version1");console.assert(52===C.ehsize,"Bad header size");console.assert(32===C.phentsize,"Bad program header size");
|
|
621
|
+
console.assert(40===C.shentsize,"Bad section header size");[r]=Wc(new DataView(E.buffer,E.byteOffset+C.phoff,C.phentsize*C.phnum),Tc,C.phnum);Wc(new DataView(E.buffer,E.byteOffset+C.shoff,C.shentsize*C.shnum),Uc,C.shnum);E=C;n=r;r=E.entry;for(B of n)0!==B.type&&(1===B.type?B.paddr+B.memsz<g.memory_size[0]?(B.filesz&&(n=new Uint8Array(a,B.offset,B.filesz),g.write_blob(n,B.paddr)),x=Math.max(x,B.paddr+B.memsz),r===E.entry&&B.vaddr<=r&&B.vaddr+B.memsz>r&&(r=r-B.vaddr+B.paddr)):y(B.paddr):2===B.type||
|
|
622
|
+
3===B.type||4===B.type||6===B.type||7===B.type||1685382480===B.type||1685382481===B.type||1685382482===B.type||1685382483===B.type||y(B.type))}b&&(q|=8,g.write32(31764,1),g.write32(31768,p),B=x,0!==(B&4095)&&(B=(B&-4096)+4096),x=B+b.byteLength,g.write32(p,B),g.write32(p+4,x),g.write32(p+8,0),g.write32(p+12,0),g.write_blob(new Uint8Array(b),B));g.write32(31744,q);g.reg32[3]=31744;g.cr[0]=1;g.protected_mode[0]=1;g.flags[0]=2;g.is_32[0]=1;g.stack_size_32[0]=1;for(p=0;6>p;p++)g.segment_is_null[p]=0,g.segment_offsets[p]=
|
|
622
623
|
0,g.segment_limits[p]=4294967295,g.sreg[p]=45058;g.instruction_pointer[0]=g.get_seg_cs()+r|0;g.update_state_flags();g.dump_state();g.dump_regs_short();return 732803074});this.io.register_write_consecutive(244,this,function(n){console.log("Test exited with code "+y(n,2));throw"HALT";},function(){},function(){},function(){});for(let n=0;15>=n;n++){function p(q){y(n);y(q,2);q?this.device_raise_irq(n):this.device_lower_irq(n)}this.io.register_write(8192+n,this,p,p,p)}const l=new Uint8Array(512);(new Uint16Array(l.buffer))[0]=
|
|
623
|
-
43605;l[2]=1;var h=3;l[h++]=102;l[h++]=229;l[h++]=244;let m=l[h]=0;for(let n=0;n<l.length;n++)m+=l[n];l[h]=-m;return{name:"genroms/multiboot.bin",data:l}}};
|
|
624
|
-
this.memory_size[0]&&(c=this.memory_size[0]-16777216>>16,c=Math.min(c,65535));a.cmos_write(52,c&255);a.cmos_write(53,c>>8&255);a.cmos_write(91,0);a.cmos_write(92,0);a.cmos_write(93,0);a.cmos_write(20,47);a.cmos_write(95,0);b.fastboot&&a.cmos_write(63,1)};
|
|
625
|
-
e-4272947200|0;return e<d.length?d[e]:0},function(){})}this.io.mmap_register(4293918720,1048576,function(e){return this.mem8[e&1048575]}.bind(this),function(e,f){this.mem8[e&1048575]=f}.bind(this))}};
|
|
626
|
-
|
|
627
|
-
function(){};
|
|
628
|
-
|
|
624
|
+
43605;l[2]=1;var h=3;l[h++]=102;l[h++]=229;l[h++]=244;let m=l[h]=0;for(let n=0;n<l.length;n++)m+=l[n];l[h]=-m;return{name:"genroms/multiboot.bin",data:l}}};S.prototype.fill_cmos=function(a,b){var c=b.boot_order||291;a.cmos_write(56,1|c>>4&240);a.cmos_write(61,c&255);a.cmos_write(21,128);a.cmos_write(22,2);c=0;1048576<=this.memory_size[0]&&(c=this.memory_size[0]-1048576>>10,c=Math.min(c,65535));a.cmos_write(23,c&255);a.cmos_write(24,c>>8&255);a.cmos_write(48,c&255);a.cmos_write(49,c>>8&255);c=0;16777216<=
|
|
625
|
+
this.memory_size[0]&&(c=this.memory_size[0]-16777216>>16,c=Math.min(c,65535));a.cmos_write(52,c&255);a.cmos_write(53,c>>8&255);a.cmos_write(91,0);a.cmos_write(92,0);a.cmos_write(93,0);a.cmos_write(20,47);a.cmos_write(95,0);b.fastboot&&a.cmos_write(63,1)};S.prototype.load_bios=function(){var a=this.bios.main,b=this.bios.vga;if(a){var c=new Uint8Array(a);this.write_blob(c,1048576-a.byteLength);if(b){var d=new Uint8Array(b);this.write_blob(d,786432);this.io.mmap_register(4272947200,1048576,function(e){e=
|
|
626
|
+
e-4272947200|0;return e<d.length?d[e]:0},function(){})}this.io.mmap_register(4293918720,1048576,function(e){return this.mem8[e&1048575]}.bind(this),function(e,f){this.mem8[e&1048575]=f}.bind(this))}};S.prototype.codegen_finalize=function(a,b,c,d,e){const f=new Uint8Array(this.wasm_memory.buffer,d>>>0,e>>>0);WebAssembly.instantiate(f,{e:this.jit_imports}).then(g=>{this.wm.wasm_table.set(a+1024,g.instance.exports.f);this.codegen_finalize_finished(a,b,c);this.test_hook_did_finalize_wasm&&this.test_hook_did_finalize_wasm(f)})};
|
|
627
|
+
S.prototype.log_uncompiled_code=function(){};S.prototype.dump_function_code=function(){};S.prototype.run_hardware_timers=function(a,b){const c=this.devices.pit.timer(b,!1),d=this.devices.rtc.timer(b,!1);let e=100,f=100;a&&(e=this.devices.acpi.timer(b),f=this.apic_timer(b));return Math.min(c,d,e,f)};S.prototype.debug_init=function(){};S.prototype.dump_stack=function(){};S.prototype.debug_get_state=function(){};S.prototype.dump_state=function(){};S.prototype.get_regs_short=function(){};S.prototype.dump_regs_short=
|
|
628
|
+
function(){};S.prototype.dump_gdt_ldt=function(){};S.prototype.dump_idt=function(){};S.prototype.dump_page_structures=function(){if(this.cr[4]&32)for(var a=0;4>a;a++){var b=this.read32s(this.cr[3]+8*a);b&1&&this.dump_page_directory(b&4294963200,!0,a<<30)}else this.dump_page_directory(this.cr[3],!1,0)};S.prototype.dump_page_directory=function(){};S.prototype.get_memory_dump=function(){};S.prototype.memory_hex_dump=function(){};S.prototype.used_memory_dump=function(){};S.prototype.debug_interrupt=function(){};
|
|
629
|
+
S.prototype.debug_dump_code=function(){};S.prototype.dump_wasm=function(){};function Lc(a,b){this.cpu=a;this.pci=a.devices.pci;this.device_id=b.device_id;this.pci_space=[244,26,b.device_id&255,b.device_id>>8,7,5,16,0,1,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,b.subsystem_device_id&255,b.subsystem_device_id>>8,0,0,0,0,64,0,0,0,0,0,0,0,0,1,0,0];this.pci_space=this.pci_space.concat(Array(256-this.pci_space.length).fill(0));this.pci_id=b.pci_id;this.pci_bars=
|
|
629
630
|
[];this.name=b.name;this.driver_feature_select=this.device_feature_select=0;this.device_feature=new Uint32Array(4);this.driver_feature=new Uint32Array(4);for(var c of b.common.features)this.device_feature[c>>>5]|=1<<(c&31),this.driver_feature[c>>>5]|=1<<(c&31);b.common.features.includes(32);this.features_ok=!0;this.device_status=0;this.config_has_changed=!1;this.config_generation=0;this.queues=[];for(const d of b.common.queues)this.queues.push(new Z(a,this,d));this.queue_select=0;this.queue_selected=
|
|
630
631
|
this.queues[0];this.isr_status=0;c=[];c.push(this.create_common_capability(b.common));c.push(this.create_notification_capability(b.notification));c.push(this.create_isr_capability(b.isr_status));b.device_specific&&c.push(this.create_device_specific_capability(b.device_specific));this.init_capabilities(c);a.devices.pci.register_device(this);this.reset()}Lc.prototype.create_common_capability=function(a){return{type:1,bar:0,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:4,
|
|
631
632
|
name:"device_feature_select",read:()=>this.device_feature_select,write:b=>{this.device_feature_select=b}},{bytes:4,name:"device_feature",read:()=>this.device_feature[this.device_feature_select]||0,write:()=>{}},{bytes:4,name:"driver_feature_select",read:()=>this.driver_feature_select,write:b=>{this.driver_feature_select=b}},{bytes:4,name:"driver_feature",read:()=>this.driver_feature[this.driver_feature_select]||0,write:b=>{const c=this.device_feature[this.driver_feature_select];this.driver_feature_select<
|
|
@@ -655,21 +656,21 @@ d.len-this.write_buffer_offset;d>c?(d=c,this.write_buffer_offset+=c):(this.write
|
|
|
655
656
|
e.queues[0];f.has_request();){const g=f.pop_request();d(g)}f.notify_me_after(0)}}]},isr_status:{initial_port:42752},device_specific:{initial_port:42496,struct:[{bytes:2,name:"mount tag length",read:()=>b,write:()=>{}}].concat(Array.from(Array(254).keys()).map(f=>({bytes:1,name:"mount tag name "+f,read:()=>c[f]||0,write:()=>{}})))}});return e}function id(a,b,c){this.fs=a;this.bus=c;this.configspace_tagname=[104,111,115,116,57,112];this.configspace_taglen=this.configspace_tagname.length;this.virtio=
|
|
656
657
|
md(b,this.configspace_taglen,this.configspace_tagname,this.ReceiveRequest.bind(this));this.virtqueue=this.virtio.queues[0];this.VERSION="9P2000.L";this.msize=this.BLOCKSIZE=8192;this.replybuffer=new Uint8Array(2*this.msize);this.replybuffersize=0;this.fids=[]}id.prototype.get_state=function(){var a=[];a[0]=this.configspace_tagname;a[1]=this.configspace_taglen;a[2]=this.virtio;a[3]=this.VERSION;a[4]=this.BLOCKSIZE;a[5]=this.msize;a[6]=this.replybuffer;a[7]=this.replybuffersize;a[8]=this.fids.map(function(b){return[b.inodeid,
|
|
657
658
|
b.type,b.uid,b.dbg_name]});a[9]=this.fs;return a};id.prototype.set_state=function(a){this.configspace_tagname=a[0];this.configspace_taglen=a[1];this.virtio.set_state(a[2]);this.virtqueue=this.virtio.queues[0];this.VERSION=a[3];this.BLOCKSIZE=a[4];this.msize=a[5];this.replybuffer=a[6];this.replybuffersize=a[7];this.fids=a[8].map(function(b){return{inodeid:b[0],type:b[1],uid:b[2],dbg_name:b[3]}});this.fs.set_state(a[9])};id.prototype.Createfid=function(a,b,c,d){return{inodeid:a,type:b,uid:c,dbg_name:d}};
|
|
658
|
-
id.prototype.update_dbg_name=function(a,b){for(const c of this.fids)c.inodeid===a&&(c.dbg_name=b)};id.prototype.reset=function(){this.fids=[];this.virtio.reset()};id.prototype.BuildReply=function(a,b,c){
|
|
659
|
-
this.virtqueue.flush_replies()};id.prototype.ReceiveRequest=async function(a){var b=new Uint8Array(a.length_readable);a.get_next_blob(b);var c={offset:0},d=L(["w","b","h"],b,c),e=d[1];d=d[2];switch(e){case 8:var f=this.fs.GetTotalSize();var g=this.fs.GetSpace(),h=[16914839];h[1]=this.BLOCKSIZE;h[2]=Math.floor(g/h[1]);h[3]=h[2]-Math.floor(f/h[1]);h[4]=h[2]-Math.floor(f/h[1]);h[5]=this.fs.CountUsedInodes();h[6]=this.fs.CountFreeInodes();h[7]=0;h[8]=256;f=
|
|
660
|
-
this.BuildReply(e,d,f);this.SendReply(a);break;case 112:case 12:h=L(["w","w"],b,c);f=h[0];var l=h[1];b=this.fids[f].inodeid;c=this.fs.GetInode(b);await this.fs.OpenInode(b,l);h=[];h[0]=c.qid;h[1]=this.msize-24;
|
|
661
|
-
break}this.BuildReply(e,d,0);this.SendReply(a);break;case 16:h=L(["w","s","s","w"],b,c);f=h[0];g=h[1];var m=h[3];b=this.fs.CreateSymlink(g,this.fids[f].inodeid,h[2]);c=this.fs.GetInode(b);c.uid=this.fids[f].uid;c.gid=m;
|
|
662
|
-
this.replybuffer,7);this.BuildReply(e,d,13);this.SendReply(a);break;case 22:h=L(["w"],b,c);f=h[0];c=this.fs.GetInode(this.fids[f].inodeid);f=
|
|
663
|
-
L(["w","s","w","w","w"],b,c);f=h[0];g=h[1];l=h[3];m=h[4];this.bus.send("9p-create",[g,this.fids[f].inodeid]);b=this.fs.CreateFile(g,this.fids[f].inodeid);this.fids[f].inodeid=b;this.fids[f].type=1;this.fids[f].dbg_name=g;c=this.fs.GetInode(b);c.uid=this.fids[f].uid;c.gid=m;c.mode=l|32768;
|
|
664
|
-
h[5],h[6]);f=this.fs.Lock(this.fids[f].inodeid,h,g);
|
|
665
|
-
c=this.fs.GetInode(this.fids[f].inodeid);if(!c||4===c.status){this.SendError(d,"No such file or directory",2);this.SendReply(a);break}h[0]=h[1];h[1]=c.qid;h[2]=c.mode;h[3]=c.uid;h[4]=c.gid;h[5]=c.nlinks;h[6]=c.major<<8|c.minor;h[7]=c.size;h[8]=this.BLOCKSIZE;h[9]=Math.floor(c.size/512+1);h[10]=c.atime;h[11]=0;h[12]=c.mtime;h[13]=0;h[14]=c.ctime;h[15]=0;h[16]=0;h[17]=0;h[18]=0;h[19]=0;
|
|
659
|
+
id.prototype.update_dbg_name=function(a,b){for(const c of this.fids)c.inodeid===a&&(c.dbg_name=b)};id.prototype.reset=function(){this.fids=[];this.virtio.reset()};id.prototype.BuildReply=function(a,b,c){K(["w","b","h"],[c+7,a+1,b],this.replybuffer,0);this.replybuffersize=c+7};id.prototype.SendError=function(a,b,c){b=K(["w"],[c],this.replybuffer,7);this.BuildReply(6,a,b)};id.prototype.SendReply=function(a){a.set_next_blob(this.replybuffer.subarray(0,this.replybuffersize));this.virtqueue.push_reply(a);
|
|
660
|
+
this.virtqueue.flush_replies()};id.prototype.ReceiveRequest=async function(a){var b=new Uint8Array(a.length_readable);a.get_next_blob(b);var c={offset:0},d=L(["w","b","h"],b,c),e=d[1];d=d[2];switch(e){case 8:var f=this.fs.GetTotalSize();var g=this.fs.GetSpace(),h=[16914839];h[1]=this.BLOCKSIZE;h[2]=Math.floor(g/h[1]);h[3]=h[2]-Math.floor(f/h[1]);h[4]=h[2]-Math.floor(f/h[1]);h[5]=this.fs.CountUsedInodes();h[6]=this.fs.CountFreeInodes();h[7]=0;h[8]=256;f=K("wwddddddw".split(""),h,this.replybuffer,7);
|
|
661
|
+
this.BuildReply(e,d,f);this.SendReply(a);break;case 112:case 12:h=L(["w","w"],b,c);f=h[0];var l=h[1];b=this.fids[f].inodeid;c=this.fs.GetInode(b);await this.fs.OpenInode(b,l);h=[];h[0]=c.qid;h[1]=this.msize-24;K(["Q","w"],h,this.replybuffer,7);this.BuildReply(e,d,17);this.SendReply(a);break;case 70:h=L(["w","w","s"],b,c);b=h[0];f=h[1];g=h[2];f=this.fs.Link(this.fids[b].inodeid,this.fids[f].inodeid,g);if(0>f){this.SendError(d,-1===f?"Operation not permitted":"Unknown error: "+-f,-f);this.SendReply(a);
|
|
662
|
+
break}this.BuildReply(e,d,0);this.SendReply(a);break;case 16:h=L(["w","s","s","w"],b,c);f=h[0];g=h[1];var m=h[3];b=this.fs.CreateSymlink(g,this.fids[f].inodeid,h[2]);c=this.fs.GetInode(b);c.uid=this.fids[f].uid;c.gid=m;K(["Q"],[c.qid],this.replybuffer,7);this.BuildReply(e,d,13);this.SendReply(a);break;case 18:h=L("wswwww".split(""),b,c);f=h[0];g=h[1];l=h[2];b=h[3];c=h[4];m=h[5];b=this.fs.CreateNode(g,this.fids[f].inodeid,b,c);c=this.fs.GetInode(b);c.mode=l;c.uid=this.fids[f].uid;c.gid=m;K(["Q"],[c.qid],
|
|
663
|
+
this.replybuffer,7);this.BuildReply(e,d,13);this.SendReply(a);break;case 22:h=L(["w"],b,c);f=h[0];c=this.fs.GetInode(this.fids[f].inodeid);f=K(["s"],[c.symlink],this.replybuffer,7);this.BuildReply(e,d,f);this.SendReply(a);break;case 72:h=L(["w","s","w","w"],b,c);f=h[0];g=h[1];l=h[2];m=h[3];b=this.fs.CreateDirectory(g,this.fids[f].inodeid);c=this.fs.GetInode(b);c.mode=l|16384;c.uid=this.fids[f].uid;c.gid=m;K(["Q"],[c.qid],this.replybuffer,7);this.BuildReply(e,d,13);this.SendReply(a);break;case 14:h=
|
|
664
|
+
L(["w","s","w","w","w"],b,c);f=h[0];g=h[1];l=h[3];m=h[4];this.bus.send("9p-create",[g,this.fids[f].inodeid]);b=this.fs.CreateFile(g,this.fids[f].inodeid);this.fids[f].inodeid=b;this.fids[f].type=1;this.fids[f].dbg_name=g;c=this.fs.GetInode(b);c.uid=this.fids[f].uid;c.gid=m;c.mode=l|32768;K(["Q","w"],[c.qid,this.msize-24],this.replybuffer,7);this.BuildReply(e,d,17);this.SendReply(a);break;case 52:h=L("wbwddws".split(""),b,c);f=h[0];g=h[2];b=0===h[4]?Infinity:h[4];h=this.fs.DescribeLock(h[1],h[3],b,
|
|
665
|
+
h[5],h[6]);f=this.fs.Lock(this.fids[f].inodeid,h,g);K(["b"],[f],this.replybuffer,7);this.BuildReply(e,d,1);this.SendReply(a);break;case 54:h=L("wbddws".split(""),b,c);f=h[0];b=0===h[3]?Infinity:h[3];h=this.fs.DescribeLock(h[1],h[2],b,h[4],h[5]);f=this.fs.GetLock(this.fids[f].inodeid,h);f||(f=h,f.type=2);f=K(["b","d","d","w","s"],[f.type,f.start,Infinity===f.length?0:f.length,f.proc_id,f.client_id],this.replybuffer,7);this.BuildReply(e,d,f);this.SendReply(a);break;case 24:h=L(["w","d"],b,c);f=h[0];
|
|
666
|
+
c=this.fs.GetInode(this.fids[f].inodeid);if(!c||4===c.status){this.SendError(d,"No such file or directory",2);this.SendReply(a);break}h[0]=h[1];h[1]=c.qid;h[2]=c.mode;h[3]=c.uid;h[4]=c.gid;h[5]=c.nlinks;h[6]=c.major<<8|c.minor;h[7]=c.size;h[8]=this.BLOCKSIZE;h[9]=Math.floor(c.size/512+1);h[10]=c.atime;h[11]=0;h[12]=c.mtime;h[13]=0;h[14]=c.ctime;h[15]=0;h[16]=0;h[17]=0;h[18]=0;h[19]=0;K("dQwwwddddddddddddddd".split(""),h,this.replybuffer,7);this.BuildReply(e,d,153);this.SendReply(a);break;case 26:h=
|
|
666
667
|
L("wwwwwddddd".split(""),b,c);f=h[0];c=this.fs.GetInode(this.fids[f].inodeid);h[1]&1&&(c.mode=h[2]);h[1]&2&&(c.uid=h[3]);h[1]&4&&(c.gid=h[4]);h[1]&16&&(c.atime=Math.floor((new Date).getTime()/1E3));h[1]&32&&(c.mtime=Math.floor((new Date).getTime()/1E3));h[1]&64&&(c.ctime=Math.floor((new Date).getTime()/1E3));h[1]&128&&(c.atime=h[6]);h[1]&256&&(c.mtime=h[8]);h[1]&8&&await this.fs.ChangeSize(this.fids[f].inodeid,h[5]);this.BuildReply(e,d,0);this.SendReply(a);break;case 50:L(["w","d"],b,c);this.BuildReply(e,
|
|
667
668
|
d,0);this.SendReply(a);break;case 40:case 116:h=L(["w","d","w"],b,c);f=h[0];g=h[1];l=h[2];c=this.fs.GetInode(this.fids[f].inodeid);if(!c||4===c.status){this.SendError(d,"No such file or directory",2);this.SendReply(a);break}if(2===this.fids[f].type)for(c.caps.length<g+l&&(l=c.caps.length-g),h=0;h<l;h++)this.replybuffer[11+h]=c.caps[g+h];else await this.fs.OpenInode(this.fids[f].inodeid,void 0),h=this.fids[f].inodeid,l=Math.min(l,this.replybuffer.length-11),c.size<g+l?l=c.size-g:40===e&&(l=this.fs.RoundToDirentry(h,
|
|
668
|
-
g+l)-g),g>c.size&&(l=0),this.bus.send("9p-read-start",[this.fids[f].dbg_name]),h=await this.fs.Read(h,g,l),this.bus.send("9p-read-end",[this.fids[f].dbg_name,l]),h&&this.replybuffer.set(h,11);
|
|
669
|
-
this.bus.send("9p-write-end",[h,l]);
|
|
670
|
-
g);if(-1===f){this.SendError(d,"No such file or directory",2);this.SendReply(a);break}f=this.fs.Unlink(this.fids[b].inodeid,g);if(0>f){this.SendError(d,-39===f?"Directory not empty":-1===f?"Operation not permitted":"Unknown error: "+-f,-f);this.SendReply(a);break}this.BuildReply(e,d,0);this.SendReply(a);break;case 100:f=L(["w","s"],b,c);this.msize!==f[0]&&(this.msize=f[0],this.replybuffer=new Uint8Array(Math.min(16777216,2*this.msize)));f=
|
|
671
|
-
this.BuildReply(e,d,f);this.SendReply(a);break;case 104:h=L(["w","w","s","s","w"],b,c);f=h[0];g=h[4];y(h[1]);this.fids[f]=this.Createfid(0,1,g,"");c=this.fs.GetInode(this.fids[f].inodeid);
|
|
672
|
-
|
|
669
|
+
g+l)-g),g>c.size&&(l=0),this.bus.send("9p-read-start",[this.fids[f].dbg_name]),h=await this.fs.Read(h,g,l),this.bus.send("9p-read-end",[this.fids[f].dbg_name,l]),h&&this.replybuffer.set(h,11);K(["w"],[l],this.replybuffer,7);this.BuildReply(e,d,4+l);this.SendReply(a);break;case 118:h=L(["w","d","w"],b,c);f=h[0];g=h[1];l=h[2];h=this.fids[f].dbg_name;if(2===this.fids[f].type){this.SendError(d,"Setxattr not supported",95);this.SendReply(a);break}else await this.fs.Write(this.fids[f].inodeid,g,l,b.subarray(c.offset));
|
|
670
|
+
this.bus.send("9p-write-end",[h,l]);K(["w"],[l],this.replybuffer,7);this.BuildReply(e,d,4);this.SendReply(a);break;case 74:h=L(["w","s","w","s"],b,c);f=await this.fs.Rename(this.fids[h[0]].inodeid,h[1],this.fids[h[2]].inodeid,h[3]);if(0>f){this.SendError(d,-2===f?"No such file or directory":-1===f?"Operation not permitted":-39===f?"Directory not empty":"Unknown error: "+-f,-f);this.SendReply(a);break}this.BuildReply(e,d,0);this.SendReply(a);break;case 76:h=L(["w","s","w"],b,c);b=h[0];g=h[1];f=this.fs.Search(this.fids[b].inodeid,
|
|
671
|
+
g);if(-1===f){this.SendError(d,"No such file or directory",2);this.SendReply(a);break}f=this.fs.Unlink(this.fids[b].inodeid,g);if(0>f){this.SendError(d,-39===f?"Directory not empty":-1===f?"Operation not permitted":"Unknown error: "+-f,-f);this.SendReply(a);break}this.BuildReply(e,d,0);this.SendReply(a);break;case 100:f=L(["w","s"],b,c);this.msize!==f[0]&&(this.msize=f[0],this.replybuffer=new Uint8Array(Math.min(16777216,2*this.msize)));f=K(["w","s"],[this.msize,this.VERSION],this.replybuffer,7);
|
|
672
|
+
this.BuildReply(e,d,f);this.SendReply(a);break;case 104:h=L(["w","w","s","s","w"],b,c);f=h[0];g=h[4];y(h[1]);this.fids[f]=this.Createfid(0,1,g,"");c=this.fs.GetInode(this.fids[f].inodeid);K(["Q"],[c.qid],this.replybuffer,7);this.BuildReply(e,d,13);this.SendReply(a);this.bus.send("9p-attach");break;case 108:L(["h"],b,c);this.BuildReply(e,d,0);this.SendReply(a);break;case 110:h=L(["w","w","h"],b,c);f=h[0];l=h[1];m=h[2];if(0===m){this.fids[l]=this.Createfid(this.fids[f].inodeid,1,this.fids[f].uid,this.fids[f].dbg_name);
|
|
673
|
+
K(["h"],[0],this.replybuffer,7);this.BuildReply(e,d,2);this.SendReply(a);break}g=[];for(h=0;h<m;h++)g.push("s");c=L(g,b,c);b=this.fids[f].inodeid;g=9;var n=0;for(h=0;h<m;h++){b=this.fs.Search(b,c[h]);if(-1===b)break;g+=K(["Q"],[this.fs.GetInode(b).qid],this.replybuffer,g);n++;this.fids[l]=this.Createfid(b,1,this.fids[f].uid,c[h])}K(["h"],[n],this.replybuffer,7);this.BuildReply(e,d,g-7);this.SendReply(a);break;case 120:h=L(["w"],b,c);this.fids[h[0]]&&0<=this.fids[h[0]].inodeid&&(await this.fs.CloseInode(this.fids[h[0]].inodeid),
|
|
673
674
|
this.fids[h[0]].inodeid=-1,this.fids[h[0]].type=-1);this.BuildReply(e,d,0);this.SendReply(a);break;case 32:h=L(["w","s","d","w"],b,c);f=h[0];this.fids[f].type=2;this.BuildReply(e,d,0);this.SendReply(a);break;case 30:L(["w","w","s"],b,c),this.SendError(d,"Setxattr not supported",95),this.SendReply(a)}};function jd(a,b){this.handle_fn=a;this.tag_bufchain=new Map;this.configspace_tagname=[104,111,115,116,57,112];this.configspace_taglen=this.configspace_tagname.length;this.virtio=md(b,this.configspace_taglen,
|
|
674
675
|
this.configspace_tagname,async c=>{const d=new Uint8Array(c.length_readable);c.get_next_blob(d);var e=L(["w","b","h"],d,{offset:0})[2];this.tag_bufchain.set(e,c);this.handle_fn(d,f=>{var g=L(["w","b","h"],f,{offset:0})[2];const h=this.tag_bufchain.get(g);h?(h.set_next_blob(f),this.virtqueue.push_reply(h),this.virtqueue.flush_replies(),this.tag_bufchain.delete(g)):console.error("No bufchain found for tag: "+g)})});this.virtqueue=this.virtio.queues[0]}jd.prototype.get_state=function(){var a=[];a[0]=
|
|
675
676
|
this.configspace_tagname;a[1]=this.configspace_taglen;a[2]=this.virtio;a[3]=this.tag_bufchain;return a};jd.prototype.set_state=function(a){this.configspace_tagname=a[0];this.configspace_taglen=a[1];this.virtio.set_state(a[2]);this.virtqueue=this.virtio.queues[0];this.tag_bufchain=a[3]};jd.prototype.reset=function(){this.virtio.reset()};function kd(a,b){this.socket=void 0;this.cpu=b;this.send_queue=[];this.url=a;this.reconnect_interval=1E4;this.last_connect_attempt=Date.now()-this.reconnect_interval;
|