home *** CD-ROM | disk | FTP | other *** search
/ MACD 4 / MACD4.iso / Emulatory / v2600 / source.lha / source / table.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-01-27  |  17.6 KB  |  644 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6. /*****************************************************************************
  7.  
  8.    This file is part of x2600, the Atari 2600 Emulator
  9.    ===================================================
  10.    
  11.    Copyright 1996 Alex Hornby. For contributions see the file CREDITS.
  12.  
  13.    This software is distributed under the terms of the GNU General Public
  14.    License. This is free software with ABSOLUTELY NO WARRANTY.
  15.    
  16.    See the file COPYING for Details.
  17.    
  18.    $Id: table.c,v 1.4 1996/08/26 15:04:20 ahornby Exp $
  19. ******************************************************************************/
  20.  
  21. /*
  22.  * $Id: table.c,v 1.4 1996/08/26 15:04:20 ahornby Exp $
  23.  *
  24.  * This was part of the x64 Commodore 64 emulator.
  25.  * See README for copyright notice
  26.  *
  27.  * This file contains lookup-table which is used to translate
  28.  * MOS6502 machine instructions. Machine code is used as index
  29.  * to array called lookup. Pointer to function is then fetched
  30.  * from array and function is called.
  31.  * Timing of the undocumented opcodes is based on information
  32.  * in an article in C=Lehti by Kai Lindfors and Topi Maurola.
  33.  *
  34.  *
  35.  * Written by
  36.  *   Vesa-Matti Puro (vmp@lut.fi)
  37.  *   Jarkko Sonninen (sonninen@lut.fi)
  38.  *   Jouko Valta (jopi@stekt.oulu.fi)
  39.  *
  40.  */
  41.  
  42. #include "cpu.h"
  43. #include "mnemonic.h"
  44.  
  45.  
  46. /*
  47.  * The "mnemonic.h" file contains #defines for BRK, ORA, NOOP... which
  48.  * are character strings, i.e. #define BRK    "BRK"
  49.  * #define ORA    "ORA" . . . Used mainly to reduce typing...
  50.  *
  51.  * There are #defines for addressing modes i.e. IMPLIED, INDIRECT_X,
  52.  * ZERO_PAGE in "cpu.h"... These can be used to make a diassembler.
  53.  */
  54.  
  55.  
  56. int clength[] =
  57. {1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 0};
  58.  
  59. struct lookup_tag lookup[] =
  60. {
  61.  
  62. /****  Positive  ****/
  63.  
  64.     /* 00 */
  65.   {BRK, IMPLIED, M_NONE, M_PC, 7, 0},    /* Pseudo Absolute */
  66.     /* 01 */
  67.   {ORA, INDIRECT_X, M_INDX, M_AC, 6, 0},    /* (Indirect,X) */
  68.     /* 02 */
  69.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  70.     /* 03 */
  71.   {SLO, INDIRECT_X, M_INDX, M_INDX, 8, 0},
  72.  
  73.     /* 04 */
  74.   {NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0},
  75.     /* 05 */
  76.   {ORA, ZERO_PAGE, M_ZERO, M_AC, 3, 0},        /* Zeropage */
  77.     /* 06 */
  78.   {ASL, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},    /* Zeropage */
  79.     /* 07 */
  80.   {SLO, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
  81.  
  82.     /* 08 */
  83.   {PHP, IMPLIED, M_SR, M_NONE, 3, 0},
  84.     /* 09 */
  85.   {ORA, IMMEDIATE, M_IMM, M_AC, 2, 0},    /* Immediate */
  86.     /* 0a */
  87.   {ASL, ACCUMULATOR, M_AC, M_AC, 2, 0},        /* Accumulator */
  88.     /* 0b */
  89.   {ANC, IMMEDIATE, M_ACIM, M_ACNC, 2, 0},
  90.  
  91.     /* 0c */
  92.   {NOOP, ABSOLUTE, M_NONE, M_NONE, 4, 0},
  93.     /* 0d */
  94.   {ORA, ABSOLUTE, M_ABS, M_AC, 4, 0},    /* Absolute */
  95.     /* 0e */
  96.   {ASL, ABSOLUTE, M_ABS, M_ABS, 6, 0},    /* Absolute */
  97.     /* 0f */
  98.   {SLO, ABSOLUTE, M_ABS, M_ABS, 6, 0},
  99.  
  100.     /* 10 */
  101.   {BPL, RELATIVE, M_REL, M_NONE, 2, 0},
  102.     /* 11 */
  103.   {ORA, INDIRECT_Y, M_INDY, M_AC, 5, 1},    /* (Indirect),Y */
  104.     /* 12 */
  105.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  106.     /* 13 */
  107.   {SLO, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
  108.  
  109.     /* 14 */
  110.   {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
  111.     /* 15 */
  112.   {ORA, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0},    /* Zeropage,X */
  113.     /* 16 */
  114.   {ASL, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},    /* Zeropage,X */
  115.     /* 17 */
  116.   {SLO, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
  117.  
  118.     /* 18 */
  119.   {CLC, IMPLIED, M_NONE, M_FC, 2, 0},
  120.     /* 19 */
  121.   {ORA, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1},    /* Absolute,Y */
  122.     /* 1a */
  123.   {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
  124.     /* 1b */
  125.   {SLO, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
  126.  
  127.     /* 1c */
  128.   {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
  129.     /* 1d */
  130.   {ORA, ABSOLUTE_X, M_ABSX, M_AC, 4, 1},    /* Absolute,X */
  131.     /* 1e */
  132.   {ASL, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},    /* Absolute,X */
  133.     /* 1f */
  134.   {SLO, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
  135.  
  136.     /* 20 */
  137.   {JSR, ABSOLUTE, M_ADDR, M_PC, 6, 0},
  138.     /* 21 */
  139.   {AND, INDIRECT_X, M_INDX, M_AC, 6, 0},    /* (Indirect ,X) */
  140.     /* 22 */
  141.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  142.     /* 23 */
  143.   {RLA, INDIRECT_X, M_INDX, M_INDX, 8, 0},
  144.  
  145.     /* 24 */
  146.   {BIT, ZERO_PAGE, M_ZERO, M_NONE, 3, 0},    /* Zeropage */
  147.     /* 25 */
  148.   {AND, ZERO_PAGE, M_ZERO, M_AC, 3, 0},        /* Zeropage */
  149.     /* 26 */
  150.   {ROL, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},    /* Zeropage */
  151.     /* 27 */
  152.   {RLA, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
  153.  
  154.     /* 28 */
  155.   {PLP, IMPLIED, M_NONE, M_SR, 4, 0},
  156.     /* 29 */
  157.   {AND, IMMEDIATE, M_IMM, M_AC, 2, 0},    /* Immediate */
  158.     /* 2a */
  159.   {ROL, ACCUMULATOR, M_AC, M_AC, 2, 0},        /* Accumulator */
  160.     /* 2b */
  161.   {ANC, IMMEDIATE, M_ACIM, M_ACNC, 2, 0},
  162.  
  163.     /* 2c */
  164.   {BIT, ABSOLUTE, M_ABS, M_NONE, 4, 0},        /* Absolute */
  165.     /* 2d */
  166.   {AND, ABSOLUTE, M_ABS, M_AC, 4, 0},    /* Absolute */
  167.     /* 2e */
  168.   {ROL, ABSOLUTE, M_ABS, M_ABS, 6, 0},    /* Absolute */
  169.     /* 2f */
  170.   {RLA, ABSOLUTE, M_ABS, M_ABS, 6, 0},
  171.  
  172.     /* 30 */
  173.   {BMI, RELATIVE, M_REL, M_NONE, 2, 0},
  174.     /* 31 */
  175.   {AND, INDIRECT_Y, M_INDY, M_AC, 5, 1},    /* (Indirect),Y */
  176.     /* 32 */
  177.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  178.     /* 33 */
  179.   {RLA, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
  180.  
  181.     /* 34 */
  182.   {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
  183.     /* 35 */
  184.   {AND, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0},    /* Zeropage,X */
  185.     /* 36 */
  186.   {ROL, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},    /* Zeropage,X */
  187.     /* 37 */
  188.   {RLA, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
  189.  
  190.     /* 38 */
  191.   {SEC, IMPLIED, M_NONE, M_FC, 2, 0},
  192.     /* 39 */
  193.   {AND, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1},    /* Absolute,Y */
  194.     /* 3a */
  195.   {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
  196.     /* 3b */
  197.   {RLA, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
  198.  
  199.     /* 3c */
  200.   {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
  201.     /* 3d */
  202.   {AND, ABSOLUTE_X, M_ABSX, M_AC, 4, 1},    /* Absolute,X */
  203.     /* 3e */
  204.   {ROL, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},    /* Absolute,X */
  205.     /* 3f */
  206.   {RLA, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
  207.  
  208.     /* 40 */
  209.   {RTI, IMPLIED, M_NONE, M_PC, 6, 0},
  210.     /* 41 */
  211.   {EOR, INDIRECT_X, M_INDX, M_AC, 6, 0},    /* (Indirect,X) */
  212.     /* 42 */
  213.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  214.     /* 43 */
  215.   {SRE, INDIRECT_X, M_INDX, M_INDX, 8, 0},
  216.  
  217.     /* 44 */
  218.   {NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0},
  219.     /* 45 */
  220.   {EOR, ZERO_PAGE, M_ZERO, M_AC, 3, 0},        /* Zeropage */
  221.     /* 46 */
  222.   {LSR, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},    /* Zeropage */
  223.     /* 47 */
  224.   {SRE, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
  225.  
  226.     /* 48 */
  227.   {PHA, IMPLIED, M_AC, M_NONE, 3, 0},
  228.     /* 49 */
  229.   {EOR, IMMEDIATE, M_IMM, M_AC, 2, 0},    /* Immediate */
  230.     /* 4a */
  231.   {LSR, ACCUMULATOR, M_AC, M_AC, 2, 0},        /* Accumulator */
  232.     /* 4b */
  233.   {ASR, IMMEDIATE, M_ACIM, M_AC, 2, 0},        /* (AC & IMM) >>1 */
  234.  
  235.     /* 4c */
  236.   {JMP, ABSOLUTE, M_ADDR, M_PC, 3, 0},    /* Absolute */
  237.     /* 4d */
  238.   {EOR, ABSOLUTE, M_ABS, M_AC, 4, 0},    /* Absolute */
  239.     /* 4e */
  240.   {LSR, ABSOLUTE, M_ABS, M_ABS, 6, 0},    /* Absolute */
  241.     /* 4f */
  242.   {SRE, ABSOLUTE, M_ABS, M_ABS, 6, 0},
  243.  
  244.     /* 50 */
  245.   {BVC, RELATIVE, M_REL, M_NONE, 2, 0},
  246.     /* 51 */
  247.   {EOR, INDIRECT_Y, M_INDY, M_AC, 5, 1},    /* (Indirect),Y */
  248.     /* 52 */
  249.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  250.     /* 53 */
  251.   {SRE, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
  252.  
  253.     /* 54 */
  254.   {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
  255.     /* 55 */
  256.   {EOR, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0},    /* Zeropage,X */
  257.     /* 56 */
  258.   {LSR, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},    /* Zeropage,X */
  259.     /* 57 */
  260.   {SRE, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
  261.  
  262.     /* 58 */
  263.   {CLI, IMPLIED, M_NONE, M_FI, 2, 0},
  264.     /* 59 */
  265.   {EOR, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1},    /* Absolute,Y */
  266.     /* 5a */
  267.   {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
  268.     /* 5b */
  269.   {SRE, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
  270.  
  271.     /* 5c */
  272.   {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
  273.     /* 5d */
  274.   {EOR, ABSOLUTE_X, M_ABSX, M_AC, 4, 1},    /* Absolute,X */
  275.     /* 5e */
  276.   {LSR, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},    /* Absolute,X */
  277.     /* 5f */
  278.   {SRE, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
  279.  
  280.     /* 60 */
  281.   {RTS, IMPLIED, M_NONE, M_PC, 6, 0},
  282.     /* 61 */
  283.   {ADC, INDIRECT_X, M_INDX, M_AC, 6, 0},    /* (Indirect,X) */
  284.     /* 62 */
  285.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  286.     /* 63 */
  287.   {RRA, INDIRECT_X, M_INDX, M_INDX, 8, 0},
  288.  
  289.     /* 64 */
  290.   {NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0},
  291.     /* 65 */
  292.   {ADC, ZERO_PAGE, M_ZERO, M_AC, 3, 0},        /* Zeropage */
  293.     /* 66 */
  294.   {ROR, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},    /* Zeropage */
  295.     /* 67 */
  296.   {RRA, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
  297.  
  298.     /* 68 */
  299.   {PLA, IMPLIED, M_NONE, M_AC, 4, 0},
  300.     /* 69 */
  301.   {ADC, IMMEDIATE, M_IMM, M_AC, 2, 0},    /* Immediate */
  302.     /* 6a */
  303.   {ROR, ACCUMULATOR, M_AC, M_AC, 2, 0},        /* Accumulator */
  304.     /* 6b */
  305.   {ARR, IMMEDIATE, M_ACIM, M_AC, 2, 0},        /* ARR isn't typo */
  306.  
  307.     /* 6c */
  308.   {JMP, ABS_INDIRECT, M_AIND, M_PC, 5, 0},    /* Indirect */
  309.     /* 6d */
  310.   {ADC, ABSOLUTE, M_ABS, M_AC, 4, 0},    /* Absolute */
  311.     /* 6e */
  312.   {ROR, ABSOLUTE, M_ABS, M_ABS, 6, 0},    /* Absolute */
  313.     /* 6f */
  314.   {RRA, ABSOLUTE, M_ABS, M_ABS, 6, 0},
  315.  
  316.     /* 70 */
  317.   {BVS, RELATIVE, M_REL, M_NONE, 2, 0},
  318.     /* 71 */
  319.   {ADC, INDIRECT_Y, M_INDY, M_AC, 5, 1},    /* (Indirect),Y */
  320.     /* 72 */
  321.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT relative? */
  322.     /* 73 */
  323.   {RRA, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
  324.  
  325.     /* 74 */
  326.   {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
  327.     /* 75 */
  328.   {ADC, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0},    /* Zeropage,X */
  329.     /* 76 */
  330.   {ROR, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},    /* Zeropage,X */
  331.     /* 77 */
  332.   {RRA, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
  333.  
  334.     /* 78 */
  335.   {SEI, IMPLIED, M_NONE, M_FI, 2, 0},
  336.     /* 79 */
  337.   {ADC, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1},    /* Absolute,Y */
  338.     /* 7a */
  339.   {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
  340.     /* 7b */
  341.   {RRA, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
  342.  
  343.     /* 7c */
  344.   {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
  345.     /* 7d */
  346.   {ADC, ABSOLUTE_X, M_ABSX, M_AC, 4, 1},    /* Absolute,X */
  347.     /* 7e */
  348.   {ROR, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},    /* Absolute,X */
  349.     /* 7f */
  350.   {RRA, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
  351.  
  352. /****  Negative  ****/
  353.  
  354.     /* 80 */
  355.   {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0},
  356.     /* 81 */
  357.   {STA, INDIRECT_X, M_AC, M_INDX, 6, 0},    /* (Indirect,X) */
  358.     /* 82 */
  359.   {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0},
  360.     /* 83 */
  361.   {SAX, INDIRECT_X, M_ANXR, M_INDX, 6, 0},
  362.  
  363.     /* 84 */
  364.   {STY, ZERO_PAGE, M_YR, M_ZERO, 3, 0},        /* Zeropage */
  365.     /* 85 */
  366.   {STA, ZERO_PAGE, M_AC, M_ZERO, 3, 0},        /* Zeropage */
  367.     /* 86 */
  368.   {STX, ZERO_PAGE, M_XR, M_ZERO, 3, 0},        /* Zeropage */
  369.     /* 87 */
  370.   {SAX, ZERO_PAGE, M_ANXR, M_ZERO, 3, 0},
  371.  
  372.     /* 88 */
  373.   {DEY, IMPLIED, M_YR, M_YR, 2, 0},
  374.     /* 89 */
  375.   {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0},
  376.     /* 8a */
  377.   {TXA, IMPLIED, M_XR, M_AC, 2, 0},
  378. /****  very abnormal: usually AC = AC | #$EE & XR & #$oper  ****/
  379.     /* 8b */
  380.   {ANE, IMMEDIATE, M_AXIM, M_AC, 2, 0},
  381.  
  382.     /* 8c */
  383.   {STY, ABSOLUTE, M_YR, M_ABS, 4, 0},    /* Absolute */
  384.     /* 8d */
  385.   {STA, ABSOLUTE, M_AC, M_ABS, 4, 0},    /* Absolute */
  386.     /* 8e */
  387.   {STX, ABSOLUTE, M_XR, M_ABS, 4, 0},    /* Absolute */
  388.     /* 8f */
  389.   {SAX, ABSOLUTE, M_ANXR, M_ABS, 4, 0},
  390.  
  391.     /* 90 */
  392.   {BCC, RELATIVE, M_REL, M_NONE, 2, 0},
  393.     /* 91 */
  394.   {STA, INDIRECT_Y, M_AC, M_INDY, 6, 0},    /* (Indirect),Y */
  395.     /* 92 */
  396.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT relative? */
  397.     /* 93 */
  398.   {SHA, INDIRECT_Y, M_ANXR, M_STH0, 6, 0},
  399.  
  400.     /* 94 */
  401.   {STY, ZERO_PAGE_X, M_YR, M_ZERX, 4, 0},    /* Zeropage,X */
  402.     /* 95 */
  403.   {STA, ZERO_PAGE_X, M_AC, M_ZERX, 4, 0},    /* Zeropage,X */
  404.     /* 96 */
  405.   {STX, ZERO_PAGE_Y, M_XR, M_ZERY, 4, 0},    /* Zeropage,Y */
  406.     /* 97 */
  407.   {SAX, ZERO_PAGE_Y, M_ANXR, M_ZERY, 4, 0},
  408.  
  409.     /* 98 */
  410.   {TYA, IMPLIED, M_YR, M_AC, 2, 0},
  411.     /* 99 */
  412.   {STA, ABSOLUTE_Y, M_AC, M_ABSY, 5, 0},    /* Absolute,Y */
  413.     /* 9a */
  414.   {TXS, IMPLIED, M_XR, M_SP, 2, 0},
  415. /*** This is very mysterious command ... */
  416.     /* 9b */
  417.   {SHS, ABSOLUTE_Y, M_ANXR, M_STH3, 5, 0},
  418.  
  419.     /* 9c */
  420.   {SHY, ABSOLUTE_X, M_YR, M_STH2, 5, 0},
  421.     /* 9d */
  422.   {STA, ABSOLUTE_X, M_AC, M_ABSX, 5, 0},    /* Absolute,X */
  423.     /* 9e */
  424.   {SHX, ABSOLUTE_Y, M_XR, M_STH1, 5, 0},
  425.     /* 9f */
  426.   {SHA, ABSOLUTE_Y, M_ANXR, M_STH1, 5, 0},
  427.  
  428.     /* a0 */
  429.   {LDY, IMMEDIATE, M_IMM, M_YR, 2, 0},    /* Immediate */
  430.     /* a1 */
  431.   {LDA, INDIRECT_X, M_INDX, M_AC, 6, 0},    /* (indirect,X) */
  432.     /* a2 */
  433.   {LDX, IMMEDIATE, M_IMM, M_XR, 2, 0},    /* Immediate */
  434.     /* a3 */
  435.   {LAX, INDIRECT_X, M_INDX, M_ACXR, 6, 0},    /* (indirect,X) */
  436.  
  437.     /* a4 */
  438.   {LDY, ZERO_PAGE, M_ZERO, M_YR, 3, 0},        /* Zeropage */
  439.     /* a5 */
  440.   {LDA, ZERO_PAGE, M_ZERO, M_AC, 3, 0},        /* Zeropage */
  441.     /* a6 */
  442.   {LDX, ZERO_PAGE, M_ZERO, M_XR, 3, 0},        /* Zeropage */
  443.     /* a7 */
  444.   {LAX, ZERO_PAGE, M_ZERO, M_ACXR, 3, 0},
  445.  
  446.     /* a8 */
  447.   {TAY, IMPLIED, M_AC, M_YR, 2, 0},
  448.     /* a9 */
  449.   {LDA, IMMEDIATE, M_IMM, M_AC, 2, 0},    /* Immediate */
  450.     /* aa */
  451.   {TAX, IMPLIED, M_AC, M_XR, 2, 0},
  452.     /* ab */
  453.   {LXA, IMMEDIATE, M_ACIM, M_ACXR, 2, 0},    /* LXA isn't a typo */
  454.  
  455.     /* ac */
  456.   {LDY, ABSOLUTE, M_ABS, M_YR, 4, 0},    /* Absolute */
  457.     /* ad */
  458.   {LDA, ABSOLUTE, M_ABS, M_AC, 4, 0},    /* Absolute */
  459.     /* ae */
  460.   {LDX, ABSOLUTE, M_ABS, M_XR, 4, 0},    /* Absolute */
  461.     /* af */
  462.   {LAX, ABSOLUTE, M_ABS, M_ACXR, 4, 0},
  463.  
  464.     /* b0 */
  465.   {BCS, RELATIVE, M_REL, M_NONE, 2, 0},
  466.     /* b1 */
  467.   {LDA, INDIRECT_Y, M_INDY, M_AC, 5, 1},    /* (indirect),Y */
  468.     /* b2 */
  469.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  470.     /* b3 */
  471.   {LAX, INDIRECT_Y, M_INDY, M_ACXR, 5, 1},
  472.  
  473.     /* b4 */
  474.   {LDY, ZERO_PAGE_X, M_ZERX, M_YR, 4, 0},    /* Zeropage,X */
  475.     /* b5 */
  476.   {LDA, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0},    /* Zeropage,X */
  477.     /* b6 */
  478.   {LDX, ZERO_PAGE_Y, M_ZERY, M_XR, 4, 0},    /* Zeropage,Y */
  479.     /* b7 */
  480.   {LAX, ZERO_PAGE_Y, M_ZERY, M_ACXR, 4, 0},
  481.  
  482.     /* b8 */
  483.   {CLV, IMPLIED, M_NONE, M_FV, 2, 0},
  484.     /* b9 */
  485.   {LDA, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1},    /* Absolute,Y */
  486.     /* ba */
  487.   {TSX, IMPLIED, M_SP, M_XR, 2, 0},
  488.     /* bb */
  489.   {LAS, ABSOLUTE_Y, M_SABY, M_ACXS, 4, 1},
  490.  
  491.     /* bc */
  492.   {LDY, ABSOLUTE_X, M_ABSX, M_YR, 4, 1},    /* Absolute,X */
  493.     /* bd */
  494.   {LDA, ABSOLUTE_X, M_ABSX, M_AC, 4, 1},    /* Absolute,X */
  495.     /* be */
  496.   {LDX, ABSOLUTE_Y, M_ABSY, M_XR, 4, 1},    /* Absolute,Y */
  497.     /* bf */
  498.   {LAX, ABSOLUTE_Y, M_ABSY, M_ACXR, 4, 1},
  499.  
  500.     /* c0 */
  501.   {CPY, IMMEDIATE, M_IMM, M_NONE, 2, 0},    /* Immediate */
  502.     /* c1 */
  503.   {CMP, INDIRECT_X, M_INDX, M_NONE, 6, 0},    /* (Indirect,X) */
  504.     /* c2 */
  505.   {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0},    /* occasional TILT */
  506.     /* c3 */
  507.   {DCP, INDIRECT_X, M_INDX, M_INDX, 8, 0},
  508.  
  509.     /* c4 */
  510.   {CPY, ZERO_PAGE, M_ZERO, M_NONE, 3, 0},    /* Zeropage */
  511.     /* c5 */
  512.   {CMP, ZERO_PAGE, M_ZERO, M_NONE, 3, 0},    /* Zeropage */
  513.     /* c6 */
  514.   {DEC, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},    /* Zeropage */
  515.     /* c7 */
  516.   {DCP, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
  517.  
  518.     /* c8 */
  519.   {INY, IMPLIED, M_YR, M_YR, 2, 0},
  520.     /* c9 */
  521.   {CMP, IMMEDIATE, M_IMM, M_NONE, 2, 0},    /* Immediate */
  522.     /* ca */
  523.   {DEX, IMPLIED, M_XR, M_XR, 2, 0},
  524.     /* cb */
  525.   {SBX, IMMEDIATE, M_IMM, M_XR, 2, 0},
  526.  
  527.     /* cc */
  528.   {CPY, ABSOLUTE, M_ABS, M_NONE, 4, 0},        /* Absolute */
  529.     /* cd */
  530.   {CMP, ABSOLUTE, M_ABS, M_NONE, 4, 0},        /* Absolute */
  531.     /* ce */
  532.   {DEC, ABSOLUTE, M_ABS, M_ABS, 6, 0},    /* Absolute */
  533.     /* cf */
  534.   {DCP, ABSOLUTE, M_ABS, M_ABS, 6, 0},
  535.  
  536.     /* d0 */
  537.   {BNE, RELATIVE, M_REL, M_NONE, 2, 0},
  538.     /* d1 */
  539.   {CMP, INDIRECT_Y, M_INDY, M_NONE, 5, 1},    /* (Indirect),Y */
  540.     /* d2 */
  541.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  542.     /* d3 */
  543.   {DCP, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
  544.  
  545.     /* d4 */
  546.   {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
  547.     /* d5 */
  548.   {CMP, ZERO_PAGE_X, M_ZERX, M_NONE, 4, 0},    /* Zeropage,X */
  549.     /* d6 */
  550.   {DEC, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},    /* Zeropage,X */
  551.     /* d7 */
  552.   {DCP, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
  553.  
  554.     /* d8 */
  555.   {CLD, IMPLIED, M_NONE, M_FD, 2, 0},
  556.     /* d9 */
  557.   {CMP, ABSOLUTE_Y, M_ABSY, M_NONE, 4, 1},    /* Absolute,Y */
  558.     /* da */
  559.   {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
  560.     /* db */
  561.   {DCP, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
  562.  
  563.     /* dc */
  564.   {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
  565.     /* dd */
  566.   {CMP, ABSOLUTE_X, M_ABSX, M_NONE, 4, 1},    /* Absolute,X */
  567.     /* de */
  568.   {DEC, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},    /* Absolute,X */
  569.     /* df */
  570.   {DCP, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
  571.  
  572.     /* e0 */
  573.   {CPX, IMMEDIATE, M_IMM, M_NONE, 2, 0},    /* Immediate */
  574.     /* e1 */
  575.   {SBC, INDIRECT_X, M_INDX, M_AC, 6, 0},    /* (Indirect,X) */
  576.     /* e2 */
  577.   {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0},
  578.     /* e3 */
  579.   {ISB, INDIRECT_X, M_INDX, M_INDX, 8, 0},
  580.  
  581.     /* e4 */
  582.   {CPX, ZERO_PAGE, M_ZERO, M_NONE, 3, 0},    /* Zeropage */
  583.     /* e5 */
  584.   {SBC, ZERO_PAGE, M_ZERO, M_AC, 3, 0},        /* Zeropage */
  585.     /* e6 */
  586.   {INC, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},    /* Zeropage */
  587.     /* e7 */
  588.   {ISB, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
  589.  
  590.     /* e8 */
  591.   {INX, IMPLIED, M_XR, M_XR, 2, 0},
  592.     /* e9 */
  593.   {SBC, IMMEDIATE, M_IMM, M_AC, 2, 0},    /* Immediate */
  594.     /* ea */
  595.   {NOP, IMPLIED, M_NONE, M_NONE, 2, 0},
  596.     /* eb */
  597.   {USBC, IMMEDIATE, M_IMM, M_AC, 2, 0},        /* same as e9 */
  598.  
  599.     /* ec */
  600.   {CPX, ABSOLUTE, M_ABS, M_NONE, 4, 0},        /* Absolute */
  601.     /* ed */
  602.   {SBC, ABSOLUTE, M_ABS, M_AC, 4, 0},    /* Absolute */
  603.     /* ee */
  604.   {INC, ABSOLUTE, M_ABS, M_ABS, 6, 0},    /* Absolute */
  605.     /* ef */
  606.   {ISB, ABSOLUTE, M_ABS, M_ABS, 6, 0},
  607.  
  608.     /* f0 */
  609.   {BEQ, RELATIVE, M_REL, M_NONE, 2, 0},
  610.     /* f1 */
  611.   {SBC, INDIRECT_Y, M_INDY, M_AC, 5, 1},    /* (Indirect),Y */
  612.     /* f2 */
  613.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  614.     /* f3 */
  615.   {ISB, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
  616.  
  617.     /* f4 */
  618.   {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
  619.     /* f5 */
  620.   {SBC, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0},    /* Zeropage,X */
  621.     /* f6 */
  622.   {INC, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},    /* Zeropage,X */
  623.     /* f7 */
  624.   {ISB, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
  625.  
  626.     /* f8 */
  627.   {SED, IMPLIED, M_NONE, M_FD, 2, 0},
  628.     /* f9 */
  629.   {SBC, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1},    /* Absolute,Y */
  630.     /* fa */
  631.   {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
  632.     /* fb */
  633.   {ISB, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
  634.  
  635.     /* fc */
  636.   {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
  637.     /* fd */
  638.   {SBC, ABSOLUTE_X, M_ABSX, M_AC, 4, 1},    /* Absolute,X */
  639.     /* fe */
  640.   {INC, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},    /* Absolute,X */
  641.     /* ff */
  642.   {ISB, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}
  643. };
  644.