Example #1
0
 public PacketClass(OPCODES opcode)
 {
     Array.Resize(ref Data, 6);
     Data[0] = 0;
     Data[1] = 4;
     Data[2] = (byte)(Conversions.ToShort(opcode) % 256);
     Data[3] = (byte)(Conversions.ToShort(opcode) / 256);
     Data[4] = 0;
     Data[5] = 0;
 }
        private ushort getInstruction(OPCODES opcode, VALUES b, VALUES a)
        {
            int word = (ushort)opcode;
            word += (ushort)b << 5;
            word += (ushort)a << 10;

            return (ushort) word;
        }
Example #3
0
 public int DO_OP(OPCODES op)
 {
     switch(op) {
         case OPCODES.NOP:
             PC++;
             break;
         case OPCODES.EXT:
             External();
             PC++;
             break;
         case OPCODES.LIT:
             PC++;
             dataStack.Push(memory[PC]);
             PC++;
             break;
         case OPCODES.LT:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             dataStack.Push(SOS < TOS ? -1 : 0);
             PC++;
             break;
         case OPCODES.EQ:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             dataStack.Push(TOS == SOS ? -1 : 0);
             PC++;
             break;
         case OPCODES.GT:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             dataStack.Push(SOS > TOS ? -1 : 0);
             PC++;
             break;
         case OPCODES.AND:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             dataStack.Push(TOS & SOS);
             PC++;
             break;
         case OPCODES.OR:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             dataStack.Push(TOS | SOS);
             PC++;
             break;
         case OPCODES.XOR:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             dataStack.Push(TOS ^ SOS);
             PC++;
             break;
         case OPCODES.NOT:
             TOS = dataStack.Pop();
             dataStack.Push(~TOS);
             PC++;
             break;
         case OPCODES.ADD:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             dataStack.Push(TOS + SOS);
             PC++;
             break;
         case OPCODES.SUB:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             dataStack.Push(SOS - TOS);
             PC++;
             break;
         case OPCODES.MULT:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             dataStack.Push(TOS * SOS);
             PC++;
             break;
         case OPCODES.DIVMOD:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             dataStack.Push(SOS / TOS);
             dataStack.Push(SOS % TOS);
             PC++;
             break;
         case OPCODES.SHL:
             TOS = dataStack.Pop();
             dataStack.Push(TOS << 1);
             PC++;
             break;
         case OPCODES.SHR:
             TOS = dataStack.Pop();
             dataStack.Push(TOS >> 1);
             PC++;
             break;
         case OPCODES.LOAD:
             TOS = dataStack.Pop();
             dataStack.Push(memory[TOS]);
             PC++;
             break;
         case OPCODES.STORE:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             memory[TOS] = SOS;
             PC++;
             break;
         case OPCODES.PUSH:
             returnStack.Push(dataStack.Pop());
             PC++;
             break;
         case OPCODES.POP:
             dataStack.Push(returnStack.Pop());
             PC++;
             break;
         case OPCODES.DROP:
             dataStack.Pop();
             PC++;
             break;
         case OPCODES.DUP:
             TOS = dataStack.Pop();
             dataStack.Push(TOS);
             dataStack.Push(TOS);
             PC++;
             break;
         case OPCODES.SWAP:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             dataStack.Push(TOS);
             dataStack.Push(SOS);
             PC++;
             break;
         case OPCODES.OVER:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             dataStack.Push(SOS);
             dataStack.Push(TOS);
             dataStack.Push(SOS);
             PC++;
             break;
         case OPCODES.ROT:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             A = dataStack.Pop();
             dataStack.Push(SOS);
             dataStack.Push(TOS);
             dataStack.Push(A);
             PC++;
             break;
         case OPCODES.HLT:
             PC = -1;
             break;
         case OPCODES.IF:
             TOS = dataStack.Pop();
             SOS = dataStack.Pop();
             dataStack.Push(dataStack.Pop() == -1 ? SOS : TOS);
             PC++;
             break;
         case OPCODES.RETURN:
         rlabel:
             PC = returnStack.Pop();
             PC++;
             break;
         case OPCODES.ZRETURN:
             TOS = dataStack.Pop();
             if(TOS == 0)
                 goto rlabel;
             else
                 PC++;
             break;
         case OPCODES.GOTO:
             PC = dataStack.Pop();
             break;
         case OPCODES.DO:
             returnStack.Push(PC);
             PC = dataStack.Pop();
             break;
     default:
         break;
     }
     return (int)op;
 }
Example #4
0
        private bool SyncSendReceive(OPCODES opcode, out int result)
        {
            result = 0;
            int recCount;
            String query = _provider.GetOpCodeBytes(opcode);

            if (String.IsNullOrEmpty(query) || !IsInitialized)
            {
                return false;
            }

            try
            {
                lock (_sock.Locker)
                {
                    if (Send(query) > 0)
                    {
                        Wait();
                        // receive:
                        if (_sock.Available > 0)
                        {
                            byte[] data = new byte[_sock.Available];
                            recCount = _sock.Receive(data);
                            if (recCount > 0)
                            {
                                return TryParseData(data, out result);
                            }
                        }
                    }
                }
            }
            catch
            {
            }
            return false;
        }
Example #5
0
 public int SendMessage(OPCODES opcode, int arg)
 {
     return SendString(_provider.GetOpCodeBytes(opcode, arg));
 }
Example #6
0
 public String PtuOpcode(OPCODES opcode, int data)
 {
     return _provider.GetOpCodeBytes(opcode, data);
 }
Example #7
0
 public String PtuOpcode(OPCODES opcode)
 {
     return _provider.GetOpCodeBytes(opcode);
 }
Example #8
0
 public String GetOpCodeBytes(OPCODES opcode, int arg)
 {
     String cmd = String.Empty;
     if (_asciiCodes.TryGetValue(opcode, out cmd))
     {
         cmd += arg.ToString();
         cmd += Environment.NewLine;
     }
     return cmd;
 }