//Descriptions taken from http://www.obelisk.me.uk/6502/reference.html
_descriptions=newDictionary<string,OpCodeDesc>();
_descriptions.Add("adc",newOpCodeDesc("ADC - Add with Carry","Add the value at the specified memory address to the accumulator + the carry bit. On overflow, the carry bit is set.",CpuFlag.Carry|CpuFlag.Zero|CpuFlag.Overflow|CpuFlag.Negative));
_descriptions.Add("and",newOpCodeDesc("AND - Bitwise AND","Perform an AND operation between the accumulator and the value at the specified memory address.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("asl",newOpCodeDesc("ASL - Arithmetic Shift Left","Shifts all the bits of the accumulator (or the byte at the specified memory address) by 1 bit to the left. Bit 0 will be set to 0 and the carry flag will take the value of bit 7 (before the shift).",CpuFlag.Carry|CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("bcc",newOpCodeDesc("BCC - Branch if Carry Clear","If the carry flag is clear, jump to location specified."));
_descriptions.Add("bcs",newOpCodeDesc("BCS - Branch if Carry Set","If the carry flag is set, jump to the location specified."));
_descriptions.Add("beq",newOpCodeDesc("BEQ - Branch if Equal","If the zero flag is set, jump to the location specified."));
_descriptions.Add("bit",newOpCodeDesc("BIT - Bit Test","Bits 6 and 7 of the byte at the specified memory address are copied to the N and V flags. If the accumulator's value ANDed with that byte is 0, the zero flag is set (otherwise it is cleared).",CpuFlag.Zero|CpuFlag.Overflow|CpuFlag.Negative));
_descriptions.Add("bmi",newOpCodeDesc("BMI - Branch if Minus","If the negative flag is set, jump to the location specified."));
_descriptions.Add("bne",newOpCodeDesc("BNE - Branch if Not Equal","If the zero flag is clear, jump to the location specified."));
_descriptions.Add("bpl",newOpCodeDesc("BPL - Branch if Positive","If the negative flag is clear, jump to the location specified."));
_descriptions.Add("brk",newOpCodeDesc("BRK - Break","The BRK instruction causes the CPU to jump to its IRQ vector, as if an interrupt had occurred. The PC and status flags are pushed on the stack."));
_descriptions.Add("bvc",newOpCodeDesc("BVC - Branch if Overflow Clear","If the overflow flag is clear, jump to the location specified."));
_descriptions.Add("bvs",newOpCodeDesc("BVS - Branch if Overflow Set","If the overflow flag is set then, jump to the location specified."));
_descriptions.Add("clc",newOpCodeDesc("CLC - Clear Carry Flag","Clears the carry flag.",CpuFlag.Carry));
_descriptions.Add("cld",newOpCodeDesc("CLD - Clear Decimal Mode","Clears the decimal mode flag.",CpuFlag.Decimal));
_descriptions.Add("cli",newOpCodeDesc("CLI - Clear Interrupt Disable","Clears the interrupt disable flag.",CpuFlag.Interrupt));
_descriptions.Add("clv",newOpCodeDesc("CLV - Clear Overflow Flag","Clears the overflow flag.",CpuFlag.Overflow));
_descriptions.Add("cmp",newOpCodeDesc("CMP - Compare","Compares the accumulator with the byte at the specified memory address..",CpuFlag.Zero|CpuFlag.Carry|CpuFlag.Negative));
_descriptions.Add("cpx",newOpCodeDesc("CPX - Compare X Register","Compares the X register with the byte at the specified memory address.",CpuFlag.Zero|CpuFlag.Carry|CpuFlag.Negative));
_descriptions.Add("cpy",newOpCodeDesc("CPY - Compare Y Register","Compares the Y register with the byte at the specified memory address.",CpuFlag.Zero|CpuFlag.Carry|CpuFlag.Negative));
_descriptions.Add("dec",newOpCodeDesc("DEC - Decrement Memory","Subtracts one from the byte at the specified memory address.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("dex",newOpCodeDesc("DEX - Decrement X Register","Subtracts one from the X register.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("dey",newOpCodeDesc("DEY - Decrement Y Register","Subtracts one from the Y register.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("eor",newOpCodeDesc("EOR - Exclusive OR","Performs an exclusive OR operation between the accumulator and the byte at the specified memory address.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("inc",newOpCodeDesc("INC - Increment Memory","Adds one to the the byte at the specified memory address.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("inx",newOpCodeDesc("INX - Increment X Register","Adds one to the X register.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("iny",newOpCodeDesc("INY - Increment Y Register","Adds one to the Y register.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("jmp",newOpCodeDesc("JMP - Jump","Jumps to the specified location (alters the program counter)"));
_descriptions.Add("jsr",newOpCodeDesc("JSR - Jump to Subroutine","Pushes the address (minus one) of the next instruction to the stack and then jumps to the target address."));
_descriptions.Add("lda",newOpCodeDesc("LDA - Load Accumulator","Loads a byte from the specified memory address into the accumulator.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("ldx",newOpCodeDesc("LDX - Load X Register","Loads a byte from the specified memory address into the X register.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("ldy",newOpCodeDesc("LDY - Load Y Register","Loads a byte from the specified memory address into the Y register.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("lsr",newOpCodeDesc("LSR - Logical Shift Right","Shifts all the bits of the accumulator (or the byte at the specified memory address) by 1 bit to the right. Bit 7 will be set to 0 and the carry flag will take the value of bit 0 (before the shift).",CpuFlag.Carry|CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("nop",newOpCodeDesc("NOP - No Operation","Performs no operation other than delaying execution of the next instruction by 2 cycles."));
_descriptions.Add("ora",newOpCodeDesc("ORA - Inclusive OR","Performs an inclusive OR operation between the accumulator and the byte at the specified memory address.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("pha",newOpCodeDesc("PHA - Push Accumulator","Pushes the value of the accumulator to the stack."));
_descriptions.Add("php",newOpCodeDesc("PHP - Push Processor Status","Pushes the value of the status flags to the stack."));
_descriptions.Add("pla",newOpCodeDesc("PLA - Pull Accumulator","Pulls a byte from the stack and stores it into the accumulator.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("plp",newOpCodeDesc("PLP - Pull Processor Status","Pulls a byte from the stack and stores it into the processor flags. The flags will be modified based on the value pulled.",CpuFlag.Carry|CpuFlag.Decimal|CpuFlag.Interrupt|CpuFlag.Negative|CpuFlag.Overflow|CpuFlag.Zero));
_descriptions.Add("rol",newOpCodeDesc("ROL - Rotate Left","Shifts all bits 1 position to the left. The right-most bit takes the current value of the carry flag. The left-most bit is stored into the carry flag.",CpuFlag.Carry|CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("ror",newOpCodeDesc("ROR - Rotate Right","Shifts all bits 1 position to the right. The left-most bit takes the current value of the carry flag. The right-most bit is stored into the carry flag.",CpuFlag.Carry|CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("rti",newOpCodeDesc("RTI - Return from Interrupt","The RTI instruction is used at the end of the interrupt handler to return execution to its original location. It pulls the status flags and program counter from the stack."));
_descriptions.Add("rts",newOpCodeDesc("RTS - Return from Subroutine","The RTS instruction is used at the end of a subroutine to return execution to the calling function. It pulls the status flags and program counter (minus 1) from the stack."));
_descriptions.Add("sbc",newOpCodeDesc("SBC - Subtract with Carry","Substracts the byte at the specified memory address from the value of the accumulator (affected by the carry flag).",CpuFlag.Carry|CpuFlag.Zero|CpuFlag.Overflow|CpuFlag.Negative));
_descriptions.Add("sec",newOpCodeDesc("SEC - Set Carry Flag","Sets the carry flag.",CpuFlag.Carry));
_descriptions.Add("sed",newOpCodeDesc("SED - Set Decimal Flag","Sets the decimal flag.",CpuFlag.Decimal));
_descriptions.Add("sei",newOpCodeDesc("SEI - Set Interrupt Disable","Sets the interrupt disable flag.",CpuFlag.Interrupt));
_descriptions.Add("sta",newOpCodeDesc("STA - Store Accumulator","Stores the value of the accumulator into memory."));
_descriptions.Add("stx",newOpCodeDesc("STX - Store X Register","Stores the value of the X register into memory."));
_descriptions.Add("sty",newOpCodeDesc("STY - Store Y Register","Stores the value of the Y register into memory."));
_descriptions.Add("tax",newOpCodeDesc("TAX - Transfer A to X","Copies the accumulator into the X register.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("tay",newOpCodeDesc("TAY - Transfer A to Y","Copies the accumulator into the Y register.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("tsx",newOpCodeDesc("TSX - Transfer SP to X","Copies the stack pointer into the X register.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("txa",newOpCodeDesc("TXA - Transfer X to A","Copies the X register into the accumulator.",CpuFlag.Zero|CpuFlag.Negative));
_descriptions.Add("txs",newOpCodeDesc("TXS - Transfer X to SP","Copies the X register into the stack pointer."));
_descriptions.Add("tya",newOpCodeDesc("TYA - Transfer Y to A","Copies the Y register into the accumulator.",CpuFlag.Zero|CpuFlag.Negative));