rem: key = sIsa->read_io_8(0x60); TRACE(("handle_keyboard_interrupt: key = 0x%x\n", key));
add: TRACE(("scancode: %x\n", scancode)); if (scancode & 0x80) { keyInfo.is_keydown = false; scancode -= 0x80; } else keyInfo.is_keydown = true;
context: handle_keyboard_interrupt(void *data){	unsigned char key;		key = sIsa->read_io_8(0x60);	TRACE(("handle_keyboard_interrupt: key = 0x%x\n", key));	if (key == 0xE0) {		// Extended key. Handle it in some way		return B_HANDLED_INTERRUPT;	}		if (key & 0x80) {		sKeyInfo.is_keydown = false;			}	sKeyInfo.timestamp = system_time();	sKeyInfo.scancode = key;		// TODO: Check return value	cbuf_memcpy_to_chain(keyboard_buf, 0, (void *)&sKeyInfo, sizeof(sKeyInfo));	release_sem_etc(keyboard_sem, 1, B_DO_NOT_RESCHEDULE);		// Reset this so the next event defaults to keydown	sKeyInfo.is_keydown = true;		return B_INVOKE_SCHEDULER;}