【问题标题】:Scan the keyboard to obtain scan codes扫描键盘获取扫描码
【发布时间】:2014-09-19 06:22:06
【问题描述】:

所以我正在学习如何制作操作系统。 问题是每个网站都说要扫描键盘以获取扫描码以检测输入。 如何“扫描”键盘? 我知道这个问题看起来很荒谬,但我真的不知道该怎么做,我需要帮助。我还必须提到,我用谷歌搜索了很多。

【问题讨论】:

  • 我真的不敢相信你的最后一句话。一个简单的谷歌想出了这个:wiki.osdev.org/%228042%22_PS/2_Controller
  • 您正在学习如何制作操作系统?为什么不从简单一点的开始?
  • @Rudy Velthuis 我还没开始。我确实处于起步阶段,但我已经做出了更简单的东西。

标签: assembly keyboard operating-system x86 osdev


【解决方案1】:

不使用 ISR (x86-CPU) 轮询键盘端口的示例:

cli
mov  al, 2               ; dissable IRQ 1
out  21h, al
sti
;---------------------------------------------
AGAIN:
in   al, 64h             ; get status byte 
test al, 1               ; check outputbuffer
jz  short NOKEY
test al, 20h             ; PS2-Mouse byte?
jnz short NOKEY
in   al, 60h             ; get scancode (makecode or breakcode)

; place your code here for comparing.....

NOKEY:
jmp AGAIN
;---------------------------------------------
QUIT:
cli
xor  al, al              ; enable IRQ 1
out  21h, al
sti
;---------------------------------------------
; DATA 
TASTTAB DB 02h,03h,04h,05h,06h,07h,08h,09h,0Ah,0Bh,0Ch,0Dh
        DB 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1Ah,1Bh,1Eh,1Fh
        DB 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,2Bh,2Ch,2Dh,2Eh,2Fh
        DB 30h,31h,32h,33h,34h,35h,39h
        DB 56h
tablen =  ($-TASTTAB)

TEXTTAB DB "1234567890ß'"      ; (using german letters)
        DB "qwertzuiopü+as"
        DB "dfghjklöä^#yxcv"
        DB "bnm,.- "
        DB "<"
textablen  =  ($-TEXTTAB)

在 ISR 中,简单地使用“in al, 60h”来获取扫描码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2015-03-16
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多