diff --git a/src/bin/init/main.c b/src/bin/init/main.c index fe1f5fd..1c8deed 100755 --- a/src/bin/init/main.c +++ b/src/bin/init/main.c @@ -46,7 +46,7 @@ printf("Initializing system.\n"); exec("shell"); while(1) { - printf("Testing 123"); + //printf("Testing 123\n"); } exit(1); } \ No newline at end of file diff --git a/src/sys/include/ubixos/exec.h b/src/sys/include/ubixos/exec.h index 814b2aa..1c89127 100755 --- a/src/sys/include/ubixos/exec.h +++ b/src/sys/include/ubixos/exec.h @@ -25,6 +25,6 @@ #define _EXEC_H void execThread(void (* tproc)(void),int stack,char *descr); -int execFile(char *file); +void execFile(char *file); #endif \ No newline at end of file diff --git a/src/sys/init/main.c b/src/sys/init/main.c index bca35c6..0ed259f 100755 --- a/src/sys/init/main.c +++ b/src/sys/init/main.c @@ -85,7 +85,8 @@ initFloppy(); //Initialize Floppy Controller initUbixFS(); execThread(idleThread,0xAFFF,"Idle Thread"); - execFile("shell"); + //execFile("shell"); + execFile("init"); //execThread(test,0xCFFF,"Test"); /* while(1) { diff --git a/src/sys/kernel/exec.c b/src/sys/kernel/exec.c index a7ef9ed..8a649ad 100755 --- a/src/sys/kernel/exec.c +++ b/src/sys/kernel/exec.c @@ -28,12 +28,31 @@ #include #include -int execFile(char *file) { - int fd=0,i=0,x=0,eStart=0; +void execFile(char *file) { + unsigned int *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(); + taskList[pid].tss.cr3 = (unsigned long)allocPage() | pageDefault; + pd = &_current->tss.cr3; + pdn = &taskList[pid].tss.cr3; + for (i=0;i<1;i++) { + pdn[i] = pd[i]; + } + for (i=3072;i<4096;i++) { + pdn[i] = pd[i]; + } + 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)) + ); fd = fopen(file,1); for (i=0;feof(fd) == 0;i++) { binarySpace[i] = fgetc(fd); @@ -45,8 +64,39 @@ newLoc[x] = binarySpace[x]; } eStart = binaryHeader->eEntry; - execThread((void *)eStart,(allocPage()+4095),file); - return(0); + i = (allocPage()+4095); +// execThread((void *)eStart,(allocPage()+4095),file); + taskList[pid].tss.back_link = 0x0; + taskList[pid].tss.esp0 = i; + 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)*pdn; + taskList[pid].tss.eip = (unsigned int)eStart; + taskList[pid].tss.eflags = 0x206; + taskList[pid].tss.esp = i; + taskList[pid].tss.ebp = i; + 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; + 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)) + ); } void execThread(void (* tproc)(void),int stack,char *descr) { diff --git a/src/sys/kernel/idlethread.c b/src/sys/kernel/idlethread.c index 20c009f..5c48a0d 100755 --- a/src/sys/kernel/idlethread.c +++ b/src/sys/kernel/idlethread.c @@ -24,6 +24,7 @@ #include #include #include +#include void idleThread() { unsigned char *testBuf = (char *)0x1000000; @@ -31,13 +32,8 @@ /* This thread is for maintinance */ remapPage(0xB8000,0x1000000); while (1) { - //if (testBuf[0] != 'c') { remapPage(0xB8000,0x1000000); } testBuf[0] = 'c'; testBuf[1] = printColor; - testBuf2[2] = 'd'; - testBuf2[3] = printColor; - //kprintf("M[%i]R[%i]\n",testBuf[0],testBuf2[0]); - //remapPage(0xB8000,0x1000000); //checkTasks(); /* Looks for run away proccesses and kills thems */ } } \ No newline at end of file diff --git a/src/sys/kernel/idt.c b/src/sys/kernel/idt.c index 3e3f885..06d9dc9 100755 --- a/src/sys/kernel/idt.c +++ b/src/sys/kernel/idt.c @@ -98,7 +98,7 @@ } void _int5() { kprint("int5: Bounds check\n"); - while(1); + //while(1); } void _int6() { kprintf("int6: Invalid opcode!\n"); diff --git a/src/sys/kernel/schedule.c b/src/sys/kernel/schedule.c index 8c59565..4bd03f2 100755 --- a/src/sys/kernel/schedule.c +++ b/src/sys/kernel/schedule.c @@ -46,6 +46,7 @@ taskList[i].gid = -1; } currentProc = -1; + _current = &taskList[0]; setVector(timerInt, mVec, (dInt + dPresent + dDpl3)); } diff --git a/src/sys/kernel/syscall.c b/src/sys/kernel/syscall.c index 01393ca..4d27afd 100755 --- a/src/sys/kernel/syscall.c +++ b/src/sys/kernel/syscall.c @@ -82,10 +82,8 @@ char *file; asm("":"=b" (file)); kprintf("File [%s]\n",file); - disableIrq(0); asm("sti"); execFile(file); - kprintf("Executed File\n"); + //asm("cli"); // while(1); - enableIrq(0); } \ No newline at end of file diff --git a/src/sys/vmm/memory.c b/src/sys/vmm/memory.c index 42dd7af..235418b 100755 --- a/src/sys/vmm/memory.c +++ b/src/sys/vmm/memory.c @@ -105,6 +105,10 @@ for (i=(memoryStart/4096);i