diff options
author | Ben Firshman <ben@firshman.co.uk> | 2010-06-10 16:17:06 +0100 |
---|---|---|
committer | Ben Firshman <ben@firshman.co.uk> | 2010-06-10 16:17:06 +0100 |
commit | 795d29b21a9cfc02212fe32bcb69850e667299e2 (patch) | |
tree | a3b7190122cb075c264002b24c2aec27f9e4632c /js.2/cpu.js | |
parent | 0eb5bcd82a332cfa6d7c3c8ec38ef3f95245b964 (diff) | |
download | jsnes-795d29b21a9cfc02212fe32bcb69850e667299e2.zip jsnes-795d29b21a9cfc02212fe32bcb69850e667299e2.tar.gz jsnes-795d29b21a9cfc02212fe32bcb69850e667299e2.tar.bz2 |
NES -> JSNES
Diffstat (limited to 'js.2/cpu.js')
-rw-r--r-- | js.2/cpu.js | 916 |
1 files changed, 458 insertions, 458 deletions
diff --git a/js.2/cpu.js b/js.2/cpu.js index bde3f2a..ccf692c 100644 --- a/js.2/cpu.js +++ b/js.2/cpu.js @@ -1,4 +1,4 @@ -NES.CPU = function(nes) { +JSNES.CPU = function(nes) { this.nes = nes; // Keep Chrome happy @@ -31,7 +31,7 @@ NES.CPU = function(nes) { this.reset(); } -NES.CPU.prototype = { +JSNES.CPU.prototype = { // IRQ Types IRQ_NORMAL: 0, IRQ_NMI: 1, @@ -84,7 +84,7 @@ NES.CPU.prototype = { this.F_BRK_NEW = 1; this.palCnt = 0; - this.opdata = new NES.CPU.OpData().opdata; + this.opdata = new JSNES.CPU.OpData().opdata; this.cyclesToHalt = 0; // Reset crash flag: @@ -1187,470 +1187,470 @@ NES.CPU.prototype = { } // Generates and provides an array of details about instructions -NES.CPU.OpData = function() { +JSNES.CPU.OpData = function() { this.opdata = new Array(256); // Set all to invalid instruction (to detect crashes): - for(var i=0;i<256;i++) this.opdata[i]=0xFF; - - // Now fill in all valid opcodes: - - // ADC: - this.setOp(this.INS_ADC,0x69,this.ADDR_IMM,2,2); - this.setOp(this.INS_ADC,0x65,this.ADDR_ZP,2,3); - this.setOp(this.INS_ADC,0x75,this.ADDR_ZPX,2,4); - this.setOp(this.INS_ADC,0x6D,this.ADDR_ABS,3,4); - this.setOp(this.INS_ADC,0x7D,this.ADDR_ABSX,3,4); - this.setOp(this.INS_ADC,0x79,this.ADDR_ABSY,3,4); - this.setOp(this.INS_ADC,0x61,this.ADDR_PREIDXIND,2,6); - this.setOp(this.INS_ADC,0x71,this.ADDR_POSTIDXIND,2,5); - - // AND: - this.setOp(this.INS_AND,0x29,this.ADDR_IMM,2,2); - this.setOp(this.INS_AND,0x25,this.ADDR_ZP,2,3); - this.setOp(this.INS_AND,0x35,this.ADDR_ZPX,2,4); - this.setOp(this.INS_AND,0x2D,this.ADDR_ABS,3,4); - this.setOp(this.INS_AND,0x3D,this.ADDR_ABSX,3,4); - this.setOp(this.INS_AND,0x39,this.ADDR_ABSY,3,4); - this.setOp(this.INS_AND,0x21,this.ADDR_PREIDXIND,2,6); - this.setOp(this.INS_AND,0x31,this.ADDR_POSTIDXIND,2,5); - - // ASL: - this.setOp(this.INS_ASL,0x0A,this.ADDR_ACC,1,2); - this.setOp(this.INS_ASL,0x06,this.ADDR_ZP,2,5); - this.setOp(this.INS_ASL,0x16,this.ADDR_ZPX,2,6); - this.setOp(this.INS_ASL,0x0E,this.ADDR_ABS,3,6); - this.setOp(this.INS_ASL,0x1E,this.ADDR_ABSX,3,7); - - // BCC: - this.setOp(this.INS_BCC,0x90,this.ADDR_REL,2,2); - - // BCS: - this.setOp(this.INS_BCS,0xB0,this.ADDR_REL,2,2); - - // BEQ: - this.setOp(this.INS_BEQ,0xF0,this.ADDR_REL,2,2); - - // BIT: - this.setOp(this.INS_BIT,0x24,this.ADDR_ZP,2,3); - this.setOp(this.INS_BIT,0x2C,this.ADDR_ABS,3,4); - - // BMI: - this.setOp(this.INS_BMI,0x30,this.ADDR_REL,2,2); - - // BNE: - this.setOp(this.INS_BNE,0xD0,this.ADDR_REL,2,2); - - // BPL: - this.setOp(this.INS_BPL,0x10,this.ADDR_REL,2,2); - - // BRK: - this.setOp(this.INS_BRK,0x00,this.ADDR_IMP,1,7); - - // BVC: - this.setOp(this.INS_BVC,0x50,this.ADDR_REL,2,2); - - // BVS: - this.setOp(this.INS_BVS,0x70,this.ADDR_REL,2,2); - - // CLC: - this.setOp(this.INS_CLC,0x18,this.ADDR_IMP,1,2); - - // CLD: - this.setOp(this.INS_CLD,0xD8,this.ADDR_IMP,1,2); - - // CLI: - this.setOp(this.INS_CLI,0x58,this.ADDR_IMP,1,2); - - // CLV: - this.setOp(this.INS_CLV,0xB8,this.ADDR_IMP,1,2); - - // CMP: - this.setOp(this.INS_CMP,0xC9,this.ADDR_IMM,2,2); - this.setOp(this.INS_CMP,0xC5,this.ADDR_ZP,2,3); - this.setOp(this.INS_CMP,0xD5,this.ADDR_ZPX,2,4); - this.setOp(this.INS_CMP,0xCD,this.ADDR_ABS,3,4); - this.setOp(this.INS_CMP,0xDD,this.ADDR_ABSX,3,4); - this.setOp(this.INS_CMP,0xD9,this.ADDR_ABSY,3,4); - this.setOp(this.INS_CMP,0xC1,this.ADDR_PREIDXIND,2,6); - this.setOp(this.INS_CMP,0xD1,this.ADDR_POSTIDXIND,2,5); - - // CPX: - this.setOp(this.INS_CPX,0xE0,this.ADDR_IMM,2,2); - this.setOp(this.INS_CPX,0xE4,this.ADDR_ZP,2,3); - this.setOp(this.INS_CPX,0xEC,this.ADDR_ABS,3,4); - - // CPY: - this.setOp(this.INS_CPY,0xC0,this.ADDR_IMM,2,2); - this.setOp(this.INS_CPY,0xC4,this.ADDR_ZP,2,3); - this.setOp(this.INS_CPY,0xCC,this.ADDR_ABS,3,4); - - // DEC: - this.setOp(this.INS_DEC,0xC6,this.ADDR_ZP,2,5); - this.setOp(this.INS_DEC,0xD6,this.ADDR_ZPX,2,6); - this.setOp(this.INS_DEC,0xCE,this.ADDR_ABS,3,6); - this.setOp(this.INS_DEC,0xDE,this.ADDR_ABSX,3,7); - - // DEX: - this.setOp(this.INS_DEX,0xCA,this.ADDR_IMP,1,2); - - // DEY: - this.setOp(this.INS_DEY,0x88,this.ADDR_IMP,1,2); - - // EOR: - this.setOp(this.INS_EOR,0x49,this.ADDR_IMM,2,2); - this.setOp(this.INS_EOR,0x45,this.ADDR_ZP,2,3); - this.setOp(this.INS_EOR,0x55,this.ADDR_ZPX,2,4); - this.setOp(this.INS_EOR,0x4D,this.ADDR_ABS,3,4); - this.setOp(this.INS_EOR,0x5D,this.ADDR_ABSX,3,4); - this.setOp(this.INS_EOR,0x59,this.ADDR_ABSY,3,4); - this.setOp(this.INS_EOR,0x41,this.ADDR_PREIDXIND,2,6); - this.setOp(this.INS_EOR,0x51,this.ADDR_POSTIDXIND,2,5); - - // INC: - this.setOp(this.INS_INC,0xE6,this.ADDR_ZP,2,5); - this.setOp(this.INS_INC,0xF6,this.ADDR_ZPX,2,6); - this.setOp(this.INS_INC,0xEE,this.ADDR_ABS,3,6); - this.setOp(this.INS_INC,0xFE,this.ADDR_ABSX,3,7); - - // INX: - this.setOp(this.INS_INX,0xE8,this.ADDR_IMP,1,2); - - // INY: - this.setOp(this.INS_INY,0xC8,this.ADDR_IMP,1,2); - - // JMP: - this.setOp(this.INS_JMP,0x4C,this.ADDR_ABS,3,3); - this.setOp(this.INS_JMP,0x6C,this.ADDR_INDABS,3,5); - - // JSR: - this.setOp(this.INS_JSR,0x20,this.ADDR_ABS,3,6); - - // LDA: - this.setOp(this.INS_LDA,0xA9,this.ADDR_IMM,2,2); - this.setOp(this.INS_LDA,0xA5,this.ADDR_ZP,2,3); - this.setOp(this.INS_LDA,0xB5,this.ADDR_ZPX,2,4); - this.setOp(this.INS_LDA,0xAD,this.ADDR_ABS,3,4); - this.setOp(this.INS_LDA,0xBD,this.ADDR_ABSX,3,4); - this.setOp(this.INS_LDA,0xB9,this.ADDR_ABSY,3,4); - this.setOp(this.INS_LDA,0xA1,this.ADDR_PREIDXIND,2,6); - this.setOp(this.INS_LDA,0xB1,this.ADDR_POSTIDXIND,2,5); - - - // LDX: - this.setOp(this.INS_LDX,0xA2,this.ADDR_IMM,2,2); - this.setOp(this.INS_LDX,0xA6,this.ADDR_ZP,2,3); - this.setOp(this.INS_LDX,0xB6,this.ADDR_ZPY,2,4); - this.setOp(this.INS_LDX,0xAE,this.ADDR_ABS,3,4); - this.setOp(this.INS_LDX,0xBE,this.ADDR_ABSY,3,4); - - // LDY: - this.setOp(this.INS_LDY,0xA0,this.ADDR_IMM,2,2); - this.setOp(this.INS_LDY,0xA4,this.ADDR_ZP,2,3); - this.setOp(this.INS_LDY,0xB4,this.ADDR_ZPX,2,4); - this.setOp(this.INS_LDY,0xAC,this.ADDR_ABS,3,4); - this.setOp(this.INS_LDY,0xBC,this.ADDR_ABSX,3,4); - - // LSR: - this.setOp(this.INS_LSR,0x4A,this.ADDR_ACC,1,2); - this.setOp(this.INS_LSR,0x46,this.ADDR_ZP,2,5); - this.setOp(this.INS_LSR,0x56,this.ADDR_ZPX,2,6); - this.setOp(this.INS_LSR,0x4E,this.ADDR_ABS,3,6); - this.setOp(this.INS_LSR,0x5E,this.ADDR_ABSX,3,7); - - // NOP: - this.setOp(this.INS_NOP,0xEA,this.ADDR_IMP,1,2); - - // ORA: - this.setOp(this.INS_ORA,0x09,this.ADDR_IMM,2,2); - this.setOp(this.INS_ORA,0x05,this.ADDR_ZP,2,3); - this.setOp(this.INS_ORA,0x15,this.ADDR_ZPX,2,4); - this.setOp(this.INS_ORA,0x0D,this.ADDR_ABS,3,4); - this.setOp(this.INS_ORA,0x1D,this.ADDR_ABSX,3,4); - this.setOp(this.INS_ORA,0x19,this.ADDR_ABSY,3,4); - this.setOp(this.INS_ORA,0x01,this.ADDR_PREIDXIND,2,6); - this.setOp(this.INS_ORA,0x11,this.ADDR_POSTIDXIND,2,5); - - // PHA: - this.setOp(this.INS_PHA,0x48,this.ADDR_IMP,1,3); - - // PHP: - this.setOp(this.INS_PHP,0x08,this.ADDR_IMP,1,3); - - // PLA: - this.setOp(this.INS_PLA,0x68,this.ADDR_IMP,1,4); - - // PLP: - this.setOp(this.INS_PLP,0x28,this.ADDR_IMP,1,4); - - // ROL: - this.setOp(this.INS_ROL,0x2A,this.ADDR_ACC,1,2); - this.setOp(this.INS_ROL,0x26,this.ADDR_ZP,2,5); - this.setOp(this.INS_ROL,0x36,this.ADDR_ZPX,2,6); - this.setOp(this.INS_ROL,0x2E,this.ADDR_ABS,3,6); - this.setOp(this.INS_ROL,0x3E,this.ADDR_ABSX,3,7); - - // ROR: - this.setOp(this.INS_ROR,0x6A,this.ADDR_ACC,1,2); - this.setOp(this.INS_ROR,0x66,this.ADDR_ZP,2,5); - this.setOp(this.INS_ROR,0x76,this.ADDR_ZPX,2,6); - this.setOp(this.INS_ROR,0x6E,this.ADDR_ABS,3,6); - this.setOp(this.INS_ROR,0x7E,this.ADDR_ABSX,3,7); - - // RTI: - this.setOp(this.INS_RTI,0x40,this.ADDR_IMP,1,6); - - // RTS: - this.setOp(this.INS_RTS,0x60,this.ADDR_IMP,1,6); - - // SBC: - this.setOp(this.INS_SBC,0xE9,this.ADDR_IMM,2,2); - this.setOp(this.INS_SBC,0xE5,this.ADDR_ZP,2,3); - this.setOp(this.INS_SBC,0xF5,this.ADDR_ZPX,2,4); - this.setOp(this.INS_SBC,0xED,this.ADDR_ABS,3,4); - this.setOp(this.INS_SBC,0xFD,this.ADDR_ABSX,3,4); - this.setOp(this.INS_SBC,0xF9,this.ADDR_ABSY,3,4); - this.setOp(this.INS_SBC,0xE1,this.ADDR_PREIDXIND,2,6); - this.setOp(this.INS_SBC,0xF1,this.ADDR_POSTIDXIND,2,5); - - // SEC: - this.setOp(this.INS_SEC,0x38,this.ADDR_IMP,1,2); - - // SED: - this.setOp(this.INS_SED,0xF8,this.ADDR_IMP,1,2); - - // SEI: - this.setOp(this.INS_SEI,0x78,this.ADDR_IMP,1,2); - - // STA: - this.setOp(this.INS_STA,0x85,this.ADDR_ZP,2,3); - this.setOp(this.INS_STA,0x95,this.ADDR_ZPX,2,4); - this.setOp(this.INS_STA,0x8D,this.ADDR_ABS,3,4); - this.setOp(this.INS_STA,0x9D,this.ADDR_ABSX,3,5); - this.setOp(this.INS_STA,0x99,this.ADDR_ABSY,3,5); - this.setOp(this.INS_STA,0x81,this.ADDR_PREIDXIND,2,6); - this.setOp(this.INS_STA,0x91,this.ADDR_POSTIDXIND,2,6); - - // STX: - this.setOp(this.INS_STX,0x86,this.ADDR_ZP,2,3); - this.setOp(this.INS_STX,0x96,this.ADDR_ZPY,2,4); - this.setOp(this.INS_STX,0x8E,this.ADDR_ABS,3,4); - - // STY: - this.setOp(this.INS_STY,0x84,this.ADDR_ZP,2,3); - this.setOp(this.INS_STY,0x94,this.ADDR_ZPX,2,4); - this.setOp(this.INS_STY,0x8C,this.ADDR_ABS,3,4); - - // TAX: - this.setOp(this.INS_TAX,0xAA,this.ADDR_IMP,1,2); - - // TAY: - this.setOp(this.INS_TAY,0xA8,this.ADDR_IMP,1,2); - - // TSX: - this.setOp(this.INS_TSX,0xBA,this.ADDR_IMP,1,2); - - // TXA: - this.setOp(this.INS_TXA,0x8A,this.ADDR_IMP,1,2); - - // TXS: - this.setOp(this.INS_TXS,0x9A,this.ADDR_IMP,1,2); - - // TYA: - this.setOp(this.INS_TYA,0x98,this.ADDR_IMP,1,2); + for(var i=0;i<256;i++) this.opdata[i]=0xFF; + + // Now fill in all valid opcodes: + + // ADC: + this.setOp(this.INS_ADC,0x69,this.ADDR_IMM,2,2); + this.setOp(this.INS_ADC,0x65,this.ADDR_ZP,2,3); + this.setOp(this.INS_ADC,0x75,this.ADDR_ZPX,2,4); + this.setOp(this.INS_ADC,0x6D,this.ADDR_ABS,3,4); + this.setOp(this.INS_ADC,0x7D,this.ADDR_ABSX,3,4); + this.setOp(this.INS_ADC,0x79,this.ADDR_ABSY,3,4); + this.setOp(this.INS_ADC,0x61,this.ADDR_PREIDXIND,2,6); + this.setOp(this.INS_ADC,0x71,this.ADDR_POSTIDXIND,2,5); + + // AND: + this.setOp(this.INS_AND,0x29,this.ADDR_IMM,2,2); + this.setOp(this.INS_AND,0x25,this.ADDR_ZP,2,3); + this.setOp(this.INS_AND,0x35,this.ADDR_ZPX,2,4); + this.setOp(this.INS_AND,0x2D,this.ADDR_ABS,3,4); + this.setOp(this.INS_AND,0x3D,this.ADDR_ABSX,3,4); + this.setOp(this.INS_AND,0x39,this.ADDR_ABSY,3,4); + this.setOp(this.INS_AND,0x21,this.ADDR_PREIDXIND,2,6); + this.setOp(this.INS_AND,0x31,this.ADDR_POSTIDXIND,2,5); + + // ASL: + this.setOp(this.INS_ASL,0x0A,this.ADDR_ACC,1,2); + this.setOp(this.INS_ASL,0x06,this.ADDR_ZP,2,5); + this.setOp(this.INS_ASL,0x16,this.ADDR_ZPX,2,6); + this.setOp(this.INS_ASL,0x0E,this.ADDR_ABS,3,6); + this.setOp(this.INS_ASL,0x1E,this.ADDR_ABSX,3,7); + + // BCC: + this.setOp(this.INS_BCC,0x90,this.ADDR_REL,2,2); + + // BCS: + this.setOp(this.INS_BCS,0xB0,this.ADDR_REL,2,2); + + // BEQ: + this.setOp(this.INS_BEQ,0xF0,this.ADDR_REL,2,2); + + // BIT: + this.setOp(this.INS_BIT,0x24,this.ADDR_ZP,2,3); + this.setOp(this.INS_BIT,0x2C,this.ADDR_ABS,3,4); + + // BMI: + this.setOp(this.INS_BMI,0x30,this.ADDR_REL,2,2); + + // BNE: + this.setOp(this.INS_BNE,0xD0,this.ADDR_REL,2,2); + + // BPL: + this.setOp(this.INS_BPL,0x10,this.ADDR_REL,2,2); + + // BRK: + this.setOp(this.INS_BRK,0x00,this.ADDR_IMP,1,7); + + // BVC: + this.setOp(this.INS_BVC,0x50,this.ADDR_REL,2,2); + + // BVS: + this.setOp(this.INS_BVS,0x70,this.ADDR_REL,2,2); + + // CLC: + this.setOp(this.INS_CLC,0x18,this.ADDR_IMP,1,2); + + // CLD: + this.setOp(this.INS_CLD,0xD8,this.ADDR_IMP,1,2); + + // CLI: + this.setOp(this.INS_CLI,0x58,this.ADDR_IMP,1,2); + + // CLV: + this.setOp(this.INS_CLV,0xB8,this.ADDR_IMP,1,2); + + // CMP: + this.setOp(this.INS_CMP,0xC9,this.ADDR_IMM,2,2); + this.setOp(this.INS_CMP,0xC5,this.ADDR_ZP,2,3); + this.setOp(this.INS_CMP,0xD5,this.ADDR_ZPX,2,4); + this.setOp(this.INS_CMP,0xCD,this.ADDR_ABS,3,4); + this.setOp(this.INS_CMP,0xDD,this.ADDR_ABSX,3,4); + this.setOp(this.INS_CMP,0xD9,this.ADDR_ABSY,3,4); + this.setOp(this.INS_CMP,0xC1,this.ADDR_PREIDXIND,2,6); + this.setOp(this.INS_CMP,0xD1,this.ADDR_POSTIDXIND,2,5); + + // CPX: + this.setOp(this.INS_CPX,0xE0,this.ADDR_IMM,2,2); + this.setOp(this.INS_CPX,0xE4,this.ADDR_ZP,2,3); + this.setOp(this.INS_CPX,0xEC,this.ADDR_ABS,3,4); + + // CPY: + this.setOp(this.INS_CPY,0xC0,this.ADDR_IMM,2,2); + this.setOp(this.INS_CPY,0xC4,this.ADDR_ZP,2,3); + this.setOp(this.INS_CPY,0xCC,this.ADDR_ABS,3,4); + + // DEC: + this.setOp(this.INS_DEC,0xC6,this.ADDR_ZP,2,5); + this.setOp(this.INS_DEC,0xD6,this.ADDR_ZPX,2,6); + this.setOp(this.INS_DEC,0xCE,this.ADDR_ABS,3,6); + this.setOp(this.INS_DEC,0xDE,this.ADDR_ABSX,3,7); + + // DEX: + this.setOp(this.INS_DEX,0xCA,this.ADDR_IMP,1,2); + + // DEY: + this.setOp(this.INS_DEY,0x88,this.ADDR_IMP,1,2); + + // EOR: + this.setOp(this.INS_EOR,0x49,this.ADDR_IMM,2,2); + this.setOp(this.INS_EOR,0x45,this.ADDR_ZP,2,3); + this.setOp(this.INS_EOR,0x55,this.ADDR_ZPX,2,4); + this.setOp(this.INS_EOR,0x4D,this.ADDR_ABS,3,4); + this.setOp(this.INS_EOR,0x5D,this.ADDR_ABSX,3,4); + this.setOp(this.INS_EOR,0x59,this.ADDR_ABSY,3,4); + this.setOp(this.INS_EOR,0x41,this.ADDR_PREIDXIND,2,6); + this.setOp(this.INS_EOR,0x51,this.ADDR_POSTIDXIND,2,5); + + // INC: + this.setOp(this.INS_INC,0xE6,this.ADDR_ZP,2,5); + this.setOp(this.INS_INC,0xF6,this.ADDR_ZPX,2,6); + this.setOp(this.INS_INC,0xEE,this.ADDR_ABS,3,6); + this.setOp(this.INS_INC,0xFE,this.ADDR_ABSX,3,7); + + // INX: + this.setOp(this.INS_INX,0xE8,this.ADDR_IMP,1,2); + + // INY: + this.setOp(this.INS_INY,0xC8,this.ADDR_IMP,1,2); + + // JMP: + this.setOp(this.INS_JMP,0x4C,this.ADDR_ABS,3,3); + this.setOp(this.INS_JMP,0x6C,this.ADDR_INDABS,3,5); + + // JSR: + this.setOp(this.INS_JSR,0x20,this.ADDR_ABS,3,6); + + // LDA: + this.setOp(this.INS_LDA,0xA9,this.ADDR_IMM,2,2); + this.setOp(this.INS_LDA,0xA5,this.ADDR_ZP,2,3); + this.setOp(this.INS_LDA,0xB5,this.ADDR_ZPX,2,4); + this.setOp(this.INS_LDA,0xAD,this.ADDR_ABS,3,4); + this.setOp(this.INS_LDA,0xBD,this.ADDR_ABSX,3,4); + this.setOp(this.INS_LDA,0xB9,this.ADDR_ABSY,3,4); + this.setOp(this.INS_LDA,0xA1,this.ADDR_PREIDXIND,2,6); + this.setOp(this.INS_LDA,0xB1,this.ADDR_POSTIDXIND,2,5); + + + // LDX: + this.setOp(this.INS_LDX,0xA2,this.ADDR_IMM,2,2); + this.setOp(this.INS_LDX,0xA6,this.ADDR_ZP,2,3); + this.setOp(this.INS_LDX,0xB6,this.ADDR_ZPY,2,4); + this.setOp(this.INS_LDX,0xAE,this.ADDR_ABS,3,4); + this.setOp(this.INS_LDX,0xBE,this.ADDR_ABSY,3,4); + + // LDY: + this.setOp(this.INS_LDY,0xA0,this.ADDR_IMM,2,2); + this.setOp(this.INS_LDY,0xA4,this.ADDR_ZP,2,3); + this.setOp(this.INS_LDY,0xB4,this.ADDR_ZPX,2,4); + this.setOp(this.INS_LDY,0xAC,this.ADDR_ABS,3,4); + this.setOp(this.INS_LDY,0xBC,this.ADDR_ABSX,3,4); + + // LSR: + this.setOp(this.INS_LSR,0x4A,this.ADDR_ACC,1,2); + this.setOp(this.INS_LSR,0x46,this.ADDR_ZP,2,5); + this.setOp(this.INS_LSR,0x56,this.ADDR_ZPX,2,6); + this.setOp(this.INS_LSR,0x4E,this.ADDR_ABS,3,6); + this.setOp(this.INS_LSR,0x5E,this.ADDR_ABSX,3,7); + + // NOP: + this.setOp(this.INS_NOP,0xEA,this.ADDR_IMP,1,2); + + // ORA: + this.setOp(this.INS_ORA,0x09,this.ADDR_IMM,2,2); + this.setOp(this.INS_ORA,0x05,this.ADDR_ZP,2,3); + this.setOp(this.INS_ORA,0x15,this.ADDR_ZPX,2,4); + this.setOp(this.INS_ORA,0x0D,this.ADDR_ABS,3,4); + this.setOp(this.INS_ORA,0x1D,this.ADDR_ABSX,3,4); + this.setOp(this.INS_ORA,0x19,this.ADDR_ABSY,3,4); + this.setOp(this.INS_ORA,0x01,this.ADDR_PREIDXIND,2,6); + this.setOp(this.INS_ORA,0x11,this.ADDR_POSTIDXIND,2,5); + + // PHA: + this.setOp(this.INS_PHA,0x48,this.ADDR_IMP,1,3); + + // PHP: + this.setOp(this.INS_PHP,0x08,this.ADDR_IMP,1,3); + + // PLA: + this.setOp(this.INS_PLA,0x68,this.ADDR_IMP,1,4); + + // PLP: + this.setOp(this.INS_PLP,0x28,this.ADDR_IMP,1,4); + + // ROL: + this.setOp(this.INS_ROL,0x2A,this.ADDR_ACC,1,2); + this.setOp(this.INS_ROL,0x26,this.ADDR_ZP,2,5); + this.setOp(this.INS_ROL,0x36,this.ADDR_ZPX,2,6); + this.setOp(this.INS_ROL,0x2E,this.ADDR_ABS,3,6); + this.setOp(this.INS_ROL,0x3E,this.ADDR_ABSX,3,7); + + // ROR: + this.setOp(this.INS_ROR,0x6A,this.ADDR_ACC,1,2); + this.setOp(this.INS_ROR,0x66,this.ADDR_ZP,2,5); + this.setOp(this.INS_ROR,0x76,this.ADDR_ZPX,2,6); + this.setOp(this.INS_ROR,0x6E,this.ADDR_ABS,3,6); + this.setOp(this.INS_ROR,0x7E,this.ADDR_ABSX,3,7); + + // RTI: + this.setOp(this.INS_RTI,0x40,this.ADDR_IMP,1,6); + + // RTS: + this.setOp(this.INS_RTS,0x60,this.ADDR_IMP,1,6); + + // SBC: + this.setOp(this.INS_SBC,0xE9,this.ADDR_IMM,2,2); + this.setOp(this.INS_SBC,0xE5,this.ADDR_ZP,2,3); + this.setOp(this.INS_SBC,0xF5,this.ADDR_ZPX,2,4); + this.setOp(this.INS_SBC,0xED,this.ADDR_ABS,3,4); + this.setOp(this.INS_SBC,0xFD,this.ADDR_ABSX,3,4); + this.setOp(this.INS_SBC,0xF9,this.ADDR_ABSY,3,4); + this.setOp(this.INS_SBC,0xE1,this.ADDR_PREIDXIND,2,6); + this.setOp(this.INS_SBC,0xF1,this.ADDR_POSTIDXIND,2,5); + + // SEC: + this.setOp(this.INS_SEC,0x38,this.ADDR_IMP,1,2); + + // SED: + this.setOp(this.INS_SED,0xF8,this.ADDR_IMP,1,2); + + // SEI: + this.setOp(this.INS_SEI,0x78,this.ADDR_IMP,1,2); + + // STA: + this.setOp(this.INS_STA,0x85,this.ADDR_ZP,2,3); + this.setOp(this.INS_STA,0x95,this.ADDR_ZPX,2,4); + this.setOp(this.INS_STA,0x8D,this.ADDR_ABS,3,4); + this.setOp(this.INS_STA,0x9D,this.ADDR_ABSX,3,5); + this.setOp(this.INS_STA,0x99,this.ADDR_ABSY,3,5); + this.setOp(this.INS_STA,0x81,this.ADDR_PREIDXIND,2,6); + this.setOp(this.INS_STA,0x91,this.ADDR_POSTIDXIND,2,6); + + // STX: + this.setOp(this.INS_STX,0x86,this.ADDR_ZP,2,3); + this.setOp(this.INS_STX,0x96,this.ADDR_ZPY,2,4); + this.setOp(this.INS_STX,0x8E,this.ADDR_ABS,3,4); + + // STY: + this.setOp(this.INS_STY,0x84,this.ADDR_ZP,2,3); + this.setOp(this.INS_STY,0x94,this.ADDR_ZPX,2,4); + this.setOp(this.INS_STY,0x8C,this.ADDR_ABS,3,4); + + // TAX: + this.setOp(this.INS_TAX,0xAA,this.ADDR_IMP,1,2); + + // TAY: + this.setOp(this.INS_TAY,0xA8,this.ADDR_IMP,1,2); + + // TSX: + this.setOp(this.INS_TSX,0xBA,this.ADDR_IMP,1,2); + + // TXA: + this.setOp(this.INS_TXA,0x8A,this.ADDR_IMP,1,2); + + // TXS: + this.setOp(this.INS_TXS,0x9A,this.ADDR_IMP,1,2); + + // TYA: + this.setOp(this.INS_TYA,0x98,this.ADDR_IMP,1,2); this.cycTable = new Array( - /*0x00*/ 7,6,2,8,3,3,5,5,3,2,2,2,4,4,6,6, - /*0x10*/ 2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7, - /*0x20*/ 6,6,2,8,3,3,5,5,4,2,2,2,4,4,6,6, - /*0x30*/ 2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7, - /*0x40*/ 6,6,2,8,3,3,5,5,3,2,2,2,3,4,6,6, - /*0x50*/ 2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7, - /*0x60*/ 6,6,2,8,3,3,5,5,4,2,2,2,5,4,6,6, - /*0x70*/ 2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7, - /*0x80*/ 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4, - /*0x90*/ 2,6,2,6,4,4,4,4,2,5,2,5,5,5,5,5, - /*0xA0*/ 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4, - /*0xB0*/ 2,5,2,5,4,4,4,4,2,4,2,4,4,4,4,4, - /*0xC0*/ 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6, - /*0xD0*/ 2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7, - /*0xE0*/ 2,6,3,8,3,3,5,5,2,2,2,2,4,4,6,6, - /*0xF0*/ 2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7 - ); - - - this.instname = new Array(56); - - // Instruction Names: - 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.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 " - ); + /*0x00*/ 7,6,2,8,3,3,5,5,3,2,2,2,4,4,6,6, + /*0x10*/ 2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7, + /*0x20*/ 6,6,2,8,3,3,5,5,4,2,2,2,4,4,6,6, + /*0x30*/ 2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7, + /*0x40*/ 6,6,2,8,3,3,5,5,3,2,2,2,3,4,6,6, + /*0x50*/ 2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7, + /*0x60*/ 6,6,2,8,3,3,5,5,4,2,2,2,5,4,6,6, + /*0x70*/ 2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7, + /*0x80*/ 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4, + /*0x90*/ 2,6,2,6,4,4,4,4,2,5,2,5,5,5,5,5, + /*0xA0*/ 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4, + /*0xB0*/ 2,5,2,5,4,4,4,4,2,4,2,4,4,4,4,4, + /*0xC0*/ 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6, + /*0xD0*/ 2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7, + /*0xE0*/ 2,6,3,8,3,3,5,5,2,2,2,2,4,4,6,6, + /*0xF0*/ 2,5,2,8,4,4,6,6,2,4,2,7,4,4,7,7 + ); + + + this.instname = new Array(56); + + // Instruction Names: + 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.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 " + ); } -NES.CPU.OpData.prototype = { +JSNES.CPU.OpData.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_DUMMY: 56, // dummy instruction used for 'halting' the processor some cycles - - // -------------------------------- // - - // Addressing modes: - 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, + 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_DUMMY: 56, // dummy instruction used for 'halting' the processor some cycles + + // -------------------------------- // + + // Addressing modes: + 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(inst, op, addr, size, cycles){ - this.opdata[op] = - ((inst &0xFF) )| - ((addr &0xFF)<< 8)| - ((size &0xFF)<<16)| - ((cycles&0xFF)<<24); - } + this.opdata[op] = + ((inst &0xFF) )| + ((addr &0xFF)<< 8)| + ((size &0xFF)<<16)| + ((cycles&0xFF)<<24); + } } |