diff --git a/gen/apple2-SYEO3X4P.js b/gen/apple2-X6MJKSIN.js similarity index 99% rename from gen/apple2-SYEO3X4P.js rename to gen/apple2-X6MJKSIN.js index b6f56c34..7d402edd 100644 --- a/gen/apple2-SYEO3X4P.js +++ b/gen/apple2-X6MJKSIN.js @@ -1,4 +1,4 @@ -import{a as i0}from"./chunk-PMMIZ2W7.js";import{A as r0,I as s0,m as e0,r as t0,x as O}from"./chunk-AK7O6YZI.js";import{J as U,g as W,i as X,l as $,m as x0,s as a0,u as d}from"./chunk-5H5GMVON.js";import"./chunk-KT7KMEQC.js";var P=class extends t0{constructor(){super();this.cpuFrequency=1022727;this.sampleRate=this.cpuFrequency;this.cpuCyclesPerLine=65;this.cpuCyclesPerFrame=this.cpuCyclesPerLine*262;this.canvasWidth=280;this.numVisibleScanlines=192;this.numTotalScanlines=262;this.defaultROMSize=77824;this.cpuCyclesPaddleUnit=11;this.cpuCyclesPaddleMax=255*this.cpuCyclesPaddleUnit;this.LOAD_BASE=0;this.HDR_SIZE=0;this.ram=new Uint8Array(77824);this.cpu=new e0;this.grdirty=new Array(384);this.grparams={dirty:this.grdirty,grswitch:E,mem:this.ram};this.kbdlatch=0;this.soundstate=0;this.auxRAMselected=!1;this.auxRAMbank=1;this.writeinhibit=!0;this.bank2rdoffset=0;this.bank2wroffset=0;this.paddleValues=[0,0,0,0];this.paddleButtons=[!1,!1,!1];this.paddleLastTriggered=0;this.slots=new Array(8);this.fakeDrive={readROM:x=>{var a=this.cpu.getPC();if(a>=50688&&a<50944)switch(x){case 0:return 0;case 1:return this.LOAD_BASE&255;case 2:return this.LOAD_BASE>>8&255;default:return 0}else switch(x){case 0:return this.rom&&this.loadRAMWithProgram(),76;case 1:return 32;case 3:return 0;case 5:return 3;case 7:return 60;default:return 0}},readConst:x=>0,read:x=>this.floatbus(),write:(x,a)=>{}};this.loadBIOS(new $().decode(x0(atob(u0)))),this.connectCPUMemoryBus(this),this.bios[54170-(65536-this.bios.length)]=96}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(),kbdlatch:this.kbdlatch,soundstate:this.soundstate,grswitch:this.grparams.grswitch,auxRAMselected:this.auxRAMselected,auxRAMbank:this.auxRAMbank,writeinhibit:this.writeinhibit,slots:this.slots.map(x=>x&&x.saveState&&x.saveState()),paddleValues:this.paddleValues.slice(),paddleButtons:this.paddleButtons.slice(),inputs:this.ram.slice(0,0)}}loadState(x){this.cpu.loadState(x.c),this.ram.set(x.ram),this.kbdlatch=x.kbdlatch,this.soundstate=x.soundstate,this.grparams.grswitch=x.grswitch,this.auxRAMselected=x.auxRAMselected,this.auxRAMbank=x.auxRAMbank,this.writeinhibit=x.writeinhibit,this.setupLanguageCardConstants();for(var a=0;a>8!=198);x++);for(var x=0;x<2e6&&(this.cpu.advanceClock(),!(this.cpu.getPC()>>8<198));x++);}readConst(x){if(x<49152)return this.ram[x];if(x>=53248)return this.auxRAMselected?x>=57344?this.ram[x]:this.ram[x+this.bank2rdoffset]:this.bios[x-(65536-this.bios.length)];if(x>=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readConst(x&255))|0}else return 0}read(x){if(x&=65535,x<49152||x>=53248)return this.readConst(x);if(x<49408){this.probe.logIORead(x,0);var a=x>>4&15;switch(a){case 0:return this.kbdlatch;case 1:this.kbdlatch&=127;break;case 3:this.soundstate=this.soundstate^1;break;case 5:(x&15)<8&&((x&1)!=0?this.grparams.grswitch|=1<<(x>>1&7):this.grparams.grswitch&=~(1<<(x>>1&7)));break;case 6:switch(x&7){case 1:case 2:case 3:var r=(x&7)-1;return this.paddleButtons[r]?this.floatbus()|128:this.floatbus()&127;case 4:case 5:case 6:case 7:var t=(x&15)-4,i=this.frameCycles-this.paddleLastTriggered;return i=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readROM(x&255))|0}return this.floatbus()}write(x,a){if(x&=65535,a&=255,x<49152)this.ram[x]=a,this.grdirty[x>>7]=1;else if(x<49296)this.read(x);else if(x<49408){var r=x>>4&15;this.slots[r-8]&&this.slots[r-8].write(x&15,a),this.probe.logIOWrite(x,a)}else x>=53248&&!this.writeinhibit&&(x>=57344?this.ram[x]=a:this.ram[x+this.bank2wroffset]=a)}floatbus(){var x=this.frameCycles,a=Math.floor(x/65),r=Math.floor(x%65),t=this.ap2disp.getAddressForScanline(a);return this.readConst(t+r)}connectVideo(x){super.connectVideo(x),this.ap2disp=this.pixels&&new l0(this.pixels,this.grparams)}startScanline(){}drawScanline(){}advanceFrame(x){var a=super.advanceFrame(x);return this.ap2disp&&this.ap2disp.updateScreen(),a}postFrame(){this.paddleLastTriggered-=this.frameCycles,this.paddleLastTriggered<-this.cpuCyclesPaddleMax&&(this.paddleLastTriggered=-this.cpuCyclesPaddleMax)}advanceCPU(){return this.audio.feedSample(this.soundstate,1),super.advanceCPU()}setKeyInput(x,a,r){if(console.log(`setKeyInput: ${x} ${a} ${r}`),r&1){switch(a=0,x){case 16:case 17:case 18:case 91:return;case 8:if(a=8,r&2){this.cpu.reset();return}break;case 13:a=13;break;case 27:a=27;break;case 37:a=8;break;case 39:a=21;break;case 38:a=11;break;case 40:a=10;break;case 48:a=r&2?41:48;break;case 49:a=r&2?33:49;break;case 50:a=r&2?64:50;break;case 51:a=r&2?35:51;break;case 52:a=r&2?36:52;break;case 53:a=r&2?37:53;break;case 54:a=r&2?94:54;break;case 55:a=r&2?38:55;break;case 56:a=r&2?42:56;break;case 57:a=r&2?40:57;break;case 61:a=r&2?95:45;break;case 173:a=r&2?43:61;break;case 59:a=r&2?58:59;break;case 186:a=r&2?58:59;break;case 187:a=r&2?43:61;break;case 188:a=r&2?60:44;break;case 189:a=r&2?95:45;break;case 190:a=r&2?62:46;break;case 191:a=r&2?63:47;break;case 222:a=r&2?34:39;break;default:a=x,a>=97&&a<=122&&(a-=32),a>=65&&a<91&&r&4&&(a-=64)}a&&(this.kbdlatch=(a|128)&255)}}setPaddleInput(x,a){x>=0&&x=0&&x{var a=this.cpu.getPC();if(a>=50688&&a<50944)switch(x){case 0:return 0;case 1:return this.LOAD_BASE&255;case 2:return this.LOAD_BASE>>8&255;default:return 0}else switch(x){case 0:return this.rom&&this.loadRAMWithProgram(),76;case 1:return 32;case 3:return 0;case 5:return 3;case 7:return 60;default:return 0}},readConst:x=>0,read:x=>this.floatbus(),write:(x,a)=>{}};this.loadBIOS(new $().decode(x0(atob(u0)))),this.connectCPUMemoryBus(this),this.bios[54170-(65536-this.bios.length)]=96}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(),kbdlatch:this.kbdlatch,soundstate:this.soundstate,grswitch:this.grparams.grswitch,auxRAMselected:this.auxRAMselected,auxRAMbank:this.auxRAMbank,writeinhibit:this.writeinhibit,slots:this.slots.map(x=>x&&x.saveState&&x.saveState()),paddleValues:this.paddleValues.slice(),paddleButtons:this.paddleButtons.slice(),inputs:this.ram.slice(0,0)}}loadState(x){this.cpu.loadState(x.c),this.ram.set(x.ram),this.kbdlatch=x.kbdlatch,this.soundstate=x.soundstate,this.grparams.grswitch=x.grswitch,this.auxRAMselected=x.auxRAMselected,this.auxRAMbank=x.auxRAMbank,this.writeinhibit=x.writeinhibit,this.setupLanguageCardConstants();for(var a=0;a>8!=198);x++);for(var x=0;x<2e6&&(this.cpu.advanceClock(),!(this.cpu.getPC()>>8<198));x++);}readConst(x){if(x<49152)return this.ram[x];if(x>=53248)return this.auxRAMselected?x>=57344?this.ram[x]:this.ram[x+this.bank2rdoffset]:this.bios[x-(65536-this.bios.length)];if(x>=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readConst(x&255))|0}else return 0}read(x){if(x&=65535,x<49152||x>=53248)return this.readConst(x);if(x<49408){this.probe.logIORead(x,0);var a=x>>4&15;switch(a){case 0:return this.kbdlatch;case 1:this.kbdlatch&=127;break;case 3:this.soundstate=this.soundstate^1;break;case 5:(x&15)<8&&((x&1)!=0?this.grparams.grswitch|=1<<(x>>1&7):this.grparams.grswitch&=~(1<<(x>>1&7)));break;case 6:switch(x&7){case 1:case 2:case 3:var r=(x&7)-1;return this.paddleButtons[r]?this.floatbus()|128:this.floatbus()&127;case 4:case 5:case 6:case 7:var t=(x&15)-4,i=this.frameCycles-this.paddleLastTriggered;return i=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readROM(x&255))|0}return this.floatbus()}write(x,a){if(x&=65535,a&=255,x<49152)this.ram[x]=a,this.grdirty[x>>7]=1;else if(x<49296)this.read(x);else if(x<49408){var r=x>>4&15;this.slots[r-8]&&this.slots[r-8].write(x&15,a),this.probe.logIOWrite(x,a)}else x>=53248&&!this.writeinhibit&&(x>=57344?this.ram[x]=a:this.ram[x+this.bank2wroffset]=a)}floatbus(){var x=this.frameCycles,a=Math.floor(x/65),r=Math.floor(x%65),t=this.ap2disp.getAddressForScanline(a);return this.readConst(t+r)}connectVideo(x){super.connectVideo(x),this.ap2disp=this.pixels&&new l0(this.pixels,this.grparams)}startScanline(){}drawScanline(){}advanceFrame(x){var a=super.advanceFrame(x);return this.ap2disp&&this.ap2disp.updateScreen(),a}postFrame(){this.paddleLastTriggered-=this.frameCycles,this.paddleLastTriggered<-this.cpuCyclesPaddleMax&&(this.paddleLastTriggered=-this.cpuCyclesPaddleMax)}advanceCPU(){return this.audio.feedSample(this.soundstate,1),super.advanceCPU()}setKeyInput(x,a,r){if(console.log(`setKeyInput: ${x} ${a} ${r}`),r&1){switch(a=0,x){case 16:case 17:case 18:case 91:return;case 8:if(a=8,r&2){this.cpu.reset();return}break;case 13:a=13;break;case 27:a=27;break;case 37:a=8;break;case 39:a=21;break;case 38:a=11;break;case 40:a=10;break;case 48:a=r&2?41:48;break;case 49:a=r&2?33:49;break;case 50:a=r&2?64:50;break;case 51:a=r&2?35:51;break;case 52:a=r&2?36:52;break;case 53:a=r&2?37:53;break;case 54:a=r&2?94:54;break;case 55:a=r&2?38:55;break;case 56:a=r&2?42:56;break;case 57:a=r&2?40:57;break;case 61:a=r&2?95:45;break;case 173:a=r&2?43:61;break;case 59:a=r&2?58:59;break;case 186:a=r&2?58:59;break;case 187:a=r&2?43:61;break;case 188:a=r&2?60:44;break;case 189:a=r&2?95:45;break;case 190:a=r&2?62:46;break;case 191:a=r&2?63:47;break;case 222:a=r&2?34:39;break;default:a=x,a>=97&&a<=122&&(a-=32),a>=65&&a<91&&r&4&&(a-=64)}a&&(this.kbdlatch=(a|128)&255)}}setPaddleInput(x,a){x>=0&&x=0&&x>1&3,a==(t-1&3)?t>0&&t--:a==(t+1&3)&&t>1],console.log("track",t/2)):this.track_data=null,this.track=t;break;case 8:this.motor=!1;break;case 9:this.motor=!0;break;case 10:break;case 11:break;case 15:this.read_mode=!1;case 12:if(this.read_mode)return this.read_latch();break;case 14:this.read_mode=!0;case 13:return x>=0&&!this.read_mode&&!this.write_protect&&this.write_latch(x),this.write_protect?128:0}return this.emu.floatbus()}},G=[150,151,154,155,157,158,159,166,167,171,172,173,174,175,178,179,180,181,182,183,185,186,187,188,189,190,191,203,205,206,207,211,214,215,217,218,219,220,221,222,223,229,230,231,233,234,235,236,237,238,239,242,243,244,245,246,247,249,250,251,252,253,254,255],m0=[0,7,14,6,13,5,12,4,11,3,10,2,9,1,8,15];function g0(n,e,x,a,r,t,i){var f,g,C,u,m=new Uint8Array(258);for(u=0,f=0;f<14;f++)t[i++]=255;for(t[i++]=213,t[i++]=170,t[i++]=150,t[i++]=n>>1|170,t[i++]=n|170,g=n,t[i++]=e>>1|170,t[i++]=e|170,g^=e,t[i++]=x>>1|170,t[i++]=x|170,g^=x,t[i++]=g>>1|170,t[i++]=g|170,t[i++]=222,t[i++]=170,t[i++]=235,f=0;f<6;f++)t[i++]=255;for(t[i++]=213,t[i++]=170,t[i++]=173,f=0;f<256;f++)m[f]=a[f+r]&255;for(m[256]=0,m[257]=0,C=0,f=0;f<86;f++)u=(m[f]&1)<<1,u|=(m[f]&2)>>1,u|=(m[f+86]&1)<<3,u|=(m[f+86]&2)<<1,u|=(m[f+172]&1)<<5,u|=(m[f+172]&2)<<3,t[i++]=G[u^C],C=u;for(f=0;f<256;f++)u=m[f]>>2,t[i++]=G[u^C],C=u;t[i++]=G[u],t[i++]=222,t[i++]=170,t[i++]=235}function p0(n,e,x){for(var a=new Uint8Array(F),r=0,t=0;t<16;t++)g0(n,e,t,x,m0[t]<<8,a,r),r+=A0;for(;rx.endsWith(".lnk")?"merlin32":O(x)}newMachine(){return new P}getPresets(){return n0}getDefaultExtensions(){return[...super.getDefaultExtensions(),".lnk"]}readAddress(x){return this.machine.readConst(x)}getROMExtension(x){return x&&x.length==560*256?".dsk":".bin"}};U["apple2.mame"]=T;U.apple2=Z; -//# sourceMappingURL=apple2-SYEO3X4P.js.map +//# sourceMappingURL=apple2-X6MJKSIN.js.map diff --git a/gen/apple2-SYEO3X4P.js.map b/gen/apple2-X6MJKSIN.js.map similarity index 100% rename from gen/apple2-SYEO3X4P.js.map rename to gen/apple2-X6MJKSIN.js.map diff --git a/gen/arm32-S36JBNFZ.js b/gen/arm32-LIX3MTX7.js similarity index 99% rename from gen/arm32-S36JBNFZ.js rename to gen/arm32-LIX3MTX7.js index 0a6ca312..d75b83b9 100644 --- a/gen/arm32-S36JBNFZ.js +++ b/gen/arm32-LIX3MTX7.js @@ -1,4 +1,4 @@ -import{H as Rr,r as mr}from"./chunk-AK7O6YZI.js";import{$ as er,E as or,J as Fr,S as N,V as T,W as hr,Y as fr,a as Q,g as E}from"./chunk-5H5GMVON.js";import{a as pr,b as nr}from"./chunk-KT7KMEQC.js";var gr=4026531840,Cr=223,wr=32;function n(r){this.cpu=r,this.addressingMode23Immediate=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]+i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode23Register=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-e[i]};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return c};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode2RegisterShifted=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]-=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]+=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]-r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]-r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]+r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]+r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null]}n.prototype.constructAddressingMode1ASR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a>>e,i.shifterCarryOut=a&1<>31?(i.shifterOperand=4294967295,i.shifterCarryOut=2147483648):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1Immediate=function(r){var t=this.cpu;return function(){t.shifterOperand=r,t.shifterCarryOut=t.cpsrC}};n.prototype.constructAddressingMode1ImmediateRotate=function(r,t){var i=this.cpu;return function(){i.shifterOperand=r>>>t|r<<32-t,i.shifterCarryOut=i.shifterOperand>>31}};n.prototype.constructAddressingMode1LSL=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a<>>e,i.shifterCarryOut=a&1<>31):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1ROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4);var c=e&31;e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):c?(i.shifterOperand=s[t]>>>c|s[t]<<32-c,i.shifterCarryOut=a&1<>31)}};n.prototype.constructAddressingMode23Immediate=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Immediate[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode23Register=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Register[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode2RegisterShifted=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode2RegisterShifted[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode4=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[t]+r;return e}};n.prototype.constructAddressingMode4Writeback=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(c){var u=a[i]+r;return c&&s&&e.mmu.store32(a[i]+r-4,a[i]),a[i]+=t,u}};n.prototype.constructNOP=function(){return this.writesPC=!1,function(){}};n.prototype.constructADC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0);a[r]=(a[t]>>>0)+c}}};n.prototype.constructADCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0),u=(a[t]>>>0)+c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=u>4294967295,e.cpsrV=a[t]>>31==c>>31&&a[t]>>31!=u>>31&&c>>31!=u>>31),a[r]=u}}};n.prototype.constructADD=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=(a[t]>>>0)+(e.shifterOperand>>>0))}};n.prototype.constructADDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructAND=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand)}};n.prototype.constructANDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructB=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[15]+=r}};n.prototype.constructBIC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand)}};n.prototype.constructBICS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructBL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[14]=s[15]-4,s[15]+=r}};n.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),i.switchExecMode(s[r]&1),s[15]=s[r]&4294967294}};n.prototype.constructCMN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31}}};n.prototype.constructCMP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31}}};n.prototype.constructEOR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand)}};n.prototype.constructEORS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructLDM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(e[F]=a.load32(c&4294967292),c+=4,++u);a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p=s.mode;s.switchMode(31);var F,R;for(F=r,R=0;F;F>>=1,++R)F&1&&(e[R]=a.load32(c&4294967292),c+=4,++u);s.switchMode(p),a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load32(a),s.mmu.wait32(a),++s.cycles}}};n.prototype.constructLDRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructMLA=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e()))if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t]}};n.prototype.constructMLAS=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t];a.cpsrN=c[r]>>31,a.cpsrZ=!(c[r]&4294967295)}}};n.prototype.constructMOV=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand)}};n.prototype.constructMOVS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructMRS=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch32(e[15]),!(i&&!i())&&(t?e[r]=s.spsr:e[r]=s.packCPSR())}};n.prototype.constructMSR=function(r,t,i,s,e){var a=this.cpu,c=a.gprs,u=i&65536,p=i&524288;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){var F;i&33554432?F=s:F=c[r];var R=(u?255:0)|(p?4278190080:0);t?(R&=gr|Cr|wr,a.spsr=a.spsr&~R|F&R):(R&gr&&(a.cpsrN=F>>31,a.cpsrZ=F&1073741824,a.cpsrC=F&536870912,a.cpsrV=F&268435456),a.mode!=16&&R&Cr&&(a.switchMode(F&15|16),a.cpsrI=F&128,a.cpsrF=F&64))}}};n.prototype.constructMUL=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s()))if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t]}};n.prototype.constructMULS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t];e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295)}}};n.prototype.constructMVN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand)}};n.prototype.constructMVNS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructORR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand)}};n.prototype.constructORRS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructRSB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand-a[t])}};n.prototype.constructRSBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=e.shifterOperand-a[t];r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterOperand>>>0>=a[t]>>>0,e.cpsrV=e.shifterOperand>>31!=a[t]>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructRSC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1);a[r]=(e.shifterOperand>>>0)-c}}};n.prototype.constructRSCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1),u=(e.shifterOperand>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=e.shifterOperand>>>0>=u>>>0,e.cpsrV=e.shifterOperand>>31!=c>>31&&e.shifterOperand>>31!=u>>31),a[r]=u}}};n.prototype.constructSBC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1);a[r]=(a[t]>>>0)-c}}};n.prototype.constructSBCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1),u=(a[t]>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=a[t]>>>0>=u>>>0,e.cpsrV=a[t]>>31!=c>>31&&a[t]>>31!=u>>31),a[r]=u}}};n.prototype.constructSMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c)}}};n.prototype.constructSMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c)}}};n.prototype.constructSMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSTM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=t(!0),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(a.store32(c,e[F]),c+=4,++u);a.waitMulti32(c,u)}};n.prototype.constructSTMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=s.mode,u=t(!0),p=0,F,R;for(s.switchMode(31),F=r,R=0;F;F>>=1,++R)F&1&&(a.store32(u,e[R]),u+=4,++p);s.switchMode(c),a.waitMulti32(u,p)}};n.prototype.constructSTR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store32(a,e[r]),s.mmu.wait32(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store8(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store16(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSUB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]-e.shifterOperand)}};n.prototype.constructSUBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31),a[r]=c}}};n.prototype.constructSWI=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.irq.swi32(r),i.mmu.waitPrefetch32(s[15])}};n.prototype.constructSWP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait32(a[t]),e.mmu.wait32(a[t]);var c=e.mmu.load32(a[t]);e.mmu.store32(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructSWPB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait(a[t]),e.mmu.wait(a[t]);var c=e.mmu.loadU8(a[t]);e.mmu.store8(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructTEQ=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]^e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructTST=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]&e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructUMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c}}};n.prototype.constructUMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructUMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0}}};n.prototype.constructUMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructVFP3Register=function(r,t,i,s,e,a,c){var u=this.cpu,p=e?u.dfprs:u.sfprs;return function(){if(u.mmu.waitPrefetch32(u.gprs[15]),!(r&&!r())){switch(t){case 2:switch(a){case 0:p[s]=p[i]*p[c];return}break;case 3:switch(a){case 0:p[s]=p[i]+p[c];return;case 2:p[s]=p[i]-p[c];return}break;case 8:switch(a){case 0:p[s]=p[i]/p[c];return}break}console.log("Unsupported instruction: "+E(t)+" "+E(a))}}};n.prototype.constructVCVT=function(r,t,i,s,e,a,c,u){var p=this.cpu,F=p.sfprs,R=p.dfprs,m=p.ifprs;return function(){if(p.mmu.waitPrefetch32(p.gprs[15]),!(r&&!r())){var v,o;s&&e?v=R[i]:s?v=F[i]:v=m[i],s?o=c?Math.floor(v):Math.round(v):o=v,s?m[t]=o:e?R[t]=o:F[t]=o}}};n.prototype.constructVCVTF=function(r,t,i,s){var e=this.cpu,a=e.sfprs,c=e.dfprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),!(r&&!r())){var u=s?c[i]:a[i];s?a[t]=u:c[t]=u}}};n.prototype.constructVLDR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?a[t]=e.mmu.load32(c):(a[t]=e.mmu.load32(c),a[t+1]=e.mmu.load32(c+4)),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVSTR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?e.mmu.store32(c,a[t]):(e.mmu.store32(c,a[t]),e.mmu.store32(c+4,a[t+1])),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVPUSH=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=e.gprs[13]-i*4;e.gprs[13]=c;for(let u=0;u>>0)+(i.cpsrC?1:0),a=s[r],c=(a>>>0)+e,u=a>>31,p=c>>31,F=e>>31;i.cpsrN=p,i.cpsrZ=!(c&4294967295),i.cpsrC=c>4294967295,i.cpsrV=u==F&&u!=p&&F!=p,s[r]=c}};h.prototype.constructADD1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!(e[t]>>31)&&(e[t]>>31^a)>>31&&a>>31,e[r]=a}};h.prototype.constructADD2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=!(s[r]>>31)&&(s[r]^e)>>31&&(t^e)>>31,s[r]=e}};h.prototype.constructADD3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+(e[i]>>>0);s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!((e[t]^e[i])>>31)&&(e[t]^a)>>31&&(e[i]^a)>>31,e[r]=a}};h.prototype.constructADD4=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]+=s[t]}};h.prototype.constructADD5=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=(s[15]&4294967292)+t}};h.prototype.constructADD6=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[13]+t}};h.prototype.constructADD7=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[13]+=r}};h.prototype.constructAND=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructASR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,s.cpsrC?e[r]=4294967295:e[r]=0):(s.cpsrC=e[t]&1<>i),s.cpsrN=e[r]>>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructASR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>=e):(i.cpsrC=s[r]>>31,i.cpsrC?s[r]=4294967295:s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructB1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),t()&&(s[15]+=r)}};h.prototype.constructB2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[15]+=r}};h.prototype.constructBIC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructBL1=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[14]=i[15]+r}};h.prototype.constructBL2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]);var s=i[15];i[15]=i[14]+(r<<1),i[14]=s-1}};h.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),i.switchExecMode(s[t]&1);var e=0;t==15&&(e=s[t]&2),s[15]=s[t]&4294967294-e}};h.prototype.constructCMN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+(s[t]>>>0);i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=s[r]>>31==s[t]>>31&&s[r]>>31!=e>>31&&s[t]>>31!=e>>31}};h.prototype.constructCMP1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31}};h.prototype.constructCMP2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=s[t],c=e-a,u=c>>31,p=e>>31;i.cpsrN=u,i.cpsrZ=!(c&4294967295),i.cpsrC=e>>>0>=a>>>0,i.cpsrV=p!=a>>31&&p!=u}};h.prototype.constructCMP3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=s[t]>>>0,i.cpsrV=(s[r]^s[t])>>31&&(s[r]^e)>>31}};h.prototype.constructEOR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]^s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLDMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)t&c&&(s[u]=i.mmu.load32(e),e+=4,++a);i.mmu.waitMulti32(e,a),1<>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSL2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<<32-e,s[r]<<=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]&1,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLSR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,e[r]=0):(s.cpsrC=e[t]&1<>>i),s.cpsrN=0,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>>=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]>>31,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMOV1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=t,i.cpsrN=t>>31,i.cpsrZ=!(t&4294967295)}};h.prototype.constructMOV2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=0,s.cpsrV=0,e[r]=a}};h.prototype.constructMOV3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[t]}};h.prototype.constructMUL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(i.mmu.waitPrefetch(s[15]),i.mmu.waitMul(s[t]),s[t]&4294901760&&s[r]&4294901760){var e=(s[r]&4294901760)*s[t]&4294967295,a=(s[r]&65535)*s[t]&4294967295;s[r]=e+a&4294967295}else s[r]*=s[t];i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMVN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructNEG=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=0>=e>>>0,i.cpsrV=s[t]>>31&&e>>31,s[r]=e}};h.prototype.constructORR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]|s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructPOP=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),++i.cycles;var e=s[13],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)r&c&&(i.mmu.waitSeq32(e),s[u]=i.mmu.load32(e),e+=4,++a);t&&(s[15]=i.mmu.load32(e)&4294967294,e+=4,++a),i.mmu.waitMulti32(e,a),s[13]=e}};h.prototype.constructPUSH=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[13]-4,a=0;i.mmu.waitPrefetch(s[15]),t&&(i.mmu.store32(e,s[14]),e-=4,++a);var c,u;for(c=128,u=7;c;c>>=1,--u)if(r&c){i.mmu.store32(e,s[u]),e-=4,++a;break}for(c>>=1,--u;c;c>>=1,--u)r&c&&(i.mmu.store32(e,s[u]),e-=4,++a);i.mmu.waitMulti32(e,a),s[13]=e+4}};h.prototype.constructROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;if(e){var a=e&31;a>0?(i.cpsrC=s[r]&1<>>a|s[r]<<32-a):i.cpsrC=s[r]>>31}i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructSBC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[t]>>>0)+(i.cpsrC?0:1),a=(s[r]>>>0)-e;i.cpsrN=a>>31,i.cpsrZ=!(a&4294967295),i.cpsrC=s[r]>>>0>=a>>>0,i.cpsrV=(s[r]^e)>>31&&(s[r]^a)>>31,s[r]=a}};h.prototype.constructSTMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.wait(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)if(t&c){i.mmu.store32(e,s[u]),e+=4,++a;break}for(c<<=1,++u;u<8;c<<=1,++u)t&c&&(i.mmu.store32(e,s[u]),e+=4,++a);i.mmu.waitMulti32(e,a),s[r]=e}};h.prototype.constructSTR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store32(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait32(a)}};h.prototype.constructSTR2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store32(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait32(e[t]+e[i])}};h.prototype.constructSTR3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.store32(s[13]+t,s[r]),i.mmu.wait(s[15]),i.mmu.wait32(s[13]+t)}};h.prototype.constructSTRB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store8(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRB2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store8(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSTRH1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store16(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRH2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store16(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSUB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=i,s.cpsrV=e[t]>>31&&(e[t]^a)>>31,e[r]=a}};h.prototype.constructSUB2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31,s[r]=e}};h.prototype.constructSUB3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-e[i];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=e[i]>>>0,s.cpsrV=e[t]>>31!=e[i]>>31&&e[t]>>31!=a>>31,e[r]=a}};h.prototype.constructSWI=function(r){var t=this.cpu,i=t.gprs;return function(){t.irq.swi(r),t.mmu.waitPrefetch(i[15])}};h.prototype.constructTST=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]&s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295)}};function A(){this.SP=13,this.LR=14,this.PC=15,this.MODE_ARM=0,this.MODE_THUMB=1,this.MODE_USER=16,this.MODE_FIQ=17,this.MODE_IRQ=18,this.MODE_SUPERVISOR=19,this.MODE_ABORT=23,this.MODE_UNDEFINED=27,this.MODE_SYSTEM=31,this.BANK_NONE=0,this.BANK_FIQ=1,this.BANK_IRQ=2,this.BANK_SUPERVISOR=3,this.BANK_ABORT=4,this.BANK_UNDEFINED=5,this.WORD_SIZE_ARM=4,this.WORD_SIZE_THUMB=2,this.BASE_RESET=0,this.BASE_UNDEF=4,this.BASE_SWI=8,this.BASE_PABT=12,this.BASE_DABT=16,this.BASE_IRQ=24,this.BASE_FIQ=28,this.armCompiler=new n(this),this.thumbCompiler=new h(this),this.generateConds(),this.gprs=new Int32Array(16),this.dfprs=new Float64Array(16),this.sfprs=new Float32Array(this.dfprs.buffer),this.ifprs=new Int32Array(this.dfprs.buffer)}A.prototype.resetCPU=function(r){for(var t=0;t<15;++t)this.gprs[t]=0;this.gprs[15]=r+4,this.dfprs.set(0),this.loadInstruction=this.loadInstructionArm,this.execMode=0,this.instructionWidth=4,this.mode=31,this.cpsrI=!1,this.cpsrF=!1,this.cpsrV=!1,this.cpsrC=!1,this.cpsrZ=!1,this.cpsrN=!1,this.bankedRegisters=[new Int32Array(7),new Int32Array(7),new Int32Array(2),new Int32Array(2),new Int32Array(2),new Int32Array(2)],this.spsr=0,this.bankedSPSRs=new Int32Array(6),this.cycles=0,this.shifterOperand=0,this.shifterCarryOut=0,this.page=null,this.pageId=0,this.pageRegion=-1,this.instruction=null,this.irq.clear();var i=this.gprs,s=this.mmu;this.step=function(){var e=this.instruction||(this.instruction=this.loadInstruction(i[15]-this.instructionWidth));if(i[15]+=this.instructionWidth,this.conditionPassed=!0,e(),!e.writesPC)this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next);else if(this.conditionPassed){var a=i[15]&=4294967294;this.execMode==0?(s.wait32(a),s.waitPrefetch32(a)):(s.wait(a),s.waitPrefetch(a)),i[15]+=this.instructionWidth,e.fixedJump?this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next):this.instruction=null}else this.instruction=null;this.irq.updateTimers()}};A.prototype.freeze=function(){return{PC:this.gprs[15]-this.instructionWidth,SP:this.gprs[13],gprs:[this.gprs[0],this.gprs[1],this.gprs[2],this.gprs[3],this.gprs[4],this.gprs[5],this.gprs[6],this.gprs[7],this.gprs[8],this.gprs[9],this.gprs[10],this.gprs[11],this.gprs[12],this.gprs[13],this.gprs[14],this.gprs[15]],sfprs:this.sfprs.slice(),dfprs:this.dfprs.slice(),ifprs:this.ifprs.slice(),mode:this.mode,cpsrI:this.cpsrI,cpsrF:this.cpsrF,cpsrV:this.cpsrV,cpsrC:this.cpsrC,cpsrZ:this.cpsrZ,cpsrN:this.cpsrN,bankedRegisters:[[this.bankedRegisters[0][0],this.bankedRegisters[0][1],this.bankedRegisters[0][2],this.bankedRegisters[0][3],this.bankedRegisters[0][4],this.bankedRegisters[0][5],this.bankedRegisters[0][6]],[this.bankedRegisters[1][0],this.bankedRegisters[1][1],this.bankedRegisters[1][2],this.bankedRegisters[1][3],this.bankedRegisters[1][4],this.bankedRegisters[1][5],this.bankedRegisters[1][6]],[this.bankedRegisters[2][0],this.bankedRegisters[2][1]],[this.bankedRegisters[3][0],this.bankedRegisters[3][1]],[this.bankedRegisters[4][0],this.bankedRegisters[4][1]],[this.bankedRegisters[5][0],this.bankedRegisters[5][1]]],spsr:this.spsr,bankedSPSRs:[this.bankedSPSRs[0],this.bankedSPSRs[1],this.bankedSPSRs[2],this.bankedSPSRs[3],this.bankedSPSRs[4],this.bankedSPSRs[5]],cycles:this.cycles,instructionWidth:this.instructionWidth}};A.prototype.defrost=function(r){this.instruction=null,this.page=null,this.pageId=0,this.pageRegion=-1,this.gprs[0]=r.gprs[0],this.gprs[1]=r.gprs[1],this.gprs[2]=r.gprs[2],this.gprs[3]=r.gprs[3],this.gprs[4]=r.gprs[4],this.gprs[5]=r.gprs[5],this.gprs[6]=r.gprs[6],this.gprs[7]=r.gprs[7],this.gprs[8]=r.gprs[8],this.gprs[9]=r.gprs[9],this.gprs[10]=r.gprs[10],this.gprs[11]=r.gprs[11],this.gprs[12]=r.gprs[12],this.gprs[13]=r.gprs[13],this.gprs[14]=r.gprs[14],this.gprs[15]=r.gprs[15],this.ifprs.set(r.ifprs),this.mode=r.mode,this.cpsrI=r.cpsrI,this.cpsrF=r.cpsrF,this.cpsrV=r.cpsrV,this.cpsrC=r.cpsrC,this.cpsrZ=r.cpsrZ,this.cpsrN=r.cpsrN,this.bankedRegisters[0][0]=r.bankedRegisters[0][0],this.bankedRegisters[0][1]=r.bankedRegisters[0][1],this.bankedRegisters[0][2]=r.bankedRegisters[0][2],this.bankedRegisters[0][3]=r.bankedRegisters[0][3],this.bankedRegisters[0][4]=r.bankedRegisters[0][4],this.bankedRegisters[0][5]=r.bankedRegisters[0][5],this.bankedRegisters[0][6]=r.bankedRegisters[0][6],this.bankedRegisters[1][0]=r.bankedRegisters[1][0],this.bankedRegisters[1][1]=r.bankedRegisters[1][1],this.bankedRegisters[1][2]=r.bankedRegisters[1][2],this.bankedRegisters[1][3]=r.bankedRegisters[1][3],this.bankedRegisters[1][4]=r.bankedRegisters[1][4],this.bankedRegisters[1][5]=r.bankedRegisters[1][5],this.bankedRegisters[1][6]=r.bankedRegisters[1][6],this.bankedRegisters[2][0]=r.bankedRegisters[2][0],this.bankedRegisters[2][1]=r.bankedRegisters[2][1],this.bankedRegisters[3][0]=r.bankedRegisters[3][0],this.bankedRegisters[3][1]=r.bankedRegisters[3][1],this.bankedRegisters[4][0]=r.bankedRegisters[4][0],this.bankedRegisters[4][1]=r.bankedRegisters[4][1],this.bankedRegisters[5][0]=r.bankedRegisters[5][0],this.bankedRegisters[5][1]=r.bankedRegisters[5][1],this.spsr=r.spsr,this.bankedSPSRs[0]=r.bankedSPSRs[0],this.bankedSPSRs[1]=r.bankedSPSRs[1],this.bankedSPSRs[2]=r.bankedSPSRs[2],this.bankedSPSRs[3]=r.bankedSPSRs[3],this.bankedSPSRs[4]=r.bankedSPSRs[4],this.bankedSPSRs[5]=r.bankedSPSRs[5],this.cycles=r.cycles,this.instructionWidth=r.instructionWidth,this.loadInstruction=r.instructionWidth==2?this.loadInstructionThumb:this.loadInstructionArm,this.execMode=r.instructionWidth==2?1:0};A.prototype.fetchPage=function(r){var t=this.mmu,i=r>>>t.BASE_OFFSET,s=t.addressToPage(i,r&t.OFFSET_MASK);if(i==this.pageRegion){if(s==this.pageId&&!this.page.invalid)return;this.pageId=s}else this.pageMask=t.memory[i].PAGE_MASK,this.pageRegion=i,this.pageId=s;this.page=t.accessPage(i,s)};A.prototype.loadInstructionArm=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>2;if(t=this.page.arm[i],t)return t;var s=this.mmu.load32(r)>>>0;return t=this.compileArm(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.arm[i]=t,t};A.prototype.loadInstructionThumb=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>1;if(t=this.page.thumb[i],t)return t;var s=this.mmu.load16(r);return t=this.compileThumb(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.thumb[i]=t,t};A.prototype.selectBank=function(r){switch(r){case 16:case 31:return 0;case 17:return 1;case 18:return 2;case 19:return 3;case 23:return 4;case 27:return 5;default:throw new N("Invalid user mode "+r+" passed to selectBank")}};A.prototype.switchExecMode=function(r){this.execMode!=r&&(this.execMode=r,r==0?(this.instructionWidth=4,this.loadInstruction=this.loadInstructionArm):(this.instructionWidth=2,this.loadInstruction=this.loadInstructionThumb))};A.prototype.switchMode=function(r){if(r!=this.mode){if(r!=16||r!=31){var t=this.selectBank(r),i=this.selectBank(this.mode);if(t!=i){if(r==17||this.mode==17){var s=i==1?1:0,e=t==1?1:0;this.bankedRegisters[s][2]=this.gprs[8],this.bankedRegisters[s][3]=this.gprs[9],this.bankedRegisters[s][4]=this.gprs[10],this.bankedRegisters[s][5]=this.gprs[11],this.bankedRegisters[s][6]=this.gprs[12],this.gprs[8]=this.bankedRegisters[e][2],this.gprs[9]=this.bankedRegisters[e][3],this.gprs[10]=this.bankedRegisters[e][4],this.gprs[11]=this.bankedRegisters[e][5],this.gprs[12]=this.bankedRegisters[e][6]}this.bankedRegisters[i][0]=this.gprs[13],this.bankedRegisters[i][1]=this.gprs[14],this.gprs[13]=this.bankedRegisters[t][0],this.gprs[14]=this.bankedRegisters[t][1],this.bankedSPSRs[i]=this.spsr,this.spsr=this.bankedSPSRs[t]}}this.mode=r}};A.prototype.packCPSR=function(){return this.mode|this.execMode<<5|this.cpsrF<<6|this.cpsrI<<7|this.cpsrN<<31|this.cpsrZ<<30|this.cpsrC<<29|this.cpsrV<<28};A.prototype.unpackCPSR=function(r){this.switchMode(r&31),this.switchExecMode(!!(r&32)),this.cpsrF=r&64,this.cpsrI=r&128,this.cpsrN=r&2147483648,this.cpsrZ=r&1073741824,this.cpsrC=r&536870912,this.cpsrV=r&268435456,this.irq.testIRQ()};A.prototype.hasSPSR=function(){return this.mode!=31&&this.mode!=16};A.prototype.raiseIRQ=function(){if(!this.cpsrI){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(18),this.spsr=r,this.gprs[14]=this.gprs[15]-t+4,this.gprs[15]=this.BASE_IRQ+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0}};A.prototype.raiseTrap=function(){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(19),this.spsr=r,this.gprs[14]=this.gprs[15]-t,this.gprs[15]=this.BASE_SWI+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0};A.prototype.badOp=function(r){var t=function(){throw new N("Illegal instruction: 0x"+r.toString(16))};return t.writesPC=!0,t.fixedJump=!1,t};A.prototype.generateConds=function(){var r=this;this.conds=[function(){return r.conditionPassed=r.cpsrZ},function(){return r.conditionPassed=!r.cpsrZ},function(){return r.conditionPassed=r.cpsrC},function(){return r.conditionPassed=!r.cpsrC},function(){return r.conditionPassed=r.cpsrN},function(){return r.conditionPassed=!r.cpsrN},function(){return r.conditionPassed=r.cpsrV},function(){return r.conditionPassed=!r.cpsrV},function(){return r.conditionPassed=r.cpsrC&&!r.cpsrZ},function(){return r.conditionPassed=!r.cpsrC||r.cpsrZ},function(){return r.conditionPassed=!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=!r.cpsrN!=!r.cpsrV},function(){return r.conditionPassed=!r.cpsrZ&&!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=r.cpsrZ||!r.cpsrN!=!r.cpsrV},null,null]};A.prototype.barrelShiftImmediate=function(r,t,i){var s=this,e=this.gprs,a=this.badOp;switch(r){case 0:t?a=function(){s.shifterOperand=e[i]<>>t,s.shifterCarryOut=e[i]&1<>t,s.shifterCarryOut=e[i]&1<>>t|e[i]<<32-t,s.shifterCarryOut=e[i]&1<>>1,s.shifterCarryOut=e[i]&1};break}return a};A.prototype.compileArm=function(r){var t=this.badOp(r),i=r&234881024,s=this,e=this.gprs,a=this.conds[(r&4026531840)>>>28];if((r&268435440)==19922704){var c=r&15;t=this.armCompiler.constructBX(c,a),t.writesPC=!0,t.fixedJump=!1}else if(!(r&201326592)&&(i==33554432||(r&144)!=144)){var u=r&31457280,p=r&1048576,F=!1;if((u&25165824)==16777216&&!p){var R=r&4194304;if((r&11595776)==2158592){var c=r&15,m=r&255,v=(r&3840)>>7;m=m>>>v|m<<32-v,t=this.armCompiler.constructMSR(c,R,r,m,a),t.writesPC=!1}else if((r&12517376)==983040){var o=(r&61440)>>12;t=this.armCompiler.constructMRS(o,R,a),t.writesPC=o==15}}else{var f=(r&983040)>>16,o=(r&61440)>>12,U=r&96,c=r&15,g=function(){throw new N("BUG: invalid barrel shifter")};if(r&33554432){var m=r&255,ir=(r&3840)>>7;ir?g=this.armCompiler.constructAddressingMode1ImmediateRotate(m,ir):g=this.armCompiler.constructAddressingMode1Immediate(m)}else if(r&16){var l=(r&3840)>>8;switch(F=!0,U){case 0:g=this.armCompiler.constructAddressingMode1LSL(l,c);break;case 32:g=this.armCompiler.constructAddressingMode1LSR(l,c);break;case 64:g=this.armCompiler.constructAddressingMode1ASR(l,c);break;case 96:g=this.armCompiler.constructAddressingMode1ROR(l,c);break}}else{var m=(r&3968)>>7;g=this.barrelShiftImmediate(U,m,c)}switch(u){case 0:p?t=this.armCompiler.constructANDS(o,f,g,a):t=this.armCompiler.constructAND(o,f,g,a);break;case 2097152:p?t=this.armCompiler.constructEORS(o,f,g,a):t=this.armCompiler.constructEOR(o,f,g,a);break;case 4194304:p?t=this.armCompiler.constructSUBS(o,f,g,a):t=this.armCompiler.constructSUB(o,f,g,a);break;case 6291456:p?t=this.armCompiler.constructRSBS(o,f,g,a):t=this.armCompiler.constructRSB(o,f,g,a);break;case 8388608:p?t=this.armCompiler.constructADDS(o,f,g,a):t=this.armCompiler.constructADD(o,f,g,a);break;case 10485760:p?t=this.armCompiler.constructADCS(o,f,g,a):t=this.armCompiler.constructADC(o,f,g,a);break;case 12582912:p?t=this.armCompiler.constructSBCS(o,f,g,a):t=this.armCompiler.constructSBC(o,f,g,a);break;case 14680064:p?t=this.armCompiler.constructRSCS(o,f,g,a):t=this.armCompiler.constructRSC(o,f,g,a);break;case 16777216:t=this.armCompiler.constructTST(o,f,g,a);break;case 18874368:t=this.armCompiler.constructTEQ(o,f,g,a);break;case 20971520:t=this.armCompiler.constructCMP(o,f,g,a);break;case 23068672:t=this.armCompiler.constructCMN(o,f,g,a);break;case 25165824:p?t=this.armCompiler.constructORRS(o,f,g,a):t=this.armCompiler.constructORR(o,f,g,a);break;case 27262976:p?t=this.armCompiler.constructMOVS(o,f,g,a):t=this.armCompiler.constructMOV(o,f,g,a);break;case 29360128:p?t=this.armCompiler.constructBICS(o,f,g,a):t=this.armCompiler.constructBIC(o,f,g,a);break;case 31457280:p?t=this.armCompiler.constructMVNS(o,f,g,a):t=this.armCompiler.constructMVN(o,f,g,a);break}t.writesPC=o==15}}else if((r&263196656)==16777360){var c=r&15,o=r>>12&15,f=r>>16&15;r&4194304?t=this.armCompiler.constructSWPB(o,f,c,a):t=this.armCompiler.constructSWP(o,f,c,a),t.writesPC=o==15}else switch(i){case 0:if((r&16777456)==144){var o=(r&983040)>>16,f=(r&61440)>>12,l=(r&3840)>>8,c=r&15;switch(r&15728640){case 0:t=this.armCompiler.constructMUL(o,l,c,a);break;case 1048576:t=this.armCompiler.constructMULS(o,l,c,a);break;case 2097152:t=this.armCompiler.constructMLA(o,f,l,c,a);break;case 3145728:t=this.armCompiler.constructMLAS(o,f,l,c,a);break;case 8388608:t=this.armCompiler.constructUMULL(o,f,l,c,a);break;case 9437184:t=this.armCompiler.constructUMULLS(o,f,l,c,a);break;case 10485760:t=this.armCompiler.constructUMLAL(o,f,l,c,a);break;case 11534336:t=this.armCompiler.constructUMLALS(o,f,l,c,a);break;case 12582912:t=this.armCompiler.constructSMULL(o,f,l,c,a);break;case 13631488:t=this.armCompiler.constructSMULLS(o,f,l,c,a);break;case 14680064:t=this.armCompiler.constructSMLAL(o,f,l,c,a);break;case 15728640:t=this.armCompiler.constructSMLALS(o,f,l,c,a);break}t.writesPC=o==15}else{var _=r&1048576,o=(r&61440)>>12,Ar=(r&3840)>>4,dr=c=r&15,ar=r&32,p=r&64,L=r&2097152,i=r&4194304,C;if(i){var m=dr|Ar;C=this.armCompiler.constructAddressingMode23Immediate(r,m,a)}else C=this.armCompiler.constructAddressingMode23Register(r,c,a);C.writesPC=!!L&&f==15,(r&144)==144&&(_?ar?p?t=this.armCompiler.constructLDRSH(o,C,a):t=this.armCompiler.constructLDRH(o,C,a):p&&(t=this.armCompiler.constructLDRSB(o,C,a)):!p&&ar&&(t=this.armCompiler.constructSTRH(o,C,a))),t.writesPC=o==15||C.writesPC}break;case 67108864:case 100663296:var o=(r&61440)>>12,_=r&1048576,cr=r&4194304,i=r&33554432;if((r&4293918960)==-403701520){var m=r&15;throw new N("Program exited ("+m+")")}var C=function(){throw new N("Unimplemented memory access: 0x"+r.toString(16))};if(~r&16777216&&(r&=4292870143),i){var c=r&15,U=r&96,ur=(r&3968)>>7;U||ur?(g=this.barrelShiftImmediate(U,ur,c),C=this.armCompiler.constructAddressingMode2RegisterShifted(r,g,a)):C=this.armCompiler.constructAddressingMode23Register(r,c,a)}else{var O=r&4095;C=this.armCompiler.constructAddressingMode23Immediate(r,O,a)}_?cr?t=this.armCompiler.constructLDRB(o,C,a):t=this.armCompiler.constructLDR(o,C,a):cr?t=this.armCompiler.constructSTRB(o,C,a):t=this.armCompiler.constructSTR(o,C,a),t.writesPC=_&&(o==15||C.writesPC);break;case 134217728:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,l=r&65535,f=(r&983040)>>16,C,m=0,O=0,Z=!1;if(J){j&&(m=4);for(var W=1,i=0;i<16;W<<=1,++i)l&W&&(L&&i==f&&!O&&(l&=~W,m+=4,Z=!0),O+=4)}else{j||(m=4);for(var W=1,i=0;i<16;W<<=1,++i)l&W&&(L&&i==f&&!O&&(l&=~W,m+=4,Z=!0),m-=4,O-=4)}L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?(B?t=this.armCompiler.constructLDMS(l,C,a):t=this.armCompiler.constructLDM(l,C,a),t.writesPC=!!(l&32768)):(B?t=this.armCompiler.constructSTMS(l,C,a):t=this.armCompiler.constructSTM(l,C,a),t.writesPC=!1);break;case 167772160:var m=r&16777215;m&8388608&&(m|=4278190080),m<<=2;var Pr=r&16777216;Pr?t=this.armCompiler.constructBL(m,a):t=this.armCompiler.constructB(m,a),t.writesPC=!0,t.fixedJump=!0;break;case 201326592:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,f=(r&983040)>>16,H=(r&61440)>>12,Ir=(r&3840)>>8,m=r&255,br=r>>28&15,a=this.conds[br];if((r&264179456)==221055488)t=this.armCompiler.constructVPUSH(a,H<<1|(B?1:0),m,!0);else if((r&264179456)==221055744)t=this.armCompiler.constructVPUSH(a,((B?16:0)|H)*2,m,!1);else if((r&264179456)==213715456)t=this.armCompiler.constructVPOP(a,H<<1|(B?1:0),m,!0);else if((r&264179456)==213715712)t=this.armCompiler.constructVPOP(a,((B?16:0)|H)*2,m,!1);else if((r&253759232)==218106368){m*=4,J||(m=-m);var Z=!1,K=H<<1|(B?1:0),C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!0):t=this.armCompiler.constructVSTR(a,K,C,!0)}else if((r&253759232)==218106624){m*=4,J||(m=-m);var Z=!1,K=((B?16:0)|H)*2,C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!1):t=this.armCompiler.constructVSTR(a,K,C,!1)}break;case 234881024:if((r&251658240)==251658240){var m=r&16777215;t=this.armCompiler.constructSWI(m,a),t.writesPC=!1}else if((r&263720528)==246942272){let k=r>>28&15,d=r>>22&1,x=r>>16&7,M=r>>12&15,P=r>>8&1,y=r>>7&1,b=r>>5&1,S=r&15,w=x&4,V=P!=0,G=w?x&1:0,$=y!=0,rr=!1,yr=P?(d?16:0)|M:M<<1|(d?1:0),Sr=P?(b?16:0)|S:S<<1|(b?1:0);t=this.armCompiler.constructVCVT(a,yr,Sr,w,V,G,$,rr),t.writesPC=!1}else if((r&264179408)==246876864){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>5&1,y=r&15,b=M!=0,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(P?16:0)|y:y<<1|(P?1:0);t=this.armCompiler.constructVCVTF(a,S,w,b),t.writesPC=!1}else if((r&262147600)==236980736){let k=r>>28&15,d=r>>22&1,x=r>>7&1,M=r>>5&1,P=(r&15728640)>>20,y=(r&983040)>>16,b=(r&61440)>>12,S=(r&224)>>5,w=r&15,V=r>>8&1,G=V?(d?16:0)|b:b<<1|(d?1:0),$=V?(M?16:0)|w:w<<1|(M?1:0),rr=V?(x?16:0)|y:y<<1|(x?1:0);var a=this.conds[k];t=this.armCompiler.constructVFP3Register(a,P,rr,G,V,S,$),t.writesPC=!1}else if((r&263195728)==243271680){let k=r>>28&15,d=r>>22&1,x=r>>16&15,M=r>>12&15,P=r>>8&3,y=r>>7&1,b=r>>5&1,S=r&15,w=P==3?(d?16:0)|M:M<<1|(d?1:0),V=P==3?(b?16:0)|S:S<<1|(b?1:0),G=P==3?(y?16:0)|x:x<<1|(y?1:0);t=this.armCompiler.constructVFP3Register(a,8,G,w,P==3,0,V),t.writesPC=!1}else if((r&264179280)==246680128){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP(a,S,x,M,P,w,b),t.writesPC=!1}else if((r&264179455)==246745664){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP0(a,S,x,M,P,w,b),t.writesPC=!1}else if(r==4008835600)t=this.armCompiler.constructNOP();else if((r&266342160)==234883600){let k=r>>28&15,d=r>>20&1,x=r>>16&15,M=r>>12&15,P=r>>7&1;var a=this.conds[k];t=this.armCompiler.constructVMOV(a,d,x<<1|(P?1:0),M)}else r==3992980240?t=this.armCompiler.constructVMOV(a,!1,0,0):r==3995081488&&(t=this.armCompiler.constructVMOV(a,!1,1,1));break;default:throw new N("Bad opcode: 0x"+r.toString(16))}return t.execMode=0,t.fixedJump=t.fixedJump||!1,t};A.prototype.compileThumb=function(r){var t=this.badOp(r&65535),i=this,s=this.gprs;if((r&64512)==16384){var e=(r&56)>>3,a=r&7;switch(r&960){case 0:t=this.thumbCompiler.constructAND(a,e);break;case 64:t=this.thumbCompiler.constructEOR(a,e);break;case 128:t=this.thumbCompiler.constructLSL2(a,e);break;case 192:t=this.thumbCompiler.constructLSR2(a,e);break;case 256:t=this.thumbCompiler.constructASR2(a,e);break;case 320:t=this.thumbCompiler.constructADC(a,e);break;case 384:t=this.thumbCompiler.constructSBC(a,e);break;case 448:t=this.thumbCompiler.constructROR(a,e);break;case 512:t=this.thumbCompiler.constructTST(a,e);break;case 576:t=this.thumbCompiler.constructNEG(a,e);break;case 640:t=this.thumbCompiler.constructCMP2(a,e);break;case 704:t=this.thumbCompiler.constructCMN(a,e);break;case 768:t=this.thumbCompiler.constructORR(a,e);break;case 832:t=this.thumbCompiler.constructMUL(a,e);break;case 896:t=this.thumbCompiler.constructBIC(a,e);break;case 960:t=this.thumbCompiler.constructMVN(a,e);break}t.writesPC=!1}else if((r&64512)==17408){var e=(r&120)>>3,c=r&7,u=r&128,a=c|u>>4;switch(r&768){case 0:t=this.thumbCompiler.constructADD4(a,e),t.writesPC=a==15;break;case 256:t=this.thumbCompiler.constructCMP3(a,e),t.writesPC=!1;break;case 512:t=this.thumbCompiler.constructMOV3(a,e),t.writesPC=a==15;break;case 768:t=this.thumbCompiler.constructBX(a,e),t.writesPC=!0,t.fixedJump=!1;break}}else if((r&63488)==6144){var e=(r&448)>>6,c=(r&56)>>3,a=r&7;switch(r&1536){case 0:t=this.thumbCompiler.constructADD3(a,c,e);break;case 512:t=this.thumbCompiler.constructSUB3(a,c,e);break;case 1024:var p=(r&448)>>6;p?t=this.thumbCompiler.constructADD1(a,c,p):t=this.thumbCompiler.constructMOV2(a,c,e);break;case 1536:var p=(r&448)>>6;t=this.thumbCompiler.constructSUB1(a,c,p);break}t.writesPC=!1}else if(r&57344)if((r&57344)==8192){var p=r&255,c=(r&1792)>>8;switch(r&6144){case 0:t=this.thumbCompiler.constructMOV1(c,p);break;case 2048:t=this.thumbCompiler.constructCMP1(c,p);break;case 4096:t=this.thumbCompiler.constructADD2(c,p);break;case 6144:t=this.thumbCompiler.constructSUB2(c,p);break}t.writesPC=!1}else if((r&63488)==18432){var a=(r&1792)>>8,p=(r&255)<<2;t=this.thumbCompiler.constructLDR3(a,p),t.writesPC=!1}else if((r&61440)==20480){var a=r&7,c=(r&56)>>3,e=(r&448)>>6,F=r&3584;switch(F){case 0:t=this.thumbCompiler.constructSTR2(a,c,e);break;case 512:t=this.thumbCompiler.constructSTRH2(a,c,e);break;case 1024:t=this.thumbCompiler.constructSTRB2(a,c,e);break;case 1536:t=this.thumbCompiler.constructLDRSB(a,c,e);break;case 2048:t=this.thumbCompiler.constructLDR2(a,c,e);break;case 2560:t=this.thumbCompiler.constructLDRH2(a,c,e);break;case 3072:t=this.thumbCompiler.constructLDRB2(a,c,e);break;case 3584:t=this.thumbCompiler.constructLDRSH(a,c,e);break}t.writesPC=!1}else if((r&57344)==24576){var a=r&7,c=(r&56)>>3,p=(r&1984)>>4,R=r&4096;R&&(p>>=2);var m=r&2048;m?R?t=this.thumbCompiler.constructLDRB1(a,c,p):t=this.thumbCompiler.constructLDR1(a,c,p):R?t=this.thumbCompiler.constructSTRB1(a,c,p):t=this.thumbCompiler.constructSTR1(a,c,p),t.writesPC=!1}else if((r&62976)==46080){var v=!!(r&256),o=r&255;r&2048?(t=this.thumbCompiler.constructPOP(o,v),t.writesPC=v,t.fixedJump=!1):(t=this.thumbCompiler.constructPUSH(o,v),t.writesPC=!1)}else if(r&32768)switch(r&28672){case 0:var a=r&7,c=(r&56)>>3,p=(r&1984)>>5;r&2048?t=this.thumbCompiler.constructLDRH1(a,c,p):t=this.thumbCompiler.constructSTRH1(a,c,p),t.writesPC=!1;break;case 4096:var a=(r&1792)>>8,p=(r&255)<<2,m=r&2048;m?t=this.thumbCompiler.constructLDR4(a,p):t=this.thumbCompiler.constructSTR3(a,p),t.writesPC=!1;break;case 8192:var a=(r&1792)>>8,p=(r&255)<<2;r&2048?t=this.thumbCompiler.constructADD6(a,p):t=this.thumbCompiler.constructADD5(a,p),t.writesPC=!1;break;case 12288:if(!(r&3840)){var R=r&128,p=(r&127)<<2;R&&(p=-p),t=this.thumbCompiler.constructADD7(p),t.writesPC=!1}break;case 16384:var c=(r&1792)>>8,o=r&255;r&2048?t=this.thumbCompiler.constructLDMIA(c,o):t=this.thumbCompiler.constructSTMIA(c,o),t.writesPC=!1;break;case 20480:var f=(r&3840)>>8,p=r&255;if(f==15)t=this.thumbCompiler.constructSWI(p),t.writesPC=!1;else{r&128&&(p|=4294967040),p<<=1;var U=this.conds[f];t=this.thumbCompiler.constructB1(p,U),t.writesPC=!0,t.fixedJump=!0}break;case 24576:case 28672:var p=r&2047,g=r&6144;switch(g){case 0:p&1024&&(p|=4294965248),p<<=1,t=this.thumbCompiler.constructB2(p),t.writesPC=!0,t.fixedJump=!0;break;case 2048:break;case 4096:p&1024&&(p|=4294966272),p<<=12,t=this.thumbCompiler.constructBL1(p),t.writesPC=!1;break;case 6144:t=this.thumbCompiler.constructBL2(p),t.writesPC=!0,t.fixedJump=!1;break}break;default:throw new N("Undefined instruction: 0x"+r.toString(16))}else throw new N("Bad opcode: 0x"+r.toString(16));else{var a=r&7,e=(r&56)>>3,p=(r&1984)>>6;switch(r&6144){case 0:t=this.thumbCompiler.constructLSL1(a,e,p);break;case 2048:t=this.thumbCompiler.constructLSR1(a,e,p);break;case 4096:t=this.thumbCompiler.constructASR1(a,e,p);break;case 6144:break}t.writesPC=!1}return t.execMode=1,t.fixedJump=t.fixedJump||!1,t};var Y=class{constructor(){this.f64arr=new Float64Array(1);this.f32arr=new Float32Array(this.f64arr.buffer);this.i32arr=new Int32Array(this.f64arr.buffer);this.BASE_OFFSET=24;this.OFFSET_MASK=16777215;this.core=new A,this.core.irq=this,this.core.mmu=this,this.resetMemory()}resetMemory(){this.memory=[];for(var t=0;t<256;t++)this.memory[t]={PAGE_MASK:2047,ICACHE_PAGE_BITS:10,icache:new Array}}advanceInsn(){var t=this.core.cycles;return this.core.step(),t-=this.core.cycles,t>0?t:1}getPC(){return this.core.gprs[15]-this.core.instructionWidth}getSP(){return this.core.gprs[13]}isStable(){return!0}connectMemoryBus(t){this.bus=t}reset(){this.resetMemory();let t=this.load32(0);this.core.resetCPU(t)}saveState(){return this.core.freeze()}loadState(t){this.core.defrost(t)}load8(t){return this.bus.read(t)<<24>>24}loadU8(t){return this.bus.read(t)&255}load16(t){return this.loadU16(t)<<16>>16}loadU16(t){return this.bus.read(t)|this.bus.read(t+1)<<8}load32(t){var i=this.bus.read32(t);return i}store8(t,i){this.bus.write(t,i&255)}store16(t,i){this.bus.write(t,i&255),this.bus.write(t+1,i>>8&255)}store32(t,i){this.bus.write32(t,i)}wait(t){++this.core.cycles}wait32(t){++this.core.cycles}waitSeq32(t){++this.core.cycles}waitMul(t){(t&4294967040)==4294967040||!(t&4294967040)?this.core.cycles+=1:(t&4294901760)==4294901760||!(t&4294901760)?this.core.cycles+=2:(t&4278190080)==4278190080||!(t&4278190080)?this.core.cycles+=3:this.core.cycles+=4}waitMulti32(t,i){this.core.cycles+=2}waitPrefetch(t){++this.core.cycles}waitPrefetch32(t){++this.core.cycles}addressToPage(t,i){return i>>this.memory[t].ICACHE_PAGE_BITS}accessPage(t,i){var s=this.memory[t],e=s.icache[i];return(!e||e.invalid)&&(e={thumb:new Array(1<>16)}clear(){}updateTimers(){}testIRQ(){}isThumb(){return this.core.instructionWidth==2}getDebugTree(){return{state:this.saveState(),mmu:this.core.mmu}}};var Tr=fr([[T.A,0,1],[T.B,0,2],[T.GP_A,0,1],[T.GP_B,0,2],[T.SELECT,0,4],[T.START,0,8],[T.RIGHT,0,16],[T.LEFT,0,32],[T.UP,0,64],[T.DOWN,0,128]]),D=0,I=1048576,vr=0,X=67108864,z=256,kr=1e6,Mr=4e6,xr=3991793133,q=class extends mr{constructor(){super();this.cpuFrequency=Mr;this.canvasWidth=160;this.numTotalScanlines=256;this.numVisibleScanlines=128;this.cpuCyclesPerLine=Math.floor(Mr/(256*60));this.defaultROMSize=I-vr;this.sampleRate=1;this.cpu=new Y;this.ram=new Uint8Array(I);this.ram16=new Uint16Array(this.ram.buffer);this.ram32=new Uint32Array(this.ram.buffer);this.rombase=vr;this.brightness=255;this.ioregs=new Uint8Array(z);this.ioregs32=new Uint32Array(this.ioregs.buffer);this.read=er([[D,D+I-1,I-1,i=>this.ram[i]],[X,X+z-1,z-1,(i,s)=>this.readIO(i)]],{defaultval:xr&255});this.write=er([[D,D+I-1,I-1,(i,s)=>{this.ram[i]=s}],[X,X+z-1,z-1,(i,s)=>{this.writeIO(i,s)}]]);this.read32=i=>i>=D&&i>2]:this.read(i)|this.read(i+1)<<8|this.read(i+2)<<16|this.read(i+3)<<24;this.write32=(i,s)=>{i>=D&&i>2]=s:(this.write(i,s&255),this.write(i+1,s>>8&255),this.write(i+2,s>>16&255),this.write(i+3,s>>24&255))};this.connectCPUMemoryBus(this),this.handler=hr(this.inputs,Tr)}connectVideo(i){super.connectVideo(i),this.pixels32=i,this.pixels8=new Uint8Array(i.buffer)}connectSerialIO(i){this.serial=i}loadROM(i){super.loadROM(i)}reset(){this.ram.fill(0),this.rom&&this.ram.set(this.rom,this.rombase),super.reset(),this.serialOut=[],this.serialIn=[]}readAddress(i){return i>=D&&i>8;case 36:return this.getRasterX();case 37:return this.getRasterX()>>8;case 64:return(this.serial.byteAvailable()?128:0)|(this.serial.clearToSend()?64:0);case 68:let s=this.serialIn.shift();return s!=null?(this.serialOut.push(s),s.value):0;default:return 0}}writeIO(i,s){switch(this.ioregs[i]=s,i){case 72:this.serialOut.length>1&1048575,a=this.brightness<<24,c=0;c>5&31)<<11|(u>>10&31)<<19}}getDebugCategories(){return["CPU","Stack","FPU"]}getDebugInfo(i,s){switch(i){case"Stack":for(var u="",p=s.c,e=p.gprs[13],a=p.gprs[11],c=0;c<16&&(u+=E(e,8)+" "+E(this.ram32[e-D>>2],8),e==a&&(u+=" FP"),u+=` +import{H as Rr,r as mr}from"./chunk-AA227H53.js";import{$ as er,E as or,J as Fr,S as N,V as T,W as hr,Y as fr,a as Q,g as E}from"./chunk-BNFOPPUS.js";import{a as pr,b as nr}from"./chunk-KT7KMEQC.js";var gr=4026531840,Cr=223,wr=32;function n(r){this.cpu=r,this.addressingMode23Immediate=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]+i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode23Register=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-e[i]};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return c};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode2RegisterShifted=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]-=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]+=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]-r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]-r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]+r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]+r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null]}n.prototype.constructAddressingMode1ASR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a>>e,i.shifterCarryOut=a&1<>31?(i.shifterOperand=4294967295,i.shifterCarryOut=2147483648):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1Immediate=function(r){var t=this.cpu;return function(){t.shifterOperand=r,t.shifterCarryOut=t.cpsrC}};n.prototype.constructAddressingMode1ImmediateRotate=function(r,t){var i=this.cpu;return function(){i.shifterOperand=r>>>t|r<<32-t,i.shifterCarryOut=i.shifterOperand>>31}};n.prototype.constructAddressingMode1LSL=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a<>>e,i.shifterCarryOut=a&1<>31):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1ROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4);var c=e&31;e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):c?(i.shifterOperand=s[t]>>>c|s[t]<<32-c,i.shifterCarryOut=a&1<>31)}};n.prototype.constructAddressingMode23Immediate=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Immediate[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode23Register=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Register[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode2RegisterShifted=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode2RegisterShifted[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode4=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[t]+r;return e}};n.prototype.constructAddressingMode4Writeback=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(c){var u=a[i]+r;return c&&s&&e.mmu.store32(a[i]+r-4,a[i]),a[i]+=t,u}};n.prototype.constructNOP=function(){return this.writesPC=!1,function(){}};n.prototype.constructADC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0);a[r]=(a[t]>>>0)+c}}};n.prototype.constructADCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0),u=(a[t]>>>0)+c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=u>4294967295,e.cpsrV=a[t]>>31==c>>31&&a[t]>>31!=u>>31&&c>>31!=u>>31),a[r]=u}}};n.prototype.constructADD=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=(a[t]>>>0)+(e.shifterOperand>>>0))}};n.prototype.constructADDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructAND=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand)}};n.prototype.constructANDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructB=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[15]+=r}};n.prototype.constructBIC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand)}};n.prototype.constructBICS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructBL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[14]=s[15]-4,s[15]+=r}};n.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),i.switchExecMode(s[r]&1),s[15]=s[r]&4294967294}};n.prototype.constructCMN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31}}};n.prototype.constructCMP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31}}};n.prototype.constructEOR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand)}};n.prototype.constructEORS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructLDM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(e[F]=a.load32(c&4294967292),c+=4,++u);a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p=s.mode;s.switchMode(31);var F,R;for(F=r,R=0;F;F>>=1,++R)F&1&&(e[R]=a.load32(c&4294967292),c+=4,++u);s.switchMode(p),a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load32(a),s.mmu.wait32(a),++s.cycles}}};n.prototype.constructLDRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructMLA=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e()))if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t]}};n.prototype.constructMLAS=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t];a.cpsrN=c[r]>>31,a.cpsrZ=!(c[r]&4294967295)}}};n.prototype.constructMOV=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand)}};n.prototype.constructMOVS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructMRS=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch32(e[15]),!(i&&!i())&&(t?e[r]=s.spsr:e[r]=s.packCPSR())}};n.prototype.constructMSR=function(r,t,i,s,e){var a=this.cpu,c=a.gprs,u=i&65536,p=i&524288;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){var F;i&33554432?F=s:F=c[r];var R=(u?255:0)|(p?4278190080:0);t?(R&=gr|Cr|wr,a.spsr=a.spsr&~R|F&R):(R&gr&&(a.cpsrN=F>>31,a.cpsrZ=F&1073741824,a.cpsrC=F&536870912,a.cpsrV=F&268435456),a.mode!=16&&R&Cr&&(a.switchMode(F&15|16),a.cpsrI=F&128,a.cpsrF=F&64))}}};n.prototype.constructMUL=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s()))if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t]}};n.prototype.constructMULS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t];e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295)}}};n.prototype.constructMVN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand)}};n.prototype.constructMVNS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructORR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand)}};n.prototype.constructORRS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructRSB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand-a[t])}};n.prototype.constructRSBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=e.shifterOperand-a[t];r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterOperand>>>0>=a[t]>>>0,e.cpsrV=e.shifterOperand>>31!=a[t]>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructRSC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1);a[r]=(e.shifterOperand>>>0)-c}}};n.prototype.constructRSCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1),u=(e.shifterOperand>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=e.shifterOperand>>>0>=u>>>0,e.cpsrV=e.shifterOperand>>31!=c>>31&&e.shifterOperand>>31!=u>>31),a[r]=u}}};n.prototype.constructSBC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1);a[r]=(a[t]>>>0)-c}}};n.prototype.constructSBCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1),u=(a[t]>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=a[t]>>>0>=u>>>0,e.cpsrV=a[t]>>31!=c>>31&&a[t]>>31!=u>>31),a[r]=u}}};n.prototype.constructSMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c)}}};n.prototype.constructSMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c)}}};n.prototype.constructSMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSTM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=t(!0),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(a.store32(c,e[F]),c+=4,++u);a.waitMulti32(c,u)}};n.prototype.constructSTMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=s.mode,u=t(!0),p=0,F,R;for(s.switchMode(31),F=r,R=0;F;F>>=1,++R)F&1&&(a.store32(u,e[R]),u+=4,++p);s.switchMode(c),a.waitMulti32(u,p)}};n.prototype.constructSTR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store32(a,e[r]),s.mmu.wait32(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store8(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store16(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSUB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]-e.shifterOperand)}};n.prototype.constructSUBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31),a[r]=c}}};n.prototype.constructSWI=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.irq.swi32(r),i.mmu.waitPrefetch32(s[15])}};n.prototype.constructSWP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait32(a[t]),e.mmu.wait32(a[t]);var c=e.mmu.load32(a[t]);e.mmu.store32(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructSWPB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait(a[t]),e.mmu.wait(a[t]);var c=e.mmu.loadU8(a[t]);e.mmu.store8(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructTEQ=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]^e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructTST=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]&e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructUMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c}}};n.prototype.constructUMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructUMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0}}};n.prototype.constructUMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructVFP3Register=function(r,t,i,s,e,a,c){var u=this.cpu,p=e?u.dfprs:u.sfprs;return function(){if(u.mmu.waitPrefetch32(u.gprs[15]),!(r&&!r())){switch(t){case 2:switch(a){case 0:p[s]=p[i]*p[c];return}break;case 3:switch(a){case 0:p[s]=p[i]+p[c];return;case 2:p[s]=p[i]-p[c];return}break;case 8:switch(a){case 0:p[s]=p[i]/p[c];return}break}console.log("Unsupported instruction: "+E(t)+" "+E(a))}}};n.prototype.constructVCVT=function(r,t,i,s,e,a,c,u){var p=this.cpu,F=p.sfprs,R=p.dfprs,m=p.ifprs;return function(){if(p.mmu.waitPrefetch32(p.gprs[15]),!(r&&!r())){var v,o;s&&e?v=R[i]:s?v=F[i]:v=m[i],s?o=c?Math.floor(v):Math.round(v):o=v,s?m[t]=o:e?R[t]=o:F[t]=o}}};n.prototype.constructVCVTF=function(r,t,i,s){var e=this.cpu,a=e.sfprs,c=e.dfprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),!(r&&!r())){var u=s?c[i]:a[i];s?a[t]=u:c[t]=u}}};n.prototype.constructVLDR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?a[t]=e.mmu.load32(c):(a[t]=e.mmu.load32(c),a[t+1]=e.mmu.load32(c+4)),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVSTR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?e.mmu.store32(c,a[t]):(e.mmu.store32(c,a[t]),e.mmu.store32(c+4,a[t+1])),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVPUSH=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=e.gprs[13]-i*4;e.gprs[13]=c;for(let u=0;u>>0)+(i.cpsrC?1:0),a=s[r],c=(a>>>0)+e,u=a>>31,p=c>>31,F=e>>31;i.cpsrN=p,i.cpsrZ=!(c&4294967295),i.cpsrC=c>4294967295,i.cpsrV=u==F&&u!=p&&F!=p,s[r]=c}};h.prototype.constructADD1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!(e[t]>>31)&&(e[t]>>31^a)>>31&&a>>31,e[r]=a}};h.prototype.constructADD2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=!(s[r]>>31)&&(s[r]^e)>>31&&(t^e)>>31,s[r]=e}};h.prototype.constructADD3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+(e[i]>>>0);s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!((e[t]^e[i])>>31)&&(e[t]^a)>>31&&(e[i]^a)>>31,e[r]=a}};h.prototype.constructADD4=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]+=s[t]}};h.prototype.constructADD5=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=(s[15]&4294967292)+t}};h.prototype.constructADD6=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[13]+t}};h.prototype.constructADD7=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[13]+=r}};h.prototype.constructAND=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructASR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,s.cpsrC?e[r]=4294967295:e[r]=0):(s.cpsrC=e[t]&1<>i),s.cpsrN=e[r]>>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructASR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>=e):(i.cpsrC=s[r]>>31,i.cpsrC?s[r]=4294967295:s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructB1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),t()&&(s[15]+=r)}};h.prototype.constructB2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[15]+=r}};h.prototype.constructBIC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructBL1=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[14]=i[15]+r}};h.prototype.constructBL2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]);var s=i[15];i[15]=i[14]+(r<<1),i[14]=s-1}};h.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),i.switchExecMode(s[t]&1);var e=0;t==15&&(e=s[t]&2),s[15]=s[t]&4294967294-e}};h.prototype.constructCMN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+(s[t]>>>0);i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=s[r]>>31==s[t]>>31&&s[r]>>31!=e>>31&&s[t]>>31!=e>>31}};h.prototype.constructCMP1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31}};h.prototype.constructCMP2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=s[t],c=e-a,u=c>>31,p=e>>31;i.cpsrN=u,i.cpsrZ=!(c&4294967295),i.cpsrC=e>>>0>=a>>>0,i.cpsrV=p!=a>>31&&p!=u}};h.prototype.constructCMP3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=s[t]>>>0,i.cpsrV=(s[r]^s[t])>>31&&(s[r]^e)>>31}};h.prototype.constructEOR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]^s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLDMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)t&c&&(s[u]=i.mmu.load32(e),e+=4,++a);i.mmu.waitMulti32(e,a),1<>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSL2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<<32-e,s[r]<<=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]&1,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLSR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,e[r]=0):(s.cpsrC=e[t]&1<>>i),s.cpsrN=0,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>>=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]>>31,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMOV1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=t,i.cpsrN=t>>31,i.cpsrZ=!(t&4294967295)}};h.prototype.constructMOV2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=0,s.cpsrV=0,e[r]=a}};h.prototype.constructMOV3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[t]}};h.prototype.constructMUL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(i.mmu.waitPrefetch(s[15]),i.mmu.waitMul(s[t]),s[t]&4294901760&&s[r]&4294901760){var e=(s[r]&4294901760)*s[t]&4294967295,a=(s[r]&65535)*s[t]&4294967295;s[r]=e+a&4294967295}else s[r]*=s[t];i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMVN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructNEG=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=0>=e>>>0,i.cpsrV=s[t]>>31&&e>>31,s[r]=e}};h.prototype.constructORR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]|s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructPOP=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),++i.cycles;var e=s[13],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)r&c&&(i.mmu.waitSeq32(e),s[u]=i.mmu.load32(e),e+=4,++a);t&&(s[15]=i.mmu.load32(e)&4294967294,e+=4,++a),i.mmu.waitMulti32(e,a),s[13]=e}};h.prototype.constructPUSH=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[13]-4,a=0;i.mmu.waitPrefetch(s[15]),t&&(i.mmu.store32(e,s[14]),e-=4,++a);var c,u;for(c=128,u=7;c;c>>=1,--u)if(r&c){i.mmu.store32(e,s[u]),e-=4,++a;break}for(c>>=1,--u;c;c>>=1,--u)r&c&&(i.mmu.store32(e,s[u]),e-=4,++a);i.mmu.waitMulti32(e,a),s[13]=e+4}};h.prototype.constructROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;if(e){var a=e&31;a>0?(i.cpsrC=s[r]&1<>>a|s[r]<<32-a):i.cpsrC=s[r]>>31}i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructSBC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[t]>>>0)+(i.cpsrC?0:1),a=(s[r]>>>0)-e;i.cpsrN=a>>31,i.cpsrZ=!(a&4294967295),i.cpsrC=s[r]>>>0>=a>>>0,i.cpsrV=(s[r]^e)>>31&&(s[r]^a)>>31,s[r]=a}};h.prototype.constructSTMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.wait(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)if(t&c){i.mmu.store32(e,s[u]),e+=4,++a;break}for(c<<=1,++u;u<8;c<<=1,++u)t&c&&(i.mmu.store32(e,s[u]),e+=4,++a);i.mmu.waitMulti32(e,a),s[r]=e}};h.prototype.constructSTR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store32(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait32(a)}};h.prototype.constructSTR2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store32(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait32(e[t]+e[i])}};h.prototype.constructSTR3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.store32(s[13]+t,s[r]),i.mmu.wait(s[15]),i.mmu.wait32(s[13]+t)}};h.prototype.constructSTRB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store8(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRB2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store8(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSTRH1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store16(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRH2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store16(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSUB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=i,s.cpsrV=e[t]>>31&&(e[t]^a)>>31,e[r]=a}};h.prototype.constructSUB2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31,s[r]=e}};h.prototype.constructSUB3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-e[i];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=e[i]>>>0,s.cpsrV=e[t]>>31!=e[i]>>31&&e[t]>>31!=a>>31,e[r]=a}};h.prototype.constructSWI=function(r){var t=this.cpu,i=t.gprs;return function(){t.irq.swi(r),t.mmu.waitPrefetch(i[15])}};h.prototype.constructTST=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]&s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295)}};function A(){this.SP=13,this.LR=14,this.PC=15,this.MODE_ARM=0,this.MODE_THUMB=1,this.MODE_USER=16,this.MODE_FIQ=17,this.MODE_IRQ=18,this.MODE_SUPERVISOR=19,this.MODE_ABORT=23,this.MODE_UNDEFINED=27,this.MODE_SYSTEM=31,this.BANK_NONE=0,this.BANK_FIQ=1,this.BANK_IRQ=2,this.BANK_SUPERVISOR=3,this.BANK_ABORT=4,this.BANK_UNDEFINED=5,this.WORD_SIZE_ARM=4,this.WORD_SIZE_THUMB=2,this.BASE_RESET=0,this.BASE_UNDEF=4,this.BASE_SWI=8,this.BASE_PABT=12,this.BASE_DABT=16,this.BASE_IRQ=24,this.BASE_FIQ=28,this.armCompiler=new n(this),this.thumbCompiler=new h(this),this.generateConds(),this.gprs=new Int32Array(16),this.dfprs=new Float64Array(16),this.sfprs=new Float32Array(this.dfprs.buffer),this.ifprs=new Int32Array(this.dfprs.buffer)}A.prototype.resetCPU=function(r){for(var t=0;t<15;++t)this.gprs[t]=0;this.gprs[15]=r+4,this.dfprs.set(0),this.loadInstruction=this.loadInstructionArm,this.execMode=0,this.instructionWidth=4,this.mode=31,this.cpsrI=!1,this.cpsrF=!1,this.cpsrV=!1,this.cpsrC=!1,this.cpsrZ=!1,this.cpsrN=!1,this.bankedRegisters=[new Int32Array(7),new Int32Array(7),new Int32Array(2),new Int32Array(2),new Int32Array(2),new Int32Array(2)],this.spsr=0,this.bankedSPSRs=new Int32Array(6),this.cycles=0,this.shifterOperand=0,this.shifterCarryOut=0,this.page=null,this.pageId=0,this.pageRegion=-1,this.instruction=null,this.irq.clear();var i=this.gprs,s=this.mmu;this.step=function(){var e=this.instruction||(this.instruction=this.loadInstruction(i[15]-this.instructionWidth));if(i[15]+=this.instructionWidth,this.conditionPassed=!0,e(),!e.writesPC)this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next);else if(this.conditionPassed){var a=i[15]&=4294967294;this.execMode==0?(s.wait32(a),s.waitPrefetch32(a)):(s.wait(a),s.waitPrefetch(a)),i[15]+=this.instructionWidth,e.fixedJump?this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next):this.instruction=null}else this.instruction=null;this.irq.updateTimers()}};A.prototype.freeze=function(){return{PC:this.gprs[15]-this.instructionWidth,SP:this.gprs[13],gprs:[this.gprs[0],this.gprs[1],this.gprs[2],this.gprs[3],this.gprs[4],this.gprs[5],this.gprs[6],this.gprs[7],this.gprs[8],this.gprs[9],this.gprs[10],this.gprs[11],this.gprs[12],this.gprs[13],this.gprs[14],this.gprs[15]],sfprs:this.sfprs.slice(),dfprs:this.dfprs.slice(),ifprs:this.ifprs.slice(),mode:this.mode,cpsrI:this.cpsrI,cpsrF:this.cpsrF,cpsrV:this.cpsrV,cpsrC:this.cpsrC,cpsrZ:this.cpsrZ,cpsrN:this.cpsrN,bankedRegisters:[[this.bankedRegisters[0][0],this.bankedRegisters[0][1],this.bankedRegisters[0][2],this.bankedRegisters[0][3],this.bankedRegisters[0][4],this.bankedRegisters[0][5],this.bankedRegisters[0][6]],[this.bankedRegisters[1][0],this.bankedRegisters[1][1],this.bankedRegisters[1][2],this.bankedRegisters[1][3],this.bankedRegisters[1][4],this.bankedRegisters[1][5],this.bankedRegisters[1][6]],[this.bankedRegisters[2][0],this.bankedRegisters[2][1]],[this.bankedRegisters[3][0],this.bankedRegisters[3][1]],[this.bankedRegisters[4][0],this.bankedRegisters[4][1]],[this.bankedRegisters[5][0],this.bankedRegisters[5][1]]],spsr:this.spsr,bankedSPSRs:[this.bankedSPSRs[0],this.bankedSPSRs[1],this.bankedSPSRs[2],this.bankedSPSRs[3],this.bankedSPSRs[4],this.bankedSPSRs[5]],cycles:this.cycles,instructionWidth:this.instructionWidth}};A.prototype.defrost=function(r){this.instruction=null,this.page=null,this.pageId=0,this.pageRegion=-1,this.gprs[0]=r.gprs[0],this.gprs[1]=r.gprs[1],this.gprs[2]=r.gprs[2],this.gprs[3]=r.gprs[3],this.gprs[4]=r.gprs[4],this.gprs[5]=r.gprs[5],this.gprs[6]=r.gprs[6],this.gprs[7]=r.gprs[7],this.gprs[8]=r.gprs[8],this.gprs[9]=r.gprs[9],this.gprs[10]=r.gprs[10],this.gprs[11]=r.gprs[11],this.gprs[12]=r.gprs[12],this.gprs[13]=r.gprs[13],this.gprs[14]=r.gprs[14],this.gprs[15]=r.gprs[15],this.ifprs.set(r.ifprs),this.mode=r.mode,this.cpsrI=r.cpsrI,this.cpsrF=r.cpsrF,this.cpsrV=r.cpsrV,this.cpsrC=r.cpsrC,this.cpsrZ=r.cpsrZ,this.cpsrN=r.cpsrN,this.bankedRegisters[0][0]=r.bankedRegisters[0][0],this.bankedRegisters[0][1]=r.bankedRegisters[0][1],this.bankedRegisters[0][2]=r.bankedRegisters[0][2],this.bankedRegisters[0][3]=r.bankedRegisters[0][3],this.bankedRegisters[0][4]=r.bankedRegisters[0][4],this.bankedRegisters[0][5]=r.bankedRegisters[0][5],this.bankedRegisters[0][6]=r.bankedRegisters[0][6],this.bankedRegisters[1][0]=r.bankedRegisters[1][0],this.bankedRegisters[1][1]=r.bankedRegisters[1][1],this.bankedRegisters[1][2]=r.bankedRegisters[1][2],this.bankedRegisters[1][3]=r.bankedRegisters[1][3],this.bankedRegisters[1][4]=r.bankedRegisters[1][4],this.bankedRegisters[1][5]=r.bankedRegisters[1][5],this.bankedRegisters[1][6]=r.bankedRegisters[1][6],this.bankedRegisters[2][0]=r.bankedRegisters[2][0],this.bankedRegisters[2][1]=r.bankedRegisters[2][1],this.bankedRegisters[3][0]=r.bankedRegisters[3][0],this.bankedRegisters[3][1]=r.bankedRegisters[3][1],this.bankedRegisters[4][0]=r.bankedRegisters[4][0],this.bankedRegisters[4][1]=r.bankedRegisters[4][1],this.bankedRegisters[5][0]=r.bankedRegisters[5][0],this.bankedRegisters[5][1]=r.bankedRegisters[5][1],this.spsr=r.spsr,this.bankedSPSRs[0]=r.bankedSPSRs[0],this.bankedSPSRs[1]=r.bankedSPSRs[1],this.bankedSPSRs[2]=r.bankedSPSRs[2],this.bankedSPSRs[3]=r.bankedSPSRs[3],this.bankedSPSRs[4]=r.bankedSPSRs[4],this.bankedSPSRs[5]=r.bankedSPSRs[5],this.cycles=r.cycles,this.instructionWidth=r.instructionWidth,this.loadInstruction=r.instructionWidth==2?this.loadInstructionThumb:this.loadInstructionArm,this.execMode=r.instructionWidth==2?1:0};A.prototype.fetchPage=function(r){var t=this.mmu,i=r>>>t.BASE_OFFSET,s=t.addressToPage(i,r&t.OFFSET_MASK);if(i==this.pageRegion){if(s==this.pageId&&!this.page.invalid)return;this.pageId=s}else this.pageMask=t.memory[i].PAGE_MASK,this.pageRegion=i,this.pageId=s;this.page=t.accessPage(i,s)};A.prototype.loadInstructionArm=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>2;if(t=this.page.arm[i],t)return t;var s=this.mmu.load32(r)>>>0;return t=this.compileArm(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.arm[i]=t,t};A.prototype.loadInstructionThumb=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>1;if(t=this.page.thumb[i],t)return t;var s=this.mmu.load16(r);return t=this.compileThumb(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.thumb[i]=t,t};A.prototype.selectBank=function(r){switch(r){case 16:case 31:return 0;case 17:return 1;case 18:return 2;case 19:return 3;case 23:return 4;case 27:return 5;default:throw new N("Invalid user mode "+r+" passed to selectBank")}};A.prototype.switchExecMode=function(r){this.execMode!=r&&(this.execMode=r,r==0?(this.instructionWidth=4,this.loadInstruction=this.loadInstructionArm):(this.instructionWidth=2,this.loadInstruction=this.loadInstructionThumb))};A.prototype.switchMode=function(r){if(r!=this.mode){if(r!=16||r!=31){var t=this.selectBank(r),i=this.selectBank(this.mode);if(t!=i){if(r==17||this.mode==17){var s=i==1?1:0,e=t==1?1:0;this.bankedRegisters[s][2]=this.gprs[8],this.bankedRegisters[s][3]=this.gprs[9],this.bankedRegisters[s][4]=this.gprs[10],this.bankedRegisters[s][5]=this.gprs[11],this.bankedRegisters[s][6]=this.gprs[12],this.gprs[8]=this.bankedRegisters[e][2],this.gprs[9]=this.bankedRegisters[e][3],this.gprs[10]=this.bankedRegisters[e][4],this.gprs[11]=this.bankedRegisters[e][5],this.gprs[12]=this.bankedRegisters[e][6]}this.bankedRegisters[i][0]=this.gprs[13],this.bankedRegisters[i][1]=this.gprs[14],this.gprs[13]=this.bankedRegisters[t][0],this.gprs[14]=this.bankedRegisters[t][1],this.bankedSPSRs[i]=this.spsr,this.spsr=this.bankedSPSRs[t]}}this.mode=r}};A.prototype.packCPSR=function(){return this.mode|this.execMode<<5|this.cpsrF<<6|this.cpsrI<<7|this.cpsrN<<31|this.cpsrZ<<30|this.cpsrC<<29|this.cpsrV<<28};A.prototype.unpackCPSR=function(r){this.switchMode(r&31),this.switchExecMode(!!(r&32)),this.cpsrF=r&64,this.cpsrI=r&128,this.cpsrN=r&2147483648,this.cpsrZ=r&1073741824,this.cpsrC=r&536870912,this.cpsrV=r&268435456,this.irq.testIRQ()};A.prototype.hasSPSR=function(){return this.mode!=31&&this.mode!=16};A.prototype.raiseIRQ=function(){if(!this.cpsrI){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(18),this.spsr=r,this.gprs[14]=this.gprs[15]-t+4,this.gprs[15]=this.BASE_IRQ+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0}};A.prototype.raiseTrap=function(){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(19),this.spsr=r,this.gprs[14]=this.gprs[15]-t,this.gprs[15]=this.BASE_SWI+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0};A.prototype.badOp=function(r){var t=function(){throw new N("Illegal instruction: 0x"+r.toString(16))};return t.writesPC=!0,t.fixedJump=!1,t};A.prototype.generateConds=function(){var r=this;this.conds=[function(){return r.conditionPassed=r.cpsrZ},function(){return r.conditionPassed=!r.cpsrZ},function(){return r.conditionPassed=r.cpsrC},function(){return r.conditionPassed=!r.cpsrC},function(){return r.conditionPassed=r.cpsrN},function(){return r.conditionPassed=!r.cpsrN},function(){return r.conditionPassed=r.cpsrV},function(){return r.conditionPassed=!r.cpsrV},function(){return r.conditionPassed=r.cpsrC&&!r.cpsrZ},function(){return r.conditionPassed=!r.cpsrC||r.cpsrZ},function(){return r.conditionPassed=!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=!r.cpsrN!=!r.cpsrV},function(){return r.conditionPassed=!r.cpsrZ&&!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=r.cpsrZ||!r.cpsrN!=!r.cpsrV},null,null]};A.prototype.barrelShiftImmediate=function(r,t,i){var s=this,e=this.gprs,a=this.badOp;switch(r){case 0:t?a=function(){s.shifterOperand=e[i]<>>t,s.shifterCarryOut=e[i]&1<>t,s.shifterCarryOut=e[i]&1<>>t|e[i]<<32-t,s.shifterCarryOut=e[i]&1<>>1,s.shifterCarryOut=e[i]&1};break}return a};A.prototype.compileArm=function(r){var t=this.badOp(r),i=r&234881024,s=this,e=this.gprs,a=this.conds[(r&4026531840)>>>28];if((r&268435440)==19922704){var c=r&15;t=this.armCompiler.constructBX(c,a),t.writesPC=!0,t.fixedJump=!1}else if(!(r&201326592)&&(i==33554432||(r&144)!=144)){var u=r&31457280,p=r&1048576,F=!1;if((u&25165824)==16777216&&!p){var R=r&4194304;if((r&11595776)==2158592){var c=r&15,m=r&255,v=(r&3840)>>7;m=m>>>v|m<<32-v,t=this.armCompiler.constructMSR(c,R,r,m,a),t.writesPC=!1}else if((r&12517376)==983040){var o=(r&61440)>>12;t=this.armCompiler.constructMRS(o,R,a),t.writesPC=o==15}}else{var f=(r&983040)>>16,o=(r&61440)>>12,U=r&96,c=r&15,g=function(){throw new N("BUG: invalid barrel shifter")};if(r&33554432){var m=r&255,ir=(r&3840)>>7;ir?g=this.armCompiler.constructAddressingMode1ImmediateRotate(m,ir):g=this.armCompiler.constructAddressingMode1Immediate(m)}else if(r&16){var l=(r&3840)>>8;switch(F=!0,U){case 0:g=this.armCompiler.constructAddressingMode1LSL(l,c);break;case 32:g=this.armCompiler.constructAddressingMode1LSR(l,c);break;case 64:g=this.armCompiler.constructAddressingMode1ASR(l,c);break;case 96:g=this.armCompiler.constructAddressingMode1ROR(l,c);break}}else{var m=(r&3968)>>7;g=this.barrelShiftImmediate(U,m,c)}switch(u){case 0:p?t=this.armCompiler.constructANDS(o,f,g,a):t=this.armCompiler.constructAND(o,f,g,a);break;case 2097152:p?t=this.armCompiler.constructEORS(o,f,g,a):t=this.armCompiler.constructEOR(o,f,g,a);break;case 4194304:p?t=this.armCompiler.constructSUBS(o,f,g,a):t=this.armCompiler.constructSUB(o,f,g,a);break;case 6291456:p?t=this.armCompiler.constructRSBS(o,f,g,a):t=this.armCompiler.constructRSB(o,f,g,a);break;case 8388608:p?t=this.armCompiler.constructADDS(o,f,g,a):t=this.armCompiler.constructADD(o,f,g,a);break;case 10485760:p?t=this.armCompiler.constructADCS(o,f,g,a):t=this.armCompiler.constructADC(o,f,g,a);break;case 12582912:p?t=this.armCompiler.constructSBCS(o,f,g,a):t=this.armCompiler.constructSBC(o,f,g,a);break;case 14680064:p?t=this.armCompiler.constructRSCS(o,f,g,a):t=this.armCompiler.constructRSC(o,f,g,a);break;case 16777216:t=this.armCompiler.constructTST(o,f,g,a);break;case 18874368:t=this.armCompiler.constructTEQ(o,f,g,a);break;case 20971520:t=this.armCompiler.constructCMP(o,f,g,a);break;case 23068672:t=this.armCompiler.constructCMN(o,f,g,a);break;case 25165824:p?t=this.armCompiler.constructORRS(o,f,g,a):t=this.armCompiler.constructORR(o,f,g,a);break;case 27262976:p?t=this.armCompiler.constructMOVS(o,f,g,a):t=this.armCompiler.constructMOV(o,f,g,a);break;case 29360128:p?t=this.armCompiler.constructBICS(o,f,g,a):t=this.armCompiler.constructBIC(o,f,g,a);break;case 31457280:p?t=this.armCompiler.constructMVNS(o,f,g,a):t=this.armCompiler.constructMVN(o,f,g,a);break}t.writesPC=o==15}}else if((r&263196656)==16777360){var c=r&15,o=r>>12&15,f=r>>16&15;r&4194304?t=this.armCompiler.constructSWPB(o,f,c,a):t=this.armCompiler.constructSWP(o,f,c,a),t.writesPC=o==15}else switch(i){case 0:if((r&16777456)==144){var o=(r&983040)>>16,f=(r&61440)>>12,l=(r&3840)>>8,c=r&15;switch(r&15728640){case 0:t=this.armCompiler.constructMUL(o,l,c,a);break;case 1048576:t=this.armCompiler.constructMULS(o,l,c,a);break;case 2097152:t=this.armCompiler.constructMLA(o,f,l,c,a);break;case 3145728:t=this.armCompiler.constructMLAS(o,f,l,c,a);break;case 8388608:t=this.armCompiler.constructUMULL(o,f,l,c,a);break;case 9437184:t=this.armCompiler.constructUMULLS(o,f,l,c,a);break;case 10485760:t=this.armCompiler.constructUMLAL(o,f,l,c,a);break;case 11534336:t=this.armCompiler.constructUMLALS(o,f,l,c,a);break;case 12582912:t=this.armCompiler.constructSMULL(o,f,l,c,a);break;case 13631488:t=this.armCompiler.constructSMULLS(o,f,l,c,a);break;case 14680064:t=this.armCompiler.constructSMLAL(o,f,l,c,a);break;case 15728640:t=this.armCompiler.constructSMLALS(o,f,l,c,a);break}t.writesPC=o==15}else{var _=r&1048576,o=(r&61440)>>12,Ar=(r&3840)>>4,dr=c=r&15,ar=r&32,p=r&64,L=r&2097152,i=r&4194304,C;if(i){var m=dr|Ar;C=this.armCompiler.constructAddressingMode23Immediate(r,m,a)}else C=this.armCompiler.constructAddressingMode23Register(r,c,a);C.writesPC=!!L&&f==15,(r&144)==144&&(_?ar?p?t=this.armCompiler.constructLDRSH(o,C,a):t=this.armCompiler.constructLDRH(o,C,a):p&&(t=this.armCompiler.constructLDRSB(o,C,a)):!p&&ar&&(t=this.armCompiler.constructSTRH(o,C,a))),t.writesPC=o==15||C.writesPC}break;case 67108864:case 100663296:var o=(r&61440)>>12,_=r&1048576,cr=r&4194304,i=r&33554432;if((r&4293918960)==-403701520){var m=r&15;throw new N("Program exited ("+m+")")}var C=function(){throw new N("Unimplemented memory access: 0x"+r.toString(16))};if(~r&16777216&&(r&=4292870143),i){var c=r&15,U=r&96,ur=(r&3968)>>7;U||ur?(g=this.barrelShiftImmediate(U,ur,c),C=this.armCompiler.constructAddressingMode2RegisterShifted(r,g,a)):C=this.armCompiler.constructAddressingMode23Register(r,c,a)}else{var O=r&4095;C=this.armCompiler.constructAddressingMode23Immediate(r,O,a)}_?cr?t=this.armCompiler.constructLDRB(o,C,a):t=this.armCompiler.constructLDR(o,C,a):cr?t=this.armCompiler.constructSTRB(o,C,a):t=this.armCompiler.constructSTR(o,C,a),t.writesPC=_&&(o==15||C.writesPC);break;case 134217728:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,l=r&65535,f=(r&983040)>>16,C,m=0,O=0,Z=!1;if(J){j&&(m=4);for(var W=1,i=0;i<16;W<<=1,++i)l&W&&(L&&i==f&&!O&&(l&=~W,m+=4,Z=!0),O+=4)}else{j||(m=4);for(var W=1,i=0;i<16;W<<=1,++i)l&W&&(L&&i==f&&!O&&(l&=~W,m+=4,Z=!0),m-=4,O-=4)}L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?(B?t=this.armCompiler.constructLDMS(l,C,a):t=this.armCompiler.constructLDM(l,C,a),t.writesPC=!!(l&32768)):(B?t=this.armCompiler.constructSTMS(l,C,a):t=this.armCompiler.constructSTM(l,C,a),t.writesPC=!1);break;case 167772160:var m=r&16777215;m&8388608&&(m|=4278190080),m<<=2;var Pr=r&16777216;Pr?t=this.armCompiler.constructBL(m,a):t=this.armCompiler.constructB(m,a),t.writesPC=!0,t.fixedJump=!0;break;case 201326592:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,f=(r&983040)>>16,H=(r&61440)>>12,Ir=(r&3840)>>8,m=r&255,br=r>>28&15,a=this.conds[br];if((r&264179456)==221055488)t=this.armCompiler.constructVPUSH(a,H<<1|(B?1:0),m,!0);else if((r&264179456)==221055744)t=this.armCompiler.constructVPUSH(a,((B?16:0)|H)*2,m,!1);else if((r&264179456)==213715456)t=this.armCompiler.constructVPOP(a,H<<1|(B?1:0),m,!0);else if((r&264179456)==213715712)t=this.armCompiler.constructVPOP(a,((B?16:0)|H)*2,m,!1);else if((r&253759232)==218106368){m*=4,J||(m=-m);var Z=!1,K=H<<1|(B?1:0),C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!0):t=this.armCompiler.constructVSTR(a,K,C,!0)}else if((r&253759232)==218106624){m*=4,J||(m=-m);var Z=!1,K=((B?16:0)|H)*2,C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!1):t=this.armCompiler.constructVSTR(a,K,C,!1)}break;case 234881024:if((r&251658240)==251658240){var m=r&16777215;t=this.armCompiler.constructSWI(m,a),t.writesPC=!1}else if((r&263720528)==246942272){let k=r>>28&15,d=r>>22&1,x=r>>16&7,M=r>>12&15,P=r>>8&1,y=r>>7&1,b=r>>5&1,S=r&15,w=x&4,V=P!=0,G=w?x&1:0,$=y!=0,rr=!1,yr=P?(d?16:0)|M:M<<1|(d?1:0),Sr=P?(b?16:0)|S:S<<1|(b?1:0);t=this.armCompiler.constructVCVT(a,yr,Sr,w,V,G,$,rr),t.writesPC=!1}else if((r&264179408)==246876864){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>5&1,y=r&15,b=M!=0,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(P?16:0)|y:y<<1|(P?1:0);t=this.armCompiler.constructVCVTF(a,S,w,b),t.writesPC=!1}else if((r&262147600)==236980736){let k=r>>28&15,d=r>>22&1,x=r>>7&1,M=r>>5&1,P=(r&15728640)>>20,y=(r&983040)>>16,b=(r&61440)>>12,S=(r&224)>>5,w=r&15,V=r>>8&1,G=V?(d?16:0)|b:b<<1|(d?1:0),$=V?(M?16:0)|w:w<<1|(M?1:0),rr=V?(x?16:0)|y:y<<1|(x?1:0);var a=this.conds[k];t=this.armCompiler.constructVFP3Register(a,P,rr,G,V,S,$),t.writesPC=!1}else if((r&263195728)==243271680){let k=r>>28&15,d=r>>22&1,x=r>>16&15,M=r>>12&15,P=r>>8&3,y=r>>7&1,b=r>>5&1,S=r&15,w=P==3?(d?16:0)|M:M<<1|(d?1:0),V=P==3?(b?16:0)|S:S<<1|(b?1:0),G=P==3?(y?16:0)|x:x<<1|(y?1:0);t=this.armCompiler.constructVFP3Register(a,8,G,w,P==3,0,V),t.writesPC=!1}else if((r&264179280)==246680128){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP(a,S,x,M,P,w,b),t.writesPC=!1}else if((r&264179455)==246745664){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP0(a,S,x,M,P,w,b),t.writesPC=!1}else if(r==4008835600)t=this.armCompiler.constructNOP();else if((r&266342160)==234883600){let k=r>>28&15,d=r>>20&1,x=r>>16&15,M=r>>12&15,P=r>>7&1;var a=this.conds[k];t=this.armCompiler.constructVMOV(a,d,x<<1|(P?1:0),M)}else r==3992980240?t=this.armCompiler.constructVMOV(a,!1,0,0):r==3995081488&&(t=this.armCompiler.constructVMOV(a,!1,1,1));break;default:throw new N("Bad opcode: 0x"+r.toString(16))}return t.execMode=0,t.fixedJump=t.fixedJump||!1,t};A.prototype.compileThumb=function(r){var t=this.badOp(r&65535),i=this,s=this.gprs;if((r&64512)==16384){var e=(r&56)>>3,a=r&7;switch(r&960){case 0:t=this.thumbCompiler.constructAND(a,e);break;case 64:t=this.thumbCompiler.constructEOR(a,e);break;case 128:t=this.thumbCompiler.constructLSL2(a,e);break;case 192:t=this.thumbCompiler.constructLSR2(a,e);break;case 256:t=this.thumbCompiler.constructASR2(a,e);break;case 320:t=this.thumbCompiler.constructADC(a,e);break;case 384:t=this.thumbCompiler.constructSBC(a,e);break;case 448:t=this.thumbCompiler.constructROR(a,e);break;case 512:t=this.thumbCompiler.constructTST(a,e);break;case 576:t=this.thumbCompiler.constructNEG(a,e);break;case 640:t=this.thumbCompiler.constructCMP2(a,e);break;case 704:t=this.thumbCompiler.constructCMN(a,e);break;case 768:t=this.thumbCompiler.constructORR(a,e);break;case 832:t=this.thumbCompiler.constructMUL(a,e);break;case 896:t=this.thumbCompiler.constructBIC(a,e);break;case 960:t=this.thumbCompiler.constructMVN(a,e);break}t.writesPC=!1}else if((r&64512)==17408){var e=(r&120)>>3,c=r&7,u=r&128,a=c|u>>4;switch(r&768){case 0:t=this.thumbCompiler.constructADD4(a,e),t.writesPC=a==15;break;case 256:t=this.thumbCompiler.constructCMP3(a,e),t.writesPC=!1;break;case 512:t=this.thumbCompiler.constructMOV3(a,e),t.writesPC=a==15;break;case 768:t=this.thumbCompiler.constructBX(a,e),t.writesPC=!0,t.fixedJump=!1;break}}else if((r&63488)==6144){var e=(r&448)>>6,c=(r&56)>>3,a=r&7;switch(r&1536){case 0:t=this.thumbCompiler.constructADD3(a,c,e);break;case 512:t=this.thumbCompiler.constructSUB3(a,c,e);break;case 1024:var p=(r&448)>>6;p?t=this.thumbCompiler.constructADD1(a,c,p):t=this.thumbCompiler.constructMOV2(a,c,e);break;case 1536:var p=(r&448)>>6;t=this.thumbCompiler.constructSUB1(a,c,p);break}t.writesPC=!1}else if(r&57344)if((r&57344)==8192){var p=r&255,c=(r&1792)>>8;switch(r&6144){case 0:t=this.thumbCompiler.constructMOV1(c,p);break;case 2048:t=this.thumbCompiler.constructCMP1(c,p);break;case 4096:t=this.thumbCompiler.constructADD2(c,p);break;case 6144:t=this.thumbCompiler.constructSUB2(c,p);break}t.writesPC=!1}else if((r&63488)==18432){var a=(r&1792)>>8,p=(r&255)<<2;t=this.thumbCompiler.constructLDR3(a,p),t.writesPC=!1}else if((r&61440)==20480){var a=r&7,c=(r&56)>>3,e=(r&448)>>6,F=r&3584;switch(F){case 0:t=this.thumbCompiler.constructSTR2(a,c,e);break;case 512:t=this.thumbCompiler.constructSTRH2(a,c,e);break;case 1024:t=this.thumbCompiler.constructSTRB2(a,c,e);break;case 1536:t=this.thumbCompiler.constructLDRSB(a,c,e);break;case 2048:t=this.thumbCompiler.constructLDR2(a,c,e);break;case 2560:t=this.thumbCompiler.constructLDRH2(a,c,e);break;case 3072:t=this.thumbCompiler.constructLDRB2(a,c,e);break;case 3584:t=this.thumbCompiler.constructLDRSH(a,c,e);break}t.writesPC=!1}else if((r&57344)==24576){var a=r&7,c=(r&56)>>3,p=(r&1984)>>4,R=r&4096;R&&(p>>=2);var m=r&2048;m?R?t=this.thumbCompiler.constructLDRB1(a,c,p):t=this.thumbCompiler.constructLDR1(a,c,p):R?t=this.thumbCompiler.constructSTRB1(a,c,p):t=this.thumbCompiler.constructSTR1(a,c,p),t.writesPC=!1}else if((r&62976)==46080){var v=!!(r&256),o=r&255;r&2048?(t=this.thumbCompiler.constructPOP(o,v),t.writesPC=v,t.fixedJump=!1):(t=this.thumbCompiler.constructPUSH(o,v),t.writesPC=!1)}else if(r&32768)switch(r&28672){case 0:var a=r&7,c=(r&56)>>3,p=(r&1984)>>5;r&2048?t=this.thumbCompiler.constructLDRH1(a,c,p):t=this.thumbCompiler.constructSTRH1(a,c,p),t.writesPC=!1;break;case 4096:var a=(r&1792)>>8,p=(r&255)<<2,m=r&2048;m?t=this.thumbCompiler.constructLDR4(a,p):t=this.thumbCompiler.constructSTR3(a,p),t.writesPC=!1;break;case 8192:var a=(r&1792)>>8,p=(r&255)<<2;r&2048?t=this.thumbCompiler.constructADD6(a,p):t=this.thumbCompiler.constructADD5(a,p),t.writesPC=!1;break;case 12288:if(!(r&3840)){var R=r&128,p=(r&127)<<2;R&&(p=-p),t=this.thumbCompiler.constructADD7(p),t.writesPC=!1}break;case 16384:var c=(r&1792)>>8,o=r&255;r&2048?t=this.thumbCompiler.constructLDMIA(c,o):t=this.thumbCompiler.constructSTMIA(c,o),t.writesPC=!1;break;case 20480:var f=(r&3840)>>8,p=r&255;if(f==15)t=this.thumbCompiler.constructSWI(p),t.writesPC=!1;else{r&128&&(p|=4294967040),p<<=1;var U=this.conds[f];t=this.thumbCompiler.constructB1(p,U),t.writesPC=!0,t.fixedJump=!0}break;case 24576:case 28672:var p=r&2047,g=r&6144;switch(g){case 0:p&1024&&(p|=4294965248),p<<=1,t=this.thumbCompiler.constructB2(p),t.writesPC=!0,t.fixedJump=!0;break;case 2048:break;case 4096:p&1024&&(p|=4294966272),p<<=12,t=this.thumbCompiler.constructBL1(p),t.writesPC=!1;break;case 6144:t=this.thumbCompiler.constructBL2(p),t.writesPC=!0,t.fixedJump=!1;break}break;default:throw new N("Undefined instruction: 0x"+r.toString(16))}else throw new N("Bad opcode: 0x"+r.toString(16));else{var a=r&7,e=(r&56)>>3,p=(r&1984)>>6;switch(r&6144){case 0:t=this.thumbCompiler.constructLSL1(a,e,p);break;case 2048:t=this.thumbCompiler.constructLSR1(a,e,p);break;case 4096:t=this.thumbCompiler.constructASR1(a,e,p);break;case 6144:break}t.writesPC=!1}return t.execMode=1,t.fixedJump=t.fixedJump||!1,t};var Y=class{constructor(){this.f64arr=new Float64Array(1);this.f32arr=new Float32Array(this.f64arr.buffer);this.i32arr=new Int32Array(this.f64arr.buffer);this.BASE_OFFSET=24;this.OFFSET_MASK=16777215;this.core=new A,this.core.irq=this,this.core.mmu=this,this.resetMemory()}resetMemory(){this.memory=[];for(var t=0;t<256;t++)this.memory[t]={PAGE_MASK:2047,ICACHE_PAGE_BITS:10,icache:new Array}}advanceInsn(){var t=this.core.cycles;return this.core.step(),t-=this.core.cycles,t>0?t:1}getPC(){return this.core.gprs[15]-this.core.instructionWidth}getSP(){return this.core.gprs[13]}isStable(){return!0}connectMemoryBus(t){this.bus=t}reset(){this.resetMemory();let t=this.load32(0);this.core.resetCPU(t)}saveState(){return this.core.freeze()}loadState(t){this.core.defrost(t)}load8(t){return this.bus.read(t)<<24>>24}loadU8(t){return this.bus.read(t)&255}load16(t){return this.loadU16(t)<<16>>16}loadU16(t){return this.bus.read(t)|this.bus.read(t+1)<<8}load32(t){var i=this.bus.read32(t);return i}store8(t,i){this.bus.write(t,i&255)}store16(t,i){this.bus.write(t,i&255),this.bus.write(t+1,i>>8&255)}store32(t,i){this.bus.write32(t,i)}wait(t){++this.core.cycles}wait32(t){++this.core.cycles}waitSeq32(t){++this.core.cycles}waitMul(t){(t&4294967040)==4294967040||!(t&4294967040)?this.core.cycles+=1:(t&4294901760)==4294901760||!(t&4294901760)?this.core.cycles+=2:(t&4278190080)==4278190080||!(t&4278190080)?this.core.cycles+=3:this.core.cycles+=4}waitMulti32(t,i){this.core.cycles+=2}waitPrefetch(t){++this.core.cycles}waitPrefetch32(t){++this.core.cycles}addressToPage(t,i){return i>>this.memory[t].ICACHE_PAGE_BITS}accessPage(t,i){var s=this.memory[t],e=s.icache[i];return(!e||e.invalid)&&(e={thumb:new Array(1<>16)}clear(){}updateTimers(){}testIRQ(){}isThumb(){return this.core.instructionWidth==2}getDebugTree(){return{state:this.saveState(),mmu:this.core.mmu}}};var Tr=fr([[T.A,0,1],[T.B,0,2],[T.GP_A,0,1],[T.GP_B,0,2],[T.SELECT,0,4],[T.START,0,8],[T.RIGHT,0,16],[T.LEFT,0,32],[T.UP,0,64],[T.DOWN,0,128]]),D=0,I=1048576,vr=0,X=67108864,z=256,kr=1e6,Mr=4e6,xr=3991793133,q=class extends mr{constructor(){super();this.cpuFrequency=Mr;this.canvasWidth=160;this.numTotalScanlines=256;this.numVisibleScanlines=128;this.cpuCyclesPerLine=Math.floor(Mr/(256*60));this.defaultROMSize=I-vr;this.sampleRate=1;this.cpu=new Y;this.ram=new Uint8Array(I);this.ram16=new Uint16Array(this.ram.buffer);this.ram32=new Uint32Array(this.ram.buffer);this.rombase=vr;this.brightness=255;this.ioregs=new Uint8Array(z);this.ioregs32=new Uint32Array(this.ioregs.buffer);this.read=er([[D,D+I-1,I-1,i=>this.ram[i]],[X,X+z-1,z-1,(i,s)=>this.readIO(i)]],{defaultval:xr&255});this.write=er([[D,D+I-1,I-1,(i,s)=>{this.ram[i]=s}],[X,X+z-1,z-1,(i,s)=>{this.writeIO(i,s)}]]);this.read32=i=>i>=D&&i>2]:this.read(i)|this.read(i+1)<<8|this.read(i+2)<<16|this.read(i+3)<<24;this.write32=(i,s)=>{i>=D&&i>2]=s:(this.write(i,s&255),this.write(i+1,s>>8&255),this.write(i+2,s>>16&255),this.write(i+3,s>>24&255))};this.connectCPUMemoryBus(this),this.handler=hr(this.inputs,Tr)}connectVideo(i){super.connectVideo(i),this.pixels32=i,this.pixels8=new Uint8Array(i.buffer)}connectSerialIO(i){this.serial=i}loadROM(i){super.loadROM(i)}reset(){this.ram.fill(0),this.rom&&this.ram.set(this.rom,this.rombase),super.reset(),this.serialOut=[],this.serialIn=[]}readAddress(i){return i>=D&&i>8;case 36:return this.getRasterX();case 37:return this.getRasterX()>>8;case 64:return(this.serial.byteAvailable()?128:0)|(this.serial.clearToSend()?64:0);case 68:let s=this.serialIn.shift();return s!=null?(this.serialOut.push(s),s.value):0;default:return 0}}writeIO(i,s){switch(this.ioregs[i]=s,i){case 72:this.serialOut.length>1&1048575,a=this.brightness<<24,c=0;c>5&31)<<11|(u>>10&31)<<19}}getDebugCategories(){return["CPU","Stack","FPU"]}getDebugInfo(i,s){switch(i){case"Stack":for(var u="",p=s.c,e=p.gprs[13],a=p.gprs[11],c=0;c<16&&(u+=E(e,8)+" "+E(this.ram32[e-D>>2],8),e==a&&(u+=" FP"),u+=` `,e+=4,!(e>=D+I));c++);return u;case"CPU":var u="",p=s.c;let F={2:"Thumb",4:"ARM"},R={15:"PC",14:"LR",13:"SP",12:"IP",11:"FP",9:"SB"};for(var c=0;c<8;c++){let v=c+8;u+=Q("r"+c,5)+" "+E(p.gprs[c],8)+" ",u+=Q("r"+v,5)+" "+E(p.gprs[v],8)+Q(R[v]||"",3)+` `}return u+="Flags ",u+=p.cpsrN?" N":" -",u+=p.cpsrV?" V":" -",u+=p.cpsrF?" F":" -",u+=p.cpsrZ?" Z":" -",u+=p.cpsrC?" C":" -",u+=p.cpsrI?" I":" -",u+=` `,u+="MODE "+F[p.instructionWidth]+" "+Er[p.mode]+` @@ -6,4 +6,4 @@ import{H as Rr,r as mr}from"./chunk-AK7O6YZI.js";import{$ as er,E as or,J as Fr, `,u+="cycl "+p.cycles+` `,u;case"FPU":for(var u="",p=s.c,c=0;c<16;c++)u+=Q("s"+c,5)+" "+E(p.ifprs[c],8)+" "+p.sfprs[c].toPrecision(6),c&1&&(u+=Q("d"+(c>>1),5)+" "+p.dfprs[c>>1].toPrecision(12)),u+=` `;return u}}saveState(){var i=super.saveState();return i.serial={sin:this.serialIn.slice(0),sout:this.serialOut.slice(0)},i}loadState(i){super.loadState(i),this.serialIn=i.serial.sin,this.serialOut=i.serial.sout}},Er={16:"USER",17:"FIQ",18:"IRQ",19:"SUPERVISOR",23:"ABORT",27:"UNDEFINED",31:"SYSTEM"};var Dr=[{id:"vidfill.c",name:"Video Memory Fill"}],tr=class extends Rr{getToolForFilename(t){return t=t.toLowerCase(),t.endsWith(".vasm")?"vasmarm":t.endsWith(".armips")?"armips":(t.endsWith(".c")||t.endsWith(".s"),"armtcc")}getPresets(){return Dr}getDefaultExtensions(){return[".c",".armips",".vasm"]}},sr=class extends tr{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"ROM",start:0,size:1048576,type:"ram"},{name:"I/O",start:67108864,size:256,type:"io"}]}}}async start(){super.start(),console.log("Loading Capstone"),await or("./lib/capstone-arm.min.js"),this.capstone_arm=new cs.Capstone(cs.ARCH_ARM,cs.MODE_ARM),this.capstone_thumb=new cs.Capstone(cs.ARCH_ARM,cs.MODE_THUMB)}newMachine(){return new q}readAddress(i){return this.machine.read(i)}getPlatformName(){return"ARM7"}getDebugTree(){return nr(pr({},this.machine.cpu.getDebugTree()),{dwarf:this.debugSymbols.debuginfo})}disassemble(i,s){for(var e=this.machine.cpu.isThumb(),a=e?this.capstone_thumb:this.capstone_arm,c=[],u=0;u<4;u++)c[u]=s(i+u);var p=a.disasm(c,i,4),F=p&&p[0];return F?{nbytes:F.size,line:F.mnemonic+" "+F.op_str,isaddr:F.address>0}:{nbytes:4,line:"???",isaddr:!1}}};Fr.arm32=sr;export{tr as BaseARMMachinePlatform}; -//# sourceMappingURL=arm32-S36JBNFZ.js.map +//# sourceMappingURL=arm32-LIX3MTX7.js.map diff --git a/gen/arm32-S36JBNFZ.js.map b/gen/arm32-LIX3MTX7.js.map similarity index 100% rename from gen/arm32-S36JBNFZ.js.map rename to gen/arm32-LIX3MTX7.js.map diff --git a/gen/astrocade-WC7XEVHV.js b/gen/astrocade-LY2ZYNRY.js similarity index 99% rename from gen/astrocade-WC7XEVHV.js rename to gen/astrocade-LY2ZYNRY.js index 959bab70..f75d2d15 100644 --- a/gen/astrocade-WC7XEVHV.js +++ b/gen/astrocade-LY2ZYNRY.js @@ -1,4 +1,4 @@ -import{J as m0,c as B0,d as g0,e as X0,k as C0,r as l0}from"./chunk-AK7O6YZI.js";import{$ as N,J as k,V as A,W as c0,Y as o0,_ as q,g as o,l as d0,m as a0,t as f0}from"./chunk-5H5GMVON.js";import"./chunk-KT7KMEQC.js";var p0=o0([[A.UP,16,1],[A.DOWN,16,2],[A.LEFT,16,4],[A.RIGHT,16,8],[A.A,16,16],[A.P2_UP,17,1],[A.P2_DOWN,17,2],[A.P2_LEFT,17,4],[A.P2_RIGHT,17,8],[A.P2_A,17,16],[A.VK_P,20,1],[A.VK_SLASH,20,2],[A.VK_X,20,4],[A.VK_MINUS,20,8],[A.VK_COMMA,20,16],[A.VK_EQUALS,20,32],[A.VK_O,21,1],[A.VK_L,21,2],[A.VK_9,21,4],[A.VK_6,21,8],[A.VK_3,21,16],[A.VK_PERIOD,21,32],[A.VK_I,22,1],[A.VK_K,22,2],[A.VK_8,22,4],[A.VK_5,22,8],[A.VK_2,22,16],[A.VK_0,22,32],[A.VK_U,23,1],[A.VK_J,23,2],[A.VK_7,23,4],[A.VK_4,23,8],[A.VK_1,23,16],[A.VK_BACK_SLASH,23,32]]),h0=2,w0=function(f){var d,t,i,D,g,U,F0,W;let R=f?320:160,K=f?204:102,A0=R>>2,E0=f?16383:4095,N0=256,I0=4293848814,P0=4278190080;var j=new Uint8Array(32),B=0,E=0,X=!1,u=0,Y=0,b=0,M=0,p=0,w=K,H=new Uint32Array(8),y=new Uint8Array(8),J=0,T=new Uint8Array(f?262:131),C=new Uint8Array(4),l=0,Q=0,v=0,c=new Uint8Array(8),S=0;function V(e,x){t[e]=x,v++,T[(e&E0)/A0|0]=1}function u0(e,x){for(var s=e*4+3,n=0;n<4;n++){var m=e%A0>=(Y&63)?0:4;F0[s--]=H[m+(x&3)],x>>=2}}function r0(e){for(var x=e*R/4,s=0;s>=4);for(var n=0;n<4;n++){var m=x&1?E>>2&3:E&3;s|=m<>=1}x=s,X=!X}if(B&4){if(l&4){var a=2*(~l&3);x=(C[3]>>a&3)<<6|(C[2]>>a&3)<<4|(C[1]>>a&3)<<2|(C[0]>>a&3)<<0}else C[l&3]=x;l++}else{var a=(B&3)<<1,s=x>>a|u;u=x<<8-a&255,x=s}if(B&64&&(x=(x&3)<<6|(x&12)<<2|(x&48)>>2|(x&192)>>6),B&48){var F=t[e],r=0;F&192&&x&192&&(r|=1),F&48&&x&48&&(r|=2),F&12&&x&12&&(r|=4),F&3&&x&3&&(r|=8),B&16&&(x|=F),B&32&&(x^=F),Q=Q&240|r|r<<4}V(e,x)}function Z(e,x){y[e&7]=x&255,H[e&7]=e0[x&255],O()}function Y0(){var e=Y>>6}function O(){J=K}function b0(){let e=c[0]|c[1]<<8,x=c[2]&63,s=c[3],n=S&255|c[4]<<8,m=c[5],a=c[6]+1,F,r=0,h=0;r=0,(x&2)===0&&(r=1);function s0(){r&&(x&4)!==0&&(F!==0||(x&8)===0)&&e++,(x&2)!==0&&(r^=1)}function n0(){F!==0&&((x&32)!==0?n++:n--)}for(;a>=0;){let L;for(F=m;F>=0;){let z,_;z=(x&1)===0?e:n,F===0&&(x&8)!==0?_=0:_=i.read(e),(x&1)===0?s0():n0(),z=(x&1)!==0?e:n,V(z,_),(x&1)===0?n0():s0(),h+=4,F--}L=(n&255)+s&256,n=n&65280|n+s&255,(x&16)===0?n+=L:n-=L^256,a--}}this.drawScanline=e=>{e==M&&b&8&&(d.retryInterrupts=!(b&4),this.probe&&this.probe.logInterrupt(p),d.interrupt(p)),e0?(T[e]=0,r0(e),J--):T[e]&&(T[e]=0,r0(e))},this.init=(e,x,s,n,m)=>{d=x,t=s,j=n,W=m,f?i={read:N([[16384,32767,16383,function(F){return t[F]}],[53248,57343,4095,function(F){return t[F+16384]}],[0,16383,16383,function(F){return g?g[F]:0}],[32768,49151,16383,function(F){return g?g[F+16384]:0}]]),write:N([[16384,32767,16383,V],[0,16383,16383,i0],[53248,57343,4095,function(F,r){V(F+16384,r)}]])}:(U=q(new d0().decode(a0(atob(Q0))),8192),i={read:N([[0,8191,8191,function(F){return U[F]}],[8192,16383,8191,function(F){return g?g[F]:0}],[16384,20479,4095,function(F){return v++,t[F]}]]),write:N([[16384,20479,4095,V],[0,16383,4095,i0]])}),D={read:function(F){F&=31;var r;switch(F){case 8:r=Q,Q=0;break;default:r=j[F];break}return r},write:function(F,r){if(F!=42331){if(F&=255,F>120&&F<128){c[F&7]=r,F==114&&(S=0),F==116&&(S=S+c[3]&255),F==126&&b0();return}switch(F&=31,r&=255,F){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:Z(F,r);break;case 9:Y=r,Y0(),O();break;case 10:w=f?r:r>>1,O();break;case 11:var h=d.saveState();Z((h.BC>>8)-1,i.read(h.HL));break;case 12:B=r,u=0,l=0,X=!1;break;case 13:p=r;break;case 14:b=r;break;case 15:M=f?r:r>>1;break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:W.setACRegister(F,r);break;case 24:var h=d.saveState();W.setACRegister((h.BC>>8)-1,i.read(h.HL));break;case 25:E=r;break;case 26:case 27:case 28:case 29:case 30:break;default:break}}}},e.connectCPUMemoryBus(i),e.connectCPUIOBus(D),this.membus=i,this.iobus=D;for(var a=0;a<8;a++)Z(a,a)},this.resetWaitStates=function(e){var x=e{d.loadState(e.c),t.set(e.ram),H.set(e.palette),y.set(e.palinds),B=e.magicop,E=e.xpand,X=e.xplower,u=e.shift2,Y=e.horcb,b=e.inmod,M=e.inlin,p=e.infbk,w=e.verbl,l=e.rotcount,C.set(e.rotdata),Q=e.intst,j.set(e.inputs),c.set(e.patboard),S=e.patdest,O()},this.saveState=()=>({c:d.saveState(),ram:t.slice(0),inputs:j.slice(0),palette:H.slice(0),palinds:y.slice(0),magicop:B,xpand:E,xplower:X,shift2:u,horcb:Y,inmod:b,inlin:M,infbk:p,verbl:w,rotcount:l,rotdata:C.slice(0),intst:Q,patboard:c.slice(0),patdest:S}),this.reset=()=>{B=E=b=M=p=u=Y=0,w=K,X=!1},this.toLongString=e=>{var x="";x+=` +import{J as m0,c as B0,d as g0,e as X0,k as C0,r as l0}from"./chunk-AA227H53.js";import{$ as N,J as k,V as A,W as c0,Y as o0,_ as q,g as o,l as d0,m as a0,t as f0}from"./chunk-BNFOPPUS.js";import"./chunk-KT7KMEQC.js";var p0=o0([[A.UP,16,1],[A.DOWN,16,2],[A.LEFT,16,4],[A.RIGHT,16,8],[A.A,16,16],[A.P2_UP,17,1],[A.P2_DOWN,17,2],[A.P2_LEFT,17,4],[A.P2_RIGHT,17,8],[A.P2_A,17,16],[A.VK_P,20,1],[A.VK_SLASH,20,2],[A.VK_X,20,4],[A.VK_MINUS,20,8],[A.VK_COMMA,20,16],[A.VK_EQUALS,20,32],[A.VK_O,21,1],[A.VK_L,21,2],[A.VK_9,21,4],[A.VK_6,21,8],[A.VK_3,21,16],[A.VK_PERIOD,21,32],[A.VK_I,22,1],[A.VK_K,22,2],[A.VK_8,22,4],[A.VK_5,22,8],[A.VK_2,22,16],[A.VK_0,22,32],[A.VK_U,23,1],[A.VK_J,23,2],[A.VK_7,23,4],[A.VK_4,23,8],[A.VK_1,23,16],[A.VK_BACK_SLASH,23,32]]),h0=2,w0=function(f){var d,t,i,D,g,U,F0,W;let R=f?320:160,K=f?204:102,A0=R>>2,E0=f?16383:4095,N0=256,I0=4293848814,P0=4278190080;var j=new Uint8Array(32),B=0,E=0,X=!1,u=0,Y=0,b=0,M=0,p=0,w=K,H=new Uint32Array(8),y=new Uint8Array(8),J=0,T=new Uint8Array(f?262:131),C=new Uint8Array(4),l=0,Q=0,v=0,c=new Uint8Array(8),S=0;function V(e,x){t[e]=x,v++,T[(e&E0)/A0|0]=1}function u0(e,x){for(var s=e*4+3,n=0;n<4;n++){var m=e%A0>=(Y&63)?0:4;F0[s--]=H[m+(x&3)],x>>=2}}function r0(e){for(var x=e*R/4,s=0;s>=4);for(var n=0;n<4;n++){var m=x&1?E>>2&3:E&3;s|=m<>=1}x=s,X=!X}if(B&4){if(l&4){var a=2*(~l&3);x=(C[3]>>a&3)<<6|(C[2]>>a&3)<<4|(C[1]>>a&3)<<2|(C[0]>>a&3)<<0}else C[l&3]=x;l++}else{var a=(B&3)<<1,s=x>>a|u;u=x<<8-a&255,x=s}if(B&64&&(x=(x&3)<<6|(x&12)<<2|(x&48)>>2|(x&192)>>6),B&48){var F=t[e],r=0;F&192&&x&192&&(r|=1),F&48&&x&48&&(r|=2),F&12&&x&12&&(r|=4),F&3&&x&3&&(r|=8),B&16&&(x|=F),B&32&&(x^=F),Q=Q&240|r|r<<4}V(e,x)}function Z(e,x){y[e&7]=x&255,H[e&7]=e0[x&255],O()}function Y0(){var e=Y>>6}function O(){J=K}function b0(){let e=c[0]|c[1]<<8,x=c[2]&63,s=c[3],n=S&255|c[4]<<8,m=c[5],a=c[6]+1,F,r=0,h=0;r=0,(x&2)===0&&(r=1);function s0(){r&&(x&4)!==0&&(F!==0||(x&8)===0)&&e++,(x&2)!==0&&(r^=1)}function n0(){F!==0&&((x&32)!==0?n++:n--)}for(;a>=0;){let L;for(F=m;F>=0;){let z,_;z=(x&1)===0?e:n,F===0&&(x&8)!==0?_=0:_=i.read(e),(x&1)===0?s0():n0(),z=(x&1)!==0?e:n,V(z,_),(x&1)===0?n0():s0(),h+=4,F--}L=(n&255)+s&256,n=n&65280|n+s&255,(x&16)===0?n+=L:n-=L^256,a--}}this.drawScanline=e=>{e==M&&b&8&&(d.retryInterrupts=!(b&4),this.probe&&this.probe.logInterrupt(p),d.interrupt(p)),e0?(T[e]=0,r0(e),J--):T[e]&&(T[e]=0,r0(e))},this.init=(e,x,s,n,m)=>{d=x,t=s,j=n,W=m,f?i={read:N([[16384,32767,16383,function(F){return t[F]}],[53248,57343,4095,function(F){return t[F+16384]}],[0,16383,16383,function(F){return g?g[F]:0}],[32768,49151,16383,function(F){return g?g[F+16384]:0}]]),write:N([[16384,32767,16383,V],[0,16383,16383,i0],[53248,57343,4095,function(F,r){V(F+16384,r)}]])}:(U=q(new d0().decode(a0(atob(Q0))),8192),i={read:N([[0,8191,8191,function(F){return U[F]}],[8192,16383,8191,function(F){return g?g[F]:0}],[16384,20479,4095,function(F){return v++,t[F]}]]),write:N([[16384,20479,4095,V],[0,16383,4095,i0]])}),D={read:function(F){F&=31;var r;switch(F){case 8:r=Q,Q=0;break;default:r=j[F];break}return r},write:function(F,r){if(F!=42331){if(F&=255,F>120&&F<128){c[F&7]=r,F==114&&(S=0),F==116&&(S=S+c[3]&255),F==126&&b0();return}switch(F&=31,r&=255,F){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:Z(F,r);break;case 9:Y=r,Y0(),O();break;case 10:w=f?r:r>>1,O();break;case 11:var h=d.saveState();Z((h.BC>>8)-1,i.read(h.HL));break;case 12:B=r,u=0,l=0,X=!1;break;case 13:p=r;break;case 14:b=r;break;case 15:M=f?r:r>>1;break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:W.setACRegister(F,r);break;case 24:var h=d.saveState();W.setACRegister((h.BC>>8)-1,i.read(h.HL));break;case 25:E=r;break;case 26:case 27:case 28:case 29:case 30:break;default:break}}}},e.connectCPUMemoryBus(i),e.connectCPUIOBus(D),this.membus=i,this.iobus=D;for(var a=0;a<8;a++)Z(a,a)},this.resetWaitStates=function(e){var x=e{d.loadState(e.c),t.set(e.ram),H.set(e.palette),y.set(e.palinds),B=e.magicop,E=e.xpand,X=e.xplower,u=e.shift2,Y=e.horcb,b=e.inmod,M=e.inlin,p=e.infbk,w=e.verbl,l=e.rotcount,C.set(e.rotdata),Q=e.intst,j.set(e.inputs),c.set(e.patboard),S=e.patdest,O()},this.saveState=()=>({c:d.saveState(),ram:t.slice(0),inputs:j.slice(0),palette:H.slice(0),palinds:y.slice(0),magicop:B,xpand:E,xplower:X,shift2:u,horcb:Y,inmod:b,inlin:M,infbk:p,verbl:w,rotcount:l,rotdata:C.slice(0),intst:Q,patboard:c.slice(0),patdest:S}),this.reset=()=>{B=E=b=M=p=u=Y=0,w=K,X=!1},this.toLongString=e=>{var x="";x+=` INLIN: `+e.inlin,x+=` VERBL: `+e.verbl,x+=` MAGICOP: $`+o(e.magicop),x+=` @@ -11,4 +11,4 @@ XPLOWER: `+e.xplower,x+=` INTST: $`+o(e.intst),x+=` Palette: `;for(var s=0;s<8;s++)x+=o(y[s]);return x+=` `,x},this.connectVideo=function(e){F0=e},this.loadROM=function(e){g=e},this.loadBIOS=function(e){U=e},this.getVisiblePixelWords=function(){return w*R}},P=class extends l0{constructor(t){super();this.cpuFrequency=1789e3;this.numTotalScanlines=262;this.sampleRate=60*262*h0;this.arcade=t,this.cpu=new B0,this.psg=new $(new g0),this.audioadapter=new C0(this.psg.psg,h0,this.sampleRate),this.handler=c0(this.inputs,p0),this.defaultROMSize=t?45056:8192,this.ram=new Uint8Array(t?20480:4096),this.numVisibleScanlines=t?204:102,this.canvasWidth=t?320:160,this.cpuCyclesPerLine=this.cpuFrequency/(60*this.numVisibleScanlines*1.286)|0,this.m=new w0(t),this.m.init(this,this.cpu,this.ram,this.inputs,this.psg),t&&(this.inputs[16]=255,this.inputs[17]=255,this.inputs[18]=0,this.inputs[19]=8)}read(t){return this.m.membus.read(t)}write(t,i){this.m.membus.write(t,i)}connectVideo(t){super.connectVideo(t),this.frontbuffer=t,this.backbuffer=new Uint32Array(t.length),this.m.connectVideo(this.backbuffer)}preFrame(){this.m.resetWaitStates(0)}postFrame(){var t=this.m.getVisiblePixelWords();this.frontbuffer.set(this.backbuffer.slice(0,t),0),this.frontbuffer.fill(0,t)}setPaddleInput(t,i){switch(t){case 0:this.inputs[28]=i&255;break;case 1:this.inputs[29]=i&255;break}}startScanline(){this.audio&&this.audioadapter.generate(this.audio)}drawScanline(){var t=this.scanline;this.m.drawScanline(t)}advanceCPU(){var t=super.advanceCPU(),i=this.m.resetWaitStates(this.scanline);return i&&(t+=i,this.probe.logClocks(i)),t}loadROM(t){super.loadROM(t),this.m.loadROM(this.rom),this.reset()}loadBIOS(t){this.m.loadBIOS(q(t,8192)),this.reset()}reset(){super.reset(),this.m.reset()}loadState(t){this.m.loadState(t)}saveState(){return this.m.saveState()}getDebugCategories(){return["CPU","Stack","Astro"]}getDebugInfo(t,i){switch(t){case"Astro":return this.m.toLongString(i)}}getRasterCanvasPosition(){return{x:this.getRasterX(),y:this.getRasterY()}}getVideoParams(){return this.arcade?{width:320,height:204,rotate:180}:{width:160,height:102}}},$=class extends X0{setACRegister(d,t){switch(d&=7,t&=255,d){case 0:this.psg.setClock(1789e3*16/(t+1)),this.psg.writeRegisterAY(7,248);break;case 1:case 2:case 3:var i=(d-1)*2,D=t*2+1;this.psg.writeRegisterAY(i,D&255),this.psg.writeRegisterAY(i+1,D>>8&255);break;case 5:this.psg.writeRegisterAY(10,t&15);break;case 6:this.psg.writeRegisterAY(8,t&15),this.psg.writeRegisterAY(9,t>>4&15);break}}},e0=[0,2368548,4737096,7171437,9539985,11974326,14342874,16777215,2425019,4784352,7213567,9582079,12016383,14384895,16753663,16762879,4784304,7143637,9568761,11937279,14306047,16740095,16749311,16758783,6946975,9306307,11731175,14096639,16465151,16736767,16745983,16755199,8847495,11206827,13631696,15994612,16724735,16733951,16743423,16752639,10420330,12779662,15138995,16713687,16723195,16732415,16741631,16751103,11534409,13959277,16318610,16713142,16722394,16731647,16741119,16750335,12255269,14680137,16711790,16713362,16722615,16732123,16741375,16750847,12517376,14876708,16711752,16714605,16724113,16733366,16742874,16752127,12255232,14680064,16711715,16716871,16726380,16735632,16745141,16754393,11534336,13959168,16318464,16720164,16729416,16738924,16748177,16757685,10420224,12779520,15141888,16723971,16733479,16742731,16752240,16761492,8847360,11206656,13639168,16007680,16738058,16747310,16756563,16766071,6946816,9309440,11743488,14112256,16480768,16752151,16761659,16770911,4784128,7151872,9585920,11954688,14323200,16757509,16766761,16776270,2429184,4797696,7232e3,9600512,12034816,14403328,16771870,16777027,9472,2377984,4746496,7180800,9549312,11983616,14352155,16777023,14080,23296,2326528,4695040,7129344,9497856,11927326,14286659,18176,27648,36864,2405376,4774144,7142661,9568041,11927374,21760,30976,40192,246272,2614784,4980503,7405371,9764703,24320,33536,43008,52224,716810,3079982,5504851,7864183,25856,35328,44544,53763,63271,1572683,3932016,6291348,26624,35840,45312,54564,63816,393068,2752401,5177269,26112,35584,44835,54343,63596,65424,2031541,4456409,24832,34084,43592,52845,62353,65462,1834970,4194302,22565,31817,41326,50578,60087,65499,2031615,4456447,19273,28781,38034,47542,56794,393215,2752511,5177343,15466,24718,34227,43479,52987,1569535,3932159,6291455,10887,20395,29648,38900,703743,3072255,5505023,7864319,6047,15299,24807,230655,2599167,4967935,7401983,9764863,688,10197,19449,2388223,4756735,7125503,9559551,11927551,187,5088,2308095,4676607,7110911,9479423,11913727,14282239];for(I=0;I<256;I++)D0=e0[I],e0[I]=f0(D0)|4278190080;var D0,I;var Q0="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";var S0=[{id:"01-helloworlds.asm",name:"Hello World (ASM)"},{id:"02-telephone.asm",name:"Telephone (ASM)"},{id:"03-horcbpal.asm",name:"Paddle Demo (ASM)"},{id:"hello.c",name:"Hello Graphics"},{id:"lines.c",name:"Lines"},{id:"sprites.c",name:"Sprites"},{id:"vsync.c",name:"Sprites w/ VSYNC"},{id:"fastsprites.c",name:"Fast Sprites"},{id:"music.c",name:"Music"},{id:"rotate.c",name:"Rotate Op"},{id:"rainbow.c",name:"Rainbow"},{id:"cosmic.c",name:"Cosmic Impalas Game"},{id:"racing.c",name:"Pseudo 3-D Racing Game"}],M0=[{id:"bios.c",name:"BIOS"}],V0=[{id:"hello.c",name:"Hello Graphics"}],G=class extends m0{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"BIOS",start:0,size:8192,type:"rom"},{name:"Screen RAM",start:16384,size:4096,type:"ram"},{name:"BIOS Variables",start:20430,size:50,type:"ram"}]}}}newMachine(){return new P(!1)}getPresets(){return S0}readAddress(t){return this.machine.read(t)}showHelp(){return"https://8bitworkshop.com/docs/platforms/astrocade/"}},x0=class extends G{getPresets(){return M0}loadROM(d,t){this.machine.loadBIOS(t)}},t0=class extends G{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"ROM",start:0,size:16384,type:"rom"},{name:"Magic RAM",start:0,size:16384,type:"ram"},{name:"Screen RAM",start:16384,size:16384,type:"ram"},{name:"ROM",start:32768,size:16384,type:"rom"}]}}}newMachine(){return new P(!0)}getPresets(){return V0}};k.astrocade=G;k["astrocade-bios"]=x0;k["astrocade-arcade"]=t0; -//# sourceMappingURL=astrocade-WC7XEVHV.js.map +//# sourceMappingURL=astrocade-LY2ZYNRY.js.map diff --git a/gen/astrocade-WC7XEVHV.js.map b/gen/astrocade-LY2ZYNRY.js.map similarity index 100% rename from gen/astrocade-WC7XEVHV.js.map rename to gen/astrocade-LY2ZYNRY.js.map diff --git a/gen/atari7800-UO4L6AWK.js b/gen/atari7800-7IFMCZ4U.js similarity index 97% rename from gen/atari7800-UO4L6AWK.js rename to gen/atari7800-7IFMCZ4U.js index a9550e6b..63b16c69 100644 --- a/gen/atari7800-UO4L6AWK.js +++ b/gen/atari7800-7IFMCZ4U.js @@ -1,7 +1,7 @@ -import{a as j}from"./chunk-XFYJARCV.js";import{I as $,h as H,k as z,m as Y,q as K,x as V}from"./chunk-AK7O6YZI.js";import{$ as _,J as O,U as R,V as o,W as E,Y as W,_ as N,g as S}from"./chunk-5H5GMVON.js";import"./chunk-KT7KMEQC.js";var b=0,U=2,v=8,Z=W([[o.A,v+0,128],[o.B,v+1,128],[o.GP_A,v+0,128],[o.GP_B,v+1,128],[o.SELECT,U,-2],[o.START,U,-1],[o.UP,b,-16],[o.DOWN,b,-32],[o.LEFT,b,-64],[o.RIGHT,b,-128],[o.P2_A,v+2,128],[o.P2_B,v+3,128],[o.P2_UP,b,-1],[o.P2_DOWN,b,-2],[o.P2_LEFT,b,-4],[o.P2_RIGHT,b,-8]]);var M=263,G=242,C=451,tt=28,et=16,rt=24,q=2,X=M*60*q,I=class{constructor(){this.regs=new Uint8Array(32)}reset(){this.regs.fill(0)}read(r){return this.regs[r]|0}write(r,t){this.regs[r]=t}saveState(){return{regs:this.regs.slice(0)}}loadState(r){for(let t=0;t<32;t++)this.write(t,r.regs[t])}static stateToLongString(r){let t="";return t+=R(r.regs,0,32),t}},L=class{constructor(){this.cycles=0;this.regs=new Uint8Array(32);this.offset=-1;this.dll=0;this.dlstart=0;this.dli=!1;this.h16=!1;this.h8=!1;this.writemode=0;this.indirect=!1;this.pixels=new Uint8Array(320);this.WSYNC=0}reset(){this.regs.fill(0)}read(r){return this.regs[r]|0}write(r,t){this.regs[r]=t,r==4&&this.WSYNC++}saveState(){return{regs:this.regs.slice(0),offset:this.offset,dll:this.dll,dlstart:this.dlstart,dli:this.dli,h16:this.h16,h8:this.h8,indirect:this.indirect,writemode:this.writemode}}loadState(r){for(let t=0;t<32;t++)this.write(t,r.regs[t]|0);this.offset=r.offset|0,this.dll=r.dll|0,this.dlstart=r.dlstart|0,this.dli=!!r.dli,this.h16=!!r.h16,this.h8=!!r.h8,this.indirect=!!r.indirect,this.writemode=r.writemode|0}isDMAEnabled(){return(this.regs[28]&96)==64}getDLLStart(){return(this.regs[12]<<8)+this.regs[16]}getCharBaseAddress(){return(this.regs[20]<<8)+this.offset}setVBLANK(r){r?(this.regs[8]|=128,this.offset=-1,this.dll=this.getDLLStart(),this.dli=this.bus&&(this.bus.read(this.dll)&128)!=0):this.regs[8]&=-129}readDLLEntry(r){if(this.dll>=16384)return;let t=r.read(this.dll);this.offset=t&15,this.h16=(t&64)!=0,this.h8=(t&32)!=0,this.dlstart=(r.read(this.dll+1)<<8)+r.read(this.dll+2),this.dll=this.dll+3&65535,this.dli=(r.read(this.dll)&128)!=0}isHoley(r){return this.indirect?!1:!!(r&32768&&(this.h16&&r&4096||this.h8&&r&2048))}readDMA(r){return this.isHoley(r)?0:(this.cycles+=3,this.bus.read(r))}doDMA(r){this.bus=r,this.cycles=0;let t=this.pixels;if(t.fill(this.regs[0]),this.isDMAEnabled()){this.cycles+=this.offset==0?rt:et,this.offset<0&&this.readDLLEntry(r);let u=this.dlstart&65280,c=this.dlstart&255;do{let x=r.read(u+(c+0&511)),d=r.read(u+(c+1&511));if(d==0||u>=16384)break;let l=r.read(u+(c+2&511)),p=r.read(u+(c+3&511)),g=!1;if((d&31)==0){var e=p>>5,n=32-(p&31),i=r.read(u+(c+4&511));g=(d&32)!=0,c+=5,this.cycles+=10,this.writemode=d&128}else{var i=p,e=d>>5,n=32-(d&31);c+=4,this.cycles+=8}this.indirect=g;let y=x+((l+(g?0:this.offset)&255)<<8);i*=2;let m=this.regs[28],k=(m&3)+(this.writemode?4:0),A=(m&4)!=0,w=g&&(m&16)!=0;w&&(n*=2);for(var s=0;s>1):y+s);if(g){let P=(this.regs[20]+this.offset<<8)+h;w&&s&1&&(P++,this.cycles-=3),h=this.readDMA(P)}switch(k){case 0:for(let a=0;a<4;a++){let f=h>>6&3;(f||A)&&(t[i]=t[i+1]=this.regs[(e<<2)+f]),h<<=2,i=i+2&511}break;case 3:for(let a=0;a<8;a++){let f=(h&128)>>6;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 4:for(let a=0;a<2;a++){let f=(h>>6&3)+(h&12);(f&3||A)&&(t[i]=t[i+1]=t[i+2]=t[i+3]=this.regs[((e&4)<<2)+f]),h<<=2,i=i+2&511}break;case 6:for(let a=0;a<4;a++){let f=(h&128)>>6|(h&8)>>3;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 2:for(let a=0;a<8;a++){let f=(h&128)>>6;f+=a&1?e&1:e>>1&1,(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 7:let P=h;for(let a=0;a<4;a++){a==2&&(P<<=2);let f=(h&128)>>6,Q=e&4|P>>2&3;(f||A)&&(t[i]=this.regs[(Q<<2)+f]),h<<=1,i=i+1&511}break}}}while(this.cycles=16384)return;let t=r.read(this.dll);this.offset=t&15,this.h16=(t&64)!=0,this.h8=(t&32)!=0,this.dlstart=(r.read(this.dll+1)<<8)+r.read(this.dll+2),this.dll=this.dll+3&65535,this.dli=(r.read(this.dll)&128)!=0}isHoley(r){return this.indirect?!1:!!(r&32768&&(this.h16&&r&4096||this.h8&&r&2048))}readDMA(r){return this.isHoley(r)?0:(this.cycles+=3,this.bus.read(r))}doDMA(r){this.bus=r,this.cycles=0;let t=this.pixels;if(t.fill(this.regs[0]),this.isDMAEnabled()){this.cycles+=this.offset==0?rt:et,this.offset<0&&this.readDLLEntry(r);let u=this.dlstart&65280,c=this.dlstart&255;do{let x=r.read(u+(c+0&511)),d=r.read(u+(c+1&511));if(d==0||u>=16384)break;let l=r.read(u+(c+2&511)),p=r.read(u+(c+3&511)),g=!1;if((d&31)==0){var e=p>>5,n=32-(p&31),i=r.read(u+(c+4&511));g=(d&32)!=0,c+=5,this.cycles+=10,this.writemode=d&128}else{var i=p,e=d>>5,n=32-(d&31);c+=4,this.cycles+=8}this.indirect=g;let y=x+((l+(g?0:this.offset)&255)<<8);i*=2;let m=this.regs[28],k=(m&3)+(this.writemode?4:0),A=(m&4)!=0,w=g&&(m&16)!=0;w&&(n*=2);for(var s=0;s>1):y+s);if(g){let P=(this.regs[20]+this.offset<<8)+h;w&&s&1&&(P++,this.cycles-=3),h=this.readDMA(P)}switch(k){case 0:for(let a=0;a<4;a++){let f=h>>6&3;(f||A)&&(t[i]=t[i+1]=this.regs[(e<<2)+f]),h<<=2,i=i+2&511}break;case 3:for(let a=0;a<8;a++){let f=(h&128)>>6;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 4:for(let a=0;a<2;a++){let f=(h>>6&3)+(h&12);(f&3||A)&&(t[i]=t[i+1]=t[i+2]=t[i+3]=this.regs[((e&4)<<2)+f]),h<<=2,i=i+2&511}break;case 6:for(let a=0;a<4;a++){let f=(h&128)>>6|(h&8)>>3;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 2:for(let a=0;a<8;a++){let f=(h&128)>>6;f+=a&1?e&1:e>>1&1,(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 7:let P=h;for(let a=0;a<4;a++){a==2&&(P<<=2);let f=(h&128)>>6,Q=e&4|P>>2&3;(f||A)&&(t[i]=this.regs[(Q<<2)+f]),h<<=1,i=i+1&511}break}}}while(this.cycles(this.xtracyc++,this.readInput(t))],[0,31,31,t=>(this.xtracyc++,this.tia.read(t))],[32,63,31,t=>this.maria.read(t)],[64,255,255,t=>this.ram[t+2048]],[256,319,255,t=>this.read(t)],[320,511,511,t=>this.ram[t+2048]],[640,767,127,t=>(this.xtracyc++,this.readPIA(t))],[6144,10239,65535,t=>this.ram[t-6144]],[10240,16383,2047,t=>this.read(t|8192)],[16384,65535,65535,t=>this.rom?this.rom[t-16384]:0],[0,65535,65535,t=>this.probe&&this.probe.logIllegal(t)]]),this.write=_([[21,26,31,(t,e)=>{this.xtracyc++,this.pokey1.setTIARegister(t,e)}],[0,31,31,(t,e)=>{this.xtracyc++,this.tia.write(t,e)}],[32,63,31,(t,e)=>{this.maria.write(t,e)}],[64,255,255,(t,e)=>{this.ram[t+2048]=e}],[256,319,255,(t,e)=>{this.write(t,e)}],[320,511,511,(t,e)=>{this.ram[t+2048]=e}],[640,767,127,(t,e)=>{this.xtracyc++,this.writePIA(t,e)}],[6144,10239,65535,(t,e)=>{this.ram[t-6144]=e}],[10240,16383,2047,(t,e)=>{this.write(t|8192,e)}],[49151,49151,65535,(t,e)=>{}],[0,65535,65535,(t,e)=>{this.probe&&this.probe.logIllegal(t)}]]),this.connectCPUMemoryBus(this),this.dmaBus=this.probeDMABus(this),this.handler=E(this.inputs,Z),this.pokey1=new H,this.audioadapter=new z(this.pokey1,q,X)}readConst(t){let e=this.probe;this.probe=null;let n=this.read(t);return this.probe=e,n}readInput(t){switch(t){case 12:return~this.inputs[8]&128;case 13:return~this.inputs[9]&128;default:return this.inputs[t]|0}}readPIA(t){switch(t){case 0:case 2:return this.inputs[t];case 1:case 3:return this.regs6532[t];case 4:return this.getPIATimerValue();default:return 0}}writePIA(t,e){switch(t){case 0:case 1:case 2:case 3:this.regs6532[t]=e;return;case 20:this.setPIATimer(e,0);return;case 21:this.setPIATimer(e,3);return;case 22:this.setPIATimer(e,6);return;case 23:this.setPIATimer(e,10);return;case 24:this.setPIATimer(e,6);return}}setPIATimer(t,e){this.piatimer=t+1<0?t>>this.timerinterval:t&255}advanceCPU(){var t=super.advanceCPU();return this.tickPIATimer(t),this.xtracyc&&(t+=this.xtracyc,this.tickClocks(this.xtracyc),this.xtracyc=0),t}tickClocks(t){this.probe.logClocks(t),this.tickPIATimer(t)}tickPIATimer(t){this.piatimer=Math.max(-256,this.piatimer-t)}advanceFrame(t){var e=this.pixels,n=0,i,s=0,u=0,c=0;this.lastFrameCycles=-1,this.probe.logNewFrame();for(var x=0;x>2),s+=p,e){let m=(this.maria.regs[28]&128)!=0?15:255;for(var l=0;l<320;l++)e[n++]=J[this.maria.pixels[l]&m]}}for((d||x==M-1)&&this.maria.doInterrupt()&&(this.probe.logInterrupt(0),this.cpu.NMI());s>2),s=C;break}if(t&&t()){t=null,x=999,this.lastFrameCycles=s;break}s+=this.advanceCPU()<<2,c++}this.audio&&this.audioadapter.generate(this.audio),s-=C,u+=s,this.probe.logNewScanline()}return c}getRasterX(){return(this.lastFrameCycles+C)%C}getRasterY(){return this.scanline}getRasterCanvasPosition(){return{x:this.getRasterX(),y:this.getRasterY()}}loadROM(t){t.length==49280&&(t=t.slice(128)),this.rom=N(t,this.defaultROMSize,!0)}reset(){super.reset(),this.tia.reset(),this.maria.reset(),this.inputs.fill(0),this.inputs[b]=255,this.inputs[U]=11,this.setPIATimer(0,0)}readAddress(t){return this.read(t)|0}loadState(t){this.cpu.loadState(t.c),this.ram.set(t.ram),this.tia.loadState(t.tia),this.maria.loadState(t.maria),this.regs6532.set(t.regs6532),this.piatimer=t.pia.timer,this.timerinterval=t.pia.interval,this.loadControlsState(t)}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),tia:this.tia.saveState(),maria:this.maria.saveState(),regs6532:this.regs6532.slice(0),inputs:this.inputs.slice(0),pia:{timer:this.piatimer,interval:this.timerinterval}}}loadControlsState(t){this.inputs.set(t.inputs)}saveControlsState(){return{inputs:this.inputs.slice(0)}}getDebugCategories(){return["CPU","Stack","TIA","MARIA"]}getDebugInfo(t,e){switch(t){case"TIA":return I.stateToLongString(e.tia);case"MARIA":return L.stateToLongString(e.maria)+` Scanline: `+this.scanline}}getDebugDisplayLists(){let t={},e=this.maria.getDLLStart(),n=0;for(;n<240;){let i=this.readConst(e),s=i&15,u=(i&64)!=0,c=(i&32)!=0,x=(this.readConst(e+1)<<8)+this.readConst(e+2);e=e+3&65535;let d=(this.readConst(e)&128)!=0,l="DL $"+S(x,4)+" "+n+"-"+(n+s);u&&(l+=" H16"),c&&(l+=" H8"),d&&(l+=" DLI"),t[l]={$$:this._readDebugDisplayList(x)},n+=s+1}return t}_readDebugDisplayList(t){return()=>this.readDebugDisplayList(t)}readDebugDisplayList(t){let e=[],n=t&65280,i=t&255;do{let x=this.maria.regs[28],d=this.readConst(n+(i+0&511)),l=this.readConst(n+(i+1&511));if(l==0)break;let p=this.readConst(n+(i+2&511)),g=this.readConst(n+(i+3&511)),y=!1,m="",k,A=(x&3)+(l&128?4:0);if((l&31)==0){var s=g>>5,u=32-(g&31),c=this.readConst(n+(i+4&511));y=(l&32)!=0,k=l&128,i+=5}else{var c=g,s=l>>5,u=32-(l&31);i+=4}m+="X="+c+" W="+u+" P="+s,k&&(m+=" WM=1"),y&&(m+=" CHR=$"+S(this.maria.regs[20]+this.maria.offset&255)+"xx");let w=d+((p+(y?0:this.maria.offset)&255)<<8);m=" $"+S(w,4)+" "+m,m=["160A","?","320D","320A","160B","?","320B","320C"][A]+" "+m,e.push(m)}while(i<512);return e}},J=new Uint32Array(256);for(D=0;D<256;D++)J[D]=j(D);var D;var it=[{id:"sprites.dasm",name:"Sprites (ASM)",category:"Assembler"},{id:"wsync.c",name:"WSYNC",category:"CC65"},{id:"sprites.c",name:"Double Buffering"},{id:"scroll.c",name:"Scrolling"},{id:"test_conio.c78",name:"Conio Test",category:"cc7800"},{id:"example_small_sprites.c78",name:"Small Sprites"},{id:"example_vertical_scrolling.c78",name:"Vertical Scrolling"}],F=class extends ${constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"TIA",start:0,size:32,type:"io"},{name:"MARIA",start:32,size:32,type:"io"},{name:"RAM (6166 Block 0)",start:64,size:192,type:"ram"},{name:"RAM (6166 Block 1)",start:320,size:192,type:"ram"},{name:"PIA",start:640,size:24,type:"io"},{name:"RAM",start:6144,size:4096,type:"ram"},{name:"Cartridge ROM",start:16384,size:49146,type:"rom"},{name:"CPU Vectors",start:65530,size:6,type:"rom"}]}}}newMachine(){return new T}getPresets(){return it}getDefaultExtensions(){return[...super.getDefaultExtensions(),".cc7800"]}readAddress(t){return this.machine.readConst(t)}getROMExtension(){return".a78"}getDebugTree(){let t=super.getDebugTree();return t.display_list=this.machine.getDebugDisplayLists(),t}getToolForFilename(t){return t.endsWith(".cc7800")||t.endsWith(".c78")?"cc7800":V(t)}};O.atari7800=F; -//# sourceMappingURL=atari7800-UO4L6AWK.js.map +//# sourceMappingURL=atari7800-7IFMCZ4U.js.map diff --git a/gen/atari7800-UO4L6AWK.js.map b/gen/atari7800-7IFMCZ4U.js.map similarity index 100% rename from gen/atari7800-UO4L6AWK.js.map rename to gen/atari7800-7IFMCZ4U.js.map diff --git a/gen/atari8-C5UI62GP.js b/gen/atari8-2U4FGGVQ.js similarity index 98% rename from gen/atari8-C5UI62GP.js rename to gen/atari8-2U4FGGVQ.js index c1bd04b4..79e0de97 100644 --- a/gen/atari8-C5UI62GP.js +++ b/gen/atari8-2U4FGGVQ.js @@ -1,7 +1,7 @@ -import{a as nt}from"./chunk-PMMIZ2W7.js";import{b as ht,c as ot,d as Y}from"./chunk-XFYJARCV.js";import{A as rt,I as at,g as $,k as tt,m as et,r as st,x as it}from"./chunk-AK7O6YZI.js";import{$ as T,J as S,U as O,V as i,W as Z,Y as J,a as F,g as m,r as A}from"./chunk-5H5GMVON.js";import"./chunk-KT7KMEQC.js";var Dt=[0,25,17,9],Ot=[0,89,97,105],b=0,Tt=1,B=2,H=3,Mt=4,kt=5,vt=7,Ct=9,C=10,Lt=11,Pt=12,Kt=13,lt=14,Vt=15,L=15;var wt=13,Nt=106,Ut=105,Q=[0,0,8,10,8,16,8,16,8,4,4,2,1,2,1,1],Ft=[0,0,2,2,2,2,4,4,8,4,4,4,4,2,2,2],Yt=[0,0,0,0,0,1,0,1,0,0,2,1,0,0,0,0],ct=[0,0,1,1,2,2,2,2,8,4,4,2,2,2,2,1],M=class{constructor(e,t){this.regs=new Uint8Array(16);this.dma_enabled=!1;this.dliop=0;this.mode=0;this.jmp=!1;this.lms=!1;this.dlarg_lo=0;this.dlarg_hi=0;this.period=0;this.scanaddr=0;this.startaddr=0;this.pfbyte=0;this.ch=0;this.linesleft=0;this.yofs=0;this.isfirstline=!1;this.v=0;this.h=0;this.linebuf=new Uint8Array(48);this.dmaclock=0;this.dmaidx=0;this.output=0;this.dramrefresh=!1;this.in_vscroll=0;this.read=e,this.nmi=t}reset(){this.regs.fill(0),this.regs[lt]=0,this.regs[L]=127,this.regs[Pt]=0,this.regs[Kt]=255,this.setReg(b,0),this.h=this.v=0,this.startaddr=this.scanaddr=0,this.dmaclock=0}saveState(){return A(0,{},this)}loadState(e){A(0,this,e),this.setReg(b,e.regs[b])}static stateToLongString(e){let t="";return t+="H: "+F(e.h,3)+" V: "+F(e.v,3)+` +import{a as nt}from"./chunk-EZINONP5.js";import{b as ht,c as ot,d as Y}from"./chunk-CNVRUIAM.js";import{A as rt,I as at,g as $,k as tt,m as et,r as st,x as it}from"./chunk-AA227H53.js";import{$ as T,J as S,U as O,V as i,W as Z,Y as J,a as F,g as m,r as A}from"./chunk-BNFOPPUS.js";import"./chunk-KT7KMEQC.js";var Dt=[0,25,17,9],Ot=[0,89,97,105],b=0,Tt=1,B=2,H=3,Mt=4,kt=5,vt=7,Ct=9,C=10,Lt=11,Pt=12,Kt=13,lt=14,Vt=15,L=15;var wt=13,Nt=106,Ut=105,Q=[0,0,8,10,8,16,8,16,8,4,4,2,1,2,1,1],Ft=[0,0,2,2,2,2,4,4,8,4,4,4,4,2,2,2],Yt=[0,0,0,0,0,1,0,1,0,0,2,1,0,0,0,0],ct=[0,0,1,1,2,2,2,2,8,4,4,2,2,2,2,1],M=class{constructor(e,t){this.regs=new Uint8Array(16);this.dma_enabled=!1;this.dliop=0;this.mode=0;this.jmp=!1;this.lms=!1;this.dlarg_lo=0;this.dlarg_hi=0;this.period=0;this.scanaddr=0;this.startaddr=0;this.pfbyte=0;this.ch=0;this.linesleft=0;this.yofs=0;this.isfirstline=!1;this.v=0;this.h=0;this.linebuf=new Uint8Array(48);this.dmaclock=0;this.dmaidx=0;this.output=0;this.dramrefresh=!1;this.in_vscroll=0;this.read=e,this.nmi=t}reset(){this.regs.fill(0),this.regs[lt]=0,this.regs[L]=127,this.regs[Pt]=0,this.regs[Kt]=255,this.setReg(b,0),this.h=this.v=0,this.startaddr=this.scanaddr=0,this.dmaclock=0}saveState(){return A(0,{},this)}loadState(e){A(0,this,e),this.setReg(b,e.regs[b])}static stateToLongString(e){let t="";return t+="H: "+F(e.h,3)+" V: "+F(e.v,3)+` `,t+="DLIOp: "+m(e.dliop,2)+" Lines: "+e.yofs+"/"+e.linesleft,t+=" DMA "+(e.dma_enabled?"ON ":"off"),e.dma_enabled&&(t+=" idx "+e.dmaidx+" clk "+m(e.dmaclock)),t+=` `,t+="Addr: "+m(e.scanaddr,4)+` `,t+=O(e.regs,0,16).replace("$00","Regs"),t}setReg(e,t){switch(e){case C:this.regs[C]=255;return;case Vt:this.regs[L]=31;return}this.regs[e]=t}readReg(e){switch(e){case L:return this.regs[e];case Lt:return this.v>>1;default:return 255}}processDLIEntry(){if(this.mode==0)this.linesleft=(this.dliop>>4&7)+1,this.dmaclock=0;else{this.linesleft=Q[this.mode],this.period=Ft[this.mode],this.jmp?(this.regs[B]=this.dlarg_lo,this.regs[H]=this.dlarg_hi,this.mode=this.period=0,this.dliop&64&&(this.linesleft=1,this.dma_enabled=!1),this.dmaclock=0):this.lms&&(this.scanaddr=this.dlarg_lo+(this.dlarg_hi<<8)),this.startaddr=this.scanaddr;let e=this.regs[b]&3,t=this.dliop&16?(this.regs[Mt]&15)>>1:0;this.dliop&16&&e<3&&e++,this.left=Dt[e]+t,this.right=Ot[e]+t;let s=this.regs[kt]&15;this.dliop&32^this.in_vscroll&&(this.in_vscroll?this.linesleft=s+1:(this.linesleft-=s,this.yofs+=s),this.linesleft&=15,this.in_vscroll^=32)}}nextLine(){this.linesleft>0&&(this.linesleft--,this.yofs++,this.isfirstline=!1,this.mode>=8&&this.linesleft&&(this.scanaddr=this.startaddr))}triggerNMI(e){this.regs[L]=e|31,this.regs[lt]&e&&this.nmi()}getDlistAddr(){return this.regs[B]+(this.regs[H]<<8)}nextInsn(){let e=this.getDlistAddr(),t=this.read(e);return e=e+1&1023|e&-1024,this.regs[B]=e&255,this.regs[H]=e>>8,t}nextScreen(){let e=this.read(this.scanaddr);return this.incScanAddr(),e}incScanAddr(){this.scanaddr=this.scanaddr+1&4095|this.scanaddr&-4096}dlDMAEnabled(){return this.regs[b]&32}isVisibleScanline(){return this.v>=8&&this.v<248}isPlayfieldDMAEnabled(){return this.dma_enabled&&!this.linesleft}isPlayerDMAEnabled(){return this.regs[b]&8}isMissileDMAEnabled(){return this.regs[b]&12}isWSYNC(){return this.regs[C]!=0}clockPulse(){let e=this.isWSYNC();if(!this.isVisibleScanline())this.doVBlank();else{switch(this.h){case 0:this.isMissileDMAEnabled()&&(this.doPlayerMissileDMA(3),e=!0);break;case 1:if(this.isPlayfieldDMAEnabled()){let t=this.nextInsn();this.jmp=(t&-65)==1,this.lms=(t&64)!=0&&(t&15)!=0,this.mode=t&15,this.dliop=t,this.yofs=0,this.isfirstline=!0,e=!0}break;case 2:case 3:case 4:case 5:this.isPlayerDMAEnabled()&&(this.doPlayerMissileDMA(this.h+2),e=!0);break;case 6:case 7:this.isPlayfieldDMAEnabled()&&this.isfirstline&&(this.jmp||this.lms)&&(this.h==6&&(this.dlarg_lo=this.nextInsn()),this.h==7&&(this.dlarg_hi=this.nextInsn()),e=!0);break;case 8:this.isfirstline&&this.processDLIEntry(),this.dliop&128&&this.linesleft==1&&this.triggerNMI(128);break;case 9:break;case 111:this.dma_enabled&&this.nextLine(),++this.v;break}if(this.output=0,this.mode>=2&&this.period){let t=this.h<=Ut;this.dmaclock=this.dmaclock<<1&511,this.dmaclock&1<=8&&this.incScanAddr(),e=t),this.output=this.h>=this.left+3&&this.h<=this.right+2?4:0}}return(this.hNt)&&(this.output=2),this.incHorizCounter(),!e&&this.dramrefresh&&(this.read(0),this.dramrefresh=!1,e=!0),e}incHorizCounter(){switch(this.h){case 25:case 29:case 33:case 37:case 41:case 45:case 49:case 53:case 57:this.dramrefresh=!0;break;case 102:this.regs[C]=0;break;case 113:this.h=0;return}++this.h}doVBlank(){this.linesleft=this.mode=this.period=0,this.h==111&&this.v++,this.v==248&&this.h==0&&this.triggerNMI(64),this.v==262&&this.h==112&&(this.v=0),this.v==7&&this.h==113&&(this.dma_enabled=this.dlDMAEnabled()!=0),this.output=2,this.dmaclock=0}doPlayerMissileDMA(e){let t=this.regs[b]&16,s=this.regs[vt]<<8;t?(s&=63488,s|=e<<8,s|=this.v&255):(s&=64512,s|=e<<7,s|=this.v>>1),this.read(s)}readBitmapData(){let e=this.mode;if(e<8){let t=this.ch,s=this.yofs>>Yt[this.mode],r=s&7,n=this.regs[Ct];(e&14)==6?(t&=63,n&=254):(t&=127,n&=252);let h=(t<<3)+(n<<8);if((e&14)==2){let f=this.regs[Tt],l=e==3&&(t&96)==96;f&4?this.pfbyte=this.read(h+(r^7)):this.pfbyte=this.read(h+r),l&&s<2&&(this.pfbyte=0),!l&&s>7&&(this.pfbyte=0),this.ch&128&&(f&1&&(this.pfbyte=0),f&2&&(this.pfbyte^=255))}else this.pfbyte=this.read(h+r)}else this.pfbyte=this.nextScreen()}shiftout(){if(this.output==4)switch(this.mode){case 2:case 3:case 15:{let e=this.pfbyte>>7&1;return this.pfbyte<<=1,e?8:6}case 6:case 7:{let e=this.pfbyte>>7&1;return this.pfbyte<<=1,e?(this.ch>>6)+4:0}case 9:case 11:case 12:{let e=this.pfbyte>>7&1;return this.pfbyte<<=1,e?4:0}case 4:case 5:{let e=this.pfbyte>>6&3;return this.pfbyte<<=2,this.ch&128?[0,4,5,7][e]:[0,4,5,6][e]}case 8:case 10:case 13:case 14:{let e=this.pfbyte>>6&3;return this.pfbyte<<=2,[0,4,5,6][e]}}return this.output}};var o=0;var Bt=2;var ft=4;var dt=6;var g=8,Ht=9,Qt=10,zt=11,Xt=13,z=14,E=15;var qt=8,Wt=9,Gt=10,jt=13,I=14,P=15;var xt=128,ut=64,Zt=32,mt=16,gt=8;var Jt=1,_t=28,$t=114;var pt=511,bt=131071,x=0,u=1,_=2,c=3,y=114,te=15;var ee=8;var X,K;function se(){X=new Uint8Array(511),K=new Uint8Array(16385);let a=511;for(let e=0;e<511;e++)a=(((a>>5^a)&1)<<8)+(a>>1),X[e]=a;a=131071;for(let e=0;e<16385;e++)a=(((a>>5^a)&255)<<9)+(a>>8),K[e]=a>>1}var k=class{constructor(e,t){this.irq=e;this.antic_xpos=t;this.regs=new Uint8Array(16);this.readregs=new Uint8Array(16);this.divnirq=new Uint32Array(4);this.divnmax=new Uint32Array(4);this.pot_inputs=new Uint8Array(8);this.basemult=0;this.pot_scanline=0;this.random_scanline_counter=0;this.kbcode=0;this.DELAYED_SERIN_IRQ=0;this.DELAYED_SEROUT_IRQ=0;this.DELAYED_XMTDONE_IRQ=0;this.init()}saveState(){return A(0,{},this)}loadState(e){A(0,this,e)}init(){this.readregs.fill(255),this.readregs[P]=239,this.basemult=_t,this.pot_inputs.fill(128),se()}read(e){let t=this.readregs[e];switch(e&=15,e){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:return t=this.pot_inputs[e],t>3;s&=7,t=(K[r]>>s)+(K[r+1]<<8-s)}}break}return t&255}write(e,t){switch(e&=15,this.regs[e]=t,e){case g:t&Jt?this.basemult=$t:this.basemult=_t,this.update_counter(1<=3?(this.readregs[I]|=8,this.DELAYED_XMTDONE_IRQ=2*this.DELAYED_SEROUT_IRQ-2):(this.DELAYED_SEROUT_IRQ=0,this.DELAYED_XMTDONE_IRQ=0));break;case Ht:this.divnirq[x]=this.divnmax[x],this.divnirq[u]=this.divnmax[u],this.divnirq[_]=this.divnmax[_],this.divnirq[c]=this.divnmax[c];break;case E:t&4&&(this.pot_scanline=228),(t&3)==0&&(this.DELAYED_SERIN_IRQ=0,this.DELAYED_SEROUT_IRQ=0,this.DELAYED_XMTDONE_IRQ=0);break}this.snd_update(e)}update_counter(e){e&1<0&&--this.DELAYED_SERIN_IRQ==0&&(this.readregs[jt]=this.SIO_GetByte(),this.generateIRQ(32)),this.DELAYED_SEROUT_IRQ>0&&--this.DELAYED_SEROUT_IRQ==0&&this.generateIRQ(16),this.DELAYED_XMTDONE_IRQ>0&&--this.DELAYED_XMTDONE_IRQ==0&&this.generateIRQ(8),this.advanceIRQTimer(x,1),this.advanceIRQTimer(u,2),this.advanceIRQTimer(c,4))}advanceIRQTimer(e,t){(this.divnirq[e]-=y)<0&&(this.divnirq[e]+=this.divnmax[e],this.generateIRQ(t))}generateIRQ(e){this.regs[z]&e&&(this.irq(),this.readregs[I]&=~e)}static stateToLongString(e){let t="";return t+=`Write Registers: `,t+=O(e.regs,0,16),t+=`Read Registers: `,t+=O(e.readregs,0,16),t}CASSETTE_IOLineStatus(){return 0}siocheck(){return((this.regs[o+_]==40||this.regs[o+_]==16||this.regs[o+_]==8||this.regs[o+_]==10)&&this.regs[o+c]==0||(this.regs[E]&120)==40)&&(this.regs[g]&40)==40}SIO_PutByte(e){console.log("SIO put byte",e)}SIO_GetByte(){return 0}};var ie=[i.VK_L,i.VK_J,i.VK_SEMICOLON,i.VK_F4,i.VK_F5,i.VK_K,i.VK_BACK_SLASH,i.VK_TILDE,i.VK_O,null,i.VK_P,i.VK_U,i.VK_ENTER,i.VK_I,i.VK_MINUS2,i.VK_EQUALS2,i.VK_V,i.VK_F7,i.VK_C,i.VK_F6,i.VK_F4,i.VK_B,i.VK_X,i.VK_Z,i.VK_4,null,i.VK_3,i.VK_6,i.VK_ESCAPE,i.VK_5,i.VK_2,i.VK_1,i.VK_COMMA,i.VK_SPACE,i.VK_PERIOD,i.VK_N,null,i.VK_M,i.VK_SLASH,null,i.VK_R,null,i.VK_E,i.VK_Y,i.VK_TAB,i.VK_T,i.VK_W,i.VK_Q,i.VK_9,null,i.VK_0,i.VK_7,i.VK_BACK_SPACE,i.VK_8,null,null,i.VK_F,i.VK_H,i.VK_D,null,i.VK_CAPS_LOCK,i.VK_G,i.VK_S,i.VK_A],re=J([[i.UP,0,1],[i.DOWN,0,2],[i.LEFT,0,4],[i.RIGHT,0,8],[{c:16,n:"Shift",plyr:0,button:0},2,1],[i.VK_F1,3,1],[i.VK_F2,3,2],[i.VK_F3,3,4]]),v=class extends st{constructor(){super();this.cpuFrequency=1789773;this.numTotalScanlines=262;this.cpuCyclesPerLine=114;this.canvasWidth=336;this.numVisibleScanlines=224;this.aspectRatio=this.canvasWidth/this.numVisibleScanlines*.857;this.firstVisibleScanline=16;this.firstVisibleClock=76;this.defaultROMSize=32768;this.overscan=!0;this.audioOversample=2;this.sampleRate=this.numTotalScanlines*60*this.audioOversample;this.run_address=-1;this.inputs=new Uint8Array(4);this.linergb=new Uint32Array(this.canvasWidth);this.lastdmabyte=0;this.keycode=0;this.cart_80=!1;this.cart_a0=!1;this.xexdata=null;this.keyboard_active=!0;this.d500=new Uint8Array(256);this.cpu=new et,this.ram=new Uint8Array(65536),this.bios=new Uint8Array(10240),this.bus=this.newBus(),this.connectCPUMemoryBus(this.bus),this.antic=new M(this.readDMA.bind(this),this.antic_nmi.bind(this)),this.gtia=new Y,this.irq_pokey=new k(this.pokey_irq.bind(this),()=>this.antic.h),this.audio_pokey=$(1),this.audioadapter=new tt(this.audio_pokey.pokey1,this.audioOversample,this.sampleRate),this.handler=Z(this.inputs,re,this.getKeyboardFunction(),!0)}newBus(){return{read:T([[0,32767,65535,t=>this.ram[t]],[32768,40959,65535,t=>this.cart_80?this.rom[t-32768]:this.ram[t]],[40960,49151,65535,t=>this.cart_a0?this.rom[t-32768]:this.ram[t]],[53248,53503,31,t=>this.gtia.readReg(t)],[53760,54015,15,t=>this.readPokey(t)],[54016,54271,15,t=>this.readPIA(t)],[54272,54527,15,t=>this.antic.readReg(t)],[54528,54783,255,t=>this.d500[t]],[55296,65535,65535,t=>this.bios[t-55296]]]),write:T([[0,49146,65535,(t,s)=>{this.ram[t]=s}],[49147,49151,65535,(t,s)=>{this.ram[t]=s,this.initCartA()}],[53248,53503,31,(t,s)=>{this.gtia.setReg(t,s)}],[53760,54015,15,(t,s)=>{this.writePokey(t,s)}],[54272,54527,15,(t,s)=>{this.antic.setReg(t,s)}],[54528,54783,255,(t,s)=>{this.writeMapper(t,s)}]])}}loadBIOS(t){this.bios.set(t)}reset(){super.reset(),this.antic.reset(),this.gtia.reset(),this.keycode=0}read(t){return this.bus.read(t)}readDMA(t){let s=this.bus.read(t);return this.probe.logDMARead(t,s),this.lastdmabyte=s,s}readConst(t){return t<53248||t>=54528?this.bus.read(t):255}write(t,s){this.bus.write(t,s)}readPokey(t){switch(t&15){case 9:return this.keycode&255;case 15:return~this.keycode>>6&4|~this.keycode>>3&8|18;default:return this.irq_pokey.read(t)}}readPIA(t){if(t==0||t==1)return~this.inputs[t]}writePokey(t,s){this.audio_pokey.pokey1.setRegister(t,s),this.irq_pokey.write(t,s)}startScanline(){this.gtia.sync();for(let t=0;t<4;t++)this.gtia.readregs[ht+t]=~this.inputs[2]>>t&1;this.gtia.readregs[ot]=~this.inputs[3]&7,this.audio&&this.audioadapter.generate(this.audio),this.irq_pokey.advanceScanline()}drawScanline(){let t=this.antic.v-this.firstVisibleScanline;t>=0&&t{this.gtia.clockPulse1(),this.linergb[t++]=this.gtia.rgb},r=()=>{this.gtia.clockPulse2(),this.linergb[t++]=this.gtia.rgb};this.gtia.clockPulse4(),this.antic.dliop&16&&this.antic.regs[4]&1?(t+=2,this.gtia.setBias(-1)):this.gtia.setBias(0);let n=ct[this.antic.mode],h=this.antic.h&1;return(n<8||h)&&(this.gtia.an=this.antic.shiftout()),s(),n==1&&(this.gtia.an=this.antic.shiftout()),r(),n<=2&&(this.gtia.an=this.antic.shiftout()),s(),n==1&&(this.gtia.an=this.antic.shiftout()),r(),1}loadState(t){this.loadControlsState(t),this.cpu.loadState(t.c),this.ram.set(t.ram),this.antic.loadState(t.antic),this.gtia.loadState(t.gtia),this.irq_pokey.loadState(t.pokey),this.lastdmabyte=t.lastdmabyte,this.cart_80=t.cart_80,this.cart_a0=t.cart_a0}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),antic:this.antic.saveState(),gtia:this.gtia.saveState(),pokey:this.irq_pokey.saveState(),inputs:this.inputs.slice(0),lastdmabyte:this.lastdmabyte,keycode:this.keycode,cart_80:this.cart_80,cart_a0:this.cart_a0}}loadControlsState(t){this.inputs.set(t.inputs),this.keycode=t.keycode}saveControlsState(){return{inputs:this.inputs.slice(0),keycode:this.keycode}}getRasterY(){return this.antic.v}getRasterX(){return this.antic.h}getRasterCanvasPosition(){return{x:this.antic.h*4-this.firstVisibleClock,y:this.antic.v-this.firstVisibleScanline}}getDebugCategories(){return["CPU","Stack","ANTIC","GTIA","POKEY"]}getDebugInfo(t,s){switch(t){case"ANTIC":return M.stateToLongString(s.antic);case"GTIA":return Y.stateToLongString(s.gtia);case"POKEY":return k.stateToLongString(s.pokey)}}getKeyboardFunction(){return(t,s,r,n)=>{if(!this.keyboard_active)return!1;if(n&65){var h=ie;if(s==i.VK_F9.c)return this.irq_pokey.generateIRQ(128),!0;for(var f=0;f>8}if(s>t.length)throw new Error("Bad .XEX file format")}h>=0&&(r[n++]=169,r[n++]=160,r[n++]=141,r[n++]=255,r[n++]=213,r[n++]=76,r[n++]=h&255,r[n++]=h>>8,this.ram[10]=0,this.ram[11]=213,this.run_address=54528)}initCartA(){this.cpu.getPC()==61823&&this.xexdata&&this.loadXEX(this.xexdata)}setPaddleInput(t,s){this.irq_pokey.pot_inputs[t]=255-s}getDebugDisplayList(){let t=this.antic.getDlistAddr(),s=()=>{let h=this.read(t);return t=t+1&1023|t&-1024,h},r=[],n=0;for(let h=0;h<256&&n<240;h++){let f=t,l=s(),p=l&15,d="",R=!1,D;if(p==0)D=(l>>4&7)+1,d+=" blank="+D;else{D=Q[p],d+=" mode="+m(p),d+=" lines="+D,R=(l&-65)==1;let j=(l&64)!=0&&(l&15)!=0;if(l&16&&(d+=" HSCROL"),l&32&&(d+=" VSCROL"),l&128&&(d+=" DLI"),R&&l&64?d+=" JVB":R?d+=" JMP":j&&(d+=" LMS"),R||j){let It=s(),Rt=s();d+=" $"+m(Rt)+m(It)}}if(r.push("$"+m(f)+" y="+n+" "+d),R)break;n+=D}return r}},V=class extends v{newBus(){return{read:T([[0,16383,65535,e=>this.ram[e]],[16384,49151,65535,e=>this.rom?this.rom[e-16384]:0],[49152,53247,31,e=>this.gtia.readReg(e)],[54272,54527,15,e=>this.antic.readReg(e)],[59392,61439,15,e=>this.readPokey(e)],[63488,65535,2047,e=>this.bios[e]]]),write:T([[0,16383,65535,(e,t)=>{this.ram[e]=t}],[49152,53247,31,(e,t)=>{this.gtia.setReg(e,t)}],[54272,54527,15,(e,t)=>{this.antic.setReg(e,t)}],[59392,61439,15,(e,t)=>{this.writePokey(e,t)}]])}}};var G=[{id:"hello.dasm",name:"Hello World (ASM)"},{id:"hellopm.dasm",name:"Hello Sprites (ASM)"},{id:"helloconio.c",name:"Text Mode (C)"},{id:"siegegame.c",name:"Siege Game (C)"},{id:"hellodlist.c",name:"Display List (C)"}],yt=G.concat([{id:"testmusic.c",name:"POKEY Music (C)"},{id:"sieve.bas",name:"Benchmark (FastBasic)",category:"FastBasic"},{id:"pmtest.bas",name:"Sprites Test (FastBasic)"},{id:"dli.bas",name:"DLI Test (FastBasic)"},{id:"joyas.bas",name:"Match-3 Game (FastBasic)"}]),Et={main:[{name:"RAM",start:0,size:49152,type:"ram"},{name:"Left Cartridge ROM",start:40960,size:8192,type:"rom"},{name:"GTIA",start:53248,size:32,type:"io"},{name:"POKEY",start:53760,size:16,type:"io"},{name:"PIA",start:54016,size:4,type:"io"},{name:"ANTIC",start:54272,size:16,type:"io"},{name:"Cartridge Control Line",start:54784,size:256,type:"io"},{name:"ROM",start:55296,size:2048,type:"rom"},{name:"Character Set",start:57344,size:1024,type:"rom"},{name:"ROM",start:58368,size:7168,type:"rom"}]};function At(a){return a.endsWith(".bas")||a.endsWith(".fb")||a.endsWith(".fbi")?"fastbasic":it(a)}var w=class extends at{constructor(){super(...arguments);this.getToolForFilename=At;this.showHelp=St;this.getROMExtension=ae;this.biosPath="res/altirra/kernel.rom"}newMachine(){return new v}getPresets(){return yt}getDefaultExtensions(){return[...super.getDefaultExtensions(),".bas"]}readAddress(t){return this.machine.readConst(t)}getMemoryMap(){return Et}async start(){let t=await this.loadKernel();await super.start(),this.machine.loadBIOS(t)}async loadKernel(){var t=await fetch(this.biosPath);if(t.status==200||t.size){var s=await t.arrayBuffer();return new Uint8Array(s)}else throw new Error("could not load BIOS file")}getDebugTree(){let t=super.getDebugTree();return t.display_list=this.machine.getDebugDisplayList(),t}},q=class extends w{constructor(){super(...arguments);this.biosPath="res/altirra/superkernel.rom"}getPresets(){return G}newMachine(){return new V}},N=class extends nt{constructor(){super(...arguments);this.getToolForFilename=At;this.getOpcodeMetadata=rt;this.showHelp=St}getPresets(){return G}getDefaultExtensions(){return[".c",".bas",".cpp",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}},U=class extends N{constructor(){super(...arguments);this.getMemoryMap=function(){return Et}}getPresets(){return yt}loadROM(t,s){this.started?(this.loadROMFile(s),this.loadRegion(":cartleft:cart:rom",s)):this.startModule(this.mainElement,{jsfile:"mame8bitws.js",biosfile:"a800xl.zip",cfgfile:"a800xl.cfg",driver:"a800xl",width:336*2,height:450,romfn:"/emulator/cart.rom",romdata:new Uint8Array(s),romsize:8192,preInit:function(r){}})}start(){}},W=class extends N{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"RAM",start:0,size:16384,type:"ram"},{name:"Cartridge ROM",start:16384,size:32768,type:"rom"},{name:"GTIA",start:49152,size:32,type:"io"},{name:"ANTIC",start:54272,size:16,type:"io"},{name:"POKEY",start:59392,size:16,type:"io"},{name:"ATARI Character Set",start:63488,size:1024,type:"rom"},{name:"ROM",start:64512,size:1024,type:"rom"}]}}}loadROM(t,s){this.started?(this.loadROMFile(s),this.loadRegion(":cartleft:cart:rom",s)):this.startModule(this.mainElement,{jsfile:"mame8bitws.js",biosfile:"a5200/5200.rom",cfgfile:"a5200.cfg",driver:"a5200",width:336*2,height:450,romfn:"/emulator/cart.rom",romdata:new Uint8Array(s),romsize:32768,preInit:function(r){}})}start(){}};function ae(a){return a==null?".bin":a[0]==255&&a[1]==255?".xex":".rom"}function St(){return"https://8bitworkshop.com/docs/platforms/atari8/"}S["atari8-800.xlmame"]=U;S["atari8-800xl.mame"]=U;S["atari8-5200.mame"]=W;S["atari8-800"]=w;S["atari8-5200"]=q; -//# sourceMappingURL=atari8-C5UI62GP.js.map +//# sourceMappingURL=atari8-2U4FGGVQ.js.map diff --git a/gen/atari8-C5UI62GP.js.map b/gen/atari8-2U4FGGVQ.js.map similarity index 100% rename from gen/atari8-C5UI62GP.js.map rename to gen/atari8-2U4FGGVQ.js.map diff --git a/gen/basic-PE6JX6GF.js b/gen/basic-N2UCUE33.js similarity index 98% rename from gen/basic-PE6JX6GF.js rename to gen/basic-N2UCUE33.js index 3b712a00..44504bd9 100644 --- a/gen/basic-PE6JX6GF.js +++ b/gen/basic-N2UCUE33.js @@ -1,4 +1,4 @@ -import{b as S}from"./chunk-3FIVEUG2.js";import{s as E}from"./chunk-NU32YKSG.js";import"./chunk-7GWCUXYG.js";import"./chunk-LNOKARBD.js";import"./chunk-A7SWO6EA.js";import"./chunk-5EAIGU4F.js";import"./chunk-AK7O6YZI.js";import{B as c,J as f,S as d,T as v,a as g}from"./chunk-5H5GMVON.js";import"./chunk-KT7KMEQC.js";function k(u){return u.value!=null}function y(u){return u.name!=null}function N(u){return u.op!=null&&u.left!=null&&u.right!=null}function O(u){return u.op!=null&&u.expr!=null}var m=class{randomize(){this.seed(Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647)}constructor(){(()=>{var r,e,i,n;this.seed=function(s,a,h,o){r=s,e=a,i=h,n=o},this.seedfloat=function(s){this.seed(s,s*4294,s*429496,s*4294967296),this.next(),this.next(),this.next()},this.next=function(){r>>>=0,e>>>=0,i>>>=0,n>>>=0;var s=r+e|0;return r=e^e>>>9,e=i+(i<<3)|0,i=i<<21|i>>>11,n=n+1|0,s=s+n|0,i=i+s|0,(s>>>0)/4294967296}})(),this.seedfloat(-1)}},I=1024*1024,l=class u{constructor(){this.margin=80;this.running=!1;this.exited=!0;this.trace=!1}load(t){let r=null,e=0;if(this.pc2label!=null){let s=this.curpc;for(;s>0&&(r=this.pc2label.get(s))==null;)s--;e=this.curpc-s,console.log("oldpc=",this.curpc,"restart @ label",r,"+",e)}this.program=t,this.opts=t.opts,this.opts.maxArrayElements||(this.opts.maxArrayElements=I),this.allstmts=t.stmts,this.label2pc=t.labels,this.label2dataptr={},this.pc2label=new Map,this.datums=[],this.subroutines={},this.builtins=this.getBuiltinFunctions();for(var i in t.labels){var n=t.labels[i];this.pc2label.set(n,i)}return this.allstmts.forEach((s,a)=>{this.curpc=a+1,this.compileStatement(s),s.command=="DATA"&&(this.label2dataptr[s.$loc.label]=this.datums.length,s.datums.forEach(h=>{this.curpc=s.$loc.offset,this.datums.push(h)}))}),this.label2pc[r]!=null?(this.curpc=this.label2pc[r]+e,!0):(this.curpc=0,!1)}reset(){this.curpc=0,this.dataptr=0,this.clearVars(),this.returnStack=[],this.column=0,this.running=!0,this.exited=!1}clearVars(){this.globals=this.vars={},this.arrays={},this.defs={},this.forLoops={},this.forLoopStack=[],this.whileLoops=[],this.rng=new m,this.opts&&this.opts.staticArrays&&this.allstmts.filter(t=>t.command=="DIM").forEach(t=>{t.args.forEach(r=>this.compileJS(this._DIM(r))())})}saveState(){return $.extend(!0,{},this)}loadState(t){$.extend(!0,this,t)}getBuiltinFunctions(){var t=this.program&&this.opts.validFunctions;t||(t=Object.getOwnPropertyNames(u.prototype).filter(i=>/^[A-Z]{3,}[$]?$/.test(i)));var r={};for(var e of t)this.supportsFunction(e)&&(r[e]=this[e].bind(this));return r}supportsFunction(t){return typeof this[t]=="function"}runtimeError(t){throw this.curpc--,new d(t,this.getCurrentSourceLocation())}dialectError(t){this.runtimeError(`I can't ${t} in this dialect of BASIC.`)}getLineForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.line}getLabelForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.label}getCurrentSourceLocation(){var t=this.getStatement();return t&&t.$loc}getCurrentLabel(){var t=this.getCurrentSourceLocation();return t&&t.label}getStatement(){return this.allstmts[this.curpc]}step(){if(!this.running)return!1;var t=this.getStatement();return t?(this.trace&&console.log(this.curpc,t,this.vars,Object.keys(this.arrays)),this.curpc++,this.executeStatement(t),this.running):(this.running=!1,this.exited=!0,!1)}compileStatement(t){if(t.$run==null)try{var r=this["do__"+t.command];r==null&&this.runtimeError(`I don't know how to "${t.command}".`);var e=r.bind(this)(t);this.trace&&console.log(e),t.$run=this.compileJS(e)}catch(i){throw e&&console.log(e),i}}compileJS(t){return new Function(t).bind(this)}executeStatement(t){this.compileStatement(t),t.$run()}skipToEOL(){do this.curpc++;while(this.curpc=0?this.curpc=r:this.runtimeError(`I tried to go to the label "${t}" but couldn't find it.`)}newLocalScope(){this.vars=Object.create(this.vars)}popLocalScope(){this.vars!==this.globals&&(this.vars=Object.getPrototypeOf(this.vars))}gosubLabel(t){this.returnStack.length>32767&&this.runtimeError("I did too many GOSUBs without a RETURN."),this.returnStack.push(this.curpc),this.gotoLabel(t)}returnFromGosub(){this.returnStack.length==0&&this.runtimeError("I tried to RETURN, but there wasn't a corresponding GOSUB.");var t=this.returnStack.pop();this.curpc=t,this.popLocalScope()}popReturnStack(){this.returnStack.length==0&&this.runtimeError("I tried to POP, but there wasn't a corresponding GOSUB."),this.returnStack.pop()}valueToString(t,r){var e;if(typeof t=="number"){var i=this.float2str(t,this.opts.printZoneLength-4);return r?i.startsWith("-")?`${i} `:` ${i} `:i}else if(t==` +import{b as S}from"./chunk-3FIVEUG2.js";import{s as E}from"./chunk-KP2LCIGE.js";import"./chunk-7GWCUXYG.js";import"./chunk-LNOKARBD.js";import"./chunk-A7SWO6EA.js";import"./chunk-LVDMCWZP.js";import"./chunk-AA227H53.js";import{B as c,J as f,S as d,T as v,a as g}from"./chunk-BNFOPPUS.js";import"./chunk-KT7KMEQC.js";function k(u){return u.value!=null}function y(u){return u.name!=null}function N(u){return u.op!=null&&u.left!=null&&u.right!=null}function O(u){return u.op!=null&&u.expr!=null}var m=class{randomize(){this.seed(Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647)}constructor(){(()=>{var r,e,i,n;this.seed=function(s,a,h,o){r=s,e=a,i=h,n=o},this.seedfloat=function(s){this.seed(s,s*4294,s*429496,s*4294967296),this.next(),this.next(),this.next()},this.next=function(){r>>>=0,e>>>=0,i>>>=0,n>>>=0;var s=r+e|0;return r=e^e>>>9,e=i+(i<<3)|0,i=i<<21|i>>>11,n=n+1|0,s=s+n|0,i=i+s|0,(s>>>0)/4294967296}})(),this.seedfloat(-1)}},I=1024*1024,l=class u{constructor(){this.margin=80;this.running=!1;this.exited=!0;this.trace=!1}load(t){let r=null,e=0;if(this.pc2label!=null){let s=this.curpc;for(;s>0&&(r=this.pc2label.get(s))==null;)s--;e=this.curpc-s,console.log("oldpc=",this.curpc,"restart @ label",r,"+",e)}this.program=t,this.opts=t.opts,this.opts.maxArrayElements||(this.opts.maxArrayElements=I),this.allstmts=t.stmts,this.label2pc=t.labels,this.label2dataptr={},this.pc2label=new Map,this.datums=[],this.subroutines={},this.builtins=this.getBuiltinFunctions();for(var i in t.labels){var n=t.labels[i];this.pc2label.set(n,i)}return this.allstmts.forEach((s,a)=>{this.curpc=a+1,this.compileStatement(s),s.command=="DATA"&&(this.label2dataptr[s.$loc.label]=this.datums.length,s.datums.forEach(h=>{this.curpc=s.$loc.offset,this.datums.push(h)}))}),this.label2pc[r]!=null?(this.curpc=this.label2pc[r]+e,!0):(this.curpc=0,!1)}reset(){this.curpc=0,this.dataptr=0,this.clearVars(),this.returnStack=[],this.column=0,this.running=!0,this.exited=!1}clearVars(){this.globals=this.vars={},this.arrays={},this.defs={},this.forLoops={},this.forLoopStack=[],this.whileLoops=[],this.rng=new m,this.opts&&this.opts.staticArrays&&this.allstmts.filter(t=>t.command=="DIM").forEach(t=>{t.args.forEach(r=>this.compileJS(this._DIM(r))())})}saveState(){return $.extend(!0,{},this)}loadState(t){$.extend(!0,this,t)}getBuiltinFunctions(){var t=this.program&&this.opts.validFunctions;t||(t=Object.getOwnPropertyNames(u.prototype).filter(i=>/^[A-Z]{3,}[$]?$/.test(i)));var r={};for(var e of t)this.supportsFunction(e)&&(r[e]=this[e].bind(this));return r}supportsFunction(t){return typeof this[t]=="function"}runtimeError(t){throw this.curpc--,new d(t,this.getCurrentSourceLocation())}dialectError(t){this.runtimeError(`I can't ${t} in this dialect of BASIC.`)}getLineForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.line}getLabelForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.label}getCurrentSourceLocation(){var t=this.getStatement();return t&&t.$loc}getCurrentLabel(){var t=this.getCurrentSourceLocation();return t&&t.label}getStatement(){return this.allstmts[this.curpc]}step(){if(!this.running)return!1;var t=this.getStatement();return t?(this.trace&&console.log(this.curpc,t,this.vars,Object.keys(this.arrays)),this.curpc++,this.executeStatement(t),this.running):(this.running=!1,this.exited=!0,!1)}compileStatement(t){if(t.$run==null)try{var r=this["do__"+t.command];r==null&&this.runtimeError(`I don't know how to "${t.command}".`);var e=r.bind(this)(t);this.trace&&console.log(e),t.$run=this.compileJS(e)}catch(i){throw e&&console.log(e),i}}compileJS(t){return new Function(t).bind(this)}executeStatement(t){this.compileStatement(t),t.$run()}skipToEOL(){do this.curpc++;while(this.curpc=0?this.curpc=r:this.runtimeError(`I tried to go to the label "${t}" but couldn't find it.`)}newLocalScope(){this.vars=Object.create(this.vars)}popLocalScope(){this.vars!==this.globals&&(this.vars=Object.getPrototypeOf(this.vars))}gosubLabel(t){this.returnStack.length>32767&&this.runtimeError("I did too many GOSUBs without a RETURN."),this.returnStack.push(this.curpc),this.gotoLabel(t)}returnFromGosub(){this.returnStack.length==0&&this.runtimeError("I tried to RETURN, but there wasn't a corresponding GOSUB.");var t=this.returnStack.pop();this.curpc=t,this.popLocalScope()}popReturnStack(){this.returnStack.length==0&&this.runtimeError("I tried to POP, but there wasn't a corresponding GOSUB."),this.returnStack.pop()}valueToString(t,r){var e;if(typeof t=="number"){var i=this.float2str(t,this.opts.printZoneLength-4);return r?i.startsWith("-")?`${i} `:` ${i} `:i}else if(t==` `)this.column=0,e=t;else if(t==" "){var n=this.opts.printZoneLength,s=Math.floor(this.column/n),a=(s+1)*this.opts.printZoneLength;a+n>this.margin?(this.column=0,e=` `):e=this.TAB(a)}else e=`${t}`;return e}float2str(t,r){var e=t.toString().toUpperCase();if(r>0){for(var i=r;e.length>r;)e=t.toPrecision(i--);e.startsWith("0.")?e=e.substr(1):e.startsWith("-0.")&&(e="-"+e.substr(2))}return e}printExpr(t){var r=this.valueToString(t,this.opts.numericPadding);this.column+=r.length,this.print(r)}print(t){console.log(t)}async input(t,r){return{line:"",vals:[]}}resume(){}expr2js(t,r){if(r||(r={}),k(t))return JSON.stringify(t.value);if(y(t)){if(!t.args&&r.locals&&r.locals.indexOf(t.name)>=0)return t.name;{r.isconst&&this.runtimeError("I expected a constant value here.");var e="",i=JSON.stringify(t.name);let h=t.args?t.args.map(o=>this.expr2js(o,r)).join(", "):[];return t.name.startsWith("FN")?e+=`this.getDef(${i})(${h})`:this.builtins[t.name]?(this.checkFuncArgs(t,this.builtins[t.name]),e+=`this.builtins.${t.name}(${h})`):t.args?this.opts.arraysContainChars&&t.name.endsWith("$")?e+=`this.getStringSlice(this.vars.${t.name}, ${h})`:e+=`this.arrayGet(${i}, ${h})`:e+=`this.vars.${t.name}`,r.novalid?e:`this.checkValue(${e}, ${i})`}}else if(N(t)){var n=this.expr2js(t.left,r),s=this.expr2js(t.right,r);return`this.${t.op}(${n}, ${s})`}else if(O(t)){var a=this.expr2js(t.expr,r);return`this.${t.op}(${a})`}}assign2js(t,r){r||(r={});var e="";return(t.name.startsWith("FN")||this.builtins[t.name])&&this.runtimeError("I can't call a function here."),t.args?this.opts.arraysContainChars&&t.name.endsWith("$")?this.runtimeError("I can't set array slices via this command yet."):e+=this.array2js(t,r):e=`this.globals.${t.name}`,e}array2js(t,r){var e=JSON.stringify(t.name),i=t.args||[];return this.expr2js(t,{novalid:!0})+`;this.getArray(${e}, ${i.length})`+i.map(n=>"[this.ROUND("+this.expr2js(n,r)+")]").join("")}checkFuncArgs(t,r){var e=t.args?t.args.length:0;t.name=="RND"&&e==0||t.name=="MID$"&&e==2||t.name=="INSTR"&&e==2||r.length!=e&&this.runtimeError(`I expected ${r.length} arguments for the ${t.name} function, but I got ${e}.`)}startForLoop(t,r,e,i,n){var s=this.curpc-1,a=this.pc2label.get(s);i||(i=1),this.vars[t]=r,this.trace&&console.log(`FOR ${t} = ${r} TO ${e} STEP ${i}`);var h=()=>i>=0?this.vars[t]>e:this.vars[t]o==t)),this.forLoopStack.push(t),this.forLoops[t]={$next:o=>{o&&t!=o&&this.runtimeError(`I executed NEXT "${o}", but the last FOR was for "${t}".`),this.vars[t]+=i;var b=h();b?(this.forLoopStack.pop(),delete this.forLoops[t]):this.curpc=(a!=null&&this.label2pc[a]||s)+1,this.trace&&console.log(`NEXT ${t}: ${this.vars[t]} TO ${e} STEP ${i} DONE=${b}`)}}}nextForLoop(t){var r=this.forLoops[t||this.opts.optionalNextVar&&this.forLoopStack[this.forLoopStack.length-1]];r||this.runtimeError("I couldn't find a matching FOR for this NEXT."),r.$next(t)}whileLoop(t){t?this.whileLoops.push(this.curpc-1):this.skipToAfterWend()}nextWhileLoop(){var t=this.whileLoops.pop();t==null?this.runtimeError("I couldn't find a matching WHILE for this WEND."):this.curpc=t}assign(t,r,e){return e&&t.endsWith("$")?this.checkValue(this.convert(t,r),t):t.endsWith("$")?this.convertToString(r,t):this.convertToNumber(r,t)}convert(t,r){return t.endsWith("$")?r==null?"":r.toString():typeof r=="number"?r:parseFloat(r+"")}convertToString(t,r){if(typeof t!="string")this.runtimeError(`I can't convert ${t} to a string.`);else return t}convertToNumber(t,r){if(typeof t!="number")this.runtimeError(`I can't convert ${t} to a number.`);else return this.checkNum(t)}dimArray(t,...r){if(r=r.map(Math.round),this.arrays[t]!=null){if(this.opts.staticArrays)return;this.runtimeError(`I already dimensioned this array (${t}) earlier.`)}var e=this.getTotalArrayLength(r);e>this.opts.maxArrayElements&&this.runtimeError("I can't create an array with this many elements.");var i=t.endsWith("$"),n=i?Array:Float64Array;if(r.length==1)this.arrays[t]=new n(r[0]+1);else if(r.length==2){this.arrays[t]=new Array(r[0]+1);for(var s=0;s=i.length&&this.runtimeError(`I tried to lookup ${t}(${r}) but it exceeded the dimensions of the array.`),i=i[r[n]]}return c(i)&&this.runtimeError(`I tried to lookup ${t}(${r}) but used too few dimensions.`),i}modifyStringSlice(t,r,e,i){return t=t||"",this.checkString(t),this.checkString(r),i||(i=e),e=this.ROUND(e),i=this.ROUND(i),e<1&&this.dialectError("accept a string slice index less than 1"),ir.length)&&this.runtimeError(`I needed a number between 1 and ${r.length}, but I got ${t}.`),t<1||t>r.length?0:t}onGotoLabel(t,...r){t=this.checkOnGoto(t,r),t&&this.gotoLabel(r[t-1])}onGosubLabel(t,...r){t=this.checkOnGoto(t,r),t&&this.gosubLabel(r[t-1])}nextDatum(){return this.dataptr>=this.datums.length&&this.runtimeError("I tried to READ, but ran out of data."),this.datums[this.dataptr++].value}do__PRINT(t){var r="";for(var e of t.args){var i=this.expr2js(e),n=i.name;r+=`this.printExpr(this.checkValue(${i}, ${JSON.stringify(n)}));`}return r}preInput(){this.running=!1,this.curpc--}postInput(t){t&&this.curpc++,this.running=!0,this.resume()}do__INPUT(t){var r=t.prompt!=null?this.expr2js(t.prompt):'""',e=t.elapsed!=null?this.assign2js(t.elapsed):"let ___",i="";return t.args.forEach((n,s)=>{var a=this.assign2js(n);i+=` var value = this.convert(${JSON.stringify(n.name)}, response.vals[${s}]); @@ -34,4 +34,4 @@ import{b as S}from"./chunk-3FIVEUG2.js";import{s as E}from"./chunk-NU32YKSG.js"; `),this.tty.addtext("*** END OF PROGRAM ***",1),this.tty.showPrintHead(!1)}loadROM(t,r){var e=this.runtime.exited;this.program=r;var i=this.runtime.load(r);this.tty.uppercaseOnly=!0,(!this.hotReload||e||!i)&&this.reset()}getROMExtension(){return".json"}reset(){this.tty.clear(),this.runtime.reset(),this.clock=0,this.transcript=[]}pause(){this.timer.stop()}resume(){this.isBlocked()||(this.animcount=0,this.timer.start())}isBlocked(){return this.tty.waitingfor!=null||this.runtime.exited}isRunning(){return this.timer.isRunning()}getDefaultExtensions(){return[".bas"]}getToolForFilename(){return"basic"}getPresets(){return L}getPC(){return this.runtime.curpc}getSP(){return 4096-this.runtime.returnStack.length}isStable(){return!0}getCPUState(){return{PC:this.getPC(),SP:this.getSP()}}saveState(){return{c:this.getCPUState(),rt:this.runtime.saveState()}}loadState(t){this.runtime.loadState(t)}getDebugTree(){return{CurrentLine:this.runtime.getCurrentLabel(),Variables:this.runtime.vars,Arrays:this.runtime.arrays,Functions:this.runtime.defs,ForLoops:this.runtime.forLoops,WhileLoops:this.runtime.whileLoops,ReturnStack:this.runtime.returnStack,NextDatum:this.runtime.datums[this.runtime.dataptr],Clock:this.clock,Options:this.runtime.opts,Internals:this.runtime}}inspect(t){let r=this.runtime.vars[t];if(r!=null)return`${t} = ${r}`}showHelp(){return"https://8bitworkshop.com/docs/platforms/basic/"}getDebugCategories(){return["Variables"]}getDebugInfo(t,r){switch(t){case"Variables":return this.varsToLongString()}}varsToLongString(){var t="",r=Object.keys(this.runtime.vars);r.sort();for(var e of r){var i=this.runtime.vars[e],n=JSON.stringify(i);n.length>24&&(n=`${n.substr(0,24)}...(${n.length})`),t+=g(e,3)+" = "+n+` `}return t}setupDebug(t){this.onBreakpointHit=t}clearDebug(){this.onBreakpointHit=null,this.debugTrap=null}checkDebugTrap(){return this.debugTrap&&this.debugTrap()?(this.pause(),this.break(),!0):!1}break(){this.onBreakpointHit&&this.onBreakpointHit(this.saveState())}step(){var t=this.clock;this.debugTrap=()=>this.clock>t,this.resume()}stepOver(){var t=this.runtime.getStatement();if(t&&(t.command=="GOSUB"||t.command=="ONGOSUB")){var r=this.getPC()+1;this.runEval(()=>this.getPC()==r)}else this.step()}runUntilReturn(){var t=this.getSP();this.runEval(()=>this.getSP()>t)}runEval(t){this.debugTrap=()=>t(this.getCPUState()),this.resume()}restartAtPC(t){return t=Math.round(t),t>=0&&t9?1:0;r=(s>>4)+(e>>4)+t;let i=r>9?1:0;this.clrOZCS();let x=this.doAdd(s,e);this.setSZ(x);let c=0;return i&&(c|=160),t&&(c|=10),c&&(this.clrOZCS(),x=this.doAdd(x,c),this.setSZ(x)),x}getScratchpadIndex(s){if(s<12)return s;if(s===12)return this.IS&63;if(s===13){let e=this.IS&63;return this.IS=this.IS&56|this.IS+1&7,e}if(s===14){let e=this.IS&63;return this.IS=this.IS&56|this.IS-1&7,e}return 0}advanceInsn(){if(this.irqRequest&&this.W&u)return this.irqRequest=!1,this.PC1=this.PC0,this.PC0=this.bus.read(4094)<<8|this.bus.read(4095),this.W&=~u,6;let s=this.fetchPC0();this.o=s,this.stable=!0;let e=4,r,t;switch(s){case 0:this.A=this.R[12];break;case 1:this.A=this.R[13];break;case 2:this.A=this.R[14];break;case 3:this.A=this.R[15];break;case 4:this.R[12]=this.A;break;case 5:this.R[13]=this.A;break;case 6:this.R[14]=this.A;break;case 7:this.R[15]=this.A;break;case 8:this.R[12]=this.PC1>>8&255,this.R[13]=this.PC1&255,e=8;break;case 9:this.PC1=this.R[12]<<8|this.R[13],e=8;break;case 10:this.A=this.IS&63;break;case 11:this.IS=this.A&63;break;case 12:this.PC1=this.PC0,this.PC0=this.R[12]<<8|this.R[13],e=8;break;case 13:this.PC0=this.R[14]<<8|this.R[15],e=8;break;case 14:this.R[14]=this.DC0>>8&255,this.R[15]=this.DC0&255,e=8;break;case 15:this.DC0=this.R[14]<<8|this.R[15],e=8;break;case 16:this.DC0=this.R[10]<<8|this.R[11],e=8;break;case 17:this.R[10]=this.DC0>>8&255,this.R[11]=this.DC0&255,e=8;break;case 18:this.A=this.A>>1&255,this.clrOZCS(),this.setSZ(this.A);break;case 19:this.A=this.A<<1&255,this.clrOZCS(),this.setSZ(this.A);break;case 20:this.A=this.A>>4&255,this.clrOZCS(),this.setSZ(this.A);break;case 21:this.A=this.A<<4&255,this.clrOZCS(),this.setSZ(this.A);break;case 22:this.A=this.fetchDC0(),e=6;break;case 23:this.storeDC0(this.A),e=6;break;case 24:this.A=~this.A&255,this.clrOZCS(),this.setSZ(this.A);break;case 25:r=this.W&d?1:0,this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A);break;case 26:this.W&=~u;break;case 27:this.W|=u;break;case 28:this.PC0=this.PC1;break;case 29:this.W=this.R[9]&31;break;case 30:this.R[9]=this.W&31;break;case 31:this.clrOZCS(),this.A=this.doAdd(this.A,1),this.setSZ(this.A);break;case 32:this.A=this.fetchPC0(),e=6;break;case 33:r=this.fetchPC0(),this.A=this.A&r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 34:r=this.fetchPC0(),this.A=this.A|r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 35:r=this.fetchPC0(),this.A=this.A^r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 36:r=this.fetchPC0(),this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A),e=6;break;case 37:r=this.fetchPC0(),this.clrOZCS(),this.doAdd(~this.A&255,r,1),this.setSZ(this.doAdd(~this.A&255,r,1)),e=6;break;case 38:r=this.fetchPC0(),this.A=this.iobus.read(r)&255,this.clrOZCS(),this.setSZ(this.A),e=8;break;case 39:r=this.fetchPC0(),this.iobus.write(r,this.A),e=8;break;case 40:{let i=this.fetchPC0(),x=this.fetchPC0();this.PC1=this.PC0,this.PC0=i<<8|x,e=12;break}case 41:{let i=this.fetchPC0(),x=this.fetchPC0();this.PC0=i<<8|x,e=10;break}case 42:{let i=this.fetchPC0(),x=this.fetchPC0();this.DC0=i<<8|x,e=10;break}case 43:break;case 44:r=this.DC0,this.DC0=this.DC1,this.DC1=r;break;case 45:case 46:case 47:break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:t=this.getScratchpadIndex(s&15),this.clrOZCS(),this.R[t]=this.doAdd(this.R[t],255),this.setSZ(this.R[t]),e=6;break;case 63:break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:case 76:case 77:case 78:t=this.getScratchpadIndex(s&15),this.A=this.R[t];break;case 79:break;case 80:case 81:case 82:case 83:case 84:case 85:case 86:case 87:case 88:case 89:case 90:case 91:case 92:case 93:case 94:t=this.getScratchpadIndex(s&15),this.R[t]=this.A;break;case 95:break;case 96:case 97:case 98:case 99:case 100:case 101:case 102:case 103:this.IS=this.IS&7|(s&7)<<3;break;case 104:case 105:case 106:case 107:case 108:case 109:case 110:case 111:this.IS=this.IS&56|s&7;break;case 112:case 113:case 114:case 115:case 116:case 117:case 118:case 119:case 120:case 121:case 122:case 123:case 124:case 125:case 126:case 127:this.A=s&15;break;case 128:case 129:case 130:case 131:case 132:case 133:case 134:case 135:{let i=s&7,x=this.fetchPC0();this.W&i&&(this.PC0=this.PC0+(x&128?x-256:x)&65535),e=6;break}case 136:r=this.fetchDC0(),this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A),e=6;break;case 137:r=this.fetchDC0(),this.A=this.doAddDecimal(this.A,r),e=6;break;case 138:r=this.fetchDC0(),this.A=this.A&r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 139:r=this.fetchDC0(),this.A=this.A|r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 140:r=this.fetchDC0(),this.A=this.A^r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 141:r=this.fetchDC0(),this.clrOZCS();{let i=this.doAdd(~this.A&255,r,1);this.setSZ(i)}e=6;break;case 142:this.DC0=this.DC0+(this.A&128?this.A-256:this.A)&65535,e=6;break;case 143:{let i=this.fetchPC0();(this.IS&7)!==7&&(this.PC0=this.PC0+(i&128?i-256:i)&65535),e=6;break}case 144:case 145:case 146:case 147:case 148:case 149:case 150:case 151:case 152:case 153:case 154:case 155:case 156:case 157:case 158:case 159:{let i=s&15,x=this.fetchPC0();(i===0||!(this.W&i))&&(this.PC0=this.PC0+(x&128?x-256:x)&65535),e=6;break}case 160:case 161:this.A=this.iobus.read(s&1)&255,this.clrOZCS(),this.setSZ(this.A);break;case 162:case 163:break;case 164:case 165:case 166:case 167:case 168:case 169:case 170:case 171:case 172:case 173:case 174:case 175:this.A=this.iobus.read(s&15)&255,this.clrOZCS(),this.setSZ(this.A),e=8;break;case 176:case 177:this.iobus.write(s&1,this.A);break;case 178:case 179:break;case 180:case 181:case 182:case 183:case 184:case 185:case 186:case 187:case 188:case 189:case 190:case 191:this.iobus.write(s&15,this.A),e=8;break;case 192:case 193:case 194:case 195:case 196:case 197:case 198:case 199:case 200:case 201:case 202:case 203:case 204:case 205:case 206:t=this.getScratchpadIndex(s&15),this.clrOZCS(),this.A=this.doAdd(this.A,this.R[t]),this.setSZ(this.A);break;case 207:break;case 208:case 209:case 210:case 211:case 212:case 213:case 214:case 215:case 216:case 217:case 218:case 219:case 220:case 221:case 222:t=this.getScratchpadIndex(s&15),this.A=this.doAddDecimal(this.A,this.R[t]),e=8;break;case 223:break;case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:t=this.getScratchpadIndex(s&15),this.A=(this.A^this.R[t])&255,this.clrOZCS(),this.setSZ(this.A);break;case 239:break;case 240:case 241:case 242:case 243:case 244:case 245:case 246:case 247:case 248:case 249:case 250:case 251:case 252:case 253:case 254:t=this.getScratchpadIndex(s&15),this.A=this.A&this.R[t]&255,this.clrOZCS(),this.setSZ(this.A);break;case 255:break}return e}};var M=[4282927176,4283498320,4283453695,4286611584,4294922320,4283498320,4283453695,4286611584,4282927176,4294922320,4283453695,4286611584,4282927176,4283498320,4294922320,4286611584],B=1,E=2,O=4,Z=8,g=16,v=32,_=64,L=128,C=class extends D{constructor(){super();this.cpuFrequency=1789773;this.defaultROMSize=65536;this.canvasWidth=128;this.numVisibleScanlines=64;this.numTotalScanlines=64;this.cpuCyclesPerLine=this.cpuFrequency/60/64;this.sampleRate=this.cpuFrequency/2;this.cpu=new l;this.ram=new Uint8Array(65536);this.vram=new Uint8Array(8192);this.port0=0;this.port1=0;this.port4=0;this.port5=0;this.row_reg=0;this.col_reg=0;this.color=0;this.soundMode=0;this.soundCounter=0;this.soundEnvelope=0;this.soundOnTime=0;this.read=A([[0,2047,2047,e=>this.bios[e]],[2048,65535,65535,e=>this.rom&&this.rom[e-2048]||0]],{gmask:65535});this.write=A([[10240,12287,2047,(e,r)=>{this.rom&&(this.rom[e-2048]=r)}]],{gmask:65535});this.bios=new Uint8Array(2048),this.connectCPUMemoryBus(this),this.cpu.connectIOBus(this.newIOBus())}newIOBus(){return this.probeIOBus({read:e=>this.readPort(e),write:(e,r)=>{this.writePort(e,r)}})}readPort(e){switch(e&255){case 0:return~this.inputs[0]&255;case 1:return~this.inputs[1]&255;case 4:return~this.inputs[2]&255;default:return 255}}writePort(e,r){switch(e&255){case 0:this.port0=r;break;case 1:this.port1=r,this.col_reg=r;break;case 4:this.port4=r;break;case 5:this.port5=r,this.soundMode=r>>6&3,this.soundMode>0&&(this.soundEnvelope=1023,this.soundOnTime=60),this.row_reg=r&63,this.writePixel();break}}writePixel(){let e=this.row_reg,r=this.col_reg&127;if(e<64&&r<128){let t=this.port1>>6&3,i=e*128+r;this.vram[i]=t}}readConst(e){return e<2048?this.bios[e]:this.rom&&this.rom[e-2048]||0}loadROM(e){this.rom||(this.rom=new Uint8Array(this.defaultROMSize)),this.rom.set(e),this.reset()}loadBIOS(e){this.bios=P(e,2048),this.reset()}reset(){super.reset(),this.vram.fill(0),this.port0=0,this.port1=0,this.port4=0,this.port5=0,this.row_reg=0,this.col_reg=0,this.soundMode=0,this.soundCounter=0,this.soundEnvelope=0}advanceFrame(e){var r=0,t=this.cpuFrequency/60;for(this.probe.logNewFrame();r>1)*4;for(let x=0;x<128;x++){let c=this.vram[e*128+x]&3,o=M[r+c];this.pixels[e*128+x]=o}}}generateAudio(e){if(!this.audio)return;let r=Math.floor(this.sampleRate/60);for(let t=0;t0&&this.soundEnvelope>0){let x;switch(this.soundMode){case 1:x=1e3;break;case 2:x=500;break;case 3:x=120;break;default:x=0}if(x>0){let c=Math.floor(this.sampleRate/x);this.soundCounter=(this.soundCounter+1)%c,i=this.soundCounter0?this.soundOnTime--:(this.soundEnvelope-=2,this.soundEnvelope<0&&(this.soundEnvelope=0))}this.audio.feedSample(i,1)}}setKeyInput(e,r,t){let i=!!(t&1),x=!!(t&64);e===n.VK_1.c&&(i?this.inputs[0]|=1:x&&(this.inputs[0]&=-2)),e===n.VK_2.c&&(i?this.inputs[0]|=2:x&&(this.inputs[0]&=-3)),e===n.VK_3.c&&(i?this.inputs[0]|=4:x&&(this.inputs[0]&=-5)),e===n.VK_4.c&&(i?this.inputs[0]|=8:x&&(this.inputs[0]&=-9)),(e===n.VK_UP.c||e===n.VK_W.c)&&(i?this.inputs[1]|=Z:x&&(this.inputs[1]&=~Z)),(e===n.VK_DOWN.c||e===n.VK_S.c)&&(i?this.inputs[1]|=O:x&&(this.inputs[1]&=~O)),(e===n.VK_LEFT.c||e===n.VK_A.c)&&(i?this.inputs[1]|=E:x&&(this.inputs[1]&=~E)),(e===n.VK_RIGHT.c||e===n.VK_D.c)&&(i?this.inputs[1]|=B:x&&(this.inputs[1]&=~B)),e===n.VK_Q.c&&(i?this.inputs[1]|=g:x&&(this.inputs[1]&=~g)),e===n.VK_E.c&&(i?this.inputs[1]|=v:x&&(this.inputs[1]&=~v)),e===n.VK_R.c&&(i?this.inputs[1]|=L:x&&(this.inputs[1]&=~L)),e===n.VK_F.c&&(i?this.inputs[1]|=_:x&&(this.inputs[1]&=~_))}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),inputs:this.inputs.slice(0),vram:this.vram.slice(0),port0:this.port0,port1:this.port1,port4:this.port4,port5:this.port5,row_reg:this.row_reg,col_reg:this.col_reg,soundMode:this.soundMode,soundCounter:this.soundCounter,soundEnvelope:this.soundEnvelope}}loadState(e){this.cpu.loadState(e.c),this.ram.set(e.ram),this.inputs.set(e.inputs),this.vram.set(e.vram),this.port0=e.port0,this.port1=e.port1,this.port4=e.port4,this.port5=e.port5,this.row_reg=e.row_reg,this.col_reg=e.col_reg,this.soundMode=e.soundMode,this.soundCounter=e.soundCounter,this.soundEnvelope=e.soundEnvelope}};function F(a){return a<9?"r"+a:a===9?"J":a===10?"HU":a===11?"HL":a===12?"S":a===13?"I":a===14?"D":"?"}function w(a,s,e,r){let t="",i="",x=1,c=!1;if(s<=7){let o=["KU","KL","QU","QL"];s<4?(t="LR",i="A,"+o[s]):(t="LR",i=o[s-4]+",A")}else if(s===8)t="LR",i="K,P";else if(s===9)t="LR",i="P,K";else if(s===10)t="LR",i="A,IS";else if(s===11)t="LR",i="IS,A";else if(s===12)t="PK";else if(s===13)t="LR",i="P0,Q";else if(s===14)t="LR",i="Q,DC";else if(s===15)t="LR",i="DC,Q";else if(s===16)t="LR",i="DC,H";else if(s===17)t="LR",i="H,DC";else if(s===18)t="SR",i="1";else if(s===19)t="SL",i="1";else if(s===20)t="SR",i="4";else if(s===21)t="SL",i="4";else if(s===22)t="LM";else if(s===23)t="ST";else if(s===24)t="COM";else if(s===25)t="LNK";else if(s===26)t="DI";else if(s===27)t="EI";else if(s===28)t="POP";else if(s===29)t="LR",i="W,J";else if(s===30)t="LR",i="J,W";else if(s===31)t="INC";else if(s===32)t="LI",i="$"+h(e,2),x=2;else if(s===33)t="NI",i="$"+h(e,2),x=2;else if(s===34)t="OI",i="$"+h(e,2),x=2;else if(s===35)t="XI",i="$"+h(e,2),x=2;else if(s===36)t="AI",i="$"+h(e,2),x=2;else if(s===37)t="CI",i="$"+h(e,2),x=2;else if(s===38)t="IN",i="$"+h(e,2),x=2;else if(s===39)t="OUT",i="$"+h(e,2),x=2;else if(s===40)t="PI",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===41)t="JMP",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===42)t="DCI",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===43)t="NOP";else if(s===44)t="XDC";else if(s<=47)t="???";else if(s>=48&&s<=62)t="DS",i=F(s&15),x=1;else if(s===63)t="???";else if(s>=64&&s<=78)t="LR",i="A,"+F(s&15);else if(s===79)t="???";else if(s>=80&&s<=94)t="LR",i=F(s&15)+",A";else if(s===95)t="???";else if(s>=96&&s<=103)t="LISU",i=""+(s&7);else if(s>=104&&s<=111)t="LISL",i=""+(s&7);else if(s>=112&&s<=127)t="LIS",i=""+(s&15);else if(s>=128&&s<=135){let o=e&128?a+2+e-256:a+2+e;t="BT",i=""+(s&7)+",$"+h(o&65535,4),x=2,c=!0}else if(s===136)t="AM";else if(s===137)t="AMD";else if(s===138)t="NM";else if(s===139)t="OM";else if(s===140)t="XM";else if(s===141)t="CM";else if(s===142)t="ADC";else if(s===143){let o=e&128?a+2+e-256:a+2+e;t="BR7",i="$"+h(o&65535,4),x=2,c=!0}else if(s>=144&&s<=159){let o=e&128?a+2+e-256:a+2+e,f=s&15;f===0?t="BR":t="BF",f!==0&&(i=""+f+","),i+="$"+h(o&65535,4),x=2,c=!0}else s>=160&&s<=161?(t="INS",i=""+(s&15)):s>=162&&s<=163?t="???":s>=164&&s<=175?(t="INS",i=""+(s&15)):s>=176&&s<=177?(t="OUTS",i=""+(s&15)):s>=178&&s<=179?t="???":s>=180&&s<=191?(t="OUTS",i=""+(s&15)):s>=192&&s<=206?(t="AS",i=F(s&15)):s===207?t="???":s>=208&&s<=222?(t="ASD",i=F(s&15)):s===223?t="???":s>=224&&s<=238?(t="XS",i=F(s&15)):s===239?t="???":s>=240&&s<=254?(t="NS",i=F(s&15)):t="???";return{line:t+(i?" "+i:""),nbytes:x,isaddr:c}}var W=[{id:"hello.dasm",name:"Hello World (ASM)"}];function U(a){return"PC0 = "+h(a.PC0,4)+" PC1 = "+h(a.PC1,4)+` +import{H as R,q as D}from"./chunk-AA227H53.js";import{$ as A,J as S,V as n,_ as P,g as h,s as p}from"./chunk-BNFOPPUS.js";import"./chunk-KT7KMEQC.js";var I=1,d=2,k=4,b=8,u=16,l=class{constructor(){this.PC0=0;this.PC1=0;this.DC0=0;this.DC1=0;this.A=0;this.W=0;this.IS=0;this.R=new Uint8Array(64);this.o=0;this.stable=!0;this.irqRequest=!1}connectMemoryBus(s){this.bus=s}connectIOBus(s){this.iobus=s}reset(){this.PC0=0,this.PC1=0,this.DC0=0,this.DC1=0,this.A=0,this.W=0,this.IS=0,this.R.fill(0),this.irqRequest=!1}interrupt(s){this.irqRequest=!0}getPC(){return this.PC0}getSP(){return this.PC1}isStable(){return this.stable}saveState(){return{PC:this.PC0,PC0:this.PC0,PC1:this.PC1,DC0:this.DC0,DC1:this.DC1,A:this.A,W:this.W,IS:this.IS,R:Array.from(this.R),o:this.o,irq:this.irqRequest}}loadState(s){var e;this.PC0=(e=s.PC0)!=null?e:s.PC,this.PC1=s.PC1,this.DC0=s.DC0,this.DC1=s.DC1,this.A=s.A,this.W=s.W,this.IS=s.IS;for(let r=0;r<64;r++)this.R[r]=s.R[r];this.o=s.o,this.irqRequest=s.irq}fetchPC0(){let s=this.bus.read(this.PC0);return this.PC0=this.PC0+1&65535,s}fetchDC0(){let s=this.bus.read(this.DC0);return this.DC0=this.DC0+1&65535,s}storeDC0(s){this.bus.write(this.DC0,s),this.DC0=this.DC0+1&65535}clrOZCS(){this.W&=~(b|k|d|I)}setSZ(s){(s&255)===0&&(this.W|=k),(s&128)===0&&(this.W|=I)}doAdd(s,e,r=0){let t=(s&255)+(e&255)+(r&1);return t&256&&(this.W|=d),((s^t)&(e^t)&128)!==0&&(this.W|=b),t&255}doAddDecimal(s,e){let r=(s&15)+(e&15),t=r>9?1:0;r=(s>>4)+(e>>4)+t;let i=r>9?1:0;this.clrOZCS();let x=this.doAdd(s,e);this.setSZ(x);let c=0;return i&&(c|=160),t&&(c|=10),c&&(this.clrOZCS(),x=this.doAdd(x,c),this.setSZ(x)),x}getScratchpadIndex(s){if(s<12)return s;if(s===12)return this.IS&63;if(s===13){let e=this.IS&63;return this.IS=this.IS&56|this.IS+1&7,e}if(s===14){let e=this.IS&63;return this.IS=this.IS&56|this.IS-1&7,e}return 0}advanceInsn(){if(this.irqRequest&&this.W&u)return this.irqRequest=!1,this.PC1=this.PC0,this.PC0=this.bus.read(4094)<<8|this.bus.read(4095),this.W&=~u,6;let s=this.fetchPC0();this.o=s,this.stable=!0;let e=4,r,t;switch(s){case 0:this.A=this.R[12];break;case 1:this.A=this.R[13];break;case 2:this.A=this.R[14];break;case 3:this.A=this.R[15];break;case 4:this.R[12]=this.A;break;case 5:this.R[13]=this.A;break;case 6:this.R[14]=this.A;break;case 7:this.R[15]=this.A;break;case 8:this.R[12]=this.PC1>>8&255,this.R[13]=this.PC1&255,e=8;break;case 9:this.PC1=this.R[12]<<8|this.R[13],e=8;break;case 10:this.A=this.IS&63;break;case 11:this.IS=this.A&63;break;case 12:this.PC1=this.PC0,this.PC0=this.R[12]<<8|this.R[13],e=8;break;case 13:this.PC0=this.R[14]<<8|this.R[15],e=8;break;case 14:this.R[14]=this.DC0>>8&255,this.R[15]=this.DC0&255,e=8;break;case 15:this.DC0=this.R[14]<<8|this.R[15],e=8;break;case 16:this.DC0=this.R[10]<<8|this.R[11],e=8;break;case 17:this.R[10]=this.DC0>>8&255,this.R[11]=this.DC0&255,e=8;break;case 18:this.A=this.A>>1&255,this.clrOZCS(),this.setSZ(this.A);break;case 19:this.A=this.A<<1&255,this.clrOZCS(),this.setSZ(this.A);break;case 20:this.A=this.A>>4&255,this.clrOZCS(),this.setSZ(this.A);break;case 21:this.A=this.A<<4&255,this.clrOZCS(),this.setSZ(this.A);break;case 22:this.A=this.fetchDC0(),e=6;break;case 23:this.storeDC0(this.A),e=6;break;case 24:this.A=~this.A&255,this.clrOZCS(),this.setSZ(this.A);break;case 25:r=this.W&d?1:0,this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A);break;case 26:this.W&=~u;break;case 27:this.W|=u;break;case 28:this.PC0=this.PC1;break;case 29:this.W=this.R[9]&31;break;case 30:this.R[9]=this.W&31;break;case 31:this.clrOZCS(),this.A=this.doAdd(this.A,1),this.setSZ(this.A);break;case 32:this.A=this.fetchPC0(),e=6;break;case 33:r=this.fetchPC0(),this.A=this.A&r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 34:r=this.fetchPC0(),this.A=this.A|r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 35:r=this.fetchPC0(),this.A=this.A^r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 36:r=this.fetchPC0(),this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A),e=6;break;case 37:r=this.fetchPC0(),this.clrOZCS(),this.doAdd(~this.A&255,r,1),this.setSZ(this.doAdd(~this.A&255,r,1)),e=6;break;case 38:r=this.fetchPC0(),this.A=this.iobus.read(r)&255,this.clrOZCS(),this.setSZ(this.A),e=8;break;case 39:r=this.fetchPC0(),this.iobus.write(r,this.A),e=8;break;case 40:{let i=this.fetchPC0(),x=this.fetchPC0();this.PC1=this.PC0,this.PC0=i<<8|x,e=12;break}case 41:{let i=this.fetchPC0(),x=this.fetchPC0();this.PC0=i<<8|x,e=10;break}case 42:{let i=this.fetchPC0(),x=this.fetchPC0();this.DC0=i<<8|x,e=10;break}case 43:break;case 44:r=this.DC0,this.DC0=this.DC1,this.DC1=r;break;case 45:case 46:case 47:break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:t=this.getScratchpadIndex(s&15),this.clrOZCS(),this.R[t]=this.doAdd(this.R[t],255),this.setSZ(this.R[t]),e=6;break;case 63:break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:case 76:case 77:case 78:t=this.getScratchpadIndex(s&15),this.A=this.R[t];break;case 79:break;case 80:case 81:case 82:case 83:case 84:case 85:case 86:case 87:case 88:case 89:case 90:case 91:case 92:case 93:case 94:t=this.getScratchpadIndex(s&15),this.R[t]=this.A;break;case 95:break;case 96:case 97:case 98:case 99:case 100:case 101:case 102:case 103:this.IS=this.IS&7|(s&7)<<3;break;case 104:case 105:case 106:case 107:case 108:case 109:case 110:case 111:this.IS=this.IS&56|s&7;break;case 112:case 113:case 114:case 115:case 116:case 117:case 118:case 119:case 120:case 121:case 122:case 123:case 124:case 125:case 126:case 127:this.A=s&15;break;case 128:case 129:case 130:case 131:case 132:case 133:case 134:case 135:{let i=s&7,x=this.fetchPC0();this.W&i&&(this.PC0=this.PC0+(x&128?x-256:x)&65535),e=6;break}case 136:r=this.fetchDC0(),this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A),e=6;break;case 137:r=this.fetchDC0(),this.A=this.doAddDecimal(this.A,r),e=6;break;case 138:r=this.fetchDC0(),this.A=this.A&r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 139:r=this.fetchDC0(),this.A=this.A|r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 140:r=this.fetchDC0(),this.A=this.A^r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 141:r=this.fetchDC0(),this.clrOZCS();{let i=this.doAdd(~this.A&255,r,1);this.setSZ(i)}e=6;break;case 142:this.DC0=this.DC0+(this.A&128?this.A-256:this.A)&65535,e=6;break;case 143:{let i=this.fetchPC0();(this.IS&7)!==7&&(this.PC0=this.PC0+(i&128?i-256:i)&65535),e=6;break}case 144:case 145:case 146:case 147:case 148:case 149:case 150:case 151:case 152:case 153:case 154:case 155:case 156:case 157:case 158:case 159:{let i=s&15,x=this.fetchPC0();(i===0||!(this.W&i))&&(this.PC0=this.PC0+(x&128?x-256:x)&65535),e=6;break}case 160:case 161:this.A=this.iobus.read(s&1)&255,this.clrOZCS(),this.setSZ(this.A);break;case 162:case 163:break;case 164:case 165:case 166:case 167:case 168:case 169:case 170:case 171:case 172:case 173:case 174:case 175:this.A=this.iobus.read(s&15)&255,this.clrOZCS(),this.setSZ(this.A),e=8;break;case 176:case 177:this.iobus.write(s&1,this.A);break;case 178:case 179:break;case 180:case 181:case 182:case 183:case 184:case 185:case 186:case 187:case 188:case 189:case 190:case 191:this.iobus.write(s&15,this.A),e=8;break;case 192:case 193:case 194:case 195:case 196:case 197:case 198:case 199:case 200:case 201:case 202:case 203:case 204:case 205:case 206:t=this.getScratchpadIndex(s&15),this.clrOZCS(),this.A=this.doAdd(this.A,this.R[t]),this.setSZ(this.A);break;case 207:break;case 208:case 209:case 210:case 211:case 212:case 213:case 214:case 215:case 216:case 217:case 218:case 219:case 220:case 221:case 222:t=this.getScratchpadIndex(s&15),this.A=this.doAddDecimal(this.A,this.R[t]),e=8;break;case 223:break;case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:t=this.getScratchpadIndex(s&15),this.A=(this.A^this.R[t])&255,this.clrOZCS(),this.setSZ(this.A);break;case 239:break;case 240:case 241:case 242:case 243:case 244:case 245:case 246:case 247:case 248:case 249:case 250:case 251:case 252:case 253:case 254:t=this.getScratchpadIndex(s&15),this.A=this.A&this.R[t]&255,this.clrOZCS(),this.setSZ(this.A);break;case 255:break}return e}};var M=[4282927176,4283498320,4283453695,4286611584,4294922320,4283498320,4283453695,4286611584,4282927176,4294922320,4283453695,4286611584,4282927176,4283498320,4294922320,4286611584],B=1,E=2,O=4,Z=8,g=16,v=32,_=64,L=128,C=class extends D{constructor(){super();this.cpuFrequency=1789773;this.defaultROMSize=65536;this.canvasWidth=128;this.numVisibleScanlines=64;this.numTotalScanlines=64;this.cpuCyclesPerLine=this.cpuFrequency/60/64;this.sampleRate=this.cpuFrequency/2;this.cpu=new l;this.ram=new Uint8Array(65536);this.vram=new Uint8Array(8192);this.port0=0;this.port1=0;this.port4=0;this.port5=0;this.row_reg=0;this.col_reg=0;this.color=0;this.soundMode=0;this.soundCounter=0;this.soundEnvelope=0;this.soundOnTime=0;this.read=A([[0,2047,2047,e=>this.bios[e]],[2048,65535,65535,e=>this.rom&&this.rom[e-2048]||0]],{gmask:65535});this.write=A([[10240,12287,2047,(e,r)=>{this.rom&&(this.rom[e-2048]=r)}]],{gmask:65535});this.bios=new Uint8Array(2048),this.connectCPUMemoryBus(this),this.cpu.connectIOBus(this.newIOBus())}newIOBus(){return this.probeIOBus({read:e=>this.readPort(e),write:(e,r)=>{this.writePort(e,r)}})}readPort(e){switch(e&255){case 0:return~this.inputs[0]&255;case 1:return~this.inputs[1]&255;case 4:return~this.inputs[2]&255;default:return 255}}writePort(e,r){switch(e&255){case 0:this.port0=r;break;case 1:this.port1=r,this.col_reg=r;break;case 4:this.port4=r;break;case 5:this.port5=r,this.soundMode=r>>6&3,this.soundMode>0&&(this.soundEnvelope=1023,this.soundOnTime=60),this.row_reg=r&63,this.writePixel();break}}writePixel(){let e=this.row_reg,r=this.col_reg&127;if(e<64&&r<128){let t=this.port1>>6&3,i=e*128+r;this.vram[i]=t}}readConst(e){return e<2048?this.bios[e]:this.rom&&this.rom[e-2048]||0}loadROM(e){this.rom||(this.rom=new Uint8Array(this.defaultROMSize)),this.rom.set(e),this.reset()}loadBIOS(e){this.bios=P(e,2048),this.reset()}reset(){super.reset(),this.vram.fill(0),this.port0=0,this.port1=0,this.port4=0,this.port5=0,this.row_reg=0,this.col_reg=0,this.soundMode=0,this.soundCounter=0,this.soundEnvelope=0}advanceFrame(e){var r=0,t=this.cpuFrequency/60;for(this.probe.logNewFrame();r>1)*4;for(let x=0;x<128;x++){let c=this.vram[e*128+x]&3,o=M[r+c];this.pixels[e*128+x]=o}}}generateAudio(e){if(!this.audio)return;let r=Math.floor(this.sampleRate/60);for(let t=0;t0&&this.soundEnvelope>0){let x;switch(this.soundMode){case 1:x=1e3;break;case 2:x=500;break;case 3:x=120;break;default:x=0}if(x>0){let c=Math.floor(this.sampleRate/x);this.soundCounter=(this.soundCounter+1)%c,i=this.soundCounter0?this.soundOnTime--:(this.soundEnvelope-=2,this.soundEnvelope<0&&(this.soundEnvelope=0))}this.audio.feedSample(i,1)}}setKeyInput(e,r,t){let i=!!(t&1),x=!!(t&64);e===n.VK_1.c&&(i?this.inputs[0]|=1:x&&(this.inputs[0]&=-2)),e===n.VK_2.c&&(i?this.inputs[0]|=2:x&&(this.inputs[0]&=-3)),e===n.VK_3.c&&(i?this.inputs[0]|=4:x&&(this.inputs[0]&=-5)),e===n.VK_4.c&&(i?this.inputs[0]|=8:x&&(this.inputs[0]&=-9)),(e===n.VK_UP.c||e===n.VK_W.c)&&(i?this.inputs[1]|=Z:x&&(this.inputs[1]&=~Z)),(e===n.VK_DOWN.c||e===n.VK_S.c)&&(i?this.inputs[1]|=O:x&&(this.inputs[1]&=~O)),(e===n.VK_LEFT.c||e===n.VK_A.c)&&(i?this.inputs[1]|=E:x&&(this.inputs[1]&=~E)),(e===n.VK_RIGHT.c||e===n.VK_D.c)&&(i?this.inputs[1]|=B:x&&(this.inputs[1]&=~B)),e===n.VK_Q.c&&(i?this.inputs[1]|=g:x&&(this.inputs[1]&=~g)),e===n.VK_E.c&&(i?this.inputs[1]|=v:x&&(this.inputs[1]&=~v)),e===n.VK_R.c&&(i?this.inputs[1]|=L:x&&(this.inputs[1]&=~L)),e===n.VK_F.c&&(i?this.inputs[1]|=_:x&&(this.inputs[1]&=~_))}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),inputs:this.inputs.slice(0),vram:this.vram.slice(0),port0:this.port0,port1:this.port1,port4:this.port4,port5:this.port5,row_reg:this.row_reg,col_reg:this.col_reg,soundMode:this.soundMode,soundCounter:this.soundCounter,soundEnvelope:this.soundEnvelope}}loadState(e){this.cpu.loadState(e.c),this.ram.set(e.ram),this.inputs.set(e.inputs),this.vram.set(e.vram),this.port0=e.port0,this.port1=e.port1,this.port4=e.port4,this.port5=e.port5,this.row_reg=e.row_reg,this.col_reg=e.col_reg,this.soundMode=e.soundMode,this.soundCounter=e.soundCounter,this.soundEnvelope=e.soundEnvelope}};function F(a){return a<9?"r"+a:a===9?"J":a===10?"HU":a===11?"HL":a===12?"S":a===13?"I":a===14?"D":"?"}function w(a,s,e,r){let t="",i="",x=1,c=!1;if(s<=7){let o=["KU","KL","QU","QL"];s<4?(t="LR",i="A,"+o[s]):(t="LR",i=o[s-4]+",A")}else if(s===8)t="LR",i="K,P";else if(s===9)t="LR",i="P,K";else if(s===10)t="LR",i="A,IS";else if(s===11)t="LR",i="IS,A";else if(s===12)t="PK";else if(s===13)t="LR",i="P0,Q";else if(s===14)t="LR",i="Q,DC";else if(s===15)t="LR",i="DC,Q";else if(s===16)t="LR",i="DC,H";else if(s===17)t="LR",i="H,DC";else if(s===18)t="SR",i="1";else if(s===19)t="SL",i="1";else if(s===20)t="SR",i="4";else if(s===21)t="SL",i="4";else if(s===22)t="LM";else if(s===23)t="ST";else if(s===24)t="COM";else if(s===25)t="LNK";else if(s===26)t="DI";else if(s===27)t="EI";else if(s===28)t="POP";else if(s===29)t="LR",i="W,J";else if(s===30)t="LR",i="J,W";else if(s===31)t="INC";else if(s===32)t="LI",i="$"+h(e,2),x=2;else if(s===33)t="NI",i="$"+h(e,2),x=2;else if(s===34)t="OI",i="$"+h(e,2),x=2;else if(s===35)t="XI",i="$"+h(e,2),x=2;else if(s===36)t="AI",i="$"+h(e,2),x=2;else if(s===37)t="CI",i="$"+h(e,2),x=2;else if(s===38)t="IN",i="$"+h(e,2),x=2;else if(s===39)t="OUT",i="$"+h(e,2),x=2;else if(s===40)t="PI",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===41)t="JMP",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===42)t="DCI",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===43)t="NOP";else if(s===44)t="XDC";else if(s<=47)t="???";else if(s>=48&&s<=62)t="DS",i=F(s&15),x=1;else if(s===63)t="???";else if(s>=64&&s<=78)t="LR",i="A,"+F(s&15);else if(s===79)t="???";else if(s>=80&&s<=94)t="LR",i=F(s&15)+",A";else if(s===95)t="???";else if(s>=96&&s<=103)t="LISU",i=""+(s&7);else if(s>=104&&s<=111)t="LISL",i=""+(s&7);else if(s>=112&&s<=127)t="LIS",i=""+(s&15);else if(s>=128&&s<=135){let o=e&128?a+2+e-256:a+2+e;t="BT",i=""+(s&7)+",$"+h(o&65535,4),x=2,c=!0}else if(s===136)t="AM";else if(s===137)t="AMD";else if(s===138)t="NM";else if(s===139)t="OM";else if(s===140)t="XM";else if(s===141)t="CM";else if(s===142)t="ADC";else if(s===143){let o=e&128?a+2+e-256:a+2+e;t="BR7",i="$"+h(o&65535,4),x=2,c=!0}else if(s>=144&&s<=159){let o=e&128?a+2+e-256:a+2+e,f=s&15;f===0?t="BR":t="BF",f!==0&&(i=""+f+","),i+="$"+h(o&65535,4),x=2,c=!0}else s>=160&&s<=161?(t="INS",i=""+(s&15)):s>=162&&s<=163?t="???":s>=164&&s<=175?(t="INS",i=""+(s&15)):s>=176&&s<=177?(t="OUTS",i=""+(s&15)):s>=178&&s<=179?t="???":s>=180&&s<=191?(t="OUTS",i=""+(s&15)):s>=192&&s<=206?(t="AS",i=F(s&15)):s===207?t="???":s>=208&&s<=222?(t="ASD",i=F(s&15)):s===223?t="???":s>=224&&s<=238?(t="XS",i=F(s&15)):s===239?t="???":s>=240&&s<=254?(t="NS",i=F(s&15)):t="???";return{line:t+(i?" "+i:""),nbytes:x,isaddr:c}}var W=[{id:"hello.dasm",name:"Hello World (ASM)"}];function U(a){return"PC0 = "+h(a.PC0,4)+" PC1 = "+h(a.PC1,4)+` DC0 = `+h(a.DC0,4)+" DC1 = "+h(a.DC1,4)+` A = `+h(a.A,2)+" W = "+h(a.W,2)+` IS = `+h(a.IS,2)+` @@ -14,4 +14,4 @@ Port 5: `+h(e.port5||0,2)+` Row: `+h(e.row_reg||0,2)+` Col: `+h(e.col_reg||0,2)+` `;case"VRAM":return"";default:return""}}getMemoryMap(){return{main:[{name:"BIOS",start:0,size:2048,type:"rom"},{name:"Cart ROM",start:2048,size:30720,type:"rom"}]}}};S.channelf=m; -//# sourceMappingURL=channelf-4WMAJFYK.js.map +//# sourceMappingURL=channelf-NEV7QS2U.js.map diff --git a/gen/channelf-4WMAJFYK.js.map b/gen/channelf-NEV7QS2U.js.map similarity index 100% rename from gen/channelf-4WMAJFYK.js.map rename to gen/channelf-NEV7QS2U.js.map diff --git a/gen/chunk-325WOJO6.js b/gen/chunk-3S5SSM5Q.js similarity index 96% rename from gen/chunk-325WOJO6.js rename to gen/chunk-3S5SSM5Q.js index c174157d..20ce2720 100644 --- a/gen/chunk-325WOJO6.js +++ b/gen/chunk-3S5SSM5Q.js @@ -1,2 +1,2 @@ -import{c as A,g as s}from"./chunk-5H5GMVON.js";var C=!1,P=[[{N:0},{N:1}],[{N:1},{N:0}],[{V:0},{V:1}],[{V:1},{V:0}],[{C:0},{C:1}],[{C:1},{C:0}],[{Z:0},{Z:1}],[{Z:1},{Z:0}]];function L(l,e){if(l==null||e==null)return null;for(var t in l)if(e[t]!=="undefined")return l[t]==e[t];for(var t in e)if(l[t]!=="undefined")return l[t]==e[t];return null}var m=class{constructor(e){this.pc2clockrange={};this.jsrresult={};this.MAX_CYCLES=2e3;this.platform=e}getClockCountsAtPC(e){var t=this.platform.readAddress(e),r=this.platform.getOpcodeMetadata(t,e);return r}traceInstructions(e,t,r,i,u){C&&console.log("trace",s(e),t,r),u||(u={});var f=!0,S=!1;for(let d=0;f&&!S;d++){if(d>=this.MAX_CYCLES){console.log("too many cycles @",s(e),"routine",s(i));break}f=!1,this.WRAP_CLOCKS?(t=t%this.MAX_CLOCKS,r=r%this.MAX_CLOCKS,r==t-1&&(C&&console.log("0-75",s(e),t,r),t=0,r=this.MAX_CLOCKS-1)):(t=Math.min(this.MAX_CLOCKS,t),r=Math.min(this.MAX_CLOCKS,r));let a=this.getClockCountsAtPC(e),g=this.platform.readAddress(e+1),M=this.platform.readAddress(e+2),x=g+(M<<8),c=e,o=this.pc2clockrange[c];if(o==null&&(this.pc2clockrange[c]=o={minclocks:t,maxclocks:r},C&&console.log("new",s(e),s(c),s(i),t,r),f=!0),(o.minclocks!=t||o.maxclocks!=r)&&(this.WRAP_CLOCKS&&t<=r!=o.minclocks<=o.maxclocks&&(C&&console.log("wrap",s(e),s(c),s(i),t,r,o),o.minclocks=t=0,o.maxclocks=r=this.MAX_CLOCKS-1,f=!0),to.maxclocks&&(C&&console.log("max",s(e),s(c),s(i),t,r,o),o.maxclocks=r,f=!0)),!a.insnlength){console.log("Illegal instruction!",s(e),s(a.opcode),a);break}e+=a.insnlength;var b=u;u=null;let O=this.getMaxCyclesForSync(a,g,M);if(typeof O=="number")t=0,r=O,a.minCycles=a.maxCycles=0;else switch(a.opcode){case 25:case 29:case 57:case 61:case 89:case 93:case 121:case 125:case 185:case 187:case 188:case 189:case 190:case 191:case 217:case 221:case 249:case 253:g==0&&(a.maxCycles-=1);break;case 32:t+=a.minCycles,r+=a.maxCycles,this.traceInstructions(x,t,r,x,u);var n=this.jsrresult[x];n?(t=n.minclocks,r=n.maxclocks):(console.log("No JSR result!",s(e),s(x)),t=r);break;case 76:e=x;break;case 64:S=!0;break;case 96:if(i){var n=this.jsrresult[i];n?n={minclocks:Math.min(t,n.minclocks),maxclocks:Math.max(r,n.maxclocks)}:n={minclocks:t,maxclocks:r},this.jsrresult[i]=n,console.log("RTS",s(e),s(i),this.jsrresult[i])}return;case 16:case 48:case 80:case 112:case 144:case 176:case 208:case 240:var y=e+A(g),p=e>>8!=y>>8;p||a.maxCycles--;var h=P[Math.floor((a.opcode-16)/32)],T=L(b,h[0]),R=L(b,h[1]);this.traceInstructions(y,t+a.maxCycles,r+a.maxCycles,i,h[0]),R===!1&&(console.log("branch always taken",s(e),b,h[1]),S=!0),u=h[1],a.maxCycles=a.minCycles;break;case 108:console.log("Instruction not supported!",s(e),s(a.opcode),a);return}C&&console.log("add",s(e),a.minCycles,a.maxCycles),t+=a.minCycles,r+=a.maxCycles}}showLoopTimingForPC(e){this.pc2clockrange={},this.jsrresult={},this.traceInstructions(e|this.platform.getOriginPC(),this.START_CLOCKS,this.MAX_CLOCKS,0,{})}getMaxCyclesForSync(e,t,r){}},K=class extends m{constructor(e){super(e),this.MAX_CLOCKS=76,this.START_CLOCKS=0,this.WRAP_CLOCKS=!0}getMaxCyclesForSync(e,t,r){if(e.opcode==133&&t==2)return 0}},_=class extends m{constructor(e){super(e),this.MAX_CLOCKS=114,this.START_CLOCKS=0,this.WRAP_CLOCKS=!0}getMaxCyclesForSync(e,t,r){if(e.opcode==44&&t==2&&r==32)return 4}};export{K as a,_ as b}; -//# sourceMappingURL=chunk-325WOJO6.js.map +import{c as A,g as s}from"./chunk-BNFOPPUS.js";var C=!1,P=[[{N:0},{N:1}],[{N:1},{N:0}],[{V:0},{V:1}],[{V:1},{V:0}],[{C:0},{C:1}],[{C:1},{C:0}],[{Z:0},{Z:1}],[{Z:1},{Z:0}]];function L(l,e){if(l==null||e==null)return null;for(var t in l)if(e[t]!=="undefined")return l[t]==e[t];for(var t in e)if(l[t]!=="undefined")return l[t]==e[t];return null}var m=class{constructor(e){this.pc2clockrange={};this.jsrresult={};this.MAX_CYCLES=2e3;this.platform=e}getClockCountsAtPC(e){var t=this.platform.readAddress(e),r=this.platform.getOpcodeMetadata(t,e);return r}traceInstructions(e,t,r,i,u){C&&console.log("trace",s(e),t,r),u||(u={});var f=!0,S=!1;for(let d=0;f&&!S;d++){if(d>=this.MAX_CYCLES){console.log("too many cycles @",s(e),"routine",s(i));break}f=!1,this.WRAP_CLOCKS?(t=t%this.MAX_CLOCKS,r=r%this.MAX_CLOCKS,r==t-1&&(C&&console.log("0-75",s(e),t,r),t=0,r=this.MAX_CLOCKS-1)):(t=Math.min(this.MAX_CLOCKS,t),r=Math.min(this.MAX_CLOCKS,r));let a=this.getClockCountsAtPC(e),g=this.platform.readAddress(e+1),M=this.platform.readAddress(e+2),x=g+(M<<8),c=e,o=this.pc2clockrange[c];if(o==null&&(this.pc2clockrange[c]=o={minclocks:t,maxclocks:r},C&&console.log("new",s(e),s(c),s(i),t,r),f=!0),(o.minclocks!=t||o.maxclocks!=r)&&(this.WRAP_CLOCKS&&t<=r!=o.minclocks<=o.maxclocks&&(C&&console.log("wrap",s(e),s(c),s(i),t,r,o),o.minclocks=t=0,o.maxclocks=r=this.MAX_CLOCKS-1,f=!0),to.maxclocks&&(C&&console.log("max",s(e),s(c),s(i),t,r,o),o.maxclocks=r,f=!0)),!a.insnlength){console.log("Illegal instruction!",s(e),s(a.opcode),a);break}e+=a.insnlength;var b=u;u=null;let O=this.getMaxCyclesForSync(a,g,M);if(typeof O=="number")t=0,r=O,a.minCycles=a.maxCycles=0;else switch(a.opcode){case 25:case 29:case 57:case 61:case 89:case 93:case 121:case 125:case 185:case 187:case 188:case 189:case 190:case 191:case 217:case 221:case 249:case 253:g==0&&(a.maxCycles-=1);break;case 32:t+=a.minCycles,r+=a.maxCycles,this.traceInstructions(x,t,r,x,u);var n=this.jsrresult[x];n?(t=n.minclocks,r=n.maxclocks):(console.log("No JSR result!",s(e),s(x)),t=r);break;case 76:e=x;break;case 64:S=!0;break;case 96:if(i){var n=this.jsrresult[i];n?n={minclocks:Math.min(t,n.minclocks),maxclocks:Math.max(r,n.maxclocks)}:n={minclocks:t,maxclocks:r},this.jsrresult[i]=n,console.log("RTS",s(e),s(i),this.jsrresult[i])}return;case 16:case 48:case 80:case 112:case 144:case 176:case 208:case 240:var y=e+A(g),p=e>>8!=y>>8;p||a.maxCycles--;var h=P[Math.floor((a.opcode-16)/32)],T=L(b,h[0]),R=L(b,h[1]);this.traceInstructions(y,t+a.maxCycles,r+a.maxCycles,i,h[0]),R===!1&&(console.log("branch always taken",s(e),b,h[1]),S=!0),u=h[1],a.maxCycles=a.minCycles;break;case 108:console.log("Instruction not supported!",s(e),s(a.opcode),a);return}C&&console.log("add",s(e),a.minCycles,a.maxCycles),t+=a.minCycles,r+=a.maxCycles}}showLoopTimingForPC(e){this.pc2clockrange={},this.jsrresult={},this.traceInstructions(e|this.platform.getOriginPC(),this.START_CLOCKS,this.MAX_CLOCKS,0,{})}getMaxCyclesForSync(e,t,r){}},K=class extends m{constructor(e){super(e),this.MAX_CLOCKS=76,this.START_CLOCKS=0,this.WRAP_CLOCKS=!0}getMaxCyclesForSync(e,t,r){if(e.opcode==133&&t==2)return 0}},_=class extends m{constructor(e){super(e),this.MAX_CLOCKS=114,this.START_CLOCKS=0,this.WRAP_CLOCKS=!0}getMaxCyclesForSync(e,t,r){if(e.opcode==44&&t==2&&r==32)return 4}};export{K as a,_ as b}; +//# sourceMappingURL=chunk-3S5SSM5Q.js.map diff --git a/gen/chunk-325WOJO6.js.map b/gen/chunk-3S5SSM5Q.js.map similarity index 100% rename from gen/chunk-325WOJO6.js.map rename to gen/chunk-3S5SSM5Q.js.map diff --git a/gen/chunk-5H5GMVON.js b/gen/chunk-5H5GMVON.js deleted file mode 100644 index a42246e2..00000000 --- a/gen/chunk-5H5GMVON.js +++ /dev/null @@ -1,6 +0,0 @@ -function q(e,t){for(e+="";e.length0?e.substr(0,t):e}function K(e,t){return t||(t=2),t==8?K(e>>16&65535,4)+K(e&65535,4):F(e,t,16)}function ne(e,t){return t||(t=8),F(e,t,2)}function F(e,t,r){try{for(var i=e.toString(r).toUpperCase();i.length=0)for(;n'+u+""),a+=u,n++,o++}for(;o>6)+3,_=(p&63)+8):(d=i[p&31],_=(p>>5)+1),x=0;x=192&&n<224)n=(n&31)<<6|e[i++]&63;else if(n=(n&15)<<12|(e[i]&63)<<6|e[i+1]&63,i+=2,n==65279)continue;t+=String.fromCharCode(n)}return t}function ue(e,t){var r=0;if(e){e=e.toUpperCase();let a=[".CHR",".BIN",".DAT",".PAL",".NAM",".RLE",".LZ4",".NSF"];for(var i of a)e.endsWith(i)&&r++}for(var n=0;n<(t?t.length:0);){let a=t[n++];if((a&128)==0){if(a<9||a>=14&&a<26||a==127){r++;break}}else{var o=0;for((a&224)==192?o=1:(a&240)==224?o=2:(a&248)==240?o=3:(a<160||a==255)&&r++;o--;)if(n>=t.length||(t[n++]&192)!=128){r++;break}}}return r>0}function le(e,t,r){for(var i=r||9,n=t.length,o=e._malloc(n+1),a=0;a0&&(i+=" "),i+=e&o?t[n]:"-"}return i}function he(e){return(e&255)<<16|e>>16&255|e&65280}function pe(e,t,r){return e&255|(t&255)<<8|(r&255)<<16|4278190080}function M(e,t,r){return rt?t:r}function ge(e){return e.length==0?"":(e.match(/^[a-zA-Z_]/)||(e="_"+e),e.replace(/\W+/g,"_"))}function me(e){for(var t=0,r=e[t++],i=[],n=r;t{var i=document.createElement("script");i.onload=t,i.onerror=r,i.src=e,document.getElementsByTagName("head")[0].appendChild(i)})}function Ke(e){e.startsWith("?")&&(e=e.substr(1));var t=e.split("&");if(!t||t.length==0)return{};for(var r={},i=0;i>17,e^=e<<5,(E=e)&255}function Se(){return E}function Fe(e){E=e}function k(e,t,r,i){var n=e.createElement("canvas");return n.width=r,n.height=i,n.classList.add("emuvideo"),n.tabIndex=0,t.appendChild(n),n}function W(e,t){e.onkeydown=r=>{let i=N(r);t(r.which,r.keyCode,1|i),i||r.preventDefault()},e.onkeyup=r=>{t(r.which,r.keyCode,64|N(r))}}var C=class{constructor(t,r,i,n){this.paddle_x=128;this.paddle_y=128;this.paddle_buttons=[!1,!1,!1];this.mainElement=t,this.width=r,this.height=i,this.options=n}setRotate(t){var r=this.canvas;t?(r.style.transform="rotate("+t+"deg)",r.width{var i=Q(t,r),n=Math.round(i.x*255/this.canvas.width),o=Math.round(i.y*255/this.canvas.height);this.paddle_x=M(0,255,n),this.paddle_y=M(0,255,o)}).mousedown(r=>{this.paddle_buttons[0]=!r.shiftKey&&!r.altKey,this.paddle_buttons[1]=r.shiftKey&&!r.altKey,this.paddle_buttons[2]=r.altKey&&!r.shiftKey}).mouseup(r=>{this.paddle_buttons.fill(!1)})}},D=class extends C{constructor(){super(...arguments);this.persistenceAlpha=.5;this.jitter=1;this.gamma=.8;this.COLORS=["#111111","#1111ff","#11ff11","#11ffff","#ff1111","#ff11ff","#ffff11","#ffffff"]}create(){super.create(),this.sx=this.width/1024,this.sy=this.height/1024}clear(){var r=this.ctx;r.globalCompositeOperation="source-over",r.globalAlpha=this.persistenceAlpha,r.fillStyle="#000000",r.fillRect(0,0,this.width,this.height),r.globalAlpha=1,r.globalCompositeOperation="lighter"}drawLine(r,i,n,o,a,s){var u=this.ctx,l=this.sx,c=this.sy;if(a>0){var v=Math.pow(a/255,this.gamma);u.globalAlpha=v,u.lineWidth=3,u.beginPath();var g=this.jitter*(Math.random()-.5),m=this.jitter*(Math.random()-.5);r+=g,n+=g,i+=m,o+=m,u.moveTo(r*l,this.height-i*c),r==n&&i==o?u.lineTo(n*l+1,this.height-o*c):u.lineTo(n*l,this.height-o*c),u.strokeStyle=this.COLORS[s&7],u.stroke()}}};function De(e,t,r,i){e!=null&&e.setLineDash&&(e.fillStyle="rgba(0,0,0,0.25)",e.fillRect(t-2,0,5,32767),e.fillRect(0,r-2,32767,5),e.lineWidth=i,e.strokeStyle="rgba(255,255,255,0.75)",e.setLineDash([i*2,i*2]),e.beginPath(),e.moveTo(t,0),e.lineTo(t,32767),e.moveTo(0,r),e.lineTo(32767,r),e.stroke())}var T=class{constructor(t){this.mem=new Uint8Array(new ArrayBuffer(t))}},P=class e extends Error{constructor(r,i){super(r);this.squelchError=!0;this.$loc=i,Object.setPrototypeOf(this,e.prototype)}},X=!1,U=class{constructor(t,r){this.running=!1;this.pulsing=!1;this.nextts=0;this.useReqAnimFrame=X&&typeof window.requestAnimationFrame=="function";this.frameRate=t,this.intervalMsec=1e3/t,this.callback=r}scheduleFrame(t){var r=i=>{try{this.nextFrame(this.useReqAnimFrame?i:Date.now())}catch(n){throw this.running=!1,this.pulsing=!1,n}};this.useReqAnimFrame?window.requestAnimationFrame(r):setTimeout(r,t)}nextFrame(t){t>this.nextts&&(this.running&&this.callback(),this.nframes==0&&(this.startts=t),this.nframes++==300&&console.log("Avg framerate: "+this.nframes*1e3/(t-this.startts)+" fps")),this.nextts+=this.intervalMsec,t-this.nextts>1e3&&(this.nextts=t),this.running?this.scheduleFrame(this.nextts-t):this.pulsing=!1}isRunning(){return this.running}start(){this.running||(this.running=!0,this.nextts=0,this.nframes=0,this.pulsing||(this.scheduleFrame(0),this.pulsing=!0))}stop(){this.running=!1}};function Pe(e,t,r){for(var i="",n=e.BYTES_PER_ELEMENT||1,o=Math.ceil(16/n),a=e instanceof Float32Array||e instanceof Float64Array,s=0;s{if(!t){r(null,n,o,a);return}var s=t[n];if(s||(s=t[0]),r&&(s||i)&&r(s,n,o,a),s){var u=s.mask;u<0&&(u=-u,a&65&&(a^=65)),a&1?e[s.index]|=u:a&64&&(e[s.index]&=~u)}}}function Ue(e,t,r,i,n){var o=Z(t,r,i,n);return e.setKeyboardEvents(o),new w(o)}function Ne(e){for(var t=new Map,r=0;r{console.log("Gamepad connected:",r),this.reset()}),window.addEventListener("gamepaddisconnected",r=>{console.log("Gamepad disconnected:",r),this.reset()})}reset(){if(this.active=typeof navigator.getGamepads=="function",this.active){let r=navigator.getGamepads().length;this.state=new Array(r),this.lastState=new Array(r);for(var t=0;tt)throw Error("Data too long, "+e.length+" > "+t);var i=new T(t);return r?i.mem.set(e,t-e.length):i.mem.set(e),i.mem}function z(e,t){var r=this;function i(){var n="";t&&t.gmask&&(n+="a&="+t.gmask+";");for(var o=0;o="+s+" && a<="+u+"){",l&&(n+="a&="+l+";"),n+="return this.__fn"+o+`(a,v)&0xff;} -`}return n+="return "+((t==null?void 0:t.defaultval)|0)+";",new Function("a","v",n)}return i().bind(r)}function Oe(e,t){return new z(e,t)}function Q(e,t){var i=e.getBoundingClientRect(),n=window.getComputedStyle(e),o=parseFloat(n.borderLeftWidth)+parseFloat(n.paddingLeft),a=parseFloat(n.borderRightWidth)+parseFloat(n.paddingRight),s=parseFloat(n.borderTopWidth)+parseFloat(n.paddingTop),u=parseFloat(n.borderBottomWidth)+parseFloat(n.paddingBottom),l=i.width-o-a,c=i.height-s-u,v=e.width/Math.floor(l-2*.5),g=e.height/Math.floor(c-2*.5),m=(t.clientX-.5-i.left-o)*v,V=(t.clientY-.5-i.top-s)*g;return{x:Math.max(0,Math.min(e.width,m)),y:Math.max(0,Math.min(e.height,V))}}export{q as a,j as b,J as c,ee as d,te as e,re as f,K as g,ne as h,ie as i,ae as j,oe as k,se as l,R as m,O as n,I as o,ue as p,le as q,fe as r,ce as s,he as t,pe as u,M as v,ge as w,me as x,ye as y,B as z,ve as A,be as B,xe as C,de as D,_e as E,Ke as F,Ae as G,Ee as H,Ve as I,Te as J,we as K,Se as L,Fe as M,k as N,C as O,D as P,De as Q,T as R,P as S,U as T,Pe as U,f as V,Z as W,Ue as X,Ne as Y,w as Z,Re as _,Oe as $,Q as aa}; -//# sourceMappingURL=chunk-5H5GMVON.js.map diff --git a/gen/chunk-AK7O6YZI.js b/gen/chunk-AA227H53.js similarity index 97% rename from gen/chunk-AK7O6YZI.js rename to gen/chunk-AA227H53.js index 7b425e2a..c375308b 100644 --- a/gen/chunk-AK7O6YZI.js +++ b/gen/chunk-AA227H53.js @@ -1,4 +1,4 @@ -import{D as gt,O as pt,Q as Pt,S as _t,T as wt,U as rt,Z as kt,g as $,j as vt,s as Ve}from"./chunk-5H5GMVON.js";var Sn=[{mn:"BRK",am:"",nb:1,il:0,c1:7,c2:0,nw:3,br:1,mod:"SI"},{mn:"ORA",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SLO",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"PHP",am:"",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:"S"},{mn:"ORA",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ANC",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA",nb:3,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BPL",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"ORA",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SLO",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"CLC",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"C"},{mn:"ORA",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SLO",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"JSR",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:1,mod:"S"},{mn:"AND",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RLA",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BIT",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"ZVN"},{mn:"AND",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"PLP",am:"",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:"SCZIDVN"},{mn:"AND",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ANC",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"BIT",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"ZVN"},{mn:"AND",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BMI",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"AND",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RLA",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"AND",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"SEC",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"C"},{mn:"AND",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"RLA",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"AND",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"RTI",am:"",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:"SCZIDVN"},{mn:"EOR",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SRE",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"EOR",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"PHA",am:"",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:"S"},{mn:"EOR",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ASR",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"JMP",am:"AAAA",nb:3,il:0,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"EOR",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BVC",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"EOR",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SRE",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"EOR",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"CLI",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"I"},{mn:"EOR",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SRE",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"EOR",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"RTS",am:"",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:"S"},{mn:"ADC",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RRA",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"ADC",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"PLA",am:"",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:"SAZN"},{mn:"ADC",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ARR",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"JMP",am:"(AAAA)",nb:3,il:0,c1:5,c2:0,nw:0,br:1,mod:""},{mn:"ADC",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"BVS",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"ADC",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RRA",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ADC",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"SEI",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"I"},{mn:"ADC",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"RRA",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ADC",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"STA",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SAX",am:"(aa,x)",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"STY",am:"aa",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"aa",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"STX",am:"aa",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"SAX",am:"aa",nb:2,il:1,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"DEY",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"TXA",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ANE",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"STY",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STX",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"SAX",am:"AAAA",nb:3,il:1,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"BCC",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"STA",am:"(aa),y",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SHA",am:"(aa),y",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"STY",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STX",am:"aa,y",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"SAX",am:"aa,y",nb:3,il:1,c1:4,c2:0,nw:1,br:1,mod:""},{mn:"TYA",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"STA",am:"AAAA,y",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"TXS",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"S"},{mn:"SHS",am:"AAAA,y",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:"S"},{mn:"SHY",am:"AAAA,x",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"AAAA,x",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"SHX",am:"AAAA,y",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"SHA",am:"AAAA,y",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"LDY",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"(aa,x)",nb:2,il:1,c1:6,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"LDY",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"TAY",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"TAX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LXA",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"LDY",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"AAAA",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"BCS",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"LDA",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"LAX",am:"(aa),y",nb:2,il:1,c1:5,c2:1,nw:0,br:0,mod:"AXZN"},{mn:"LDY",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"aa,y",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"aa,y",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"CLV",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"V"},{mn:"LDA",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"TSX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAS",am:"AAAA,y",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:"SAXZN"},{mn:"LDY",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"AAAA,y",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:"AXZN"},{mn:"CPY",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"CZN"},{mn:"CMP",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"CZN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"DCP",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"CZN"},{mn:"CPY",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"CZN"},{mn:"CMP",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"INY",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"CMP",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"SBX",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"XCZN"},{mn:"CPY",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"CMP",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"BNE",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"CMP",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"CZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"DCP",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"CZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"CMP",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"CLD",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"D"},{mn:"CMP",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"CZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"DCP",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"CMP",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"CPX",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"CZN"},{mn:"SBC",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"ISB",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"CPX",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"CZN"},{mn:"SBC",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"INX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"SBC",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SBC",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"CPX",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"SBC",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"BEQ",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"SBC",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"ISB",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"SBC",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"SED",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"D"},{mn:"SBC",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"ISB",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"SBC",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"}];function at(h,t,n,a){var m=Sn[t];if(m==null)return{line:"???",nbytes:1,isaddr:!1};var o=m.mn,d=m.am,x=!1;if(d=="branch"){var i=n<128?h+2+n:h+2-(256-n);i&=65535,d="$"+$(i,4),x=!0}else d=d.replace("aa","$"+$(n,2)),d=d.replace("AAAA","$"+$(n+(a<<8),4)),d.indexOf("#")<0&&d.indexOf("$")>=0&&(x=!0);return{line:m.mn+" "+d,nbytes:m.nb,isaddr:x}}function vn(h){let t=h;if(!t||typeof t.mem_read!="function"||typeof t.mem_write!="function"||typeof t.io_read!="function"||typeof t.io_write!="function")throw"Z80: Core object is missing required functions.";let n=0,a=0,m=0,o=0,d=0,x=0,i=0,Y=0,y=0,p=0,N=0,w=0,G=0,u0=0,A=0,R=0,i0=0,T=0,W=0,f=0,c={S:0,Z:0,Y:0,H:0,X:0,P:0,N:0,C:0},g0={S:0,Z:0,Y:0,H:0,X:0,P:0,N:0,C:0},M0=0,H=0,D0=0,P=!1,v=!1,V0=!1,t0=0;function q(){return{PC:f,SP:W,IX:A,IY:R,AF:(n<<8)+U0(),BC:(a<<8)+m,DE:(o<<8)+d,HL:(x<<8)+i,AF_:(Y<<8)+Y0(),BC_:(y<<8)+p,DE_:(N<<8)+w,HL_:(G<<8)+u0,IR:(i0<<8)+T,im:M0,iff1:H,iff2:D0,halted:P,do_delayed_di:v,do_delayed_ei:V0,cycle_counter:t0}}function H0(e){f=e.PC,W=e.SP,A=e.IX,R=e.IY,n=e.AF>>8&255,T0(e.AF),a=e.BC>>8&255,m=e.BC&255,o=e.DE>>8&255,d=e.DE&255,x=e.HL>>8&255,i=e.HL&255,Y=e.AF_>>8&255,k0(e.AF_),y=e.BC_>>8&255,p=e.BC_&255,N=e.DE_>>8&255,w=e.DE_&255,G=e.HL_>>8&255,u0=e.HL_&255,i0=e.IR>>8&255,T=e.IR&255,M0=e.im,H=e.iff1,D0=e.iff2,P=e.halted,v=e.do_delayed_di,V0=e.do_delayed_ei,t0=e.cycle_counter}let z=function(){W=0,f=0,n=0,T=0,T0(0),M0=0,H=0,D0=0,P=!1,v=!1,V0=!1,t0=0},F=function(){if(P)return 1;var e=!1,b=!1;v?(v=!1,e=!0):V0&&(V0=!1,b=!0),T=T&128|(T&127)+1&127;var _=t.mem_read(f);x0(_),f=f+1&65535,e?(H=0,D0=0):b&&(H=1,D0=1);var y0=t0;return t0=0,y0},A0=function(e,b){if(e)return T=T&128|(T&127)+1&127,P=!1,D0=H,H=0,L0(f),f=102,t0+=11,!0;if(H){if(T=T&128|(T&127)+1&127,P=!1,H=0,D0=0,M0===0)f=f-1&65535,x0(b),f=f+1&65535,t0+=2;else if(M0===1)L0(f),f=56,t0+=13;else if(M0===2){L0(f);var _=i0<<8|b;f=t.mem_read(_)|t.mem_read(_+1&65535)<<8,t0+=19}return!0}},x0=function(e){var b=function(I0){return(I0&7)===0?a:(I0&7)===1?m:(I0&7)===2?o:(I0&7)===3?d:(I0&7)===4?x:(I0&7)===5?i:(I0&7)===6?t.mem_read(i|x<<8):n};if(e===118)P=!0;else if(e>=64&&e<128){var _=b(e);(e&56)>>>3?(e&56)>>>3===1?m=_:(e&56)>>>3===2?o=_:(e&56)>>>3===3?d=_:(e&56)>>>3===4?x=_:(e&56)>>>3===5?i=_:(e&56)>>>3===6?t.mem_write(i|x<<8,_):(e&56)>>>3===7&&(n=_):a=_}else if(e>=128&&e<192){var _=b(e),y0=[c0,a0,E,k,f0,n0,Z,M];y0[(e&56)>>>3](_)}else{var $0=S[e];$0()}t0+=u[e]},I=function(e){return e&=255,e&128&&(e=-((255&~e)+1)),e},U0=function(){return c.S<<7|c.Z<<6|c.Y<<5|c.H<<4|c.X<<3|c.P<<2|c.N<<1|c.C},Y0=function(){return g0.S<<7|g0.Z<<6|g0.Y<<5|g0.H<<4|g0.X<<3|g0.P<<2|g0.N<<1|g0.C},T0=function(e){c.S=(e&128)>>>7,c.Z=(e&64)>>>6,c.Y=(e&32)>>>5,c.H=(e&16)>>>4,c.X=(e&8)>>>3,c.P=(e&4)>>>2,c.N=(e&2)>>>1,c.C=e&1},k0=function(e){g0.S=(e&128)>>>7,g0.Z=(e&64)>>>6,g0.Y=(e&32)>>>5,g0.H=(e&16)>>>4,g0.X=(e&8)>>>3,g0.P=(e&4)>>>2,g0.N=(e&2)>>>1,g0.C=e&1},Q=function(e){c.Y=(e&32)>>>5,c.X=(e&8)>>>3},l0=function(e){var b=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];return b[e]},L0=function(e){W=W-1&65535,t.mem_write(W,(e&65280)>>>8),W=W-1&65535,t.mem_write(W,e&255)},b0=function(){var e=t.mem_read(W)&255;return W=W+1&65535,e|=t.mem_read(W)<<8,W=W+1&65535,e},B0=function(e){e?(f=t.mem_read(f+1&65535)|t.mem_read(f+2&65535)<<8,f=f-1&65535):f=f+2&65535},W0=function(e){if(e){t0+=5;var b=I(t.mem_read(f+1&65535));f=f+b+1&65535}else f=f+1&65535},O0=function(e){e?(t0+=7,L0(f+3&65535),f=t.mem_read(f+1&65535)|t.mem_read(f+2&65535)<<8,f=f-1&65535):f=f+2&65535},F0=function(e){e&&(t0+=6,f=b0()-1&65535)},p0=function(e){L0(f+1&65535),f=e-1&65535},c0=function(e){var b=n+e;c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(e&15)+(n&15)&16?1:0,c.P=(n&128)===(e&128)&&(n&128)!==(b&128)?1:0,c.N=0,c.C=b&256?1:0,n=b&255,Q(n)},a0=function(e){var b=n+e+c.C;c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(e&15)+(n&15)+c.C&16?1:0,c.P=(n&128)===(e&128)&&(n&128)!==(b&128)?1:0,c.N=0,c.C=b&256?1:0,n=b&255,Q(n)},E=function(e){var b=n-e;c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(n&15)-(e&15)&16?1:0,c.P=(n&128)!==(e&128)&&(n&128)!==(b&128)?1:0,c.N=1,c.C=b&256?1:0,n=b&255,Q(n)},k=function(e){var b=n-e-c.C;c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(n&15)-(e&15)-c.C&16?1:0,c.P=(n&128)!==(e&128)&&(n&128)!==(b&128)?1:0,c.N=1,c.C=b&256?1:0,n=b&255,Q(n)},M=function(e){var b=n;E(e),n=b,Q(e)},f0=function(e){n&=e&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=1,c.P=l0(n),c.N=0,c.C=0,Q(n)},Z=function(e){n=(e|n)&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=l0(n),c.N=0,c.C=0,Q(n)},n0=function(e){n=(e^n)&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=l0(n),c.N=0,c.C=0,Q(n)},L=function(e){var b=e+1;return c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(e&15)===15?1:0,c.P=e===127?1:0,c.N=0,b&=255,Q(b),b},O=function(e){var b=e-1;return c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(e&15)===0?1:0,c.P=e===128?1:0,c.N=1,b&=255,Q(b),b},P0=function(e){var b=i|x<<8,_=b+e;c.N=0,c.C=_&65536?1:0,c.H=(b&4095)+(e&4095)&4096?1:0,i=_&255,x=(_&65280)>>>8,Q(x)},X=function(e){e+=c.C;var b=i|x<<8,_=b+e;c.S=_&32768?1:0,c.Z=_&65535?0:1,c.H=(b&4095)+(e&4095)&4096?1:0,c.P=(b&32768)===(e&32768)&&(_&32768)!==(b&32768)?1:0,c.N=0,c.C=_&65536?1:0,i=_&255,x=_>>>8&255,Q(x)},r0=function(e){e+=c.C;var b=i|x<<8,_=b-e;c.S=_&32768?1:0,c.Z=_&65535?0:1,c.H=(b&4095)-(e&4095)&4096?1:0,c.P=(b&32768)!==(e&32768)&&(_&32768)!==(b&32768)?1:0,c.N=1,c.C=_&65536?1:0,i=_&255,x=_>>>8&255,Q(x)},C0=function(e){var b=t.io_read(e);return c.S=b&128?1:0,c.Z=b?0:1,c.H=0,c.P=l0(b)?1:0,c.N=0,Q(b),b},j=function(){n!==128&&(n=I(n),n=-n&255),c.S=n&128?1:0,c.Z=n?0:1,c.H=(-n&15)>0?1:0,c.P=n===128?1:0,c.N=1,c.C=n?1:0,Q(n)},m0=function(){var e=t.mem_read(i|x<<8);t.mem_write(d|o<<8,e);var b=(d|o<<8)+1;d=b&255,o=(b&65280)>>>8,b=(i|x<<8)+1,i=b&255,x=(b&65280)>>>8,b=(m|a<<8)-1,m=b&255,a=(b&65280)>>>8,c.H=0,c.P=m||a?1:0,c.N=0,c.Y=(n+e&2)>>>1,c.X=(n+e&8)>>>3},N0=function(){var e=c.C,b=t.mem_read(i|x<<8);M(b),c.C=e,c.Y=(n-b-c.H&2)>>>1,c.X=(n-b-c.H&8)>>>3;var _=(i|x<<8)+1;i=_&255,x=(_&65280)>>>8,_=(m|a<<8)-1,m=_&255,a=(_&65280)>>>8,c.P=_?1:0},V=function(){a=O(a),t.mem_write(i|x<<8,t.io_read(a<<8|m));var e=(i|x<<8)+1;i=e&255,x=(e&65280)>>>8,c.N=1},e0=function(){t.io_write(a<<8|m,t.mem_read(i|x<<8));var e=(i|x<<8)+1;i=e&255,x=(e&65280)>>>8,a=O(a),c.N=1},s0=function(){c.N=0,c.H=0;var e=t.mem_read(i|x<<8);t.mem_write(d|o<<8,e);var b=(d|o<<8)-1;d=b&255,o=(b&65280)>>>8,b=(i|x<<8)-1,i=b&255,x=(b&65280)>>>8,b=(m|a<<8)-1,m=b&255,a=(b&65280)>>>8,c.P=m||a?1:0,c.Y=(n+e&2)>>>1,c.X=(n+e&8)>>>3},_0=function(){var e=c.C,b=t.mem_read(i|x<<8);M(b),c.C=e,c.Y=(n-b-c.H&2)>>>1,c.X=(n-b-c.H&8)>>>3;var _=(i|x<<8)-1;i=_&255,x=(_&65280)>>>8,_=(m|a<<8)-1,m=_&255,a=(_&65280)>>>8,c.P=_?1:0},R0=function(){a=O(a),t.mem_write(i|x<<8,t.io_read(a<<8|m));var e=(i|x<<8)-1;i=e&255,x=(e&65280)>>>8,c.N=1},X0=function(){t.io_write(a<<8|m,t.mem_read(i|x<<8));var e=(i|x<<8)-1;i=e&255,x=(e&65280)>>>8,a=O(a),c.N=1},o0=function(e){return c.N=0,c.H=0,c.C=(e&128)>>>7,e=(e<<1|c.C)&255,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},d0=function(e){return c.N=0,c.H=0,c.C=e&1,e=e>>>1&127|c.C<<7,c.Z=e&255?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e&255},E0=function(e){c.N=0,c.H=0;var b=c.C;return c.C=(e&128)>>>7,e=(e<<1|b)&255,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},w0=function(e){c.N=0,c.H=0;var b=c.C;return c.C=e&1,e=e>>>1&127|b<<7,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},z0=function(e){return c.N=0,c.H=0,c.C=(e&128)>>>7,e=e<<1&255,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},U=function(e){return c.N=0,c.H=0,c.C=e&1,e=e>>>1&127|e&128,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},K0=function(e){return c.N=0,c.H=0,c.C=(e&128)>>>7,e=e<<1&255|1,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},G0=function(e){return c.N=0,c.H=0,c.C=e&1,e=e>>>1&127,c.Z=e?0:1,c.P=l0(e),c.S=0,Q(e),e},q0=function(e){c.N=0;var b=A+e;c.C=b&65536?1:0,c.H=(A&4095)+(e&4095)&4096?1:0,Q((b&65280)>>>8),A=b&65535},S=[];S[0]=function(){},S[1]=function(){f=f+1&65535,m=t.mem_read(f),f=f+1&65535,a=t.mem_read(f)},S[2]=function(){t.mem_write(m|a<<8,n)},S[3]=function(){var e=m|a<<8;e+=1,m=e&255,a=(e&65280)>>>8},S[4]=function(){a=L(a)},S[5]=function(){a=O(a)},S[6]=function(){f=f+1&65535,a=t.mem_read(f)},S[7]=function(){var e=c.S,b=c.Z,_=c.P;n=o0(n),c.S=e,c.Z=b,c.P=_},S[8]=function(){var e=n;n=Y,Y=e,e=U0(),T0(Y0()),k0(e)},S[9]=function(){P0(m|a<<8)},S[10]=function(){n=t.mem_read(m|a<<8)},S[11]=function(){var e=m|a<<8;e-=1,m=e&255,a=(e&65280)>>>8},S[12]=function(){m=L(m)},S[13]=function(){m=O(m)},S[14]=function(){f=f+1&65535,m=t.mem_read(f)},S[15]=function(){var e=c.S,b=c.Z,_=c.P;n=d0(n),c.S=e,c.Z=b,c.P=_},S[16]=function(){a=a-1&255,W0(a!==0)},S[17]=function(){f=f+1&65535,d=t.mem_read(f),f=f+1&65535,o=t.mem_read(f)},S[18]=function(){t.mem_write(d|o<<8,n)},S[19]=function(){var e=d|o<<8;e+=1,d=e&255,o=(e&65280)>>>8},S[20]=function(){o=L(o)},S[21]=function(){o=O(o)},S[22]=function(){f=f+1&65535,o=t.mem_read(f)},S[23]=function(){var e=c.S,b=c.Z,_=c.P;n=E0(n),c.S=e,c.Z=b,c.P=_},S[24]=function(){var e=I(t.mem_read(f+1&65535));f=f+e+1&65535},S[25]=function(){P0(d|o<<8)},S[26]=function(){n=t.mem_read(d|o<<8)},S[27]=function(){var e=d|o<<8;e-=1,d=e&255,o=(e&65280)>>>8},S[28]=function(){d=L(d)},S[29]=function(){d=O(d)},S[30]=function(){f=f+1&65535,d=t.mem_read(f)},S[31]=function(){var e=c.S,b=c.Z,_=c.P;n=w0(n),c.S=e,c.Z=b,c.P=_},S[32]=function(){W0(!c.Z)},S[33]=function(){f=f+1&65535,i=t.mem_read(f),f=f+1&65535,x=t.mem_read(f)},S[34]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,i),t.mem_write(e+1&65535,x)},S[35]=function(){var e=i|x<<8;e+=1,i=e&255,x=(e&65280)>>>8},S[36]=function(){x=L(x)},S[37]=function(){x=O(x)},S[38]=function(){f=f+1&65535,x=t.mem_read(f)},S[39]=function(){var e=n;c.N?((c.H||(n&15)>9)&&(e-=6),(c.C||n>153)&&(e-=96)):((c.H||(n&15)>9)&&(e+=6),(c.C||n>153)&&(e+=96)),c.S=e&128?1:0,c.Z=e&255?0:1,c.H=n&16^e&16?1:0,c.P=l0(e&255),c.C=c.C||n>153?1:0,n=e&255,Q(n)},S[40]=function(){W0(!!c.Z)},S[41]=function(){P0(i|x<<8)},S[42]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,i=t.mem_read(e),x=t.mem_read(e+1&65535)},S[43]=function(){var e=i|x<<8;e-=1,i=e&255,x=(e&65280)>>>8},S[44]=function(){i=L(i)},S[45]=function(){i=O(i)},S[46]=function(){f=f+1&65535,i=t.mem_read(f)},S[47]=function(){n=~n&255,c.N=1,c.H=1,Q(n)},S[48]=function(){W0(!c.C)},S[49]=function(){W=t.mem_read(f+1&65535)|t.mem_read(f+2&65535)<<8,f=f+2&65535},S[50]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,n)},S[51]=function(){W=W+1&65535},S[52]=function(){var e=i|x<<8;t.mem_write(e,L(t.mem_read(e)))},S[53]=function(){var e=i|x<<8;t.mem_write(e,O(t.mem_read(e)))},S[54]=function(){f=f+1&65535,t.mem_write(i|x<<8,t.mem_read(f))},S[55]=function(){c.N=0,c.H=0,c.C=1,Q(n)},S[56]=function(){W0(!!c.C)},S[57]=function(){P0(W)},S[58]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,n=t.mem_read(e)},S[59]=function(){W=W-1&65535},S[60]=function(){n=L(n)},S[61]=function(){n=O(n)},S[62]=function(){n=t.mem_read(f+1&65535),f=f+1&65535},S[63]=function(){c.N=0,c.H=c.C,c.C=c.C?0:1,Q(n)},S[192]=function(){F0(!c.Z)},S[193]=function(){var e=b0();m=e&255,a=(e&65280)>>>8},S[194]=function(){B0(!c.Z)},S[195]=function(){f=t.mem_read(f+1&65535)|t.mem_read(f+2&65535)<<8,f=f-1&65535},S[196]=function(){O0(!c.Z)},S[197]=function(){L0(m|a<<8)},S[198]=function(){f=f+1&65535,c0(t.mem_read(f))},S[199]=function(){p0(0)},S[200]=function(){F0(!!c.Z)},S[201]=function(){f=b0()-1&65535},S[202]=function(){B0(!!c.Z)},S[203]=function(){T=T&128|(T&127)+1&127,f=f+1&65535;var e=t.mem_read(f),b=(e&56)>>>3,_=e&7;if(e<64){var y0=[o0,d0,E0,w0,z0,U,K0,G0];_===0?a=y0[b](a):_===1?m=y0[b](m):_===2?o=y0[b](o):_===3?d=y0[b](d):_===4?x=y0[b](x):_===5?i=y0[b](i):_===6?t.mem_write(i|x<<8,y0[b](t.mem_read(i|x<<8))):_===7&&(n=y0[b](n))}else e<128?(_===0?c.Z=a&1<>>8},S[210]=function(){B0(!c.C)},S[211]=function(){f=f+1&65535,t.io_write(n<<8|t.mem_read(f),n)},S[212]=function(){O0(!c.C)},S[213]=function(){L0(d|o<<8)},S[214]=function(){f=f+1&65535,E(t.mem_read(f))},S[215]=function(){p0(16)},S[216]=function(){F0(!!c.C)},S[217]=function(){var e=a;a=y,y=e,e=m,m=p,p=e,e=o,o=N,N=e,e=d,d=w,w=e,e=x,x=G,G=e,e=i,i=u0,u0=e},S[218]=function(){B0(!!c.C)},S[219]=function(){f=f+1&65535,n=t.io_read(n<<8|t.mem_read(f))},S[220]=function(){O0(!!c.C)},S[221]=function(){T=T&128|(T&127)+1&127,f=f+1&65535;var e=t.mem_read(f),b=D[e];b?(b(),t0+=s[e]):(f=f-1&65535,t0+=u[0])},S[222]=function(){f=f+1&65535,k(t.mem_read(f))},S[223]=function(){p0(24)},S[224]=function(){F0(!c.P)},S[225]=function(){var e=b0();i=e&255,x=(e&65280)>>>8},S[226]=function(){B0(!c.P)},S[227]=function(){var e=t.mem_read(W);t.mem_write(W,i),i=e,e=t.mem_read(W+1&65535),t.mem_write(W+1&65535,x),x=e},S[228]=function(){O0(!c.P)},S[229]=function(){L0(i|x<<8)},S[230]=function(){f=f+1&65535,f0(t.mem_read(f))},S[231]=function(){p0(32)},S[232]=function(){F0(!!c.P)},S[233]=function(){f=i|x<<8,f=f-1&65535},S[234]=function(){B0(!!c.P)},S[235]=function(){var e=o;o=x,x=e,e=d,d=i,i=e},S[236]=function(){O0(!!c.P)},S[237]=function(){T=T&128|(T&127)+1&127,f=f+1&65535;var e=t.mem_read(f),b=B[e];b?(b(),t0+=r[e]):t0+=u[0]},S[238]=function(){f=f+1&65535,n0(t.mem_read(f))},S[239]=function(){p0(40)},S[240]=function(){F0(!c.S)},S[241]=function(){var e=b0();T0(e&255),n=(e&65280)>>>8},S[242]=function(){B0(!c.S)},S[243]=function(){v=!0},S[244]=function(){O0(!c.S)},S[245]=function(){L0(U0()|n<<8)},S[246]=function(){f=f+1&65535,Z(t.mem_read(f))},S[247]=function(){p0(48)},S[248]=function(){F0(!!c.S)},S[249]=function(){W=i|x<<8},S[250]=function(){B0(!!c.S)},S[251]=function(){V0=!0},S[252]=function(){O0(!!c.S)},S[253]=function(){T=T&128|(T&127)+1&127,f=f+1&65535;var e=t.mem_read(f),b=D[e];if(b){var _=A;A=R,b(),R=A,A=_,t0+=s[e]}else f=f-1&65535,t0+=u[0]},S[254]=function(){f=f+1&65535,M(t.mem_read(f))},S[255]=function(){p0(56)};let B=[];B[64]=function(){a=C0(a<<8|m)},B[65]=function(){t.io_write(a<<8|m,a)},B[66]=function(){r0(m|a<<8)},B[67]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,m),t.mem_write(e+1&65535,a)},B[68]=function(){j()},B[69]=function(){f=b0()-1&65535,H=D0},B[70]=function(){M0=0},B[71]=function(){i0=n},B[72]=function(){m=C0(a<<8|m)},B[73]=function(){t.io_write(a<<8|m,m)},B[74]=function(){X(m|a<<8)},B[75]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,m=t.mem_read(e),a=t.mem_read(e+1&65535)},B[76]=function(){j()},B[77]=function(){f=b0()-1&65535},B[78]=function(){M0=0},B[79]=function(){T=n},B[80]=function(){o=C0(a<<8|m)},B[81]=function(){t.io_write(a<<8|m,o)},B[82]=function(){r0(d|o<<8)},B[83]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,d),t.mem_write(e+1&65535,o)},B[84]=function(){j()},B[85]=function(){f=b0()-1&65535,H=D0},B[86]=function(){M0=1},B[87]=function(){n=i0,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=D0,c.N=0,Q(n)},B[88]=function(){d=C0(a<<8|m)},B[89]=function(){t.io_write(a<<8|m,d)},B[90]=function(){X(d|o<<8)},B[91]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,d=t.mem_read(e),o=t.mem_read(e+1&65535)},B[92]=function(){j()},B[93]=function(){f=b0()-1&65535,H=D0},B[94]=function(){M0=2},B[95]=function(){n=T,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=D0,c.N=0,Q(n)},B[96]=function(){x=C0(a<<8|m)},B[97]=function(){t.io_write(a<<8|m,x)},B[98]=function(){r0(i|x<<8)},B[99]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,i),t.mem_write(e+1&65535,x)},B[100]=function(){j()},B[101]=function(){f=b0()-1&65535,H=D0},B[102]=function(){M0=0},B[103]=function(){var e=t.mem_read(i|x<<8),b=e&15,_=n&15;e=(e&240)>>>4|_<<4,n=n&240|b,t.mem_write(i|x<<8,e),c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=l0(n)?1:0,c.N=0,Q(n)},B[104]=function(){i=C0(a<<8|m)},B[105]=function(){t.io_write(a<<8|m,i)},B[106]=function(){X(i|x<<8)},B[107]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,i=t.mem_read(e),x=t.mem_read(e+1&65535)},B[108]=function(){j()},B[109]=function(){f=b0()-1&65535,H=D0},B[110]=function(){M0=0},B[111]=function(){var e=t.mem_read(i|x<<8),b=e&240,_=n&15;e=(e&15)<<4|_,n=n&240|b>>>4,t.mem_write(i|x<<8,e),c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=l0(n)?1:0,c.N=0,Q(n)},B[112]=function(){C0(a<<8|m)},B[113]=function(){t.io_write(a<<8|m,0)},B[114]=function(){r0(W)},B[115]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,W&255),t.mem_write(e+1&65535,W>>>8&255)},B[116]=function(){j()},B[117]=function(){f=b0()-1&65535,H=D0},B[118]=function(){M0=1},B[120]=function(){n=C0(a<<8|m)},B[121]=function(){t.io_write(a<<8|m,n)},B[122]=function(){X(W)},B[123]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,W=t.mem_read(e),W|=t.mem_read(e+1&65535)<<8},B[124]=function(){j()},B[125]=function(){f=b0()-1&65535,H=D0},B[126]=function(){M0=2},B[160]=function(){m0()},B[161]=function(){N0()},B[162]=function(){V()},B[163]=function(){e0()},B[168]=function(){s0()},B[169]=function(){_0()},B[170]=function(){R0()},B[171]=function(){X0()},B[176]=function(){m0(),(a||m)&&(t0+=5,f=f-2&65535)},B[177]=function(){N0(),!c.Z&&(a||m)&&(t0+=5,f=f-2&65535)},B[178]=function(){V(),a&&(t0+=5,f=f-2&65535)},B[179]=function(){e0(),a&&(t0+=5,f=f-2&65535)},B[184]=function(){s0(),(a||m)&&(t0+=5,f=f-2&65535)},B[185]=function(){_0(),!c.Z&&(a||m)&&(t0+=5,f=f-2&65535)},B[186]=function(){R0(),a&&(t0+=5,f=f-2&65535)},B[187]=function(){X0(),a&&(t0+=5,f=f-2&65535)};let D=[];D[9]=function(){q0(m|a<<8)},D[25]=function(){q0(d|o<<8)},D[33]=function(){f=f+1&65535,A=t.mem_read(f),f=f+1&65535,A|=t.mem_read(f)<<8},D[34]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,A&255),t.mem_write(e+1&65535,A>>>8&255)},D[35]=function(){A=A+1&65535},D[36]=function(){A=L(A>>>8)<<8|A&255},D[37]=function(){A=O(A>>>8)<<8|A&255},D[38]=function(){f=f+1&65535,A=t.mem_read(f)<<8|A&255},D[41]=function(){q0(A)},D[42]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,A=t.mem_read(e),A|=t.mem_read(e+1&65535)<<8},D[43]=function(){A=A-1&65535},D[44]=function(){A=L(A&255)|A&65280},D[45]=function(){A=O(A&255)|A&65280},D[46]=function(){f=f+1&65535,A=t.mem_read(f)&255|A&65280},D[52]=function(){f=f+1&65535;var e=I(t.mem_read(f)),b=t.mem_read(e+A&65535);t.mem_write(e+A&65535,L(b))},D[53]=function(){f=f+1&65535;var e=I(t.mem_read(f)),b=t.mem_read(e+A&65535);t.mem_write(e+A&65535,O(b))},D[54]=function(){f=f+1&65535;var e=I(t.mem_read(f));f=f+1&65535,t.mem_write(A+e&65535,t.mem_read(f))},D[57]=function(){q0(W)},D[68]=function(){a=A>>>8&255},D[69]=function(){a=A&255},D[70]=function(){f=f+1&65535;var e=I(t.mem_read(f));a=t.mem_read(A+e&65535)},D[76]=function(){m=A>>>8&255},D[77]=function(){m=A&255},D[78]=function(){f=f+1&65535;var e=I(t.mem_read(f));m=t.mem_read(A+e&65535)},D[84]=function(){o=A>>>8&255},D[85]=function(){o=A&255},D[86]=function(){f=f+1&65535;var e=I(t.mem_read(f));o=t.mem_read(A+e&65535)},D[92]=function(){d=A>>>8&255},D[93]=function(){d=A&255},D[94]=function(){f=f+1&65535;var e=I(t.mem_read(f));d=t.mem_read(A+e&65535)},D[96]=function(){A=A&255|a<<8},D[97]=function(){A=A&255|m<<8},D[98]=function(){A=A&255|o<<8},D[99]=function(){A=A&255|d<<8},D[100]=function(){},D[101]=function(){A=A&255|(A&255)<<8},D[102]=function(){f=f+1&65535;var e=I(t.mem_read(f));x=t.mem_read(A+e&65535)},D[103]=function(){A=A&255|n<<8},D[104]=function(){A=A&65280|a},D[105]=function(){A=A&65280|m},D[106]=function(){A=A&65280|o},D[107]=function(){A=A&65280|d},D[108]=function(){A=A&65280|A>>>8},D[109]=function(){},D[110]=function(){f=f+1&65535;var e=I(t.mem_read(f));i=t.mem_read(A+e&65535)},D[111]=function(){A=A&65280|n},D[112]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,a)},D[113]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,m)},D[114]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,o)},D[115]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,d)},D[116]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,x)},D[117]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,i)},D[119]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,n)},D[124]=function(){n=A>>>8&255},D[125]=function(){n=A&255},D[126]=function(){f=f+1&65535;var e=I(t.mem_read(f));n=t.mem_read(A+e&65535)},D[132]=function(){c0(A>>>8&255)},D[133]=function(){c0(A&255)},D[134]=function(){f=f+1&65535;var e=I(t.mem_read(f));c0(t.mem_read(A+e&65535))},D[140]=function(){a0(A>>>8&255)},D[141]=function(){a0(A&255)},D[142]=function(){f=f+1&65535;var e=I(t.mem_read(f));a0(t.mem_read(A+e&65535))},D[148]=function(){E(A>>>8&255)},D[149]=function(){E(A&255)},D[150]=function(){f=f+1&65535;var e=I(t.mem_read(f));E(t.mem_read(A+e&65535))},D[156]=function(){k(A>>>8&255)},D[157]=function(){k(A&255)},D[158]=function(){f=f+1&65535;var e=I(t.mem_read(f));k(t.mem_read(A+e&65535))},D[164]=function(){f0(A>>>8&255)},D[165]=function(){f0(A&255)},D[166]=function(){f=f+1&65535;var e=I(t.mem_read(f));f0(t.mem_read(A+e&65535))},D[172]=function(){n0(A>>>8&255)},D[173]=function(){n0(A&255)},D[174]=function(){f=f+1&65535;var e=I(t.mem_read(f));n0(t.mem_read(A+e&65535))},D[180]=function(){Z(A>>>8&255)},D[181]=function(){Z(A&255)},D[182]=function(){f=f+1&65535;var e=I(t.mem_read(f));Z(t.mem_read(A+e&65535))},D[188]=function(){M(A>>>8&255)},D[189]=function(){M(A&255)},D[190]=function(){f=f+1&65535;var e=I(t.mem_read(f));M(t.mem_read(A+e&65535))},D[203]=function(){f=f+1&65535;var e=I(t.mem_read(f));f=f+1&65535;var b=t.mem_read(f),_;if(b<64){var y0=[o0,d0,E0,w0,z0,U,K0,G0],$0=y0[(b&56)>>>3],_=$0(t.mem_read(A+e&65535));t.mem_write(A+e&65535,_)}else{var I0=(b&56)>>>3;b<128?(c.N=0,c.H=1,c.Z=t.mem_read(A+e&65535)&1<>>8&255)},D[229]=function(){L0(A)},D[233]=function(){f=A-1&65535},D[249]=function(){W=A};let u=[4,10,7,6,4,4,7,4,4,11,7,6,4,4,7,4,8,10,7,6,4,4,7,4,12,11,7,6,4,4,7,4,7,10,16,6,4,4,7,4,7,11,16,6,4,4,7,4,7,10,13,6,11,11,10,4,7,11,13,6,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,7,7,7,7,7,7,4,7,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,5,10,10,10,10,11,7,11,5,10,10,0,10,17,7,11,5,10,10,11,10,11,7,11,5,4,10,11,10,0,7,11,5,10,10,19,10,11,7,11,5,4,10,4,10,0,7,11,5,10,10,4,10,11,7,11,5,6,10,4,10,0,7,11],r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,18,12,12,15,20,8,14,8,18,12,12,15,20,8,14,8,0,12,12,15,20,8,14,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,0,0,0,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],g=[8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8],s=[0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,14,20,10,8,8,11,0,0,15,20,10,8,8,11,0,0,0,0,0,23,23,19,0,0,15,0,0,0,0,0,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,8,8,8,8,8,8,19,8,8,8,8,8,8,8,19,8,19,19,19,19,19,19,0,19,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,23,0,15,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0];this.saveState=q,this.loadState=H0,this.reset=z,this.advanceInsn=F,this.interrupt=A0,this.getPC=()=>f,this.getSP=()=>W,this.getHalted=()=>P}var Ye=class{constructor(){this.retryInterrupts=!1;this.retryData=-1}buildCPU(){this.memBus&&this.ioBus&&(this.cpu=new vn({mem_read:this.memBus.read.bind(this.memBus),mem_write:this.memBus.write.bind(this.memBus),io_read:this.ioBus.read.bind(this.ioBus),io_write:this.ioBus.write.bind(this.ioBus)}))}connectMemoryBus(t){this.memBus=t,this.buildCPU()}connectIOBus(t){this.ioBus=t,this.buildCPU()}advanceInsn(){return this.retryInterrupts&&this.retryData>=0&&this.cpu.interrupt(!1,this.retryData)&&(this.retryData=-1),this.cpu.advanceInsn()}reset(){this.cpu.reset()}interrupt(t){!this.cpu.interrupt(!1,t)&&this.retryInterrupts&&(this.retryData=t)}NMI(){this.cpu.interrupt(!0,0)}getSP(){return this.cpu.getSP()}getPC(){return this.cpu.getPC()}isHalted(){return this.cpu.getHalted()}saveState(){return this.cpu.saveState()}loadState(t){this.cpu.loadState(t)}isStable(){return!0}};var it=class{constructor(){this.master=new MasterChannel}start(){this.looper||(this.looper=new AudioLooper(512),this.looper.setChannel(this.master),this.looper.activate())}stop(){this.looper&&(this.looper.setChannel(null),this.looper=null)}},Dt=class{constructor(t){this.psg=new PsgDeviceChannel;this.curreg=0;this.master=t,this.psg.setMode(PsgDeviceChannel.MODE_SIGNED),this.psg.setDevice(PsgDeviceChannel.DEVICE_AY_3_8910),t.master.addChannel(this.psg)}reset(){for(var t=15;t>=0;t--)this.selectRegister(t),this.setData(0)}selectRegister(t){this.curreg=t&15}setData(t){this.psg.writeRegisterAY(this.curreg,t&255)}readData(){return this.psg.readRegister(this.curreg)}currentRegister(){return this.curreg}},Rt=class{constructor(t){this.psg=new PsgDeviceChannel;this.master=t,this.psg.setMode(PsgDeviceChannel.MODE_SIGNED),this.psg.setDevice(PsgDeviceChannel.DEVICE_SN76489),t.master.addChannel(this.psg)}reset(){}setData(t){this.psg.writeRegisterSN(0,t&255)}};function En(h){for(var t=new it,n=1;n<=h;n++){var a=new gn;t["pokey"+n]=a,t.master.addChannel(a)}return t}function Re(h,t){for(var n=new Uint8Array(h.length*t.length),a=0,m=0;m.5?1:0;var Y0=Re(I,z),T0=Re(z,H0),k0=[Y0,z,T0,z,I,q,H0,q],Q=We(2),l0=We(6),L0=We(31),b0=We(93),B0=Re(A0,H0),W0=Re(z,Q),O0=Re(z,l0),F0=[t0,H0,B0,T0,Q,Q,L0,W0,F,z,L0,t0,l0,l0,b0,O0],p0=new Uint8Array(16),c0=new Float32Array(4),a0=new Float32Array(4),E=new Float32Array(4),k=new Uint8Array(4),M=[t0,t0,t0,t0],f0,Z,n0,L,O=!0;this.setBufferLength=function(X){f0=new Int32Array(X)},this.getBuffer=function(){return f0},this.setSampleRate=function(X){Z=X,L=v/X};function P0(X){var r0=p0[8],C0=r0&N?G:w,j,m0=X&4,N0=m0>>1,V=m0>>2;r0&i>>V?(r0&d>>V?j=p0[m0+2]*256+p0[m0+0]+7:j=(p0[m0+2]*256+p0[m0+0]+1)*C0,a0[N0+1]=L/j,a0[N0+0]=0):(r0&d>>V?j=p0[m0+0]+4:j=(p0[m0+0]+1)*C0,a0[N0+0]=L/j,j=(p0[m0+2]+1)*C0,a0[N0+1]=L/j)}this.setRegister=function(X,r0){if(X&=15,r0&=255,p0[X]!=r0)switch(p0[X]=r0,X){case 0:case 2:case 4:case 6:case 8:O=!0;break;case 1:case 3:case 5:case 7:E[X>>1]=r0&15,M[X>>1]=k0[r0>>5];break}},this.getRegister=function(X){return X&=15,p0[X]},this.setTIARegister=function(X,r0){switch(X){case 23:case 24:p0[(X&1)*4]=r0&31,O=!0;break;case 21:case 22:M[(X&1)*2]=F0[r0&15];break;case 25:case 26:E[(X&1)*2]=r0&15;break}},this.generate=function(X){O&&(P0(0),P0(4),O=!1);for(var r0=0;r00&&m0<1&&N0>0){var V=M[j],e0=c0[j]+=m0;e0>V.length&&(e0=c0[j]=e0-Math.floor(e0/V.length)*V.length);var s0=V[Math.floor(e0)];s0&&(C0+=N0)}}C0*=64,f0[r0]=C0,f0[r0+1]=C0}}},Zn=function(h){var t,n,a=[],m=0;h.onmessage=function(o){o&&o.data&&o.data.samples&&n&&(a.push(o.data.samples),m+=o.data.samples.length)},this.setBufferLength=function(o){n=new Int16Array(o),m=0},this.getBuffer=function(){return n},this.setSampleRate=function(o){t=o,h.postMessage({sampleRate:o})},this.generate=function(o){if(m=o.length)){d=0,x[Y]=o;var u0=(Y+1)%x.length;u0==i?Y=Math.floor(i+y/2)%x.length:Y=u0,o=x[Y]}},this.feedSample=function(G,u0){if(m+=G*u0,n+=a*u0,n>=1){for(m/=n;n>=1;)this.addSingleSample(m*a),n-=1;m*=n}}},ze=class{constructor(t){this.sa=new pn(t)}feedSample(t,n){this.sa.feedSample(t,n)}start(){this.sa.start()}stop(){this.sa.stop()}},Bt=class{constructor(t,n,a){this.audioGain=1/8192;this.bufferLength=n*2,this.channels=t.generate?[t]:t,this.channels.forEach(m=>{m.setBufferLength(this.bufferLength),m.setSampleRate(a)})}generate(t){var n=this.bufferLength,a=this.channels.map(o=>o.getBuffer());this.channels.forEach(o=>{o.generate(n)});for(let o=0;om+=d[o]),t.feedSample(m*this.audioGain,1)}}};var Ke=class{constructor(t,n){this.idx=0;this.sl=0;this.cur_sp=-1;this.singleFrame=!0;this.m=t,this.reset(n||1048576)}start(){this.m.connectProbe(this)}stop(){this.m.connectProbe(null)}reset(t){t&&(this.buf=new Uint32Array(t)),this.sl=0,this.cur_sp=-1,this.clear()}clear(){this.idx=0}logData(t){this.log(t)}log(t){this.idx>=this.buf.length||(this.buf[this.idx++]=t)}relog(t){this.buf[this.idx-1]=t}lastOp(){return this.idx>0?this.buf[this.idx-1]&4278190080:-1}lastAddr(){return this.idx>0?this.buf[this.idx-1]&16777215:-1}addLogBuffer(t){this.idx+t.length>this.buf.length&&(t=t.slice(0,this.buf.length-this.idx)),this.buf.set(t,this.idx),this.idx+=t.length}logClocks(t){t|=0,t>0&&(this.lastOp()==0?this.relog(this.lastAddr()+t|0):this.log(t|0))}logNewScanline(){this.log(2113929216),this.sl++}logNewFrame(){this.log(2130706432),this.sl=0,this.singleFrame&&this.clear()}logExecute(t,n){this.cur_sp!==n&&(nthis.cur_sp&&this.log(184549376|n),this.cur_sp=n),this.log(t|16777216)}logInterrupt(t){this.log(t|134217728)}logValue(t,n,a){this.log(t&65535|(n&255)<<16|a)}logRead(t,n){this.logValue(t,n,301989888)}logWrite(t,n){this.logValue(t,n,318767104)}logIORead(t,n){this.logValue(t,n,335544320)}logIOWrite(t,n){this.logValue(t,n,352321536)}logVRAMRead(t,n){this.logValue(t,n,369098752)}logVRAMWrite(t,n){this.logValue(t,n,385875968)}logIllegal(t){this.log(t|150994944)}logWait(t){this.log(t|520093696)}logDMARead(t,n){this.logValue(t,n,402653184)}logDMAWrite(t,n){this.logValue(t,n,419430400)}countEvents(t){for(var n=0,a=0;athis.rom.length)throw new Error(`ROM too big: ${t.length} > ${this.rom.length}`);this.rom.set(t)}loadState(t){this.cpu.loadState(t.c),this.ram.set(t.ram),this.inputs.set(t.inputs)}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),inputs:this.inputs.slice(0)}}loadControlsState(t){this.inputs.set(t.inputs)}saveControlsState(){return{inputs:this.inputs.slice(0)}}advanceCPU(){var t=this.cpu,n=1;return this.cpu.isStable()&&this.probe.logExecute(this.cpu.getPC(),this.cpu.getSP()),t.advanceClock?t.advanceClock():t.advanceInsn&&(n=t.advanceInsn(1)),this.probe.logClocks(n),n}probeMemoryBus(t){return{read:n=>{let a=t.read(n);return this.probe.logRead(n,a),a},write:(n,a)=>{this.probe.logWrite(n,a),t.write(n,a)},read32:n=>{let a=t.read32(n);return this.probe.logRead(n,a),a},write32:(n,a)=>{this.probe.logWrite(n,a),t.write32(n,a)}}}connectCPUMemoryBus(t){this.cpu.connectMemoryBus(this.probeMemoryBus(t))}probeIOBus(t){return{read:n=>{let a=t.read(n);return this.probe.logIORead(n,a),a},write:(n,a)=>{this.probe.logIOWrite(n,a),t.write(n,a)}}}probeDMABus(t){return{read:n=>{let a=t.read(n);return this.probe.logDMARead(n,a),a},write:(n,a)=>{this.probe.logDMAWrite(n,a),t.write(n,a)}}}connectCPUIOBus(t){this.cpu.connectIOBus(this.probeIOBus(t))}},ct=class extends ft{constructor(){super(...arguments);this.overscan=!1;this.rotate=0}getAudioParams(){return{sampleRate:this.sampleRate,stereo:!1}}connectAudio(n){this.audio=n}getVideoParams(){return{width:this.canvasWidth,height:this.numVisibleScanlines,aspect:this.aspectRatio,overscan:this.overscan,rotate:this.rotate}}connectVideo(n){this.pixels=n}},Nt=class extends ct{advanceFrame(t){this.preFrame();var n=0,a=0;this.probe.logNewFrame(),this.frameCycles=0;for(var m=0;m=64&&n<=127&&(x=It[n-64]),n>=160&&n<=191&&(x=It[n-160+64]),d++;break;case 221:case 253:var y=t==221?"ix":"iy";n==203?(x=Lt[m],i[2]=m,i[3]=a,d++):x=yt[n],x=x.replace(/[(]hl[)]/,"("+y+"+x)"),x=x.replace(/\bhl\b/,y),d++;break;default:x=yt[t];break}if((!x||!x.length)&&(x="??"),/\bxx\b/.test(x))x=x.replace(/\bxx\b/,"$"+$(i[d]+(i[d+1]<<8),4)),d+=2,Y=!0;else if(/\bx\b/.test(x)){if(x.startsWith("j")){var p=n<128?h+2+n:h+2-(256-n);p&=65535,x=x.replace(/\bx\b/,"$"+$(p,4)),Y=!0}else x=x.replace(/\bx\b/,"$"+$(i[d],2));d+=1}return{line:x.toUpperCase(),nbytes:d,isaddr:Y}}function je(){var h,t,n,a,m,o,d,x,i,Y,y=1,p=2,N=4,w=8,G=16,u0=32,A=64,R=128,i0=65534,T=65532,W=65530,f=65528,c=65526,g0=65524,M0=65522,H=0,D0,P,v,V0=[6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6,0,0,2,4,0,0,5,9,0,2,3,0,3,2,8,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,0,5,3,6,9,11,0,19,2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2,2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2,6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6,7,0,0,7,7,0,7,7,7,7,7,0,7,7,4,7,2,2,2,4,2,2,2,0,2,2,2,2,4,7,3,0,4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5,4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5,5,5,5,7,5,5,5,5,5,5,5,5,7,8,6,6,2,2,2,4,2,2,2,0,2,2,2,2,3,0,3,0,4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,7,5,5,5,5,5,5,5,5,6,6,6,6],t0=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,4,0,0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6,0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6,0,0,0,8,0,0,0,0,0,0,0,0,8,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7],q=[4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8],H0=function(u,r,g){i|=((u^r^g^g>>1)&128)>>6},z=function(u,r,g){i|=((u^r^g^g>>1)&32768)>>14},F=function(){return(t<<8)+n},A0=function(u){t=u>>8&255,n=u&255},x0=function(u){P(--d,u&255)},I=function(u){P(--d,u&255),P(--d,u>>8&255)},U0=function(u){P(--o,u&255)},Y0=function(u){P(--o,u&255),P(--o,u>>8&255)},T0=function(){return v(d++)},k0=function(){return v(d++)*256+v(d++)},Q=function(){return v(o++)},l0=function(){return v(o++)*256+v(o++)},L0=function(u){var r=0;u&128&&(I(x),r+=2),u&64&&(I(o),r+=2),u&32&&(I(m),r+=2),u&16&&(I(a),r+=2),u&8&&(x0(Y),r++),u&4&&(x0(n),r++),u&2&&(x0(t),r++),u&1&&(x0(i),r++),H+=r},b0=function(u){var r=0;u&128&&(Y0(x),r+=2),u&64&&(Y0(d),r+=2),u&32&&(Y0(m),r+=2),u&16&&(Y0(a),r+=2),u&8&&(U0(Y),r++),u&4&&(U0(n),r++),u&2&&(U0(t),r++),u&1&&(U0(i),r++),H+=r},B0=function(u){var r=0;u&1&&(i=T0(),r++),u&2&&(t=T0(),r++),u&4&&(n=T0(),r++),u&8&&(Y=T0(),r++),u&16&&(a=k0(),r+=2),u&32&&(m=k0(),r+=2),u&64&&(o=k0(),r+=2),u&128&&(x=k0(),r+=2),H+=r},W0=function(u){var r=0;u&1&&(i=Q(),r++),u&2&&(t=Q(),r++),u&4&&(n=Q(),r++),u&8&&(Y=Q(),r++),u&16&&(a=l0(),r+=2),u&32&&(m=l0(),r+=2),u&64&&(d=l0(),r+=2),u&128&&(x=l0(),r+=2),H+=r},O0=function(u){switch(u&15){case 0:return F();case 1:return a;case 2:return m;case 3:return o;case 4:return d;case 5:return x;case 8:return t;case 9:return n;case 10:return i;case 11:return Y;default:return null}},F0=function(u,r){switch(u&15){case 0:A0(r);return;case 1:a=r;return;case 2:m=r;return;case 3:o=r;return;case 4:d=r;return;case 5:x=r;return;case 8:t=r;return;case 9:n=r;return;case 10:i=r;return;case 11:Y=r;return;default:return}},p0=function(u,r){var g=u&136;(g==128||g==8)&&(g=0),r?(g=O0(u>>4),F0(u>>4,O0(u)),F0(u,g)):F0(u,O0(u>>4))},c0=function(u){return u>127?u-256:u},a0=function(u){return u>32767?u-65536:u},E=function(){var u=v(x++);return x&=65535,u},k=function(){var u=v(x++);x&=65535;var r=v(x++);return x&=65535,u*256+r},M=function(u){var r=v(u++);u&=65535;var g=v(u++);return u&=65535,r*256+g},f0=function(u,r){P(u++,r>>8&255),u&=65535,P(u,r&255)},Z=function(){var u=E(),r;switch(u&96){case 0:r=a;break;case 32:r=m;break;case 64:r=o;break;case 96:r=d;break}var g=null,s=null,e;if(u&128){switch(u&15){case 0:s=r,g=r+1,H+=2;break;case 1:s=r,g=r+2,H+=3;break;case 2:g=r-1,s=g,H+=2;break;case 3:g=r-2,s=g,H+=3;break;case 4:s=r;break;case 5:s=r+c0(n),H+=1;break;case 6:s=r+c0(t),H+=1;break;case 7:s=0;break;case 8:s=r+c0(E()),H+=1;break;case 9:s=r+a0(k()),H+=4;break;case 10:s=0;break;case 11:H+=4,s=r+F();break;case 12:e=c0(E()),s=x+e,H+=1;break;case 13:e=a0(k()),s=x+e,H+=5;break;case 14:s=0;break;case 15:H+=5,s=k();break}s&=65535,u&16&&(s=v(s)*256+v(s+1&65535),H+=3)}else{var b=u&31;b>15&&(b-=32),s=r+b,H+=1}if(g!==null)switch(u&96){case 0:a=g;break;case 32:m=g;break;case 64:o=g;break;case 96:d=g;break}return s&65535},n0=function(u){i&=~(N|w),u===0&&(i|=N),u&32768&&(i|=w)},L=function(u){return u++,u&=255,i&=~(N|p|w),i|=q[u],(u===0||u==128)&&(i|=p),u},O=function(u){return u--,u&=255,i&=~(N|p|w),i|=q[u],(u===127||u==255)&&(i|=p),u},P0=function(u,r){var g=u-r;return i&=~(y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g),g&255},X=function(u,r){var g=u-r;return i&=~(y|N|p|w),(g&65535)===0&&(i|=N),g&32768&&(i|=w),g&65536&&(i|=y),z(u,r,g),g&65535},r0=function(u,r){var g=u+r;return i&=~(u0|y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g),(g^u^r)&16&&(i|=u0),g&255},C0=function(u,r){var g=u+r;return i&=~(y|N|p|w),(g&65535)===0&&(i|=N),g&32768&&(i|=w),g&65536&&(i|=y),z(u,r,g),g&65535},j=function(u,r){var g=u+r+(i&y);return i&=~(u0|y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g),(g^u^r)&16&&(i|=u0),g&255},m0=function(u,r){var g=u-r-(i&y);return i&=~(y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g),g&255},N0=function(u,r){var g=u-r;i&=~(y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g)},V=function(u,r){var g=u-r;i&=~(y|N|p|w),(g&65535)===0&&(i|=N),g&32768&&(i|=w),g&65536&&(i|=y),z(u,r,g)},e0=function(u){return i&=~(y|N|p|w),u==128&&(i|=p),u=(~u&255)+1,u===0&&(i|=N),u&128&&(i|=w|y),u},s0=function(u){return i&=~(N|y|w),u&1&&(i|=y),u>>=1,u===0&&(i|=N),u&255},_0=function(u){return i&=~(N|y|w),u&1&&(i|=y),u=u&128|u>>1,i|=q[u],u},R0=function(u){var r=u;return i&=~(N|y|w|p),u&128&&(i|=y),u<<=1,i|=q[u],(u^r)&128&&(i|=p),u},X0=function(u){var r=u,g=i&y;return i&=~(N|y|w|p),u&128&&(i|=y),u=u<<1|g,i|=q[u],(u^r)&128&&(i|=p),u},o0=function(u){var r=i&y;return i&=~(N|y|w),u&1&&(i|=y),u=u>>1|r<<7,i|=q[u],u},d0=function(u,r){return i&=~(N|w|p),u^=r,i|=q[u],u},E0=function(u,r){return i&=~(N|w|p),u|=r,i|=q[u],u},w0=function(u,r){return i&=~(N|w|p),u&=r,i|=q[u],u},z0=function(u){return i&=~(N|w|p),u^=255,i|=q[u],i|=y,u},U=function(){return Y*256+E()},K0=function(){var u=H,r=null,g=null,s=x,e=E();switch(H+=V0[e],e){case 0:r=U(),P(r,e0(v(r)));break;case 3:r=U(),P(r,z0(v(r)));break;case 4:r=U(),P(r,s0(v(r)));break;case 6:r=U(),P(r,o0(v(r)));break;case 7:r=U(),P(r,_0(v(r)));break;case 8:r=U(),P(r,R0(v(r)));break;case 9:r=U(),P(r,X0(v(r)));break;case 10:r=U(),P(r,O(v(r)));break;case 12:r=U(),P(r,L(v(r)));break;case 13:r=U(),g=v(r),i&=~(N|w|p),i|=q[g];break;case 14:r=U(),x=r;break;case 15:r=U(),P(r,0),i&=~(y|w|p),i|=N;break;case 18:break;case 19:break;case 22:r=a0(k()),x+=r;break;case 23:r=a0(k()),I(x),x+=r;break;case 25:var b=0,_=t&240,y0=t&15;(y0>9||i&32)&&(b|=6),_>128&&y0>9&&(b|=96),(_>144||i&1)&&(b|=96),r=b+t,i&=~(y|w|N|p),r&256&&(i|=y),t=r&255,i|=q[t];break;case 26:i|=E();break;case 28:i&=E();break;case 29:t=n&128?255:0,n0(F()),i&=~p;break;case 30:g=E(),p0(g,!0);break;case 31:g=E(),p0(g,!1);break;case 32:r=c0(E()),x+=r;break;case 33:r=c0(E());break;case 34:r=c0(E()),i&(y|N)||(x+=r);break;case 35:r=c0(E()),i&(y|N)&&(x+=r);break;case 36:r=c0(E()),i&y||(x+=r);break;case 37:r=c0(E()),i&y&&(x+=r);break;case 38:r=c0(E()),i&N||(x+=r);break;case 39:r=c0(E()),i&N&&(x+=r);break;case 40:r=c0(E()),i&p||(x+=r);break;case 41:r=c0(E()),i&p&&(x+=r);break;case 42:r=c0(E()),i&w||(x+=r);break;case 43:r=c0(E()),i&w&&(x+=r);break;case 44:r=c0(E()),i&w^(i&p)<<2||(x+=r);break;case 45:r=c0(E()),i&w^(i&p)<<2&&(x+=r);break;case 46:r=c0(E()),i&w^(i&p)<<2||i&N||(x+=r);break;case 47:r=c0(E()),(i&w^(i&p)<<2||i&N)&&(x+=r);break;case 48:a=Z(),a===0?i|=N:i&=~N;break;case 49:m=Z(),m===0?i|=N:i&=~N;break;case 50:d=Z();break;case 51:o=Z();break;case 52:L0(E());break;case 53:B0(E());break;case 54:b0(E());break;case 55:W0(E());break;case 57:x=k0();break;case 58:a+=n;break;case 59:i=T0(),i&R&&(H+=9,t=T0(),n=T0(),Y=T0(),a=k0(),m=k0(),o=k0()),x=k0();break;case 60:i&=E();break;case 61:r=t*n,r===0?i|=N:i&=~N,r&128?i|=y:i&=~y,A0(r);break;case 63:i|=R,I(x),I(o),I(m),I(a),x0(Y),x0(n),x0(t),x0(i),i|=G|A,x=M(W);break;case 64:t=e0(t);break;case 67:t=z0(t);break;case 68:t=s0(t);break;case 70:t=o0(t);break;case 71:t=_0(t);break;case 72:t=R0(t);break;case 73:t=X0(t);break;case 74:t=O(t);break;case 76:t=L(t);break;case 77:i&=~(N|w|p),i|=q[t];break;case 79:t=0,i&=~(w|p|y),i|=N;break;case 80:n=e0(n);break;case 83:n=z0(n);break;case 84:n=s0(n);break;case 86:n=o0(n);break;case 87:n=_0(n);break;case 88:n=R0(n);break;case 89:n=X0(n);break;case 90:n=O(n);break;case 92:n=L(n);break;case 93:i&=~(N|w|p),i|=q[n];break;case 95:n=0,i&=~(w|p|y),i|=N;break;case 96:r=Z(),P(r,e0(v(r)));break;case 99:r=Z(),P(r,z0(v(r)));break;case 100:r=Z(),P(r,s0(v(r)));break;case 102:r=Z(),P(r,o0(v(r)));break;case 103:r=Z(),P(r,_0(v(r)));break;case 104:r=Z(),P(r,R0(v(r)));break;case 105:r=Z(),P(r,X0(v(r)));break;case 106:r=Z(),P(r,O(v(r)));break;case 108:r=Z(),P(r,L(v(r)));break;case 109:r=Z(),g=v(r),i&=~(N|w|p),i|=q[g];break;case 110:r=Z(),x=r;break;case 111:r=Z(),P(r,0),i&=~(y|w|p),i|=N;break;case 112:r=k(),P(r,e0(v(r)));break;case 115:r=k(),P(r,z0(v(r)));break;case 116:r=k(),P(r,s0(v(r)));break;case 118:r=k(),P(r,o0(v(r)));break;case 119:r=k(),P(r,_0(v(r)));break;case 120:r=k(),P(r,R0(v(r)));break;case 121:r=k(),P(r,X0(v(r)));break;case 122:r=k(),P(r,O(v(r)));break;case 124:r=k(),P(r,L(v(r)));break;case 125:r=k(),g=v(r),i&=~(N|w|p),i|=q[g];break;case 126:r=k(),x=r;break;case 127:r=k(),P(r,0),i&=~(y|w|p),i|=N;break;case 128:t=P0(t,E());break;case 129:N0(t,E());break;case 130:t=m0(t,E());break;case 131:A0(X(F(),k()));break;case 132:t=w0(t,E());break;case 133:w0(t,E());break;case 134:t=E(),i&=~(N|w|p),i|=q[t];break;case 136:t=d0(t,E());break;case 137:t=j(t,E());break;case 138:t=E0(t,E());break;case 139:t=r0(t,E());break;case 140:V(a,k());break;case 141:r=c0(E()),I(x),x+=r;break;case 142:a=k(),n0(a),i&=~p;break;case 144:r=U(),t=P0(t,v(r));break;case 145:r=U(),N0(t,v(r));break;case 146:r=U(),t=m0(t,v(r));break;case 147:r=U(),A0(X(F(),M(r)));break;case 148:r=U(),t=w0(t,v(r));break;case 149:r=U(),w0(t,v(r));break;case 150:r=U(),t=v(r),i&=~(N|w|p),i|=q[t];break;case 151:r=U(),P(r,t),i&=~(N|w|p),i|=q[t];break;case 152:r=U(),t=d0(t,v(r));break;case 153:r=U(),t=j(t,v(r));break;case 154:r=U(),t=E0(t,v(r));break;case 155:r=U(),t=r0(t,v(r));break;case 156:r=U(),V(a,M(r));break;case 157:r=U(),I(x),x=r;break;case 158:r=U(),a=M(r),n0(a),i&=~p;break;case 159:r=U(),f0(r,a),n0(a),i&=~p;break;case 160:r=Z(),t=P0(t,v(r));break;case 161:r=Z(),N0(t,v(r));break;case 162:r=Z(),t=m0(t,v(r));break;case 163:r=Z(),A0(X(F(),M(r)));break;case 164:r=Z(),t=w0(t,v(r));break;case 165:r=Z(),w0(t,v(r));break;case 166:r=Z(),t=v(r),i&=~(N|w|p),i|=q[t];break;case 167:r=Z(),P(r,t),i&=~(N|w|p),i|=q[t];break;case 168:r=Z(),t=d0(t,v(r));break;case 169:r=Z(),t=j(t,v(r));break;case 170:r=Z(),t=E0(t,v(r));break;case 171:r=Z(),t=r0(t,v(r));break;case 172:r=Z(),V(a,M(r));break;case 173:r=Z(),I(x),x=r;break;case 174:r=Z(),a=M(r),n0(a),i&=~p;break;case 175:r=Z(),f0(r,a),n0(a),i&=~p;break;case 176:r=k(),t=P0(t,v(r));break;case 177:r=k(),N0(t,v(r));break;case 178:r=k(),t=m0(t,v(r));break;case 179:r=k(),A0(X(F(),M(r)));break;case 180:r=k(),t=w0(t,v(r));break;case 181:r=k(),w0(t,v(r));break;case 182:r=k(),t=v(r),i&=~(N|w|p),i|=q[t];break;case 183:r=k(),P(r,t),i&=~(N|w|p),i|=q[t];break;case 184:r=k(),t=d0(t,v(r));break;case 185:r=k(),t=j(t,v(r));break;case 186:r=k(),t=E0(t,v(r));break;case 187:r=k(),t=r0(t,v(r));break;case 188:r=k(),V(a,M(r));break;case 189:r=k(),I(x),x=r;break;case 190:r=k(),a=M(r),n0(a),i&=~p;break;case 191:r=k(),f0(r,a),n0(a),i&=~p;break;case 192:n=P0(n,E());break;case 193:N0(n,E());break;case 194:n=m0(n,E());break;case 195:A0(C0(F(),k()));break;case 196:n=w0(n,E());break;case 197:w0(n,E());break;case 198:n=E(),i&=~(N|w|p),i|=q[n];break;case 200:n=d0(n,E());break;case 201:n=j(n,E());break;case 202:n=E0(n,E());break;case 203:n=r0(n,E());break;case 204:r=k(),A0(r),n0(r),i&=~p;break;case 206:o=k(),n0(o),i&=~p;break;case 208:r=U(),n=P0(n,v(r));break;case 209:r=U(),N0(n,v(r));break;case 210:r=U(),n=m0(n,v(r));break;case 211:r=U(),A0(C0(F(),M(r)));break;case 212:r=U(),n=w0(n,v(r));break;case 213:r=U(),w0(n,v(r));break;case 214:r=U(),n=v(r),i&=~(N|w|p),i|=q[n];break;case 215:r=U(),P(r,n),i&=~(N|w|p),i|=q[n];break;case 216:r=U(),n=d0(n,v(r));break;case 217:r=U(),n=j(n,v(r));break;case 218:r=U(),n=E0(n,v(r));break;case 219:r=U(),n=r0(n,v(r));break;case 220:r=U(),g=M(r),A0(g),n0(g),i&=~p;break;case 221:r=U(),f0(r,F()),i&=~p;break;case 222:r=U(),o=M(r),n0(o),i&=~p;break;case 223:r=U(),f0(r,o),n0(o),i&=~p;break;case 224:r=Z(),n=P0(n,v(r));break;case 225:r=Z(),N0(n,v(r));break;case 226:r=Z(),n=m0(n,v(r));break;case 227:r=Z(),A0(C0(F(),M(r)));break;case 228:r=Z(),n=w0(n,v(r));break;case 229:r=Z(),w0(n,v(r));break;case 230:r=Z(),n=v(r),i&=~(N|w|p),i|=q[n];break;case 231:r=Z(),P(r,n),i&=~(N|w|p),i|=q[n];break;case 232:r=Z(),n=d0(n,v(r));break;case 233:r=Z(),n=j(n,v(r));break;case 234:r=Z(),n=E0(n,v(r));break;case 235:r=Z(),n=r0(n,v(r));break;case 236:r=Z(),g=M(r),A0(g),n0(g),i&=~p;break;case 237:r=Z(),f0(r,F()),i&=~p;break;case 238:r=Z(),o=M(r),n0(o),i&=~p;break;case 239:r=Z(),f0(r,o),n0(o),i&=~p;break;case 240:r=k(),n=P0(n,v(r));break;case 241:r=k(),N0(n,v(r));break;case 242:r=k(),n=m0(n,v(r));break;case 243:r=k(),A0(C0(F(),M(r)));break;case 244:r=k(),n=w0(n,v(r));break;case 245:r=k(),w0(n,v(r));break;case 246:r=k(),n=v(r),i&=~(N|w|p),i|=q[n];break;case 247:r=k(),P(r,n),i&=~(N|w|p),i|=q[n];break;case 248:r=k(),n=d0(n,v(r));break;case 249:r=k(),n=j(n,v(r));break;case 250:r=k(),n=E0(n,v(r));break;case 251:r=k(),n=r0(n,v(r));break;case 252:r=k(),g=M(r),A0(g),n0(g),i&=~p;break;case 253:r=k(),f0(r,F()),i&=~p;break;case 254:r=k(),o=M(r),n0(o),i&=~p;break;case 255:r=k(),f0(r,o),n0(o),i&=~p;break;case 16:switch(e=E(),H+=t0[e],e){case 33:r=a0(k());break;case 34:r=a0(k()),i&(y|N)||(x+=r);break;case 35:r=a0(k()),i&(y|N)&&(x+=r);break;case 36:r=a0(k()),i&y||(x+=r);break;case 37:r=a0(k()),i&y&&(x+=r);break;case 38:r=a0(k()),i&N||(x+=r);break;case 39:r=a0(k()),i&N&&(x+=r);break;case 40:r=a0(k()),i&p||(x+=r);break;case 41:r=a0(k()),i&p&&(x+=r);break;case 42:r=a0(k()),i&w||(x+=r);break;case 43:r=a0(k()),i&w&&(x+=r);break;case 44:r=a0(k()),i&w^(i&p)<<2||(x+=r);break;case 45:r=a0(k()),i&w^(i&p)<<2&&(x+=r);break;case 46:r=a0(k()),i&w^(i&p)<<2||i&N||(x+=r);break;case 47:r=a0(k()),(i&w^(i&p)<<2||i&N)&&(x+=r);break;case 63:i|=R,I(x),I(o),I(m),I(a),x0(Y),x0(n),x0(t),x0(i),i|=G|A,x=M(g0);break;case 131:V(F(),k());break;case 140:V(m,k());break;case 142:m=k(),n0(m),i&=~p;break;case 147:r=U(),V(F(),M(r));break;case 156:r=U(),V(m,M(r));break;case 158:r=U(),m=M(r),n0(m),i&=~p;break;case 159:r=U(),f0(r,m),n0(m),i&=~p;break;case 163:r=Z(),V(F(),M(r));break;case 172:r=Z(),V(m,M(r));break;case 174:r=Z(),m=M(r),n0(m),i&=~p;break;case 175:r=Z(),f0(r,m),n0(m),i&=~p;break;case 179:r=k(),V(F(),M(r));break;case 188:r=k(),V(m,M(r));break;case 190:r=k(),m=M(r),n0(m),i&=~p;break;case 191:r=k(),f0(r,m),n0(m),i&=~p;break;case 206:d=k(),n0(d),i&=~p;break;case 222:r=U(),d=M(r),n0(d),i&=~p;break;case 223:r=U(),f0(r,d),n0(d),i&=~p;break;case 238:r=Z(),d=M(r),n0(d),i&=~p;break;case 239:r=Z(),f0(r,d),n0(d),i&=~p;break;case 254:r=k(),d=M(r),n0(d),i&=~p;break;case 255:r=k(),f0(r,d),n0(d),i&=~p;break}break;case 17:switch(e=E(),H+=t0[e],e){case 63:i|=R,I(x),I(o),I(m),I(a),x0(Y),x0(n),x0(t),x0(i),i|=G|A,x=M(M0);break;case 131:V(o,k());break;case 140:V(d,k());break;case 147:r=U(),V(o,M(r));break;case 156:r=U(),V(d,M(r));break;case 163:r=Z(),V(o,M(r));break;case 172:r=Z(),V(d,M(r));break;case 179:r=k(),V(o,M(r));break;case 188:r=k(),V(d,M(r));break}break}return t&=255,n&=255,i&=255,Y&=255,a&=65535,m&=65535,o&=65535,d&=65535,x&=65535,H-u},G0=function(){x=M(i0),Y=0,i|=A|G,H=0,t=n=Y=a=m=o=d=0},q0=[[2,1,"NEG"],[1,0,"???"],[1,0,"???"],[2,1,"COM"],[2,1,"LSR"],[1,0,"???"],[2,1,"ROR"],[2,1,"ASR"],[2,1,"LSL"],[2,1,"ROL"],[2,1,"DEC"],[1,0,"???"],[2,1,"INC"],[2,1,"TST"],[2,1,"JMP"],[2,1,"CLR"],[1,0,"Prefix"],[1,0,"Prefix"],[1,2,"NOP"],[1,2,"SYNC"],[1,0,"???"],[1,0,"???"],[3,3,"LBRA"],[3,3,"LBSR"],[1,0,"???"],[1,2,"DAA"],[2,4,"ORCC"],[1,0,"???"],[2,4,"ANDCC"],[1,2,"SEX"],[2,20,"EXG"],[2,20,"TFR"],[2,5,"BRA"],[2,5,"BRN"],[2,5,"BHI"],[2,5,"BLS"],[2,5,"BCC"],[2,5,"BCS"],[2,5,"BNE"],[2,5,"BEQ"],[2,5,"BVC"],[2,5,"BVS"],[2,5,"BPL"],[2,5,"BMI"],[2,5,"BGE"],[2,5,"BLT"],[2,5,"BGT"],[2,5,"BLE"],[2,6,"LEAX"],[2,6,"LEAY"],[2,6,"LEAS"],[2,6,"LEAU"],[2,10,"PSHS"],[2,10,"PULS"],[2,11,"PSHU"],[2,11,"PULU"],[1,0,"???"],[1,2,"RTS"],[1,2,"ABX"],[1,2,"RTI"],[2,2,"CWAI"],[1,2,"MUL"],[1,2,"RESET"],[1,2,"SWI1"],[1,2,"NEGA"],[1,0,"???"],[1,0,"???"],[1,2,"COMA"],[1,2,"LSRA"],[1,0,"???"],[1,2,"RORA"],[1,2,"ASRA"],[1,2,"ASLA"],[1,2,"ROLA"],[1,2,"DECA"],[1,0,"???"],[1,2,"INCA"],[1,2,"TSTA"],[1,0,"???"],[1,2,"CLRA"],[1,2,"NEGB"],[1,0,"???"],[1,0,"???"],[1,2,"COMB"],[1,2,"LSRB"],[1,0,"???"],[1,2,"RORB"],[1,2,"ASRB"],[1,2,"ASLB"],[1,2,"ROLB"],[1,2,"DECB"],[1,0,"???"],[1,2,"INCB"],[1,2,"TSTB"],[1,0,"???"],[1,2,"CLRB"],[2,6,"NEG"],[1,0,"???"],[1,0,"???"],[2,6,"COM"],[2,6,"LSR"],[1,0,"???"],[2,6,"ROR"],[2,6,"ASR"],[2,6,"LSL"],[2,6,"ROL"],[2,6,"DEC"],[1,0,"???"],[2,6,"INC"],[2,6,"TST"],[2,6,"JMP"],[2,6,"CLR"],[3,7,"NEG"],[1,0,"???"],[1,0,"???"],[3,7,"COM"],[3,7,"LSR"],[1,0,"???"],[3,7,"ROR"],[3,7,"ASR"],[3,7,"LSL"],[3,7,"ROL"],[3,7,"DEC"],[1,0,"???"],[3,7,"INC"],[3,7,"TST"],[3,7,"JMP"],[3,7,"CLR"],[2,4,"SUBA"],[2,4,"CMPA"],[2,4,"SBCA"],[3,8,"SUBD"],[2,4,"ANDA"],[2,4,"BITA"],[2,4,"LDA"],[1,0,"???"],[2,4,"EORA"],[2,4,"ADCA"],[2,4,"ORA"],[2,4,"ADDA"],[3,8,"CMPX"],[2,5,"BSR"],[3,8,"LDX"],[1,0,"???"],[2,1,"SUBA"],[2,1,"CMPA"],[2,1,"SBCA"],[2,1,"SUBd"],[2,1,"ANDA"],[2,1,"BITA"],[2,1,"LDA"],[2,1,"STA"],[2,1,"EORA"],[2,1,"ADCA"],[2,1,"ORA"],[2,1,"ADDA"],[2,1,"CMPX"],[2,1,"JSR"],[2,1,"LDX"],[2,1,"STX"],[2,6,"SUBA"],[2,6,"CMPA"],[2,6,"SBCA"],[2,6,"SUBD"],[2,6,"ANDA"],[2,6,"BITA"],[2,6,"LDA"],[2,6,"STA"],[2,6,"EORA"],[2,6,"ADCA"],[2,6,"ORA"],[2,6,"ADDA"],[2,6,"CMPX"],[2,6,"JSR"],[2,6,"LDX"],[2,6,"STX"],[3,7,"SUBA"],[3,7,"CMPA"],[3,7,"SBCA"],[3,7,"SUBD"],[3,7,"ANDA"],[3,7,"BITA"],[3,7,"LDA"],[3,7,"STA"],[3,7,"EORA"],[3,7,"ADCA"],[3,7,"ORA"],[3,7,"ADDA"],[3,7,"CMPX"],[3,7,"JSR"],[3,7,"LDX"],[3,7,"STX"],[2,4,"SUBB"],[2,4,"CMPB"],[2,4,"SBCB"],[3,8,"ADDD"],[2,4,"ANDB"],[2,4,"BITB"],[2,4,"LDB"],[1,0,"???"],[2,4,"EORB"],[2,4,"ADCB"],[2,4,"ORB"],[2,4,"ADDB"],[3,8,"LDD"],[1,0,"???"],[3,8,"LDU"],[1,0,"???"],[2,1,"SUBB"],[2,1,"CMPB"],[2,1,"SBCB"],[2,1,"ADDD"],[2,1,"ANDB"],[2,1,"BITB"],[2,1,"LDB"],[2,1,"STB"],[2,1,"EORB"],[2,1,"ADCB"],[2,1,"ORB "],[2,1,"ADDB"],[2,1,"LDD "],[2,1,"STD "],[2,1,"LDU "],[2,1,"STU "],[2,6,"SUBB"],[2,6,"CMPB"],[2,6,"SBCB"],[2,6,"ADDD"],[2,6,"ANDB"],[2,6,"BITB"],[2,6,"LDB"],[2,6,"STB"],[2,6,"EORB"],[2,6,"ADCB"],[2,6,"ORB"],[2,6,"ADDB"],[2,6,"LDD"],[2,6,"STD"],[2,6,"LDU"],[2,6,"STU"],[3,7,"SUBB"],[3,7,"CMPB"],[3,7,"SBCB"],[3,7,"ADDD"],[3,7,"ANDB"],[3,7,"BITB"],[3,7,"LDB"],[3,7,"STB"],[3,7,"EORB"],[3,7,"ADCB"],[3,7,"ORB"],[3,7,"ADDB"],[3,7,"LDD"],[3,7,"STD"],[3,7,"LDU"],[3,7,"STU"]],S={63:[2,2,"SWI3"],131:[4,8,"CMPU"],140:[4,8,"CMPS"],147:[3,1,"CMPU"],156:[3,1,"CMPS"],163:[3,6,"CMPU"],172:[3,6,"CMPS"],179:[4,7,"CMPU"],188:[4,7,"CMPS"]},B={33:[5,3,"LBRN"],34:[5,3,"LBHI"],35:[5,3,"LBLS"],36:[5,3,"LBCC"],37:[5,3,"LBCS"],38:[5,3,"LBNE"],39:[5,3,"LBEQ"],40:[5,3,"LBVC"],41:[5,3,"LBVS"],42:[5,3,"LBPL"],43:[5,3,"LBMI"],44:[5,3,"LBGE"],45:[5,3,"LBLT"],46:[5,3,"LBGT"],47:[5,3,"LBLE"],63:[2,2,"SWI2"],131:[4,8,"CMPD"],140:[4,8,"CMPY"],142:[4,8,"LDY"],147:[3,1,"CMPD"],156:[3,1,"CMPY"],158:[3,1,"LDY"],159:[3,1,"STY"],163:[3,6,"CMPD"],172:[3,6,"CMPY"],174:[3,6,"LDY"],175:[3,6,"STY"],179:[4,7,"CMPD"],188:[4,7,"CMPY"],190:[4,7,"LDY"],191:[4,7,"STY"],206:[4,8,"LDS"],222:[3,1,"LDS"],223:[3,1,"STS"],238:[3,6,"LDS"],239:[3,6,"STS"],254:[4,7,"LDS"],255:[4,7,"STS"]},D=function(u,r,g,s,e,b){var _=function(ue,Qe){for(var Pe=ue.toString(16);Pe.length>5];if(!(xe&128)){var ve=xe&31;ve>15&&(ve=ve-32),J+=ve+","+Z0;break}var Ge=xe&16,Oe=xe&15,ge=g>127?g-256:g,pe=g*256+s>32767?g*256+s-65536:g*256+s;if(Ge)switch(Oe){case 0:J+="???";break;case 1:J+="[,"+Z0+"++]";break;case 2:J+="???";break;case 3:J+="[,--"+Z0+"]";break;case 4:J+="[,"+Z0+"]";break;case 5:J+="[B,"+Z0+"]";break;case 6:J+="[A,"+Z0+"]";break;case 7:J+="???";break;case 8:J+="["+ge+","+Z0+"]",j0++;break;case 9:J+="["+pe+","+Z0+"]",j0+=2;break;case 10:J+="???";break;case 11:J+="[D,"+Z0+"]";break;case 12:J+="["+ge+",PC]",j0++;break;case 13:J+="["+pe+",PC]",j0+=2;break;case 14:J+="???";break;case 15:J+="[$"+$0(g*256+s)+"]",j0+=2;break}else switch(Oe){case 0:J+=","+Z0+"+";break;case 1:J+=","+Z0+"++";break;case 2:J+=",-"+Z0;break;case 3:J+=",--"+Z0;break;case 4:J+=","+Z0;break;case 5:J+="B,"+Z0;break;case 6:J+="A,"+Z0;break;case 7:J+="???";break;case 8:J+=ge+","+Z0,j0++;break;case 9:J+=pe+","+Z0,j0+=2;break;case 10:J+="???";break;case 11:J+="D,"+Z0;break;case 12:J+=ge+",PC",j0++;break;case 13:J+=pe+",PC",j0+=2;break;case 14:J+="???";break;case 15:J+="$"+$0(g*256+s),j0+=2;break}break;case 7:J+=" $"+$0(r*256+g);break;case 8:J+=" #$"+$0(r*256+g);break;case 10:for(I0=["PC","U","Y","X","DP","B","A","CC"],ne=[],Q0=0;Q0<8;Q0++)(r&1)!==0&&ne.push(I0[7-Q0]),r>>=1;J+=" "+ne.join(",");break;case 11:for(I0=["PC","S","Y","X","DP","B","A","CC"],ne=[],Q0=0;Q0<8;Q0++)(r&1)!==0&&ne.push(I0[7-Q0]),r>>=1;J+=" "+ne.join(",");break;case 20:I0=["D","X","Y","U","S","PC","?","?","A","B","CC","DP","?","?","?","?"],J+=" "+I0[r>>4]+","+I0[r&15];break}return{line:J,nbytes:j0}};return{steps:function(u){for(;u>0;)u-=K0()},runFrame:function(u){for(;H>g;s===0?u+=r[g].toLowerCase():u+=r[g]}return u},disasm:D,isStable:function(){return!0}}}var ot=function(){var h=this;this.powerOn=function(){this.reset()},this.powerOff=function(){},this.clockPulse=function(){n&&(G++,A[G]())},this.connectBus=function(l){t=l},this.setRDY=function(l){n=l},this.isRDY=function(){return n},this.reset=function(){p=1,G=-1,A=[z],a=t.read(H)|t.read(H+1)<<8,this.setRDY(!0)};var t,n=!1,a=0,m=0,o=0,d=0,x=0,i=0,Y=0,y=0,p=0,N=0,w=0,G=-1,u0=-1,A,R=0,i0=0,T=0,W=!1,f=0,c=0,g0=0;let M0=65530,H=65532,D0=65534,P=0,v=1,V0=7,t0=6,q=1,H0=0;this.debug=!1,this.trace=!1;var z=function(){u0=t.read(a),A=e[u0],G=0,a++},F=z,A0=function(){t.read(a)},x0=function(){c=t.read(a),a++},I=function(){i0=t.read(a),a++},U0=function(){i0|=t.read(a)<<8,a++},Y0=function(){i0=t.read(T)},T0=function(){i0|=t.read(T)<<8},k0=function(){T=t.read(a),a++},Q=function(){T|=t.read(a)<<8,a++},l0=function(){T=t.read(f)},L0=function(){T|=t.read(f)<<8},b0=function(){var l=(T&255)+d;W=l>255,T=T&65280|l&255},B0=function(){var l=(T&255)+x;W=l>255,T=T&65280|l&255},W0=function(){var l=(T&255)+1;W=l>255,T=T&65280|l&255},O0=function(){W&&(T=T+256&65535)},F0=function(){f=t.read(a),a++},p0=function(){f|=t.read(a)<<8,a++},c0=function(){var l=(f&255)+1;f=f&65280|l&255},a0=function(){R=t.read(a),a++},E=function(){R=t.read(i0)},k=function(){R=t.read(T)},M=function(){t.write(i0,R)},f0=function(){t.write(T,R)},Z=function(){var l=a&255,C=l+c&255;c>127?g0=C>l?-256:0:g0=C>>7,Y=l>>>6&1,y=l>>>3&1,p=l>>>2&1,N=l>>>1&1,w=l&1},V=function(l){h.debug&&h.breakpoint("Illegal Opcode: "+l)},e0=function(l){return[z,A0,function(){l(),F()}]},s0=function(l){return[z,a0,function(){l(),F()}]},_0=function(l){return[z,I,E,function(){l(),F()}]},R0=function(l){return[z,I,U0,E,function(){l(),F()}]},X0=function(l){return[z,k0,k,function(){b0(),Y0()},function(){W0(),T0()},E,function(){l(),F()}]},o0=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,Q,function(){C(),k(),O0()},function(){W?k():(K(),F())},function(){K(),F()}]}},d0=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,k,function(){C(),k()},function(){K(),F()}]}},E0=function(l){return[z,F0,l0,function(){c0(),L0()},function(){B0(),k(),O0()},function(){W?k():(l(),F())},function(){l(),F()}]},w0=function(l){return[z,I,function(){l(),M()},F]},z0=function(l){return[z,I,U0,function(){l(),M()},F]},U=function(l){return[z,k0,k,function(){b0(),Y0()},function(){W0(),T0()},function(){l(),M()},F]},K0=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,Q,function(){C(),k(),O0()},function(){K(),f0()},F]}},G0=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,k,function(){C(),K(),f0()},F]}},q0=function(l){return[z,F0,l0,function(){c0(),L0()},function(){B0(),k(),O0()},function(){l(),f0()},F]},S=function(l){return[z,I,E,M,function(){l(),M()},F]},B=function(l){return[z,I,U0,E,M,function(){l(),M()},F]},D=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,k,function(){C(),k()},f0,function(){K(),f0()},F]}},u=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,Q,function(){C(),k(),O0()},k,f0,function(){K(),f0()},F]}},r=function(l){return[z,k0,k,function(){b0(),Y0()},function(){W0(),T0()},E,M,function(){l(),M()},F]},g=function(l){return[z,F0,l0,function(){c0(),L0()},function(){B0(),k(),O0()},k,f0,function(){l(),f0()},F]},s=new Array(256),e=new Array(256);s[0]="BRK",e[0]=xn(),s[1]="ORA",e[1]=se(X0),s[2]="uKIL",e[2]=J0(),s[3]="uSLO",e[3]=Ae(r),s[4]="uNOP",e[4]=v0(_0),s[5]="ORA",e[5]=se(_0),s[6]="ASL",e[6]=Ze(S),s[7]="uSLO",e[7]=Ae(S),s[8]="PHP",e[8]=fn(),s[9]="ORA",e[9]=se(s0),s[10]="ASL",e[10]=b(),s[11]="uANC",e[11]=At(s0),s[12]="uNOP",e[12]=v0(R0),s[13]="ORA",e[13]=se(R0),s[14]="ASL",e[14]=Ze(B),s[15]="uSLO",e[15]=Ae(B),s[16]="BPL",e[16]=oe(V0,0),s[17]="ORA",e[17]=se(E0),s[18]="uKIL",e[18]=J0(),s[19]="uSLO",e[19]=Ae(g),s[20]="uNOP",e[20]=v0(d0(P)),s[21]="ORA",e[21]=se(d0(P)),s[22]="ASL",e[22]=Ze(D(P)),s[23]="uSLO",e[23]=Ae(D(P)),s[24]="CLC",e[24]=_(),s[25]="ORA",e[25]=se(o0(v)),s[26]="uNOP",e[26]=v0(e0),s[27]="uSLO",e[27]=Ae(u(v)),s[28]="uNOP",e[28]=v0(o0(P)),s[29]="ORA",e[29]=se(o0(P)),s[30]="ASL",e[30]=Ze(u(P)),s[31]="uSLO",e[31]=Ae(u(P)),s[32]="JSR",e[32]=on(),s[33]="AND",e[33]=ae(X0),s[34]="uKIL",e[34]=J0(),s[35]="uRLA",e[35]=de(r),s[36]="BIT",e[36]=ht(_0),s[37]="AND",e[37]=ae(_0),s[38]="ROL",e[38]=Ue(S),s[39]="uRLA",e[39]=de(S),s[40]="PLP",e[40]=sn(),s[41]="AND",e[41]=ae(s0),s[42]="ROL",e[42]=xe(),s[43]="uANC",e[43]=At(s0),s[44]="BIT",e[44]=ht(R0),s[45]="AND",e[45]=ae(R0),s[46]="ROL",e[46]=Ue(B),s[47]="uRLA",e[47]=de(B),s[48]="BMI",e[48]=oe(V0,1),s[49]="AND",e[49]=ae(E0),s[50]="uKIL",e[50]=J0(),s[51]="uRLA",e[51]=de(g),s[52]="uNOP",e[52]=v0(d0(P)),s[53]="AND",e[53]=ae(d0(P)),s[54]="ROL",e[54]=Ue(D(P)),s[55]="uRLA",e[55]=de(D(P)),s[56]="SEC",e[56]=ve(),s[57]="AND",e[57]=ae(o0(v)),s[58]="uNOP",e[58]=v0(e0),s[59]="uRLA",e[59]=de(u(v)),s[60]="uNOP",e[60]=v0(o0(P)),s[61]="AND",e[61]=ae(o0(P)),s[62]="ROL",e[62]=Ue(u(P)),s[63]="uRLA",e[63]=de(u(P)),s[64]="RTI",e[64]=ln(),s[65]="EOR",e[65]=fe(X0),s[66]="uKIL",e[66]=J0(),s[67]="uSRE",e[67]=Ce(r),s[68]="uNOP",e[68]=v0(_0),s[69]="EOR",e[69]=fe(_0),s[70]="LSR",e[70]=Fe(S),s[71]="uSRE",e[71]=Ce(S),s[72]="PHA",e[72]=an(),s[73]="EOR",e[73]=fe(s0),s[74]="LSR",e[74]=Je(),s[75]="uASR",e[75]=Gt(s0),s[76]="JMP",e[76]=dn(),s[77]="EOR",e[77]=fe(R0),s[78]="LSR",e[78]=Fe(B),s[79]="uSRE",e[79]=Ce(B),s[80]="BVC",e[80]=oe(t0,0),s[81]="EOR",e[81]=fe(E0),s[82]="uKIL",e[82]=J0(),s[83]="uSRE",e[83]=Ce(g),s[84]="uNOP",e[84]=v0(d0(P)),s[85]="EOR",e[85]=fe(d0(P)),s[86]="LSR",e[86]=Fe(D(P)),s[87]="uSRE",e[87]=Ce(D(P)),s[88]="CLI",e[88]=$0(),s[89]="EOR",e[89]=fe(o0(v)),s[90]="uNOP",e[90]=v0(e0),s[91]="uSRE",e[91]=Ce(u(v)),s[92]="uNOP",e[92]=v0(o0(P)),s[93]="EOR",e[93]=fe(o0(P)),s[94]="LSR",e[94]=Fe(u(P)),s[95]="uSRE",e[95]=Ce(u(P)),s[96]="RTS",e[96]=bn(),s[97]="ADC",e[97]=re(X0),s[98]="uKIL",e[98]=J0(),s[99]="uRRA",e[99]=he(r),s[100]="uNOP",e[100]=v0(_0),s[101]="ADC",e[101]=re(_0),s[102]="ROR",e[102]=Xe(S),s[103]="uRRA",e[103]=he(S),s[104]="PLA",e[104]=cn(),s[105]="ADC",e[105]=re(s0),s[106]="ROR",e[106]=Z0(),s[107]="uARR",e[107]=Jt(s0),s[108]="JMP",e[108]=hn(),s[109]="ADC",e[109]=re(R0),s[110]="ROR",e[110]=Xe(B),s[111]="uRRA",e[111]=he(B),s[112]="BVS",e[112]=oe(t0,1),s[113]="ADC",e[113]=re(E0),s[114]="uKIL",e[114]=J0(),s[115]="uRRA",e[115]=he(g),s[116]="uNOP",e[116]=v0(d0(P)),s[117]="ADC",e[117]=re(d0(P)),s[118]="ROR",e[118]=Xe(D(P)),s[119]="uRRA",e[119]=he(D(P)),s[120]="SEI",e[120]=Oe(),s[121]="ADC",e[121]=re(o0(v)),s[122]="uNOP",e[122]=v0(e0),s[123]="uRRA",e[123]=he(u(v)),s[124]="uNOP",e[124]=v0(o0(P)),s[125]="ADC",e[125]=re(o0(P)),s[126]="ROR",e[126]=Xe(u(P)),s[127]="uRRA",e[127]=he(u(P)),s[128]="uNOP",e[128]=v0(s0),s[129]="STA",e[129]=me(U),s[130]="uNOP",e[130]=v0(s0),s[131]="uSAX",e[131]=Ee(U),s[132]="STY",e[132]=nt(w0),s[133]="STA",e[133]=me(w0),s[134]="STX",e[134]=tt(w0),s[135]="uSAX",e[135]=Ee(w0),s[136]="DEY",e[136]=Q0(),s[137]="uNOP",e[137]=v0(s0),s[138]="TXA",e[138]=Qe(),s[139]="uANE",e[139]=$t(s0),s[140]="STY",e[140]=nt(z0),s[141]="STA",e[141]=me(z0),s[142]="STX",e[142]=tt(z0),s[143]="uSAX",e[143]=Ee(z0),s[144]="BCC",e[144]=oe(H0,0),s[145]="STA",e[145]=me(q0),s[146]="uKIL",e[146]=J0(),s[147]="uSHA",e[147]=Ct(q0),s[148]="STY",e[148]=nt(G0(P)),s[149]="STA",e[149]=me(G0(P)),s[150]="STX",e[150]=tt(G0(v)),s[151]="uSAX",e[151]=Ee(G0(v)),s[152]="TYA",e[152]=jt(),s[153]="STA",e[153]=me(K0(v)),s[154]="TXS",e[154]=Pe(),s[155]="uSHS",e[155]=tn(K0(v)),s[156]="uSHY",e[156]=rn(K0(P)),s[157]="STA",e[157]=me(K0(P)),s[158]="uSHX",e[158]=nn(K0(v)),s[159]="uSHA",e[159]=Ct(K0(v)),s[160]="LDY",e[160]=De(s0),s[161]="LDA",e[161]=ce(X0),s[162]="LDX",e[162]=ke(s0),s[163]="uLAX",e[163]=_e(X0),s[164]="LDY",e[164]=De(_0),s[165]="LDA",e[165]=ce(_0),s[166]="LDX",e[166]=ke(_0),s[167]="uLAX",e[167]=_e(_0),s[168]="TAY",e[168]=pe(),s[169]="LDA",e[169]=ce(s0),s[170]="TAX",e[170]=ge(),s[171]="uLXA",e[171]=qt(s0),s[172]="LDY",e[172]=De(R0),s[173]="LDA",e[173]=ce(R0),s[174]="LDX",e[174]=ke(R0),s[175]="uLAX",e[175]=_e(R0),s[176]="BCS",e[176]=oe(H0,1),s[177]="LDA",e[177]=ce(E0),s[178]="uKIL",e[178]=J0(),s[179]="uLAX",e[179]=_e(E0),s[180]="LDY",e[180]=De(d0(P)),s[181]="LDA",e[181]=ce(d0(P)),s[182]="LDX",e[182]=ke(d0(v)),s[183]="uLAX",e[183]=_e(d0(v)),s[184]="CLV",e[184]=I0(),s[185]="LDA",e[185]=ce(o0(v)),s[186]="TSX",e[186]=ue(),s[187]="uLAS",e[187]=Qt(o0(v)),s[188]="LDY",e[188]=De(o0(P)),s[189]="LDA",e[189]=ce(o0(P)),s[190]="LDX",e[190]=ke(o0(v)),s[191]="uLAX",e[191]=_e(o0(v)),s[192]="CPY",e[192]=et(s0),s[193]="CMP",e[193]=ie(X0),s[194]="uNOP",e[194]=v0(s0),s[195]="uDCP",e[195]=le(r),s[196]="CPY",e[196]=et(_0),s[197]="CMP",e[197]=ie(_0),s[198]="DEC",e[198]=Me(S),s[199]="uDCP",e[199]=le(S),s[200]="INY",e[200]=j0(),s[201]="CMP",e[201]=ie(s0),s[202]="DEX",e[202]=ne(),s[203]="uSBX",e[203]=en(s0),s[204]="CPY",e[204]=et(R0),s[205]="CMP",e[205]=ie(R0),s[206]="DEC",e[206]=Me(B),s[207]="uDCP",e[207]=le(B),s[208]="BNE",e[208]=oe(q,0),s[209]="CMP",e[209]=ie(E0),s[210]="uKIL",e[210]=J0(),s[211]="uDCP",e[211]=le(g),s[212]="uNOP",e[212]=v0(d0(P)),s[213]="CMP",e[213]=ie(d0(P)),s[214]="DEC",e[214]=Me(D(P)),s[215]="uDCP",e[215]=le(D(P)),s[216]="CLD",e[216]=y0(),s[217]="CMP",e[217]=ie(o0(v)),s[218]="uNOP",e[218]=v0(e0),s[219]="uDCP",e[219]=le(u(v)),s[220]="uNOP",e[220]=v0(o0(P)),s[221]="CMP",e[221]=ie(o0(P)),s[222]="DEC",e[222]=Me(u(P)),s[223]="uDCP",e[223]=le(u(P)),s[224]="CPX",e[224]=qe(s0),s[225]="SBC",e[225]=te(X0),s[226]="uNOP",e[226]=v0(s0),s[227]="uISB",e[227]=be(r),s[228]="CPX",e[228]=qe(_0),s[229]="SBC",e[229]=te(_0),s[230]="INC",e[230]=Te(S),s[231]="uISB",e[231]=be(S),s[232]="INX",e[232]=ee(),s[233]="SBC",e[233]=te(s0),s[234]="NOP",e[234]=J(),s[235]="SBC",e[235]=te(s0),s[236]="CPX",e[236]=qe(R0),s[237]="SBC",e[237]=te(R0),s[238]="INC",e[238]=Te(B),s[239]="uISB",e[239]=be(B),s[240]="BEQ",e[240]=oe(q,1),s[241]="SBC",e[241]=te(E0),s[242]="uKIL",e[242]=J0(),s[243]="uISB",e[243]=be(g),s[244]="uNOP",e[244]=v0(d0(P)),s[245]="SBC",e[245]=te(d0(P)),s[246]="INC",e[246]=Te(D(P)),s[247]="uISB",e[247]=be(D(P)),s[248]="SED",e[248]=Ge(),s[249]="SBC",e[249]=te(o0(v)),s[250]="uNOP",e[250]=v0(e0),s[251]="uISB",e[251]=be(u(v)),s[252]="uNOP",e[252]=v0(o0(P)),s[253]="SBC",e[253]=te(o0(P)),s[254]="INC",e[254]=Te(u(P)),s[255]="uISB",e[255]=be(u(P));function b(){return e0(function(){X(o>127),o=o<<1&255,L(o),O(o)})}function _(){return e0(function(){w=0})}function y0(){return e0(function(){y=0})}function $0(){return e0(function(){p=0})}function I0(){return e0(function(){Y=0})}function ne(){return e0(function(){d=d-1&255,L(d),O(d)})}function Q0(){return e0(function(){x=x-1&255,L(x),O(x)})}function ee(){return e0(function(){d=d+1&255,L(d),O(d)})}function j0(){return e0(function(){x=x+1&255,L(x),O(x)})}function Je(){return e0(function(){w=o&1,o>>>=1,L(o),i=0})}function J(){return e0(function(){})}function xe(){return e0(function(){var l=o>127;o=(o<<1|w)&255,X(l),L(o),O(o)})}function Z0(){return e0(function(){var l=o&1;o=o>>>1|w<<7,X(l),L(o),O(o)})}function ve(){return e0(function(){w=1})}function Ge(){return e0(function(){y=1})}function Oe(){return e0(function(){p=1})}function ge(){return e0(function(){d=o,L(d),O(d)})}function pe(){return e0(function(){x=o,L(x),O(x)})}function ue(){return e0(function(){d=m,L(d),O(d)})}function Qe(){return e0(function(){o=d,L(o),O(o)})}function Pe(){return e0(function(){m=d})}function jt(){return e0(function(){o=x,L(o),O(o)})}function J0(){return[z,function(){V("KIL/HLT/JAM")},function(){G--}]}function v0(l){return l(function(){V("NOP/DOP")})}function re(l){return l(function(){if(y){var C=R,K=(o&15)+(C&15)+w;K>9&&(K+=6);var S0=(o>>4)+(C>>4)+(K>15?1:0)<<4;L(o+C+w&255),O(S0),P0((o^S0)&~(o^C)&128),S0>159&&(S0+=96),X(S0>255),o=(S0|K&15)&255}else{var h0=o+R+w;X(h0>255),P0((o^h0)&(R^h0)&128),o=h0&255,L(o),O(o)}})}function ae(l){return l(function(){o&=R,L(o),O(o)})}function ht(l){return l(function(){var C=R;L(o&C),P0(C&64),O(C)})}function ie(l){return l(function(){var C=o-R&255;X(o>=R),L(C),O(C)})}function qe(l){return l(function(){var C=d-R&255;X(d>=R),L(C),O(C)})}function et(l){return l(function(){var C=x-R&255;X(x>=R),L(C),O(C)})}function fe(l){return l(function(){o^=R,L(o),O(o)})}function ce(l){return l(function(){o=R,L(o),O(o)})}function ke(l){return l(function(){d=R,L(d),O(d)})}function De(l){return l(function(){x=R,L(x),O(x)})}function se(l){return l(function(){o|=R,L(o),O(o)})}function te(l){return l(function(){if(y){var C=R,K=(o&15)-(C&15)-(1-w),S0=(o>>4)-(C>>4)-(K<0?1:0);K<0&&(K-=6),S0<0&&(S0-=6);var h0=o-C-(1-w);X(~h0&256),P0((o^C)&(o^h0)&128),L(h0&255),O(h0),o=(S0<<4|K&15)&255}else C=~R&255,h0=o+C+w,X(h0>255),P0((o^h0)&(C^h0)&128),o=h0&255,L(o),O(o)})}function At(l){return l(function(){V("ANC"),o&=R,L(o),i=w=o&128?1:0})}function $t(l){return l(function(){V("ANE")})}function Jt(l){return l(function(){V("ARR");var C=o&R,K=w?128:0;C=C>>>1|K,o=C,L(C),O(C);var S0=o&96;S0==96?(w=1,Y=0):S0==0?(w=0,Y=0):S0==32?(w=0,Y=1):S0==64&&(w=1,Y=1)})}function Gt(l){return l(function(){V("ASR");var C=o&R;w=C&1,C=C>>>1,o=C,L(C),i=0})}function Qt(l){return l(function(){V("LAS");var C=m&R;o=C,d=C,m=C,L(C),O(C)})}function _e(l){return l(function(){V("LAX");var C=R;o=C,d=C,L(C),O(C)})}function qt(l){return l(function(){V("LXA");var C=o&R;o=C,d=C,L(C),O(C)})}function en(l){return l(function(){V("SBX");var C=o&d,K=R,S0=C-K&255;d=S0,X(C>=K),L(S0),O(S0)})}function me(l){return l(function(){R=o})}function tt(l){return l(function(){R=d})}function nt(l){return l(function(){R=x})}function Ee(l){return l(function(){V("SAX"),R=o&d})}function Ct(l){return l(function(){V("SHA"),R=o&d&(T>>>8)+1&255})}function tn(l){return l(function(){V("SHS");var C=o&d;m=C,R=C&(T>>>8)+1&255})}function nn(l){return l(function(){V("SHX"),R=d&(T>>>8)+1&255})}function rn(l){return l(function(){V("SHY"),R=x&(T>>>8)+1&255})}function Ze(l){return l(function(){X(R>127);var C=R<<1&255;R=C,L(C),O(C)})}function Me(l){return l(function(){var C=R-1&255;R=C,L(C),O(C)})}function Te(l){return l(function(){var C=R+1&255;R=C,L(C),O(C)})}function Fe(l){return l(function(){w=R&1,R>>>=1,L(R),i=0})}function Ue(l){return l(function(){var C=R>127,K=(R<<1|w)&255;R=K,X(C),L(K),O(K)})}function Xe(l){return l(function(){var C=R&1,K=R>>>1|w<<7;R=K,X(C),L(K),O(K)})}function le(l){return l(function(){V("DCP");var C=R-1&255;R=C,C=o-C,X(C>=0),L(C),O(C)})}function be(l){return l(function(){if(V("ISB"),R=R+1&255,y){var C=R,K=(o&15)-(C&15)-(1-w),S0=(o>>4)-(C>>4)-(K<0?1:0);K<0&&(K-=6),S0<0&&(S0-=6);var h0=o-C-(1-w);X(~h0&256),P0((o^C)&(o^h0)&128),L(h0&255),O(h0),o=(S0<<4|K&15)&255}else C=~R&255,h0=o+C+w,X(h0>255),P0((o^h0)&(C^h0)&128),o=h0&255,L(o),O(o)})}function de(l){return l(function(){V("RLA");var C=R,K=w;X(C&128),C=(C<<1|K)&255,R=C,o&=C,L(C),O(C)})}function he(l){return l(function(){V("RRA");var C=R,K=w?128:0;if(X(C&1),C=C>>>1|K,R=C,y){var S0=R,h0=(o&15)+(S0&15)+w;h0>9&&(h0+=6);var we=(o>>4)+(S0>>4)+(h0>15?1:0)<<4;L(o+S0+w&255),O(we),P0((o^we)&~(o^S0)&128),we>159&&(we+=96),X(we>255),o=(we|h0&15)&255}else{var He=o+R+w;X(He>255),P0((o^He)&(R^He)&128),o=He&255,L(o),O(o)}})}function Ae(l){return l(function(){V("SLO");var C=R;X(C&128),C=C<<1&255,R=C,C=o|C,o=C,L(C),O(C)})}function Ce(l){return l(function(){V("SRE");var C=R;X(C&1),C=C>>>1,R=C,C=(o^C)&255,o=C,L(C),O(C)})}function an(){return[z,A0,function(){j(o)},F]}function fn(){return[z,A0,function(){j(m0())},F]}function cn(){return[z,A0,C0,function(){o=r0(),L(o),O(o)},F]}function sn(){return[z,A0,C0,function(){N0(r0())},F]}function on(){return[z,I,C0,function(){j(a>>>8&255)},function(){j(a&255)},U0,function(){a=i0,F()}]}function xn(){return[z,a0,function(){h.debug&&h.breakpoint("BRK "+R),j(a>>>8&255)},function(){j(a&255)},function(){j(m0())},function(){i0=t.read(D0)},function(){i0|=t.read(D0+1)<<8},function(){a=i0,p=1,F()}]}function un(){return[z,a0,function(){h.debug&&h.breakpoint("IRQ "+R),j(a>>>8&255)},function(){j(a&255)},function(){j(m0()&-17)},function(){i0=t.read(D0)},function(){i0|=t.read(D0+1)<<8},function(){a=i0,F()}]}function mn(){return[z,a0,function(){h.debug&&h.breakpoint("NMI "+R),j(a>>>8&255)},function(){j(a&255)},function(){j(m0()&-17)},function(){i0=t.read(M0)},function(){i0|=t.read(M0+1)<<8},function(){a=i0,F()}]}function ln(){return[z,A0,C0,function(){N0(r0())},function(){i0=r0()},function(){i0|=r0()<<8},function(){a=i0,F()}]}function bn(){return[z,A0,C0,function(){i0=r0()},function(){i0|=r0()<<8},function(){a=i0,a0()},F]}function dn(){return[z,I,U0,function(){a=i0,F()}]}function hn(){return[z,F0,p0,l0,function(){c0(),L0()},function(){a=T,F()}]}function oe(l,C){var K;return l===q?K=function(){return N===C}:l===V0?K=function(){return i===C}:l===H0?K=function(){return w===C}:K=function(){return Y===C},[z,x0,function(){K()?(A0(),Z()):F()},function(){g0?(A0(),n0()):F()},F]}this.saveState=function(){return{PC:a-1&65535,A:o,X:d,Y:x,SP:m,N:i,V:Y,D:y,I:p,Z:N,C:w,T:G,o:u0,R:n?1:0,d:R,AD:i0,BA:T,BC:W?1:0,IA:f,bo:c,boa:g0}},this.loadState=function(l){a=l.PC+1&65535,o=l.A,d=l.X,x=l.Y,m=l.SP,i=l.N,Y=l.V,y=l.D,p=l.I,N=l.Z,w=l.C,G=l.T,u0=l.o,n=!!l.R,R=l.d,i0=l.AD,T=l.BA,W=!!l.BC,f=l.IA,c=l.bo,g0=l.boa,A=u0<0?[z]:e[u0]},this.toString=function(){return"CPU PC: "+a.toString(16)+" op: "+u0.toString()+" T: "+G+" data: "+R+` +import{D as gt,O as pt,Q as Pt,S as _t,T as wt,U as rt,Z as kt,g as $,j as vt,s as Ve}from"./chunk-BNFOPPUS.js";var Sn=[{mn:"BRK",am:"",nb:1,il:0,c1:7,c2:0,nw:3,br:1,mod:"SI"},{mn:"ORA",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SLO",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"PHP",am:"",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:"S"},{mn:"ORA",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ANC",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA",nb:3,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BPL",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"ORA",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SLO",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"CLC",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"C"},{mn:"ORA",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SLO",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ORA",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"ASL",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SLO",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"JSR",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:1,mod:"S"},{mn:"AND",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RLA",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BIT",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"ZVN"},{mn:"AND",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"PLP",am:"",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:"SCZIDVN"},{mn:"AND",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ANC",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"BIT",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"ZVN"},{mn:"AND",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BMI",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"AND",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RLA",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"AND",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"SEC",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"C"},{mn:"AND",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"RLA",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"AND",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"ROL",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RLA",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"RTI",am:"",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:"SCZIDVN"},{mn:"EOR",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SRE",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"EOR",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"PHA",am:"",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:"S"},{mn:"EOR",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ASR",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"JMP",am:"AAAA",nb:3,il:0,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"EOR",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"BVC",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"EOR",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SRE",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"EOR",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"CLI",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"I"},{mn:"EOR",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SRE",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"EOR",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"LSR",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"SRE",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZN"},{mn:"RTS",am:"",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:"S"},{mn:"ADC",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RRA",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:""},{mn:"ADC",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"PLA",am:"",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:"SAZN"},{mn:"ADC",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZN"},{mn:"ARR",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"JMP",am:"(AAAA)",nb:3,il:0,c1:5,c2:0,nw:0,br:1,mod:""},{mn:"ADC",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"BVS",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"ADC",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"RRA",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ADC",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"SEI",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"I"},{mn:"ADC",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"RRA",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"ADC",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"ROR",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"RRA",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"STA",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SAX",am:"(aa,x)",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"STY",am:"aa",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"aa",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"STX",am:"aa",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"SAX",am:"aa",nb:2,il:1,c1:3,c2:0,nw:1,br:0,mod:""},{mn:"DEY",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"TXA",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"ANE",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"STY",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STX",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"SAX",am:"AAAA",nb:3,il:1,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"BCC",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"STA",am:"(aa),y",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"SHA",am:"(aa),y",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:""},{mn:"STY",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"STX",am:"aa,y",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:""},{mn:"SAX",am:"aa,y",nb:3,il:1,c1:4,c2:0,nw:1,br:1,mod:""},{mn:"TYA",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"STA",am:"AAAA,y",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"TXS",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"S"},{mn:"SHS",am:"AAAA,y",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:"S"},{mn:"SHY",am:"AAAA,x",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"STA",am:"AAAA,x",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"SHX",am:"AAAA,y",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"SHA",am:"AAAA,y",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:""},{mn:"LDY",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"(aa,x)",nb:2,il:1,c1:6,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"LDY",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"aa",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"TAY",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"AZN"},{mn:"TAX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LXA",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"LDY",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"AAAA",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"BCS",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"LDA",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"AZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"LAX",am:"(aa),y",nb:2,il:1,c1:5,c2:1,nw:0,br:0,mod:"AXZN"},{mn:"LDY",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"aa,y",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"aa,y",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:"AXZN"},{mn:"CLV",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"V"},{mn:"LDA",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"TSX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"LAS",am:"AAAA,y",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:"SAXZN"},{mn:"LDY",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"YZN"},{mn:"LDA",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"AZN"},{mn:"LDX",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"XZN"},{mn:"LAX",am:"AAAA,y",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:"AXZN"},{mn:"CPY",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"CZN"},{mn:"CMP",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"CZN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"DCP",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"CZN"},{mn:"CPY",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"CZN"},{mn:"CMP",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"CZN"},{mn:"INY",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"YZN"},{mn:"CMP",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"SBX",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"XCZN"},{mn:"CPY",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"CMP",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"BNE",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"CMP",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"CZN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"DCP",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"CZN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"CMP",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"CZN"},{mn:"CLD",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"D"},{mn:"CMP",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"CZN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"DCP",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"CMP",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"CZN"},{mn:"DEC",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"ZN"},{mn:"DCP",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"CZN"},{mn:"CPX",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"CZN"},{mn:"SBC",am:"(aa,x)",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"ISB",am:"(aa,x)",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"CPX",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"CZN"},{mn:"SBC",am:"aa",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"aa",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"aa",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"INX",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"XZN"},{mn:"SBC",am:"#aa",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"SBC",am:"#aa",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"CPX",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"CZN"},{mn:"SBC",am:"AAAA",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"AAAA",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"AAAA",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"BEQ",am:"branch",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:""},{mn:"SBC",am:"(aa),y",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"KIL",am:"",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:""},{mn:"ISB",am:"(aa),y",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"aa,x",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"SBC",am:"aa,x",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"aa,x",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"aa,x",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"SED",am:"",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:"D"},{mn:"SBC",am:"AAAA,y",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"NOP",am:"",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:""},{mn:"ISB",am:"AAAA,y",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"},{mn:"NOP",am:"AAAA,x",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:""},{mn:"SBC",am:"AAAA,x",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:"ACZVN"},{mn:"INC",am:"AAAA,x",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:"ZN"},{mn:"ISB",am:"AAAA,x",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:"ACZVN"}];function at(h,t,n,a){var m=Sn[t];if(m==null)return{line:"???",nbytes:1,isaddr:!1};var o=m.mn,d=m.am,x=!1;if(d=="branch"){var i=n<128?h+2+n:h+2-(256-n);i&=65535,d="$"+$(i,4),x=!0}else d=d.replace("aa","$"+$(n,2)),d=d.replace("AAAA","$"+$(n+(a<<8),4)),d.indexOf("#")<0&&d.indexOf("$")>=0&&(x=!0);return{line:m.mn+" "+d,nbytes:m.nb,isaddr:x}}function vn(h){let t=h;if(!t||typeof t.mem_read!="function"||typeof t.mem_write!="function"||typeof t.io_read!="function"||typeof t.io_write!="function")throw"Z80: Core object is missing required functions.";let n=0,a=0,m=0,o=0,d=0,x=0,i=0,Y=0,y=0,p=0,N=0,w=0,G=0,u0=0,A=0,R=0,i0=0,T=0,W=0,f=0,c={S:0,Z:0,Y:0,H:0,X:0,P:0,N:0,C:0},g0={S:0,Z:0,Y:0,H:0,X:0,P:0,N:0,C:0},M0=0,H=0,D0=0,P=!1,v=!1,V0=!1,t0=0;function q(){return{PC:f,SP:W,IX:A,IY:R,AF:(n<<8)+U0(),BC:(a<<8)+m,DE:(o<<8)+d,HL:(x<<8)+i,AF_:(Y<<8)+Y0(),BC_:(y<<8)+p,DE_:(N<<8)+w,HL_:(G<<8)+u0,IR:(i0<<8)+T,im:M0,iff1:H,iff2:D0,halted:P,do_delayed_di:v,do_delayed_ei:V0,cycle_counter:t0}}function H0(e){f=e.PC,W=e.SP,A=e.IX,R=e.IY,n=e.AF>>8&255,T0(e.AF),a=e.BC>>8&255,m=e.BC&255,o=e.DE>>8&255,d=e.DE&255,x=e.HL>>8&255,i=e.HL&255,Y=e.AF_>>8&255,k0(e.AF_),y=e.BC_>>8&255,p=e.BC_&255,N=e.DE_>>8&255,w=e.DE_&255,G=e.HL_>>8&255,u0=e.HL_&255,i0=e.IR>>8&255,T=e.IR&255,M0=e.im,H=e.iff1,D0=e.iff2,P=e.halted,v=e.do_delayed_di,V0=e.do_delayed_ei,t0=e.cycle_counter}let z=function(){W=0,f=0,n=0,T=0,T0(0),M0=0,H=0,D0=0,P=!1,v=!1,V0=!1,t0=0},F=function(){if(P)return 1;var e=!1,b=!1;v?(v=!1,e=!0):V0&&(V0=!1,b=!0),T=T&128|(T&127)+1&127;var _=t.mem_read(f);x0(_),f=f+1&65535,e?(H=0,D0=0):b&&(H=1,D0=1);var y0=t0;return t0=0,y0},A0=function(e,b){if(e)return T=T&128|(T&127)+1&127,P=!1,D0=H,H=0,L0(f),f=102,t0+=11,!0;if(H){if(T=T&128|(T&127)+1&127,P=!1,H=0,D0=0,M0===0)f=f-1&65535,x0(b),f=f+1&65535,t0+=2;else if(M0===1)L0(f),f=56,t0+=13;else if(M0===2){L0(f);var _=i0<<8|b;f=t.mem_read(_)|t.mem_read(_+1&65535)<<8,t0+=19}return!0}},x0=function(e){var b=function(I0){return(I0&7)===0?a:(I0&7)===1?m:(I0&7)===2?o:(I0&7)===3?d:(I0&7)===4?x:(I0&7)===5?i:(I0&7)===6?t.mem_read(i|x<<8):n};if(e===118)P=!0;else if(e>=64&&e<128){var _=b(e);(e&56)>>>3?(e&56)>>>3===1?m=_:(e&56)>>>3===2?o=_:(e&56)>>>3===3?d=_:(e&56)>>>3===4?x=_:(e&56)>>>3===5?i=_:(e&56)>>>3===6?t.mem_write(i|x<<8,_):(e&56)>>>3===7&&(n=_):a=_}else if(e>=128&&e<192){var _=b(e),y0=[c0,a0,E,k,f0,n0,Z,M];y0[(e&56)>>>3](_)}else{var $0=S[e];$0()}t0+=u[e]},I=function(e){return e&=255,e&128&&(e=-((255&~e)+1)),e},U0=function(){return c.S<<7|c.Z<<6|c.Y<<5|c.H<<4|c.X<<3|c.P<<2|c.N<<1|c.C},Y0=function(){return g0.S<<7|g0.Z<<6|g0.Y<<5|g0.H<<4|g0.X<<3|g0.P<<2|g0.N<<1|g0.C},T0=function(e){c.S=(e&128)>>>7,c.Z=(e&64)>>>6,c.Y=(e&32)>>>5,c.H=(e&16)>>>4,c.X=(e&8)>>>3,c.P=(e&4)>>>2,c.N=(e&2)>>>1,c.C=e&1},k0=function(e){g0.S=(e&128)>>>7,g0.Z=(e&64)>>>6,g0.Y=(e&32)>>>5,g0.H=(e&16)>>>4,g0.X=(e&8)>>>3,g0.P=(e&4)>>>2,g0.N=(e&2)>>>1,g0.C=e&1},Q=function(e){c.Y=(e&32)>>>5,c.X=(e&8)>>>3},l0=function(e){var b=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];return b[e]},L0=function(e){W=W-1&65535,t.mem_write(W,(e&65280)>>>8),W=W-1&65535,t.mem_write(W,e&255)},b0=function(){var e=t.mem_read(W)&255;return W=W+1&65535,e|=t.mem_read(W)<<8,W=W+1&65535,e},B0=function(e){e?(f=t.mem_read(f+1&65535)|t.mem_read(f+2&65535)<<8,f=f-1&65535):f=f+2&65535},W0=function(e){if(e){t0+=5;var b=I(t.mem_read(f+1&65535));f=f+b+1&65535}else f=f+1&65535},O0=function(e){e?(t0+=7,L0(f+3&65535),f=t.mem_read(f+1&65535)|t.mem_read(f+2&65535)<<8,f=f-1&65535):f=f+2&65535},F0=function(e){e&&(t0+=6,f=b0()-1&65535)},p0=function(e){L0(f+1&65535),f=e-1&65535},c0=function(e){var b=n+e;c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(e&15)+(n&15)&16?1:0,c.P=(n&128)===(e&128)&&(n&128)!==(b&128)?1:0,c.N=0,c.C=b&256?1:0,n=b&255,Q(n)},a0=function(e){var b=n+e+c.C;c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(e&15)+(n&15)+c.C&16?1:0,c.P=(n&128)===(e&128)&&(n&128)!==(b&128)?1:0,c.N=0,c.C=b&256?1:0,n=b&255,Q(n)},E=function(e){var b=n-e;c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(n&15)-(e&15)&16?1:0,c.P=(n&128)!==(e&128)&&(n&128)!==(b&128)?1:0,c.N=1,c.C=b&256?1:0,n=b&255,Q(n)},k=function(e){var b=n-e-c.C;c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(n&15)-(e&15)-c.C&16?1:0,c.P=(n&128)!==(e&128)&&(n&128)!==(b&128)?1:0,c.N=1,c.C=b&256?1:0,n=b&255,Q(n)},M=function(e){var b=n;E(e),n=b,Q(e)},f0=function(e){n&=e&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=1,c.P=l0(n),c.N=0,c.C=0,Q(n)},Z=function(e){n=(e|n)&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=l0(n),c.N=0,c.C=0,Q(n)},n0=function(e){n=(e^n)&255,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=l0(n),c.N=0,c.C=0,Q(n)},L=function(e){var b=e+1;return c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(e&15)===15?1:0,c.P=e===127?1:0,c.N=0,b&=255,Q(b),b},O=function(e){var b=e-1;return c.S=b&128?1:0,c.Z=b&255?0:1,c.H=(e&15)===0?1:0,c.P=e===128?1:0,c.N=1,b&=255,Q(b),b},P0=function(e){var b=i|x<<8,_=b+e;c.N=0,c.C=_&65536?1:0,c.H=(b&4095)+(e&4095)&4096?1:0,i=_&255,x=(_&65280)>>>8,Q(x)},X=function(e){e+=c.C;var b=i|x<<8,_=b+e;c.S=_&32768?1:0,c.Z=_&65535?0:1,c.H=(b&4095)+(e&4095)&4096?1:0,c.P=(b&32768)===(e&32768)&&(_&32768)!==(b&32768)?1:0,c.N=0,c.C=_&65536?1:0,i=_&255,x=_>>>8&255,Q(x)},r0=function(e){e+=c.C;var b=i|x<<8,_=b-e;c.S=_&32768?1:0,c.Z=_&65535?0:1,c.H=(b&4095)-(e&4095)&4096?1:0,c.P=(b&32768)!==(e&32768)&&(_&32768)!==(b&32768)?1:0,c.N=1,c.C=_&65536?1:0,i=_&255,x=_>>>8&255,Q(x)},C0=function(e){var b=t.io_read(e);return c.S=b&128?1:0,c.Z=b?0:1,c.H=0,c.P=l0(b)?1:0,c.N=0,Q(b),b},j=function(){n!==128&&(n=I(n),n=-n&255),c.S=n&128?1:0,c.Z=n?0:1,c.H=(-n&15)>0?1:0,c.P=n===128?1:0,c.N=1,c.C=n?1:0,Q(n)},m0=function(){var e=t.mem_read(i|x<<8);t.mem_write(d|o<<8,e);var b=(d|o<<8)+1;d=b&255,o=(b&65280)>>>8,b=(i|x<<8)+1,i=b&255,x=(b&65280)>>>8,b=(m|a<<8)-1,m=b&255,a=(b&65280)>>>8,c.H=0,c.P=m||a?1:0,c.N=0,c.Y=(n+e&2)>>>1,c.X=(n+e&8)>>>3},N0=function(){var e=c.C,b=t.mem_read(i|x<<8);M(b),c.C=e,c.Y=(n-b-c.H&2)>>>1,c.X=(n-b-c.H&8)>>>3;var _=(i|x<<8)+1;i=_&255,x=(_&65280)>>>8,_=(m|a<<8)-1,m=_&255,a=(_&65280)>>>8,c.P=_?1:0},V=function(){a=O(a),t.mem_write(i|x<<8,t.io_read(a<<8|m));var e=(i|x<<8)+1;i=e&255,x=(e&65280)>>>8,c.N=1},e0=function(){t.io_write(a<<8|m,t.mem_read(i|x<<8));var e=(i|x<<8)+1;i=e&255,x=(e&65280)>>>8,a=O(a),c.N=1},s0=function(){c.N=0,c.H=0;var e=t.mem_read(i|x<<8);t.mem_write(d|o<<8,e);var b=(d|o<<8)-1;d=b&255,o=(b&65280)>>>8,b=(i|x<<8)-1,i=b&255,x=(b&65280)>>>8,b=(m|a<<8)-1,m=b&255,a=(b&65280)>>>8,c.P=m||a?1:0,c.Y=(n+e&2)>>>1,c.X=(n+e&8)>>>3},_0=function(){var e=c.C,b=t.mem_read(i|x<<8);M(b),c.C=e,c.Y=(n-b-c.H&2)>>>1,c.X=(n-b-c.H&8)>>>3;var _=(i|x<<8)-1;i=_&255,x=(_&65280)>>>8,_=(m|a<<8)-1,m=_&255,a=(_&65280)>>>8,c.P=_?1:0},R0=function(){a=O(a),t.mem_write(i|x<<8,t.io_read(a<<8|m));var e=(i|x<<8)-1;i=e&255,x=(e&65280)>>>8,c.N=1},X0=function(){t.io_write(a<<8|m,t.mem_read(i|x<<8));var e=(i|x<<8)-1;i=e&255,x=(e&65280)>>>8,a=O(a),c.N=1},o0=function(e){return c.N=0,c.H=0,c.C=(e&128)>>>7,e=(e<<1|c.C)&255,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},d0=function(e){return c.N=0,c.H=0,c.C=e&1,e=e>>>1&127|c.C<<7,c.Z=e&255?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e&255},E0=function(e){c.N=0,c.H=0;var b=c.C;return c.C=(e&128)>>>7,e=(e<<1|b)&255,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},w0=function(e){c.N=0,c.H=0;var b=c.C;return c.C=e&1,e=e>>>1&127|b<<7,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},z0=function(e){return c.N=0,c.H=0,c.C=(e&128)>>>7,e=e<<1&255,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},U=function(e){return c.N=0,c.H=0,c.C=e&1,e=e>>>1&127|e&128,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},K0=function(e){return c.N=0,c.H=0,c.C=(e&128)>>>7,e=e<<1&255|1,c.Z=e?0:1,c.P=l0(e),c.S=e&128?1:0,Q(e),e},G0=function(e){return c.N=0,c.H=0,c.C=e&1,e=e>>>1&127,c.Z=e?0:1,c.P=l0(e),c.S=0,Q(e),e},q0=function(e){c.N=0;var b=A+e;c.C=b&65536?1:0,c.H=(A&4095)+(e&4095)&4096?1:0,Q((b&65280)>>>8),A=b&65535},S=[];S[0]=function(){},S[1]=function(){f=f+1&65535,m=t.mem_read(f),f=f+1&65535,a=t.mem_read(f)},S[2]=function(){t.mem_write(m|a<<8,n)},S[3]=function(){var e=m|a<<8;e+=1,m=e&255,a=(e&65280)>>>8},S[4]=function(){a=L(a)},S[5]=function(){a=O(a)},S[6]=function(){f=f+1&65535,a=t.mem_read(f)},S[7]=function(){var e=c.S,b=c.Z,_=c.P;n=o0(n),c.S=e,c.Z=b,c.P=_},S[8]=function(){var e=n;n=Y,Y=e,e=U0(),T0(Y0()),k0(e)},S[9]=function(){P0(m|a<<8)},S[10]=function(){n=t.mem_read(m|a<<8)},S[11]=function(){var e=m|a<<8;e-=1,m=e&255,a=(e&65280)>>>8},S[12]=function(){m=L(m)},S[13]=function(){m=O(m)},S[14]=function(){f=f+1&65535,m=t.mem_read(f)},S[15]=function(){var e=c.S,b=c.Z,_=c.P;n=d0(n),c.S=e,c.Z=b,c.P=_},S[16]=function(){a=a-1&255,W0(a!==0)},S[17]=function(){f=f+1&65535,d=t.mem_read(f),f=f+1&65535,o=t.mem_read(f)},S[18]=function(){t.mem_write(d|o<<8,n)},S[19]=function(){var e=d|o<<8;e+=1,d=e&255,o=(e&65280)>>>8},S[20]=function(){o=L(o)},S[21]=function(){o=O(o)},S[22]=function(){f=f+1&65535,o=t.mem_read(f)},S[23]=function(){var e=c.S,b=c.Z,_=c.P;n=E0(n),c.S=e,c.Z=b,c.P=_},S[24]=function(){var e=I(t.mem_read(f+1&65535));f=f+e+1&65535},S[25]=function(){P0(d|o<<8)},S[26]=function(){n=t.mem_read(d|o<<8)},S[27]=function(){var e=d|o<<8;e-=1,d=e&255,o=(e&65280)>>>8},S[28]=function(){d=L(d)},S[29]=function(){d=O(d)},S[30]=function(){f=f+1&65535,d=t.mem_read(f)},S[31]=function(){var e=c.S,b=c.Z,_=c.P;n=w0(n),c.S=e,c.Z=b,c.P=_},S[32]=function(){W0(!c.Z)},S[33]=function(){f=f+1&65535,i=t.mem_read(f),f=f+1&65535,x=t.mem_read(f)},S[34]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,i),t.mem_write(e+1&65535,x)},S[35]=function(){var e=i|x<<8;e+=1,i=e&255,x=(e&65280)>>>8},S[36]=function(){x=L(x)},S[37]=function(){x=O(x)},S[38]=function(){f=f+1&65535,x=t.mem_read(f)},S[39]=function(){var e=n;c.N?((c.H||(n&15)>9)&&(e-=6),(c.C||n>153)&&(e-=96)):((c.H||(n&15)>9)&&(e+=6),(c.C||n>153)&&(e+=96)),c.S=e&128?1:0,c.Z=e&255?0:1,c.H=n&16^e&16?1:0,c.P=l0(e&255),c.C=c.C||n>153?1:0,n=e&255,Q(n)},S[40]=function(){W0(!!c.Z)},S[41]=function(){P0(i|x<<8)},S[42]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,i=t.mem_read(e),x=t.mem_read(e+1&65535)},S[43]=function(){var e=i|x<<8;e-=1,i=e&255,x=(e&65280)>>>8},S[44]=function(){i=L(i)},S[45]=function(){i=O(i)},S[46]=function(){f=f+1&65535,i=t.mem_read(f)},S[47]=function(){n=~n&255,c.N=1,c.H=1,Q(n)},S[48]=function(){W0(!c.C)},S[49]=function(){W=t.mem_read(f+1&65535)|t.mem_read(f+2&65535)<<8,f=f+2&65535},S[50]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,n)},S[51]=function(){W=W+1&65535},S[52]=function(){var e=i|x<<8;t.mem_write(e,L(t.mem_read(e)))},S[53]=function(){var e=i|x<<8;t.mem_write(e,O(t.mem_read(e)))},S[54]=function(){f=f+1&65535,t.mem_write(i|x<<8,t.mem_read(f))},S[55]=function(){c.N=0,c.H=0,c.C=1,Q(n)},S[56]=function(){W0(!!c.C)},S[57]=function(){P0(W)},S[58]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,n=t.mem_read(e)},S[59]=function(){W=W-1&65535},S[60]=function(){n=L(n)},S[61]=function(){n=O(n)},S[62]=function(){n=t.mem_read(f+1&65535),f=f+1&65535},S[63]=function(){c.N=0,c.H=c.C,c.C=c.C?0:1,Q(n)},S[192]=function(){F0(!c.Z)},S[193]=function(){var e=b0();m=e&255,a=(e&65280)>>>8},S[194]=function(){B0(!c.Z)},S[195]=function(){f=t.mem_read(f+1&65535)|t.mem_read(f+2&65535)<<8,f=f-1&65535},S[196]=function(){O0(!c.Z)},S[197]=function(){L0(m|a<<8)},S[198]=function(){f=f+1&65535,c0(t.mem_read(f))},S[199]=function(){p0(0)},S[200]=function(){F0(!!c.Z)},S[201]=function(){f=b0()-1&65535},S[202]=function(){B0(!!c.Z)},S[203]=function(){T=T&128|(T&127)+1&127,f=f+1&65535;var e=t.mem_read(f),b=(e&56)>>>3,_=e&7;if(e<64){var y0=[o0,d0,E0,w0,z0,U,K0,G0];_===0?a=y0[b](a):_===1?m=y0[b](m):_===2?o=y0[b](o):_===3?d=y0[b](d):_===4?x=y0[b](x):_===5?i=y0[b](i):_===6?t.mem_write(i|x<<8,y0[b](t.mem_read(i|x<<8))):_===7&&(n=y0[b](n))}else e<128?(_===0?c.Z=a&1<>>8},S[210]=function(){B0(!c.C)},S[211]=function(){f=f+1&65535,t.io_write(n<<8|t.mem_read(f),n)},S[212]=function(){O0(!c.C)},S[213]=function(){L0(d|o<<8)},S[214]=function(){f=f+1&65535,E(t.mem_read(f))},S[215]=function(){p0(16)},S[216]=function(){F0(!!c.C)},S[217]=function(){var e=a;a=y,y=e,e=m,m=p,p=e,e=o,o=N,N=e,e=d,d=w,w=e,e=x,x=G,G=e,e=i,i=u0,u0=e},S[218]=function(){B0(!!c.C)},S[219]=function(){f=f+1&65535,n=t.io_read(n<<8|t.mem_read(f))},S[220]=function(){O0(!!c.C)},S[221]=function(){T=T&128|(T&127)+1&127,f=f+1&65535;var e=t.mem_read(f),b=D[e];b?(b(),t0+=s[e]):(f=f-1&65535,t0+=u[0])},S[222]=function(){f=f+1&65535,k(t.mem_read(f))},S[223]=function(){p0(24)},S[224]=function(){F0(!c.P)},S[225]=function(){var e=b0();i=e&255,x=(e&65280)>>>8},S[226]=function(){B0(!c.P)},S[227]=function(){var e=t.mem_read(W);t.mem_write(W,i),i=e,e=t.mem_read(W+1&65535),t.mem_write(W+1&65535,x),x=e},S[228]=function(){O0(!c.P)},S[229]=function(){L0(i|x<<8)},S[230]=function(){f=f+1&65535,f0(t.mem_read(f))},S[231]=function(){p0(32)},S[232]=function(){F0(!!c.P)},S[233]=function(){f=i|x<<8,f=f-1&65535},S[234]=function(){B0(!!c.P)},S[235]=function(){var e=o;o=x,x=e,e=d,d=i,i=e},S[236]=function(){O0(!!c.P)},S[237]=function(){T=T&128|(T&127)+1&127,f=f+1&65535;var e=t.mem_read(f),b=B[e];b?(b(),t0+=r[e]):t0+=u[0]},S[238]=function(){f=f+1&65535,n0(t.mem_read(f))},S[239]=function(){p0(40)},S[240]=function(){F0(!c.S)},S[241]=function(){var e=b0();T0(e&255),n=(e&65280)>>>8},S[242]=function(){B0(!c.S)},S[243]=function(){v=!0},S[244]=function(){O0(!c.S)},S[245]=function(){L0(U0()|n<<8)},S[246]=function(){f=f+1&65535,Z(t.mem_read(f))},S[247]=function(){p0(48)},S[248]=function(){F0(!!c.S)},S[249]=function(){W=i|x<<8},S[250]=function(){B0(!!c.S)},S[251]=function(){V0=!0},S[252]=function(){O0(!!c.S)},S[253]=function(){T=T&128|(T&127)+1&127,f=f+1&65535;var e=t.mem_read(f),b=D[e];if(b){var _=A;A=R,b(),R=A,A=_,t0+=s[e]}else f=f-1&65535,t0+=u[0]},S[254]=function(){f=f+1&65535,M(t.mem_read(f))},S[255]=function(){p0(56)};let B=[];B[64]=function(){a=C0(a<<8|m)},B[65]=function(){t.io_write(a<<8|m,a)},B[66]=function(){r0(m|a<<8)},B[67]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,m),t.mem_write(e+1&65535,a)},B[68]=function(){j()},B[69]=function(){f=b0()-1&65535,H=D0},B[70]=function(){M0=0},B[71]=function(){i0=n},B[72]=function(){m=C0(a<<8|m)},B[73]=function(){t.io_write(a<<8|m,m)},B[74]=function(){X(m|a<<8)},B[75]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,m=t.mem_read(e),a=t.mem_read(e+1&65535)},B[76]=function(){j()},B[77]=function(){f=b0()-1&65535},B[78]=function(){M0=0},B[79]=function(){T=n},B[80]=function(){o=C0(a<<8|m)},B[81]=function(){t.io_write(a<<8|m,o)},B[82]=function(){r0(d|o<<8)},B[83]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,d),t.mem_write(e+1&65535,o)},B[84]=function(){j()},B[85]=function(){f=b0()-1&65535,H=D0},B[86]=function(){M0=1},B[87]=function(){n=i0,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=D0,c.N=0,Q(n)},B[88]=function(){d=C0(a<<8|m)},B[89]=function(){t.io_write(a<<8|m,d)},B[90]=function(){X(d|o<<8)},B[91]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,d=t.mem_read(e),o=t.mem_read(e+1&65535)},B[92]=function(){j()},B[93]=function(){f=b0()-1&65535,H=D0},B[94]=function(){M0=2},B[95]=function(){n=T,c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=D0,c.N=0,Q(n)},B[96]=function(){x=C0(a<<8|m)},B[97]=function(){t.io_write(a<<8|m,x)},B[98]=function(){r0(i|x<<8)},B[99]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,i),t.mem_write(e+1&65535,x)},B[100]=function(){j()},B[101]=function(){f=b0()-1&65535,H=D0},B[102]=function(){M0=0},B[103]=function(){var e=t.mem_read(i|x<<8),b=e&15,_=n&15;e=(e&240)>>>4|_<<4,n=n&240|b,t.mem_write(i|x<<8,e),c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=l0(n)?1:0,c.N=0,Q(n)},B[104]=function(){i=C0(a<<8|m)},B[105]=function(){t.io_write(a<<8|m,i)},B[106]=function(){X(i|x<<8)},B[107]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,i=t.mem_read(e),x=t.mem_read(e+1&65535)},B[108]=function(){j()},B[109]=function(){f=b0()-1&65535,H=D0},B[110]=function(){M0=0},B[111]=function(){var e=t.mem_read(i|x<<8),b=e&240,_=n&15;e=(e&15)<<4|_,n=n&240|b>>>4,t.mem_write(i|x<<8,e),c.S=n&128?1:0,c.Z=n?0:1,c.H=0,c.P=l0(n)?1:0,c.N=0,Q(n)},B[112]=function(){C0(a<<8|m)},B[113]=function(){t.io_write(a<<8|m,0)},B[114]=function(){r0(W)},B[115]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,W&255),t.mem_write(e+1&65535,W>>>8&255)},B[116]=function(){j()},B[117]=function(){f=b0()-1&65535,H=D0},B[118]=function(){M0=1},B[120]=function(){n=C0(a<<8|m)},B[121]=function(){t.io_write(a<<8|m,n)},B[122]=function(){X(W)},B[123]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,W=t.mem_read(e),W|=t.mem_read(e+1&65535)<<8},B[124]=function(){j()},B[125]=function(){f=b0()-1&65535,H=D0},B[126]=function(){M0=2},B[160]=function(){m0()},B[161]=function(){N0()},B[162]=function(){V()},B[163]=function(){e0()},B[168]=function(){s0()},B[169]=function(){_0()},B[170]=function(){R0()},B[171]=function(){X0()},B[176]=function(){m0(),(a||m)&&(t0+=5,f=f-2&65535)},B[177]=function(){N0(),!c.Z&&(a||m)&&(t0+=5,f=f-2&65535)},B[178]=function(){V(),a&&(t0+=5,f=f-2&65535)},B[179]=function(){e0(),a&&(t0+=5,f=f-2&65535)},B[184]=function(){s0(),(a||m)&&(t0+=5,f=f-2&65535)},B[185]=function(){_0(),!c.Z&&(a||m)&&(t0+=5,f=f-2&65535)},B[186]=function(){R0(),a&&(t0+=5,f=f-2&65535)},B[187]=function(){X0(),a&&(t0+=5,f=f-2&65535)};let D=[];D[9]=function(){q0(m|a<<8)},D[25]=function(){q0(d|o<<8)},D[33]=function(){f=f+1&65535,A=t.mem_read(f),f=f+1&65535,A|=t.mem_read(f)<<8},D[34]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,t.mem_write(e,A&255),t.mem_write(e+1&65535,A>>>8&255)},D[35]=function(){A=A+1&65535},D[36]=function(){A=L(A>>>8)<<8|A&255},D[37]=function(){A=O(A>>>8)<<8|A&255},D[38]=function(){f=f+1&65535,A=t.mem_read(f)<<8|A&255},D[41]=function(){q0(A)},D[42]=function(){f=f+1&65535;var e=t.mem_read(f);f=f+1&65535,e|=t.mem_read(f)<<8,A=t.mem_read(e),A|=t.mem_read(e+1&65535)<<8},D[43]=function(){A=A-1&65535},D[44]=function(){A=L(A&255)|A&65280},D[45]=function(){A=O(A&255)|A&65280},D[46]=function(){f=f+1&65535,A=t.mem_read(f)&255|A&65280},D[52]=function(){f=f+1&65535;var e=I(t.mem_read(f)),b=t.mem_read(e+A&65535);t.mem_write(e+A&65535,L(b))},D[53]=function(){f=f+1&65535;var e=I(t.mem_read(f)),b=t.mem_read(e+A&65535);t.mem_write(e+A&65535,O(b))},D[54]=function(){f=f+1&65535;var e=I(t.mem_read(f));f=f+1&65535,t.mem_write(A+e&65535,t.mem_read(f))},D[57]=function(){q0(W)},D[68]=function(){a=A>>>8&255},D[69]=function(){a=A&255},D[70]=function(){f=f+1&65535;var e=I(t.mem_read(f));a=t.mem_read(A+e&65535)},D[76]=function(){m=A>>>8&255},D[77]=function(){m=A&255},D[78]=function(){f=f+1&65535;var e=I(t.mem_read(f));m=t.mem_read(A+e&65535)},D[84]=function(){o=A>>>8&255},D[85]=function(){o=A&255},D[86]=function(){f=f+1&65535;var e=I(t.mem_read(f));o=t.mem_read(A+e&65535)},D[92]=function(){d=A>>>8&255},D[93]=function(){d=A&255},D[94]=function(){f=f+1&65535;var e=I(t.mem_read(f));d=t.mem_read(A+e&65535)},D[96]=function(){A=A&255|a<<8},D[97]=function(){A=A&255|m<<8},D[98]=function(){A=A&255|o<<8},D[99]=function(){A=A&255|d<<8},D[100]=function(){},D[101]=function(){A=A&255|(A&255)<<8},D[102]=function(){f=f+1&65535;var e=I(t.mem_read(f));x=t.mem_read(A+e&65535)},D[103]=function(){A=A&255|n<<8},D[104]=function(){A=A&65280|a},D[105]=function(){A=A&65280|m},D[106]=function(){A=A&65280|o},D[107]=function(){A=A&65280|d},D[108]=function(){A=A&65280|A>>>8},D[109]=function(){},D[110]=function(){f=f+1&65535;var e=I(t.mem_read(f));i=t.mem_read(A+e&65535)},D[111]=function(){A=A&65280|n},D[112]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,a)},D[113]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,m)},D[114]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,o)},D[115]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,d)},D[116]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,x)},D[117]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,i)},D[119]=function(){f=f+1&65535;var e=I(t.mem_read(f));t.mem_write(A+e&65535,n)},D[124]=function(){n=A>>>8&255},D[125]=function(){n=A&255},D[126]=function(){f=f+1&65535;var e=I(t.mem_read(f));n=t.mem_read(A+e&65535)},D[132]=function(){c0(A>>>8&255)},D[133]=function(){c0(A&255)},D[134]=function(){f=f+1&65535;var e=I(t.mem_read(f));c0(t.mem_read(A+e&65535))},D[140]=function(){a0(A>>>8&255)},D[141]=function(){a0(A&255)},D[142]=function(){f=f+1&65535;var e=I(t.mem_read(f));a0(t.mem_read(A+e&65535))},D[148]=function(){E(A>>>8&255)},D[149]=function(){E(A&255)},D[150]=function(){f=f+1&65535;var e=I(t.mem_read(f));E(t.mem_read(A+e&65535))},D[156]=function(){k(A>>>8&255)},D[157]=function(){k(A&255)},D[158]=function(){f=f+1&65535;var e=I(t.mem_read(f));k(t.mem_read(A+e&65535))},D[164]=function(){f0(A>>>8&255)},D[165]=function(){f0(A&255)},D[166]=function(){f=f+1&65535;var e=I(t.mem_read(f));f0(t.mem_read(A+e&65535))},D[172]=function(){n0(A>>>8&255)},D[173]=function(){n0(A&255)},D[174]=function(){f=f+1&65535;var e=I(t.mem_read(f));n0(t.mem_read(A+e&65535))},D[180]=function(){Z(A>>>8&255)},D[181]=function(){Z(A&255)},D[182]=function(){f=f+1&65535;var e=I(t.mem_read(f));Z(t.mem_read(A+e&65535))},D[188]=function(){M(A>>>8&255)},D[189]=function(){M(A&255)},D[190]=function(){f=f+1&65535;var e=I(t.mem_read(f));M(t.mem_read(A+e&65535))},D[203]=function(){f=f+1&65535;var e=I(t.mem_read(f));f=f+1&65535;var b=t.mem_read(f),_;if(b<64){var y0=[o0,d0,E0,w0,z0,U,K0,G0],$0=y0[(b&56)>>>3],_=$0(t.mem_read(A+e&65535));t.mem_write(A+e&65535,_)}else{var I0=(b&56)>>>3;b<128?(c.N=0,c.H=1,c.Z=t.mem_read(A+e&65535)&1<>>8&255)},D[229]=function(){L0(A)},D[233]=function(){f=A-1&65535},D[249]=function(){W=A};let u=[4,10,7,6,4,4,7,4,4,11,7,6,4,4,7,4,8,10,7,6,4,4,7,4,12,11,7,6,4,4,7,4,7,10,16,6,4,4,7,4,7,11,16,6,4,4,7,4,7,10,13,6,11,11,10,4,7,11,13,6,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,7,7,7,7,7,7,4,7,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,4,4,4,4,4,4,7,4,5,10,10,10,10,11,7,11,5,10,10,0,10,17,7,11,5,10,10,11,10,11,7,11,5,4,10,11,10,0,7,11,5,10,10,19,10,11,7,11,5,4,10,4,10,0,7,11,5,10,10,4,10,11,7,11,5,6,10,4,10,0,7,11],r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,9,12,12,15,20,8,14,8,18,12,12,15,20,8,14,8,18,12,12,15,20,8,14,8,0,12,12,15,20,8,14,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,0,0,0,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],g=[8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,12,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8,8,8,8,8,8,8,15,8],s=[0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,14,20,10,8,8,11,0,0,15,20,10,8,8,11,0,0,0,0,0,23,23,19,0,0,15,0,0,0,0,0,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,8,8,8,8,8,8,19,8,8,8,8,8,8,8,19,8,19,19,19,19,19,19,0,19,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,8,8,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,23,0,15,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0];this.saveState=q,this.loadState=H0,this.reset=z,this.advanceInsn=F,this.interrupt=A0,this.getPC=()=>f,this.getSP=()=>W,this.getHalted=()=>P}var Ye=class{constructor(){this.retryInterrupts=!1;this.retryData=-1}buildCPU(){this.memBus&&this.ioBus&&(this.cpu=new vn({mem_read:this.memBus.read.bind(this.memBus),mem_write:this.memBus.write.bind(this.memBus),io_read:this.ioBus.read.bind(this.ioBus),io_write:this.ioBus.write.bind(this.ioBus)}))}connectMemoryBus(t){this.memBus=t,this.buildCPU()}connectIOBus(t){this.ioBus=t,this.buildCPU()}advanceInsn(){return this.retryInterrupts&&this.retryData>=0&&this.cpu.interrupt(!1,this.retryData)&&(this.retryData=-1),this.cpu.advanceInsn()}reset(){this.cpu.reset()}interrupt(t){!this.cpu.interrupt(!1,t)&&this.retryInterrupts&&(this.retryData=t)}NMI(){this.cpu.interrupt(!0,0)}getSP(){return this.cpu.getSP()}getPC(){return this.cpu.getPC()}isHalted(){return this.cpu.getHalted()}saveState(){return this.cpu.saveState()}loadState(t){this.cpu.loadState(t)}isStable(){return!0}};var it=class{constructor(){this.master=new MasterChannel}start(){this.looper||(this.looper=new AudioLooper(512),this.looper.setChannel(this.master),this.looper.activate())}stop(){this.looper&&(this.looper.setChannel(null),this.looper=null)}},Dt=class{constructor(t){this.psg=new PsgDeviceChannel;this.curreg=0;this.master=t,this.psg.setMode(PsgDeviceChannel.MODE_SIGNED),this.psg.setDevice(PsgDeviceChannel.DEVICE_AY_3_8910),t.master.addChannel(this.psg)}reset(){for(var t=15;t>=0;t--)this.selectRegister(t),this.setData(0)}selectRegister(t){this.curreg=t&15}setData(t){this.psg.writeRegisterAY(this.curreg,t&255)}readData(){return this.psg.readRegister(this.curreg)}currentRegister(){return this.curreg}},Rt=class{constructor(t){this.psg=new PsgDeviceChannel;this.master=t,this.psg.setMode(PsgDeviceChannel.MODE_SIGNED),this.psg.setDevice(PsgDeviceChannel.DEVICE_SN76489),t.master.addChannel(this.psg)}reset(){}setData(t){this.psg.writeRegisterSN(0,t&255)}};function En(h){for(var t=new it,n=1;n<=h;n++){var a=new gn;t["pokey"+n]=a,t.master.addChannel(a)}return t}function Re(h,t){for(var n=new Uint8Array(h.length*t.length),a=0,m=0;m.5?1:0;var Y0=Re(I,z),T0=Re(z,H0),k0=[Y0,z,T0,z,I,q,H0,q],Q=We(2),l0=We(6),L0=We(31),b0=We(93),B0=Re(A0,H0),W0=Re(z,Q),O0=Re(z,l0),F0=[t0,H0,B0,T0,Q,Q,L0,W0,F,z,L0,t0,l0,l0,b0,O0],p0=new Uint8Array(16),c0=new Float32Array(4),a0=new Float32Array(4),E=new Float32Array(4),k=new Uint8Array(4),M=[t0,t0,t0,t0],f0,Z,n0,L,O=!0;this.setBufferLength=function(X){f0=new Int32Array(X)},this.getBuffer=function(){return f0},this.setSampleRate=function(X){Z=X,L=v/X};function P0(X){var r0=p0[8],C0=r0&N?G:w,j,m0=X&4,N0=m0>>1,V=m0>>2;r0&i>>V?(r0&d>>V?j=p0[m0+2]*256+p0[m0+0]+7:j=(p0[m0+2]*256+p0[m0+0]+1)*C0,a0[N0+1]=L/j,a0[N0+0]=0):(r0&d>>V?j=p0[m0+0]+4:j=(p0[m0+0]+1)*C0,a0[N0+0]=L/j,j=(p0[m0+2]+1)*C0,a0[N0+1]=L/j)}this.setRegister=function(X,r0){if(X&=15,r0&=255,p0[X]!=r0)switch(p0[X]=r0,X){case 0:case 2:case 4:case 6:case 8:O=!0;break;case 1:case 3:case 5:case 7:E[X>>1]=r0&15,M[X>>1]=k0[r0>>5];break}},this.getRegister=function(X){return X&=15,p0[X]},this.setTIARegister=function(X,r0){switch(X){case 23:case 24:p0[(X&1)*4]=r0&31,O=!0;break;case 21:case 22:M[(X&1)*2]=F0[r0&15];break;case 25:case 26:E[(X&1)*2]=r0&15;break}},this.generate=function(X){O&&(P0(0),P0(4),O=!1);for(var r0=0;r00&&m0<1&&N0>0){var V=M[j],e0=c0[j]+=m0;e0>V.length&&(e0=c0[j]=e0-Math.floor(e0/V.length)*V.length);var s0=V[Math.floor(e0)];s0&&(C0+=N0)}}C0*=64,f0[r0]=C0,f0[r0+1]=C0}}},Zn=function(h){var t,n,a=[],m=0;h.onmessage=function(o){o&&o.data&&o.data.samples&&n&&(a.push(o.data.samples),m+=o.data.samples.length)},this.setBufferLength=function(o){n=new Int16Array(o),m=0},this.getBuffer=function(){return n},this.setSampleRate=function(o){t=o,h.postMessage({sampleRate:o})},this.generate=function(o){if(m=o.length)){d=0,x[Y]=o;var u0=(Y+1)%x.length;u0==i?Y=Math.floor(i+y/2)%x.length:Y=u0,o=x[Y]}},this.feedSample=function(G,u0){if(m+=G*u0,n+=a*u0,n>=1){for(m/=n;n>=1;)this.addSingleSample(m*a),n-=1;m*=n}}},ze=class{constructor(t){this.sa=new pn(t)}feedSample(t,n){this.sa.feedSample(t,n)}start(){this.sa.start()}stop(){this.sa.stop()}},Bt=class{constructor(t,n,a){this.audioGain=1/8192;this.bufferLength=n*2,this.channels=t.generate?[t]:t,this.channels.forEach(m=>{m.setBufferLength(this.bufferLength),m.setSampleRate(a)})}generate(t){var n=this.bufferLength,a=this.channels.map(o=>o.getBuffer());this.channels.forEach(o=>{o.generate(n)});for(let o=0;om+=d[o]),t.feedSample(m*this.audioGain,1)}}};var Ke=class{constructor(t,n){this.idx=0;this.sl=0;this.cur_sp=-1;this.singleFrame=!0;this.m=t,this.reset(n||1048576)}start(){this.m.connectProbe(this)}stop(){this.m.connectProbe(null)}reset(t){t&&(this.buf=new Uint32Array(t)),this.sl=0,this.cur_sp=-1,this.clear()}clear(){this.idx=0}logData(t){this.log(t)}log(t){this.idx>=this.buf.length||(this.buf[this.idx++]=t)}relog(t){this.buf[this.idx-1]=t}lastOp(){return this.idx>0?this.buf[this.idx-1]&4278190080:-1}lastAddr(){return this.idx>0?this.buf[this.idx-1]&16777215:-1}addLogBuffer(t){this.idx+t.length>this.buf.length&&(t=t.slice(0,this.buf.length-this.idx)),this.buf.set(t,this.idx),this.idx+=t.length}logClocks(t){t|=0,t>0&&(this.lastOp()==0?this.relog(this.lastAddr()+t|0):this.log(t|0))}logNewScanline(){this.log(2113929216),this.sl++}logNewFrame(){this.log(2130706432),this.sl=0,this.singleFrame&&this.clear()}logExecute(t,n){this.cur_sp!==n&&(nthis.cur_sp&&this.log(184549376|n),this.cur_sp=n),this.log(t|16777216)}logInterrupt(t){this.log(t|134217728)}logValue(t,n,a){this.log(t&65535|(n&255)<<16|a)}logRead(t,n){this.logValue(t,n,301989888)}logWrite(t,n){this.logValue(t,n,318767104)}logIORead(t,n){this.logValue(t,n,335544320)}logIOWrite(t,n){this.logValue(t,n,352321536)}logVRAMRead(t,n){this.logValue(t,n,369098752)}logVRAMWrite(t,n){this.logValue(t,n,385875968)}logIllegal(t){this.log(t|150994944)}logWait(t){this.log(t|520093696)}logDMARead(t,n){this.logValue(t,n,402653184)}logDMAWrite(t,n){this.logValue(t,n,419430400)}countEvents(t){for(var n=0,a=0;athis.rom.length)throw new Error(`ROM too big: ${t.length} > ${this.rom.length}`);this.rom.set(t)}loadState(t){this.cpu.loadState(t.c),this.ram.set(t.ram),this.inputs.set(t.inputs)}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),inputs:this.inputs.slice(0)}}loadControlsState(t){this.inputs.set(t.inputs)}saveControlsState(){return{inputs:this.inputs.slice(0)}}advanceCPU(){var t=this.cpu,n=1;return this.cpu.isStable()&&this.probe.logExecute(this.cpu.getPC(),this.cpu.getSP()),t.advanceClock?t.advanceClock():t.advanceInsn&&(n=t.advanceInsn(1)),this.probe.logClocks(n),n}probeMemoryBus(t){return{read:n=>{let a=t.read(n);return this.probe.logRead(n,a),a},write:(n,a)=>{this.probe.logWrite(n,a),t.write(n,a)},read32:n=>{let a=t.read32(n);return this.probe.logRead(n,a),a},write32:(n,a)=>{this.probe.logWrite(n,a),t.write32(n,a)}}}connectCPUMemoryBus(t){this.cpu.connectMemoryBus(this.probeMemoryBus(t))}probeIOBus(t){return{read:n=>{let a=t.read(n);return this.probe.logIORead(n,a),a},write:(n,a)=>{this.probe.logIOWrite(n,a),t.write(n,a)}}}probeDMABus(t){return{read:n=>{let a=t.read(n);return this.probe.logDMARead(n,a),a},write:(n,a)=>{this.probe.logDMAWrite(n,a),t.write(n,a)}}}connectCPUIOBus(t){this.cpu.connectIOBus(this.probeIOBus(t))}},ct=class extends ft{constructor(){super(...arguments);this.overscan=!1;this.rotate=0}getAudioParams(){return{sampleRate:this.sampleRate,stereo:!1}}connectAudio(n){this.audio=n}getVideoParams(){return{width:this.canvasWidth,height:this.numVisibleScanlines,aspect:this.aspectRatio,overscan:this.overscan,rotate:this.rotate}}connectVideo(n){this.pixels=n}},Nt=class extends ct{advanceFrame(t){this.preFrame();var n=0,a=0;this.probe.logNewFrame(),this.frameCycles=0;for(var m=0;m=64&&n<=127&&(x=It[n-64]),n>=160&&n<=191&&(x=It[n-160+64]),d++;break;case 221:case 253:var y=t==221?"ix":"iy";n==203?(x=Lt[m],i[2]=m,i[3]=a,d++):x=yt[n],x=x.replace(/[(]hl[)]/,"("+y+"+x)"),x=x.replace(/\bhl\b/,y),d++;break;default:x=yt[t];break}if((!x||!x.length)&&(x="??"),/\bxx\b/.test(x))x=x.replace(/\bxx\b/,"$"+$(i[d]+(i[d+1]<<8),4)),d+=2,Y=!0;else if(/\bx\b/.test(x)){if(x.startsWith("j")){var p=n<128?h+2+n:h+2-(256-n);p&=65535,x=x.replace(/\bx\b/,"$"+$(p,4)),Y=!0}else x=x.replace(/\bx\b/,"$"+$(i[d],2));d+=1}return{line:x.toUpperCase(),nbytes:d,isaddr:Y}}function je(){var h,t,n,a,m,o,d,x,i,Y,y=1,p=2,N=4,w=8,G=16,u0=32,A=64,R=128,i0=65534,T=65532,W=65530,f=65528,c=65526,g0=65524,M0=65522,H=0,D0,P,v,V0=[6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6,0,0,2,4,0,0,5,9,0,2,3,0,3,2,8,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,0,5,3,6,9,11,0,19,2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2,2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2,6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6,7,0,0,7,7,0,7,7,7,7,7,0,7,7,4,7,2,2,2,4,2,2,2,0,2,2,2,2,4,7,3,0,4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5,4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5,5,5,5,7,5,5,5,5,5,5,5,5,7,8,6,6,2,2,2,4,2,2,2,0,2,2,2,2,3,0,3,0,4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,7,5,5,5,5,5,5,5,5,6,6,6,6],t0=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,4,0,0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6,0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6,0,0,0,8,0,0,0,0,0,0,0,0,8,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7],q=[4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8],H0=function(u,r,g){i|=((u^r^g^g>>1)&128)>>6},z=function(u,r,g){i|=((u^r^g^g>>1)&32768)>>14},F=function(){return(t<<8)+n},A0=function(u){t=u>>8&255,n=u&255},x0=function(u){P(--d,u&255)},I=function(u){P(--d,u&255),P(--d,u>>8&255)},U0=function(u){P(--o,u&255)},Y0=function(u){P(--o,u&255),P(--o,u>>8&255)},T0=function(){return v(d++)},k0=function(){return v(d++)*256+v(d++)},Q=function(){return v(o++)},l0=function(){return v(o++)*256+v(o++)},L0=function(u){var r=0;u&128&&(I(x),r+=2),u&64&&(I(o),r+=2),u&32&&(I(m),r+=2),u&16&&(I(a),r+=2),u&8&&(x0(Y),r++),u&4&&(x0(n),r++),u&2&&(x0(t),r++),u&1&&(x0(i),r++),H+=r},b0=function(u){var r=0;u&128&&(Y0(x),r+=2),u&64&&(Y0(d),r+=2),u&32&&(Y0(m),r+=2),u&16&&(Y0(a),r+=2),u&8&&(U0(Y),r++),u&4&&(U0(n),r++),u&2&&(U0(t),r++),u&1&&(U0(i),r++),H+=r},B0=function(u){var r=0;u&1&&(i=T0(),r++),u&2&&(t=T0(),r++),u&4&&(n=T0(),r++),u&8&&(Y=T0(),r++),u&16&&(a=k0(),r+=2),u&32&&(m=k0(),r+=2),u&64&&(o=k0(),r+=2),u&128&&(x=k0(),r+=2),H+=r},W0=function(u){var r=0;u&1&&(i=Q(),r++),u&2&&(t=Q(),r++),u&4&&(n=Q(),r++),u&8&&(Y=Q(),r++),u&16&&(a=l0(),r+=2),u&32&&(m=l0(),r+=2),u&64&&(d=l0(),r+=2),u&128&&(x=l0(),r+=2),H+=r},O0=function(u){switch(u&15){case 0:return F();case 1:return a;case 2:return m;case 3:return o;case 4:return d;case 5:return x;case 8:return t;case 9:return n;case 10:return i;case 11:return Y;default:return null}},F0=function(u,r){switch(u&15){case 0:A0(r);return;case 1:a=r;return;case 2:m=r;return;case 3:o=r;return;case 4:d=r;return;case 5:x=r;return;case 8:t=r;return;case 9:n=r;return;case 10:i=r;return;case 11:Y=r;return;default:return}},p0=function(u,r){var g=u&136;(g==128||g==8)&&(g=0),r?(g=O0(u>>4),F0(u>>4,O0(u)),F0(u,g)):F0(u,O0(u>>4))},c0=function(u){return u>127?u-256:u},a0=function(u){return u>32767?u-65536:u},E=function(){var u=v(x++);return x&=65535,u},k=function(){var u=v(x++);x&=65535;var r=v(x++);return x&=65535,u*256+r},M=function(u){var r=v(u++);u&=65535;var g=v(u++);return u&=65535,r*256+g},f0=function(u,r){P(u++,r>>8&255),u&=65535,P(u,r&255)},Z=function(){var u=E(),r;switch(u&96){case 0:r=a;break;case 32:r=m;break;case 64:r=o;break;case 96:r=d;break}var g=null,s=null,e;if(u&128){switch(u&15){case 0:s=r,g=r+1,H+=2;break;case 1:s=r,g=r+2,H+=3;break;case 2:g=r-1,s=g,H+=2;break;case 3:g=r-2,s=g,H+=3;break;case 4:s=r;break;case 5:s=r+c0(n),H+=1;break;case 6:s=r+c0(t),H+=1;break;case 7:s=0;break;case 8:s=r+c0(E()),H+=1;break;case 9:s=r+a0(k()),H+=4;break;case 10:s=0;break;case 11:H+=4,s=r+F();break;case 12:e=c0(E()),s=x+e,H+=1;break;case 13:e=a0(k()),s=x+e,H+=5;break;case 14:s=0;break;case 15:H+=5,s=k();break}s&=65535,u&16&&(s=v(s)*256+v(s+1&65535),H+=3)}else{var b=u&31;b>15&&(b-=32),s=r+b,H+=1}if(g!==null)switch(u&96){case 0:a=g;break;case 32:m=g;break;case 64:o=g;break;case 96:d=g;break}return s&65535},n0=function(u){i&=~(N|w),u===0&&(i|=N),u&32768&&(i|=w)},L=function(u){return u++,u&=255,i&=~(N|p|w),i|=q[u],(u===0||u==128)&&(i|=p),u},O=function(u){return u--,u&=255,i&=~(N|p|w),i|=q[u],(u===127||u==255)&&(i|=p),u},P0=function(u,r){var g=u-r;return i&=~(y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g),g&255},X=function(u,r){var g=u-r;return i&=~(y|N|p|w),(g&65535)===0&&(i|=N),g&32768&&(i|=w),g&65536&&(i|=y),z(u,r,g),g&65535},r0=function(u,r){var g=u+r;return i&=~(u0|y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g),(g^u^r)&16&&(i|=u0),g&255},C0=function(u,r){var g=u+r;return i&=~(y|N|p|w),(g&65535)===0&&(i|=N),g&32768&&(i|=w),g&65536&&(i|=y),z(u,r,g),g&65535},j=function(u,r){var g=u+r+(i&y);return i&=~(u0|y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g),(g^u^r)&16&&(i|=u0),g&255},m0=function(u,r){var g=u-r-(i&y);return i&=~(y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g),g&255},N0=function(u,r){var g=u-r;i&=~(y|N|p|w),i|=q[g&255],g&256&&(i|=y),H0(u,r,g)},V=function(u,r){var g=u-r;i&=~(y|N|p|w),(g&65535)===0&&(i|=N),g&32768&&(i|=w),g&65536&&(i|=y),z(u,r,g)},e0=function(u){return i&=~(y|N|p|w),u==128&&(i|=p),u=(~u&255)+1,u===0&&(i|=N),u&128&&(i|=w|y),u},s0=function(u){return i&=~(N|y|w),u&1&&(i|=y),u>>=1,u===0&&(i|=N),u&255},_0=function(u){return i&=~(N|y|w),u&1&&(i|=y),u=u&128|u>>1,i|=q[u],u},R0=function(u){var r=u;return i&=~(N|y|w|p),u&128&&(i|=y),u<<=1,i|=q[u],(u^r)&128&&(i|=p),u},X0=function(u){var r=u,g=i&y;return i&=~(N|y|w|p),u&128&&(i|=y),u=u<<1|g,i|=q[u],(u^r)&128&&(i|=p),u},o0=function(u){var r=i&y;return i&=~(N|y|w),u&1&&(i|=y),u=u>>1|r<<7,i|=q[u],u},d0=function(u,r){return i&=~(N|w|p),u^=r,i|=q[u],u},E0=function(u,r){return i&=~(N|w|p),u|=r,i|=q[u],u},w0=function(u,r){return i&=~(N|w|p),u&=r,i|=q[u],u},z0=function(u){return i&=~(N|w|p),u^=255,i|=q[u],i|=y,u},U=function(){return Y*256+E()},K0=function(){var u=H,r=null,g=null,s=x,e=E();switch(H+=V0[e],e){case 0:r=U(),P(r,e0(v(r)));break;case 3:r=U(),P(r,z0(v(r)));break;case 4:r=U(),P(r,s0(v(r)));break;case 6:r=U(),P(r,o0(v(r)));break;case 7:r=U(),P(r,_0(v(r)));break;case 8:r=U(),P(r,R0(v(r)));break;case 9:r=U(),P(r,X0(v(r)));break;case 10:r=U(),P(r,O(v(r)));break;case 12:r=U(),P(r,L(v(r)));break;case 13:r=U(),g=v(r),i&=~(N|w|p),i|=q[g];break;case 14:r=U(),x=r;break;case 15:r=U(),P(r,0),i&=~(y|w|p),i|=N;break;case 18:break;case 19:break;case 22:r=a0(k()),x+=r;break;case 23:r=a0(k()),I(x),x+=r;break;case 25:var b=0,_=t&240,y0=t&15;(y0>9||i&32)&&(b|=6),_>128&&y0>9&&(b|=96),(_>144||i&1)&&(b|=96),r=b+t,i&=~(y|w|N|p),r&256&&(i|=y),t=r&255,i|=q[t];break;case 26:i|=E();break;case 28:i&=E();break;case 29:t=n&128?255:0,n0(F()),i&=~p;break;case 30:g=E(),p0(g,!0);break;case 31:g=E(),p0(g,!1);break;case 32:r=c0(E()),x+=r;break;case 33:r=c0(E());break;case 34:r=c0(E()),i&(y|N)||(x+=r);break;case 35:r=c0(E()),i&(y|N)&&(x+=r);break;case 36:r=c0(E()),i&y||(x+=r);break;case 37:r=c0(E()),i&y&&(x+=r);break;case 38:r=c0(E()),i&N||(x+=r);break;case 39:r=c0(E()),i&N&&(x+=r);break;case 40:r=c0(E()),i&p||(x+=r);break;case 41:r=c0(E()),i&p&&(x+=r);break;case 42:r=c0(E()),i&w||(x+=r);break;case 43:r=c0(E()),i&w&&(x+=r);break;case 44:r=c0(E()),i&w^(i&p)<<2||(x+=r);break;case 45:r=c0(E()),i&w^(i&p)<<2&&(x+=r);break;case 46:r=c0(E()),i&w^(i&p)<<2||i&N||(x+=r);break;case 47:r=c0(E()),(i&w^(i&p)<<2||i&N)&&(x+=r);break;case 48:a=Z(),a===0?i|=N:i&=~N;break;case 49:m=Z(),m===0?i|=N:i&=~N;break;case 50:d=Z();break;case 51:o=Z();break;case 52:L0(E());break;case 53:B0(E());break;case 54:b0(E());break;case 55:W0(E());break;case 57:x=k0();break;case 58:a+=n;break;case 59:i=T0(),i&R&&(H+=9,t=T0(),n=T0(),Y=T0(),a=k0(),m=k0(),o=k0()),x=k0();break;case 60:i&=E();break;case 61:r=t*n,r===0?i|=N:i&=~N,r&128?i|=y:i&=~y,A0(r);break;case 63:i|=R,I(x),I(o),I(m),I(a),x0(Y),x0(n),x0(t),x0(i),i|=G|A,x=M(W);break;case 64:t=e0(t);break;case 67:t=z0(t);break;case 68:t=s0(t);break;case 70:t=o0(t);break;case 71:t=_0(t);break;case 72:t=R0(t);break;case 73:t=X0(t);break;case 74:t=O(t);break;case 76:t=L(t);break;case 77:i&=~(N|w|p),i|=q[t];break;case 79:t=0,i&=~(w|p|y),i|=N;break;case 80:n=e0(n);break;case 83:n=z0(n);break;case 84:n=s0(n);break;case 86:n=o0(n);break;case 87:n=_0(n);break;case 88:n=R0(n);break;case 89:n=X0(n);break;case 90:n=O(n);break;case 92:n=L(n);break;case 93:i&=~(N|w|p),i|=q[n];break;case 95:n=0,i&=~(w|p|y),i|=N;break;case 96:r=Z(),P(r,e0(v(r)));break;case 99:r=Z(),P(r,z0(v(r)));break;case 100:r=Z(),P(r,s0(v(r)));break;case 102:r=Z(),P(r,o0(v(r)));break;case 103:r=Z(),P(r,_0(v(r)));break;case 104:r=Z(),P(r,R0(v(r)));break;case 105:r=Z(),P(r,X0(v(r)));break;case 106:r=Z(),P(r,O(v(r)));break;case 108:r=Z(),P(r,L(v(r)));break;case 109:r=Z(),g=v(r),i&=~(N|w|p),i|=q[g];break;case 110:r=Z(),x=r;break;case 111:r=Z(),P(r,0),i&=~(y|w|p),i|=N;break;case 112:r=k(),P(r,e0(v(r)));break;case 115:r=k(),P(r,z0(v(r)));break;case 116:r=k(),P(r,s0(v(r)));break;case 118:r=k(),P(r,o0(v(r)));break;case 119:r=k(),P(r,_0(v(r)));break;case 120:r=k(),P(r,R0(v(r)));break;case 121:r=k(),P(r,X0(v(r)));break;case 122:r=k(),P(r,O(v(r)));break;case 124:r=k(),P(r,L(v(r)));break;case 125:r=k(),g=v(r),i&=~(N|w|p),i|=q[g];break;case 126:r=k(),x=r;break;case 127:r=k(),P(r,0),i&=~(y|w|p),i|=N;break;case 128:t=P0(t,E());break;case 129:N0(t,E());break;case 130:t=m0(t,E());break;case 131:A0(X(F(),k()));break;case 132:t=w0(t,E());break;case 133:w0(t,E());break;case 134:t=E(),i&=~(N|w|p),i|=q[t];break;case 136:t=d0(t,E());break;case 137:t=j(t,E());break;case 138:t=E0(t,E());break;case 139:t=r0(t,E());break;case 140:V(a,k());break;case 141:r=c0(E()),I(x),x+=r;break;case 142:a=k(),n0(a),i&=~p;break;case 144:r=U(),t=P0(t,v(r));break;case 145:r=U(),N0(t,v(r));break;case 146:r=U(),t=m0(t,v(r));break;case 147:r=U(),A0(X(F(),M(r)));break;case 148:r=U(),t=w0(t,v(r));break;case 149:r=U(),w0(t,v(r));break;case 150:r=U(),t=v(r),i&=~(N|w|p),i|=q[t];break;case 151:r=U(),P(r,t),i&=~(N|w|p),i|=q[t];break;case 152:r=U(),t=d0(t,v(r));break;case 153:r=U(),t=j(t,v(r));break;case 154:r=U(),t=E0(t,v(r));break;case 155:r=U(),t=r0(t,v(r));break;case 156:r=U(),V(a,M(r));break;case 157:r=U(),I(x),x=r;break;case 158:r=U(),a=M(r),n0(a),i&=~p;break;case 159:r=U(),f0(r,a),n0(a),i&=~p;break;case 160:r=Z(),t=P0(t,v(r));break;case 161:r=Z(),N0(t,v(r));break;case 162:r=Z(),t=m0(t,v(r));break;case 163:r=Z(),A0(X(F(),M(r)));break;case 164:r=Z(),t=w0(t,v(r));break;case 165:r=Z(),w0(t,v(r));break;case 166:r=Z(),t=v(r),i&=~(N|w|p),i|=q[t];break;case 167:r=Z(),P(r,t),i&=~(N|w|p),i|=q[t];break;case 168:r=Z(),t=d0(t,v(r));break;case 169:r=Z(),t=j(t,v(r));break;case 170:r=Z(),t=E0(t,v(r));break;case 171:r=Z(),t=r0(t,v(r));break;case 172:r=Z(),V(a,M(r));break;case 173:r=Z(),I(x),x=r;break;case 174:r=Z(),a=M(r),n0(a),i&=~p;break;case 175:r=Z(),f0(r,a),n0(a),i&=~p;break;case 176:r=k(),t=P0(t,v(r));break;case 177:r=k(),N0(t,v(r));break;case 178:r=k(),t=m0(t,v(r));break;case 179:r=k(),A0(X(F(),M(r)));break;case 180:r=k(),t=w0(t,v(r));break;case 181:r=k(),w0(t,v(r));break;case 182:r=k(),t=v(r),i&=~(N|w|p),i|=q[t];break;case 183:r=k(),P(r,t),i&=~(N|w|p),i|=q[t];break;case 184:r=k(),t=d0(t,v(r));break;case 185:r=k(),t=j(t,v(r));break;case 186:r=k(),t=E0(t,v(r));break;case 187:r=k(),t=r0(t,v(r));break;case 188:r=k(),V(a,M(r));break;case 189:r=k(),I(x),x=r;break;case 190:r=k(),a=M(r),n0(a),i&=~p;break;case 191:r=k(),f0(r,a),n0(a),i&=~p;break;case 192:n=P0(n,E());break;case 193:N0(n,E());break;case 194:n=m0(n,E());break;case 195:A0(C0(F(),k()));break;case 196:n=w0(n,E());break;case 197:w0(n,E());break;case 198:n=E(),i&=~(N|w|p),i|=q[n];break;case 200:n=d0(n,E());break;case 201:n=j(n,E());break;case 202:n=E0(n,E());break;case 203:n=r0(n,E());break;case 204:r=k(),A0(r),n0(r),i&=~p;break;case 206:o=k(),n0(o),i&=~p;break;case 208:r=U(),n=P0(n,v(r));break;case 209:r=U(),N0(n,v(r));break;case 210:r=U(),n=m0(n,v(r));break;case 211:r=U(),A0(C0(F(),M(r)));break;case 212:r=U(),n=w0(n,v(r));break;case 213:r=U(),w0(n,v(r));break;case 214:r=U(),n=v(r),i&=~(N|w|p),i|=q[n];break;case 215:r=U(),P(r,n),i&=~(N|w|p),i|=q[n];break;case 216:r=U(),n=d0(n,v(r));break;case 217:r=U(),n=j(n,v(r));break;case 218:r=U(),n=E0(n,v(r));break;case 219:r=U(),n=r0(n,v(r));break;case 220:r=U(),g=M(r),A0(g),n0(g),i&=~p;break;case 221:r=U(),f0(r,F()),i&=~p;break;case 222:r=U(),o=M(r),n0(o),i&=~p;break;case 223:r=U(),f0(r,o),n0(o),i&=~p;break;case 224:r=Z(),n=P0(n,v(r));break;case 225:r=Z(),N0(n,v(r));break;case 226:r=Z(),n=m0(n,v(r));break;case 227:r=Z(),A0(C0(F(),M(r)));break;case 228:r=Z(),n=w0(n,v(r));break;case 229:r=Z(),w0(n,v(r));break;case 230:r=Z(),n=v(r),i&=~(N|w|p),i|=q[n];break;case 231:r=Z(),P(r,n),i&=~(N|w|p),i|=q[n];break;case 232:r=Z(),n=d0(n,v(r));break;case 233:r=Z(),n=j(n,v(r));break;case 234:r=Z(),n=E0(n,v(r));break;case 235:r=Z(),n=r0(n,v(r));break;case 236:r=Z(),g=M(r),A0(g),n0(g),i&=~p;break;case 237:r=Z(),f0(r,F()),i&=~p;break;case 238:r=Z(),o=M(r),n0(o),i&=~p;break;case 239:r=Z(),f0(r,o),n0(o),i&=~p;break;case 240:r=k(),n=P0(n,v(r));break;case 241:r=k(),N0(n,v(r));break;case 242:r=k(),n=m0(n,v(r));break;case 243:r=k(),A0(C0(F(),M(r)));break;case 244:r=k(),n=w0(n,v(r));break;case 245:r=k(),w0(n,v(r));break;case 246:r=k(),n=v(r),i&=~(N|w|p),i|=q[n];break;case 247:r=k(),P(r,n),i&=~(N|w|p),i|=q[n];break;case 248:r=k(),n=d0(n,v(r));break;case 249:r=k(),n=j(n,v(r));break;case 250:r=k(),n=E0(n,v(r));break;case 251:r=k(),n=r0(n,v(r));break;case 252:r=k(),g=M(r),A0(g),n0(g),i&=~p;break;case 253:r=k(),f0(r,F()),i&=~p;break;case 254:r=k(),o=M(r),n0(o),i&=~p;break;case 255:r=k(),f0(r,o),n0(o),i&=~p;break;case 16:switch(e=E(),H+=t0[e],e){case 33:r=a0(k());break;case 34:r=a0(k()),i&(y|N)||(x+=r);break;case 35:r=a0(k()),i&(y|N)&&(x+=r);break;case 36:r=a0(k()),i&y||(x+=r);break;case 37:r=a0(k()),i&y&&(x+=r);break;case 38:r=a0(k()),i&N||(x+=r);break;case 39:r=a0(k()),i&N&&(x+=r);break;case 40:r=a0(k()),i&p||(x+=r);break;case 41:r=a0(k()),i&p&&(x+=r);break;case 42:r=a0(k()),i&w||(x+=r);break;case 43:r=a0(k()),i&w&&(x+=r);break;case 44:r=a0(k()),i&w^(i&p)<<2||(x+=r);break;case 45:r=a0(k()),i&w^(i&p)<<2&&(x+=r);break;case 46:r=a0(k()),i&w^(i&p)<<2||i&N||(x+=r);break;case 47:r=a0(k()),(i&w^(i&p)<<2||i&N)&&(x+=r);break;case 63:i|=R,I(x),I(o),I(m),I(a),x0(Y),x0(n),x0(t),x0(i),i|=G|A,x=M(g0);break;case 131:V(F(),k());break;case 140:V(m,k());break;case 142:m=k(),n0(m),i&=~p;break;case 147:r=U(),V(F(),M(r));break;case 156:r=U(),V(m,M(r));break;case 158:r=U(),m=M(r),n0(m),i&=~p;break;case 159:r=U(),f0(r,m),n0(m),i&=~p;break;case 163:r=Z(),V(F(),M(r));break;case 172:r=Z(),V(m,M(r));break;case 174:r=Z(),m=M(r),n0(m),i&=~p;break;case 175:r=Z(),f0(r,m),n0(m),i&=~p;break;case 179:r=k(),V(F(),M(r));break;case 188:r=k(),V(m,M(r));break;case 190:r=k(),m=M(r),n0(m),i&=~p;break;case 191:r=k(),f0(r,m),n0(m),i&=~p;break;case 206:d=k(),n0(d),i&=~p;break;case 222:r=U(),d=M(r),n0(d),i&=~p;break;case 223:r=U(),f0(r,d),n0(d),i&=~p;break;case 238:r=Z(),d=M(r),n0(d),i&=~p;break;case 239:r=Z(),f0(r,d),n0(d),i&=~p;break;case 254:r=k(),d=M(r),n0(d),i&=~p;break;case 255:r=k(),f0(r,d),n0(d),i&=~p;break}break;case 17:switch(e=E(),H+=t0[e],e){case 63:i|=R,I(x),I(o),I(m),I(a),x0(Y),x0(n),x0(t),x0(i),i|=G|A,x=M(M0);break;case 131:V(o,k());break;case 140:V(d,k());break;case 147:r=U(),V(o,M(r));break;case 156:r=U(),V(d,M(r));break;case 163:r=Z(),V(o,M(r));break;case 172:r=Z(),V(d,M(r));break;case 179:r=k(),V(o,M(r));break;case 188:r=k(),V(d,M(r));break}break}return t&=255,n&=255,i&=255,Y&=255,a&=65535,m&=65535,o&=65535,d&=65535,x&=65535,H-u},G0=function(){x=M(i0),Y=0,i|=A|G,H=0,t=n=Y=a=m=o=d=0},q0=[[2,1,"NEG"],[1,0,"???"],[1,0,"???"],[2,1,"COM"],[2,1,"LSR"],[1,0,"???"],[2,1,"ROR"],[2,1,"ASR"],[2,1,"LSL"],[2,1,"ROL"],[2,1,"DEC"],[1,0,"???"],[2,1,"INC"],[2,1,"TST"],[2,1,"JMP"],[2,1,"CLR"],[1,0,"Prefix"],[1,0,"Prefix"],[1,2,"NOP"],[1,2,"SYNC"],[1,0,"???"],[1,0,"???"],[3,3,"LBRA"],[3,3,"LBSR"],[1,0,"???"],[1,2,"DAA"],[2,4,"ORCC"],[1,0,"???"],[2,4,"ANDCC"],[1,2,"SEX"],[2,20,"EXG"],[2,20,"TFR"],[2,5,"BRA"],[2,5,"BRN"],[2,5,"BHI"],[2,5,"BLS"],[2,5,"BCC"],[2,5,"BCS"],[2,5,"BNE"],[2,5,"BEQ"],[2,5,"BVC"],[2,5,"BVS"],[2,5,"BPL"],[2,5,"BMI"],[2,5,"BGE"],[2,5,"BLT"],[2,5,"BGT"],[2,5,"BLE"],[2,6,"LEAX"],[2,6,"LEAY"],[2,6,"LEAS"],[2,6,"LEAU"],[2,10,"PSHS"],[2,10,"PULS"],[2,11,"PSHU"],[2,11,"PULU"],[1,0,"???"],[1,2,"RTS"],[1,2,"ABX"],[1,2,"RTI"],[2,2,"CWAI"],[1,2,"MUL"],[1,2,"RESET"],[1,2,"SWI1"],[1,2,"NEGA"],[1,0,"???"],[1,0,"???"],[1,2,"COMA"],[1,2,"LSRA"],[1,0,"???"],[1,2,"RORA"],[1,2,"ASRA"],[1,2,"ASLA"],[1,2,"ROLA"],[1,2,"DECA"],[1,0,"???"],[1,2,"INCA"],[1,2,"TSTA"],[1,0,"???"],[1,2,"CLRA"],[1,2,"NEGB"],[1,0,"???"],[1,0,"???"],[1,2,"COMB"],[1,2,"LSRB"],[1,0,"???"],[1,2,"RORB"],[1,2,"ASRB"],[1,2,"ASLB"],[1,2,"ROLB"],[1,2,"DECB"],[1,0,"???"],[1,2,"INCB"],[1,2,"TSTB"],[1,0,"???"],[1,2,"CLRB"],[2,6,"NEG"],[1,0,"???"],[1,0,"???"],[2,6,"COM"],[2,6,"LSR"],[1,0,"???"],[2,6,"ROR"],[2,6,"ASR"],[2,6,"LSL"],[2,6,"ROL"],[2,6,"DEC"],[1,0,"???"],[2,6,"INC"],[2,6,"TST"],[2,6,"JMP"],[2,6,"CLR"],[3,7,"NEG"],[1,0,"???"],[1,0,"???"],[3,7,"COM"],[3,7,"LSR"],[1,0,"???"],[3,7,"ROR"],[3,7,"ASR"],[3,7,"LSL"],[3,7,"ROL"],[3,7,"DEC"],[1,0,"???"],[3,7,"INC"],[3,7,"TST"],[3,7,"JMP"],[3,7,"CLR"],[2,4,"SUBA"],[2,4,"CMPA"],[2,4,"SBCA"],[3,8,"SUBD"],[2,4,"ANDA"],[2,4,"BITA"],[2,4,"LDA"],[1,0,"???"],[2,4,"EORA"],[2,4,"ADCA"],[2,4,"ORA"],[2,4,"ADDA"],[3,8,"CMPX"],[2,5,"BSR"],[3,8,"LDX"],[1,0,"???"],[2,1,"SUBA"],[2,1,"CMPA"],[2,1,"SBCA"],[2,1,"SUBd"],[2,1,"ANDA"],[2,1,"BITA"],[2,1,"LDA"],[2,1,"STA"],[2,1,"EORA"],[2,1,"ADCA"],[2,1,"ORA"],[2,1,"ADDA"],[2,1,"CMPX"],[2,1,"JSR"],[2,1,"LDX"],[2,1,"STX"],[2,6,"SUBA"],[2,6,"CMPA"],[2,6,"SBCA"],[2,6,"SUBD"],[2,6,"ANDA"],[2,6,"BITA"],[2,6,"LDA"],[2,6,"STA"],[2,6,"EORA"],[2,6,"ADCA"],[2,6,"ORA"],[2,6,"ADDA"],[2,6,"CMPX"],[2,6,"JSR"],[2,6,"LDX"],[2,6,"STX"],[3,7,"SUBA"],[3,7,"CMPA"],[3,7,"SBCA"],[3,7,"SUBD"],[3,7,"ANDA"],[3,7,"BITA"],[3,7,"LDA"],[3,7,"STA"],[3,7,"EORA"],[3,7,"ADCA"],[3,7,"ORA"],[3,7,"ADDA"],[3,7,"CMPX"],[3,7,"JSR"],[3,7,"LDX"],[3,7,"STX"],[2,4,"SUBB"],[2,4,"CMPB"],[2,4,"SBCB"],[3,8,"ADDD"],[2,4,"ANDB"],[2,4,"BITB"],[2,4,"LDB"],[1,0,"???"],[2,4,"EORB"],[2,4,"ADCB"],[2,4,"ORB"],[2,4,"ADDB"],[3,8,"LDD"],[1,0,"???"],[3,8,"LDU"],[1,0,"???"],[2,1,"SUBB"],[2,1,"CMPB"],[2,1,"SBCB"],[2,1,"ADDD"],[2,1,"ANDB"],[2,1,"BITB"],[2,1,"LDB"],[2,1,"STB"],[2,1,"EORB"],[2,1,"ADCB"],[2,1,"ORB "],[2,1,"ADDB"],[2,1,"LDD "],[2,1,"STD "],[2,1,"LDU "],[2,1,"STU "],[2,6,"SUBB"],[2,6,"CMPB"],[2,6,"SBCB"],[2,6,"ADDD"],[2,6,"ANDB"],[2,6,"BITB"],[2,6,"LDB"],[2,6,"STB"],[2,6,"EORB"],[2,6,"ADCB"],[2,6,"ORB"],[2,6,"ADDB"],[2,6,"LDD"],[2,6,"STD"],[2,6,"LDU"],[2,6,"STU"],[3,7,"SUBB"],[3,7,"CMPB"],[3,7,"SBCB"],[3,7,"ADDD"],[3,7,"ANDB"],[3,7,"BITB"],[3,7,"LDB"],[3,7,"STB"],[3,7,"EORB"],[3,7,"ADCB"],[3,7,"ORB"],[3,7,"ADDB"],[3,7,"LDD"],[3,7,"STD"],[3,7,"LDU"],[3,7,"STU"]],S={63:[2,2,"SWI3"],131:[4,8,"CMPU"],140:[4,8,"CMPS"],147:[3,1,"CMPU"],156:[3,1,"CMPS"],163:[3,6,"CMPU"],172:[3,6,"CMPS"],179:[4,7,"CMPU"],188:[4,7,"CMPS"]},B={33:[5,3,"LBRN"],34:[5,3,"LBHI"],35:[5,3,"LBLS"],36:[5,3,"LBCC"],37:[5,3,"LBCS"],38:[5,3,"LBNE"],39:[5,3,"LBEQ"],40:[5,3,"LBVC"],41:[5,3,"LBVS"],42:[5,3,"LBPL"],43:[5,3,"LBMI"],44:[5,3,"LBGE"],45:[5,3,"LBLT"],46:[5,3,"LBGT"],47:[5,3,"LBLE"],63:[2,2,"SWI2"],131:[4,8,"CMPD"],140:[4,8,"CMPY"],142:[4,8,"LDY"],147:[3,1,"CMPD"],156:[3,1,"CMPY"],158:[3,1,"LDY"],159:[3,1,"STY"],163:[3,6,"CMPD"],172:[3,6,"CMPY"],174:[3,6,"LDY"],175:[3,6,"STY"],179:[4,7,"CMPD"],188:[4,7,"CMPY"],190:[4,7,"LDY"],191:[4,7,"STY"],206:[4,8,"LDS"],222:[3,1,"LDS"],223:[3,1,"STS"],238:[3,6,"LDS"],239:[3,6,"STS"],254:[4,7,"LDS"],255:[4,7,"STS"]},D=function(u,r,g,s,e,b){var _=function(ue,Qe){for(var Pe=ue.toString(16);Pe.length>5];if(!(xe&128)){var ve=xe&31;ve>15&&(ve=ve-32),J+=ve+","+Z0;break}var Ge=xe&16,Oe=xe&15,ge=g>127?g-256:g,pe=g*256+s>32767?g*256+s-65536:g*256+s;if(Ge)switch(Oe){case 0:J+="???";break;case 1:J+="[,"+Z0+"++]";break;case 2:J+="???";break;case 3:J+="[,--"+Z0+"]";break;case 4:J+="[,"+Z0+"]";break;case 5:J+="[B,"+Z0+"]";break;case 6:J+="[A,"+Z0+"]";break;case 7:J+="???";break;case 8:J+="["+ge+","+Z0+"]",j0++;break;case 9:J+="["+pe+","+Z0+"]",j0+=2;break;case 10:J+="???";break;case 11:J+="[D,"+Z0+"]";break;case 12:J+="["+ge+",PC]",j0++;break;case 13:J+="["+pe+",PC]",j0+=2;break;case 14:J+="???";break;case 15:J+="[$"+$0(g*256+s)+"]",j0+=2;break}else switch(Oe){case 0:J+=","+Z0+"+";break;case 1:J+=","+Z0+"++";break;case 2:J+=",-"+Z0;break;case 3:J+=",--"+Z0;break;case 4:J+=","+Z0;break;case 5:J+="B,"+Z0;break;case 6:J+="A,"+Z0;break;case 7:J+="???";break;case 8:J+=ge+","+Z0,j0++;break;case 9:J+=pe+","+Z0,j0+=2;break;case 10:J+="???";break;case 11:J+="D,"+Z0;break;case 12:J+=ge+",PC",j0++;break;case 13:J+=pe+",PC",j0+=2;break;case 14:J+="???";break;case 15:J+="$"+$0(g*256+s),j0+=2;break}break;case 7:J+=" $"+$0(r*256+g);break;case 8:J+=" #$"+$0(r*256+g);break;case 10:for(I0=["PC","U","Y","X","DP","B","A","CC"],ne=[],Q0=0;Q0<8;Q0++)(r&1)!==0&&ne.push(I0[7-Q0]),r>>=1;J+=" "+ne.join(",");break;case 11:for(I0=["PC","S","Y","X","DP","B","A","CC"],ne=[],Q0=0;Q0<8;Q0++)(r&1)!==0&&ne.push(I0[7-Q0]),r>>=1;J+=" "+ne.join(",");break;case 20:I0=["D","X","Y","U","S","PC","?","?","A","B","CC","DP","?","?","?","?"],J+=" "+I0[r>>4]+","+I0[r&15];break}return{line:J,nbytes:j0}};return{steps:function(u){for(;u>0;)u-=K0()},runFrame:function(u){for(;H>g;s===0?u+=r[g].toLowerCase():u+=r[g]}return u},disasm:D,isStable:function(){return!0}}}var ot=function(){var h=this;this.powerOn=function(){this.reset()},this.powerOff=function(){},this.clockPulse=function(){n&&(G++,A[G]())},this.connectBus=function(l){t=l},this.setRDY=function(l){n=l},this.isRDY=function(){return n},this.reset=function(){p=1,G=-1,A=[z],a=t.read(H)|t.read(H+1)<<8,this.setRDY(!0)};var t,n=!1,a=0,m=0,o=0,d=0,x=0,i=0,Y=0,y=0,p=0,N=0,w=0,G=-1,u0=-1,A,R=0,i0=0,T=0,W=!1,f=0,c=0,g0=0;let M0=65530,H=65532,D0=65534,P=0,v=1,V0=7,t0=6,q=1,H0=0;this.debug=!1,this.trace=!1;var z=function(){u0=t.read(a),A=e[u0],G=0,a++},F=z,A0=function(){t.read(a)},x0=function(){c=t.read(a),a++},I=function(){i0=t.read(a),a++},U0=function(){i0|=t.read(a)<<8,a++},Y0=function(){i0=t.read(T)},T0=function(){i0|=t.read(T)<<8},k0=function(){T=t.read(a),a++},Q=function(){T|=t.read(a)<<8,a++},l0=function(){T=t.read(f)},L0=function(){T|=t.read(f)<<8},b0=function(){var l=(T&255)+d;W=l>255,T=T&65280|l&255},B0=function(){var l=(T&255)+x;W=l>255,T=T&65280|l&255},W0=function(){var l=(T&255)+1;W=l>255,T=T&65280|l&255},O0=function(){W&&(T=T+256&65535)},F0=function(){f=t.read(a),a++},p0=function(){f|=t.read(a)<<8,a++},c0=function(){var l=(f&255)+1;f=f&65280|l&255},a0=function(){R=t.read(a),a++},E=function(){R=t.read(i0)},k=function(){R=t.read(T)},M=function(){t.write(i0,R)},f0=function(){t.write(T,R)},Z=function(){var l=a&255,C=l+c&255;c>127?g0=C>l?-256:0:g0=C>>7,Y=l>>>6&1,y=l>>>3&1,p=l>>>2&1,N=l>>>1&1,w=l&1},V=function(l){h.debug&&h.breakpoint("Illegal Opcode: "+l)},e0=function(l){return[z,A0,function(){l(),F()}]},s0=function(l){return[z,a0,function(){l(),F()}]},_0=function(l){return[z,I,E,function(){l(),F()}]},R0=function(l){return[z,I,U0,E,function(){l(),F()}]},X0=function(l){return[z,k0,k,function(){b0(),Y0()},function(){W0(),T0()},E,function(){l(),F()}]},o0=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,Q,function(){C(),k(),O0()},function(){W?k():(K(),F())},function(){K(),F()}]}},d0=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,k,function(){C(),k()},function(){K(),F()}]}},E0=function(l){return[z,F0,l0,function(){c0(),L0()},function(){B0(),k(),O0()},function(){W?k():(l(),F())},function(){l(),F()}]},w0=function(l){return[z,I,function(){l(),M()},F]},z0=function(l){return[z,I,U0,function(){l(),M()},F]},U=function(l){return[z,k0,k,function(){b0(),Y0()},function(){W0(),T0()},function(){l(),M()},F]},K0=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,Q,function(){C(),k(),O0()},function(){K(),f0()},F]}},G0=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,k,function(){C(),K(),f0()},F]}},q0=function(l){return[z,F0,l0,function(){c0(),L0()},function(){B0(),k(),O0()},function(){l(),f0()},F]},S=function(l){return[z,I,E,M,function(){l(),M()},F]},B=function(l){return[z,I,U0,E,M,function(){l(),M()},F]},D=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,k,function(){C(),k()},f0,function(){K(),f0()},F]}},u=function(l){var C=l===P?b0:B0;return function(K){return[z,k0,Q,function(){C(),k(),O0()},k,f0,function(){K(),f0()},F]}},r=function(l){return[z,k0,k,function(){b0(),Y0()},function(){W0(),T0()},E,M,function(){l(),M()},F]},g=function(l){return[z,F0,l0,function(){c0(),L0()},function(){B0(),k(),O0()},k,f0,function(){l(),f0()},F]},s=new Array(256),e=new Array(256);s[0]="BRK",e[0]=xn(),s[1]="ORA",e[1]=se(X0),s[2]="uKIL",e[2]=J0(),s[3]="uSLO",e[3]=Ae(r),s[4]="uNOP",e[4]=v0(_0),s[5]="ORA",e[5]=se(_0),s[6]="ASL",e[6]=Ze(S),s[7]="uSLO",e[7]=Ae(S),s[8]="PHP",e[8]=fn(),s[9]="ORA",e[9]=se(s0),s[10]="ASL",e[10]=b(),s[11]="uANC",e[11]=At(s0),s[12]="uNOP",e[12]=v0(R0),s[13]="ORA",e[13]=se(R0),s[14]="ASL",e[14]=Ze(B),s[15]="uSLO",e[15]=Ae(B),s[16]="BPL",e[16]=oe(V0,0),s[17]="ORA",e[17]=se(E0),s[18]="uKIL",e[18]=J0(),s[19]="uSLO",e[19]=Ae(g),s[20]="uNOP",e[20]=v0(d0(P)),s[21]="ORA",e[21]=se(d0(P)),s[22]="ASL",e[22]=Ze(D(P)),s[23]="uSLO",e[23]=Ae(D(P)),s[24]="CLC",e[24]=_(),s[25]="ORA",e[25]=se(o0(v)),s[26]="uNOP",e[26]=v0(e0),s[27]="uSLO",e[27]=Ae(u(v)),s[28]="uNOP",e[28]=v0(o0(P)),s[29]="ORA",e[29]=se(o0(P)),s[30]="ASL",e[30]=Ze(u(P)),s[31]="uSLO",e[31]=Ae(u(P)),s[32]="JSR",e[32]=on(),s[33]="AND",e[33]=ae(X0),s[34]="uKIL",e[34]=J0(),s[35]="uRLA",e[35]=de(r),s[36]="BIT",e[36]=ht(_0),s[37]="AND",e[37]=ae(_0),s[38]="ROL",e[38]=Ue(S),s[39]="uRLA",e[39]=de(S),s[40]="PLP",e[40]=sn(),s[41]="AND",e[41]=ae(s0),s[42]="ROL",e[42]=xe(),s[43]="uANC",e[43]=At(s0),s[44]="BIT",e[44]=ht(R0),s[45]="AND",e[45]=ae(R0),s[46]="ROL",e[46]=Ue(B),s[47]="uRLA",e[47]=de(B),s[48]="BMI",e[48]=oe(V0,1),s[49]="AND",e[49]=ae(E0),s[50]="uKIL",e[50]=J0(),s[51]="uRLA",e[51]=de(g),s[52]="uNOP",e[52]=v0(d0(P)),s[53]="AND",e[53]=ae(d0(P)),s[54]="ROL",e[54]=Ue(D(P)),s[55]="uRLA",e[55]=de(D(P)),s[56]="SEC",e[56]=ve(),s[57]="AND",e[57]=ae(o0(v)),s[58]="uNOP",e[58]=v0(e0),s[59]="uRLA",e[59]=de(u(v)),s[60]="uNOP",e[60]=v0(o0(P)),s[61]="AND",e[61]=ae(o0(P)),s[62]="ROL",e[62]=Ue(u(P)),s[63]="uRLA",e[63]=de(u(P)),s[64]="RTI",e[64]=ln(),s[65]="EOR",e[65]=fe(X0),s[66]="uKIL",e[66]=J0(),s[67]="uSRE",e[67]=Ce(r),s[68]="uNOP",e[68]=v0(_0),s[69]="EOR",e[69]=fe(_0),s[70]="LSR",e[70]=Fe(S),s[71]="uSRE",e[71]=Ce(S),s[72]="PHA",e[72]=an(),s[73]="EOR",e[73]=fe(s0),s[74]="LSR",e[74]=Je(),s[75]="uASR",e[75]=Gt(s0),s[76]="JMP",e[76]=dn(),s[77]="EOR",e[77]=fe(R0),s[78]="LSR",e[78]=Fe(B),s[79]="uSRE",e[79]=Ce(B),s[80]="BVC",e[80]=oe(t0,0),s[81]="EOR",e[81]=fe(E0),s[82]="uKIL",e[82]=J0(),s[83]="uSRE",e[83]=Ce(g),s[84]="uNOP",e[84]=v0(d0(P)),s[85]="EOR",e[85]=fe(d0(P)),s[86]="LSR",e[86]=Fe(D(P)),s[87]="uSRE",e[87]=Ce(D(P)),s[88]="CLI",e[88]=$0(),s[89]="EOR",e[89]=fe(o0(v)),s[90]="uNOP",e[90]=v0(e0),s[91]="uSRE",e[91]=Ce(u(v)),s[92]="uNOP",e[92]=v0(o0(P)),s[93]="EOR",e[93]=fe(o0(P)),s[94]="LSR",e[94]=Fe(u(P)),s[95]="uSRE",e[95]=Ce(u(P)),s[96]="RTS",e[96]=bn(),s[97]="ADC",e[97]=re(X0),s[98]="uKIL",e[98]=J0(),s[99]="uRRA",e[99]=he(r),s[100]="uNOP",e[100]=v0(_0),s[101]="ADC",e[101]=re(_0),s[102]="ROR",e[102]=Xe(S),s[103]="uRRA",e[103]=he(S),s[104]="PLA",e[104]=cn(),s[105]="ADC",e[105]=re(s0),s[106]="ROR",e[106]=Z0(),s[107]="uARR",e[107]=Jt(s0),s[108]="JMP",e[108]=hn(),s[109]="ADC",e[109]=re(R0),s[110]="ROR",e[110]=Xe(B),s[111]="uRRA",e[111]=he(B),s[112]="BVS",e[112]=oe(t0,1),s[113]="ADC",e[113]=re(E0),s[114]="uKIL",e[114]=J0(),s[115]="uRRA",e[115]=he(g),s[116]="uNOP",e[116]=v0(d0(P)),s[117]="ADC",e[117]=re(d0(P)),s[118]="ROR",e[118]=Xe(D(P)),s[119]="uRRA",e[119]=he(D(P)),s[120]="SEI",e[120]=Oe(),s[121]="ADC",e[121]=re(o0(v)),s[122]="uNOP",e[122]=v0(e0),s[123]="uRRA",e[123]=he(u(v)),s[124]="uNOP",e[124]=v0(o0(P)),s[125]="ADC",e[125]=re(o0(P)),s[126]="ROR",e[126]=Xe(u(P)),s[127]="uRRA",e[127]=he(u(P)),s[128]="uNOP",e[128]=v0(s0),s[129]="STA",e[129]=me(U),s[130]="uNOP",e[130]=v0(s0),s[131]="uSAX",e[131]=Ee(U),s[132]="STY",e[132]=nt(w0),s[133]="STA",e[133]=me(w0),s[134]="STX",e[134]=tt(w0),s[135]="uSAX",e[135]=Ee(w0),s[136]="DEY",e[136]=Q0(),s[137]="uNOP",e[137]=v0(s0),s[138]="TXA",e[138]=Qe(),s[139]="uANE",e[139]=$t(s0),s[140]="STY",e[140]=nt(z0),s[141]="STA",e[141]=me(z0),s[142]="STX",e[142]=tt(z0),s[143]="uSAX",e[143]=Ee(z0),s[144]="BCC",e[144]=oe(H0,0),s[145]="STA",e[145]=me(q0),s[146]="uKIL",e[146]=J0(),s[147]="uSHA",e[147]=Ct(q0),s[148]="STY",e[148]=nt(G0(P)),s[149]="STA",e[149]=me(G0(P)),s[150]="STX",e[150]=tt(G0(v)),s[151]="uSAX",e[151]=Ee(G0(v)),s[152]="TYA",e[152]=jt(),s[153]="STA",e[153]=me(K0(v)),s[154]="TXS",e[154]=Pe(),s[155]="uSHS",e[155]=tn(K0(v)),s[156]="uSHY",e[156]=rn(K0(P)),s[157]="STA",e[157]=me(K0(P)),s[158]="uSHX",e[158]=nn(K0(v)),s[159]="uSHA",e[159]=Ct(K0(v)),s[160]="LDY",e[160]=De(s0),s[161]="LDA",e[161]=ce(X0),s[162]="LDX",e[162]=ke(s0),s[163]="uLAX",e[163]=_e(X0),s[164]="LDY",e[164]=De(_0),s[165]="LDA",e[165]=ce(_0),s[166]="LDX",e[166]=ke(_0),s[167]="uLAX",e[167]=_e(_0),s[168]="TAY",e[168]=pe(),s[169]="LDA",e[169]=ce(s0),s[170]="TAX",e[170]=ge(),s[171]="uLXA",e[171]=qt(s0),s[172]="LDY",e[172]=De(R0),s[173]="LDA",e[173]=ce(R0),s[174]="LDX",e[174]=ke(R0),s[175]="uLAX",e[175]=_e(R0),s[176]="BCS",e[176]=oe(H0,1),s[177]="LDA",e[177]=ce(E0),s[178]="uKIL",e[178]=J0(),s[179]="uLAX",e[179]=_e(E0),s[180]="LDY",e[180]=De(d0(P)),s[181]="LDA",e[181]=ce(d0(P)),s[182]="LDX",e[182]=ke(d0(v)),s[183]="uLAX",e[183]=_e(d0(v)),s[184]="CLV",e[184]=I0(),s[185]="LDA",e[185]=ce(o0(v)),s[186]="TSX",e[186]=ue(),s[187]="uLAS",e[187]=Qt(o0(v)),s[188]="LDY",e[188]=De(o0(P)),s[189]="LDA",e[189]=ce(o0(P)),s[190]="LDX",e[190]=ke(o0(v)),s[191]="uLAX",e[191]=_e(o0(v)),s[192]="CPY",e[192]=et(s0),s[193]="CMP",e[193]=ie(X0),s[194]="uNOP",e[194]=v0(s0),s[195]="uDCP",e[195]=le(r),s[196]="CPY",e[196]=et(_0),s[197]="CMP",e[197]=ie(_0),s[198]="DEC",e[198]=Me(S),s[199]="uDCP",e[199]=le(S),s[200]="INY",e[200]=j0(),s[201]="CMP",e[201]=ie(s0),s[202]="DEX",e[202]=ne(),s[203]="uSBX",e[203]=en(s0),s[204]="CPY",e[204]=et(R0),s[205]="CMP",e[205]=ie(R0),s[206]="DEC",e[206]=Me(B),s[207]="uDCP",e[207]=le(B),s[208]="BNE",e[208]=oe(q,0),s[209]="CMP",e[209]=ie(E0),s[210]="uKIL",e[210]=J0(),s[211]="uDCP",e[211]=le(g),s[212]="uNOP",e[212]=v0(d0(P)),s[213]="CMP",e[213]=ie(d0(P)),s[214]="DEC",e[214]=Me(D(P)),s[215]="uDCP",e[215]=le(D(P)),s[216]="CLD",e[216]=y0(),s[217]="CMP",e[217]=ie(o0(v)),s[218]="uNOP",e[218]=v0(e0),s[219]="uDCP",e[219]=le(u(v)),s[220]="uNOP",e[220]=v0(o0(P)),s[221]="CMP",e[221]=ie(o0(P)),s[222]="DEC",e[222]=Me(u(P)),s[223]="uDCP",e[223]=le(u(P)),s[224]="CPX",e[224]=qe(s0),s[225]="SBC",e[225]=te(X0),s[226]="uNOP",e[226]=v0(s0),s[227]="uISB",e[227]=be(r),s[228]="CPX",e[228]=qe(_0),s[229]="SBC",e[229]=te(_0),s[230]="INC",e[230]=Te(S),s[231]="uISB",e[231]=be(S),s[232]="INX",e[232]=ee(),s[233]="SBC",e[233]=te(s0),s[234]="NOP",e[234]=J(),s[235]="SBC",e[235]=te(s0),s[236]="CPX",e[236]=qe(R0),s[237]="SBC",e[237]=te(R0),s[238]="INC",e[238]=Te(B),s[239]="uISB",e[239]=be(B),s[240]="BEQ",e[240]=oe(q,1),s[241]="SBC",e[241]=te(E0),s[242]="uKIL",e[242]=J0(),s[243]="uISB",e[243]=be(g),s[244]="uNOP",e[244]=v0(d0(P)),s[245]="SBC",e[245]=te(d0(P)),s[246]="INC",e[246]=Te(D(P)),s[247]="uISB",e[247]=be(D(P)),s[248]="SED",e[248]=Ge(),s[249]="SBC",e[249]=te(o0(v)),s[250]="uNOP",e[250]=v0(e0),s[251]="uISB",e[251]=be(u(v)),s[252]="uNOP",e[252]=v0(o0(P)),s[253]="SBC",e[253]=te(o0(P)),s[254]="INC",e[254]=Te(u(P)),s[255]="uISB",e[255]=be(u(P));function b(){return e0(function(){X(o>127),o=o<<1&255,L(o),O(o)})}function _(){return e0(function(){w=0})}function y0(){return e0(function(){y=0})}function $0(){return e0(function(){p=0})}function I0(){return e0(function(){Y=0})}function ne(){return e0(function(){d=d-1&255,L(d),O(d)})}function Q0(){return e0(function(){x=x-1&255,L(x),O(x)})}function ee(){return e0(function(){d=d+1&255,L(d),O(d)})}function j0(){return e0(function(){x=x+1&255,L(x),O(x)})}function Je(){return e0(function(){w=o&1,o>>>=1,L(o),i=0})}function J(){return e0(function(){})}function xe(){return e0(function(){var l=o>127;o=(o<<1|w)&255,X(l),L(o),O(o)})}function Z0(){return e0(function(){var l=o&1;o=o>>>1|w<<7,X(l),L(o),O(o)})}function ve(){return e0(function(){w=1})}function Ge(){return e0(function(){y=1})}function Oe(){return e0(function(){p=1})}function ge(){return e0(function(){d=o,L(d),O(d)})}function pe(){return e0(function(){x=o,L(x),O(x)})}function ue(){return e0(function(){d=m,L(d),O(d)})}function Qe(){return e0(function(){o=d,L(o),O(o)})}function Pe(){return e0(function(){m=d})}function jt(){return e0(function(){o=x,L(o),O(o)})}function J0(){return[z,function(){V("KIL/HLT/JAM")},function(){G--}]}function v0(l){return l(function(){V("NOP/DOP")})}function re(l){return l(function(){if(y){var C=R,K=(o&15)+(C&15)+w;K>9&&(K+=6);var S0=(o>>4)+(C>>4)+(K>15?1:0)<<4;L(o+C+w&255),O(S0),P0((o^S0)&~(o^C)&128),S0>159&&(S0+=96),X(S0>255),o=(S0|K&15)&255}else{var h0=o+R+w;X(h0>255),P0((o^h0)&(R^h0)&128),o=h0&255,L(o),O(o)}})}function ae(l){return l(function(){o&=R,L(o),O(o)})}function ht(l){return l(function(){var C=R;L(o&C),P0(C&64),O(C)})}function ie(l){return l(function(){var C=o-R&255;X(o>=R),L(C),O(C)})}function qe(l){return l(function(){var C=d-R&255;X(d>=R),L(C),O(C)})}function et(l){return l(function(){var C=x-R&255;X(x>=R),L(C),O(C)})}function fe(l){return l(function(){o^=R,L(o),O(o)})}function ce(l){return l(function(){o=R,L(o),O(o)})}function ke(l){return l(function(){d=R,L(d),O(d)})}function De(l){return l(function(){x=R,L(x),O(x)})}function se(l){return l(function(){o|=R,L(o),O(o)})}function te(l){return l(function(){if(y){var C=R,K=(o&15)-(C&15)-(1-w),S0=(o>>4)-(C>>4)-(K<0?1:0);K<0&&(K-=6),S0<0&&(S0-=6);var h0=o-C-(1-w);X(~h0&256),P0((o^C)&(o^h0)&128),L(h0&255),O(h0),o=(S0<<4|K&15)&255}else C=~R&255,h0=o+C+w,X(h0>255),P0((o^h0)&(C^h0)&128),o=h0&255,L(o),O(o)})}function At(l){return l(function(){V("ANC"),o&=R,L(o),i=w=o&128?1:0})}function $t(l){return l(function(){V("ANE")})}function Jt(l){return l(function(){V("ARR");var C=o&R,K=w?128:0;C=C>>>1|K,o=C,L(C),O(C);var S0=o&96;S0==96?(w=1,Y=0):S0==0?(w=0,Y=0):S0==32?(w=0,Y=1):S0==64&&(w=1,Y=1)})}function Gt(l){return l(function(){V("ASR");var C=o&R;w=C&1,C=C>>>1,o=C,L(C),i=0})}function Qt(l){return l(function(){V("LAS");var C=m&R;o=C,d=C,m=C,L(C),O(C)})}function _e(l){return l(function(){V("LAX");var C=R;o=C,d=C,L(C),O(C)})}function qt(l){return l(function(){V("LXA");var C=o&R;o=C,d=C,L(C),O(C)})}function en(l){return l(function(){V("SBX");var C=o&d,K=R,S0=C-K&255;d=S0,X(C>=K),L(S0),O(S0)})}function me(l){return l(function(){R=o})}function tt(l){return l(function(){R=d})}function nt(l){return l(function(){R=x})}function Ee(l){return l(function(){V("SAX"),R=o&d})}function Ct(l){return l(function(){V("SHA"),R=o&d&(T>>>8)+1&255})}function tn(l){return l(function(){V("SHS");var C=o&d;m=C,R=C&(T>>>8)+1&255})}function nn(l){return l(function(){V("SHX"),R=d&(T>>>8)+1&255})}function rn(l){return l(function(){V("SHY"),R=x&(T>>>8)+1&255})}function Ze(l){return l(function(){X(R>127);var C=R<<1&255;R=C,L(C),O(C)})}function Me(l){return l(function(){var C=R-1&255;R=C,L(C),O(C)})}function Te(l){return l(function(){var C=R+1&255;R=C,L(C),O(C)})}function Fe(l){return l(function(){w=R&1,R>>>=1,L(R),i=0})}function Ue(l){return l(function(){var C=R>127,K=(R<<1|w)&255;R=K,X(C),L(K),O(K)})}function Xe(l){return l(function(){var C=R&1,K=R>>>1|w<<7;R=K,X(C),L(K),O(K)})}function le(l){return l(function(){V("DCP");var C=R-1&255;R=C,C=o-C,X(C>=0),L(C),O(C)})}function be(l){return l(function(){if(V("ISB"),R=R+1&255,y){var C=R,K=(o&15)-(C&15)-(1-w),S0=(o>>4)-(C>>4)-(K<0?1:0);K<0&&(K-=6),S0<0&&(S0-=6);var h0=o-C-(1-w);X(~h0&256),P0((o^C)&(o^h0)&128),L(h0&255),O(h0),o=(S0<<4|K&15)&255}else C=~R&255,h0=o+C+w,X(h0>255),P0((o^h0)&(C^h0)&128),o=h0&255,L(o),O(o)})}function de(l){return l(function(){V("RLA");var C=R,K=w;X(C&128),C=(C<<1|K)&255,R=C,o&=C,L(C),O(C)})}function he(l){return l(function(){V("RRA");var C=R,K=w?128:0;if(X(C&1),C=C>>>1|K,R=C,y){var S0=R,h0=(o&15)+(S0&15)+w;h0>9&&(h0+=6);var we=(o>>4)+(S0>>4)+(h0>15?1:0)<<4;L(o+S0+w&255),O(we),P0((o^we)&~(o^S0)&128),we>159&&(we+=96),X(we>255),o=(we|h0&15)&255}else{var He=o+R+w;X(He>255),P0((o^He)&(R^He)&128),o=He&255,L(o),O(o)}})}function Ae(l){return l(function(){V("SLO");var C=R;X(C&128),C=C<<1&255,R=C,C=o|C,o=C,L(C),O(C)})}function Ce(l){return l(function(){V("SRE");var C=R;X(C&1),C=C>>>1,R=C,C=(o^C)&255,o=C,L(C),O(C)})}function an(){return[z,A0,function(){j(o)},F]}function fn(){return[z,A0,function(){j(m0())},F]}function cn(){return[z,A0,C0,function(){o=r0(),L(o),O(o)},F]}function sn(){return[z,A0,C0,function(){N0(r0())},F]}function on(){return[z,I,C0,function(){j(a>>>8&255)},function(){j(a&255)},U0,function(){a=i0,F()}]}function xn(){return[z,a0,function(){h.debug&&h.breakpoint("BRK "+R),j(a>>>8&255)},function(){j(a&255)},function(){j(m0())},function(){i0=t.read(D0)},function(){i0|=t.read(D0+1)<<8},function(){a=i0,p=1,F()}]}function un(){return[z,a0,function(){h.debug&&h.breakpoint("IRQ "+R),j(a>>>8&255)},function(){j(a&255)},function(){j(m0()&-17)},function(){i0=t.read(D0)},function(){i0|=t.read(D0+1)<<8},function(){a=i0,F()}]}function mn(){return[z,a0,function(){h.debug&&h.breakpoint("NMI "+R),j(a>>>8&255)},function(){j(a&255)},function(){j(m0()&-17)},function(){i0=t.read(M0)},function(){i0|=t.read(M0+1)<<8},function(){a=i0,F()}]}function ln(){return[z,A0,C0,function(){N0(r0())},function(){i0=r0()},function(){i0|=r0()<<8},function(){a=i0,F()}]}function bn(){return[z,A0,C0,function(){i0=r0()},function(){i0|=r0()<<8},function(){a=i0,a0()},F]}function dn(){return[z,I,U0,function(){a=i0,F()}]}function hn(){return[z,F0,p0,l0,function(){c0(),L0()},function(){a=T,F()}]}function oe(l,C){var K;return l===q?K=function(){return N===C}:l===V0?K=function(){return i===C}:l===H0?K=function(){return w===C}:K=function(){return Y===C},[z,x0,function(){K()?(A0(),Z()):F()},function(){g0?(A0(),n0()):F()},F]}this.saveState=function(){return{PC:a-1&65535,A:o,X:d,Y:x,SP:m,N:i,V:Y,D:y,I:p,Z:N,C:w,T:G,o:u0,R:n?1:0,d:R,AD:i0,BA:T,BC:W?1:0,IA:f,bo:c,boa:g0}},this.loadState=function(l){a=l.PC+1&65535,o=l.A,d=l.X,x=l.Y,m=l.SP,i=l.N,Y=l.V,y=l.D,p=l.I,N=l.Z,w=l.C,G=l.T,u0=l.o,n=!!l.R,R=l.d,i0=l.AD,T=l.BA,W=!!l.BC,f=l.IA,c=l.bo,g0=l.boa,A=u0<0?[z]:e[u0]},this.toString=function(){return"CPU PC: "+a.toString(16)+" op: "+u0.toString()+" T: "+G+" data: "+R+` A: `+o.toString(16)+" X: "+d.toString(16)+" Y: "+x.toString(16)+" SP: "+m.toString(16)+" N"+i+" V"+Y+" D"+y+" I"+p+" Z"+N+" C"+w+" "},this.breakpoint=function(l){if(this.trace)var C="CPU Breakpoint! "+(l?"("+l+")":"")+` `+this.toString()};var St=[7,6,0,8,3,3,5,5,3,2,2,2,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,4,2,2,2,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,3,2,2,2,3,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,6,6,0,8,3,3,5,5,4,2,2,2,5,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,0,6,0,6,3,3,3,3,2,0,2,0,4,4,4,4,2,6,0,0,4,4,4,4,2,5,2,0,0,5,0,0,2,6,2,6,3,3,3,3,2,2,2,0,4,4,4,4,2,5,0,5,4,4,4,4,2,4,2,0,4,4,4,4,2,6,0,8,3,3,5,5,2,2,2,2,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7,2,6,0,8,3,3,5,5,2,2,2,0,4,4,6,6,2,5,0,8,4,4,6,6,2,4,0,7,4,4,7,7],An=[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1],Cn=[1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,3,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,1,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,0,2,0,2,2,2,2,2,1,0,1,0,3,3,3,3,2,2,0,0,2,2,2,3,1,3,1,0,0,3,0,0,2,2,2,2,2,2,2,2,1,2,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,3,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,2,1,2,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3,2,2,0,2,2,2,2,2,1,2,1,0,3,3,3,3,2,2,0,2,2,2,2,2,1,3,0,3,3,3,3,3],yn=[1,2,0,0,0,2,2,0,1,2,1,0,0,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,3,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,1,2,0,0,0,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,1,2,0,0,0,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,0,2,0,0,2,2,2,0,1,0,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,3,1,0,0,3,0,0,2,2,2,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,3,1,0,3,3,3,0,2,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0,2,2,0,0,2,2,2,0,1,2,1,0,3,3,3,0,2,2,0,0,0,2,2,0,1,3,0,0,0,3,3,0];this.getOpcodeMetadata=function(l,C){return{opcode:l,mnenomic:s[l],minCycles:St[l],maxCycles:St[l]+An[l],insnlength:Cn[l]}},this.setNMI=function(){A=mn(),G=1,a=a-1&65535},this.setIRQ=function(){p||(A=un(),G=1,a=a-1&65535)},this.getSP=function(){return m},this.getPC=function(){return a-1&65535},this.getT=function(){return G},this.isHalted=function(){return s[u0]=="uKIL"},this.isPCStable=function(){return G==0}};var Ot=class{constructor(){this.cpu=new ot;this.interruptType=0}connectMemoryBus(t){this.cpu.connectBus(t)}advanceClock(){if(this.interruptType&&this.isStable()){switch(this.interruptType){case 1:this.cpu.setNMI();break;case 2:this.cpu.setIRQ();break}this.interruptType=0}this.cpu.clockPulse()}advanceInsn(){do this.advanceClock();while(!this.isStable())}reset(){this.cpu.reset(),this.interruptType=0}interrupt(t){this.interruptType!=1&&(this.interruptType=t)}NMI(){this.interrupt(1)}IRQ(){this.interrupt(2)}getSP(){return this.cpu.getSP()}getPC(){return this.cpu.getPC()}isHalted(){return this.cpu.isHalted()}saveState(){var t=this.cpu.saveState();return t.it=this.interruptType,t}loadState(t){this.cpu.loadState(t),this.interruptType=t.it}isStable(){return this.cpu.isPCStable()}getOpcodeMetadata(t){return this.cpu.getOpcodeMetadata(t)}};var Ne=class{constructor(t){this.maxROMSize=262144;this.videoOffsetBytes=0;this.prefix=t;var n=this;this.cpu={getPC:n.getPC.bind(n),getSP:n.getSP.bind(n),isStable:n.isStable.bind(n),reset:n.reset.bind(n),saveState:()=>n.getCPUState(),loadState:()=>{console.log("loadState not implemented")},connectMemoryBus(){console.log("connectMemoryBus not implemented")}}}getImports(t){return{}}async fetchWASM(){var t=await fetch("res/"+this.prefix+".wasm");if(t.status==200||t.size){var n=await t.arrayBuffer(),a=await WebAssembly.compile(n),m=await WebAssembly.instantiate(a,this.getImports(a));this.instance=m,this.exports=m.exports}else throw new Error("could not load WASM file")}allocateBIOS(t){this.biosptr=this.exports.malloc(t.byteLength),this.biosarr=new Uint8Array(this.exports.memory.buffer,this.biosptr,t.byteLength)}async fetchBIOS(){var t=await fetch("res/"+this.prefix+".bios");if(t.status==200||t.size){var n=new Uint8Array(await t.arrayBuffer());this.allocateBIOS(n),this.loadBIOS(n)}else throw new Error("could not load BIOS file")}async initWASM(){this.sys=this.exports.machine_init(this.biosptr);let t=this.exports.machine_get_state_size();this.stateptr=this.exports.malloc(t);let n=this.exports.machine_get_controls_state_size();this.ctrlstateptr=this.exports.malloc(n);let a=this.exports.machine_get_cpu_state_size();this.cpustateptr=this.exports.malloc(a),this.romptr=this.exports.malloc(this.maxROMSize),this.statearr=new Uint8Array(this.exports.memory.buffer,this.stateptr,t),this.ctrlstatearr=new Uint8Array(this.exports.memory.buffer,this.ctrlstateptr,n),this.cpustatearr=new Uint8Array(this.exports.memory.buffer,this.cpustateptr,a);let m=4096*4;this.audioarr=new Float32Array(this.exports.memory.buffer,this.exports.machine_get_sample_buffer(),m),this.romarr=new Uint8Array(this.exports.memory.buffer,this.romptr,this.maxROMSize),console.log("machine_init",this.sys,t,n,a,m)}async loadWASM(){await this.fetchWASM(),this.exports.memory.grow(96),await this.fetchBIOS(),await this.initWASM()}getPC(){return this.exports.machine_cpu_get_pc(this.sys)}getSP(){return this.exports.machine_cpu_get_sp(this.sys)}isStable(){return this.exports.machine_cpu_is_stable(this.sys)}loadROM(t){if(t.length>this.maxROMSize)throw new _t(`Rom size too big: ${t.length} bytes`);this.romarr.set(t),this.romlen=t.length,console.log("load rom",t.length,"bytes"),this.reset()}loadBIOS(t){this.biosarr.set(t)}reset(){this.exports.machine_reset(this.sys)}read(t){return this.exports.machine_mem_read(this.sys,t&65535)}readConst(t){return this.exports.machine_mem_read(this.sys,t&65535)}write(t,n){this.exports.machine_mem_write(this.sys,t&65535,n&255)}getAudioParams(){return{sampleRate:44100,stereo:!1}}connectVideo(t){this.pixel_dest=t;var n=this.exports.machine_get_pixel_buffer(this.sys);console.log("connectVideo",n,t.length),this.pixel_src=new Uint32Array(this.exports.memory.buffer,n+this.videoOffsetBytes,t.length)}syncVideo(){this.exports.machine_update_video&&this.exports.machine_update_video(this.sys),this.pixel_dest!=null&&this.pixel_dest.set(this.pixel_src)}saveControlsState(){return this.exports.machine_save_controls_state(this.sys,this.ctrlstateptr),{controls:this.ctrlstatearr.slice(0)}}loadControlsState(t){this.ctrlstatearr.set(t.controls),this.exports.machine_load_controls_state(this.sys,this.ctrlstateptr)}connectAudio(t){this.audio=t}syncAudio(){if(this.audio!=null)for(var t=this.exports.machine_get_sample_count(),n=0;n{var t=!1;for(var n in this.id2bp)this.id2bp[n].cond()&&(t=!0);return t}}},mt=class{constructor(){this.recorder=null;this.internalFiles={}}setRecorder(t){this.recorder=t}updateRecorder(){this.recorder&&this.isRunning()&&this.recorder.frameRequested()&&this.recorder.recordFrame(this.saveState())}inspect(t){return Pn(this,t)}getDebugTree(){var n;var t={};return t.state=this.saveState(),(n=this.debugSymbols)!=null&&n.debuginfo&&(t.debuginfo=this.debugSymbols.debuginfo),t}readFile(t){return this.internalFiles[t]}writeFile(t,n){return this.internalFiles[t]=n,!0}},ye=class extends mt{constructor(){super(...arguments);this.debugSavedState=null;this.debugBreakState=null;this.debugTargetClock=0;this.debugClock=0;this.breakpoints=new ut;this.frameCount=0}setBreakpoint(n,a){a?(this.breakpoints.id2bp[n]={cond:a},this.restartDebugging()):this.clearBreakpoint(n)}clearBreakpoint(n){delete this.breakpoints.id2bp[n]}hasBreakpoint(n){return this.breakpoints.id2bp[n]!=null}getDebugCallback(){return this.breakpoints.getDebugCondition()}setupDebug(n){this.onBreakpointHit=n}clearDebug(){this.debugBreakState!=null&&this.debugSavedState!=null&&this.loadState(this.debugSavedState),this.debugSavedState=null,this.debugBreakState=null,this.debugTargetClock=-1,this.debugClock=0,this.onBreakpointHit=null,this.clearBreakpoint("debug"),this.frameCount=0}setDebugCondition(n){this.setBreakpoint("debug",n)}resetDebugging(){this.debugSavedState?this.loadState(this.debugSavedState):this.debugSavedState=this.saveState(),this.debugClock=0,this.debugCallback=this.getDebugCallback(),this.debugBreakState=null}restartDebugging(){this.resetDebugging(),this.resume()}preFrame(){this.debugCallback&&!this.debugBreakState&&(this.debugSavedState=this.saveState(),this.debugTargetClock-=this.debugClock,this.debugClock=0)}postFrame(){this.debugCallback&&this.debugBreakState&&this.loadState(this.debugBreakState),this.frameCount++}pollControls(){}nextFrame(n){this.pollControls(),this.updateRecorder(),this.preFrame();var a=this.advance(n);return this.postFrame(),a}evalDebugCondition(){this.debugCallback&&!this.debugBreakState&&this.debugCallback()}wasBreakpointHit(){return this.debugBreakState!=null}breakpointHit(n,a){console.log(this.debugTargetClock,n,this.debugClock,this.isStable()),this.debugTargetClock=n,this.debugBreakState=this.saveState(),console.log("Breakpoint at clk",this.debugClock,"PC",this.debugBreakState.c.PC.toString(16)),this.pause(),this.onBreakpointHit&&this.onBreakpointHit(this.debugBreakState,a)}haltAndCatchFire(n){this.breakpointHit(this.debugClock,n)}runEval(n){this.setDebugCondition(()=>{if(++this.debugClock>=this.debugTargetClock&&this.isStable()){var a=this.getCPUState();return n(a)?(this.breakpointHit(this.debugClock),!0):!1}})}runToPC(n){this.debugTargetClock++;let a=new Set(n);this.runEval(m=>a.has(m.PC))}runUntilReturn(){var n=this.getSP();this.runEval(a=>a.SP>n)}runToFrameClock(n){this.restartDebugging(),this.debugTargetClock=n,this.runEval(()=>!0)}step(){this.runToFrameClock(this.debugClock+1)}stepBack(){var n,a,m=this.debugTargetClock;this.restartDebugging(),this.debugTargetClock=m-25,this.runEval(o=>this.debugClockthis.frameCount>n)}};function Pn(h,t){if(h.debugSymbols){var n=h.debugSymbols.symbolmap,a=h.debugSymbols.addr2symbol;if(!n||!h.readAddress)return null;var m=n["_"+t]||n[t];if(typeof m!="number")return null;var o=h.readAddress(m);if(a&&a[m+1]!=null)return"$"+$(m,4)+" = $"+$(o,2)+" ("+o+" decimal)";{let d=h.readAddress(m+1),x=o|d<<8;return"$"+$(m,4)+" = $"+$(o,2)+" $"+$(d,2)+" ("+(x<<16>>16)+" decimal)"}}}function Ht(h){return h.endsWith("-llvm.c")?"remote:llvm-mos":h.endsWith(".c")||h.endsWith(".h")?"cc65":h.endsWith(".s")||h.endsWith(".ca65")?"ca65":h.endsWith(".dasm")?"dasm":h.endsWith(".acme")?"acme":h.endsWith(".xa")?"xa":h.endsWith(".wiz")?"wiz":h.endsWith(".ecs")?"ecs":h.endsWith(".cpp")||h.endsWith(".cc")||h.endsWith(".o64")?"oscar64":"dasm"}var Zt=class extends ye{constructor(){super(...arguments);this.debugPCDelta=-1;this.getToolForFilename=Ht}fixPC(n){return n.PC=n.PC+this.debugPCDelta&65535,n}unfixPC(n){return n.PC=n.PC-this.debugPCDelta&65535,n}getSP(){return this.getCPUState().SP}getPC(){return this.getCPUState().PC}isStable(){return!this.getCPUState().T}newCPU(n){var a=new ot;return a.connectBus(n),a}getOpcodeMetadata(n,a){return Yt(n,a)}getOriginPC(){return(this.readAddress(65532)|this.readAddress(65533)<<8)&65535}disassemble(n,a){return at(n,a(n),a(n+1),a(n+2))}getDefaultExtensions(){return[".c",".cpp",".o64",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}getDebugCategories(){return["CPU","ZPRAM","Stack"]}getDebugInfo(n,a){switch(n){case"CPU":return Vt(a.c);case"ZPRAM":return rt(a.b||a.ram,0,256);case"Stack":return Le(this,a.b||a.ram,256,511,256+a.c.SP,32)}}};function Vt(h){function t(n){var a="";return a+=n.N?" N":" -",a+=n.V?" V":" -",a+=n.D?" D":" -",a+=n.Z?" Z":" -",a+=n.C?" C":" -",a+=n.I?" I":" -",a}return"PC "+$(h.PC,4)+" "+t(h)+` @@ -25,6 +25,6 @@ DP `+$(h.DP,2)+` `}function Kt(h){return h.endsWith(".c")||h.endsWith(".h")?"cmoc":h.endsWith(".xasm")?"xasm6809":h.endsWith(".lwasm")?"lwasm":"cmoc"}var Mt=class extends lt{constructor(){super(...arguments);this.getToolForFilename=Kt}newCPU(n){var a=Object.create(je());return a.init(n.write,n.read,0),a}cpuStateToLongString(n){return bt(n)}disassemble(n,a){return Object.create(je()).disasm(a(n),a(n+1),a(n+2),a(n+3),a(n+4),n)}getDefaultExtensions(){return[".c",".lwasm",".xasm"]}getDebugCategories(){return["CPU","Stack"]}getDebugInfo(n,a){switch(n){case"CPU":return bt(a.c);default:return super.getDebugInfo(n,a)}}};function Le(h,t,n,a,m,o,d){var x="",i=0;function Y(w){return w>8);var p=o==32?-2:-3,N=Y(y+p);N==o?(x+=` $`+$(m)+": ",x+=$(y,4)+" "+_n(h,y,!0),m++,i=0):(i==0&&(x+=` $`+$(m)+": "),x+=$(Y(m))+" ",++i==8&&(i=0))}return x+` -`}function _n(h,t,n){for(var a=t,m=h.debugSymbols&&h.debugSymbols.addr2symbol;m&&t>=0;){var o=m[t];if(o){var o=m[t];return n?o+" + $"+$(a-t):o}if(!n)break;t--}return""}function wn(h){return typeof h.connectVideo=="function"}function kn(h){return typeof h.connectAudio=="function"}function Dn(h){return typeof h.setKeyInput=="function"}function Tt(h){return typeof h.setPaddleInput=="function"}function xt(h){return typeof h.getRasterY=="function"}function Rn(h){return typeof h.connectProbe=="function"}function Bn(h){return typeof h.loadBIOS=="function"}function Nn(h){return typeof h.connectSerialIO=="function"}var Ie=class extends ye{constructor(t){super(),this.mainElement=t}reset(){this.machine.reset(),this.serialVisualizer!=null&&this.serialVisualizer.reset()}loadState(t){this.machine.loadState(t)}saveState(){return this.machine.saveState()}getSP(){return this.machine.cpu.getSP()}getPC(){return this.machine.cpu.getPC()}isStable(){return this.machine.cpu.isStable()}getCPUState(){return this.machine.cpu.saveState()}loadControlsState(t){this.machine.loadControlsState(t)}saveControlsState(){return this.machine.saveControlsState()}async start(){this.machine=this.newMachine();let t=this.machine;t instanceof Ne&&await t.loadWASM();var n;if(wn(t)){var a=t.getVideoParams();this.video=new pt(this.mainElement,a.width,a.height,{overscan:!!a.overscan,rotate:a.rotate|0,aspect:a.aspect}),this.video.create(),t.connectVideo(this.video.getFrameData()),Dn(t)&&(this.video.setKeyboardEvents(t.setKeyInput.bind(t)),this.poller=new kt(t.setKeyInput.bind(t))),n=a.videoFrequency}if(this.timer=new wt(n||60,this.nextFrame.bind(this)),kn(t)){var m=t.getAudioParams();this.audio=new ze(m.sampleRate),this.audio.start(),t.connectAudio(this.audio)}Tt(t)&&this.video.setupMouseEvents(),Rn(t)&&(this.probeRecorder=new Ke(t),this.startProbing=()=>(t.connectProbe(this.probeRecorder),this.probeRecorder),this.stopProbing=()=>{t.connectProbe(null)}),Bn(t)&&(this.loadBIOS=(o,d)=>{t.loadBIOS(d,o)}),Nn(t)&&(this.serialIOInterface==null?this.serialVisualizer=new dt(this.mainElement,t):t.connectSerialIO(this.serialIOInterface))}loadROM(t,n,a){this.machine.loadROM(n,t,a),this.reset()}pollControls(){this.poller&&this.poller.poll(),Tt(this.machine)&&(this.machine.setPaddleInput(0,this.video.paddle_x),this.machine.setPaddleInput(1,this.video.paddle_y),this.machine.setPaddleButton&&this.video.paddle_buttons!=null&&(this.machine.setPaddleButton(0,this.video.paddle_buttons[0]),this.machine.setPaddleButton(1,this.video.paddle_buttons[1]),this.machine.setPaddleButton(2,this.video.paddle_buttons[2]))),this.machine.pollControls&&this.machine.pollControls()}advance(t){let n=this.getDebugCallback();try{var a=this.machine.advanceFrame(n);return a}finally{!t&&this.video&&(this.video.updateFrame(),this.updateVideoDebugger()),!t&&this.serialVisualizer&&this.serialVisualizer.refresh()}}updateVideoDebugger(){var t;if(!this.isRunning()&&xt(this.machine)&&this.machine.getRasterCanvasPosition){let{x:n,y:a}=this.machine.getRasterCanvasPosition();if(n>=0||a>=0){let m=(t=this.video)==null?void 0:t.getContext();m&&Pt(m,n,a,1)}}}advanceFrameClock(t,n){if(n>0)return this.machine instanceof Ne?this.machine.advanceFrameClock(t,n):this.machine.advanceFrame(()=>--n<=0)}isRunning(){return this.timer&&this.timer.isRunning()}resume(){this.timer.start(),this.audio&&this.audio.start()}pause(){this.timer.stop(),this.audio&&this.audio.stop()}runToVsync(){this.restartDebugging();var t=!1;this.runEval(()=>{if(this.getRasterScanline()>0)t=!0;else return t})}getRasterScanline(){return xt(this.machine)&&this.machine.getRasterY?this.machine.getRasterY():-1}getRasterLineClock(){return xt(this.machine)&&this.machine.getRasterX?this.machine.getRasterX():-1}readAddress(t){return this.machine.read(t)}getDebugCategories(){if(Se(this.machine))return this.machine.getDebugCategories()}getDebugInfo(t,n){return Se(this.machine)&&this.machine.getDebugInfo(t,n)}},Ft=class extends Ie{constructor(){super(...arguments);this.getOpcodeMetadata=Yt}getToolForFilename(n){return Ht(n)}getDefaultExtensions(){return[".c",".cpp",".o64",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}disassemble(n,a){return at(n,a(n),a(n+1),a(n+2))}getDebugCategories(){return Se(this.machine)?this.machine.getDebugCategories():["CPU","ZPRAM","Stack"]}getDebugInfo(n,a){switch(n){case"CPU":return Vt(a.c);case"ZPRAM":return rt(a.b||a.ram,0,256);case"Stack":return Le(this,a.b||a.ram,256,511,256+a.c.SP,32);default:return Se(this.machine)&&this.machine.getDebugInfo(n,a)}}},Ut=class extends Ie{constructor(){super(...arguments);this.getToolForFilename=zt}getDefaultExtensions(){return[".c",".ns",".s",".scc",".sgb",".z",".wiz"]}getDebugCategories(){return Se(this.machine)?this.machine.getDebugCategories():["CPU","Stack"]}getDebugInfo(n,a){switch(n){case"CPU":return Wt(a.c);case"Stack":{var m=a.c.SP-1&65535,o=m&65280,d=o+255;return m==0&&(m=65536),Le(this,[],o,d,m,205)}default:return Se(this.machine)&&this.machine.getDebugInfo(n,a)}}disassemble(n,a){return st(n,a(n),a(n+1),a(n+2),a(n+3))}},Xt=class extends Ie{constructor(){super(...arguments);this.getToolForFilename=Kt}getDefaultExtensions(){return[".c",".lwasm",".xasm"]}getDebugCategories(){return Se(this.machine)?this.machine.getDebugCategories():["CPU","Stack"]}getDebugInfo(n,a){switch(n){case"CPU":return bt(a.c);case"Stack":{var m=a.c.SP-1&65535,o=m&65280,d=o+255;return m==0&&(m=65536),Le(this,[],o,d,m,23,!0)}default:return super.getDebugInfo(n,a)}}disassemble(n,a){return Object.create(je()).disasm(a(n),a(n+1),a(n+2),a(n+3),a(n+4),n)}},dt=class{constructor(t,n){this.lastOutCount=-1;this.lastInCount=-1;this.device=n,this.textarea=document.createElement("textarea"),this.textarea.classList.add("transcript"),this.textarea.classList.add("transcript-style-2"),this.textarea.style.display="none",t.appendChild(this.textarea)}reset(){this.lastOutCount=0,this.lastInCount=0,this.textarea.style.display="none"}refresh(){var t="";if(this.device.serialOut.length!=this.lastOutCount){var n="";for(var a of this.device.serialOut)t!=a.op&&(n!=""&&(n+=` +`}function _n(h,t,n){for(var a=t,m=h.debugSymbols&&h.debugSymbols.addr2symbol;m&&t>=0;){var o=m[t];if(o){var o=m[t];return n?o+" + $"+$(a-t):o}if(!n)break;t--}return""}function wn(h){return typeof h.connectVideo=="function"}function kn(h){return typeof h.connectAudio=="function"}function Dn(h){return typeof h.setKeyInput=="function"}function Tt(h){return typeof h.setPaddleInput=="function"}function xt(h){return typeof h.getRasterY=="function"}function Rn(h){return typeof h.connectProbe=="function"}function Bn(h){return typeof h.loadBIOS=="function"}function Nn(h){return typeof h.connectSerialIO=="function"}var Ie=class extends ye{constructor(t){super(),this.mainElement=t}reset(){this.machine.reset(),this.serialVisualizer!=null&&this.serialVisualizer.reset()}loadState(t){this.machine.loadState(t)}saveState(){return this.machine.saveState()}getSP(){return this.machine.cpu.getSP()}getPC(){return this.machine.cpu.getPC()}isStable(){return this.machine.cpu.isStable()}getCPUState(){return this.machine.cpu.saveState()}loadControlsState(t){this.machine.loadControlsState(t)}saveControlsState(){return this.machine.saveControlsState()}async start(){this.machine=this.newMachine();let t=this.machine;t instanceof Ne&&await t.loadWASM();var n;if(wn(t)){var a=t.getVideoParams();this.video=new pt(this.mainElement,a.width,a.height,{overscan:!!a.overscan,rotate:a.rotate|0,aspect:a.aspect}),this.video.create(),t.connectVideo(this.video.getFrameData()),Dn(t)&&(this.video.setKeyboardEvents(t.setKeyInput.bind(t)),this.poller=new kt(t.setKeyInput.bind(t))),n=a.videoFrequency}if(this.timer=new wt(n||60,this.nextFrame.bind(this)),kn(t)){var m=t.getAudioParams();this.audio=new ze(m.sampleRate),this.audio.start(),t.connectAudio(this.audio)}Tt(t)&&this.video.setupMouseEvents(),Rn(t)&&(this.probeRecorder=new Ke(t),this.startProbing=()=>(t.connectProbe(this.probeRecorder),this.probeRecorder),this.stopProbing=()=>{t.connectProbe(null)}),Bn(t)&&(this.loadBIOS=(o,d)=>{t.loadBIOS(d,o)}),Nn(t)&&(this.serialIOInterface==null?this.serialVisualizer=new dt(this.mainElement,t):t.connectSerialIO(this.serialIOInterface))}loadROM(t,n,a){this.machine.loadROM(n,t,a),this.reset()}pollControls(){this.poller&&this.poller.poll(),Tt(this.machine)&&(this.machine.setPaddleInput(0,this.video.paddle_x),this.machine.setPaddleInput(1,this.video.paddle_y),this.machine.setPaddleButton&&this.video.paddle_buttons!=null&&(this.machine.setPaddleButton(0,this.video.paddle_buttons[0]),this.machine.setPaddleButton(1,this.video.paddle_buttons[1]),this.machine.setPaddleButton(2,this.video.paddle_buttons[2]))),this.machine.pollControls&&this.machine.pollControls()}advance(t){let n=this.getDebugCallback();try{var a=this.machine.advanceFrame(n);return a}finally{!t&&this.video&&(this.video.updateFrame(),this.updateVideoDebugger()),!t&&this.serialVisualizer&&this.serialVisualizer.refresh()}}updateVideoDebugger(){var t;if(!this.isRunning()&&xt(this.machine)&&this.machine.getRasterCanvasPosition){let{x:n,y:a}=this.machine.getRasterCanvasPosition();if(n>=0||a>=0){let m=(t=this.video)==null?void 0:t.getContext();m&&Pt(m,n,a,1)}}}advanceFrameClock(t,n){if(n>0)return this.machine instanceof Ne?this.machine.advanceFrameClock(t,n):this.machine.advanceFrame(()=>--n<=0)}isRunning(){return this.timer&&this.timer.isRunning()}resume(){this.timer.start(),this.audio&&this.audio.start(),this.poller&&this.poller.start()}pause(){this.timer.stop(),this.audio&&this.audio.stop(),this.poller&&this.poller.stop()}runToVsync(){this.restartDebugging();var t=!1;this.runEval(()=>{if(this.getRasterScanline()>0)t=!0;else return t})}getRasterScanline(){return xt(this.machine)&&this.machine.getRasterY?this.machine.getRasterY():-1}getRasterLineClock(){return xt(this.machine)&&this.machine.getRasterX?this.machine.getRasterX():-1}readAddress(t){return this.machine.read(t)}getDebugCategories(){if(Se(this.machine))return this.machine.getDebugCategories()}getDebugInfo(t,n){return Se(this.machine)&&this.machine.getDebugInfo(t,n)}},Ft=class extends Ie{constructor(){super(...arguments);this.getOpcodeMetadata=Yt}getToolForFilename(n){return Ht(n)}getDefaultExtensions(){return[".c",".cpp",".o64",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}disassemble(n,a){return at(n,a(n),a(n+1),a(n+2))}getDebugCategories(){return Se(this.machine)?this.machine.getDebugCategories():["CPU","ZPRAM","Stack"]}getDebugInfo(n,a){switch(n){case"CPU":return Vt(a.c);case"ZPRAM":return rt(a.b||a.ram,0,256);case"Stack":return Le(this,a.b||a.ram,256,511,256+a.c.SP,32);default:return Se(this.machine)&&this.machine.getDebugInfo(n,a)}}},Ut=class extends Ie{constructor(){super(...arguments);this.getToolForFilename=zt}getDefaultExtensions(){return[".c",".ns",".s",".scc",".sgb",".z",".wiz"]}getDebugCategories(){return Se(this.machine)?this.machine.getDebugCategories():["CPU","Stack"]}getDebugInfo(n,a){switch(n){case"CPU":return Wt(a.c);case"Stack":{var m=a.c.SP-1&65535,o=m&65280,d=o+255;return m==0&&(m=65536),Le(this,[],o,d,m,205)}default:return Se(this.machine)&&this.machine.getDebugInfo(n,a)}}disassemble(n,a){return st(n,a(n),a(n+1),a(n+2),a(n+3))}},Xt=class extends Ie{constructor(){super(...arguments);this.getToolForFilename=Kt}getDefaultExtensions(){return[".c",".lwasm",".xasm"]}getDebugCategories(){return Se(this.machine)?this.machine.getDebugCategories():["CPU","Stack"]}getDebugInfo(n,a){switch(n){case"CPU":return bt(a.c);case"Stack":{var m=a.c.SP-1&65535,o=m&65280,d=o+255;return m==0&&(m=65536),Le(this,[],o,d,m,23,!0)}default:return super.getDebugInfo(n,a)}}disassemble(n,a){return Object.create(je()).disasm(a(n),a(n+1),a(n+2),a(n+3),a(n+4),n)}},dt=class{constructor(t,n){this.lastOutCount=-1;this.lastInCount=-1;this.device=n,this.textarea=document.createElement("textarea"),this.textarea.classList.add("transcript"),this.textarea.classList.add("transcript-style-2"),this.textarea.style.display="none",t.appendChild(this.textarea)}reset(){this.lastOutCount=0,this.lastInCount=0,this.textarea.style.display="none"}refresh(){var t="";if(this.device.serialOut.length!=this.lastOutCount){var n="";for(var a of this.device.serialOut)t!=a.op&&(n!=""&&(n+=` `),a.op==="read"?n+="<< ":a.op==="write"&&(n+=">> "),t=a.op),a.value==10?(n+="\u21B5",t=""):n+=gt(a.value);this.textarea.value=n,this.lastOutCount=this.device.serialOut.length,this.textarea.style.display="block"}}};export{at as a,st as b,Ye as c,it as d,Dt as e,Rt as f,En as g,gn as h,Zn as i,pn as j,Bt as k,je as l,Ot as m,Ke as n,Be as o,ft as p,ct as q,Nt as r,Ne as s,Et as t,Se as u,mt as v,Pn as w,Ht as x,Zt as y,Vt as z,Yt as A,Wt as B,fr as C,lt as D,zt as E,Mt as F,Le as G,Ie as H,Ft as I,Ut as J,Xt as K}; -//# sourceMappingURL=chunk-AK7O6YZI.js.map +//# sourceMappingURL=chunk-AA227H53.js.map diff --git a/gen/chunk-AK7O6YZI.js.map b/gen/chunk-AA227H53.js.map similarity index 98% rename from gen/chunk-AK7O6YZI.js.map rename to gen/chunk-AA227H53.js.map index 7a601148..bc00988a 100644 --- a/gen/chunk-AK7O6YZI.js.map +++ b/gen/chunk-AA227H53.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../src/common/cpu/disasm6502.ts", "../src/common/cpu/ZilogZ80.ts", "../src/common/audio.ts", "../src/common/probe.ts", "../src/common/devices.ts", "../src/common/cpu/disasmz80.ts", "../src/common/cpu/6809.ts", "../src/common/cpu/MOS6502.ts", "../src/common/wasmplatform.ts", "../src/common/baseplatform.ts"], - "sourcesContent": ["\nimport { hex } from \"../util\";\n\nexport var OPS_6502 = [\n {mn:\"BRK\",am:\"\",nb:1,il:0,c1:7,c2:0,nw:3,br:1,mod:\"SI\"}, // 0\n {mn:\"ORA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 2\n {mn:\"SLO\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 4\n {mn:\"ORA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 5\n {mn:\"ASL\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 6\n {mn:\"SLO\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 7\n {mn:\"PHP\",am:\"\",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:\"S\"}, // 8\n {mn:\"ORA\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 9\n {mn:\"ASL\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // a\n {mn:\"ANC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // b\n {mn:\"NOP\",am:\"AAAA\",nb:3,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // c\n {mn:\"ORA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // d\n {mn:\"ASL\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // e\n {mn:\"SLO\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // f\n {mn:\"BPL\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 10\n {mn:\"ORA\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 11\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 12\n {mn:\"SLO\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 13\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 14\n {mn:\"ORA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 15\n {mn:\"ASL\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 16\n {mn:\"SLO\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 17\n {mn:\"CLC\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"C\"}, // 18\n {mn:\"ORA\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 19\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 1a\n {mn:\"SLO\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 1b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 1c\n {mn:\"ORA\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 1d\n {mn:\"ASL\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 1e\n {mn:\"SLO\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 1f\n {mn:\"JSR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:1,mod:\"S\"}, // 20\n {mn:\"AND\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 21\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 22\n {mn:\"RLA\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 23\n {mn:\"BIT\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ZVN\"}, // 24\n {mn:\"AND\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 25\n {mn:\"ROL\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 26\n {mn:\"RLA\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 27\n {mn:\"PLP\",am:\"\",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:\"SCZIDVN\"}, // 28\n {mn:\"AND\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 29\n {mn:\"ROL\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 2a\n {mn:\"ANC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 2b\n {mn:\"BIT\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ZVN\"}, // 2c\n {mn:\"AND\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 2d\n {mn:\"ROL\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 2e\n {mn:\"RLA\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 2f\n {mn:\"BMI\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 30\n {mn:\"AND\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 31\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 32\n {mn:\"RLA\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 33\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 34\n {mn:\"AND\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 35\n {mn:\"ROL\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 36\n {mn:\"RLA\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 37\n {mn:\"SEC\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"C\"}, // 38\n {mn:\"AND\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 39\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 3a\n {mn:\"RLA\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 3c\n {mn:\"AND\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 3d\n {mn:\"ROL\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 3e\n {mn:\"RLA\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3f\n {mn:\"RTI\",am:\"\",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:\"SCZIDVN\"}, // 40\n {mn:\"EOR\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 41\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 42\n {mn:\"SRE\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 43\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 44\n {mn:\"EOR\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 45\n {mn:\"LSR\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 46\n {mn:\"SRE\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 47\n {mn:\"PHA\",am:\"\",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:\"S\"}, // 48\n {mn:\"EOR\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 49\n {mn:\"LSR\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 4a\n {mn:\"ASR\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 4b\n {mn:\"JMP\",am:\"AAAA\",nb:3,il:0,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 4c\n {mn:\"EOR\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 4d\n {mn:\"LSR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 4e\n {mn:\"SRE\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 4f\n {mn:\"BVC\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 50\n {mn:\"EOR\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 51\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 52\n {mn:\"SRE\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 53\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 54\n {mn:\"EOR\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 55\n {mn:\"LSR\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 56\n {mn:\"SRE\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 57\n {mn:\"CLI\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"I\"}, // 58\n {mn:\"EOR\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 59\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 5a\n {mn:\"SRE\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 5b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 5c\n {mn:\"EOR\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 5d\n {mn:\"LSR\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 5e\n {mn:\"SRE\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 5f\n {mn:\"RTS\",am:\"\",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:\"S\"}, // 60\n {mn:\"ADC\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 61\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 62\n {mn:\"RRA\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 63\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 64\n {mn:\"ADC\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 65\n {mn:\"ROR\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 66\n {mn:\"RRA\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 67\n {mn:\"PLA\",am:\"\",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:\"SAZN\"}, // 68\n {mn:\"ADC\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 69\n {mn:\"ROR\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 6a\n {mn:\"ARR\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 6b\n {mn:\"JMP\",am:\"(AAAA)\",nb:3,il:0,c1:5,c2:0,nw:0,br:1,mod:\"\"}, // 6c\n {mn:\"ADC\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 6d\n {mn:\"ROR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 6e\n {mn:\"RRA\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 6f\n {mn:\"BVS\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 70\n {mn:\"ADC\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 71\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 72\n {mn:\"RRA\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 73\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 74\n {mn:\"ADC\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 75\n {mn:\"ROR\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 76\n {mn:\"RRA\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 77\n {mn:\"SEI\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"I\"}, // 78\n {mn:\"ADC\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 79\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 7a\n {mn:\"RRA\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 7b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 7c\n {mn:\"ADC\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 7d\n {mn:\"ROR\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 7e\n {mn:\"RRA\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 7f\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 80\n {mn:\"STA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 81\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 82\n {mn:\"SAX\",am:\"(aa,x)\",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 83\n {mn:\"STY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 84\n {mn:\"STA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 85\n {mn:\"STX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 86\n {mn:\"SAX\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 87\n {mn:\"DEY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // 88\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 89\n {mn:\"TXA\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 8a\n {mn:\"ANE\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 8b\n {mn:\"STY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8c\n {mn:\"STA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8d\n {mn:\"STX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8e\n {mn:\"SAX\",am:\"AAAA\",nb:3,il:1,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8f\n {mn:\"BCC\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 90\n {mn:\"STA\",am:\"(aa),y\",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 91\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 92\n {mn:\"SHA\",am:\"(aa),y\",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 93\n {mn:\"STY\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 94\n {mn:\"STA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 95\n {mn:\"STX\",am:\"aa,y\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 96\n {mn:\"SAX\",am:\"aa,y\",nb:3,il:1,c1:4,c2:0,nw:1,br:1,mod:\"\"}, // 97\n {mn:\"TYA\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 98\n {mn:\"STA\",am:\"AAAA,y\",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 99\n {mn:\"TXS\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"S\"}, // 9a\n {mn:\"SHS\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"S\"}, // 9b\n {mn:\"SHY\",am:\"AAAA,x\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9c\n {mn:\"STA\",am:\"AAAA,x\",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9d\n {mn:\"SHX\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9e\n {mn:\"SHA\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9f\n {mn:\"LDY\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // a0\n {mn:\"LDA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // a1\n {mn:\"LDX\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // a2\n {mn:\"LAX\",am:\"(aa,x)\",nb:2,il:1,c1:6,c2:0,nw:0,br:0,mod:\"AXZN\"}, // a3\n {mn:\"LDY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"YZN\"}, // a4\n {mn:\"LDA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // a5\n {mn:\"LDX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"XZN\"}, // a6\n {mn:\"LAX\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"AXZN\"}, // a7\n {mn:\"TAY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // a8\n {mn:\"LDA\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // a9\n {mn:\"TAX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // aa\n {mn:\"LXA\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"AXZN\"}, // ab\n {mn:\"LDY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"YZN\"}, // ac\n {mn:\"LDA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // ad\n {mn:\"LDX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"XZN\"}, // ae\n {mn:\"LAX\",am:\"AAAA\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"AXZN\"}, // af\n {mn:\"BCS\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // b0\n {mn:\"LDA\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // b1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // b2\n {mn:\"LAX\",am:\"(aa),y\",nb:2,il:1,c1:5,c2:1,nw:0,br:0,mod:\"AXZN\"}, // b3\n {mn:\"LDY\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"YZN\"}, // b4\n {mn:\"LDA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // b5\n {mn:\"LDX\",am:\"aa,y\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"XZN\"}, // b6\n {mn:\"LAX\",am:\"aa,y\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"AXZN\"}, // b7\n {mn:\"CLV\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"V\"}, // b8\n {mn:\"LDA\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // b9\n {mn:\"TSX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // ba\n {mn:\"LAS\",am:\"AAAA,y\",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:\"SAXZN\"}, // bb\n {mn:\"LDY\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"YZN\"}, // bc\n {mn:\"LDA\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // bd\n {mn:\"LDX\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"XZN\"}, // be\n {mn:\"LAX\",am:\"AAAA,y\",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:\"AXZN\"}, // bf\n {mn:\"CPY\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // c0\n {mn:\"CMP\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"CZN\"}, // c1\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // c2\n {mn:\"DCP\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"CZN\"}, // c3\n {mn:\"CPY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // c4\n {mn:\"CMP\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // c5\n {mn:\"DEC\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"ZN\"}, // c6\n {mn:\"DCP\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // c7\n {mn:\"INY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // c8\n {mn:\"CMP\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // c9\n {mn:\"DEX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // ca\n {mn:\"SBX\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"XCZN\"}, // cb\n {mn:\"CPY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // cc\n {mn:\"CMP\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // cd\n {mn:\"DEC\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // ce\n {mn:\"DCP\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // cf\n {mn:\"BNE\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // d0\n {mn:\"CMP\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"CZN\"}, // d1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // d2\n {mn:\"DCP\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"CZN\"}, // d3\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // d4\n {mn:\"CMP\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // d5\n {mn:\"DEC\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // d6\n {mn:\"DCP\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // d7\n {mn:\"CLD\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"D\"}, // d8\n {mn:\"CMP\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"CZN\"}, // d9\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // da\n {mn:\"DCP\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // db\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // dc\n {mn:\"CMP\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"CZN\"}, // dd\n {mn:\"DEC\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"ZN\"}, // de\n {mn:\"DCP\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // df\n {mn:\"CPX\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // e0\n {mn:\"SBC\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e1\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // e2\n {mn:\"ISB\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // e3\n {mn:\"CPX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // e4\n {mn:\"SBC\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e5\n {mn:\"INC\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"ZN\"}, // e6\n {mn:\"ISB\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // e7\n {mn:\"INX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // e8\n {mn:\"SBC\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e9\n {mn:\"NOP\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // ea\n {mn:\"SBC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // eb\n {mn:\"CPX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // ec\n {mn:\"SBC\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // ed\n {mn:\"INC\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // ee\n {mn:\"ISB\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // ef\n {mn:\"BEQ\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // f0\n {mn:\"SBC\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // f1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // f2\n {mn:\"ISB\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // f3\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // f4\n {mn:\"SBC\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // f5\n {mn:\"INC\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // f6\n {mn:\"ISB\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // f7\n {mn:\"SED\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"D\"}, // f8\n {mn:\"SBC\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // f9\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // fa\n {mn:\"ISB\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // fb\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // fc\n {mn:\"SBC\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // fd\n {mn:\"INC\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"ZN\"}, // fe\n {mn:\"ISB\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // ff\n];\n\nexport function disassemble6502(pc:number, b0:number, b1:number, b2:number) : {line:string, nbytes:number, isaddr:boolean} {\n\n var op = OPS_6502[b0];\n if (op == null) return {line:\"???\", nbytes:1, isaddr:false};\n var s = op.mn;\n var am = op.am;\n var isaddr = false;\n if (am == 'branch') {\n var offset = (b1 < 0x80) ? (pc+2+b1) : (pc+2-(256-b1));\n offset &= 0xffff;\n am = '$'+hex(offset, 4);\n isaddr = true;\n } else {\n am = am.replace('aa','$'+hex(b1, 2));\n am = am.replace('AAAA','$'+hex(b1+(b2<<8), 4));\n if (am.indexOf('#') < 0 && am.indexOf('$') >= 0)\n isaddr = true;\n }\n return {line:op.mn + \" \" + am, nbytes:op.nb, isaddr:isaddr};\n};\n", "// Generated by CoffeeScript 1.9.3\n\nimport { CPU, Bus, InstructionBased, IOBusConnected, SavesState, Interruptable } from \"../devices\";\n\n///////////////////////////////////////////////////////////////////////////////\n/// @file Z80.js\n///\n/// @brief Emulator for the Zilog Z80 microprocessor\n///\n/// @author Matthew Howell\n///\n/// @remarks\n/// This module is a simple, straightforward instruction interpreter.\n/// There is no fancy dynamic recompilation or cycle-accurate emulation.\n/// The author believes that this should be sufficient for any emulator that\n/// would be feasible to write in JavaScript anyway.\n/// The code and the comments in this file assume that the reader is familiar\n/// with the Z80 architecture. If you're not, here are some references I use:\n/// http://clrhome.org/table/ - Z80 instruction set tables\n/// http://www.zilog.com/docs/z80/um0080.pdf - The official manual\n/// http://www.myquest.nl/z80undocumented/z80-documented-v0.91.pdf\n/// - The Undocumented Z80, Documented\n///\n/// @copyright (c) 2013 Matthew Howell\n/// This code is released under the MIT license,\n/// a copy of which is available in the associated README.md file,\n/// or at http://opensource.org/licenses/MIT\n///////////////////////////////////////////////////////////////////////////////\n\n///////////////////////////////////////////////////////////////////////////////\n/// We'll begin with the object constructor and the public API functions.\n///////////////////////////////////////////////////////////////////////////////\nfunction FastZ80(coreParameter)\n{\n // Obviously we'll be needing the core object's functions again.\n const core = coreParameter;\n \n // The argument to this constructor should be an object containing 4 functions:\n // mem_read(address) should return the byte at the given memory address,\n // mem_write(address, value) should write the given value to the given memory address,\n // io_read(port) should read a return a byte read from the given I/O port,\n // io_write(port, value) should write the given byte to the given I/O port.\n // If any of those functions is missing, this module cannot run.\n if (!core || (typeof core.mem_read !== \"function\") || (typeof core.mem_write !== \"function\") ||\n (typeof core.io_read !== \"function\") || (typeof core.io_write !== \"function\"))\n throw(\"Z80: Core object is missing required functions.\");\n \n // All right, let's initialize the registers.\n // First, the standard 8080 registers.\n let a = 0x00;\n let b = 0x00;\n let c = 0x00;\n let d = 0x00;\n let e = 0x00;\n let h = 0x00;\n let l = 0x00;\n // Now the special Z80 copies of the 8080 registers\n // (the ones used for the SWAP instruction and such).\n let a_prime = 0x00;\n let b_prime = 0x00;\n let c_prime = 0x00;\n let d_prime = 0x00;\n let e_prime = 0x00;\n let h_prime = 0x00;\n let l_prime = 0x00;\n // And now the Z80 index registers.\n let ix = 0x0000;\n let iy = 0x0000;\n // Then the \"utility\" registers: the interrupt vector,\n // the memory refresh, the stack pointer, and the program counter.\n let i = 0x00;\n let r = 0x00;\n let sp = 0x0000; // Changed from 0xdff0 - SP should be undefined at reset, program must initialize it\n let pc = 0x0000;\n // We don't keep an F register for the flags,\n // because most of the time we're only accessing a single flag,\n // so we optimize for that case and use utility functions\n // for the rarer occasions when we need to access the whole register.\n let flags = {S:0, Z:0, Y:0, H:0, X:0, P:0, N:0, C:0};\n let flags_prime = {S:0, Z:0, Y:0, H:0, X:0, P:0, N:0, C:0};\n // And finally we have the interrupt mode and flip-flop registers.\n let imode = 0;\n let iff1 = 0;\n let iff2 = 0;\n \n // These are all specific to this implementation, not Z80 features.\n // Keep track of whether we've had a HALT instruction called.\n let halted = false;\n // EI and DI wait one instruction before they take effect;\n // these flags tell us when we're in that wait state.\n let do_delayed_di = false;\n let do_delayed_ei = false;\n // This tracks the number of cycles spent in a single instruction run,\n // including processing any prefixes and handling interrupts.\n let cycle_counter = 0;\n \n function getState():Z80State {\n return {\n PC:pc,\n SP:sp,\n IX:ix,\n IY:iy,\n AF:(a<<8)+get_flags_register(),\n BC:(b<<8)+c,\n DE:(d<<8)+e,\n HL:(h<<8)+l,\n AF_:(a_prime<<8)+get_flags_prime(),\n BC_:(b_prime<<8)+c_prime,\n DE_:(d_prime<<8)+e_prime,\n HL_:(h_prime<<8)+l_prime,\n IR:(i<<8)+r,\n im : imode,\n iff1 : iff1,\n iff2 : iff2,\n halted : halted,\n do_delayed_di : do_delayed_di,\n do_delayed_ei : do_delayed_ei,\n cycle_counter : cycle_counter\n }; \n }\n\n function setState(state:Z80State) {\n pc = state.PC;\n sp = state.SP;\n ix = state.IX;\n iy = state.IY;\n a = (state.AF >> 8) & 0xff;\n set_flags_register(state.AF);\n b = (state.BC >> 8) & 0xff;\n c = state.BC & 0xff;\n d = (state.DE >> 8) & 0xff;\n e = state.DE & 0xff;\n h = (state.HL >> 8) & 0xff;\n l = state.HL & 0xff;\n a_prime = (state.AF_ >> 8) & 0xff;\n set_flags_prime(state.AF_);\n b_prime = (state.BC_ >> 8) & 0xff;\n c_prime = state.BC_ & 0xff;\n d_prime = (state.DE_ >> 8) & 0xff;\n e_prime = state.DE_ & 0xff;\n h_prime = (state.HL_ >> 8) & 0xff;\n l_prime = state.HL_ & 0xff;\n i = (state.IR >> 8) & 0xff;\n r = state.IR & 0xff;\n imode = state.im;\n iff1 = state.iff1;\n iff2 = state.iff2;\n halted = state.halted;\n do_delayed_di = state.do_delayed_di;\n do_delayed_ei = state.do_delayed_ei;\n cycle_counter = state.cycle_counter;\n }\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public reset\n///\n/// @brief Re-initialize the processor as if a reset or power on had occured\n///////////////////////////////////////////////////////////////////////////////\nlet reset = function()\n{\n // These registers are the ones that have predictable states\n // immediately following a power-on or a reset.\n // The others are left alone, because their states are unpredictable.\n sp = 0x0000;\n pc = 0x0000;\n a = 0x00;\n r = 0x00;\n set_flags_register(0);\n // Start up with interrupts disabled.\n imode = 0;\n iff1 = 0;\n iff2 = 0;\n // Don't start halted or in a delayed DI or EI.\n halted = false;\n do_delayed_di = false;\n do_delayed_ei = false;\n // Obviously we've not used any cycles yet.\n cycle_counter = 0;\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public run_instruction\n///\n/// @brief Runs a single instruction\n///\n/// @return The number of T cycles the instruction took to run,\n/// plus any time that went into handling interrupts that fired\n/// while this instruction was executing\n///////////////////////////////////////////////////////////////////////////////\nlet run_instruction = function()\n{\n if (!halted)\n {\n // If the previous instruction was a DI or an EI,\n // we'll need to disable or enable interrupts\n // after whatever instruction we're about to run is finished.\n var doing_delayed_di = false, doing_delayed_ei = false;\n if (do_delayed_di)\n {\n do_delayed_di = false;\n doing_delayed_di = true;\n }\n else if (do_delayed_ei)\n {\n do_delayed_ei = false;\n doing_delayed_ei = true;\n }\n\n // R is incremented at the start of every instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n // Read the byte at the PC and run the instruction it encodes.\n var opcode = core.mem_read(pc);\n decode_instruction(opcode);\n pc = (pc + 1) & 0xffff;\n \n // Actually do the delayed interrupt disable/enable if we have one.\n if (doing_delayed_di)\n {\n iff1 = 0;\n iff2 = 0;\n //console.log(\"DI\",pc);\n }\n else if (doing_delayed_ei)\n {\n iff1 = 1;\n iff2 = 1;\n //console.log(\"EI\",pc);\n }\n \n // And finally clear out the cycle counter for the next instruction\n // before returning it to the emulator core.\n var retval = cycle_counter;\n cycle_counter = 0;\n return retval;\n }\n else\n {\n // While we're halted, claim that we spent a cycle doing nothing,\n // so that the rest of the emulator can still proceed.\n return 1;\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public interrupt\n///\n/// @brief Simulates pulsing the processor's INT (or NMI) pin\n///\n/// @param non_maskable - true if this is a non-maskable interrupt\n/// @param data - the value to be placed on the data bus, if needed\n///////////////////////////////////////////////////////////////////////////////\nlet interrupt = function(non_maskable:boolean, data:number) : boolean\n{\n //console.log(non_maskable, data, iff1, iff2, do_delayed_ei, do_delayed_di);\n if (non_maskable)\n {\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n // Non-maskable interrupts are always handled the same way;\n // clear IFF1 and then do a CALL 0x0066.\n // Also, all interrupts reset the HALT state.\n halted = false;\n iff2 = iff1;\n iff1 = 0;\n push_word(pc);\n pc = 0x66;\n cycle_counter += 11;\n return true;\n }\n else if (iff1)\n {\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n halted = false;\n iff1 = 0;\n iff2 = 0;\n \n if (imode === 0)\n {\n // In the 8080-compatible interrupt mode,\n // decode the content of the data bus as an instruction and run it.\n pc = (pc - 1) & 0xffff; //SEH: so do_reset() pushes right value\n decode_instruction(data);\n pc = (pc + 1) & 0xffff; //SEH: so do_reset() pushes right value\n cycle_counter += 2;\n }\n else if (imode === 1)\n {\n // Mode 1 is always just RST 0x38.\n push_word(pc);\n pc = 0x38;\n cycle_counter += 13;\n }\n else if (imode === 2)\n {\n // Mode 2 uses the value on the data bus as in index\n // into the vector table pointer to by the I register.\n push_word(pc);\n // The Z80 manual says that this address must be 2-byte aligned,\n // but it doesn't appear that this is actually the case on the hardware,\n // so we don't attempt to enforce that here.\n var vector_address = ((i << 8) | data);\n pc = core.mem_read(vector_address) | \n (core.mem_read((vector_address + 1) & 0xffff) << 8);\n \n cycle_counter += 19;\n }\n //console.log(imode,data,pc);\n return true;\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// The public API functions end here.\n///\n/// What begins here are just general utility functions, used variously.\n///////////////////////////////////////////////////////////////////////////////\nlet decode_instruction = function(opcode)\n{\n // The register-to-register loads and ALU instructions\n // are all so uniform that we can decode them directly\n // instead of going into the instruction array for them.\n // This function gets the operand for all of these instructions.\n var get_operand = function(opcode)\n {\n return ((opcode & 0x07) === 0) ? b :\n ((opcode & 0x07) === 1) ? c :\n ((opcode & 0x07) === 2) ? d :\n ((opcode & 0x07) === 3) ? e :\n ((opcode & 0x07) === 4) ? h :\n ((opcode & 0x07) === 5) ? l :\n ((opcode & 0x07) === 6) ? core.mem_read(l | (h << 8)) : a;\n };\n\n // Handle HALT right up front, because it fouls up our LD decoding\n // by falling where LD (HL), (HL) ought to be.\n if (opcode === 0x76)\n {\n halted = true;\n }\n else if ((opcode >= 0x40) && (opcode < 0x80))\n {\n // This entire range is all 8-bit register loads.\n // Get the operand and assign it to the correct destination.\n var operand = get_operand(opcode);\n \n if (((opcode & 0x38) >>> 3) === 0)\n b = operand;\n else if (((opcode & 0x38) >>> 3) === 1)\n c = operand;\n else if (((opcode & 0x38) >>> 3) === 2)\n d = operand;\n else if (((opcode & 0x38) >>> 3) === 3)\n e = operand;\n else if (((opcode & 0x38) >>> 3) === 4)\n h = operand;\n else if (((opcode & 0x38) >>> 3) === 5)\n l = operand;\n else if (((opcode & 0x38) >>> 3) === 6)\n core.mem_write(l | (h << 8), operand);\n else if (((opcode & 0x38) >>> 3) === 7)\n a = operand;\n }\n else if ((opcode >= 0x80) && (opcode < 0xc0))\n {\n // These are the 8-bit register ALU instructions.\n // We'll get the operand and then use this \"jump table\"\n // to call the correct utility function for the instruction.\n var operand = get_operand(opcode),\n op_array = [do_add, do_adc, do_sub, do_sbc,\n do_and, do_xor, do_or, do_cp];\n \n op_array[(opcode & 0x38) >>> 3]( operand);\n }\n else\n {\n // This is one of the less formulaic instructions;\n // we'll get the specific function for it from our array.\n var func = instructions[opcode];\n func();\n }\n \n // Update the cycle counter with however many cycles\n // the base instruction took.\n // If this was a prefixed instruction, then\n // the prefix handler has added its extra cycles already.\n cycle_counter += cycle_counts[opcode];\n};\n\nlet get_signed_offset_byte = function(value)\n{\n // This function requires some explanation.\n // We just use JavaScript Number variables for our registers,\n // not like a typed array or anything.\n // That means that, when we have a byte value that's supposed\n // to represent a signed offset, the value we actually see\n // isn't signed at all, it's just a small integer.\n // So, this function converts that byte into something JavaScript\n // will recognize as signed, so we can easily do arithmetic with it.\n // First, we clamp the value to a single byte, just in case.\n value &= 0xff;\n // We don't have to do anything if the value is positive.\n if (value & 0x80)\n {\n // But if the value is negative, we need to manually un-two's-compliment it.\n // I'm going to assume you can figure out what I meant by that,\n // because I don't know how else to explain it.\n // We could also just do value |= 0xffffff00, but I prefer\n // not caring how many bits are in the integer representation\n // of a JavaScript number in the currently running browser.\n value = -((0xff & ~value) + 1);\n }\n return value;\n};\n\nlet get_flags_register = function()\n{\n // We need the whole F register for some reason.\n // probably a PUSH AF instruction,\n // so make the F register out of our separate flags.\n return (flags.S << 7) |\n (flags.Z << 6) |\n (flags.Y << 5) |\n (flags.H << 4) |\n (flags.X << 3) |\n (flags.P << 2) |\n (flags.N << 1) |\n (flags.C);\n};\n\nlet get_flags_prime = function()\n{\n // This is the same as the above for the F' register.\n return (flags_prime.S << 7) |\n (flags_prime.Z << 6) |\n (flags_prime.Y << 5) |\n (flags_prime.H << 4) |\n (flags_prime.X << 3) |\n (flags_prime.P << 2) |\n (flags_prime.N << 1) |\n (flags_prime.C);\n};\n\nlet set_flags_register = function(operand)\n{\n // We need to set the F register, probably for a POP AF,\n // so break out the given value into our separate flags.\n flags.S = (operand & 0x80) >>> 7;\n flags.Z = (operand & 0x40) >>> 6;\n flags.Y = (operand & 0x20) >>> 5;\n flags.H = (operand & 0x10) >>> 4;\n flags.X = (operand & 0x08) >>> 3;\n flags.P = (operand & 0x04) >>> 2;\n flags.N = (operand & 0x02) >>> 1;\n flags.C = (operand & 0x01);\n};\n\nlet set_flags_prime = function(operand)\n{\n // Again, this is the same as the above for F'.\n flags_prime.S = (operand & 0x80) >>> 7;\n flags_prime.Z = (operand & 0x40) >>> 6;\n flags_prime.Y = (operand & 0x20) >>> 5;\n flags_prime.H = (operand & 0x10) >>> 4;\n flags_prime.X = (operand & 0x08) >>> 3;\n flags_prime.P = (operand & 0x04) >>> 2;\n flags_prime.N = (operand & 0x02) >>> 1;\n flags_prime.C = (operand & 0x01);\n};\n\nlet update_xy_flags = function(result)\n{\n // Most of the time, the undocumented flags\n // (sometimes called X and Y, or 3 and 5),\n // take their values from the corresponding bits\n // of the result of the instruction,\n // or from some other related value.\n // This is a utility function to set those flags based on those bits.\n flags.Y = (result & 0x20) >>> 5;\n flags.X = (result & 0x08) >>> 3;\n};\n\nlet get_parity = function(value)\n{\n // We could try to actually calculate the parity every time,\n // but why calculate what you can pre-calculate?\n var parity_bits = [\n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,\n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1\n ];\n return parity_bits[value];\n};\n\nlet push_word = function(operand)\n{\n // Pretty obvious what this function does; given a 16-bit value,\n // decrement the stack pointer, write the high byte to the new\n // stack pointer location, then repeat for the low byte.\n sp = (sp - 1) & 0xffff;\n core.mem_write(sp, (operand & 0xff00) >>> 8);\n sp = (sp - 1) & 0xffff;\n core.mem_write(sp, operand & 0x00ff);\n};\n\nlet pop_word = function()\n{\n // Again, not complicated; read a byte off the top of the stack,\n // increment the stack pointer, rinse and repeat.\n var retval = core.mem_read(sp) & 0xff;\n sp = (sp + 1) & 0xffff;\n retval |= core.mem_read(sp) << 8;\n sp = (sp + 1) & 0xffff;\n return retval;\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// Now, the way most instructions work in this emulator is that they set up\n/// their operands according to their addressing mode, and then they call a\n/// utility function that handles all variations of that instruction.\n/// Those utility functions begin here.\n///////////////////////////////////////////////////////////////////////////////\nlet do_conditional_absolute_jump = function(condition)\n{\n // This function implements the JP [condition],nn instructions.\n if (condition)\n {\n // We're taking this jump, so write the new PC,\n // and then decrement the thing we just wrote,\n // because the instruction decoder increments the PC\n // unconditionally at the end of every instruction\n // and we need to counteract that so we end up at the jump target.\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n }\n else\n {\n // We're not taking this jump, just move the PC past the operand.\n pc = (pc + 2) & 0xffff;\n }\n};\n\nlet do_conditional_relative_jump = function(condition)\n{\n // This function implements the JR [condition],n instructions.\n if (condition)\n {\n // We need a few more cycles to actually take the jump.\n cycle_counter += 5;\n // Calculate the offset specified by our operand.\n var offset = get_signed_offset_byte(core.mem_read((pc + 1) & 0xffff));\n // Add the offset to the PC, also skipping past this instruction.\n pc = (pc + offset + 1) & 0xffff;\n }\n else\n {\n // No jump happening, just skip the operand.\n pc = (pc + 1) & 0xffff;\n }\n};\n\nlet do_conditional_call = function(condition)\n{\n // This function is the CALL [condition],nn instructions.\n // If you've seen the previous functions, you know this drill.\n if (condition)\n {\n cycle_counter += 7;\n push_word((pc + 3) & 0xffff);\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n }\n else\n {\n pc = (pc + 2) & 0xffff;\n }\n};\n\nlet do_conditional_return = function(condition)\n{\n if (condition)\n {\n cycle_counter += 6;\n pc = (pop_word() - 1) & 0xffff;\n }\n};\n\nlet do_reset = function(address)\n{\n // The RST [address] instructions go through here.\n push_word((pc + 1) & 0xffff);\n pc = (address - 1) & 0xffff;\n};\n\nlet do_add = function(operand)\n{\n // This is the ADD A, [operand] instructions.\n // We'll do the literal addition, which includes any overflow,\n // so that we can more easily figure out whether we had\n // an overflow or a carry and set the flags accordingly.\n var result = a + operand;\n \n // The great majority of the work for the arithmetic instructions\n // turns out to be setting the flags rather than the actual operation.\n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((operand & 0x0f) + (a & 0x0f)) & 0x10) ? 1 : 0;\n // An overflow has happened if the sign bits of the accumulator and the operand\n // don't match the sign bit of the result value.\n flags.P = ((a & 0x80) === (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_adc = function(operand)\n{\n var result = a + operand + flags.C;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((operand & 0x0f) + (a & 0x0f) + flags.C) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) === (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_sub = function(operand)\n{\n var result = a - operand;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((a & 0x0f) - (operand & 0x0f)) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) !== (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_sbc = function(operand)\n{\n var result = a - operand - flags.C;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((a & 0x0f) - (operand & 0x0f) - flags.C) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) !== (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_cp = function(operand)\n{\n // A compare instruction is just a subtraction that doesn't save the value,\n // so we implement it as... a subtraction that doesn't save the value.\n var temp = a;\n do_sub(operand);\n a = temp;\n // Since this instruction has no \"result\" value, the undocumented flags\n // are set based on the operand instead.\n update_xy_flags(operand);\n};\n\nlet do_and = function(operand)\n{\n // The logic instructions are all pretty straightforward.\n a &= operand & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 1;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_or = function(operand)\n{\n a = (operand | a) & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 0;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_xor = function(operand)\n{\n a = (operand ^ a) & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 0;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_inc = function(operand)\n{\n var result = operand + 1;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = ((operand & 0x0f) === 0x0f) ? 1 : 0;\n // It's a good deal easier to detect overflow for an increment/decrement.\n flags.P = (operand === 0x7f) ? 1 : 0;\n flags.N = 0;\n \n result &= 0xff;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_dec = function(operand)\n{\n var result = operand - 1;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = ((operand & 0x0f) === 0x00) ? 1 : 0;\n flags.P = (operand === 0x80) ? 1 : 0;\n flags.N = 1;\n \n result &= 0xff;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_hl_add = function(operand)\n{\n // The HL arithmetic instructions are the same as the A ones,\n // just with twice as many bits happening.\n var hl = l | (h << 8), result = hl + operand;\n \n flags.N = 0;\n flags.C = (result & 0x10000) ? 1 : 0;\n flags.H = (((hl & 0x0fff) + (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n\n update_xy_flags(h);\n};\n\nlet do_hl_adc = function(operand)\n{\n operand += flags.C;\n var hl = l | (h << 8), result = hl + operand;\n \n flags.S = (result & 0x8000) ? 1 : 0;\n flags.Z = !(result & 0xffff) ? 1 : 0;\n flags.H = (((hl & 0x0fff) + (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n flags.P = ((hl & 0x8000) === (operand & 0x8000)) && ((result & 0x8000) !== (hl & 0x8000)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x10000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result >>> 8) & 0xff;\n \n update_xy_flags(h);\n};\n\nlet do_hl_sbc = function(operand)\n{\n operand += flags.C;\n var hl = l | (h << 8), result = hl - operand;\n \n flags.S = (result & 0x8000) ? 1 : 0;\n flags.Z = !(result & 0xffff) ? 1 : 0;\n flags.H = (((hl & 0x0fff) - (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n flags.P = ((hl & 0x8000) !== (operand & 0x8000)) && ((result & 0x8000) !== (hl & 0x8000)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x10000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result >>> 8) & 0xff;\n \n update_xy_flags(h);\n};\n\nlet do_in = function(port)\n{\n var result = core.io_read(port);\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = result ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(result) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_neg = function()\n{\n // This instruction is defined to not alter the register if it === 0x80.\n if (a !== 0x80)\n {\n // This is a signed operation, so convert A to a signed value.\n a = get_signed_offset_byte(a);\n \n a = (-a) & 0xff;\n }\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = (((-a) & 0x0f) > 0) ? 1 : 0;\n flags.P = (a === 0x80) ? 1 : 0;\n flags.N = 1;\n flags.C = a ? 1 : 0;\n update_xy_flags(a);\n};\n\nlet do_ldi = function()\n{\n // Copy the value that we're supposed to copy.\n var read_value = core.mem_read(l | (h << 8));\n core.mem_write(e | (d << 8), read_value);\n \n // Increment DE and HL, and decrement BC.\n var result = (e | (d << 8)) + 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.H = 0;\n flags.P = (c || b) ? 1 : 0;\n flags.N = 0;\n flags.Y = ((a + read_value) & 0x02) >>> 1;\n flags.X = ((a + read_value) & 0x08) >>> 3;\n};\n\nlet do_cpi = function()\n{\n var temp_carry = flags.C;\n var read_value = core.mem_read(l | (h << 8))\n do_cp(read_value);\n flags.C = temp_carry;\n flags.Y = ((a - read_value - flags.H) & 0x02) >>> 1;\n flags.X = ((a - read_value - flags.H) & 0x08) >>> 3;\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = result ? 1 : 0;\n};\n\nlet do_ini = function()\n{\n b = do_dec(b);\n \n core.mem_write(l | (h << 8), core.io_read((b << 8) | c));\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n\n flags.N = 1;\n};\n\nlet do_outi = function()\n{\n core.io_write((b << 8) | c, core.mem_read(l | (h << 8)));\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n b = do_dec(b);\n flags.N = 1;\n};\n\nlet do_ldd = function()\n{\n flags.N = 0;\n flags.H = 0;\n \n var read_value = core.mem_read(l | (h << 8));\n core.mem_write(e | (d << 8), read_value);\n \n var result = (e | (d << 8)) - 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = (c || b) ? 1 : 0;\n flags.Y = ((a + read_value) & 0x02) >>> 1;\n flags.X = ((a + read_value) & 0x08) >>> 3;\n};\n\nlet do_cpd = function()\n{\n var temp_carry = flags.C\n var read_value = core.mem_read(l | (h << 8))\n do_cp(read_value);\n flags.C = temp_carry;\n flags.Y = ((a - read_value - flags.H) & 0x02) >>> 1;\n flags.X = ((a - read_value - flags.H) & 0x08) >>> 3;\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = result ? 1 : 0;\n};\n\nlet do_ind = function()\n{\n b = do_dec(b);\n \n core.mem_write(l | (h << 8), core.io_read((b << 8) | c));\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n flags.N = 1;\n};\n\nlet do_outd = function()\n{\n core.io_write((b << 8) | c, core.mem_read(l | (h << 8)));\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n b = do_dec(b);\n flags.N = 1;\n};\n\nlet do_rlc = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) | flags.C) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_rrc = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (flags.C << 7);\n \n flags.Z = !(operand & 0xff) ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand & 0xff;\n};\n\nlet do_rl = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n var temp = flags.C;\n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) | temp) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n\n return operand;\n};\n\nlet do_rr = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n var temp = flags.C;\n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (temp << 7);\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n\n return operand;\n};\n\nlet do_sla = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = (operand << 1) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_sra = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (operand & 0x80);\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_sll = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) & 0xff) | 1;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_srl = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = (operand >>> 1) & 0x7f;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_ix_add = function(operand)\n{\n flags.N = 0;\n \n var result = ix + operand;\n \n flags.C = (result & 0x10000) ? 1 : 0;\n flags.H = (((ix & 0xfff) + (operand & 0xfff)) & 0x1000) ? 1 : 0;\n update_xy_flags((result & 0xff00) >>> 8);\n \n ix = result & 0xffff;\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// This table contains the implementations for the instructions that weren't\n/// implemented directly in the decoder function (everything but the 8-bit\n/// register loads and the accumulator ALU instructions, in other words).\n/// Similar tables for the ED and DD/FD prefixes follow this one.\n///////////////////////////////////////////////////////////////////////////////\nlet instructions = [];\n\n// 0x00 : NOP\ninstructions[0x00] = function() { };\n// 0x01 : LD BC, nn\ninstructions[0x01] = function()\n{\n pc = (pc + 1) & 0xffff;\n c = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n b = core.mem_read(pc);\n};\n// 0x02 : LD (BC), A\ninstructions[0x02] = function()\n{\n core.mem_write(c | (b << 8), a);\n};\n// 0x03 : INC BC\ninstructions[0x03] = function()\n{\n var result = (c | (b << 8));\n result += 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0x04 : INC B\ninstructions[0x04] = function()\n{\n b = do_inc(b);\n};\n// 0x05 : DEC B\ninstructions[0x05] = function()\n{\n b = do_dec(b);\n};\n// 0x06 : LD B, n\ninstructions[0x06] = function()\n{\n pc = (pc + 1) & 0xffff;\n b = core.mem_read(pc);\n};\n// 0x07 : RLCA\ninstructions[0x07] = function()\n{\n // This instruction is implemented as a special case of the\n // more general Z80-specific RLC instruction.\n // Specifially, RLCA is a version of RLC A that affects fewer flags.\n // The same applies to RRCA, RLA, and RRA.\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rlc(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x08 : EX AF, AF'\ninstructions[0x08] = function()\n{\n var temp = a;\n a = a_prime;\n a_prime = temp;\n \n temp = get_flags_register();\n set_flags_register(get_flags_prime());\n set_flags_prime(temp);\n};\n// 0x09 : ADD HL, BC\ninstructions[0x09] = function()\n{\n do_hl_add(c | (b << 8));\n};\n// 0x0a : LD A, (BC)\ninstructions[0x0a] = function()\n{\n a = core.mem_read(c | (b << 8));\n};\n// 0x0b : DEC BC\ninstructions[0x0b] = function()\n{\n var result = (c | (b << 8));\n result -= 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0x0c : INC C\ninstructions[0x0c] = function()\n{\n c = do_inc(c);\n};\n// 0x0d : DEC C\ninstructions[0x0d] = function()\n{\n c = do_dec(c);\n};\n// 0x0e : LD C, n\ninstructions[0x0e] = function()\n{\n pc = (pc + 1) & 0xffff;\n c = core.mem_read(pc);\n};\n// 0x0f : RRCA\ninstructions[0x0f] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rrc(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x10 : DJNZ nn\ninstructions[0x10] = function()\n{\n b = (b - 1) & 0xff;\n do_conditional_relative_jump(b !== 0);\n};\n// 0x11 : LD DE, nn\ninstructions[0x11] = function()\n{\n pc = (pc + 1) & 0xffff;\n e = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n d = core.mem_read(pc);\n};\n// 0x12 : LD (DE), A\ninstructions[0x12] = function()\n{\n core.mem_write(e | (d << 8), a);\n};\n// 0x13 : INC DE\ninstructions[0x13] = function()\n{\n var result = (e | (d << 8));\n result += 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0x14 : INC D\ninstructions[0x14] = function()\n{\n d = do_inc(d);\n};\n// 0x15 : DEC D\ninstructions[0x15] = function()\n{\n d = do_dec(d);\n};\n// 0x16 : LD D, n\ninstructions[0x16] = function()\n{\n pc = (pc + 1) & 0xffff;\n d = core.mem_read(pc);\n};\n// 0x17 : RLA\ninstructions[0x17] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rl(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x18 : JR n\ninstructions[0x18] = function()\n{\n var offset = get_signed_offset_byte(core.mem_read((pc + 1) & 0xffff));\n pc = (pc + offset + 1) & 0xffff;\n};\n// 0x19 : ADD HL, DE\ninstructions[0x19] = function()\n{\n do_hl_add(e | (d << 8));\n};\n// 0x1a : LD A, (DE)\ninstructions[0x1a] = function()\n{\n a = core.mem_read(e | (d << 8));\n};\n// 0x1b : DEC DE\ninstructions[0x1b] = function()\n{\n var result = (e | (d << 8));\n result -= 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0x1c : INC E\ninstructions[0x1c] = function()\n{\n e = do_inc(e);\n};\n// 0x1d : DEC E\ninstructions[0x1d] = function()\n{\n e = do_dec(e);\n};\n// 0x1e : LD E, n\ninstructions[0x1e] = function()\n{\n pc = (pc + 1) & 0xffff;\n e = core.mem_read(pc);\n};\n// 0x1f : RRA\ninstructions[0x1f] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rr(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x20 : JR NZ, n\ninstructions[0x20] = function()\n{\n do_conditional_relative_jump(!flags.Z);\n};\n// 0x21 : LD HL, nn\ninstructions[0x21] = function()\n{\n pc = (pc + 1) & 0xffff;\n l = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n h = core.mem_read(pc);\n};\n// 0x22 : LD (nn), HL\ninstructions[0x22] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, l);\n core.mem_write((address + 1) & 0xffff, h);\n};\n// 0x23 : INC HL\ninstructions[0x23] = function()\n{\n var result = (l | (h << 8));\n result += 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0x24 : INC H\ninstructions[0x24] = function()\n{\n h = do_inc(h);\n};\n// 0x25 : DEC H\ninstructions[0x25] = function()\n{\n h = do_dec(h);\n};\n// 0x26 : LD H, n\ninstructions[0x26] = function()\n{\n pc = (pc + 1) & 0xffff;\n h = core.mem_read(pc);\n};\n// 0x27 : DAA\ninstructions[0x27] = function()\n{\n var temp = a;\n if (!flags.N)\n {\n if (flags.H || ((a & 0x0f) > 9))\n temp += 0x06;\n if (flags.C || (a > 0x99))\n temp += 0x60;\n }\n else\n {\n if (flags.H || ((a & 0x0f) > 9))\n temp -= 0x06;\n if (flags.C || (a > 0x99))\n temp -= 0x60;\n }\n \n flags.S = (temp & 0x80) ? 1 : 0;\n flags.Z = !(temp & 0xff) ? 1 : 0;\n flags.H = ((a & 0x10) ^ (temp & 0x10)) ? 1 : 0;\n flags.P = get_parity(temp & 0xff);\n // DAA never clears the carry flag if it was already set,\n // but it is able to set the carry flag if it was clear.\n // Don't ask me, I don't know.\n // Note also that we check for a BCD carry, instead of the usual.\n flags.C = (flags.C || (a > 0x99)) ? 1 : 0;\n \n a = temp & 0xff;\n \n update_xy_flags(a);\n};\n// 0x28 : JR Z, n\ninstructions[0x28] = function()\n{\n do_conditional_relative_jump(!!flags.Z);\n};\n// 0x29 : ADD HL, HL\ninstructions[0x29] = function()\n{\n do_hl_add(l | (h << 8));\n};\n// 0x2a : LD HL, (nn)\ninstructions[0x2a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n l = core.mem_read(address);\n h = core.mem_read((address + 1) & 0xffff);\n};\n// 0x2b : DEC HL\ninstructions[0x2b] = function()\n{\n var result = (l | (h << 8));\n result -= 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0x2c : INC L\ninstructions[0x2c] = function()\n{\n l = do_inc(l);\n};\n// 0x2d : DEC L\ninstructions[0x2d] = function()\n{\n l = do_dec(l);\n};\n// 0x2e : LD L, n\ninstructions[0x2e] = function()\n{\n pc = (pc + 1) & 0xffff;\n l = core.mem_read(pc);\n};\n// 0x2f : CPL\ninstructions[0x2f] = function()\n{\n a = (~a) & 0xff;\n flags.N = 1;\n flags.H = 1;\n update_xy_flags(a);\n};\n// 0x30 : JR NC, n\ninstructions[0x30] = function()\n{\n do_conditional_relative_jump(!flags.C);\n};\n// 0x31 : LD SP, nn\ninstructions[0x31] = function()\n{\n sp = core.mem_read((pc + 1) & 0xffff) | \n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc + 2) & 0xffff;\n};\n// 0x32 : LD (nn), A\ninstructions[0x32] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, a);\n};\n// 0x33 : INC SP\ninstructions[0x33] = function()\n{\n sp = (sp + 1) & 0xffff;\n};\n// 0x34 : INC (HL)\ninstructions[0x34] = function()\n{\n var address = l | (h << 8);\n core.mem_write(address, do_inc(core.mem_read(address)));\n};\n// 0x35 : DEC (HL)\ninstructions[0x35] = function()\n{\n var address = l | (h << 8);\n core.mem_write(address, do_dec(core.mem_read(address)));\n};\n// 0x36 : LD (HL), n\ninstructions[0x36] = function()\n{\n pc = (pc + 1) & 0xffff;\n core.mem_write(l | (h << 8), core.mem_read(pc));\n};\n// 0x37 : SCF\ninstructions[0x37] = function()\n{\n flags.N = 0;\n flags.H = 0;\n flags.C = 1;\n update_xy_flags(a);\n};\n// 0x38 : JR C, n\ninstructions[0x38] = function()\n{\n do_conditional_relative_jump(!!flags.C);\n};\n// 0x39 : ADD HL, SP\ninstructions[0x39] = function()\n{\n do_hl_add(sp);\n};\n// 0x3a : LD A, (nn)\ninstructions[0x3a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n a = core.mem_read(address);\n};\n// 0x3b : DEC SP\ninstructions[0x3b] = function()\n{\n sp = (sp - 1) & 0xffff;\n};\n// 0x3c : INC A\ninstructions[0x3c] = function()\n{\n a = do_inc(a);\n};\n// 0x3d : DEC A\ninstructions[0x3d] = function()\n{\n a = do_dec(a);\n};\n// 0x3e : LD A, n\ninstructions[0x3e] = function()\n{\n a = core.mem_read((pc + 1) & 0xffff);\n pc = (pc + 1) & 0xffff;\n};\n// 0x3f : CCF\ninstructions[0x3f] = function()\n{\n flags.N = 0;\n flags.H = flags.C;\n flags.C = flags.C ? 0 : 1;\n update_xy_flags(a);\n};\n// 0xc0 : RET NZ\ninstructions[0xc0] = function()\n{\n do_conditional_return(!flags.Z);\n};\n// 0xc1 : POP BC\ninstructions[0xc1] = function()\n{\n var result = pop_word();\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0xc2 : JP NZ, nn\ninstructions[0xc2] = function()\n{\n do_conditional_absolute_jump(!flags.Z);\n};\n// 0xc3 : JP nn\ninstructions[0xc3] = function()\n{\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xc4 : CALL NZ, nn\ninstructions[0xc4] = function()\n{\n do_conditional_call(!flags.Z);\n};\n// 0xc5 : PUSH BC\ninstructions[0xc5] = function()\n{\n push_word(c | (b << 8));\n};\n// 0xc6 : ADD A, n\ninstructions[0xc6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_add(core.mem_read(pc));\n};\n// 0xc7 : RST 00h\ninstructions[0xc7] = function()\n{\n do_reset(0x00);\n};\n// 0xc8 : RET Z\ninstructions[0xc8] = function()\n{\n do_conditional_return(!!flags.Z);\n};\n// 0xc9 : RET\ninstructions[0xc9] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n};\n// 0xca : JP Z, nn\ninstructions[0xca] = function()\n{\n do_conditional_absolute_jump(!!flags.Z);\n};\n// 0xcb : CB Prefix\ninstructions[0xcb] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n // We don't have a table for this prefix,\n // the instructions are all so uniform that we can directly decode them.\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n bit_number = (opcode & 0x38) >>> 3,\n reg_code = opcode & 0x07;\n \n if (opcode < 0x40)\n {\n // Shift/rotate instructions\n var op_array = [do_rlc, do_rrc, do_rl, do_rr,\n do_sla, do_sra, do_sll, do_srl];\n \n if (reg_code === 0)\n b = op_array[bit_number]( b);\n else if (reg_code === 1)\n c = op_array[bit_number]( c);\n else if (reg_code === 2)\n d = op_array[bit_number]( d);\n else if (reg_code === 3)\n e = op_array[bit_number]( e);\n else if (reg_code === 4)\n h = op_array[bit_number]( h);\n else if (reg_code === 5)\n l = op_array[bit_number]( l);\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n op_array[bit_number]( core.mem_read(l | (h << 8))));\n else if (reg_code === 7)\n a = op_array[bit_number]( a);\n }\n else if (opcode < 0x80)\n {\n // BIT instructions\n if (reg_code === 0)\n flags.Z = !(b & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 1)\n flags.Z = !(c & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 2)\n flags.Z = !(d & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 3)\n flags.Z = !(e & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 4)\n flags.Z = !(h & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 5)\n flags.Z = !(l & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 6)\n flags.Z = !((core.mem_read(l | (h << 8))) & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 7)\n flags.Z = !(a & (1 << bit_number)) ? 1 : 0;\n \n flags.N = 0;\n flags.H = 1;\n flags.P = flags.Z;\n flags.S = ((bit_number === 7) && !flags.Z) ? 1 : 0;\n // For the BIT n, (HL) instruction, the X and Y flags are obtained\n // from what is apparently an internal temporary register used for\n // some of the 16-bit arithmetic instructions.\n // I haven't implemented that register here,\n // so for now we'll set X and Y the same way for every BIT opcode,\n // which means that they will usually be wrong for BIT n, (HL).\n flags.Y = ((bit_number === 5) && !flags.Z) ? 1 : 0;\n flags.X = ((bit_number === 3) && !flags.Z) ? 1 : 0;\n }\n else if (opcode < 0xc0)\n {\n // RES instructions\n if (reg_code === 0)\n b &= (0xff & ~(1 << bit_number));\n else if (reg_code === 1)\n c &= (0xff & ~(1 << bit_number));\n else if (reg_code === 2)\n d &= (0xff & ~(1 << bit_number));\n else if (reg_code === 3)\n e &= (0xff & ~(1 << bit_number));\n else if (reg_code === 4)\n h &= (0xff & ~(1 << bit_number));\n else if (reg_code === 5)\n l &= (0xff & ~(1 << bit_number));\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n core.mem_read(l | (h << 8)) & ~(1 << bit_number));\n else if (reg_code === 7)\n a &= (0xff & ~(1 << bit_number));\n }\n else\n {\n // SET instructions\n if (reg_code === 0)\n b |= (1 << bit_number);\n else if (reg_code === 1)\n c |= (1 << bit_number);\n else if (reg_code === 2)\n d |= (1 << bit_number);\n else if (reg_code === 3)\n e |= (1 << bit_number);\n else if (reg_code === 4)\n h |= (1 << bit_number);\n else if (reg_code === 5)\n l |= (1 << bit_number);\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n core.mem_read(l | (h << 8)) | (1 << bit_number));\n else if (reg_code === 7)\n a |= (1 << bit_number);\n }\n \n cycle_counter += cycle_counts_cb[opcode];\n};\n// 0xcc : CALL Z, nn\ninstructions[0xcc] = function()\n{\n do_conditional_call(!!flags.Z);\n};\n// 0xcd : CALL nn\ninstructions[0xcd] = function()\n{\n push_word((pc + 3) & 0xffff);\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xce : ADC A, n\ninstructions[0xce] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_adc(core.mem_read(pc));\n};\n// 0xcf : RST 08h\ninstructions[0xcf] = function()\n{\n do_reset(0x08);\n};\n// 0xd0 : RET NC\ninstructions[0xd0] = function()\n{\n do_conditional_return(!flags.C);\n};\n// 0xd1 : POP DE\ninstructions[0xd1] = function()\n{\n var result = pop_word();\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0xd2 : JP NC, nn\ninstructions[0xd2] = function()\n{\n do_conditional_absolute_jump(!flags.C);\n};\n// 0xd3 : OUT (n), A\ninstructions[0xd3] = function()\n{\n pc = (pc + 1) & 0xffff;\n core.io_write((a << 8) | core.mem_read(pc), a);\n};\n// 0xd4 : CALL NC, nn\ninstructions[0xd4] = function()\n{\n do_conditional_call(!flags.C);\n};\n// 0xd5 : PUSH DE\ninstructions[0xd5] = function()\n{\n push_word(e | (d << 8));\n};\n// 0xd6 : SUB n\ninstructions[0xd6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_sub(core.mem_read(pc));\n};\n// 0xd7 : RST 10h\ninstructions[0xd7] = function()\n{\n do_reset(0x10);\n};\n// 0xd8 : RET C\ninstructions[0xd8] = function()\n{\n do_conditional_return(!!flags.C);\n};\n// 0xd9 : EXX\ninstructions[0xd9] = function()\n{\n var temp = b;\n b = b_prime;\n b_prime = temp;\n temp = c;\n c = c_prime;\n c_prime = temp;\n temp = d;\n d = d_prime;\n d_prime = temp;\n temp = e;\n e = e_prime;\n e_prime = temp;\n temp = h;\n h = h_prime;\n h_prime = temp;\n temp = l;\n l = l_prime;\n l_prime = temp;\n};\n// 0xda : JP C, nn\ninstructions[0xda] = function()\n{\n do_conditional_absolute_jump(!!flags.C);\n};\n// 0xdb : IN A, (n)\ninstructions[0xdb] = function()\n{\n pc = (pc + 1) & 0xffff;\n a = core.io_read((a << 8) | core.mem_read(pc));\n};\n// 0xdc : CALL C, nn\ninstructions[0xdc] = function()\n{\n do_conditional_call(!!flags.C);\n};\n// 0xdd : DD Prefix (IX instructions)\ninstructions[0xdd] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = dd_instructions[opcode];\n \n if (func)\n {\n //func = func.bind(this);\n func();\n cycle_counter += cycle_counts_dd[opcode];\n }\n else\n {\n // Apparently if a DD opcode doesn't exist,\n // it gets treated as an unprefixed opcode.\n // What we'll do to handle that is just back up the \n // program counter, so that this byte gets decoded\n // as a normal instruction.\n pc = (pc - 1) & 0xffff;\n // And we'll add in the cycle count for a NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xde : SBC n\ninstructions[0xde] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_sbc(core.mem_read(pc));\n};\n// 0xdf : RST 18h\ninstructions[0xdf] = function()\n{\n do_reset(0x18);\n};\n// 0xe0 : RET PO\ninstructions[0xe0] = function()\n{\n do_conditional_return(!flags.P);\n};\n// 0xe1 : POP HL\ninstructions[0xe1] = function()\n{\n var result = pop_word();\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0xe2 : JP PO, (nn)\ninstructions[0xe2] = function()\n{\n do_conditional_absolute_jump(!flags.P);\n};\n// 0xe3 : EX (SP), HL\ninstructions[0xe3] = function()\n{\n var temp = core.mem_read(sp);\n core.mem_write(sp, l);\n l = temp;\n temp = core.mem_read((sp + 1) & 0xffff);\n core.mem_write((sp + 1) & 0xffff, h);\n h = temp;\n};\n// 0xe4 : CALL PO, nn\ninstructions[0xe4] = function()\n{\n do_conditional_call(!flags.P);\n};\n// 0xe5 : PUSH HL\ninstructions[0xe5] = function()\n{\n push_word(l | (h << 8));\n};\n// 0xe6 : AND n\ninstructions[0xe6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_and(core.mem_read(pc));\n};\n// 0xe7 : RST 20h\ninstructions[0xe7] = function()\n{\n do_reset(0x20);\n};\n// 0xe8 : RET PE\ninstructions[0xe8] = function()\n{\n do_conditional_return(!!flags.P);\n};\n// 0xe9 : JP (HL)\ninstructions[0xe9] = function()\n{\n pc = l | (h << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xea : JP PE, nn\ninstructions[0xea] = function()\n{\n do_conditional_absolute_jump(!!flags.P);\n};\n// 0xeb : EX DE, HL\ninstructions[0xeb] = function()\n{\n var temp = d;\n d = h;\n h = temp;\n temp = e;\n e = l;\n l = temp;\n};\n// 0xec : CALL PE, nn\ninstructions[0xec] = function()\n{\n do_conditional_call(!!flags.P);\n};\n// 0xed : ED Prefix\ninstructions[0xed] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = ed_instructions[opcode];\n \n if (func)\n {\n //func = func.bind(this);\n func();\n cycle_counter += cycle_counts_ed[opcode];\n }\n else\n {\n // If the opcode didn't exist, the whole thing is a two-byte NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xee : XOR n\ninstructions[0xee] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_xor(core.mem_read(pc));\n};\n// 0xef : RST 28h\ninstructions[0xef] = function()\n{\n do_reset(0x28);\n};\n// 0xf0 : RET P\ninstructions[0xf0] = function()\n{\n do_conditional_return(!flags.S);\n};\n// 0xf1 : POP AF\ninstructions[0xf1] = function()\n{\n var result = pop_word();\n set_flags_register(result & 0xff);\n a = (result & 0xff00) >>> 8;\n};\n// 0xf2 : JP P, nn\ninstructions[0xf2] = function()\n{\n do_conditional_absolute_jump(!flags.S);\n};\n// 0xf3 : DI\ninstructions[0xf3] = function()\n{\n // DI doesn't actually take effect until after the next instruction.\n do_delayed_di = true;\n};\n// 0xf4 : CALL P, nn\ninstructions[0xf4] = function()\n{\n do_conditional_call(!flags.S);\n};\n// 0xf5 : PUSH AF\ninstructions[0xf5] = function()\n{\n push_word(get_flags_register() | (a << 8));\n};\n// 0xf6 : OR n\ninstructions[0xf6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_or(core.mem_read(pc));\n};\n// 0xf7 : RST 30h\ninstructions[0xf7] = function()\n{\n do_reset(0x30);\n};\n// 0xf8 : RET M\ninstructions[0xf8] = function()\n{\n do_conditional_return(!!flags.S);\n};\n// 0xf9 : LD SP, HL\ninstructions[0xf9] = function()\n{\n sp = l | (h << 8);\n};\n// 0xfa : JP M, nn\ninstructions[0xfa] = function()\n{\n do_conditional_absolute_jump(!!flags.S);\n};\n// 0xfb : EI\ninstructions[0xfb] = function()\n{\n // EI doesn't actually take effect until after the next instruction.\n do_delayed_ei = true;\n};\n// 0xfc : CALL M, nn\ninstructions[0xfc] = function()\n{\n do_conditional_call(!!flags.S);\n};\n// 0xfd : FD Prefix (IY instructions)\ninstructions[0xfd] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = dd_instructions[opcode];\n \n if (func)\n {\n // Rather than copy and paste all the IX instructions into IY instructions,\n // what we'll do is sneakily copy IY into IX, run the IX instruction,\n // and then copy the result into IY and restore the old IX.\n var temp = ix;\n ix = iy;\n //func = func.bind(this);\n func();\n iy = ix;\n ix = temp;\n \n cycle_counter += cycle_counts_dd[opcode];\n }\n else\n {\n // Apparently if an FD opcode doesn't exist,\n // it gets treated as an unprefixed opcode.\n // What we'll do to handle that is just back up the \n // program counter, so that this byte gets decoded\n // as a normal instruction.\n pc = (pc - 1) & 0xffff;\n // And we'll add in the cycle count for a NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xfe : CP n\ninstructions[0xfe] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_cp(core.mem_read(pc));\n};\n// 0xff : RST 38h\ninstructions[0xff] = function()\n{\n do_reset(0x38);\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// This table of ED opcodes is pretty sparse;\n/// there are not very many valid ED-prefixed opcodes in the Z80,\n/// and many of the ones that are valid are not documented.\n///////////////////////////////////////////////////////////////////////////////\nlet ed_instructions = [];\n// 0x40 : IN B, (C)\ned_instructions[0x40] = function()\n{\n b = do_in((b << 8) | c);\n};\n// 0x41 : OUT (C), B\ned_instructions[0x41] = function()\n{\n core.io_write((b << 8) | c, b);\n};\n// 0x42 : SBC HL, BC\ned_instructions[0x42] = function()\n{\n do_hl_sbc(c | (b << 8));\n};\n// 0x43 : LD (nn), BC\ned_instructions[0x43] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, c);\n core.mem_write((address + 1) & 0xffff, b);\n};\n// 0x44 : NEG\ned_instructions[0x44] = function()\n{\n do_neg();\n};\n// 0x45 : RETN\ned_instructions[0x45] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x46 : IM 0\ned_instructions[0x46] = function()\n{\n imode = 0;\n};\n// 0x47 : LD I, A\ned_instructions[0x47] = function()\n{\n i = a\n};\n// 0x48 : IN C, (C)\ned_instructions[0x48] = function()\n{\n c = do_in((b << 8) | c);\n};\n// 0x49 : OUT (C), C\ned_instructions[0x49] = function()\n{\n core.io_write((b << 8) | c, c);\n};\n// 0x4a : ADC HL, BC\ned_instructions[0x4a] = function()\n{\n do_hl_adc(c | (b << 8));\n};\n// 0x4b : LD BC, (nn)\ned_instructions[0x4b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n c = core.mem_read(address);\n b = core.mem_read((address + 1) & 0xffff);\n};\n// 0x4c : NEG (Undocumented)\ned_instructions[0x4c] = function()\n{\n do_neg();\n};\n// 0x4d : RETI\ned_instructions[0x4d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n};\n// 0x4e : IM 0 (Undocumented)\ned_instructions[0x4e] = function()\n{\n imode = 0;\n};\n// 0x4f : LD R, A\ned_instructions[0x4f] = function()\n{\n r = a;\n};\n// 0x50 : IN D, (C)\ned_instructions[0x50] = function()\n{\n d = do_in((b << 8) | c);\n};\n// 0x51 : OUT (C), D\ned_instructions[0x51] = function()\n{\n core.io_write((b << 8) | c, d);\n};\n// 0x52 : SBC HL, DE\ned_instructions[0x52] = function()\n{\n do_hl_sbc(e | (d << 8));\n};\n// 0x53 : LD (nn), DE\ned_instructions[0x53] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, e);\n core.mem_write((address + 1) & 0xffff, d);\n};\n// 0x54 : NEG (Undocumented)\ned_instructions[0x54] = function()\n{\n do_neg();\n};\n// 0x55 : RETN\ned_instructions[0x55] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x56 : IM 1\ned_instructions[0x56] = function()\n{\n imode = 1;\n};\n// 0x57 : LD A, I\ned_instructions[0x57] = function()\n{\n a = i;\n flags.S = a & 0x80 ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = iff2;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x58 : IN E, (C)\ned_instructions[0x58] = function()\n{\n e = do_in((b << 8) | c);\n};\n// 0x59 : OUT (C), E\ned_instructions[0x59] = function()\n{\n core.io_write((b << 8) | c, e);\n};\n// 0x5a : ADC HL, DE\ned_instructions[0x5a] = function()\n{\n do_hl_adc(e | (d << 8));\n};\n// 0x5b : LD DE, (nn)\ned_instructions[0x5b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n e = core.mem_read(address);\n d = core.mem_read((address + 1) & 0xffff);\n};\n// 0x5c : NEG (Undocumented)\ned_instructions[0x5c] = function()\n{\n do_neg();\n};\n// 0x5d : RETN\ned_instructions[0x5d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x5e : IM 2\ned_instructions[0x5e] = function()\n{\n imode = 2;\n};\n// 0x5f : LD A, R\ned_instructions[0x5f] = function()\n{\n a = r;\n flags.S = a & 0x80 ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = iff2;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x60 : IN H, (C)\ned_instructions[0x60] = function()\n{\n h = do_in((b << 8) | c);\n};\n// 0x61 : OUT (C), H\ned_instructions[0x61] = function()\n{\n core.io_write((b << 8) | c, h);\n};\n// 0x62 : SBC HL, HL\ned_instructions[0x62] = function()\n{\n do_hl_sbc(l | (h << 8));\n};\n// 0x63 : LD (nn), HL (Undocumented)\ned_instructions[0x63] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, l);\n core.mem_write((address + 1) & 0xffff, h);\n};\n// 0x64 : NEG (Undocumented)\ned_instructions[0x64] = function()\n{\n do_neg();\n};\n// 0x65 : RETN\ned_instructions[0x65] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x66 : IM 0\ned_instructions[0x66] = function()\n{\n imode = 0;\n};\n// 0x67 : RRD\ned_instructions[0x67] = function()\n{\n var hl_value = core.mem_read(l | (h << 8));\n var temp1 = hl_value & 0x0f, temp2 = a & 0x0f;\n hl_value = ((hl_value & 0xf0) >>> 4) | (temp2 << 4);\n a = (a & 0xf0) | temp1;\n core.mem_write(l | (h << 8), hl_value);\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(a) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x68 : IN L, (C)\ned_instructions[0x68] = function()\n{\n l = do_in((b << 8) | c);\n};\n// 0x69 : OUT (C), L\ned_instructions[0x69] = function()\n{\n core.io_write((b << 8) | c, l);\n};\n// 0x6a : ADC HL, HL\ned_instructions[0x6a] = function()\n{\n do_hl_adc(l | (h << 8));\n};\n// 0x6b : LD HL, (nn) (Undocumented)\ned_instructions[0x6b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n l = core.mem_read(address);\n h = core.mem_read((address + 1) & 0xffff);\n};\n// 0x6c : NEG (Undocumented)\ned_instructions[0x6c] = function()\n{\n do_neg();\n};\n// 0x6d : RETN\ned_instructions[0x6d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x6e : IM 0 (Undocumented)\ned_instructions[0x6e] = function()\n{\n imode = 0;\n};\n// 0x6f : RLD\ned_instructions[0x6f] = function()\n{\n var hl_value = core.mem_read(l | (h << 8));\n var temp1 = hl_value & 0xf0, temp2 = a & 0x0f;\n hl_value = ((hl_value & 0x0f) << 4) | temp2;\n a = (a & 0xf0) | (temp1 >>> 4);\n core.mem_write(l | (h << 8), hl_value);\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(a) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x70 : IN (C) (Undocumented)\ned_instructions[0x70] = function()\n{\n do_in((b << 8) | c);\n};\n// 0x71 : OUT (C), 0 (Undocumented)\ned_instructions[0x71] = function()\n{\n core.io_write((b << 8) | c, 0);\n};\n// 0x72 : SBC HL, SP\ned_instructions[0x72] = function()\n{\n do_hl_sbc(sp);\n};\n// 0x73 : LD (nn), SP\ned_instructions[0x73] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, sp & 0xff);\n core.mem_write((address + 1) & 0xffff, (sp >>> 8) & 0xff);\n};\n// 0x74 : NEG (Undocumented)\ned_instructions[0x74] = function()\n{\n do_neg();\n};\n// 0x75 : RETN\ned_instructions[0x75] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x76 : IM 1\ned_instructions[0x76] = function()\n{\n imode = 1;\n};\n// 0x78 : IN A, (C)\ned_instructions[0x78] = function()\n{\n a = do_in((b << 8) | c);\n};\n// 0x79 : OUT (C), A\ned_instructions[0x79] = function()\n{\n core.io_write((b << 8) | c, a);\n};\n// 0x7a : ADC HL, SP\ned_instructions[0x7a] = function()\n{\n do_hl_adc(sp);\n};\n// 0x7b : LD SP, (nn)\ned_instructions[0x7b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n sp = core.mem_read(address);\n sp |= core.mem_read((address + 1) & 0xffff) << 8;\n};\n// 0x7c : NEG (Undocumented)\ned_instructions[0x7c] = function()\n{\n do_neg();\n};\n// 0x7d : RETN\ned_instructions[0x7d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x7e : IM 2\ned_instructions[0x7e] = function()\n{\n imode = 2;\n};\n// 0xa0 : LDI\ned_instructions[0xa0] = function()\n{\n do_ldi();\n};\n// 0xa1 : CPI\ned_instructions[0xa1] = function()\n{\n do_cpi();\n};\n// 0xa2 : INI\ned_instructions[0xa2] = function()\n{\n do_ini();\n};\n// 0xa3 : OUTI\ned_instructions[0xa3] = function()\n{\n do_outi();\n};\n// 0xa8 : LDD\ned_instructions[0xa8] = function()\n{\n do_ldd();\n};\n// 0xa9 : CPD\ned_instructions[0xa9] = function()\n{\n do_cpd();\n};\n// 0xaa : IND\ned_instructions[0xaa] = function()\n{\n do_ind();\n};\n// 0xab : OUTD\ned_instructions[0xab] = function()\n{\n do_outd();\n};\n// 0xb0 : LDIR\ned_instructions[0xb0] = function()\n{\n do_ldi();\n if (b || c)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb1 : CPIR\ned_instructions[0xb1] = function()\n{\n do_cpi();\n if (!flags.Z && (b || c))\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb2 : INIR\ned_instructions[0xb2] = function()\n{\n do_ini();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb3 : OTIR\ned_instructions[0xb3] = function()\n{\n do_outi();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb8 : LDDR\ned_instructions[0xb8] = function()\n{\n do_ldd();\n if (b || c)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb9 : CPDR\ned_instructions[0xb9] = function()\n{\n do_cpd();\n if (!flags.Z && (b || c))\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xba : INDR\ned_instructions[0xba] = function()\n{\n do_ind();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xbb : OTDR\ned_instructions[0xbb] = function()\n{\n do_outd();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// Like ED, this table is quite sparse,\n/// and many of the opcodes here are also undocumented.\n/// The undocumented instructions here are those that deal with only one byte\n/// of the two-byte IX register; the bytes are designed IXH and IXL here.\n///////////////////////////////////////////////////////////////////////////////\nlet dd_instructions = [];\n// 0x09 : ADD IX, BC\ndd_instructions[0x09] = function()\n{\n do_ix_add(c | (b << 8));\n};\n// 0x19 : ADD IX, DE\ndd_instructions[0x19] = function()\n{\n do_ix_add(e | (d << 8));\n};\n// 0x21 : LD IX, nn\ndd_instructions[0x21] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n ix |= (core.mem_read(pc) << 8);\n};\n// 0x22 : LD (nn), IX\ndd_instructions[0x22] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= (core.mem_read(pc) << 8);\n \n core.mem_write(address, ix & 0xff);\n core.mem_write((address + 1) & 0xffff, (ix >>> 8) & 0xff);\n};\n// 0x23 : INC IX\ndd_instructions[0x23] = function()\n{\n ix = (ix + 1) & 0xffff;\n};\n// 0x24 : INC IXH (Undocumented)\ndd_instructions[0x24] = function()\n{\n ix = (do_inc(ix >>> 8) << 8) | (ix & 0xff);\n};\n// 0x25 : DEC IXH (Undocumented)\ndd_instructions[0x25] = function()\n{\n ix = (do_dec(ix >>> 8) << 8) | (ix & 0xff);\n};\n// 0x26 : LD IXH, n (Undocumented)\ndd_instructions[0x26] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = (core.mem_read(pc) << 8) | (ix & 0xff);\n};\n// 0x29 : ADD IX, IX\ndd_instructions[0x29] = function()\n{\n do_ix_add(ix);\n};\n// 0x2a : LD IX, (nn)\ndd_instructions[0x2a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= (core.mem_read(pc) << 8);\n \n ix = core.mem_read(address);\n ix |= (core.mem_read((address + 1) & 0xffff) << 8);\n};\n// 0x2b : DEC IX\ndd_instructions[0x2b] = function()\n{\n ix = (ix - 1) & 0xffff;\n};\n// 0x2c : INC IXL (Undocumented)\ndd_instructions[0x2c] = function()\n{\n ix = do_inc(ix & 0xff) | (ix & 0xff00);\n};\n// 0x2d : DEC IXL (Undocumented)\ndd_instructions[0x2d] = function()\n{\n ix = do_dec(ix & 0xff) | (ix & 0xff00);\n};\n// 0x2e : LD IXL, n (Undocumented)\ndd_instructions[0x2e] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = (core.mem_read(pc) & 0xff) | (ix & 0xff00);\n};\n// 0x34 : INC (IX+n)\ndd_instructions[0x34] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc)),\n value = core.mem_read((offset + ix) & 0xffff);\n core.mem_write((offset + ix) & 0xffff, do_inc(value));\n};\n// 0x35 : DEC (IX+n)\ndd_instructions[0x35] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc)),\n value = core.mem_read((offset + ix) & 0xffff);\n core.mem_write((offset + ix) & 0xffff, do_dec(value));\n};\n// 0x36 : LD (IX+n), n\ndd_instructions[0x36] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n pc = (pc + 1) & 0xffff;\n core.mem_write((ix + offset) & 0xffff, core.mem_read(pc)); \n};\n// 0x39 : ADD IX, SP\ndd_instructions[0x39] = function()\n{\n do_ix_add(sp);\n};\n// 0x44 : LD B, IXH (Undocumented)\ndd_instructions[0x44] = function()\n{\n b = (ix >>> 8) & 0xff;\n};\n// 0x45 : LD B, IXL (Undocumented)\ndd_instructions[0x45] = function()\n{\n b = ix & 0xff;\n};\n// 0x46 : LD B, (IX+n)\ndd_instructions[0x46] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n b = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x4c : LD C, IXH (Undocumented)\ndd_instructions[0x4c] = function()\n{\n c = (ix >>> 8) & 0xff;\n};\n// 0x4d : LD C, IXL (Undocumented)\ndd_instructions[0x4d] = function()\n{\n c = ix & 0xff;\n};\n// 0x4e : LD C, (IX+n)\ndd_instructions[0x4e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n c = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x54 : LD D, IXH (Undocumented)\ndd_instructions[0x54] = function()\n{\n d = (ix >>> 8) & 0xff;\n};\n// 0x55 : LD D, IXL (Undocumented)\ndd_instructions[0x55] = function()\n{\n d = ix & 0xff;\n};\n// 0x56 : LD D, (IX+n)\ndd_instructions[0x56] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n d = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x5c : LD E, IXH (Undocumented)\ndd_instructions[0x5c] = function()\n{\n e = (ix >>> 8) & 0xff;\n};\n// 0x5d : LD E, IXL (Undocumented)\ndd_instructions[0x5d] = function()\n{\n e = ix & 0xff;\n};\n// 0x5e : LD E, (IX+n)\ndd_instructions[0x5e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n e = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x60 : LD IXH, B (Undocumented)\ndd_instructions[0x60] = function()\n{\n ix = (ix & 0xff) | (b << 8);\n};\n// 0x61 : LD IXH, C (Undocumented)\ndd_instructions[0x61] = function()\n{\n ix = (ix & 0xff) | (c << 8);\n};\n// 0x62 : LD IXH, D (Undocumented)\ndd_instructions[0x62] = function()\n{\n ix = (ix & 0xff) | (d << 8);\n};\n// 0x63 : LD IXH, E (Undocumented)\ndd_instructions[0x63] = function()\n{\n ix = (ix & 0xff) | (e << 8);\n};\n// 0x64 : LD IXH, IXH (Undocumented)\ndd_instructions[0x64] = function()\n{\n // No-op.\n};\n// 0x65 : LD IXH, IXL (Undocumented)\ndd_instructions[0x65] = function()\n{\n ix = (ix & 0xff) | ((ix & 0xff) << 8);\n};\n// 0x66 : LD H, (IX+n)\ndd_instructions[0x66] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n h = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x67 : LD IXH, A (Undocumented)\ndd_instructions[0x67] = function()\n{\n ix = (ix & 0xff) | (a << 8);\n};\n// 0x68 : LD IXL, B (Undocumented)\ndd_instructions[0x68] = function()\n{\n ix = (ix & 0xff00) | b;\n};\n// 0x69 : LD IXL, C (Undocumented)\ndd_instructions[0x69] = function()\n{\n ix = (ix & 0xff00) | c;\n};\n// 0x6a : LD IXL, D (Undocumented)\ndd_instructions[0x6a] = function()\n{\n ix = (ix & 0xff00) | d;\n};\n// 0x6b : LD IXL, E (Undocumented)\ndd_instructions[0x6b] = function()\n{\n ix = (ix & 0xff00) | e;\n};\n// 0x6c : LD IXL, IXH (Undocumented)\ndd_instructions[0x6c] = function()\n{\n ix = (ix & 0xff00) | (ix >>> 8);\n};\n// 0x6d : LD IXL, IXL (Undocumented)\ndd_instructions[0x6d] = function()\n{\n // No-op.\n};\n// 0x6e : LD L, (IX+n)\ndd_instructions[0x6e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n l = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x6f : LD IXL, A (Undocumented)\ndd_instructions[0x6f] = function()\n{\n ix = (ix & 0xff00) | a;\n};\n// 0x70 : LD (IX+n), B\ndd_instructions[0x70] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, b);\n};\n// 0x71 : LD (IX+n), C\ndd_instructions[0x71] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, c);\n};\n// 0x72 : LD (IX+n), D\ndd_instructions[0x72] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, d);\n};\n// 0x73 : LD (IX+n), E\ndd_instructions[0x73] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, e);\n};\n// 0x74 : LD (IX+n), H\ndd_instructions[0x74] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, h);\n};\n// 0x75 : LD (IX+n), L\ndd_instructions[0x75] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, l);\n};\n// 0x77 : LD (IX+n), A\ndd_instructions[0x77] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, a);\n};\n// 0x7c : LD A, IXH (Undocumented)\ndd_instructions[0x7c] = function()\n{\n a = (ix >>> 8) & 0xff;\n};\n// 0x7d : LD A, IXL (Undocumented)\ndd_instructions[0x7d] = function()\n{\n a = ix & 0xff;\n};\n// 0x7e : LD A, (IX+n)\ndd_instructions[0x7e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n a = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x84 : ADD A, IXH (Undocumented)\ndd_instructions[0x84] = function()\n{\n do_add((ix >>> 8) & 0xff);\n};\n// 0x85 : ADD A, IXL (Undocumented)\ndd_instructions[0x85] = function()\n{\n do_add(ix & 0xff);\n};\n// 0x86 : ADD A, (IX+n)\ndd_instructions[0x86] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_add(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x8c : ADC A, IXH (Undocumented)\ndd_instructions[0x8c] = function()\n{\n do_adc((ix >>> 8) & 0xff);\n};\n// 0x8d : ADC A, IXL (Undocumented)\ndd_instructions[0x8d] = function()\n{\n do_adc(ix & 0xff);\n};\n// 0x8e : ADC A, (IX+n)\ndd_instructions[0x8e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_adc(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x94 : SUB IXH (Undocumented)\ndd_instructions[0x94] = function()\n{\n do_sub((ix >>> 8) & 0xff);\n};\n// 0x95 : SUB IXL (Undocumented)\ndd_instructions[0x95] = function()\n{\n do_sub(ix & 0xff);\n};\n// 0x96 : SUB A, (IX+n)\ndd_instructions[0x96] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_sub(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x9c : SBC IXH (Undocumented)\ndd_instructions[0x9c] = function()\n{\n do_sbc((ix >>> 8) & 0xff);\n};\n// 0x9d : SBC IXL (Undocumented)\ndd_instructions[0x9d] = function()\n{\n do_sbc(ix & 0xff);\n};\n// 0x9e : SBC A, (IX+n)\ndd_instructions[0x9e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_sbc(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xa4 : AND IXH (Undocumented)\ndd_instructions[0xa4] = function()\n{\n do_and((ix >>> 8) & 0xff);\n};\n// 0xa5 : AND IXL (Undocumented)\ndd_instructions[0xa5] = function()\n{\n do_and(ix & 0xff);\n};\n// 0xa6 : AND A, (IX+n)\ndd_instructions[0xa6] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_and(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xac : XOR IXH (Undocumented)\ndd_instructions[0xac] = function()\n{\n do_xor((ix >>> 8) & 0xff);\n};\n// 0xad : XOR IXL (Undocumented)\ndd_instructions[0xad] = function()\n{\n do_xor(ix & 0xff);\n};\n// 0xae : XOR A, (IX+n)\ndd_instructions[0xae] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_xor(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xb4 : OR IXH (Undocumented)\ndd_instructions[0xb4] = function()\n{\n do_or((ix >>> 8) & 0xff);\n};\n// 0xb5 : OR IXL (Undocumented)\ndd_instructions[0xb5] = function()\n{\n do_or(ix & 0xff);\n};\n// 0xb6 : OR A, (IX+n)\ndd_instructions[0xb6] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_or(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xbc : CP IXH (Undocumented)\ndd_instructions[0xbc] = function()\n{\n do_cp((ix >>> 8) & 0xff);\n};\n// 0xbd : CP IXL (Undocumented)\ndd_instructions[0xbd] = function()\n{\n do_cp(ix & 0xff);\n};\n// 0xbe : CP A, (IX+n)\ndd_instructions[0xbe] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_cp(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xcb : CB Prefix (IX bit instructions)\ndd_instructions[0xcb] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc), value;\n \n // As with the \"normal\" CB prefix, we implement the DDCB prefix\n // by decoding the opcode directly, rather than using a table.\n if (opcode < 0x40)\n {\n // Shift and rotate instructions.\n var ddcb_functions = [do_rlc, do_rrc, do_rl, do_rr,\n do_sla, do_sra, do_sll, do_srl];\n \n // Most of the opcodes in this range are not valid,\n // so we map this opcode onto one of the ones that is.\n var func = ddcb_functions[(opcode & 0x38) >>> 3],\n value = func( core.mem_read((ix + offset) & 0xffff));\n \n core.mem_write((ix + offset) & 0xffff, value);\n }\n else\n {\n var bit_number = (opcode & 0x38) >>> 3;\n \n if (opcode < 0x80)\n {\n // BIT\n flags.N = 0;\n flags.H = 1;\n flags.Z = !(core.mem_read((ix + offset) & 0xffff) & (1 << bit_number)) ? 1 : 0;\n flags.P = flags.Z;\n flags.S = ((bit_number === 7) && !flags.Z) ? 1 : 0;\n }\n else if (opcode < 0xc0)\n {\n // RES\n value = core.mem_read((ix + offset) & 0xffff) & ~(1 << bit_number) & 0xff;\n core.mem_write((ix + offset) & 0xffff, value);\n }\n else\n {\n // SET\n value = core.mem_read((ix + offset) & 0xffff) | (1 << bit_number);\n core.mem_write((ix + offset) & 0xffff, value);\n }\n }\n \n // This implements the undocumented shift, RES, and SET opcodes,\n // which write their result to memory and also to an 8080 register.\n if (value !== undefined)\n {\n if ((opcode & 0x07) === 0)\n b = value;\n else if ((opcode & 0x07) === 1)\n c = value;\n else if ((opcode & 0x07) === 2)\n d = value;\n else if ((opcode & 0x07) === 3)\n e = value;\n else if ((opcode & 0x07) === 4)\n h = value;\n else if ((opcode & 0x07) === 5)\n l = value;\n // 6 is the documented opcode, which doesn't set a register.\n else if ((opcode & 0x07) === 7)\n a = value;\n }\n \n cycle_counter += cycle_counts_cb[opcode] + 8;\n};\n// 0xe1 : POP IX\ndd_instructions[0xe1] = function()\n{\n ix = pop_word();\n};\n// 0xe3 : EX (SP), IX\ndd_instructions[0xe3] = function()\n{\n var temp = ix;\n ix = core.mem_read(sp);\n ix |= core.mem_read((sp + 1) & 0xffff) << 8;\n core.mem_write(sp, temp & 0xff);\n core.mem_write((sp + 1) & 0xffff, (temp >>> 8) & 0xff);\n};\n// 0xe5 : PUSH IX\ndd_instructions[0xe5] = function()\n{\n push_word(ix);\n};\n// 0xe9 : JP (IX)\ndd_instructions[0xe9] = function()\n{\n pc = (ix - 1) & 0xffff;\n};\n// 0xf9 : LD SP, IX\ndd_instructions[0xf9] = function()\n{\n sp = ix;\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// These tables contain the number of T cycles used for each instruction.\n/// In a few special cases, such as conditional control flow instructions,\n/// additional cycles might be added to these values.\n/// The total number of cycles is the return value of run_instruction().\n///////////////////////////////////////////////////////////////////////////////\nlet cycle_counts = [\n 4, 10, 7, 6, 4, 4, 7, 4, 4, 11, 7, 6, 4, 4, 7, 4,\n 8, 10, 7, 6, 4, 4, 7, 4, 12, 11, 7, 6, 4, 4, 7, 4,\n 7, 10, 16, 6, 4, 4, 7, 4, 7, 11, 16, 6, 4, 4, 7, 4,\n 7, 10, 13, 6, 11, 11, 10, 4, 7, 11, 13, 6, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 7, 7, 7, 7, 7, 7, 4, 7, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 5, 10, 10, 10, 10, 11, 7, 11, 5, 10, 10, 0, 10, 17, 7, 11,\n 5, 10, 10, 11, 10, 11, 7, 11, 5, 4, 10, 11, 10, 0, 7, 11,\n 5, 10, 10, 19, 10, 11, 7, 11, 5, 4, 10, 4, 10, 0, 7, 11,\n 5, 10, 10, 4, 10, 11, 7, 11, 5, 6, 10, 4, 10, 0, 7, 11\n];\n\nlet cycle_counts_ed = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 12, 12, 15, 20, 8, 14, 8, 9, 12, 12, 15, 20, 8, 14, 8, 9,\n 12, 12, 15, 20, 8, 14, 8, 9, 12, 12, 15, 20, 8, 14, 8, 9,\n 12, 12, 15, 20, 8, 14, 8, 18, 12, 12, 15, 20, 8, 14, 8, 18,\n 12, 12, 15, 20, 8, 14, 8, 0, 12, 12, 15, 20, 8, 14, 8, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0,\n 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\n];\n\nlet cycle_counts_cb = [\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8\n];\n\nlet cycle_counts_dd = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 14, 20, 10, 8, 8, 11, 0, 0, 15, 20, 10, 8, 8, 11, 0,\n 0, 0, 0, 0, 23, 23, 19, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 8, 8, 8, 8, 8, 8, 19, 8, 8, 8, 8, 8, 8, 8, 19, 8,\n 19, 19, 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 14, 0, 23, 0, 15, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0\n];\n\n // There's tons of stuff in this object,\n // but only these three functions are the public API.\n this.saveState = getState;\n this.loadState = setState;\n this.reset = reset;\n this.advanceInsn = run_instruction;\n this.interrupt = interrupt;\n this.getPC = ():number => { return pc; }\n this.getSP = ():number => { return sp; }\n this.getHalted = ():boolean => { return halted; }\n}\n\nexport interface Z80State {\nAF : number;\nBC : number;\nDE : number;\nHL : number;\nAF_ : number;\nBC_ : number;\nDE_ : number;\nHL_ : number;\nIX : number;\nIY : number;\nSP : number;\nPC : number;\nIR : number;\niff1 : number;\niff2 : number;\nim : number;\nhalted : boolean;\ndo_delayed_di : boolean;\ndo_delayed_ei : boolean;\ncycle_counter : number;\n}\n\nexport class Z80 implements CPU, InstructionBased, IOBusConnected, SavesState, Interruptable {\n\n cpu;\n interruptType;\n memBus : Bus;\n ioBus : Bus;\n retryInterrupts : boolean = false;\n retryData : number = -1;\n \n private buildCPU() {\n if (this.memBus && this.ioBus) {\n this.cpu = new FastZ80({\n mem_read: this.memBus.read.bind(this.memBus),\n mem_write: this.memBus.write.bind(this.memBus),\n io_read: this.ioBus.read.bind(this.ioBus),\n io_write: this.ioBus.write.bind(this.ioBus),\n });\n }\n }\n connectMemoryBus(bus:Bus) {\n this.memBus = bus;\n this.buildCPU();\n }\n connectIOBus(bus:Bus) {\n this.ioBus = bus;\n this.buildCPU();\n }\n advanceInsn() {\n if (this.retryInterrupts && this.retryData >= 0 && this.cpu.interrupt(false, this.retryData)) {\n this.retryData = -1;\n }\n return this.cpu.advanceInsn();\n }\n reset() {\n this.cpu.reset();\n }\n interrupt(data:number) {\n if (!this.cpu.interrupt(false, data) && this.retryInterrupts) {\n this.retryData = data;\n }\n }\n NMI() {\n this.cpu.interrupt(true, 0);\n }\n getSP() {\n return this.cpu.getSP();\n }\n getPC() {\n return this.cpu.getPC();\n }\n isHalted() {\n return this.cpu.getHalted();\n }\n saveState() {\n return this.cpu.saveState();\n }\n loadState(s) {\n this.cpu.loadState(s);\n }\n isStable() { return true; }\n // TODO: metadata\n // TODO: disassembler\n}\n", "\nimport { SampledAudioSink } from \"./devices\";\n\n// from TSS\ndeclare var MasterChannel, AudioLooper, PsgDeviceChannel;\n\nexport class MasterAudio {\n master = new MasterChannel();\n looper;\n start() {\n if (!this.looper) {\n this.looper = new AudioLooper(512);\n this.looper.setChannel(this.master);\n this.looper.activate();\n }\n }\n stop() {\n if (this.looper) {\n this.looper.setChannel(null);\n this.looper = null;\n }\n }\n}\n\nexport class AY38910_Audio {\n master : MasterAudio;\n psg = new PsgDeviceChannel();\n curreg = 0;\n\n constructor(master : MasterAudio) {\n this.master = master;\n this.psg.setMode(PsgDeviceChannel.MODE_SIGNED);\n this.psg.setDevice(PsgDeviceChannel.DEVICE_AY_3_8910);\n master.master.addChannel(this.psg);\n }\n\n reset() {\n for (var i=15; i>=0; i--) {\n this.selectRegister(i);\n this.setData(0);\n }\n }\n selectRegister(val : number) {\n this.curreg = val & 0xf;\n }\n setData(val : number) {\n this.psg.writeRegisterAY(this.curreg, val & 0xff);\n }\n readData() {\n return this.psg.readRegister(this.curreg);\n }\n currentRegister() { return this.curreg; }\n}\n\nexport class SN76489_Audio {\n master : MasterAudio;\n psg = new PsgDeviceChannel();\n\n constructor(master : MasterAudio) {\n this.master = master;\n this.psg.setMode(PsgDeviceChannel.MODE_SIGNED);\n this.psg.setDevice(PsgDeviceChannel.DEVICE_SN76489);\n master.master.addChannel(this.psg);\n }\n reset() {\n // TODO\n }\n setData(val : number) {\n this.psg.writeRegisterSN(0, val & 0xff);\n }\n}\n\n// https://en.wikipedia.org/wiki/POKEY\n// https://user.xmission.com/~trevin/atari/pokey_regs.html\n// http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm\n\nexport function newPOKEYAudio(count:number) {\n var audio = new MasterAudio();\n for (var i=1; i<=count; i++) {\n var pokey = new POKEYDeviceChannel();\n audio['pokey'+i] = pokey; // TODO: cheezy\n audio.master.addChannel(pokey);\n }\n return audio;\n}\n\nfunction combinePolys(a, b) {\n var arr = new Uint8Array(a.length * b.length);\n var n = 0;\n for (var i=0; i 0.5 ? 1 : 0;\n }\n var bit17_5 = combinePolys(bit17, bit5);\n var bit5_4 = combinePolys(bit5, bit4);\n var wavetones = [\n bit17_5, bit5, bit5_4, bit5,\n bit17, bit2, bit4, bit2\n ];\n // TIA\n var div2 = divideBy(2);\n var div6 = divideBy(6);\n var div31 = divideBy(31);\n var div93 = divideBy(93);\n var bit15_4 = combinePolys(bit15, bit4);\n var bit5_2 = combinePolys(bit5, div2);\n var bit5_6 = combinePolys(bit5, div6);\n var tiawavetones = [\n bit1, bit4, bit15_4, bit5_4,\n div2, div2, div31, bit5_2,\n bit9, bit5, div31, bit1,\n div6, div6, div93, bit5_6\n ];\n \n // registers\n var regs = new Uint8Array(16);\n var counters = new Float32Array(4);\n var deltas = new Float32Array(4);\n var volume = new Float32Array(4);\n var audc = new Uint8Array(4);\n var waveforms = [bit1, bit1, bit1, bit1];\n var buffer;\n var sampleRate;\n var clock, baseDelta;\n var dirty = true;\n\n //\n\n this.setBufferLength = function (length) {\n buffer = new Int32Array(length);\n };\n\n this.getBuffer = function () {\n return buffer;\n };\n\n this.setSampleRate = function (rate) {\n sampleRate = rate;\n baseDelta = FREQ_17_EXACT / rate;\n };\n\n function updateValues(addr) {\n var ctrl = regs[8];\n var base = (ctrl & CLOCK_15) ? DIV_15 : DIV_64;\n var div;\n var i = addr & 4;\n var j = i>>1;\n var k = i>>2;\n if (ctrl & (CH1_CH2>>k)) {\n if (ctrl & (CH1_179>>k))\n div = regs[i+2] * 256 + regs[i+0] + 7;\n else\n div = (regs[i+2] * 256 + regs[i+0] + 1) * base;\n deltas[j+1] = baseDelta / div;\n deltas[j+0] = 0;\n } else {\n if (ctrl & (CH1_179>>k)) {\n div = regs[i+0] + 4;\n } else {\n div = (regs[i+0] + 1) * base;\n }\n deltas[j+0] = baseDelta / div;\n div = (regs[i+2] + 1) * base;\n deltas[j+1] = baseDelta / div;\n }\n //console.log(addr, ctrl.toString(16), div, deltas[j+0], deltas[j+1]);\n }\n\n this.setRegister = function(addr, value) {\n addr &= 0xf;\n value &= 0xff;\n if (regs[addr] != value) {\n regs[addr] = value;\n switch (addr) {\n case 0:\n case 2:\n case 4:\n case 6: // AUDF\n case 8: // ctrl\n dirty = true;\n break;\n case 1:\n case 3:\n case 5:\n case 7: // AUDC\n volume[addr>>1] = value & 0xf;\n waveforms[addr>>1] = wavetones[value>>5];\n break;\n }\n }\n }\n\n this.getRegister = function(addr) {\n addr &= 0xf;\n return regs[addr];\n }\n \n this.setTIARegister = function(addr, value) {\n switch (addr) {\n case 0x17:\n case 0x18:\n regs[(addr&1)*4] = value & 0x1f;\n dirty = true;\n break;\n case 0x15:\n case 0x16:\n waveforms[(addr&1)*2] = tiawavetones[value & 0xf];\n break;\n case 0x19:\n case 0x1a:\n volume[(addr&1)*2] = value & 0xf;\n break;\n }\n }\n\n this.generate = function (length) {\n if (dirty) {\n updateValues(0);\n updateValues(4);\n dirty = false;\n }\n for (var s=0; s 0 && d < 1 && v > 0) {\n var wav = waveforms[i];\n var cnt = counters[i] += d;\n if (cnt > wav.length) {\n cnt = counters[i] = cnt - Math.floor(cnt / wav.length) * wav.length;\n }\n var on = wav[Math.floor(cnt)];\n if (on) {\n sample += v;\n }\n }\n }\n sample *= 64;\n buffer[s] = sample;\n buffer[s+1] = sample;\n }\n }\n}\n\n////// Worker sound\n\nexport var WorkerSoundChannel = function(worker) {\n var sampleRate;\n var output;\n var pending = [];\n var pendingLength = 0;\n\n worker.onmessage = function(e) {\n if (e && e.data && e.data.samples && output) {\n pending.push(e.data.samples);\n pendingLength += e.data.samples.length;\n }\n };\n\n this.setBufferLength = function (length) {\n output = new Int16Array(length);\n //worker.postMessage({bufferLength:length,numChannels:2});\n pendingLength = 0;\n };\n\n this.getBuffer = function () {\n return output;\n };\n\n this.setSampleRate = function (rate) {\n sampleRate = rate;\n worker.postMessage({sampleRate:rate});\n };\n\n this.generate = function (length) {\n if (pendingLength < length*3) {\n //console.log(length, pendingLength);\n output.fill(0);\n return; // TODO: send sync msg?\n }\n for (var i=0; i= buffer.length) {\n bufpos = 0;\n bufferlist[ifill] = buffer;\n var inext = (ifill + 1) % bufferlist.length;\n if (inext == idrain) {\n ifill = Math.floor(idrain + nbuffers/2) % bufferlist.length;\n //console.log('SampleAudio: skipped buffer', idrain, ifill); // TODO\n } else {\n ifill = inext;\n }\n buffer = bufferlist[ifill];\n }\n }\n\n this.feedSample = function(value, count) {\n accum += value * count;\n sfrac += sinc * count;\n if (sfrac >= 1) {\n accum /= sfrac;\n while (sfrac >= 1) {\n this.addSingleSample(accum * sinc);\n sfrac -= 1;\n }\n accum *= sfrac;\n }\n }\n \n}\n\n\nexport class SampledAudio {\n sa;\n constructor(sampleRate : number) {\n this.sa = new SampleAudio(sampleRate);\n }\n feedSample(value:number, count:number) {\n this.sa.feedSample(value, count);\n }\n start() {\n this.sa.start();\n }\n stop() {\n this.sa.stop();\n }\n}\n\ninterface TssChannel {\n setBufferLength(len : number) : void;\n setSampleRate(rate : number) : void;\n getBuffer() : number[];\n generate(numSamples : number) : void;\n}\n\nexport class TssChannelAdapter {\n channels : TssChannel[];\n audioGain = 1.0 / 8192;\n bufferLength : number;\n\n constructor(chans, oversample:number, sampleRate:number) {\n this.bufferLength = oversample * 2;\n this.channels = chans.generate ? [chans] : chans; // array or single channel\n this.channels.forEach((c) => {\n c.setBufferLength(this.bufferLength);\n c.setSampleRate(sampleRate);\n });\n }\n\n generate(sink:SampledAudioSink) {\n var l = this.bufferLength;\n var bufs = this.channels.map((ch) => ch.getBuffer());\n this.channels.forEach((ch) => {\n ch.generate(l);\n });\n for (let i=0; i total += buf[i]);\n sink.feedSample(total * this.audioGain, 1);\n };\n }\n}\n\n", "\nimport { Probeable, ProbeAll } from \"./devices\";\n\nexport enum ProbeFlags {\n CLOCKS\t = 0x00000000,\n EXECUTE\t = 0x01000000,\n INTERRUPT\t= 0x08000000,\n ILLEGAL\t = 0x09000000,\n SP_PUSH\t = 0x0a000000,\n SP_POP\t = 0x0b000000,\n HAS_VALUE = 0x10000000,\n MEM_READ\t= 0x12000000,\n MEM_WRITE\t= 0x13000000,\n IO_READ\t = 0x14000000,\n IO_WRITE\t= 0x15000000,\n VRAM_READ\t= 0x16000000,\n VRAM_WRITE= 0x17000000,\n DMA_READ = 0x18000000,\n DMA_WRITE = 0x19000000,\n WAIT = 0x1f000000,\n SCANLINE\t= 0x7e000000,\n FRAME\t\t = 0x7f000000,\n}\n\nclass ProbeFrame {\n data : Uint32Array;\n len : number;\n}\n\nexport class ProbeRecorder implements ProbeAll {\n\n m : Probeable; // machine to probe\n buf : Uint32Array; // buffer\n idx : number = 0; // index into buffer\n sl : number = 0; // scanline\n cur_sp = -1; // last stack pointer\n singleFrame : boolean = true; // clear between frames\n\n constructor(m:Probeable, buflen?:number) {\n this.m = m;\n this.reset(buflen || 0x100000);\n }\n start() {\n this.m.connectProbe(this);\n }\n stop() {\n this.m.connectProbe(null);\n }\n reset(newbuflen? : number) {\n if (newbuflen) this.buf = new Uint32Array(newbuflen);\n this.sl = 0;\n this.cur_sp = -1;\n this.clear();\n }\n clear() {\n this.idx = 0;\n }\n logData(a:number) {\n this.log(a);\n }\n log(a:number) {\n // TODO: coalesce READ and EXECUTE and PUSH/POP\n if (this.idx >= this.buf.length) return;\n this.buf[this.idx++] = a;\n }\n relog(a:number) {\n this.buf[this.idx-1] = a;\n }\n lastOp() {\n if (this.idx > 0)\n return this.buf[this.idx-1] & 0xff000000;\n else\n return -1;\n }\n lastAddr() {\n if (this.idx > 0)\n return this.buf[this.idx-1] & 0xffffff;\n else\n return -1;\n }\n addLogBuffer(src: Uint32Array) {\n if (this.idx + src.length > this.buf.length) {\n src = src.slice(0, this.buf.length - this.idx);\n }\n this.buf.set(src, this.idx);\n this.idx += src.length;\n}\n logClocks(clocks:number) {\n clocks |= 0;\n if (clocks > 0) {\n if (this.lastOp() == ProbeFlags.CLOCKS)\n this.relog((this.lastAddr() + clocks) | ProbeFlags.CLOCKS); // coalesce clocks\n else\n this.log(clocks | ProbeFlags.CLOCKS);\n }\n }\n logNewScanline() {\n this.log(ProbeFlags.SCANLINE);\n this.sl++;\n }\n logNewFrame() {\n this.log(ProbeFlags.FRAME);\n this.sl = 0;\n if (this.singleFrame) this.clear();\n }\n logExecute(address:number, SP:number) {\n // record stack pushes/pops (from last instruction)\n if (this.cur_sp !== SP) {\n if (SP < this.cur_sp) {\n this.log(ProbeFlags.SP_PUSH | SP);\n }\n if (SP > this.cur_sp) {\n this.log(ProbeFlags.SP_POP | SP);\n }\n this.cur_sp = SP;\n }\n this.log(address | ProbeFlags.EXECUTE);\n }\n logInterrupt(type:number) {\n this.log(type | ProbeFlags.INTERRUPT);\n }\n logValue(address:number, value:number, op:number) {\n this.log((address & 0xffff) | ((value & 0xff)<<16) | op);\n }\n logRead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.MEM_READ);\n }\n logWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.MEM_WRITE);\n }\n logIORead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.IO_READ);\n }\n logIOWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.IO_WRITE);\n }\n logVRAMRead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.VRAM_READ);\n }\n logVRAMWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.VRAM_WRITE);\n }\n logIllegal(address:number) {\n this.log(address | ProbeFlags.ILLEGAL);\n }\n logWait(address:number) {\n this.log(address | ProbeFlags.WAIT);\n }\n logDMARead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.DMA_READ);\n }\n logDMAWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.DMA_WRITE);\n }\n countEvents(op : number) : number {\n var count = 0;\n for (var i=0; i {\n saveState(): S;\n loadState(state: S): void;\n}\n\nexport interface Bus {\n read(a: number): number;\n write(a: number, v: number): void;\n readConst?(a: number): number;\n}\n\nexport interface Bus32 {\n read32(a: number): number;\n write32(a: number, v: number): void;\n readConst32?(a: number): number;\n}\n\nexport interface ClockBased {\n advanceClock(): void;\n}\n\nexport interface InstructionBased {\n advanceInsn(): number;\n}\n\nexport type TrapCondition = () => boolean;\n\nexport interface FrameBased {\n advanceFrame(trap: TrapCondition): number;\n}\n\nexport interface VideoSource {\n getVideoParams(): VideoParams;\n connectVideo(pixels: Uint32Array): void;\n}\n\nexport interface RasterFrameBased extends FrameBased, VideoSource {\n getRasterY(): number;\n getRasterX(): number;\n getRasterCanvasPosition?(): { x: number, y: number };\n}\n\nexport interface VideoParams {\n width: number;\n height: number;\n overscan?: boolean;\n rotate?: number;\n videoFrequency?: number; // default = 60\n aspect?: number;\n}\n\n// TODO: frame buffer optimization (apple2, etc)\n\nexport interface SampledAudioParams {\n sampleRate: number;\n stereo: boolean;\n}\n\nexport interface SampledAudioSink {\n feedSample(value: number, count: number): void;\n //sendAudioFrame(samples:Uint16Array) : void;\n}\n\nexport interface SampledAudioSource {\n getAudioParams(): SampledAudioParams;\n connectAudio(audio: SampledAudioSink): void;\n}\n\nexport interface AcceptsROM {\n loadROM(data: Uint8Array, title?: string, origin?: number): void;\n}\n\nexport interface AcceptsBIOS {\n loadBIOS(data: Uint8Array, title?: string): void;\n}\n\nexport interface Resettable {\n reset(): void;\n}\n\nexport interface MemoryBusConnected {\n connectMemoryBus(bus: Bus): void;\n}\n\nexport interface IOBusConnected {\n connectIOBus(bus: Bus): void;\n}\n\nexport interface CPU extends MemoryBusConnected, Resettable, SavesState {\n getPC(): number;\n getSP(): number;\n isStable(): boolean;\n}\n\nexport interface HasCPU extends Resettable {\n cpu: CPU;\n}\n\nexport interface Interruptable {\n interrupt(type: IT): void;\n}\n\nexport interface SavesInputState {\n loadControlsState(cs: CS): void;\n saveControlsState(): CS;\n}\n\nexport interface AcceptsKeyInput {\n setKeyInput(key: number, code: number, flags: number): void;\n}\n\nexport interface AcceptsPaddleInput {\n setPaddleInput(controller: number, value: number): void;\n setPaddleButton?(index: number, pressed: boolean): void;\n}\n\n// TODO: interface not yet used (setKeyInput() handles joystick)\nexport interface AcceptsJoyInput {\n setJoyInput(joy: number, bitmask: number): void;\n}\n\n// SERIAL I/O\n\nexport interface SerialEvent {\n op: 'read' | 'write';\n value: number;\n nbits: number;\n}\n\n// TODO: all these needed?\nexport interface SerialIOInterface {\n // from machine to platform\n clearToSend(): boolean;\n sendByte(b: number);\n // from platform to machine\n byteAvailable(): boolean;\n recvByte(): number;\n // implement these too\n reset(): void;\n advance(clocks: number): void;\n // refresh() : void;\n}\n\nexport interface HasSerialIO {\n connectSerialIO(serial: SerialIOInterface);\n serialOut?: SerialEvent[]; // outgoing event log\n serialIn?: SerialEvent[]; // incoming queue\n}\n\n/// PROFILER\n\nexport interface Probeable {\n connectProbe(probe: ProbeAll): void;\n}\n\nexport interface ProbeTime {\n logClocks(clocks: number);\n logNewScanline();\n logNewFrame();\n}\n\nexport interface ProbeCPU {\n logExecute(address: number, SP: number);\n logInterrupt(type: number);\n logIllegal(address: number);\n logWait(address: number);\n}\n\nexport interface ProbeBus {\n logRead(address: number, value: number);\n logWrite(address: number, value: number);\n logDMARead(address: number, value: number);\n logDMAWrite(address: number, value: number);\n}\n\nexport interface ProbeIO {\n logIORead(address: number, value: number);\n logIOWrite(address: number, value: number);\n}\n\nexport interface ProbeVRAM {\n logVRAMRead(address: number, value: number);\n logVRAMWrite(address: number, value: number);\n}\n\nexport interface ProbeAll extends ProbeTime, ProbeCPU, ProbeBus, ProbeIO, ProbeVRAM {\n logData(data: number); // entire 32 bits\n addLogBuffer(src: Uint32Array);\n}\n\nexport class NullProbe implements ProbeAll {\n logClocks() { }\n logNewScanline() { }\n logNewFrame() { }\n logExecute() { }\n logInterrupt() { }\n logRead() { }\n logWrite() { }\n logIORead() { }\n logIOWrite() { }\n logVRAMRead() { }\n logVRAMWrite() { }\n logIllegal() { }\n logWait() { }\n logDMARead() { }\n logDMAWrite() { }\n logData() { }\n addLogBuffer(src: Uint32Array) { }\n}\n\n/// CONVENIENCE\n\nexport interface BasicMachineControlsState {\n inputs: Uint8Array;\n}\n\nexport interface BasicMachineState extends BasicMachineControlsState {\n c: any; // TODO\n ram: Uint8Array;\n}\n\nexport abstract class BasicHeadlessMachine implements HasCPU, Bus, AcceptsROM, Probeable,\n SavesState, SavesInputState {\n\n abstract cpuFrequency: number;\n abstract defaultROMSize: number;\n\n abstract cpu: CPU;\n abstract ram: Uint8Array;\n\n rom: Uint8Array;\n inputs: Uint8Array = new Uint8Array(32);\n handler: (key, code, flags) => void; // keyboard handler\n\n nullProbe = new NullProbe();\n probe: ProbeAll = this.nullProbe;\n\n abstract read(a: number): number;\n abstract write(a: number, v: number): void;\n\n setKeyInput(key: number, code: number, flags: number): void {\n this.handler && this.handler(key, code, flags);\n }\n connectProbe(probe: ProbeAll): void {\n this.probe = probe || this.nullProbe;\n }\n reset() {\n this.cpu.reset();\n }\n loadROM(data: Uint8Array, title?: string, origin?: number): void {\n if (!this.rom) this.rom = new Uint8Array(this.defaultROMSize);\n if (data.length > this.rom.length)\n throw new Error(`ROM too big: ${data.length} > ${this.rom.length}`);\n this.rom.set(data);\n }\n loadState(state) {\n this.cpu.loadState(state.c);\n this.ram.set(state.ram);\n this.inputs.set(state.inputs);\n }\n saveState() {\n return {\n c: this.cpu.saveState(),\n ram: this.ram.slice(0),\n inputs: this.inputs.slice(0),\n };\n }\n loadControlsState(state) {\n this.inputs.set(state.inputs);\n }\n saveControlsState() {\n return {\n inputs: this.inputs.slice(0)\n };\n }\n advanceCPU() {\n var c = this.cpu as any;\n var n = 1;\n if (this.cpu.isStable()) { this.probe.logExecute(this.cpu.getPC(), this.cpu.getSP()); }\n if (c.advanceClock) { c.advanceClock(); }\n else if (c.advanceInsn) { n = c.advanceInsn(1); }\n this.probe.logClocks(n);\n return n;\n }\n probeMemoryBus(membus: Bus & Partial): Bus & Partial {\n return {\n read: (a) => {\n let val = membus.read(a);\n this.probe.logRead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logWrite(a, v);\n membus.write(a, v);\n },\n read32: (a) => {\n let val = membus.read32(a);\n this.probe.logRead(a, val);\n return val;\n },\n write32: (a, v) => {\n this.probe.logWrite(a, v);\n membus.write32(a, v);\n }\n };\n }\n connectCPUMemoryBus(membus: Bus): void {\n this.cpu.connectMemoryBus(this.probeMemoryBus(membus as Bus&Bus32));\n }\n probeIOBus(iobus: Bus): Bus {\n return {\n read: (a) => {\n let val = iobus.read(a);\n this.probe.logIORead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logIOWrite(a, v);\n iobus.write(a, v);\n },\n };\n }\n probeDMABus(iobus: Bus): Bus {\n return {\n read: (a) => {\n let val = iobus.read(a);\n this.probe.logDMARead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logDMAWrite(a, v);\n iobus.write(a, v);\n }\n };\n }\n connectCPUIOBus(iobus: Bus): void {\n this.cpu['connectIOBus'](this.probeIOBus(iobus));\n }\n}\n\nexport abstract class BasicMachine extends BasicHeadlessMachine implements SampledAudioSource {\n\n abstract canvasWidth: number;\n abstract numVisibleScanlines: number;\n abstract sampleRate: number;\n overscan: boolean = false;\n rotate: number = 0;\n aspectRatio: number;\n\n pixels: Uint32Array;\n audio: SampledAudioSink;\n\n scanline: number;\n\n getAudioParams(): SampledAudioParams {\n return { sampleRate: this.sampleRate, stereo: false };\n }\n connectAudio(audio: SampledAudioSink): void {\n this.audio = audio;\n }\n getVideoParams(): VideoParams {\n return {\n width: this.canvasWidth,\n height: this.numVisibleScanlines,\n aspect: this.aspectRatio,\n overscan: this.overscan,\n rotate: this.rotate\n };\n }\n connectVideo(pixels: Uint32Array): void {\n this.pixels = pixels;\n }\n}\n\nexport abstract class BasicScanlineMachine extends BasicMachine implements RasterFrameBased {\n\n abstract numTotalScanlines: number;\n abstract cpuCyclesPerLine: number;\n\n abstract startScanline(): void;\n abstract drawScanline(): void;\n\n frameCycles: number;\n\n advanceFrame(trap: TrapCondition): number {\n this.preFrame();\n var endLineClock = 0;\n var steps = 0;\n this.probe.logNewFrame();\n this.frameCycles = 0;\n for (var sl = 0; sl < this.numTotalScanlines; sl++) {\n endLineClock += this.cpuCyclesPerLine; // could be fractional\n this.scanline = sl;\n this.startScanline();\n while (this.frameCycles < endLineClock) {\n if (trap && trap()) {\n sl = 999;\n break;\n }\n this.frameCycles += this.advanceCPU();\n steps++;\n }\n this.drawScanline();\n this.probe.logNewScanline();\n this.probe.logClocks(Math.floor(this.frameCycles - endLineClock)); // remainder of prev. line\n }\n this.postFrame();\n return steps; // TODO: return steps, not clock? for recorder\n }\n preFrame() { }\n postFrame() { }\n getRasterY() { return this.scanline; }\n getRasterX() { return this.frameCycles % this.cpuCyclesPerLine; }\n}\n", "\nimport { hex } from \"../util\";\n\nconst Z80_OPS = [\"nop\",\"ld bc,xx\",\"ld (bc),a\",\"inc bc\",\"inc b\",\"dec b\",\"ld b,x\",\"rlca\",\"ex af,af'\",\"add hl,bc\",\"ld a,(bc)\",\"dec bc\",\"inc c\",\"dec c\",\"ld c,x\",\"rrca\",\"djnz x\",\"ld de,xx\",\"ld (de),a\",\"inc de\",\"inc d\",\"dec d\",\"ld d,x\",\"rla\",\"jr x\",\"add hl,de\",\"ld a,(de)\",\"dec de\",\"inc e\",\"dec e\",\"ld e,x\",\"rra\",\"jr nz,x\",\"ld hl,xx\",\"ld (xx),hl\",\"inc hl\",\"inc h\",\"dec h\",\"ld h,x\",\"daa\",\"jr z,x\",\"add hl,hl\",\"ld hl,(xx)\",\"dec hl\",\"inc l\",\"dec l\",\"ld l,x\",\"cpl\",\"jr nc,x\",\"ld sp,xx\",\"ld (xx),a\",\"inc sp\",\"inc (hl)\",\"dec (hl)\",\"ld (hl),x\",\"scf\",\"jr c,x\",\"add hl,sp\",\"ld a,(xx)\",\"dec sp\",\"inc a\",\"dec a\",\"ld a,x\",\"ccf\",\"ld b,b\",\"ld b,c\",\"ld b,d\",\"ld b,e\",\"ld b,h\",\"ld b,l\",\"ld b,(hl)\",\"ld b,a\",\"ld c,b\",\"ld c,c\",\"ld c,d\",\"ld c,e\",\"ld c,h\",\"ld c,l\",\"ld c,(hl)\",\"ld c,a\",\"ld d,b\",\"ld d,c\",\"ld d,d\",\"ld d,e\",\"ld d,h\",\"ld d,l\",\"ld d,(hl)\",\"ld d,a\",\"ld e,b\",\"ld e,c\",\"ld e,d\",\"ld e,e\",\"ld e,h\",\"ld e,l\",\"ld e,(hl)\",\"ld e,a\",\"ld h,b\",\"ld h,c\",\"ld h,d\",\"ld h,e\",\"ld h,h\",\"ld h,l\",\"ld h,(hl)\",\"ld h,a\",\"ld l,b\",\"ld l,c\",\"ld l,d\",\"ld l,e\",\"ld l,h\",\"ld l,l\",\"ld l,(hl)\",\"ld l,a\",\"ld (hl),b\",\"ld (hl),c\",\"ld (hl),d\",\"ld (hl),e\",\"ld (hl),h\",\"ld (hl),l\",\"halt\",\"ld (hl),a\",\"ld a,b\",\"ld a,c\",\"ld a,d\",\"ld a,e\",\"ld a,h\",\"ld a,l\",\"ld a,(hl)\",\"ld a,a\",\"add a,b\",\"add a,c\",\"add a,d\",\"add a,e\",\"add a,h\",\"add a,l\",\"add a,(hl)\",\"add a,a\",\"adc a,b\",\"adc a,c\",\"adc a,d\",\"adc a,e\",\"adc a,h\",\"adc a,l\",\"adc a,(hl)\",\"adc a,a\",\"sub b\",\"sub c\",\"sub d\",\"sub e\",\"sub h\",\"sub l\",\"sub (hl)\",\"sub a\",\"sbc a,b\",\"sbc a,c\",\"sbc a,d\",\"sbc a,e\",\"sbc a,h\",\"sbc a,l\",\"sbc a,(hl)\",\"sbc a,a\",\"and b\",\"and c\",\"and d\",\"and e\",\"and h\",\"and l\",\"and (hl)\",\"and a\",\"xor b\",\"xor c\",\"xor d\",\"xor e\",\"xor h\",\"xor l\",\"xor (hl)\",\"xor a\",\"or b\",\"or c\",\"or d\",\"or e\",\"or h\",\"or l\",\"or (hl)\",\"or a\",\"cp b\",\"cp c\",\"cp d\",\"cp e\",\"cp h\",\"cp l\",\"cp (hl)\",\"cp a\",\"ret nz\",\"pop bc\",\"jp nz,xx\",\"jp xx\",\"call nz,xx\",\"push bc\",\"add a,x\",\"rst 00h\",\"ret z\",\"ret\",\"jp z,xx\",\"xxBITxx\",\"call z,xx\",\"call xx\",\"adc a,x\",\"rst 08h\",\"ret nc\",\"pop de\",\"jp nc,xx\",\"out (x),a\",\"call nc,xx\",\"push de\",\"sub x\",\"rst 10h\",\"ret c\",\"exx\",\"jp c,xx\",\"in a,(x)\",\"call c,xx\",\"xxIXxx\",\"sbc a,x\",\"rst 18h\",\"ret po\",\"pop hl\",\"jp po,xx\",\"ex (sp),hl\",\"call po,xx\",\"push hl\",\"and x\",\"rst 20h\",\"ret pe\",\"jp (hl)\",\"jp pe,xx\",\"ex de,hl\",\"call pe,xx\",\"xx80xx\",\"xor x\",\"rst 28h\",\"ret p\",\"pop af\",\"jp p,xx\",\"di\",\"call p,xx\",\"push af\",\"or x\",\"rst 30h\",\"ret m\",\"ld sp,hl\",\"jp m,xx\",\"ei\",\"call m,xx\",\"xxIYxx\",\"cp x\",\"rst 38h\"];\nconst Z80_OPS_ED = [\"in b,(c)\",\"out (c),b\",\"sbc hl,bc\",\"ld (xx),bc\",\"neg\",\"retn\",\"im 0\",\"ld i,a\",\"in c,(c)\",\"out (c),c\",\"adc hl,bc\",\"ld bc,(xx)\",\"neg\",\"reti\",\"\",\"ld r,a\",\"in d,(c)\",\"out (c),d\",\"sbc hl,de\",\"ld (xx),de\",\"neg\",\"retn\",\"im 1\",\"ld a,i\",\"in e,(c)\",\"out (c),e\",\"adc hl,de\",\"ld de,(xx)\",\"neg\",\"retn\",\"im 2\",\"ld a,r\",\"in h,(c)\",\"out (c),h\",\"sbc hl,hl\",\"ld (xx),hl\",\"neg\",\"retn\",\"\",\"rrd\",\"in l,(c)\",\"out (c),l\",\"adc hl,hl\",\"ld hl,(xx)\",\"neg\",\"retn\",\"\",\"rld\",\"in f,(c)\",\"out (c),f\",\"sbc hl,sp\",\"ld (xx),sp\",\"neg\",\"retn\",\"\",\"\",\"in a,(c)\",\"out (c),a\",\"adc hl,sp\",\"ld sp,(xx)\",\"neg\",\"reti\",\"\",\"\",\"ldi\",\"cpi\",\"ini\",\"outi\",\"\",\"\",\"\",\"\",\"ldd\",\"cpd\",\"ind\",\"outd\",\"\",\"\",\"\",\"\",\"ldir\",\"cpir\",\"inir\",\"otir\",\"\",\"\",\"\",\"\",\"lddr\",\"cpdr\",\"indr\",\"otdr\",\"\",\"\",\"\",\"\"];\nconst Z80_OPS_CB = [\"rlc b\",\"rlc c\",\"rlc d\",\"rlc e\",\"rlc h\",\"rlc l\",\"rlc (hl)\",\"rlc a\",\"rrc b\",\"rrc c\",\"rrc d\",\"rrc e\",\"rrc h\",\"rrc l\",\"rrc (hl)\",\"rrc a\",\"rl b\",\"rl c\",\"rl d\",\"rl e\",\"rl h\",\"rl l\",\"rl (hl)\",\"rl a\",\"rr b\",\"rr c\",\"rr d\",\"rr e\",\"rr h\",\"rr l\",\"rr (hl)\",\"rr a\",\"sla b\",\"sla c\",\"sla d\",\"sla e\",\"sla h\",\"sla l\",\"sla (hl)\",\"sla a\",\"sra b\",\"sra c\",\"sra d\",\"sra e\",\"sra h\",\"sra l\",\"sra (hl)\",\"sra a\",\"sll b\",\"sll c\",\"sll d\",\"sll e\",\"sll h\",\"sll l\",\"sll (hl)\",\"sll a\",\"srl b\",\"srl c\",\"srl d\",\"srl e\",\"srl h\",\"srl l\",\"srl (hl)\",\"srl a\",\"bit 0,b\",\"bit 0,c\",\"bit 0,d\",\"bit 0,e\",\"bit 0,h\",\"bit 0,l\",\"bit 0,(hl)\",\"bit 0,a\",\"bit 1,b\",\"bit 1,c\",\"bit 1,d\",\"bit 1,e\",\"bit 1,h\",\"bit 1,l\",\"bit 1,(hl)\",\"bit 1,a\",\"bit 2,b\",\"bit 2,c\",\"bit 2,d\",\"bit 2,e\",\"bit 2,h\",\"bit 2,l\",\"bit 2,(hl)\",\"bit 2,a\",\"bit 3,b\",\"bit 3,c\",\"bit 3,d\",\"bit 3,e\",\"bit 3,h\",\"bit 3,l\",\"bit 3,(hl)\",\"bit 3,a\",\"bit 4,b\",\"bit 4,c\",\"bit 4,d\",\"bit 4,e\",\"bit 4,h\",\"bit 4,l\",\"bit 4,(hl)\",\"bit 4,a\",\"bit 5,b\",\"bit 5,c\",\"bit 5,d\",\"bit 5,e\",\"bit 5,h\",\"bit 5,l\",\"bit 5,(hl)\",\"bit 5,a\",\"bit 6,b\",\"bit 6,c\",\"bit 6,d\",\"bit 6,e\",\"bit 6,h\",\"bit 6,l\",\"bit 6,(hl)\",\"bit 6,a\",\"bit 7,b\",\"bit 7,c\",\"bit 7,d\",\"bit 7,e\",\"bit 7,h\",\"bit 7,l\",\"bit 7,(hl)\",\"bit 7,a\",\"res 0,b\",\"res 0,c\",\"res 0,d\",\"res 0,e\",\"res 0,h\",\"res 0,l\",\"res 0,(hl)\",\"res 0,a\",\"res 1,b\",\"res 1,c\",\"res 1,d\",\"res 1,e\",\"res 1,h\",\"res 1,l\",\"res 1,(hl)\",\"res 1,a\",\"res 2,b\",\"res 2,c\",\"res 2,d\",\"res 2,e\",\"res 2,h\",\"res 2,l\",\"res 2,(hl)\",\"res 2,a\",\"res 3,b\",\"res 3,c\",\"res 3,d\",\"res 3,e\",\"res 3,h\",\"res 3,l\",\"res 3,(hl)\",\"res 3,a\",\"res 4,b\",\"res 4,c\",\"res 4,d\",\"res 4,e\",\"res 4,h\",\"res 4,l\",\"res 4,(hl)\",\"res 4,a\",\"res 5,b\",\"res 5,c\",\"res 5,d\",\"res 5,e\",\"res 5,h\",\"res 5,l\",\"res 5,(hl)\",\"res 5,a\",\"res 6,b\",\"res 6,c\",\"res 6,d\",\"res 6,e\",\"res 6,h\",\"res 6,l\",\"res 6,(hl)\",\"res 6,a\",\"res 7,b\",\"res 7,c\",\"res 7,d\",\"res 7,e\",\"res 7,h\",\"res 7,l\",\"res 7,(hl)\",\"res 7,a\",\"set 0,b\",\"set 0,c\",\"set 0,d\",\"set 0,e\",\"set 0,h\",\"set 0,l\",\"set 0,(hl)\",\"set 0,a\",\"set 1,b\",\"set 1,c\",\"set 1,d\",\"set 1,e\",\"set 1,h\",\"set 1,l\",\"set 1,(hl)\",\"set 1,a\",\"set 2,b\",\"set 2,c\",\"set 2,d\",\"set 2,e\",\"set 2,h\",\"set 2,l\",\"set 2,(hl)\",\"set 2,a\",\"set 3,b\",\"set 3,c\",\"set 3,d\",\"set 3,e\",\"set 3,h\",\"set 3,l\",\"set 3,(hl)\",\"set 3,a\",\"set 4,b\",\"set 4,c\",\"set 4,d\",\"set 4,e\",\"set 4,h\",\"set 4,l\",\"set 4,(hl)\",\"set 4,a\",\"set 5,b\",\"set 5,c\",\"set 5,d\",\"set 5,e\",\"set 5,h\",\"set 5,l\",\"set 5,(hl)\",\"set 5,a\",\"set 6,b\",\"set 6,c\",\"set 6,d\",\"set 6,e\",\"set 6,h\",\"set 6,l\",\"set 6,(hl)\",\"set 6,a\",\"set 7,b\",\"set 7,c\",\"set 7,d\",\"set 7,e\",\"set 7,h\",\"set 7,l\",\"set 7,(hl)\",\"set 7,a\"];\n\nexport function disassembleZ80(pc:number, b0:number, b1:number, b2:number, b3:number) : {line:string, nbytes:number, isaddr:boolean} {\n\n var op,n,am;\n var bytes = [b0,b1,b2,b3];\n var isaddr = false;\n n=1;\n switch (b0) {\n case 0xcb:\n am = Z80_OPS_CB[b1];\n n++;\n break;\n case 0xed:\n if (b1 >= 0x40 && b1 <= 0x7f) am = Z80_OPS_ED[b1 - 0x40];\n if (b1 >= 0xa0 && b1 <= 0xbf) am = Z80_OPS_ED[b1 - 0xa0 + 0x40];\n n++;\n break;\n case 0xdd:\n case 0xfd:\n var ireg = (b0 == 0xdd) ? 'ix' : 'iy';\n if (b1 == 0xcb) {\n // swap the 3rd and 4th bytes [$dd $cb displacement opcode]\n am = Z80_OPS_CB[b3];\n bytes[2] = b3;\n bytes[3] = b2;\n n++;\n } else {\n am = Z80_OPS[b1];\n }\n am = am.replace(/[(]hl[)]/, '('+ireg+'+x)');\n am = am.replace(/\\bhl\\b/, ireg);\n n++;\n break;\n default:\n am = Z80_OPS[b0];\n break;\n }\n if (!am || !am.length) am = \"??\";\n if (/\\bxx\\b/.test(am)) {\n am = am.replace(/\\bxx\\b/,'$'+hex(bytes[n]+(bytes[n+1]<<8), 4));\n n += 2;\n isaddr = true;\n } else if (/\\bx\\b/.test(am)) {\n if (am.startsWith('j')) {\n var offset = (b1 < 0x80) ? (pc+2+b1) : (pc+2-(256-b1));\n offset &= 0xffff;\n am = am.replace(/\\bx\\b/,'$'+hex(offset, 4));\n isaddr = true;\n } else {\n am = am.replace(/\\bx\\b/,'$'+hex(bytes[n], 2));\n }\n n += 1;\n }\n return {line:am.toUpperCase(), nbytes:n, isaddr:isaddr};\n};\n", "\"use strict\";\n/*\nThe MIT License (MIT)\nCopyright (c) 2014 Martin Maly, http://retrocip.cz, http://www.uelectronics.info,\ntwitter: @uelectronics\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nexport function CPU6809() {\n\nvar ticks;\nvar rA,rB,rX,rY,rU,rS,PC,CC,DP,\nF_CARRY =1,\nF_OVERFLOW =2,\nF_ZERO =4,\nF_NEGATIVE =8,\nF_IRQMASK =16,\nF_HALFCARRY =32,\nF_FIRQMASK =64,\nF_ENTIRE =128,\n\nvecRESET = 0xFFFE,\nvecNMI = 0xFFFC,\nvecSWI = 0xFFFA,\nvecIRQ = 0xFFF8,\nvecFIRQ = 0xFFF6,\nvecSWI2 = 0xFFF4,\nvecSWI3 = 0xFFF2,\n\nT=0;\n\nvar IRQs;\n\nvar byteTo, byteAt;\n\nvar cycles = [\n 6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6, /* 00-0F */\n 0,0,2,4,0,0,5,9,0,2,3,0,3,2,8,6, /* 10-1F */\n 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, /* 20-2F */\n 4,4,4,4,5,5,5,5,0,5,3,6,9,11,0,19, /* 30-3F */\n 2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2, /* 40-4F */\n 2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2, /* 50-5F */\n 6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6, /* 60-6F */\n 7,0,0,7,7,0,7,7,7,7,7,0,7,7,4,7, /* 70-7F */\n 2,2,2,4,2,2,2,0,2,2,2,2,4,7,3,0, /* 80-8F */\n 4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5, /* 90-9F */\n 4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5, /* A0-AF */\n 5,5,5,7,5,5,5,5,5,5,5,5,7,8,6,6, /* B0-BF */\n 2,2,2,4,2,2,2,0,2,2,2,2,3,0,3,0, /* C0-CF */\n 4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5, /* D0-DF */\n 4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5, /* E0-EF */\n 5,5,5,7,5,5,5,5,5,5,5,5,6,6,6,6]; /* F0-FF */\n\n/* Instruction timing for the two-byte opcodes */\nvar cycles2 = [\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 00-0F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 10-1F */\n 0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, /* 20-2F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20, /* 30-3F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40-4F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50-5F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 60-6F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70-7F */\n 0,0,0,5,0,0,0,0,0,0,0,0,5,0,4,0, /* 80-8F */\n 0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6, /* 90-9F */\n 0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6, /* A0-AF */\n 0,0,0,8,0,0,0,0,0,0,0,0,8,0,7,7, /* B0-BF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, /* C0-CF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6, /* D0-DF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6, /* E0-EF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7]; /* F0-FF */\n\n/* Negative and zero flags for quicker flag settings */\nvar flagsNZ = [\n 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 00-0F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 10-1F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 20-2F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 30-3F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40-4F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50-5F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 60-6F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70-7F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* 80-8F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* 90-9F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* A0-AF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* B0-BF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* C0-CF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* D0-DF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* E0-EF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]; /* F0-FF */\n\nvar setV8 = function(a,b,r) {CC |= (((a^b^r^(r>>1))&0x80)>>6);};\nvar setV16 = function(a,b,r) {CC |= (((a^b^r^(r>>1))&0x8000)>>14);};\nvar getD = function() {return (rA<<8)+rB;};\nvar setD = function(v) {rA = (v>>8)& 0xff;rB=v&0xff;};\nvar PUSHB = function(b) {\n byteTo(--rS, b & 0xff);\n};\nvar PUSHW = function(b) {\n byteTo(--rS, b & 0xff);\n byteTo(--rS, (b>>8) & 0xff);\n};\n\nvar PUSHBU = function(b) {\n byteTo(--rU, b & 0xff);\n};\nvar PUSHWU = function(b) {\n byteTo(--rU, b & 0xff);\n byteTo(--rU, (b>>8) & 0xff);\n};\nvar PULLB = function() {\n return byteAt(rS++);\n};\nvar PULLW = function() {\n return byteAt(rS++) * 256 + byteAt(rS++);\n};\n\nvar PULLBU = function() {\n return byteAt(rU++);\n};\nvar PULLWU = function() {\n return byteAt(rU++) * 256 + byteAt(rU++);\n};\n\nvar PSHS = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x80) {PUSHW(PC);i += 2;}\n if (ucTemp & 0x40) {PUSHW(rU);i += 2;}\n if (ucTemp & 0x20){PUSHW(rY);i += 2;}\n if (ucTemp & 0x10){PUSHW(rX);i += 2;}\n if (ucTemp & 0x8){PUSHB(DP); i++;}\n if (ucTemp & 0x4){PUSHB(rB); i++;}\n if (ucTemp & 0x2){PUSHB(rA); i++;}\n if (ucTemp & 0x1){PUSHB(CC); i++;}\n T+=i; //timing\n};\nvar PSHU = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x80) {PUSHWU(PC);i += 2;}\n if (ucTemp & 0x40) {PUSHWU(rS);i += 2;}\n if (ucTemp & 0x20){PUSHWU(rY);i += 2;}\n if (ucTemp & 0x10){PUSHWU(rX);i += 2;}\n if (ucTemp & 0x8){PUSHBU(DP); i++;}\n if (ucTemp & 0x4){PUSHBU(rB); i++;}\n if (ucTemp & 0x2){PUSHBU(rA); i++;}\n if (ucTemp & 0x1){PUSHBU(CC); i++;}\n T+=i; //timing\n};\nvar PULS = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x1){CC = PULLB(); i++;}\n if (ucTemp & 0x2){rA = PULLB(); i++;}\n if (ucTemp & 0x4){rB = PULLB(); i++;}\n if (ucTemp & 0x8){DP = PULLB(); i++;}\n if (ucTemp & 0x10){rX = PULLW();i += 2;}\n if (ucTemp & 0x20){rY = PULLW();i += 2;}\n if (ucTemp & 0x40) {rU = PULLW();i += 2;}\n if (ucTemp & 0x80) {PC = PULLW();i += 2;}\n T+=i; //timing\n};\nvar PULU = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x1){CC = PULLBU(); i++;}\n if (ucTemp & 0x2){rA = PULLBU(); i++;}\n if (ucTemp & 0x4){rB = PULLBU(); i++;}\n if (ucTemp & 0x8){DP = PULLBU(); i++;}\n if (ucTemp & 0x10){rX = PULLWU();i += 2;}\n if (ucTemp & 0x20){rY = PULLWU();i += 2;}\n if (ucTemp & 0x40) {rS = PULLWU();i += 2;}\n if (ucTemp & 0x80) {PC = PULLWU();i += 2;}\n T+=i; //timing\n};\n\n\nvar getPBR = function(ucPostByte) {\n switch(ucPostByte & 0xf) {\n case 0x00: /* D */\n return getD();\n case 0x1: /* X */\n return rX;\n case 0x2: /* Y */\n return rY;\n case 0x3: /* U */\n return rU;\n case 0x4: /* S */\n return rS;\n case 0x5: /* PC */\n return PC;\n case 0x8: /* A */\n return rA;\n case 0x9: /* B */\n return rB;\n case 0xA: /* CC */\n return CC;\n case 0xB: /* DP */\n return DP;\n default: /* illegal */\n return null;\n }\n};\nvar setPBR = function(ucPostByte, v) {\n switch(ucPostByte & 0xf) /* Get destination register */\n {\n case 0x00: /* D */\n setD(v);return;\n case 0x1: /* X */\n rX = v; return;\n case 0x2: /* Y */\n rY = v; return;\n case 0x3: /* U */\n rU = v; return;\n case 0x4: /* S */\n rS = v; return;\n case 0x5: /* PC */\n PC = v; return;\n case 0x8: /* A */\n rA = v; return;\n case 0x9: /* B */\n rB = v; return;\n case 0xA: /* CC */\n CC = v; return;\n case 0xB: /* DP */\n DP = v; return;\n default: /* illegal */\n return;\n }\n};\n\nvar TFREXG = function(ucPostByte, bExchange)\n{\n\n var ucTemp = ucPostByte & 0x88;\n if (ucTemp == 0x80 || ucTemp == 0x08)\n ucTemp = 0; /* PROBLEM! */\n\n if (bExchange)\n {\n ucTemp = getPBR(ucPostByte>>4);\n setPBR(ucPostByte>>4, getPBR(ucPostByte));\n setPBR(ucPostByte, ucTemp);\n }\n else /* Transfer */ {\n setPBR(ucPostByte, getPBR(ucPostByte>>4));\n }\n} ;\n\nvar signed = function(x) {\n return (x>127)?(x-256):x;\n};\nvar signed16 = function(x) {\n return (x>32767)?(x-65536):x;\n};\n\nvar fetch = function() {\n var v = byteAt(PC++);\n PC &= 0xffff;\n return v;\n};\nvar fetch16 = function() {\n var v1 = byteAt(PC++);\n PC &= 0xffff;\n var v2 = byteAt(PC++);\n PC &= 0xffff;\n return v1*256+v2;\n};\n\nvar ReadWord = function(addr) {\n var v1 = byteAt(addr++);\n addr &= 0xffff;\n var v2 = byteAt(addr++);\n addr &= 0xffff;\n return v1*256+v2;\n};\nvar WriteWord = function(addr,v) {\n byteTo(addr++,(v>>8)&0xff);\n addr &= 0xffff;\n byteTo(addr,v&0xff);\n};\n\nvar PostByte = function() {\n var pb = fetch();\n var preg;\n switch (pb & 0x60) {\n case 0:\n preg = rX; break;\n case 0x20:\n preg = rY; break;\n case 0x40:\n preg = rU; break;\n case 0x60:\n preg = rS; break;\n }\n\n var xchg = null;\n var addr = null;\n var sTemp;\n\n if (pb & 0x80) /* Complex stuff */\n {\n switch (pb & 0x0f)\n {\n case 0: /* EA = ,reg+ */\n addr = preg;\n xchg = preg + 1;\n T += 2;\n break;\n case 1: /* EA = ,reg++ */\n addr = preg;\n xchg = preg + 2;\n T += 3;\n break;\n case 2: /* EA = ,-reg */\n xchg = preg - 1;\n addr = xchg;\n T += 2;\n break;\n case 3: /* EA = ,--reg */\n xchg = preg - 2;\n addr = xchg;\n T += 3;\n break;\n case 4: /* EA = ,reg */\n addr = preg;\n break;\n case 5: /* EA = ,reg + B */\n //usAddr = *pReg + (signed short)(signed char)regs->ucRegB;\n addr = preg + signed(rB);\n T += 1;\n break;\n case 6: /* EA = ,reg + A */\n addr = preg + signed(rA);\n T += 1;\n break;\n case 7: /* illegal */\n addr = 0;\n break;\n case 8: /* EA = ,reg + 8-bit offset */\n addr = preg + signed(fetch());\n T += 1;\n break;\n case 9: /* EA = ,reg + 16-bit offset */\n addr = preg + signed16(fetch16());\n T += 4;\n break;\n case 0xA: /* illegal */\n addr = 0;\n break;\n case 0xB: /* EA = ,reg + D */\n T += 4;\n addr = preg + getD();\n break;\n case 0xC: /* EA = PC + 8-bit offset */\n sTemp = signed(fetch());\n addr = PC + sTemp;\n T += 1;\n break;\n case 0xD: /* EA = PC + 16-bit offset */\n sTemp = signed16(fetch16());\n addr = PC + sTemp;\n T += 5;\n break;\n case 0xe: /* Illegal */\n addr = 0;\n break;\n case 0xF: /* EA = [,address] */\n T += 5;\n addr = fetch16();\n break;\n } /* switch */\n\n addr &= 0xffff;\n\n if (pb & 0x10) /* Indirect addressing */\n {\n addr = byteAt(addr)*256+byteAt((addr+1) & 0xffff);\n T += 3;\n }\n }\n else /* Just a 5 bit signed offset + register */\n {\n var sByte = pb & 0x1f;\n if (sByte > 15) /* Two's complement 5-bit value */\n sByte -= 32;\n addr = preg + sByte;\n T += 1;\n }\n\n if (xchg!==null) {\n switch (pb & 0x60) {\n case 0:\n rX = xchg; break;\n case 0x20:\n rY = xchg; break;\n case 0x40:\n rU = xchg; break;\n case 0x60:\n rS = xchg; break;\n }\n\n }\n\n return addr & 0xffff; /* Return the effective address */\n};\n\nvar flagsNZ16 = function(word) {\n CC &= ~(F_ZERO | F_NEGATIVE);\n if (word===0) CC |= F_ZERO;\n if (word & 0x8000) CC |= F_NEGATIVE;\n};\n\n// ============= Operations\n\nvar oINC = function(b) {\n b++;\n b &= 0xff;\n CC &= ~(F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[b];\n if (b === 0 || b == 0x80) CC |= F_OVERFLOW;\n return b;\n};\nvar oDEC = function(b) {\n b--;\n b &= 0xff;\n CC &= ~(F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[b];\n if (b === 0x7f || b == 0xff) CC |= F_OVERFLOW;\n return b;\n};\nvar oSUB = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return temp&0xff;\n};\nvar oSUB16 = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return temp&0xffff;\n};\nvar oADD = function(b,v) {\n var temp = b+v;\n //temp &= 0xff;\n CC &= ~(F_HALFCARRY | F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n if ((temp ^ b ^ v)&0x10) CC |= F_HALFCARRY;\n return temp&0xff;\n};\nvar oADD16 = function(b,v) {\n var temp = b+v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return temp&0xffff;\n};\nvar oADC = function(b,v) {\n var temp = b+v+(CC & F_CARRY);\n //temp &= 0xff;\n CC &= ~(F_HALFCARRY | F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n if ((temp ^ b ^ v)&0x10) CC |= F_HALFCARRY;\n return temp&0xff;\n};\nvar oSBC = function(b,v) {\n var temp = b-v-(CC & F_CARRY);\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return temp&0xff;\n};\nvar oCMP = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return;\n};\nvar oCMP16 = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return;\n};\n\nvar oNEG = function(b) {\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if (b == 0x80)\n CC |= F_OVERFLOW;\n b = ((~b)&0xff) + 1;\n if (b === 0) CC |= F_ZERO;\n if (b & 0x80) CC |= F_NEGATIVE | F_CARRY;\n return b;\n};\n\nvar oLSR = function(b) {\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b >>= 1;\n if (b === 0) CC |= F_ZERO;\n return b & 0xff;\n};\nvar oASR = function(b) {\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b = (b & 0x80) | (b>>1);\n CC |= flagsNZ[b];\n return b;\n};\nvar oASL = function(b) {\n var temp = b;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE | F_OVERFLOW);\n if (b & 0x80) CC |= F_CARRY;\n b <<= 1;\n CC |= flagsNZ[b];\n if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\nvar oROL = function(b) {\n var temp = b;\n var oldc = CC&F_CARRY;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE | F_OVERFLOW);\n if (b & 0x80) CC |= F_CARRY;\n b = b<<1 | oldc;\n CC |= flagsNZ[b];\n if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\nvar oROR = function(b) {\n var oldc = CC&F_CARRY;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b = b>>1 | oldc<<7;\n CC |= flagsNZ[b];\n// if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\n\nvar oEOR = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b ^= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oOR = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b |= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oAND = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b &= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oCOM = function(b) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b ^= 0xff;\n CC |= flagsNZ[b];\n CC |= F_CARRY;\n return b;\n};\n\n//----common\nvar dpadd = function() {\n //direct page + 8bit index\n return DP*256 + fetch();\n};\n\nvar step = function() {\n var oldT = T;\n\n var addr = null;\n var pb = null;\n\n var oldPC = PC;\n var opcode = fetch();\n T+=cycles[opcode];\n switch (opcode) {\n case 0x00: //NEG DP\n addr = dpadd();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x03: //COM DP\n addr = dpadd();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x04: //LSR DP\n addr = dpadd();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x06: //ROR DP\n addr = dpadd();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x07: //ASR DP\n addr = dpadd();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x08: //ASL DP\n addr = dpadd();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x09: //ROL DP\n addr = dpadd();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x0A: //DEC DP\n addr = dpadd();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x0C: //INC DP\n addr = dpadd();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x0D: //TST DP\n addr = dpadd();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x0E: //JMP DP\n addr = dpadd();\n PC = addr;\n break;\n case 0x0F: //CLR DP\n addr = dpadd();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n case 0x12: //NOP\n break;\n case 0x13: //SYNC\n break;\n case 0x16: //LBRA relative\n addr = signed16(fetch16());\n PC += addr;\n break;\n case 0x17: //LBSR relative\n addr = signed16(fetch16());\n PUSHW(PC);\n PC += addr;\n break;\n case 0x19: //DAA\n var cf = 0;\n var nhi = rA & 0xf0, nlo = rA & 0x0f;\n if( nlo>0x09 || CC & 0x20 ) cf |= 0x06;\n if( nhi>0x80 && nlo>0x09 ) cf |= 0x60;\n if( nhi>0x90 || CC & 0x01 ) cf |= 0x60;\n addr = cf + rA;\n CC &= ~(F_CARRY | F_NEGATIVE | F_ZERO | F_OVERFLOW);\n if (addr & 0x100)\n CC |= F_CARRY;\n rA = addr & 0xff;\n CC |= flagsNZ[rA];\n break;\n case 0x1A: //ORCC\n CC |= fetch();\n break;\n case 0x1C: //ANDCC\n CC &= fetch();\n break;\n case 0x1D: //SEX\n rA = (rB & 0x80)?0xff:0;\n flagsNZ16(getD());\n CC &= ~F_OVERFLOW;\n break;\n case 0x1E: //EXG\n pb = fetch();\n TFREXG(pb,true);\n break;\n case 0x1F: //EXG\n pb = fetch();\n TFREXG(pb,false);\n break;\n\n case 0x20: //BRA\n addr = signed(fetch());\n PC += addr;\n break;\n case 0x21: //BRN\n addr = signed(fetch());\n break;\n case 0x22: //BHI\n addr = signed(fetch());\n if (!(CC&(F_CARRY | F_ZERO))) PC += addr;\n break;\n case 0x23: //BLS\n addr = signed(fetch());\n if (CC&(F_CARRY | F_ZERO)) PC += addr;\n break;\n case 0x24: //BCC\n addr = signed(fetch());\n if (!(CC&F_CARRY)) PC += addr;\n break;\n case 0x25: //BCS\n addr = signed(fetch());\n if (CC&F_CARRY) PC += addr;\n break;\n case 0x26: //BNE\n addr = signed(fetch());\n if (!(CC&F_ZERO)) PC += addr;\n break;\n case 0x27: //BEQ\n addr = signed(fetch());\n if (CC&F_ZERO) PC += addr;\n break;\n case 0x28: //BVC\n addr = signed(fetch());\n if (!(CC&F_OVERFLOW)) PC += addr;\n break;\n case 0x29: //BVS\n addr = signed(fetch());\n if (CC&F_OVERFLOW) PC += addr;\n break;\n case 0x2A: //BPL\n addr = signed(fetch());\n if (!(CC&F_NEGATIVE)) PC += addr;\n break;\n case 0x2B: //BMI\n addr = signed(fetch());\n if (CC&F_NEGATIVE) PC += addr;\n break;\n case 0x2C: //BGE\n addr = signed(fetch());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2))) PC += addr;\n break;\n case 0x2D: //BLT\n addr = signed(fetch());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2)) PC += addr;\n break;\n case 0x2E: //BGT\n addr = signed(fetch());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO))) PC += addr;\n break;\n case 0x2F: //BLE\n addr = signed(fetch());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO)) PC += addr;\n break;\n\n case 0x30: //LEAX\n rX = PostByte();\n if (rX===0) CC|=F_ZERO; else CC&=~F_ZERO;\n break;\n case 0x31: //LEAY\n rY = PostByte();\n if (rY===0) CC|=F_ZERO; else CC&=~F_ZERO;\n break;\n case 0x32: //LEAS\n rS = PostByte();\n break;\n case 0x33: //LEAU\n rU = PostByte();\n break;\n\n case 0x34: //PSHS\n PSHS(fetch());\n break;\n case 0x35: //PULS\n PULS(fetch());\n break;\n case 0x36: //PSHU\n PSHU(fetch());\n break;\n case 0x37: //PULU\n PULU(fetch());\n break;\n case 0x39: //RTS\n PC = PULLW();\n break;\n case 0x3A: //ABX\n rX += rB;\n break;\n case 0x3B: //RTI\n CC = PULLB();\n if (CC & F_ENTIRE) {\n T+=9;\n rA = PULLB();\n rB = PULLB();\n DP = PULLB();\n rX = PULLW();\n rY = PULLW();\n rU = PULLW();\n }\n PC = PULLW();\n break;\n case 0x3C: //CWAI **todo\n CC &= fetch();\n break;\n case 0x3D: //MUL\n addr = rA * rB;\n if (addr===0) CC|=F_ZERO; else CC&=~F_ZERO;\n if (addr&0x80) CC|=F_CARRY; else CC&=~F_CARRY;\n setD(addr);\n break;\n case 0x3F: //SWI\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI);\n break;\n\n case 0x40:\n rA = oNEG(rA);\n break;\n case 0x43:\n rA = oCOM(rA);\n break;\n case 0x44:\n rA = oLSR(rA);\n break;\n case 0x46:\n rA = oROR(rA);\n break;\n case 0x47:\n rA = oASR(rA);\n break;\n case 0x48:\n rA = oASL(rA);\n break;\n case 0x49:\n rA = oROL(rA);\n break;\n case 0x4A:\n rA = oDEC(rA);\n break;\n case 0x4C:\n rA = oINC(rA);\n break;\n case 0x4D:\n CC &= ~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x4F:\n rA = 0;\n CC &= ~(F_NEGATIVE|F_OVERFLOW|F_CARRY);\n CC |= F_ZERO;\n break;\n\n case 0x50:\n rB = oNEG(rB);\n break;\n case 0x53:\n rB = oCOM(rB);\n break;\n case 0x54:\n rB = oLSR(rB);\n break;\n case 0x56:\n rB = oROR(rB);\n break;\n case 0x57:\n rB = oASR(rB);\n break;\n case 0x58:\n rB = oASL(rB);\n break;\n case 0x59:\n rB = oROL(rB);\n break;\n case 0x5A:\n rB = oDEC(rB);\n break;\n case 0x5C:\n rB = oINC(rB);\n break;\n case 0x5D:\n CC &= ~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0x5F:\n rB = 0;\n CC &= ~(F_NEGATIVE|F_OVERFLOW|F_CARRY);\n CC |= F_ZERO;\n break;\n\n case 0x60: //NEG indexed\n addr = PostByte();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x63: //COM indexed\n addr = PostByte();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x64: //LSR indexed\n addr = PostByte();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x66: //ROR indexed\n addr = PostByte();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x67: //ASR indexed\n addr = PostByte();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x68: //ASL indexed\n addr = PostByte();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x69: //ROL indexed\n addr = PostByte();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x6A: //DEC indexed\n addr = PostByte();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x6C: //INC indexed\n addr = PostByte();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x6D: //TST indexed\n addr = PostByte();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x6E: //JMP indexed\n addr = PostByte();\n PC = addr;\n break;\n case 0x6F: //CLR indexed\n addr = PostByte();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n\n case 0x70: //NEG extended\n addr = fetch16();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x73: //COM extended\n addr = fetch16();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x74: //LSR extended\n addr = fetch16();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x76: //ROR extended\n addr = fetch16();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x77: //ASR extended\n addr = fetch16();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x78: //ASL extended\n addr = fetch16();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x79: //ROL extended\n addr = fetch16();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x7A: //DEC extended\n addr = fetch16();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x7C: //INC extended\n addr = fetch16();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x7D: //TST extended\n addr = fetch16();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x7E: //JMP extended\n addr = fetch16();\n PC = addr;\n break;\n case 0x7F: //CLR extended\n addr = fetch16();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n // regs A,X\n\n case 0x80: //SUBA imm\n rA = oSUB(rA, fetch());\n break;\n case 0x81: //CMPA imm\n oCMP(rA, fetch());\n break;\n case 0x82: //SBCA imm\n rA = oSBC(rA, fetch());\n break;\n case 0x83: //SUBD imm\n setD(oSUB16(getD(),fetch16()));\n break;\n case 0x84: //ANDA imm\n rA = oAND(rA, fetch());\n break;\n case 0x85: //BITA imm\n oAND(rA, fetch());\n break;\n case 0x86: //LDA imm\n rA = fetch();\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x88: //EORA imm\n rA = oEOR(rA, fetch());\n break;\n case 0x89: //ADCA imm\n rA = oADC(rA, fetch());\n break;\n case 0x8A: //ORA imm\n rA = oOR(rA, fetch());\n break;\n case 0x8B: //ADDA imm\n rA = oADD(rA, fetch());\n break;\n case 0x8C: //CMPX imm\n oCMP16(rX, fetch16());\n break;\n\n case 0x8D: //JSR imm\n addr = signed(fetch());\n PUSHW(PC);\n PC+=addr;\n break;\n case 0x8E: //LDX imm\n rX = fetch16();\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0x90: //SUBA direct\n addr = dpadd();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0x91: //CMPA direct\n addr = dpadd();\n oCMP(rA, byteAt(addr));\n break;\n case 0x92: //SBCA direct\n addr = dpadd();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0x93: //SUBD direct\n addr = dpadd();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0x94: //ANDA direct\n addr = dpadd();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0x95: //BITA direct\n addr = dpadd();\n oAND(rA, byteAt(addr));\n break;\n case 0x96: //LDA direct\n addr = dpadd();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x97: //STA direct\n addr = dpadd();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x98: //EORA direct\n addr = dpadd();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0x99: //ADCA direct\n addr = dpadd();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0x9A: //ORA direct\n addr = dpadd();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0x9B: //ADDA direct\n addr = dpadd();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0x9C: //CMPX direct\n addr = dpadd();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0x9D: //JSR direct\n addr = dpadd();\n PUSHW(PC);\n PC=addr;\n break;\n case 0x9E: //LDX direct\n addr = dpadd();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0x9F: //STX direct\n addr = dpadd();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xA0: //SUBA indexed\n addr = PostByte();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0xA1: //CMPA indexed\n addr = PostByte();\n oCMP(rA, byteAt(addr));\n break;\n case 0xA2: //SBCA indexed\n addr = PostByte();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0xA3: //SUBD indexed\n addr = PostByte();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0xA4: //ANDA indexed\n addr = PostByte();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0xA5: //BITA indexed\n addr = PostByte();\n oAND(rA, byteAt(addr));\n break;\n case 0xA6: //LDA indexed\n addr = PostByte();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xA7: //STA indexed\n addr = PostByte();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xA8: //EORA indexed\n addr = PostByte();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0xA9: //ADCA indexed\n addr = PostByte();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0xAA: //ORA indexed\n addr = PostByte();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0xAB: //ADDA indexed\n addr = PostByte();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0xAC: //CMPX indexed\n addr = PostByte();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0xAD: //JSR indexed\n addr = PostByte();\n PUSHW(PC);\n PC=addr;\n break;\n case 0xAE: //LDX indexed\n addr = PostByte();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xAF: //STX indexed\n addr = PostByte();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xB0: //SUBA extended\n addr = fetch16();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0xB1: //CMPA extended\n addr = fetch16();\n oCMP(rA, byteAt(addr));\n break;\n case 0xB2: //SBCA extended\n addr = fetch16();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0xB3: //SUBD extended\n addr = fetch16();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0xB4: //ANDA extended\n addr = fetch16();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0xB5: //BITA extended\n addr = fetch16();\n oAND(rA, byteAt(addr));\n break;\n case 0xB6: //LDA extended\n addr = fetch16();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xB7: //STA extended\n addr = fetch16();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xB8: //EORA extended\n addr = fetch16();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0xB9: //ADCA extended\n addr = fetch16();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0xBA: //ORA extended\n addr = fetch16();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0xBB: //ADDA extended\n addr = fetch16();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0xBC: //CMPX extended\n addr = fetch16();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0xBD: //JSR extended\n addr = fetch16();\n PUSHW(PC);\n PC=addr;\n break;\n case 0xBE: //LDX extended\n addr = fetch16();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xBF: //STX extended\n addr = fetch16();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n //Regs B, Y\n\n case 0xC0: //SUBB imm\n rB = oSUB(rB, fetch());\n break;\n case 0xC1: //CMPB imm\n oCMP(rB, fetch());\n break;\n case 0xC2: //SBCB imm\n rB = oSBC(rB, fetch());\n break;\n case 0xC3: //ADDD imm\n setD(oADD16(getD(),fetch16()));\n break;\n case 0xC4: //ANDB imm\n rB = oAND(rB, fetch());\n break;\n case 0xC5: //BITB imm\n oAND(rB, fetch());\n break;\n case 0xC6: //LDB imm\n rB = fetch();\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xC8: //EORB imm\n rB = oEOR(rB, fetch());\n break;\n case 0xC9: //ADCB imm\n rB = oADC(rB, fetch());\n break;\n case 0xCA: //ORB imm\n rB = oOR(rB, fetch());\n break;\n case 0xCB: //ADDB imm\n rB = oADD(rB, fetch());\n break;\n case 0xCC: //LDD imm\n addr = fetch16();\n setD(addr);\n flagsNZ16(addr);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xCE: //LDU imm\n rU = fetch16();\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xD0: //SUBB direct\n addr = dpadd();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xD1: //CMPB direct\n addr = dpadd();\n oCMP(rB, byteAt(addr));\n break;\n case 0xD2: //SBCB direct\n addr = dpadd();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xD3: //ADDD direct\n addr = dpadd();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xD4: //ANDB direct\n addr = dpadd();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xD5: //BITB direct\n addr = dpadd();\n oAND(rB, byteAt(addr));\n break;\n case 0xD6: //LDB direct\n addr = dpadd();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xD7: //STB direct\n addr = dpadd();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xD8: //EORB direct\n addr = dpadd();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xD9: //ADCB direct\n addr = dpadd();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xDA: //ORB direct\n addr = dpadd();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xDB: //ADDB direct\n addr = dpadd();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xDC: //LDD direct\n addr = dpadd();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xDD: //STD direct\n addr = dpadd();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xDE: //LDU direct\n addr = dpadd();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xDF: //STU direct\n addr = dpadd();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xE0: //SUBB indexed\n addr = PostByte();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xE1: //CMPB indexed\n addr = PostByte();\n oCMP(rB, byteAt(addr));\n break;\n case 0xE2: //SBCB indexed\n addr = PostByte();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xE3: //ADDD indexed\n addr = PostByte();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xE4: //ANDB indexed\n addr = PostByte();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xE5: //BITB indexed\n addr = PostByte();\n oAND(rB, byteAt(addr));\n break;\n case 0xE6: //LDB indexed\n addr = PostByte();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xE7: //STB indexed\n addr = PostByte();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xE8: //EORB indexed\n addr = PostByte();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xE9: //ADCB indexed\n addr = PostByte();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xEA: //ORB indexed\n addr = PostByte();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xEB: //ADDB indexed\n addr = PostByte();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xEC: //LDD indexed\n addr = PostByte();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xED: //STD indexed\n addr = PostByte();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xEE: //LDU indexed\n addr = PostByte();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xEF: //STU indexed\n addr = PostByte();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xF0: //SUBB extended\n addr = fetch16();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xF1: //CMPB extended\n addr = fetch16();\n oCMP(rB, byteAt(addr));\n break;\n case 0xF2: //SBCB extended\n addr = fetch16();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xF3: //ADDD extended\n addr = fetch16();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xF4: //ANDB extended\n addr = fetch16();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xF5: //BITB extended\n addr = fetch16();\n oAND(rB, byteAt(addr));\n break;\n case 0xF6: //LDB extended\n addr = fetch16();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xF7: //STB extended\n addr = fetch16();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xF8: //EORB extended\n addr = fetch16();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xF9: //ADCB extended\n addr = fetch16();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xFA: //ORB extended\n addr = fetch16();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xFB: //ADDB extended\n addr = fetch16();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xFC: //LDD extended\n addr = fetch16();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xFD: //STD extended\n addr = fetch16();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xFE: //LDU extended\n addr = fetch16();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xFF: //STU extended\n addr = fetch16();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n // page 1\n case 0x10: //page 1\n {\n opcode = fetch();\n T+=cycles2[opcode];\n switch(opcode) {\n case 0x21: //BRN\n addr = signed16(fetch16());\n break;\n case 0x22: //BHI\n addr = signed16(fetch16());\n if (!(CC&(F_CARRY | F_ZERO))) PC += addr;\n break;\n case 0x23: //BLS\n addr = signed16(fetch16());\n if (CC&(F_CARRY | F_ZERO)) PC += addr;\n break;\n case 0x24: //BCC\n addr = signed16(fetch16());\n if (!(CC&F_CARRY)) PC += addr;\n break;\n case 0x25: //BCS\n addr = signed16(fetch16());\n if (CC&F_CARRY) PC += addr;\n break;\n case 0x26: //BNE\n addr = signed16(fetch16());\n if (!(CC&F_ZERO)) PC += addr;\n break;\n case 0x27: //BEQ\n addr = signed16(fetch16());\n if (CC&F_ZERO) PC += addr;\n break;\n case 0x28: //BVC\n addr = signed16(fetch16());\n if (!(CC&F_OVERFLOW)) PC += addr;\n break;\n case 0x29: //BVS\n addr = signed16(fetch16());\n if (CC&F_OVERFLOW) PC += addr;\n break;\n case 0x2A: //BPL\n addr = signed16(fetch16());\n if (!(CC&F_NEGATIVE)) PC += addr;\n break;\n case 0x2B: //BMI\n addr = signed16(fetch16());\n if (CC&F_NEGATIVE) PC += addr;\n break;\n case 0x2C: //BGE\n addr = signed16(fetch16());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2))) PC += addr;\n break;\n case 0x2D: //BLT\n addr = signed16(fetch16());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2)) PC += addr;\n break;\n case 0x2E: //BGT\n addr = signed16(fetch16());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO))) PC += addr;\n break;\n case 0x2F: //BLE\n addr = signed16(fetch16());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO)) PC += addr;\n break;\n case 0x3f: //SWI2\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI2);\n break;\n case 0x83: //CMPD imm\n oCMP16(getD(),fetch16());\n break;\n case 0x8C: //CMPY imm\n oCMP16(rY,fetch16());\n break;\n case 0x8E: //LDY imm\n rY = fetch16();\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0x93: //CMPD direct\n addr = dpadd();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0x9C: //CMPY direct\n addr = dpadd();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0x9E: //LDY direct\n addr = dpadd();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0x9F: //STY direct\n addr = dpadd();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xA3: //CMPD indexed\n addr = PostByte();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0xAC: //CMPY indexed\n addr = PostByte();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0xAE: //LDY indexed\n addr = PostByte();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xAF: //STY indexed\n addr = PostByte();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xB3: //CMPD extended\n addr = fetch16();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0xBC: //CMPY extended\n addr = fetch16();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0xBE: //LDY extended\n addr = fetch16();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xBF: //STY extended\n addr = fetch16();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xCE: //LDS imm\n rS = fetch16();\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xDE: //LDS direct\n addr = dpadd();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xDF: //STS direct\n addr = dpadd();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xEE: //LDS indexed\n addr = PostByte();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xEF: //STS indexed\n addr = PostByte();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xFE: //LDS extended\n addr = fetch16();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xFF: //STS extended\n addr = fetch16();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n }\n }\n break;\n // page 2\n case 0x11: //page 2\n {\n opcode = fetch();\n T+=cycles2[opcode];\n switch(opcode) {\n case 0x3f: //SWI3\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI3);\n break;\n case 0x83: //CMPU imm\n oCMP16(rU, fetch16());\n break;\n case 0x8C: //CMPS imm\n oCMP16(rS, fetch16());\n break;\n case 0x93: //CMPU imm\n addr = dpadd();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0x9C: //CMPS imm\n addr = dpadd();\n oCMP16(rS, ReadWord(addr));\n break;\n case 0xA3: //CMPU imm\n addr = PostByte();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0xAC: //CMPS imm\n addr = PostByte();\n oCMP16(rS, ReadWord(addr));\n break;\n case 0xB3: //CMPU imm\n addr = fetch16();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0xBC: //CMPS imm\n addr = fetch16();\n oCMP16(rS, ReadWord(addr));\n break;\n\n }\n }\n break;\n\n\n }\n\n rA &= 0xff;\n rB &= 0xff;\n CC &= 0xff;\n DP &= 0xff;\n rX &= 0xffff;\n rY &= 0xffff;\n rU &= 0xffff;\n rS &= 0xffff;\n PC &= 0xffff;\n return T-oldT;\n\n};\n\nvar reset = function(){\n PC = ReadWord(vecRESET);\n DP = 0;\n CC |= F_FIRQMASK | F_IRQMASK;\n T=0;\n rA=rB=DP=rX=rY=rU=rS=0;\n};\n\n//---------- Disassembler\n\n/*\nILLEGAL 0\nDIRECT 1\nINHERENT 2\nBRANCH_REL_16 3\nIMMEDIAT_8 4\nBRANCH_REL_8 5\nINDEXED 6\nEXTENDED 7\nIMMEDIAT_16 8\n\nPSHS 10\nPSHU 11\n\nEXG, TFR 20\n*/\nvar ds = [\n[2, 1,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[2, 1,\"COM\"],\n[2, 1,\"LSR\"],\n[1, 0,\"???\"],\n[2, 1,\"ROR\"],\n[2, 1,\"ASR\"],\n[2, 1,\"LSL\"],\n[2, 1,\"ROL\"],\n[2, 1,\"DEC\"],\n[1, 0,\"???\"],\n[2, 1,\"INC\"],\n[2, 1,\"TST\"],\n[2, 1,\"JMP\"],\n[2, 1,\"CLR\"],\n[1, 0,\"Prefix\"],\n[1, 0,\"Prefix\"],\n[1, 2,\"NOP\"],\n[1, 2,\"SYNC\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[3, 3,\"LBRA\"],\n[3, 3,\"LBSR\"],\n[1, 0,\"???\"],\n[1, 2,\"DAA\"],\n[2, 4,\"ORCC\"],\n[1, 0,\"???\"],\n[2, 4,\"ANDCC\"],\n[1, 2,\"SEX\"],\n[2, 20,\"EXG\"],\n[2, 20,\"TFR\"],\n[2, 5,\"BRA\"],\n[2, 5,\"BRN\"],\n[2, 5,\"BHI\"],\n[2, 5,\"BLS\"],\n[2, 5,\"BCC\"],\n[2, 5,\"BCS\"],\n[2, 5,\"BNE\"],\n[2, 5,\"BEQ\"],\n[2, 5,\"BVC\"],\n[2, 5,\"BVS\"],\n[2, 5,\"BPL\"],\n[2, 5,\"BMI\"],\n[2, 5,\"BGE\"],\n[2, 5,\"BLT\"],\n[2, 5,\"BGT\"],\n[2, 5,\"BLE\"],\n[2, 6,\"LEAX\"],\n[2, 6,\"LEAY\"],\n[2, 6,\"LEAS\"],\n[2, 6,\"LEAU\"],\n[2, 10,\"PSHS\"],\n[2, 10,\"PULS\"],\n[2, 11,\"PSHU\"],\n[2, 11,\"PULU\"],\n[1, 0,\"???\"],\n[1, 2,\"RTS\"],\n[1, 2,\"ABX\"],\n[1, 2,\"RTI\"],\n[2, 2,\"CWAI\"],\n[1, 2,\"MUL\"],\n[1, 2,\"RESET\"],\n[1, 2,\"SWI1\"],\n[1, 2,\"NEGA\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[1, 2,\"COMA\"],\n[1, 2,\"LSRA\"],\n[1, 0,\"???\"],\n[1, 2,\"RORA\"],\n[1, 2,\"ASRA\"],\n[1, 2,\"ASLA\"],\n[1, 2,\"ROLA\"],\n[1, 2,\"DECA\"],\n[1, 0,\"???\"],\n[1, 2,\"INCA\"],\n[1, 2,\"TSTA\"],\n[1, 0,\"???\"],\n[1, 2,\"CLRA\"],\n[1, 2,\"NEGB\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[1, 2,\"COMB\"],\n[1, 2,\"LSRB\"],\n[1, 0,\"???\"],\n[1, 2,\"RORB\"],\n[1, 2,\"ASRB\"],\n[1, 2,\"ASLB\"],\n[1, 2,\"ROLB\"],\n[1, 2,\"DECB\"],\n[1, 0,\"???\"],\n[1, 2,\"INCB\"],\n[1, 2,\"TSTB\"],\n[1, 0,\"???\"],\n[1, 2,\"CLRB\"],\n[2, 6,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[2, 6,\"COM\"],\n[2, 6,\"LSR\"],\n[1, 0,\"???\"],\n[2, 6,\"ROR\"],\n[2, 6,\"ASR\"],\n[2, 6,\"LSL\"],\n[2, 6,\"ROL\"],\n[2, 6,\"DEC\"],\n[1, 0,\"???\"],\n[2, 6,\"INC\"],\n[2, 6,\"TST\"],\n[2, 6,\"JMP\"],\n[2, 6,\"CLR\"],\n[3, 7,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[3, 7,\"COM\"],\n[3, 7,\"LSR\"],\n[1, 0,\"???\"],\n[3, 7,\"ROR\"],\n[3, 7,\"ASR\"],\n[3, 7,\"LSL\"],\n[3, 7,\"ROL\"],\n[3, 7,\"DEC\"],\n[1, 0,\"???\"],\n[3, 7,\"INC\"],\n[3, 7,\"TST\"],\n[3, 7,\"JMP\"],\n[3, 7,\"CLR\"],\n[2, 4,\"SUBA\"],\n[2, 4,\"CMPA\"],\n[2, 4,\"SBCA\"],\n[3, 8,\"SUBD\"],\n[2, 4,\"ANDA\"],\n[2, 4,\"BITA\"],\n[2, 4,\"LDA\"],\n[1, 0,\"???\"],\n[2, 4,\"EORA\"],\n[2, 4,\"ADCA\"],\n[2, 4,\"ORA\"],\n[2, 4,\"ADDA\"],\n[3, 8,\"CMPX\"],\n[2, 5,\"BSR\"],\n[3, 8,\"LDX\"],\n[1, 0,\"???\"],\n[2, 1,\"SUBA\"],\n[2, 1,\"CMPA\"],\n[2, 1,\"SBCA\"],\n[2, 1,\"SUBd\"],\n[2, 1,\"ANDA\"],\n[2, 1,\"BITA\"],\n[2, 1,\"LDA\"],\n[2, 1,\"STA\"],\n[2, 1,\"EORA\"],\n[2, 1,\"ADCA\"],\n[2, 1,\"ORA\"],\n[2, 1,\"ADDA\"],\n[2, 1,\"CMPX\"],\n[2, 1,\"JSR\"],\n[2, 1,\"LDX\"],\n[2, 1,\"STX\"],\n[2, 6,\"SUBA\"],\n[2, 6,\"CMPA\"],\n[2, 6,\"SBCA\"],\n[2, 6,\"SUBD\"],\n[2, 6,\"ANDA\"],\n[2, 6,\"BITA\"],\n[2, 6,\"LDA\"],\n[2, 6,\"STA\"],\n[2, 6,\"EORA\"],\n[2, 6,\"ADCA\"],\n[2, 6,\"ORA\"],\n[2, 6,\"ADDA\"],\n[2, 6,\"CMPX\"],\n[2, 6,\"JSR\"],\n[2, 6,\"LDX\"],\n[2, 6,\"STX\"],\n[3, 7,\"SUBA\"],\n[3, 7,\"CMPA\"],\n[3, 7,\"SBCA\"],\n[3, 7,\"SUBD\"],\n[3, 7,\"ANDA\"],\n[3, 7,\"BITA\"],\n[3, 7,\"LDA\"],\n[3, 7,\"STA\"],\n[3, 7,\"EORA\"],\n[3, 7,\"ADCA\"],\n[3, 7,\"ORA\"],\n[3, 7,\"ADDA\"],\n[3, 7,\"CMPX\"],\n[3, 7,\"JSR\"],\n[3, 7,\"LDX\"],\n[3, 7,\"STX\"],\n[2, 4,\"SUBB\"],\n[2, 4,\"CMPB\"],\n[2, 4,\"SBCB\"],\n[3, 8,\"ADDD\"],\n[2, 4,\"ANDB\"],\n[2, 4,\"BITB\"],\n[2, 4,\"LDB\"],\n[1, 0,\"???\"],\n[2, 4,\"EORB\"],\n[2, 4,\"ADCB\"],\n[2, 4,\"ORB\"],\n[2, 4,\"ADDB\"],\n[3, 8,\"LDD\"],\n[1, 0,\"???\"],\n[3, 8,\"LDU\"],\n[1, 0,\"???\"],\n[2, 1,\"SUBB\"],\n[2, 1,\"CMPB\"],\n[2, 1,\"SBCB\"],\n[2, 1,\"ADDD\"],\n[2, 1,\"ANDB\"],\n[2, 1,\"BITB\"],\n[2, 1,\"LDB\"],\n[2, 1,\"STB\"],\n[2, 1,\"EORB\"],\n[2, 1,\"ADCB\"],\n[2, 1,\"ORB \"],\n[2, 1,\"ADDB\"],\n[2, 1,\"LDD \"],\n[2, 1,\"STD \"],\n[2, 1,\"LDU \"],\n[2, 1,\"STU \"],\n[2, 6,\"SUBB\"],\n[2, 6,\"CMPB\"],\n[2, 6,\"SBCB\"],\n[2, 6,\"ADDD\"],\n[2, 6,\"ANDB\"],\n[2, 6,\"BITB\"],\n[2, 6,\"LDB\"],\n[2, 6,\"STB\"],\n[2, 6,\"EORB\"],\n[2, 6,\"ADCB\"],\n[2, 6,\"ORB\"],\n[2, 6,\"ADDB\"],\n[2, 6,\"LDD\"],\n[2, 6,\"STD\"],\n[2, 6,\"LDU\"],\n[2, 6,\"STU\"],\n[3, 7,\"SUBB\"],\n[3, 7,\"CMPB\"],\n[3, 7,\"SBCB\"],\n[3, 7,\"ADDD\"],\n[3, 7,\"ANDB\"],\n[3, 7,\"BITB\"],\n[3, 7,\"LDB\"],\n[3, 7,\"STB\"],\n[3, 7,\"EORB\"],\n[3, 7,\"ADCB\"],\n[3, 7,\"ORB\"],\n[3, 7,\"ADDB\"],\n[3, 7,\"LDD\"],\n[3, 7,\"STD\"],\n[3, 7,\"LDU\"],\n[3, 7,\"STU\"]\n];\n\nvar ds11 = {\n0x3F: [2,2,\"SWI3\"],\n0x83: [4,8,\"CMPU\"],\n0x8C: [4,8,\"CMPS\"],\n0x93: [3,1,\"CMPU\"],\n0x9C: [3,1,\"CMPS\"],\n0xA3: [3,6,\"CMPU\"],\n0xAC: [3,6,\"CMPS\"],\n0xB3: [4,7,\"CMPU\"],\n0xBC: [4,7,\"CMPS\"]\n};\n\nvar ds10 = {\n0x21:[5,3,\"LBRN\"],\n0x22:[5,3,\"LBHI\"],\n0x23:[5,3,\"LBLS\"],\n0x24:[5,3,\"LBCC\"],\n0x25:[5,3,\"LBCS\"],\n0x26:[5,3,\"LBNE\"],\n0x27:[5,3,\"LBEQ\"],\n0x28:[5,3,\"LBVC\"],\n0x29:[5,3,\"LBVS\"],\n0x2a:[5,3,\"LBPL\"],\n0x2b:[5,3,\"LBMI\"],\n0x2c:[5,3,\"LBGE\"],\n0x2d:[5,3,\"LBLT\"],\n0x2e:[5,3,\"LBGT\"],\n0x2f:[5,3,\"LBLE\"],\n0x3F:[2,2,\"SWI2\"],\n0x83:[4,8,\"CMPD\"],\n0x8C:[4,8,\"CMPY\"],\n0x8E:[4,8,\"LDY\"],\n0x93:[3,1,\"CMPD\"],\n0x9C:[3,1,\"CMPY\"],\n0x9E:[3,1,\"LDY\"],\n0x9F:[3,1,\"STY\"],\n0xA3:[3,6,\"CMPD\"],\n0xAC:[3,6,\"CMPY\"],\n0xAE:[3,6,\"LDY\"],\n0xAF:[3,6,\"STY\"],\n0xB3:[4,7,\"CMPD\"],\n0xBC:[4,7,\"CMPY\"],\n0xBE:[4,7,\"LDY\"],\n0xBF:[4,7,\"STY\"],\n0xCE:[4,8,\"LDS\"],\n0xDE:[3,1,\"LDS\"],\n0xDF:[3,1,\"STS\"],\n0xEE:[3,6,\"LDS\"],\n0xEF:[3,6,\"STS\"],\n0xFE:[4,7,\"LDS\"],\n0xFF:[4,7,\"STS\"]\n};\n/*\nILLEGAL 0\nDIRECT 1\nINHERENT 2\nBRANCH_REL_16 3\nIMMEDIAT_8 4\nBRANCH_REL_8 5\nINDEXED 6\nEXTENDED 7\nIMMEDIAT_16 8\n*/\n\nvar disasm = function(i,a,b,c,d,pc) {\n var toHexN = function(n,d) {\n var s = n.toString(16);\n while (s.length >5];\n if (!(pb & 0x80)) {\n //direct5\n var disp = pb & 0x1f;\n if (disp>15) disp = disp-32;\n mnemo+=disp+','+ixr;\n break;\n }\n var ind = pb & 0x10;\n var mod = pb & 0x0f;\n var ofs8 = (b>127)?(b-256):b;\n var ofs16 = ((b*256+c)>32767)?((b*256+c)-65536):(b*256+c);\n if (!ind) {\n switch (mod) {\n case 0: mnemo += \",\"+ixr+'+'; break;\n case 1: mnemo += \",\"+ixr+'++'; break;\n case 2: mnemo += \",-\"+ixr; break;\n case 3: mnemo += \",--\"+ixr; break;\n case 4: mnemo += \",\"+ixr; break;\n case 5: mnemo += \"B,\"+ixr; break;\n case 6: mnemo += \"A,\"+ixr; break;\n case 7: mnemo += \"???\"; break;\n case 8: mnemo += ofs8+\",\"+ixr; bytes++; break;\n case 9: mnemo += ofs16+\",\"+ixr; bytes+=2; break;\n case 10: mnemo += \"???\"; break;\n case 11: mnemo += \"D,\"+ixr; break;\n case 12: mnemo += ofs8+\",PC\"; bytes++; break;\n case 13: mnemo += ofs16+\",PC\"; bytes+=2; break;\n case 14: mnemo += \"???\"; break;\n case 15: mnemo += \"$\"+toHex4((b*256+c)); bytes+=2; break;\n }\n } else {\n switch (mod) {\n case 0: mnemo += \"???\"; break;\n case 1: mnemo += \"[,\"+ixr+'++]'; break;\n case 2: mnemo += \"???\"; break;\n case 3: mnemo += \"[,--\"+ixr+']'; break;\n case 4: mnemo += \"[,\"+ixr+']'; break;\n case 5: mnemo += \"[B,\"+ixr+']'; break;\n case 6: mnemo += \"[A,\"+ixr+']'; break;\n case 7: mnemo += \"???\"; break;\n case 8: mnemo += \"[\"+ofs8+\",\"+ixr+']'; bytes++; break;\n case 9: mnemo += \"[\"+ofs16+\",\"+ixr+']'; bytes+=2; break;\n case 10: mnemo += \"???\"; break;\n case 11: mnemo += \"[D,\"+ixr+']'; break;\n case 12: mnemo += \"[\"+ofs8+\",PC]\"; bytes++; break;\n case 13: mnemo += \"[\"+ofs16+\",PC]\"; bytes+=2; break;\n case 14: mnemo += \"???\"; break;\n case 15: mnemo += \"[$\"+toHex4((b*256+c))+']'; bytes+=2; break;\n }\n }\n\n break;\n case 7: //extended\n mnemo+=\"\\t$\"+toHex4(a*256+b); break;\n case 8: //imm16\n mnemo+=\"\\t#$\"+toHex4(a*256+b); break;\n\n case 10: //pshs, puls\n rx = ['PC','U','Y','X','DP','B','A','CC'];\n ro = [];\n for (j=0;j<8;j++) {\n if ((a & 1)!==0) {ro.push(rx[7-j]);}\n a>>=1;\n }\n mnemo += '\\t'+ro.join(',');\n break;\n case 11: //pshs, puls\n rx = ['PC','S','Y','X','DP','B','A','CC'];\n ro = [];\n for (j=0;j<8;j++) {\n if ((a & 1)!==0) {ro.push(rx[7-j]);}\n a>>=1;\n }\n mnemo += '\\t'+ro.join(',');\n break;\n case 20: //TFR etc\n rx = ['D','X','Y','U','S','PC','?','?','A','B','CC','DP','?','?','?','?'];\n mnemo += '\\t'+rx[a>>4]+','+rx[a&0x0f];\n break;\n }\n\n return {line:mnemo,nbytes:bytes};\n };\n\n\n//---------- Exports\n\nreturn {\n steps: function(Ts){\n //T=0;\n while (Ts>0){\n Ts-=step();\n }\n },\n runFrame: function(Tt){\n while (T>i);\n if (n===0) {f+=fx[i].toLowerCase();} else {f+=fx[i];}\n }\n return f;\n },\n disasm: disasm,\n isStable: function() { return true; }\n};\n\n};\n", "\nimport { CPU, Bus, ClockBased, SavesState, Interruptable } from \"../devices\";\n\n// Copyright 2015 by Paulo Augusto Peccin. See license.txt distributed with this file.\n\nexport var _MOS6502 = function() {\n var self = this;\n\n this.powerOn = function() {\n this.reset();\n };\n\n this.powerOff = function() {\n };\n\n this.clockPulse = function() {\n if (!RDY) return; // TODO Should be ignored in the last cycle of the instruction\n T++;\n instruction[T]();\n };\n\n this.connectBus = function(aBus) {\n bus = aBus;\n };\n\n this.setRDY = function(boo) {\n RDY = boo;\n };\n\n this.isRDY = function() {\n return RDY;\n }\n\n this.reset = function() {\n I = 1;\n T = -1;\n instruction = [ fetchOpcodeAndDecodeInstruction ]; // Bootstrap instruction\n PC = bus.read(RESET_VECTOR) | (bus.read(RESET_VECTOR + 1) << 8);\n this.setRDY(true);\n };\n\n // Interfaces\n var bus : Bus;\n var RDY : boolean = false;\n\n // Registers\n var PC : number = 0;\n var SP : number = 0;\n var A : number = 0;\n var X : number = 0;\n var Y : number = 0;\n\n // Status Bits\n var N : number = 0;\n var V : number = 0;\n var D : number = 0;\n var I : number = 0;\n var Z : number = 0;\n var C : number = 0;\n\n // Internal decoding registers\n var T : number = -1;\n var opcode : number = -1;\n var instruction : (() => void)[];\n var data : number = 0;\n var AD : number = 0;\n var BA : number = 0;\n var BALCrossed : boolean = false;\n var IA : number = 0;\n var branchOffset : number = 0;\n var branchOffsetCrossAdjust : number = 0;\n\n // Vectors\n const NMI_VECTOR = 0xfffa;\n const RESET_VECTOR = 0xfffc;\n const IRQ_VECTOR = 0xfffe;\n\n // Index registers names\n const rX = 0;\n const rY = 1;\n\n // Status bits names\n const bN = 7;\n const bV = 6;\n // const bE = 5;\t// Not used\n // const bB = 4;\t// Not used\n // const bD = 3; // Not used\n // const bI = 2; // Not used\n const bZ = 1;\n const bC = 0;\n\n // Auxiliary variables\n // TODO\n //noinspection JSUnusedGlobalSymbols\n this.debug = false;\n //noinspection JSUnusedGlobalSymbols\n this.trace = false;\n\n\n // Internal operations\n\n var fetchOpcodeAndDecodeInstruction = function() {\n opcode = bus.read(PC);\n instruction = instructions[opcode];\n T = 0;\n\n // if (self.trace) self.breakpoint(\"TRACE\");\n // console.log(\"PC: \" + PC + \", op: \" + opcode + \": \" + opcodes[opcode]);\n\n PC++;\n };\n\n var fetchNextOpcode = fetchOpcodeAndDecodeInstruction;\n\n var fetchOpcodeAndDiscard = function() {\n bus.read(PC);\n };\n\n var fetchBranchOffset = function() {\n branchOffset = bus.read(PC);\n PC++;\n };\n\n var fetchADL = function() {\n AD = bus.read(PC);\n PC++;\n };\n\n var fetchADH = function() {\n AD |= bus.read(PC) << 8;\n PC++;\n };\n\n var fetchADLFromBA = function() {\n AD = bus.read(BA);\n };\n\n var fetchADHFromBA = function() {\n AD |= bus.read(BA) << 8;\n };\n\n var fetchBAL = function() {\n BA = bus.read(PC);\n PC++;\n };\n\n var fetchBAH = function() {\n BA |= bus.read(PC) << 8;\n PC++;\n };\n\n var fetchBALFromIA = function() {\n BA = bus.read(IA);\n };\n\n var fetchBAHFromIA = function() {\n BA |= bus.read(IA) << 8;\n };\n\n var addXtoBAL = function() {\n var low = (BA & 255) + X;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var addYtoBAL = function() {\n var low = (BA & 255) + Y;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var add1toBAL = function() {\n var low = (BA & 255) + 1;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var add1toBAHifBALCrossed = function() {\n if (BALCrossed)\n BA = (BA + 0x0100) & 0xffff;\n };\n\n var fetchIAL = function() {\n IA = bus.read(PC);\n PC++;\n };\n\n var fetchIAH = function() {\n IA |= bus.read(PC) << 8;\n PC++;\n };\n\n var add1toIAL = function() {\n var low = (IA & 255) + 1;\n IA = (IA & 0xff00) | (low & 255);\n };\n\n var fetchDataFromImmediate = function() {\n data = bus.read(PC);\n PC++;\n };\n\n var fetchDataFromAD = function() {\n data = bus.read(AD);\n };\n\n var fetchDataFromBA = function() {\n data = bus.read(BA);\n };\n\n var writeDataToAD = function() {\n bus.write(AD, data);\n };\n\n var writeDataToBA = function() {\n bus.write(BA, data);\n };\n\n var addBranchOffsetToPCL = function() {\n var oldLow = (PC & 0x00ff);\n var newLow = (oldLow + branchOffset) & 255;\n // Negative offset?\n if (branchOffset > 127)\n branchOffsetCrossAdjust = (newLow > oldLow) ? -0x0100 : 0;\n else\n branchOffsetCrossAdjust = (newLow < oldLow) ? 0x0100 : 0;\n PC = (PC & 0xff00) | newLow;\n };\n\n var adjustPCHForBranchOffsetCross = function() {\n PC = (PC + branchOffsetCrossAdjust) & 0xffff;\n };\n\n var setZ = function(val) {\n Z = (val === 0) ? 1 : 0;\n };\n\n var setN = function(val) {\n N = (val & 0x080) ? 1 : 0;\n };\n\n var setV = function(boo) {\n V = boo ? 1 : 0;\n };\n\n var setC = function(boo) {\n C = boo ? 1 : 0;\n };\n\n var popFromStack = function() {\n SP = (SP + 1) & 255;\n return bus.read(0x0100 + SP);\n };\n\n var peekFromStack = function() {\n return bus.read(0x0100 + SP);\n };\n\n var pushToStack = function(val) {\n bus.write(0x0100 + SP, val);\n SP = (SP - 1) & 255;\n };\n\n var getStatusBits = function() {\n return N << 7 | V << 6 | 0x30 // Always push with E (bit 5) and B (bit 4) ON\n | D << 3 | I << 2 | Z << 1 | C;\n };\n\n var setStatusBits = function(val) {\n N = val >>> 7; V = val >>> 6 & 1; // E and B flags actually do not exist as real flags, so ignore\n D = val >>> 3 & 1; I = val >>> 2 & 1; Z = val >>> 1 & 1; C = val & 1;\n };\n\n var illegalOpcode = function(op) {\n if (self.debug) self.breakpoint(\"Illegal Opcode: \" + op);\n };\n\n\n // Addressing routines\n\n var implied = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var immediateRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var zeroPageRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var absoluteRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var indirectXRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var absoluteIndexedRead = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function() {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n if (BALCrossed) {\n fetchDataFromBA();\n } else {\n operation();\n fetchNextOpcode();\n }\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n };\n\n var zeroPageIndexedRead = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addIndex();\n fetchDataFromBA();\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n };\n\n var indirectYRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n if(BALCrossed) {\n fetchDataFromBA();\n } else {\n operation();\n fetchNextOpcode();\n }\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var zeroPageWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var indirectXWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteIndexedWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function() {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var zeroPageIndexedWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addIndex();\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var indirectYWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n\n\n var zeroPageReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var zeroPageIndexedReadModifyWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function () {\n addIndex();\n fetchDataFromBA();\n },\n writeDataToBA,\n function () {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var absoluteIndexedReadModifyWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function () {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n fetchDataFromBA,\n writeDataToBA,\n function () {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var indirectXReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var indirectYReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n fetchDataFromBA,\n writeDataToBA,\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n\n\n // Instructions ========================================================================================\n\n // Complete instruction set\n var opcodes = new Array(256);\n var instructions = new Array(256);\n\n opcodes[0x00] = \"BRK\"; instructions[0x00] = BRK();\n opcodes[0x01] = \"ORA\"; instructions[0x01] = ORA(indirectXRead);\n opcodes[0x02] = \"uKIL\"; instructions[0x02] = uKIL();\n opcodes[0x03] = \"uSLO\"; instructions[0x03] = uSLO(indirectXReadModifyWrite);\n opcodes[0x04] = \"uNOP\"; instructions[0x04] = uNOP(zeroPageRead);\n opcodes[0x05] = \"ORA\"; instructions[0x05] = ORA(zeroPageRead);\n opcodes[0x06] = \"ASL\"; instructions[0x06] = ASL(zeroPageReadModifyWrite);\n opcodes[0x07] = \"uSLO\"; instructions[0x07] = uSLO(zeroPageReadModifyWrite);\n opcodes[0x08] = \"PHP\"; instructions[0x08] = PHP();\n opcodes[0x09] = \"ORA\"; instructions[0x09] = ORA(immediateRead);\n opcodes[0x0a] = \"ASL\"; instructions[0x0a] = ASL_ACC();\n opcodes[0x0b] = \"uANC\"; instructions[0x0b] = uANC(immediateRead);\n opcodes[0x0c] = \"uNOP\"; instructions[0x0c] = uNOP(absoluteRead);\n opcodes[0x0d] = \"ORA\"; instructions[0x0d] = ORA(absoluteRead);\n opcodes[0x0e] = \"ASL\"; instructions[0x0e] = ASL(absoluteReadModifyWrite);\n opcodes[0x0f] = \"uSLO\"; instructions[0x0f] = uSLO(absoluteReadModifyWrite);\n opcodes[0x10] = \"BPL\"; instructions[0x10] = Bxx(bN, 0); // BPL\n opcodes[0x11] = \"ORA\"; instructions[0x11] = ORA(indirectYRead);\n opcodes[0x12] = \"uKIL\"; instructions[0x12] = uKIL();\n opcodes[0x13] = \"uSLO\"; instructions[0x13] = uSLO(indirectYReadModifyWrite);\n opcodes[0x14] = \"uNOP\"; instructions[0x14] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x15] = \"ORA\"; instructions[0x15] = ORA(zeroPageIndexedRead(rX));\n opcodes[0x16] = \"ASL\"; instructions[0x16] = ASL(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x17] = \"uSLO\"; instructions[0x17] = uSLO(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x18] = \"CLC\"; instructions[0x18] = CLC();\n opcodes[0x19] = \"ORA\"; instructions[0x19] = ORA(absoluteIndexedRead(rY));\n opcodes[0x1a] = \"uNOP\"; instructions[0x1a] = uNOP(implied);\n opcodes[0x1b] = \"uSLO\"; instructions[0x1b] = uSLO(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x1c] = \"uNOP\"; instructions[0x1c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x1d] = \"ORA\"; instructions[0x1d] = ORA(absoluteIndexedRead(rX));\n opcodes[0x1e] = \"ASL\"; instructions[0x1e] = ASL(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x1f] = \"uSLO\"; instructions[0x1f] = uSLO(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x20] = \"JSR\"; instructions[0x20] = JSR();\n opcodes[0x21] = \"AND\"; instructions[0x21] = AND(indirectXRead);\n opcodes[0x22] = \"uKIL\"; instructions[0x22] = uKIL();\n opcodes[0x23] = \"uRLA\"; instructions[0x23] = uRLA(indirectXReadModifyWrite);\n opcodes[0x24] = \"BIT\"; instructions[0x24] = BIT(zeroPageRead);\n opcodes[0x25] = \"AND\"; instructions[0x25] = AND(zeroPageRead);\n opcodes[0x26] = \"ROL\"; instructions[0x26] = ROL(zeroPageReadModifyWrite);\n opcodes[0x27] = \"uRLA\"; instructions[0x27] = uRLA(zeroPageReadModifyWrite);\n opcodes[0x28] = \"PLP\"; instructions[0x28] = PLP();\n opcodes[0x29] = \"AND\"; instructions[0x29] = AND(immediateRead);\n opcodes[0x2a] = \"ROL\"; instructions[0x2a] = ROL_ACC();\n opcodes[0x2b] = \"uANC\"; instructions[0x2b] = uANC(immediateRead);\n opcodes[0x2c] = \"BIT\"; instructions[0x2c] = BIT(absoluteRead);\n opcodes[0x2d] = \"AND\"; instructions[0x2d] = AND(absoluteRead);\n opcodes[0x2e] = \"ROL\"; instructions[0x2e] = ROL(absoluteReadModifyWrite);\n opcodes[0x2f] = \"uRLA\"; instructions[0x2f] = uRLA(absoluteReadModifyWrite);\n opcodes[0x30] = \"BMI\"; instructions[0x30] = Bxx(bN, 1); // BMI\n opcodes[0x31] = \"AND\"; instructions[0x31] = AND(indirectYRead);\n opcodes[0x32] = \"uKIL\"; instructions[0x32] = uKIL();\n opcodes[0x33] = \"uRLA\"; instructions[0x33] = uRLA(indirectYReadModifyWrite);\n opcodes[0x34] = \"uNOP\"; instructions[0x34] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x35] = \"AND\"; instructions[0x35] = AND(zeroPageIndexedRead(rX));\n opcodes[0x36] = \"ROL\"; instructions[0x36] = ROL(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x37] = \"uRLA\"; instructions[0x37] = uRLA(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x38] = \"SEC\"; instructions[0x38] = SEC();\n opcodes[0x39] = \"AND\"; instructions[0x39] = AND(absoluteIndexedRead(rY));\n opcodes[0x3a] = \"uNOP\"; instructions[0x3a] = uNOP(implied);\n opcodes[0x3b] = \"uRLA\"; instructions[0x3b] = uRLA(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x3c] = \"uNOP\"; instructions[0x3c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x3d] = \"AND\"; instructions[0x3d] = AND(absoluteIndexedRead(rX));\n opcodes[0x3e] = \"ROL\"; instructions[0x3e] = ROL(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x3f] = \"uRLA\"; instructions[0x3f] = uRLA(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x40] = \"RTI\"; instructions[0x40] = RTI();\n opcodes[0x41] = \"EOR\"; instructions[0x41] = EOR(indirectXRead);\n opcodes[0x42] = \"uKIL\"; instructions[0x42] = uKIL();\n opcodes[0x43] = \"uSRE\"; instructions[0x43] = uSRE(indirectXReadModifyWrite);\n opcodes[0x44] = \"uNOP\"; instructions[0x44] = uNOP(zeroPageRead);\n opcodes[0x45] = \"EOR\"; instructions[0x45] = EOR(zeroPageRead);\n opcodes[0x46] = \"LSR\"; instructions[0x46] = LSR(zeroPageReadModifyWrite);\n opcodes[0x47] = \"uSRE\"; instructions[0x47] = uSRE(zeroPageReadModifyWrite);\n opcodes[0x48] = \"PHA\"; instructions[0x48] = PHA();\n opcodes[0x49] = \"EOR\"; instructions[0x49] = EOR(immediateRead);\n opcodes[0x4a] = \"LSR\"; instructions[0x4a] = LSR_ACC();\n opcodes[0x4b] = \"uASR\"; instructions[0x4b] = uASR(immediateRead);\n opcodes[0x4c] = \"JMP\"; instructions[0x4c] = JMP_ABS();\n opcodes[0x4d] = \"EOR\"; instructions[0x4d] = EOR(absoluteRead);\n opcodes[0x4e] = \"LSR\"; instructions[0x4e] = LSR(absoluteReadModifyWrite);\n opcodes[0x4f] = \"uSRE\"; instructions[0x4f] = uSRE(absoluteReadModifyWrite);\n opcodes[0x50] = \"BVC\"; instructions[0x50] = Bxx(bV, 0); // BVC\n opcodes[0x51] = \"EOR\"; instructions[0x51] = EOR(indirectYRead);\n opcodes[0x52] = \"uKIL\"; instructions[0x52] = uKIL();\n opcodes[0x53] = \"uSRE\"; instructions[0x53] = uSRE(indirectYReadModifyWrite);\n opcodes[0x54] = \"uNOP\"; instructions[0x54] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x55] = \"EOR\"; instructions[0x55] = EOR(zeroPageIndexedRead(rX));\n opcodes[0x56] = \"LSR\"; instructions[0x56] = LSR(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x57] = \"uSRE\"; instructions[0x57] = uSRE(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x58] = \"CLI\"; instructions[0x58] = CLI();\n opcodes[0x59] = \"EOR\"; instructions[0x59] = EOR(absoluteIndexedRead(rY));\n opcodes[0x5a] = \"uNOP\"; instructions[0x5a] = uNOP(implied);\n opcodes[0x5b] = \"uSRE\"; instructions[0x5b] = uSRE(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x5c] = \"uNOP\"; instructions[0x5c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x5d] = \"EOR\"; instructions[0x5d] = EOR(absoluteIndexedRead(rX));\n opcodes[0x5e] = \"LSR\"; instructions[0x5e] = LSR(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x5f] = \"uSRE\"; instructions[0x5f] = uSRE(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x60] = \"RTS\"; instructions[0x60] = RTS();\n opcodes[0x61] = \"ADC\"; instructions[0x61] = ADC(indirectXRead);\n opcodes[0x62] = \"uKIL\"; instructions[0x62] = uKIL();\n opcodes[0x63] = \"uRRA\"; instructions[0x63] = uRRA(indirectXReadModifyWrite);\n opcodes[0x64] = \"uNOP\"; instructions[0x64] = uNOP(zeroPageRead);\n opcodes[0x65] = \"ADC\"; instructions[0x65] = ADC(zeroPageRead);\n opcodes[0x66] = \"ROR\"; instructions[0x66] = ROR(zeroPageReadModifyWrite);\n opcodes[0x67] = \"uRRA\"; instructions[0x67] = uRRA(zeroPageReadModifyWrite);\n opcodes[0x68] = \"PLA\"; instructions[0x68] = PLA();\n opcodes[0x69] = \"ADC\"; instructions[0x69] = ADC(immediateRead);\n opcodes[0x6a] = \"ROR\"; instructions[0x6a] = ROR_ACC();\n opcodes[0x6b] = \"uARR\"; instructions[0x6b] = uARR(immediateRead);\n opcodes[0x6c] = \"JMP\"; instructions[0x6c] = JMP_IND();\n opcodes[0x6d] = \"ADC\"; instructions[0x6d] = ADC(absoluteRead);\n opcodes[0x6e] = \"ROR\"; instructions[0x6e] = ROR(absoluteReadModifyWrite);\n opcodes[0x6f] = \"uRRA\"; instructions[0x6f] = uRRA(absoluteReadModifyWrite);\n opcodes[0x70] = \"BVS\"; instructions[0x70] = Bxx(bV, 1); // BVS\n opcodes[0x71] = \"ADC\"; instructions[0x71] = ADC(indirectYRead);\n opcodes[0x72] = \"uKIL\"; instructions[0x72] = uKIL();\n opcodes[0x73] = \"uRRA\"; instructions[0x73] = uRRA(indirectYReadModifyWrite);\n opcodes[0x74] = \"uNOP\"; instructions[0x74] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x75] = \"ADC\"; instructions[0x75] = ADC(zeroPageIndexedRead(rX));\n opcodes[0x76] = \"ROR\"; instructions[0x76] = ROR(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x77] = \"uRRA\"; instructions[0x77] = uRRA(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x78] = \"SEI\"; instructions[0x78] = SEI();\n opcodes[0x79] = \"ADC\"; instructions[0x79] = ADC(absoluteIndexedRead(rY));\n opcodes[0x7a] = \"uNOP\"; instructions[0x7a] = uNOP(implied);\n opcodes[0x7b] = \"uRRA\"; instructions[0x7b] = uRRA(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x7c] = \"uNOP\"; instructions[0x7c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x7d] = \"ADC\"; instructions[0x7d] = ADC(absoluteIndexedRead(rX));\n opcodes[0x7e] = \"ROR\"; instructions[0x7e] = ROR(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x7f] = \"uRRA\"; instructions[0x7f] = uRRA(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x80] = \"uNOP\"; instructions[0x80] = uNOP(immediateRead);\n opcodes[0x81] = \"STA\"; instructions[0x81] = STA(indirectXWrite);\n opcodes[0x82] = \"uNOP\"; instructions[0x82] = uNOP(immediateRead);\n opcodes[0x83] = \"uSAX\"; instructions[0x83] = uSAX(indirectXWrite);\n opcodes[0x84] = \"STY\"; instructions[0x84] = STY(zeroPageWrite);\n opcodes[0x85] = \"STA\"; instructions[0x85] = STA(zeroPageWrite);\n opcodes[0x86] = \"STX\"; instructions[0x86] = STX(zeroPageWrite);\n opcodes[0x87] = \"uSAX\"; instructions[0x87] = uSAX(zeroPageWrite);\n opcodes[0x88] = \"DEY\"; instructions[0x88] = DEY();\n opcodes[0x89] = \"uNOP\"; instructions[0x89] = uNOP(immediateRead);\n opcodes[0x8a] = \"TXA\"; instructions[0x8a] = TXA();\n opcodes[0x8b] = \"uANE\"; instructions[0x8b] = uANE(immediateRead);\n opcodes[0x8c] = \"STY\"; instructions[0x8c] = STY(absoluteWrite);\n opcodes[0x8d] = \"STA\"; instructions[0x8d] = STA(absoluteWrite);\n opcodes[0x8e] = \"STX\"; instructions[0x8e] = STX(absoluteWrite);\n opcodes[0x8f] = \"uSAX\"; instructions[0x8f] = uSAX(absoluteWrite);\n opcodes[0x90] = \"BCC\"; instructions[0x90] = Bxx(bC, 0); // BCC\n opcodes[0x91] = \"STA\"; instructions[0x91] = STA(indirectYWrite);\n opcodes[0x92] = \"uKIL\"; instructions[0x92] = uKIL();\n opcodes[0x93] = \"uSHA\"; instructions[0x93] = uSHA(indirectYWrite);\n opcodes[0x94] = \"STY\"; instructions[0x94] = STY(zeroPageIndexedWrite(rX));\n opcodes[0x95] = \"STA\"; instructions[0x95] = STA(zeroPageIndexedWrite(rX));\n opcodes[0x96] = \"STX\"; instructions[0x96] = STX(zeroPageIndexedWrite(rY));\n opcodes[0x97] = \"uSAX\"; instructions[0x97] = uSAX(zeroPageIndexedWrite(rY));\n opcodes[0x98] = \"TYA\"; instructions[0x98] = TYA();\n opcodes[0x99] = \"STA\"; instructions[0x99] = STA(absoluteIndexedWrite(rY));\n opcodes[0x9a] = \"TXS\"; instructions[0x9a] = TXS();\n opcodes[0x9b] = \"uSHS\"; instructions[0x9b] = uSHS(absoluteIndexedWrite(rY));\n opcodes[0x9c] = \"uSHY\"; instructions[0x9c] = uSHY(absoluteIndexedWrite(rX));\n opcodes[0x9d] = \"STA\"; instructions[0x9d] = STA(absoluteIndexedWrite(rX));\n opcodes[0x9e] = \"uSHX\"; instructions[0x9e] = uSHX(absoluteIndexedWrite(rY));\n opcodes[0x9f] = \"uSHA\"; instructions[0x9f] = uSHA(absoluteIndexedWrite(rY));\n opcodes[0xa0] = \"LDY\"; instructions[0xa0] = LDY(immediateRead);\n opcodes[0xa1] = \"LDA\"; instructions[0xa1] = LDA(indirectXRead);\n opcodes[0xa2] = \"LDX\"; instructions[0xa2] = LDX(immediateRead);\n opcodes[0xa3] = \"uLAX\"; instructions[0xa3] = uLAX(indirectXRead);\n opcodes[0xa4] = \"LDY\"; instructions[0xa4] = LDY(zeroPageRead);\n opcodes[0xa5] = \"LDA\"; instructions[0xa5] = LDA(zeroPageRead);\n opcodes[0xa6] = \"LDX\"; instructions[0xa6] = LDX(zeroPageRead);\n opcodes[0xa7] = \"uLAX\"; instructions[0xa7] = uLAX(zeroPageRead);\n opcodes[0xa8] = \"TAY\"; instructions[0xa8] = TAY();\n opcodes[0xa9] = \"LDA\"; instructions[0xa9] = LDA(immediateRead);\n opcodes[0xaa] = \"TAX\"; instructions[0xaa] = TAX();\n opcodes[0xab] = \"uLXA\"; instructions[0xab] = uLXA(immediateRead);\n opcodes[0xac] = \"LDY\"; instructions[0xac] = LDY(absoluteRead);\n opcodes[0xad] = \"LDA\"; instructions[0xad] = LDA(absoluteRead);\n opcodes[0xae] = \"LDX\"; instructions[0xae] = LDX(absoluteRead);\n opcodes[0xaf] = \"uLAX\"; instructions[0xaf] = uLAX(absoluteRead);\n opcodes[0xb0] = \"BCS\"; instructions[0xb0] = Bxx(bC, 1); // BCS\n opcodes[0xb1] = \"LDA\"; instructions[0xb1] = LDA(indirectYRead);\n opcodes[0xb2] = \"uKIL\"; instructions[0xb2] = uKIL();\n opcodes[0xb3] = \"uLAX\"; instructions[0xb3] = uLAX(indirectYRead);\n opcodes[0xb4] = \"LDY\"; instructions[0xb4] = LDY(zeroPageIndexedRead(rX));\n opcodes[0xb5] = \"LDA\"; instructions[0xb5] = LDA(zeroPageIndexedRead(rX));\n opcodes[0xb6] = \"LDX\"; instructions[0xb6] = LDX(zeroPageIndexedRead(rY));\n opcodes[0xb7] = \"uLAX\"; instructions[0xb7] = uLAX(zeroPageIndexedRead(rY));\n opcodes[0xb8] = \"CLV\"; instructions[0xb8] = CLV();\n opcodes[0xb9] = \"LDA\"; instructions[0xb9] = LDA(absoluteIndexedRead(rY));\n opcodes[0xba] = \"TSX\"; instructions[0xba] = TSX();\n opcodes[0xbb] = \"uLAS\"; instructions[0xbb] = uLAS(absoluteIndexedRead(rY));\n opcodes[0xbc] = \"LDY\"; instructions[0xbc] = LDY(absoluteIndexedRead(rX));\n opcodes[0xbd] = \"LDA\"; instructions[0xbd] = LDA(absoluteIndexedRead(rX));\n opcodes[0xbe] = \"LDX\"; instructions[0xbe] = LDX(absoluteIndexedRead(rY));\n opcodes[0xbf] = \"uLAX\"; instructions[0xbf] = uLAX(absoluteIndexedRead(rY));\n opcodes[0xc0] = \"CPY\"; instructions[0xc0] = CPY(immediateRead);\n opcodes[0xc1] = \"CMP\"; instructions[0xc1] = CMP(indirectXRead);\n opcodes[0xc2] = \"uNOP\"; instructions[0xc2] = uNOP(immediateRead);\n opcodes[0xc3] = \"uDCP\"; instructions[0xc3] = uDCP(indirectXReadModifyWrite);\n opcodes[0xc4] = \"CPY\"; instructions[0xc4] = CPY(zeroPageRead);\n opcodes[0xc5] = \"CMP\"; instructions[0xc5] = CMP(zeroPageRead);\n opcodes[0xc6] = \"DEC\"; instructions[0xc6] = DEC(zeroPageReadModifyWrite);\n opcodes[0xc7] = \"uDCP\"; instructions[0xc7] = uDCP(zeroPageReadModifyWrite);\n opcodes[0xc8] = \"INY\"; instructions[0xc8] = INY();\n opcodes[0xc9] = \"CMP\"; instructions[0xc9] = CMP(immediateRead);\n opcodes[0xca] = \"DEX\"; instructions[0xca] = DEX();\n opcodes[0xcb] = \"uSBX\"; instructions[0xcb] = uSBX(immediateRead);\n opcodes[0xcc] = \"CPY\"; instructions[0xcc] = CPY(absoluteRead);\n opcodes[0xcd] = \"CMP\"; instructions[0xcd] = CMP(absoluteRead);\n opcodes[0xce] = \"DEC\"; instructions[0xce] = DEC(absoluteReadModifyWrite);\n opcodes[0xcf] = \"uDCP\"; instructions[0xcf] = uDCP(absoluteReadModifyWrite);\n opcodes[0xd0] = \"BNE\"; instructions[0xd0] = Bxx(bZ, 0); // BNE\n opcodes[0xd1] = \"CMP\"; instructions[0xd1] = CMP(indirectYRead);\n opcodes[0xd2] = \"uKIL\"; instructions[0xd2] = uKIL();\n opcodes[0xd3] = \"uDCP\"; instructions[0xd3] = uDCP(indirectYReadModifyWrite);\n opcodes[0xd4] = \"uNOP\"; instructions[0xd4] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0xd5] = \"CMP\"; instructions[0xd5] = CMP(zeroPageIndexedRead(rX));\n opcodes[0xd6] = \"DEC\"; instructions[0xd6] = DEC(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xd7] = \"uDCP\"; instructions[0xd7] = uDCP(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xd8] = \"CLD\"; instructions[0xd8] = CLD();\n opcodes[0xd9] = \"CMP\"; instructions[0xd9] = CMP(absoluteIndexedRead(rY));\n opcodes[0xda] = \"uNOP\"; instructions[0xda] = uNOP(implied);\n opcodes[0xdb] = \"uDCP\"; instructions[0xdb] = uDCP(absoluteIndexedReadModifyWrite(rY));\n opcodes[0xdc] = \"uNOP\"; instructions[0xdc] = uNOP(absoluteIndexedRead(rX));\n opcodes[0xdd] = \"CMP\"; instructions[0xdd] = CMP(absoluteIndexedRead(rX));\n opcodes[0xde] = \"DEC\"; instructions[0xde] = DEC(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xdf] = \"uDCP\"; instructions[0xdf] = uDCP(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xe0] = \"CPX\"; instructions[0xe0] = CPX(immediateRead);\n opcodes[0xe1] = \"SBC\"; instructions[0xe1] = SBC(indirectXRead);\n opcodes[0xe2] = \"uNOP\"; instructions[0xe2] = uNOP(immediateRead);\n opcodes[0xe3] = \"uISB\"; instructions[0xe3] = uISB(indirectXReadModifyWrite);\n opcodes[0xe4] = \"CPX\"; instructions[0xe4] = CPX(zeroPageRead);\n opcodes[0xe5] = \"SBC\"; instructions[0xe5] = SBC(zeroPageRead);\n opcodes[0xe6] = \"INC\"; instructions[0xe6] = INC(zeroPageReadModifyWrite);\n opcodes[0xe7] = \"uISB\"; instructions[0xe7] = uISB(zeroPageReadModifyWrite);\n opcodes[0xe8] = \"INX\"; instructions[0xe8] = INX();\n opcodes[0xe9] = \"SBC\"; instructions[0xe9] = SBC(immediateRead);\n opcodes[0xea] = \"NOP\"; instructions[0xea] = NOP();\n opcodes[0xeb] = \"SBC\"; instructions[0xeb] = SBC(immediateRead);\n opcodes[0xec] = \"CPX\"; instructions[0xec] = CPX(absoluteRead);\n opcodes[0xed] = \"SBC\"; instructions[0xed] = SBC(absoluteRead);\n opcodes[0xee] = \"INC\"; instructions[0xee] = INC(absoluteReadModifyWrite);\n opcodes[0xef] = \"uISB\"; instructions[0xef] = uISB(absoluteReadModifyWrite);\n opcodes[0xf0] = \"BEQ\"; instructions[0xf0] = Bxx(bZ, 1); // BEQ\n opcodes[0xf1] = \"SBC\"; instructions[0xf1] = SBC(indirectYRead);\n opcodes[0xf2] = \"uKIL\"; instructions[0xf2] = uKIL();\n opcodes[0xf3] = \"uISB\"; instructions[0xf3] = uISB(indirectYReadModifyWrite);\n opcodes[0xf4] = \"uNOP\"; instructions[0xf4] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0xf5] = \"SBC\"; instructions[0xf5] = SBC(zeroPageIndexedRead(rX));\n opcodes[0xf6] = \"INC\"; instructions[0xf6] = INC(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xf7] = \"uISB\"; instructions[0xf7] = uISB(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xf8] = \"SED\"; instructions[0xf8] = SED();\n opcodes[0xf9] = \"SBC\"; instructions[0xf9] = SBC(absoluteIndexedRead(rY));\n opcodes[0xfa] = \"uNOP\"; instructions[0xfa] = uNOP(implied);\n opcodes[0xfb] = \"uISB\"; instructions[0xfb] = uISB(absoluteIndexedReadModifyWrite(rY));\n opcodes[0xfc] = \"uNOP\"; instructions[0xfc] = uNOP(absoluteIndexedRead(rX));\n opcodes[0xfd] = \"SBC\"; instructions[0xfd] = SBC(absoluteIndexedRead(rX));\n opcodes[0xfe] = \"INC\"; instructions[0xfe] = INC(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xff] = \"uISB\"; instructions[0xff] = uISB(absoluteIndexedReadModifyWrite(rX));\n\n\n // Single Byte instructions\n\n function ASL_ACC() {\n return implied(function() {\n setC(A > 127);\n A = (A << 1) & 255;\n setZ(A);\n setN(A);\n });\n }\n\n function CLC() {\n return implied(function() {\n C = 0;\n });\n }\n\n function CLD() {\n return implied(function() {\n D = 0;\n });\n }\n\n function CLI() {\n return implied(function() {\n I = 0;\n });\n }\n\n function CLV() {\n return implied(function() {\n V = 0;\n });\n }\n\n function DEX() {\n return implied(function() {\n X = (X - 1) & 255;\n setZ(X);\n setN(X);\n });\n }\n\n function DEY() {\n return implied(function() {\n Y = (Y - 1) & 255;\n setZ(Y);\n setN(Y);\n });\n }\n\n function INX() {\n return implied(function() {\n X = (X + 1) & 255;\n setZ(X);\n setN(X);\n });\n }\n\n function INY() {\n return implied(function() {\n Y = (Y + 1) & 255;\n setZ(Y);\n setN(Y);\n });\n }\n\n function LSR_ACC() {\n return implied(function() {\n C = A & 0x01;\n A >>>= 1;\n setZ(A);\n N = 0;\n });\n }\n\n function NOP() {\n return implied(function() {\n // nothing\n });\n }\n\n function ROL_ACC() {\n return implied(function() {\n var newC = A > 127;\n A = ((A << 1) | C) & 255;\n setC(newC);\n setZ(A);\n setN(A);\n });\n }\n\n function ROR_ACC() {\n return implied(function() {\n var newC = A & 0x01;\n A = (A >>> 1) | (C << 7);\n setC(newC);\n setZ(A);\n setN(A);\n });\n }\n\n function SEC() {\n return implied(function() {\n C = 1;\n });\n }\n\n function SED() {\n return implied(function() {\n D = 1;\n });\n }\n\n function SEI() {\n return implied(function() {\n I = 1;\n });\n }\n\n function TAX() {\n return implied(function() {\n X = A;\n setZ(X);\n setN(X);\n });\n }\n\n function TAY() {\n return implied(function() {\n Y = A;\n setZ(Y);\n setN(Y);\n });\n }\n\n function TSX() {\n return implied(function() {\n X = SP;\n setZ(X);\n setN(X);\n });\n }\n\n function TXA() {\n return implied(function() {\n A = X;\n setZ(A);\n setN(A);\n });\n }\n\n function TXS() {\n return implied(function() {\n SP = X;\n });\n }\n\n function TYA() {\n return implied(function() {\n A = Y;\n setZ(A);\n setN(A);\n });\n }\n\n function uKIL() {\n return [\n fetchOpcodeAndDecodeInstruction,\n function() {\n illegalOpcode(\"KIL/HLT/JAM\");\n },\n function() {\n T--; // Causes the processor to be stuck in this instruction forever\n }\n ];\n }\n\n function uNOP(addressing) {\n return addressing(function() {\n illegalOpcode(\"NOP/DOP\");\n // nothing\n });\n }\n\n\n // Internal Execution on Memory Data\n\n function ADC(addressing) {\n return addressing(function() {\n if (D) {\n var operand = data;\n var AL = (A & 15) + (operand & 15) + C;\n if (AL > 9) { AL += 6; }\n var AH = ((A >> 4) + (operand >> 4) + ((AL > 15)?1:0)) << 4;\n setZ((A + operand + C) & 255);\n setN(AH);\n setV(((A ^AH) & ~(A ^ operand)) & 128);\n if (AH > 0x9f) { AH += 0x60; }\n setC(AH > 255);\n A = (AH | (AL & 15)) & 255;\n } else {\n var add = A + data + C;\n setC(add > 255);\n setV(((A ^ add) & (data ^ add)) & 0x80);\n A = add & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function AND(addressing) {\n return addressing(function() {\n A &= data;\n setZ(A);\n setN(A);\n });\n }\n\n function BIT(addressing) {\n return addressing(function() {\n var par = data;\n setZ(A & par);\n setV(par & 0x40);\n setN(par);\n });\n }\n\n function CMP(addressing) {\n return addressing(function() {\n var val = (A - data) & 255;\n setC(A >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function CPX(addressing) {\n return addressing(function() {\n var val = (X - data) & 255;\n setC(X >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function CPY(addressing) {\n return addressing(function() {\n var val = (Y - data) & 255;\n setC(Y >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function EOR(addressing) {\n return addressing(function() {\n A ^= data;\n setZ(A);\n setN(A);\n });\n }\n\n function LDA(addressing) {\n return addressing(function() {\n A = data;\n setZ(A);\n setN(A);\n });\n }\n\n function LDX(addressing) {\n return addressing(function() {\n X = data;\n setZ(X);\n setN(X);\n });\n }\n\n function LDY(addressing) {\n return addressing(function() {\n Y = data;\n setZ(Y);\n setN(Y);\n });\n }\n\n function ORA(addressing) {\n return addressing(function() {\n A |= data;\n setZ(A);\n setN(A);\n });\n }\n\n function SBC(addressing) {\n return addressing(function() {\n if (D) {\n var operand = data;\n var AL = (A & 15) - (operand & 15) - (1-C);\n var AH = (A >> 4) - (operand >> 4) - ((AL < 0)?1:0);\n if (AL < 0) { AL -= 6; }\n if (AH < 0) { AH -= 6; }\n var sub = A - operand - (1-C);\n setC(~sub & 256);\n setV(((A ^ operand) & (A ^ sub)) & 128);\n setZ(sub & 255);\n setN(sub);\n A = ((AH << 4) | (AL & 15)) & 255;\n } else {\n operand = (~data) & 255;\n sub = A + operand + C;\n setC(sub > 255);\n setV(((A ^ sub) & (operand ^ sub) & 0x80));\n A = sub & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uANC(addressing) {\n return addressing(function() {\n illegalOpcode(\"ANC\");\n A &= data;\n setZ(A);\n N = C = (A & 0x080) ? 1 : 0;\n });\n }\n\n function uANE(addressing) {\n return addressing(function() {\n illegalOpcode(\"ANE\");\n // Exact operation unknown. Do nothing\n });\n }\n\n function uARR(addressing) {\n // Some sources say flags are affected per ROR, others say its more complex. The complex one is chosen\n return addressing(function() {\n illegalOpcode(\"ARR\");\n var val = A & data;\n var oldC = C ? 0x80 : 0;\n val = (val >>> 1) | oldC;\n A = val;\n setZ(val);\n setN(val);\n var comp = A & 0x60;\n if (comp == 0x60) \t\t{ C = 1; V = 0; }\n else if (comp == 0x00) \t{ C = 0; V = 0; }\n else if (comp == 0x20) \t{ C = 0; V = 1; }\n else if (comp == 0x40) \t{ C = 1; V = 1; }\n });\n }\n\n function uASR(addressing) {\n return addressing(function() {\n illegalOpcode(\"ASR\");\n var val = A & data;\n C = (val & 0x01);\t\t// bit 0\n val = val >>> 1;\n A = val;\n setZ(val);\n N = 0;\n });\n }\n\n function uLAS(addressing) {\n return addressing(function() {\n illegalOpcode(\"LAS\");\n var val = SP & data;\n A = val;\n X = val;\n SP = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uLAX(addressing) {\n return addressing(function() {\n illegalOpcode(\"LAX\");\n var val = data;\n A = val;\n X = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uLXA(addressing) {\n return addressing(function() {\n // Some sources say its an OR with $EE then AND with IMM, others exclude the OR,\n // others exclude both the OR and the AND. Excluding just the OR...\n illegalOpcode(\"LXA\");\n var val = A /* | 0xEE) */ & data;\n A = val;\n X = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uSBX(addressing) {\n return addressing(function() {\n illegalOpcode(\"SBX\");\n var par = A & X;\n var val = data;\n var newX = (par - val) & 255;\n X = newX;\n setC(par >= val);\n setZ(newX);\n setN(newX);\n });\n }\n\n\n // Store operations\n\n function STA(addressing) {\n return addressing(function() {\n data = A;\n });\n }\n\n function STX(addressing) {\n return addressing(function() {\n data = X;\n });\n }\n\n function STY(addressing) {\n return addressing(function() {\n data = Y;\n });\n }\n\n function uSAX(addressing) {\n return addressing(function() {\n // Some sources say it would affect N and Z flags, some say it wouldn't. Chose not to affect\n illegalOpcode(\"SAX\");\n data = A & X;\n });\n }\n\n function uSHA(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHA\");\n data = A & X & ((BA >>> 8) + 1) & 255; // A & X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHS(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHS\");\n var val = A & X;\n SP = val;\n data = val & ((BA >>> 8) + 1) & 255; // A & X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHX(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHX\");\n data = X & ((BA >>> 8) + 1) & 255; // X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHY(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHY\");\n data = Y & ((BA >>> 8) + 1) & 255; // Y & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n\n // Read-Modify-Write operations\n\n function ASL(addressing) {\n return addressing(function() {\n setC(data > 127);\n var par = (data << 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function DEC(addressing) {\n return addressing(function() {\n var par = (data - 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function INC(addressing) {\n return addressing(function() {\n var par = (data + 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function LSR(addressing) {\n return addressing(function() {\n C = data & 0x01;\n data >>>= 1;\n setZ(data);\n N = 0;\n });\n }\n\n function ROL(addressing) {\n return addressing(function() {\n var newC = data > 127;\n var par = ((data << 1) | C) & 255;\n data = par;\n setC(newC);\n setZ(par);\n setN(par);\n });\n }\n\n function ROR(addressing) {\n return addressing(function() {\n var newC = data & 0x01;\n var par = (data >>> 1) | (C << 7);\n data = par;\n setC(newC);\n setZ(par);\n setN(par);\n });\n }\n\n function uDCP(addressing) {\n return addressing(function() {\n illegalOpcode(\"DCP\");\n var par = (data - 1) & 255;\n data = par;\n par = A - par;\n setC(par >= 0);\n setZ(par);\n setN(par);\n });\n }\n\n function uISB(addressing) {\n return addressing(function() {\n illegalOpcode(\"ISB\");\n data = (data + 1) & 255; // ISB is the same as SBC but incs the operand first\n if (D) {\n var operand = data;\n var AL = (A & 15) - (operand & 15) - (1-C);\n var AH = (A >> 4) - (operand >> 4) - ((AL < 0)?1:0);\n if (AL < 0) { AL -= 6; }\n if (AH < 0) { AH -= 6; }\n var sub = A - operand - (1-C);\n setC(~sub & 256);\n setV(((A ^ operand) & (A ^ sub)) & 128);\n setZ(sub & 255);\n setN(sub);\n A = ((AH << 4) | (AL & 15)) & 255;\n } else {\n operand = (~data) & 255;\n sub = A + operand + C;\n setC(sub > 255);\n setV(((A ^ sub) & (operand ^ sub) & 0x80));\n A = sub & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uRLA(addressing) {\n return addressing(function() {\n illegalOpcode(\"RLA\");\n var val = data;\n var oldC = C;\n setC(val & 0x80);\t\t// bit 7 was set\n val = ((val << 1) | oldC) & 255;\n data = val;\n A &= val;\n setZ(val); // TODO Verify. May be A instead of val in the flags setting\n setN(val);\n });\n }\n\n function uRRA(addressing) {\n return addressing(function() {\n illegalOpcode(\"RRA\");\n var val = data;\n var oldC = C ? 0x80 : 0;\n setC(val & 0x01);\t\t// bit 0 was set\n val = (val >>> 1) | oldC;\n data = val;\n // RRA is the same as ADC from here\n if (D) {\n var operand = data;\n var AL = (A & 15) + (operand & 15) + C;\n if (AL > 9) { AL += 6; }\n var AH = ((A >> 4) + (operand >> 4) + ((AL > 15)?1:0)) << 4;\n setZ((A + operand + C) & 255);\n setN(AH);\n setV(((A ^AH) & ~(A ^ operand)) & 128);\n if (AH > 0x9f) { AH += 0x60; }\n setC(AH > 255);\n A = (AH | (AL & 15)) & 255;\n } else {\n var add = A + data + C;\n setC(add > 255);\n setV(((A ^ add) & (data ^ add)) & 0x80);\n A = add & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uSLO(addressing) {\n return addressing(function() {\n illegalOpcode(\"SLO\");\n var val = data;\n setC(val & 0x80);\t\t// bit 7 was set\n val = (val << 1) & 255;\n data = val;\n val = A | val;\n A = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uSRE(addressing) {\n return addressing(function() {\n illegalOpcode(\"SRE\");\n var val = data;\n setC(val & 0x01);\t\t// bit 0 was set\n val = val >>> 1;\n data = val;\n val = (A ^ val) & 255;\n A = val;\n setZ(val);\n setN(val);\n });\n }\n\n\n // Miscellaneous operations\n\n function PHA() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() { pushToStack(A); },\n fetchNextOpcode\n ];\n }\n\n function PHP() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() { pushToStack(getStatusBits()); },\n fetchNextOpcode\n ];\n }\n\n function PLA() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() {\n A = popFromStack();\n setZ(A);\n setN(A);\n },\n fetchNextOpcode\n ];\n }\n\n function PLP() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { setStatusBits(popFromStack()); },\n fetchNextOpcode\n ];\n }\n\n function JSR() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n peekFromStack,\n function() { pushToStack((PC >>> 8) & 0xff); },\n function() { pushToStack(PC & 0xff); },\n fetchADH,\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function BRK() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate, // For debugging purposes, use operand as an arg for BRK!\n function() {\n if (self.debug) self.breakpoint(\"BRK \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits()); }, // set B flag\n function() { AD = bus.read(IRQ_VECTOR); },\n function() { AD |= bus.read(IRQ_VECTOR + 1) << 8; },\n function() { PC = AD; I = 1; fetchNextOpcode(); }\n ];\n }\n\n function IRQ() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate, // For debugging purposes, use operand as an arg for BRK!\n function() {\n if (self.debug) self.breakpoint(\"IRQ \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits() & ~0x10); }, // no BRK flag\n function() { AD = bus.read(IRQ_VECTOR); },\n function() { AD |= bus.read(IRQ_VECTOR + 1) << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function NMI() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate,\n function() {\n if (self.debug) self.breakpoint(\"NMI \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits() & ~0x10); }, // no BRK flag\n function() { AD = bus.read(NMI_VECTOR); },\n function() { AD |= bus.read(NMI_VECTOR + 1) << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function RTI() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { setStatusBits(popFromStack()); },\n function() { AD = popFromStack(); },\n function() { AD |= popFromStack() << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function RTS() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { AD = popFromStack(); },\n function() { AD |= popFromStack() << 8; },\n function() { PC = AD; fetchDataFromImmediate(); },\n fetchNextOpcode\n ];\n }\n\n function JMP_ABS() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function JMP_IND() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchIAH,\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() { PC = BA; fetchNextOpcode(); }\n ];\n }\n\n function Bxx(reg, cond) {\n var branchTaken;\n if (reg === bZ) branchTaken = function() { return Z === cond; };\n else if (reg === bN) branchTaken = function() { return N === cond; };\n else if (reg === bC) branchTaken = function() { return C === cond; };\n else branchTaken = function() { return V === cond; };\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBranchOffset,\n function() {\n if (branchTaken()) {\n fetchOpcodeAndDiscard();\n addBranchOffsetToPCL();\n } else {\n fetchNextOpcode();\n }\n },\n function() {\n if(branchOffsetCrossAdjust) {\n fetchOpcodeAndDiscard();\n adjustPCHForBranchOffsetCross();\n } else {\n fetchNextOpcode();\n }\n },\n fetchNextOpcode\n ];\n }\n\n\n // Savestate -------------------------------------------\n\n this.saveState = function():MOS6502State {\n return {\n PC: (PC-1) & 0xffff,\n A: A, X: X, Y: Y, SP: SP,\n N: N, V: V, D: D, I: I, Z: Z, C: C,\n T: T, o: opcode, R: RDY?1:0,\n d: data, AD: AD, BA: BA, BC: BALCrossed?1:0, IA: IA,\n bo: branchOffset, boa: branchOffsetCrossAdjust\n };\n };\n\n this.loadState = function(state:MOS6502State) {\n PC = (state.PC+1) & 0xffff;\n A = state.A; X = state.X; Y = state.Y; SP = state.SP;\n N = state.N; V = state.V; D = state.D; I = state.I; Z = state.Z; C = state.C;\n T = state.T; opcode = state.o; RDY = !!state.R;\n data = state.d; AD = state.AD; BA = state.BA; BALCrossed = !!state.BC; IA = state.IA;\n branchOffset = state.bo; branchOffsetCrossAdjust = state.boa;\n instruction = opcode < 0 ? [ fetchOpcodeAndDecodeInstruction ] : instructions[opcode];\n };\n\n\n // Accessory methods\n\n this.toString = function() {\n return \"CPU \" +\n \" PC: \" + PC.toString(16) + \" op: \" + opcode.toString() + \" T: \" + T + \" data: \" + data + \"\\n\" +\n \" A: \" + A.toString(16) + \" X: \" + X.toString(16) + \" Y: \" + Y.toString(16) + \" SP: \" + SP.toString(16) + \" \" +\n \"N\" + N + \" \" + \"V\" + V + \" \" + \"D\" + D + \" \" + \"I\" + I + \" \" + \"Z\" + Z + \" \" + \"C\" + C + \" \";\n };\n\n this.breakpoint = function(mes) {\n //jt.Util.log(mes);\n if (this.trace) {\n var text = \"CPU Breakpoint! \" + (mes ? \"(\" + mes + \")\" : \"\") + \"\\n\\n\" + this.toString();\n //jt.Util.message(text);\n }\n };\n\n var cycletime = [\n 7, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 5, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 0, 6, 0, 6, 3, 3, 3, 3, 2, 0, 2, 0, 4, 4, 4, 4,\n 2, 6, 0, 0, 4, 4, 4, 4, 2, 5, 2, 0, 0, 5, 0, 0,\n 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 0, 4, 4, 4, 4,\n 2, 5, 0, 5, 4, 4, 4, 4, 2, 4, 2, 0, 4, 4, 4, 4,\n 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 0, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7\n ];\n\n var extracycles = [\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1\n ];\n\n var insnlengths = [\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 3, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 0, 2, 0, 2, 2, 2, 2, 2, 1, 0, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 0, 2, 2, 2, 3, 1, 3, 1, 0, 0, 3, 0, 0,\n 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3\n ];\n\n var validinsns = [\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 0, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 3, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 0, 2, 0, 0, 2, 2, 2, 0, 1, 0, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 0, 3, 0, 0,\n 2, 2, 2, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0\n ];\n\n this.getOpcodeMetadata = function(opcode, address) {\n // TODO: more intelligent maximum cycles\n //var i = instructions[opcode];\n return {\n opcode:opcode,\n mnenomic:opcodes[opcode],\n minCycles:cycletime[opcode],\n maxCycles:cycletime[opcode] + extracycles[opcode],\n insnlength:insnlengths[opcode]\n };\n }\n\n // only call when isPCStable() is true\n this.setNMI = function() {\n instruction = NMI();\n T = 1;\n PC = (PC-1) & 0xffff;\n }\n this.setIRQ = function() {\n if (!I) { // only if not disabled\n instruction = IRQ();\n T = 1;\n PC = (PC-1) & 0xffff;\n }\n }\n\n this.getSP = function() { return SP; }\n this.getPC = function() { return (PC-1) & 0xffff; }\n this.getT = function() { return T; }\n this.isHalted = function() { return opcodes[opcode] == \"uKIL\"; }\n \n this.isPCStable = function() {\n return T == 0;\n }\n};\n\nexport interface MOS6502State {\nPC : number;\nSP : number;\nA : number;\nX : number;\nY : number;\nN : number;\nV : number;\nD : number;\nI : number;\nZ : number;\nC : number;\nT : number;\no : number;\nR : number;\nd : number;\nAD : number;\nBA : number;\nBC : number;\nIA : number;\nbo : number;\nboa : number;\n}\n\nexport enum MOS6502Interrupts { None=0, NMI=1, IRQ=2 };\n\nexport class MOS6502 implements CPU, ClockBased, SavesState, Interruptable {\n\n cpu = new _MOS6502();\n interruptType : MOS6502Interrupts = MOS6502Interrupts.None;\n \n connectMemoryBus(bus:Bus) {\n this.cpu.connectBus(bus);\n }\n advanceClock() {\n if (this.interruptType && this.isStable()) {\n switch (this.interruptType) {\n case MOS6502Interrupts.NMI: this.cpu.setNMI(); break;\n case MOS6502Interrupts.IRQ: this.cpu.setIRQ(); break;\n }\n this.interruptType = 0;\n }\n this.cpu.clockPulse();\n }\n advanceInsn() {\n do {\n this.advanceClock();\n } while (!this.isStable());\n }\n reset() {\n this.cpu.reset();\n this.interruptType = 0;\n }\n interrupt(itype:number) {\n if (this.interruptType != MOS6502Interrupts.NMI) {\n this.interruptType = itype;\n }\n }\n NMI() {\n this.interrupt(MOS6502Interrupts.NMI);\n }\n IRQ() {\n this.interrupt(MOS6502Interrupts.IRQ);\n }\n getSP() {\n return this.cpu.getSP();\n }\n getPC() {\n return this.cpu.getPC();\n }\n isHalted() {\n return this.cpu.isHalted();\n }\n saveState() {\n var s = this.cpu.saveState();\n s.it = this.interruptType;\n return s;\n }\n loadState(s) {\n this.cpu.loadState(s);\n this.interruptType = s.it;\n }\n isStable() : boolean {\n return this.cpu.isPCStable();\n }\n getOpcodeMetadata(op: number) {\n return this.cpu.getOpcodeMetadata(op);\n }\n}\n", "\nimport { CpuState, EmuState } from \"./baseplatform\";\nimport { CPU, SampledAudioSink, ProbeAll, NullProbe } from \"./devices\";\nimport { EmuHalt } from \"./emu\";\n\n// WASM Support\n// TODO: detangle from c64\n\nexport abstract class BaseWASMMachine {\n prefix : string;\n instance : WebAssembly.Instance;\n exports : any;\n sys : number;\n pixel_dest : Uint32Array;\n pixel_src : Uint32Array;\n stateptr : number;\n statearr : Uint8Array;\n cpustateptr : number;\n cpustatearr : Uint8Array;\n ctrlstateptr : number;\n ctrlstatearr : Uint8Array;\n cpu : CPU;\n romptr : number;\n romlen : number;\n romarr : Uint8Array;\n biosptr : number;\n biosarr : Uint8Array;\n audio : SampledAudioSink;\n audioarr : Float32Array;\n probe : ProbeAll;\n maxROMSize : number = 0x40000;\n\n abstract getCPUState() : CpuState;\n abstract saveState() : EmuState;\n abstract loadState(state: EmuState);\n\n constructor(prefix: string) {\n this.prefix = prefix;\n var self = this;\n this.cpu = {\n getPC: self.getPC.bind(self),\n getSP: self.getSP.bind(self),\n isStable: self.isStable.bind(self),\n reset: self.reset.bind(self),\n saveState: () => {\n return self.getCPUState();\n },\n loadState: () => {\n console.log(\"loadState not implemented\")\n },\n connectMemoryBus() {\n console.log(\"connectMemoryBus not implemented\")\n },\n }\n }\n getImports(wmod: WebAssembly.Module) {\n return {};\n }\n async fetchWASM() {\n var wasmResponse = await fetch('res/'+this.prefix+'.wasm');\n if (wasmResponse.status == 200 || (wasmResponse as any as Blob).size) {\n var wasmBinary = await wasmResponse.arrayBuffer();\n var wasmCompiled = await WebAssembly.compile(wasmBinary);\n var wasmResult = await WebAssembly.instantiate(wasmCompiled, this.getImports(wasmCompiled));\n this.instance = wasmResult;\n this.exports = wasmResult.exports;\n } else throw new Error('could not load WASM file');\n }\n allocateBIOS(biosBinary: Uint8Array) {\n this.biosptr = this.exports.malloc(biosBinary.byteLength);\n this.biosarr = new Uint8Array(this.exports.memory.buffer, this.biosptr, biosBinary.byteLength);\n}\n async fetchBIOS() {\n var biosResponse = await fetch('res/'+this.prefix+'.bios');\n if (biosResponse.status == 200 || (biosResponse as any as Blob).size) {\n var biosBinary = new Uint8Array(await biosResponse.arrayBuffer());\n this.allocateBIOS(biosBinary);\n this.loadBIOS(biosBinary);\n } else throw new Error('could not load BIOS file');\n }\n async initWASM() {\n // init machine instance\n this.sys = this.exports.machine_init(this.biosptr);\n let statesize = this.exports.machine_get_state_size();\n this.stateptr = this.exports.malloc(statesize);\n let ctrlstatesize = this.exports.machine_get_controls_state_size();\n this.ctrlstateptr = this.exports.malloc(ctrlstatesize);\n let cpustatesize = this.exports.machine_get_cpu_state_size();\n this.cpustateptr = this.exports.malloc(cpustatesize);\n this.romptr = this.exports.malloc(this.maxROMSize);\n // create state buffers\n // must do this after allocating memory (and everytime we grow memory?)\n this.statearr = new Uint8Array(this.exports.memory.buffer, this.stateptr, statesize);\n this.ctrlstatearr = new Uint8Array(this.exports.memory.buffer, this.ctrlstateptr, ctrlstatesize);\n this.cpustatearr = new Uint8Array(this.exports.memory.buffer, this.cpustateptr, cpustatesize);\n // create audio buffer\n let sampbufsize = 4096*4;\n this.audioarr = new Float32Array(this.exports.memory.buffer, this.exports.machine_get_sample_buffer(), sampbufsize);\n // create ROM buffer\n this.romarr = new Uint8Array(this.exports.memory.buffer, this.romptr, this.maxROMSize);\n // enable c64 joystick map to arrow keys (TODO)\n //this.exports.c64_set_joystick_type(this.sys, 1);\n console.log('machine_init', this.sys, statesize, ctrlstatesize, cpustatesize, sampbufsize);\n }\n async loadWASM() {\n await this.fetchWASM();\n this.exports.memory.grow(96); // TODO: need more when probing?\n await this.fetchBIOS();\n await this.initWASM();\n }\n getPC() : number {\n return this.exports.machine_cpu_get_pc(this.sys);\n }\n getSP() : number {\n return this.exports.machine_cpu_get_sp(this.sys);\n }\n isStable() : boolean {\n return this.exports.machine_cpu_is_stable(this.sys);\n }\n loadROM(rom: Uint8Array) {\n if (rom.length > this.maxROMSize) throw new EmuHalt(`Rom size too big: ${rom.length} bytes`);\n this.romarr.set(rom);\n this.romlen = rom.length;\n console.log('load rom', rom.length, 'bytes');\n this.reset(); // TODO?\n }\n // TODO: can't load after machine_init\n loadBIOS(srcArray: Uint8Array) {\n this.biosarr.set(srcArray);\n }\n reset() {\n this.exports.machine_reset(this.sys);\n }\n /* TODO: we don't need this because c64_exec does this?\n pollControls() {\n this.exports.machine_start_frame(this.sys);\n }\n */\n read(address: number) : number {\n return this.exports.machine_mem_read(this.sys, address & 0xffff);\n }\n readConst(address: number) : number {\n return this.exports.machine_mem_read(this.sys, address & 0xffff);\n }\n write(address: number, value: number) : void {\n this.exports.machine_mem_write(this.sys, address & 0xffff, value & 0xff);\n }\n getAudioParams() {\n return {sampleRate:44100, stereo:false};\n }\n videoOffsetBytes = 0;\n connectVideo(pixels:Uint32Array) : void {\n this.pixel_dest = pixels;\n var pixbuf = this.exports.machine_get_pixel_buffer(this.sys); // save video pointer\n console.log('connectVideo', pixbuf, pixels.length);\n this.pixel_src = new Uint32Array(this.exports.memory.buffer, pixbuf+this.videoOffsetBytes, pixels.length);\n }\n syncVideo() {\n if (this.exports.machine_update_video) {\n this.exports.machine_update_video(this.sys);\n }\n if (this.pixel_dest != null) {\n this.pixel_dest.set(this.pixel_src);\n }\n }\n // assume controls buffer is smaller than cpu buffer\n saveControlsState() : any {\n //console.log(1, this.romptr, this.romlen, this.ctrlstateptr, this.romarr.slice(0,4), this.ctrlstatearr.slice(0,4));\n this.exports.machine_save_controls_state(this.sys, this.ctrlstateptr);\n //console.log(2, this.romptr, this.romlen, this.ctrlstateptr, this.romarr.slice(0,4), this.ctrlstatearr.slice(0,4));\n return { controls:this.ctrlstatearr.slice(0) }\n }\n loadControlsState(state) : void {\n this.ctrlstatearr.set(state.controls);\n this.exports.machine_load_controls_state(this.sys, this.ctrlstateptr);\n }\n connectAudio(audio : SampledAudioSink) : void {\n this.audio = audio;\n }\n syncAudio() {\n if (this.audio != null) {\n var n = this.exports.machine_get_sample_count();\n for (var i=0; i address\n addr2symbol: AddrSymbolMap;\t// address -> symbol\n debuginfo: {}; // extra platform-specific debug info\n\n constructor(symbolmap: SymbolMap, debuginfo: {}) {\n this.symbolmap = symbolmap;\n this.debuginfo = debuginfo;\n this.addr2symbol = invertMap(symbolmap);\n //// TODO: shouldn't be necc.\n if (!this.addr2symbol[0x0]) this.addr2symbol[0x0] = '$00'; // needed for ...\n this.addr2symbol[0x10000] = '__END__'; // ... dump memory to work\n }\n}\n\ntype MemoryMapType = \"main\" | \"vram\";\ntype MemoryMap = { [type: string]: Segment[] };\n\nexport function isDebuggable(arg: any): arg is Debuggable {\n return arg && typeof arg.getDebugCategories === 'function';\n}\n\nexport interface Debuggable {\n getDebugCategories?(): string[];\n getDebugInfo?(category: string, state: EmuState): string;\n}\n\nexport interface Platform {\n start(): void | Promise;\n reset(): void;\n isRunning(): boolean;\n getToolForFilename(s: string): string;\n getDefaultExtensions(): string[];\n getPresets?(): Preset[];\n pause(): void;\n resume(): void;\n loadROM(title: string, rom: any, origin?: number); // TODO: Uint8Array\n loadBIOS?(title: string, rom: Uint8Array);\n getROMExtension?(rom: FileData): string;\n\n loadState?(state: EmuState): void;\n saveState?(): EmuState;\n loadControlsState?(state: EmuControlsState): void;\n saveControlsState?(): EmuControlsState;\n\n inspect?(ident: string): string;\n disassemble?(addr: number, readfn: (addr: number) => number): DisasmLine;\n readAddress?(addr: number): number;\n readVRAMAddress?(addr: number): number;\n\n setFrameRate?(fps: number): void;\n getFrameRate?(): number;\n\n setupDebug?(callback: BreakpointCallback): void;\n clearDebug?(): void;\n step?(): void;\n runToVsync?(): void;\n runToPC?(pc: number[]): void;\n runUntilReturn?(): void;\n stepBack?(): void;\n runEval?(evalfunc: DebugEvalCondition): void;\n runToFrameClock?(clock: number): void;\n stepOver?(): void;\n restartAtPC?(pc: number): boolean;\n\n getOpcodeMetadata?(opcode: number, offset: number): OpcodeMetadata; //TODO\n getSP?(): number;\n getPC?(): number;\n getOriginPC?(): number;\n newCodeAnalyzer?(): CodeAnalyzer;\n\n getPlatformName?(): string;\n getMemoryMap?(): MemoryMap;\n\n setRecorder?(recorder: EmuRecorder): void;\n advance?(novideo?: boolean): number;\n advanceFrameClock?(trap: DebugCondition, step: number): number;\n showHelp?(): string;\n resize?(): void;\n\n getRasterScanline?(): number;\n getRasterLineClock?(): number;\n setBreakpoint?(id: string, cond: DebugCondition);\n clearBreakpoint?(id: string);\n hasBreakpoint?(id: string): boolean;\n getCPUState?(): CpuState;\n\n debugSymbols?: DebugSymbols;\n getDebugTree?(): {};\n\n startProbing?(): ProbeRecorder;\n stopProbing?(): void;\n\n isBlocked?(): boolean; // is blocked, halted, or waiting for input?\n\n readFile?(path: string): FileData;\n writeFile?(path: string, data: FileData): boolean;\n sourceFileFetch?: (path: string) => FileData;\n\n getDownloadFile?(): { extension: string, blob: Blob };\n getDebugSymbolFile?(): { extension: string, blob: Blob };\n}\n\nexport interface Preset {\n id: string;\n name: string;\n chapter?: number;\n title?: string;\n category?: string;\n}\n\nexport interface MemoryBus {\n read: (address: number) => number;\n write: (address: number, value: number) => void;\n contend?: (address: number, cycles: number) => number;\n isContended?: (address: number) => boolean;\n}\n\nexport type DebugCondition = () => boolean;\nexport type DebugEvalCondition = (c: CpuState) => boolean;\nexport type BreakpointCallback = (s: EmuState, msg?: string) => void;\n// for composite breakpoints w/ single debug function\nexport class BreakpointList {\n id2bp: { [id: string]: Breakpoint } = {};\n getDebugCondition(): DebugCondition {\n if (Object.keys(this.id2bp).length == 0) {\n return null; // no breakpoints\n } else {\n // evaluate all breakpoints\n return () => {\n var result = false;\n for (var id in this.id2bp)\n if (this.id2bp[id].cond())\n result = true;\n return result;\n };\n }\n }\n}\nexport interface Breakpoint {\n cond: DebugCondition;\n};\n\nexport interface EmuRecorder {\n frameRequested(): boolean;\n recordFrame(state: EmuState);\n}\n\n/////\n\nexport abstract class BasePlatform {\n recorder: EmuRecorder = null;\n debugSymbols: DebugSymbols;\n internalFiles: { [path: string]: FileData } = {};\n\n abstract loadState(state: EmuState): void;\n abstract saveState(): EmuState;\n abstract pause(): void;\n abstract resume(): void;\n abstract advance(novideo?: boolean): number;\n\n setRecorder(recorder: EmuRecorder): void {\n this.recorder = recorder;\n }\n updateRecorder() {\n // are we recording and do we need to save a frame?\n if (this.recorder && (this).isRunning() && this.recorder.frameRequested()) {\n this.recorder.recordFrame(this.saveState());\n }\n }\n inspect(sym: string): string {\n return inspectSymbol((this as any) as Platform, sym);\n }\n getDebugTree(): {} {\n var o: any = {};\n o.state = this.saveState();\n if (this.debugSymbols?.debuginfo) o.debuginfo = this.debugSymbols.debuginfo;\n return o;\n }\n readFile(path: string): FileData {\n return this.internalFiles[path];\n }\n writeFile(path: string, data: FileData): boolean {\n this.internalFiles[path] = data;\n return true;\n }\n}\n\nexport abstract class BaseDebugPlatform extends BasePlatform {\n onBreakpointHit: BreakpointCallback;\n debugCallback: DebugCondition;\n debugSavedState: EmuState = null;\n debugBreakState: EmuState = null;\n debugTargetClock: number = 0;\n debugClock: number = 0;\n breakpoints: BreakpointList = new BreakpointList();\n frameCount: number = 0;\n\n abstract getCPUState(): CpuState;\n\n setBreakpoint(id: string, cond: DebugCondition) {\n if (cond) {\n this.breakpoints.id2bp[id] = { cond: cond };\n this.restartDebugging();\n } else {\n this.clearBreakpoint(id);\n }\n }\n clearBreakpoint(id: string) {\n delete this.breakpoints.id2bp[id];\n }\n hasBreakpoint(id: string) {\n return this.breakpoints.id2bp[id] != null;\n }\n getDebugCallback(): DebugCondition {\n return this.breakpoints.getDebugCondition();\n }\n setupDebug(callback: BreakpointCallback): void {\n this.onBreakpointHit = callback;\n }\n clearDebug() {\n if (this.debugBreakState != null && this.debugSavedState != null) {\n this.loadState(this.debugSavedState);\n }\n this.debugSavedState = null;\n this.debugBreakState = null;\n this.debugTargetClock = -1;\n this.debugClock = 0;\n this.onBreakpointHit = null;\n this.clearBreakpoint('debug');\n this.frameCount = 0;\n }\n setDebugCondition(debugCond: DebugCondition) {\n this.setBreakpoint('debug', debugCond);\n }\n resetDebugging() {\n if (this.debugSavedState) {\n this.loadState(this.debugSavedState);\n } else {\n this.debugSavedState = this.saveState();\n }\n this.debugClock = 0;\n this.debugCallback = this.getDebugCallback();\n this.debugBreakState = null;\n }\n restartDebugging() {\n this.resetDebugging();\n this.resume();\n }\n preFrame() {\n // save state before frame, to record any inputs that happened pre-frame\n if (this.debugCallback && !this.debugBreakState) {\n // save state every frame and rewind debug clocks\n this.debugSavedState = this.saveState();\n this.debugTargetClock -= this.debugClock;\n this.debugClock = 0;\n }\n }\n postFrame() {\n // reload debug state at end of frame after breakpoint\n if (this.debugCallback && this.debugBreakState) {\n this.loadState(this.debugBreakState);\n }\n this.frameCount++;\n }\n pollControls() {\n }\n nextFrame(novideo: boolean): number {\n this.pollControls();\n this.updateRecorder();\n this.preFrame();\n var steps = this.advance(novideo);\n this.postFrame();\n return steps;\n }\n // default debugging\n abstract getSP(): number;\n abstract getPC(): number;\n abstract isStable(): boolean;\n\n evalDebugCondition() {\n if (this.debugCallback && !this.debugBreakState) {\n this.debugCallback();\n }\n }\n wasBreakpointHit(): boolean {\n return this.debugBreakState != null;\n }\n breakpointHit(targetClock: number, reason?: string) {\n console.log(this.debugTargetClock, targetClock, this.debugClock, this.isStable());\n this.debugTargetClock = targetClock;\n this.debugBreakState = this.saveState();\n console.log(\"Breakpoint at clk\", this.debugClock, \"PC\", this.debugBreakState.c.PC.toString(16));\n this.pause();\n if (this.onBreakpointHit) {\n this.onBreakpointHit(this.debugBreakState, reason);\n }\n }\n haltAndCatchFire(reason: string) {\n this.breakpointHit(this.debugClock, reason);\n }\n runEval(evalfunc: DebugEvalCondition) {\n this.setDebugCondition(() => {\n if (++this.debugClock >= this.debugTargetClock && this.isStable()) {\n var cpuState = this.getCPUState();\n if (evalfunc(cpuState)) {\n this.breakpointHit(this.debugClock);\n return true;\n } else {\n return false;\n }\n }\n });\n }\n runToPC(pc: number[]) {\n this.debugTargetClock++;\n const pcs = new Set(pc);\n this.runEval((c) => {\n return pcs.has(c.PC);\n });\n }\n runUntilReturn() {\n var SP0 = this.getSP();\n this.runEval((c: CpuState): boolean => {\n return c.SP > SP0; // TODO: check for RTS/RET opcode\n });\n }\n runToFrameClock(clock: number): void {\n this.restartDebugging();\n this.debugTargetClock = clock;\n this.runEval((): boolean => { return true; });\n }\n step() {\n this.runToFrameClock(this.debugClock + 1);\n }\n stepBack() {\n var prevState;\n var prevClock;\n var clock0 = this.debugTargetClock;\n this.restartDebugging();\n this.debugTargetClock = clock0 - 25; // TODO: depends on CPU\n this.runEval((c: CpuState): boolean => {\n if (this.debugClock < clock0) {\n prevState = this.saveState();\n prevClock = this.debugClock;\n return false;\n } else {\n if (prevState) {\n this.loadState(prevState);\n this.debugClock = prevClock;\n }\n return true;\n }\n });\n }\n runToVsync() {\n this.restartDebugging();\n var frame0 = this.frameCount;\n this.runEval((): boolean => {\n return this.frameCount > frame0;\n });\n }\n}\n\nexport function inspectSymbol(platform: Platform, sym: string): string {\n if (!platform.debugSymbols) return;\n var symmap = platform.debugSymbols.symbolmap;\n var addr2sym = platform.debugSymbols.addr2symbol;\n if (!symmap || !platform.readAddress) return null;\n var addr = symmap[\"_\" + sym] || symmap[sym]; // look for C or asm symbol\n if (!(typeof addr == 'number')) return null;\n var b = platform.readAddress(addr);\n // don't show 2 bytes if there's a symbol at the next address\n if (addr2sym && addr2sym[addr + 1] != null) {\n return \"$\" + hex(addr, 4) + \" = $\" + hex(b, 2) + \" (\" + b + \" decimal)\"; // unsigned\n } else {\n let b2 = platform.readAddress(addr + 1);\n let w = b | (b2 << 8);\n return \"$\" + hex(addr, 4) + \" = $\" + hex(b, 2) + \" $\" + hex(b2, 2) + \" (\" + ((w << 16) >> 16) + \" decimal)\"; // signed\n }\n}\n\n////// 6502\n\nexport function getToolForFilename_6502(fn: string): string {\n if (fn.endsWith(\"-llvm.c\")) return \"remote:llvm-mos\";\n if (fn.endsWith(\".c\")) return \"cc65\";\n if (fn.endsWith(\".h\")) return \"cc65\";\n if (fn.endsWith(\".s\")) return \"ca65\";\n if (fn.endsWith(\".ca65\")) return \"ca65\";\n if (fn.endsWith(\".dasm\")) return \"dasm\";\n if (fn.endsWith(\".acme\")) return \"acme\";\n if (fn.endsWith(\".xa\")) return \"xa\";\n if (fn.endsWith(\".wiz\")) return \"wiz\";\n if (fn.endsWith(\".ecs\")) return \"ecs\";\n if (fn.endsWith(\".cpp\")) return \"oscar64\";\n if (fn.endsWith(\".cc\")) return \"oscar64\";\n if (fn.endsWith(\".o64\")) return \"oscar64\";\n return \"dasm\"; // .a\n}\n\n// TODO: can merge w/ Z80?\nexport abstract class Base6502Platform extends BaseDebugPlatform {\n\n // some platforms store their PC one byte before or after the first opcode\n // so we correct when saving and loading from state\n debugPCDelta = -1;\n fixPC(c) { c.PC = (c.PC + this.debugPCDelta) & 0xffff; return c; }\n unfixPC(c) { c.PC = (c.PC - this.debugPCDelta) & 0xffff; return c; }\n getSP() { return this.getCPUState().SP };\n getPC() { return this.getCPUState().PC };\n isStable() { return !this.getCPUState()['T']; }\n abstract readAddress(addr: number): number;\n\n newCPU(membus: MemoryBus) {\n var cpu = new _MOS6502();\n cpu.connectBus(membus);\n return cpu;\n }\n\n getOpcodeMetadata(opcode, offset) {\n return getOpcodeMetadata_6502(opcode, offset);\n }\n\n getOriginPC(): number {\n return (this.readAddress(0xfffc) | (this.readAddress(0xfffd) << 8)) & 0xffff;\n }\n\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassemble6502(pc, read(pc), read(pc + 1), read(pc + 2));\n }\n getToolForFilename = getToolForFilename_6502;\n getDefaultExtensions() { return [\".c\", \".cpp\", \".o64\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; };\n\n getDebugCategories() {\n return ['CPU', 'ZPRAM', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6502(state.c);\n case 'ZPRAM': return dumpRAM(state.b || state.ram, 0x0, 0x100);\n case 'Stack': return dumpStackToString(this, state.b || state.ram, 0x100, 0x1ff, 0x100 + state.c.SP, 0x20);\n }\n }\n}\n\nexport function cpuStateToLongString_6502(c): string {\n function decodeFlags(c) {\n var s = \"\";\n s += c.N ? \" N\" : \" -\";\n s += c.V ? \" V\" : \" -\";\n s += c.D ? \" D\" : \" -\";\n s += c.Z ? \" Z\" : \" -\";\n s += c.C ? \" C\" : \" -\";\n s += c.I ? \" I\" : \" -\";\n return s;\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c) + \"\\n\"\n + \" A \" + hex(c.A) + \" \" + (c.R ? \"\" : \"BUSY\") + \"\\n\"\n + \" X \" + hex(c.X) + \"\\n\"\n + \" Y \" + hex(c.Y) + \" \" + \"SP \" + hex(c.SP) + \"\\n\";\n}\n\nvar OPMETA_6502 = {\n cycletime: [\n 7, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 5, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 0, 6, 0, 6, 3, 3, 3, 3, 2, 0, 2, 0, 4, 4, 4, 4, 2, 6, 0, 0, 4, 4, 4, 4, 2, 5, 2, 0, 0, 5, 0, 0, 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 0, 4, 4, 4, 4, 2, 5, 0, 5, 4, 4, 4, 4, 2, 4, 2, 0, 4, 4, 4, 4, 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 3, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 0, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7\n ],\n extracycles: [\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1\n ],\n insnlengths: [\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 3, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 0, 2, 0, 2, 2, 2, 2, 2, 1, 0, 1, 0, 3, 3, 3, 3, 2, 2, 0, 0, 2, 2, 2, 3, 1, 3, 1, 0, 0, 3, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3\n ],\n validinsns: [\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 0, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 3, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 0, 2, 0, 0, 2, 2, 2, 0, 1, 0, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 0, 3, 0, 0, 2, 2, 2, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0\n ],\n}\n\nexport function getOpcodeMetadata_6502(opcode, address) {\n // TODO: more intelligent maximum cycles\n // TODO: must always be new object, b/c we might modify it\n return {\n opcode: opcode,\n minCycles: OPMETA_6502.cycletime[opcode],\n maxCycles: OPMETA_6502.cycletime[opcode] + OPMETA_6502.extracycles[opcode],\n insnlength: OPMETA_6502.insnlengths[opcode]\n };\n}\n\n////// Z80\n\nexport function cpuStateToLongString_Z80(c) {\n function decodeFlags(flags) {\n return printFlags(flags, [\"S\", \"Z\", , \"H\", , \"V\", \"N\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.AF) + \" \" + (c.iff1 ? \"I\" : \"-\") + (c.iff2 ? \"I\" : \"-\") + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \" IR \" + hex(c.IR, 4) + \"\\n\"\n + \"IX \" + hex(c.IX, 4) + \" IY \" + hex(c.IY, 4) + \"\\n\"\n + \"AF \" + hex(c.AF, 4) + \" BC \" + hex(c.BC, 4) + \"\\n\"\n + \"DE \" + hex(c.DE, 4) + \" HL \" + hex(c.HL, 4) + \"\\n\"\n ;\n}\n\nexport function cpuStateToLongString_SM83(c) {\n function decodeFlags(af) {\n return printFlags(af, [\"Z\", \"N\", \"H\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.AF >> 4) + \" \" + (c.ime ? \"I\" : \"-\") + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \"\\n\"\n + \"AF \" + hex(c.AF, 4) + \" BC \" + hex(c.BC, 4) + \"\\n\"\n + \"DE \" + hex(c.DE, 4) + \" HL \" + hex(c.HL, 4) + \"\\n\"\n ;\n}\n\nexport abstract class BaseZ80Platform extends BaseDebugPlatform {\n\n _cpu;\n waitCycles: number = 0;\n\n newCPU(membus: MemoryBus, iobus: MemoryBus) {\n this._cpu = new Z80();\n this._cpu.connectMemoryBus(membus);\n this._cpu.connectIOBus(iobus);\n return this._cpu;\n }\n\n getPC() { return this._cpu.getPC(); }\n getSP() { return this._cpu.getSP(); }\n isStable() { return true; }\n\n // TODO: refactor other parts into here\n runCPU(cpu, cycles: number): number {\n this._cpu = cpu; // TODO?\n this.waitCycles = 0; // TODO: needs to spill over betwenn calls\n if (this.wasBreakpointHit())\n return 0;\n var debugCond = this.getDebugCallback();\n var n = 0;\n this.waitCycles += cycles;\n while (this.waitCycles > 0) {\n if (debugCond && debugCond()) {\n debugCond = null;\n break;\n }\n var cyc = cpu.advanceInsn();\n n += cyc;\n this.waitCycles -= cyc;\n }\n return n;\n }\n\n getToolForFilename = getToolForFilename_z80;\n getDefaultExtensions() { return [\".c\", \".ns\", \".s\", \".scc\", \".sgb\", \".z\", \".wiz\"]; };\n // TODO: Z80 opcode metadata\n //this.getOpcodeMetadata = function() { }\n\n getDebugCategories() {\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_Z80(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n console.log(sp, start, end);\n return dumpStackToString(this, [], start, end, sp, 0xcd);\n }\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassembleZ80(pc, read(pc), read(pc + 1), read(pc + 2), read(pc + 3));\n }\n}\n\nexport function getToolForFilename_z80(fn: string): string {\n if (fn.endsWith(\".c\")) return \"sdcc\";\n if (fn.endsWith(\".h\")) return \"sdcc\";\n if (fn.endsWith(\".s\")) return \"sdasz80\";\n if (fn.endsWith(\".sgb\")) return \"sdasgb\";\n if (fn.endsWith(\".ns\")) return \"naken\";\n if (fn.endsWith(\".scc\")) return \"sccz80\";\n if (fn.endsWith(\".z\")) return \"zmac\";\n if (fn.endsWith(\".wiz\")) return \"wiz\";\n return \"zmac\";\n}\n\n////// 6809\n\nexport function cpuStateToLongString_6809(c) {\n function decodeFlags(flags) {\n return printFlags(flags, [\"E\", \"F\", \"H\", \"I\", \"N\", \"Z\", \"V\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.CC) + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \"\\n\"\n + \"DP \" + hex(c.DP, 2) + \"\\n\"\n + \" A \" + hex(c.A, 2) + \"\\n\"\n + \" B \" + hex(c.B, 2) + \"\\n\"\n + \" X \" + hex(c.X, 4) + \"\\n\"\n + \" Y \" + hex(c.Y, 4) + \"\\n\"\n + \" U \" + hex(c.U, 4) + \"\\n\"\n ;\n}\n\nexport function getToolForFilename_6809(fn: string): string {\n if (fn.endsWith(\".c\")) return \"cmoc\";\n if (fn.endsWith(\".h\")) return \"cmoc\";\n if (fn.endsWith(\".xasm\")) return \"xasm6809\";\n if (fn.endsWith(\".lwasm\")) return \"lwasm\";\n return \"cmoc\";\n}\n\nexport abstract class Base6809Platform extends BaseZ80Platform {\n\n newCPU(membus: MemoryBus) {\n var cpu = Object.create(CPU6809());\n cpu.init(membus.write, membus.read, 0);\n return cpu;\n }\n\n cpuStateToLongString(c: CpuState) {\n return cpuStateToLongString_6809(c);\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n // TODO: don't create new CPU\n return Object.create(CPU6809()).disasm(read(pc), read(pc + 1), read(pc + 2), read(pc + 3), read(pc + 4), pc);\n }\n getDefaultExtensions() { return [\".c\", \".lwasm\", \".xasm\"]; };\n //this.getOpcodeMetadata = function() { }\n getToolForFilename = getToolForFilename_6809;\n getDebugCategories() {\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6809(state.c);\n default: return super.getDebugInfo(category, state);\n }\n }\n}\n\n\n//TODO: how to get stack_end?\nexport function dumpStackToString(platform: Platform, mem: Uint8Array | number[], start: number, end: number, sp: number, jsrop: number, bigendian?: boolean): string {\n var s = \"\";\n var nraw = 0;\n //s = dumpRAM(mem.slice(start,start+end+1), start, end-start+1);\n function read(addr) {\n if (addr < mem.length) return mem[addr];\n else return platform.readAddress(addr);\n }\n while (sp < end) {\n sp++;\n // see if there's a JSR on the stack here\n // TODO: make work with roms and memory maps\n var addr = read(sp) + read(sp + 1) * 256;\n if (bigendian) { addr = ((addr & 0xff) << 8) | ((addr & 0xff00) >> 8) }\n var jsrofs = jsrop == 0x20 ? -2 : -3; // 6502 vs Z80\n var opcode = read(addr + jsrofs); // might be out of bounds\n if (opcode == jsrop) { // JSR\n s += \"\\n$\" + hex(sp) + \": \";\n s += hex(addr, 4) + \" \" + lookupSymbol(platform, addr, true);\n sp++;\n nraw = 0;\n } else {\n if (nraw == 0)\n s += \"\\n$\" + hex(sp) + \": \";\n s += hex(read(sp)) + \" \";\n if (++nraw == 8) nraw = 0;\n }\n }\n return s + \"\\n\";\n}\n\n// TODO: slow, funky, uses global\nexport function lookupSymbol(platform: Platform, addr: number, extra: boolean) {\n var start = addr;\n var addr2symbol = platform.debugSymbols && platform.debugSymbols.addr2symbol;\n while (addr2symbol && addr >= 0) {\n var sym = addr2symbol[addr];\n if (sym) { // return first symbol we find\n var sym = addr2symbol[addr];\n return extra ? (sym + \" + $\" + hex(start - addr)) : sym;\n }\n if (!extra) break;\n addr--;\n }\n return \"\";\n}\n\n/// new Machine platform adapters\n\nexport interface Machine extends Bus, Resettable, FrameBased, AcceptsROM, HasCPU, SavesState, SavesInputState {\n}\n\nexport function hasVideo(arg: any): arg is VideoSource {\n return typeof arg.connectVideo === 'function';\n}\nexport function hasAudio(arg: any): arg is SampledAudioSource {\n return typeof arg.connectAudio === 'function';\n}\nexport function hasKeyInput(arg: any): arg is AcceptsKeyInput {\n return typeof arg.setKeyInput === 'function';\n}\nexport function hasJoyInput(arg: any): arg is AcceptsJoyInput {\n return typeof arg.setJoyInput === 'function';\n}\nexport function hasPaddleInput(arg: any): arg is AcceptsPaddleInput {\n return typeof arg.setPaddleInput === 'function';\n}\nexport function isRaster(arg: any): arg is RasterFrameBased {\n return typeof arg.getRasterY === 'function';\n}\nexport function hasProbe(arg: any): arg is Probeable {\n return typeof arg.connectProbe == 'function';\n}\nexport function hasBIOS(arg: any): arg is AcceptsBIOS {\n return typeof arg.loadBIOS == 'function';\n}\nexport function hasSerialIO(arg: any): arg is HasSerialIO {\n return typeof arg.connectSerialIO === 'function';\n}\n\nexport abstract class BaseMachinePlatform extends BaseDebugPlatform implements Platform {\n machine: T;\n mainElement: HTMLElement;\n timer: AnimationTimer;\n video: RasterVideo;\n audio: SampledAudio;\n poller: ControllerPoller;\n serialIOInterface: SerialIOInterface;\n serialVisualizer: SerialIOVisualizer;\n\n probeRecorder: ProbeRecorder;\n startProbing;\n stopProbing;\n\n abstract newMachine(): T;\n abstract getToolForFilename(s: string): string;\n abstract getDefaultExtensions(): string[];\n abstract getPresets(): Preset[];\n\n constructor(mainElement: HTMLElement) {\n super();\n this.mainElement = mainElement;\n }\n\n reset() {\n this.machine.reset();\n if (this.serialVisualizer != null) this.serialVisualizer.reset();\n }\n loadState(s) { this.machine.loadState(s); }\n saveState() { return this.machine.saveState(); }\n getSP() { return this.machine.cpu.getSP(); }\n getPC() { return this.machine.cpu.getPC(); }\n isStable() { return this.machine.cpu.isStable(); }\n getCPUState() { return this.machine.cpu.saveState(); }\n loadControlsState(s) { this.machine.loadControlsState(s); }\n saveControlsState() { return this.machine.saveControlsState(); }\n\n async start() {\n this.machine = this.newMachine();\n const m = this.machine;\n // block on WASM loading\n if (m instanceof BaseWASMMachine) {\n await m.loadWASM();\n }\n var videoFrequency;\n if (hasVideo(m)) {\n var vp = m.getVideoParams();\n this.video = new RasterVideo(this.mainElement, vp.width, vp.height,\n {\n overscan: !!vp.overscan,\n rotate: vp.rotate | 0,\n aspect: vp.aspect\n });\n this.video.create();\n m.connectVideo(this.video.getFrameData());\n // TODO: support keyboard w/o video?\n if (hasKeyInput(m)) {\n this.video.setKeyboardEvents(m.setKeyInput.bind(m));\n this.poller = new ControllerPoller(m.setKeyInput.bind(m));\n }\n videoFrequency = vp.videoFrequency;\n }\n this.timer = new AnimationTimer(videoFrequency || 60, this.nextFrame.bind(this));\n if (hasAudio(m)) {\n var ap = m.getAudioParams();\n this.audio = new SampledAudio(ap.sampleRate);\n this.audio.start();\n m.connectAudio(this.audio);\n }\n if (hasPaddleInput(m)) {\n this.video.setupMouseEvents();\n }\n if (hasProbe(m)) {\n this.probeRecorder = new ProbeRecorder(m);\n this.startProbing = () => {\n m.connectProbe(this.probeRecorder);\n return this.probeRecorder;\n };\n this.stopProbing = () => {\n m.connectProbe(null);\n };\n }\n if (hasBIOS(m)) {\n this.loadBIOS = (title, data) => {\n m.loadBIOS(data, title);\n };\n }\n if (hasSerialIO(m)) {\n if (this.serialIOInterface == null) {\n this.serialVisualizer = new SerialIOVisualizer(this.mainElement, m);\n } else {\n m.connectSerialIO(this.serialIOInterface);\n }\n }\n }\n\n loadROM(title, data, origin?: number) {\n this.machine.loadROM(data, title, origin);\n this.reset();\n }\n\n loadBIOS: (title, data) => void; // only set if hasBIOS() is true\n\n pollControls() {\n this.poller && this.poller.poll();\n if (hasPaddleInput(this.machine)) {\n this.machine.setPaddleInput(0, this.video.paddle_x);\n this.machine.setPaddleInput(1, this.video.paddle_y);\n if (this.machine.setPaddleButton && this.video.paddle_buttons != null) {\n this.machine.setPaddleButton(0, this.video.paddle_buttons[0]);\n this.machine.setPaddleButton(1, this.video.paddle_buttons[1]);\n this.machine.setPaddleButton(2, this.video.paddle_buttons[2]);\n }\n }\n // TODO: put into interface\n if (this.machine['pollControls']) {\n this.machine['pollControls']();\n }\n }\n\n advance(novideo: boolean) {\n let trap = this.getDebugCallback();\n try {\n var steps = this.machine.advanceFrame(trap);\n return steps;\n } finally {\n // in case EmuHalt is thrown...\n if (!novideo && this.video) {\n this.video.updateFrame();\n this.updateVideoDebugger();\n }\n if (!novideo && this.serialVisualizer) {\n this.serialVisualizer.refresh();\n }\n }\n }\n\n updateVideoDebugger() {\n if (!this.isRunning() && isRaster(this.machine) && this.machine.getRasterCanvasPosition) {\n const { x, y } = this.machine.getRasterCanvasPosition();\n if (x >= 0 || y >= 0) {\n const ctx = this.video?.getContext();\n if (ctx) {\n drawCrosshair(ctx, x, y, 1);\n }\n }\n }\n }\n\n advanceFrameClock(trap, step) {\n if (!(step > 0)) return;\n if (this.machine instanceof BaseWASMMachine) {\n return this.machine.advanceFrameClock(trap, step);\n } else {\n return this.machine.advanceFrame(() => {\n return --step <= 0;\n });\n }\n }\n\n isRunning() {\n return this.timer && this.timer.isRunning();\n }\n\n resume() {\n this.timer.start();\n this.audio && this.audio.start();\n }\n\n pause() {\n this.timer.stop();\n this.audio && this.audio.stop();\n }\n\n // so probe views stick around TODO: must be a better way?\n runToVsync() {\n this.restartDebugging();\n var flag = false;\n this.runEval((): boolean => {\n if (this.getRasterScanline() > 0) flag = true;\n else return flag;\n });\n }\n\n // TODO: reset target clock counter\n getRasterScanline() {\n return isRaster(this.machine) && this.machine.getRasterY ? this.machine.getRasterY() : -1;\n }\n getRasterLineClock() {\n return isRaster(this.machine) && this.machine.getRasterX ? this.machine.getRasterX() : -1;\n }\n\n readAddress(addr: number): number {\n return this.machine.read(addr);\n }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n }\n getDebugInfo(category: string, state: EmuState): string {\n return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n}\n\n// TODO: move debug info into CPU?\n\nexport abstract class Base6502MachinePlatform extends BaseMachinePlatform {\n\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getToolForFilename(fn) { return getToolForFilename_6502(fn); }\n getDefaultExtensions() { return [\".c\", \".cpp\", \".o64\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; }\n\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassemble6502(pc, read(pc), read(pc + 1), read(pc + 2));\n }\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'ZPRAM', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6502(state.c);\n case 'ZPRAM': return dumpRAM(state.b || state.ram, 0x0, 0x100);\n case 'Stack': return dumpStackToString(this, state.b || state.ram, 0x100, 0x1ff, 0x100 + state.c.SP, 0x20);\n default: return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n }\n}\n\nexport abstract class BaseZ80MachinePlatform extends BaseMachinePlatform {\n\n //getOpcodeMetadata = getOpcodeMetadata_z80;\n getToolForFilename = getToolForFilename_z80;\n getDefaultExtensions() { return [\".c\", \".ns\", \".s\", \".scc\", \".sgb\", \".z\", \".wiz\"]; }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_Z80(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n return dumpStackToString(this, [], start, end, sp, 0xcd);\n }\n default: return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassembleZ80(pc, read(pc), read(pc + 1), read(pc + 2), read(pc + 3));\n }\n\n}\n\nexport abstract class Base6809MachinePlatform extends BaseMachinePlatform {\n\n getToolForFilename = getToolForFilename_6809;\n getDefaultExtensions() { return [\".c\", \".lwasm\", \".xasm\"]; }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6809(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n return dumpStackToString(this, [], start, end, sp, 0x17, true);\n }\n default: return super.getDebugInfo(category, state);\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n // TODO: don't create new CPU\n return Object.create(CPU6809()).disasm(read(pc), read(pc + 1), read(pc + 2), read(pc + 3), read(pc + 4), pc);\n }\n}\n\n///\n\nclass SerialIOVisualizer {\n\n textarea: HTMLTextAreaElement;\n //vlist: VirtualTextScroller;\n device: HasSerialIO;\n lastOutCount = -1;\n lastInCount = -1;\n\n constructor(parentElement: HTMLElement, device: HasSerialIO) {\n this.device = device;\n this.textarea = document.createElement(\"textarea\");\n this.textarea.classList.add('transcript');\n this.textarea.classList.add('transcript-style-2');\n this.textarea.style.display = 'none';\n parentElement.appendChild(this.textarea);\n /*\n this.vlist = new VirtualTextScroller(parentElement);\n this.vlist.create(parentElement, 1024, this.getMemoryLineAt.bind(this));\n this.vlist.maindiv.style.height = '8em';\n this.vlist.maindiv.style.overflow = 'clip';\n */\n }\n reset() {\n this.lastOutCount = 0;\n this.lastInCount = 0;\n this.textarea.style.display = 'none';\n }\n refresh() {\n var lastop = '';\n if (this.device.serialOut.length != this.lastOutCount) {\n var s = '';\n for (var ev of this.device.serialOut) {\n if (lastop != ev.op) {\n if (s != '') s += '\\n';\n if (ev.op === 'read') s += '<< ';\n else if (ev.op === 'write') s += '>> ';\n lastop = ev.op;\n }\n if (ev.value == 10) { s += '\\u21b5'; lastop = ''; }\n else { s += byteToASCII(ev.value); }\n }\n this.textarea.value = s;\n this.lastOutCount = this.device.serialOut.length;\n this.textarea.style.display = 'block';\n }\n }\n}\n"], - "mappings": "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AAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,CAChE,EAEIE,EAAkB,CAClB,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI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E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,EACzhCC,GAAQ,IAAI,WAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,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AC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAGjCC,GAAU,CACR,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAGjCC,EAAU,CACR,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE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,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE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,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAc,CAChB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAc,CAChB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAa,CACf,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,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EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,YAAa,CACX,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,YAAa,CACX,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,WAAY,CACV,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,CACF,EAEO,SAASV,GAAuBF,EAAQa,EAAS,CAG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", + "sourcesContent": ["\nimport { hex } from \"../util\";\n\nexport var OPS_6502 = [\n {mn:\"BRK\",am:\"\",nb:1,il:0,c1:7,c2:0,nw:3,br:1,mod:\"SI\"}, // 0\n {mn:\"ORA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 2\n {mn:\"SLO\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 4\n {mn:\"ORA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 5\n {mn:\"ASL\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 6\n {mn:\"SLO\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 7\n {mn:\"PHP\",am:\"\",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:\"S\"}, // 8\n {mn:\"ORA\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 9\n {mn:\"ASL\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // a\n {mn:\"ANC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // b\n {mn:\"NOP\",am:\"AAAA\",nb:3,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // c\n {mn:\"ORA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // d\n {mn:\"ASL\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // e\n {mn:\"SLO\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // f\n {mn:\"BPL\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 10\n {mn:\"ORA\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 11\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 12\n {mn:\"SLO\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 13\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 14\n {mn:\"ORA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 15\n {mn:\"ASL\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 16\n {mn:\"SLO\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 17\n {mn:\"CLC\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"C\"}, // 18\n {mn:\"ORA\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 19\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 1a\n {mn:\"SLO\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 1b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 1c\n {mn:\"ORA\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 1d\n {mn:\"ASL\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 1e\n {mn:\"SLO\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 1f\n {mn:\"JSR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:1,mod:\"S\"}, // 20\n {mn:\"AND\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 21\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 22\n {mn:\"RLA\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 23\n {mn:\"BIT\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ZVN\"}, // 24\n {mn:\"AND\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 25\n {mn:\"ROL\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 26\n {mn:\"RLA\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 27\n {mn:\"PLP\",am:\"\",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:\"SCZIDVN\"}, // 28\n {mn:\"AND\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 29\n {mn:\"ROL\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 2a\n {mn:\"ANC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 2b\n {mn:\"BIT\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ZVN\"}, // 2c\n {mn:\"AND\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 2d\n {mn:\"ROL\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 2e\n {mn:\"RLA\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 2f\n {mn:\"BMI\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 30\n {mn:\"AND\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 31\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 32\n {mn:\"RLA\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 33\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 34\n {mn:\"AND\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 35\n {mn:\"ROL\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 36\n {mn:\"RLA\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 37\n {mn:\"SEC\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"C\"}, // 38\n {mn:\"AND\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 39\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 3a\n {mn:\"RLA\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 3c\n {mn:\"AND\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 3d\n {mn:\"ROL\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 3e\n {mn:\"RLA\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 3f\n {mn:\"RTI\",am:\"\",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:\"SCZIDVN\"}, // 40\n {mn:\"EOR\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // 41\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 42\n {mn:\"SRE\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 43\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 44\n {mn:\"EOR\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // 45\n {mn:\"LSR\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 46\n {mn:\"SRE\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 47\n {mn:\"PHA\",am:\"\",nb:1,il:0,c1:3,c2:0,nw:1,br:0,mod:\"S\"}, // 48\n {mn:\"EOR\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 49\n {mn:\"LSR\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 4a\n {mn:\"ASR\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 4b\n {mn:\"JMP\",am:\"AAAA\",nb:3,il:0,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 4c\n {mn:\"EOR\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 4d\n {mn:\"LSR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 4e\n {mn:\"SRE\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 4f\n {mn:\"BVC\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 50\n {mn:\"EOR\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // 51\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 52\n {mn:\"SRE\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 53\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 54\n {mn:\"EOR\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // 55\n {mn:\"LSR\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 56\n {mn:\"SRE\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 57\n {mn:\"CLI\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"I\"}, // 58\n {mn:\"EOR\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 59\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 5a\n {mn:\"SRE\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 5b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 5c\n {mn:\"EOR\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // 5d\n {mn:\"LSR\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 5e\n {mn:\"SRE\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZN\"}, // 5f\n {mn:\"RTS\",am:\"\",nb:1,il:0,c1:6,c2:0,nw:0,br:1,mod:\"S\"}, // 60\n {mn:\"ADC\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 61\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 62\n {mn:\"RRA\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 63\n {mn:\"NOP\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"\"}, // 64\n {mn:\"ADC\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 65\n {mn:\"ROR\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // 66\n {mn:\"RRA\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 67\n {mn:\"PLA\",am:\"\",nb:1,il:0,c1:4,c2:0,nw:0,br:0,mod:\"SAZN\"}, // 68\n {mn:\"ADC\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 69\n {mn:\"ROR\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZN\"}, // 6a\n {mn:\"ARR\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 6b\n {mn:\"JMP\",am:\"(AAAA)\",nb:3,il:0,c1:5,c2:0,nw:0,br:1,mod:\"\"}, // 6c\n {mn:\"ADC\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 6d\n {mn:\"ROR\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 6e\n {mn:\"RRA\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 6f\n {mn:\"BVS\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 70\n {mn:\"ADC\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 71\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 72\n {mn:\"RRA\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 73\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 74\n {mn:\"ADC\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // 75\n {mn:\"ROR\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // 76\n {mn:\"RRA\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 77\n {mn:\"SEI\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"I\"}, // 78\n {mn:\"ADC\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 79\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 7a\n {mn:\"RRA\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 7b\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // 7c\n {mn:\"ADC\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // 7d\n {mn:\"ROR\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // 7e\n {mn:\"RRA\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // 7f\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 80\n {mn:\"STA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 81\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 82\n {mn:\"SAX\",am:\"(aa,x)\",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 83\n {mn:\"STY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 84\n {mn:\"STA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 85\n {mn:\"STX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 86\n {mn:\"SAX\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:1,br:0,mod:\"\"}, // 87\n {mn:\"DEY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // 88\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // 89\n {mn:\"TXA\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 8a\n {mn:\"ANE\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 8b\n {mn:\"STY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8c\n {mn:\"STA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8d\n {mn:\"STX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8e\n {mn:\"SAX\",am:\"AAAA\",nb:3,il:1,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 8f\n {mn:\"BCC\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // 90\n {mn:\"STA\",am:\"(aa),y\",nb:2,il:0,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 91\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // 92\n {mn:\"SHA\",am:\"(aa),y\",nb:2,il:1,c1:6,c2:0,nw:1,br:0,mod:\"\"}, // 93\n {mn:\"STY\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 94\n {mn:\"STA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 95\n {mn:\"STX\",am:\"aa,y\",nb:2,il:0,c1:4,c2:0,nw:1,br:0,mod:\"\"}, // 96\n {mn:\"SAX\",am:\"aa,y\",nb:3,il:1,c1:4,c2:0,nw:1,br:1,mod:\"\"}, // 97\n {mn:\"TYA\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // 98\n {mn:\"STA\",am:\"AAAA,y\",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 99\n {mn:\"TXS\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"S\"}, // 9a\n {mn:\"SHS\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"S\"}, // 9b\n {mn:\"SHY\",am:\"AAAA,x\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9c\n {mn:\"STA\",am:\"AAAA,x\",nb:3,il:0,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9d\n {mn:\"SHX\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9e\n {mn:\"SHA\",am:\"AAAA,y\",nb:3,il:1,c1:5,c2:0,nw:1,br:0,mod:\"\"}, // 9f\n {mn:\"LDY\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // a0\n {mn:\"LDA\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"AZN\"}, // a1\n {mn:\"LDX\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // a2\n {mn:\"LAX\",am:\"(aa,x)\",nb:2,il:1,c1:6,c2:0,nw:0,br:0,mod:\"AXZN\"}, // a3\n {mn:\"LDY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"YZN\"}, // a4\n {mn:\"LDA\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"AZN\"}, // a5\n {mn:\"LDX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"XZN\"}, // a6\n {mn:\"LAX\",am:\"aa\",nb:2,il:1,c1:3,c2:0,nw:0,br:0,mod:\"AXZN\"}, // a7\n {mn:\"TAY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // a8\n {mn:\"LDA\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"AZN\"}, // a9\n {mn:\"TAX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // aa\n {mn:\"LXA\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"AXZN\"}, // ab\n {mn:\"LDY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"YZN\"}, // ac\n {mn:\"LDA\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // ad\n {mn:\"LDX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"XZN\"}, // ae\n {mn:\"LAX\",am:\"AAAA\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"AXZN\"}, // af\n {mn:\"BCS\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // b0\n {mn:\"LDA\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"AZN\"}, // b1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // b2\n {mn:\"LAX\",am:\"(aa),y\",nb:2,il:1,c1:5,c2:1,nw:0,br:0,mod:\"AXZN\"}, // b3\n {mn:\"LDY\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"YZN\"}, // b4\n {mn:\"LDA\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"AZN\"}, // b5\n {mn:\"LDX\",am:\"aa,y\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"XZN\"}, // b6\n {mn:\"LAX\",am:\"aa,y\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"AXZN\"}, // b7\n {mn:\"CLV\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"V\"}, // b8\n {mn:\"LDA\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // b9\n {mn:\"TSX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // ba\n {mn:\"LAS\",am:\"AAAA,y\",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:\"SAXZN\"}, // bb\n {mn:\"LDY\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"YZN\"}, // bc\n {mn:\"LDA\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"AZN\"}, // bd\n {mn:\"LDX\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"XZN\"}, // be\n {mn:\"LAX\",am:\"AAAA,y\",nb:3,il:1,c1:4,c2:1,nw:0,br:0,mod:\"AXZN\"}, // bf\n {mn:\"CPY\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // c0\n {mn:\"CMP\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"CZN\"}, // c1\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // c2\n {mn:\"DCP\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"CZN\"}, // c3\n {mn:\"CPY\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // c4\n {mn:\"CMP\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // c5\n {mn:\"DEC\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"ZN\"}, // c6\n {mn:\"DCP\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"CZN\"}, // c7\n {mn:\"INY\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"YZN\"}, // c8\n {mn:\"CMP\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // c9\n {mn:\"DEX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // ca\n {mn:\"SBX\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"XCZN\"}, // cb\n {mn:\"CPY\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // cc\n {mn:\"CMP\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // cd\n {mn:\"DEC\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // ce\n {mn:\"DCP\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // cf\n {mn:\"BNE\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // d0\n {mn:\"CMP\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"CZN\"}, // d1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // d2\n {mn:\"DCP\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"CZN\"}, // d3\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // d4\n {mn:\"CMP\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // d5\n {mn:\"DEC\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // d6\n {mn:\"DCP\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"CZN\"}, // d7\n {mn:\"CLD\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"D\"}, // d8\n {mn:\"CMP\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"CZN\"}, // d9\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // da\n {mn:\"DCP\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // db\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // dc\n {mn:\"CMP\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"CZN\"}, // dd\n {mn:\"DEC\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"ZN\"}, // de\n {mn:\"DCP\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"CZN\"}, // df\n {mn:\"CPX\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"CZN\"}, // e0\n {mn:\"SBC\",am:\"(aa,x)\",nb:2,il:0,c1:6,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e1\n {mn:\"NOP\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // e2\n {mn:\"ISB\",am:\"(aa,x)\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // e3\n {mn:\"CPX\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"CZN\"}, // e4\n {mn:\"SBC\",am:\"aa\",nb:2,il:0,c1:3,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e5\n {mn:\"INC\",am:\"aa\",nb:2,il:0,c1:5,c2:0,nw:2,br:0,mod:\"ZN\"}, // e6\n {mn:\"ISB\",am:\"aa\",nb:2,il:1,c1:5,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // e7\n {mn:\"INX\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"XZN\"}, // e8\n {mn:\"SBC\",am:\"#aa\",nb:2,il:0,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // e9\n {mn:\"NOP\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // ea\n {mn:\"SBC\",am:\"#aa\",nb:2,il:1,c1:2,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // eb\n {mn:\"CPX\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"CZN\"}, // ec\n {mn:\"SBC\",am:\"AAAA\",nb:3,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // ed\n {mn:\"INC\",am:\"AAAA\",nb:3,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // ee\n {mn:\"ISB\",am:\"AAAA\",nb:3,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // ef\n {mn:\"BEQ\",am:\"branch\",nb:2,il:0,c1:2,c2:2,nw:0,br:1,mod:\"\"}, // f0\n {mn:\"SBC\",am:\"(aa),y\",nb:2,il:0,c1:5,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // f1\n {mn:\"KIL\",am:\"\",nb:1,il:2,c1:3,c2:0,nw:0,br:1,mod:\"\"}, // f2\n {mn:\"ISB\",am:\"(aa),y\",nb:2,il:1,c1:8,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // f3\n {mn:\"NOP\",am:\"aa,x\",nb:2,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // f4\n {mn:\"SBC\",am:\"aa,x\",nb:2,il:0,c1:4,c2:0,nw:0,br:0,mod:\"ACZVN\"}, // f5\n {mn:\"INC\",am:\"aa,x\",nb:2,il:0,c1:6,c2:0,nw:2,br:0,mod:\"ZN\"}, // f6\n {mn:\"ISB\",am:\"aa,x\",nb:2,il:1,c1:6,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // f7\n {mn:\"SED\",am:\"\",nb:1,il:0,c1:2,c2:0,nw:0,br:0,mod:\"D\"}, // f8\n {mn:\"SBC\",am:\"AAAA,y\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // f9\n {mn:\"NOP\",am:\"\",nb:1,il:1,c1:2,c2:0,nw:0,br:0,mod:\"\"}, // fa\n {mn:\"ISB\",am:\"AAAA,y\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // fb\n {mn:\"NOP\",am:\"AAAA,x\",nb:3,il:1,c1:4,c2:0,nw:0,br:0,mod:\"\"}, // fc\n {mn:\"SBC\",am:\"AAAA,x\",nb:3,il:0,c1:4,c2:1,nw:0,br:0,mod:\"ACZVN\"}, // fd\n {mn:\"INC\",am:\"AAAA,x\",nb:3,il:0,c1:7,c2:0,nw:2,br:0,mod:\"ZN\"}, // fe\n {mn:\"ISB\",am:\"AAAA,x\",nb:3,il:1,c1:7,c2:0,nw:2,br:0,mod:\"ACZVN\"}, // ff\n];\n\nexport function disassemble6502(pc:number, b0:number, b1:number, b2:number) : {line:string, nbytes:number, isaddr:boolean} {\n\n var op = OPS_6502[b0];\n if (op == null) return {line:\"???\", nbytes:1, isaddr:false};\n var s = op.mn;\n var am = op.am;\n var isaddr = false;\n if (am == 'branch') {\n var offset = (b1 < 0x80) ? (pc+2+b1) : (pc+2-(256-b1));\n offset &= 0xffff;\n am = '$'+hex(offset, 4);\n isaddr = true;\n } else {\n am = am.replace('aa','$'+hex(b1, 2));\n am = am.replace('AAAA','$'+hex(b1+(b2<<8), 4));\n if (am.indexOf('#') < 0 && am.indexOf('$') >= 0)\n isaddr = true;\n }\n return {line:op.mn + \" \" + am, nbytes:op.nb, isaddr:isaddr};\n};\n", "// Generated by CoffeeScript 1.9.3\n\nimport { CPU, Bus, InstructionBased, IOBusConnected, SavesState, Interruptable } from \"../devices\";\n\n///////////////////////////////////////////////////////////////////////////////\n/// @file Z80.js\n///\n/// @brief Emulator for the Zilog Z80 microprocessor\n///\n/// @author Matthew Howell\n///\n/// @remarks\n/// This module is a simple, straightforward instruction interpreter.\n/// There is no fancy dynamic recompilation or cycle-accurate emulation.\n/// The author believes that this should be sufficient for any emulator that\n/// would be feasible to write in JavaScript anyway.\n/// The code and the comments in this file assume that the reader is familiar\n/// with the Z80 architecture. If you're not, here are some references I use:\n/// http://clrhome.org/table/ - Z80 instruction set tables\n/// http://www.zilog.com/docs/z80/um0080.pdf - The official manual\n/// http://www.myquest.nl/z80undocumented/z80-documented-v0.91.pdf\n/// - The Undocumented Z80, Documented\n///\n/// @copyright (c) 2013 Matthew Howell\n/// This code is released under the MIT license,\n/// a copy of which is available in the associated README.md file,\n/// or at http://opensource.org/licenses/MIT\n///////////////////////////////////////////////////////////////////////////////\n\n///////////////////////////////////////////////////////////////////////////////\n/// We'll begin with the object constructor and the public API functions.\n///////////////////////////////////////////////////////////////////////////////\nfunction FastZ80(coreParameter)\n{\n // Obviously we'll be needing the core object's functions again.\n const core = coreParameter;\n \n // The argument to this constructor should be an object containing 4 functions:\n // mem_read(address) should return the byte at the given memory address,\n // mem_write(address, value) should write the given value to the given memory address,\n // io_read(port) should read a return a byte read from the given I/O port,\n // io_write(port, value) should write the given byte to the given I/O port.\n // If any of those functions is missing, this module cannot run.\n if (!core || (typeof core.mem_read !== \"function\") || (typeof core.mem_write !== \"function\") ||\n (typeof core.io_read !== \"function\") || (typeof core.io_write !== \"function\"))\n throw(\"Z80: Core object is missing required functions.\");\n \n // All right, let's initialize the registers.\n // First, the standard 8080 registers.\n let a = 0x00;\n let b = 0x00;\n let c = 0x00;\n let d = 0x00;\n let e = 0x00;\n let h = 0x00;\n let l = 0x00;\n // Now the special Z80 copies of the 8080 registers\n // (the ones used for the SWAP instruction and such).\n let a_prime = 0x00;\n let b_prime = 0x00;\n let c_prime = 0x00;\n let d_prime = 0x00;\n let e_prime = 0x00;\n let h_prime = 0x00;\n let l_prime = 0x00;\n // And now the Z80 index registers.\n let ix = 0x0000;\n let iy = 0x0000;\n // Then the \"utility\" registers: the interrupt vector,\n // the memory refresh, the stack pointer, and the program counter.\n let i = 0x00;\n let r = 0x00;\n let sp = 0x0000; // Changed from 0xdff0 - SP should be undefined at reset, program must initialize it\n let pc = 0x0000;\n // We don't keep an F register for the flags,\n // because most of the time we're only accessing a single flag,\n // so we optimize for that case and use utility functions\n // for the rarer occasions when we need to access the whole register.\n let flags = {S:0, Z:0, Y:0, H:0, X:0, P:0, N:0, C:0};\n let flags_prime = {S:0, Z:0, Y:0, H:0, X:0, P:0, N:0, C:0};\n // And finally we have the interrupt mode and flip-flop registers.\n let imode = 0;\n let iff1 = 0;\n let iff2 = 0;\n \n // These are all specific to this implementation, not Z80 features.\n // Keep track of whether we've had a HALT instruction called.\n let halted = false;\n // EI and DI wait one instruction before they take effect;\n // these flags tell us when we're in that wait state.\n let do_delayed_di = false;\n let do_delayed_ei = false;\n // This tracks the number of cycles spent in a single instruction run,\n // including processing any prefixes and handling interrupts.\n let cycle_counter = 0;\n \n function getState():Z80State {\n return {\n PC:pc,\n SP:sp,\n IX:ix,\n IY:iy,\n AF:(a<<8)+get_flags_register(),\n BC:(b<<8)+c,\n DE:(d<<8)+e,\n HL:(h<<8)+l,\n AF_:(a_prime<<8)+get_flags_prime(),\n BC_:(b_prime<<8)+c_prime,\n DE_:(d_prime<<8)+e_prime,\n HL_:(h_prime<<8)+l_prime,\n IR:(i<<8)+r,\n im : imode,\n iff1 : iff1,\n iff2 : iff2,\n halted : halted,\n do_delayed_di : do_delayed_di,\n do_delayed_ei : do_delayed_ei,\n cycle_counter : cycle_counter\n }; \n }\n\n function setState(state:Z80State) {\n pc = state.PC;\n sp = state.SP;\n ix = state.IX;\n iy = state.IY;\n a = (state.AF >> 8) & 0xff;\n set_flags_register(state.AF);\n b = (state.BC >> 8) & 0xff;\n c = state.BC & 0xff;\n d = (state.DE >> 8) & 0xff;\n e = state.DE & 0xff;\n h = (state.HL >> 8) & 0xff;\n l = state.HL & 0xff;\n a_prime = (state.AF_ >> 8) & 0xff;\n set_flags_prime(state.AF_);\n b_prime = (state.BC_ >> 8) & 0xff;\n c_prime = state.BC_ & 0xff;\n d_prime = (state.DE_ >> 8) & 0xff;\n e_prime = state.DE_ & 0xff;\n h_prime = (state.HL_ >> 8) & 0xff;\n l_prime = state.HL_ & 0xff;\n i = (state.IR >> 8) & 0xff;\n r = state.IR & 0xff;\n imode = state.im;\n iff1 = state.iff1;\n iff2 = state.iff2;\n halted = state.halted;\n do_delayed_di = state.do_delayed_di;\n do_delayed_ei = state.do_delayed_ei;\n cycle_counter = state.cycle_counter;\n }\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public reset\n///\n/// @brief Re-initialize the processor as if a reset or power on had occured\n///////////////////////////////////////////////////////////////////////////////\nlet reset = function()\n{\n // These registers are the ones that have predictable states\n // immediately following a power-on or a reset.\n // The others are left alone, because their states are unpredictable.\n sp = 0x0000;\n pc = 0x0000;\n a = 0x00;\n r = 0x00;\n set_flags_register(0);\n // Start up with interrupts disabled.\n imode = 0;\n iff1 = 0;\n iff2 = 0;\n // Don't start halted or in a delayed DI or EI.\n halted = false;\n do_delayed_di = false;\n do_delayed_ei = false;\n // Obviously we've not used any cycles yet.\n cycle_counter = 0;\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public run_instruction\n///\n/// @brief Runs a single instruction\n///\n/// @return The number of T cycles the instruction took to run,\n/// plus any time that went into handling interrupts that fired\n/// while this instruction was executing\n///////////////////////////////////////////////////////////////////////////////\nlet run_instruction = function()\n{\n if (!halted)\n {\n // If the previous instruction was a DI or an EI,\n // we'll need to disable or enable interrupts\n // after whatever instruction we're about to run is finished.\n var doing_delayed_di = false, doing_delayed_ei = false;\n if (do_delayed_di)\n {\n do_delayed_di = false;\n doing_delayed_di = true;\n }\n else if (do_delayed_ei)\n {\n do_delayed_ei = false;\n doing_delayed_ei = true;\n }\n\n // R is incremented at the start of every instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n // Read the byte at the PC and run the instruction it encodes.\n var opcode = core.mem_read(pc);\n decode_instruction(opcode);\n pc = (pc + 1) & 0xffff;\n \n // Actually do the delayed interrupt disable/enable if we have one.\n if (doing_delayed_di)\n {\n iff1 = 0;\n iff2 = 0;\n //console.log(\"DI\",pc);\n }\n else if (doing_delayed_ei)\n {\n iff1 = 1;\n iff2 = 1;\n //console.log(\"EI\",pc);\n }\n \n // And finally clear out the cycle counter for the next instruction\n // before returning it to the emulator core.\n var retval = cycle_counter;\n cycle_counter = 0;\n return retval;\n }\n else\n {\n // While we're halted, claim that we spent a cycle doing nothing,\n // so that the rest of the emulator can still proceed.\n return 1;\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// @public interrupt\n///\n/// @brief Simulates pulsing the processor's INT (or NMI) pin\n///\n/// @param non_maskable - true if this is a non-maskable interrupt\n/// @param data - the value to be placed on the data bus, if needed\n///////////////////////////////////////////////////////////////////////////////\nlet interrupt = function(non_maskable:boolean, data:number) : boolean\n{\n //console.log(non_maskable, data, iff1, iff2, do_delayed_ei, do_delayed_di);\n if (non_maskable)\n {\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n // Non-maskable interrupts are always handled the same way;\n // clear IFF1 and then do a CALL 0x0066.\n // Also, all interrupts reset the HALT state.\n halted = false;\n iff2 = iff1;\n iff1 = 0;\n push_word(pc);\n pc = 0x66;\n cycle_counter += 11;\n return true;\n }\n else if (iff1)\n {\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n halted = false;\n iff1 = 0;\n iff2 = 0;\n \n if (imode === 0)\n {\n // In the 8080-compatible interrupt mode,\n // decode the content of the data bus as an instruction and run it.\n pc = (pc - 1) & 0xffff; //SEH: so do_reset() pushes right value\n decode_instruction(data);\n pc = (pc + 1) & 0xffff; //SEH: so do_reset() pushes right value\n cycle_counter += 2;\n }\n else if (imode === 1)\n {\n // Mode 1 is always just RST 0x38.\n push_word(pc);\n pc = 0x38;\n cycle_counter += 13;\n }\n else if (imode === 2)\n {\n // Mode 2 uses the value on the data bus as in index\n // into the vector table pointer to by the I register.\n push_word(pc);\n // The Z80 manual says that this address must be 2-byte aligned,\n // but it doesn't appear that this is actually the case on the hardware,\n // so we don't attempt to enforce that here.\n var vector_address = ((i << 8) | data);\n pc = core.mem_read(vector_address) | \n (core.mem_read((vector_address + 1) & 0xffff) << 8);\n \n cycle_counter += 19;\n }\n //console.log(imode,data,pc);\n return true;\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// The public API functions end here.\n///\n/// What begins here are just general utility functions, used variously.\n///////////////////////////////////////////////////////////////////////////////\nlet decode_instruction = function(opcode)\n{\n // The register-to-register loads and ALU instructions\n // are all so uniform that we can decode them directly\n // instead of going into the instruction array for them.\n // This function gets the operand for all of these instructions.\n var get_operand = function(opcode)\n {\n return ((opcode & 0x07) === 0) ? b :\n ((opcode & 0x07) === 1) ? c :\n ((opcode & 0x07) === 2) ? d :\n ((opcode & 0x07) === 3) ? e :\n ((opcode & 0x07) === 4) ? h :\n ((opcode & 0x07) === 5) ? l :\n ((opcode & 0x07) === 6) ? core.mem_read(l | (h << 8)) : a;\n };\n\n // Handle HALT right up front, because it fouls up our LD decoding\n // by falling where LD (HL), (HL) ought to be.\n if (opcode === 0x76)\n {\n halted = true;\n }\n else if ((opcode >= 0x40) && (opcode < 0x80))\n {\n // This entire range is all 8-bit register loads.\n // Get the operand and assign it to the correct destination.\n var operand = get_operand(opcode);\n \n if (((opcode & 0x38) >>> 3) === 0)\n b = operand;\n else if (((opcode & 0x38) >>> 3) === 1)\n c = operand;\n else if (((opcode & 0x38) >>> 3) === 2)\n d = operand;\n else if (((opcode & 0x38) >>> 3) === 3)\n e = operand;\n else if (((opcode & 0x38) >>> 3) === 4)\n h = operand;\n else if (((opcode & 0x38) >>> 3) === 5)\n l = operand;\n else if (((opcode & 0x38) >>> 3) === 6)\n core.mem_write(l | (h << 8), operand);\n else if (((opcode & 0x38) >>> 3) === 7)\n a = operand;\n }\n else if ((opcode >= 0x80) && (opcode < 0xc0))\n {\n // These are the 8-bit register ALU instructions.\n // We'll get the operand and then use this \"jump table\"\n // to call the correct utility function for the instruction.\n var operand = get_operand(opcode),\n op_array = [do_add, do_adc, do_sub, do_sbc,\n do_and, do_xor, do_or, do_cp];\n \n op_array[(opcode & 0x38) >>> 3]( operand);\n }\n else\n {\n // This is one of the less formulaic instructions;\n // we'll get the specific function for it from our array.\n var func = instructions[opcode];\n func();\n }\n \n // Update the cycle counter with however many cycles\n // the base instruction took.\n // If this was a prefixed instruction, then\n // the prefix handler has added its extra cycles already.\n cycle_counter += cycle_counts[opcode];\n};\n\nlet get_signed_offset_byte = function(value)\n{\n // This function requires some explanation.\n // We just use JavaScript Number variables for our registers,\n // not like a typed array or anything.\n // That means that, when we have a byte value that's supposed\n // to represent a signed offset, the value we actually see\n // isn't signed at all, it's just a small integer.\n // So, this function converts that byte into something JavaScript\n // will recognize as signed, so we can easily do arithmetic with it.\n // First, we clamp the value to a single byte, just in case.\n value &= 0xff;\n // We don't have to do anything if the value is positive.\n if (value & 0x80)\n {\n // But if the value is negative, we need to manually un-two's-compliment it.\n // I'm going to assume you can figure out what I meant by that,\n // because I don't know how else to explain it.\n // We could also just do value |= 0xffffff00, but I prefer\n // not caring how many bits are in the integer representation\n // of a JavaScript number in the currently running browser.\n value = -((0xff & ~value) + 1);\n }\n return value;\n};\n\nlet get_flags_register = function()\n{\n // We need the whole F register for some reason.\n // probably a PUSH AF instruction,\n // so make the F register out of our separate flags.\n return (flags.S << 7) |\n (flags.Z << 6) |\n (flags.Y << 5) |\n (flags.H << 4) |\n (flags.X << 3) |\n (flags.P << 2) |\n (flags.N << 1) |\n (flags.C);\n};\n\nlet get_flags_prime = function()\n{\n // This is the same as the above for the F' register.\n return (flags_prime.S << 7) |\n (flags_prime.Z << 6) |\n (flags_prime.Y << 5) |\n (flags_prime.H << 4) |\n (flags_prime.X << 3) |\n (flags_prime.P << 2) |\n (flags_prime.N << 1) |\n (flags_prime.C);\n};\n\nlet set_flags_register = function(operand)\n{\n // We need to set the F register, probably for a POP AF,\n // so break out the given value into our separate flags.\n flags.S = (operand & 0x80) >>> 7;\n flags.Z = (operand & 0x40) >>> 6;\n flags.Y = (operand & 0x20) >>> 5;\n flags.H = (operand & 0x10) >>> 4;\n flags.X = (operand & 0x08) >>> 3;\n flags.P = (operand & 0x04) >>> 2;\n flags.N = (operand & 0x02) >>> 1;\n flags.C = (operand & 0x01);\n};\n\nlet set_flags_prime = function(operand)\n{\n // Again, this is the same as the above for F'.\n flags_prime.S = (operand & 0x80) >>> 7;\n flags_prime.Z = (operand & 0x40) >>> 6;\n flags_prime.Y = (operand & 0x20) >>> 5;\n flags_prime.H = (operand & 0x10) >>> 4;\n flags_prime.X = (operand & 0x08) >>> 3;\n flags_prime.P = (operand & 0x04) >>> 2;\n flags_prime.N = (operand & 0x02) >>> 1;\n flags_prime.C = (operand & 0x01);\n};\n\nlet update_xy_flags = function(result)\n{\n // Most of the time, the undocumented flags\n // (sometimes called X and Y, or 3 and 5),\n // take their values from the corresponding bits\n // of the result of the instruction,\n // or from some other related value.\n // This is a utility function to set those flags based on those bits.\n flags.Y = (result & 0x20) >>> 5;\n flags.X = (result & 0x08) >>> 3;\n};\n\nlet get_parity = function(value)\n{\n // We could try to actually calculate the parity every time,\n // but why calculate what you can pre-calculate?\n var parity_bits = [\n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,\n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, \n 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1\n ];\n return parity_bits[value];\n};\n\nlet push_word = function(operand)\n{\n // Pretty obvious what this function does; given a 16-bit value,\n // decrement the stack pointer, write the high byte to the new\n // stack pointer location, then repeat for the low byte.\n sp = (sp - 1) & 0xffff;\n core.mem_write(sp, (operand & 0xff00) >>> 8);\n sp = (sp - 1) & 0xffff;\n core.mem_write(sp, operand & 0x00ff);\n};\n\nlet pop_word = function()\n{\n // Again, not complicated; read a byte off the top of the stack,\n // increment the stack pointer, rinse and repeat.\n var retval = core.mem_read(sp) & 0xff;\n sp = (sp + 1) & 0xffff;\n retval |= core.mem_read(sp) << 8;\n sp = (sp + 1) & 0xffff;\n return retval;\n};\n\n///////////////////////////////////////////////////////////////////////////////\n/// Now, the way most instructions work in this emulator is that they set up\n/// their operands according to their addressing mode, and then they call a\n/// utility function that handles all variations of that instruction.\n/// Those utility functions begin here.\n///////////////////////////////////////////////////////////////////////////////\nlet do_conditional_absolute_jump = function(condition)\n{\n // This function implements the JP [condition],nn instructions.\n if (condition)\n {\n // We're taking this jump, so write the new PC,\n // and then decrement the thing we just wrote,\n // because the instruction decoder increments the PC\n // unconditionally at the end of every instruction\n // and we need to counteract that so we end up at the jump target.\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n }\n else\n {\n // We're not taking this jump, just move the PC past the operand.\n pc = (pc + 2) & 0xffff;\n }\n};\n\nlet do_conditional_relative_jump = function(condition)\n{\n // This function implements the JR [condition],n instructions.\n if (condition)\n {\n // We need a few more cycles to actually take the jump.\n cycle_counter += 5;\n // Calculate the offset specified by our operand.\n var offset = get_signed_offset_byte(core.mem_read((pc + 1) & 0xffff));\n // Add the offset to the PC, also skipping past this instruction.\n pc = (pc + offset + 1) & 0xffff;\n }\n else\n {\n // No jump happening, just skip the operand.\n pc = (pc + 1) & 0xffff;\n }\n};\n\nlet do_conditional_call = function(condition)\n{\n // This function is the CALL [condition],nn instructions.\n // If you've seen the previous functions, you know this drill.\n if (condition)\n {\n cycle_counter += 7;\n push_word((pc + 3) & 0xffff);\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n }\n else\n {\n pc = (pc + 2) & 0xffff;\n }\n};\n\nlet do_conditional_return = function(condition)\n{\n if (condition)\n {\n cycle_counter += 6;\n pc = (pop_word() - 1) & 0xffff;\n }\n};\n\nlet do_reset = function(address)\n{\n // The RST [address] instructions go through here.\n push_word((pc + 1) & 0xffff);\n pc = (address - 1) & 0xffff;\n};\n\nlet do_add = function(operand)\n{\n // This is the ADD A, [operand] instructions.\n // We'll do the literal addition, which includes any overflow,\n // so that we can more easily figure out whether we had\n // an overflow or a carry and set the flags accordingly.\n var result = a + operand;\n \n // The great majority of the work for the arithmetic instructions\n // turns out to be setting the flags rather than the actual operation.\n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((operand & 0x0f) + (a & 0x0f)) & 0x10) ? 1 : 0;\n // An overflow has happened if the sign bits of the accumulator and the operand\n // don't match the sign bit of the result value.\n flags.P = ((a & 0x80) === (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_adc = function(operand)\n{\n var result = a + operand + flags.C;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((operand & 0x0f) + (a & 0x0f) + flags.C) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) === (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_sub = function(operand)\n{\n var result = a - operand;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((a & 0x0f) - (operand & 0x0f)) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) !== (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_sbc = function(operand)\n{\n var result = a - operand - flags.C;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = (((a & 0x0f) - (operand & 0x0f) - flags.C) & 0x10) ? 1 : 0;\n flags.P = ((a & 0x80) !== (operand & 0x80)) && ((a & 0x80) !== (result & 0x80)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x100) ? 1 : 0;\n \n a = result & 0xff;\n update_xy_flags(a);\n};\n\nlet do_cp = function(operand)\n{\n // A compare instruction is just a subtraction that doesn't save the value,\n // so we implement it as... a subtraction that doesn't save the value.\n var temp = a;\n do_sub(operand);\n a = temp;\n // Since this instruction has no \"result\" value, the undocumented flags\n // are set based on the operand instead.\n update_xy_flags(operand);\n};\n\nlet do_and = function(operand)\n{\n // The logic instructions are all pretty straightforward.\n a &= operand & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 1;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_or = function(operand)\n{\n a = (operand | a) & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 0;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_xor = function(operand)\n{\n a = (operand ^ a) & 0xff;\n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = 0;\n flags.P = get_parity(a);\n flags.N = 0;\n flags.C = 0;\n update_xy_flags(a);\n};\n\nlet do_inc = function(operand)\n{\n var result = operand + 1;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = ((operand & 0x0f) === 0x0f) ? 1 : 0;\n // It's a good deal easier to detect overflow for an increment/decrement.\n flags.P = (operand === 0x7f) ? 1 : 0;\n flags.N = 0;\n \n result &= 0xff;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_dec = function(operand)\n{\n var result = operand - 1;\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = !(result & 0xff) ? 1 : 0;\n flags.H = ((operand & 0x0f) === 0x00) ? 1 : 0;\n flags.P = (operand === 0x80) ? 1 : 0;\n flags.N = 1;\n \n result &= 0xff;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_hl_add = function(operand)\n{\n // The HL arithmetic instructions are the same as the A ones,\n // just with twice as many bits happening.\n var hl = l | (h << 8), result = hl + operand;\n \n flags.N = 0;\n flags.C = (result & 0x10000) ? 1 : 0;\n flags.H = (((hl & 0x0fff) + (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n\n update_xy_flags(h);\n};\n\nlet do_hl_adc = function(operand)\n{\n operand += flags.C;\n var hl = l | (h << 8), result = hl + operand;\n \n flags.S = (result & 0x8000) ? 1 : 0;\n flags.Z = !(result & 0xffff) ? 1 : 0;\n flags.H = (((hl & 0x0fff) + (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n flags.P = ((hl & 0x8000) === (operand & 0x8000)) && ((result & 0x8000) !== (hl & 0x8000)) ? 1 : 0;\n flags.N = 0;\n flags.C = (result & 0x10000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result >>> 8) & 0xff;\n \n update_xy_flags(h);\n};\n\nlet do_hl_sbc = function(operand)\n{\n operand += flags.C;\n var hl = l | (h << 8), result = hl - operand;\n \n flags.S = (result & 0x8000) ? 1 : 0;\n flags.Z = !(result & 0xffff) ? 1 : 0;\n flags.H = (((hl & 0x0fff) - (operand & 0x0fff)) & 0x1000) ? 1 : 0;\n flags.P = ((hl & 0x8000) !== (operand & 0x8000)) && ((result & 0x8000) !== (hl & 0x8000)) ? 1 : 0;\n flags.N = 1;\n flags.C = (result & 0x10000) ? 1 : 0;\n \n l = result & 0xff;\n h = (result >>> 8) & 0xff;\n \n update_xy_flags(h);\n};\n\nlet do_in = function(port)\n{\n var result = core.io_read(port);\n \n flags.S = (result & 0x80) ? 1 : 0;\n flags.Z = result ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(result) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(result);\n \n return result;\n};\n\nlet do_neg = function()\n{\n // This instruction is defined to not alter the register if it === 0x80.\n if (a !== 0x80)\n {\n // This is a signed operation, so convert A to a signed value.\n a = get_signed_offset_byte(a);\n \n a = (-a) & 0xff;\n }\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = !a ? 1 : 0;\n flags.H = (((-a) & 0x0f) > 0) ? 1 : 0;\n flags.P = (a === 0x80) ? 1 : 0;\n flags.N = 1;\n flags.C = a ? 1 : 0;\n update_xy_flags(a);\n};\n\nlet do_ldi = function()\n{\n // Copy the value that we're supposed to copy.\n var read_value = core.mem_read(l | (h << 8));\n core.mem_write(e | (d << 8), read_value);\n \n // Increment DE and HL, and decrement BC.\n var result = (e | (d << 8)) + 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.H = 0;\n flags.P = (c || b) ? 1 : 0;\n flags.N = 0;\n flags.Y = ((a + read_value) & 0x02) >>> 1;\n flags.X = ((a + read_value) & 0x08) >>> 3;\n};\n\nlet do_cpi = function()\n{\n var temp_carry = flags.C;\n var read_value = core.mem_read(l | (h << 8))\n do_cp(read_value);\n flags.C = temp_carry;\n flags.Y = ((a - read_value - flags.H) & 0x02) >>> 1;\n flags.X = ((a - read_value - flags.H) & 0x08) >>> 3;\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = result ? 1 : 0;\n};\n\nlet do_ini = function()\n{\n b = do_dec(b);\n \n core.mem_write(l | (h << 8), core.io_read((b << 8) | c));\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n\n flags.N = 1;\n};\n\nlet do_outi = function()\n{\n core.io_write((b << 8) | c, core.mem_read(l | (h << 8)));\n \n var result = (l | (h << 8)) + 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n b = do_dec(b);\n flags.N = 1;\n};\n\nlet do_ldd = function()\n{\n flags.N = 0;\n flags.H = 0;\n \n var read_value = core.mem_read(l | (h << 8));\n core.mem_write(e | (d << 8), read_value);\n \n var result = (e | (d << 8)) - 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = (c || b) ? 1 : 0;\n flags.Y = ((a + read_value) & 0x02) >>> 1;\n flags.X = ((a + read_value) & 0x08) >>> 3;\n};\n\nlet do_cpd = function()\n{\n var temp_carry = flags.C\n var read_value = core.mem_read(l | (h << 8))\n do_cp(read_value);\n flags.C = temp_carry;\n flags.Y = ((a - read_value - flags.H) & 0x02) >>> 1;\n flags.X = ((a - read_value - flags.H) & 0x08) >>> 3;\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n result = (c | (b << 8)) - 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n \n flags.P = result ? 1 : 0;\n};\n\nlet do_ind = function()\n{\n b = do_dec(b);\n \n core.mem_write(l | (h << 8), core.io_read((b << 8) | c));\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n flags.N = 1;\n};\n\nlet do_outd = function()\n{\n core.io_write((b << 8) | c, core.mem_read(l | (h << 8)));\n \n var result = (l | (h << 8)) - 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n \n b = do_dec(b);\n flags.N = 1;\n};\n\nlet do_rlc = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) | flags.C) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_rrc = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (flags.C << 7);\n \n flags.Z = !(operand & 0xff) ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand & 0xff;\n};\n\nlet do_rl = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n var temp = flags.C;\n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) | temp) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n\n return operand;\n};\n\nlet do_rr = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n var temp = flags.C;\n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (temp << 7);\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n\n return operand;\n};\n\nlet do_sla = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = (operand << 1) & 0xff;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_sra = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = ((operand >>> 1) & 0x7f) | (operand & 0x80);\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_sll = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = (operand & 0x80) >>> 7;\n operand = ((operand << 1) & 0xff) | 1;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = (operand & 0x80) ? 1 : 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_srl = function(operand)\n{\n flags.N = 0;\n flags.H = 0;\n \n flags.C = operand & 1;\n operand = (operand >>> 1) & 0x7f;\n \n flags.Z = !operand ? 1 : 0;\n flags.P = get_parity(operand);\n flags.S = 0;\n update_xy_flags(operand);\n \n return operand;\n};\n\nlet do_ix_add = function(operand)\n{\n flags.N = 0;\n \n var result = ix + operand;\n \n flags.C = (result & 0x10000) ? 1 : 0;\n flags.H = (((ix & 0xfff) + (operand & 0xfff)) & 0x1000) ? 1 : 0;\n update_xy_flags((result & 0xff00) >>> 8);\n \n ix = result & 0xffff;\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// This table contains the implementations for the instructions that weren't\n/// implemented directly in the decoder function (everything but the 8-bit\n/// register loads and the accumulator ALU instructions, in other words).\n/// Similar tables for the ED and DD/FD prefixes follow this one.\n///////////////////////////////////////////////////////////////////////////////\nlet instructions = [];\n\n// 0x00 : NOP\ninstructions[0x00] = function() { };\n// 0x01 : LD BC, nn\ninstructions[0x01] = function()\n{\n pc = (pc + 1) & 0xffff;\n c = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n b = core.mem_read(pc);\n};\n// 0x02 : LD (BC), A\ninstructions[0x02] = function()\n{\n core.mem_write(c | (b << 8), a);\n};\n// 0x03 : INC BC\ninstructions[0x03] = function()\n{\n var result = (c | (b << 8));\n result += 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0x04 : INC B\ninstructions[0x04] = function()\n{\n b = do_inc(b);\n};\n// 0x05 : DEC B\ninstructions[0x05] = function()\n{\n b = do_dec(b);\n};\n// 0x06 : LD B, n\ninstructions[0x06] = function()\n{\n pc = (pc + 1) & 0xffff;\n b = core.mem_read(pc);\n};\n// 0x07 : RLCA\ninstructions[0x07] = function()\n{\n // This instruction is implemented as a special case of the\n // more general Z80-specific RLC instruction.\n // Specifially, RLCA is a version of RLC A that affects fewer flags.\n // The same applies to RRCA, RLA, and RRA.\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rlc(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x08 : EX AF, AF'\ninstructions[0x08] = function()\n{\n var temp = a;\n a = a_prime;\n a_prime = temp;\n \n temp = get_flags_register();\n set_flags_register(get_flags_prime());\n set_flags_prime(temp);\n};\n// 0x09 : ADD HL, BC\ninstructions[0x09] = function()\n{\n do_hl_add(c | (b << 8));\n};\n// 0x0a : LD A, (BC)\ninstructions[0x0a] = function()\n{\n a = core.mem_read(c | (b << 8));\n};\n// 0x0b : DEC BC\ninstructions[0x0b] = function()\n{\n var result = (c | (b << 8));\n result -= 1;\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0x0c : INC C\ninstructions[0x0c] = function()\n{\n c = do_inc(c);\n};\n// 0x0d : DEC C\ninstructions[0x0d] = function()\n{\n c = do_dec(c);\n};\n// 0x0e : LD C, n\ninstructions[0x0e] = function()\n{\n pc = (pc + 1) & 0xffff;\n c = core.mem_read(pc);\n};\n// 0x0f : RRCA\ninstructions[0x0f] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rrc(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x10 : DJNZ nn\ninstructions[0x10] = function()\n{\n b = (b - 1) & 0xff;\n do_conditional_relative_jump(b !== 0);\n};\n// 0x11 : LD DE, nn\ninstructions[0x11] = function()\n{\n pc = (pc + 1) & 0xffff;\n e = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n d = core.mem_read(pc);\n};\n// 0x12 : LD (DE), A\ninstructions[0x12] = function()\n{\n core.mem_write(e | (d << 8), a);\n};\n// 0x13 : INC DE\ninstructions[0x13] = function()\n{\n var result = (e | (d << 8));\n result += 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0x14 : INC D\ninstructions[0x14] = function()\n{\n d = do_inc(d);\n};\n// 0x15 : DEC D\ninstructions[0x15] = function()\n{\n d = do_dec(d);\n};\n// 0x16 : LD D, n\ninstructions[0x16] = function()\n{\n pc = (pc + 1) & 0xffff;\n d = core.mem_read(pc);\n};\n// 0x17 : RLA\ninstructions[0x17] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rl(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x18 : JR n\ninstructions[0x18] = function()\n{\n var offset = get_signed_offset_byte(core.mem_read((pc + 1) & 0xffff));\n pc = (pc + offset + 1) & 0xffff;\n};\n// 0x19 : ADD HL, DE\ninstructions[0x19] = function()\n{\n do_hl_add(e | (d << 8));\n};\n// 0x1a : LD A, (DE)\ninstructions[0x1a] = function()\n{\n a = core.mem_read(e | (d << 8));\n};\n// 0x1b : DEC DE\ninstructions[0x1b] = function()\n{\n var result = (e | (d << 8));\n result -= 1;\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0x1c : INC E\ninstructions[0x1c] = function()\n{\n e = do_inc(e);\n};\n// 0x1d : DEC E\ninstructions[0x1d] = function()\n{\n e = do_dec(e);\n};\n// 0x1e : LD E, n\ninstructions[0x1e] = function()\n{\n pc = (pc + 1) & 0xffff;\n e = core.mem_read(pc);\n};\n// 0x1f : RRA\ninstructions[0x1f] = function()\n{\n var temp_s = flags.S, temp_z = flags.Z, temp_p = flags.P;\n a = do_rr(a);\n flags.S = temp_s;\n flags.Z = temp_z;\n flags.P = temp_p;\n};\n// 0x20 : JR NZ, n\ninstructions[0x20] = function()\n{\n do_conditional_relative_jump(!flags.Z);\n};\n// 0x21 : LD HL, nn\ninstructions[0x21] = function()\n{\n pc = (pc + 1) & 0xffff;\n l = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n h = core.mem_read(pc);\n};\n// 0x22 : LD (nn), HL\ninstructions[0x22] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, l);\n core.mem_write((address + 1) & 0xffff, h);\n};\n// 0x23 : INC HL\ninstructions[0x23] = function()\n{\n var result = (l | (h << 8));\n result += 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0x24 : INC H\ninstructions[0x24] = function()\n{\n h = do_inc(h);\n};\n// 0x25 : DEC H\ninstructions[0x25] = function()\n{\n h = do_dec(h);\n};\n// 0x26 : LD H, n\ninstructions[0x26] = function()\n{\n pc = (pc + 1) & 0xffff;\n h = core.mem_read(pc);\n};\n// 0x27 : DAA\ninstructions[0x27] = function()\n{\n var temp = a;\n if (!flags.N)\n {\n if (flags.H || ((a & 0x0f) > 9))\n temp += 0x06;\n if (flags.C || (a > 0x99))\n temp += 0x60;\n }\n else\n {\n if (flags.H || ((a & 0x0f) > 9))\n temp -= 0x06;\n if (flags.C || (a > 0x99))\n temp -= 0x60;\n }\n \n flags.S = (temp & 0x80) ? 1 : 0;\n flags.Z = !(temp & 0xff) ? 1 : 0;\n flags.H = ((a & 0x10) ^ (temp & 0x10)) ? 1 : 0;\n flags.P = get_parity(temp & 0xff);\n // DAA never clears the carry flag if it was already set,\n // but it is able to set the carry flag if it was clear.\n // Don't ask me, I don't know.\n // Note also that we check for a BCD carry, instead of the usual.\n flags.C = (flags.C || (a > 0x99)) ? 1 : 0;\n \n a = temp & 0xff;\n \n update_xy_flags(a);\n};\n// 0x28 : JR Z, n\ninstructions[0x28] = function()\n{\n do_conditional_relative_jump(!!flags.Z);\n};\n// 0x29 : ADD HL, HL\ninstructions[0x29] = function()\n{\n do_hl_add(l | (h << 8));\n};\n// 0x2a : LD HL, (nn)\ninstructions[0x2a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n l = core.mem_read(address);\n h = core.mem_read((address + 1) & 0xffff);\n};\n// 0x2b : DEC HL\ninstructions[0x2b] = function()\n{\n var result = (l | (h << 8));\n result -= 1;\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0x2c : INC L\ninstructions[0x2c] = function()\n{\n l = do_inc(l);\n};\n// 0x2d : DEC L\ninstructions[0x2d] = function()\n{\n l = do_dec(l);\n};\n// 0x2e : LD L, n\ninstructions[0x2e] = function()\n{\n pc = (pc + 1) & 0xffff;\n l = core.mem_read(pc);\n};\n// 0x2f : CPL\ninstructions[0x2f] = function()\n{\n a = (~a) & 0xff;\n flags.N = 1;\n flags.H = 1;\n update_xy_flags(a);\n};\n// 0x30 : JR NC, n\ninstructions[0x30] = function()\n{\n do_conditional_relative_jump(!flags.C);\n};\n// 0x31 : LD SP, nn\ninstructions[0x31] = function()\n{\n sp = core.mem_read((pc + 1) & 0xffff) | \n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc + 2) & 0xffff;\n};\n// 0x32 : LD (nn), A\ninstructions[0x32] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, a);\n};\n// 0x33 : INC SP\ninstructions[0x33] = function()\n{\n sp = (sp + 1) & 0xffff;\n};\n// 0x34 : INC (HL)\ninstructions[0x34] = function()\n{\n var address = l | (h << 8);\n core.mem_write(address, do_inc(core.mem_read(address)));\n};\n// 0x35 : DEC (HL)\ninstructions[0x35] = function()\n{\n var address = l | (h << 8);\n core.mem_write(address, do_dec(core.mem_read(address)));\n};\n// 0x36 : LD (HL), n\ninstructions[0x36] = function()\n{\n pc = (pc + 1) & 0xffff;\n core.mem_write(l | (h << 8), core.mem_read(pc));\n};\n// 0x37 : SCF\ninstructions[0x37] = function()\n{\n flags.N = 0;\n flags.H = 0;\n flags.C = 1;\n update_xy_flags(a);\n};\n// 0x38 : JR C, n\ninstructions[0x38] = function()\n{\n do_conditional_relative_jump(!!flags.C);\n};\n// 0x39 : ADD HL, SP\ninstructions[0x39] = function()\n{\n do_hl_add(sp);\n};\n// 0x3a : LD A, (nn)\ninstructions[0x3a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n a = core.mem_read(address);\n};\n// 0x3b : DEC SP\ninstructions[0x3b] = function()\n{\n sp = (sp - 1) & 0xffff;\n};\n// 0x3c : INC A\ninstructions[0x3c] = function()\n{\n a = do_inc(a);\n};\n// 0x3d : DEC A\ninstructions[0x3d] = function()\n{\n a = do_dec(a);\n};\n// 0x3e : LD A, n\ninstructions[0x3e] = function()\n{\n a = core.mem_read((pc + 1) & 0xffff);\n pc = (pc + 1) & 0xffff;\n};\n// 0x3f : CCF\ninstructions[0x3f] = function()\n{\n flags.N = 0;\n flags.H = flags.C;\n flags.C = flags.C ? 0 : 1;\n update_xy_flags(a);\n};\n// 0xc0 : RET NZ\ninstructions[0xc0] = function()\n{\n do_conditional_return(!flags.Z);\n};\n// 0xc1 : POP BC\ninstructions[0xc1] = function()\n{\n var result = pop_word();\n c = result & 0xff;\n b = (result & 0xff00) >>> 8;\n};\n// 0xc2 : JP NZ, nn\ninstructions[0xc2] = function()\n{\n do_conditional_absolute_jump(!flags.Z);\n};\n// 0xc3 : JP nn\ninstructions[0xc3] = function()\n{\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xc4 : CALL NZ, nn\ninstructions[0xc4] = function()\n{\n do_conditional_call(!flags.Z);\n};\n// 0xc5 : PUSH BC\ninstructions[0xc5] = function()\n{\n push_word(c | (b << 8));\n};\n// 0xc6 : ADD A, n\ninstructions[0xc6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_add(core.mem_read(pc));\n};\n// 0xc7 : RST 00h\ninstructions[0xc7] = function()\n{\n do_reset(0x00);\n};\n// 0xc8 : RET Z\ninstructions[0xc8] = function()\n{\n do_conditional_return(!!flags.Z);\n};\n// 0xc9 : RET\ninstructions[0xc9] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n};\n// 0xca : JP Z, nn\ninstructions[0xca] = function()\n{\n do_conditional_absolute_jump(!!flags.Z);\n};\n// 0xcb : CB Prefix\ninstructions[0xcb] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n // We don't have a table for this prefix,\n // the instructions are all so uniform that we can directly decode them.\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n bit_number = (opcode & 0x38) >>> 3,\n reg_code = opcode & 0x07;\n \n if (opcode < 0x40)\n {\n // Shift/rotate instructions\n var op_array = [do_rlc, do_rrc, do_rl, do_rr,\n do_sla, do_sra, do_sll, do_srl];\n \n if (reg_code === 0)\n b = op_array[bit_number]( b);\n else if (reg_code === 1)\n c = op_array[bit_number]( c);\n else if (reg_code === 2)\n d = op_array[bit_number]( d);\n else if (reg_code === 3)\n e = op_array[bit_number]( e);\n else if (reg_code === 4)\n h = op_array[bit_number]( h);\n else if (reg_code === 5)\n l = op_array[bit_number]( l);\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n op_array[bit_number]( core.mem_read(l | (h << 8))));\n else if (reg_code === 7)\n a = op_array[bit_number]( a);\n }\n else if (opcode < 0x80)\n {\n // BIT instructions\n if (reg_code === 0)\n flags.Z = !(b & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 1)\n flags.Z = !(c & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 2)\n flags.Z = !(d & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 3)\n flags.Z = !(e & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 4)\n flags.Z = !(h & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 5)\n flags.Z = !(l & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 6)\n flags.Z = !((core.mem_read(l | (h << 8))) & (1 << bit_number)) ? 1 : 0;\n else if (reg_code === 7)\n flags.Z = !(a & (1 << bit_number)) ? 1 : 0;\n \n flags.N = 0;\n flags.H = 1;\n flags.P = flags.Z;\n flags.S = ((bit_number === 7) && !flags.Z) ? 1 : 0;\n // For the BIT n, (HL) instruction, the X and Y flags are obtained\n // from what is apparently an internal temporary register used for\n // some of the 16-bit arithmetic instructions.\n // I haven't implemented that register here,\n // so for now we'll set X and Y the same way for every BIT opcode,\n // which means that they will usually be wrong for BIT n, (HL).\n flags.Y = ((bit_number === 5) && !flags.Z) ? 1 : 0;\n flags.X = ((bit_number === 3) && !flags.Z) ? 1 : 0;\n }\n else if (opcode < 0xc0)\n {\n // RES instructions\n if (reg_code === 0)\n b &= (0xff & ~(1 << bit_number));\n else if (reg_code === 1)\n c &= (0xff & ~(1 << bit_number));\n else if (reg_code === 2)\n d &= (0xff & ~(1 << bit_number));\n else if (reg_code === 3)\n e &= (0xff & ~(1 << bit_number));\n else if (reg_code === 4)\n h &= (0xff & ~(1 << bit_number));\n else if (reg_code === 5)\n l &= (0xff & ~(1 << bit_number));\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n core.mem_read(l | (h << 8)) & ~(1 << bit_number));\n else if (reg_code === 7)\n a &= (0xff & ~(1 << bit_number));\n }\n else\n {\n // SET instructions\n if (reg_code === 0)\n b |= (1 << bit_number);\n else if (reg_code === 1)\n c |= (1 << bit_number);\n else if (reg_code === 2)\n d |= (1 << bit_number);\n else if (reg_code === 3)\n e |= (1 << bit_number);\n else if (reg_code === 4)\n h |= (1 << bit_number);\n else if (reg_code === 5)\n l |= (1 << bit_number);\n else if (reg_code === 6)\n core.mem_write(l | (h << 8),\n core.mem_read(l | (h << 8)) | (1 << bit_number));\n else if (reg_code === 7)\n a |= (1 << bit_number);\n }\n \n cycle_counter += cycle_counts_cb[opcode];\n};\n// 0xcc : CALL Z, nn\ninstructions[0xcc] = function()\n{\n do_conditional_call(!!flags.Z);\n};\n// 0xcd : CALL nn\ninstructions[0xcd] = function()\n{\n push_word((pc + 3) & 0xffff);\n pc = core.mem_read((pc + 1) & 0xffff) |\n (core.mem_read((pc + 2) & 0xffff) << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xce : ADC A, n\ninstructions[0xce] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_adc(core.mem_read(pc));\n};\n// 0xcf : RST 08h\ninstructions[0xcf] = function()\n{\n do_reset(0x08);\n};\n// 0xd0 : RET NC\ninstructions[0xd0] = function()\n{\n do_conditional_return(!flags.C);\n};\n// 0xd1 : POP DE\ninstructions[0xd1] = function()\n{\n var result = pop_word();\n e = result & 0xff;\n d = (result & 0xff00) >>> 8;\n};\n// 0xd2 : JP NC, nn\ninstructions[0xd2] = function()\n{\n do_conditional_absolute_jump(!flags.C);\n};\n// 0xd3 : OUT (n), A\ninstructions[0xd3] = function()\n{\n pc = (pc + 1) & 0xffff;\n core.io_write((a << 8) | core.mem_read(pc), a);\n};\n// 0xd4 : CALL NC, nn\ninstructions[0xd4] = function()\n{\n do_conditional_call(!flags.C);\n};\n// 0xd5 : PUSH DE\ninstructions[0xd5] = function()\n{\n push_word(e | (d << 8));\n};\n// 0xd6 : SUB n\ninstructions[0xd6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_sub(core.mem_read(pc));\n};\n// 0xd7 : RST 10h\ninstructions[0xd7] = function()\n{\n do_reset(0x10);\n};\n// 0xd8 : RET C\ninstructions[0xd8] = function()\n{\n do_conditional_return(!!flags.C);\n};\n// 0xd9 : EXX\ninstructions[0xd9] = function()\n{\n var temp = b;\n b = b_prime;\n b_prime = temp;\n temp = c;\n c = c_prime;\n c_prime = temp;\n temp = d;\n d = d_prime;\n d_prime = temp;\n temp = e;\n e = e_prime;\n e_prime = temp;\n temp = h;\n h = h_prime;\n h_prime = temp;\n temp = l;\n l = l_prime;\n l_prime = temp;\n};\n// 0xda : JP C, nn\ninstructions[0xda] = function()\n{\n do_conditional_absolute_jump(!!flags.C);\n};\n// 0xdb : IN A, (n)\ninstructions[0xdb] = function()\n{\n pc = (pc + 1) & 0xffff;\n a = core.io_read((a << 8) | core.mem_read(pc));\n};\n// 0xdc : CALL C, nn\ninstructions[0xdc] = function()\n{\n do_conditional_call(!!flags.C);\n};\n// 0xdd : DD Prefix (IX instructions)\ninstructions[0xdd] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = dd_instructions[opcode];\n \n if (func)\n {\n //func = func.bind(this);\n func();\n cycle_counter += cycle_counts_dd[opcode];\n }\n else\n {\n // Apparently if a DD opcode doesn't exist,\n // it gets treated as an unprefixed opcode.\n // What we'll do to handle that is just back up the \n // program counter, so that this byte gets decoded\n // as a normal instruction.\n pc = (pc - 1) & 0xffff;\n // And we'll add in the cycle count for a NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xde : SBC n\ninstructions[0xde] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_sbc(core.mem_read(pc));\n};\n// 0xdf : RST 18h\ninstructions[0xdf] = function()\n{\n do_reset(0x18);\n};\n// 0xe0 : RET PO\ninstructions[0xe0] = function()\n{\n do_conditional_return(!flags.P);\n};\n// 0xe1 : POP HL\ninstructions[0xe1] = function()\n{\n var result = pop_word();\n l = result & 0xff;\n h = (result & 0xff00) >>> 8;\n};\n// 0xe2 : JP PO, (nn)\ninstructions[0xe2] = function()\n{\n do_conditional_absolute_jump(!flags.P);\n};\n// 0xe3 : EX (SP), HL\ninstructions[0xe3] = function()\n{\n var temp = core.mem_read(sp);\n core.mem_write(sp, l);\n l = temp;\n temp = core.mem_read((sp + 1) & 0xffff);\n core.mem_write((sp + 1) & 0xffff, h);\n h = temp;\n};\n// 0xe4 : CALL PO, nn\ninstructions[0xe4] = function()\n{\n do_conditional_call(!flags.P);\n};\n// 0xe5 : PUSH HL\ninstructions[0xe5] = function()\n{\n push_word(l | (h << 8));\n};\n// 0xe6 : AND n\ninstructions[0xe6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_and(core.mem_read(pc));\n};\n// 0xe7 : RST 20h\ninstructions[0xe7] = function()\n{\n do_reset(0x20);\n};\n// 0xe8 : RET PE\ninstructions[0xe8] = function()\n{\n do_conditional_return(!!flags.P);\n};\n// 0xe9 : JP (HL)\ninstructions[0xe9] = function()\n{\n pc = l | (h << 8);\n pc = (pc - 1) & 0xffff;\n};\n// 0xea : JP PE, nn\ninstructions[0xea] = function()\n{\n do_conditional_absolute_jump(!!flags.P);\n};\n// 0xeb : EX DE, HL\ninstructions[0xeb] = function()\n{\n var temp = d;\n d = h;\n h = temp;\n temp = e;\n e = l;\n l = temp;\n};\n// 0xec : CALL PE, nn\ninstructions[0xec] = function()\n{\n do_conditional_call(!!flags.P);\n};\n// 0xed : ED Prefix\ninstructions[0xed] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = ed_instructions[opcode];\n \n if (func)\n {\n //func = func.bind(this);\n func();\n cycle_counter += cycle_counts_ed[opcode];\n }\n else\n {\n // If the opcode didn't exist, the whole thing is a two-byte NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xee : XOR n\ninstructions[0xee] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_xor(core.mem_read(pc));\n};\n// 0xef : RST 28h\ninstructions[0xef] = function()\n{\n do_reset(0x28);\n};\n// 0xf0 : RET P\ninstructions[0xf0] = function()\n{\n do_conditional_return(!flags.S);\n};\n// 0xf1 : POP AF\ninstructions[0xf1] = function()\n{\n var result = pop_word();\n set_flags_register(result & 0xff);\n a = (result & 0xff00) >>> 8;\n};\n// 0xf2 : JP P, nn\ninstructions[0xf2] = function()\n{\n do_conditional_absolute_jump(!flags.S);\n};\n// 0xf3 : DI\ninstructions[0xf3] = function()\n{\n // DI doesn't actually take effect until after the next instruction.\n do_delayed_di = true;\n};\n// 0xf4 : CALL P, nn\ninstructions[0xf4] = function()\n{\n do_conditional_call(!flags.S);\n};\n// 0xf5 : PUSH AF\ninstructions[0xf5] = function()\n{\n push_word(get_flags_register() | (a << 8));\n};\n// 0xf6 : OR n\ninstructions[0xf6] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_or(core.mem_read(pc));\n};\n// 0xf7 : RST 30h\ninstructions[0xf7] = function()\n{\n do_reset(0x30);\n};\n// 0xf8 : RET M\ninstructions[0xf8] = function()\n{\n do_conditional_return(!!flags.S);\n};\n// 0xf9 : LD SP, HL\ninstructions[0xf9] = function()\n{\n sp = l | (h << 8);\n};\n// 0xfa : JP M, nn\ninstructions[0xfa] = function()\n{\n do_conditional_absolute_jump(!!flags.S);\n};\n// 0xfb : EI\ninstructions[0xfb] = function()\n{\n // EI doesn't actually take effect until after the next instruction.\n do_delayed_ei = true;\n};\n// 0xfc : CALL M, nn\ninstructions[0xfc] = function()\n{\n do_conditional_call(!!flags.S);\n};\n// 0xfd : FD Prefix (IY instructions)\ninstructions[0xfd] = function()\n{\n // R is incremented at the start of the second instruction cycle,\n // before the instruction actually runs.\n // The high bit of R is not affected by this increment,\n // it can only be changed using the LD R, A instruction.\n r = (r & 0x80) | (((r & 0x7f) + 1) & 0x7f);\n \n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc),\n func = dd_instructions[opcode];\n \n if (func)\n {\n // Rather than copy and paste all the IX instructions into IY instructions,\n // what we'll do is sneakily copy IY into IX, run the IX instruction,\n // and then copy the result into IY and restore the old IX.\n var temp = ix;\n ix = iy;\n //func = func.bind(this);\n func();\n iy = ix;\n ix = temp;\n \n cycle_counter += cycle_counts_dd[opcode];\n }\n else\n {\n // Apparently if an FD opcode doesn't exist,\n // it gets treated as an unprefixed opcode.\n // What we'll do to handle that is just back up the \n // program counter, so that this byte gets decoded\n // as a normal instruction.\n pc = (pc - 1) & 0xffff;\n // And we'll add in the cycle count for a NOP.\n cycle_counter += cycle_counts[0];\n }\n};\n// 0xfe : CP n\ninstructions[0xfe] = function()\n{\n pc = (pc + 1) & 0xffff;\n do_cp(core.mem_read(pc));\n};\n// 0xff : RST 38h\ninstructions[0xff] = function()\n{\n do_reset(0x38);\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// This table of ED opcodes is pretty sparse;\n/// there are not very many valid ED-prefixed opcodes in the Z80,\n/// and many of the ones that are valid are not documented.\n///////////////////////////////////////////////////////////////////////////////\nlet ed_instructions = [];\n// 0x40 : IN B, (C)\ned_instructions[0x40] = function()\n{\n b = do_in((b << 8) | c);\n};\n// 0x41 : OUT (C), B\ned_instructions[0x41] = function()\n{\n core.io_write((b << 8) | c, b);\n};\n// 0x42 : SBC HL, BC\ned_instructions[0x42] = function()\n{\n do_hl_sbc(c | (b << 8));\n};\n// 0x43 : LD (nn), BC\ned_instructions[0x43] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, c);\n core.mem_write((address + 1) & 0xffff, b);\n};\n// 0x44 : NEG\ned_instructions[0x44] = function()\n{\n do_neg();\n};\n// 0x45 : RETN\ned_instructions[0x45] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x46 : IM 0\ned_instructions[0x46] = function()\n{\n imode = 0;\n};\n// 0x47 : LD I, A\ned_instructions[0x47] = function()\n{\n i = a\n};\n// 0x48 : IN C, (C)\ned_instructions[0x48] = function()\n{\n c = do_in((b << 8) | c);\n};\n// 0x49 : OUT (C), C\ned_instructions[0x49] = function()\n{\n core.io_write((b << 8) | c, c);\n};\n// 0x4a : ADC HL, BC\ned_instructions[0x4a] = function()\n{\n do_hl_adc(c | (b << 8));\n};\n// 0x4b : LD BC, (nn)\ned_instructions[0x4b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n c = core.mem_read(address);\n b = core.mem_read((address + 1) & 0xffff);\n};\n// 0x4c : NEG (Undocumented)\ned_instructions[0x4c] = function()\n{\n do_neg();\n};\n// 0x4d : RETI\ned_instructions[0x4d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n};\n// 0x4e : IM 0 (Undocumented)\ned_instructions[0x4e] = function()\n{\n imode = 0;\n};\n// 0x4f : LD R, A\ned_instructions[0x4f] = function()\n{\n r = a;\n};\n// 0x50 : IN D, (C)\ned_instructions[0x50] = function()\n{\n d = do_in((b << 8) | c);\n};\n// 0x51 : OUT (C), D\ned_instructions[0x51] = function()\n{\n core.io_write((b << 8) | c, d);\n};\n// 0x52 : SBC HL, DE\ned_instructions[0x52] = function()\n{\n do_hl_sbc(e | (d << 8));\n};\n// 0x53 : LD (nn), DE\ned_instructions[0x53] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, e);\n core.mem_write((address + 1) & 0xffff, d);\n};\n// 0x54 : NEG (Undocumented)\ned_instructions[0x54] = function()\n{\n do_neg();\n};\n// 0x55 : RETN\ned_instructions[0x55] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x56 : IM 1\ned_instructions[0x56] = function()\n{\n imode = 1;\n};\n// 0x57 : LD A, I\ned_instructions[0x57] = function()\n{\n a = i;\n flags.S = a & 0x80 ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = iff2;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x58 : IN E, (C)\ned_instructions[0x58] = function()\n{\n e = do_in((b << 8) | c);\n};\n// 0x59 : OUT (C), E\ned_instructions[0x59] = function()\n{\n core.io_write((b << 8) | c, e);\n};\n// 0x5a : ADC HL, DE\ned_instructions[0x5a] = function()\n{\n do_hl_adc(e | (d << 8));\n};\n// 0x5b : LD DE, (nn)\ned_instructions[0x5b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n e = core.mem_read(address);\n d = core.mem_read((address + 1) & 0xffff);\n};\n// 0x5c : NEG (Undocumented)\ned_instructions[0x5c] = function()\n{\n do_neg();\n};\n// 0x5d : RETN\ned_instructions[0x5d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x5e : IM 2\ned_instructions[0x5e] = function()\n{\n imode = 2;\n};\n// 0x5f : LD A, R\ned_instructions[0x5f] = function()\n{\n a = r;\n flags.S = a & 0x80 ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = iff2;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x60 : IN H, (C)\ned_instructions[0x60] = function()\n{\n h = do_in((b << 8) | c);\n};\n// 0x61 : OUT (C), H\ned_instructions[0x61] = function()\n{\n core.io_write((b << 8) | c, h);\n};\n// 0x62 : SBC HL, HL\ned_instructions[0x62] = function()\n{\n do_hl_sbc(l | (h << 8));\n};\n// 0x63 : LD (nn), HL (Undocumented)\ned_instructions[0x63] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, l);\n core.mem_write((address + 1) & 0xffff, h);\n};\n// 0x64 : NEG (Undocumented)\ned_instructions[0x64] = function()\n{\n do_neg();\n};\n// 0x65 : RETN\ned_instructions[0x65] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x66 : IM 0\ned_instructions[0x66] = function()\n{\n imode = 0;\n};\n// 0x67 : RRD\ned_instructions[0x67] = function()\n{\n var hl_value = core.mem_read(l | (h << 8));\n var temp1 = hl_value & 0x0f, temp2 = a & 0x0f;\n hl_value = ((hl_value & 0xf0) >>> 4) | (temp2 << 4);\n a = (a & 0xf0) | temp1;\n core.mem_write(l | (h << 8), hl_value);\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(a) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x68 : IN L, (C)\ned_instructions[0x68] = function()\n{\n l = do_in((b << 8) | c);\n};\n// 0x69 : OUT (C), L\ned_instructions[0x69] = function()\n{\n core.io_write((b << 8) | c, l);\n};\n// 0x6a : ADC HL, HL\ned_instructions[0x6a] = function()\n{\n do_hl_adc(l | (h << 8));\n};\n// 0x6b : LD HL, (nn) (Undocumented)\ned_instructions[0x6b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n l = core.mem_read(address);\n h = core.mem_read((address + 1) & 0xffff);\n};\n// 0x6c : NEG (Undocumented)\ned_instructions[0x6c] = function()\n{\n do_neg();\n};\n// 0x6d : RETN\ned_instructions[0x6d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x6e : IM 0 (Undocumented)\ned_instructions[0x6e] = function()\n{\n imode = 0;\n};\n// 0x6f : RLD\ned_instructions[0x6f] = function()\n{\n var hl_value = core.mem_read(l | (h << 8));\n var temp1 = hl_value & 0xf0, temp2 = a & 0x0f;\n hl_value = ((hl_value & 0x0f) << 4) | temp2;\n a = (a & 0xf0) | (temp1 >>> 4);\n core.mem_write(l | (h << 8), hl_value);\n \n flags.S = (a & 0x80) ? 1 : 0;\n flags.Z = a ? 0 : 1;\n flags.H = 0;\n flags.P = get_parity(a) ? 1 : 0;\n flags.N = 0;\n update_xy_flags(a);\n};\n// 0x70 : IN (C) (Undocumented)\ned_instructions[0x70] = function()\n{\n do_in((b << 8) | c);\n};\n// 0x71 : OUT (C), 0 (Undocumented)\ned_instructions[0x71] = function()\n{\n core.io_write((b << 8) | c, 0);\n};\n// 0x72 : SBC HL, SP\ned_instructions[0x72] = function()\n{\n do_hl_sbc(sp);\n};\n// 0x73 : LD (nn), SP\ned_instructions[0x73] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n core.mem_write(address, sp & 0xff);\n core.mem_write((address + 1) & 0xffff, (sp >>> 8) & 0xff);\n};\n// 0x74 : NEG (Undocumented)\ned_instructions[0x74] = function()\n{\n do_neg();\n};\n// 0x75 : RETN\ned_instructions[0x75] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x76 : IM 1\ned_instructions[0x76] = function()\n{\n imode = 1;\n};\n// 0x78 : IN A, (C)\ned_instructions[0x78] = function()\n{\n a = do_in((b << 8) | c);\n};\n// 0x79 : OUT (C), A\ned_instructions[0x79] = function()\n{\n core.io_write((b << 8) | c, a);\n};\n// 0x7a : ADC HL, SP\ned_instructions[0x7a] = function()\n{\n do_hl_adc(sp);\n};\n// 0x7b : LD SP, (nn)\ned_instructions[0x7b] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= core.mem_read(pc) << 8;\n \n sp = core.mem_read(address);\n sp |= core.mem_read((address + 1) & 0xffff) << 8;\n};\n// 0x7c : NEG (Undocumented)\ned_instructions[0x7c] = function()\n{\n do_neg();\n};\n// 0x7d : RETN\ned_instructions[0x7d] = function()\n{\n pc = (pop_word() - 1) & 0xffff;\n iff1 = iff2;\n};\n// 0x7e : IM 2\ned_instructions[0x7e] = function()\n{\n imode = 2;\n};\n// 0xa0 : LDI\ned_instructions[0xa0] = function()\n{\n do_ldi();\n};\n// 0xa1 : CPI\ned_instructions[0xa1] = function()\n{\n do_cpi();\n};\n// 0xa2 : INI\ned_instructions[0xa2] = function()\n{\n do_ini();\n};\n// 0xa3 : OUTI\ned_instructions[0xa3] = function()\n{\n do_outi();\n};\n// 0xa8 : LDD\ned_instructions[0xa8] = function()\n{\n do_ldd();\n};\n// 0xa9 : CPD\ned_instructions[0xa9] = function()\n{\n do_cpd();\n};\n// 0xaa : IND\ned_instructions[0xaa] = function()\n{\n do_ind();\n};\n// 0xab : OUTD\ned_instructions[0xab] = function()\n{\n do_outd();\n};\n// 0xb0 : LDIR\ned_instructions[0xb0] = function()\n{\n do_ldi();\n if (b || c)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb1 : CPIR\ned_instructions[0xb1] = function()\n{\n do_cpi();\n if (!flags.Z && (b || c))\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb2 : INIR\ned_instructions[0xb2] = function()\n{\n do_ini();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb3 : OTIR\ned_instructions[0xb3] = function()\n{\n do_outi();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb8 : LDDR\ned_instructions[0xb8] = function()\n{\n do_ldd();\n if (b || c)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xb9 : CPDR\ned_instructions[0xb9] = function()\n{\n do_cpd();\n if (!flags.Z && (b || c))\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xba : INDR\ned_instructions[0xba] = function()\n{\n do_ind();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n// 0xbb : OTDR\ned_instructions[0xbb] = function()\n{\n do_outd();\n if (b)\n {\n cycle_counter += 5;\n pc = (pc - 2) & 0xffff;\n }\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// Like ED, this table is quite sparse,\n/// and many of the opcodes here are also undocumented.\n/// The undocumented instructions here are those that deal with only one byte\n/// of the two-byte IX register; the bytes are designed IXH and IXL here.\n///////////////////////////////////////////////////////////////////////////////\nlet dd_instructions = [];\n// 0x09 : ADD IX, BC\ndd_instructions[0x09] = function()\n{\n do_ix_add(c | (b << 8));\n};\n// 0x19 : ADD IX, DE\ndd_instructions[0x19] = function()\n{\n do_ix_add(e | (d << 8));\n};\n// 0x21 : LD IX, nn\ndd_instructions[0x21] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n ix |= (core.mem_read(pc) << 8);\n};\n// 0x22 : LD (nn), IX\ndd_instructions[0x22] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= (core.mem_read(pc) << 8);\n \n core.mem_write(address, ix & 0xff);\n core.mem_write((address + 1) & 0xffff, (ix >>> 8) & 0xff);\n};\n// 0x23 : INC IX\ndd_instructions[0x23] = function()\n{\n ix = (ix + 1) & 0xffff;\n};\n// 0x24 : INC IXH (Undocumented)\ndd_instructions[0x24] = function()\n{\n ix = (do_inc(ix >>> 8) << 8) | (ix & 0xff);\n};\n// 0x25 : DEC IXH (Undocumented)\ndd_instructions[0x25] = function()\n{\n ix = (do_dec(ix >>> 8) << 8) | (ix & 0xff);\n};\n// 0x26 : LD IXH, n (Undocumented)\ndd_instructions[0x26] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = (core.mem_read(pc) << 8) | (ix & 0xff);\n};\n// 0x29 : ADD IX, IX\ndd_instructions[0x29] = function()\n{\n do_ix_add(ix);\n};\n// 0x2a : LD IX, (nn)\ndd_instructions[0x2a] = function()\n{\n pc = (pc + 1) & 0xffff;\n var address = core.mem_read(pc);\n pc = (pc + 1) & 0xffff;\n address |= (core.mem_read(pc) << 8);\n \n ix = core.mem_read(address);\n ix |= (core.mem_read((address + 1) & 0xffff) << 8);\n};\n// 0x2b : DEC IX\ndd_instructions[0x2b] = function()\n{\n ix = (ix - 1) & 0xffff;\n};\n// 0x2c : INC IXL (Undocumented)\ndd_instructions[0x2c] = function()\n{\n ix = do_inc(ix & 0xff) | (ix & 0xff00);\n};\n// 0x2d : DEC IXL (Undocumented)\ndd_instructions[0x2d] = function()\n{\n ix = do_dec(ix & 0xff) | (ix & 0xff00);\n};\n// 0x2e : LD IXL, n (Undocumented)\ndd_instructions[0x2e] = function()\n{\n pc = (pc + 1) & 0xffff;\n ix = (core.mem_read(pc) & 0xff) | (ix & 0xff00);\n};\n// 0x34 : INC (IX+n)\ndd_instructions[0x34] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc)),\n value = core.mem_read((offset + ix) & 0xffff);\n core.mem_write((offset + ix) & 0xffff, do_inc(value));\n};\n// 0x35 : DEC (IX+n)\ndd_instructions[0x35] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc)),\n value = core.mem_read((offset + ix) & 0xffff);\n core.mem_write((offset + ix) & 0xffff, do_dec(value));\n};\n// 0x36 : LD (IX+n), n\ndd_instructions[0x36] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n pc = (pc + 1) & 0xffff;\n core.mem_write((ix + offset) & 0xffff, core.mem_read(pc)); \n};\n// 0x39 : ADD IX, SP\ndd_instructions[0x39] = function()\n{\n do_ix_add(sp);\n};\n// 0x44 : LD B, IXH (Undocumented)\ndd_instructions[0x44] = function()\n{\n b = (ix >>> 8) & 0xff;\n};\n// 0x45 : LD B, IXL (Undocumented)\ndd_instructions[0x45] = function()\n{\n b = ix & 0xff;\n};\n// 0x46 : LD B, (IX+n)\ndd_instructions[0x46] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n b = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x4c : LD C, IXH (Undocumented)\ndd_instructions[0x4c] = function()\n{\n c = (ix >>> 8) & 0xff;\n};\n// 0x4d : LD C, IXL (Undocumented)\ndd_instructions[0x4d] = function()\n{\n c = ix & 0xff;\n};\n// 0x4e : LD C, (IX+n)\ndd_instructions[0x4e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n c = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x54 : LD D, IXH (Undocumented)\ndd_instructions[0x54] = function()\n{\n d = (ix >>> 8) & 0xff;\n};\n// 0x55 : LD D, IXL (Undocumented)\ndd_instructions[0x55] = function()\n{\n d = ix & 0xff;\n};\n// 0x56 : LD D, (IX+n)\ndd_instructions[0x56] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n d = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x5c : LD E, IXH (Undocumented)\ndd_instructions[0x5c] = function()\n{\n e = (ix >>> 8) & 0xff;\n};\n// 0x5d : LD E, IXL (Undocumented)\ndd_instructions[0x5d] = function()\n{\n e = ix & 0xff;\n};\n// 0x5e : LD E, (IX+n)\ndd_instructions[0x5e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n e = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x60 : LD IXH, B (Undocumented)\ndd_instructions[0x60] = function()\n{\n ix = (ix & 0xff) | (b << 8);\n};\n// 0x61 : LD IXH, C (Undocumented)\ndd_instructions[0x61] = function()\n{\n ix = (ix & 0xff) | (c << 8);\n};\n// 0x62 : LD IXH, D (Undocumented)\ndd_instructions[0x62] = function()\n{\n ix = (ix & 0xff) | (d << 8);\n};\n// 0x63 : LD IXH, E (Undocumented)\ndd_instructions[0x63] = function()\n{\n ix = (ix & 0xff) | (e << 8);\n};\n// 0x64 : LD IXH, IXH (Undocumented)\ndd_instructions[0x64] = function()\n{\n // No-op.\n};\n// 0x65 : LD IXH, IXL (Undocumented)\ndd_instructions[0x65] = function()\n{\n ix = (ix & 0xff) | ((ix & 0xff) << 8);\n};\n// 0x66 : LD H, (IX+n)\ndd_instructions[0x66] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n h = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x67 : LD IXH, A (Undocumented)\ndd_instructions[0x67] = function()\n{\n ix = (ix & 0xff) | (a << 8);\n};\n// 0x68 : LD IXL, B (Undocumented)\ndd_instructions[0x68] = function()\n{\n ix = (ix & 0xff00) | b;\n};\n// 0x69 : LD IXL, C (Undocumented)\ndd_instructions[0x69] = function()\n{\n ix = (ix & 0xff00) | c;\n};\n// 0x6a : LD IXL, D (Undocumented)\ndd_instructions[0x6a] = function()\n{\n ix = (ix & 0xff00) | d;\n};\n// 0x6b : LD IXL, E (Undocumented)\ndd_instructions[0x6b] = function()\n{\n ix = (ix & 0xff00) | e;\n};\n// 0x6c : LD IXL, IXH (Undocumented)\ndd_instructions[0x6c] = function()\n{\n ix = (ix & 0xff00) | (ix >>> 8);\n};\n// 0x6d : LD IXL, IXL (Undocumented)\ndd_instructions[0x6d] = function()\n{\n // No-op.\n};\n// 0x6e : LD L, (IX+n)\ndd_instructions[0x6e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n l = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x6f : LD IXL, A (Undocumented)\ndd_instructions[0x6f] = function()\n{\n ix = (ix & 0xff00) | a;\n};\n// 0x70 : LD (IX+n), B\ndd_instructions[0x70] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, b);\n};\n// 0x71 : LD (IX+n), C\ndd_instructions[0x71] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, c);\n};\n// 0x72 : LD (IX+n), D\ndd_instructions[0x72] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, d);\n};\n// 0x73 : LD (IX+n), E\ndd_instructions[0x73] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, e);\n};\n// 0x74 : LD (IX+n), H\ndd_instructions[0x74] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, h);\n};\n// 0x75 : LD (IX+n), L\ndd_instructions[0x75] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, l);\n};\n// 0x77 : LD (IX+n), A\ndd_instructions[0x77] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n core.mem_write((ix + offset) & 0xffff, a);\n};\n// 0x7c : LD A, IXH (Undocumented)\ndd_instructions[0x7c] = function()\n{\n a = (ix >>> 8) & 0xff;\n};\n// 0x7d : LD A, IXL (Undocumented)\ndd_instructions[0x7d] = function()\n{\n a = ix & 0xff;\n};\n// 0x7e : LD A, (IX+n)\ndd_instructions[0x7e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n a = core.mem_read((ix + offset) & 0xffff);\n};\n// 0x84 : ADD A, IXH (Undocumented)\ndd_instructions[0x84] = function()\n{\n do_add((ix >>> 8) & 0xff);\n};\n// 0x85 : ADD A, IXL (Undocumented)\ndd_instructions[0x85] = function()\n{\n do_add(ix & 0xff);\n};\n// 0x86 : ADD A, (IX+n)\ndd_instructions[0x86] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_add(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x8c : ADC A, IXH (Undocumented)\ndd_instructions[0x8c] = function()\n{\n do_adc((ix >>> 8) & 0xff);\n};\n// 0x8d : ADC A, IXL (Undocumented)\ndd_instructions[0x8d] = function()\n{\n do_adc(ix & 0xff);\n};\n// 0x8e : ADC A, (IX+n)\ndd_instructions[0x8e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_adc(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x94 : SUB IXH (Undocumented)\ndd_instructions[0x94] = function()\n{\n do_sub((ix >>> 8) & 0xff);\n};\n// 0x95 : SUB IXL (Undocumented)\ndd_instructions[0x95] = function()\n{\n do_sub(ix & 0xff);\n};\n// 0x96 : SUB A, (IX+n)\ndd_instructions[0x96] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_sub(core.mem_read((ix + offset) & 0xffff));\n};\n// 0x9c : SBC IXH (Undocumented)\ndd_instructions[0x9c] = function()\n{\n do_sbc((ix >>> 8) & 0xff);\n};\n// 0x9d : SBC IXL (Undocumented)\ndd_instructions[0x9d] = function()\n{\n do_sbc(ix & 0xff);\n};\n// 0x9e : SBC A, (IX+n)\ndd_instructions[0x9e] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_sbc(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xa4 : AND IXH (Undocumented)\ndd_instructions[0xa4] = function()\n{\n do_and((ix >>> 8) & 0xff);\n};\n// 0xa5 : AND IXL (Undocumented)\ndd_instructions[0xa5] = function()\n{\n do_and(ix & 0xff);\n};\n// 0xa6 : AND A, (IX+n)\ndd_instructions[0xa6] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_and(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xac : XOR IXH (Undocumented)\ndd_instructions[0xac] = function()\n{\n do_xor((ix >>> 8) & 0xff);\n};\n// 0xad : XOR IXL (Undocumented)\ndd_instructions[0xad] = function()\n{\n do_xor(ix & 0xff);\n};\n// 0xae : XOR A, (IX+n)\ndd_instructions[0xae] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_xor(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xb4 : OR IXH (Undocumented)\ndd_instructions[0xb4] = function()\n{\n do_or((ix >>> 8) & 0xff);\n};\n// 0xb5 : OR IXL (Undocumented)\ndd_instructions[0xb5] = function()\n{\n do_or(ix & 0xff);\n};\n// 0xb6 : OR A, (IX+n)\ndd_instructions[0xb6] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_or(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xbc : CP IXH (Undocumented)\ndd_instructions[0xbc] = function()\n{\n do_cp((ix >>> 8) & 0xff);\n};\n// 0xbd : CP IXL (Undocumented)\ndd_instructions[0xbd] = function()\n{\n do_cp(ix & 0xff);\n};\n// 0xbe : CP A, (IX+n)\ndd_instructions[0xbe] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n do_cp(core.mem_read((ix + offset) & 0xffff));\n};\n// 0xcb : CB Prefix (IX bit instructions)\ndd_instructions[0xcb] = function()\n{\n pc = (pc + 1) & 0xffff;\n var offset = get_signed_offset_byte(core.mem_read(pc));\n pc = (pc + 1) & 0xffff;\n var opcode = core.mem_read(pc), value;\n \n // As with the \"normal\" CB prefix, we implement the DDCB prefix\n // by decoding the opcode directly, rather than using a table.\n if (opcode < 0x40)\n {\n // Shift and rotate instructions.\n var ddcb_functions = [do_rlc, do_rrc, do_rl, do_rr,\n do_sla, do_sra, do_sll, do_srl];\n \n // Most of the opcodes in this range are not valid,\n // so we map this opcode onto one of the ones that is.\n var func = ddcb_functions[(opcode & 0x38) >>> 3],\n value = func( core.mem_read((ix + offset) & 0xffff));\n \n core.mem_write((ix + offset) & 0xffff, value);\n }\n else\n {\n var bit_number = (opcode & 0x38) >>> 3;\n \n if (opcode < 0x80)\n {\n // BIT\n flags.N = 0;\n flags.H = 1;\n flags.Z = !(core.mem_read((ix + offset) & 0xffff) & (1 << bit_number)) ? 1 : 0;\n flags.P = flags.Z;\n flags.S = ((bit_number === 7) && !flags.Z) ? 1 : 0;\n }\n else if (opcode < 0xc0)\n {\n // RES\n value = core.mem_read((ix + offset) & 0xffff) & ~(1 << bit_number) & 0xff;\n core.mem_write((ix + offset) & 0xffff, value);\n }\n else\n {\n // SET\n value = core.mem_read((ix + offset) & 0xffff) | (1 << bit_number);\n core.mem_write((ix + offset) & 0xffff, value);\n }\n }\n \n // This implements the undocumented shift, RES, and SET opcodes,\n // which write their result to memory and also to an 8080 register.\n if (value !== undefined)\n {\n if ((opcode & 0x07) === 0)\n b = value;\n else if ((opcode & 0x07) === 1)\n c = value;\n else if ((opcode & 0x07) === 2)\n d = value;\n else if ((opcode & 0x07) === 3)\n e = value;\n else if ((opcode & 0x07) === 4)\n h = value;\n else if ((opcode & 0x07) === 5)\n l = value;\n // 6 is the documented opcode, which doesn't set a register.\n else if ((opcode & 0x07) === 7)\n a = value;\n }\n \n cycle_counter += cycle_counts_cb[opcode] + 8;\n};\n// 0xe1 : POP IX\ndd_instructions[0xe1] = function()\n{\n ix = pop_word();\n};\n// 0xe3 : EX (SP), IX\ndd_instructions[0xe3] = function()\n{\n var temp = ix;\n ix = core.mem_read(sp);\n ix |= core.mem_read((sp + 1) & 0xffff) << 8;\n core.mem_write(sp, temp & 0xff);\n core.mem_write((sp + 1) & 0xffff, (temp >>> 8) & 0xff);\n};\n// 0xe5 : PUSH IX\ndd_instructions[0xe5] = function()\n{\n push_word(ix);\n};\n// 0xe9 : JP (IX)\ndd_instructions[0xe9] = function()\n{\n pc = (ix - 1) & 0xffff;\n};\n// 0xf9 : LD SP, IX\ndd_instructions[0xf9] = function()\n{\n sp = ix;\n};\n\n\n///////////////////////////////////////////////////////////////////////////////\n/// These tables contain the number of T cycles used for each instruction.\n/// In a few special cases, such as conditional control flow instructions,\n/// additional cycles might be added to these values.\n/// The total number of cycles is the return value of run_instruction().\n///////////////////////////////////////////////////////////////////////////////\nlet cycle_counts = [\n 4, 10, 7, 6, 4, 4, 7, 4, 4, 11, 7, 6, 4, 4, 7, 4,\n 8, 10, 7, 6, 4, 4, 7, 4, 12, 11, 7, 6, 4, 4, 7, 4,\n 7, 10, 16, 6, 4, 4, 7, 4, 7, 11, 16, 6, 4, 4, 7, 4,\n 7, 10, 13, 6, 11, 11, 10, 4, 7, 11, 13, 6, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 7, 7, 7, 7, 7, 7, 4, 7, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,\n 5, 10, 10, 10, 10, 11, 7, 11, 5, 10, 10, 0, 10, 17, 7, 11,\n 5, 10, 10, 11, 10, 11, 7, 11, 5, 4, 10, 11, 10, 0, 7, 11,\n 5, 10, 10, 19, 10, 11, 7, 11, 5, 4, 10, 4, 10, 0, 7, 11,\n 5, 10, 10, 4, 10, 11, 7, 11, 5, 6, 10, 4, 10, 0, 7, 11\n];\n\nlet cycle_counts_ed = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 12, 12, 15, 20, 8, 14, 8, 9, 12, 12, 15, 20, 8, 14, 8, 9,\n 12, 12, 15, 20, 8, 14, 8, 9, 12, 12, 15, 20, 8, 14, 8, 9,\n 12, 12, 15, 20, 8, 14, 8, 18, 12, 12, 15, 20, 8, 14, 8, 18,\n 12, 12, 15, 20, 8, 14, 8, 0, 12, 12, 15, 20, 8, 14, 8, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0,\n 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, 16, 16, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\n];\n\nlet cycle_counts_cb = [\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 12, 8, 8, 8, 8, 8, 8, 8, 12, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8,\n 8, 8, 8, 8, 8, 8, 15, 8, 8, 8, 8, 8, 8, 8, 15, 8\n];\n\nlet cycle_counts_dd = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 14, 20, 10, 8, 8, 11, 0, 0, 15, 20, 10, 8, 8, 11, 0,\n 0, 0, 0, 0, 23, 23, 19, 0, 0, 15, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 8, 8, 8, 8, 8, 8, 19, 8, 8, 8, 8, 8, 8, 8, 19, 8,\n 19, 19, 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 8, 8, 19, 0, 0, 0, 0, 0, 8, 8, 19, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 14, 0, 23, 0, 15, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0\n];\n\n // There's tons of stuff in this object,\n // but only these three functions are the public API.\n this.saveState = getState;\n this.loadState = setState;\n this.reset = reset;\n this.advanceInsn = run_instruction;\n this.interrupt = interrupt;\n this.getPC = ():number => { return pc; }\n this.getSP = ():number => { return sp; }\n this.getHalted = ():boolean => { return halted; }\n}\n\nexport interface Z80State {\nAF : number;\nBC : number;\nDE : number;\nHL : number;\nAF_ : number;\nBC_ : number;\nDE_ : number;\nHL_ : number;\nIX : number;\nIY : number;\nSP : number;\nPC : number;\nIR : number;\niff1 : number;\niff2 : number;\nim : number;\nhalted : boolean;\ndo_delayed_di : boolean;\ndo_delayed_ei : boolean;\ncycle_counter : number;\n}\n\nexport class Z80 implements CPU, InstructionBased, IOBusConnected, SavesState, Interruptable {\n\n cpu;\n interruptType;\n memBus : Bus;\n ioBus : Bus;\n retryInterrupts : boolean = false;\n retryData : number = -1;\n \n private buildCPU() {\n if (this.memBus && this.ioBus) {\n this.cpu = new FastZ80({\n mem_read: this.memBus.read.bind(this.memBus),\n mem_write: this.memBus.write.bind(this.memBus),\n io_read: this.ioBus.read.bind(this.ioBus),\n io_write: this.ioBus.write.bind(this.ioBus),\n });\n }\n }\n connectMemoryBus(bus:Bus) {\n this.memBus = bus;\n this.buildCPU();\n }\n connectIOBus(bus:Bus) {\n this.ioBus = bus;\n this.buildCPU();\n }\n advanceInsn() {\n if (this.retryInterrupts && this.retryData >= 0 && this.cpu.interrupt(false, this.retryData)) {\n this.retryData = -1;\n }\n return this.cpu.advanceInsn();\n }\n reset() {\n this.cpu.reset();\n }\n interrupt(data:number) {\n if (!this.cpu.interrupt(false, data) && this.retryInterrupts) {\n this.retryData = data;\n }\n }\n NMI() {\n this.cpu.interrupt(true, 0);\n }\n getSP() {\n return this.cpu.getSP();\n }\n getPC() {\n return this.cpu.getPC();\n }\n isHalted() {\n return this.cpu.getHalted();\n }\n saveState() {\n return this.cpu.saveState();\n }\n loadState(s) {\n this.cpu.loadState(s);\n }\n isStable() { return true; }\n // TODO: metadata\n // TODO: disassembler\n}\n", "\nimport { SampledAudioSink } from \"./devices\";\n\n// from TSS\ndeclare var MasterChannel, AudioLooper, PsgDeviceChannel;\n\nexport class MasterAudio {\n master = new MasterChannel();\n looper;\n start() {\n if (!this.looper) {\n this.looper = new AudioLooper(512);\n this.looper.setChannel(this.master);\n this.looper.activate();\n }\n }\n stop() {\n if (this.looper) {\n this.looper.setChannel(null);\n this.looper = null;\n }\n }\n}\n\nexport class AY38910_Audio {\n master : MasterAudio;\n psg = new PsgDeviceChannel();\n curreg = 0;\n\n constructor(master : MasterAudio) {\n this.master = master;\n this.psg.setMode(PsgDeviceChannel.MODE_SIGNED);\n this.psg.setDevice(PsgDeviceChannel.DEVICE_AY_3_8910);\n master.master.addChannel(this.psg);\n }\n\n reset() {\n for (var i=15; i>=0; i--) {\n this.selectRegister(i);\n this.setData(0);\n }\n }\n selectRegister(val : number) {\n this.curreg = val & 0xf;\n }\n setData(val : number) {\n this.psg.writeRegisterAY(this.curreg, val & 0xff);\n }\n readData() {\n return this.psg.readRegister(this.curreg);\n }\n currentRegister() { return this.curreg; }\n}\n\nexport class SN76489_Audio {\n master : MasterAudio;\n psg = new PsgDeviceChannel();\n\n constructor(master : MasterAudio) {\n this.master = master;\n this.psg.setMode(PsgDeviceChannel.MODE_SIGNED);\n this.psg.setDevice(PsgDeviceChannel.DEVICE_SN76489);\n master.master.addChannel(this.psg);\n }\n reset() {\n // TODO\n }\n setData(val : number) {\n this.psg.writeRegisterSN(0, val & 0xff);\n }\n}\n\n// https://en.wikipedia.org/wiki/POKEY\n// https://user.xmission.com/~trevin/atari/pokey_regs.html\n// http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm\n\nexport function newPOKEYAudio(count:number) {\n var audio = new MasterAudio();\n for (var i=1; i<=count; i++) {\n var pokey = new POKEYDeviceChannel();\n audio['pokey'+i] = pokey; // TODO: cheezy\n audio.master.addChannel(pokey);\n }\n return audio;\n}\n\nfunction combinePolys(a, b) {\n var arr = new Uint8Array(a.length * b.length);\n var n = 0;\n for (var i=0; i 0.5 ? 1 : 0;\n }\n var bit17_5 = combinePolys(bit17, bit5);\n var bit5_4 = combinePolys(bit5, bit4);\n var wavetones = [\n bit17_5, bit5, bit5_4, bit5,\n bit17, bit2, bit4, bit2\n ];\n // TIA\n var div2 = divideBy(2);\n var div6 = divideBy(6);\n var div31 = divideBy(31);\n var div93 = divideBy(93);\n var bit15_4 = combinePolys(bit15, bit4);\n var bit5_2 = combinePolys(bit5, div2);\n var bit5_6 = combinePolys(bit5, div6);\n var tiawavetones = [\n bit1, bit4, bit15_4, bit5_4,\n div2, div2, div31, bit5_2,\n bit9, bit5, div31, bit1,\n div6, div6, div93, bit5_6\n ];\n \n // registers\n var regs = new Uint8Array(16);\n var counters = new Float32Array(4);\n var deltas = new Float32Array(4);\n var volume = new Float32Array(4);\n var audc = new Uint8Array(4);\n var waveforms = [bit1, bit1, bit1, bit1];\n var buffer;\n var sampleRate;\n var clock, baseDelta;\n var dirty = true;\n\n //\n\n this.setBufferLength = function (length) {\n buffer = new Int32Array(length);\n };\n\n this.getBuffer = function () {\n return buffer;\n };\n\n this.setSampleRate = function (rate) {\n sampleRate = rate;\n baseDelta = FREQ_17_EXACT / rate;\n };\n\n function updateValues(addr) {\n var ctrl = regs[8];\n var base = (ctrl & CLOCK_15) ? DIV_15 : DIV_64;\n var div;\n var i = addr & 4;\n var j = i>>1;\n var k = i>>2;\n if (ctrl & (CH1_CH2>>k)) {\n if (ctrl & (CH1_179>>k))\n div = regs[i+2] * 256 + regs[i+0] + 7;\n else\n div = (regs[i+2] * 256 + regs[i+0] + 1) * base;\n deltas[j+1] = baseDelta / div;\n deltas[j+0] = 0;\n } else {\n if (ctrl & (CH1_179>>k)) {\n div = regs[i+0] + 4;\n } else {\n div = (regs[i+0] + 1) * base;\n }\n deltas[j+0] = baseDelta / div;\n div = (regs[i+2] + 1) * base;\n deltas[j+1] = baseDelta / div;\n }\n //console.log(addr, ctrl.toString(16), div, deltas[j+0], deltas[j+1]);\n }\n\n this.setRegister = function(addr, value) {\n addr &= 0xf;\n value &= 0xff;\n if (regs[addr] != value) {\n regs[addr] = value;\n switch (addr) {\n case 0:\n case 2:\n case 4:\n case 6: // AUDF\n case 8: // ctrl\n dirty = true;\n break;\n case 1:\n case 3:\n case 5:\n case 7: // AUDC\n volume[addr>>1] = value & 0xf;\n waveforms[addr>>1] = wavetones[value>>5];\n break;\n }\n }\n }\n\n this.getRegister = function(addr) {\n addr &= 0xf;\n return regs[addr];\n }\n \n this.setTIARegister = function(addr, value) {\n switch (addr) {\n case 0x17:\n case 0x18:\n regs[(addr&1)*4] = value & 0x1f;\n dirty = true;\n break;\n case 0x15:\n case 0x16:\n waveforms[(addr&1)*2] = tiawavetones[value & 0xf];\n break;\n case 0x19:\n case 0x1a:\n volume[(addr&1)*2] = value & 0xf;\n break;\n }\n }\n\n this.generate = function (length) {\n if (dirty) {\n updateValues(0);\n updateValues(4);\n dirty = false;\n }\n for (var s=0; s 0 && d < 1 && v > 0) {\n var wav = waveforms[i];\n var cnt = counters[i] += d;\n if (cnt > wav.length) {\n cnt = counters[i] = cnt - Math.floor(cnt / wav.length) * wav.length;\n }\n var on = wav[Math.floor(cnt)];\n if (on) {\n sample += v;\n }\n }\n }\n sample *= 64;\n buffer[s] = sample;\n buffer[s+1] = sample;\n }\n }\n}\n\n////// Worker sound\n\nexport var WorkerSoundChannel = function(worker) {\n var sampleRate;\n var output;\n var pending = [];\n var pendingLength = 0;\n\n worker.onmessage = function(e) {\n if (e && e.data && e.data.samples && output) {\n pending.push(e.data.samples);\n pendingLength += e.data.samples.length;\n }\n };\n\n this.setBufferLength = function (length) {\n output = new Int16Array(length);\n //worker.postMessage({bufferLength:length,numChannels:2});\n pendingLength = 0;\n };\n\n this.getBuffer = function () {\n return output;\n };\n\n this.setSampleRate = function (rate) {\n sampleRate = rate;\n worker.postMessage({sampleRate:rate});\n };\n\n this.generate = function (length) {\n if (pendingLength < length*3) {\n //console.log(length, pendingLength);\n output.fill(0);\n return; // TODO: send sync msg?\n }\n for (var i=0; i= buffer.length) {\n bufpos = 0;\n bufferlist[ifill] = buffer;\n var inext = (ifill + 1) % bufferlist.length;\n if (inext == idrain) {\n ifill = Math.floor(idrain + nbuffers/2) % bufferlist.length;\n //console.log('SampleAudio: skipped buffer', idrain, ifill); // TODO\n } else {\n ifill = inext;\n }\n buffer = bufferlist[ifill];\n }\n }\n\n this.feedSample = function(value, count) {\n accum += value * count;\n sfrac += sinc * count;\n if (sfrac >= 1) {\n accum /= sfrac;\n while (sfrac >= 1) {\n this.addSingleSample(accum * sinc);\n sfrac -= 1;\n }\n accum *= sfrac;\n }\n }\n \n}\n\n\nexport class SampledAudio {\n sa;\n constructor(sampleRate : number) {\n this.sa = new SampleAudio(sampleRate);\n }\n feedSample(value:number, count:number) {\n this.sa.feedSample(value, count);\n }\n start() {\n this.sa.start();\n }\n stop() {\n this.sa.stop();\n }\n}\n\ninterface TssChannel {\n setBufferLength(len : number) : void;\n setSampleRate(rate : number) : void;\n getBuffer() : number[];\n generate(numSamples : number) : void;\n}\n\nexport class TssChannelAdapter {\n channels : TssChannel[];\n audioGain = 1.0 / 8192;\n bufferLength : number;\n\n constructor(chans, oversample:number, sampleRate:number) {\n this.bufferLength = oversample * 2;\n this.channels = chans.generate ? [chans] : chans; // array or single channel\n this.channels.forEach((c) => {\n c.setBufferLength(this.bufferLength);\n c.setSampleRate(sampleRate);\n });\n }\n\n generate(sink:SampledAudioSink) {\n var l = this.bufferLength;\n var bufs = this.channels.map((ch) => ch.getBuffer());\n this.channels.forEach((ch) => {\n ch.generate(l);\n });\n for (let i=0; i total += buf[i]);\n sink.feedSample(total * this.audioGain, 1);\n };\n }\n}\n\n", "\nimport { Probeable, ProbeAll } from \"./devices\";\n\nexport enum ProbeFlags {\n CLOCKS\t = 0x00000000,\n EXECUTE\t = 0x01000000,\n INTERRUPT\t= 0x08000000,\n ILLEGAL\t = 0x09000000,\n SP_PUSH\t = 0x0a000000,\n SP_POP\t = 0x0b000000,\n HAS_VALUE = 0x10000000,\n MEM_READ\t= 0x12000000,\n MEM_WRITE\t= 0x13000000,\n IO_READ\t = 0x14000000,\n IO_WRITE\t= 0x15000000,\n VRAM_READ\t= 0x16000000,\n VRAM_WRITE= 0x17000000,\n DMA_READ = 0x18000000,\n DMA_WRITE = 0x19000000,\n WAIT = 0x1f000000,\n SCANLINE\t= 0x7e000000,\n FRAME\t\t = 0x7f000000,\n}\n\nclass ProbeFrame {\n data : Uint32Array;\n len : number;\n}\n\nexport class ProbeRecorder implements ProbeAll {\n\n m : Probeable; // machine to probe\n buf : Uint32Array; // buffer\n idx : number = 0; // index into buffer\n sl : number = 0; // scanline\n cur_sp = -1; // last stack pointer\n singleFrame : boolean = true; // clear between frames\n\n constructor(m:Probeable, buflen?:number) {\n this.m = m;\n this.reset(buflen || 0x100000);\n }\n start() {\n this.m.connectProbe(this);\n }\n stop() {\n this.m.connectProbe(null);\n }\n reset(newbuflen? : number) {\n if (newbuflen) this.buf = new Uint32Array(newbuflen);\n this.sl = 0;\n this.cur_sp = -1;\n this.clear();\n }\n clear() {\n this.idx = 0;\n }\n logData(a:number) {\n this.log(a);\n }\n log(a:number) {\n // TODO: coalesce READ and EXECUTE and PUSH/POP\n if (this.idx >= this.buf.length) return;\n this.buf[this.idx++] = a;\n }\n relog(a:number) {\n this.buf[this.idx-1] = a;\n }\n lastOp() {\n if (this.idx > 0)\n return this.buf[this.idx-1] & 0xff000000;\n else\n return -1;\n }\n lastAddr() {\n if (this.idx > 0)\n return this.buf[this.idx-1] & 0xffffff;\n else\n return -1;\n }\n addLogBuffer(src: Uint32Array) {\n if (this.idx + src.length > this.buf.length) {\n src = src.slice(0, this.buf.length - this.idx);\n }\n this.buf.set(src, this.idx);\n this.idx += src.length;\n}\n logClocks(clocks:number) {\n clocks |= 0;\n if (clocks > 0) {\n if (this.lastOp() == ProbeFlags.CLOCKS)\n this.relog((this.lastAddr() + clocks) | ProbeFlags.CLOCKS); // coalesce clocks\n else\n this.log(clocks | ProbeFlags.CLOCKS);\n }\n }\n logNewScanline() {\n this.log(ProbeFlags.SCANLINE);\n this.sl++;\n }\n logNewFrame() {\n this.log(ProbeFlags.FRAME);\n this.sl = 0;\n if (this.singleFrame) this.clear();\n }\n logExecute(address:number, SP:number) {\n // record stack pushes/pops (from last instruction)\n if (this.cur_sp !== SP) {\n if (SP < this.cur_sp) {\n this.log(ProbeFlags.SP_PUSH | SP);\n }\n if (SP > this.cur_sp) {\n this.log(ProbeFlags.SP_POP | SP);\n }\n this.cur_sp = SP;\n }\n this.log(address | ProbeFlags.EXECUTE);\n }\n logInterrupt(type:number) {\n this.log(type | ProbeFlags.INTERRUPT);\n }\n logValue(address:number, value:number, op:number) {\n this.log((address & 0xffff) | ((value & 0xff)<<16) | op);\n }\n logRead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.MEM_READ);\n }\n logWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.MEM_WRITE);\n }\n logIORead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.IO_READ);\n }\n logIOWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.IO_WRITE);\n }\n logVRAMRead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.VRAM_READ);\n }\n logVRAMWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.VRAM_WRITE);\n }\n logIllegal(address:number) {\n this.log(address | ProbeFlags.ILLEGAL);\n }\n logWait(address:number) {\n this.log(address | ProbeFlags.WAIT);\n }\n logDMARead(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.DMA_READ);\n }\n logDMAWrite(address:number, value:number) {\n this.logValue(address, value, ProbeFlags.DMA_WRITE);\n }\n countEvents(op : number) : number {\n var count = 0;\n for (var i=0; i {\n saveState(): S;\n loadState(state: S): void;\n}\n\nexport interface Bus {\n read(a: number): number;\n write(a: number, v: number): void;\n readConst?(a: number): number;\n}\n\nexport interface Bus32 {\n read32(a: number): number;\n write32(a: number, v: number): void;\n readConst32?(a: number): number;\n}\n\nexport interface ClockBased {\n advanceClock(): void;\n}\n\nexport interface InstructionBased {\n advanceInsn(): number;\n}\n\nexport type TrapCondition = () => boolean;\n\nexport interface FrameBased {\n advanceFrame(trap: TrapCondition): number;\n}\n\nexport interface VideoSource {\n getVideoParams(): VideoParams;\n connectVideo(pixels: Uint32Array): void;\n}\n\nexport interface RasterFrameBased extends FrameBased, VideoSource {\n getRasterY(): number;\n getRasterX(): number;\n getRasterCanvasPosition?(): { x: number, y: number };\n}\n\nexport interface VideoParams {\n width: number;\n height: number;\n overscan?: boolean;\n rotate?: number;\n videoFrequency?: number; // default = 60\n aspect?: number;\n}\n\n// TODO: frame buffer optimization (apple2, etc)\n\nexport interface SampledAudioParams {\n sampleRate: number;\n stereo: boolean;\n}\n\nexport interface SampledAudioSink {\n feedSample(value: number, count: number): void;\n //sendAudioFrame(samples:Uint16Array) : void;\n}\n\nexport interface SampledAudioSource {\n getAudioParams(): SampledAudioParams;\n connectAudio(audio: SampledAudioSink): void;\n}\n\nexport interface AcceptsROM {\n loadROM(data: Uint8Array, title?: string, origin?: number): void;\n}\n\nexport interface AcceptsBIOS {\n loadBIOS(data: Uint8Array, title?: string): void;\n}\n\nexport interface Resettable {\n reset(): void;\n}\n\nexport interface MemoryBusConnected {\n connectMemoryBus(bus: Bus): void;\n}\n\nexport interface IOBusConnected {\n connectIOBus(bus: Bus): void;\n}\n\nexport interface CPU extends MemoryBusConnected, Resettable, SavesState {\n getPC(): number;\n getSP(): number;\n isStable(): boolean;\n}\n\nexport interface HasCPU extends Resettable {\n cpu: CPU;\n}\n\nexport interface Interruptable {\n interrupt(type: IT): void;\n}\n\nexport interface SavesInputState {\n loadControlsState(cs: CS): void;\n saveControlsState(): CS;\n}\n\nexport interface AcceptsKeyInput {\n setKeyInput(key: number, code: number, flags: number): void;\n}\n\nexport interface AcceptsPaddleInput {\n setPaddleInput(controller: number, value: number): void;\n setPaddleButton?(index: number, pressed: boolean): void;\n}\n\n// TODO: interface not yet used (setKeyInput() handles joystick)\nexport interface AcceptsJoyInput {\n setJoyInput(joy: number, bitmask: number): void;\n}\n\n// SERIAL I/O\n\nexport interface SerialEvent {\n op: 'read' | 'write';\n value: number;\n nbits: number;\n}\n\n// TODO: all these needed?\nexport interface SerialIOInterface {\n // from machine to platform\n clearToSend(): boolean;\n sendByte(b: number);\n // from platform to machine\n byteAvailable(): boolean;\n recvByte(): number;\n // implement these too\n reset(): void;\n advance(clocks: number): void;\n // refresh() : void;\n}\n\nexport interface HasSerialIO {\n connectSerialIO(serial: SerialIOInterface);\n serialOut?: SerialEvent[]; // outgoing event log\n serialIn?: SerialEvent[]; // incoming queue\n}\n\n/// PROFILER\n\nexport interface Probeable {\n connectProbe(probe: ProbeAll): void;\n}\n\nexport interface ProbeTime {\n logClocks(clocks: number);\n logNewScanline();\n logNewFrame();\n}\n\nexport interface ProbeCPU {\n logExecute(address: number, SP: number);\n logInterrupt(type: number);\n logIllegal(address: number);\n logWait(address: number);\n}\n\nexport interface ProbeBus {\n logRead(address: number, value: number);\n logWrite(address: number, value: number);\n logDMARead(address: number, value: number);\n logDMAWrite(address: number, value: number);\n}\n\nexport interface ProbeIO {\n logIORead(address: number, value: number);\n logIOWrite(address: number, value: number);\n}\n\nexport interface ProbeVRAM {\n logVRAMRead(address: number, value: number);\n logVRAMWrite(address: number, value: number);\n}\n\nexport interface ProbeAll extends ProbeTime, ProbeCPU, ProbeBus, ProbeIO, ProbeVRAM {\n logData(data: number); // entire 32 bits\n addLogBuffer(src: Uint32Array);\n}\n\nexport class NullProbe implements ProbeAll {\n logClocks() { }\n logNewScanline() { }\n logNewFrame() { }\n logExecute() { }\n logInterrupt() { }\n logRead() { }\n logWrite() { }\n logIORead() { }\n logIOWrite() { }\n logVRAMRead() { }\n logVRAMWrite() { }\n logIllegal() { }\n logWait() { }\n logDMARead() { }\n logDMAWrite() { }\n logData() { }\n addLogBuffer(src: Uint32Array) { }\n}\n\n/// CONVENIENCE\n\nexport interface BasicMachineControlsState {\n inputs: Uint8Array;\n}\n\nexport interface BasicMachineState extends BasicMachineControlsState {\n c: any; // TODO\n ram: Uint8Array;\n}\n\nexport abstract class BasicHeadlessMachine implements HasCPU, Bus, AcceptsROM, Probeable,\n SavesState, SavesInputState {\n\n abstract cpuFrequency: number;\n abstract defaultROMSize: number;\n\n abstract cpu: CPU;\n abstract ram: Uint8Array;\n\n rom: Uint8Array;\n inputs: Uint8Array = new Uint8Array(32);\n handler: (key, code, flags) => void; // keyboard handler\n\n nullProbe = new NullProbe();\n probe: ProbeAll = this.nullProbe;\n\n abstract read(a: number): number;\n abstract write(a: number, v: number): void;\n\n setKeyInput(key: number, code: number, flags: number): void {\n this.handler && this.handler(key, code, flags);\n }\n connectProbe(probe: ProbeAll): void {\n this.probe = probe || this.nullProbe;\n }\n reset() {\n this.cpu.reset();\n }\n loadROM(data: Uint8Array, title?: string, origin?: number): void {\n if (!this.rom) this.rom = new Uint8Array(this.defaultROMSize);\n if (data.length > this.rom.length)\n throw new Error(`ROM too big: ${data.length} > ${this.rom.length}`);\n this.rom.set(data);\n }\n loadState(state) {\n this.cpu.loadState(state.c);\n this.ram.set(state.ram);\n this.inputs.set(state.inputs);\n }\n saveState() {\n return {\n c: this.cpu.saveState(),\n ram: this.ram.slice(0),\n inputs: this.inputs.slice(0),\n };\n }\n loadControlsState(state) {\n this.inputs.set(state.inputs);\n }\n saveControlsState() {\n return {\n inputs: this.inputs.slice(0)\n };\n }\n advanceCPU() {\n var c = this.cpu as any;\n var n = 1;\n if (this.cpu.isStable()) { this.probe.logExecute(this.cpu.getPC(), this.cpu.getSP()); }\n if (c.advanceClock) { c.advanceClock(); }\n else if (c.advanceInsn) { n = c.advanceInsn(1); }\n this.probe.logClocks(n);\n return n;\n }\n probeMemoryBus(membus: Bus & Partial): Bus & Partial {\n return {\n read: (a) => {\n let val = membus.read(a);\n this.probe.logRead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logWrite(a, v);\n membus.write(a, v);\n },\n read32: (a) => {\n let val = membus.read32(a);\n this.probe.logRead(a, val);\n return val;\n },\n write32: (a, v) => {\n this.probe.logWrite(a, v);\n membus.write32(a, v);\n }\n };\n }\n connectCPUMemoryBus(membus: Bus): void {\n this.cpu.connectMemoryBus(this.probeMemoryBus(membus as Bus&Bus32));\n }\n probeIOBus(iobus: Bus): Bus {\n return {\n read: (a) => {\n let val = iobus.read(a);\n this.probe.logIORead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logIOWrite(a, v);\n iobus.write(a, v);\n },\n };\n }\n probeDMABus(iobus: Bus): Bus {\n return {\n read: (a) => {\n let val = iobus.read(a);\n this.probe.logDMARead(a, val);\n return val;\n },\n write: (a, v) => {\n this.probe.logDMAWrite(a, v);\n iobus.write(a, v);\n }\n };\n }\n connectCPUIOBus(iobus: Bus): void {\n this.cpu['connectIOBus'](this.probeIOBus(iobus));\n }\n}\n\nexport abstract class BasicMachine extends BasicHeadlessMachine implements SampledAudioSource {\n\n abstract canvasWidth: number;\n abstract numVisibleScanlines: number;\n abstract sampleRate: number;\n overscan: boolean = false;\n rotate: number = 0;\n aspectRatio: number;\n\n pixels: Uint32Array;\n audio: SampledAudioSink;\n\n scanline: number;\n\n getAudioParams(): SampledAudioParams {\n return { sampleRate: this.sampleRate, stereo: false };\n }\n connectAudio(audio: SampledAudioSink): void {\n this.audio = audio;\n }\n getVideoParams(): VideoParams {\n return {\n width: this.canvasWidth,\n height: this.numVisibleScanlines,\n aspect: this.aspectRatio,\n overscan: this.overscan,\n rotate: this.rotate\n };\n }\n connectVideo(pixels: Uint32Array): void {\n this.pixels = pixels;\n }\n}\n\nexport abstract class BasicScanlineMachine extends BasicMachine implements RasterFrameBased {\n\n abstract numTotalScanlines: number;\n abstract cpuCyclesPerLine: number;\n\n abstract startScanline(): void;\n abstract drawScanline(): void;\n\n frameCycles: number;\n\n advanceFrame(trap: TrapCondition): number {\n this.preFrame();\n var endLineClock = 0;\n var steps = 0;\n this.probe.logNewFrame();\n this.frameCycles = 0;\n for (var sl = 0; sl < this.numTotalScanlines; sl++) {\n endLineClock += this.cpuCyclesPerLine; // could be fractional\n this.scanline = sl;\n this.startScanline();\n while (this.frameCycles < endLineClock) {\n if (trap && trap()) {\n sl = 999;\n break;\n }\n this.frameCycles += this.advanceCPU();\n steps++;\n }\n this.drawScanline();\n this.probe.logNewScanline();\n this.probe.logClocks(Math.floor(this.frameCycles - endLineClock)); // remainder of prev. line\n }\n this.postFrame();\n return steps; // TODO: return steps, not clock? for recorder\n }\n preFrame() { }\n postFrame() { }\n getRasterY() { return this.scanline; }\n getRasterX() { return this.frameCycles % this.cpuCyclesPerLine; }\n}\n", "\nimport { hex } from \"../util\";\n\nconst Z80_OPS = [\"nop\",\"ld bc,xx\",\"ld (bc),a\",\"inc bc\",\"inc b\",\"dec b\",\"ld b,x\",\"rlca\",\"ex af,af'\",\"add hl,bc\",\"ld a,(bc)\",\"dec bc\",\"inc c\",\"dec c\",\"ld c,x\",\"rrca\",\"djnz x\",\"ld de,xx\",\"ld (de),a\",\"inc de\",\"inc d\",\"dec d\",\"ld d,x\",\"rla\",\"jr x\",\"add hl,de\",\"ld a,(de)\",\"dec de\",\"inc e\",\"dec e\",\"ld e,x\",\"rra\",\"jr nz,x\",\"ld hl,xx\",\"ld (xx),hl\",\"inc hl\",\"inc h\",\"dec h\",\"ld h,x\",\"daa\",\"jr z,x\",\"add hl,hl\",\"ld hl,(xx)\",\"dec hl\",\"inc l\",\"dec l\",\"ld l,x\",\"cpl\",\"jr nc,x\",\"ld sp,xx\",\"ld (xx),a\",\"inc sp\",\"inc (hl)\",\"dec (hl)\",\"ld (hl),x\",\"scf\",\"jr c,x\",\"add hl,sp\",\"ld a,(xx)\",\"dec sp\",\"inc a\",\"dec a\",\"ld a,x\",\"ccf\",\"ld b,b\",\"ld b,c\",\"ld b,d\",\"ld b,e\",\"ld b,h\",\"ld b,l\",\"ld b,(hl)\",\"ld b,a\",\"ld c,b\",\"ld c,c\",\"ld c,d\",\"ld c,e\",\"ld c,h\",\"ld c,l\",\"ld c,(hl)\",\"ld c,a\",\"ld d,b\",\"ld d,c\",\"ld d,d\",\"ld d,e\",\"ld d,h\",\"ld d,l\",\"ld d,(hl)\",\"ld d,a\",\"ld e,b\",\"ld e,c\",\"ld e,d\",\"ld e,e\",\"ld e,h\",\"ld e,l\",\"ld e,(hl)\",\"ld e,a\",\"ld h,b\",\"ld h,c\",\"ld h,d\",\"ld h,e\",\"ld h,h\",\"ld h,l\",\"ld h,(hl)\",\"ld h,a\",\"ld l,b\",\"ld l,c\",\"ld l,d\",\"ld l,e\",\"ld l,h\",\"ld l,l\",\"ld l,(hl)\",\"ld l,a\",\"ld (hl),b\",\"ld (hl),c\",\"ld (hl),d\",\"ld (hl),e\",\"ld (hl),h\",\"ld (hl),l\",\"halt\",\"ld (hl),a\",\"ld a,b\",\"ld a,c\",\"ld a,d\",\"ld a,e\",\"ld a,h\",\"ld a,l\",\"ld a,(hl)\",\"ld a,a\",\"add a,b\",\"add a,c\",\"add a,d\",\"add a,e\",\"add a,h\",\"add a,l\",\"add a,(hl)\",\"add a,a\",\"adc a,b\",\"adc a,c\",\"adc a,d\",\"adc a,e\",\"adc a,h\",\"adc a,l\",\"adc a,(hl)\",\"adc a,a\",\"sub b\",\"sub c\",\"sub d\",\"sub e\",\"sub h\",\"sub l\",\"sub (hl)\",\"sub a\",\"sbc a,b\",\"sbc a,c\",\"sbc a,d\",\"sbc a,e\",\"sbc a,h\",\"sbc a,l\",\"sbc a,(hl)\",\"sbc a,a\",\"and b\",\"and c\",\"and d\",\"and e\",\"and h\",\"and l\",\"and (hl)\",\"and a\",\"xor b\",\"xor c\",\"xor d\",\"xor e\",\"xor h\",\"xor l\",\"xor (hl)\",\"xor a\",\"or b\",\"or c\",\"or d\",\"or e\",\"or h\",\"or l\",\"or (hl)\",\"or a\",\"cp b\",\"cp c\",\"cp d\",\"cp e\",\"cp h\",\"cp l\",\"cp (hl)\",\"cp a\",\"ret nz\",\"pop bc\",\"jp nz,xx\",\"jp xx\",\"call nz,xx\",\"push bc\",\"add a,x\",\"rst 00h\",\"ret z\",\"ret\",\"jp z,xx\",\"xxBITxx\",\"call z,xx\",\"call xx\",\"adc a,x\",\"rst 08h\",\"ret nc\",\"pop de\",\"jp nc,xx\",\"out (x),a\",\"call nc,xx\",\"push de\",\"sub x\",\"rst 10h\",\"ret c\",\"exx\",\"jp c,xx\",\"in a,(x)\",\"call c,xx\",\"xxIXxx\",\"sbc a,x\",\"rst 18h\",\"ret po\",\"pop hl\",\"jp po,xx\",\"ex (sp),hl\",\"call po,xx\",\"push hl\",\"and x\",\"rst 20h\",\"ret pe\",\"jp (hl)\",\"jp pe,xx\",\"ex de,hl\",\"call pe,xx\",\"xx80xx\",\"xor x\",\"rst 28h\",\"ret p\",\"pop af\",\"jp p,xx\",\"di\",\"call p,xx\",\"push af\",\"or x\",\"rst 30h\",\"ret m\",\"ld sp,hl\",\"jp m,xx\",\"ei\",\"call m,xx\",\"xxIYxx\",\"cp x\",\"rst 38h\"];\nconst Z80_OPS_ED = [\"in b,(c)\",\"out (c),b\",\"sbc hl,bc\",\"ld (xx),bc\",\"neg\",\"retn\",\"im 0\",\"ld i,a\",\"in c,(c)\",\"out (c),c\",\"adc hl,bc\",\"ld bc,(xx)\",\"neg\",\"reti\",\"\",\"ld r,a\",\"in d,(c)\",\"out (c),d\",\"sbc hl,de\",\"ld (xx),de\",\"neg\",\"retn\",\"im 1\",\"ld a,i\",\"in e,(c)\",\"out (c),e\",\"adc hl,de\",\"ld de,(xx)\",\"neg\",\"retn\",\"im 2\",\"ld a,r\",\"in h,(c)\",\"out (c),h\",\"sbc hl,hl\",\"ld (xx),hl\",\"neg\",\"retn\",\"\",\"rrd\",\"in l,(c)\",\"out (c),l\",\"adc hl,hl\",\"ld hl,(xx)\",\"neg\",\"retn\",\"\",\"rld\",\"in f,(c)\",\"out (c),f\",\"sbc hl,sp\",\"ld (xx),sp\",\"neg\",\"retn\",\"\",\"\",\"in a,(c)\",\"out (c),a\",\"adc hl,sp\",\"ld sp,(xx)\",\"neg\",\"reti\",\"\",\"\",\"ldi\",\"cpi\",\"ini\",\"outi\",\"\",\"\",\"\",\"\",\"ldd\",\"cpd\",\"ind\",\"outd\",\"\",\"\",\"\",\"\",\"ldir\",\"cpir\",\"inir\",\"otir\",\"\",\"\",\"\",\"\",\"lddr\",\"cpdr\",\"indr\",\"otdr\",\"\",\"\",\"\",\"\"];\nconst Z80_OPS_CB = [\"rlc b\",\"rlc c\",\"rlc d\",\"rlc e\",\"rlc h\",\"rlc l\",\"rlc (hl)\",\"rlc a\",\"rrc b\",\"rrc c\",\"rrc d\",\"rrc e\",\"rrc h\",\"rrc l\",\"rrc (hl)\",\"rrc a\",\"rl b\",\"rl c\",\"rl d\",\"rl e\",\"rl h\",\"rl l\",\"rl (hl)\",\"rl a\",\"rr b\",\"rr c\",\"rr d\",\"rr e\",\"rr h\",\"rr l\",\"rr (hl)\",\"rr a\",\"sla b\",\"sla c\",\"sla d\",\"sla e\",\"sla h\",\"sla l\",\"sla (hl)\",\"sla a\",\"sra b\",\"sra c\",\"sra d\",\"sra e\",\"sra h\",\"sra l\",\"sra (hl)\",\"sra a\",\"sll b\",\"sll c\",\"sll d\",\"sll e\",\"sll h\",\"sll l\",\"sll (hl)\",\"sll a\",\"srl b\",\"srl c\",\"srl d\",\"srl e\",\"srl h\",\"srl l\",\"srl (hl)\",\"srl a\",\"bit 0,b\",\"bit 0,c\",\"bit 0,d\",\"bit 0,e\",\"bit 0,h\",\"bit 0,l\",\"bit 0,(hl)\",\"bit 0,a\",\"bit 1,b\",\"bit 1,c\",\"bit 1,d\",\"bit 1,e\",\"bit 1,h\",\"bit 1,l\",\"bit 1,(hl)\",\"bit 1,a\",\"bit 2,b\",\"bit 2,c\",\"bit 2,d\",\"bit 2,e\",\"bit 2,h\",\"bit 2,l\",\"bit 2,(hl)\",\"bit 2,a\",\"bit 3,b\",\"bit 3,c\",\"bit 3,d\",\"bit 3,e\",\"bit 3,h\",\"bit 3,l\",\"bit 3,(hl)\",\"bit 3,a\",\"bit 4,b\",\"bit 4,c\",\"bit 4,d\",\"bit 4,e\",\"bit 4,h\",\"bit 4,l\",\"bit 4,(hl)\",\"bit 4,a\",\"bit 5,b\",\"bit 5,c\",\"bit 5,d\",\"bit 5,e\",\"bit 5,h\",\"bit 5,l\",\"bit 5,(hl)\",\"bit 5,a\",\"bit 6,b\",\"bit 6,c\",\"bit 6,d\",\"bit 6,e\",\"bit 6,h\",\"bit 6,l\",\"bit 6,(hl)\",\"bit 6,a\",\"bit 7,b\",\"bit 7,c\",\"bit 7,d\",\"bit 7,e\",\"bit 7,h\",\"bit 7,l\",\"bit 7,(hl)\",\"bit 7,a\",\"res 0,b\",\"res 0,c\",\"res 0,d\",\"res 0,e\",\"res 0,h\",\"res 0,l\",\"res 0,(hl)\",\"res 0,a\",\"res 1,b\",\"res 1,c\",\"res 1,d\",\"res 1,e\",\"res 1,h\",\"res 1,l\",\"res 1,(hl)\",\"res 1,a\",\"res 2,b\",\"res 2,c\",\"res 2,d\",\"res 2,e\",\"res 2,h\",\"res 2,l\",\"res 2,(hl)\",\"res 2,a\",\"res 3,b\",\"res 3,c\",\"res 3,d\",\"res 3,e\",\"res 3,h\",\"res 3,l\",\"res 3,(hl)\",\"res 3,a\",\"res 4,b\",\"res 4,c\",\"res 4,d\",\"res 4,e\",\"res 4,h\",\"res 4,l\",\"res 4,(hl)\",\"res 4,a\",\"res 5,b\",\"res 5,c\",\"res 5,d\",\"res 5,e\",\"res 5,h\",\"res 5,l\",\"res 5,(hl)\",\"res 5,a\",\"res 6,b\",\"res 6,c\",\"res 6,d\",\"res 6,e\",\"res 6,h\",\"res 6,l\",\"res 6,(hl)\",\"res 6,a\",\"res 7,b\",\"res 7,c\",\"res 7,d\",\"res 7,e\",\"res 7,h\",\"res 7,l\",\"res 7,(hl)\",\"res 7,a\",\"set 0,b\",\"set 0,c\",\"set 0,d\",\"set 0,e\",\"set 0,h\",\"set 0,l\",\"set 0,(hl)\",\"set 0,a\",\"set 1,b\",\"set 1,c\",\"set 1,d\",\"set 1,e\",\"set 1,h\",\"set 1,l\",\"set 1,(hl)\",\"set 1,a\",\"set 2,b\",\"set 2,c\",\"set 2,d\",\"set 2,e\",\"set 2,h\",\"set 2,l\",\"set 2,(hl)\",\"set 2,a\",\"set 3,b\",\"set 3,c\",\"set 3,d\",\"set 3,e\",\"set 3,h\",\"set 3,l\",\"set 3,(hl)\",\"set 3,a\",\"set 4,b\",\"set 4,c\",\"set 4,d\",\"set 4,e\",\"set 4,h\",\"set 4,l\",\"set 4,(hl)\",\"set 4,a\",\"set 5,b\",\"set 5,c\",\"set 5,d\",\"set 5,e\",\"set 5,h\",\"set 5,l\",\"set 5,(hl)\",\"set 5,a\",\"set 6,b\",\"set 6,c\",\"set 6,d\",\"set 6,e\",\"set 6,h\",\"set 6,l\",\"set 6,(hl)\",\"set 6,a\",\"set 7,b\",\"set 7,c\",\"set 7,d\",\"set 7,e\",\"set 7,h\",\"set 7,l\",\"set 7,(hl)\",\"set 7,a\"];\n\nexport function disassembleZ80(pc:number, b0:number, b1:number, b2:number, b3:number) : {line:string, nbytes:number, isaddr:boolean} {\n\n var op,n,am;\n var bytes = [b0,b1,b2,b3];\n var isaddr = false;\n n=1;\n switch (b0) {\n case 0xcb:\n am = Z80_OPS_CB[b1];\n n++;\n break;\n case 0xed:\n if (b1 >= 0x40 && b1 <= 0x7f) am = Z80_OPS_ED[b1 - 0x40];\n if (b1 >= 0xa0 && b1 <= 0xbf) am = Z80_OPS_ED[b1 - 0xa0 + 0x40];\n n++;\n break;\n case 0xdd:\n case 0xfd:\n var ireg = (b0 == 0xdd) ? 'ix' : 'iy';\n if (b1 == 0xcb) {\n // swap the 3rd and 4th bytes [$dd $cb displacement opcode]\n am = Z80_OPS_CB[b3];\n bytes[2] = b3;\n bytes[3] = b2;\n n++;\n } else {\n am = Z80_OPS[b1];\n }\n am = am.replace(/[(]hl[)]/, '('+ireg+'+x)');\n am = am.replace(/\\bhl\\b/, ireg);\n n++;\n break;\n default:\n am = Z80_OPS[b0];\n break;\n }\n if (!am || !am.length) am = \"??\";\n if (/\\bxx\\b/.test(am)) {\n am = am.replace(/\\bxx\\b/,'$'+hex(bytes[n]+(bytes[n+1]<<8), 4));\n n += 2;\n isaddr = true;\n } else if (/\\bx\\b/.test(am)) {\n if (am.startsWith('j')) {\n var offset = (b1 < 0x80) ? (pc+2+b1) : (pc+2-(256-b1));\n offset &= 0xffff;\n am = am.replace(/\\bx\\b/,'$'+hex(offset, 4));\n isaddr = true;\n } else {\n am = am.replace(/\\bx\\b/,'$'+hex(bytes[n], 2));\n }\n n += 1;\n }\n return {line:am.toUpperCase(), nbytes:n, isaddr:isaddr};\n};\n", "\"use strict\";\n/*\nThe MIT License (MIT)\nCopyright (c) 2014 Martin Maly, http://retrocip.cz, http://www.uelectronics.info,\ntwitter: @uelectronics\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nexport function CPU6809() {\n\nvar ticks;\nvar rA,rB,rX,rY,rU,rS,PC,CC,DP,\nF_CARRY =1,\nF_OVERFLOW =2,\nF_ZERO =4,\nF_NEGATIVE =8,\nF_IRQMASK =16,\nF_HALFCARRY =32,\nF_FIRQMASK =64,\nF_ENTIRE =128,\n\nvecRESET = 0xFFFE,\nvecNMI = 0xFFFC,\nvecSWI = 0xFFFA,\nvecIRQ = 0xFFF8,\nvecFIRQ = 0xFFF6,\nvecSWI2 = 0xFFF4,\nvecSWI3 = 0xFFF2,\n\nT=0;\n\nvar IRQs;\n\nvar byteTo, byteAt;\n\nvar cycles = [\n 6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6, /* 00-0F */\n 0,0,2,4,0,0,5,9,0,2,3,0,3,2,8,6, /* 10-1F */\n 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, /* 20-2F */\n 4,4,4,4,5,5,5,5,0,5,3,6,9,11,0,19, /* 30-3F */\n 2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2, /* 40-4F */\n 2,0,0,2,2,0,2,2,2,2,2,0,2,2,0,2, /* 50-5F */\n 6,0,0,6,6,0,6,6,6,6,6,0,6,6,3,6, /* 60-6F */\n 7,0,0,7,7,0,7,7,7,7,7,0,7,7,4,7, /* 70-7F */\n 2,2,2,4,2,2,2,0,2,2,2,2,4,7,3,0, /* 80-8F */\n 4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5, /* 90-9F */\n 4,4,4,6,4,4,4,4,4,4,4,4,6,7,5,5, /* A0-AF */\n 5,5,5,7,5,5,5,5,5,5,5,5,7,8,6,6, /* B0-BF */\n 2,2,2,4,2,2,2,0,2,2,2,2,3,0,3,0, /* C0-CF */\n 4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5, /* D0-DF */\n 4,4,4,6,4,4,4,4,4,4,4,4,5,5,5,5, /* E0-EF */\n 5,5,5,7,5,5,5,5,5,5,5,5,6,6,6,6]; /* F0-FF */\n\n/* Instruction timing for the two-byte opcodes */\nvar cycles2 = [\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 00-0F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 10-1F */\n 0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, /* 20-2F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20, /* 30-3F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40-4F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50-5F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 60-6F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70-7F */\n 0,0,0,5,0,0,0,0,0,0,0,0,5,0,4,0, /* 80-8F */\n 0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6, /* 90-9F */\n 0,0,0,7,0,0,0,0,0,0,0,0,7,0,6,6, /* A0-AF */\n 0,0,0,8,0,0,0,0,0,0,0,0,8,0,7,7, /* B0-BF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, /* C0-CF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6, /* D0-DF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6, /* E0-EF */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7]; /* F0-FF */\n\n/* Negative and zero flags for quicker flag settings */\nvar flagsNZ = [\n 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 00-0F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 10-1F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 20-2F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 30-3F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40-4F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50-5F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 60-6F */\n 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70-7F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* 80-8F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* 90-9F */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* A0-AF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* B0-BF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* C0-CF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* D0-DF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, /* E0-EF */\n 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]; /* F0-FF */\n\nvar setV8 = function(a,b,r) {CC |= (((a^b^r^(r>>1))&0x80)>>6);};\nvar setV16 = function(a,b,r) {CC |= (((a^b^r^(r>>1))&0x8000)>>14);};\nvar getD = function() {return (rA<<8)+rB;};\nvar setD = function(v) {rA = (v>>8)& 0xff;rB=v&0xff;};\nvar PUSHB = function(b) {\n byteTo(--rS, b & 0xff);\n};\nvar PUSHW = function(b) {\n byteTo(--rS, b & 0xff);\n byteTo(--rS, (b>>8) & 0xff);\n};\n\nvar PUSHBU = function(b) {\n byteTo(--rU, b & 0xff);\n};\nvar PUSHWU = function(b) {\n byteTo(--rU, b & 0xff);\n byteTo(--rU, (b>>8) & 0xff);\n};\nvar PULLB = function() {\n return byteAt(rS++);\n};\nvar PULLW = function() {\n return byteAt(rS++) * 256 + byteAt(rS++);\n};\n\nvar PULLBU = function() {\n return byteAt(rU++);\n};\nvar PULLWU = function() {\n return byteAt(rU++) * 256 + byteAt(rU++);\n};\n\nvar PSHS = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x80) {PUSHW(PC);i += 2;}\n if (ucTemp & 0x40) {PUSHW(rU);i += 2;}\n if (ucTemp & 0x20){PUSHW(rY);i += 2;}\n if (ucTemp & 0x10){PUSHW(rX);i += 2;}\n if (ucTemp & 0x8){PUSHB(DP); i++;}\n if (ucTemp & 0x4){PUSHB(rB); i++;}\n if (ucTemp & 0x2){PUSHB(rA); i++;}\n if (ucTemp & 0x1){PUSHB(CC); i++;}\n T+=i; //timing\n};\nvar PSHU = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x80) {PUSHWU(PC);i += 2;}\n if (ucTemp & 0x40) {PUSHWU(rS);i += 2;}\n if (ucTemp & 0x20){PUSHWU(rY);i += 2;}\n if (ucTemp & 0x10){PUSHWU(rX);i += 2;}\n if (ucTemp & 0x8){PUSHBU(DP); i++;}\n if (ucTemp & 0x4){PUSHBU(rB); i++;}\n if (ucTemp & 0x2){PUSHBU(rA); i++;}\n if (ucTemp & 0x1){PUSHBU(CC); i++;}\n T+=i; //timing\n};\nvar PULS = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x1){CC = PULLB(); i++;}\n if (ucTemp & 0x2){rA = PULLB(); i++;}\n if (ucTemp & 0x4){rB = PULLB(); i++;}\n if (ucTemp & 0x8){DP = PULLB(); i++;}\n if (ucTemp & 0x10){rX = PULLW();i += 2;}\n if (ucTemp & 0x20){rY = PULLW();i += 2;}\n if (ucTemp & 0x40) {rU = PULLW();i += 2;}\n if (ucTemp & 0x80) {PC = PULLW();i += 2;}\n T+=i; //timing\n};\nvar PULU = function(ucTemp) {\n var i = 0;\n if (ucTemp & 0x1){CC = PULLBU(); i++;}\n if (ucTemp & 0x2){rA = PULLBU(); i++;}\n if (ucTemp & 0x4){rB = PULLBU(); i++;}\n if (ucTemp & 0x8){DP = PULLBU(); i++;}\n if (ucTemp & 0x10){rX = PULLWU();i += 2;}\n if (ucTemp & 0x20){rY = PULLWU();i += 2;}\n if (ucTemp & 0x40) {rS = PULLWU();i += 2;}\n if (ucTemp & 0x80) {PC = PULLWU();i += 2;}\n T+=i; //timing\n};\n\n\nvar getPBR = function(ucPostByte) {\n switch(ucPostByte & 0xf) {\n case 0x00: /* D */\n return getD();\n case 0x1: /* X */\n return rX;\n case 0x2: /* Y */\n return rY;\n case 0x3: /* U */\n return rU;\n case 0x4: /* S */\n return rS;\n case 0x5: /* PC */\n return PC;\n case 0x8: /* A */\n return rA;\n case 0x9: /* B */\n return rB;\n case 0xA: /* CC */\n return CC;\n case 0xB: /* DP */\n return DP;\n default: /* illegal */\n return null;\n }\n};\nvar setPBR = function(ucPostByte, v) {\n switch(ucPostByte & 0xf) /* Get destination register */\n {\n case 0x00: /* D */\n setD(v);return;\n case 0x1: /* X */\n rX = v; return;\n case 0x2: /* Y */\n rY = v; return;\n case 0x3: /* U */\n rU = v; return;\n case 0x4: /* S */\n rS = v; return;\n case 0x5: /* PC */\n PC = v; return;\n case 0x8: /* A */\n rA = v; return;\n case 0x9: /* B */\n rB = v; return;\n case 0xA: /* CC */\n CC = v; return;\n case 0xB: /* DP */\n DP = v; return;\n default: /* illegal */\n return;\n }\n};\n\nvar TFREXG = function(ucPostByte, bExchange)\n{\n\n var ucTemp = ucPostByte & 0x88;\n if (ucTemp == 0x80 || ucTemp == 0x08)\n ucTemp = 0; /* PROBLEM! */\n\n if (bExchange)\n {\n ucTemp = getPBR(ucPostByte>>4);\n setPBR(ucPostByte>>4, getPBR(ucPostByte));\n setPBR(ucPostByte, ucTemp);\n }\n else /* Transfer */ {\n setPBR(ucPostByte, getPBR(ucPostByte>>4));\n }\n} ;\n\nvar signed = function(x) {\n return (x>127)?(x-256):x;\n};\nvar signed16 = function(x) {\n return (x>32767)?(x-65536):x;\n};\n\nvar fetch = function() {\n var v = byteAt(PC++);\n PC &= 0xffff;\n return v;\n};\nvar fetch16 = function() {\n var v1 = byteAt(PC++);\n PC &= 0xffff;\n var v2 = byteAt(PC++);\n PC &= 0xffff;\n return v1*256+v2;\n};\n\nvar ReadWord = function(addr) {\n var v1 = byteAt(addr++);\n addr &= 0xffff;\n var v2 = byteAt(addr++);\n addr &= 0xffff;\n return v1*256+v2;\n};\nvar WriteWord = function(addr,v) {\n byteTo(addr++,(v>>8)&0xff);\n addr &= 0xffff;\n byteTo(addr,v&0xff);\n};\n\nvar PostByte = function() {\n var pb = fetch();\n var preg;\n switch (pb & 0x60) {\n case 0:\n preg = rX; break;\n case 0x20:\n preg = rY; break;\n case 0x40:\n preg = rU; break;\n case 0x60:\n preg = rS; break;\n }\n\n var xchg = null;\n var addr = null;\n var sTemp;\n\n if (pb & 0x80) /* Complex stuff */\n {\n switch (pb & 0x0f)\n {\n case 0: /* EA = ,reg+ */\n addr = preg;\n xchg = preg + 1;\n T += 2;\n break;\n case 1: /* EA = ,reg++ */\n addr = preg;\n xchg = preg + 2;\n T += 3;\n break;\n case 2: /* EA = ,-reg */\n xchg = preg - 1;\n addr = xchg;\n T += 2;\n break;\n case 3: /* EA = ,--reg */\n xchg = preg - 2;\n addr = xchg;\n T += 3;\n break;\n case 4: /* EA = ,reg */\n addr = preg;\n break;\n case 5: /* EA = ,reg + B */\n //usAddr = *pReg + (signed short)(signed char)regs->ucRegB;\n addr = preg + signed(rB);\n T += 1;\n break;\n case 6: /* EA = ,reg + A */\n addr = preg + signed(rA);\n T += 1;\n break;\n case 7: /* illegal */\n addr = 0;\n break;\n case 8: /* EA = ,reg + 8-bit offset */\n addr = preg + signed(fetch());\n T += 1;\n break;\n case 9: /* EA = ,reg + 16-bit offset */\n addr = preg + signed16(fetch16());\n T += 4;\n break;\n case 0xA: /* illegal */\n addr = 0;\n break;\n case 0xB: /* EA = ,reg + D */\n T += 4;\n addr = preg + getD();\n break;\n case 0xC: /* EA = PC + 8-bit offset */\n sTemp = signed(fetch());\n addr = PC + sTemp;\n T += 1;\n break;\n case 0xD: /* EA = PC + 16-bit offset */\n sTemp = signed16(fetch16());\n addr = PC + sTemp;\n T += 5;\n break;\n case 0xe: /* Illegal */\n addr = 0;\n break;\n case 0xF: /* EA = [,address] */\n T += 5;\n addr = fetch16();\n break;\n } /* switch */\n\n addr &= 0xffff;\n\n if (pb & 0x10) /* Indirect addressing */\n {\n addr = byteAt(addr)*256+byteAt((addr+1) & 0xffff);\n T += 3;\n }\n }\n else /* Just a 5 bit signed offset + register */\n {\n var sByte = pb & 0x1f;\n if (sByte > 15) /* Two's complement 5-bit value */\n sByte -= 32;\n addr = preg + sByte;\n T += 1;\n }\n\n if (xchg!==null) {\n switch (pb & 0x60) {\n case 0:\n rX = xchg; break;\n case 0x20:\n rY = xchg; break;\n case 0x40:\n rU = xchg; break;\n case 0x60:\n rS = xchg; break;\n }\n\n }\n\n return addr & 0xffff; /* Return the effective address */\n};\n\nvar flagsNZ16 = function(word) {\n CC &= ~(F_ZERO | F_NEGATIVE);\n if (word===0) CC |= F_ZERO;\n if (word & 0x8000) CC |= F_NEGATIVE;\n};\n\n// ============= Operations\n\nvar oINC = function(b) {\n b++;\n b &= 0xff;\n CC &= ~(F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[b];\n if (b === 0 || b == 0x80) CC |= F_OVERFLOW;\n return b;\n};\nvar oDEC = function(b) {\n b--;\n b &= 0xff;\n CC &= ~(F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[b];\n if (b === 0x7f || b == 0xff) CC |= F_OVERFLOW;\n return b;\n};\nvar oSUB = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return temp&0xff;\n};\nvar oSUB16 = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return temp&0xffff;\n};\nvar oADD = function(b,v) {\n var temp = b+v;\n //temp &= 0xff;\n CC &= ~(F_HALFCARRY | F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n if ((temp ^ b ^ v)&0x10) CC |= F_HALFCARRY;\n return temp&0xff;\n};\nvar oADD16 = function(b,v) {\n var temp = b+v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return temp&0xffff;\n};\nvar oADC = function(b,v) {\n var temp = b+v+(CC & F_CARRY);\n //temp &= 0xff;\n CC &= ~(F_HALFCARRY | F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n if ((temp ^ b ^ v)&0x10) CC |= F_HALFCARRY;\n return temp&0xff;\n};\nvar oSBC = function(b,v) {\n var temp = b-v-(CC & F_CARRY);\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return temp&0xff;\n};\nvar oCMP = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n CC |= flagsNZ[temp & 0xff];\n if (temp&0x100) CC|=F_CARRY;\n setV8(b,v,temp);\n return;\n};\nvar oCMP16 = function(b,v) {\n var temp = b-v;\n //temp &= 0xff;\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if ((temp&0xffff)===0) CC|=F_ZERO;\n if (temp&0x8000) CC|=F_NEGATIVE;\n if (temp&0x10000) CC|=F_CARRY;\n setV16(b,v,temp);\n return;\n};\n\nvar oNEG = function(b) {\n CC &= ~(F_CARRY | F_ZERO | F_OVERFLOW | F_NEGATIVE);\n if (b == 0x80)\n CC |= F_OVERFLOW;\n b = ((~b)&0xff) + 1;\n if (b === 0) CC |= F_ZERO;\n if (b & 0x80) CC |= F_NEGATIVE | F_CARRY;\n return b;\n};\n\nvar oLSR = function(b) {\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b >>= 1;\n if (b === 0) CC |= F_ZERO;\n return b & 0xff;\n};\nvar oASR = function(b) {\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b = (b & 0x80) | (b>>1);\n CC |= flagsNZ[b];\n return b;\n};\nvar oASL = function(b) {\n var temp = b;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE | F_OVERFLOW);\n if (b & 0x80) CC |= F_CARRY;\n b <<= 1;\n CC |= flagsNZ[b];\n if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\nvar oROL = function(b) {\n var temp = b;\n var oldc = CC&F_CARRY;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE | F_OVERFLOW);\n if (b & 0x80) CC |= F_CARRY;\n b = b<<1 | oldc;\n CC |= flagsNZ[b];\n if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\nvar oROR = function(b) {\n var oldc = CC&F_CARRY;\n CC &= ~(F_ZERO | F_CARRY | F_NEGATIVE);\n if (b & 0x01) CC |= F_CARRY;\n b = b>>1 | oldc<<7;\n CC |= flagsNZ[b];\n// if ((b ^ temp) & 0x80) CC|=F_OVERFLOW;\n return b;\n};\n\nvar oEOR = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b ^= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oOR = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b |= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oAND = function(b,v) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b &= v;\n CC |= flagsNZ[b];\n return b;\n};\nvar oCOM = function(b) {\n CC &= ~(F_ZERO | F_NEGATIVE | F_OVERFLOW);\n b ^= 0xff;\n CC |= flagsNZ[b];\n CC |= F_CARRY;\n return b;\n};\n\n//----common\nvar dpadd = function() {\n //direct page + 8bit index\n return DP*256 + fetch();\n};\n\nvar step = function() {\n var oldT = T;\n\n var addr = null;\n var pb = null;\n\n var oldPC = PC;\n var opcode = fetch();\n T+=cycles[opcode];\n switch (opcode) {\n case 0x00: //NEG DP\n addr = dpadd();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x03: //COM DP\n addr = dpadd();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x04: //LSR DP\n addr = dpadd();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x06: //ROR DP\n addr = dpadd();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x07: //ASR DP\n addr = dpadd();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x08: //ASL DP\n addr = dpadd();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x09: //ROL DP\n addr = dpadd();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x0A: //DEC DP\n addr = dpadd();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x0C: //INC DP\n addr = dpadd();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x0D: //TST DP\n addr = dpadd();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x0E: //JMP DP\n addr = dpadd();\n PC = addr;\n break;\n case 0x0F: //CLR DP\n addr = dpadd();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n case 0x12: //NOP\n break;\n case 0x13: //SYNC\n break;\n case 0x16: //LBRA relative\n addr = signed16(fetch16());\n PC += addr;\n break;\n case 0x17: //LBSR relative\n addr = signed16(fetch16());\n PUSHW(PC);\n PC += addr;\n break;\n case 0x19: //DAA\n var cf = 0;\n var nhi = rA & 0xf0, nlo = rA & 0x0f;\n if( nlo>0x09 || CC & 0x20 ) cf |= 0x06;\n if( nhi>0x80 && nlo>0x09 ) cf |= 0x60;\n if( nhi>0x90 || CC & 0x01 ) cf |= 0x60;\n addr = cf + rA;\n CC &= ~(F_CARRY | F_NEGATIVE | F_ZERO | F_OVERFLOW);\n if (addr & 0x100)\n CC |= F_CARRY;\n rA = addr & 0xff;\n CC |= flagsNZ[rA];\n break;\n case 0x1A: //ORCC\n CC |= fetch();\n break;\n case 0x1C: //ANDCC\n CC &= fetch();\n break;\n case 0x1D: //SEX\n rA = (rB & 0x80)?0xff:0;\n flagsNZ16(getD());\n CC &= ~F_OVERFLOW;\n break;\n case 0x1E: //EXG\n pb = fetch();\n TFREXG(pb,true);\n break;\n case 0x1F: //EXG\n pb = fetch();\n TFREXG(pb,false);\n break;\n\n case 0x20: //BRA\n addr = signed(fetch());\n PC += addr;\n break;\n case 0x21: //BRN\n addr = signed(fetch());\n break;\n case 0x22: //BHI\n addr = signed(fetch());\n if (!(CC&(F_CARRY | F_ZERO))) PC += addr;\n break;\n case 0x23: //BLS\n addr = signed(fetch());\n if (CC&(F_CARRY | F_ZERO)) PC += addr;\n break;\n case 0x24: //BCC\n addr = signed(fetch());\n if (!(CC&F_CARRY)) PC += addr;\n break;\n case 0x25: //BCS\n addr = signed(fetch());\n if (CC&F_CARRY) PC += addr;\n break;\n case 0x26: //BNE\n addr = signed(fetch());\n if (!(CC&F_ZERO)) PC += addr;\n break;\n case 0x27: //BEQ\n addr = signed(fetch());\n if (CC&F_ZERO) PC += addr;\n break;\n case 0x28: //BVC\n addr = signed(fetch());\n if (!(CC&F_OVERFLOW)) PC += addr;\n break;\n case 0x29: //BVS\n addr = signed(fetch());\n if (CC&F_OVERFLOW) PC += addr;\n break;\n case 0x2A: //BPL\n addr = signed(fetch());\n if (!(CC&F_NEGATIVE)) PC += addr;\n break;\n case 0x2B: //BMI\n addr = signed(fetch());\n if (CC&F_NEGATIVE) PC += addr;\n break;\n case 0x2C: //BGE\n addr = signed(fetch());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2))) PC += addr;\n break;\n case 0x2D: //BLT\n addr = signed(fetch());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2)) PC += addr;\n break;\n case 0x2E: //BGT\n addr = signed(fetch());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO))) PC += addr;\n break;\n case 0x2F: //BLE\n addr = signed(fetch());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO)) PC += addr;\n break;\n\n case 0x30: //LEAX\n rX = PostByte();\n if (rX===0) CC|=F_ZERO; else CC&=~F_ZERO;\n break;\n case 0x31: //LEAY\n rY = PostByte();\n if (rY===0) CC|=F_ZERO; else CC&=~F_ZERO;\n break;\n case 0x32: //LEAS\n rS = PostByte();\n break;\n case 0x33: //LEAU\n rU = PostByte();\n break;\n\n case 0x34: //PSHS\n PSHS(fetch());\n break;\n case 0x35: //PULS\n PULS(fetch());\n break;\n case 0x36: //PSHU\n PSHU(fetch());\n break;\n case 0x37: //PULU\n PULU(fetch());\n break;\n case 0x39: //RTS\n PC = PULLW();\n break;\n case 0x3A: //ABX\n rX += rB;\n break;\n case 0x3B: //RTI\n CC = PULLB();\n if (CC & F_ENTIRE) {\n T+=9;\n rA = PULLB();\n rB = PULLB();\n DP = PULLB();\n rX = PULLW();\n rY = PULLW();\n rU = PULLW();\n }\n PC = PULLW();\n break;\n case 0x3C: //CWAI **todo\n CC &= fetch();\n break;\n case 0x3D: //MUL\n addr = rA * rB;\n if (addr===0) CC|=F_ZERO; else CC&=~F_ZERO;\n if (addr&0x80) CC|=F_CARRY; else CC&=~F_CARRY;\n setD(addr);\n break;\n case 0x3F: //SWI\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI);\n break;\n\n case 0x40:\n rA = oNEG(rA);\n break;\n case 0x43:\n rA = oCOM(rA);\n break;\n case 0x44:\n rA = oLSR(rA);\n break;\n case 0x46:\n rA = oROR(rA);\n break;\n case 0x47:\n rA = oASR(rA);\n break;\n case 0x48:\n rA = oASL(rA);\n break;\n case 0x49:\n rA = oROL(rA);\n break;\n case 0x4A:\n rA = oDEC(rA);\n break;\n case 0x4C:\n rA = oINC(rA);\n break;\n case 0x4D:\n CC &= ~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x4F:\n rA = 0;\n CC &= ~(F_NEGATIVE|F_OVERFLOW|F_CARRY);\n CC |= F_ZERO;\n break;\n\n case 0x50:\n rB = oNEG(rB);\n break;\n case 0x53:\n rB = oCOM(rB);\n break;\n case 0x54:\n rB = oLSR(rB);\n break;\n case 0x56:\n rB = oROR(rB);\n break;\n case 0x57:\n rB = oASR(rB);\n break;\n case 0x58:\n rB = oASL(rB);\n break;\n case 0x59:\n rB = oROL(rB);\n break;\n case 0x5A:\n rB = oDEC(rB);\n break;\n case 0x5C:\n rB = oINC(rB);\n break;\n case 0x5D:\n CC &= ~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0x5F:\n rB = 0;\n CC &= ~(F_NEGATIVE|F_OVERFLOW|F_CARRY);\n CC |= F_ZERO;\n break;\n\n case 0x60: //NEG indexed\n addr = PostByte();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x63: //COM indexed\n addr = PostByte();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x64: //LSR indexed\n addr = PostByte();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x66: //ROR indexed\n addr = PostByte();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x67: //ASR indexed\n addr = PostByte();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x68: //ASL indexed\n addr = PostByte();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x69: //ROL indexed\n addr = PostByte();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x6A: //DEC indexed\n addr = PostByte();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x6C: //INC indexed\n addr = PostByte();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x6D: //TST indexed\n addr = PostByte();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x6E: //JMP indexed\n addr = PostByte();\n PC = addr;\n break;\n case 0x6F: //CLR indexed\n addr = PostByte();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n\n case 0x70: //NEG extended\n addr = fetch16();\n byteTo(addr, oNEG(byteAt(addr)));\n break;\n case 0x73: //COM extended\n addr = fetch16();\n byteTo(addr, oCOM(byteAt(addr)));\n break;\n case 0x74: //LSR extended\n addr = fetch16();\n byteTo(addr, oLSR(byteAt(addr)));\n break;\n case 0x76: //ROR extended\n addr = fetch16();\n byteTo(addr, oROR(byteAt(addr)));\n break;\n case 0x77: //ASR extended\n addr = fetch16();\n byteTo(addr, oASR(byteAt(addr)));\n break;\n case 0x78: //ASL extended\n addr = fetch16();\n byteTo(addr, oASL(byteAt(addr)));\n break;\n case 0x79: //ROL extended\n addr = fetch16();\n byteTo(addr, oROL(byteAt(addr)));\n break;\n\n case 0x7A: //DEC extended\n addr = fetch16();\n byteTo(addr, oDEC(byteAt(addr)));\n break;\n case 0x7C: //INC extended\n addr = fetch16();\n byteTo(addr, oINC(byteAt(addr)));\n break;\n\n case 0x7D: //TST extended\n addr = fetch16();\n pb = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[pb];\n break;\n\n case 0x7E: //JMP extended\n addr = fetch16();\n PC = addr;\n break;\n case 0x7F: //CLR extended\n addr = fetch16();\n byteTo(addr,0);\n CC&=~(F_CARRY|F_NEGATIVE|F_OVERFLOW);\n CC |= F_ZERO;\n break;\n\n // regs A,X\n\n case 0x80: //SUBA imm\n rA = oSUB(rA, fetch());\n break;\n case 0x81: //CMPA imm\n oCMP(rA, fetch());\n break;\n case 0x82: //SBCA imm\n rA = oSBC(rA, fetch());\n break;\n case 0x83: //SUBD imm\n setD(oSUB16(getD(),fetch16()));\n break;\n case 0x84: //ANDA imm\n rA = oAND(rA, fetch());\n break;\n case 0x85: //BITA imm\n oAND(rA, fetch());\n break;\n case 0x86: //LDA imm\n rA = fetch();\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x88: //EORA imm\n rA = oEOR(rA, fetch());\n break;\n case 0x89: //ADCA imm\n rA = oADC(rA, fetch());\n break;\n case 0x8A: //ORA imm\n rA = oOR(rA, fetch());\n break;\n case 0x8B: //ADDA imm\n rA = oADD(rA, fetch());\n break;\n case 0x8C: //CMPX imm\n oCMP16(rX, fetch16());\n break;\n\n case 0x8D: //JSR imm\n addr = signed(fetch());\n PUSHW(PC);\n PC+=addr;\n break;\n case 0x8E: //LDX imm\n rX = fetch16();\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0x90: //SUBA direct\n addr = dpadd();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0x91: //CMPA direct\n addr = dpadd();\n oCMP(rA, byteAt(addr));\n break;\n case 0x92: //SBCA direct\n addr = dpadd();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0x93: //SUBD direct\n addr = dpadd();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0x94: //ANDA direct\n addr = dpadd();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0x95: //BITA direct\n addr = dpadd();\n oAND(rA, byteAt(addr));\n break;\n case 0x96: //LDA direct\n addr = dpadd();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x97: //STA direct\n addr = dpadd();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0x98: //EORA direct\n addr = dpadd();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0x99: //ADCA direct\n addr = dpadd();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0x9A: //ORA direct\n addr = dpadd();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0x9B: //ADDA direct\n addr = dpadd();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0x9C: //CMPX direct\n addr = dpadd();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0x9D: //JSR direct\n addr = dpadd();\n PUSHW(PC);\n PC=addr;\n break;\n case 0x9E: //LDX direct\n addr = dpadd();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0x9F: //STX direct\n addr = dpadd();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xA0: //SUBA indexed\n addr = PostByte();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0xA1: //CMPA indexed\n addr = PostByte();\n oCMP(rA, byteAt(addr));\n break;\n case 0xA2: //SBCA indexed\n addr = PostByte();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0xA3: //SUBD indexed\n addr = PostByte();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0xA4: //ANDA indexed\n addr = PostByte();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0xA5: //BITA indexed\n addr = PostByte();\n oAND(rA, byteAt(addr));\n break;\n case 0xA6: //LDA indexed\n addr = PostByte();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xA7: //STA indexed\n addr = PostByte();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xA8: //EORA indexed\n addr = PostByte();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0xA9: //ADCA indexed\n addr = PostByte();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0xAA: //ORA indexed\n addr = PostByte();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0xAB: //ADDA indexed\n addr = PostByte();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0xAC: //CMPX indexed\n addr = PostByte();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0xAD: //JSR indexed\n addr = PostByte();\n PUSHW(PC);\n PC=addr;\n break;\n case 0xAE: //LDX indexed\n addr = PostByte();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xAF: //STX indexed\n addr = PostByte();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xB0: //SUBA extended\n addr = fetch16();\n rA = oSUB(rA, byteAt(addr));\n break;\n case 0xB1: //CMPA extended\n addr = fetch16();\n oCMP(rA, byteAt(addr));\n break;\n case 0xB2: //SBCA extended\n addr = fetch16();\n rA = oSBC(rA, byteAt(addr));\n break;\n case 0xB3: //SUBD extended\n addr = fetch16();\n setD(oSUB16(getD(),ReadWord(addr)));\n break;\n case 0xB4: //ANDA extended\n addr = fetch16();\n rA = oAND(rA, byteAt(addr));\n break;\n case 0xB5: //BITA extended\n addr = fetch16();\n oAND(rA, byteAt(addr));\n break;\n case 0xB6: //LDA extended\n addr = fetch16();\n rA = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xB7: //STA extended\n addr = fetch16();\n byteTo(addr,rA);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rA];\n break;\n case 0xB8: //EORA extended\n addr = fetch16();\n rA = oEOR(rA, byteAt(addr));\n break;\n case 0xB9: //ADCA extended\n addr = fetch16();\n rA = oADC(rA, byteAt(addr));\n break;\n case 0xBA: //ORA extended\n addr = fetch16();\n rA = oOR(rA, byteAt(addr));\n break;\n case 0xBB: //ADDA extended\n addr = fetch16();\n rA = oADD(rA, byteAt(addr));\n break;\n case 0xBC: //CMPX extended\n addr = fetch16();\n oCMP16(rX, ReadWord(addr));\n break;\n\n case 0xBD: //JSR extended\n addr = fetch16();\n PUSHW(PC);\n PC=addr;\n break;\n case 0xBE: //LDX extended\n addr = fetch16();\n rX = ReadWord(addr);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n case 0xBF: //STX extended\n addr = fetch16();\n WriteWord(addr,rX);\n flagsNZ16(rX);\n CC&=~F_OVERFLOW;\n break;\n\n //Regs B, Y\n\n case 0xC0: //SUBB imm\n rB = oSUB(rB, fetch());\n break;\n case 0xC1: //CMPB imm\n oCMP(rB, fetch());\n break;\n case 0xC2: //SBCB imm\n rB = oSBC(rB, fetch());\n break;\n case 0xC3: //ADDD imm\n setD(oADD16(getD(),fetch16()));\n break;\n case 0xC4: //ANDB imm\n rB = oAND(rB, fetch());\n break;\n case 0xC5: //BITB imm\n oAND(rB, fetch());\n break;\n case 0xC6: //LDB imm\n rB = fetch();\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xC8: //EORB imm\n rB = oEOR(rB, fetch());\n break;\n case 0xC9: //ADCB imm\n rB = oADC(rB, fetch());\n break;\n case 0xCA: //ORB imm\n rB = oOR(rB, fetch());\n break;\n case 0xCB: //ADDB imm\n rB = oADD(rB, fetch());\n break;\n case 0xCC: //LDD imm\n addr = fetch16();\n setD(addr);\n flagsNZ16(addr);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xCE: //LDU imm\n rU = fetch16();\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xD0: //SUBB direct\n addr = dpadd();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xD1: //CMPB direct\n addr = dpadd();\n oCMP(rB, byteAt(addr));\n break;\n case 0xD2: //SBCB direct\n addr = dpadd();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xD3: //ADDD direct\n addr = dpadd();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xD4: //ANDB direct\n addr = dpadd();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xD5: //BITB direct\n addr = dpadd();\n oAND(rB, byteAt(addr));\n break;\n case 0xD6: //LDB direct\n addr = dpadd();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xD7: //STB direct\n addr = dpadd();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xD8: //EORB direct\n addr = dpadd();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xD9: //ADCB direct\n addr = dpadd();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xDA: //ORB direct\n addr = dpadd();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xDB: //ADDB direct\n addr = dpadd();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xDC: //LDD direct\n addr = dpadd();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xDD: //STD direct\n addr = dpadd();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xDE: //LDU direct\n addr = dpadd();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xDF: //STU direct\n addr = dpadd();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xE0: //SUBB indexed\n addr = PostByte();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xE1: //CMPB indexed\n addr = PostByte();\n oCMP(rB, byteAt(addr));\n break;\n case 0xE2: //SBCB indexed\n addr = PostByte();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xE3: //ADDD indexed\n addr = PostByte();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xE4: //ANDB indexed\n addr = PostByte();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xE5: //BITB indexed\n addr = PostByte();\n oAND(rB, byteAt(addr));\n break;\n case 0xE6: //LDB indexed\n addr = PostByte();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xE7: //STB indexed\n addr = PostByte();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xE8: //EORB indexed\n addr = PostByte();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xE9: //ADCB indexed\n addr = PostByte();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xEA: //ORB indexed\n addr = PostByte();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xEB: //ADDB indexed\n addr = PostByte();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xEC: //LDD indexed\n addr = PostByte();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xED: //STD indexed\n addr = PostByte();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xEE: //LDU indexed\n addr = PostByte();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xEF: //STU indexed\n addr = PostByte();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n\n case 0xF0: //SUBB extended\n addr = fetch16();\n rB = oSUB(rB, byteAt(addr));\n break;\n case 0xF1: //CMPB extended\n addr = fetch16();\n oCMP(rB, byteAt(addr));\n break;\n case 0xF2: //SBCB extended\n addr = fetch16();\n rB = oSBC(rB, byteAt(addr));\n break;\n case 0xF3: //ADDD extended\n addr = fetch16();\n setD(oADD16(getD(),ReadWord(addr)));\n break;\n case 0xF4: //ANDB extended\n addr = fetch16();\n rB = oAND(rB, byteAt(addr));\n break;\n case 0xF5: //BITB extended\n addr = fetch16();\n oAND(rB, byteAt(addr));\n break;\n case 0xF6: //LDB extended\n addr = fetch16();\n rB = byteAt(addr);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xF7: //STB extended\n addr = fetch16();\n byteTo(addr,rB);\n CC&=~(F_ZERO|F_NEGATIVE|F_OVERFLOW);\n CC |= flagsNZ[rB];\n break;\n case 0xF8: //EORB extended\n addr = fetch16();\n rB = oEOR(rB, byteAt(addr));\n break;\n case 0xF9: //ADCB extended\n addr = fetch16();\n rB = oADC(rB, byteAt(addr));\n break;\n case 0xFA: //ORB extended\n addr = fetch16();\n rB = oOR(rB, byteAt(addr));\n break;\n case 0xFB: //ADDB extended\n addr = fetch16();\n rB = oADD(rB, byteAt(addr));\n break;\n case 0xFC: //LDD extended\n addr = fetch16();\n pb = ReadWord(addr);\n setD(pb);\n flagsNZ16(pb);\n CC&=~F_OVERFLOW;\n break;\n\n case 0xFD: //STD extended\n addr = fetch16();\n WriteWord(addr, getD());\n CC&=~F_OVERFLOW;\n break;\n case 0xFE: //LDU extended\n addr = fetch16();\n rU = ReadWord(addr);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n case 0xFF: //STU extended\n addr = fetch16();\n WriteWord(addr,rU);\n flagsNZ16(rU);\n CC&=~F_OVERFLOW;\n break;\n\n // page 1\n case 0x10: //page 1\n {\n opcode = fetch();\n T+=cycles2[opcode];\n switch(opcode) {\n case 0x21: //BRN\n addr = signed16(fetch16());\n break;\n case 0x22: //BHI\n addr = signed16(fetch16());\n if (!(CC&(F_CARRY | F_ZERO))) PC += addr;\n break;\n case 0x23: //BLS\n addr = signed16(fetch16());\n if (CC&(F_CARRY | F_ZERO)) PC += addr;\n break;\n case 0x24: //BCC\n addr = signed16(fetch16());\n if (!(CC&F_CARRY)) PC += addr;\n break;\n case 0x25: //BCS\n addr = signed16(fetch16());\n if (CC&F_CARRY) PC += addr;\n break;\n case 0x26: //BNE\n addr = signed16(fetch16());\n if (!(CC&F_ZERO)) PC += addr;\n break;\n case 0x27: //BEQ\n addr = signed16(fetch16());\n if (CC&F_ZERO) PC += addr;\n break;\n case 0x28: //BVC\n addr = signed16(fetch16());\n if (!(CC&F_OVERFLOW)) PC += addr;\n break;\n case 0x29: //BVS\n addr = signed16(fetch16());\n if (CC&F_OVERFLOW) PC += addr;\n break;\n case 0x2A: //BPL\n addr = signed16(fetch16());\n if (!(CC&F_NEGATIVE)) PC += addr;\n break;\n case 0x2B: //BMI\n addr = signed16(fetch16());\n if (CC&F_NEGATIVE) PC += addr;\n break;\n case 0x2C: //BGE\n addr = signed16(fetch16());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2))) PC += addr;\n break;\n case 0x2D: //BLT\n addr = signed16(fetch16());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2)) PC += addr;\n break;\n case 0x2E: //BGT\n addr = signed16(fetch16());\n if (!((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO))) PC += addr;\n break;\n case 0x2F: //BLE\n addr = signed16(fetch16());\n if ((CC&F_NEGATIVE) ^ ((CC&F_OVERFLOW)<<2) || (CC&F_ZERO)) PC += addr;\n break;\n case 0x3f: //SWI2\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI2);\n break;\n case 0x83: //CMPD imm\n oCMP16(getD(),fetch16());\n break;\n case 0x8C: //CMPY imm\n oCMP16(rY,fetch16());\n break;\n case 0x8E: //LDY imm\n rY = fetch16();\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0x93: //CMPD direct\n addr = dpadd();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0x9C: //CMPY direct\n addr = dpadd();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0x9E: //LDY direct\n addr = dpadd();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0x9F: //STY direct\n addr = dpadd();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xA3: //CMPD indexed\n addr = PostByte();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0xAC: //CMPY indexed\n addr = PostByte();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0xAE: //LDY indexed\n addr = PostByte();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xAF: //STY indexed\n addr = PostByte();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xB3: //CMPD extended\n addr = fetch16();\n oCMP16(getD(),ReadWord(addr));\n break;\n case 0xBC: //CMPY extended\n addr = fetch16();\n oCMP16(rY,ReadWord(addr));\n break;\n case 0xBE: //LDY extended\n addr = fetch16();\n rY = ReadWord(addr);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xBF: //STY extended\n addr = fetch16();\n WriteWord(addr,rY);\n flagsNZ16(rY);\n CC&=~F_OVERFLOW;\n break;\n case 0xCE: //LDS imm\n rS = fetch16();\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xDE: //LDS direct\n addr = dpadd();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xDF: //STS direct\n addr = dpadd();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xEE: //LDS indexed\n addr = PostByte();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xEF: //STS indexed\n addr = PostByte();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xFE: //LDS extended\n addr = fetch16();\n rS = ReadWord(addr);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n case 0xFF: //STS extended\n addr = fetch16();\n WriteWord(addr,rS);\n flagsNZ16(rS);\n CC&=~F_OVERFLOW;\n break;\n }\n }\n break;\n // page 2\n case 0x11: //page 2\n {\n opcode = fetch();\n T+=cycles2[opcode];\n switch(opcode) {\n case 0x3f: //SWI3\n CC |= F_ENTIRE;\n PUSHW(PC);\n PUSHW(rU);\n PUSHW(rY);\n PUSHW(rX);\n PUSHB(DP);\n PUSHB(rB);\n PUSHB(rA);\n PUSHB(CC);\n CC |= F_IRQMASK | F_FIRQMASK;\n PC = ReadWord(vecSWI3);\n break;\n case 0x83: //CMPU imm\n oCMP16(rU, fetch16());\n break;\n case 0x8C: //CMPS imm\n oCMP16(rS, fetch16());\n break;\n case 0x93: //CMPU imm\n addr = dpadd();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0x9C: //CMPS imm\n addr = dpadd();\n oCMP16(rS, ReadWord(addr));\n break;\n case 0xA3: //CMPU imm\n addr = PostByte();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0xAC: //CMPS imm\n addr = PostByte();\n oCMP16(rS, ReadWord(addr));\n break;\n case 0xB3: //CMPU imm\n addr = fetch16();\n oCMP16(rU, ReadWord(addr));\n break;\n case 0xBC: //CMPS imm\n addr = fetch16();\n oCMP16(rS, ReadWord(addr));\n break;\n\n }\n }\n break;\n\n\n }\n\n rA &= 0xff;\n rB &= 0xff;\n CC &= 0xff;\n DP &= 0xff;\n rX &= 0xffff;\n rY &= 0xffff;\n rU &= 0xffff;\n rS &= 0xffff;\n PC &= 0xffff;\n return T-oldT;\n\n};\n\nvar reset = function(){\n PC = ReadWord(vecRESET);\n DP = 0;\n CC |= F_FIRQMASK | F_IRQMASK;\n T=0;\n rA=rB=DP=rX=rY=rU=rS=0;\n};\n\n//---------- Disassembler\n\n/*\nILLEGAL 0\nDIRECT 1\nINHERENT 2\nBRANCH_REL_16 3\nIMMEDIAT_8 4\nBRANCH_REL_8 5\nINDEXED 6\nEXTENDED 7\nIMMEDIAT_16 8\n\nPSHS 10\nPSHU 11\n\nEXG, TFR 20\n*/\nvar ds = [\n[2, 1,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[2, 1,\"COM\"],\n[2, 1,\"LSR\"],\n[1, 0,\"???\"],\n[2, 1,\"ROR\"],\n[2, 1,\"ASR\"],\n[2, 1,\"LSL\"],\n[2, 1,\"ROL\"],\n[2, 1,\"DEC\"],\n[1, 0,\"???\"],\n[2, 1,\"INC\"],\n[2, 1,\"TST\"],\n[2, 1,\"JMP\"],\n[2, 1,\"CLR\"],\n[1, 0,\"Prefix\"],\n[1, 0,\"Prefix\"],\n[1, 2,\"NOP\"],\n[1, 2,\"SYNC\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[3, 3,\"LBRA\"],\n[3, 3,\"LBSR\"],\n[1, 0,\"???\"],\n[1, 2,\"DAA\"],\n[2, 4,\"ORCC\"],\n[1, 0,\"???\"],\n[2, 4,\"ANDCC\"],\n[1, 2,\"SEX\"],\n[2, 20,\"EXG\"],\n[2, 20,\"TFR\"],\n[2, 5,\"BRA\"],\n[2, 5,\"BRN\"],\n[2, 5,\"BHI\"],\n[2, 5,\"BLS\"],\n[2, 5,\"BCC\"],\n[2, 5,\"BCS\"],\n[2, 5,\"BNE\"],\n[2, 5,\"BEQ\"],\n[2, 5,\"BVC\"],\n[2, 5,\"BVS\"],\n[2, 5,\"BPL\"],\n[2, 5,\"BMI\"],\n[2, 5,\"BGE\"],\n[2, 5,\"BLT\"],\n[2, 5,\"BGT\"],\n[2, 5,\"BLE\"],\n[2, 6,\"LEAX\"],\n[2, 6,\"LEAY\"],\n[2, 6,\"LEAS\"],\n[2, 6,\"LEAU\"],\n[2, 10,\"PSHS\"],\n[2, 10,\"PULS\"],\n[2, 11,\"PSHU\"],\n[2, 11,\"PULU\"],\n[1, 0,\"???\"],\n[1, 2,\"RTS\"],\n[1, 2,\"ABX\"],\n[1, 2,\"RTI\"],\n[2, 2,\"CWAI\"],\n[1, 2,\"MUL\"],\n[1, 2,\"RESET\"],\n[1, 2,\"SWI1\"],\n[1, 2,\"NEGA\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[1, 2,\"COMA\"],\n[1, 2,\"LSRA\"],\n[1, 0,\"???\"],\n[1, 2,\"RORA\"],\n[1, 2,\"ASRA\"],\n[1, 2,\"ASLA\"],\n[1, 2,\"ROLA\"],\n[1, 2,\"DECA\"],\n[1, 0,\"???\"],\n[1, 2,\"INCA\"],\n[1, 2,\"TSTA\"],\n[1, 0,\"???\"],\n[1, 2,\"CLRA\"],\n[1, 2,\"NEGB\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[1, 2,\"COMB\"],\n[1, 2,\"LSRB\"],\n[1, 0,\"???\"],\n[1, 2,\"RORB\"],\n[1, 2,\"ASRB\"],\n[1, 2,\"ASLB\"],\n[1, 2,\"ROLB\"],\n[1, 2,\"DECB\"],\n[1, 0,\"???\"],\n[1, 2,\"INCB\"],\n[1, 2,\"TSTB\"],\n[1, 0,\"???\"],\n[1, 2,\"CLRB\"],\n[2, 6,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[2, 6,\"COM\"],\n[2, 6,\"LSR\"],\n[1, 0,\"???\"],\n[2, 6,\"ROR\"],\n[2, 6,\"ASR\"],\n[2, 6,\"LSL\"],\n[2, 6,\"ROL\"],\n[2, 6,\"DEC\"],\n[1, 0,\"???\"],\n[2, 6,\"INC\"],\n[2, 6,\"TST\"],\n[2, 6,\"JMP\"],\n[2, 6,\"CLR\"],\n[3, 7,\"NEG\"],\n[1, 0,\"???\"],\n[1, 0,\"???\"],\n[3, 7,\"COM\"],\n[3, 7,\"LSR\"],\n[1, 0,\"???\"],\n[3, 7,\"ROR\"],\n[3, 7,\"ASR\"],\n[3, 7,\"LSL\"],\n[3, 7,\"ROL\"],\n[3, 7,\"DEC\"],\n[1, 0,\"???\"],\n[3, 7,\"INC\"],\n[3, 7,\"TST\"],\n[3, 7,\"JMP\"],\n[3, 7,\"CLR\"],\n[2, 4,\"SUBA\"],\n[2, 4,\"CMPA\"],\n[2, 4,\"SBCA\"],\n[3, 8,\"SUBD\"],\n[2, 4,\"ANDA\"],\n[2, 4,\"BITA\"],\n[2, 4,\"LDA\"],\n[1, 0,\"???\"],\n[2, 4,\"EORA\"],\n[2, 4,\"ADCA\"],\n[2, 4,\"ORA\"],\n[2, 4,\"ADDA\"],\n[3, 8,\"CMPX\"],\n[2, 5,\"BSR\"],\n[3, 8,\"LDX\"],\n[1, 0,\"???\"],\n[2, 1,\"SUBA\"],\n[2, 1,\"CMPA\"],\n[2, 1,\"SBCA\"],\n[2, 1,\"SUBd\"],\n[2, 1,\"ANDA\"],\n[2, 1,\"BITA\"],\n[2, 1,\"LDA\"],\n[2, 1,\"STA\"],\n[2, 1,\"EORA\"],\n[2, 1,\"ADCA\"],\n[2, 1,\"ORA\"],\n[2, 1,\"ADDA\"],\n[2, 1,\"CMPX\"],\n[2, 1,\"JSR\"],\n[2, 1,\"LDX\"],\n[2, 1,\"STX\"],\n[2, 6,\"SUBA\"],\n[2, 6,\"CMPA\"],\n[2, 6,\"SBCA\"],\n[2, 6,\"SUBD\"],\n[2, 6,\"ANDA\"],\n[2, 6,\"BITA\"],\n[2, 6,\"LDA\"],\n[2, 6,\"STA\"],\n[2, 6,\"EORA\"],\n[2, 6,\"ADCA\"],\n[2, 6,\"ORA\"],\n[2, 6,\"ADDA\"],\n[2, 6,\"CMPX\"],\n[2, 6,\"JSR\"],\n[2, 6,\"LDX\"],\n[2, 6,\"STX\"],\n[3, 7,\"SUBA\"],\n[3, 7,\"CMPA\"],\n[3, 7,\"SBCA\"],\n[3, 7,\"SUBD\"],\n[3, 7,\"ANDA\"],\n[3, 7,\"BITA\"],\n[3, 7,\"LDA\"],\n[3, 7,\"STA\"],\n[3, 7,\"EORA\"],\n[3, 7,\"ADCA\"],\n[3, 7,\"ORA\"],\n[3, 7,\"ADDA\"],\n[3, 7,\"CMPX\"],\n[3, 7,\"JSR\"],\n[3, 7,\"LDX\"],\n[3, 7,\"STX\"],\n[2, 4,\"SUBB\"],\n[2, 4,\"CMPB\"],\n[2, 4,\"SBCB\"],\n[3, 8,\"ADDD\"],\n[2, 4,\"ANDB\"],\n[2, 4,\"BITB\"],\n[2, 4,\"LDB\"],\n[1, 0,\"???\"],\n[2, 4,\"EORB\"],\n[2, 4,\"ADCB\"],\n[2, 4,\"ORB\"],\n[2, 4,\"ADDB\"],\n[3, 8,\"LDD\"],\n[1, 0,\"???\"],\n[3, 8,\"LDU\"],\n[1, 0,\"???\"],\n[2, 1,\"SUBB\"],\n[2, 1,\"CMPB\"],\n[2, 1,\"SBCB\"],\n[2, 1,\"ADDD\"],\n[2, 1,\"ANDB\"],\n[2, 1,\"BITB\"],\n[2, 1,\"LDB\"],\n[2, 1,\"STB\"],\n[2, 1,\"EORB\"],\n[2, 1,\"ADCB\"],\n[2, 1,\"ORB \"],\n[2, 1,\"ADDB\"],\n[2, 1,\"LDD \"],\n[2, 1,\"STD \"],\n[2, 1,\"LDU \"],\n[2, 1,\"STU \"],\n[2, 6,\"SUBB\"],\n[2, 6,\"CMPB\"],\n[2, 6,\"SBCB\"],\n[2, 6,\"ADDD\"],\n[2, 6,\"ANDB\"],\n[2, 6,\"BITB\"],\n[2, 6,\"LDB\"],\n[2, 6,\"STB\"],\n[2, 6,\"EORB\"],\n[2, 6,\"ADCB\"],\n[2, 6,\"ORB\"],\n[2, 6,\"ADDB\"],\n[2, 6,\"LDD\"],\n[2, 6,\"STD\"],\n[2, 6,\"LDU\"],\n[2, 6,\"STU\"],\n[3, 7,\"SUBB\"],\n[3, 7,\"CMPB\"],\n[3, 7,\"SBCB\"],\n[3, 7,\"ADDD\"],\n[3, 7,\"ANDB\"],\n[3, 7,\"BITB\"],\n[3, 7,\"LDB\"],\n[3, 7,\"STB\"],\n[3, 7,\"EORB\"],\n[3, 7,\"ADCB\"],\n[3, 7,\"ORB\"],\n[3, 7,\"ADDB\"],\n[3, 7,\"LDD\"],\n[3, 7,\"STD\"],\n[3, 7,\"LDU\"],\n[3, 7,\"STU\"]\n];\n\nvar ds11 = {\n0x3F: [2,2,\"SWI3\"],\n0x83: [4,8,\"CMPU\"],\n0x8C: [4,8,\"CMPS\"],\n0x93: [3,1,\"CMPU\"],\n0x9C: [3,1,\"CMPS\"],\n0xA3: [3,6,\"CMPU\"],\n0xAC: [3,6,\"CMPS\"],\n0xB3: [4,7,\"CMPU\"],\n0xBC: [4,7,\"CMPS\"]\n};\n\nvar ds10 = {\n0x21:[5,3,\"LBRN\"],\n0x22:[5,3,\"LBHI\"],\n0x23:[5,3,\"LBLS\"],\n0x24:[5,3,\"LBCC\"],\n0x25:[5,3,\"LBCS\"],\n0x26:[5,3,\"LBNE\"],\n0x27:[5,3,\"LBEQ\"],\n0x28:[5,3,\"LBVC\"],\n0x29:[5,3,\"LBVS\"],\n0x2a:[5,3,\"LBPL\"],\n0x2b:[5,3,\"LBMI\"],\n0x2c:[5,3,\"LBGE\"],\n0x2d:[5,3,\"LBLT\"],\n0x2e:[5,3,\"LBGT\"],\n0x2f:[5,3,\"LBLE\"],\n0x3F:[2,2,\"SWI2\"],\n0x83:[4,8,\"CMPD\"],\n0x8C:[4,8,\"CMPY\"],\n0x8E:[4,8,\"LDY\"],\n0x93:[3,1,\"CMPD\"],\n0x9C:[3,1,\"CMPY\"],\n0x9E:[3,1,\"LDY\"],\n0x9F:[3,1,\"STY\"],\n0xA3:[3,6,\"CMPD\"],\n0xAC:[3,6,\"CMPY\"],\n0xAE:[3,6,\"LDY\"],\n0xAF:[3,6,\"STY\"],\n0xB3:[4,7,\"CMPD\"],\n0xBC:[4,7,\"CMPY\"],\n0xBE:[4,7,\"LDY\"],\n0xBF:[4,7,\"STY\"],\n0xCE:[4,8,\"LDS\"],\n0xDE:[3,1,\"LDS\"],\n0xDF:[3,1,\"STS\"],\n0xEE:[3,6,\"LDS\"],\n0xEF:[3,6,\"STS\"],\n0xFE:[4,7,\"LDS\"],\n0xFF:[4,7,\"STS\"]\n};\n/*\nILLEGAL 0\nDIRECT 1\nINHERENT 2\nBRANCH_REL_16 3\nIMMEDIAT_8 4\nBRANCH_REL_8 5\nINDEXED 6\nEXTENDED 7\nIMMEDIAT_16 8\n*/\n\nvar disasm = function(i,a,b,c,d,pc) {\n var toHexN = function(n,d) {\n var s = n.toString(16);\n while (s.length >5];\n if (!(pb & 0x80)) {\n //direct5\n var disp = pb & 0x1f;\n if (disp>15) disp = disp-32;\n mnemo+=disp+','+ixr;\n break;\n }\n var ind = pb & 0x10;\n var mod = pb & 0x0f;\n var ofs8 = (b>127)?(b-256):b;\n var ofs16 = ((b*256+c)>32767)?((b*256+c)-65536):(b*256+c);\n if (!ind) {\n switch (mod) {\n case 0: mnemo += \",\"+ixr+'+'; break;\n case 1: mnemo += \",\"+ixr+'++'; break;\n case 2: mnemo += \",-\"+ixr; break;\n case 3: mnemo += \",--\"+ixr; break;\n case 4: mnemo += \",\"+ixr; break;\n case 5: mnemo += \"B,\"+ixr; break;\n case 6: mnemo += \"A,\"+ixr; break;\n case 7: mnemo += \"???\"; break;\n case 8: mnemo += ofs8+\",\"+ixr; bytes++; break;\n case 9: mnemo += ofs16+\",\"+ixr; bytes+=2; break;\n case 10: mnemo += \"???\"; break;\n case 11: mnemo += \"D,\"+ixr; break;\n case 12: mnemo += ofs8+\",PC\"; bytes++; break;\n case 13: mnemo += ofs16+\",PC\"; bytes+=2; break;\n case 14: mnemo += \"???\"; break;\n case 15: mnemo += \"$\"+toHex4((b*256+c)); bytes+=2; break;\n }\n } else {\n switch (mod) {\n case 0: mnemo += \"???\"; break;\n case 1: mnemo += \"[,\"+ixr+'++]'; break;\n case 2: mnemo += \"???\"; break;\n case 3: mnemo += \"[,--\"+ixr+']'; break;\n case 4: mnemo += \"[,\"+ixr+']'; break;\n case 5: mnemo += \"[B,\"+ixr+']'; break;\n case 6: mnemo += \"[A,\"+ixr+']'; break;\n case 7: mnemo += \"???\"; break;\n case 8: mnemo += \"[\"+ofs8+\",\"+ixr+']'; bytes++; break;\n case 9: mnemo += \"[\"+ofs16+\",\"+ixr+']'; bytes+=2; break;\n case 10: mnemo += \"???\"; break;\n case 11: mnemo += \"[D,\"+ixr+']'; break;\n case 12: mnemo += \"[\"+ofs8+\",PC]\"; bytes++; break;\n case 13: mnemo += \"[\"+ofs16+\",PC]\"; bytes+=2; break;\n case 14: mnemo += \"???\"; break;\n case 15: mnemo += \"[$\"+toHex4((b*256+c))+']'; bytes+=2; break;\n }\n }\n\n break;\n case 7: //extended\n mnemo+=\"\\t$\"+toHex4(a*256+b); break;\n case 8: //imm16\n mnemo+=\"\\t#$\"+toHex4(a*256+b); break;\n\n case 10: //pshs, puls\n rx = ['PC','U','Y','X','DP','B','A','CC'];\n ro = [];\n for (j=0;j<8;j++) {\n if ((a & 1)!==0) {ro.push(rx[7-j]);}\n a>>=1;\n }\n mnemo += '\\t'+ro.join(',');\n break;\n case 11: //pshs, puls\n rx = ['PC','S','Y','X','DP','B','A','CC'];\n ro = [];\n for (j=0;j<8;j++) {\n if ((a & 1)!==0) {ro.push(rx[7-j]);}\n a>>=1;\n }\n mnemo += '\\t'+ro.join(',');\n break;\n case 20: //TFR etc\n rx = ['D','X','Y','U','S','PC','?','?','A','B','CC','DP','?','?','?','?'];\n mnemo += '\\t'+rx[a>>4]+','+rx[a&0x0f];\n break;\n }\n\n return {line:mnemo,nbytes:bytes};\n };\n\n\n//---------- Exports\n\nreturn {\n steps: function(Ts){\n //T=0;\n while (Ts>0){\n Ts-=step();\n }\n },\n runFrame: function(Tt){\n while (T>i);\n if (n===0) {f+=fx[i].toLowerCase();} else {f+=fx[i];}\n }\n return f;\n },\n disasm: disasm,\n isStable: function() { return true; }\n};\n\n};\n", "\nimport { CPU, Bus, ClockBased, SavesState, Interruptable } from \"../devices\";\n\n// Copyright 2015 by Paulo Augusto Peccin. See license.txt distributed with this file.\n\nexport var _MOS6502 = function() {\n var self = this;\n\n this.powerOn = function() {\n this.reset();\n };\n\n this.powerOff = function() {\n };\n\n this.clockPulse = function() {\n if (!RDY) return; // TODO Should be ignored in the last cycle of the instruction\n T++;\n instruction[T]();\n };\n\n this.connectBus = function(aBus) {\n bus = aBus;\n };\n\n this.setRDY = function(boo) {\n RDY = boo;\n };\n\n this.isRDY = function() {\n return RDY;\n }\n\n this.reset = function() {\n I = 1;\n T = -1;\n instruction = [ fetchOpcodeAndDecodeInstruction ]; // Bootstrap instruction\n PC = bus.read(RESET_VECTOR) | (bus.read(RESET_VECTOR + 1) << 8);\n this.setRDY(true);\n };\n\n // Interfaces\n var bus : Bus;\n var RDY : boolean = false;\n\n // Registers\n var PC : number = 0;\n var SP : number = 0;\n var A : number = 0;\n var X : number = 0;\n var Y : number = 0;\n\n // Status Bits\n var N : number = 0;\n var V : number = 0;\n var D : number = 0;\n var I : number = 0;\n var Z : number = 0;\n var C : number = 0;\n\n // Internal decoding registers\n var T : number = -1;\n var opcode : number = -1;\n var instruction : (() => void)[];\n var data : number = 0;\n var AD : number = 0;\n var BA : number = 0;\n var BALCrossed : boolean = false;\n var IA : number = 0;\n var branchOffset : number = 0;\n var branchOffsetCrossAdjust : number = 0;\n\n // Vectors\n const NMI_VECTOR = 0xfffa;\n const RESET_VECTOR = 0xfffc;\n const IRQ_VECTOR = 0xfffe;\n\n // Index registers names\n const rX = 0;\n const rY = 1;\n\n // Status bits names\n const bN = 7;\n const bV = 6;\n // const bE = 5;\t// Not used\n // const bB = 4;\t// Not used\n // const bD = 3; // Not used\n // const bI = 2; // Not used\n const bZ = 1;\n const bC = 0;\n\n // Auxiliary variables\n // TODO\n //noinspection JSUnusedGlobalSymbols\n this.debug = false;\n //noinspection JSUnusedGlobalSymbols\n this.trace = false;\n\n\n // Internal operations\n\n var fetchOpcodeAndDecodeInstruction = function() {\n opcode = bus.read(PC);\n instruction = instructions[opcode];\n T = 0;\n\n // if (self.trace) self.breakpoint(\"TRACE\");\n // console.log(\"PC: \" + PC + \", op: \" + opcode + \": \" + opcodes[opcode]);\n\n PC++;\n };\n\n var fetchNextOpcode = fetchOpcodeAndDecodeInstruction;\n\n var fetchOpcodeAndDiscard = function() {\n bus.read(PC);\n };\n\n var fetchBranchOffset = function() {\n branchOffset = bus.read(PC);\n PC++;\n };\n\n var fetchADL = function() {\n AD = bus.read(PC);\n PC++;\n };\n\n var fetchADH = function() {\n AD |= bus.read(PC) << 8;\n PC++;\n };\n\n var fetchADLFromBA = function() {\n AD = bus.read(BA);\n };\n\n var fetchADHFromBA = function() {\n AD |= bus.read(BA) << 8;\n };\n\n var fetchBAL = function() {\n BA = bus.read(PC);\n PC++;\n };\n\n var fetchBAH = function() {\n BA |= bus.read(PC) << 8;\n PC++;\n };\n\n var fetchBALFromIA = function() {\n BA = bus.read(IA);\n };\n\n var fetchBAHFromIA = function() {\n BA |= bus.read(IA) << 8;\n };\n\n var addXtoBAL = function() {\n var low = (BA & 255) + X;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var addYtoBAL = function() {\n var low = (BA & 255) + Y;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var add1toBAL = function() {\n var low = (BA & 255) + 1;\n BALCrossed = low > 255;\n BA = (BA & 0xff00) | (low & 255);\n };\n\n var add1toBAHifBALCrossed = function() {\n if (BALCrossed)\n BA = (BA + 0x0100) & 0xffff;\n };\n\n var fetchIAL = function() {\n IA = bus.read(PC);\n PC++;\n };\n\n var fetchIAH = function() {\n IA |= bus.read(PC) << 8;\n PC++;\n };\n\n var add1toIAL = function() {\n var low = (IA & 255) + 1;\n IA = (IA & 0xff00) | (low & 255);\n };\n\n var fetchDataFromImmediate = function() {\n data = bus.read(PC);\n PC++;\n };\n\n var fetchDataFromAD = function() {\n data = bus.read(AD);\n };\n\n var fetchDataFromBA = function() {\n data = bus.read(BA);\n };\n\n var writeDataToAD = function() {\n bus.write(AD, data);\n };\n\n var writeDataToBA = function() {\n bus.write(BA, data);\n };\n\n var addBranchOffsetToPCL = function() {\n var oldLow = (PC & 0x00ff);\n var newLow = (oldLow + branchOffset) & 255;\n // Negative offset?\n if (branchOffset > 127)\n branchOffsetCrossAdjust = (newLow > oldLow) ? -0x0100 : 0;\n else\n branchOffsetCrossAdjust = (newLow < oldLow) ? 0x0100 : 0;\n PC = (PC & 0xff00) | newLow;\n };\n\n var adjustPCHForBranchOffsetCross = function() {\n PC = (PC + branchOffsetCrossAdjust) & 0xffff;\n };\n\n var setZ = function(val) {\n Z = (val === 0) ? 1 : 0;\n };\n\n var setN = function(val) {\n N = (val & 0x080) ? 1 : 0;\n };\n\n var setV = function(boo) {\n V = boo ? 1 : 0;\n };\n\n var setC = function(boo) {\n C = boo ? 1 : 0;\n };\n\n var popFromStack = function() {\n SP = (SP + 1) & 255;\n return bus.read(0x0100 + SP);\n };\n\n var peekFromStack = function() {\n return bus.read(0x0100 + SP);\n };\n\n var pushToStack = function(val) {\n bus.write(0x0100 + SP, val);\n SP = (SP - 1) & 255;\n };\n\n var getStatusBits = function() {\n return N << 7 | V << 6 | 0x30 // Always push with E (bit 5) and B (bit 4) ON\n | D << 3 | I << 2 | Z << 1 | C;\n };\n\n var setStatusBits = function(val) {\n N = val >>> 7; V = val >>> 6 & 1; // E and B flags actually do not exist as real flags, so ignore\n D = val >>> 3 & 1; I = val >>> 2 & 1; Z = val >>> 1 & 1; C = val & 1;\n };\n\n var illegalOpcode = function(op) {\n if (self.debug) self.breakpoint(\"Illegal Opcode: \" + op);\n };\n\n\n // Addressing routines\n\n var implied = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var immediateRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var zeroPageRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var absoluteRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var indirectXRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n fetchDataFromAD,\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var absoluteIndexedRead = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function() {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n if (BALCrossed) {\n fetchDataFromBA();\n } else {\n operation();\n fetchNextOpcode();\n }\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n };\n\n var zeroPageIndexedRead = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addIndex();\n fetchDataFromBA();\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n };\n\n var indirectYRead = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n if(BALCrossed) {\n fetchDataFromBA();\n } else {\n operation();\n fetchNextOpcode();\n }\n },\n function() {\n operation();\n fetchNextOpcode();\n }\n ];\n };\n\n var zeroPageWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var indirectXWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteIndexedWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function() {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var zeroPageIndexedWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addIndex();\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var indirectYWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n\n\n var zeroPageReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL, // ADH will be zero\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var absoluteReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var zeroPageIndexedReadModifyWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function () {\n addIndex();\n fetchDataFromBA();\n },\n writeDataToBA,\n function () {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var absoluteIndexedReadModifyWrite = function(index) {\n var addIndex = index === rX ? addXtoBAL : addYtoBAL;\n return function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL,\n fetchBAH,\n function () {\n addIndex();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n fetchDataFromBA,\n writeDataToBA,\n function () {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n };\n\n var indirectXReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBAL, // BAH will be zero\n fetchDataFromBA,\n function() {\n addXtoBAL();\n fetchADLFromBA();\n },\n function() {\n add1toBAL();\n fetchADHFromBA();\n },\n fetchDataFromAD,\n writeDataToAD,\n function() {\n operation();\n writeDataToAD();\n },\n fetchNextOpcode\n ];\n };\n\n var indirectYReadModifyWrite = function(operation) {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() {\n addYtoBAL();\n fetchDataFromBA();\n add1toBAHifBALCrossed();\n },\n fetchDataFromBA,\n writeDataToBA,\n function() {\n operation();\n writeDataToBA();\n },\n fetchNextOpcode\n ];\n };\n\n\n // Instructions ========================================================================================\n\n // Complete instruction set\n var opcodes = new Array(256);\n var instructions = new Array(256);\n\n opcodes[0x00] = \"BRK\"; instructions[0x00] = BRK();\n opcodes[0x01] = \"ORA\"; instructions[0x01] = ORA(indirectXRead);\n opcodes[0x02] = \"uKIL\"; instructions[0x02] = uKIL();\n opcodes[0x03] = \"uSLO\"; instructions[0x03] = uSLO(indirectXReadModifyWrite);\n opcodes[0x04] = \"uNOP\"; instructions[0x04] = uNOP(zeroPageRead);\n opcodes[0x05] = \"ORA\"; instructions[0x05] = ORA(zeroPageRead);\n opcodes[0x06] = \"ASL\"; instructions[0x06] = ASL(zeroPageReadModifyWrite);\n opcodes[0x07] = \"uSLO\"; instructions[0x07] = uSLO(zeroPageReadModifyWrite);\n opcodes[0x08] = \"PHP\"; instructions[0x08] = PHP();\n opcodes[0x09] = \"ORA\"; instructions[0x09] = ORA(immediateRead);\n opcodes[0x0a] = \"ASL\"; instructions[0x0a] = ASL_ACC();\n opcodes[0x0b] = \"uANC\"; instructions[0x0b] = uANC(immediateRead);\n opcodes[0x0c] = \"uNOP\"; instructions[0x0c] = uNOP(absoluteRead);\n opcodes[0x0d] = \"ORA\"; instructions[0x0d] = ORA(absoluteRead);\n opcodes[0x0e] = \"ASL\"; instructions[0x0e] = ASL(absoluteReadModifyWrite);\n opcodes[0x0f] = \"uSLO\"; instructions[0x0f] = uSLO(absoluteReadModifyWrite);\n opcodes[0x10] = \"BPL\"; instructions[0x10] = Bxx(bN, 0); // BPL\n opcodes[0x11] = \"ORA\"; instructions[0x11] = ORA(indirectYRead);\n opcodes[0x12] = \"uKIL\"; instructions[0x12] = uKIL();\n opcodes[0x13] = \"uSLO\"; instructions[0x13] = uSLO(indirectYReadModifyWrite);\n opcodes[0x14] = \"uNOP\"; instructions[0x14] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x15] = \"ORA\"; instructions[0x15] = ORA(zeroPageIndexedRead(rX));\n opcodes[0x16] = \"ASL\"; instructions[0x16] = ASL(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x17] = \"uSLO\"; instructions[0x17] = uSLO(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x18] = \"CLC\"; instructions[0x18] = CLC();\n opcodes[0x19] = \"ORA\"; instructions[0x19] = ORA(absoluteIndexedRead(rY));\n opcodes[0x1a] = \"uNOP\"; instructions[0x1a] = uNOP(implied);\n opcodes[0x1b] = \"uSLO\"; instructions[0x1b] = uSLO(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x1c] = \"uNOP\"; instructions[0x1c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x1d] = \"ORA\"; instructions[0x1d] = ORA(absoluteIndexedRead(rX));\n opcodes[0x1e] = \"ASL\"; instructions[0x1e] = ASL(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x1f] = \"uSLO\"; instructions[0x1f] = uSLO(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x20] = \"JSR\"; instructions[0x20] = JSR();\n opcodes[0x21] = \"AND\"; instructions[0x21] = AND(indirectXRead);\n opcodes[0x22] = \"uKIL\"; instructions[0x22] = uKIL();\n opcodes[0x23] = \"uRLA\"; instructions[0x23] = uRLA(indirectXReadModifyWrite);\n opcodes[0x24] = \"BIT\"; instructions[0x24] = BIT(zeroPageRead);\n opcodes[0x25] = \"AND\"; instructions[0x25] = AND(zeroPageRead);\n opcodes[0x26] = \"ROL\"; instructions[0x26] = ROL(zeroPageReadModifyWrite);\n opcodes[0x27] = \"uRLA\"; instructions[0x27] = uRLA(zeroPageReadModifyWrite);\n opcodes[0x28] = \"PLP\"; instructions[0x28] = PLP();\n opcodes[0x29] = \"AND\"; instructions[0x29] = AND(immediateRead);\n opcodes[0x2a] = \"ROL\"; instructions[0x2a] = ROL_ACC();\n opcodes[0x2b] = \"uANC\"; instructions[0x2b] = uANC(immediateRead);\n opcodes[0x2c] = \"BIT\"; instructions[0x2c] = BIT(absoluteRead);\n opcodes[0x2d] = \"AND\"; instructions[0x2d] = AND(absoluteRead);\n opcodes[0x2e] = \"ROL\"; instructions[0x2e] = ROL(absoluteReadModifyWrite);\n opcodes[0x2f] = \"uRLA\"; instructions[0x2f] = uRLA(absoluteReadModifyWrite);\n opcodes[0x30] = \"BMI\"; instructions[0x30] = Bxx(bN, 1); // BMI\n opcodes[0x31] = \"AND\"; instructions[0x31] = AND(indirectYRead);\n opcodes[0x32] = \"uKIL\"; instructions[0x32] = uKIL();\n opcodes[0x33] = \"uRLA\"; instructions[0x33] = uRLA(indirectYReadModifyWrite);\n opcodes[0x34] = \"uNOP\"; instructions[0x34] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x35] = \"AND\"; instructions[0x35] = AND(zeroPageIndexedRead(rX));\n opcodes[0x36] = \"ROL\"; instructions[0x36] = ROL(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x37] = \"uRLA\"; instructions[0x37] = uRLA(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x38] = \"SEC\"; instructions[0x38] = SEC();\n opcodes[0x39] = \"AND\"; instructions[0x39] = AND(absoluteIndexedRead(rY));\n opcodes[0x3a] = \"uNOP\"; instructions[0x3a] = uNOP(implied);\n opcodes[0x3b] = \"uRLA\"; instructions[0x3b] = uRLA(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x3c] = \"uNOP\"; instructions[0x3c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x3d] = \"AND\"; instructions[0x3d] = AND(absoluteIndexedRead(rX));\n opcodes[0x3e] = \"ROL\"; instructions[0x3e] = ROL(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x3f] = \"uRLA\"; instructions[0x3f] = uRLA(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x40] = \"RTI\"; instructions[0x40] = RTI();\n opcodes[0x41] = \"EOR\"; instructions[0x41] = EOR(indirectXRead);\n opcodes[0x42] = \"uKIL\"; instructions[0x42] = uKIL();\n opcodes[0x43] = \"uSRE\"; instructions[0x43] = uSRE(indirectXReadModifyWrite);\n opcodes[0x44] = \"uNOP\"; instructions[0x44] = uNOP(zeroPageRead);\n opcodes[0x45] = \"EOR\"; instructions[0x45] = EOR(zeroPageRead);\n opcodes[0x46] = \"LSR\"; instructions[0x46] = LSR(zeroPageReadModifyWrite);\n opcodes[0x47] = \"uSRE\"; instructions[0x47] = uSRE(zeroPageReadModifyWrite);\n opcodes[0x48] = \"PHA\"; instructions[0x48] = PHA();\n opcodes[0x49] = \"EOR\"; instructions[0x49] = EOR(immediateRead);\n opcodes[0x4a] = \"LSR\"; instructions[0x4a] = LSR_ACC();\n opcodes[0x4b] = \"uASR\"; instructions[0x4b] = uASR(immediateRead);\n opcodes[0x4c] = \"JMP\"; instructions[0x4c] = JMP_ABS();\n opcodes[0x4d] = \"EOR\"; instructions[0x4d] = EOR(absoluteRead);\n opcodes[0x4e] = \"LSR\"; instructions[0x4e] = LSR(absoluteReadModifyWrite);\n opcodes[0x4f] = \"uSRE\"; instructions[0x4f] = uSRE(absoluteReadModifyWrite);\n opcodes[0x50] = \"BVC\"; instructions[0x50] = Bxx(bV, 0); // BVC\n opcodes[0x51] = \"EOR\"; instructions[0x51] = EOR(indirectYRead);\n opcodes[0x52] = \"uKIL\"; instructions[0x52] = uKIL();\n opcodes[0x53] = \"uSRE\"; instructions[0x53] = uSRE(indirectYReadModifyWrite);\n opcodes[0x54] = \"uNOP\"; instructions[0x54] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x55] = \"EOR\"; instructions[0x55] = EOR(zeroPageIndexedRead(rX));\n opcodes[0x56] = \"LSR\"; instructions[0x56] = LSR(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x57] = \"uSRE\"; instructions[0x57] = uSRE(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x58] = \"CLI\"; instructions[0x58] = CLI();\n opcodes[0x59] = \"EOR\"; instructions[0x59] = EOR(absoluteIndexedRead(rY));\n opcodes[0x5a] = \"uNOP\"; instructions[0x5a] = uNOP(implied);\n opcodes[0x5b] = \"uSRE\"; instructions[0x5b] = uSRE(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x5c] = \"uNOP\"; instructions[0x5c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x5d] = \"EOR\"; instructions[0x5d] = EOR(absoluteIndexedRead(rX));\n opcodes[0x5e] = \"LSR\"; instructions[0x5e] = LSR(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x5f] = \"uSRE\"; instructions[0x5f] = uSRE(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x60] = \"RTS\"; instructions[0x60] = RTS();\n opcodes[0x61] = \"ADC\"; instructions[0x61] = ADC(indirectXRead);\n opcodes[0x62] = \"uKIL\"; instructions[0x62] = uKIL();\n opcodes[0x63] = \"uRRA\"; instructions[0x63] = uRRA(indirectXReadModifyWrite);\n opcodes[0x64] = \"uNOP\"; instructions[0x64] = uNOP(zeroPageRead);\n opcodes[0x65] = \"ADC\"; instructions[0x65] = ADC(zeroPageRead);\n opcodes[0x66] = \"ROR\"; instructions[0x66] = ROR(zeroPageReadModifyWrite);\n opcodes[0x67] = \"uRRA\"; instructions[0x67] = uRRA(zeroPageReadModifyWrite);\n opcodes[0x68] = \"PLA\"; instructions[0x68] = PLA();\n opcodes[0x69] = \"ADC\"; instructions[0x69] = ADC(immediateRead);\n opcodes[0x6a] = \"ROR\"; instructions[0x6a] = ROR_ACC();\n opcodes[0x6b] = \"uARR\"; instructions[0x6b] = uARR(immediateRead);\n opcodes[0x6c] = \"JMP\"; instructions[0x6c] = JMP_IND();\n opcodes[0x6d] = \"ADC\"; instructions[0x6d] = ADC(absoluteRead);\n opcodes[0x6e] = \"ROR\"; instructions[0x6e] = ROR(absoluteReadModifyWrite);\n opcodes[0x6f] = \"uRRA\"; instructions[0x6f] = uRRA(absoluteReadModifyWrite);\n opcodes[0x70] = \"BVS\"; instructions[0x70] = Bxx(bV, 1); // BVS\n opcodes[0x71] = \"ADC\"; instructions[0x71] = ADC(indirectYRead);\n opcodes[0x72] = \"uKIL\"; instructions[0x72] = uKIL();\n opcodes[0x73] = \"uRRA\"; instructions[0x73] = uRRA(indirectYReadModifyWrite);\n opcodes[0x74] = \"uNOP\"; instructions[0x74] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0x75] = \"ADC\"; instructions[0x75] = ADC(zeroPageIndexedRead(rX));\n opcodes[0x76] = \"ROR\"; instructions[0x76] = ROR(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x77] = \"uRRA\"; instructions[0x77] = uRRA(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0x78] = \"SEI\"; instructions[0x78] = SEI();\n opcodes[0x79] = \"ADC\"; instructions[0x79] = ADC(absoluteIndexedRead(rY));\n opcodes[0x7a] = \"uNOP\"; instructions[0x7a] = uNOP(implied);\n opcodes[0x7b] = \"uRRA\"; instructions[0x7b] = uRRA(absoluteIndexedReadModifyWrite(rY));\n opcodes[0x7c] = \"uNOP\"; instructions[0x7c] = uNOP(absoluteIndexedRead(rX));\n opcodes[0x7d] = \"ADC\"; instructions[0x7d] = ADC(absoluteIndexedRead(rX));\n opcodes[0x7e] = \"ROR\"; instructions[0x7e] = ROR(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x7f] = \"uRRA\"; instructions[0x7f] = uRRA(absoluteIndexedReadModifyWrite(rX));\n opcodes[0x80] = \"uNOP\"; instructions[0x80] = uNOP(immediateRead);\n opcodes[0x81] = \"STA\"; instructions[0x81] = STA(indirectXWrite);\n opcodes[0x82] = \"uNOP\"; instructions[0x82] = uNOP(immediateRead);\n opcodes[0x83] = \"uSAX\"; instructions[0x83] = uSAX(indirectXWrite);\n opcodes[0x84] = \"STY\"; instructions[0x84] = STY(zeroPageWrite);\n opcodes[0x85] = \"STA\"; instructions[0x85] = STA(zeroPageWrite);\n opcodes[0x86] = \"STX\"; instructions[0x86] = STX(zeroPageWrite);\n opcodes[0x87] = \"uSAX\"; instructions[0x87] = uSAX(zeroPageWrite);\n opcodes[0x88] = \"DEY\"; instructions[0x88] = DEY();\n opcodes[0x89] = \"uNOP\"; instructions[0x89] = uNOP(immediateRead);\n opcodes[0x8a] = \"TXA\"; instructions[0x8a] = TXA();\n opcodes[0x8b] = \"uANE\"; instructions[0x8b] = uANE(immediateRead);\n opcodes[0x8c] = \"STY\"; instructions[0x8c] = STY(absoluteWrite);\n opcodes[0x8d] = \"STA\"; instructions[0x8d] = STA(absoluteWrite);\n opcodes[0x8e] = \"STX\"; instructions[0x8e] = STX(absoluteWrite);\n opcodes[0x8f] = \"uSAX\"; instructions[0x8f] = uSAX(absoluteWrite);\n opcodes[0x90] = \"BCC\"; instructions[0x90] = Bxx(bC, 0); // BCC\n opcodes[0x91] = \"STA\"; instructions[0x91] = STA(indirectYWrite);\n opcodes[0x92] = \"uKIL\"; instructions[0x92] = uKIL();\n opcodes[0x93] = \"uSHA\"; instructions[0x93] = uSHA(indirectYWrite);\n opcodes[0x94] = \"STY\"; instructions[0x94] = STY(zeroPageIndexedWrite(rX));\n opcodes[0x95] = \"STA\"; instructions[0x95] = STA(zeroPageIndexedWrite(rX));\n opcodes[0x96] = \"STX\"; instructions[0x96] = STX(zeroPageIndexedWrite(rY));\n opcodes[0x97] = \"uSAX\"; instructions[0x97] = uSAX(zeroPageIndexedWrite(rY));\n opcodes[0x98] = \"TYA\"; instructions[0x98] = TYA();\n opcodes[0x99] = \"STA\"; instructions[0x99] = STA(absoluteIndexedWrite(rY));\n opcodes[0x9a] = \"TXS\"; instructions[0x9a] = TXS();\n opcodes[0x9b] = \"uSHS\"; instructions[0x9b] = uSHS(absoluteIndexedWrite(rY));\n opcodes[0x9c] = \"uSHY\"; instructions[0x9c] = uSHY(absoluteIndexedWrite(rX));\n opcodes[0x9d] = \"STA\"; instructions[0x9d] = STA(absoluteIndexedWrite(rX));\n opcodes[0x9e] = \"uSHX\"; instructions[0x9e] = uSHX(absoluteIndexedWrite(rY));\n opcodes[0x9f] = \"uSHA\"; instructions[0x9f] = uSHA(absoluteIndexedWrite(rY));\n opcodes[0xa0] = \"LDY\"; instructions[0xa0] = LDY(immediateRead);\n opcodes[0xa1] = \"LDA\"; instructions[0xa1] = LDA(indirectXRead);\n opcodes[0xa2] = \"LDX\"; instructions[0xa2] = LDX(immediateRead);\n opcodes[0xa3] = \"uLAX\"; instructions[0xa3] = uLAX(indirectXRead);\n opcodes[0xa4] = \"LDY\"; instructions[0xa4] = LDY(zeroPageRead);\n opcodes[0xa5] = \"LDA\"; instructions[0xa5] = LDA(zeroPageRead);\n opcodes[0xa6] = \"LDX\"; instructions[0xa6] = LDX(zeroPageRead);\n opcodes[0xa7] = \"uLAX\"; instructions[0xa7] = uLAX(zeroPageRead);\n opcodes[0xa8] = \"TAY\"; instructions[0xa8] = TAY();\n opcodes[0xa9] = \"LDA\"; instructions[0xa9] = LDA(immediateRead);\n opcodes[0xaa] = \"TAX\"; instructions[0xaa] = TAX();\n opcodes[0xab] = \"uLXA\"; instructions[0xab] = uLXA(immediateRead);\n opcodes[0xac] = \"LDY\"; instructions[0xac] = LDY(absoluteRead);\n opcodes[0xad] = \"LDA\"; instructions[0xad] = LDA(absoluteRead);\n opcodes[0xae] = \"LDX\"; instructions[0xae] = LDX(absoluteRead);\n opcodes[0xaf] = \"uLAX\"; instructions[0xaf] = uLAX(absoluteRead);\n opcodes[0xb0] = \"BCS\"; instructions[0xb0] = Bxx(bC, 1); // BCS\n opcodes[0xb1] = \"LDA\"; instructions[0xb1] = LDA(indirectYRead);\n opcodes[0xb2] = \"uKIL\"; instructions[0xb2] = uKIL();\n opcodes[0xb3] = \"uLAX\"; instructions[0xb3] = uLAX(indirectYRead);\n opcodes[0xb4] = \"LDY\"; instructions[0xb4] = LDY(zeroPageIndexedRead(rX));\n opcodes[0xb5] = \"LDA\"; instructions[0xb5] = LDA(zeroPageIndexedRead(rX));\n opcodes[0xb6] = \"LDX\"; instructions[0xb6] = LDX(zeroPageIndexedRead(rY));\n opcodes[0xb7] = \"uLAX\"; instructions[0xb7] = uLAX(zeroPageIndexedRead(rY));\n opcodes[0xb8] = \"CLV\"; instructions[0xb8] = CLV();\n opcodes[0xb9] = \"LDA\"; instructions[0xb9] = LDA(absoluteIndexedRead(rY));\n opcodes[0xba] = \"TSX\"; instructions[0xba] = TSX();\n opcodes[0xbb] = \"uLAS\"; instructions[0xbb] = uLAS(absoluteIndexedRead(rY));\n opcodes[0xbc] = \"LDY\"; instructions[0xbc] = LDY(absoluteIndexedRead(rX));\n opcodes[0xbd] = \"LDA\"; instructions[0xbd] = LDA(absoluteIndexedRead(rX));\n opcodes[0xbe] = \"LDX\"; instructions[0xbe] = LDX(absoluteIndexedRead(rY));\n opcodes[0xbf] = \"uLAX\"; instructions[0xbf] = uLAX(absoluteIndexedRead(rY));\n opcodes[0xc0] = \"CPY\"; instructions[0xc0] = CPY(immediateRead);\n opcodes[0xc1] = \"CMP\"; instructions[0xc1] = CMP(indirectXRead);\n opcodes[0xc2] = \"uNOP\"; instructions[0xc2] = uNOP(immediateRead);\n opcodes[0xc3] = \"uDCP\"; instructions[0xc3] = uDCP(indirectXReadModifyWrite);\n opcodes[0xc4] = \"CPY\"; instructions[0xc4] = CPY(zeroPageRead);\n opcodes[0xc5] = \"CMP\"; instructions[0xc5] = CMP(zeroPageRead);\n opcodes[0xc6] = \"DEC\"; instructions[0xc6] = DEC(zeroPageReadModifyWrite);\n opcodes[0xc7] = \"uDCP\"; instructions[0xc7] = uDCP(zeroPageReadModifyWrite);\n opcodes[0xc8] = \"INY\"; instructions[0xc8] = INY();\n opcodes[0xc9] = \"CMP\"; instructions[0xc9] = CMP(immediateRead);\n opcodes[0xca] = \"DEX\"; instructions[0xca] = DEX();\n opcodes[0xcb] = \"uSBX\"; instructions[0xcb] = uSBX(immediateRead);\n opcodes[0xcc] = \"CPY\"; instructions[0xcc] = CPY(absoluteRead);\n opcodes[0xcd] = \"CMP\"; instructions[0xcd] = CMP(absoluteRead);\n opcodes[0xce] = \"DEC\"; instructions[0xce] = DEC(absoluteReadModifyWrite);\n opcodes[0xcf] = \"uDCP\"; instructions[0xcf] = uDCP(absoluteReadModifyWrite);\n opcodes[0xd0] = \"BNE\"; instructions[0xd0] = Bxx(bZ, 0); // BNE\n opcodes[0xd1] = \"CMP\"; instructions[0xd1] = CMP(indirectYRead);\n opcodes[0xd2] = \"uKIL\"; instructions[0xd2] = uKIL();\n opcodes[0xd3] = \"uDCP\"; instructions[0xd3] = uDCP(indirectYReadModifyWrite);\n opcodes[0xd4] = \"uNOP\"; instructions[0xd4] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0xd5] = \"CMP\"; instructions[0xd5] = CMP(zeroPageIndexedRead(rX));\n opcodes[0xd6] = \"DEC\"; instructions[0xd6] = DEC(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xd7] = \"uDCP\"; instructions[0xd7] = uDCP(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xd8] = \"CLD\"; instructions[0xd8] = CLD();\n opcodes[0xd9] = \"CMP\"; instructions[0xd9] = CMP(absoluteIndexedRead(rY));\n opcodes[0xda] = \"uNOP\"; instructions[0xda] = uNOP(implied);\n opcodes[0xdb] = \"uDCP\"; instructions[0xdb] = uDCP(absoluteIndexedReadModifyWrite(rY));\n opcodes[0xdc] = \"uNOP\"; instructions[0xdc] = uNOP(absoluteIndexedRead(rX));\n opcodes[0xdd] = \"CMP\"; instructions[0xdd] = CMP(absoluteIndexedRead(rX));\n opcodes[0xde] = \"DEC\"; instructions[0xde] = DEC(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xdf] = \"uDCP\"; instructions[0xdf] = uDCP(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xe0] = \"CPX\"; instructions[0xe0] = CPX(immediateRead);\n opcodes[0xe1] = \"SBC\"; instructions[0xe1] = SBC(indirectXRead);\n opcodes[0xe2] = \"uNOP\"; instructions[0xe2] = uNOP(immediateRead);\n opcodes[0xe3] = \"uISB\"; instructions[0xe3] = uISB(indirectXReadModifyWrite);\n opcodes[0xe4] = \"CPX\"; instructions[0xe4] = CPX(zeroPageRead);\n opcodes[0xe5] = \"SBC\"; instructions[0xe5] = SBC(zeroPageRead);\n opcodes[0xe6] = \"INC\"; instructions[0xe6] = INC(zeroPageReadModifyWrite);\n opcodes[0xe7] = \"uISB\"; instructions[0xe7] = uISB(zeroPageReadModifyWrite);\n opcodes[0xe8] = \"INX\"; instructions[0xe8] = INX();\n opcodes[0xe9] = \"SBC\"; instructions[0xe9] = SBC(immediateRead);\n opcodes[0xea] = \"NOP\"; instructions[0xea] = NOP();\n opcodes[0xeb] = \"SBC\"; instructions[0xeb] = SBC(immediateRead);\n opcodes[0xec] = \"CPX\"; instructions[0xec] = CPX(absoluteRead);\n opcodes[0xed] = \"SBC\"; instructions[0xed] = SBC(absoluteRead);\n opcodes[0xee] = \"INC\"; instructions[0xee] = INC(absoluteReadModifyWrite);\n opcodes[0xef] = \"uISB\"; instructions[0xef] = uISB(absoluteReadModifyWrite);\n opcodes[0xf0] = \"BEQ\"; instructions[0xf0] = Bxx(bZ, 1); // BEQ\n opcodes[0xf1] = \"SBC\"; instructions[0xf1] = SBC(indirectYRead);\n opcodes[0xf2] = \"uKIL\"; instructions[0xf2] = uKIL();\n opcodes[0xf3] = \"uISB\"; instructions[0xf3] = uISB(indirectYReadModifyWrite);\n opcodes[0xf4] = \"uNOP\"; instructions[0xf4] = uNOP(zeroPageIndexedRead(rX));\n opcodes[0xf5] = \"SBC\"; instructions[0xf5] = SBC(zeroPageIndexedRead(rX));\n opcodes[0xf6] = \"INC\"; instructions[0xf6] = INC(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xf7] = \"uISB\"; instructions[0xf7] = uISB(zeroPageIndexedReadModifyWrite(rX));\n opcodes[0xf8] = \"SED\"; instructions[0xf8] = SED();\n opcodes[0xf9] = \"SBC\"; instructions[0xf9] = SBC(absoluteIndexedRead(rY));\n opcodes[0xfa] = \"uNOP\"; instructions[0xfa] = uNOP(implied);\n opcodes[0xfb] = \"uISB\"; instructions[0xfb] = uISB(absoluteIndexedReadModifyWrite(rY));\n opcodes[0xfc] = \"uNOP\"; instructions[0xfc] = uNOP(absoluteIndexedRead(rX));\n opcodes[0xfd] = \"SBC\"; instructions[0xfd] = SBC(absoluteIndexedRead(rX));\n opcodes[0xfe] = \"INC\"; instructions[0xfe] = INC(absoluteIndexedReadModifyWrite(rX));\n opcodes[0xff] = \"uISB\"; instructions[0xff] = uISB(absoluteIndexedReadModifyWrite(rX));\n\n\n // Single Byte instructions\n\n function ASL_ACC() {\n return implied(function() {\n setC(A > 127);\n A = (A << 1) & 255;\n setZ(A);\n setN(A);\n });\n }\n\n function CLC() {\n return implied(function() {\n C = 0;\n });\n }\n\n function CLD() {\n return implied(function() {\n D = 0;\n });\n }\n\n function CLI() {\n return implied(function() {\n I = 0;\n });\n }\n\n function CLV() {\n return implied(function() {\n V = 0;\n });\n }\n\n function DEX() {\n return implied(function() {\n X = (X - 1) & 255;\n setZ(X);\n setN(X);\n });\n }\n\n function DEY() {\n return implied(function() {\n Y = (Y - 1) & 255;\n setZ(Y);\n setN(Y);\n });\n }\n\n function INX() {\n return implied(function() {\n X = (X + 1) & 255;\n setZ(X);\n setN(X);\n });\n }\n\n function INY() {\n return implied(function() {\n Y = (Y + 1) & 255;\n setZ(Y);\n setN(Y);\n });\n }\n\n function LSR_ACC() {\n return implied(function() {\n C = A & 0x01;\n A >>>= 1;\n setZ(A);\n N = 0;\n });\n }\n\n function NOP() {\n return implied(function() {\n // nothing\n });\n }\n\n function ROL_ACC() {\n return implied(function() {\n var newC = A > 127;\n A = ((A << 1) | C) & 255;\n setC(newC);\n setZ(A);\n setN(A);\n });\n }\n\n function ROR_ACC() {\n return implied(function() {\n var newC = A & 0x01;\n A = (A >>> 1) | (C << 7);\n setC(newC);\n setZ(A);\n setN(A);\n });\n }\n\n function SEC() {\n return implied(function() {\n C = 1;\n });\n }\n\n function SED() {\n return implied(function() {\n D = 1;\n });\n }\n\n function SEI() {\n return implied(function() {\n I = 1;\n });\n }\n\n function TAX() {\n return implied(function() {\n X = A;\n setZ(X);\n setN(X);\n });\n }\n\n function TAY() {\n return implied(function() {\n Y = A;\n setZ(Y);\n setN(Y);\n });\n }\n\n function TSX() {\n return implied(function() {\n X = SP;\n setZ(X);\n setN(X);\n });\n }\n\n function TXA() {\n return implied(function() {\n A = X;\n setZ(A);\n setN(A);\n });\n }\n\n function TXS() {\n return implied(function() {\n SP = X;\n });\n }\n\n function TYA() {\n return implied(function() {\n A = Y;\n setZ(A);\n setN(A);\n });\n }\n\n function uKIL() {\n return [\n fetchOpcodeAndDecodeInstruction,\n function() {\n illegalOpcode(\"KIL/HLT/JAM\");\n },\n function() {\n T--; // Causes the processor to be stuck in this instruction forever\n }\n ];\n }\n\n function uNOP(addressing) {\n return addressing(function() {\n illegalOpcode(\"NOP/DOP\");\n // nothing\n });\n }\n\n\n // Internal Execution on Memory Data\n\n function ADC(addressing) {\n return addressing(function() {\n if (D) {\n var operand = data;\n var AL = (A & 15) + (operand & 15) + C;\n if (AL > 9) { AL += 6; }\n var AH = ((A >> 4) + (operand >> 4) + ((AL > 15)?1:0)) << 4;\n setZ((A + operand + C) & 255);\n setN(AH);\n setV(((A ^AH) & ~(A ^ operand)) & 128);\n if (AH > 0x9f) { AH += 0x60; }\n setC(AH > 255);\n A = (AH | (AL & 15)) & 255;\n } else {\n var add = A + data + C;\n setC(add > 255);\n setV(((A ^ add) & (data ^ add)) & 0x80);\n A = add & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function AND(addressing) {\n return addressing(function() {\n A &= data;\n setZ(A);\n setN(A);\n });\n }\n\n function BIT(addressing) {\n return addressing(function() {\n var par = data;\n setZ(A & par);\n setV(par & 0x40);\n setN(par);\n });\n }\n\n function CMP(addressing) {\n return addressing(function() {\n var val = (A - data) & 255;\n setC(A >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function CPX(addressing) {\n return addressing(function() {\n var val = (X - data) & 255;\n setC(X >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function CPY(addressing) {\n return addressing(function() {\n var val = (Y - data) & 255;\n setC(Y >= data);\n setZ(val);\n setN(val);\n });\n }\n\n function EOR(addressing) {\n return addressing(function() {\n A ^= data;\n setZ(A);\n setN(A);\n });\n }\n\n function LDA(addressing) {\n return addressing(function() {\n A = data;\n setZ(A);\n setN(A);\n });\n }\n\n function LDX(addressing) {\n return addressing(function() {\n X = data;\n setZ(X);\n setN(X);\n });\n }\n\n function LDY(addressing) {\n return addressing(function() {\n Y = data;\n setZ(Y);\n setN(Y);\n });\n }\n\n function ORA(addressing) {\n return addressing(function() {\n A |= data;\n setZ(A);\n setN(A);\n });\n }\n\n function SBC(addressing) {\n return addressing(function() {\n if (D) {\n var operand = data;\n var AL = (A & 15) - (operand & 15) - (1-C);\n var AH = (A >> 4) - (operand >> 4) - ((AL < 0)?1:0);\n if (AL < 0) { AL -= 6; }\n if (AH < 0) { AH -= 6; }\n var sub = A - operand - (1-C);\n setC(~sub & 256);\n setV(((A ^ operand) & (A ^ sub)) & 128);\n setZ(sub & 255);\n setN(sub);\n A = ((AH << 4) | (AL & 15)) & 255;\n } else {\n operand = (~data) & 255;\n sub = A + operand + C;\n setC(sub > 255);\n setV(((A ^ sub) & (operand ^ sub) & 0x80));\n A = sub & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uANC(addressing) {\n return addressing(function() {\n illegalOpcode(\"ANC\");\n A &= data;\n setZ(A);\n N = C = (A & 0x080) ? 1 : 0;\n });\n }\n\n function uANE(addressing) {\n return addressing(function() {\n illegalOpcode(\"ANE\");\n // Exact operation unknown. Do nothing\n });\n }\n\n function uARR(addressing) {\n // Some sources say flags are affected per ROR, others say its more complex. The complex one is chosen\n return addressing(function() {\n illegalOpcode(\"ARR\");\n var val = A & data;\n var oldC = C ? 0x80 : 0;\n val = (val >>> 1) | oldC;\n A = val;\n setZ(val);\n setN(val);\n var comp = A & 0x60;\n if (comp == 0x60) \t\t{ C = 1; V = 0; }\n else if (comp == 0x00) \t{ C = 0; V = 0; }\n else if (comp == 0x20) \t{ C = 0; V = 1; }\n else if (comp == 0x40) \t{ C = 1; V = 1; }\n });\n }\n\n function uASR(addressing) {\n return addressing(function() {\n illegalOpcode(\"ASR\");\n var val = A & data;\n C = (val & 0x01);\t\t// bit 0\n val = val >>> 1;\n A = val;\n setZ(val);\n N = 0;\n });\n }\n\n function uLAS(addressing) {\n return addressing(function() {\n illegalOpcode(\"LAS\");\n var val = SP & data;\n A = val;\n X = val;\n SP = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uLAX(addressing) {\n return addressing(function() {\n illegalOpcode(\"LAX\");\n var val = data;\n A = val;\n X = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uLXA(addressing) {\n return addressing(function() {\n // Some sources say its an OR with $EE then AND with IMM, others exclude the OR,\n // others exclude both the OR and the AND. Excluding just the OR...\n illegalOpcode(\"LXA\");\n var val = A /* | 0xEE) */ & data;\n A = val;\n X = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uSBX(addressing) {\n return addressing(function() {\n illegalOpcode(\"SBX\");\n var par = A & X;\n var val = data;\n var newX = (par - val) & 255;\n X = newX;\n setC(par >= val);\n setZ(newX);\n setN(newX);\n });\n }\n\n\n // Store operations\n\n function STA(addressing) {\n return addressing(function() {\n data = A;\n });\n }\n\n function STX(addressing) {\n return addressing(function() {\n data = X;\n });\n }\n\n function STY(addressing) {\n return addressing(function() {\n data = Y;\n });\n }\n\n function uSAX(addressing) {\n return addressing(function() {\n // Some sources say it would affect N and Z flags, some say it wouldn't. Chose not to affect\n illegalOpcode(\"SAX\");\n data = A & X;\n });\n }\n\n function uSHA(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHA\");\n data = A & X & ((BA >>> 8) + 1) & 255; // A & X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHS(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHS\");\n var val = A & X;\n SP = val;\n data = val & ((BA >>> 8) + 1) & 255; // A & X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHX(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHX\");\n data = X & ((BA >>> 8) + 1) & 255; // X & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n function uSHY(addressing) {\n return addressing(function() {\n illegalOpcode(\"SHY\");\n data = Y & ((BA >>> 8) + 1) & 255; // Y & (High byte of effective address + 1) !!!\n // data would also be stored BAH if page boundary is crossed. Unobservable, not needed here\n });\n }\n\n\n // Read-Modify-Write operations\n\n function ASL(addressing) {\n return addressing(function() {\n setC(data > 127);\n var par = (data << 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function DEC(addressing) {\n return addressing(function() {\n var par = (data - 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function INC(addressing) {\n return addressing(function() {\n var par = (data + 1) & 255;\n data = par;\n setZ(par);\n setN(par);\n });\n }\n\n function LSR(addressing) {\n return addressing(function() {\n C = data & 0x01;\n data >>>= 1;\n setZ(data);\n N = 0;\n });\n }\n\n function ROL(addressing) {\n return addressing(function() {\n var newC = data > 127;\n var par = ((data << 1) | C) & 255;\n data = par;\n setC(newC);\n setZ(par);\n setN(par);\n });\n }\n\n function ROR(addressing) {\n return addressing(function() {\n var newC = data & 0x01;\n var par = (data >>> 1) | (C << 7);\n data = par;\n setC(newC);\n setZ(par);\n setN(par);\n });\n }\n\n function uDCP(addressing) {\n return addressing(function() {\n illegalOpcode(\"DCP\");\n var par = (data - 1) & 255;\n data = par;\n par = A - par;\n setC(par >= 0);\n setZ(par);\n setN(par);\n });\n }\n\n function uISB(addressing) {\n return addressing(function() {\n illegalOpcode(\"ISB\");\n data = (data + 1) & 255; // ISB is the same as SBC but incs the operand first\n if (D) {\n var operand = data;\n var AL = (A & 15) - (operand & 15) - (1-C);\n var AH = (A >> 4) - (operand >> 4) - ((AL < 0)?1:0);\n if (AL < 0) { AL -= 6; }\n if (AH < 0) { AH -= 6; }\n var sub = A - operand - (1-C);\n setC(~sub & 256);\n setV(((A ^ operand) & (A ^ sub)) & 128);\n setZ(sub & 255);\n setN(sub);\n A = ((AH << 4) | (AL & 15)) & 255;\n } else {\n operand = (~data) & 255;\n sub = A + operand + C;\n setC(sub > 255);\n setV(((A ^ sub) & (operand ^ sub) & 0x80));\n A = sub & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uRLA(addressing) {\n return addressing(function() {\n illegalOpcode(\"RLA\");\n var val = data;\n var oldC = C;\n setC(val & 0x80);\t\t// bit 7 was set\n val = ((val << 1) | oldC) & 255;\n data = val;\n A &= val;\n setZ(val); // TODO Verify. May be A instead of val in the flags setting\n setN(val);\n });\n }\n\n function uRRA(addressing) {\n return addressing(function() {\n illegalOpcode(\"RRA\");\n var val = data;\n var oldC = C ? 0x80 : 0;\n setC(val & 0x01);\t\t// bit 0 was set\n val = (val >>> 1) | oldC;\n data = val;\n // RRA is the same as ADC from here\n if (D) {\n var operand = data;\n var AL = (A & 15) + (operand & 15) + C;\n if (AL > 9) { AL += 6; }\n var AH = ((A >> 4) + (operand >> 4) + ((AL > 15)?1:0)) << 4;\n setZ((A + operand + C) & 255);\n setN(AH);\n setV(((A ^AH) & ~(A ^ operand)) & 128);\n if (AH > 0x9f) { AH += 0x60; }\n setC(AH > 255);\n A = (AH | (AL & 15)) & 255;\n } else {\n var add = A + data + C;\n setC(add > 255);\n setV(((A ^ add) & (data ^ add)) & 0x80);\n A = add & 255;\n setZ(A);\n setN(A);\n }\n });\n }\n\n function uSLO(addressing) {\n return addressing(function() {\n illegalOpcode(\"SLO\");\n var val = data;\n setC(val & 0x80);\t\t// bit 7 was set\n val = (val << 1) & 255;\n data = val;\n val = A | val;\n A = val;\n setZ(val);\n setN(val);\n });\n }\n\n function uSRE(addressing) {\n return addressing(function() {\n illegalOpcode(\"SRE\");\n var val = data;\n setC(val & 0x01);\t\t// bit 0 was set\n val = val >>> 1;\n data = val;\n val = (A ^ val) & 255;\n A = val;\n setZ(val);\n setN(val);\n });\n }\n\n\n // Miscellaneous operations\n\n function PHA() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() { pushToStack(A); },\n fetchNextOpcode\n ];\n }\n\n function PHP() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n function() { pushToStack(getStatusBits()); },\n fetchNextOpcode\n ];\n }\n\n function PLA() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() {\n A = popFromStack();\n setZ(A);\n setN(A);\n },\n fetchNextOpcode\n ];\n }\n\n function PLP() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { setStatusBits(popFromStack()); },\n fetchNextOpcode\n ];\n }\n\n function JSR() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n peekFromStack,\n function() { pushToStack((PC >>> 8) & 0xff); },\n function() { pushToStack(PC & 0xff); },\n fetchADH,\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function BRK() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate, // For debugging purposes, use operand as an arg for BRK!\n function() {\n if (self.debug) self.breakpoint(\"BRK \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits()); }, // set B flag\n function() { AD = bus.read(IRQ_VECTOR); },\n function() { AD |= bus.read(IRQ_VECTOR + 1) << 8; },\n function() { PC = AD; I = 1; fetchNextOpcode(); }\n ];\n }\n\n function IRQ() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate, // For debugging purposes, use operand as an arg for BRK!\n function() {\n if (self.debug) self.breakpoint(\"IRQ \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits() & ~0x10); }, // no BRK flag\n function() { AD = bus.read(IRQ_VECTOR); },\n function() { AD |= bus.read(IRQ_VECTOR + 1) << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function NMI() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchDataFromImmediate,\n function() {\n if (self.debug) self.breakpoint(\"NMI \" + data);\n pushToStack((PC >>> 8) & 0xff);\n },\n function() { pushToStack(PC & 0xff); },\n function() { pushToStack(getStatusBits() & ~0x10); }, // no BRK flag\n function() { AD = bus.read(NMI_VECTOR); },\n function() { AD |= bus.read(NMI_VECTOR + 1) << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function RTI() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { setStatusBits(popFromStack()); },\n function() { AD = popFromStack(); },\n function() { AD |= popFromStack() << 8; },\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function RTS() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchOpcodeAndDiscard,\n peekFromStack,\n function() { AD = popFromStack(); },\n function() { AD |= popFromStack() << 8; },\n function() { PC = AD; fetchDataFromImmediate(); },\n fetchNextOpcode\n ];\n }\n\n function JMP_ABS() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchADL,\n fetchADH,\n function() { PC = AD; fetchNextOpcode(); }\n ];\n }\n\n function JMP_IND() {\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchIAL, // IAH will be zero\n fetchIAH,\n fetchBALFromIA,\n function() {\n add1toIAL();\n fetchBAHFromIA();\n },\n function() { PC = BA; fetchNextOpcode(); }\n ];\n }\n\n function Bxx(reg, cond) {\n var branchTaken;\n if (reg === bZ) branchTaken = function() { return Z === cond; };\n else if (reg === bN) branchTaken = function() { return N === cond; };\n else if (reg === bC) branchTaken = function() { return C === cond; };\n else branchTaken = function() { return V === cond; };\n return [\n fetchOpcodeAndDecodeInstruction,\n fetchBranchOffset,\n function() {\n if (branchTaken()) {\n fetchOpcodeAndDiscard();\n addBranchOffsetToPCL();\n } else {\n fetchNextOpcode();\n }\n },\n function() {\n if(branchOffsetCrossAdjust) {\n fetchOpcodeAndDiscard();\n adjustPCHForBranchOffsetCross();\n } else {\n fetchNextOpcode();\n }\n },\n fetchNextOpcode\n ];\n }\n\n\n // Savestate -------------------------------------------\n\n this.saveState = function():MOS6502State {\n return {\n PC: (PC-1) & 0xffff,\n A: A, X: X, Y: Y, SP: SP,\n N: N, V: V, D: D, I: I, Z: Z, C: C,\n T: T, o: opcode, R: RDY?1:0,\n d: data, AD: AD, BA: BA, BC: BALCrossed?1:0, IA: IA,\n bo: branchOffset, boa: branchOffsetCrossAdjust\n };\n };\n\n this.loadState = function(state:MOS6502State) {\n PC = (state.PC+1) & 0xffff;\n A = state.A; X = state.X; Y = state.Y; SP = state.SP;\n N = state.N; V = state.V; D = state.D; I = state.I; Z = state.Z; C = state.C;\n T = state.T; opcode = state.o; RDY = !!state.R;\n data = state.d; AD = state.AD; BA = state.BA; BALCrossed = !!state.BC; IA = state.IA;\n branchOffset = state.bo; branchOffsetCrossAdjust = state.boa;\n instruction = opcode < 0 ? [ fetchOpcodeAndDecodeInstruction ] : instructions[opcode];\n };\n\n\n // Accessory methods\n\n this.toString = function() {\n return \"CPU \" +\n \" PC: \" + PC.toString(16) + \" op: \" + opcode.toString() + \" T: \" + T + \" data: \" + data + \"\\n\" +\n \" A: \" + A.toString(16) + \" X: \" + X.toString(16) + \" Y: \" + Y.toString(16) + \" SP: \" + SP.toString(16) + \" \" +\n \"N\" + N + \" \" + \"V\" + V + \" \" + \"D\" + D + \" \" + \"I\" + I + \" \" + \"Z\" + Z + \" \" + \"C\" + C + \" \";\n };\n\n this.breakpoint = function(mes) {\n //jt.Util.log(mes);\n if (this.trace) {\n var text = \"CPU Breakpoint! \" + (mes ? \"(\" + mes + \")\" : \"\") + \"\\n\\n\" + this.toString();\n //jt.Util.message(text);\n }\n };\n\n var cycletime = [\n 7, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 5, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 0, 6, 0, 6, 3, 3, 3, 3, 2, 0, 2, 0, 4, 4, 4, 4,\n 2, 6, 0, 0, 4, 4, 4, 4, 2, 5, 2, 0, 0, 5, 0, 0,\n 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 0, 4, 4, 4, 4,\n 2, 5, 0, 5, 4, 4, 4, 4, 2, 4, 2, 0, 4, 4, 4, 4,\n 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7,\n 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 0, 4, 4, 6, 6,\n 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7\n ];\n\n var extracycles = [\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1,\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1\n ];\n\n var insnlengths = [\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 3, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 0, 2, 0, 2, 2, 2, 2, 2, 1, 0, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 0, 2, 2, 2, 3, 1, 3, 1, 0, 0, 3, 0, 0,\n 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3,\n 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3\n ];\n\n var validinsns = [\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 0, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 3, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 0, 2, 0, 0, 2, 2, 2, 0, 1, 0, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 0, 3, 0, 0,\n 2, 2, 2, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0,\n 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0,\n 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0\n ];\n\n this.getOpcodeMetadata = function(opcode, address) {\n // TODO: more intelligent maximum cycles\n //var i = instructions[opcode];\n return {\n opcode:opcode,\n mnenomic:opcodes[opcode],\n minCycles:cycletime[opcode],\n maxCycles:cycletime[opcode] + extracycles[opcode],\n insnlength:insnlengths[opcode]\n };\n }\n\n // only call when isPCStable() is true\n this.setNMI = function() {\n instruction = NMI();\n T = 1;\n PC = (PC-1) & 0xffff;\n }\n this.setIRQ = function() {\n if (!I) { // only if not disabled\n instruction = IRQ();\n T = 1;\n PC = (PC-1) & 0xffff;\n }\n }\n\n this.getSP = function() { return SP; }\n this.getPC = function() { return (PC-1) & 0xffff; }\n this.getT = function() { return T; }\n this.isHalted = function() { return opcodes[opcode] == \"uKIL\"; }\n \n this.isPCStable = function() {\n return T == 0;\n }\n};\n\nexport interface MOS6502State {\nPC : number;\nSP : number;\nA : number;\nX : number;\nY : number;\nN : number;\nV : number;\nD : number;\nI : number;\nZ : number;\nC : number;\nT : number;\no : number;\nR : number;\nd : number;\nAD : number;\nBA : number;\nBC : number;\nIA : number;\nbo : number;\nboa : number;\n}\n\nexport enum MOS6502Interrupts { None=0, NMI=1, IRQ=2 };\n\nexport class MOS6502 implements CPU, ClockBased, SavesState, Interruptable {\n\n cpu = new _MOS6502();\n interruptType : MOS6502Interrupts = MOS6502Interrupts.None;\n \n connectMemoryBus(bus:Bus) {\n this.cpu.connectBus(bus);\n }\n advanceClock() {\n if (this.interruptType && this.isStable()) {\n switch (this.interruptType) {\n case MOS6502Interrupts.NMI: this.cpu.setNMI(); break;\n case MOS6502Interrupts.IRQ: this.cpu.setIRQ(); break;\n }\n this.interruptType = 0;\n }\n this.cpu.clockPulse();\n }\n advanceInsn() {\n do {\n this.advanceClock();\n } while (!this.isStable());\n }\n reset() {\n this.cpu.reset();\n this.interruptType = 0;\n }\n interrupt(itype:number) {\n if (this.interruptType != MOS6502Interrupts.NMI) {\n this.interruptType = itype;\n }\n }\n NMI() {\n this.interrupt(MOS6502Interrupts.NMI);\n }\n IRQ() {\n this.interrupt(MOS6502Interrupts.IRQ);\n }\n getSP() {\n return this.cpu.getSP();\n }\n getPC() {\n return this.cpu.getPC();\n }\n isHalted() {\n return this.cpu.isHalted();\n }\n saveState() {\n var s = this.cpu.saveState();\n s.it = this.interruptType;\n return s;\n }\n loadState(s) {\n this.cpu.loadState(s);\n this.interruptType = s.it;\n }\n isStable() : boolean {\n return this.cpu.isPCStable();\n }\n getOpcodeMetadata(op: number) {\n return this.cpu.getOpcodeMetadata(op);\n }\n}\n", "\nimport { CpuState, EmuState } from \"./baseplatform\";\nimport { CPU, SampledAudioSink, ProbeAll, NullProbe } from \"./devices\";\nimport { EmuHalt } from \"./emu\";\n\n// WASM Support\n// TODO: detangle from c64\n\nexport abstract class BaseWASMMachine {\n prefix : string;\n instance : WebAssembly.Instance;\n exports : any;\n sys : number;\n pixel_dest : Uint32Array;\n pixel_src : Uint32Array;\n stateptr : number;\n statearr : Uint8Array;\n cpustateptr : number;\n cpustatearr : Uint8Array;\n ctrlstateptr : number;\n ctrlstatearr : Uint8Array;\n cpu : CPU;\n romptr : number;\n romlen : number;\n romarr : Uint8Array;\n biosptr : number;\n biosarr : Uint8Array;\n audio : SampledAudioSink;\n audioarr : Float32Array;\n probe : ProbeAll;\n maxROMSize : number = 0x40000;\n\n abstract getCPUState() : CpuState;\n abstract saveState() : EmuState;\n abstract loadState(state: EmuState);\n\n constructor(prefix: string) {\n this.prefix = prefix;\n var self = this;\n this.cpu = {\n getPC: self.getPC.bind(self),\n getSP: self.getSP.bind(self),\n isStable: self.isStable.bind(self),\n reset: self.reset.bind(self),\n saveState: () => {\n return self.getCPUState();\n },\n loadState: () => {\n console.log(\"loadState not implemented\")\n },\n connectMemoryBus() {\n console.log(\"connectMemoryBus not implemented\")\n },\n }\n }\n getImports(wmod: WebAssembly.Module) {\n return {};\n }\n async fetchWASM() {\n var wasmResponse = await fetch('res/'+this.prefix+'.wasm');\n if (wasmResponse.status == 200 || (wasmResponse as any as Blob).size) {\n var wasmBinary = await wasmResponse.arrayBuffer();\n var wasmCompiled = await WebAssembly.compile(wasmBinary);\n var wasmResult = await WebAssembly.instantiate(wasmCompiled, this.getImports(wasmCompiled));\n this.instance = wasmResult;\n this.exports = wasmResult.exports;\n } else throw new Error('could not load WASM file');\n }\n allocateBIOS(biosBinary: Uint8Array) {\n this.biosptr = this.exports.malloc(biosBinary.byteLength);\n this.biosarr = new Uint8Array(this.exports.memory.buffer, this.biosptr, biosBinary.byteLength);\n}\n async fetchBIOS() {\n var biosResponse = await fetch('res/'+this.prefix+'.bios');\n if (biosResponse.status == 200 || (biosResponse as any as Blob).size) {\n var biosBinary = new Uint8Array(await biosResponse.arrayBuffer());\n this.allocateBIOS(biosBinary);\n this.loadBIOS(biosBinary);\n } else throw new Error('could not load BIOS file');\n }\n async initWASM() {\n // init machine instance\n this.sys = this.exports.machine_init(this.biosptr);\n let statesize = this.exports.machine_get_state_size();\n this.stateptr = this.exports.malloc(statesize);\n let ctrlstatesize = this.exports.machine_get_controls_state_size();\n this.ctrlstateptr = this.exports.malloc(ctrlstatesize);\n let cpustatesize = this.exports.machine_get_cpu_state_size();\n this.cpustateptr = this.exports.malloc(cpustatesize);\n this.romptr = this.exports.malloc(this.maxROMSize);\n // create state buffers\n // must do this after allocating memory (and everytime we grow memory?)\n this.statearr = new Uint8Array(this.exports.memory.buffer, this.stateptr, statesize);\n this.ctrlstatearr = new Uint8Array(this.exports.memory.buffer, this.ctrlstateptr, ctrlstatesize);\n this.cpustatearr = new Uint8Array(this.exports.memory.buffer, this.cpustateptr, cpustatesize);\n // create audio buffer\n let sampbufsize = 4096*4;\n this.audioarr = new Float32Array(this.exports.memory.buffer, this.exports.machine_get_sample_buffer(), sampbufsize);\n // create ROM buffer\n this.romarr = new Uint8Array(this.exports.memory.buffer, this.romptr, this.maxROMSize);\n // enable c64 joystick map to arrow keys (TODO)\n //this.exports.c64_set_joystick_type(this.sys, 1);\n console.log('machine_init', this.sys, statesize, ctrlstatesize, cpustatesize, sampbufsize);\n }\n async loadWASM() {\n await this.fetchWASM();\n this.exports.memory.grow(96); // TODO: need more when probing?\n await this.fetchBIOS();\n await this.initWASM();\n }\n getPC() : number {\n return this.exports.machine_cpu_get_pc(this.sys);\n }\n getSP() : number {\n return this.exports.machine_cpu_get_sp(this.sys);\n }\n isStable() : boolean {\n return this.exports.machine_cpu_is_stable(this.sys);\n }\n loadROM(rom: Uint8Array) {\n if (rom.length > this.maxROMSize) throw new EmuHalt(`Rom size too big: ${rom.length} bytes`);\n this.romarr.set(rom);\n this.romlen = rom.length;\n console.log('load rom', rom.length, 'bytes');\n this.reset(); // TODO?\n }\n // TODO: can't load after machine_init\n loadBIOS(srcArray: Uint8Array) {\n this.biosarr.set(srcArray);\n }\n reset() {\n this.exports.machine_reset(this.sys);\n }\n /* TODO: we don't need this because c64_exec does this?\n pollControls() {\n this.exports.machine_start_frame(this.sys);\n }\n */\n read(address: number) : number {\n return this.exports.machine_mem_read(this.sys, address & 0xffff);\n }\n readConst(address: number) : number {\n return this.exports.machine_mem_read(this.sys, address & 0xffff);\n }\n write(address: number, value: number) : void {\n this.exports.machine_mem_write(this.sys, address & 0xffff, value & 0xff);\n }\n getAudioParams() {\n return {sampleRate:44100, stereo:false};\n }\n videoOffsetBytes = 0;\n connectVideo(pixels:Uint32Array) : void {\n this.pixel_dest = pixels;\n var pixbuf = this.exports.machine_get_pixel_buffer(this.sys); // save video pointer\n console.log('connectVideo', pixbuf, pixels.length);\n this.pixel_src = new Uint32Array(this.exports.memory.buffer, pixbuf+this.videoOffsetBytes, pixels.length);\n }\n syncVideo() {\n if (this.exports.machine_update_video) {\n this.exports.machine_update_video(this.sys);\n }\n if (this.pixel_dest != null) {\n this.pixel_dest.set(this.pixel_src);\n }\n }\n // assume controls buffer is smaller than cpu buffer\n saveControlsState() : any {\n //console.log(1, this.romptr, this.romlen, this.ctrlstateptr, this.romarr.slice(0,4), this.ctrlstatearr.slice(0,4));\n this.exports.machine_save_controls_state(this.sys, this.ctrlstateptr);\n //console.log(2, this.romptr, this.romlen, this.ctrlstateptr, this.romarr.slice(0,4), this.ctrlstatearr.slice(0,4));\n return { controls:this.ctrlstatearr.slice(0) }\n }\n loadControlsState(state) : void {\n this.ctrlstatearr.set(state.controls);\n this.exports.machine_load_controls_state(this.sys, this.ctrlstateptr);\n }\n connectAudio(audio : SampledAudioSink) : void {\n this.audio = audio;\n }\n syncAudio() {\n if (this.audio != null) {\n var n = this.exports.machine_get_sample_count();\n for (var i=0; i address\n addr2symbol: AddrSymbolMap;\t// address -> symbol\n debuginfo: {}; // extra platform-specific debug info\n\n constructor(symbolmap: SymbolMap, debuginfo: {}) {\n this.symbolmap = symbolmap;\n this.debuginfo = debuginfo;\n this.addr2symbol = invertMap(symbolmap);\n //// TODO: shouldn't be necc.\n if (!this.addr2symbol[0x0]) this.addr2symbol[0x0] = '$00'; // needed for ...\n this.addr2symbol[0x10000] = '__END__'; // ... dump memory to work\n }\n}\n\ntype MemoryMapType = \"main\" | \"vram\";\ntype MemoryMap = { [type: string]: Segment[] };\n\nexport function isDebuggable(arg: any): arg is Debuggable {\n return arg && typeof arg.getDebugCategories === 'function';\n}\n\nexport interface Debuggable {\n getDebugCategories?(): string[];\n getDebugInfo?(category: string, state: EmuState): string;\n}\n\nexport interface Platform {\n start(): void | Promise;\n reset(): void;\n isRunning(): boolean;\n getToolForFilename(s: string): string;\n getDefaultExtensions(): string[];\n getPresets?(): Preset[];\n pause(): void;\n resume(): void;\n loadROM(title: string, rom: any, origin?: number); // TODO: Uint8Array\n loadBIOS?(title: string, rom: Uint8Array);\n getROMExtension?(rom: FileData): string;\n\n loadState?(state: EmuState): void;\n saveState?(): EmuState;\n loadControlsState?(state: EmuControlsState): void;\n saveControlsState?(): EmuControlsState;\n\n inspect?(ident: string): string;\n disassemble?(addr: number, readfn: (addr: number) => number): DisasmLine;\n readAddress?(addr: number): number;\n readVRAMAddress?(addr: number): number;\n\n setFrameRate?(fps: number): void;\n getFrameRate?(): number;\n\n setupDebug?(callback: BreakpointCallback): void;\n clearDebug?(): void;\n step?(): void;\n runToVsync?(): void;\n runToPC?(pc: number[]): void;\n runUntilReturn?(): void;\n stepBack?(): void;\n runEval?(evalfunc: DebugEvalCondition): void;\n runToFrameClock?(clock: number): void;\n stepOver?(): void;\n restartAtPC?(pc: number): boolean;\n\n getOpcodeMetadata?(opcode: number, offset: number): OpcodeMetadata; //TODO\n getSP?(): number;\n getPC?(): number;\n getOriginPC?(): number;\n newCodeAnalyzer?(): CodeAnalyzer;\n\n getPlatformName?(): string;\n getMemoryMap?(): MemoryMap;\n\n setRecorder?(recorder: EmuRecorder): void;\n advance?(novideo?: boolean): number;\n advanceFrameClock?(trap: DebugCondition, step: number): number;\n showHelp?(): string;\n resize?(): void;\n\n getRasterScanline?(): number;\n getRasterLineClock?(): number;\n setBreakpoint?(id: string, cond: DebugCondition);\n clearBreakpoint?(id: string);\n hasBreakpoint?(id: string): boolean;\n getCPUState?(): CpuState;\n\n debugSymbols?: DebugSymbols;\n getDebugTree?(): {};\n\n startProbing?(): ProbeRecorder;\n stopProbing?(): void;\n\n isBlocked?(): boolean; // is blocked, halted, or waiting for input?\n\n readFile?(path: string): FileData;\n writeFile?(path: string, data: FileData): boolean;\n sourceFileFetch?: (path: string) => FileData;\n\n getDownloadFile?(): { extension: string, blob: Blob };\n getDebugSymbolFile?(): { extension: string, blob: Blob };\n}\n\nexport interface Preset {\n id: string;\n name: string;\n chapter?: number;\n title?: string;\n category?: string;\n}\n\nexport interface MemoryBus {\n read: (address: number) => number;\n write: (address: number, value: number) => void;\n contend?: (address: number, cycles: number) => number;\n isContended?: (address: number) => boolean;\n}\n\nexport type DebugCondition = () => boolean;\nexport type DebugEvalCondition = (c: CpuState) => boolean;\nexport type BreakpointCallback = (s: EmuState, msg?: string) => void;\n// for composite breakpoints w/ single debug function\nexport class BreakpointList {\n id2bp: { [id: string]: Breakpoint } = {};\n getDebugCondition(): DebugCondition {\n if (Object.keys(this.id2bp).length == 0) {\n return null; // no breakpoints\n } else {\n // evaluate all breakpoints\n return () => {\n var result = false;\n for (var id in this.id2bp)\n if (this.id2bp[id].cond())\n result = true;\n return result;\n };\n }\n }\n}\nexport interface Breakpoint {\n cond: DebugCondition;\n};\n\nexport interface EmuRecorder {\n frameRequested(): boolean;\n recordFrame(state: EmuState);\n}\n\n/////\n\nexport abstract class BasePlatform {\n recorder: EmuRecorder = null;\n debugSymbols: DebugSymbols;\n internalFiles: { [path: string]: FileData } = {};\n\n abstract loadState(state: EmuState): void;\n abstract saveState(): EmuState;\n abstract pause(): void;\n abstract resume(): void;\n abstract advance(novideo?: boolean): number;\n\n setRecorder(recorder: EmuRecorder): void {\n this.recorder = recorder;\n }\n updateRecorder() {\n // are we recording and do we need to save a frame?\n if (this.recorder && (this).isRunning() && this.recorder.frameRequested()) {\n this.recorder.recordFrame(this.saveState());\n }\n }\n inspect(sym: string): string {\n return inspectSymbol((this as any) as Platform, sym);\n }\n getDebugTree(): {} {\n var o: any = {};\n o.state = this.saveState();\n if (this.debugSymbols?.debuginfo) o.debuginfo = this.debugSymbols.debuginfo;\n return o;\n }\n readFile(path: string): FileData {\n return this.internalFiles[path];\n }\n writeFile(path: string, data: FileData): boolean {\n this.internalFiles[path] = data;\n return true;\n }\n}\n\nexport abstract class BaseDebugPlatform extends BasePlatform {\n onBreakpointHit: BreakpointCallback;\n debugCallback: DebugCondition;\n debugSavedState: EmuState = null;\n debugBreakState: EmuState = null;\n debugTargetClock: number = 0;\n debugClock: number = 0;\n breakpoints: BreakpointList = new BreakpointList();\n frameCount: number = 0;\n\n abstract getCPUState(): CpuState;\n\n setBreakpoint(id: string, cond: DebugCondition) {\n if (cond) {\n this.breakpoints.id2bp[id] = { cond: cond };\n this.restartDebugging();\n } else {\n this.clearBreakpoint(id);\n }\n }\n clearBreakpoint(id: string) {\n delete this.breakpoints.id2bp[id];\n }\n hasBreakpoint(id: string) {\n return this.breakpoints.id2bp[id] != null;\n }\n getDebugCallback(): DebugCondition {\n return this.breakpoints.getDebugCondition();\n }\n setupDebug(callback: BreakpointCallback): void {\n this.onBreakpointHit = callback;\n }\n clearDebug() {\n if (this.debugBreakState != null && this.debugSavedState != null) {\n this.loadState(this.debugSavedState);\n }\n this.debugSavedState = null;\n this.debugBreakState = null;\n this.debugTargetClock = -1;\n this.debugClock = 0;\n this.onBreakpointHit = null;\n this.clearBreakpoint('debug');\n this.frameCount = 0;\n }\n setDebugCondition(debugCond: DebugCondition) {\n this.setBreakpoint('debug', debugCond);\n }\n resetDebugging() {\n if (this.debugSavedState) {\n this.loadState(this.debugSavedState);\n } else {\n this.debugSavedState = this.saveState();\n }\n this.debugClock = 0;\n this.debugCallback = this.getDebugCallback();\n this.debugBreakState = null;\n }\n restartDebugging() {\n this.resetDebugging();\n this.resume();\n }\n preFrame() {\n // save state before frame, to record any inputs that happened pre-frame\n if (this.debugCallback && !this.debugBreakState) {\n // save state every frame and rewind debug clocks\n this.debugSavedState = this.saveState();\n this.debugTargetClock -= this.debugClock;\n this.debugClock = 0;\n }\n }\n postFrame() {\n // reload debug state at end of frame after breakpoint\n if (this.debugCallback && this.debugBreakState) {\n this.loadState(this.debugBreakState);\n }\n this.frameCount++;\n }\n pollControls() {\n }\n nextFrame(novideo: boolean): number {\n this.pollControls();\n this.updateRecorder();\n this.preFrame();\n var steps = this.advance(novideo);\n this.postFrame();\n return steps;\n }\n // default debugging\n abstract getSP(): number;\n abstract getPC(): number;\n abstract isStable(): boolean;\n\n evalDebugCondition() {\n if (this.debugCallback && !this.debugBreakState) {\n this.debugCallback();\n }\n }\n wasBreakpointHit(): boolean {\n return this.debugBreakState != null;\n }\n breakpointHit(targetClock: number, reason?: string) {\n console.log(this.debugTargetClock, targetClock, this.debugClock, this.isStable());\n this.debugTargetClock = targetClock;\n this.debugBreakState = this.saveState();\n console.log(\"Breakpoint at clk\", this.debugClock, \"PC\", this.debugBreakState.c.PC.toString(16));\n this.pause();\n if (this.onBreakpointHit) {\n this.onBreakpointHit(this.debugBreakState, reason);\n }\n }\n haltAndCatchFire(reason: string) {\n this.breakpointHit(this.debugClock, reason);\n }\n runEval(evalfunc: DebugEvalCondition) {\n this.setDebugCondition(() => {\n if (++this.debugClock >= this.debugTargetClock && this.isStable()) {\n var cpuState = this.getCPUState();\n if (evalfunc(cpuState)) {\n this.breakpointHit(this.debugClock);\n return true;\n } else {\n return false;\n }\n }\n });\n }\n runToPC(pc: number[]) {\n this.debugTargetClock++;\n const pcs = new Set(pc);\n this.runEval((c) => {\n return pcs.has(c.PC);\n });\n }\n runUntilReturn() {\n var SP0 = this.getSP();\n this.runEval((c: CpuState): boolean => {\n return c.SP > SP0; // TODO: check for RTS/RET opcode\n });\n }\n runToFrameClock(clock: number): void {\n this.restartDebugging();\n this.debugTargetClock = clock;\n this.runEval((): boolean => { return true; });\n }\n step() {\n this.runToFrameClock(this.debugClock + 1);\n }\n stepBack() {\n var prevState;\n var prevClock;\n var clock0 = this.debugTargetClock;\n this.restartDebugging();\n this.debugTargetClock = clock0 - 25; // TODO: depends on CPU\n this.runEval((c: CpuState): boolean => {\n if (this.debugClock < clock0) {\n prevState = this.saveState();\n prevClock = this.debugClock;\n return false;\n } else {\n if (prevState) {\n this.loadState(prevState);\n this.debugClock = prevClock;\n }\n return true;\n }\n });\n }\n runToVsync() {\n this.restartDebugging();\n var frame0 = this.frameCount;\n this.runEval((): boolean => {\n return this.frameCount > frame0;\n });\n }\n}\n\nexport function inspectSymbol(platform: Platform, sym: string): string {\n if (!platform.debugSymbols) return;\n var symmap = platform.debugSymbols.symbolmap;\n var addr2sym = platform.debugSymbols.addr2symbol;\n if (!symmap || !platform.readAddress) return null;\n var addr = symmap[\"_\" + sym] || symmap[sym]; // look for C or asm symbol\n if (!(typeof addr == 'number')) return null;\n var b = platform.readAddress(addr);\n // don't show 2 bytes if there's a symbol at the next address\n if (addr2sym && addr2sym[addr + 1] != null) {\n return \"$\" + hex(addr, 4) + \" = $\" + hex(b, 2) + \" (\" + b + \" decimal)\"; // unsigned\n } else {\n let b2 = platform.readAddress(addr + 1);\n let w = b | (b2 << 8);\n return \"$\" + hex(addr, 4) + \" = $\" + hex(b, 2) + \" $\" + hex(b2, 2) + \" (\" + ((w << 16) >> 16) + \" decimal)\"; // signed\n }\n}\n\n////// 6502\n\nexport function getToolForFilename_6502(fn: string): string {\n if (fn.endsWith(\"-llvm.c\")) return \"remote:llvm-mos\";\n if (fn.endsWith(\".c\")) return \"cc65\";\n if (fn.endsWith(\".h\")) return \"cc65\";\n if (fn.endsWith(\".s\")) return \"ca65\";\n if (fn.endsWith(\".ca65\")) return \"ca65\";\n if (fn.endsWith(\".dasm\")) return \"dasm\";\n if (fn.endsWith(\".acme\")) return \"acme\";\n if (fn.endsWith(\".xa\")) return \"xa\";\n if (fn.endsWith(\".wiz\")) return \"wiz\";\n if (fn.endsWith(\".ecs\")) return \"ecs\";\n if (fn.endsWith(\".cpp\")) return \"oscar64\";\n if (fn.endsWith(\".cc\")) return \"oscar64\";\n if (fn.endsWith(\".o64\")) return \"oscar64\";\n return \"dasm\"; // .a\n}\n\n// TODO: can merge w/ Z80?\nexport abstract class Base6502Platform extends BaseDebugPlatform {\n\n // some platforms store their PC one byte before or after the first opcode\n // so we correct when saving and loading from state\n debugPCDelta = -1;\n fixPC(c) { c.PC = (c.PC + this.debugPCDelta) & 0xffff; return c; }\n unfixPC(c) { c.PC = (c.PC - this.debugPCDelta) & 0xffff; return c; }\n getSP() { return this.getCPUState().SP };\n getPC() { return this.getCPUState().PC };\n isStable() { return !this.getCPUState()['T']; }\n abstract readAddress(addr: number): number;\n\n newCPU(membus: MemoryBus) {\n var cpu = new _MOS6502();\n cpu.connectBus(membus);\n return cpu;\n }\n\n getOpcodeMetadata(opcode, offset) {\n return getOpcodeMetadata_6502(opcode, offset);\n }\n\n getOriginPC(): number {\n return (this.readAddress(0xfffc) | (this.readAddress(0xfffd) << 8)) & 0xffff;\n }\n\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassemble6502(pc, read(pc), read(pc + 1), read(pc + 2));\n }\n getToolForFilename = getToolForFilename_6502;\n getDefaultExtensions() { return [\".c\", \".cpp\", \".o64\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; };\n\n getDebugCategories() {\n return ['CPU', 'ZPRAM', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6502(state.c);\n case 'ZPRAM': return dumpRAM(state.b || state.ram, 0x0, 0x100);\n case 'Stack': return dumpStackToString(this, state.b || state.ram, 0x100, 0x1ff, 0x100 + state.c.SP, 0x20);\n }\n }\n}\n\nexport function cpuStateToLongString_6502(c): string {\n function decodeFlags(c) {\n var s = \"\";\n s += c.N ? \" N\" : \" -\";\n s += c.V ? \" V\" : \" -\";\n s += c.D ? \" D\" : \" -\";\n s += c.Z ? \" Z\" : \" -\";\n s += c.C ? \" C\" : \" -\";\n s += c.I ? \" I\" : \" -\";\n return s;\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c) + \"\\n\"\n + \" A \" + hex(c.A) + \" \" + (c.R ? \"\" : \"BUSY\") + \"\\n\"\n + \" X \" + hex(c.X) + \"\\n\"\n + \" Y \" + hex(c.Y) + \" \" + \"SP \" + hex(c.SP) + \"\\n\";\n}\n\nvar OPMETA_6502 = {\n cycletime: [\n 7, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 6, 6, 0, 8, 3, 3, 5, 5, 4, 2, 2, 2, 5, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 0, 6, 0, 6, 3, 3, 3, 3, 2, 0, 2, 0, 4, 4, 4, 4, 2, 6, 0, 0, 4, 4, 4, 4, 2, 5, 2, 0, 0, 5, 0, 0, 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 0, 4, 4, 4, 4, 2, 5, 0, 5, 4, 4, 4, 4, 2, 4, 2, 0, 4, 4, 4, 4, 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 3, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7, 2, 6, 0, 8, 3, 3, 5, 5, 2, 2, 2, 0, 4, 4, 6, 6, 2, 5, 0, 8, 4, 4, 6, 6, 2, 4, 0, 7, 4, 4, 7, 7\n ],\n extracycles: [\n 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1\n ],\n insnlengths: [\n 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 3, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 0, 2, 0, 2, 2, 2, 2, 2, 1, 0, 1, 0, 3, 3, 3, 3, 2, 2, 0, 0, 2, 2, 2, 3, 1, 3, 1, 0, 0, 3, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, 3, 0, 3, 3, 3, 3, 3\n ],\n validinsns: [\n 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 0, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 3, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 1, 2, 0, 0, 0, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 0, 2, 0, 0, 2, 2, 2, 0, 1, 0, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 0, 3, 0, 0, 2, 2, 2, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0, 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, 2, 2, 0, 0, 0, 2, 2, 0, 1, 3, 0, 0, 0, 3, 3, 0\n ],\n}\n\nexport function getOpcodeMetadata_6502(opcode, address) {\n // TODO: more intelligent maximum cycles\n // TODO: must always be new object, b/c we might modify it\n return {\n opcode: opcode,\n minCycles: OPMETA_6502.cycletime[opcode],\n maxCycles: OPMETA_6502.cycletime[opcode] + OPMETA_6502.extracycles[opcode],\n insnlength: OPMETA_6502.insnlengths[opcode]\n };\n}\n\n////// Z80\n\nexport function cpuStateToLongString_Z80(c) {\n function decodeFlags(flags) {\n return printFlags(flags, [\"S\", \"Z\", , \"H\", , \"V\", \"N\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.AF) + \" \" + (c.iff1 ? \"I\" : \"-\") + (c.iff2 ? \"I\" : \"-\") + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \" IR \" + hex(c.IR, 4) + \"\\n\"\n + \"IX \" + hex(c.IX, 4) + \" IY \" + hex(c.IY, 4) + \"\\n\"\n + \"AF \" + hex(c.AF, 4) + \" BC \" + hex(c.BC, 4) + \"\\n\"\n + \"DE \" + hex(c.DE, 4) + \" HL \" + hex(c.HL, 4) + \"\\n\"\n ;\n}\n\nexport function cpuStateToLongString_SM83(c) {\n function decodeFlags(af) {\n return printFlags(af, [\"Z\", \"N\", \"H\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.AF >> 4) + \" \" + (c.ime ? \"I\" : \"-\") + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \"\\n\"\n + \"AF \" + hex(c.AF, 4) + \" BC \" + hex(c.BC, 4) + \"\\n\"\n + \"DE \" + hex(c.DE, 4) + \" HL \" + hex(c.HL, 4) + \"\\n\"\n ;\n}\n\nexport abstract class BaseZ80Platform extends BaseDebugPlatform {\n\n _cpu;\n waitCycles: number = 0;\n\n newCPU(membus: MemoryBus, iobus: MemoryBus) {\n this._cpu = new Z80();\n this._cpu.connectMemoryBus(membus);\n this._cpu.connectIOBus(iobus);\n return this._cpu;\n }\n\n getPC() { return this._cpu.getPC(); }\n getSP() { return this._cpu.getSP(); }\n isStable() { return true; }\n\n // TODO: refactor other parts into here\n runCPU(cpu, cycles: number): number {\n this._cpu = cpu; // TODO?\n this.waitCycles = 0; // TODO: needs to spill over betwenn calls\n if (this.wasBreakpointHit())\n return 0;\n var debugCond = this.getDebugCallback();\n var n = 0;\n this.waitCycles += cycles;\n while (this.waitCycles > 0) {\n if (debugCond && debugCond()) {\n debugCond = null;\n break;\n }\n var cyc = cpu.advanceInsn();\n n += cyc;\n this.waitCycles -= cyc;\n }\n return n;\n }\n\n getToolForFilename = getToolForFilename_z80;\n getDefaultExtensions() { return [\".c\", \".ns\", \".s\", \".scc\", \".sgb\", \".z\", \".wiz\"]; };\n // TODO: Z80 opcode metadata\n //this.getOpcodeMetadata = function() { }\n\n getDebugCategories() {\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_Z80(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n console.log(sp, start, end);\n return dumpStackToString(this, [], start, end, sp, 0xcd);\n }\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassembleZ80(pc, read(pc), read(pc + 1), read(pc + 2), read(pc + 3));\n }\n}\n\nexport function getToolForFilename_z80(fn: string): string {\n if (fn.endsWith(\".c\")) return \"sdcc\";\n if (fn.endsWith(\".h\")) return \"sdcc\";\n if (fn.endsWith(\".s\")) return \"sdasz80\";\n if (fn.endsWith(\".sgb\")) return \"sdasgb\";\n if (fn.endsWith(\".ns\")) return \"naken\";\n if (fn.endsWith(\".scc\")) return \"sccz80\";\n if (fn.endsWith(\".z\")) return \"zmac\";\n if (fn.endsWith(\".wiz\")) return \"wiz\";\n return \"zmac\";\n}\n\n////// 6809\n\nexport function cpuStateToLongString_6809(c) {\n function decodeFlags(flags) {\n return printFlags(flags, [\"E\", \"F\", \"H\", \"I\", \"N\", \"Z\", \"V\", \"C\"], true);\n }\n return \"PC \" + hex(c.PC, 4) + \" \" + decodeFlags(c.CC) + \"\\n\"\n + \"SP \" + hex(c.SP, 4) + \"\\n\"\n + \"DP \" + hex(c.DP, 2) + \"\\n\"\n + \" A \" + hex(c.A, 2) + \"\\n\"\n + \" B \" + hex(c.B, 2) + \"\\n\"\n + \" X \" + hex(c.X, 4) + \"\\n\"\n + \" Y \" + hex(c.Y, 4) + \"\\n\"\n + \" U \" + hex(c.U, 4) + \"\\n\"\n ;\n}\n\nexport function getToolForFilename_6809(fn: string): string {\n if (fn.endsWith(\".c\")) return \"cmoc\";\n if (fn.endsWith(\".h\")) return \"cmoc\";\n if (fn.endsWith(\".xasm\")) return \"xasm6809\";\n if (fn.endsWith(\".lwasm\")) return \"lwasm\";\n return \"cmoc\";\n}\n\nexport abstract class Base6809Platform extends BaseZ80Platform {\n\n newCPU(membus: MemoryBus) {\n var cpu = Object.create(CPU6809());\n cpu.init(membus.write, membus.read, 0);\n return cpu;\n }\n\n cpuStateToLongString(c: CpuState) {\n return cpuStateToLongString_6809(c);\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n // TODO: don't create new CPU\n return Object.create(CPU6809()).disasm(read(pc), read(pc + 1), read(pc + 2), read(pc + 3), read(pc + 4), pc);\n }\n getDefaultExtensions() { return [\".c\", \".lwasm\", \".xasm\"]; };\n //this.getOpcodeMetadata = function() { }\n getToolForFilename = getToolForFilename_6809;\n getDebugCategories() {\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6809(state.c);\n default: return super.getDebugInfo(category, state);\n }\n }\n}\n\n\n//TODO: how to get stack_end?\nexport function dumpStackToString(platform: Platform, mem: Uint8Array | number[], start: number, end: number, sp: number, jsrop: number, bigendian?: boolean): string {\n var s = \"\";\n var nraw = 0;\n //s = dumpRAM(mem.slice(start,start+end+1), start, end-start+1);\n function read(addr) {\n if (addr < mem.length) return mem[addr];\n else return platform.readAddress(addr);\n }\n while (sp < end) {\n sp++;\n // see if there's a JSR on the stack here\n // TODO: make work with roms and memory maps\n var addr = read(sp) + read(sp + 1) * 256;\n if (bigendian) { addr = ((addr & 0xff) << 8) | ((addr & 0xff00) >> 8) }\n var jsrofs = jsrop == 0x20 ? -2 : -3; // 6502 vs Z80\n var opcode = read(addr + jsrofs); // might be out of bounds\n if (opcode == jsrop) { // JSR\n s += \"\\n$\" + hex(sp) + \": \";\n s += hex(addr, 4) + \" \" + lookupSymbol(platform, addr, true);\n sp++;\n nraw = 0;\n } else {\n if (nraw == 0)\n s += \"\\n$\" + hex(sp) + \": \";\n s += hex(read(sp)) + \" \";\n if (++nraw == 8) nraw = 0;\n }\n }\n return s + \"\\n\";\n}\n\n// TODO: slow, funky, uses global\nexport function lookupSymbol(platform: Platform, addr: number, extra: boolean) {\n var start = addr;\n var addr2symbol = platform.debugSymbols && platform.debugSymbols.addr2symbol;\n while (addr2symbol && addr >= 0) {\n var sym = addr2symbol[addr];\n if (sym) { // return first symbol we find\n var sym = addr2symbol[addr];\n return extra ? (sym + \" + $\" + hex(start - addr)) : sym;\n }\n if (!extra) break;\n addr--;\n }\n return \"\";\n}\n\n/// new Machine platform adapters\n\nexport interface Machine extends Bus, Resettable, FrameBased, AcceptsROM, HasCPU, SavesState, SavesInputState {\n}\n\nexport function hasVideo(arg: any): arg is VideoSource {\n return typeof arg.connectVideo === 'function';\n}\nexport function hasAudio(arg: any): arg is SampledAudioSource {\n return typeof arg.connectAudio === 'function';\n}\nexport function hasKeyInput(arg: any): arg is AcceptsKeyInput {\n return typeof arg.setKeyInput === 'function';\n}\nexport function hasJoyInput(arg: any): arg is AcceptsJoyInput {\n return typeof arg.setJoyInput === 'function';\n}\nexport function hasPaddleInput(arg: any): arg is AcceptsPaddleInput {\n return typeof arg.setPaddleInput === 'function';\n}\nexport function isRaster(arg: any): arg is RasterFrameBased {\n return typeof arg.getRasterY === 'function';\n}\nexport function hasProbe(arg: any): arg is Probeable {\n return typeof arg.connectProbe == 'function';\n}\nexport function hasBIOS(arg: any): arg is AcceptsBIOS {\n return typeof arg.loadBIOS == 'function';\n}\nexport function hasSerialIO(arg: any): arg is HasSerialIO {\n return typeof arg.connectSerialIO === 'function';\n}\n\nexport abstract class BaseMachinePlatform extends BaseDebugPlatform implements Platform {\n machine: T;\n mainElement: HTMLElement;\n timer: AnimationTimer;\n video: RasterVideo;\n audio: SampledAudio;\n poller: ControllerPoller;\n serialIOInterface: SerialIOInterface;\n serialVisualizer: SerialIOVisualizer;\n\n probeRecorder: ProbeRecorder;\n startProbing;\n stopProbing;\n\n abstract newMachine(): T;\n abstract getToolForFilename(s: string): string;\n abstract getDefaultExtensions(): string[];\n abstract getPresets(): Preset[];\n\n constructor(mainElement: HTMLElement) {\n super();\n this.mainElement = mainElement;\n }\n\n reset() {\n this.machine.reset();\n if (this.serialVisualizer != null) this.serialVisualizer.reset();\n }\n loadState(s) { this.machine.loadState(s); }\n saveState() { return this.machine.saveState(); }\n getSP() { return this.machine.cpu.getSP(); }\n getPC() { return this.machine.cpu.getPC(); }\n isStable() { return this.machine.cpu.isStable(); }\n getCPUState() { return this.machine.cpu.saveState(); }\n loadControlsState(s) { this.machine.loadControlsState(s); }\n saveControlsState() { return this.machine.saveControlsState(); }\n\n async start() {\n this.machine = this.newMachine();\n const m = this.machine;\n // block on WASM loading\n if (m instanceof BaseWASMMachine) {\n await m.loadWASM();\n }\n var videoFrequency;\n if (hasVideo(m)) {\n var vp = m.getVideoParams();\n this.video = new RasterVideo(this.mainElement, vp.width, vp.height,\n {\n overscan: !!vp.overscan,\n rotate: vp.rotate | 0,\n aspect: vp.aspect\n });\n this.video.create();\n m.connectVideo(this.video.getFrameData());\n // TODO: support keyboard w/o video?\n if (hasKeyInput(m)) {\n this.video.setKeyboardEvents(m.setKeyInput.bind(m));\n this.poller = new ControllerPoller(m.setKeyInput.bind(m));\n }\n videoFrequency = vp.videoFrequency;\n }\n this.timer = new AnimationTimer(videoFrequency || 60, this.nextFrame.bind(this));\n if (hasAudio(m)) {\n var ap = m.getAudioParams();\n this.audio = new SampledAudio(ap.sampleRate);\n this.audio.start();\n m.connectAudio(this.audio);\n }\n if (hasPaddleInput(m)) {\n this.video.setupMouseEvents();\n }\n if (hasProbe(m)) {\n this.probeRecorder = new ProbeRecorder(m);\n this.startProbing = () => {\n m.connectProbe(this.probeRecorder);\n return this.probeRecorder;\n };\n this.stopProbing = () => {\n m.connectProbe(null);\n };\n }\n if (hasBIOS(m)) {\n this.loadBIOS = (title, data) => {\n m.loadBIOS(data, title);\n };\n }\n if (hasSerialIO(m)) {\n if (this.serialIOInterface == null) {\n this.serialVisualizer = new SerialIOVisualizer(this.mainElement, m);\n } else {\n m.connectSerialIO(this.serialIOInterface);\n }\n }\n }\n\n loadROM(title, data, origin?: number) {\n this.machine.loadROM(data, title, origin);\n this.reset();\n }\n\n loadBIOS: (title, data) => void; // only set if hasBIOS() is true\n\n pollControls() {\n this.poller && this.poller.poll();\n if (hasPaddleInput(this.machine)) {\n this.machine.setPaddleInput(0, this.video.paddle_x);\n this.machine.setPaddleInput(1, this.video.paddle_y);\n if (this.machine.setPaddleButton && this.video.paddle_buttons != null) {\n this.machine.setPaddleButton(0, this.video.paddle_buttons[0]);\n this.machine.setPaddleButton(1, this.video.paddle_buttons[1]);\n this.machine.setPaddleButton(2, this.video.paddle_buttons[2]);\n }\n }\n // TODO: put into interface\n if (this.machine['pollControls']) {\n this.machine['pollControls']();\n }\n }\n\n advance(novideo: boolean) {\n let trap = this.getDebugCallback();\n try {\n var steps = this.machine.advanceFrame(trap);\n return steps;\n } finally {\n // in case EmuHalt is thrown...\n if (!novideo && this.video) {\n this.video.updateFrame();\n this.updateVideoDebugger();\n }\n if (!novideo && this.serialVisualizer) {\n this.serialVisualizer.refresh();\n }\n }\n }\n\n updateVideoDebugger() {\n if (!this.isRunning() && isRaster(this.machine) && this.machine.getRasterCanvasPosition) {\n const { x, y } = this.machine.getRasterCanvasPosition();\n if (x >= 0 || y >= 0) {\n const ctx = this.video?.getContext();\n if (ctx) {\n drawCrosshair(ctx, x, y, 1);\n }\n }\n }\n }\n\n advanceFrameClock(trap, step) {\n if (!(step > 0)) return;\n if (this.machine instanceof BaseWASMMachine) {\n return this.machine.advanceFrameClock(trap, step);\n } else {\n return this.machine.advanceFrame(() => {\n return --step <= 0;\n });\n }\n }\n\n isRunning() {\n return this.timer && this.timer.isRunning();\n }\n\n resume() {\n this.timer.start();\n this.audio && this.audio.start();\n this.poller && this.poller.start();\n }\n\n pause() {\n this.timer.stop();\n this.audio && this.audio.stop();\n this.poller && this.poller.stop();\n }\n\n // so probe views stick around TODO: must be a better way?\n runToVsync() {\n this.restartDebugging();\n var flag = false;\n this.runEval((): boolean => {\n if (this.getRasterScanline() > 0) flag = true;\n else return flag;\n });\n }\n\n // TODO: reset target clock counter\n getRasterScanline() {\n return isRaster(this.machine) && this.machine.getRasterY ? this.machine.getRasterY() : -1;\n }\n getRasterLineClock() {\n return isRaster(this.machine) && this.machine.getRasterX ? this.machine.getRasterX() : -1;\n }\n\n readAddress(addr: number): number {\n return this.machine.read(addr);\n }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n }\n getDebugInfo(category: string, state: EmuState): string {\n return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n}\n\n// TODO: move debug info into CPU?\n\nexport abstract class Base6502MachinePlatform extends BaseMachinePlatform {\n\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getToolForFilename(fn) { return getToolForFilename_6502(fn); }\n getDefaultExtensions() { return [\".c\", \".cpp\", \".o64\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; }\n\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassemble6502(pc, read(pc), read(pc + 1), read(pc + 2));\n }\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'ZPRAM', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6502(state.c);\n case 'ZPRAM': return dumpRAM(state.b || state.ram, 0x0, 0x100);\n case 'Stack': return dumpStackToString(this, state.b || state.ram, 0x100, 0x1ff, 0x100 + state.c.SP, 0x20);\n default: return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n }\n}\n\nexport abstract class BaseZ80MachinePlatform extends BaseMachinePlatform {\n\n //getOpcodeMetadata = getOpcodeMetadata_z80;\n getToolForFilename = getToolForFilename_z80;\n getDefaultExtensions() { return [\".c\", \".ns\", \".s\", \".scc\", \".sgb\", \".z\", \".wiz\"]; }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_Z80(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n return dumpStackToString(this, [], start, end, sp, 0xcd);\n }\n default: return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassembleZ80(pc, read(pc), read(pc + 1), read(pc + 2), read(pc + 3));\n }\n\n}\n\nexport abstract class Base6809MachinePlatform extends BaseMachinePlatform {\n\n getToolForFilename = getToolForFilename_6809;\n getDefaultExtensions() { return [\".c\", \".lwasm\", \".xasm\"]; }\n\n getDebugCategories() {\n if (isDebuggable(this.machine))\n return this.machine.getDebugCategories();\n else\n return ['CPU', 'Stack'];\n }\n getDebugInfo(category: string, state: EmuState): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_6809(state.c);\n case 'Stack': {\n var sp = (state.c.SP - 1) & 0xffff;\n var start = sp & 0xff00;\n var end = start + 0xff;\n if (sp == 0) sp = 0x10000;\n return dumpStackToString(this, [], start, end, sp, 0x17, true);\n }\n default: return super.getDebugInfo(category, state);\n }\n }\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n // TODO: don't create new CPU\n return Object.create(CPU6809()).disasm(read(pc), read(pc + 1), read(pc + 2), read(pc + 3), read(pc + 4), pc);\n }\n}\n\n///\n\nclass SerialIOVisualizer {\n\n textarea: HTMLTextAreaElement;\n //vlist: VirtualTextScroller;\n device: HasSerialIO;\n lastOutCount = -1;\n lastInCount = -1;\n\n constructor(parentElement: HTMLElement, device: HasSerialIO) {\n this.device = device;\n this.textarea = document.createElement(\"textarea\");\n this.textarea.classList.add('transcript');\n this.textarea.classList.add('transcript-style-2');\n this.textarea.style.display = 'none';\n parentElement.appendChild(this.textarea);\n /*\n this.vlist = new VirtualTextScroller(parentElement);\n this.vlist.create(parentElement, 1024, this.getMemoryLineAt.bind(this));\n this.vlist.maindiv.style.height = '8em';\n this.vlist.maindiv.style.overflow = 'clip';\n */\n }\n reset() {\n this.lastOutCount = 0;\n this.lastInCount = 0;\n this.textarea.style.display = 'none';\n }\n refresh() {\n var lastop = '';\n if (this.device.serialOut.length != this.lastOutCount) {\n var s = '';\n for (var ev of this.device.serialOut) {\n if (lastop != ev.op) {\n if (s != '') s += '\\n';\n if (ev.op === 'read') s += '<< ';\n else if (ev.op === 'write') s += '>> ';\n lastop = ev.op;\n }\n if (ev.value == 10) { s += '\\u21b5'; lastop = ''; }\n else { s += byteToASCII(ev.value); }\n }\n this.textarea.value = s;\n this.lastOutCount = this.device.serialOut.length;\n this.textarea.style.display = 'block';\n }\n }\n}\n"], + "mappings": "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AAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,CAChE,EAEIE,EAAkB,CAClB,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAK,EAAI,EAAI,EAAI,EAAI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E,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,EACzhCC,GAAQ,IAAI,WAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,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AC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAGjCC,GAAU,CACR,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAGjCC,EAAU,CACR,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC9B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAEjCC,GAAQ,SAASC,EAAEC,EAAEC,EAAG,CAAC3B,KAASyB,EAAEC,EAAEC,EAAGA,GAAG,GAAI,MAAO,CAAG,EAC1DC,EAAS,SAASH,EAAEC,EAAEC,EAAG,CAAC3B,KAASyB,EAAEC,EAAEC,EAAGA,GAAG,GAAI,QAAS,EAAI,EAC9DE,EAAO,UAAW,CAAC,OAAQpC,GAAI,GAAGC,CAAG,EACrCoC,GAAO,SAASC,EAAG,CAACtC,EAAMsC,GAAG,EAAI,IAAKrC,EAAGqC,EAAE,GAAK,EAChDC,GAAQ,SAASN,EAAG,CACpBP,EAAO,EAAErB,EAAI4B,EAAI,GAAI,CACzB,EACIO,EAAQ,SAASP,EAAG,CACpBP,EAAO,EAAErB,EAAI4B,EAAI,GAAI,EACrBP,EAAO,EAAErB,EAAK4B,GAAG,EAAK,GAAI,CAC9B,EAEIQ,GAAS,SAASR,EAAG,CACrBP,EAAO,EAAEtB,EAAI6B,EAAI,GAAI,CACzB,EACIS,GAAS,SAAST,EAAG,CACrBP,EAAO,EAAEtB,EAAI6B,EAAI,GAAI,EACrBP,EAAO,EAAEtB,EAAK6B,GAAG,EAAK,GAAI,CAC9B,EACIU,GAAQ,UAAW,CACnB,OAAOhB,EAAOtB,GAAI,CACtB,EACIuC,GAAQ,UAAW,CACnB,OAAOjB,EAAOtB,GAAI,EAAI,IAAMsB,EAAOtB,GAAI,CAC3C,EAEIwC,EAAS,UAAW,CACpB,OAAOlB,EAAOvB,GAAI,CACtB,EACI0C,GAAS,UAAW,CACpB,OAAOnB,EAAOvB,GAAI,EAAI,IAAMuB,EAAOvB,GAAI,CAC3C,EAEI2C,GAAO,SAASC,EAAS,CACvB,IAAIC,EAAI,EACDD,EAAS,MAAOR,EAAMlC,CAAE,EAAE2C,GAAK,GAC/BD,EAAS,KAAOR,EAAMpC,CAAE,EAAE6C,GAAK,GAC/BD,EAAS,KAAMR,EAAMrC,CAAE,EAAE8C,GAAK,GAC9BD,EAAS,KAAMR,EAAMtC,CAAE,EAAE+C,GAAK,GAC9BD,EAAS,IAAKT,GAAM/B,CAAE,EAAGyC,KACzBD,EAAS,IAAKT,GAAMtC,CAAE,EAAGgD,KACzBD,EAAS,IAAKT,GAAMvC,CAAE,EAAGiD,KACzBD,EAAS,IAAKT,GAAMhC,CAAE,EAAG0C,KAC7BzB,GAAGyB,CACZ,EACIC,GAAO,SAASF,EAAS,CACvB,IAAIC,EAAI,EACDD,EAAS,MAAON,GAAOpC,CAAE,EAAE2C,GAAK,GAChCD,EAAS,KAAON,GAAOrC,CAAE,EAAE4C,GAAK,GAChCD,EAAS,KAAMN,GAAOvC,CAAE,EAAE8C,GAAK,GAC/BD,EAAS,KAAMN,GAAOxC,CAAE,EAAE+C,GAAK,GAC/BD,EAAS,IAAKP,GAAOjC,CAAE,EAAGyC,KAC1BD,EAAS,IAAKP,GAAOxC,CAAE,EAAGgD,KAC1BD,EAAS,IAAKP,GAAOzC,CAAE,EAAGiD,KAC1BD,EAAS,IAAKP,GAAOlC,CAAE,EAAG0C,KAC9BzB,GAAGyB,CACZ,EACIE,GAAO,SAASH,EAAS,CACvB,IAAIC,EAAI,EACJD,EAAS,IAAKzC,EAAKoC,GAAM,EAAGM,KAC5BD,EAAS,IAAKhD,EAAK2C,GAAM,EAAGM,KAC5BD,EAAS,IAAK/C,EAAK0C,GAAM,EAAGM,KAC5BD,EAAS,IAAKxC,EAAKmC,GAAM,EAAGM,KAC5BD,EAAS,KAAM9C,EAAK0C,GAAM,EAAEK,GAAK,GACjCD,EAAS,KAAM7C,EAAKyC,GAAM,EAAEK,GAAK,GACjCD,EAAS,KAAO5C,EAAKwC,GAAM,EAAEK,GAAK,GAClCD,EAAS,MAAO1C,EAAKsC,GAAM,EAAEK,GAAK,GACtCzB,GAAGyB,CACT,EACIG,GAAO,SAASJ,EAAS,CACvB,IAAIC,EAAI,EACJD,EAAS,IAAKzC,EAAKsC,EAAO,EAAGI,KAC7BD,EAAS,IAAKhD,EAAK6C,EAAO,EAAGI,KAC7BD,EAAS,IAAK/C,EAAK4C,EAAO,EAAGI,KAC7BD,EAAS,IAAKxC,EAAKqC,EAAO,EAAGI,KAC7BD,EAAS,KAAM9C,EAAK4C,GAAO,EAAEG,GAAK,GAClCD,EAAS,KAAM7C,EAAK2C,GAAO,EAAEG,GAAK,GAClCD,EAAS,KAAO3C,EAAKyC,GAAO,EAAEG,GAAK,GACnCD,EAAS,MAAO1C,EAAKwC,GAAO,EAAEG,GAAK,GACvCzB,GAAGyB,CACT,EAGII,GAAS,SAASC,EAAY,CAC9B,OAAOA,EAAa,GAAK,CACtB,IAAK,GACA,OAAOlB,EAAK,EACjB,IAAK,GACF,OAAOlC,EACV,IAAK,GACF,OAAOC,EACV,IAAK,GACF,OAAOC,EACV,IAAK,GACF,OAAOC,EACV,IAAK,GACF,OAAOC,EACV,IAAK,GACF,OAAON,EACV,IAAK,GACF,OAAOC,EACV,IAAK,IACF,OAAOM,EACV,IAAK,IACF,OAAOC,EACV,QACG,OAAO,IACV,CACP,EACI+C,GAAS,SAASD,EAAYhB,EAAG,CACjC,OAAOgB,EAAa,GACjB,CACA,IAAK,GACAjB,GAAKC,CAAC,EAAE,OACb,IAAK,GACFpC,EAAKoC,EAAG,OACX,IAAK,GACFnC,EAAKmC,EAAG,OACX,IAAK,GACFlC,EAAKkC,EAAG,OACX,IAAK,GACFjC,EAAKiC,EAAG,OACX,IAAK,GACFhC,EAAKgC,EAAG,OACX,IAAK,GACFtC,EAAKsC,EAAG,OACX,IAAK,GACFrC,EAAKqC,EAAG,OACX,IAAK,IACF/B,EAAK+B,EAAG,OACX,IAAK,IACF9B,EAAK8B,EAAG,OACX,QACG,MACH,CACP,EAEIkB,GAAS,SAASF,EAAYG,EAClC,CAEG,IAAIT,EAASM,EAAa,KACtBN,GAAU,KAAQA,GAAU,KAC7BA,EAAS,GAEPS,GAEET,EAASK,GAAOC,GAAY,CAAC,EAC7BC,GAAOD,GAAY,EAAGD,GAAOC,CAAU,CAAC,EACxCC,GAAOD,EAAYN,CAAM,GAGzBO,GAAOD,EAAYD,GAAOC,GAAY,CAAC,CAAC,CAElD,EAEII,GAAS,SAASC,EAAG,CACrB,OAAQA,EAAE,IAAMA,EAAE,IAAKA,CAC3B,EACIC,GAAW,SAASD,EAAG,CACvB,OAAQA,EAAE,MAAQA,EAAE,MAAOA,CAC/B,EAEIE,EAAQ,UAAW,CACnB,IAAIvB,EAAIX,EAAOrB,GAAI,EACnB,OAAAA,GAAM,MACCgC,CACX,EACIwB,EAAU,UAAW,CACrB,IAAIC,EAAKpC,EAAOrB,GAAI,EACpBA,GAAM,MACN,IAAI0D,EAAKrC,EAAOrB,GAAI,EACpB,OAAAA,GAAM,MACCyD,EAAG,IAAIC,CAClB,EAEIC,EAAW,SAASC,EAAM,CAC1B,IAAIH,EAAKpC,EAAOuC,GAAM,EACtBA,GAAQ,MACR,IAAIF,EAAKrC,EAAOuC,GAAM,EACtB,OAAAA,GAAQ,MACDH,EAAG,IAAIC,CAClB,EACIG,GAAY,SAASD,EAAK5B,EAAG,CAC7BZ,EAAOwC,IAAQ5B,GAAG,EAAG,GAAI,EACzB4B,GAAQ,MACRxC,EAAOwC,EAAK5B,EAAE,GAAI,CACtB,EAEI8B,EAAW,UAAW,CACtB,IAAIC,EAAKR,EAAM,EACXS,EACJ,OAAQD,EAAK,GAAM,CACf,IAAK,GACDC,EAAOpE,EAAI,MACf,IAAK,IACDoE,EAAOnE,EAAI,MACf,IAAK,IACDmE,EAAOlE,EAAI,MACf,IAAK,IACDkE,EAAOjE,EAAI,KACnB,CAEA,IAAIkE,EAAO,KACPL,EAAO,KACPM,EAEJ,GAAIH,EAAK,IACN,CACA,OAAQA,EAAK,GACV,CACA,IAAK,GACFH,EAAOI,EACPC,EAAOD,EAAO,EACd9C,GAAK,EACL,MACH,IAAK,GACF0C,EAAOI,EACPC,EAAOD,EAAO,EACd9C,GAAK,EACL,MACH,IAAK,GACF+C,EAAOD,EAAO,EACdJ,EAAOK,EACP/C,GAAK,EACL,MACH,IAAK,GACF+C,EAAOD,EAAO,EACdJ,EAAOK,EACP/C,GAAK,EACL,MACH,IAAK,GACF0C,EAAOI,EACP,MACH,IAAK,GAEFJ,EAAOI,EAAOZ,GAAOzD,CAAE,EACvBuB,GAAK,EACL,MACH,IAAK,GACD0C,EAAOI,EAAOZ,GAAO1D,CAAE,EACvBwB,GAAK,EACN,MACH,IAAK,GACF0C,EAAO,EACP,MACH,IAAK,GACFA,EAAOI,EAAOZ,GAAOG,EAAM,CAAC,EAC5BrC,GAAK,EACL,MACH,IAAK,GACF0C,EAAOI,EAAOV,GAASE,EAAQ,CAAC,EAChCtC,GAAK,EACL,MACH,IAAK,IACF0C,EAAO,EACP,MACH,IAAK,IACF1C,GAAK,EACL0C,EAAOI,EAAOlC,EAAK,EACnB,MACH,IAAK,IACFoC,EAAQd,GAAOG,EAAM,CAAC,EACtBK,EAAO5D,EAAKkE,EACZhD,GAAK,EACL,MACH,IAAK,IACFgD,EAASZ,GAASE,EAAQ,CAAC,EAC3BI,EAAO5D,EAAKkE,EACZhD,GAAK,EACL,MACH,IAAK,IACF0C,EAAO,EACP,MACH,IAAK,IACF1C,GAAK,EACL0C,EAAOJ,EAAQ,EACf,KACH,CAEHI,GAAQ,MAEJG,EAAK,KAENH,EAAOvC,EAAOuC,CAAI,EAAE,IAAIvC,EAAQuC,EAAK,EAAK,KAAM,EAChD1C,GAAK,EAER,KAEA,CACA,IAAIiD,EAAQJ,EAAK,GACbI,EAAQ,KACTA,GAAS,IACZP,EAAOI,EAAOG,EACdjD,GAAK,CACL,CAEH,GAAI+C,IAAO,KACP,OAAQF,EAAK,GAAM,CACf,IAAK,GACDnE,EAAKqE,EAAM,MACf,IAAK,IACDpE,EAAKoE,EAAM,MACf,IAAK,IACDnE,EAAKmE,EAAM,MACf,IAAK,IACDlE,EAAKkE,EAAM,KACnB,CAIJ,OAAOL,EAAO,KAClB,EAEIQ,GAAY,SAASC,EAAM,CAC3BpE,GAAM,EAAEI,EAASC,GACb+D,IAAO,IAAGpE,GAAMI,GAChBgE,EAAO,QAAQpE,GAAMK,EAC7B,EAIIgE,EAAO,SAAS3C,EAAG,CACpB,OAAAA,IACAA,GAAK,IACL1B,GAAM,EAAEI,EAASD,EAAaE,GAC9BL,GAAMuB,EAAQG,CAAC,GACXA,IAAM,GAAKA,GAAK,OAAM1B,GAAMG,GACzBuB,CACV,EACI4C,EAAO,SAAS5C,EAAG,CACpB,OAAAA,IACAA,GAAK,IACL1B,GAAM,EAAEI,EAASD,EAAaE,GAC9BL,GAAMuB,EAAQG,CAAC,GACXA,IAAM,KAAQA,GAAK,OAAM1B,GAAMG,GAC5BuB,CACV,EACI6C,GAAO,SAAS7C,EAAEK,EAAG,CACtB,IAAIyC,EAAO9C,EAAEK,EAEb,OAAA/B,GAAM,EAAEE,EAAUE,EAASD,EAAaE,GACxCL,GAAMuB,EAAQiD,EAAO,GAAI,EACrBA,EAAK,MAAOxE,GAAIE,GACpBsB,GAAME,EAAEK,EAAEyC,CAAI,EACPA,EAAK,GACf,EACIC,EAAS,SAAS/C,EAAEK,EAAG,CACxB,IAAIyC,EAAO9C,EAAEK,EAEb,OAAA/B,GAAM,EAAEE,EAAUE,EAASD,EAAaE,IACnCmE,EAAK,SAAU,IAAGxE,GAAII,GACvBoE,EAAK,QAAQxE,GAAIK,GACjBmE,EAAK,QAASxE,GAAIE,GACtB0B,EAAOF,EAAEK,EAAEyC,CAAI,EACRA,EAAK,KACf,EACIE,GAAO,SAAShD,EAAEK,EAAG,CACtB,IAAIyC,EAAO9C,EAAEK,EAEb,OAAA/B,GAAM,EAAEO,GAAcL,EAAUE,EAASD,EAAaE,GACtDL,GAAMuB,EAAQiD,EAAO,GAAI,EACrBA,EAAK,MAAOxE,GAAIE,GACpBsB,GAAME,EAAEK,EAAEyC,CAAI,GACTA,EAAO9C,EAAIK,GAAG,KAAM/B,GAAMO,IACxBiE,EAAK,GACf,EACIG,GAAS,SAASjD,EAAEK,EAAG,CACxB,IAAIyC,EAAO9C,EAAEK,EAEb,OAAA/B,GAAM,EAAEE,EAAUE,EAASD,EAAaE,IACnCmE,EAAK,SAAU,IAAGxE,GAAII,GACvBoE,EAAK,QAAQxE,GAAIK,GACjBmE,EAAK,QAASxE,GAAIE,GACtB0B,EAAOF,EAAEK,EAAEyC,CAAI,EACRA,EAAK,KACf,EACII,EAAO,SAASlD,EAAEK,EAAG,CACtB,IAAIyC,EAAO9C,EAAEK,GAAG/B,EAAKE,GAErB,OAAAF,GAAM,EAAEO,GAAcL,EAAUE,EAASD,EAAaE,GACtDL,GAAMuB,EAAQiD,EAAO,GAAI,EACrBA,EAAK,MAAOxE,GAAIE,GACpBsB,GAAME,EAAEK,EAAEyC,CAAI,GACTA,EAAO9C,EAAIK,GAAG,KAAM/B,GAAMO,IACxBiE,EAAK,GACf,EACIK,GAAO,SAASnD,EAAEK,EAAG,CACtB,IAAIyC,EAAO9C,EAAEK,GAAG/B,EAAKE,GAErB,OAAAF,GAAM,EAAEE,EAAUE,EAASD,EAAaE,GACxCL,GAAMuB,EAAQiD,EAAO,GAAI,EACrBA,EAAK,MAAOxE,GAAIE,GACpBsB,GAAME,EAAEK,EAAEyC,CAAI,EACPA,EAAK,GACf,EACIM,GAAO,SAASpD,EAAEK,EAAG,CACtB,IAAIyC,EAAO9C,EAAEK,EAEb/B,GAAM,EAAEE,EAAUE,EAASD,EAAaE,GACxCL,GAAMuB,EAAQiD,EAAO,GAAI,EACrBA,EAAK,MAAOxE,GAAIE,GACpBsB,GAAME,EAAEK,EAAEyC,CAAI,CAEjB,EACIO,EAAS,SAASrD,EAAEK,EAAG,CACxB,IAAIyC,EAAO9C,EAAEK,EAEb/B,GAAM,EAAEE,EAAUE,EAASD,EAAaE,IACnCmE,EAAK,SAAU,IAAGxE,GAAII,GACvBoE,EAAK,QAAQxE,GAAIK,GACjBmE,EAAK,QAASxE,GAAIE,GACtB0B,EAAOF,EAAEK,EAAEyC,CAAI,CAElB,EAEIQ,GAAO,SAAStD,EAAG,CACnB,OAAA1B,GAAM,EAAEE,EAAUE,EAASD,EAAaE,GACrCqB,GAAK,MACN1B,GAAMG,GACTuB,GAAM,CAACA,EAAG,KAAQ,EACdA,IAAM,IAAG1B,GAAMI,GACfsB,EAAI,MAAM1B,GAAMK,EAAaH,GAC1BwB,CACV,EAEIuD,GAAO,SAASvD,EAAG,CACnB,OAAA1B,GAAM,EAAEI,EAASF,EAAUG,GACvBqB,EAAI,IAAM1B,GAAME,GACpBwB,IAAM,EACFA,IAAM,IAAG1B,GAAMI,GACZsB,EAAI,GACf,EACIwD,GAAO,SAASxD,EAAG,CACnB,OAAA1B,GAAM,EAAEI,EAASF,EAAUG,GACvBqB,EAAI,IAAM1B,GAAME,GACpBwB,EAAKA,EAAI,IAASA,GAAG,EACrB1B,GAAMuB,EAAQG,CAAC,EACRA,CACX,EACIyD,GAAO,SAASzD,EAAG,CACnB,IAAI8C,EAAO9C,EACX,OAAA1B,GAAM,EAAEI,EAASF,EAAUG,EAAaF,GACpCuB,EAAI,MAAM1B,GAAME,GACpBwB,IAAM,EACN1B,GAAMuB,EAAQG,CAAC,GACVA,EAAI8C,GAAQ,MAAMxE,GAAIG,GACpBuB,CACX,EACI0D,GAAO,SAAS1D,EAAG,CACnB,IAAI8C,EAAO9C,EACP2D,EAAOrF,EAAGE,EACd,OAAAF,GAAM,EAAEI,EAASF,EAAUG,EAAaF,GACpCuB,EAAI,MAAM1B,GAAME,GACpBwB,EAAIA,GAAG,EAAI2D,EACXrF,GAAMuB,EAAQG,CAAC,GACVA,EAAI8C,GAAQ,MAAMxE,GAAIG,GACpBuB,CACX,EACI4D,GAAO,SAAS5D,EAAG,CACnB,IAAI2D,EAAOrF,EAAGE,EACd,OAAAF,GAAM,EAAEI,EAASF,EAAUG,GACvBqB,EAAI,IAAM1B,GAAME,GACpBwB,EAAIA,GAAG,EAAI2D,GAAM,EACjBrF,GAAMuB,EAAQG,CAAC,EAERA,CACX,EAEI6D,GAAO,SAAS7D,EAAEK,EAAG,CACrB,OAAA/B,GAAM,EAAEI,EAASC,EAAaF,GAC9BuB,GAAKK,EACL/B,GAAMuB,EAAQG,CAAC,EACRA,CACX,EACI8D,GAAM,SAAS9D,EAAEK,EAAG,CACpB,OAAA/B,GAAM,EAAEI,EAASC,EAAaF,GAC9BuB,GAAKK,EACL/B,GAAMuB,EAAQG,CAAC,EACRA,CACX,EACI+D,GAAO,SAAS/D,EAAEK,EAAG,CACrB,OAAA/B,GAAM,EAAEI,EAASC,EAAaF,GAC9BuB,GAAKK,EACL/B,GAAMuB,EAAQG,CAAC,EACRA,CACX,EACIgE,GAAO,SAAShE,EAAG,CACnB,OAAA1B,GAAM,EAAEI,EAASC,EAAaF,GAC9BuB,GAAK,IACL1B,GAAMuB,EAAQG,CAAC,EACf1B,GAAME,EACCwB,CACX,EAGIiE,EAAQ,UAAW,CAEnB,OAAO1F,EAAG,IAAMqD,EAAM,CAC1B,EAEIsC,GAAO,UAAW,CAClB,IAAIC,EAAO5E,EAEP0C,EAAO,KACPG,EAAK,KAELgC,EAAQ/F,EACRgG,EAASzC,EAAM,EAEnB,OADArC,GAAGI,GAAO0E,CAAM,EACRA,EAAQ,CACZ,IAAK,GACDpC,EAAOgC,EAAM,EACbxE,EAAOwC,EAAMqB,GAAK5D,EAAOuC,CAAI,CAAC,CAAC,EAC/B,MACJ,IAAK,GACDA,EAAOgC,EAAM,EACbxE,EAAOwC,EAAM+B,GAAKtE,EAAOuC,CAAI,CAAC,CAAC,EAC/B,MACJ,IAAK,GACDA,EAAOgC,EAAM,EACbxE,EAAOwC,EAAMsB,GAAK7D,EAAOuC,CAAI,CAAC,CAAC,EAC/B,MACJ,IAAK,GACDA,EAAOgC,EAAM,EACbxE,EAAOwC,EAAM2B,GAAKlE,EAAOuC,CAAI,CAAC,CAAC,EACnC,MACA,IAAK,GACDA,EAAOgC,EAAM,EACbxE,EAAOwC,EAAMuB,GAAK9D,EAAOuC,CAAI,CAAC,CAAC,EACnC,MACA,IAAK,GACDA,EAAOgC,EAAM,EACbxE,EAAOwC,EAAMwB,GAAK/D,EAAOuC,CAAI,CAAC,CAAC,EACnC,MACA,IAAK,GACDA,EAAOgC,EAAM,EACbxE,EAAOwC,EAAMyB,GAAKhE,EAAOuC,CAAI,CAAC,CAAC,EACnC,MAEA,IAAK,IACDA,EAAOgC,EAAM,EACbxE,EAAOwC,EAAMW,EAAKlD,EAAOuC,CAAI,CAAC,CAAC,EACnC,MACA,IAAK,IACDA,EAAOgC,EAAM,EACbxE,EAAOwC,EAAMU,EAAKjD,EAAOuC,CAAI,CAAC,CAAC,EACnC,MAEA,IAAK,IACDA,EAAOgC,EAAM,EACb7B,EAAK1C,EAAOuC,CAAI,EAChB3D,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQuC,CAAE,EACpB,MAEA,IAAK,IACDH,EAAOgC,EAAM,EACb5F,EAAK4D,EACT,MACA,IAAK,IACDA,EAAOgC,EAAM,EACbxE,EAAOwC,EAAK,CAAC,EACb3D,GAAI,EAAEE,EAAQG,EAAWF,GACzBH,GAAMI,EACV,MAEA,IAAK,IACD,MACJ,IAAK,IACD,MACJ,IAAK,IACDuD,EAAON,GAASE,EAAQ,CAAC,EACzBxD,GAAM4D,EACN,MACJ,IAAK,IACDA,EAAON,GAASE,EAAQ,CAAC,EACzBtB,EAAMlC,CAAE,EACRA,GAAM4D,EACN,MACJ,IAAK,IACD,IAAIqC,EAAK,EACLC,EAAMxG,EAAK,IAAMyG,GAAMzG,EAAK,IAC5ByG,GAAI,GAAQlG,EAAK,MAAOgG,GAAM,GAC9BC,EAAI,KAAQC,GAAI,IAAOF,GAAM,KAC7BC,EAAI,KAAQjG,EAAK,KAAOgG,GAAM,IAClCrC,EAAOqC,EAAKvG,EACZO,GAAO,EAAEE,EAAUG,EAAaD,EAASD,GACrCwD,EAAO,MACR3D,GAAOE,GACVT,EAAKkE,EAAO,IACZ3D,GAAOuB,EAAQ9B,CAAE,EACjB,MACJ,IAAK,IACDO,GAAMsD,EAAM,EACZ,MACJ,IAAK,IACDtD,GAAMsD,EAAM,EACZ,MACJ,IAAK,IACD7D,EAAMC,EAAK,IAAM,IAAK,EACtByE,GAAUtC,EAAK,CAAC,EAChB7B,GAAM,CAACG,EACP,MACJ,IAAK,IACD2D,EAAKR,EAAM,EACXL,GAAOa,EAAG,EAAI,EACd,MACJ,IAAK,IACDA,EAAKR,EAAM,EACXL,GAAOa,EAAG,EAAK,EACf,MAEJ,IAAK,IACDH,EAAOR,GAAOG,EAAM,CAAC,EACrBvD,GAAM4D,EACN,MACJ,IAAK,IACDA,EAAOR,GAAOG,EAAM,CAAC,EACrB,MACJ,IAAK,IACDK,EAAOR,GAAOG,EAAM,CAAC,EACftD,GAAIE,EAAUE,KAAUL,GAAM4D,GACxC,MACA,IAAK,IACDA,EAAOR,GAAOG,EAAM,CAAC,EACjBtD,GAAIE,EAAUE,KAASL,GAAM4D,GACrC,MACA,IAAK,IACDA,EAAOR,GAAOG,EAAM,CAAC,EACftD,EAAGE,IAAUH,GAAM4D,GAC7B,MACA,IAAK,IACDA,EAAOR,GAAOG,EAAM,CAAC,EACjBtD,EAAGE,IAASH,GAAM4D,GAC1B,MACA,IAAK,IACDA,EAAOR,GAAOG,EAAM,CAAC,EACftD,EAAGI,IAASL,GAAM4D,GAC5B,MACA,IAAK,IACDA,EAAOR,GAAOG,EAAM,CAAC,EACjBtD,EAAGI,IAAQL,GAAM4D,GACzB,MACA,IAAK,IACDA,EAAOR,GAAOG,EAAM,CAAC,EACftD,EAAGG,IAAaJ,GAAM4D,GAChC,MACA,IAAK,IACDA,EAAOR,GAAOG,EAAM,CAAC,EACjBtD,EAAGG,IAAYJ,GAAM4D,GAC7B,MACA,IAAK,IACDA,EAAOR,GAAOG,EAAM,CAAC,EACftD,EAAGK,IAAaN,GAAM4D,GAChC,MACA,IAAK,IACDA,EAAOR,GAAOG,EAAM,CAAC,EACjBtD,EAAGK,IAAYN,GAAM4D,GAC7B,MACA,IAAK,IACDA,EAAOR,GAAOG,EAAM,CAAC,EACdtD,EAAGK,GAAgBL,EAAGG,IAAa,IAAKJ,GAAM4D,GACzD,MACA,IAAK,IACDA,EAAOR,GAAOG,EAAM,CAAC,EAChBtD,EAAGK,GAAgBL,EAAGG,IAAa,IAAIJ,GAAM4D,GACtD,MACA,IAAK,IACDA,EAAOR,GAAOG,EAAM,CAAC,EACdtD,EAAGK,GAAgBL,EAAGG,IAAa,GAAOH,EAAGI,IAAUL,GAAM4D,GACxE,MACA,IAAK,IACDA,EAAOR,GAAOG,EAAM,CAAC,GAChBtD,EAAGK,GAAgBL,EAAGG,IAAa,GAAOH,EAAGI,KAASL,GAAM4D,GACrE,MAEA,IAAK,IACDhE,EAAKkE,EAAS,EACVlE,IAAK,EAAGK,GAAII,EAAaJ,GAAI,CAACI,EACtC,MACA,IAAK,IACDR,EAAKiE,EAAS,EACVjE,IAAK,EAAGI,GAAII,EAAaJ,GAAI,CAACI,EACtC,MACA,IAAK,IACDN,EAAK+D,EAAS,EAClB,MACA,IAAK,IACDhE,EAAKgE,EAAS,EAClB,MAEA,IAAK,IACDrB,GAAKc,EAAM,CAAC,EAChB,MACA,IAAK,IACDV,GAAKU,EAAM,CAAC,EAChB,MACA,IAAK,IACDX,GAAKW,EAAM,CAAC,EAChB,MACA,IAAK,IACDT,GAAKS,EAAM,CAAC,EAChB,MACA,IAAK,IACDvD,EAAKsC,GAAM,EACf,MACA,IAAK,IACD1C,GAAMD,EACV,MACA,IAAK,IACDM,EAAKoC,GAAM,EACPpC,EAAKS,IACLQ,GAAG,EACHxB,EAAK2C,GAAM,EACX1C,EAAK0C,GAAM,EACXnC,EAAKmC,GAAM,EACXzC,EAAK0C,GAAM,EACXzC,EAAKyC,GAAM,EACXxC,EAAKwC,GAAM,GAEftC,EAAKsC,GAAM,EACf,MACA,IAAK,IACDrC,GAAMsD,EAAM,EAChB,MACA,IAAK,IACDK,EAAOlE,EAAKC,EACRiE,IAAO,EAAG3D,GAAII,EAAaJ,GAAI,CAACI,EAChCuD,EAAK,IAAM3D,GAAIE,EAAcF,GAAI,CAACE,EACtC4B,GAAK6B,CAAI,EACb,MACA,IAAK,IACD3D,GAAMS,EACNwB,EAAMlC,CAAE,EACRkC,EAAMpC,CAAE,EACRoC,EAAMrC,CAAE,EACRqC,EAAMtC,CAAE,EACRqC,GAAM/B,CAAE,EACR+B,GAAMtC,CAAE,EACRsC,GAAMvC,CAAE,EACRuC,GAAMhC,CAAE,EACRA,GAAMM,EAAYE,EAClBT,EAAK2D,EAAS9C,CAAM,EACxB,MAEA,IAAK,IACDnB,EAAKuF,GAAKvF,CAAE,EAChB,MACA,IAAK,IACDA,EAAKiG,GAAKjG,CAAE,EAChB,MACA,IAAK,IACDA,EAAKwF,GAAKxF,CAAE,EAChB,MACA,IAAK,IACDA,EAAK6F,GAAK7F,CAAE,EAChB,MACA,IAAK,IACDA,EAAKyF,GAAKzF,CAAE,EAChB,MACA,IAAK,IACDA,EAAK0F,GAAK1F,CAAE,EAChB,MACA,IAAK,IACDA,EAAK2F,GAAK3F,CAAE,EAChB,MACA,IAAK,IACDA,EAAK6E,EAAK7E,CAAE,EAChB,MACA,IAAK,IACDA,EAAK4E,EAAK5E,CAAE,EAChB,MACA,IAAK,IACDO,GAAM,EAAEI,EAAOC,EAAWF,GAC1BH,GAAMuB,EAAQ9B,CAAE,EACpB,MACA,IAAK,IACDA,EAAK,EACLO,GAAM,EAAEK,EAAWF,EAAWD,GAC9BF,GAAMI,EACV,MAEA,IAAK,IACDV,EAAKsF,GAAKtF,CAAE,EAChB,MACA,IAAK,IACDA,EAAKgG,GAAKhG,CAAE,EAChB,MACA,IAAK,IACDA,EAAKuF,GAAKvF,CAAE,EAChB,MACA,IAAK,IACDA,EAAK4F,GAAK5F,CAAE,EAChB,MACA,IAAK,IACDA,EAAKwF,GAAKxF,CAAE,EAChB,MACA,IAAK,IACDA,EAAKyF,GAAKzF,CAAE,EAChB,MACA,IAAK,IACDA,EAAK0F,GAAK1F,CAAE,EAChB,MACA,IAAK,IACDA,EAAK4E,EAAK5E,CAAE,EAChB,MACA,IAAK,IACDA,EAAK2E,EAAK3E,CAAE,EAChB,MACA,IAAK,IACDM,GAAM,EAAEI,EAAOC,EAAWF,GAC1BH,GAAMuB,EAAQ7B,CAAE,EACpB,MACA,IAAK,IACDA,EAAK,EACLM,GAAM,EAAEK,EAAWF,EAAWD,GAC9BF,GAAMI,EACV,MAEA,IAAK,IACDuD,EAAOE,EAAS,EAChB1C,EAAOwC,EAAMqB,GAAK5D,EAAOuC,CAAI,CAAC,CAAC,EAC/B,MACJ,IAAK,IACDA,EAAOE,EAAS,EAChB1C,EAAOwC,EAAM+B,GAAKtE,EAAOuC,CAAI,CAAC,CAAC,EAC/B,MACJ,IAAK,KACDA,EAAOE,EAAS,EAChB1C,EAAOwC,EAAMsB,GAAK7D,EAAOuC,CAAI,CAAC,CAAC,EAC/B,MACJ,IAAK,KACDA,EAAOE,EAAS,EAChB1C,EAAOwC,EAAM2B,GAAKlE,EAAOuC,CAAI,CAAC,CAAC,EACnC,MACA,IAAK,KACDA,EAAOE,EAAS,EAChB1C,EAAOwC,EAAMuB,GAAK9D,EAAOuC,CAAI,CAAC,CAAC,EACnC,MACA,IAAK,KACDA,EAAOE,EAAS,EAChB1C,EAAOwC,EAAMwB,GAAK/D,EAAOuC,CAAI,CAAC,CAAC,EACnC,MACA,IAAK,KACDA,EAAOE,EAAS,EAChB1C,EAAOwC,EAAMyB,GAAKhE,EAAOuC,CAAI,CAAC,CAAC,EACnC,MAEA,IAAK,KACDA,EAAOE,EAAS,EAChB1C,EAAOwC,EAAMW,EAAKlD,EAAOuC,CAAI,CAAC,CAAC,EACnC,MACA,IAAK,KACDA,EAAOE,EAAS,EAChB1C,EAAOwC,EAAMU,EAAKjD,EAAOuC,CAAI,CAAC,CAAC,EACnC,MAEA,IAAK,KACDA,EAAOE,EAAS,EAChBC,EAAK1C,EAAOuC,CAAI,EAChB3D,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQuC,CAAE,EACpB,MAEA,IAAK,KACDH,EAAOE,EAAS,EAChB9D,EAAK4D,EACT,MACA,IAAK,KACDA,EAAOE,EAAS,EAChB1C,EAAOwC,EAAK,CAAC,EACb3D,GAAI,EAAEE,EAAQG,EAAWF,GACzBH,GAAMI,EACV,MAGA,IAAK,KACDuD,EAAOJ,EAAQ,EACfpC,EAAOwC,EAAMqB,GAAK5D,EAAOuC,CAAI,CAAC,CAAC,EAC/B,MACJ,IAAK,KACDA,EAAOJ,EAAQ,EACfpC,EAAOwC,EAAM+B,GAAKtE,EAAOuC,CAAI,CAAC,CAAC,EAC/B,MACJ,IAAK,KACDA,EAAOJ,EAAQ,EACfpC,EAAOwC,EAAMsB,GAAK7D,EAAOuC,CAAI,CAAC,CAAC,EAC/B,MACJ,IAAK,KACDA,EAAOJ,EAAQ,EACfpC,EAAOwC,EAAM2B,GAAKlE,EAAOuC,CAAI,CAAC,CAAC,EACnC,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfpC,EAAOwC,EAAMuB,GAAK9D,EAAOuC,CAAI,CAAC,CAAC,EACnC,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfpC,EAAOwC,EAAMwB,GAAK/D,EAAOuC,CAAI,CAAC,CAAC,EACnC,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfpC,EAAOwC,EAAMyB,GAAKhE,EAAOuC,CAAI,CAAC,CAAC,EACnC,MAEA,IAAK,KACDA,EAAOJ,EAAQ,EACfpC,EAAOwC,EAAMW,EAAKlD,EAAOuC,CAAI,CAAC,CAAC,EACnC,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfpC,EAAOwC,EAAMU,EAAKjD,EAAOuC,CAAI,CAAC,CAAC,EACnC,MAEA,IAAK,KACDA,EAAOJ,EAAQ,EACfO,EAAK1C,EAAOuC,CAAI,EAChB3D,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQuC,CAAE,EACpB,MAEA,IAAK,KACDH,EAAOJ,EAAQ,EACfxD,EAAK4D,EACT,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfpC,EAAOwC,EAAK,CAAC,EACb3D,GAAI,EAAEE,EAAQG,EAAWF,GACzBH,GAAMI,EACV,MAIA,IAAK,KACDX,EAAK8E,GAAK9E,EAAI6D,EAAM,CAAC,EACzB,MACA,IAAK,KACDwB,GAAKrF,EAAI6D,EAAM,CAAC,EACpB,MACA,IAAK,KACD7D,EAAKoF,GAAKpF,EAAI6D,EAAM,CAAC,EACzB,MACA,IAAK,KACDxB,GAAK2C,EAAO5C,EAAK,EAAE0B,EAAQ,CAAC,CAAC,EACjC,MACA,IAAK,KACD9D,EAAKgG,GAAKhG,EAAI6D,EAAM,CAAC,EACzB,MACA,IAAK,KACDmC,GAAKhG,EAAI6D,EAAM,CAAC,EACpB,MACA,IAAK,KACD7D,EAAK6D,EAAM,EACXtD,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQ9B,CAAE,EACpB,MACA,IAAK,KACDA,EAAK8F,GAAK9F,EAAI6D,EAAM,CAAC,EACzB,MACA,IAAK,KACD7D,EAAKmF,EAAKnF,EAAI6D,EAAM,CAAC,EACzB,MACA,IAAK,KACD7D,EAAK+F,GAAI/F,EAAI6D,EAAM,CAAC,EACxB,MACA,IAAK,KACD7D,EAAKiF,GAAKjF,EAAI6D,EAAM,CAAC,EACzB,MACA,IAAK,KACDyB,EAAOpF,EAAI4D,EAAQ,CAAC,EACxB,MAEA,IAAK,KACDI,EAAOR,GAAOG,EAAM,CAAC,EACrBrB,EAAMlC,CAAE,EACRA,GAAI4D,EACR,MACA,IAAK,KACDhE,EAAK4D,EAAQ,EACbY,GAAUxE,CAAE,EACZK,GAAI,CAACG,EACT,MAGA,IAAK,KACDwD,EAAOgC,EAAM,EACblG,EAAK8E,GAAK9E,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACbb,GAAKrF,EAAI2B,EAAOuC,CAAI,CAAC,EACzB,MACA,IAAK,KACDA,EAAOgC,EAAM,EACblG,EAAKoF,GAAKpF,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACb7D,GAAK2C,EAAO5C,EAAK,EAAE6B,EAASC,CAAI,CAAC,CAAC,EACtC,MACA,IAAK,KACDA,EAAOgC,EAAM,EACblG,EAAKgG,GAAKhG,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACbF,GAAKhG,EAAI2B,EAAOuC,CAAI,CAAC,EACzB,MACA,IAAK,KACDA,EAAOgC,EAAM,EACblG,EAAK2B,EAAOuC,CAAI,EAChB3D,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQ9B,CAAE,EACpB,MACA,IAAK,KACDkE,EAAOgC,EAAM,EACbxE,EAAOwC,EAAKlE,CAAE,EACdO,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQ9B,CAAE,EACpB,MACA,IAAK,KACDkE,EAAOgC,EAAM,EACblG,EAAK8F,GAAK9F,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACblG,EAAKmF,EAAKnF,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACblG,EAAK+F,GAAI/F,EAAI2B,EAAOuC,CAAI,CAAC,EAC7B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACblG,EAAKiF,GAAKjF,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACbZ,EAAOpF,EAAI+D,EAASC,CAAI,CAAC,EAC7B,MAEA,IAAK,KACDA,EAAOgC,EAAM,EACb1D,EAAMlC,CAAE,EACRA,EAAG4D,EACP,MACA,IAAK,KACDA,EAAOgC,EAAM,EACbhG,EAAK+D,EAASC,CAAI,EAClBQ,GAAUxE,CAAE,EACZK,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOgC,EAAM,EACb/B,GAAUD,EAAKhE,CAAE,EACjBwE,GAAUxE,CAAE,EACZK,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOE,EAAS,EAChBpE,EAAK8E,GAAK9E,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBiB,GAAKrF,EAAI2B,EAAOuC,CAAI,CAAC,EACzB,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBpE,EAAKoF,GAAKpF,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChB/B,GAAK2C,EAAO5C,EAAK,EAAE6B,EAASC,CAAI,CAAC,CAAC,EACtC,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBpE,EAAKgG,GAAKhG,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChB4B,GAAKhG,EAAI2B,EAAOuC,CAAI,CAAC,EACzB,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBpE,EAAK2B,EAAOuC,CAAI,EAChB3D,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQ9B,CAAE,EACpB,MACA,IAAK,KACDkE,EAAOE,EAAS,EAChB1C,EAAOwC,EAAKlE,CAAE,EACdO,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQ9B,CAAE,EACpB,MACA,IAAK,KACDkE,EAAOE,EAAS,EAChBpE,EAAK8F,GAAK9F,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBpE,EAAKmF,EAAKnF,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBpE,EAAK+F,GAAI/F,EAAI2B,EAAOuC,CAAI,CAAC,EAC7B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBpE,EAAKiF,GAAKjF,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBkB,EAAOpF,EAAI+D,EAASC,CAAI,CAAC,EAC7B,MAEA,IAAK,KACDA,EAAOE,EAAS,EAChB5B,EAAMlC,CAAE,EACRA,EAAG4D,EACP,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBlE,EAAK+D,EAASC,CAAI,EAClBQ,GAAUxE,CAAE,EACZK,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOE,EAAS,EAChBD,GAAUD,EAAKhE,CAAE,EACjBwE,GAAUxE,CAAE,EACZK,GAAI,CAACG,EACT,MAGA,IAAK,KACDwD,EAAOJ,EAAQ,EACf9D,EAAK8E,GAAK9E,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfuB,GAAKrF,EAAI2B,EAAOuC,CAAI,CAAC,EACzB,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACf9D,EAAKoF,GAAKpF,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfzB,GAAK2C,EAAO5C,EAAK,EAAE6B,EAASC,CAAI,CAAC,CAAC,EACtC,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACf9D,EAAKgG,GAAKhG,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfkC,GAAKhG,EAAI2B,EAAOuC,CAAI,CAAC,EACzB,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACf9D,EAAK2B,EAAOuC,CAAI,EAChB3D,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQ9B,CAAE,EACpB,MACA,IAAK,KACDkE,EAAOJ,EAAQ,EACfpC,EAAOwC,EAAKlE,CAAE,EACdO,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQ9B,CAAE,EACpB,MACA,IAAK,KACDkE,EAAOJ,EAAQ,EACf9D,EAAK8F,GAAK9F,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACf9D,EAAKmF,EAAKnF,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACf9D,EAAK+F,GAAI/F,EAAI2B,EAAOuC,CAAI,CAAC,EAC7B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACf9D,EAAKiF,GAAKjF,EAAI2B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfwB,EAAOpF,EAAI+D,EAASC,CAAI,CAAC,EAC7B,MAEA,IAAK,KACDA,EAAOJ,EAAQ,EACftB,EAAMlC,CAAE,EACRA,EAAG4D,EACP,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACf5D,EAAK+D,EAASC,CAAI,EAClBQ,GAAUxE,CAAE,EACZK,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOJ,EAAQ,EACfK,GAAUD,EAAKhE,CAAE,EACjBwE,GAAUxE,CAAE,EACZK,GAAI,CAACG,EACT,MAIA,IAAK,KACDT,EAAK6E,GAAK7E,EAAI4D,EAAM,CAAC,EACzB,MACA,IAAK,KACDwB,GAAKpF,EAAI4D,EAAM,CAAC,EACpB,MACA,IAAK,KACD5D,EAAKmF,GAAKnF,EAAI4D,EAAM,CAAC,EACzB,MACA,IAAK,KACDxB,GAAK6C,GAAO9C,EAAK,EAAE0B,EAAQ,CAAC,CAAC,EACjC,MACA,IAAK,KACD7D,EAAK+F,GAAK/F,EAAI4D,EAAM,CAAC,EACzB,MACA,IAAK,KACDmC,GAAK/F,EAAI4D,EAAM,CAAC,EACpB,MACA,IAAK,KACD5D,EAAK4D,EAAM,EACXtD,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQ7B,CAAE,EACpB,MACA,IAAK,KACDA,EAAK6F,GAAK7F,EAAI4D,EAAM,CAAC,EACzB,MACA,IAAK,KACD5D,EAAKkF,EAAKlF,EAAI4D,EAAM,CAAC,EACzB,MACA,IAAK,KACD5D,EAAK8F,GAAI9F,EAAI4D,EAAM,CAAC,EACxB,MACA,IAAK,KACD5D,EAAKgF,GAAKhF,EAAI4D,EAAM,CAAC,EACzB,MACA,IAAK,KACDK,EAAOJ,EAAQ,EACfzB,GAAK6B,CAAI,EACTQ,GAAUR,CAAI,EACd3D,GAAI,CAACG,EACT,MAEA,IAAK,KACDN,EAAK0D,EAAQ,EACbY,GAAUtE,CAAE,EACZG,GAAI,CAACG,EACT,MAGA,IAAK,KACDwD,EAAOgC,EAAM,EACbjG,EAAK6E,GAAK7E,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACbb,GAAKpF,EAAI0B,EAAOuC,CAAI,CAAC,EACzB,MACA,IAAK,KACDA,EAAOgC,EAAM,EACbjG,EAAKmF,GAAKnF,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACb7D,GAAK6C,GAAO9C,EAAK,EAAE6B,EAASC,CAAI,CAAC,CAAC,EACtC,MACA,IAAK,KACDA,EAAOgC,EAAM,EACbjG,EAAK+F,GAAK/F,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACbF,GAAK/F,EAAI0B,EAAOuC,CAAI,CAAC,EACzB,MACA,IAAK,KACDA,EAAOgC,EAAM,EACbjG,EAAK0B,EAAOuC,CAAI,EAChB3D,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQ7B,CAAE,EACpB,MACA,IAAK,KACDiE,EAAOgC,EAAM,EACbxE,EAAOwC,EAAKjE,CAAE,EACdM,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQ7B,CAAE,EACpB,MACA,IAAK,KACDiE,EAAOgC,EAAM,EACbjG,EAAK6F,GAAK7F,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACbjG,EAAKkF,EAAKlF,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACbjG,EAAK8F,GAAI9F,EAAI0B,EAAOuC,CAAI,CAAC,EAC7B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACbjG,EAAKgF,GAAKhF,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACb7B,EAAKJ,EAASC,CAAI,EAClB7B,GAAKgC,CAAE,EACPK,GAAUL,CAAE,EACZ9D,GAAI,CAACG,EACT,MAEA,IAAK,KACDwD,EAAOgC,EAAM,EACb/B,GAAUD,EAAM9B,EAAK,CAAC,EACtB7B,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOgC,EAAM,EACb9F,EAAK6D,EAASC,CAAI,EAClBQ,GAAUtE,CAAE,EACZG,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOgC,EAAM,EACb/B,GAAUD,EAAK9D,CAAE,EACjBsE,GAAUtE,CAAE,EACZG,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOE,EAAS,EAChBnE,EAAK6E,GAAK7E,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBiB,GAAKpF,EAAI0B,EAAOuC,CAAI,CAAC,EACzB,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBnE,EAAKmF,GAAKnF,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChB/B,GAAK6C,GAAO9C,EAAK,EAAE6B,EAASC,CAAI,CAAC,CAAC,EACtC,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBnE,EAAK+F,GAAK/F,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChB4B,GAAK/F,EAAI0B,EAAOuC,CAAI,CAAC,EACzB,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBnE,EAAK0B,EAAOuC,CAAI,EAChB3D,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQ7B,CAAE,EACpB,MACA,IAAK,KACDiE,EAAOE,EAAS,EAChB1C,EAAOwC,EAAKjE,CAAE,EACdM,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQ7B,CAAE,EACpB,MACA,IAAK,KACDiE,EAAOE,EAAS,EAChBnE,EAAK6F,GAAK7F,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBnE,EAAKkF,EAAKlF,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBnE,EAAK8F,GAAI9F,EAAI0B,EAAOuC,CAAI,CAAC,EAC7B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBnE,EAAKgF,GAAKhF,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBC,EAAKJ,EAASC,CAAI,EAClB7B,GAAKgC,CAAE,EACPK,GAAUL,CAAE,EACZ9D,GAAI,CAACG,EACT,MAEA,IAAK,KACDwD,EAAOE,EAAS,EAChBD,GAAUD,EAAM9B,EAAK,CAAC,EACtB7B,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOE,EAAS,EAChBhE,EAAK6D,EAASC,CAAI,EAClBQ,GAAUtE,CAAE,EACZG,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOE,EAAS,EAChBD,GAAUD,EAAK9D,CAAE,EACjBsE,GAAUtE,CAAE,EACZG,GAAI,CAACG,EACT,MAGA,IAAK,KACDwD,EAAOJ,EAAQ,EACf7D,EAAK6E,GAAK7E,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfuB,GAAKpF,EAAI0B,EAAOuC,CAAI,CAAC,EACzB,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACf7D,EAAKmF,GAAKnF,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfzB,GAAK6C,GAAO9C,EAAK,EAAE6B,EAASC,CAAI,CAAC,CAAC,EACtC,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACf7D,EAAK+F,GAAK/F,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfkC,GAAK/F,EAAI0B,EAAOuC,CAAI,CAAC,EACzB,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACf7D,EAAK0B,EAAOuC,CAAI,EAChB3D,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQ7B,CAAE,EACpB,MACA,IAAK,KACDiE,EAAOJ,EAAQ,EACfpC,EAAOwC,EAAKjE,CAAE,EACdM,GAAI,EAAEI,EAAOC,EAAWF,GACxBH,GAAMuB,EAAQ7B,CAAE,EACpB,MACA,IAAK,KACDiE,EAAOJ,EAAQ,EACf7D,EAAK6F,GAAK7F,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACf7D,EAAKkF,EAAKlF,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACf7D,EAAK8F,GAAI9F,EAAI0B,EAAOuC,CAAI,CAAC,EAC7B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACf7D,EAAKgF,GAAKhF,EAAI0B,EAAOuC,CAAI,CAAC,EAC9B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfO,EAAKJ,EAASC,CAAI,EAClB7B,GAAKgC,CAAE,EACPK,GAAUL,CAAE,EACZ9D,GAAI,CAACG,EACT,MAEA,IAAK,KACDwD,EAAOJ,EAAQ,EACfK,GAAUD,EAAM9B,EAAK,CAAC,EACtB7B,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOJ,EAAQ,EACf1D,EAAK6D,EAASC,CAAI,EAClBQ,GAAUtE,CAAE,EACZG,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOJ,EAAQ,EACfK,GAAUD,EAAK9D,CAAE,EACjBsE,GAAUtE,CAAE,EACZG,GAAI,CAACG,EACT,MAGA,IAAK,IAIG,OAFA4F,EAASzC,EAAM,EACfrC,GAAGK,GAAQyE,CAAM,EACVA,EAAQ,CACX,IAAK,IACDpC,EAAON,GAASE,EAAQ,CAAC,EACzB,MACJ,IAAK,IACDI,EAAON,GAASE,EAAQ,CAAC,EACnBvD,GAAIE,EAAUE,KAAUL,GAAM4D,GACxC,MACA,IAAK,IACDA,EAAON,GAASE,EAAQ,CAAC,EACrBvD,GAAIE,EAAUE,KAASL,GAAM4D,GACrC,MACA,IAAK,IACDA,EAAON,GAASE,EAAQ,CAAC,EACnBvD,EAAGE,IAAUH,GAAM4D,GAC7B,MACA,IAAK,IACDA,EAAON,GAASE,EAAQ,CAAC,EACrBvD,EAAGE,IAASH,GAAM4D,GAC1B,MACA,IAAK,IACDA,EAAON,GAASE,EAAQ,CAAC,EACnBvD,EAAGI,IAASL,GAAM4D,GAC5B,MACA,IAAK,IACDA,EAAON,GAASE,EAAQ,CAAC,EACrBvD,EAAGI,IAAQL,GAAM4D,GACzB,MACA,IAAK,IACDA,EAAON,GAASE,EAAQ,CAAC,EACnBvD,EAAGG,IAAaJ,GAAM4D,GAChC,MACA,IAAK,IACDA,EAAON,GAASE,EAAQ,CAAC,EACrBvD,EAAGG,IAAYJ,GAAM4D,GAC7B,MACA,IAAK,IACDA,EAAON,GAASE,EAAQ,CAAC,EACnBvD,EAAGK,IAAaN,GAAM4D,GAChC,MACA,IAAK,IACDA,EAAON,GAASE,EAAQ,CAAC,EACrBvD,EAAGK,IAAYN,GAAM4D,GAC7B,MACA,IAAK,IACDA,EAAON,GAASE,EAAQ,CAAC,EAClBvD,EAAGK,GAAgBL,EAAGG,IAAa,IAAKJ,GAAM4D,GACzD,MACA,IAAK,IACDA,EAAON,GAASE,EAAQ,CAAC,EACpBvD,EAAGK,GAAgBL,EAAGG,IAAa,IAAIJ,GAAM4D,GACtD,MACA,IAAK,IACDA,EAAON,GAASE,EAAQ,CAAC,EAClBvD,EAAGK,GAAgBL,EAAGG,IAAa,GAAOH,EAAGI,IAAUL,GAAM4D,GACxE,MACA,IAAK,IACDA,EAAON,GAASE,EAAQ,CAAC,GACpBvD,EAAGK,GAAgBL,EAAGG,IAAa,GAAOH,EAAGI,KAASL,GAAM4D,GACrE,MACA,IAAK,IACD3D,GAAMS,EACNwB,EAAMlC,CAAE,EACRkC,EAAMpC,CAAE,EACRoC,EAAMrC,CAAE,EACRqC,EAAMtC,CAAE,EACRqC,GAAM/B,CAAE,EACR+B,GAAMtC,CAAE,EACRsC,GAAMvC,CAAE,EACRuC,GAAMhC,CAAE,EACRA,GAAMM,EAAYE,EAClBT,EAAK2D,EAAS3C,EAAO,EACzB,MACA,IAAK,KACDgE,EAAOlD,EAAK,EAAE0B,EAAQ,CAAC,EAC3B,MACA,IAAK,KACDwB,EAAOnF,EAAG2D,EAAQ,CAAC,EACvB,MACA,IAAK,KACD3D,EAAK2D,EAAQ,EACbY,GAAUvE,CAAE,EACZI,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOgC,EAAM,EACbZ,EAAOlD,EAAK,EAAE6B,EAASC,CAAI,CAAC,EAChC,MACA,IAAK,KACDA,EAAOgC,EAAM,EACbZ,EAAOnF,EAAG8D,EAASC,CAAI,CAAC,EAC5B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACb/F,EAAK8D,EAASC,CAAI,EAClBQ,GAAUvE,CAAE,EACZI,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOgC,EAAM,EACb/B,GAAUD,EAAK/D,CAAE,EACjBuE,GAAUvE,CAAE,EACZI,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOE,EAAS,EAChBkB,EAAOlD,EAAK,EAAE6B,EAASC,CAAI,CAAC,EAChC,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBkB,EAAOnF,EAAG8D,EAASC,CAAI,CAAC,EAC5B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBjE,EAAK8D,EAASC,CAAI,EAClBQ,GAAUvE,CAAE,EACZI,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOE,EAAS,EAChBD,GAAUD,EAAK/D,CAAE,EACjBuE,GAAUvE,CAAE,EACZI,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOJ,EAAQ,EACfwB,EAAOlD,EAAK,EAAE6B,EAASC,CAAI,CAAC,EAChC,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfwB,EAAOnF,EAAG8D,EAASC,CAAI,CAAC,EAC5B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACf3D,EAAK8D,EAASC,CAAI,EAClBQ,GAAUvE,CAAE,EACZI,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOJ,EAAQ,EACfK,GAAUD,EAAK/D,CAAE,EACjBuE,GAAUvE,CAAE,EACZI,GAAI,CAACG,EACT,MACA,IAAK,KACDL,EAAKyD,EAAQ,EACbY,GAAUrE,CAAE,EACZE,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOgC,EAAM,EACb7F,EAAK4D,EAASC,CAAI,EAClBQ,GAAUrE,CAAE,EACZE,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOgC,EAAM,EACb/B,GAAUD,EAAK7D,CAAE,EACjBqE,GAAUrE,CAAE,EACZE,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOE,EAAS,EAChB/D,EAAK4D,EAASC,CAAI,EAClBQ,GAAUrE,CAAE,EACZE,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOE,EAAS,EAChBD,GAAUD,EAAK7D,CAAE,EACjBqE,GAAUrE,CAAE,EACZE,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOJ,EAAQ,EACfzD,EAAK4D,EAASC,CAAI,EAClBQ,GAAUrE,CAAE,EACZE,GAAI,CAACG,EACT,MACA,IAAK,KACDwD,EAAOJ,EAAQ,EACfK,GAAUD,EAAK7D,CAAE,EACjBqE,GAAUrE,CAAE,EACZE,GAAI,CAACG,EACT,KACJ,CAER,MAEA,IAAK,IAIG,OAFA4F,EAASzC,EAAM,EACfrC,GAAGK,GAAQyE,CAAM,EACVA,EAAQ,CACX,IAAK,IACD/F,GAAMS,EACNwB,EAAMlC,CAAE,EACRkC,EAAMpC,CAAE,EACRoC,EAAMrC,CAAE,EACRqC,EAAMtC,CAAE,EACRqC,GAAM/B,CAAE,EACR+B,GAAMtC,CAAE,EACRsC,GAAMvC,CAAE,EACRuC,GAAMhC,CAAE,EACRA,GAAMM,EAAYE,EAClBT,EAAK2D,EAAS1C,EAAO,EACzB,MACA,IAAK,KACD+D,EAAOlF,EAAI0D,EAAQ,CAAC,EACxB,MACA,IAAK,KACDwB,EAAOjF,EAAIyD,EAAQ,CAAC,EACxB,MACA,IAAK,KACDI,EAAOgC,EAAM,EACbZ,EAAOlF,EAAI6D,EAASC,CAAI,CAAC,EAC7B,MACA,IAAK,KACDA,EAAOgC,EAAM,EACbZ,EAAOjF,EAAI4D,EAASC,CAAI,CAAC,EAC7B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBkB,EAAOlF,EAAI6D,EAASC,CAAI,CAAC,EAC7B,MACA,IAAK,KACDA,EAAOE,EAAS,EAChBkB,EAAOjF,EAAI4D,EAASC,CAAI,CAAC,EAC7B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfwB,EAAOlF,EAAI6D,EAASC,CAAI,CAAC,EAC7B,MACA,IAAK,KACDA,EAAOJ,EAAQ,EACfwB,EAAOjF,EAAI4D,EAASC,CAAI,CAAC,EAC7B,KAEJ,CAER,KAGJ,CAEA,OAAAlE,GAAM,IACNC,GAAM,IACNM,GAAM,IACNC,GAAM,IACNN,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACNC,GAAM,MACCkB,EAAE4E,CAEb,EAEIM,GAAQ,UAAU,CAClBpG,EAAK2D,EAAShD,EAAQ,EACtBT,EAAK,EACLD,GAAMQ,EAAaF,EACnBW,EAAE,EACFxB,EAAGC,EAAGO,EAAGN,EAAGC,EAAGC,EAAGC,EAAG,CACzB,EAoBIsG,GAAK,CACT,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,QAAQ,EACf,CAAC,EAAI,EAAE,QAAQ,EACf,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,OAAO,EACd,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,GAAG,KAAK,EACb,CAAC,EAAI,GAAG,KAAK,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,GAAG,MAAM,EACd,CAAC,EAAI,GAAG,MAAM,EACd,CAAC,EAAI,GAAG,MAAM,EACd,CAAC,EAAI,GAAG,MAAM,EACd,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,OAAO,EACd,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,MAAM,EACb,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE,KAAK,EACZ,CAAC,EAAI,EAAE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,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAc,CAChB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAc,CAChB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEIC,GAAa,CACf,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,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EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,YAAa,CACX,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,YAAa,CACX,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,EACA,WAAY,CACV,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/vB,CACF,EAEO,SAASV,GAAuBF,EAAQa,EAAS,CAG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", "names": ["OPS_6502", "disassemble6502", "pc", "b0", "b1", "b2", "op", "s", "am", "isaddr", "offset", "hex", "FastZ80", "coreParameter", "core", "a", "b", "c", "d", "e", "h", "l", "a_prime", "b_prime", "c_prime", "d_prime", "e_prime", "h_prime", "l_prime", "ix", "iy", "i", "r", "sp", "pc", "flags", "flags_prime", "imode", "iff1", "iff2", "halted", "do_delayed_di", "do_delayed_ei", "cycle_counter", "getState", "get_flags_register", "get_flags_prime", "setState", "state", "set_flags_register", "set_flags_prime", "reset", "run_instruction", "doing_delayed_di", "doing_delayed_ei", "opcode", "decode_instruction", "retval", "interrupt", "non_maskable", "data", "push_word", "vector_address", "get_operand", "operand", "op_array", "do_add", "do_adc", "do_sub", "do_sbc", "do_and", "do_xor", "do_or", "do_cp", "func", "instructions", "cycle_counts", "get_signed_offset_byte", "value", "update_xy_flags", "result", "get_parity", "parity_bits", "pop_word", "do_conditional_absolute_jump", "condition", "do_conditional_relative_jump", "offset", "do_conditional_call", "do_conditional_return", "do_reset", "address", "temp", "do_inc", "do_dec", "do_hl_add", "hl", "do_hl_adc", "do_hl_sbc", "do_in", "port", "do_neg", "do_ldi", "read_value", "do_cpi", "temp_carry", "do_ini", "do_outi", "do_ldd", "do_cpd", "do_ind", "do_outd", "do_rlc", "do_rrc", "do_rl", "do_rr", "do_sla", "do_sra", "do_sll", "do_srl", "do_ix_add", "temp_s", "temp_z", "temp_p", "bit_number", "reg_code", "cycle_counts_cb", "dd_instructions", "cycle_counts_dd", "ed_instructions", "cycle_counts_ed", "hl_value", "temp1", "temp2", "ddcb_functions", "Z80", "bus", "s", "MasterAudio", "AY38910_Audio", "master", "i", "val", "SN76489_Audio", "newPOKEYAudio", "count", "audio", "pokey", "POKEYDeviceChannel", "combinePolys", "a", "b", "arr", "n", "divideBy", "NOTPOLY5", "POLY4", "PURE", "VOL_ONLY", "VOLUME_MASK", "POLY9", "CH1_179", "CH3_179", "CH1_CH2", "CH3_CH4", "CH1_FILTER", "CH2_FILTER", "CLOCK_15", "DIV_64", "DIV_15", "POLY4_SIZE", "POLY5_SIZE", "POLY9_SIZE", "POLY17_SIZE", "CHAN1", "CHAN2", "CHAN3", "CHAN4", "CHIP1", "CHIP2", "CHIP3", "CHIP4", "SAMPLE", "FREQ_17_EXACT", "FREQ_17_APPROX", "bit1", "bit2", "bit4", "bit5", "bit9", "bit15", "bit31", "bit17", "bit17_5", "bit5_4", "wavetones", "div2", "div6", "div31", "div93", "bit15_4", "bit5_2", "bit5_6", "tiawavetones", "regs", "counters", "deltas", "volume", "audc", "waveforms", "buffer", "sampleRate", "clock", "baseDelta", "dirty", "length", "rate", "updateValues", "addr", "ctrl", "base", "div", "j", "k", "value", "s", "sample", "d", "v", "wav", "cnt", "on", "WorkerSoundChannel", "worker", "output", "pending", "pendingLength", "e", "buf", "l", "SampleAudio", "clockfreq", "self", "sfrac", "sinc", "accum", "bufpos", "bufferlist", "idrain", "ifill", "nbuffers", "mix", "ape", "buflen", "lbuf", "m", "clearBuffers", "createContext", "AudioContext", "ctx", "arrbuf", "inext", "SampledAudio", "TssChannelAdapter", "chans", "oversample", "c", "sink", "bufs", "ch", "total", "ProbeRecorder", "m", "buflen", "newbuflen", "a", "src", "clocks", "address", "SP", "type", "value", "op", "count", "i", "NullProbe", "src", "BasicHeadlessMachine", "key", "code", "flags", "probe", "data", "title", "origin", "state", "c", "membus", "a", "val", "v", "iobus", "BasicMachine", "audio", "pixels", "BasicScanlineMachine", "trap", "endLineClock", "steps", "sl", "Z80_OPS", "Z80_OPS_ED", "Z80_OPS_CB", "disassembleZ80", "pc", "b0", "b1", "b2", "b3", "op", "n", "am", "bytes", "isaddr", "ireg", "hex", "offset", "CPU6809", "ticks", "rA", "rB", "rX", "rY", "rU", "rS", "PC", "CC", "DP", "F_CARRY", "F_OVERFLOW", "F_ZERO", "F_NEGATIVE", "F_IRQMASK", "F_HALFCARRY", "F_FIRQMASK", "F_ENTIRE", "vecRESET", "vecNMI", "vecSWI", "vecIRQ", "vecFIRQ", "vecSWI2", "vecSWI3", "T", "IRQs", "byteTo", "byteAt", "cycles", "cycles2", "flagsNZ", "setV8", "a", "b", "r", "setV16", "getD", "setD", "v", "PUSHB", "PUSHW", "PUSHBU", "PUSHWU", "PULLB", "PULLW", "PULLBU", "PULLWU", "PSHS", "ucTemp", "i", "PSHU", "PULS", "PULU", "getPBR", "ucPostByte", "setPBR", "TFREXG", "bExchange", "signed", "x", "signed16", "fetch", "fetch16", "v1", "v2", "ReadWord", "addr", "WriteWord", "PostByte", "pb", "preg", "xchg", "sTemp", "sByte", "flagsNZ16", "word", "oINC", "oDEC", "oSUB", "temp", "oSUB16", "oADD", "oADD16", "oADC", "oSBC", "oCMP", "oCMP16", "oNEG", "oLSR", "oASR", "oASL", "oROL", "oldc", "oROR", "oEOR", "oOR", "oAND", "oCOM", "dpadd", "step", "oldT", "oldPC", "opcode", "cf", "nhi", "nlo", "reset", "ds", "ds11", "ds10", "disasm", "c", "d", "pc", "toHexN", "n", "s", "toHex2", "toHex4", "rx", "ro", "j", "sx", "bytes", "mode", "mnemo", "ixr", "disp", "ind", "mod", "ofs8", "ofs16", "Ts", "Tt", "t", "bt", "ba", "tck", "reg", "value", "f", "fx", "_MOS6502", "self", "RDY", "T", "instruction", "aBus", "bus", "boo", "I", "fetchOpcodeAndDecodeInstruction", "PC", "RESET_VECTOR", "SP", "A", "X", "Y", "N", "V", "D", "Z", "C", "opcode", "data", "AD", "BA", "BALCrossed", "IA", "branchOffset", "branchOffsetCrossAdjust", "NMI_VECTOR", "IRQ_VECTOR", "rX", "rY", "bN", "bV", "bZ", "bC", "instructions", "fetchNextOpcode", "fetchOpcodeAndDiscard", "fetchBranchOffset", "fetchADL", "fetchADH", "fetchADLFromBA", "fetchADHFromBA", "fetchBAL", "fetchBAH", "fetchBALFromIA", "fetchBAHFromIA", "addXtoBAL", "low", "addYtoBAL", "add1toBAL", "add1toBAHifBALCrossed", "fetchIAL", "fetchIAH", "add1toIAL", "fetchDataFromImmediate", "fetchDataFromAD", "fetchDataFromBA", "writeDataToAD", "writeDataToBA", "addBranchOffsetToPCL", "oldLow", "newLow", "adjustPCHForBranchOffsetCross", "setZ", "val", "setN", "setV", "setC", "popFromStack", "peekFromStack", "pushToStack", "getStatusBits", "setStatusBits", "illegalOpcode", "op", "implied", "operation", "immediateRead", "zeroPageRead", "absoluteRead", "indirectXRead", "absoluteIndexedRead", "index", "addIndex", "zeroPageIndexedRead", "indirectYRead", "zeroPageWrite", "absoluteWrite", "indirectXWrite", "absoluteIndexedWrite", "zeroPageIndexedWrite", "indirectYWrite", "zeroPageReadModifyWrite", "absoluteReadModifyWrite", "zeroPageIndexedReadModifyWrite", "absoluteIndexedReadModifyWrite", "indirectXReadModifyWrite", "indirectYReadModifyWrite", "opcodes", "BRK", "ORA", "uKIL", "uSLO", "uNOP", "ASL", "PHP", "ASL_ACC", "uANC", "Bxx", "CLC", "JSR", "AND", "uRLA", "BIT", "ROL", "PLP", "ROL_ACC", "SEC", "RTI", "EOR", "uSRE", "LSR", "PHA", "LSR_ACC", "uASR", "JMP_ABS", "CLI", "RTS", "ADC", "uRRA", "ROR", "PLA", "ROR_ACC", "uARR", "JMP_IND", "SEI", "STA", "uSAX", "STY", "STX", "DEY", "TXA", "uANE", "uSHA", "TYA", "TXS", "uSHS", "uSHY", "uSHX", "LDY", "LDA", "LDX", "uLAX", "TAY", "TAX", "uLXA", "CLV", "TSX", "uLAS", "CPY", "CMP", "uDCP", "DEC", "INY", "DEX", "uSBX", "CLD", "CPX", "SBC", "uISB", "INC", "INX", "NOP", "SED", "newC", "addressing", "operand", "AL", "AH", "add", "par", "sub", "oldC", "comp", "newX", "IRQ", "NMI", "reg", "cond", "branchTaken", "state", "mes", "text", "cycletime", "extracycles", "insnlengths", "validinsns", "address", "MOS6502", "_MOS6502", "bus", "itype", "s", "op", "BaseWASMMachine", "prefix", "self", "wmod", "wasmResponse", "wasmBinary", "wasmCompiled", "wasmResult", "biosBinary", "biosResponse", "statesize", "ctrlstatesize", "cpustatesize", "sampbufsize", "rom", "EmuHalt", "srcArray", "address", "value", "pixels", "pixbuf", "state", "audio", "n", "i", "trap", "cpf", "NullProbe", "datalen", "dataaddr", "databuf", "probe", "DebugSymbols", "symbolmap", "debuginfo", "invertMap", "isDebuggable", "arg", "BreakpointList", "result", "id", "BasePlatform", "recorder", "sym", "inspectSymbol", "_a", "o", "path", "data", "BaseDebugPlatform", "cond", "callback", "debugCond", "novideo", "steps", "targetClock", "reason", "evalfunc", "cpuState", "pc", "pcs", "c", "SP0", "clock", "prevState", "prevClock", "clock0", "frame0", "platform", "symmap", "addr2sym", "addr", "b", "hex", "b2", "w", "getToolForFilename_6502", "fn", "Base6502Platform", "membus", "cpu", "_MOS6502", "opcode", "offset", "getOpcodeMetadata_6502", "read", "disassemble6502", "category", "state", "cpuStateToLongString_6502", "dumpRAM", "dumpStackToString", "decodeFlags", "s", "OPMETA_6502", "address", "cpuStateToLongString_Z80", "flags", "printFlags", "cpuStateToLongString_SM83", "af", "BaseZ80Platform", "getToolForFilename_z80", "iobus", "Z80", "cycles", "n", "cyc", "sp", "start", "end", "disassembleZ80", "cpuStateToLongString_6809", "getToolForFilename_6809", "Base6809Platform", "CPU6809", "mem", "jsrop", "bigendian", "nraw", "jsrofs", "lookupSymbol", "extra", "addr2symbol", "hasVideo", "hasAudio", "hasKeyInput", "hasPaddleInput", "arg", "isRaster", "hasProbe", "hasBIOS", "hasSerialIO", "BaseMachinePlatform", "BaseDebugPlatform", "mainElement", "s", "m", "BaseWASMMachine", "videoFrequency", "hasVideo", "vp", "RasterVideo", "hasKeyInput", "ControllerPoller", "AnimationTimer", "hasAudio", "ap", "SampledAudio", "ProbeRecorder", "title", "data", "SerialIOVisualizer", "origin", "novideo", "trap", "steps", "_a", "x", "y", "ctx", "drawCrosshair", "step", "flag", "addr", "isDebuggable", "category", "state", "Base6502MachinePlatform", "getOpcodeMetadata_6502", "fn", "getToolForFilename_6502", "pc", "read", "disassemble6502", "cpuStateToLongString_6502", "dumpRAM", "dumpStackToString", "BaseZ80MachinePlatform", "getToolForFilename_z80", "cpuStateToLongString_Z80", "sp", "start", "end", "disassembleZ80", "Base6809MachinePlatform", "getToolForFilename_6809", "cpuStateToLongString_6809", "CPU6809", "parentElement", "device", "lastop", "ev", "byteToASCII"] } diff --git a/gen/chunk-BNFOPPUS.js b/gen/chunk-BNFOPPUS.js new file mode 100644 index 00000000..471c16ee --- /dev/null +++ b/gen/chunk-BNFOPPUS.js @@ -0,0 +1,6 @@ +function q(e,t){for(e+="";e.length0?e.substr(0,t):e}function K(e,t){return t||(t=2),t==8?K(e>>16&65535,4)+K(e&65535,4):w(e,t,16)}function re(e,t){return t||(t=8),w(e,t,2)}function w(e,t,n){try{for(var i=e.toString(n).toUpperCase();i.length=0)for(;r'+u+""),a+=u,r++,o++}for(;o>6)+3,d=(p&63)+8):(_=i[p&31],d=(p>>5)+1),x=0;x<_;x++)l[y]=l[y-d],y++;else l[y++]=h;else if(c==t)for(var y=0,L=a.length,x=e;x=192&&r<224)r=(r&31)<<6|e[i++]&63;else if(r=(r&15)<<12|(e[i]&63)<<6|e[i+1]&63,i+=2,r==65279)continue;t+=String.fromCharCode(r)}return t}function ue(e,t){var n=0;if(e){e=e.toUpperCase();let a=[".CHR",".BIN",".DAT",".PAL",".NAM",".RLE",".LZ4",".NSF"];for(var i of a)e.endsWith(i)&&n++}for(var r=0;r<(t?t.length:0);){let a=t[r++];if((a&128)==0){if(a<9||a>=14&&a<26||a==127){n++;break}}else{var o=0;for((a&224)==192?o=1:(a&240)==224?o=2:(a&248)==240?o=3:(a<160||a==255)&&n++;o--;)if(r>=t.length||(t[r++]&192)!=128){n++;break}}}return n>0}function le(e,t,n){for(var i=n||9,r=t.length,o=e._malloc(r+1),a=0;a0&&(i+=" "),i+=e&o?t[r]:"-"}return i}function he(e){return(e&255)<<16|e>>16&255|e&65280}function pe(e,t,n){return e&255|(t&255)<<8|(n&255)<<16|4278190080}function M(e,t,n){return nt?t:n}function ge(e){return e.length==0?"":(e.match(/^[a-zA-Z_]/)||(e="_"+e),e.replace(/\W+/g,"_"))}function me(e){for(var t=0,n=e[t++],i=[],r=n;t{var i=document.createElement("script");i.onload=t,i.onerror=n,i.src=e,document.getElementsByTagName("head")[0].appendChild(i)})}function Ke(e){e.startsWith("?")&&(e=e.substr(1));var t=e.split("&");if(!t||t.length==0)return{};for(var n={},i=0;i>17,e^=e<<5,(E=e)&255}function Se(){return E}function we(e){E=e}function k(e,t,n,i){var r=e.createElement("canvas");return r.width=n,r.height=i,r.classList.add("emuvideo"),r.tabIndex=0,t.appendChild(r),r}function W(e,t){e.onkeydown=n=>{let i=N(n);t(n.which,n.keyCode,1|i),i||n.preventDefault()},e.onkeyup=n=>{t(n.which,n.keyCode,64|N(n))}}var C=class{constructor(t,n,i,r){this.paddle_x=128;this.paddle_y=128;this.paddle_buttons=[!1,!1,!1];this.mainElement=t,this.width=n,this.height=i,this.options=r}setRotate(t){var n=this.canvas;t?(n.style.transform="rotate("+t+"deg)",n.width{var i=Q(t,n),r=Math.round(i.x*255/this.canvas.width),o=Math.round(i.y*255/this.canvas.height);this.paddle_x=M(0,255,r),this.paddle_y=M(0,255,o)}).mousedown(n=>{this.paddle_buttons[0]=!n.shiftKey&&!n.altKey,this.paddle_buttons[1]=n.shiftKey&&!n.altKey,this.paddle_buttons[2]=n.altKey&&!n.shiftKey}).mouseup(n=>{this.paddle_buttons.fill(!1)})}},D=class extends C{constructor(){super(...arguments);this.persistenceAlpha=.5;this.jitter=1;this.gamma=.8;this.COLORS=["#111111","#1111ff","#11ff11","#11ffff","#ff1111","#ff11ff","#ffff11","#ffffff"]}create(){super.create(),this.sx=this.width/1024,this.sy=this.height/1024}clear(){var n=this.ctx;n.globalCompositeOperation="source-over",n.globalAlpha=this.persistenceAlpha,n.fillStyle="#000000",n.fillRect(0,0,this.width,this.height),n.globalAlpha=1,n.globalCompositeOperation="lighter"}drawLine(n,i,r,o,a,s){var u=this.ctx,l=this.sx,c=this.sy;if(a>0){var v=Math.pow(a/255,this.gamma);u.globalAlpha=v,u.lineWidth=3,u.beginPath();var g=this.jitter*(Math.random()-.5),m=this.jitter*(Math.random()-.5);n+=g,r+=g,i+=m,o+=m,u.moveTo(n*l,this.height-i*c),n==r&&i==o?u.lineTo(r*l+1,this.height-o*c):u.lineTo(r*l,this.height-o*c),u.strokeStyle=this.COLORS[s&7],u.stroke()}}};function De(e,t,n,i){e!=null&&e.setLineDash&&(e.fillStyle="rgba(0,0,0,0.25)",e.fillRect(t-2,0,5,32767),e.fillRect(0,n-2,32767,5),e.lineWidth=i,e.strokeStyle="rgba(255,255,255,0.75)",e.setLineDash([i*2,i*2]),e.beginPath(),e.moveTo(t,0),e.lineTo(t,32767),e.moveTo(0,n),e.lineTo(32767,n),e.stroke())}var T=class{constructor(t){this.mem=new Uint8Array(new ArrayBuffer(t))}},F=class e extends Error{constructor(n,i){super(n);this.squelchError=!0;this.$loc=i,Object.setPrototypeOf(this,e.prototype)}},X=!1,U=class{constructor(t,n){this.running=!1;this.pulsing=!1;this.nextts=0;this.useReqAnimFrame=X&&typeof window.requestAnimationFrame=="function";this.frameRate=t,this.intervalMsec=1e3/t,this.callback=n}scheduleFrame(t){var n=i=>{try{this.nextFrame(this.useReqAnimFrame?i:Date.now())}catch(r){throw this.running=!1,this.pulsing=!1,r}};this.useReqAnimFrame?window.requestAnimationFrame(n):setTimeout(n,t)}nextFrame(t){t>this.nextts&&(this.running&&this.callback(),this.nframes==0&&(this.startts=t),this.nframes++==300&&console.log("Avg framerate: "+this.nframes*1e3/(t-this.startts)+" fps")),this.nextts+=this.intervalMsec,t-this.nextts>1e3&&(this.nextts=t),this.running?this.scheduleFrame(this.nextts-t):this.pulsing=!1}isRunning(){return this.running}start(){this.running||(this.running=!0,this.nextts=0,this.nframes=0,this.pulsing||(this.scheduleFrame(0),this.pulsing=!0))}stop(){this.running=!1}};function Fe(e,t,n){for(var i="",r=e.BYTES_PER_ELEMENT||1,o=Math.ceil(16/r),a=e instanceof Float32Array||e instanceof Float64Array,s=0;s{if(!t){n(null,r,o,a);return}var s=t[r];if(s||(s=t[0]),n&&(s||i)&&n(s,r,o,a),s){var u=s.mask;u<0&&(u=-u,a&65&&(a^=65)),a&1?e[s.index]|=u:a&64&&(e[s.index]&=~u)}}}function Ue(e,t,n,i,r){var o=Z(t,n,i,r);return e.setKeyboardEvents(o),new P(o)}function Ne(e){for(var t=new Map,n=0;n{console.log("Gamepad connected:",n),this.reset()}),window.addEventListener("gamepaddisconnected",n=>{console.log("Gamepad disconnected:",n),this.reset()})}reset(){var n,i;if(typeof navigator.getGamepads=="function"){let r=(n=navigator.getGamepads())==null?void 0:n.length;this.state=new Array(r),this.lastState=new Array(r);for(var t=0;t0}}start(){this.reset()}stop(){this.active=!1}poll(){if(this.active)for(var t=navigator.getGamepads&&navigator.getGamepads(),n=0;nt)throw Error("Data too long, "+e.length+" > "+t);var i=new T(t);return n?i.mem.set(e,t-e.length):i.mem.set(e),i.mem}function z(e,t){var n=this;function i(){var r="";t&&t.gmask&&(r+="a&="+t.gmask+";");for(var o=0;o="+s+" && a<="+u+"){",l&&(r+="a&="+l+";"),r+="return this.__fn"+o+`(a,v)&0xff;} +`}return r+="return "+((t==null?void 0:t.defaultval)|0)+";",new Function("a","v",r)}return i().bind(n)}function Oe(e,t){return new z(e,t)}function Q(e,t){var i=e.getBoundingClientRect(),r=window.getComputedStyle(e),o=parseFloat(r.borderLeftWidth)+parseFloat(r.paddingLeft),a=parseFloat(r.borderRightWidth)+parseFloat(r.paddingRight),s=parseFloat(r.borderTopWidth)+parseFloat(r.paddingTop),u=parseFloat(r.borderBottomWidth)+parseFloat(r.paddingBottom),l=i.width-o-a,c=i.height-s-u,v=e.width/Math.floor(l-2*.5),g=e.height/Math.floor(c-2*.5),m=(t.clientX-.5-i.left-o)*v,V=(t.clientY-.5-i.top-s)*g;return{x:Math.max(0,Math.min(e.width,m)),y:Math.max(0,Math.min(e.height,V))}}export{q as a,j as b,J as c,ee as d,te as e,ne as f,K as g,re as h,ie as i,ae as j,oe as k,se as l,R as m,O as n,I as o,ue as p,le as q,fe as r,ce as s,he as t,pe as u,M as v,ge as w,me as x,ye as y,G as z,ve as A,be as B,xe as C,_e as D,de as E,Ke as F,Ae as G,Ee as H,Ve as I,Te as J,Pe as K,Se as L,we as M,k as N,C as O,D as P,De as Q,T as R,F as S,U as T,Fe as U,f as V,Z as W,Ue as X,Ne as Y,P as Z,Re as _,Oe as $,Q as aa}; +//# sourceMappingURL=chunk-BNFOPPUS.js.map diff --git a/gen/chunk-5H5GMVON.js.map b/gen/chunk-BNFOPPUS.js.map similarity index 84% rename from gen/chunk-5H5GMVON.js.map rename to gen/chunk-BNFOPPUS.js.map index 11a04d72..d88f78d7 100644 --- a/gen/chunk-5H5GMVON.js.map +++ b/gen/chunk-BNFOPPUS.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../src/common/util.ts", "../src/common/emu.ts"], - "sourcesContent": ["\nexport function lpad(s:string, n:number):string {\n s += ''; // convert to string\n while (s.length 0) ? s.substr(0, pos) : s;\n}\n\nexport function hex(v:number, nd?:number) {\n if (!nd) nd = 2;\n if (nd == 8) {\n return hex((v>>16)&0xffff,4) + hex(v&0xffff,4);\n } else {\n return toradix(v,nd,16);\n }\n}\n\nexport function tobin(v:number, nd?:number) {\n if (!nd) nd = 8;\n return toradix(v,nd,2);\n}\n\nexport function toradix(v:number, nd:number, radix:number) {\n try {\n var s = v.toString(radix).toUpperCase();\n while (s.length < nd)\n s = \"0\" + s;\n return s;\n } catch (e) {\n return v+\"\";\n }\n}\n\nexport function arrayCompare(a:ArrayLike, b:ArrayLike):boolean {\n if (a == null && b == null) return true;\n if (a == null) return false;\n if (b == null) return false;\n if (typeof a.length != 'number' || typeof b.length != 'number') return false;\n if (a.length != b.length) return false;\n for (var i=0; i= 0) {\n while (i < s1.length && split1[i].indexOf(\"\\n\") < 0)\n i++;\n }\n if (w1 != w2) {\n w2 = '' + w2 + '';\n }\n result += w2;\n i++;\n j++;\n }\n while (j < split2.length) {\n result += split2[j++];\n }\n return result;\n}\n\nexport function lzgmini() {\n\n // Constants\n var LZG_HEADER_SIZE = 16;\n var LZG_METHOD_COPY = 0;\n var LZG_METHOD_LZG1 = 1;\n\n // LUT for decoding the copy length parameter\n var LZG_LENGTH_DECODE_LUT = [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,\n 20,21,22,23,24,25,26,27,28,29,35,48,72,128];\n\n // Decoded data (produced by the decode() method)\n var outdata = null;\n\n // Calculate the checksum\n var calcChecksum = function(data) {\n var a = 1;\n var b = 0;\n var i = LZG_HEADER_SIZE;\n while (i < data.length)\n {\n a = (a + (data[i] & 0xff)) & 0xffff;\n b = (b + a) & 0xffff;\n i++;\n }\n return (b << 16) | a;\n }\n\n // Decode LZG coded data. The function returns the size of the decoded data.\n // Use any of the get* methods to retrieve the decoded data.\n this.decode = function(data:number[]):number[] {\n // Start by clearing the decompressed array in this object\n outdata = null;\n\n // Check magic ID\n if ((data.length < LZG_HEADER_SIZE) || (data[0] != 76) ||\n (data[1] != 90) || (data[2] != 71))\n {\n return null;\n }\n \n // what's the length?\n var uncomplen = data[6] | (data[5]<<8) | (data[4]<<16) | (data[3]<<24);\n\n // Calculate & check the checksum\n var checksum = ((data[11] & 0xff) << 24) |\n ((data[12] & 0xff) << 16) |\n ((data[13] & 0xff) << 8) |\n (data[14] & 0xff);\n if (calcChecksum(data) != checksum)\n {\n return null;\n }\n\n var dst = new Array();\n // Check which method to use\n var method = data[15] & 0xff;\n if (method == LZG_METHOD_LZG1)\n {\n // Get marker symbols\n var m1 = data[16] & 0xff;\n var m2 = data[17] & 0xff;\n var m3 = data[18] & 0xff;\n var m4 = data[19] & 0xff;\n\n // Main decompression loop\n var symbol, b, b2, b3, len, offset;\n var dstlen = 0;\n var k = LZG_HEADER_SIZE + 4;\n var datalen = data.length;\n while (k <= datalen)\n {\n symbol = data[k++] & 0xff;\n if ((symbol != m1) && (symbol != m2) && (symbol != m3) && (symbol != m4))\n {\n // Literal copy\n dst[dstlen++] = symbol;\n }\n else\n {\n b = data[k++] & 0xff;\n if (b != 0)\n {\n // Decode offset / length parameters\n if (symbol == m1)\n {\n // marker1 - \"Distant copy\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n b2 = data[k++] & 0xff;\n b3 = data[k++] & 0xff;\n offset = (((b & 0xe0) << 11) | (b2 << 8) | b3) + 2056;\n }\n else if (symbol == m2)\n {\n // marker2 - \"Medium copy\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n b2 = data[k++] & 0xff;\n offset = (((b & 0xe0) << 3) | b2) + 8;\n }\n else if (symbol == m3)\n {\n // marker3 - \"Short copy\"\n len = (b >> 6) + 3;\n offset = (b & 63) + 8;\n }\n else\n {\n // marker4 - \"Near copy (incl. RLE)\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n offset = (b >> 5) + 1;\n }\n\n // Copy the corresponding data from the history window\n for (i = 0; i < len; i++)\n {\n dst[dstlen] = dst[dstlen-offset];\n dstlen++;\n }\n }\n else\n {\n // Literal copy (single occurance of a marker symbol)\n dst[dstlen++] = symbol;\n }\n }\n }\n\n }\n else if (method == LZG_METHOD_COPY)\n {\n // Plain copy\n var dstlen = 0;\n var datalen = data.length;\n for (var i = LZG_HEADER_SIZE; i < datalen; i++)\n {\n dst[dstlen++] = data[i] & 0xff;\n }\n }\n else\n {\n // Unknown method\n return null;\n }\n // Store the decompressed data in the lzgmini object for later retrieval\n if (dst.length < uncomplen) return null; // data too short\n outdata = dst.slice(0, uncomplen);\n return outdata;\n }\n\n // Get the decoded byte array\n this.getByteArray = function():number[]\n {\n return outdata;\n }\n\n // Get the decoded string from a Latin 1 (or ASCII) encoded array\n this.getStringLatin1 = function():string {\n return byteArrayToString(outdata);\n }\n\n // Get the decoded string from an UTF-8 encoded array\n this.getStringUTF8 = function():string {\n return byteArrayToUTF8(outdata);\n }\n}\n\nexport function stringToByteArray(s:string) : Uint8Array {\n var a = new Uint8Array(s.length);\n for (var i=0; i= 192) && (c < 224)) {\n c = ((c & 31) << 6) | (data[i++] & 63);\n } else {\n c = ((c & 15) << 12) | ((data[i] & 63) << 6) | (data[i+1] & 63);\n i += 2;\n if (c == 0xfeff) continue; // ignore BOM\n }\n str += String.fromCharCode(c);\n }\n }\n return str;\n}\n\nexport function removeBOM(s:string) {\n if (s.charCodeAt(0) === 0xFEFF) {\n s = s.substr(1);\n }\n return s;\n}\n\nexport function isProbablyBinary(path:string, data?:number[] | Uint8Array) : boolean {\n var score = 0;\n // check extensions\n if (path) {\n path = path.toUpperCase();\n const BINEXTS = ['.CHR','.BIN','.DAT','.PAL','.NAM','.RLE','.LZ4','.NSF'];\n for (var ext of BINEXTS) {\n if (path.endsWith(ext)) score++;\n }\n }\n // decode as UTF-8\n for (var i = 0; i < (data?data.length:0);) {\n let c = data[i++];\n if ((c & 0x80) == 0) {\n // more likely binary if we see a NUL or obscure control character\n if (c < 9 || (c >= 14 && c < 26) || c == 0x7f) {\n score++;\n break;\n }\n } else {\n // look for invalid unicode sequences\n var nextra = 0;\n if ((c & 0xe0) == 0xc0) nextra = 1;\n else if ((c & 0xf0) == 0xe0) nextra = 2;\n else if ((c & 0xf8) == 0xf0) nextra = 3;\n else if (c < 0xa0) score++;\n else if (c == 0xff) score++;\n while (nextra--) {\n if (i >= data.length || (data[i++] & 0xc0) != 0x80) {\n score++;\n break;\n }\n }\n }\n }\n return score > 0;\n}\n\n// need to load liblzg.js first\nexport function compressLZG(em_module, inBuffer:number[], levelArg?:boolean) : Uint8Array {\n var level = levelArg || 9;\n var inLen = inBuffer.length;\n var inPtr = em_module._malloc(inLen + 1);\n for (var i = 0; i < inLen; i++) {\n em_module.setValue(inPtr + i, inBuffer[i], 'i8');\n }\n var maxEncSize = em_module._LZG_MaxEncodedSize(inLen);\n var outPtr = em_module._malloc(maxEncSize + 1);\n var compLen = em_module.ccall('compress_lzg', 'number', ['number', 'number', 'number', 'number', 'number'], [level, inPtr, inLen, maxEncSize, outPtr]);\n em_module._free(inPtr);\n var outBuffer = new Uint8Array(compLen);\n for (var i = 0; i < compLen; i++) {\n outBuffer[i] = em_module.getValue(outPtr + i, 'i8');\n }\n em_module._free(outPtr);\n return outBuffer;\n}\n\n// only does primitives, 1D arrays and no recursion\nexport function safe_extend(deep, dest, src) {\n // TODO: deep ignored\n for (var key in src) {\n var val = src[key];\n var type = typeof(val);\n if (val === null || type == 'undefined') {\n dest[key] = val;\n } else if (type == 'function') {\n // ignore function\n } else if (type == 'object') {\n if (val['slice']) { // array?\n dest[key] = val.slice();\n } else {\n // ignore object\n }\n } else {\n dest[key] = val;\n }\n }\n return dest;\n}\n\nexport function printFlags(val:number, names:string[], r2l:boolean) {\n var s = '';\n for (var i=0; i 0) s += \" \";\n s += (val & bit) ? names[i] : \"-\";\n }\n }\n return s;\n}\n\nexport function rgb2bgr(x) {\n return ((x&0xff)<<16) | ((x>>16)&0xff) | (x&0x00ff00);\n}\n\nexport function RGBA(r:number,g:number,b:number) {\n return (r&0xff) | ((g&0xff)<<8) | ((b&0xff)<<16) | 0xff000000;\n}\n\nexport function clamp(minv:number, maxv:number, v:number) {\n return (v < minv) ? minv : (v > maxv) ? maxv : v;\n}\n\nexport function safeident(s : string) : string {\n // if starts with non-alpha character, prefix with '_'\n if (s.length == 0) return '';\n if (!s.match(/^[a-zA-Z_]/)) s = '_' + s;\n return s.replace(/\\W+/g, \"_\");\n}\n\nexport function rle_unpack(src : Uint8Array) : Uint8Array {\n var i = 0;\n var tag = src[i++];\n var dest = [];\n var data = tag;\n while (i < src.length) {\n var ch = src[i++];\n if (ch == tag) {\n var count = src[i++];\n for (var j=0; jvoid, datatype:'text'|'arraybuffer') {\n var oReq = new XMLHttpRequest();\n oReq.open(\"GET\", url, true);\n oReq.responseType = datatype;\n oReq.onload = function (oEvent) {\n if (oReq.status == 200) {\n var data = oReq.response;\n if (data instanceof ArrayBuffer) {\n data = new Uint8Array(data);\n }\n success(data);\n } else if (oReq.status == 404) {\n success(null);\n } else {\n throw Error(\"Error \" + oReq.status + \" loading \" + url);\n }\n }\n oReq.onerror = function (oEvent) {\n success(null);\n }\n oReq.ontimeout = function (oEvent) {\n throw Error(\"Timeout loading \" + url);\n }\n oReq.send(null);\n}\n\n// get platform ID without . emulator\nexport function getBasePlatform(platform : string) : string {\n return platform.split('.')[0];\n}\n\n// get platform ID without - specialization\nfunction getRootPlatform(platform : string) : string {\n return platform.split('-')[0];\n}\n\n// get platform ID without emulator or specialization\nexport function getRootBasePlatform(platform : string) : string {\n return getRootPlatform(getBasePlatform(platform));\n}\n\nexport function isArray(obj: any) : obj is ArrayLike {\n return obj != null && (Array.isArray(obj) || isTypedArray(obj));\n}\n\nexport function isTypedArray(obj: any) : obj is ArrayLike {\n return obj != null && obj['BYTES_PER_ELEMENT'];\n}\n\nexport function convertDataToUint8Array(data: string|Uint8Array) : Uint8Array {\n return (typeof data === 'string') ? stringToByteArray(data) : data;\n}\n\nexport function convertDataToString(data: string|Uint8Array) : string {\n return (data instanceof Uint8Array) ? byteArrayToUTF8(data) : data;\n}\n\nexport function byteToASCII(b: number) : string {\n if (b < 32)\n return String.fromCharCode(b + 0x2400);\n else\n return String.fromCharCode(b);\n}\n\nexport function loadScript(scriptfn:string) : Promise {\n return new Promise( (resolve, reject) => {\n var script = document.createElement('script');\n script.onload = resolve;\n script.onerror = reject;\n script.src = scriptfn;\n document.getElementsByTagName('head')[0].appendChild(script);\n });\n}\n\nexport function decodeQueryString(qs : string) : {} {\n if (qs.startsWith('?')) qs = qs.substr(1);\n var a = qs.split('&');\n if (!a || a.length == 0)\n return {};\n var b = {};\n for (var i = 0; i < a.length; ++i) {\n var p = a[i].split('=', 2);\n if (p.length == 1)\n b[p[0]] = \"\";\n else\n b[p[0]] = decodeURIComponent(p[1].replace(/\\+/g, \" \"));\n }\n return b;\n}\n\nexport function parseBool(s : string) : boolean {\n if (!s) return false;\n if (s == 'false' || s == '0') return false;\n if (s == 'true' || s == '1') return true;\n return s ? true : false;\n}\n\n///\n\nexport class XMLParseError extends Error {\n}\n\nexport interface XMLNode {\n type: string;\n text: string | null;\n children: XMLNode[];\n attrs: { [id: string]: string };\n obj: any;\n}\n\nexport type XMLVisitFunction = (node: XMLNode) => any;\n\nfunction escapeXML(s: string): string {\n if (s.indexOf('&') >= 0) {\n return s.replace(/'/g, \"'\")\n .replace(/"/g, '\"')\n .replace(/>/g, '>')\n .replace(/</g, '<')\n .replace(/&/g, '&');\n } else {\n return s;\n }\n}\n\nexport function parseXMLPoorly(s: string, openfn?: XMLVisitFunction, closefn?: XMLVisitFunction): XMLNode {\n const tag_re = /[<]([/]?)([?a-z_-]+)([^>]*)[>]+|(\\s*[^<]+)/gi;\n const attr_re = /\\s*(\\w+)=\"(.*?)\"\\s*/gi;\n var fm: RegExpMatchArray;\n var stack: XMLNode[] = [];\n var top: XMLNode;\n\n function closetop() {\n top = stack.pop();\n if (top == null || top.type != ident) throw new XMLParseError(\"mismatch close tag: \" + ident);\n if (closefn) {\n top.obj = closefn(top);\n }\n if (stack.length == 0) throw new XMLParseError(\"close tag without open: \" + ident);\n stack[stack.length - 1].children.push(top);\n }\n function parseattrs(as: string): { [id: string]: string } {\n var am;\n var attrs = {};\n if (as != null) {\n while (am = attr_re.exec(as)) {\n attrs[am[1]] = escapeXML(am[2]);\n }\n }\n return attrs;\n }\n while (fm = tag_re.exec(s)) {\n var [_m0, close, ident, attrs, content] = fm;\n //console.log(stack.length, close, ident, attrs, content);\n if (close) {\n closetop();\n } else if (ident) {\n var node = { type: ident, text: null, children: [], attrs: parseattrs(attrs), obj: null };\n stack.push(node);\n if (attrs) {\n parseattrs(attrs);\n }\n if (openfn) {\n node.obj = openfn(node);\n }\n if (attrs && attrs.endsWith('/')) closetop();\n } else if (content != null) {\n if (stack.length == 0) throw new XMLParseError(\"content without element\");\n var txt = escapeXML(content as string).trim();\n if (txt.length) stack[stack.length - 1].text = txt;\n }\n }\n if (stack.length != 1) throw new XMLParseError(\"tag not closed\");\n if (stack[0].type != '?xml') throw new XMLParseError(\"?xml needs to be first element\");\n return top;\n}\n\nexport function escapeHTML(s: string): string {\n return s.replace(/[&]/g, '&').replace(/[<]/g, '<').replace(/[>]/g, '>');\n}\n\n// lame factorization for displaying bitmaps\n// returns a > b such that a * b == x (or higher), a >= mina, b >= minb\nexport function findIntegerFactors(x: number, mina: number, minb: number, aspect: number) : {a: number, b: number} {\n let a = x;\n let b = 1;\n if (minb > 1 && minb < a) {\n a = Math.ceil(x / minb);\n b = minb;\n }\n while (a > b) {\n let a2 = a;\n let b2 = b;\n if ((a & 1) == 0) {\n b2 = b * 2;\n a2 = a / 2;\n }\n if ((a % 3) == 0) {\n b2 = b * 3;\n a2 = a / 3;\n }\n if ((a % 5) == 0) {\n b2 = b * 5;\n a2 = a / 5;\n }\n if (a2 < mina) break;\n if (a2 < b2 * aspect) break;\n a = a2;\n b = b2;\n }\n return {a, b};\n}\n\nexport class FileDataCache {\n maxSize : number = 8000000;\n size : number;\n cache : Map;\n constructor() {\n this.reset();\n }\n get(key : string) : string|Uint8Array {\n return this.cache.get(key);\n }\n put(key : string, value : string|Uint8Array) {\n this.cache.set(key, value);\n this.size += value.length;\n if (this.size > this.maxSize) {\n console.log('cache reset', this);\n this.reset();\n }\n }\n reset() {\n this.cache = new Map();\n this.size = 0;\n }\n}\n\nexport function coerceToArray(arrobj: any) : T[] {\n if (Array.isArray(arrobj)) return arrobj;\n else if (arrobj != null && typeof arrobj[Symbol.iterator] === 'function') return Array.from(arrobj);\n else if (typeof arrobj === 'object') return Array.from(Object.values(arrobj))\n else throw new Error(`Expected array or object, got \"${arrobj}\"`);\n}\n\nexport function replaceAll(s:string, search:string, replace:string) : string {\n if (s == '') return '';\n if (search == '') return s;\n return s.split(search).join(replace);\n}\n\nexport function getCookie(name: string) : string {\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(';');\n for(var i=0;i < ca.length;i++) {\n var c = ca[i];\n while (c.charAt(0)==' ') c = c.substring(1,c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);\n }\n return null;\n}\n\n", "\nimport { hex, clamp, lpad } from \"./util\";\nimport { SourceLocation } from \"./workertypes\";\n\n// Emulator classes\n// Most of this stuff helps emulators use the DOM\n// and do keyboard/mouse/gamepad/timer handling, etc.\n\nexport var PLATFORMS = {};\n\nvar _random_state = 1;\n\nexport function noise() {\n let x = _random_state;\n x ^= x << 13;\n x ^= x >> 17;\n x ^= x << 5;\n return (_random_state = x) & 0xff;\n}\n\nexport function getNoiseSeed() {\n return _random_state;\n}\n\nexport function setNoiseSeed(x: number) {\n _random_state = x;\n}\n\ntype KeyboardCallback = (which: number, charCode: number, flags: KeyFlags) => void;\n\nexport function __createCanvas(doc: HTMLDocument, mainElement: HTMLElement, width: number, height: number): HTMLCanvasElement {\n var canvas = doc.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n canvas.classList.add(\"emuvideo\");\n canvas.tabIndex = 0; // Make it focusable and tabbable\n mainElement.appendChild(canvas);\n return canvas;\n}\n\nexport enum KeyFlags {\n KeyDown = 1,\n Shift = 2,\n Ctrl = 4,\n Alt = 8,\n Meta = 16,\n KeyUp = 64,\n KeyPress = 128,\n}\n\n// TODO: don't use which/keyCode anymore?\n// TODO: let keycode = e.key ? e.key.charCodeAt(0) : e.keyCode;\n// TODO: let charCode = e.key ? e.key.charCodeAt(0) : e.charCode;\nexport function _setKeyboardEvents(canvas: HTMLElement, callback: KeyboardCallback) {\n canvas.onkeydown = (e) => {\n let flags = _metakeyflags(e);\n callback(e.which, e.keyCode, KeyFlags.KeyDown | flags);\n if (!flags) e.preventDefault(); // eat all keys that don't have a modifier\n };\n canvas.onkeyup = (e) => {\n callback(e.which, e.keyCode, KeyFlags.KeyUp | _metakeyflags(e));\n };\n};\n\ntype VideoCanvasOptions = { rotate?: number, overscan?: boolean, aspect?: number };\n\nexport class RasterVideo {\n\n mainElement: HTMLElement;\n width: number;\n height: number;\n options: VideoCanvasOptions;\n\n constructor(mainElement: HTMLElement, width: number, height: number, options?: VideoCanvasOptions) {\n this.mainElement = mainElement;\n this.width = width;\n this.height = height;\n this.options = options;\n }\n\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n imageData: ImageData;\n datau32: Uint32Array;\n vcanvas: JQuery;\n\n // Start paddles/joystick centered in [0,255] range.\n paddle_x = 128;\n paddle_y = 128;\n // Platforms can support up to three buttons.\n paddle_buttons: boolean[] = [false, false, false];\n\n setRotate(rotate: number) {\n var canvas = this.canvas;\n if (rotate) {\n // TODO: aspect ratio?\n canvas.style.transform = \"rotate(\" + rotate + \"deg)\";\n if (canvas.width < canvas.height)\n canvas.style.paddingLeft = canvas.style.paddingRight = \"10%\";\n } else {\n canvas.style.transform = null;\n canvas.style.paddingLeft = canvas.style.paddingRight = null;\n }\n }\n\n create(doc?: HTMLDocument) {\n var canvas;\n this.canvas = canvas = __createCanvas(doc || document, this.mainElement, this.width, this.height);\n this.vcanvas = $(canvas);\n if (this.options && this.options.rotate) {\n this.setRotate(this.options.rotate);\n }\n if (this.options && this.options.overscan) {\n this.vcanvas.css('padding', '0px');\n }\n if (this.options && this.options.aspect) {\n console.log(this.options);\n this.vcanvas.css('aspect-ratio', this.options.aspect + \"\");\n }\n this.ctx = canvas.getContext('2d');\n this.imageData = this.ctx.createImageData(this.width, this.height);\n this.datau32 = new Uint32Array(this.imageData.data.buffer);\n }\n\n setKeyboardEvents(callback) {\n _setKeyboardEvents(this.canvas, callback);\n }\n\n getFrameData() { return this.datau32; }\n\n getContext() { return this.ctx; }\n\n updateFrame(sx?: number, sy?: number, dx?: number, dy?: number, w?: number, h?: number) {\n if (w && h)\n this.ctx.putImageData(this.imageData, sx, sy, dx, dy, w, h);\n else\n this.ctx.putImageData(this.imageData, 0, 0);\n }\n\n clearRect(dx: number, dy: number, w: number, h: number) {\n var ctx = this.ctx;\n ctx.fillStyle = '#000000';\n ctx.fillRect(dx, dy, w, h);\n }\n\n setupMouseEvents(el?: HTMLCanvasElement) {\n if (!el) el = this.canvas;\n $(el).mousemove((e) => {\n var pos = getMousePos(el, e);\n var new_x = Math.round(pos.x * 255 / this.canvas.width);\n var new_y = Math.round(pos.y * 255 / this.canvas.height);\n this.paddle_x = clamp(0, 255, new_x);\n this.paddle_y = clamp(0, 255, new_y);\n }).mousedown((e) => {\n // TODO Allows users to specify mapping in settings.\n this.paddle_buttons[0] = !e.shiftKey && !e.altKey;\n this.paddle_buttons[1] = e.shiftKey && !e.altKey;\n this.paddle_buttons[2] = e.altKey && !e.shiftKey;\n }).mouseup((e) => {\n this.paddle_buttons.fill(false);\n });\n };\n}\n\nexport class VectorVideo extends RasterVideo {\n\n persistenceAlpha = 0.5;\n jitter = 1.0;\n gamma = 0.8;\n sx: number;\n sy: number;\n\n create() {\n super.create();\n this.sx = this.width / 1024.0;\n this.sy = this.height / 1024.0;\n }\n\n clear() {\n var ctx = this.ctx;\n ctx.globalCompositeOperation = 'source-over';\n ctx.globalAlpha = this.persistenceAlpha;\n ctx.fillStyle = '#000000';\n ctx.fillRect(0, 0, this.width, this.height);\n ctx.globalAlpha = 1.0;\n ctx.globalCompositeOperation = 'lighter';\n }\n\n COLORS = [\n '#111111',\n '#1111ff',\n '#11ff11',\n '#11ffff',\n '#ff1111',\n '#ff11ff',\n '#ffff11',\n '#ffffff'\n ];\n\n drawLine(x1: number, y1: number, x2: number, y2: number, intensity: number, color: number) {\n var ctx = this.ctx;\n var sx = this.sx;\n var sy = this.sy;\n //console.log(x1,y1,x2,y2,intensity,color);\n if (intensity > 0) {\n // TODO: landscape vs portrait\n var alpha = Math.pow(intensity / 255.0, this.gamma);\n ctx.globalAlpha = alpha;\n ctx.lineWidth = 3;\n ctx.beginPath();\n // TODO: bright dots\n var jx = this.jitter * (Math.random() - 0.5);\n var jy = this.jitter * (Math.random() - 0.5);\n x1 += jx;\n x2 += jx;\n y1 += jy;\n y2 += jy;\n ctx.moveTo(x1 * sx, this.height - y1 * sy);\n if (x1 == x2 && y1 == y2)\n ctx.lineTo(x2 * sx + 1, this.height - y2 * sy);\n else\n ctx.lineTo(x2 * sx, this.height - y2 * sy);\n ctx.strokeStyle = this.COLORS[color & 7];\n ctx.stroke();\n }\n }\n}\n\nexport function drawCrosshair(ctx: CanvasRenderingContext2D, x: number, y: number, width: number) {\n if (!ctx?.setLineDash) return; // for unit testing\n ctx.fillStyle = 'rgba(0,0,0,0.25)';\n ctx.fillRect(x - 2, 0, 5, 32767);\n ctx.fillRect(0, y - 2, 32767, 5);\n ctx.lineWidth = width;\n ctx.strokeStyle = 'rgba(255,255,255,0.75)';\n ctx.setLineDash([width * 2, width * 2]);\n ctx.beginPath();\n ctx.moveTo(x, 0);\n ctx.lineTo(x, 32767);\n ctx.moveTo(0, y);\n ctx.lineTo(32767, y);\n ctx.stroke();\n}\n\nexport class RAM {\n mem: Uint8Array;\n constructor(size: number) {\n this.mem = new Uint8Array(new ArrayBuffer(size));\n }\n}\n\nexport class EmuHalt extends Error {\n $loc: SourceLocation;\n squelchError = true;\n constructor(msg: string, loc?: SourceLocation) {\n super(msg);\n this.$loc = loc;\n Object.setPrototypeOf(this, EmuHalt.prototype);\n }\n}\n\nexport var useRequestAnimationFrame: boolean = false;\n\nexport class AnimationTimer {\n\n callback;\n running: boolean = false;\n pulsing: boolean = false;\n nextts = 0;\n nframes;\n startts; // for FPS calc\n frameRate;\n intervalMsec;\n useReqAnimFrame = useRequestAnimationFrame && typeof window.requestAnimationFrame === 'function'; // need for unit test\n\n constructor(frequencyHz: number, callback: () => void) {\n this.frameRate = frequencyHz;\n this.intervalMsec = 1000.0 / frequencyHz;\n this.callback = callback;\n }\n\n scheduleFrame(msec: number) {\n var fn = (timestamp) => {\n try {\n this.nextFrame(this.useReqAnimFrame ? timestamp : Date.now());\n } catch (e) {\n this.running = false;\n this.pulsing = false;\n throw e;\n }\n }\n if (this.useReqAnimFrame)\n window.requestAnimationFrame(fn);\n else\n setTimeout(fn, msec);\n }\n\n nextFrame(ts: number) {\n if (ts > this.nextts) {\n if (this.running) {\n this.callback();\n }\n if (this.nframes == 0)\n this.startts = ts;\n if (this.nframes++ == 300) {\n console.log(\"Avg framerate: \" + this.nframes * 1000 / (ts - this.startts) + \" fps\");\n }\n }\n this.nextts += this.intervalMsec;\n // frames skipped? catch up\n if ((ts - this.nextts) > 1000) {\n //console.log(ts - this.nextts, 'msec skipped');\n this.nextts = ts;\n }\n if (this.running) {\n this.scheduleFrame(this.nextts - ts);\n } else {\n this.pulsing = false;\n }\n }\n isRunning() {\n return this.running;\n }\n start() {\n if (!this.running) {\n this.running = true;\n this.nextts = 0;\n this.nframes = 0;\n if (!this.pulsing) {\n this.scheduleFrame(0);\n this.pulsing = true;\n }\n }\n }\n stop() {\n this.running = false;\n }\n}\n\n// TODO: move to util?\n\nexport function dumpRAM(ram: ArrayLike, ramofs: number, ramlen: number): string {\n var s = \"\";\n var bpel = ram['BYTES_PER_ELEMENT'] || 1;\n var perline = Math.ceil(16 / bpel);\n var isFloat = ram instanceof Float32Array || ram instanceof Float64Array;\n // TODO: show scrollable RAM for other platforms\n for (var ofs = 0; ofs < ramlen; ofs += perline) {\n s += '$' + hex(ofs + ramofs) + ':';\n for (var i = 0; i < perline; i++) {\n if (ofs + i < ram.length) {\n if (i == perline / 2) s += \" \";\n if (isFloat) s += \" \" + ram[ofs + i].toPrecision(bpel * 2);\n else s += \" \" + hex(ram[ofs + i], bpel * 2);\n }\n }\n s += \"\\n\";\n }\n return s;\n}\n\nexport interface KeyDef {\n c: number,\t// key code\n n: string,\t// name\n // for gamepad\n plyr?: number,\n xaxis?: number,\n yaxis?: number,\n button?: number\n};\n\nexport interface KeyMapEntry {\n index: number;\n mask: number;\n def: KeyDef;\n}\n\ntype KeyCodeMap = Map;\n\nexport const Keys = {\n ANYKEY: { c: 0, n: \"?\" },\n // https://w3c.github.io/gamepad/#remapping\n // gamepad and keyboard (player 0)\n UP: { c: 38, n: \"Up\", plyr: 0, button: 12, yaxis: -1 },\n DOWN: { c: 40, n: \"Down\", plyr: 0, button: 13, yaxis: 1 },\n LEFT: { c: 37, n: \"Left\", plyr: 0, button: 14, xaxis: -1 },\n RIGHT: { c: 39, n: \"Right\", plyr: 0, button: 15, xaxis: 1 },\n A: { c: 32, n: \"Space\", plyr: 0, button: 0 },\n B: { c: 16, n: \"Shift\", plyr: 0, button: 1 },\n GP_A: { c: 88, n: \"X\", plyr: 0, button: 0 },\n GP_B: { c: 90, n: \"Z\", plyr: 0, button: 1 },\n GP_C: { c: 86, n: \"V\", plyr: 0, button: 2 },\n GP_D: { c: 67, n: \"C\", plyr: 0, button: 3 },\n SELECT: { c: 220, n: \"\\\\\", plyr: 0, button: 8 },\n START: { c: 13, n: \"Enter\", plyr: 0, button: 9 },\n OPTION: { c: 8, n: \"Bcksp\", plyr: 0, button: 10 },\n // gamepad and keyboard (player 1)\n P2_UP: { c: 87, n: \"W\", plyr: 1, button: 12, yaxis: -1 },\n P2_DOWN: { c: 83, n: \"S\", plyr: 1, button: 13, yaxis: 1 },\n P2_LEFT: { c: 65, n: \"A\", plyr: 1, button: 14, xaxis: -1 },\n P2_RIGHT: { c: 68, n: \"D\", plyr: 1, button: 15, xaxis: 1 },\n P2_A: { c: 84, n: \"T\", plyr: 1, button: 0 },\n P2_B: { c: 82, n: \"R\", plyr: 1, button: 1 },\n P2_GP_A: { c: 69, n: \"E\", plyr: 1, button: 0 },\n P2_GP_B: { c: 82, n: \"R\", plyr: 1, button: 1 },\n P2_GP_C: { c: 84, n: \"T\", plyr: 1, button: 2 },\n P2_GP_D: { c: 89, n: \"Y\", plyr: 1, button: 3 },\n P2_SELECT: { c: 70, n: \"F\", plyr: 1, button: 8 },\n P2_START: { c: 71, n: \"G\", plyr: 1, button: 9 },\n // keyboard only\n VK_ESCAPE: { c: 27, n: \"Esc\" },\n VK_F1: { c: 112, n: \"F1\" },\n VK_F2: { c: 113, n: \"F2\" },\n VK_F3: { c: 114, n: \"F3\" },\n VK_F4: { c: 115, n: \"F4\" },\n VK_F5: { c: 116, n: \"F5\" },\n VK_F6: { c: 117, n: \"F6\" },\n VK_F7: { c: 118, n: \"F7\" },\n VK_F8: { c: 119, n: \"F8\" },\n VK_F9: { c: 120, n: \"F9\" },\n VK_F10: { c: 121, n: \"F10\" },\n VK_F11: { c: 122, n: \"F11\" },\n VK_F12: { c: 123, n: \"F12\" },\n VK_SCROLL_LOCK: { c: 145, n: \"ScrLck\" },\n VK_PAUSE: { c: 19, n: \"Pause\" },\n VK_QUOTE: { c: 222, n: \"'\" },\n VK_1: { c: 49, n: \"1\" },\n VK_2: { c: 50, n: \"2\" },\n VK_3: { c: 51, n: \"3\" },\n VK_4: { c: 52, n: \"4\" },\n VK_5: { c: 53, n: \"5\" },\n VK_6: { c: 54, n: \"6\" },\n VK_7: { c: 55, n: \"7\" },\n VK_8: { c: 56, n: \"8\" },\n VK_9: { c: 57, n: \"9\" },\n VK_0: { c: 48, n: \"0\" },\n VK_MINUS: { c: 189, n: \"-\" },\n VK_MINUS2: { c: 173, n: \"-\" },\n VK_EQUALS: { c: 187, n: \"=\" },\n VK_EQUALS2: { c: 61, n: \"=\" },\n VK_BACK_SPACE: { c: 8, n: \"Bkspc\" },\n VK_TAB: { c: 9, n: \"Tab\" },\n VK_Q: { c: 81, n: \"Q\" },\n VK_W: { c: 87, n: \"W\" },\n VK_E: { c: 69, n: \"E\" },\n VK_R: { c: 82, n: \"R\" },\n VK_T: { c: 84, n: \"T\" },\n VK_Y: { c: 89, n: \"Y\" },\n VK_U: { c: 85, n: \"U\" },\n VK_I: { c: 73, n: \"I\" },\n VK_O: { c: 79, n: \"O\" },\n VK_P: { c: 80, n: \"P\" },\n VK_ACUTE: { c: 219, n: \"\u00B4\" },\n VK_OPEN_BRACKET: { c: 219, n: \"[\" },\n VK_CLOSE_BRACKET: { c: 221, n: \"]\" },\n VK_CAPS_LOCK: { c: 20, n: \"CpsLck\" },\n VK_A: { c: 65, n: \"A\" },\n VK_S: { c: 83, n: \"S\" },\n VK_D: { c: 68, n: \"D\" },\n VK_F: { c: 70, n: \"F\" },\n VK_G: { c: 71, n: \"G\" },\n VK_H: { c: 72, n: \"H\" },\n VK_J: { c: 74, n: \"J\" },\n VK_K: { c: 75, n: \"K\" },\n VK_L: { c: 76, n: \"L\" },\n VK_CEDILLA: { c: 186, n: \"\u00C7\" },\n VK_TILDE: { c: 222, n: \"~\" },\n VK_ENTER: { c: 13, n: \"Enter\" },\n VK_SHIFT: { c: 16, n: \"Shift\" },\n VK_BACK_SLASH: { c: 220, n: \"\\\\\" },\n VK_Z: { c: 90, n: \"Z\" },\n VK_X: { c: 88, n: \"X\" },\n VK_C: { c: 67, n: \"C\" },\n VK_V: { c: 86, n: \"V\" },\n VK_B: { c: 66, n: \"B\" },\n VK_N: { c: 78, n: \"N\" },\n VK_M: { c: 77, n: \"M\" },\n VK_COMMA: { c: 188, n: \"] =\" },\n VK_PERIOD: { c: 190, n: \".\" },\n VK_SEMICOLON: { c: 59, n: \";\" },\n VK_SLASH: { c: 191, n: \"/\" },\n VK_CONTROL: { c: 17, n: \"Ctrl\" },\n VK_ALT: { c: 18, n: \"Alt\" },\n VK_COMMAND: { c: 224, n: \"Cmd\" },\n VK_SPACE: { c: 32, n: \"Space\" },\n VK_INSERT: { c: 45, n: \"Ins\" },\n VK_DELETE: { c: 46, n: \"Del\" },\n VK_HOME: { c: 36, n: \"Home\" },\n VK_END: { c: 35, n: \"End\" },\n VK_PAGE_UP: { c: 33, n: \"PgUp\" },\n VK_PAGE_DOWN: { c: 34, n: \"PgDown\" },\n VK_UP: { c: 38, n: \"Up\" },\n VK_DOWN: { c: 40, n: \"Down\" },\n VK_LEFT: { c: 37, n: \"Left\" },\n VK_RIGHT: { c: 39, n: \"Right\" },\n VK_NUM_LOCK: { c: 144, n: \"Num\" },\n VK_DIVIDE: { c: 111, n: \"Num /\" },\n VK_MULTIPLY: { c: 106, n: \"Num *\" },\n VK_SUBTRACT: { c: 109, n: \"Num -\" },\n VK_ADD: { c: 107, n: \"Num +\" },\n VK_DECIMAL: { c: 194, n: \"Num .\" },\n VK_NUMPAD0: { c: 96, n: \"Num 0\" },\n VK_NUMPAD1: { c: 97, n: \"Num 1\" },\n VK_NUMPAD2: { c: 98, n: \"Num 2\" },\n VK_NUMPAD3: { c: 99, n: \"Num 3\" },\n VK_NUMPAD4: { c: 100, n: \"Num 4\" },\n VK_NUMPAD5: { c: 101, n: \"Num 5\" },\n VK_NUMPAD6: { c: 102, n: \"Num 6\" },\n VK_NUMPAD7: { c: 103, n: \"Num 7\" },\n VK_NUMPAD8: { c: 104, n: \"Num 8\" },\n VK_NUMPAD9: { c: 105, n: \"Num 9\" },\n VK_NUMPAD_CENTER: { c: 12, n: \"Num Cntr\" }\n};\n\nfunction _metakeyflags(e) {\n return (e.shiftKey ? KeyFlags.Shift : 0) |\n (e.ctrlKey ? KeyFlags.Ctrl : 0) |\n (e.altKey ? KeyFlags.Alt : 0) |\n (e.metaKey ? KeyFlags.Meta : 0);\n}\n\ntype KeyMapFunction = (o: KeyMapEntry, key: number, code: number, flags: number) => void;\n\nexport function newKeyboardHandler(switches: number[] | Uint8Array, map: KeyCodeMap, func?: KeyMapFunction, alwaysfunc?: boolean) {\n return (key: number, code: number, flags: number) => {\n if (!map) {\n func(null, key, code, flags);\n return;\n }\n var o: KeyMapEntry = map[key];\n if (!o) o = map[0];\n if (func && (o || alwaysfunc)) {\n func(o, key, code, flags);\n }\n if (o) {\n //console.log(key,code,flags,o);\n var mask = o.mask;\n if (mask < 0) { // negative mask == active low\n mask = -mask;\n if (flags & (KeyFlags.KeyDown | KeyFlags.KeyUp))\n flags ^= KeyFlags.KeyDown | KeyFlags.KeyUp;\n }\n if (flags & KeyFlags.KeyDown) {\n switches[o.index] |= mask;\n } else if (flags & KeyFlags.KeyUp) {\n switches[o.index] &= ~mask;\n }\n }\n };\n}\n\nexport function setKeyboardFromMap(video: RasterVideo, switches: number[] | Uint8Array, map: KeyCodeMap, func?: KeyMapFunction, alwaysfunc?: boolean) {\n var handler = newKeyboardHandler(switches, map, func, alwaysfunc);\n video.setKeyboardEvents(handler);\n return new ControllerPoller(handler);\n}\n\nexport function makeKeycodeMap(table: [KeyDef, number, number][]): KeyCodeMap {\n var map = new Map();\n for (var i = 0; i < table.length; i++) {\n var entry = table[i];\n var val: KeyMapEntry = { index: entry[1], mask: entry[2], def: entry[0] };\n map[entry[0].c] = val;\n }\n return map;\n}\n\nconst DEFAULT_CONTROLLER_KEYS: KeyDef[] = [\n Keys.UP, Keys.DOWN, Keys.LEFT, Keys.RIGHT, Keys.A, Keys.B, Keys.SELECT, Keys.START,\n Keys.P2_UP, Keys.P2_DOWN, Keys.P2_LEFT, Keys.P2_RIGHT, Keys.P2_A, Keys.P2_B, Keys.P2_SELECT, Keys.P2_START,\n];\n\n// Gamepad helper\nexport class ControllerPoller {\n active = false;\n handler;\n state: Int32Array[];\n lastState: Int32Array[];\n AXIS0 = 24; // first joystick axis index\n constructor(handler: (key, code, flags) => void) {\n this.handler = handler;\n window.addEventListener(\"gamepadconnected\", (event) => {\n console.log(\"Gamepad connected:\", event);\n this.reset();\n });\n window.addEventListener(\"gamepaddisconnected\", (event) => {\n console.log(\"Gamepad disconnected:\", event);\n this.reset();\n });\n }\n reset() {\n this.active = typeof navigator.getGamepads === 'function';\n if (this.active) {\n let numGamepads = navigator.getGamepads().length;\n this.state = new Array(numGamepads);\n this.lastState = new Array(numGamepads);\n for (var i = 0; i < numGamepads; i++) {\n this.state[i] = new Int32Array(64);\n this.lastState[i] = new Int32Array(64);\n }\n console.log(this);\n }\n }\n poll() {\n if (!this.active) return;\n var gamepads = navigator.getGamepads();\n for (var gpi = 0; gpi < gamepads.length; gpi++) {\n let state = this.state[gpi];\n let lastState = this.lastState[gpi];\n var gp = gamepads[gpi];\n if (gp) {\n for (var i = 0; i < gp.axes.length; i++) {\n var k = i + this.AXIS0;\n state[k] = Math.round(gp.axes[i]);\n if (state[k] != lastState[k]) {\n this.handleStateChange(gpi, k);\n }\n }\n for (var i = 0; i < gp.buttons.length; i++) {\n state[i] = gp.buttons[i].pressed ? 1 : 0;\n if (state[i] != lastState[i]) {\n this.handleStateChange(gpi, i);\n }\n }\n lastState.set(state);\n }\n }\n }\n handleStateChange(gpi: number, k: number) {\n var axis = k - this.AXIS0;\n // TODO: this is slow\n for (var def of DEFAULT_CONTROLLER_KEYS) {\n // is this a gamepad entry? same player #?\n if (def && def.plyr == gpi) {\n var code = def.c;\n var state = this.state[gpi][k];\n var lastState = this.lastState[gpi][k];\n // check for button/axis match\n if (k == def.button || (axis == 0 && def.xaxis == state) || (axis == 1 && def.yaxis == state)) {\n //console.log(\"Gamepad\", gpi, code, state);\n if (state != 0) {\n this.handler(code, 0, KeyFlags.KeyDown);\n } else {\n this.handler(code, 0, KeyFlags.KeyUp);\n }\n break;\n }\n // joystick released?\n else if (state == 0 && (axis == 0 && def.xaxis == lastState) || (axis == 1 && def.yaxis == lastState)) {\n this.handler(code, 0, KeyFlags.KeyUp);\n break;\n }\n }\n }\n }\n}\n\n// handy for loadROM()\nexport function padBytes(data: Uint8Array | number[], len: number, padstart?: boolean): Uint8Array {\n if (data.length > len) {\n throw Error(\"Data too long, \" + data.length + \" > \" + len);\n }\n var r = new RAM(len);\n if (padstart)\n r.mem.set(data, len - data.length);\n else\n r.mem.set(data);\n return r.mem;\n}\n\ntype AddressReadWriteFn = ((a: number) => number) | ((a: number, v: number) => void);\ntype AddressDecoderEntry = [number, number, number, AddressReadWriteFn];\ntype AddressDecoderOptions = { gmask?: number, defaultval?: number };\n\n// TODO: better performance, check values\nexport function AddressDecoder(table: AddressDecoderEntry[], options?: AddressDecoderOptions) {\n var self = this;\n function makeFunction() {\n var s = \"\";\n if (options && options.gmask) {\n s += \"a&=\" + options.gmask + \";\";\n }\n for (var i = 0; i < table.length; i++) {\n var entry = table[i];\n var start = entry[0] | 0;\n var end = entry[1] | 0;\n var mask = entry[2] | 0;\n var func = entry[3];\n self['__fn' + i] = func;\n s += \"if (a>=\" + start + \" && a<=\" + end + \"){\";\n if (mask) s += \"a&=\" + mask + \";\";\n s += \"return this.__fn\" + i + \"(a,v)&0xff;}\\n\";\n }\n s += \"return \" + (options?.defaultval | 0) + \";\";\n return new Function('a', 'v', s);\n }\n return makeFunction().bind(self);\n}\n\nexport function newAddressDecoder(table: AddressDecoderEntry[], options?: AddressDecoderOptions): (a: number, v?: number) => number {\n return new (AddressDecoder as any)(table, options);\n}\n\n\n// https://stackoverflow.com/questions/17130395/real-mouse-position-in-canvas\nexport function getMousePos(canvas: HTMLCanvasElement, evt): { x: number, y: number } {\n // Improves reachability of min and max values at edges of canvas. Without delta,\n // min and max values would be represented by 1/2 as many pixels as other values.\n const delta = .5;\n // Canvas HTML element has integer `width` and `height`, but getBoundingClientRect() pos & size\n // are scaled to non-integer values. Mouse events return integer x/y values in the range\n // [Math.floor(rect.left/top), Math.floor(rect.left/top) + Math.floor(rect.width/height)],\n // which may not be the same as [Math.floor(rect.left/top), Math.floor(rect.right/bottom)].\n var rect = canvas.getBoundingClientRect(), // abs. size of element\n // Ignore canvas borders and padding, so mouse position is relative to canvas content.\n style = window.getComputedStyle(canvas),\n left = parseFloat(style.borderLeftWidth) + parseFloat(style.paddingLeft),\n right = parseFloat(style.borderRightWidth) + parseFloat(style.paddingRight),\n top = parseFloat(style.borderTopWidth) + parseFloat(style.paddingTop),\n bottom = parseFloat(style.borderBottomWidth) + parseFloat(style.paddingBottom),\n width = rect.width - left - right,\n height = rect.height - top - bottom,\n\n // Determine scale factors to map mouse coordinates to canvas coordinates.\n scaleX = canvas.width / Math.floor(width - 2 * delta),\n scaleY = canvas.height / Math.floor(height - 2 * delta),\n\n // Scale coordinates after they've been adjusted to be relative to canvas content.\n x = (evt.clientX - delta - rect.left - left) * scaleX,\n y = (evt.clientY - delta - rect.top - top) * scaleY;\n return {\n // Clamp to [0, canvas.width/height] to prevent non-integer rect position\n // and size, and potentially `delta`, from returning out of bounds values.\n x: Math.max(0, Math.min(canvas.width, x)),\n y: Math.max(0, Math.min(canvas.height, y))\n }\n}\n\n\n"], - "mappings": "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", - "names": ["lpad", "s", "n", "rpad", "byte2signed", "b", "getFilenameForPath", "toks", "getFolderForPath", "getFilenamePrefix", "pos", "hex", "v", "nd", "toradix", "tobin", "radix", "e", "arrayCompare", "a", "i", "invertMap", "m", "r", "k", "highlightDifferences", "s1", "s2", "split1", "split2", "j", "result", "w1", "w2", "lzgmini", "LZG_HEADER_SIZE", "LZG_METHOD_COPY", "LZG_METHOD_LZG1", "LZG_LENGTH_DECODE_LUT", "outdata", "calcChecksum", "data", "uncomplen", "checksum", "dst", "method", "m1", "m2", "m3", "m4", "symbol", "b2", "b3", "len", "offset", "dstlen", "datalen", "byteArrayToString", "byteArrayToUTF8", "stringToByteArray", "str", "charLUT", "c", "isProbablyBinary", "path", "data", "score", "BINEXTS", "ext", "i", "c", "nextra", "compressLZG", "em_module", "inBuffer", "levelArg", "level", "inLen", "inPtr", "maxEncSize", "outPtr", "compLen", "outBuffer", "safe_extend", "deep", "dest", "src", "key", "val", "type", "printFlags", "names", "r2l", "s", "bit", "rgb2bgr", "x", "RGBA", "r", "g", "b", "clamp", "minv", "maxv", "v", "safeident", "rle_unpack", "tag", "ch", "count", "j", "getWithBinary", "url", "success", "datatype", "oReq", "oEvent", "getBasePlatform", "platform", "getRootPlatform", "getRootBasePlatform", "isArray", "obj", "isTypedArray", "convertDataToUint8Array", "stringToByteArray", "byteToASCII", "b", "loadScript", "scriptfn", "resolve", "reject", "script", "decodeQueryString", "qs", "a", "p", "parseBool", "s", "replaceAll", "s", "search", "replace", "getCookie", "name", "nameEQ", "ca", "c", "PLATFORMS", "_random_state", "noise", "x", "getNoiseSeed", "setNoiseSeed", "__createCanvas", "doc", "mainElement", "width", "height", "canvas", "_setKeyboardEvents", "canvas", "callback", "e", "flags", "_metakeyflags", "RasterVideo", "mainElement", "width", "height", "options", "rotate", "doc", "__createCanvas", "sx", "sy", "dx", "dy", "w", "h", "ctx", "el", "pos", "getMousePos", "new_x", "new_y", "clamp", "VectorVideo", "x1", "y1", "x2", "y2", "intensity", "color", "alpha", "jx", "jy", "drawCrosshair", "x", "y", "RAM", "size", "EmuHalt", "_EmuHalt", "msg", "loc", "useRequestAnimationFrame", "AnimationTimer", "frequencyHz", "msec", "fn", "timestamp", "ts", "dumpRAM", "ram", "ramofs", "ramlen", "s", "bpel", "perline", "isFloat", "ofs", "hex", "i", "Keys", "newKeyboardHandler", "switches", "map", "func", "alwaysfunc", "key", "code", "o", "mask", "setKeyboardFromMap", "video", "handler", "ControllerPoller", "makeKeycodeMap", "table", "entry", "val", "DEFAULT_CONTROLLER_KEYS", "event", "numGamepads", "gamepads", "gpi", "state", "lastState", "gp", "k", "axis", "def", "padBytes", "data", "len", "padstart", "r", "AddressDecoder", "self", "makeFunction", "start", "end", "newAddressDecoder", "evt", "rect", "style", "left", "right", "top", "bottom", "scaleX", "scaleY"] + "sourcesContent": ["\nexport function lpad(s:string, n:number):string {\n s += ''; // convert to string\n while (s.length 0) ? s.substr(0, pos) : s;\n}\n\nexport function hex(v:number, nd?:number) {\n if (!nd) nd = 2;\n if (nd == 8) {\n return hex((v>>16)&0xffff,4) + hex(v&0xffff,4);\n } else {\n return toradix(v,nd,16);\n }\n}\n\nexport function tobin(v:number, nd?:number) {\n if (!nd) nd = 8;\n return toradix(v,nd,2);\n}\n\nexport function toradix(v:number, nd:number, radix:number) {\n try {\n var s = v.toString(radix).toUpperCase();\n while (s.length < nd)\n s = \"0\" + s;\n return s;\n } catch (e) {\n return v+\"\";\n }\n}\n\nexport function arrayCompare(a:ArrayLike, b:ArrayLike):boolean {\n if (a == null && b == null) return true;\n if (a == null) return false;\n if (b == null) return false;\n if (typeof a.length != 'number' || typeof b.length != 'number') return false;\n if (a.length != b.length) return false;\n for (var i=0; i= 0) {\n while (i < s1.length && split1[i].indexOf(\"\\n\") < 0)\n i++;\n }\n if (w1 != w2) {\n w2 = '' + w2 + '';\n }\n result += w2;\n i++;\n j++;\n }\n while (j < split2.length) {\n result += split2[j++];\n }\n return result;\n}\n\nexport function lzgmini() {\n\n // Constants\n var LZG_HEADER_SIZE = 16;\n var LZG_METHOD_COPY = 0;\n var LZG_METHOD_LZG1 = 1;\n\n // LUT for decoding the copy length parameter\n var LZG_LENGTH_DECODE_LUT = [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,\n 20,21,22,23,24,25,26,27,28,29,35,48,72,128];\n\n // Decoded data (produced by the decode() method)\n var outdata = null;\n\n // Calculate the checksum\n var calcChecksum = function(data) {\n var a = 1;\n var b = 0;\n var i = LZG_HEADER_SIZE;\n while (i < data.length)\n {\n a = (a + (data[i] & 0xff)) & 0xffff;\n b = (b + a) & 0xffff;\n i++;\n }\n return (b << 16) | a;\n }\n\n // Decode LZG coded data. The function returns the size of the decoded data.\n // Use any of the get* methods to retrieve the decoded data.\n this.decode = function(data:number[]):number[] {\n // Start by clearing the decompressed array in this object\n outdata = null;\n\n // Check magic ID\n if ((data.length < LZG_HEADER_SIZE) || (data[0] != 76) ||\n (data[1] != 90) || (data[2] != 71))\n {\n return null;\n }\n \n // what's the length?\n var uncomplen = data[6] | (data[5]<<8) | (data[4]<<16) | (data[3]<<24);\n\n // Calculate & check the checksum\n var checksum = ((data[11] & 0xff) << 24) |\n ((data[12] & 0xff) << 16) |\n ((data[13] & 0xff) << 8) |\n (data[14] & 0xff);\n if (calcChecksum(data) != checksum)\n {\n return null;\n }\n\n var dst = new Array();\n // Check which method to use\n var method = data[15] & 0xff;\n if (method == LZG_METHOD_LZG1)\n {\n // Get marker symbols\n var m1 = data[16] & 0xff;\n var m2 = data[17] & 0xff;\n var m3 = data[18] & 0xff;\n var m4 = data[19] & 0xff;\n\n // Main decompression loop\n var symbol, b, b2, b3, len, offset;\n var dstlen = 0;\n var k = LZG_HEADER_SIZE + 4;\n var datalen = data.length;\n while (k <= datalen)\n {\n symbol = data[k++] & 0xff;\n if ((symbol != m1) && (symbol != m2) && (symbol != m3) && (symbol != m4))\n {\n // Literal copy\n dst[dstlen++] = symbol;\n }\n else\n {\n b = data[k++] & 0xff;\n if (b != 0)\n {\n // Decode offset / length parameters\n if (symbol == m1)\n {\n // marker1 - \"Distant copy\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n b2 = data[k++] & 0xff;\n b3 = data[k++] & 0xff;\n offset = (((b & 0xe0) << 11) | (b2 << 8) | b3) + 2056;\n }\n else if (symbol == m2)\n {\n // marker2 - \"Medium copy\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n b2 = data[k++] & 0xff;\n offset = (((b & 0xe0) << 3) | b2) + 8;\n }\n else if (symbol == m3)\n {\n // marker3 - \"Short copy\"\n len = (b >> 6) + 3;\n offset = (b & 63) + 8;\n }\n else\n {\n // marker4 - \"Near copy (incl. RLE)\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n offset = (b >> 5) + 1;\n }\n\n // Copy the corresponding data from the history window\n for (i = 0; i < len; i++)\n {\n dst[dstlen] = dst[dstlen-offset];\n dstlen++;\n }\n }\n else\n {\n // Literal copy (single occurance of a marker symbol)\n dst[dstlen++] = symbol;\n }\n }\n }\n\n }\n else if (method == LZG_METHOD_COPY)\n {\n // Plain copy\n var dstlen = 0;\n var datalen = data.length;\n for (var i = LZG_HEADER_SIZE; i < datalen; i++)\n {\n dst[dstlen++] = data[i] & 0xff;\n }\n }\n else\n {\n // Unknown method\n return null;\n }\n // Store the decompressed data in the lzgmini object for later retrieval\n if (dst.length < uncomplen) return null; // data too short\n outdata = dst.slice(0, uncomplen);\n return outdata;\n }\n\n // Get the decoded byte array\n this.getByteArray = function():number[]\n {\n return outdata;\n }\n\n // Get the decoded string from a Latin 1 (or ASCII) encoded array\n this.getStringLatin1 = function():string {\n return byteArrayToString(outdata);\n }\n\n // Get the decoded string from an UTF-8 encoded array\n this.getStringUTF8 = function():string {\n return byteArrayToUTF8(outdata);\n }\n}\n\nexport function stringToByteArray(s:string) : Uint8Array {\n var a = new Uint8Array(s.length);\n for (var i=0; i= 192) && (c < 224)) {\n c = ((c & 31) << 6) | (data[i++] & 63);\n } else {\n c = ((c & 15) << 12) | ((data[i] & 63) << 6) | (data[i+1] & 63);\n i += 2;\n if (c == 0xfeff) continue; // ignore BOM\n }\n str += String.fromCharCode(c);\n }\n }\n return str;\n}\n\nexport function removeBOM(s:string) {\n if (s.charCodeAt(0) === 0xFEFF) {\n s = s.substr(1);\n }\n return s;\n}\n\nexport function isProbablyBinary(path:string, data?:number[] | Uint8Array) : boolean {\n var score = 0;\n // check extensions\n if (path) {\n path = path.toUpperCase();\n const BINEXTS = ['.CHR','.BIN','.DAT','.PAL','.NAM','.RLE','.LZ4','.NSF'];\n for (var ext of BINEXTS) {\n if (path.endsWith(ext)) score++;\n }\n }\n // decode as UTF-8\n for (var i = 0; i < (data?data.length:0);) {\n let c = data[i++];\n if ((c & 0x80) == 0) {\n // more likely binary if we see a NUL or obscure control character\n if (c < 9 || (c >= 14 && c < 26) || c == 0x7f) {\n score++;\n break;\n }\n } else {\n // look for invalid unicode sequences\n var nextra = 0;\n if ((c & 0xe0) == 0xc0) nextra = 1;\n else if ((c & 0xf0) == 0xe0) nextra = 2;\n else if ((c & 0xf8) == 0xf0) nextra = 3;\n else if (c < 0xa0) score++;\n else if (c == 0xff) score++;\n while (nextra--) {\n if (i >= data.length || (data[i++] & 0xc0) != 0x80) {\n score++;\n break;\n }\n }\n }\n }\n return score > 0;\n}\n\n// need to load liblzg.js first\nexport function compressLZG(em_module, inBuffer:number[], levelArg?:boolean) : Uint8Array {\n var level = levelArg || 9;\n var inLen = inBuffer.length;\n var inPtr = em_module._malloc(inLen + 1);\n for (var i = 0; i < inLen; i++) {\n em_module.setValue(inPtr + i, inBuffer[i], 'i8');\n }\n var maxEncSize = em_module._LZG_MaxEncodedSize(inLen);\n var outPtr = em_module._malloc(maxEncSize + 1);\n var compLen = em_module.ccall('compress_lzg', 'number', ['number', 'number', 'number', 'number', 'number'], [level, inPtr, inLen, maxEncSize, outPtr]);\n em_module._free(inPtr);\n var outBuffer = new Uint8Array(compLen);\n for (var i = 0; i < compLen; i++) {\n outBuffer[i] = em_module.getValue(outPtr + i, 'i8');\n }\n em_module._free(outPtr);\n return outBuffer;\n}\n\n// only does primitives, 1D arrays and no recursion\nexport function safe_extend(deep, dest, src) {\n // TODO: deep ignored\n for (var key in src) {\n var val = src[key];\n var type = typeof(val);\n if (val === null || type == 'undefined') {\n dest[key] = val;\n } else if (type == 'function') {\n // ignore function\n } else if (type == 'object') {\n if (val['slice']) { // array?\n dest[key] = val.slice();\n } else {\n // ignore object\n }\n } else {\n dest[key] = val;\n }\n }\n return dest;\n}\n\nexport function printFlags(val:number, names:string[], r2l:boolean) {\n var s = '';\n for (var i=0; i 0) s += \" \";\n s += (val & bit) ? names[i] : \"-\";\n }\n }\n return s;\n}\n\nexport function rgb2bgr(x) {\n return ((x&0xff)<<16) | ((x>>16)&0xff) | (x&0x00ff00);\n}\n\nexport function RGBA(r:number,g:number,b:number) {\n return (r&0xff) | ((g&0xff)<<8) | ((b&0xff)<<16) | 0xff000000;\n}\n\nexport function clamp(minv:number, maxv:number, v:number) {\n return (v < minv) ? minv : (v > maxv) ? maxv : v;\n}\n\nexport function safeident(s : string) : string {\n // if starts with non-alpha character, prefix with '_'\n if (s.length == 0) return '';\n if (!s.match(/^[a-zA-Z_]/)) s = '_' + s;\n return s.replace(/\\W+/g, \"_\");\n}\n\nexport function rle_unpack(src : Uint8Array) : Uint8Array {\n var i = 0;\n var tag = src[i++];\n var dest = [];\n var data = tag;\n while (i < src.length) {\n var ch = src[i++];\n if (ch == tag) {\n var count = src[i++];\n for (var j=0; jvoid, datatype:'text'|'arraybuffer') {\n var oReq = new XMLHttpRequest();\n oReq.open(\"GET\", url, true);\n oReq.responseType = datatype;\n oReq.onload = function (oEvent) {\n if (oReq.status == 200) {\n var data = oReq.response;\n if (data instanceof ArrayBuffer) {\n data = new Uint8Array(data);\n }\n success(data);\n } else if (oReq.status == 404) {\n success(null);\n } else {\n throw Error(\"Error \" + oReq.status + \" loading \" + url);\n }\n }\n oReq.onerror = function (oEvent) {\n success(null);\n }\n oReq.ontimeout = function (oEvent) {\n throw Error(\"Timeout loading \" + url);\n }\n oReq.send(null);\n}\n\n// get platform ID without . emulator\nexport function getBasePlatform(platform : string) : string {\n return platform.split('.')[0];\n}\n\n// get platform ID without - specialization\nfunction getRootPlatform(platform : string) : string {\n return platform.split('-')[0];\n}\n\n// get platform ID without emulator or specialization\nexport function getRootBasePlatform(platform : string) : string {\n return getRootPlatform(getBasePlatform(platform));\n}\n\nexport function isArray(obj: any) : obj is ArrayLike {\n return obj != null && (Array.isArray(obj) || isTypedArray(obj));\n}\n\nexport function isTypedArray(obj: any) : obj is ArrayLike {\n return obj != null && obj['BYTES_PER_ELEMENT'];\n}\n\nexport function convertDataToUint8Array(data: string|Uint8Array) : Uint8Array {\n return (typeof data === 'string') ? stringToByteArray(data) : data;\n}\n\nexport function convertDataToString(data: string|Uint8Array) : string {\n return (data instanceof Uint8Array) ? byteArrayToUTF8(data) : data;\n}\n\nexport function byteToASCII(b: number) : string {\n if (b < 32)\n return String.fromCharCode(b + 0x2400);\n else\n return String.fromCharCode(b);\n}\n\nexport function loadScript(scriptfn:string) : Promise {\n return new Promise( (resolve, reject) => {\n var script = document.createElement('script');\n script.onload = resolve;\n script.onerror = reject;\n script.src = scriptfn;\n document.getElementsByTagName('head')[0].appendChild(script);\n });\n}\n\nexport function decodeQueryString(qs : string) : {} {\n if (qs.startsWith('?')) qs = qs.substr(1);\n var a = qs.split('&');\n if (!a || a.length == 0)\n return {};\n var b = {};\n for (var i = 0; i < a.length; ++i) {\n var p = a[i].split('=', 2);\n if (p.length == 1)\n b[p[0]] = \"\";\n else\n b[p[0]] = decodeURIComponent(p[1].replace(/\\+/g, \" \"));\n }\n return b;\n}\n\nexport function parseBool(s : string) : boolean {\n if (!s) return false;\n if (s == 'false' || s == '0') return false;\n if (s == 'true' || s == '1') return true;\n return s ? true : false;\n}\n\n///\n\nexport class XMLParseError extends Error {\n}\n\nexport interface XMLNode {\n type: string;\n text: string | null;\n children: XMLNode[];\n attrs: { [id: string]: string };\n obj: any;\n}\n\nexport type XMLVisitFunction = (node: XMLNode) => any;\n\nfunction escapeXML(s: string): string {\n if (s.indexOf('&') >= 0) {\n return s.replace(/'/g, \"'\")\n .replace(/"/g, '\"')\n .replace(/>/g, '>')\n .replace(/</g, '<')\n .replace(/&/g, '&');\n } else {\n return s;\n }\n}\n\nexport function parseXMLPoorly(s: string, openfn?: XMLVisitFunction, closefn?: XMLVisitFunction): XMLNode {\n const tag_re = /[<]([/]?)([?a-z_-]+)([^>]*)[>]+|(\\s*[^<]+)/gi;\n const attr_re = /\\s*(\\w+)=\"(.*?)\"\\s*/gi;\n var fm: RegExpMatchArray;\n var stack: XMLNode[] = [];\n var top: XMLNode;\n\n function closetop() {\n top = stack.pop();\n if (top == null || top.type != ident) throw new XMLParseError(\"mismatch close tag: \" + ident);\n if (closefn) {\n top.obj = closefn(top);\n }\n if (stack.length == 0) throw new XMLParseError(\"close tag without open: \" + ident);\n stack[stack.length - 1].children.push(top);\n }\n function parseattrs(as: string): { [id: string]: string } {\n var am;\n var attrs = {};\n if (as != null) {\n while (am = attr_re.exec(as)) {\n attrs[am[1]] = escapeXML(am[2]);\n }\n }\n return attrs;\n }\n while (fm = tag_re.exec(s)) {\n var [_m0, close, ident, attrs, content] = fm;\n //console.log(stack.length, close, ident, attrs, content);\n if (close) {\n closetop();\n } else if (ident) {\n var node = { type: ident, text: null, children: [], attrs: parseattrs(attrs), obj: null };\n stack.push(node);\n if (attrs) {\n parseattrs(attrs);\n }\n if (openfn) {\n node.obj = openfn(node);\n }\n if (attrs && attrs.endsWith('/')) closetop();\n } else if (content != null) {\n if (stack.length == 0) throw new XMLParseError(\"content without element\");\n var txt = escapeXML(content as string).trim();\n if (txt.length) stack[stack.length - 1].text = txt;\n }\n }\n if (stack.length != 1) throw new XMLParseError(\"tag not closed\");\n if (stack[0].type != '?xml') throw new XMLParseError(\"?xml needs to be first element\");\n return top;\n}\n\nexport function escapeHTML(s: string): string {\n return s.replace(/[&]/g, '&').replace(/[<]/g, '<').replace(/[>]/g, '>');\n}\n\n// lame factorization for displaying bitmaps\n// returns a > b such that a * b == x (or higher), a >= mina, b >= minb\nexport function findIntegerFactors(x: number, mina: number, minb: number, aspect: number) : {a: number, b: number} {\n let a = x;\n let b = 1;\n if (minb > 1 && minb < a) {\n a = Math.ceil(x / minb);\n b = minb;\n }\n while (a > b) {\n let a2 = a;\n let b2 = b;\n if ((a & 1) == 0) {\n b2 = b * 2;\n a2 = a / 2;\n }\n if ((a % 3) == 0) {\n b2 = b * 3;\n a2 = a / 3;\n }\n if ((a % 5) == 0) {\n b2 = b * 5;\n a2 = a / 5;\n }\n if (a2 < mina) break;\n if (a2 < b2 * aspect) break;\n a = a2;\n b = b2;\n }\n return {a, b};\n}\n\nexport class FileDataCache {\n maxSize : number = 8000000;\n size : number;\n cache : Map;\n constructor() {\n this.reset();\n }\n get(key : string) : string|Uint8Array {\n return this.cache.get(key);\n }\n put(key : string, value : string|Uint8Array) {\n this.cache.set(key, value);\n this.size += value.length;\n if (this.size > this.maxSize) {\n console.log('cache reset', this);\n this.reset();\n }\n }\n reset() {\n this.cache = new Map();\n this.size = 0;\n }\n}\n\nexport function coerceToArray(arrobj: any) : T[] {\n if (Array.isArray(arrobj)) return arrobj;\n else if (arrobj != null && typeof arrobj[Symbol.iterator] === 'function') return Array.from(arrobj);\n else if (typeof arrobj === 'object') return Array.from(Object.values(arrobj))\n else throw new Error(`Expected array or object, got \"${arrobj}\"`);\n}\n\nexport function replaceAll(s:string, search:string, replace:string) : string {\n if (s == '') return '';\n if (search == '') return s;\n return s.split(search).join(replace);\n}\n\nexport function getCookie(name: string) : string {\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(';');\n for(var i=0;i < ca.length;i++) {\n var c = ca[i];\n while (c.charAt(0)==' ') c = c.substring(1,c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);\n }\n return null;\n}\n\n", "\nimport { hex, clamp, lpad } from \"./util\";\nimport { SourceLocation } from \"./workertypes\";\n\n// Emulator classes\n// Most of this stuff helps emulators use the DOM\n// and do keyboard/mouse/gamepad/timer handling, etc.\n\nexport var PLATFORMS = {};\n\nvar _random_state = 1;\n\nexport function noise() {\n let x = _random_state;\n x ^= x << 13;\n x ^= x >> 17;\n x ^= x << 5;\n return (_random_state = x) & 0xff;\n}\n\nexport function getNoiseSeed() {\n return _random_state;\n}\n\nexport function setNoiseSeed(x: number) {\n _random_state = x;\n}\n\ntype KeyboardCallback = (which: number, charCode: number, flags: KeyFlags) => void;\n\nexport function __createCanvas(doc: HTMLDocument, mainElement: HTMLElement, width: number, height: number): HTMLCanvasElement {\n var canvas = doc.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n canvas.classList.add(\"emuvideo\");\n canvas.tabIndex = 0; // Make it focusable and tabbable\n mainElement.appendChild(canvas);\n return canvas;\n}\n\nexport enum KeyFlags {\n KeyDown = 1,\n Shift = 2,\n Ctrl = 4,\n Alt = 8,\n Meta = 16,\n KeyUp = 64,\n KeyPress = 128,\n}\n\n// TODO: don't use which/keyCode anymore?\n// TODO: let keycode = e.key ? e.key.charCodeAt(0) : e.keyCode;\n// TODO: let charCode = e.key ? e.key.charCodeAt(0) : e.charCode;\nexport function _setKeyboardEvents(canvas: HTMLElement, callback: KeyboardCallback) {\n canvas.onkeydown = (e) => {\n let flags = _metakeyflags(e);\n callback(e.which, e.keyCode, KeyFlags.KeyDown | flags);\n if (!flags) e.preventDefault(); // eat all keys that don't have a modifier\n };\n canvas.onkeyup = (e) => {\n callback(e.which, e.keyCode, KeyFlags.KeyUp | _metakeyflags(e));\n };\n};\n\ntype VideoCanvasOptions = { rotate?: number, overscan?: boolean, aspect?: number };\n\nexport class RasterVideo {\n\n mainElement: HTMLElement;\n width: number;\n height: number;\n options: VideoCanvasOptions;\n\n constructor(mainElement: HTMLElement, width: number, height: number, options?: VideoCanvasOptions) {\n this.mainElement = mainElement;\n this.width = width;\n this.height = height;\n this.options = options;\n }\n\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n imageData: ImageData;\n datau32: Uint32Array;\n vcanvas: JQuery;\n\n // Start paddles/joystick centered in [0,255] range.\n paddle_x = 128;\n paddle_y = 128;\n // Platforms can support up to three buttons.\n paddle_buttons: boolean[] = [false, false, false];\n\n setRotate(rotate: number) {\n var canvas = this.canvas;\n if (rotate) {\n // TODO: aspect ratio?\n canvas.style.transform = \"rotate(\" + rotate + \"deg)\";\n if (canvas.width < canvas.height)\n canvas.style.paddingLeft = canvas.style.paddingRight = \"10%\";\n } else {\n canvas.style.transform = null;\n canvas.style.paddingLeft = canvas.style.paddingRight = null;\n }\n }\n\n create(doc?: HTMLDocument) {\n var canvas;\n this.canvas = canvas = __createCanvas(doc || document, this.mainElement, this.width, this.height);\n this.vcanvas = $(canvas);\n if (this.options && this.options.rotate) {\n this.setRotate(this.options.rotate);\n }\n if (this.options && this.options.overscan) {\n this.vcanvas.css('padding', '0px');\n }\n if (this.options && this.options.aspect) {\n console.log(this.options);\n this.vcanvas.css('aspect-ratio', this.options.aspect + \"\");\n }\n this.ctx = canvas.getContext('2d');\n this.imageData = this.ctx.createImageData(this.width, this.height);\n this.datau32 = new Uint32Array(this.imageData.data.buffer);\n }\n\n setKeyboardEvents(callback) {\n _setKeyboardEvents(this.canvas, callback);\n }\n\n getFrameData() { return this.datau32; }\n\n getContext() { return this.ctx; }\n\n updateFrame(sx?: number, sy?: number, dx?: number, dy?: number, w?: number, h?: number) {\n if (w && h)\n this.ctx.putImageData(this.imageData, sx, sy, dx, dy, w, h);\n else\n this.ctx.putImageData(this.imageData, 0, 0);\n }\n\n clearRect(dx: number, dy: number, w: number, h: number) {\n var ctx = this.ctx;\n ctx.fillStyle = '#000000';\n ctx.fillRect(dx, dy, w, h);\n }\n\n setupMouseEvents(el?: HTMLCanvasElement) {\n if (!el) el = this.canvas;\n $(el).mousemove((e) => {\n var pos = getMousePos(el, e);\n var new_x = Math.round(pos.x * 255 / this.canvas.width);\n var new_y = Math.round(pos.y * 255 / this.canvas.height);\n this.paddle_x = clamp(0, 255, new_x);\n this.paddle_y = clamp(0, 255, new_y);\n }).mousedown((e) => {\n // TODO Allows users to specify mapping in settings.\n this.paddle_buttons[0] = !e.shiftKey && !e.altKey;\n this.paddle_buttons[1] = e.shiftKey && !e.altKey;\n this.paddle_buttons[2] = e.altKey && !e.shiftKey;\n }).mouseup((e) => {\n this.paddle_buttons.fill(false);\n });\n };\n}\n\nexport class VectorVideo extends RasterVideo {\n\n persistenceAlpha = 0.5;\n jitter = 1.0;\n gamma = 0.8;\n sx: number;\n sy: number;\n\n create() {\n super.create();\n this.sx = this.width / 1024.0;\n this.sy = this.height / 1024.0;\n }\n\n clear() {\n var ctx = this.ctx;\n ctx.globalCompositeOperation = 'source-over';\n ctx.globalAlpha = this.persistenceAlpha;\n ctx.fillStyle = '#000000';\n ctx.fillRect(0, 0, this.width, this.height);\n ctx.globalAlpha = 1.0;\n ctx.globalCompositeOperation = 'lighter';\n }\n\n COLORS = [\n '#111111',\n '#1111ff',\n '#11ff11',\n '#11ffff',\n '#ff1111',\n '#ff11ff',\n '#ffff11',\n '#ffffff'\n ];\n\n drawLine(x1: number, y1: number, x2: number, y2: number, intensity: number, color: number) {\n var ctx = this.ctx;\n var sx = this.sx;\n var sy = this.sy;\n //console.log(x1,y1,x2,y2,intensity,color);\n if (intensity > 0) {\n // TODO: landscape vs portrait\n var alpha = Math.pow(intensity / 255.0, this.gamma);\n ctx.globalAlpha = alpha;\n ctx.lineWidth = 3;\n ctx.beginPath();\n // TODO: bright dots\n var jx = this.jitter * (Math.random() - 0.5);\n var jy = this.jitter * (Math.random() - 0.5);\n x1 += jx;\n x2 += jx;\n y1 += jy;\n y2 += jy;\n ctx.moveTo(x1 * sx, this.height - y1 * sy);\n if (x1 == x2 && y1 == y2)\n ctx.lineTo(x2 * sx + 1, this.height - y2 * sy);\n else\n ctx.lineTo(x2 * sx, this.height - y2 * sy);\n ctx.strokeStyle = this.COLORS[color & 7];\n ctx.stroke();\n }\n }\n}\n\nexport function drawCrosshair(ctx: CanvasRenderingContext2D, x: number, y: number, width: number) {\n if (!ctx?.setLineDash) return; // for unit testing\n ctx.fillStyle = 'rgba(0,0,0,0.25)';\n ctx.fillRect(x - 2, 0, 5, 32767);\n ctx.fillRect(0, y - 2, 32767, 5);\n ctx.lineWidth = width;\n ctx.strokeStyle = 'rgba(255,255,255,0.75)';\n ctx.setLineDash([width * 2, width * 2]);\n ctx.beginPath();\n ctx.moveTo(x, 0);\n ctx.lineTo(x, 32767);\n ctx.moveTo(0, y);\n ctx.lineTo(32767, y);\n ctx.stroke();\n}\n\nexport class RAM {\n mem: Uint8Array;\n constructor(size: number) {\n this.mem = new Uint8Array(new ArrayBuffer(size));\n }\n}\n\nexport class EmuHalt extends Error {\n $loc: SourceLocation;\n squelchError = true;\n constructor(msg: string, loc?: SourceLocation) {\n super(msg);\n this.$loc = loc;\n Object.setPrototypeOf(this, EmuHalt.prototype);\n }\n}\n\nexport var useRequestAnimationFrame: boolean = false;\n\nexport class AnimationTimer {\n\n callback;\n running: boolean = false;\n pulsing: boolean = false;\n nextts = 0;\n nframes;\n startts; // for FPS calc\n frameRate;\n intervalMsec;\n useReqAnimFrame = useRequestAnimationFrame && typeof window.requestAnimationFrame === 'function'; // need for unit test\n\n constructor(frequencyHz: number, callback: () => void) {\n this.frameRate = frequencyHz;\n this.intervalMsec = 1000.0 / frequencyHz;\n this.callback = callback;\n }\n\n scheduleFrame(msec: number) {\n var fn = (timestamp) => {\n try {\n this.nextFrame(this.useReqAnimFrame ? timestamp : Date.now());\n } catch (e) {\n this.running = false;\n this.pulsing = false;\n throw e;\n }\n }\n if (this.useReqAnimFrame)\n window.requestAnimationFrame(fn);\n else\n setTimeout(fn, msec);\n }\n\n nextFrame(ts: number) {\n if (ts > this.nextts) {\n if (this.running) {\n this.callback();\n }\n if (this.nframes == 0)\n this.startts = ts;\n if (this.nframes++ == 300) {\n console.log(\"Avg framerate: \" + this.nframes * 1000 / (ts - this.startts) + \" fps\");\n }\n }\n this.nextts += this.intervalMsec;\n // frames skipped? catch up\n if ((ts - this.nextts) > 1000) {\n //console.log(ts - this.nextts, 'msec skipped');\n this.nextts = ts;\n }\n if (this.running) {\n this.scheduleFrame(this.nextts - ts);\n } else {\n this.pulsing = false;\n }\n }\n isRunning() {\n return this.running;\n }\n start() {\n if (!this.running) {\n this.running = true;\n this.nextts = 0;\n this.nframes = 0;\n if (!this.pulsing) {\n this.scheduleFrame(0);\n this.pulsing = true;\n }\n }\n }\n stop() {\n this.running = false;\n }\n}\n\n// TODO: move to util?\n\nexport function dumpRAM(ram: ArrayLike, ramofs: number, ramlen: number): string {\n var s = \"\";\n var bpel = ram['BYTES_PER_ELEMENT'] || 1;\n var perline = Math.ceil(16 / bpel);\n var isFloat = ram instanceof Float32Array || ram instanceof Float64Array;\n // TODO: show scrollable RAM for other platforms\n for (var ofs = 0; ofs < ramlen; ofs += perline) {\n s += '$' + hex(ofs + ramofs) + ':';\n for (var i = 0; i < perline; i++) {\n if (ofs + i < ram.length) {\n if (i == perline / 2) s += \" \";\n if (isFloat) s += \" \" + ram[ofs + i].toPrecision(bpel * 2);\n else s += \" \" + hex(ram[ofs + i], bpel * 2);\n }\n }\n s += \"\\n\";\n }\n return s;\n}\n\nexport interface KeyDef {\n c: number,\t// key code\n n: string,\t// name\n // for gamepad\n plyr?: number,\n xaxis?: number,\n yaxis?: number,\n button?: number\n};\n\nexport interface KeyMapEntry {\n index: number;\n mask: number;\n def: KeyDef;\n}\n\ntype KeyCodeMap = Map;\n\nexport const Keys = {\n ANYKEY: { c: 0, n: \"?\" },\n // https://w3c.github.io/gamepad/#remapping\n // gamepad and keyboard (player 0)\n UP: { c: 38, n: \"Up\", plyr: 0, button: 12, yaxis: -1 },\n DOWN: { c: 40, n: \"Down\", plyr: 0, button: 13, yaxis: 1 },\n LEFT: { c: 37, n: \"Left\", plyr: 0, button: 14, xaxis: -1 },\n RIGHT: { c: 39, n: \"Right\", plyr: 0, button: 15, xaxis: 1 },\n A: { c: 32, n: \"Space\", plyr: 0, button: 0 },\n B: { c: 16, n: \"Shift\", plyr: 0, button: 1 },\n GP_A: { c: 88, n: \"X\", plyr: 0, button: 0 },\n GP_B: { c: 90, n: \"Z\", plyr: 0, button: 1 },\n GP_C: { c: 86, n: \"V\", plyr: 0, button: 2 },\n GP_D: { c: 67, n: \"C\", plyr: 0, button: 3 },\n SELECT: { c: 220, n: \"\\\\\", plyr: 0, button: 8 },\n START: { c: 13, n: \"Enter\", plyr: 0, button: 9 },\n OPTION: { c: 8, n: \"Bcksp\", plyr: 0, button: 10 },\n // gamepad and keyboard (player 1)\n P2_UP: { c: 87, n: \"W\", plyr: 1, button: 12, yaxis: -1 },\n P2_DOWN: { c: 83, n: \"S\", plyr: 1, button: 13, yaxis: 1 },\n P2_LEFT: { c: 65, n: \"A\", plyr: 1, button: 14, xaxis: -1 },\n P2_RIGHT: { c: 68, n: \"D\", plyr: 1, button: 15, xaxis: 1 },\n P2_A: { c: 84, n: \"T\", plyr: 1, button: 0 },\n P2_B: { c: 82, n: \"R\", plyr: 1, button: 1 },\n P2_GP_A: { c: 69, n: \"E\", plyr: 1, button: 0 },\n P2_GP_B: { c: 82, n: \"R\", plyr: 1, button: 1 },\n P2_GP_C: { c: 84, n: \"T\", plyr: 1, button: 2 },\n P2_GP_D: { c: 89, n: \"Y\", plyr: 1, button: 3 },\n P2_SELECT: { c: 70, n: \"F\", plyr: 1, button: 8 },\n P2_START: { c: 71, n: \"G\", plyr: 1, button: 9 },\n // keyboard only\n VK_ESCAPE: { c: 27, n: \"Esc\" },\n VK_F1: { c: 112, n: \"F1\" },\n VK_F2: { c: 113, n: \"F2\" },\n VK_F3: { c: 114, n: \"F3\" },\n VK_F4: { c: 115, n: \"F4\" },\n VK_F5: { c: 116, n: \"F5\" },\n VK_F6: { c: 117, n: \"F6\" },\n VK_F7: { c: 118, n: \"F7\" },\n VK_F8: { c: 119, n: \"F8\" },\n VK_F9: { c: 120, n: \"F9\" },\n VK_F10: { c: 121, n: \"F10\" },\n VK_F11: { c: 122, n: \"F11\" },\n VK_F12: { c: 123, n: \"F12\" },\n VK_SCROLL_LOCK: { c: 145, n: \"ScrLck\" },\n VK_PAUSE: { c: 19, n: \"Pause\" },\n VK_QUOTE: { c: 222, n: \"'\" },\n VK_1: { c: 49, n: \"1\" },\n VK_2: { c: 50, n: \"2\" },\n VK_3: { c: 51, n: \"3\" },\n VK_4: { c: 52, n: \"4\" },\n VK_5: { c: 53, n: \"5\" },\n VK_6: { c: 54, n: \"6\" },\n VK_7: { c: 55, n: \"7\" },\n VK_8: { c: 56, n: \"8\" },\n VK_9: { c: 57, n: \"9\" },\n VK_0: { c: 48, n: \"0\" },\n VK_MINUS: { c: 189, n: \"-\" },\n VK_MINUS2: { c: 173, n: \"-\" },\n VK_EQUALS: { c: 187, n: \"=\" },\n VK_EQUALS2: { c: 61, n: \"=\" },\n VK_BACK_SPACE: { c: 8, n: \"Bkspc\" },\n VK_TAB: { c: 9, n: \"Tab\" },\n VK_Q: { c: 81, n: \"Q\" },\n VK_W: { c: 87, n: \"W\" },\n VK_E: { c: 69, n: \"E\" },\n VK_R: { c: 82, n: \"R\" },\n VK_T: { c: 84, n: \"T\" },\n VK_Y: { c: 89, n: \"Y\" },\n VK_U: { c: 85, n: \"U\" },\n VK_I: { c: 73, n: \"I\" },\n VK_O: { c: 79, n: \"O\" },\n VK_P: { c: 80, n: \"P\" },\n VK_ACUTE: { c: 219, n: \"\u00B4\" },\n VK_OPEN_BRACKET: { c: 219, n: \"[\" },\n VK_CLOSE_BRACKET: { c: 221, n: \"]\" },\n VK_CAPS_LOCK: { c: 20, n: \"CpsLck\" },\n VK_A: { c: 65, n: \"A\" },\n VK_S: { c: 83, n: \"S\" },\n VK_D: { c: 68, n: \"D\" },\n VK_F: { c: 70, n: \"F\" },\n VK_G: { c: 71, n: \"G\" },\n VK_H: { c: 72, n: \"H\" },\n VK_J: { c: 74, n: \"J\" },\n VK_K: { c: 75, n: \"K\" },\n VK_L: { c: 76, n: \"L\" },\n VK_CEDILLA: { c: 186, n: \"\u00C7\" },\n VK_TILDE: { c: 222, n: \"~\" },\n VK_ENTER: { c: 13, n: \"Enter\" },\n VK_SHIFT: { c: 16, n: \"Shift\" },\n VK_BACK_SLASH: { c: 220, n: \"\\\\\" },\n VK_Z: { c: 90, n: \"Z\" },\n VK_X: { c: 88, n: \"X\" },\n VK_C: { c: 67, n: \"C\" },\n VK_V: { c: 86, n: \"V\" },\n VK_B: { c: 66, n: \"B\" },\n VK_N: { c: 78, n: \"N\" },\n VK_M: { c: 77, n: \"M\" },\n VK_COMMA: { c: 188, n: \"] =\" },\n VK_PERIOD: { c: 190, n: \".\" },\n VK_SEMICOLON: { c: 59, n: \";\" },\n VK_SLASH: { c: 191, n: \"/\" },\n VK_CONTROL: { c: 17, n: \"Ctrl\" },\n VK_ALT: { c: 18, n: \"Alt\" },\n VK_COMMAND: { c: 224, n: \"Cmd\" },\n VK_SPACE: { c: 32, n: \"Space\" },\n VK_INSERT: { c: 45, n: \"Ins\" },\n VK_DELETE: { c: 46, n: \"Del\" },\n VK_HOME: { c: 36, n: \"Home\" },\n VK_END: { c: 35, n: \"End\" },\n VK_PAGE_UP: { c: 33, n: \"PgUp\" },\n VK_PAGE_DOWN: { c: 34, n: \"PgDown\" },\n VK_UP: { c: 38, n: \"Up\" },\n VK_DOWN: { c: 40, n: \"Down\" },\n VK_LEFT: { c: 37, n: \"Left\" },\n VK_RIGHT: { c: 39, n: \"Right\" },\n VK_NUM_LOCK: { c: 144, n: \"Num\" },\n VK_DIVIDE: { c: 111, n: \"Num /\" },\n VK_MULTIPLY: { c: 106, n: \"Num *\" },\n VK_SUBTRACT: { c: 109, n: \"Num -\" },\n VK_ADD: { c: 107, n: \"Num +\" },\n VK_DECIMAL: { c: 194, n: \"Num .\" },\n VK_NUMPAD0: { c: 96, n: \"Num 0\" },\n VK_NUMPAD1: { c: 97, n: \"Num 1\" },\n VK_NUMPAD2: { c: 98, n: \"Num 2\" },\n VK_NUMPAD3: { c: 99, n: \"Num 3\" },\n VK_NUMPAD4: { c: 100, n: \"Num 4\" },\n VK_NUMPAD5: { c: 101, n: \"Num 5\" },\n VK_NUMPAD6: { c: 102, n: \"Num 6\" },\n VK_NUMPAD7: { c: 103, n: \"Num 7\" },\n VK_NUMPAD8: { c: 104, n: \"Num 8\" },\n VK_NUMPAD9: { c: 105, n: \"Num 9\" },\n VK_NUMPAD_CENTER: { c: 12, n: \"Num Cntr\" }\n};\n\nfunction _metakeyflags(e) {\n return (e.shiftKey ? KeyFlags.Shift : 0) |\n (e.ctrlKey ? KeyFlags.Ctrl : 0) |\n (e.altKey ? KeyFlags.Alt : 0) |\n (e.metaKey ? KeyFlags.Meta : 0);\n}\n\ntype KeyMapFunction = (o: KeyMapEntry, key: number, code: number, flags: number) => void;\n\nexport function newKeyboardHandler(switches: number[] | Uint8Array, map: KeyCodeMap, func?: KeyMapFunction, alwaysfunc?: boolean) {\n return (key: number, code: number, flags: number) => {\n if (!map) {\n func(null, key, code, flags);\n return;\n }\n var o: KeyMapEntry = map[key];\n if (!o) o = map[0];\n if (func && (o || alwaysfunc)) {\n func(o, key, code, flags);\n }\n if (o) {\n //console.log(key,code,flags,o);\n var mask = o.mask;\n if (mask < 0) { // negative mask == active low\n mask = -mask;\n if (flags & (KeyFlags.KeyDown | KeyFlags.KeyUp))\n flags ^= KeyFlags.KeyDown | KeyFlags.KeyUp;\n }\n if (flags & KeyFlags.KeyDown) {\n switches[o.index] |= mask;\n } else if (flags & KeyFlags.KeyUp) {\n switches[o.index] &= ~mask;\n }\n }\n };\n}\n\nexport function setKeyboardFromMap(video: RasterVideo, switches: number[] | Uint8Array, map: KeyCodeMap, func?: KeyMapFunction, alwaysfunc?: boolean) {\n var handler = newKeyboardHandler(switches, map, func, alwaysfunc);\n video.setKeyboardEvents(handler);\n return new ControllerPoller(handler);\n}\n\nexport function makeKeycodeMap(table: [KeyDef, number, number][]): KeyCodeMap {\n var map = new Map();\n for (var i = 0; i < table.length; i++) {\n var entry = table[i];\n var val: KeyMapEntry = { index: entry[1], mask: entry[2], def: entry[0] };\n map[entry[0].c] = val;\n }\n return map;\n}\n\n// TODO: P2_GP_B and P2_GP_C share keycodes with P2_B and P2_A, so they can't\n// be listed here without button 1/2 double-binding on player 2.\nconst DEFAULT_CONTROLLER_KEYS: KeyDef[] = [\n Keys.UP, Keys.DOWN, Keys.LEFT, Keys.RIGHT, Keys.A, Keys.B, Keys.SELECT, Keys.START,\n Keys.GP_A, Keys.GP_B, Keys.GP_C, Keys.GP_D, Keys.OPTION,\n Keys.P2_UP, Keys.P2_DOWN, Keys.P2_LEFT, Keys.P2_RIGHT, Keys.P2_A, Keys.P2_B, Keys.P2_SELECT, Keys.P2_START,\n Keys.P2_GP_A, Keys.P2_GP_D,\n];\n\n// Gamepad helper\nexport class ControllerPoller {\n active = false;\n handler;\n state: Int32Array[];\n lastState: Int32Array[];\n AXIS0 = 24; // first joystick axis index\n constructor(handler: (key, code, flags) => void) {\n this.handler = handler;\n window.addEventListener(\"gamepadconnected\", (event) => {\n console.log(\"Gamepad connected:\", event);\n this.reset();\n });\n window.addEventListener(\"gamepaddisconnected\", (event) => {\n console.log(\"Gamepad disconnected:\", event);\n this.reset();\n });\n }\n reset() {\n if (typeof navigator.getGamepads === 'function') {\n let numGamepads = navigator.getGamepads()?.length;\n this.state = new Array(numGamepads);\n this.lastState = new Array(numGamepads);\n for (var i = 0; i < numGamepads; i++) {\n this.state[i] = new Int32Array(64);\n this.lastState[i] = new Int32Array(64);\n }\n this.active = this.state?.length > 0;\n }\n }\n start() {\n this.reset();\n }\n stop() {\n this.active = false;\n }\n poll() {\n if (!this.active) return;\n var gamepads = navigator.getGamepads && navigator.getGamepads();\n for (var gpi = 0; gpi < gamepads.length; gpi++) {\n let state = this.state[gpi];\n let lastState = this.lastState[gpi];\n var gp = gamepads[gpi];\n if (gp) {\n for (var i = 0; i < gp.axes.length; i++) {\n var k = i + this.AXIS0;\n state[k] = Math.round(gp.axes[i]);\n if (state[k] != lastState[k]) {\n this.handleStateChange(gpi, k);\n }\n }\n for (var i = 0; i < gp.buttons.length; i++) {\n state[i] = gp.buttons[i].pressed ? 1 : 0;\n if (state[i] != lastState[i]) {\n this.handleStateChange(gpi, i);\n }\n }\n lastState.set(state);\n }\n }\n }\n handleStateChange(gpi: number, k: number) {\n var axis = k - this.AXIS0;\n var state = this.state[gpi][k];\n var lastState = this.lastState[gpi][k];\n // TODO: this is slow\n for (var def of DEFAULT_CONTROLLER_KEYS) {\n // is this a gamepad entry? same player #?\n if (!def || def.plyr != gpi) continue;\n // does this key map to the button/axis that changed?\n // an axis has to be compared against the direction the key stands for,\n // so that e.g. a left-to-right flick releases LEFT and presses RIGHT\n var active: boolean, wasActive: boolean;\n if (def.button != null && k == def.button) {\n active = state != 0;\n wasActive = lastState != 0;\n } else if (axis == 0 && def.xaxis != null) {\n active = def.xaxis == state;\n wasActive = def.xaxis == lastState;\n } else if (axis == 1 && def.yaxis != null) {\n active = def.yaxis == state;\n wasActive = def.yaxis == lastState;\n } else {\n continue;\n }\n // don't break -- several keys can share a button (e.g. A and GP_A)\n //console.log(\"Gamepad\", gpi, def.c, state);\n if (active && !wasActive) {\n this.handler(def.c, 0, KeyFlags.KeyDown);\n } else if (!active && wasActive) {\n this.handler(def.c, 0, KeyFlags.KeyUp);\n }\n }\n }\n}\n\n// handy for loadROM()\nexport function padBytes(data: Uint8Array | number[], len: number, padstart?: boolean): Uint8Array {\n if (data.length > len) {\n throw Error(\"Data too long, \" + data.length + \" > \" + len);\n }\n var r = new RAM(len);\n if (padstart)\n r.mem.set(data, len - data.length);\n else\n r.mem.set(data);\n return r.mem;\n}\n\ntype AddressReadWriteFn = ((a: number) => number) | ((a: number, v: number) => void);\ntype AddressDecoderEntry = [number, number, number, AddressReadWriteFn];\ntype AddressDecoderOptions = { gmask?: number, defaultval?: number };\n\n// TODO: better performance, check values\nexport function AddressDecoder(table: AddressDecoderEntry[], options?: AddressDecoderOptions) {\n var self = this;\n function makeFunction() {\n var s = \"\";\n if (options && options.gmask) {\n s += \"a&=\" + options.gmask + \";\";\n }\n for (var i = 0; i < table.length; i++) {\n var entry = table[i];\n var start = entry[0] | 0;\n var end = entry[1] | 0;\n var mask = entry[2] | 0;\n var func = entry[3];\n self['__fn' + i] = func;\n s += \"if (a>=\" + start + \" && a<=\" + end + \"){\";\n if (mask) s += \"a&=\" + mask + \";\";\n s += \"return this.__fn\" + i + \"(a,v)&0xff;}\\n\";\n }\n s += \"return \" + (options?.defaultval | 0) + \";\";\n return new Function('a', 'v', s);\n }\n return makeFunction().bind(self);\n}\n\nexport function newAddressDecoder(table: AddressDecoderEntry[], options?: AddressDecoderOptions): (a: number, v?: number) => number {\n return new (AddressDecoder as any)(table, options);\n}\n\n\n// https://stackoverflow.com/questions/17130395/real-mouse-position-in-canvas\nexport function getMousePos(canvas: HTMLCanvasElement, evt): { x: number, y: number } {\n // Improves reachability of min and max values at edges of canvas. Without delta,\n // min and max values would be represented by 1/2 as many pixels as other values.\n const delta = .5;\n // Canvas HTML element has integer `width` and `height`, but getBoundingClientRect() pos & size\n // are scaled to non-integer values. Mouse events return integer x/y values in the range\n // [Math.floor(rect.left/top), Math.floor(rect.left/top) + Math.floor(rect.width/height)],\n // which may not be the same as [Math.floor(rect.left/top), Math.floor(rect.right/bottom)].\n var rect = canvas.getBoundingClientRect(), // abs. size of element\n // Ignore canvas borders and padding, so mouse position is relative to canvas content.\n style = window.getComputedStyle(canvas),\n left = parseFloat(style.borderLeftWidth) + parseFloat(style.paddingLeft),\n right = parseFloat(style.borderRightWidth) + parseFloat(style.paddingRight),\n top = parseFloat(style.borderTopWidth) + parseFloat(style.paddingTop),\n bottom = parseFloat(style.borderBottomWidth) + parseFloat(style.paddingBottom),\n width = rect.width - left - right,\n height = rect.height - top - bottom,\n\n // Determine scale factors to map mouse coordinates to canvas coordinates.\n scaleX = canvas.width / Math.floor(width - 2 * delta),\n scaleY = canvas.height / Math.floor(height - 2 * delta),\n\n // Scale coordinates after they've been adjusted to be relative to canvas content.\n x = (evt.clientX - delta - rect.left - left) * scaleX,\n y = (evt.clientY - delta - rect.top - top) * scaleY;\n return {\n // Clamp to [0, canvas.width/height] to prevent non-integer rect position\n // and size, and potentially `delta`, from returning out of bounds values.\n x: Math.max(0, Math.min(canvas.width, x)),\n y: Math.max(0, Math.min(canvas.height, y))\n }\n}\n\n\n"], + "mappings": "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", + "names": ["lpad", "s", "n", "rpad", "byte2signed", "b", "getFilenameForPath", "toks", "getFolderForPath", "getFilenamePrefix", "pos", "hex", "v", "nd", "toradix", "tobin", "radix", "e", "arrayCompare", "a", "i", "invertMap", "m", "r", "k", "highlightDifferences", "s1", "s2", "split1", "split2", "j", "result", "w1", "w2", "lzgmini", "LZG_HEADER_SIZE", "LZG_METHOD_COPY", "LZG_METHOD_LZG1", "LZG_LENGTH_DECODE_LUT", "outdata", "calcChecksum", "data", "uncomplen", "checksum", "dst", "method", "m1", "m2", "m3", "m4", "symbol", "b2", "b3", "len", "offset", "dstlen", "datalen", "byteArrayToString", "byteArrayToUTF8", "stringToByteArray", "str", "charLUT", "c", "isProbablyBinary", "path", "data", "score", "BINEXTS", "ext", "i", "c", "nextra", "compressLZG", "em_module", "inBuffer", "levelArg", "level", "inLen", "inPtr", "maxEncSize", "outPtr", "compLen", "outBuffer", "safe_extend", "deep", "dest", "src", "key", "val", "type", "printFlags", "names", "r2l", "s", "bit", "rgb2bgr", "x", "RGBA", "r", "g", "b", "clamp", "minv", "maxv", "v", "safeident", "rle_unpack", "tag", "ch", "count", "j", "getWithBinary", "url", "success", "datatype", "oReq", "oEvent", "getBasePlatform", "platform", "getRootPlatform", "getRootBasePlatform", "isArray", "obj", "isTypedArray", "convertDataToUint8Array", "stringToByteArray", "byteToASCII", "b", "loadScript", "scriptfn", "resolve", "reject", "script", "decodeQueryString", "qs", "a", "p", "parseBool", "s", "replaceAll", "s", "search", "replace", "getCookie", "name", "nameEQ", "ca", "c", "PLATFORMS", "_random_state", "noise", "x", "getNoiseSeed", "setNoiseSeed", "__createCanvas", "doc", "mainElement", "width", "height", "canvas", "_setKeyboardEvents", "canvas", "callback", "e", "flags", "_metakeyflags", "RasterVideo", "mainElement", "width", "height", "options", "rotate", "doc", "__createCanvas", "sx", "sy", "dx", "dy", "w", "h", "ctx", "el", "pos", "getMousePos", "new_x", "new_y", "clamp", "VectorVideo", "x1", "y1", "x2", "y2", "intensity", "color", "alpha", "jx", "jy", "drawCrosshair", "x", "y", "RAM", "size", "EmuHalt", "_EmuHalt", "msg", "loc", "useRequestAnimationFrame", "AnimationTimer", "frequencyHz", "msec", "fn", "timestamp", "ts", "dumpRAM", "ram", "ramofs", "ramlen", "s", "bpel", "perline", "isFloat", "ofs", "hex", "i", "Keys", "newKeyboardHandler", "switches", "map", "func", "alwaysfunc", "key", "code", "o", "mask", "setKeyboardFromMap", "video", "handler", "ControllerPoller", "makeKeycodeMap", "table", "entry", "val", "DEFAULT_CONTROLLER_KEYS", "event", "_a", "_b", "numGamepads", "gamepads", "gpi", "state", "lastState", "gp", "k", "axis", "def", "active", "wasActive", "padBytes", "data", "len", "padstart", "r", "AddressDecoder", "self", "makeFunction", "start", "end", "newAddressDecoder", "evt", "rect", "style", "left", "right", "top", "bottom", "scaleX", "scaleY"] } diff --git a/gen/chunk-XFYJARCV.js b/gen/chunk-CNVRUIAM.js similarity index 96% rename from gen/chunk-XFYJARCV.js rename to gen/chunk-CNVRUIAM.js index 3c38cebc..669cfc00 100644 --- a/gen/chunk-XFYJARCV.js +++ b/gen/chunk-CNVRUIAM.js @@ -1,5 +1,5 @@ -import{U as v,a as F,g as P,r as d,u as R,v as b}from"./chunk-5H5GMVON.js";function _(e){let a=e>>4&15,h=e&15,r=a?60:0;a&&(h+=1);let f=((a-1)*25-25)*(2*Math.PI/360),g=256*1.1*Math.pow(h/16,.9),p=r*Math.cos(f),O=r*Math.sin(f);var y=g+.956*p+.621*O,k=g-.272*p-.647*O,w=g-1.107*p+1.704*O;return R(b(0,255,y),b(0,255,k),b(0,255,w))}var I=0;var B=8,E=12,M=13,j=17,n=18,c=22,G=23,U=24,D=25,o=26,u=27,H=28,C=29,K=30,N=31,$=0,Z=4,q=8,x=12,J=16,z=31,L=-9,m=[0,1,2,3,7,7,7,7,8,8,8,8,4,5,6,7,0,1,2,3,7,7,7,7,8,8,8,8,4,5,6,7,0,1,6,7,5,5,5,5,8,8,8,8,2,3,4,5,0,1,6,7,5,5,5,5,8,8,8,8,2,3,4,5,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7],V=[n+0,n+1,n+2,n+3,c+0,c+1,c+2,c+3,o,o,o,o,c+0,c+1,c+2,c+3],T=class{constructor(){this.regs=new Uint8Array(32);this.readregs=new Uint8Array(32);this.shiftregs=new Uint32Array(8);this.count=0;this.an=0;this.rgb=0;this.pmcol=0;this.gtiacol=0;this.gtiacol2=0;this.hbias=L;this.pmDebugMask=-1}reset(){this.regs.fill(0),this.readregs.fill(0),this.readregs[20]=15,this.readregs.fill(15,21),this.count=0}saveState(){return d(0,{},this)}loadState(t){d(0,this,t)}setReg(t,s){switch(t){case n:case n+1:case n+2:case n+3:case c:case c+1:case c+2:case c+3:case o:s&=254;break;case K:this.readregs.fill(0,0,16);return}this.regs[t]=s}readReg(t){switch(t){case z:return this.readregs[t]&~this.regs[N]}return this.readregs[t]}sync(){this.count=0}setBias(t){this.hbias=L+t}updateGfx(t,s,i){switch(t){case 0:this.regs[C]&1&&(this.regs[j]=i);break;case 2:case 3:case 4:case 5:this.regs[C]&2&&(!(s&1)||!(this.regs[H]&1<>6){case 0:switch(this.an){case 0:return o;case 4:case 5:case 6:case 7:return c+this.an-4;case 8:return this.regs[U]&240|this.regs[G]&15|256}break;case 1:return this.regs[o]&240|this.gtiacol&15|256;case 2:return V[this.gtiacol];case 3:return this.regs[o]&15|this.gtiacol<<4|256}return 256}anySpriteActive(){return this.shiftregs[0]||this.shiftregs[1]||this.shiftregs[2]||this.shiftregs[3]||this.shiftregs[4]||this.shiftregs[5]||this.shiftregs[6]||this.shiftregs[7]}processPlayerMissile(){if(!this.anySpriteActive()){this.evalTrigger(0),this.evalTrigger(1),this.evalTrigger(2),this.evalTrigger(3),this.evalTrigger(4),this.evalTrigger(5),this.evalTrigger(6),this.evalTrigger(7),this.pmcol=-1;return}if(this.an==2){this.shiftObject(0),this.shiftObject(1),this.shiftObject(2),this.shiftObject(3),this.shiftObject(4),this.shiftObject(5),this.shiftObject(6),this.shiftObject(7),this.pmcol=-1;return}let t=(this.regs[u]&15)<<4,s=m[(this.an&7)+8+t],i=this.an-4,a=-1,h=0;for(let r=0;r<4;r++)if(this.shiftObject(r)){i>=0&&(this.readregs[Z+r]|=1<=0&&(this.readregs[$+r]|=1<=0?this.getObjectColor(a):-1}shiftObject(t){let s=(this.shiftregs[t]&2147483648)!=0;return this.shiftregs[t]<<=1,this.evalTrigger(t),s}getObjectColor(t){return this.regs[u]&16&&t>=4?this.regs[D]:this.regs[n+(t&3)]}evalTrigger(t){this.regs[I+t]+this.hbias==this.count&&this.triggerObject(t)}triggerObject(t){let s,i;if(this.pmDebugMask&1<>a&3,i=(this.regs[j]>>a&3)<<6}s&1?i=A(i):i<<=8,s==3?i=A(i):i<<=16,this.shiftregs[t]|=i}}clockPulse1(){this.processPlayerMissile(),this.clockPulse2(),this.count++}clockPulse2(){var t;if(this.pmcol>=0)t=this.pmcol;else{let s=this.getPlayfieldColor();t=s&256?s&255:this.regs[s]}this.rgb=S[t],this.gtiacol2=this.gtiacol2<<1|this.an>>3}clockPulse4(){this.gtiacol=this.gtiacol2&15}static stateToLongString(t){let s="";return s+=`X: ${F(t.count,3)} ANTIC: ${P(t.an,1)} PM: ${P(t.pmcol,3)} +import{U as v,a as F,g as P,r as d,u as R,v as b}from"./chunk-BNFOPPUS.js";function _(e){let a=e>>4&15,h=e&15,r=a?60:0;a&&(h+=1);let f=((a-1)*25-25)*(2*Math.PI/360),g=256*1.1*Math.pow(h/16,.9),p=r*Math.cos(f),O=r*Math.sin(f);var y=g+.956*p+.621*O,k=g-.272*p-.647*O,w=g-1.107*p+1.704*O;return R(b(0,255,y),b(0,255,k),b(0,255,w))}var I=0;var B=8,E=12,M=13,j=17,n=18,c=22,G=23,U=24,D=25,o=26,u=27,H=28,C=29,K=30,N=31,$=0,Z=4,q=8,x=12,J=16,z=31,L=-9,m=[0,1,2,3,7,7,7,7,8,8,8,8,4,5,6,7,0,1,2,3,7,7,7,7,8,8,8,8,4,5,6,7,0,1,6,7,5,5,5,5,8,8,8,8,2,3,4,5,0,1,6,7,5,5,5,5,8,8,8,8,2,3,4,5,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7],V=[n+0,n+1,n+2,n+3,c+0,c+1,c+2,c+3,o,o,o,o,c+0,c+1,c+2,c+3],T=class{constructor(){this.regs=new Uint8Array(32);this.readregs=new Uint8Array(32);this.shiftregs=new Uint32Array(8);this.count=0;this.an=0;this.rgb=0;this.pmcol=0;this.gtiacol=0;this.gtiacol2=0;this.hbias=L;this.pmDebugMask=-1}reset(){this.regs.fill(0),this.readregs.fill(0),this.readregs[20]=15,this.readregs.fill(15,21),this.count=0}saveState(){return d(0,{},this)}loadState(t){d(0,this,t)}setReg(t,s){switch(t){case n:case n+1:case n+2:case n+3:case c:case c+1:case c+2:case c+3:case o:s&=254;break;case K:this.readregs.fill(0,0,16);return}this.regs[t]=s}readReg(t){switch(t){case z:return this.readregs[t]&~this.regs[N]}return this.readregs[t]}sync(){this.count=0}setBias(t){this.hbias=L+t}updateGfx(t,s,i){switch(t){case 0:this.regs[C]&1&&(this.regs[j]=i);break;case 2:case 3:case 4:case 5:this.regs[C]&2&&(!(s&1)||!(this.regs[H]&1<>6){case 0:switch(this.an){case 0:return o;case 4:case 5:case 6:case 7:return c+this.an-4;case 8:return this.regs[U]&240|this.regs[G]&15|256}break;case 1:return this.regs[o]&240|this.gtiacol&15|256;case 2:return V[this.gtiacol];case 3:return this.regs[o]&15|this.gtiacol<<4|256}return 256}anySpriteActive(){return this.shiftregs[0]||this.shiftregs[1]||this.shiftregs[2]||this.shiftregs[3]||this.shiftregs[4]||this.shiftregs[5]||this.shiftregs[6]||this.shiftregs[7]}processPlayerMissile(){if(!this.anySpriteActive()){this.evalTrigger(0),this.evalTrigger(1),this.evalTrigger(2),this.evalTrigger(3),this.evalTrigger(4),this.evalTrigger(5),this.evalTrigger(6),this.evalTrigger(7),this.pmcol=-1;return}if(this.an==2){this.shiftObject(0),this.shiftObject(1),this.shiftObject(2),this.shiftObject(3),this.shiftObject(4),this.shiftObject(5),this.shiftObject(6),this.shiftObject(7),this.pmcol=-1;return}let t=(this.regs[u]&15)<<4,s=m[(this.an&7)+8+t],i=this.an-4,a=-1,h=0;for(let r=0;r<4;r++)if(this.shiftObject(r)){i>=0&&(this.readregs[Z+r]|=1<=0&&(this.readregs[$+r]|=1<=0?this.getObjectColor(a):-1}shiftObject(t){let s=(this.shiftregs[t]&2147483648)!=0;return this.shiftregs[t]<<=1,this.evalTrigger(t),s}getObjectColor(t){return this.regs[u]&16&&t>=4?this.regs[D]:this.regs[n+(t&3)]}evalTrigger(t){this.regs[I+t]+this.hbias==this.count&&this.triggerObject(t)}triggerObject(t){let s,i;if(this.pmDebugMask&1<>a&3,i=(this.regs[j]>>a&3)<<6}s&1?i=A(i):i<<=8,s==3?i=A(i):i<<=16,this.shiftregs[t]|=i}}clockPulse1(){this.processPlayerMissile(),this.clockPulse2(),this.count++}clockPulse2(){var t;if(this.pmcol>=0)t=this.pmcol;else{let s=this.getPlayfieldColor();t=s&256?s&255:this.regs[s]}this.rgb=S[t],this.gtiacol2=this.gtiacol2<<1|this.an>>3}clockPulse4(){this.gtiacol=this.gtiacol2&15}static stateToLongString(t){let s="";return s+=`X: ${F(t.count,3)} ANTIC: ${P(t.an,1)} PM: ${P(t.pmcol,3)} `,s+=`Write Registers: `,s+=v(t.regs,0,32),s+=`Read Registers: `,s+=v(t.readregs,0,32),s}};function A(e){return e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,e|e<<1}var S=new Uint32Array(256);for(l=0;l<256;l++)S[l]=_(l);var l;export{_ as a,J as b,z as c,T as d}; -//# sourceMappingURL=chunk-XFYJARCV.js.map +//# sourceMappingURL=chunk-CNVRUIAM.js.map diff --git a/gen/chunk-XFYJARCV.js.map b/gen/chunk-CNVRUIAM.js.map similarity index 100% rename from gen/chunk-XFYJARCV.js.map rename to gen/chunk-CNVRUIAM.js.map diff --git a/gen/chunk-PMMIZ2W7.js b/gen/chunk-EZINONP5.js similarity index 97% rename from gen/chunk-PMMIZ2W7.js rename to gen/chunk-EZINONP5.js index 857d14bd..88b6256c 100644 --- a/gen/chunk-PMMIZ2W7.js +++ b/gen/chunk-EZINONP5.js @@ -1,4 +1,4 @@ -import{B as w,a as b,b as v,z as P}from"./chunk-AK7O6YZI.js";import{O as S,R as p,T as C}from"./chunk-5H5GMVON.js";var o=class{constructor(t){this.loaded=!1;this.preinitted=!1;this.started=!1;this.romtype="cart";this.running=!1;this.initluavars=!1;this.mainElement=t,this.timer=new C(20,this.poll.bind(this))}luacall(t){return this.js_lua_string||(this.js_lua_string=Module.cwrap("_Z13js_lua_stringPKc","string",["string"])),this.js_lua_string(t||"")}_pause(){this.running=!1,this.timer.stop()}pause(){this.loaded&&this.running&&(this.luacall("emu.pause()"),this._pause())}_resume(){this.luacall("emu.unpause()"),this.running=!0,this.timer.start()}resume(){this.loaded&&!this.running&&this._resume()}reset(){this.loaded&&(this.luacall("manager:machine():soft_reset()"),this.running=!0,this.initluavars=!1)}isRunning(){return this.running}bufferConsoleOutput(t){typeof t=="string"&&console.log(t)}startModule(t,e){this.started=!0;var r=this.romfn=this.romfn||e.romfn,n=this.romdata=this.romdata||e.romdata||new p(e.romsize).mem,g=this.romtype=this.romtype||e.romtype,a=this.video=new S(this.mainElement,e.width,e.height);a.create(),$(a.canvas).attr("id","canvas"),console.log("loading",e.jsfile);var u=[e.driver,"-debug","-debugger","none","-verbose","-window","-nokeepaspect","-resolution",a.canvas.width+"x"+a.canvas.height];r&&u.push("-"+g,r),e.extraargs&&(u=u.concat(e.extraargs)),console.log(u),window.JSMESS={},window.Module={arguments:u,screenIsReadOnly:!0,print:this.bufferConsoleOutput,canvas:a.canvas,doNotCaptureKeyboard:!0,keyboardListeningElement:a.canvas,preInit:()=>{console.log("loading FS"),ENV.SDL_EMSCRIPTEN_KEYBOARD_ELEMENT="canvas",e.cfgfile&&(FS.mkdir("/cfg"),FS.writeFile("/cfg/"+e.cfgfile,e.cfgdata,{encoding:"utf8"})),e.biosfile&&(FS.mkdir("/roms"),FS.mkdir("/roms/"+e.driver),FS.writeFile("/roms/"+e.biosfile,e.biosdata,{encoding:"binary"})),FS.mkdir("/emulator"),r&&FS.writeFile(r,n,{encoding:"binary"}),e.preInit&&e.preInit(self),this.preinitted=!0},preRun:[()=>{$(a.canvas).click(i=>{a.canvas.focus()}),this.loaded=!0,console.log("about to run...")}]};var d,c,m=$.Deferred(),f=$.Deferred();if(e.cfgfile&&(d=$.get("mame/cfg/"+e.cfgfile,i=>{e.cfgdata=i,console.log("loaded "+e.cfgfile)},"text")),e.biosfile){var s=new XMLHttpRequest;s.open("GET","mame/roms/"+e.biosfile,!0),s.responseType="arraybuffer",s.onload=i=>{e.biosdata=new Uint8Array(s.response),console.log("loaded "+e.biosfile),m.resolve()},s.ontimeout=function(i){throw Error("Timeout loading "+e.biosfile)},s.send()}else m.resolve();c=$.get("mame/debugger.lua",i=>{this.luadebugscript=i,console.log("loaded debugger.lua")},"text");{var l=new XMLHttpRequest;l.open("GET","mame/"+e.jsfile.replace(".js",".wasm"),!0),l.responseType="arraybuffer",l.onload=i=>{console.log("loaded WASM file"),window.Module.wasmBinary=new Uint8Array(l.response),f.resolve()},l.ontimeout=function(i){throw Error("Timeout loading "+e.jsfile)},l.send()}$.when(c,d,m,f).done(()=>{var i=document.createElement("script");i.src="mame/"+e.jsfile,document.getElementsByTagName("head")[0].appendChild(i),console.log("created script element")}),window.mamelua=i=>(this.initlua(),[i,this.luacall(i)])}loadROMFile(t){this.romdata=t,this.preinitted&&this.romfn&&FS.writeFile(this.romfn,t,{encoding:"binary"})}loadRegion(t,e){if(this.loaded&&e.length>0){for(var r='rgn = manager:machine():memory().regions["'+t+`"] +import{B as w,a as b,b as v,z as P}from"./chunk-AA227H53.js";import{O as S,R as p,T as C}from"./chunk-BNFOPPUS.js";var o=class{constructor(t){this.loaded=!1;this.preinitted=!1;this.started=!1;this.romtype="cart";this.running=!1;this.initluavars=!1;this.mainElement=t,this.timer=new C(20,this.poll.bind(this))}luacall(t){return this.js_lua_string||(this.js_lua_string=Module.cwrap("_Z13js_lua_stringPKc","string",["string"])),this.js_lua_string(t||"")}_pause(){this.running=!1,this.timer.stop()}pause(){this.loaded&&this.running&&(this.luacall("emu.pause()"),this._pause())}_resume(){this.luacall("emu.unpause()"),this.running=!0,this.timer.start()}resume(){this.loaded&&!this.running&&this._resume()}reset(){this.loaded&&(this.luacall("manager:machine():soft_reset()"),this.running=!0,this.initluavars=!1)}isRunning(){return this.running}bufferConsoleOutput(t){typeof t=="string"&&console.log(t)}startModule(t,e){this.started=!0;var r=this.romfn=this.romfn||e.romfn,n=this.romdata=this.romdata||e.romdata||new p(e.romsize).mem,g=this.romtype=this.romtype||e.romtype,a=this.video=new S(this.mainElement,e.width,e.height);a.create(),$(a.canvas).attr("id","canvas"),console.log("loading",e.jsfile);var u=[e.driver,"-debug","-debugger","none","-verbose","-window","-nokeepaspect","-resolution",a.canvas.width+"x"+a.canvas.height];r&&u.push("-"+g,r),e.extraargs&&(u=u.concat(e.extraargs)),console.log(u),window.JSMESS={},window.Module={arguments:u,screenIsReadOnly:!0,print:this.bufferConsoleOutput,canvas:a.canvas,doNotCaptureKeyboard:!0,keyboardListeningElement:a.canvas,preInit:()=>{console.log("loading FS"),ENV.SDL_EMSCRIPTEN_KEYBOARD_ELEMENT="canvas",e.cfgfile&&(FS.mkdir("/cfg"),FS.writeFile("/cfg/"+e.cfgfile,e.cfgdata,{encoding:"utf8"})),e.biosfile&&(FS.mkdir("/roms"),FS.mkdir("/roms/"+e.driver),FS.writeFile("/roms/"+e.biosfile,e.biosdata,{encoding:"binary"})),FS.mkdir("/emulator"),r&&FS.writeFile(r,n,{encoding:"binary"}),e.preInit&&e.preInit(self),this.preinitted=!0},preRun:[()=>{$(a.canvas).click(i=>{a.canvas.focus()}),this.loaded=!0,console.log("about to run...")}]};var d,c,m=$.Deferred(),f=$.Deferred();if(e.cfgfile&&(d=$.get("mame/cfg/"+e.cfgfile,i=>{e.cfgdata=i,console.log("loaded "+e.cfgfile)},"text")),e.biosfile){var s=new XMLHttpRequest;s.open("GET","mame/roms/"+e.biosfile,!0),s.responseType="arraybuffer",s.onload=i=>{e.biosdata=new Uint8Array(s.response),console.log("loaded "+e.biosfile),m.resolve()},s.ontimeout=function(i){throw Error("Timeout loading "+e.biosfile)},s.send()}else m.resolve();c=$.get("mame/debugger.lua",i=>{this.luadebugscript=i,console.log("loaded debugger.lua")},"text");{var l=new XMLHttpRequest;l.open("GET","mame/"+e.jsfile.replace(".js",".wasm"),!0),l.responseType="arraybuffer",l.onload=i=>{console.log("loaded WASM file"),window.Module.wasmBinary=new Uint8Array(l.response),f.resolve()},l.ontimeout=function(i){throw Error("Timeout loading "+e.jsfile)},l.send()}$.when(c,d,m,f).done(()=>{var i=document.createElement("script");i.src="mame/"+e.jsfile,document.getElementsByTagName("head")[0].appendChild(i),console.log("created script element")}),window.mamelua=i=>(this.initlua(),[i,this.luacall(i)])}loadROMFile(t){this.romdata=t,this.preinitted&&this.romfn&&FS.writeFile(this.romfn,t,{encoding:"binary"})}loadRegion(t,e){if(this.loaded&&e.length>0){for(var r='rgn = manager:machine():memory().regions["'+t+`"] `,n=0;n{(function(i){if(typeof r0=="object"&&typeof Yu!="undefined")Yu.exports=i();else if(typeof define=="function"&&define.amd)define([],i);else{var e;typeof window!="undefined"?e=window:typeof global!="undefined"?e=global:typeof self!="undefined"?e=self:e=this,e.localforage=i()}})(function(){var i,e,t;return(function r(n,s,o){function a(f,O){if(!s[f]){if(!n[f]){var p=typeof Za=="function"&&Za;if(!O&&p)return p(f,!0);if(l)return l(f,!0);var b=new Error("Cannot find module '"+f+"'");throw b.code="MODULE_NOT_FOUND",b}var S=s[f]={exports:{}};n[f][0].call(S.exports,function(P){var X=n[f][1][P];return a(X||P)},S,S.exports,r,n,s,o)}return s[f].exports}for(var l=typeof Za=="function"&&Za,c=0;c=43)}}).catch(function(){return!1})}function de(w){return typeof H=="boolean"?p.resolve(H):F(w).then(function(Z){return H=Z,H})}function Ze(w){var Z=q[w.name],T={};T.promise=new p(function(z,W){T.resolve=z,T.reject=W}),Z.deferredOperations.push(T),Z.dbReady?Z.dbReady=Z.dbReady.then(function(){return T.promise}):Z.dbReady=T.promise}function Pe(w){var Z=q[w.name],T=Z.deferredOperations.pop();if(T)return T.resolve(),T.promise}function oe(w,Z){var T=q[w.name],z=T.deferredOperations.pop();if(z)return z.reject(Z),z.promise}function Xe(w,Z){return new p(function(T,z){if(q[w.name]=q[w.name]||ei(),w.db)if(Z)Ze(w),w.db.close();else return T(w.db);var W=[w.name];Z&&W.push(w.version);var E=c.open.apply(c,W);Z&&(E.onupgradeneeded=function(J){var se=E.result;try{se.createObjectStore(w.storeName),J.oldVersion<=1&&se.createObjectStore(A)}catch(he){if(he.name==="ConstraintError")console.warn('The database "'+w.name+'" has been upgraded from version '+J.oldVersion+" to version "+J.newVersion+', but the storage "'+w.storeName+'" already exists.');else throw he}}),E.onerror=function(J){J.preventDefault(),z(E.error)},E.onsuccess=function(){var J=E.result;J.onversionchange=function(se){se.target.close()},T(J),Pe(w)}})}function Ve(w){return Xe(w,!1)}function He(w){return Xe(w,!0)}function ie(w,Z){if(!w.db)return!0;var T=!w.db.objectStoreNames.contains(w.storeName),z=w.versionw.db.version;if(z&&(w.version!==Z&&console.warn('The database "'+w.name+`" can't be downgraded from version `+w.db.version+" to version "+w.version+"."),w.version=w.db.version),W||T){if(T){var E=w.db.version+1;E>w.version&&(w.version=E)}return!0}return!1}function ve(w){return new p(function(Z,T){var z=new FileReader;z.onerror=T,z.onloadend=function(W){var E=btoa(W.target.result||"");Z({__local_forage_encoded_blob:!0,data:E,type:w.type})},z.readAsBinaryString(w)})}function ue(w){var Z=M(atob(w.data));return O([Z],{type:w.type})}function De(w){return w&&w.__local_forage_encoded_blob}function Ge(w){var Z=this,T=Z._initReady().then(function(){var z=q[Z._dbInfo.name];if(z&&z.dbReady)return z.dbReady});return S(T,w,w),T}function wt(w){Ze(w);for(var Z=q[w.name],T=Z.forages,z=0;z0&&(!w.db||E.name==="InvalidStateError"||E.name==="NotFoundError"))return p.resolve().then(function(){if(!w.db||E.name==="NotFoundError"&&!w.db.objectStoreNames.contains(w.storeName)&&w.version<=w.db.version)return w.db&&(w.version=w.db.version+1),He(w)}).then(function(){return wt(w).then(function(){je(w,Z,T,z-1)})}).catch(T);T(E)}}function ei(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function Hi(w){var Z=this,T={db:null};if(w)for(var z in w)T[z]=w[z];var W=q[T.name];W||(W=ei(),q[T.name]=W),W.forages.push(Z),Z._initReady||(Z._initReady=Z.ready,Z.ready=Ge);var E=[];function J(){return p.resolve()}for(var se=0;se>4,le[W++]=(J&15)<<4|se>>2,le[W++]=(se&3)<<6|he&63;return fe}function Jn(w){var Z=new Uint8Array(w),T="",z;for(z=0;z>2],T+=nt[(Z[z]&3)<<4|Z[z+1]>>4],T+=nt[(Z[z+1]&15)<<2|Z[z+2]>>6],T+=nt[Z[z+2]&63];return Z.length%3===2?T=T.substring(0,T.length-1)+"=":Z.length%3===1&&(T=T.substring(0,T.length-2)+"=="),T}function $n(w,Z){var T="";if(w&&(T=Xi.call(w)),w&&(T==="[object ArrayBuffer]"||w.buffer&&Xi.call(w.buffer)==="[object ArrayBuffer]")){var z,W=ki;w instanceof ArrayBuffer?(z=w,W+=ti):(z=w.buffer,T==="[object Int8Array]"?W+=Ur:T==="[object Uint8Array]"?W+=we:T==="[object Uint8ClampedArray]"?W+=Tt:T==="[object Int16Array]"?W+=cr:T==="[object Uint16Array]"?W+=Qn:T==="[object Int32Array]"?W+=Kn:T==="[object Uint32Array]"?W+=rn:T==="[object Float32Array]"?W+=wn:T==="[object Float64Array]"?W+=Ti:Z(new Error("Failed to get type for BinaryArray"))),Z(W+Jn(z))}else if(T==="[object Blob]"){var E=new FileReader;E.onload=function(){var J=ai+w.type+"~"+Jn(this.result);Z(ki+lr+J)},E.readAsArrayBuffer(w)}else try{Z(JSON.stringify(w))}catch(J){console.error("Couldn't convert value into a JSON string: ",w),Z(null,J)}}function es(w){if(w.substring(0,Hn)!==ki)return JSON.parse(w);var Z=w.substring(li),T=w.substring(Hn,li),z;if(T===lr&&Rs.test(Z)){var W=Z.match(Rs);z=W[1],Z=Z.substring(W[0].length)}var E=hr(Z);switch(T){case ti:return E;case lr:return O([E],{type:z});case Ur:return new Int8Array(E);case we:return new Uint8Array(E);case Tt:return new Uint8ClampedArray(E);case cr:return new Int16Array(E);case Qn:return new Uint16Array(E);case Kn:return new Int32Array(E);case rn:return new Uint32Array(E);case wn:return new Float32Array(E);case Ti:return new Float64Array(E);default:throw new Error("Unkown type: "+T)}}var Ar={serialize:$n,deserialize:es,stringToBuffer:hr,bufferToString:Jn};function Er(w,Z,T,z){w.executeSql("CREATE TABLE IF NOT EXISTS "+Z.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],T,z)}function It(w){var Z=this,T={db:null};if(w)for(var z in w)T[z]=typeof w[z]!="string"?w[z].toString():w[z];var W=new p(function(E,J){try{T.db=openDatabase(T.name,String(T.version),T.description,T.size)}catch(se){return J(se)}T.db.transaction(function(se){Er(se,T,function(){Z._dbInfo=T,E()},function(he,fe){J(fe)})},J)});return T.serializer=Ar,W}function ii(w,Z,T,z,W,E){w.executeSql(T,z,W,function(J,se){se.code===se.SYNTAX_ERR?J.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[Z.storeName],function(he,fe){fe.rows.length?E(he,se):Er(he,Z,function(){he.executeSql(T,z,W,E)},E)},E):E(J,se)},E)}function Cs(w,Z){var T=this;w=P(w);var z=new p(function(W,E){T.ready().then(function(){var J=T._dbInfo;J.db.transaction(function(se){ii(se,J,"SELECT * FROM "+J.storeName+" WHERE key = ? LIMIT 1",[w],function(he,fe){var le=fe.rows.length?fe.rows.item(0).value:null;le&&(le=J.serializer.deserialize(le)),W(le)},function(he,fe){E(fe)})})}).catch(E)});return b(z,Z),z}function Zs(w,Z){var T=this,z=new p(function(W,E){T.ready().then(function(){var J=T._dbInfo;J.db.transaction(function(se){ii(se,J,"SELECT * FROM "+J.storeName,[],function(he,fe){for(var le=fe.rows,ke=le.length,Me=0;Me0){J(Nt.apply(W,[w,he,T,z-1]));return}se(Me)}})})}).catch(se)});return b(E,T),E}function Gt(w,Z,T){return Nt.apply(this,[w,Z,T,1])}function nn(w,Z){var T=this;w=P(w);var z=new p(function(W,E){T.ready().then(function(){var J=T._dbInfo;J.db.transaction(function(se){ii(se,J,"DELETE FROM "+J.storeName+" WHERE key = ?",[w],function(){W()},function(he,fe){E(fe)})})}).catch(E)});return b(z,Z),z}function ts(w){var Z=this,T=new p(function(z,W){Z.ready().then(function(){var E=Z._dbInfo;E.db.transaction(function(J){ii(J,E,"DELETE FROM "+E.storeName,[],function(){z()},function(se,he){W(he)})})}).catch(W)});return b(T,w),T}function _i(w){var Z=this,T=new p(function(z,W){Z.ready().then(function(){var E=Z._dbInfo;E.db.transaction(function(J){ii(J,E,"SELECT COUNT(key) as c FROM "+E.storeName,[],function(se,he){var fe=he.rows.item(0).c;z(fe)},function(se,he){W(he)})})}).catch(W)});return b(T,w),T}function zr(w,Z){var T=this,z=new p(function(W,E){T.ready().then(function(){var J=T._dbInfo;J.db.transaction(function(se){ii(se,J,"SELECT key FROM "+J.storeName+" WHERE id = ? LIMIT 1",[w+1],function(he,fe){var le=fe.rows.length?fe.rows.item(0).key:null;W(le)},function(he,fe){E(fe)})})}).catch(E)});return b(z,Z),z}function fr(w){var Z=this,T=new p(function(z,W){Z.ready().then(function(){var E=Z._dbInfo;E.db.transaction(function(J){ii(J,E,"SELECT key FROM "+E.storeName,[],function(se,he){for(var fe=[],le=0;le '__WebKitDatabaseInfoTable__'",[],function(W,E){for(var J=[],se=0;se0}function kn(w){var Z=this,T={};if(w)for(var z in w)T[z]=w[z];return T.keyPrefix=Es(w,Z._defaultConfig),Zo()?(Z._dbInfo=T,T.serializer=Ar,p.resolve()):p.reject()}function Pa(w){var Z=this,T=Z.ready().then(function(){for(var z=Z._dbInfo.keyPrefix,W=localStorage.length-1;W>=0;W--){var E=localStorage.key(W);E.indexOf(z)===0&&localStorage.removeItem(E)}});return b(T,w),T}function Uo(w,Z){var T=this;w=P(w);var z=T.ready().then(function(){var W=T._dbInfo,E=localStorage.getItem(W.keyPrefix+w);return E&&(E=W.serializer.deserialize(E)),E});return b(z,Z),z}function $t(w,Z){var T=this,z=T.ready().then(function(){for(var W=T._dbInfo,E=W.keyPrefix,J=E.length,se=localStorage.length,he=1,fe=0;fe=0;J--){var se=localStorage.key(J);se.indexOf(E)===0&&localStorage.removeItem(se)}}):W=p.reject("Invalid arguments"),b(W,Z),W}var ka={_driver:"localStorageWrapper",_initStorage:kn,_support:As(),iterate:$t,getItem:Uo,setItem:Xn,removeItem:Tn,clear:Pa,length:is,key:Ri,keys:Ao,dropInstance:Ys},_n=function(Z,T){return Z===T||typeof Z=="number"&&typeof T=="number"&&isNaN(Z)&&isNaN(T)},Eo=function(Z,T){for(var z=Z.length,W=0;W{(function(i,e){"use strict";typeof su=="object"&&typeof su.exports=="object"?su.exports=i.document?e(i,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(i)})(typeof window!="undefined"?window:S$,function(i,e){"use strict";var t=[],r=Object.getPrototypeOf,n=t.slice,s=t.flat?function(h){return t.flat.call(h)}:function(h){return t.concat.apply([],h)},o=t.push,a=t.indexOf,l={},c=l.toString,f=l.hasOwnProperty,O=f.toString,p=O.call(Object),b={},S=function(u){return typeof u=="function"&&typeof u.nodeType!="number"&&typeof u.item!="function"},P=function(u){return u!=null&&u===u.window},X=i.document,A={type:!0,src:!0,nonce:!0,noModule:!0};function H(h,u,m){m=m||X;var g,x,v=m.createElement("script");if(v.text=h,u)for(g in A)x=u[g]||u.getAttribute&&u.getAttribute(g),x&&v.setAttribute(g,x);m.head.appendChild(v).parentNode.removeChild(v)}function q(h){return h==null?h+"":typeof h=="object"||typeof h=="function"?l[c.call(h)]||"object":typeof h}var B="3.7.1",L=/HTML$/i,d=function(h,u){return new d.fn.init(h,u)};d.fn=d.prototype={jquery:B,constructor:d,length:0,toArray:function(){return n.call(this)},get:function(h){return h==null?n.call(this):h<0?this[h+this.length]:this[h]},pushStack:function(h){var u=d.merge(this.constructor(),h);return u.prevObject=this,u},each:function(h){return d.each(this,h)},map:function(h){return this.pushStack(d.map(this,function(u,m){return h.call(u,m,u)}))},slice:function(){return this.pushStack(n.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(d.grep(this,function(h,u){return(u+1)%2}))},odd:function(){return this.pushStack(d.grep(this,function(h,u){return u%2}))},eq:function(h){var u=this.length,m=+h+(h<0?u:0);return this.pushStack(m>=0&&m0&&u-1 in h}function F(h,u){return h.nodeName&&h.nodeName.toLowerCase()===u.toLowerCase()}var de=t.pop,Ze=t.sort,Pe=t.splice,oe="[\\x20\\t\\r\\n\\f]",Xe=new RegExp("^"+oe+"+|((?:^|[^\\\\])(?:\\\\.)*)"+oe+"+$","g");d.contains=function(h,u){var m=u&&u.parentNode;return h===m||!!(m&&m.nodeType===1&&(h.contains?h.contains(m):h.compareDocumentPosition&&h.compareDocumentPosition(m)&16))};var Ve=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function He(h,u){return u?h==="\0"?"\uFFFD":h.slice(0,-1)+"\\"+h.charCodeAt(h.length-1).toString(16)+" ":"\\"+h}d.escapeSelector=function(h){return(h+"").replace(Ve,He)};var ie=X,ve=o;(function(){var h,u,m,g,x,v=ve,Q,C,R,Y,G,te=d.expando,I=0,ce=0,Ie=ac(),ht=ac(),Be=ac(),fi=ac(),Bt=function(_,U){return _===U&&(x=!0),0},on="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",an="(?:\\\\[\\da-fA-F]{1,6}"+oe+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",st="\\["+oe+"*("+an+")(?:"+oe+"*([*^$|!~]?=)"+oe+`*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(`+an+"))|)"+oe+"*\\]",qs=":("+an+`)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|`+st+")*)|.*)\\)|)",dt=new RegExp(oe+"+","g"),Et=new RegExp("^"+oe+"*,"+oe+"*"),_a=new RegExp("^"+oe+"*([>+~]|"+oe+")"+oe+"*"),yu=new RegExp(oe+"|>"),ln=new RegExp(qs),Ra=new RegExp("^"+an+"$"),cn={ID:new RegExp("^#("+an+")"),CLASS:new RegExp("^\\.("+an+")"),TAG:new RegExp("^("+an+"|[*])"),ATTR:new RegExp("^"+st),PSEUDO:new RegExp("^"+qs),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+oe+"*(even|odd|(([+-]|)(\\d*)n|)"+oe+"*(?:([+-]|)"+oe+"*(\\d+)|))"+oe+"*\\)|)","i"),bool:new RegExp("^(?:"+on+")$","i"),needsContext:new RegExp("^"+oe+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+oe+"*((?:-\\d)?\\d*)"+oe+"*\\)|)(?=[^-]|$)","i")},ns=/^(?:input|select|textarea|button)$/i,ss=/^h\d$/i,pr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Su=/[+~]/,Rn=new RegExp("\\\\[\\da-fA-F]{1,6}"+oe+"?|\\\\([^\\r\\n\\f])","g"),Cn=function(_,U){var D="0x"+_.slice(1)-65536;return U||(D<0?String.fromCharCode(D+65536):String.fromCharCode(D>>10|55296,D&1023|56320))},w1=function(){os()},$1=cc(function(_){return _.disabled===!0&&F(_,"fieldset")},{dir:"parentNode",next:"legend"});function P1(){try{return Q.activeElement}catch(_){}}try{v.apply(t=n.call(ie.childNodes),ie.childNodes),t[ie.childNodes.length].nodeType}catch(_){v={apply:function(U,D){ve.apply(U,n.call(D))},call:function(U){ve.apply(U,n.call(arguments,1))}}}function xt(_,U,D,N){var ee,pe,ye,_e,Se,et,We,Ne=U&&U.ownerDocument,tt=U?U.nodeType:9;if(D=D||[],typeof _!="string"||!_||tt!==1&&tt!==9&&tt!==11)return D;if(!N&&(os(U),U=U||Q,R)){if(tt!==11&&(Se=pr.exec(_)))if(ee=Se[1]){if(tt===9)if(ye=U.getElementById(ee)){if(ye.id===ee)return v.call(D,ye),D}else return D;else if(Ne&&(ye=Ne.getElementById(ee))&&xt.contains(U,ye)&&ye.id===ee)return v.call(D,ye),D}else{if(Se[2])return v.apply(D,U.getElementsByTagName(_)),D;if((ee=Se[3])&&U.getElementsByClassName)return v.apply(D,U.getElementsByClassName(ee)),D}if(!fi[_+" "]&&(!Y||!Y.test(_))){if(We=_,Ne=U,tt===1&&(yu.test(_)||_a.test(_))){for(Ne=Su.test(_)&&Qu(U.parentNode)||U,(Ne!=U||!b.scope)&&((_e=U.getAttribute("id"))?_e=d.escapeSelector(_e):U.setAttribute("id",_e=te)),et=Ca(_),pe=et.length;pe--;)et[pe]=(_e?"#"+_e:":scope")+" "+lc(et[pe]);We=et.join(",")}try{return v.apply(D,Ne.querySelectorAll(We)),D}catch(ze){fi(_,!0)}finally{_e===te&&U.removeAttribute("id")}}}return Ng(_.replace(Xe,"$1"),U,D,N)}function ac(){var _=[];function U(D,N){return _.push(D+" ")>u.cacheLength&&delete U[_.shift()],U[D+" "]=N}return U}function Yr(_){return _[te]=!0,_}function zo(_){var U=Q.createElement("fieldset");try{return!!_(U)}catch(D){return!1}finally{U.parentNode&&U.parentNode.removeChild(U),U=null}}function k1(_){return function(U){return F(U,"input")&&U.type===_}}function T1(_){return function(U){return(F(U,"input")||F(U,"button"))&&U.type===_}}function Dg(_){return function(U){return"form"in U?U.parentNode&&U.disabled===!1?"label"in U?"label"in U.parentNode?U.parentNode.disabled===_:U.disabled===_:U.isDisabled===_||U.isDisabled!==!_&&$1(U)===_:U.disabled===_:"label"in U?U.disabled===_:!1}}function Ds(_){return Yr(function(U){return U=+U,Yr(function(D,N){for(var ee,pe=_([],D.length,U),ye=pe.length;ye--;)D[ee=pe[ye]]&&(D[ee]=!(N[ee]=D[ee]))})})}function Qu(_){return _&&typeof _.getElementsByTagName!="undefined"&&_}function os(_){var U,D=_?_.ownerDocument||_:ie;return D==Q||D.nodeType!==9||!D.documentElement||(Q=D,C=Q.documentElement,R=!d.isXMLDoc(Q),G=C.matches||C.webkitMatchesSelector||C.msMatchesSelector,C.msMatchesSelector&&ie!=Q&&(U=Q.defaultView)&&U.top!==U&&U.addEventListener("unload",w1),b.getById=zo(function(N){return C.appendChild(N).id=d.expando,!Q.getElementsByName||!Q.getElementsByName(d.expando).length}),b.disconnectedMatch=zo(function(N){return G.call(N,"*")}),b.scope=zo(function(){return Q.querySelectorAll(":scope")}),b.cssHas=zo(function(){try{return Q.querySelector(":has(*,:jqfake)"),!1}catch(N){return!0}}),b.getById?(u.filter.ID=function(N){var ee=N.replace(Rn,Cn);return function(pe){return pe.getAttribute("id")===ee}},u.find.ID=function(N,ee){if(typeof ee.getElementById!="undefined"&&R){var pe=ee.getElementById(N);return pe?[pe]:[]}}):(u.filter.ID=function(N){var ee=N.replace(Rn,Cn);return function(pe){var ye=typeof pe.getAttributeNode!="undefined"&&pe.getAttributeNode("id");return ye&&ye.value===ee}},u.find.ID=function(N,ee){if(typeof ee.getElementById!="undefined"&&R){var pe,ye,_e,Se=ee.getElementById(N);if(Se){if(pe=Se.getAttributeNode("id"),pe&&pe.value===N)return[Se];for(_e=ee.getElementsByName(N),ye=0;Se=_e[ye++];)if(pe=Se.getAttributeNode("id"),pe&&pe.value===N)return[Se]}return[]}}),u.find.TAG=function(N,ee){return typeof ee.getElementsByTagName!="undefined"?ee.getElementsByTagName(N):ee.querySelectorAll(N)},u.find.CLASS=function(N,ee){if(typeof ee.getElementsByClassName!="undefined"&&R)return ee.getElementsByClassName(N)},Y=[],zo(function(N){var ee;C.appendChild(N).innerHTML="",N.querySelectorAll("[selected]").length||Y.push("\\["+oe+"*(?:value|"+on+")"),N.querySelectorAll("[id~="+te+"-]").length||Y.push("~="),N.querySelectorAll("a#"+te+"+*").length||Y.push(".#.+[+~]"),N.querySelectorAll(":checked").length||Y.push(":checked"),ee=Q.createElement("input"),ee.setAttribute("type","hidden"),N.appendChild(ee).setAttribute("name","D"),C.appendChild(N).disabled=!0,N.querySelectorAll(":disabled").length!==2&&Y.push(":enabled",":disabled"),ee=Q.createElement("input"),ee.setAttribute("name",""),N.appendChild(ee),N.querySelectorAll("[name='']").length||Y.push("\\["+oe+"*name"+oe+"*="+oe+`*(?:''|"")`)}),b.cssHas||Y.push(":has"),Y=Y.length&&new RegExp(Y.join("|")),Bt=function(N,ee){if(N===ee)return x=!0,0;var pe=!N.compareDocumentPosition-!ee.compareDocumentPosition;return pe||(pe=(N.ownerDocument||N)==(ee.ownerDocument||ee)?N.compareDocumentPosition(ee):1,pe&1||!b.sortDetached&&ee.compareDocumentPosition(N)===pe?N===Q||N.ownerDocument==ie&&xt.contains(ie,N)?-1:ee===Q||ee.ownerDocument==ie&&xt.contains(ie,ee)?1:g?a.call(g,N)-a.call(g,ee):0:pe&4?-1:1)}),Q}xt.matches=function(_,U){return xt(_,null,null,U)},xt.matchesSelector=function(_,U){if(os(_),R&&!fi[U+" "]&&(!Y||!Y.test(U)))try{var D=G.call(_,U);if(D||b.disconnectedMatch||_.document&&_.document.nodeType!==11)return D}catch(N){fi(U,!0)}return xt(U,Q,null,[_]).length>0},xt.contains=function(_,U){return(_.ownerDocument||_)!=Q&&os(_),d.contains(_,U)},xt.attr=function(_,U){(_.ownerDocument||_)!=Q&&os(_);var D=u.attrHandle[U.toLowerCase()],N=D&&f.call(u.attrHandle,U.toLowerCase())?D(_,U,!R):void 0;return N!==void 0?N:_.getAttribute(U)},xt.error=function(_){throw new Error("Syntax error, unrecognized expression: "+_)},d.uniqueSort=function(_){var U,D=[],N=0,ee=0;if(x=!b.sortStable,g=!b.sortStable&&n.call(_,0),Ze.call(_,Bt),x){for(;U=_[ee++];)U===_[ee]&&(N=D.push(ee));for(;N--;)Pe.call(_,D[N],1)}return g=null,_},d.fn.uniqueSort=function(){return this.pushStack(d.uniqueSort(n.apply(this)))},u=d.expr={cacheLength:50,createPseudo:Yr,match:cn,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(_){return _[1]=_[1].replace(Rn,Cn),_[3]=(_[3]||_[4]||_[5]||"").replace(Rn,Cn),_[2]==="~="&&(_[3]=" "+_[3]+" "),_.slice(0,4)},CHILD:function(_){return _[1]=_[1].toLowerCase(),_[1].slice(0,3)==="nth"?(_[3]||xt.error(_[0]),_[4]=+(_[4]?_[5]+(_[6]||1):2*(_[3]==="even"||_[3]==="odd")),_[5]=+(_[7]+_[8]||_[3]==="odd")):_[3]&&xt.error(_[0]),_},PSEUDO:function(_){var U,D=!_[6]&&_[2];return cn.CHILD.test(_[0])?null:(_[3]?_[2]=_[4]||_[5]||"":D&&ln.test(D)&&(U=Ca(D,!0))&&(U=D.indexOf(")",D.length-U)-D.length)&&(_[0]=_[0].slice(0,U),_[2]=D.slice(0,U)),_.slice(0,3))}},filter:{TAG:function(_){var U=_.replace(Rn,Cn).toLowerCase();return _==="*"?function(){return!0}:function(D){return F(D,U)}},CLASS:function(_){var U=Ie[_+" "];return U||(U=new RegExp("(^|"+oe+")"+_+"("+oe+"|$)"))&&Ie(_,function(D){return U.test(typeof D.className=="string"&&D.className||typeof D.getAttribute!="undefined"&&D.getAttribute("class")||"")})},ATTR:function(_,U,D){return function(N){var ee=xt.attr(N,_);return ee==null?U==="!=":U?(ee+="",U==="="?ee===D:U==="!="?ee!==D:U==="^="?D&&ee.indexOf(D)===0:U==="*="?D&&ee.indexOf(D)>-1:U==="$="?D&&ee.slice(-D.length)===D:U==="~="?(" "+ee.replace(dt," ")+" ").indexOf(D)>-1:U==="|="?ee===D||ee.slice(0,D.length+1)===D+"-":!1):!0}},CHILD:function(_,U,D,N,ee){var pe=_.slice(0,3)!=="nth",ye=_.slice(-4)!=="last",_e=U==="of-type";return N===1&&ee===0?function(Se){return!!Se.parentNode}:function(Se,et,We){var Ne,tt,ze,Xt,Mi,bi=pe!==ye?"nextSibling":"previousSibling",mr=Se.parentNode,hn=_e&&Se.nodeName.toLowerCase(),Yo=!We&&!_e,Ci=!1;if(mr){if(pe){for(;bi;){for(ze=Se;ze=ze[bi];)if(_e?F(ze,hn):ze.nodeType===1)return!1;Mi=bi=_==="only"&&!Mi&&"nextSibling"}return!0}if(Mi=[ye?mr.firstChild:mr.lastChild],ye&&Yo){for(tt=mr[te]||(mr[te]={}),Ne=tt[_]||[],Xt=Ne[0]===I&&Ne[1],Ci=Xt&&Ne[2],ze=Xt&&mr.childNodes[Xt];ze=++Xt&&ze&&ze[bi]||(Ci=Xt=0)||Mi.pop();)if(ze.nodeType===1&&++Ci&&ze===Se){tt[_]=[I,Xt,Ci];break}}else if(Yo&&(tt=Se[te]||(Se[te]={}),Ne=tt[_]||[],Xt=Ne[0]===I&&Ne[1],Ci=Xt),Ci===!1)for(;(ze=++Xt&&ze&&ze[bi]||(Ci=Xt=0)||Mi.pop())&&!((_e?F(ze,hn):ze.nodeType===1)&&++Ci&&(Yo&&(tt=ze[te]||(ze[te]={}),tt[_]=[I,Ci]),ze===Se)););return Ci-=ee,Ci===N||Ci%N===0&&Ci/N>=0}}},PSEUDO:function(_,U){var D,N=u.pseudos[_]||u.setFilters[_.toLowerCase()]||xt.error("unsupported pseudo: "+_);return N[te]?N(U):N.length>1?(D=[_,_,"",U],u.setFilters.hasOwnProperty(_.toLowerCase())?Yr(function(ee,pe){for(var ye,_e=N(ee,U),Se=_e.length;Se--;)ye=a.call(ee,_e[Se]),ee[ye]=!(pe[ye]=_e[Se])}):function(ee){return N(ee,0,D)}):N}},pseudos:{not:Yr(function(_){var U=[],D=[],N=ku(_.replace(Xe,"$1"));return N[te]?Yr(function(ee,pe,ye,_e){for(var Se,et=N(ee,null,_e,[]),We=ee.length;We--;)(Se=et[We])&&(ee[We]=!(pe[We]=Se))}):function(ee,pe,ye){return U[0]=ee,N(U,null,ye,D),U[0]=null,!D.pop()}}),has:Yr(function(_){return function(U){return xt(_,U).length>0}}),contains:Yr(function(_){return _=_.replace(Rn,Cn),function(U){return(U.textContent||d.text(U)).indexOf(_)>-1}}),lang:Yr(function(_){return Ra.test(_||"")||xt.error("unsupported lang: "+_),_=_.replace(Rn,Cn).toLowerCase(),function(U){var D;do if(D=R?U.lang:U.getAttribute("xml:lang")||U.getAttribute("lang"))return D=D.toLowerCase(),D===_||D.indexOf(_+"-")===0;while((U=U.parentNode)&&U.nodeType===1);return!1}}),target:function(_){var U=i.location&&i.location.hash;return U&&U.slice(1)===_.id},root:function(_){return _===C},focus:function(_){return _===P1()&&Q.hasFocus()&&!!(_.type||_.href||~_.tabIndex)},enabled:Dg(!1),disabled:Dg(!0),checked:function(_){return F(_,"input")&&!!_.checked||F(_,"option")&&!!_.selected},selected:function(_){return _.parentNode&&_.parentNode.selectedIndex,_.selected===!0},empty:function(_){for(_=_.firstChild;_;_=_.nextSibling)if(_.nodeType<6)return!1;return!0},parent:function(_){return!u.pseudos.empty(_)},header:function(_){return ss.test(_.nodeName)},input:function(_){return ns.test(_.nodeName)},button:function(_){return F(_,"input")&&_.type==="button"||F(_,"button")},text:function(_){var U;return F(_,"input")&&_.type==="text"&&((U=_.getAttribute("type"))==null||U.toLowerCase()==="text")},first:Ds(function(){return[0]}),last:Ds(function(_,U){return[U-1]}),eq:Ds(function(_,U,D){return[D<0?D+U:D]}),even:Ds(function(_,U){for(var D=0;DU?N=U:N=D;--N>=0;)_.push(N);return _}),gt:Ds(function(_,U,D){for(var N=D<0?D+U:D;++N1?function(U,D,N){for(var ee=_.length;ee--;)if(!_[ee](U,D,N))return!1;return!0}:_[0]}function X1(_,U,D){for(var N=0,ee=U.length;N-1&&(ye[We]=!(_e[We]=tt))}}else ze=hc(ze===_e?ze.splice(bi,ze.length):ze),ee?ee(null,_e,ze,et):v.apply(_e,ze)})}function Pu(_){for(var U,D,N,ee=_.length,pe=u.relative[_[0].type],ye=pe||u.relative[" "],_e=pe?1:0,Se=cc(function(Ne){return Ne===U},ye,!0),et=cc(function(Ne){return a.call(U,Ne)>-1},ye,!0),We=[function(Ne,tt,ze){var Xt=!pe&&(ze||tt!=m)||((U=tt).nodeType?Se(Ne,tt,ze):et(Ne,tt,ze));return U=null,Xt}];_e1&&wu(We),_e>1&&lc(_.slice(0,_e-1).concat({value:_[_e-2].type===" "?"*":""})).replace(Xe,"$1"),D,_e0,N=_.length>0,ee=function(pe,ye,_e,Se,et){var We,Ne,tt,ze=0,Xt="0",Mi=pe&&[],bi=[],mr=m,hn=pe||N&&u.find.TAG("*",et),Yo=I+=mr==null?1:Math.random()||.1,Ci=hn.length;for(et&&(m=ye==Q||ye||et);Xt!==Ci&&(We=hn[Xt])!=null;Xt++){if(N&&We){for(Ne=0,!ye&&We.ownerDocument!=Q&&(os(We),_e=!R);tt=_[Ne++];)if(tt(We,ye||Q,_e)){v.call(Se,We);break}et&&(I=Yo)}D&&((We=!tt&&We)&&ze--,pe&&Mi.push(We))}if(ze+=Xt,D&&Xt!==ze){for(Ne=0;tt=U[Ne++];)tt(Mi,bi,ye,_e);if(pe){if(ze>0)for(;Xt--;)Mi[Xt]||bi[Xt]||(bi[Xt]=de.call(Se));bi=hc(bi)}v.apply(Se,bi),et&&!pe&&bi.length>0&&ze+U.length>1&&d.uniqueSort(Se)}return et&&(I=Yo,m=mr),Mi};return D?Yr(ee):ee}function ku(_,U){var D,N=[],ee=[],pe=Be[_+" "];if(!pe){for(U||(U=Ca(_)),D=U.length;D--;)pe=Pu(U[D]),pe[te]?N.push(pe):ee.push(pe);pe=Be(_,_1(ee,N)),pe.selector=_}return pe}function Ng(_,U,D,N){var ee,pe,ye,_e,Se,et=typeof _=="function"&&_,We=!N&&Ca(_=et.selector||_);if(D=D||[],We.length===1){if(pe=We[0]=We[0].slice(0),pe.length>2&&(ye=pe[0]).type==="ID"&&U.nodeType===9&&R&&u.relative[pe[1].type]){if(U=(u.find.ID(ye.matches[0].replace(Rn,Cn),U)||[])[0],U)et&&(U=U.parentNode);else return D;_=_.slice(pe.shift().value.length)}for(ee=cn.needsContext.test(_)?0:pe.length;ee--&&(ye=pe[ee],!u.relative[_e=ye.type]);)if((Se=u.find[_e])&&(N=Se(ye.matches[0].replace(Rn,Cn),Su.test(pe[0].type)&&Qu(U.parentNode)||U))){if(pe.splice(ee,1),_=N.length&&lc(pe),!_)return v.apply(D,N),D;break}}return(et||ku(_,We))(N,U,!R,D,!U||Su.test(_)&&Qu(U.parentNode)||U),D}b.sortStable=te.split("").sort(Bt).join("")===te,os(),b.sortDetached=zo(function(_){return _.compareDocumentPosition(Q.createElement("fieldset"))&1}),d.find=xt,d.expr[":"]=d.expr.pseudos,d.unique=d.uniqueSort,xt.compile=ku,xt.select=Ng,xt.setDocument=os,xt.tokenize=Ca,xt.escape=d.escapeSelector,xt.getText=d.text,xt.isXML=d.isXMLDoc,xt.selectors=d.expr,xt.support=d.support,xt.uniqueSort=d.uniqueSort})();var ue=function(h,u,m){for(var g=[],x=m!==void 0;(h=h[u])&&h.nodeType!==9;)if(h.nodeType===1){if(x&&d(h).is(m))break;g.push(h)}return g},De=function(h,u){for(var m=[];h;h=h.nextSibling)h.nodeType===1&&h!==u&&m.push(h);return m},Ge=d.expr.match.needsContext,wt=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function je(h,u,m){return S(u)?d.grep(h,function(g,x){return!!u.call(g,x,g)!==m}):u.nodeType?d.grep(h,function(g){return g===u!==m}):typeof u!="string"?d.grep(h,function(g){return a.call(u,g)>-1!==m}):d.filter(u,h,m)}d.filter=function(h,u,m){var g=u[0];return m&&(h=":not("+h+")"),u.length===1&&g.nodeType===1?d.find.matchesSelector(g,h)?[g]:[]:d.find.matches(h,d.grep(u,function(x){return x.nodeType===1}))},d.fn.extend({find:function(h){var u,m,g=this.length,x=this;if(typeof h!="string")return this.pushStack(d(h).filter(function(){for(u=0;u1?d.uniqueSort(m):m},filter:function(h){return this.pushStack(je(this,h||[],!1))},not:function(h){return this.pushStack(je(this,h||[],!0))},is:function(h){return!!je(this,typeof h=="string"&&Ge.test(h)?d(h):h||[],!1).length}});var ei,Hi=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,ar=d.fn.init=function(h,u,m){var g,x;if(!h)return this;if(m=m||ei,typeof h=="string")if(h[0]==="<"&&h[h.length-1]===">"&&h.length>=3?g=[null,h,null]:g=Hi.exec(h),g&&(g[1]||!u))if(g[1]){if(u=u instanceof d?u[0]:u,d.merge(this,d.parseHTML(g[1],u&&u.nodeType?u.ownerDocument||u:X,!0)),wt.test(g[1])&&d.isPlainObject(u))for(g in u)S(this[g])?this[g](u[g]):this.attr(g,u[g]);return this}else return x=X.getElementById(g[2]),x&&(this[0]=x,this.length=1),this;else return!u||u.jquery?(u||m).find(h):this.constructor(u).find(h);else{if(h.nodeType)return this[0]=h,this.length=1,this;if(S(h))return m.ready!==void 0?m.ready(h):h(d)}return d.makeArray(h,this)};ar.prototype=d.fn,ei=d(X);var tn=/^(?:parents|prev(?:Until|All))/,Bn={children:!0,contents:!0,next:!0,prev:!0};d.fn.extend({has:function(h){var u=d(h,this),m=u.length;return this.filter(function(){for(var g=0;g-1:m.nodeType===1&&d.find.matchesSelector(m,h))){v.push(m);break}}return this.pushStack(v.length>1?d.uniqueSort(v):v)},index:function(h){return h?typeof h=="string"?a.call(d(h),this[0]):a.call(this,h.jquery?h[0]:h):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(h,u){return this.pushStack(d.uniqueSort(d.merge(this.get(),d(h,u))))},addBack:function(h){return this.add(h==null?this.prevObject:this.prevObject.filter(h))}});function Co(h,u){for(;(h=h[u])&&h.nodeType!==1;);return h}d.each({parent:function(h){var u=h.parentNode;return u&&u.nodeType!==11?u:null},parents:function(h){return ue(h,"parentNode")},parentsUntil:function(h,u,m){return ue(h,"parentNode",m)},next:function(h){return Co(h,"nextSibling")},prev:function(h){return Co(h,"previousSibling")},nextAll:function(h){return ue(h,"nextSibling")},prevAll:function(h){return ue(h,"previousSibling")},nextUntil:function(h,u,m){return ue(h,"nextSibling",m)},prevUntil:function(h,u,m){return ue(h,"previousSibling",m)},siblings:function(h){return De((h.parentNode||{}).firstChild,h)},children:function(h){return De(h.firstChild)},contents:function(h){return h.contentDocument!=null&&r(h.contentDocument)?h.contentDocument:(F(h,"template")&&(h=h.content||h),d.merge([],h.childNodes))}},function(h,u){d.fn[h]=function(m,g){var x=d.map(this,u,m);return h.slice(-5)!=="Until"&&(g=m),g&&typeof g=="string"&&(x=d.filter(g,x)),this.length>1&&(Bn[h]||d.uniqueSort(x),tn.test(h)&&x.reverse()),this.pushStack(x)}});var Pi=/[^\x20\t\r\n\f]+/g;function $a(h){var u={};return d.each(h.match(Pi)||[],function(m,g){u[g]=!0}),u}d.Callbacks=function(h){h=typeof h=="string"?$a(h):d.extend({},h);var u,m,g,x,v=[],Q=[],C=-1,R=function(){for(x=x||h.once,g=u=!0;Q.length;C=-1)for(m=Q.shift();++C-1;)v.splice(I,1),I<=C&&C--}),this},has:function(G){return G?d.inArray(G,v)>-1:v.length>0},empty:function(){return v&&(v=[]),this},disable:function(){return x=Q=[],v=m="",this},disabled:function(){return!v},lock:function(){return x=Q=[],!m&&!u&&(v=m=""),this},locked:function(){return!!x},fireWith:function(G,te){return x||(te=te||[],te=[G,te.slice?te.slice():te],Q.push(te),u||R()),this},fire:function(){return Y.fireWith(this,arguments),this},fired:function(){return!!g}};return Y};function Zr(h){return h}function gt(h){throw h}function Fn(h,u,m,g){var x;try{h&&S(x=h.promise)?x.call(h).done(u).fail(m):h&&S(x=h.then)?x.call(h,u,m):u.apply(void 0,[h].slice(g))}catch(v){m.apply(void 0,[v])}}d.extend({Deferred:function(h){var u=[["notify","progress",d.Callbacks("memory"),d.Callbacks("memory"),2],["resolve","done",d.Callbacks("once memory"),d.Callbacks("once memory"),0,"resolved"],["reject","fail",d.Callbacks("once memory"),d.Callbacks("once memory"),1,"rejected"]],m="pending",g={state:function(){return m},always:function(){return x.done(arguments).fail(arguments),this},catch:function(v){return g.then(null,v)},pipe:function(){var v=arguments;return d.Deferred(function(Q){d.each(u,function(C,R){var Y=S(v[R[4]])&&v[R[4]];x[R[1]](function(){var G=Y&&Y.apply(this,arguments);G&&S(G.promise)?G.promise().progress(Q.notify).done(Q.resolve).fail(Q.reject):Q[R[0]+"With"](this,Y?[G]:arguments)})}),v=null}).promise()},then:function(v,Q,C){var R=0;function Y(G,te,I,ce){return function(){var Ie=this,ht=arguments,Be=function(){var Bt,on;if(!(G=R&&(I!==gt&&(Ie=void 0,ht=[Bt]),te.rejectWith(Ie,ht))}};G?fi():(d.Deferred.getErrorHook?fi.error=d.Deferred.getErrorHook():d.Deferred.getStackHook&&(fi.error=d.Deferred.getStackHook()),i.setTimeout(fi))}}return d.Deferred(function(G){u[0][3].add(Y(0,G,S(C)?C:Zr,G.notifyWith)),u[1][3].add(Y(0,G,S(v)?v:Zr)),u[2][3].add(Y(0,G,S(Q)?Q:gt))}).promise()},promise:function(v){return v!=null?d.extend(v,g):g}},x={};return d.each(u,function(v,Q){var C=Q[2],R=Q[5];g[Q[1]]=C.add,R&&C.add(function(){m=R},u[3-v][2].disable,u[3-v][3].disable,u[0][2].lock,u[0][3].lock),C.add(Q[3].fire),x[Q[0]]=function(){return x[Q[0]+"With"](this===x?void 0:this,arguments),this},x[Q[0]+"With"]=C.fireWith}),g.promise(x),h&&h.call(x,x),x},when:function(h){var u=arguments.length,m=u,g=Array(m),x=n.call(arguments),v=d.Deferred(),Q=function(C){return function(R){g[C]=this,x[C]=arguments.length>1?n.call(arguments):R,--u||v.resolveWith(g,x)}};if(u<=1&&(Fn(h,v.done(Q(m)).resolve,v.reject,!u),v.state()==="pending"||S(x[m]&&x[m].then)))return v.then();for(;m--;)Fn(x[m],Q(m),v.reject);return v.promise()}});var yt=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;d.Deferred.exceptionHook=function(h,u){i.console&&i.console.warn&&h&&yt.test(h.name)&&i.console.warn("jQuery.Deferred exception: "+h.message,h.stack,u)},d.readyException=function(h){i.setTimeout(function(){throw h})};var Sn=d.Deferred();d.fn.ready=function(h){return Sn.then(h).catch(function(u){d.readyException(u)}),this},d.extend({isReady:!1,readyWait:1,ready:function(h){(h===!0?--d.readyWait:d.isReady)||(d.isReady=!0,!(h!==!0&&--d.readyWait>0)&&Sn.resolveWith(X,[d]))}}),d.ready.then=Sn.then;function nt(){X.removeEventListener("DOMContentLoaded",nt),i.removeEventListener("load",nt),d.ready()}X.readyState==="complete"||X.readyState!=="loading"&&!X.documentElement.doScroll?i.setTimeout(d.ready):(X.addEventListener("DOMContentLoaded",nt),i.addEventListener("load",nt));var ai=function(h,u,m,g,x,v,Q){var C=0,R=h.length,Y=m==null;if(q(m)==="object"){x=!0;for(C in m)ai(h,u,C,m[C],!0,v,Q)}else if(g!==void 0&&(x=!0,S(g)||(Q=!0),Y&&(Q?(u.call(h,g),u=null):(Y=u,u=function(G,te,I){return Y.call(d(G),I)})),u))for(;C1,null,!0)},removeData:function(h){return this.each(function(){Tt.remove(this,h)})}}),d.extend({queue:function(h,u,m){var g;if(h)return u=(u||"fx")+"queue",g=we.get(h,u),m&&(!g||Array.isArray(m)?g=we.access(h,u,d.makeArray(m)):g.push(m)),g||[]},dequeue:function(h,u){u=u||"fx";var m=d.queue(h,u),g=m.length,x=m.shift(),v=d._queueHooks(h,u),Q=function(){d.dequeue(h,u)};x==="inprogress"&&(x=m.shift(),g--),x&&(u==="fx"&&m.unshift("inprogress"),delete v.stop,x.call(h,Q,v)),!g&&v&&v.empty.fire()},_queueHooks:function(h,u){var m=u+"queueHooks";return we.get(h,m)||we.access(h,m,{empty:d.Callbacks("once memory").add(function(){we.remove(h,[u+"queue",m])})})}}),d.fn.extend({queue:function(h,u){var m=2;return typeof h!="string"&&(u=h,h="fx",m--),arguments.length\x20\t\r\n\f]*)/i,Zs=/^$|^module$|\/(?:java|ecma)script/i;(function(){var h=X.createDocumentFragment(),u=h.appendChild(X.createElement("div")),m=X.createElement("input");m.setAttribute("type","radio"),m.setAttribute("checked","checked"),m.setAttribute("name","t"),u.appendChild(m),b.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,u.innerHTML="",b.noCloneChecked=!!u.cloneNode(!0).lastChild.defaultValue,u.innerHTML="",b.option=!!u.lastChild})();var Nt={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,b.option||(Nt.optgroup=Nt.option=[1,""]);function Gt(h,u){var m;return typeof h.getElementsByTagName!="undefined"?m=h.getElementsByTagName(u||"*"):typeof h.querySelectorAll!="undefined"?m=h.querySelectorAll(u||"*"):m=[],u===void 0||u&&F(h,u)?d.merge([h],m):m}function nn(h,u){for(var m=0,g=h.length;m-1){x&&x.push(v);continue}if(Y=hr(v),Q=Gt(te.appendChild(v),"script"),Y&&nn(Q),m)for(G=0;v=Q[G++];)Zs.test(v.type||"")&&m.push(v)}return te}var zr=/^([^.]*)(?:\.(.+)|)/;function fr(){return!0}function ur(){return!1}function Us(h,u,m,g,x,v){var Q,C;if(typeof u=="object"){typeof m!="string"&&(g=g||m,m=void 0);for(C in u)Us(h,C,m,g,u[C],v);return h}if(g==null&&x==null?(x=m,g=m=void 0):x==null&&(typeof m=="string"?(x=g,g=void 0):(x=g,g=m,m=void 0)),x===!1)x=ur;else if(!x)return h;return v===1&&(Q=x,x=function(R){return d().off(R),Q.apply(this,arguments)},x.guid=Q.guid||(Q.guid=d.guid++)),h.each(function(){d.event.add(this,u,x,g,m)})}d.event={global:{},add:function(h,u,m,g,x){var v,Q,C,R,Y,G,te,I,ce,Ie,ht,Be=we.get(h);if(lr(h))for(m.handler&&(v=m,m=v.handler,x=v.selector),x&&d.find.matchesSelector(Xi,x),m.guid||(m.guid=d.guid++),(R=Be.events)||(R=Be.events=Object.create(null)),(Q=Be.handle)||(Q=Be.handle=function(fi){return typeof d!="undefined"&&d.event.triggered!==fi.type?d.event.dispatch.apply(h,arguments):void 0}),u=(u||"").match(Pi)||[""],Y=u.length;Y--;)C=zr.exec(u[Y])||[],ce=ht=C[1],Ie=(C[2]||"").split(".").sort(),ce&&(te=d.event.special[ce]||{},ce=(x?te.delegateType:te.bindType)||ce,te=d.event.special[ce]||{},G=d.extend({type:ce,origType:ht,data:g,handler:m,guid:m.guid,selector:x,needsContext:x&&d.expr.match.needsContext.test(x),namespace:Ie.join(".")},v),(I=R[ce])||(I=R[ce]=[],I.delegateCount=0,(!te.setup||te.setup.call(h,g,Ie,Q)===!1)&&h.addEventListener&&h.addEventListener(ce,Q)),te.add&&(te.add.call(h,G),G.handler.guid||(G.handler.guid=m.guid)),x?I.splice(I.delegateCount++,0,G):I.push(G),d.event.global[ce]=!0)},remove:function(h,u,m,g,x){var v,Q,C,R,Y,G,te,I,ce,Ie,ht,Be=we.hasData(h)&&we.get(h);if(!(!Be||!(R=Be.events))){for(u=(u||"").match(Pi)||[""],Y=u.length;Y--;){if(C=zr.exec(u[Y])||[],ce=ht=C[1],Ie=(C[2]||"").split(".").sort(),!ce){for(ce in R)d.event.remove(h,ce+u[Y],m,g,!0);continue}for(te=d.event.special[ce]||{},ce=(g?te.delegateType:te.bindType)||ce,I=R[ce]||[],C=C[2]&&new RegExp("(^|\\.)"+Ie.join("\\.(?:.*\\.|)")+"(\\.|$)"),Q=v=I.length;v--;)G=I[v],(x||ht===G.origType)&&(!m||m.guid===G.guid)&&(!C||C.test(G.namespace))&&(!g||g===G.selector||g==="**"&&G.selector)&&(I.splice(v,1),G.selector&&I.delegateCount--,te.remove&&te.remove.call(h,G));Q&&!I.length&&((!te.teardown||te.teardown.call(h,Ie,Be.handle)===!1)&&d.removeEvent(h,ce,Be.handle),delete R[ce])}d.isEmptyObject(R)&&we.remove(h,"handle events")}},dispatch:function(h){var u,m,g,x,v,Q,C=new Array(arguments.length),R=d.event.fix(h),Y=(we.get(this,"events")||Object.create(null))[R.type]||[],G=d.event.special[R.type]||{};for(C[0]=R,u=1;u=1)){for(;Y!==this;Y=Y.parentNode||this)if(Y.nodeType===1&&!(h.type==="click"&&Y.disabled===!0)){for(v=[],Q={},m=0;m-1:d.find(x,this,null,[Y]).length),Q[x]&&v.push(g);v.length&&C.push({elem:Y,handlers:v})}}return Y=this,R\s*$/g;function Zo(h,u){return F(h,"table")&&F(u.nodeType!==11?u:u.firstChild,"tr")&&d(h).children("tbody")[0]||h}function kn(h){return h.type=(h.getAttribute("type")!==null)+"/"+h.type,h}function Pa(h){return(h.type||"").slice(0,5)==="true/"?h.type=h.type.slice(5):h.removeAttribute("type"),h}function Uo(h,u){var m,g,x,v,Q,C,R;if(u.nodeType===1){if(we.hasData(h)&&(v=we.get(h),R=v.events,R)){we.remove(u,"handle events");for(x in R)for(m=0,g=R[x].length;m1&&typeof ce=="string"&&!b.checkClone&&Es.test(ce))return h.each(function(ht){var Be=h.eq(ht);Ie&&(u[0]=ce.call(this,ht,Be.html())),Ri(Be,u,m,g)});if(te&&(x=_i(u,h[0].ownerDocument,!1,h,g),v=x.firstChild,x.childNodes.length===1&&(x=v),v||g)){for(Q=d.map(Gt(x,"script"),kn),C=Q.length;G0&&nn(Q,!R&&Gt(h,"script")),C},cleanData:function(h){for(var u,m,g,x=d.event.special,v=0;(m=h[v])!==void 0;v++)if(lr(m)){if(u=m[we.expando]){if(u.events)for(g in u.events)x[g]?d.event.remove(m,g):d.removeEvent(m,g,u.handle);m[we.expando]=void 0}m[Tt.expando]&&(m[Tt.expando]=void 0)}}}),d.fn.extend({detach:function(h){return Ao(this,h,!0)},remove:function(h){return Ao(this,h)},text:function(h){return ai(this,function(u){return u===void 0?d.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=u)})},null,h,arguments.length)},append:function(){return Ri(this,arguments,function(h){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var u=Zo(this,h);u.appendChild(h)}})},prepend:function(){return Ri(this,arguments,function(h){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var u=Zo(this,h);u.insertBefore(h,u.firstChild)}})},before:function(){return Ri(this,arguments,function(h){this.parentNode&&this.parentNode.insertBefore(h,this)})},after:function(){return Ri(this,arguments,function(h){this.parentNode&&this.parentNode.insertBefore(h,this.nextSibling)})},empty:function(){for(var h,u=0;(h=this[u])!=null;u++)h.nodeType===1&&(d.cleanData(Gt(h,!1)),h.textContent="");return this},clone:function(h,u){return h=h==null?!1:h,u=u==null?h:u,this.map(function(){return d.clone(this,h,u)})},html:function(h){return ai(this,function(u){var m=this[0]||{},g=0,x=this.length;if(u===void 0&&m.nodeType===1)return m.innerHTML;if(typeof u=="string"&&!As.test(u)&&!Nt[(Cs.exec(u)||["",""])[1].toLowerCase()]){u=d.htmlPrefilter(u);try{for(;g=0&&(R+=Math.max(0,Math.ceil(h["offset"+u[0].toUpperCase()+u.slice(1)]-v-R-C-.5))||0),R+Y}function rs(h,u,m){var g=Xn(h),x=!b.boxSizingReliable()||m,v=x&&d.css(h,"boxSizing",!1,g)==="border-box",Q=v,C=_n(h,u,g),R="offset"+u[0].toUpperCase()+u.slice(1);if(is.test(C)){if(!m)return C;C="auto"}return(!b.boxSizingReliable()&&v||!b.reliableTrDimensions()&&F(h,"tr")||C==="auto"||!parseFloat(C)&&d.css(h,"display",!1,g)==="inline")&&h.getClientRects().length&&(v=d.css(h,"boxSizing",!1,g)==="border-box",Q=R in h,Q&&(C=h[R])),C=parseFloat(C)||0,C+dr(h,u,m||(v?"border":"content"),Q,g,C)+"px"}d.extend({cssHooks:{opacity:{get:function(h,u){if(u){var m=_n(h,"opacity");return m===""?"1":m}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(h,u,m,g){if(!(!h||h.nodeType===3||h.nodeType===8||!h.style)){var x,v,Q,C=ti(u),R=Tn.test(u),Y=h.style;if(R||(u=Ls(C)),Q=d.cssHooks[u]||d.cssHooks[C],m!==void 0){if(v=typeof m,v==="string"&&(x=Ti.exec(m))&&x[1]&&(m=es(h,u,x),v="number"),m==null||m!==m)return;v==="number"&&!R&&(m+=x&&x[3]||(d.cssNumber[C]?"":"px")),!b.clearCloneStyle&&m===""&&u.indexOf("background")===0&&(Y[u]="inherit"),(!Q||!("set"in Q)||(m=Q.set(h,m,g))!==void 0)&&(R?Y.setProperty(u,m):Y[u]=m)}else return Q&&"get"in Q&&(x=Q.get(h,!1,g))!==void 0?x:Y[u]}},css:function(h,u,m,g){var x,v,Q,C=ti(u),R=Tn.test(u);return R||(u=Ls(C)),Q=d.cssHooks[u]||d.cssHooks[C],Q&&"get"in Q&&(x=Q.get(h,!0,m)),x===void 0&&(x=_n(h,u,g)),x==="normal"&&u in Vs&&(x=Vs[u]),m===""||m?(v=parseFloat(x),m===!0||isFinite(v)?v||0:x):x}}),d.each(["height","width"],function(h,u){d.cssHooks[u]={get:function(m,g,x){if(g)return Or.test(d.css(m,"display"))&&(!m.getClientRects().length||!m.getBoundingClientRect().width)?Ys(m,Ws,function(){return rs(m,u,x)}):rs(m,u,x)},set:function(m,g,x){var v,Q=Xn(m),C=!b.scrollboxSize()&&Q.position==="absolute",R=C||x,Y=R&&d.css(m,"boxSizing",!1,Q)==="border-box",G=x?dr(m,u,x,Y,Q):0;return Y&&C&&(G-=Math.ceil(m["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(Q[u])-dr(m,u,"border",!1,Q)-.5)),G&&(v=Ti.exec(g))&&(v[3]||"px")!=="px"&&(m.style[u]=g,g=d.css(m,u)),Ms(m,g,G)}}}),d.cssHooks.marginLeft=Eo(b.reliableMarginLeft,function(h,u){if(u)return(parseFloat(_n(h,"marginLeft"))||h.getBoundingClientRect().left-Ys(h,{marginLeft:0},function(){return h.getBoundingClientRect().left}))+"px"}),d.each({margin:"",padding:"",border:"Width"},function(h,u){d.cssHooks[h+u]={expand:function(m){for(var g=0,x={},v=typeof m=="string"?m.split(" "):[m];g<4;g++)x[h+li[g]+u]=v[g]||v[g-2]||v[0];return x}},h!=="margin"&&(d.cssHooks[h+u].set=Ms)}),d.fn.extend({css:function(h,u){return ai(this,function(m,g,x){var v,Q,C={},R=0;if(Array.isArray(g)){for(v=Xn(m),Q=g.length;R1)}});function zt(h,u,m,g,x){return new zt.prototype.init(h,u,m,g,x)}d.Tween=zt,zt.prototype={constructor:zt,init:function(h,u,m,g,x,v){this.elem=h,this.prop=m,this.easing=x||d.easing._default,this.options=u,this.start=this.now=this.cur(),this.end=g,this.unit=v||(d.cssNumber[m]?"":"px")},cur:function(){var h=zt.propHooks[this.prop];return h&&h.get?h.get(this):zt.propHooks._default.get(this)},run:function(h){var u,m=zt.propHooks[this.prop];return this.options.duration?this.pos=u=d.easing[this.easing](h,this.options.duration*h,0,1,this.options.duration):this.pos=u=h,this.now=(this.end-this.start)*u+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),m&&m.set?m.set(this):zt.propHooks._default.set(this),this}},zt.prototype.init.prototype=zt.prototype,zt.propHooks={_default:{get:function(h){var u;return h.elem.nodeType!==1||h.elem[h.prop]!=null&&h.elem.style[h.prop]==null?h.elem[h.prop]:(u=d.css(h.elem,h.prop,""),!u||u==="auto"?0:u)},set:function(h){d.fx.step[h.prop]?d.fx.step[h.prop](h):h.elem.nodeType===1&&(d.cssHooks[h.prop]||h.elem.style[Ls(h.prop)]!=null)?d.style(h.elem,h.prop,h.now+h.unit):h.elem[h.prop]=h.now}}},zt.propHooks.scrollTop=zt.propHooks.scrollLeft={set:function(h){h.elem.nodeType&&h.elem.parentNode&&(h.elem[h.prop]=h.now)}},d.easing={linear:function(h){return h},swing:function(h){return .5-Math.cos(h*Math.PI)/2},_default:"swing"},d.fx=zt.prototype.init,d.fx.step={};var w,Z,T=/^(?:toggle|show|hide)$/,z=/queueHooks$/;function W(){Z&&(X.hidden===!1&&i.requestAnimationFrame?i.requestAnimationFrame(W):i.setTimeout(W,d.fx.interval),d.fx.tick())}function E(){return i.setTimeout(function(){w=void 0}),w=Date.now()}function J(h,u){var m,g=0,x={height:h};for(u=u?1:0;g<4;g+=2-u)m=li[g],x["margin"+m]=x["padding"+m]=h;return u&&(x.opacity=x.width=h),x}function se(h,u,m){for(var g,x=(le.tweeners[u]||[]).concat(le.tweeners["*"]),v=0,Q=x.length;v1)},removeAttr:function(h){return this.each(function(){d.removeAttr(this,h)})}}),d.extend({attr:function(h,u,m){var g,x,v=h.nodeType;if(!(v===3||v===8||v===2)){if(typeof h.getAttribute=="undefined")return d.prop(h,u,m);if((v!==1||!d.isXMLDoc(h))&&(x=d.attrHooks[u.toLowerCase()]||(d.expr.match.bool.test(u)?ke:void 0)),m!==void 0){if(m===null){d.removeAttr(h,u);return}return x&&"set"in x&&(g=x.set(h,m,u))!==void 0?g:(h.setAttribute(u,m+""),m)}return x&&"get"in x&&(g=x.get(h,u))!==null?g:(g=d.find.attr(h,u),g==null?void 0:g)}},attrHooks:{type:{set:function(h,u){if(!b.radioValue&&u==="radio"&&F(h,"input")){var m=h.value;return h.setAttribute("type",u),m&&(h.value=m),u}}}},removeAttr:function(h,u){var m,g=0,x=u&&u.match(Pi);if(x&&h.nodeType===1)for(;m=x[g++];)h.removeAttribute(m)}}),ke={set:function(h,u,m){return u===!1?d.removeAttr(h,m):h.setAttribute(m,m),m}},d.each(d.expr.match.bool.source.match(/\w+/g),function(h,u){var m=Me[u]||d.find.attr;Me[u]=function(g,x,v){var Q,C,R=x.toLowerCase();return v||(C=Me[R],Me[R]=Q,Q=m(g,x,v)!=null?R:null,Me[R]=C),Q}});var Je=/^(?:input|select|textarea|button)$/i,at=/^(?:a|area)$/i;d.fn.extend({prop:function(h,u){return ai(this,d.prop,h,u,arguments.length>1)},removeProp:function(h){return this.each(function(){delete this[d.propFix[h]||h]})}}),d.extend({prop:function(h,u,m){var g,x,v=h.nodeType;if(!(v===3||v===8||v===2))return(v!==1||!d.isXMLDoc(h))&&(u=d.propFix[u]||u,x=d.propHooks[u]),m!==void 0?x&&"set"in x&&(g=x.set(h,m,u))!==void 0?g:h[u]=m:x&&"get"in x&&(g=x.get(h,u))!==null?g:h[u]},propHooks:{tabIndex:{get:function(h){var u=d.find.attr(h,"tabindex");return u?parseInt(u,10):Je.test(h.nodeName)||at.test(h.nodeName)&&h.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),b.optSelected||(d.propHooks.selected={get:function(h){var u=h.parentNode;return u&&u.parentNode&&u.parentNode.selectedIndex,null},set:function(h){var u=h.parentNode;u&&(u.selectedIndex,u.parentNode&&u.parentNode.selectedIndex)}}),d.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){d.propFix[this.toLowerCase()]=this});function re(h){var u=h.match(Pi)||[];return u.join(" ")}function k(h){return h.getAttribute&&h.getAttribute("class")||""}function V(h){return Array.isArray(h)?h:typeof h=="string"?h.match(Pi)||[]:[]}d.fn.extend({addClass:function(h){var u,m,g,x,v,Q;return S(h)?this.each(function(C){d(this).addClass(h.call(this,C,k(this)))}):(u=V(h),u.length?this.each(function(){if(g=k(this),m=this.nodeType===1&&" "+re(g)+" ",m){for(v=0;v-1;)m=m.replace(" "+x+" "," ");Q=re(m),g!==Q&&this.setAttribute("class",Q)}}):this):this.attr("class","")},toggleClass:function(h,u){var m,g,x,v,Q=typeof h,C=Q==="string"||Array.isArray(h);return S(h)?this.each(function(R){d(this).toggleClass(h.call(this,R,k(this),u),u)}):typeof u=="boolean"&&C?u?this.addClass(h):this.removeClass(h):(m=V(h),this.each(function(){if(C)for(v=d(this),x=0;x-1)return!0;return!1}});var ne=/\r/g;d.fn.extend({val:function(h){var u,m,g,x=this[0];return arguments.length?(g=S(h),this.each(function(v){var Q;this.nodeType===1&&(g?Q=h.call(this,v,d(this).val()):Q=h,Q==null?Q="":typeof Q=="number"?Q+="":Array.isArray(Q)&&(Q=d.map(Q,function(C){return C==null?"":C+""})),u=d.valHooks[this.type]||d.valHooks[this.nodeName.toLowerCase()],(!u||!("set"in u)||u.set(this,Q,"value")===void 0)&&(this.value=Q))})):x?(u=d.valHooks[x.type]||d.valHooks[x.nodeName.toLowerCase()],u&&"get"in u&&(m=u.get(x,"value"))!==void 0?m:(m=x.value,typeof m=="string"?m.replace(ne,""):m==null?"":m)):void 0}}),d.extend({valHooks:{option:{get:function(h){var u=d.find.attr(h,"value");return u!=null?u:re(d.text(h))}},select:{get:function(h){var u,m,g,x=h.options,v=h.selectedIndex,Q=h.type==="select-one",C=Q?null:[],R=Q?v+1:x.length;for(v<0?g=R:g=Q?v:0;g-1)&&(m=!0);return m||(h.selectedIndex=-1),v}}}}),d.each(["radio","checkbox"],function(){d.valHooks[this]={set:function(h,u){if(Array.isArray(u))return h.checked=d.inArray(d(h).val(),u)>-1}},b.checkOn||(d.valHooks[this].get=function(h){return h.getAttribute("value")===null?"on":h.value})});var Qe=i.location,Re={guid:Date.now()},Le=/\?/;d.parseXML=function(h){var u,m;if(!h||typeof h!="string")return null;try{u=new i.DOMParser().parseFromString(h,"text/xml")}catch(g){}return m=u&&u.getElementsByTagName("parsererror")[0],(!u||m)&&d.error("Invalid XML: "+(m?d.map(m.childNodes,function(g){return g.textContent}).join(` -`):h)),u};var mt=/^(?:focusinfocus|focusoutblur)$/,St=function(h){h.stopPropagation()};d.extend(d.event,{trigger:function(h,u,m,g){var x,v,Q,C,R,Y,G,te,I=[m||X],ce=f.call(h,"type")?h.type:h,Ie=f.call(h,"namespace")?h.namespace.split("."):[];if(v=te=Q=m=m||X,!(m.nodeType===3||m.nodeType===8)&&!mt.test(ce+d.event.triggered)&&(ce.indexOf(".")>-1&&(Ie=ce.split("."),ce=Ie.shift(),Ie.sort()),R=ce.indexOf(":")<0&&"on"+ce,h=h[d.expando]?h:new d.Event(ce,typeof h=="object"&&h),h.isTrigger=g?2:3,h.namespace=Ie.join("."),h.rnamespace=h.namespace?new RegExp("(^|\\.)"+Ie.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h.result=void 0,h.target||(h.target=m),u=u==null?[h]:d.makeArray(u,[h]),G=d.event.special[ce]||{},!(!g&&G.trigger&&G.trigger.apply(m,u)===!1))){if(!g&&!G.noBubble&&!P(m)){for(C=G.delegateType||ce,mt.test(C+ce)||(v=v.parentNode);v;v=v.parentNode)I.push(v),Q=v;Q===(m.ownerDocument||X)&&I.push(Q.defaultView||Q.parentWindow||i)}for(x=0;(v=I[x++])&&!h.isPropagationStopped();)te=v,h.type=x>1?C:G.bindType||ce,Y=(we.get(v,"events")||Object.create(null))[h.type]&&we.get(v,"handle"),Y&&Y.apply(v,u),Y=R&&v[R],Y&&Y.apply&&lr(v)&&(h.result=Y.apply(v,u),h.result===!1&&h.preventDefault());return h.type=ce,!g&&!h.isDefaultPrevented()&&(!G._default||G._default.apply(I.pop(),u)===!1)&&lr(m)&&R&&S(m[ce])&&!P(m)&&(Q=m[R],Q&&(m[R]=null),d.event.triggered=ce,h.isPropagationStopped()&&te.addEventListener(ce,St),m[ce](),h.isPropagationStopped()&&te.removeEventListener(ce,St),d.event.triggered=void 0,Q&&(m[R]=Q)),h.result}},simulate:function(h,u,m){var g=d.extend(new d.Event,m,{type:h,isSimulated:!0});d.event.trigger(g,null,u)}}),d.fn.extend({trigger:function(h,u){return this.each(function(){d.event.trigger(h,u,this)})},triggerHandler:function(h,u){var m=this[0];if(m)return d.event.trigger(h,u,m,!0)}});var ri=/\[\]$/,Wt=/\r?\n/g,Ta=/^(?:submit|button|image|reset|file)$/i,hi=/^(?:input|select|textarea|keygen)/i;function mu(h,u,m,g){var x;if(Array.isArray(u))d.each(u,function(v,Q){m||ri.test(h)?g(h,Q):mu(h+"["+(typeof Q=="object"&&Q!=null?v:"")+"]",Q,m,g)});else if(!m&&q(u)==="object")for(x in u)mu(h+"["+x+"]",u[x],m,g);else g(h,u)}d.param=function(h,u){var m,g=[],x=function(v,Q){var C=S(Q)?Q():Q;g[g.length]=encodeURIComponent(v)+"="+encodeURIComponent(C==null?"":C)};if(h==null)return"";if(Array.isArray(h)||h.jquery&&!d.isPlainObject(h))d.each(h,function(){x(this.name,this.value)});else for(m in h)mu(m,h[m],u,x);return g.join("&")},d.fn.extend({serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var h=d.prop(this,"elements");return h?d.makeArray(h):this}).filter(function(){var h=this.type;return this.name&&!d(this).is(":disabled")&&hi.test(this.nodeName)&&!Ta.test(h)&&(this.checked||!ii.test(h))}).map(function(h,u){var m=d(this).val();return m==null?null:Array.isArray(m)?d.map(m,function(g){return{name:u.name,value:g.replace(Wt,`\r +import{a as yc,b as Sc,c as Lo,d as z1}from"./chunk-7GWCUXYG.js";import{a as E1}from"./chunk-LNOKARBD.js";import{a as vc}from"./chunk-A7SWO6EA.js";import{a as r0,b as n0,c as Y1}from"./chunk-LVDMCWZP.js";import{D as Yu,J as ju,t as t0,u as i0}from"./chunk-AA227H53.js";import{A as Gs,E as gr,F as Au,G as jo,I as bc,J as Eu,S as zu,U as e0,a as fn,aa as xc,b as Ua,d as xi,e as Cu,f as vi,g as pt,h as Zu,i as Fg,k as Hg,m as dc,n as pc,o as mc,p as Ns,q as Kg,t as gc,w as Jg,x as Uu,y as Aa,z as Zi}from"./chunk-BNFOPPUS.js";import{a as Vt,b as Oc,c as Za,d as _u,e as Ru}from"./chunk-KT7KMEQC.js";var Wu=_u((s0,Lu)=>{(function(i){if(typeof s0=="object"&&typeof Lu!="undefined")Lu.exports=i();else if(typeof define=="function"&&define.amd)define([],i);else{var e;typeof window!="undefined"?e=window:typeof global!="undefined"?e=global:typeof self!="undefined"?e=self:e=this,e.localforage=i()}})(function(){var i,e,t;return(function r(n,s,o){function a(f,O){if(!s[f]){if(!n[f]){var p=typeof Za=="function"&&Za;if(!O&&p)return p(f,!0);if(l)return l(f,!0);var b=new Error("Cannot find module '"+f+"'");throw b.code="MODULE_NOT_FOUND",b}var S=s[f]={exports:{}};n[f][0].call(S.exports,function(P){var X=n[f][1][P];return a(X||P)},S,S.exports,r,n,s,o)}return s[f].exports}for(var l=typeof Za=="function"&&Za,c=0;c=43)}}).catch(function(){return!1})}function de(w){return typeof H=="boolean"?p.resolve(H):F(w).then(function(Z){return H=Z,H})}function Ue(w){var Z=q[w.name],T={};T.promise=new p(function(z,W){T.resolve=z,T.reject=W}),Z.deferredOperations.push(T),Z.dbReady?Z.dbReady=Z.dbReady.then(function(){return T.promise}):Z.dbReady=T.promise}function Pe(w){var Z=q[w.name],T=Z.deferredOperations.pop();if(T)return T.resolve(),T.promise}function oe(w,Z){var T=q[w.name],z=T.deferredOperations.pop();if(z)return z.reject(Z),z.promise}function Xe(w,Z){return new p(function(T,z){if(q[w.name]=q[w.name]||ei(),w.db)if(Z)Ue(w),w.db.close();else return T(w.db);var W=[w.name];Z&&W.push(w.version);var E=c.open.apply(c,W);Z&&(E.onupgradeneeded=function(J){var se=E.result;try{se.createObjectStore(w.storeName),J.oldVersion<=1&&se.createObjectStore(A)}catch(he){if(he.name==="ConstraintError")console.warn('The database "'+w.name+'" has been upgraded from version '+J.oldVersion+" to version "+J.newVersion+', but the storage "'+w.storeName+'" already exists.');else throw he}}),E.onerror=function(J){J.preventDefault(),z(E.error)},E.onsuccess=function(){var J=E.result;J.onversionchange=function(se){se.target.close()},T(J),Pe(w)}})}function Ve(w){return Xe(w,!1)}function He(w){return Xe(w,!0)}function ie(w,Z){if(!w.db)return!0;var T=!w.db.objectStoreNames.contains(w.storeName),z=w.versionw.db.version;if(z&&(w.version!==Z&&console.warn('The database "'+w.name+`" can't be downgraded from version `+w.db.version+" to version "+w.version+"."),w.version=w.db.version),W||T){if(T){var E=w.db.version+1;E>w.version&&(w.version=E)}return!0}return!1}function ve(w){return new p(function(Z,T){var z=new FileReader;z.onerror=T,z.onloadend=function(W){var E=btoa(W.target.result||"");Z({__local_forage_encoded_blob:!0,data:E,type:w.type})},z.readAsBinaryString(w)})}function ue(w){var Z=M(atob(w.data));return O([Z],{type:w.type})}function De(w){return w&&w.__local_forage_encoded_blob}function Ge(w){var Z=this,T=Z._initReady().then(function(){var z=q[Z._dbInfo.name];if(z&&z.dbReady)return z.dbReady});return S(T,w,w),T}function wt(w){Ue(w);for(var Z=q[w.name],T=Z.forages,z=0;z0&&(!w.db||E.name==="InvalidStateError"||E.name==="NotFoundError"))return p.resolve().then(function(){if(!w.db||E.name==="NotFoundError"&&!w.db.objectStoreNames.contains(w.storeName)&&w.version<=w.db.version)return w.db&&(w.version=w.db.version+1),He(w)}).then(function(){return wt(w).then(function(){je(w,Z,T,z-1)})}).catch(T);T(E)}}function ei(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function Hi(w){var Z=this,T={db:null};if(w)for(var z in w)T[z]=w[z];var W=q[T.name];W||(W=ei(),q[T.name]=W),W.forages.push(Z),Z._initReady||(Z._initReady=Z.ready,Z.ready=Ge);var E=[];function J(){return p.resolve()}for(var se=0;se>4,le[W++]=(J&15)<<4|se>>2,le[W++]=(se&3)<<6|he&63;return fe}function es(w){var Z=new Uint8Array(w),T="",z;for(z=0;z>2],T+=nt[(Z[z]&3)<<4|Z[z+1]>>4],T+=nt[(Z[z+1]&15)<<2|Z[z+2]>>6],T+=nt[Z[z+2]&63];return Z.length%3===2?T=T.substring(0,T.length-1)+"=":Z.length%3===1&&(T=T.substring(0,T.length-2)+"=="),T}function Pn(w,Z){var T="";if(w&&(T=Xi.call(w)),w&&(T==="[object ArrayBuffer]"||w.buffer&&Xi.call(w.buffer)==="[object ArrayBuffer]")){var z,W=ki;w instanceof ArrayBuffer?(z=w,W+=ti):(z=w.buffer,T==="[object Int8Array]"?W+=Ur:T==="[object Uint8Array]"?W+=we:T==="[object Uint8ClampedArray]"?W+=Tt:T==="[object Int16Array]"?W+=cr:T==="[object Uint16Array]"?W+=wn:T==="[object Int32Array]"?W+=Jn:T==="[object Uint32Array]"?W+=rn:T==="[object Float32Array]"?W+=$n:T==="[object Float64Array]"?W+=Ti:Z(new Error("Failed to get type for BinaryArray"))),Z(W+es(z))}else if(T==="[object Blob]"){var E=new FileReader;E.onload=function(){var J=ai+w.type+"~"+es(this.result);Z(ki+lr+J)},E.readAsArrayBuffer(w)}else try{Z(JSON.stringify(w))}catch(J){console.error("Couldn't convert value into a JSON string: ",w),Z(null,J)}}function ts(w){if(w.substring(0,Kn)!==ki)return JSON.parse(w);var Z=w.substring(li),T=w.substring(Kn,li),z;if(T===lr&&Cs.test(Z)){var W=Z.match(Cs);z=W[1],Z=Z.substring(W[0].length)}var E=hr(Z);switch(T){case ti:return E;case lr:return O([E],{type:z});case Ur:return new Int8Array(E);case we:return new Uint8Array(E);case Tt:return new Uint8ClampedArray(E);case cr:return new Int16Array(E);case wn:return new Uint16Array(E);case Jn:return new Int32Array(E);case rn:return new Uint32Array(E);case $n:return new Float32Array(E);case Ti:return new Float64Array(E);default:throw new Error("Unkown type: "+T)}}var Ar={serialize:Pn,deserialize:ts,stringToBuffer:hr,bufferToString:es};function Er(w,Z,T,z){w.executeSql("CREATE TABLE IF NOT EXISTS "+Z.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],T,z)}function Nt(w){var Z=this,T={db:null};if(w)for(var z in w)T[z]=typeof w[z]!="string"?w[z].toString():w[z];var W=new p(function(E,J){try{T.db=openDatabase(T.name,String(T.version),T.description,T.size)}catch(se){return J(se)}T.db.transaction(function(se){Er(se,T,function(){Z._dbInfo=T,E()},function(he,fe){J(fe)})},J)});return T.serializer=Ar,W}function ii(w,Z,T,z,W,E){w.executeSql(T,z,W,function(J,se){se.code===se.SYNTAX_ERR?J.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[Z.storeName],function(he,fe){fe.rows.length?E(he,se):Er(he,Z,function(){he.executeSql(T,z,W,E)},E)},E):E(J,se)},E)}function Zs(w,Z){var T=this;w=P(w);var z=new p(function(W,E){T.ready().then(function(){var J=T._dbInfo;J.db.transaction(function(se){ii(se,J,"SELECT * FROM "+J.storeName+" WHERE key = ? LIMIT 1",[w],function(he,fe){var le=fe.rows.length?fe.rows.item(0).value:null;le&&(le=J.serializer.deserialize(le)),W(le)},function(he,fe){E(fe)})})}).catch(E)});return b(z,Z),z}function Us(w,Z){var T=this,z=new p(function(W,E){T.ready().then(function(){var J=T._dbInfo;J.db.transaction(function(se){ii(se,J,"SELECT * FROM "+J.storeName,[],function(he,fe){for(var le=fe.rows,ke=le.length,Me=0;Me0){J(Gt.apply(W,[w,he,T,z-1]));return}se(Me)}})})}).catch(se)});return b(E,T),E}function Bt(w,Z,T){return Gt.apply(this,[w,Z,T,1])}function nn(w,Z){var T=this;w=P(w);var z=new p(function(W,E){T.ready().then(function(){var J=T._dbInfo;J.db.transaction(function(se){ii(se,J,"DELETE FROM "+J.storeName+" WHERE key = ?",[w],function(){W()},function(he,fe){E(fe)})})}).catch(E)});return b(z,Z),z}function is(w){var Z=this,T=new p(function(z,W){Z.ready().then(function(){var E=Z._dbInfo;E.db.transaction(function(J){ii(J,E,"DELETE FROM "+E.storeName,[],function(){z()},function(se,he){W(he)})})}).catch(W)});return b(T,w),T}function _i(w){var Z=this,T=new p(function(z,W){Z.ready().then(function(){var E=Z._dbInfo;E.db.transaction(function(J){ii(J,E,"SELECT COUNT(key) as c FROM "+E.storeName,[],function(se,he){var fe=he.rows.item(0).c;z(fe)},function(se,he){W(he)})})}).catch(W)});return b(T,w),T}function zr(w,Z){var T=this,z=new p(function(W,E){T.ready().then(function(){var J=T._dbInfo;J.db.transaction(function(se){ii(se,J,"SELECT key FROM "+J.storeName+" WHERE id = ? LIMIT 1",[w+1],function(he,fe){var le=fe.rows.length?fe.rows.item(0).key:null;W(le)},function(he,fe){E(fe)})})}).catch(E)});return b(z,Z),z}function fr(w){var Z=this,T=new p(function(z,W){Z.ready().then(function(){var E=Z._dbInfo;E.db.transaction(function(J){ii(J,E,"SELECT key FROM "+E.storeName,[],function(se,he){for(var fe=[],le=0;le '__WebKitDatabaseInfoTable__'",[],function(W,E){for(var J=[],se=0;se0}function Tn(w){var Z=this,T={};if(w)for(var z in w)T[z]=w[z];return T.keyPrefix=zs(w,Z._defaultConfig),Zo()?(Z._dbInfo=T,T.serializer=Ar,p.resolve()):p.reject()}function Pa(w){var Z=this,T=Z.ready().then(function(){for(var z=Z._dbInfo.keyPrefix,W=localStorage.length-1;W>=0;W--){var E=localStorage.key(W);E.indexOf(z)===0&&localStorage.removeItem(E)}});return b(T,w),T}function Uo(w,Z){var T=this;w=P(w);var z=T.ready().then(function(){var W=T._dbInfo,E=localStorage.getItem(W.keyPrefix+w);return E&&(E=W.serializer.deserialize(E)),E});return b(z,Z),z}function $t(w,Z){var T=this,z=T.ready().then(function(){for(var W=T._dbInfo,E=W.keyPrefix,J=E.length,se=localStorage.length,he=1,fe=0;fe=0;J--){var se=localStorage.key(J);se.indexOf(E)===0&&localStorage.removeItem(se)}}):W=p.reject("Invalid arguments"),b(W,Z),W}var ka={_driver:"localStorageWrapper",_initStorage:Tn,_support:Es(),iterate:$t,getItem:Uo,setItem:_n,removeItem:Xn,clear:Pa,length:rs,key:Ri,keys:Ao,dropInstance:js},Rn=function(Z,T){return Z===T||typeof Z=="number"&&typeof T=="number"&&isNaN(Z)&&isNaN(T)},Eo=function(Z,T){for(var z=Z.length,W=0;W{(function(i,e){"use strict";typeof au=="object"&&typeof au.exports=="object"?au.exports=i.document?e(i,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(i)})(typeof window!="undefined"?window:k$,function(i,e){"use strict";var t=[],r=Object.getPrototypeOf,n=t.slice,s=t.flat?function(h){return t.flat.call(h)}:function(h){return t.concat.apply([],h)},o=t.push,a=t.indexOf,l={},c=l.toString,f=l.hasOwnProperty,O=f.toString,p=O.call(Object),b={},S=function(u){return typeof u=="function"&&typeof u.nodeType!="number"&&typeof u.item!="function"},P=function(u){return u!=null&&u===u.window},X=i.document,A={type:!0,src:!0,nonce:!0,noModule:!0};function H(h,u,m){m=m||X;var g,x,v=m.createElement("script");if(v.text=h,u)for(g in A)x=u[g]||u.getAttribute&&u.getAttribute(g),x&&v.setAttribute(g,x);m.head.appendChild(v).parentNode.removeChild(v)}function q(h){return h==null?h+"":typeof h=="object"||typeof h=="function"?l[c.call(h)]||"object":typeof h}var B="3.7.1",L=/HTML$/i,d=function(h,u){return new d.fn.init(h,u)};d.fn=d.prototype={jquery:B,constructor:d,length:0,toArray:function(){return n.call(this)},get:function(h){return h==null?n.call(this):h<0?this[h+this.length]:this[h]},pushStack:function(h){var u=d.merge(this.constructor(),h);return u.prevObject=this,u},each:function(h){return d.each(this,h)},map:function(h){return this.pushStack(d.map(this,function(u,m){return h.call(u,m,u)}))},slice:function(){return this.pushStack(n.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(d.grep(this,function(h,u){return(u+1)%2}))},odd:function(){return this.pushStack(d.grep(this,function(h,u){return u%2}))},eq:function(h){var u=this.length,m=+h+(h<0?u:0);return this.pushStack(m>=0&&m0&&u-1 in h}function F(h,u){return h.nodeName&&h.nodeName.toLowerCase()===u.toLowerCase()}var de=t.pop,Ue=t.sort,Pe=t.splice,oe="[\\x20\\t\\r\\n\\f]",Xe=new RegExp("^"+oe+"+|((?:^|[^\\\\])(?:\\\\.)*)"+oe+"+$","g");d.contains=function(h,u){var m=u&&u.parentNode;return h===m||!!(m&&m.nodeType===1&&(h.contains?h.contains(m):h.compareDocumentPosition&&h.compareDocumentPosition(m)&16))};var Ve=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function He(h,u){return u?h==="\0"?"\uFFFD":h.slice(0,-1)+"\\"+h.charCodeAt(h.length-1).toString(16)+" ":"\\"+h}d.escapeSelector=function(h){return(h+"").replace(Ve,He)};var ie=X,ve=o;(function(){var h,u,m,g,x,v=ve,Q,C,R,Y,G,te=d.expando,I=0,ce=0,Ie=cc(),ht=cc(),Be=cc(),fi=cc(),Ft=function(_,U){return _===U&&(x=!0),0},on="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",an="(?:\\\\[\\da-fA-F]{1,6}"+oe+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",st="\\["+oe+"*("+an+")(?:"+oe+"*([*^$|!~]?=)"+oe+`*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(`+an+"))|)"+oe+"*\\]",Ds=":("+an+`)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|`+st+")*)|.*)\\)|)",dt=new RegExp(oe+"+","g"),Et=new RegExp("^"+oe+"*,"+oe+"*"),_a=new RegExp("^"+oe+"*([>+~]|"+oe+")"+oe+"*"),Qu=new RegExp(oe+"|>"),ln=new RegExp(Ds),Ra=new RegExp("^"+an+"$"),cn={ID:new RegExp("^#("+an+")"),CLASS:new RegExp("^\\.("+an+")"),TAG:new RegExp("^("+an+"|[*])"),ATTR:new RegExp("^"+st),PSEUDO:new RegExp("^"+Ds),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+oe+"*(even|odd|(([+-]|)(\\d*)n|)"+oe+"*(?:([+-]|)"+oe+"*(\\d+)|))"+oe+"*\\)|)","i"),bool:new RegExp("^(?:"+on+")$","i"),needsContext:new RegExp("^"+oe+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+oe+"*((?:-\\d)?\\d*)"+oe+"*\\)|)(?=[^-]|$)","i")},ss=/^(?:input|select|textarea|button)$/i,os=/^h\d$/i,pr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,wu=/[+~]/,Cn=new RegExp("\\\\[\\da-fA-F]{1,6}"+oe+"?|\\\\([^\\r\\n\\f])","g"),Zn=function(_,U){var D="0x"+_.slice(1)-65536;return U||(D<0?String.fromCharCode(D+65536):String.fromCharCode(D>>10|55296,D&1023|56320))},X1=function(){as()},_1=fc(function(_){return _.disabled===!0&&F(_,"fieldset")},{dir:"parentNode",next:"legend"});function R1(){try{return Q.activeElement}catch(_){}}try{v.apply(t=n.call(ie.childNodes),ie.childNodes),t[ie.childNodes.length].nodeType}catch(_){v={apply:function(U,D){ve.apply(U,n.call(D))},call:function(U){ve.apply(U,n.call(arguments,1))}}}function xt(_,U,D,N){var ee,me,ye,_e,Se,et,We,Ne=U&&U.ownerDocument,tt=U?U.nodeType:9;if(D=D||[],typeof _!="string"||!_||tt!==1&&tt!==9&&tt!==11)return D;if(!N&&(as(U),U=U||Q,R)){if(tt!==11&&(Se=pr.exec(_)))if(ee=Se[1]){if(tt===9)if(ye=U.getElementById(ee)){if(ye.id===ee)return v.call(D,ye),D}else return D;else if(Ne&&(ye=Ne.getElementById(ee))&&xt.contains(U,ye)&&ye.id===ee)return v.call(D,ye),D}else{if(Se[2])return v.apply(D,U.getElementsByTagName(_)),D;if((ee=Se[3])&&U.getElementsByClassName)return v.apply(D,U.getElementsByClassName(ee)),D}if(!fi[_+" "]&&(!Y||!Y.test(_))){if(We=_,Ne=U,tt===1&&(Qu.test(_)||_a.test(_))){for(Ne=wu.test(_)&&$u(U.parentNode)||U,(Ne!=U||!b.scope)&&((_e=U.getAttribute("id"))?_e=d.escapeSelector(_e):U.setAttribute("id",_e=te)),et=Ca(_),me=et.length;me--;)et[me]=(_e?"#"+_e:":scope")+" "+hc(et[me]);We=et.join(",")}try{return v.apply(D,Ne.querySelectorAll(We)),D}catch(ze){fi(_,!0)}finally{_e===te&&U.removeAttribute("id")}}}return Bg(_.replace(Xe,"$1"),U,D,N)}function cc(){var _=[];function U(D,N){return _.push(D+" ")>u.cacheLength&&delete U[_.shift()],U[D+" "]=N}return U}function Yr(_){return _[te]=!0,_}function zo(_){var U=Q.createElement("fieldset");try{return!!_(U)}catch(D){return!1}finally{U.parentNode&&U.parentNode.removeChild(U),U=null}}function C1(_){return function(U){return F(U,"input")&&U.type===_}}function Z1(_){return function(U){return(F(U,"input")||F(U,"button"))&&U.type===_}}function Ng(_){return function(U){return"form"in U?U.parentNode&&U.disabled===!1?"label"in U?"label"in U.parentNode?U.parentNode.disabled===_:U.disabled===_:U.isDisabled===_||U.isDisabled!==!_&&_1(U)===_:U.disabled===_:"label"in U?U.disabled===_:!1}}function Is(_){return Yr(function(U){return U=+U,Yr(function(D,N){for(var ee,me=_([],D.length,U),ye=me.length;ye--;)D[ee=me[ye]]&&(D[ee]=!(N[ee]=D[ee]))})})}function $u(_){return _&&typeof _.getElementsByTagName!="undefined"&&_}function as(_){var U,D=_?_.ownerDocument||_:ie;return D==Q||D.nodeType!==9||!D.documentElement||(Q=D,C=Q.documentElement,R=!d.isXMLDoc(Q),G=C.matches||C.webkitMatchesSelector||C.msMatchesSelector,C.msMatchesSelector&&ie!=Q&&(U=Q.defaultView)&&U.top!==U&&U.addEventListener("unload",X1),b.getById=zo(function(N){return C.appendChild(N).id=d.expando,!Q.getElementsByName||!Q.getElementsByName(d.expando).length}),b.disconnectedMatch=zo(function(N){return G.call(N,"*")}),b.scope=zo(function(){return Q.querySelectorAll(":scope")}),b.cssHas=zo(function(){try{return Q.querySelector(":has(*,:jqfake)"),!1}catch(N){return!0}}),b.getById?(u.filter.ID=function(N){var ee=N.replace(Cn,Zn);return function(me){return me.getAttribute("id")===ee}},u.find.ID=function(N,ee){if(typeof ee.getElementById!="undefined"&&R){var me=ee.getElementById(N);return me?[me]:[]}}):(u.filter.ID=function(N){var ee=N.replace(Cn,Zn);return function(me){var ye=typeof me.getAttributeNode!="undefined"&&me.getAttributeNode("id");return ye&&ye.value===ee}},u.find.ID=function(N,ee){if(typeof ee.getElementById!="undefined"&&R){var me,ye,_e,Se=ee.getElementById(N);if(Se){if(me=Se.getAttributeNode("id"),me&&me.value===N)return[Se];for(_e=ee.getElementsByName(N),ye=0;Se=_e[ye++];)if(me=Se.getAttributeNode("id"),me&&me.value===N)return[Se]}return[]}}),u.find.TAG=function(N,ee){return typeof ee.getElementsByTagName!="undefined"?ee.getElementsByTagName(N):ee.querySelectorAll(N)},u.find.CLASS=function(N,ee){if(typeof ee.getElementsByClassName!="undefined"&&R)return ee.getElementsByClassName(N)},Y=[],zo(function(N){var ee;C.appendChild(N).innerHTML="",N.querySelectorAll("[selected]").length||Y.push("\\["+oe+"*(?:value|"+on+")"),N.querySelectorAll("[id~="+te+"-]").length||Y.push("~="),N.querySelectorAll("a#"+te+"+*").length||Y.push(".#.+[+~]"),N.querySelectorAll(":checked").length||Y.push(":checked"),ee=Q.createElement("input"),ee.setAttribute("type","hidden"),N.appendChild(ee).setAttribute("name","D"),C.appendChild(N).disabled=!0,N.querySelectorAll(":disabled").length!==2&&Y.push(":enabled",":disabled"),ee=Q.createElement("input"),ee.setAttribute("name",""),N.appendChild(ee),N.querySelectorAll("[name='']").length||Y.push("\\["+oe+"*name"+oe+"*="+oe+`*(?:''|"")`)}),b.cssHas||Y.push(":has"),Y=Y.length&&new RegExp(Y.join("|")),Ft=function(N,ee){if(N===ee)return x=!0,0;var me=!N.compareDocumentPosition-!ee.compareDocumentPosition;return me||(me=(N.ownerDocument||N)==(ee.ownerDocument||ee)?N.compareDocumentPosition(ee):1,me&1||!b.sortDetached&&ee.compareDocumentPosition(N)===me?N===Q||N.ownerDocument==ie&&xt.contains(ie,N)?-1:ee===Q||ee.ownerDocument==ie&&xt.contains(ie,ee)?1:g?a.call(g,N)-a.call(g,ee):0:me&4?-1:1)}),Q}xt.matches=function(_,U){return xt(_,null,null,U)},xt.matchesSelector=function(_,U){if(as(_),R&&!fi[U+" "]&&(!Y||!Y.test(U)))try{var D=G.call(_,U);if(D||b.disconnectedMatch||_.document&&_.document.nodeType!==11)return D}catch(N){fi(U,!0)}return xt(U,Q,null,[_]).length>0},xt.contains=function(_,U){return(_.ownerDocument||_)!=Q&&as(_),d.contains(_,U)},xt.attr=function(_,U){(_.ownerDocument||_)!=Q&&as(_);var D=u.attrHandle[U.toLowerCase()],N=D&&f.call(u.attrHandle,U.toLowerCase())?D(_,U,!R):void 0;return N!==void 0?N:_.getAttribute(U)},xt.error=function(_){throw new Error("Syntax error, unrecognized expression: "+_)},d.uniqueSort=function(_){var U,D=[],N=0,ee=0;if(x=!b.sortStable,g=!b.sortStable&&n.call(_,0),Ue.call(_,Ft),x){for(;U=_[ee++];)U===_[ee]&&(N=D.push(ee));for(;N--;)Pe.call(_,D[N],1)}return g=null,_},d.fn.uniqueSort=function(){return this.pushStack(d.uniqueSort(n.apply(this)))},u=d.expr={cacheLength:50,createPseudo:Yr,match:cn,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(_){return _[1]=_[1].replace(Cn,Zn),_[3]=(_[3]||_[4]||_[5]||"").replace(Cn,Zn),_[2]==="~="&&(_[3]=" "+_[3]+" "),_.slice(0,4)},CHILD:function(_){return _[1]=_[1].toLowerCase(),_[1].slice(0,3)==="nth"?(_[3]||xt.error(_[0]),_[4]=+(_[4]?_[5]+(_[6]||1):2*(_[3]==="even"||_[3]==="odd")),_[5]=+(_[7]+_[8]||_[3]==="odd")):_[3]&&xt.error(_[0]),_},PSEUDO:function(_){var U,D=!_[6]&&_[2];return cn.CHILD.test(_[0])?null:(_[3]?_[2]=_[4]||_[5]||"":D&&ln.test(D)&&(U=Ca(D,!0))&&(U=D.indexOf(")",D.length-U)-D.length)&&(_[0]=_[0].slice(0,U),_[2]=D.slice(0,U)),_.slice(0,3))}},filter:{TAG:function(_){var U=_.replace(Cn,Zn).toLowerCase();return _==="*"?function(){return!0}:function(D){return F(D,U)}},CLASS:function(_){var U=Ie[_+" "];return U||(U=new RegExp("(^|"+oe+")"+_+"("+oe+"|$)"))&&Ie(_,function(D){return U.test(typeof D.className=="string"&&D.className||typeof D.getAttribute!="undefined"&&D.getAttribute("class")||"")})},ATTR:function(_,U,D){return function(N){var ee=xt.attr(N,_);return ee==null?U==="!=":U?(ee+="",U==="="?ee===D:U==="!="?ee!==D:U==="^="?D&&ee.indexOf(D)===0:U==="*="?D&&ee.indexOf(D)>-1:U==="$="?D&&ee.slice(-D.length)===D:U==="~="?(" "+ee.replace(dt," ")+" ").indexOf(D)>-1:U==="|="?ee===D||ee.slice(0,D.length+1)===D+"-":!1):!0}},CHILD:function(_,U,D,N,ee){var me=_.slice(0,3)!=="nth",ye=_.slice(-4)!=="last",_e=U==="of-type";return N===1&&ee===0?function(Se){return!!Se.parentNode}:function(Se,et,We){var Ne,tt,ze,Xt,Mi,bi=me!==ye?"nextSibling":"previousSibling",mr=Se.parentNode,hn=_e&&Se.nodeName.toLowerCase(),Yo=!We&&!_e,Ci=!1;if(mr){if(me){for(;bi;){for(ze=Se;ze=ze[bi];)if(_e?F(ze,hn):ze.nodeType===1)return!1;Mi=bi=_==="only"&&!Mi&&"nextSibling"}return!0}if(Mi=[ye?mr.firstChild:mr.lastChild],ye&&Yo){for(tt=mr[te]||(mr[te]={}),Ne=tt[_]||[],Xt=Ne[0]===I&&Ne[1],Ci=Xt&&Ne[2],ze=Xt&&mr.childNodes[Xt];ze=++Xt&&ze&&ze[bi]||(Ci=Xt=0)||Mi.pop();)if(ze.nodeType===1&&++Ci&&ze===Se){tt[_]=[I,Xt,Ci];break}}else if(Yo&&(tt=Se[te]||(Se[te]={}),Ne=tt[_]||[],Xt=Ne[0]===I&&Ne[1],Ci=Xt),Ci===!1)for(;(ze=++Xt&&ze&&ze[bi]||(Ci=Xt=0)||Mi.pop())&&!((_e?F(ze,hn):ze.nodeType===1)&&++Ci&&(Yo&&(tt=ze[te]||(ze[te]={}),tt[_]=[I,Ci]),ze===Se)););return Ci-=ee,Ci===N||Ci%N===0&&Ci/N>=0}}},PSEUDO:function(_,U){var D,N=u.pseudos[_]||u.setFilters[_.toLowerCase()]||xt.error("unsupported pseudo: "+_);return N[te]?N(U):N.length>1?(D=[_,_,"",U],u.setFilters.hasOwnProperty(_.toLowerCase())?Yr(function(ee,me){for(var ye,_e=N(ee,U),Se=_e.length;Se--;)ye=a.call(ee,_e[Se]),ee[ye]=!(me[ye]=_e[Se])}):function(ee){return N(ee,0,D)}):N}},pseudos:{not:Yr(function(_){var U=[],D=[],N=Xu(_.replace(Xe,"$1"));return N[te]?Yr(function(ee,me,ye,_e){for(var Se,et=N(ee,null,_e,[]),We=ee.length;We--;)(Se=et[We])&&(ee[We]=!(me[We]=Se))}):function(ee,me,ye){return U[0]=ee,N(U,null,ye,D),U[0]=null,!D.pop()}}),has:Yr(function(_){return function(U){return xt(_,U).length>0}}),contains:Yr(function(_){return _=_.replace(Cn,Zn),function(U){return(U.textContent||d.text(U)).indexOf(_)>-1}}),lang:Yr(function(_){return Ra.test(_||"")||xt.error("unsupported lang: "+_),_=_.replace(Cn,Zn).toLowerCase(),function(U){var D;do if(D=R?U.lang:U.getAttribute("xml:lang")||U.getAttribute("lang"))return D=D.toLowerCase(),D===_||D.indexOf(_+"-")===0;while((U=U.parentNode)&&U.nodeType===1);return!1}}),target:function(_){var U=i.location&&i.location.hash;return U&&U.slice(1)===_.id},root:function(_){return _===C},focus:function(_){return _===R1()&&Q.hasFocus()&&!!(_.type||_.href||~_.tabIndex)},enabled:Ng(!1),disabled:Ng(!0),checked:function(_){return F(_,"input")&&!!_.checked||F(_,"option")&&!!_.selected},selected:function(_){return _.parentNode&&_.parentNode.selectedIndex,_.selected===!0},empty:function(_){for(_=_.firstChild;_;_=_.nextSibling)if(_.nodeType<6)return!1;return!0},parent:function(_){return!u.pseudos.empty(_)},header:function(_){return os.test(_.nodeName)},input:function(_){return ss.test(_.nodeName)},button:function(_){return F(_,"input")&&_.type==="button"||F(_,"button")},text:function(_){var U;return F(_,"input")&&_.type==="text"&&((U=_.getAttribute("type"))==null||U.toLowerCase()==="text")},first:Is(function(){return[0]}),last:Is(function(_,U){return[U-1]}),eq:Is(function(_,U,D){return[D<0?D+U:D]}),even:Is(function(_,U){for(var D=0;DU?N=U:N=D;--N>=0;)_.push(N);return _}),gt:Is(function(_,U,D){for(var N=D<0?D+U:D;++N1?function(U,D,N){for(var ee=_.length;ee--;)if(!_[ee](U,D,N))return!1;return!0}:_[0]}function U1(_,U,D){for(var N=0,ee=U.length;N-1&&(ye[We]=!(_e[We]=tt))}}else ze=uc(ze===_e?ze.splice(bi,ze.length):ze),ee?ee(null,_e,ze,et):v.apply(_e,ze)})}function Tu(_){for(var U,D,N,ee=_.length,me=u.relative[_[0].type],ye=me||u.relative[" "],_e=me?1:0,Se=fc(function(Ne){return Ne===U},ye,!0),et=fc(function(Ne){return a.call(U,Ne)>-1},ye,!0),We=[function(Ne,tt,ze){var Xt=!me&&(ze||tt!=m)||((U=tt).nodeType?Se(Ne,tt,ze):et(Ne,tt,ze));return U=null,Xt}];_e1&&Pu(We),_e>1&&hc(_.slice(0,_e-1).concat({value:_[_e-2].type===" "?"*":""})).replace(Xe,"$1"),D,_e0,N=_.length>0,ee=function(me,ye,_e,Se,et){var We,Ne,tt,ze=0,Xt="0",Mi=me&&[],bi=[],mr=m,hn=me||N&&u.find.TAG("*",et),Yo=I+=mr==null?1:Math.random()||.1,Ci=hn.length;for(et&&(m=ye==Q||ye||et);Xt!==Ci&&(We=hn[Xt])!=null;Xt++){if(N&&We){for(Ne=0,!ye&&We.ownerDocument!=Q&&(as(We),_e=!R);tt=_[Ne++];)if(tt(We,ye||Q,_e)){v.call(Se,We);break}et&&(I=Yo)}D&&((We=!tt&&We)&&ze--,me&&Mi.push(We))}if(ze+=Xt,D&&Xt!==ze){for(Ne=0;tt=U[Ne++];)tt(Mi,bi,ye,_e);if(me){if(ze>0)for(;Xt--;)Mi[Xt]||bi[Xt]||(bi[Xt]=de.call(Se));bi=uc(bi)}v.apply(Se,bi),et&&!me&&bi.length>0&&ze+U.length>1&&d.uniqueSort(Se)}return et&&(I=Yo,m=mr),Mi};return D?Yr(ee):ee}function Xu(_,U){var D,N=[],ee=[],me=Be[_+" "];if(!me){for(U||(U=Ca(_)),D=U.length;D--;)me=Tu(U[D]),me[te]?N.push(me):ee.push(me);me=Be(_,A1(ee,N)),me.selector=_}return me}function Bg(_,U,D,N){var ee,me,ye,_e,Se,et=typeof _=="function"&&_,We=!N&&Ca(_=et.selector||_);if(D=D||[],We.length===1){if(me=We[0]=We[0].slice(0),me.length>2&&(ye=me[0]).type==="ID"&&U.nodeType===9&&R&&u.relative[me[1].type]){if(U=(u.find.ID(ye.matches[0].replace(Cn,Zn),U)||[])[0],U)et&&(U=U.parentNode);else return D;_=_.slice(me.shift().value.length)}for(ee=cn.needsContext.test(_)?0:me.length;ee--&&(ye=me[ee],!u.relative[_e=ye.type]);)if((Se=u.find[_e])&&(N=Se(ye.matches[0].replace(Cn,Zn),wu.test(me[0].type)&&$u(U.parentNode)||U))){if(me.splice(ee,1),_=N.length&&hc(me),!_)return v.apply(D,N),D;break}}return(et||Xu(_,We))(N,U,!R,D,!U||wu.test(_)&&$u(U.parentNode)||U),D}b.sortStable=te.split("").sort(Ft).join("")===te,as(),b.sortDetached=zo(function(_){return _.compareDocumentPosition(Q.createElement("fieldset"))&1}),d.find=xt,d.expr[":"]=d.expr.pseudos,d.unique=d.uniqueSort,xt.compile=Xu,xt.select=Bg,xt.setDocument=as,xt.tokenize=Ca,xt.escape=d.escapeSelector,xt.getText=d.text,xt.isXML=d.isXMLDoc,xt.selectors=d.expr,xt.support=d.support,xt.uniqueSort=d.uniqueSort})();var ue=function(h,u,m){for(var g=[],x=m!==void 0;(h=h[u])&&h.nodeType!==9;)if(h.nodeType===1){if(x&&d(h).is(m))break;g.push(h)}return g},De=function(h,u){for(var m=[];h;h=h.nextSibling)h.nodeType===1&&h!==u&&m.push(h);return m},Ge=d.expr.match.needsContext,wt=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function je(h,u,m){return S(u)?d.grep(h,function(g,x){return!!u.call(g,x,g)!==m}):u.nodeType?d.grep(h,function(g){return g===u!==m}):typeof u!="string"?d.grep(h,function(g){return a.call(u,g)>-1!==m}):d.filter(u,h,m)}d.filter=function(h,u,m){var g=u[0];return m&&(h=":not("+h+")"),u.length===1&&g.nodeType===1?d.find.matchesSelector(g,h)?[g]:[]:d.find.matches(h,d.grep(u,function(x){return x.nodeType===1}))},d.fn.extend({find:function(h){var u,m,g=this.length,x=this;if(typeof h!="string")return this.pushStack(d(h).filter(function(){for(u=0;u1?d.uniqueSort(m):m},filter:function(h){return this.pushStack(je(this,h||[],!1))},not:function(h){return this.pushStack(je(this,h||[],!0))},is:function(h){return!!je(this,typeof h=="string"&&Ge.test(h)?d(h):h||[],!1).length}});var ei,Hi=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,ar=d.fn.init=function(h,u,m){var g,x;if(!h)return this;if(m=m||ei,typeof h=="string")if(h[0]==="<"&&h[h.length-1]===">"&&h.length>=3?g=[null,h,null]:g=Hi.exec(h),g&&(g[1]||!u))if(g[1]){if(u=u instanceof d?u[0]:u,d.merge(this,d.parseHTML(g[1],u&&u.nodeType?u.ownerDocument||u:X,!0)),wt.test(g[1])&&d.isPlainObject(u))for(g in u)S(this[g])?this[g](u[g]):this.attr(g,u[g]);return this}else return x=X.getElementById(g[2]),x&&(this[0]=x,this.length=1),this;else return!u||u.jquery?(u||m).find(h):this.constructor(u).find(h);else{if(h.nodeType)return this[0]=h,this.length=1,this;if(S(h))return m.ready!==void 0?m.ready(h):h(d)}return d.makeArray(h,this)};ar.prototype=d.fn,ei=d(X);var tn=/^(?:parents|prev(?:Until|All))/,Fn={children:!0,contents:!0,next:!0,prev:!0};d.fn.extend({has:function(h){var u=d(h,this),m=u.length;return this.filter(function(){for(var g=0;g-1:m.nodeType===1&&d.find.matchesSelector(m,h))){v.push(m);break}}return this.pushStack(v.length>1?d.uniqueSort(v):v)},index:function(h){return h?typeof h=="string"?a.call(d(h),this[0]):a.call(this,h.jquery?h[0]:h):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(h,u){return this.pushStack(d.uniqueSort(d.merge(this.get(),d(h,u))))},addBack:function(h){return this.add(h==null?this.prevObject:this.prevObject.filter(h))}});function Co(h,u){for(;(h=h[u])&&h.nodeType!==1;);return h}d.each({parent:function(h){var u=h.parentNode;return u&&u.nodeType!==11?u:null},parents:function(h){return ue(h,"parentNode")},parentsUntil:function(h,u,m){return ue(h,"parentNode",m)},next:function(h){return Co(h,"nextSibling")},prev:function(h){return Co(h,"previousSibling")},nextAll:function(h){return ue(h,"nextSibling")},prevAll:function(h){return ue(h,"previousSibling")},nextUntil:function(h,u,m){return ue(h,"nextSibling",m)},prevUntil:function(h,u,m){return ue(h,"previousSibling",m)},siblings:function(h){return De((h.parentNode||{}).firstChild,h)},children:function(h){return De(h.firstChild)},contents:function(h){return h.contentDocument!=null&&r(h.contentDocument)?h.contentDocument:(F(h,"template")&&(h=h.content||h),d.merge([],h.childNodes))}},function(h,u){d.fn[h]=function(m,g){var x=d.map(this,u,m);return h.slice(-5)!=="Until"&&(g=m),g&&typeof g=="string"&&(x=d.filter(g,x)),this.length>1&&(Fn[h]||d.uniqueSort(x),tn.test(h)&&x.reverse()),this.pushStack(x)}});var Pi=/[^\x20\t\r\n\f]+/g;function $a(h){var u={};return d.each(h.match(Pi)||[],function(m,g){u[g]=!0}),u}d.Callbacks=function(h){h=typeof h=="string"?$a(h):d.extend({},h);var u,m,g,x,v=[],Q=[],C=-1,R=function(){for(x=x||h.once,g=u=!0;Q.length;C=-1)for(m=Q.shift();++C-1;)v.splice(I,1),I<=C&&C--}),this},has:function(G){return G?d.inArray(G,v)>-1:v.length>0},empty:function(){return v&&(v=[]),this},disable:function(){return x=Q=[],v=m="",this},disabled:function(){return!v},lock:function(){return x=Q=[],!m&&!u&&(v=m=""),this},locked:function(){return!!x},fireWith:function(G,te){return x||(te=te||[],te=[G,te.slice?te.slice():te],Q.push(te),u||R()),this},fire:function(){return Y.fireWith(this,arguments),this},fired:function(){return!!g}};return Y};function Zr(h){return h}function gt(h){throw h}function Hn(h,u,m,g){var x;try{h&&S(x=h.promise)?x.call(h).done(u).fail(m):h&&S(x=h.then)?x.call(h,u,m):u.apply(void 0,[h].slice(g))}catch(v){m.apply(void 0,[v])}}d.extend({Deferred:function(h){var u=[["notify","progress",d.Callbacks("memory"),d.Callbacks("memory"),2],["resolve","done",d.Callbacks("once memory"),d.Callbacks("once memory"),0,"resolved"],["reject","fail",d.Callbacks("once memory"),d.Callbacks("once memory"),1,"rejected"]],m="pending",g={state:function(){return m},always:function(){return x.done(arguments).fail(arguments),this},catch:function(v){return g.then(null,v)},pipe:function(){var v=arguments;return d.Deferred(function(Q){d.each(u,function(C,R){var Y=S(v[R[4]])&&v[R[4]];x[R[1]](function(){var G=Y&&Y.apply(this,arguments);G&&S(G.promise)?G.promise().progress(Q.notify).done(Q.resolve).fail(Q.reject):Q[R[0]+"With"](this,Y?[G]:arguments)})}),v=null}).promise()},then:function(v,Q,C){var R=0;function Y(G,te,I,ce){return function(){var Ie=this,ht=arguments,Be=function(){var Ft,on;if(!(G=R&&(I!==gt&&(Ie=void 0,ht=[Ft]),te.rejectWith(Ie,ht))}};G?fi():(d.Deferred.getErrorHook?fi.error=d.Deferred.getErrorHook():d.Deferred.getStackHook&&(fi.error=d.Deferred.getStackHook()),i.setTimeout(fi))}}return d.Deferred(function(G){u[0][3].add(Y(0,G,S(C)?C:Zr,G.notifyWith)),u[1][3].add(Y(0,G,S(v)?v:Zr)),u[2][3].add(Y(0,G,S(Q)?Q:gt))}).promise()},promise:function(v){return v!=null?d.extend(v,g):g}},x={};return d.each(u,function(v,Q){var C=Q[2],R=Q[5];g[Q[1]]=C.add,R&&C.add(function(){m=R},u[3-v][2].disable,u[3-v][3].disable,u[0][2].lock,u[0][3].lock),C.add(Q[3].fire),x[Q[0]]=function(){return x[Q[0]+"With"](this===x?void 0:this,arguments),this},x[Q[0]+"With"]=C.fireWith}),g.promise(x),h&&h.call(x,x),x},when:function(h){var u=arguments.length,m=u,g=Array(m),x=n.call(arguments),v=d.Deferred(),Q=function(C){return function(R){g[C]=this,x[C]=arguments.length>1?n.call(arguments):R,--u||v.resolveWith(g,x)}};if(u<=1&&(Hn(h,v.done(Q(m)).resolve,v.reject,!u),v.state()==="pending"||S(x[m]&&x[m].then)))return v.then();for(;m--;)Hn(x[m],Q(m),v.reject);return v.promise()}});var yt=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;d.Deferred.exceptionHook=function(h,u){i.console&&i.console.warn&&h&&yt.test(h.name)&&i.console.warn("jQuery.Deferred exception: "+h.message,h.stack,u)},d.readyException=function(h){i.setTimeout(function(){throw h})};var Qn=d.Deferred();d.fn.ready=function(h){return Qn.then(h).catch(function(u){d.readyException(u)}),this},d.extend({isReady:!1,readyWait:1,ready:function(h){(h===!0?--d.readyWait:d.isReady)||(d.isReady=!0,!(h!==!0&&--d.readyWait>0)&&Qn.resolveWith(X,[d]))}}),d.ready.then=Qn.then;function nt(){X.removeEventListener("DOMContentLoaded",nt),i.removeEventListener("load",nt),d.ready()}X.readyState==="complete"||X.readyState!=="loading"&&!X.documentElement.doScroll?i.setTimeout(d.ready):(X.addEventListener("DOMContentLoaded",nt),i.addEventListener("load",nt));var ai=function(h,u,m,g,x,v,Q){var C=0,R=h.length,Y=m==null;if(q(m)==="object"){x=!0;for(C in m)ai(h,u,C,m[C],!0,v,Q)}else if(g!==void 0&&(x=!0,S(g)||(Q=!0),Y&&(Q?(u.call(h,g),u=null):(Y=u,u=function(G,te,I){return Y.call(d(G),I)})),u))for(;C1,null,!0)},removeData:function(h){return this.each(function(){Tt.remove(this,h)})}}),d.extend({queue:function(h,u,m){var g;if(h)return u=(u||"fx")+"queue",g=we.get(h,u),m&&(!g||Array.isArray(m)?g=we.access(h,u,d.makeArray(m)):g.push(m)),g||[]},dequeue:function(h,u){u=u||"fx";var m=d.queue(h,u),g=m.length,x=m.shift(),v=d._queueHooks(h,u),Q=function(){d.dequeue(h,u)};x==="inprogress"&&(x=m.shift(),g--),x&&(u==="fx"&&m.unshift("inprogress"),delete v.stop,x.call(h,Q,v)),!g&&v&&v.empty.fire()},_queueHooks:function(h,u){var m=u+"queueHooks";return we.get(h,m)||we.access(h,m,{empty:d.Callbacks("once memory").add(function(){we.remove(h,[u+"queue",m])})})}}),d.fn.extend({queue:function(h,u){var m=2;return typeof h!="string"&&(u=h,h="fx",m--),arguments.length\x20\t\r\n\f]*)/i,Us=/^$|^module$|\/(?:java|ecma)script/i;(function(){var h=X.createDocumentFragment(),u=h.appendChild(X.createElement("div")),m=X.createElement("input");m.setAttribute("type","radio"),m.setAttribute("checked","checked"),m.setAttribute("name","t"),u.appendChild(m),b.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,u.innerHTML="",b.noCloneChecked=!!u.cloneNode(!0).lastChild.defaultValue,u.innerHTML="",b.option=!!u.lastChild})();var Gt={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};Gt.tbody=Gt.tfoot=Gt.colgroup=Gt.caption=Gt.thead,Gt.th=Gt.td,b.option||(Gt.optgroup=Gt.option=[1,""]);function Bt(h,u){var m;return typeof h.getElementsByTagName!="undefined"?m=h.getElementsByTagName(u||"*"):typeof h.querySelectorAll!="undefined"?m=h.querySelectorAll(u||"*"):m=[],u===void 0||u&&F(h,u)?d.merge([h],m):m}function nn(h,u){for(var m=0,g=h.length;m-1){x&&x.push(v);continue}if(Y=hr(v),Q=Bt(te.appendChild(v),"script"),Y&&nn(Q),m)for(G=0;v=Q[G++];)Us.test(v.type||"")&&m.push(v)}return te}var zr=/^([^.]*)(?:\.(.+)|)/;function fr(){return!0}function ur(){return!1}function As(h,u,m,g,x,v){var Q,C;if(typeof u=="object"){typeof m!="string"&&(g=g||m,m=void 0);for(C in u)As(h,C,m,g,u[C],v);return h}if(g==null&&x==null?(x=m,g=m=void 0):x==null&&(typeof m=="string"?(x=g,g=void 0):(x=g,g=m,m=void 0)),x===!1)x=ur;else if(!x)return h;return v===1&&(Q=x,x=function(R){return d().off(R),Q.apply(this,arguments)},x.guid=Q.guid||(Q.guid=d.guid++)),h.each(function(){d.event.add(this,u,x,g,m)})}d.event={global:{},add:function(h,u,m,g,x){var v,Q,C,R,Y,G,te,I,ce,Ie,ht,Be=we.get(h);if(lr(h))for(m.handler&&(v=m,m=v.handler,x=v.selector),x&&d.find.matchesSelector(Xi,x),m.guid||(m.guid=d.guid++),(R=Be.events)||(R=Be.events=Object.create(null)),(Q=Be.handle)||(Q=Be.handle=function(fi){return typeof d!="undefined"&&d.event.triggered!==fi.type?d.event.dispatch.apply(h,arguments):void 0}),u=(u||"").match(Pi)||[""],Y=u.length;Y--;)C=zr.exec(u[Y])||[],ce=ht=C[1],Ie=(C[2]||"").split(".").sort(),ce&&(te=d.event.special[ce]||{},ce=(x?te.delegateType:te.bindType)||ce,te=d.event.special[ce]||{},G=d.extend({type:ce,origType:ht,data:g,handler:m,guid:m.guid,selector:x,needsContext:x&&d.expr.match.needsContext.test(x),namespace:Ie.join(".")},v),(I=R[ce])||(I=R[ce]=[],I.delegateCount=0,(!te.setup||te.setup.call(h,g,Ie,Q)===!1)&&h.addEventListener&&h.addEventListener(ce,Q)),te.add&&(te.add.call(h,G),G.handler.guid||(G.handler.guid=m.guid)),x?I.splice(I.delegateCount++,0,G):I.push(G),d.event.global[ce]=!0)},remove:function(h,u,m,g,x){var v,Q,C,R,Y,G,te,I,ce,Ie,ht,Be=we.hasData(h)&&we.get(h);if(!(!Be||!(R=Be.events))){for(u=(u||"").match(Pi)||[""],Y=u.length;Y--;){if(C=zr.exec(u[Y])||[],ce=ht=C[1],Ie=(C[2]||"").split(".").sort(),!ce){for(ce in R)d.event.remove(h,ce+u[Y],m,g,!0);continue}for(te=d.event.special[ce]||{},ce=(g?te.delegateType:te.bindType)||ce,I=R[ce]||[],C=C[2]&&new RegExp("(^|\\.)"+Ie.join("\\.(?:.*\\.|)")+"(\\.|$)"),Q=v=I.length;v--;)G=I[v],(x||ht===G.origType)&&(!m||m.guid===G.guid)&&(!C||C.test(G.namespace))&&(!g||g===G.selector||g==="**"&&G.selector)&&(I.splice(v,1),G.selector&&I.delegateCount--,te.remove&&te.remove.call(h,G));Q&&!I.length&&((!te.teardown||te.teardown.call(h,Ie,Be.handle)===!1)&&d.removeEvent(h,ce,Be.handle),delete R[ce])}d.isEmptyObject(R)&&we.remove(h,"handle events")}},dispatch:function(h){var u,m,g,x,v,Q,C=new Array(arguments.length),R=d.event.fix(h),Y=(we.get(this,"events")||Object.create(null))[R.type]||[],G=d.event.special[R.type]||{};for(C[0]=R,u=1;u=1)){for(;Y!==this;Y=Y.parentNode||this)if(Y.nodeType===1&&!(h.type==="click"&&Y.disabled===!0)){for(v=[],Q={},m=0;m-1:d.find(x,this,null,[Y]).length),Q[x]&&v.push(g);v.length&&C.push({elem:Y,handlers:v})}}return Y=this,R\s*$/g;function Zo(h,u){return F(h,"table")&&F(u.nodeType!==11?u:u.firstChild,"tr")&&d(h).children("tbody")[0]||h}function Tn(h){return h.type=(h.getAttribute("type")!==null)+"/"+h.type,h}function Pa(h){return(h.type||"").slice(0,5)==="true/"?h.type=h.type.slice(5):h.removeAttribute("type"),h}function Uo(h,u){var m,g,x,v,Q,C,R;if(u.nodeType===1){if(we.hasData(h)&&(v=we.get(h),R=v.events,R)){we.remove(u,"handle events");for(x in R)for(m=0,g=R[x].length;m1&&typeof ce=="string"&&!b.checkClone&&zs.test(ce))return h.each(function(ht){var Be=h.eq(ht);Ie&&(u[0]=ce.call(this,ht,Be.html())),Ri(Be,u,m,g)});if(te&&(x=_i(u,h[0].ownerDocument,!1,h,g),v=x.firstChild,x.childNodes.length===1&&(x=v),v||g)){for(Q=d.map(Bt(x,"script"),Tn),C=Q.length;G0&&nn(Q,!R&&Bt(h,"script")),C},cleanData:function(h){for(var u,m,g,x=d.event.special,v=0;(m=h[v])!==void 0;v++)if(lr(m)){if(u=m[we.expando]){if(u.events)for(g in u.events)x[g]?d.event.remove(m,g):d.removeEvent(m,g,u.handle);m[we.expando]=void 0}m[Tt.expando]&&(m[Tt.expando]=void 0)}}}),d.fn.extend({detach:function(h){return Ao(this,h,!0)},remove:function(h){return Ao(this,h)},text:function(h){return ai(this,function(u){return u===void 0?d.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=u)})},null,h,arguments.length)},append:function(){return Ri(this,arguments,function(h){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var u=Zo(this,h);u.appendChild(h)}})},prepend:function(){return Ri(this,arguments,function(h){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var u=Zo(this,h);u.insertBefore(h,u.firstChild)}})},before:function(){return Ri(this,arguments,function(h){this.parentNode&&this.parentNode.insertBefore(h,this)})},after:function(){return Ri(this,arguments,function(h){this.parentNode&&this.parentNode.insertBefore(h,this.nextSibling)})},empty:function(){for(var h,u=0;(h=this[u])!=null;u++)h.nodeType===1&&(d.cleanData(Bt(h,!1)),h.textContent="");return this},clone:function(h,u){return h=h==null?!1:h,u=u==null?h:u,this.map(function(){return d.clone(this,h,u)})},html:function(h){return ai(this,function(u){var m=this[0]||{},g=0,x=this.length;if(u===void 0&&m.nodeType===1)return m.innerHTML;if(typeof u=="string"&&!Es.test(u)&&!Gt[(Zs.exec(u)||["",""])[1].toLowerCase()]){u=d.htmlPrefilter(u);try{for(;g=0&&(R+=Math.max(0,Math.ceil(h["offset"+u[0].toUpperCase()+u.slice(1)]-v-R-C-.5))||0),R+Y}function ns(h,u,m){var g=_n(h),x=!b.boxSizingReliable()||m,v=x&&d.css(h,"boxSizing",!1,g)==="border-box",Q=v,C=Rn(h,u,g),R="offset"+u[0].toUpperCase()+u.slice(1);if(rs.test(C)){if(!m)return C;C="auto"}return(!b.boxSizingReliable()&&v||!b.reliableTrDimensions()&&F(h,"tr")||C==="auto"||!parseFloat(C)&&d.css(h,"display",!1,g)==="inline")&&h.getClientRects().length&&(v=d.css(h,"boxSizing",!1,g)==="border-box",Q=R in h,Q&&(C=h[R])),C=parseFloat(C)||0,C+dr(h,u,m||(v?"border":"content"),Q,g,C)+"px"}d.extend({cssHooks:{opacity:{get:function(h,u){if(u){var m=Rn(h,"opacity");return m===""?"1":m}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(h,u,m,g){if(!(!h||h.nodeType===3||h.nodeType===8||!h.style)){var x,v,Q,C=ti(u),R=Xn.test(u),Y=h.style;if(R||(u=Ws(C)),Q=d.cssHooks[u]||d.cssHooks[C],m!==void 0){if(v=typeof m,v==="string"&&(x=Ti.exec(m))&&x[1]&&(m=ts(h,u,x),v="number"),m==null||m!==m)return;v==="number"&&!R&&(m+=x&&x[3]||(d.cssNumber[C]?"":"px")),!b.clearCloneStyle&&m===""&&u.indexOf("background")===0&&(Y[u]="inherit"),(!Q||!("set"in Q)||(m=Q.set(h,m,g))!==void 0)&&(R?Y.setProperty(u,m):Y[u]=m)}else return Q&&"get"in Q&&(x=Q.get(h,!1,g))!==void 0?x:Y[u]}},css:function(h,u,m,g){var x,v,Q,C=ti(u),R=Xn.test(u);return R||(u=Ws(C)),Q=d.cssHooks[u]||d.cssHooks[C],Q&&"get"in Q&&(x=Q.get(h,!0,m)),x===void 0&&(x=Rn(h,u,g)),x==="normal"&&u in Ms&&(x=Ms[u]),m===""||m?(v=parseFloat(x),m===!0||isFinite(v)?v||0:x):x}}),d.each(["height","width"],function(h,u){d.cssHooks[u]={get:function(m,g,x){if(g)return Or.test(d.css(m,"display"))&&(!m.getClientRects().length||!m.getBoundingClientRect().width)?js(m,Vs,function(){return ns(m,u,x)}):ns(m,u,x)},set:function(m,g,x){var v,Q=_n(m),C=!b.scrollboxSize()&&Q.position==="absolute",R=C||x,Y=R&&d.css(m,"boxSizing",!1,Q)==="border-box",G=x?dr(m,u,x,Y,Q):0;return Y&&C&&(G-=Math.ceil(m["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(Q[u])-dr(m,u,"border",!1,Q)-.5)),G&&(v=Ti.exec(g))&&(v[3]||"px")!=="px"&&(m.style[u]=g,g=d.css(m,u)),qs(m,g,G)}}}),d.cssHooks.marginLeft=Eo(b.reliableMarginLeft,function(h,u){if(u)return(parseFloat(Rn(h,"marginLeft"))||h.getBoundingClientRect().left-js(h,{marginLeft:0},function(){return h.getBoundingClientRect().left}))+"px"}),d.each({margin:"",padding:"",border:"Width"},function(h,u){d.cssHooks[h+u]={expand:function(m){for(var g=0,x={},v=typeof m=="string"?m.split(" "):[m];g<4;g++)x[h+li[g]+u]=v[g]||v[g-2]||v[0];return x}},h!=="margin"&&(d.cssHooks[h+u].set=qs)}),d.fn.extend({css:function(h,u){return ai(this,function(m,g,x){var v,Q,C={},R=0;if(Array.isArray(g)){for(v=_n(m),Q=g.length;R1)}});function zt(h,u,m,g,x){return new zt.prototype.init(h,u,m,g,x)}d.Tween=zt,zt.prototype={constructor:zt,init:function(h,u,m,g,x,v){this.elem=h,this.prop=m,this.easing=x||d.easing._default,this.options=u,this.start=this.now=this.cur(),this.end=g,this.unit=v||(d.cssNumber[m]?"":"px")},cur:function(){var h=zt.propHooks[this.prop];return h&&h.get?h.get(this):zt.propHooks._default.get(this)},run:function(h){var u,m=zt.propHooks[this.prop];return this.options.duration?this.pos=u=d.easing[this.easing](h,this.options.duration*h,0,1,this.options.duration):this.pos=u=h,this.now=(this.end-this.start)*u+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),m&&m.set?m.set(this):zt.propHooks._default.set(this),this}},zt.prototype.init.prototype=zt.prototype,zt.propHooks={_default:{get:function(h){var u;return h.elem.nodeType!==1||h.elem[h.prop]!=null&&h.elem.style[h.prop]==null?h.elem[h.prop]:(u=d.css(h.elem,h.prop,""),!u||u==="auto"?0:u)},set:function(h){d.fx.step[h.prop]?d.fx.step[h.prop](h):h.elem.nodeType===1&&(d.cssHooks[h.prop]||h.elem.style[Ws(h.prop)]!=null)?d.style(h.elem,h.prop,h.now+h.unit):h.elem[h.prop]=h.now}}},zt.propHooks.scrollTop=zt.propHooks.scrollLeft={set:function(h){h.elem.nodeType&&h.elem.parentNode&&(h.elem[h.prop]=h.now)}},d.easing={linear:function(h){return h},swing:function(h){return .5-Math.cos(h*Math.PI)/2},_default:"swing"},d.fx=zt.prototype.init,d.fx.step={};var w,Z,T=/^(?:toggle|show|hide)$/,z=/queueHooks$/;function W(){Z&&(X.hidden===!1&&i.requestAnimationFrame?i.requestAnimationFrame(W):i.setTimeout(W,d.fx.interval),d.fx.tick())}function E(){return i.setTimeout(function(){w=void 0}),w=Date.now()}function J(h,u){var m,g=0,x={height:h};for(u=u?1:0;g<4;g+=2-u)m=li[g],x["margin"+m]=x["padding"+m]=h;return u&&(x.opacity=x.width=h),x}function se(h,u,m){for(var g,x=(le.tweeners[u]||[]).concat(le.tweeners["*"]),v=0,Q=x.length;v1)},removeAttr:function(h){return this.each(function(){d.removeAttr(this,h)})}}),d.extend({attr:function(h,u,m){var g,x,v=h.nodeType;if(!(v===3||v===8||v===2)){if(typeof h.getAttribute=="undefined")return d.prop(h,u,m);if((v!==1||!d.isXMLDoc(h))&&(x=d.attrHooks[u.toLowerCase()]||(d.expr.match.bool.test(u)?ke:void 0)),m!==void 0){if(m===null){d.removeAttr(h,u);return}return x&&"set"in x&&(g=x.set(h,m,u))!==void 0?g:(h.setAttribute(u,m+""),m)}return x&&"get"in x&&(g=x.get(h,u))!==null?g:(g=d.find.attr(h,u),g==null?void 0:g)}},attrHooks:{type:{set:function(h,u){if(!b.radioValue&&u==="radio"&&F(h,"input")){var m=h.value;return h.setAttribute("type",u),m&&(h.value=m),u}}}},removeAttr:function(h,u){var m,g=0,x=u&&u.match(Pi);if(x&&h.nodeType===1)for(;m=x[g++];)h.removeAttribute(m)}}),ke={set:function(h,u,m){return u===!1?d.removeAttr(h,m):h.setAttribute(m,m),m}},d.each(d.expr.match.bool.source.match(/\w+/g),function(h,u){var m=Me[u]||d.find.attr;Me[u]=function(g,x,v){var Q,C,R=x.toLowerCase();return v||(C=Me[R],Me[R]=Q,Q=m(g,x,v)!=null?R:null,Me[R]=C),Q}});var Je=/^(?:input|select|textarea|button)$/i,lt=/^(?:a|area)$/i;d.fn.extend({prop:function(h,u){return ai(this,d.prop,h,u,arguments.length>1)},removeProp:function(h){return this.each(function(){delete this[d.propFix[h]||h]})}}),d.extend({prop:function(h,u,m){var g,x,v=h.nodeType;if(!(v===3||v===8||v===2))return(v!==1||!d.isXMLDoc(h))&&(u=d.propFix[u]||u,x=d.propHooks[u]),m!==void 0?x&&"set"in x&&(g=x.set(h,m,u))!==void 0?g:h[u]=m:x&&"get"in x&&(g=x.get(h,u))!==null?g:h[u]},propHooks:{tabIndex:{get:function(h){var u=d.find.attr(h,"tabindex");return u?parseInt(u,10):Je.test(h.nodeName)||lt.test(h.nodeName)&&h.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),b.optSelected||(d.propHooks.selected={get:function(h){var u=h.parentNode;return u&&u.parentNode&&u.parentNode.selectedIndex,null},set:function(h){var u=h.parentNode;u&&(u.selectedIndex,u.parentNode&&u.parentNode.selectedIndex)}}),d.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){d.propFix[this.toLowerCase()]=this});function re(h){var u=h.match(Pi)||[];return u.join(" ")}function k(h){return h.getAttribute&&h.getAttribute("class")||""}function V(h){return Array.isArray(h)?h:typeof h=="string"?h.match(Pi)||[]:[]}d.fn.extend({addClass:function(h){var u,m,g,x,v,Q;return S(h)?this.each(function(C){d(this).addClass(h.call(this,C,k(this)))}):(u=V(h),u.length?this.each(function(){if(g=k(this),m=this.nodeType===1&&" "+re(g)+" ",m){for(v=0;v-1;)m=m.replace(" "+x+" "," ");Q=re(m),g!==Q&&this.setAttribute("class",Q)}}):this):this.attr("class","")},toggleClass:function(h,u){var m,g,x,v,Q=typeof h,C=Q==="string"||Array.isArray(h);return S(h)?this.each(function(R){d(this).toggleClass(h.call(this,R,k(this),u),u)}):typeof u=="boolean"&&C?u?this.addClass(h):this.removeClass(h):(m=V(h),this.each(function(){if(C)for(v=d(this),x=0;x-1)return!0;return!1}});var ne=/\r/g;d.fn.extend({val:function(h){var u,m,g,x=this[0];return arguments.length?(g=S(h),this.each(function(v){var Q;this.nodeType===1&&(g?Q=h.call(this,v,d(this).val()):Q=h,Q==null?Q="":typeof Q=="number"?Q+="":Array.isArray(Q)&&(Q=d.map(Q,function(C){return C==null?"":C+""})),u=d.valHooks[this.type]||d.valHooks[this.nodeName.toLowerCase()],(!u||!("set"in u)||u.set(this,Q,"value")===void 0)&&(this.value=Q))})):x?(u=d.valHooks[x.type]||d.valHooks[x.nodeName.toLowerCase()],u&&"get"in u&&(m=u.get(x,"value"))!==void 0?m:(m=x.value,typeof m=="string"?m.replace(ne,""):m==null?"":m)):void 0}}),d.extend({valHooks:{option:{get:function(h){var u=d.find.attr(h,"value");return u!=null?u:re(d.text(h))}},select:{get:function(h){var u,m,g,x=h.options,v=h.selectedIndex,Q=h.type==="select-one",C=Q?null:[],R=Q?v+1:x.length;for(v<0?g=R:g=Q?v:0;g-1)&&(m=!0);return m||(h.selectedIndex=-1),v}}}}),d.each(["radio","checkbox"],function(){d.valHooks[this]={set:function(h,u){if(Array.isArray(u))return h.checked=d.inArray(d(h).val(),u)>-1}},b.checkOn||(d.valHooks[this].get=function(h){return h.getAttribute("value")===null?"on":h.value})});var Qe=i.location,Re={guid:Date.now()},Le=/\?/;d.parseXML=function(h){var u,m;if(!h||typeof h!="string")return null;try{u=new i.DOMParser().parseFromString(h,"text/xml")}catch(g){}return m=u&&u.getElementsByTagName("parsererror")[0],(!u||m)&&d.error("Invalid XML: "+(m?d.map(m.childNodes,function(g){return g.textContent}).join(` +`):h)),u};var mt=/^(?:focusinfocus|focusoutblur)$/,St=function(h){h.stopPropagation()};d.extend(d.event,{trigger:function(h,u,m,g){var x,v,Q,C,R,Y,G,te,I=[m||X],ce=f.call(h,"type")?h.type:h,Ie=f.call(h,"namespace")?h.namespace.split("."):[];if(v=te=Q=m=m||X,!(m.nodeType===3||m.nodeType===8)&&!mt.test(ce+d.event.triggered)&&(ce.indexOf(".")>-1&&(Ie=ce.split("."),ce=Ie.shift(),Ie.sort()),R=ce.indexOf(":")<0&&"on"+ce,h=h[d.expando]?h:new d.Event(ce,typeof h=="object"&&h),h.isTrigger=g?2:3,h.namespace=Ie.join("."),h.rnamespace=h.namespace?new RegExp("(^|\\.)"+Ie.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h.result=void 0,h.target||(h.target=m),u=u==null?[h]:d.makeArray(u,[h]),G=d.event.special[ce]||{},!(!g&&G.trigger&&G.trigger.apply(m,u)===!1))){if(!g&&!G.noBubble&&!P(m)){for(C=G.delegateType||ce,mt.test(C+ce)||(v=v.parentNode);v;v=v.parentNode)I.push(v),Q=v;Q===(m.ownerDocument||X)&&I.push(Q.defaultView||Q.parentWindow||i)}for(x=0;(v=I[x++])&&!h.isPropagationStopped();)te=v,h.type=x>1?C:G.bindType||ce,Y=(we.get(v,"events")||Object.create(null))[h.type]&&we.get(v,"handle"),Y&&Y.apply(v,u),Y=R&&v[R],Y&&Y.apply&&lr(v)&&(h.result=Y.apply(v,u),h.result===!1&&h.preventDefault());return h.type=ce,!g&&!h.isDefaultPrevented()&&(!G._default||G._default.apply(I.pop(),u)===!1)&&lr(m)&&R&&S(m[ce])&&!P(m)&&(Q=m[R],Q&&(m[R]=null),d.event.triggered=ce,h.isPropagationStopped()&&te.addEventListener(ce,St),m[ce](),h.isPropagationStopped()&&te.removeEventListener(ce,St),d.event.triggered=void 0,Q&&(m[R]=Q)),h.result}},simulate:function(h,u,m){var g=d.extend(new d.Event,m,{type:h,isSimulated:!0});d.event.trigger(g,null,u)}}),d.fn.extend({trigger:function(h,u){return this.each(function(){d.event.trigger(h,u,this)})},triggerHandler:function(h,u){var m=this[0];if(m)return d.event.trigger(h,u,m,!0)}});var ri=/\[\]$/,Wt=/\r?\n/g,Ta=/^(?:submit|button|image|reset|file)$/i,hi=/^(?:input|select|textarea|keygen)/i;function bu(h,u,m,g){var x;if(Array.isArray(u))d.each(u,function(v,Q){m||ri.test(h)?g(h,Q):bu(h+"["+(typeof Q=="object"&&Q!=null?v:"")+"]",Q,m,g)});else if(!m&&q(u)==="object")for(x in u)bu(h+"["+x+"]",u[x],m,g);else g(h,u)}d.param=function(h,u){var m,g=[],x=function(v,Q){var C=S(Q)?Q():Q;g[g.length]=encodeURIComponent(v)+"="+encodeURIComponent(C==null?"":C)};if(h==null)return"";if(Array.isArray(h)||h.jquery&&!d.isPlainObject(h))d.each(h,function(){x(this.name,this.value)});else for(m in h)bu(m,h[m],u,x);return g.join("&")},d.fn.extend({serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var h=d.prop(this,"elements");return h?d.makeArray(h):this}).filter(function(){var h=this.type;return this.name&&!d(this).is(":disabled")&&hi.test(this.nodeName)&&!Ta.test(h)&&(this.checked||!ii.test(h))}).map(function(h,u){var m=d(this).val();return m==null?null:Array.isArray(m)?d.map(m,function(g){return{name:u.name,value:g.replace(Wt,`\r `)}}):{name:u.name,value:m.replace(Wt,`\r -`)}}).get()}});var f1=/%20/g,u1=/#.*$/,O1=/([?&])_=[^&]*/,d1=/^(.*?):[ \t]*([^\r\n]*)$/mg,p1=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,m1=/^(?:GET|HEAD)$/,g1=/^\/\//,Lg={},gu={},Wg="*/".concat("*"),bu=X.createElement("a");bu.href=Qe.href;function Vg(h){return function(u,m){typeof u!="string"&&(m=u,u="*");var g,x=0,v=u.toLowerCase().match(Pi)||[];if(S(m))for(;g=v[x++];)g[0]==="+"?(g=g.slice(1)||"*",(h[g]=h[g]||[]).unshift(m)):(h[g]=h[g]||[]).push(m)}}function Mg(h,u,m,g){var x={},v=h===gu;function Q(C){var R;return x[C]=!0,d.each(h[C]||[],function(Y,G){var te=G(u,m,g);if(typeof te=="string"&&!v&&!x[te])return u.dataTypes.unshift(te),Q(te),!1;if(v)return!(R=te)}),R}return Q(u.dataTypes[0])||!x["*"]&&Q("*")}function xu(h,u){var m,g,x=d.ajaxSettings.flatOptions||{};for(m in u)u[m]!==void 0&&((x[m]?h:g||(g={}))[m]=u[m]);return g&&d.extend(!0,h,g),h}function b1(h,u,m){for(var g,x,v,Q,C=h.contents,R=h.dataTypes;R[0]==="*";)R.shift(),g===void 0&&(g=h.mimeType||u.getResponseHeader("Content-Type"));if(g){for(x in C)if(C[x]&&C[x].test(g)){R.unshift(x);break}}if(R[0]in m)v=R[0];else{for(x in m){if(!R[0]||h.converters[x+" "+R[0]]){v=x;break}Q||(Q=x)}v=v||Q}if(v)return v!==R[0]&&R.unshift(v),m[v]}function x1(h,u,m,g){var x,v,Q,C,R,Y={},G=h.dataTypes.slice();if(G[1])for(Q in h.converters)Y[Q.toLowerCase()]=h.converters[Q];for(v=G.shift();v;)if(h.responseFields[v]&&(m[h.responseFields[v]]=u),!R&&g&&h.dataFilter&&(u=h.dataFilter(u,h.dataType)),R=v,v=G.shift(),v){if(v==="*")v=R;else if(R!=="*"&&R!==v){if(Q=Y[R+" "+v]||Y["* "+v],!Q){for(x in Y)if(C=x.split(" "),C[1]===v&&(Q=Y[R+" "+C[0]]||Y["* "+C[0]],Q)){Q===!0?Q=Y[x]:Y[x]!==!0&&(v=C[0],G.unshift(C[1]));break}}if(Q!==!0)if(Q&&h.throws)u=Q(u);else try{u=Q(u)}catch(te){return{state:"parsererror",error:Q?te:"No conversion from "+R+" to "+v}}}}return{state:"success",data:u}}d.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Qe.href,type:"GET",isLocal:p1.test(Qe.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Wg,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":d.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(h,u){return u?xu(xu(h,d.ajaxSettings),u):xu(d.ajaxSettings,h)},ajaxPrefilter:Vg(Lg),ajaxTransport:Vg(gu),ajax:function(h,u){typeof h=="object"&&(u=h,h=void 0),u=u||{};var m,g,x,v,Q,C,R,Y,G,te,I=d.ajaxSetup({},u),ce=I.context||I,Ie=I.context&&(ce.nodeType||ce.jquery)?d(ce):d.event,ht=d.Deferred(),Be=d.Callbacks("once memory"),fi=I.statusCode||{},Bt={},on={},an="canceled",st={readyState:0,getResponseHeader:function(dt){var Et;if(R){if(!v)for(v={};Et=d1.exec(x);)v[Et[1].toLowerCase()+" "]=(v[Et[1].toLowerCase()+" "]||[]).concat(Et[2]);Et=v[dt.toLowerCase()+" "]}return Et==null?null:Et.join(", ")},getAllResponseHeaders:function(){return R?x:null},setRequestHeader:function(dt,Et){return R==null&&(dt=on[dt.toLowerCase()]=on[dt.toLowerCase()]||dt,Bt[dt]=Et),this},overrideMimeType:function(dt){return R==null&&(I.mimeType=dt),this},statusCode:function(dt){var Et;if(dt)if(R)st.always(dt[st.status]);else for(Et in dt)fi[Et]=[fi[Et],dt[Et]];return this},abort:function(dt){var Et=dt||an;return m&&m.abort(Et),qs(0,Et),this}};if(ht.promise(st),I.url=((h||I.url||Qe.href)+"").replace(g1,Qe.protocol+"//"),I.type=u.method||u.type||I.method||I.type,I.dataTypes=(I.dataType||"*").toLowerCase().match(Pi)||[""],I.crossDomain==null){C=X.createElement("a");try{C.href=I.url,C.href=C.href,I.crossDomain=bu.protocol+"//"+bu.host!=C.protocol+"//"+C.host}catch(dt){I.crossDomain=!0}}if(I.data&&I.processData&&typeof I.data!="string"&&(I.data=d.param(I.data,I.traditional)),Mg(Lg,I,u,st),R)return st;Y=d.event&&I.global,Y&&d.active++===0&&d.event.trigger("ajaxStart"),I.type=I.type.toUpperCase(),I.hasContent=!m1.test(I.type),g=I.url.replace(u1,""),I.hasContent?I.data&&I.processData&&(I.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(I.data=I.data.replace(f1,"+")):(te=I.url.slice(g.length),I.data&&(I.processData||typeof I.data=="string")&&(g+=(Le.test(g)?"&":"?")+I.data,delete I.data),I.cache===!1&&(g=g.replace(O1,"$1"),te=(Le.test(g)?"&":"?")+"_="+Re.guid+++te),I.url=g+te),I.ifModified&&(d.lastModified[g]&&st.setRequestHeader("If-Modified-Since",d.lastModified[g]),d.etag[g]&&st.setRequestHeader("If-None-Match",d.etag[g])),(I.data&&I.hasContent&&I.contentType!==!1||u.contentType)&&st.setRequestHeader("Content-Type",I.contentType),st.setRequestHeader("Accept",I.dataTypes[0]&&I.accepts[I.dataTypes[0]]?I.accepts[I.dataTypes[0]]+(I.dataTypes[0]!=="*"?", "+Wg+"; q=0.01":""):I.accepts["*"]);for(G in I.headers)st.setRequestHeader(G,I.headers[G]);if(I.beforeSend&&(I.beforeSend.call(ce,st,I)===!1||R))return st.abort();if(an="abort",Be.add(I.complete),st.done(I.success),st.fail(I.error),m=Mg(gu,I,u,st),!m)qs(-1,"No Transport");else{if(st.readyState=1,Y&&Ie.trigger("ajaxSend",[st,I]),R)return st;I.async&&I.timeout>0&&(Q=i.setTimeout(function(){st.abort("timeout")},I.timeout));try{R=!1,m.send(Bt,qs)}catch(dt){if(R)throw dt;qs(-1,dt)}}function qs(dt,Et,_a,yu){var ln,Ra,cn,ns,ss,pr=Et;R||(R=!0,Q&&i.clearTimeout(Q),m=void 0,x=yu||"",st.readyState=dt>0?4:0,ln=dt>=200&&dt<300||dt===304,_a&&(ns=b1(I,st,_a)),!ln&&d.inArray("script",I.dataTypes)>-1&&d.inArray("json",I.dataTypes)<0&&(I.converters["text script"]=function(){}),ns=x1(I,ns,st,ln),ln?(I.ifModified&&(ss=st.getResponseHeader("Last-Modified"),ss&&(d.lastModified[g]=ss),ss=st.getResponseHeader("etag"),ss&&(d.etag[g]=ss)),dt===204||I.type==="HEAD"?pr="nocontent":dt===304?pr="notmodified":(pr=ns.state,Ra=ns.data,cn=ns.error,ln=!cn)):(cn=pr,(dt||!pr)&&(pr="error",dt<0&&(dt=0))),st.status=dt,st.statusText=(Et||pr)+"",ln?ht.resolveWith(ce,[Ra,pr,st]):ht.rejectWith(ce,[st,pr,cn]),st.statusCode(fi),fi=void 0,Y&&Ie.trigger(ln?"ajaxSuccess":"ajaxError",[st,I,ln?Ra:cn]),Be.fireWith(ce,[st,pr]),Y&&(Ie.trigger("ajaxComplete",[st,I]),--d.active||d.event.trigger("ajaxStop")))}return st},getJSON:function(h,u,m){return d.get(h,u,m,"json")},getScript:function(h,u){return d.get(h,void 0,u,"script")}}),d.each(["get","post"],function(h,u){d[u]=function(m,g,x,v){return S(g)&&(v=v||x,x=g,g=void 0),d.ajax(d.extend({url:m,type:u,dataType:v,data:g,success:x},d.isPlainObject(m)&&m))}}),d.ajaxPrefilter(function(h){var u;for(u in h.headers)u.toLowerCase()==="content-type"&&(h.contentType=h.headers[u]||"")}),d._evalUrl=function(h,u,m){return d.ajax({url:h,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(g){d.globalEval(g,u,m)}})},d.fn.extend({wrapAll:function(h){var u;return this[0]&&(S(h)&&(h=h.call(this[0])),u=d(h,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&u.insertBefore(this[0]),u.map(function(){for(var m=this;m.firstElementChild;)m=m.firstElementChild;return m}).append(this)),this},wrapInner:function(h){return S(h)?this.each(function(u){d(this).wrapInner(h.call(this,u))}):this.each(function(){var u=d(this),m=u.contents();m.length?m.wrapAll(h):u.append(h)})},wrap:function(h){var u=S(h);return this.each(function(m){d(this).wrapAll(u?h.call(this,m):h)})},unwrap:function(h){return this.parent(h).not("body").each(function(){d(this).replaceWith(this.childNodes)}),this}}),d.expr.pseudos.hidden=function(h){return!d.expr.pseudos.visible(h)},d.expr.pseudos.visible=function(h){return!!(h.offsetWidth||h.offsetHeight||h.getClientRects().length)},d.ajaxSettings.xhr=function(){try{return new i.XMLHttpRequest}catch(h){}};var v1={0:200,1223:204},Xa=d.ajaxSettings.xhr();b.cors=!!Xa&&"withCredentials"in Xa,b.ajax=Xa=!!Xa,d.ajaxTransport(function(h){var u,m;if(b.cors||Xa&&!h.crossDomain)return{send:function(g,x){var v,Q=h.xhr();if(Q.open(h.type,h.url,h.async,h.username,h.password),h.xhrFields)for(v in h.xhrFields)Q[v]=h.xhrFields[v];h.mimeType&&Q.overrideMimeType&&Q.overrideMimeType(h.mimeType),!h.crossDomain&&!g["X-Requested-With"]&&(g["X-Requested-With"]="XMLHttpRequest");for(v in g)Q.setRequestHeader(v,g[v]);u=function(C){return function(){u&&(u=m=Q.onload=Q.onerror=Q.onabort=Q.ontimeout=Q.onreadystatechange=null,C==="abort"?Q.abort():C==="error"?typeof Q.status!="number"?x(0,"error"):x(Q.status,Q.statusText):x(v1[Q.status]||Q.status,Q.statusText,(Q.responseType||"text")!=="text"||typeof Q.responseText!="string"?{binary:Q.response}:{text:Q.responseText},Q.getAllResponseHeaders()))}},Q.onload=u(),m=Q.onerror=Q.ontimeout=u("error"),Q.onabort!==void 0?Q.onabort=m:Q.onreadystatechange=function(){Q.readyState===4&&i.setTimeout(function(){u&&m()})},u=u("abort");try{Q.send(h.hasContent&&h.data||null)}catch(C){if(u)throw C}},abort:function(){u&&u()}}}),d.ajaxPrefilter(function(h){h.crossDomain&&(h.contents.script=!1)}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(h){return d.globalEval(h),h}}}),d.ajaxPrefilter("script",function(h){h.cache===void 0&&(h.cache=!1),h.crossDomain&&(h.type="GET")}),d.ajaxTransport("script",function(h){if(h.crossDomain||h.scriptAttrs){var u,m;return{send:function(g,x){u=d("