mirror of
https://github.com/fadden/ciderpress.git
synced 2024-10-31 16:04:54 +00:00
c78017b1d2
Moved comments and return types, switched to uint types, added "override" keyword.
783 lines
53 KiB
C++
783 lines
53 KiB
C++
/*
|
|
* 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;
|
|
}
|