diff --git a/src/sys/boot/bootsec.asm b/src/sys/boot/bootsec.asm index e0e20c2..241efb1 100755 --- a/src/sys/boot/bootsec.asm +++ b/src/sys/boot/bootsec.asm @@ -156,6 +156,19 @@ ; Re-enter protected mode ! A20 is already enabled +;mov ax, 0x4f0a +;xor bx,bx +;int 0x10 +;xor eax,eax +;mov ax,es +;shl eax,4 +;and edi, 0xFFFF +;add edi,ebx +;xor bx,bx +;mov es,bx +;mov si, 0x2000 +;mov [es:si],eax +;mov [es:si+4],cx cli ; No interrupts please at all lgdt [gdtinfo] mov ecx, cr0 @@ -264,18 +277,6 @@ popa ret -print: - lodsb ; load next character - or al, al ; test for NUL character - jz .DONE - mov ah, 0x0E ; BIOS teletype - mov bh, 0x00 ; display page 0 - mov bl, 0x07 ; text attribute - int 0x10 ; invoke BIOS - jmp print - .DONE: - ret - gdtinfo: dw gdtlength @@ -294,7 +295,5 @@ ;********* END GDT TABLE krnl_entry dd 0 -bootMsg db 'Loading UbixOS' , 0x0D, 0x0A, 0x00 - times 510-($-$$) db 0 dw 0xAA55 diff --git a/src/sys/kernel/exec.c b/src/sys/kernel/exec.c index 7fb64b7..534ca2a 100755 --- a/src/sys/kernel/exec.c +++ b/src/sys/kernel/exec.c @@ -37,21 +37,27 @@ elfProgramheader *programHeader; pid = findTask(); pdn = (long *)allocPage(); - for (i=0;i<4096;i++) { + remapPage((long)pdn,(long)pdn); + kprintf("Woot"); + for (i=0;i<1024;i++) { pdn[i] = 0x0; } + kprintf("toom"); if ((_current->id >= 0) && (_current->id <= numTasks)) { pd = (long *)_current->tss.cr3; } else { pd = (long *)pageDirectory; } - taskList[pid].tss.cr3 = (long)pdn; - pdn[0] = pd[0]; - for (i=768;i<1024;i++) { + remapPage((long)pd,(long)pd); + taskList[pid].tss.cr3 = (long)pdn; + pdn[0] = pd[0]; + kprintf("a"); + for (i=768;i<1024;i++) { pdn[i] = pd[i]; - kprintf("(%i)",pdn[i]); + //kprintf("(%i)",pdn[i]); } + kprintf("b"); kprintf("[%i][%i][%i]\n",pageDirectory,pd,fdTable[0].status); _current = &taskList[pid]; asm( @@ -59,8 +65,12 @@ "movl %%eax,%%cr3 \n" : : "d" ((uLong *)(pdn)) ); +/* for (i=768;i<1024;i++) { + kprintf("(%i)",pdn[i]); + }*/ kprintf("[%i][%i][%i]\n",pageDirectory,pd,fdTable[0].status); - if (_current->id > 1) { while (1); } + if (pid > 1) { while(1); } + //if (_current->id > 1) { while (1); } fd = fopen(file,1); for (i=0;feof(fd) == 0;i++) { binarySpace[i] = fgetc(fd); diff --git a/src/sys/vmm/paging.c b/src/sys/vmm/paging.c index f38998a..5bcbe16 100755 --- a/src/sys/vmm/paging.c +++ b/src/sys/vmm/paging.c @@ -79,21 +79,27 @@ void remapPage(uLong source,uLong dest) { uInt spi=0,spage=0,dpi=0,dpage=0; - uLong *srcPagetable,*dstPagetable; + uLong *srcPagetable,*dstPagetable,*pageDir; + if ((_current->id < 0) || (_current->id > numTasks)) { + pageDir = pageDirectory; + } + else { + pageDir = (long *)_current->tss.cr3; + } spi = source/(1024*4096); spage = (source-(spi*(1024*4096)))/4096; dpi = dest/(1024*4096); dpage = (dest-(dpi*(1024*4096)))/4096; - srcPagetable = (uLong *)(pageDirectory[spi]-39); - if (pageDirectory[dpi] == 0) { - pageDirectory[dpi] = (uLong)(allocPage()+39); + srcPagetable = (uLong *)(pageDir[spi]-39); + if (pageDir[dpi] == 0) { + pageDir[dpi] = (uLong)(allocPage()+39); asm( "movl %cr3,%eax\n" "movl %eax,%cr3\n" ); } - dstPagetable = (uLong *)(pageDirectory[dpi]-39); + dstPagetable = (uLong *)(pageDir[dpi]-39); dstPagetable[dpage] = srcPagetable[spage]; asm( "movl %cr3,%eax\n" @@ -115,6 +121,7 @@ "movl %%eax,%0\n" : "=g" (cr2) ); + kprintf("[%i]\n",cr2); pi = cr2/(1024*4096); page = (cr2-(pi*(1024*4096)))/4096; if (pageDir[pi] == 0) {