85 lines
1.7 KiB
NASM
85 lines
1.7 KiB
NASM
|
.model tiny
|
|||
|
.486
|
|||
|
smart
|
|||
|
.code
|
|||
|
org 0100h
|
|||
|
|
|||
|
start:
|
|||
|
mov al,0D0h
|
|||
|
call keybcmd
|
|||
|
in al,60h
|
|||
|
ret
|
|||
|
|
|||
|
|
|||
|
;============= PPI port A (Programmable Peripheral interface) ================
|
|||
|
;8048 (old XT) 8042 (old AT) 8741 8742 (with PS2 mouse)
|
|||
|
; R/W
|
|||
|
;Port 60h : Scancode & keyboarddata
|
|||
|
overrun equ 000h ;Error too many keys pressed
|
|||
|
BATend equ 0AAh ;End of the test BAT (basic test assurance)
|
|||
|
MF2code equ 0ABh ;Code send by MF2 keyboard
|
|||
|
MF2code2 equ 041h ;Code send by MF2 keyboard
|
|||
|
echo equ 0EEh ;Send by echo command
|
|||
|
Ack equ 0FAh ;Send by every comman exept EEh et FEh (Aknoledge)
|
|||
|
BATerror equ 0FCh ;BAT failed
|
|||
|
Resend equ 0FEh ;Resend data please
|
|||
|
Error equ 0FFh ;Error of keyboard
|
|||
|
|
|||
|
;Port 60h : command data
|
|||
|
led equ 0EDh ;set the led like you want
|
|||
|
echo equ 0EEh ;Echo byte for diagnostic
|
|||
|
Set equ 0F0h ;Choose the Set of scancode
|
|||
|
Id equ 0F2h ;Identify the keyboard
|
|||
|
rate equ 0F3h ;Set the specified typematic rate
|
|||
|
enable equ 0F4h ;clear buffer and scan
|
|||
|
reset equ 0F5h ;Reset and no scan
|
|||
|
reset2 equ 0F6h ;Reset and scan
|
|||
|
|
|||
|
;============= PPI port A (Programmable Peripheral interface) ================
|
|||
|
;8048 (old XT) 8042 (old AT) 8741 8742 (with PS2 mouse)
|
|||
|
; R/W
|
|||
|
;Port 61h
|
|||
|
|
|||
|
;==================== Data and control keyboard registers ===================
|
|||
|
;8042 (old AT) 8741 8742 (with PS2 mouse)
|
|||
|
; R/W
|
|||
|
;Port 64h
|
|||
|
|
|||
|
|
|||
|
|
|||
|
;Envoie la commande AL aux clavier et si besoin est la donn<6E>e DL
|
|||
|
Keybcmd:
|
|||
|
push ax
|
|||
|
xchg al,ah
|
|||
|
xor cx,cx
|
|||
|
clearbuffer:
|
|||
|
in al,64h
|
|||
|
test al,02h
|
|||
|
loopnz clearbuffer
|
|||
|
jnz errorkb
|
|||
|
xchg al,ah
|
|||
|
out 64h,al
|
|||
|
clearbuffer2:
|
|||
|
in al,64h
|
|||
|
test al,02h
|
|||
|
loopnz clearbuffer2
|
|||
|
jnz errorkb
|
|||
|
cmp dl,0
|
|||
|
je endkeyb
|
|||
|
mov al,dl
|
|||
|
out 60h,al
|
|||
|
endkeyb:
|
|||
|
clc
|
|||
|
pop ax
|
|||
|
ret
|
|||
|
errorkb:
|
|||
|
stc
|
|||
|
pop ax
|
|||
|
ret
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
end start
|