19,19 → 19,13 |
mcall 26, 2, 2, keymap_shift+128 |
mcall 26, 2, 3, keymap_alt+128 |
|
mov esi, keymap+128 |
mov edi, keymap |
mov ecx, 128 |
call convert_keymap |
|
mov esi, keymap_shift+128 |
mov edi, keymap_shift |
mov ecx, 128 |
call convert_keymap |
|
mov esi, keymap_alt+128 |
mov edi, keymap_alt |
mov ecx, 128 |
call convert_keymap |
|
ret |
39,83 → 33,50 |
|
|
convert_keymap: |
|
push edi |
lea esi, [edi+128] |
mov ecx, 128 |
xor eax, eax |
.loop: |
lodsb |
|
cmp al, 0x08 ; Backspace |
jne @f |
mov ax, 0x08ff |
jmp .next |
@@: |
cmp al, 0x09 ; Tab |
jne @f |
mov ax, 0x09ff |
jmp .next |
@@: |
cmp al, 0x0d ; Enter |
jne @f |
mov ax, 0x0dff |
jmp .next |
@@: |
cmp al, 0x1b ; Escape |
jne @f |
mov ax, 0x1bff |
jmp .next |
@@: |
cmp al, 0x34 ; Insert |
jne @f |
mov ax, 0x63ff |
jmp .next |
@@: |
cmp al, 0xb6 ; Delete |
jne @f |
mov ax, 0xffff |
jmp .next |
@@: |
cmp al, 0xb4 ; Home |
jne @f |
mov ax, 0x50ff |
jmp .next |
@@: |
cmp al, 0xb5 ; End |
jne @f |
mov ax, 0x57ff |
jmp .next |
@@: |
cmp al, 0xb8 ; PgUp |
jne @f |
mov ax, 0x55ff |
jmp .next |
@@: |
cmp al, 0xb7 ; PgDown |
jne @f |
mov ax, 0x56ff |
jmp .next |
@@: |
cmp al, 0xb0 ; Left |
jne @f |
mov ax, 0x51ff |
jmp .next |
@@: |
cmp al, 0xb2 ; Up |
jne @f |
mov ax, 0x52ff |
jmp .next |
@@: |
cmp al, 0xb3 ; Right |
jne @f |
mov ax, 0x53ff |
jmp .next |
@@: |
cmp al, 0xb1 ; Down |
jne @f |
mov ax, 0x54ff |
jmp .next |
@@: |
|
shl ax, 8 |
.next: |
stosw |
dec ecx |
jnz .loop |
pop edi |
|
; Fill in some keysyms for non-ascii keys |
mov word[edi+01*2], 0x1bff ; Escape |
mov word[edi+14*2], 0x08ff ; Backspace |
mov word[edi+15*2], 0x09ff ; Tab |
mov word[edi+28*2], 0x0dff ; Enter |
mov word[edi+29*2], 0xe3ff ; Left control key |
mov word[edi+42*2], 0xe1ff ; Left shift |
mov word[edi+54*2], 0xe2ff ; Right shift |
mov word[edi+56*2], 0xe9ff ; Left alt key |
mov word[edi+59*2], 0xbeff ; f1 |
mov word[edi+60*2], 0xbfff ; f2 |
mov word[edi+61*2], 0xc0ff ; f3 |
mov word[edi+62*2], 0xc1ff ; f4 |
mov word[edi+63*2], 0xc2ff ; f5 |
mov word[edi+64*2], 0xc3ff ; f6 |
mov word[edi+65*2], 0xc4ff ; f7 |
mov word[edi+66*2], 0xc5ff ; f8 |
mov word[edi+67*2], 0xc6ff ; f9 |
mov word[edi+68*2], 0xc7ff ; f10 |
mov word[edi+71*2], 0x50ff ; home |
mov word[edi+72*2], 0x52ff ; up |
mov word[edi+73*2], 0x55ff ; pg up |
mov word[edi+75*2], 0x51ff ; left |
mov word[edi+77*2], 0x53ff ; right |
mov word[edi+79*2], 0x57ff ; end |
mov word[edi+80*2], 0x54ff ; down |
mov word[edi+81*2], 0x56ff ; pg down |
mov word[edi+82*2], 0x63ff ; insert |
mov word[edi+83*2], 0xffff ; delete |
mov word[edi+87*2], 0xc8ff ; f11 |
mov word[edi+88*2], 0xc9ff ; f12 |
mov word[edi+91*2], 0xebff ; left super |
|
ret |