public Thread(aMethod entry, string title) { name = title; uint ss = 0x10; uint cs = 0x08; TID = NewThreadID++; basePriority = (int)THREAD_PRIORITY.NORMAL; realPriority = basePriority; state = THREAD_STATES.RUNNABLE; kernelStackTop = Heap.alloc(1024); kernelStack = kernelStackTop + 1024; userStack = Heap.alloc(4096); uint *stack = (uint *)(userStack + 4096); userStackTop = userStack; *--stack = ss; // ss ? *--stack = 0x00000202; // eflags *--stack = cs; // cs *--stack = (uint)entry.GetHashCode(); // eip *--stack = 0; *--stack = 0; *--stack = 0; // EDI *--stack = 0; // ESI *--stack = 0; // EBP *--stack = 0; // No value *--stack = 0; // EBX *--stack = 0; // EDX *--stack = 0; // ECX *--stack = 0; // EAX userStack = (uint)stack; name = title; }
public static void CallCode(aMethod aMethod, object obj) { CallCode(Utils.getMethodHandler(aMethod), obj); }
private static void CallCodeInstance(aMethod aMethod, object obj) { CallCodeInstance(Utils.getMethodHandler(aMethod), obj); }
private static void CallCodeStatic(aMethod aMethod) { CallCodeStatic(Utils.getMethodHandler(aMethod)); }
public static uint getMethodHandler(aMethod method) { return((uint)method.GetHashCode()); }
public static void SetRealHandler(byte aIntNo, aMethod aHandler) { isr_routines[aIntNo] = Utils.getMethodHandler(aHandler); }
public static void SetIntHandler(byte aIntNo, aMethod aHandler) { SetRealHandler((byte)(0x20 + aIntNo), aHandler); }