Subversion Repositories Kolibri OS

Rev

Rev 2198 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2198 Rev 2531
1
;
1
;
2
;   KEYBOARD SCANCODE EXAMPLE
2
;   KEYBOARD SCANCODE EXAMPLE
3
;
3
;
4
;   Compile with FASM for Menuet
4
;   Compile with FASM for Menuet
5
;
5
;
6
 
6
 
7
include "lang.inc"
7
include "lang.inc"
8
include "..\..\..\macros.inc"
8
include "..\..\..\macros.inc"
9
 
9
 
10
    use32
10
    use32
11
    org    0x0
11
    org    0x0
12
 
12
 
13
    db     'MENUET01'  ; 8 byte id
13
    db     'MENUET01'  ; 8 byte id
14
    dd     0x01        ; header version
14
    dd     0x01        ; header version
15
    dd     START       ; start of code
15
    dd     START       ; start of code
16
    dd     I_END       ; size of image
16
    dd     I_END       ; size of image
17
    dd     0x1000     ; memory for app
17
    dd     0x1000     ; memory for app
18
    dd     0x1000     ; esp
18
    dd     0x1000     ; esp
19
    dd     0x0 , 0x0   ; I_Param , I_Icon
19
    dd     0x0 , 0x0   ; I_Param , I_Icon
20
 
20
 
21
START:                 ; start of execution
21
START:                 ; start of execution
22
 
22
 
23
    mov  eax,66    ; keyboard mode definitions
23
    mov  eax,66    ; keyboard mode definitions
24
    mov  ebx,1     ; set
24
    mov  ebx,1     ; set
25
    mov  ecx,1     ; return scancodes
25
    mov  ecx,1     ; return scancodes
26
    mcall
26
    mcall
27
 
27
 
28
    mov  eax,26    ; get setup for keyboard
28
    mov  eax,26    ; get setup for keyboard
29
    mov  ebx,2
29
    mov  ebx,2
30
    mov  ecx,1     ; base keymap
30
    mov  ecx,1     ; base keymap
31
    mov  edx,keymap
31
    mov  edx,keymap
32
    mcall
32
    mcall
33
 
33
 
34
    mov  eax, 48                   ; GET SYSTEM COLORS
34
    mov  eax, 48                   ; GET SYSTEM COLORS
35
    mov  ebx, 3
35
    mov  ebx, 3
36
    mov  ecx, sc
36
    mov  ecx, sc
37
    mov  edx, sizeof.system_colors
37
    mov  edx, sizeof.system_colors
38
    mcall
38
    mcall
39
 
39
 
40
  red:
40
  red:
41
    call draw_window
41
    call draw_window
42
 
42
 
43
still:
43
still:
44
 
44
 
45
    mov  eax,10                 ; wait here for event
45
    mov  eax,10                 ; wait here for event
46
    mcall
46
    mcall
47
 
47
 
48
    cmp  eax,1                  ; redraw request ?
48
    cmp  eax,1                  ; redraw request ?
49
    je   red
49
    je   red
50
    cmp  eax,2                  ; key in buffer ?
50
    cmp  eax,2                  ; key in buffer ?
51
    je   key
51
    je   key
52
    cmp  eax,3                  ; button in buffer ?
52
    cmp  eax,3                  ; button in buffer ?
53
    je   button
53
    je   button
54
 
54
 
55
    jmp  still
55
    jmp  still
56
 
56
 
57
 
57
 
58
  key:                          ; key
58
  key:                          ; key
59
    mov  eax,2                  ; just read it and ignore
59
    mov  eax,2                  ; just read it and ignore
60
    mcall
60
    mcall
61
 
61
 
62
    mov  esi,scan_codes+1
62
    mov  esi,scan_codes+1
63
    mov  edi,scan_codes+0
63
    mov  edi,scan_codes+0
64
    mov  ecx,15
64
    mov  ecx,15
65
    cld
65
    cld
66
    rep  movsb
66
    rep  movsb
67
 
67
 
68
    mov  esi,key_codes+12
68
    mov  esi,key_codes+12
69
    mov  edi,key_codes+0
69
    mov  edi,key_codes+0
70
    mov  ecx,15*12
70
    mov  ecx,15*12
71
    cld
71
    cld
72
    rep  movsb
72
    rep  movsb
73
 
73
 
74
    shr  eax,8                   ; scancode
74
    shr  eax,8                   ; scancode
75
    and  eax,0xff
75
    and  eax,0xff
76
    mov  [scan_codes+15],al
76
    mov  [scan_codes+15],al
77
 
77
 
78
    mov  [key_codes+15*12+8],dword 'Down'
78
    mov  [key_codes+15*12+8],dword 'Down'
79
    cmp  eax,128
79
    cmp  eax,128
80
    jb   no_up
80
    jb   no_up
81
    mov  [key_codes+15*12+8],dword 'Up  '
81
    mov  [key_codes+15*12+8],dword 'Up  '
82
  no_up:
82
  no_up:
83
 
83
 
84
    mov    ebx,eax
84
    mov    ebx,eax
85
    and    ebx,0x7f
85
    and    ebx,0x7f
86
 
86
 
87
    movzx  edx,byte [keymap+ebx]  ; key from keymap
87
    movzx  edx,byte [keymap+ebx]  ; key from keymap
88
    mov    [key_codes+15*12+0],edx
88
    mov    [key_codes+15*12+0],edx
89
    mov    [key_codes+15*12+4],dword '    '
89
    mov    [key_codes+15*12+4],dword '    '
90
 
90
 
91
    movzx  edx,byte [ext]
91
    movzx  edx,byte [ext]
92
    shl    edx,8
92
    shl    edx,8
93
    add    ebx,edx
93
    add    ebx,edx
94
 
94
 
95
    mov    esi,ext0-10
95
    mov    esi,ext0-10
96
  new_ext0:
96
  new_ext0:
97
    add    esi,10
97
    add    esi,10
98
    cmp    esi,ext0end
98
    cmp    esi,ext0end
99
    jg     exit_ext0
99
    jg     exit_ext0
100
    movzx  edx,word [esi]
100
    movzx  edx,word [esi]
101
    cmp    edx,ebx
101
    cmp    edx,ebx
102
    jne    new_ext0
102
    jne    new_ext0
103
    mov    edx,[esi+2]
103
    mov    edx,[esi+2]
104
    mov    [key_codes+15*12+0],edx
104
    mov    [key_codes+15*12+0],edx
105
    mov    edx,[esi+6]
105
    mov    edx,[esi+6]
106
    mov    [key_codes+15*12+4],edx
106
    mov    [key_codes+15*12+4],edx
107
  exit_ext0:
107
  exit_ext0:
108
  no_ext_off:
108
  no_ext_off:
109
 
109
 
110
    cmp  [ext2],0
110
    cmp  [ext2],0
111
    je   noext2dec
111
    je   noext2dec
112
    dec  [ext2]
112
    dec  [ext2]
113
    jne  noext2dec
113
    jne  noext2dec
114
    mov    [key_codes+15*12+0],dword '----'
114
    mov    [key_codes+15*12+0],dword '----'
115
    mov    [key_codes+15*12+4],dword '----'
115
    mov    [key_codes+15*12+4],dword '----'
116
  noext2dec:
116
  noext2dec:
117
 
117
 
118
    mov  [ext],0
118
    mov  [ext],0
119
 
119
 
120
    cmp  eax,224
120
    cmp  eax,224
121
    jne  no_ext
121
    jne  no_ext
122
    mov  [key_codes+15*12+0],dword '    '
122
    mov  [key_codes+15*12+0],dword '    '
123
    mov  [key_codes+15*12+4],dword '    '
123
    mov  [key_codes+15*12+4],dword '    '
124
    mov  [key_codes+15*12+8],dword 'Ext '
124
    mov  [key_codes+15*12+8],dword 'Ext '
125
    mov  [ext],1
125
    mov  [ext],1
126
  no_ext:
126
  no_ext:
127
 
127
 
128
    cmp  eax,225
128
    cmp  eax,225
129
    jne  no_ext2
129
    jne  no_ext2
130
    mov  [key_codes+15*12+0],dword '    '
130
    mov  [key_codes+15*12+0],dword '    '
131
    mov  [key_codes+15*12+4],dword '    '
131
    mov  [key_codes+15*12+4],dword '    '
132
    mov  [key_codes+15*12+8],dword 'Ext2'
132
    mov  [key_codes+15*12+8],dword 'Ext2'
133
    mov  [ext],2
133
    mov  [ext],2
134
    mov  [ext2],2
134
    mov  [ext2],2
135
  no_ext2:
135
  no_ext2:
136
 
136
 
137
 
137
 
138
    call draw_codes
138
    call draw_codes
139
    jmp  still
139
    jmp  still
140
 
140
 
141
 
141
 
142
 
142
 
143
  button:                       ; button
143
  button:                       ; button
144
    or   eax, -1                ; close this program
144
    or   eax, -1                ; close this program
145
    mcall
145
    mcall
146
 
146
 
147
 
147
 
148
 
148
 
149
 
149
 
150
;   *********************************************
150
;   *********************************************
151
;   *******  WINDOW DEFINITIONS AND DRAW ********
151
;   *******  WINDOW DEFINITIONS AND DRAW ********
152
;   *********************************************
152
;   *********************************************
153
 
153
 
154
 
154
 
155
draw_window:
155
draw_window:
156
 
156
 
157
 
157
 
158
    mcall 12, 1                        ; start window redraw
158
    mcall 12, 1                        ; start window redraw
159
 
159
 
160
                                   ; DRAW WINDOW
160
                                   ; DRAW WINDOW
161
    mov  eax, 0                    ; function 0 : define and draw window
161
    mov  eax, 0                    ; function 0 : define and draw window
162
    mov  ebx, 100*65536+200        ; [x start] *65536 + [x size]
162
    mov  ebx, 100*65536+200        ; [x start] *65536 + [x size]
163
    mov  ecx, 100*65536+267        ; [y start] *65536 + [y size]
163
    mov  ecx, 100*65536+267        ; [y start] *65536 + [y size]
164
    mov  edx, [sc.work]            ; color of work area RRGGBB,8->color gl
164
    mov  edx, 0xffffff	;[sc.work] ; color of work area RRGGBB,8->color gl
165
    or   edx, 0x34000000
165
    or   edx, 0x34000000
166
    mov  edi, title                ; WINDOW LABEL
166
    mov  edi, title                ; WINDOW LABEL
167
    mcall
167
    mcall
168
                                   
168
                                   
169
    mov  eax, 4
169
    mov  eax, 4
170
    mov  ebx, 15*65536+10
170
    mov  ebx, 15*65536+10
171
    xor  ecx, ecx
171
    xor  ecx, ecx
172
    mov  edx, text
172
    mov  edx, text
173
    mov  esi, text.len
173
    mov  esi, text.len
174
    mcall
174
    mcall
175
 
175
 
176
    call draw_codes
176
    call draw_codes
177
 
177
 
178
    mcall 12, 2                        ; end window redraw
178
    mcall 12, 2                        ; end window redraw
179
 
179
 
180
    ret
180
    ret
181
 
181
 
182
 
182
 
183
draw_codes:
183
draw_codes:
184
 
184
 
185
    mov  eax,47
185
    mov  eax,47
186
    mov  ebx,6*65536
186
    mov  ebx,6*65536
187
    mov  edx,15*65536+35
187
    mov  edx,15*65536+35
188
    mov  edi,0
188
    mov  edi,0
189
    mov  esi,0
189
    mov  esi,0
190
  newscan:
190
  newscan:
191
    pusha
191
    pusha
192
    mov  cx,dx
192
    mov  cx,dx
193
    shl  ecx,16
193
    shl  ecx,16
194
    add  ecx,10
194
    add  ecx,10
195
    mov  eax,13   ; filled rectangle
195
    mov  eax,13   ; filled rectangle
196
    mov  ebx,15*65536+160
196
    mov  ebx,15*65536+160
197
    mov  edx,[sc.work]
197
    mov  edx,0xffffff	;[sc.work]
198
    mcall
198
    mcall
199
    popa
199
    popa
200
    pusha
200
    pusha
201
    mov  ebx,edx
201
    mov  ebx,edx
202
    add  ebx,70*65536
202
    add  ebx,70*65536
203
    mov  eax,4    ; text
203
    mov  eax,4    ; text
204
    mov  ecx,[sc.work_text]
204
;    mov  ecx,[sc.work_text]
-
 
205
    xor  ecx,ecx
205
    mov  edx,key_codes
206
    mov  edx,key_codes
206
    imul edi,12
207
    imul edi,12
207
    add  edx,edi
208
    add  edx,edi
208
    mov  esi,12
209
    mov  esi,12
209
    mcall
210
    mcall
210
    popa
211
    popa
211
    movzx  ecx,byte [scan_codes+edi]
212
    movzx  ecx,byte [scan_codes+edi]
212
    mcall     ; number
213
    mcall     ; number
213
    inc  ecx
214
    inc  ecx
214
    add  edx,12
215
    add  edx,12
215
    inc  edi
216
    inc  edi
216
    cmp  edi,16
217
    cmp  edi,16
217
    jne  newscan
218
    jne  newscan
218
 
219
 
219
    ret
220
    ret
220
 
221
 
221
 
222
 
222
; DATA AREA
223
; DATA AREA
223
 
224
 
224
ext0:
225
ext0:
225
 
226
 
226
    db    1,0,'Esc     '
227
    db    1,0,'Esc     '
227
    db   28,0,'Enter   '
228
    db   28,0,'Enter   '
228
    db   29,0,'L-Ctrl  '
229
    db   29,0,'L-Ctrl  '
229
    db   41,0,'1/2     '
230
    db   41,0,'1/2     '
230
    db   42,0,'L-Shift '
231
    db   42,0,'L-Shift '
231
    db   54,0,'R-Shift '
232
    db   54,0,'R-Shift '
232
    db   55,0,'Num *   '
233
    db   55,0,'Num *   '
233
    db   56,0,'Alt     '
234
    db   56,0,'Alt     '
234
    db   58,0,'CapsLck '
235
    db   58,0,'CapsLck '
235
    db   59,0,'F1      '
236
    db   59,0,'F1      '
236
    db   60,0,'F2      '
237
    db   60,0,'F2      '
237
    db   61,0,'F3      '
238
    db   61,0,'F3      '
238
    db   62,0,'F4      '
239
    db   62,0,'F4      '
239
    db   63,0,'F5      '
240
    db   63,0,'F5      '
240
    db   64,0,'F6      '
241
    db   64,0,'F6      '
241
    db   65,0,'F7      '
242
    db   65,0,'F7      '
242
    db   66,0,'F8      '
243
    db   66,0,'F8      '
243
    db   67,0,'F9      '
244
    db   67,0,'F9      '
244
    db   68,0,'F10     '
245
    db   68,0,'F10     '
245
    db   69,0,'NumLock '
246
    db   69,0,'NumLock '
246
    db   70,0,'SclLock '
247
    db   70,0,'SclLock '
247
    db   71,0,'Num 7   '
248
    db   71,0,'Num 7   '
248
    db   72,0,'Num 8   '
249
    db   72,0,'Num 8   '
249
    db   73,0,'Num 9   '
250
    db   73,0,'Num 9   '
250
    db   74,0,'Num -   '
251
    db   74,0,'Num -   '
251
    db   75,0,'Num 4   '
252
    db   75,0,'Num 4   '
252
    db   76,0,'Num 5   '
253
    db   76,0,'Num 5   '
253
    db   77,0,'Num 6   '
254
    db   77,0,'Num 6   '
254
    db   78,0,'Num +   '
255
    db   78,0,'Num +   '
255
    db   79,0,'Num 1   '
256
    db   79,0,'Num 1   '
256
    db   80,0,'Num 2   '
257
    db   80,0,'Num 2   '
257
    db   81,0,'Num 3   '
258
    db   81,0,'Num 3   '
258
    db   82,0,'Num 0   '
259
    db   82,0,'Num 0   '
259
    db   83,0,'Num ,   '
260
    db   83,0,'Num ,   '
260
    db   87,0,'F11     '
261
    db   87,0,'F11     '
261
    db   88,0,'F12     '
262
    db   88,0,'F12     '
262
 
263
 
263
    db   28,1,'Num Ent '
264
    db   28,1,'Num Ent '
264
    db   29,1,'R-Ctrl  '
265
    db   29,1,'R-Ctrl  '
265
    db   53,1,'Num /   '
266
    db   53,1,'Num /   '
266
    db   55,1,'PrScr   '
267
    db   55,1,'PrScr   '
267
    db   56,1,'Alt Gr  '
268
    db   56,1,'Alt Gr  '
268
    db   71,1,'Home    '
269
    db   71,1,'Home    '
269
    db   72,1,'Up-A    '
270
    db   72,1,'Up-A    '
270
    db   73,1,'PgUp    '
271
    db   73,1,'PgUp    '
271
    db   75,1,'Left-A  '
272
    db   75,1,'Left-A  '
272
    db   77,1,'Right-A '
273
    db   77,1,'Right-A '
273
    db   79,1,'End     '
274
    db   79,1,'End     '
274
    db   80,1,'Down-A  '
275
    db   80,1,'Down-A  '
275
    db   81,1,'PgDown  '
276
    db   81,1,'PgDown  '
276
    db   82,1,'Insert  '
277
    db   82,1,'Insert  '
277
    db   83,1,'Delete  '
278
    db   83,1,'Delete  '
278
    db   91,1,'Menu-1  '
279
    db   91,1,'Menu-1  '
279
    db   92,1,'Menu-2  '
280
    db   92,1,'Menu-2  '
280
    db   93,1,'Menu-3  '
281
    db   93,1,'Menu-3  '
281
 
282
 
282
    db   29,2,'Break   '
283
    db   29,2,'Break   '
283
 
284
 
284
ext0end:
285
ext0end:
285
 
286
 
286
 
287
 
287
if lang eq ru
288
if lang eq ru
288
  text:
289
  text:
289
      db '‘—ˆ’›‚€ž „€›… ‘ Š‹€‚ˆ€’“›'
290
      db '‘—ˆ’›‚€ž „€›… ‘ Š‹€‚ˆ€’“›'
290
  .len = $ - text
291
  .len = $ - text
291
 
292
 
292
  title      db   '‘ª ­ª®¤ë ª« ¢¨ âãàë',0
293
  title      db   '‘ª ­ª®¤ë ª« ¢¨ âãàë',0
293
else
294
else
294
  text:
295
  text:
295
      db 'READING RAW SCANCODE DATA'
296
      db 'READING RAW SCANCODE DATA'
296
  .len = $ - text
297
  .len = $ - text
297
 
298
 
298
  title      db   'Keyboard scancodes',0
299
  title      db   'Keyboard scancodes',0
299
end if
300
end if
300
 
301
 
301
ext  db 0x0
302
ext  db 0x0
302
ext2 db 0x0
303
ext2 db 0x0
303
 
304
 
304
pos dd 0x0
305
pos dd 0x0
305
 
306
 
306
I_END:
307
I_END:
307
 
308
 
308
sc system_colors
309
sc system_colors
309
 
310
 
310
scan_codes: times 16 db ?
311
scan_codes: times 16 db ?
311
 
312
 
312
key_codes:  times 16 dd ?,?,?
313
key_codes:  times 16 dd ?,?,?
313
 
314
 
314
keymap:
315
keymap: