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