示例#1
0
 /// <summary>
 /// Creates a <see cref="CalledChange"/> object.  I don't reccomend using this; use
 /// </summary>
 /// <param name="calling_type">The way this called change is called.</param>
 /// <param name="bell_called_up">The bell (indexed from 0) which is called up.</param>
 /// <param name="bell_called_down">The bell (indexed from 0) which is called down.</param>
 /// <param name="place_called_up">The place (indexed from 0) of the bell which is called up.</param>
 public CalledChange(CallingType calling_type, int bell_called_up, int bell_called_down, int place_called_up)
 {
     this.calling_type     = calling_type;
     this.bell_called_up   = bell_called_up;
     this.bell_called_down = bell_called_down;
     this.place_called_up  = place_called_up;
 }
示例#2
0
 public CTSType(string value, string source, FeatureType feature, CallingType calling, string collectionType, bool optional)
 {
     Value          = value;
     Source         = source;
     Feature        = feature;
     Calling        = calling;
     Class          = null;
     CollectionType = collectionType;
     isOptional     = optional;
 }
        public void PopulateFields(AssemblyBuffer buffer)
        {
            SignatureLength = buffer.ReadByte();
            CallingType     = (CallingConvention)buffer.ReadByte();
            if (CallingType.IsGeneric())
            {
                //TODO: Handle generic values.
                buffer.ReadByte();
            }

            byte paramCount = buffer.ReadByte();

            ReturnType.PopulateFields(buffer);
            PopulateParameters(buffer, paramCount);
        }
示例#4
0
        private static void InterruptHandler(IDTStack *stack, CallingType callingMethod)
        {
            var args = new SystemMessage
            {
                Target = (SysCallTarget)stack->EAX,
                Arg1   = stack->EBX,
                Arg2   = stack->ECX,
                Arg3   = stack->EDX,
                Arg4   = stack->ESI,
                Arg5   = stack->EDI,
                Arg6   = stack->EBP,
            };

            var commandNum = GetCommandNum(args.Target);

            if (KConfig.Log.SysCall)
            {
                KernelMessage.WriteLine("Got SysCall cmd={0} arg1={1} arg2={2} arg3={3} arg4={4} arg5={5} arg6={6}", (uint)args.Target, args.Arg1, args.Arg2, args.Arg3, args.Arg4, args.Arg5, args.Arg6);
            }

            Scheduler.SaveThreadState(Scheduler.GetCurrentThread().ThreadID, (IntPtr)stack);

            var info = Commands[commandNum];

            if (info == null)
            {
                Panic.Error("Undefined SysCall");
            }

            var ctx = new SysCallContext
            {
                CallingType = callingMethod,
            };

            stack->EAX = info.Handler(&ctx, &args);
        }
示例#5
0
 public CallingDetail(int destinationAddress, int sourceAddress, CallingType callType)
 {
     DestinationAddress = destinationAddress;
     SourceAddress      = sourceAddress;
     CallType           = callType;
 }