hi!
ich hab folgendes problem:
ich habe mir einen Keybhandler geschrieben und
warte auf einen tastendruck...( code folgt noch )
Wenn ich eine Taste drücke gibt bochs folgende
fehlermeldung aus:
"[KBD ] internal keyboard buffer full (imm)"
Hier der Code... Bitte helft mir!!!
Ich initialisiere den Handler mit keyb_init();
und dann warte ich mit getch() auf einen taste..
wo liegt den bloß der fehler??
ich hab folgendes problem:
ich habe mir einen Keybhandler geschrieben und
warte auf einen tastendruck...( code folgt noch )
Wenn ich eine Taste drücke gibt bochs folgende
fehlermeldung aus:
"[KBD ] internal keyboard buffer full (imm)"
Hier der Code... Bitte helft mir!!!
Code: [Auswählen]
char _keyb_buf;
BOOL _key_in_buf = FALSE;
__keymap km = US;
int shift, caps=FALSE;
void update_keyb_leds() {
if(caps)
{
while( ( inportb( KEY_REG_STATUS ) & 0x2 ) != 0 ) ;
outportb( KEY_REG_DATA, 0xed );
while( ( inportb( KEY_REG_STATUS ) & 0x2 ) != 0 ) ;
outportb( KEY_REG_DATA, 0x4 );
}
else
{
while( ( inportb( KEY_REG_STATUS ) & 0x2 ) != 0 ) ;
outportb( KEY_REG_DATA, 0xed );
while( ( inportb( KEY_REG_STATUS ) & 0x2 ) != 0 ) ;
outportb( KEY_REG_DATA, 0x0 );
}
}
/* ======================== */
void keyboard_handler(struct _int_stack_regs *r) {
int scancode;
while ( ( inportb( KEY_REG_STATUS ) & 1 ) == FALSE ) ;
while( ( inportb( KEY_REG_STATUS ) & 0x2 ) != 0 ) ;
scancode = inportb( KEY_REG_DATA );
if(scancode & KEY_RELEASE)
{
scancode&=0x7f;
if( scancode == SC_LEFT_SHIFT || scancode == SC_RIGHT_SHIFT )
{
if(caps)
shift = TRUE;
else
shift = FALSE;
}
update_keyb_leds();
return;
}
if( scancode == SC_LEFT_SHIFT || scancode == SC_RIGHT_SHIFT )
{
if(caps)
shift = FALSE;
else
shift = TRUE;
update_keyb_leds();
return;
}
if( scancode == SC_CAPS_LOCK )
{
shift = !shift;
caps = !caps;
update_keyb_leds();
return;
}
if( !_key_in_buf ) {
if( shift && km == US ) {
_keyb_buf = kmUS_Shift[scancode];
}
else if ( !shift && km == US ) {
_keyb_buf = kmUS_NonSh[scancode];
}
else if ( shift && km == GE ) {
_keyb_buf = kmGE_Shift[scancode];
}
else if ( !shift && km == GE ) {
_keyb_buf = kmGE_NonSh[scancode];
}
_key_in_buf=TRUE;
}
update_keyb_leds();
}
/* ======================== */
void keyb_init() {
irq_install_handler(1, keyboard_handler, "keyb_drv");
}
/* ======================== */
int getch(void) {
int rv;
while( !_key_in_buf ) ;
rv = _keyb_buf;
_key_in_buf = FALSE;
return rv;
}
/* ======================== */
Ich initialisiere den Handler mit keyb_init();
und dann warte ich mit getch() auf einen taste..
wo liegt den bloß der fehler??

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert
