v86 0.3.2 → 0.3.6
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/binaries.js +1 -1
- package/build/index-debug.cjs +1 -1
- package/build/index-debug.js +1 -1
- package/build/index.cjs +1 -1
- package/build/index.js +1 -1
- package/build/v86-debug.wasm +0 -0
- package/build/v86.wasm +0 -0
- package/package.json +1 -1
package/build/index-debug.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var t=3579545;function e(t){this.cpu=t;var e=t.io;t.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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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_last_value=0,this.timer_imprecision_offset=0,this.status=1,this.pm1_status=0,this.pm1_enable=0,this.last_timer=this.get_timer(v86.microtick()),this.gpe=new Uint8Array(4),e.register_read(45056,this,void 0,(function(){return dbg_log("ACPI pm1_status read",LOG_ACPI),this.pm1_status})),e.register_write(45056,this,void 0,(function(t){dbg_log("ACPI pm1_status write: "+h(t,4),LOG_ACPI),this.pm1_status&=~t})),e.register_read(45058,this,void 0,(function(){return dbg_log("ACPI pm1_enable read",LOG_ACPI),this.pm1_enable})),e.register_write(45058,this,void 0,(function(t){dbg_log("ACPI pm1_enable write: "+h(t),LOG_ACPI),this.pm1_enable=t})),e.register_read(45060,this,void 0,(function(){return dbg_log("ACPI status read",LOG_ACPI),this.status})),e.register_write(45060,this,void 0,(function(t){dbg_log("ACPI status write: "+h(t),LOG_ACPI),this.status=t})),e.register_read(45064,this,void 0,void 0,(function(){return 16777215&this.get_timer(v86.microtick())})),e.register_read(45024,this,(function(){return dbg_log("Read gpe#0",LOG_ACPI),this.gpe[0]})),e.register_read(45025,this,(function(){return dbg_log("Read gpe#1",LOG_ACPI),this.gpe[1]})),e.register_read(45026,this,(function(){return dbg_log("Read gpe#2",LOG_ACPI),this.gpe[2]})),e.register_read(45027,this,(function(){return dbg_log("Read gpe#3",LOG_ACPI),this.gpe[3]})),e.register_write(45024,this,(function(t){dbg_log("Write gpe#0: "+h(t),LOG_ACPI),this.gpe[0]=t})),e.register_write(45025,this,(function(t){dbg_log("Write gpe#1: "+h(t),LOG_ACPI),this.gpe[1]=t})),e.register_write(45026,this,(function(t){dbg_log("Write gpe#2: "+h(t),LOG_ACPI),this.gpe[2]=t})),e.register_write(45027,this,(function(t){dbg_log("Write gpe#3: "+h(t),LOG_ACPI),this.gpe[3]=t}))}e.prototype.timer=function(t){var e=this.get_timer(t),i=0!=((e^this.last_timer)&1<<23);return 1&this.pm1_enable&&i?(dbg_log("ACPI raise irq",LOG_ACPI),this.pm1_status|=1,this.cpu.device_raise_irq(9)):this.cpu.device_lower_irq(9),this.last_timer=e,100},e.prototype.get_timer=function(t){const e=Math.round(3579.545*t);if(e===this.timer_last_value)this.timer_imprecision_offset<3579.545&&this.timer_imprecision_offset++;else{dbg_assert(e>this.timer_last_value);this.timer_last_value+this.timer_imprecision_offset<=e?(this.timer_imprecision_offset=0,this.timer_last_value=e):dbg_log("Warning: Overshot pmtimer, waiting; current="+e+" last="+this.timer_last_value+" offset="+this.timer_imprecision_offset,LOG_ACPI)}return this.timer_last_value+this.timer_imprecision_offset},e.prototype.get_state=function(){var t=[];return t[0]=this.status,t[1]=this.pm1_status,t[2]=this.pm1_enable,t[3]=this.gpe,t},e.prototype.set_state=function(t){this.status=t[0],this.pm1_status=t[1],this.pm1_enable=t[2],this.gpe=t[3]};var i=!1,s=4276092928,r=3<<17,a=0,n=1<<17,o=2<<17,_=["Fixed (0)","Lowest Prio (1)","SMI (2)","Reserved (3)","NMI (4)","INIT (5)","Reserved (6)","ExtINT (7)"],d=["physical","logical"];function c(t){this.cpu=t,this.apic_id=0,this.timer_divider=0,this.timer_divider_shift=1,this.timer_initial_count=0,this.timer_current_count=0,this.next_tick=v86.microtick(),this.lvt_timer=IOAPIC_CONFIG_MASKED,this.lvt_perf_counter=IOAPIC_CONFIG_MASKED,this.lvt_int0=IOAPIC_CONFIG_MASKED,this.lvt_int1=IOAPIC_CONFIG_MASKED,this.lvt_error=IOAPIC_CONFIG_MASKED,this.tpr=0,this.icr0=0,this.icr1=0,this.irr=new Int32Array(8),this.isr=new Int32Array(8),this.tmr=new Int32Array(8),this.spurious_vector=254,this.destination_format=-1,this.local_destination=0,this.error=0,this.read_error=0,t.io.mmap_register(4276092928,1048576,(t=>{dbg_log("Unsupported read8 from apic: "+h(t>>>0),LOG_APIC);var e=3&t;return t&=-4,this.read32(t)>>8*e&255}),((t,e)=>{dbg_log("Unsupported write8 from apic: "+h(t)+" <- "+h(e),LOG_APIC),dbg_trace(),dbg_assert(!1)}),(t=>this.read32(t)),((t,e)=>this.write32(t,e)))}c.prototype.read32=function(t){switch(t=t-4276092928|0){case 32:return dbg_log("APIC read id",LOG_APIC),this.apic_id;case 48:return dbg_log("APIC read version",LOG_APIC),327700;case 128:return this.tpr;case 208:return dbg_log("Read local destination",LOG_APIC),this.local_destination;case 224:return dbg_log("Read destination format",LOG_APIC),this.destination_format;case 240:return this.spurious_vector;case 256:case 272:case 288:case 304:case 320:case 336:case 352:case 368:var e=t-256>>4;return dbg_log("Read isr "+e+": "+h(this.isr[e]>>>0,8),LOG_APIC),this.isr[e];case 384:case 400:case 416:case 432:case 448:case 464:case 480:case 496:e=t-384>>4;return dbg_log("Read tmr "+e+": "+h(this.tmr[e]>>>0,8),LOG_APIC),this.tmr[e];case 512:case 528:case 544:case 560:case 576:case 592:case 608:case 624:e=t-512>>4;return dbg_log("Read irr "+e+": "+h(this.irr[e]>>>0,8),LOG_APIC),this.irr[e];case 640:return dbg_log("Read error: "+h(this.read_error>>>0,8),LOG_APIC),this.read_error;case 768:return this.icr0;case 784:return dbg_log("APIC read icr1",LOG_APIC),this.icr1;case 800:return dbg_log("read timer lvt",LOG_APIC),this.lvt_timer;case 832:return dbg_log("read lvt perf counter",LOG_APIC),this.lvt_perf_counter;case 848:return dbg_log("read lvt int0",LOG_APIC),this.lvt_int0;case 864:return dbg_log("read lvt int1",LOG_APIC),this.lvt_int1;case 880:return dbg_log("read lvt error",LOG_APIC),this.lvt_error;case 992:return dbg_log("read timer divider",LOG_APIC),this.timer_divider;case 896:return dbg_log("read timer initial count",LOG_APIC),this.timer_initial_count;case 912:return dbg_log("read timer current count: "+h(this.timer_current_count>>>0,8),LOG_APIC),this.timer_current_count;default:return dbg_log("APIC read "+h(t),LOG_APIC),dbg_assert(!1),0}},c.prototype.write32=function(t,e){switch(t=t-4276092928|0){case 48:dbg_log("APIC write version: "+h(e>>>0,8)+", ignored",LOG_APIC);break;case 128:this.tpr=255&e,this.check_vector();break;case 176:var i=this.highest_isr();-1!==i?(this.register_clear_bit(this.isr,i),this.register_get_bit(this.tmr,i)&&this.cpu.devices.ioapic.remote_eoi(i),this.check_vector()):dbg_log("Bad eoi: No isr set",LOG_APIC);break;case 208:dbg_log("Set local destination: "+h(e>>>0,8),LOG_APIC),this.local_destination=4278190080&e;break;case 224:dbg_log("Set destination format: "+h(e>>>0,8),LOG_APIC),this.destination_format=16777215|e;break;case 240:dbg_log("Set spurious vector: "+h(e>>>0,8),LOG_APIC),this.spurious_vector=e;break;case 640:dbg_log("Write error: "+h(e>>>0,8),LOG_APIC),this.read_error=this.error,this.error=0;break;case 768:var s=255&e,r=e>>8&7,a=e>>11&1,n=e>>15&1,o=e>>18&3,c=this.icr1>>>24;dbg_log("APIC write icr0: "+h(e,8)+" vector="+h(s,2)+" destination_mode="+d[a]+" delivery_mode="+_[r]+" destination_shorthand="+["no","self","all with self","all without self"][o],LOG_APIC),e&=-4097,this.icr0=e,0===o?this.route(s,r,n,c,a):1===o?this.deliver(s,IOAPIC_DELIVERY_FIXED,n):2===o?this.deliver(s,r,n):3===o||dbg_assert(!1);break;case 784:dbg_log("APIC write icr1: "+h(e>>>0,8),LOG_APIC),this.icr1=e;break;case 800:dbg_log("timer lvt: "+h(e>>>0,8),LOG_APIC),this.lvt_timer=e;break;case 832:dbg_log("lvt perf counter: "+h(e>>>0,8),LOG_APIC),this.lvt_perf_counter=e;break;case 848:dbg_log("lvt int0: "+h(e>>>0,8),LOG_APIC),this.lvt_int0=e;break;case 864:dbg_log("lvt int1: "+h(e>>>0,8),LOG_APIC),this.lvt_int1=e;break;case 880:dbg_log("lvt error: "+h(e>>>0,8),LOG_APIC),this.lvt_error=e;break;case 992:dbg_log("timer divider: "+h(e>>>0,8),LOG_APIC),this.timer_divider=e;var u=3&e|(8&e)>>1;this.timer_divider_shift=7===u?0:u+1;break;case 896:dbg_log("timer initial: "+h(e>>>0,8),LOG_APIC),this.timer_initial_count=e>>>0,this.timer_current_count=e>>>0,this.next_tick=v86.microtick(),this.timer_active=!0;break;case 912:dbg_log("timer current: "+h(e>>>0,8),LOG_APIC),dbg_assert(!1,"read-only register");break;default:dbg_log("APIC write32 "+h(t)+" <- "+h(e>>>0,8),LOG_APIC),dbg_assert(!1)}},c.prototype.timer=function(t){if(0===this.timer_current_count)return 100;const e=APIC_TIMER_FREQ/(1<<this.timer_divider_shift),i=(t-this.next_tick)*e>>>0;if(this.next_tick+=i/e,this.timer_current_count-=i,this.timer_current_count<=0){var s=393216&this.lvt_timer;131072===s?(this.timer_current_count=this.timer_current_count%this.timer_initial_count,this.timer_current_count<=0&&(this.timer_current_count+=this.timer_initial_count),dbg_assert(0!==this.timer_current_count),0==(this.lvt_timer&IOAPIC_CONFIG_MASKED)&&this.deliver(255&this.lvt_timer,IOAPIC_DELIVERY_FIXED,!1)):0===s&&(this.timer_current_count=0,dbg_log("APIC timer one shot end",LOG_APIC),0==(this.lvt_timer&IOAPIC_CONFIG_MASKED)&&this.deliver(255&this.lvt_timer,IOAPIC_DELIVERY_FIXED,!1))}return Math.max(0,this.timer_current_count/e)},c.prototype.route=function(t,e,i,s,r){this.deliver(t,e,i)},c.prototype.deliver=function(t,e,i){e!==IOAPIC_DELIVERY_INIT&&e!==IOAPIC_DELIVERY_NMI&&((t<16||255===t)&&dbg_assert(!1,"TODO: Invalid vector"),this.register_get_bit(this.irr,t)?dbg_log("Not delivered: irr already set, vector="+h(t,2),LOG_APIC):(this.register_set_bit(this.irr,t),i?this.register_set_bit(this.tmr,t):this.register_clear_bit(this.tmr,t),this.check_vector()))},c.prototype.highest_irr=function(){var t=this.register_get_highest_bit(this.irr);return dbg_assert(255!==t),dbg_assert(t>=16||-1===t),t},c.prototype.highest_isr=function(){var t=this.register_get_highest_bit(this.isr);return dbg_assert(255!==t),dbg_assert(t>=16||-1===t),t},c.prototype.check_vector=function(){var t=this.highest_irr();-1!==t&&(this.highest_isr()>=t||(240&t)<=(240&this.tpr)||this.cpu.handle_irqs())},c.prototype.acknowledge_irq=function(){var t=this.highest_irr();-1!==t&&(this.highest_isr()>=t||(240&t)<=(240&this.tpr)||(this.register_clear_bit(this.irr,t),this.register_set_bit(this.isr,t),this.cpu.pic_call_irq(t),this.check_vector()))},c.prototype.get_state=function(){var t=[];return t[0]=this.apic_id,t[1]=this.timer_divider,t[2]=this.timer_divider_shift,t[3]=this.timer_initial_count,t[4]=this.timer_current_count,t[5]=this.next_tick,t[6]=this.lvt_timer,t[7]=this.lvt_perf_counter,t[8]=this.lvt_int0,t[9]=this.lvt_int1,t[10]=this.lvt_error,t[11]=this.tpr,t[12]=this.icr0,t[13]=this.icr1,t[14]=this.irr,t[15]=this.isr,t[16]=this.tmr,t[17]=this.spurious_vector,t[18]=this.destination_format,t[19]=this.local_destination,t[20]=this.error,t[21]=this.read_error,t},c.prototype.set_state=function(t){this.apic_id=t[0],this.timer_divider=t[1],this.timer_divider_shift=t[2],this.timer_initial_count=t[3],this.timer_current_count=t[4],this.next_tick=t[5],this.lvt_timer=t[6],this.lvt_perf_counter=t[7],this.lvt_int0=t[8],this.lvt_int1=t[9],this.lvt_error=t[10],this.tpr=t[11],this.icr0=t[12],this.icr1=t[13],this.irr=t[14],this.isr=t[15],this.tmr=t[16],this.spurious_vector=t[17],this.destination_format=t[18],this.local_destination=t[19],this.error=t[20],this.read_error=t[21]},c.prototype.register_get_bit=function(t,e){return dbg_assert(e>=0&&e<256),t[e>>5]>>(31&e)&1},c.prototype.register_set_bit=function(t,e){dbg_assert(e>=0&&e<256),t[e>>5]|=1<<(31&e)},c.prototype.register_clear_bit=function(t,e){dbg_assert(e>=0&&e<256),t[e>>5]&=~(1<<(31&e))},c.prototype.register_get_highest_bit=function(t){for(var e=7;e>=0;e--){var i=t[e];if(i)return v86util.int_log2(i>>>0)|e<<5}return-1};var u={};function p(){this.listeners={},this.pair=void 0}p.prototype.register=function(t,e,i){var s=this.listeners[t];void 0===s&&(s=this.listeners[t]=[]),s.push({fn:e,this_value:i})},p.prototype.unregister=function(t,e){var i=this.listeners[t];void 0!==i&&(this.listeners[t]=i.filter((function(t){return t.fn!==e})))},p.prototype.send=function(t,e,i){if(this.pair){var s=this.pair.listeners[t];if(void 0!==s)for(var r=0;r<s.length;r++){var a=s[r];a.fn.call(a.this_value,e)}}},p.prototype.send_async=function(t,e){dbg_assert(1===arguments.length||2===arguments.length),setTimeout(this.send.bind(this,t,e),0)},u.create=function(){var t=new p,e=new p;return t.pair=e,e.pair=t,[t,e]};var l=-1,f=0,m=1,g=2,b=4,y=8,v=16,w=32,k=64,x=128,A=256,q=512,I=1024,C=2048,z=4096,O=8192,R=16384,L=32768,E=65536,P=131072,T=262144,D=524288,U=1048576,G=2097152,S=4194304,M=8388608,F=[[1,""],[2,"CPU"],[32768,"DISK"],[4,"FPU"],[8,"MEM"],[16,"DMA"],[32,"IO"],[64,"PS2"],[128,"PIC"],[256,"VGA"],[512,"PIT"],[1024,"MOUS"],[2048,"PCI"],[4096,"BIOS"],[8192,"FLOP"],[16384,"SERI"],[65536,"RTC"],[131072,"HPET"],[262144,"ACPI"],[524288,"APIC"],[1048576,"NET"],[2097152,"VIO"],[4194304,"9P"],[8388608,"SB16"]],V=1,B=4,N=16,W=64,j=128,K=256,X=512,H=1024,Y=2048,Q=12288,J=16384,Z=65536,$=1<<17,tt=1<<18,et=1<<19,it=1<<20,st=1<<21,rt=2,at=0,nt=1,ot=2,ht=3,_t=4,dt=5,ct=6,ut=7,pt=0,lt=1,ft=2,mt=3,gt=4,bt=5,yt=7,vt=17,wt=1<<17,kt=1<<31,xt=32,At=0,qt=1,It=3,Ct=5,zt=15,Ot=13,Rt=25,Lt=32768,Et=49152,Pt=1431127377,Tt=900,Dt=1024,Ut=0,Gt=1,St=2,Mt=0,Ft=1,Vt=2,Bt=!0,Nt=!1,Wt=!1,jt=!1,Kt=!1,Xt=!1,Ht=-15786961,Yt=!1,Qt=!1,Jt=1,Zt=1e6,$t=1e6;function te(t){console.log(t)}var ee,ie,se,re=(ee=F.reduce((function(t,e){return t[e[0]]=e[1],t}),{}),ie="",se=0,function(t,e){if(-15786961&(e=e||1)){var i=ee[e]||"",s="["+_e.pads(i,4)+"] "+t;if(s===ie&&++se<2048)return;var r=new Date,a=_e.pad0(r.getHours(),2)+":"+_e.pad0(r.getMinutes(),2)+":"+_e.pad0(r.getSeconds(),2)+"+"+_e.pad0(r.getMilliseconds(),3)+" ";se&&(te(1===se?a+ie:"Previous message repeated "+se+" times"),se=0),te(a+s),ie=s}});function ae(t){re(Error().stack,t)}function ne(t,e,i){t||oe(e)}function oe(t){throw console.trace(),t?"Assert failed: "+t:"Assert failed"}var he=he||{};he.exportSymbol=function(){},he.exportProperty=function(){};var _e=_e||{};function de(t,e){if(t)i=t.toString(16);else var i="";return"0x"+_e.pad0(i.toUpperCase(),e||1)}if(_e.pads=function(t,e){return(t=t||0===t?t+"":"").padEnd(e," ")},_e.pad0=function(t,e){return(t=t||0===t?t+"":"").padStart(e,"0")},_e.zeros=function(t){return Array(t).fill(0)},_e.range=function(t){return Array.from(Array(t).keys())},_e.view=function(t,e,i,s){return new Proxy({},{get:function(r,a,n){const o=new t(e.buffer,i,s),h=o[a];return"function"==typeof h?h.bind(o):(ne(/^\d+$/.test(a)||"buffer"===a||"length"===a||"BYTES_PER_ELEMENT"===a||"byteOffset"===a),h)},set:function(r,a,n,o){return ne(/^\d+$/.test(a)),new t(e.buffer,i,s)[a]=n,!0}})},"undefined"!=typeof crypto&&crypto.getRandomValues){let t=new Int32Array(1);_e.get_rand_int=function(){return crypto.getRandomValues(t),t[0]}}else if("undefined"!=typeof require){const t=require("crypto");_e.get_rand_int=function(){return t.randomBytes(4).readInt32LE(0)}}else ne(!1,"Unsupported platform: No cryptographic random values");function ce(t){ne(t instanceof ArrayBuffer),this.buffer=t,this.byteLength=t.byteLength,this.onload=void 0,this.onprogress=void 0}function ue(t){var e,i,s=new Uint8Array(t);ne(0==(t&t-1)),this.length=0,this.push=function(e){this.length===t||this.length++,s[i]=e,i=i+1&t-1},this.shift=function(){if(this.length){var i=s[e];return e=e+1&t-1,this.length--,i}return-1},this.peek=function(){return this.length?s[e]:-1},this.clear=function(){e=0,i=0,this.length=0},this.clear()}function pe(t){this.size=t,this.data=new Float32Array(t),this.start=0,this.end=0,this.length=0,ne(0==(t&t-1))}function le(t){this.data=[],this.index=0,this.size=t}function fe(t,e){t instanceof Array||(t=[t]),me(new Blob(t),e)}function me(t,e){var i=document.createElement("a");if(i.download=e,i.href=window.URL.createObjectURL(t),i.dataset.downloadurl=["application/octet-stream",i.download,i.href].join(":"),document.createEvent){var s=document.createEvent("MouseEvent");s.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),i.dispatchEvent(s)}else i.click();window.URL.revokeObjectURL(i.href)}function ge(t){this.cpu=t,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),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;var e=t.io;e.register_write(0,this,this.port_addr_write.bind(this,0)),e.register_write(2,this,this.port_addr_write.bind(this,1)),e.register_write(4,this,this.port_addr_write.bind(this,2)),e.register_write(6,this,this.port_addr_write.bind(this,3)),e.register_write(1,this,this.port_count_write.bind(this,0)),e.register_write(3,this,this.port_count_write.bind(this,1)),e.register_write(5,this,this.port_count_write.bind(this,2)),e.register_write(7,this,this.port_count_write.bind(this,3)),e.register_read(0,this,this.port_addr_read.bind(this,0)),e.register_read(2,this,this.port_addr_read.bind(this,1)),e.register_read(4,this,this.port_addr_read.bind(this,2)),e.register_read(6,this,this.port_addr_read.bind(this,3)),e.register_read(1,this,this.port_count_read.bind(this,0)),e.register_read(3,this,this.port_count_read.bind(this,1)),e.register_read(5,this,this.port_count_read.bind(this,2)),e.register_read(7,this,this.port_count_read.bind(this,3)),e.register_write(192,this,this.port_addr_write.bind(this,4)),e.register_write(196,this,this.port_addr_write.bind(this,5)),e.register_write(200,this,this.port_addr_write.bind(this,6)),e.register_write(204,this,this.port_addr_write.bind(this,7)),e.register_write(194,this,this.port_count_write.bind(this,4)),e.register_write(198,this,this.port_count_write.bind(this,5)),e.register_write(202,this,this.port_count_write.bind(this,6)),e.register_write(206,this,this.port_count_write.bind(this,7)),e.register_read(192,this,this.port_addr_read.bind(this,4)),e.register_read(196,this,this.port_addr_read.bind(this,5)),e.register_read(200,this,this.port_addr_read.bind(this,6)),e.register_read(204,this,this.port_addr_read.bind(this,7)),e.register_read(194,this,this.port_count_read.bind(this,4)),e.register_read(198,this,this.port_count_read.bind(this,5)),e.register_read(202,this,this.port_count_read.bind(this,6)),e.register_read(206,this,this.port_count_read.bind(this,7)),e.register_write(135,this,this.port_page_write.bind(this,0)),e.register_write(131,this,this.port_page_write.bind(this,1)),e.register_write(129,this,this.port_page_write.bind(this,2)),e.register_write(130,this,this.port_page_write.bind(this,3)),e.register_write(143,this,this.port_page_write.bind(this,4)),e.register_write(139,this,this.port_page_write.bind(this,5)),e.register_write(137,this,this.port_page_write.bind(this,6)),e.register_write(138,this,this.port_page_write.bind(this,7)),e.register_read(135,this,this.port_page_read.bind(this,0)),e.register_read(131,this,this.port_page_read.bind(this,1)),e.register_read(129,this,this.port_page_read.bind(this,2)),e.register_read(130,this,this.port_page_read.bind(this,3)),e.register_read(143,this,this.port_page_read.bind(this,4)),e.register_read(139,this,this.port_page_read.bind(this,5)),e.register_read(137,this,this.port_page_read.bind(this,6)),e.register_read(138,this,this.port_page_read.bind(this,7)),e.register_write(1159,this,this.port_pagehi_write.bind(this,0)),e.register_write(1155,this,this.port_pagehi_write.bind(this,1)),e.register_write(1153,this,this.port_pagehi_write.bind(this,2)),e.register_write(1154,this,this.port_pagehi_write.bind(this,3)),e.register_write(1163,this,this.port_pagehi_write.bind(this,5)),e.register_write(1161,this,this.port_pagehi_write.bind(this,6)),e.register_write(1162,this,this.port_pagehi_write.bind(this,7)),e.register_read(1159,this,this.port_pagehi_read.bind(this,0)),e.register_read(1155,this,this.port_pagehi_read.bind(this,1)),e.register_read(1153,this,this.port_pagehi_read.bind(this,2)),e.register_read(1154,this,this.port_pagehi_read.bind(this,3)),e.register_read(1163,this,this.port_pagehi_read.bind(this,5)),e.register_read(1161,this,this.port_pagehi_read.bind(this,6)),e.register_read(1162,this,this.port_pagehi_read.bind(this,7)),e.register_write(10,this,this.port_singlemask_write.bind(this,0)),e.register_write(212,this,this.port_singlemask_write.bind(this,4)),e.register_write(15,this,this.port_multimask_write.bind(this,0)),e.register_write(222,this,this.port_multimask_write.bind(this,4)),e.register_read(15,this,this.port_multimask_read.bind(this,0)),e.register_read(222,this,this.port_multimask_read.bind(this,4)),e.register_write(11,this,this.port_mode_write.bind(this,0)),e.register_write(214,this,this.port_mode_write.bind(this,4)),e.register_write(12,this,this.portC_write),e.register_write(216,this,this.portC_write)}ce.prototype.load=function(){this.onload&&this.onload({buffer:this.buffer})},ce.prototype.get=function(t,e,i){ne(t+e<=this.byteLength),i(new Uint8Array(this.buffer,t,e))},ce.prototype.set=function(t,e,i){ne(t+e.byteLength<=this.byteLength),new Uint8Array(this.buffer,t,e.byteLength).set(e),i()},ce.prototype.get_buffer=function(t){t(this.buffer)},ce.prototype.get_state=function(){const t=[];return t[0]=this.byteLength,t[1]=new Uint8Array(this.buffer),t},ce.prototype.set_state=function(t){this.byteLength=t[0],this.buffer=t[1].slice().buffer},function(){if("function"==typeof Math.clz32&&32===Math.clz32(0)&&15===Math.clz32(74565)&&0===Math.clz32(-1))return _e.int_log2_byte=function(t){return ne(t>0),ne(t<256),31-Math.clz32(t)},void(_e.int_log2=function(t){return ne(t>0),31-Math.clz32(t)});for(var t=new Int8Array(256),e=0,i=-2;e<256;e++)e&e-1||i++,t[e]=i;_e.int_log2_byte=function(e){return ne(e>0),ne(e<256),t[e]},_e.int_log2=function(e){ne((e>>>=0)>0);var i,s=e>>>16;return s?(i=s>>>8)?24+t[i]:16+t[s]:(i=e>>>8)?8+t[i]:t[e]}}(),pe.prototype.push=function(t){this.length===this.size?this.start=this.start+1&this.size-1:this.length++,this.data[this.end]=t,this.end=this.end+1&this.size-1},pe.prototype.shift=function(){if(this.length){var t=this.data[this.start];return this.start=this.start+1&this.size-1,this.length--,t}},pe.prototype.shift_block=function(t){var e=new Float32Array(t);t>this.length&&(t=this.length);var i=this.start+t,s=this.data.subarray(this.start,i);return e.set(s),i>=this.size&&(i-=this.size,e.set(this.data.subarray(0,i),s.length)),this.start=i,this.length-=t,e},pe.prototype.peek=function(){return this.length?this.data[this.start]:void 0},pe.prototype.clear=function(){this.start=0,this.end=0,this.length=0},le.prototype.add=function(t){this.data[this.index]=t,this.index=(this.index+1)%this.size},le.prototype.toArray=function(){return[].slice.call(this.data,this.index).concat([].slice.call(this.data,0,this.index))},le.prototype.clear=function(){this.data=[],this.index=0},le.prototype.set=function(t){this.data=t,this.index=0},_e.Bitmap=function(t){"number"==typeof t?this.view=new Uint8Array(t+7>>3):t instanceof ArrayBuffer?this.view=new Uint8Array(t):console.assert(!1)},_e.Bitmap.prototype.set=function(t,e){const i=t>>3,s=1<<(7&t);this.view[i]=e?this.view[i]|s:this.view[i]&~s},_e.Bitmap.prototype.get=function(t){const e=7&t,i=t>>3;return this.view[i]>>e&1},_e.Bitmap.prototype.get_buffer=function(){return this.view.buffer},ge.prototype.get_state=function(){return[this.channel_page,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]},ge.prototype.set_state=function(t){this.channel_page=t[0],this.channel_pagehi=t[1],this.channel_addr=t[2],this.channel_addr_init=t[3],this.channel_count=t[4],this.channel_count_init=t[5],this.channel_mask=t[6],this.channel_mode=t[7],this.lsb_msb_flipflop=t[8]},ge.prototype.port_count_write=function(t,e){re("count write ["+t+"] = "+de(e),16),this.channel_count[t]=this.flipflop_get(this.channel_count[t],e,!1),this.channel_count_init[t]=this.flipflop_get(this.channel_count_init[t],e,!0)},ge.prototype.port_count_read=function(t){return re("count read ["+t+"] -> "+de(this.channel_count[t]),16),this.flipflop_read(this.channel_count[t])},ge.prototype.port_addr_write=function(t,e){re("addr write ["+t+"] = "+de(e),16),this.channel_addr[t]=this.flipflop_get(this.channel_addr[t],e,!1),this.channel_addr_init[t]=this.flipflop_get(this.channel_addr_init[t],e,!0)},ge.prototype.port_addr_read=function(t){return re("addr read ["+t+"] -> "+de(this.channel_addr[t]),16),this.flipflop_read(this.channel_addr[t])},ge.prototype.port_pagehi_write=function(t,e){re("pagehi write ["+t+"] = "+de(e),16),this.channel_pagehi[t]=e},ge.prototype.port_pagehi_read=function(t){return re("pagehi read ["+t+"]",16),this.channel_pagehi[t]},ge.prototype.port_page_write=function(t,e){re("page write ["+t+"] = "+de(e),16),this.channel_page[t]=e},ge.prototype.port_page_read=function(t){return re("page read ["+t+"]",16),this.channel_page[t]},ge.prototype.port_singlemask_write=function(t,e){var i=(3&e)+t,s=4&e?1:0;re("singlechannel mask write ["+i+"] = "+s,16),this.update_mask(i,s)},ge.prototype.port_multimask_write=function(t,e){re("multichannel mask write: "+de(e),16);for(var i=0;i<4;i++)this.update_mask(t+i,e&1<<i)},ge.prototype.port_multimask_read=function(t){var e=0;return e|=this.channel_mask[t+0],e|=this.channel_mask[t+1]<<1,e|=this.channel_mask[t+2]<<2,e|=this.channel_mask[t+3]<<3,re("multichannel mask read: "+de(e),16),e},ge.prototype.port_mode_write=function(t,e){var i=(3&e)+t;re("mode write ["+i+"] = "+de(e),16),this.channel_mode[i]=e},ge.prototype.portC_write=function(t){re("flipflop reset",16),this.lsb_msb_flipflop=0},ge.prototype.on_unmask=function(t,e){this.unmask_listeners.push({fn:t,this_value:e})},ge.prototype.update_mask=function(t,e){if(this.channel_mask[t]!==e&&(this.channel_mask[t]=e,!e)){re("firing on_unmask("+t+")",16);for(var i=0;i<this.unmask_listeners.length;i++)this.unmask_listeners[i].fn.call(this.unmask_listeners[i].this_value,t)}},ge.prototype.do_read=function(t,e,i,s,r){var a=this.count_get_8bit(s),n=this.address_get_8bit(s);if(re("DMA write channel "+s,16),re("to "+de(n)+" len "+de(a),16),i<a&&re("DMA should read more than provided: "+de(i)+" "+de(a),16),e+a>t.byteLength)re("DMA read outside of buffer",16),r(!0);else{var o=this.cpu;this.channel_addr[s]+=a,t.get(e,a,(function(t){o.write_blob(t,n),r(!1)}))}},ge.prototype.do_write=function(t,e,i,s,r){var a=this.channel_count[s]+1&65535,n=s>=5?2:1,o=a*n,h=this.address_get_8bit(s),_=!1,d=!1,c=16&this.channel_mode[s];re("DMA write channel "+s,16),re("to "+de(h)+" len "+de(o),16),i<o?(re("DMA should read more than provided",16),a=Math.floor(i/n),o=a*n,_=!0):i>o&&(re("DMA attempted to read more than provided",16),d=!0),e+o>t.byteLength?(re("DMA write outside of buffer",16),r(!0)):(this.channel_addr[s]+=a,this.channel_count[s]-=a,!_&&c&&(re("DMA autoinit",16),this.channel_addr[s]=this.channel_addr_init[s],this.channel_count[s]=this.channel_count_init[s]),t.set(e,this.cpu.mem8.subarray(h,h+o),(()=>{d&&c?(re("DMA continuing from start",16),this.do_write(t,e+o,i-o,s,r)):r(!1)})))},ge.prototype.address_get_8bit=function(t){var e=this.channel_addr[t];return t>=5&&(e<<=1),e&=65535,e|=this.channel_page[t]<<16,e|=this.channel_pagehi[t]<<24},ge.prototype.count_get_8bit=function(t){var e=this.channel_count[t]+1;return t>=5&&(e*=2),e},ge.prototype.flipflop_get=function(t,e,i){return i||(this.lsb_msb_flipflop^=1),this.lsb_msb_flipflop?-256&t|e:-65281&t|e<<8},ge.prototype.flipflop_read=function(t){return this.lsb_msb_flipflop^=1,this.lsb_msb_flipflop?255&t:t>>8&255};var be=0,ye=1,ve=2,we=3,ke=4,xe=5,Ae=6,qe=7,Ie=8,Ce=9,ze=10,Oe=11,Re=12,Le=13,Ee=15,Pe=16,Te=18,De=20,Ue=21,Ge=22,Se=23,Me=24,Fe=25,Ve=26,Be=27,Ne=36,We=48,je=49,Ke=50,Xe=52,He=53,Ye=56,Qe=57,Je=61,Ze=91,$e=92,ti=93,ei=95;function ii(t){this.cpu=t,this.cmos_index=0,this.cmos_data=new Uint8Array(128),this.rtc_time=Date.now(),this.last_update=this.rtc_time,this.next_interrupt=0,this.next_interrupt_alarm=0,this.periodic_interrupt=!1,this.periodic_interrupt_time=.9765625,this.cmos_a=38,this.cmos_b=2,this.cmos_c=0,this.nmi_disabled=0,t.io.register_write(112,this,(function(t){this.cmos_index=127&t,this.nmi_disabled=t>>7})),t.io.register_write(113,this,this.cmos_port_write),t.io.register_read(113,this,this.cmos_port_read)}function si(t,e,i){if(this.io=t.io,this.cpu=t,this.dma=t.devices.dma,this.bytes_expecting=0,this.receiving_command=new Uint8Array(10),this.receiving_index=0,this.next_command=null,this.response_data=new Uint8Array(10),this.response_index=0,this.response_length=0,this.floppy_size=0,this.fda_image=e,this.fdb_image=i,this.status_reg0=0,this.status_reg1=0,this.status_reg2=0,this.drive=0,this.last_cylinder=0,this.last_head=0,this.last_sector=1,this.dor=0,e){this.floppy_size=e.byteLength;var s,r,a,n={160:{type:1,tracks:40,sectors:8,heads:1},180:{type:1,tracks:40,sectors:9,heads:1},200:{type:1,tracks:40,sectors:10,heads:1},320:{type:1,tracks:40,sectors:8,heads:2},360:{type:1,tracks:40,sectors:9,heads:2},400:{type:1,tracks:40,sectors:10,heads:2},720:{type:3,tracks:80,sectors:9,heads:2},1200:{type:2,tracks:80,sectors:15,heads:2},1440:{type:4,tracks:80,sectors:18,heads:2},1722:{type:5,tracks:82,sectors:21,heads:2},2880:{type:5,tracks:80,sectors:36,heads:2},0:{type:1,tracks:1,sectors:1,heads:1}}[this.floppy_size>>10];if(!n||0!=(1023&this.floppy_size)&&512!==this.floppy_size)throw"Unknown floppy size: "+de(e.byteLength);t.devices.rtc.cmos_write(16,n.type<<4),r=n.sectors,a=n.heads,s=n.tracks,this.sectors_per_track=r,this.number_of_heads=a,this.number_of_cylinders=s}else t.devices.rtc.cmos_write(16,64),this.sectors_per_track=0,this.number_of_heads=0,this.number_of_cylinders=0,this.floppy_size=0;this.io.register_read(1008,this,this.port3F0_read),this.io.register_read(1010,this,this.port3F2_read),this.io.register_read(1012,this,this.port3F4_read),this.io.register_read(1013,this,this.port3F5_read),this.io.register_read(1015,this,this.port3F7_read),this.io.register_write(1010,this,this.port3F2_write),this.io.register_write(1013,this,this.port3F5_write)}ii.prototype.get_state=function(){var t=[];return t[0]=this.cmos_index,t[1]=this.cmos_data,t[2]=this.rtc_time,t[3]=this.last_update,t[4]=this.next_interrupt,t[5]=this.next_interrupt_alarm,t[6]=this.periodic_interrupt,t[7]=this.periodic_interrupt_time,t[8]=this.cmos_a,t[9]=this.cmos_b,t[10]=this.cmos_c,t[11]=this.nmi_disabled,t},ii.prototype.set_state=function(t){this.cmos_index=t[0],this.cmos_data=t[1],this.rtc_time=t[2],this.last_update=t[3],this.next_interrupt=t[4],this.next_interrupt_alarm=t[5],this.periodic_interrupt=t[6],this.periodic_interrupt_time=t[7],this.cmos_a=t[8],this.cmos_b=t[9],this.cmos_c=t[10],this.nmi_disabled=t[11]},ii.prototype.timer=function(t,e){t=Date.now(),this.rtc_time+=t-this.last_update,this.last_update=t,this.periodic_interrupt&&this.next_interrupt<t?(this.cpu.device_raise_irq(8),this.cmos_c|=192,this.next_interrupt+=this.periodic_interrupt_time*Math.ceil((t-this.next_interrupt)/this.periodic_interrupt_time)):this.next_interrupt_alarm&&this.next_interrupt_alarm<t&&(this.cpu.device_raise_irq(8),this.cmos_c|=160,this.next_interrupt_alarm=0);let i=100;return this.periodic_interrupt&&this.next_interrupt&&(i=Math.min(i,Math.max(0,this.next_interrupt-t))),this.next_interrupt_alarm&&(i=Math.min(i,Math.max(0,this.next_interrupt_alarm-t))),i},ii.prototype.bcd_pack=function(t){for(var e,i=0,s=0;t;)s|=(e=t%10)<<4*i,i++,t=(t-e)/10;return s},ii.prototype.bcd_unpack=function(t){const e=15&t,i=t>>4&15;return ne(t<256),ne(e<10),ne(i<10),e+10*i},ii.prototype.encode_time=function(t){return 4&this.cmos_b?t:this.bcd_pack(t)},ii.prototype.decode_time=function(t){return 4&this.cmos_b?t:this.bcd_unpack(t)},ii.prototype.cmos_port_read=function(){var t=this.cmos_index;switch(t){case 0:return this.encode_time(new Date(this.rtc_time).getUTCSeconds());case 2:return this.encode_time(new Date(this.rtc_time).getUTCMinutes());case 4:return this.encode_time(new Date(this.rtc_time).getUTCHours());case 7:return this.encode_time(new Date(this.rtc_time).getUTCDate());case 8:return this.encode_time(new Date(this.rtc_time).getUTCMonth()+1);case 9:return this.encode_time(new Date(this.rtc_time).getUTCFullYear()%100);case 10:return this.cmos_a;case 11:return this.cmos_b;case 12:this.cpu.device_lower_irq(8),re("cmos reg C read",65536);var e=this.cmos_c;return this.cmos_c&=-241,e;case 13:return 0;case 50:return this.encode_time(new Date(this.rtc_time).getUTCFullYear()/100|0);default:return re("cmos read from index "+de(t),65536),this.cmos_data[this.cmos_index]}},ii.prototype.cmos_port_write=function(t){switch(this.cmos_index){case 10:this.cmos_a=127&t,this.periodic_interrupt_time=1e3/(32768>>(15&this.cmos_a)-1),re("Periodic interrupt, a="+de(this.cmos_a,2)+" t="+this.periodic_interrupt_time,65536);break;case 11:if(this.cmos_b=t,64&this.cmos_b&&(this.next_interrupt=Date.now()),32&this.cmos_b){const t=new Date,e=this.decode_time(this.cmos_data[1]),i=this.decode_time(this.cmos_data[3]),s=this.decode_time(this.cmos_data[5]),r=new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),s,i,e));re("RTC alarm scheduled for "+r+" hh:mm:ss="+s+":"+i+":"+e+" ms_from_now="+(r-t),65536),this.next_interrupt_alarm=+r}16&this.cmos_b&&re("Unimplemented: updated interrupt",65536),re("cmos b="+de(this.cmos_b,2),65536);break;case 1:case 3:case 5:this.cmos_write(this.cmos_index,t);break;default:re("cmos write index "+de(this.cmos_index)+": "+de(t),65536)}this.periodic_interrupt=64==(64&this.cmos_b)&&(15&this.cmos_a)>0},ii.prototype.cmos_read=function(t){return ne(t<128),this.cmos_data[t]},ii.prototype.cmos_write=function(t,e){re("cmos "+de(t)+" <- "+de(e),65536),ne(t<128),this.cmos_data[t]=e},si.prototype.get_state=function(){var t=[];return t[0]=this.bytes_expecting,t[1]=this.receiving_command,t[2]=this.receiving_index,t[4]=this.response_data,t[5]=this.response_index,t[6]=this.response_length,t[7]=this.floppy_size,t[8]=this.status_reg0,t[9]=this.status_reg1,t[10]=this.status_reg2,t[11]=this.drive,t[12]=this.last_cylinder,t[13]=this.last_head,t[14]=this.last_sector,t[15]=this.dor,t[16]=this.sectors_per_track,t[17]=this.number_of_heads,t[18]=this.number_of_cylinders,t},si.prototype.set_state=function(t){this.bytes_expecting=t[0],this.receiving_command=t[1],this.receiving_index=t[2],this.next_command=t[3],this.response_data=t[4],this.response_index=t[5],this.response_length=t[6],this.floppy_size=t[7],this.status_reg0=t[8],this.status_reg1=t[9],this.status_reg2=t[10],this.drive=t[11],this.last_cylinder=t[12],this.last_head=t[13],this.last_sector=t[14],this.dor=t[15],this.sectors_per_track=t[16],this.number_of_heads=t[17],this.number_of_cylinders=t[18]},si.prototype.port3F0_read=function(){return re("3F0 read",8192),0},si.prototype.port3F4_read=function(){re("3F4 read",8192);var t=128;return this.response_index<this.response_length&&(t|=80),0==(8&this.dor)&&(t|=32),t},si.prototype.port3F7_read=function(){return re("3F7 read",8192),0},si.prototype.port3F5_read=function(){return this.response_index<this.response_length?(re("3F5 read: "+this.response_data[this.response_index],8192),this.cpu.device_lower_irq(6),this.response_data[this.response_index++]):(re("3F5 read, empty",8192),255)},si.prototype.port3F5_write=function(t){if(this.fda_image)if(re("3F5 write "+de(t),8192),this.bytes_expecting>0){if(this.receiving_command[this.receiving_index++]=t,this.bytes_expecting--,0===this.bytes_expecting){for(var e="3F5 command received: ",i=0;i<this.receiving_index;i++)e+=de(this.receiving_command[i])+" ";re(e,8192),this.next_command.call(this,this.receiving_command)}}else{switch(t){case 3:this.next_command=this.fix_drive_data,this.bytes_expecting=2;break;case 4:this.next_command=this.check_drive_status,this.bytes_expecting=1;break;case 5:case 197:this.next_command=function(t){this.do_sector(!0,t)},this.bytes_expecting=8;break;case 230:this.next_command=function(t){this.do_sector(!1,t)},this.bytes_expecting=8;break;case 7:this.next_command=this.calibrate,this.bytes_expecting=1;break;case 8:this.check_interrupt_status();break;case 74:this.next_command=this.read_sector_id,this.bytes_expecting=1;break;case 15:this.bytes_expecting=2,this.next_command=this.seek;break;case 14:re("dump registers",8192),this.response_data[0]=128,this.response_index=0,this.response_length=1,this.bytes_expecting=0;break;default:ne(!1,"Unimplemented floppy command call "+de(t))}this.receiving_index=0}},si.prototype.port3F2_read=function(){return re("read 3F2: DOR",8192),this.dor},si.prototype.port3F2_write=function(t){4==(4&t)&&0==(4&this.dor)&&this.cpu.device_raise_irq(6),re("start motors: "+de(t>>4),8192),re("enable dma: "+!!(8&t),8192),re("reset fdc: "+!!(4&t),8192),re("drive select: "+(3&t),8192),re("DOR = "+de(t),8192),this.dor=t},si.prototype.check_drive_status=function(t){re("check drive status",8192),this.response_index=0,this.response_length=1,this.response_data[0]=32},si.prototype.seek=function(t){re("seek",8192),ne(0==(3&t[0]),"Unhandled seek drive"),this.last_cylinder=t[1],this.last_head=t[0]>>2&1,this.raise_irq()},si.prototype.calibrate=function(t){re("floppy calibrate",8192),this.raise_irq()},si.prototype.check_interrupt_status=function(){re("floppy check interrupt status",8192),this.response_index=0,this.response_length=2,this.response_data[0]=32,this.response_data[1]=this.last_cylinder},si.prototype.do_sector=function(t,e){var i=e[2],s=e[1],r=e[3],a=128<<e[4],n=e[5]-e[3]+1,o=((i+this.number_of_heads*s)*this.sectors_per_track+r-1)*a;re("Floppy "+(t?"Write":"Read"),8192),re("from "+de(o)+" length "+de(n*a),8192),re(s+" / "+i+" / "+r,8192),e[4]||re("FDC: sector count is zero, use data length instead",8192),this.fda_image&&(t?this.dma.do_write(this.fda_image,o,n*a,2,this.done.bind(this,e,s,i,r)):this.dma.do_read(this.fda_image,o,n*a,2,this.done.bind(this,e,s,i,r)))},si.prototype.done=function(t,e,i,s,r){r||(++s>this.sectors_per_track&&(s=1,++i>=this.number_of_heads&&(i=0,e++)),this.last_cylinder=e,this.last_head=i,this.last_sector=s,this.response_index=0,this.response_length=7,this.response_data[0]=i<<2|32,this.response_data[1]=0,this.response_data[2]=0,this.response_data[3]=e,this.response_data[4]=i,this.response_data[5]=s,this.response_data[6]=t[4],this.raise_irq())},si.prototype.fix_drive_data=function(t){re("floppy fix drive data "+t,8192)},si.prototype.read_sector_id=function(t){re("floppy read sector id "+t,8192),this.response_index=0,this.response_length=7,this.response_data[0]=0,this.response_data[1]=0,this.response_data[2]=0,this.response_data[3]=0,this.response_data[4]=0,this.response_data[5]=0,this.response_data[6]=0,this.raise_irq()},si.prototype.raise_irq=function(){8&this.dor&&this.cpu.device_raise_irq(6)};var ri=4275044352,ai=1e8,ni=1e4,oi=0,hi=16,_i=32816,di=4;function ci(t){var e=this,i=!1,s=Date.now(),r=0,a=!1,n=0,o=new Int32Array(8),_=new Int32Array(8),d=new Int32Array(8),c=0;function u(){return i?1e4*(Date.now()-s)+r|0:r}this.legacy_mode=!1,this.timer=function(s){if(!i)return 100;for(var r,a,h,p=u()>>>0,l=0;l<4;l++)r=o[l<<1],a=_[l<<1]>>>0,(c<=p?a>c&&a<=p:a>c||a<=p)&&(h=4&r,2&r?(h=h&&!(n&1<<l),n|=1<<l):n&=~(1<<l),8&r&&(_[l<<1]+=d[l<<1]),h&&(e.legacy_mode&&0===l||e.legacy_mode,t.device_raise_irq(0)));return c=p,100},t.io.mmap_register(4275044352,16384,(function(t){switch(dbg_log("Read "+h(t,4)+" (ctr="+h(u()>>>0)+")",LOG_HPET),t){case 0:return 99073;case 4:return 1e8;case 16:return e.legacy_mode<<1|i;case 240:return u();case 244:return 0}var s=t>>2&7,r=t-256>>5;if(t<256||r>=4||s>5)return dbg_log("Read reserved address: "+h(t),LOG_HPET),0;switch(dbg_log("Read counter: addr="+h(t)+" counter="+h(r,2)+" reg="+h(s),LOG_HPET),s){case 0:return-32817&o[r<<1]|16;case 1:return o[r<<1|1];case 2:return _[r<<1];case 3:return _[r<<1|1];case 4:case 5:return 0}}),(function(t,c){switch(dbg_log("Write "+h(t,4)+": "+h(c,2),LOG_HPET),t){case 16:return dbg_log("conf: enabled="+(1&c)+" legacy="+(c>>1&1),LOG_HPET),1&(i^c)&&(1&c?s=Date.now():r=u()),i=1==(1&c),void(e.legacy_mode=2==(2&c));case 32:return void(n&=~c);case 240:return void(r=c);case 244:return}var p=t>>2&7,l=t-256>>5;if(t<256||l>=4||p>2)return void dbg_log("Write reserved address: "+h(t)+" data="+h(c),LOG_HPET);switch(dbg_log("Write counter: addr="+h(t)+" counter="+h(l,2)+" reg="+h(p)+" data="+h(c,2),LOG_HPET),p){case 0:o[l<<1]=c;break;case 1:break;case 2:a?(d[l<<1]=c,a=!1,dbg_log("Accumulator acc="+h(c>>>0,8)+" ctr="+h(l,2),LOG_HPET)):(_[l<<1]=c,64&o[l<<1]&&(a=!0,o[l<<1]&=-65));break;case 3:_[l<<1|1]=c}}))}var ui=2048,pi=512;function li(t,e,i,s,r,a){this.master=new fi(this,t,e,s,r,0,a),this.slave=new fi(this,t,i,!1,r,1,a),this.current_interface=this.master,this.cpu=t,0===r?(this.ata_port=496,this.irq=14,this.pci_id=240):1===r?(this.ata_port=368,this.irq=15,this.pci_id=248):ne(!1,"IDE device with nr "+r+" ignored"),this.ata_port_high=516|this.ata_port,this.master_port=46080,this.pci_space=[134,128,16,112,5,0,160,2,0,128,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,255&this.master_port|1,this.master_port>>8,0,0,0,0,0,0,0,0,0,0,67,16,212,130,0,0,0,0,0,0,0,0,0,0,0,0,this.irq,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.pci_bars=[{size:8},{size:4},void 0,void 0,{size:16}],this.name="ide"+r,this.device_control=2,t.io.register_read(7|this.ata_port,this,(function(){return re("lower irq",32768),this.cpu.device_lower_irq(this.irq),this.read_status()})),t.io.register_read(2|this.ata_port_high,this,this.read_status),t.io.register_write(2|this.ata_port_high,this,this.write_control),t.io.register_read(0|this.ata_port,this,(function(){return this.current_interface.read_data(1)}),(function(){return this.current_interface.read_data(2)}),(function(){return this.current_interface.read_data(4)})),t.io.register_read(1|this.ata_port,this,(function(){return re("Read error: "+de(255&this.current_interface.error)+" slave="+(this.current_interface===this.slave),32768),255&this.current_interface.error})),t.io.register_read(2|this.ata_port,this,(function(){return re("Read bytecount: "+de(255&this.current_interface.bytecount),32768),255&this.current_interface.bytecount})),t.io.register_read(3|this.ata_port,this,(function(){return re("Read sector: "+de(255&this.current_interface.sector),32768),255&this.current_interface.sector})),t.io.register_read(4|this.ata_port,this,(function(){return re("Read 1F4: "+de(255&this.current_interface.cylinder_low),32768),255&this.current_interface.cylinder_low})),t.io.register_read(5|this.ata_port,this,(function(){return re("Read 1F5: "+de(255&this.current_interface.cylinder_high),32768),255&this.current_interface.cylinder_high})),t.io.register_read(6|this.ata_port,this,(function(){return re("Read 1F6",32768),255&this.current_interface.drive_head})),t.io.register_write(0|this.ata_port,this,(function(t){this.current_interface.write_data_port8(t)}),(function(t){this.current_interface.write_data_port16(t)}),(function(t){this.current_interface.write_data_port32(t)})),t.io.register_write(1|this.ata_port,this,(function(t){re("1F1/lba_count: "+de(t),32768),this.master.lba_count=65535&(this.master.lba_count<<8|t),this.slave.lba_count=65535&(this.slave.lba_count<<8|t)})),t.io.register_write(2|this.ata_port,this,(function(t){re("1F2/bytecount: "+de(t),32768),this.master.bytecount=65535&(this.master.bytecount<<8|t),this.slave.bytecount=65535&(this.slave.bytecount<<8|t)})),t.io.register_write(3|this.ata_port,this,(function(t){re("1F3/sector: "+de(t),32768),this.master.sector=65535&(this.master.sector<<8|t),this.slave.sector=65535&(this.slave.sector<<8|t)})),t.io.register_write(4|this.ata_port,this,(function(t){re("1F4/sector low: "+de(t),32768),this.master.cylinder_low=65535&(this.master.cylinder_low<<8|t),this.slave.cylinder_low=65535&(this.slave.cylinder_low<<8|t)})),t.io.register_write(5|this.ata_port,this,(function(t){re("1F5/sector high: "+de(t),32768),this.master.cylinder_high=65535&(this.master.cylinder_high<<8|t),this.slave.cylinder_high=65535&(this.slave.cylinder_high<<8|t)})),t.io.register_write(6|this.ata_port,this,(function(t){var e=16&t;re("1F6/drive: "+de(t,2),32768),e?(re("Slave",32768),this.current_interface=this.slave):this.current_interface=this.master,this.master.drive_head=t,this.slave.drive_head=t,this.master.is_lba=this.slave.is_lba=t>>6&1,this.master.head=this.slave.head=15&t})),this.prdt_addr=0,this.dma_status=0,this.dma_command=0,t.io.register_write(7|this.ata_port,this,(function(t){re("lower irq",32768),this.cpu.device_lower_irq(this.irq),this.current_interface.ata_command(t)})),t.io.register_read(4|this.master_port,this,void 0,void 0,this.dma_read_addr),t.io.register_write(4|this.master_port,this,void 0,void 0,this.dma_set_addr),t.io.register_read(this.master_port,this,this.dma_read_command8,void 0,this.dma_read_command),t.io.register_write(this.master_port,this,this.dma_write_command8,void 0,this.dma_write_command),t.io.register_read(2|this.master_port,this,this.dma_read_status),t.io.register_write(2|this.master_port,this,this.dma_write_status),t.io.register_read(8|this.master_port,this,(function(){return re("DMA read 0x8",32768),0})),t.io.register_read(10|this.master_port,this,(function(){return re("DMA read 0xA",32768),0})),t.devices.pci.register_device(this),Object.seal(this)}function fi(t,e,i,s,r,a,n){if(this.device=t,this.bus=n,this.nr=r,this.cpu=e,this.buffer=i,this.sector_size=s?2048:512,this.is_atapi=s,this.sector_count=0,this.head_count=0,this.sectors_per_track=0,this.cylinder_count=0,this.buffer){this.sector_count=this.buffer.byteLength/this.sector_size,this.sector_count!==(0|this.sector_count)&&(re("Warning: Disk size not aligned with sector size",32768),this.sector_count=Math.ceil(this.sector_count)),s?(this.head_count=1,this.sectors_per_track=0):(this.head_count=16,this.sectors_per_track=63),this.cylinder_count=this.sector_count/this.head_count/this.sectors_per_track,this.cylinder_count!==(0|this.cylinder_count)&&(re("Warning: Rounding up cylinder count. Choose different head number",32768),this.cylinder_count=Math.floor(this.cylinder_count));var o=e.devices.rtc;o.cmos_write(57,o.cmos_read(57)|1<<4*this.nr),o.cmos_write(18,15&o.cmos_read(18)|240);o.cmos_write(27,255&this.cylinder_count),o.cmos_write(28,this.cylinder_count>>8&255),o.cmos_write(29,255&this.head_count),o.cmos_write(30,255),o.cmos_write(31,255),o.cmos_write(32,200),o.cmos_write(33,255&this.cylinder_count),o.cmos_write(34,this.cylinder_count>>8&255),o.cmos_write(35,255&this.sectors_per_track)}this.stats={sectors_read:0,sectors_written:0,bytes_read:0,bytes_written:0,loading:!1},this.buffer=i,this.is_lba=0,this.bytecount=0,this.sector=0,this.lba_count=0,this.cylinder_low=0,this.cylinder_high=0,this.head=0,this.drive_head=0,this.status=80,this.sectors_per_drq=128,this.error=0,this.data_pointer=0,this.data=new Uint8Array(65536),this.data16=new Uint16Array(this.data.buffer),this.data32=new Int32Array(this.data.buffer),this.data_length=0,this.data_end=0,this.current_command=-1,this.current_atapi_command=-1,this.write_dest=0,this.last_io_id=0,this.in_progress_io_ids=new Set,this.cancelled_io_ids=new Set,Object.seal(this)}function mi(t){this.ports=[],this.cpu=t;for(var e=0;e<65536;e++)this.ports[e]=this.create_empty_entry();var i=t.memory_size[0];for(e=0;e<<17<i;e++)t.memory_map_read8[e]=t.memory_map_write8[e]=void 0,t.memory_map_read32[e]=t.memory_map_write32[e]=void 0;this.mmap_register(i,4294967296-i,(function(t){return re("Read from unmapped memory space, addr="+de(t>>>0,8),32),255}),(function(t,e){re("Write to unmapped memory space, addr="+de(t>>>0,8)+" value="+de(e,2),32)}),(function(t){return re("Read from unmapped memory space, addr="+de(t>>>0,8),32),-1}),(function(t,e){re("Write to unmapped memory space, addr="+de(t>>>0,8)+" value="+de(e>>>0,8),32)}))}li.prototype.read_status=function(){if(this.current_interface.buffer){var t=this.current_interface.status;return re("ATA read status: "+de(t,2),32768),t}return 0},li.prototype.write_control=function(t){re("set device control: "+de(t,2)+" interrupts "+(2&t?"disabled":"enabled"),32768),4&t&&(re("Reset via control port",32768),this.cpu.device_lower_irq(this.irq),this.master.device_reset(),this.slave.device_reset()),this.device_control=t},li.prototype.dma_read_addr=function(){return re("dma get address: "+de(this.prdt_addr,8),32768),this.prdt_addr},li.prototype.dma_set_addr=function(t){re("dma set address: "+de(t,8),32768),this.prdt_addr=t},li.prototype.dma_read_status=function(){return re("DMA read status: "+de(this.dma_status),32768),this.dma_status},li.prototype.dma_write_status=function(t){re("DMA set status: "+de(t),32768),this.dma_status&=~(6&t)},li.prototype.dma_read_command=function(){return this.dma_read_command8()|this.dma_read_status()<<16},li.prototype.dma_read_command8=function(){return re("DMA read command: "+de(this.dma_command),32768),this.dma_command},li.prototype.dma_write_command=function(t){re("DMA write command: "+de(t),32768),this.dma_write_command8(255&t),this.dma_write_status(t>>16&255)},li.prototype.dma_write_command8=function(t){re("DMA write command8: "+de(t),32768);let e=this.dma_command;if(this.dma_command=9&t,(1&e)!=(1&t))if(0!=(1&t))switch(this.dma_status|=1,this.current_interface.current_command){case 37:case 200:this.current_interface.do_ata_read_sectors_dma();break;case 202:case 53:this.current_interface.do_ata_write_sectors_dma();break;case 160:this.current_interface.do_atapi_dma();break;default:re("Spurious dma command write, current command: "+de(this.current_interface.current_command),32768),ne(!1)}else this.dma_status&=-2},li.prototype.push_irq=function(){0==(2&this.device_control)&&(re("push irq",32768),this.dma_status|=4,this.cpu.device_raise_irq(this.irq))},li.prototype.get_state=function(){var t=[];return t[0]=this.master,t[1]=this.slave,t[2]=this.ata_port,t[3]=this.irq,t[4]=this.pci_id,t[5]=this.ata_port_high,t[6]=this.master_port,t[7]=this.name,t[8]=this.device_control,t[9]=this.prdt_addr,t[10]=this.dma_status,t[11]=this.current_interface===this.master,t[12]=this.dma_command,t},li.prototype.set_state=function(t){this.master.set_state(t[0]),this.slave.set_state(t[1]),this.ata_port=t[2],this.irq=t[3],this.pci_id=t[4],this.ata_port_high=t[5],this.master_port=t[6],this.name=t[7],this.device_control=t[8],this.prdt_addr=t[9],this.dma_status=t[10],this.current_interface=t[11]?this.master:this.slave,this.dma_command=t[12]},fi.prototype.device_reset=function(){this.is_atapi?(this.status=0,this.bytecount=1,this.error=1,this.sector=1,this.cylinder_low=20,this.cylinder_high=235):(this.status=81,this.bytecount=1,this.error=1,this.sector=1,this.cylinder_low=0,this.cylinder_high=0),this.cancel_io_operations()},fi.prototype.push_irq=function(){this.device.push_irq()},fi.prototype.ata_command=function(t){if(re("ATA Command: "+de(t)+" slave="+(this.drive_head>>4&1),32768),!this.buffer)return re("abort: No buffer",32768),this.error=4,this.status=65,void this.push_irq();switch(this.current_command=t,this.error=0,t){case 8:re("ATA device reset",32768),this.data_pointer=0,this.data_end=0,this.data_length=0,this.device_reset(),this.push_irq();break;case 16:this.status=80,this.cylinder_low=0,this.push_irq();break;case 248:this.status=80;var e=this.sector_count-1;this.sector=255&e,this.cylinder_low=e>>8&255,this.cylinder_high=e>>16&255,this.drive_head=240&this.drive_head|e>>24&15,this.push_irq();break;case 39:this.status=80;e=this.sector_count-1;this.sector=255&e,this.cylinder_low=e>>8&255,this.cylinder_high=e>>16&255,this.sector|=e>>24<<8&65280,this.push_irq();break;case 32:case 36:case 41:case 196:this.ata_read_sectors(t);break;case 48:case 52:case 57:case 197:this.ata_write_sectors(t);break;case 144:this.push_irq(),this.error=257,this.status=80;break;case 145:case 222:this.status=80,this.push_irq();break;case 160:this.is_atapi&&(this.status=88,this.data_allocate(12),this.data_end=12,this.bytecount=1,this.push_irq());break;case 161:re("ATA identify packet device",32768),this.is_atapi?(this.create_identify_packet(),this.status=88,this.cylinder_low=20,this.cylinder_high=235,this.push_irq()):(this.status=65,this.push_irq());break;case 198:re("Logical sectors per DRQ Block: "+de(255&this.bytecount),32768),this.sectors_per_drq=255&this.bytecount,this.status=80,this.push_irq();break;case 37:case 200:this.ata_read_sectors_dma(t);break;case 53:case 202:this.ata_write_sectors_dma(t);break;case 64:re("read verify sectors",32768),this.status=80,this.push_irq();break;case 218:re("Unimplemented: get media status",32768),this.status=65,this.error=4,this.push_irq();break;case 224:re("ATA standby immediate",32768),this.status=80,this.push_irq();break;case 225:re("ATA idle immediate",32768),this.status=80,this.push_irq();break;case 231:re("ATA flush cache",32768),this.status=80,this.push_irq();break;case 236:if(re("ATA identify device",32768),this.is_atapi)return this.status=65,this.error=4,void this.push_irq();this.create_identify_packet(),this.status=88,this.push_irq();break;case 234:re("flush cache ext",32768),this.status=80,this.push_irq();break;case 239:re("set features: "+de(255&this.bytecount),32768),this.status=80,this.push_irq();break;case 245:re("security freeze lock",32768),this.status=80,this.push_irq();break;case 249:re("Unimplemented: set max address",32768),this.status=65,this.error=4;break;default:ne(!1,"New ATA cmd on 1F7: "+de(t)),this.status=65,this.error=4}},fi.prototype.atapi_handle=function(){switch(re("ATAPI Command: "+de(this.data[0])+" slave="+(this.drive_head>>4&1),32768),this.data_pointer=0,this.current_atapi_command=this.data[0],this.current_atapi_command){case 0:re("test unit ready",32768),this.data_allocate(0),this.data_end=this.data_length,this.status=80;break;case 3:this.data_allocate(this.data[4]),this.data_end=this.data_length,this.status=88,this.data[0]=240,this.data[2]=5,this.data[7]=8;break;case 18:var t=this.data[4];this.status=88,re("inquiry: "+de(this.data[1],2)+" length="+t,32768),this.data.set([5,128,1,49,31,0,0,0,83,79,78,89,32,32,32,32,67,68,45,82,79,77,32,67,68,85,45,49,48,48,48,32,49,46,49,97]),this.data_end=this.data_length=Math.min(36,t);break;case 26:this.data_allocate(this.data[4]),this.data_end=this.data_length,this.status=88;break;case 30:case 81:this.data_allocate(0),this.data_end=this.data_length,this.status=80;break;case 37:var e=this.sector_count-1;this.data_set(new Uint8Array([e>>24&255,e>>16&255,e>>8&255,255&e,0,0,this.sector_size>>8&255,255&this.sector_size])),this.data_end=this.data_length,this.status=88;break;case 40:1&this.lba_count?this.atapi_read_dma(this.data):this.atapi_read(this.data);break;case 66:t=this.data[8];this.data_allocate(Math.min(8,t)),this.data_end=this.data_length,re("read q subcode: length="+t,32768),this.status=88;break;case 67:t=this.data[8]|this.data[7]<<8;var i=this.data[9]>>6;if(this.data_allocate(t),this.data_end=this.data_length,re("read toc: "+de(i,2)+" length="+t+" "+(2&this.data[1])+" "+de(this.data[6]),32768),0===i){var s=this.sector_count;this.data.set(new Uint8Array([0,18,1,1,0,20,1,0,0,0,0,0,0,22,170,0,s>>24,s>>16&255,s>>8&255,255&s]))}else 1===i?this.data.set(new Uint8Array([0,10,1,1,0,0,0,0,0,0,0,0])):ne(!1,"Unimplemented format: "+i);this.status=88;break;case 70:t=this.data[8]|this.data[7]<<8;t=Math.min(t,32),this.data_allocate(t),this.data_end=this.data_length,this.data[0]=t-4>>24&255,this.data[1]=t-4>>16&255,this.data[2]=t-4>>8&255,this.data[3]=t-4&255,this.data[6]=8,this.data[10]=3,this.status=88;break;case 82:re("Unimplemented ATAPI command: "+de(this.data[0]),32768),this.status=81,this.data_length=0,this.error=80;break;case 90:t=this.data[8]|this.data[7]<<8;var r=this.data[2];re("mode sense: "+de(r)+" length="+t,32768),42===r&&this.data_allocate(Math.min(30,t)),this.data_end=this.data_length,this.status=88;break;case 189:this.data_allocate(this.data[9]|this.data[8]<<8),this.data_end=this.data_length,this.data[5]=1,this.status=88;break;case 74:this.status=81,this.data_length=0,this.error=80,re("Unimplemented ATAPI command: "+de(this.data[0]),32768);break;case 190:re("Unimplemented ATAPI command: "+de(this.data[0]),32768),this.data_allocate(0),this.data_end=this.data_length,this.status=80;break;default:this.status=81,this.data_length=0,this.error=80,re("Unimplemented ATAPI command: "+de(this.data[0]),32768),ne(!1)}this.bytecount=-8&this.bytecount|2,0==(128&this.status)&&this.push_irq(),0==(128&this.status)&&0===this.data_length&&(this.bytecount|=1,this.status&=-9)},fi.prototype.do_write=function(){this.status=80,ne(this.data_length<=this.data.length);var t=this.data.subarray(0,this.data_length);ne(this.data_length%512==0),this.ata_advance(this.current_command,this.data_length/512),this.push_irq(),this.buffer.set(this.write_dest,t,(function(){})),this.report_write(this.data_length)},fi.prototype.atapi_read=function(t){var e=t[2]<<24|t[3]<<16|t[4]<<8|t[5],i=t[7]<<8|t[8],s=t[1],r=i*this.sector_size,a=e*this.sector_size;re("CD read lba="+de(e)+" lbacount="+de(i)+" bytecount="+de(r)+" flags="+de(s),32768),this.data_length=0;var n=this.cylinder_high<<8&65280|255&this.cylinder_low;re(de(this.cylinder_high,2)+" "+de(this.cylinder_low,2),32768),this.cylinder_low=this.cylinder_high=0,65535===n&&n--,n>r&&(n=r),a>=this.buffer.byteLength?(ne(!1,"CD read: Outside of disk end="+de(a+r)+" size="+de(this.buffer.byteLength)),this.status=255,this.push_irq()):0===r?(this.status=80,this.data_pointer=0):(r=Math.min(r,this.buffer.byteLength-a),this.status=208,this.report_read_start(),this.read_buffer(a,r,(t=>{re("cd read: data arrived",32768),this.data_set(t),this.status=88,this.bytecount=-8&this.bytecount|2,this.push_irq(),n&=-4,this.data_end=n,this.data_end>this.data_length&&(this.data_end=this.data_length),this.cylinder_low=255&this.data_end,this.cylinder_high=this.data_end>>8&255,this.report_read_end(r)})))},fi.prototype.atapi_read_dma=function(t){var e=t[2]<<24|t[3]<<16|t[4]<<8|t[5],i=t[7]<<8|t[8],s=t[1],r=i*this.sector_size,a=e*this.sector_size;re("CD read DMA lba="+de(e)+" lbacount="+de(i)+" bytecount="+de(r)+" flags="+de(s),32768),a>=this.buffer.byteLength?(ne(!1,"CD read: Outside of disk end="+de(a+r)+" size="+de(this.buffer.byteLength)),this.status=255,this.push_irq()):(this.status=208,this.report_read_start(),this.read_buffer(a,r,(t=>{re("atapi_read_dma: Data arrived"),this.report_read_end(r),this.status=88,this.bytecount=-8&this.bytecount|2,this.data_set(t),this.do_atapi_dma()})))},fi.prototype.do_atapi_dma=function(){if(0!=(1&this.device.dma_status))if(0!=(8&this.status)){re("atapi dma transfer len="+this.data_length,32768);var t=this.device.prdt_addr,e=0,i=this.data;do{var s=this.cpu.read32s(t),r=this.cpu.read16(t+4),a=128&this.cpu.read8(t+7);if(r||(r=65536),re("dma read dest="+de(s)+" count="+de(r)+" datalen="+de(this.data_length),32768),this.cpu.write_blob(i.subarray(e,Math.min(e+r,this.data_length)),s),t+=8,(e+=r)>=this.data_length&&!a){re("leave early end="+ +a+" offset="+de(e)+" data_length="+de(this.data_length)+" cmd="+de(this.current_command),32768);break}}while(!a);re("end offset="+e,32768),this.status=80,this.device.dma_status&=-2,this.bytecount=-8&this.bytecount|3,this.push_irq()}else re("do_atapi_dma: DRQ not set",32768);else re("do_atapi_dma: Status not set",32768)},fi.prototype.read_data=function(t){if(this.data_pointer<this.data_end){if(ne(this.data_pointer+t-1<this.data_end),ne(this.data_pointer%t==0,de(this.data_pointer)+" "+t),1===t)var e=this.data[this.data_pointer];else if(2===t)e=this.data16[this.data_pointer>>>1];else e=this.data32[this.data_pointer>>>2];this.data_pointer+=t;var i=0==(4095&this.data_end)?4095:255;return 0==(this.data_pointer&i)&&re("Read 1F0: "+de(this.data[this.data_pointer],2)+" cur="+de(this.data_pointer)+" cnt="+de(this.data_length),32768),this.data_pointer>=this.data_end&&this.read_end(),e}return re("Read 1F0: empty",32768),this.data_pointer+=t,0},fi.prototype.read_end=function(){if(re("read_end cmd="+de(this.current_command)+" data_pointer="+de(this.data_pointer)+" end="+de(this.data_end)+" length="+de(this.data_length),32768),160===this.current_command)if(this.data_end===this.data_length)this.status=80,this.bytecount=-8&this.bytecount|3,this.push_irq();else{this.status=88,this.bytecount=-8&this.bytecount|2,this.push_irq();var t=this.cylinder_high<<8&65280|255&this.cylinder_low;this.data_end+t>this.data_length?(this.cylinder_low=this.data_length-this.data_end&255,this.cylinder_high=this.data_length-this.data_end>>8&255,this.data_end=this.data_length):this.data_end+=t,re("data_end="+de(this.data_end),32768)}else if(this.error=0,this.data_pointer>=this.data_length)this.status=80,this.push_irq();else{if(196===this.current_command||41===this.current_command){ne((e=Math.min(this.sectors_per_drq,(this.data_length-this.data_end)/512))%1==0)}else{ne(32===this.current_command||36===this.current_command);var e=1}this.ata_advance(this.current_command,e),this.data_end+=512*e,this.status=88,this.push_irq()}},fi.prototype.write_data_port=function(t,e){if(ne(this.data_pointer%e==0),this.data_pointer>=this.data_end)re("Redundant write to data port: "+de(t)+" count="+de(this.data_end)+" cur="+de(this.data_pointer),32768);else{var i=0==(4095&this.data_end)?4095:255;(0==(this.data_pointer+e&i)||this.data_end<20)&&re("Data port: "+de(t>>>0)+" count="+de(this.data_end)+" cur="+de(this.data_pointer),32768),1===e?this.data[this.data_pointer++]=t:2===e?(this.data16[this.data_pointer>>>1]=t,this.data_pointer+=2):(this.data32[this.data_pointer>>>2]=t,this.data_pointer+=4),ne(this.data_pointer<=this.data_end),this.data_pointer===this.data_end&&this.write_end()}},fi.prototype.write_data_port8=function(t){this.write_data_port(t,1)},fi.prototype.write_data_port16=function(t){this.write_data_port(t,2)},fi.prototype.write_data_port32=function(t){this.write_data_port(t,4)},fi.prototype.write_end=function(){160===this.current_command?this.atapi_handle():(re("write_end data_pointer="+de(this.data_pointer)+" data_length="+de(this.data_length),32768),this.data_pointer>=this.data_length?this.do_write():(ne(48===this.current_command||52===this.current_command||197===this.current_command,"Unexpected command: "+de(this.current_command)),this.status=88,this.data_end+=512,this.push_irq()))},fi.prototype.ata_advance=function(t,e){if(re("Advance sectors="+e+" old_bytecount="+this.bytecount,32768),this.bytecount-=e,36===t||41===t||52===t||57===t||37===t||53===t){var i=e+this.get_lba48();this.sector=255&i|i>>16&65280,this.cylinder_low=i>>8&255,this.cylinder_high=i>>16&255}else if(this.is_lba){i=e+this.get_lba28();this.sector=255&i,this.cylinder_low=i>>8&255,this.cylinder_high=i>>16&255,this.head=-16&this.head|15&i}else{var s=(i=e+this.get_chs())/(this.head_count*this.sectors_per_track)|0;this.cylinder_low=255&s,this.cylinder_high=s>>8&255,this.head=(i/this.sectors_per_track|0)%this.head_count&15,this.sector=i%this.sectors_per_track+1&255,ne(i===this.get_chs())}},fi.prototype.ata_read_sectors=function(t){var e=36===t||41===t,i=this.get_count(e),s=this.get_lba(e),r=32===t||36===t,a=i*this.sector_size,n=s*this.sector_size;re("ATA read cmd="+de(t)+" mode="+(this.is_lba?"lba":"chs")+" lba="+de(s)+" lbacount="+de(i)+" bytecount="+de(a),32768),n+a>this.buffer.byteLength?(ne(!1,"ATA read: Outside of disk"),this.status=255,this.push_irq()):(this.status=192,this.report_read_start(),this.read_buffer(n,a,(e=>{re("ata_read: Data arrived",32768),this.data_set(e),this.status=88,this.data_end=r?512:Math.min(a,512*this.sectors_per_drq),this.ata_advance(t,r?1:Math.min(i,this.sectors_per_track)),this.push_irq(),this.report_read_end(a)})))},fi.prototype.ata_read_sectors_dma=function(t){var e=37===t,i=this.get_count(e),s=this.get_lba(e),r=i*this.sector_size,a=s*this.sector_size;if(re("ATA DMA read lba="+de(s)+" lbacount="+de(i)+" bytecount="+de(r),32768),a+r>this.buffer.byteLength)return ne(!1,"ATA read: Outside of disk"),this.status=255,void this.push_irq();this.status=88,this.device.dma_status|=1},fi.prototype.do_ata_read_sectors_dma=function(){var t=37===this.current_command,e=this.get_count(t),i=this.get_lba(t),s=e*this.sector_size,r=i*this.sector_size;ne(i<this.buffer.byteLength),this.report_read_start();var a=this.device.prdt_addr;this.read_buffer(r,s,(t=>{re("do_ata_read_sectors_dma: Data arrived",32768);var i=this.device.prdt_addr,r=0;ne(a===i);do{var n=this.cpu.read32s(i),o=this.cpu.read16(i+4),h=128&this.cpu.read8(i+7);o||(o=65536,re("dma: prd count was 0",32768)),re("dma read transfer dest="+de(n)+" prd_count="+de(o),32768),this.cpu.write_blob(t.subarray(r,r+o),n),r+=o,i+=8}while(!h);ne(r===s),this.ata_advance(this.current_command,e),this.status=80,this.device.dma_status&=-2,this.current_command=-1,this.push_irq(),this.report_read_end(s)}))},fi.prototype.ata_write_sectors=function(t){var e=52===t||57===t,i=this.get_count(e),s=this.get_lba(e),r=48===t||52===t,a=i*this.sector_size,n=s*this.sector_size;re("ATA write lba="+de(s)+" mode="+(this.is_lba?"lba":"chs")+" lbacount="+de(i)+" bytecount="+de(a),32768),n+a>this.buffer.byteLength?(ne(!1,"ATA write: Outside of disk"),this.status=255,this.push_irq()):(this.status=88,this.data_allocate_noclear(a),this.data_end=r?512:Math.min(a,512*this.sectors_per_drq),this.write_dest=n)},fi.prototype.ata_write_sectors_dma=function(t){var e=53===t,i=this.get_count(e),s=this.get_lba(e),r=i*this.sector_size,a=s*this.sector_size;if(re("ATA DMA write lba="+de(s)+" lbacount="+de(i)+" bytecount="+de(r),32768),a+r>this.buffer.byteLength)return ne(!1,"ATA DMA write: Outside of disk"),this.status=255,void this.push_irq();this.status=88,this.device.dma_status|=1},fi.prototype.do_ata_write_sectors_dma=function(){var t=53===this.current_command,e=this.get_count(t),i=this.get_lba(t),s=e*this.sector_size,r=i*this.sector_size,a=this.device.prdt_addr,n=0;re("prdt addr: "+de(a,8),32768);const o=new Uint8Array(s);do{var h=this.cpu.read32s(a),_=this.cpu.read16(a+4),d=128&this.cpu.read8(a+7);_||(_=65536,re("dma: prd count was 0",32768)),re("dma write transfer dest="+de(h)+" prd_count="+de(_),32768);var c=this.cpu.mem8.subarray(h,h+_);ne(c.length===_),o.set(c,n),n+=_,a+=8}while(!d);ne(n===o.length),this.buffer.set(r,o,(()=>{re("dma write completed",32768),this.ata_advance(this.current_command,e),this.status=80,this.push_irq(),this.device.dma_status&=-2,this.current_command=-1})),this.report_write(s)},fi.prototype.get_chs=function(){var t=255&this.cylinder_low|this.cylinder_high<<8&65280,e=this.head,i=255&this.sector;return re("get_chs: c="+t+" h="+e+" s="+i,32768),(t*this.head_count+e)*this.sectors_per_track+i-1},fi.prototype.get_lba28=function(){return 255&this.sector|this.cylinder_low<<8&65280|this.cylinder_high<<16&16711680|(15&this.head)<<24},fi.prototype.get_lba48=function(){return(255&this.sector|this.cylinder_low<<8&65280|this.cylinder_high<<16&16711680|this.sector>>8<<24&4278190080)>>>0},fi.prototype.get_lba=function(t){return t?this.get_lba48():this.is_lba?this.get_lba28():this.get_chs()},fi.prototype.get_count=function(t){var e;return t?(0===(e=this.bytecount)&&(e=65536),e):(0===(e=255&this.bytecount)&&(e=256),e)},fi.prototype.create_identify_packet=function(){if(16&this.drive_head)this.data_allocate(0);else{for(var t=0;t<512;t++)this.data[t]=0;var e=Math.min(16383,this.cylinder_count);this.data_set([64,this.is_atapi?133:0,e,e>>8,0,0,this.head_count,this.head_count>>8,this.sectors_per_track/512,this.sectors_per_track/512>>8,0,2,this.sectors_per_track,this.sectors_per_track>>8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,4,0,0,0,0,0,0,0,0,0,56,118,32,54,68,72,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,128,0,1,0,0,2,0,0,0,2,0,2,7,0,e,e>>8,this.head_count,this.head_count>>8,this.sectors_per_track,0,255&this.sector_count,this.sector_count>>8&255,this.sector_count>>16&255,this.sector_count>>24&255,0,0,255&this.sector_count,this.sector_count>>8&255,this.sector_count>>16&255,this.sector_count>>24&255,0,0,160===this.current_command?0:7,160===this.current_command?0:4,0,0,30,0,30,0,30,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,0,0,0,0,0,0,116,0,64,0,64,0,116,0,64,0,0,0,0,0,0,0,0,0,0,1,96,0,0,0,0,0,0,0,0,0,0,0,0,255&this.sector_count,this.sector_count>>8&255,this.sector_count>>16&255,this.sector_count>>24&255]),this.data_length=512,this.data_end=512}},fi.prototype.data_allocate=function(t){this.data_allocate_noclear(t);for(var e=0;e<t+3>>2;e++)this.data32[e]=0},fi.prototype.data_allocate_noclear=function(t){this.data.length<t&&(this.data=new Uint8Array(t+3&-4),this.data16=new Uint16Array(this.data.buffer),this.data32=new Int32Array(this.data.buffer)),this.data_length=t,this.data_pointer=0},fi.prototype.data_set=function(t){this.data_allocate_noclear(t.length),this.data.set(t)},fi.prototype.report_read_start=function(){this.stats.loading=!0,this.bus.send("ide-read-start")},fi.prototype.report_read_end=function(t){this.stats.loading=!1;var e=t/this.sector_size|0;this.stats.sectors_read+=e,this.stats.bytes_read+=t,this.bus.send("ide-read-end",[this.nr,t,e])},fi.prototype.report_write=function(t){var e=t/this.sector_size|0;this.stats.sectors_written+=e,this.stats.bytes_written+=t,this.bus.send("ide-write-end",[this.nr,t,e])},fi.prototype.read_buffer=function(t,e,i){const s=this.last_io_id++;this.in_progress_io_ids.add(s),this.buffer.get(t,e,(t=>{if(this.cancelled_io_ids.delete(s))return void ne(!this.in_progress_io_ids.has(s));ne(this.in_progress_io_ids.delete(s)),i(t)}))},fi.prototype.cancel_io_operations=function(){for(const t of this.in_progress_io_ids)this.cancelled_io_ids.add(t);this.in_progress_io_ids.clear()},fi.prototype.get_state=function(){var t=[];return t[0]=this.bytecount,t[1]=this.cylinder_count,t[2]=this.cylinder_high,t[3]=this.cylinder_low,t[4]=this.data_pointer,t[5]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=this.drive_head,t[10]=this.error,t[11]=this.head,t[12]=this.head_count,t[13]=this.is_atapi,t[14]=this.is_lba,t[15]=this.lba_count,t[16]=this.data,t[17]=this.data_length,t[18]=this.sector,t[19]=this.sector_count,t[20]=this.sector_size,t[21]=this.sectors_per_drq,t[22]=this.sectors_per_track,t[23]=this.status,t[24]=this.write_dest,t[25]=this.current_command,t[26]=this.data_end,t[27]=this.current_atapi_command,t[28]=this.buffer,t},fi.prototype.set_state=function(t){this.bytecount=t[0],this.cylinder_count=t[1],this.cylinder_high=t[2],this.cylinder_low=t[3],this.data_pointer=t[4],this.drive_head=t[9],this.error=t[10],this.head=t[11],this.head_count=t[12],this.is_atapi=t[13],this.is_lba=t[14],this.lba_count=t[15],this.data=t[16],this.data_length=t[17],this.sector=t[18],this.sector_count=t[19],this.sector_size=t[20],this.sectors_per_drq=t[21],this.sectors_per_track=t[22],this.status=t[23],this.write_dest=t[24],this.current_command=t[25],this.data_end=t[26],this.current_atapi_command=t[27],this.data16=new Uint16Array(this.data.buffer),this.data32=new Int32Array(this.data.buffer),this.buffer&&this.buffer.set_state(t[28])},mi.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}},mi.prototype.empty_port_read8=function(){return 255},mi.prototype.empty_port_read16=function(){return 65535},mi.prototype.empty_port_read32=function(){return-1},mi.prototype.empty_port_write=function(t){},mi.prototype.register_read=function(t,e,i,s,r){ne("number"==typeof t),ne("object"==typeof e),ne(!i||"function"==typeof i),ne(!s||"function"==typeof s),ne(!r||"function"==typeof r),ne(i||s||r);var a=function(i){return ne(!1,"Overlapped read"+i+" "+de(t,4)+" ("+e.name+")"),-1>>>32-i|0};i||(i=a.bind(this,8)),s||(s=a.bind(this,16)),r||(r=a.bind(this,32)),i&&(this.ports[t].read8=i),s&&(this.ports[t].read16=s),r&&(this.ports[t].read32=r),this.ports[t].device=e},mi.prototype.register_write=function(t,e,i,s,r){ne("number"==typeof t),ne("object"==typeof e),ne(!i||"function"==typeof i),ne(!s||"function"==typeof s),ne(!r||"function"==typeof r),ne(i||s||r);var a=function(i){ne(!1,"Overlapped write"+i+" "+de(t)+" ("+e.name+")")};i||(i=a.bind(this,8)),s||(s=a.bind(this,16)),r||(r=a.bind(this,32)),i&&(this.ports[t].write8=i),s&&(this.ports[t].write16=s),r&&(this.ports[t].write32=r),this.ports[t].device=e},mi.prototype.register_read_consecutive=function(t,e,i,s,r,a){function n(){return i.call(this)|s.call(this)<<8}function o(){return r.call(this)|a.call(this)<<8}function h(){return i.call(this)|s.call(this)<<8|r.call(this)<<16|a.call(this)<<24}ne(4===arguments.length||6===arguments.length),r&&a?(this.register_read(t,e,i,n,h),this.register_read(t+1,e,s),this.register_read(t+2,e,r,o),this.register_read(t+3,e,a)):(this.register_read(t,e,i,n),this.register_read(t+1,e,s))},mi.prototype.register_write_consecutive=function(t,e,i,s,r,a){function n(t){i.call(this,255&t),s.call(this,t>>8&255)}function o(t){r.call(this,255&t),a.call(this,t>>8&255)}function h(t){i.call(this,255&t),s.call(this,t>>8&255),r.call(this,t>>16&255),a.call(this,t>>>24)}ne(4===arguments.length||6===arguments.length),r&&a?(this.register_write(t,e,i,n,h),this.register_write(t+1,e,s),this.register_write(t+2,e,r,o),this.register_write(t+3,e,a)):(this.register_write(t,e,i,n),this.register_write(t+1,e,s))},mi.prototype.mmap_read32_shim=function(t){var e=t>>>17,i=this.cpu.memory_map_read8[e];return i(t)|i(t+1)<<8|i(t+2)<<16|i(t+3)<<24},mi.prototype.mmap_write32_shim=function(t,e){var i=t>>>17,s=this.cpu.memory_map_write8[i];s(t,255&e),s(t+1,e>>8&255),s(t+2,e>>16&255),s(t+3,e>>>24)},mi.prototype.mmap_register=function(t,e,i,s,r,a){re("mmap_register addr="+de(t>>>0,8)+" size="+de(e,8),32),ne(0==(131071&t)),ne(e&&0==(131071&e)),r||(r=this.mmap_read32_shim.bind(this)),a||(a=this.mmap_write32_shim.bind(this));for(var n=t>>>17;e>0;n++)this.cpu.memory_map_read8[n]=i,this.cpu.memory_map_write8[n]=s,this.cpu.memory_map_read32[n]=r,this.cpu.memory_map_write32[n]=a,e-=131072},mi.prototype.port_write8=function(t,e){var i=this.ports[t];return i.write8===this.empty_port_write&&re("write8 port #"+de(t,4)+" <- "+de(e,2)+this.get_port_description(t),32),i.write8.call(i.device,e)},mi.prototype.port_write16=function(t,e){var i=this.ports[t];return i.write16===this.empty_port_write&&re("write16 port #"+de(t,4)+" <- "+de(e,4)+this.get_port_description(t),32),i.write16.call(i.device,e)},mi.prototype.port_write32=function(t,e){var i=this.ports[t];return i.write32===this.empty_port_write&&re("write32 port #"+de(t,4)+" <- "+de(e>>>0,8)+this.get_port_description(t),32),i.write32.call(i.device,e)},mi.prototype.port_read8=function(t){var e=this.ports[t];e.read8===this.empty_port_read8&&re("read8 port #"+de(t,4)+this.get_port_description(t),32);var i=e.read8.call(e.device);return ne(i<256,"8 bit port returned large value: "+de(t)),i},mi.prototype.port_read16=function(t){var e=this.ports[t];e.read16===this.empty_port_read16&&re("read16 port #"+de(t,4)+this.get_port_description(t),32);var i=e.read16.call(e.device);return ne(i<65536&&i>=0,"16 bit port returned large value: "+de(t)),i},mi.prototype.port_read32=function(t){var e=this.ports[t];e.read32===this.empty_port_read32&&re("read32 port #"+de(t,4)+this.get_port_description(t),32);var i=e.read32.call(e.device);return ne((0|i)===i),i};var gi={4:"PORT_DMA_ADDR_2",5:"PORT_DMA_CNT_2",10:"PORT_DMA1_MASK_REG",11:"PORT_DMA1_MODE_REG",12:"PORT_DMA1_CLEAR_FF_REG",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",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"};mi.prototype.get_port_description=function(t){return gi[t]?" ("+gi[t]+")":""};var bi=4273995776,yi=0,vi=16,wi=24,ki=0,xi=32768,Ai=65536,qi=4096,Ii=16384,Ci=-110592,zi=0,Oi=1,Ri=4,Li=5;function Ei(t){this.cpu=t,this.ioredtbl_config=new Int32Array(24),this.ioredtbl_destination=new Int32Array(24);for(var e=0;e<this.ioredtbl_config.length;e++)this.ioredtbl_config[e]=65536;this.ioregsel=0,this.ioapic_id=0,this.irr=0,this.irq_value=0,dbg_assert(MMAP_BLOCK_SIZE>=32),t.io.mmap_register(4273995776,MMAP_BLOCK_SIZE,(t=>{if((t=t-4273995776|0)>=16&&t<20){const e=t-16;return dbg_log("ioapic read8 byte "+e+" "+h(this.ioregsel),LOG_APIC),this.read(this.ioregsel)>>8*e&255}return dbg_log("Unexpected IOAPIC register read: "+h(t>>>0),LOG_APIC),dbg_assert(!1),0}),((t,e)=>{dbg_assert(!1,"unsupported write8 from ioapic: "+h(t>>>0))}),(t=>0===(t=t-4273995776|0)?this.ioregsel:16===t?this.read(this.ioregsel):(dbg_log("Unexpected IOAPIC register read: "+h(t>>>0),LOG_APIC),dbg_assert(!1),0)),((t,e)=>{0===(t=t-4273995776|0)?this.ioregsel=e:16===t?this.write(this.ioregsel,e):(dbg_log("Unexpected IOAPIC register write: "+h(t>>>0)+" <- "+h(e>>>0,8),LOG_APIC),dbg_assert(!1))}))}function Pi(t,e){this.running=!1,this.stopped=!1,this.tick_counter=0,this.worker=null,this.cpu=new Xr(t,e,(()=>{this.idle&&this.next_tick(0)})),this.bus=t,t.register("cpu-init",this.init,this),t.register("cpu-run",this.run,this),t.register("cpu-stop",this.stop,this),t.register("cpu-restart",this.restart,this),this.register_yield()}if(Ei.prototype.remote_eoi=function(t){for(var e=0;e<24;e++){var i=this.ioredtbl_config[e];(255&i)===t&&16384&i&&(dbg_log("Clear remote IRR for irq="+h(e),LOG_APIC),this.ioredtbl_config[e]&=-16385,this.check_irq(e))}},Ei.prototype.check_irq=function(t){var e=1<<t;if(0!=(this.irr&e)){var i=this.ioredtbl_config[t];if(0==(65536&i)){var s=i>>8&7,r=i>>11&1,a=255&i,n=this.ioredtbl_destination[t]>>>24,o=32768==(32768&i);if(0==(32768&i))this.irr&=~e;else if(this.ioredtbl_config[t]|=16384,16384&i)return void dbg_log("No route: level interrupt and remote IRR still set",LOG_APIC);0===s||1===s?this.cpu.devices.apic.route(a,s,o,n,r):dbg_assert(!1,"TODO"),this.ioredtbl_config[t]&=-4097}}},Ei.prototype.set_irq=function(t){if(t>=24)dbg_assert(!1,"Bad irq: "+t,LOG_APIC);else{var e=1<<t;if(0==(this.irq_value&e)){if(APIC_LOG_VERBOSE&&dbg_log("apic set irq "+t,LOG_APIC),this.irq_value|=e,65536==(98304&this.ioredtbl_config[t]))return;this.irr|=e,this.check_irq(t)}}},Ei.prototype.clear_irq=function(t){if(t>=24)dbg_assert(!1,"Bad irq: "+t,LOG_APIC);else{var e=1<<t;if((this.irq_value&e)===e)this.irq_value&=~e,32768&this.ioredtbl_config[t]&&(this.irr&=~e)}},Ei.prototype.read=function(t){if(0===t)return dbg_log("IOAPIC Read id",LOG_APIC),this.ioapic_id<<24;if(1===t)return dbg_log("IOAPIC Read version",LOG_APIC),1507345;if(2===t)return dbg_log("IOAPIC Read arbitration id",LOG_APIC),this.ioapic_id<<24;if(t>=16&&t<64){var e=t-16>>1;if(1&t){var i=this.ioredtbl_destination[e];dbg_log("IOAPIC Read destination irq="+h(e)+" -> "+h(i,8),LOG_APIC)}else{i=this.ioredtbl_config[e];dbg_log("IOAPIC Read config irq="+h(e)+" -> "+h(i,8),LOG_APIC)}return i}return dbg_log("IOAPIC register read outside of range "+h(t),LOG_APIC),dbg_assert(!1),0},Ei.prototype.write=function(t,e){if(0===t)this.ioapic_id=e>>>24&15;else if(1===t||2===t)dbg_log("Invalid write: "+t,LOG_APIC);else if(t>=16&&t<64){var i=t-16>>1;if(1&t)this.ioredtbl_destination[i]=4278190080&e,dbg_log("Write destination "+h(e>>>0,8)+" irq="+h(i)+" dest="+h(e>>>24,2),LOG_APIC);else{var s=this.ioredtbl_config[i];this.ioredtbl_config[i]=110591&e|-110592&s;var r=255&e,a=e>>8&7,n=e>>11&1,o=e>>15&1,_=e>>16&1;dbg_log("Write config "+h(e>>>0,8)+" irq="+h(i)+" vector="+h(r,2)+" deliverymode="+DELIVERY_MODES[a]+" destmode="+DESTINATION_MODES[n]+" is_level="+o+" disabled="+_,LOG_APIC),this.check_irq(i)}}else dbg_log("IOAPIC register write outside of range "+h(t)+": "+h(e>>>0,8),LOG_APIC),dbg_assert(!1)},Ei.prototype.get_state=function(){var t=[];return t[0]=this.ioredtbl_config,t[1]=this.ioredtbl_destination,t[2]=this.ioregsel,t[3]=this.ioapic_id,t[4]=this.irr,t[5]=this.irq_value,t},Ei.prototype.set_state=function(t){this.ioredtbl_config=t[0],this.ioredtbl_destination=t[1],this.ioregsel=t[2],this.ioapic_id=t[3],this.irr=t[4],this.irq_value=t[5]},Pi.prototype.run=function(){this.stopped=!1,this.running||(this.running=!0,this.bus.send("emulator-started")),this.next_tick(0)},Pi.prototype.do_tick=function(){if(this.stopped||!this.running)return this.stopped=this.running=!1,void this.bus.send("emulator-stopped");this.idle=!1;const t=this.cpu.main_run();this.next_tick(t)},Pi.prototype.next_tick=function(t){const e=++this.tick_counter;this.idle=!0,this.yield(t,e)},Pi.prototype.yield_callback=function(t){t===this.tick_counter&&this.do_tick()},Pi.prototype.stop=function(){this.running&&(this.stopped=!0)},Pi.prototype.destroy=function(){this.unregister_yield()},Pi.prototype.restart=function(){this.cpu.reset_cpu(),this.cpu.load_bios()},Pi.prototype.init=function(t){this.cpu.init(t,this.bus),this.bus.send("emulator-ready")},"undefined"!=typeof process&&global.setImmediate)Pi.prototype.yield=function(t,e){t<1?global.setImmediate((t=>this.yield_callback(t)),e):setTimeout((t=>this.yield_callback(t)),t,e)},Pi.prototype.register_yield=function(){},Pi.prototype.unregister_yield=function(){};else if("undefined"!=typeof Worker){function Ti(){globalThis.onmessage=function(t){const e=t.data.t;e<1?postMessage(t.data.tick):setTimeout((()=>postMessage(t.data.tick)),e)}}Pi.prototype.register_yield=function(){const t=URL.createObjectURL(new Blob(["("+Ti.toString()+")()"],{type:"text/javascript"}));this.worker=new Worker(t),this.worker.onmessage=t=>this.yield_callback(t.data),URL.revokeObjectURL(t)},Pi.prototype.yield=function(t,e){this.worker.postMessage({t:t,tick:e})},Pi.prototype.unregister_yield=function(){this.worker.terminate(),this.worker=null}}else Pi.prototype.yield=function(t){setTimeout((()=>{this.do_tick()}),t)},Pi.prototype.register_yield=function(){},Pi.prototype.unregister_yield=function(){};if(Pi.prototype.save_state=function(){return this.cpu.save_state()},Pi.prototype.restore_state=function(t){return this.cpu.restore_state(t)},"object"==typeof performance&&performance.now)Pi.microtick=performance.now.bind(performance);else if("function"==typeof require){const{performance:t}=require("perf_hooks");Pi.microtick=t.now.bind(t)}else"object"==typeof process&&process.hrtime?Pi.microtick=function(){var t=process.hrtime();return 1e3*t[0]+t[1]/1e6}:Pi.microtick=Date.now;const Di=!1;var Ui=0,Gi=1,Si=1,Mi=2,Fi=2,Vi=3,Bi=4,Ni=4,Wi=5,ji=5,Ki=6,Xi=6,Hi=7,Yi=8,Qi=8,Ji=9,Zi=9,$i=10,ts=11,es=12,is=12,ss=13,rs=13,as=14,ns=14,os=15,hs=15,_s=16,ds=31,cs=1,us=2,ps=4,ls=8,fs=16,ms=32,gs=64,bs=128,ys=63,vs=1,ws=64,ks=76,xs=128;function As(t,e,i){this.cpu=t,this.pci=t.devices.pci,this.preserve_mac_from_state_image=i,this.bus=e,this.bus.register("net0-receive",(function(t){this.receive(t)}),this),this.port=768,this.name="ne2k",this.pci_space=[236,16,41,128,3,1,0,0,0,0,0,2,0,0,0,0,255&this.port|1,this.port>>8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,0,17,0,0,184,254,0,0,0,0,0,0,0,0,0,1,0,0],this.pci_id=40,this.pci_bars=[{size:32}],this.isr=0,this.imr=0,this.cr=1,this.dcfg=0,this.rcnt=0,this.tcnt=0,this.tpsr=0,this.memory=new Uint8Array(32768),this.rxcr=0,this.txcr=0,this.tsr=1,this.mac=new Uint8Array([0,34,21,255*Math.random()|0,255*Math.random()|0,255*Math.random()|0]);for(var s=0;s<6;s++)this.memory[s<<1]=this.memory[s<<1|1]=this.mac[s];this.memory[28]=this.memory[29]=87,this.memory[30]=this.memory[31]=87,re("Mac: "+de(this.mac[0],2)+":"+de(this.mac[1],2)+":"+de(this.mac[2],2)+":"+de(this.mac[3],2)+":"+de(this.mac[4],2)+":"+de(this.mac[5],2),1048576),this.rsar=0,this.pstart=64,this.pstop=128,this.curpg=76,this.boundary=76;var r=t.io;r.register_read(0|this.port,this,(function(){return re("Read cmd",1048576),this.cr})),r.register_write(0|this.port,this,(function(t){if(this.cr=t,re("Write command: "+de(t,2)+" newpg="+(this.cr>>6)+" txcr="+de(this.txcr,2),1048576),!(1&this.cr)&&(24&t&&0===this.rcnt&&this.do_interrupt(64),4&t)){var e=this.tpsr<<8,i=this.memory.subarray(e,e+this.tcnt);this.bus.send("net0-send",i),this.bus.send("eth-transmit-end",[i.length]),this.cr&=-5,this.do_interrupt(2),re("Command: Transfer. length="+de(i.byteLength),1048576)}})),r.register_read(13|this.port,this,(function(){return re("Read counter0",1048576),0})),r.register_read(14|this.port,this,(function(){return re("Read counter1",1048576),0})),r.register_read(15|this.port,this,(function(){return re("Read counter2",1048576),0})),r.register_read(31|this.port,this,(function(){var t=this.get_page();return 0===t?(re("Read reset",1048576),this.do_interrupt(128)):(re("Read pg"+t+"/1f",1048576),ne(!1)),0})),r.register_write(31|this.port,this,(function(t){var e=this.get_page();0===e?re("Write reset: "+de(t,2),1048576):(re("Write pg"+e+"/1f: "+de(t),1048576),ne(!1))})),r.register_read(1|this.port,this,(function(){var t=this.get_page();return 0===t?this.pstart:1===t?(re("Read pg1/01 (mac[0])",1048576),this.mac[0]):2===t?this.pstart:(re("Read pg"+t+"/01"),ne(!1),0)})),r.register_write(1|this.port,this,(function(t){var e=this.get_page();0===e?(re("start page: "+de(t,2),1048576),this.pstart=t):1===e?(re("mac[0] = "+de(t),1048576),this.mac[0]=t):3===e?re("Unimplemented: Write pg3/01 (9346CR): "+de(t),1048576):(re("Write pg"+e+"/01: "+de(t),1048576),ne(!1))})),r.register_read(2|this.port,this,(function(){var t=this.get_page();return 0===t?this.pstop:1===t?(re("Read pg1/02 (mac[1])",1048576),this.mac[1]):2===t?this.pstop:(re("Read pg"+t+"/02",1048576),ne(!1),0)})),r.register_write(2|this.port,this,(function(t){var e=this.get_page();0===e?(re("stop page: "+de(t,2),1048576),t>this.memory.length>>8&&(t=this.memory.length>>8,re("XXX: Adjusting stop page to "+de(t),1048576)),this.pstop=t):1===e?(re("mac[1] = "+de(t),1048576),this.mac[1]=t):(re("Write pg"+e+"/02: "+de(t),1048576),ne(!1))})),r.register_read(7|this.port,this,(function(){var t=this.get_page();return 0===t?(re("Read isr: "+de(this.isr,2),1048576),this.isr):1===t?(re("Read curpg: "+de(this.curpg,2),1048576),this.curpg):void ne(!1)})),r.register_write(7|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write isr: "+de(t,2),1048576),this.isr&=~t,this.update_irq()):1===e?(re("Write curpg: "+de(t,2),1048576),this.curpg=t):ne(!1)})),r.register_write(13|this.port,this,(function(t){var e=this.get_page();0===e?(this.txcr=t,re("Write tx config: "+de(t,2),1048576)):re("Unimplemented: Write pg"+e+"/0d "+de(t,2),1048576)})),r.register_write(14|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write data configuration: "+de(t,2),1048576),this.dcfg=t):re("Unimplemented: Write pg"+e+"/0e "+de(t,2),1048576)})),r.register_read(10|this.port,this,(function(){return 0===this.get_page()?(re("Read pg0/0a",1048576),80):(ne(!1,"TODO"),0)})),r.register_write(10|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write remote byte count low: "+de(t,2),1048576),this.rcnt=65280&this.rcnt|255&t):re("Unimplemented: Write pg"+e+"/0a "+de(t,2),1048576)})),r.register_read(11|this.port,this,(function(){return 0===this.get_page()?(re("Read pg0/0b",1048576),67):(ne(!1,"TODO"),0)})),r.register_write(11|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write remote byte count high: "+de(t,2),1048576),this.rcnt=255&this.rcnt|t<<8&65280):re("Unimplemented: Write pg"+e+"/0b "+de(t,2),1048576)})),r.register_read(8|this.port,this,(function(){var t=this.get_page();if(0===t)return re("Read remote start address low",1048576),255&this.rsar;re("Unimplemented: Read pg"+t+"/08",1048576),ne(!1)})),r.register_write(8|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write remote start address low: "+de(t,2),1048576),this.rsar=65280&this.rsar|255&t):re("Unimplemented: Write pg"+e+"/08 "+de(t,2),1048576)})),r.register_read(9|this.port,this,(function(){var t=this.get_page();if(0===t)return re("Read remote start address high",1048576),this.rsar>>8&255;re("Unimplemented: Read pg"+t+"/09",1048576),ne(!1)})),r.register_write(9|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write remote start address low: "+de(t,2),1048576),this.rsar=255&this.rsar|t<<8&65280):re("Unimplemented: Write pg"+e+"/09 "+de(t,2),1048576)})),r.register_write(15|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write interrupt mask register: "+de(t,2)+" isr="+de(this.isr,2),1048576),this.imr=t,this.update_irq()):re("Unimplemented: Write pg"+e+"/0f "+de(t,2),1048576)})),r.register_read(3|this.port,this,(function(){var t=this.get_page();return 0===t?(re("Read boundary: "+de(this.boundary,2),1048576),this.boundary):1===t?(re("Read pg1/03 (mac[2])",1048576),this.mac[2]):3===t?(re("Unimplemented: Read pg3/03 (CONFIG0)",1048576),0):(re("Read pg"+t+"/03",1048576),ne(!1),0)})),r.register_write(3|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write boundary: "+de(t,2),1048576),this.boundary=t):1===e?(re("mac[2] = "+de(t),1048576),this.mac[2]=t):(re("Write pg"+e+"/03: "+de(t),1048576),ne(!1))})),r.register_read(4|this.port,this,(function(){var t=this.get_page();return 0===t?this.tsr:1===t?(re("Read pg1/04 (mac[3])",1048576),this.mac[3]):(re("Read pg"+t+"/04",1048576),ne(!1),0)})),r.register_write(4|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write tpsr: "+de(t,2),1048576),this.tpsr=t):1===e?(re("mac[3] = "+de(t),1048576),this.mac[3]=t):(re("Write pg"+e+"/04: "+de(t),1048576),ne(!1))})),r.register_read(5|this.port,this,(function(){var t=this.get_page();return 0===t?(re("Unimplemented: Read pg0/05 (NCR: Number of Collisions Register)",1048576),0):1===t?(re("Read pg1/05 (mac[4])",1048576),this.mac[4]):3===t?(re("Unimplemented: Read pg3/05 (CONFIG2)",1048576),0):(re("Read pg"+t+"/05",1048576),ne(!1),0)})),r.register_write(5|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write tcnt low: "+de(t,2),1048576),this.tcnt=-256&this.tcnt|t):1===e?(re("mac[4] = "+de(t),1048576),this.mac[4]=t):3===e?re("Unimplemented: Write pg3/05 (CONFIG2): "+de(t),1048576):(re("Write pg"+e+"/05: "+de(t),1048576),ne(!1))})),r.register_read(6|this.port,this,(function(){var t=this.get_page();return 0===t?(ne(!1,"TODO"),0):1===t?(re("Read pg1/06 (mac[5])",1048576),this.mac[5]):3===t?(re("Unimplemented: Read pg3/06 (CONFIG3)",1048576),0):(re("Read pg"+t+"/06",1048576),ne(!1),0)})),r.register_write(6|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write tcnt high: "+de(t,2),1048576),this.tcnt=255&this.tcnt|t<<8):1===e?(re("mac[5] = "+de(t),1048576),this.mac[5]=t):3===e?re("Unimplemented: Write pg3/06 (CONFIG3): "+de(t),1048576):(re("Write pg"+e+"/06: "+de(t),1048576),ne(!1))})),r.register_read(12|this.port,this,(function(){var t=this.get_page();return 0===t?9:(re("Unimplemented: Read pg"+t+"/0c",1048576),ne(!1),0)})),r.register_write(12|this.port,this,(function(t){var e=this.get_page();0===e?(re("RX configuration reg write: "+de(t,2),1048576),this.rxcr=t):re("Unimplemented: Write pg"+e+"/0c: "+de(t),1048576)})),r.register_read(16|this.port,this,this.data_port_read8,this.data_port_read16,this.data_port_read32),r.register_write(16|this.port,this,this.data_port_write16,this.data_port_write16,this.data_port_write32),t.devices.pci.register_device(this)}As.prototype.get_state=function(){var t=[];return t[0]=this.isr,t[1]=this.imr,t[2]=this.cr,t[3]=this.dcfg,t[4]=this.rcnt,t[5]=this.tcnt,t[6]=this.tpsr,t[7]=this.rsar,t[8]=this.pstart,t[9]=this.curpg,t[10]=this.boundary,t[11]=this.pstop,t[12]=this.rxcr,t[13]=this.txcr,t[14]=this.tsr,t[15]=this.mac,t[16]=this.memory,t},As.prototype.set_state=function(t){this.isr=t[0],this.imr=t[1],this.cr=t[2],this.dcfg=t[3],this.rcnt=t[4],this.tcnt=t[5],this.tpsr=t[6],this.rsar=t[7],this.pstart=t[8],this.curpg=t[9],this.boundary=t[10],this.pstop=t[11],this.rxcr=t[12],this.txcr=t[13],this.tsr=t[14],this.preserve_mac_from_state_image&&(this.mac=t[15],this.memory=t[16])},As.prototype.do_interrupt=function(t){re("Do interrupt "+de(t,2),1048576),this.isr|=t,this.update_irq()},As.prototype.update_irq=function(){this.imr&this.isr?this.pci.raise_irq(this.pci_id):this.pci.lower_irq(this.pci_id)},As.prototype.data_port_write=function(t){(this.rsar<=16||this.rsar>=16384&&this.rsar<32768)&&(this.memory[this.rsar]=t),this.rsar++,this.rcnt--,this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-this.pstop<<8),0===this.rcnt&&this.do_interrupt(64)},As.prototype.data_port_write16=function(t){this.data_port_write(t),1&this.dcfg&&this.data_port_write(t>>8)},As.prototype.data_port_write32=function(t){this.data_port_write(t),this.data_port_write(t>>8),this.data_port_write(t>>16),this.data_port_write(t>>24)},As.prototype.data_port_read=function(){let t=0;return this.rsar<32768&&(t=this.memory[this.rsar]),this.rsar++,this.rcnt--,this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-this.pstop<<8),0===this.rcnt&&this.do_interrupt(64),t},As.prototype.data_port_read8=function(){return 255&this.data_port_read16()},As.prototype.data_port_read16=function(){return 1&this.dcfg?this.data_port_read()|this.data_port_read()<<8:this.data_port_read()},As.prototype.data_port_read32=function(){return this.data_port_read()|this.data_port_read()<<8|this.data_port_read()<<16|this.data_port_read()<<24},As.prototype.receive=function(t){if(1&this.cr)return;if(this.bus.send("eth-receive-end",[t.length]),16&this.rxcr);else if(4&this.rxcr&&255===t[0]&&255===t[1]&&255===t[2]&&255===t[3]&&255===t[4]&&255===t[5]);else{if(8&this.rxcr&&1==(1&t[0]))return;if(t[0]!==this.mac[0]||t[1]!==this.mac[1]||t[2]!==this.mac[2]||t[3]!==this.mac[3]||t[4]!==this.mac[4]||t[5]!==this.mac[5])return}var e=Math.max(60,t.length),i=this.curpg<<8,s=e+4,r=i+4,a=this.curpg+1+(s>>8),n=i+s;const o=1+(s>>8),h=this.boundary>this.curpg?this.boundary-this.curpg:this.pstop-this.curpg+this.boundary-this.pstart;if(h<o&&0!==this.boundary)re("Buffer full, dropping packet pstart="+de(this.pstart)+" pstop="+de(this.pstop)+" curpg="+de(this.curpg)+" needed="+de(o)+" boundary="+de(this.boundary)+" available="+de(h),1048576);else{if(n>this.pstop<<8){ne(t.length>=60);var _=(this.pstop<<8)-r;ne(_>=0),this.memory.set(t.subarray(0,_),r),this.memory.set(t.subarray(_),this.pstart<<8),re("rcv cut="+de(_),1048576)}else this.memory.set(t,r),t.length<60&&this.memory.fill(0,r+t.length,r+60);a>=this.pstop&&(a+=this.pstart-this.pstop),this.memory[i]=1,this.memory[i+1]=a,this.memory[i+2]=s,this.memory[i+3]=s>>8,this.curpg=a,re("rcv offset="+de(i)+" len="+de(s)+" next="+de(a),1048576),this.do_interrupt(1)}},As.prototype.get_page=function(){return this.cr>>6&3};var qs=3320,Is=3324;function Cs(t){this.pci_addr=new Uint8Array(4),this.pci_value=new Uint8Array(4),this.pci_response=new Uint8Array(4),this.pci_status=new Uint8Array(4),this.pci_addr32=new Int32Array(this.pci_addr.buffer),this.pci_value32=new Int32Array(this.pci_value.buffer),this.pci_response32=new Int32Array(this.pci_response.buffer),this.pci_status32=new Int32Array(this.pci_status.buffer),this.device_spaces=[],this.devices=[],this.cpu=t;for(var e=0;e<256;e++)this.device_spaces[e]=void 0,this.devices[e]=void 0;this.io=t.io,t.io.register_write(3324,this,(function(t){this.pci_write8(this.pci_addr32[0],t)}),(function(t){this.pci_write16(this.pci_addr32[0],t)}),(function(t){this.pci_write32(this.pci_addr32[0],t)})),t.io.register_write(3325,this,(function(t){this.pci_write8(this.pci_addr32[0]+1|0,t)})),t.io.register_write(3326,this,(function(t){this.pci_write8(this.pci_addr32[0]+2|0,t)}),(function(t){this.pci_write16(this.pci_addr32[0]+2|0,t)})),t.io.register_write(3327,this,(function(t){this.pci_write8(this.pci_addr32[0]+3|0,t)})),t.io.register_read_consecutive(3324,this,(function(){return this.pci_response[0]}),(function(){return this.pci_response[1]}),(function(){return this.pci_response[2]}),(function(){return this.pci_response[3]})),t.io.register_read_consecutive(3320,this,(function(){return this.pci_status[0]}),(function(){return this.pci_status[1]}),(function(){return this.pci_status[2]}),(function(){return this.pci_status[3]})),t.io.register_write_consecutive(3320,this,(function(t){this.pci_addr[0]=252&t}),(function(e){if(2==(6&this.pci_addr[1])&&6==(6&e))return re("CPU reboot via PCI"),void t.reboot_internal();this.pci_addr[1]=e}),(function(t){this.pci_addr[2]=t}),(function(t){this.pci_addr[3]=t,this.pci_query()}));var i={pci_id:0,pci_space:[134,128,55,18,0,0,0,0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0],pci_bars:[],name:"82441FX PMC"};this.register_device(i),this.isa_bridge={pci_id:8,pci_space:[134,128,0,112,7,0,0,2,0,0,1,6,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],pci_bars:[],name:"82371SB PIIX3 ISA"},this.isa_bridge_space=this.register_device(this.isa_bridge),this.isa_bridge_space8=new Uint8Array(this.isa_bridge_space.buffer)}Cs.prototype.get_state=function(){for(var t=[],e=0;e<256;e++)t[e]=this.device_spaces[e];return t[256]=this.pci_addr,t[257]=this.pci_value,t[258]=this.pci_response,t[259]=this.pci_status,t},Cs.prototype.set_state=function(t){for(var e=0;e<256;e++){var i=this.devices[e],s=t[e];if(i&&s){for(var r=0;r<i.pci_bars.length;r++){var a=s[4+r];if(1&a){var n=i.pci_bars[r],o=-2&n.original_bar&65535,h=-2&a&65535;this.set_io_bars(n,o,h)}}this.device_spaces[e].set(s)}else i&&re("Warning: While restoring PCI device: Device exists in current configuration but not in snapshot ("+i.name+")"),s&&re("Warning: While restoring PCI device: Device doesn't exist in current configuration but does in snapshot (device "+de(e,2)+")")}this.pci_addr.set(t[256]),this.pci_value.set(t[257]),this.pci_response.set(t[258]),this.pci_status.set(t[259])},Cs.prototype.pci_query=function(){var t="query",e=this.pci_addr[2]<<8|this.pci_addr[1],i=252&this.pci_addr[0],s=e>>3&31;t+=" enabled="+(this.pci_addr[3]>>7),t+=" bdf="+de(e,4),t+=" dev="+de(s,2),t+=" addr="+de(i,2);var r=this.device_spaces[e];void 0!==r?(this.pci_status32[0]=-2147483648,i<r.byteLength?this.pci_response32[0]=r[i>>2]:this.pci_response32[0]=0,t+=" "+de(this.pci_addr32[0]>>>0,8)+" -> "+de(this.pci_response32[0]>>>0,8),i>=r.byteLength&&(t+=" (undef)"),t+=" ("+this.devices[e].name+")",re(t,2048)):(this.pci_response32[0]=-1,this.pci_status32[0]=0)},Cs.prototype.pci_write8=function(t,e){var i=t>>8&65535,s=255&t,r=new Uint8Array(this.device_spaces[i].buffer),a=this.devices[i];r&&(ne(!(s>=16&&s<44||s>=48&&s<52),"PCI: Expected 32-bit write, got 8-bit (addr: "+de(s)+")"),re("PCI write8 dev="+de(i>>3,2)+" ("+a.name+") addr="+de(s,4)+" value="+de(e,2),2048),r[s]=e)},Cs.prototype.pci_write16=function(t,e){ne(0==(1&t));var i=t>>8&65535,s=255&t,r=new Uint16Array(this.device_spaces[i].buffer),a=this.devices[i];r&&(s>=16&&s<44?re("Warning: PCI: Expected 32-bit write, got 16-bit (addr: "+de(s)+")"):(ne(!(s>=48&&s<52),"PCI: Expected 32-bit write, got 16-bit (addr: "+de(s)+")"),re("PCI writ16 dev="+de(i>>3,2)+" ("+a.name+") addr="+de(s,4)+" value="+de(e,4),2048),r[s>>>1]=e))},Cs.prototype.pci_write32=function(t,e){ne(0==(3&t));var i=t>>8&65535,s=255&t,r=this.device_spaces[i],a=this.devices[i];if(r)if(s>=16&&s<40){var n=s-16>>2,o=a.pci_bars[n];if(re("BAR"+n+" exists="+(o?"y":"n")+" changed to "+de(e>>>0)+" dev="+de(i>>3,2)+" ("+a.name+") ",2048),o){ne(!(o.size&o.size-1),"bar size should be power of 2");var h=s>>2,_=1&r[h];if(-1==(3|e|o.size-1))e=~(o.size-1)|_,0===_&&(r[h]=e);else if(0===_){var d=o.original_bar;(-16&e)!=(-16&d)&&re("Warning: Changing memory bar not supported, ignored",2048),r[h]=d}if(1===_){ne(1===_);var c=-2&r[h]&65535,u=-2&e&65535;re("io bar changed from "+de(c>>>0,8)+" to "+de(u>>>0,8)+" size="+o.size,2048),this.set_io_bars(o,c,u),r[h]=1|e}}else r[s>>2]=0;re("BAR effective value: "+de(r[s>>2]>>>0),2048)}else 48===s?(re("PCI write rom address dev="+de(i>>3,2)+" ("+a.name+") value="+de(e>>>0,8),2048),a.pci_rom_size?r[s>>2]=-1==(2047|e)?0|-a.pci_rom_size:0|a.pci_rom_address:r[s>>2]=0):4===s?re("PCI write dev="+de(i>>3,2)+" ("+a.name+") addr="+de(s,4)+" value="+de(e>>>0,8),2048):(re("PCI write dev="+de(i>>3,2)+" ("+a.name+") addr="+de(s,4)+" value="+de(e>>>0,8),2048),r[s>>>2]=e)},Cs.prototype.register_device=function(t){ne(void 0!==t.pci_id),ne(void 0!==t.pci_space),ne(void 0!==t.pci_bars);var e=t.pci_id;re("PCI register bdf="+de(e)+" ("+t.name+")",2048),ne(!this.devices[e]),ne(t.pci_space.length>=64),ne(e<this.devices.length);var i=new Int32Array(64);i.set(new Int32Array(new Uint8Array(t.pci_space).buffer)),this.device_spaces[e]=i,this.devices[e]=t;for(var s=i.slice(4,10),r=0;r<t.pci_bars.length;r++){var a=t.pci_bars[r];if(a){var n=s[r],o=1&n;if(a.original_bar=n,a.entries=[],0===o);else{ne(1===o);for(var h=-2&n,_=0;_<a.size;_++)a.entries[_]=this.io.ports[h+_]}}}return i},Cs.prototype.set_io_bars=function(t,e,i){var s=t.size;re("Move io bars: from="+de(e)+" to="+de(i)+" count="+s,2048);for(var r=this.io.ports,a=0;a<s;a++){var n=r[e+a];r[e+a]=this.io.create_empty_entry(),n.read8===this.io.empty_port_read8&&n.read16===this.io.empty_port_read16&&n.read32===this.io.empty_port_read32&&n.write8===this.io.empty_port_write&&n.write16===this.io.empty_port_write&&n.write32===this.io.empty_port_write&&re("Warning: Bad IO bar: Source not mapped, port="+de(e+a,4),2048);var o=t.entries[a],h=r[i+a];ne(o&&h),r[i+a]=o,h.read8!==this.io.empty_port_read8&&h.read16!==this.io.empty_port_read16&&h.read32!==this.io.empty_port_read32&&h.write8!==this.io.empty_port_write&&h.write16!==this.io.empty_port_write&&h.write32!==this.io.empty_port_write||re("Warning: Bad IO bar: Target already mapped, port="+de(i+a,4),2048)}},Cs.prototype.raise_irq=function(t){var e=this.device_spaces[t];ne(e);var i=(e[15]>>8&255)-1+((t>>3)-1&255)&3,s=this.isa_bridge_space8[96+i];this.cpu.device_raise_irq(s)},Cs.prototype.lower_irq=function(t){var e=this.device_spaces[t];ne(e);var i=(e[15]>>8&255)+(t>>3&255)-2&3,s=this.isa_bridge_space8[96+i];this.cpu.device_lower_irq(s)};var zs=!1;function Os(t,e){var i,s;this.irq_mask=0,this.irq_map=0,this.isr=0,this.irr=0,this.irq_value=0,this.requested_irq=-1,this.master=e,this.is_master=void 0===this.master,this.slave=void 0,this.name=this.is_master?"master":"slave ",this.expect_icw4=!1,this.state=0,this.read_isr=0,this.auto_eoi=1,this.special_mask_mode=0,this.elcr=0,this.cpu=t,this.is_master?(this.slave=new Os(this.cpu,this),this.check_irqs=function(){if(this.requested_irq>=0)this.cpu.handle_irqs();else{var t=this.irr&this.irq_mask;if(t){var e=t&-t,i=this.special_mask_mode?this.irq_mask:-1;if(this.isr&&(this.isr&-this.isr&i)<=e)re("master> higher prio: isr="+de(this.isr,2)+" mask="+de(255&this.irq_mask,2)+" irq="+de(e,2),128);else{ne(0!==e);var s=_e.int_log2_byte(e);ne(e===1<<s),this.requested_irq=s,this.cpu.handle_irqs()}}}},this.acknowledge_irq=function(){if(-1!==this.requested_irq)if(0!==this.irr){ne(this.irr),ne(this.requested_irq>=0);var t=1<<this.requested_irq;0==(this.elcr&t)&&(this.irr&=~t),this.auto_eoi||(this.isr|=t),2===this.requested_irq?this.slave.acknowledge_irq():this.cpu.pic_call_irq(this.irq_map|this.requested_irq),this.requested_irq=-1,this.check_irqs()}else this.requested_irq=-1}):(this.check_irqs=function(){if(this.requested_irq>=0)this.cpu.handle_irqs();else{var t=this.irr&this.irq_mask;if(t){var e=t&-t,i=this.special_mask_mode?this.irq_mask:-1;if(!(this.isr&&(this.isr&-this.isr&i)<=e)){ne(0!==e);var s=_e.int_log2_byte(e);ne(e===1<<s),this.requested_irq=s,this.master.set_irq(2)}}}},this.acknowledge_irq=function(){if(-1!==this.requested_irq){if(0===this.irr)return this.requested_irq=-1,this.master.irq_value&=-5,void this.cpu.pic_call_irq(7|this.irq_map);ne(this.irr),ne(this.requested_irq>=0);var t=1<<this.requested_irq;0==(this.elcr&t)&&(this.irr&=~t),this.auto_eoi||(this.isr|=t),this.master.irq_value&=-5,this.cpu.pic_call_irq(this.irq_map|this.requested_irq),this.requested_irq=-1,this.check_irqs()}}),this.dump=function(){re("mask: "+de(255&this.irq_mask),128),re("base: "+de(this.irq_map),128),re("requested: "+de(this.irr),128),re("serviced: "+de(this.isr),128),this.is_master&&this.slave.dump()},this.is_master?(i=32,s=1232):(i=160,s=1233),this.cpu.io.register_write(i,this,this.port20_write),this.cpu.io.register_read(i,this,this.port20_read),this.cpu.io.register_write(1|i,this,this.port21_write),this.cpu.io.register_read(1|i,this,this.port21_read),this.cpu.io.register_write(s,this,this.port4D0_write),this.cpu.io.register_read(s,this,this.port4D0_read),this.is_master?(this.set_irq=function(t){if(ne(t>=0&&t<16),t>=8)this.slave.set_irq(t-8);else{var e=1<<t;0==(this.irq_value&e)&&(this.irr|=e,this.irq_value|=e,this.check_irqs())}},this.clear_irq=function(t){if(ne(t>=0&&t<16),t>=8)this.slave.clear_irq(t-8);else{var e=1<<t;this.irq_value&e&&(this.irq_value&=~e,this.irr&=~e,this.check_irqs())}}):(this.set_irq=function(t){ne(t>=0&&t<8);var e=1<<t;0==(this.irq_value&e)&&(this.irr|=e,this.irq_value|=e,this.check_irqs())},this.clear_irq=function(t){ne(t>=0&&t<8);var e=1<<t;this.irq_value&e&&(this.irq_value&=~e,this.irr&=~e,this.check_irqs())}),this.get_isr=function(){return this.isr}}Os.prototype.get_state=function(){var t=[];return t[0]=this.irq_mask,t[1]=this.irq_map,t[2]=this.isr,t[3]=this.irr,t[4]=this.is_master,t[5]=this.slave,t[6]=this.expect_icw4,t[7]=this.state,t[8]=this.read_isr,t[9]=this.auto_eoi,t[10]=this.elcr,t},Os.prototype.set_state=function(t){this.irq_mask=t[0],this.irq_map=t[1],this.isr=t[2],this.irr=t[3],this.is_master=t[4],this.slave&&this.slave.set_state(t[5]),this.expect_icw4=t[6],this.state=t[7],this.read_isr=t[8],this.auto_eoi=t[9],this.elcr=t[10]},Os.prototype.port20_write=function(t){if(16&t)re("icw1 = "+de(t),128),this.isr=0,this.irr=0,this.irq_mask=0,this.irq_value=0,this.auto_eoi=1,this.requested_irq=-1,this.expect_icw4=1&t,this.state=1;else if(8&t)re("ocw3: "+de(t),128),2&t&&(this.read_isr=1&t),4&t&&ne(!1,"unimplemented: polling"),64&t&&(this.special_mask_mode=32==(32&t),re("special mask mode: "+this.special_mask_mode,128));else{re("eoi: "+de(t)+" ("+this.name+")",128);var e=t>>5;if(1===e)this.isr&=this.isr-1,re("new isr: "+de(this.isr,2),128);else if(3===e)this.isr&=~(1<<(7&t));else if(192==(200&t)){re("lowest priority: "+de(7&t),128)}else re("Unknown eoi: "+de(t),128),ne(!1),this.isr&=this.isr-1;this.check_irqs()}},Os.prototype.port20_read=function(){return this.read_isr?(re("read port 20h (isr): "+de(this.isr),128),this.isr):(re("read port 20h (irr): "+de(this.irr),128),this.irr)},Os.prototype.port21_write=function(t){0===this.state?this.expect_icw4?(this.expect_icw4=!1,this.auto_eoi=2&t,re("icw4: "+de(t)+" autoeoi="+this.auto_eoi,128),0==(1&t)&&ne(!1,"unimplemented: not 8086 mode")):(this.irq_mask=~t,this.check_irqs()):1===this.state?(this.irq_map=t,re("interrupts are mapped to "+de(this.irq_map)+" ("+this.name+")",128),this.state++):2===this.state&&(this.state=0,re("icw3: "+de(t),128))},Os.prototype.port21_read=function(){return re("21h read "+de(255&~this.irq_mask),128),255&~this.irq_mask},Os.prototype.port4D0_read=function(){return re("elcr read: "+de(this.elcr,2),128),this.elcr},Os.prototype.port4D0_write=function(t){re("elcr write: "+de(t,2),128),this.elcr=t};var Rs=1193.1816666;function Ls(t,e){this.cpu=t,this.bus=e,this.counter_start_time=new Float64Array(3),this.counter_start_value=new Uint16Array(3),this.counter_next_low=new Uint8Array(4),this.counter_enabled=new Uint8Array(4),this.counter_mode=new Uint8Array(4),this.counter_read_mode=new Uint8Array(4),this.counter_latch=new Uint8Array(4),this.counter_latch_value=new Uint16Array(3),this.counter_reload=new Uint16Array(3),t.io.register_read(97,this,(function(){var t=Pi.microtick();return(t*(1e6/15e3)&1)<<4|this.did_rollover(2,t)<<5})),t.io.register_write(97,this,(function(t){1&t?this.bus.send("pcspeaker-enable"):this.bus.send("pcspeaker-disable")})),t.io.register_read(64,this,(function(){return this.counter_read(0)})),t.io.register_read(65,this,(function(){return this.counter_read(1)})),t.io.register_read(66,this,(function(){return this.counter_read(2)})),t.io.register_write(64,this,(function(t){this.counter_write(0,t)})),t.io.register_write(65,this,(function(t){this.counter_write(1,t)})),t.io.register_write(66,this,(function(t){this.counter_write(2,t),this.bus.send("pcspeaker-update",[this.counter_mode[2],this.counter_reload[2]])})),t.io.register_write(67,this,this.port43_write)}Ls.prototype.get_state=function(){var t=[];return t[0]=this.counter_next_low,t[1]=this.counter_enabled,t[2]=this.counter_mode,t[3]=this.counter_read_mode,t[4]=this.counter_latch,t[5]=this.counter_latch_value,t[6]=this.counter_reload,t[7]=this.counter_start_time,t[8]=this.counter_start_value,t},Ls.prototype.set_state=function(t){this.counter_next_low=t[0],this.counter_enabled=t[1],this.counter_mode=t[2],this.counter_read_mode=t[3],this.counter_latch=t[4],this.counter_latch_value=t[5],this.counter_reload=t[6],this.counter_start_time=t[7],this.counter_start_value=t[8]},Ls.prototype.timer=function(t,e){var i=100;if(!e){if(this.counter_enabled[0]&&this.did_rollover(0,t))this.counter_start_value[0]=this.get_counter_value(0,t),this.counter_start_time[0]=t,re("pit interrupt. new value: "+this.counter_start_value[0],512),this.cpu.device_lower_irq(0),this.cpu.device_raise_irq(0),0===this.counter_mode[0]&&(this.counter_enabled[0]=0);else this.cpu.device_lower_irq(0);if(this.counter_enabled[0]){const e=t-this.counter_start_time[0],s=Math.floor(1193.1816666*e);i=(this.counter_start_value[0]-s)/1193.1816666}}return i},Ls.prototype.get_counter_value=function(t,e){if(!this.counter_enabled[t])return 0;var i=e-this.counter_start_time[t],s=Math.floor(1193.1816666*i),r=this.counter_start_value[t]-s;re("diff="+i+" dticks="+s+" value="+r+" reload="+this.counter_reload[t],512);var a=this.counter_reload[t];return r>=a?(re("Warning: Counter"+t+" value "+r+" is larger than reload "+a,512),r%=a):r<0&&(r=r%a+a),r},Ls.prototype.did_rollover=function(t,e){var i=e-this.counter_start_time[t];if(i<0)return re("Warning: PIT timer difference is negative, resetting (timer "+t+")"),!0;var s=Math.floor(1193.1816666*i);return this.counter_start_value[t]<s},Ls.prototype.counter_read=function(t){var e=this.counter_latch[t];if(e)return this.counter_latch[t]--,2===e?255&this.counter_latch_value[t]:this.counter_latch_value[t]>>8;var i=this.counter_next_low[t];3===this.counter_mode[t]&&(this.counter_next_low[t]^=1);var s=this.get_counter_value(t,Pi.microtick());return i?255&s:s>>8},Ls.prototype.counter_write=function(t,e){this.counter_next_low[t]?this.counter_reload[t]=-256&this.counter_reload[t]|e:this.counter_reload[t]=255&this.counter_reload[t]|e<<8,3===this.counter_read_mode[t]&&this.counter_next_low[t]||(this.counter_reload[t]||(this.counter_reload[t]=65535),this.counter_start_value[t]=this.counter_reload[t],this.counter_enabled[t]=!0,this.counter_start_time[t]=Pi.microtick(),re("counter"+t+" reload="+de(this.counter_reload[t])+" tick="+(this.counter_reload[t]||65536)/1193.1816666+"ms",512)),3===this.counter_read_mode[t]&&(this.counter_next_low[t]^=1)},Ls.prototype.port43_write=function(t){var e=t>>1&7,i=1&t,s=t>>6&3,r=t>>4&3;if(1===s&&re("Unimplemented timer1",512),3!==s){if(0===r){this.counter_latch[s]=2;var a=this.get_counter_value(s,Pi.microtick());return re("latch: "+a,512),void(this.counter_latch_value[s]=a?a-1:0)}e>=6&&(e&=-5),re("Control: mode="+e+" ctr="+s+" read_mode="+r+" bcd="+i,512),this.counter_next_low[s]=1===r?0:1,0===s&&this.cpu.device_lower_irq(0),0===e||3===e||2===e||re("Unimplemented counter mode: "+de(e),512),this.counter_mode[s]=e,this.counter_read_mode[s]=r,2===s&&this.bus.send("pcspeaker-update",[this.counter_mode[2],this.counter_reload[2]])}else re("Unimplemented read back",512)},Ls.prototype.dump=function(){const t=this.counter_reload[0];re("counter0 ticks every "+(t||65536)/1193.1816666+"ms (reload="+t+")")};let Es=!1;function Ps(t,e){this.cpu=t,this.bus=e,this.enable_mouse_stream=!1,this.use_mouse=!1,this.have_mouse=!0,this.mouse_delta_x=0,this.mouse_delta_y=0,this.mouse_clicks=0,this.have_keyboard=!0,this.enable_keyboard_stream=!1,this.next_is_mouse_command=!1,this.next_read_sample=!1,this.next_read_led=!1,this.next_handle_scan_code_set=!1,this.next_read_rate=!1,this.next_read_resolution=!1,this.kbd_buffer=new ue(1024),this.last_port60_byte=0,this.sample_rate=100,this.resolution=4,this.scaling2=!1,this.last_mouse_packet=-1,this.mouse_buffer=new ue(1024),this.next_byte_is_ready=!1,this.next_byte_is_aux=!1,this.bus.register("keyboard-code",(function(t){this.kbd_send_code(t)}),this),this.bus.register("mouse-click",(function(t){this.mouse_send_click(t[0],t[1],t[2])}),this),this.bus.register("mouse-delta",(function(t){this.mouse_send_delta(t[0],t[1])}),this),this.bus.register("mouse-wheel",(function(t){}),this),this.command_register=5,this.controller_output_port=0,this.read_output_register=!1,this.read_command_register=!1,this.read_controller_output_port=!1,t.io.register_read(96,this,this.port60_read),t.io.register_read(100,this,this.port64_read),t.io.register_write(96,this,this.port60_write),t.io.register_write(100,this,this.port64_write)}Ps.prototype.get_state=function(){var t=[];return t[0]=this.enable_mouse_stream,t[1]=this.use_mouse,t[2]=this.have_mouse,t[3]=this.mouse_delta_x,t[4]=this.mouse_delta_y,t[5]=this.mouse_clicks,t[6]=this.have_keyboard,t[7]=this.enable_keyboard_stream,t[8]=this.next_is_mouse_command,t[9]=this.next_read_sample,t[10]=this.next_read_led,t[11]=this.next_handle_scan_code_set,t[12]=this.next_read_rate,t[13]=this.next_read_resolution,t[15]=this.last_port60_byte,t[16]=this.sample_rate,t[17]=this.resolution,t[18]=this.scaling2,t[20]=this.command_register,t[21]=this.read_output_register,t[22]=this.read_command_register,t[23]=this.controller_output_port,t[24]=this.read_controller_output_port,t},Ps.prototype.set_state=function(t){this.enable_mouse_stream=t[0],this.use_mouse=t[1],this.have_mouse=t[2],this.mouse_delta_x=t[3],this.mouse_delta_y=t[4],this.mouse_clicks=t[5],this.have_keyboard=t[6],this.enable_keyboard_stream=t[7],this.next_is_mouse_command=t[8],this.next_read_sample=t[9],this.next_read_led=t[10],this.next_handle_scan_code_set=t[11],this.next_read_rate=t[12],this.next_read_resolution=t[13],this.last_port60_byte=t[15],this.sample_rate=t[16],this.resolution=t[17],this.scaling2=t[18],this.command_register=t[20],this.read_output_register=t[21],this.read_command_register=t[22],this.controller_output_port=t[23],this.read_controller_output_port=t[24],this.next_byte_is_ready=!1,this.next_byte_is_aux=!1,this.kbd_buffer.clear(),this.mouse_buffer.clear(),this.bus.send("mouse-enable",this.use_mouse)},Ps.prototype.raise_irq=function(){this.next_byte_is_ready||(this.kbd_buffer.length?this.kbd_irq():this.mouse_buffer.length&&this.mouse_irq())},Ps.prototype.mouse_irq=function(){this.next_byte_is_ready=!0,this.next_byte_is_aux=!0,2&this.command_register&&(re("Mouse irq",64),this.cpu.device_lower_irq(12),this.cpu.device_raise_irq(12))},Ps.prototype.kbd_irq=function(){this.next_byte_is_ready=!0,this.next_byte_is_aux=!1,1&this.command_register&&(re("Keyboard irq",64),this.cpu.device_lower_irq(1),this.cpu.device_raise_irq(1))},Ps.prototype.kbd_send_code=function(t){this.enable_keyboard_stream&&(re("adding kbd code: "+de(t),64),this.kbd_buffer.push(t),this.raise_irq())},Ps.prototype.mouse_send_delta=function(t,e){if(this.have_mouse&&this.use_mouse){var i=this.resolution*this.sample_rate/80;if(this.mouse_delta_x+=t*i,this.mouse_delta_y+=e*i,this.enable_mouse_stream){var s=0|this.mouse_delta_x,r=0|this.mouse_delta_y;(s||r)&&(this.mouse_delta_x-=s,this.mouse_delta_y-=r,this.send_mouse_packet(s,r))}}},Ps.prototype.mouse_send_click=function(t,e,i){this.have_mouse&&this.use_mouse&&(this.mouse_clicks=t|i<<1|e<<2,this.enable_mouse_stream&&this.send_mouse_packet(0,0))},Ps.prototype.send_mouse_packet=function(t,e){var i=(e<0)<<5|(t<0)<<4|8|this.mouse_clicks,s=t,r=e;this.last_mouse_packet=Date.now(),this.mouse_buffer.push(i),this.mouse_buffer.push(s),this.mouse_buffer.push(r),this.raise_irq()},Ps.prototype.apply_scaling2=function(t){var e=t>>31;switch(Math.abs(t)){case 0:case 1:case 3:return t;case 2:return e;case 4:return 6*e;case 5:return 9*e;default:return t<<1}},Ps.prototype.port60_read=function(){return this.next_byte_is_ready=!1,this.kbd_buffer.length||this.mouse_buffer.length?(this.next_byte_is_aux?(this.cpu.device_lower_irq(12),this.last_port60_byte=this.mouse_buffer.shift(),re("Port 60 read (mouse): "+de(this.last_port60_byte),64)):(this.cpu.device_lower_irq(1),this.last_port60_byte=this.kbd_buffer.shift(),re("Port 60 read (kbd) : "+de(this.last_port60_byte),64)),(this.kbd_buffer.length||this.mouse_buffer.length)&&this.raise_irq(),this.last_port60_byte):(re("Port 60 read: Empty",64),this.last_port60_byte)},Ps.prototype.port64_read=function(){var t=16;return this.next_byte_is_ready&&(t|=1),this.next_byte_is_aux&&(t|=32),re("port 64 read: "+de(t),64),t},Ps.prototype.port60_write=function(t){if(re("port 60 write: "+de(t),64),this.read_command_register)this.command_register=t,this.read_command_register=!1,re("Keyboard command register = "+de(this.command_register),64);else if(this.read_output_register)this.read_output_register=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(t),this.mouse_irq();else if(this.next_read_sample)this.next_read_sample=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(250),this.sample_rate=t,re("mouse sample rate: "+de(t),64),this.sample_rate||(re("invalid sample rate, reset to 100",64),this.sample_rate=100),this.mouse_irq();else if(this.next_read_resolution)this.next_read_resolution=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(250),t>3?(this.resolution=4,re("invalid resolution, resetting to 4",64)):(this.resolution=1<<t,re("resolution: "+this.resolution,64)),this.mouse_irq();else if(this.next_read_led)this.next_read_led=!1,this.kbd_buffer.push(250),this.kbd_irq();else if(this.next_handle_scan_code_set)this.next_handle_scan_code_set=!1,this.kbd_buffer.push(250),this.kbd_irq(),t||this.kbd_buffer.push(2);else if(this.next_read_rate)this.next_read_rate=!1,this.kbd_buffer.push(250),this.kbd_irq();else if(this.next_is_mouse_command){if(this.next_is_mouse_command=!1,re("Port 60 data register write: "+de(t),64),!this.have_mouse)return;switch(this.kbd_buffer.clear(),this.mouse_buffer.clear(),this.mouse_buffer.push(250),t){case 230:re("Scaling 1:1",64),this.scaling2=!1;break;case 231:re("Scaling 2:1",64),this.scaling2=!0;break;case 232:this.next_read_resolution=!0;break;case 233:this.send_mouse_packet(0,0);break;case 235:re("unimplemented request single packet",64),this.send_mouse_packet(0,0);break;case 242:this.mouse_buffer.push(0),this.mouse_buffer.push(0),this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;case 243:this.next_read_sample=!0;break;case 244:this.enable_mouse_stream=!0,this.use_mouse=!0,this.bus.send("mouse-enable",!0),this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;case 245:this.enable_mouse_stream=!1;break;case 246:this.enable_mouse_stream=!1,this.sample_rate=100,this.scaling2=!1,this.resolution=4;break;case 255:re("Mouse reset",64),this.mouse_buffer.push(170),this.mouse_buffer.push(0),this.use_mouse=!0,this.bus.send("mouse-enable",!0),this.enable_mouse_stream=!1,this.sample_rate=100,this.scaling2=!1,this.resolution=4,this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;default:re("Unimplemented mouse command: "+de(t),64)}this.mouse_irq()}else if(this.read_controller_output_port)this.read_controller_output_port=!1,this.controller_output_port=t;else{switch(re("Port 60 data register write: "+de(t),64),this.mouse_buffer.clear(),this.kbd_buffer.clear(),this.kbd_buffer.push(250),t){case 237:this.next_read_led=!0;break;case 240:this.next_handle_scan_code_set=!0;break;case 242:this.kbd_buffer.push(171),this.kbd_buffer.push(83);break;case 243:this.next_read_rate=!0;break;case 244:re("kbd enable scanning",64),this.enable_keyboard_stream=!0;break;case 245:re("kbd disable scanning",64),this.enable_keyboard_stream=!1;break;case 246:break;case 255:this.kbd_buffer.clear(),this.kbd_buffer.push(250),this.kbd_buffer.push(170),this.kbd_buffer.push(0);break;default:re("Unimplemented keyboard command: "+de(t),64)}this.kbd_irq()}},Ps.prototype.port64_write=function(t){switch(re("port 64 write: "+de(t),64),t){case 32:this.kbd_buffer.clear(),this.mouse_buffer.clear(),this.kbd_buffer.push(this.command_register),this.kbd_irq();break;case 96:this.read_command_register=!0;break;case 209:this.read_controller_output_port=!0;break;case 211:this.read_output_register=!0;break;case 212:this.next_is_mouse_command=!0;break;case 167:re("Disable second port",64),this.command_register|=32;break;case 168:re("Enable second port",64),this.command_register&=-33;break;case 169:case 171:this.kbd_buffer.clear(),this.mouse_buffer.clear(),this.kbd_buffer.push(0),this.kbd_irq();break;case 170:this.kbd_buffer.clear(),this.mouse_buffer.clear(),this.kbd_buffer.push(85),this.kbd_irq();break;case 173:re("Disable Keyboard",64),this.command_register|=16;break;case 174:re("Enable Keyboard",64),this.command_register&=-17;break;case 254:re("CPU reboot via PS2"),this.cpu.reboot_internal();break;default:re("port 64: Unimplemented command byte: "+de(t),64)}};var Ts="COPYRIGHT (C) CREATIVE TECHNOLOGY LTD, 1992.",Ds=0,Us=64,Gs=65536,Ss=65536,Ms=1024,Fs=0,Vs=1,Bs=3,Ns=5,Ws=6,js=7,Ks=1,Xs=5,Hs=2,Ys=5,Qs=7,Js=10,Zs=5,$s=1,tr=2,er=1,ir=4,sr=new Uint8Array(256),rr=[],ar=[],nr=[],or=new Uint8Array(256),hr=[];function _r(t,e){this.cpu=t,this.bus=e,this.write_buffer=new ue(64),this.read_buffer=new ue(64),this.read_buffer_lastvalue=0,this.command=0,this.command_size=0,this.mixer_current_address=0,this.mixer_registers=new Uint8Array(256),this.mixer_reset(),this.dummy_speaker_enabled=!1,this.test_register=0,this.dsp_highspeed=!1,this.dsp_stereo=!1,this.dsp_16bit=!1,this.dsp_signed=!1,this.dac_buffers=[new pe(65536),new pe(65536)],this.dma=t.devices.dma,this.dma_sample_count=0,this.dma_bytes_count=0,this.dma_bytes_left=0,this.dma_bytes_block=0,this.dma_irq=0,this.dma_channel=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=new Int16Array(this.dma_buffer),this.dma_buffer_uint16=new Uint16Array(this.dma_buffer),this.dma_syncbuffer=new ce(this.dma_buffer),this.dma_waiting_transfer=!1,this.dma_paused=!1,this.sampling_rate=22050,e.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 ue(64),this.mpu_read_buffer_lastvalue=0,this.fm_current_address0=0,this.fm_current_address1=0,this.fm_waveform_select_enable=!1,this.irq=5,this.irq_triggered=new Uint8Array(16),t.io.register_read_consecutive(544,this,this.port2x0_read,this.port2x1_read,this.port2x2_read,this.port2x3_read),t.io.register_read_consecutive(904,this,this.port2x0_read,this.port2x1_read),t.io.register_read_consecutive(548,this,this.port2x4_read,this.port2x5_read),t.io.register_read(550,this,this.port2x6_read),t.io.register_read(551,this,this.port2x7_read),t.io.register_read(552,this,this.port2x8_read),t.io.register_read(553,this,this.port2x9_read),t.io.register_read(554,this,this.port2xA_read),t.io.register_read(555,this,this.port2xB_read),t.io.register_read(556,this,this.port2xC_read),t.io.register_read(557,this,this.port2xD_read),t.io.register_read_consecutive(558,this,this.port2xE_read,this.port2xF_read),t.io.register_write_consecutive(544,this,this.port2x0_write,this.port2x1_write,this.port2x2_write,this.port2x3_write),t.io.register_write_consecutive(904,this,this.port2x0_write,this.port2x1_write),t.io.register_write_consecutive(548,this,this.port2x4_write,this.port2x5_write),t.io.register_write(550,this,this.port2x6_write),t.io.register_write(551,this,this.port2x7_write),t.io.register_write_consecutive(552,this,this.port2x8_write,this.port2x9_write),t.io.register_write(554,this,this.port2xA_write),t.io.register_write(555,this,this.port2xB_write),t.io.register_write(556,this,this.port2xC_write),t.io.register_write(557,this,this.port2xD_write),t.io.register_write(558,this,this.port2xE_write),t.io.register_write(559,this,this.port2xF_write),t.io.register_read_consecutive(816,this,this.port3x0_read,this.port3x1_read),t.io.register_write_consecutive(816,this,this.port3x0_write,this.port3x1_write),this.dma.on_unmask(this.dma_on_unmask,this),e.register("dac-request-data",(function(){this.dac_handle_request()}),this),e.register("speaker-has-initialized",(function(){this.mixer_reset()}),this),e.send("speaker-confirm-initialized"),this.dsp_reset()}function dr(t,e,i){i||(i=_r.prototype.dsp_default_handler);for(var s=0;s<t.length;s++)sr[t[s]]=e,rr[t[s]]=i}function cr(t){for(var e=[],i=0;i<16;i++)e.push(t+i);return e}_r.prototype.dsp_reset=function(){this.write_buffer.clear(),this.read_buffer.clear(),this.command=0,this.command_size=0,this.dummy_speaker_enabled=!1,this.test_register=0,this.dsp_highspeed=!1,this.dsp_stereo=!1,this.dsp_16bit=!1,this.dsp_signed=!1,this.dac_buffers[0].clear(),this.dac_buffers[1].clear(),this.dma_sample_count=0,this.dma_bytes_count=0,this.dma_bytes_left=0,this.dma_bytes_block=0,this.dma_irq=0,this.dma_channel=0,this.dma_autoinit=!1,this.dma_buffer_uint8.fill(0),this.dma_waiting_transfer=!1,this.dma_paused=!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),this.asp_registers[5]=1,this.asp_registers[9]=248},_r.prototype.get_state=function(){var t=[];return t[2]=this.read_buffer_lastvalue,t[3]=this.command,t[4]=this.command_size,t[5]=this.mixer_current_address,t[6]=this.mixer_registers,t[7]=this.dummy_speaker_enabled,t[8]=this.test_register,t[9]=this.dsp_highspeed,t[10]=this.dsp_stereo,t[11]=this.dsp_16bit,t[12]=this.dsp_signed,t[15]=this.dma_sample_count,t[16]=this.dma_bytes_count,t[17]=this.dma_bytes_left,t[18]=this.dma_bytes_block,t[19]=this.dma_irq,t[20]=this.dma_channel,t[21]=this.dma_channel_8bit,t[22]=this.dma_channel_16bit,t[23]=this.dma_autoinit,t[24]=this.dma_buffer_uint8,t[25]=this.dma_waiting_transfer,t[26]=this.dma_paused,t[27]=this.sampling_rate,t[28]=this.bytes_per_sample,t[29]=this.e2_value,t[30]=this.e2_count,t[31]=this.asp_registers,t[33]=this.mpu_read_buffer_last_value,t[34]=this.irq,t[35]=this.irq_triggered,t},_r.prototype.set_state=function(t){this.read_buffer_lastvalue=t[2],this.command=t[3],this.command_size=t[4],this.mixer_current_address=t[5],this.mixer_registers=t[6],this.mixer_full_update(),this.dummy_speaker_enabled=t[7],this.test_register=t[8],this.dsp_highspeed=t[9],this.dsp_stereo=t[10],this.dsp_16bit=t[11],this.dsp_signed=t[12],this.dma_sample_count=t[15],this.dma_bytes_count=t[16],this.dma_bytes_left=t[17],this.dma_bytes_block=t[18],this.dma_irq=t[19],this.dma_channel=t[20],this.dma_channel_8bit=t[21],this.dma_channel_16bit=t[22],this.dma_autoinit=t[23],this.dma_buffer_uint8=t[24],this.dma_waiting_transfer=t[25],this.dma_paused=t[26],this.sampling_rate=t[27],this.bytes_per_sample=t[28],this.e2_value=t[29],this.e2_count=t[30],this.asp_registers=t[31],this.mpu_read_buffer_last_value=t[33],this.irq=t[34],this.irq_triggered=t[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 ce(this.dma_buffer),this.dma_paused?this.bus.send("dac-disable"):this.bus.send("dac-enable")},_r.prototype.port2x0_read=function(){return re("220 read: fm music status port (unimplemented)",8388608),255},_r.prototype.port2x1_read=function(){return re("221 read: fm music data port (write only)",8388608),255},_r.prototype.port2x2_read=function(){return re("222 read: advanced fm music status port (unimplemented)",8388608),255},_r.prototype.port2x3_read=function(){return re("223 read: advanced music data port (write only)",8388608),255},_r.prototype.port2x4_read=function(){return re("224 read: mixer address port",8388608),this.mixer_current_address},_r.prototype.port2x5_read=function(){return re("225 read: mixer data port",8388608),this.mixer_read(this.mixer_current_address)},_r.prototype.port2x6_read=function(){return re("226 read: (write only)",8388608),255},_r.prototype.port2x7_read=function(){return re("227 read: undocumented",8388608),255},_r.prototype.port2x8_read=function(){return re("228 read: fm music status port (unimplemented)",8388608),255},_r.prototype.port2x9_read=function(){return re("229 read: fm music data port (write only)",8388608),255},_r.prototype.port2xA_read=function(){return re("22A read: read data",8388608),this.read_buffer.length&&(this.read_buffer_lastvalue=this.read_buffer.shift()),re(" <- "+this.read_buffer_lastvalue+" "+de(this.read_buffer_lastvalue)+" '"+String.fromCharCode(this.read_buffer_lastvalue)+"'",8388608),this.read_buffer_lastvalue},_r.prototype.port2xB_read=function(){return re("22B read: undocumented",8388608),255},_r.prototype.port2xC_read=function(){return re("22C read: write-buffer status",8388608),127},_r.prototype.port2xD_read=function(){return re("22D read: undocumented",8388608),255},_r.prototype.port2xE_read=function(){return re("22E read: read-buffer status / irq 8bit ack.",8388608),this.irq_triggered[1]&&this.lower_irq(1),(this.read_buffer.length&&!this.dsp_highspeed)<<7|127},_r.prototype.port2xF_read=function(){return re("22F read: irq 16bit ack",8388608),this.lower_irq(2),0},_r.prototype.port2x0_write=function(t){re("220 write: (unimplemented) fm register 0 address = "+de(t),8388608),this.fm_current_address0=0},_r.prototype.port2x1_write=function(t){re("221 write: (unimplemented) fm register 0 data = "+de(t),8388608);var e=hr[this.fm_current_address0];e||(e=this.fm_default_write),e.call(this,t,0,this.fm_current_address0)},_r.prototype.port2x2_write=function(t){re("222 write: (unimplemented) fm register 1 address = "+de(t),8388608),this.fm_current_address1=0},_r.prototype.port2x3_write=function(t){re("223 write: (unimplemented) fm register 1 data ="+de(t),8388608);var e=hr[this.fm_current_address1];e||(e=this.fm_default_write),e.call(this,t,1,this.fm_current_address1)},_r.prototype.port2x4_write=function(t){re("224 write: mixer address = "+de(t),8388608),this.mixer_current_address=t},_r.prototype.port2x5_write=function(t){re("225 write: mixer data = "+de(t),8388608),this.mixer_write(this.mixer_current_address,t)},_r.prototype.port2x6_write=function(t){re("226 write: reset = "+de(t),8388608),this.dsp_highspeed?(re(" -> exit highspeed",8388608),this.dsp_highspeed=!1):t&&(re(" -> reset",8388608),this.dsp_reset()),this.read_buffer.clear(),this.read_buffer.push(170)},_r.prototype.port2x7_write=function(t){re("227 write: undocumented",8388608)},_r.prototype.port2x8_write=function(t){re("228 write: fm music register port (unimplemented)",8388608)},_r.prototype.port2x9_write=function(t){re("229 write: fm music data port (unimplemented)",8388608)},_r.prototype.port2xA_write=function(t){re("22A write: dsp read data port (read only)",8388608)},_r.prototype.port2xB_write=function(t){re("22B write: undocumented",8388608)},_r.prototype.port2xC_write=function(t){re("22C write: write command/data",8388608),0===this.command?(re("22C write: command = "+de(t),8388608),this.command=t,this.write_buffer.clear(),this.command_size=sr[t]):(re("22C write: data: "+de(t),8388608),this.write_buffer.push(t)),this.write_buffer.length>=this.command_size&&this.command_do()},_r.prototype.port2xD_write=function(t){re("22D write: undocumented",8388608)},_r.prototype.port2xE_write=function(t){re("22E write: dsp read buffer status (read only)",8388608)},_r.prototype.port2xF_write=function(t){re("22F write: undocumented",8388608)},_r.prototype.port3x0_read=function(){return re("330 read: mpu data",8388608),this.mpu_read_buffer.length&&(this.mpu_read_buffer_lastvalue=this.mpu_read_buffer.shift()),re(" <- "+de(this.mpu_read_buffer_lastvalue),8388608),this.mpu_read_buffer_lastvalue},_r.prototype.port3x0_write=function(t){re("330 write: mpu data (unimplemented) : "+de(t),8388608)},_r.prototype.port3x1_read=function(){re("331 read: mpu status",8388608);var t=0;return t|=0,t|=128*!this.mpu_read_buffer.length},_r.prototype.port3x1_write=function(t){re("331 write: mpu command: "+de(t),8388608),255==t&&(this.mpu_read_buffer.clear(),this.mpu_read_buffer.push(254))},_r.prototype.command_do=function(){var t=rr[this.command];t||(t=this.dsp_default_handler),t.call(this),this.command=0,this.command_size=0,this.write_buffer.clear()},_r.prototype.dsp_default_handler=function(){re("Unhandled command: "+de(this.command),8388608)},dr([14],2,(function(){this.asp_registers[this.write_buffer.shift()]=this.write_buffer.shift()})),dr([15],1,(function(){this.read_buffer.clear(),this.read_buffer.push(this.asp_registers[this.write_buffer.shift()])})),dr([16],1,(function(){var t=wr(this.write_buffer.shift(),127.5,-1);this.dac_buffers[0].push(t),this.dac_buffers[1].push(t),this.bus.send("dac-enable")})),dr([20,21],2,(function(){this.dma_irq=1,this.dma_channel=this.dma_channel_8bit,this.dma_autoinit=!1,this.dsp_signed=!1,this.dsp_16bit=!1,this.dsp_highspeed=!1,this.dma_transfer_size_set(),this.dma_transfer_start()})),dr([22],2),dr([23],2),dr([28],0,(function(){this.dma_irq=1,this.dma_channel=this.dma_channel_8bit,this.dma_autoinit=!0,this.dsp_signed=!1,this.dsp_16bit=!1,this.dsp_highspeed=!1,this.dma_transfer_start()})),dr([31],0),dr([32],0,(function(){this.read_buffer.clear(),this.read_buffer.push(127)})),dr([36],2),dr([44],0),dr([48],0),dr([49],0),dr([52],0),dr([53],0),dr([54],0),dr([55],0),dr([56],0),dr([64],1,(function(){this.sampling_rate_change(1e6/(256-this.write_buffer.shift())/this.get_channel_count())})),dr([65,66],2,(function(){this.sampling_rate_change(this.write_buffer.shift()<<8|this.write_buffer.shift())})),dr([72],2,(function(){this.dma_transfer_size_set()})),dr([116],2),dr([117],2),dr([118],2),dr([119],2),dr([125],0),dr([127],0),dr([128],2),dr([144],0,(function(){this.dma_irq=1,this.dma_channel=this.dma_channel_8bit,this.dma_autoinit=!0,this.dsp_signed=!1,this.dsp_highspeed=!0,this.dsp_16bit=!1,this.dma_transfer_start()})),dr([145],0),dr([152],0),dr([153],0),dr([160],0),dr([168],0),dr(cr(176),3,(function(){if(8&this.command)this.dsp_default_handler();else{var t=this.write_buffer.shift();this.dma_irq=2,this.dma_channel=this.dma_channel_16bit,this.dma_autoinit=!!(4&this.command),this.dsp_signed=!!(16&t),this.dsp_stereo=!!(32&t),this.dsp_16bit=!0,this.dma_transfer_size_set(),this.dma_transfer_start()}})),dr(cr(192),3,(function(){if(8&this.command)this.dsp_default_handler();else{var t=this.write_buffer.shift();this.dma_irq=1,this.dma_channel=this.dma_channel_8bit,this.dma_autoinit=!!(4&this.command),this.dsp_signed=!!(16&t),this.dsp_stereo=!!(32&t),this.dsp_16bit=!1,this.dma_transfer_size_set(),this.dma_transfer_start()}})),dr([208],0,(function(){this.dma_paused=!0,this.bus.send("dac-disable")})),dr([209],0,(function(){this.dummy_speaker_enabled=!0})),dr([211],0,(function(){this.dummy_speaker_enabled=!1})),dr([212],0,(function(){this.dma_paused=!1,this.bus.send("dac-enable")})),dr([213],0,(function(){this.dma_paused=!0,this.bus.send("dac-disable")})),dr([214],0,(function(){this.dma_paused=!1,this.bus.send("dac-enable")})),dr([216],0,(function(){this.read_buffer.clear(),this.read_buffer.push(255*this.dummy_speaker_enabled)})),dr([217,218],0,(function(){this.dma_autoinit=!1})),dr([224],1,(function(){this.read_buffer.clear(),this.read_buffer.push(~this.write_buffer.shift())})),dr([225],0,(function(){this.read_buffer.clear(),this.read_buffer.push(4),this.read_buffer.push(5)})),dr([226],1),dr([227],0,(function(){this.read_buffer.clear();for(var t=0;t<Ts.length;t++)this.read_buffer.push(Ts.charCodeAt(t));this.read_buffer.push(0)})),dr([228],1,(function(){this.test_register=this.write_buffer.shift()})),dr([232],0,(function(){this.read_buffer.clear(),this.read_buffer.push(this.test_register)})),dr([242,243],0,(function(){this.raise_irq()}));var ur=new Uint8Array(256);function pr(t,e){e||(e=_r.prototype.mixer_default_read),ar[t]=e}function lr(t,e){e||(e=_r.prototype.mixer_default_write),nr[t]=e}function fr(t,e,i){or[t]=1,ar[t]=function(){return 240&this.mixer_registers[e]|this.mixer_registers[i]>>>4},nr[t]=function(s){this.mixer_registers[t]=s;var r=240&s|15&this.mixer_registers[e],a=s<<4&240|15&this.mixer_registers[i];this.mixer_write(e,r),this.mixer_write(i,a)}}function mr(t,e,i){ar[t]=_r.prototype.mixer_default_read,nr[t]=function(s){this.mixer_registers[t]=s,this.bus.send("mixer-volume",[e,i,(s>>>2)-62])}}function gr(t,e){e||(e=_r.prototype.fm_default_write);for(var i=0;i<t.length;i++)hr[t[i]]=e}function br(t,e){for(var i=[],s=t;s<=e;s++)i.push(s);return i}ur[14]=255,ur[15]=7,ur[55]=56,dr([249],1,(function(){var t=this.write_buffer.shift();re("dsp 0xf9: unknown function. input: "+t,8388608),this.read_buffer.clear(),this.read_buffer.push(ur[t])})),_r.prototype.mixer_read=function(t){var e,i=ar[t];return i?e=i.call(this):(e=this.mixer_registers[t],re("unhandled mixer register read. addr:"+de(t)+" data:"+de(e),8388608)),e},_r.prototype.mixer_write=function(t,e){var i=nr[t];i?i.call(this,e):re("unhandled mixer register write. addr:"+de(t)+" data:"+de(e),8388608)},_r.prototype.mixer_default_read=function(){return re("mixer register read. addr:"+de(this.mixer_current_address),8388608),this.mixer_registers[this.mixer_current_address]},_r.prototype.mixer_default_write=function(t){re("mixer register write. addr:"+de(this.mixer_current_address)+" data:"+de(t),8388608),this.mixer_registers[this.mixer_current_address]=t},_r.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]=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()},_r.prototype.mixer_full_update=function(){for(var t=1;t<this.mixer_registers.length;t++)or[t]||this.mixer_write(t,this.mixer_registers[t])},pr(0,(function(){return this.mixer_reset(),0})),lr(0),fr(4,50,51),fr(34,48,49),fr(38,52,53),fr(40,54,55),fr(46,56,57),mr(48,0,0),mr(49,0,1),mr(50,2,0),mr(51,2,1),pr(59),lr(59,(function(t){this.mixer_registers[59]=t,this.bus.send("mixer-volume",[1,2,6*(t>>>6)-18])})),pr(65),lr(65,(function(t){this.mixer_registers[65]=t,this.bus.send("mixer-gain-left",6*(t>>>6))})),pr(66),lr(66,(function(t){this.mixer_registers[66]=t,this.bus.send("mixer-gain-right",6*(t>>>6))})),pr(68),lr(68,(function(t){this.mixer_registers[68]=t,t>>>=3,this.bus.send("mixer-treble-left",t-(t<16?14:16))})),pr(69),lr(69,(function(t){this.mixer_registers[69]=t,t>>>=3,this.bus.send("mixer-treble-right",t-(t<16?14:16))})),pr(70),lr(70,(function(t){this.mixer_registers[70]=t,t>>>=3,this.bus.send("mixer-bass-right",t-(t<16?14:16))})),pr(71),lr(71,(function(t){this.mixer_registers[71]=t,t>>>=3,this.bus.send("mixer-bass-right",t-(t<16?14:16))})),pr(128,(function(){switch(this.irq){case 2:return 1;case 5:return 2;case 7:return 4;case 10:return 8;default:return 0}})),lr(128,(function(t){1&t&&(this.irq=2),2&t&&(this.irq=5),4&t&&(this.irq=7),8&t&&(this.irq=10)})),pr(129,(function(){var t=0;switch(this.dma_channel_8bit){case 0:t|=1;break;case 1:t|=2;break;case 3:t|=8}switch(this.dma_channel_16bit){case 5:t|=32;break;case 6:t|=64;break;case 7:t|=128}return t})),lr(129,(function(t){1&t&&(this.dma_channel_8bit=0),2&t&&(this.dma_channel_8bit=1),8&t&&(this.dma_channel_8bit=3),32&t&&(this.dma_channel_16bit=5),64&t&&(this.dma_channel_16bit=6),128&t&&(this.dma_channel_16bit=7)})),pr(130,(function(){for(var t=32,e=0;e<16;e++)t|=e*this.irq_triggered[e];return t})),_r.prototype.fm_default_write=function(t,e,i){re("unhandled fm register write. addr:"+e+"|"+de(i)+" data:"+de(t),8388608)};var yr=new Uint8Array(32);function vr(t,e){return 18*t+yr[e]}function wr(t,e,i){return function(t,e,i){return(t<e)*e+(t>i)*i+(e<=t&&t<=i)*t}(t/e+i,-1,1)}yr[0]=0,yr[1]=1,yr[2]=2,yr[3]=3,yr[4]=4,yr[5]=5,yr[8]=6,yr[9]=7,yr[10]=8,yr[11]=9,yr[12]=10,yr[13]=11,yr[16]=12,yr[17]=13,yr[18]=14,yr[19]=15,yr[20]=16,yr[21]=17,gr([1],(function(t,e,i){this.fm_waveform_select_enable[e]=!0&t,this.fm_update_waveforms()})),gr([2]),gr([3]),gr([4],(function(t,e,i){})),gr([5],(function(t,e,i){0!==e||this.fm_default_write(t,e,i)})),gr([8],(function(t,e,i){})),gr(br(32,53),(function(t,e,i){vr(e,i-32)})),gr(br(64,85),(function(t,e,i){vr(e,i-64)})),gr(br(96,117),(function(t,e,i){vr(e,i-96)})),gr(br(128,149),(function(t,e,i){vr(e,i-128)})),gr(br(160,168),(function(t,e,i){})),gr(br(176,184),(function(t,e,i){})),gr([189],(function(t,e,i){})),gr(br(192,200),(function(t,e,i){})),gr(br(224,245),(function(t,e,i){vr(e,i-224)})),_r.prototype.fm_update_waveforms=function(){},_r.prototype.sampling_rate_change=function(t){this.sampling_rate=t,this.bus.send("dac-tell-sampling-rate",t)},_r.prototype.get_channel_count=function(){return this.dsp_stereo?2:1},_r.prototype.dma_transfer_size_set=function(){this.dma_sample_count=1+(this.write_buffer.shift()<<0)+(this.write_buffer.shift()<<8)},_r.prototype.dma_transfer_start=function(){re("begin dma transfer",8388608),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=1024*this.bytes_per_sample;var t=Math.max(this.dma_bytes_count>>2&-4,32);this.dma_bytes_block=Math.min(t,this.dma_bytes_block),this.dma_waiting_transfer=!0,this.dma.channel_mask[this.dma_channel]||this.dma_on_unmask(this.dma_channel)},_r.prototype.dma_on_unmask=function(t){t===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"))},_r.prototype.dma_transfer_next=function(){re("dma transfering next block",8388608);var t=Math.min(this.dma_bytes_left,this.dma_bytes_block),e=Math.floor(t/this.bytes_per_sample);this.dma.do_write(this.dma_syncbuffer,0,t,this.dma_channel,(i=>{re("dma block transfer "+(i?"unsuccessful":"successful"),8388608),i||(this.dma_to_dac(e),this.dma_bytes_left-=t,this.dma_bytes_left||(this.raise_irq(this.dma_irq),this.dma_autoinit&&(this.dma_bytes_left=this.dma_bytes_count)))}))},_r.prototype.dma_to_dac=function(t){var e,i=this.dsp_16bit?32767.5:127.5,s=this.dsp_signed?0:-1,r=this.dsp_stereo?1:2;e=this.dsp_16bit?this.dsp_signed?this.dma_buffer_int16:this.dma_buffer_uint16:this.dsp_signed?this.dma_buffer_int8:this.dma_buffer_uint8;for(var a=0,n=0;n<t;n++)for(var o=wr(e[n],i,s),h=0;h<r;h++)this.dac_buffers[a].push(o),a^=1;this.dac_send()},_r.prototype.dac_handle_request=function(){!this.dma_bytes_left||this.dma_paused?this.dac_send():this.dma_transfer_next()},_r.prototype.dac_send=function(){if(this.dac_buffers[0].length){var t=this.dac_buffers[0].shift_block(this.dac_buffers[0].length),e=this.dac_buffers[1].shift_block(this.dac_buffers[1].length);this.bus.send("dac-send-data",[t,e],[t.buffer,e.buffer])}},_r.prototype.raise_irq=function(t){re("raise irq",8388608),this.irq_triggered[t]=1,this.cpu.device_raise_irq(this.irq)},_r.prototype.lower_irq=function(t){re("lower irq",8388608),this.irq_triggered[t]=0,this.cpu.device_lower_irq(this.irq)};var kr=128,xr=8,Ar=2,qr=1,Ir=0,Cr=1,zr=2,Or=4,Rr=6,Lr=12,Er=1,Pr=32,Tr=64;function Dr(t,e,i){switch(this.bus=i,this.cpu=t,this.ints=4,this.baud_rate=0,this.line_control=0,this.lsr=96,this.fifo_control=0,this.ier=0,this.iir=1,this.modem_control=0,this.modem_status=0,this.scratch_register=0,this.irq=0,this.input=new ue(4096),this.current_line=[],e){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.com=3,this.irq=3;break;default:re("Invalid serial port: "+de(e),16384),this.com=0,this.irq=4}this.bus.register("serial"+this.com+"-input",(function(t){this.data_received(t)}),this);var s=t.io;s.register_write(e,this,(function(t){this.write_data(t)}),(function(t){this.write_data(255&t),this.write_data(t>>8)})),s.register_write(1|e,this,(function(t){128&this.line_control?(this.baud_rate=255&this.baud_rate|t<<8,re("baud rate: "+de(this.baud_rate),16384)):(this.ier=15&t,re("interrupt enable: "+de(t),16384),this.CheckInterrupt())})),s.register_read(e,this,(function(){if(128&this.line_control)return 255&this.baud_rate;var t=this.input.shift();return re(-1===t?"Read input empty":"Read input: "+de(t),16384),0===this.input.length&&(this.lsr&=-2,this.ClearInterrupt(12)),t})),s.register_read(1|e,this,(function(){return 128&this.line_control?this.baud_rate>>8:15&this.ier})),s.register_read(2|e,this,(function(){var t=15&this.iir|192;return re("read interrupt identification: "+de(this.iir),16384),this.iir,t})),s.register_write(2|e,this,(function(t){re("fifo control: "+de(t),16384),this.fifo_control=t})),s.register_read(3|e,this,(function(){return re("read line control: "+de(this.line_control),16384),this.line_control})),s.register_write(3|e,this,(function(t){re("line control: "+de(t),16384),this.line_control=t})),s.register_read(4|e,this,(function(){return this.modem_control})),s.register_write(4|e,this,(function(t){re("modem control: "+de(t),16384),this.modem_control=t})),s.register_read(5|e,this,(function(){return re("read line status: "+de(this.lsr),16384),this.lsr})),s.register_write(5|e,this,(function(t){re("Factory test write",16384)})),s.register_read(6|e,this,(function(){return re("read modem status: "+de(this.modem_status),16384),this.modem_status})),s.register_write(6|e,this,(function(t){re("Unkown register write (base+6)",16384)})),s.register_read(7|e,this,(function(){return this.scratch_register})),s.register_write(7|e,this,(function(t){this.scratch_register=t}))}Dr.prototype.get_state=function(){var t=[];return t[0]=this.ints,t[1]=this.baud_rate,t[2]=this.line_control,t[3]=this.lsr,t[4]=this.fifo_control,t[5]=this.ier,t[6]=this.iir,t[7]=this.modem_control,t[8]=this.modem_status,t[9]=this.scratch_register,t[10]=this.irq,t},Dr.prototype.set_state=function(t){this.ints=t[0],this.baud_rate=t[1],this.line_control=t[2],this.lsr=t[3],this.fifo_control=t[4],this.ier=t[5],this.iir=t[6],this.modem_control=t[7],this.modem_status=t[8],this.scratch_register=t[9],this.irq=t[10]},Dr.prototype.CheckInterrupt=function(){4096&this.ints&&1&this.ier?(this.iir=12,this.cpu.device_raise_irq(this.irq)):4&this.ints&&2&this.ier?(this.iir=2,this.cpu.device_raise_irq(this.irq)):1&this.ints&&8&this.ier?(this.iir=0,this.cpu.device_raise_irq(this.irq)):(this.iir=1,this.cpu.device_lower_irq(this.irq))},Dr.prototype.ThrowInterrupt=function(t){this.ints|=1<<t,this.CheckInterrupt()},Dr.prototype.ClearInterrupt=function(t){this.ints&=~(1<<t),this.CheckInterrupt()},Dr.prototype.data_received=function(t){re("input: "+de(t),16384),this.input.push(t),this.lsr|=1,this.ThrowInterrupt(12)},Dr.prototype.write_data=function(t){if(128&this.line_control)this.baud_rate=-256&this.baud_rate|t;else if(re("data: "+de(t),16384),this.ThrowInterrupt(2),255!==t){var e=String.fromCharCode(t);if(this.bus.send("serial"+this.com+"-output-char",e),this.current_line.push(t),"\n"===e){const t=String.fromCharCode.apply("",this.current_line).trimRight().replace(/[\x00-\x08\x0b-\x1f\x7f\x80-\xff]/g,"");re("SERIAL: "+t),this.bus.send("serial"+this.com+"-output-line",String.fromCharCode.apply("",this.current_line)),this.current_line=[]}}};var Ur=65536,Gr=2560,Sr=1600,Mr=32,Fr=3758096384,Vr=524288,Br=262144,Nr=Uint32Array.from([655360,655360,720896,753664]),Wr=Uint32Array.from([131072,65536,32768,32768]);function jr(t,e,i){this.cpu=t,this.bus=e,this.vga_memory_size=i,this.cursor_address=0,this.cursor_scanline_start=14,this.cursor_scanline_end=15,this.max_cols=80,this.max_rows=25,this.screen_width=0,this.screen_height=0,this.virtual_width=0,this.virtual_height=0,this.layers=[],this.start_address=0,this.start_address_latched=0,this.crtc=new Uint8Array(25),this.crtc_mode=0,this.horizontal_display_enable_end=0,this.horizontal_blank_start=0,this.vertical_display_enable_end=0,this.vertical_blank_start=0,this.underline_location_register=0,this.preset_row_scan=0,this.offset_register=0,this.line_compare=0,this.graphical_mode_is_linear=!0,this.graphical_mode=!1,setTimeout((()=>{e.send("screen-set-mode",this.graphical_mode)}),0),this.vga256_palette=new Int32Array(256),this.latch_dword=0,this.svga_width=0,this.svga_height=0,this.svga_enabled=!1,this.svga_bpp=32,this.svga_bank_offset=0,this.svga_offset=0,this.pci_space=[52,18,17,17,3,1,0,0,2,0,0,3,0,0,0,0,8,14680064,57344,224,0,0,0,0,0,0,191,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,0,17,0,0,190,254,0,0,0,0,0,0,0,0,0,0,0,0],this.pci_id=144,this.pci_bars=[{size:i}],this.pci_rom_size=65536,this.pci_rom_address=4272947200,this.name="vga",this.stats={is_graphical:!1,res_x:0,res_y:0,bpp:0},this.index_crtc=0,this.dac_color_index_write=0,this.dac_color_index_read=0,this.dac_state=0,this.dac_map=new Uint8Array(16),this.attribute_controller_index=-1,this.palette_source=32,this.attribute_mode=0,this.color_plane_enable=0,this.horizontal_panning=0,this.color_select=0,this.sequencer_index=-1,this.plane_write_bm=15,this.sequencer_memory_mode=0,this.clocking_mode=0,this.graphics_index=-1,this.plane_read=0,this.planar_mode=0,this.planar_rotate_reg=0,this.planar_bitmap=255,this.planar_setreset=0,this.planar_setreset_enable=0,this.miscellaneous_graphics_register=0,this.color_compare=0,this.color_dont_care=0,this.max_scan_line=0,this.miscellaneous_output_register=255,this.port_3DA_value=255;var s=t.io;s.register_write(960,this,this.port3C0_write),s.register_read(960,this,this.port3C0_read,this.port3C0_read16),s.register_read(961,this,this.port3C1_read),s.register_write(962,this,this.port3C2_write),s.register_write_consecutive(964,this,this.port3C4_write,this.port3C5_write),s.register_read(964,this,this.port3C4_read),s.register_read(965,this,this.port3C5_read),s.register_write_consecutive(974,this,this.port3CE_write,this.port3CF_write),s.register_read(974,this,this.port3CE_read),s.register_read(975,this,this.port3CF_read),s.register_write(967,this,this.port3C7_write),s.register_read(967,this,this.port3C7_read),s.register_write(968,this,this.port3C8_write),s.register_read(968,this,this.port3C8_read),s.register_write(969,this,this.port3C9_write),s.register_read(969,this,this.port3C9_read),s.register_read(972,this,this.port3CC_read),s.register_write_consecutive(980,this,this.port3D4_write,this.port3D5_write),s.register_read(980,this,this.port3D4_read),s.register_read(981,this,this.port3D5_read,(()=>(re("Warning: 16-bit read from 3D5",256),this.port3D5_read()))),s.register_read(970,this,(function(){return re("3CA read",256),0})),s.register_read(986,this,this.port3DA_read),s.register_read(954,this,this.port3DA_read),this.dispi_index=-1,this.dispi_enable_value=0,s.register_write(462,this,void 0,this.port1CE_write),s.register_write(463,this,void 0,this.port1CF_write),s.register_read(463,this,void 0,this.port1CF_read),void 0===this.vga_memory_size||this.vga_memory_size<262144?(this.vga_memory_size=262144,re("vga memory size rounded up to "+this.vga_memory_size,256)):65535&this.vga_memory_size&&(this.vga_memory_size|=65535,this.vga_memory_size++);const r=t.svga_allocate_memory(this.vga_memory_size);this.svga_memory=_e.view(Uint8Array,t.wasm_memory,r,this.vga_memory_size),this.diff_addr_min=this.vga_memory_size,this.diff_addr_max=0,this.diff_plot_min=this.vga_memory_size,this.diff_plot_max=0,this.image_data=null,e.register("screen-fill-buffer",(function(){this.screen_fill_buffer()}),this),this.vga_memory=new Uint8Array(262144),this.plane0=new Uint8Array(this.vga_memory.buffer,0,65536),this.plane1=new Uint8Array(this.vga_memory.buffer,65536,65536),this.plane2=new Uint8Array(this.vga_memory.buffer,131072,65536),this.plane3=new Uint8Array(this.vga_memory.buffer,196608,65536),this.pixel_buffer=new Uint8Array(524288);var a=this;s.mmap_register(655360,131072,(function(t){return a.vga_memory_read(t)}),(function(t,e){a.vga_memory_write(t,e)})),t.devices.pci.register_device(this)}jr.prototype.get_state=function(){var t=[];return t[0]=this.vga_memory_size,t[1]=this.cursor_address,t[2]=this.cursor_scanline_start,t[3]=this.cursor_scanline_end,t[4]=this.max_cols,t[5]=this.max_rows,t[6]=this.vga_memory,t[7]=this.dac_state,t[8]=this.start_address,t[9]=this.graphical_mode,t[10]=this.vga256_palette,t[11]=this.latch_dword,t[12]=this.color_compare,t[13]=this.color_dont_care,t[14]=this.miscellaneous_graphics_register,t[15]=this.svga_width,t[16]=this.svga_height,t[17]=this.crtc_mode,t[18]=this.svga_enabled,t[19]=this.svga_bpp,t[20]=this.svga_bank_offset,t[21]=this.svga_offset,t[22]=this.index_crtc,t[23]=this.dac_color_index_write,t[24]=this.dac_color_index_read,t[25]=this.dac_map,t[26]=this.sequencer_index,t[27]=this.plane_write_bm,t[28]=this.sequencer_memory_mode,t[29]=this.graphics_index,t[30]=this.plane_read,t[31]=this.planar_mode,t[32]=this.planar_rotate_reg,t[33]=this.planar_bitmap,t[34]=this.max_scan_line,t[35]=this.miscellaneous_output_register,t[36]=this.port_3DA_value,t[37]=this.dispi_index,t[38]=this.dispi_enable_value,t[39]=this.svga_memory,t[40]=this.graphical_mode_is_linear,t[41]=this.attribute_controller_index,t[42]=this.offset_register,t[43]=this.planar_setreset,t[44]=this.planar_setreset_enable,t[45]=this.start_address_latched,t[46]=this.crtc,t[47]=this.horizontal_display_enable_end,t[48]=this.horizontal_blank_start,t[49]=this.vertical_display_enable_end,t[50]=this.vertical_blank_start,t[51]=this.underline_location_register,t[52]=this.preset_row_scan,t[53]=this.offset_register,t[54]=this.palette_source,t[55]=this.attribute_mode,t[56]=this.color_plane_enable,t[57]=this.horizontal_panning,t[58]=this.color_select,t[59]=this.clocking_mode,t[60]=this.line_compare,t[61]=this.pixel_buffer,t},jr.prototype.set_state=function(t){this.vga_memory_size=t[0],this.cursor_address=t[1],this.cursor_scanline_start=t[2],this.cursor_scanline_end=t[3],this.max_cols=t[4],this.max_rows=t[5],t[6]&&this.vga_memory.set(t[6]),this.dac_state=t[7],this.start_address=t[8],this.graphical_mode=t[9],this.vga256_palette=t[10],this.latch_dword=t[11],this.color_compare=t[12],this.color_dont_care=t[13],this.miscellaneous_graphics_register=t[14],this.svga_width=t[15],this.svga_height=t[16],this.crtc_mode=t[17],this.svga_enabled=t[18],this.svga_bpp=t[19],this.svga_bank_offset=t[20],this.svga_offset=t[21],this.index_crtc=t[22],this.dac_color_index_write=t[23],this.dac_color_index_read=t[24],this.dac_map=t[25],this.sequencer_index=t[26],this.plane_write_bm=t[27],this.sequencer_memory_mode=t[28],this.graphics_index=t[29],this.plane_read=t[30],this.planar_mode=t[31],this.planar_rotate_reg=t[32],this.planar_bitmap=t[33],this.max_scan_line=t[34],this.miscellaneous_output_register=t[35],this.port_3DA_value=t[36],this.dispi_index=t[37],this.dispi_enable_value=t[38],this.svga_memory.set(t[39]),this.graphical_mode_is_linear=t[40],this.attribute_controller_index=t[41],this.offset_register=t[42],this.planar_setreset=t[43],this.planar_setreset_enable=t[44],this.start_address_latched=t[45],this.crtc.set(t[46]),this.horizontal_display_enable_end=t[47],this.horizontal_blank_start=t[48],this.vertical_display_enable_end=t[49],this.vertical_blank_start=t[50],this.underline_location_register=t[51],this.preset_row_scan=t[52],this.offset_register=t[53],this.palette_source=t[54],this.attribute_mode=t[55],this.color_plane_enable=t[56],this.horizontal_panning=t[57],this.color_select=t[58],this.clocking_mode=t[59],this.line_compare=t[60],t[61]&&this.pixel_buffer.set(t[61]),this.bus.send("screen-set-mode",this.graphical_mode),this.graphical_mode?(this.screen_width=0,this.screen_height=0,this.svga_enabled?(this.set_size_graphical(this.svga_width,this.svga_height,this.svga_bpp,this.svga_width,this.svga_height),this.update_layers()):(this.update_vga_size(),this.update_layers(),this.complete_replot())):(this.set_size_text(this.max_cols,this.max_rows),this.update_cursor_scanline(),this.update_cursor()),this.complete_redraw()},jr.prototype.vga_memory_read=function(t){if(this.svga_enabled&&this.graphical_mode_is_linear)return this.cpu.read8(3758096384+(t-655360|this.svga_bank_offset)|0);var e=this.miscellaneous_graphics_register>>2&3;if((t-=Nr[e])<0||t>=Wr[e])return re("vga read outside memory space: addr:"+de(t),256),0;if(this.latch_dword=this.plane0[t],this.latch_dword|=this.plane1[t]<<8,this.latch_dword|=this.plane2[t]<<16,this.latch_dword|=this.plane3[t]<<24,8&this.planar_mode){var i=255;return 1&this.color_dont_care&&(i&=this.plane0[t]^~(1&this.color_compare?255:0)),2&this.color_dont_care&&(i&=this.plane1[t]^~(2&this.color_compare?255:0)),4&this.color_dont_care&&(i&=this.plane2[t]^~(4&this.color_compare?255:0)),8&this.color_dont_care&&(i&=this.plane3[t]^~(8&this.color_compare?255:0)),i}var s=this.plane_read;return this.graphical_mode?8&this.sequencer_memory_mode?(s=3&t,t&=-4):16&this.planar_mode&&(s=1&t,t&=-2):s=0,this.vga_memory[s<<16|t]},jr.prototype.vga_memory_write=function(t,e){if(this.svga_enabled&&this.graphical_mode&&this.graphical_mode_is_linear)this.cpu.write8(3758096384+(t-655360|this.svga_bank_offset)|0,e);else{var i=this.miscellaneous_graphics_register>>2&3;if((t-=Nr[i])<0||t>=Wr[i])re("vga write outside memory space: addr:"+de(t)+", value:"+de(e),256);else if(this.graphical_mode)this.vga_memory_write_graphical(t,e);else{if(!(3&this.plane_write_bm))return;this.vga_memory_write_text_mode(t,e)}}},jr.prototype.vga_memory_write_graphical=function(t,e){var i,s=3&this.planar_mode,r=this.apply_feed(this.planar_bitmap),a=this.apply_expand(this.planar_setreset),n=this.apply_expand(this.planar_setreset_enable);switch(s){case 0:e=this.apply_rotate(e),i=this.apply_feed(e),i=this.apply_setreset(i,n),i=this.apply_logical(i,this.latch_dword),i=this.apply_bitmask(i,r);break;case 1:i=this.latch_dword;break;case 2:i=this.apply_expand(e),i=this.apply_logical(i,this.latch_dword),i=this.apply_bitmask(i,r);break;case 3:e=this.apply_rotate(e),r&=this.apply_feed(e),i=a,i=this.apply_bitmask(i,r)}var o=15;switch(12&this.sequencer_memory_mode){case 0:o=5<<(1&t),t&=-2;break;case 8:case 12:o=1<<(3&t),t&=-4}1&(o&=this.plane_write_bm)&&(this.plane0[t]=i>>0&255),2&o&&(this.plane1[t]=i>>8&255),4&o&&(this.plane2[t]=i>>16&255),8&o&&(this.plane3[t]=i>>24&255);var h=this.vga_addr_to_pixel(t);this.partial_replot(h,h+7)},jr.prototype.apply_feed=function(t){var e=t;return e|=t<<8,e|=t<<16,e|=t<<24},jr.prototype.apply_expand=function(t){var e=1&t?255:0;return e|=(2&t?255:0)<<8,e|=(4&t?255:0)<<16,e|=(8&t?255:0)<<24},jr.prototype.apply_rotate=function(t){return 255&(t|t<<8)>>>(7&this.planar_rotate_reg)},jr.prototype.apply_setreset=function(t,e){var i=this.apply_expand(this.planar_setreset);return t|=e&i,t&=~e|i},jr.prototype.apply_logical=function(t,e){switch(24&this.planar_rotate_reg){case 8:return t&e;case 16:return t|e;case 24:return t^e}return t},jr.prototype.apply_bitmask=function(t,e){var i=e&t;return i|=~e&this.latch_dword},jr.prototype.text_mode_redraw=function(){for(var t,e,i=this.start_address<<1,s=0;s<this.max_rows;s++)for(var r=0;r<this.max_cols;r++)t=this.vga_memory[i],e=this.vga_memory[1|i],this.bus.send("screen-put-char",[s,r,t,this.vga256_palette[e>>4&15],this.vga256_palette[15&e]]),i+=2},jr.prototype.vga_memory_write_text_mode=function(t,e){var i,s,r=(t>>1)-this.start_address,a=r/this.max_cols|0,n=r%this.max_cols;1&t?(s=e,i=this.vga_memory[-2&t]):(i=e,s=this.vga_memory[1|t]),this.bus.send("screen-put-char",[a,n,i,this.vga256_palette[s>>4&15],this.vga256_palette[15&s]]),this.vga_memory[t]=e},jr.prototype.update_cursor=function(){var t=(this.cursor_address-this.start_address)/this.max_cols|0,e=(this.cursor_address-this.start_address)%this.max_cols;t=Math.min(this.max_rows-1,t),this.bus.send("screen-update-cursor",[t,e])},jr.prototype.complete_redraw=function(){re("complete redraw",256),this.graphical_mode?this.svga_enabled?this.cpu.svga_mark_dirty():(this.diff_addr_min=0,this.diff_addr_max=524288):this.text_mode_redraw()},jr.prototype.complete_replot=function(){re("complete replot",256),this.graphical_mode&&!this.svga_enabled&&(this.diff_plot_min=0,this.diff_plot_max=524288,this.complete_redraw())},jr.prototype.partial_redraw=function(t,e){t<this.diff_addr_min&&(this.diff_addr_min=t),e>this.diff_addr_max&&(this.diff_addr_max=e)},jr.prototype.partial_replot=function(t,e){t<this.diff_plot_min&&(this.diff_plot_min=t),e>this.diff_plot_max&&(this.diff_plot_max=e),this.partial_redraw(t,e)},jr.prototype.reset_diffs=function(){this.diff_addr_min=this.vga_memory_size,this.diff_addr_max=0,this.diff_plot_min=this.vga_memory_size,this.diff_plot_max=0},jr.prototype.destroy=function(){},jr.prototype.vga_bytes_per_line=function(){var t=this.offset_register<<2;return 64&this.underline_location_register?t<<=1:64&this.crtc_mode&&(t>>>=1),t},jr.prototype.vga_addr_shift_count=function(){var t=128;return t+=~this.underline_location_register&this.crtc_mode&64,t-=64&this.underline_location_register,(t-=64&this.attribute_mode)>>>6},jr.prototype.vga_addr_to_pixel=function(t){var e=this.vga_addr_shift_count();if(3&~this.crtc_mode){var i=t-this.start_address;i&=this.crtc_mode<<13|-24577;var s=(i<<=e)/this.virtual_width|0,r=i%this.virtual_width;switch(3&this.crtc_mode){case 2:s=s<<1|t>>13&1;break;case 1:s=s<<1|t>>14&1;break;case 0:s=s<<2|t>>13&3}return s*this.virtual_width+r+(this.start_address<<e)}return t<<e},jr.prototype.scan_line_to_screen_row=function(t){128&this.max_scan_line&&(t>>>=1);var e=1+(31&this.max_scan_line);return t=Math.ceil(t/e),1&this.crtc_mode||(t<<=1),2&this.crtc_mode||(t<<=1),t},jr.prototype.set_size_text=function(t,e){this.max_cols=t,this.max_rows=e,this.bus.send("screen-set-size-text",[t,e])},jr.prototype.set_size_graphical=function(t,e,i,s,r){if(!this.stats.is_graphical||this.stats.bpp!==i||this.screen_width!==t||this.screen_height!==e||this.virtual_width!==s||this.virtual_height!==r){if(this.screen_width=t,this.screen_height=e,this.virtual_width=s,this.virtual_height=r,this.stats.bpp=i,this.stats.is_graphical=!0,this.stats.res_x=t,this.stats.res_y=e,"undefined"!=typeof ImageData){const i=t*e,s=this.cpu.svga_allocate_dest_buffer(i);this.dest_buffet_offset=s,this.image_data=new ImageData(new Uint8ClampedArray(this.cpu.wasm_memory.buffer,s,4*i),t,e),this.cpu.svga_mark_dirty()}this.bus.send("screen-set-size-graphical",[t,e,s,r,i])}},jr.prototype.update_vga_size=function(){if(!this.svga_enabled){var t=Math.min(1+this.horizontal_display_enable_end,this.horizontal_blank_start),e=Math.min(1+this.vertical_display_enable_end,this.vertical_blank_start);if(t&&e)if(this.graphical_mode){var i=t<<3,s=this.offset_register<<4;64&this.attribute_mode&&(i>>>=1,s>>>=1);var r=this.scan_line_to_screen_row(e),a=Wr[0],n=Math.ceil(a/this.vga_bytes_per_line());this.set_size_graphical(i,r,8,s,n),this.update_vertical_retrace(),this.update_layers()}else{128&this.max_scan_line&&(e>>>=1);var o=e/(1+(31&this.max_scan_line))|0;t&&o&&this.set_size_text(t,o)}}},jr.prototype.update_layers=function(){if(this.graphical_mode||this.text_mode_redraw(),this.svga_enabled)this.layers=[];else if(this.virtual_width&&this.screen_width){if(!this.palette_source||32&this.clocking_mode)return this.layers=[],void this.bus.send("screen-clear");var t=this.start_address_latched,e=this.horizontal_panning;64&this.attribute_mode&&(e>>>=1);var i=this.preset_row_scan>>5&3,s=this.vga_addr_to_pixel(t+i),r=s/this.virtual_width|0,a=s%this.virtual_width+e,n=this.scan_line_to_screen_row(1+this.line_compare);n=Math.min(n,this.screen_height);var o=this.screen_height-n;this.layers=[];for(var h=-a,_=0;h<this.screen_width;h+=this.virtual_width,_++)this.layers.push({image_data:this.image_data,screen_x:h,screen_y:0,buffer_x:0,buffer_y:r+_,buffer_width:this.virtual_width,buffer_height:n});var d=0;32&this.attribute_mode||(d=this.vga_addr_to_pixel(i)+e);for(h=-d,_=0;h<this.screen_width;h+=this.virtual_width,_++)this.layers.push({image_data:this.image_data,screen_x:h,screen_y:n,buffer_x:0,buffer_y:_,buffer_width:this.virtual_width,buffer_height:o})}},jr.prototype.update_vertical_retrace=function(){this.port_3DA_value|=8,this.start_address_latched!==this.start_address&&(this.start_address_latched=this.start_address,this.update_layers())},jr.prototype.update_cursor_scanline=function(){this.bus.send("screen-update-cursor-scanline",[this.cursor_scanline_start,this.cursor_scanline_end])},jr.prototype.port3C0_write=function(t){if(-1===this.attribute_controller_index)re("attribute controller index register: "+de(t),256),this.attribute_controller_index=31&t,re("attribute actual index: "+de(this.attribute_controller_index),256),this.palette_source!==(32&t)&&(this.palette_source=32&t,this.update_layers());else{if(this.attribute_controller_index<16)re("internal palette: "+de(this.attribute_controller_index)+" -> "+de(t),256),this.dac_map[this.attribute_controller_index]=t,64&this.attribute_mode||this.complete_redraw();else switch(this.attribute_controller_index){case 16:if(re("3C0 / attribute mode control: "+de(t),256),this.attribute_mode!==t){var e=this.attribute_mode;this.attribute_mode=t;var i=(1&t)>0;this.svga_enabled||this.graphical_mode===i||(this.graphical_mode=i,this.bus.send("screen-set-mode",this.graphical_mode)),64&(e^t)&&this.complete_replot(),this.update_vga_size(),this.complete_redraw()}break;case 18:re("3C0 / color plane enable: "+de(t),256),this.color_plane_enable!==t&&(this.color_plane_enable=t,this.complete_redraw());break;case 19:re("3C0 / horizontal panning: "+de(t),256),this.horizontal_panning!==t&&(this.horizontal_panning=15&t,this.update_layers());break;case 20:re("3C0 / color select: "+de(t),256),this.color_select!==t&&(this.color_select=t,this.complete_redraw());break;default:re("3C0 / attribute controller write "+de(this.attribute_controller_index)+": "+de(t),256)}this.attribute_controller_index=-1}},jr.prototype.port3C0_read=function(){return re("3C0 read",256),this.attribute_controller_index|this.palette_source},jr.prototype.port3C0_read16=function(){return re("3C0 read16",256),255&this.port3C0_read()|this.port3C1_read()<<8&65280},jr.prototype.port3C1_read=function(){if(this.attribute_controller_index<16)return re("3C1 / internal palette read: "+de(this.attribute_controller_index)+" -> "+de(this.dac_map[this.attribute_controller_index]),256),255&this.dac_map[this.attribute_controller_index];switch(this.attribute_controller_index){case 16:return re("3C1 / attribute mode read: "+de(this.attribute_mode),256),this.attribute_mode;case 18:return re("3C1 / color plane enable read: "+de(this.color_plane_enable),256),this.color_plane_enable;case 19:return re("3C1 / horizontal panning read: "+de(this.horizontal_panning),256),this.horizontal_panning;case 20:return re("3C1 / color select read: "+de(this.color_select),256),this.color_select;default:re("3C1 / attribute controller read "+de(this.attribute_controller_index),256)}return 255},jr.prototype.port3C2_write=function(t){re("3C2 / miscellaneous output register = "+de(t),256),this.miscellaneous_output_register=t},jr.prototype.port3C4_write=function(t){this.sequencer_index=t},jr.prototype.port3C4_read=function(){return this.sequencer_index},jr.prototype.port3C5_write=function(t){switch(this.sequencer_index){case 1:re("clocking mode: "+de(t),256);var e=this.clocking_mode;this.clocking_mode=t,32&(e^t)&&this.update_layers();break;case 2:re("plane write mask: "+de(t),256),this.plane_write_bm=t;break;case 4:re("sequencer memory mode: "+de(t),256),this.sequencer_memory_mode=t;break;default:re("3C5 / sequencer write "+de(this.sequencer_index)+": "+de(t),256)}},jr.prototype.port3C5_read=function(){switch(re("3C5 / sequencer read "+de(this.sequencer_index),256),this.sequencer_index){case 1:return this.clocking_mode;case 2:return this.plane_write_bm;case 4:return this.sequencer_memory_mode;case 6:return 18}return 0},jr.prototype.port3C7_write=function(t){re("3C7 write: "+de(t),256),this.dac_color_index_read=3*t,this.dac_state&=0},jr.prototype.port3C7_read=function(){return this.dac_state},jr.prototype.port3C8_write=function(t){this.dac_color_index_write=3*t,this.dac_state|=3},jr.prototype.port3C8_read=function(){return this.dac_color_index_write/3&255},jr.prototype.port3C9_write=function(t){var e=this.dac_color_index_write/3|0,i=this.dac_color_index_write%3,s=this.vga256_palette[e];t=255*(63&t)/63|0,0===i?s=-16711681&s|t<<16:1===i?s=-65281&s|t<<8:(s=-256&s|t,re("dac set color, index="+de(e)+" value="+de(s),256)),this.vga256_palette[e]!==s&&(this.vga256_palette[e]=s,this.complete_redraw()),this.dac_color_index_write++},jr.prototype.port3C9_read=function(){re("3C9 read",256);var t=this.dac_color_index_read/3|0,e=this.dac_color_index_read%3,i=this.vga256_palette[t];return this.dac_color_index_read++,(i>>8*(2-e)&255)/255*63|0},jr.prototype.port3CC_read=function(){return re("3CC read",256),this.miscellaneous_output_register},jr.prototype.port3CE_write=function(t){this.graphics_index=t},jr.prototype.port3CE_read=function(){return this.graphics_index},jr.prototype.port3CF_write=function(t){switch(this.graphics_index){case 0:this.planar_setreset=t,re("plane set/reset: "+de(t),256);break;case 1:this.planar_setreset_enable=t,re("plane set/reset enable: "+de(t),256);break;case 2:this.color_compare=t,re("color compare: "+de(t),256);break;case 3:this.planar_rotate_reg=t,re("plane rotate: "+de(t),256);break;case 4:this.plane_read=t,re("plane read: "+de(t),256);break;case 5:var e=this.planar_mode;this.planar_mode=t,re("planar mode: "+de(t),256),96&(e^t)&&this.complete_replot();break;case 6:re("miscellaneous graphics register: "+de(t),256),this.miscellaneous_graphics_register!==t&&(this.miscellaneous_graphics_register=t,this.update_vga_size());break;case 7:this.color_dont_care=t,re("color don't care: "+de(t),256);break;case 8:this.planar_bitmap=t,re("planar bitmap: "+de(t),256);break;default:re("3CF / graphics write "+de(this.graphics_index)+": "+de(t),256)}},jr.prototype.port3CF_read=function(){switch(re("3CF / graphics read "+de(this.graphics_index),256),this.graphics_index){case 0:return this.planar_setreset;case 1:return this.planar_setreset_enable;case 2:return this.color_compare;case 3:return this.planar_rotate_reg;case 4:return this.plane_read;case 5:return this.planar_mode;case 6:return this.miscellaneous_graphics_register;case 7:return this.color_dont_care;case 8:return this.planar_bitmap}return 0},jr.prototype.port3D4_write=function(t){re("3D4 / crtc index: "+t,256),this.index_crtc=t},jr.prototype.port3D4_read=function(){return re("3D4 read / crtc index: "+this.index_crtc,256),this.index_crtc},jr.prototype.port3D5_write=function(t){switch(this.index_crtc){case 1:re("3D5 / hdisp enable end write: "+de(t),256),this.horizontal_display_enable_end!==t&&(this.horizontal_display_enable_end=t,this.update_vga_size());break;case 2:this.horizontal_blank_start!==t&&(this.horizontal_blank_start=t,this.update_vga_size());break;case 7:re("3D5 / overflow register write: "+de(t),256);var e=this.vertical_display_enable_end;this.vertical_display_enable_end&=255,this.vertical_display_enable_end|=t<<3&512|t<<7&256,e!=this.vertical_display_enable_end&&this.update_vga_size(),this.line_compare=767&this.line_compare|t<<4&256;var i=this.vertical_blank_start;this.vertical_blank_start=767&this.vertical_blank_start|t<<5&256,i!==this.vertical_blank_start&&this.update_vga_size(),this.update_layers();break;case 8:re("3D5 / preset row scan write: "+de(t),256),this.preset_row_scan=t,this.update_layers();break;case 9:re("3D5 / max scan line write: "+de(t),256),this.max_scan_line=t,this.line_compare=511&this.line_compare|t<<3&512;i=this.vertical_blank_start;this.vertical_blank_start=511&this.vertical_blank_start|t<<4&512,i!==this.vertical_blank_start&&this.update_vga_size(),this.update_layers();break;case 10:re("3D5 / cursor scanline start write: "+de(t),256),this.cursor_scanline_start=t,this.update_cursor_scanline();break;case 11:re("3D5 / cursor scanline end write: "+de(t),256),this.cursor_scanline_end=t,this.update_cursor_scanline();break;case 12:(this.start_address>>8&255)!==t&&(this.start_address=255&this.start_address|t<<8,this.update_layers(),3&~this.crtc_mode&&this.complete_replot()),re("3D5 / start addr hi write: "+de(t)+" -> "+de(this.start_address,4),256);break;case 13:(255&this.start_address)!==t&&(this.start_address=65280&this.start_address|t,this.update_layers(),3&~this.crtc_mode&&this.complete_replot()),re("3D5 / start addr lo write: "+de(t)+" -> "+de(this.start_address,4),256);break;case 14:re("3D5 / cursor address hi write: "+de(t),256),this.cursor_address=255&this.cursor_address|t<<8,this.update_cursor();break;case 15:re("3D5 / cursor address lo write: "+de(t),256),this.cursor_address=65280&this.cursor_address|t,this.update_cursor();break;case 18:re("3D5 / vdisp enable end write: "+de(t),256),(255&this.vertical_display_enable_end)!==t&&(this.vertical_display_enable_end=768&this.vertical_display_enable_end|t,this.update_vga_size());break;case 19:re("3D5 / offset register write: "+de(t),256),this.offset_register!==t&&(this.offset_register=t,this.update_vga_size(),3&~this.crtc_mode&&this.complete_replot());break;case 20:if(re("3D5 / underline location write: "+de(t),256),this.underline_location_register!==t){var s=this.underline_location_register;this.underline_location_register=t,this.update_vga_size(),64&(s^t)&&this.complete_replot()}break;case 21:re("3D5 / vertical blank start write: "+de(t),256),(255&this.vertical_blank_start)!==t&&(this.vertical_blank_start=768&this.vertical_blank_start|t,this.update_vga_size());break;case 23:if(re("3D5 / crtc mode write: "+de(t),256),this.crtc_mode!==t){var r=this.crtc_mode;this.crtc_mode=t,this.update_vga_size(),67&(r^t)&&this.complete_replot()}break;case 24:re("3D5 / line compare write: "+de(t),256),this.line_compare=768&this.line_compare|t,this.update_layers();break;default:this.index_crtc<this.crtc.length&&(this.crtc[this.index_crtc]=t),re("3D5 / CRTC write "+de(this.index_crtc)+": "+de(t),256)}},jr.prototype.port3D5_read=function(){switch(re("3D5 read "+de(this.index_crtc),256),this.index_crtc){case 1:return this.horizontal_display_enable_end;case 2:return this.horizontal_blank_start;case 7:return this.vertical_display_enable_end>>7&2|this.vertical_blank_start>>5&8|this.line_compare>>4&16|this.vertical_display_enable_end>>3&64;case 8:return this.preset_row_scan;case 9:return this.max_scan_line;case 10:return this.cursor_scanline_start;case 11:return this.cursor_scanline_end;case 12:return 255&this.start_address;case 13:return this.start_address>>8;case 14:return this.cursor_address>>8;case 15:return 255&this.cursor_address;case 18:return 255&this.vertical_display_enable_end;case 19:return this.offset_register;case 20:return this.underline_location_register;case 21:return 255&this.vertical_blank_start;case 23:return this.crtc_mode;case 24:return 255&this.line_compare}return this.index_crtc<this.crtc.length?this.crtc[this.index_crtc]:0},jr.prototype.port3DA_read=function(){re("3DA read - status 1 and clear attr index",256);var t=this.port_3DA_value;return this.graphical_mode?(this.port_3DA_value^=1,this.port_3DA_value&=1):(1&this.port_3DA_value&&(this.port_3DA_value^=8),this.port_3DA_value^=1),this.attribute_controller_index=-1,t},jr.prototype.port1CE_write=function(t){this.dispi_index=t},jr.prototype.port1CF_write=function(t){switch(re("1CF / dispi write "+de(this.dispi_index)+": "+de(t),256),this.dispi_index){case 1:this.svga_width=t,this.svga_width>2560&&(re("svga_width reduced from "+this.svga_width+" to 2560",256),this.svga_width=2560);break;case 2:this.svga_height=t,this.svga_height>1600&&(re("svga_height reduced from "+this.svga_height+" to 1600",256),this.svga_height=1600);break;case 3:this.svga_bpp=t;break;case 4:this.svga_enabled=1==(1&t),this.dispi_enable_value=t;break;case 5:re("SVGA bank offset: "+de(t<<16)),this.svga_bank_offset=t<<16;break;case 9:const e=t*this.svga_width;re("SVGA offset: "+de(e)+" y="+de(t),256),this.svga_offset!==e&&(this.svga_offset=e,this.complete_redraw())}!this.svga_enabled||this.svga_width&&this.svga_height||(re("SVGA: disabled because of invalid width/height: "+this.svga_width+"x"+this.svga_height,256),this.svga_enabled=!1),ne(4!==this.svga_bpp,"unimplemented svga bpp: 4"),ne(4===this.svga_bpp||8===this.svga_bpp||15===this.svga_bpp||16===this.svga_bpp||24===this.svga_bpp||32===this.svga_bpp,"unexpected svga bpp: "+this.svga_bpp),re("SVGA: enabled="+this.svga_enabled+", "+this.svga_width+"x"+this.svga_height+"x"+this.svga_bpp,256),this.svga_enabled&&4===this.dispi_index&&(this.set_size_graphical(this.svga_width,this.svga_height,this.svga_bpp,this.svga_width,this.svga_height),this.bus.send("screen-set-mode",!0),this.graphical_mode=!0,this.graphical_mode_is_linear=!0),this.svga_enabled||(this.svga_bank_offset=0),this.update_layers()},jr.prototype.port1CF_read=function(){return re("1CF / dispi read "+de(this.dispi_index),256),this.svga_register_read(this.dispi_index)},jr.prototype.svga_register_read=function(t){switch(t){case 0:return 45248;case 1:return 2&this.dispi_enable_value?2560:this.svga_width;case 2:return 2&this.dispi_enable_value?1600:this.svga_height;case 3:return 2&this.dispi_enable_value?32:this.svga_bpp;case 4:return this.dispi_enable_value;case 5:return this.svga_bank_offset>>>16;case 6:return this.screen_width?this.screen_width:1;case 8:return 0;case 10:return this.vga_memory_size/65536|0}return 255},jr.prototype.vga_replot=function(){for(var t=-16&this.diff_plot_min,e=Math.min(15|this.diff_plot_max,524287),i=this.vga_addr_shift_count(),s=3&~this.crtc_mode,r=96&this.planar_mode,a=64&this.attribute_mode,n=t;n<=e;){var o=n>>>i;if(s){var h=n/this.virtual_width|0,_=n-this.virtual_width*h;switch(s){case 1:o=(1&h)<<13,h>>>=1;break;case 2:o=(1&h)<<14,h>>>=1;break;case 3:o=(3&h)<<13,h>>>=2}o|=(h*this.virtual_width+_>>>i)+this.start_address}var d=this.plane0[o],c=this.plane1[o],u=this.plane2[o],p=this.plane3[o],l=new Uint8Array(8);switch(r){case 0:d<<=0,c<<=1,u<<=2,p<<=3;for(var f=7;f>=0;f--)l[7-f]=d>>f&1|c>>f&2|u>>f&4|p>>f&8;break;case 32:l[0]=d>>6&3|u>>4&12,l[1]=d>>4&3|u>>2&12,l[2]=d>>2&3|u>>0&12,l[3]=d>>0&3|u<<2&12,l[4]=c>>6&3|p>>4&12,l[5]=c>>4&3|p>>2&12,l[6]=c>>2&3|p>>0&12,l[7]=c>>0&3|p<<2&12;break;case 64:case 96:l[0]=d>>4&15,l[1]=d>>0&15,l[2]=c>>4&15,l[3]=c>>0&15,l[4]=u>>4&15,l[5]=u>>0&15,l[6]=p>>4&15,l[7]=p>>0&15}if(a){f=0;for(var m=0;f<4;f++,n++,m+=2)this.pixel_buffer[n]=l[m]<<4|l[m+1]}else for(f=0;f<8;f++,n++)this.pixel_buffer[n]=l[f]}},jr.prototype.vga_redraw=function(){var t=this.diff_addr_min,e=Math.min(this.diff_addr_max,524287);const i=new Int32Array(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,this.screen_width*this.screen_height);var s=255,r=0;if(128&this.attribute_mode&&(s&=207,r|=this.color_select<<4&48),64&this.attribute_mode)for(var a=t;a<=e;a++){var n=this.pixel_buffer[a]&s|r,o=this.vga256_palette[n];i[a]=65280&o|o<<16|o>>16|4278190080}else{s&=63,r|=this.color_select<<4&192;for(a=t;a<=e;a++){var h=this.pixel_buffer[a]&this.color_plane_enable;n=this.dac_map[h]&s|r,o=this.vga256_palette[n];i[a]=65280&o|o<<16|o>>16|4278190080}}},jr.prototype.screen_fill_buffer=function(){if(this.graphical_mode){if(0===this.image_data.data.byteLength){const t=new Uint8ClampedArray(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,4*this.screen_width*this.screen_height);this.image_data=new ImageData(t,this.screen_width,this.screen_height),this.update_layers()}if(this.svga_enabled){let i=0,s=this.svga_height;if(8===this.svga_bpp){const i=new Int32Array(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,this.screen_width*this.screen_height),s=new Uint8Array(this.cpu.wasm_memory.buffer,this.svga_memory.byteOffset,this.vga_memory_size);for(var t=0;t<i.length;t++){var e=this.vga256_palette[s[t]];i[t]=65280&e|e<<16|e>>16|4278190080}}else{this.cpu.svga_fill_pixel_buffer(this.svga_bpp,this.svga_offset);const t=15===this.svga_bpp?2:this.svga_bpp/8;i=((this.cpu.svga_dirty_bitmap_min_offset[0]/t|0)-this.svga_offset)/this.svga_width,s=((this.cpu.svga_dirty_bitmap_max_offset[0]/t|0)-this.svga_offset)/this.svga_width+1}i<s&&(i=Math.max(i,0),s=Math.min(s,this.svga_height),this.bus.send("screen-fill-buffer-end",[{image_data:this.image_data,screen_x:0,screen_y:i,buffer_x:0,buffer_y:i,buffer_width:this.svga_width,buffer_height:s-i}]))}else this.vga_replot(),this.vga_redraw(),this.bus.send("screen-fill-buffer-end",this.layers);this.reset_diffs(),this.update_vertical_retrace()}else this.update_vertical_retrace()};var Kr=!1;function Xr(t,e,i){this.next_tick_immediately=i,this.wm=e,this.wasm_patch(),this.create_jit_imports();const s=this.wm.exports.memory;this.wasm_memory=s,this.memory_size=_e.view(Uint32Array,s,812,1),this.mem8=new Uint8Array(0),this.mem32s=new Int32Array(this.mem8.buffer),this.segment_is_null=_e.view(Uint8Array,s,724,8),this.segment_offsets=_e.view(Int32Array,s,736,8),this.segment_limits=_e.view(Uint32Array,s,768,8),this.protected_mode=_e.view(Int32Array,s,800,1),this.idtr_size=_e.view(Int32Array,s,564,1),this.idtr_offset=_e.view(Int32Array,s,568,1),this.gdtr_size=_e.view(Int32Array,s,572,1),this.gdtr_offset=_e.view(Int32Array,s,576,1),this.tss_size_32=_e.view(Int32Array,s,1128,1),this.page_fault=_e.view(Uint32Array,s,540,8),this.cr=_e.view(Int32Array,s,580,8),this.cpl=_e.view(Uint8Array,s,612,1),this.is_32=_e.view(Int32Array,s,804,1),this.stack_size_32=_e.view(Int32Array,s,808,1),this.in_hlt=_e.view(Uint8Array,s,616,1),this.last_virt_eip=_e.view(Int32Array,s,620,1),this.eip_phys=_e.view(Int32Array,s,624,1),this.sysenter_cs=_e.view(Int32Array,s,636,1),this.sysenter_esp=_e.view(Int32Array,s,640,1),this.sysenter_eip=_e.view(Int32Array,s,644,1),this.prefixes=_e.view(Int32Array,s,648,1),this.flags=_e.view(Int32Array,s,120,1),this.flags_changed=_e.view(Int32Array,s,116,1),this.last_op1=_e.view(Int32Array,s,96,1),this.last_op_size=_e.view(Int32Array,s,104,1),this.last_result=_e.view(Int32Array,s,112,1),this.current_tsc=_e.view(Uint32Array,s,960,2),this.devices={},this.instruction_pointer=_e.view(Int32Array,s,556,1),this.previous_ip=_e.view(Int32Array,s,560,1),this.apic_enabled=_e.view(Uint8Array,s,548,1),this.acpi_enabled=_e.view(Uint8Array,s,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=_e.view(Uint32Array,s,664,1),this.reg32=_e.view(Int32Array,s,64,8),this.fpu_st=_e.view(Int32Array,s,1152,32),this.fpu_stack_empty=_e.view(Uint8Array,s,816,1),this.fpu_stack_empty[0]=255,this.fpu_stack_ptr=_e.view(Uint8Array,s,1032,1),this.fpu_stack_ptr[0]=0,this.fpu_control_word=_e.view(Uint16Array,s,1036,1),this.fpu_control_word[0]=895,this.fpu_status_word=_e.view(Uint16Array,s,1040,1),this.fpu_status_word[0]=0,this.fpu_ip=_e.view(Int32Array,s,1048,1),this.fpu_ip[0]=0,this.fpu_ip_selector=_e.view(Int32Array,s,1052,1),this.fpu_ip_selector[0]=0,this.fpu_opcode=_e.view(Int32Array,s,1044,1),this.fpu_opcode[0]=0,this.fpu_dp=_e.view(Int32Array,s,1056,1),this.fpu_dp[0]=0,this.fpu_dp_selector=_e.view(Int32Array,s,1060,1),this.fpu_dp_selector[0]=0,this.reg_xmm32s=_e.view(Int32Array,s,832,32),this.mxcsr=_e.view(Int32Array,s,824,1),this.sreg=_e.view(Uint16Array,s,668,8),this.dreg=_e.view(Int32Array,s,684,8),this.reg_pdpte=_e.view(Int32Array,s,968,8),this.svga_dirty_bitmap_min_offset=_e.view(Uint32Array,s,716,1),this.svga_dirty_bitmap_max_offset=_e.view(Uint32Array,s,720,1),this.fw_value=[],this.fw_pointer=0,this.option_roms=[],this.io=void 0,this.bus=t,this.set_tsc(0,0),this.debug_init(),this.do_many_cycles_count=0,this.do_many_cycles_total=0,this.seen_code={},this.seen_code_uncompiled={}}Xr.prototype.clear_opstats=function(){new Uint8Array(this.wasm_memory.buffer,32768,131072).fill(0),this.wm.exports.profiler_init()},Xr.prototype.create_jit_imports=function(){const t=Object.create(null);t.m=this.wm.exports.memory;for(let e of Object.keys(this.wm.exports))e.startsWith("_")||e.startsWith("zstd")||e.endsWith("_js")||(t[e]=this.wm.exports[e]);this.jit_imports=t},Xr.prototype.wasm_patch=function(){const t=t=>this.wm.exports[t],e=e=>{const i=t(e);return console.assert(i,"Missing import: "+e),i};this.reset_cpu=e("reset_cpu"),this.getiopl=e("getiopl"),this.get_eflags=e("get_eflags"),this.get_eflags_no_arith=e("get_eflags_no_arith"),this.pic_call_irq=e("pic_call_irq"),this.do_many_cycles_native=e("do_many_cycles_native"),this.cycle_internal=e("cycle_internal"),this.read8=e("read8"),this.read16=e("read16"),this.read32s=e("read32s"),this.write8=e("write8"),this.write16=e("write16"),this.write32=e("write32"),this.in_mapped_range=e("in_mapped_range"),this.fpu_load_tag_word=e("fpu_load_tag_word"),this.fpu_load_status_word=e("fpu_load_status_word"),this.fpu_get_sti_f64=e("fpu_get_sti_f64"),this.translate_address_system_read=e("translate_address_system_read_js"),this.get_seg_cs=e("get_seg_cs"),this.get_real_eip=e("get_real_eip"),this.clear_tlb=e("clear_tlb"),this.full_clear_tlb=e("full_clear_tlb"),this.set_tsc=e("set_tsc"),this.store_current_tsc=e("store_current_tsc"),this.jit_force_generate_unsafe=t("jit_force_generate_unsafe"),this.jit_clear_cache=e("jit_clear_cache_js"),this.jit_dirty_cache=e("jit_dirty_cache"),this.codegen_finalize_finished=e("codegen_finalize_finished"),this.allocate_memory=e("allocate_memory"),this.zero_memory=e("zero_memory"),this.svga_allocate_memory=e("svga_allocate_memory"),this.svga_allocate_dest_buffer=e("svga_allocate_dest_buffer"),this.svga_fill_pixel_buffer=e("svga_fill_pixel_buffer"),this.svga_mark_dirty=e("svga_mark_dirty"),this.zstd_create_ctx=e("zstd_create_ctx"),this.zstd_get_src_ptr=e("zstd_get_src_ptr"),this.zstd_free_ctx=e("zstd_free_ctx"),this.zstd_read=e("zstd_read"),this.zstd_read_free=e("zstd_read_free")},Xr.prototype.jit_force_generate=function(t){this.jit_force_generate_unsafe?this.jit_force_generate_unsafe(t):ne(!1,"Not supported in this wasm build: jit_force_generate_unsafe")},Xr.prototype.jit_clear_func=function(t){ne(t>=0&&t<900),this.wm.wasm_table.set(t+1024,null)},Xr.prototype.jit_clear_all_funcs=function(){const t=this.wm.wasm_table;for(let e=0;e<900;e++)t.set(1024+e,null)},Xr.prototype.get_state=function(){var t=[];t[0]=this.memory_size[0],t[1]=this.segment_is_null,t[2]=this.segment_offsets,t[3]=this.segment_limits,t[4]=this.protected_mode[0],t[5]=this.idtr_offset[0],t[6]=this.idtr_size[0],t[7]=this.gdtr_offset[0],t[8]=this.gdtr_size[0],t[9]=this.page_fault[0],t[10]=this.cr,t[11]=this.cpl[0],t[13]=this.is_32[0],t[16]=this.stack_size_32[0],t[17]=this.in_hlt[0],t[18]=this.last_virt_eip[0],t[19]=this.eip_phys[0],t[22]=this.sysenter_cs[0],t[23]=this.sysenter_eip[0],t[24]=this.sysenter_esp[0],t[25]=this.prefixes[0],t[26]=this.flags[0],t[27]=this.flags_changed[0],t[28]=this.last_op1[0],t[30]=this.last_op_size[0],t[37]=this.instruction_pointer[0],t[38]=this.previous_ip[0],t[39]=this.reg32,t[40]=this.sreg,t[41]=this.dreg,t[42]=this.reg_pdpte,this.store_current_tsc(),t[43]=this.current_tsc,t[45]=this.devices.virtio_9p,t[46]=this.devices.apic,t[47]=this.devices.rtc,t[48]=this.devices.pci,t[49]=this.devices.dma,t[50]=this.devices.acpi,t[51]=this.devices.hpet,t[52]=this.devices.vga,t[53]=this.devices.ps2,t[54]=this.devices.uart0,t[55]=this.devices.fdc,t[56]=this.devices.cdrom,t[57]=this.devices.hda,t[58]=this.devices.pit,t[59]=this.devices.net,t[60]=this.devices.pic,t[61]=this.devices.sb16,t[62]=this.fw_value,t[63]=this.devices.ioapic,t[64]=this.tss_size_32[0],t[66]=this.reg_xmm32s,t[67]=this.fpu_st,t[68]=this.fpu_stack_empty[0],t[69]=this.fpu_stack_ptr[0],t[70]=this.fpu_control_word[0],t[71]=this.fpu_ip[0],t[72]=this.fpu_ip_selector[0],t[73]=this.fpu_dp[0],t[74]=this.fpu_dp_selector[0],t[75]=this.fpu_opcode[0];const{packed_memory:e,bitmap:i}=this.pack_memory();return t[77]=e,t[78]=new Uint8Array(i.get_buffer()),t[79]=this.devices.uart1,t[80]=this.devices.uart2,t[81]=this.devices.uart3,t},Xr.prototype.set_state=function(t){this.memory_size[0]=t[0],this.mem8.length!==this.memory_size[0]&&console.warn("Note: Memory size mismatch. we="+this.mem8.length+" state="+this.memory_size[0]),this.segment_is_null.set(t[1]),this.segment_offsets.set(t[2]),this.segment_limits.set(t[3]),this.protected_mode[0]=t[4],this.idtr_offset[0]=t[5],this.idtr_size[0]=t[6],this.gdtr_offset[0]=t[7],this.gdtr_size[0]=t[8],this.page_fault[0]=t[9],this.cr.set(t[10]),this.cpl[0]=t[11],this.is_32[0]=t[13],this.stack_size_32[0]=t[16],this.in_hlt[0]=t[17],this.last_virt_eip[0]=t[18],this.eip_phys[0]=t[19],this.sysenter_cs[0]=t[22],this.sysenter_eip[0]=t[23],this.sysenter_esp[0]=t[24],this.prefixes[0]=t[25],this.flags[0]=t[26],this.flags_changed[0]=t[27],this.last_op1[0]=t[28],this.last_op_size[0]=t[30],this.instruction_pointer[0]=t[37],this.previous_ip[0]=t[38],this.reg32.set(t[39]),this.sreg.set(t[40]),this.dreg.set(t[41]),t[42]&&this.reg_pdpte.set(t[42]),this.set_tsc(t[43][0],t[43][1]),this.devices.virtio_9p&&this.devices.virtio_9p.set_state(t[45]),this.devices.apic&&this.devices.apic.set_state(t[46]),this.devices.rtc&&this.devices.rtc.set_state(t[47]),this.devices.pci&&this.devices.pci.set_state(t[48]),this.devices.dma&&this.devices.dma.set_state(t[49]),this.devices.acpi&&this.devices.acpi.set_state(t[50]),this.devices.hpet&&this.devices.hpet.set_state(t[51]),this.devices.vga&&this.devices.vga.set_state(t[52]),this.devices.ps2&&this.devices.ps2.set_state(t[53]),this.devices.uart0&&this.devices.uart0.set_state(t[54]),this.devices.fdc&&this.devices.fdc.set_state(t[55]),this.devices.cdrom&&this.devices.cdrom.set_state(t[56]),this.devices.hda&&this.devices.hda.set_state(t[57]),this.devices.pit&&this.devices.pit.set_state(t[58]),this.devices.net&&this.devices.net.set_state(t[59]),this.devices.pic&&this.devices.pic.set_state(t[60]),this.devices.sb16&&this.devices.sb16.set_state(t[61]),this.devices.uart1&&this.devices.uart1.set_state(t[79]),this.devices.uart2&&this.devices.uart2.set_state(t[80]),this.devices.uart3&&this.devices.uart3.set_state(t[81]),this.fw_value=t[62],this.devices.ioapic&&this.devices.ioapic.set_state(t[63]),this.tss_size_32[0]=t[64],this.reg_xmm32s.set(t[66]),this.fpu_st.set(t[67]),this.fpu_stack_empty[0]=t[68],this.fpu_stack_ptr[0]=t[69],this.fpu_control_word[0]=t[70],this.fpu_ip[0]=t[71],this.fpu_ip_selector[0]=t[72],this.fpu_dp[0]=t[73],this.fpu_dp_selector[0]=t[74],this.fpu_opcode[0]=t[75];const e=new _e.Bitmap(t[78].buffer),i=t[77];this.unpack_memory(e,i),this.full_clear_tlb(),this.jit_clear_cache()},Xr.prototype.pack_memory=function(){ne(0==(4095&this.mem8.length));const t=this.mem8.length>>12,e=[];for(let i=0;i<t;i++){const t=i<<12,s=this.mem32s.subarray(t>>2,t+4096>>2);let r=!0;for(let t=0;t<s.length;t++)if(0!==s[t]){r=!1;break}r||e.push(i)}const i=new _e.Bitmap(t),s=new Uint8Array(e.length<<12);for(let[t,r]of e.entries()){i.set(r,1);const e=r<<12,a=this.mem8.subarray(e,e+4096);s.set(a,t<<12)}return{bitmap:i,packed_memory:s}},Xr.prototype.unpack_memory=function(t,e){this.zero_memory(this.memory_size[0]);const i=this.memory_size[0]>>12;let s=0;for(let r=0;r<i;r++)if(t.get(r)){let t=s<<12,i=e.subarray(t,t+4096);this.mem8.set(i,r<<12),s++}},Xr.prototype.main_run=function(){if(this.in_hlt[0]){const t=this.hlt_loop();if(this.in_hlt[0])return t}const t=Pi.microtick();let e=t;for(;e-t<1;){this.do_many_cycles(),e=Pi.microtick();const t=this.run_hardware_timers(e);if(this.handle_irqs(),this.in_hlt[0])return t}return 0},Xr.prototype.reboot_internal=function(){this.reset_cpu(),this.fw_value=[],this.devices.virtio&&this.devices.virtio.reset(),this.load_bios()},Xr.prototype.reset_memory=function(){this.mem8.fill(0)},Xr.prototype.create_memory=function(t){t<1048576?t=1048576:(0|t)<0&&(t=Math.pow(2,31)-131072),ne((0|(t=1+(t-1|131071)|0))>0),ne(0==(131071&t)),console.assert(0===this.memory_size[0],"Expected uninitialised memory"),this.memory_size[0]=t;const e=this.allocate_memory(t);this.mem8=_e.view(Uint8Array,this.wasm_memory,e,t),this.mem32s=_e.view(Uint32Array,this.wasm_memory,e,t>>2)},Xr.prototype.init=function(t,i){"number"==typeof t.log_level&&(LOG_LEVEL=t.log_level),this.create_memory("number"==typeof t.memory_size?t.memory_size:67108864),this.acpi_enabled[0]=+t.acpi,this.reset_cpu();var s=new mi(this);if(this.io=s,this.bios.main=t.bios,this.bios.vga=t.vga_bios,this.load_bios(),t.bzimage){const{option_rom:e}=load_kernel(this.mem8,t.bzimage,t.initrd,t.cmdline||"");e&&this.option_roms.push(e)}s.register_read(179,this,(function(){return re("port 0xB3 read"),0}));var r=0;if(s.register_read(146,this,(function(){return r})),s.register_write(146,this,(function(t){r=t})),s.register_read(1297,this,(function(){return this.fw_pointer<this.fw_value.length?this.fw_value[this.fw_pointer++]:(ne(!1,"config port: Read past value"),0)})),s.register_write(1296,this,void 0,(function(t){function e(t){return new Uint8Array(new Int32Array([t]).buffer)}function i(t){return t<<24|t<<8&16711680|t>>8&65280|t>>>24}if(re("bios config port, index="+de(t)),this.fw_pointer=0,0===t)this.fw_value=e(1431127377);else if(1===t)this.fw_value=e(0);else if(3===t)this.fw_value=e(this.memory_size[0]);else if(5===t)this.fw_value=e(1);else if(15===t)this.fw_value=e(1);else if(13===t)this.fw_value=new Uint8Array(16);else if(25===t){const t=4+64*this.option_roms.length,e=new Int32Array(t),r=new Uint8Array(e.buffer);e[0]=i(this.option_roms.length);for(let t=0;t<this.option_roms.length;t++){const{name:a,data:n}=this.option_roms[t],o=4+64*t;ne(49152+t<65536),e[o+0>>2]=i(n.length),e[o+4>>2]=(s=49152+t)>>8|s<<8&65280,ne(a.length<56);for(let t=0;t<a.length;t++)r[o+8+t]=a.charCodeAt(t)}this.fw_value=r}else if(t>=32768&&t<49152)this.fw_value=e(0);else if(t>=49152&&t-49152<this.option_roms.length){const e=t-49152;this.fw_value=this.option_roms[e].data}else re("Warning: Unimplemented fw index: "+de(t)),this.fw_value=e(0);var s})),s.register_write(128,this,(function(t){})),this.devices={},t.load_devices){this.devices.pic=new Os(this),this.devices.pci=new Cs(this),this.acpi_enabled[0]&&(this.devices.ioapic=new Ei(this),this.devices.apic=new c(this),this.devices.acpi=new e(this)),this.devices.rtc=new ii(this),this.fill_cmos(this.devices.rtc,t),this.devices.dma=new ge(this),this.devices.vga=new jr(this,i,t.vga_memory_size||8388608),this.devices.ps2=new Ps(this,i),this.devices.uart0=new Dr(this,1016,i),t.uart1&&(this.devices.uart1=new Dr(this,760,i)),t.uart2&&(this.devices.uart2=new Dr(this,1e3,i)),t.uart3&&(this.devices.uart3=new Dr(this,744,i)),this.devices.fdc=new si(this,t.fda,t.fdb);var a=0;t.hda&&(this.devices.hda=new li(this,t.hda,t.hdb,!1,a++,i)),t.cdrom&&(this.devices.cdrom=new li(this,t.cdrom,void 0,!0,a++,i)),this.devices.pit=new Ls(this,i),t.enable_ne2k&&(this.devices.net=new As(this,i,t.preserve_mac_from_state_image)),t.fs9p&&(this.devices.virtio_9p=new Virtio9p(t.fs9p,this,i)),this.devices.sb16=new _r(this,i)}t.multiboot&&this.load_multiboot(t.multiboot),this.debug.init()},Xr.prototype.load_multiboot=function(t){re("Trying multiboot from buffer of size "+t.byteLength,LOG_CPU);const e=464367618,i=8192;if(t.byteLength<i){var s=new Int32Array(2048);new Uint8Array(s.buffer).set(new Uint8Array(t))}else s=new Int32Array(t,0,2048);for(var r=0;r<i;r+=4){if(s[r>>2]!==e)continue;var a=s[r+4>>2];if(e+a+s[r+8>>2]|0){re("Multiboot checksum check failed",LOG_CPU);continue}re("Multiboot magic found, flags: "+de(a>>>0,8),LOG_CPU),ne(0==(-65537&a),"TODO"),this.reg32[REG_EAX]=732803074;let i=31744;this.reg32[REG_EBX]=i,this.write32(i,0),this.cr[0]=1,this.protected_mode[0]=1,this.flags[0]=FLAGS_DEFAULT,this.is_32[0]=1,this.stack_size_32[0]=1;for(var n=0;n<6;n++)this.segment_is_null[n]=0,this.segment_offsets[n]=0,this.segment_limits[n]=4294967295,this.sreg[n]=45058;if(65536&a){re("Multiboot specifies its own address table",LOG_CPU);var o=s[r+12>>2],h=s[r+16>>2],_=s[r+20>>2],d=s[r+24>>2],c=s[r+28>>2];re("header="+de(o,8)+" load="+de(h,8)+" load_end="+de(_,8)+" bss_end="+de(d,8)+" entry="+de(c,8)),ne(h<=o);var u=r-(o-h);if(0===_)var p=void 0;else{ne(_>=h);p=_-h}let e=new Uint8Array(t,u,p);this.write_blob(e,h),this.instruction_pointer[0]=this.get_seg_cs()+c|0}else if(1179403647===s[0]){re("Multiboot image is in elf format",LOG_CPU);let e=read_elf(t);this.instruction_pointer[0]=this.get_seg_cs()+e.header.entry|0;for(let i of e.program_headers)if(0===i.type);else if(1===i.type)if(ne(i.paddr===i.vaddr),ne(i.filesz<=i.memsz),i.paddr+i.memsz<this.memory_size[0]){if(i.filesz){let e=new Uint8Array(t,i.offset,i.filesz);this.write_blob(e,i.paddr)}}else re("Warning: Skipped loading section, paddr="+de(i.paddr)+" memsz="+i.memsz,LOG_CPU);else 2===i.type||3===i.type||4===i.type||6===i.type||1685382480===i.type||1685382481===i.type||1685382483===i.type||ne(!1,"unimplemented elf section type: "+de(i.type))}else ne(!1,"Not a bootable multiboot format");this.io.register_write_consecutive(244,this,(function(t){throw console.log("Test exited with code "+de(t,2)),"HALT"}),(function(){}),(function(){}),(function(){}));for(let t=14;t<=15;t++)this.io.register_write(8192+t,this,(function(e){re("kvm-unit-test: Set irq "+de(t)+" to "+de(e,2)),e?this.device_raise_irq(t):this.device_lower_irq(t)}));re("Starting multiboot kernel at:",LOG_CPU),this.debug.dump_state(),this.debug.dump_regs();break}},Xr.prototype.fill_cmos=function(t,e){var i=e.boot_order||531;t.cmos_write(56,1|i>>4&240),t.cmos_write(61,255&i),t.cmos_write(21,128),t.cmos_write(22,2);var s=0;this.memory_size[0]>=1048576&&(s=this.memory_size[0]-1048576>>10,s=Math.min(s,65535)),t.cmos_write(23,255&s),t.cmos_write(24,s>>8&255),t.cmos_write(48,255&s),t.cmos_write(49,s>>8&255);var r=0;this.memory_size[0]>=16777216&&(r=this.memory_size[0]-16777216>>16,r=Math.min(r,65535)),t.cmos_write(52,255&r),t.cmos_write(53,r>>8&255),t.cmos_write(91,0),t.cmos_write(92,0),t.cmos_write(93,0),t.cmos_write(20,47),t.cmos_write(95,0),e.fastboot&&t.cmos_write(63,1)},Xr.prototype.load_bios=function(){var t=this.bios.main,e=this.bios.vga;if(t){var i=new Uint8Array(t),s=1048576-t.byteLength;if(this.write_blob(i,s),e){var r=new Uint8Array(e);this.write_blob(r,786432),this.io.mmap_register(4272947200,1048576,(function(t){return(t=t-4272947200|0)<r.length?r[t]:0}),(function(t,e){ne(!1,"Unexpected write to VGA rom")}))}else re("Warning: No VGA BIOS");this.io.mmap_register(4293918720,1048576,function(t){return t&=1048575,this.mem8[t]}.bind(this),function(t,e){t&=1048575,this.mem8[t]=e}.bind(this))}else re("Warning: No BIOS")},Xr.prototype.do_many_cycles=function(){var t=Pi.microtick();this.do_many_cycles_native(),this.do_many_cycles_total+=Pi.microtick()-t,this.do_many_cycles_count++},Xr.prototype.cycle=function(){this.cycle_internal()},Xr.prototype.codegen_finalize=function(t,e,i,s,r){s>>>=0,r>>>=0,ne(t>=0&&t<900);const a=new Uint8Array(this.wasm_memory.buffer,s,r);this.seen_code[e]=(this.seen_code[e]||0)+1,this.test_hook_did_generate_wasm&&this.test_hook_did_generate_wasm(a);WebAssembly.instantiate(a,{e:this.jit_imports}).then((s=>{const r=s.instance.exports.f;this.codegen_finalize_finished(t,e,i),this.wm.wasm_table.set(t+1024,r),this.test_hook_did_finalize_wasm&&this.test_hook_did_finalize_wasm(a)})).catch((t=>{throw console.log(t),t}))},Xr.prototype.log_uncompiled_code=function(t,e){if(DUMP_UNCOMPILED_ASSEMBLY&&(this.seen_code_uncompiled[t]||0)<100){this.seen_code_uncompiled[t]=(this.seen_code_uncompiled[t]||0)+1,-4096&(t^(e+=8))&&(re("truncated disassembly start="+de(t>>>0)+" end="+de(e>>>0)),e=1+(4095|t)),e<t&&(e=t),ne(e>=t);const i=new Uint8Array(e-t);for(let s=t;s<e;s++)i[s-t]=this.read8(s);re("Uncompiled code:"),this.debug.dump_code(this.is_32[0]?1:0,i,t)}},Xr.prototype.dump_function_code=function(t,e){},Xr.prototype.hlt_loop=function(){if(512&this.get_eflags_no_arith()){const t=this.run_hardware_timers(Pi.microtick());return this.handle_irqs(),t}return 100},Xr.prototype.run_hardware_timers=function(t){var e=this.devices.pit.timer(t,!1),i=this.devices.rtc.timer(t,!1);let s=100,r=100;return this.acpi_enabled[0]&&(s=this.devices.acpi.timer(t),r=this.devices.apic.timer(t)),Math.min(e,i,100,s,r)},Xr.prototype.hlt_op=function(){0==(512&this.get_eflags_no_arith())&&this.bus.send("cpu-event-halt"),this.in_hlt[0]=1,this.hlt_loop()},Xr.prototype.handle_irqs=function(){512&this.get_eflags_no_arith()&&(this.pic_acknowledge(),this.next_tick_immediately())},Xr.prototype.pic_acknowledge=function(){ne(512&this.get_eflags_no_arith()),this.devices.pic&&this.devices.pic.acknowledge_irq(),this.devices.apic&&this.devices.apic.acknowledge_irq()},Xr.prototype.device_raise_irq=function(t){ne(1===arguments.length),this.devices.pic&&this.devices.pic.set_irq(t),this.devices.ioapic&&this.devices.ioapic.set_irq(t)},Xr.prototype.device_lower_irq=function(t){this.devices.pic&&this.devices.pic.clear_irq(t),this.devices.ioapic&&this.devices.ioapic.clear_irq(t)},Xr.prototype.debug_init=function(){var t=this,e={};function i(e){var i=t.protected_mode[0]?"prot":"real";t.flags[0],FLAG_VM;for(var s=t.get_eflags(),r=t.getiopl(),a=t.cpl[0],n=h(t.sreg[REG_CS],4)+":"+h(t.get_real_eip()>>>0,8),o=h(t.sreg[REG_SS],4)+":"+h(t.reg32[REG_ES]>>>0,8),_=t.is_32[0]?"32":"16",d=t.flags[0]&FLAG_INTERRUPT?1:0,c={[FLAG_CARRY]:"c",[FLAG_PARITY]:"p",[FLAG_ADJUST]:"a",[FLAG_ZERO]:"z",[FLAG_SIGN]:"s",[FLAG_TRAP]:"t",[FLAG_INTERRUPT]:"i",[FLAG_DIRECTION]:"d",[FLAG_OVERFLOW]:"o"},u="",p=0;p<16;p++)c[1<<p]&&(u+=s&1<<p?c[1<<p]:" ");return"mode="+i+"/"+_+" paging="+ +(0!=(t.cr[0]&CR0_PG))+" pae="+ +(0!=(t.cr[4]&CR4_PAE))+" iopl="+r+" cpl="+a+" if="+d+" cs:eip="+n+" cs_off="+h(t.get_seg_cs()>>>0,8)+" flgs="+h(t.get_eflags()>>>0,6)+" ("+u+") ss:esp="+o+" ssize="+ +t.stack_size_32[0]+(e?" in "+e:"")}function s(){var e={eax:REG_EAX,ecx:REG_ECX,edx:REG_EDX,ebx:REG_EBX,esp:REG_ESP,ebp:REG_EBP,esi:REG_ESI,edi:REG_EDI},i=["eax","ecx","edx","ebx","esp","ebp","esi","edi"];REG_CS,REG_DS,REG_ES,REG_FS,REG_GS,REG_SS;for(var s="",r="",a=0;a<4;a++)s+=i[a]+"="+h(t.reg32[e[i[a]]]>>>0,8)+" ",r+=i[a+4]+"="+h(t.reg32[e[i[a+4]]]>>>0,8)+" ";return[s+=" ds="+h(t.sreg[REG_DS],4)+" es="+h(t.sreg[REG_ES],4)+" fs="+h(t.sreg[REG_FS],4),r+=" gs="+h(t.sreg[REG_GS],4)+" cs="+h(t.sreg[REG_CS],4)+" ss="+h(t.sreg[REG_SS],4)]}function r(t,e,i){if(!(1&t))return!1;var s=128==(128&t);return{size:s,global:256==(256&t),accessed:32==(32&t),dirty:64==(64&t),cache_disable:16==(16&t),user:4==(4&t),read_write:2==(2&t),address:(s&&!i?t&(e?4292870144:4290772992):4294963200&t)>>>0}}function a(e,i,s){for(var a=i?512:1024,n=i?8:4,o=i?21:22,_=0;_<a;_++){var d=e+_*n,c=t.read32s(d),u=r(c,i,!0);if(u){var p="";if(p+=u.size?"S ":" ",p+=u.accessed?"A ":" ",p+=u.cache_disable?"Cd ":" ",p+=u.user?"U ":" ",p+=u.read_write?"Rw ":" ",u.size)dbg_log("=== "+h(s+(_<<o)>>>0,8)+" -> "+h(u.address>>>0,8)+" | "+p);else{dbg_log("=== "+h(s+(_<<o)>>>0,8)+" | "+p);for(var l=0;l<a;l++){var f=u.address+l*n,m=r(c=t.read32s(f),i,!1);m&&(p="",p+=m.cache_disable?"Cd ":" ",p+=m.user?"U ":" ",p+=m.read_write?"Rw ":" ",p+=m.global?"G ":" ",p+=m.accessed?"A ":" ",p+=m.dirty?"Di ":" ",dbg_log("# "+h(s+(_<<o|l<<12)>>>0,8)+" -> "+h(m.address,8)+" | "+p+" (at "+h(f,8)+")"))}}}}}let n,o,_;this.debug=e,e.init=function(){if(t.io){var e="";t.io.register_write(1026,this,i),t.io.register_write(1280,this,i)}function i(t){10===t?(dbg_log(e,LOG_BIOS),e=""):e+=String.fromCharCode(t)}},e.get_regs_short=s,e.dump_regs=function(){var t=s();dbg_log(t[0],LOG_CPU),dbg_log(t[1],LOG_CPU)},e.get_state=i,e.dump_state=function(t){dbg_log(i(t),LOG_CPU)},e.dump_stack=function(e,i){var s=t.reg32[REG_ESP];dbg_log("========= STACK =========="),(i>=e||void 0===i)&&(e=5,i=-5);for(var r=e;r>i;r--){var a=" ";r||(a="=> "),a+=h(r,2)+" | ",dbg_log(a+h(s+4*r,8)+" | "+h(t.read32s(s+4*r)>>>0))}},e.dump_page_structures=function(){if(t.cr[4]&CR4_PAE){dbg_log("PAE enabled");for(var e=0;e<4;e++){var i=t.cr[3]+8*e,s=t.read32s(i);1&s&&a(4294963200&s,!0,e<<30)}}else dbg_log("PAE disabled"),a(t.cr[3],!1,0)},e.dump_gdt_ldt=function(){function e(e,i){for(var s=0;s<i;s+=8,e+=8){var r=t.read16(e+2)|t.read8(e+4)<<16|t.read8(e+7)<<24,a=t.read16(e)|(15&t.read8(e+6))<<16,n=t.read8(e+5),o=t.read8(e+6)>>4,_="",d=n>>5&3;_+=128&n?" P ":"NP ",16&n?(_+=4&o?"32b ":"16b ",8&n?(_+="X ",4&n&&(_+="C ")):_+="R ",_+="RW "):_+="sys: "+h(15&n),8&o&&(a=a<<12|4095),dbg_log(h(-8&s,4)+" "+h(r>>>0,8)+" ("+h(a>>>0,8)+" bytes) "+_+"; dpl = "+d+", a = "+n.toString(2)+", f = "+o.toString(2))}}dbg_log("gdt: (len = "+h(t.gdtr_size[0])+")"),e(t.translate_address_system_read(t.gdtr_offset[0]),t.gdtr_size[0]),dbg_log("\nldt: (len = "+h(t.segment_limits[REG_LDTR])+")"),e(t.translate_address_system_read(t.segment_offsets[REG_LDTR]),t.segment_limits[REG_LDTR])},e.dump_idt=function(){for(var e=0;e<t.idtr_size[0];e+=8){var i,s=t.translate_address_system_read(t.idtr_offset[0]+e),r=t.read16(s)|t.read16(s+6)<<16,a=t.read16(s+2),n=t.read8(s+5),o=n>>5&3;i=5==(31&n)?"task gate ":14==(31&n)?"intr gate ":15==(31&n)?"trap gate ":"invalid ",i+=128&n?" P":"NP",dbg_log(h(e>>3,4)+" "+h(r>>>0,8)+", "+h(a,4)+"; "+i+"; dpl = "+o+", t = "+n.toString(2))}},e.get_memory_dump=function(e,i){void 0===e?(e=0,i=t.memory_size[0]):void 0===i&&(i=e,e=0);return t.mem8.slice(e,e+i).buffer},e.memory_hex_dump=function(e,i){var s,r;i=i||64;for(var a=0;a<i>>4;a++){s=h(e+(a<<4),5)+" ";for(var n=0;n<16;n++)r=t.read8(e+(a<<4)+n),s+=h(r,2)+" ";for(s+=" ",n=0;n<16;n++)r=t.read8(e+(a<<4)+n),s+=r<33||r>126?".":String.fromCharCode(r);dbg_log(s)}},e.used_memory_dump=function(){for(var e,i=128,s=t.memory_size[0]/i/16|0,r=0;r<16;r++){e=h(r*i*s,8)+" | ";for(var a=0;a<i;a++){var n=t.mem32s[(r*i+a)*s]>0;e+=n?"X":" "}dbg_log(e)}},e.debug_interrupt=function(t){},e.dump_code=function(t,e,i){if(!o){if(void 0===n&&("function"==typeof require||(n=window.cs),void 0===n))return void dbg_log("Warning: Missing capstone library, disassembly not available");o=[new n.Capstone(n.ARCH_X86,n.MODE_16),new n.Capstone(n.ARCH_X86,n.MODE_32)]}try{o[t].disasm(e,i).forEach((function(t){dbg_log(h(t.address>>>0)+": "+v86util.pads(t.bytes.map((t=>h(t,2).slice(-2))).join(" "),20)+" "+t.mnemonic+" "+t.op_str)})),dbg_log("")}catch(t){dbg_log("Could not disassemble: "+Array.from(e).map((t=>h(t,2))).join(" "))}},e.dump_wasm=function(t){if(void 0!==_||("function"==typeof require||(_=new window.WabtModule),void 0!==_)){t=t.slice();try{var e=_.readWasm(t,{readDebugNames:!1});e.generateNames(),e.applyNames();const i=e.toText({foldExprs:!0,inlineExport:!0});dbg_log(i)}catch(e){i="failed.wasm",s=new Blob([t]),(r=document.createElement("a")).download=i,r.href=window.URL.createObjectURL(s),r.dataset.downloadurl=["application/octet-stream",r.download,r.href].join(":"),r.click(),window.URL.revokeObjectURL(r.src),console.log(e.toString())}finally{e&&e.destroy()}var i,s,r}else dbg_log("Warning: Missing libwabt, wasm dump not available")}};const Hr=1179403647;let Yr=DataView.prototype,Qr={size:1,get:Yr.getUint8,set:Yr.setUint8},Jr={size:2,get:Yr.getUint16,set:Yr.setUint16},Zr={size:4,get:Yr.getUint32,set:Yr.setUint32},$r=sa([{magic:Zr},{class:Qr},{data:Qr},{version0:Qr},{osabi:Qr},{abiversion:Qr},{pad0:(ta=7,{size:ta,get:t=>-1})},{type:Jr},{machine:Jr},{version1:Zr},{entry:Zr},{phoff:Zr},{shoff:Zr},{flags:Zr},{ehsize:Jr},{phentsize:Jr},{phnum:Jr},{shentsize:Jr},{shnum:Jr},{shstrndx:Jr}]);var ta;console.assert(52===$r.reduce(((t,e)=>t+e.size),0));let ea=sa([{type:Zr},{offset:Zr},{vaddr:Zr},{paddr:Zr},{filesz:Zr},{memsz:Zr},{flags:Zr},{align:Zr}]);console.assert(32===ea.reduce(((t,e)=>t+e.size),0));let ia=sa([{name:Zr},{type:Zr},{flags:Zr},{addr:Zr},{offset:Zr},{size:Zr},{link:Zr},{info:Zr},{addralign:Zr},{entsize:Zr}]);function sa(t){return t.map((function(t){let e=Object.keys(t);console.assert(1===e.length);let i=e[0],s=t[i];return console.assert(s.size>0),{name:i,type:s,size:s.size,get:s.get,set:s.set}}))}function ra(t){let e=new DataView(t),[i,s]=aa(e,$r);if(console.assert(52===s),DEBUG){for(let t of Object.keys(i))dbg_log(t+": 0x"+i[t].toString(16));dbg_log(i)}console.assert(1179403647===i.magic,"Bad magic"),console.assert(1===i.class,"Unimplemented: 64 bit elf"),console.assert(1===i.data,"Unimplemented: big endian"),console.assert(1===i.version0,"Bad version0"),console.assert(2===i.type,"Unimplemented type"),console.assert(1===i.version1,"Bad version1"),console.assert(52===i.ehsize,"Bad header size"),console.assert(32===i.phentsize,"Bad program header size"),console.assert(40===i.shentsize,"Bad section header size");let[r,a]=na(oa(e,i.phoff,i.phentsize*i.phnum),ea,i.phnum),[n,o]=na(oa(e,i.shoff,i.shentsize*i.shnum),ia,i.shnum);if(DEBUG&&LOG_LEVEL){console.log("%d program headers:",r.length);for(let t of r)console.log("type=%s offset=%s vaddr=%s paddr=%s filesz=%s memsz=%s flags=%s align=%s",t.type.toString(16),t.offset.toString(16),t.vaddr.toString(16),t.paddr.toString(16),t.filesz.toString(16),t.memsz.toString(16),t.flags.toString(16),t.align.toString(16));console.log("%d program headers:",n.length);for(let t of n)console.log("name=%s type=%s flags=%s addr=%s offset=%s size=%s link=%s info=%s addralign=%s entsize=%s",t.name.toString(16),t.type.toString(16),t.flags.toString(16),t.addr.toString(16),t.offset.toString(16),t.size.toString(16),t.link.toString(16),t.info.toString(16),t.addralign.toString(16),t.entsize.toString(16))}return{header:i,program_headers:r,sections_headers:n}}function aa(t,e){let i={},s=0;for(let r of e){let e=r.get.call(t,s,true);console.assert(void 0===i[r.name]),i[r.name]=e,s+=r.size}return[i,s]}function na(t,e,i){let s=[],r=0;for(var a=0;a<i;a++){let[i,a]=aa(oa(t,r),e);s.push(i),r+=a}return[s,r]}function oa(t,e,i){return new DataView(t.buffer,t.byteOffset+e,i)}console.assert(40===ia.reduce(((t,e)=>t+e.size),0));const ha=497,_a=500,da=506,ca=510,ua=514,pa=518,la=528,fa=529,ma=532,ga=536,ba=540,ya=548,va=552,wa=556,ka=560,xa=564,Aa=565,qa=566,Ia=568,Ca=584,za=588,Oa=600,Ra=608,La=43605,Ea=1400005704,Pa=255,Ta=1,Da=32,Ua=64,Ga=128;function Sa(t,e,i,s){dbg_log("Trying to load kernel of size "+e.byteLength);const r=1048576,a=new Uint8Array(e),n=new Uint16Array(e),o=new Uint32Array(e),_=a[497]||4;o[125],n[253];const d=n[255];if(43605!==d)return void dbg_log("Bad checksum1: "+h(d));const c=n[257]|n[258]<<16;if(1400005704!==c)return void dbg_log("Bad checksum2: "+h(c));const u=n[259];dbg_assert(u>=514);const p=a[529];dbg_assert(1&p);const l=n[283],f=o[139],m=o[140],g=a[564],b=a[565],y=o[142],v=o[146],w=o[147],k=o[150],x=o[151],A=o[152];dbg_log("kernel boot protocol version: "+h(u)),dbg_log("flags="+h(p)+" xflags="+h(l)),dbg_log("code32_start="+h(o[133])),dbg_log("initrd_addr_max="+h(f)),dbg_log("kernel_alignment="+h(m)),dbg_log("relocatable="+g),dbg_log("min_alignment="+h(b)),dbg_log("cmdline max="+h(y)),dbg_log("payload offset="+h(v)+" size="+h(w)),dbg_log("pref_address="+h(x)+":"+h(k)),dbg_log("init_size="+h(A));const q=524288,I=57344;a[528]=255;const C=-33&p&-65|128;a[529]=C,n[274]=56832,n[253]=65535,dbg_log("heap_end_ptr="+h(56832)),s+="\0",dbg_assert(s.length<y);const z=581632;dbg_log("cmd_line_ptr="+h(z)),o[138]=z;for(let e=0;e<s.length;e++)t[z+e]=s.charCodeAt(e);const O=512*(_+1);dbg_log("prot_mode_kernel_start="+h(O));const R=new Uint8Array(e,0,O),L=new Uint8Array(e,O);let E=0,P=0;return i&&(E=67108864,P=i.byteLength,dbg_assert(r+L.length<E),t.set(new Uint8Array(i),E)),o[134]=E,o[135]=P,dbg_assert(q+R.length<655360),t.set(R,q),t.set(L,r),{option_rom:{name:"genroms/kernel.bin",data:Ma(32768,I)}}}function Ma(t,e){const i=new Uint8Array(256);new Uint16Array(i.buffer)[0]=43605,i[2]=1;let s=3;i[s++]=250,i[s++]=184,i[s++]=t>>0,i[s++]=t>>8,i[s++]=142,i[s++]=192,i[s++]=142,i[s++]=216,i[s++]=142,i[s++]=224,i[s++]=142,i[s++]=232,i[s++]=142,i[s++]=208,i[s++]=188,i[s++]=e>>0,i[s++]=e>>8,i[s++]=234,i[s++]=0,i[s++]=0,i[s++]=t+32>>0,i[s++]=t+32>>8,dbg_assert(!0);i[25]=0;let r=0;for(let t=0;t<i.length;t++)r+=i[t];return i[25]=-r,i}Xr.prototype.mmap_read8=function(t){const e=this.memory_map_read8[t>>>17](t);return ne(e>=0&&e<=255),e},Xr.prototype.mmap_write8=function(t,e){ne(e>=0&&e<=255),this.memory_map_write8[t>>>17](t,e)},Xr.prototype.mmap_read16=function(t){var e=this.memory_map_read8[t>>>17];const i=e(t)|e(t+1|0)<<8;return ne(i>=0&&i<=65535),i},Xr.prototype.mmap_write16=function(t,e){var i=this.memory_map_write8[t>>>17];ne(e>=0&&e<=65535),i(t,255&e),i(t+1|0,e>>8)},Xr.prototype.mmap_read32=function(t){var e=t>>>17;return this.memory_map_read32[e](t)},Xr.prototype.mmap_write32=function(t,e){var i=t>>>17;this.memory_map_write32[i](t,e)},Xr.prototype.mmap_write64=function(t,e,i){var s=t>>>17;ne(s===t+7>>>17);var r=this.memory_map_write32[s];r(t,e),r(t+4,i)},Xr.prototype.mmap_write128=function(t,e,i,s,r){var a=t>>>17;ne(a===t+12>>>17);var n=this.memory_map_write32[a];n(t,e),n(t+4,i),n(t+8,s),n(t+12,r)},Xr.prototype.write_blob=function(t,e){ne(t&&t.length>=0),t.length&&(ne(!this.in_mapped_range(e)),ne(!this.in_mapped_range(e+t.length-1)),this.jit_dirty_cache(e,e+t.length),this.mem8.set(t,e))},Xr.prototype.read_blob=function(t,e){return e&&(ne(!this.in_mapped_range(t)),ne(!this.in_mapped_range(t+e-1))),this.mem8.subarray(t,t+e)};var Fa=6,Va=-2039052682,Ba=0,Na=1,Wa=2,ja=3,Ka=16;const Xa=4247762216;function Ha(t){this.message=t}Ha.prototype=new Error;const Ya={Uint8Array:Uint8Array,Int8Array:Int8Array,Uint16Array:Uint16Array,Int16Array:Int16Array,Uint32Array:Uint32Array,Int32Array:Int32Array,Float32Array:Float32Array,Float64Array:Float64Array};function Qa(t,e){if("object"!=typeof t||null===t)return dbg_assert("function"!=typeof t),t;if(t instanceof Array)return t.map((t=>Qa(t,e)));if(t.constructor===Object&&(console.log(t),dbg_assert(t.constructor!==Object,"Expected non-object")),t.BYTES_PER_ELEMENT){var i=new Uint8Array(t.buffer,t.byteOffset,t.length*t.BYTES_PER_ELEMENT);const s=t.constructor.name.replace("bound ","");return dbg_assert(Ya[s]),{__state_type__:s,buffer_id:e.push(i)-1}}t.get_state||console.log("Object without get_state: ",t);for(var s=t.get_state(),r=[],a=0;a<s.length;a++){var n=s[a];dbg_assert("function"!=typeof n),r[a]=Qa(n,e)}return r}function Ja(t,e){if("object"!=typeof t||null===t)return dbg_assert("function"!=typeof t),t;if(t instanceof Array){for(let i=0;i<t.length;i++)t[i]=Ja(t[i],e);return t}const i=t.__state_type__;dbg_assert(void 0!==i);const s=Ya[i];dbg_assert(s,"Unkown type: "+i);return new s(e[t.buffer_id])}Xr.prototype.save_state=function(){for(var t=[],e=Qa(this,t),i=[],s=0,r=0;r<t.length;r++){var a=t[r].byteLength;i[r]={offset:s,length:a},s=(s+=a)+3&-4}var n=JSON.stringify({buffer_infos:i,state:e}),o=(new TextEncoder).encode(n),h=16+o.length,_=(h=h+3&-4)+s,d=new ArrayBuffer(_),c=new Int32Array(d,0,4);new Uint8Array(d,16,o.length).set(o);var u=new Uint8Array(d,h);c[0]=-2039052682,c[1]=6,c[2]=_,c[3]=o.length;for(r=0;r<t.length;r++){var p=t[r];dbg_assert(p.constructor===Uint8Array),u.set(p,i[r].offset)}return dbg_log("State: json size "+(o.byteLength>>10)+"k"),dbg_log("State: Total buffers size "+(u.byteLength>>10)+"k"),d},Xr.prototype.restore_state=function(t){function e(t,e){const i=t.length;if(i<16)throw new Ha("Invalid length: "+i);const s=new Int32Array(t.buffer,t.byteOffset,4);if(-2039052682!==s[0])throw new Ha("Invalid header: "+h(s[0]>>>0));if(6!==s[1])throw new Ha("Version mismatch: dump="+s[1]+" we=6");if(e&&s[2]!==i)throw new Ha("Length doesn't match header: real="+i+" header="+s[2]);return s[3]}function i(t){const e=(new TextDecoder).decode(t);return JSON.parse(e)}if(t=new Uint8Array(t),4247762216===new Uint32Array(t.buffer,0,1)[0]){const s=this.zstd_create_ctx(t.length);new Uint8Array(this.wasm_memory.buffer,this.zstd_get_src_ptr(s),t.length).set(t);let r=this.zstd_read(s,16);const a=e(new Uint8Array(this.wasm_memory.buffer,r,16),!1);this.zstd_read_free(r,16),r=this.zstd_read(s,a);const n=i(new Uint8Array(this.wasm_memory.buffer,r,a));this.zstd_read_free(r,a);let o=n.state;const h=n.buffer_infos,_=[];let d=16+a;for(const t of h){const e=(d+3&-4)-d,i=1048576;if(t.length>i){const r=this.zstd_read(s,e);this.zstd_read_free(r,e);const a=new Uint8Array(t.length);_.push(a.buffer);let n=0;for(;n<t.length;){const e=t.length-n;dbg_assert(e>=0);const r=Math.min(e,i),o=this.zstd_read(s,r);a.set(new Uint8Array(this.wasm_memory.buffer,o,r),n),this.zstd_read_free(o,r),n+=r}}else{const i=this.zstd_read(s,e+t.length),r=i+e;_.push(this.wasm_memory.buffer.slice(r,r+t.length)),this.zstd_read_free(i,e+t.length)}d+=e+t.length}o=Ja(o,_),this.set_state(o),this.zstd_free_ctx(s)}else{const s=e(t,!0);if(s<0||s+12>=t.length)throw new Ha("Invalid info block length: "+s);const r=i(t.subarray(16,16+s));let a=r.state;const n=r.buffer_infos;let o=16+s;o=o+3&-4;a=Ja(a,n.map((e=>{const i=o+e.offset;return t.buffer.slice(i,i+e.length)}))),this.set_state(a)}};const Za=6900,$a=9,tn=16,en=1,sn=2,rn=3,an=4,nn=5,on=1,hn=2,_n=4,dn=8,cn=64,un=128,pn=1,ln=2,fn=28,mn=29,gn=32,bn=16,yn=6,vn=2,wn=6,kn=8,xn=65535,An=1,qn=2,In=4,Cn=1,zn=1;function On(t,e){t.io,this.cpu=t,this.pci=t.devices.pci,this.device_id=e.device_id,this.pci_space=[244,26,255&e.device_id,e.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,255&e.subsystem_device_id,e.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(v86util.zeros(256-this.pci_space.length)),this.pci_id=e.pci_id,this.pci_bars=[],this.name=e.name,this.device_feature_select=0,this.driver_feature_select=0,this.device_feature=new Uint32Array(4),this.driver_feature=new Uint32Array(4);for(const t of e.common.features)dbg_assert(t>=0,"VirtIO device<"+this.name+"> feature bit numbers must be non-negative"),dbg_assert(t<128,"VirtIO device<"+this.name+"> feature bit numbers assumed less than 128 in implementation"),this.device_feature[t>>>5]|=1<<(31&t),this.driver_feature[t>>>5]|=1<<(31&t);dbg_assert(e.common.features.includes(32),"VirtIO device<"+this.name+"> only non-transitional devices are supported"),this.features_ok=!0,this.device_status=0,this.config_has_changed=!1,this.config_generation=0,this.queues=[];for(const i of e.common.queues)this.queues.push(new Rn(t,this,i));if(this.queue_select=0,this.queue_selected=this.queues[0],this.isr_status=0,DEBUG){const t=new Set;for(const i of this.queues.map((t=>t.notify_offset))){const s=e.notification.single_handler?0:i;t.add(s),dbg_assert(e.notification.handlers[s],"VirtIO device<"+this.name+"> every queue's notifier must exist")}for(const[i,s]of e.notification.handlers.entries())dbg_assert(!s||t.has(i),"VirtIO device<"+this.name+"> no defined notify handler should be unused")}const i=[];i.push(this.create_common_capability(e.common)),i.push(this.create_notification_capability(e.notification)),i.push(this.create_isr_capability(e.isr_status)),e.device_specific&&i.push(this.create_device_specific_capability(e.device_specific)),this.init_capabilities(i),t.devices.pci.register_device(this),this.reset()}function Rn(t,e,i){this.cpu=t,this.virtio=e,this.size=i.size_supported,this.size_supported=i.size_supported,this.mask=this.size-1,this.enabled=!1,this.notify_offset=i.notify_offset,this.desc_addr=0,this.avail_addr=0,this.avail_last_idx=0,this.used_addr=0,this.num_staged_replies=0,this.reset()}function Ln(t,e){this.cpu=t.cpu,this.virtio=t.virtio,this.head_idx=e,this.read_buffers=[],this.read_buffer_idx=0,this.read_buffer_offset=0,this.length_readable=0,this.write_buffers=[],this.write_buffer_idx=0,this.write_buffer_offset=0,this.length_written=0,this.length_writable=0;let i=t.desc_addr,s=e,r=0,a=t.size,n=!1;const o=this.virtio.is_feature_negotiated(28);for(dbg_log("<<< Descriptor chain start",LOG_VIRTIO);;){const e=t.get_descriptor(i,s);if(dbg_log("descriptor: idx="+s+" addr="+h(e.addr_high,8)+":"+h(e.addr_low,8)+" len="+h(e.len,8)+" flags="+h(e.flags,4)+" next="+h(e.next,4),LOG_VIRTIO),o&&4&e.flags)DEBUG&&1&e.flags&&dbg_log("Driver bug: has set VIRTQ_DESC_F_NEXT flag in an indirect table descriptor",LOG_VIRTIO),i=e.addr_low,s=0,r=0,a=e.len/16,dbg_log("start indirect",LOG_VIRTIO);else{if(2&e.flags)n=!0,this.write_buffers.push(e),this.length_writable+=e.len;else{if(n){dbg_log("Driver bug: readonly buffer after writeonly buffer within chain",LOG_VIRTIO);break}this.read_buffers.push(e),this.length_readable+=e.len}if(r++,r>a){dbg_log("Driver bug: descriptor chain cycle detected",LOG_VIRTIO);break}if(!(1&e.flags))break;s=e.next}}dbg_log("Descriptor chain end >>>",LOG_VIRTIO)}function En(t,e){this.bus=e,this.socket=void 0,this.send_queue=[],this.url=t,this.reconnect_interval=1e4,this.last_connect_attempt=Date.now()-this.reconnect_interval,this.send_queue_limit=64,this.bus.register("net0-send",(function(t){this.send(t)}),this)}On.prototype.create_common_capability=function(t){return{type:1,bar:0,port:t.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:4,name:"device_feature_select",read:()=>this.device_feature_select,write:t=>{this.device_feature_select=t}},{bytes:4,name:"device_feature",read:()=>this.device_feature[this.device_feature_select]||0,write:t=>{}},{bytes:4,name:"driver_feature_select",read:()=>this.driver_feature_select,write:t=>{this.driver_feature_select=t}},{bytes:4,name:"driver_feature",read:()=>this.driver_feature[this.driver_feature_select]||0,write:t=>{const e=this.device_feature[this.driver_feature_select];this.driver_feature_select<this.driver_feature.length&&(this.driver_feature[this.driver_feature_select]=t&e);const i=t&~e;this.features_ok=this.features_ok&&!i}},{bytes:2,name:"msix_config",read:()=>(dbg_log("No msi-x capability supported.",LOG_VIRTIO),65535),write:t=>{dbg_log("No msi-x capability supported.",LOG_VIRTIO)}},{bytes:2,name:"num_queues",read:()=>this.queues.length,write:t=>{}},{bytes:1,name:"device_status",read:()=>this.device_status,write:e=>{0===e?(dbg_log("Reset device<"+this.name+">",LOG_VIRTIO),this.reset()):128&e?dbg_log("Warning: Device<"+this.name+"> status failed",LOG_VIRTIO):dbg_log("Device<"+this.name+"> status: "+(1&e?"ACKNOWLEDGE ":"")+(2&e?"DRIVER ":"")+(4&e?"DRIVER_OK":"")+(8&e?"FEATURES_OK ":"")+(64&e?"DEVICE_NEEDS_RESET":""),LOG_VIRTIO),e&~this.device_status&4&&64&this.device_status&&this.notify_config_changes(),this.features_ok||(DEBUG&&8&e&&dbg_log("Removing FEATURES_OK",LOG_VIRTIO),e&=-9),this.device_status=e,e&~this.device_status&4&&t.on_driver_ok()}},{bytes:1,name:"config_generation",read:()=>this.config_generation,write:t=>{}},{bytes:2,name:"queue_select",read:()=>this.queue_select,write:t=>{this.queue_select=t,this.queue_select<this.queues.length?this.queues_selected=this.queues[this.queue_select]:this.queue_selected=null}},{bytes:2,name:"queue_size",read:()=>this.queue_selected?this.queue_selected.size:0,write:t=>{this.queue_selected&&(t&t-1&&(dbg_log("Warning: dev<"+this.name+"> Given queue size was not a power of 2. Rounding up to next power of 2.",LOG_VIRTIO),t=1<<v86util.int_log2(t-1)+1),t>this.queue_selected.size_supported&&(dbg_log("Warning: dev<"+this.name+"> Trying to set queue size greater than supported. Clamping to supported size.",LOG_VIRTIO),t=this.queue_selected.size_supported),this.queue_selected.set_size(t))}},{bytes:2,name:"queue_msix_vector",read:()=>(dbg_log("No msi-x capability supported.",LOG_VIRTIO),65535),write:t=>{dbg_log("No msi-x capability supported.",LOG_VIRTIO)}},{bytes:2,name:"queue_enable",read:()=>this.queue_selected?0|this.queue_selected.enabled:0,write:t=>{this.queue_selected&&(1===t?this.queue_selected.is_configured()?this.queue_selected.enable():dbg_log("Driver bug: tried enabling unconfigured queue",LOG_VIRTIO):0===t&&dbg_log("Driver bug: tried writing 0 to queue_enable",LOG_VIRTIO))}},{bytes:2,name:"queue_notify_off",read:()=>this.queue_selected?this.queue_selected.notify_offset:0,write:t=>{}},{bytes:4,name:"queue_desc (low dword)",read:()=>this.queue_selected?this.queue_selected.desc_addr:0,write:t=>{this.queue_selected&&(this.queue_selected.desc_addr=t)}},{bytes:4,name:"queue_desc (high dword)",read:()=>0,write:t=>{dbg_log("Warning: High dword of 64 bit queue_desc ignored",LOG_VIRTIO)}},{bytes:4,name:"queue_avail (low dword)",read:()=>this.queue_selected?this.queue_selected.avail_addr:0,write:t=>{this.queue_selected&&(this.queue_selected.avail_addr=t)}},{bytes:4,name:"queue_avail (high dword)",read:()=>0,write:t=>{dbg_log("Warning: High dword of 64 bit queue_avail ignored",LOG_VIRTIO)}},{bytes:4,name:"queue_used (low dword)",read:()=>this.queue_selected?this.queue_selected.used_addr:0,write:t=>{this.queue_selected&&(this.queue_selected.used_addr=t)}},{bytes:4,name:"queue_used (high dword)",read:()=>0,write:t=>{dbg_log("Warning: High dword of 64 bit queue_used ignored",LOG_VIRTIO)}}]}},On.prototype.create_notification_capability=function(t){const e=[];let i;t.single_handler?(dbg_assert(1===t.handlers.length,"VirtIO device<"+this.name+"> too many notify handlers specified: expected single handler"),i=0):i=2;for(const[i,s]of t.handlers.entries())e.push({bytes:2,name:"notify"+i,read:()=>65535,write:s||(t=>{})});return{type:2,bar:1,port:t.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array([255&i,i>>8&255,i>>16&255,i>>24]),struct:e}},On.prototype.create_isr_capability=function(t){return{type:3,bar:2,port:t.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:1,name:"isr_status",read:()=>{const t=this.isr_status;return this.lower_irq(),t},write:t=>{}}]}},On.prototype.create_device_specific_capability=function(t){return dbg_assert(3&~t.offset,"VirtIO device<"+this.name+"> device specific cap offset must be 4-byte aligned"),{type:4,bar:3,port:t.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:t.struct}},On.prototype.init_capabilities=function(t){let e=this.pci_space[52]=64,i=e;for(const s of t){const t=16+s.extra.length;i=e,e=i+t,dbg_assert(e<=256,"VirtIO device<"+this.name+"> can't fit all capabilities into 256byte configspace"),dbg_assert(0<=s.bar&&s.bar<6,"VirtIO device<"+this.name+"> capability invalid bar number");let r=s.struct.reduce(((t,e)=>t+e.bytes),0);r+=s.offset,r=r<16?16:1<<v86util.int_log2(r-1)+1,dbg_assert(0==(s.port&r-1),"VirtIO device<"+this.name+"> capability port should be aligned to pci bar size"),this.pci_bars[s.bar]={size:r},this.pci_space[i]=9,this.pci_space[i+1]=e,this.pci_space[i+2]=t,this.pci_space[i+3]=s.type,this.pci_space[i+4]=s.bar,this.pci_space[i+5]=0,this.pci_space[i+6]=0,this.pci_space[i+7]=0,this.pci_space[i+8]=255&s.offset,this.pci_space[i+9]=s.offset>>>8&255,this.pci_space[i+10]=s.offset>>>16&255,this.pci_space[i+11]=s.offset>>>24,this.pci_space[i+12]=255&r,this.pci_space[i+13]=r>>>8&255,this.pci_space[i+14]=r>>>16&255,this.pci_space[i+15]=r>>>24;for(const[t,e]of s.extra.entries())this.pci_space[i+16+t]=e;const a=16+4*s.bar;this.pci_space[a]=254&s.port|!s.use_mmio,this.pci_space[a+1]=s.port>>>8&255,this.pci_space[a+2]=s.port>>>16&255,this.pci_space[a+3]=s.port>>>24&255;let n=s.port+s.offset;for(const t of s.struct){let e=t.read,i=t.write;if(DEBUG&&(e=()=>{const e=t.read();return dbg_log("Device<"+this.name+"> cap["+s.type+"] read["+t.name+"] => "+h(e,8*t.bytes),LOG_VIRTIO),e},i=e=>{dbg_log("Device<"+this.name+"> cap["+s.type+"] write["+t.name+"] <= "+h(e,8*t.bytes),LOG_VIRTIO),t.write(e)}),s.use_mmio)dbg_assert(!1,"VirtIO device <"+this.name+"> mmio capability not implemented.");else{const s=function(t){return dbg_log("Warning: 8-bit read from 16-bit virtio port",LOG_VIRTIO),e(-2&t)>>((1&t)<<3)&255},r=function(t){return dbg_log("Warning: 8-bit read from 32-bit virtio port",LOG_VIRTIO),e(-4&t)>>((3&t)<<3)&255};switch(t.bytes){case 4:this.cpu.io.register_read(n,this,r,void 0,e),this.cpu.io.register_write(n,this,void 0,void 0,i);break;case 2:this.cpu.io.register_read(n,this,s,e),this.cpu.io.register_write(n,this,void 0,i);break;case 1:this.cpu.io.register_read(n,this,e),this.cpu.io.register_write(n,this,i);break;default:dbg_assert(!1,"VirtIO device <"+this.name+"> invalid capability field width of "+t.bytes+" bytes")}}n+=t.bytes}}dbg_assert(e+20<=256,"VirtIO device<"+this.name+"> can't fit all capabilities into 256byte configspace"),this.pci_space[e]=9,this.pci_space[e+1]=0,this.pci_space[e+2]=20,this.pci_space[e+3]=5,this.pci_space[e+4]=0,this.pci_space[e+5]=0,this.pci_space[e+6]=0,this.pci_space[e+7]=0,this.pci_space[e+8]=0,this.pci_space[e+9]=0,this.pci_space[e+10]=0,this.pci_space[e+11]=0,this.pci_space[e+12]=0,this.pci_space[e+13]=0,this.pci_space[e+14]=0,this.pci_space[e+15]=0,this.pci_space[e+16]=0,this.pci_space[e+17]=0,this.pci_space[e+18]=0,this.pci_space[e+19]=0},On.prototype.get_state=function(){let t=[];return t[0]=this.device_feature_select,t[1]=this.driver_feature_select,t[2]=this.device_feature,t[3]=this.driver_feature,t[4]=this.features_ok,t[5]=this.device_status,t[6]=this.config_has_changed,t[7]=this.config_generation,t[8]=this.isr_status,t[9]=this.queue_select,t=t.concat(this.queues),t},On.prototype.set_state=function(t){this.device_feature_select=t[0],this.driver_feature_select=t[1],this.device_feature=t[2],this.driver_feature=t[3],this.features_ok=t[4],this.device_status=t[5],this.config_has_changed=t[6],this.config_generation=t[7],this.isr_status=t[8],this.queue_select=t[9];let e=0;for(let i of t.slice(10))this.queues[e].set_state(i),e++;this.queue_selected=this.queues[this.queue_select]||null},On.prototype.reset=function(){this.device_feature_select=0,this.driver_feature_select=0,this.driver_feature.set(this.device_feature),this.features_ok=!0,this.device_status=0,this.queue_select=0,this.queue_selected=this.queues[0];for(const t of this.queues)t.reset();this.config_has_changed=!1,this.config_generation=0,this.lower_irq()},On.prototype.notify_config_changes=function(){this.config_has_changed=!0,4&this.device_status?this.raise_irq(2):dbg_assert(!1,"VirtIO device<"+this.name+"> attempted to notify driver before DRIVER_OK")},On.prototype.update_config_generation=function(){this.config_has_changed&&(this.config_generation++,this.config_generation&=255,this.config_has_changed=!1)},On.prototype.is_feature_negotiated=function(t){return(this.driver_feature[t>>>5]&1<<(31&t))>0},On.prototype.needs_reset=function(){dbg_log("Device<"+this.name+"> experienced error - requires reset",LOG_VIRTIO),this.device_status|=64,4&this.device_status&&this.notify_config_changes()},On.prototype.raise_irq=function(t){dbg_log("Raise irq "+h(t),LOG_VIRTIO),this.isr_status|=t,this.pci.raise_irq(this.pci_id)},On.prototype.lower_irq=function(){dbg_log("Lower irq ",LOG_VIRTIO),this.isr_status=0,this.pci.lower_irq(this.pci_id)},Rn.prototype.get_state=function(){const t=[];return t[0]=this.size,t[1]=this.size_supported,t[2]=this.enabled,t[3]=this.notify_offset,t[4]=this.desc_addr,t[5]=this.avail_addr,t[6]=this.avail_last_idx,t[7]=this.used_addr,t[8]=this.num_staged_replies,t},Rn.prototype.set_state=function(t){this.size=t[0],this.size_supported=t[1],this.enabled=t[2],this.notify_offset=t[3],this.desc_addr=t[4],this.avail_addr=t[5],this.avail_last_idx=t[6],this.used_addr=t[7],this.num_staged_replies=t[8],this.mask=this.size-1},Rn.prototype.reset=function(){this.enabled=!1,this.desc_addr=0,this.avail_addr=0,this.avail_last_idx=0,this.used_addr=0,this.num_staged_replies=0,this.set_size(this.size_supported)},Rn.prototype.is_configured=function(){return this.desc_addr&&this.avail_addr&&this.used_addr},Rn.prototype.enable=function(){dbg_assert(this.is_configured(),"VirtQueue must be configured before enabled"),this.enabled=!0},Rn.prototype.set_size=function(t){dbg_assert(0==(t&t-1),"VirtQueue size must be power of 2 or zero"),dbg_assert(t<=this.size_supported,"VirtQueue size must be within supported size"),this.size=t,this.mask=t-1},Rn.prototype.count_requests=function(){return dbg_assert(this.avail_addr,"VirtQueue addresses must be configured before use"),this.avail_get_idx()-this.avail_last_idx&this.mask},Rn.prototype.has_request=function(){return dbg_assert(this.avail_addr,"VirtQueue addresses must be configured before use"),(this.avail_get_idx()&this.mask)!==this.avail_last_idx},Rn.prototype.pop_request=function(){dbg_assert(this.avail_addr,"VirtQueue addresses must be configured before use"),dbg_assert(this.has_request(),"VirtQueue must not pop nonexistent request");const t=this.avail_get_entry(this.avail_last_idx);dbg_log("Pop request: avail_last_idx="+this.avail_last_idx+" desc_idx="+t,LOG_VIRTIO);const e=new Ln(this,t);return this.avail_last_idx=this.avail_last_idx+1&this.mask,e},Rn.prototype.push_reply=function(t){dbg_assert(this.used_addr,"VirtQueue addresses must be configured before use"),dbg_assert(this.num_staged_replies<this.size,"VirtQueue replies must not exceed queue size");const e=this.used_get_idx()+this.num_staged_replies&this.mask;dbg_log("Push reply: used_idx="+e+" desc_idx="+t.head_idx,LOG_VIRTIO),this.used_set_entry(e,t.head_idx,t.length_written),this.num_staged_replies++},Rn.prototype.flush_replies=function(){if(dbg_assert(this.used_addr,"VirtQueue addresses must be configured before use"),0===this.num_staged_replies)return void dbg_log("flush_replies: Nothing to flush",LOG_VIRTIO);dbg_log("Flushing "+this.num_staged_replies+" replies",LOG_VIRTIO);const t=this.used_get_idx()+this.num_staged_replies&65535;this.used_set_idx(t),this.num_staged_replies=0,this.virtio.is_feature_negotiated(29)?(this.avail_get_used_event(),this.virtio.raise_irq(1)):1&~this.avail_get_flags()&&this.virtio.raise_irq(1)},Rn.prototype.notify_me_after=function(t){dbg_assert(t>=0,"Must skip a non-negative number of requests");const e=this.avail_get_idx()+t&65535;this.used_set_avail_event(e)},Rn.prototype.get_descriptor=function(t,e){return{addr_low:this.cpu.read32s(t+16*e),addr_high:this.cpu.read32s(t+16*e+4),len:this.cpu.read32s(t+16*e+8),flags:this.cpu.read16(t+16*e+12),next:this.cpu.read16(t+16*e+14)}},Rn.prototype.avail_get_flags=function(){return this.cpu.read16(this.avail_addr)},Rn.prototype.avail_get_idx=function(){return this.cpu.read16(this.avail_addr+2)},Rn.prototype.avail_get_entry=function(t){return this.cpu.read16(this.avail_addr+4+2*t)},Rn.prototype.avail_get_used_event=function(){return this.cpu.read16(this.avail_addr+4+2*this.size)},Rn.prototype.used_get_flags=function(){return this.cpu.read16(this.used_addr)},Rn.prototype.used_set_flags=function(t){this.cpu.write16(this.used_addr,t)},Rn.prototype.used_get_idx=function(){return this.cpu.read16(this.used_addr+2)},Rn.prototype.used_set_idx=function(t){this.cpu.write16(this.used_addr+2,t)},Rn.prototype.used_set_entry=function(t,e,i){this.cpu.write32(this.used_addr+4+8*t,e),this.cpu.write32(this.used_addr+8+8*t,i)},Rn.prototype.used_set_avail_event=function(t){this.cpu.write16(this.used_addr+4+8*this.size,t)},Ln.prototype.get_next_blob=function(t){let e=0,i=t.length;for(;i;){if(this.read_buffer_idx===this.read_buffers.length){dbg_log("Device<"+this.virtio.name+"> Read more than device-readable buffers has",LOG_VIRTIO);break}const s=this.read_buffers[this.read_buffer_idx],r=s.addr_low+this.read_buffer_offset;let a=s.len-this.read_buffer_offset;a>i?(a=i,this.read_buffer_offset+=i):(this.read_buffer_idx++,this.read_buffer_offset=0),t.set(this.cpu.read_blob(r,a),e),e+=a,i-=a}return e},Ln.prototype.set_next_blob=function(t){let e=0,i=t.length;for(;i;){if(this.write_buffer_idx===this.write_buffers.length){dbg_log("Device<"+this.virtio.name+"> Write more than device-writable capacity",LOG_VIRTIO);break}const s=this.write_buffers[this.write_buffer_idx],r=s.addr_low+this.write_buffer_offset;let a=s.len-this.write_buffer_offset;a>i?(a=i,this.write_buffer_offset+=i):(this.write_buffer_idx++,this.write_buffer_offset=0);const n=e+a;this.cpu.write_blob(t.subarray(e,n),r),e+=a,i-=a}return this.length_written+=e,e},En.prototype.handle_message=function(t){this.bus&&this.bus.send("net0-receive",new Uint8Array(t.data))},En.prototype.handle_close=function(t){this.connect(),setTimeout(this.connect.bind(this),this.reconnect_interval)},En.prototype.handle_open=function(t){for(var e=0;e<this.send_queue.length;e++)this.send(this.send_queue[e]);this.send_queue=[]},En.prototype.handle_error=function(t){},En.prototype.destroy=function(){this.socket&&this.socket.close()},En.prototype.connect=function(){if("undefined"!=typeof WebSocket){if(this.socket){var t=this.socket.readyState;if(0===t||1===t)return}var e=Date.now();this.last_connect_attempt+this.reconnect_interval>e||(this.last_connect_attempt=Date.now(),this.socket=new WebSocket(this.url),this.socket.binaryType="arraybuffer",this.socket.onopen=this.handle_open.bind(this),this.socket.onmessage=this.handle_message.bind(this),this.socket.onclose=this.handle_close.bind(this),this.socket.onerror=this.handle_error.bind(this))}},En.prototype.send=function(t){this.socket&&1===this.socket.readyState?this.socket.send(t):(this.send_queue.push(t),this.send_queue.length>2*this.send_queue_limit&&(this.send_queue=this.send_queue.slice(-this.send_queue_limit)),this.connect())},En.prototype.change_proxy=function(t){this.url=t,this.socket&&(this.socket.onclose=function(){},this.socket.onerror=function(){},this.socket.close(),this.socket=void 0)};function Pn(t){var e={},i=this;this.emu_enabled=!0;var s=new Uint16Array([0,0,0,0,0,0,0,0,14,15,0,0,0,28,0,0,42,29,56,0,58,0,0,0,0,0,0,1,0,0,0,0,57,57417,57425,57423,57415,57419,57416,57421,80,0,0,0,0,82,83,0,11,2,3,4,5,6,7,8,9,10,0,39,0,13,0,0,0,30,48,46,32,18,33,34,35,23,36,37,38,50,49,24,25,16,19,31,20,22,47,17,45,21,44,57435,57436,57437,0,0,82,79,80,81,75,76,77,71,72,73,0,0,0,0,0,0,59,60,61,62,63,64,65,66,67,68,87,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,39,13,51,12,52,53,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,43,27,40,0,57435,57400,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),r={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},a={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},n={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,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,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,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};function o(t){return!t.altKey&&e[56]&&c(56,!1),d(t,!1)}function h(t){return!t.altKey&&e[56]&&c(56,!1),d(t,!0)}function _(t){for(var i,s=Object.keys(e),r=0;r<s.length;r++)i=+s[r],e[i]&&c(i,!1);e={}}function d(t,e){if(i.bus&&function(t){return(!t.shiftKey||!t.ctrlKey||73!==t.keyCode&&74!==t.keyCode&&75!==t.keyCode)&&!!i.emu_enabled&&(!t.target||t.target.classList.contains("phone_keyboard")||"INPUT"!==t.target.nodeName&&"TEXTAREA"!==t.target.nodeName)}(t)){var r=function(t){if(void 0!==t.code){var e=n[t.code];if(void 0!==e)return e}return s[t.keyCode]}(t);if(r)return c(r,e,t.repeat),t.preventDefault&&t.preventDefault(),!1;console.log("Missing char in map: keyCode="+(t.keyCode||-1).toString(16)+" code="+t.code)}}function c(t,i,s){if(i)e[t]&&!s&&c(t,!1);else if(!e[t])return;e[t]=i,i||(t|=128),t>255?(u(t>>8),u(255&t)):u(t)}function u(t){i.bus.send("keyboard-code",t)}this.bus=t,this.destroy=function(){"undefined"!=typeof window&&(window.removeEventListener("keyup",o,!1),window.removeEventListener("keydown",h,!1),window.removeEventListener("blur",_,!1))},this.init=function(){"undefined"!=typeof window&&(this.destroy(),window.addEventListener("keyup",o,!1),window.addEventListener("keydown",h,!1),window.addEventListener("blur",_,!1))},this.init(),this.simulate_press=function(t){var e={keyCode:t};d(e,!0),d(e,!1)},this.simulate_char=function(t){var e=t.charCodeAt(0);e in r?this.simulate_press(r[e]):e in a?(u(42),this.simulate_press(a[e]),u(170)):console.log("ascii -> keyCode not found: ",e,t)}}function Tn(t,e){var i=!1,s=!1,r=!1,a=0,n=0,o=this;function h(t){if(!o.enabled||!o.emu_enabled)return!1;var i=e||document.body;return document.pointerLockElement||function(t,e){for(;t.parentNode;){if(t===e)return!0;t=t.parentNode}return!1}(t.target,i)}function _(t){if(h(t)){var e=t.changedTouches;if(e&&e.length){var i=e[e.length-1];a=i.clientX,n=i.clientY}}}function d(t){(i||r||s)&&(o.bus.send("mouse-click",[!1,!1,!1]),i=r=s=!1)}function c(t){if(o.bus&&h(t)){var i=0,s=0,r=t.changedTouches;if(r){if(r.length){var _=r[r.length-1];i=_.clientX-a,s=_.clientY-n,a=_.clientX,n=_.clientY,t.preventDefault()}}else"number"==typeof t.movementX?(i=t.movementX,s=t.movementY):"number"==typeof t.webkitMovementX?(i=t.webkitMovementX,s=t.webkitMovementY):"number"==typeof t.mozMovementX?(i=t.mozMovementX,s=t.mozMovementY):(i=t.clientX-a,s=t.clientY-n,a=t.clientX,n=t.clientY);if(i*=.15,s=-(s*=.15),o.bus.send("mouse-delta",[i,s]),e){let i=t.pageX-e.offsetLeft,s=t.pageY-e.offsetTop;o.bus.send("mouse-absolute",[i,s,e.offsetWidth,e.offsetHeight])}}}function u(t){h(t)&&l(t,!0)}function p(t){h(t)&&l(t,!1)}function l(t,e){o.bus&&(1===t.which?i=e:2===t.which?r=e:3===t.which?s=e:dbg_log("Unknown event.which: "+t.which),o.bus.send("mouse-click",[i,r,s]),t.preventDefault())}function f(t){if(h(t)){var e=t.wheelDelta||-t.detail;e<0?e=-1:e>0&&(e=1),o.bus.send("mouse-wheel",[e,0]),t.preventDefault()}}this.enabled=!1,this.emu_enabled=!0,this.bus=t,this.bus.register("mouse-enable",(function(t){this.enabled=t}),this),this.destroy=function(){"undefined"!=typeof window&&(window.removeEventListener("touchstart",_,!1),window.removeEventListener("touchend",d,!1),window.removeEventListener("touchmove",c,!1),window.removeEventListener("mousemove",c,!1),window.removeEventListener("mousedown",u,!1),window.removeEventListener("mouseup",p,!1),window.removeEventListener("DOMMouseScroll",f,!1),window.removeEventListener("mousewheel",f,{passive:!1}))},this.init=function(){"undefined"!=typeof window&&(this.destroy(),window.addEventListener("touchstart",_,!1),window.addEventListener("touchend",d,!1),window.addEventListener("touchmove",c,!1),window.addEventListener("mousemove",c,!1),window.addEventListener("mousedown",u,!1),window.addEventListener("mouseup",p,!1),window.addEventListener("DOMMouseScroll",f,!1),window.addEventListener("mousewheel",f,{passive:!1}))},this.init()}function Dn(t,e){console.assert(t,"1st argument must be a DOM container");var i,s,r,a,n,o,h=t.getElementsByTagName("canvas")[0],_=h.getContext("2d",{alpha:!1}),d=t.getElementsByTagName("div")[0],c=document.createElement("div"),u=1,p=1,l=1,f=!1,m=!1,g=this;function b(t){return t=t.toString(16),"#"+"0".repeat(6-t.length)+t}for(var y,v=new Uint16Array([199,252,233,226,228,224,229,231,234,235,232,239,238,236,196,197,201,230,198,244,246,242,251,249,255,214,220,162,163,165,8359,402,225,237,243,250,241,209,170,186,191,8976,172,189,188,161,171,187,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,945,223,915,960,931,963,181,964,934,920,937,948,8734,966,949,8745,8801,177,8805,8804,8992,8993,247,8776,176,8729,183,8730,8319,178,9632,160]),w=new Uint16Array([32,9786,9787,9829,9830,9827,9824,8226,9688,9675,9689,9794,9792,9834,9835,9788,9658,9668,8597,8252,182,167,9644,8616,8593,8595,8594,8592,8735,8596,9650,9660]),k=[],x=0;x<256;x++)y=x>127?v[x-128]:x<32?w[x]:x,k[x]=String.fromCharCode(y);_.imageSmoothingEnabled=!1,c.style.position="absolute",c.style.backgroundColor="#ccc",c.style.width="7px",c.style.display="inline-block",d.style.display="block",h.style.display="none",this.bus=e,e.register("screen-set-mode",(function(t){this.set_mode(t)}),this),e.register("screen-fill-buffer-end",(function(t){this.update_buffer(t)}),this),e.register("screen-put-char",(function(t){this.put_char(t[0],t[1],t[2],t[3],t[4])}),this),e.register("screen-update-cursor",(function(t){this.update_cursor(t[0],t[1])}),this),e.register("screen-update-cursor-scanline",(function(t){this.update_cursor_scanline(t[0],t[1])}),this),e.register("screen-clear",(function(){this.clear_screen()}),this),e.register("screen-set-size-text",(function(t){this.set_size_text(t[0],t[1])}),this),e.register("screen-set-size-graphical",(function(t){this.set_size_graphical(t[0],t[1],t[2],t[3])}),this),this.init=function(){this.set_size_text(80,25),this.timer()},this.make_screenshot=function(){try{const t=new Image;t.src=h.toDataURL("image/png");window.open("").document.write(t.outerHTML)}catch(t){}},this.put_char=function(t,e,i,s,h){if(t<o&&e<n){var _=3*(t*n+e);ne(i>=0&&i<256),a[_]=i,a[_+1]=s,a[_+2]=h,r[t]=1}},this.timer=function(){m||requestAnimationFrame(f?q:A)};var A=function(){for(var t=0;t<o;t++)r[t]&&(g.text_update_row(t),r[t]=0);this.timer()}.bind(this),q=function(){this.bus.send("screen-fill-buffer"),this.timer()}.bind(this);function I(){z(d,u,p,!0)}function C(){z(h,u*l,p*l,!1)}function z(t,e,i,s){t.style.width="",t.style.height="",s&&(t.style.transform="");var r=t.getBoundingClientRect();if(s){var a="";a+=1===e?"":" scaleX("+e+")",a+=1===i?"":" scaleY("+i+")",t.style.transform=a}else{e%1==0&&i%1==0?(h.style.imageRendering="crisp-edges",h.style.imageRendering="pixelated",h.style["-ms-interpolation-mode"]="nearest-neighbor"):(h.style.imageRendering="",h.style["-ms-interpolation-mode"]="");var n=window.devicePixelRatio||1;n%1!=0&&(e/=n,i/=n)}1!==e&&(t.style.width=r.width*e+"px"),1!==i&&(t.style.height=r.height*i+"px")}this.destroy=function(){m=!0},this.set_mode=function(t){f=t,t?(d.style.display="none",h.style.display="block"):(d.style.display="block",h.style.display="none")},this.clear_screen=function(){_.fillStyle="#000",_.fillRect(0,0,h.width,h.height)},this.set_size_text=function(t,e){if(t!==n||e!==o){for(r=new Int8Array(e),a=new Int32Array(t*e*3),n=t,o=e;d.childNodes.length>e;)d.removeChild(d.firstChild);for(;d.childNodes.length<e;)d.appendChild(document.createElement("div"));for(var i=0;i<e;i++)this.text_update_row(i);I()}},this.set_size_graphical=function(t,e,i,s){h.style.display="block",h.width=t,h.height=e,l=t<=640&&2*t<window.innerWidth&&2*t<window.innerHeight?2:1,C()},this.set_scale=function(t,e){u=t,p=e,I(),C()},this.set_scale(u,p),this.update_cursor_scanline=function(t,e){32&t?c.style.display="none":(c.style.display="inline",c.style.height=Math.min(15,e-t)+"px",c.style.marginTop=Math.min(15,t)+"px")},this.update_cursor=function(t,e){t===i&&e===s||(r[t]=1,r[i]=1,i=t,s=e)},this.text_update_row=function(t){var e,r,o,h,_,u,p=3*t*n;e=d.childNodes[t],o=document.createElement("div");for(var l=0;l<n;){for(r=document.createElement("span"),h=a[p+1],_=a[p+2],r.style.backgroundColor=b(h),r.style.color=b(_),u="";l<n&&a[p+1]===h&&a[p+2]===_;){var f=a[p];if(u+=k[f],ne(k[f]),l++,p+=3,t===i){if(l===s)break;if(l===s+1){o.appendChild(c);break}}}r.textContent=u,o.appendChild(r)}e.parentNode.replaceChild(o,e)},this.update_buffer=function(t){t.forEach((t=>{_.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.init()}function Un(t){var e,i,s;this.bus=t,t.register("screen-set-mode",(function(t){this.set_mode(t)}),this),t.register("screen-fill-buffer-end",(function(t){var e=t[0],i=t[1];this.update_buffer(e,i)}),this),t.register("screen-put-char",(function(t){this.put_char(t[0],t[1],t[2],t[3],t[4])}),this),t.register("screen-text-scroll",(function(t){console.log("scroll",t)}),this),t.register("screen-update-cursor",(function(t){this.update_cursor(t[0],t[1])}),this),t.register("screen-update-cursor-scanline",(function(t){this.update_cursor_scanline(t[0],t[1])}),this),t.register("screen-set-size-text",(function(t){this.set_size_text(t[0],t[1])}),this),t.register("screen-set-size-graphical",(function(t){this.set_size_graphical(t[0],t[1])}),this),this.put_char=function(t,r,a,n,o){if(t<s&&r<i){var h=3*(t*i+r);e[h]=a,e[h+1]=n,e[h+2]=o}},this.destroy=function(){},this.set_mode=function(t){},this.clear_screen=function(){},this.set_size_text=function(t,r){t===i&&r===s||(e=new Int32Array(t*r*3),i=t,s=r)},this.set_size_graphical=function(t,e){},this.set_scale=function(t,e){},this.update_cursor_scanline=function(t,e){},this.update_cursor=function(t,e){},this.update_buffer=function(t,e){},this.get_text_screen=function(){for(var t=[],e=0;e<s;e++)t.push(this.get_text_row(e));return t},this.get_text_row=function(t){for(var s="",r=3*t*i,a=0;a<i;a++)s+=String.fromCharCode(e[r+3*a]);return s}}function Gn(t,e){var i=this;function s(t){return!!i.enabled}function r(t){if(i.bus&&s()){var e=t.which;i.send_char(e),t.preventDefault()}}function a(t){var e=t.which;8===e?(i.send_char(127),t.preventDefault()):9===e&&(i.send_char(9),t.preventDefault())}function n(t){if(s()){for(var e=t.clipboardData.getData("text/plain"),r=0;r<e.length;r++)i.send_char(e.charCodeAt(r));t.preventDefault()}}function o(e){e.target!==t&&t.blur()}this.enabled=!0,this.bus=e,this.text="",this.text_new_line=!1,this.last_update=0,this.bus.register("serial0-output-char",(function(t){this.show_char(t)}),this),this.destroy=function(){t.removeEventListener("keypress",r,!1),t.removeEventListener("keydown",a,!1),t.removeEventListener("paste",n,!1),window.removeEventListener("mousedown",o,!1)},this.init=function(){this.destroy(),t.style.display="block",t.addEventListener("keypress",r,!1),t.addEventListener("keydown",a,!1),t.addEventListener("paste",n,!1),window.addEventListener("mousedown",o,!1)},this.init(),this.show_char=function(t){"\b"===t?(this.text=this.text.slice(0,-1),this.update()):"\r"===t||(this.text+=t,"\n"===t&&(this.text_new_line=!0),this.update())},this.update=function(){var t=Date.now(),e=t-this.last_update;e<16?void 0===this.update_timer&&(this.update_timer=setTimeout((()=>{this.update_timer=void 0;var t=Date.now();dbg_assert(t-this.last_update>=15),this.last_update=t,this.render()}),16-e)):(void 0!==this.update_timer&&(clearTimeout(this.update_timer),this.update_timer=void 0),this.last_update=t,this.render())},this.render=function(){t.value=this.text,this.text_new_line&&(this.text_new_line=!1,t.scrollTop=1e9)},this.send_char=function(t){i.bus&&i.bus.send("serial0-input",t)}}function Sn(t,e){if(this.element=t,window.Terminal){var i=this.term=new window.Terminal;i.setOption("logLevel","off"),i.write("This is the serial console. Whatever you type or paste here will be sent to COM1"),i.onData((function(t){for(let i=0;i<t.length;i++)e.send("serial0-input",t.charCodeAt(i))})),e.register("serial0-output-char",(function(t){i.write(t)}),this)}}Sn.prototype.show=function(){this.term&&this.term.open(this.element)};function Mn(t){if("undefined"!=typeof window)if(window.AudioContext||window.webkitAudioContext){var e=window.AudioWorklet?Nn:Wn;this.bus=t,this.audio_context=window.AudioContext?new AudioContext:new webkitAudioContext,this.mixer=new Fn(t,this.audio_context),this.pcspeaker=new Bn(t,this.audio_context,this.mixer),this.dac=new e(t,this.audio_context,this.mixer),this.pcspeaker.start(),t.register("emulator-stopped",(function(){this.audio_context.suspend()}),this),t.register("emulator-started",(function(){this.audio_context.resume()}),this),t.register("speaker-confirm-initialized",(function(){t.send("speaker-has-initialized")}),this),t.send("speaker-has-initialized")}else console.warn("Web browser doesn't support Web Audio API")}function Fn(t,e){function i(t){return function(e){t.gain.setValueAtTime(e,this.audio_context.currentTime)}}this.audio_context=e,this.sources=new Map,this.volume_both=1,this.volume_left=1,this.volume_right=1,this.gain_left=1,this.gain_right=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,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,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,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),t.register("mixer-connect",(function(t){var e=t[0],i=t[1];this.connect_source(e,i)}),this),t.register("mixer-disconnect",(function(t){var e=t[0],i=t[1];this.disconnect_source(e,i)}),this),t.register("mixer-volume",(function(t){var e=t[0],i=t[1],s=t[2],r=Math.pow(10,s/20),a=0===e?this:this.sources.get(e);void 0!==a?a.set_volume(r,i):ne(!1,"Mixer set volume - cannot set volume for undefined source: "+e)}),this),t.register("mixer-gain-left",(function(t){this.gain_left=Math.pow(10,t/20),this.update()}),this),t.register("mixer-gain-right",(function(t){this.gain_right=Math.pow(10,t/20),this.update()}),this),t.register("mixer-treble-left",i(this.node_treble_left),this),t.register("mixer-treble-right",i(this.node_treble_right),this),t.register("mixer-bass-left",i(this.node_bass_left),this),t.register("mixer-bass-right",i(this.node_bass_right),this)}function Vn(t,e,i,s){this.audio_context=t,this.connected_left=!0,this.connected_right=!0,this.gain_hidden=1,this.volume_both=1,this.volume_left=1,this.volume_right=1,this.node_splitter=t.createChannelSplitter(2),this.node_gain_left=t.createGain(),this.node_gain_right=t.createGain(),e.connect(this.node_splitter),this.node_splitter.connect(this.node_gain_left,0),this.node_gain_left.connect(i),this.node_splitter.connect(this.node_gain_right,1),this.node_gain_right.connect(s)}function Bn(t,e,i){this.node_oscillator=e.createOscillator(),this.node_oscillator.type="square",this.node_oscillator.frequency.setValueAtTime(440,e.currentTime),this.mixer_connection=i.add_source(this.node_oscillator,1),this.mixer_connection.disconnect(),t.register("pcspeaker-enable",(function(){i.connect_source(1)}),this),t.register("pcspeaker-disable",(function(){i.disconnect_source(1)}),this),t.register("pcspeaker-update",(function(t){var i=t[0],s=t[1],r=0;3===i&&(r=1193.1816666*1e3/s,r=Math.min(r,this.node_oscillator.frequency.maxValue),r=Math.max(r,0)),this.node_oscillator.frequency.setValueAtTime(r,e.currentTime)}),this)}function Nn(t,e,i){this.bus=t,this.audio_context=e,this.enabled=!1,this.sampling_rate=48e3;var s=function(){var t=256;function e(t){return 0===t?1:(t*=Math.PI,Math.sin(t)/t)}var i=[new Float32Array(t),new Float32Array(t)];function s(){var t=Reflect.construct(AudioWorkletProcessor,[],s);return t.kernel_size=3,t.queue_data=new Array(1024),t.queue_start=0,t.queue_end=0,t.queue_length=0,t.queue_size=t.queue_data.length,t.queued_samples=0,t.source_buffer_previous=i,t.source_buffer_current=i,t.source_samples_per_destination=1,t.source_block_start=0,t.source_time=0,t.source_offset=0,t.port.onmessage=e=>{switch(e.data.type){case"queue":t.queue_push(e.data.value);break;case"sampling-rate":t.source_samples_per_destination=e.data.value/sampleRate}},t}Reflect.setPrototypeOf(s.prototype,AudioWorkletProcessor.prototype),Reflect.setPrototypeOf(s,AudioWorkletProcessor),s.prototype.process=s.prototype.process=function(t,e,i){for(var s=0;s<e[0][0].length;s++){for(var r=0,a=0,n=this.source_offset-this.kernel_size+1,o=this.source_offset+this.kernel_size,h=n;h<=o;h++){var _=this.source_block_start+h;r+=this.get_sample(_,0)*this.kernel(this.source_time-h),a+=this.get_sample(_,1)*this.kernel(this.source_time-h)}(isNaN(r)||isNaN(a))&&(r=a=0,this.dbg_log("ERROR: NaN values! Ignoring for now.")),e[0][0][s]=r,e[0][1][s]=a,this.source_time+=this.source_samples_per_destination,this.source_offset=Math.floor(this.source_time)}var d=this.source_offset;return d+=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(d),!0},s.prototype.kernel=function(t){return e(t)*e(t/this.kernel_size)},s.prototype.get_sample=function(t,e){return t<0?(t+=this.source_buffer_previous[0].length,this.source_buffer_previous[e][t]):this.source_buffer_current[e][t]},s.prototype.ensure_enough_data=function(t){var e=this.source_buffer_current[0].length;e-this.source_block_start<t&&(this.prepare_next_buffer(),this.source_block_start-=e)},s.prototype.prepare_next_buffer=function(){this.queued_samples<t&&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 e=this.source_buffer_current[0].length;if(e<t){for(var i=this.queue_start,s=0;e<t&&s<this.queue_length;)e+=this.queue_data[i][0].length,i=i+1&this.queue_size-1,s++;var r=Math.max(e,t),a=[new Float32Array(r),new Float32Array(r)];a[0].set(this.source_buffer_current[0]),a[1].set(this.source_buffer_current[1]);for(var n=this.source_buffer_current[0].length,o=0;o<s;o++){var h=this.queue_shift();a[0].set(h[0],n),a[1].set(h[1],n),n+=h[0].length}this.source_buffer_current=a}this.pump()},s.prototype.pump=function(){this.queued_samples/this.source_samples_per_destination<1024&&this.port.postMessage({type:"pump"})},s.prototype.queue_push=function(t){this.queue_length<this.queue_size&&(this.queue_data[this.queue_end]=t,this.queue_end=this.queue_end+1&this.queue_size-1,this.queue_length++,this.queued_samples+=t[0].length,this.pump())},s.prototype.queue_shift=function(){if(!this.queue_length)return i;var t=this.queue_data[this.queue_start];return this.queue_data[this.queue_start]=null,this.queue_start=this.queue_start+1&this.queue_size-1,this.queue_length--,this.queued_samples-=t[0].length,t},s.prototype.dbg_log=function(t){this.port.postMessage({type:"debug-log",value:t})},registerProcessor("dac-processor",s)}.toString(),r=s.indexOf("{")+1,a=s.lastIndexOf("}"),n=s.substring(r,a);n="var DEBUG = true;\n"+n;var o=new Blob([n],{type:"application/javascript"}),h=URL.createObjectURL(o);this.node_processor=null,this.node_output=this.audio_context.createGain(),this.audio_context.audioWorklet.addModule(h).then((()=>{URL.revokeObjectURL(h),this.node_processor=new AudioWorkletNode(this.audio_context,"dac-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],parameterData:{},processorOptions:{}}),this.node_processor.port.postMessage({type:"sampling-rate",value:this.sampling_rate}),this.node_processor.port.onmessage=t=>{switch(t.data.type){case"pump":this.pump();break;case"debug-log":re("SpeakerWorkletDAC - Worklet: "+t.data.value)}},this.node_processor.connect(this.node_output)})),this.mixer_connection=i.add_source(this.node_output,2),this.mixer_connection.set_gain_hidden(3),t.register("dac-send-data",(function(t){this.queue(t)}),this),t.register("dac-enable",(function(t){this.enabled=!0}),this),t.register("dac-disable",(function(){this.enabled=!1}),this),t.register("dac-tell-sampling-rate",(function(t){ne(t>0,"Sampling rate should be nonzero"),this.sampling_rate=t,this.node_processor&&this.node_processor.port.postMessage({type:"sampling-rate",value:t})}),this),this.debugger=new jn(this.audio_context,this.node_output)}function Wn(t,e,i){this.bus=t,this.audio_context=e,this.enabled=!1,this.sampling_rate=22050,this.buffered_time=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=i.add_source(this.node_output,2),this.mixer_connection.set_gain_hidden(3),t.register("dac-send-data",(function(t){this.queue(t)}),this),t.register("dac-enable",(function(t){this.enabled=!0,this.pump()}),this),t.register("dac-disable",(function(){this.enabled=!1}),this),t.register("dac-tell-sampling-rate",(function(t){ne(t>0,"Sampling rate should be nonzero"),this.sampling_rate=t,this.rate_ratio=Math.ceil(8e3/t),this.node_lowpass.frequency.setValueAtTime(t/2,this.audio_context.currentTime)}),this),this.debugger=new jn(this.audio_context,this.node_output)}function jn(t,e){this.audio_context=t,this.node_source=e,this.node_processor=null,this.node_gain=this.audio_context.createGain(),this.node_gain.gain.setValueAtTime(0,this.audio_context.currentTime),this.node_gain.connect(this.audio_context.destination),this.is_active=!1,this.queued_history=[],this.output_history=[],this.queued=[[],[]],this.output=[[],[]]}function Kn(t){this.cpu_is_running=!1;const e=u.create();var i,s;this.bus=e[0],this.emulator_bus=e[1];const r=new WebAssembly.Table({element:"anyfunc",initial:1924}),a={cpu_exception_hook:t=>this.cpu_exception_hook&&this.cpu_exception_hook(t),hlt_op:function(){return i.hlt_op()},abort:function(){ne(!1)},microtick:Pi.microtick,get_rand_int:function(){return _e.get_rand_int()},pic_acknowledge:function(){i.pic_acknowledge()},io_port_read8:function(t){return i.io.port_read8(t)},io_port_read16:function(t){return i.io.port_read16(t)},io_port_read32:function(t){return i.io.port_read32(t)},io_port_write8:function(t,e){i.io.port_write8(t,e)},io_port_write16:function(t,e){i.io.port_write16(t,e)},io_port_write32:function(t,e){i.io.port_write32(t,e)},mmap_read8:function(t){return i.mmap_read8(t)},mmap_read16:function(t){return i.mmap_read16(t)},mmap_read32:function(t){return i.mmap_read32(t)},mmap_write8:function(t,e){i.mmap_write8(t,e)},mmap_write16:function(t,e){i.mmap_write16(t,e)},mmap_write32:function(t,e){i.mmap_write32(t,e)},mmap_write64:function(t,e,s){i.mmap_write64(t,e,s)},mmap_write128:function(t,e,s,r,a){i.mmap_write128(t,e,s,r,a)},log_from_wasm:function(t,e){const i=_e.read_sized_string_from_mem(s,t,e);re(i,LOG_CPU)},console_log_from_wasm:function(t,e){const i=_e.read_sized_string_from_mem(s,t,e);console.error(i)},dbg_trace_from_wasm:function(){ae()},codegen_finalize:(t,e,s,r,a)=>{i.codegen_finalize(t,e,s,r,a)},jit_clear_func:t=>i.jit_clear_func(t),jit_clear_all_funcs:()=>i.jit_clear_all_funcs(),__indirect_function_table:r};let n="v86-debug.wasm",o="v86-fallback.wasm";if(t.wasm_path){n=t.wasm_path;const e=n.lastIndexOf("/"),i=-1===e?"":n.substr(0,e);o=i+"/"+o}else"undefined"==typeof window&&"string"==typeof __dirname?(n=__dirname+"/"+n,o=__dirname+"/"+o):(n="build/"+n,o="build/"+o);t.wasm_fn?t.wasm_fn({env:a}).then((e=>{s=e.memory,e.rust_init();const a=this.v86=new Pi(this.emulator_bus,{exports:e,wasm_table:r});i=a.cpu,this.continue_init(a,t)})):_e.load_file(n,{done:e=>{WebAssembly.instantiate(e,{env:a}).then((({instance:e})=>{const a=e.exports;s=a.memory,a.rust_init();const n=this.v86=new Pi(this.emulator_bus,{exports:a,wasm_table:r});i=n.cpu,this.continue_init(n,t)}),(e=>{_e.load_file(o,{done:e=>{WebAssembly.instantiate(e,{env:a}).then((({instance:e})=>{const a=e.exports;s=a.memory,a.rust_init();const n=this.v86=new Pi(this.emulator_bus,{exports:a,wasm_table:r});i=n.cpu,this.continue_init(n,t)}))}})}))},progress:t=>{this.emulator_bus.send("download-progress",{file_index:0,file_count:1,file_name:n,lengthComputable:t.lengthComputable,total:t.total,loaded:t.loaded})}})}function Xn(t){this.message=t||"File already exists"}function Hn(t){this.message=t||"File not found"}Fn.prototype.add_source=function(t,e){var i=new Vn(this.audio_context,t,this.input_left,this.input_right);return ne(!this.sources.has(e),"Mixer add source - overwritting source: "+e),this.sources.set(e,i),i},Fn.prototype.connect_source=function(t,e){var i=this.sources.get(t);void 0!==i?i.connect(e):ne(!1,"Mixer connect - cannot connect undefined source: "+t)},Fn.prototype.disconnect_source=function(t,e){var i=this.sources.get(t);void 0!==i?i.disconnect(e):ne(!1,"Mixer disconnect - cannot disconnect undefined source: "+t)},Fn.prototype.set_volume=function(t,e){switch(void 0===e&&(e=2),e){case 0:this.volume_left=t;break;case 1:this.volume_right=t;break;case 2:this.volume_both=t;break;default:return void ne(!1,"Mixer set master volume - unknown channel: "+e)}this.update()},Fn.prototype.update=function(){var t=this.volume_both*this.volume_left*this.gain_left,e=this.volume_both*this.volume_right*this.gain_right;this.node_gain_left.gain.setValueAtTime(t,this.audio_context.currentTime),this.node_gain_right.gain.setValueAtTime(e,this.audio_context.currentTime)},Vn.prototype.update=function(){var t=this.connected_left*this.gain_hidden*this.volume_both*this.volume_left,e=this.connected_right*this.gain_hidden*this.volume_both*this.volume_right;this.node_gain_left.gain.setValueAtTime(t,this.audio_context.currentTime),this.node_gain_right.gain.setValueAtTime(e,this.audio_context.currentTime)},Vn.prototype.connect=function(t){var e=!t||2===t;(e||0===t)&&(this.connected_left=!0),(e||1===t)&&(this.connected_right=!0),this.update()},Vn.prototype.disconnect=function(t){var e=!t||2===t;(e||0===t)&&(this.connected_left=!1),(e||1===t)&&(this.connected_right=!1),this.update()},Vn.prototype.set_volume=function(t,e){switch(void 0===e&&(e=2),e){case 0:this.volume_left=t;break;case 1:this.volume_right=t;break;case 2:this.volume_both=t;break;default:return void ne(!1,"Mixer set volume - unknown channel: "+e)}this.update()},Vn.prototype.set_gain_hidden=function(t){this.gain_hidden=t},Bn.prototype.start=function(){this.node_oscillator.start()},Nn.prototype.queue=function(t){this.node_processor&&(this.debugger.push_queued_data(t),this.node_processor.port.postMessage({type:"queue",value:t},[t[0].buffer,t[1].buffer]))},Nn.prototype.pump=function(){this.enabled&&this.bus.send("dac-request-data")},Wn.prototype.queue=function(t){this.debugger.push_queued_data(t);var e,i=t[0].length,s=i/this.sampling_rate;if(this.rate_ratio>1)for(var r=i*this.rate_ratio,a=this.sampling_rate*this.rate_ratio,n=(e=this.audio_context.createBuffer(2,r,a)).getChannelData(0),o=e.getChannelData(1),h=0,_=0;_<i;_++)for(var d=0;d<this.rate_ratio;d++,h++)n[h]=t[0][_],o[h]=t[1][_];else(e=this.audio_context.createBuffer(2,i,this.sampling_rate)).copyToChannel?(e.copyToChannel(t[0],0),e.copyToChannel(t[1],1)):(e.getChannelData(0).set(t[0]),e.getChannelData(1).set(t[1]));var c=this.audio_context.createBufferSource();c.buffer=e,c.connect(this.node_lowpass),c.addEventListener("ended",this.pump.bind(this));var u=this.audio_context.currentTime;if(this.buffered_time<u){re("Speaker DAC - Creating/Recreating reserve - shouldn't occur frequently during playback"),this.buffered_time=u;for(var p=.2-s,l=0;l<=p;)l+=s,this.buffered_time+=s,setTimeout((()=>this.pump()),1e3*l)}c.start(this.buffered_time),this.buffered_time+=s,setTimeout((()=>this.pump()),0)},Wn.prototype.pump=function(){this.enabled&&(this.buffered_time-this.audio_context.currentTime>.2||this.bus.send("dac-request-data"))},jn.prototype.start=function(t){this.is_active=!0,this.queued=[[],[]],this.output=[[],[]],this.queued_history.push(this.queued),this.output_history.push(this.output),this.node_processor=this.audio_context.createScriptProcessor(1024,2,2),this.node_processor.onaudioprocess=t=>{this.output[0].push(t.inputBuffer.getChannelData(0).slice()),this.output[1].push(t.inputBuffer.getChannelData(1).slice())},this.node_source.connect(this.node_processor),this.node_processor.connect(this.node_gain),setTimeout((()=>{this.stop()}),t)},jn.prototype.stop=function(){this.is_active=!1,this.node_source.disconnect(this.node_processor),this.node_processor.disconnect(),this.node_processor=null},jn.prototype.push_queued_data=function(t){this.is_active&&(this.queued[0].push(t[0].slice()),this.queued[1].push(t[1].slice()))},jn.prototype.download_txt=function(t,e){var i=this.output_history[t][e].map((t=>t.join(" "))).join(" ");dump_file(i,"dacdata.txt")},jn.prototype.download_csv=function(t){for(var e=this.output_history[t],i=[],s=0;s<e[0].length;s++)for(var r=0;r<e[0][s].length;r++)i.push(`${e[0][s][r]},${e[1][s][r]}`);dump_file(i.join("\n"),"dacdata.csv")},Kn.prototype.continue_init=async function(t,e){this.bus.register("emulator-stopped",(function(){this.cpu_is_running=!1}),this),this.bus.register("emulator-started",(function(){this.cpu_is_running=!0}),this);var i={};function s(t,e){switch(t){case"hda":i.hda=this.disk_images.hda=e;break;case"hdb":i.hdb=this.disk_images.hdb=e;break;case"cdrom":i.cdrom=this.disk_images.cdrom=e;break;case"fda":i.fda=this.disk_images.fda=e;break;case"fdb":i.fdb=this.disk_images.fdb=e;break;case"multiboot":i.multiboot=this.disk_images.multiboot=e.buffer;break;case"bzimage":i.bzimage=this.disk_images.bzimage=e.buffer;break;case"initrd":i.initrd=this.disk_images.initrd=e.buffer;break;case"bios":i.bios=e.buffer;break;case"vga_bios":i.vga_bios=e.buffer;break;case"initial_state":i.initial_state=e.buffer;break;case"fs9p_json":i.fs9p_json=e;break;default:ne(!1,t)}}this.disk_images={fda:void 0,fdb:void 0,hda:void 0,hdb:void 0,cdrom:void 0},i.acpi=e.acpi,i.load_devices=!0,i.log_level=e.log_level,i.memory_size=e.memory_size||67108864,i.vga_memory_size=e.vga_memory_size||8388608,i.boot_order=e.boot_order||531,i.fastboot=e.fastboot||!1,i.fda=void 0,i.fdb=void 0,i.uart1=e.uart1,i.uart2=e.uart2,i.uart3=e.uart3,i.cmdline=e.cmdline,i.preserve_mac_from_state_image=e.preserve_mac_from_state_image,e.network_adapter?this.network_adapter=e.network_adapter(this.bus):e.network_relay_url&&(this.network_adapter=new En(e.network_relay_url,this.bus)),i.enable_ne2k=!0,e.disable_keyboard||(this.keyboard_adapter=new Pn(this.bus)),e.disable_mouse||(this.mouse_adapter=new Tn(this.bus,e.screen_container)),e.screen_container?this.screen_adapter=new Dn(e.screen_container,this.bus):e.screen_dummy&&(this.screen_adapter=new Un(this.bus)),e.serial_container&&(this.serial_adapter=new Gn(e.serial_container,this.bus)),e.serial_container_xtermjs&&(this.serial_adapter=new Sn(e.serial_container_xtermjs,this.bus)),e.disable_speaker||(this.speaker_adapter=new Mn(this.bus));var r=[];function a(t,e){if(e)if(e.get&&e.set&&e.load)r.push({name:t,loadable:e});else if(e={buffer:e.buffer,async:e.async,url:e.url,size:e.size,fixed_chunk_size:e.fixed_chunk_size,use_parts:e.use_parts},"bios"!==t&&"vga_bios"!==t&&"initial_state"!==t&&"multiboot"!==t&&"bzimage"!==t&&"initrd"!==t||(e.async=!1),e.buffer instanceof ArrayBuffer){var i=new ce(e.buffer);r.push({name:t,loadable:i})}else if("undefined"!=typeof File&&e.buffer instanceof File){if(void 0===e.async&&(e.async=e.buffer.size>=268435456),e.async)i=new _e.AsyncFileBuffer(e.buffer);else i=new _e.SyncFileBuffer(e.buffer);r.push({name:t,loadable:i})}else if(e.url)if(e.async){let i;i=e.use_parts?new _e.AsyncXHRPartfileBuffer(e.url,e.size,e.fixed_chunk_size):new _e.AsyncXHRBuffer(e.url,e.size),r.push({name:t,loadable:i})}else r.push({name:t,url:e.url,size:e.size});else re("Ignored file: url="+e.url+" buffer="+e.buffer)}e.state&&console.warn("Warning: Unknown option 'state'. Did you mean 'initial_state'?");for(var n=["bios","vga_bios","cdrom","hda","hdb","fda","fdb","initial_state","multiboot","bzimage","initrd"],o=0;o<n.length;o++)a(n[o],e[n[o]]);if(e.filesystem){var h=e.filesystem.basefs,_=e.filesystem.baseurl;let t=new MemoryFileStorage;var d;if(_&&(t=new ServerFileStorageWrapper(t,_)),i.fs9p=this.fs9p=new FS(t),h)console.assert(_,"Filesystem: baseurl must be specified"),"object"==typeof h&&(d=h.size,h=h.url),ne("string"==typeof h),r.push({name:"fs9p_json",url:h,size:d,as_json:!0})}var c=this,u=r.length,p=function(t){if(t!==u){var e=r[t];e.loadable?(e.loadable.onload=function(i){s.call(this,e.name,e.loadable),p(t+1)}.bind(this),e.loadable.load()):_e.load_file(e.url,{done:function(i){s.call(this,e.name,e.as_json?i:new ce(i)),p(t+1)}.bind(this),progress:function(i){200===i.target.status?c.emulator_bus.send("download-progress",{file_index:t,file_count:u,file_name:e.url,lengthComputable:i.lengthComputable,total:i.total||e.size,loaded:i.loaded}):c.emulator_bus.send("download-error",{file_index:t,file_count:u,file_name:e.url,request:i.target})},as_json:e.as_json})}else setTimeout(l.bind(this),0)}.bind(this);function l(){if(i.fs9p&&i.fs9p_json)if(i.initial_state?re("Filesystem basefs ignored: Overridden by state image"):i.fs9p.load_from_json(i.fs9p_json),e.bzimage_initrd_from_filesystem){const{bzimage:t,initrd:e}=this.get_bzimage_initrd_from_filesystem(i.fs9p);re("Found bzimage: "+t+" and initrd: "+e),Promise.all([i.fs9p.read_file(e),i.fs9p.read_file(t)]).then((([t,e])=>{s.call(this,"initrd",new ce(t.buffer)),s.call(this,"bzimage",new ce(e.buffer)),r.call(this)}))}else r.call(this);else console.assert(!e.bzimage_initrd_from_filesystem,"bzimage_initrd_from_filesystem: Requires a filesystem"),r.call(this);function r(){this.serial_adapter&&this.serial_adapter.show&&this.serial_adapter.show(),this.bus.send("cpu-init",i),i.initial_state&&(t.restore_state(i.initial_state),i.initial_state=void 0),e.autostart&&this.bus.send("cpu-run"),this.emulator_bus.send("emulator-loaded")}}p(0)},Kn.prototype.get_bzimage_initrd_from_filesystem=function(t){const e=(t.read_dir("/")||[]).map((t=>"/"+t)),i=(t.read_dir("/boot/")||[]).map((t=>"/boot/"+t));let s,r;for(let t of[].concat(e,i)){const e=/old/i.test(t)||/fallback/i.test(t),i=/vmlinuz/i.test(t)||/bzimage/i.test(t),a=/initrd/i.test(t)||/initramfs/i.test(t);!i||r&&e||(r=t),!a||s&&e||(s=t)}return s&&r||(console.log("Failed to find bzimage or initrd in filesystem. Files:"),console.log(e.join(" ")),console.log(i.join(" "))),{initrd:s,bzimage:r}},Kn.prototype.run=function(){this.bus.send("cpu-run")},Kn.prototype.stop=function(){this.bus.send("cpu-stop")},Kn.prototype.destroy=function(){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()},Kn.prototype.restart=function(){this.bus.send("cpu-restart")},Kn.prototype.add_listener=function(t,e){this.bus.register(t,e,this)},Kn.prototype.remove_listener=function(t,e){this.bus.unregister(t,e)},Kn.prototype.restore_state=function(t){this.v86.restore_state(t)},Kn.prototype.save_state=function(t){setTimeout(function(){try{t(null,this.v86.save_state())}catch(e){t(e,null)}}.bind(this),0)},Kn.prototype.get_statistics=function(){console.warn("V86Starter.prototype.get_statistics is deprecated. Use events instead.");var t={cpu:{instruction_counter:this.get_instruction_counter()}};if(!this.v86)return t;var e=this.v86.cpu.devices;return e.hda&&(t.hda=e.hda.stats),e.cdrom&&(t.cdrom=e.cdrom.stats),e.ps2&&(t.mouse={enabled:e.ps2.use_mouse}),e.vga&&(t.vga={is_graphical:e.vga.stats.is_graphical}),t},Kn.prototype.get_instruction_counter=function(){return this.v86?this.v86.cpu.instruction_counter[0]>>>0:0},Kn.prototype.is_running=function(){return this.cpu_is_running},Kn.prototype.keyboard_send_scancodes=function(t){for(var e=0;e<t.length;e++)this.bus.send("keyboard-code",t[e])},Kn.prototype.keyboard_send_keys=function(t){for(var e=0;e<t.length;e++)this.keyboard_adapter.simulate_press(t[e])},Kn.prototype.keyboard_send_text=function(t){for(var e=0;e<t.length;e++)this.keyboard_adapter.simulate_char(t[e])},Kn.prototype.screen_make_screenshot=function(){this.screen_adapter&&this.screen_adapter.make_screenshot()},Kn.prototype.screen_set_scale=function(t,e){this.screen_adapter&&this.screen_adapter.set_scale(t,e)},Kn.prototype.screen_go_fullscreen=function(){if(this.screen_adapter){var t=document.getElementById("screen_container");if(t){var e=t.requestFullScreen||t.webkitRequestFullscreen||t.mozRequestFullScreen||t.msRequestFullScreen;if(e){e.call(t);var i=document.getElementsByClassName("phone_keyboard")[0];i&&i.focus()}this.lock_mouse()}}},Kn.prototype.lock_mouse=function(){var t=document.body,e=t.requestPointerLock||t.mozRequestPointerLock||t.webkitRequestPointerLock;e&&e.call(t)},Kn.prototype.mouse_set_status=function(t){this.mouse_adapter&&(this.mouse_adapter.emu_enabled=t)},Kn.prototype.keyboard_set_status=function(t){this.keyboard_adapter&&(this.keyboard_adapter.emu_enabled=t)},Kn.prototype.serial0_send=function(t){for(var e=0;e<t.length;e++)this.bus.send("serial0-input",t.charCodeAt(e))},Kn.prototype.serial_send_bytes=function(t,e){for(var i=0;i<e.length;i++)this.bus.send("serial"+t+"-input",e[i])},Kn.prototype.mount_fs=async function(t,e,i,s){let r=new MemoryFileStorage;e&&(r=new ServerFileStorageWrapper(r,e));const a=new FS(r,this.fs9p.qidcounter),n=()=>{const e=this.fs9p.Mount(t,a);s&&(e===-ENOENT?s(new Hn):e===-EEXIST?s(new Xn):e<0?(ne(!1,"Unexpected error code: "+-e),s(new Error("Failed to mount. Error number: "+-e))):s(null))};e?(ne("object"==typeof i,"Filesystem: basefs must be a JSON object"),a.load_from_json(i,(()=>n()))):n()},Kn.prototype.create_file=function(t,e,i){i=i||function(){};var s=this.fs9p;if(s){var r=t.split("/"),a=r[r.length-1],n=s.SearchPath(t).parentid;""===a||-1===n?setTimeout((function(){i(new Hn)}),0):s.CreateBinaryFile(a,n,e).then((()=>i(null)))}},Kn.prototype.read_file=function(t,e){var i=this.fs9p;i&&i.read_file(t).then((t=>{t?e(null,t):e(new Hn,null)}))},Kn.prototype.automatically=function(t){const e=t=>{const i=t[0];if(!i)return;const s=t.slice(1);if(i.sleep)setTimeout((()=>e(s)),1e3*i.sleep);else{if(!i.vga_text)return i.keyboard_send?(i.keyboard_send instanceof Array?this.keyboard_send_scancodes(i.keyboard_send):(ne("string"==typeof i.keyboard_send),this.keyboard_send_text(i.keyboard_send)),void e(s)):i.call?(i.call(),void e(s)):void console.assert(!1,i);{const r=this.screen_adapter.get_text_screen();for(let t of r)if(t.includes(i.vga_text))return void e(s);setTimeout((()=>e(t)),1e3)}}};e(t)},Kn.prototype.read_memory=function(t,e){return this.v86.cpu.read_blob(t,e)},Kn.prototype.write_memory=function(t,e){this.v86.cpu.write_blob(t,e)},Xn.prototype=Error.prototype,Hn.prototype=Error.prototype,"undefined"!=typeof window?(window.V86Starter=Kn,window.V86=Kn):"undefined"!=typeof module&&void 0!==module.exports?(module.exports.V86Starter=Kn,module.exports.V86=Kn):"function"==typeof importScripts&&(self.V86Starter=Kn,self.V86=Kn),function(){if("undefined"==typeof XMLHttpRequest?_e.load_file=function(t,e){let i=require("fs");if(e.range)dbg_assert(!e.as_json),i.open(t,"r",((t,s)=>{if(t)throw t;let r=e.range.length;var a=Buffer.allocUnsafe(r);i.read(s,a,0,r,e.range.start,((t,n)=>{if(t)throw t;dbg_assert(n===r),e.done&&e.done(new Uint8Array(a)),i.close(s,(t=>{if(t)throw t}))}))}));else{var s={encoding:e.as_json?"utf-8":null};i.readFile(t,s,(function(i,s){if(i)console.log("Could not read file:",t,i);else{var r=s;r=e.as_json?JSON.parse(r):new Uint8Array(r).buffer,e.done(r)}}))}}:_e.load_file=function t(e,i,s){var r=new XMLHttpRequest;r.open(i.method||"get",e,!0),i.as_json?r.responseType="json":r.responseType="arraybuffer";if(i.headers)for(var a=Object.keys(i.headers),n=0;n<a.length;n++){var o=a[n];r.setRequestHeader(o,i.headers[o])}if(i.range){let t=i.range.start,e=t+i.range.length-1;r.setRequestHeader("Range","bytes="+t+"-"+e),r.onreadystatechange=function(){200===r.status&&r.abort()}}r.onload=function(t){4===r.readyState&&(200!==r.status&&206!==r.status?(console.error("Loading the image "+e+" failed (status %d)",r.status),r.status>=500&&r.status<600&&h()):r.response&&i.done&&i.done(r.response,r))},r.onerror=function(t){console.error("Loading the image "+e+" failed",t),h()},i.progress&&(r.onprogress=function(t){i.progress(t)});function h(){const r=s||0;setTimeout((()=>{t(e,i,r+1)}),1e3*([1,1,2,3,5,8,13,21][r]||34))}r.send(null)},_e.AsyncXHRBuffer=e,_e.AsyncXHRPartfileBuffer=i,_e.AsyncFileBuffer=r,_e.SyncFileBuffer=s,_e.read_sized_string_from_mem=function(t,e,i){return e>>>=0,i>>>=0,String.fromCharCode(...new Uint8Array(t.buffer,e,i))},"undefined"==typeof XMLHttpRequest)var t=function(t,e){require("fs").stat(t,((t,i)=>{t?e(t):e(null,i.size)}))};else t=function(t,e){_e.load_file(t,{done:(t,i)=>{var s=i.getResponseHeader("Content-Range")||"",r=s.match(/\/(\d+)\s*$/);if(r)e(null,+r[1]);else{e("`Range: bytes=...` header not supported (Got `"+s+"`)")}},headers:{Range:"bytes=0-0"}})};function e(t,e){this.filename=t,this.block_size=256,this.byteLength=e,this.loaded_blocks=Object.create(null),this.onload=void 0,this.onprogress=void 0}function i(t,e,i){const s=t.match(/(.*)(\..*)/);s?(this.basename=s[1],this.extension=s[2]):(this.basename=t,this.extension=""),this.block_size=256,this.byteLength=e,this.use_fixed_chunk_size="number"==typeof i,this.fixed_chunk_size=i,this.loaded_blocks=Object.create(null),this.onload=void 0,this.onprogress=void 0}function s(t){this.file=t,this.byteLength=t.size,t.size>1<<30&&console.warn("SyncFileBuffer: Allocating buffer of "+(t.size>>20)+" MB ..."),this.buffer=new ArrayBuffer(t.size),this.onload=void 0,this.onprogress=void 0}function r(t){this.file=t,this.byteLength=t.size,this.block_size=256,this.loaded_blocks=Object.create(null),this.onload=void 0,this.onprogress=void 0}e.prototype.load=function(){void 0===this.byteLength?t(this.filename,((t,e)=>{if(t)throw new Error("Cannot use: "+this.filename+". "+t);dbg_assert(e>=0),this.byteLength=e,this.onload&&this.onload(Object.create(null))})):this.onload&&this.onload(Object.create(null))},e.prototype.get_from_cache=function(t,e,i){for(var s=e/this.block_size,r=t/this.block_size,a=0;a<s;a++){if(!this.loaded_blocks[r+a])return}if(1===s)return this.loaded_blocks[r];var n=new Uint8Array(e);for(a=0;a<s;a++)n.set(this.loaded_blocks[r+a],a*this.block_size);return n},e.prototype.get=function(t,e,i){console.assert(t+e<=this.byteLength),console.assert(t%this.block_size==0),console.assert(e%this.block_size==0),console.assert(e);var s=this.get_from_cache(t,e,i);s?i(s):_e.load_file(this.filename,{done:function(s){var r=new Uint8Array(s);this.handle_read(t,e,r),i(r)}.bind(this),range:{start:t,length:e}})},e.prototype.set=function(t,e,i){console.assert(t+e.byteLength<=this.byteLength);var s=e.length;console.assert(t%this.block_size==0),console.assert(s%this.block_size==0),console.assert(s);for(var r=t/this.block_size,a=s/this.block_size,n=0;n<a;n++){var o=this.loaded_blocks[r+n];void 0===o&&(o=this.loaded_blocks[r+n]=new Uint8Array(this.block_size));var h=e.subarray(n*this.block_size,(n+1)*this.block_size);o.set(h),console.assert(o.byteLength===h.length)}i()},e.prototype.handle_read=function(t,e,i){for(var s=t/this.block_size,r=e/this.block_size,a=0;a<r;a++){var n=this.loaded_blocks[s+a];n&&i.set(n,a*this.block_size)}},e.prototype.get_buffer=function(t){t()},e.prototype.get_written_blocks=function(){var t=Object.keys(this.loaded_blocks).length,e=new Uint8Array(t*this.block_size),i=[],s=0;for(var r of Object.keys(this.loaded_blocks)){var a=this.loaded_blocks[r];dbg_assert(a.length===this.block_size),r=+r,i.push(r),e.set(a,s*this.block_size),s++}return{buffer:e,indices:i,block_size:this.block_size}},e.prototype.get_state=function(){const t=[],e=[];for(let[t,i]of Object.entries(this.loaded_blocks))dbg_assert(isFinite(+t)),e.push([+t,i]);return t[0]=e,t},e.prototype.set_state=function(t){const e=t[0];this.loaded_blocks=Object.create(null);for(let[t,i]of Object.values(e))this.loaded_blocks[t]=i},i.prototype.load=function(){void 0===this.byteLength?(dbg_assert(!1),this.onload&&this.onload(Object.create(null))):this.onload&&this.onload(Object.create(null))},i.prototype.get_from_cache=e.prototype.get_from_cache,i.prototype.get=function(t,e,i){console.assert(t+e<=this.byteLength),console.assert(t%this.block_size==0),console.assert(e%this.block_size==0),console.assert(e);var s=this.get_from_cache(t,e,i);if(s)i(s);else if(this.use_fixed_chunk_size){const s=Math.floor(t/this.fixed_chunk_size),r=t-s*this.fixed_chunk_size;dbg_assert(r>=0);const a=Math.floor(e/this.fixed_chunk_size)+(0===r?1:2),n=new Uint8Array(r+a*this.fixed_chunk_size);let o=0;for(let h=0;h<a;h++){const _=this.basename+"-"+(s+h+"").padStart(8,"0")+this.extension;_e.load_file(_,{done:function(s){const _=h*this.fixed_chunk_size,d=new Uint8Array(s);if(n.set(d,_),o++,o===a){const s=n.subarray(r,r+e);this.handle_read(t,e,s),i(s)}}.bind(this)})}}else{const s=this.basename+"-"+t+"-"+(t+e)+this.extension;_e.load_file(s,{done:function(s){dbg_assert(s.byteLength===e);var r=new Uint8Array(s);this.handle_read(t,e,r),i(r)}.bind(this)})}},i.prototype.set=e.prototype.set,i.prototype.handle_read=e.prototype.handle_read,i.prototype.get_written_blocks=e.prototype.get_written_blocks,i.prototype.get_state=e.prototype.get_state,i.prototype.set_state=e.prototype.set_state,s.prototype.load=function(){this.load_next(0)},s.prototype.load_next=function(t){var e=4<<20,i=new FileReader;if(i.onload=function(i){var s=new Uint8Array(i.target.result);new Uint8Array(this.buffer,t).set(s),this.load_next(t+e)}.bind(this),this.onprogress&&this.onprogress({loaded:t,total:this.byteLength,lengthComputable:!0}),t<this.byteLength){var s=Math.min(t+e,this.byteLength),r=this.file.slice(t,s);i.readAsArrayBuffer(r)}else this.file=void 0,this.onload&&this.onload({buffer:this.buffer})},s.prototype.get=function(t,e,i){console.assert(t+e<=this.byteLength),i(new Uint8Array(this.buffer,t,e))},s.prototype.set=function(t,e,i){console.assert(t+e.byteLength<=this.byteLength),new Uint8Array(this.buffer,t,e.byteLength).set(e),i()},s.prototype.get_buffer=function(t){t(this.buffer)},s.prototype.get_state=function(){const t=[];return t[0]=this.byteLength,t[1]=new Uint8Array(this.buffer),t},s.prototype.set_state=function(t){this.byteLength=t[0],this.buffer=t[1].slice().buffer},r.prototype.load=function(){this.onload&&this.onload(Object.create(null))},r.prototype.get=function(t,e,i){console.assert(t%this.block_size==0),console.assert(e%this.block_size==0),console.assert(e);var s=this.get_from_cache(t,e,i);if(s)i(s);else{var r=new FileReader;r.onload=function(s){var r=s.target.result,a=new Uint8Array(r);this.handle_read(t,e,a),i(a)}.bind(this),r.readAsArrayBuffer(this.file.slice(t,t+e))}},r.prototype.get_from_cache=e.prototype.get_from_cache,r.prototype.set=e.prototype.set,r.prototype.handle_read=e.prototype.handle_read,r.prototype.get_state=e.prototype.get_state,r.prototype.get_buffer=function(t){t()},r.prototype.get_as_file=function(t){for(var e=[],i=Object.keys(this.loaded_blocks).map(Number).sort((function(t,e){return t-e})),s=0,r=0;r<i.length;r++){var a=i[r],n=this.loaded_blocks[a],o=a*this.block_size;console.assert(o>=s),o!==s&&(e.push(this.file.slice(s,o)),s=o),e.push(n),s+=n.length}s!==this.file.size&&e.push(this.file.slice(s));var h=new File(e,t);return console.assert(h.size===this.file.size),h}}();export{e as ACPI,c as APIC,s as APIC_ADDRESS,i as APIC_LOG_VERBOSE,$t as APIC_TIMER_FREQ,r as APIC_TIMER_MODE_MASK,a as APIC_TIMER_MODE_ONE_SHOT,n as APIC_TIMER_MODE_PERIODIC,o as APIC_TIMER_MODE_TSC,u as Bus,p as BusConnector,ue as ByteQueue,ui as CDROM_SECTOR_SIZE,Ye as CMOS_BIOS_BOOTFLAG1,Je as CMOS_BIOS_BOOTFLAG2,Qe as CMOS_BIOS_DISKTRANSFLAG,ei as CMOS_BIOS_SMP_COUNT,Ke as CMOS_CENTURY,Te as CMOS_DISK_DATA,Be as CMOS_DISK_DRIVE1_CYL,Fe as CMOS_DISK_DRIVE1_TYPE,Ne as CMOS_DISK_DRIVE2_CYL,Ve as CMOS_DISK_DRIVE2_TYPE,De as CMOS_EQUIPMENT_INFO,Pe as CMOS_FLOPPY_DRIVE_TYPE,Ge as CMOS_MEM_BASE_HIGH,Ue as CMOS_MEM_BASE_LOW,He as CMOS_MEM_EXTMEM2_HIGH,Xe as CMOS_MEM_EXTMEM2_LOW,je as CMOS_MEM_EXTMEM_HIGH,We as CMOS_MEM_EXTMEM_LOW,ti as CMOS_MEM_HIGHMEM_HIGH,Ze as CMOS_MEM_HIGHMEM_LOW,$e as CMOS_MEM_HIGHMEM_MID,Me as CMOS_MEM_OLD_EXT_HIGH,Se as CMOS_MEM_OLD_EXT_LOW,Ee as CMOS_RESET_CODE,qe as CMOS_RTC_DAY_MONTH,Ae as CMOS_RTC_DAY_WEEK,ke as CMOS_RTC_HOURS,xe as CMOS_RTC_HOURS_ALARM,ve as CMOS_RTC_MINUTES,we as CMOS_RTC_MINUTES_ALARM,Ie as CMOS_RTC_MONTH,be as CMOS_RTC_SECONDS,ye as CMOS_RTC_SECONDS_ALARM,Ce as CMOS_RTC_YEAR,ze as CMOS_STATUS_A,Oe as CMOS_STATUS_B,Re as CMOS_STATUS_C,Le as CMOS_STATUS_D,Xr as CPU,Kr as CPU_LOG_VERBOSE,kt as CR0_PG,xt as CR4_PAE,le as CircularQueue,Bt as DEBUG,Yt as DEBUG_SCREEN_LAYERS,_ as DELIVERY_MODES,d as DESTINATION_MODES,kr as DLAB,ge as DMA,Us as DSP_BUFSIZE,rr as DSP_COMMAND_HANDLERS,sr as DSP_COMMAND_SIZES,Ts as DSP_COPYRIGHT,Gs as DSP_DACSIZE,Ds as DSP_NO_COMMAND,jt as DUMP_GENERATED_WASM,Kt as DUMP_UNCOMPILED_ASSEMBLY,Ui as E8390_CMD,Hr as ELF_MAGIC,Vi as EN0_BOUNDARY,Mi as EN0_CLDAHI,Gi as EN0_CLDALO,rs as EN0_COUNTER0,ns as EN0_COUNTER1,hs as EN0_COUNTER2,Ji as EN0_CRDAHI,Yi as EN0_CRDALO,as as EN0_DCFG,Ki as EN0_FIFO,os as EN0_IMR,Hi as EN0_ISR,Wi as EN0_NCR,ts as EN0_RCNTHI,$i as EN0_RCNTLO,Zi as EN0_RSARHI,Qi as EN0_RSARLO,es as EN0_RSR,is as EN0_RXCR,Si as EN0_STARTPG,Fi as EN0_STOPPG,Xi as EN0_TCNTHI,ji as EN0_TCNTLO,Ni as EN0_TPSR,Bi as EN0_TSR,ss as EN0_TXCR,Qt as ENABLE_HPET,ys as ENISR_ALL,ms as ENISR_COUNTERS,fs as ENISR_OVER,gs as ENISR_RDC,bs as ENISR_RESET,cs as ENISR_RX,ps as ENISR_RX_ERR,us as ENISR_TX,ls as ENISR_TX_ERR,vs as ENRSR_RXOK,rt as FLAGS_DEFAULT,tt as FLAG_AC,N as FLAG_ADJUST,V as FLAG_CARRY,H as FLAG_DIRECTION,st as FLAG_ID,X as FLAG_INTERRUPT,Q as FLAG_IOPL,J as FLAG_NT,Y as FLAG_OVERFLOW,B as FLAG_PARITY,Z as FLAG_RF,j as FLAG_SIGN,K as FLAG_TRAP,et as FLAG_VIF,it as FLAG_VIP,$ as FLAG_VM,W as FLAG_ZERO,hr as FM_HANDLERS,Lt as FW_CFG_CUSTOM_START,Rt as FW_CFG_FILE_DIR,Et as FW_CFG_FILE_START,qt as FW_CFG_ID,zt as FW_CFG_MAX_CPUS,Ct as FW_CFG_NB_CPUS,Ot as FW_CFG_NUMA,It as FW_CFG_RAM_SIZE,At as FW_CFG_SIGNATURE,Pt as FW_CFG_SIGNATURE_QEMU,pe as FloatQueue,si as FloppyController,pi as HD_SECTOR_SIZE,ci as HPET,ri as HPET_ADDR,hi as HPET_COUNTER_CONFIG,_i as HPET_COUNTER_CONFIG_MASK,ni as HPET_FREQ_MS,di as HPET_NUM_COUNTERS,ai as HPET_PERIOD,oi as HPET_SUPPORT_64,li as IDEDevice,fi as IDEInterface,mi as IO,Ei as IOAPIC,bi as IOAPIC_ADDRESS,qi as IOAPIC_CONFIG_DELIVS,Ai as IOAPIC_CONFIG_MASKED,Ci as IOAPIC_CONFIG_READONLY_MASK,Ii as IOAPIC_CONFIG_REMOTE_IRR,xi as IOAPIC_CONFIG_TRIGGER_MODE_LEVEL,zi as IOAPIC_DELIVERY_FIXED,Li as IOAPIC_DELIVERY_INIT,Oi as IOAPIC_DELIVERY_LOWEST_PRIORITY,Ri as IOAPIC_DELIVERY_NMI,ki as IOAPIC_ID,wi as IOAPIC_IRQ_COUNT,yi as IOREGSEL,vi as IOWIN,ca as LINUX_BOOT_HDR_BOOT_FLAG,La as LINUX_BOOT_HDR_CHECKSUM1,Ea as LINUX_BOOT_HDR_CHECKSUM2,Ia as LINUX_BOOT_HDR_CMDLINE_SIZE,va as LINUX_BOOT_HDR_CMD_LINE_PTR,ma as LINUX_BOOT_HDR_CODE32_START,ua as LINUX_BOOT_HDR_HEADER,ya as LINUX_BOOT_HDR_HEAP_END_PTR,wa as LINUX_BOOT_HDR_INITRD_ADDR_MAX,Ra as LINUX_BOOT_HDR_INIT_SIZE,ka as LINUX_BOOT_HDR_KERNEL_ALIGNMENT,fa as LINUX_BOOT_HDR_LOADFLAGS,Ga as LINUX_BOOT_HDR_LOADFLAGS_CAN_USE_HEAPS,Ua as LINUX_BOOT_HDR_LOADFLAGS_KEEP_SEGMENTS,Ta as LINUX_BOOT_HDR_LOADFLAGS_LOADED_HIGH,Da as LINUX_BOOT_HDR_LOADFLAGS_QUIET_FLAG,Aa as LINUX_BOOT_HDR_MIN_ALIGNMENT,za as LINUX_BOOT_HDR_PAYLOAD_LENGTH,Ca as LINUX_BOOT_HDR_PAYLOAD_OFFSET,Oa as LINUX_BOOT_HDR_PREF_ADDRESS,ga as LINUX_BOOT_HDR_RAMDISK_IMAGE,ba as LINUX_BOOT_HDR_RAMDISK_SIZE,xa as LINUX_BOOT_HDR_RELOCATABLE_KERNEL,ha as LINUX_BOOT_HDR_SETUP_SECTS,_a as LINUX_BOOT_HDR_SYSSIZE,la as LINUX_BOOT_HDR_TYPE_OF_LOADER,Pa as LINUX_BOOT_HDR_TYPE_OF_LOADER_NOT_ASSIGNED,pa as LINUX_BOOT_HDR_VERSION,da as LINUX_BOOT_HDR_VIDMODE,qa as LINUX_BOOT_HDR_XLOADFLAGS,S as LOG_9P,T as LOG_ACPI,l as LOG_ALL,Wt as LOG_ALL_IO,D as LOG_APIC,z as LOG_BIOS,g as LOG_CPU,L as LOG_DISK,v as LOG_DMA,O as LOG_FLOPPY,b as LOG_FPU,P as LOG_HPET,w as LOG_IO,Ht as LOG_LEVEL,y as LOG_MEM,I as LOG_MOUSE,F as LOG_NAMES,U as LOG_NET,f as LOG_NONE,m as LOG_OTHER,C as LOG_PCI,x as LOG_PIC,q as LOG_PIT,k as LOG_PS2,E as LOG_RTC,M as LOG_SB16,R as LOG_SERIAL,Nt as LOG_TO_FILE,A as LOG_VGA,G as LOG_VIRTIO,Mr as MAX_BPP,Gr as MAX_XRES,Sr as MAX_YRES,St as MIXER_CHANNEL_BOTH,Ut as MIXER_CHANNEL_LEFT,Gt as MIXER_CHANNEL_RIGHT,ar as MIXER_READ_HANDLERS,or as MIXER_REGISTER_IS_LEGACY,Vt as MIXER_SRC_DAC,Mt as MIXER_SRC_MASTER,Ft as MIXER_SRC_PCSPEAKER,nr as MIXER_WRITE_HANDLERS,vt as MMAP_BLOCK_BITS,wt as MMAP_BLOCK_SIZE,Di as NE2K_LOG_VERBOSE,_s as NE_DATAPORT,ds as NE_RESET,As as Ne2k,Rs as OSCILLATOR_FREQ,Cs as PCI,qs as PCI_CONFIG_ADDRESS,Is as PCI_CONFIG_DATA,Os as PIC,zs as PIC_LOG_VERBOSE,Ls as PIT,t as PMTIMER_FREQ_SECONDS,Ps as PS2,Es as PS2_LOG_VERBOSE,lt as REG_CS,mt as REG_DS,at as REG_EAX,dt as REG_EBP,ht as REG_EBX,nt as REG_ECX,ut as REG_EDI,ot as REG_EDX,pt as REG_ES,ct as REG_ESI,_t as REG_ESP,gt as REG_FS,bt as REG_GS,yt as REG_LDTR,ft as REG_SS,ii as RTC,_r as SB16,Fs as SB_DMA0,Vs as SB_DMA1,Bs as SB_DMA3,Ns as SB_DMA5,Ws as SB_DMA6,js as SB_DMA7,Ms as SB_DMA_BLOCK_SAMPLES,Ss as SB_DMA_BUFSIZE,Xs as SB_DMA_CHANNEL_16BIT,Ks as SB_DMA_CHANNEL_8BIT,Zs as SB_IRQ,Js as SB_IRQ10,Hs as SB_IRQ2,Ys as SB_IRQ5,Qs as SB_IRQ7,tr as SB_IRQ_16BIT,$s as SB_IRQ_8BIT,er as SB_IRQ_MIDI,ir as SB_IRQ_MPU,ws as START_PAGE,ks as START_RX_PAGE,ja as STATE_INDEX_INFO_LEN,Ba as STATE_INDEX_MAGIC,Wa as STATE_INDEX_TOTAL_LEN,Na as STATE_INDEX_VERSION,Ka as STATE_INFO_BLOCK_START,Va as STATE_MAGIC,Fa as STATE_VERSION,xs as STOP_PAGE,ce as SyncBuffer,Jt as TIME_PER_FRAME,Xt as TRACK_FILENAMES,Zt as TSC_RATE,Dr as UART,xr as UART_IER_MSI,qr as UART_IER_RDI,Ar as UART_IER_THRI,Lr as UART_IIR_CTI,Ir as UART_IIR_MSI,Cr as UART_IIR_NO_INT,Or as UART_IIR_RDI,Rr as UART_IIR_RLSI,zr as UART_IIR_THRI,Er as UART_LSR_DATA_READY,Tr as UART_LSR_TRANSMITTER_EMPTY,Pr as UART_LSR_TX_EMPTY,Kn as V86Starter,jr as VGAScreen,Ur as VGA_BANK_SIZE,Wr as VGA_HOST_MEMORY_SPACE_SIZE,Nr as VGA_HOST_MEMORY_SPACE_START,Fr as VGA_LFB_ADDRESS,Br as VGA_MIN_MEMORY_SIZE,Vr as VGA_PIXEL_BUFFER_SIZE,mn as VIRTIO_F_RING_EVENT_IDX,fn as VIRTIO_F_RING_INDIRECT_DESC,gn as VIRTIO_F_VERSION_1,ln as VIRTIO_ISR_DEVICE_CFG,pn as VIRTIO_ISR_QUEUE,en as VIRTIO_PCI_CAP_COMMON_CFG,an as VIRTIO_PCI_CAP_DEVICE_CFG,rn as VIRTIO_PCI_CAP_ISR_CFG,tn as VIRTIO_PCI_CAP_LENGTH,sn as VIRTIO_PCI_CAP_NOTIFY_CFG,nn as VIRTIO_PCI_CAP_PCI_CFG,$a as VIRTIO_PCI_CAP_VENDOR,Za as VIRTIO_PCI_VENDOR_ID,on as VIRTIO_STATUS_ACKNOWLEDGE,cn as VIRTIO_STATUS_DEVICE_NEEDS_RESET,hn as VIRTIO_STATUS_DRIVER,_n as VIRTIO_STATUS_DRIVER_OK,un as VIRTIO_STATUS_FAILED,dn as VIRTIO_STATUS_FEATURES_OK,yn as VIRTQ_AVAIL_BASESIZE,vn as VIRTQ_AVAIL_ENTRYSIZE,Cn as VIRTQ_AVAIL_F_NO_INTERRUPT,bn as VIRTQ_DESC_ENTRYSIZE,In as VIRTQ_DESC_F_INDIRECT,An as VIRTQ_DESC_F_NEXT,qn as VIRTQ_DESC_F_WRITE,xn as VIRTQ_IDX_MASK,wn as VIRTQ_USED_BASESIZE,kn as VIRTQ_USED_ENTRYSIZE,zn as VIRTQ_USED_F_NO_NOTIFY,On as VirtIO,Dt as WASM_TABLE_OFFSET,Tt as WASM_TABLE_SIZE,Xa as ZSTD_MAGIC,ne as dbg_assert,oe as dbg_assert_failed,re as dbg_log,ae as dbg_trace,me as download,fe as dump_file,de as h,Sa as load_kernel,ra as read_elf,Pi as v86,_e as v86util};
|
|
1
|
+
var t=3579545;function e(t){this.cpu=t;var e=t.io;t.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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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_last_value=0,this.timer_imprecision_offset=0,this.status=1,this.pm1_status=0,this.pm1_enable=0,this.last_timer=this.get_timer(v86.microtick()),this.gpe=new Uint8Array(4),e.register_read(45056,this,void 0,(function(){return dbg_log("ACPI pm1_status read",LOG_ACPI),this.pm1_status})),e.register_write(45056,this,void 0,(function(t){dbg_log("ACPI pm1_status write: "+h(t,4),LOG_ACPI),this.pm1_status&=~t})),e.register_read(45058,this,void 0,(function(){return dbg_log("ACPI pm1_enable read",LOG_ACPI),this.pm1_enable})),e.register_write(45058,this,void 0,(function(t){dbg_log("ACPI pm1_enable write: "+h(t),LOG_ACPI),this.pm1_enable=t})),e.register_read(45060,this,void 0,(function(){return dbg_log("ACPI status read",LOG_ACPI),this.status})),e.register_write(45060,this,void 0,(function(t){dbg_log("ACPI status write: "+h(t),LOG_ACPI),this.status=t})),e.register_read(45064,this,void 0,void 0,(function(){return 16777215&this.get_timer(v86.microtick())})),e.register_read(45024,this,(function(){return dbg_log("Read gpe#0",LOG_ACPI),this.gpe[0]})),e.register_read(45025,this,(function(){return dbg_log("Read gpe#1",LOG_ACPI),this.gpe[1]})),e.register_read(45026,this,(function(){return dbg_log("Read gpe#2",LOG_ACPI),this.gpe[2]})),e.register_read(45027,this,(function(){return dbg_log("Read gpe#3",LOG_ACPI),this.gpe[3]})),e.register_write(45024,this,(function(t){dbg_log("Write gpe#0: "+h(t),LOG_ACPI),this.gpe[0]=t})),e.register_write(45025,this,(function(t){dbg_log("Write gpe#1: "+h(t),LOG_ACPI),this.gpe[1]=t})),e.register_write(45026,this,(function(t){dbg_log("Write gpe#2: "+h(t),LOG_ACPI),this.gpe[2]=t})),e.register_write(45027,this,(function(t){dbg_log("Write gpe#3: "+h(t),LOG_ACPI),this.gpe[3]=t}))}e.prototype.timer=function(t){var e=this.get_timer(t),i=0!=((e^this.last_timer)&1<<23);return 1&this.pm1_enable&&i?(dbg_log("ACPI raise irq",LOG_ACPI),this.pm1_status|=1,this.cpu.device_raise_irq(9)):this.cpu.device_lower_irq(9),this.last_timer=e,100},e.prototype.get_timer=function(t){const e=Math.round(3579.545*t);if(e===this.timer_last_value)this.timer_imprecision_offset<3579.545&&this.timer_imprecision_offset++;else{dbg_assert(e>this.timer_last_value);this.timer_last_value+this.timer_imprecision_offset<=e?(this.timer_imprecision_offset=0,this.timer_last_value=e):dbg_log("Warning: Overshot pmtimer, waiting; current="+e+" last="+this.timer_last_value+" offset="+this.timer_imprecision_offset,LOG_ACPI)}return this.timer_last_value+this.timer_imprecision_offset},e.prototype.get_state=function(){var t=[];return t[0]=this.status,t[1]=this.pm1_status,t[2]=this.pm1_enable,t[3]=this.gpe,t},e.prototype.set_state=function(t){this.status=t[0],this.pm1_status=t[1],this.pm1_enable=t[2],this.gpe=t[3]};var i=!1,s=4276092928,r=3<<17,a=0,n=1<<17,o=2<<17,_=["Fixed (0)","Lowest Prio (1)","SMI (2)","Reserved (3)","NMI (4)","INIT (5)","Reserved (6)","ExtINT (7)"],d=["physical","logical"];function c(t){this.cpu=t,this.apic_id=0,this.timer_divider=0,this.timer_divider_shift=1,this.timer_initial_count=0,this.timer_current_count=0,this.next_tick=v86.microtick(),this.lvt_timer=IOAPIC_CONFIG_MASKED,this.lvt_perf_counter=IOAPIC_CONFIG_MASKED,this.lvt_int0=IOAPIC_CONFIG_MASKED,this.lvt_int1=IOAPIC_CONFIG_MASKED,this.lvt_error=IOAPIC_CONFIG_MASKED,this.tpr=0,this.icr0=0,this.icr1=0,this.irr=new Int32Array(8),this.isr=new Int32Array(8),this.tmr=new Int32Array(8),this.spurious_vector=254,this.destination_format=-1,this.local_destination=0,this.error=0,this.read_error=0,t.io.mmap_register(4276092928,1048576,(t=>{dbg_log("Unsupported read8 from apic: "+h(t>>>0),LOG_APIC);var e=3&t;return t&=-4,this.read32(t)>>8*e&255}),((t,e)=>{dbg_log("Unsupported write8 from apic: "+h(t)+" <- "+h(e),LOG_APIC),dbg_trace(),dbg_assert(!1)}),(t=>this.read32(t)),((t,e)=>this.write32(t,e)))}c.prototype.read32=function(t){switch(t=t-4276092928|0){case 32:return dbg_log("APIC read id",LOG_APIC),this.apic_id;case 48:return dbg_log("APIC read version",LOG_APIC),327700;case 128:return this.tpr;case 208:return dbg_log("Read local destination",LOG_APIC),this.local_destination;case 224:return dbg_log("Read destination format",LOG_APIC),this.destination_format;case 240:return this.spurious_vector;case 256:case 272:case 288:case 304:case 320:case 336:case 352:case 368:var e=t-256>>4;return dbg_log("Read isr "+e+": "+h(this.isr[e]>>>0,8),LOG_APIC),this.isr[e];case 384:case 400:case 416:case 432:case 448:case 464:case 480:case 496:e=t-384>>4;return dbg_log("Read tmr "+e+": "+h(this.tmr[e]>>>0,8),LOG_APIC),this.tmr[e];case 512:case 528:case 544:case 560:case 576:case 592:case 608:case 624:e=t-512>>4;return dbg_log("Read irr "+e+": "+h(this.irr[e]>>>0,8),LOG_APIC),this.irr[e];case 640:return dbg_log("Read error: "+h(this.read_error>>>0,8),LOG_APIC),this.read_error;case 768:return this.icr0;case 784:return dbg_log("APIC read icr1",LOG_APIC),this.icr1;case 800:return dbg_log("read timer lvt",LOG_APIC),this.lvt_timer;case 832:return dbg_log("read lvt perf counter",LOG_APIC),this.lvt_perf_counter;case 848:return dbg_log("read lvt int0",LOG_APIC),this.lvt_int0;case 864:return dbg_log("read lvt int1",LOG_APIC),this.lvt_int1;case 880:return dbg_log("read lvt error",LOG_APIC),this.lvt_error;case 992:return dbg_log("read timer divider",LOG_APIC),this.timer_divider;case 896:return dbg_log("read timer initial count",LOG_APIC),this.timer_initial_count;case 912:return dbg_log("read timer current count: "+h(this.timer_current_count>>>0,8),LOG_APIC),this.timer_current_count;default:return dbg_log("APIC read "+h(t),LOG_APIC),dbg_assert(!1),0}},c.prototype.write32=function(t,e){switch(t=t-4276092928|0){case 48:dbg_log("APIC write version: "+h(e>>>0,8)+", ignored",LOG_APIC);break;case 128:this.tpr=255&e,this.check_vector();break;case 176:var i=this.highest_isr();-1!==i?(this.register_clear_bit(this.isr,i),this.register_get_bit(this.tmr,i)&&this.cpu.devices.ioapic.remote_eoi(i),this.check_vector()):dbg_log("Bad eoi: No isr set",LOG_APIC);break;case 208:dbg_log("Set local destination: "+h(e>>>0,8),LOG_APIC),this.local_destination=4278190080&e;break;case 224:dbg_log("Set destination format: "+h(e>>>0,8),LOG_APIC),this.destination_format=16777215|e;break;case 240:dbg_log("Set spurious vector: "+h(e>>>0,8),LOG_APIC),this.spurious_vector=e;break;case 640:dbg_log("Write error: "+h(e>>>0,8),LOG_APIC),this.read_error=this.error,this.error=0;break;case 768:var s=255&e,r=e>>8&7,a=e>>11&1,n=e>>15&1,o=e>>18&3,c=this.icr1>>>24;dbg_log("APIC write icr0: "+h(e,8)+" vector="+h(s,2)+" destination_mode="+d[a]+" delivery_mode="+_[r]+" destination_shorthand="+["no","self","all with self","all without self"][o],LOG_APIC),e&=-4097,this.icr0=e,0===o?this.route(s,r,n,c,a):1===o?this.deliver(s,IOAPIC_DELIVERY_FIXED,n):2===o?this.deliver(s,r,n):3===o||dbg_assert(!1);break;case 784:dbg_log("APIC write icr1: "+h(e>>>0,8),LOG_APIC),this.icr1=e;break;case 800:dbg_log("timer lvt: "+h(e>>>0,8),LOG_APIC),this.lvt_timer=e;break;case 832:dbg_log("lvt perf counter: "+h(e>>>0,8),LOG_APIC),this.lvt_perf_counter=e;break;case 848:dbg_log("lvt int0: "+h(e>>>0,8),LOG_APIC),this.lvt_int0=e;break;case 864:dbg_log("lvt int1: "+h(e>>>0,8),LOG_APIC),this.lvt_int1=e;break;case 880:dbg_log("lvt error: "+h(e>>>0,8),LOG_APIC),this.lvt_error=e;break;case 992:dbg_log("timer divider: "+h(e>>>0,8),LOG_APIC),this.timer_divider=e;var u=3&e|(8&e)>>1;this.timer_divider_shift=7===u?0:u+1;break;case 896:dbg_log("timer initial: "+h(e>>>0,8),LOG_APIC),this.timer_initial_count=e>>>0,this.timer_current_count=e>>>0,this.next_tick=v86.microtick(),this.timer_active=!0;break;case 912:dbg_log("timer current: "+h(e>>>0,8),LOG_APIC),dbg_assert(!1,"read-only register");break;default:dbg_log("APIC write32 "+h(t)+" <- "+h(e>>>0,8),LOG_APIC),dbg_assert(!1)}},c.prototype.timer=function(t){if(0===this.timer_current_count)return 100;const e=APIC_TIMER_FREQ/(1<<this.timer_divider_shift),i=(t-this.next_tick)*e>>>0;if(this.next_tick+=i/e,this.timer_current_count-=i,this.timer_current_count<=0){var s=393216&this.lvt_timer;131072===s?(this.timer_current_count=this.timer_current_count%this.timer_initial_count,this.timer_current_count<=0&&(this.timer_current_count+=this.timer_initial_count),dbg_assert(0!==this.timer_current_count),0==(this.lvt_timer&IOAPIC_CONFIG_MASKED)&&this.deliver(255&this.lvt_timer,IOAPIC_DELIVERY_FIXED,!1)):0===s&&(this.timer_current_count=0,dbg_log("APIC timer one shot end",LOG_APIC),0==(this.lvt_timer&IOAPIC_CONFIG_MASKED)&&this.deliver(255&this.lvt_timer,IOAPIC_DELIVERY_FIXED,!1))}return Math.max(0,this.timer_current_count/e)},c.prototype.route=function(t,e,i,s,r){this.deliver(t,e,i)},c.prototype.deliver=function(t,e,i){e!==IOAPIC_DELIVERY_INIT&&e!==IOAPIC_DELIVERY_NMI&&((t<16||255===t)&&dbg_assert(!1,"TODO: Invalid vector"),this.register_get_bit(this.irr,t)?dbg_log("Not delivered: irr already set, vector="+h(t,2),LOG_APIC):(this.register_set_bit(this.irr,t),i?this.register_set_bit(this.tmr,t):this.register_clear_bit(this.tmr,t),this.check_vector()))},c.prototype.highest_irr=function(){var t=this.register_get_highest_bit(this.irr);return dbg_assert(255!==t),dbg_assert(t>=16||-1===t),t},c.prototype.highest_isr=function(){var t=this.register_get_highest_bit(this.isr);return dbg_assert(255!==t),dbg_assert(t>=16||-1===t),t},c.prototype.check_vector=function(){var t=this.highest_irr();-1!==t&&(this.highest_isr()>=t||(240&t)<=(240&this.tpr)||this.cpu.handle_irqs())},c.prototype.acknowledge_irq=function(){var t=this.highest_irr();-1!==t&&(this.highest_isr()>=t||(240&t)<=(240&this.tpr)||(this.register_clear_bit(this.irr,t),this.register_set_bit(this.isr,t),this.cpu.pic_call_irq(t),this.check_vector()))},c.prototype.get_state=function(){var t=[];return t[0]=this.apic_id,t[1]=this.timer_divider,t[2]=this.timer_divider_shift,t[3]=this.timer_initial_count,t[4]=this.timer_current_count,t[5]=this.next_tick,t[6]=this.lvt_timer,t[7]=this.lvt_perf_counter,t[8]=this.lvt_int0,t[9]=this.lvt_int1,t[10]=this.lvt_error,t[11]=this.tpr,t[12]=this.icr0,t[13]=this.icr1,t[14]=this.irr,t[15]=this.isr,t[16]=this.tmr,t[17]=this.spurious_vector,t[18]=this.destination_format,t[19]=this.local_destination,t[20]=this.error,t[21]=this.read_error,t},c.prototype.set_state=function(t){this.apic_id=t[0],this.timer_divider=t[1],this.timer_divider_shift=t[2],this.timer_initial_count=t[3],this.timer_current_count=t[4],this.next_tick=t[5],this.lvt_timer=t[6],this.lvt_perf_counter=t[7],this.lvt_int0=t[8],this.lvt_int1=t[9],this.lvt_error=t[10],this.tpr=t[11],this.icr0=t[12],this.icr1=t[13],this.irr=t[14],this.isr=t[15],this.tmr=t[16],this.spurious_vector=t[17],this.destination_format=t[18],this.local_destination=t[19],this.error=t[20],this.read_error=t[21]},c.prototype.register_get_bit=function(t,e){return dbg_assert(e>=0&&e<256),t[e>>5]>>(31&e)&1},c.prototype.register_set_bit=function(t,e){dbg_assert(e>=0&&e<256),t[e>>5]|=1<<(31&e)},c.prototype.register_clear_bit=function(t,e){dbg_assert(e>=0&&e<256),t[e>>5]&=~(1<<(31&e))},c.prototype.register_get_highest_bit=function(t){for(var e=7;e>=0;e--){var i=t[e];if(i)return v86util.int_log2(i>>>0)|e<<5}return-1};var u={};function p(){this.listeners={},this.pair=void 0}p.prototype.register=function(t,e,i){var s=this.listeners[t];void 0===s&&(s=this.listeners[t]=[]),s.push({fn:e,this_value:i})},p.prototype.unregister=function(t,e){var i=this.listeners[t];void 0!==i&&(this.listeners[t]=i.filter((function(t){return t.fn!==e})))},p.prototype.send=function(t,e,i){if(this.pair){var s=this.pair.listeners[t];if(void 0!==s)for(var r=0;r<s.length;r++){var a=s[r];a.fn.call(a.this_value,e)}}},p.prototype.send_async=function(t,e){dbg_assert(1===arguments.length||2===arguments.length),setTimeout(this.send.bind(this,t,e),0)},u.create=function(){var t=new p,e=new p;return t.pair=e,e.pair=t,[t,e]};var l=-1,f=0,m=1,g=2,b=4,y=8,v=16,w=32,k=64,x=128,A=256,q=512,I=1024,C=2048,z=4096,O=8192,R=16384,L=32768,E=65536,P=131072,T=262144,D=524288,U=1048576,G=2097152,S=4194304,M=8388608,F=[[1,""],[2,"CPU"],[32768,"DISK"],[4,"FPU"],[8,"MEM"],[16,"DMA"],[32,"IO"],[64,"PS2"],[128,"PIC"],[256,"VGA"],[512,"PIT"],[1024,"MOUS"],[2048,"PCI"],[4096,"BIOS"],[8192,"FLOP"],[16384,"SERI"],[65536,"RTC"],[131072,"HPET"],[262144,"ACPI"],[524288,"APIC"],[1048576,"NET"],[2097152,"VIO"],[4194304,"9P"],[8388608,"SB16"]],V=1,B=4,N=16,W=64,j=128,K=256,X=512,H=1024,Y=2048,Q=12288,J=16384,Z=65536,$=1<<17,tt=1<<18,et=1<<19,it=1<<20,st=1<<21,rt=2,at=0,nt=1,ot=2,ht=3,_t=4,dt=5,ct=6,ut=7,pt=0,lt=1,ft=2,mt=3,gt=4,bt=5,yt=7,vt=17,wt=1<<17,kt=1<<31,xt=32,At=0,qt=1,It=3,Ct=5,zt=15,Ot=13,Rt=25,Lt=32768,Et=49152,Pt=1431127377,Tt=900,Dt=1024,Ut=0,Gt=1,St=2,Mt=0,Ft=1,Vt=2,Bt=!0,Nt=!1,Wt=!1,jt=!1,Kt=!1,Xt=!1,Ht=-15786961,Yt=!1,Qt=!1,Jt=1,Zt=1e6,$t=1e6;function te(t){console.log(t)}var ee,ie,se,re=(ee=F.reduce((function(t,e){return t[e[0]]=e[1],t}),{}),ie="",se=0,function(t,e){if(-15786961&(e=e||1)){var i=ee[e]||"",s="["+_e.pads(i,4)+"] "+t;if(s===ie&&++se<2048)return;var r=new Date,a=_e.pad0(r.getHours(),2)+":"+_e.pad0(r.getMinutes(),2)+":"+_e.pad0(r.getSeconds(),2)+"+"+_e.pad0(r.getMilliseconds(),3)+" ";se&&(te(1===se?a+ie:"Previous message repeated "+se+" times"),se=0),te(a+s),ie=s}});function ae(t){re(Error().stack,t)}function ne(t,e,i){t||oe(e)}function oe(t){throw console.trace(),t?"Assert failed: "+t:"Assert failed"}var he=he||{};he.exportSymbol=function(){},he.exportProperty=function(){};var _e=_e||{};function de(t,e){if(t)i=t.toString(16);else var i="";return"0x"+_e.pad0(i.toUpperCase(),e||1)}if(_e.pads=function(t,e){return(t=t||0===t?t+"":"").padEnd(e," ")},_e.pad0=function(t,e){return(t=t||0===t?t+"":"").padStart(e,"0")},_e.zeros=function(t){return Array(t).fill(0)},_e.range=function(t){return Array.from(Array(t).keys())},_e.view=function(t,e,i,s){return new Proxy({},{get:function(r,a,n){const o=new t(e.buffer,i,s),h=o[a];return"function"==typeof h?h.bind(o):(ne(/^\d+$/.test(a)||"buffer"===a||"length"===a||"BYTES_PER_ELEMENT"===a||"byteOffset"===a),h)},set:function(r,a,n,o){return ne(/^\d+$/.test(a)),new t(e.buffer,i,s)[a]=n,!0}})},"undefined"!=typeof crypto&&crypto.getRandomValues){let t=new Int32Array(1);_e.get_rand_int=function(){return crypto.getRandomValues(t),t[0]}}else ne(!1,"Unsupported platform: No cryptographic random values");function ce(t){ne(t instanceof ArrayBuffer),this.buffer=t,this.byteLength=t.byteLength,this.onload=void 0,this.onprogress=void 0}function ue(t){var e,i,s=new Uint8Array(t);ne(0==(t&t-1)),this.length=0,this.push=function(e){this.length===t||this.length++,s[i]=e,i=i+1&t-1},this.shift=function(){if(this.length){var i=s[e];return e=e+1&t-1,this.length--,i}return-1},this.peek=function(){return this.length?s[e]:-1},this.clear=function(){e=0,i=0,this.length=0},this.clear()}function pe(t){this.size=t,this.data=new Float32Array(t),this.start=0,this.end=0,this.length=0,ne(0==(t&t-1))}function le(t){this.data=[],this.index=0,this.size=t}function fe(t,e){t instanceof Array||(t=[t]),me(new Blob(t),e)}function me(t,e){var i=document.createElement("a");if(i.download=e,i.href=window.URL.createObjectURL(t),i.dataset.downloadurl=["application/octet-stream",i.download,i.href].join(":"),document.createEvent){var s=document.createEvent("MouseEvent");s.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),i.dispatchEvent(s)}else i.click();window.URL.revokeObjectURL(i.href)}function ge(t){this.cpu=t,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),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;var e=t.io;e.register_write(0,this,this.port_addr_write.bind(this,0)),e.register_write(2,this,this.port_addr_write.bind(this,1)),e.register_write(4,this,this.port_addr_write.bind(this,2)),e.register_write(6,this,this.port_addr_write.bind(this,3)),e.register_write(1,this,this.port_count_write.bind(this,0)),e.register_write(3,this,this.port_count_write.bind(this,1)),e.register_write(5,this,this.port_count_write.bind(this,2)),e.register_write(7,this,this.port_count_write.bind(this,3)),e.register_read(0,this,this.port_addr_read.bind(this,0)),e.register_read(2,this,this.port_addr_read.bind(this,1)),e.register_read(4,this,this.port_addr_read.bind(this,2)),e.register_read(6,this,this.port_addr_read.bind(this,3)),e.register_read(1,this,this.port_count_read.bind(this,0)),e.register_read(3,this,this.port_count_read.bind(this,1)),e.register_read(5,this,this.port_count_read.bind(this,2)),e.register_read(7,this,this.port_count_read.bind(this,3)),e.register_write(192,this,this.port_addr_write.bind(this,4)),e.register_write(196,this,this.port_addr_write.bind(this,5)),e.register_write(200,this,this.port_addr_write.bind(this,6)),e.register_write(204,this,this.port_addr_write.bind(this,7)),e.register_write(194,this,this.port_count_write.bind(this,4)),e.register_write(198,this,this.port_count_write.bind(this,5)),e.register_write(202,this,this.port_count_write.bind(this,6)),e.register_write(206,this,this.port_count_write.bind(this,7)),e.register_read(192,this,this.port_addr_read.bind(this,4)),e.register_read(196,this,this.port_addr_read.bind(this,5)),e.register_read(200,this,this.port_addr_read.bind(this,6)),e.register_read(204,this,this.port_addr_read.bind(this,7)),e.register_read(194,this,this.port_count_read.bind(this,4)),e.register_read(198,this,this.port_count_read.bind(this,5)),e.register_read(202,this,this.port_count_read.bind(this,6)),e.register_read(206,this,this.port_count_read.bind(this,7)),e.register_write(135,this,this.port_page_write.bind(this,0)),e.register_write(131,this,this.port_page_write.bind(this,1)),e.register_write(129,this,this.port_page_write.bind(this,2)),e.register_write(130,this,this.port_page_write.bind(this,3)),e.register_write(143,this,this.port_page_write.bind(this,4)),e.register_write(139,this,this.port_page_write.bind(this,5)),e.register_write(137,this,this.port_page_write.bind(this,6)),e.register_write(138,this,this.port_page_write.bind(this,7)),e.register_read(135,this,this.port_page_read.bind(this,0)),e.register_read(131,this,this.port_page_read.bind(this,1)),e.register_read(129,this,this.port_page_read.bind(this,2)),e.register_read(130,this,this.port_page_read.bind(this,3)),e.register_read(143,this,this.port_page_read.bind(this,4)),e.register_read(139,this,this.port_page_read.bind(this,5)),e.register_read(137,this,this.port_page_read.bind(this,6)),e.register_read(138,this,this.port_page_read.bind(this,7)),e.register_write(1159,this,this.port_pagehi_write.bind(this,0)),e.register_write(1155,this,this.port_pagehi_write.bind(this,1)),e.register_write(1153,this,this.port_pagehi_write.bind(this,2)),e.register_write(1154,this,this.port_pagehi_write.bind(this,3)),e.register_write(1163,this,this.port_pagehi_write.bind(this,5)),e.register_write(1161,this,this.port_pagehi_write.bind(this,6)),e.register_write(1162,this,this.port_pagehi_write.bind(this,7)),e.register_read(1159,this,this.port_pagehi_read.bind(this,0)),e.register_read(1155,this,this.port_pagehi_read.bind(this,1)),e.register_read(1153,this,this.port_pagehi_read.bind(this,2)),e.register_read(1154,this,this.port_pagehi_read.bind(this,3)),e.register_read(1163,this,this.port_pagehi_read.bind(this,5)),e.register_read(1161,this,this.port_pagehi_read.bind(this,6)),e.register_read(1162,this,this.port_pagehi_read.bind(this,7)),e.register_write(10,this,this.port_singlemask_write.bind(this,0)),e.register_write(212,this,this.port_singlemask_write.bind(this,4)),e.register_write(15,this,this.port_multimask_write.bind(this,0)),e.register_write(222,this,this.port_multimask_write.bind(this,4)),e.register_read(15,this,this.port_multimask_read.bind(this,0)),e.register_read(222,this,this.port_multimask_read.bind(this,4)),e.register_write(11,this,this.port_mode_write.bind(this,0)),e.register_write(214,this,this.port_mode_write.bind(this,4)),e.register_write(12,this,this.portC_write),e.register_write(216,this,this.portC_write)}ce.prototype.load=function(){this.onload&&this.onload({buffer:this.buffer})},ce.prototype.get=function(t,e,i){ne(t+e<=this.byteLength),i(new Uint8Array(this.buffer,t,e))},ce.prototype.set=function(t,e,i){ne(t+e.byteLength<=this.byteLength),new Uint8Array(this.buffer,t,e.byteLength).set(e),i()},ce.prototype.get_buffer=function(t){t(this.buffer)},ce.prototype.get_state=function(){const t=[];return t[0]=this.byteLength,t[1]=new Uint8Array(this.buffer),t},ce.prototype.set_state=function(t){this.byteLength=t[0],this.buffer=t[1].slice().buffer},function(){if("function"==typeof Math.clz32&&32===Math.clz32(0)&&15===Math.clz32(74565)&&0===Math.clz32(-1))return _e.int_log2_byte=function(t){return ne(t>0),ne(t<256),31-Math.clz32(t)},void(_e.int_log2=function(t){return ne(t>0),31-Math.clz32(t)});for(var t=new Int8Array(256),e=0,i=-2;e<256;e++)e&e-1||i++,t[e]=i;_e.int_log2_byte=function(e){return ne(e>0),ne(e<256),t[e]},_e.int_log2=function(e){ne((e>>>=0)>0);var i,s=e>>>16;return s?(i=s>>>8)?24+t[i]:16+t[s]:(i=e>>>8)?8+t[i]:t[e]}}(),pe.prototype.push=function(t){this.length===this.size?this.start=this.start+1&this.size-1:this.length++,this.data[this.end]=t,this.end=this.end+1&this.size-1},pe.prototype.shift=function(){if(this.length){var t=this.data[this.start];return this.start=this.start+1&this.size-1,this.length--,t}},pe.prototype.shift_block=function(t){var e=new Float32Array(t);t>this.length&&(t=this.length);var i=this.start+t,s=this.data.subarray(this.start,i);return e.set(s),i>=this.size&&(i-=this.size,e.set(this.data.subarray(0,i),s.length)),this.start=i,this.length-=t,e},pe.prototype.peek=function(){return this.length?this.data[this.start]:void 0},pe.prototype.clear=function(){this.start=0,this.end=0,this.length=0},le.prototype.add=function(t){this.data[this.index]=t,this.index=(this.index+1)%this.size},le.prototype.toArray=function(){return[].slice.call(this.data,this.index).concat([].slice.call(this.data,0,this.index))},le.prototype.clear=function(){this.data=[],this.index=0},le.prototype.set=function(t){this.data=t,this.index=0},_e.Bitmap=function(t){"number"==typeof t?this.view=new Uint8Array(t+7>>3):t instanceof ArrayBuffer?this.view=new Uint8Array(t):console.assert(!1)},_e.Bitmap.prototype.set=function(t,e){const i=t>>3,s=1<<(7&t);this.view[i]=e?this.view[i]|s:this.view[i]&~s},_e.Bitmap.prototype.get=function(t){const e=7&t,i=t>>3;return this.view[i]>>e&1},_e.Bitmap.prototype.get_buffer=function(){return this.view.buffer},ge.prototype.get_state=function(){return[this.channel_page,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]},ge.prototype.set_state=function(t){this.channel_page=t[0],this.channel_pagehi=t[1],this.channel_addr=t[2],this.channel_addr_init=t[3],this.channel_count=t[4],this.channel_count_init=t[5],this.channel_mask=t[6],this.channel_mode=t[7],this.lsb_msb_flipflop=t[8]},ge.prototype.port_count_write=function(t,e){re("count write ["+t+"] = "+de(e),16),this.channel_count[t]=this.flipflop_get(this.channel_count[t],e,!1),this.channel_count_init[t]=this.flipflop_get(this.channel_count_init[t],e,!0)},ge.prototype.port_count_read=function(t){return re("count read ["+t+"] -> "+de(this.channel_count[t]),16),this.flipflop_read(this.channel_count[t])},ge.prototype.port_addr_write=function(t,e){re("addr write ["+t+"] = "+de(e),16),this.channel_addr[t]=this.flipflop_get(this.channel_addr[t],e,!1),this.channel_addr_init[t]=this.flipflop_get(this.channel_addr_init[t],e,!0)},ge.prototype.port_addr_read=function(t){return re("addr read ["+t+"] -> "+de(this.channel_addr[t]),16),this.flipflop_read(this.channel_addr[t])},ge.prototype.port_pagehi_write=function(t,e){re("pagehi write ["+t+"] = "+de(e),16),this.channel_pagehi[t]=e},ge.prototype.port_pagehi_read=function(t){return re("pagehi read ["+t+"]",16),this.channel_pagehi[t]},ge.prototype.port_page_write=function(t,e){re("page write ["+t+"] = "+de(e),16),this.channel_page[t]=e},ge.prototype.port_page_read=function(t){return re("page read ["+t+"]",16),this.channel_page[t]},ge.prototype.port_singlemask_write=function(t,e){var i=(3&e)+t,s=4&e?1:0;re("singlechannel mask write ["+i+"] = "+s,16),this.update_mask(i,s)},ge.prototype.port_multimask_write=function(t,e){re("multichannel mask write: "+de(e),16);for(var i=0;i<4;i++)this.update_mask(t+i,e&1<<i)},ge.prototype.port_multimask_read=function(t){var e=0;return e|=this.channel_mask[t+0],e|=this.channel_mask[t+1]<<1,e|=this.channel_mask[t+2]<<2,e|=this.channel_mask[t+3]<<3,re("multichannel mask read: "+de(e),16),e},ge.prototype.port_mode_write=function(t,e){var i=(3&e)+t;re("mode write ["+i+"] = "+de(e),16),this.channel_mode[i]=e},ge.prototype.portC_write=function(t){re("flipflop reset",16),this.lsb_msb_flipflop=0},ge.prototype.on_unmask=function(t,e){this.unmask_listeners.push({fn:t,this_value:e})},ge.prototype.update_mask=function(t,e){if(this.channel_mask[t]!==e&&(this.channel_mask[t]=e,!e)){re("firing on_unmask("+t+")",16);for(var i=0;i<this.unmask_listeners.length;i++)this.unmask_listeners[i].fn.call(this.unmask_listeners[i].this_value,t)}},ge.prototype.do_read=function(t,e,i,s,r){var a=this.count_get_8bit(s),n=this.address_get_8bit(s);if(re("DMA write channel "+s,16),re("to "+de(n)+" len "+de(a),16),i<a&&re("DMA should read more than provided: "+de(i)+" "+de(a),16),e+a>t.byteLength)re("DMA read outside of buffer",16),r(!0);else{var o=this.cpu;this.channel_addr[s]+=a,t.get(e,a,(function(t){o.write_blob(t,n),r(!1)}))}},ge.prototype.do_write=function(t,e,i,s,r){var a=this.channel_count[s]+1&65535,n=s>=5?2:1,o=a*n,h=this.address_get_8bit(s),_=!1,d=!1,c=16&this.channel_mode[s];re("DMA write channel "+s,16),re("to "+de(h)+" len "+de(o),16),i<o?(re("DMA should read more than provided",16),a=Math.floor(i/n),o=a*n,_=!0):i>o&&(re("DMA attempted to read more than provided",16),d=!0),e+o>t.byteLength?(re("DMA write outside of buffer",16),r(!0)):(this.channel_addr[s]+=a,this.channel_count[s]-=a,!_&&c&&(re("DMA autoinit",16),this.channel_addr[s]=this.channel_addr_init[s],this.channel_count[s]=this.channel_count_init[s]),t.set(e,this.cpu.mem8.subarray(h,h+o),(()=>{d&&c?(re("DMA continuing from start",16),this.do_write(t,e+o,i-o,s,r)):r(!1)})))},ge.prototype.address_get_8bit=function(t){var e=this.channel_addr[t];return t>=5&&(e<<=1),e&=65535,e|=this.channel_page[t]<<16,e|=this.channel_pagehi[t]<<24},ge.prototype.count_get_8bit=function(t){var e=this.channel_count[t]+1;return t>=5&&(e*=2),e},ge.prototype.flipflop_get=function(t,e,i){return i||(this.lsb_msb_flipflop^=1),this.lsb_msb_flipflop?-256&t|e:-65281&t|e<<8},ge.prototype.flipflop_read=function(t){return this.lsb_msb_flipflop^=1,this.lsb_msb_flipflop?255&t:t>>8&255};var be=0,ye=1,ve=2,we=3,ke=4,xe=5,Ae=6,qe=7,Ie=8,Ce=9,ze=10,Oe=11,Re=12,Le=13,Ee=15,Pe=16,Te=18,De=20,Ue=21,Ge=22,Se=23,Me=24,Fe=25,Ve=26,Be=27,Ne=36,We=48,je=49,Ke=50,Xe=52,He=53,Ye=56,Qe=57,Je=61,Ze=91,$e=92,ti=93,ei=95;function ii(t){this.cpu=t,this.cmos_index=0,this.cmos_data=new Uint8Array(128),this.rtc_time=Date.now(),this.last_update=this.rtc_time,this.next_interrupt=0,this.next_interrupt_alarm=0,this.periodic_interrupt=!1,this.periodic_interrupt_time=.9765625,this.cmos_a=38,this.cmos_b=2,this.cmos_c=0,this.nmi_disabled=0,t.io.register_write(112,this,(function(t){this.cmos_index=127&t,this.nmi_disabled=t>>7})),t.io.register_write(113,this,this.cmos_port_write),t.io.register_read(113,this,this.cmos_port_read)}function si(t,e,i){if(this.io=t.io,this.cpu=t,this.dma=t.devices.dma,this.bytes_expecting=0,this.receiving_command=new Uint8Array(10),this.receiving_index=0,this.next_command=null,this.response_data=new Uint8Array(10),this.response_index=0,this.response_length=0,this.fda_image=e,this.fdb_image=i,this.status_reg0=0,this.status_reg1=0,this.status_reg2=0,this.drive=0,this.last_cylinder=0,this.last_head=0,this.last_sector=1,this.dor=0,e){var s={163840:{type:1,tracks:40,sectors:8,heads:1},184320:{type:1,tracks:40,sectors:9,heads:1},204800:{type:1,tracks:40,sectors:10,heads:1},327680:{type:1,tracks:40,sectors:8,heads:2},368640:{type:1,tracks:40,sectors:9,heads:2},409600:{type:1,tracks:40,sectors:10,heads:2},737280:{type:3,tracks:80,sectors:9,heads:2},1228800:{type:2,tracks:80,sectors:15,heads:2},1474560:{type:4,tracks:80,sectors:18,heads:2},1763328:{type:5,tracks:82,sectors:21,heads:2},2949120:{type:5,tracks:80,sectors:36,heads:2},512:{type:1,tracks:1,sectors:1,heads:1}};let i=e.byteLength;var r,a,n,o=s[i];o||(i=e.byteLength>1474560?2949120:1474560,o=s[i],re("Warning: Unkown floppy size: "+e.byteLength+", assuming "+i)),t.devices.rtc.cmos_write(16,o.type<<4),a=o.sectors,n=o.heads,r=o.tracks,this.sectors_per_track=a,this.number_of_heads=n,this.number_of_cylinders=r}else t.devices.rtc.cmos_write(16,64),this.sectors_per_track=0,this.number_of_heads=0,this.number_of_cylinders=0;this.io.register_read(1008,this,this.port3F0_read),this.io.register_read(1010,this,this.port3F2_read),this.io.register_read(1012,this,this.port3F4_read),this.io.register_read(1013,this,this.port3F5_read),this.io.register_read(1015,this,this.port3F7_read),this.io.register_write(1010,this,this.port3F2_write),this.io.register_write(1013,this,this.port3F5_write)}ii.prototype.get_state=function(){var t=[];return t[0]=this.cmos_index,t[1]=this.cmos_data,t[2]=this.rtc_time,t[3]=this.last_update,t[4]=this.next_interrupt,t[5]=this.next_interrupt_alarm,t[6]=this.periodic_interrupt,t[7]=this.periodic_interrupt_time,t[8]=this.cmos_a,t[9]=this.cmos_b,t[10]=this.cmos_c,t[11]=this.nmi_disabled,t},ii.prototype.set_state=function(t){this.cmos_index=t[0],this.cmos_data=t[1],this.rtc_time=t[2],this.last_update=t[3],this.next_interrupt=t[4],this.next_interrupt_alarm=t[5],this.periodic_interrupt=t[6],this.periodic_interrupt_time=t[7],this.cmos_a=t[8],this.cmos_b=t[9],this.cmos_c=t[10],this.nmi_disabled=t[11]},ii.prototype.timer=function(t,e){t=Date.now(),this.rtc_time+=t-this.last_update,this.last_update=t,this.periodic_interrupt&&this.next_interrupt<t?(this.cpu.device_raise_irq(8),this.cmos_c|=192,this.next_interrupt+=this.periodic_interrupt_time*Math.ceil((t-this.next_interrupt)/this.periodic_interrupt_time)):this.next_interrupt_alarm&&this.next_interrupt_alarm<t&&(this.cpu.device_raise_irq(8),this.cmos_c|=160,this.next_interrupt_alarm=0);let i=100;return this.periodic_interrupt&&this.next_interrupt&&(i=Math.min(i,Math.max(0,this.next_interrupt-t))),this.next_interrupt_alarm&&(i=Math.min(i,Math.max(0,this.next_interrupt_alarm-t))),i},ii.prototype.bcd_pack=function(t){for(var e,i=0,s=0;t;)s|=(e=t%10)<<4*i,i++,t=(t-e)/10;return s},ii.prototype.bcd_unpack=function(t){const e=15&t,i=t>>4&15;return ne(t<256),ne(e<10),ne(i<10),e+10*i},ii.prototype.encode_time=function(t){return 4&this.cmos_b?t:this.bcd_pack(t)},ii.prototype.decode_time=function(t){return 4&this.cmos_b?t:this.bcd_unpack(t)},ii.prototype.cmos_port_read=function(){var t=this.cmos_index;switch(t){case 0:return this.encode_time(new Date(this.rtc_time).getUTCSeconds());case 2:return this.encode_time(new Date(this.rtc_time).getUTCMinutes());case 4:return this.encode_time(new Date(this.rtc_time).getUTCHours());case 7:return this.encode_time(new Date(this.rtc_time).getUTCDate());case 8:return this.encode_time(new Date(this.rtc_time).getUTCMonth()+1);case 9:return this.encode_time(new Date(this.rtc_time).getUTCFullYear()%100);case 10:return this.cmos_a;case 11:return this.cmos_b;case 12:this.cpu.device_lower_irq(8),re("cmos reg C read",65536);var e=this.cmos_c;return this.cmos_c&=-241,e;case 13:return 0;case 50:return this.encode_time(new Date(this.rtc_time).getUTCFullYear()/100|0);default:return re("cmos read from index "+de(t),65536),this.cmos_data[this.cmos_index]}},ii.prototype.cmos_port_write=function(t){switch(this.cmos_index){case 10:this.cmos_a=127&t,this.periodic_interrupt_time=1e3/(32768>>(15&this.cmos_a)-1),re("Periodic interrupt, a="+de(this.cmos_a,2)+" t="+this.periodic_interrupt_time,65536);break;case 11:if(this.cmos_b=t,64&this.cmos_b&&(this.next_interrupt=Date.now()),32&this.cmos_b){const t=new Date,e=this.decode_time(this.cmos_data[1]),i=this.decode_time(this.cmos_data[3]),s=this.decode_time(this.cmos_data[5]),r=new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),s,i,e));re("RTC alarm scheduled for "+r+" hh:mm:ss="+s+":"+i+":"+e+" ms_from_now="+(r-t),65536),this.next_interrupt_alarm=+r}16&this.cmos_b&&re("Unimplemented: updated interrupt",65536),re("cmos b="+de(this.cmos_b,2),65536);break;case 1:case 3:case 5:this.cmos_write(this.cmos_index,t);break;default:re("cmos write index "+de(this.cmos_index)+": "+de(t),65536)}this.periodic_interrupt=64==(64&this.cmos_b)&&(15&this.cmos_a)>0},ii.prototype.cmos_read=function(t){return ne(t<128),this.cmos_data[t]},ii.prototype.cmos_write=function(t,e){re("cmos "+de(t)+" <- "+de(e),65536),ne(t<128),this.cmos_data[t]=e},si.prototype.get_state=function(){var t=[];return t[0]=this.bytes_expecting,t[1]=this.receiving_command,t[2]=this.receiving_index,t[4]=this.response_data,t[5]=this.response_index,t[6]=this.response_length,t[8]=this.status_reg0,t[9]=this.status_reg1,t[10]=this.status_reg2,t[11]=this.drive,t[12]=this.last_cylinder,t[13]=this.last_head,t[14]=this.last_sector,t[15]=this.dor,t[16]=this.sectors_per_track,t[17]=this.number_of_heads,t[18]=this.number_of_cylinders,t},si.prototype.set_state=function(t){this.bytes_expecting=t[0],this.receiving_command=t[1],this.receiving_index=t[2],this.next_command=t[3],this.response_data=t[4],this.response_index=t[5],this.response_length=t[6],this.status_reg0=t[8],this.status_reg1=t[9],this.status_reg2=t[10],this.drive=t[11],this.last_cylinder=t[12],this.last_head=t[13],this.last_sector=t[14],this.dor=t[15],this.sectors_per_track=t[16],this.number_of_heads=t[17],this.number_of_cylinders=t[18]},si.prototype.port3F0_read=function(){return re("3F0 read",8192),0},si.prototype.port3F4_read=function(){re("3F4 read",8192);var t=128;return this.response_index<this.response_length&&(t|=80),0==(8&this.dor)&&(t|=32),t},si.prototype.port3F7_read=function(){return re("3F7 read",8192),0},si.prototype.port3F5_read=function(){return this.response_index<this.response_length?(re("3F5 read: "+this.response_data[this.response_index],8192),this.cpu.device_lower_irq(6),this.response_data[this.response_index++]):(re("3F5 read, empty",8192),255)},si.prototype.port3F5_write=function(t){if(this.fda_image)if(re("3F5 write "+de(t),8192),this.bytes_expecting>0){if(this.receiving_command[this.receiving_index++]=t,this.bytes_expecting--,0===this.bytes_expecting){for(var e="3F5 command received: ",i=0;i<this.receiving_index;i++)e+=de(this.receiving_command[i])+" ";re(e,8192),this.next_command.call(this,this.receiving_command)}}else{switch(t){case 3:this.next_command=this.fix_drive_data,this.bytes_expecting=2;break;case 4:this.next_command=this.check_drive_status,this.bytes_expecting=1;break;case 5:case 197:this.next_command=function(t){this.do_sector(!0,t)},this.bytes_expecting=8;break;case 230:this.next_command=function(t){this.do_sector(!1,t)},this.bytes_expecting=8;break;case 7:this.next_command=this.calibrate,this.bytes_expecting=1;break;case 8:this.check_interrupt_status();break;case 74:this.next_command=this.read_sector_id,this.bytes_expecting=1;break;case 15:this.bytes_expecting=2,this.next_command=this.seek;break;case 14:re("dump registers",8192),this.response_data[0]=128,this.response_index=0,this.response_length=1,this.bytes_expecting=0;break;default:ne(!1,"Unimplemented floppy command call "+de(t))}this.receiving_index=0}},si.prototype.port3F2_read=function(){return re("read 3F2: DOR",8192),this.dor},si.prototype.port3F2_write=function(t){4==(4&t)&&0==(4&this.dor)&&this.cpu.device_raise_irq(6),re("start motors: "+de(t>>4),8192),re("enable dma: "+!!(8&t),8192),re("reset fdc: "+!!(4&t),8192),re("drive select: "+(3&t),8192),re("DOR = "+de(t),8192),this.dor=t},si.prototype.check_drive_status=function(t){re("check drive status",8192),this.response_index=0,this.response_length=1,this.response_data[0]=32},si.prototype.seek=function(t){re("seek",8192),ne(0==(3&t[0]),"Unhandled seek drive"),this.last_cylinder=t[1],this.last_head=t[0]>>2&1,this.raise_irq()},si.prototype.calibrate=function(t){re("floppy calibrate",8192),this.raise_irq()},si.prototype.check_interrupt_status=function(){re("floppy check interrupt status",8192),this.response_index=0,this.response_length=2,this.response_data[0]=32,this.response_data[1]=this.last_cylinder},si.prototype.do_sector=function(t,e){var i=e[2],s=e[1],r=e[3],a=128<<e[4],n=e[5]-e[3]+1,o=((i+this.number_of_heads*s)*this.sectors_per_track+r-1)*a;re("Floppy "+(t?"Write":"Read"),8192),re("from "+de(o)+" length "+de(n*a),8192),re(s+" / "+i+" / "+r,8192),e[4]||re("FDC: sector count is zero, use data length instead",8192),this.fda_image&&(t?this.dma.do_write(this.fda_image,o,n*a,2,this.done.bind(this,e,s,i,r)):this.dma.do_read(this.fda_image,o,n*a,2,this.done.bind(this,e,s,i,r)))},si.prototype.done=function(t,e,i,s,r){r||(++s>this.sectors_per_track&&(s=1,++i>=this.number_of_heads&&(i=0,e++)),this.last_cylinder=e,this.last_head=i,this.last_sector=s,this.response_index=0,this.response_length=7,this.response_data[0]=i<<2|32,this.response_data[1]=0,this.response_data[2]=0,this.response_data[3]=e,this.response_data[4]=i,this.response_data[5]=s,this.response_data[6]=t[4],this.raise_irq())},si.prototype.fix_drive_data=function(t){re("floppy fix drive data "+t,8192)},si.prototype.read_sector_id=function(t){re("floppy read sector id "+t,8192),this.response_index=0,this.response_length=7,this.response_data[0]=0,this.response_data[1]=0,this.response_data[2]=0,this.response_data[3]=0,this.response_data[4]=0,this.response_data[5]=0,this.response_data[6]=0,this.raise_irq()},si.prototype.raise_irq=function(){8&this.dor&&this.cpu.device_raise_irq(6)};var ri=4275044352,ai=1e8,ni=1e4,oi=0,hi=16,_i=32816,di=4;function ci(t){var e=this,i=!1,s=Date.now(),r=0,a=!1,n=0,o=new Int32Array(8),_=new Int32Array(8),d=new Int32Array(8),c=0;function u(){return i?1e4*(Date.now()-s)+r|0:r}this.legacy_mode=!1,this.timer=function(s){if(!i)return 100;for(var r,a,h,p=u()>>>0,l=0;l<4;l++)r=o[l<<1],a=_[l<<1]>>>0,(c<=p?a>c&&a<=p:a>c||a<=p)&&(h=4&r,2&r?(h=h&&!(n&1<<l),n|=1<<l):n&=~(1<<l),8&r&&(_[l<<1]+=d[l<<1]),h&&(e.legacy_mode&&0===l||e.legacy_mode,t.device_raise_irq(0)));return c=p,100},t.io.mmap_register(4275044352,16384,(function(t){switch(dbg_log("Read "+h(t,4)+" (ctr="+h(u()>>>0)+")",LOG_HPET),t){case 0:return 99073;case 4:return 1e8;case 16:return e.legacy_mode<<1|i;case 240:return u();case 244:return 0}var s=t>>2&7,r=t-256>>5;if(t<256||r>=4||s>5)return dbg_log("Read reserved address: "+h(t),LOG_HPET),0;switch(dbg_log("Read counter: addr="+h(t)+" counter="+h(r,2)+" reg="+h(s),LOG_HPET),s){case 0:return-32817&o[r<<1]|16;case 1:return o[r<<1|1];case 2:return _[r<<1];case 3:return _[r<<1|1];case 4:case 5:return 0}}),(function(t,c){switch(dbg_log("Write "+h(t,4)+": "+h(c,2),LOG_HPET),t){case 16:return dbg_log("conf: enabled="+(1&c)+" legacy="+(c>>1&1),LOG_HPET),1&(i^c)&&(1&c?s=Date.now():r=u()),i=1==(1&c),void(e.legacy_mode=2==(2&c));case 32:return void(n&=~c);case 240:return void(r=c);case 244:return}var p=t>>2&7,l=t-256>>5;if(t<256||l>=4||p>2)return void dbg_log("Write reserved address: "+h(t)+" data="+h(c),LOG_HPET);switch(dbg_log("Write counter: addr="+h(t)+" counter="+h(l,2)+" reg="+h(p)+" data="+h(c,2),LOG_HPET),p){case 0:o[l<<1]=c;break;case 1:break;case 2:a?(d[l<<1]=c,a=!1,dbg_log("Accumulator acc="+h(c>>>0,8)+" ctr="+h(l,2),LOG_HPET)):(_[l<<1]=c,64&o[l<<1]&&(a=!0,o[l<<1]&=-65));break;case 3:_[l<<1|1]=c}}))}var ui=2048,pi=512;function li(t,e,i,s,r,a){this.master=new fi(this,t,e,s,r,0,a),this.slave=new fi(this,t,i,!1,r,1,a),this.current_interface=this.master,this.cpu=t,0===r?(this.ata_port=496,this.irq=14,this.pci_id=240):1===r?(this.ata_port=368,this.irq=15,this.pci_id=248):ne(!1,"IDE device with nr "+r+" ignored"),this.ata_port_high=516|this.ata_port,this.master_port=46080,this.pci_space=[134,128,16,112,5,0,160,2,0,128,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,255&this.master_port|1,this.master_port>>8,0,0,0,0,0,0,0,0,0,0,67,16,212,130,0,0,0,0,0,0,0,0,0,0,0,0,this.irq,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.pci_bars=[{size:8},{size:4},void 0,void 0,{size:16}],this.name="ide"+r,this.device_control=2,t.io.register_read(7|this.ata_port,this,(function(){return re("lower irq",32768),this.cpu.device_lower_irq(this.irq),this.read_status()})),t.io.register_read(2|this.ata_port_high,this,this.read_status),t.io.register_write(2|this.ata_port_high,this,this.write_control),t.io.register_read(0|this.ata_port,this,(function(){return this.current_interface.read_data(1)}),(function(){return this.current_interface.read_data(2)}),(function(){return this.current_interface.read_data(4)})),t.io.register_read(1|this.ata_port,this,(function(){return re("Read error: "+de(255&this.current_interface.error)+" slave="+(this.current_interface===this.slave),32768),255&this.current_interface.error})),t.io.register_read(2|this.ata_port,this,(function(){return re("Read bytecount: "+de(255&this.current_interface.bytecount),32768),255&this.current_interface.bytecount})),t.io.register_read(3|this.ata_port,this,(function(){return re("Read sector: "+de(255&this.current_interface.sector),32768),255&this.current_interface.sector})),t.io.register_read(4|this.ata_port,this,(function(){return re("Read 1F4: "+de(255&this.current_interface.cylinder_low),32768),255&this.current_interface.cylinder_low})),t.io.register_read(5|this.ata_port,this,(function(){return re("Read 1F5: "+de(255&this.current_interface.cylinder_high),32768),255&this.current_interface.cylinder_high})),t.io.register_read(6|this.ata_port,this,(function(){return re("Read 1F6",32768),255&this.current_interface.drive_head})),t.io.register_write(0|this.ata_port,this,(function(t){this.current_interface.write_data_port8(t)}),(function(t){this.current_interface.write_data_port16(t)}),(function(t){this.current_interface.write_data_port32(t)})),t.io.register_write(1|this.ata_port,this,(function(t){re("1F1/lba_count: "+de(t),32768),this.master.lba_count=65535&(this.master.lba_count<<8|t),this.slave.lba_count=65535&(this.slave.lba_count<<8|t)})),t.io.register_write(2|this.ata_port,this,(function(t){re("1F2/bytecount: "+de(t),32768),this.master.bytecount=65535&(this.master.bytecount<<8|t),this.slave.bytecount=65535&(this.slave.bytecount<<8|t)})),t.io.register_write(3|this.ata_port,this,(function(t){re("1F3/sector: "+de(t),32768),this.master.sector=65535&(this.master.sector<<8|t),this.slave.sector=65535&(this.slave.sector<<8|t)})),t.io.register_write(4|this.ata_port,this,(function(t){re("1F4/sector low: "+de(t),32768),this.master.cylinder_low=65535&(this.master.cylinder_low<<8|t),this.slave.cylinder_low=65535&(this.slave.cylinder_low<<8|t)})),t.io.register_write(5|this.ata_port,this,(function(t){re("1F5/sector high: "+de(t),32768),this.master.cylinder_high=65535&(this.master.cylinder_high<<8|t),this.slave.cylinder_high=65535&(this.slave.cylinder_high<<8|t)})),t.io.register_write(6|this.ata_port,this,(function(t){var e=16&t;re("1F6/drive: "+de(t,2),32768),e?(re("Slave",32768),this.current_interface=this.slave):this.current_interface=this.master,this.master.drive_head=t,this.slave.drive_head=t,this.master.is_lba=this.slave.is_lba=t>>6&1,this.master.head=this.slave.head=15&t})),this.prdt_addr=0,this.dma_status=0,this.dma_command=0,t.io.register_write(7|this.ata_port,this,(function(t){re("lower irq",32768),this.cpu.device_lower_irq(this.irq),this.current_interface.ata_command(t)})),t.io.register_read(4|this.master_port,this,void 0,void 0,this.dma_read_addr),t.io.register_write(4|this.master_port,this,void 0,void 0,this.dma_set_addr),t.io.register_read(this.master_port,this,this.dma_read_command8,void 0,this.dma_read_command),t.io.register_write(this.master_port,this,this.dma_write_command8,void 0,this.dma_write_command),t.io.register_read(2|this.master_port,this,this.dma_read_status),t.io.register_write(2|this.master_port,this,this.dma_write_status),t.io.register_read(8|this.master_port,this,(function(){return re("DMA read 0x8",32768),0})),t.io.register_read(10|this.master_port,this,(function(){return re("DMA read 0xA",32768),0})),t.devices.pci.register_device(this),Object.seal(this)}function fi(t,e,i,s,r,a,n){if(this.device=t,this.bus=n,this.nr=r,this.cpu=e,this.buffer=i,this.sector_size=s?2048:512,this.is_atapi=s,this.sector_count=0,this.head_count=0,this.sectors_per_track=0,this.cylinder_count=0,this.buffer){this.sector_count=this.buffer.byteLength/this.sector_size,this.sector_count!==(0|this.sector_count)&&(re("Warning: Disk size not aligned with sector size",32768),this.sector_count=Math.ceil(this.sector_count)),s?(this.head_count=1,this.sectors_per_track=0):(this.head_count=16,this.sectors_per_track=63),this.cylinder_count=this.sector_count/this.head_count/this.sectors_per_track,this.cylinder_count!==(0|this.cylinder_count)&&(re("Warning: Rounding up cylinder count. Choose different head number",32768),this.cylinder_count=Math.floor(this.cylinder_count));var o=e.devices.rtc;o.cmos_write(57,o.cmos_read(57)|1<<4*this.nr),o.cmos_write(18,15&o.cmos_read(18)|240);o.cmos_write(27,255&this.cylinder_count),o.cmos_write(28,this.cylinder_count>>8&255),o.cmos_write(29,255&this.head_count),o.cmos_write(30,255),o.cmos_write(31,255),o.cmos_write(32,200),o.cmos_write(33,255&this.cylinder_count),o.cmos_write(34,this.cylinder_count>>8&255),o.cmos_write(35,255&this.sectors_per_track)}this.stats={sectors_read:0,sectors_written:0,bytes_read:0,bytes_written:0,loading:!1},this.buffer=i,this.is_lba=0,this.bytecount=0,this.sector=0,this.lba_count=0,this.cylinder_low=0,this.cylinder_high=0,this.head=0,this.drive_head=0,this.status=80,this.sectors_per_drq=128,this.error=0,this.data_pointer=0,this.data=new Uint8Array(65536),this.data16=new Uint16Array(this.data.buffer),this.data32=new Int32Array(this.data.buffer),this.data_length=0,this.data_end=0,this.current_command=-1,this.current_atapi_command=-1,this.write_dest=0,this.last_io_id=0,this.in_progress_io_ids=new Set,this.cancelled_io_ids=new Set,Object.seal(this)}function mi(t){this.ports=[],this.cpu=t;for(var e=0;e<65536;e++)this.ports[e]=this.create_empty_entry();var i=t.memory_size[0];for(e=0;e<<17<i;e++)t.memory_map_read8[e]=t.memory_map_write8[e]=void 0,t.memory_map_read32[e]=t.memory_map_write32[e]=void 0;this.mmap_register(i,4294967296-i,(function(t){return re("Read from unmapped memory space, addr="+de(t>>>0,8),32),255}),(function(t,e){re("Write to unmapped memory space, addr="+de(t>>>0,8)+" value="+de(e,2),32)}),(function(t){return re("Read from unmapped memory space, addr="+de(t>>>0,8),32),-1}),(function(t,e){re("Write to unmapped memory space, addr="+de(t>>>0,8)+" value="+de(e>>>0,8),32)}))}li.prototype.read_status=function(){if(this.current_interface.buffer){var t=this.current_interface.status;return re("ATA read status: "+de(t,2),32768),t}return 0},li.prototype.write_control=function(t){re("set device control: "+de(t,2)+" interrupts "+(2&t?"disabled":"enabled"),32768),4&t&&(re("Reset via control port",32768),this.cpu.device_lower_irq(this.irq),this.master.device_reset(),this.slave.device_reset()),this.device_control=t},li.prototype.dma_read_addr=function(){return re("dma get address: "+de(this.prdt_addr,8),32768),this.prdt_addr},li.prototype.dma_set_addr=function(t){re("dma set address: "+de(t,8),32768),this.prdt_addr=t},li.prototype.dma_read_status=function(){return re("DMA read status: "+de(this.dma_status),32768),this.dma_status},li.prototype.dma_write_status=function(t){re("DMA set status: "+de(t),32768),this.dma_status&=~(6&t)},li.prototype.dma_read_command=function(){return this.dma_read_command8()|this.dma_read_status()<<16},li.prototype.dma_read_command8=function(){return re("DMA read command: "+de(this.dma_command),32768),this.dma_command},li.prototype.dma_write_command=function(t){re("DMA write command: "+de(t),32768),this.dma_write_command8(255&t),this.dma_write_status(t>>16&255)},li.prototype.dma_write_command8=function(t){re("DMA write command8: "+de(t),32768);let e=this.dma_command;if(this.dma_command=9&t,(1&e)!=(1&t))if(0!=(1&t))switch(this.dma_status|=1,this.current_interface.current_command){case 37:case 200:this.current_interface.do_ata_read_sectors_dma();break;case 202:case 53:this.current_interface.do_ata_write_sectors_dma();break;case 160:this.current_interface.do_atapi_dma();break;default:re("Spurious dma command write, current command: "+de(this.current_interface.current_command),32768),ne(!1)}else this.dma_status&=-2},li.prototype.push_irq=function(){0==(2&this.device_control)&&(re("push irq",32768),this.dma_status|=4,this.cpu.device_raise_irq(this.irq))},li.prototype.get_state=function(){var t=[];return t[0]=this.master,t[1]=this.slave,t[2]=this.ata_port,t[3]=this.irq,t[4]=this.pci_id,t[5]=this.ata_port_high,t[6]=this.master_port,t[7]=this.name,t[8]=this.device_control,t[9]=this.prdt_addr,t[10]=this.dma_status,t[11]=this.current_interface===this.master,t[12]=this.dma_command,t},li.prototype.set_state=function(t){this.master.set_state(t[0]),this.slave.set_state(t[1]),this.ata_port=t[2],this.irq=t[3],this.pci_id=t[4],this.ata_port_high=t[5],this.master_port=t[6],this.name=t[7],this.device_control=t[8],this.prdt_addr=t[9],this.dma_status=t[10],this.current_interface=t[11]?this.master:this.slave,this.dma_command=t[12]},fi.prototype.device_reset=function(){this.is_atapi?(this.status=0,this.bytecount=1,this.error=1,this.sector=1,this.cylinder_low=20,this.cylinder_high=235):(this.status=81,this.bytecount=1,this.error=1,this.sector=1,this.cylinder_low=0,this.cylinder_high=0),this.cancel_io_operations()},fi.prototype.push_irq=function(){this.device.push_irq()},fi.prototype.ata_command=function(t){if(re("ATA Command: "+de(t)+" slave="+(this.drive_head>>4&1),32768),!this.buffer)return re("abort: No buffer",32768),this.error=4,this.status=65,void this.push_irq();switch(this.current_command=t,this.error=0,t){case 8:re("ATA device reset",32768),this.data_pointer=0,this.data_end=0,this.data_length=0,this.device_reset(),this.push_irq();break;case 16:this.status=80,this.cylinder_low=0,this.push_irq();break;case 248:this.status=80;var e=this.sector_count-1;this.sector=255&e,this.cylinder_low=e>>8&255,this.cylinder_high=e>>16&255,this.drive_head=240&this.drive_head|e>>24&15,this.push_irq();break;case 39:this.status=80;e=this.sector_count-1;this.sector=255&e,this.cylinder_low=e>>8&255,this.cylinder_high=e>>16&255,this.sector|=e>>24<<8&65280,this.push_irq();break;case 32:case 36:case 41:case 196:this.ata_read_sectors(t);break;case 48:case 52:case 57:case 197:this.ata_write_sectors(t);break;case 144:this.push_irq(),this.error=257,this.status=80;break;case 145:case 222:this.status=80,this.push_irq();break;case 160:this.is_atapi&&(this.status=88,this.data_allocate(12),this.data_end=12,this.bytecount=1,this.push_irq());break;case 161:re("ATA identify packet device",32768),this.is_atapi?(this.create_identify_packet(),this.status=88,this.cylinder_low=20,this.cylinder_high=235,this.push_irq()):(this.status=65,this.push_irq());break;case 198:re("Logical sectors per DRQ Block: "+de(255&this.bytecount),32768),this.sectors_per_drq=255&this.bytecount,this.status=80,this.push_irq();break;case 37:case 200:this.ata_read_sectors_dma(t);break;case 53:case 202:this.ata_write_sectors_dma(t);break;case 64:re("read verify sectors",32768),this.status=80,this.push_irq();break;case 218:re("Unimplemented: get media status",32768),this.status=65,this.error=4,this.push_irq();break;case 224:re("ATA standby immediate",32768),this.status=80,this.push_irq();break;case 225:re("ATA idle immediate",32768),this.status=80,this.push_irq();break;case 231:re("ATA flush cache",32768),this.status=80,this.push_irq();break;case 236:if(re("ATA identify device",32768),this.is_atapi)return this.status=65,this.error=4,void this.push_irq();this.create_identify_packet(),this.status=88,this.push_irq();break;case 234:re("flush cache ext",32768),this.status=80,this.push_irq();break;case 239:re("set features: "+de(255&this.bytecount),32768),this.status=80,this.push_irq();break;case 245:re("security freeze lock",32768),this.status=80,this.push_irq();break;case 249:re("Unimplemented: set max address",32768),this.status=65,this.error=4;break;default:ne(!1,"New ATA cmd on 1F7: "+de(t)),this.status=65,this.error=4}},fi.prototype.atapi_handle=function(){switch(re("ATAPI Command: "+de(this.data[0])+" slave="+(this.drive_head>>4&1),32768),this.data_pointer=0,this.current_atapi_command=this.data[0],this.current_atapi_command){case 0:re("test unit ready",32768),this.data_allocate(0),this.data_end=this.data_length,this.status=80;break;case 3:this.data_allocate(this.data[4]),this.data_end=this.data_length,this.status=88,this.data[0]=240,this.data[2]=5,this.data[7]=8;break;case 18:var t=this.data[4];this.status=88,re("inquiry: "+de(this.data[1],2)+" length="+t,32768),this.data.set([5,128,1,49,31,0,0,0,83,79,78,89,32,32,32,32,67,68,45,82,79,77,32,67,68,85,45,49,48,48,48,32,49,46,49,97]),this.data_end=this.data_length=Math.min(36,t);break;case 26:this.data_allocate(this.data[4]),this.data_end=this.data_length,this.status=88;break;case 30:case 81:this.data_allocate(0),this.data_end=this.data_length,this.status=80;break;case 37:var e=this.sector_count-1;this.data_set(new Uint8Array([e>>24&255,e>>16&255,e>>8&255,255&e,0,0,this.sector_size>>8&255,255&this.sector_size])),this.data_end=this.data_length,this.status=88;break;case 40:1&this.lba_count?this.atapi_read_dma(this.data):this.atapi_read(this.data);break;case 66:t=this.data[8];this.data_allocate(Math.min(8,t)),this.data_end=this.data_length,re("read q subcode: length="+t,32768),this.status=88;break;case 67:t=this.data[8]|this.data[7]<<8;var i=this.data[9]>>6;if(this.data_allocate(t),this.data_end=this.data_length,re("read toc: "+de(i,2)+" length="+t+" "+(2&this.data[1])+" "+de(this.data[6]),32768),0===i){var s=this.sector_count;this.data.set(new Uint8Array([0,18,1,1,0,20,1,0,0,0,0,0,0,22,170,0,s>>24,s>>16&255,s>>8&255,255&s]))}else 1===i?this.data.set(new Uint8Array([0,10,1,1,0,0,0,0,0,0,0,0])):ne(!1,"Unimplemented format: "+i);this.status=88;break;case 70:t=this.data[8]|this.data[7]<<8;t=Math.min(t,32),this.data_allocate(t),this.data_end=this.data_length,this.data[0]=t-4>>24&255,this.data[1]=t-4>>16&255,this.data[2]=t-4>>8&255,this.data[3]=t-4&255,this.data[6]=8,this.data[10]=3,this.status=88;break;case 82:re("Unimplemented ATAPI command: "+de(this.data[0]),32768),this.status=81,this.data_length=0,this.error=80;break;case 90:t=this.data[8]|this.data[7]<<8;var r=this.data[2];re("mode sense: "+de(r)+" length="+t,32768),42===r&&this.data_allocate(Math.min(30,t)),this.data_end=this.data_length,this.status=88;break;case 189:this.data_allocate(this.data[9]|this.data[8]<<8),this.data_end=this.data_length,this.data[5]=1,this.status=88;break;case 74:this.status=81,this.data_length=0,this.error=80,re("Unimplemented ATAPI command: "+de(this.data[0]),32768);break;case 190:re("Unimplemented ATAPI command: "+de(this.data[0]),32768),this.data_allocate(0),this.data_end=this.data_length,this.status=80;break;default:this.status=81,this.data_length=0,this.error=80,re("Unimplemented ATAPI command: "+de(this.data[0]),32768),ne(!1)}this.bytecount=-8&this.bytecount|2,0==(128&this.status)&&this.push_irq(),0==(128&this.status)&&0===this.data_length&&(this.bytecount|=1,this.status&=-9)},fi.prototype.do_write=function(){this.status=80,ne(this.data_length<=this.data.length);var t=this.data.subarray(0,this.data_length);ne(this.data_length%512==0),this.ata_advance(this.current_command,this.data_length/512),this.push_irq(),this.buffer.set(this.write_dest,t,(function(){})),this.report_write(this.data_length)},fi.prototype.atapi_read=function(t){var e=t[2]<<24|t[3]<<16|t[4]<<8|t[5],i=t[7]<<8|t[8],s=t[1],r=i*this.sector_size,a=e*this.sector_size;re("CD read lba="+de(e)+" lbacount="+de(i)+" bytecount="+de(r)+" flags="+de(s),32768),this.data_length=0;var n=this.cylinder_high<<8&65280|255&this.cylinder_low;re(de(this.cylinder_high,2)+" "+de(this.cylinder_low,2),32768),this.cylinder_low=this.cylinder_high=0,65535===n&&n--,n>r&&(n=r),a>=this.buffer.byteLength?(ne(!1,"CD read: Outside of disk end="+de(a+r)+" size="+de(this.buffer.byteLength)),this.status=255,this.push_irq()):0===r?(this.status=80,this.data_pointer=0):(r=Math.min(r,this.buffer.byteLength-a),this.status=208,this.report_read_start(),this.read_buffer(a,r,(t=>{re("cd read: data arrived",32768),this.data_set(t),this.status=88,this.bytecount=-8&this.bytecount|2,this.push_irq(),n&=-4,this.data_end=n,this.data_end>this.data_length&&(this.data_end=this.data_length),this.cylinder_low=255&this.data_end,this.cylinder_high=this.data_end>>8&255,this.report_read_end(r)})))},fi.prototype.atapi_read_dma=function(t){var e=t[2]<<24|t[3]<<16|t[4]<<8|t[5],i=t[7]<<8|t[8],s=t[1],r=i*this.sector_size,a=e*this.sector_size;re("CD read DMA lba="+de(e)+" lbacount="+de(i)+" bytecount="+de(r)+" flags="+de(s),32768),a>=this.buffer.byteLength?(ne(!1,"CD read: Outside of disk end="+de(a+r)+" size="+de(this.buffer.byteLength)),this.status=255,this.push_irq()):(this.status=208,this.report_read_start(),this.read_buffer(a,r,(t=>{re("atapi_read_dma: Data arrived"),this.report_read_end(r),this.status=88,this.bytecount=-8&this.bytecount|2,this.data_set(t),this.do_atapi_dma()})))},fi.prototype.do_atapi_dma=function(){if(0!=(1&this.device.dma_status))if(0!=(8&this.status)){re("atapi dma transfer len="+this.data_length,32768);var t=this.device.prdt_addr,e=0,i=this.data;do{var s=this.cpu.read32s(t),r=this.cpu.read16(t+4),a=128&this.cpu.read8(t+7);if(r||(r=65536),re("dma read dest="+de(s)+" count="+de(r)+" datalen="+de(this.data_length),32768),this.cpu.write_blob(i.subarray(e,Math.min(e+r,this.data_length)),s),t+=8,(e+=r)>=this.data_length&&!a){re("leave early end="+ +a+" offset="+de(e)+" data_length="+de(this.data_length)+" cmd="+de(this.current_command),32768);break}}while(!a);re("end offset="+e,32768),this.status=80,this.device.dma_status&=-2,this.bytecount=-8&this.bytecount|3,this.push_irq()}else re("do_atapi_dma: DRQ not set",32768);else re("do_atapi_dma: Status not set",32768)},fi.prototype.read_data=function(t){if(this.data_pointer<this.data_end){if(ne(this.data_pointer+t-1<this.data_end),ne(this.data_pointer%t==0,de(this.data_pointer)+" "+t),1===t)var e=this.data[this.data_pointer];else if(2===t)e=this.data16[this.data_pointer>>>1];else e=this.data32[this.data_pointer>>>2];this.data_pointer+=t;var i=0==(4095&this.data_end)?4095:255;return 0==(this.data_pointer&i)&&re("Read 1F0: "+de(this.data[this.data_pointer],2)+" cur="+de(this.data_pointer)+" cnt="+de(this.data_length),32768),this.data_pointer>=this.data_end&&this.read_end(),e}return re("Read 1F0: empty",32768),this.data_pointer+=t,0},fi.prototype.read_end=function(){if(re("read_end cmd="+de(this.current_command)+" data_pointer="+de(this.data_pointer)+" end="+de(this.data_end)+" length="+de(this.data_length),32768),160===this.current_command)if(this.data_end===this.data_length)this.status=80,this.bytecount=-8&this.bytecount|3,this.push_irq();else{this.status=88,this.bytecount=-8&this.bytecount|2,this.push_irq();var t=this.cylinder_high<<8&65280|255&this.cylinder_low;this.data_end+t>this.data_length?(this.cylinder_low=this.data_length-this.data_end&255,this.cylinder_high=this.data_length-this.data_end>>8&255,this.data_end=this.data_length):this.data_end+=t,re("data_end="+de(this.data_end),32768)}else if(this.error=0,this.data_pointer>=this.data_length)this.status=80,this.push_irq();else{if(196===this.current_command||41===this.current_command){ne((e=Math.min(this.sectors_per_drq,(this.data_length-this.data_end)/512))%1==0)}else{ne(32===this.current_command||36===this.current_command);var e=1}this.ata_advance(this.current_command,e),this.data_end+=512*e,this.status=88,this.push_irq()}},fi.prototype.write_data_port=function(t,e){if(ne(this.data_pointer%e==0),this.data_pointer>=this.data_end)re("Redundant write to data port: "+de(t)+" count="+de(this.data_end)+" cur="+de(this.data_pointer),32768);else{var i=0==(4095&this.data_end)?4095:255;(0==(this.data_pointer+e&i)||this.data_end<20)&&re("Data port: "+de(t>>>0)+" count="+de(this.data_end)+" cur="+de(this.data_pointer),32768),1===e?this.data[this.data_pointer++]=t:2===e?(this.data16[this.data_pointer>>>1]=t,this.data_pointer+=2):(this.data32[this.data_pointer>>>2]=t,this.data_pointer+=4),ne(this.data_pointer<=this.data_end),this.data_pointer===this.data_end&&this.write_end()}},fi.prototype.write_data_port8=function(t){this.write_data_port(t,1)},fi.prototype.write_data_port16=function(t){this.write_data_port(t,2)},fi.prototype.write_data_port32=function(t){this.write_data_port(t,4)},fi.prototype.write_end=function(){160===this.current_command?this.atapi_handle():(re("write_end data_pointer="+de(this.data_pointer)+" data_length="+de(this.data_length),32768),this.data_pointer>=this.data_length?this.do_write():(ne(48===this.current_command||52===this.current_command||197===this.current_command,"Unexpected command: "+de(this.current_command)),this.status=88,this.data_end+=512,this.push_irq()))},fi.prototype.ata_advance=function(t,e){if(re("Advance sectors="+e+" old_bytecount="+this.bytecount,32768),this.bytecount-=e,36===t||41===t||52===t||57===t||37===t||53===t){var i=e+this.get_lba48();this.sector=255&i|i>>16&65280,this.cylinder_low=i>>8&255,this.cylinder_high=i>>16&255}else if(this.is_lba){i=e+this.get_lba28();this.sector=255&i,this.cylinder_low=i>>8&255,this.cylinder_high=i>>16&255,this.head=-16&this.head|15&i}else{var s=(i=e+this.get_chs())/(this.head_count*this.sectors_per_track)|0;this.cylinder_low=255&s,this.cylinder_high=s>>8&255,this.head=(i/this.sectors_per_track|0)%this.head_count&15,this.sector=i%this.sectors_per_track+1&255,ne(i===this.get_chs())}},fi.prototype.ata_read_sectors=function(t){var e=36===t||41===t,i=this.get_count(e),s=this.get_lba(e),r=32===t||36===t,a=i*this.sector_size,n=s*this.sector_size;re("ATA read cmd="+de(t)+" mode="+(this.is_lba?"lba":"chs")+" lba="+de(s)+" lbacount="+de(i)+" bytecount="+de(a),32768),n+a>this.buffer.byteLength?(ne(!1,"ATA read: Outside of disk"),this.status=255,this.push_irq()):(this.status=192,this.report_read_start(),this.read_buffer(n,a,(e=>{re("ata_read: Data arrived",32768),this.data_set(e),this.status=88,this.data_end=r?512:Math.min(a,512*this.sectors_per_drq),this.ata_advance(t,r?1:Math.min(i,this.sectors_per_track)),this.push_irq(),this.report_read_end(a)})))},fi.prototype.ata_read_sectors_dma=function(t){var e=37===t,i=this.get_count(e),s=this.get_lba(e),r=i*this.sector_size,a=s*this.sector_size;if(re("ATA DMA read lba="+de(s)+" lbacount="+de(i)+" bytecount="+de(r),32768),a+r>this.buffer.byteLength)return ne(!1,"ATA read: Outside of disk"),this.status=255,void this.push_irq();this.status=88,this.device.dma_status|=1},fi.prototype.do_ata_read_sectors_dma=function(){var t=37===this.current_command,e=this.get_count(t),i=this.get_lba(t),s=e*this.sector_size,r=i*this.sector_size;ne(i<this.buffer.byteLength),this.report_read_start();var a=this.device.prdt_addr;this.read_buffer(r,s,(t=>{re("do_ata_read_sectors_dma: Data arrived",32768);var i=this.device.prdt_addr,r=0;ne(a===i);do{var n=this.cpu.read32s(i),o=this.cpu.read16(i+4),h=128&this.cpu.read8(i+7);o||(o=65536,re("dma: prd count was 0",32768)),re("dma read transfer dest="+de(n)+" prd_count="+de(o),32768),this.cpu.write_blob(t.subarray(r,r+o),n),r+=o,i+=8}while(!h);ne(r===s),this.ata_advance(this.current_command,e),this.status=80,this.device.dma_status&=-2,this.current_command=-1,this.push_irq(),this.report_read_end(s)}))},fi.prototype.ata_write_sectors=function(t){var e=52===t||57===t,i=this.get_count(e),s=this.get_lba(e),r=48===t||52===t,a=i*this.sector_size,n=s*this.sector_size;re("ATA write lba="+de(s)+" mode="+(this.is_lba?"lba":"chs")+" lbacount="+de(i)+" bytecount="+de(a),32768),n+a>this.buffer.byteLength?(ne(!1,"ATA write: Outside of disk"),this.status=255,this.push_irq()):(this.status=88,this.data_allocate_noclear(a),this.data_end=r?512:Math.min(a,512*this.sectors_per_drq),this.write_dest=n)},fi.prototype.ata_write_sectors_dma=function(t){var e=53===t,i=this.get_count(e),s=this.get_lba(e),r=i*this.sector_size,a=s*this.sector_size;if(re("ATA DMA write lba="+de(s)+" lbacount="+de(i)+" bytecount="+de(r),32768),a+r>this.buffer.byteLength)return ne(!1,"ATA DMA write: Outside of disk"),this.status=255,void this.push_irq();this.status=88,this.device.dma_status|=1},fi.prototype.do_ata_write_sectors_dma=function(){var t=53===this.current_command,e=this.get_count(t),i=this.get_lba(t),s=e*this.sector_size,r=i*this.sector_size,a=this.device.prdt_addr,n=0;re("prdt addr: "+de(a,8),32768);const o=new Uint8Array(s);do{var h=this.cpu.read32s(a),_=this.cpu.read16(a+4),d=128&this.cpu.read8(a+7);_||(_=65536,re("dma: prd count was 0",32768)),re("dma write transfer dest="+de(h)+" prd_count="+de(_),32768);var c=this.cpu.mem8.subarray(h,h+_);ne(c.length===_),o.set(c,n),n+=_,a+=8}while(!d);ne(n===o.length),this.buffer.set(r,o,(()=>{re("dma write completed",32768),this.ata_advance(this.current_command,e),this.status=80,this.push_irq(),this.device.dma_status&=-2,this.current_command=-1})),this.report_write(s)},fi.prototype.get_chs=function(){var t=255&this.cylinder_low|this.cylinder_high<<8&65280,e=this.head,i=255&this.sector;return re("get_chs: c="+t+" h="+e+" s="+i,32768),(t*this.head_count+e)*this.sectors_per_track+i-1},fi.prototype.get_lba28=function(){return 255&this.sector|this.cylinder_low<<8&65280|this.cylinder_high<<16&16711680|(15&this.head)<<24},fi.prototype.get_lba48=function(){return(255&this.sector|this.cylinder_low<<8&65280|this.cylinder_high<<16&16711680|this.sector>>8<<24&4278190080)>>>0},fi.prototype.get_lba=function(t){return t?this.get_lba48():this.is_lba?this.get_lba28():this.get_chs()},fi.prototype.get_count=function(t){var e;return t?(0===(e=this.bytecount)&&(e=65536),e):(0===(e=255&this.bytecount)&&(e=256),e)},fi.prototype.create_identify_packet=function(){if(16&this.drive_head)this.data_allocate(0);else{for(var t=0;t<512;t++)this.data[t]=0;var e=Math.min(16383,this.cylinder_count);this.data_set([64,this.is_atapi?133:0,e,e>>8,0,0,this.head_count,this.head_count>>8,this.sectors_per_track/512,this.sectors_per_track/512>>8,0,2,this.sectors_per_track,this.sectors_per_track>>8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,4,0,0,0,0,0,0,0,0,0,56,118,32,54,68,72,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,128,0,1,0,0,2,0,0,0,2,0,2,7,0,e,e>>8,this.head_count,this.head_count>>8,this.sectors_per_track,0,255&this.sector_count,this.sector_count>>8&255,this.sector_count>>16&255,this.sector_count>>24&255,0,0,255&this.sector_count,this.sector_count>>8&255,this.sector_count>>16&255,this.sector_count>>24&255,0,0,160===this.current_command?0:7,160===this.current_command?0:4,0,0,30,0,30,0,30,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,0,0,0,0,0,0,116,0,64,0,64,0,116,0,64,0,0,0,0,0,0,0,0,0,0,1,96,0,0,0,0,0,0,0,0,0,0,0,0,255&this.sector_count,this.sector_count>>8&255,this.sector_count>>16&255,this.sector_count>>24&255]),this.data_length=512,this.data_end=512}},fi.prototype.data_allocate=function(t){this.data_allocate_noclear(t);for(var e=0;e<t+3>>2;e++)this.data32[e]=0},fi.prototype.data_allocate_noclear=function(t){this.data.length<t&&(this.data=new Uint8Array(t+3&-4),this.data16=new Uint16Array(this.data.buffer),this.data32=new Int32Array(this.data.buffer)),this.data_length=t,this.data_pointer=0},fi.prototype.data_set=function(t){this.data_allocate_noclear(t.length),this.data.set(t)},fi.prototype.report_read_start=function(){this.stats.loading=!0,this.bus.send("ide-read-start")},fi.prototype.report_read_end=function(t){this.stats.loading=!1;var e=t/this.sector_size|0;this.stats.sectors_read+=e,this.stats.bytes_read+=t,this.bus.send("ide-read-end",[this.nr,t,e])},fi.prototype.report_write=function(t){var e=t/this.sector_size|0;this.stats.sectors_written+=e,this.stats.bytes_written+=t,this.bus.send("ide-write-end",[this.nr,t,e])},fi.prototype.read_buffer=function(t,e,i){const s=this.last_io_id++;this.in_progress_io_ids.add(s),this.buffer.get(t,e,(t=>{if(this.cancelled_io_ids.delete(s))return void ne(!this.in_progress_io_ids.has(s));ne(this.in_progress_io_ids.delete(s)),i(t)}))},fi.prototype.cancel_io_operations=function(){for(const t of this.in_progress_io_ids)this.cancelled_io_ids.add(t);this.in_progress_io_ids.clear()},fi.prototype.get_state=function(){var t=[];return t[0]=this.bytecount,t[1]=this.cylinder_count,t[2]=this.cylinder_high,t[3]=this.cylinder_low,t[4]=this.data_pointer,t[5]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=this.drive_head,t[10]=this.error,t[11]=this.head,t[12]=this.head_count,t[13]=this.is_atapi,t[14]=this.is_lba,t[15]=this.lba_count,t[16]=this.data,t[17]=this.data_length,t[18]=this.sector,t[19]=this.sector_count,t[20]=this.sector_size,t[21]=this.sectors_per_drq,t[22]=this.sectors_per_track,t[23]=this.status,t[24]=this.write_dest,t[25]=this.current_command,t[26]=this.data_end,t[27]=this.current_atapi_command,t[28]=this.buffer,t},fi.prototype.set_state=function(t){this.bytecount=t[0],this.cylinder_count=t[1],this.cylinder_high=t[2],this.cylinder_low=t[3],this.data_pointer=t[4],this.drive_head=t[9],this.error=t[10],this.head=t[11],this.head_count=t[12],this.is_atapi=t[13],this.is_lba=t[14],this.lba_count=t[15],this.data=t[16],this.data_length=t[17],this.sector=t[18],this.sector_count=t[19],this.sector_size=t[20],this.sectors_per_drq=t[21],this.sectors_per_track=t[22],this.status=t[23],this.write_dest=t[24],this.current_command=t[25],this.data_end=t[26],this.current_atapi_command=t[27],this.data16=new Uint16Array(this.data.buffer),this.data32=new Int32Array(this.data.buffer),this.buffer&&this.buffer.set_state(t[28])},mi.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}},mi.prototype.empty_port_read8=function(){return 255},mi.prototype.empty_port_read16=function(){return 65535},mi.prototype.empty_port_read32=function(){return-1},mi.prototype.empty_port_write=function(t){},mi.prototype.register_read=function(t,e,i,s,r){ne("number"==typeof t),ne("object"==typeof e),ne(!i||"function"==typeof i),ne(!s||"function"==typeof s),ne(!r||"function"==typeof r),ne(i||s||r);var a=function(i){return ne(!1,"Overlapped read"+i+" "+de(t,4)+" ("+e.name+")"),-1>>>32-i|0};i||(i=a.bind(this,8)),s||(s=a.bind(this,16)),r||(r=a.bind(this,32)),i&&(this.ports[t].read8=i),s&&(this.ports[t].read16=s),r&&(this.ports[t].read32=r),this.ports[t].device=e},mi.prototype.register_write=function(t,e,i,s,r){ne("number"==typeof t),ne("object"==typeof e),ne(!i||"function"==typeof i),ne(!s||"function"==typeof s),ne(!r||"function"==typeof r),ne(i||s||r);var a=function(i){ne(!1,"Overlapped write"+i+" "+de(t)+" ("+e.name+")")};i||(i=a.bind(this,8)),s||(s=a.bind(this,16)),r||(r=a.bind(this,32)),i&&(this.ports[t].write8=i),s&&(this.ports[t].write16=s),r&&(this.ports[t].write32=r),this.ports[t].device=e},mi.prototype.register_read_consecutive=function(t,e,i,s,r,a){function n(){return i.call(this)|s.call(this)<<8}function o(){return r.call(this)|a.call(this)<<8}function h(){return i.call(this)|s.call(this)<<8|r.call(this)<<16|a.call(this)<<24}ne(4===arguments.length||6===arguments.length),r&&a?(this.register_read(t,e,i,n,h),this.register_read(t+1,e,s),this.register_read(t+2,e,r,o),this.register_read(t+3,e,a)):(this.register_read(t,e,i,n),this.register_read(t+1,e,s))},mi.prototype.register_write_consecutive=function(t,e,i,s,r,a){function n(t){i.call(this,255&t),s.call(this,t>>8&255)}function o(t){r.call(this,255&t),a.call(this,t>>8&255)}function h(t){i.call(this,255&t),s.call(this,t>>8&255),r.call(this,t>>16&255),a.call(this,t>>>24)}ne(4===arguments.length||6===arguments.length),r&&a?(this.register_write(t,e,i,n,h),this.register_write(t+1,e,s),this.register_write(t+2,e,r,o),this.register_write(t+3,e,a)):(this.register_write(t,e,i,n),this.register_write(t+1,e,s))},mi.prototype.mmap_read32_shim=function(t){var e=t>>>17,i=this.cpu.memory_map_read8[e];return i(t)|i(t+1)<<8|i(t+2)<<16|i(t+3)<<24},mi.prototype.mmap_write32_shim=function(t,e){var i=t>>>17,s=this.cpu.memory_map_write8[i];s(t,255&e),s(t+1,e>>8&255),s(t+2,e>>16&255),s(t+3,e>>>24)},mi.prototype.mmap_register=function(t,e,i,s,r,a){re("mmap_register addr="+de(t>>>0,8)+" size="+de(e,8),32),ne(0==(131071&t)),ne(e&&0==(131071&e)),r||(r=this.mmap_read32_shim.bind(this)),a||(a=this.mmap_write32_shim.bind(this));for(var n=t>>>17;e>0;n++)this.cpu.memory_map_read8[n]=i,this.cpu.memory_map_write8[n]=s,this.cpu.memory_map_read32[n]=r,this.cpu.memory_map_write32[n]=a,e-=131072},mi.prototype.port_write8=function(t,e){var i=this.ports[t];return i.write8===this.empty_port_write&&re("write8 port #"+de(t,4)+" <- "+de(e,2)+this.get_port_description(t),32),i.write8.call(i.device,e)},mi.prototype.port_write16=function(t,e){var i=this.ports[t];return i.write16===this.empty_port_write&&re("write16 port #"+de(t,4)+" <- "+de(e,4)+this.get_port_description(t),32),i.write16.call(i.device,e)},mi.prototype.port_write32=function(t,e){var i=this.ports[t];return i.write32===this.empty_port_write&&re("write32 port #"+de(t,4)+" <- "+de(e>>>0,8)+this.get_port_description(t),32),i.write32.call(i.device,e)},mi.prototype.port_read8=function(t){var e=this.ports[t];e.read8===this.empty_port_read8&&re("read8 port #"+de(t,4)+this.get_port_description(t),32);var i=e.read8.call(e.device);return ne(i<256,"8 bit port returned large value: "+de(t)),i},mi.prototype.port_read16=function(t){var e=this.ports[t];e.read16===this.empty_port_read16&&re("read16 port #"+de(t,4)+this.get_port_description(t),32);var i=e.read16.call(e.device);return ne(i<65536&&i>=0,"16 bit port returned large value: "+de(t)),i},mi.prototype.port_read32=function(t){var e=this.ports[t];e.read32===this.empty_port_read32&&re("read32 port #"+de(t,4)+this.get_port_description(t),32);var i=e.read32.call(e.device);return ne((0|i)===i),i};var gi={4:"PORT_DMA_ADDR_2",5:"PORT_DMA_CNT_2",10:"PORT_DMA1_MASK_REG",11:"PORT_DMA1_MODE_REG",12:"PORT_DMA1_CLEAR_FF_REG",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",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"};mi.prototype.get_port_description=function(t){return gi[t]?" ("+gi[t]+")":""};var bi=4273995776,yi=0,vi=16,wi=24,ki=0,xi=32768,Ai=65536,qi=4096,Ii=16384,Ci=-110592,zi=0,Oi=1,Ri=4,Li=5;function Ei(t){this.cpu=t,this.ioredtbl_config=new Int32Array(24),this.ioredtbl_destination=new Int32Array(24);for(var e=0;e<this.ioredtbl_config.length;e++)this.ioredtbl_config[e]=65536;this.ioregsel=0,this.ioapic_id=0,this.irr=0,this.irq_value=0,dbg_assert(MMAP_BLOCK_SIZE>=32),t.io.mmap_register(4273995776,MMAP_BLOCK_SIZE,(t=>{if((t=t-4273995776|0)>=16&&t<20){const e=t-16;return dbg_log("ioapic read8 byte "+e+" "+h(this.ioregsel),LOG_APIC),this.read(this.ioregsel)>>8*e&255}return dbg_log("Unexpected IOAPIC register read: "+h(t>>>0),LOG_APIC),dbg_assert(!1),0}),((t,e)=>{dbg_assert(!1,"unsupported write8 from ioapic: "+h(t>>>0))}),(t=>0===(t=t-4273995776|0)?this.ioregsel:16===t?this.read(this.ioregsel):(dbg_log("Unexpected IOAPIC register read: "+h(t>>>0),LOG_APIC),dbg_assert(!1),0)),((t,e)=>{0===(t=t-4273995776|0)?this.ioregsel=e:16===t?this.write(this.ioregsel,e):(dbg_log("Unexpected IOAPIC register write: "+h(t>>>0)+" <- "+h(e>>>0,8),LOG_APIC),dbg_assert(!1))}))}function Pi(t,e){this.running=!1,this.stopped=!1,this.tick_counter=0,this.worker=null,this.cpu=new Xr(t,e,(()=>{this.idle&&this.next_tick(0)})),this.bus=t,t.register("cpu-init",this.init,this),t.register("cpu-run",this.run,this),t.register("cpu-stop",this.stop,this),t.register("cpu-restart",this.restart,this),this.register_yield()}if(Ei.prototype.remote_eoi=function(t){for(var e=0;e<24;e++){var i=this.ioredtbl_config[e];(255&i)===t&&16384&i&&(dbg_log("Clear remote IRR for irq="+h(e),LOG_APIC),this.ioredtbl_config[e]&=-16385,this.check_irq(e))}},Ei.prototype.check_irq=function(t){var e=1<<t;if(0!=(this.irr&e)){var i=this.ioredtbl_config[t];if(0==(65536&i)){var s=i>>8&7,r=i>>11&1,a=255&i,n=this.ioredtbl_destination[t]>>>24,o=32768==(32768&i);if(0==(32768&i))this.irr&=~e;else if(this.ioredtbl_config[t]|=16384,16384&i)return void dbg_log("No route: level interrupt and remote IRR still set",LOG_APIC);0===s||1===s?this.cpu.devices.apic.route(a,s,o,n,r):dbg_assert(!1,"TODO"),this.ioredtbl_config[t]&=-4097}}},Ei.prototype.set_irq=function(t){if(t>=24)dbg_assert(!1,"Bad irq: "+t,LOG_APIC);else{var e=1<<t;if(0==(this.irq_value&e)){if(APIC_LOG_VERBOSE&&dbg_log("apic set irq "+t,LOG_APIC),this.irq_value|=e,65536==(98304&this.ioredtbl_config[t]))return;this.irr|=e,this.check_irq(t)}}},Ei.prototype.clear_irq=function(t){if(t>=24)dbg_assert(!1,"Bad irq: "+t,LOG_APIC);else{var e=1<<t;if((this.irq_value&e)===e)this.irq_value&=~e,32768&this.ioredtbl_config[t]&&(this.irr&=~e)}},Ei.prototype.read=function(t){if(0===t)return dbg_log("IOAPIC Read id",LOG_APIC),this.ioapic_id<<24;if(1===t)return dbg_log("IOAPIC Read version",LOG_APIC),1507345;if(2===t)return dbg_log("IOAPIC Read arbitration id",LOG_APIC),this.ioapic_id<<24;if(t>=16&&t<64){var e=t-16>>1;if(1&t){var i=this.ioredtbl_destination[e];dbg_log("IOAPIC Read destination irq="+h(e)+" -> "+h(i,8),LOG_APIC)}else{i=this.ioredtbl_config[e];dbg_log("IOAPIC Read config irq="+h(e)+" -> "+h(i,8),LOG_APIC)}return i}return dbg_log("IOAPIC register read outside of range "+h(t),LOG_APIC),dbg_assert(!1),0},Ei.prototype.write=function(t,e){if(0===t)this.ioapic_id=e>>>24&15;else if(1===t||2===t)dbg_log("Invalid write: "+t,LOG_APIC);else if(t>=16&&t<64){var i=t-16>>1;if(1&t)this.ioredtbl_destination[i]=4278190080&e,dbg_log("Write destination "+h(e>>>0,8)+" irq="+h(i)+" dest="+h(e>>>24,2),LOG_APIC);else{var s=this.ioredtbl_config[i];this.ioredtbl_config[i]=110591&e|-110592&s;var r=255&e,a=e>>8&7,n=e>>11&1,o=e>>15&1,_=e>>16&1;dbg_log("Write config "+h(e>>>0,8)+" irq="+h(i)+" vector="+h(r,2)+" deliverymode="+DELIVERY_MODES[a]+" destmode="+DESTINATION_MODES[n]+" is_level="+o+" disabled="+_,LOG_APIC),this.check_irq(i)}}else dbg_log("IOAPIC register write outside of range "+h(t)+": "+h(e>>>0,8),LOG_APIC),dbg_assert(!1)},Ei.prototype.get_state=function(){var t=[];return t[0]=this.ioredtbl_config,t[1]=this.ioredtbl_destination,t[2]=this.ioregsel,t[3]=this.ioapic_id,t[4]=this.irr,t[5]=this.irq_value,t},Ei.prototype.set_state=function(t){this.ioredtbl_config=t[0],this.ioredtbl_destination=t[1],this.ioregsel=t[2],this.ioapic_id=t[3],this.irr=t[4],this.irq_value=t[5]},Pi.prototype.run=function(){this.stopped=!1,this.running||(this.running=!0,this.bus.send("emulator-started")),this.next_tick(0)},Pi.prototype.do_tick=function(){if(this.stopped||!this.running)return this.stopped=this.running=!1,void this.bus.send("emulator-stopped");this.idle=!1;const t=this.cpu.main_run();this.next_tick(t)},Pi.prototype.next_tick=function(t){const e=++this.tick_counter;this.idle=!0,this.yield(t,e)},Pi.prototype.yield_callback=function(t){t===this.tick_counter&&this.do_tick()},Pi.prototype.stop=function(){this.running&&(this.stopped=!0)},Pi.prototype.destroy=function(){this.unregister_yield()},Pi.prototype.restart=function(){this.cpu.reset_cpu(),this.cpu.load_bios()},Pi.prototype.init=function(t){this.cpu.init(t,this.bus),this.bus.send("emulator-ready")},"undefined"!=typeof process&&global.setImmediate)Pi.prototype.yield=function(t,e){t<1?global.setImmediate((t=>this.yield_callback(t)),e):setTimeout((t=>this.yield_callback(t)),t,e)},Pi.prototype.register_yield=function(){},Pi.prototype.unregister_yield=function(){};else if("undefined"!=typeof Worker){function Ti(){globalThis.onmessage=function(t){const e=t.data.t;e<1?postMessage(t.data.tick):setTimeout((()=>postMessage(t.data.tick)),e)}}Pi.prototype.register_yield=function(){const t=URL.createObjectURL(new Blob(["("+Ti.toString()+")()"],{type:"text/javascript"}));this.worker=new Worker(t),this.worker.onmessage=t=>this.yield_callback(t.data),URL.revokeObjectURL(t)},Pi.prototype.yield=function(t,e){this.worker.postMessage({t:t,tick:e})},Pi.prototype.unregister_yield=function(){this.worker.terminate(),this.worker=null}}else Pi.prototype.yield=function(t){setTimeout((()=>{this.do_tick()}),t)},Pi.prototype.register_yield=function(){},Pi.prototype.unregister_yield=function(){};Pi.prototype.save_state=function(){return this.cpu.save_state()},Pi.prototype.restore_state=function(t){return this.cpu.restore_state(t)},"object"==typeof performance&&performance.now?Pi.microtick=performance.now.bind(performance):"object"==typeof process&&process.hrtime?Pi.microtick=function(){var t=process.hrtime();return 1e3*t[0]+t[1]/1e6}:Pi.microtick=Date.now;const Di=!1;var Ui=0,Gi=1,Si=1,Mi=2,Fi=2,Vi=3,Bi=4,Ni=4,Wi=5,ji=5,Ki=6,Xi=6,Hi=7,Yi=8,Qi=8,Ji=9,Zi=9,$i=10,ts=11,es=12,is=12,ss=13,rs=13,as=14,ns=14,os=15,hs=15,_s=16,ds=31,cs=1,us=2,ps=4,ls=8,fs=16,ms=32,gs=64,bs=128,ys=63,vs=1,ws=64,ks=76,xs=128;function As(t,e,i){this.cpu=t,this.pci=t.devices.pci,this.preserve_mac_from_state_image=i,this.bus=e,this.bus.register("net0-receive",(function(t){this.receive(t)}),this),this.port=768,this.name="ne2k",this.pci_space=[236,16,41,128,3,1,0,0,0,0,0,2,0,0,0,0,255&this.port|1,this.port>>8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,0,17,0,0,184,254,0,0,0,0,0,0,0,0,0,1,0,0],this.pci_id=40,this.pci_bars=[{size:32}],this.isr=0,this.imr=0,this.cr=1,this.dcfg=0,this.rcnt=0,this.tcnt=0,this.tpsr=0,this.memory=new Uint8Array(32768),this.rxcr=0,this.txcr=0,this.tsr=1,this.mac=new Uint8Array([0,34,21,255*Math.random()|0,255*Math.random()|0,255*Math.random()|0]);for(var s=0;s<6;s++)this.memory[s<<1]=this.memory[s<<1|1]=this.mac[s];this.memory[28]=this.memory[29]=87,this.memory[30]=this.memory[31]=87,re("Mac: "+de(this.mac[0],2)+":"+de(this.mac[1],2)+":"+de(this.mac[2],2)+":"+de(this.mac[3],2)+":"+de(this.mac[4],2)+":"+de(this.mac[5],2),1048576),this.rsar=0,this.pstart=64,this.pstop=128,this.curpg=76,this.boundary=76;var r=t.io;r.register_read(0|this.port,this,(function(){return re("Read cmd",1048576),this.cr})),r.register_write(0|this.port,this,(function(t){if(this.cr=t,re("Write command: "+de(t,2)+" newpg="+(this.cr>>6)+" txcr="+de(this.txcr,2),1048576),!(1&this.cr)&&(24&t&&0===this.rcnt&&this.do_interrupt(64),4&t)){var e=this.tpsr<<8,i=this.memory.subarray(e,e+this.tcnt);this.bus.send("net0-send",i),this.bus.send("eth-transmit-end",[i.length]),this.cr&=-5,this.do_interrupt(2),re("Command: Transfer. length="+de(i.byteLength),1048576)}})),r.register_read(13|this.port,this,(function(){return re("Read counter0",1048576),0})),r.register_read(14|this.port,this,(function(){return re("Read counter1",1048576),0})),r.register_read(15|this.port,this,(function(){return re("Read counter2",1048576),0})),r.register_read(31|this.port,this,(function(){var t=this.get_page();return 0===t?(re("Read reset",1048576),this.do_interrupt(128)):(re("Read pg"+t+"/1f",1048576),ne(!1)),0})),r.register_write(31|this.port,this,(function(t){var e=this.get_page();0===e?re("Write reset: "+de(t,2),1048576):(re("Write pg"+e+"/1f: "+de(t),1048576),ne(!1))})),r.register_read(1|this.port,this,(function(){var t=this.get_page();return 0===t?this.pstart:1===t?(re("Read pg1/01 (mac[0])",1048576),this.mac[0]):2===t?this.pstart:(re("Read pg"+t+"/01"),ne(!1),0)})),r.register_write(1|this.port,this,(function(t){var e=this.get_page();0===e?(re("start page: "+de(t,2),1048576),this.pstart=t):1===e?(re("mac[0] = "+de(t),1048576),this.mac[0]=t):3===e?re("Unimplemented: Write pg3/01 (9346CR): "+de(t),1048576):(re("Write pg"+e+"/01: "+de(t),1048576),ne(!1))})),r.register_read(2|this.port,this,(function(){var t=this.get_page();return 0===t?this.pstop:1===t?(re("Read pg1/02 (mac[1])",1048576),this.mac[1]):2===t?this.pstop:(re("Read pg"+t+"/02",1048576),ne(!1),0)})),r.register_write(2|this.port,this,(function(t){var e=this.get_page();0===e?(re("stop page: "+de(t,2),1048576),t>this.memory.length>>8&&(t=this.memory.length>>8,re("XXX: Adjusting stop page to "+de(t),1048576)),this.pstop=t):1===e?(re("mac[1] = "+de(t),1048576),this.mac[1]=t):(re("Write pg"+e+"/02: "+de(t),1048576),ne(!1))})),r.register_read(7|this.port,this,(function(){var t=this.get_page();return 0===t?(re("Read isr: "+de(this.isr,2),1048576),this.isr):1===t?(re("Read curpg: "+de(this.curpg,2),1048576),this.curpg):void ne(!1)})),r.register_write(7|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write isr: "+de(t,2),1048576),this.isr&=~t,this.update_irq()):1===e?(re("Write curpg: "+de(t,2),1048576),this.curpg=t):ne(!1)})),r.register_write(13|this.port,this,(function(t){var e=this.get_page();0===e?(this.txcr=t,re("Write tx config: "+de(t,2),1048576)):re("Unimplemented: Write pg"+e+"/0d "+de(t,2),1048576)})),r.register_write(14|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write data configuration: "+de(t,2),1048576),this.dcfg=t):re("Unimplemented: Write pg"+e+"/0e "+de(t,2),1048576)})),r.register_read(10|this.port,this,(function(){return 0===this.get_page()?(re("Read pg0/0a",1048576),80):(ne(!1,"TODO"),0)})),r.register_write(10|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write remote byte count low: "+de(t,2),1048576),this.rcnt=65280&this.rcnt|255&t):re("Unimplemented: Write pg"+e+"/0a "+de(t,2),1048576)})),r.register_read(11|this.port,this,(function(){return 0===this.get_page()?(re("Read pg0/0b",1048576),67):(ne(!1,"TODO"),0)})),r.register_write(11|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write remote byte count high: "+de(t,2),1048576),this.rcnt=255&this.rcnt|t<<8&65280):re("Unimplemented: Write pg"+e+"/0b "+de(t,2),1048576)})),r.register_read(8|this.port,this,(function(){var t=this.get_page();if(0===t)return re("Read remote start address low",1048576),255&this.rsar;re("Unimplemented: Read pg"+t+"/08",1048576),ne(!1)})),r.register_write(8|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write remote start address low: "+de(t,2),1048576),this.rsar=65280&this.rsar|255&t):re("Unimplemented: Write pg"+e+"/08 "+de(t,2),1048576)})),r.register_read(9|this.port,this,(function(){var t=this.get_page();if(0===t)return re("Read remote start address high",1048576),this.rsar>>8&255;re("Unimplemented: Read pg"+t+"/09",1048576),ne(!1)})),r.register_write(9|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write remote start address low: "+de(t,2),1048576),this.rsar=255&this.rsar|t<<8&65280):re("Unimplemented: Write pg"+e+"/09 "+de(t,2),1048576)})),r.register_write(15|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write interrupt mask register: "+de(t,2)+" isr="+de(this.isr,2),1048576),this.imr=t,this.update_irq()):re("Unimplemented: Write pg"+e+"/0f "+de(t,2),1048576)})),r.register_read(3|this.port,this,(function(){var t=this.get_page();return 0===t?(re("Read boundary: "+de(this.boundary,2),1048576),this.boundary):1===t?(re("Read pg1/03 (mac[2])",1048576),this.mac[2]):3===t?(re("Unimplemented: Read pg3/03 (CONFIG0)",1048576),0):(re("Read pg"+t+"/03",1048576),ne(!1),0)})),r.register_write(3|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write boundary: "+de(t,2),1048576),this.boundary=t):1===e?(re("mac[2] = "+de(t),1048576),this.mac[2]=t):(re("Write pg"+e+"/03: "+de(t),1048576),ne(!1))})),r.register_read(4|this.port,this,(function(){var t=this.get_page();return 0===t?this.tsr:1===t?(re("Read pg1/04 (mac[3])",1048576),this.mac[3]):(re("Read pg"+t+"/04",1048576),ne(!1),0)})),r.register_write(4|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write tpsr: "+de(t,2),1048576),this.tpsr=t):1===e?(re("mac[3] = "+de(t),1048576),this.mac[3]=t):(re("Write pg"+e+"/04: "+de(t),1048576),ne(!1))})),r.register_read(5|this.port,this,(function(){var t=this.get_page();return 0===t?(re("Unimplemented: Read pg0/05 (NCR: Number of Collisions Register)",1048576),0):1===t?(re("Read pg1/05 (mac[4])",1048576),this.mac[4]):3===t?(re("Unimplemented: Read pg3/05 (CONFIG2)",1048576),0):(re("Read pg"+t+"/05",1048576),ne(!1),0)})),r.register_write(5|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write tcnt low: "+de(t,2),1048576),this.tcnt=-256&this.tcnt|t):1===e?(re("mac[4] = "+de(t),1048576),this.mac[4]=t):3===e?re("Unimplemented: Write pg3/05 (CONFIG2): "+de(t),1048576):(re("Write pg"+e+"/05: "+de(t),1048576),ne(!1))})),r.register_read(6|this.port,this,(function(){var t=this.get_page();return 0===t?(ne(!1,"TODO"),0):1===t?(re("Read pg1/06 (mac[5])",1048576),this.mac[5]):3===t?(re("Unimplemented: Read pg3/06 (CONFIG3)",1048576),0):(re("Read pg"+t+"/06",1048576),ne(!1),0)})),r.register_write(6|this.port,this,(function(t){var e=this.get_page();0===e?(re("Write tcnt high: "+de(t,2),1048576),this.tcnt=255&this.tcnt|t<<8):1===e?(re("mac[5] = "+de(t),1048576),this.mac[5]=t):3===e?re("Unimplemented: Write pg3/06 (CONFIG3): "+de(t),1048576):(re("Write pg"+e+"/06: "+de(t),1048576),ne(!1))})),r.register_read(12|this.port,this,(function(){var t=this.get_page();return 0===t?9:(re("Unimplemented: Read pg"+t+"/0c",1048576),ne(!1),0)})),r.register_write(12|this.port,this,(function(t){var e=this.get_page();0===e?(re("RX configuration reg write: "+de(t,2),1048576),this.rxcr=t):re("Unimplemented: Write pg"+e+"/0c: "+de(t),1048576)})),r.register_read(16|this.port,this,this.data_port_read8,this.data_port_read16,this.data_port_read32),r.register_write(16|this.port,this,this.data_port_write16,this.data_port_write16,this.data_port_write32),t.devices.pci.register_device(this)}As.prototype.get_state=function(){var t=[];return t[0]=this.isr,t[1]=this.imr,t[2]=this.cr,t[3]=this.dcfg,t[4]=this.rcnt,t[5]=this.tcnt,t[6]=this.tpsr,t[7]=this.rsar,t[8]=this.pstart,t[9]=this.curpg,t[10]=this.boundary,t[11]=this.pstop,t[12]=this.rxcr,t[13]=this.txcr,t[14]=this.tsr,t[15]=this.mac,t[16]=this.memory,t},As.prototype.set_state=function(t){this.isr=t[0],this.imr=t[1],this.cr=t[2],this.dcfg=t[3],this.rcnt=t[4],this.tcnt=t[5],this.tpsr=t[6],this.rsar=t[7],this.pstart=t[8],this.curpg=t[9],this.boundary=t[10],this.pstop=t[11],this.rxcr=t[12],this.txcr=t[13],this.tsr=t[14],this.preserve_mac_from_state_image&&(this.mac=t[15],this.memory=t[16])},As.prototype.do_interrupt=function(t){re("Do interrupt "+de(t,2),1048576),this.isr|=t,this.update_irq()},As.prototype.update_irq=function(){this.imr&this.isr?this.pci.raise_irq(this.pci_id):this.pci.lower_irq(this.pci_id)},As.prototype.data_port_write=function(t){(this.rsar<=16||this.rsar>=16384&&this.rsar<32768)&&(this.memory[this.rsar]=t),this.rsar++,this.rcnt--,this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-this.pstop<<8),0===this.rcnt&&this.do_interrupt(64)},As.prototype.data_port_write16=function(t){this.data_port_write(t),1&this.dcfg&&this.data_port_write(t>>8)},As.prototype.data_port_write32=function(t){this.data_port_write(t),this.data_port_write(t>>8),this.data_port_write(t>>16),this.data_port_write(t>>24)},As.prototype.data_port_read=function(){let t=0;return this.rsar<32768&&(t=this.memory[this.rsar]),this.rsar++,this.rcnt--,this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-this.pstop<<8),0===this.rcnt&&this.do_interrupt(64),t},As.prototype.data_port_read8=function(){return 255&this.data_port_read16()},As.prototype.data_port_read16=function(){return 1&this.dcfg?this.data_port_read()|this.data_port_read()<<8:this.data_port_read()},As.prototype.data_port_read32=function(){return this.data_port_read()|this.data_port_read()<<8|this.data_port_read()<<16|this.data_port_read()<<24},As.prototype.receive=function(t){if(1&this.cr)return;if(this.bus.send("eth-receive-end",[t.length]),16&this.rxcr);else if(4&this.rxcr&&255===t[0]&&255===t[1]&&255===t[2]&&255===t[3]&&255===t[4]&&255===t[5]);else{if(8&this.rxcr&&1==(1&t[0]))return;if(t[0]!==this.mac[0]||t[1]!==this.mac[1]||t[2]!==this.mac[2]||t[3]!==this.mac[3]||t[4]!==this.mac[4]||t[5]!==this.mac[5])return}var e=Math.max(60,t.length),i=this.curpg<<8,s=e+4,r=i+4,a=this.curpg+1+(s>>8),n=i+s;const o=1+(s>>8),h=this.boundary>this.curpg?this.boundary-this.curpg:this.pstop-this.curpg+this.boundary-this.pstart;if(h<o&&0!==this.boundary)re("Buffer full, dropping packet pstart="+de(this.pstart)+" pstop="+de(this.pstop)+" curpg="+de(this.curpg)+" needed="+de(o)+" boundary="+de(this.boundary)+" available="+de(h),1048576);else{if(n>this.pstop<<8){ne(t.length>=60);var _=(this.pstop<<8)-r;ne(_>=0),this.memory.set(t.subarray(0,_),r),this.memory.set(t.subarray(_),this.pstart<<8),re("rcv cut="+de(_),1048576)}else this.memory.set(t,r),t.length<60&&this.memory.fill(0,r+t.length,r+60);a>=this.pstop&&(a+=this.pstart-this.pstop),this.memory[i]=1,this.memory[i+1]=a,this.memory[i+2]=s,this.memory[i+3]=s>>8,this.curpg=a,re("rcv offset="+de(i)+" len="+de(s)+" next="+de(a),1048576),this.do_interrupt(1)}},As.prototype.get_page=function(){return this.cr>>6&3};var qs=3320,Is=3324;function Cs(t){this.pci_addr=new Uint8Array(4),this.pci_value=new Uint8Array(4),this.pci_response=new Uint8Array(4),this.pci_status=new Uint8Array(4),this.pci_addr32=new Int32Array(this.pci_addr.buffer),this.pci_value32=new Int32Array(this.pci_value.buffer),this.pci_response32=new Int32Array(this.pci_response.buffer),this.pci_status32=new Int32Array(this.pci_status.buffer),this.device_spaces=[],this.devices=[],this.cpu=t;for(var e=0;e<256;e++)this.device_spaces[e]=void 0,this.devices[e]=void 0;this.io=t.io,t.io.register_write(3324,this,(function(t){this.pci_write8(this.pci_addr32[0],t)}),(function(t){this.pci_write16(this.pci_addr32[0],t)}),(function(t){this.pci_write32(this.pci_addr32[0],t)})),t.io.register_write(3325,this,(function(t){this.pci_write8(this.pci_addr32[0]+1|0,t)})),t.io.register_write(3326,this,(function(t){this.pci_write8(this.pci_addr32[0]+2|0,t)}),(function(t){this.pci_write16(this.pci_addr32[0]+2|0,t)})),t.io.register_write(3327,this,(function(t){this.pci_write8(this.pci_addr32[0]+3|0,t)})),t.io.register_read_consecutive(3324,this,(function(){return this.pci_response[0]}),(function(){return this.pci_response[1]}),(function(){return this.pci_response[2]}),(function(){return this.pci_response[3]})),t.io.register_read_consecutive(3320,this,(function(){return this.pci_status[0]}),(function(){return this.pci_status[1]}),(function(){return this.pci_status[2]}),(function(){return this.pci_status[3]})),t.io.register_write_consecutive(3320,this,(function(t){this.pci_addr[0]=252&t}),(function(e){if(2==(6&this.pci_addr[1])&&6==(6&e))return re("CPU reboot via PCI"),void t.reboot_internal();this.pci_addr[1]=e}),(function(t){this.pci_addr[2]=t}),(function(t){this.pci_addr[3]=t,this.pci_query()}));var i={pci_id:0,pci_space:[134,128,55,18,0,0,0,0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0],pci_bars:[],name:"82441FX PMC"};this.register_device(i),this.isa_bridge={pci_id:8,pci_space:[134,128,0,112,7,0,0,2,0,0,1,6,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],pci_bars:[],name:"82371SB PIIX3 ISA"},this.isa_bridge_space=this.register_device(this.isa_bridge),this.isa_bridge_space8=new Uint8Array(this.isa_bridge_space.buffer)}Cs.prototype.get_state=function(){for(var t=[],e=0;e<256;e++)t[e]=this.device_spaces[e];return t[256]=this.pci_addr,t[257]=this.pci_value,t[258]=this.pci_response,t[259]=this.pci_status,t},Cs.prototype.set_state=function(t){for(var e=0;e<256;e++){var i=this.devices[e],s=t[e];if(i&&s){for(var r=0;r<i.pci_bars.length;r++){var a=s[4+r];if(1&a){var n=i.pci_bars[r],o=-2&n.original_bar&65535,h=-2&a&65535;this.set_io_bars(n,o,h)}}this.device_spaces[e].set(s)}else i&&re("Warning: While restoring PCI device: Device exists in current configuration but not in snapshot ("+i.name+")"),s&&re("Warning: While restoring PCI device: Device doesn't exist in current configuration but does in snapshot (device "+de(e,2)+")")}this.pci_addr.set(t[256]),this.pci_value.set(t[257]),this.pci_response.set(t[258]),this.pci_status.set(t[259])},Cs.prototype.pci_query=function(){var t="query",e=this.pci_addr[2]<<8|this.pci_addr[1],i=252&this.pci_addr[0],s=e>>3&31;t+=" enabled="+(this.pci_addr[3]>>7),t+=" bdf="+de(e,4),t+=" dev="+de(s,2),t+=" addr="+de(i,2);var r=this.device_spaces[e];void 0!==r?(this.pci_status32[0]=-2147483648,i<r.byteLength?this.pci_response32[0]=r[i>>2]:this.pci_response32[0]=0,t+=" "+de(this.pci_addr32[0]>>>0,8)+" -> "+de(this.pci_response32[0]>>>0,8),i>=r.byteLength&&(t+=" (undef)"),t+=" ("+this.devices[e].name+")",re(t,2048)):(this.pci_response32[0]=-1,this.pci_status32[0]=0)},Cs.prototype.pci_write8=function(t,e){var i=t>>8&65535,s=255&t,r=new Uint8Array(this.device_spaces[i].buffer),a=this.devices[i];r&&(ne(!(s>=16&&s<44||s>=48&&s<52),"PCI: Expected 32-bit write, got 8-bit (addr: "+de(s)+")"),re("PCI write8 dev="+de(i>>3,2)+" ("+a.name+") addr="+de(s,4)+" value="+de(e,2),2048),r[s]=e)},Cs.prototype.pci_write16=function(t,e){ne(0==(1&t));var i=t>>8&65535,s=255&t,r=new Uint16Array(this.device_spaces[i].buffer),a=this.devices[i];r&&(s>=16&&s<44?re("Warning: PCI: Expected 32-bit write, got 16-bit (addr: "+de(s)+")"):(ne(!(s>=48&&s<52),"PCI: Expected 32-bit write, got 16-bit (addr: "+de(s)+")"),re("PCI writ16 dev="+de(i>>3,2)+" ("+a.name+") addr="+de(s,4)+" value="+de(e,4),2048),r[s>>>1]=e))},Cs.prototype.pci_write32=function(t,e){ne(0==(3&t));var i=t>>8&65535,s=255&t,r=this.device_spaces[i],a=this.devices[i];if(r)if(s>=16&&s<40){var n=s-16>>2,o=a.pci_bars[n];if(re("BAR"+n+" exists="+(o?"y":"n")+" changed to "+de(e>>>0)+" dev="+de(i>>3,2)+" ("+a.name+") ",2048),o){ne(!(o.size&o.size-1),"bar size should be power of 2");var h=s>>2,_=1&r[h];if(-1==(3|e|o.size-1))e=~(o.size-1)|_,0===_&&(r[h]=e);else if(0===_){var d=o.original_bar;(-16&e)!=(-16&d)&&re("Warning: Changing memory bar not supported, ignored",2048),r[h]=d}if(1===_){ne(1===_);var c=-2&r[h]&65535,u=-2&e&65535;re("io bar changed from "+de(c>>>0,8)+" to "+de(u>>>0,8)+" size="+o.size,2048),this.set_io_bars(o,c,u),r[h]=1|e}}else r[s>>2]=0;re("BAR effective value: "+de(r[s>>2]>>>0),2048)}else 48===s?(re("PCI write rom address dev="+de(i>>3,2)+" ("+a.name+") value="+de(e>>>0,8),2048),a.pci_rom_size?r[s>>2]=-1==(2047|e)?0|-a.pci_rom_size:0|a.pci_rom_address:r[s>>2]=0):4===s?re("PCI write dev="+de(i>>3,2)+" ("+a.name+") addr="+de(s,4)+" value="+de(e>>>0,8),2048):(re("PCI write dev="+de(i>>3,2)+" ("+a.name+") addr="+de(s,4)+" value="+de(e>>>0,8),2048),r[s>>>2]=e)},Cs.prototype.register_device=function(t){ne(void 0!==t.pci_id),ne(void 0!==t.pci_space),ne(void 0!==t.pci_bars);var e=t.pci_id;re("PCI register bdf="+de(e)+" ("+t.name+")",2048),ne(!this.devices[e]),ne(t.pci_space.length>=64),ne(e<this.devices.length);var i=new Int32Array(64);i.set(new Int32Array(new Uint8Array(t.pci_space).buffer)),this.device_spaces[e]=i,this.devices[e]=t;for(var s=i.slice(4,10),r=0;r<t.pci_bars.length;r++){var a=t.pci_bars[r];if(a){var n=s[r],o=1&n;if(a.original_bar=n,a.entries=[],0===o);else{ne(1===o);for(var h=-2&n,_=0;_<a.size;_++)a.entries[_]=this.io.ports[h+_]}}}return i},Cs.prototype.set_io_bars=function(t,e,i){var s=t.size;re("Move io bars: from="+de(e)+" to="+de(i)+" count="+s,2048);for(var r=this.io.ports,a=0;a<s;a++){var n=r[e+a];r[e+a]=this.io.create_empty_entry(),n.read8===this.io.empty_port_read8&&n.read16===this.io.empty_port_read16&&n.read32===this.io.empty_port_read32&&n.write8===this.io.empty_port_write&&n.write16===this.io.empty_port_write&&n.write32===this.io.empty_port_write&&re("Warning: Bad IO bar: Source not mapped, port="+de(e+a,4),2048);var o=t.entries[a],h=r[i+a];ne(o&&h),r[i+a]=o,h.read8!==this.io.empty_port_read8&&h.read16!==this.io.empty_port_read16&&h.read32!==this.io.empty_port_read32&&h.write8!==this.io.empty_port_write&&h.write16!==this.io.empty_port_write&&h.write32!==this.io.empty_port_write||re("Warning: Bad IO bar: Target already mapped, port="+de(i+a,4),2048)}},Cs.prototype.raise_irq=function(t){var e=this.device_spaces[t];ne(e);var i=(e[15]>>8&255)-1+((t>>3)-1&255)&3,s=this.isa_bridge_space8[96+i];this.cpu.device_raise_irq(s)},Cs.prototype.lower_irq=function(t){var e=this.device_spaces[t];ne(e);var i=(e[15]>>8&255)+(t>>3&255)-2&3,s=this.isa_bridge_space8[96+i];this.cpu.device_lower_irq(s)};var zs=!1;function Os(t,e){var i,s;this.irq_mask=0,this.irq_map=0,this.isr=0,this.irr=0,this.irq_value=0,this.requested_irq=-1,this.master=e,this.is_master=void 0===this.master,this.slave=void 0,this.name=this.is_master?"master":"slave ",this.expect_icw4=!1,this.state=0,this.read_isr=0,this.auto_eoi=1,this.special_mask_mode=0,this.elcr=0,this.cpu=t,this.is_master?(this.slave=new Os(this.cpu,this),this.check_irqs=function(){if(this.requested_irq>=0)this.cpu.handle_irqs();else{var t=this.irr&this.irq_mask;if(t){var e=t&-t,i=this.special_mask_mode?this.irq_mask:-1;if(this.isr&&(this.isr&-this.isr&i)<=e)re("master> higher prio: isr="+de(this.isr,2)+" mask="+de(255&this.irq_mask,2)+" irq="+de(e,2),128);else{ne(0!==e);var s=_e.int_log2_byte(e);ne(e===1<<s),this.requested_irq=s,this.cpu.handle_irqs()}}}},this.acknowledge_irq=function(){if(-1!==this.requested_irq)if(0!==this.irr){ne(this.irr),ne(this.requested_irq>=0);var t=1<<this.requested_irq;0==(this.elcr&t)&&(this.irr&=~t),this.auto_eoi||(this.isr|=t),2===this.requested_irq?this.slave.acknowledge_irq():this.cpu.pic_call_irq(this.irq_map|this.requested_irq),this.requested_irq=-1,this.check_irqs()}else this.requested_irq=-1}):(this.check_irqs=function(){if(this.requested_irq>=0)this.cpu.handle_irqs();else{var t=this.irr&this.irq_mask;if(t){var e=t&-t,i=this.special_mask_mode?this.irq_mask:-1;if(!(this.isr&&(this.isr&-this.isr&i)<=e)){ne(0!==e);var s=_e.int_log2_byte(e);ne(e===1<<s),this.requested_irq=s,this.master.set_irq(2)}}}},this.acknowledge_irq=function(){if(-1!==this.requested_irq){if(0===this.irr)return this.requested_irq=-1,this.master.irq_value&=-5,void this.cpu.pic_call_irq(7|this.irq_map);ne(this.irr),ne(this.requested_irq>=0);var t=1<<this.requested_irq;0==(this.elcr&t)&&(this.irr&=~t),this.auto_eoi||(this.isr|=t),this.master.irq_value&=-5,this.cpu.pic_call_irq(this.irq_map|this.requested_irq),this.requested_irq=-1,this.check_irqs()}}),this.dump=function(){re("mask: "+de(255&this.irq_mask),128),re("base: "+de(this.irq_map),128),re("requested: "+de(this.irr),128),re("serviced: "+de(this.isr),128),this.is_master&&this.slave.dump()},this.is_master?(i=32,s=1232):(i=160,s=1233),this.cpu.io.register_write(i,this,this.port20_write),this.cpu.io.register_read(i,this,this.port20_read),this.cpu.io.register_write(1|i,this,this.port21_write),this.cpu.io.register_read(1|i,this,this.port21_read),this.cpu.io.register_write(s,this,this.port4D0_write),this.cpu.io.register_read(s,this,this.port4D0_read),this.is_master?(this.set_irq=function(t){if(ne(t>=0&&t<16),t>=8)this.slave.set_irq(t-8);else{var e=1<<t;0==(this.irq_value&e)&&(this.irr|=e,this.irq_value|=e,this.check_irqs())}},this.clear_irq=function(t){if(ne(t>=0&&t<16),t>=8)this.slave.clear_irq(t-8);else{var e=1<<t;this.irq_value&e&&(this.irq_value&=~e,this.irr&=~e,this.check_irqs())}}):(this.set_irq=function(t){ne(t>=0&&t<8);var e=1<<t;0==(this.irq_value&e)&&(this.irr|=e,this.irq_value|=e,this.check_irqs())},this.clear_irq=function(t){ne(t>=0&&t<8);var e=1<<t;this.irq_value&e&&(this.irq_value&=~e,this.irr&=~e,this.check_irqs())}),this.get_isr=function(){return this.isr}}Os.prototype.get_state=function(){var t=[];return t[0]=this.irq_mask,t[1]=this.irq_map,t[2]=this.isr,t[3]=this.irr,t[4]=this.is_master,t[5]=this.slave,t[6]=this.expect_icw4,t[7]=this.state,t[8]=this.read_isr,t[9]=this.auto_eoi,t[10]=this.elcr,t},Os.prototype.set_state=function(t){this.irq_mask=t[0],this.irq_map=t[1],this.isr=t[2],this.irr=t[3],this.is_master=t[4],this.slave&&this.slave.set_state(t[5]),this.expect_icw4=t[6],this.state=t[7],this.read_isr=t[8],this.auto_eoi=t[9],this.elcr=t[10]},Os.prototype.port20_write=function(t){if(16&t)re("icw1 = "+de(t),128),this.isr=0,this.irr=0,this.irq_mask=0,this.irq_value=0,this.auto_eoi=1,this.requested_irq=-1,this.expect_icw4=1&t,this.state=1;else if(8&t)re("ocw3: "+de(t),128),2&t&&(this.read_isr=1&t),4&t&&ne(!1,"unimplemented: polling"),64&t&&(this.special_mask_mode=32==(32&t),re("special mask mode: "+this.special_mask_mode,128));else{re("eoi: "+de(t)+" ("+this.name+")",128);var e=t>>5;if(1===e)this.isr&=this.isr-1,re("new isr: "+de(this.isr,2),128);else if(3===e)this.isr&=~(1<<(7&t));else if(192==(200&t)){re("lowest priority: "+de(7&t),128)}else re("Unknown eoi: "+de(t),128),ne(!1),this.isr&=this.isr-1;this.check_irqs()}},Os.prototype.port20_read=function(){return this.read_isr?(re("read port 20h (isr): "+de(this.isr),128),this.isr):(re("read port 20h (irr): "+de(this.irr),128),this.irr)},Os.prototype.port21_write=function(t){0===this.state?this.expect_icw4?(this.expect_icw4=!1,this.auto_eoi=2&t,re("icw4: "+de(t)+" autoeoi="+this.auto_eoi,128),0==(1&t)&&ne(!1,"unimplemented: not 8086 mode")):(this.irq_mask=~t,this.check_irqs()):1===this.state?(this.irq_map=t,re("interrupts are mapped to "+de(this.irq_map)+" ("+this.name+")",128),this.state++):2===this.state&&(this.state=0,re("icw3: "+de(t),128))},Os.prototype.port21_read=function(){return re("21h read "+de(255&~this.irq_mask),128),255&~this.irq_mask},Os.prototype.port4D0_read=function(){return re("elcr read: "+de(this.elcr,2),128),this.elcr},Os.prototype.port4D0_write=function(t){re("elcr write: "+de(t,2),128),this.elcr=t};var Rs=1193.1816666;function Ls(t,e){this.cpu=t,this.bus=e,this.counter_start_time=new Float64Array(3),this.counter_start_value=new Uint16Array(3),this.counter_next_low=new Uint8Array(4),this.counter_enabled=new Uint8Array(4),this.counter_mode=new Uint8Array(4),this.counter_read_mode=new Uint8Array(4),this.counter_latch=new Uint8Array(4),this.counter_latch_value=new Uint16Array(3),this.counter_reload=new Uint16Array(3),t.io.register_read(97,this,(function(){var t=Pi.microtick();return(t*(1e6/15e3)&1)<<4|this.did_rollover(2,t)<<5})),t.io.register_write(97,this,(function(t){1&t?this.bus.send("pcspeaker-enable"):this.bus.send("pcspeaker-disable")})),t.io.register_read(64,this,(function(){return this.counter_read(0)})),t.io.register_read(65,this,(function(){return this.counter_read(1)})),t.io.register_read(66,this,(function(){return this.counter_read(2)})),t.io.register_write(64,this,(function(t){this.counter_write(0,t)})),t.io.register_write(65,this,(function(t){this.counter_write(1,t)})),t.io.register_write(66,this,(function(t){this.counter_write(2,t),this.bus.send("pcspeaker-update",[this.counter_mode[2],this.counter_reload[2]])})),t.io.register_write(67,this,this.port43_write)}Ls.prototype.get_state=function(){var t=[];return t[0]=this.counter_next_low,t[1]=this.counter_enabled,t[2]=this.counter_mode,t[3]=this.counter_read_mode,t[4]=this.counter_latch,t[5]=this.counter_latch_value,t[6]=this.counter_reload,t[7]=this.counter_start_time,t[8]=this.counter_start_value,t},Ls.prototype.set_state=function(t){this.counter_next_low=t[0],this.counter_enabled=t[1],this.counter_mode=t[2],this.counter_read_mode=t[3],this.counter_latch=t[4],this.counter_latch_value=t[5],this.counter_reload=t[6],this.counter_start_time=t[7],this.counter_start_value=t[8]},Ls.prototype.timer=function(t,e){var i=100;if(!e){if(this.counter_enabled[0]&&this.did_rollover(0,t))this.counter_start_value[0]=this.get_counter_value(0,t),this.counter_start_time[0]=t,re("pit interrupt. new value: "+this.counter_start_value[0],512),this.cpu.device_lower_irq(0),this.cpu.device_raise_irq(0),0===this.counter_mode[0]&&(this.counter_enabled[0]=0);else this.cpu.device_lower_irq(0);if(this.counter_enabled[0]){const e=t-this.counter_start_time[0],s=Math.floor(1193.1816666*e);i=(this.counter_start_value[0]-s)/1193.1816666}}return i},Ls.prototype.get_counter_value=function(t,e){if(!this.counter_enabled[t])return 0;var i=e-this.counter_start_time[t],s=Math.floor(1193.1816666*i),r=this.counter_start_value[t]-s;re("diff="+i+" dticks="+s+" value="+r+" reload="+this.counter_reload[t],512);var a=this.counter_reload[t];return r>=a?(re("Warning: Counter"+t+" value "+r+" is larger than reload "+a,512),r%=a):r<0&&(r=r%a+a),r},Ls.prototype.did_rollover=function(t,e){var i=e-this.counter_start_time[t];if(i<0)return re("Warning: PIT timer difference is negative, resetting (timer "+t+")"),!0;var s=Math.floor(1193.1816666*i);return this.counter_start_value[t]<s},Ls.prototype.counter_read=function(t){var e=this.counter_latch[t];if(e)return this.counter_latch[t]--,2===e?255&this.counter_latch_value[t]:this.counter_latch_value[t]>>8;var i=this.counter_next_low[t];3===this.counter_mode[t]&&(this.counter_next_low[t]^=1);var s=this.get_counter_value(t,Pi.microtick());return i?255&s:s>>8},Ls.prototype.counter_write=function(t,e){this.counter_next_low[t]?this.counter_reload[t]=-256&this.counter_reload[t]|e:this.counter_reload[t]=255&this.counter_reload[t]|e<<8,3===this.counter_read_mode[t]&&this.counter_next_low[t]||(this.counter_reload[t]||(this.counter_reload[t]=65535),this.counter_start_value[t]=this.counter_reload[t],this.counter_enabled[t]=!0,this.counter_start_time[t]=Pi.microtick(),re("counter"+t+" reload="+de(this.counter_reload[t])+" tick="+(this.counter_reload[t]||65536)/1193.1816666+"ms",512)),3===this.counter_read_mode[t]&&(this.counter_next_low[t]^=1)},Ls.prototype.port43_write=function(t){var e=t>>1&7,i=1&t,s=t>>6&3,r=t>>4&3;if(1===s&&re("Unimplemented timer1",512),3!==s){if(0===r){this.counter_latch[s]=2;var a=this.get_counter_value(s,Pi.microtick());return re("latch: "+a,512),void(this.counter_latch_value[s]=a?a-1:0)}e>=6&&(e&=-5),re("Control: mode="+e+" ctr="+s+" read_mode="+r+" bcd="+i,512),this.counter_next_low[s]=1===r?0:1,0===s&&this.cpu.device_lower_irq(0),0===e||3===e||2===e||re("Unimplemented counter mode: "+de(e),512),this.counter_mode[s]=e,this.counter_read_mode[s]=r,2===s&&this.bus.send("pcspeaker-update",[this.counter_mode[2],this.counter_reload[2]])}else re("Unimplemented read back",512)},Ls.prototype.dump=function(){const t=this.counter_reload[0];re("counter0 ticks every "+(t||65536)/1193.1816666+"ms (reload="+t+")")};let Es=!1;function Ps(t,e){this.cpu=t,this.bus=e,this.enable_mouse_stream=!1,this.use_mouse=!1,this.have_mouse=!0,this.mouse_delta_x=0,this.mouse_delta_y=0,this.mouse_clicks=0,this.have_keyboard=!0,this.enable_keyboard_stream=!1,this.next_is_mouse_command=!1,this.next_read_sample=!1,this.next_read_led=!1,this.next_handle_scan_code_set=!1,this.next_read_rate=!1,this.next_read_resolution=!1,this.kbd_buffer=new ue(1024),this.last_port60_byte=0,this.sample_rate=100,this.resolution=4,this.scaling2=!1,this.last_mouse_packet=-1,this.mouse_buffer=new ue(1024),this.next_byte_is_ready=!1,this.next_byte_is_aux=!1,this.bus.register("keyboard-code",(function(t){this.kbd_send_code(t)}),this),this.bus.register("mouse-click",(function(t){this.mouse_send_click(t[0],t[1],t[2])}),this),this.bus.register("mouse-delta",(function(t){this.mouse_send_delta(t[0],t[1])}),this),this.bus.register("mouse-wheel",(function(t){}),this),this.command_register=5,this.controller_output_port=0,this.read_output_register=!1,this.read_command_register=!1,this.read_controller_output_port=!1,t.io.register_read(96,this,this.port60_read),t.io.register_read(100,this,this.port64_read),t.io.register_write(96,this,this.port60_write),t.io.register_write(100,this,this.port64_write)}Ps.prototype.get_state=function(){var t=[];return t[0]=this.enable_mouse_stream,t[1]=this.use_mouse,t[2]=this.have_mouse,t[3]=this.mouse_delta_x,t[4]=this.mouse_delta_y,t[5]=this.mouse_clicks,t[6]=this.have_keyboard,t[7]=this.enable_keyboard_stream,t[8]=this.next_is_mouse_command,t[9]=this.next_read_sample,t[10]=this.next_read_led,t[11]=this.next_handle_scan_code_set,t[12]=this.next_read_rate,t[13]=this.next_read_resolution,t[15]=this.last_port60_byte,t[16]=this.sample_rate,t[17]=this.resolution,t[18]=this.scaling2,t[20]=this.command_register,t[21]=this.read_output_register,t[22]=this.read_command_register,t[23]=this.controller_output_port,t[24]=this.read_controller_output_port,t},Ps.prototype.set_state=function(t){this.enable_mouse_stream=t[0],this.use_mouse=t[1],this.have_mouse=t[2],this.mouse_delta_x=t[3],this.mouse_delta_y=t[4],this.mouse_clicks=t[5],this.have_keyboard=t[6],this.enable_keyboard_stream=t[7],this.next_is_mouse_command=t[8],this.next_read_sample=t[9],this.next_read_led=t[10],this.next_handle_scan_code_set=t[11],this.next_read_rate=t[12],this.next_read_resolution=t[13],this.last_port60_byte=t[15],this.sample_rate=t[16],this.resolution=t[17],this.scaling2=t[18],this.command_register=t[20],this.read_output_register=t[21],this.read_command_register=t[22],this.controller_output_port=t[23],this.read_controller_output_port=t[24],this.next_byte_is_ready=!1,this.next_byte_is_aux=!1,this.kbd_buffer.clear(),this.mouse_buffer.clear(),this.bus.send("mouse-enable",this.use_mouse)},Ps.prototype.raise_irq=function(){this.next_byte_is_ready||(this.kbd_buffer.length?this.kbd_irq():this.mouse_buffer.length&&this.mouse_irq())},Ps.prototype.mouse_irq=function(){this.next_byte_is_ready=!0,this.next_byte_is_aux=!0,2&this.command_register&&(re("Mouse irq",64),this.cpu.device_lower_irq(12),this.cpu.device_raise_irq(12))},Ps.prototype.kbd_irq=function(){this.next_byte_is_ready=!0,this.next_byte_is_aux=!1,1&this.command_register&&(re("Keyboard irq",64),this.cpu.device_lower_irq(1),this.cpu.device_raise_irq(1))},Ps.prototype.kbd_send_code=function(t){this.enable_keyboard_stream&&(re("adding kbd code: "+de(t),64),this.kbd_buffer.push(t),this.raise_irq())},Ps.prototype.mouse_send_delta=function(t,e){if(this.have_mouse&&this.use_mouse){var i=this.resolution*this.sample_rate/80;if(this.mouse_delta_x+=t*i,this.mouse_delta_y+=e*i,this.enable_mouse_stream){var s=0|this.mouse_delta_x,r=0|this.mouse_delta_y;(s||r)&&(this.mouse_delta_x-=s,this.mouse_delta_y-=r,this.send_mouse_packet(s,r))}}},Ps.prototype.mouse_send_click=function(t,e,i){this.have_mouse&&this.use_mouse&&(this.mouse_clicks=t|i<<1|e<<2,this.enable_mouse_stream&&this.send_mouse_packet(0,0))},Ps.prototype.send_mouse_packet=function(t,e){var i=(e<0)<<5|(t<0)<<4|8|this.mouse_clicks,s=t,r=e;this.last_mouse_packet=Date.now(),this.mouse_buffer.push(i),this.mouse_buffer.push(s),this.mouse_buffer.push(r),this.raise_irq()},Ps.prototype.apply_scaling2=function(t){var e=t>>31;switch(Math.abs(t)){case 0:case 1:case 3:return t;case 2:return e;case 4:return 6*e;case 5:return 9*e;default:return t<<1}},Ps.prototype.port60_read=function(){return this.next_byte_is_ready=!1,this.kbd_buffer.length||this.mouse_buffer.length?(this.next_byte_is_aux?(this.cpu.device_lower_irq(12),this.last_port60_byte=this.mouse_buffer.shift(),re("Port 60 read (mouse): "+de(this.last_port60_byte),64)):(this.cpu.device_lower_irq(1),this.last_port60_byte=this.kbd_buffer.shift(),re("Port 60 read (kbd) : "+de(this.last_port60_byte),64)),(this.kbd_buffer.length||this.mouse_buffer.length)&&this.raise_irq(),this.last_port60_byte):(re("Port 60 read: Empty",64),this.last_port60_byte)},Ps.prototype.port64_read=function(){var t=16;return this.next_byte_is_ready&&(t|=1),this.next_byte_is_aux&&(t|=32),re("port 64 read: "+de(t),64),t},Ps.prototype.port60_write=function(t){if(re("port 60 write: "+de(t),64),this.read_command_register)this.command_register=t,this.read_command_register=!1,re("Keyboard command register = "+de(this.command_register),64);else if(this.read_output_register)this.read_output_register=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(t),this.mouse_irq();else if(this.next_read_sample)this.next_read_sample=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(250),this.sample_rate=t,re("mouse sample rate: "+de(t),64),this.sample_rate||(re("invalid sample rate, reset to 100",64),this.sample_rate=100),this.mouse_irq();else if(this.next_read_resolution)this.next_read_resolution=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(250),t>3?(this.resolution=4,re("invalid resolution, resetting to 4",64)):(this.resolution=1<<t,re("resolution: "+this.resolution,64)),this.mouse_irq();else if(this.next_read_led)this.next_read_led=!1,this.kbd_buffer.push(250),this.kbd_irq();else if(this.next_handle_scan_code_set)this.next_handle_scan_code_set=!1,this.kbd_buffer.push(250),this.kbd_irq(),t||this.kbd_buffer.push(2);else if(this.next_read_rate)this.next_read_rate=!1,this.kbd_buffer.push(250),this.kbd_irq();else if(this.next_is_mouse_command){if(this.next_is_mouse_command=!1,re("Port 60 data register write: "+de(t),64),!this.have_mouse)return;switch(this.kbd_buffer.clear(),this.mouse_buffer.clear(),this.mouse_buffer.push(250),t){case 230:re("Scaling 1:1",64),this.scaling2=!1;break;case 231:re("Scaling 2:1",64),this.scaling2=!0;break;case 232:this.next_read_resolution=!0;break;case 233:this.send_mouse_packet(0,0);break;case 235:re("unimplemented request single packet",64),this.send_mouse_packet(0,0);break;case 242:this.mouse_buffer.push(0),this.mouse_buffer.push(0),this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;case 243:this.next_read_sample=!0;break;case 244:this.enable_mouse_stream=!0,this.use_mouse=!0,this.bus.send("mouse-enable",!0),this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;case 245:this.enable_mouse_stream=!1;break;case 246:this.enable_mouse_stream=!1,this.sample_rate=100,this.scaling2=!1,this.resolution=4;break;case 255:re("Mouse reset",64),this.mouse_buffer.push(170),this.mouse_buffer.push(0),this.use_mouse=!0,this.bus.send("mouse-enable",!0),this.enable_mouse_stream=!1,this.sample_rate=100,this.scaling2=!1,this.resolution=4,this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;default:re("Unimplemented mouse command: "+de(t),64)}this.mouse_irq()}else if(this.read_controller_output_port)this.read_controller_output_port=!1,this.controller_output_port=t;else{switch(re("Port 60 data register write: "+de(t),64),this.mouse_buffer.clear(),this.kbd_buffer.clear(),this.kbd_buffer.push(250),t){case 237:this.next_read_led=!0;break;case 240:this.next_handle_scan_code_set=!0;break;case 242:this.kbd_buffer.push(171),this.kbd_buffer.push(83);break;case 243:this.next_read_rate=!0;break;case 244:re("kbd enable scanning",64),this.enable_keyboard_stream=!0;break;case 245:re("kbd disable scanning",64),this.enable_keyboard_stream=!1;break;case 246:break;case 255:this.kbd_buffer.clear(),this.kbd_buffer.push(250),this.kbd_buffer.push(170),this.kbd_buffer.push(0);break;default:re("Unimplemented keyboard command: "+de(t),64)}this.kbd_irq()}},Ps.prototype.port64_write=function(t){switch(re("port 64 write: "+de(t),64),t){case 32:this.kbd_buffer.clear(),this.mouse_buffer.clear(),this.kbd_buffer.push(this.command_register),this.kbd_irq();break;case 96:this.read_command_register=!0;break;case 209:this.read_controller_output_port=!0;break;case 211:this.read_output_register=!0;break;case 212:this.next_is_mouse_command=!0;break;case 167:re("Disable second port",64),this.command_register|=32;break;case 168:re("Enable second port",64),this.command_register&=-33;break;case 169:case 171:this.kbd_buffer.clear(),this.mouse_buffer.clear(),this.kbd_buffer.push(0),this.kbd_irq();break;case 170:this.kbd_buffer.clear(),this.mouse_buffer.clear(),this.kbd_buffer.push(85),this.kbd_irq();break;case 173:re("Disable Keyboard",64),this.command_register|=16;break;case 174:re("Enable Keyboard",64),this.command_register&=-17;break;case 254:re("CPU reboot via PS2"),this.cpu.reboot_internal();break;default:re("port 64: Unimplemented command byte: "+de(t),64)}};var Ts="COPYRIGHT (C) CREATIVE TECHNOLOGY LTD, 1992.",Ds=0,Us=64,Gs=65536,Ss=65536,Ms=1024,Fs=0,Vs=1,Bs=3,Ns=5,Ws=6,js=7,Ks=1,Xs=5,Hs=2,Ys=5,Qs=7,Js=10,Zs=5,$s=1,tr=2,er=1,ir=4,sr=new Uint8Array(256),rr=[],ar=[],nr=[],or=new Uint8Array(256),hr=[];function _r(t,e){this.cpu=t,this.bus=e,this.write_buffer=new ue(64),this.read_buffer=new ue(64),this.read_buffer_lastvalue=0,this.command=0,this.command_size=0,this.mixer_current_address=0,this.mixer_registers=new Uint8Array(256),this.mixer_reset(),this.dummy_speaker_enabled=!1,this.test_register=0,this.dsp_highspeed=!1,this.dsp_stereo=!1,this.dsp_16bit=!1,this.dsp_signed=!1,this.dac_buffers=[new pe(65536),new pe(65536)],this.dma=t.devices.dma,this.dma_sample_count=0,this.dma_bytes_count=0,this.dma_bytes_left=0,this.dma_bytes_block=0,this.dma_irq=0,this.dma_channel=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=new Int16Array(this.dma_buffer),this.dma_buffer_uint16=new Uint16Array(this.dma_buffer),this.dma_syncbuffer=new ce(this.dma_buffer),this.dma_waiting_transfer=!1,this.dma_paused=!1,this.sampling_rate=22050,e.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 ue(64),this.mpu_read_buffer_lastvalue=0,this.fm_current_address0=0,this.fm_current_address1=0,this.fm_waveform_select_enable=!1,this.irq=5,this.irq_triggered=new Uint8Array(16),t.io.register_read_consecutive(544,this,this.port2x0_read,this.port2x1_read,this.port2x2_read,this.port2x3_read),t.io.register_read_consecutive(904,this,this.port2x0_read,this.port2x1_read),t.io.register_read_consecutive(548,this,this.port2x4_read,this.port2x5_read),t.io.register_read(550,this,this.port2x6_read),t.io.register_read(551,this,this.port2x7_read),t.io.register_read(552,this,this.port2x8_read),t.io.register_read(553,this,this.port2x9_read),t.io.register_read(554,this,this.port2xA_read),t.io.register_read(555,this,this.port2xB_read),t.io.register_read(556,this,this.port2xC_read),t.io.register_read(557,this,this.port2xD_read),t.io.register_read_consecutive(558,this,this.port2xE_read,this.port2xF_read),t.io.register_write_consecutive(544,this,this.port2x0_write,this.port2x1_write,this.port2x2_write,this.port2x3_write),t.io.register_write_consecutive(904,this,this.port2x0_write,this.port2x1_write),t.io.register_write_consecutive(548,this,this.port2x4_write,this.port2x5_write),t.io.register_write(550,this,this.port2x6_write),t.io.register_write(551,this,this.port2x7_write),t.io.register_write_consecutive(552,this,this.port2x8_write,this.port2x9_write),t.io.register_write(554,this,this.port2xA_write),t.io.register_write(555,this,this.port2xB_write),t.io.register_write(556,this,this.port2xC_write),t.io.register_write(557,this,this.port2xD_write),t.io.register_write(558,this,this.port2xE_write),t.io.register_write(559,this,this.port2xF_write),t.io.register_read_consecutive(816,this,this.port3x0_read,this.port3x1_read),t.io.register_write_consecutive(816,this,this.port3x0_write,this.port3x1_write),this.dma.on_unmask(this.dma_on_unmask,this),e.register("dac-request-data",(function(){this.dac_handle_request()}),this),e.register("speaker-has-initialized",(function(){this.mixer_reset()}),this),e.send("speaker-confirm-initialized"),this.dsp_reset()}function dr(t,e,i){i||(i=_r.prototype.dsp_default_handler);for(var s=0;s<t.length;s++)sr[t[s]]=e,rr[t[s]]=i}function cr(t){for(var e=[],i=0;i<16;i++)e.push(t+i);return e}_r.prototype.dsp_reset=function(){this.write_buffer.clear(),this.read_buffer.clear(),this.command=0,this.command_size=0,this.dummy_speaker_enabled=!1,this.test_register=0,this.dsp_highspeed=!1,this.dsp_stereo=!1,this.dsp_16bit=!1,this.dsp_signed=!1,this.dac_buffers[0].clear(),this.dac_buffers[1].clear(),this.dma_sample_count=0,this.dma_bytes_count=0,this.dma_bytes_left=0,this.dma_bytes_block=0,this.dma_irq=0,this.dma_channel=0,this.dma_autoinit=!1,this.dma_buffer_uint8.fill(0),this.dma_waiting_transfer=!1,this.dma_paused=!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),this.asp_registers[5]=1,this.asp_registers[9]=248},_r.prototype.get_state=function(){var t=[];return t[2]=this.read_buffer_lastvalue,t[3]=this.command,t[4]=this.command_size,t[5]=this.mixer_current_address,t[6]=this.mixer_registers,t[7]=this.dummy_speaker_enabled,t[8]=this.test_register,t[9]=this.dsp_highspeed,t[10]=this.dsp_stereo,t[11]=this.dsp_16bit,t[12]=this.dsp_signed,t[15]=this.dma_sample_count,t[16]=this.dma_bytes_count,t[17]=this.dma_bytes_left,t[18]=this.dma_bytes_block,t[19]=this.dma_irq,t[20]=this.dma_channel,t[21]=this.dma_channel_8bit,t[22]=this.dma_channel_16bit,t[23]=this.dma_autoinit,t[24]=this.dma_buffer_uint8,t[25]=this.dma_waiting_transfer,t[26]=this.dma_paused,t[27]=this.sampling_rate,t[28]=this.bytes_per_sample,t[29]=this.e2_value,t[30]=this.e2_count,t[31]=this.asp_registers,t[33]=this.mpu_read_buffer_last_value,t[34]=this.irq,t[35]=this.irq_triggered,t},_r.prototype.set_state=function(t){this.read_buffer_lastvalue=t[2],this.command=t[3],this.command_size=t[4],this.mixer_current_address=t[5],this.mixer_registers=t[6],this.mixer_full_update(),this.dummy_speaker_enabled=t[7],this.test_register=t[8],this.dsp_highspeed=t[9],this.dsp_stereo=t[10],this.dsp_16bit=t[11],this.dsp_signed=t[12],this.dma_sample_count=t[15],this.dma_bytes_count=t[16],this.dma_bytes_left=t[17],this.dma_bytes_block=t[18],this.dma_irq=t[19],this.dma_channel=t[20],this.dma_channel_8bit=t[21],this.dma_channel_16bit=t[22],this.dma_autoinit=t[23],this.dma_buffer_uint8=t[24],this.dma_waiting_transfer=t[25],this.dma_paused=t[26],this.sampling_rate=t[27],this.bytes_per_sample=t[28],this.e2_value=t[29],this.e2_count=t[30],this.asp_registers=t[31],this.mpu_read_buffer_last_value=t[33],this.irq=t[34],this.irq_triggered=t[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 ce(this.dma_buffer),this.dma_paused?this.bus.send("dac-disable"):this.bus.send("dac-enable")},_r.prototype.port2x0_read=function(){return re("220 read: fm music status port (unimplemented)",8388608),255},_r.prototype.port2x1_read=function(){return re("221 read: fm music data port (write only)",8388608),255},_r.prototype.port2x2_read=function(){return re("222 read: advanced fm music status port (unimplemented)",8388608),255},_r.prototype.port2x3_read=function(){return re("223 read: advanced music data port (write only)",8388608),255},_r.prototype.port2x4_read=function(){return re("224 read: mixer address port",8388608),this.mixer_current_address},_r.prototype.port2x5_read=function(){return re("225 read: mixer data port",8388608),this.mixer_read(this.mixer_current_address)},_r.prototype.port2x6_read=function(){return re("226 read: (write only)",8388608),255},_r.prototype.port2x7_read=function(){return re("227 read: undocumented",8388608),255},_r.prototype.port2x8_read=function(){return re("228 read: fm music status port (unimplemented)",8388608),255},_r.prototype.port2x9_read=function(){return re("229 read: fm music data port (write only)",8388608),255},_r.prototype.port2xA_read=function(){return re("22A read: read data",8388608),this.read_buffer.length&&(this.read_buffer_lastvalue=this.read_buffer.shift()),re(" <- "+this.read_buffer_lastvalue+" "+de(this.read_buffer_lastvalue)+" '"+String.fromCharCode(this.read_buffer_lastvalue)+"'",8388608),this.read_buffer_lastvalue},_r.prototype.port2xB_read=function(){return re("22B read: undocumented",8388608),255},_r.prototype.port2xC_read=function(){return re("22C read: write-buffer status",8388608),127},_r.prototype.port2xD_read=function(){return re("22D read: undocumented",8388608),255},_r.prototype.port2xE_read=function(){return re("22E read: read-buffer status / irq 8bit ack.",8388608),this.irq_triggered[1]&&this.lower_irq(1),(this.read_buffer.length&&!this.dsp_highspeed)<<7|127},_r.prototype.port2xF_read=function(){return re("22F read: irq 16bit ack",8388608),this.lower_irq(2),0},_r.prototype.port2x0_write=function(t){re("220 write: (unimplemented) fm register 0 address = "+de(t),8388608),this.fm_current_address0=0},_r.prototype.port2x1_write=function(t){re("221 write: (unimplemented) fm register 0 data = "+de(t),8388608);var e=hr[this.fm_current_address0];e||(e=this.fm_default_write),e.call(this,t,0,this.fm_current_address0)},_r.prototype.port2x2_write=function(t){re("222 write: (unimplemented) fm register 1 address = "+de(t),8388608),this.fm_current_address1=0},_r.prototype.port2x3_write=function(t){re("223 write: (unimplemented) fm register 1 data ="+de(t),8388608);var e=hr[this.fm_current_address1];e||(e=this.fm_default_write),e.call(this,t,1,this.fm_current_address1)},_r.prototype.port2x4_write=function(t){re("224 write: mixer address = "+de(t),8388608),this.mixer_current_address=t},_r.prototype.port2x5_write=function(t){re("225 write: mixer data = "+de(t),8388608),this.mixer_write(this.mixer_current_address,t)},_r.prototype.port2x6_write=function(t){re("226 write: reset = "+de(t),8388608),this.dsp_highspeed?(re(" -> exit highspeed",8388608),this.dsp_highspeed=!1):t&&(re(" -> reset",8388608),this.dsp_reset()),this.read_buffer.clear(),this.read_buffer.push(170)},_r.prototype.port2x7_write=function(t){re("227 write: undocumented",8388608)},_r.prototype.port2x8_write=function(t){re("228 write: fm music register port (unimplemented)",8388608)},_r.prototype.port2x9_write=function(t){re("229 write: fm music data port (unimplemented)",8388608)},_r.prototype.port2xA_write=function(t){re("22A write: dsp read data port (read only)",8388608)},_r.prototype.port2xB_write=function(t){re("22B write: undocumented",8388608)},_r.prototype.port2xC_write=function(t){re("22C write: write command/data",8388608),0===this.command?(re("22C write: command = "+de(t),8388608),this.command=t,this.write_buffer.clear(),this.command_size=sr[t]):(re("22C write: data: "+de(t),8388608),this.write_buffer.push(t)),this.write_buffer.length>=this.command_size&&this.command_do()},_r.prototype.port2xD_write=function(t){re("22D write: undocumented",8388608)},_r.prototype.port2xE_write=function(t){re("22E write: dsp read buffer status (read only)",8388608)},_r.prototype.port2xF_write=function(t){re("22F write: undocumented",8388608)},_r.prototype.port3x0_read=function(){return re("330 read: mpu data",8388608),this.mpu_read_buffer.length&&(this.mpu_read_buffer_lastvalue=this.mpu_read_buffer.shift()),re(" <- "+de(this.mpu_read_buffer_lastvalue),8388608),this.mpu_read_buffer_lastvalue},_r.prototype.port3x0_write=function(t){re("330 write: mpu data (unimplemented) : "+de(t),8388608)},_r.prototype.port3x1_read=function(){re("331 read: mpu status",8388608);var t=0;return t|=0,t|=128*!this.mpu_read_buffer.length},_r.prototype.port3x1_write=function(t){re("331 write: mpu command: "+de(t),8388608),255==t&&(this.mpu_read_buffer.clear(),this.mpu_read_buffer.push(254))},_r.prototype.command_do=function(){var t=rr[this.command];t||(t=this.dsp_default_handler),t.call(this),this.command=0,this.command_size=0,this.write_buffer.clear()},_r.prototype.dsp_default_handler=function(){re("Unhandled command: "+de(this.command),8388608)},dr([14],2,(function(){this.asp_registers[this.write_buffer.shift()]=this.write_buffer.shift()})),dr([15],1,(function(){this.read_buffer.clear(),this.read_buffer.push(this.asp_registers[this.write_buffer.shift()])})),dr([16],1,(function(){var t=wr(this.write_buffer.shift(),127.5,-1);this.dac_buffers[0].push(t),this.dac_buffers[1].push(t),this.bus.send("dac-enable")})),dr([20,21],2,(function(){this.dma_irq=1,this.dma_channel=this.dma_channel_8bit,this.dma_autoinit=!1,this.dsp_signed=!1,this.dsp_16bit=!1,this.dsp_highspeed=!1,this.dma_transfer_size_set(),this.dma_transfer_start()})),dr([22],2),dr([23],2),dr([28],0,(function(){this.dma_irq=1,this.dma_channel=this.dma_channel_8bit,this.dma_autoinit=!0,this.dsp_signed=!1,this.dsp_16bit=!1,this.dsp_highspeed=!1,this.dma_transfer_start()})),dr([31],0),dr([32],0,(function(){this.read_buffer.clear(),this.read_buffer.push(127)})),dr([36],2),dr([44],0),dr([48],0),dr([49],0),dr([52],0),dr([53],0),dr([54],0),dr([55],0),dr([56],0),dr([64],1,(function(){this.sampling_rate_change(1e6/(256-this.write_buffer.shift())/this.get_channel_count())})),dr([65,66],2,(function(){this.sampling_rate_change(this.write_buffer.shift()<<8|this.write_buffer.shift())})),dr([72],2,(function(){this.dma_transfer_size_set()})),dr([116],2),dr([117],2),dr([118],2),dr([119],2),dr([125],0),dr([127],0),dr([128],2),dr([144],0,(function(){this.dma_irq=1,this.dma_channel=this.dma_channel_8bit,this.dma_autoinit=!0,this.dsp_signed=!1,this.dsp_highspeed=!0,this.dsp_16bit=!1,this.dma_transfer_start()})),dr([145],0),dr([152],0),dr([153],0),dr([160],0),dr([168],0),dr(cr(176),3,(function(){if(8&this.command)this.dsp_default_handler();else{var t=this.write_buffer.shift();this.dma_irq=2,this.dma_channel=this.dma_channel_16bit,this.dma_autoinit=!!(4&this.command),this.dsp_signed=!!(16&t),this.dsp_stereo=!!(32&t),this.dsp_16bit=!0,this.dma_transfer_size_set(),this.dma_transfer_start()}})),dr(cr(192),3,(function(){if(8&this.command)this.dsp_default_handler();else{var t=this.write_buffer.shift();this.dma_irq=1,this.dma_channel=this.dma_channel_8bit,this.dma_autoinit=!!(4&this.command),this.dsp_signed=!!(16&t),this.dsp_stereo=!!(32&t),this.dsp_16bit=!1,this.dma_transfer_size_set(),this.dma_transfer_start()}})),dr([208],0,(function(){this.dma_paused=!0,this.bus.send("dac-disable")})),dr([209],0,(function(){this.dummy_speaker_enabled=!0})),dr([211],0,(function(){this.dummy_speaker_enabled=!1})),dr([212],0,(function(){this.dma_paused=!1,this.bus.send("dac-enable")})),dr([213],0,(function(){this.dma_paused=!0,this.bus.send("dac-disable")})),dr([214],0,(function(){this.dma_paused=!1,this.bus.send("dac-enable")})),dr([216],0,(function(){this.read_buffer.clear(),this.read_buffer.push(255*this.dummy_speaker_enabled)})),dr([217,218],0,(function(){this.dma_autoinit=!1})),dr([224],1,(function(){this.read_buffer.clear(),this.read_buffer.push(~this.write_buffer.shift())})),dr([225],0,(function(){this.read_buffer.clear(),this.read_buffer.push(4),this.read_buffer.push(5)})),dr([226],1),dr([227],0,(function(){this.read_buffer.clear();for(var t=0;t<Ts.length;t++)this.read_buffer.push(Ts.charCodeAt(t));this.read_buffer.push(0)})),dr([228],1,(function(){this.test_register=this.write_buffer.shift()})),dr([232],0,(function(){this.read_buffer.clear(),this.read_buffer.push(this.test_register)})),dr([242,243],0,(function(){this.raise_irq()}));var ur=new Uint8Array(256);function pr(t,e){e||(e=_r.prototype.mixer_default_read),ar[t]=e}function lr(t,e){e||(e=_r.prototype.mixer_default_write),nr[t]=e}function fr(t,e,i){or[t]=1,ar[t]=function(){return 240&this.mixer_registers[e]|this.mixer_registers[i]>>>4},nr[t]=function(s){this.mixer_registers[t]=s;var r=240&s|15&this.mixer_registers[e],a=s<<4&240|15&this.mixer_registers[i];this.mixer_write(e,r),this.mixer_write(i,a)}}function mr(t,e,i){ar[t]=_r.prototype.mixer_default_read,nr[t]=function(s){this.mixer_registers[t]=s,this.bus.send("mixer-volume",[e,i,(s>>>2)-62])}}function gr(t,e){e||(e=_r.prototype.fm_default_write);for(var i=0;i<t.length;i++)hr[t[i]]=e}function br(t,e){for(var i=[],s=t;s<=e;s++)i.push(s);return i}ur[14]=255,ur[15]=7,ur[55]=56,dr([249],1,(function(){var t=this.write_buffer.shift();re("dsp 0xf9: unknown function. input: "+t,8388608),this.read_buffer.clear(),this.read_buffer.push(ur[t])})),_r.prototype.mixer_read=function(t){var e,i=ar[t];return i?e=i.call(this):(e=this.mixer_registers[t],re("unhandled mixer register read. addr:"+de(t)+" data:"+de(e),8388608)),e},_r.prototype.mixer_write=function(t,e){var i=nr[t];i?i.call(this,e):re("unhandled mixer register write. addr:"+de(t)+" data:"+de(e),8388608)},_r.prototype.mixer_default_read=function(){return re("mixer register read. addr:"+de(this.mixer_current_address),8388608),this.mixer_registers[this.mixer_current_address]},_r.prototype.mixer_default_write=function(t){re("mixer register write. addr:"+de(this.mixer_current_address)+" data:"+de(t),8388608),this.mixer_registers[this.mixer_current_address]=t},_r.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]=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()},_r.prototype.mixer_full_update=function(){for(var t=1;t<this.mixer_registers.length;t++)or[t]||this.mixer_write(t,this.mixer_registers[t])},pr(0,(function(){return this.mixer_reset(),0})),lr(0),fr(4,50,51),fr(34,48,49),fr(38,52,53),fr(40,54,55),fr(46,56,57),mr(48,0,0),mr(49,0,1),mr(50,2,0),mr(51,2,1),pr(59),lr(59,(function(t){this.mixer_registers[59]=t,this.bus.send("mixer-volume",[1,2,6*(t>>>6)-18])})),pr(65),lr(65,(function(t){this.mixer_registers[65]=t,this.bus.send("mixer-gain-left",6*(t>>>6))})),pr(66),lr(66,(function(t){this.mixer_registers[66]=t,this.bus.send("mixer-gain-right",6*(t>>>6))})),pr(68),lr(68,(function(t){this.mixer_registers[68]=t,t>>>=3,this.bus.send("mixer-treble-left",t-(t<16?14:16))})),pr(69),lr(69,(function(t){this.mixer_registers[69]=t,t>>>=3,this.bus.send("mixer-treble-right",t-(t<16?14:16))})),pr(70),lr(70,(function(t){this.mixer_registers[70]=t,t>>>=3,this.bus.send("mixer-bass-right",t-(t<16?14:16))})),pr(71),lr(71,(function(t){this.mixer_registers[71]=t,t>>>=3,this.bus.send("mixer-bass-right",t-(t<16?14:16))})),pr(128,(function(){switch(this.irq){case 2:return 1;case 5:return 2;case 7:return 4;case 10:return 8;default:return 0}})),lr(128,(function(t){1&t&&(this.irq=2),2&t&&(this.irq=5),4&t&&(this.irq=7),8&t&&(this.irq=10)})),pr(129,(function(){var t=0;switch(this.dma_channel_8bit){case 0:t|=1;break;case 1:t|=2;break;case 3:t|=8}switch(this.dma_channel_16bit){case 5:t|=32;break;case 6:t|=64;break;case 7:t|=128}return t})),lr(129,(function(t){1&t&&(this.dma_channel_8bit=0),2&t&&(this.dma_channel_8bit=1),8&t&&(this.dma_channel_8bit=3),32&t&&(this.dma_channel_16bit=5),64&t&&(this.dma_channel_16bit=6),128&t&&(this.dma_channel_16bit=7)})),pr(130,(function(){for(var t=32,e=0;e<16;e++)t|=e*this.irq_triggered[e];return t})),_r.prototype.fm_default_write=function(t,e,i){re("unhandled fm register write. addr:"+e+"|"+de(i)+" data:"+de(t),8388608)};var yr=new Uint8Array(32);function vr(t,e){return 18*t+yr[e]}function wr(t,e,i){return function(t,e,i){return(t<e)*e+(t>i)*i+(e<=t&&t<=i)*t}(t/e+i,-1,1)}yr[0]=0,yr[1]=1,yr[2]=2,yr[3]=3,yr[4]=4,yr[5]=5,yr[8]=6,yr[9]=7,yr[10]=8,yr[11]=9,yr[12]=10,yr[13]=11,yr[16]=12,yr[17]=13,yr[18]=14,yr[19]=15,yr[20]=16,yr[21]=17,gr([1],(function(t,e,i){this.fm_waveform_select_enable[e]=!0&t,this.fm_update_waveforms()})),gr([2]),gr([3]),gr([4],(function(t,e,i){})),gr([5],(function(t,e,i){0!==e||this.fm_default_write(t,e,i)})),gr([8],(function(t,e,i){})),gr(br(32,53),(function(t,e,i){vr(e,i-32)})),gr(br(64,85),(function(t,e,i){vr(e,i-64)})),gr(br(96,117),(function(t,e,i){vr(e,i-96)})),gr(br(128,149),(function(t,e,i){vr(e,i-128)})),gr(br(160,168),(function(t,e,i){})),gr(br(176,184),(function(t,e,i){})),gr([189],(function(t,e,i){})),gr(br(192,200),(function(t,e,i){})),gr(br(224,245),(function(t,e,i){vr(e,i-224)})),_r.prototype.fm_update_waveforms=function(){},_r.prototype.sampling_rate_change=function(t){this.sampling_rate=t,this.bus.send("dac-tell-sampling-rate",t)},_r.prototype.get_channel_count=function(){return this.dsp_stereo?2:1},_r.prototype.dma_transfer_size_set=function(){this.dma_sample_count=1+(this.write_buffer.shift()<<0)+(this.write_buffer.shift()<<8)},_r.prototype.dma_transfer_start=function(){re("begin dma transfer",8388608),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=1024*this.bytes_per_sample;var t=Math.max(this.dma_bytes_count>>2&-4,32);this.dma_bytes_block=Math.min(t,this.dma_bytes_block),this.dma_waiting_transfer=!0,this.dma.channel_mask[this.dma_channel]||this.dma_on_unmask(this.dma_channel)},_r.prototype.dma_on_unmask=function(t){t===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"))},_r.prototype.dma_transfer_next=function(){re("dma transfering next block",8388608);var t=Math.min(this.dma_bytes_left,this.dma_bytes_block),e=Math.floor(t/this.bytes_per_sample);this.dma.do_write(this.dma_syncbuffer,0,t,this.dma_channel,(i=>{re("dma block transfer "+(i?"unsuccessful":"successful"),8388608),i||(this.dma_to_dac(e),this.dma_bytes_left-=t,this.dma_bytes_left||(this.raise_irq(this.dma_irq),this.dma_autoinit&&(this.dma_bytes_left=this.dma_bytes_count)))}))},_r.prototype.dma_to_dac=function(t){var e,i=this.dsp_16bit?32767.5:127.5,s=this.dsp_signed?0:-1,r=this.dsp_stereo?1:2;e=this.dsp_16bit?this.dsp_signed?this.dma_buffer_int16:this.dma_buffer_uint16:this.dsp_signed?this.dma_buffer_int8:this.dma_buffer_uint8;for(var a=0,n=0;n<t;n++)for(var o=wr(e[n],i,s),h=0;h<r;h++)this.dac_buffers[a].push(o),a^=1;this.dac_send()},_r.prototype.dac_handle_request=function(){!this.dma_bytes_left||this.dma_paused?this.dac_send():this.dma_transfer_next()},_r.prototype.dac_send=function(){if(this.dac_buffers[0].length){var t=this.dac_buffers[0].shift_block(this.dac_buffers[0].length),e=this.dac_buffers[1].shift_block(this.dac_buffers[1].length);this.bus.send("dac-send-data",[t,e],[t.buffer,e.buffer])}},_r.prototype.raise_irq=function(t){re("raise irq",8388608),this.irq_triggered[t]=1,this.cpu.device_raise_irq(this.irq)},_r.prototype.lower_irq=function(t){re("lower irq",8388608),this.irq_triggered[t]=0,this.cpu.device_lower_irq(this.irq)};var kr=128,xr=8,Ar=2,qr=1,Ir=0,Cr=1,zr=2,Or=4,Rr=6,Lr=12,Er=1,Pr=32,Tr=64;function Dr(t,e,i){switch(this.bus=i,this.cpu=t,this.ints=4,this.baud_rate=0,this.line_control=0,this.lsr=96,this.fifo_control=0,this.ier=0,this.iir=1,this.modem_control=0,this.modem_status=0,this.scratch_register=0,this.irq=0,this.input=new ue(4096),this.current_line=[],e){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.com=3,this.irq=3;break;default:re("Invalid serial port: "+de(e),16384),this.com=0,this.irq=4}this.bus.register("serial"+this.com+"-input",(function(t){this.data_received(t)}),this);var s=t.io;s.register_write(e,this,(function(t){this.write_data(t)}),(function(t){this.write_data(255&t),this.write_data(t>>8)})),s.register_write(1|e,this,(function(t){128&this.line_control?(this.baud_rate=255&this.baud_rate|t<<8,re("baud rate: "+de(this.baud_rate),16384)):(this.ier=15&t,re("interrupt enable: "+de(t),16384),this.CheckInterrupt())})),s.register_read(e,this,(function(){if(128&this.line_control)return 255&this.baud_rate;var t=this.input.shift();return re(-1===t?"Read input empty":"Read input: "+de(t),16384),0===this.input.length&&(this.lsr&=-2,this.ClearInterrupt(12)),t})),s.register_read(1|e,this,(function(){return 128&this.line_control?this.baud_rate>>8:15&this.ier})),s.register_read(2|e,this,(function(){var t=15&this.iir|192;return re("read interrupt identification: "+de(this.iir),16384),this.iir,t})),s.register_write(2|e,this,(function(t){re("fifo control: "+de(t),16384),this.fifo_control=t})),s.register_read(3|e,this,(function(){return re("read line control: "+de(this.line_control),16384),this.line_control})),s.register_write(3|e,this,(function(t){re("line control: "+de(t),16384),this.line_control=t})),s.register_read(4|e,this,(function(){return this.modem_control})),s.register_write(4|e,this,(function(t){re("modem control: "+de(t),16384),this.modem_control=t})),s.register_read(5|e,this,(function(){return re("read line status: "+de(this.lsr),16384),this.lsr})),s.register_write(5|e,this,(function(t){re("Factory test write",16384)})),s.register_read(6|e,this,(function(){return re("read modem status: "+de(this.modem_status),16384),this.modem_status})),s.register_write(6|e,this,(function(t){re("Unkown register write (base+6)",16384)})),s.register_read(7|e,this,(function(){return this.scratch_register})),s.register_write(7|e,this,(function(t){this.scratch_register=t}))}Dr.prototype.get_state=function(){var t=[];return t[0]=this.ints,t[1]=this.baud_rate,t[2]=this.line_control,t[3]=this.lsr,t[4]=this.fifo_control,t[5]=this.ier,t[6]=this.iir,t[7]=this.modem_control,t[8]=this.modem_status,t[9]=this.scratch_register,t[10]=this.irq,t},Dr.prototype.set_state=function(t){this.ints=t[0],this.baud_rate=t[1],this.line_control=t[2],this.lsr=t[3],this.fifo_control=t[4],this.ier=t[5],this.iir=t[6],this.modem_control=t[7],this.modem_status=t[8],this.scratch_register=t[9],this.irq=t[10]},Dr.prototype.CheckInterrupt=function(){4096&this.ints&&1&this.ier?(this.iir=12,this.cpu.device_raise_irq(this.irq)):4&this.ints&&2&this.ier?(this.iir=2,this.cpu.device_raise_irq(this.irq)):1&this.ints&&8&this.ier?(this.iir=0,this.cpu.device_raise_irq(this.irq)):(this.iir=1,this.cpu.device_lower_irq(this.irq))},Dr.prototype.ThrowInterrupt=function(t){this.ints|=1<<t,this.CheckInterrupt()},Dr.prototype.ClearInterrupt=function(t){this.ints&=~(1<<t),this.CheckInterrupt()},Dr.prototype.data_received=function(t){re("input: "+de(t),16384),this.input.push(t),this.lsr|=1,this.ThrowInterrupt(12)},Dr.prototype.write_data=function(t){if(128&this.line_control)this.baud_rate=-256&this.baud_rate|t;else if(re("data: "+de(t),16384),this.ThrowInterrupt(2),255!==t){var e=String.fromCharCode(t);if(this.bus.send("serial"+this.com+"-output-char",e),this.current_line.push(t),"\n"===e){const t=String.fromCharCode.apply("",this.current_line).trimRight().replace(/[\x00-\x08\x0b-\x1f\x7f\x80-\xff]/g,"");re("SERIAL: "+t),this.bus.send("serial"+this.com+"-output-line",String.fromCharCode.apply("",this.current_line)),this.current_line=[]}}};var Ur=65536,Gr=2560,Sr=1600,Mr=32,Fr=3758096384,Vr=524288,Br=262144,Nr=Uint32Array.from([655360,655360,720896,753664]),Wr=Uint32Array.from([131072,65536,32768,32768]);function jr(t,e,i){this.cpu=t,this.bus=e,this.vga_memory_size=i,this.cursor_address=0,this.cursor_scanline_start=14,this.cursor_scanline_end=15,this.max_cols=80,this.max_rows=25,this.screen_width=0,this.screen_height=0,this.virtual_width=0,this.virtual_height=0,this.layers=[],this.start_address=0,this.start_address_latched=0,this.crtc=new Uint8Array(25),this.crtc_mode=0,this.horizontal_display_enable_end=0,this.horizontal_blank_start=0,this.vertical_display_enable_end=0,this.vertical_blank_start=0,this.underline_location_register=0,this.preset_row_scan=0,this.offset_register=0,this.line_compare=0,this.graphical_mode_is_linear=!0,this.graphical_mode=!1,setTimeout((()=>{e.send("screen-set-mode",this.graphical_mode)}),0),this.vga256_palette=new Int32Array(256),this.latch_dword=0,this.svga_width=0,this.svga_height=0,this.svga_enabled=!1,this.svga_bpp=32,this.svga_bank_offset=0,this.svga_offset=0,this.pci_space=[52,18,17,17,3,1,0,0,2,0,0,3,0,0,0,0,8,14680064,57344,224,0,0,0,0,0,0,191,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,0,17,0,0,190,254,0,0,0,0,0,0,0,0,0,0,0,0],this.pci_id=144,this.pci_bars=[{size:i}],this.pci_rom_size=65536,this.pci_rom_address=4272947200,this.name="vga",this.stats={is_graphical:!1,res_x:0,res_y:0,bpp:0},this.index_crtc=0,this.dac_color_index_write=0,this.dac_color_index_read=0,this.dac_state=0,this.dac_map=new Uint8Array(16),this.attribute_controller_index=-1,this.palette_source=32,this.attribute_mode=0,this.color_plane_enable=0,this.horizontal_panning=0,this.color_select=0,this.sequencer_index=-1,this.plane_write_bm=15,this.sequencer_memory_mode=0,this.clocking_mode=0,this.graphics_index=-1,this.plane_read=0,this.planar_mode=0,this.planar_rotate_reg=0,this.planar_bitmap=255,this.planar_setreset=0,this.planar_setreset_enable=0,this.miscellaneous_graphics_register=0,this.color_compare=0,this.color_dont_care=0,this.max_scan_line=0,this.miscellaneous_output_register=255,this.port_3DA_value=255;var s=t.io;s.register_write(960,this,this.port3C0_write),s.register_read(960,this,this.port3C0_read,this.port3C0_read16),s.register_read(961,this,this.port3C1_read),s.register_write(962,this,this.port3C2_write),s.register_write_consecutive(964,this,this.port3C4_write,this.port3C5_write),s.register_read(964,this,this.port3C4_read),s.register_read(965,this,this.port3C5_read),s.register_write_consecutive(974,this,this.port3CE_write,this.port3CF_write),s.register_read(974,this,this.port3CE_read),s.register_read(975,this,this.port3CF_read),s.register_write(967,this,this.port3C7_write),s.register_read(967,this,this.port3C7_read),s.register_write(968,this,this.port3C8_write),s.register_read(968,this,this.port3C8_read),s.register_write(969,this,this.port3C9_write),s.register_read(969,this,this.port3C9_read),s.register_read(972,this,this.port3CC_read),s.register_write_consecutive(980,this,this.port3D4_write,this.port3D5_write),s.register_read(980,this,this.port3D4_read),s.register_read(981,this,this.port3D5_read,(()=>(re("Warning: 16-bit read from 3D5",256),this.port3D5_read()))),s.register_read(970,this,(function(){return re("3CA read",256),0})),s.register_read(986,this,this.port3DA_read),s.register_read(954,this,this.port3DA_read),this.dispi_index=-1,this.dispi_enable_value=0,s.register_write(462,this,void 0,this.port1CE_write),s.register_write(463,this,void 0,this.port1CF_write),s.register_read(463,this,void 0,this.port1CF_read),void 0===this.vga_memory_size||this.vga_memory_size<262144?(this.vga_memory_size=262144,re("vga memory size rounded up to "+this.vga_memory_size,256)):65535&this.vga_memory_size&&(this.vga_memory_size|=65535,this.vga_memory_size++);const r=t.svga_allocate_memory(this.vga_memory_size);this.svga_memory=_e.view(Uint8Array,t.wasm_memory,r,this.vga_memory_size),this.diff_addr_min=this.vga_memory_size,this.diff_addr_max=0,this.diff_plot_min=this.vga_memory_size,this.diff_plot_max=0,this.image_data=null,e.register("screen-fill-buffer",(function(){this.screen_fill_buffer()}),this),this.vga_memory=new Uint8Array(262144),this.plane0=new Uint8Array(this.vga_memory.buffer,0,65536),this.plane1=new Uint8Array(this.vga_memory.buffer,65536,65536),this.plane2=new Uint8Array(this.vga_memory.buffer,131072,65536),this.plane3=new Uint8Array(this.vga_memory.buffer,196608,65536),this.pixel_buffer=new Uint8Array(524288);var a=this;s.mmap_register(655360,131072,(function(t){return a.vga_memory_read(t)}),(function(t,e){a.vga_memory_write(t,e)})),t.devices.pci.register_device(this)}jr.prototype.get_state=function(){var t=[];return t[0]=this.vga_memory_size,t[1]=this.cursor_address,t[2]=this.cursor_scanline_start,t[3]=this.cursor_scanline_end,t[4]=this.max_cols,t[5]=this.max_rows,t[6]=this.vga_memory,t[7]=this.dac_state,t[8]=this.start_address,t[9]=this.graphical_mode,t[10]=this.vga256_palette,t[11]=this.latch_dword,t[12]=this.color_compare,t[13]=this.color_dont_care,t[14]=this.miscellaneous_graphics_register,t[15]=this.svga_width,t[16]=this.svga_height,t[17]=this.crtc_mode,t[18]=this.svga_enabled,t[19]=this.svga_bpp,t[20]=this.svga_bank_offset,t[21]=this.svga_offset,t[22]=this.index_crtc,t[23]=this.dac_color_index_write,t[24]=this.dac_color_index_read,t[25]=this.dac_map,t[26]=this.sequencer_index,t[27]=this.plane_write_bm,t[28]=this.sequencer_memory_mode,t[29]=this.graphics_index,t[30]=this.plane_read,t[31]=this.planar_mode,t[32]=this.planar_rotate_reg,t[33]=this.planar_bitmap,t[34]=this.max_scan_line,t[35]=this.miscellaneous_output_register,t[36]=this.port_3DA_value,t[37]=this.dispi_index,t[38]=this.dispi_enable_value,t[39]=this.svga_memory,t[40]=this.graphical_mode_is_linear,t[41]=this.attribute_controller_index,t[42]=this.offset_register,t[43]=this.planar_setreset,t[44]=this.planar_setreset_enable,t[45]=this.start_address_latched,t[46]=this.crtc,t[47]=this.horizontal_display_enable_end,t[48]=this.horizontal_blank_start,t[49]=this.vertical_display_enable_end,t[50]=this.vertical_blank_start,t[51]=this.underline_location_register,t[52]=this.preset_row_scan,t[53]=this.offset_register,t[54]=this.palette_source,t[55]=this.attribute_mode,t[56]=this.color_plane_enable,t[57]=this.horizontal_panning,t[58]=this.color_select,t[59]=this.clocking_mode,t[60]=this.line_compare,t[61]=this.pixel_buffer,t},jr.prototype.set_state=function(t){this.vga_memory_size=t[0],this.cursor_address=t[1],this.cursor_scanline_start=t[2],this.cursor_scanline_end=t[3],this.max_cols=t[4],this.max_rows=t[5],t[6]&&this.vga_memory.set(t[6]),this.dac_state=t[7],this.start_address=t[8],this.graphical_mode=t[9],this.vga256_palette=t[10],this.latch_dword=t[11],this.color_compare=t[12],this.color_dont_care=t[13],this.miscellaneous_graphics_register=t[14],this.svga_width=t[15],this.svga_height=t[16],this.crtc_mode=t[17],this.svga_enabled=t[18],this.svga_bpp=t[19],this.svga_bank_offset=t[20],this.svga_offset=t[21],this.index_crtc=t[22],this.dac_color_index_write=t[23],this.dac_color_index_read=t[24],this.dac_map=t[25],this.sequencer_index=t[26],this.plane_write_bm=t[27],this.sequencer_memory_mode=t[28],this.graphics_index=t[29],this.plane_read=t[30],this.planar_mode=t[31],this.planar_rotate_reg=t[32],this.planar_bitmap=t[33],this.max_scan_line=t[34],this.miscellaneous_output_register=t[35],this.port_3DA_value=t[36],this.dispi_index=t[37],this.dispi_enable_value=t[38],this.svga_memory.set(t[39]),this.graphical_mode_is_linear=t[40],this.attribute_controller_index=t[41],this.offset_register=t[42],this.planar_setreset=t[43],this.planar_setreset_enable=t[44],this.start_address_latched=t[45],this.crtc.set(t[46]),this.horizontal_display_enable_end=t[47],this.horizontal_blank_start=t[48],this.vertical_display_enable_end=t[49],this.vertical_blank_start=t[50],this.underline_location_register=t[51],this.preset_row_scan=t[52],this.offset_register=t[53],this.palette_source=t[54],this.attribute_mode=t[55],this.color_plane_enable=t[56],this.horizontal_panning=t[57],this.color_select=t[58],this.clocking_mode=t[59],this.line_compare=t[60],t[61]&&this.pixel_buffer.set(t[61]),this.bus.send("screen-set-mode",this.graphical_mode),this.graphical_mode?(this.screen_width=0,this.screen_height=0,this.svga_enabled?(this.set_size_graphical(this.svga_width,this.svga_height,this.svga_bpp,this.svga_width,this.svga_height),this.update_layers()):(this.update_vga_size(),this.update_layers(),this.complete_replot())):(this.set_size_text(this.max_cols,this.max_rows),this.update_cursor_scanline(),this.update_cursor()),this.complete_redraw()},jr.prototype.vga_memory_read=function(t){if(this.svga_enabled&&this.graphical_mode_is_linear)return this.cpu.read8(3758096384+(t-655360|this.svga_bank_offset)|0);var e=this.miscellaneous_graphics_register>>2&3;if((t-=Nr[e])<0||t>=Wr[e])return re("vga read outside memory space: addr:"+de(t),256),0;if(this.latch_dword=this.plane0[t],this.latch_dword|=this.plane1[t]<<8,this.latch_dword|=this.plane2[t]<<16,this.latch_dword|=this.plane3[t]<<24,8&this.planar_mode){var i=255;return 1&this.color_dont_care&&(i&=this.plane0[t]^~(1&this.color_compare?255:0)),2&this.color_dont_care&&(i&=this.plane1[t]^~(2&this.color_compare?255:0)),4&this.color_dont_care&&(i&=this.plane2[t]^~(4&this.color_compare?255:0)),8&this.color_dont_care&&(i&=this.plane3[t]^~(8&this.color_compare?255:0)),i}var s=this.plane_read;return this.graphical_mode?8&this.sequencer_memory_mode?(s=3&t,t&=-4):16&this.planar_mode&&(s=1&t,t&=-2):s=0,this.vga_memory[s<<16|t]},jr.prototype.vga_memory_write=function(t,e){if(this.svga_enabled&&this.graphical_mode&&this.graphical_mode_is_linear)this.cpu.write8(3758096384+(t-655360|this.svga_bank_offset)|0,e);else{var i=this.miscellaneous_graphics_register>>2&3;if((t-=Nr[i])<0||t>=Wr[i])re("vga write outside memory space: addr:"+de(t)+", value:"+de(e),256);else if(this.graphical_mode)this.vga_memory_write_graphical(t,e);else{if(!(3&this.plane_write_bm))return;this.vga_memory_write_text_mode(t,e)}}},jr.prototype.vga_memory_write_graphical=function(t,e){var i,s=3&this.planar_mode,r=this.apply_feed(this.planar_bitmap),a=this.apply_expand(this.planar_setreset),n=this.apply_expand(this.planar_setreset_enable);switch(s){case 0:e=this.apply_rotate(e),i=this.apply_feed(e),i=this.apply_setreset(i,n),i=this.apply_logical(i,this.latch_dword),i=this.apply_bitmask(i,r);break;case 1:i=this.latch_dword;break;case 2:i=this.apply_expand(e),i=this.apply_logical(i,this.latch_dword),i=this.apply_bitmask(i,r);break;case 3:e=this.apply_rotate(e),r&=this.apply_feed(e),i=a,i=this.apply_bitmask(i,r)}var o=15;switch(12&this.sequencer_memory_mode){case 0:o=5<<(1&t),t&=-2;break;case 8:case 12:o=1<<(3&t),t&=-4}1&(o&=this.plane_write_bm)&&(this.plane0[t]=i>>0&255),2&o&&(this.plane1[t]=i>>8&255),4&o&&(this.plane2[t]=i>>16&255),8&o&&(this.plane3[t]=i>>24&255);var h=this.vga_addr_to_pixel(t);this.partial_replot(h,h+7)},jr.prototype.apply_feed=function(t){var e=t;return e|=t<<8,e|=t<<16,e|=t<<24},jr.prototype.apply_expand=function(t){var e=1&t?255:0;return e|=(2&t?255:0)<<8,e|=(4&t?255:0)<<16,e|=(8&t?255:0)<<24},jr.prototype.apply_rotate=function(t){return 255&(t|t<<8)>>>(7&this.planar_rotate_reg)},jr.prototype.apply_setreset=function(t,e){var i=this.apply_expand(this.planar_setreset);return t|=e&i,t&=~e|i},jr.prototype.apply_logical=function(t,e){switch(24&this.planar_rotate_reg){case 8:return t&e;case 16:return t|e;case 24:return t^e}return t},jr.prototype.apply_bitmask=function(t,e){var i=e&t;return i|=~e&this.latch_dword},jr.prototype.text_mode_redraw=function(){for(var t,e,i=this.start_address<<1,s=0;s<this.max_rows;s++)for(var r=0;r<this.max_cols;r++)t=this.vga_memory[i],e=this.vga_memory[1|i],this.bus.send("screen-put-char",[s,r,t,this.vga256_palette[e>>4&15],this.vga256_palette[15&e]]),i+=2},jr.prototype.vga_memory_write_text_mode=function(t,e){var i,s,r=(t>>1)-this.start_address,a=r/this.max_cols|0,n=r%this.max_cols;1&t?(s=e,i=this.vga_memory[-2&t]):(i=e,s=this.vga_memory[1|t]),this.bus.send("screen-put-char",[a,n,i,this.vga256_palette[s>>4&15],this.vga256_palette[15&s]]),this.vga_memory[t]=e},jr.prototype.update_cursor=function(){var t=(this.cursor_address-this.start_address)/this.max_cols|0,e=(this.cursor_address-this.start_address)%this.max_cols;t=Math.min(this.max_rows-1,t),this.bus.send("screen-update-cursor",[t,e])},jr.prototype.complete_redraw=function(){re("complete redraw",256),this.graphical_mode?this.svga_enabled?this.cpu.svga_mark_dirty():(this.diff_addr_min=0,this.diff_addr_max=524288):this.text_mode_redraw()},jr.prototype.complete_replot=function(){re("complete replot",256),this.graphical_mode&&!this.svga_enabled&&(this.diff_plot_min=0,this.diff_plot_max=524288,this.complete_redraw())},jr.prototype.partial_redraw=function(t,e){t<this.diff_addr_min&&(this.diff_addr_min=t),e>this.diff_addr_max&&(this.diff_addr_max=e)},jr.prototype.partial_replot=function(t,e){t<this.diff_plot_min&&(this.diff_plot_min=t),e>this.diff_plot_max&&(this.diff_plot_max=e),this.partial_redraw(t,e)},jr.prototype.reset_diffs=function(){this.diff_addr_min=this.vga_memory_size,this.diff_addr_max=0,this.diff_plot_min=this.vga_memory_size,this.diff_plot_max=0},jr.prototype.destroy=function(){},jr.prototype.vga_bytes_per_line=function(){var t=this.offset_register<<2;return 64&this.underline_location_register?t<<=1:64&this.crtc_mode&&(t>>>=1),t},jr.prototype.vga_addr_shift_count=function(){var t=128;return t+=~this.underline_location_register&this.crtc_mode&64,t-=64&this.underline_location_register,(t-=64&this.attribute_mode)>>>6},jr.prototype.vga_addr_to_pixel=function(t){var e=this.vga_addr_shift_count();if(3&~this.crtc_mode){var i=t-this.start_address;i&=this.crtc_mode<<13|-24577;var s=(i<<=e)/this.virtual_width|0,r=i%this.virtual_width;switch(3&this.crtc_mode){case 2:s=s<<1|t>>13&1;break;case 1:s=s<<1|t>>14&1;break;case 0:s=s<<2|t>>13&3}return s*this.virtual_width+r+(this.start_address<<e)}return t<<e},jr.prototype.scan_line_to_screen_row=function(t){128&this.max_scan_line&&(t>>>=1);var e=1+(31&this.max_scan_line);return t=Math.ceil(t/e),1&this.crtc_mode||(t<<=1),2&this.crtc_mode||(t<<=1),t},jr.prototype.set_size_text=function(t,e){this.max_cols=t,this.max_rows=e,this.bus.send("screen-set-size-text",[t,e])},jr.prototype.set_size_graphical=function(t,e,i,s,r){if(!this.stats.is_graphical||this.stats.bpp!==i||this.screen_width!==t||this.screen_height!==e||this.virtual_width!==s||this.virtual_height!==r){if(this.screen_width=t,this.screen_height=e,this.virtual_width=s,this.virtual_height=r,this.stats.bpp=i,this.stats.is_graphical=!0,this.stats.res_x=t,this.stats.res_y=e,"undefined"!=typeof ImageData){const t=s*r,e=this.cpu.svga_allocate_dest_buffer(t)>>>0;this.dest_buffet_offset=e,this.image_data=new ImageData(new Uint8ClampedArray(this.cpu.wasm_memory.buffer,e,4*t),s,r),this.cpu.svga_mark_dirty()}this.bus.send("screen-set-size-graphical",[t,e,s,r,i])}},jr.prototype.update_vga_size=function(){if(!this.svga_enabled){var t=Math.min(1+this.horizontal_display_enable_end,this.horizontal_blank_start),e=Math.min(1+this.vertical_display_enable_end,this.vertical_blank_start);if(t&&e)if(this.graphical_mode){var i=t<<3,s=this.offset_register<<4;64&this.attribute_mode&&(i>>>=1,s>>>=1);var r=this.scan_line_to_screen_row(e),a=Wr[0],n=Math.ceil(a/this.vga_bytes_per_line());this.set_size_graphical(i,r,8,s,n),this.update_vertical_retrace(),this.update_layers()}else{128&this.max_scan_line&&(e>>>=1);var o=e/(1+(31&this.max_scan_line))|0;t&&o&&this.set_size_text(t,o)}}},jr.prototype.update_layers=function(){if(this.graphical_mode||this.text_mode_redraw(),this.svga_enabled)this.layers=[];else if(this.virtual_width&&this.screen_width){if(!this.palette_source||32&this.clocking_mode)return this.layers=[],void this.bus.send("screen-clear");var t=this.start_address_latched,e=this.horizontal_panning;64&this.attribute_mode&&(e>>>=1);var i=this.preset_row_scan>>5&3,s=this.vga_addr_to_pixel(t+i),r=s/this.virtual_width|0,a=s%this.virtual_width+e,n=this.scan_line_to_screen_row(1+this.line_compare);n=Math.min(n,this.screen_height);var o=this.screen_height-n;this.layers=[];for(var h=-a,_=0;h<this.screen_width;h+=this.virtual_width,_++)this.layers.push({image_data:this.image_data,screen_x:h,screen_y:0,buffer_x:0,buffer_y:r+_,buffer_width:this.virtual_width,buffer_height:n});var d=0;32&this.attribute_mode||(d=this.vga_addr_to_pixel(i)+e);for(h=-d,_=0;h<this.screen_width;h+=this.virtual_width,_++)this.layers.push({image_data:this.image_data,screen_x:h,screen_y:n,buffer_x:0,buffer_y:_,buffer_width:this.virtual_width,buffer_height:o})}},jr.prototype.update_vertical_retrace=function(){this.port_3DA_value|=8,this.start_address_latched!==this.start_address&&(this.start_address_latched=this.start_address,this.update_layers())},jr.prototype.update_cursor_scanline=function(){this.bus.send("screen-update-cursor-scanline",[this.cursor_scanline_start,this.cursor_scanline_end])},jr.prototype.port3C0_write=function(t){if(-1===this.attribute_controller_index)re("attribute controller index register: "+de(t),256),this.attribute_controller_index=31&t,re("attribute actual index: "+de(this.attribute_controller_index),256),this.palette_source!==(32&t)&&(this.palette_source=32&t,this.update_layers());else{if(this.attribute_controller_index<16)re("internal palette: "+de(this.attribute_controller_index)+" -> "+de(t),256),this.dac_map[this.attribute_controller_index]=t,64&this.attribute_mode||this.complete_redraw();else switch(this.attribute_controller_index){case 16:if(re("3C0 / attribute mode control: "+de(t),256),this.attribute_mode!==t){var e=this.attribute_mode;this.attribute_mode=t;var i=(1&t)>0;this.svga_enabled||this.graphical_mode===i||(this.graphical_mode=i,this.bus.send("screen-set-mode",this.graphical_mode)),64&(e^t)&&this.complete_replot(),this.update_vga_size(),this.complete_redraw()}break;case 18:re("3C0 / color plane enable: "+de(t),256),this.color_plane_enable!==t&&(this.color_plane_enable=t,this.complete_redraw());break;case 19:re("3C0 / horizontal panning: "+de(t),256),this.horizontal_panning!==t&&(this.horizontal_panning=15&t,this.update_layers());break;case 20:re("3C0 / color select: "+de(t),256),this.color_select!==t&&(this.color_select=t,this.complete_redraw());break;default:re("3C0 / attribute controller write "+de(this.attribute_controller_index)+": "+de(t),256)}this.attribute_controller_index=-1}},jr.prototype.port3C0_read=function(){return re("3C0 read",256),this.attribute_controller_index|this.palette_source},jr.prototype.port3C0_read16=function(){return re("3C0 read16",256),255&this.port3C0_read()|this.port3C1_read()<<8&65280},jr.prototype.port3C1_read=function(){if(this.attribute_controller_index<16)return re("3C1 / internal palette read: "+de(this.attribute_controller_index)+" -> "+de(this.dac_map[this.attribute_controller_index]),256),255&this.dac_map[this.attribute_controller_index];switch(this.attribute_controller_index){case 16:return re("3C1 / attribute mode read: "+de(this.attribute_mode),256),this.attribute_mode;case 18:return re("3C1 / color plane enable read: "+de(this.color_plane_enable),256),this.color_plane_enable;case 19:return re("3C1 / horizontal panning read: "+de(this.horizontal_panning),256),this.horizontal_panning;case 20:return re("3C1 / color select read: "+de(this.color_select),256),this.color_select;default:re("3C1 / attribute controller read "+de(this.attribute_controller_index),256)}return 255},jr.prototype.port3C2_write=function(t){re("3C2 / miscellaneous output register = "+de(t),256),this.miscellaneous_output_register=t},jr.prototype.port3C4_write=function(t){this.sequencer_index=t},jr.prototype.port3C4_read=function(){return this.sequencer_index},jr.prototype.port3C5_write=function(t){switch(this.sequencer_index){case 1:re("clocking mode: "+de(t),256);var e=this.clocking_mode;this.clocking_mode=t,32&(e^t)&&this.update_layers();break;case 2:re("plane write mask: "+de(t),256),this.plane_write_bm=t;break;case 4:re("sequencer memory mode: "+de(t),256),this.sequencer_memory_mode=t;break;default:re("3C5 / sequencer write "+de(this.sequencer_index)+": "+de(t),256)}},jr.prototype.port3C5_read=function(){switch(re("3C5 / sequencer read "+de(this.sequencer_index),256),this.sequencer_index){case 1:return this.clocking_mode;case 2:return this.plane_write_bm;case 4:return this.sequencer_memory_mode;case 6:return 18}return 0},jr.prototype.port3C7_write=function(t){re("3C7 write: "+de(t),256),this.dac_color_index_read=3*t,this.dac_state&=0},jr.prototype.port3C7_read=function(){return this.dac_state},jr.prototype.port3C8_write=function(t){this.dac_color_index_write=3*t,this.dac_state|=3},jr.prototype.port3C8_read=function(){return this.dac_color_index_write/3&255},jr.prototype.port3C9_write=function(t){var e=this.dac_color_index_write/3|0,i=this.dac_color_index_write%3,s=this.vga256_palette[e];t=255*(63&t)/63|0,0===i?s=-16711681&s|t<<16:1===i?s=-65281&s|t<<8:(s=-256&s|t,re("dac set color, index="+de(e)+" value="+de(s),256)),this.vga256_palette[e]!==s&&(this.vga256_palette[e]=s,this.complete_redraw()),this.dac_color_index_write++},jr.prototype.port3C9_read=function(){re("3C9 read",256);var t=this.dac_color_index_read/3|0,e=this.dac_color_index_read%3,i=this.vga256_palette[t];return this.dac_color_index_read++,(i>>8*(2-e)&255)/255*63|0},jr.prototype.port3CC_read=function(){return re("3CC read",256),this.miscellaneous_output_register},jr.prototype.port3CE_write=function(t){this.graphics_index=t},jr.prototype.port3CE_read=function(){return this.graphics_index},jr.prototype.port3CF_write=function(t){switch(this.graphics_index){case 0:this.planar_setreset=t,re("plane set/reset: "+de(t),256);break;case 1:this.planar_setreset_enable=t,re("plane set/reset enable: "+de(t),256);break;case 2:this.color_compare=t,re("color compare: "+de(t),256);break;case 3:this.planar_rotate_reg=t,re("plane rotate: "+de(t),256);break;case 4:this.plane_read=t,re("plane read: "+de(t),256);break;case 5:var e=this.planar_mode;this.planar_mode=t,re("planar mode: "+de(t),256),96&(e^t)&&this.complete_replot();break;case 6:re("miscellaneous graphics register: "+de(t),256),this.miscellaneous_graphics_register!==t&&(this.miscellaneous_graphics_register=t,this.update_vga_size());break;case 7:this.color_dont_care=t,re("color don't care: "+de(t),256);break;case 8:this.planar_bitmap=t,re("planar bitmap: "+de(t),256);break;default:re("3CF / graphics write "+de(this.graphics_index)+": "+de(t),256)}},jr.prototype.port3CF_read=function(){switch(re("3CF / graphics read "+de(this.graphics_index),256),this.graphics_index){case 0:return this.planar_setreset;case 1:return this.planar_setreset_enable;case 2:return this.color_compare;case 3:return this.planar_rotate_reg;case 4:return this.plane_read;case 5:return this.planar_mode;case 6:return this.miscellaneous_graphics_register;case 7:return this.color_dont_care;case 8:return this.planar_bitmap}return 0},jr.prototype.port3D4_write=function(t){re("3D4 / crtc index: "+t,256),this.index_crtc=t},jr.prototype.port3D4_read=function(){return re("3D4 read / crtc index: "+this.index_crtc,256),this.index_crtc},jr.prototype.port3D5_write=function(t){switch(this.index_crtc){case 1:re("3D5 / hdisp enable end write: "+de(t),256),this.horizontal_display_enable_end!==t&&(this.horizontal_display_enable_end=t,this.update_vga_size());break;case 2:this.horizontal_blank_start!==t&&(this.horizontal_blank_start=t,this.update_vga_size());break;case 7:re("3D5 / overflow register write: "+de(t),256);var e=this.vertical_display_enable_end;this.vertical_display_enable_end&=255,this.vertical_display_enable_end|=t<<3&512|t<<7&256,e!=this.vertical_display_enable_end&&this.update_vga_size(),this.line_compare=767&this.line_compare|t<<4&256;var i=this.vertical_blank_start;this.vertical_blank_start=767&this.vertical_blank_start|t<<5&256,i!==this.vertical_blank_start&&this.update_vga_size(),this.update_layers();break;case 8:re("3D5 / preset row scan write: "+de(t),256),this.preset_row_scan=t,this.update_layers();break;case 9:re("3D5 / max scan line write: "+de(t),256),this.max_scan_line=t,this.line_compare=511&this.line_compare|t<<3&512;i=this.vertical_blank_start;this.vertical_blank_start=511&this.vertical_blank_start|t<<4&512,i!==this.vertical_blank_start&&this.update_vga_size(),this.update_layers();break;case 10:re("3D5 / cursor scanline start write: "+de(t),256),this.cursor_scanline_start=t,this.update_cursor_scanline();break;case 11:re("3D5 / cursor scanline end write: "+de(t),256),this.cursor_scanline_end=t,this.update_cursor_scanline();break;case 12:(this.start_address>>8&255)!==t&&(this.start_address=255&this.start_address|t<<8,this.update_layers(),3&~this.crtc_mode&&this.complete_replot()),re("3D5 / start addr hi write: "+de(t)+" -> "+de(this.start_address,4),256);break;case 13:(255&this.start_address)!==t&&(this.start_address=65280&this.start_address|t,this.update_layers(),3&~this.crtc_mode&&this.complete_replot()),re("3D5 / start addr lo write: "+de(t)+" -> "+de(this.start_address,4),256);break;case 14:re("3D5 / cursor address hi write: "+de(t),256),this.cursor_address=255&this.cursor_address|t<<8,this.update_cursor();break;case 15:re("3D5 / cursor address lo write: "+de(t),256),this.cursor_address=65280&this.cursor_address|t,this.update_cursor();break;case 18:re("3D5 / vdisp enable end write: "+de(t),256),(255&this.vertical_display_enable_end)!==t&&(this.vertical_display_enable_end=768&this.vertical_display_enable_end|t,this.update_vga_size());break;case 19:re("3D5 / offset register write: "+de(t),256),this.offset_register!==t&&(this.offset_register=t,this.update_vga_size(),3&~this.crtc_mode&&this.complete_replot());break;case 20:if(re("3D5 / underline location write: "+de(t),256),this.underline_location_register!==t){var s=this.underline_location_register;this.underline_location_register=t,this.update_vga_size(),64&(s^t)&&this.complete_replot()}break;case 21:re("3D5 / vertical blank start write: "+de(t),256),(255&this.vertical_blank_start)!==t&&(this.vertical_blank_start=768&this.vertical_blank_start|t,this.update_vga_size());break;case 23:if(re("3D5 / crtc mode write: "+de(t),256),this.crtc_mode!==t){var r=this.crtc_mode;this.crtc_mode=t,this.update_vga_size(),67&(r^t)&&this.complete_replot()}break;case 24:re("3D5 / line compare write: "+de(t),256),this.line_compare=768&this.line_compare|t,this.update_layers();break;default:this.index_crtc<this.crtc.length&&(this.crtc[this.index_crtc]=t),re("3D5 / CRTC write "+de(this.index_crtc)+": "+de(t),256)}},jr.prototype.port3D5_read=function(){switch(re("3D5 read "+de(this.index_crtc),256),this.index_crtc){case 1:return this.horizontal_display_enable_end;case 2:return this.horizontal_blank_start;case 7:return this.vertical_display_enable_end>>7&2|this.vertical_blank_start>>5&8|this.line_compare>>4&16|this.vertical_display_enable_end>>3&64;case 8:return this.preset_row_scan;case 9:return this.max_scan_line;case 10:return this.cursor_scanline_start;case 11:return this.cursor_scanline_end;case 12:return 255&this.start_address;case 13:return this.start_address>>8;case 14:return this.cursor_address>>8;case 15:return 255&this.cursor_address;case 18:return 255&this.vertical_display_enable_end;case 19:return this.offset_register;case 20:return this.underline_location_register;case 21:return 255&this.vertical_blank_start;case 23:return this.crtc_mode;case 24:return 255&this.line_compare}return this.index_crtc<this.crtc.length?this.crtc[this.index_crtc]:0},jr.prototype.port3DA_read=function(){re("3DA read - status 1 and clear attr index",256);var t=this.port_3DA_value;return this.graphical_mode?(this.port_3DA_value^=1,this.port_3DA_value&=1):(1&this.port_3DA_value&&(this.port_3DA_value^=8),this.port_3DA_value^=1),this.attribute_controller_index=-1,t},jr.prototype.port1CE_write=function(t){this.dispi_index=t},jr.prototype.port1CF_write=function(t){switch(re("1CF / dispi write "+de(this.dispi_index)+": "+de(t),256),this.dispi_index){case 1:this.svga_width=t,this.svga_width>2560&&(re("svga_width reduced from "+this.svga_width+" to 2560",256),this.svga_width=2560);break;case 2:this.svga_height=t,this.svga_height>1600&&(re("svga_height reduced from "+this.svga_height+" to 1600",256),this.svga_height=1600);break;case 3:this.svga_bpp=t;break;case 4:this.svga_enabled=1==(1&t),this.dispi_enable_value=t;break;case 5:re("SVGA bank offset: "+de(t<<16)),this.svga_bank_offset=t<<16;break;case 9:const e=t*this.svga_width;re("SVGA offset: "+de(e)+" y="+de(t),256),this.svga_offset!==e&&(this.svga_offset=e,this.complete_redraw())}!this.svga_enabled||this.svga_width&&this.svga_height||(re("SVGA: disabled because of invalid width/height: "+this.svga_width+"x"+this.svga_height,256),this.svga_enabled=!1),ne(4!==this.svga_bpp,"unimplemented svga bpp: 4"),ne(4===this.svga_bpp||8===this.svga_bpp||15===this.svga_bpp||16===this.svga_bpp||24===this.svga_bpp||32===this.svga_bpp,"unexpected svga bpp: "+this.svga_bpp),re("SVGA: enabled="+this.svga_enabled+", "+this.svga_width+"x"+this.svga_height+"x"+this.svga_bpp,256),this.svga_enabled&&4===this.dispi_index&&(this.set_size_graphical(this.svga_width,this.svga_height,this.svga_bpp,this.svga_width,this.svga_height),this.bus.send("screen-set-mode",!0),this.graphical_mode=!0,this.graphical_mode_is_linear=!0),this.svga_enabled||(this.svga_bank_offset=0),this.update_layers()},jr.prototype.port1CF_read=function(){return re("1CF / dispi read "+de(this.dispi_index),256),this.svga_register_read(this.dispi_index)},jr.prototype.svga_register_read=function(t){switch(t){case 0:return 45248;case 1:return 2&this.dispi_enable_value?2560:this.svga_width;case 2:return 2&this.dispi_enable_value?1600:this.svga_height;case 3:return 2&this.dispi_enable_value?32:this.svga_bpp;case 4:return this.dispi_enable_value;case 5:return this.svga_bank_offset>>>16;case 6:return this.screen_width?this.screen_width:1;case 8:return 0;case 10:return this.vga_memory_size/65536|0}return 255},jr.prototype.vga_replot=function(){for(var t=-16&this.diff_plot_min,e=Math.min(15|this.diff_plot_max,524287),i=this.vga_addr_shift_count(),s=3&~this.crtc_mode,r=96&this.planar_mode,a=64&this.attribute_mode,n=t;n<=e;){var o=n>>>i;if(s){var h=n/this.virtual_width|0,_=n-this.virtual_width*h;switch(s){case 1:o=(1&h)<<13,h>>>=1;break;case 2:o=(1&h)<<14,h>>>=1;break;case 3:o=(3&h)<<13,h>>>=2}o|=(h*this.virtual_width+_>>>i)+this.start_address}var d=this.plane0[o],c=this.plane1[o],u=this.plane2[o],p=this.plane3[o],l=new Uint8Array(8);switch(r){case 0:d<<=0,c<<=1,u<<=2,p<<=3;for(var f=7;f>=0;f--)l[7-f]=d>>f&1|c>>f&2|u>>f&4|p>>f&8;break;case 32:l[0]=d>>6&3|u>>4&12,l[1]=d>>4&3|u>>2&12,l[2]=d>>2&3|u>>0&12,l[3]=d>>0&3|u<<2&12,l[4]=c>>6&3|p>>4&12,l[5]=c>>4&3|p>>2&12,l[6]=c>>2&3|p>>0&12,l[7]=c>>0&3|p<<2&12;break;case 64:case 96:l[0]=d>>4&15,l[1]=d>>0&15,l[2]=c>>4&15,l[3]=c>>0&15,l[4]=u>>4&15,l[5]=u>>0&15,l[6]=p>>4&15,l[7]=p>>0&15}if(a){f=0;for(var m=0;f<4;f++,n++,m+=2)this.pixel_buffer[n]=l[m]<<4|l[m+1]}else for(f=0;f<8;f++,n++)this.pixel_buffer[n]=l[f]}},jr.prototype.vga_redraw=function(){var t=this.diff_addr_min,e=Math.min(this.diff_addr_max,524287);const i=new Int32Array(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,this.virtual_width*this.virtual_height);var s=255,r=0;if(128&this.attribute_mode&&(s&=207,r|=this.color_select<<4&48),64&this.attribute_mode)for(var a=t;a<=e;a++){var n=this.pixel_buffer[a]&s|r,o=this.vga256_palette[n];i[a]=65280&o|o<<16|o>>16|4278190080}else{s&=63,r|=this.color_select<<4&192;for(a=t;a<=e;a++){var h=this.pixel_buffer[a]&this.color_plane_enable;n=this.dac_map[h]&s|r,o=this.vga256_palette[n];i[a]=65280&o|o<<16|o>>16|4278190080}}},jr.prototype.screen_fill_buffer=function(){if(this.graphical_mode){if(0===this.image_data.data.byteLength){const t=new Uint8ClampedArray(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,4*this.virtual_width*this.virtual_height);this.image_data=new ImageData(t,this.virtual_width,this.virtual_height),this.update_layers()}if(this.svga_enabled){let i=0,s=this.svga_height;if(8===this.svga_bpp){const i=new Int32Array(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,this.screen_width*this.screen_height),s=new Uint8Array(this.cpu.wasm_memory.buffer,this.svga_memory.byteOffset,this.vga_memory_size);for(var t=0;t<i.length;t++){var e=this.vga256_palette[s[t]];i[t]=65280&e|e<<16|e>>16|4278190080}}else{this.cpu.svga_fill_pixel_buffer(this.svga_bpp,this.svga_offset);const t=15===this.svga_bpp?2:this.svga_bpp/8;i=((this.cpu.svga_dirty_bitmap_min_offset[0]/t|0)-this.svga_offset)/this.svga_width|0,s=1+(((this.cpu.svga_dirty_bitmap_max_offset[0]/t|0)-this.svga_offset)/this.svga_width|0)}i<s&&(i=Math.max(i,0),s=Math.min(s,this.svga_height),this.bus.send("screen-fill-buffer-end",[{image_data:this.image_data,screen_x:0,screen_y:i,buffer_x:0,buffer_y:i,buffer_width:this.svga_width,buffer_height:s-i}]))}else this.vga_replot(),this.vga_redraw(),this.bus.send("screen-fill-buffer-end",this.layers);this.reset_diffs(),this.update_vertical_retrace()}else this.update_vertical_retrace()};var Kr=!1;function Xr(t,e,i){this.next_tick_immediately=i,this.wm=e,this.wasm_patch(),this.create_jit_imports();const s=this.wm.exports.memory;this.wasm_memory=s,this.memory_size=_e.view(Uint32Array,s,812,1),this.mem8=new Uint8Array(0),this.mem32s=new Int32Array(this.mem8.buffer),this.segment_is_null=_e.view(Uint8Array,s,724,8),this.segment_offsets=_e.view(Int32Array,s,736,8),this.segment_limits=_e.view(Uint32Array,s,768,8),this.protected_mode=_e.view(Int32Array,s,800,1),this.idtr_size=_e.view(Int32Array,s,564,1),this.idtr_offset=_e.view(Int32Array,s,568,1),this.gdtr_size=_e.view(Int32Array,s,572,1),this.gdtr_offset=_e.view(Int32Array,s,576,1),this.tss_size_32=_e.view(Int32Array,s,1128,1),this.page_fault=_e.view(Uint32Array,s,540,8),this.cr=_e.view(Int32Array,s,580,8),this.cpl=_e.view(Uint8Array,s,612,1),this.is_32=_e.view(Int32Array,s,804,1),this.stack_size_32=_e.view(Int32Array,s,808,1),this.in_hlt=_e.view(Uint8Array,s,616,1),this.last_virt_eip=_e.view(Int32Array,s,620,1),this.eip_phys=_e.view(Int32Array,s,624,1),this.sysenter_cs=_e.view(Int32Array,s,636,1),this.sysenter_esp=_e.view(Int32Array,s,640,1),this.sysenter_eip=_e.view(Int32Array,s,644,1),this.prefixes=_e.view(Int32Array,s,648,1),this.flags=_e.view(Int32Array,s,120,1),this.flags_changed=_e.view(Int32Array,s,116,1),this.last_op1=_e.view(Int32Array,s,96,1),this.last_op_size=_e.view(Int32Array,s,104,1),this.last_result=_e.view(Int32Array,s,112,1),this.current_tsc=_e.view(Uint32Array,s,960,2),this.devices={},this.instruction_pointer=_e.view(Int32Array,s,556,1),this.previous_ip=_e.view(Int32Array,s,560,1),this.apic_enabled=_e.view(Uint8Array,s,548,1),this.acpi_enabled=_e.view(Uint8Array,s,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=_e.view(Uint32Array,s,664,1),this.reg32=_e.view(Int32Array,s,64,8),this.fpu_st=_e.view(Int32Array,s,1152,32),this.fpu_stack_empty=_e.view(Uint8Array,s,816,1),this.fpu_stack_empty[0]=255,this.fpu_stack_ptr=_e.view(Uint8Array,s,1032,1),this.fpu_stack_ptr[0]=0,this.fpu_control_word=_e.view(Uint16Array,s,1036,1),this.fpu_control_word[0]=895,this.fpu_status_word=_e.view(Uint16Array,s,1040,1),this.fpu_status_word[0]=0,this.fpu_ip=_e.view(Int32Array,s,1048,1),this.fpu_ip[0]=0,this.fpu_ip_selector=_e.view(Int32Array,s,1052,1),this.fpu_ip_selector[0]=0,this.fpu_opcode=_e.view(Int32Array,s,1044,1),this.fpu_opcode[0]=0,this.fpu_dp=_e.view(Int32Array,s,1056,1),this.fpu_dp[0]=0,this.fpu_dp_selector=_e.view(Int32Array,s,1060,1),this.fpu_dp_selector[0]=0,this.reg_xmm32s=_e.view(Int32Array,s,832,32),this.mxcsr=_e.view(Int32Array,s,824,1),this.sreg=_e.view(Uint16Array,s,668,8),this.dreg=_e.view(Int32Array,s,684,8),this.reg_pdpte=_e.view(Int32Array,s,968,8),this.svga_dirty_bitmap_min_offset=_e.view(Uint32Array,s,716,1),this.svga_dirty_bitmap_max_offset=_e.view(Uint32Array,s,720,1),this.fw_value=[],this.fw_pointer=0,this.option_roms=[],this.io=void 0,this.bus=t,this.set_tsc(0,0),this.debug_init(),this.do_many_cycles_count=0,this.do_many_cycles_total=0,this.seen_code={},this.seen_code_uncompiled={}}Xr.prototype.clear_opstats=function(){new Uint8Array(this.wasm_memory.buffer,32768,131072).fill(0),this.wm.exports.profiler_init()},Xr.prototype.create_jit_imports=function(){const t=Object.create(null);t.m=this.wm.exports.memory;for(let e of Object.keys(this.wm.exports))e.startsWith("_")||e.startsWith("zstd")||e.endsWith("_js")||(t[e]=this.wm.exports[e]);this.jit_imports=t},Xr.prototype.wasm_patch=function(){const t=t=>this.wm.exports[t],e=e=>{const i=t(e);return console.assert(i,"Missing import: "+e),i};this.reset_cpu=e("reset_cpu"),this.getiopl=e("getiopl"),this.get_eflags=e("get_eflags"),this.get_eflags_no_arith=e("get_eflags_no_arith"),this.pic_call_irq=e("pic_call_irq"),this.do_many_cycles_native=e("do_many_cycles_native"),this.cycle_internal=e("cycle_internal"),this.read8=e("read8"),this.read16=e("read16"),this.read32s=e("read32s"),this.write8=e("write8"),this.write16=e("write16"),this.write32=e("write32"),this.in_mapped_range=e("in_mapped_range"),this.fpu_load_tag_word=e("fpu_load_tag_word"),this.fpu_load_status_word=e("fpu_load_status_word"),this.fpu_get_sti_f64=e("fpu_get_sti_f64"),this.translate_address_system_read=e("translate_address_system_read_js"),this.get_seg_cs=e("get_seg_cs"),this.get_real_eip=e("get_real_eip"),this.clear_tlb=e("clear_tlb"),this.full_clear_tlb=e("full_clear_tlb"),this.set_tsc=e("set_tsc"),this.store_current_tsc=e("store_current_tsc"),this.jit_force_generate_unsafe=t("jit_force_generate_unsafe"),this.jit_clear_cache=e("jit_clear_cache_js"),this.jit_dirty_cache=e("jit_dirty_cache"),this.codegen_finalize_finished=e("codegen_finalize_finished"),this.allocate_memory=e("allocate_memory"),this.zero_memory=e("zero_memory"),this.svga_allocate_memory=e("svga_allocate_memory"),this.svga_allocate_dest_buffer=e("svga_allocate_dest_buffer"),this.svga_fill_pixel_buffer=e("svga_fill_pixel_buffer"),this.svga_mark_dirty=e("svga_mark_dirty"),this.zstd_create_ctx=e("zstd_create_ctx"),this.zstd_get_src_ptr=e("zstd_get_src_ptr"),this.zstd_free_ctx=e("zstd_free_ctx"),this.zstd_read=e("zstd_read"),this.zstd_read_free=e("zstd_read_free")},Xr.prototype.jit_force_generate=function(t){this.jit_force_generate_unsafe?this.jit_force_generate_unsafe(t):ne(!1,"Not supported in this wasm build: jit_force_generate_unsafe")},Xr.prototype.jit_clear_func=function(t){ne(t>=0&&t<900),this.wm.wasm_table.set(t+1024,null)},Xr.prototype.jit_clear_all_funcs=function(){const t=this.wm.wasm_table;for(let e=0;e<900;e++)t.set(1024+e,null)},Xr.prototype.get_state=function(){var t=[];t[0]=this.memory_size[0],t[1]=this.segment_is_null,t[2]=this.segment_offsets,t[3]=this.segment_limits,t[4]=this.protected_mode[0],t[5]=this.idtr_offset[0],t[6]=this.idtr_size[0],t[7]=this.gdtr_offset[0],t[8]=this.gdtr_size[0],t[9]=this.page_fault[0],t[10]=this.cr,t[11]=this.cpl[0],t[13]=this.is_32[0],t[16]=this.stack_size_32[0],t[17]=this.in_hlt[0],t[18]=this.last_virt_eip[0],t[19]=this.eip_phys[0],t[22]=this.sysenter_cs[0],t[23]=this.sysenter_eip[0],t[24]=this.sysenter_esp[0],t[25]=this.prefixes[0],t[26]=this.flags[0],t[27]=this.flags_changed[0],t[28]=this.last_op1[0],t[30]=this.last_op_size[0],t[37]=this.instruction_pointer[0],t[38]=this.previous_ip[0],t[39]=this.reg32,t[40]=this.sreg,t[41]=this.dreg,t[42]=this.reg_pdpte,this.store_current_tsc(),t[43]=this.current_tsc,t[45]=this.devices.virtio_9p,t[46]=this.devices.apic,t[47]=this.devices.rtc,t[48]=this.devices.pci,t[49]=this.devices.dma,t[50]=this.devices.acpi,t[51]=this.devices.hpet,t[52]=this.devices.vga,t[53]=this.devices.ps2,t[54]=this.devices.uart0,t[55]=this.devices.fdc,t[56]=this.devices.cdrom,t[57]=this.devices.hda,t[58]=this.devices.pit,t[59]=this.devices.net,t[60]=this.devices.pic,t[61]=this.devices.sb16,t[62]=this.fw_value,t[63]=this.devices.ioapic,t[64]=this.tss_size_32[0],t[66]=this.reg_xmm32s,t[67]=this.fpu_st,t[68]=this.fpu_stack_empty[0],t[69]=this.fpu_stack_ptr[0],t[70]=this.fpu_control_word[0],t[71]=this.fpu_ip[0],t[72]=this.fpu_ip_selector[0],t[73]=this.fpu_dp[0],t[74]=this.fpu_dp_selector[0],t[75]=this.fpu_opcode[0];const{packed_memory:e,bitmap:i}=this.pack_memory();return t[77]=e,t[78]=new Uint8Array(i.get_buffer()),t[79]=this.devices.uart1,t[80]=this.devices.uart2,t[81]=this.devices.uart3,t},Xr.prototype.set_state=function(t){this.memory_size[0]=t[0],this.mem8.length!==this.memory_size[0]&&console.warn("Note: Memory size mismatch. we="+this.mem8.length+" state="+this.memory_size[0]),this.segment_is_null.set(t[1]),this.segment_offsets.set(t[2]),this.segment_limits.set(t[3]),this.protected_mode[0]=t[4],this.idtr_offset[0]=t[5],this.idtr_size[0]=t[6],this.gdtr_offset[0]=t[7],this.gdtr_size[0]=t[8],this.page_fault[0]=t[9],this.cr.set(t[10]),this.cpl[0]=t[11],this.is_32[0]=t[13],this.stack_size_32[0]=t[16],this.in_hlt[0]=t[17],this.last_virt_eip[0]=t[18],this.eip_phys[0]=t[19],this.sysenter_cs[0]=t[22],this.sysenter_eip[0]=t[23],this.sysenter_esp[0]=t[24],this.prefixes[0]=t[25],this.flags[0]=t[26],this.flags_changed[0]=t[27],this.last_op1[0]=t[28],this.last_op_size[0]=t[30],this.instruction_pointer[0]=t[37],this.previous_ip[0]=t[38],this.reg32.set(t[39]),this.sreg.set(t[40]),this.dreg.set(t[41]),t[42]&&this.reg_pdpte.set(t[42]),this.set_tsc(t[43][0],t[43][1]),this.devices.virtio_9p&&this.devices.virtio_9p.set_state(t[45]),this.devices.apic&&this.devices.apic.set_state(t[46]),this.devices.rtc&&this.devices.rtc.set_state(t[47]),this.devices.pci&&this.devices.pci.set_state(t[48]),this.devices.dma&&this.devices.dma.set_state(t[49]),this.devices.acpi&&this.devices.acpi.set_state(t[50]),this.devices.hpet&&this.devices.hpet.set_state(t[51]),this.devices.vga&&this.devices.vga.set_state(t[52]),this.devices.ps2&&this.devices.ps2.set_state(t[53]),this.devices.uart0&&this.devices.uart0.set_state(t[54]),this.devices.fdc&&this.devices.fdc.set_state(t[55]),this.devices.cdrom&&this.devices.cdrom.set_state(t[56]),this.devices.hda&&this.devices.hda.set_state(t[57]),this.devices.pit&&this.devices.pit.set_state(t[58]),this.devices.net&&this.devices.net.set_state(t[59]),this.devices.pic&&this.devices.pic.set_state(t[60]),this.devices.sb16&&this.devices.sb16.set_state(t[61]),this.devices.uart1&&this.devices.uart1.set_state(t[79]),this.devices.uart2&&this.devices.uart2.set_state(t[80]),this.devices.uart3&&this.devices.uart3.set_state(t[81]),this.fw_value=t[62],this.devices.ioapic&&this.devices.ioapic.set_state(t[63]),this.tss_size_32[0]=t[64],this.reg_xmm32s.set(t[66]),this.fpu_st.set(t[67]),this.fpu_stack_empty[0]=t[68],this.fpu_stack_ptr[0]=t[69],this.fpu_control_word[0]=t[70],this.fpu_ip[0]=t[71],this.fpu_ip_selector[0]=t[72],this.fpu_dp[0]=t[73],this.fpu_dp_selector[0]=t[74],this.fpu_opcode[0]=t[75];const e=new _e.Bitmap(t[78].buffer),i=t[77];this.unpack_memory(e,i),this.full_clear_tlb(),this.jit_clear_cache()},Xr.prototype.pack_memory=function(){ne(0==(4095&this.mem8.length));const t=this.mem8.length>>12,e=[];for(let i=0;i<t;i++){const t=i<<12,s=this.mem32s.subarray(t>>2,t+4096>>2);let r=!0;for(let t=0;t<s.length;t++)if(0!==s[t]){r=!1;break}r||e.push(i)}const i=new _e.Bitmap(t),s=new Uint8Array(e.length<<12);for(let[t,r]of e.entries()){i.set(r,1);const e=r<<12,a=this.mem8.subarray(e,e+4096);s.set(a,t<<12)}return{bitmap:i,packed_memory:s}},Xr.prototype.unpack_memory=function(t,e){this.zero_memory(this.memory_size[0]);const i=this.memory_size[0]>>12;let s=0;for(let r=0;r<i;r++)if(t.get(r)){let t=s<<12,i=e.subarray(t,t+4096);this.mem8.set(i,r<<12),s++}},Xr.prototype.main_run=function(){if(this.in_hlt[0]){const t=this.hlt_loop();if(this.in_hlt[0])return t}const t=Pi.microtick();let e=t;for(;e-t<1;){this.do_many_cycles(),e=Pi.microtick();const t=this.run_hardware_timers(e);if(this.handle_irqs(),this.in_hlt[0])return t}return 0},Xr.prototype.reboot_internal=function(){this.reset_cpu(),this.fw_value=[],this.devices.virtio&&this.devices.virtio.reset(),this.load_bios()},Xr.prototype.reset_memory=function(){this.mem8.fill(0)},Xr.prototype.create_memory=function(t){t<1048576?t=1048576:(0|t)<0&&(t=Math.pow(2,31)-131072),ne((0|(t=1+(t-1|131071)|0))>0),ne(0==(131071&t)),console.assert(0===this.memory_size[0],"Expected uninitialised memory"),this.memory_size[0]=t;const e=this.allocate_memory(t);this.mem8=_e.view(Uint8Array,this.wasm_memory,e,t),this.mem32s=_e.view(Uint32Array,this.wasm_memory,e,t>>2)},Xr.prototype.init=function(t,i){"number"==typeof t.log_level&&(LOG_LEVEL=t.log_level),this.create_memory("number"==typeof t.memory_size?t.memory_size:67108864),this.acpi_enabled[0]=+t.acpi,this.reset_cpu();var s=new mi(this);if(this.io=s,this.bios.main=t.bios,this.bios.vga=t.vga_bios,this.load_bios(),t.bzimage){const{option_rom:e}=load_kernel(this.mem8,t.bzimage,t.initrd,t.cmdline||"");e&&this.option_roms.push(e)}s.register_read(179,this,(function(){return re("port 0xB3 read"),0}));var r=0;if(s.register_read(146,this,(function(){return r})),s.register_write(146,this,(function(t){r=t})),s.register_read(1297,this,(function(){return this.fw_pointer<this.fw_value.length?this.fw_value[this.fw_pointer++]:(ne(!1,"config port: Read past value"),0)})),s.register_write(1296,this,void 0,(function(t){function e(t){return new Uint8Array(new Int32Array([t]).buffer)}function i(t){return t<<24|t<<8&16711680|t>>8&65280|t>>>24}if(re("bios config port, index="+de(t)),this.fw_pointer=0,0===t)this.fw_value=e(1431127377);else if(1===t)this.fw_value=e(0);else if(3===t)this.fw_value=e(this.memory_size[0]);else if(5===t)this.fw_value=e(1);else if(15===t)this.fw_value=e(1);else if(13===t)this.fw_value=new Uint8Array(16);else if(25===t){const t=4+64*this.option_roms.length,e=new Int32Array(t),r=new Uint8Array(e.buffer);e[0]=i(this.option_roms.length);for(let t=0;t<this.option_roms.length;t++){const{name:a,data:n}=this.option_roms[t],o=4+64*t;ne(49152+t<65536),e[o+0>>2]=i(n.length),e[o+4>>2]=(s=49152+t)>>8|s<<8&65280,ne(a.length<56);for(let t=0;t<a.length;t++)r[o+8+t]=a.charCodeAt(t)}this.fw_value=r}else if(t>=32768&&t<49152)this.fw_value=e(0);else if(t>=49152&&t-49152<this.option_roms.length){const e=t-49152;this.fw_value=this.option_roms[e].data}else re("Warning: Unimplemented fw index: "+de(t)),this.fw_value=e(0);var s})),s.register_write(128,this,(function(t){})),this.devices={},t.load_devices){this.devices.pic=new Os(this),this.devices.pci=new Cs(this),this.acpi_enabled[0]&&(this.devices.ioapic=new Ei(this),this.devices.apic=new c(this),this.devices.acpi=new e(this)),this.devices.rtc=new ii(this),this.fill_cmos(this.devices.rtc,t),this.devices.dma=new ge(this),this.devices.vga=new jr(this,i,t.vga_memory_size||8388608),this.devices.ps2=new Ps(this,i),this.devices.uart0=new Dr(this,1016,i),t.uart1&&(this.devices.uart1=new Dr(this,760,i)),t.uart2&&(this.devices.uart2=new Dr(this,1e3,i)),t.uart3&&(this.devices.uart3=new Dr(this,744,i)),this.devices.fdc=new si(this,t.fda,t.fdb);var a=0;t.hda&&(this.devices.hda=new li(this,t.hda,t.hdb,!1,a++,i)),t.cdrom&&(this.devices.cdrom=new li(this,t.cdrom,void 0,!0,a++,i)),this.devices.pit=new Ls(this,i),t.enable_ne2k&&(this.devices.net=new As(this,i,t.preserve_mac_from_state_image)),t.fs9p&&(this.devices.virtio_9p=new Virtio9p(t.fs9p,this,i)),this.devices.sb16=new _r(this,i)}t.multiboot&&this.load_multiboot(t.multiboot),this.debug.init()},Xr.prototype.load_multiboot=function(t){re("Trying multiboot from buffer of size "+t.byteLength,LOG_CPU);const e=464367618,i=8192;if(t.byteLength<i){var s=new Int32Array(2048);new Uint8Array(s.buffer).set(new Uint8Array(t))}else s=new Int32Array(t,0,2048);for(var r=0;r<i;r+=4){if(s[r>>2]!==e)continue;var a=s[r+4>>2];if(e+a+s[r+8>>2]|0){re("Multiboot checksum check failed",LOG_CPU);continue}re("Multiboot magic found, flags: "+de(a>>>0,8),LOG_CPU),ne(0==(-65537&a),"TODO"),this.reg32[REG_EAX]=732803074;let i=31744;this.reg32[REG_EBX]=i,this.write32(i,0),this.cr[0]=1,this.protected_mode[0]=1,this.flags[0]=FLAGS_DEFAULT,this.is_32[0]=1,this.stack_size_32[0]=1;for(var n=0;n<6;n++)this.segment_is_null[n]=0,this.segment_offsets[n]=0,this.segment_limits[n]=4294967295,this.sreg[n]=45058;if(65536&a){re("Multiboot specifies its own address table",LOG_CPU);var o=s[r+12>>2],h=s[r+16>>2],_=s[r+20>>2],d=s[r+24>>2],c=s[r+28>>2];re("header="+de(o,8)+" load="+de(h,8)+" load_end="+de(_,8)+" bss_end="+de(d,8)+" entry="+de(c,8)),ne(h<=o);var u=r-(o-h);if(0===_)var p=void 0;else{ne(_>=h);p=_-h}let e=new Uint8Array(t,u,p);this.write_blob(e,h),this.instruction_pointer[0]=this.get_seg_cs()+c|0}else if(1179403647===s[0]){re("Multiboot image is in elf format",LOG_CPU);let e=read_elf(t);this.instruction_pointer[0]=this.get_seg_cs()+e.header.entry|0;for(let i of e.program_headers)if(0===i.type);else if(1===i.type)if(ne(i.paddr===i.vaddr),ne(i.filesz<=i.memsz),i.paddr+i.memsz<this.memory_size[0]){if(i.filesz){let e=new Uint8Array(t,i.offset,i.filesz);this.write_blob(e,i.paddr)}}else re("Warning: Skipped loading section, paddr="+de(i.paddr)+" memsz="+i.memsz,LOG_CPU);else 2===i.type||3===i.type||4===i.type||6===i.type||1685382480===i.type||1685382481===i.type||1685382483===i.type||ne(!1,"unimplemented elf section type: "+de(i.type))}else ne(!1,"Not a bootable multiboot format");this.io.register_write_consecutive(244,this,(function(t){throw console.log("Test exited with code "+de(t,2)),"HALT"}),(function(){}),(function(){}),(function(){}));for(let t=14;t<=15;t++)this.io.register_write(8192+t,this,(function(e){re("kvm-unit-test: Set irq "+de(t)+" to "+de(e,2)),e?this.device_raise_irq(t):this.device_lower_irq(t)}));re("Starting multiboot kernel at:",LOG_CPU),this.debug.dump_state(),this.debug.dump_regs();break}},Xr.prototype.fill_cmos=function(t,e){var i=e.boot_order||531;t.cmos_write(56,1|i>>4&240),t.cmos_write(61,255&i),t.cmos_write(21,128),t.cmos_write(22,2);var s=0;this.memory_size[0]>=1048576&&(s=this.memory_size[0]-1048576>>10,s=Math.min(s,65535)),t.cmos_write(23,255&s),t.cmos_write(24,s>>8&255),t.cmos_write(48,255&s),t.cmos_write(49,s>>8&255);var r=0;this.memory_size[0]>=16777216&&(r=this.memory_size[0]-16777216>>16,r=Math.min(r,65535)),t.cmos_write(52,255&r),t.cmos_write(53,r>>8&255),t.cmos_write(91,0),t.cmos_write(92,0),t.cmos_write(93,0),t.cmos_write(20,47),t.cmos_write(95,0),e.fastboot&&t.cmos_write(63,1)},Xr.prototype.load_bios=function(){var t=this.bios.main,e=this.bios.vga;if(t){var i=new Uint8Array(t),s=1048576-t.byteLength;if(this.write_blob(i,s),e){var r=new Uint8Array(e);this.write_blob(r,786432),this.io.mmap_register(4272947200,1048576,(function(t){return(t=t-4272947200|0)<r.length?r[t]:0}),(function(t,e){ne(!1,"Unexpected write to VGA rom")}))}else re("Warning: No VGA BIOS");this.io.mmap_register(4293918720,1048576,function(t){return t&=1048575,this.mem8[t]}.bind(this),function(t,e){t&=1048575,this.mem8[t]=e}.bind(this))}else re("Warning: No BIOS")},Xr.prototype.do_many_cycles=function(){var t=Pi.microtick();this.do_many_cycles_native(),this.do_many_cycles_total+=Pi.microtick()-t,this.do_many_cycles_count++},Xr.prototype.cycle=function(){this.cycle_internal()},Xr.prototype.codegen_finalize=function(t,e,i,s,r){s>>>=0,r>>>=0,ne(t>=0&&t<900);const a=new Uint8Array(this.wasm_memory.buffer,s,r);this.seen_code[e]=(this.seen_code[e]||0)+1,this.test_hook_did_generate_wasm&&this.test_hook_did_generate_wasm(a);WebAssembly.instantiate(a,{e:this.jit_imports}).then((s=>{const r=s.instance.exports.f;this.codegen_finalize_finished(t,e,i),this.wm.wasm_table.set(t+1024,r),this.test_hook_did_finalize_wasm&&this.test_hook_did_finalize_wasm(a)})).catch((t=>{throw console.log(t),t}))},Xr.prototype.log_uncompiled_code=function(t,e){if(DUMP_UNCOMPILED_ASSEMBLY&&(this.seen_code_uncompiled[t]||0)<100){this.seen_code_uncompiled[t]=(this.seen_code_uncompiled[t]||0)+1,-4096&(t^(e+=8))&&(re("truncated disassembly start="+de(t>>>0)+" end="+de(e>>>0)),e=1+(4095|t)),e<t&&(e=t),ne(e>=t);const i=new Uint8Array(e-t);for(let s=t;s<e;s++)i[s-t]=this.read8(s);re("Uncompiled code:"),this.debug.dump_code(this.is_32[0]?1:0,i,t)}},Xr.prototype.dump_function_code=function(t,e){},Xr.prototype.hlt_loop=function(){if(512&this.get_eflags_no_arith()){const t=this.run_hardware_timers(Pi.microtick());return this.handle_irqs(),t}return 100},Xr.prototype.run_hardware_timers=function(t){var e=this.devices.pit.timer(t,!1),i=this.devices.rtc.timer(t,!1);let s=100,r=100;return this.acpi_enabled[0]&&(s=this.devices.acpi.timer(t),r=this.devices.apic.timer(t)),Math.min(e,i,100,s,r)},Xr.prototype.hlt_op=function(){0==(512&this.get_eflags_no_arith())&&this.bus.send("cpu-event-halt"),this.in_hlt[0]=1,this.hlt_loop()},Xr.prototype.handle_irqs=function(){512&this.get_eflags_no_arith()&&(this.pic_acknowledge(),this.next_tick_immediately())},Xr.prototype.pic_acknowledge=function(){ne(512&this.get_eflags_no_arith()),this.devices.pic&&this.devices.pic.acknowledge_irq(),this.devices.apic&&this.devices.apic.acknowledge_irq()},Xr.prototype.device_raise_irq=function(t){ne(1===arguments.length),this.devices.pic&&this.devices.pic.set_irq(t),this.devices.ioapic&&this.devices.ioapic.set_irq(t)},Xr.prototype.device_lower_irq=function(t){this.devices.pic&&this.devices.pic.clear_irq(t),this.devices.ioapic&&this.devices.ioapic.clear_irq(t)},Xr.prototype.debug_init=function(){var t=this,e={};function i(e){var i=t.protected_mode[0]?"prot":"real";t.flags[0],FLAG_VM;for(var s=t.get_eflags(),r=t.getiopl(),a=t.cpl[0],n=h(t.sreg[REG_CS],4)+":"+h(t.get_real_eip()>>>0,8),o=h(t.sreg[REG_SS],4)+":"+h(t.reg32[REG_ES]>>>0,8),_=t.is_32[0]?"32":"16",d=t.flags[0]&FLAG_INTERRUPT?1:0,c={[FLAG_CARRY]:"c",[FLAG_PARITY]:"p",[FLAG_ADJUST]:"a",[FLAG_ZERO]:"z",[FLAG_SIGN]:"s",[FLAG_TRAP]:"t",[FLAG_INTERRUPT]:"i",[FLAG_DIRECTION]:"d",[FLAG_OVERFLOW]:"o"},u="",p=0;p<16;p++)c[1<<p]&&(u+=s&1<<p?c[1<<p]:" ");return"mode="+i+"/"+_+" paging="+ +(0!=(t.cr[0]&CR0_PG))+" pae="+ +(0!=(t.cr[4]&CR4_PAE))+" iopl="+r+" cpl="+a+" if="+d+" cs:eip="+n+" cs_off="+h(t.get_seg_cs()>>>0,8)+" flgs="+h(t.get_eflags()>>>0,6)+" ("+u+") ss:esp="+o+" ssize="+ +t.stack_size_32[0]+(e?" in "+e:"")}function s(){var e={eax:REG_EAX,ecx:REG_ECX,edx:REG_EDX,ebx:REG_EBX,esp:REG_ESP,ebp:REG_EBP,esi:REG_ESI,edi:REG_EDI},i=["eax","ecx","edx","ebx","esp","ebp","esi","edi"];REG_CS,REG_DS,REG_ES,REG_FS,REG_GS,REG_SS;for(var s="",r="",a=0;a<4;a++)s+=i[a]+"="+h(t.reg32[e[i[a]]]>>>0,8)+" ",r+=i[a+4]+"="+h(t.reg32[e[i[a+4]]]>>>0,8)+" ";return[s+=" ds="+h(t.sreg[REG_DS],4)+" es="+h(t.sreg[REG_ES],4)+" fs="+h(t.sreg[REG_FS],4),r+=" gs="+h(t.sreg[REG_GS],4)+" cs="+h(t.sreg[REG_CS],4)+" ss="+h(t.sreg[REG_SS],4)]}function r(t,e,i){if(!(1&t))return!1;var s=128==(128&t);return{size:s,global:256==(256&t),accessed:32==(32&t),dirty:64==(64&t),cache_disable:16==(16&t),user:4==(4&t),read_write:2==(2&t),address:(s&&!i?t&(e?4292870144:4290772992):4294963200&t)>>>0}}function a(e,i,s){for(var a=i?512:1024,n=i?8:4,o=i?21:22,_=0;_<a;_++){var d=e+_*n,c=t.read32s(d),u=r(c,i,!0);if(u){var p="";if(p+=u.size?"S ":" ",p+=u.accessed?"A ":" ",p+=u.cache_disable?"Cd ":" ",p+=u.user?"U ":" ",p+=u.read_write?"Rw ":" ",u.size)dbg_log("=== "+h(s+(_<<o)>>>0,8)+" -> "+h(u.address>>>0,8)+" | "+p);else{dbg_log("=== "+h(s+(_<<o)>>>0,8)+" | "+p);for(var l=0;l<a;l++){var f=u.address+l*n,m=r(c=t.read32s(f),i,!1);m&&(p="",p+=m.cache_disable?"Cd ":" ",p+=m.user?"U ":" ",p+=m.read_write?"Rw ":" ",p+=m.global?"G ":" ",p+=m.accessed?"A ":" ",p+=m.dirty?"Di ":" ",dbg_log("# "+h(s+(_<<o|l<<12)>>>0,8)+" -> "+h(m.address,8)+" | "+p+" (at "+h(f,8)+")"))}}}}}let n,o,_;this.debug=e,e.init=function(){if(t.io){var e="";t.io.register_write(1026,this,i),t.io.register_write(1280,this,i)}function i(t){10===t?(dbg_log(e,LOG_BIOS),e=""):e+=String.fromCharCode(t)}},e.get_regs_short=s,e.dump_regs=function(){var t=s();dbg_log(t[0],LOG_CPU),dbg_log(t[1],LOG_CPU)},e.get_state=i,e.dump_state=function(t){dbg_log(i(t),LOG_CPU)},e.dump_stack=function(e,i){var s=t.reg32[REG_ESP];dbg_log("========= STACK =========="),(i>=e||void 0===i)&&(e=5,i=-5);for(var r=e;r>i;r--){var a=" ";r||(a="=> "),a+=h(r,2)+" | ",dbg_log(a+h(s+4*r,8)+" | "+h(t.read32s(s+4*r)>>>0))}},e.dump_page_structures=function(){if(t.cr[4]&CR4_PAE){dbg_log("PAE enabled");for(var e=0;e<4;e++){var i=t.cr[3]+8*e,s=t.read32s(i);1&s&&a(4294963200&s,!0,e<<30)}}else dbg_log("PAE disabled"),a(t.cr[3],!1,0)},e.dump_gdt_ldt=function(){function e(e,i){for(var s=0;s<i;s+=8,e+=8){var r=t.read16(e+2)|t.read8(e+4)<<16|t.read8(e+7)<<24,a=t.read16(e)|(15&t.read8(e+6))<<16,n=t.read8(e+5),o=t.read8(e+6)>>4,_="",d=n>>5&3;_+=128&n?" P ":"NP ",16&n?(_+=4&o?"32b ":"16b ",8&n?(_+="X ",4&n&&(_+="C ")):_+="R ",_+="RW "):_+="sys: "+h(15&n),8&o&&(a=a<<12|4095),dbg_log(h(-8&s,4)+" "+h(r>>>0,8)+" ("+h(a>>>0,8)+" bytes) "+_+"; dpl = "+d+", a = "+n.toString(2)+", f = "+o.toString(2))}}dbg_log("gdt: (len = "+h(t.gdtr_size[0])+")"),e(t.translate_address_system_read(t.gdtr_offset[0]),t.gdtr_size[0]),dbg_log("\nldt: (len = "+h(t.segment_limits[REG_LDTR])+")"),e(t.translate_address_system_read(t.segment_offsets[REG_LDTR]),t.segment_limits[REG_LDTR])},e.dump_idt=function(){for(var e=0;e<t.idtr_size[0];e+=8){var i,s=t.translate_address_system_read(t.idtr_offset[0]+e),r=t.read16(s)|t.read16(s+6)<<16,a=t.read16(s+2),n=t.read8(s+5),o=n>>5&3;i=5==(31&n)?"task gate ":14==(31&n)?"intr gate ":15==(31&n)?"trap gate ":"invalid ",i+=128&n?" P":"NP",dbg_log(h(e>>3,4)+" "+h(r>>>0,8)+", "+h(a,4)+"; "+i+"; dpl = "+o+", t = "+n.toString(2))}},e.get_memory_dump=function(e,i){void 0===e?(e=0,i=t.memory_size[0]):void 0===i&&(i=e,e=0);return t.mem8.slice(e,e+i).buffer},e.memory_hex_dump=function(e,i){var s,r;i=i||64;for(var a=0;a<i>>4;a++){s=h(e+(a<<4),5)+" ";for(var n=0;n<16;n++)r=t.read8(e+(a<<4)+n),s+=h(r,2)+" ";for(s+=" ",n=0;n<16;n++)r=t.read8(e+(a<<4)+n),s+=r<33||r>126?".":String.fromCharCode(r);dbg_log(s)}},e.used_memory_dump=function(){for(var e,i=128,s=t.memory_size[0]/i/16|0,r=0;r<16;r++){e=h(r*i*s,8)+" | ";for(var a=0;a<i;a++){var n=t.mem32s[(r*i+a)*s]>0;e+=n?"X":" "}dbg_log(e)}},e.debug_interrupt=function(t){},e.dump_code=function(t,e,i){if(!o){if(void 0===n&&("function"==typeof require||(n=window.cs),void 0===n))return void dbg_log("Warning: Missing capstone library, disassembly not available");o=[new n.Capstone(n.ARCH_X86,n.MODE_16),new n.Capstone(n.ARCH_X86,n.MODE_32)]}try{o[t].disasm(e,i).forEach((function(t){dbg_log(h(t.address>>>0)+": "+v86util.pads(t.bytes.map((t=>h(t,2).slice(-2))).join(" "),20)+" "+t.mnemonic+" "+t.op_str)})),dbg_log("")}catch(t){dbg_log("Could not disassemble: "+Array.from(e).map((t=>h(t,2))).join(" "))}},e.dump_wasm=function(t){if(void 0!==_||("function"==typeof require||(_=new window.WabtModule),void 0!==_)){t=t.slice();try{var e=_.readWasm(t,{readDebugNames:!1});e.generateNames(),e.applyNames();const i=e.toText({foldExprs:!0,inlineExport:!0});dbg_log(i)}catch(e){i="failed.wasm",s=new Blob([t]),(r=document.createElement("a")).download=i,r.href=window.URL.createObjectURL(s),r.dataset.downloadurl=["application/octet-stream",r.download,r.href].join(":"),r.click(),window.URL.revokeObjectURL(r.src),console.log(e.toString())}finally{e&&e.destroy()}var i,s,r}else dbg_log("Warning: Missing libwabt, wasm dump not available")}};const Hr=1179403647;let Yr=DataView.prototype,Qr={size:1,get:Yr.getUint8,set:Yr.setUint8},Jr={size:2,get:Yr.getUint16,set:Yr.setUint16},Zr={size:4,get:Yr.getUint32,set:Yr.setUint32},$r=sa([{magic:Zr},{class:Qr},{data:Qr},{version0:Qr},{osabi:Qr},{abiversion:Qr},{pad0:(ta=7,{size:ta,get:t=>-1})},{type:Jr},{machine:Jr},{version1:Zr},{entry:Zr},{phoff:Zr},{shoff:Zr},{flags:Zr},{ehsize:Jr},{phentsize:Jr},{phnum:Jr},{shentsize:Jr},{shnum:Jr},{shstrndx:Jr}]);var ta;console.assert(52===$r.reduce(((t,e)=>t+e.size),0));let ea=sa([{type:Zr},{offset:Zr},{vaddr:Zr},{paddr:Zr},{filesz:Zr},{memsz:Zr},{flags:Zr},{align:Zr}]);console.assert(32===ea.reduce(((t,e)=>t+e.size),0));let ia=sa([{name:Zr},{type:Zr},{flags:Zr},{addr:Zr},{offset:Zr},{size:Zr},{link:Zr},{info:Zr},{addralign:Zr},{entsize:Zr}]);function sa(t){return t.map((function(t){let e=Object.keys(t);console.assert(1===e.length);let i=e[0],s=t[i];return console.assert(s.size>0),{name:i,type:s,size:s.size,get:s.get,set:s.set}}))}function ra(t){let e=new DataView(t),[i,s]=aa(e,$r);if(console.assert(52===s),DEBUG){for(let t of Object.keys(i))dbg_log(t+": 0x"+i[t].toString(16));dbg_log(i)}console.assert(1179403647===i.magic,"Bad magic"),console.assert(1===i.class,"Unimplemented: 64 bit elf"),console.assert(1===i.data,"Unimplemented: big endian"),console.assert(1===i.version0,"Bad version0"),console.assert(2===i.type,"Unimplemented type"),console.assert(1===i.version1,"Bad version1"),console.assert(52===i.ehsize,"Bad header size"),console.assert(32===i.phentsize,"Bad program header size"),console.assert(40===i.shentsize,"Bad section header size");let[r,a]=na(oa(e,i.phoff,i.phentsize*i.phnum),ea,i.phnum),[n,o]=na(oa(e,i.shoff,i.shentsize*i.shnum),ia,i.shnum);if(DEBUG&&LOG_LEVEL){console.log("%d program headers:",r.length);for(let t of r)console.log("type=%s offset=%s vaddr=%s paddr=%s filesz=%s memsz=%s flags=%s align=%s",t.type.toString(16),t.offset.toString(16),t.vaddr.toString(16),t.paddr.toString(16),t.filesz.toString(16),t.memsz.toString(16),t.flags.toString(16),t.align.toString(16));console.log("%d program headers:",n.length);for(let t of n)console.log("name=%s type=%s flags=%s addr=%s offset=%s size=%s link=%s info=%s addralign=%s entsize=%s",t.name.toString(16),t.type.toString(16),t.flags.toString(16),t.addr.toString(16),t.offset.toString(16),t.size.toString(16),t.link.toString(16),t.info.toString(16),t.addralign.toString(16),t.entsize.toString(16))}return{header:i,program_headers:r,sections_headers:n}}function aa(t,e){let i={},s=0;for(let r of e){let e=r.get.call(t,s,true);console.assert(void 0===i[r.name]),i[r.name]=e,s+=r.size}return[i,s]}function na(t,e,i){let s=[],r=0;for(var a=0;a<i;a++){let[i,a]=aa(oa(t,r),e);s.push(i),r+=a}return[s,r]}function oa(t,e,i){return new DataView(t.buffer,t.byteOffset+e,i)}console.assert(40===ia.reduce(((t,e)=>t+e.size),0));const ha=497,_a=500,da=506,ca=510,ua=514,pa=518,la=528,fa=529,ma=532,ga=536,ba=540,ya=548,va=552,wa=556,ka=560,xa=564,Aa=565,qa=566,Ia=568,Ca=584,za=588,Oa=600,Ra=608,La=43605,Ea=1400005704,Pa=255,Ta=1,Da=32,Ua=64,Ga=128;function Sa(t,e,i,s){dbg_log("Trying to load kernel of size "+e.byteLength);const r=1048576,a=new Uint8Array(e),n=new Uint16Array(e),o=new Uint32Array(e),_=a[497]||4;o[125],n[253];const d=n[255];if(43605!==d)return void dbg_log("Bad checksum1: "+h(d));const c=n[257]|n[258]<<16;if(1400005704!==c)return void dbg_log("Bad checksum2: "+h(c));const u=n[259];dbg_assert(u>=514);const p=a[529];dbg_assert(1&p);const l=n[283],f=o[139],m=o[140],g=a[564],b=a[565],y=o[142],v=o[146],w=o[147],k=o[150],x=o[151],A=o[152];dbg_log("kernel boot protocol version: "+h(u)),dbg_log("flags="+h(p)+" xflags="+h(l)),dbg_log("code32_start="+h(o[133])),dbg_log("initrd_addr_max="+h(f)),dbg_log("kernel_alignment="+h(m)),dbg_log("relocatable="+g),dbg_log("min_alignment="+h(b)),dbg_log("cmdline max="+h(y)),dbg_log("payload offset="+h(v)+" size="+h(w)),dbg_log("pref_address="+h(x)+":"+h(k)),dbg_log("init_size="+h(A));const q=524288,I=57344;a[528]=255;const C=-33&p&-65|128;a[529]=C,n[274]=56832,n[253]=65535,dbg_log("heap_end_ptr="+h(56832)),s+="\0",dbg_assert(s.length<y);const z=581632;dbg_log("cmd_line_ptr="+h(z)),o[138]=z;for(let e=0;e<s.length;e++)t[z+e]=s.charCodeAt(e);const O=512*(_+1);dbg_log("prot_mode_kernel_start="+h(O));const R=new Uint8Array(e,0,O),L=new Uint8Array(e,O);let E=0,P=0;return i&&(E=67108864,P=i.byteLength,dbg_assert(r+L.length<E),t.set(new Uint8Array(i),E)),o[134]=E,o[135]=P,dbg_assert(q+R.length<655360),t.set(R,q),t.set(L,r),{option_rom:{name:"genroms/kernel.bin",data:Ma(32768,I)}}}function Ma(t,e){const i=new Uint8Array(256);new Uint16Array(i.buffer)[0]=43605,i[2]=1;let s=3;i[s++]=250,i[s++]=184,i[s++]=t>>0,i[s++]=t>>8,i[s++]=142,i[s++]=192,i[s++]=142,i[s++]=216,i[s++]=142,i[s++]=224,i[s++]=142,i[s++]=232,i[s++]=142,i[s++]=208,i[s++]=188,i[s++]=e>>0,i[s++]=e>>8,i[s++]=234,i[s++]=0,i[s++]=0,i[s++]=t+32>>0,i[s++]=t+32>>8,dbg_assert(!0);i[25]=0;let r=0;for(let t=0;t<i.length;t++)r+=i[t];return i[25]=-r,i}Xr.prototype.mmap_read8=function(t){const e=this.memory_map_read8[t>>>17](t);return ne(e>=0&&e<=255),e},Xr.prototype.mmap_write8=function(t,e){ne(e>=0&&e<=255),this.memory_map_write8[t>>>17](t,e)},Xr.prototype.mmap_read16=function(t){var e=this.memory_map_read8[t>>>17];const i=e(t)|e(t+1|0)<<8;return ne(i>=0&&i<=65535),i},Xr.prototype.mmap_write16=function(t,e){var i=this.memory_map_write8[t>>>17];ne(e>=0&&e<=65535),i(t,255&e),i(t+1|0,e>>8)},Xr.prototype.mmap_read32=function(t){var e=t>>>17;return this.memory_map_read32[e](t)},Xr.prototype.mmap_write32=function(t,e){var i=t>>>17;this.memory_map_write32[i](t,e)},Xr.prototype.mmap_write64=function(t,e,i){var s=t>>>17;ne(s===t+7>>>17);var r=this.memory_map_write32[s];r(t,e),r(t+4,i)},Xr.prototype.mmap_write128=function(t,e,i,s,r){var a=t>>>17;ne(a===t+12>>>17);var n=this.memory_map_write32[a];n(t,e),n(t+4,i),n(t+8,s),n(t+12,r)},Xr.prototype.write_blob=function(t,e){ne(t&&t.length>=0),t.length&&(ne(!this.in_mapped_range(e)),ne(!this.in_mapped_range(e+t.length-1)),this.jit_dirty_cache(e,e+t.length),this.mem8.set(t,e))},Xr.prototype.read_blob=function(t,e){return e&&(ne(!this.in_mapped_range(t)),ne(!this.in_mapped_range(t+e-1))),this.mem8.subarray(t,t+e)};var Fa=6,Va=-2039052682,Ba=0,Na=1,Wa=2,ja=3,Ka=16;const Xa=4247762216;function Ha(t){this.message=t}Ha.prototype=new Error;const Ya={Uint8Array:Uint8Array,Int8Array:Int8Array,Uint16Array:Uint16Array,Int16Array:Int16Array,Uint32Array:Uint32Array,Int32Array:Int32Array,Float32Array:Float32Array,Float64Array:Float64Array};function Qa(t,e){if("object"!=typeof t||null===t)return dbg_assert("function"!=typeof t),t;if(t instanceof Array)return t.map((t=>Qa(t,e)));if(t.constructor===Object&&(console.log(t),dbg_assert(t.constructor!==Object,"Expected non-object")),t.BYTES_PER_ELEMENT){var i=new Uint8Array(t.buffer,t.byteOffset,t.length*t.BYTES_PER_ELEMENT);const s=t.constructor.name.replace("bound ","");return dbg_assert(Ya[s]),{__state_type__:s,buffer_id:e.push(i)-1}}t.get_state||console.log("Object without get_state: ",t);for(var s=t.get_state(),r=[],a=0;a<s.length;a++){var n=s[a];dbg_assert("function"!=typeof n),r[a]=Qa(n,e)}return r}function Ja(t,e){if("object"!=typeof t||null===t)return dbg_assert("function"!=typeof t),t;if(t instanceof Array){for(let i=0;i<t.length;i++)t[i]=Ja(t[i],e);return t}const i=t.__state_type__;dbg_assert(void 0!==i);const s=Ya[i];dbg_assert(s,"Unkown type: "+i);return new s(e[t.buffer_id])}Xr.prototype.save_state=function(){for(var t=[],e=Qa(this,t),i=[],s=0,r=0;r<t.length;r++){var a=t[r].byteLength;i[r]={offset:s,length:a},s=(s+=a)+3&-4}var n=JSON.stringify({buffer_infos:i,state:e}),o=(new TextEncoder).encode(n),h=16+o.length,_=(h=h+3&-4)+s,d=new ArrayBuffer(_),c=new Int32Array(d,0,4);new Uint8Array(d,16,o.length).set(o);var u=new Uint8Array(d,h);c[0]=-2039052682,c[1]=6,c[2]=_,c[3]=o.length;for(r=0;r<t.length;r++){var p=t[r];dbg_assert(p.constructor===Uint8Array),u.set(p,i[r].offset)}return dbg_log("State: json size "+(o.byteLength>>10)+"k"),dbg_log("State: Total buffers size "+(u.byteLength>>10)+"k"),d},Xr.prototype.restore_state=function(t){function e(t,e){const i=t.length;if(i<16)throw new Ha("Invalid length: "+i);const s=new Int32Array(t.buffer,t.byteOffset,4);if(-2039052682!==s[0])throw new Ha("Invalid header: "+h(s[0]>>>0));if(6!==s[1])throw new Ha("Version mismatch: dump="+s[1]+" we=6");if(e&&s[2]!==i)throw new Ha("Length doesn't match header: real="+i+" header="+s[2]);return s[3]}function i(t){const e=(new TextDecoder).decode(t);return JSON.parse(e)}if(t=new Uint8Array(t),4247762216===new Uint32Array(t.buffer,0,1)[0]){const s=this.zstd_create_ctx(t.length);new Uint8Array(this.wasm_memory.buffer,this.zstd_get_src_ptr(s),t.length).set(t);let r=this.zstd_read(s,16);const a=e(new Uint8Array(this.wasm_memory.buffer,r,16),!1);this.zstd_read_free(r,16),r=this.zstd_read(s,a);const n=i(new Uint8Array(this.wasm_memory.buffer,r,a));this.zstd_read_free(r,a);let o=n.state;const h=n.buffer_infos,_=[];let d=16+a;for(const t of h){const e=(d+3&-4)-d,i=1048576;if(t.length>i){const r=this.zstd_read(s,e);this.zstd_read_free(r,e);const a=new Uint8Array(t.length);_.push(a.buffer);let n=0;for(;n<t.length;){const e=t.length-n;dbg_assert(e>=0);const r=Math.min(e,i),o=this.zstd_read(s,r);a.set(new Uint8Array(this.wasm_memory.buffer,o,r),n),this.zstd_read_free(o,r),n+=r}}else{const i=this.zstd_read(s,e+t.length),r=i+e;_.push(this.wasm_memory.buffer.slice(r,r+t.length)),this.zstd_read_free(i,e+t.length)}d+=e+t.length}o=Ja(o,_),this.set_state(o),this.zstd_free_ctx(s)}else{const s=e(t,!0);if(s<0||s+12>=t.length)throw new Ha("Invalid info block length: "+s);const r=i(t.subarray(16,16+s));let a=r.state;const n=r.buffer_infos;let o=16+s;o=o+3&-4;a=Ja(a,n.map((e=>{const i=o+e.offset;return t.buffer.slice(i,i+e.length)}))),this.set_state(a)}};const Za=6900,$a=9,tn=16,en=1,sn=2,rn=3,an=4,nn=5,on=1,hn=2,_n=4,dn=8,cn=64,un=128,pn=1,ln=2,fn=28,mn=29,gn=32,bn=16,yn=6,vn=2,wn=6,kn=8,xn=65535,An=1,qn=2,In=4,Cn=1,zn=1;function On(t,e){t.io,this.cpu=t,this.pci=t.devices.pci,this.device_id=e.device_id,this.pci_space=[244,26,255&e.device_id,e.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,255&e.subsystem_device_id,e.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(v86util.zeros(256-this.pci_space.length)),this.pci_id=e.pci_id,this.pci_bars=[],this.name=e.name,this.device_feature_select=0,this.driver_feature_select=0,this.device_feature=new Uint32Array(4),this.driver_feature=new Uint32Array(4);for(const t of e.common.features)dbg_assert(t>=0,"VirtIO device<"+this.name+"> feature bit numbers must be non-negative"),dbg_assert(t<128,"VirtIO device<"+this.name+"> feature bit numbers assumed less than 128 in implementation"),this.device_feature[t>>>5]|=1<<(31&t),this.driver_feature[t>>>5]|=1<<(31&t);dbg_assert(e.common.features.includes(32),"VirtIO device<"+this.name+"> only non-transitional devices are supported"),this.features_ok=!0,this.device_status=0,this.config_has_changed=!1,this.config_generation=0,this.queues=[];for(const i of e.common.queues)this.queues.push(new Rn(t,this,i));if(this.queue_select=0,this.queue_selected=this.queues[0],this.isr_status=0,DEBUG){const t=new Set;for(const i of this.queues.map((t=>t.notify_offset))){const s=e.notification.single_handler?0:i;t.add(s),dbg_assert(e.notification.handlers[s],"VirtIO device<"+this.name+"> every queue's notifier must exist")}for(const[i,s]of e.notification.handlers.entries())dbg_assert(!s||t.has(i),"VirtIO device<"+this.name+"> no defined notify handler should be unused")}const i=[];i.push(this.create_common_capability(e.common)),i.push(this.create_notification_capability(e.notification)),i.push(this.create_isr_capability(e.isr_status)),e.device_specific&&i.push(this.create_device_specific_capability(e.device_specific)),this.init_capabilities(i),t.devices.pci.register_device(this),this.reset()}function Rn(t,e,i){this.cpu=t,this.virtio=e,this.size=i.size_supported,this.size_supported=i.size_supported,this.mask=this.size-1,this.enabled=!1,this.notify_offset=i.notify_offset,this.desc_addr=0,this.avail_addr=0,this.avail_last_idx=0,this.used_addr=0,this.num_staged_replies=0,this.reset()}function Ln(t,e){this.cpu=t.cpu,this.virtio=t.virtio,this.head_idx=e,this.read_buffers=[],this.read_buffer_idx=0,this.read_buffer_offset=0,this.length_readable=0,this.write_buffers=[],this.write_buffer_idx=0,this.write_buffer_offset=0,this.length_written=0,this.length_writable=0;let i=t.desc_addr,s=e,r=0,a=t.size,n=!1;const o=this.virtio.is_feature_negotiated(28);for(dbg_log("<<< Descriptor chain start",LOG_VIRTIO);;){const e=t.get_descriptor(i,s);if(dbg_log("descriptor: idx="+s+" addr="+h(e.addr_high,8)+":"+h(e.addr_low,8)+" len="+h(e.len,8)+" flags="+h(e.flags,4)+" next="+h(e.next,4),LOG_VIRTIO),o&&4&e.flags)DEBUG&&1&e.flags&&dbg_log("Driver bug: has set VIRTQ_DESC_F_NEXT flag in an indirect table descriptor",LOG_VIRTIO),i=e.addr_low,s=0,r=0,a=e.len/16,dbg_log("start indirect",LOG_VIRTIO);else{if(2&e.flags)n=!0,this.write_buffers.push(e),this.length_writable+=e.len;else{if(n){dbg_log("Driver bug: readonly buffer after writeonly buffer within chain",LOG_VIRTIO);break}this.read_buffers.push(e),this.length_readable+=e.len}if(r++,r>a){dbg_log("Driver bug: descriptor chain cycle detected",LOG_VIRTIO);break}if(!(1&e.flags))break;s=e.next}}dbg_log("Descriptor chain end >>>",LOG_VIRTIO)}function En(t,e){this.bus=e,this.socket=void 0,this.send_queue=[],this.url=t,this.reconnect_interval=1e4,this.last_connect_attempt=Date.now()-this.reconnect_interval,this.send_queue_limit=64,this.bus.register("net0-send",(function(t){this.send(t)}),this)}On.prototype.create_common_capability=function(t){return{type:1,bar:0,port:t.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:4,name:"device_feature_select",read:()=>this.device_feature_select,write:t=>{this.device_feature_select=t}},{bytes:4,name:"device_feature",read:()=>this.device_feature[this.device_feature_select]||0,write:t=>{}},{bytes:4,name:"driver_feature_select",read:()=>this.driver_feature_select,write:t=>{this.driver_feature_select=t}},{bytes:4,name:"driver_feature",read:()=>this.driver_feature[this.driver_feature_select]||0,write:t=>{const e=this.device_feature[this.driver_feature_select];this.driver_feature_select<this.driver_feature.length&&(this.driver_feature[this.driver_feature_select]=t&e);const i=t&~e;this.features_ok=this.features_ok&&!i}},{bytes:2,name:"msix_config",read:()=>(dbg_log("No msi-x capability supported.",LOG_VIRTIO),65535),write:t=>{dbg_log("No msi-x capability supported.",LOG_VIRTIO)}},{bytes:2,name:"num_queues",read:()=>this.queues.length,write:t=>{}},{bytes:1,name:"device_status",read:()=>this.device_status,write:e=>{0===e?(dbg_log("Reset device<"+this.name+">",LOG_VIRTIO),this.reset()):128&e?dbg_log("Warning: Device<"+this.name+"> status failed",LOG_VIRTIO):dbg_log("Device<"+this.name+"> status: "+(1&e?"ACKNOWLEDGE ":"")+(2&e?"DRIVER ":"")+(4&e?"DRIVER_OK":"")+(8&e?"FEATURES_OK ":"")+(64&e?"DEVICE_NEEDS_RESET":""),LOG_VIRTIO),e&~this.device_status&4&&64&this.device_status&&this.notify_config_changes(),this.features_ok||(DEBUG&&8&e&&dbg_log("Removing FEATURES_OK",LOG_VIRTIO),e&=-9),this.device_status=e,e&~this.device_status&4&&t.on_driver_ok()}},{bytes:1,name:"config_generation",read:()=>this.config_generation,write:t=>{}},{bytes:2,name:"queue_select",read:()=>this.queue_select,write:t=>{this.queue_select=t,this.queue_select<this.queues.length?this.queues_selected=this.queues[this.queue_select]:this.queue_selected=null}},{bytes:2,name:"queue_size",read:()=>this.queue_selected?this.queue_selected.size:0,write:t=>{this.queue_selected&&(t&t-1&&(dbg_log("Warning: dev<"+this.name+"> Given queue size was not a power of 2. Rounding up to next power of 2.",LOG_VIRTIO),t=1<<v86util.int_log2(t-1)+1),t>this.queue_selected.size_supported&&(dbg_log("Warning: dev<"+this.name+"> Trying to set queue size greater than supported. Clamping to supported size.",LOG_VIRTIO),t=this.queue_selected.size_supported),this.queue_selected.set_size(t))}},{bytes:2,name:"queue_msix_vector",read:()=>(dbg_log("No msi-x capability supported.",LOG_VIRTIO),65535),write:t=>{dbg_log("No msi-x capability supported.",LOG_VIRTIO)}},{bytes:2,name:"queue_enable",read:()=>this.queue_selected?0|this.queue_selected.enabled:0,write:t=>{this.queue_selected&&(1===t?this.queue_selected.is_configured()?this.queue_selected.enable():dbg_log("Driver bug: tried enabling unconfigured queue",LOG_VIRTIO):0===t&&dbg_log("Driver bug: tried writing 0 to queue_enable",LOG_VIRTIO))}},{bytes:2,name:"queue_notify_off",read:()=>this.queue_selected?this.queue_selected.notify_offset:0,write:t=>{}},{bytes:4,name:"queue_desc (low dword)",read:()=>this.queue_selected?this.queue_selected.desc_addr:0,write:t=>{this.queue_selected&&(this.queue_selected.desc_addr=t)}},{bytes:4,name:"queue_desc (high dword)",read:()=>0,write:t=>{dbg_log("Warning: High dword of 64 bit queue_desc ignored",LOG_VIRTIO)}},{bytes:4,name:"queue_avail (low dword)",read:()=>this.queue_selected?this.queue_selected.avail_addr:0,write:t=>{this.queue_selected&&(this.queue_selected.avail_addr=t)}},{bytes:4,name:"queue_avail (high dword)",read:()=>0,write:t=>{dbg_log("Warning: High dword of 64 bit queue_avail ignored",LOG_VIRTIO)}},{bytes:4,name:"queue_used (low dword)",read:()=>this.queue_selected?this.queue_selected.used_addr:0,write:t=>{this.queue_selected&&(this.queue_selected.used_addr=t)}},{bytes:4,name:"queue_used (high dword)",read:()=>0,write:t=>{dbg_log("Warning: High dword of 64 bit queue_used ignored",LOG_VIRTIO)}}]}},On.prototype.create_notification_capability=function(t){const e=[];let i;t.single_handler?(dbg_assert(1===t.handlers.length,"VirtIO device<"+this.name+"> too many notify handlers specified: expected single handler"),i=0):i=2;for(const[i,s]of t.handlers.entries())e.push({bytes:2,name:"notify"+i,read:()=>65535,write:s||(t=>{})});return{type:2,bar:1,port:t.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array([255&i,i>>8&255,i>>16&255,i>>24]),struct:e}},On.prototype.create_isr_capability=function(t){return{type:3,bar:2,port:t.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:1,name:"isr_status",read:()=>{const t=this.isr_status;return this.lower_irq(),t},write:t=>{}}]}},On.prototype.create_device_specific_capability=function(t){return dbg_assert(3&~t.offset,"VirtIO device<"+this.name+"> device specific cap offset must be 4-byte aligned"),{type:4,bar:3,port:t.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:t.struct}},On.prototype.init_capabilities=function(t){let e=this.pci_space[52]=64,i=e;for(const s of t){const t=16+s.extra.length;i=e,e=i+t,dbg_assert(e<=256,"VirtIO device<"+this.name+"> can't fit all capabilities into 256byte configspace"),dbg_assert(0<=s.bar&&s.bar<6,"VirtIO device<"+this.name+"> capability invalid bar number");let r=s.struct.reduce(((t,e)=>t+e.bytes),0);r+=s.offset,r=r<16?16:1<<v86util.int_log2(r-1)+1,dbg_assert(0==(s.port&r-1),"VirtIO device<"+this.name+"> capability port should be aligned to pci bar size"),this.pci_bars[s.bar]={size:r},this.pci_space[i]=9,this.pci_space[i+1]=e,this.pci_space[i+2]=t,this.pci_space[i+3]=s.type,this.pci_space[i+4]=s.bar,this.pci_space[i+5]=0,this.pci_space[i+6]=0,this.pci_space[i+7]=0,this.pci_space[i+8]=255&s.offset,this.pci_space[i+9]=s.offset>>>8&255,this.pci_space[i+10]=s.offset>>>16&255,this.pci_space[i+11]=s.offset>>>24,this.pci_space[i+12]=255&r,this.pci_space[i+13]=r>>>8&255,this.pci_space[i+14]=r>>>16&255,this.pci_space[i+15]=r>>>24;for(const[t,e]of s.extra.entries())this.pci_space[i+16+t]=e;const a=16+4*s.bar;this.pci_space[a]=254&s.port|!s.use_mmio,this.pci_space[a+1]=s.port>>>8&255,this.pci_space[a+2]=s.port>>>16&255,this.pci_space[a+3]=s.port>>>24&255;let n=s.port+s.offset;for(const t of s.struct){let e=t.read,i=t.write;if(DEBUG&&(e=()=>{const e=t.read();return dbg_log("Device<"+this.name+"> cap["+s.type+"] read["+t.name+"] => "+h(e,8*t.bytes),LOG_VIRTIO),e},i=e=>{dbg_log("Device<"+this.name+"> cap["+s.type+"] write["+t.name+"] <= "+h(e,8*t.bytes),LOG_VIRTIO),t.write(e)}),s.use_mmio)dbg_assert(!1,"VirtIO device <"+this.name+"> mmio capability not implemented.");else{const s=function(t){return dbg_log("Warning: 8-bit read from 16-bit virtio port",LOG_VIRTIO),e(-2&t)>>((1&t)<<3)&255},r=function(t){return dbg_log("Warning: 8-bit read from 32-bit virtio port",LOG_VIRTIO),e(-4&t)>>((3&t)<<3)&255};switch(t.bytes){case 4:this.cpu.io.register_read(n,this,r,void 0,e),this.cpu.io.register_write(n,this,void 0,void 0,i);break;case 2:this.cpu.io.register_read(n,this,s,e),this.cpu.io.register_write(n,this,void 0,i);break;case 1:this.cpu.io.register_read(n,this,e),this.cpu.io.register_write(n,this,i);break;default:dbg_assert(!1,"VirtIO device <"+this.name+"> invalid capability field width of "+t.bytes+" bytes")}}n+=t.bytes}}dbg_assert(e+20<=256,"VirtIO device<"+this.name+"> can't fit all capabilities into 256byte configspace"),this.pci_space[e]=9,this.pci_space[e+1]=0,this.pci_space[e+2]=20,this.pci_space[e+3]=5,this.pci_space[e+4]=0,this.pci_space[e+5]=0,this.pci_space[e+6]=0,this.pci_space[e+7]=0,this.pci_space[e+8]=0,this.pci_space[e+9]=0,this.pci_space[e+10]=0,this.pci_space[e+11]=0,this.pci_space[e+12]=0,this.pci_space[e+13]=0,this.pci_space[e+14]=0,this.pci_space[e+15]=0,this.pci_space[e+16]=0,this.pci_space[e+17]=0,this.pci_space[e+18]=0,this.pci_space[e+19]=0},On.prototype.get_state=function(){let t=[];return t[0]=this.device_feature_select,t[1]=this.driver_feature_select,t[2]=this.device_feature,t[3]=this.driver_feature,t[4]=this.features_ok,t[5]=this.device_status,t[6]=this.config_has_changed,t[7]=this.config_generation,t[8]=this.isr_status,t[9]=this.queue_select,t=t.concat(this.queues),t},On.prototype.set_state=function(t){this.device_feature_select=t[0],this.driver_feature_select=t[1],this.device_feature=t[2],this.driver_feature=t[3],this.features_ok=t[4],this.device_status=t[5],this.config_has_changed=t[6],this.config_generation=t[7],this.isr_status=t[8],this.queue_select=t[9];let e=0;for(let i of t.slice(10))this.queues[e].set_state(i),e++;this.queue_selected=this.queues[this.queue_select]||null},On.prototype.reset=function(){this.device_feature_select=0,this.driver_feature_select=0,this.driver_feature.set(this.device_feature),this.features_ok=!0,this.device_status=0,this.queue_select=0,this.queue_selected=this.queues[0];for(const t of this.queues)t.reset();this.config_has_changed=!1,this.config_generation=0,this.lower_irq()},On.prototype.notify_config_changes=function(){this.config_has_changed=!0,4&this.device_status?this.raise_irq(2):dbg_assert(!1,"VirtIO device<"+this.name+"> attempted to notify driver before DRIVER_OK")},On.prototype.update_config_generation=function(){this.config_has_changed&&(this.config_generation++,this.config_generation&=255,this.config_has_changed=!1)},On.prototype.is_feature_negotiated=function(t){return(this.driver_feature[t>>>5]&1<<(31&t))>0},On.prototype.needs_reset=function(){dbg_log("Device<"+this.name+"> experienced error - requires reset",LOG_VIRTIO),this.device_status|=64,4&this.device_status&&this.notify_config_changes()},On.prototype.raise_irq=function(t){dbg_log("Raise irq "+h(t),LOG_VIRTIO),this.isr_status|=t,this.pci.raise_irq(this.pci_id)},On.prototype.lower_irq=function(){dbg_log("Lower irq ",LOG_VIRTIO),this.isr_status=0,this.pci.lower_irq(this.pci_id)},Rn.prototype.get_state=function(){const t=[];return t[0]=this.size,t[1]=this.size_supported,t[2]=this.enabled,t[3]=this.notify_offset,t[4]=this.desc_addr,t[5]=this.avail_addr,t[6]=this.avail_last_idx,t[7]=this.used_addr,t[8]=this.num_staged_replies,t},Rn.prototype.set_state=function(t){this.size=t[0],this.size_supported=t[1],this.enabled=t[2],this.notify_offset=t[3],this.desc_addr=t[4],this.avail_addr=t[5],this.avail_last_idx=t[6],this.used_addr=t[7],this.num_staged_replies=t[8],this.mask=this.size-1},Rn.prototype.reset=function(){this.enabled=!1,this.desc_addr=0,this.avail_addr=0,this.avail_last_idx=0,this.used_addr=0,this.num_staged_replies=0,this.set_size(this.size_supported)},Rn.prototype.is_configured=function(){return this.desc_addr&&this.avail_addr&&this.used_addr},Rn.prototype.enable=function(){dbg_assert(this.is_configured(),"VirtQueue must be configured before enabled"),this.enabled=!0},Rn.prototype.set_size=function(t){dbg_assert(0==(t&t-1),"VirtQueue size must be power of 2 or zero"),dbg_assert(t<=this.size_supported,"VirtQueue size must be within supported size"),this.size=t,this.mask=t-1},Rn.prototype.count_requests=function(){return dbg_assert(this.avail_addr,"VirtQueue addresses must be configured before use"),this.avail_get_idx()-this.avail_last_idx&this.mask},Rn.prototype.has_request=function(){return dbg_assert(this.avail_addr,"VirtQueue addresses must be configured before use"),(this.avail_get_idx()&this.mask)!==this.avail_last_idx},Rn.prototype.pop_request=function(){dbg_assert(this.avail_addr,"VirtQueue addresses must be configured before use"),dbg_assert(this.has_request(),"VirtQueue must not pop nonexistent request");const t=this.avail_get_entry(this.avail_last_idx);dbg_log("Pop request: avail_last_idx="+this.avail_last_idx+" desc_idx="+t,LOG_VIRTIO);const e=new Ln(this,t);return this.avail_last_idx=this.avail_last_idx+1&this.mask,e},Rn.prototype.push_reply=function(t){dbg_assert(this.used_addr,"VirtQueue addresses must be configured before use"),dbg_assert(this.num_staged_replies<this.size,"VirtQueue replies must not exceed queue size");const e=this.used_get_idx()+this.num_staged_replies&this.mask;dbg_log("Push reply: used_idx="+e+" desc_idx="+t.head_idx,LOG_VIRTIO),this.used_set_entry(e,t.head_idx,t.length_written),this.num_staged_replies++},Rn.prototype.flush_replies=function(){if(dbg_assert(this.used_addr,"VirtQueue addresses must be configured before use"),0===this.num_staged_replies)return void dbg_log("flush_replies: Nothing to flush",LOG_VIRTIO);dbg_log("Flushing "+this.num_staged_replies+" replies",LOG_VIRTIO);const t=this.used_get_idx()+this.num_staged_replies&65535;this.used_set_idx(t),this.num_staged_replies=0,this.virtio.is_feature_negotiated(29)?(this.avail_get_used_event(),this.virtio.raise_irq(1)):1&~this.avail_get_flags()&&this.virtio.raise_irq(1)},Rn.prototype.notify_me_after=function(t){dbg_assert(t>=0,"Must skip a non-negative number of requests");const e=this.avail_get_idx()+t&65535;this.used_set_avail_event(e)},Rn.prototype.get_descriptor=function(t,e){return{addr_low:this.cpu.read32s(t+16*e),addr_high:this.cpu.read32s(t+16*e+4),len:this.cpu.read32s(t+16*e+8),flags:this.cpu.read16(t+16*e+12),next:this.cpu.read16(t+16*e+14)}},Rn.prototype.avail_get_flags=function(){return this.cpu.read16(this.avail_addr)},Rn.prototype.avail_get_idx=function(){return this.cpu.read16(this.avail_addr+2)},Rn.prototype.avail_get_entry=function(t){return this.cpu.read16(this.avail_addr+4+2*t)},Rn.prototype.avail_get_used_event=function(){return this.cpu.read16(this.avail_addr+4+2*this.size)},Rn.prototype.used_get_flags=function(){return this.cpu.read16(this.used_addr)},Rn.prototype.used_set_flags=function(t){this.cpu.write16(this.used_addr,t)},Rn.prototype.used_get_idx=function(){return this.cpu.read16(this.used_addr+2)},Rn.prototype.used_set_idx=function(t){this.cpu.write16(this.used_addr+2,t)},Rn.prototype.used_set_entry=function(t,e,i){this.cpu.write32(this.used_addr+4+8*t,e),this.cpu.write32(this.used_addr+8+8*t,i)},Rn.prototype.used_set_avail_event=function(t){this.cpu.write16(this.used_addr+4+8*this.size,t)},Ln.prototype.get_next_blob=function(t){let e=0,i=t.length;for(;i;){if(this.read_buffer_idx===this.read_buffers.length){dbg_log("Device<"+this.virtio.name+"> Read more than device-readable buffers has",LOG_VIRTIO);break}const s=this.read_buffers[this.read_buffer_idx],r=s.addr_low+this.read_buffer_offset;let a=s.len-this.read_buffer_offset;a>i?(a=i,this.read_buffer_offset+=i):(this.read_buffer_idx++,this.read_buffer_offset=0),t.set(this.cpu.read_blob(r,a),e),e+=a,i-=a}return e},Ln.prototype.set_next_blob=function(t){let e=0,i=t.length;for(;i;){if(this.write_buffer_idx===this.write_buffers.length){dbg_log("Device<"+this.virtio.name+"> Write more than device-writable capacity",LOG_VIRTIO);break}const s=this.write_buffers[this.write_buffer_idx],r=s.addr_low+this.write_buffer_offset;let a=s.len-this.write_buffer_offset;a>i?(a=i,this.write_buffer_offset+=i):(this.write_buffer_idx++,this.write_buffer_offset=0);const n=e+a;this.cpu.write_blob(t.subarray(e,n),r),e+=a,i-=a}return this.length_written+=e,e},En.prototype.handle_message=function(t){this.bus&&this.bus.send("net0-receive",new Uint8Array(t.data))},En.prototype.handle_close=function(t){this.connect(),setTimeout(this.connect.bind(this),this.reconnect_interval)},En.prototype.handle_open=function(t){for(var e=0;e<this.send_queue.length;e++)this.send(this.send_queue[e]);this.send_queue=[]},En.prototype.handle_error=function(t){},En.prototype.destroy=function(){this.socket&&this.socket.close()},En.prototype.connect=function(){if("undefined"!=typeof WebSocket){if(this.socket){var t=this.socket.readyState;if(0===t||1===t)return}var e=Date.now();this.last_connect_attempt+this.reconnect_interval>e||(this.last_connect_attempt=Date.now(),this.socket=new WebSocket(this.url),this.socket.binaryType="arraybuffer",this.socket.onopen=this.handle_open.bind(this),this.socket.onmessage=this.handle_message.bind(this),this.socket.onclose=this.handle_close.bind(this),this.socket.onerror=this.handle_error.bind(this))}},En.prototype.send=function(t){this.socket&&1===this.socket.readyState?this.socket.send(t):(this.send_queue.push(t),this.send_queue.length>2*this.send_queue_limit&&(this.send_queue=this.send_queue.slice(-this.send_queue_limit)),this.connect())},En.prototype.change_proxy=function(t){this.url=t,this.socket&&(this.socket.onclose=function(){},this.socket.onerror=function(){},this.socket.close(),this.socket=void 0)};function Pn(t){var e={},i=this;this.emu_enabled=!0;var s=new Uint16Array([0,0,0,0,0,0,0,0,14,15,0,0,0,28,0,0,42,29,56,0,58,0,0,0,0,0,0,1,0,0,0,0,57,57417,57425,57423,57415,57419,57416,57421,80,0,0,0,0,82,83,0,11,2,3,4,5,6,7,8,9,10,0,39,0,13,0,0,0,30,48,46,32,18,33,34,35,23,36,37,38,50,49,24,25,16,19,31,20,22,47,17,45,21,44,57435,57436,57437,0,0,82,79,80,81,75,76,77,71,72,73,0,0,0,0,0,0,59,60,61,62,63,64,65,66,67,68,87,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,39,13,51,12,52,53,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,43,27,40,0,57435,57400,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),r={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},a={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},n={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,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,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,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};function o(t){return!t.altKey&&e[56]&&c(56,!1),d(t,!1)}function h(t){return!t.altKey&&e[56]&&c(56,!1),d(t,!0)}function _(t){for(var i,s=Object.keys(e),r=0;r<s.length;r++)i=+s[r],e[i]&&c(i,!1);e={}}function d(t,e){if(i.bus&&function(t){return(!t.shiftKey||!t.ctrlKey||73!==t.keyCode&&74!==t.keyCode&&75!==t.keyCode)&&!!i.emu_enabled&&(!t.target||t.target.classList.contains("phone_keyboard")||"INPUT"!==t.target.nodeName&&"TEXTAREA"!==t.target.nodeName)}(t)){var r=function(t){if(void 0!==t.code){var e=n[t.code];if(void 0!==e)return e}return s[t.keyCode]}(t);if(r)return c(r,e,t.repeat),t.preventDefault&&t.preventDefault(),!1;console.log("Missing char in map: keyCode="+(t.keyCode||-1).toString(16)+" code="+t.code)}}function c(t,i,s){if(i)e[t]&&!s&&c(t,!1);else if(!e[t])return;e[t]=i,i||(t|=128),t>255?(u(t>>8),u(255&t)):u(t)}function u(t){i.bus.send("keyboard-code",t)}this.bus=t,this.destroy=function(){"undefined"!=typeof window&&(window.removeEventListener("keyup",o,!1),window.removeEventListener("keydown",h,!1),window.removeEventListener("blur",_,!1))},this.init=function(){"undefined"!=typeof window&&(this.destroy(),window.addEventListener("keyup",o,!1),window.addEventListener("keydown",h,!1),window.addEventListener("blur",_,!1))},this.init(),this.simulate_press=function(t){var e={keyCode:t};d(e,!0),d(e,!1)},this.simulate_char=function(t){var e=t.charCodeAt(0);e in r?this.simulate_press(r[e]):e in a?(u(42),this.simulate_press(a[e]),u(170)):console.log("ascii -> keyCode not found: ",e,t)}}function Tn(t,e){var i=!1,s=!1,r=!1,a=0,n=0,o=this;function h(t){if(!o.enabled||!o.emu_enabled)return!1;var i=e||document.body;return document.pointerLockElement||function(t,e){for(;t.parentNode;){if(t===e)return!0;t=t.parentNode}return!1}(t.target,i)}function _(t){if(h(t)){var e=t.changedTouches;if(e&&e.length){var i=e[e.length-1];a=i.clientX,n=i.clientY}}}function d(t){(i||r||s)&&(o.bus.send("mouse-click",[!1,!1,!1]),i=r=s=!1)}function c(t){if(o.bus&&h(t)){var i=0,s=0,r=t.changedTouches;if(r){if(r.length){var _=r[r.length-1];i=_.clientX-a,s=_.clientY-n,a=_.clientX,n=_.clientY,t.preventDefault()}}else"number"==typeof t.movementX?(i=t.movementX,s=t.movementY):"number"==typeof t.webkitMovementX?(i=t.webkitMovementX,s=t.webkitMovementY):"number"==typeof t.mozMovementX?(i=t.mozMovementX,s=t.mozMovementY):(i=t.clientX-a,s=t.clientY-n,a=t.clientX,n=t.clientY);if(i*=.15,s=-(s*=.15),o.bus.send("mouse-delta",[i,s]),e){let i=t.pageX-e.offsetLeft,s=t.pageY-e.offsetTop;o.bus.send("mouse-absolute",[i,s,e.offsetWidth,e.offsetHeight])}}}function u(t){h(t)&&l(t,!0)}function p(t){h(t)&&l(t,!1)}function l(t,e){o.bus&&(1===t.which?i=e:2===t.which?r=e:3===t.which?s=e:dbg_log("Unknown event.which: "+t.which),o.bus.send("mouse-click",[i,r,s]),t.preventDefault())}function f(t){if(h(t)){var e=t.wheelDelta||-t.detail;e<0?e=-1:e>0&&(e=1),o.bus.send("mouse-wheel",[e,0]),t.preventDefault()}}this.enabled=!1,this.emu_enabled=!0,this.bus=t,this.bus.register("mouse-enable",(function(t){this.enabled=t}),this),this.destroy=function(){"undefined"!=typeof window&&(window.removeEventListener("touchstart",_,!1),window.removeEventListener("touchend",d,!1),window.removeEventListener("touchmove",c,!1),window.removeEventListener("mousemove",c,!1),window.removeEventListener("mousedown",u,!1),window.removeEventListener("mouseup",p,!1),window.removeEventListener("DOMMouseScroll",f,!1),window.removeEventListener("mousewheel",f,{passive:!1}))},this.init=function(){"undefined"!=typeof window&&(this.destroy(),window.addEventListener("touchstart",_,!1),window.addEventListener("touchend",d,!1),window.addEventListener("touchmove",c,!1),window.addEventListener("mousemove",c,!1),window.addEventListener("mousedown",u,!1),window.addEventListener("mouseup",p,!1),window.addEventListener("DOMMouseScroll",f,!1),window.addEventListener("mousewheel",f,{passive:!1}))},this.init()}function Dn(t,e){console.assert(t,"1st argument must be a DOM container");var i,s,r,a,n,o,h=t.getElementsByTagName("canvas")[0],_=h.getContext("2d",{alpha:!1}),d=t.getElementsByTagName("div")[0],c=document.createElement("div"),u=1,p=1,l=1,f=!1,m=!1,g=this;function b(t){return t=t.toString(16),"#"+"0".repeat(6-t.length)+t}for(var y,v=new Uint16Array([199,252,233,226,228,224,229,231,234,235,232,239,238,236,196,197,201,230,198,244,246,242,251,249,255,214,220,162,163,165,8359,402,225,237,243,250,241,209,170,186,191,8976,172,189,188,161,171,187,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,945,223,915,960,931,963,181,964,934,920,937,948,8734,966,949,8745,8801,177,8805,8804,8992,8993,247,8776,176,8729,183,8730,8319,178,9632,160]),w=new Uint16Array([32,9786,9787,9829,9830,9827,9824,8226,9688,9675,9689,9794,9792,9834,9835,9788,9658,9668,8597,8252,182,167,9644,8616,8593,8595,8594,8592,8735,8596,9650,9660]),k=[],x=0;x<256;x++)y=x>127?v[x-128]:x<32?w[x]:x,k[x]=String.fromCharCode(y);_.imageSmoothingEnabled=!1,c.style.position="absolute",c.style.backgroundColor="#ccc",c.style.width="7px",c.style.display="inline-block",d.style.display="block",h.style.display="none",this.bus=e,e.register("screen-set-mode",(function(t){this.set_mode(t)}),this),e.register("screen-fill-buffer-end",(function(t){this.update_buffer(t)}),this),e.register("screen-put-char",(function(t){this.put_char(t[0],t[1],t[2],t[3],t[4])}),this),e.register("screen-update-cursor",(function(t){this.update_cursor(t[0],t[1])}),this),e.register("screen-update-cursor-scanline",(function(t){this.update_cursor_scanline(t[0],t[1])}),this),e.register("screen-clear",(function(){this.clear_screen()}),this),e.register("screen-set-size-text",(function(t){this.set_size_text(t[0],t[1])}),this),e.register("screen-set-size-graphical",(function(t){this.set_size_graphical(t[0],t[1],t[2],t[3])}),this),this.init=function(){this.set_size_text(80,25),this.timer()},this.make_screenshot=function(){try{const t=new Image;t.src=h.toDataURL("image/png");window.open("").document.write(t.outerHTML)}catch(t){}},this.put_char=function(t,e,i,s,h){if(t<o&&e<n){var _=3*(t*n+e);ne(i>=0&&i<256),a[_]=i,a[_+1]=s,a[_+2]=h,r[t]=1}},this.timer=function(){m||requestAnimationFrame(f?q:A)};var A=function(){for(var t=0;t<o;t++)r[t]&&(g.text_update_row(t),r[t]=0);this.timer()}.bind(this),q=function(){this.bus.send("screen-fill-buffer"),this.timer()}.bind(this);function I(){z(d,u,p,!0)}function C(){z(h,u*l,p*l,!1)}function z(t,e,i,s){t.style.width="",t.style.height="",s&&(t.style.transform="");var r=t.getBoundingClientRect();if(s){var a="";a+=1===e?"":" scaleX("+e+")",a+=1===i?"":" scaleY("+i+")",t.style.transform=a}else{e%1==0&&i%1==0?(h.style.imageRendering="crisp-edges",h.style.imageRendering="pixelated",h.style["-ms-interpolation-mode"]="nearest-neighbor"):(h.style.imageRendering="",h.style["-ms-interpolation-mode"]="");var n=window.devicePixelRatio||1;n%1!=0&&(e/=n,i/=n)}1!==e&&(t.style.width=r.width*e+"px"),1!==i&&(t.style.height=r.height*i+"px")}this.destroy=function(){m=!0},this.set_mode=function(t){f=t,t?(d.style.display="none",h.style.display="block"):(d.style.display="block",h.style.display="none")},this.clear_screen=function(){_.fillStyle="#000",_.fillRect(0,0,h.width,h.height)},this.set_size_text=function(t,e){if(t!==n||e!==o){for(r=new Int8Array(e),a=new Int32Array(t*e*3),n=t,o=e;d.childNodes.length>e;)d.removeChild(d.firstChild);for(;d.childNodes.length<e;)d.appendChild(document.createElement("div"));for(var i=0;i<e;i++)this.text_update_row(i);I()}},this.set_size_graphical=function(t,e,i,s){h.style.display="block",h.width=t,h.height=e,l=t<=640&&2*t<window.innerWidth&&2*t<window.innerHeight?2:1,C()},this.set_scale=function(t,e){u=t,p=e,I(),C()},this.set_scale(u,p),this.update_cursor_scanline=function(t,e){32&t?c.style.display="none":(c.style.display="inline",c.style.height=Math.min(15,e-t)+"px",c.style.marginTop=Math.min(15,t)+"px")},this.update_cursor=function(t,e){t===i&&e===s||(r[t]=1,r[i]=1,i=t,s=e)},this.text_update_row=function(t){var e,r,o,h,_,u,p=3*t*n;e=d.childNodes[t],o=document.createElement("div");for(var l=0;l<n;){for(r=document.createElement("span"),h=a[p+1],_=a[p+2],r.style.backgroundColor=b(h),r.style.color=b(_),u="";l<n&&a[p+1]===h&&a[p+2]===_;){var f=a[p];if(u+=k[f],ne(k[f]),l++,p+=3,t===i){if(l===s)break;if(l===s+1){o.appendChild(c);break}}}r.textContent=u,o.appendChild(r)}e.parentNode.replaceChild(o,e)},this.update_buffer=function(t){t.forEach((t=>{_.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.init()}function Un(t){var e,i,s;this.bus=t,t.register("screen-set-mode",(function(t){this.set_mode(t)}),this),t.register("screen-fill-buffer-end",(function(t){var e=t[0],i=t[1];this.update_buffer(e,i)}),this),t.register("screen-put-char",(function(t){this.put_char(t[0],t[1],t[2],t[3],t[4])}),this),t.register("screen-text-scroll",(function(t){console.log("scroll",t)}),this),t.register("screen-update-cursor",(function(t){this.update_cursor(t[0],t[1])}),this),t.register("screen-update-cursor-scanline",(function(t){this.update_cursor_scanline(t[0],t[1])}),this),t.register("screen-set-size-text",(function(t){this.set_size_text(t[0],t[1])}),this),t.register("screen-set-size-graphical",(function(t){this.set_size_graphical(t[0],t[1])}),this),this.put_char=function(t,r,a,n,o){if(t<s&&r<i){var h=3*(t*i+r);e[h]=a,e[h+1]=n,e[h+2]=o}},this.destroy=function(){},this.set_mode=function(t){},this.clear_screen=function(){},this.set_size_text=function(t,r){t===i&&r===s||(e=new Int32Array(t*r*3),i=t,s=r)},this.set_size_graphical=function(t,e){},this.set_scale=function(t,e){},this.update_cursor_scanline=function(t,e){},this.update_cursor=function(t,e){},this.update_buffer=function(t,e){},this.get_text_screen=function(){for(var t=[],e=0;e<s;e++)t.push(this.get_text_row(e));return t},this.get_text_row=function(t){for(var s="",r=3*t*i,a=0;a<i;a++)s+=String.fromCharCode(e[r+3*a]);return s}}function Gn(t,e){var i=this;function s(t){return!!i.enabled}function r(t){if(i.bus&&s()){var e=t.which;i.send_char(e),t.preventDefault()}}function a(t){var e=t.which;8===e?(i.send_char(127),t.preventDefault()):9===e&&(i.send_char(9),t.preventDefault())}function n(t){if(s()){for(var e=t.clipboardData.getData("text/plain"),r=0;r<e.length;r++)i.send_char(e.charCodeAt(r));t.preventDefault()}}function o(e){e.target!==t&&t.blur()}this.enabled=!0,this.bus=e,this.text="",this.text_new_line=!1,this.last_update=0,this.bus.register("serial0-output-char",(function(t){this.show_char(t)}),this),this.destroy=function(){t.removeEventListener("keypress",r,!1),t.removeEventListener("keydown",a,!1),t.removeEventListener("paste",n,!1),window.removeEventListener("mousedown",o,!1)},this.init=function(){this.destroy(),t.style.display="block",t.addEventListener("keypress",r,!1),t.addEventListener("keydown",a,!1),t.addEventListener("paste",n,!1),window.addEventListener("mousedown",o,!1)},this.init(),this.show_char=function(t){"\b"===t?(this.text=this.text.slice(0,-1),this.update()):"\r"===t||(this.text+=t,"\n"===t&&(this.text_new_line=!0),this.update())},this.update=function(){var t=Date.now(),e=t-this.last_update;e<16?void 0===this.update_timer&&(this.update_timer=setTimeout((()=>{this.update_timer=void 0;var t=Date.now();dbg_assert(t-this.last_update>=15),this.last_update=t,this.render()}),16-e)):(void 0!==this.update_timer&&(clearTimeout(this.update_timer),this.update_timer=void 0),this.last_update=t,this.render())},this.render=function(){t.value=this.text,this.text_new_line&&(this.text_new_line=!1,t.scrollTop=1e9)},this.send_char=function(t){i.bus&&i.bus.send("serial0-input",t)}}function Sn(t,e){if(this.element=t,window.Terminal){var i=this.term=new window.Terminal;i.setOption("logLevel","off"),i.write("This is the serial console. Whatever you type or paste here will be sent to COM1"),i.onData((function(t){for(let i=0;i<t.length;i++)e.send("serial0-input",t.charCodeAt(i))})),e.register("serial0-output-char",(function(t){i.write(t)}),this)}}Sn.prototype.show=function(){this.term&&this.term.open(this.element)};function Mn(t){if("undefined"!=typeof window)if(window.AudioContext||window.webkitAudioContext){var e=window.AudioWorklet?Nn:Wn;this.bus=t,this.audio_context=window.AudioContext?new AudioContext:new webkitAudioContext,this.mixer=new Fn(t,this.audio_context),this.pcspeaker=new Bn(t,this.audio_context,this.mixer),this.dac=new e(t,this.audio_context,this.mixer),this.pcspeaker.start(),t.register("emulator-stopped",(function(){this.audio_context.suspend()}),this),t.register("emulator-started",(function(){this.audio_context.resume()}),this),t.register("speaker-confirm-initialized",(function(){t.send("speaker-has-initialized")}),this),t.send("speaker-has-initialized")}else console.warn("Web browser doesn't support Web Audio API")}function Fn(t,e){function i(t){return function(e){t.gain.setValueAtTime(e,this.audio_context.currentTime)}}this.audio_context=e,this.sources=new Map,this.volume_both=1,this.volume_left=1,this.volume_right=1,this.gain_left=1,this.gain_right=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,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,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,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),t.register("mixer-connect",(function(t){var e=t[0],i=t[1];this.connect_source(e,i)}),this),t.register("mixer-disconnect",(function(t){var e=t[0],i=t[1];this.disconnect_source(e,i)}),this),t.register("mixer-volume",(function(t){var e=t[0],i=t[1],s=t[2],r=Math.pow(10,s/20),a=0===e?this:this.sources.get(e);void 0!==a?a.set_volume(r,i):ne(!1,"Mixer set volume - cannot set volume for undefined source: "+e)}),this),t.register("mixer-gain-left",(function(t){this.gain_left=Math.pow(10,t/20),this.update()}),this),t.register("mixer-gain-right",(function(t){this.gain_right=Math.pow(10,t/20),this.update()}),this),t.register("mixer-treble-left",i(this.node_treble_left),this),t.register("mixer-treble-right",i(this.node_treble_right),this),t.register("mixer-bass-left",i(this.node_bass_left),this),t.register("mixer-bass-right",i(this.node_bass_right),this)}function Vn(t,e,i,s){this.audio_context=t,this.connected_left=!0,this.connected_right=!0,this.gain_hidden=1,this.volume_both=1,this.volume_left=1,this.volume_right=1,this.node_splitter=t.createChannelSplitter(2),this.node_gain_left=t.createGain(),this.node_gain_right=t.createGain(),e.connect(this.node_splitter),this.node_splitter.connect(this.node_gain_left,0),this.node_gain_left.connect(i),this.node_splitter.connect(this.node_gain_right,1),this.node_gain_right.connect(s)}function Bn(t,e,i){this.node_oscillator=e.createOscillator(),this.node_oscillator.type="square",this.node_oscillator.frequency.setValueAtTime(440,e.currentTime),this.mixer_connection=i.add_source(this.node_oscillator,1),this.mixer_connection.disconnect(),t.register("pcspeaker-enable",(function(){i.connect_source(1)}),this),t.register("pcspeaker-disable",(function(){i.disconnect_source(1)}),this),t.register("pcspeaker-update",(function(t){var i=t[0],s=t[1],r=0;3===i&&(r=1193.1816666*1e3/s,r=Math.min(r,this.node_oscillator.frequency.maxValue),r=Math.max(r,0)),this.node_oscillator.frequency.setValueAtTime(r,e.currentTime)}),this)}function Nn(t,e,i){this.bus=t,this.audio_context=e,this.enabled=!1,this.sampling_rate=48e3;var s=function(){var t=256;function e(t){return 0===t?1:(t*=Math.PI,Math.sin(t)/t)}var i=[new Float32Array(t),new Float32Array(t)];function s(){var t=Reflect.construct(AudioWorkletProcessor,[],s);return t.kernel_size=3,t.queue_data=new Array(1024),t.queue_start=0,t.queue_end=0,t.queue_length=0,t.queue_size=t.queue_data.length,t.queued_samples=0,t.source_buffer_previous=i,t.source_buffer_current=i,t.source_samples_per_destination=1,t.source_block_start=0,t.source_time=0,t.source_offset=0,t.port.onmessage=e=>{switch(e.data.type){case"queue":t.queue_push(e.data.value);break;case"sampling-rate":t.source_samples_per_destination=e.data.value/sampleRate}},t}Reflect.setPrototypeOf(s.prototype,AudioWorkletProcessor.prototype),Reflect.setPrototypeOf(s,AudioWorkletProcessor),s.prototype.process=s.prototype.process=function(t,e,i){for(var s=0;s<e[0][0].length;s++){for(var r=0,a=0,n=this.source_offset-this.kernel_size+1,o=this.source_offset+this.kernel_size,h=n;h<=o;h++){var _=this.source_block_start+h;r+=this.get_sample(_,0)*this.kernel(this.source_time-h),a+=this.get_sample(_,1)*this.kernel(this.source_time-h)}(isNaN(r)||isNaN(a))&&(r=a=0,this.dbg_log("ERROR: NaN values! Ignoring for now.")),e[0][0][s]=r,e[0][1][s]=a,this.source_time+=this.source_samples_per_destination,this.source_offset=Math.floor(this.source_time)}var d=this.source_offset;return d+=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(d),!0},s.prototype.kernel=function(t){return e(t)*e(t/this.kernel_size)},s.prototype.get_sample=function(t,e){return t<0?(t+=this.source_buffer_previous[0].length,this.source_buffer_previous[e][t]):this.source_buffer_current[e][t]},s.prototype.ensure_enough_data=function(t){var e=this.source_buffer_current[0].length;e-this.source_block_start<t&&(this.prepare_next_buffer(),this.source_block_start-=e)},s.prototype.prepare_next_buffer=function(){this.queued_samples<t&&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 e=this.source_buffer_current[0].length;if(e<t){for(var i=this.queue_start,s=0;e<t&&s<this.queue_length;)e+=this.queue_data[i][0].length,i=i+1&this.queue_size-1,s++;var r=Math.max(e,t),a=[new Float32Array(r),new Float32Array(r)];a[0].set(this.source_buffer_current[0]),a[1].set(this.source_buffer_current[1]);for(var n=this.source_buffer_current[0].length,o=0;o<s;o++){var h=this.queue_shift();a[0].set(h[0],n),a[1].set(h[1],n),n+=h[0].length}this.source_buffer_current=a}this.pump()},s.prototype.pump=function(){this.queued_samples/this.source_samples_per_destination<1024&&this.port.postMessage({type:"pump"})},s.prototype.queue_push=function(t){this.queue_length<this.queue_size&&(this.queue_data[this.queue_end]=t,this.queue_end=this.queue_end+1&this.queue_size-1,this.queue_length++,this.queued_samples+=t[0].length,this.pump())},s.prototype.queue_shift=function(){if(!this.queue_length)return i;var t=this.queue_data[this.queue_start];return this.queue_data[this.queue_start]=null,this.queue_start=this.queue_start+1&this.queue_size-1,this.queue_length--,this.queued_samples-=t[0].length,t},s.prototype.dbg_log=function(t){this.port.postMessage({type:"debug-log",value:t})},registerProcessor("dac-processor",s)}.toString(),r=s.indexOf("{")+1,a=s.lastIndexOf("}"),n=s.substring(r,a);n="var DEBUG = true;\n"+n;var o=new Blob([n],{type:"application/javascript"}),h=URL.createObjectURL(o);this.node_processor=null,this.node_output=this.audio_context.createGain(),this.audio_context.audioWorklet.addModule(h).then((()=>{URL.revokeObjectURL(h),this.node_processor=new AudioWorkletNode(this.audio_context,"dac-processor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],parameterData:{},processorOptions:{}}),this.node_processor.port.postMessage({type:"sampling-rate",value:this.sampling_rate}),this.node_processor.port.onmessage=t=>{switch(t.data.type){case"pump":this.pump();break;case"debug-log":re("SpeakerWorkletDAC - Worklet: "+t.data.value)}},this.node_processor.connect(this.node_output)})),this.mixer_connection=i.add_source(this.node_output,2),this.mixer_connection.set_gain_hidden(3),t.register("dac-send-data",(function(t){this.queue(t)}),this),t.register("dac-enable",(function(t){this.enabled=!0}),this),t.register("dac-disable",(function(){this.enabled=!1}),this),t.register("dac-tell-sampling-rate",(function(t){ne(t>0,"Sampling rate should be nonzero"),this.sampling_rate=t,this.node_processor&&this.node_processor.port.postMessage({type:"sampling-rate",value:t})}),this),this.debugger=new jn(this.audio_context,this.node_output)}function Wn(t,e,i){this.bus=t,this.audio_context=e,this.enabled=!1,this.sampling_rate=22050,this.buffered_time=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=i.add_source(this.node_output,2),this.mixer_connection.set_gain_hidden(3),t.register("dac-send-data",(function(t){this.queue(t)}),this),t.register("dac-enable",(function(t){this.enabled=!0,this.pump()}),this),t.register("dac-disable",(function(){this.enabled=!1}),this),t.register("dac-tell-sampling-rate",(function(t){ne(t>0,"Sampling rate should be nonzero"),this.sampling_rate=t,this.rate_ratio=Math.ceil(8e3/t),this.node_lowpass.frequency.setValueAtTime(t/2,this.audio_context.currentTime)}),this),this.debugger=new jn(this.audio_context,this.node_output)}function jn(t,e){this.audio_context=t,this.node_source=e,this.node_processor=null,this.node_gain=this.audio_context.createGain(),this.node_gain.gain.setValueAtTime(0,this.audio_context.currentTime),this.node_gain.connect(this.audio_context.destination),this.is_active=!1,this.queued_history=[],this.output_history=[],this.queued=[[],[]],this.output=[[],[]]}function Kn(t){this.cpu_is_running=!1;const e=u.create();var i,s;this.bus=e[0],this.emulator_bus=e[1];const r=new WebAssembly.Table({element:"anyfunc",initial:1924}),a={cpu_exception_hook:t=>this.cpu_exception_hook&&this.cpu_exception_hook(t),hlt_op:function(){return i.hlt_op()},abort:function(){ne(!1)},microtick:Pi.microtick,get_rand_int:function(){return _e.get_rand_int()},pic_acknowledge:function(){i.pic_acknowledge()},io_port_read8:function(t){return i.io.port_read8(t)},io_port_read16:function(t){return i.io.port_read16(t)},io_port_read32:function(t){return i.io.port_read32(t)},io_port_write8:function(t,e){i.io.port_write8(t,e)},io_port_write16:function(t,e){i.io.port_write16(t,e)},io_port_write32:function(t,e){i.io.port_write32(t,e)},mmap_read8:function(t){return i.mmap_read8(t)},mmap_read16:function(t){return i.mmap_read16(t)},mmap_read32:function(t){return i.mmap_read32(t)},mmap_write8:function(t,e){i.mmap_write8(t,e)},mmap_write16:function(t,e){i.mmap_write16(t,e)},mmap_write32:function(t,e){i.mmap_write32(t,e)},mmap_write64:function(t,e,s){i.mmap_write64(t,e,s)},mmap_write128:function(t,e,s,r,a){i.mmap_write128(t,e,s,r,a)},log_from_wasm:function(t,e){const i=_e.read_sized_string_from_mem(s,t,e);re(i,LOG_CPU)},console_log_from_wasm:function(t,e){const i=_e.read_sized_string_from_mem(s,t,e);console.error(i)},dbg_trace_from_wasm:function(){ae()},codegen_finalize:(t,e,s,r,a)=>{i.codegen_finalize(t,e,s,r,a)},jit_clear_func:t=>i.jit_clear_func(t),jit_clear_all_funcs:()=>i.jit_clear_all_funcs(),__indirect_function_table:r};let n=t.wasm_fn;n||(n=e=>new Promise((i=>{let s="v86-debug.wasm",r="v86-fallback.wasm";if(t.wasm_path){s=t.wasm_path;const e=s.lastIndexOf("/"),i=-1===e?"":s.substr(0,e);r=i+"/"+r}else"undefined"==typeof window&&"string"==typeof __dirname?(s=__dirname+"/"+s,r=__dirname+"/"+r):(s="build/"+s,r="build/"+r);_e.load_file(s,{done:t=>{WebAssembly.instantiate(t,e).then((({instance:t})=>{i(t.exports)}),(t=>{_e.load_file(r,{done:t=>{WebAssembly.instantiate(t,e).then((({instance:t})=>{i(t.exports)}))}})}))},progress:t=>{this.emulator_bus.send("download-progress",{file_index:0,file_count:1,file_name:s,lengthComputable:t.lengthComputable,total:t.total,loaded:t.loaded})}})}))),n({env:a}).then((e=>{s=e.memory,e.rust_init();const a=this.v86=new Pi(this.emulator_bus,{exports:e,wasm_table:r});i=a.cpu,this.continue_init(a,t)}))}function Xn(t){this.message=t||"File already exists"}function Hn(t){this.message=t||"File not found"}Fn.prototype.add_source=function(t,e){var i=new Vn(this.audio_context,t,this.input_left,this.input_right);return ne(!this.sources.has(e),"Mixer add source - overwritting source: "+e),this.sources.set(e,i),i},Fn.prototype.connect_source=function(t,e){var i=this.sources.get(t);void 0!==i?i.connect(e):ne(!1,"Mixer connect - cannot connect undefined source: "+t)},Fn.prototype.disconnect_source=function(t,e){var i=this.sources.get(t);void 0!==i?i.disconnect(e):ne(!1,"Mixer disconnect - cannot disconnect undefined source: "+t)},Fn.prototype.set_volume=function(t,e){switch(void 0===e&&(e=2),e){case 0:this.volume_left=t;break;case 1:this.volume_right=t;break;case 2:this.volume_both=t;break;default:return void ne(!1,"Mixer set master volume - unknown channel: "+e)}this.update()},Fn.prototype.update=function(){var t=this.volume_both*this.volume_left*this.gain_left,e=this.volume_both*this.volume_right*this.gain_right;this.node_gain_left.gain.setValueAtTime(t,this.audio_context.currentTime),this.node_gain_right.gain.setValueAtTime(e,this.audio_context.currentTime)},Vn.prototype.update=function(){var t=this.connected_left*this.gain_hidden*this.volume_both*this.volume_left,e=this.connected_right*this.gain_hidden*this.volume_both*this.volume_right;this.node_gain_left.gain.setValueAtTime(t,this.audio_context.currentTime),this.node_gain_right.gain.setValueAtTime(e,this.audio_context.currentTime)},Vn.prototype.connect=function(t){var e=!t||2===t;(e||0===t)&&(this.connected_left=!0),(e||1===t)&&(this.connected_right=!0),this.update()},Vn.prototype.disconnect=function(t){var e=!t||2===t;(e||0===t)&&(this.connected_left=!1),(e||1===t)&&(this.connected_right=!1),this.update()},Vn.prototype.set_volume=function(t,e){switch(void 0===e&&(e=2),e){case 0:this.volume_left=t;break;case 1:this.volume_right=t;break;case 2:this.volume_both=t;break;default:return void ne(!1,"Mixer set volume - unknown channel: "+e)}this.update()},Vn.prototype.set_gain_hidden=function(t){this.gain_hidden=t},Bn.prototype.start=function(){this.node_oscillator.start()},Nn.prototype.queue=function(t){this.node_processor&&(this.debugger.push_queued_data(t),this.node_processor.port.postMessage({type:"queue",value:t},[t[0].buffer,t[1].buffer]))},Nn.prototype.pump=function(){this.enabled&&this.bus.send("dac-request-data")},Wn.prototype.queue=function(t){this.debugger.push_queued_data(t);var e,i=t[0].length,s=i/this.sampling_rate;if(this.rate_ratio>1)for(var r=i*this.rate_ratio,a=this.sampling_rate*this.rate_ratio,n=(e=this.audio_context.createBuffer(2,r,a)).getChannelData(0),o=e.getChannelData(1),h=0,_=0;_<i;_++)for(var d=0;d<this.rate_ratio;d++,h++)n[h]=t[0][_],o[h]=t[1][_];else(e=this.audio_context.createBuffer(2,i,this.sampling_rate)).copyToChannel?(e.copyToChannel(t[0],0),e.copyToChannel(t[1],1)):(e.getChannelData(0).set(t[0]),e.getChannelData(1).set(t[1]));var c=this.audio_context.createBufferSource();c.buffer=e,c.connect(this.node_lowpass),c.addEventListener("ended",this.pump.bind(this));var u=this.audio_context.currentTime;if(this.buffered_time<u){re("Speaker DAC - Creating/Recreating reserve - shouldn't occur frequently during playback"),this.buffered_time=u;for(var p=.2-s,l=0;l<=p;)l+=s,this.buffered_time+=s,setTimeout((()=>this.pump()),1e3*l)}c.start(this.buffered_time),this.buffered_time+=s,setTimeout((()=>this.pump()),0)},Wn.prototype.pump=function(){this.enabled&&(this.buffered_time-this.audio_context.currentTime>.2||this.bus.send("dac-request-data"))},jn.prototype.start=function(t){this.is_active=!0,this.queued=[[],[]],this.output=[[],[]],this.queued_history.push(this.queued),this.output_history.push(this.output),this.node_processor=this.audio_context.createScriptProcessor(1024,2,2),this.node_processor.onaudioprocess=t=>{this.output[0].push(t.inputBuffer.getChannelData(0).slice()),this.output[1].push(t.inputBuffer.getChannelData(1).slice())},this.node_source.connect(this.node_processor),this.node_processor.connect(this.node_gain),setTimeout((()=>{this.stop()}),t)},jn.prototype.stop=function(){this.is_active=!1,this.node_source.disconnect(this.node_processor),this.node_processor.disconnect(),this.node_processor=null},jn.prototype.push_queued_data=function(t){this.is_active&&(this.queued[0].push(t[0].slice()),this.queued[1].push(t[1].slice()))},jn.prototype.download_txt=function(t,e){var i=this.output_history[t][e].map((t=>t.join(" "))).join(" ");dump_file(i,"dacdata.txt")},jn.prototype.download_csv=function(t){for(var e=this.output_history[t],i=[],s=0;s<e[0].length;s++)for(var r=0;r<e[0][s].length;r++)i.push(`${e[0][s][r]},${e[1][s][r]}`);dump_file(i.join("\n"),"dacdata.csv")},Kn.prototype.continue_init=async function(t,e){this.bus.register("emulator-stopped",(function(){this.cpu_is_running=!1}),this),this.bus.register("emulator-started",(function(){this.cpu_is_running=!0}),this);var i={};function s(t,e){switch(t){case"hda":i.hda=this.disk_images.hda=e;break;case"hdb":i.hdb=this.disk_images.hdb=e;break;case"cdrom":i.cdrom=this.disk_images.cdrom=e;break;case"fda":i.fda=this.disk_images.fda=e;break;case"fdb":i.fdb=this.disk_images.fdb=e;break;case"multiboot":i.multiboot=this.disk_images.multiboot=e.buffer;break;case"bzimage":i.bzimage=this.disk_images.bzimage=e.buffer;break;case"initrd":i.initrd=this.disk_images.initrd=e.buffer;break;case"bios":i.bios=e.buffer;break;case"vga_bios":i.vga_bios=e.buffer;break;case"initial_state":i.initial_state=e.buffer;break;case"fs9p_json":i.fs9p_json=e;break;default:ne(!1,t)}}this.disk_images={fda:void 0,fdb:void 0,hda:void 0,hdb:void 0,cdrom:void 0},i.acpi=e.acpi,i.load_devices=!0,i.log_level=e.log_level,i.memory_size=e.memory_size||67108864,i.vga_memory_size=e.vga_memory_size||8388608,i.boot_order=e.boot_order||531,i.fastboot=e.fastboot||!1,i.fda=void 0,i.fdb=void 0,i.uart1=e.uart1,i.uart2=e.uart2,i.uart3=e.uart3,i.cmdline=e.cmdline,i.preserve_mac_from_state_image=e.preserve_mac_from_state_image,e.network_adapter?this.network_adapter=e.network_adapter(this.bus):e.network_relay_url&&(this.network_adapter=new En(e.network_relay_url,this.bus)),i.enable_ne2k=!0,e.disable_keyboard||(this.keyboard_adapter=new Pn(this.bus)),e.disable_mouse||(this.mouse_adapter=new Tn(this.bus,e.screen_container)),e.screen_container?this.screen_adapter=new Dn(e.screen_container,this.bus):e.screen_dummy&&(this.screen_adapter=new Un(this.bus)),e.serial_container&&(this.serial_adapter=new Gn(e.serial_container,this.bus)),e.serial_container_xtermjs&&(this.serial_adapter=new Sn(e.serial_container_xtermjs,this.bus)),e.disable_speaker||(this.speaker_adapter=new Mn(this.bus));var r=[];function a(t,e){if(e)if(e.get&&e.set&&e.load)r.push({name:t,loadable:e});else if(e={buffer:e.buffer,async:e.async,url:e.url,size:e.size,fixed_chunk_size:e.fixed_chunk_size,use_parts:e.use_parts},"bios"!==t&&"vga_bios"!==t&&"initial_state"!==t&&"multiboot"!==t&&"bzimage"!==t&&"initrd"!==t||(e.async=!1),e.buffer instanceof ArrayBuffer){var i=new ce(e.buffer);r.push({name:t,loadable:i})}else if("undefined"!=typeof File&&e.buffer instanceof File){if(void 0===e.async&&(e.async=e.buffer.size>=268435456),e.async)i=new _e.AsyncFileBuffer(e.buffer);else i=new _e.SyncFileBuffer(e.buffer);r.push({name:t,loadable:i})}else if(e.url)if(e.async){let i;i=e.use_parts?new _e.AsyncXHRPartfileBuffer(e.url,e.size,e.fixed_chunk_size):new _e.AsyncXHRBuffer(e.url,e.size),r.push({name:t,loadable:i})}else r.push({name:t,url:e.url,size:e.size});else re("Ignored file: url="+e.url+" buffer="+e.buffer)}e.state&&console.warn("Warning: Unknown option 'state'. Did you mean 'initial_state'?");for(var n=["bios","vga_bios","cdrom","hda","hdb","fda","fdb","initial_state","multiboot","bzimage","initrd"],o=0;o<n.length;o++)a(n[o],e[n[o]]);if(e.filesystem){var h=e.filesystem.basefs,_=e.filesystem.baseurl;let t=new MemoryFileStorage;var d;if(_&&(t=new ServerFileStorageWrapper(t,_)),i.fs9p=this.fs9p=new FS(t),h)console.assert(_,"Filesystem: baseurl must be specified"),"object"==typeof h&&(d=h.size,h=h.url),ne("string"==typeof h),r.push({name:"fs9p_json",url:h,size:d,as_json:!0})}var c=this,u=r.length,p=function(t){if(t!==u){var e=r[t];e.loadable?(e.loadable.onload=function(i){s.call(this,e.name,e.loadable),p(t+1)}.bind(this),e.loadable.load()):_e.load_file(e.url,{done:function(i){s.call(this,e.name,e.as_json?i:new ce(i)),p(t+1)}.bind(this),progress:function(i){200===i.target.status?c.emulator_bus.send("download-progress",{file_index:t,file_count:u,file_name:e.url,lengthComputable:i.lengthComputable,total:i.total||e.size,loaded:i.loaded}):c.emulator_bus.send("download-error",{file_index:t,file_count:u,file_name:e.url,request:i.target})},as_json:e.as_json})}else setTimeout(l.bind(this),0)}.bind(this);function l(){if(i.fs9p&&i.fs9p_json)if(i.initial_state?re("Filesystem basefs ignored: Overridden by state image"):i.fs9p.load_from_json(i.fs9p_json),e.bzimage_initrd_from_filesystem){const{bzimage:t,initrd:e}=this.get_bzimage_initrd_from_filesystem(i.fs9p);re("Found bzimage: "+t+" and initrd: "+e),Promise.all([i.fs9p.read_file(e),i.fs9p.read_file(t)]).then((([t,e])=>{s.call(this,"initrd",new ce(t.buffer)),s.call(this,"bzimage",new ce(e.buffer)),r.call(this)}))}else r.call(this);else console.assert(!e.bzimage_initrd_from_filesystem,"bzimage_initrd_from_filesystem: Requires a filesystem"),r.call(this);function r(){this.serial_adapter&&this.serial_adapter.show&&this.serial_adapter.show(),this.bus.send("cpu-init",i),i.initial_state&&(t.restore_state(i.initial_state),i.initial_state=void 0),e.autostart&&this.bus.send("cpu-run"),this.emulator_bus.send("emulator-loaded")}}p(0)},Kn.prototype.get_bzimage_initrd_from_filesystem=function(t){const e=(t.read_dir("/")||[]).map((t=>"/"+t)),i=(t.read_dir("/boot/")||[]).map((t=>"/boot/"+t));let s,r;for(let t of[].concat(e,i)){const e=/old/i.test(t)||/fallback/i.test(t),i=/vmlinuz/i.test(t)||/bzimage/i.test(t),a=/initrd/i.test(t)||/initramfs/i.test(t);!i||r&&e||(r=t),!a||s&&e||(s=t)}return s&&r||(console.log("Failed to find bzimage or initrd in filesystem. Files:"),console.log(e.join(" ")),console.log(i.join(" "))),{initrd:s,bzimage:r}},Kn.prototype.run=function(){this.bus.send("cpu-run")},Kn.prototype.stop=function(){this.bus.send("cpu-stop")},Kn.prototype.destroy=function(){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()},Kn.prototype.restart=function(){this.bus.send("cpu-restart")},Kn.prototype.add_listener=function(t,e){this.bus.register(t,e,this)},Kn.prototype.remove_listener=function(t,e){this.bus.unregister(t,e)},Kn.prototype.restore_state=function(t){this.v86.restore_state(t)},Kn.prototype.save_state=function(t){setTimeout(function(){try{t(null,this.v86.save_state())}catch(e){t(e,null)}}.bind(this),0)},Kn.prototype.get_statistics=function(){console.warn("V86Starter.prototype.get_statistics is deprecated. Use events instead.");var t={cpu:{instruction_counter:this.get_instruction_counter()}};if(!this.v86)return t;var e=this.v86.cpu.devices;return e.hda&&(t.hda=e.hda.stats),e.cdrom&&(t.cdrom=e.cdrom.stats),e.ps2&&(t.mouse={enabled:e.ps2.use_mouse}),e.vga&&(t.vga={is_graphical:e.vga.stats.is_graphical}),t},Kn.prototype.get_instruction_counter=function(){return this.v86?this.v86.cpu.instruction_counter[0]>>>0:0},Kn.prototype.is_running=function(){return this.cpu_is_running},Kn.prototype.keyboard_send_scancodes=function(t){for(var e=0;e<t.length;e++)this.bus.send("keyboard-code",t[e])},Kn.prototype.keyboard_send_keys=function(t){for(var e=0;e<t.length;e++)this.keyboard_adapter.simulate_press(t[e])},Kn.prototype.keyboard_send_text=function(t){for(var e=0;e<t.length;e++)this.keyboard_adapter.simulate_char(t[e])},Kn.prototype.screen_make_screenshot=function(){this.screen_adapter&&this.screen_adapter.make_screenshot()},Kn.prototype.screen_set_scale=function(t,e){this.screen_adapter&&this.screen_adapter.set_scale(t,e)},Kn.prototype.screen_go_fullscreen=function(){if(this.screen_adapter){var t=document.getElementById("screen_container");if(t){var e=t.requestFullScreen||t.webkitRequestFullscreen||t.mozRequestFullScreen||t.msRequestFullScreen;if(e){e.call(t);var i=document.getElementsByClassName("phone_keyboard")[0];i&&i.focus()}this.lock_mouse()}}},Kn.prototype.lock_mouse=function(){var t=document.body,e=t.requestPointerLock||t.mozRequestPointerLock||t.webkitRequestPointerLock;e&&e.call(t)},Kn.prototype.mouse_set_status=function(t){this.mouse_adapter&&(this.mouse_adapter.emu_enabled=t)},Kn.prototype.keyboard_set_status=function(t){this.keyboard_adapter&&(this.keyboard_adapter.emu_enabled=t)},Kn.prototype.serial0_send=function(t){for(var e=0;e<t.length;e++)this.bus.send("serial0-input",t.charCodeAt(e))},Kn.prototype.serial_send_bytes=function(t,e){for(var i=0;i<e.length;i++)this.bus.send("serial"+t+"-input",e[i])},Kn.prototype.mount_fs=async function(t,e,i,s){let r=new MemoryFileStorage;e&&(r=new ServerFileStorageWrapper(r,e));const a=new FS(r,this.fs9p.qidcounter),n=()=>{const e=this.fs9p.Mount(t,a);s&&(e===-ENOENT?s(new Hn):e===-EEXIST?s(new Xn):e<0?(ne(!1,"Unexpected error code: "+-e),s(new Error("Failed to mount. Error number: "+-e))):s(null))};e?(ne("object"==typeof i,"Filesystem: basefs must be a JSON object"),a.load_from_json(i,(()=>n()))):n()},Kn.prototype.create_file=function(t,e,i){i=i||function(){};var s=this.fs9p;if(s){var r=t.split("/"),a=r[r.length-1],n=s.SearchPath(t).parentid;""===a||-1===n?setTimeout((function(){i(new Hn)}),0):s.CreateBinaryFile(a,n,e).then((()=>i(null)))}},Kn.prototype.read_file=function(t,e){var i=this.fs9p;i&&i.read_file(t).then((t=>{t?e(null,t):e(new Hn,null)}))},Kn.prototype.automatically=function(t){const e=t=>{const i=t[0];if(!i)return;const s=t.slice(1);if(i.sleep)setTimeout((()=>e(s)),1e3*i.sleep);else{if(!i.vga_text)return i.keyboard_send?(i.keyboard_send instanceof Array?this.keyboard_send_scancodes(i.keyboard_send):(ne("string"==typeof i.keyboard_send),this.keyboard_send_text(i.keyboard_send)),void e(s)):i.call?(i.call(),void e(s)):void console.assert(!1,i);{const r=this.screen_adapter.get_text_screen();for(let t of r)if(t.includes(i.vga_text))return void e(s);setTimeout((()=>e(t)),1e3)}}};e(t)},Kn.prototype.read_memory=function(t,e){return this.v86.cpu.read_blob(t,e)},Kn.prototype.write_memory=function(t,e){this.v86.cpu.write_blob(t,e)},Xn.prototype=Error.prototype,Hn.prototype=Error.prototype,"undefined"!=typeof window?(window.V86Starter=Kn,window.V86=Kn):"undefined"!=typeof module&&void 0!==module.exports?(module.exports.V86Starter=Kn,module.exports.V86=Kn):"function"==typeof importScripts&&(self.V86Starter=Kn,self.V86=Kn),function(){"undefined"==typeof XMLHttpRequest?_e.load_file=load_file_nodejs:_e.load_file=function t(e,i,s){var r=new XMLHttpRequest;r.open(i.method||"get",e,!0),i.as_json?r.responseType="json":r.responseType="arraybuffer";if(i.headers)for(var a=Object.keys(i.headers),n=0;n<a.length;n++){var o=a[n];r.setRequestHeader(o,i.headers[o])}if(i.range){let t=i.range.start,e=t+i.range.length-1;r.setRequestHeader("Range","bytes="+t+"-"+e),r.onreadystatechange=function(){200===r.status&&r.abort()}}r.onload=function(t){4===r.readyState&&(200!==r.status&&206!==r.status?(console.error("Loading the image "+e+" failed (status %d)",r.status),r.status>=500&&r.status<600&&h()):r.response&&i.done&&i.done(r.response,r))},r.onerror=function(t){console.error("Loading the image "+e+" failed",t),h()},i.progress&&(r.onprogress=function(t){i.progress(t)});function h(){const r=s||0;setTimeout((()=>{t(e,i,r+1)}),1e3*([1,1,2,3,5,8,13,21][r]||34))}r.send(null)},_e.AsyncXHRBuffer=t,_e.AsyncXHRPartfileBuffer=e,_e.AsyncFileBuffer=s,_e.SyncFileBuffer=i,_e.read_sized_string_from_mem=function(t,e,i){return e>>>=0,i>>>=0,String.fromCharCode(...new Uint8Array(t.buffer,e,i))};function t(t,e){this.filename=t,this.block_size=256,this.byteLength=e,this.loaded_blocks=Object.create(null),this.onload=void 0,this.onprogress=void 0}function e(t,e,i){const s=t.match(/(.*)(\..*)/);s?(this.basename=s[1],this.extension=s[2]):(this.basename=t,this.extension=""),this.block_size=256,this.byteLength=e,this.use_fixed_chunk_size="number"==typeof i,this.fixed_chunk_size=i,this.loaded_blocks=Object.create(null),this.onload=void 0,this.onprogress=void 0}function i(t){this.file=t,this.byteLength=t.size,t.size>1<<30&&console.warn("SyncFileBuffer: Allocating buffer of "+(t.size>>20)+" MB ..."),this.buffer=new ArrayBuffer(t.size),this.onload=void 0,this.onprogress=void 0}function s(t){this.file=t,this.byteLength=t.size,this.block_size=256,this.loaded_blocks=Object.create(null),this.onload=void 0,this.onprogress=void 0}t.prototype.load=function(){var t,e;void 0===this.byteLength?(t=this.filename,e=(t,e)=>{if(t)throw new Error("Cannot use: "+this.filename+". "+t);dbg_assert(e>=0),this.byteLength=e,this.onload&&this.onload(Object.create(null))},_e.load_file(t,{done:(t,i)=>{var s=i.getResponseHeader("Content-Range")||"",r=s.match(/\/(\d+)\s*$/);r?e(null,+r[1]):e("`Range: bytes=...` header not supported (Got `"+s+"`)")},headers:{Range:"bytes=0-0"}})):this.onload&&this.onload(Object.create(null))},t.prototype.get_from_cache=function(t,e,i){for(var s=e/this.block_size,r=t/this.block_size,a=0;a<s;a++){if(!this.loaded_blocks[r+a])return}if(1===s)return this.loaded_blocks[r];var n=new Uint8Array(e);for(a=0;a<s;a++)n.set(this.loaded_blocks[r+a],a*this.block_size);return n},t.prototype.get=function(t,e,i){console.assert(t+e<=this.byteLength),console.assert(t%this.block_size==0),console.assert(e%this.block_size==0),console.assert(e);var s=this.get_from_cache(t,e,i);s?i(s):_e.load_file(this.filename,{done:function(s){var r=new Uint8Array(s);this.handle_read(t,e,r),i(r)}.bind(this),range:{start:t,length:e}})},t.prototype.set=function(t,e,i){console.assert(t+e.byteLength<=this.byteLength);var s=e.length;console.assert(t%this.block_size==0),console.assert(s%this.block_size==0),console.assert(s);for(var r=t/this.block_size,a=s/this.block_size,n=0;n<a;n++){var o=this.loaded_blocks[r+n];void 0===o&&(o=this.loaded_blocks[r+n]=new Uint8Array(this.block_size));var h=e.subarray(n*this.block_size,(n+1)*this.block_size);o.set(h),console.assert(o.byteLength===h.length)}i()},t.prototype.handle_read=function(t,e,i){for(var s=t/this.block_size,r=e/this.block_size,a=0;a<r;a++){var n=this.loaded_blocks[s+a];n&&i.set(n,a*this.block_size)}},t.prototype.get_buffer=function(t){t()},t.prototype.get_written_blocks=function(){var t=Object.keys(this.loaded_blocks).length,e=new Uint8Array(t*this.block_size),i=[],s=0;for(var r of Object.keys(this.loaded_blocks)){var a=this.loaded_blocks[r];dbg_assert(a.length===this.block_size),r=+r,i.push(r),e.set(a,s*this.block_size),s++}return{buffer:e,indices:i,block_size:this.block_size}},t.prototype.get_state=function(){const t=[],e=[];for(let[t,i]of Object.entries(this.loaded_blocks))dbg_assert(isFinite(+t)),e.push([+t,i]);return t[0]=e,t},t.prototype.set_state=function(t){const e=t[0];this.loaded_blocks=Object.create(null);for(let[t,i]of Object.values(e))this.loaded_blocks[t]=i},e.prototype.load=function(){void 0===this.byteLength?(dbg_assert(!1),this.onload&&this.onload(Object.create(null))):this.onload&&this.onload(Object.create(null))},e.prototype.get_from_cache=t.prototype.get_from_cache,e.prototype.get=function(t,e,i){console.assert(t+e<=this.byteLength),console.assert(t%this.block_size==0),console.assert(e%this.block_size==0),console.assert(e);var s=this.get_from_cache(t,e,i);if(s)i(s);else if(this.use_fixed_chunk_size){const s=Math.floor(t/this.fixed_chunk_size),r=t-s*this.fixed_chunk_size;dbg_assert(r>=0);const a=Math.floor(e/this.fixed_chunk_size)+(0===r?1:2),n=new Uint8Array(r+a*this.fixed_chunk_size);let o=0;for(let h=0;h<a;h++){const _=this.basename+"-"+(s+h+"").padStart(8,"0")+this.extension;_e.load_file(_,{done:function(s){const _=h*this.fixed_chunk_size,d=new Uint8Array(s);if(n.set(d,_),o++,o===a){const s=n.subarray(r,r+e);this.handle_read(t,e,s),i(s)}}.bind(this)})}}else{const s=this.basename+"-"+t+"-"+(t+e)+this.extension;_e.load_file(s,{done:function(s){dbg_assert(s.byteLength===e);var r=new Uint8Array(s);this.handle_read(t,e,r),i(r)}.bind(this)})}},e.prototype.set=t.prototype.set,e.prototype.handle_read=t.prototype.handle_read,e.prototype.get_written_blocks=t.prototype.get_written_blocks,e.prototype.get_state=t.prototype.get_state,e.prototype.set_state=t.prototype.set_state,i.prototype.load=function(){this.load_next(0)},i.prototype.load_next=function(t){var e=4<<20,i=new FileReader;if(i.onload=function(i){var s=new Uint8Array(i.target.result);new Uint8Array(this.buffer,t).set(s),this.load_next(t+e)}.bind(this),this.onprogress&&this.onprogress({loaded:t,total:this.byteLength,lengthComputable:!0}),t<this.byteLength){var s=Math.min(t+e,this.byteLength),r=this.file.slice(t,s);i.readAsArrayBuffer(r)}else this.file=void 0,this.onload&&this.onload({buffer:this.buffer})},i.prototype.get=function(t,e,i){console.assert(t+e<=this.byteLength),i(new Uint8Array(this.buffer,t,e))},i.prototype.set=function(t,e,i){console.assert(t+e.byteLength<=this.byteLength),new Uint8Array(this.buffer,t,e.byteLength).set(e),i()},i.prototype.get_buffer=function(t){t(this.buffer)},i.prototype.get_state=function(){const t=[];return t[0]=this.byteLength,t[1]=new Uint8Array(this.buffer),t},i.prototype.set_state=function(t){this.byteLength=t[0],this.buffer=t[1].slice().buffer},s.prototype.load=function(){this.onload&&this.onload(Object.create(null))},s.prototype.get=function(t,e,i){console.assert(t%this.block_size==0),console.assert(e%this.block_size==0),console.assert(e);var s=this.get_from_cache(t,e,i);if(s)i(s);else{var r=new FileReader;r.onload=function(s){var r=s.target.result,a=new Uint8Array(r);this.handle_read(t,e,a),i(a)}.bind(this),r.readAsArrayBuffer(this.file.slice(t,t+e))}},s.prototype.get_from_cache=t.prototype.get_from_cache,s.prototype.set=t.prototype.set,s.prototype.handle_read=t.prototype.handle_read,s.prototype.get_state=t.prototype.get_state,s.prototype.get_buffer=function(t){t()},s.prototype.get_as_file=function(t){for(var e=[],i=Object.keys(this.loaded_blocks).map(Number).sort((function(t,e){return t-e})),s=0,r=0;r<i.length;r++){var a=i[r],n=this.loaded_blocks[a],o=a*this.block_size;console.assert(o>=s),o!==s&&(e.push(this.file.slice(s,o)),s=o),e.push(n),s+=n.length}s!==this.file.size&&e.push(this.file.slice(s));var h=new File(e,t);return console.assert(h.size===this.file.size),h}}();export{e as ACPI,c as APIC,s as APIC_ADDRESS,i as APIC_LOG_VERBOSE,$t as APIC_TIMER_FREQ,r as APIC_TIMER_MODE_MASK,a as APIC_TIMER_MODE_ONE_SHOT,n as APIC_TIMER_MODE_PERIODIC,o as APIC_TIMER_MODE_TSC,u as Bus,p as BusConnector,ue as ByteQueue,ui as CDROM_SECTOR_SIZE,Ye as CMOS_BIOS_BOOTFLAG1,Je as CMOS_BIOS_BOOTFLAG2,Qe as CMOS_BIOS_DISKTRANSFLAG,ei as CMOS_BIOS_SMP_COUNT,Ke as CMOS_CENTURY,Te as CMOS_DISK_DATA,Be as CMOS_DISK_DRIVE1_CYL,Fe as CMOS_DISK_DRIVE1_TYPE,Ne as CMOS_DISK_DRIVE2_CYL,Ve as CMOS_DISK_DRIVE2_TYPE,De as CMOS_EQUIPMENT_INFO,Pe as CMOS_FLOPPY_DRIVE_TYPE,Ge as CMOS_MEM_BASE_HIGH,Ue as CMOS_MEM_BASE_LOW,He as CMOS_MEM_EXTMEM2_HIGH,Xe as CMOS_MEM_EXTMEM2_LOW,je as CMOS_MEM_EXTMEM_HIGH,We as CMOS_MEM_EXTMEM_LOW,ti as CMOS_MEM_HIGHMEM_HIGH,Ze as CMOS_MEM_HIGHMEM_LOW,$e as CMOS_MEM_HIGHMEM_MID,Me as CMOS_MEM_OLD_EXT_HIGH,Se as CMOS_MEM_OLD_EXT_LOW,Ee as CMOS_RESET_CODE,qe as CMOS_RTC_DAY_MONTH,Ae as CMOS_RTC_DAY_WEEK,ke as CMOS_RTC_HOURS,xe as CMOS_RTC_HOURS_ALARM,ve as CMOS_RTC_MINUTES,we as CMOS_RTC_MINUTES_ALARM,Ie as CMOS_RTC_MONTH,be as CMOS_RTC_SECONDS,ye as CMOS_RTC_SECONDS_ALARM,Ce as CMOS_RTC_YEAR,ze as CMOS_STATUS_A,Oe as CMOS_STATUS_B,Re as CMOS_STATUS_C,Le as CMOS_STATUS_D,Xr as CPU,Kr as CPU_LOG_VERBOSE,kt as CR0_PG,xt as CR4_PAE,le as CircularQueue,Bt as DEBUG,Yt as DEBUG_SCREEN_LAYERS,_ as DELIVERY_MODES,d as DESTINATION_MODES,kr as DLAB,ge as DMA,Us as DSP_BUFSIZE,rr as DSP_COMMAND_HANDLERS,sr as DSP_COMMAND_SIZES,Ts as DSP_COPYRIGHT,Gs as DSP_DACSIZE,Ds as DSP_NO_COMMAND,jt as DUMP_GENERATED_WASM,Kt as DUMP_UNCOMPILED_ASSEMBLY,Ui as E8390_CMD,Hr as ELF_MAGIC,Vi as EN0_BOUNDARY,Mi as EN0_CLDAHI,Gi as EN0_CLDALO,rs as EN0_COUNTER0,ns as EN0_COUNTER1,hs as EN0_COUNTER2,Ji as EN0_CRDAHI,Yi as EN0_CRDALO,as as EN0_DCFG,Ki as EN0_FIFO,os as EN0_IMR,Hi as EN0_ISR,Wi as EN0_NCR,ts as EN0_RCNTHI,$i as EN0_RCNTLO,Zi as EN0_RSARHI,Qi as EN0_RSARLO,es as EN0_RSR,is as EN0_RXCR,Si as EN0_STARTPG,Fi as EN0_STOPPG,Xi as EN0_TCNTHI,ji as EN0_TCNTLO,Ni as EN0_TPSR,Bi as EN0_TSR,ss as EN0_TXCR,Qt as ENABLE_HPET,ys as ENISR_ALL,ms as ENISR_COUNTERS,fs as ENISR_OVER,gs as ENISR_RDC,bs as ENISR_RESET,cs as ENISR_RX,ps as ENISR_RX_ERR,us as ENISR_TX,ls as ENISR_TX_ERR,vs as ENRSR_RXOK,rt as FLAGS_DEFAULT,tt as FLAG_AC,N as FLAG_ADJUST,V as FLAG_CARRY,H as FLAG_DIRECTION,st as FLAG_ID,X as FLAG_INTERRUPT,Q as FLAG_IOPL,J as FLAG_NT,Y as FLAG_OVERFLOW,B as FLAG_PARITY,Z as FLAG_RF,j as FLAG_SIGN,K as FLAG_TRAP,et as FLAG_VIF,it as FLAG_VIP,$ as FLAG_VM,W as FLAG_ZERO,hr as FM_HANDLERS,Lt as FW_CFG_CUSTOM_START,Rt as FW_CFG_FILE_DIR,Et as FW_CFG_FILE_START,qt as FW_CFG_ID,zt as FW_CFG_MAX_CPUS,Ct as FW_CFG_NB_CPUS,Ot as FW_CFG_NUMA,It as FW_CFG_RAM_SIZE,At as FW_CFG_SIGNATURE,Pt as FW_CFG_SIGNATURE_QEMU,pe as FloatQueue,si as FloppyController,pi as HD_SECTOR_SIZE,ci as HPET,ri as HPET_ADDR,hi as HPET_COUNTER_CONFIG,_i as HPET_COUNTER_CONFIG_MASK,ni as HPET_FREQ_MS,di as HPET_NUM_COUNTERS,ai as HPET_PERIOD,oi as HPET_SUPPORT_64,li as IDEDevice,fi as IDEInterface,mi as IO,Ei as IOAPIC,bi as IOAPIC_ADDRESS,qi as IOAPIC_CONFIG_DELIVS,Ai as IOAPIC_CONFIG_MASKED,Ci as IOAPIC_CONFIG_READONLY_MASK,Ii as IOAPIC_CONFIG_REMOTE_IRR,xi as IOAPIC_CONFIG_TRIGGER_MODE_LEVEL,zi as IOAPIC_DELIVERY_FIXED,Li as IOAPIC_DELIVERY_INIT,Oi as IOAPIC_DELIVERY_LOWEST_PRIORITY,Ri as IOAPIC_DELIVERY_NMI,ki as IOAPIC_ID,wi as IOAPIC_IRQ_COUNT,yi as IOREGSEL,vi as IOWIN,ca as LINUX_BOOT_HDR_BOOT_FLAG,La as LINUX_BOOT_HDR_CHECKSUM1,Ea as LINUX_BOOT_HDR_CHECKSUM2,Ia as LINUX_BOOT_HDR_CMDLINE_SIZE,va as LINUX_BOOT_HDR_CMD_LINE_PTR,ma as LINUX_BOOT_HDR_CODE32_START,ua as LINUX_BOOT_HDR_HEADER,ya as LINUX_BOOT_HDR_HEAP_END_PTR,wa as LINUX_BOOT_HDR_INITRD_ADDR_MAX,Ra as LINUX_BOOT_HDR_INIT_SIZE,ka as LINUX_BOOT_HDR_KERNEL_ALIGNMENT,fa as LINUX_BOOT_HDR_LOADFLAGS,Ga as LINUX_BOOT_HDR_LOADFLAGS_CAN_USE_HEAPS,Ua as LINUX_BOOT_HDR_LOADFLAGS_KEEP_SEGMENTS,Ta as LINUX_BOOT_HDR_LOADFLAGS_LOADED_HIGH,Da as LINUX_BOOT_HDR_LOADFLAGS_QUIET_FLAG,Aa as LINUX_BOOT_HDR_MIN_ALIGNMENT,za as LINUX_BOOT_HDR_PAYLOAD_LENGTH,Ca as LINUX_BOOT_HDR_PAYLOAD_OFFSET,Oa as LINUX_BOOT_HDR_PREF_ADDRESS,ga as LINUX_BOOT_HDR_RAMDISK_IMAGE,ba as LINUX_BOOT_HDR_RAMDISK_SIZE,xa as LINUX_BOOT_HDR_RELOCATABLE_KERNEL,ha as LINUX_BOOT_HDR_SETUP_SECTS,_a as LINUX_BOOT_HDR_SYSSIZE,la as LINUX_BOOT_HDR_TYPE_OF_LOADER,Pa as LINUX_BOOT_HDR_TYPE_OF_LOADER_NOT_ASSIGNED,pa as LINUX_BOOT_HDR_VERSION,da as LINUX_BOOT_HDR_VIDMODE,qa as LINUX_BOOT_HDR_XLOADFLAGS,S as LOG_9P,T as LOG_ACPI,l as LOG_ALL,Wt as LOG_ALL_IO,D as LOG_APIC,z as LOG_BIOS,g as LOG_CPU,L as LOG_DISK,v as LOG_DMA,O as LOG_FLOPPY,b as LOG_FPU,P as LOG_HPET,w as LOG_IO,Ht as LOG_LEVEL,y as LOG_MEM,I as LOG_MOUSE,F as LOG_NAMES,U as LOG_NET,f as LOG_NONE,m as LOG_OTHER,C as LOG_PCI,x as LOG_PIC,q as LOG_PIT,k as LOG_PS2,E as LOG_RTC,M as LOG_SB16,R as LOG_SERIAL,Nt as LOG_TO_FILE,A as LOG_VGA,G as LOG_VIRTIO,Mr as MAX_BPP,Gr as MAX_XRES,Sr as MAX_YRES,St as MIXER_CHANNEL_BOTH,Ut as MIXER_CHANNEL_LEFT,Gt as MIXER_CHANNEL_RIGHT,ar as MIXER_READ_HANDLERS,or as MIXER_REGISTER_IS_LEGACY,Vt as MIXER_SRC_DAC,Mt as MIXER_SRC_MASTER,Ft as MIXER_SRC_PCSPEAKER,nr as MIXER_WRITE_HANDLERS,vt as MMAP_BLOCK_BITS,wt as MMAP_BLOCK_SIZE,Di as NE2K_LOG_VERBOSE,_s as NE_DATAPORT,ds as NE_RESET,As as Ne2k,Rs as OSCILLATOR_FREQ,Cs as PCI,qs as PCI_CONFIG_ADDRESS,Is as PCI_CONFIG_DATA,Os as PIC,zs as PIC_LOG_VERBOSE,Ls as PIT,t as PMTIMER_FREQ_SECONDS,Ps as PS2,Es as PS2_LOG_VERBOSE,lt as REG_CS,mt as REG_DS,at as REG_EAX,dt as REG_EBP,ht as REG_EBX,nt as REG_ECX,ut as REG_EDI,ot as REG_EDX,pt as REG_ES,ct as REG_ESI,_t as REG_ESP,gt as REG_FS,bt as REG_GS,yt as REG_LDTR,ft as REG_SS,ii as RTC,_r as SB16,Fs as SB_DMA0,Vs as SB_DMA1,Bs as SB_DMA3,Ns as SB_DMA5,Ws as SB_DMA6,js as SB_DMA7,Ms as SB_DMA_BLOCK_SAMPLES,Ss as SB_DMA_BUFSIZE,Xs as SB_DMA_CHANNEL_16BIT,Ks as SB_DMA_CHANNEL_8BIT,Zs as SB_IRQ,Js as SB_IRQ10,Hs as SB_IRQ2,Ys as SB_IRQ5,Qs as SB_IRQ7,tr as SB_IRQ_16BIT,$s as SB_IRQ_8BIT,er as SB_IRQ_MIDI,ir as SB_IRQ_MPU,ws as START_PAGE,ks as START_RX_PAGE,ja as STATE_INDEX_INFO_LEN,Ba as STATE_INDEX_MAGIC,Wa as STATE_INDEX_TOTAL_LEN,Na as STATE_INDEX_VERSION,Ka as STATE_INFO_BLOCK_START,Va as STATE_MAGIC,Fa as STATE_VERSION,xs as STOP_PAGE,ce as SyncBuffer,Jt as TIME_PER_FRAME,Xt as TRACK_FILENAMES,Zt as TSC_RATE,Dr as UART,xr as UART_IER_MSI,qr as UART_IER_RDI,Ar as UART_IER_THRI,Lr as UART_IIR_CTI,Ir as UART_IIR_MSI,Cr as UART_IIR_NO_INT,Or as UART_IIR_RDI,Rr as UART_IIR_RLSI,zr as UART_IIR_THRI,Er as UART_LSR_DATA_READY,Tr as UART_LSR_TRANSMITTER_EMPTY,Pr as UART_LSR_TX_EMPTY,Kn as V86Starter,jr as VGAScreen,Ur as VGA_BANK_SIZE,Wr as VGA_HOST_MEMORY_SPACE_SIZE,Nr as VGA_HOST_MEMORY_SPACE_START,Fr as VGA_LFB_ADDRESS,Br as VGA_MIN_MEMORY_SIZE,Vr as VGA_PIXEL_BUFFER_SIZE,mn as VIRTIO_F_RING_EVENT_IDX,fn as VIRTIO_F_RING_INDIRECT_DESC,gn as VIRTIO_F_VERSION_1,ln as VIRTIO_ISR_DEVICE_CFG,pn as VIRTIO_ISR_QUEUE,en as VIRTIO_PCI_CAP_COMMON_CFG,an as VIRTIO_PCI_CAP_DEVICE_CFG,rn as VIRTIO_PCI_CAP_ISR_CFG,tn as VIRTIO_PCI_CAP_LENGTH,sn as VIRTIO_PCI_CAP_NOTIFY_CFG,nn as VIRTIO_PCI_CAP_PCI_CFG,$a as VIRTIO_PCI_CAP_VENDOR,Za as VIRTIO_PCI_VENDOR_ID,on as VIRTIO_STATUS_ACKNOWLEDGE,cn as VIRTIO_STATUS_DEVICE_NEEDS_RESET,hn as VIRTIO_STATUS_DRIVER,_n as VIRTIO_STATUS_DRIVER_OK,un as VIRTIO_STATUS_FAILED,dn as VIRTIO_STATUS_FEATURES_OK,yn as VIRTQ_AVAIL_BASESIZE,vn as VIRTQ_AVAIL_ENTRYSIZE,Cn as VIRTQ_AVAIL_F_NO_INTERRUPT,bn as VIRTQ_DESC_ENTRYSIZE,In as VIRTQ_DESC_F_INDIRECT,An as VIRTQ_DESC_F_NEXT,qn as VIRTQ_DESC_F_WRITE,xn as VIRTQ_IDX_MASK,wn as VIRTQ_USED_BASESIZE,kn as VIRTQ_USED_ENTRYSIZE,zn as VIRTQ_USED_F_NO_NOTIFY,On as VirtIO,Dt as WASM_TABLE_OFFSET,Tt as WASM_TABLE_SIZE,Xa as ZSTD_MAGIC,ne as dbg_assert,oe as dbg_assert_failed,re as dbg_log,ae as dbg_trace,me as download,fe as dump_file,de as h,Sa as load_kernel,ra as read_elf,Pi as v86,_e as v86util};
|