diff --git a/src/sys/drivers/8259.c b/src/sys/drivers/8259.c new file mode 100755 index 0000000..15c3dce --- /dev/null +++ b/src/sys/drivers/8259.c @@ -0,0 +1,46 @@ +/************************************************************************************** + Copyright (c) 2002 + The UbixOS Project + + $Id$ +**************************************************************************************/ + +#include +#include + +unsigned int irqMask = 0xFFFF; + +/* Initializes The PIC */ +void init8259() { + outportByte(mPic, icw1); /* Initialize Master PIC */ + outportByte(sPic, icw1); /* Initialize Seconary PIC */ + outportByte(mPic+1, mVec); /* Master Interrup Vector */ + outportByte(sPic+1, sVec); /* Secondary Interrupt Vector */ + outportByte(mPic+1, 1<<2); /* Bitmask for cascade on IRQ 2 */ + outportByte(sPic+1, 2); /* Cascade on IRQ 2 */ + outportByte(mPic+1, icw4); /* Finish Primary Initialization */ + outportByte(sPic+1, icw4); /* Finish Seconary Initialization */ + outportByte(mImr, 0xff); /* Mask All Primary Interrupts */ + outportByte(sImr, 0xff); /* Mask All Seconary Interrupts */ + } + + +/* Enable IRQ # */ +void enableIrq(unsigned short irqNo) { + irqMask &= ~(1 << irqNo); + if (irqNo >= 8) { + irqMask &= ~(1 << 2); + } + outportByte(mPic+1, irqMask & 0xFF); + outportByte(sPic+1, (irqMask >> 8) & 0xFF); + } + +/* Disables IRQ # */ +void disableIrq(unsigned short irqNo) { + irqMask |= (1 << irqNo); + if ((irqMask & 0xFF00)==0xFF00) { + irqMask |= (1 << 2); + } + outportByte(mPic+1, irqMask & 0xFF); + outportByte(sPic+1, (irqMask >> 8) & 0xFF); + } \ No newline at end of file diff --git a/src/sys/drivers/Makefile b/src/sys/drivers/Makefile index cc4410a..96bcc4f 100755 --- a/src/sys/drivers/Makefile +++ b/src/sys/drivers/Makefile @@ -14,7 +14,7 @@ REMOVE = rm -fr # Objects -OBJS = video.o +OBJS = video.o 8259.o keyboard.o all: $(OBJS) diff --git a/src/sys/drivers/keyboard.c b/src/sys/drivers/keyboard.c new file mode 100755 index 0000000..3b898ff --- /dev/null +++ b/src/sys/drivers/keyboard.c @@ -0,0 +1,181 @@ +/************************************************************************************** + Copyright (c) 2002 + The UbixOS Project + + $Id$ +**************************************************************************************/ + +#include +#include +#include +#include +#include +#include + +unsigned int keystrokeBuffer[255]; +unsigned int keystrokeBuffersize = 0; +unsigned int controlKeys = 0; +unsigned int keyMap = 0; +unsigned int ledStatus = 0; + +unsigned int keyboardMap[][8] = { +/* Ascii, Shift, Ctrl, Alt, Num, Caps, Shift Caps, Shift Num */ + { 0, 0, 0, 0, 0, 0, 0, 0}, +/* ESC */ { 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B}, +/* 1,! */ { 0x31, 0x21, 0, 0, 0x31, 0x31, 0x21, 0x21}, +/* 2,@ */ { 0x32, 0x40, 0, 0, 0x32, 0x32, 0x40, 0x40}, +/* 3,# */ { 0x33, 0x23, 0, 0, 0x33, 0x33, 0x23, 0x23}, +/* 4,$ */ { 0x34, 0x24, 0, 0, 0x34, 0x34, 0x24, 0x24}, +/* 5,% */ { 0x35, 0x25, 0, 0, 0x35, 0x35, 0x25, 0x25}, +/* 6,^ */ { 0x36, 0x5E, 0, 0, 0x36, 0x36, 0x5E, 0x5E}, +/* 7,& */ { 0x37, 0x26, 0, 0, 0x37, 0x37, 0x26, 0x26}, +/* 8,* */ { 0x38, 0x2A, 0, 0, 0x38, 0x38, 0x2A, 0x2A}, +/* 9.( */ { 0x39, 0x28, 0, 0, 0x39, 0x39, 0x28, 0x28}, +/* 0,) */ { 0x30, 0x29, 0, 0, 0x30, 0x30, 0x29, 0x29}, +/* -,_ */ { 0x2D, 0x5F, 0, 0, 0x2D, 0x2D, 0x5F, 0x5F}, +/* =,+ */ { 0x3D, 0x2B, 0, 0, 0x3D, 0x3D, 0x2B, 0x2B}, +/* */ { 0x08, 0x08, 0, 0, 0x08, 0x08, 0x08, 0x08}, +/* */ { 0x09, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x71, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x77, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x65, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x72, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x74, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x79, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x75, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x69, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x6F, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x70, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x5B, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x5D, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x0A, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x61, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x73, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x64, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x66, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x67, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x68, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x6A, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x6B, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x6C, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x3B, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x27, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x60, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x2A, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x5C, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x7A, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x78, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x63, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x76, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x62, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x6E, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x6D, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x2C, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x2E, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x2F, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x20, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x3B00, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x3C00, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x3D00, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x3E00, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x3F00, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x4000, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x4100, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x4200, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x4300, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x4400, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x4700, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x4800, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x4900, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x2D, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x4B00, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x4C00, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x4D00, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x2B, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x4F00, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x5000, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x5100, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x5200, 0, 0, 0, 0, 0, 0, 0}, +/* */ { 0x5300, 0, 0, 0, 0, 0, 0, 0} + }; +void initKeyboard() { + setVector(keyboardIsr, mVec+1, dPresent + dInt + dDpl3); /* IRQ1 Handler */ + setLeds(); + enableIrq(1); + } + +asm( + ".globl keyboardIsr \n" + "keyboardIsr: \n" + " pusha \n" /* Save all registers */ + " pushw %ds \n" /* Set up the data segment */ + " pushw %es \n" + " pushw %ss \n" /* Note that ss is always valid */ + " pushw %ss \n" + " popw %ds \n" + " popw %es \n" + " call keyboardHandler \n" + " popw %es \n" + " popw %ds \n" /* Restore registers */ + " popa \n" + " iret \n" /* Exit interrupt */ + ); + +void keyboardHandler() { + unsigned int key = inportByte(0x60); + /* Control Key */ + if (key == 0x1D && !(controlKeys & controlKey)) { + controlKeys |= controlKey; + } + if (key == 0x80 + 0x1D) { + controlKeys &= (0xFF - controlKey); + } + /* ALT Key */ + if (key == 0x38 && (!controlKeys & altKey)) { + controlKeys |= altKey; + } + if (key == 0x80 + 0x38) { + controlKeys &= (0xFF - altKey); + } + /* Shift Key */ + if ((key == 0x2A || key == 0x36) && !(controlKeys & shiftKey)) { + controlKeys |= shiftKey; + } + if ((key == 0x80 + 0x2A) || (key == 0x80 + 0x36)) { + controlKeys &= (0xFF - shiftKey); + } + /* Caps Lock */ + if (key == 0x3A) { + ledStatus ^= ledCapslock; + setLeds(); + } + /* Num Lock */ + if (key == 0x45) { + ledStatus ^= ledNumlock; + setLeds(); + } + /* Scroll Lock */ + if (key == 0x46) { + ledStatus ^= ledScrolllock; + setLeds(); + } + /* Pick Which Key Map */ + + keystrokeBuffer[keystrokeBuffersize] = keyboardMap[key][keyMap]; + keystrokeBuffersize++; + outportByte(mPic, eoi); + } + +void setLeds() { + outportByte(0x60, 0xED); + while(inportByte(0x64) & 2); + outportByte(0x60, ledStatus); + while(inportByte(0x64) & 2); + } \ No newline at end of file diff --git a/src/sys/drivers/video.c b/src/sys/drivers/video.c index b2e0015..70a1c25 100755 --- a/src/sys/drivers/video.c +++ b/src/sys/drivers/video.c @@ -38,7 +38,7 @@ } for (i = 0; i < 80; i++) { videoBuffer[(160*24)+(i*2)] = 0x20; - videoBuffer[(160*24)+(i*2)+1] = 0x07; + videoBuffer[(160*24)+(i*2)+1] = printColor; } bufferOffset -= 160; } diff --git a/src/sys/include/drivers/8259.h b/src/sys/include/drivers/8259.h new file mode 100755 index 0000000..b0c83b8 --- /dev/null +++ b/src/sys/include/drivers/8259.h @@ -0,0 +1,27 @@ +/************************************************************************************** + Copyright (c) 2002 + The UbixOS Project + + $Id$ +**************************************************************************************/ + +#ifndef _8259_H +#define _8259_H + +#define mPic 0x20 /* I/O for master PIC */ +#define mImr 0x21 /* I/O for master IMR */ +#define sPic 0xA0 /* I/O for slave PIC */ +#define sImr 0xA1 /* I/O for slace IMR */ +#define eoi 0x20 /* EOI command */ +#define icw1 0x11 /* Cascade, Edge triggered */ +#define icw4 0x01 /* 8088 mode */ +#define mVec 0x68 /* Vector for master */ +#define sVec 0x70 /* Vector for slave */ +#define ocw3Irr 0x0A /* Read IRR */ +#define ocw3Isr 0x0B /* Read ISR */ + +void init8259(); +void enableIrq(unsigned short irqNo); +void disableIrq(unsigned short irqNo); + +#endif \ No newline at end of file diff --git a/src/sys/include/drivers/keyboard.h b/src/sys/include/drivers/keyboard.h new file mode 100755 index 0000000..7247f91 --- /dev/null +++ b/src/sys/include/drivers/keyboard.h @@ -0,0 +1,23 @@ +/************************************************************************************** + Copyright (c) 2002 + The UbixOS Project + + $Id$ +**************************************************************************************/ + +#ifndef _KEYBOARD_H +#define _KEYBOARD_H + +#define shiftKey 1 +#define controlKey 4 +#define altKey 2 +#define ledNumlock 2 +#define ledScrolllock 1 +#define ledCapslock 4 + +void initKeyboard(); +void keyboardIsr(); +void keyboardHandler(); +void setLeds(); + +#endif \ No newline at end of file diff --git a/src/sys/include/ubixos/exec.h b/src/sys/include/ubixos/exec.h new file mode 100755 index 0000000..3b955f7 --- /dev/null +++ b/src/sys/include/ubixos/exec.h @@ -0,0 +1,13 @@ +/************************************************************************************** + Copyright (c) 2002 + The UbixOS Project + + $Id$ +**************************************************************************************/ + +#ifndef _EXEC_H +#define _EXEC_H + +void execThread(void (* tproc)(void),int stack,char *descr); + +#endif \ No newline at end of file diff --git a/src/sys/include/ubixos/schedule.h b/src/sys/include/ubixos/schedule.h new file mode 100755 index 0000000..2a1fb8c --- /dev/null +++ b/src/sys/include/ubixos/schedule.h @@ -0,0 +1,80 @@ +/************************************************************************************** + Copyright (c) 2002 + The UbixOS Project + + $Id$ +**************************************************************************************/ + +#ifndef _SCHEDULE_H +#define _SCHEDULE_H + +#define numTasks 1024 +#define RUNABLE 3 +#define ACTIVE 2 +#define INACTIVE 1 +#define AVAILABLE 0 + +struct tssStruct { + short back_link; + short back_link_reserved; + long esp0; + short ss0; + short ss0_reserved; + long esp1; + short ss1; + short ss1_reserved; + long esp2; + short ss2; + short ss2_reserved; + long cr3; + long eip; + long eflags; + long eax,ecx,edx,ebx; + long esp; + long ebp; + long esi; + long edi; + short es; + short es_reserved; + short cs; + short cs_reserved; + short ss; + short ss_reserved; + short ds; + short ds_reserved; + short fs; + short fs_reserved; + short gs; + short gs_reserved; + short ldt; + short ldt_reserved; + long trace_bitmap; /* bits: trace 0, bitmap 16-31 */ + }; + +struct i387Struct { + long cwd; + long swd; + long twd; + long fip; + long fcs; + long foo; + long fos; + long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */ + }; + +struct taskStruct { + struct tssStruct tss; + struct i387Struct i387; + int id; + int status; + int usedMath; + }; + +extern struct taskStruct taskList[numTasks]; +extern struct taskStruct *_current,*_usedMath; +extern int currentProc; + +void initScheduler(); +int findTask(); + +#endif \ No newline at end of file diff --git a/src/sys/include/ubixos/scheduler.h b/src/sys/include/ubixos/scheduler.h deleted file mode 100755 index 2d314de..0000000 --- a/src/sys/include/ubixos/scheduler.h +++ /dev/null @@ -1,49 +0,0 @@ -/************************************************************************************** - Copyright (c) 2002 - The UbixOS Project - - $Id$ -**************************************************************************************/ - -#ifndef _SCHEDULER_H -#define _SCHEDULER_H - -/* Task State Segment Structure */ -struct tssStruct { - short backLink; - short backLink_reserved; - long esp0; - short ss0; - short ss0_reserved; - long esp1; - short ss1; - short ss1_reserved; - long esp2; - short ss2; - short ss2_reserved; - long cr3; - long eip; - long eflags; - long eax,ecx,edx,ebx; - long esp; - long ebp; - long esi; - long edi; - short es; - short es_reserved; - short cs; - short cs_reserved; - short ss; - short ss_reserved; - short ds; - short ds_reserved; - short fs; - short fs_reserved; - short gs; - short gs_reserved; - short ldt; - short ldt_reserved; - long traceBitmap; /* bits: trace 0, bitmap 16_31 */ - }; - -#endif \ No newline at end of file diff --git a/src/sys/init/main.c b/src/sys/init/main.c index dcdb3f6..8377678 100755 --- a/src/sys/init/main.c +++ b/src/sys/init/main.c @@ -6,9 +6,12 @@ **************************************************************************************/ #include -#include -#include +#include +#include #include +#include +#include +#include int main(); @@ -22,44 +25,34 @@ struct { unsigned short limit __attribute__ ((packed)); - union descriptorTableunion *idt __attribute__ ((packed)); + union descriptorTableunion *gdt __attribute__ ((packed)); } loadGdt = { (5 * sizeof(union descriptorTableunion) - 1), GDT }; void _start(void) { asm( - "lgdtl (loadGdt) \n" - "movw $0x10,%ax \n" + "lgdtl (loadGdt) \n" + "movw $0x10,%ax \n" "movw %ax,%ds \n" "movw %ax,%es \n" "movw %ax,%fs \n" "movw %ax,%gs \n" "movw %ax,%ss \n" - "movl $0xFFFF,%esp \n" - "mov $0x18,%ax \n" //Set up dummy LDT - "lldt %ax \n" - "mov $0x20,%ax \n" // Set up dummy TSS - "ltr %ax \n" // Loads dummy TSS + "movl $0xFFFF,%esp \n" + "mov $0x18,%ax \n" //Set up dummy LDT + "lldt %ax \n" + "mov $0x20,%ax \n" // Set up dummy TSS + "ltr %ax \n" // Loads dummy TSS ); main(); //Start Of Kernel Functionality while(1); } -/* -void _start() { - asm( - "lgdt (loadgdt) \n" - "mov $0x18,%%ax \n" - "ltr %%ax \n" - : - : "r" (GDT) - ); - main(); - while (1); - } - */ - int main() { clearScreen(); - outputVersion(); //Display Version Info + outputVersion(); //Display Version Info + init8259(); //Initialize PIC + initIdt(); //Initialize IDT + initKeyboard(); //Initialize Keyboard + initScheduler(); //Initialize Scheduler return(0); } \ No newline at end of file diff --git a/src/sys/kernel/Makefile b/src/sys/kernel/Makefile index 254560a..e9ec017 100755 --- a/src/sys/kernel/Makefile +++ b/src/sys/kernel/Makefile @@ -14,7 +14,7 @@ REMOVE = rm -fr # Objects -OBJS = io.o version.o kprintf.o vsprintf.o +OBJS = io.o version.o kprintf.o vsprintf.o idt.o schedule.o exec.o all: $(OBJS) diff --git a/src/sys/kernel/exec.c b/src/sys/kernel/exec.c new file mode 100755 index 0000000..08427e3 --- /dev/null +++ b/src/sys/kernel/exec.c @@ -0,0 +1,37 @@ +/************************************************************************************** + Copyright (c) 2002 + The UbixOS Project + + $Id$ +**************************************************************************************/ + +#include +#include + +void execThread(void (* tproc)(void),int stack,char *descr) { + int pid = 0; + pid = findTask(); + taskList[pid].tss.back_link = 0x0; + taskList[pid].tss.esp0 = stack; + taskList[pid].tss.ss0 = 0x10; + taskList[pid].tss.esp1 = 0x0; + taskList[pid].tss.ss1 = 0x10; + taskList[pid].tss.esp2 = 0x0; + taskList[pid].tss.ss2 = 0x10; +// taskList[pid].tss.cr3 = (unsigned int)pageDir; + taskList[pid].tss.eip = (unsigned int)tproc; + taskList[pid].tss.eflags = 0x206; + taskList[pid].tss.esp = stack; + taskList[pid].tss.ebp = stack; + taskList[pid].tss.esi = 0x0; + taskList[pid].tss.edi = 0x0; + taskList[pid].tss.es = 0x10; + taskList[pid].tss.cs = 0x08; + taskList[pid].tss.ss = 0x10; + taskList[pid].tss.ds = 0x10; + taskList[pid].tss.fs = 0x10; + taskList[pid].tss.gs = 0x10; + taskList[pid].tss.ldt = 0x18; + taskList[pid].tss.trace_bitmap = 0x80000000; + taskList[pid].status = RUNABLE; + } \ No newline at end of file diff --git a/src/sys/kernel/idt.c b/src/sys/kernel/idt.c new file mode 100755 index 0000000..952110a --- /dev/null +++ b/src/sys/kernel/idt.c @@ -0,0 +1,59 @@ +/************************************************************************************** + Copyright (c) 2002 + The UbixOS Project + + $Id$ +**************************************************************************************/ + +#include +#include +#include + +descriptorTable(IDT, 256) { + }; + +struct { + unsigned short limit __attribute__ ((packed)); + union descriptorTableunion *idt __attribute__ ((packed)); + } loadidt= { (256 * sizeof(union descriptorTableunion) - 1), IDT }; + +/* Sets Up Initial IDT Table */ +void initIdt() { + int i=0; + + for (i=0;i<256;i++) { + setVector(intNull, i, dPresent + dInt + dDpl3); + } + asm ( + "lidt (%0) \n" /* Load the IDT */ + "pushfl \n" /* Clear the NT flag */ + "andl $0xffffbfff,(%%esp) \n" + "popfl \n" + "sti \n" + : + : "r" ((char *) &loadidt) + ); + } + +/* Sets Up IDT Vector */ +void setVector(void *handler, unsigned char interrupt, unsigned short controlMajor) { + unsigned short codesegment = 0x08; + asm volatile("movw %%cs,%0":"=g" (codesegment)); + IDT[interrupt].gate.offsetLow = (unsigned short) (((unsigned long)handler)&0xffff); + IDT[interrupt].gate.selector = codesegment; + IDT[interrupt].gate.access = controlMajor; + IDT[interrupt].gate.offsetHigh = (unsigned short) (((unsigned long)handler) >> 16); + } + +/* Null Intterupt Descriptor */ +/* +asm( + ".globl intNull \n" + "intNull: \n" + " iret \n" + ); +*/ +void intNull() { + kprintf("Woot Invalid Interrupt\n"); + while(1); + } \ No newline at end of file diff --git a/src/sys/kernel/schedule.c b/src/sys/kernel/schedule.c new file mode 100755 index 0000000..0fddef5 --- /dev/null +++ b/src/sys/kernel/schedule.c @@ -0,0 +1,33 @@ +/************************************************************************************** + Copyright (c) 2002 + The UbixOS Project + + $Id$ +**************************************************************************************/ +#include + +int currentProc; +struct taskStruct taskList[numTasks]; +struct taskStruct *_current,*_usedMath = 0x0; + +/* Initialize Scheduler */ +void initScheduler(void) { + int i; + for (i=0;i