MCUME/MCUME_pico/picovcs/Table.c

647 wiersze
18 KiB
C

/*****************************************************************************
This file is part of x2600, the Atari 2600 Emulator
===================================================
Copyright 1996 Alex Hornby. For contributions see the file CREDITS.
This software is distributed under the terms of the GNU General Public
License. This is free software with ABSOLUTELY NO WARRANTY.
See the file COPYING for Details.
$Id: table.c,v 1.4 1996/08/26 15:04:20 ahornby Exp $
******************************************************************************/
/*
* $Id: table.c,v 1.4 1996/08/26 15:04:20 ahornby Exp $
*
* This was part of the x64 Commodore 64 emulator.
* See README for copyright notice
*
* This file contains lookup-table which is used to translate
* MOS6502 machine instructions. Machine code is used as index
* to array called lookup. Pointer to function is then fetched
* from array and function is called.
* Timing of the undocumented opcodes is based on information
* in an article in C=Lehti by Kai Lindfors and Topi Maurola.
*
*
* Written by
* Vesa-Matti Puro (vmp@lut.fi)
* Jarkko Sonninen (sonninen@lut.fi)
* Jouko Valta (jopi@stekt.oulu.fi)
*
*/
//This file was modified from its original version for use in PocketVCS
// by Stuart Russell
#include "cpu.h"
#include "mnemonic.h"
/*
* The "mnemonic.h" file contains #defines for BRK, ORA, NOOP... which
* are character strings, i.e. #define BRK "BRK"
* #define ORA "ORA" . . . Used mainly to reduce typing...
*
* There are #defines for addressing modes i.e. IMPLIED, INDIRECT_X,
* ZERO_PAGE in "cpu.h"... These can be used to make a diassembler.
*/
#define PROGMEM
PROGMEM int clength[] =
{1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 0};
PROGMEM struct lookup_tag lookup[] =
{
/**** Positive ****/
/* 00 */
{BRK, IMPLIED, M_NONE, M_PC, 7, 0}, /* Pseudo Absolute */
/* 01 */
{ORA, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect,X) */
/* 02 */
{JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */
/* 03 */
{SLO, INDIRECT_X, M_INDX, M_INDX, 8, 0},
/* 04 */
{NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0},
/* 05 */
{ORA, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */
/* 06 */
{ASL, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */
/* 07 */
{SLO, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
/* 08 */
{PHP, IMPLIED, M_SR, M_NONE, 3, 0},
/* 09 */
{ORA, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */
/* 0a */
{ASL, ACCUMULATOR, M_AC, M_AC, 2, 0}, /* Accumulator */
/* 0b */
{ANC, IMMEDIATE, M_ACIM, M_ACNC, 2, 0},
/* 0c */
{NOOP, ABSOLUTE, M_NONE, M_NONE, 4, 0},
/* 0d */
{ORA, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */
/* 0e */
{ASL, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */
/* 0f */
{SLO, ABSOLUTE, M_ABS, M_ABS, 6, 0},
/* 10 */
{BPL, RELATIVE, M_REL, M_NONE, 2, 0},
/* 11 */
{ORA, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */
/* 12 */
{JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */
/* 13 */
{SLO, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
/* 14 */
{NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
/* 15 */
{ORA, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */
/* 16 */
{ASL, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */
/* 17 */
{SLO, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
/* 18 */
{CLC, IMPLIED, M_NONE, M_FC, 2, 0},
/* 19 */
{ORA, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */
/* 1a */
{NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
/* 1b */
{SLO, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
/* 1c */
{NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
/* 1d */
{ORA, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */
/* 1e */
{ASL, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */
/* 1f */
{SLO, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
/* 20 */
{JSR, ABSOLUTE, M_ADDR, M_PC, 6, 0},
/* 21 */
{AND, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect ,X) */
/* 22 */
{JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */
/* 23 */
{RLA, INDIRECT_X, M_INDX, M_INDX, 8, 0},
/* 24 */
{BIT, ZERO_PAGE, M_ZERO, M_NONE, 3, 0}, /* Zeropage */
/* 25 */
{AND, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */
/* 26 */
{ROL, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */
/* 27 */
{RLA, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
/* 28 */
{PLP, IMPLIED, M_NONE, M_SR, 4, 0},
/* 29 */
{AND, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */
/* 2a */
{ROL, ACCUMULATOR, M_AC, M_AC, 2, 0}, /* Accumulator */
/* 2b */
{ANC, IMMEDIATE, M_ACIM, M_ACNC, 2, 0},
/* 2c */
{BIT, ABSOLUTE, M_ABS, M_NONE, 4, 0}, /* Absolute */
/* 2d */
{AND, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */
/* 2e */
{ROL, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */
/* 2f */
{RLA, ABSOLUTE, M_ABS, M_ABS, 6, 0},
/* 30 */
{BMI, RELATIVE, M_REL, M_NONE, 2, 0},
/* 31 */
{AND, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */
/* 32 */
{JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */
/* 33 */
{RLA, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
/* 34 */
{NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
/* 35 */
{AND, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */
/* 36 */
{ROL, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */
/* 37 */
{RLA, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
/* 38 */
{SEC, IMPLIED, M_NONE, M_FC, 2, 0},
/* 39 */
{AND, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */
/* 3a */
{NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
/* 3b */
{RLA, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
/* 3c */
{NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
/* 3d */
{AND, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */
/* 3e */
{ROL, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */
/* 3f */
{RLA, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
/* 40 */
{RTI, IMPLIED, M_NONE, M_PC, 6, 0},
/* 41 */
{EOR, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect,X) */
/* 42 */
{JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */
/* 43 */
{SRE, INDIRECT_X, M_INDX, M_INDX, 8, 0},
/* 44 */
{NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0},
/* 45 */
{EOR, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */
/* 46 */
{LSR, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */
/* 47 */
{SRE, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
/* 48 */
{PHA, IMPLIED, M_AC, M_NONE, 3, 0},
/* 49 */
{EOR, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */
/* 4a */
{LSR, ACCUMULATOR, M_AC, M_AC, 2, 0}, /* Accumulator */
/* 4b */
{ASR, IMMEDIATE, M_ACIM, M_AC, 2, 0}, /* (AC & IMM) >>1 */
/* 4c */
{JMP, ABSOLUTE, M_ADDR, M_PC, 3, 0}, /* Absolute */
/* 4d */
{EOR, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */
/* 4e */
{LSR, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */
/* 4f */
{SRE, ABSOLUTE, M_ABS, M_ABS, 6, 0},
/* 50 */
{BVC, RELATIVE, M_REL, M_NONE, 2, 0},
/* 51 */
{EOR, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */
/* 52 */
{JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */
/* 53 */
{SRE, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
/* 54 */
{NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
/* 55 */
{EOR, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */
/* 56 */
{LSR, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */
/* 57 */
{SRE, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
/* 58 */
{CLI, IMPLIED, M_NONE, M_FI, 2, 0},
/* 59 */
{EOR, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */
/* 5a */
{NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
/* 5b */
{SRE, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
/* 5c */
{NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
/* 5d */
{EOR, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */
/* 5e */
{LSR, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */
/* 5f */
{SRE, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
/* 60 */
{RTS, IMPLIED, M_NONE, M_PC, 6, 0},
/* 61 */
{ADC, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect,X) */
/* 62 */
{JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */
/* 63 */
{RRA, INDIRECT_X, M_INDX, M_INDX, 8, 0},
/* 64 */
{NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0},
/* 65 */
{ADC, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */
/* 66 */
{ROR, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */
/* 67 */
{RRA, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
/* 68 */
{PLA, IMPLIED, M_NONE, M_AC, 4, 0},
/* 69 */
{ADC, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */
/* 6a */
{ROR, ACCUMULATOR, M_AC, M_AC, 2, 0}, /* Accumulator */
/* 6b */
{ARR, IMMEDIATE, M_ACIM, M_AC, 2, 0}, /* ARR isn't typo */
/* 6c */
{JMP, ABS_INDIRECT, M_AIND, M_PC, 5, 0}, /* Indirect */
/* 6d */
{ADC, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */
/* 6e */
{ROR, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */
/* 6f */
{RRA, ABSOLUTE, M_ABS, M_ABS, 6, 0},
/* 70 */
{BVS, RELATIVE, M_REL, M_NONE, 2, 0},
/* 71 */
{ADC, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */
/* 72 */
{JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT relative? */
/* 73 */
{RRA, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
/* 74 */
{NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
/* 75 */
{ADC, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */
/* 76 */
{ROR, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */
/* 77 */
{RRA, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
/* 78 */
{SEI, IMPLIED, M_NONE, M_FI, 2, 0},
/* 79 */
{ADC, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */
/* 7a */
{NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
/* 7b */
{RRA, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
/* 7c */
{NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
/* 7d */
{ADC, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */
/* 7e */
{ROR, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */
/* 7f */
{RRA, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
/**** Negative ****/
/* 80 */
{NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0},
/* 81 */
{STA, INDIRECT_X, M_AC, M_INDX, 6, 0}, /* (Indirect,X) */
/* 82 */
{NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0},
/* 83 */
{SAX, INDIRECT_X, M_ANXR, M_INDX, 6, 0},
/* 84 */
{STY, ZERO_PAGE, M_YR, M_ZERO, 3, 0}, /* Zeropage */
/* 85 */
{STA, ZERO_PAGE, M_AC, M_ZERO, 3, 0}, /* Zeropage */
/* 86 */
{STX, ZERO_PAGE, M_XR, M_ZERO, 3, 0}, /* Zeropage */
/* 87 */
{SAX, ZERO_PAGE, M_ANXR, M_ZERO, 3, 0},
/* 88 */
{DEY, IMPLIED, M_YR, M_YR, 2, 0},
/* 89 */
{NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0},
/* 8a */
{TXA, IMPLIED, M_XR, M_AC, 2, 0},
/**** very abnormal: usually AC = AC | #$EE & XR & #$oper ****/
/* 8b */
{ANE, IMMEDIATE, M_AXIM, M_AC, 2, 0},
/* 8c */
{STY, ABSOLUTE, M_YR, M_ABS, 4, 0}, /* Absolute */
/* 8d */
{STA, ABSOLUTE, M_AC, M_ABS, 4, 0}, /* Absolute */
/* 8e */
{STX, ABSOLUTE, M_XR, M_ABS, 4, 0}, /* Absolute */
/* 8f */
{SAX, ABSOLUTE, M_ANXR, M_ABS, 4, 0},
/* 90 */
{BCC, RELATIVE, M_REL, M_NONE, 2, 0},
/* 91 */
{STA, INDIRECT_Y, M_AC, M_INDY, 6, 0}, /* (Indirect),Y */
/* 92 */
{JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT relative? */
/* 93 */
{SHA, INDIRECT_Y, M_ANXR, M_STH0, 6, 0},
/* 94 */
{STY, ZERO_PAGE_X, M_YR, M_ZERX, 4, 0}, /* Zeropage,X */
/* 95 */
{STA, ZERO_PAGE_X, M_AC, M_ZERX, 4, 0}, /* Zeropage,X */
/* 96 */
{STX, ZERO_PAGE_Y, M_XR, M_ZERY, 4, 0}, /* Zeropage,Y */
/* 97 */
{SAX, ZERO_PAGE_Y, M_ANXR, M_ZERY, 4, 0},
/* 98 */
{TYA, IMPLIED, M_YR, M_AC, 2, 0},
/* 99 */
{STA, ABSOLUTE_Y, M_AC, M_ABSY, 5, 0}, /* Absolute,Y */
/* 9a */
{TXS, IMPLIED, M_XR, M_SP, 2, 0},
/*** This is very mysterious command ... */
/* 9b */
{SHS, ABSOLUTE_Y, M_ANXR, M_STH3, 5, 0},
/* 9c */
{SHY, ABSOLUTE_X, M_YR, M_STH2, 5, 0},
/* 9d */
{STA, ABSOLUTE_X, M_AC, M_ABSX, 5, 0}, /* Absolute,X */
/* 9e */
{SHX, ABSOLUTE_Y, M_XR, M_STH1, 5, 0},
/* 9f */
{SHA, ABSOLUTE_Y, M_ANXR, M_STH1, 5, 0},
/* a0 */
{LDY, IMMEDIATE, M_IMM, M_YR, 2, 0}, /* Immediate */
/* a1 */
{LDA, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (indirect,X) */
/* a2 */
{LDX, IMMEDIATE, M_IMM, M_XR, 2, 0}, /* Immediate */
/* a3 */
{LAX, INDIRECT_X, M_INDX, M_ACXR, 6, 0}, /* (indirect,X) */
/* a4 */
{LDY, ZERO_PAGE, M_ZERO, M_YR, 3, 0}, /* Zeropage */
/* a5 */
{LDA, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */
/* a6 */
{LDX, ZERO_PAGE, M_ZERO, M_XR, 3, 0}, /* Zeropage */
/* a7 */
{LAX, ZERO_PAGE, M_ZERO, M_ACXR, 3, 0},
/* a8 */
{TAY, IMPLIED, M_AC, M_YR, 2, 0},
/* a9 */
{LDA, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */
/* aa */
{TAX, IMPLIED, M_AC, M_XR, 2, 0},
/* ab */
{LXA, IMMEDIATE, M_ACIM, M_ACXR, 2, 0}, /* LXA isn't a typo */
/* ac */
{LDY, ABSOLUTE, M_ABS, M_YR, 4, 0}, /* Absolute */
/* ad */
{LDA, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */
/* ae */
{LDX, ABSOLUTE, M_ABS, M_XR, 4, 0}, /* Absolute */
/* af */
{LAX, ABSOLUTE, M_ABS, M_ACXR, 4, 0},
/* b0 */
{BCS, RELATIVE, M_REL, M_NONE, 2, 0},
/* b1 */
{LDA, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (indirect),Y */
/* b2 */
{JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */
/* b3 */
{LAX, INDIRECT_Y, M_INDY, M_ACXR, 5, 1},
/* b4 */
{LDY, ZERO_PAGE_X, M_ZERX, M_YR, 4, 0}, /* Zeropage,X */
/* b5 */
{LDA, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */
/* b6 */
{LDX, ZERO_PAGE_Y, M_ZERY, M_XR, 4, 0}, /* Zeropage,Y */
/* b7 */
{LAX, ZERO_PAGE_Y, M_ZERY, M_ACXR, 4, 0},
/* b8 */
{CLV, IMPLIED, M_NONE, M_FV, 2, 0},
/* b9 */
{LDA, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */
/* ba */
{TSX, IMPLIED, M_SP, M_XR, 2, 0},
/* bb */
{LAS, ABSOLUTE_Y, M_SABY, M_ACXS, 4, 1},
/* bc */
{LDY, ABSOLUTE_X, M_ABSX, M_YR, 4, 1}, /* Absolute,X */
/* bd */
{LDA, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */
/* be */
{LDX, ABSOLUTE_Y, M_ABSY, M_XR, 4, 1}, /* Absolute,Y */
/* bf */
{LAX, ABSOLUTE_Y, M_ABSY, M_ACXR, 4, 1},
/* c0 */
{CPY, IMMEDIATE, M_IMM, M_NONE, 2, 0}, /* Immediate */
/* c1 */
{CMP, INDIRECT_X, M_INDX, M_NONE, 6, 0}, /* (Indirect,X) */
/* c2 */
{NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0}, /* occasional TILT */
/* c3 */
{DCP, INDIRECT_X, M_INDX, M_INDX, 8, 0},
/* c4 */
{CPY, ZERO_PAGE, M_ZERO, M_NONE, 3, 0}, /* Zeropage */
/* c5 */
{CMP, ZERO_PAGE, M_ZERO, M_NONE, 3, 0}, /* Zeropage */
/* c6 */
{DEC, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */
/* c7 */
{DCP, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
/* c8 */
{INY, IMPLIED, M_YR, M_YR, 2, 0},
/* c9 */
{CMP, IMMEDIATE, M_IMM, M_NONE, 2, 0}, /* Immediate */
/* ca */
{DEX, IMPLIED, M_XR, M_XR, 2, 0},
/* cb */
{SBX, IMMEDIATE, M_IMM, M_XR, 2, 0},
/* cc */
{CPY, ABSOLUTE, M_ABS, M_NONE, 4, 0}, /* Absolute */
/* cd */
{CMP, ABSOLUTE, M_ABS, M_NONE, 4, 0}, /* Absolute */
/* ce */
{DEC, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */
/* cf */
{DCP, ABSOLUTE, M_ABS, M_ABS, 6, 0},
/* d0 */
{BNE, RELATIVE, M_REL, M_NONE, 2, 0},
/* d1 */
{CMP, INDIRECT_Y, M_INDY, M_NONE, 5, 1}, /* (Indirect),Y */
/* d2 */
{JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */
/* d3 */
{DCP, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
/* d4 */
{NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
/* d5 */
{CMP, ZERO_PAGE_X, M_ZERX, M_NONE, 4, 0}, /* Zeropage,X */
/* d6 */
{DEC, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */
/* d7 */
{DCP, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
/* d8 */
{CLD, IMPLIED, M_NONE, M_FD, 2, 0},
/* d9 */
{CMP, ABSOLUTE_Y, M_ABSY, M_NONE, 4, 1}, /* Absolute,Y */
/* da */
{NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
/* db */
{DCP, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
/* dc */
{NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
/* dd */
{CMP, ABSOLUTE_X, M_ABSX, M_NONE, 4, 1}, /* Absolute,X */
/* de */
{DEC, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */
/* df */
{DCP, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
/* e0 */
{CPX, IMMEDIATE, M_IMM, M_NONE, 2, 0}, /* Immediate */
/* e1 */
{SBC, INDIRECT_X, M_INDX, M_AC, 6, 0}, /* (Indirect,X) */
/* e2 */
{NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0},
/* e3 */
{ISB, INDIRECT_X, M_INDX, M_INDX, 8, 0},
/* e4 */
{CPX, ZERO_PAGE, M_ZERO, M_NONE, 3, 0}, /* Zeropage */
/* e5 */
{SBC, ZERO_PAGE, M_ZERO, M_AC, 3, 0}, /* Zeropage */
/* e6 */
{INC, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0}, /* Zeropage */
/* e7 */
{ISB, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
/* e8 */
{INX, IMPLIED, M_XR, M_XR, 2, 0},
/* e9 */
{SBC, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* Immediate */
/* ea */
{NOP, IMPLIED, M_NONE, M_NONE, 2, 0},
/* eb */
{USBC, IMMEDIATE, M_IMM, M_AC, 2, 0}, /* same as e9 */
/* ec */
{CPX, ABSOLUTE, M_ABS, M_NONE, 4, 0}, /* Absolute */
/* ed */
{SBC, ABSOLUTE, M_ABS, M_AC, 4, 0}, /* Absolute */
/* ee */
{INC, ABSOLUTE, M_ABS, M_ABS, 6, 0}, /* Absolute */
/* ef */
{ISB, ABSOLUTE, M_ABS, M_ABS, 6, 0},
/* f0 */
{BEQ, RELATIVE, M_REL, M_NONE, 2, 0},
/* f1 */
{SBC, INDIRECT_Y, M_INDY, M_AC, 5, 1}, /* (Indirect),Y */
/* f2 */
{JAM, IMPLIED, M_NONE, M_NONE, 0, 0}, /* TILT */
/* f3 */
{ISB, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
/* f4 */
{NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
/* f5 */
{SBC, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0}, /* Zeropage,X */
/* f6 */
{INC, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0}, /* Zeropage,X */
/* f7 */
{ISB, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
/* f8 */
{SED, IMPLIED, M_NONE, M_FD, 2, 0},
/* f9 */
{SBC, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1}, /* Absolute,Y */
/* fa */
{NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
/* fb */
{ISB, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
/* fc */
{NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
/* fd */
{SBC, ABSOLUTE_X, M_ABSX, M_AC, 4, 1}, /* Absolute,X */
/* fe */
{INC, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}, /* Absolute,X */
/* ff */
{ISB, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}
};