/* * CiderPress * Copyright (C) 2007 by faddenSoft, LLC. All Rights Reserved. * See the file LICENSE for distribution terms. */ /* * Tables used in 65xxx disassembly. */ #include "StdAfx.h" #include "Disasm.h" /* * These values make the table a little easier to read, and prevent some * varieties of typographical error. As C++ consts they should not occupy * any space in the object code. */ #define OPMODE(op, addr) (ReformatDisasm65xxx::op | ReformatDisasm65xxx::addr << 8) const int kOpUnknown = OPMODE(kOpCodeUnknown, kAddrModeUnknown); const int kOpADC_Imm = OPMODE(kOpADC, kAddrImm); // 0x69 const int kOpADC_Abs = OPMODE(kOpADC, kAddrAbs); // 0x6d const int kOpADC_AbsLong = OPMODE(kOpADC, kAddrAbsLong); // 0x6f const int kOpADC_DP = OPMODE(kOpADC, kAddrDP); // 0x65 const int kOpADC_DPInd = OPMODE(kOpADC, kAddrDPInd); // 0x72 const int kOpADC_DPIndLong = OPMODE(kOpADC, kAddrDPIndLong); // 0x67 const int kOpADC_AbsIndexX = OPMODE(kOpADC, kAddrAbsIndexX); // 0x7d const int kOpADC_AbsIndexXLong = OPMODE(kOpADC, kAddrAbsIndexXLong); // 0x7f const int kOpADC_AbsIndexY = OPMODE(kOpADC, kAddrAbsIndexY); // 0x79 const int kOpADC_DPIndexX = OPMODE(kOpADC, kAddrDPIndexX); // 0x75 const int kOpADC_DPIndexXInd = OPMODE(kOpADC, kAddrDPIndexXInd); // 0x61 const int kOpADC_DPIndIndexY = OPMODE(kOpADC, kAddrDPIndIndexY); // 0x71 const int kOpADC_DPIndIndexYLong = OPMODE(kOpADC, kAddrDPIndIndexYLong); // 0x77 const int kOpADC_StackRel = OPMODE(kOpADC, kAddrStackRel); // 0x63 const int kOpADC_StackRelIndexY = OPMODE(kOpADC, kAddrStackRelIndexY); // 0x73 const int kOpAND_Imm = OPMODE(kOpAND, kAddrImm); // 0x29 const int kOpAND_Abs = OPMODE(kOpAND, kAddrAbs); // 0x2d const int kOpAND_AbsLong = OPMODE(kOpAND, kAddrAbsLong); // 0x2f const int kOpAND_DP = OPMODE(kOpAND, kAddrDP); // 0x25 const int kOpAND_DPInd = OPMODE(kOpAND, kAddrDPInd); // 0x32 const int kOpAND_DPIndLong = OPMODE(kOpAND, kAddrDPIndLong); // 0x27 const int kOpAND_AbsIndexX = OPMODE(kOpAND, kAddrAbsIndexX); // 0x3d const int kOpAND_AbsIndexXLong = OPMODE(kOpAND, kAddrAbsIndexXLong); // 0x3f const int kOpAND_AbsIndexY = OPMODE(kOpAND, kAddrAbsIndexY); // 0x39 const int kOpAND_DPIndexX = OPMODE(kOpAND, kAddrDPIndexX); // 0x35 const int kOpAND_DPIndexXInd = OPMODE(kOpAND, kAddrDPIndexXInd); // 0x21 const int kOpAND_DPIndIndexY = OPMODE(kOpAND, kAddrDPIndIndexY); // 0x31 const int kOpAND_DPIndIndexYLong = OPMODE(kOpAND, kAddrDPIndIndexYLong); // 0x37 const int kOpAND_StackRel = OPMODE(kOpAND, kAddrStackRel); // 0x23 const int kOpAND_StackRelIndexY = OPMODE(kOpAND, kAddrStackRelIndexY); // 0x33 const int kOpASL_Acc = OPMODE(kOpASL, kAddrAcc); // 0x0a const int kOpASL_Abs = OPMODE(kOpASL, kAddrAbs); // 0x0e const int kOpASL_DP = OPMODE(kOpASL, kAddrDP); // 0x06 const int kOpASL_AbsIndexX = OPMODE(kOpASL, kAddrAbsIndexX); // 0x1e const int kOpASL_DPIndexX = OPMODE(kOpASL, kAddrDPIndexX); // 0x16 const int kOpBCC_PCRel = OPMODE(kOpBCC, kAddrPCRel); // 0x90 const int kOpBCS_PCRel = OPMODE(kOpBCS, kAddrPCRel); // 0xb0 const int kOpBEQ_PCRel = OPMODE(kOpBEQ, kAddrPCRel); // 0xf0 const int kOpBIT_Imm = OPMODE(kOpBIT, kAddrImm); // 0x89 const int kOpBIT_Abs = OPMODE(kOpBIT, kAddrAbs); // 0x2c const int kOpBIT_DP = OPMODE(kOpBIT, kAddrDP); // 0x24 const int kOpBIT_AbsIndexX = OPMODE(kOpBIT, kAddrAbsIndexX); // 0x3c const int kOpBIT_DPIndexX = OPMODE(kOpBIT, kAddrDPIndexX); // 0x34 const int kOpBMI_PCRel = OPMODE(kOpBMI, kAddrPCRel); // 0x30 const int kOpBNE_PCRel = OPMODE(kOpBNE, kAddrPCRel); // 0xd0 const int kOpBPL_PCRel = OPMODE(kOpBPL, kAddrPCRel); // 0x10 const int kOpBRA_PCRel = OPMODE(kOpBRA, kAddrPCRel); // 0x80 const int kOpBRK_StackInt = OPMODE(kOpBRK, kAddrStackInt); // 0x00 const int kOpBRL_PCRelLong = OPMODE(kOpBRL, kAddrPCRelLong); // 0x82 const int kOpBVC_PCRel = OPMODE(kOpBVC, kAddrPCRel); // 0x50 const int kOpBVS_PCRel = OPMODE(kOpBVS, kAddrPCRel); // 0x70 const int kOpCLC_Implied = OPMODE(kOpCLC, kAddrImplied); // 0x18 const int kOpCLD_Implied = OPMODE(kOpCLD, kAddrImplied); // 0xd8 const int kOpCLI_Implied = OPMODE(kOpCLI, kAddrImplied); // 0x58 const int kOpCLV_Implied = OPMODE(kOpCLV, kAddrImplied); // 0xb8 const int kOpCMP_Imm = OPMODE(kOpCMP, kAddrImm); // 0xc9 const int kOpCMP_Abs = OPMODE(kOpCMP, kAddrAbs); // 0xcd const int kOpCMP_AbsLong = OPMODE(kOpCMP, kAddrAbsLong); // 0xcf const int kOpCMP_DP = OPMODE(kOpCMP, kAddrDP); // 0xc5 const int kOpCMP_DPInd = OPMODE(kOpCMP, kAddrDPInd); // 0xd2 const int kOpCMP_DPIndLong = OPMODE(kOpCMP, kAddrDPIndLong); // 0xc7 const int kOpCMP_AbsIndexX = OPMODE(kOpCMP, kAddrAbsIndexX); // 0xdd const int kOpCMP_AbsIndexXLong = OPMODE(kOpCMP, kAddrAbsIndexXLong); // 0xdf const int kOpCMP_AbsIndexY = OPMODE(kOpCMP, kAddrAbsIndexY); // 0xd9 const int kOpCMP_DPIndexX = OPMODE(kOpCMP, kAddrDPIndexX); // 0xd5 const int kOpCMP_DPIndexXInd = OPMODE(kOpCMP, kAddrDPIndexXInd); // 0xc1 const int kOpCMP_DPIndIndexY = OPMODE(kOpCMP, kAddrDPIndIndexY); // 0xd1 const int kOpCMP_DPIndIndexYLong = OPMODE(kOpCMP, kAddrDPIndIndexYLong); // 0xd7 const int kOpCMP_StackRel = OPMODE(kOpCMP, kAddrStackRel); // 0xc3 const int kOpCMP_StackRelIndexY = OPMODE(kOpCMP, kAddrStackRelIndexY); // 0xd3 const int kOpCOP_StackInt = OPMODE(kOpCOP, kAddrStackInt); // 0x02 const int kOpCPX_Imm = OPMODE(kOpCPX, kAddrImm); // 0xe0 const int kOpCPX_Abs = OPMODE(kOpCPX, kAddrAbs); // 0xec const int kOpCPX_DP = OPMODE(kOpCPX, kAddrDP); // 0xe4 const int kOpCPY_Imm = OPMODE(kOpCPY, kAddrImm); // 0xc0 const int kOpCPY_Abs = OPMODE(kOpCPY, kAddrAbs); // 0xcc const int kOpCPY_DP = OPMODE(kOpCPY, kAddrDP); // 0xc4 const int kOpDEC_Acc = OPMODE(kOpDEC, kAddrAcc); // 0x3a const int kOpDEC_Abs = OPMODE(kOpDEC, kAddrAbs); // 0xce const int kOpDEC_DP = OPMODE(kOpDEC, kAddrDP); // 0xc6 const int kOpDEC_AbsIndexX = OPMODE(kOpDEC, kAddrAbsIndexX); // 0xde const int kOpDEC_DPIndexX = OPMODE(kOpDEC, kAddrDPIndexX); // 0xd6 const int kOpDEX_Implied = OPMODE(kOpDEX, kAddrImplied); // 0xca const int kOpDEY_Implied = OPMODE(kOpDEY, kAddrImplied); // 0x88 const int kOpEOR_Imm = OPMODE(kOpEOR, kAddrImm); // 0x49 const int kOpEOR_Abs = OPMODE(kOpEOR, kAddrAbs); // 0x4d const int kOpEOR_AbsLong = OPMODE(kOpEOR, kAddrAbsLong); // 0x4f const int kOpEOR_DP = OPMODE(kOpEOR, kAddrDP); // 0x45 const int kOpEOR_DPInd = OPMODE(kOpEOR, kAddrDPInd); // 0x52 const int kOpEOR_DPIndLong = OPMODE(kOpEOR, kAddrDPIndLong); // 0x47 const int kOpEOR_AbsIndexX = OPMODE(kOpEOR, kAddrAbsIndexX); // 0x5d const int kOpEOR_AbsIndexXLong = OPMODE(kOpEOR, kAddrAbsIndexXLong); // 0x5f const int kOpEOR_AbsIndexY = OPMODE(kOpEOR, kAddrAbsIndexY); // 0x59 const int kOpEOR_DPIndexX = OPMODE(kOpEOR, kAddrDPIndexX); // 0x55 const int kOpEOR_DPIndexXInd = OPMODE(kOpEOR, kAddrDPIndexXInd); // 0x41 const int kOpEOR_DPIndIndexY = OPMODE(kOpEOR, kAddrDPIndIndexY); // 0x51 const int kOpEOR_DPIndIndexYLong = OPMODE(kOpEOR, kAddrDPIndIndexYLong); // 0x57 const int kOpEOR_StackRel = OPMODE(kOpEOR, kAddrStackRel); // 0x43 const int kOpEOR_StackRelIndexY = OPMODE(kOpEOR, kAddrStackRelIndexY); // 0x53 const int kOpINC_Acc = OPMODE(kOpINC, kAddrAcc); // 0x1a const int kOpINC_Abs = OPMODE(kOpINC, kAddrAbs); // 0xee const int kOpINC_DP = OPMODE(kOpINC, kAddrDP); // 0xe6 const int kOpINC_AbsIndexX = OPMODE(kOpINC, kAddrAbsIndexX); // 0xfe const int kOpINC_DPIndexX = OPMODE(kOpINC, kAddrDPIndexX); // 0xf6 const int kOpINX_Implied = OPMODE(kOpINX, kAddrImplied); // 0xe8 const int kOpINY_Implied = OPMODE(kOpINY, kAddrImplied); // 0xc8 const int kOpJML_AbsIndLong = OPMODE(kOpJML, kAddrAbsIndLong); // 0xdc const int kOpJMP_Abs = OPMODE(kOpJMP, kAddrAbs); // 0x4c const int kOpJMP_AbsInd = OPMODE(kOpJMP, kAddrAbsInd); // 0x6c const int kOpJMP_AbsIndexXInd = OPMODE(kOpJMP, kAddrAbsIndexXInd); // 0x7c const int kOpJMP_AbsLong = OPMODE(kOpJMP, kAddrAbsLong); // 0x5c const int kOpJSL_AbsLong = OPMODE(kOpJSL, kAddrAbsLong); // 0x22 const int kOpJSR_Abs = OPMODE(kOpJSR, kAddrAbs); // 0x20 const int kOpJSR_AbsIndexXInd = OPMODE(kOpJSR, kAddrAbsIndexXInd); // 0xfc const int kOpLDA_Imm = OPMODE(kOpLDA, kAddrImm); // 0xa9 const int kOpLDA_Abs = OPMODE(kOpLDA, kAddrAbs); // 0xad const int kOpLDA_AbsLong = OPMODE(kOpLDA, kAddrAbsLong); // 0xaf const int kOpLDA_DP = OPMODE(kOpLDA, kAddrDP); // 0xa5 const int kOpLDA_DPInd = OPMODE(kOpLDA, kAddrDPInd); // 0xb2 const int kOpLDA_DPIndLong = OPMODE(kOpLDA, kAddrDPIndLong); // 0xa7 const int kOpLDA_AbsIndexX = OPMODE(kOpLDA, kAddrAbsIndexX); // 0xbd const int kOpLDA_AbsIndexXLong = OPMODE(kOpLDA, kAddrAbsIndexXLong); // 0xbf const int kOpLDA_AbsIndexY = OPMODE(kOpLDA, kAddrAbsIndexY); // 0xb9 const int kOpLDA_DPIndexX = OPMODE(kOpLDA, kAddrDPIndexX); // 0xb5 const int kOpLDA_DPIndexXInd = OPMODE(kOpLDA, kAddrDPIndexXInd); // 0xa1 const int kOpLDA_DPIndIndexY = OPMODE(kOpLDA, kAddrDPIndIndexY); // 0xb1 const int kOpLDA_DPIndIndexYLong = OPMODE(kOpLDA, kAddrDPIndIndexYLong); // 0xb7 const int kOpLDA_StackRel = OPMODE(kOpLDA, kAddrStackRel); // 0xa3 const int kOpLDA_StackRelIndexY = OPMODE(kOpLDA, kAddrStackRelIndexY); // 0xb3 const int kOpLDX_Imm = OPMODE(kOpLDX, kAddrImm); // 0xa2 const int kOpLDX_Abs = OPMODE(kOpLDX, kAddrAbs); // 0xae const int kOpLDX_DP = OPMODE(kOpLDX, kAddrDP); // 0xa6 const int kOpLDX_AbsIndexY = OPMODE(kOpLDX, kAddrAbsIndexY); // 0xbe const int kOpLDX_DPIndexY = OPMODE(kOpLDX, kAddrDPIndexY); // 0xb6 const int kOpLDY_Imm = OPMODE(kOpLDY, kAddrImm); // 0xa0 const int kOpLDY_Abs = OPMODE(kOpLDY, kAddrAbs); // 0xac const int kOpLDY_DP = OPMODE(kOpLDY, kAddrDP); // 0xa4 const int kOpLDY_AbsIndexX = OPMODE(kOpLDY, kAddrAbsIndexX); // 0xbc const int kOpLDY_DPIndexX = OPMODE(kOpLDY, kAddrDPIndexX); // 0xb4 const int kOpLSR_Acc = OPMODE(kOpLSR, kAddrAcc); // 0x4a const int kOpLSR_Abs = OPMODE(kOpLSR, kAddrAbs); // 0x4e const int kOpLSR_DP = OPMODE(kOpLSR, kAddrDP); // 0x46 const int kOpLSR_AbsIndexX = OPMODE(kOpLSR, kAddrAbsIndexX); // 0x5e const int kOpLSR_DPIndexX = OPMODE(kOpLSR, kAddrDPIndexX); // 0x56 const int kOpMVN_BlockMove = OPMODE(kOpMVN, kAddrBlockMove); // 0x54 const int kOpMVP_BlockMove = OPMODE(kOpMVP, kAddrBlockMove); // 0x44 const int kOpNOP_Implied = OPMODE(kOpNOP, kAddrImplied); // 0xea const int kOpORA_Imm = OPMODE(kOpORA, kAddrImm); // 0x09 const int kOpORA_Abs = OPMODE(kOpORA, kAddrAbs); // 0x0d const int kOpORA_AbsLong = OPMODE(kOpORA, kAddrAbsLong); // 0x0f const int kOpORA_DP = OPMODE(kOpORA, kAddrDP); // 0x05 const int kOpORA_DPInd = OPMODE(kOpORA, kAddrDPInd); // 0x12 const int kOpORA_DPIndLong = OPMODE(kOpORA, kAddrDPIndLong); // 0x07 const int kOpORA_AbsIndexX = OPMODE(kOpORA, kAddrAbsIndexX); // 0x1d const int kOpORA_AbsIndexXLong = OPMODE(kOpORA, kAddrAbsIndexXLong); // 0x1f const int kOpORA_AbsIndexY = OPMODE(kOpORA, kAddrAbsIndexY); // 0x19 const int kOpORA_DPIndexX = OPMODE(kOpORA, kAddrDPIndexX); // 0x15 const int kOpORA_DPIndexXInd = OPMODE(kOpORA, kAddrDPIndexXInd); // 0x01 const int kOpORA_DPIndIndexY = OPMODE(kOpORA, kAddrDPIndIndexY); // 0x11 const int kOpORA_DPIndIndexYLong = OPMODE(kOpORA, kAddrDPIndIndexYLong); // 0x17 const int kOpORA_StackRel = OPMODE(kOpORA, kAddrStackRel); // 0x03 const int kOpORA_StackRelIndexY = OPMODE(kOpORA, kAddrStackRelIndexY); // 0x13 const int kOpPEA_StackAbs = OPMODE(kOpPEA, kAddrStackAbs); // 0xf4 const int kOpPEI_StackDPInd = OPMODE(kOpPEI, kAddrStackDPInd); // 0xd4 const int kOpPER_StackPCRel = OPMODE(kOpPER, kAddrStackPCRel); // 0x62 const int kOpPHA_StackPush = OPMODE(kOpPHA, kAddrStackPush); // 0x48 const int kOpPHB_StackPush = OPMODE(kOpPHB, kAddrStackPush); // 0x8b const int kOpPHD_StackPush = OPMODE(kOpPHD, kAddrStackPush); // 0x0b const int kOpPHK_StackPush = OPMODE(kOpPHK, kAddrStackPush); // 0x4b const int kOpPHP_StackPush = OPMODE(kOpPHP, kAddrStackPush); // 0x08 const int kOpPHX_StackPush = OPMODE(kOpPHX, kAddrStackPush); // 0xda const int kOpPHY_StackPush = OPMODE(kOpPHY, kAddrStackPush); // 0x5a const int kOpPLA_StackPull = OPMODE(kOpPLA, kAddrStackPull); // 0x68 const int kOpPLB_StackPull = OPMODE(kOpPLB, kAddrStackPull); // 0xab const int kOpPLD_StackPull = OPMODE(kOpPLD, kAddrStackPull); // 0x2b const int kOpPLP_StackPull = OPMODE(kOpPLP, kAddrStackPull); // 0x28 const int kOpPLX_StackPull = OPMODE(kOpPLX, kAddrStackPull); // 0xfa const int kOpPLY_StackPull = OPMODE(kOpPLY, kAddrStackPull); // 0x7a const int kOpREP_Imm = OPMODE(kOpREP, kAddrImm); // 0xc2 const int kOpROL_Acc = OPMODE(kOpROL, kAddrAcc); // 0x2a const int kOpROL_Abs = OPMODE(kOpROL, kAddrAbs); // 0x2e const int kOpROL_DP = OPMODE(kOpROL, kAddrDP); // 0x26 const int kOpROL_AbsIndexX = OPMODE(kOpROL, kAddrAbsIndexX); // 0x3e const int kOpROL_DPIndexX = OPMODE(kOpROL, kAddrDPIndexX); // 0x36 const int kOpROR_Acc = OPMODE(kOpROR, kAddrAcc); // 0x6a const int kOpROR_Abs = OPMODE(kOpROR, kAddrAbs); // 0x6e const int kOpROR_DP = OPMODE(kOpROR, kAddrDP); // 0x66 const int kOpROR_AbsIndexX = OPMODE(kOpROR, kAddrAbsIndexX); // 0x7e const int kOpROR_DPIndexX = OPMODE(kOpROR, kAddrDPIndexX); // 0x76 const int kOpRTI_StackRTI = OPMODE(kOpRTI, kAddrStackRTI); // 0x40 const int kOpRTL_StackRTL = OPMODE(kOpRTL, kAddrStackRTL); // 0x6b const int kOpRTS_StackRTS = OPMODE(kOpRTS, kAddrStackRTS); // 0x60 const int kOpSBC_Imm = OPMODE(kOpSBC, kAddrImm); // 0xe9 const int kOpSBC_Abs = OPMODE(kOpSBC, kAddrAbs); // 0xed const int kOpSBC_AbsLong = OPMODE(kOpSBC, kAddrAbsLong); // 0xef const int kOpSBC_DP = OPMODE(kOpSBC, kAddrDP); // 0xe5 const int kOpSBC_DPInd = OPMODE(kOpSBC, kAddrDPInd); // 0xf2 const int kOpSBC_DPIndLong = OPMODE(kOpSBC, kAddrDPIndLong); // 0xe7 const int kOpSBC_AbsIndexX = OPMODE(kOpSBC, kAddrAbsIndexX); // 0xfd const int kOpSBC_AbsIndexXLong = OPMODE(kOpSBC, kAddrAbsIndexXLong); // 0xff const int kOpSBC_AbsIndexY = OPMODE(kOpSBC, kAddrAbsIndexY); // 0xf9 const int kOpSBC_DPIndexX = OPMODE(kOpSBC, kAddrDPIndexX); // 0xf5 const int kOpSBC_DPIndexXInd = OPMODE(kOpSBC, kAddrDPIndexXInd); // 0xe1 const int kOpSBC_DPIndIndexY = OPMODE(kOpSBC, kAddrDPIndIndexY); // 0xf1 const int kOpSBC_DPIndIndexYLong = OPMODE(kOpSBC, kAddrDPIndIndexYLong); // 0xf7 const int kOpSBC_StackRel = OPMODE(kOpSBC, kAddrStackRel); // 0xe3 const int kOpSBC_StackRelIndexY = OPMODE(kOpSBC, kAddrStackRelIndexY); // 0xf3 const int kOpSEC_Implied = OPMODE(kOpSEC, kAddrImplied); // 0x38 const int kOpSED_Implied = OPMODE(kOpSED, kAddrImplied); // 0xf8 const int kOpSEI_Implied = OPMODE(kOpSEI, kAddrImplied); // 0x78 const int kOpSEP_Imm = OPMODE(kOpSEP, kAddrImm); // 0xe2 const int kOpSTA_Abs = OPMODE(kOpSTA, kAddrAbs); // 0x8d const int kOpSTA_AbsLong = OPMODE(kOpSTA, kAddrAbsLong); // 0x8f const int kOpSTA_DP = OPMODE(kOpSTA, kAddrDP); // 0x85 const int kOpSTA_DPInd = OPMODE(kOpSTA, kAddrDPInd); // 0x92 const int kOpSTA_DPIndLong = OPMODE(kOpSTA, kAddrDPIndLong); // 0x87 const int kOpSTA_AbsIndexX = OPMODE(kOpSTA, kAddrAbsIndexX); // 0x9d const int kOpSTA_AbsIndexXLong = OPMODE(kOpSTA, kAddrAbsIndexXLong); // 0x9f const int kOpSTA_AbsIndexY = OPMODE(kOpSTA, kAddrAbsIndexY); // 0x99 const int kOpSTA_DPIndexX = OPMODE(kOpSTA, kAddrDPIndexX); // 0x95 const int kOpSTA_DPIndexXInd = OPMODE(kOpSTA, kAddrDPIndexXInd); // 0x81 const int kOpSTA_DPIndIndexY = OPMODE(kOpSTA, kAddrDPIndIndexY); // 0x91 const int kOpSTA_DPIndIndexYLong = OPMODE(kOpSTA, kAddrDPIndIndexYLong); // 0x97 const int kOpSTA_StackRel = OPMODE(kOpSTA, kAddrStackRel); // 0x83 const int kOpSTA_StackRelIndexY = OPMODE(kOpSTA, kAddrStackRelIndexY); // 0x93 const int kOpSTP_Implied = OPMODE(kOpSTP, kAddrImplied); // 0xdb const int kOpSTX_Abs = OPMODE(kOpSTX, kAddrAbs); // 0x8e const int kOpSTX_DP = OPMODE(kOpSTX, kAddrDP); // 0x86 const int kOpSTX_DPIndexY = OPMODE(kOpSTX, kAddrDPIndexY); // 0x96 const int kOpSTY_Abs = OPMODE(kOpSTY, kAddrAbs); // 0x8c const int kOpSTY_DP = OPMODE(kOpSTY, kAddrDP); // 0x84 const int kOpSTY_DPIndexX = OPMODE(kOpSTY, kAddrDPIndexX); // 0x94 const int kOpSTZ_Abs = OPMODE(kOpSTZ, kAddrAbs); // 0x9c const int kOpSTZ_DP = OPMODE(kOpSTZ, kAddrDP); // 0x64 const int kOpSTZ_AbsIndexX = OPMODE(kOpSTZ, kAddrAbsIndexX); // 0x9e const int kOpSTZ_DPIndexX = OPMODE(kOpSTZ, kAddrDPIndexX); // 0x74 const int kOpTAX_Implied = OPMODE(kOpTAX, kAddrImplied); // 0xaa const int kOpTAY_Implied = OPMODE(kOpTAY, kAddrImplied); // 0xa8 const int kOpTCD_Implied = OPMODE(kOpTCD, kAddrImplied); // 0x5b const int kOpTCS_Implied = OPMODE(kOpTCS, kAddrImplied); // 0x1b const int kOpTDC_Implied = OPMODE(kOpTDC, kAddrImplied); // 0x7b const int kOpTRB_Abs = OPMODE(kOpTRB, kAddrAbs); // 0x1c const int kOpTRB_DP = OPMODE(kOpTRB, kAddrDP); // 0x14 const int kOpTSB_Abs = OPMODE(kOpTSB, kAddrAbs); // 0x0c const int kOpTSB_DP = OPMODE(kOpTSB, kAddrDP); // 0x04 const int kOpTSC_Implied = OPMODE(kOpTSC, kAddrImplied); // 0x3b const int kOpTSX_Implied = OPMODE(kOpTSX, kAddrImplied); // 0xba const int kOpTXA_Implied = OPMODE(kOpTXA, kAddrImplied); // 0x8a const int kOpTXS_Implied = OPMODE(kOpTXS, kAddrImplied); // 0x9a const int kOpTXY_Implied = OPMODE(kOpTXY, kAddrImplied); // 0x9b const int kOpTYA_Implied = OPMODE(kOpTYA, kAddrImplied); // 0x98 const int kOpTYX_Implied = OPMODE(kOpTYX, kAddrImplied); // 0xbb const int kOpWAI_Implied = OPMODE(kOpWAI, kAddrImplied); // 0xcb const int kOpWDM_Implied = OPMODE(kOpWDM, kAddrWDM); // 0x42 const int kOpXBA_Implied = OPMODE(kOpXBA, kAddrImplied); // 0xeb const int kOpXCE_Implied = OPMODE(kOpXCE, kAddrImplied); // 0xfb /* * Map opcode bytes to instructions on all four CPUs (6502 65C02 65802 65816). * * Each entry has an OpCode enum in the low byte and an AddrMode enum in the * high byte. * * Instruction availability on 65802 and 65816 is generally identical. We * give it its own column so that, if we need to model some 65802-specific * quirks, we can do it by assigning a different instruction. */ /*static*/ const ReformatDisasm65xxx::OpMap ReformatDisasm65xxx::kOpMap[] = { /*00*/{ kOpBRK_StackInt, kOpBRK_StackInt, kOpBRK_StackInt, kOpBRK_StackInt }, /*01*/{ kOpORA_DPIndexXInd, kOpORA_DPIndexXInd, kOpORA_DPIndexXInd, kOpORA_DPIndexXInd }, /*02*/{ kOpUnknown, kOpUnknown, kOpCOP_StackInt, kOpCOP_StackInt }, /*03*/{ kOpUnknown, kOpUnknown, kOpORA_StackRel, kOpORA_StackRel }, /*04*/{ kOpUnknown, kOpTSB_DP, kOpTSB_DP, kOpTSB_DP }, /*05*/{ kOpORA_DP, kOpORA_DP, kOpORA_DP, kOpORA_DP }, /*06*/{ kOpASL_DP, kOpASL_DP, kOpASL_DP, kOpASL_DP }, /*07*/{ kOpUnknown, kOpUnknown, kOpORA_DPIndLong, kOpORA_DPIndLong }, /*08*/{ kOpPHP_StackPush, kOpPHP_StackPush, kOpPHP_StackPush, kOpPHP_StackPush }, /*09*/{ kOpORA_Imm, kOpORA_Imm, kOpORA_Imm, kOpORA_Imm }, /*0a*/{ kOpASL_Acc, kOpASL_Acc, kOpASL_Acc, kOpASL_Acc }, /*0b*/{ kOpUnknown, kOpUnknown, kOpPHD_StackPush, kOpPHD_StackPush }, /*0c*/{ kOpUnknown, kOpTSB_Abs, kOpTSB_Abs, kOpTSB_Abs }, /*0d*/{ kOpORA_Abs, kOpORA_Abs, kOpORA_Abs, kOpORA_Abs }, /*0e*/{ kOpASL_Abs, kOpASL_Abs, kOpASL_Abs, kOpASL_Abs }, /*0f*/{ kOpUnknown, kOpUnknown, kOpORA_AbsLong, kOpORA_AbsLong }, /*10*/{ kOpBPL_PCRel, kOpBPL_PCRel, kOpBPL_PCRel, kOpBPL_PCRel }, /*11*/{ kOpORA_DPIndIndexY, kOpORA_DPIndIndexY, kOpORA_DPIndIndexY, kOpORA_DPIndIndexY }, /*12*/{ kOpUnknown, kOpORA_DPInd, kOpORA_DPInd, kOpORA_DPInd }, /*13*/{ kOpUnknown, kOpUnknown, kOpORA_StackRelIndexY, kOpORA_StackRelIndexY }, /*14*/{ kOpUnknown, kOpTRB_DP, kOpTRB_DP, kOpTRB_DP }, /*15*/{ kOpORA_DPIndexX, kOpORA_DPIndexX, kOpORA_DPIndexX, kOpORA_DPIndexX }, /*16*/{ kOpASL_DPIndexX, kOpASL_DPIndexX, kOpASL_DPIndexX, kOpASL_DPIndexX }, /*17*/{ kOpUnknown, kOpUnknown, kOpORA_DPIndIndexYLong, kOpORA_DPIndIndexYLong }, /*18*/{ kOpCLC_Implied, kOpCLC_Implied, kOpCLC_Implied, kOpCLC_Implied }, /*19*/{ kOpORA_AbsIndexY, kOpORA_AbsIndexY, kOpORA_AbsIndexY, kOpORA_AbsIndexY }, /*1a*/{ kOpUnknown, kOpINC_Acc, kOpINC_Acc, kOpINC_Acc }, /*1b*/{ kOpUnknown, kOpUnknown, kOpTCS_Implied, kOpTCS_Implied }, /*1c*/{ kOpUnknown, kOpTRB_Abs, kOpTRB_Abs, kOpTRB_Abs }, /*1d*/{ kOpORA_AbsIndexX, kOpORA_AbsIndexX, kOpORA_AbsIndexX, kOpORA_AbsIndexX }, /*1e*/{ kOpASL_AbsIndexX, kOpASL_AbsIndexX, kOpASL_AbsIndexX, kOpASL_AbsIndexX }, /*1f*/{ kOpUnknown, kOpUnknown, kOpORA_AbsIndexXLong, kOpORA_AbsIndexXLong }, /*20*/{ kOpJSR_Abs, kOpJSR_Abs, kOpJSR_Abs, kOpJSR_Abs }, /*21*/{ kOpAND_DPIndexXInd, kOpAND_DPIndexXInd, kOpAND_DPIndexXInd, kOpAND_DPIndexXInd }, /*22*/{ kOpUnknown, kOpUnknown, kOpJSL_AbsLong, kOpJSL_AbsLong }, /*23*/{ kOpUnknown, kOpUnknown, kOpAND_StackRel, kOpAND_StackRel }, /*24*/{ kOpBIT_DP, kOpBIT_DP, kOpBIT_DP, kOpBIT_DP }, /*25*/{ kOpAND_DP, kOpAND_DP, kOpAND_DP, kOpAND_DP }, /*26*/{ kOpROL_DP, kOpROL_DP, kOpROL_DP, kOpROL_DP }, /*27*/{ kOpUnknown, kOpUnknown, kOpAND_DPIndLong, kOpAND_DPIndLong }, /*28*/{ kOpPLP_StackPull, kOpPLP_StackPull, kOpPLP_StackPull, kOpPLP_StackPull }, /*29*/{ kOpAND_Imm, kOpAND_Imm, kOpAND_Imm, kOpAND_Imm }, /*2a*/{ kOpROL_Acc, kOpROL_Acc, kOpROL_Acc, kOpROL_Acc }, /*2b*/{ kOpUnknown, kOpUnknown, kOpPLD_StackPull, kOpPLD_StackPull }, /*2c*/{ kOpBIT_Abs, kOpBIT_Abs, kOpBIT_Abs, kOpBIT_Abs }, /*2d*/{ kOpAND_Abs, kOpAND_Abs, kOpAND_Abs, kOpAND_Abs }, /*2e*/{ kOpROL_Abs, kOpROL_Abs, kOpROL_Abs, kOpROL_Abs }, /*2f*/{ kOpUnknown, kOpUnknown, kOpAND_AbsLong, kOpAND_AbsLong }, /*30*/{ kOpBMI_PCRel, kOpBMI_PCRel, kOpBMI_PCRel, kOpBMI_PCRel }, /*31*/{ kOpAND_DPIndIndexY, kOpAND_DPIndIndexY, kOpAND_DPIndIndexY, kOpAND_DPIndIndexY }, /*32*/{ kOpUnknown, kOpAND_DPInd, kOpAND_DPInd, kOpAND_DPInd }, /*33*/{ kOpUnknown, kOpUnknown, kOpAND_StackRelIndexY, kOpAND_StackRelIndexY }, /*34*/{ kOpUnknown, kOpBIT_DPIndexX, kOpBIT_DPIndexX, kOpBIT_DPIndexX }, /*35*/{ kOpAND_DPIndexX, kOpAND_DPIndexX, kOpAND_DPIndexX, kOpAND_DPIndexX }, /*36*/{ kOpROL_DPIndexX, kOpROL_DPIndexX, kOpROL_DPIndexX, kOpROL_DPIndexX }, /*37*/{ kOpUnknown, kOpUnknown, kOpAND_DPIndIndexYLong, kOpAND_DPIndIndexYLong }, /*38*/{ kOpSEC_Implied, kOpSEC_Implied, kOpSEC_Implied, kOpSEC_Implied }, /*39*/{ kOpAND_AbsIndexY, kOpAND_AbsIndexY, kOpAND_AbsIndexY, kOpAND_AbsIndexY }, /*3a*/{ kOpUnknown, kOpDEC_Acc, kOpDEC_Acc, kOpDEC_Acc }, /*3b*/{ kOpUnknown, kOpUnknown, kOpTSC_Implied, kOpTSC_Implied }, /*3c*/{ kOpUnknown, kOpBIT_AbsIndexX, kOpBIT_AbsIndexX, kOpBIT_AbsIndexX }, /*3d*/{ kOpAND_AbsIndexX, kOpAND_AbsIndexX, kOpAND_AbsIndexX, kOpAND_AbsIndexX }, /*3e*/{ kOpROL_AbsIndexX, kOpROL_AbsIndexX, kOpROL_AbsIndexX, kOpROL_AbsIndexX }, /*3f*/{ kOpUnknown, kOpUnknown, kOpAND_AbsIndexXLong, kOpAND_AbsIndexXLong }, /*40*/{ kOpRTI_StackRTI, kOpRTI_StackRTI, kOpRTI_StackRTI, kOpRTI_StackRTI }, /*41*/{ kOpEOR_DPIndexXInd, kOpEOR_DPIndexXInd, kOpEOR_DPIndexXInd, kOpEOR_DPIndexXInd }, /*42*/{ kOpUnknown, kOpUnknown, kOpWDM_Implied, kOpWDM_Implied }, /*43*/{ kOpUnknown, kOpUnknown, kOpEOR_StackRel, kOpEOR_StackRel }, /*44*/{ kOpUnknown, kOpUnknown, kOpMVP_BlockMove, kOpMVP_BlockMove }, /*45*/{ kOpEOR_DP, kOpEOR_DP, kOpEOR_DP, kOpEOR_DP }, /*46*/{ kOpLSR_DP, kOpLSR_DP, kOpLSR_DP, kOpLSR_DP }, /*47*/{ kOpUnknown, kOpUnknown, kOpEOR_DPIndLong, kOpEOR_DPIndLong }, /*48*/{ kOpPHA_StackPush, kOpPHA_StackPush, kOpPHA_StackPush, kOpPHA_StackPush }, /*49*/{ kOpEOR_Imm, kOpEOR_Imm, kOpEOR_Imm, kOpEOR_Imm }, /*4a*/{ kOpLSR_Acc, kOpLSR_Acc, kOpLSR_Acc, kOpLSR_Acc }, /*4b*/{ kOpUnknown, kOpUnknown, kOpPHK_StackPush, kOpPHK_StackPush }, /*4c*/{ kOpJMP_Abs, kOpJMP_Abs, kOpJMP_Abs, kOpJMP_Abs }, /*4d*/{ kOpEOR_Abs, kOpEOR_Abs, kOpEOR_Abs, kOpEOR_Abs }, /*4e*/{ kOpLSR_Abs, kOpLSR_Abs, kOpLSR_Abs, kOpLSR_Abs }, /*4f*/{ kOpUnknown, kOpUnknown, kOpEOR_AbsLong, kOpEOR_AbsLong }, /*50*/{ kOpBVC_PCRel, kOpBVC_PCRel, kOpBVC_PCRel, kOpBVC_PCRel }, /*51*/{ kOpEOR_DPIndIndexY, kOpEOR_DPIndIndexY, kOpEOR_DPIndIndexY, kOpEOR_DPIndIndexY }, /*52*/{ kOpUnknown, kOpEOR_DPInd, kOpEOR_DPInd, kOpEOR_DPInd }, /*53*/{ kOpUnknown, kOpUnknown, kOpEOR_StackRelIndexY, kOpEOR_StackRelIndexY }, /*54*/{ kOpUnknown, kOpUnknown, kOpMVN_BlockMove, kOpMVN_BlockMove }, /*55*/{ kOpEOR_DPIndexX, kOpEOR_DPIndexX, kOpEOR_DPIndexX, kOpEOR_DPIndexX }, /*56*/{ kOpLSR_DPIndexX, kOpLSR_DPIndexX, kOpLSR_DPIndexX, kOpLSR_DPIndexX }, /*57*/{ kOpUnknown, kOpUnknown, kOpEOR_DPIndIndexYLong, kOpEOR_DPIndIndexYLong }, /*58*/{ kOpCLI_Implied, kOpCLI_Implied, kOpCLI_Implied, kOpCLI_Implied }, /*59*/{ kOpEOR_AbsIndexY, kOpEOR_AbsIndexY, kOpEOR_AbsIndexY, kOpEOR_AbsIndexY }, /*5a*/{ kOpUnknown, kOpPHY_StackPush, kOpPHY_StackPush, kOpPHY_StackPush }, /*5b*/{ kOpUnknown, kOpUnknown, kOpTCD_Implied, kOpTCD_Implied }, /*5c*/{ kOpUnknown, kOpUnknown, kOpJMP_AbsLong, kOpJMP_AbsLong }, /*5d*/{ kOpEOR_AbsIndexX, kOpEOR_AbsIndexX, kOpEOR_AbsIndexX, kOpEOR_AbsIndexX }, /*5e*/{ kOpLSR_AbsIndexX, kOpLSR_AbsIndexX, kOpLSR_AbsIndexX, kOpLSR_AbsIndexX }, /*5f*/{ kOpUnknown, kOpUnknown, kOpEOR_AbsIndexXLong, kOpEOR_AbsIndexXLong }, /*60*/{ kOpRTS_StackRTS, kOpRTS_StackRTS, kOpRTS_StackRTS, kOpRTS_StackRTS }, /*61*/{ kOpADC_DPIndexXInd, kOpADC_DPIndexXInd, kOpADC_DPIndexXInd, kOpADC_DPIndexXInd }, /*62*/{ kOpUnknown, kOpUnknown, kOpPER_StackPCRel, kOpPER_StackPCRel }, /*63*/{ kOpUnknown, kOpUnknown, kOpADC_StackRel, kOpADC_StackRel }, /*64*/{ kOpUnknown, kOpSTZ_DP, kOpSTZ_DP, kOpSTZ_DP }, /*65*/{ kOpADC_DP, kOpADC_DP, kOpADC_DP, kOpADC_DP }, /*66*/{ kOpROR_DP, kOpROR_DP, kOpROR_DP, kOpROR_DP }, /*67*/{ kOpUnknown, kOpUnknown, kOpADC_DPIndLong, kOpADC_DPIndLong }, /*68*/{ kOpPLA_StackPull, kOpPLA_StackPull, kOpPLA_StackPull, kOpPLA_StackPull }, /*69*/{ kOpADC_Imm, kOpADC_Imm, kOpADC_Imm, kOpADC_Imm }, /*6a*/{ kOpROR_Acc, kOpROR_Acc, kOpROR_Acc, kOpROR_Acc }, /*6b*/{ kOpUnknown, kOpUnknown, kOpRTL_StackRTL, kOpRTL_StackRTL }, /*6c*/{ kOpJMP_AbsInd, kOpJMP_AbsInd, kOpJMP_AbsInd, kOpJMP_AbsInd }, /*6d*/{ kOpADC_Abs, kOpADC_Abs, kOpADC_Abs, kOpADC_Abs }, /*6e*/{ kOpROR_Abs, kOpROR_Abs, kOpROR_Abs, kOpROR_Abs }, /*6f*/{ kOpUnknown, kOpUnknown, kOpADC_AbsLong, kOpADC_AbsLong }, /*70*/{ kOpBVS_PCRel, kOpBVS_PCRel, kOpBVS_PCRel, kOpBVS_PCRel }, /*71*/{ kOpADC_DPIndIndexY, kOpADC_DPIndIndexY, kOpADC_DPIndIndexY, kOpADC_DPIndIndexY }, /*72*/{ kOpUnknown, kOpADC_DPInd, kOpADC_DPInd, kOpADC_DPInd }, /*73*/{ kOpUnknown, kOpUnknown, kOpADC_StackRelIndexY, kOpADC_StackRelIndexY }, /*74*/{ kOpUnknown, kOpSTZ_DPIndexX, kOpSTZ_DPIndexX, kOpSTZ_DPIndexX }, /*75*/{ kOpADC_DPIndexX, kOpADC_DPIndexX, kOpADC_DPIndexX, kOpADC_DPIndexX }, /*76*/{ kOpROR_DPIndexX, kOpROR_DPIndexX, kOpROR_DPIndexX, kOpROR_DPIndexX }, /*77*/{ kOpUnknown, kOpUnknown, kOpADC_DPIndIndexYLong, kOpADC_DPIndIndexYLong }, /*78*/{ kOpSEI_Implied, kOpSEI_Implied, kOpSEI_Implied, kOpSEI_Implied }, /*79*/{ kOpADC_AbsIndexY, kOpADC_AbsIndexY, kOpADC_AbsIndexY, kOpADC_AbsIndexY }, /*7a*/{ kOpUnknown, kOpPLY_StackPull, kOpPLY_StackPull, kOpPLY_StackPull }, /*7b*/{ kOpUnknown, kOpUnknown, kOpTDC_Implied, kOpTDC_Implied }, /*7c*/{ kOpUnknown, kOpJMP_AbsIndexXInd, kOpJMP_AbsIndexXInd, kOpJMP_AbsIndexXInd }, /*7d*/{ kOpADC_AbsIndexX, kOpADC_AbsIndexX, kOpADC_AbsIndexX, kOpADC_AbsIndexX }, /*7e*/{ kOpROR_AbsIndexX, kOpROR_AbsIndexX, kOpROR_AbsIndexX, kOpROR_AbsIndexX }, /*7f*/{ kOpUnknown, kOpUnknown, kOpADC_AbsIndexXLong, kOpADC_AbsIndexXLong }, /*80*/{ kOpUnknown, kOpBRA_PCRel, kOpBRA_PCRel, kOpBRA_PCRel }, /*81*/{ kOpSTA_DPIndexXInd, kOpSTA_DPIndexXInd, kOpSTA_DPIndexXInd, kOpSTA_DPIndexXInd }, /*82*/{ kOpUnknown, kOpUnknown, kOpBRL_PCRelLong, kOpBRL_PCRelLong }, /*83*/{ kOpUnknown, kOpUnknown, kOpSTA_StackRel, kOpSTA_StackRel }, /*84*/{ kOpSTY_DP, kOpSTY_DP, kOpSTY_DP, kOpSTY_DP }, /*85*/{ kOpSTA_DP, kOpSTA_DP, kOpSTA_DP, kOpSTA_DP }, /*86*/{ kOpSTX_DP, kOpSTX_DP, kOpSTX_DP, kOpSTX_DP }, /*87*/{ kOpUnknown, kOpUnknown, kOpSTA_DPIndLong, kOpSTA_DPIndLong }, /*88*/{ kOpDEY_Implied, kOpDEY_Implied, kOpDEY_Implied, kOpDEY_Implied }, /*89*/{ kOpUnknown, kOpBIT_Imm, kOpBIT_Imm, kOpBIT_Imm }, /*8a*/{ kOpTXA_Implied, kOpTXA_Implied, kOpTXA_Implied, kOpTXA_Implied }, /*8b*/{ kOpUnknown, kOpUnknown, kOpPHB_StackPush, kOpPHB_StackPush }, /*8c*/{ kOpSTY_Abs, kOpSTY_Abs, kOpSTY_Abs, kOpSTY_Abs }, /*8d*/{ kOpSTA_Abs, kOpSTA_Abs, kOpSTA_Abs, kOpSTA_Abs }, /*8e*/{ kOpSTX_Abs, kOpSTX_Abs, kOpSTX_Abs, kOpSTX_Abs }, /*8f*/{ kOpUnknown, kOpUnknown, kOpSTA_AbsLong, kOpSTA_AbsLong }, /*90*/{ kOpBCC_PCRel, kOpBCC_PCRel, kOpBCC_PCRel, kOpBCC_PCRel }, /*91*/{ kOpSTA_DPIndIndexY, kOpSTA_DPIndIndexY, kOpSTA_DPIndIndexY, kOpSTA_DPIndIndexY }, /*92*/{ kOpUnknown, kOpSTA_DPInd, kOpSTA_DPInd, kOpSTA_DPInd }, /*93*/{ kOpUnknown, kOpUnknown, kOpSTA_StackRelIndexY, kOpSTA_StackRelIndexY }, /*94*/{ kOpSTY_DPIndexX, kOpSTY_DPIndexX, kOpSTY_DPIndexX, kOpSTY_DPIndexX }, /*95*/{ kOpSTA_DPIndexX, kOpSTA_DPIndexX, kOpSTA_DPIndexX, kOpSTA_DPIndexX }, /*96*/{ kOpSTX_DPIndexY, kOpSTX_DPIndexY, kOpSTX_DPIndexY, kOpSTX_DPIndexY }, /*97*/{ kOpUnknown, kOpUnknown, kOpSTA_DPIndIndexYLong, kOpSTA_DPIndIndexYLong }, /*98*/{ kOpTYA_Implied, kOpTYA_Implied, kOpTYA_Implied, kOpTYA_Implied }, /*99*/{ kOpSTA_AbsIndexY, kOpSTA_AbsIndexY, kOpSTA_AbsIndexY, kOpSTA_AbsIndexY }, /*9a*/{ kOpTXS_Implied, kOpTXS_Implied, kOpTXS_Implied, kOpTXS_Implied }, /*9b*/{ kOpUnknown, kOpUnknown, kOpTXY_Implied, kOpTXY_Implied }, /*9c*/{ kOpUnknown, kOpSTZ_Abs, kOpSTZ_Abs, kOpSTZ_Abs }, /*9d*/{ kOpSTA_AbsIndexX, kOpSTA_AbsIndexX, kOpSTA_AbsIndexX, kOpSTA_AbsIndexX }, /*9e*/{ kOpUnknown, kOpSTZ_AbsIndexX, kOpSTZ_AbsIndexX, kOpSTZ_AbsIndexX }, /*9f*/{ kOpUnknown, kOpUnknown, kOpSTA_AbsIndexXLong, kOpSTA_AbsIndexXLong }, /*a0*/{ kOpLDY_Imm, kOpLDY_Imm, kOpLDY_Imm, kOpLDY_Imm }, /*a1*/{ kOpLDA_DPIndexXInd, kOpLDA_DPIndexXInd, kOpLDA_DPIndexXInd, kOpLDA_DPIndexXInd }, /*a2*/{ kOpLDX_Imm, kOpLDX_Imm, kOpLDX_Imm, kOpLDX_Imm }, /*a3*/{ kOpUnknown, kOpUnknown, kOpLDA_StackRel, kOpLDA_StackRel }, /*a4*/{ kOpLDY_DP, kOpLDY_DP, kOpLDY_DP, kOpLDY_DP }, /*a5*/{ kOpLDA_DP, kOpLDA_DP, kOpLDA_DP, kOpLDA_DP }, /*a6*/{ kOpLDX_DP, kOpLDX_DP, kOpLDX_DP, kOpLDX_DP }, /*a7*/{ kOpUnknown, kOpUnknown, kOpLDA_DPIndLong, kOpLDA_DPIndLong }, /*a8*/{ kOpTAY_Implied, kOpTAY_Implied, kOpTAY_Implied, kOpTAY_Implied }, /*a9*/{ kOpLDA_Imm, kOpLDA_Imm, kOpLDA_Imm, kOpLDA_Imm }, /*aa*/{ kOpTAX_Implied, kOpTAX_Implied, kOpTAX_Implied, kOpTAX_Implied }, /*ab*/{ kOpUnknown, kOpUnknown, kOpPLB_StackPull, kOpPLB_StackPull }, /*ac*/{ kOpLDY_Abs, kOpLDY_Abs, kOpLDY_Abs, kOpLDY_Abs }, /*ad*/{ kOpLDA_Abs, kOpLDA_Abs, kOpLDA_Abs, kOpLDA_Abs }, /*ae*/{ kOpLDX_Abs, kOpLDX_Abs, kOpLDX_Abs, kOpLDX_Abs }, /*af*/{ kOpUnknown, kOpUnknown, kOpLDA_AbsLong, kOpLDA_AbsLong }, /*b0*/{ kOpBCS_PCRel, kOpBCS_PCRel, kOpBCS_PCRel, kOpBCS_PCRel }, /*b1*/{ kOpLDA_DPIndIndexY, kOpLDA_DPIndIndexY, kOpLDA_DPIndIndexY, kOpLDA_DPIndIndexY }, /*b2*/{ kOpUnknown, kOpLDA_DPInd, kOpLDA_DPInd, kOpLDA_DPInd }, /*b3*/{ kOpUnknown, kOpUnknown, kOpLDA_StackRelIndexY, kOpLDA_StackRelIndexY }, /*b4*/{ kOpLDY_DPIndexX, kOpLDY_DPIndexX, kOpLDY_DPIndexX, kOpLDY_DPIndexX }, /*b5*/{ kOpLDA_DPIndexX, kOpLDA_DPIndexX, kOpLDA_DPIndexX, kOpLDA_DPIndexX }, /*b6*/{ kOpLDX_DPIndexY, kOpLDX_DPIndexY, kOpLDX_DPIndexY, kOpLDX_DPIndexY }, /*b7*/{ kOpUnknown, kOpUnknown, kOpLDA_DPIndIndexYLong, kOpLDA_DPIndIndexYLong }, /*b8*/{ kOpCLV_Implied, kOpCLV_Implied, kOpCLV_Implied, kOpCLV_Implied }, /*b9*/{ kOpLDA_AbsIndexY, kOpLDA_AbsIndexY, kOpLDA_AbsIndexY, kOpLDA_AbsIndexY }, /*ba*/{ kOpTSX_Implied, kOpTSX_Implied, kOpTSX_Implied, kOpTSX_Implied }, /*bb*/{ kOpUnknown, kOpUnknown, kOpTYX_Implied, kOpTYX_Implied }, /*bc*/{ kOpLDY_AbsIndexX, kOpLDY_AbsIndexX, kOpLDY_AbsIndexX, kOpLDY_AbsIndexX }, /*bd*/{ kOpLDA_AbsIndexX, kOpLDA_AbsIndexX, kOpLDA_AbsIndexX, kOpLDA_AbsIndexX }, /*be*/{ kOpLDX_AbsIndexY, kOpLDX_AbsIndexY, kOpLDX_AbsIndexY, kOpLDX_AbsIndexY }, /*bf*/{ kOpUnknown, kOpUnknown, kOpLDA_AbsIndexXLong, kOpLDA_AbsIndexXLong }, /*c0*/{ kOpCPY_Imm, kOpCPY_Imm, kOpCPY_Imm, kOpCPY_Imm }, /*c1*/{ kOpCMP_DPIndexXInd, kOpCMP_DPIndexXInd, kOpCMP_DPIndexXInd, kOpCMP_DPIndexXInd }, /*c2*/{ kOpUnknown, kOpUnknown, kOpREP_Imm, kOpREP_Imm }, /*c3*/{ kOpUnknown, kOpUnknown, kOpCMP_StackRel, kOpCMP_StackRel }, /*c4*/{ kOpCPY_DP, kOpCPY_DP, kOpCPY_DP, kOpCPY_DP }, /*c5*/{ kOpCMP_DP, kOpCMP_DP, kOpCMP_DP, kOpCMP_DP }, /*c6*/{ kOpDEC_DP, kOpDEC_DP, kOpDEC_DP, kOpDEC_DP }, /*c7*/{ kOpUnknown, kOpUnknown, kOpCMP_DPIndLong, kOpCMP_DPIndLong }, /*c8*/{ kOpINY_Implied, kOpINY_Implied, kOpINY_Implied, kOpINY_Implied }, /*c9*/{ kOpCMP_Imm, kOpCMP_Imm, kOpCMP_Imm, kOpCMP_Imm }, /*ca*/{ kOpDEX_Implied, kOpDEX_Implied, kOpDEX_Implied, kOpDEX_Implied }, /*cb*/{ kOpUnknown, kOpUnknown, kOpWAI_Implied, kOpWAI_Implied }, /*cc*/{ kOpCPY_Abs, kOpCPY_Abs, kOpCPY_Abs, kOpCPY_Abs }, /*cd*/{ kOpCMP_Abs, kOpCMP_Abs, kOpCMP_Abs, kOpCMP_Abs }, /*ce*/{ kOpDEC_Abs, kOpDEC_Abs, kOpDEC_Abs, kOpDEC_Abs }, /*cf*/{ kOpUnknown, kOpUnknown, kOpCMP_AbsLong, kOpCMP_AbsLong }, /*d0*/{ kOpBNE_PCRel, kOpBNE_PCRel, kOpBNE_PCRel, kOpBNE_PCRel }, /*d1*/{ kOpCMP_DPIndIndexY, kOpCMP_DPIndIndexY, kOpCMP_DPIndIndexY, kOpCMP_DPIndIndexY }, /*d2*/{ kOpUnknown, kOpCMP_DPInd, kOpCMP_DPInd, kOpCMP_DPInd }, /*d3*/{ kOpUnknown, kOpUnknown, kOpCMP_StackRelIndexY, kOpCMP_StackRelIndexY }, /*d4*/{ kOpUnknown, kOpUnknown, kOpPEI_StackDPInd, kOpPEI_StackDPInd }, /*d5*/{ kOpCMP_DPIndexX, kOpCMP_DPIndexX, kOpCMP_DPIndexX, kOpCMP_DPIndexX }, /*d6*/{ kOpDEC_DPIndexX, kOpDEC_DPIndexX, kOpDEC_DPIndexX, kOpDEC_DPIndexX }, /*d7*/{ kOpUnknown, kOpUnknown, kOpCMP_DPIndIndexYLong, kOpCMP_DPIndIndexYLong }, /*d8*/{ kOpCLD_Implied, kOpCLD_Implied, kOpCLD_Implied, kOpCLD_Implied }, /*d9*/{ kOpCMP_AbsIndexY, kOpCMP_AbsIndexY, kOpCMP_AbsIndexY, kOpCMP_AbsIndexY }, /*da*/{ kOpUnknown, kOpPHX_StackPush, kOpPHX_StackPush, kOpPHX_StackPush }, /*db*/{ kOpUnknown, kOpUnknown, kOpSTP_Implied, kOpSTP_Implied }, /*dc*/{ kOpUnknown, kOpUnknown, kOpJML_AbsIndLong, kOpJML_AbsIndLong }, /*dd*/{ kOpCMP_AbsIndexX, kOpCMP_AbsIndexX, kOpCMP_AbsIndexX, kOpCMP_AbsIndexX }, /*de*/{ kOpDEC_AbsIndexX, kOpDEC_AbsIndexX, kOpDEC_AbsIndexX, kOpDEC_AbsIndexX }, /*df*/{ kOpUnknown, kOpUnknown, kOpCMP_AbsIndexXLong, kOpCMP_AbsIndexXLong }, /*e0*/{ kOpCPX_Imm, kOpCPX_Imm, kOpCPX_Imm, kOpCPX_Imm }, /*e1*/{ kOpSBC_DPIndexXInd, kOpSBC_DPIndexXInd, kOpSBC_DPIndexXInd, kOpSBC_DPIndexXInd }, /*e2*/{ kOpUnknown, kOpUnknown, kOpSEP_Imm, kOpSEP_Imm }, /*e3*/{ kOpUnknown, kOpUnknown, kOpSBC_StackRel, kOpSBC_StackRel }, /*e4*/{ kOpCPX_DP, kOpCPX_DP, kOpCPX_DP, kOpCPX_DP }, /*e5*/{ kOpSBC_DP, kOpSBC_DP, kOpSBC_DP, kOpSBC_DP }, /*e6*/{ kOpINC_DP, kOpINC_DP, kOpINC_DP, kOpINC_DP }, /*e7*/{ kOpUnknown, kOpUnknown, kOpSBC_DPIndLong, kOpSBC_DPIndLong }, /*e8*/{ kOpINX_Implied, kOpINX_Implied, kOpINX_Implied, kOpINX_Implied }, /*e9*/{ kOpSBC_Imm, kOpSBC_Imm, kOpSBC_Imm, kOpSBC_Imm }, /*ea*/{ kOpNOP_Implied, kOpNOP_Implied, kOpNOP_Implied, kOpNOP_Implied }, /*eb*/{ kOpUnknown, kOpUnknown, kOpXBA_Implied, kOpXBA_Implied }, /*ec*/{ kOpCPX_Abs, kOpCPX_Abs, kOpCPX_Abs, kOpCPX_Abs }, /*ed*/{ kOpSBC_Abs, kOpSBC_Abs, kOpSBC_Abs, kOpSBC_Abs }, /*ee*/{ kOpINC_Abs, kOpINC_Abs, kOpINC_Abs, kOpINC_Abs }, /*ef*/{ kOpUnknown, kOpUnknown, kOpSBC_AbsLong, kOpSBC_AbsLong }, /*f0*/{ kOpBEQ_PCRel, kOpBEQ_PCRel, kOpBEQ_PCRel, kOpBEQ_PCRel }, /*f1*/{ kOpSBC_DPIndIndexY, kOpSBC_DPIndIndexY, kOpSBC_DPIndIndexY, kOpSBC_DPIndIndexY }, /*f2*/{ kOpUnknown, kOpSBC_DPInd, kOpSBC_DPInd, kOpSBC_DPInd }, /*f3*/{ kOpUnknown, kOpUnknown, kOpSBC_StackRelIndexY, kOpSBC_StackRelIndexY }, /*f4*/{ kOpUnknown, kOpUnknown, kOpPEA_StackAbs, kOpPEA_StackAbs }, /*f5*/{ kOpSBC_DPIndexX, kOpSBC_DPIndexX, kOpSBC_DPIndexX, kOpSBC_DPIndexX }, /*f6*/{ kOpINC_DPIndexX, kOpINC_DPIndexX, kOpINC_DPIndexX, kOpINC_DPIndexX }, /*f7*/{ kOpUnknown, kOpUnknown, kOpSBC_DPIndIndexYLong, kOpSBC_DPIndIndexYLong }, /*f8*/{ kOpSED_Implied, kOpSED_Implied, kOpSED_Implied, kOpSED_Implied }, /*f9*/{ kOpSBC_AbsIndexY, kOpSBC_AbsIndexY, kOpSBC_AbsIndexY, kOpSBC_AbsIndexY }, /*fa*/{ kOpUnknown, kOpPLX_StackPull, kOpPLX_StackPull, kOpPLX_StackPull }, /*fb*/{ kOpUnknown, kOpUnknown, kOpXCE_Implied, kOpXCE_Implied }, /*fc*/{ kOpUnknown, kOpUnknown, kOpJSR_AbsIndexXInd, kOpJSR_AbsIndexXInd }, /*fd*/{ kOpSBC_AbsIndexX, kOpSBC_AbsIndexX, kOpSBC_AbsIndexX, kOpSBC_AbsIndexX }, /*fe*/{ kOpINC_AbsIndexX, kOpINC_AbsIndexX, kOpINC_AbsIndexX, kOpINC_AbsIndexX }, /*ff*/{ kOpUnknown, kOpUnknown, kOpSBC_AbsIndexXLong, kOpSBC_AbsIndexXLong }, }; /* * Validate the contents of kOpMap. * * Returns "true" on success, "false" on failure. */ bool ReformatDisasm65xxx::ValidateOpMap(void) { if (NELEM(kOpMap) != 256) { ASSERT(false); return false; } #ifdef _DEBUG /* * Verify that all entries on one line have the same opcode and address * mode. For "hidden" 6502 opcodes this won't hold, so we'll have to * handle those separately. * * This assumes that later processors always include everything that the * previous CPUs did. This turns out to be the case. */ int i, j; for (i = 0; i < NELEM(kOpMap); i++) { if ((kOpMap[i].opAndAddr[kCPU6502] != kOpUnknown && kOpMap[i].opAndAddr[kCPU6502] != kOpMap[i].opAndAddr[kCPU65C02]) || (kOpMap[i].opAndAddr[kCPU65C02] != kOpUnknown && kOpMap[i].opAndAddr[kCPU65C02] != kOpMap[i].opAndAddr[kCPU65802]) || (kOpMap[i].opAndAddr[kCPU65802] != kOpUnknown && kOpMap[i].opAndAddr[kCPU65802] != kOpMap[i].opAndAddr[kCPU65816])) { LOGI("OpMap GLITCH: inconsistent values for entry 0x%02x", i); assert(false); return false; } } /* O(n^2) duplicate opcode check */ for (i = 0; i < NELEM(kOpMap)-1; i++) { if (kOpMap[i].opAndAddr[kCPU65816] == kOpUnknown) continue; for (j = i+1; j < NELEM(kOpMap); j++) { if (kOpMap[j].opAndAddr[kCPU65816] == kOpUnknown) continue; if (kOpMap[i].opAndAddr[kCPU65816] == kOpMap[j].opAndAddr[kCPU65816]) { LOGI("OpMap GLITCH: entries 0x%02x and 0x%02x match", i, j); assert(false); return false; } } } #endif /*_DEBUG*/ return true; } /* * OpCode details. */ /*static*/ const ReformatDisasm65xxx::OpCodeDetails ReformatDisasm65xxx::kOpCodeDetails[] = { { kOpCodeUnknown, "???" }, { kOpADC, "ADC" }, { kOpAND, "AND" }, { kOpASL, "ASL" }, { kOpBCC, "BCC" }, { kOpBCS, "BCS" }, { kOpBEQ, "BEQ" }, { kOpBIT, "BIT" }, { kOpBMI, "BMI" }, { kOpBNE, "BNE" }, { kOpBPL, "BPL" }, { kOpBRA, "BRA" }, { kOpBRK, "BRK" }, { kOpBRL, "BRL" }, { kOpBVC, "BVC" }, { kOpBVS, "BVS" }, { kOpCLC, "CLC" }, { kOpCLD, "CLD" }, { kOpCLI, "CLI" }, { kOpCLV, "CLV" }, { kOpCMP, "CMP" }, { kOpCOP, "COP" }, { kOpCPX, "CPX" }, { kOpCPY, "CPY" }, { kOpDEC, "DEC" }, { kOpDEX, "DEX" }, { kOpDEY, "DEY" }, { kOpEOR, "EOR" }, { kOpINC, "INC" }, { kOpINX, "INX" }, { kOpINY, "INY" }, { kOpJML, "JML" }, { kOpJMP, "JMP" }, { kOpJSL, "JSL" }, { kOpJSR, "JSR" }, { kOpLDA, "LDA" }, { kOpLDX, "LDX" }, { kOpLDY, "LDY" }, { kOpLSR, "LSR" }, { kOpMVN, "MVN" }, { kOpMVP, "MVP" }, { kOpNOP, "NOP" }, { kOpORA, "ORA" }, { kOpPEA, "PEA" }, { kOpPEI, "PEI" }, { kOpPER, "PER" }, { kOpPHA, "PHA" }, { kOpPHB, "PHB" }, { kOpPHD, "PHD" }, { kOpPHK, "PHK" }, { kOpPHP, "PHP" }, { kOpPHX, "PHX" }, { kOpPHY, "PHY" }, { kOpPLA, "PLA" }, { kOpPLB, "PLB" }, { kOpPLD, "PLD" }, { kOpPLP, "PLP" }, { kOpPLX, "PLX" }, { kOpPLY, "PLY" }, { kOpREP, "REP" }, { kOpROL, "ROL" }, { kOpROR, "ROR" }, { kOpRTI, "RTI" }, { kOpRTL, "RTL" }, { kOpRTS, "RTS" }, { kOpSBC, "SBC" }, { kOpSEC, "SEC" }, { kOpSED, "SED" }, { kOpSEI, "SEI" }, { kOpSEP, "SEP" }, { kOpSTA, "STA" }, { kOpSTP, "STP" }, { kOpSTX, "STX" }, { kOpSTY, "STY" }, { kOpSTZ, "STZ" }, { kOpTAX, "TAX" }, { kOpTAY, "TAY" }, { kOpTCD, "TCD" }, { kOpTCS, "TCS" }, { kOpTDC, "TDC" }, { kOpTRB, "TRB" }, { kOpTSB, "TSB" }, { kOpTSC, "TSC" }, { kOpTSX, "TSX" }, { kOpTXA, "TXA" }, { kOpTXS, "TXS" }, { kOpTXY, "TXY" }, { kOpTYA, "TYA" }, { kOpTYX, "TYX" }, { kOpWAI, "WAI" }, { kOpWDM, "WDM" }, { kOpXBA, "XBA" }, { kOpXCE, "XCE" }, }; /* * Validate the contents of kOpCodeDetails. * * Returns "true" on success, "false" on failure. */ bool ReformatDisasm65xxx::ValidateOpCodeDetails(void) { if (NELEM(kOpCodeDetails) != kOpCodeMAX) { LOGI("Found %d entries in details, max=%d", NELEM(kOpCodeDetails), kOpCodeMAX); assert(false); return false; } #ifdef _DEBUG /* O(n^2) duplicate string check */ for (int i = 0; i < NELEM(kOpCodeDetails)-1; i++) { for (int j = i+1; j < NELEM(kOpCodeDetails); j++) { if (stricmp(kOpCodeDetails[i].mnemonic, kOpCodeDetails[j].mnemonic) == 0) { LOGI("OpCodeDetails GLITCH: entries %d and %d match (%hs)", i, j, kOpCodeDetails[i].mnemonic); assert(false); return false; } } } #endif /*_DEBUG*/ return true; }