;Reads a keypress and prints its BIOS keycode. keycode: ;Read a keypress mov ah, 0x0 int 0x16 ;Store the keycode mov [.scan], ah mov [.ascii], al ;Print the prefix mov si, .prefix call printstr ;Convert the scancode to a hex string mov al, [.scan] mov di, .keycode call .byte2hex ;Convert the ascii value to a hex string mov al, [.ascii] mov di, .keycode add di, 0x2 call .byte2hex ;Print the keycode mov si, .keycode call println ret .prefix db "0x", 0x0 .scan db 0x0 .ascii db 0x0 .keycode times 0x5 db 0x0 .byte2hex: ;Store the initial registers in the stack push si push ax push bx push cx ;Move the byte to AH mov ah, al ;Set a key for the hex digits mov si, .key ;Set a counter for the two hex digits mov cx, 0x2 .loop: ;Read a nibble rol ax, 0x1 rol ax, 0x1 rol ax, 0x1 rol ax, 0x1 mov bx, ax ;Convert the nibble to a hex digit and bx, 0xf mov bl, [si + bx] ;Store the hex digit mov [di], bl ;Repeat inc di dec cx jnz .loop ;Load the initial registers from the stack pop cx pop bx pop ax pop si ret .key db "0123456789abcdef"