jsnes/jsnes.min.js

2 lines
102 KiB
JavaScript
Raw Normal View History

2022-04-02 14:15:45 +00:00
!function(t,s){"object"==typeof exports&&"object"==typeof module?module.exports=s():"function"==typeof define&&define.amd?define("jsnes",[],s):"object"==typeof exports?exports.jsnes=s():t.jsnes=s()}(self,(()=>{return t={313:t=>{var s=function(){this.state=new Array(8);for(var t=0;t<this.state.length;t++)this.state[t]=64};s.BUTTON_A=0,s.BUTTON_B=1,s.BUTTON_SELECT=2,s.BUTTON_START=3,s.BUTTON_UP=4,s.BUTTON_DOWN=5,s.BUTTON_LEFT=6,s.BUTTON_RIGHT=7,s.prototype={buttonDown:function(t){this.state[t]=65},buttonUp:function(t){this.state[t]=64}},t.exports=s},411:(t,s,i)=>{var e=i(821),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 s=0;s<4;s++){var i=2048*s;this.mem[i+8]=247,this.mem[i+9]=239,this.mem[i+10]=223,this.mem[i+15]=191}for(var e=8193;e<this.mem.length;e++)this.mem[e]=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 r).opdata,this.cyclesToHalt=0,this.crash=!1,this.irqRequested=!1,this.irqType=null},emulate:function(){var t,s;if(this.irqRequested){switch(t=this.F_CARRY|(0===this.F_ZERO?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(0!==this.F_INTERRUPT)break;this.doIrq(t);break;case 1:this.doNonMaskableInterrupt(t);break;case 2:this.doResetInterrupt()}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 i=this.opdata[this.nes.mmap.load(this.REG_PC+1)],e=i>>24,h=0,r=i>>8&255,n=this.REG_PC;this.REG_PC+=i>>16&255;var a=0;switch(r){case 0:a=this.load(n+2);break;case 1:a=this.load(n+2),a+=a<128?this.REG_PC:this.REG_PC-256;break;case 2:break;case 3:a=this.load16bit(n+2);break;case 4:a=this.REG_ACC;break;case 5:a=this.REG_PC;break;case 6:a=this.load(n+2)+this.REG_X&255;break;case 7:a=this.load(n+2)+this.REG_Y&255;break;case 8:(65280&(a=this.load16bit(n+2)))!=(a+this.REG_X&65280)&&(h=1),a+=this.REG_X;break;case 9:(65280&(a=this.load16bit(n+2)))!=(a+this.REG_Y&65280)&&(h=1),a+=this.REG_Y;break;case 10:(65280&(a=this.load(n+2)))!=(a+this.REG_X&65280)&&(h=1),a+=this.REG_X,a&=255,a=this.load16bit(a);break;case 11:(65280&(a=this.load16bit(this.load(n+2))))!=(a+this.REG_Y&65280)&&(h=1),a+=this.REG_Y;break;case 12:a=(a=this.load16bit(n+2))<8191?this.mem[a]+(this.mem[65280&a|1+(255&a)&255]<<8):this.nes.mmap.load(a)+(this.nes.mmap.load(65280&a|1+(255&a)&255)<<8)}switch(a&=65535,255&i){case 0:t=this.REG_ACC+this.load(a)+this.F_CARRY,0==(128&(this.REG_ACC^this.load(a)))&&0!=(128&(this.REG_ACC^t))?this.F_OVERFLOW=1:this.F_OVERFLOW=0,this.F_CARRY=t>255?1:0,this.F_SIGN=t>>7&1,this.F_ZERO=255&t,this.REG_ACC=255&t,e+=h;break;case 1:this.REG_ACC=this.REG_ACC&this.load(a),this.F_SIGN=this.REG_ACC>>7&1,this.F_ZERO=this.REG_ACC,11!==r&&(e+=h);break;case 2:4===r?(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(a),this.F_CARRY=t>>7&1,t=t<<1&255,this.F_SIGN=t>>7&1,this.F_ZERO=t,this.write(a,t));break;case 3:0===this.F_CARRY&&(e+=(65280&n)!=(65280&a)?2:1,this.REG_PC=a);break;case 4:1===this.F_CARRY&&(e+=(65280&n)!=(65280&a)?2:1,this.REG_PC=a);break;case 5:0===this.F_ZERO&&(e+=(65280&n)!=(6528
//# sourceMappingURL=jsnes.js.map