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

rks48beu  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(131)

我正在用汇编语言和C语言开发一个内核,在 Boot 过程中,我希望内核打开Caps Lock键,然后关闭。我在这里找到了键上LED的参考。我如何用C或汇编语言(NASM风格)调用该函数?

9wbgstp7

9wbgstp71#

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状态)。

xggvc2p6

xggvc2p62#

您可以读取my code以供参考:

  • irq_ex2.c*:中断处理程序示例。此代码将自身绑定到IRQ 1,即Intel架构下控制的键盘的IRQ。然后,当它接收到键盘中断时,它将有关状态LED和键码的信息读入工作队列。

压榨:

  • ESC →大写锁定LED关闭
  • F1、F2 →大写锁定键打开

相关问题