예제 #1
0
        void FixBitInstructions()
        {
            foreach (Statement st in statements)
            {
                if (st is ExecutableStatement)
                {
                    ExecutableStatement ex = st as ExecutableStatement;

                    if (ex.OpCode == "BIT" || ex.OpCode == "RES" || ex.OpCode == "SET")
                    {
                        byte b = ex.LeftOperand.GetHexText().ToByte();

                        /*
                         * b = (byte)(b << 3);
                         *
                         * if (ex.OpCode == "BIT")
                         * {//and | 01000110
                         *  b = (byte)(b | 01000110);
                         * }
                         * else if (ex.OpCode == "RES")
                         * {//left shit b 3 and | 10000110
                         *  b = (byte)(b | 10000110);
                         * }
                         * else if (ex.OpCode == "SET")
                         * {//left shit b 3 and | 11000110
                         *  b = (byte)(b | 11000110);
                         * }
                         */

                        if (ex.GetModeText() == "IMMEDIATE,IX_INDEXED_PLUS_OFFSET" ||
                            ex.GetModeText() == "IMMEDIATE,IY_INDEXED_PLUS_OFFSET")
                        {//left shit b 3 or byte
                            //now flip the operands because they
                            //get written out in reverse order
                            ex.LeftOperand.Value  = ex.RightOperand.Value;
                            ex.RightOperand.Value = string.Format("{0:2X}", b);
                        }
                    }
                }
            }
        }
 /// <summary>
 /// makes sure the operands are supported
 /// </summary>
 void ValidateOperands()
 {
     for (int i = 0; i < statements.Count; i++)
     {
         Statement s = statements[i];
         if (s is ExecutableStatement)
         {
             ExecutableStatement ex = s as ExecutableStatement;
             string mode            = ex.GetModeText();
             if (!LangDef.LangDef.SupportsMode(ex.OpCode, mode))
             {//
                 throw new Exception(
                           String.Format(
                               "Error on line {0}:{3}  {1} does not support mode {2}",
                               i,
                               ex.OpCode,
                               mode,
                               ex.Text)
                           );
             }
         }
     }
 }