v86 0.5.10 → 0.5.11
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 +3 -0
- package/build/libv86-debug.mjs +164 -164
- package/build/libv86.js +3 -3
- package/build/libv86.mjs +111 -110
- 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
|
@@ -376,116 +376,117 @@ a[2]=this.device_feature;a[3]=this.driver_feature;a[4]=this.features_ok;a[5]=thi
|
|
|
376
376
|
this.queue_select=a[9];let b=0;for(const c of a.slice(10))this.queues[b].set_state(c),b++;this.queue_selected=this.queues[this.queue_select]||null};da.prototype.reset=function(){this.driver_feature_select=this.device_feature_select=0;this.driver_feature.set(this.device_feature);this.features_ok=!0;this.queue_select=this.device_status=0;this.queue_selected=this.queues[0];for(const a of this.queues)a.reset();this.config_has_changed=!1;this.config_generation=0;this.lower_irq()};da.prototype.notify_config_changes=
|
|
377
377
|
function(){this.config_has_changed=!0;this.device_status&4&&this.raise_irq(2)};da.prototype.update_config_generation=function(){this.config_has_changed&&(this.config_generation++,this.config_generation&=255,this.config_has_changed=!1)};da.prototype.is_feature_negotiated=function(a){return 0<(this.driver_feature[a>>>5]&1<<(a&31))};da.prototype.needs_reset=function(){this.device_status|=64;this.device_status&4&&this.notify_config_changes()};da.prototype.raise_irq=function(a){B(a);this.isr_status|=a;
|
|
378
378
|
this.pci.raise_irq(this.pci_id)};da.prototype.lower_irq=function(){this.isr_status=0;this.pci.lower_irq(this.pci_id)};function V(a,b,c){this.cpu=a;this.virtio=b;this.size_supported=this.size=c.size_supported;this.mask=this.size-1;this.enabled=!1;this.notify_offset=c.notify_offset;this.num_staged_replies=this.used_addr=this.avail_last_idx=this.avail_addr=this.desc_addr=0;this.reset()}V.prototype.get_state=function(){const a=[];a[0]=this.size;a[1]=this.size_supported;a[2]=this.enabled;a[3]=this.notify_offset;
|
|
379
|
-
a[4]=this.desc_addr;a[5]=this.avail_addr;a[6]=this.avail_last_idx;a[7]=this.used_addr;a[8]=this.num_staged_replies;return a};V.prototype.set_state=function(a){this.size=a[0];this.size_supported=a[1];this.enabled=a[2];this.notify_offset=a[3];this.desc_addr=a[4];this.avail_addr=a[5];this.avail_last_idx=a[6];this.used_addr=a[7];this.num_staged_replies=a[8];this.mask=this.size-1};V.prototype.reset=function(){this.enabled=!1;this.num_staged_replies=this.used_addr=this.avail_last_idx=
|
|
380
|
-
0;this.set_size(this.size_supported)};V.prototype.is_configured=function(){return this.desc_addr&&this.avail_addr&&this.used_addr};V.prototype.enable=function(){this.is_configured();this.enabled=!0};V.prototype.set_size=function(a){this.size=a;this.mask=a-1};V.prototype.count_requests=function(){
|
|
381
|
-
a=new lb(this,a);this.avail_last_idx=this.avail_last_idx+1&65535;return a};V.prototype.push_reply=function(a){const b=this.used_get_idx()+this.num_staged_replies&this.mask;this.used_set_entry(b,a.head_idx,a.length_written);this.num_staged_replies++};V.prototype.flush_replies=function(){if(0!==this.num_staged_replies){var a=
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
2,a)};V.prototype.used_set_entry=function(a,b,c){this.cpu.write32(this.used_addr+4+8*a,b);this.cpu.write32(this.used_addr+8+8*a,c)};V.prototype.used_set_avail_event=function(a){this.cpu.write16(this.used_addr+4+8*this.size,a)};function lb(a,b){this.cpu=a.cpu;this.virtio=a.virtio;this.head_idx=b;this.read_buffers=
|
|
385
|
-
a.desc_addr,d=0,e=a.size,g=!1;const f=this.virtio.is_feature_negotiated(28);do{const h=a.get_descriptor(c,b);B(h.addr_high,8);B(h.addr_low,8);B(h.len,8);B(h.flags,4);B(h.next,4);if(f&&h.flags&4)c=h.addr_low,d=b=0,e=h.len/16;else{if(h.flags&2)g=!0,this.write_buffers.push(h),this.length_writable+=h.len;else{if(g)break;
|
|
386
|
-
this.read_buffers.length;){var d=this.read_buffers[this.read_buffer_idx];const e=d.addr_low+this.read_buffer_offset;d=d.len-this.read_buffer_offset;d>c?(d=c,this.read_buffer_offset+=c):(this.read_buffer_idx++,this.read_buffer_offset=0);a.set(this.cpu.read_blob(e,d),b);b+=d;c-=d}return b};lb.prototype.set_next_blob=
|
|
387
|
-
d.len-this.write_buffer_offset;d>c?(d=c,this.write_buffer_offset+=c):(this.write_buffer_idx++,this.write_buffer_offset=0);this.cpu.write_blob(a.subarray(b,b+d),e);b+=d;c-=d}this.length_written+=b;return b};function mb(a,b){this.bus=b;this.rows=25;this.cols=80;this.ports=4;b=[{size_supported:16,notify_offset:0},{size_supported:16,
|
|
388
|
-
notify_offset:1});this.virtio=new da(a,{name:"virtio-console",pci_id:96,device_id:4163,subsystem_device_id:3,common:{initial_port:47104,queues:b,features:[0,1,32],on_driver_ok:()=>{}},notification:{initial_port:47360,single_handler:!1,handlers:[()=>{},c=>{const d=this.virtio.queues[c],e=3<c?c-3>>1:0;for(;d.has_request();){const g=
|
|
389
|
-
c.size-2;)c.pop_request()},c=>{if(3===c)for(var d=this.virtio.queues[c];d.has_request();){var e=d.pop_request(),g=new Uint8Array(e.length_readable);e.get_next_blob(g);var f=t.Unmarshall(["w","h","h"],g,{offset:0});g=f[0];f=f[1];this.Ack(c,e);switch(f){case 0:for(e=0;e<this.ports;++e)this.SendEvent(e,1,
|
|
390
|
-
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<
|
|
391
|
-
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)}}mb.prototype.SendWindowSize=function(a,b,c){c=c||this.rows;b=b||this.cols;const d=
|
|
392
|
-
new Uint8Array(8+b.length+1);t.Marshall(["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)};mb.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.rows;a[2]=this.cols;a[3]=this.ports;return a};mb.prototype.set_state=
|
|
393
|
-
t.Marshall(["w","h","h"],[a,b,c],e,0);this.Send(2,d,e)};mb.prototype.Send=function(a,b,c){b.set_next_blob(c);this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};mb.prototype.Ack=function(a,b){b.set_next_blob(new Uint8Array(0));this.virtio.queues[a].push_reply(b);
|
|
394
|
-
0,255*Math.random()|0]);this.bus.send("net"+this.id+"-mac",Pa(this.mac));b=[];for(c=0;c<this.pairs;++c)b.push({size_supported:1024,notify_offset:0}),b.push({size_supported:1024,notify_offset:1});b.push({size_supported:16,notify_offset:2});this.virtio=new da(a,{name:"virtio-net",
|
|
395
|
-
for(;e.has_request();){const g=e.pop_request(),f=new Uint8Array(g.length_readable);g.get_next_blob(f);this.bus.send("net"+this.id+"-send",f.subarray(12));this.bus.send("eth-transmit-end",[f.length-12]);this.virtio.queues[d].push_reply(g)}this.virtio.queues[d].flush_replies()},
|
|
396
|
-
f,{offset:2});this.Send(d,g,new Uint8Array([0]));break;case 257:this.mac=f.subarray(2,8);this.Send(d,g,new Uint8Array([0]));this.bus.send("net"+this.id+"-mac",Pa(this.mac));break;default:this.Send(d,g,new Uint8Array([1]));return}}}]},isr_status:{initial_port:50944},
|
|
397
|
-
write:()=>{}},{bytes:2,name:"mtu",read:()=>1500,write:()=>{}}])}});this.bus.register("net"+this.id+"-receive",d=>{this.bus.send("eth-receive-end",[d.length]);const e=new Uint8Array(12+d.byteLength);(new DataView(e.buffer,e.byteOffset,e.byteLength)).setInt16(10,
|
|
398
|
-
[];a[0]=this.virtio;a[1]=this.id;a[2]=this.mac;return a};nb.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.id=a[1];this.preserve_mac_from_state_image&&(this.mac=a[2],this.bus.send("net"+this.id+"-mac",Pa(this.mac)))};nb.prototype.reset=
|
|
399
|
-
const ob="SWAP_IN SWAP_OUT MAJFLT MINFLT MEMFREE MEMTOT AVAIL CACHES HTLB_PGALLOC HTLB_PGFAIL".split(" ");function pb(a,b){this.bus=b;this.zeroed=this.fp_cmd=this.actual=this.num_pages=0;this.virtio=new da(a,{name:"virtio-balloon",pci_id:88,
|
|
400
|
-
single_handler:!1,handlers:[c=>{const d=this.virtio.queues[c];for(;d.has_request();){var e=d.pop_request();const g=new Uint8Array(e.length_readable);e.get_next_blob(g);this.virtio.queues[c].push_reply(e);e=g.byteLength/
|
|
401
|
-
|
|
402
|
-
this.zeroed+=f.len;this.virtio.cpu.zero_memory(f.addr_low,f.len)}this.virtio.queues[c].push_reply(g)}this.virtio.queues[c].flush_replies()}]},isr_status:{initial_port:55040},device_specific:{initial_port:54784,struct:[{bytes:4,
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
void 0!==a))for(var c=0;c<a.length;c++){var d=a[c];d.fn.call(d.this_value,b)}};Ab.prototype.send_async=function(a,b){setTimeout(this.send.bind(this,a,b),0)};qb.create=function(){var a=new Ab,b=new Ab;
|
|
406
|
-
|
|
407
|
-
8);this.
|
|
408
|
-
k.view(Int32Array,b,
|
|
409
|
-
|
|
410
|
-
1);this.
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
this.
|
|
414
|
-
b("
|
|
415
|
-
|
|
416
|
-
b("
|
|
417
|
-
function(){const a=this.wm.wasm_table;for(let b=0;900>b;b++)a.set(1024+b,null)};E.prototype.get_state=function(){var a=
|
|
418
|
-
a[
|
|
419
|
-
a[
|
|
420
|
-
a[
|
|
421
|
-
this.
|
|
422
|
-
|
|
423
|
-
this.
|
|
424
|
-
a[
|
|
425
|
-
this.devices.
|
|
426
|
-
this.devices.
|
|
427
|
-
|
|
428
|
-
c[1]=
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
this.
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
(this.devices.
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
console.assert(
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
n,this,p,p,p)}const l=new Uint8Array(512);(new Uint16Array(l.buffer))[0]=43605;l[2]=1;var h=3;l[h++]=102;l[h++]=229;
|
|
445
|
-
c>>
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
function(
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
window.
|
|
452
|
-
{
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
(
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
u},
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
this
|
|
471
|
-
|
|
472
|
-
this.
|
|
473
|
-
this.
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
this.
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
n
|
|
484
|
-
this.
|
|
485
|
-
|
|
486
|
-
this.
|
|
487
|
-
|
|
488
|
-
|
|
379
|
+
a[4]=this.desc_addr;a[5]=this.avail_addr;a[6]=this.avail_last_idx;a[7]=this.used_addr;a[8]=this.num_staged_replies;a[9]=1;return a};V.prototype.set_state=function(a){this.size=a[0];this.size_supported=a[1];this.enabled=a[2];this.notify_offset=a[3];this.desc_addr=a[4];this.avail_addr=a[5];this.avail_last_idx=a[6];this.used_addr=a[7];this.num_staged_replies=a[8];this.mask=this.size-1;this.fix_wrapping=1!==a[9]};V.prototype.reset=function(){this.enabled=!1;this.num_staged_replies=this.used_addr=this.avail_last_idx=
|
|
380
|
+
this.avail_addr=this.desc_addr=0;this.set_size(this.size_supported)};V.prototype.is_configured=function(){return this.desc_addr&&this.avail_addr&&this.used_addr};V.prototype.enable=function(){this.is_configured();this.enabled=!0};V.prototype.set_size=function(a){this.size=a;this.mask=a-1};V.prototype.count_requests=function(){this.fix_wrapping&&(this.fix_wrapping=!1,this.avail_last_idx=(this.avail_get_idx()&~this.mask)+(this.avail_last_idx&this.mask));return this.avail_get_idx()-this.avail_last_idx&
|
|
381
|
+
65535};V.prototype.has_request=function(){return 0!==this.count_requests()};V.prototype.pop_request=function(){this.has_request();var a=this.avail_get_entry(this.avail_last_idx);a=new lb(this,a);this.avail_last_idx=this.avail_last_idx+1&65535;return a};V.prototype.push_reply=function(a){const b=this.used_get_idx()+this.num_staged_replies&this.mask;this.used_set_entry(b,a.head_idx,a.length_written);this.num_staged_replies++};V.prototype.flush_replies=function(){if(0!==this.num_staged_replies){var a=
|
|
382
|
+
this.used_get_idx()+this.num_staged_replies&65535;this.used_set_idx(a);this.num_staged_replies=0;this.virtio.is_feature_negotiated(29)?(this.avail_get_used_event(),this.virtio.raise_irq(1)):~this.avail_get_flags()&1&&this.virtio.raise_irq(1)}};V.prototype.notify_me_after=function(a){a=this.avail_get_idx()+a&65535;this.used_set_avail_event(a)};V.prototype.get_descriptor=function(a,b){return{addr_low:this.cpu.read32s(a+16*b),addr_high:this.cpu.read32s(a+16*b+4),len:this.cpu.read32s(a+16*b+8),flags:this.cpu.read16(a+
|
|
383
|
+
16*b+12),next:this.cpu.read16(a+16*b+14)}};V.prototype.avail_get_flags=function(){return this.cpu.read16(this.avail_addr)};V.prototype.avail_get_idx=function(){return this.cpu.read16(this.avail_addr+2)};V.prototype.avail_get_entry=function(a){return this.cpu.read16(this.avail_addr+4+2*(a&this.mask))};V.prototype.avail_get_used_event=function(){return this.cpu.read16(this.avail_addr+4+2*this.size)};V.prototype.used_get_flags=function(){return this.cpu.read16(this.used_addr)};V.prototype.used_set_flags=
|
|
384
|
+
function(a){this.cpu.write16(this.used_addr,a)};V.prototype.used_get_idx=function(){return this.cpu.read16(this.used_addr+2)};V.prototype.used_set_idx=function(a){this.cpu.write16(this.used_addr+2,a)};V.prototype.used_set_entry=function(a,b,c){this.cpu.write32(this.used_addr+4+8*a,b);this.cpu.write32(this.used_addr+8+8*a,c)};V.prototype.used_set_avail_event=function(a){this.cpu.write16(this.used_addr+4+8*this.size,a)};function lb(a,b){this.cpu=a.cpu;this.virtio=a.virtio;this.head_idx=b;this.read_buffers=
|
|
385
|
+
[];this.length_readable=this.read_buffer_offset=this.read_buffer_idx=0;this.write_buffers=[];this.length_writable=this.length_written=this.write_buffer_offset=this.write_buffer_idx=0;let c=a.desc_addr,d=0,e=a.size,g=!1;const f=this.virtio.is_feature_negotiated(28);do{const h=a.get_descriptor(c,b);B(h.addr_high,8);B(h.addr_low,8);B(h.len,8);B(h.flags,4);B(h.next,4);if(f&&h.flags&4)c=h.addr_low,d=b=0,e=h.len/16;else{if(h.flags&2)g=!0,this.write_buffers.push(h),this.length_writable+=h.len;else{if(g)break;
|
|
386
|
+
this.read_buffers.push(h);this.length_readable+=h.len}d++;if(d>e)break;if(h.flags&1)b=h.next;else break}}while(1)}lb.prototype.get_next_blob=function(a){let b=0,c=a.length;for(;c&&this.read_buffer_idx!==this.read_buffers.length;){var d=this.read_buffers[this.read_buffer_idx];const e=d.addr_low+this.read_buffer_offset;d=d.len-this.read_buffer_offset;d>c?(d=c,this.read_buffer_offset+=c):(this.read_buffer_idx++,this.read_buffer_offset=0);a.set(this.cpu.read_blob(e,d),b);b+=d;c-=d}return b};lb.prototype.set_next_blob=
|
|
387
|
+
function(a){let b=0,c=a.length;for(;c&&this.write_buffer_idx!==this.write_buffers.length;){var d=this.write_buffers[this.write_buffer_idx];const e=d.addr_low+this.write_buffer_offset;d=d.len-this.write_buffer_offset;d>c?(d=c,this.write_buffer_offset+=c):(this.write_buffer_idx++,this.write_buffer_offset=0);this.cpu.write_blob(a.subarray(b,b+d),e);b+=d;c-=d}this.length_written+=b;return b};function mb(a,b){this.bus=b;this.rows=25;this.cols=80;this.ports=4;b=[{size_supported:16,notify_offset:0},{size_supported:16,
|
|
388
|
+
notify_offset:1},{size_supported:16,notify_offset:2},{size_supported:16,notify_offset:3}];for(let c=1;c<this.ports;++c)b.push({size_supported:16,notify_offset:0}),b.push({size_supported:8,notify_offset:1});this.virtio=new da(a,{name:"virtio-console",pci_id:96,device_id:4163,subsystem_device_id:3,common:{initial_port:47104,queues:b,features:[0,1,32],on_driver_ok:()=>{}},notification:{initial_port:47360,single_handler:!1,handlers:[()=>{},c=>{const d=this.virtio.queues[c],e=3<c?c-3>>1:0;for(;d.has_request();){const g=
|
|
389
|
+
d.pop_request(),f=new Uint8Array(g.length_readable);g.get_next_blob(f);this.bus.send("virtio-console"+e+"-output-bytes",f);this.Ack(c,g)}},c=>{if(2===c)for(c=this.virtio.queues[c];c.count_requests()>c.size-2;)c.pop_request()},c=>{if(3===c)for(var d=this.virtio.queues[c];d.has_request();){var e=d.pop_request(),g=new Uint8Array(e.length_readable);e.get_next_blob(g);var f=t.Unmarshall(["w","h","h"],g,{offset:0});g=f[0];f=f[1];this.Ack(c,e);switch(f){case 0:for(e=0;e<this.ports;++e)this.SendEvent(e,1,
|
|
390
|
+
0);break;case 3:this.Ack(c,e);this.SendEvent(g,4,1);this.SendName(g,"virtio-"+g);this.SendEvent(g,6,1);break;case 6:this.Ack(c,e);0===g&&this.SendWindowSize(g);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<
|
|
391
|
+
this.ports;++c){const d=0===c?0:2*c+2;this.bus.register("virtio-console"+c+"-input-bytes",function(e){var g=this.virtio.queues[d];g.has_request()&&(g=g.pop_request(),this.Send(d,g,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)}}mb.prototype.SendWindowSize=function(a,b,c){c=c||this.rows;b=b||this.cols;const d=
|
|
392
|
+
this.virtio.queues[2].pop_request(),e=new Uint8Array(12);t.Marshall(["w","h","h","h","h"],[a,5,0,c,b],e,0);this.Send(2,d,e)};mb.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);t.Marshall(["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)};mb.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.rows;a[2]=this.cols;a[3]=this.ports;return a};mb.prototype.set_state=
|
|
393
|
+
function(a){this.virtio.set_state(a[0]);this.rows=a[1];this.cols=a[2];this.ports=a[3]};mb.prototype.reset=function(){this.virtio.reset()};mb.prototype.SendEvent=function(a,b,c){const d=this.virtio.queues[2].pop_request(),e=new Uint8Array(8);t.Marshall(["w","h","h"],[a,b,c],e,0);this.Send(2,d,e)};mb.prototype.Send=function(a,b,c){b.set_next_blob(c);this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};mb.prototype.Ack=function(a,b){b.set_next_blob(new Uint8Array(0));this.virtio.queues[a].push_reply(b);
|
|
394
|
+
this.virtio.queues[a].flush_replies()};function nb(a,b,c){this.bus=b;this.id=a.devices.net?1:0;this.status=this.pairs=1;this.preserve_mac_from_state_image=c;this.mac=new Uint8Array([0,34,21,255*Math.random()|0,255*Math.random()|0,255*Math.random()|0]);this.bus.send("net"+this.id+"-mac",Pa(this.mac));b=[];for(c=0;c<this.pairs;++c)b.push({size_supported:1024,notify_offset:0}),b.push({size_supported:1024,notify_offset:1});b.push({size_supported:16,notify_offset:2});this.virtio=new da(a,{name:"virtio-net",
|
|
395
|
+
pci_id:80,device_id:4161,subsystem_device_id:1,common:{initial_port:51200,queues:b,features:[5,16,22,3,17,23,32],on_driver_ok:()=>{}},notification:{initial_port:51456,single_handler:!1,handlers:[()=>{},d=>{const e=this.virtio.queues[d];for(;e.has_request();){const g=e.pop_request(),f=new Uint8Array(g.length_readable);g.get_next_blob(f);this.bus.send("net"+this.id+"-send",f.subarray(12));this.bus.send("eth-transmit-end",[f.length-12]);this.virtio.queues[d].push_reply(g)}this.virtio.queues[d].flush_replies()},
|
|
396
|
+
d=>{if(d===2*this.pairs)for(var e=this.virtio.queues[d];e.has_request();){const g=e.pop_request(),f=new Uint8Array(g.length_readable);g.get_next_blob(f);const h=t.Unmarshall(["b","b"],f,{offset:0});switch(h[0]<<8|h[1]){case 1024:t.Unmarshall(["h"],f,{offset:2});this.Send(d,g,new Uint8Array([0]));break;case 257:this.mac=f.subarray(2,8);this.Send(d,g,new Uint8Array([0]));this.bus.send("net"+this.id+"-mac",Pa(this.mac));break;default:this.Send(d,g,new Uint8Array([1]));return}}}]},isr_status:{initial_port:50944},
|
|
397
|
+
device_specific:{initial_port:50688,struct:[0,1,2,3,4,5].map((d,e)=>({bytes:1,name:"mac_"+e,read:()=>this.mac[e],write:()=>{}})).concat([{bytes:2,name:"status",read:()=>this.status,write:()=>{}},{bytes:2,name:"max_pairs",read:()=>this.pairs,write:()=>{}},{bytes:2,name:"mtu",read:()=>1500,write:()=>{}}])}});this.bus.register("net"+this.id+"-receive",d=>{this.bus.send("eth-receive-end",[d.length]);const e=new Uint8Array(12+d.byteLength);(new DataView(e.buffer,e.byteOffset,e.byteLength)).setInt16(10,
|
|
398
|
+
1);e.set(d,12);d=this.virtio.queues[0];d.has_request()?(d=d.pop_request(),d.set_next_blob(e),this.virtio.queues[0].push_reply(d),this.virtio.queues[0].flush_replies()):console.log("No buffer to write into!")},this)}nb.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.id;a[2]=this.mac;return a};nb.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.id=a[1];this.preserve_mac_from_state_image&&(this.mac=a[2],this.bus.send("net"+this.id+"-mac",Pa(this.mac)))};nb.prototype.reset=
|
|
399
|
+
function(){this.virtio.reset()};nb.prototype.Send=function(a,b,c){b.set_next_blob(c);this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};nb.prototype.Ack=function(a,b){this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};const ob="SWAP_IN SWAP_OUT MAJFLT MINFLT MEMFREE MEMTOT AVAIL CACHES HTLB_PGALLOC HTLB_PGFAIL".split(" ");function pb(a,b){this.bus=b;this.zeroed=this.fp_cmd=this.actual=this.num_pages=0;this.virtio=new da(a,{name:"virtio-balloon",pci_id:88,
|
|
400
|
+
device_id:4165,subsystem_device_id:5,common:{initial_port:55296,queues:[{size_supported:32,notify_offset:0},{size_supported:32,notify_offset:0},{size_supported:2,notify_offset:1},{size_supported:64,notify_offset:2}],features:[1,3,32],on_driver_ok:()=>{}},notification:{initial_port:55552,single_handler:!1,handlers:[c=>{const d=this.virtio.queues[c];for(;d.has_request();){var e=d.pop_request();const g=new Uint8Array(e.length_readable);e.get_next_blob(g);this.virtio.queues[c].push_reply(e);e=g.byteLength/
|
|
401
|
+
4;this.actual+=0===c?e:-e}this.virtio.queues[c].flush_replies()},c=>{var d=this.virtio.queues[c];if(d.has_request()){d=d.pop_request();const e=new Uint8Array(d.length_readable);d.get_next_blob(e);let g={};for(let f=0;f<d.length_readable;f+=10){let [h,l]=t.Unmarshall(["h","d"],e,{offset:f});g[ob[h]]=l}this.virtio.queues[c].push_reply(d);this.stats_cb&&this.stats_cb(g)}},c=>{const d=this.virtio.queues[c];for(;d.has_request();){const g=d.pop_request();if(0<g.length_readable){var e=new Uint8Array(g.length_readable);
|
|
402
|
+
g.get_next_blob(e);[e]=t.Unmarshall(["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<g.length_writable)for(new Uint8Array(0),e=0;e<g.write_buffers.length;++e){let f=g.write_buffers[e];this.zeroed+=f.len;this.virtio.cpu.zero_memory(f.addr_low,f.len)}this.virtio.queues[c].push_reply(g)}this.virtio.queues[c].flush_replies()}]},isr_status:{initial_port:55040},device_specific:{initial_port:54784,struct:[{bytes:4,
|
|
403
|
+
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:()=>{}}]}})}pb.prototype.Inflate=function(a){this.num_pages+=a;this.virtio.notify_config_changes()};pb.prototype.Deflate=function(a){this.num_pages-=a;this.virtio.notify_config_changes()};pb.prototype.Cleanup=function(a){this.fp_cmd=2;this.free_cb=a;this.zeroed=0;this.virtio.notify_config_changes()};pb.prototype.get_state=
|
|
404
|
+
function(){const a=[];a[0]=this.virtio;a[1]=this.num_pages;a[2]=this.actual;return a};pb.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.num_pages=a[1];this.actual=a[2]};pb.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()};pb.prototype.Reset=function(){};var qb={};function Ab(){this.listeners={};this.pair=void 0}Ab.prototype.register=function(a,
|
|
405
|
+
b,c){var d=this.listeners[a];void 0===d&&(d=this.listeners[a]=[]);d.push({fn:b,this_value:c})};Ab.prototype.unregister=function(a,b){var c=this.listeners[a];void 0!==c&&(this.listeners[a]=c.filter(function(d){return d.fn!==b}))};Ab.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,b)}};Ab.prototype.send_async=function(a,b){setTimeout(this.send.bind(this,a,b),0)};qb.create=function(){var a=new Ab,b=new Ab;
|
|
406
|
+
a.pair=b;b.pair=a;return[a,b]};function ta(){}function ua(){}function E(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.view(Uint32Array,b,812,1);this.mem8=new Uint8Array(0);this.mem32s=new Int32Array(this.mem8.buffer);this.segment_is_null=k.view(Uint8Array,b,724,8);this.segment_offsets=k.view(Int32Array,b,736,8);this.segment_limits=k.view(Uint32Array,b,768,8);this.segment_access_bytes=k.view(Uint8Array,b,
|
|
407
|
+
512,8);this.protected_mode=k.view(Int32Array,b,800,1);this.idtr_size=k.view(Int32Array,b,564,1);this.idtr_offset=k.view(Int32Array,b,568,1);this.gdtr_size=k.view(Int32Array,b,572,1);this.gdtr_offset=k.view(Int32Array,b,576,1);this.tss_size_32=k.view(Int32Array,b,1128,1);this.page_fault=k.view(Uint32Array,b,540,8);this.cr=k.view(Int32Array,b,580,8);this.cpl=k.view(Uint8Array,b,612,1);this.is_32=k.view(Int32Array,b,804,1);this.stack_size_32=k.view(Int32Array,b,808,1);this.in_hlt=k.view(Uint8Array,b,
|
|
408
|
+
616,1);this.last_virt_eip=k.view(Int32Array,b,620,1);this.eip_phys=k.view(Int32Array,b,624,1);this.sysenter_cs=k.view(Int32Array,b,636,1);this.sysenter_esp=k.view(Int32Array,b,640,1);this.sysenter_eip=k.view(Int32Array,b,644,1);this.prefixes=k.view(Int32Array,b,648,1);this.flags=k.view(Int32Array,b,120,1);this.flags_changed=k.view(Int32Array,b,100,1);this.last_op_size=k.view(Int32Array,b,96,1);this.last_op1=k.view(Int32Array,b,104,1);this.last_result=k.view(Int32Array,b,112,1);this.current_tsc=k.view(Uint32Array,
|
|
409
|
+
b,960,2);this.devices={};this.instruction_pointer=k.view(Int32Array,b,556,1);this.previous_ip=k.view(Int32Array,b,560,1);this.apic_enabled=k.view(Uint8Array,b,548,1);this.acpi_enabled=k.view(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.view(Uint32Array,b,664,1);this.reg32=k.view(Int32Array,b,64,8);this.fpu_st=k.view(Int32Array,b,1152,32);this.fpu_stack_empty=k.view(Uint8Array,
|
|
410
|
+
b,816,1);this.fpu_stack_empty[0]=255;this.fpu_stack_ptr=k.view(Uint8Array,b,1032,1);this.fpu_stack_ptr[0]=0;this.fpu_control_word=k.view(Uint16Array,b,1036,1);this.fpu_control_word[0]=895;this.fpu_status_word=k.view(Uint16Array,b,1040,1);this.fpu_status_word[0]=0;this.fpu_ip=k.view(Int32Array,b,1048,1);this.fpu_ip[0]=0;this.fpu_ip_selector=k.view(Int32Array,b,1052,1);this.fpu_ip_selector[0]=0;this.fpu_opcode=k.view(Int32Array,b,1044,1);this.fpu_opcode[0]=0;this.fpu_dp=k.view(Int32Array,b,1056,1);
|
|
411
|
+
this.fpu_dp[0]=0;this.fpu_dp_selector=k.view(Int32Array,b,1060,1);this.fpu_dp_selector[0]=0;this.reg_xmm32s=k.view(Int32Array,b,832,32);this.mxcsr=k.view(Int32Array,b,824,1);this.sreg=k.view(Uint16Array,b,668,8);this.dreg=k.view(Int32Array,b,684,8);this.reg_pdpte=k.view(Int32Array,b,968,8);this.svga_dirty_bitmap_min_offset=k.view(Uint32Array,b,716,1);this.svga_dirty_bitmap_max_offset=k.view(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,
|
|
412
|
+
0);this.debug_init()}E.prototype.clear_opstats=function(){(new Uint8Array(this.wasm_memory.buffer,32768,131072)).fill(0);this.wm.exports.profiler_init()};E.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]);this.jit_imports=a};E.prototype.wasm_patch=function(){const a=c=>this.wm.exports[c],b=c=>{const d=a(c);console.assert(d,
|
|
413
|
+
"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=b("in_mapped_range");this.fpu_load_tag_word=b("fpu_load_tag_word");this.fpu_load_status_word=b("fpu_load_status_word");
|
|
414
|
+
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=b("set_cpuid_level");this.pic_set_irq=b("pic_set_irq");this.pic_clear_irq=b("pic_clear_irq");this.jit_clear_cache=
|
|
415
|
+
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");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");
|
|
416
|
+
this.get_pic_addr_slave=b("get_pic_addr_slave");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");this.port20_read=b("port20_read");this.port21_read=b("port21_read");this.portA0_read=b("portA0_read");this.portA1_read=b("portA1_read");this.port20_write=b("port20_write");this.port21_write=b("port21_write");this.portA0_write=b("portA0_write");this.portA1_write=
|
|
417
|
+
b("portA1_write");this.port4D0_read=b("port4D0_read");this.port4D1_read=b("port4D1_read");this.port4D0_write=b("port4D0_write");this.port4D1_write=b("port4D1_write")};E.prototype.jit_force_generate=function(a){this.jit_force_generate_unsafe&&this.jit_force_generate_unsafe(a)};E.prototype.jit_clear_func=function(a){this.wm.wasm_table.set(a+1024,null)};E.prototype.jit_clear_all_funcs=function(){const a=this.wm.wasm_table;for(let b=0;900>b;b++)a.set(1024+b,null)};E.prototype.get_state=function(){var a=
|
|
418
|
+
[];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];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];
|
|
419
|
+
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];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.devices.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]=
|
|
420
|
+
this.devices.ps2;a[54]=this.devices.uart0;a[55]=this.devices.fdc;a[56]=this.devices.cdrom;a[57]=this.devices.hda;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.devices.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];
|
|
421
|
+
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());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;return a};E.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=[];
|
|
422
|
+
c[0]=a[0];c[1]=a[1];c[2]=a[2];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};E.prototype.set_state=function(a){this.memory_size[0]=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]),
|
|
423
|
+
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]=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];
|
|
424
|
+
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]);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]);
|
|
425
|
+
this.devices.apic&&this.devices.apic.set_state(a[46]);this.devices.rtc&&this.devices.rtc.set_state(a[47]);this.devices.pci&&this.devices.pci.set_state(a[48]);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]);this.devices.fdc&&this.devices.fdc.set_state(a[55]);this.devices.cdrom&&this.devices.cdrom.set_state(a[56]);
|
|
426
|
+
this.devices.hda&&this.devices.hda.set_state(a[57]);this.devices.pit&&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&&
|
|
427
|
+
this.devices.virtio_net.set_state(a[83]);this.devices.virtio_balloon&&this.devices.virtio_balloon.set_state(a[84]);this.fw_value=a[62];this.devices.ioapic&&this.devices.ioapic.set_state(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];const b=new k.Bitmap(a[78].buffer);
|
|
428
|
+
this.unpack_memory(b,a[77]);this.update_state_flags();this.full_clear_tlb();this.jit_clear_cache()};E.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]=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]=
|
|
429
|
+
d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12]};E.prototype.pack_memory=function(){var a=this.mem8.length>>12,b=[];for(var c=0;c<a;c++)this.is_memory_zeroed(c<<12,4096)||b.push(c);a=new k.Bitmap(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}};E.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 g=0;g<c;g++)if(a.get(g)){var e=
|
|
430
|
+
d<<12;e=b.subarray(e,e+4096);this.mem8.set(e,g<<12);d++}};E.prototype.reboot_internal=function(){this.reset_cpu();this.fw_value=[];this.devices.virtio_9p&&this.devices.virtio_9p.reset();this.devices.virtio_console&&this.devices.virtio_console.reset();this.devices.virtio_net&&this.devices.virtio_net.reset();this.load_bios()};E.prototype.reset_memory=function(){this.mem8.fill(0)};E.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===
|
|
431
|
+
this.memory_size[0],"Expected uninitialised memory");this.memory_size[0]=a;b=this.allocate_memory(a);this.mem8=k.view(Uint8Array,this.wasm_memory,b,a);this.mem32s=k.view(Uint32Array,this.wasm_memory,b,a>>2)};E.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 C(this);this.io=c;this.bios.main=a.bios;this.bios.vga=
|
|
432
|
+
a.vga_bios;this.load_bios();if(a.bzimage){const e=Bb(this.mem8,a.bzimage,a.initrd,a.cmdline||"");e&&this.option_roms.push(e)}c.register_read(179,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 g(l){return new Uint8Array(Int32Array.of(l).buffer)}function f(l){return l>>
|
|
433
|
+
8|l<<8&65280}function h(l){return l<<24|l<<8&16711680|l>>8&65280|l>>>24}ta("bios config port, index="+B(e));this.fw_pointer=0;if(0===e)this.fw_value=g(1431127377);else if(1===e)this.fw_value=g(0);else if(3===e)this.fw_value=g(this.memory_size[0]);else if(5===e)this.fw_value=g(1);else if(15===e)this.fw_value=g(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<
|
|
434
|
+
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]=f(49152+m);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=g(0):49152<=e&&e-49152<this.option_roms.length?this.fw_value=this.option_roms[e-49152].data:(ta("Warning: Unimplemented fw index: "+B(e)),this.fw_value=g(0))});c.register_read(32,this,this.port20_read);c.register_read(33,this,this.port21_read);c.register_read(160,this,this.portA0_read);
|
|
435
|
+
c.register_read(161,this,this.portA1_read);c.register_write(32,this,this.port20_write);c.register_write(33,this,this.port21_write);c.register_write(160,this,this.portA0_write);c.register_write(161,this,this.portA1_write);c.register_read(1232,this,this.port4D0_read);c.register_read(1233,this,this.port4D1_read);c.register_write(1232,this,this.port4D0_write);c.register_write(1233,this,this.port4D1_write);this.devices={};a.load_devices&&(this.devices.pci=new va(this),this.acpi_enabled[0]&&(this.devices.ioapic=
|
|
436
|
+
new Ga(this),this.devices.apic=new Fa(this),this.devices.acpi=new Ea(this)),this.devices.rtc=new Aa(this),this.fill_cmos(this.devices.rtc,a),this.devices.dma=new M(this),this.devices.vga=new N(this,b,a.screen,a.vga_memory_size||8388608),this.devices.ps2=new za(this,b),this.devices.uart0=new Da(this,1016,b),a.uart1&&(this.devices.uart1=new Da(this,760,b)),a.uart2&&(this.devices.uart2=new Da(this,1E3,b)),a.uart3&&(this.devices.uart3=new Da(this,744,b)),this.devices.fdc=new L(this,a.fda,a.fdb),c=0,a.hda&&
|
|
437
|
+
(this.devices.hda=new ra(this,a.hda,a.hdb,!1,c++,b)),a.cdrom&&(this.devices.cdrom=new ra(this,a.cdrom,void 0,!0,c++,b)),this.devices.pit=new wa(this,b),"ne2k"===a.net_device.type?this.devices.net=new Qa(this,b,a.preserve_mac_from_state_image,a.mac_address_translation):"virtio"===a.net_device.type&&(this.devices.virtio_net=new nb(this,b,a.preserve_mac_from_state_image)),a.fs9p&&(this.devices.virtio_9p=new ca(a.fs9p,this,b)),a.virtio_console&&(this.devices.virtio_console=new mb(this,b)),a.virtio_balloon&&
|
|
438
|
+
(this.devices.virtio_balloon=new pb(this,b)),this.devices.sb16=new O(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))};E.prototype.load_multiboot=function(a){this.load_multiboot_option_rom(a,void 0,"")&&(this.reg32[0]=this.io.port_read32(244))};E.prototype.load_multiboot_option_rom=function(a,b,c){if(8192>a.byteLength){var d=new Int32Array(2048);(new Uint8Array(d.buffer)).set(new Uint8Array(a))}else d=
|
|
439
|
+
new Int32Array(a,0,2048);for(var e=0;8192>e;e+=4){if(464367618===d[e>>2]){var g=d[e+4>>2];if(464367618+g+d[e+8>>2]|0)continue}else continue;ta("Multiboot magic found, flags: "+B(g>>>0,8),2);var f=this;this.io.register_read(244,this,function(){return 0},function(){return 0},function(){var n=31860,p=0;if(c){p|=4;f.write32(31760,n);c+="\x00";var q=(new TextEncoder).encode(c);f.write_blob(q,n);n+=q.length}if(g&2){p|=64;q=0;f.write32(31788,0);f.write32(31792,n);var r=0;var A=!1;for(let u=0;4294967296>
|
|
440
|
+
u;u+=131072)A&&void 0!==f.memory_map_read8[u>>>17]?(f.write32(n,20),f.write32(n+4,r),f.write32(n+8,0),f.write32(n+12,u-r),f.write32(n+16,0),f.write32(n+20,1),n+=24,q+=24,A=!1):A||void 0!==f.memory_map_read8[u>>>17]||(r=u,A=!0);f.write32(31788,q)}f.write32(31744,p);q=p=0;if(g&65536){A=d[e+12>>2];p=d[e+16>>2];var z=d[e+20>>2];q=d[e+24>>2];r=d[e+28>>2];B(A,8);B(p,8);B(z,8);B(q,8);B(r,8);A=new Uint8Array(a,e-(A-p),0===z?void 0:z-p);f.write_blob(A,p);p=r|0;q=Math.max(z,q)}else if(1179403647===d[0]){r=
|
|
441
|
+
new DataView(a);const [u,G]=Cb(r,Db);console.assert(52===G);console.assert(1179403647===u.magic,"Bad magic");console.assert(1===u.class,"Unimplemented: 64 bit elf");console.assert(1===u.data,"Unimplemented: big endian");console.assert(1===u.version0,"Bad version0");console.assert(2===u.type,"Unimplemented type");console.assert(1===u.version1,"Bad version1");console.assert(52===u.ehsize,"Bad header size");console.assert(32===u.phentsize,"Bad program header size");console.assert(40===u.shentsize,"Bad section header size");
|
|
442
|
+
[p]=Eb(new DataView(r.buffer,r.byteOffset+u.phoff,u.phentsize*u.phnum),Fb,u.phnum);Eb(new DataView(r.buffer,r.byteOffset+u.shoff,u.shentsize*u.shnum),Gb,u.shnum);r=u;A=p;p=r.entry;for(z of A)0!==z.type&&(1===z.type?z.paddr+z.memsz<f.memory_size[0]?(z.filesz&&(A=new Uint8Array(a,z.offset,z.filesz),f.write_blob(A,z.paddr)),q=Math.max(q,z.paddr+z.memsz),p===r.entry&&z.vaddr<=p&&z.vaddr+z.memsz>p&&(p=p-z.vaddr+z.paddr)):B(z.paddr):2===z.type||3===z.type||4===z.type||6===z.type||7===z.type||1685382480===
|
|
443
|
+
z.type||1685382481===z.type||1685382482===z.type||1685382483===z.type||B(z.type))}b&&(f.write32(31764,1),f.write32(31768,n),z=q,0!==(z&4095)&&(z=(z&-4096)+4096),q=z+b.byteLength,f.write32(n,z),f.write32(n+4,q),f.write32(n+8,0),f.write32(n+12,0),f.write_blob(new Uint8Array(b),z));f.reg32[3]=31744;f.cr[0]=1;f.protected_mode[0]=1;f.flags[0]=2;f.is_32[0]=1;f.stack_size_32[0]=1;for(n=0;6>n;n++)f.segment_is_null[n]=0,f.segment_offsets[n]=0,f.segment_limits[n]=4294967295,f.sreg[n]=45058;f.instruction_pointer[0]=
|
|
444
|
+
f.get_seg_cs()+p|0;f.update_state_flags();f.debug.dump_state();f.debug.dump_regs();return 732803074});this.io.register_write_consecutive(244,this,function(n){console.log("Test exited with code "+B(n,2));throw"HALT";},function(){},function(){},function(){});for(let n=0;15>=n;n++){function p(q){B(n);B(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]=43605;l[2]=1;var h=3;l[h++]=102;l[h++]=229;
|
|
445
|
+
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}}};E.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<=this.memory_size[0]&&(c=this.memory_size[0]-
|
|
446
|
+
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)};E.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=e-4272947200|0;return e<d.length?d[e]:0},
|
|
447
|
+
function(){})}this.io.mmap_register(4293918720,1048576,function(e){return this.mem8[e&1048575]}.bind(this),function(e,g){this.mem8[e&1048575]=g}.bind(this))}};E.prototype.codegen_finalize=function(a,b,c,d,e){const g=new Uint8Array(this.wasm_memory.buffer,d>>>0,e>>>0);WebAssembly.instantiate(g,{e:this.jit_imports}).then(f=>{this.wm.wasm_table.set(a+1024,f.instance.exports.f);this.codegen_finalize_finished(a,b,c);this.test_hook_did_finalize_wasm&&this.test_hook_did_finalize_wasm(g)})};E.prototype.log_uncompiled_code=
|
|
448
|
+
function(){};E.prototype.dump_function_code=function(){};E.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,g=100;a&&(e=this.devices.acpi.timer(b),g=this.devices.apic.timer(b));return Math.min(c,d,e,g)};E.prototype.device_raise_irq=function(a){this.pic_set_irq(a);this.devices.ioapic&&this.devices.ioapic.set_irq(a)};E.prototype.device_lower_irq=function(a){this.pic_clear_irq(a);this.devices.ioapic&&this.devices.ioapic.clear_irq(a)};
|
|
449
|
+
E.prototype.debug_init=function(){var a=this,b={};this.debug=b;b.init=function(){};b.get_regs_short=function(){};b.dump_regs=function(){};b.get_state=function(){};b.dump_state=function(){};b.dump_stack=function(){};b.dump_page_structures=function(){if(a.cr[4]&32)for(var g=0;4>g;g++)a.read32s(a.cr[3]+8*g)};b.dump_gdt_ldt=function(){};b.dump_idt=function(){};b.get_memory_dump=function(){};b.memory_hex_dump=function(){};b.used_memory_dump=function(){};b.debug_interrupt=function(){};let c,d;b.dump_code=
|
|
450
|
+
function(g,f,h){if(!d){if(void 0===c&&(c="function"===typeof require?require("./capstone-x86.min.js"):window.cs,void 0===c))return;d=[new c.Capstone(c.ARCH_X86,c.MODE_16),new c.Capstone(c.ARCH_X86,c.MODE_32)]}try{d[g].disasm(f,h).forEach(function(l){ta(B(l.address>>>0)+": "+k.pads(l.bytes.map(m=>B(m,2).slice(-2)).join(" "),20)+" "+l.mnemonic+" "+l.op_str)})}catch(l){ta("Could not disassemble: "+Array.from(f).map(m=>B(m,2)).join(" "))}};let e;b.dump_wasm=function(g){if(void 0===e&&(e="function"===
|
|
451
|
+
typeof require?require("./libwabt.js"):new window.WabtModule,void 0===e))return;g=g.slice();try{var f=e.readWasm(g,{readDebugNames:!1});f.generateNames();f.applyNames();f.toText({foldExprs:!0,inlineExport:!0})}catch(m){var h=new Blob([g]),l=document.createElement("a");l.download="failed.wasm";l.href=window.URL.createObjectURL(h);l.dataset.downloadurl=["application/octet-stream",l.download,l.href].join(":");l.click();window.URL.revokeObjectURL(l.src);console.log(m.toString())}finally{f&&f.destroy()}}};
|
|
452
|
+
const Hb=DataView.prototype,Ib={size:1,get:Hb.getUint8,set:Hb.setUint8},Jb={size:2,get:Hb.getUint16,set:Hb.setUint16},W={size:4,get:Hb.getUint32,set:Hb.setUint32},Db=Kb([{magic:W},{class:Ib},{data:Ib},{version0:Ib},{osabi:Ib},{abiversion:Ib},{pad0:function(a){return{size:a,get:()=>-1}}(7)},{type:Jb},{machine:Jb},{version1:W},{entry:W},{phoff:W},{shoff:W},{flags:W},{ehsize:Jb},{phentsize:Jb},{phnum:Jb},{shentsize:Jb},{shnum:Jb},{shstrndx:Jb}]);console.assert(52===Db.reduce((a,b)=>a+b.size,0));const Fb=
|
|
453
|
+
Kb([{type:W},{offset:W},{vaddr:W},{paddr:W},{filesz:W},{memsz:W},{flags:W},{align:W}]);console.assert(32===Fb.reduce((a,b)=>a+b.size,0));const Gb=Kb([{name:W},{type:W},{flags:W},{addr:W},{offset:W},{size:W},{link:W},{info:W},{addralign:W},{entsize:W}]);console.assert(40===Gb.reduce((a,b)=>a+b.size,0));function Kb(a){return a.map(function(b){var c=Object.keys(b);console.assert(1===c.length);c=c[0];b=b[c];console.assert(0<b.size);return{name:c,type:b,size:b.size,get:b.get,set:b.set}})}function Cb(a,
|
|
454
|
+
b){const c={};let d=0;for(const e of b)b=e.get.call(a,d,!0),console.assert(void 0===c[e.name]),c[e.name]=b,d+=e.size;return[c,d]}function Eb(a,b,c){const d=[];let e=0;for(var g=0;g<c;g++){const [f,h]=Cb(new DataView(a.buffer,a.byteOffset+e,void 0),b);d.push(f);e+=h}return[d,e]}function Bb(a,b,c,d){var e=new Uint8Array(b);const g=new Uint16Array(b);var f=new Uint32Array(b),h=e[497]||4,l=g[255];if(43605!==l)B(l);else if(l=g[257]|g[258]<<16,1400005704!==l)B(l);else{l=g[259];var m=e[529],n=g[283],p=f[139],
|
|
455
|
+
q=f[140],r=e[565],A=518<=l?f[142]:255,z=f[146],u=f[147],G=f[150],y=f[151],I=f[152];B(l);B(m);B(n);B(f[133]);B(p);B(q);B(r);B(A);B(z);B(u);B(y);B(G);B(I);e[528]=255;e[529]=m&-97|128;g[274]=56832;g[253]=65535;B(56832);d+="\x00";B(581632);f[138]=581632;for(e=0;e<d.length;e++)a[581632+e]=d.charCodeAt(e);h=512*(h+1);B(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));f[134]=h;f[135]=e;a.set(d,524288);a.set(b,1048576);a=new Uint8Array(512);
|
|
456
|
+
(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;f=a[c]=0;for(b=0;b<a.length;b++)f+=a[b];a[c]=-f;return{name:"genroms/kernel.bin",data:a}}}const Lb="undefined"!==typeof window&&0<=window.navigator.platform.toString().toLowerCase().search("win");function Sb(a){function b(y){return y.shiftKey&&
|
|
457
|
+
y.ctrlKey&&(73===y.keyCode||74===y.keyCode||75===y.keyCode)||!r.emu_enabled?!1:y.target?y.target.classList.contains("phone_keyboard")||"INPUT"!==y.target.nodeName&&"TEXTAREA"!==y.target.nodeName:!0}function c(y){!y.altKey&&m[56]&&h(56,!1);return g(y,!1)}function d(y){!y.altKey&&m[56]&&h(56,!1);return g(y,!0)}function e(){for(var y=Object.keys(m),I,R=0;R<y.length;R++)I=+y[R],m[I]&&h(I,!1);m={}}function g(y,I){if(r.bus&&b(y)){y.preventDefault&&y.preventDefault();if(Lb&&(n&&(clearTimeout(q),y.getModifierState&&
|
|
458
|
+
y.getModifierState("AltGraph")&&p===I&&"ControlLeft"===n.code&&"AltRight"===y.code||f(n,p),n=null),"ControlLeft"===y.code))return n=y,p=I,q=setTimeout(()=>{f(n,p);n=null},10),!1;f(y,I);return!1}}function f(y,I){a:{if(void 0!==y.code){var R=G[y.code];if(void 0!==R)break a}R=A[y.keyCode]}R?h(R,I,y.repeat):console.log("Missing char in map: keyCode="+(y.keyCode||-1).toString(16)+" code="+y.code)}function h(y,I,R){if(I)m[y]&&!R&&h(y,!1);else if(!m[y])return;(m[y]=I)||(y|=128);255<y?(l(y>>8),l(y&255)):
|
|
459
|
+
l(y)}function l(y){r.bus.send("keyboard-code",y)}var m={},n=null,p=!1,q=0,r=this;this.emu_enabled=!0;var A=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,
|
|
460
|
+
0,0,0,0,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,39,13,51,12,52,53,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,43,27,40,0,57435,57400,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),z={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,
|
|
461
|
+
114:82,115:83,116:84,117:85,118:86,119:87,120:88,121:89,122:90},u={33:49,34:222,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},G={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,
|
|
462
|
+
KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,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,
|
|
463
|
+
Numpad7:71,Numpad8:72,Numpad9:73,NumpadSubtract:74,Numpad4:75,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,OSLeft:57435,OSRight:57436,ContextMenu:57437};this.bus=a;this.destroy=function(){"undefined"!==typeof window&&
|
|
464
|
+
(window.removeEventListener("keyup",c,!1),window.removeEventListener("keydown",d,!1),window.removeEventListener("blur",e,!1))};this.init=function(){"undefined"!==typeof window&&(this.destroy(),window.addEventListener("keyup",c,!1),window.addEventListener("keydown",d,!1),window.addEventListener("blur",e,!1))};this.init();this.simulate_press=function(y){y={keyCode:y};g(y,!0);g(y,!1)};this.simulate_char=function(y){var I=y.charCodeAt(0);I in z?this.simulate_press(z[I]):I in u?(l(42),this.simulate_press(u[I]),
|
|
465
|
+
l(170)):console.log("ascii -> keyCode not found: ",I,y)}}function Tb(a,b){function c(u){if(!z.enabled||!z.emu_enabled)return!1;var G=b||document.body,y;if(!(y=document.pointerLockElement))a:{for(u=u.target;u.parentNode;){if(u===G){y=!0;break a}u=u.parentNode}y=!1}return y}function d(u){c(u)&&(u=u.changedTouches)&&u.length&&(u=u[u.length-1],r=u.clientX,A=u.clientY)}function e(){if(n||q||p)z.bus.send("mouse-click",[!1,!1,!1]),n=q=p=!1}function g(u){if(z.bus&&c(u)&&z.is_running){var G=0,y=0,I=u.changedTouches;
|
|
466
|
+
I?I.length&&(I=I[I.length-1],G=I.clientX-r,y=I.clientY-A,r=I.clientX,A=I.clientY,u.preventDefault()):"number"===typeof u.movementX?(G=u.movementX,y=u.movementY):"number"===typeof u.webkitMovementX?(G=u.webkitMovementX,y=u.webkitMovementY):"number"===typeof u.mozMovementX?(G=u.mozMovementX,y=u.mozMovementY):(G=u.clientX-r,y=u.clientY-A,r=u.clientX,A=u.clientY);z.bus.send("mouse-delta",[.15*G,-(.15*y)]);b&&z.bus.send("mouse-absolute",[u.pageX-b.offsetLeft,u.pageY-b.offsetTop,b.offsetWidth,b.offsetHeight])}}
|
|
467
|
+
function f(u){c(u)&&l(u,!0)}function h(u){c(u)&&l(u,!1)}function l(u,G){z.bus&&(1===u.which?n=G:2===u.which?q=G:3===u.which&&(p=G),z.bus.send("mouse-click",[n,q,p]),u.preventDefault())}function m(u){if(c(u)){var G=u.wheelDelta||-u.detail;0>G?G=-1:0<G&&(G=1);z.bus.send("mouse-wheel",[G,0]);u.preventDefault()}}var n=!1,p=!1,q=!1,r=0,A=0,z=this;this.enabled=!1;this.emu_enabled=!0;this.bus=a;this.bus.register("mouse-enable",function(u){this.enabled=u},this);this.is_running=!1;this.bus.register("emulator-stopped",
|
|
468
|
+
function(){this.is_running=!1},this);this.bus.register("emulator-started",function(){this.is_running=!0},this);this.destroy=function(){"undefined"!==typeof window&&(window.removeEventListener("touchstart",d,!1),window.removeEventListener("touchend",e,!1),window.removeEventListener("touchmove",g,!1),window.removeEventListener("mousemove",g,!1),window.removeEventListener("mousedown",f,!1),window.removeEventListener("mouseup",h,!1),window.removeEventListener("wheel",m,{passive:!1}))};this.init=function(){"undefined"!==
|
|
469
|
+
typeof window&&(this.destroy(),window.addEventListener("touchstart",d,!1),window.addEventListener("touchend",e,!1),window.addEventListener("touchmove",g,!1),window.addEventListener("mousemove",g,!1),window.addEventListener("mousedown",f,!1),window.addEventListener("mouseup",h,!1),window.addEventListener("wheel",m,{passive:!1}))};this.init()}function Ub(a){if("undefined"!==typeof window)if(window.AudioContext||window.webkitAudioContext){var b=window.AudioWorklet?Vb:Wb;this.bus=a;this.audio_context=
|
|
470
|
+
window.AudioContext?new AudioContext:new webkitAudioContext;this.mixer=new Xb(a,this.audio_context);this.pcspeaker=new Yb(a,this.audio_context,this.mixer);this.dac=new b(a,this.audio_context,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")}
|
|
471
|
+
Ub.prototype.destroy=function(){this.audio_context&&this.audio_context.close();this.audio_context=null;this.dac&&this.dac.node_processor&&this.dac.node_processor.port.close();this.dac=null};function Xb(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=
|
|
472
|
+
this.audio_context.createBiquadFilter();this.node_treble_left.type="highshelf";this.node_treble_right.type="highshelf";this.node_treble_left.frequency.setValueAtTime(2E3,this.audio_context.currentTime);this.node_treble_right.frequency.setValueAtTime(2E3,this.audio_context.currentTime);this.node_bass_left=this.audio_context.createBiquadFilter();this.node_bass_right=this.audio_context.createBiquadFilter();this.node_bass_left.type="lowshelf";this.node_bass_right.type="lowshelf";this.node_bass_left.frequency.setValueAtTime(200,
|
|
473
|
+
this.audio_context.currentTime);this.node_bass_right.frequency.setValueAtTime(200,this.audio_context.currentTime);this.node_gain_left=this.audio_context.createGain();this.node_gain_right=this.audio_context.createGain();this.node_merger=this.audio_context.createChannelMerger(2);this.input_left=this.node_treble_left;this.input_right=this.node_treble_right;this.node_treble_left.connect(this.node_bass_left);this.node_bass_left.connect(this.node_gain_left);this.node_gain_left.connect(this.node_merger,
|
|
474
|
+
0,0);this.node_treble_right.connect(this.node_bass_right);this.node_bass_right.connect(this.node_gain_right);this.node_gain_right.connect(this.node_merger,0,1);this.node_merger.connect(this.audio_context.destination);a.register("mixer-connect",function(d){this.connect_source(d[0],d[1])},this);a.register("mixer-disconnect",function(d){this.disconnect_source(d[0],d[1])},this);a.register("mixer-volume",function(d){var e=d[0],g=d[1];d=Math.pow(10,d[2]/20);e=0===e?this:this.sources.get(e);void 0===e||
|
|
475
|
+
e.set_volume(d,g)},this);a.register("mixer-gain-left",function(d){this.gain_left=Math.pow(10,d/20);this.update()},this);a.register("mixer-gain-right",function(d){this.gain_right=Math.pow(10,d/20);this.update()},this);a.register("mixer-treble-left",c(this.node_treble_left),this);a.register("mixer-treble-right",c(this.node_treble_right),this);a.register("mixer-bass-left",c(this.node_bass_left),this);a.register("mixer-bass-right",c(this.node_bass_right),this)}Xb.prototype.add_source=function(a,b){a=
|
|
476
|
+
new Zb(this.audio_context,a,this.input_left,this.input_right);this.sources.has(b);this.sources.set(b,a);return a};Xb.prototype.connect_source=function(a,b){a=this.sources.get(a);void 0===a||a.connect(b)};Xb.prototype.disconnect_source=function(a,b){a=this.sources.get(a);void 0===a||a.disconnect(b)};Xb.prototype.set_volume=function(a,b){void 0===b&&(b=2);switch(b){case 0:this.volume_left=a;break;case 1:this.volume_right=a;break;case 2:this.volume_both=a;break;default:return}this.update()};Xb.prototype.update=
|
|
477
|
+
function(){var a=this.volume_both*this.volume_right*this.gain_right;this.node_gain_left.gain.setValueAtTime(this.volume_both*this.volume_left*this.gain_left,this.audio_context.currentTime);this.node_gain_right.gain.setValueAtTime(a,this.audio_context.currentTime)};function Zb(a,b,c,d){this.audio_context=a;this.connected_right=this.connected_left=!0;this.volume_right=this.volume_left=this.volume_both=this.gain_hidden=1;this.node_splitter=a.createChannelSplitter(2);this.node_gain_left=a.createGain();
|
|
478
|
+
this.node_gain_right=a.createGain();b.connect(this.node_splitter);this.node_splitter.connect(this.node_gain_left,0);this.node_gain_left.connect(c);this.node_splitter.connect(this.node_gain_right,1);this.node_gain_right.connect(d)}Zb.prototype.update=function(){var a=this.connected_right*this.gain_hidden*this.volume_both*this.volume_right;this.node_gain_left.gain.setValueAtTime(this.connected_left*this.gain_hidden*this.volume_both*this.volume_left,this.audio_context.currentTime);this.node_gain_right.gain.setValueAtTime(a,
|
|
479
|
+
this.audio_context.currentTime)};Zb.prototype.connect=function(a){var b=!a||2===a;if(b||0===a)this.connected_left=!0;if(b||1===a)this.connected_right=!0;this.update()};Zb.prototype.disconnect=function(a){var b=!a||2===a;if(b||0===a)this.connected_left=!1;if(b||1===a)this.connected_right=!1;this.update()};Zb.prototype.set_volume=function(a,b){void 0===b&&(b=2);switch(b){case 0:this.volume_left=a;break;case 1:this.volume_right=a;break;case 2:this.volume_both=a;break;default:return}this.update()};Zb.prototype.set_gain_hidden=
|
|
480
|
+
function(a){this.gain_hidden=a};function Yb(a,b,c){this.node_oscillator=b.createOscillator();this.node_oscillator.type="square";this.node_oscillator.frequency.setValueAtTime(440,b.currentTime);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],g=0;3===d[0]&&(g=Math.min(1193181.6665999999/
|
|
481
|
+
e,this.node_oscillator.frequency.maxValue),g=Math.max(g,0));this.node_oscillator.frequency.setValueAtTime(g,b.currentTime)},this)}Yb.prototype.start=function(){this.node_oscillator.start()};function Vb(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=48E3;b=function(){function f(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=
|
|
482
|
+
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=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,
|
|
483
|
+
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,A=this.source_offset-this.kernel_size+1;A<=r;A++){var z=this.source_block_start+A;p+=this.get_sample(z,0)*this.kernel(this.source_time-A);q+=this.get_sample(z,1)*this.kernel(this.source_time-A)}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;
|
|
484
|
+
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;this.source_offset=0;this.ensure_enough_data(n);return!0};h.prototype.kernel=function(m){return f(m)*f(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=
|
|
485
|
+
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>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+=
|
|
486
|
+
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]);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"})};
|
|
487
|
+
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,this.pump())};h.prototype.queue_shift=function(){if(!this.queue_length)return l;var m=this.queue_data[this.queue_start];this.queue_data[this.queue_start]=null;this.queue_start=this.queue_start+1&this.queue_size-1;this.queue_length--;this.queued_samples-=m[0].length;return m};h.prototype.dbg_log=
|
|
488
|
+
function(){};registerProcessor("dac-processor",h)}.toString();var d=b.indexOf("{")+1,e=b.lastIndexOf("}");b=b.substring(d,e);b=new Blob([b],{type:"application/javascript"});var g=URL.createObjectURL(b);this.node_processor=null;this.node_output=this.audio_context.createGain();this.audio_context.audioWorklet.addModule(g).then(()=>{URL.revokeObjectURL(g);this.node_processor=new AudioWorkletNode(this.audio_context,"dac-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],parameterData:{},
|
|
489
|
+
processorOptions:{}});this.node_processor.port.postMessage({type:"sampling-rate",value:this.sampling_rate});this.node_processor.port.onmessage=f=>{switch(f.data.type){case "pump":this.pump()}};this.node_processor.connect(this.node_output)});this.mixer_connection=c.add_source(this.node_output,2);this.mixer_connection.set_gain_hidden(3);a.register("dac-send-data",function(f){this.queue(f)},this);a.register("dac-enable",function(){this.enabled=!0},this);a.register("dac-disable",function(){this.enabled=
|
|
489
490
|
!1},this);a.register("dac-tell-sampling-rate",function(f){this.sampling_rate=f;this.node_processor&&this.node_processor.port.postMessage({type:"sampling-rate",value:f})},this)}Vb.prototype.queue=function(a){this.node_processor&&this.node_processor.port.postMessage({type:"queue",value:a},[a[0].buffer,a[1].buffer])};Vb.prototype.pump=function(){this.enabled&&this.bus.send("dac-request-data")};function Wb(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=22050;this.buffered_time=
|
|
490
491
|
0;this.rate_ratio=1;this.node_lowpass=this.audio_context.createBiquadFilter();this.node_lowpass.type="lowpass";this.node_output=this.node_lowpass;this.mixer_connection=c.add_source(this.node_output,2);this.mixer_connection.set_gain_hidden(3);a.register("dac-send-data",function(d){this.queue(d)},this);a.register("dac-enable",function(){this.enabled=!0;this.pump()},this);a.register("dac-disable",function(){this.enabled=!1},this);a.register("dac-tell-sampling-rate",function(d){this.sampling_rate=d;this.rate_ratio=
|
|
491
492
|
Math.ceil(8E3/d);this.node_lowpass.frequency.setValueAtTime(d/2,this.audio_context.currentTime)},this)}Wb.prototype.queue=function(a){var b=a[0].length,c=b/this.sampling_rate;if(1<this.rate_ratio){var d=this.audio_context.createBuffer(2,b*this.rate_ratio,this.sampling_rate*this.rate_ratio);for(var e=d.getChannelData(0),g=d.getChannelData(1),f=0,h=0;h<b;h++)for(var l=0;l<this.rate_ratio;l++,f++)e[f]=a[0][h],g[f]=a[1][h]}else d=this.audio_context.createBuffer(2,b,this.sampling_rate),d.copyToChannel?
|