diff --git a/src/sys/drivers/video.c b/src/sys/drivers/video.c index bb0e26a..3474cb9 100755 --- a/src/sys/drivers/video.c +++ b/src/sys/drivers/video.c @@ -23,6 +23,9 @@ bufferOffset <<= 1; /* Shift Address Left 1 Bits */ while ((character=*string++)) { switch(character) { + case '\n': + bufferOffset = (bufferOffset/160)*160 + 160; + break; default: videoBuffer[bufferOffset++] = character; videoBuffer[bufferOffset++] = printColor; @@ -40,4 +43,9 @@ bufferOffset -= 160; } } + bufferOffset >>= 1; /* Set the new cursor position */ + outportByte(0x3d4, 0x0f); + outportByte(0x3d5, bufferOffset & 0x0ff); + outportWord(0x3d4, 0x0e); + outportByte(0x3d5, bufferOffset >> 8); } \ No newline at end of file diff --git a/src/sys/init/main.c b/src/sys/init/main.c index bc0062a..f6db58c 100755 --- a/src/sys/init/main.c +++ b/src/sys/init/main.c @@ -9,12 +9,15 @@ #include #include +unsigned char KERNEL_STACK[8192]; + int main(); -descriptorTable(GDT,4) { +descriptorTable(GDT,5) { {dummy:0}, standardDescriptor(0, 0xFFFFF, (dCode + dRead + dBig + dBiglim)), standardDescriptor(0, 0xFFFFF, (dData + dWrite + dBig + dBiglim)), + standardDescriptor(0, 0xFFFFF, (dLdt)), standardDescriptor(1000, (sizeof(struct tssStruct)-1), (dTss)), }; @@ -23,8 +26,30 @@ union descriptorTableunion *idt __attribute__ ((packed)); } loadgdt = { (5 * sizeof(union descriptorTableunion) - 1), GDT }; -void _start() { +void _start(void) { + asm( + "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 + : + : "r" (GDT), "p" (KERNEL_STACK+4096) + : "%eax" + ); + main(); //Start Of Kernel Functionality + while(1); + } + /* +void _start() { asm( "lgdt (loadgdt) \n" "mov $0x18,%%ax \n" @@ -32,10 +57,10 @@ : : "r" (GDT) ); -*/ main(); while (1); } + */ int main() { outputVersion(); //Display Version Info diff --git a/src/sys/kernel/vsprintf.c b/src/sys/kernel/vsprintf.c index 3f85776..37864c5 100755 --- a/src/sys/kernel/vsprintf.c +++ b/src/sys/kernel/vsprintf.c @@ -103,7 +103,6 @@ int precision; /* min. # of digits for integers; max number of chars for from string */ int qualifier; /* 'h', 'l', or 'L' for integer fields */ - for (str=buf ; *fmt ; ++fmt) { if (*fmt != '%') { *str++ = *fmt;