diff --git a/io.asm b/io.asm index 12756b0..5369dc1 100644 --- a/io.asm +++ b/io.asm @@ -184,10 +184,10 @@ printf_loop: inc ebx cmp al, 0 jzfar printf_done - cmp al, '%' - jzfar printf_percent cmp ecx, 1 jz printf_special + cmp al, '%' + jzfar printf_percent push eax call _putc diff --git a/kernel.c b/kernel.c index 00c5eb1..2e3441c 100644 --- a/kernel.c +++ b/kernel.c @@ -36,10 +36,13 @@ void k_init() mm_init(); enable_ints(); console_cls(); - printf("Memory available to OS: %d MB\n (Bytes: %d)", mm_totalmem/0x100000, mm_totalmem); - + printf("Memory available to OS: %d MB (Bytes: %d)\n", mm_totalmem/0x100000, mm_totalmem); + dword key = 0; for (;;) - printf("%c ", kbdWaitKey()); + { + key = kbdWaitKey(); + printf("Key %c ", key); + } /* pageblock *pb = first_pageblock; for (;;) { diff --git a/keyboard.c b/keyboard.c index 58c2ec9..21ad03b 100644 --- a/keyboard.c +++ b/keyboard.c @@ -30,7 +30,7 @@ void isr_keyboard() outportb(0x61, inState|0x80); outportb(0x61, inState); - printf("IRQ 1: %x\n", kbdScan); + //printf("IRQ 1: %x\n", kbdScan); if (kbdScan == 0xFA) //250 //ACKnowledge { @@ -188,8 +188,8 @@ void isr_keyboard() } else { - kbdBuffer[(kbdBufferStart+kbdBufferLen)%KBD_BUFFER_LENGTH] = (dword) ((kbdFlags << 16) | (kbdScan << 8) | kbdAscii); - kbdBufferLen++; + kbdBuffer[(kbdBufferStart+kbdBufferLen++)%KBD_BUFFER_LENGTH] = (dword) ((kbdFlags << 16) | (kbdScan << 8) | kbdAscii); +// printf("S:%d\tL:%d\tR:%x\n", kbdBufferStart, kbdBufferLen, kbdBuffer[kbdBufferStart]); } } @@ -197,7 +197,7 @@ void isr_keyboard() // if (key == 0xFA) //ACKnowledge // outportb(0x60, 0x3); -}; +} inline byte switchCase(byte asciiCode) { @@ -212,8 +212,9 @@ dword kbdGetKey() { if (kbdBufferLen == 0) //buffer empty return 0; +// printf("kbdBufferLen == %d", kbdBufferLen); dword retVal = kbdBuffer[kbdBufferStart]; - printf("S:%d\tE:%d\tR:%x\n", kbdBufferStart, kbdBufferLen, retVal); + //printf("S:%d\tE:%d\tR:%x\n", kbdBufferStart, kbdBufferLen, retVal); kbdBufferStart++; kbdBufferLen--; if (kbdBufferStart == KBD_BUFFER_LENGTH) @@ -224,15 +225,18 @@ dword kbdGetKey() dword kbdWaitKey() { dword retVal = 0; + { for (;;) { retVal = kbdGetKey(); + //printf("retVal = %x\n", retVal); if (retVal != 0) { - printf("S:%d\tE:%d\tR:%x\n", kbdBufferStart, kbdBufferLen, retVal); + //printf("S:%d\tE:%d\tR:%x\n", kbdBufferStart, kbdBufferLen, retVal); return retVal; } } + } } inline void kbd_resetLEDs()