Я следую этим учебникам:
http://wiki.osdev.org/Keyboard
http://wiki.osdev.org/User:Zesterer/Bare_Bones
Я пытаюсь добавить поддержку клавиатуры, но я оказался в ситуации, когда, если я нажимаю один символ, например 'A', программа продолжает показывать тысячи 'A'. > пока я не нажму другую клавишу, например '1' (также отображаются тысячи '1', пока я не нажму другую клавишу и т. д.). Я хочу размещать символы один за другим, я имею в виду, если 'A' нажимается после того, как он отобразит его один раз, и он все еще позволяет мне добавлять другие символы.
//Places single char onto the screen
void term_putc(char c);
//Provides the scancode from kb controller
char getScancode(){
char c=0;
do {
if(inb(0x60) != c)
{
c=inb(0x60);
if(c>0)
return c;
}
}while(1);}
//transfroms scancodes to chars
char getchar();
//shows the character on the screen
void kb_print(){
char chara = getchar(); // Pressed key value
term_putc(chara);
}
Теперь я вызываю основную функцию
void kernel_main(){
term_init();
while(1){
kb_print();
}
}
Весь код:
https://pastebin.com/CMNvZN3P
Спасибо за ответы!
while(!(inb(0x64) & 2)) ; return inb(0x60);
вgetScancode()
. Это будет ждать, пока буфер клавиатуры не станет непустым, прежде чем читать скан-код. - person Ian Abbott   schedule 06.10.2017getScancode
- беспорядок. - person Jabberwocky   schedule 06.10.2017while(!(inb(0x64) & 2)) ; return inb(0x60);
вgetScancode()
дает тот же результат. - person Dykow   schedule 06.10.2017