1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
|
qemu-4.2.0 qemu-system-i386 not receive scancode 86 of spanish keyboard (ascii chars '<' & '>')
Hello.
I am using qemu-4.2.0 for Windows 64 downloaded from https://qemu.weilnetz.de/w64/,
and I use qemu-system-i386.exe for run Minix 3.1.2a:
C:\Program Files\qemu> qemu-system-i386 minix3hd.qcow
All is Ok except the keyboard (spanish).
Actually the Spanish keyboard has always worked well until the version qemu-2.11.0 included. But after that version and until the current version the Spanish keyboard has worked with some very annoying bugs.
The bugs that I encountered in the current version 4.2.0 on Windows are:
1) Scancode 86 (ascii '<') is not received from the Spanish keyboard.
2) Scancode 41 should be interpreted as 39 (41 -> 39).
3) in the same way:
12 -> 53
13 -> 27
26 -> 12
27 -> 13
43 -> 41
53 -> 43
4) Finally and very important in Spain is that scancode 39 should produce the national characters 'ñ' and 'Ñ'
I have checked the scancodes sent by running a floppy disk image with a boot sector that echoed the scancodes sent by pressing the different keys, so the errors are not due in any case to the operating system, but to the virtual machine or at most to the BIOS.
In Minix 3.1.2a I tried to alleviate the errors by modifying the keymap: /usr/lib/keymaps/spanish.map. I have managed to solve all the errors except the one corresponding to scancode 86 (ascii '<') since when the key is pressed on the Spanish keyboard the scancode 86 is not sent.
I accompany the modified keymap: https://github.com/Stichting-MINIX-Research-Foundation/minix/blob/R3.1.2/drivers/tty/keymaps/spanish.src for it could be clarifying in any way.
Thank you very much for qemu and the new version 4.2.0. Apart from these small details, all the improvements that have been included are greatly appreciated.
Greetings. Pedro Pablo.
------------------------- spanish.src (modified #if 0 #else #endif) -------------------------
/* Keymap for Spanish MF-2 keyboard. */
/* Modified by Javier Garcia Martin <email address hidden> */
u16_t keymap[NR_SCAN_CODES * MAP_COLS] = {
/* scan-code !Shift Shift Alt AltGr Alt+Sh Ctrl */
/*
====================================================================
*/
/* 00 - none */ 0, 0, 0, 0, 0, 0,
/* 01 - ESC */ C('['), C('['), CA('['),C('['), C('['), C('['),
/* 02 - '1' */ '1', '!', A('1'), '|', '!', C('A'),
/* 03 - '2' */ '2', '"', A('2'), '@', '"', C('@'),
/* 04 - '3' */ '3', 0372, A('3'), '#', 0372, C('C'),
/* 05 - '4' */ '4', '$', A('4'), '4', '$', C('D'),
/* 06 - '5' */ '5', '%', A('5'), '5', '%', C('E'),
/* 07 - '6' */ '6', '&', A('6'), 0252, '&', C('F'),
/* 08 - '7' */ '7', '/', A('7'), '{', '/', C('G'),
/* 09 - '8' */ '8', '(', A('8'), '(', '(', C('H'),
/* 10 - '9' */ '9', ')', A('9'), ')', ')', C('I'),
/* 11 - '0' */ '0', '=', A('0'), '=', '=', C('@'),
#if 0
/* 12 - '-' */ '\'', '?', A('\''),'?', '?', C('_'), /* debería ser como la (53) */
#else
/* 53 - '/' */ '-', '_', A('-'), '-', '_', C('@'),
#endif
#if 0
/* 13 - '=' */ 0255, 0250, A(0255),0250, 0250, C('@'), /* deberia ser como la (27) */
#else
/* 27 - ']' */ '+', '*', A('+'), ']', '*', C(']'),
#endif
/* 14 - BS */ C('H'), C('H'), CA('H'),C('H'), C('H'), 0177,
/* 15 - TAB */ C('I'), C('I'), CA('I'),C('I'), C('I'), C('I'),
/* 16 - 'q' */ L('q'), 'Q', A('q'), 'q', 'Q', C('Q'),
/* 17 - 'w' */ L('w'), 'W', A('w'), 'w', 'W', C('W'),
/* 18 - 'e' */ L('e'), 'E', A('e'), 'e', 'E', C('E'),
/* 19 - 'r' */ L('r'), 'R', A('r'), 'r', 'R', C('R'),
/* 20 - 't' */ L('t'), 'T', A('t'), 't', 'T', C('T'),
/* 21 - 'y' */ L('y'), 'Y', A('y'), 'y', 'Y', C('Y'),
/* 22 - 'u' */ L('u'), 'U', A('u'), 'u', 'U', C('U'),
/* 23 - 'i' */ L('i'), 'I', A('i'), 'i', 'I', C('I'),
/* 24 - 'o' */ L('o'), 'O', A('o'), 'o', 'O', C('O'),
/* 25 - 'p' */ L('p'), 'P', A('p'), 'p', 'P', C('P'),
#if 0
/* 26 - '[' */ '`', '^', A('`'),'[', '^', C('['), /* debería ser como la (12) */
#else
/* 12 - '-' */ '\'', '?', A('\''),'?', '?', C('_'),
#endif
#if 0
/* 27 - ']' */ '+', '*', A('+'), ']', '*', C(']'), /* deberia ser como la (13) */
#else
/* 13 - '=' */ 0255, 0250, A(0255),0250, 0250, C('@'),
#endif
/* 28 - CR/LF */ C('M'), C('M'), CA('M'),C('M'), C('M'), C('J'),
/* 29 - Ctrl */ CTRL, CTRL, CTRL, CTRL, CTRL, CTRL,
/* 30 - 'a' */ L('a'), 'A', A('a'), 'a', 'A', C('A'),
/* 31 - 's' */ L('s'), 'S', A('s'), 's', 'S', C('S'),
/* 32 - 'd' */ L('d'), 'D', A('d'), 'd', 'D', C('D'),
/* 33 - 'f' */ L('f'), 'F', A('f'), 'f', 'F', C('F'),
/* 34 - 'g' */ L('g'), 'G', A('g'), 'g', 'G', C('G'),
/* 35 - 'h' */ L('h'), 'H', A('h'), 'h', 'H', C('H'),
/* 36 - 'j' */ L('j'), 'J', A('j'), 'j', 'J', C('J'),
/* 37 - 'k' */ L('k'), 'K', A('k'), 'k', 'K', C('K'),
/* 38 - 'l' */ L('l'), 'L', A('l'), 'l', 'L', C('L'),
#if 0
/* 39 - ';' */ L(0244),0245, A(0244),0244, 0245, C('@'), /* deberia ser como la (26) */
#else
/* 26 - '[' */ '`', '^', A('`'),'[', '^', C('['),
#endif
/* 40 - '\'' */ '\'', '"', A('\''),'{', '"', C('@'),
#if 0
/* 41 - '`' */ 0247, 0246, A(0247),'\\', 0246, C('@'), /* deberia ser como la (ñÑ) */
#else
/* 39 - ';' */ L(0244),0245, A(0244),0244, 0245, C('@'),
#endif
/* 42 - l. SHIFT*/ SHIFT, SHIFT, SHIFT, SHIFT, SHIFT, SHIFT,
#if 0
/* 43 - '\\' */ L(0207),0200, A(0207),'}', 0200, C('@'), /* deberia ser como la (41) */
#elif 0
/* 41 - '`' */ 0247, 0246, A(0247),'\\', 0246, C('@'),
#else
/* 41 - '`' */ '<', '>', A('<'), '\\', 0246, C('@'), /* añadimos < y > */
#endif
/* 44 - 'z' */ L('z'), 'Z', A('z'), 'z', 'Z', C('Z'),
/* 45 - 'x' */ L('x'), 'X', A('x'), 'x', 'X', C('X'),
/* 46 - 'c' */ L('c'), 'C', A('c'), 'c', 'C', C('C'),
/* 47 - 'v' */ L('v'), 'V', A('v'), 'v', 'V', C('V'),
/* 48 - 'b' */ L('b'), 'B', A('b'), 'b', 'B', C('B'),
/* 49 - 'n' */ L('n'), 'N', A('n'), 'n', 'N', C('N'),
/* 50 - 'm' */ L('m'), 'M', A('m'), 'm', 'M', C('M'),
/* 51 - ',' */ ',', ';', A(','), ',', ';', C('@'),
/* 52 - '.' */ '.', ':', A('.'), '.', ':', C('@'),
#if 0
/* 53 - '/' */ '-', '_', A('-'), '-', '_', C('@'), /* deberia ser como la (43) */
#else
/* 43 - '\\' */ L(0207),0200, A(0207),'}', 0200, C('@'),
#endif
/* 54 - r. SHIFT*/ SHIFT, SHIFT, SHIFT, SHIFT, SHIFT, SHIFT,
/* 55 - '*' */ '*', '*', A('*'), '*', '*', C('M'),
/* 56 - ALT */ ALT, ALT, ALT, ALT, ALT, ALT,
/* 57 - ' ' */ ' ', ' ', A(' '), ' ', ' ', C('@'),
/* 58 - CapsLck */ CALOCK, CALOCK, CALOCK, CALOCK, CALOCK, CALOCK,
/* 59 - F1 */ F1, SF1, AF1, AF1, ASF1, CF1,
/* 60 - F2 */ F2, SF2, AF2, AF2, ASF2, CF2,
/* 61 - F3 */ F3, SF3, AF3, AF3, ASF3, CF3,
/* 62 - F4 */ F4, SF4, AF4, AF4, ASF4, CF4,
/* 63 - F5 */ F5, SF5, AF5, AF5, ASF5, CF5,
/* 64 - F6 */ F6, SF6, AF6, AF6, ASF6, CF6,
/* 65 - F7 */ F7, SF7, AF7, AF7, ASF7, CF7,
/* 66 - F8 */ F8, SF8, AF8, AF8, ASF8, CF8,
/* 67 - F9 */ F9, SF9, AF9, AF9, ASF9, CF9,
/* 68 - F10 */ F10, SF10, AF10, AF10, ASF10, CF10,
/* 69 - NumLock */ NLOCK, NLOCK, NLOCK, NLOCK, NLOCK, NLOCK,
/* 70 - ScrLock */ SLOCK, SLOCK, SLOCK, SLOCK, SLOCK, SLOCK,
/* 71 - Home */ HOME, '7', AHOME, AHOME, '7', CHOME,
/* 72 - CurUp */ UP, '8', AUP, AUP, '8', CUP,
/* 73 - PgUp */ PGUP, '9', APGUP, APGUP, '9', CPGUP,
/* 74 - '-' */ NMIN, '-', ANMIN, ANMIN, '-', CNMIN,
/* 75 - Left */ LEFT, '4', ALEFT, ALEFT, '4', CLEFT,
/* 76 - MID */ MID, '5', AMID, AMID, '5', CMID,
/* 77 - Right */ RIGHT, '6', ARIGHT, ARIGHT, '6', CRIGHT,
/* 78 - '+' */ PLUS, '+', APLUS, APLUS, '+', CPLUS,
/* 79 - End */ END, '1', AEND, AEND, '1', CEND,
/* 80 - Down */ DOWN, '2', ADOWN, ADOWN, '2', CDOWN,
/* 81 - PgDown */ PGDN, '3', APGDN, APGDN, '3', CPGDN,
/* 82 - Insert */ INSRT, '0', AINSRT, AINSRT, '0', CINSRT,
/* 83 - Delete */ 0177, '.', A(0177),0177, '.', 0177,
/* 84 - Enter */ C('M'), C('M'), CA('M'),C('M'), C('M'), C('J'),
/* 85 - ??? */ 0, 0, 0, 0, 0, 0,
/* 86 - ??? */ '<', '>', A('<'), '<', '>', C('@'),
/* 87 - F11 */ F11, SF11, AF11, AF11, ASF11, CF11,
/* 88 - F12 */ F12, SF12, AF12, AF12, ASF12, CF12,
/* 89 - ??? */ 0, 0, 0, 0, 0, 0,
/* 90 - ??? */ 0, 0, 0, 0, 0, 0,
/* 91 - ??? */ 0, 0, 0, 0, 0, 0,
/* 92 - ??? */ 0, 0, 0, 0, 0, 0,
/* 93 - ??? */ 0, 0, 0, 0, 0, 0,
/* 94 - ??? */ 0, 0, 0, 0, 0, 0,
/* 95 - ??? */ 0, 0, 0, 0, 0, 0,
/* 96 - EXT_KEY */ EXTKEY, EXTKEY, EXTKEY, EXTKEY, EXTKEY, EXTKEY,
/* 97 - ??? */ 0, 0, 0, 0, 0, 0,
/* 98 - ??? */ 0, 0, 0, 0, 0, 0,
/* 99 - ??? */ 0, 0, 0, 0, 0, 0,
/*100 - ??? */ 0, 0, 0, 0, 0, 0,
/*101 - ??? */ 0, 0, 0, 0, 0, 0,
/*102 - ??? */ 0, 0, 0, 0, 0, 0,
/*103 - ??? */ 0, 0, 0, 0, 0, 0,
/*104 - ??? */ 0, 0, 0, 0, 0, 0,
/*105 - ??? */ 0, 0, 0, 0, 0, 0,
/*106 - ??? */ 0, 0, 0, 0, 0, 0,
/*107 - ??? */ 0, 0, 0, 0, 0, 0,
/*108 - ??? */ 0, 0, 0, 0, 0, 0,
/*109 - ??? */ 0, 0, 0, 0, 0, 0,
/*110 - ??? */ 0, 0, 0, 0, 0, 0,
/*111 - ??? */ 0, 0, 0, 0, 0, 0,
/*112 - ??? */ 0, 0, 0, 0, 0, 0,
/*113 - ??? */ 0, 0, 0, 0, 0, 0,
/*114 - ??? */ 0, 0, 0, 0, 0, 0,
/*115 - ??? */ 0, 0, 0, 0, 0, 0,
/*116 - ??? */ 0, 0, 0, 0, 0, 0,
/*117 - ??? */ 0, 0, 0, 0, 0, 0,
/*118 - ??? */ 0, 0, 0, 0, 0, 0,
/*119 - ??? */ 0, 0, 0, 0, 0, 0,
/*120 - ??? */ 0, 0, 0, 0, 0, 0,
/*121 - ??? */ 0, 0, 0, 0, 0, 0,
/*122 - ??? */ 0, 0, 0, 0, 0, 0,
/*123 - ??? */ 0, 0, 0, 0, 0, 0,
/*124 - ??? */ 0, 0, 0, 0, 0, 0,
/*125 - ??? */ 0, 0, 0, 0, 0, 0,
/*126 - ??? */ 0, 0, 0, 0, 0, 0,
/*127 - ??? */ 0, 0, 0, 0, 0, 0
};
|