ReadVar() public method

public ReadVar ( int location ) : int
location int
return int
コード例 #1
0
        /// <summary>
        /// Compare two variables and set the flags.
        /// </summary>
        public static HITResult Cmp(HITThread thread) //same as sub, but does not set afterwards.
        {
            var dest = thread.ReadByte();
            var src  = thread.ReadByte();

            var result = thread.ReadVar(dest) - thread.ReadVar(src);

            thread.SetFlags(result);

            return(HITResult.CONTINUE);
        }
コード例 #2
0
ファイル: HITInterpreter.cs プロジェクト: RHY3756547/FreeSO
        //0x10
        /// <summary>
        /// Increment a "dest" variable by a "src" variable.
        /// </summary>
        public static HITResult Add(HITThread thread)
        {
            var dest = thread.ReadByte();
            var src = thread.ReadByte();

            var result = thread.ReadVar(dest) + thread.ReadVar(src);
            thread.WriteVar(dest, result);

            thread.SetFlags(result);

            return HITResult.CONTINUE;
        }
コード例 #3
0
        /// <summary>
        /// Load a track ("index" variable) from a hitlist ("table" variable).
        /// </summary>
        public static HITResult SmartIndex(HITThread thread)
        {
            var dest  = thread.ReadVar(thread.ReadByte());
            var index = thread.ReadVar(thread.ReadByte());

            thread.LoadHitlist((byte)index);
            int TrackID = (int)thread.LoadTrack(index);

            thread.WriteVar(dest, TrackID);

            return(HITResult.CONTINUE); //Appears to be unused.
        }
コード例 #4
0
        /// <summary>
        /// Load a track ("index" variable) from a hitlist ("table" variable).
        /// </summary>
        public static HITResult SmartIndex(HITThread thread)
        {
            var dest  = thread.ReadVar(thread.ReadByte());
            var index = thread.ReadVar(thread.ReadByte());

            thread.LoadHitlist((byte)index);
            //Converting this to an int is a hack because WriteVar only takes an int... o_O
            int TrackID = (int)thread.LoadTrack(index);

            thread.WriteVar(dest, TrackID);

            return(HITResult.CONTINUE); //Appears to be unused.
        }
コード例 #5
0
        /// <summary>
        /// Multiply a "dest" variable by a "src" variable.
        /// </summary>
        public static HITResult Mul(HITThread thread)
        {
            var dest = thread.ReadByte();
            var src  = thread.ReadByte();

            var result = thread.ReadVar(dest) * thread.ReadVar(src);

            thread.WriteVar(dest, result);

            thread.SetFlags(result);

            return(HITResult.CONTINUE);
        }
コード例 #6
0
        public static HITResult GetSrcDataField(HITThread thread)
        {
            var dest  = thread.ReadByte();
            var src   = thread.ReadByte();
            var field = thread.ReadByte();

            int ObjectVar = thread.ReadVar(src);

            ObjectVar = thread.ReadVar(10010 + ObjectVar);
            thread.WriteVar(dest, ObjectVar);
            thread.SetFlags(ObjectVar);

            return(HITResult.CONTINUE);
        }
コード例 #7
0
        /// <summary>
        /// Wait until two variables are equal.
        /// </summary>
        public static HITResult WaitEqual(HITThread thread)
        {
            var dest = thread.ReadByte();
            var src  = thread.ReadByte();

            if (thread.ReadVar(dest) != thread.ReadVar(dest))
            {
                thread.PC -= 3;
                return(HITResult.HALT);
            }
            else
            {
                return(HITResult.CONTINUE);
            }
        }
コード例 #8
0
        /// <summary>
        /// Choose a global hitlist, or 0 for the one local to the track (source: defaultsyms.txt).
        /// </summary>
        public static HITResult SmartSetList(HITThread thread)
        { //sets the hitlist
            var src = thread.ReadByte();

            thread.LoadHitlist((uint)thread.ReadVar(src));

            return(HITResult.CONTINUE);
        }
コード例 #9
0
        /// <summary>
        /// Examine a variable and set the flags.
        /// </summary>
        public static HITResult Test(HITThread thread)
        {
            var value = thread.ReadVar(thread.ReadByte());

            thread.SetFlags(value);

            return(HITResult.CONTINUE);
        }
コード例 #10
0
        /// <summary>
        /// Copy the contents of one variable into another.
        /// </summary>
        public static HITResult Set(HITThread thread)
        {
            var dest = thread.ReadByte();
            var src  = thread.ReadVar(thread.ReadByte());

            thread.WriteVar(dest, src);

            thread.SetFlags(src);

            return(HITResult.CONTINUE);
        }
コード例 #11
0
        /// <summary>
        /// Find the lower of a "dest" variable and a "src" constant and store the result in the variable.
        /// </summary>
        public static HITResult Min(HITThread thread)
        {
            var dest = thread.ReadByte();
            var src  = thread.ReadInt32();

            var result = Math.Min(thread.ReadVar(dest), src);

            thread.WriteVar(dest, result);

            thread.SetFlags(result);
            return(HITResult.CONTINUE); //unused in the sims
        }
コード例 #12
0
        /// <summary>
        /// Wait for a length of time in milliseconds, specified by a variable.
        /// </summary>
        public static HITResult Wait(HITThread thread)
        {
            var src = thread.ReadByte();

            if (thread.WaitRemain == -1)
            {
                thread.WaitRemain = thread.ReadVar(src);
            }
            thread.WaitRemain -= 16; //assuming tick rate is 60 times a second
            if (thread.WaitRemain > 0)
            {
                thread.PC -= 2;
                return(HITResult.HALT);
            }
            else
            {
                thread.WaitRemain = -1;
                return(HITResult.CONTINUE);
            }
        }
コード例 #13
0
        /// <summary>
        /// Jump to a given address.
        /// </summary>
        public static HITResult Jump(HITThread thread)
        {
            var read = thread.ReadByte();

            if (read > 15)   //literal
            {
                thread.PC--; //backtraaackkk
                thread.PC = PCTrans(thread.ReadUInt32(), thread);
            }
            else //no idea if there are collisions. if there are i'm blaming fatbag. >:)
            {
                thread.PC = PCTrans((uint)thread.ReadVar(read), thread);
                if (thread.ReadByte() == 0)
                {
                    thread.PC += 2;                         //if next is no-op, the operand is 4 byte
                }
                else
                {
                    thread.PC--;  //operand is 1 byte (next is an instruction), backtrack
                }
            }

            return(HITResult.CONTINUE);
        }
コード例 #14
0
ファイル: HITInterpreter.cs プロジェクト: RHY3756547/FreeSO
        /// <summary>
        /// Jump to a given address.
        /// </summary>
        public static HITResult Jump(HITThread thread)
        {
            var read = thread.ReadByte();

            if (read > 15) //literal
            {
                thread.PC--; //backtraaackkk
                thread.PC = thread.ReadUInt32();
            }
            else //no idea if there are collisions. if there are i'm blaming fatbag. >:)
            {
                thread.PC = (uint)thread.ReadVar(read);
                if (thread.ReadByte() == 0) thread.PC += 2; //if next is no-op, the operand is 4 byte
                else thread.PC--; //operand is 1 byte (next is an instruction), backtrack
            }

            return HITResult.CONTINUE;
        }
コード例 #15
0
ファイル: HITInterpreter.cs プロジェクト: RHY3756547/FreeSO
        /// <summary>
        /// Find the lower of a "dest" variable and a "src" constant and store the result in the variable.
        /// </summary>
        public static HITResult Min(HITThread thread)
        {
            var dest = thread.ReadByte();
            var src = thread.ReadInt32();

            var result = Math.Min(thread.ReadVar(dest), src);
            thread.WriteVar(dest, result);

            thread.SetFlags(result);
            return HITResult.CONTINUE; //unused in the sims
        }
コード例 #16
0
ファイル: HITInterpreter.cs プロジェクト: RHY3756547/FreeSO
        public static HITResult GetSrcDataField(HITThread thread)
        {
            var dest = thread.ReadByte();
            var src = thread.ReadByte();
            var field = thread.ReadByte();

            int ObjectVar = thread.ReadVar(src);
            ObjectVar = thread.ReadVar(10010 + ObjectVar);
            thread.WriteVar(dest, ObjectVar);
            thread.SetFlags(ObjectVar);

            return HITResult.CONTINUE;
        }
コード例 #17
0
ファイル: HITInterpreter.cs プロジェクト: RHY3756547/FreeSO
        /// <summary>
        /// Copy the contents of one variable into another.
        /// </summary>
        public static HITResult Set(HITThread thread)
        {
            var dest = thread.ReadByte();
            var src = thread.ReadVar(thread.ReadByte());

            thread.WriteVar(dest, src);

            thread.SetFlags(src);

            return HITResult.CONTINUE;
        }
コード例 #18
0
ファイル: HITInterpreter.cs プロジェクト: RHY3756547/FreeSO
        /// <summary>
        /// Wait until two variables are equal.
        /// </summary>
        public static HITResult WaitEqual(HITThread thread)
        {
            var dest = thread.ReadByte();
            var src = thread.ReadByte();

            if (thread.ReadVar(dest) != thread.ReadVar(dest))
            {
                thread.PC -= 3;
                return HITResult.HALT;
            }
            else
                return HITResult.CONTINUE;
        }
コード例 #19
0
ファイル: HITInterpreter.cs プロジェクト: RHY3756547/FreeSO
 /// <summary>
 /// Wait for a length of time in milliseconds, specified by a variable.
 /// </summary>
 public static HITResult Wait(HITThread thread)
 {
     var src = thread.ReadByte();
     if (thread.WaitRemain == -1) thread.WaitRemain = thread.ReadVar(src);
     thread.WaitRemain -= 16; //assuming tick rate is 60 times a second
     if (thread.WaitRemain > 0)
     {
         thread.PC -= 2;
         return HITResult.HALT;
     }
     else
     {
         thread.WaitRemain = -1;
         return HITResult.CONTINUE;
     }
 }
コード例 #20
0
ファイル: HITInterpreter.cs プロジェクト: RHY3756547/FreeSO
        /// <summary>
        /// Examine a variable and set the flags.
        /// </summary>
        public static HITResult Test(HITThread thread)
        {
            var value = thread.ReadVar(thread.ReadByte());

            thread.SetFlags(value);

            return HITResult.CONTINUE;
        }
コード例 #21
0
ファイル: HITInterpreter.cs プロジェクト: RHY3756547/FreeSO
        /// <summary>
        /// Choose a global hitlist, or 0 for the one local to the track (source: defaultsyms.txt).
        /// </summary>
        public static HITResult SmartSetList(HITThread thread)
        {
            //sets the hitlist
            var src = thread.ReadByte();
            thread.LoadHitlist((uint)thread.ReadVar(src));

            return HITResult.CONTINUE;
        }
コード例 #22
0
ファイル: HITInterpreter.cs プロジェクト: RHY3756547/FreeSO
        /// <summary>
        /// Load a track ("index" variable) from a hitlist ("table" variable).
        /// </summary>
        public static HITResult SmartIndex(HITThread thread)
        {
            var dest = thread.ReadVar(thread.ReadByte());
            var index = thread.ReadVar(thread.ReadByte());

            thread.LoadHitlist((byte)index);
            //Converting this to an int is a hack because WriteVar only takes an int... o_O
            int TrackID = (int)thread.LoadTrack(index);

            thread.WriteVar(dest, TrackID);

            return HITResult.CONTINUE; //Appears to be unused.
        }