User:Johnburger/Demo/Exec/Key
< User:Johnburger | Demo
Jump to navigation
Jump to search
This code needs to do two things:
- Install the Keyboard interrupt handler;
- Enable Keyboard interrupts in its PIC.
Note that this Interrupt handler doesn't do two things:
- Maintain the state of the "Shift" keys, like <Shift>, <Ctrl> and <Alt>;
- Convert scan codes into ASCII for the standard keys.
Both of these are left as an exercise for the reader - including the decision as to whether they belong inside the interrupt handler at all! (Hint: I suggest "Yes" for #1 and "No" for #2).
Demo/Exec/Key.inc
;
; Exec/Key.inc
;
; This module installs a Keyboard interrupt handler. There's not much to do:
; the defaults as set by the BIOS are good enough.
; Of course, to be a true Device Driver, something needs to convert the KeyCodes
; generated by the keyboard into the ASCII equivalents (or whatever) for more
; general consumption by other programs. This has been left as an exercise for
; the reader - until I get impatient and do it myself...
Exec.Key:
; First, install a Keyboard interrupt handler
MOV EAX,Ints.Key ; Handler
MOV EBX,IDT.Key ; Interrupt
MOV CX,Selector(GDT.Ints, GDT, RPL0)
MOV DL,Type.Sys(Int, DPL0, 386)
CALL Exec.Alloc.IDT
; Finally, enable the Keyboard interrupt in the PIC
IN AL,Dev.PIC.A.Mask
AND AL,~Dev.PIC.A.Key ; Unmask Key IRQ
OUT Dev.PIC.A.Mask,AL
RET