diff --git a/src/bin/init/main.c b/src/bin/init/main.c index 46c20c91..4e069c2 100755 --- a/src/bin/init/main.c +++ b/src/bin/init/main.c @@ -37,7 +37,7 @@ i = getpid(); printf("This is my pid: [%i]\n",i); for (i=0;i<5;i++) { - printf("Init Code [%i]\n",i); + //printf("Init Code [%i]\n",i); } if (getpid() != 1) { printf("Sorry This Program Must Be Started By The Kernel!!!!\n"); diff --git a/src/sys/include/ubixos/schedule.h b/src/sys/include/ubixos/schedule.h index e5203dd..fe1451d 100755 --- a/src/sys/include/ubixos/schedule.h +++ b/src/sys/include/ubixos/schedule.h @@ -83,7 +83,7 @@ struct taskStruct { struct tssStruct tss; struct i387Struct i387; - uShort id; + uLong id; uShort status; uShort usedMath; uShort cpuTime; @@ -102,4 +102,4 @@ void timerInt(); void schedule(); -#endif \ No newline at end of file +#endif diff --git a/src/sys/include/vmm/paging.h b/src/sys/include/vmm/paging.h index b724080..2d58fc1 100755 --- a/src/sys/include/vmm/paging.h +++ b/src/sys/include/vmm/paging.h @@ -34,12 +34,12 @@ #define pageDefault (pagePresent|pageWrite|pageUser) extern unsigned long *pageDirectory; -extern int memoryStart; +extern unsigned long memoryStart; void initPaging(); unsigned int allocPage(); -void remapPage(uInt source,uInt dest); +void remapPage(uLong source,uLong dest); void pageFault(); void _pageFault(); -#endif \ No newline at end of file +#endif diff --git a/src/sys/kernel/exec.c b/src/sys/kernel/exec.c index a241c5f..543d5aa 100755 --- a/src/sys/kernel/exec.c +++ b/src/sys/kernel/exec.c @@ -29,61 +29,54 @@ #include void execFile(char *file) { - unsigned int *pd,*pdn; + long *pd,*pdn; int fd=0,i=0,x=0,eStart=0,pid; char *binarySpace = (char *)0x7C0000; char *newLoc; elfHeader *binaryHeader = (elfHeader *)0x7C0000; elfProgramheader *programHeader; pid = findTask(); - pdn = (unsigned int *)allocPage(); - if ((_current->id >=0) && (_current->id <= numTasks)) { - pd = _current->tss.cr3; - kprintf("woot"); + pdn = (long *)allocPage(); + for (i=0;i<4096;i++) { + pdn[i] = 0x0; + } + if ((_current->id >= 0) && (_current->id <= numTasks)) { + pd = (long *)_current->tss.cr3; } else { - pd = pageDirectory; + pd = (long *)pageDirectory; } - // pd = pageDirectory; - taskList[pid].tss.cr3 = pdn; - for (i=0;i<=1;i++) { + taskList[pid].tss.cr3 = (long)pdn; + pdn[0] = pd[0]; + for (i=768;i<1024;i++) { pdn[i] = pd[i]; + kprintf("(%i)",pdn[i]); } - for (i=256;i<4096;i++) { - pdn[i] = pd[i]; - } - kprintf("[%i][%i]sdfsdf\n",pd,&taskList[pid].tss.cr3); + kprintf("[%i][%i][%i]\n",pageDirectory,pd,fdTable[0].status); _current = &taskList[pid]; + if (_current->id > 1) { pdn = pd; } asm( "movl %0,%%eax \n" "movl %%eax,%%cr3 \n" - "movl %%cr0,%%eax \n" - "orl $0x80000000,%%eax \n" - "movl %%eax,%%cr0 \n" - : : "d" ((unsigned int *)(pdn)) + : : "d" ((uLong *)(pdn)) ); -// if (_current->id > 1) { while (1); } + kprintf("[%i][%i][%i]\n",pageDirectory,pd,fdTable[0].status); + if (_current->id > 1) { while (1); } fd = fopen(file,1); - kprintf("fd: [%i][%i]\n",fd,pid); for (i=0;feof(fd) == 0;i++) { binarySpace[i] = fgetc(fd); } programHeader = (elfProgramheader *)(0x7C0000 + binaryHeader->ePhoff); newLoc = (char *)programHeader->phVaddr; - kprintf("[%i]\n",programHeader->phOffset); - kprintf("[%i][%i][%i]\n",pd,pdn,&_current->tss.cr3); for (x=0;xeEntry; - i = (allocPage()+4095); - newLoc = (char *)0x2000000; + newLoc = (char *)0x5DC000; for (i=0;i<4096;i++) { newLoc[i] = 0x0; } - i = 0x2000000+4095; - + i = 0x5DC000+4095; taskList[pid].tss.back_link = 0x0; taskList[pid].tss.esp0 = i; taskList[pid].tss.ss0 = 0x10; @@ -91,8 +84,8 @@ taskList[pid].tss.ss1 = 0x10; taskList[pid].tss.esp2 = 0x0; taskList[pid].tss.ss2 = 0x10; - taskList[pid].tss.cr3 = (unsigned int)pdn; - taskList[pid].tss.eip = (unsigned int)eStart; + taskList[pid].tss.cr3 = (long)pdn; + taskList[pid].tss.eip = (long)eStart; taskList[pid].tss.eflags = 0x206; taskList[pid].tss.esp = i; taskList[pid].tss.ebp = i; @@ -110,12 +103,9 @@ asm( "movl %0,%%eax \n" "movl %%eax,%%cr3 \n" - "movl %%cr0,%%eax \n" - "orl $0x80000000,%%eax \n" - "movl %%eax,%%cr0 \n" - : : "d" ((unsigned int *)(pd)) + : : "d" ((uLong *)(pd)) ); - kprintf("hmm\n"); + kprintf("Done!!!"); } void execThread(void (* tproc)(void),int stack,char *descr) { @@ -144,4 +134,4 @@ 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/idlethread.c b/src/sys/kernel/idlethread.c index 3a01703..74ae2f6 100755 --- a/src/sys/kernel/idlethread.c +++ b/src/sys/kernel/idlethread.c @@ -28,7 +28,6 @@ void idleThread() { unsigned char *testBuf = (char *)0x1000000; - unsigned char *testBuf2 = (char *)0xB8000; /* This thread is for maintinance */ remapPage(0xB8000,0x1000000); while (1) { @@ -37,4 +36,4 @@ kprintf("^"); //checkTasks(); /* Looks for run away proccesses and kills thems */ } - } \ No newline at end of file + } diff --git a/src/sys/kernel/kprintf.c b/src/sys/kernel/kprintf.c index 82324a5..90da84b 100755 --- a/src/sys/kernel/kprintf.c +++ b/src/sys/kernel/kprintf.c @@ -24,6 +24,8 @@ #include #include +int vsprintf(char *buf, const char *fmt, vaList args); + int kprintf(const char *fmt, ...) { vaList args; int i; @@ -43,4 +45,4 @@ i=vsprintf(buf,fmt,args); vaEnd(args); return(i); - } \ No newline at end of file + } diff --git a/src/sys/kernel/schedule.c b/src/sys/kernel/schedule.c index f3d67ab..63a28f9 100755 --- a/src/sys/kernel/schedule.c +++ b/src/sys/kernel/schedule.c @@ -27,8 +27,8 @@ #include #include -int currentProc = 0; -struct taskStruct *taskList = (struct taskStruct *)0xDAC00000; +int currentProc = -1; +struct taskStruct *taskList = (struct taskStruct *)0xE0000000; struct taskStruct *_current,*_usedMath = 0x0; extern union descriptorTableunion GDT[7]; @@ -39,7 +39,6 @@ int i; taskList[-1].id = -1; taskList[-1].status = AVAILABLE; - for (i=0;i #include #include +#include #include +#include asm( ".globl _sysCall \n" @@ -81,9 +83,8 @@ void sysExec() { char *file; asm("":"=b" (file)); - kprintf("File [%s]\n",file); asm("sti"); -// disableIrq(0); + disableIrq(0); execFile(file); -// enableIrq(0); - } \ No newline at end of file + enableIrq(0); + } diff --git a/src/sys/ubixfs/file.c b/src/sys/ubixfs/file.c index ca680ef..2c5f160 100755 --- a/src/sys/ubixfs/file.c +++ b/src/sys/ubixfs/file.c @@ -25,7 +25,7 @@ #include #include -struct fileDescriptorTable *fdTable = (unsigned long)0xE7400000; +struct fileDescriptorTable *fdTable = (struct fileDescriptorTable *)0xECCCC000; int sprintf(char *buf,const char *fmt, ...); @@ -47,10 +47,8 @@ int i=0; for (i=0;i #include -unsigned long *pageDirectory = 0x0; -int memoryStart = 0x100000; +uLong *pageDirectory = 0x0; +uLong memoryStart = 0x100000; void initPaging() { int i=0,x=0; - unsigned int *pageTable; + uLong *pageTable; int freePage = 0x0; memoryStart += (numPages * 8); - pageDirectory = (unsigned int*)memoryStart; + pageDirectory = (uLong *)memoryStart; memoryStart += 4096; for (i=0;iid); /* if (memoryStart%4096 != 0) { @@ -77,23 +77,23 @@ return(page); } -void remapPage(uInt source,uInt dest) { +void remapPage(uLong source,uLong dest) { uInt spi=0,spage=0,dpi=0,dpage=0; - uInt *srcPagetable,*dstPagetable; + uLong *srcPagetable,*dstPagetable; spi = source/(1024*4096); spage = (source-(spi*(1024*4096)))/4096; dpi = dest/(1024*4096); dpage = (dest-(dpi*(1024*4096)))/4096; - srcPagetable = (unsigned int *)(pageDirectory[spi]-39); + srcPagetable = (uLong *)(pageDirectory[spi]-39); if (pageDirectory[dpi] == 0) { - pageDirectory[dpi] = (unsigned int *)(allocPage()+39); + pageDirectory[dpi] = (uLong)(allocPage()+39); asm( "movl %cr3,%eax\n" "movl %eax,%cr3\n" ); } - dstPagetable = (unsigned int *)(pageDirectory[dpi]-39); + dstPagetable = (uLong *)(pageDirectory[dpi]-39); dstPagetable[dpage] = srcPagetable[spage]; asm( "movl %cr3,%eax\n" @@ -108,7 +108,7 @@ pageDir = pageDirectory; } else { - pageDir = _current->tss.cr3; + pageDir = (long *)_current->tss.cr3; } asm( "movl %%cr2,%%eax\n" @@ -118,17 +118,15 @@ pi = cr2/(1024*4096); page = (cr2-(pi*(1024*4096)))/4096; if (pageDir[pi] == 0) { - // kprintf("mapped\n"); - pageTable = (unsigned int*)allocPage(); - pageDir[pi] = (unsigned int)pageTable | pageDefault; + pageTable = (uLong *)allocPage(); + pageDir[pi] = (uLong)pageTable | pageDefault; for (i=0;i<1024;i++) { pageTable[i] = 0; } pageTable[page] = allocPage() | pageDefault; } else { - // kprintf("not Mapped\n"); - pageTable = (unsigned int *)(pageDir[pi]-39); + pageTable = (uLong *)(pageDir[pi]-39); pageTable[page] = allocPage() | pageDefault; } asm( @@ -154,4 +152,4 @@ "popl %ecx \n" "popl %eax \n" "iret \n" - ); \ No newline at end of file + );