UNPKG

@davidmorgan/nes-vue

Version:

依据于nes-js项目,使用vue3 版本重写了Nes模拟器。

1 lines 121 kB
(function(S,m){typeof exports=="object"&&typeof module<"u"?m(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],m):(S=typeof globalThis<"u"?globalThis:S||self,m(S.NesVue={},S.vue))})(this,function(S,m){"use strict";var ce=Object.defineProperty;var me=(S,m,k)=>m in S?ce(S,m,{enumerable:!0,configurable:!0,writable:!0,value:k}):S[m]=k;var d=(S,m,k)=>me(S,typeof m!="symbol"?m+"":m,k);class k{constructor(h,s,t){d(this,"_dataFactory",window.indexedDB);d(this,"_dbName");d(this,"_storeName");d(this,"_database");d(this,"_res");this._dataFactory=window.indexedDB,this._dbName=h,this._storeName=s,this._res=this._dataFactory.open(this._dbName,t),this._res.addEventListener("success",()=>{this._database=this._res.result,this._database.objectStoreNames.contains(this._storeName)||this._database.createObjectStore(this._storeName,{keyPath:"id"})}),this._res.addEventListener("error",()=>{console.error("indexedDB load error")}),this._res.addEventListener("upgradeneeded",()=>{this._database=this._res.result,this._database.objectStoreNames.contains(this._storeName)||this._database.createObjectStore(this._storeName,{keyPath:"id"})})}get _store(){return this._database.transaction([this._storeName],"readwrite").objectStore(this._storeName)}set_item(h,s){this._store.put({id:h,data:s})}get_item(h){const s=this._store.get(h);return new Promise((t,o)=>{s.addEventListener("success",()=>{t(s.result.data)}),s.addEventListener("error",o)})}remove_item(h){this._store.delete(h)}clear(){this._store.clear()}}function ni(a,h){return new k(a,h)}function rt(a,h,s){return h>s&&([h,s]=[s,h]),Math.min(s,Math.max(h,a))}function K(a){return Array(a).fill(!1)}function ai(a){return a.filter(Boolean)}function oi(){return D(32768,0).map((a,h)=>h)}function L(a){const h=[];let s=a[0],t=1;for(let o=1;o<a.length;o++)a[o]===s?t++:(t>1?(h.push(t),h.push(s)):h.push(-s-1),s=a[o],t=1);return h.push(t),h.push(s),h}function w(a){const h=[];for(let s=0;s<a.length;)if(a[s]<0)h.push(-a[s]-1),s++;else{const t=a[s],o=a[s+1];for(let e=0;e<t;e++)h.push(o);s+=2}return h}function li(a){const h=[],s=[];for(let t=0;t<a.length;t++){for(let o=0;o<a[t].opaque.length;o++)a[t].opaque[o]===!1?h.push(0):h.push(1);s.push(...a[t].pix)}return[L(h),L(s)]}function ui(a){const h=[];let s=Array(8),t=[];const o=w(a[0]),e=w(a[1]);for(let i=0;i<512;i+=1){for(let r=0;r<8;r+=1)o[i*8+r]===0&&(s[r]=!1);for(let r=0;r<64;r+=1)t[r]=e[i*64+r];h.push({opaque:s,pix:t}),s=Array(8),t=[]}return h}function fi(a){const h=[],s=[];return a.reduce((t,o)=>(h.push(...o.tile),s.push(...o.attrib),t),h),[L(h),L(s)]}function pi(a){const h=[];let s=[],t=[];const o=w(a[0]),e=w(a[1]);for(let i=0;i<1024*4;i+=1)s.push(o[i]),t.push(e[i]),(i+1)%1024===0&&(h.push({tile:s,attrib:t}),s=[],t=[]);return h}function J(a){return+`0x${a}`}function D(a,h){return Array.from({length:a}).fill(h)}function nt(a){return Object.entries(a)}function ci(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}var at,Nt;function Et(){if(Nt)return at;Nt=1;var a=function(){this.state=new Array(8);for(var h=0;h<this.state.length;h++)this.state[h]=64};return a.BUTTON_A=0,a.BUTTON_B=1,a.BUTTON_SELECT=2,a.BUTTON_START=3,a.BUTTON_UP=4,a.BUTTON_DOWN=5,a.BUTTON_LEFT=6,a.BUTTON_RIGHT=7,a.prototype={buttonDown:function(h){this.state[h]=65},buttonUp:function(h){this.state[h]=64}},at=a,at}var ot,Tt;function lt(){return Tt||(Tt=1,ot={copyArrayElements:function(a,h,s,t,o){for(var e=0;e<o;++e)s[t+e]=a[h+e]},copyArray:function(a){return a.slice(0)},fromJSON:function(a,h){for(var s=0;s<a.JSON_PROPERTIES.length;s++)a[a.JSON_PROPERTIES[s]]=h[a.JSON_PROPERTIES[s]]},toJSON:function(a){for(var h={},s=0;s<a.JSON_PROPERTIES.length;s++)h[a.JSON_PROPERTIES[s]]=a[a.JSON_PROPERTIES[s]];return h}}),ot}var ut,Ot;function mi(){if(Ot)return ut;Ot=1;var a=lt(),h=function(t){this.nes=t,this.mem=null,this.REG_ACC=null,this.REG_X=null,this.REG_Y=null,this.REG_SP=null,this.REG_PC=null,this.REG_PC_NEW=null,this.REG_STATUS=null,this.F_CARRY=null,this.F_DECIMAL=null,this.F_INTERRUPT=null,this.F_INTERRUPT_NEW=null,this.F_OVERFLOW=null,this.F_SIGN=null,this.F_ZERO=null,this.F_NOTUSED=null,this.F_NOTUSED_NEW=null,this.F_BRK=null,this.F_BRK_NEW=null,this.opdata=null,this.cyclesToHalt=null,this.crash=null,this.irqRequested=null,this.irqType=null,this.reset()};h.prototype={IRQ_NORMAL:0,IRQ_NMI:1,IRQ_RESET:2,reset:function(){this.mem=new Array(65536);for(var t=0;t<8192;t++)this.mem[t]=255;for(var o=0;o<4;o++){var e=o*2048;this.mem[e+8]=247,this.mem[e+9]=239,this.mem[e+10]=223,this.mem[e+15]=191}for(var i=8193;i<this.mem.length;i++)this.mem[i]=0;this.REG_ACC=0,this.REG_X=0,this.REG_Y=0,this.REG_SP=511,this.REG_PC=32767,this.REG_PC_NEW=32767,this.REG_STATUS=40,this.setStatus(40),this.F_CARRY=0,this.F_DECIMAL=0,this.F_INTERRUPT=1,this.F_INTERRUPT_NEW=1,this.F_OVERFLOW=0,this.F_SIGN=0,this.F_ZERO=1,this.F_NOTUSED=1,this.F_NOTUSED_NEW=1,this.F_BRK=1,this.F_BRK_NEW=1,this.opdata=new s().opdata,this.cyclesToHalt=0,this.crash=!1,this.irqRequested=!1,this.irqType=null},emulate:function(){var t,o;if(this.irqRequested){switch(t=this.F_CARRY|(this.F_ZERO===0?1:0)<<1|this.F_INTERRUPT<<2|this.F_DECIMAL<<3|this.F_BRK<<4|this.F_NOTUSED<<5|this.F_OVERFLOW<<6|this.F_SIGN<<7,this.REG_PC_NEW=this.REG_PC,this.F_INTERRUPT_NEW=this.F_INTERRUPT,this.irqType){case 0:{if(this.F_INTERRUPT!==0)break;this.doIrq(t);break}case 1:{this.doNonMaskableInterrupt(t);break}case 2:{this.doResetInterrupt();break}}this.REG_PC=this.REG_PC_NEW,this.F_INTERRUPT=this.F_INTERRUPT_NEW,this.F_BRK=this.F_BRK_NEW,this.irqRequested=!1}var e=this.opdata[this.nes.mmap.load(this.REG_PC+1)],i=e>>24,r=0,n=e>>8&255,u=this.REG_PC;this.REG_PC+=e>>16&255;var l=0;switch(n){case 0:{l=this.load(u+2);break}case 1:{l=this.load(u+2),l<128?l+=this.REG_PC:l+=this.REG_PC-256;break}case 2:break;case 3:{l=this.load16bit(u+2);break}case 4:{l=this.REG_ACC;break}case 5:{l=this.REG_PC;break}case 6:{l=this.load(u+2)+this.REG_X&255;break}case 7:{l=this.load(u+2)+this.REG_Y&255;break}case 8:{l=this.load16bit(u+2),(l&65280)!==(l+this.REG_X&65280)&&(r=1),l+=this.REG_X;break}case 9:{l=this.load16bit(u+2),(l&65280)!==(l+this.REG_Y&65280)&&(r=1),l+=this.REG_Y;break}case 10:{l=this.load(u+2),(l&65280)!==(l+this.REG_X&65280)&&(r=1),l+=this.REG_X,l&=255,l=this.load16bit(l);break}case 11:{l=this.load16bit(this.load(u+2)),(l&65280)!==(l+this.REG_Y&65280)&&(r=1),l+=this.REG_Y;break}case 12:{l=this.load16bit(u+2),l<8191?l=this.mem[l]+(this.mem[l&65280|(l&255)+1&255]<<8):l=this.nes.mmap.load(l)+(this.nes.mmap.load(l&65280|(l&255)+1&255)<<8);break}}switch(l&=65535,e&255){case 0:{t=this.REG_ACC+this.load(l)+this.F_CARRY,!((this.REG_ACC^this.load(l))&128)&&(this.REG_ACC^t)&128?this.F_OVERFLOW=1:this.F_OVERFLOW=0,this.F_CARRY=t>255?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255,this.REG_ACC=t&255,i+=r;break}case 1:{this.REG_ACC=this.REG_ACC&this.load(l),this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC,n!==11&&(i+=r);break}case 2:{n===4?(this.F_CARRY=this.REG_ACC>>7&1,this.REG_ACC=this.REG_ACC<<1&255,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC):(t=this.load(l),this.F_CARRY=t>>7&1,t=t<<1&255,this.F_SIGN=t>>7&1,this.F_ZERO=t,this.write(l,t));break}case 3:{this.F_CARRY===0&&(i+=(u&65280)!==(l&65280)?2:1,this.REG_PC=l);break}case 4:{this.F_CARRY===1&&(i+=(u&65280)!==(l&65280)?2:1,this.REG_PC=l);break}case 5:{this.F_ZERO===0&&(i+=(u&65280)!==(l&65280)?2:1,this.REG_PC=l);break}case 6:{t=this.load(l),this.F_SIGN=t>>7&1,this.F_OVERFLOW=t>>6&1,t&=this.REG_ACC,this.F_ZERO=t;break}case 7:{this.F_SIGN===1&&(i++,this.REG_PC=l);break}case 8:{this.F_ZERO!==0&&(i+=(u&65280)!==(l&65280)?2:1,this.REG_PC=l);break}case 9:{this.F_SIGN===0&&(i+=(u&65280)!==(l&65280)?2:1,this.REG_PC=l);break}case 10:{this.REG_PC+=2,this.push(this.REG_PC>>8&255),this.push(this.REG_PC&255),this.F_BRK=1,this.push(this.F_CARRY|(this.F_ZERO===0?1:0)<<1|this.F_INTERRUPT<<2|this.F_DECIMAL<<3|this.F_BRK<<4|this.F_NOTUSED<<5|this.F_OVERFLOW<<6|this.F_SIGN<<7),this.F_INTERRUPT=1,this.REG_PC=this.load16bit(65534),this.REG_PC--;break}case 11:{this.F_OVERFLOW===0&&(i+=(u&65280)!==(l&65280)?2:1,this.REG_PC=l);break}case 12:{this.F_OVERFLOW===1&&(i+=(u&65280)!==(l&65280)?2:1,this.REG_PC=l);break}case 13:{this.F_CARRY=0;break}case 14:{this.F_DECIMAL=0;break}case 15:{this.F_INTERRUPT=0;break}case 16:{this.F_OVERFLOW=0;break}case 17:{t=this.REG_ACC-this.load(l),this.F_CARRY=t>=0?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255,i+=r;break}case 18:{t=this.REG_X-this.load(l),this.F_CARRY=t>=0?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255;break}case 19:{t=this.REG_Y-this.load(l),this.F_CARRY=t>=0?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255;break}case 20:{t=this.load(l)-1&255,this.F_SIGN=t>>7&1,this.F_ZERO=t,this.write(l,t);break}case 21:{this.REG_X=this.REG_X-1&255,this.F_SIGN=this.REG_X>>7&1,this.F_ZERO=this.REG_X;break}case 22:{this.REG_Y=this.REG_Y-1&255,this.F_SIGN=this.REG_Y>>7&1,this.F_ZERO=this.REG_Y;break}case 23:{this.REG_ACC=(this.load(l)^this.REG_ACC)&255,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC,i+=r;break}case 24:{t=this.load(l)+1&255,this.F_SIGN=t>>7&1,this.F_ZERO=t,this.write(l,t&255);break}case 25:{this.REG_X=this.REG_X+1&255,this.F_SIGN=this.REG_X>>7&1,this.F_ZERO=this.REG_X;break}case 26:{this.REG_Y++,this.REG_Y&=255,this.F_SIGN=this.REG_Y>>7&1,this.F_ZERO=this.REG_Y;break}case 27:{this.REG_PC=l-1;break}case 28:{this.push(this.REG_PC>>8&255),this.push(this.REG_PC&255),this.REG_PC=l-1;break}case 29:{this.REG_ACC=this.load(l),this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC,i+=r;break}case 30:{this.REG_X=this.load(l),this.F_SIGN=this.REG_X>>7&1,this.F_ZERO=this.REG_X,i+=r;break}case 31:{this.REG_Y=this.load(l),this.F_SIGN=this.REG_Y>>7&1,this.F_ZERO=this.REG_Y,i+=r;break}case 32:{n===4?(t=this.REG_ACC&255,this.F_CARRY=t&1,t>>=1,this.REG_ACC=t):(t=this.load(l)&255,this.F_CARRY=t&1,t>>=1,this.write(l,t)),this.F_SIGN=0,this.F_ZERO=t;break}case 33:break;case 34:{t=(this.load(l)|this.REG_ACC)&255,this.F_SIGN=t>>7&1,this.F_ZERO=t,this.REG_ACC=t,n!==11&&(i+=r);break}case 35:{this.push(this.REG_ACC);break}case 36:{this.F_BRK=1,this.push(this.F_CARRY|(this.F_ZERO===0?1:0)<<1|this.F_INTERRUPT<<2|this.F_DECIMAL<<3|this.F_BRK<<4|this.F_NOTUSED<<5|this.F_OVERFLOW<<6|this.F_SIGN<<7);break}case 37:{this.REG_ACC=this.pull(),this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 38:{t=this.pull(),this.F_CARRY=t&1,this.F_ZERO=(t>>1&1)===1?0:1,this.F_INTERRUPT=t>>2&1,this.F_DECIMAL=t>>3&1,this.F_BRK=t>>4&1,this.F_NOTUSED=t>>5&1,this.F_OVERFLOW=t>>6&1,this.F_SIGN=t>>7&1,this.F_NOTUSED=1;break}case 39:{n===4?(t=this.REG_ACC,o=this.F_CARRY,this.F_CARRY=t>>7&1,t=(t<<1&255)+o,this.REG_ACC=t):(t=this.load(l),o=this.F_CARRY,this.F_CARRY=t>>7&1,t=(t<<1&255)+o,this.write(l,t)),this.F_SIGN=t>>7&1,this.F_ZERO=t;break}case 40:{n===4?(o=this.F_CARRY<<7,this.F_CARRY=this.REG_ACC&1,t=(this.REG_ACC>>1)+o,this.REG_ACC=t):(t=this.load(l),o=this.F_CARRY<<7,this.F_CARRY=t&1,t=(t>>1)+o,this.write(l,t)),this.F_SIGN=t>>7&1,this.F_ZERO=t;break}case 41:{if(t=this.pull(),this.F_CARRY=t&1,this.F_ZERO=t>>1&1?0:1,this.F_INTERRUPT=t>>2&1,this.F_DECIMAL=t>>3&1,this.F_BRK=t>>4&1,this.F_NOTUSED=t>>5&1,this.F_OVERFLOW=t>>6&1,this.F_SIGN=t>>7&1,this.REG_PC=this.pull(),this.REG_PC+=this.pull()<<8,this.REG_PC===65535)return;this.REG_PC--,this.F_NOTUSED=1;break}case 42:{if(this.REG_PC=this.pull(),this.REG_PC+=this.pull()<<8,this.REG_PC===65535)return;break}case 43:{t=this.REG_ACC-this.load(l)-(1-this.F_CARRY),this.F_SIGN=t>>7&1,this.F_ZERO=t&255,(this.REG_ACC^t)&128&&(this.REG_ACC^this.load(l))&128?this.F_OVERFLOW=1:this.F_OVERFLOW=0,this.F_CARRY=t<0?0:1,this.REG_ACC=t&255,n!==11&&(i+=r);break}case 44:{this.F_CARRY=1;break}case 45:{this.F_DECIMAL=1;break}case 46:{this.F_INTERRUPT=1;break}case 47:{this.write(l,this.REG_ACC);break}case 48:{this.write(l,this.REG_X);break}case 49:{this.write(l,this.REG_Y);break}case 50:{this.REG_X=this.REG_ACC,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 51:{this.REG_Y=this.REG_ACC,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC;break}case 52:{this.REG_X=this.REG_SP-256,this.F_SIGN=this.REG_SP>>7&1,this.F_ZERO=this.REG_X;break}case 53:{this.REG_ACC=this.REG_X,this.F_SIGN=this.REG_X>>7&1,this.F_ZERO=this.REG_X;break}case 54:{this.REG_SP=this.REG_X+256,this.stackWrap();break}case 55:{this.REG_ACC=this.REG_Y,this.F_SIGN=this.REG_Y>>7&1,this.F_ZERO=this.REG_Y;break}case 56:{t=this.REG_ACC&this.load(l),this.F_CARRY=t&1,this.REG_ACC=this.F_ZERO=t>>1,this.F_SIGN=0;break}case 57:{this.REG_ACC=this.F_ZERO=this.REG_ACC&this.load(l),this.F_CARRY=this.F_SIGN=this.REG_ACC>>7&1;break}case 58:{t=this.REG_ACC&this.load(l),this.REG_ACC=this.F_ZERO=(t>>1)+(this.F_CARRY<<7),this.F_SIGN=this.F_CARRY,this.F_CARRY=t>>7&1,this.F_OVERFLOW=(t>>7^t>>6)&1;break}case 59:{t=(this.REG_X&this.REG_ACC)-this.load(l),this.F_SIGN=t>>7&1,this.F_ZERO=t&255,(this.REG_X^t)&128&&(this.REG_X^this.load(l))&128?this.F_OVERFLOW=1:this.F_OVERFLOW=0,this.F_CARRY=t<0?0:1,this.REG_X=t&255;break}case 60:{this.REG_ACC=this.REG_X=this.F_ZERO=this.load(l),this.F_SIGN=this.REG_ACC>>7&1,i+=r;break}case 61:{this.write(l,this.REG_ACC&this.REG_X);break}case 62:{t=this.load(l)-1&255,this.write(l,t),t=this.REG_ACC-t,this.F_CARRY=t>=0?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255,n!==11&&(i+=r);break}case 63:{t=this.load(l)+1&255,this.write(l,t),t=this.REG_ACC-t-(1-this.F_CARRY),this.F_SIGN=t>>7&1,this.F_ZERO=t&255,(this.REG_ACC^t)&128&&(this.REG_ACC^this.load(l))&128?this.F_OVERFLOW=1:this.F_OVERFLOW=0,this.F_CARRY=t<0?0:1,this.REG_ACC=t&255,n!==11&&(i+=r);break}case 64:{t=this.load(l),o=this.F_CARRY,this.F_CARRY=t>>7&1,t=(t<<1&255)+o,this.write(l,t),this.REG_ACC=this.REG_ACC&t,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC,n!==11&&(i+=r);break}case 65:{t=this.load(l),o=this.F_CARRY<<7,this.F_CARRY=t&1,t=(t>>1)+o,this.write(l,t),t=this.REG_ACC+this.load(l)+this.F_CARRY,!((this.REG_ACC^this.load(l))&128)&&(this.REG_ACC^t)&128?this.F_OVERFLOW=1:this.F_OVERFLOW=0,this.F_CARRY=t>255?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=t&255,this.REG_ACC=t&255,n!==11&&(i+=r);break}case 66:{t=this.load(l),this.F_CARRY=t>>7&1,t=t<<1&255,this.write(l,t),this.REG_ACC=this.REG_ACC|t,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC,n!==11&&(i+=r);break}case 67:{t=this.load(l)&255,this.F_CARRY=t&1,t>>=1,this.write(l,t),this.REG_ACC=this.REG_ACC^t,this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC,n!==11&&(i+=r);break}case 68:break;case 69:{this.load(l),n!==11&&(i+=r);break}default:{this.nes.stop(),this.nes.crashMessage="Game crashed, invalid opcode at address $"+u.toString(16);break}}return i},load:function(t){return t<8192?this.mem[t&2047]:this.nes.mmap.load(t)},load16bit:function(t){return t<8191?this.mem[t&2047]|this.mem[t+1&2047]<<8:this.nes.mmap.load(t)|this.nes.mmap.load(t+1)<<8},write:function(t,o){t<8192?this.mem[t&2047]=o:this.nes.mmap.write(t,o)},requestIrq:function(t){this.irqRequested&&t===this.IRQ_NORMAL||(this.irqRequested=!0,this.irqType=t)},push:function(t){this.nes.mmap.write(this.REG_SP,t),this.REG_SP--,this.REG_SP=256|this.REG_SP&255},stackWrap:function(){this.REG_SP=256|this.REG_SP&255},pull:function(){return this.REG_SP++,this.REG_SP=256|this.REG_SP&255,this.nes.mmap.load(this.REG_SP)},pageCrossed:function(t,o){return(t&65280)!==(o&65280)},haltCycles:function(t){this.cyclesToHalt+=t},doNonMaskableInterrupt:function(t){this.nes.mmap.load(8192)&128&&(this.REG_PC_NEW++,this.push(this.REG_PC_NEW>>8&255),this.push(this.REG_PC_NEW&255),this.push(t),this.REG_PC_NEW=this.nes.mmap.load(65530)|this.nes.mmap.load(65531)<<8,this.REG_PC_NEW--)},doResetInterrupt:function(){this.REG_PC_NEW=this.nes.mmap.load(65532)|this.nes.mmap.load(65533)<<8,this.REG_PC_NEW--},doIrq:function(t){this.REG_PC_NEW++,this.push(this.REG_PC_NEW>>8&255),this.push(this.REG_PC_NEW&255),this.push(t),this.F_INTERRUPT_NEW=1,this.F_BRK_NEW=0,this.REG_PC_NEW=this.nes.mmap.load(65534)|this.nes.mmap.load(65535)<<8,this.REG_PC_NEW--},getStatus:function(){return this.F_CARRY|this.F_ZERO<<1|this.F_INTERRUPT<<2|this.F_DECIMAL<<3|this.F_BRK<<4|this.F_NOTUSED<<5|this.F_OVERFLOW<<6|this.F_SIGN<<7},setStatus:function(t){this.F_CARRY=t&1,this.F_ZERO=t>>1&1,this.F_INTERRUPT=t>>2&1,this.F_DECIMAL=t>>3&1,this.F_BRK=t>>4&1,this.F_NOTUSED=t>>5&1,this.F_OVERFLOW=t>>6&1,this.F_SIGN=t>>7&1},JSON_PROPERTIES:["mem","cyclesToHalt","irqRequested","irqType","REG_ACC","REG_X","REG_Y","REG_SP","REG_PC","REG_PC_NEW","REG_STATUS","F_CARRY","F_DECIMAL","F_INTERRUPT","F_INTERRUPT_NEW","F_OVERFLOW","F_SIGN","F_ZERO","F_NOTUSED","F_NOTUSED_NEW","F_BRK","F_BRK_NEW"],toJSON:function(){return a.toJSON(this)},fromJSON:function(t){a.fromJSON(this,t)}};var s=function(){this.opdata=new Array(256);for(var t=0;t<256;t++)this.opdata[t]=255;this.setOp(this.INS_ADC,105,this.ADDR_IMM,2,2),this.setOp(this.INS_ADC,101,this.ADDR_ZP,2,3),this.setOp(this.INS_ADC,117,this.ADDR_ZPX,2,4),this.setOp(this.INS_ADC,109,this.ADDR_ABS,3,4),this.setOp(this.INS_ADC,125,this.ADDR_ABSX,3,4),this.setOp(this.INS_ADC,121,this.ADDR_ABSY,3,4),this.setOp(this.INS_ADC,97,this.ADDR_PREIDXIND,2,6),this.setOp(this.INS_ADC,113,this.ADDR_POSTIDXIND,2,5),this.setOp(this.INS_AND,41,this.ADDR_IMM,2,2),this.setOp(this.INS_AND,37,this.ADDR_ZP,2,3),this.setOp(this.INS_AND,53,this.ADDR_ZPX,2,4),this.setOp(this.INS_AND,45,this.ADDR_ABS,3,4),this.setOp(this.INS_AND,61,this.ADDR_ABSX,3,4),this.setOp(this.INS_AND,57,this.ADDR_ABSY,3,4),this.setOp(this.INS_AND,33,this.ADDR_PREIDXIND,2,6),this.setOp(this.INS_AND,49,this.ADDR_POSTIDXIND,2,5),this.setOp(this.INS_ASL,10,this.ADDR_ACC,1,2),this.setOp(this.INS_ASL,6,this.ADDR_ZP,2,5),this.setOp(this.INS_ASL,22,this.ADDR_ZPX,2,6),this.setOp(this.INS_ASL,14,this.ADDR_ABS,3,6),this.setOp(this.INS_ASL,30,this.ADDR_ABSX,3,7),this.setOp(this.INS_BCC,144,this.ADDR_REL,2,2),this.setOp(this.INS_BCS,176,this.ADDR_REL,2,2),this.setOp(this.INS_BEQ,240,this.ADDR_REL,2,2),this.setOp(this.INS_BIT,36,this.ADDR_ZP,2,3),this.setOp(this.INS_BIT,44,this.ADDR_ABS,3,4),this.setOp(this.INS_BMI,48,this.ADDR_REL,2,2),this.setOp(this.INS_BNE,208,this.ADDR_REL,2,2),this.setOp(this.INS_BPL,16,this.ADDR_REL,2,2),this.setOp(this.INS_BRK,0,this.ADDR_IMP,1,7),this.setOp(this.INS_BVC,80,this.ADDR_REL,2,2),this.setOp(this.INS_BVS,112,this.ADDR_REL,2,2),this.setOp(this.INS_CLC,24,this.ADDR_IMP,1,2),this.setOp(this.INS_CLD,216,this.ADDR_IMP,1,2),this.setOp(this.INS_CLI,88,this.ADDR_IMP,1,2),this.setOp(this.INS_CLV,184,this.ADDR_IMP,1,2),this.setOp(this.INS_CMP,201,this.ADDR_IMM,2,2),this.setOp(this.INS_CMP,197,this.ADDR_ZP,2,3),this.setOp(this.INS_CMP,213,this.ADDR_ZPX,2,4),this.setOp(this.INS_CMP,205,this.ADDR_ABS,3,4),this.setOp(this.INS_CMP,221,this.ADDR_ABSX,3,4),this.setOp(this.INS_CMP,217,this.ADDR_ABSY,3,4),this.setOp(this.INS_CMP,193,this.ADDR_PREIDXIND,2,6),this.setOp(this.INS_CMP,209,this.ADDR_POSTIDXIND,2,5),this.setOp(this.INS_CPX,224,this.ADDR_IMM,2,2),this.setOp(this.INS_CPX,228,this.ADDR_ZP,2,3),this.setOp(this.INS_CPX,236,this.ADDR_ABS,3,4),this.setOp(this.INS_CPY,192,this.ADDR_IMM,2,2),this.setOp(this.INS_CPY,196,this.ADDR_ZP,2,3),this.setOp(this.INS_CPY,204,this.ADDR_ABS,3,4),this.setOp(this.INS_DEC,198,this.ADDR_ZP,2,5),this.setOp(this.INS_DEC,214,this.ADDR_ZPX,2,6),this.setOp(this.INS_DEC,206,this.ADDR_ABS,3,6),this.setOp(this.INS_DEC,222,this.ADDR_ABSX,3,7),this.setOp(this.INS_DEX,202,this.ADDR_IMP,1,2),this.setOp(this.INS_DEY,136,this.ADDR_IMP,1,2),this.setOp(this.INS_EOR,73,this.ADDR_IMM,2,2),this.setOp(this.INS_EOR,69,this.ADDR_ZP,2,3),this.setOp(this.INS_EOR,85,this.ADDR_ZPX,2,4),this.setOp(this.INS_EOR,77,this.ADDR_ABS,3,4),this.setOp(this.INS_EOR,93,this.ADDR_ABSX,3,4),this.setOp(this.INS_EOR,89,this.ADDR_ABSY,3,4),this.setOp(this.INS_EOR,65,this.ADDR_PREIDXIND,2,6),this.setOp(this.INS_EOR,81,this.ADDR_POSTIDXIND,2,5),this.setOp(this.INS_INC,230,this.ADDR_ZP,2,5),this.setOp(this.INS_INC,246,this.ADDR_ZPX,2,6),this.setOp(this.INS_INC,238,this.ADDR_ABS,3,6),this.setOp(this.INS_INC,254,this.ADDR_ABSX,3,7),this.setOp(this.INS_INX,232,this.ADDR_IMP,1,2),this.setOp(this.INS_INY,200,this.ADDR_IMP,1,2),this.setOp(this.INS_JMP,76,this.ADDR_ABS,3,3),this.setOp(this.INS_JMP,108,this.ADDR_INDABS,3,5),this.setOp(this.INS_JSR,32,this.ADDR_ABS,3,6),this.setOp(this.INS_LDA,169,this.ADDR_IMM,2,2),this.setOp(this.INS_LDA,165,this.ADDR_ZP,2,3),this.setOp(this.INS_LDA,181,this.ADDR_ZPX,2,4),this.setOp(this.INS_LDA,173,this.ADDR_ABS,3,4),this.setOp(this.INS_LDA,189,this.ADDR_ABSX,3,4),this.setOp(this.INS_LDA,185,this.ADDR_ABSY,3,4),this.setOp(this.INS_LDA,161,this.ADDR_PREIDXIND,2,6),this.setOp(this.INS_LDA,177,this.ADDR_POSTIDXIND,2,5),this.setOp(this.INS_LDX,162,this.ADDR_IMM,2,2),this.setOp(this.INS_LDX,166,this.ADDR_ZP,2,3),this.setOp(this.INS_LDX,182,this.ADDR_ZPY,2,4),this.setOp(this.INS_LDX,174,this.ADDR_ABS,3,4),this.setOp(this.INS_LDX,190,this.ADDR_ABSY,3,4),this.setOp(this.INS_LDY,160,this.ADDR_IMM,2,2),this.setOp(this.INS_LDY,164,this.ADDR_ZP,2,3),this.setOp(this.INS_LDY,180,this.ADDR_ZPX,2,4),this.setOp(this.INS_LDY,172,this.ADDR_ABS,3,4),this.setOp(this.INS_LDY,188,this.ADDR_ABSX,3,4),this.setOp(this.INS_LSR,74,this.ADDR_ACC,1,2),this.setOp(this.INS_LSR,70,this.ADDR_ZP,2,5),this.setOp(this.INS_LSR,86,this.ADDR_ZPX,2,6),this.setOp(this.INS_LSR,78,this.ADDR_ABS,3,6),this.setOp(this.INS_LSR,94,this.ADDR_ABSX,3,7),this.setOp(this.INS_NOP,26,this.ADDR_IMP,1,2),this.setOp(this.INS_NOP,58,this.ADDR_IMP,1,2),this.setOp(this.INS_NOP,90,this.ADDR_IMP,1,2),this.setOp(this.INS_NOP,122,this.ADDR_IMP,1,2),this.setOp(this.INS_NOP,218,this.ADDR_IMP,1,2),this.setOp(this.INS_NOP,234,this.ADDR_IMP,1,2),this.setOp(this.INS_NOP,250,this.ADDR_IMP,1,2),this.setOp(this.INS_ORA,9,this.ADDR_IMM,2,2),this.setOp(this.INS_ORA,5,this.ADDR_ZP,2,3),this.setOp(this.INS_ORA,21,this.ADDR_ZPX,2,4),this.setOp(this.INS_ORA,13,this.ADDR_ABS,3,4),this.setOp(this.INS_ORA,29,this.ADDR_ABSX,3,4),this.setOp(this.INS_ORA,25,this.ADDR_ABSY,3,4),this.setOp(this.INS_ORA,1,this.ADDR_PREIDXIND,2,6),this.setOp(this.INS_ORA,17,this.ADDR_POSTIDXIND,2,5),this.setOp(this.INS_PHA,72,this.ADDR_IMP,1,3),this.setOp(this.INS_PHP,8,this.ADDR_IMP,1,3),this.setOp(this.INS_PLA,104,this.ADDR_IMP,1,4),this.setOp(this.INS_PLP,40,this.ADDR_IMP,1,4),this.setOp(this.INS_ROL,42,this.ADDR_ACC,1,2),this.setOp(this.INS_ROL,38,this.ADDR_ZP,2,5),this.setOp(this.INS_ROL,54,this.ADDR_ZPX,2,6),this.setOp(this.INS_ROL,46,this.ADDR_ABS,3,6),this.setOp(this.INS_ROL,62,this.ADDR_ABSX,3,7),this.setOp(this.INS_ROR,106,this.ADDR_ACC,1,2),this.setOp(this.INS_ROR,102,this.ADDR_ZP,2,5),this.setOp(this.INS_ROR,118,this.ADDR_ZPX,2,6),this.setOp(this.INS_ROR,110,this.ADDR_ABS,3,6),this.setOp(this.INS_ROR,126,this.ADDR_ABSX,3,7),this.setOp(this.INS_RTI,64,this.ADDR_IMP,1,6),this.setOp(this.INS_RTS,96,this.ADDR_IMP,1,6),this.setOp(this.INS_SBC,233,this.ADDR_IMM,2,2),this.setOp(this.INS_SBC,229,this.ADDR_ZP,2,3),this.setOp(this.INS_SBC,245,this.ADDR_ZPX,2,4),this.setOp(this.INS_SBC,237,this.ADDR_ABS,3,4),this.setOp(this.INS_SBC,253,this.ADDR_ABSX,3,4),this.setOp(this.INS_SBC,249,this.ADDR_ABSY,3,4),this.setOp(this.INS_SBC,225,this.ADDR_PREIDXIND,2,6),this.setOp(this.INS_SBC,241,this.ADDR_POSTIDXIND,2,5),this.setOp(this.INS_SEC,56,this.ADDR_IMP,1,2),this.setOp(this.INS_SED,248,this.ADDR_IMP,1,2),this.setOp(this.INS_SEI,120,this.ADDR_IMP,1,2),this.setOp(this.INS_STA,133,this.ADDR_ZP,2,3),this.setOp(this.INS_STA,149,this.ADDR_ZPX,2,4),this.setOp(this.INS_STA,141,this.ADDR_ABS,3,4),this.setOp(this.INS_STA,157,this.ADDR_ABSX,3,5),this.setOp(this.INS_STA,153,this.ADDR_ABSY,3,5),this.setOp(this.INS_STA,129,this.ADDR_PREIDXIND,2,6),this.setOp(this.INS_STA,145,this.ADDR_POSTIDXIND,2,6),this.setOp(this.INS_STX,134,this.ADDR_ZP,2,3),this.setOp(this.INS_STX,150,this.ADDR_ZPY,2,4),this.setOp(this.INS_STX,142,this.ADDR_ABS,3,4),this.setOp(this.INS_STY,132,this.ADDR_ZP,2,3),this.setOp(this.INS_STY,148,this.ADDR_ZPX,2,4),this.setOp(this.INS_STY,140,this.ADDR_ABS,3,4),this.setOp(this.INS_TAX,170,this.ADDR_IMP,1,2),this.setOp(this.INS_TAY,168,this.ADDR_IMP,1,2),this.setOp(this.INS_TSX,186,this.ADDR_IMP,1,2),this.setOp(this.INS_TXA,138,this.ADDR_IMP,1,2),this.setOp(this.INS_TXS,154,this.ADDR_IMP,1,2),this.setOp(this.INS_TYA,152,this.ADDR_IMP,1,2),this.setOp(this.INS_ALR,75,this.ADDR_IMM,2,2),this.setOp(this.INS_ANC,11,this.ADDR_IMM,2,2),this.setOp(this.INS_ANC,43,this.ADDR_IMM,2,2),this.setOp(this.INS_ARR,107,this.ADDR_IMM,2,2),this.setOp(this.INS_AXS,203,this.ADDR_IMM,2,2),this.setOp(this.INS_LAX,163,this.ADDR_PREIDXIND,2,6),this.setOp(this.INS_LAX,167,this.ADDR_ZP,2,3),this.setOp(this.INS_LAX,175,this.ADDR_ABS,3,4),this.setOp(this.INS_LAX,179,this.ADDR_POSTIDXIND,2,5),this.setOp(this.INS_LAX,183,this.ADDR_ZPY,2,4),this.setOp(this.INS_LAX,191,this.ADDR_ABSY,3,4),this.setOp(this.INS_SAX,131,this.ADDR_PREIDXIND,2,6),this.setOp(this.INS_SAX,135,this.ADDR_ZP,2,3),this.setOp(this.INS_SAX,143,this.ADDR_ABS,3,4),this.setOp(this.INS_SAX,151,this.ADDR_ZPY,2,4),this.setOp(this.INS_DCP,195,this.ADDR_PREIDXIND,2,8),this.setOp(this.INS_DCP,199,this.ADDR_ZP,2,5),this.setOp(this.INS_DCP,207,this.ADDR_ABS,3,6),this.setOp(this.INS_DCP,211,this.ADDR_POSTIDXIND,2,8),this.setOp(this.INS_DCP,215,this.ADDR_ZPX,2,6),this.setOp(this.INS_DCP,219,this.ADDR_ABSY,3,7),this.setOp(this.INS_DCP,223,this.ADDR_ABSX,3,7),this.setOp(this.INS_ISC,227,this.ADDR_PREIDXIND,2,8),this.setOp(this.INS_ISC,231,this.ADDR_ZP,2,5),this.setOp(this.INS_ISC,239,this.ADDR_ABS,3,6),this.setOp(this.INS_ISC,243,this.ADDR_POSTIDXIND,2,8),this.setOp(this.INS_ISC,247,this.ADDR_ZPX,2,6),this.setOp(this.INS_ISC,251,this.ADDR_ABSY,3,7),this.setOp(this.INS_ISC,255,this.ADDR_ABSX,3,7),this.setOp(this.INS_RLA,35,this.ADDR_PREIDXIND,2,8),this.setOp(this.INS_RLA,39,this.ADDR_ZP,2,5),this.setOp(this.INS_RLA,47,this.ADDR_ABS,3,6),this.setOp(this.INS_RLA,51,this.ADDR_POSTIDXIND,2,8),this.setOp(this.INS_RLA,55,this.ADDR_ZPX,2,6),this.setOp(this.INS_RLA,59,this.ADDR_ABSY,3,7),this.setOp(this.INS_RLA,63,this.ADDR_ABSX,3,7),this.setOp(this.INS_RRA,99,this.ADDR_PREIDXIND,2,8),this.setOp(this.INS_RRA,103,this.ADDR_ZP,2,5),this.setOp(this.INS_RRA,111,this.ADDR_ABS,3,6),this.setOp(this.INS_RRA,115,this.ADDR_POSTIDXIND,2,8),this.setOp(this.INS_RRA,119,this.ADDR_ZPX,2,6),this.setOp(this.INS_RRA,123,this.ADDR_ABSY,3,7),this.setOp(this.INS_RRA,127,this.ADDR_ABSX,3,7),this.setOp(this.INS_SLO,3,this.ADDR_PREIDXIND,2,8),this.setOp(this.INS_SLO,7,this.ADDR_ZP,2,5),this.setOp(this.INS_SLO,15,this.ADDR_ABS,3,6),this.setOp(this.INS_SLO,19,this.ADDR_POSTIDXIND,2,8),this.setOp(this.INS_SLO,23,this.ADDR_ZPX,2,6),this.setOp(this.INS_SLO,27,this.ADDR_ABSY,3,7),this.setOp(this.INS_SLO,31,this.ADDR_ABSX,3,7),this.setOp(this.INS_SRE,67,this.ADDR_PREIDXIND,2,8),this.setOp(this.INS_SRE,71,this.ADDR_ZP,2,5),this.setOp(this.INS_SRE,79,this.ADDR_ABS,3,6),this.setOp(this.INS_SRE,83,this.ADDR_POSTIDXIND,2,8),this.setOp(this.INS_SRE,87,this.ADDR_ZPX,2,6),this.setOp(this.INS_SRE,91,this.ADDR_ABSY,3,7),this.setOp(this.INS_SRE,95,this.ADDR_ABSX,3,7),this.setOp(this.INS_SKB,128,this.ADDR_IMM,2,2),this.setOp(this.INS_SKB,130,this.ADDR_IMM,2,2),this.setOp(this.INS_SKB,137,this.ADDR_IMM,2,2),this.setOp(this.INS_SKB,194,this.ADDR_IMM,2,2),this.setOp(this.INS_SKB,226,this.ADDR_IMM,2,2),this.setOp(this.INS_IGN,12,this.ADDR_ABS,3,4),this.setOp(this.INS_IGN,28,this.ADDR_ABSX,3,4),this.setOp(this.INS_IGN,60,this.ADDR_ABSX,3,4),this.setOp(this.INS_IGN,92,this.ADDR_ABSX,3,4),this.setOp(this.INS_IGN,124,this.ADDR_ABSX,3,4),this.setOp(this.INS_IGN,220,this.ADDR_ABSX,3,4),this.setOp(this.INS_IGN,252,this.ADDR_ABSX,3,4),this.setOp(this.INS_IGN,4,this.ADDR_ZP,2,3),this.setOp(this.INS_IGN,68,this.ADDR_ZP,2,3),this.setOp(this.INS_IGN,100,this.ADDR_ZP,2,3),this.setOp(this.INS_IGN,20,this.ADDR_ZPX,2,4),this.setOp(this.INS_IGN,52,this.ADDR_ZPX,2,4),this.setOp(this.INS_IGN,84,this.ADDR_ZPX,2,4),this.setOp(this.INS_IGN,116,this.ADDR_ZPX,2,4),this.setOp(this.INS_IGN,212,this.ADDR_ZPX,2,4),this.setOp(this.INS_IGN,244,this.ADDR_ZPX,2,4),this.cycTable=new Array(7,6,2,8,3,3,5,5,3,2,2,2,4,4,6,6,2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7,6,6,2,8,3,3,5,5,4,2,2,2,4,4,6,6,2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7,6,6,2,8,3,3,5,5,3,2,2,2,3,4,6,6,2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7,6,6,2,8,3,3,5,5,4,2,2,2,5,4,6,6,2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7,2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4,2,6,2,6,4,4,4,4,2,5,2,5,5,5,5,5,2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4,2,5,2,5,4,4,4,4,2,4,2,4,4,4,4,4,2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6,2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7,2,6,3,8,3,3,5,5,2,2,2,2,4,4,6,6,2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7),this.instname=new Array(70),this.instname[0]="ADC",this.instname[1]="AND",this.instname[2]="ASL",this.instname[3]="BCC",this.instname[4]="BCS",this.instname[5]="BEQ",this.instname[6]="BIT",this.instname[7]="BMI",this.instname[8]="BNE",this.instname[9]="BPL",this.instname[10]="BRK",this.instname[11]="BVC",this.instname[12]="BVS",this.instname[13]="CLC",this.instname[14]="CLD",this.instname[15]="CLI",this.instname[16]="CLV",this.instname[17]="CMP",this.instname[18]="CPX",this.instname[19]="CPY",this.instname[20]="DEC",this.instname[21]="DEX",this.instname[22]="DEY",this.instname[23]="EOR",this.instname[24]="INC",this.instname[25]="INX",this.instname[26]="INY",this.instname[27]="JMP",this.instname[28]="JSR",this.instname[29]="LDA",this.instname[30]="LDX",this.instname[31]="LDY",this.instname[32]="LSR",this.instname[33]="NOP",this.instname[34]="ORA",this.instname[35]="PHA",this.instname[36]="PHP",this.instname[37]="PLA",this.instname[38]="PLP",this.instname[39]="ROL",this.instname[40]="ROR",this.instname[41]="RTI",this.instname[42]="RTS",this.instname[43]="SBC",this.instname[44]="SEC",this.instname[45]="SED",this.instname[46]="SEI",this.instname[47]="STA",this.instname[48]="STX",this.instname[49]="STY",this.instname[50]="TAX",this.instname[51]="TAY",this.instname[52]="TSX",this.instname[53]="TXA",this.instname[54]="TXS",this.instname[55]="TYA",this.instname[56]="ALR",this.instname[57]="ANC",this.instname[58]="ARR",this.instname[59]="AXS",this.instname[60]="LAX",this.instname[61]="SAX",this.instname[62]="DCP",this.instname[63]="ISC",this.instname[64]="RLA",this.instname[65]="RRA",this.instname[66]="SLO",this.instname[67]="SRE",this.instname[68]="SKB",this.instname[69]="IGN",this.addrDesc=new Array("Zero Page ","Relative ","Implied ","Absolute ","Accumulator ","Immediate ","Zero Page,X ","Zero Page,Y ","Absolute,X ","Absolute,Y ","Preindexed Indirect ","Postindexed Indirect","Indirect Absolute ")};return s.prototype={INS_ADC:0,INS_AND:1,INS_ASL:2,INS_BCC:3,INS_BCS:4,INS_BEQ:5,INS_BIT:6,INS_BMI:7,INS_BNE:8,INS_BPL:9,INS_BRK:10,INS_BVC:11,INS_BVS:12,INS_CLC:13,INS_CLD:14,INS_CLI:15,INS_CLV:16,INS_CMP:17,INS_CPX:18,INS_CPY:19,INS_DEC:20,INS_DEX:21,INS_DEY:22,INS_EOR:23,INS_INC:24,INS_INX:25,INS_INY:26,INS_JMP:27,INS_JSR:28,INS_LDA:29,INS_LDX:30,INS_LDY:31,INS_LSR:32,INS_NOP:33,INS_ORA:34,INS_PHA:35,INS_PHP:36,INS_PLA:37,INS_PLP:38,INS_ROL:39,INS_ROR:40,INS_RTI:41,INS_RTS:42,INS_SBC:43,INS_SEC:44,INS_SED:45,INS_SEI:46,INS_STA:47,INS_STX:48,INS_STY:49,INS_TAX:50,INS_TAY:51,INS_TSX:52,INS_TXA:53,INS_TXS:54,INS_TYA:55,INS_ALR:56,INS_ANC:57,INS_ARR:58,INS_AXS:59,INS_LAX:60,INS_SAX:61,INS_DCP:62,INS_ISC:63,INS_RLA:64,INS_RRA:65,INS_SLO:66,INS_SRE:67,INS_SKB:68,INS_IGN:69,INS_DUMMY:70,ADDR_ZP:0,ADDR_REL:1,ADDR_IMP:2,ADDR_ABS:3,ADDR_ACC:4,ADDR_IMM:5,ADDR_ZPX:6,ADDR_ZPY:7,ADDR_ABSX:8,ADDR_ABSY:9,ADDR_PREIDXIND:10,ADDR_POSTIDXIND:11,ADDR_INDABS:12,setOp:function(t,o,e,i,r){this.opdata[o]=t&255|(e&255)<<8|(i&255)<<16|(r&255)<<24}},ut=h,ut}var ft,Ft;function Mt(){if(Ft)return ft;Ft=1;var a=function(){this.pix=new Array(64),this.fbIndex=null,this.tIndex=null,this.x=null,this.y=null,this.w=null,this.h=null,this.incX=null,this.incY=null,this.palIndex=null,this.tpri=null,this.c=null,this.initialized=!1,this.opaque=new Array(8)};return a.prototype={setBuffer:function(h){for(this.y=0;this.y<8;this.y++)this.setScanline(this.y,h[this.y],h[this.y+8])},setScanline:function(h,s,t){for(this.initialized=!0,this.tIndex=h<<3,this.x=0;this.x<8;this.x++)this.pix[this.tIndex+this.x]=(s>>7-this.x&1)+((t>>7-this.x&1)<<1),this.pix[this.tIndex+this.x]===0&&(this.opaque[h]=!1)},render:function(h,s,t,o,e,i,r,n,u,l,p,f,_){if(!(i<-7||i>=256||r<-7||r>=240))if(this.w=o-s,this.h=e-t,i<0&&(s-=i),i+o>=256&&(o=256-i),r<0&&(t-=r),r+e>=240&&(e=240-r),!l&&!p)for(this.fbIndex=(r<<8)+i,this.tIndex=0,this.y=0;this.y<8;this.y++){for(this.x=0;this.x<8;this.x++)this.x>=s&&this.x<o&&this.y>=t&&this.y<e&&(this.palIndex=this.pix[this.tIndex],this.tpri=_[this.fbIndex],this.palIndex!==0&&f<=(this.tpri&255)&&(h[this.fbIndex]=u[this.palIndex+n],this.tpri=this.tpri&3840|f,_[this.fbIndex]=this.tpri)),this.fbIndex++,this.tIndex++;this.fbIndex-=8,this.fbIndex+=256}else if(l&&!p)for(this.fbIndex=(r<<8)+i,this.tIndex=7,this.y=0;this.y<8;this.y++){for(this.x=0;this.x<8;this.x++)this.x>=s&&this.x<o&&this.y>=t&&this.y<e&&(this.palIndex=this.pix[this.tIndex],this.tpri=_[this.fbIndex],this.palIndex!==0&&f<=(this.tpri&255)&&(h[this.fbIndex]=u[this.palIndex+n],this.tpri=this.tpri&3840|f,_[this.fbIndex]=this.tpri)),this.fbIndex++,this.tIndex--;this.fbIndex-=8,this.fbIndex+=256,this.tIndex+=16}else if(p&&!l)for(this.fbIndex=(r<<8)+i,this.tIndex=56,this.y=0;this.y<8;this.y++){for(this.x=0;this.x<8;this.x++)this.x>=s&&this.x<o&&this.y>=t&&this.y<e&&(this.palIndex=this.pix[this.tIndex],this.tpri=_[this.fbIndex],this.palIndex!==0&&f<=(this.tpri&255)&&(h[this.fbIndex]=u[this.palIndex+n],this.tpri=this.tpri&3840|f,_[this.fbIndex]=this.tpri)),this.fbIndex++,this.tIndex++;this.fbIndex-=8,this.fbIndex+=256,this.tIndex-=16}else for(this.fbIndex=(r<<8)+i,this.tIndex=63,this.y=0;this.y<8;this.y++){for(this.x=0;this.x<8;this.x++)this.x>=s&&this.x<o&&this.y>=t&&this.y<e&&(this.palIndex=this.pix[this.tIndex],this.tpri=_[this.fbIndex],this.palIndex!==0&&f<=(this.tpri&255)&&(h[this.fbIndex]=u[this.palIndex+n],this.tpri=this.tpri&3840|f,_[this.fbIndex]=this.tpri)),this.fbIndex++,this.tIndex--;this.fbIndex-=8,this.fbIndex+=256}},isTransparent:function(h,s){return this.pix[(s<<3)+h]===0},toJSON:function(){return{opaque:this.opaque,pix:this.pix}},fromJSON:function(h){this.opaque=h.opaque,this.pix=h.pix}},ft=a,ft}var pt,yt;function Ri(){if(yt)return pt;yt=1;var a=Mt(),h=lt(),s=function(e){this.nes=e,this.vramMem=null,this.spriteMem=null,this.vramAddress=null,this.vramTmpAddress=null,this.vramBufferedReadValue=null,this.firstWrite=null,this.sramAddress=null,this.currentMirroring=null,this.requestEndFrame=null,this.nmiOk=null,this.dummyCycleToggle=null,this.validTileData=null,this.nmiCounter=null,this.scanlineAlreadyRendered=null,this.f_nmiOnVblank=null,this.f_spriteSize=null,this.f_bgPatternTable=null,this.f_spPatternTable=null,this.f_addrInc=null,this.f_nTblAddress=null,this.f_color=null,this.f_spVisibility=null,this.f_bgVisibility=null,this.f_spClipping=null,this.f_bgClipping=null,this.f_dispType=null,this.cntFV=null,this.cntV=null,this.cntH=null,this.cntVT=null,this.cntHT=null,this.regFV=null,this.regV=null,this.regH=null,this.regVT=null,this.regHT=null,this.regFH=null,this.regS=null,this.curNt=null,this.attrib=null,this.buffer=null,this.bgbuffer=null,this.pixrendered=null,this.validTileData=null,this.scantile=null,this.scanline=null,this.lastRenderedScanline=null,this.curX=null,this.sprX=null,this.sprY=null,this.sprTile=null,this.sprCol=null,this.vertFlip=null,this.horiFlip=null,this.bgPriority=null,this.spr0HitX=null,this.spr0HitY=null,this.hitSpr0=null,this.sprPalette=null,this.imgPalette=null,this.ptTile=null,this.ntable1=null,this.currentMirroring=null,this.nameTable=null,this.vramMirrorTable=null,this.palTable=null,this.showSpr0Hit=!1,this.clipToTvSize=!0,this.reset()};s.prototype={STATUS_VRAMWRITE:4,STATUS_SLSPRITECOUNT:5,STATUS_SPRITE0HIT:6,STATUS_VBLANK:7,reset:function(){var e;for(this.vramMem=new Array(32768),this.spriteMem=new Array(256),e=0;e<this.vramMem.length;e++)this.vramMem[e]=0;for(e=0;e<this.spriteMem.length;e++)this.spriteMem[e]=0;for(this.vramAddress=null,this.vramTmpAddress=null,this.vramBufferedReadValue=0,this.firstWrite=!0,this.sramAddress=0,this.currentMirroring=-1,this.requestEndFrame=!1,this.nmiOk=!1,this.dummyCycleToggle=!1,this.validTileData=!1,this.nmiCounter=0,this.scanlineAlreadyRendered=null,this.f_nmiOnVblank=0,this.f_spriteSize=0,this.f_bgPatternTable=0,this.f_spPatternTable=0,this.f_addrInc=0,this.f_nTblAddress=0,this.f_color=0,this.f_spVisibility=0,this.f_bgVisibility=0,this.f_spClipping=0,this.f_bgClipping=0,this.f_dispType=0,this.cntFV=0,this.cntV=0,this.cntH=0,this.cntVT=0,this.cntHT=0,this.regFV=0,this.regV=0,this.regH=0,this.regVT=0,this.regHT=0,this.regFH=0,this.regS=0,this.curNt=null,this.attrib=new Array(32),this.buffer=new Array(256*240),this.bgbuffer=new Array(256*240),this.pixrendered=new Array(256*240),this.validTileData=null,this.scantile=new Array(32),this.scanline=0,this.lastRenderedScanline=-1,this.curX=0,this.sprX=new Array(64),this.sprY=new Array(64),this.sprTile=new Array(64),this.sprCol=new Array(64),this.vertFlip=new Array(64),this.horiFlip=new Array(64),this.bgPriority=new Array(64),this.spr0HitX=0,this.spr0HitY=0,this.hitSpr0=!1,this.sprPalette=new Array(16),this.imgPalette=new Array(16),this.ptTile=new Array(512),e=0;e<512;e++)this.ptTile[e]=new a;for(this.ntable1=new Array(4),this.currentMirroring=-1,this.nameTable=new Array(4),e=0;e<4;e++)this.nameTable[e]=new t(32,32,"Nt"+e);for(this.vramMirrorTable=new Array(32768),e=0;e<32768;e++)this.vramMirrorTable[e]=e;this.palTable=new o,this.palTable.loadNTSCPalette(),this.updateControlReg1(0),this.updateControlReg2(0)},setMirroring:function(e){if(e!==this.currentMirroring){this.currentMirroring=e,this.triggerRendering(),this.vramMirrorTable===null&&(this.vramMirrorTable=new Array(32768));for(var i=0;i<32768;i++)this.vramMirrorTable[i]=i;this.defineMirrorRegion(16160,16128,32),this.defineMirrorRegion(16192,16128,32),this.defineMirrorRegion(16256,16128,32),this.defineMirrorRegion(16320,16128,32),this.defineMirrorRegion(12288,8192,3840),this.defineMirrorRegion(16384,0,16384),e===this.nes.rom.HORIZONTAL_MIRRORING?(this.ntable1[0]=0,this.ntable1[1]=0,this.ntable1[2]=1,this.ntable1[3]=1,this.defineMirrorRegion(9216,8192,1024),this.defineMirrorRegion(11264,10240,1024)):e===this.nes.rom.VERTICAL_MIRRORING?(this.ntable1[0]=0,this.ntable1[1]=1,this.ntable1[2]=0,this.ntable1[3]=1,this.defineMirrorRegion(10240,8192,1024),this.defineMirrorRegion(11264,9216,1024)):e===this.nes.rom.SINGLESCREEN_MIRRORING?(this.ntable1[0]=0,this.ntable1[1]=0,this.ntable1[2]=0,this.ntable1[3]=0,this.defineMirrorRegion(9216,8192,1024),this.defineMirrorRegion(10240,8192,1024),this.defineMirrorRegion(11264,8192,1024)):e===this.nes.rom.SINGLESCREEN_MIRRORING2?(this.ntable1[0]=1,this.ntable1[1]=1,this.ntable1[2]=1,this.ntable1[3]=1,this.defineMirrorRegion(9216,9216,1024),this.defineMirrorRegion(10240,9216,1024),this.defineMirrorRegion(11264,9216,1024)):(this.ntable1[0]=0,this.ntable1[1]=1,this.ntable1[2]=2,this.ntable1[3]=3)}},defineMirrorRegion:function(e,i,r){for(var n=0;n<r;n++)this.vramMirrorTable[e+n]=i+n},startVBlank:function(){this.nes.cpu.requestIrq(this.nes.cpu.IRQ_NMI),this.lastRenderedScanline<239&&this.renderFramePartially(this.lastRenderedScanline+1,240-this.lastRenderedScanline),this.endFrame(),this.lastRenderedScanline=-1},endScanline:function(){switch(this.scanline){case 19:this.dummyCycleToggle&&(this.curX=1,this.dummyCycleToggle=!this.dummyCycleToggle);break;case 20:this.setStatusFlag(this.STATUS_VBLANK,!1),this.setStatusFlag(this.STATUS_SPRITE0HIT,!1),this.hitSpr0=!1,this.spr0HitX=-1,this.spr0HitY=-1,(this.f_bgVisibility===1||this.f_spVisibility===1)&&(this.cntFV=this.regFV,this.cntV=this.regV,this.cntH=this.regH,this.cntVT=this.regVT,this.cntHT=this.regHT,this.f_bgVisibility===1&&this.renderBgScanline(!1,0)),this.f_bgVisibility===1&&this.f_spVisibility===1&&this.checkSprite0(0),(this.f_bgVisibility===1||this.f_spVisibility===1)&&this.nes.mmap.clockIrqCounter();break;case 261:this.setStatusFlag(this.STATUS_VBLANK,!0),this.requestEndFrame=!0,this.nmiCounter=9,this.scanline=-1;break;default:this.scanline>=21&&this.scanline<=260&&(this.f_bgVisibility===1&&(this.scanlineAlreadyRendered||(this.cntHT=this.regHT,this.cntH=this.regH,this.renderBgScanline(!0,this.scanline+1-21)),this.scanlineAlreadyRendered=!1,!this.hitSpr0&&this.f_spVisibility===1&&this.sprX[0]>=-7&&this.sprX[0]<256&&this.sprY[0]+1<=this.scanline-20&&this.sprY[0]+1+(this.f_spriteSize===0?8:16)>=this.scanline-20&&this.checkSprite0(this.scanline-20)&&(this.hitSpr0=!0)),(this.f_bgVisibility===1||this.f_spVisibility===1)&&this.nes.mmap.clockIrqCounter())}this.scanline++,this.regsToAddress(),this.cntsToAddress()},startFrame:function(){var e=0;if(this.f_dispType===0)e=this.imgPalette[0];else switch(this.f_color){case 0:e=0;break;case 1:e=65280;break;case 2:e=16711680;break;case 3:e=0;break;case 4:e=255;break;default:e=0}var i=this.buffer,r;for(r=0;r<256*240;r++)i[r]=e;var n=this.pixrendered;for(r=0;r<n.length;r++)n[r]=65},endFrame:function(){var e,i,r,n=this.buffer;if(this.showSpr0Hit){if(this.sprX[0]>=0&&this.sprX[0]<256&&this.sprY[0]>=0&&this.sprY[0]<240){for(e=0;e<256;e++)n[(this.sprY[0]<<8)+e]=16733525;for(e=0;e<240;e++)n[(e<<8)+this.sprX[0]]=16733525}if(this.spr0HitX>=0&&this.spr0HitX<256&&this.spr0HitY>=0&&this.spr0HitY<240){for(e=0;e<256;e++)n[(this.spr0HitY<<8)+e]=5635925;for(e=0;e<240;e++)n[(e<<8)+this.spr0HitX]=5635925}}if(this.clipToTvSize||this.f_bgClipping===0||this.f_spClipping===0)for(r=0;r<240;r++)for(i=0;i<8;i++)n[(r<<8)+i]=0;if(this.clipToTvSize)for(r=0;r<240;r++)for(i=0;i<8;i++)n[(r<<8)+255-i]=0;if(this.clipToTvSize)for(r=0;r<8;r++)for(i=0;i<256;i++)n[(r<<8)+i]=0,n[(239-r<<8)+i]=0;this.nes.ui.writeFrame(n)},updateControlReg1:function(e){this.triggerRendering(),this.f_nmiOnVblank=e>>7&1,this.f_spriteSize=e>>5&1,this.f_bgPatternTable=e>>4&1,this.f_spPatternTable=e>>3&1,this.f_addrInc=e>>2&1,this.f_nTblAddress=e&3,this.regV=e>>1&1,this.regH=e&1,this.regS=e>>4&1},updateControlReg2:function(e){this.triggerRendering(),this.f_color=e>>5&7,this.f_spVisibility=e>>4&1,this.f_bgVisibility=e>>3&1,this.f_spClipping=e>>2&1,this.f_bgClipping=e>>1&1,this.f_dispType=e&1,this.f_dispType===0&&this.palTable.setEmphasis(this.f_color),this.updatePalettes()},setStatusFlag:function(e,i){var r=1<<e;this.nes.cpu.mem[8194]=this.nes.cpu.mem[8194]&255-r|(i?r:0)},readStatusRegister:function(){var e=this.nes.cpu.mem[8194];return this.firstWrite=!0,this.setStatusFlag(this.STATUS_VBLANK,!1),e},writeSRAMAddress:function(e){this.sramAddress=e},sramLoad:function(){return this.spriteMem[this.sramAddress]},sramWrite:function(e){this.spriteMem[this.sramAddress]=e,this.spriteRamWriteUpdate(this.sramAddress,e),this.sramAddress++,this.sramAddress%=256},scrollWrite:function(e){this.triggerRendering(),this.firstWrite?(this.regHT=e>>3&31,this.regFH=e&7):(this.regFV=e&7,this.regVT=e>>3&31),this.firstWrite=!this.firstWrite},writeVRAMAddress:function(e){this.firstWrite?(this.regFV=e>>4&3,this.regV=e>>3&1,this.regH=e>>2&1,this.regVT=this.regVT&7|(e&3)<<3):(this.triggerRendering(),this.regVT=this.regVT&24|e>>5&7,this.regHT=e&31,this.cntFV=this.regFV,this.cntV=this.regV,this.cntH=this.regH,this.cntVT=this.regVT,this.cntHT=this.regHT,this.checkSprite0(this.scanline-20)),this.firstWrite=!this.firstWrite,this.cntsToAddress(),this.vramAddress<8192&&this.nes.mmap.latchAccess(this.vramAddress)},vramLoad:function(){var e;return this.cntsToAddress(),this.regsToAddress(),this.vramAddress<=16127?(e=this.vramBufferedReadValue,this.vramAddress<8192?this.vramBufferedReadValue=this.vramMem[this.vramAddress]:this.vramBufferedReadValue=this.mirroredLoad(this.vramAddress),this.vramAddress<8192&&this.nes.mmap.latchAccess(this.vramAddress),this.vramAddress+=this.f_addrInc===1?32:1,this.cntsFromAddress(),this.regsFromAddress(),e):(e=this.mirroredLoad(this.vramAddress),this.vramAddress+=this.f_addrInc===1?32:1,this.cntsFromAddress(),this.regsFromAddress(),e)},vramWrite:function(e){this.triggerRendering(),this.cntsToAddress(),this.regsToAddress(),this.vramAddress>=8192?this.mirroredWrite(this.vramAddress,e):(this.writeMem(this.vramAddress,e),this.nes.mmap.latchAccess(this.vramAddress)),this.vramAddress+=this.f_addrInc===1?32:1,this.regsFromAddress(),this.cntsFromAddress()},sramDMA:function(e){for(var i=e*256,r,n=this.sramAddress;n<256;n++)r=this.nes.cpu.mem[i+n],this.spriteMem[n]=r,this.spriteRamWriteUpdate(n,r);this.nes.cpu.haltCycles(513)},regsFromAddress:function(){var e=this.vramTmpAddress>>8&255;this.regFV=e>>4&7,this.regV=e>>3&1,this.regH=e>>2&1,this.regVT=this.regVT&7|(e&3)<<3,e=this.vramTmpAddress&255,this.regVT=this.regVT&24|e>>5&7,this.regHT=e&31},cntsFromAddress:function(){var e=this.vramAddress>>8&255;this.cntFV=e>>4&3,this.cntV=e>>3&1,this.cntH=e>>2&1,this.cntVT=this.cntVT&7|(e&3)<<3,e=this.vramAddress&255,this.cntVT=this.cntVT&24|e>>5&7,this.cntHT=e&31},regsToAddress:function(){var e=(this.regFV&7)<<4;e|=(this.regV&1)<<3,e|=(this.regH&1)<<2,e|=this.regVT>>3&3;var i=(this.regVT&7)<<5;i|=this.regHT&31,this.vramTmpAddress=(e<<8|i)&32767},cntsToAddress:function(){var e=(this.cntFV&7)<<4;e|=(this.cntV&1)<<3,e|=(this.cntH&1)<<2,e|=this.cntVT>>3&3;var i=(this.cntVT&7)<<5;i|=this.cntHT&31,this.vramAddress=(e<<8|i)&32767},incTileCounter:function(e){for(var i=e;i!==0;i--)this.cntHT++,this.cntHT===32&&(this.cntHT=0,this.cntVT++,this.cntVT>=30&&(this.cntH++,this.cntH===2&&(this.cntH=0,this.cntV++,this.cntV===2&&(this.cntV=0,this.cntFV++,this.cntFV&=7))))},mirroredLoad:function(e){return this.vramMem[this.vramMirrorTable[e]]},mirroredWrite:function(e,i){if(e>=16128&&e<16160)e===16128||e===16144?(this.writeMem(16128,i),this.writeMem(16144,i)):e===16132||e===16148?(this.writeMem(16132,i),this.writeMem(16148,i)):e===16136||e===16152?(this.writeMem(16136,i),this.writeMem(16152,i)):e===16140||e===16156?(this.writeMem(16140,i),this.writeMem(16156,i)):this.writeMem(e,i);else if(e<this.vramMirrorTable.length)this.writeMem(this.vramMirrorTable[e],i);else throw new Error("Invalid VRAM address: "+e.toString(16))},triggerRendering:function(){this.scanline>=21&&this.scanline<=260&&(this.renderFramePartially(this.lastRenderedScanline+1,this.scanline-21-this.lastRenderedScanline),this.lastRenderedScanline=this.scanline-21)},renderFramePartially:function(e,i){if(this.f_spVisibility===1&&this.renderSpritesPartially(e,i,!0),this.f_bgVisibility===1){var r=e<<8,n=e+i<<8;n>61440&&(n=61440);for(var u=this.buffer,l=this.bgbuffer,p=this.pixrendered,f=r;f<n;f++)p[f]>255&&(u[f]=l[f])}this.f_spVisibility===1&&this.renderSpritesPartially(e,i,!1),this.validTileData=!1},renderBgScanline:function(e,i){var r=this.regS===0?0:256,n=(i<<8)-this.regFH;if(this.curNt=this.ntable1[this.cntV+this.cntV+this.cntH],this.cntHT=this.regHT,this.cntH=this.regH,this.curNt=this.ntable1[this.cntV+this.cntV+this.cntH],i<240&&i-this.cntFV>=0){for(var u=this.cntFV<<3,l=this.scantile,p=this.attrib,f=this.ptTile,_=this.nameTable,E=this.imgPalette,O=this.pixrendered,I=e?this.bgbuffer:this.buffer,C,v,A,X,F=0;F<32;F++){if(i>=0){if(this.validTileData){if(C=l[F],typeof C>"u")continue;v=C.pix,A=p[F]}else{if(C=f[r+_[this.curNt].getTileIndex(this.cntHT,this.cntVT)],typeof C>"u")continue;v=C.pix,A=_[this.curNt].getAttrib(this.cntHT,this.cntVT),l[F]=C,p[F]=A}var M=0,Y=(F<<3)-this.regFH;if(Y>-8)if(Y<0&&(n-=Y,M=-Y),C.opaque[this.cntFV])for(;M<8;M++)I[n]=E[v[u+M]+A],O[n]|=256,n++;else for(;M<8;M++)X=v[u+M],X!==0&&(I[n]=E[X+A],O[n]|=256),n++}++this.cntHT===32&&(this.cntHT=0,this.cntH++,this.cntH%=2,this.curNt=this.ntable1[(this.cntV<<1)+this.cntH])}this.validTileData=!0}this.cntFV++,this.cntFV===8&&(this.cntFV=0,this.cntVT++,this.cntVT===30?(this.cntVT=0,this.cntV++,this.cntV%=2,this.curNt=this.ntable1[(this.cntV<<1)+this.cntH]):this.cntVT===32&&(this.cntVT=0),this.validTileData=!1)},renderSpritesPartially:function(e,i,r){if(this.f_spVisibility===1){for(var n=0;n<64;n++)if(this.bgPriority[n]===r&&this.sprX[n]>=0&&this.sprX[n]<256&&this.sprY[n]+8>=e&&this.sprY[n]<e+i)if(this.f_spriteSize===0)this.srcy1=0,this.srcy2=8,this.sprY[n]<e&&(this.srcy1=e-this.sprY[n]-1),this.sprY[n]+8>e+i&&(this.srcy2=e+i-this.sprY[n]+1),this.f_spPatternTable===0?this.ptTile[this.sprTile[n]].render(this.buffer,0,this.srcy1,8,this.srcy2,this.sprX[n],this.sprY[n]+1,this.sprCol[n],this.sprPalette,this.horiFlip[n],this.vertFlip[n],n,this.pixrendered):this.ptTile[this.sprTile[n]+256].render(this.buffer,0,this.srcy1,8,this.srcy2,this.sprX[n],this.sprY[n]+1,this.sprCol[n],this.sprPalette,this.horiFlip[n],this.vertFlip[n],n,this.pixrendered);else{var u=this.sprTile[n];u&1&&(u=this.sprTile[n]-1+256);var l=0,p=8;this.sprY[n]<e&&(l=e-this.sprY[n]-1),this.sprY[n]+8>e+i&&(p=e+i-this.sprY[n]),this.ptTile[u+(this.vertFlip[n]?1:0)].render(this.buffer,0,l,8,p,this.sprX[n],this.sprY[n]+1,this.sprCol[n],this.sprPalette,this.horiFlip[n],this.vertFlip[n],n,this.pixrendered),l=0,p=8,this.sprY[n]+8<e&&(l=e-(this.sprY[n]+8+1)),this.sprY[n]+16>e+i&&(p=e+i-(this.sprY[n]+8)),this.ptTile[u+(this.vertFlip[n]?0:1)].render(this.buffer,0,l,8,p,this.sprX[n],this.sprY[n]+1+8,this.sprCol[n],this.sprPalette,this.horiFlip[n],this.vertFlip[n],n,this.pixrendered)}}},checkSprite0:function(e){this.spr0HitX=-1,this.spr0HitY=-1;var i,r=this.f_spPatternTable===0?0:256,n,u,l,p,f;if(n=this.sprX[0],u=this.sprY[0]+1,this.f_spriteSize===0){if(u<=e&&u+8>e&&n>=-7&&n<256)if(l=this.ptTile[this.sprTile[0]+r],this.vertFlip[0]?i=7-(e-u):i=e-u,i*=8,f=e*256+n,this.horiFlip[0])for(p=7;p>=0;p--){if(n>=0&&n<256&&f>=0&&f<61440&&this.pixrendered[f]!==0&&l.pix[i+p]!==0)return this.spr0HitX=f%256,this.spr0HitY=e,!0;n++,f++}else for(p=0;p<8;p++){if(n>=0&&n<256&&f>=0&&f<61440&&this.pixrendered[f]!==0&&l.pix[i+p]!==0)return this.spr0HitX=f%256,this.spr0HitY=e,!0;n++,f++}}else if(u<=e&&u+16>e&&n>=-7&&n<256)if(this.vertFlip[0]?i=15-(e-u):i=e-u,i<8?l=this.ptTile[this.sprTile[0]+(this.vertFlip[0]?1:0)+(this.sprTile[0]&1?255:0)]:(l=this.ptTile[this.sprTile[0]+(this.vertFlip[0]?0:1)+(this.sprTile[0]&1?255:0)],this.vertFlip[0]?i=15-i:i-=8),i*=8,f=e*256+n,this.horiFlip[0])for(p=7;p>=0;p--){if(n>=0&&n<256&&f>=0&&f<61440&&this.pixrendered[f]!==0&&l.pix[i+p]!==0)return this.spr0HitX=f