在自定义内核中打开/关闭PS / 2键盘Caps Lock LED

时间:2013-12-28 20:44:57

标签: c assembly keyboard kernel

我正在使用Assembly和C开发内核,并且在启动过程中,我希望内核打开Caps lock键然后关闭。我在键here上找到了LED的参考。我怎么能用C或汇编语言(nasm样式)调用该函数?

2 个答案:

答案 0 :(得分:1)

SetKeyBoardLeds:
   push  eax
   mov   al,0xed                 
   out   60h,al                 
KeyBoardWait:
   in    al,64h
   test  al,10b                 
   jne   KeyBoardWait              
   mov   al,byte [keyBoardStatus]
   and   al,111b
   out   60h,al                 
   pop   eax
   ret

例如:

   mov   [keyBoardStatus],0xb0    ; Initialise keyboard LED state
   call  SetKeyBoardLeds      
;--------------------------------- This will toggle CapsLock LED
   xor   [keyBoardStatus],4
   call  SetKeyBoardLeds
;---------------------------------
   and   [keyBoardStatus],0xfb
   call  SetKeyBoardLeds

其中keyBoardStatus是一个字节(它将保持当前键盘的LED状态)。

答案 1 :(得分:0)

您可以阅读my code以供参考: irq_ex2.c:中断处理程序示例。此代码将自身绑定到IRQ 1,IRQ 1是在英特尔架构下控制的键盘的IRQ。然后,当它收到键盘中断时,它会将有关状态led和keycode的信息读入工作队列。加压:

  • ESC --->大写锁定关闭

  • F1,F2 --->大写锁定