diff --git a/src/sys/include/sys/gdt.h b/src/sys/include/sys/gdt.h index 1b86bf0..1121902 100644 --- a/src/sys/include/sys/gdt.h +++ b/src/sys/include/sys/gdt.h @@ -44,6 +44,7 @@ #define dDpl3 0x6000 /* DPL3 or mask for DPL */ #define dDpl2 0x4000 /* DPL2 or mask for DPL */ #define dDpl1 0x2000 /* DPL1 or mask for DPL */ +#define dDpl0 0x0000 /* DPL0 or mask for DPL */ #define dPresent 0x8000 /* Present */ #define dNpresent 0x8000 /* Not Present */ #define dAcc 0x100 /* Accessed (Data or Code) */ @@ -96,6 +97,9 @@ /*** $Log$ + Revision 1.3 2004/05/21 15:12:17 reddawg + Cleaned up + END ***/ diff --git a/src/sys/include/sys/tss.h b/src/sys/include/sys/tss.h index f0be768..20d996c 100644 --- a/src/sys/include/sys/tss.h +++ b/src/sys/include/sys/tss.h @@ -64,7 +64,6 @@ short gs_reserved; short ldt; short ldt_reserved; - //long trace_bitmap; /* bits: trace 0, bitmap 16-31 */ short trace_bitmap; short io_map; char io_space[8192]; @@ -85,6 +84,9 @@ /*** $Log$ + Revision 1.2 2004/05/21 15:12:17 reddawg + Cleaned up + END ***/ diff --git a/src/sys/isa/atkbd.c b/src/sys/isa/atkbd.c index e9cfd23..d75bf3a 100644 --- a/src/sys/isa/atkbd.c +++ b/src/sys/isa/atkbd.c @@ -32,15 +32,17 @@ #include #include #include -#include #include #include #include #include #include -static unsigned int keyMap = 0; -static unsigned int ledStatus = 0; +static unsigned int keyMap = 0x0; +static unsigned int ledStatus = 0x0; +static char stdinBuffer[256]; +static uInt16 stdinSize; +static uInt32 controlKeys = 0x0; static unsigned int keyboardMap[][8] = { /* Ascii, Shift, Ctrl, Alt, Num, Caps, Shift Caps, Shift Num */ @@ -129,178 +131,6 @@ /* */ { 0x5200, 0, 0, 0, 0, 0, 0, 0}, /* */ { 0x5300, 0, 0, 0, 0, 0, 0, 0}, /* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 1, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, -/* */ { 0, 0, 0, 0, 0, 0, 0, 0}, /* */ { 0, 0, 0, 0, 0, 0, 0, 0} }; @@ -318,17 +148,13 @@ int atkbd_init() { /* Insert the IDT vector for the keyboard handler */ - setVector(&keyboardISR, mVec+1, dPresent + dInt + dDpl3); + setVector(&keyboardISR, mVec+1, dPresent + dInt + dDpl0); /* Set the LEDS to their defaults */ setLED(); /* Turn on the keyboard vector */ - outportByte(mPic, eoi); - outportByte(sPic, eoi); irqEnable(0x1); - outportByte(mPic, eoi); - outportByte(sPic, eoi); /* Print out information on keyboard */ kprintf("atkbd0 - Address: [0x%X]\n",&keyboardISR); @@ -347,37 +173,35 @@ " pusha \n" /* Save all registers */ " call keyboardHandler \n" " popa \n" + " mov $0x20,%dx \n" /* The Following Sends Our EOI To The MPIC */ + " mov $0x20,%ax \n" + " outb %al,%dx \n" " iret \n" /* Exit interrupt */ ); void keyboardHandler() { unsigned int key = inportByte(0x60); - kTask_t *tmpTask = 0x0; - tmpTask = schedFindTask(0); - if (tmpTask->oInfo.stdin == 0x0) { - tmpTask->oInfo.stdin = (char *)kmalloc(256); - } /* Control Key */ - if (key == 0x1D && !(tmpTask->oInfo.controlKeys & controlKey)) { - tmpTask->oInfo.controlKeys |= controlKey; + if (key == 0x1D && !(controlKeys & controlKey)) { + controlKeys |= controlKey; } if (key == 0x80 + 0x1D) { - tmpTask->oInfo.controlKeys &= (0xFF - controlKey); + controlKeys &= (0xFF - controlKey); } /* ALT Key */ - if (key == 0x38 && !(tmpTask->oInfo.controlKeys & altKey)) { - tmpTask->oInfo.controlKeys |= altKey; + if (key == 0x38 && !(controlKeys & altKey)) { + controlKeys |= altKey; } if (key == 0x80 + 0x38) { - tmpTask->oInfo.controlKeys &= (0xFF - altKey); + controlKeys &= (0xFF - altKey); } /* Shift Key */ - if ((key == 0x2A || key == 0x36) && !(tmpTask->oInfo.controlKeys & shiftKey)) { - tmpTask->oInfo.controlKeys |= shiftKey; + if ((key == 0x2A || key == 0x36) && !(controlKeys & shiftKey)) { + controlKeys |= shiftKey; } if ((key == 0x80 + 0x2A) || (key == 0x80 + 0x36)) { - tmpTask->oInfo.controlKeys &= (0xFF - shiftKey); + controlKeys &= (0xFF - shiftKey); } /* Caps Lock */ if (key == 0x3A) { @@ -395,24 +219,24 @@ setLED(); } /* Pick Which Key Map */ - if (tmpTask->oInfo.controlKeys == 0) { keyMap = 0; } - else if (tmpTask->oInfo.controlKeys == 1) { keyMap = 1; } - else if (tmpTask->oInfo.controlKeys == 2) { keyMap = 2; } - else if (tmpTask->oInfo.controlKeys == 4) { keyMap = 3; } + if (controlKeys == 0) { keyMap = 0; } + else if (controlKeys == 1) { keyMap = 1; } + else if (controlKeys == 2) { keyMap = 2; } + else if (controlKeys == 4) { keyMap = 3; } /* If Key Is Not Null Add It To Handler */ if (((uInt)(keyboardMap[key][keyMap]) > 0) && ((uInt32)(keyboardMap[key][keyMap]) < 0xFF)) { switch ((uInt32)keyboardMap[key][keyMap]) { case 8: backSpace(); - tmpTask->oInfo.stdin[tmpTask->oInfo.stdinSize] = keyboardMap[key][keyMap]; - tmpTask->oInfo.stdinSize++; + stdinBuffer[stdinSize] = keyboardMap[key][keyMap]; + stdinSize++; break; case 0x3: - schedEndTask(tmpTask->id); + //schedEndTask(tmpTask->id); break; default: - tmpTask->oInfo.stdin[tmpTask->oInfo.stdinSize] = keyboardMap[key][keyMap]; - tmpTask->oInfo.stdinSize++; + stdinBuffer[stdinSize] = keyboardMap[key][keyMap]; + stdinSize++; break; } } @@ -426,8 +250,7 @@ break; } } - outportByte(mPic, eoi); - outportByte(sPic, eoi); + //kprint("b"); /* Return */ return; } @@ -443,16 +266,13 @@ unsigned char getch() { uInt8 retKey = 0x0; uInt32 i = 0x0; - kTask_t *tmpTask = 0x0; - tmpTask = schedFindTask(0); + while (stdinSize == 0); + retKey = stdinBuffer[0]; + stdinSize--; - while (tmpTask->oInfo.stdinSize == 0); - retKey = tmpTask->oInfo.stdin[0]; - tmpTask->oInfo.stdinSize--; - - for (i=0x0;ioInfo.stdinSize;i++) { - tmpTask->oInfo.stdin[i] = tmpTask->oInfo.stdin[i+0x1]; + for (i=0x0;i