//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 (C) 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 (C) is clear, jump to location specified."));
_descriptions.Add("bcs",newOpCodeDesc("BCS - Branch if Carry Set","If the carry flag (C) is set, jump to the location specified."));
_descriptions.Add("beq",newOpCodeDesc("BEQ - Branch if Equal","If the zero flag (Z) 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 negative (N) and overflow (V) flags. If the accumulator's value ANDed with that byte is 0, the zero flag (Z) is set (otherwise it is cleared).",CpuFlag.Zero|CpuFlag.Overflow|CpuFlag.Negative));
_descriptions.Add("bmi",newOpCodeDesc("BMI - Branch if Minus","If the negative flag (N) is set, jump to the location specified."));
_descriptions.Add("bne",newOpCodeDesc("BNE - Branch if Not Equal","If the zero flag (Z) is clear, jump to the location specified."));
_descriptions.Add("bpl",newOpCodeDesc("BPL - Branch if Positive","If the negative flag (N) 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("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 (C) 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 (C). The left-most bit is stored into the carry flag (C).",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 (C). The right-most bit is stored into the carry flag (C).",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 (C)).",CpuFlag.Carry|CpuFlag.Zero|CpuFlag.Overflow|CpuFlag.Negative));
_descriptions.Add("sec",newOpCodeDesc("SEC - Set carry flag (C)","Sets the carry flag (C).",CpuFlag.Carry));
_descriptions.Add("sed",newOpCodeDesc("SED - Set Decimal Flag","Sets the decimal mode flag (D).",CpuFlag.Decimal));
_descriptions.Add("sei",newOpCodeDesc("SEI - Set Interrupt Disable","Sets the interrupt disable flag (I).",CpuFlag.Interrupt));