This is the table of opcodes that I used for creating the micro-op data for my emulator. It contains all opcodes supported by it, grouped by the mnemonic. (The combination of mnemonic and the addressing mode is used to select the list of micro-ops for the opcode.)
I have intentionally laid out the table in a manner that emphasizes regular patterns within the opcode numbers.
Note that I changed some NOP/DOP/TOP opcodes into actual work-bearing opcodes (such as "STY imm" (80)), simply by following the pattern of existing opcodes. Of course, "STY imm" accomplishes nothing, hence it is considered a NOP opcode (in a similar manner as "XCHG AX, AX" is dubbed "NOP" in the x86 platform).
I also incorporated the JAM/KIL opcodes into the matrix, so e.g. "ASL imm" (02) does something nonsensical rather than jamming the emulator.
Code:
// 0,4,8,C
// Imm Zpg ZpxY IndY AbsX
// .. Rel ZpgX IndX Abs AbsY
set( "bit", "--'--'--'24'--'--'--'--'2C'--'--'--" ); // 20 = jsr, 28=plp
set( "nop", "--'--'--'44'54'--'--'--'--'--'--'--" ); // 4C = jmp, 40=rti, 48=pha
set( "nop", "--'--'--'64'74'--'--'--'--'--'--'--" );
set( "sty", "--'80'--'84'94'--'--'--'8C'--'--'--" ); // 80=DOP
set( "ldy", "--'A0'--'A4'B4'--'--'--'AC'BC'--'--" ); // A8=tay
set( "cpy", "--'C0'--'C4'--'--'--'--'CC'--'--'--" ); // C8=iny
set( "cpx", "--'E0'--'E4'--'--'--'--'EC'--'--'--" ); // E8=inx
set( "nop", "--'--'--'04'14'--'--'--'0C'1C'--'--" ); // 0C=TOP, 1C = TOP
set( "nop", "--'--'--'--'34'--'--'--'--'3C'--'--" ); // 34=DOP, 3C = TOP
set( "nop", "--'--'--'--'--'--'--'--'--'5C'--'--" ); // 5C = TOP
set( "nop", "--'--'--'--'--'--'--'--'--'7C'--'--" ); // 7C = TOP
set( "nop", "--'--'--'--'D4'--'--'--'--'DC'--'--" ); // D4=DOP, DC = TOP
set( "nop", "--'--'--'--'F4'--'--'--'--'FC'--'--" ); // F4=DOP, FC = TOP
set( "brk", "00'--'--'--'--'--'--'--'--'--'--'--" );
set( "jsr", "--'--'--'--'--'--'--'--'20'--'--'--" );
set( "rti", "40'--'--'--'--'--'--'--'--'--'--'--" );
set( "rts", "60'--'--'--'--'--'--'--'--'--'--'--" );
set( "bpl", "--'--'10'--'--'--'--'--'--'--'--'--" );
set( "bmi", "--'--'30'--'--'--'--'--'--'--'--'--" );
set( "bvc", "--'--'50'--'--'--'--'--'--'--'--'--" );
set( "bvs", "--'--'70'--'--'--'--'--'--'--'--'--" );
set( "bcc", "--'--'90'--'--'--'--'--'--'--'--'--" );
set( "bcs", "--'--'B0'--'--'--'--'--'--'--'--'--" );
set( "bne", "--'--'D0'--'--'--'--'--'--'--'--'--" );
set( "beq", "--'--'F0'--'--'--'--'--'--'--'--'--" );
set( "php", "08'--'--'--'--'--'--'--'--'--'--'--" );
set( "plp", "28'--'--'--'--'--'--'--'--'--'--'--" );
set( "pha", "48'--'--'--'--'--'--'--'--'--'--'--" );
set( "pla", "68'--'--'--'--'--'--'--'--'--'--'--" );
set( "dey", "88'--'--'--'--'--'--'--'--'--'--'--" );
set( "tay", "A8'--'--'--'--'--'--'--'--'--'--'--" );
set( "iny", "C8'--'--'--'--'--'--'--'--'--'--'--" );
set( "inx", "E8'--'--'--'--'--'--'--'--'--'--'--" );
set( "clc", "18'--'--'--'--'--'--'--'--'--'--'--" ); // 1 : 0001
set( "sec", "38'--'--'--'--'--'--'--'--'--'--'--" ); // 1 : 0011
set( "cli", "58'--'--'--'--'--'--'--'--'--'--'--" ); // 4 : 0101
set( "sei", "78'--'--'--'--'--'--'--'--'--'--'--" ); // 4 : 0111
set( "clv", "B8'--'--'--'--'--'--'--'--'--'--'--" ); // 64: 1011
set( "cld", "D8'--'--'--'--'--'--'--'--'--'--'--" ); // 8 : 1101
set( "sed", "F8'--'--'--'--'--'--'--'--'--'--'--" ); // 8 : 1111
set( "tya", "98'--'--'--'--'--'--'--'--'--'--'--" );
set( "jmp", "--'--'--'--'--'--'--'--'4C'--'--'6C" );
// 1,5,9,D
set( "ora", "--'09'--'05'15'--'01'11'0D'1D'19'--" );
set( "and", "--'29'--'25'35'--'21'31'2D'3D'39'--" );
set( "eor", "--'49'--'45'55'--'41'51'4D'5D'59'--" );
set( "adc", "--'69'--'65'75'--'61'71'6D'7D'79'--" );
set( "sta", "--'89'--'85'95'--'81'91'8D'9D'99'--" ); // 89=DOP
set( "lda", "--'A9'--'A5'B5'--'A1'B1'AD'BD'B9'--" );
set( "cmp", "--'C9'--'C5'D5'--'C1'D1'CD'DD'D9'--" );
set( "sbc", "--'E9'--'E5'F5'--'E1'F1'ED'FD'F9'--" );
// 2,6,A,E
set( "asl", "0A'02'--'06'16'--'--'12'0E'1E'--'--" ); // 02=JAM, 12=JAM
set( "rol", "2A'22'--'26'36'--'--'32'2E'3E'--'--" ); // 22=JAM, 32=JAM
set( "lsr", "4A'42'--'46'56'--'--'52'4E'5E'--'--" ); // 42=JAM, 52=JAM
set( "ror", "6A'62'--'66'76'--'--'72'6E'7E'--'--" ); // 62=JAM, 72=JAM
set( "stx", "--'--'--'86'--'96'--'92'8E'--'--'--" ); // 92=JAM, 8A=txa
set( "ldx", "--'A2'--'A6'--'B6'--'B2'AE'--'BE'--" ); // AA=tax, B2=JAM
set( "dec", "--'--'--'C6'D6'--'--'D2'CE'DE'--'--" ); // CA=dex, D2=JAM
set( "inc", "--'--'--'E6'F6'--'--'F2'EE'FE'--'--" ); // EA=nop, F2=JAM
set( "nop", "--'82'--'--'--'--'--'--'--'--'--'--" );
set( "nop", "--'C2'--'--'--'--'--'--'--'--'--'--" );
set( "nop", "--'E2'--'--'--'--'--'--'--'--'--'--" );
set( "txa", "8A'--'--'--'--'--'--'--'--'--'--'--" );
set( "tax", "AA'--'--'--'--'--'--'--'--'--'--'--" );
set( "dex", "CA'--'--'--'--'--'--'--'--'--'--'--" );
set( "nop", "EA'--'--'--'--'--'--'--'--'--'--'--" );
set( "nop", "1A"); // 1 cycle
set( "nop", "3A");
set( "nop", "5A");
set( "nop", "7A");
set( "txs", "9A'--'--'--'--'--'--'--'--'--'--'--" );
set( "tsx", "BA'--'--'--'--'--'--'--'--'--'--'--" );
set( "nop", "DA");
set( "nop", "FA");
// 3,7,B,F
set( "slo", "--'--'--'07'17'--'03'13'0F'1F'1B'--" ); // ASL + ORA (proper synthesis)
set( "rla", "--'--'--'27'37'--'23'33'2F'3F'3B'--" ); // ROL + AND (proper synthesis)
set( "sre", "--'--'--'47'57'--'43'53'4F'5F'5B'--" ); // LSR + EOR (proper synthesis)
set( "rra", "--'--'--'67'77'--'63'73'6F'7F'7B'--" ); // ROR + ADC (proper synthesis)
set( "sax", "--'--'--'87'--'97'83'--'8F'--'--'--" ); // AND(A,X) + store t to memory (register not changed); 93=SHA; 9B=SHS
set( "lax", "--'AB'--'A7'--'B7'A3'B3'AF'--'BF'--" ); // LDA + LAX (proper synthesis)
set( "las", "--'--'--'--'--'--'--'--'--'--'BB'--" ); // LAS = LDA+LAX + TXS
set( "dcp", "--'--'--'C7'D7'--'C3'D3'CF'DF'DB'--" ); // DEC + CMP
set( "isb", "--'--'--'E7'F7'--'E3'F3'EF'FF'FB'--" ); // INC + SBC
set( "anc", "--'0B'--'--'--'--'--'--'--'--'--'--" ); // AND, and CF=result.7, aka. AAC
set( "anc", "--'2B'--'--'--'--'--'--'--'--'--'--" ); // AND, and CF=result.7
set( "asr", "--'4B'--'--'--'--'--'--'--'--'--'--" ); // AND, LSR (proper synthesis)
set( "arr", "--'6B'--'--'--'--'--'--'--'--'--'--" ); // AND + ROR, also sets V. And C differently.
set( "ane", "--'8B'--'--'--'--'--'--'--'--'--'--" ); // (A|0xEE) & x & t, set nz
set( "sbx", "--'CB'--'--'--'--'--'--'--'--'--'--" ); // X = A&X - t; store to X
set( "sbc", "--'EB'--'--'--'--'--'--'--'--'--'--" );
set( "shy", "--'--'--'--'--'--'--'--'--'9C'--'--" ); // SHY/SYA/SAY
set( "shx", "--'--'--'--'--'--'--'--'--'--'9E'--" ); // SHX/SXA/XAS
set( "shs", "--'--'--'--'--'--'--'--'--'--'9B'--" ); // SHS
set( "sha", "--'--'--'--'--'--'--'93'--'--'9F'--" );
EDIT: Just wanted to add that lidnariq' layout is exceptionally clear and nice.