Exemple #1
0
        public void K_MtoX(int n)
        {
            //_rst.storeBx();
            _rst.push();
            if (n < 0 || n >= REGISTER_MEMORY_NVALS)
            {
                return;
            }
            UniversalValue uv = _registerAddress(n);

            if (uv.isEmpty())
            {
                _rst.X.fromInt(0);
                return;
            }
            Int64 index = uv.toInt();

            _autoIncrement(n, uv);
            if (index < 0 || index >= Extended_Memory.EXTENDED_MEMORY_NVALS)
            {
                _rst.X.fromInt(0);
                return;
            }
            index = index % 10000;
            _emem.setCounter((uint)index);
            _emem.toUV(_rst.X);
            if (_rst.X.isEmpty())
            {
                _rst.X.fromInt(0);
            }
        }
Exemple #2
0
        public override void execute(MK52_Host components, string command)
        {
            UniversalValue X = _Stack(components).X;

            _ExtMem(components).swapWithUV(X);
            if (X.isEmpty())
            {
                X.fromInt(0);
            }
        }
Exemple #3
0
        public override void execute(MK52_Host components, string command)
        {
            Register_Memory rm   = _RegMem(components);
            UniversalValue  ptrE = _ExtMem(components).getCurrentLine();
            UniversalValue  ptrR = rm._registerAddress(rm.registerByName(command));

            if (ptrE.isEmpty())
            {
                ptrR.fromInt(0);
                return;
            }
            ptrR.fromLocation(ptrE);
        }
Exemple #4
0
        public override void execute(MK52_Host components, string command)
        {
            RPN_Stack s = _Stack(components);

            s.storeBx();
            s.push();
            UniversalValue X = s.X;

            _ExtMem(components).toUV(X);
            if (X.isEmpty())
            {
                X.fromInt(0);
            }
        }
Exemple #5
0
        public void fromUV(UniversalValue uv)
        {
            bool exists = _buffer.ContainsKey(_counter);

            if (uv.isEmpty() && exists)
            {
                _buffer.Remove(_counter);
                return;
            }
            if (!exists)
            {
                _buffer.Add(_counter, new UniversalValue());
            }
            _buffer[_counter].fromLocation(uv);
        }
 private bool _writeData()
 {
     if (_sd.println_P("#"))
     {
         return(true);
     }
     if (_sd.println_P("# MK-52 data"))
     {
         return(true);
     }
     if (_sd.println_P("#"))
     {
         return(true);
     }
     if (_sd.print_P("MC="))
     {
         return(true);
     }
     if (_sd.println_P(extMem.getCounter().ToString("0000")))
     {
         return(true);
     }
     for (uint i = 0; i < Extended_Memory.EXTENDED_MEMORY_NVALS; i++)
     {
         UniversalValue ptr = extMem.getLine(i);
         if (ptr.isEmpty())
         {
             continue;
         }
         if (_sd.print_P("M"))
         {
             return(true);
         }
         if (_sd.print_P(i.ToString("0000")))
         {
             return(true);
         }
         if (_sd.print_P(": "))
         {
             return(true);
         }
         if (_sd.println_P(ptr.toString()))
         {
             return(true);
         }
     }
     return(false);
 }
Exemple #7
0
        public void K_XtoM(int n)
        {
            if (n < 0 || n >= REGISTER_MEMORY_NVALS)
            {
                return;
            }
            UniversalValue uv = _registerAddress(n);

            if (uv.isEmpty())
            {
                return;
            }
            Int64 index = uv.toInt();

            _autoIncrement(n, uv);
            A_XtoM(index);
        }
 private bool _writeRegisters()
 {
     if (_sd.println_P("#"))
     {
         return(true);
     }
     if (_sd.println_P("# MK-52 registers"))
     {
         return(true);
     }
     if (_sd.println_P("#"))
     {
         return(true);
     }
     for (byte i = 0; i < Register_Memory.REGISTER_MEMORY_NVALS; i++)
     {
         UniversalValue uv = regMem._registerAddress(i);
         if (uv.isEmpty())
         {
             continue;
         }
         if (_sd.print("R"))
         {
             return(true);
         }
         if (_sd.print(i.ToString("00")))
         {
             return(true);
         }
         if (_sd.print("="))
         {
             return(true);
         }
         if (_sd.println(uv.toString()))
         {
             return(true);
         }
     }
     return(false);
 }
Exemple #9
0
        public override void execute(MK52_Host components, string command)
        {
            RPN_Stack s = _dealWithClergy2(components);

            if (s == null)
            {
                return;
            }
            s.pop(0);
            UniversalValue X_ = s.X;
            UniversalValue Y_ = s.Bx;

            if (Y_.isEmpty())
            {
                X_.fromInt(1);
                return;
            }
            double result = 1.0;
            double x      = X_.toReal();

            if (Y_.isReal())
            {
                result = Math.Pow(x, Y_.toReal());
                X_.fromReal(result);
                return;
            }
            Int64 p  = Y_.toInt();
            Int64 p2 = p;

            if (x == 0.0 && p == 0) // special case
            {
                X_.fromInt(1);
                return;
            }
            if (x == 0.0 && p < 0)
            {
                X_.fromReal(double.PositiveInfinity);
                return;
            }
            while (p > 0)
            {
                result *= x;
                p--;
            }
            x = 1.0 / x;
            while (p < 0)
            {
                result *= x;
                p++;
            }
            if (p2 <= 0 || X_.isReal() || Math.Abs(result) > UniversalValue.HUGE_POSITIVE_AS_REAL)
            {
                X_.fromReal(result);
                return;
            }
            // Try to keep as integer
            Int64 result2 = X_.toInt();
            Int64 mul     = result2;

            while (p2 > 1)
            {
                result2 *= mul;
                p2--;
            }
            X_.fromInt(result2);
        }