bits 16 org 0x7c00 start: xor ax,ax mov ds,ax mov ss,ax mov sp,0x400 mov ax,0xb800 mov es,ax cld mov ax,3 int 10h mov ah,0xe mov si,keymapgraphic .kmgnext: lodsb or al,al jz .kmgdone int 10h jmp .kmgnext .kmgdone: .main: xor ah,ah in al,0x60 mov bx,ax cmp bx,0x80 jl .noadjust sub bx,0x80 .noadjust: dec bx shl bx,1 inc bx test al,0x80 jne .release mov byte [es:bx],0xF0 jmp .main .release: mov byte [es:bx], 0x0F jmp .main keymapgraphic db 0x0B,"1234567890-=",0x7F,0xAF,"QWERTYUIOP[]",0xFB,0xDD,"ASDFGHJKL;'`",0xB4,"\","ZXCVBNM,./",0xC3,"*",0x01,"_",0x02,0 times 510-($-$$) db 0 dw 0xAA55