【问题标题】:Turn PS/2 keyboard Caps Lock LED on/off in custom kernel在自定义内核中打开/关闭 PS/2 键盘 Caps Lock LED
【发布时间】:2014-01-16 03:16:25
【问题描述】:

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

【问题讨论】:

  • 您自己的操作系统?什么平台(硬件)?
  • 你试过将命令字节写入64h端口,将数据字节写入60h端口吗?
  • @IlmariKaronen 知道了....

标签: c assembly keyboard kernel


【解决方案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 状态)。

【讨论】:

    【解决方案2】:

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

    • ESC ---> 大写锁定指示灯关闭

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

    【讨论】:

      猜你喜欢
      • 2011-04-01
      • 2016-12-26
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 2021-02-22
      • 1970-01-01
      相关资源
      最近更新 更多