Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. /* code65.c */
  2. /*****************************************************************************/
  3. /* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only                     */
  4. /*                                                                           */
  5. /* AS                                                                        */
  6. /*                                                                           */
  7. /* Code Generator 65xx/MELPS740                                              */
  8. /*                                                                           */
  9. /*****************************************************************************/
  10.  
  11. #include "stdinc.h"
  12. #include <string.h>
  13. #include <ctype.h>
  14.  
  15. #include "bpemu.h"
  16. #include "strutil.h"
  17. #include "asmdef.h"
  18. #include "asmpars.h"
  19. #include "asmsub.h"
  20. #include "asmitree.h"
  21. #include "codepseudo.h"
  22. #include "motpseudo.h"
  23. #include "codevars.h"
  24. #include "errmsg.h"
  25.  
  26. #include "code65.h"
  27.  
  28. /*---------------------------------------------------------------------------*/
  29.  
  30. enum
  31. {
  32.   ModZA    = 0,   /* aa */
  33.   ModA     = 1,   /* aabb */
  34.   ModZIX   = 2,   /* aa,X */
  35.   ModIX    = 3,   /* aabb,X */
  36.   ModZIY   = 4,   /* aa,Y */
  37.   ModIY    = 5,   /* aabb,Y */
  38.   ModIndIX = 6,   /* (aa,X) */
  39.   ModIndOX = 7,   /* (aa),X */
  40.   ModIndOY = 8,   /* (aa),Y */
  41.   ModIndOZ = 9,   /* (aa),Z (65CE02-specific) */
  42.   ModInd16 =10,   /* (aabb) */
  43.   ModImm   =11,   /* #aa */
  44.   ModAcc   =12,   /* A */
  45.   ModNone  =13,   /* */
  46.   ModInd8  =14,   /* (aa) */
  47.   ModIndSPY=15,   /* (aa,SP),Y (65CE02-specific) */
  48.   ModSpec = 16    /* \aabb */
  49. };
  50.  
  51. typedef struct
  52. {
  53.   Word CPUFlag;
  54.   Byte Code;
  55. } FixedOrder;
  56.  
  57. typedef struct
  58. {
  59.   LongInt Codes[ModSpec + 1];
  60. } NormOrder;
  61.  
  62. typedef struct
  63. {
  64.   Word CPUFlag;
  65.   Byte CodeShort, CodeLong;
  66. } CondOrder;
  67.  
  68. typedef struct
  69. {
  70.   ShortInt ErgMode;
  71.   int AdrCnt;
  72.   Byte AdrVals[2];
  73. } tAdrResult;
  74.  
  75. /* NOTE: keep in the same order as in registration in code65_init()! */
  76.  
  77. #define M_6502      (1 << 0)
  78. #define M_65SC02    (1 << 1)
  79. #define M_65C02     (1 << 2)
  80. #define M_65CE02    (1 << 3)
  81. #define M_W65C02S   (1 << 4)
  82. #define M_65C19     (1 << 5)
  83. #define M_MELPS740  (1 << 6)
  84. #define M_HUC6280   (1 << 7)
  85. #define M_6502U     (1 << 8)
  86.  
  87. static Boolean This_CLI_SEI_Flag, This_ADC_SBC_Flag,
  88.                Last_CLI_SEI_Flag, Last_ADC_SBC_Flag;
  89.  
  90. static FixedOrder *FixedOrders;
  91. static NormOrder *NormOrders;
  92. static CondOrder *CondOrders;
  93.  
  94. static CPUVar CPU6502, CPU65SC02, CPU65C02, CPU65CE02, CPUW65C02S, CPU65C19, CPUM740, CPUHUC6280, CPU6502U;
  95. static LongInt SpecPage, RegB, MPR[8];
  96.  
  97. /*---------------------------------------------------------------------------*/
  98.  
  99. static unsigned ChkZero(const tStrComp *pArg, Byte *erg)
  100. {
  101.  if ((strlen(pArg->str.p_str) > 1) && ((*pArg->str.p_str == '<') || (*pArg->str.p_str == '>')))
  102.  {
  103.    *erg = Ord(*pArg->str.p_str == '<') + 1;
  104.    return 1;
  105.  }
  106.  else
  107.  {
  108.    *erg = 0;
  109.    return 0;
  110.  }
  111. }
  112.  
  113. static Boolean CPUAllowed(Word Flag)
  114. {
  115.   return (((Flag >> (MomCPU - CPU6502)) & 1) || False);
  116. }
  117.  
  118. static void InsNOP(void)
  119. {
  120.   memmove(BAsmCode, BAsmCode + 1, CodeLen);
  121.   CodeLen++;
  122.   BAsmCode[0] = NOPCode;
  123. }
  124.  
  125. static Boolean IsAllowed(LongInt Val)
  126. {
  127.   return (CPUAllowed(Val >> 8) && (Val != -1));
  128. }
  129.  
  130. static void ChkZeroMode(tAdrResult *pResult, const NormOrder *pOrder, ShortInt ZeroMode)
  131. {
  132.   if (pOrder && (IsAllowed(pOrder->Codes[ZeroMode])))
  133.   {
  134.     pResult->ErgMode = ZeroMode;
  135.     pResult->AdrCnt--;
  136.   }
  137. }
  138.  
  139. /*---------------------------------------------------------------------------*/
  140.  
  141. static Word EvalAddress(const tStrComp *pArg, IntType Type, Boolean *pOK)
  142. {
  143.   /* for the HUC6280, check if the address is within one of the selected pages */
  144.  
  145.   if (MomCPU == CPUHUC6280)
  146.   {
  147.     Word Page;
  148.     LongWord AbsAddress;
  149.     tSymbolFlags Flags;
  150.  
  151.     /* get the absolute address */
  152.  
  153.     AbsAddress = EvalStrIntExpressionWithFlags(pArg, UInt21, pOK, &Flags);
  154.     if (!*pOK)
  155.       return 0;
  156.  
  157.     /* within one of the 8K pages? */
  158.  
  159.     for (Page = 0; Page < 8; Page++)
  160.       if ((LargeInt)((AbsAddress >> 13) & 255) == MPR[Page])
  161.         break;
  162.     if (Page >= 8)
  163.     {
  164.       WrError(ErrNum_InAccPage);
  165.       AbsAddress &= 0x1fff;
  166.     }
  167.     else
  168.       AbsAddress = (AbsAddress & 0x1fff) | (Page << 13);
  169.  
  170.     /* short address requested? */
  171.  
  172.     if ((Type != UInt16) && (Type != Int16) && Hi(AbsAddress))
  173.     {
  174.       if (mFirstPassUnknown(Flags))
  175.         AbsAddress &= 0xff;
  176.       else
  177.       {
  178.         *pOK = False;
  179.         WrError(ErrNum_OverRange);
  180.       }
  181.     }
  182.     return AbsAddress;
  183.   }
  184.  
  185.   /* for the 65CE02, regard basepage register */
  186.  
  187.   else if (MomCPU == CPU65CE02)
  188.   {
  189.     Word Address;
  190.     tSymbolFlags Flags;
  191.  
  192.     /* alwys get a full 16 bit address */
  193.  
  194.     Address = EvalStrIntExpressionWithFlags(pArg, UInt16, pOK, &Flags);
  195.     if (!*pOK)
  196.       return 0;
  197.  
  198.     /* short address requested? */
  199.  
  200.     if ((Type != UInt16) && (Type != Int16))
  201.     {
  202.       if ((Hi(Address) != RegB) && !mFirstPassUnknown(Flags))
  203.       {
  204.         *pOK = False;
  205.         WrError(ErrNum_OverRange);
  206.       }
  207.       if (*pOK)
  208.         Address &= 0xff;
  209.     }
  210.     return Address;
  211.   }
  212.  
  213.   else
  214.     return EvalStrIntExpression(pArg, Type, pOK);
  215. }
  216.  
  217. static Boolean IsBasePage(Byte Page)
  218. {
  219.   return (MomCPU == CPU65CE02) ? (Page == RegB) : !Page;
  220. }
  221.  
  222. static void DecodeAdr(tAdrResult *pResult, const NormOrder *pOrder)
  223. {
  224.   Word AdrWord;
  225.   Boolean ValOK;
  226.   Byte ZeroMode;
  227.  
  228.   /* normale Anweisungen: Adressausdruck parsen */
  229.  
  230.   pResult->ErgMode = -1;
  231.  
  232.   if (ArgCnt == 0)
  233.   {
  234.     pResult->AdrCnt = 0;
  235.     pResult->ErgMode = ModNone;
  236.   }
  237.  
  238.   else if (ArgCnt == 1)
  239.   {
  240.     /* 1. Akkuadressierung */
  241.  
  242.     if (!as_strcasecmp(ArgStr[1].str.p_str, "A"))
  243.     {
  244.       pResult->AdrCnt = 0;
  245.       pResult->ErgMode = ModAcc;
  246.     }
  247.  
  248.     /* 2. immediate ? */
  249.  
  250.     else if (*ArgStr[1].str.p_str == '#')
  251.     {
  252.       IntType Type = Memo("PHW") ? Int16 : Int8;
  253.       Word Value;
  254.  
  255.       Value = EvalStrIntExpressionOffs(&ArgStr[1], 1, Type, &ValOK);
  256.       if (ValOK)
  257.       {
  258.         pResult->ErgMode = ModImm;
  259.         pResult->AdrVals[0] = Lo(Value);
  260.         pResult->AdrCnt = 1;
  261.         if (Int16 == Type)
  262.           pResult->AdrVals[pResult->AdrCnt++] = Hi(Value);
  263.       }
  264.     }
  265.  
  266.     /* 3. Special Page ? */
  267.  
  268.     else if (*ArgStr[1].str.p_str == '\\')
  269.     {
  270.       tSymbolFlags Flags;
  271.  
  272.       AdrWord = EvalStrIntExpressionOffsWithFlags(&ArgStr[1], 1, UInt16, &ValOK, &Flags);
  273.       if (ValOK)
  274.       {
  275.         if (mFirstPassUnknown(Flags))
  276.           AdrWord = (SpecPage << 8) | Lo(AdrWord);
  277.         if (Hi(AdrWord) != SpecPage) WrError(ErrNum_UnderRange);
  278.         else
  279.         {
  280.           pResult->ErgMode = ModSpec;
  281.           pResult->AdrVals[0] = Lo(AdrWord);
  282.           pResult->AdrCnt = 1;
  283.         }
  284.       }
  285.     }
  286.  
  287.     /* 4. X-inner-indirekt ? */
  288.  
  289.     else if ((strlen(ArgStr[1].str.p_str) >= 5) && (!as_strcasecmp(ArgStr[1].str.p_str + strlen(ArgStr[1].str.p_str) - 3, ",X)")))
  290.     {
  291.       if (*ArgStr[1].str.p_str != '(') WrError(ErrNum_InvAddrMode);
  292.       else
  293.       {
  294.         tStrComp AddrArg;
  295.  
  296.         StrCompRefRight(&AddrArg, &ArgStr[1], 1);
  297.         StrCompShorten(&AddrArg, 3);
  298.         StrCompIncRefLeft(&AddrArg, ChkZero(&AddrArg, &ZeroMode));
  299.         if (Memo("JMP") || Memo("JSR"))
  300.         {
  301.           AdrWord = EvalAddress(&AddrArg, UInt16, &ValOK);
  302.           if (ValOK)
  303.           {
  304.             pResult->AdrVals[0] = Lo(AdrWord);
  305.             pResult->AdrVals[1] = Hi(AdrWord);
  306.             pResult->ErgMode = ModIndIX;
  307.             pResult->AdrCnt = 2;
  308.           }
  309.         }
  310.         else
  311.         {
  312.           pResult->AdrVals[0] = EvalAddress(&AddrArg, UInt8, &ValOK);
  313.           if (ValOK)
  314.           {
  315.             pResult->ErgMode = ModIndIX;
  316.             pResult->AdrCnt = 1;
  317.           }
  318.         }
  319.       }
  320.     }
  321.  
  322.     else
  323.     {
  324.       /* 5. indirekt absolut ? */
  325.  
  326.       if (IsIndirect(ArgStr[1].str.p_str))
  327.       {
  328.         tStrComp AddrArg;
  329.  
  330.         StrCompRefRight(&AddrArg, &ArgStr[1], 1);
  331.         StrCompShorten(&AddrArg, 1);
  332.         StrCompIncRefLeft(&AddrArg, ChkZero(&AddrArg, &ZeroMode));
  333.         if (ZeroMode == 2)
  334.         {
  335.           pResult->AdrVals[0] = EvalAddress(&AddrArg, UInt8, &ValOK);
  336.           if (ValOK)
  337.           {
  338.             pResult->ErgMode = ModInd8;
  339.             pResult->AdrCnt = 1;
  340.           }
  341.         }
  342.         else
  343.         {
  344.           AdrWord = EvalAddress(&AddrArg, UInt16, &ValOK);
  345.           if (ValOK)
  346.           {
  347.             pResult->ErgMode = ModInd16;
  348.             pResult->AdrCnt = 2;
  349.             pResult->AdrVals[0] = Lo(AdrWord);
  350.             pResult->AdrVals[1] = Hi(AdrWord);
  351.             if ((ZeroMode == 0) && IsBasePage(pResult->AdrVals[1]))
  352.               ChkZeroMode(pResult, pOrder, ModInd8);
  353.           }
  354.         }
  355.       }
  356.  
  357.       /* 6. absolut */
  358.  
  359.       else
  360.       {
  361.         tStrComp AddrArg;
  362.  
  363.         StrCompRefRight(&AddrArg, &ArgStr[1], ChkZero(&ArgStr[1], &ZeroMode));
  364.         if (ZeroMode == 2)
  365.         {
  366.           pResult->AdrVals[0] = EvalAddress(&AddrArg, UInt8, &ValOK);
  367.           if (ValOK)
  368.           {
  369.             pResult->ErgMode = ModZA;
  370.             pResult->AdrCnt = 1;
  371.           }
  372.         }
  373.         else
  374.         {
  375.           AdrWord = EvalAddress(&AddrArg, UInt16, &ValOK);
  376.           if (ValOK)
  377.           {
  378.             pResult->ErgMode = ModA;
  379.             pResult->AdrCnt = 2;
  380.             pResult->AdrVals[0] = Lo(AdrWord);
  381.             pResult->AdrVals[1] = Hi(AdrWord);
  382.             if ((ZeroMode == 0) && IsBasePage(pResult->AdrVals[1]))
  383.               ChkZeroMode(pResult, pOrder, ModZA);
  384.           }
  385.         }
  386.       }
  387.     }
  388.   }
  389.  
  390.   else if (ArgCnt == 2)
  391.   {
  392.     Boolean Indir1 = IsIndirect(ArgStr[1].str.p_str);
  393.  
  394.     /* 7. stack-relative (65CE02-specific) ? */
  395.  
  396.     if (Indir1 && !as_strcasecmp(ArgStr[2].str.p_str, "Y") && (!as_strcasecmp(ArgStr[1].str.p_str + strlen(ArgStr[1].str.p_str) - 4, ",SP)")))
  397.     {
  398.       if (*ArgStr[1].str.p_str != '(') WrError(ErrNum_InvAddrMode);
  399.       else
  400.       {
  401.         tStrComp DistArg;
  402.  
  403.         StrCompRefRight(&DistArg, &ArgStr[1], 1);
  404.         StrCompShorten(&DistArg, 4);
  405.         pResult->AdrVals[0] = EvalStrIntExpression(&DistArg, UInt8, &ValOK);
  406.         if (ValOK)
  407.         {
  408.           pResult->ErgMode = ModIndSPY;
  409.           pResult->AdrCnt = 1;
  410.         }
  411.       }
  412.     }
  413.  
  414.     /* 8. X,Y,Z-outer-indirekt ? */
  415.  
  416.     else if (Indir1
  417.           && (!as_strcasecmp(ArgStr[2].str.p_str, "X")
  418.            || !as_strcasecmp(ArgStr[2].str.p_str, "Y")
  419.            || !as_strcasecmp(ArgStr[2].str.p_str, "Z")))
  420.     {
  421.       int Mode = toupper(ArgStr[2].str.p_str[0]) - 'X';
  422.       tStrComp AddrArg;
  423.  
  424.       StrCompRefRight(&AddrArg, &ArgStr[1], 1);
  425.       StrCompShorten(&AddrArg, 1);
  426.       StrCompIncRefLeft(&AddrArg, ChkZero(&AddrArg, &ZeroMode));
  427.       pResult->AdrVals[0] = EvalAddress(&AddrArg, UInt8, &ValOK);
  428.       if (ValOK)
  429.       {
  430.         pResult->ErgMode = ModIndOX + Mode;
  431.         pResult->AdrCnt = 1;
  432.       }
  433.     }
  434.  
  435.     /* 9. X,Y-indiziert ? */
  436.  
  437.     else
  438.     {
  439.       tStrComp AddrArg;
  440.  
  441.       StrCompRefRight(&AddrArg, &ArgStr[1], ChkZero(&ArgStr[1], &ZeroMode));
  442.       if (ZeroMode == 2)
  443.       {
  444.         pResult->AdrVals[0] = EvalAddress(&AddrArg, UInt8, &ValOK);
  445.         if (ValOK)
  446.         {
  447.           pResult->AdrCnt = 1;
  448.           if (!as_strcasecmp(ArgStr[2].str.p_str, "X"))
  449.             pResult->ErgMode = ModZIX;
  450.           else if (!as_strcasecmp(ArgStr[2].str.p_str, "Y"))
  451.             pResult->ErgMode = ModZIY;
  452.           else
  453.             WrStrErrorPos(ErrNum_InvReg, &ArgStr[2]);
  454.         }
  455.       }
  456.       else
  457.       {
  458.         AdrWord = EvalAddress(&AddrArg, Int16, &ValOK);
  459.         if (ValOK)
  460.         {
  461.           pResult->AdrCnt = 2;
  462.           pResult->AdrVals[0] = Lo(AdrWord);
  463.           pResult->AdrVals[1] = Hi(AdrWord);
  464.           if (!as_strcasecmp(ArgStr[2].str.p_str, "X"))
  465.             pResult->ErgMode = ModIX;
  466.           else if (!as_strcasecmp(ArgStr[2].str.p_str, "Y"))
  467.             pResult->ErgMode = ModIY;
  468.           else
  469.             WrStrErrorPos(ErrNum_InvReg, &ArgStr[2]);
  470.           if (pResult->ErgMode != -1)
  471.           {
  472.             if (IsBasePage(pResult->AdrVals[1]) && (ZeroMode == 0))
  473.               ChkZeroMode(pResult, pOrder, (!as_strcasecmp(ArgStr[2].str.p_str, "X")) ? ModZIX : ModZIY);
  474.           }
  475.         }
  476.       }
  477.     }
  478.   }
  479.  
  480.   else
  481.     (void)ChkArgCnt(0, 2);
  482. }
  483.  
  484. static int ImmStart(const char *pArg)
  485. {
  486.   return !!(*pArg == '#');
  487. }
  488.  
  489. /*---------------------------------------------------------------------------*/
  490.  
  491. /* Anweisungen ohne Argument */
  492.  
  493. static void DecodeFixed(Word Index)
  494. {
  495.   const FixedOrder *pOrder = FixedOrders + Index;
  496.  
  497.   if (ChkArgCnt(0, 0)
  498.    && (ChkExactCPUMask(pOrder->CPUFlag, CPU6502) >= 0))
  499.   {
  500.     CodeLen = 1;
  501.     BAsmCode[0] = pOrder->Code;
  502.     if (MomCPU == CPUM740)
  503.     {
  504.       if (Memo("PLP"))
  505.         BAsmCode[CodeLen++] = NOPCode;
  506.       if ((Last_ADC_SBC_Flag) && (Memo("SEC") || Memo("CLC") || Memo("CLD")))
  507.         InsNOP();
  508.     }
  509.   }
  510. }
  511.  
  512. /* All right, guys, this really makes tool developers' lives difficult: you can't
  513.    seem to agree on whether BRK is a single or two byte instruction.  Always adding
  514.    a NOP is obviously not what suits the majority of people, so I'll change it to
  515.    an optional argument.  I hope this ends the discussion about BRK.  No, wait, it
  516.    *will* end discussion because I will not answer any further requests about this
  517.    instruction... */
  518.  
  519. static void DecodeBRK(Word Index)
  520. {
  521.   UNUSED(Index);
  522.  
  523.   if (ChkArgCnt(0, 1))
  524.   {
  525.     BAsmCode[0] = 0x00;
  526.     if (ArgCnt > 0)
  527.     {
  528.       Boolean OK;
  529.  
  530.       BAsmCode[1] = EvalStrIntExpressionOffs(&ArgStr[1], !!(*ArgStr[1].str.p_str == '#'), Int8, &OK);
  531.       if (OK)
  532.         CodeLen = 2;
  533.     }
  534.     else
  535.       CodeLen = 1;
  536.   }
  537. }
  538.  
  539. static void DecodeSEB_CLB(Word Code)
  540. {
  541.   if (ChkArgCnt(2, 2)
  542.    && ChkExactCPU(CPUM740))
  543.   {
  544.     Boolean ValOK;
  545.     Byte BitNo = EvalStrIntExpression(&ArgStr[1], UInt3, &ValOK);
  546.  
  547.     if (ValOK)
  548.     {
  549.       BAsmCode[0] = Code + (BitNo << 5);
  550.       if (!as_strcasecmp(ArgStr[2].str.p_str, "A"))
  551.         CodeLen = 1;
  552.       else
  553.       {
  554.         BAsmCode[1] = EvalStrIntExpression(&ArgStr[2], UInt8, &ValOK);
  555.         if (ValOK)
  556.         {
  557.           CodeLen = 2;
  558.           BAsmCode[0] += 4;
  559.         }
  560.       }
  561.     }
  562.   }
  563. }
  564.  
  565. static void DecodeBBC_BBS(Word Code)
  566. {
  567.   Boolean ValOK;
  568.   tSymbolFlags Flags;
  569.   int b;
  570.  
  571.   if (ChkArgCnt(3, 3)
  572.    && ChkExactCPU(CPUM740))
  573.   {
  574.     BAsmCode[0] = EvalStrIntExpression(&ArgStr[1], UInt3, &ValOK);
  575.     if (ValOK)
  576.     {
  577.       BAsmCode[0] = (BAsmCode[0] << 5) + Code;
  578.       b = (as_strcasecmp(ArgStr[2].str.p_str, "A") != 0);
  579.       if (!b)
  580.         ValOK = True;
  581.       else
  582.       {
  583.         BAsmCode[0] += 4;
  584.         BAsmCode[1] = EvalStrIntExpression(&ArgStr[2], UInt8, &ValOK);
  585.       }
  586.       if (ValOK)
  587.       {
  588.         Integer AdrInt = EvalStrIntExpressionWithFlags(&ArgStr[3], Int16, &ValOK, &Flags) - (EProgCounter() + 2 + Ord(b) + Ord(Last_CLI_SEI_Flag));
  589.  
  590.         if (ValOK)
  591.         {
  592.           if (((AdrInt > 127) || (AdrInt < -128)) && !mSymbolQuestionable(Flags)) WrError(ErrNum_JmpDistTooBig);
  593.           else
  594.           {
  595.             CodeLen = 2 + Ord(b);
  596.             BAsmCode[CodeLen - 1] = AdrInt & 0xff;
  597.             if (Last_CLI_SEI_Flag)
  598.               InsNOP();
  599.           }
  600.         }
  601.       }
  602.     }
  603.   }
  604. }
  605.  
  606. static void DecodeBBR_BBS(Word Code)
  607. {
  608.   Boolean ValOK;
  609.  
  610.   if (ChkArgCnt(2, 2)
  611.    && (ChkExactCPUMask(M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_HUC6280, CPU6502) >= 0))
  612.   {
  613.     Byte ForceSize;
  614.     unsigned Offset = ChkZero(&ArgStr[1], &ForceSize);
  615.  
  616.     if (ForceSize == 1) WrStrErrorPos(ErrNum_InvAddrMode, &ArgStr[1]);
  617.     else
  618.     {
  619.       BAsmCode[1] = EvalStrIntExpressionOffs(&ArgStr[1], Offset, UInt8, &ValOK);
  620.       if (ValOK)
  621.       {
  622.         Integer AdrInt;
  623.         tSymbolFlags Flags;
  624.  
  625.         BAsmCode[0] = Code;
  626.         AdrInt = EvalStrIntExpressionWithFlags(&ArgStr[2], UInt16, &ValOK, &Flags) - (EProgCounter() + 3);
  627.         if (ValOK)
  628.         {
  629.           if (((AdrInt > 127) || (AdrInt < -128)) && !mSymbolQuestionable(Flags)) WrError(ErrNum_JmpDistTooBig);
  630.           else
  631.           {
  632.             CodeLen = 3;
  633.             BAsmCode[2] = AdrInt & 0xff;
  634.           }
  635.         }
  636.       }
  637.     }
  638.   }
  639. }
  640.  
  641. static void DecodeRMB_SMB(Word Code)
  642. {
  643.   if (ChkArgCnt(1, 1)
  644.    && (ChkExactCPUMask(M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_HUC6280, CPU6502) >= 0))
  645.   {
  646.     Byte ForceSize;
  647.     unsigned Offset = ChkZero(&ArgStr[1], &ForceSize);
  648.  
  649.     if (ForceSize == 1) WrStrErrorPos(ErrNum_InvAddrMode, &ArgStr[1]);
  650.     else
  651.     {
  652.       Boolean ValOK;
  653.  
  654.       BAsmCode[1] = EvalStrIntExpressionOffs(&ArgStr[1], Offset, UInt8, &ValOK);
  655.       if (ValOK)
  656.       {
  657.         BAsmCode[0] = Code;
  658.         CodeLen = 2;
  659.       }
  660.     }
  661.   }
  662. }
  663.  
  664. static void DecodeRBA_SBA(Word Code)
  665. {
  666.   if (ChkArgCnt(2, 2)
  667.    && ChkExactCPU(CPU65C19))
  668.   {
  669.     Boolean OK;
  670.     Word Addr;
  671.  
  672.     Addr = EvalStrIntExpression(&ArgStr[1], UInt16, &OK);
  673.     if (OK)
  674.     {
  675.       BAsmCode[3] = EvalStrIntExpressionOffs(&ArgStr[2], ImmStart(ArgStr[2].str.p_str), UInt8, &OK);
  676.       if (OK)
  677.       {
  678.         BAsmCode[0] = Code;
  679.         BAsmCode[1] = Lo(Addr);
  680.         BAsmCode[2] = Hi(Addr);
  681.         CodeLen = 4;
  682.       }
  683.     }
  684.   }
  685. }
  686.  
  687. static void DecodeBAR_BAS(Word Code)
  688. {
  689.   if (ChkArgCnt(3, 3)
  690.    && ChkExactCPU(CPU65C19))
  691.   {
  692.     Boolean OK;
  693.     Word Addr;
  694.  
  695.     Addr = EvalStrIntExpression(&ArgStr[1], UInt16, &OK);
  696.     if (OK)
  697.     {
  698.       BAsmCode[3] = EvalStrIntExpressionOffs(&ArgStr[2], ImmStart(ArgStr[2].str.p_str), UInt8, &OK);
  699.       if (OK)
  700.       {
  701.         tSymbolFlags Flags;
  702.         Integer Dist = EvalStrIntExpressionWithFlags(&ArgStr[3], UInt16, &OK, &Flags) - (EProgCounter() + 5);
  703.  
  704.         if (OK)
  705.         {
  706.           if (((Dist > 127) || (Dist < -128)) && !mSymbolQuestionable(Flags)) WrError(ErrNum_JmpDistTooBig);
  707.           else
  708.           {
  709.             BAsmCode[0] = Code;
  710.             BAsmCode[1] = Lo(Addr);
  711.             BAsmCode[2] = Hi(Addr);
  712.             BAsmCode[4] = Dist & 0xff;
  713.             CodeLen = 5;
  714.           }
  715.         }
  716.       }
  717.     }
  718.   }
  719. }
  720.  
  721. static void DecodeSTI(Word Code)
  722. {
  723.   UNUSED(Code);
  724.  
  725.   if (ChkArgCnt(2, 2)
  726.    && ChkExactCPU(CPU65C19))
  727.   {
  728.     Boolean OK;
  729.  
  730.     BAsmCode[1] = EvalStrIntExpression(&ArgStr[1], UInt8, &OK);
  731.     if (OK)
  732.     {
  733.       BAsmCode[2] = EvalStrIntExpressionOffs(&ArgStr[2], ImmStart(ArgStr[2].str.p_str), UInt8, &OK);
  734.       if (OK)
  735.       {
  736.         BAsmCode[0] = 0xb2;
  737.         CodeLen = 3;
  738.       }
  739.     }
  740.   }
  741. }
  742.  
  743. static void DecodeLDM(Word Code)
  744. {
  745.   Boolean ValOK;
  746.  
  747.   UNUSED(Code);
  748.  
  749.   if (ChkArgCnt(2, 2)
  750.    && ChkExactCPU(CPUM740))
  751.   {
  752.     BAsmCode[0] = 0x3c;
  753.     BAsmCode[2] = EvalStrIntExpression(&ArgStr[2], UInt8, &ValOK);
  754.     if (ValOK)
  755.     {
  756.       if (*ArgStr[1].str.p_str != '#') WrError(ErrNum_InvAddrMode);
  757.       else
  758.       {
  759.         BAsmCode[1] = EvalStrIntExpressionOffs(&ArgStr[1], 1, Int8, &ValOK);
  760.         if (ValOK)
  761.           CodeLen = 3;
  762.       }
  763.     }
  764.   }
  765. }
  766.  
  767. static void DecodeJSB(Word Code)
  768. {
  769.   UNUSED(Code);
  770.  
  771.   if (ChkArgCnt(1, 1)
  772.    && ChkExactCPU(CPU65C19))
  773.   {
  774.     Boolean OK;
  775.     tSymbolFlags Flags;
  776.     Word Addr;
  777.  
  778.     Addr = EvalStrIntExpressionWithFlags(&ArgStr[1], UInt16, &OK, &Flags);
  779.     if (mFirstPassUnknown(Flags))
  780.       Addr = 0xffe0;
  781.     if (OK)
  782.     {
  783.       if ((Addr & 0xffe1) != 0xffe0) WrError(ErrNum_JmpTargOnDiffPage);
  784.       else
  785.       {
  786.         BAsmCode[0] = 0x0b | ((Addr & 0x000e) << 3);
  787.         CodeLen = 1;
  788.       }
  789.     }
  790.   }
  791. }
  792.  
  793. static void DecodeAUG(Word Code)
  794. {
  795.   if (ChkArgCnt(0, 0) && ChkExactCPU(CPU65CE02))
  796.   {
  797.     BAsmCode[0] = Code;
  798.     BAsmCode[1] =
  799.     BAsmCode[2] =
  800.     BAsmCode[3] = 0x00;
  801.     CodeLen = 4;
  802.   }
  803. }
  804.  
  805. static void DecodeNorm(Word Index)
  806. {
  807.   const NormOrder *pOrder = NormOrders + Index;
  808.   tAdrResult AdrResult;
  809.  
  810.   DecodeAdr(&AdrResult, pOrder);
  811.   if (AdrResult.ErgMode != -1)
  812.   {
  813.     if (pOrder->Codes[AdrResult.ErgMode] == -1)
  814.     {
  815.       if (AdrResult.ErgMode == ModZA) AdrResult.ErgMode = ModA;
  816.       if (AdrResult.ErgMode == ModZIX) AdrResult.ErgMode = ModIX;
  817.       if (AdrResult.ErgMode == ModZIY) AdrResult.ErgMode = ModIY;
  818.       if (AdrResult.ErgMode == ModInd8) AdrResult.ErgMode = ModInd16;
  819.       AdrResult.AdrVals[AdrCnt++] = 0;
  820.     }
  821.     if (pOrder->Codes[AdrResult.ErgMode] == -1) WrError(ErrNum_InvAddrMode);
  822.     else if (ChkExactCPUMask(pOrder->Codes[AdrResult.ErgMode] >> 8, CPU6502) >= 0)
  823.     {
  824.       BAsmCode[0] = Lo(pOrder->Codes[AdrResult.ErgMode]);
  825.       memcpy(BAsmCode + 1, AdrResult.AdrVals, AdrResult.AdrCnt);
  826.       CodeLen = AdrResult.AdrCnt + 1;
  827.       if ((AdrResult.ErgMode == ModInd16) && (MomCPU != CPU65C02) && (BAsmCode[1] == 0xff))
  828.       {
  829.         WrError(ErrNum_NotOnThisAddress);
  830.         CodeLen = 0;
  831.       }
  832.     }
  833.   }
  834. }
  835.  
  836. static void DecodeTST(Word Index)
  837. {
  838.   Byte ImmVal = 0;
  839.  
  840.   /* split off immediate argument for HUC6280 TST? */
  841.  
  842.   if (MomCPU == CPUHUC6280)
  843.   {
  844.     Boolean OK;
  845.     int z;
  846.  
  847.     if (!ChkArgCnt(1, ArgCntMax))
  848.       return;
  849.  
  850.     ImmVal = EvalStrIntExpressionOffs(&ArgStr[1], ImmStart(ArgStr[1].str.p_str), Int8, &OK);
  851.     if (!OK)
  852.       return;
  853.     for (z = 1; z <= ArgCnt - 1; z++)
  854.       StrCompCopy(&ArgStr[z], &ArgStr[z + 1]);
  855.     ArgCnt--;
  856.   }
  857.  
  858.   /* generic generation */
  859.  
  860.   DecodeNorm(Index);
  861.  
  862.   /* if succeeded, insert immediate value */
  863.  
  864.   if ((CodeLen > 0) && (MomCPU == CPUHUC6280))
  865.   {
  866.     memmove(BAsmCode + 2, BAsmCode + 1, CodeLen - 1);
  867.     BAsmCode[1] = ImmVal;
  868.   }
  869. }
  870.  
  871. /* relativer Sprung ? */
  872.  
  873. static void DecodeCond(Word Index)
  874. {
  875.   const CondOrder *pOrder = CondOrders + Index;
  876.  
  877.   if (ChkArgCnt(1, 1)
  878.    && (ChkExactCPUMask(pOrder->CPUFlag, CPU6502) >= 0))
  879.   {
  880.     Integer AdrInt;
  881.     Boolean ValOK;
  882.     tSymbolFlags Flags;
  883.     const Boolean MayShort = !!pOrder->CodeShort,
  884.                   MayLong = !!pOrder->CodeLong && (MomCPU == CPU65CE02);
  885.     Byte ForceSize;
  886.  
  887.     AdrInt = EvalStrIntExpressionOffsWithFlags(&ArgStr[1], ChkZero(&ArgStr[1], &ForceSize), UInt16, &ValOK, &Flags);
  888.     if (!ValOK)
  889.       return;
  890.     if (!ForceSize)
  891.     {
  892.       if (!MayLong)
  893.         ForceSize = 2;
  894.       else if (!MayShort)
  895.         ForceSize = 1;
  896.       else
  897.         ForceSize = RangeCheck(AdrInt - (EProgCounter() + 2), SInt8) ? 2 : 1;
  898.     }
  899.  
  900.     AdrInt -= EProgCounter() + (4 - ForceSize);
  901.     switch (ForceSize)
  902.     {
  903.       case 2:
  904.         if (!MayShort) WrError(ErrNum_InvAddrMode);
  905.         else if (((AdrInt > 127) || (AdrInt < -128)) && !mSymbolQuestionable(Flags)) WrError(ErrNum_JmpDistTooBig);
  906.         else
  907.         {
  908.           BAsmCode[0] = pOrder->CodeShort;
  909.           BAsmCode[1] = AdrInt & 0xff;
  910.           CodeLen = 2;
  911.         }
  912.         break;
  913.       case 1:
  914.         if (!MayLong) WrError(ErrNum_InvAddrMode);
  915.         else
  916.         {
  917.           BAsmCode[0] = pOrder->CodeLong;
  918.           BAsmCode[1] = AdrInt & 0xff;
  919.           BAsmCode[2] = (AdrInt >> 8) & 0xff;
  920.           CodeLen = 3;
  921.         }
  922.         break;
  923.     }
  924.   }
  925. }
  926.  
  927. static void DecodeTransfer(Word Code)
  928. {
  929.   if (ChkArgCnt(3, 3)
  930.    && ChkExactCPU(CPUHUC6280))
  931.   {
  932.     Boolean OK;
  933.     Word Address;
  934.     int z;
  935.  
  936.     for (z = 1; z <= 3; z++)
  937.     {
  938.       Address = EvalStrIntExpression(&ArgStr[z], UInt16, &OK);
  939.       if (!OK)
  940.         return;
  941.       BAsmCode[z * 2 - 1] = Lo(Address);
  942.       BAsmCode[z * 2    ] = Hi(Address);
  943.     }
  944.     BAsmCode[0] = Code;
  945.     CodeLen = 7;
  946.   }
  947. }
  948.  
  949. /*---------------------------------------------------------------------------*/
  950.  
  951. static void AddFixed(const char *NName, Word NFlag, Byte NCode)
  952. {
  953.   order_array_rsv_end(FixedOrders, FixedOrder);
  954.   FixedOrders[InstrZ].CPUFlag = NFlag;
  955.   FixedOrders[InstrZ].Code = NCode;
  956.   AddInstTable(InstTable, NName, InstrZ++, DecodeFixed);
  957. }
  958.  
  959. static void AddNorm(const char *NName, LongWord ZACode, LongWord ACode, LongWord ZIXCode,
  960.                     LongWord IXCode, LongWord ZIYCode, LongWord IYCode, LongWord IndIXCode,
  961.                     LongWord IndOXCode, LongWord IndOYCode, LongWord IndOZCode, LongWord Ind16Code, LongWord ImmCode, LongWord AccCode,
  962.                     LongWord NoneCode, LongWord Ind8Code, LongWord IndSPYCode, LongWord SpecCode)
  963. {
  964.   order_array_rsv_end(NormOrders, NormOrder);
  965.   NormOrders[InstrZ].Codes[ModZA] = ZACode;
  966.   NormOrders[InstrZ].Codes[ModA] = ACode;
  967.   NormOrders[InstrZ].Codes[ModZIX] = ZIXCode;
  968.   NormOrders[InstrZ].Codes[ModIX] = IXCode;
  969.   NormOrders[InstrZ].Codes[ModZIY] = ZIYCode;
  970.   NormOrders[InstrZ].Codes[ModIY] = IYCode;
  971.   NormOrders[InstrZ].Codes[ModIndIX] = IndIXCode;
  972.   NormOrders[InstrZ].Codes[ModIndOX] = IndOXCode;
  973.   NormOrders[InstrZ].Codes[ModIndOY] = IndOYCode;
  974.   NormOrders[InstrZ].Codes[ModIndOZ] = IndOZCode;
  975.   NormOrders[InstrZ].Codes[ModInd16] = Ind16Code;
  976.   NormOrders[InstrZ].Codes[ModImm] = ImmCode;
  977.   NormOrders[InstrZ].Codes[ModAcc] = AccCode;
  978.   NormOrders[InstrZ].Codes[ModNone] = NoneCode;
  979.   NormOrders[InstrZ].Codes[ModInd8] = Ind8Code;
  980.   NormOrders[InstrZ].Codes[ModIndSPY] = IndSPYCode;
  981.   NormOrders[InstrZ].Codes[ModSpec] = SpecCode;
  982.   AddInstTable(InstTable, NName, InstrZ++, strcmp(NName, "TST") ? DecodeNorm : DecodeTST);
  983. }
  984.  
  985. static void AddCond(const char *NName, Word NFlag, Byte NCodeShort, Byte NCodeLong)
  986. {
  987.   order_array_rsv_end(CondOrders, CondOrder);
  988.   CondOrders[InstrZ].CPUFlag = NFlag;
  989.   CondOrders[InstrZ].CodeShort = NCodeShort;
  990.   CondOrders[InstrZ].CodeLong = NCodeLong;
  991.   AddInstTable(InstTable, NName, InstrZ++, DecodeCond);
  992. }
  993.  
  994. static LongWord MkMask(Word CPUMask, Byte Code)
  995. {
  996.   return (((LongWord)CPUMask) << 8) | Code;
  997. }
  998.  
  999. static void InitFields(void)
  1000. {
  1001.   Boolean Is740 = (MomCPU == CPUM740),
  1002.           Is65C19 = (MomCPU == CPU65C19);
  1003.   int Bit;
  1004.   char Name[20];
  1005.  
  1006.   InstTable = CreateInstTable(237);
  1007.   SetDynamicInstTable(InstTable);
  1008.  
  1009.   AddInstTable(InstTable, "SEB", 0x0b, DecodeSEB_CLB);
  1010.   AddInstTable(InstTable, "CLB", 0x1b, DecodeSEB_CLB);
  1011.   AddInstTable(InstTable, "BBC", 0x13, DecodeBBC_BBS);
  1012.   AddInstTable(InstTable, "BBS", 0x03, DecodeBBC_BBS);
  1013.   AddInstTable(InstTable, "RBA", 0xc2, DecodeRBA_SBA);
  1014.   AddInstTable(InstTable, "SBA", 0xd2, DecodeRBA_SBA);
  1015.   AddInstTable(InstTable, "BAR", 0xe2, DecodeBAR_BAS);
  1016.   AddInstTable(InstTable, "BAS", 0xf2, DecodeBAR_BAS);
  1017.   AddInstTable(InstTable, "STI", 0, DecodeSTI);
  1018.   AddInstTable(InstTable, "BRK", 0, DecodeBRK);
  1019.   for (Bit = 0; Bit < 8; Bit++)
  1020.   {
  1021.     as_snprintf(Name, sizeof(Name), "BBR%d", Bit);
  1022.     AddInstTable(InstTable, Name, (Bit << 4) + 0x0f, DecodeBBR_BBS);
  1023.     as_snprintf(Name, sizeof(Name), "BBS%d", Bit);
  1024.     AddInstTable(InstTable, Name, (Bit << 4) + 0x8f, DecodeBBR_BBS);
  1025.     as_snprintf(Name, sizeof(Name), "RMB%d", Bit);
  1026.     AddInstTable(InstTable, Name, (Bit << 4) + 0x07, DecodeRMB_SMB);
  1027.     as_snprintf(Name, sizeof(Name), "SMB%d", Bit);
  1028.     AddInstTable(InstTable, Name, (Bit << 4) + 0x87, DecodeRMB_SMB);
  1029.   }
  1030.   AddInstTable(InstTable, "LDM", 0, DecodeLDM);
  1031.   AddInstTable(InstTable, "JSB", 0, DecodeJSB);
  1032.   AddInstTable(InstTable, "AUG", 0x5c, DecodeAUG);
  1033.  
  1034.   AddInstTable(InstTable, "TAI"  , 0xf3, DecodeTransfer);
  1035.   AddInstTable(InstTable, "TDD"  , 0xc3, DecodeTransfer);
  1036.   AddInstTable(InstTable, "TIA"  , 0xe3, DecodeTransfer);
  1037.   AddInstTable(InstTable, "TII"  , 0x73, DecodeTransfer);
  1038.   AddInstTable(InstTable, "TIN"  , 0xd3, DecodeTransfer);
  1039.  
  1040.   InstrZ = 0;
  1041.   AddFixed("RTS", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x60);
  1042.   AddFixed("RTI", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x40);
  1043.   AddFixed("TAX", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xaa);
  1044.   AddFixed("TXA", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x8a);
  1045.   AddFixed("TAY", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xa8);
  1046.   AddFixed("TYA", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x98);
  1047.   AddFixed("TXS", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x9a);
  1048.   AddFixed("TSX", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xba);
  1049.   AddFixed("TSY",                               M_65CE02                                                         , 0x0b);
  1050.   AddFixed("TYS",                               M_65CE02                                                         , 0x2b);
  1051.   AddFixed("TAZ",                               M_65CE02                                                         , 0x4b);
  1052.   AddFixed("TAB",                               M_65CE02                                                         , 0x5b);
  1053.   AddFixed("TZA",                               M_65CE02                                                         , 0x6b);
  1054.   AddFixed("TBA",                               M_65CE02                                                         , 0x7b);
  1055.   AddFixed("DEX", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xca);
  1056.   AddFixed("DEY", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x88);
  1057.   AddFixed("DEZ",                               M_65CE02                                                         , 0x3b);
  1058.   AddFixed("INX", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xe8);
  1059.   AddFixed("INY", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xc8);
  1060.   AddFixed("INZ",                               M_65CE02                                                         , 0x1b);
  1061.   AddFixed("PHA", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x48);
  1062.   AddFixed("PLA", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x68);
  1063.   AddFixed("PHP", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x08);
  1064.   AddFixed("PLP", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x28);
  1065.   AddFixed("PHX",          M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19              | M_HUC6280          , 0xda);
  1066.   AddFixed("PLX",          M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19              | M_HUC6280          , 0xfa);
  1067.   AddFixed("PHY",          M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19              | M_HUC6280          , 0x5a);
  1068.   AddFixed("PLY",          M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19              | M_HUC6280          , 0x7a);
  1069.   AddFixed("PHZ",                               M_65CE02                                                         , 0xdb);
  1070.   AddFixed("PLZ",                               M_65CE02                                                         , 0xfb);
  1071.   AddFixed("STP",                                          M_W65C02S |           M_MELPS740                      , Is740 ? 0x42 : 0xdb);
  1072.   AddFixed("WAI",                                          M_W65C02S                                             , 0xcb);
  1073.   AddFixed("SLW",                                                                M_MELPS740                      , 0xc2);
  1074.   AddFixed("FST",                                                                M_MELPS740                      , 0xe2);
  1075.   AddFixed("WIT",                                                                M_MELPS740                      , 0xc2);
  1076.   AddFixed("CLI", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x58);
  1077.   AddFixed("SEI", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x78);
  1078.   AddFixed("CLC", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x18);
  1079.   AddFixed("SEC", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x38);
  1080.   AddFixed("CLD", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xd8);
  1081.   AddFixed("SED", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xf8);
  1082.   AddFixed("CLE",                               M_65CE02                                                         , 0x02);
  1083.   AddFixed("SEE",                               M_65CE02                                                         , 0x03);
  1084.   AddFixed("CLV", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xb8);
  1085.   AddFixed("CLT",                                                                M_MELPS740                      , 0x12);
  1086.   AddFixed("SET",                                                                M_MELPS740 | M_HUC6280          , Is740 ? 0x32 : 0xf4); /* !!! for HUC6280, is prefix for (x) instead of ACC as dest */
  1087.   AddFixed("JAM",                                                                                         M_6502U, 0x02);
  1088.   AddFixed("CRS",                                                                                         M_6502U, 0x02);
  1089.   AddFixed("KIL",                                                                                         M_6502U, 0x02);
  1090.   AddFixed("CLW",                                                      M_65C19                                   , 0x52);
  1091.   AddFixed("MPY",                                                      M_65C19                                   , 0x02);
  1092.   AddFixed("MPA",                                                      M_65C19                                   , 0x12);
  1093.   AddFixed("PSH",                                                      M_65C19                                   , 0x22);
  1094.   AddFixed("PUL",                                                      M_65C19                                   , 0x32);
  1095.   AddFixed("PLW",                                                      M_65C19                                   , 0x33);
  1096.   AddFixed("RND",                                                      M_65C19                                   , 0x42);
  1097.   AddFixed("TAW",                                                      M_65C19                                   , 0x62);
  1098.   AddFixed("TWA",                                                      M_65C19                                   , 0x72);
  1099.   AddFixed("NXT",                                                      M_65C19                                   , 0x8b);
  1100.   AddFixed("LII",                                                      M_65C19                                   , 0x9b);
  1101.   AddFixed("LAI",                                                      M_65C19                                   , 0xeb);
  1102.   AddFixed("INI",                                                      M_65C19                                   , 0xbb);
  1103.   AddFixed("PHI",                                                      M_65C19                                   , 0xcb);
  1104.   AddFixed("PLI",                                                      M_65C19                                   , 0xdb);
  1105.   AddFixed("TIP",                                                      M_65C19                                   , 0x03);
  1106.   AddFixed("PIA",                                                      M_65C19                                   , 0xfb);
  1107.   AddFixed("LAN",                                                      M_65C19                                   , 0xab);
  1108.   AddFixed("CLA",                                                                             M_HUC6280          , 0x62);
  1109.   AddFixed("CLX",                                                                             M_HUC6280          , 0x82);
  1110.   AddFixed("CLY",                                                                             M_HUC6280          , 0xc2);
  1111.   AddFixed("CSL",                                                                             M_HUC6280          , 0x54);
  1112.   AddFixed("CSH",                                                                             M_HUC6280          , 0xd4);
  1113.   AddFixed("SAY",                                                                             M_HUC6280          , 0x42);
  1114.   AddFixed("SXY",                                                                             M_HUC6280          , 0x02);
  1115.  
  1116.   InstrZ = 0;
  1117.   AddNorm("NOP",
  1118.   /* ZA    */ MkMask(                                                                                        M_6502U, 0x04),
  1119.   /* A     */ MkMask(                                                                                        M_6502U, 0x0c),
  1120.   /* ZIX   */ MkMask(                                                                                        M_6502U, 0x14),
  1121.   /* IX    */ MkMask(                                                                                        M_6502U, 0x1c),
  1122.   /* ZIY   */     -1,
  1123.   /* IY    */     -1,
  1124.   /* (n,X) */     -1,
  1125.   /* (n),X */     -1,
  1126.   /* (n),Y */     -1,
  1127.   /* (n),Z */     -1,
  1128.   /* (n16) */     -1,
  1129.   /* imm   */ MkMask(                                                                                        M_6502U, 0x80),
  1130.   /* ACC   */     -1,
  1131.   /* NON   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xea),
  1132.   /* (n8)  */     -1,
  1133.   /*(n,SP),y*/    -1,
  1134.   /* spec  */     -1);
  1135.   AddNorm("LDA",
  1136.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xa5),
  1137.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xad),
  1138.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xb5),
  1139.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xbd),
  1140.   /* ZIY   */     -1,
  1141.   /* IY    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xb9),
  1142.   /* (n,X) */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0xa1),
  1143.   /* (n),X */ MkMask(                                                     M_65C19                                   , 0xb1),
  1144.   /* (n),Y */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0xb1),
  1145.   /* (n),Z */ MkMask(                              M_65CE02                                                         , 0xb2),
  1146.   /* (n16) */     -1,
  1147.   /* imm   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xa9),
  1148.   /* ACC   */     -1,
  1149.   /* NON   */     -1,
  1150.   /* (n8)  */ MkMask(         M_65SC02 | M_65C02            | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, Is65C19 ? 0xa1 : 0xb2),
  1151.   /*(n,SP),y*/MkMask(                              M_65CE02                                                         , 0xe2),
  1152.   /* spec  */     -1);
  1153.   AddNorm("LDX",
  1154.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xa6),
  1155.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xae),
  1156.   /* ZIX   */     -1,
  1157.   /* IX    */     -1,
  1158.   /* ZIY   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xb6),
  1159.   /* IY    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xbe),
  1160.   /* (n,X) */     -1,
  1161.   /* (n),X */     -1,
  1162.   /* (n),Y */     -1,
  1163.   /* (n),Z */     -1,
  1164.   /* (n16) */     -1,
  1165.   /* imm   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xa2),
  1166.   /* ACC   */     -1,
  1167.   /* NON   */     -1,
  1168.   /* (n8)  */     -1,
  1169.   /*(n,SP),y*/    -1,
  1170.   /* spec  */     -1);
  1171.   AddNorm("LDY",
  1172.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xa4),
  1173.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xac),
  1174.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xb4),
  1175.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xbc),
  1176.   /* ZIY   */     -1,
  1177.   /* IY    */     -1,
  1178.   /* (n,X) */     -1,
  1179.   /* (n),X */     -1,
  1180.   /* (n),Y */     -1,
  1181.   /* (n),Z */     -1,
  1182.   /* (n16) */     -1,
  1183.   /* imm   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xa0),
  1184.   /* ACC   */     -1,
  1185.   /* NON   */     -1,
  1186.   /* (n8)  */     -1,
  1187.   /*(n,SP),y*/    -1,
  1188.   /* spec  */     -1);
  1189.   AddNorm("LDZ",
  1190.   /* ZA    */     -1,
  1191.   /* A     */ MkMask(                              M_65CE02                                                         , 0xab),
  1192.   /* ZIX   */     -1,
  1193.   /* IX    */ MkMask(                              M_65CE02                                                         , 0xbb),
  1194.   /* ZIY   */     -1,
  1195.   /* IY    */     -1,
  1196.   /* (n,X) */     -1,
  1197.   /* (n),X */     -1,
  1198.   /* (n),Y */     -1,
  1199.   /* (n),Z */     -1,
  1200.   /* (n16) */     -1,
  1201.   /* imm   */ MkMask(                              M_65CE02                                                         , 0xa3),
  1202.   /* ACC   */     -1,
  1203.   /* NON   */     -1,
  1204.   /* (n8)  */     -1,
  1205.   /*(n,SP),y*/    -1,
  1206.   /* spec  */     -1);
  1207.   AddNorm("STA",
  1208.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x85),
  1209.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x8d),
  1210.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x95),
  1211.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x9d),
  1212.   /* ZIY   */     -1,
  1213.   /* IY    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x99),
  1214.   /* (n,X) */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0x81),
  1215.   /* (n),X */ MkMask(                                                     M_65C19                                   , 0x91),
  1216.   /* (n),Y */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0x91),
  1217.   /* (n),Z */ MkMask(                              M_65CE02                                                         , 0x92),
  1218.   /* (n16) */     -1,
  1219.   /* imm   */     -1,
  1220.   /* ACC   */     -1,
  1221.   /* NON   */     -1,
  1222.   /* (n8)  */ MkMask(         M_65SC02 | M_65C02            | M_W65C02S | M_65C19              | M_HUC6280          , Is65C19 ? 0x81 : 0x92),
  1223.   /*(n,SP),y*/MkMask(                              M_65CE02                                                         , 0x82),
  1224.   /* spec  */     -1);
  1225.   AddNorm("ST0",
  1226.   /* ZA    */     -1,
  1227.   /* A     */     -1,
  1228.   /* ZIX   */     -1,
  1229.   /* IX    */     -1,
  1230.   /* ZIY   */     -1,
  1231.   /* IY    */     -1,
  1232.   /* (n,X) */     -1,
  1233.   /* (n),X */     -1,
  1234.   /* (n),Y */     -1,
  1235.   /* (n),Z */     -1,
  1236.   /* (n16) */     -1,
  1237.   /* imm   */ MkMask(                                                                            M_HUC6280          , 0x03),
  1238.   /* ACC   */     -1,
  1239.   /* NON   */     -1,
  1240.   /* (n8)  */     -1,
  1241.   /*(n,SP),y*/    -1,
  1242.   /* spec  */     -1);
  1243.   AddNorm("ST1",
  1244.   /* ZA    */     -1,
  1245.   /* A     */     -1,
  1246.   /* ZIX   */     -1,
  1247.   /* IX    */     -1,
  1248.   /* ZIY   */     -1,
  1249.   /* IY    */     -1,
  1250.   /* (n,X) */     -1,
  1251.   /* (n),X */     -1,
  1252.   /* (n),Y */     -1,
  1253.   /* (n),Z */     -1,
  1254.   /* (n16) */     -1,
  1255.   /* imm   */ MkMask(                                                                            M_HUC6280          , 0x13),
  1256.   /* ACC   */     -1,
  1257.   /* NON   */     -1,
  1258.   /* (n8)  */     -1,
  1259.   /*(n,SP),y*/    -1,
  1260.   /* spec  */     -1);
  1261.   AddNorm("ST2",
  1262.   /* ZA    */     -1,
  1263.   /* A     */     -1,
  1264.   /* ZIX   */     -1,
  1265.   /* IX    */     -1,
  1266.   /* ZIY   */     -1,
  1267.   /* IY    */     -1,
  1268.   /* (n,X) */     -1,
  1269.   /* (n),X */     -1,
  1270.   /* (n),Y */     -1,
  1271.   /* (n),Z */     -1,
  1272.   /* (n16) */     -1,
  1273.   /* imm   */ MkMask(                                                                            M_HUC6280          , 0x23),
  1274.   /* ACC   */     -1,
  1275.   /* NON   */     -1,
  1276.   /* (n8)  */     -1,
  1277.   /*(n,SP),y*/    -1,
  1278.   /* spec  */     -1);
  1279.   AddNorm("STX",
  1280.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x86),
  1281.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x8e),
  1282.   /* ZIX   */     -1,
  1283.   /* IX    */     -1,
  1284.   /* ZIY   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x96),
  1285.   /* IY    */ MkMask(                              M_65CE02                                                         , 0x9b),
  1286.   /* (n,X) */     -1,
  1287.   /* (n),X */     -1,
  1288.   /* (n),Y */     -1,
  1289.   /* (n),Z */     -1,
  1290.   /* (n16) */     -1,
  1291.   /* imm   */     -1,
  1292.   /* ACC   */     -1,
  1293.   /* NON   */     -1,
  1294.   /* (n8)  */     -1,
  1295.   /*(n,SP),y*/    -1,
  1296.   /* spec  */     -1);
  1297.   AddNorm("STY",
  1298.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x84),
  1299.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x8c),
  1300.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x94),
  1301.   /* IX    */ MkMask(                              M_65CE02                                                         , 0x8b),
  1302.   /* ZIY   */     -1,
  1303.   /* IY    */     -1,
  1304.   /* (n,X) */     -1,
  1305.   /* (n),X */     -1,
  1306.   /* (n),Y */     -1,
  1307.   /* (n),Z */     -1,
  1308.   /* (n16) */     -1,
  1309.   /* imm   */     -1,
  1310.   /* ACC   */     -1,
  1311.   /* NON   */     -1,
  1312.   /* (n8)  */     -1,
  1313.   /*(n,SP),y*/    -1,
  1314.   /* spec  */     -1);
  1315.   AddNorm("STZ",
  1316.   /* ZA    */ MkMask(         M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S                        | M_HUC6280          , 0x64),
  1317.   /* A     */ MkMask(         M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S                        | M_HUC6280          , 0x9c),
  1318.   /* ZIX   */ MkMask(         M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S                        | M_HUC6280          , 0x74),
  1319.   /* IX    */ MkMask(         M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S                        | M_HUC6280          , 0x9e),
  1320.   /* ZIY   */     -1,
  1321.   /* IY    */     -1,
  1322.   /* (n,X) */     -1,
  1323.   /* (n),X */     -1,
  1324.   /* (n),Y */     -1,
  1325.   /* (n),Z */     -1,
  1326.   /* (n16) */     -1,
  1327.   /* imm   */     -1,
  1328.   /* ACC   */     -1,
  1329.   /* NON   */     -1,
  1330.   /* (n8)  */     -1,
  1331.   /*(n,SP),y*/    -1,
  1332.   /* spec  */     -1);
  1333.   AddNorm("ADC",
  1334.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x65),
  1335.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x6d),
  1336.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x75),
  1337.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x7d),
  1338.   /* ZIY   */     -1,
  1339.   /* IY    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x79),
  1340.   /* (n,X) */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0x61),
  1341.   /* (n),X */ MkMask(                                                     M_65C19                                   , 0x71),
  1342.   /* (n),Y */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0x71),
  1343.   /* (n),Z */ MkMask(                              M_65CE02                                                         , 0x72),
  1344.   /* (n16) */     -1,
  1345.   /* imm   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x69),
  1346.   /* ACC   */     -1,
  1347.   /* NON   */     -1,
  1348.   /* (n8)  */ MkMask(         M_65SC02 | M_65C02            | M_W65C02S | M_65C19              | M_HUC6280          , Is65C19 ? 0x61 : 0x72),
  1349.   /*(n,SP),y*/    -1,
  1350.   /* spec  */     -1);
  1351.   AddNorm("ADD",
  1352.   /* ZA    */ MkMask(                                                     M_65C19                                   , 0x64),
  1353.   /* A     */     -1,
  1354.   /* ZIX   */ MkMask(                                                     M_65C19                                   , 0x74),
  1355.   /* IX    */     -1,
  1356.   /* ZIY   */     -1,
  1357.   /* IY    */     -1,
  1358.   /* (n,X) */     -1,
  1359.   /* (n),X */     -1,
  1360.   /* (n),Y */     -1,
  1361.   /* (n),Z */     -1,
  1362.   /* (n16) */     -1,
  1363.   /* imm   */ MkMask(                                                     M_65C19                                   , 0x89),
  1364.   /* ACC   */     -1,
  1365.   /* NON   */     -1,
  1366.   /* (n8)  */     -1,
  1367.   /*(n,SP),y*/    -1,
  1368.   /* spec  */     -1);
  1369.   AddNorm("SBC",
  1370.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xe5),
  1371.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xed),
  1372.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xf5),
  1373.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xfd),
  1374.   /* ZIY   */     -1,
  1375.   /* IY    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xf9),
  1376.   /* (n,X) */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0xe1),
  1377.   /* (n),X */ MkMask(                                                     M_65C19                                   , 0xf1),
  1378.   /* (n),Y */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0xf1),
  1379.   /* (n),Z */ MkMask(                              M_65CE02                                                         , 0xf2),
  1380.   /* (n16) */     -1,
  1381.   /* imm   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xe9),
  1382.   /* ACC   */     -1,
  1383.   /* NON   */     -1,
  1384.   /* (n8)  */ MkMask(         M_65SC02 | M_65C02            | M_W65C02S | M_65C19              | M_HUC6280          , Is65C19 ? 0xe1 : 0xf2),
  1385.   /*(n,SP),y*/    -1,
  1386.   /* spec  */     -1);
  1387.   AddNorm("MUL",
  1388.   /* ZA    */     -1,
  1389.   /* A     */     -1,
  1390.   /* ZIX   */ MkMask(                                                               M_MELPS740                      , 0x62),
  1391.   /* IX    */     -1,
  1392.   /* ZIY   */     -1,
  1393.   /* IY    */     -1,
  1394.   /* (n,X) */     -1,
  1395.   /* (n),X */     -1,
  1396.   /* (n),Y */     -1,
  1397.   /* (n),Z */     -1,
  1398.   /* (n16) */     -1,
  1399.   /* imm   */     -1,
  1400.   /* ACC   */     -1,
  1401.   /* NON   */     -1,
  1402.   /* (n8)  */     -1,
  1403.   /*(n,SP),y*/    -1,
  1404.   /* spec  */     -1);
  1405.   AddNorm("DIV",
  1406.   /* ZA    */     -1,
  1407.   /* A     */     -1,
  1408.   /* ZIX   */ MkMask(                                                               M_MELPS740                      , 0xe2),
  1409.   /* IX    */     -1,
  1410.   /* ZIY   */     -1,
  1411.   /* IY    */     -1,
  1412.   /* (n,X) */     -1,
  1413.   /* (n),X */     -1,
  1414.   /* (n),Y */     -1,
  1415.   /* (n),Z */     -1,
  1416.   /* (n16) */     -1,
  1417.   /* imm   */     -1,
  1418.   /* ACC   */     -1,
  1419.   /* NON   */     -1,
  1420.   /* (n8)  */     -1,
  1421.   /*(n,SP),y*/    -1,
  1422.   /* spec  */     -1);
  1423.   AddNorm("AND",
  1424.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x25),
  1425.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x2d),
  1426.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x35),
  1427.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x3d),
  1428.   /* ZIY   */     -1,
  1429.   /* IY    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x39),
  1430.   /* (n,X) */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0x21),
  1431.   /* (n),X */ MkMask(                                                     M_65C19                                   , 0x31),
  1432.   /* (n),Y */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0x31),
  1433.   /* (n),Z */ MkMask(                              M_65CE02                                                         , 0x32),
  1434.   /* (n16) */     -1,
  1435.   /* imm   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x29),
  1436.   /* ACC   */     -1,
  1437.   /* NON   */     -1,
  1438.   /* (n8)  */ MkMask(         M_65SC02 | M_65C02            | M_W65C02S | M_65C19              | M_HUC6280          , Is65C19 ? 0x21 : 0x32),
  1439.   /*(n,SP),y*/    -1,
  1440.   /* spec  */     -1);
  1441.   AddNorm("ORA",
  1442.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x05),
  1443.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x0d),
  1444.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x15),
  1445.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x1d),
  1446.   /* ZIY   */     -1,
  1447.   /* IY    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x19),
  1448.   /* (n,X) */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0x01),
  1449.   /* (n),X */ MkMask(                                                     M_65C19                                   , 0x11),
  1450.   /* (n),Y */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0x11),
  1451.   /* (n),Z */ MkMask(                              M_65CE02                                                         , 0x12),
  1452.   /* (n16) */     -1,
  1453.   /* imm   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x09),
  1454.   /* ACC   */     -1,
  1455.   /* NON   */     -1,
  1456.   /* (n8)  */ MkMask(         M_65SC02 | M_65C02            | M_W65C02S | M_65C19              | M_HUC6280          , Is65C19 ? 0x01 : 0x12),
  1457.   /*(n,SP),y*/    -1,
  1458.   /* spec  */     -1);
  1459.   AddNorm("EOR",
  1460.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x45),
  1461.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x4d),
  1462.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x55),
  1463.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x5d),
  1464.   /* ZIY   */     -1,
  1465.   /* IY    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x59),
  1466.   /* (n,X) */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0x41),
  1467.   /* (n),X */ MkMask(                                                     M_65C19                                   , 0x51),
  1468.   /* (n),Y */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0x51),
  1469.   /* (n),Z */ MkMask(                              M_65CE02                                                         , 0x52),
  1470.   /* (n16) */     -1,
  1471.   /* imm   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x49),
  1472.   /* ACC   */     -1,
  1473.   /* NON   */     -1,
  1474.   /* (n8)  */ MkMask(         M_65SC02 | M_65C02            | M_W65C02S | M_65C19              | M_HUC6280          , Is65C19 ? 0x41 : 0x52),
  1475.   /*(n,SP),y*/    -1,
  1476.   /* spec  */     -1);
  1477.   AddNorm("COM",
  1478.   /* ZA    */ MkMask(                                                               M_MELPS740                      , 0x44),
  1479.   /* A     */     -1,
  1480.   /* ZIX   */     -1,
  1481.   /* IX    */     -1,
  1482.   /* ZIY   */     -1,
  1483.   /* IY    */     -1,
  1484.   /* (n,X) */     -1,
  1485.   /* (n),X */     -1,
  1486.   /* (n),Y */     -1,
  1487.   /* (n),Z */     -1,
  1488.   /* (n16) */     -1,
  1489.   /* imm   */     -1,
  1490.   /* ACC   */     -1,
  1491.   /* NON   */     -1,
  1492.   /* (n8)  */     -1,
  1493.   /*(n,SP),y*/    -1,
  1494.   /* spec  */     -1);
  1495.   AddNorm("BIT",
  1496.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x24),
  1497.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x2c),
  1498.   /* ZIX   */ MkMask(         M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S                        | M_HUC6280          , 0x34),
  1499.   /* IX    */ MkMask(         M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S                        | M_HUC6280          , 0x3c),
  1500.   /* ZIY   */     -1,
  1501.   /* IY    */     -1,
  1502.   /* (n,X) */     -1,
  1503.   /* (n),X */     -1,
  1504.   /* (n),Y */     -1,
  1505.   /* (n),Z */     -1,
  1506.   /* (n16) */     -1,
  1507.   /* imm   */ MkMask(         M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S                        | M_HUC6280          , 0x89),
  1508.   /* ACC   */     -1,
  1509.   /* NON   */     -1,
  1510.   /* (n8)  */     -1,
  1511.   /*(n,SP),y*/    -1,
  1512.   /* spec  */     -1);
  1513.   AddNorm("TST", /* TODO: 6280 */
  1514.   /* ZA    */ MkMask(                                                               M_MELPS740 | M_HUC6280          , Is740 ? 0x64 : 0x83),
  1515.   /* A     */ MkMask(                                                                            M_HUC6280          , 0x93),
  1516.   /* ZIX   */ MkMask(                                                                            M_HUC6280          , 0xa3),
  1517.   /* IX    */ MkMask(                                                                            M_HUC6280          , 0xb3),
  1518.   /* ZIY   */     -1,
  1519.   /* IY    */     -1,
  1520.   /* (n,X) */     -1,
  1521.   /* (n),X */     -1,
  1522.   /* (n),Y */     -1,
  1523.   /* (n),Z */     -1,
  1524.   /* (n16) */     -1,
  1525.   /* imm   */     -1,
  1526.   /* ACC   */     -1,
  1527.   /* NON   */     -1,
  1528.   /* (n8)  */     -1,
  1529.   /*(n,SP),y*/    -1,
  1530.   /* spec  */     -1);
  1531.   AddNorm("ASL",
  1532.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x06),
  1533.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x0e),
  1534.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x16),
  1535.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x1e),
  1536.   /* ZIY   */     -1,
  1537.   /* IY    */     -1,
  1538.   /* (n,X) */     -1,
  1539.   /* (n),X */     -1,
  1540.   /* (n),Y */     -1,
  1541.   /* (n),Z */     -1,
  1542.   /* (n16) */     -1,
  1543.   /* imm   */     -1,
  1544.   /* ACC   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x0a),
  1545.   /* NON   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x0a),
  1546.   /* (n8)  */     -1,
  1547.   /*(n,SP),y*/    -1,
  1548.   /* spec  */     -1);
  1549.   AddNorm("ASR",
  1550.   /* ZA    */ MkMask(                              M_65CE02                                                         , 0x44),
  1551.   /* A     */     -1,
  1552.   /* ZIX   */ MkMask(                              M_65CE02                                                         , 0x54),
  1553.   /* IX    */     -1,
  1554.   /* ZIY   */     -1,
  1555.   /* IY    */     -1,
  1556.   /* (n,X) */     -1,
  1557.   /* (n),X */     -1,
  1558.   /* (n),Y */     -1,
  1559.   /* (n),Z */     -1,
  1560.   /* (n16) */     -1,
  1561.   /* imm   */ MkMask(                                                                                        M_6502U, 0x4b),
  1562.   /* ACC   */ MkMask(                              M_65CE02             | M_65C19                                   , (MomCPU == CPU65CE02) ? 0x43 : 0x3a),
  1563.   /* NON   */ MkMask(                              M_65CE02             | M_65C19                                   , (MomCPU == CPU65CE02) ? 0x43 : 0x3a),
  1564.   /* (n8)  */     -1,
  1565.   /*(n,SP),y*/    -1,
  1566.   /* spec  */     -1);
  1567.   AddNorm("ASW",
  1568.   /* ZA    */     -1,
  1569.   /* A     */ MkMask(                              M_65CE02                                                         , 0xcb),
  1570.   /* ZIX   */     -1,
  1571.   /* IX    */     -1,
  1572.   /* ZIY   */     -1,
  1573.   /* IY    */     -1,
  1574.   /* (n,X) */     -1,
  1575.   /* (n),X */     -1,
  1576.   /* (n),Y */     -1,
  1577.   /* (n),Z */     -1,
  1578.   /* (n16) */     -1,
  1579.   /* imm   */     -1,
  1580.   /* ACC   */     -1,
  1581.   /* NON   */     -1,
  1582.   /* (n8)  */     -1,
  1583.   /*(n,SP),y*/    -1,
  1584.   /* spec  */     -1);
  1585.   AddNorm("LAB",
  1586.   /* ZA    */     -1,
  1587.   /* A     */     -1,
  1588.   /* ZIX   */     -1,
  1589.   /* IX    */     -1,
  1590.   /* ZIY   */     -1,
  1591.   /* IY    */     -1,
  1592.   /* (n,X) */     -1,
  1593.   /* (n),X */     -1,
  1594.   /* (n),Y */     -1,
  1595.   /* (n),Z */     -1,
  1596.   /* (n16) */     -1,
  1597.   /* imm   */     -1,
  1598.   /* ACC   */ MkMask(                                                     M_65C19                                   , 0x13),
  1599.   /* NON   */ MkMask(                                                     M_65C19                                   , 0x13),
  1600.   /* (n8)  */     -1,
  1601.   /*(n,SP),y*/    -1,
  1602.   /* spec  */     -1);
  1603.   AddNorm("NEG",
  1604.   /* ZA    */     -1,
  1605.   /* A     */     -1,
  1606.   /* ZIX   */     -1,
  1607.   /* IX    */     -1,
  1608.   /* ZIY   */     -1,
  1609.   /* IY    */     -1,
  1610.   /* (n,X) */     -1,
  1611.   /* (n),X */     -1,
  1612.   /* (n),Y */     -1,
  1613.   /* (n),Z */     -1,
  1614.   /* (n16) */     -1,
  1615.   /* imm   */     -1,
  1616.   /* ACC   */ MkMask(                              M_65CE02             | M_65C19                                   , (MomCPU == CPU65CE02) ? 0x42 : 0x1a),
  1617.   /* NON   */ MkMask(                              M_65CE02             | M_65C19                                   , (MomCPU == CPU65CE02) ? 0x42 : 0x1a),
  1618.   /* (n8)  */     -1,
  1619.   /*(n,SP),y*/    -1,
  1620.   /* spec  */     -1);
  1621.   AddNorm("LSR",
  1622.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x46),
  1623.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x4e),
  1624.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x56),
  1625.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x5e),
  1626.   /* ZIY   */     -1,
  1627.   /* IY    */     -1,
  1628.   /* (n,X) */     -1,
  1629.   /* (n),X */     -1,
  1630.   /* (n),Y */     -1,
  1631.   /* (n),Z */     -1,
  1632.   /* (n16) */     -1,
  1633.   /* imm   */     -1,
  1634.   /* ACC   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x4a),
  1635.   /* NON   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x4a),
  1636.   /* (n8)  */     -1,
  1637.   /*(n,SP),y*/    -1,
  1638.   /* spec  */     -1);
  1639.   AddNorm("ROL",
  1640.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x26),
  1641.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x2e),
  1642.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x36),
  1643.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x3e),
  1644.   /* ZIY   */     -1,
  1645.   /* IY    */     -1,
  1646.   /* (n,X) */     -1,
  1647.   /* (n),X */     -1,
  1648.   /* (n),Y */     -1,
  1649.   /* (n),Z */     -1,
  1650.   /* (n16) */     -1,
  1651.   /* imm   */     -1,
  1652.   /* ACC   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x2a),
  1653.   /* NON   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x2a),
  1654.   /* (n8)  */     -1,
  1655.   /*(n,SP),y*/    -1,
  1656.   /* spec  */     -1);
  1657.   AddNorm("ROW",
  1658.   /* ZA    */     -1,
  1659.   /* A     */ MkMask(                              M_65CE02                                                         , 0xeb),
  1660.   /* ZIX   */     -1,
  1661.   /* IX    */     -1,
  1662.   /* ZIY   */     -1,
  1663.   /* IY    */     -1,
  1664.   /* (n,X) */     -1,
  1665.   /* (n),X */     -1,
  1666.   /* (n),Y */     -1,
  1667.   /* (n),Z */     -1,
  1668.   /* (n16) */     -1,
  1669.   /* imm   */     -1,
  1670.   /* ACC   */     -1,
  1671.   /* NON   */     -1,
  1672.   /* (n8)  */     -1,
  1673.   /*(n,SP),y*/    -1,
  1674.   /* spec  */     -1);
  1675.   AddNorm("ROR",
  1676.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x66),
  1677.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x6e),
  1678.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x76),
  1679.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x7e),
  1680.   /* ZIY   */     -1,
  1681.   /* IY    */     -1,
  1682.   /* (n,X) */     -1,
  1683.   /* (n),X */     -1,
  1684.   /* (n),Y */     -1,
  1685.   /* (n),Z */     -1,
  1686.   /* (n16) */     -1,
  1687.   /* imm   */     -1,
  1688.   /* ACC   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x6a),
  1689.   /* NON   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x6a),
  1690.   /* (n8)  */     -1,
  1691.   /*(n,SP),y*/    -1,
  1692.   /* spec  */     -1);
  1693.   AddNorm("RRF",
  1694.   /* ZA    */ MkMask(                                                               M_MELPS740                      , 0x82),
  1695.   /* A     */     -1,
  1696.   /* ZIX   */     -1,
  1697.   /* IX    */     -1,
  1698.   /* ZIY   */     -1,
  1699.   /* IY    */     -1,
  1700.   /* (n,X) */     -1,
  1701.   /* (n),X */     -1,
  1702.   /* (n),Y */     -1,
  1703.   /* (n),Z */     -1,
  1704.   /* (n16) */     -1,
  1705.   /* imm   */     -1,
  1706.   /* ACC   */     -1,
  1707.   /* NON   */     -1,
  1708.   /* (n8)  */     -1,
  1709.   /*(n,SP),y*/    -1,
  1710.   /* spec  */     -1);
  1711.   AddNorm("TSB",
  1712.   /* ZA    */ MkMask(                   M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S              | M_HUC6280          , 0x04),
  1713.   /* A     */ MkMask(                   M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S              | M_HUC6280          , 0x0c),
  1714.   /* ZIX   */     -1,
  1715.   /* IX    */     -1,
  1716.   /* ZIY   */     -1,
  1717.   /* IY    */     -1,
  1718.   /* (n,X) */     -1,
  1719.   /* (n),X */     -1,
  1720.   /* (n),Y */     -1,
  1721.   /* (n),Z */     -1,
  1722.   /* (n16) */     -1,
  1723.   /* imm   */     -1,
  1724.   /* ACC   */     -1,
  1725.   /* NON   */     -1,
  1726.   /* (n8)  */     -1,
  1727.   /*(n,SP),y*/    -1,
  1728.   /* spec  */     -1);
  1729.   AddNorm("TRB",
  1730.   /* ZA    */ MkMask(                   M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S              | M_HUC6280          , 0x14),
  1731.   /* A     */ MkMask(                   M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S              | M_HUC6280          , 0x1c),
  1732.   /* ZIX   */     -1,
  1733.   /* IX    */     -1,
  1734.   /* ZIY   */     -1,
  1735.   /* IY    */     -1,
  1736.   /* (n,X) */     -1,
  1737.   /* (n),X */     -1,
  1738.   /* (n),Y */     -1,
  1739.   /* (n),Z */     -1,
  1740.   /* (n16) */     -1,
  1741.   /* imm   */     -1,
  1742.   /* ACC   */     -1,
  1743.   /* NON   */     -1,
  1744.   /* (n8)  */     -1,
  1745.   /*(n,SP),y*/    -1,
  1746.   /* spec  */     -1);
  1747.   AddNorm("INC",
  1748.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xe6),
  1749.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xee),
  1750.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xf6),
  1751.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xfe),
  1752.   /* ZIY   */     -1,
  1753.   /* IY    */     -1,
  1754.   /* (n,X) */     -1,
  1755.   /* (n),X */     -1,
  1756.   /* (n),Y */     -1,
  1757.   /* (n),Z */     -1,
  1758.   /* (n16) */     -1,
  1759.   /* imm   */     -1,
  1760.   /* ACC   */ MkMask(         M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280          , Is740 ? 0x3a : 0x1a),
  1761.   /* NON   */ MkMask(         M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280          , Is740 ? 0x3a : 0x1a),
  1762.   /* (n8)  */     -1,
  1763.   /*(n,SP),y*/    -1,
  1764.   /* spec  */     -1);
  1765.   AddNorm("INW",
  1766.   /* ZA    */ MkMask(                              M_65CE02                                                         , 0xe3),
  1767.   /* A     */     -1,
  1768.   /* ZIX   */     -1,
  1769.   /* IX    */     -1,
  1770.   /* ZIY   */     -1,
  1771.   /* IY    */     -1,
  1772.   /* (n,X) */     -1,
  1773.   /* (n),X */     -1,
  1774.   /* (n),Y */     -1,
  1775.   /* (n),Z */     -1,
  1776.   /* (n16) */     -1,
  1777.   /* imm   */     -1,
  1778.   /* ACC   */     -1,
  1779.   /* NON   */     -1,
  1780.   /* (n8)  */     -1,
  1781.   /*(n,SP),y*/    -1,
  1782.   /* spec  */     -1);
  1783.   AddNorm("DEC",
  1784.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xc6),
  1785.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xce),
  1786.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xd6),
  1787.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xde),
  1788.   /* ZIY   */     -1,
  1789.   /* IY    */     -1,
  1790.   /* (n,X) */     -1,
  1791.   /* (n),X */     -1,
  1792.   /* (n),Y */     -1,
  1793.   /* (n),Z */     -1,
  1794.   /* (n16) */     -1,
  1795.   /* imm   */     -1,
  1796.   /* ACC   */ MkMask(         M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280          , Is740 ? 0x1a : 0x3a),
  1797.   /* NON   */ MkMask(         M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280          , Is740 ? 0x1a : 0x3a),
  1798.   /* (n8)  */     -1,
  1799.   /*(n,SP),y*/    -1,
  1800.   /* spec  */     -1);
  1801.   AddNorm("DEW",
  1802.   /* ZA    */ MkMask(                              M_65CE02                                                         , 0xc3),
  1803.   /* A     */     -1,
  1804.   /* ZIX   */     -1,
  1805.   /* IX    */     -1,
  1806.   /* ZIY   */     -1,
  1807.   /* IY    */     -1,
  1808.   /* (n,X) */     -1,
  1809.   /* (n),X */     -1,
  1810.   /* (n),Y */     -1,
  1811.   /* (n),Z */     -1,
  1812.   /* (n16) */     -1,
  1813.   /* imm   */     -1,
  1814.   /* ACC   */     -1,
  1815.   /* NON   */     -1,
  1816.   /* (n8)  */     -1,
  1817.   /*(n,SP),y*/    -1,
  1818.   /* spec  */     -1);
  1819.   AddNorm("CMP",
  1820.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xc5),
  1821.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xcd),
  1822.   /* ZIX   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xd5),
  1823.   /* IX    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xdd),
  1824.   /* ZIY   */     -1,
  1825.   /* IY    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xd9),
  1826.   /* (n,X) */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0xc1),
  1827.   /* (n),X */ MkMask(                                                     M_65C19                                   , 0xd1),
  1828.   /* (n),Y */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S           | M_MELPS740 | M_HUC6280 | M_6502U, 0xd1),
  1829.   /* (n),Z */ MkMask(                              M_65CE02                                                         , 0xd2),
  1830.   /* (n16) */     -1,
  1831.   /* imm   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xc9),
  1832.   /* ACC   */     -1,
  1833.   /* NON   */     -1,
  1834.   /* (n8)  */ MkMask(         M_65SC02 | M_65C02            | M_W65C02S | M_65C19              | M_HUC6280          , Is65C19 ? 0xc1 : 0xd2),
  1835.   /*(n,SP),y*/    -1,
  1836.   /* spec  */     -1);
  1837.   AddNorm("CPX",
  1838.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xe4),
  1839.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xec),
  1840.   /* ZIX   */     -1,
  1841.   /* IX    */     -1,
  1842.   /* ZIY   */     -1,
  1843.   /* IY    */     -1,
  1844.   /* (n,X) */     -1,
  1845.   /* (n),X */     -1,
  1846.   /* (n),Y */     -1,
  1847.   /* (n),Z */     -1,
  1848.   /* (n16) */     -1,
  1849.   /* imm   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xe0),
  1850.   /* ACC   */     -1,
  1851.   /* NON   */     -1,
  1852.   /* (n8)  */     -1,
  1853.   /*(n,SP),y*/    -1,
  1854.   /* spec  */     -1);
  1855.   AddNorm("CPY",
  1856.   /* ZA    */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xc4),
  1857.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xcc),
  1858.   /* ZIX   */     -1,
  1859.   /* IX    */     -1,
  1860.   /* ZIY   */     -1,
  1861.   /* IY    */     -1,
  1862.   /* (n,X) */     -1,
  1863.   /* (n),X */     -1,
  1864.   /* (n),Y */     -1,
  1865.   /* (n),Z */     -1,
  1866.   /* (n16) */     -1,
  1867.   /* imm   */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xc0),
  1868.   /* ACC   */     -1,
  1869.   /* NON   */     -1,
  1870.   /* (n8)  */     -1,
  1871.   /*(n,SP),y*/    -1,
  1872.   /* spec  */     -1);
  1873.   AddNorm("CPZ",
  1874.   /* ZA    */ MkMask(                              M_65CE02                                                         , 0xd4),
  1875.   /* A     */ MkMask(                              M_65CE02                                                         , 0xdc),
  1876.   /* ZIX   */     -1,
  1877.   /* IX    */     -1,
  1878.   /* ZIY   */     -1,
  1879.   /* IY    */     -1,
  1880.   /* (n,X) */     -1,
  1881.   /* (n),X */     -1,
  1882.   /* (n),Y */     -1,
  1883.   /* (n),Z */     -1,
  1884.   /* (n16) */     -1,
  1885.   /* imm   */ MkMask(                              M_65CE02                                                         , 0xc2),
  1886.   /* ACC   */     -1,
  1887.   /* NON   */     -1,
  1888.   /* (n8)  */     -1,
  1889.   /*(n,SP),y*/    -1,
  1890.   /* spec  */     -1);
  1891.   AddNorm("JMP",
  1892.   /* ZA    */     -1,
  1893.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x4c),
  1894.   /* ZIX   */     -1,
  1895.   /* IX    */     -1,
  1896.   /* ZIY   */     -1,
  1897.   /* IY    */     -1,
  1898.   /* (n,X) */ MkMask(         M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19              | M_HUC6280          , 0x7c),
  1899.   /* (n),X */     -1,
  1900.   /* (n),Y */     -1,
  1901.   /* (n),Z */     -1,
  1902.   /* (n16) */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x6c),
  1903.   /* imm   */     -1,
  1904.   /* ACC   */     -1,
  1905.   /* NON   */     -1,
  1906.   /* (n8)  */ MkMask(                                                               M_MELPS740                      , 0xb2),
  1907.   /*(n,SP),y*/    -1,
  1908.   /* spec  */     -1);
  1909.   AddNorm("JPI",
  1910.   /* ZA    */     -1,
  1911.   /* A     */     -1,
  1912.   /* ZIX   */     -1,
  1913.   /* IX    */     -1,
  1914.   /* ZIY   */     -1,
  1915.   /* IY    */     -1,
  1916.   /* (n,X) */     -1,
  1917.   /* (n),X */     -1,
  1918.   /* (n),Y */     -1,
  1919.   /* (n),Z */     -1,
  1920.   /* (n16) */ MkMask(                                                     M_65C19                                   , 0x0c),
  1921.   /* imm   */     -1,
  1922.   /* ACC   */     -1,
  1923.   /* NON   */     -1,
  1924.   /* (n8)  */     -1,
  1925.   /*(n,SP),y*/    -1,
  1926.   /* spec  */     -1);
  1927.   AddNorm("JSR",
  1928.   /* ZA    */     -1,
  1929.   /* A     */ MkMask(M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x20),
  1930.   /* ZIX   */     -1,
  1931.   /* IX    */     -1,
  1932.   /* ZIY   */     -1,
  1933.   /* IY    */     -1,
  1934.   /* (n,X) */ MkMask(                              M_65CE02                                                         , 0x23),
  1935.   /* (n),X */     -1,
  1936.   /* (n),Y */     -1,
  1937.   /* (n),Z */     -1,
  1938.   /* (n16) */ MkMask(                              M_65CE02                                                         , 0x22),
  1939.   /* imm   */     -1,
  1940.   /* ACC   */     -1,
  1941.   /* NON   */     -1,
  1942.   /* (n8)  */ MkMask(                                                               M_MELPS740                      , 0x02),
  1943.   /*(n,SP),y*/    -1,
  1944.   /* spec  */ MkMask(                                                               M_MELPS740                      , 0x22));
  1945.   AddNorm("RTN",
  1946.   /* ZA    */     -1,
  1947.   /* A     */     -1,
  1948.   /* ZIX   */     -1,
  1949.   /* IX    */     -1,
  1950.   /* ZIY   */     -1,
  1951.   /* IY    */     -1,
  1952.   /* (n,X) */     -1,
  1953.   /* (n),X */     -1,
  1954.   /* (n),Y */     -1,
  1955.   /* (n),Z */     -1,
  1956.   /* (n16) */     -1,
  1957.   /* imm   */ MkMask(                              M_65CE02                                                         , 0x62),
  1958.   /* ACC   */     -1,
  1959.   /* NON   */     -1,
  1960.   /* (n8)  */     -1,
  1961.   /*(n,SP),y*/    -1,
  1962.   /* spec  */     -1);
  1963.   AddNorm("SLO",
  1964.   /* ZA    */ MkMask(                                                                                        M_6502U, 0x07),
  1965.   /* A     */ MkMask(                                                                                        M_6502U, 0x0f),
  1966.   /* ZIX   */ MkMask(                                                                                        M_6502U, 0x17),
  1967.   /* IX    */ MkMask(                                                                                        M_6502U, 0x1f),
  1968.   /* ZIY   */     -1,
  1969.   /* IY    */ MkMask(                                                                                        M_6502U, 0x1b),
  1970.   /* (n,X) */ MkMask(                                                                                        M_6502U, 0x03),
  1971.   /* (n),X */     -1,
  1972.   /* (n),Y */ MkMask(                                                                                        M_6502U, 0x13),
  1973.   /* (n),Z */     -1,
  1974.   /* (n16) */     -1,
  1975.   /* imm   */     -1,
  1976.   /* ACC   */     -1,
  1977.   /* NON   */     -1,
  1978.   /* (n8)  */     -1,
  1979.   /*(n,SP),y*/    -1,
  1980.   /* spec  */     -1);
  1981.   AddNorm("ANC",
  1982.   /* ZA    */     -1,
  1983.   /* A     */     -1,
  1984.   /* ZIX   */     -1,
  1985.   /* IX    */     -1,
  1986.   /* ZIY   */     -1,
  1987.   /* IY    */     -1,
  1988.   /* (n,X) */     -1,
  1989.   /* (n),X */     -1,
  1990.   /* (n),Y */     -1,
  1991.   /* (n),Z */     -1,
  1992.   /* (n16) */     -1,
  1993.   /* imm   */ MkMask(                                                                                        M_6502U, 0x0b),
  1994.   /* ACC   */     -1,
  1995.   /* NON   */     -1,
  1996.   /* (n8)  */     -1,
  1997.   /*(n,SP),y*/    -1,
  1998.   /* spec  */     -1);
  1999.   AddNorm("RLA",
  2000.   /* ZA    */ MkMask(                                                                                        M_6502U, 0x27),
  2001.   /* A     */ MkMask(                                                                                        M_6502U, 0x2f),
  2002.   /* ZIX   */ MkMask(                                                                                        M_6502U, 0x37),
  2003.   /* IX    */ MkMask(                                                                                        M_6502U, 0x3f),
  2004.   /* ZIY   */     -1,
  2005.   /* IY    */ MkMask(                                                                                        M_6502U, 0x3b),
  2006.   /* (n,X) */ MkMask(                                                                                        M_6502U, 0x23),
  2007.   /* (n),X */     -1,
  2008.   /* (n),Y */ MkMask(                                                                                        M_6502U, 0x33),
  2009.   /* (n),Z */     -1,
  2010.   /* (n16) */     -1,
  2011.   /* imm   */     -1,
  2012.   /* ACC   */     -1,
  2013.   /* NON   */     -1,
  2014.   /* (n8)  */     -1,
  2015.   /*(n,SP),y*/    -1,
  2016.   /* spec  */     -1);
  2017.   AddNorm("SRE",
  2018.   /* ZA    */ MkMask(                                                                                        M_6502U, 0x47),
  2019.   /* A     */ MkMask(                                                                                        M_6502U, 0x4f),
  2020.   /* ZIX   */ MkMask(                                                                                        M_6502U, 0x57),
  2021.   /* IX    */ MkMask(                                                                                        M_6502U, 0x5f),
  2022.   /* ZIY   */     -1,
  2023.   /* IY    */ MkMask(                                                                                        M_6502U, 0x5b),
  2024.   /* (n,X) */ MkMask(                                                                                        M_6502U, 0x43),
  2025.   /* (n),X */     -1,
  2026.   /* (n),Y */ MkMask(                                                                                        M_6502U, 0x53),
  2027.   /* (n),Z */     -1,
  2028.   /* (n16) */     -1,
  2029.   /* imm   */     -1,
  2030.   /* ACC   */     -1,
  2031.   /* NON   */     -1,
  2032.   /* (n8)  */     -1,
  2033.   /*(n,SP),y*/    -1,
  2034.   /* spec  */     -1);
  2035.   AddNorm("RRA",
  2036.   /* ZA    */ MkMask(                                                                                        M_6502U, 0x67),
  2037.   /* A     */ MkMask(                                                                                        M_6502U, 0x6f),
  2038.   /* ZIX   */ MkMask(                                                                                        M_6502U, 0x77),
  2039.   /* IX    */ MkMask(                                                                                        M_6502U, 0x7f),
  2040.   /* ZIY   */     -1,
  2041.   /* IY    */ MkMask(                                                                                        M_6502U, 0x7b),
  2042.   /* (n,X) */ MkMask(                                                                                        M_6502U, 0x63),
  2043.   /* (n),X */     -1,
  2044.   /* (n),Y */ MkMask(                                                                                        M_6502U, 0x73),
  2045.   /* (n),Z */     -1,
  2046.   /* (n16) */     -1,
  2047.   /* imm   */     -1,
  2048.   /* ACC   */     -1,
  2049.   /* NON   */     -1,
  2050.   /* (n8)  */     -1,
  2051.   /*(n,SP),y*/    -1,
  2052.   /* spec  */    -1);
  2053.   AddNorm("ARR",
  2054.   /* ZA    */     -1,
  2055.   /* A     */     -1,
  2056.   /* ZIX   */     -1,
  2057.   /* IX    */     -1,
  2058.   /* ZIY   */     -1,
  2059.   /* IY    */     -1,
  2060.   /* (n,X) */     -1,
  2061.   /* (n),X */     -1,
  2062.   /* (n),Y */     -1,
  2063.   /* (n),Z */     -1,
  2064.   /* (n16) */     -1,
  2065.   /* imm   */ MkMask(                                                                                        M_6502U, 0x6b),
  2066.   /* ACC   */     -1,
  2067.   /* NON   */     -1,
  2068.   /* (n8)  */     -1,
  2069.   /*(n,SP),y*/    -1,
  2070.   /* spec  */     -1);
  2071.   AddNorm("SAX",
  2072.   /* ZA    */ MkMask(                                                                                        M_6502U, 0x87),
  2073.   /* A     */ MkMask(                                                                                        M_6502U, 0x8f),
  2074.   /* ZIX   */     -1,
  2075.   /* IX    */     -1,
  2076.   /* ZIY   */ MkMask(                                                                                        M_6502U, 0x97),
  2077.   /* IY    */     -1,
  2078.   /* (n,X) */ MkMask(                                                                                        M_6502U, 0x83),
  2079.   /* (n),X */     -1,
  2080.   /* (n),Y */     -1,
  2081.   /* (n),Z */     -1,
  2082.   /* (n16) */     -1,
  2083.   /* imm   */     -1,
  2084.   /* ACC   */     -1,
  2085.   /* NON   */ MkMask(                                                                            M_HUC6280          , 0x22),
  2086.   /* (n8)  */     -1,
  2087.   /*(n,SP),y*/    -1,
  2088.   /* spec  */     -1);
  2089.   AddNorm("ANE",
  2090.   /* ZA    */     -1,
  2091.   /* A     */     -1,
  2092.   /* ZIX   */     -1,
  2093.   /* IX    */     -1,
  2094.   /* ZIY   */     -1,
  2095.   /* IY    */     -1,
  2096.   /* (n,X) */     -1,
  2097.   /* (n),X */     -1,
  2098.   /* (n),Y */     -1,
  2099.   /* (n),Z */     -1,
  2100.   /* (n16) */     -1,
  2101.   /* imm   */ MkMask(                                                                                        M_6502U, 0x8b),
  2102.   /* ACC   */     -1,
  2103.   /* NON   */     -1,
  2104.   /* (n8)  */     -1,
  2105.   /*(n,SP),y*/    -1,
  2106.   /* spec  */     -1);
  2107.   AddNorm("SHA",
  2108.   /* ZA    */     -1,
  2109.   /* A     */     -1,
  2110.   /* ZIX   */     -1,
  2111.   /* IX    */ MkMask(                                                                                        M_6502U, 0x93),
  2112.   /* ZIY   */     -1,
  2113.   /* IY    */ MkMask(                                                                                        M_6502U, 0x9f),
  2114.   /* (n,X) */     -1,
  2115.   /* (n),X */     -1,
  2116.   /* (n),Y */     -1,
  2117.   /* (n),Z */     -1,
  2118.   /* (n16) */     -1,
  2119.   /* imm   */     -1,
  2120.   /* ACC   */     -1,
  2121.   /* NON   */     -1,
  2122.   /* (n8)  */     -1,
  2123.   /*(n,SP),y*/    -1,
  2124.   /* spec  */     -1);
  2125.   AddNorm("SHS",
  2126.   /* ZA    */     -1,
  2127.   /* A     */     -1,
  2128.   /* ZIX   */     -1,
  2129.   /* IX    */     -1,
  2130.   /* ZIY   */     -1,
  2131.   /* IY    */ MkMask(                                                                                        M_6502U, 0x9b),
  2132.   /* (n,X) */     -1,
  2133.   /* (n),X */     -1,
  2134.   /* (n),Y */     -1,
  2135.   /* (n),Z */     -1,
  2136.   /* (n16) */     -1,
  2137.   /* imm   */     -1,
  2138.   /* ACC   */     -1,
  2139.   /* NON   */     -1,
  2140.   /* (n8)  */     -1,
  2141.   /*(n,SP),y*/    -1,
  2142.   /* spec  */     -1);
  2143.   AddNorm("SHY",
  2144.   /* ZA    */     -1,
  2145.   /* A     */     -1,
  2146.   /* ZIX   */     -1,
  2147.   /* IX    */     -1,
  2148.   /* ZIY   */     -1,
  2149.   /* IY    */ MkMask(                                                                                        M_6502U, 0x9c),
  2150.   /* (n,X) */     -1,
  2151.   /* (n),X */     -1,
  2152.   /* (n),Y */     -1,
  2153.   /* (n),Z */     -1,
  2154.   /* (n16) */     -1,
  2155.   /* imm   */     -1,
  2156.   /* ACC   */     -1,
  2157.   /* NON   */     -1,
  2158.   /* (n8)  */     -1,
  2159.   /*(n,SP),y*/    -1,
  2160.   /* spec  */     -1);
  2161.   AddNorm("SHX",
  2162.   /* ZA    */     -1,
  2163.   /* A     */     -1,
  2164.   /* ZIX   */     -1,
  2165.   /* IX    */ MkMask(                                                                                        M_6502U, 0x9e),
  2166.   /* ZIY   */     -1,
  2167.   /* IY    */     -1,
  2168.   /* (n,X) */     -1,
  2169.   /* (n),X */     -1,
  2170.   /* (n),Y */     -1,
  2171.   /* (n),Z */     -1,
  2172.   /* (n16) */     -1,
  2173.   /* imm   */     -1,
  2174.   /* ACC   */     -1,
  2175.   /* NON   */     -1,
  2176.   /* (n8)  */     -1,
  2177.   /*(n,SP),y*/    -1,
  2178.   /* spec  */     -1);
  2179.   AddNorm("LAX",
  2180.   /* ZA    */ MkMask(                                                                                        M_6502U, 0xa7),
  2181.   /* A     */ MkMask(                                                                                        M_6502U, 0xaf),
  2182.   /* ZIX   */     -1,
  2183.   /* IX    */     -1,
  2184.   /* ZIY   */ MkMask(                                                                                        M_6502U, 0xb7),
  2185.   /* IY    */ MkMask(                                                                                        M_6502U, 0xbf),
  2186.   /* (n,X) */ MkMask(                                                                                        M_6502U, 0xa3),
  2187.   /* (n),X */     -1,
  2188.   /* (n),Y */ MkMask(                                                                                        M_6502U, 0xb3),
  2189.   /* (n),Z */     -1,
  2190.   /* (n16) */     -1,
  2191.   /* imm   */     -1,
  2192.   /* ACC   */     -1,
  2193.   /* NON   */     -1,
  2194.   /* (n8)  */     -1,
  2195.   /*(n,SP),y*/    -1,
  2196.   /* spec  */     -1);
  2197.   AddNorm("LXA",
  2198.   /* ZA    */     -1,
  2199.   /* A     */     -1,
  2200.   /* ZIX   */     -1,
  2201.   /* IX    */     -1,
  2202.   /* ZIY   */     -1,
  2203.   /* IY    */     -1,
  2204.   /* (n,X) */     -1,
  2205.   /* (n),X */     -1,
  2206.   /* (n),Y */     -1,
  2207.   /* (n),Z */     -1,
  2208.   /* (n16) */     -1,
  2209.   /* imm   */ MkMask(                                                                                        M_6502U, 0xab),
  2210.   /* ACC   */     -1,
  2211.   /* NON   */     -1,
  2212.   /* (n8)  */     -1,
  2213.   /*(n,SP),y*/    -1,
  2214.   /* spec  */     -1);
  2215.   AddNorm("LAE",
  2216.   /* ZA    */     -1,
  2217.   /* A     */     -1,
  2218.   /* ZIX   */     -1,
  2219.   /* IX    */     -1,
  2220.   /* ZIY   */     -1,
  2221.   /* IY    */ MkMask(                                                                                        M_6502U, 0xbb),
  2222.   /* (n,X) */     -1,
  2223.   /* (n),X */     -1,
  2224.   /* (n),Y */     -1,
  2225.   /* (n),Z */     -1,
  2226.   /* (n16) */     -1,
  2227.   /* imm   */     -1,
  2228.   /* ACC   */     -1,
  2229.   /* NON   */     -1,
  2230.   /* (n8)  */     -1,
  2231.   /*(n,SP),y*/    -1,
  2232.   /* spec  */     -1);
  2233.   AddNorm("DCP",
  2234.   /* ZA    */ MkMask(                                                                                        M_6502U, 0xc7),
  2235.   /* A     */ MkMask(                                                                                        M_6502U, 0xcf),
  2236.   /* ZIX   */ MkMask(                                                                                        M_6502U, 0xd7),
  2237.   /* IX    */ MkMask(                                                                                        M_6502U, 0xdf),
  2238.   /* ZIY   */     -1,
  2239.   /* IY    */ MkMask(                                                                                        M_6502U, 0xdb),
  2240.   /* (n,X) */ MkMask(                                                                                        M_6502U, 0xc3),
  2241.   /* (n),X */     -1,
  2242.   /* (n),Y */ MkMask(                                                                                        M_6502U, 0xd3),
  2243.   /* (n),Z */     -1,
  2244.   /* (n16) */     -1,
  2245.   /* imm   */     -1,
  2246.   /* ACC   */     -1,
  2247.   /* NON   */     -1,
  2248.   /* (n8)  */     -1,
  2249.   /*(n,SP),y*/    -1,
  2250.   /* spec  */     -1);
  2251.   AddNorm("SBX",
  2252.   /* ZA    */     -1,
  2253.   /* A     */     -1,
  2254.   /* ZIX   */     -1,
  2255.   /* IX    */     -1,
  2256.   /* ZIY   */     -1,
  2257.   /* IY    */     -1,
  2258.   /* (n,X) */     -1,
  2259.   /* (n),X */     -1,
  2260.   /* (n),Y */     -1,
  2261.   /* (n),Z */     -1,
  2262.   /* (n16) */     -1,
  2263.   /* imm   */ MkMask(                                                                                        M_6502U, 0xcb),
  2264.   /* ACC   */     -1,
  2265.   /* NON   */     -1,
  2266.   /* (n8)  */     -1,
  2267.   /*(n,SP),y*/    -1,
  2268.   /* spec  */     -1);
  2269.   AddNorm("ISB",
  2270.   /* ZA    */ MkMask(                                                                                        M_6502U, 0xe7),
  2271.   /* A     */ MkMask(                                                                                        M_6502U, 0xef),
  2272.   /* ZIX   */ MkMask(                                                                                        M_6502U, 0xf7),
  2273.   /* IX    */ MkMask(                                                                                        M_6502U, 0xff),
  2274.   /* ZIY   */     -1,
  2275.   /* IY    */ MkMask(                                                                                        M_6502U, 0xfb),
  2276.   /* (n,X) */ MkMask(                                                                                        M_6502U, 0xe3),
  2277.   /* (n),X */     -1,
  2278.   /* (n),Y */ MkMask(                                                                                        M_6502U, 0xf3),
  2279.   /* (n),Z */     -1,
  2280.   /* (n16) */     -1,
  2281.   /* imm   */     -1,
  2282.   /* ACC   */     -1,
  2283.   /* NON   */     -1,
  2284.   /* (n8)  */     -1,
  2285.   /*(n,SP),y*/    -1,
  2286.   /* spec  */     -1);
  2287.   AddNorm("EXC",
  2288.   /* ZA    */     -1,
  2289.   /* A     */     -1,
  2290.   /* ZIX   */ MkMask(                                                     M_65C19                                   , 0xd4),
  2291.   /* IX    */     -1,
  2292.   /* ZIY   */     -1,
  2293.   /* IY    */     -1,
  2294.   /* (n,X) */     -1,
  2295.   /* (n),X */     -1,
  2296.   /* (n),Y */     -1,
  2297.   /* (n),Z */     -1,
  2298.   /* (n16) */     -1,
  2299.   /* imm   */     -1,
  2300.   /* ACC   */     -1,
  2301.   /* NON   */     -1,
  2302.   /* (n8)  */     -1,
  2303.   /*(n,SP),y*/    -1,
  2304.   /* spec  */     -1);
  2305.   AddNorm("TAM",
  2306.   /* ZA    */     -1,
  2307.   /* A     */     -1,
  2308.   /* ZIX   */     -1,
  2309.   /* IX    */     -1,
  2310.   /* ZIY   */     -1,
  2311.   /* IY    */     -1,
  2312.   /* (n,X) */     -1,
  2313.   /* (n),X */     -1,
  2314.   /* (n),Y */     -1,
  2315.   /* (n),Z */     -1,
  2316.   /* (n16) */     -1,
  2317.   /* imm   */ MkMask(                                                                            M_HUC6280          , 0x53),
  2318.   /* ACC   */     -1,
  2319.   /* NON   */     -1,
  2320.   /* (n8)  */     -1,
  2321.   /*(n,SP),y*/    -1,
  2322.   /* spec  */     -1);
  2323.   AddNorm("TMA",
  2324.   /* ZA    */     -1,
  2325.   /* A     */     -1,
  2326.   /* ZIX   */     -1,
  2327.   /* IX    */     -1,
  2328.   /* ZIY   */     -1,
  2329.   /* IY    */     -1,
  2330.   /* (n,X) */     -1,
  2331.   /* (n),X */     -1,
  2332.   /* (n),Y */     -1,
  2333.   /* (n),Z */     -1,
  2334.   /* (n16) */     -1,
  2335.   /* imm   */ MkMask(                                                                            M_HUC6280          , 0x43),
  2336.   /* ACC   */     -1,
  2337.   /* NON   */     -1,
  2338.   /* (n8)  */     -1,
  2339.   /*(n,SP),y*/    -1,
  2340.   /* spec  */     -1);
  2341.   AddNorm("PHW",
  2342.   /* ZA    */     -1,
  2343.   /* A     */ MkMask(                              M_65CE02                                                         , 0xfc),
  2344.   /* ZIX   */     -1,
  2345.   /* IX    */     -1,
  2346.   /* ZIY   */     -1,
  2347.   /* IY    */     -1,
  2348.   /* (n,X) */     -1,
  2349.   /* (n),X */     -1,
  2350.   /* (n),Y */     -1,
  2351.   /* (n),Z */     -1,
  2352.   /* (n16) */     -1,
  2353.   /* imm   */ MkMask(                              M_65CE02                                                         , 0xf4),
  2354.   /* ACC   */     -1,
  2355.   /* NON   */ MkMask(                                                     M_65C19                                   , 0x23),
  2356.   /* (n8)  */     -1,
  2357.   /*(n,SP),y*/    -1,
  2358.   /* spec  */     -1);
  2359.  
  2360.   InstrZ = 0;
  2361.   AddCond("BEQ", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xf0, 0xf3);
  2362.   AddCond("BNE", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xd0, 0xd3);
  2363.   AddCond("BPL", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x10, 0x13);
  2364.   AddCond("BMI", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x30, 0x33);
  2365.   AddCond("BCC", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x90, 0x93);
  2366.   AddCond("BCS", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0xb0, 0xb3);
  2367.   AddCond("BVC", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x50, 0x53);
  2368.   AddCond("BVS", M_6502 | M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280 | M_6502U, 0x70, 0x73);
  2369.   AddCond("BRA",          M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280          , 0x80, 0x83);
  2370.   AddCond("BRU",          M_65SC02 | M_65C02 | M_65CE02 | M_W65C02S | M_65C19 | M_MELPS740 | M_HUC6280          , 0x80, 0x83);
  2371.   AddCond("BSR",                               M_65CE02                                    | M_HUC6280          ,
  2372.           (MomCPU == CPUHUC6280) ? 0x44 : 0x00,
  2373.           (MomCPU == CPU65CE02) ? 0x63 : 0x00);
  2374.  
  2375.   init_moto8_pseudo(InstTable, e_moto_8_le | e_moto_8_db | e_moto_8_dw | e_moto_8_ds | e_moto_8_ddb | e_moto_8_dcm);
  2376. }
  2377.  
  2378. static void DeinitFields(void)
  2379. {
  2380.   DestroyInstTable(InstTable);
  2381.  
  2382.   order_array_free(FixedOrders);
  2383.   order_array_free(NormOrders);
  2384.   order_array_free(CondOrders);
  2385. }
  2386.  
  2387. /*---------------------------------------------------------------------------*/
  2388.  
  2389. static void MakeCode_65(void)
  2390. {
  2391.   CodeLen = 0;
  2392.   DontPrint = False;
  2393.  
  2394.   This_CLI_SEI_Flag = (Memo("CLI") || Memo("SEI"));
  2395.   This_ADC_SBC_Flag = (Memo("ADC") || Memo("SBC"));
  2396.  
  2397.   /* zu ignorierendes */
  2398.  
  2399.   if (Memo(""))
  2400.     return;
  2401.  
  2402.   /* Pseudoanweisungen */
  2403.  
  2404.   if (!LookupInstTable(InstTable, OpPart.str.p_str))
  2405.     WrStrErrorPos(ErrNum_UnknownInstruction, &OpPart);
  2406.  
  2407.   Last_CLI_SEI_Flag = This_CLI_SEI_Flag;
  2408.   Last_ADC_SBC_Flag = This_ADC_SBC_Flag;
  2409. }
  2410.  
  2411. static void InitCode_65(void)
  2412. {
  2413.   int z;
  2414.  
  2415.   Last_CLI_SEI_Flag = False;
  2416.   Last_ADC_SBC_Flag = False;
  2417.   for (z = 0; z < 8; z++)
  2418.     MPR[z] = z;
  2419. }
  2420.  
  2421. static Boolean IsDef_65(void)
  2422. {
  2423.   return False;
  2424. }
  2425.  
  2426. static void SwitchFrom_65(void)
  2427. {
  2428.   DeinitFields();
  2429. }
  2430.  
  2431. static Boolean ChkZeroArgs(void)
  2432. {
  2433.   return (0 == ArgCnt);
  2434. }
  2435.  
  2436. static void SwitchTo_65(void)
  2437. {
  2438.   TurnWords = False;
  2439.   SetIntConstMode(eIntConstModeMoto);
  2440.  
  2441.   PCSymbol = "*";
  2442.   HeaderID = 0x11;
  2443.   NOPCode = 0xea;
  2444.   DivideChars = ",";
  2445.   HasAttrs = False;
  2446.  
  2447.   ValidSegs = 1 << SegCode;
  2448.   Grans[SegCode] = 1; ListGrans[SegCode] = 1; SegInits[SegCode] = 0;
  2449.   SegLimits[SegCode] = (MomCPU == CPUHUC6280) ? 0x1fffff : 0xffff;
  2450.  
  2451.   if (MomCPU == CPUM740)
  2452.   {
  2453.     static ASSUMERec ASSUME740s[] =
  2454.     {
  2455.       { "SP", &SpecPage, 0, 0xff, -1, NULL }
  2456.     };
  2457.  
  2458.     pASSUMERecs = ASSUME740s;
  2459.     ASSUMERecCnt = (sizeof(ASSUME740s) / sizeof(*ASSUME740s));
  2460.     SetIsOccupiedFnc = ChkZeroArgs;
  2461.   }
  2462.   else if (MomCPU == CPUHUC6280)
  2463.   {
  2464.     static ASSUMERec ASSUME6280s[] =
  2465.     {
  2466.       { "MPR0", MPR + 0, 0, 0xff, -1, NULL },
  2467.       { "MPR1", MPR + 1, 0, 0xff, -1, NULL },
  2468.       { "MPR2", MPR + 2, 0, 0xff, -1, NULL },
  2469.       { "MPR3", MPR + 3, 0, 0xff, -1, NULL },
  2470.       { "MPR4", MPR + 4, 0, 0xff, -1, NULL },
  2471.       { "MPR5", MPR + 5, 0, 0xff, -1, NULL },
  2472.       { "MPR6", MPR + 6, 0, 0xff, -1, NULL },
  2473.       { "MPR7", MPR + 7, 0, 0xff, -1, NULL },
  2474.     };
  2475.  
  2476.     pASSUMERecs = ASSUME6280s;
  2477.     ASSUMERecCnt = (sizeof(ASSUME6280s) / sizeof(*ASSUME6280s));
  2478.     SetIsOccupiedFnc = ChkZeroArgs;
  2479.   }
  2480.   else if (MomCPU == CPU65CE02)
  2481.   {
  2482.     static ASSUMERec ASSUME65CE02s[] =
  2483.     {
  2484.       { "B", &RegB, 0, 0xff, 0, NULL }
  2485.     };
  2486.  
  2487.     pASSUMERecs = ASSUME65CE02s;
  2488.     ASSUMERecCnt = (sizeof(ASSUME65CE02s) / sizeof(*ASSUME65CE02s));
  2489.   }
  2490.   else
  2491.     SetIsOccupiedFnc = NULL;
  2492.  
  2493.   MakeCode = MakeCode_65;
  2494.   IsDef = IsDef_65;
  2495.   SwitchFrom = SwitchFrom_65;
  2496.   InitFields();
  2497. }
  2498.  
  2499. void code65_init(void)
  2500. {
  2501.   CPU6502    = AddCPU("6502"     , SwitchTo_65);
  2502.   CPU65SC02  = AddCPU("65SC02"   , SwitchTo_65);
  2503.   CPU65C02   = AddCPU("65C02"    , SwitchTo_65);
  2504.   CPU65CE02  = AddCPU("65CE02"   , SwitchTo_65);
  2505.   CPUW65C02S = AddCPU("W65C02S"  , SwitchTo_65);
  2506.   CPU65C19   = AddCPU("65C19"    , SwitchTo_65);
  2507.   CPUM740    = AddCPU("MELPS740" , SwitchTo_65);
  2508.   CPUHUC6280 = AddCPU("HUC6280"  , SwitchTo_65);
  2509.   CPU6502U   = AddCPU("6502UNDOC", SwitchTo_65);
  2510.  
  2511.   AddInitPassProc(InitCode_65);
  2512. }
  2513.