  switch(fetch()) {
  opA(0x00, Interrupt, EF ? 0xfffe : 0xffe6)  //emulation mode lacks BRK vector; uses IRQ vector instead
  opM(0x01, IndexedIndirectRead, m(ORA))
  opA(0x02, Interrupt, EF ? 0xfff4 : 0xffe4)
  opM(0x03, StackRead, m(ORA))
  opM(0x04, DirectModify, m(TSB))
  opM(0x05, DirectRead, m(ORA))
  opM(0x06, DirectModify, m(ASL))
  opM(0x07, IndirectLongRead, m(ORA))
  opA(0x08, Push8, P)
  opM(0x09, ImmediateRead, m(ORA))
  opM(0x0a, ImpliedModify, m(ASL), A)
  opA(0x0b, PHD)
  opM(0x0c, BankModify, m(TSB))
  opM(0x0d, BankRead, m(ORA))
  opM(0x0e, BankModify, m(ASL))
  opM(0x0f, LongRead, m(ORA))
  opA(0x10, Branch, NF == 0)
  opM(0x11, IndirectIndexedRead, m(ORA))
  opM(0x12, IndirectRead, m(ORA))
  opM(0x13, IndirectStackRead, m(ORA))
  opM(0x14, DirectModify, m(TRB))
  opM(0x15, DirectRead, m(ORA), X)
  opM(0x16, DirectIndexedModify, m(ASL))
  opM(0x17, IndirectLongRead, m(ORA), Y)
  opA(0x18, ClearFlag, CF)
  opM(0x19, BankRead, m(ORA), Y)
  opM(0x1a, ImpliedModify, m(INC), A)
  opA(0x1b, TCS)
  opM(0x1c, BankModify, m(TRB))
  opM(0x1d, BankRead, m(ORA), X)
  opM(0x1e, BankIndexedModify, m(ASL))
  opM(0x1f, LongRead, m(ORA), X)
  opA(0x20, JSRShort)
  opM(0x21, IndexedIndirectRead, m(AND))
  opA(0x22, JSRLong)
  opM(0x23, StackRead, m(AND))
  opM(0x24, DirectRead, m(BIT))
  opM(0x25, DirectRead, m(AND))
  opM(0x26, DirectModify, m(ROL))
  opM(0x27, IndirectLongRead, m(AND))
  opA(0x28, PLP)
  opM(0x29, ImmediateRead, m(AND))
  opM(0x2a, ImpliedModify, m(ROL), A)
  opA(0x2b, PLD)
  opM(0x2c, BankRead, m(BIT))
  opM(0x2d, BankRead, m(AND))
  opM(0x2e, BankModify, m(ROL))
  opM(0x2f, LongRead, m(AND))
  opA(0x30, Branch, NF == 1)
  opM(0x31, IndirectIndexedRead, m(AND))
  opM(0x32, IndirectRead, m(AND))
  opM(0x33, IndirectStackRead, m(AND))
  opM(0x34, DirectRead, m(BIT), X)
  opM(0x35, DirectRead, m(AND), X)
  opM(0x36, DirectIndexedModify, m(ROL))
  opM(0x37, IndirectLongRead, m(AND), Y)
  opA(0x38, SetFlag, CF)
  opM(0x39, BankRead, m(AND), Y)
  opM(0x3a, ImpliedModify, m(DEC), A)
  opA(0x3b, Transfer16, S, A)
  opM(0x3c, BankRead, m(BIT), X)
  opM(0x3d, BankRead, m(AND), X)
  opM(0x3e, BankIndexedModify, m(ROL))
  opM(0x3f, LongRead, m(AND), X)
  opA(0x40, RTI)
  opM(0x41, IndexedIndirectRead, m(EOR))
  opA(0x42, WDM)
  opM(0x43, StackRead, m(EOR))
  opX(0x44, BlockMove, -1)
  opM(0x45, DirectRead, m(EOR))
  opM(0x46, DirectModify, m(LSR))
  opM(0x47, IndirectLongRead, m(EOR))
  opM(0x48, Push, A)
  opM(0x49, ImmediateRead, m(EOR))
  opM(0x4a, ImpliedModify, m(LSR), A)
  opA(0x4b, Push8, db(PC))
  opA(0x4c, JMPShort)
  opM(0x4d, BankRead, m(EOR))
  opM(0x4e, BankModify, m(LSR))
  opM(0x4f, LongRead, m(EOR))
  opA(0x50, Branch, VF == 0)
  opM(0x51, IndirectIndexedRead, m(EOR))
  opM(0x52, IndirectRead, m(EOR))
  opM(0x53, IndirectStackRead, m(EOR))
  opX(0x54, BlockMove, +1)
  opM(0x55, DirectRead, m(EOR), X)
  opM(0x56, DirectIndexedModify, m(LSR))
  opM(0x57, IndirectLongRead, m(EOR), Y)
  opA(0x58, ClearFlag, IF)
  opM(0x59, BankRead, m(EOR), Y)
  opX(0x5a, Push, Y)
  opA(0x5b, Transfer16, A, D)
  opA(0x5c, JMPLong)
  opM(0x5d, BankRead, m(EOR), X)
  opM(0x5e, BankIndexedModify, m(LSR))
  opM(0x5f, LongRead, m(EOR), X)
  opA(0x60, RTS)
  opM(0x61, IndexedIndirectRead, m(ADC))
  opA(0x62, PER)
  opM(0x63, StackRead, m(ADC))
  opM(0x64, DirectWrite, Z)
  opM(0x65, DirectRead, m(ADC))
  opM(0x66, DirectModify, m(ROR))
  opM(0x67, IndirectLongRead, m(ADC))
  opM(0x68, Pull, A)
  opM(0x69, ImmediateRead, m(ADC))
  opM(0x6a, ImpliedModify, m(ROR), A)
  opA(0x6b, RTL)
  opA(0x6c, JMPIndirect)
  opM(0x6d, BankRead, m(ADC))
  opM(0x6e, BankModify, m(ROR))
  opM(0x6f, LongRead, m(ADC))
  opA(0x70, Branch, VF == 1)
  opM(0x71, IndirectIndexedRead, m(ADC))
  opM(0x72, IndirectRead, m(ADC))
  opM(0x73, IndirectStackRead, m(ADC))
  opM(0x74, DirectWrite, Z, X)
  opM(0x75, DirectRead, m(ADC), X)
  opM(0x76, DirectIndexedModify, m(ROR))
  opM(0x77, IndirectLongRead, m(ADC), Y)
  opA(0x78, SetFlag, IF)
  opM(0x79, BankRead, m(ADC), Y)
  opX(0x7a, Pull, Y)
  opA(0x7b, Transfer16, D, A)
  opA(0x7c, JMPIndexedIndirect)
  opM(0x7d, BankRead, m(ADC), X)
  opM(0x7e, BankIndexedModify, m(ROR))
  opM(0x7f, LongRead, m(ADC), X)
  opA(0x80, Branch)
  opM(0x81, IndexedIndirectWrite)
  opA(0x82, BRL)
  opM(0x83, StackWrite)
  opX(0x84, DirectWrite, Y)
  opM(0x85, DirectWrite, A)
  opX(0x86, DirectWrite, X)
  opM(0x87, IndirectLongWrite)
  opX(0x88, ImpliedModify, x(DEC), Y)
  opM(0x89, BITImmediate)
  opM(0x8a, Transfer, X, A)
  opA(0x8b, Push8, B)
  opX(0x8c, BankWrite, Y)
  opM(0x8d, BankWrite, A)
  opX(0x8e, BankWrite, X)
  opM(0x8f, LongWrite)
  opA(0x90, Branch, CF == 0)
  opM(0x91, IndirectIndexedWrite)
  opM(0x92, IndirectWrite)
  opM(0x93, IndirectStackWrite)
  opX(0x94, DirectWrite, Y, X)
  opM(0x95, DirectWrite, A, X)
  opX(0x96, DirectWrite, X, Y)
  opM(0x97, IndirectLongWrite, Y)
  opM(0x98, Transfer, Y, A)
  opM(0x99, BankWrite, A, Y)
  opA(0x9a, TXS)
  opX(0x9b, Transfer, X, Y)
  opM(0x9c, BankWrite, Z)
  opM(0x9d, BankWrite, A, X)
  opM(0x9e, BankWrite, Z, X)
  opM(0x9f, LongWrite, X)
  opX(0xa0, ImmediateRead, x(LDY))
  opM(0xa1, IndexedIndirectRead, m(LDA))
  opX(0xa2, ImmediateRead, x(LDX))
  opM(0xa3, StackRead, m(LDA))
  opX(0xa4, DirectRead, x(LDY))
  opM(0xa5, DirectRead, m(LDA))
  opX(0xa6, DirectRead, x(LDX))
  opM(0xa7, IndirectLongRead, m(LDA))
  opX(0xa8, Transfer, A, Y)
  opM(0xa9, ImmediateRead, m(LDA))
  opX(0xaa, Transfer, A, X)
  opA(0xab, PLB)
  opX(0xac, BankRead, x(LDY))
  opM(0xad, BankRead, m(LDA))
  opX(0xae, BankRead, x(LDX))
  opM(0xaf, LongRead, m(LDA))
  opA(0xb0, Branch, CF == 1)
  opM(0xb1, IndirectIndexedRead, m(LDA))
  opM(0xb2, IndirectRead, m(LDA))
  opM(0xb3, IndirectStackRead, m(LDA))
  opX(0xb4, DirectRead, x(LDY), X)
  opM(0xb5, DirectRead, m(LDA), X)
  opX(0xb6, DirectRead, x(LDX), Y)
  opM(0xb7, IndirectLongRead, m(LDA), Y)
  opA(0xb8, ClearFlag, VF)
  opM(0xb9, BankRead, m(LDA), Y)
  opX(0xba, TSX)
  opX(0xbb, Transfer, Y, X)
  opX(0xbc, BankRead, x(LDY), X)
  opM(0xbd, BankRead, m(LDA), X)
  opX(0xbe, BankRead, x(LDX), Y)
  opM(0xbf, LongRead, m(LDA), X)
  opX(0xc0, ImmediateRead, x(CPY))
  opM(0xc1, IndexedIndirectRead, m(CMP))
  opA(0xc2, REP)
  opM(0xc3, StackRead, m(CMP))
  opX(0xc4, DirectRead, x(CPY))
  opM(0xc5, DirectRead, m(CMP))
  opM(0xc6, DirectModify, m(DEC))
  opM(0xc7, IndirectLongRead, m(CMP))
  opX(0xc8, ImpliedModify, x(INC), Y)
  opM(0xc9, ImmediateRead, m(CMP))
  opX(0xca, ImpliedModify, x(DEC), X)
  opA(0xcb, WAI)
  opX(0xcc, BankRead, x(CPY))
  opM(0xcd, BankRead, m(CMP))
  opM(0xce, BankModify, m(DEC))
  opM(0xcf, LongRead, m(CMP))
  opA(0xd0, Branch, ZF == 0)
  opM(0xd1, IndirectIndexedRead, m(CMP))
  opM(0xd2, IndirectRead, m(CMP))
  opM(0xd3, IndirectStackRead, m(CMP))
  opA(0xd4, PEI)
  opM(0xd5, DirectRead, m(CMP), X)
  opM(0xd6, DirectIndexedModify, m(DEC))
  opM(0xd7, IndirectLongRead, m(CMP), Y)
  opA(0xd8, ClearFlag, DF)
  opM(0xd9, BankRead, m(CMP), Y)
  opX(0xda, Push, X)
  opA(0xdb, STP)
  opA(0xdc, JMPIndirectLong)
  opM(0xdd, BankRead, m(CMP), X)
  opM(0xde, BankIndexedModify, m(DEC))
  opM(0xdf, LongRead, m(CMP), X)
  opX(0xe0, ImmediateRead, x(CPX))
  opM(0xe1, IndexedIndirectRead, m(SBC))
  opA(0xe2, SEP)
  opM(0xe3, StackRead, m(SBC))
  opX(0xe4, DirectRead, x(CPX))
  opM(0xe5, DirectRead, m(SBC))
  opM(0xe6, DirectModify, m(INC))
  opM(0xe7, IndirectLongRead, m(SBC))
  opX(0xe8, ImpliedModify, x(INC), X)
  opM(0xe9, ImmediateRead, m(SBC))
  opA(0xea, NOP)
  opA(0xeb, XBA)
  opX(0xec, BankRead, x(CPX))
  opM(0xed, BankRead, m(SBC))
  opM(0xee, BankModify, m(INC))
  opM(0xef, LongRead, m(SBC))
  opA(0xf0, Branch, ZF == 1)
  opM(0xf1, IndirectIndexedRead, m(SBC))
  opM(0xf2, IndirectRead, m(SBC))
  opM(0xf3, IndirectStackRead, m(SBC))
  opA(0xf4, PEA)
  opM(0xf5, DirectRead, m(SBC), X)
  opM(0xf6, DirectIndexedModify, m(INC))
  opM(0xf7, IndirectLongRead, m(SBC), Y)
  opA(0xf8, SetFlag, DF)
  opM(0xf9, BankRead, m(SBC), Y)
  opX(0xfa, Pull, X)
  opA(0xfb, XCE)
  opA(0xfc, JSRIndexedIndirect)
  opM(0xfd, BankRead, m(SBC), X)
  opM(0xfe, BankIndexedModify, m(INC))
  opM(0xff, LongRead, m(SBC), X)
  }
