home *** CD-ROM | disk | FTP | other *** search
- comment |
- This short program displays the full scan code for each key pressed
- in ASCII/Hex notation. Press ESC to end the program.
-
- Written for MASM 5.1 (should compile with earlier versions).
- Save as KEYCODE.ASM
- Compile: MASM KEYCODE;
- LINK KEYCODE;
- |
- stack segment stack
- db 100h dup (?)
- stack ends
-
- data segment
- hextable db "0123456789ABCDEF"
- data ends
-
- code segment
- assume cs:code, ds:data, es:nothing, ss:stack
-
-
- ;---------
- ; Pick the definition
- ; that applies to your
- ; computer
- ;---------
-
- ;KEY_IN equ 00h ;For older keyboards
- KEY_IN equ 10h ;For "enhanced" keyboards (101/102 keys)
-
- ;---------
- ; Program starts here
- ;---------
-
- begin: mov ax,seg data ;Initialize DS
- mov ds,ax
- call cls ;Clear the screen
-
- lp: mov ah,KEY_IN ;Wait for keystroke
- int 16h ; returned by BIOS
- push ax ;Save the key
- call display ;Display the scan code
- pop ax ;Recover original key
- cmp al,01bh ;Was it ESC?
- jnz lp ;No -- loop back
- mov ax,4c00h ;Else exit to DOS
- int 21h
-
- ;---------
- ; Simple and sloppy
- ; screen-clear routine
- ;---------
-
- cls proc near
- mov ax,3 ;Set mode 3 (use 7 for monochrome)
- int 10h ;Call Video BIOS
- ret
- cls endp
-
- ;---------
- ; Display the value
- ; in AX in hex notation
- ; by moving each byte into AL
- ; and calling print_al twice
- ;---------
-
- display proc near ;Display AX value in hex
- push ax ;Save keycode
- mov ah,02 ;Set cursor position
- mov dx,0 ;Top-left corner
- mov bh,0 ;Use page 0
- int 10h ;Call the video BIOS
- pop ax ;Recover original keycode
-
- disp_2: push ax ;Save keycode again
- mov al,ah ;Move high byte into AL
- call print_al ;Print value in AL
- pop ax ;Recover keycode
- call print_al ;Print low byte
- ret
- display endp
-
- ;---------
- ; Display the value in AL
- ; in hex format
- ;---------
-
- print_al proc near
- mov bx,offset hextable ;DS:BX ==> translation table
- cbw ;AH = 0
- push ax ;Save the byte
- mov cl,4 ;Shift top nibble in AL
- shr al,cl ; to the bottom
- xlat ;Get hex character
- mov ah,0eh ;Video service: print TTY mode
- int 10h ;Print the character
- pop ax ;Recover the byte
- and al,0fh ;Mask out high nibble
- xlat ;Translate low nibble to hex
- mov ah,0eh ;And print it
- int 10h ; with a BIOS call
- mov al,' ' ;Now print a space
- int 10h ; with a BIOS call
- ret
- print_al endp
-
- code ends
- end begin
-
-
-