Subversion Repositories Kolibri OS

Rev

Rev 1863 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1863 Rev 1937
1
@^ fix macro comment {
1
@^ fix macro comment {
2
^@ fix }
2
^@ fix }
3
 
3
 
4
; -------------------------
4
; -------------------------
5
macro library [lname,fname]
5
macro library [lname,fname]
6
{
6
{
7
  forward
7
  forward
8
    dd __#lname#_library_table__,__#lname#_library_name__
8
    dd __#lname#_library_table__,__#lname#_library_name__
9
  common
9
  common
10
    dd 0
10
    dd 0
11
  forward
11
  forward
12
    align 4
12
    align 4
13
    __#lname#_library_name__ db fname,0
13
    __#lname#_library_name__ db fname,0
14
}
14
}
15
 
15
 
16
macro import lname,[name,sname]
16
macro import lname,[name,sname]
17
{
17
{
18
  common
18
  common
19
    align 4
19
    align 4
20
    __#lname#_library_table__:
20
    __#lname#_library_table__:
21
  forward
21
  forward
22
    if used name
22
    if used name
23
      name dd __#name#_import_name__
23
      name dd __#name#_import_name__
24
    end if
24
    end if
25
  common
25
  common
26
    dd 0
26
    dd 0
27
  forward
27
  forward
28
    if used name
28
    if used name
29
      align 4
29
      align 4
30
      __#name#_import_name__ db sname,0
30
      __#name#_import_name__ db sname,0
31
    end if
31
    end if
32
}
32
}
33
 
33
 
34
macro export [name,sname]
34
macro export [name,sname]
35
{
35
{
36
  forward
36
  forward
37
    dd __#name#_export_name__,name
37
    dd __#name#_export_name__,name
38
  common
38
  common
39
    dd 0
39
    dd 0
40
  forward
40
  forward
41
    align 4
41
    align 4
42
    __#name#_export_name__ db sname,0
42
    __#name#_export_name__ db sname,0
43
}
43
}
44
; -------------------------
44
; -------------------------
45
 
45
 
46
macro m2m dest,src {
46
macro m2m dest,src {
47
 push src
47
 push src
48
 pop  dest
48
 pop  dest
49
}
49
}
50
 
50
 
51
 
51
 
52
macro iglobal {
52
macro iglobal {
53
  IGlobals equ IGlobals,
53
  IGlobals equ IGlobals,
54
  macro __IGlobalBlock { }
54
  macro __IGlobalBlock { }
55
 
55
 
56
macro uglobal {
56
macro uglobal {
57
  UGlobals equ UGlobals,
57
  UGlobals equ UGlobals,
58
  macro __UGlobalBlock { }
58
  macro __UGlobalBlock { }
59
 
59
 
60
endg fix }	; Use endg for ending iglobal and uglobal blocks.
60
endg fix }	; Use endg for ending iglobal and uglobal blocks.
61
 
61
 
62
 
62
 
63
macro IncludeIGlobals{
63
macro IncludeIGlobals{
64
  macro IGlobals dummy,[n] \{ __IGlobalBlock
64
  macro IGlobals dummy,[n] \{ __IGlobalBlock
65
     purge __IGlobalBlock  \}
65
     purge __IGlobalBlock  \}
66
  match I, IGlobals \{ I \} }
66
  match I, IGlobals \{ I \} }
67
 
67
 
68
macro IncludeUGlobals{
68
macro IncludeUGlobals{
69
  macro UGlobals dummy,[n] \{
69
  macro UGlobals dummy,[n] \{
70
    \common
70
    \common
71
      \local begin, size
71
      \local begin, size
72
      begin = $
72
      begin = $
73
      virtual at $
73
      virtual at $
74
    \forward
74
    \forward
75
      __UGlobalBlock
75
      __UGlobalBlock
76
      purge __UGlobalBlock
76
      purge __UGlobalBlock
77
    \common
77
    \common
78
      size = $ - begin
78
      size = $ - begin
79
    end virtual
79
    end virtual
80
    rb size
80
    rb size
81
  \}
81
  \}
82
  match U, UGlobals \{ U \} }
82
  match U, UGlobals \{ U \} }
83
 
83
 
84
uglobal
84
uglobal
85
endg
85
endg
86
 
86
 
87
iglobal
87
iglobal
88
endg
88
endg
89
 
89
 
90
 
90
 
91
; new application structure
91
; new application structure
92
macro meos_app_start
92
macro meos_app_start
93
 {
93
 {
94
  use32
94
  use32
95
  org 0x0
95
  org 0x0
96
 
96
 
97
  db 'MENUET01'
97
  db 'MENUET01'
98
  dd 0x01
98
  dd 0x01
99
  dd __start
99
  dd __start
100
  dd __end
100
  dd __end
101
  dd __memory
101
  dd __memory
102
  dd __stack
102
  dd __stack
103
 
103
 
104
  if used __params & ~defined __params
104
  if used __params & ~defined __params
105
    dd __params
105
    dd __params
106
  else
106
  else
107
    dd 0x0
107
    dd 0x0
108
  end if
108
  end if
109
 
109
 
110
  dd 0x0
110
  dd 0x0
111
 }
111
 }
112
MEOS_APP_START fix meos_app_start
112
MEOS_APP_START fix meos_app_start
113
 
113
 
114
macro code
114
macro code
115
 {
115
 {
116
  __start:
116
  __start:
117
 }
117
 }
118
CODE fix code
118
CODE fix code
119
 
119
 
120
macro data
120
macro data
121
 {
121
 {
122
  __data:
122
  __data:
123
  IncludeIGlobals
123
  IncludeIGlobals
124
 }
124
 }
125
DATA fix data
125
DATA fix data
126
 
126
 
127
macro udata
127
macro udata
128
 {
128
 {
129
  if used __params & ~defined __params
129
  if used __params & ~defined __params
130
    __params:
130
    __params:
131
      db 0
131
      db 0
132
    __end:
132
    __end:
133
      rb 255
133
      rb 255
134
  else
134
  else
135
    __end:
135
    __end:
136
  end if
136
  end if
137
  __udata:
137
  __udata:
138
  IncludeUGlobals
138
  IncludeUGlobals
139
 }
139
 }
140
UDATA fix udata
140
UDATA fix udata
141
 
141
 
142
macro meos_app_end
142
macro meos_app_end
143
 {
143
 {
144
  align 32
144
  align 32
145
  rb 2048
145
  rb 2048
146
  __stack:
146
  __stack:
147
  __memory:
147
  __memory:
148
 }
148
 }
149
MEOS_APP_END fix meos_app_end
149
MEOS_APP_END fix meos_app_end
150
 
150
 
151
 
151
 
152
; macro for defining multiline text data
152
; macro for defining multiline text data
153
struc mstr [sstring]
153
struc mstr [sstring]
154
 {
154
 {
155
  forward
155
  forward
156
    local ssize
156
    local ssize
157
    virtual at 0
157
    virtual at 0
158
      db sstring
158
      db sstring
159
      ssize = $
159
      ssize = $
160
    end virtual
160
    end virtual
161
    dd ssize
161
    dd ssize
162
    db sstring
162
    db sstring
163
  common
163
  common
164
    dd -1
164
    dd -1
165
 }
165
 }
166
 
166
 
167
; macro for defining multiline text data
167
; macro for defining multiline text data
168
struc mls [sstring]
168
struc mls [sstring]
169
 {
169
 {
170
  forward
170
  forward
171
    local ssize
171
    local ssize
172
    virtual at 0
172
    virtual at 0
173
      db sstring  ; mod
173
      db sstring  ; mod
174
      ssize = $
174
      ssize = $
175
    end virtual
175
    end virtual
176
    db ssize
176
    db ssize
177
    db sstring
177
    db sstring
178
  common
178
  common
179
    db -1	  ; mod
179
    db -1	  ; mod
180
 }
180
 }
181
 
181
 
182
 
182
 
183
 
183
 
184
; strings
184
; strings
185
macro sz name,[data] {	     ; from MFAR [mike.dld]
185
macro sz name,[data] {	     ; from MFAR [mike.dld]
186
 common
186
 common
187
  if used name
187
  if used name
188
   name db data
188
   name db data
189
   .size = $-name
189
   .size = $-name
190
  end if
190
  end if
191
}
191
}
192
 
192
 
193
macro lsz name,[lng,data] {  ; from MFAR [mike.dld]
193
macro lsz name,[lng,data] {  ; from MFAR [mike.dld]
194
 common
194
 common
195
  if used name
195
  if used name
196
   label name
196
   label name
197
 forward
197
 forward
198
  if lang eq lng
198
  if lang eq lng
199
   db data
199
   db data
200
  end if
200
  end if
201
 common
201
 common
202
   .size = $-name
202
   .size = $-name
203
  end if
203
  end if
204
}
204
}
205
 
205
 
206
macro szc name,elsz,[data] {	     ; from MFAR [mike.dld]
206
macro szc name,elsz,[data] {	     ; from MFAR [mike.dld]
207
 common
207
 common
208
  local s,m
208
  local s,m
209
  m = 0
209
  m = 0
210
  if used name
210
  if used name
211
   label name
211
   label name
212
 forward
212
 forward
213
   virtual at 0
213
   virtual at 0
214
    db data
214
    db data
215
    s = $
215
    s = $
216
   end virtual
216
   end virtual
217
   d#elsz s
217
   d#elsz s
218
   if m < s
218
   if m < s
219
    m = s
219
    m = s
220
   end if
220
   end if
221
   db data
221
   db data
222
 common
222
 common
223
   .size = $-name
223
   .size = $-name
224
   .maxl = m
224
   .maxl = m
225
  end if
225
  end if
226
}
226
}
227
 
227
 
228
macro lszc name,elsz,[lng,data] {  ; from MFAR [mike.dld]
228
macro lszc name,elsz,[lng,data] {  ; from MFAR [mike.dld]
229
 common
229
 common
230
  local s,m,c
230
  local s,m,c
231
  m = 0
231
  m = 0
232
  c = 0
232
  c = 0
233
  if used name
233
  if used name
234
   label name
234
   label name
235
 forward
235
 forward
236
  if lang eq lng
236
  if lang eq lng
237
   virtual at 0
237
   virtual at 0
238
    db data
238
    db data
239
    s = $
239
    s = $
240
   end virtual
240
   end virtual
241
   d#elsz s
241
   d#elsz s
242
   if m < s
242
   if m < s
243
    m = s
243
    m = s
244
   end if
244
   end if
245
   db data
245
   db data
246
   c = c+1
246
   c = c+1
247
  end if
247
  end if
248
 common
248
 common
249
   .size  = $-name
249
   .size  = $-name
250
   .maxl  = m
250
   .maxl  = m
251
   .count = c
251
   .count = c
252
  end if
252
  end if
253
}
253
}
254
 
254
 
255
 
255
 
256
; easy system call macro
256
; easy system call macro
257
macro mpack dest, hsrc, lsrc
257
macro mpack dest, hsrc, lsrc
258
{
258
{
259
  if (hsrc eqtype 0) & (lsrc eqtype 0)
259
  if (hsrc eqtype 0) & (lsrc eqtype 0)
260
    mov dest, (hsrc) shl 16 + lsrc
260
    mov dest, (hsrc) shl 16 + lsrc
261
  else
261
  else
262
    if (hsrc eqtype 0) & (~lsrc eqtype 0)
262
    if (hsrc eqtype 0) & (~lsrc eqtype 0)
263
      mov dest, (hsrc) shl 16
263
      mov dest, (hsrc) shl 16
264
      add dest, lsrc
264
      add dest, lsrc
265
    else
265
    else
266
      mov dest, hsrc
266
      mov dest, hsrc
267
      shl dest, 16
267
      shl dest, 16
268
      add dest, lsrc
268
      add dest, lsrc
269
    end if
269
    end if
270
  end if
270
  end if
271
}
271
}
272
 
272
 
273
macro __mov reg,a,b {	    ; mike.dld
273
macro __mov reg,a,b {	    ; mike.dld
274
 if (~a eq)&(~b eq)
274
 if (~a eq)&(~b eq)
275
   mpack reg,a,b
275
   mpack reg,a,b
276
 else if (~a eq)&(b eq)
276
 else if (~a eq)&(b eq)
277
   mov reg,a
277
   mov reg,a
278
 end if
278
 end if
279
}
279
}
280
 
280
 
281
 
281
 
282
include 'config.inc'
282
include 'config.inc'
283
__CPU_type     equ     p5
283
__CPU_type     equ     p5
284
SYSENTER_VAR	equ	0
284
SYSENTER_VAR	equ	0
285
 
285
 
286
macro mcall a,b,c,d,e,f {   ; mike.dld, updated by Ghost for Fast System Calls
286
macro mcall a,b,c,d,e,f {   ; mike.dld, updated by Ghost for Fast System Calls
287
 local	..ret_point
-
 
288
 __mov eax,a
287
 __mov eax,a
289
 __mov ebx,b
288
 __mov ebx,b
290
 __mov ecx,c
289
 __mov ecx,c
291
 __mov edx,d
290
 __mov edx,d
292
 __mov esi,e
291
 __mov esi,e
293
 __mov edi,f
292
 __mov edi,f
294
 
-
 
295
 if __CPU_type eq p5
293
 
296
	int	0x40
-
 
297
 else
-
 
298
  if __CPU_type eq p6
-
 
299
	push	ebp
-
 
300
	mov	ebp, esp
-
 
301
	push	..ret_point	; it may be 2 or 5 byte
-
 
302
	sysenter
-
 
303
 ..ret_point:
-
 
304
	pop	edx
-
 
305
	pop	ecx
-
 
306
 
-
 
307
  else
-
 
308
   if __CPU_type eq k6
-
 
309
	push	ecx
-
 
310
	syscall
-
 
311
	pop	ecx
-
 
312
   else
-
 
313
	display 'ERROR : unknown CPU type (set to p5)', 10, 13
-
 
314
	__CPU_type equ p5
-
 
315
	int	0x40
-
 
316
   end if
-
 
317
  end if
-
 
318
 end if
294
	int	0x40
319
}
295
}
320
 
296
 
321
 
297
 
322
; -------------------------
298
; -------------------------
323
macro header a,[b] {
299
macro header a,[b] {
324
 common
300
 common
325
  use32
301
  use32
326
  org 0
302
  org 0
327
  db 'MENUET',a
303
  db 'MENUET',a
328
 forward
304
 forward
329
  if b eq
305
  if b eq
330
   dd 0
306
   dd 0
331
  else
307
  else
332
   dd b
308
   dd b
333
  end if }
309
  end if }
334
macro section name { align 16
310
macro section name { align 16
335
 label name }
311
 label name }
336
macro func name {
312
macro func name {
337
 if ~used name
313
 if ~used name
338
  display 'FUNC NOT USED: ',`name,13,10
314
  display 'FUNC NOT USED: ',`name,13,10
339
 else
315
 else
340
  align 4
316
  align 4
341
  name:
317
  name:
342
  ;diff16 `name,0,name
318
  ;diff16 `name,0,name
343
;pushad
319
;pushad
344
;pushfd
320
;pushfd
345
;dps `name
321
;dps `name
346
;newline
322
;newline
347
;mcall 5,1
323
;mcall 5,1
348
;popfd
324
;popfd
349
;popad
325
;popad
350
}
326
}
351
macro endf { end if }
327
macro endf { end if }
352
 
328
 
353
macro diff16 title,l1,l2
329
macro diff16 title,l1,l2
354
 {
330
 {
355
  local s,d
331
  local s,d
356
  s = l2-l1
332
  s = l2-l1
357
  display title,': 0x'
333
  display title,': 0x'
358
  repeat 8
334
  repeat 8
359
   d = '0' + s shr ((8-%) shl 2) and $0F
335
   d = '0' + s shr ((8-%) shl 2) and $0F
360
   if d > '9'
336
   if d > '9'
361
    d = d + 'A'-'9'-1
337
    d = d + 'A'-'9'-1
362
   end if
338
   end if
363
   display d
339
   display d
364
  end repeat
340
  end repeat
365
  display 13,10
341
  display 13,10
366
 }
342
 }
367
 
343
 
368
macro diff10 title,l1,l2
344
macro diff10 title,l1,l2
369
 {
345
 {
370
  local s,d,z,m
346
  local s,d,z,m
371
  s = l2-l1
347
  s = l2-l1
372
  z = 0
348
  z = 0
373
  m = 1000000000
349
  m = 1000000000
374
  display title,': '
350
  display title,': '
375
  repeat 10
351
  repeat 10
376
   d = '0' + s / m
352
   d = '0' + s / m
377
   s = s - (s/m)*m
353
   s = s - (s/m)*m
378
   m = m / 10
354
   m = m / 10
379
   if d <> '0'
355
   if d <> '0'
380
    z = 1
356
    z = 1
381
   end if
357
   end if
382
   if z <> 0
358
   if z <> 0
383
    display d
359
    display d
384
   end if
360
   end if
385
  end repeat
361
  end repeat
386
  display 13,10
362
  display 13,10
387
 }
363
 }
388
 
364
 
389
; optimize the code for size
365
; optimize the code for size
390
__regs fix 
366
__regs fix 
391
 
367
 
392
macro add arg1,arg2
368
macro add arg1,arg2
393
 {
369
 {
394
   if (arg2 eqtype 0)
370
   if (arg2 eqtype 0)
395
      if (arg2) = 1
371
      if (arg2) = 1
396
	 inc arg1
372
	 inc arg1
397
      else
373
      else
398
	 add arg1,arg2
374
	 add arg1,arg2
399
      end if
375
      end if
400
   else
376
   else
401
      add arg1,arg2
377
      add arg1,arg2
402
   end if
378
   end if
403
 }
379
 }
404
 
380
 
405
macro sub arg1,arg2
381
macro sub arg1,arg2
406
 {
382
 {
407
   if (arg2 eqtype 0)
383
   if (arg2 eqtype 0)
408
      if (arg2) = 1
384
      if (arg2) = 1
409
	 dec arg1
385
	 dec arg1
410
      else
386
      else
411
	 sub arg1,arg2
387
	 sub arg1,arg2
412
      end if
388
      end if
413
   else
389
   else
414
      sub arg1,arg2
390
      sub arg1,arg2
415
   end if
391
   end if
416
 }
392
 }
417
 
393
 
418
macro mov arg1,arg2
394
macro mov arg1,arg2
419
 {
395
 {
420
   if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
396
   if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
421
      if (arg2) = 0
397
      if (arg2) = 0
422
	 xor arg1,arg1
398
	 xor arg1,arg1
423
      else if (arg2) = 1
399
      else if (arg2) = 1
424
	 xor arg1,arg1
400
	 xor arg1,arg1
425
	 inc arg1
401
	 inc arg1
426
      else if (arg2) = -1
402
      else if (arg2) = -1
427
	 or  arg1,-1
403
	 or  arg1,-1
428
      else if (arg2) > -128 & (arg2) < 128
404
      else if (arg2) > -128 & (arg2) < 128
429
	 push arg2
405
	 push arg2
430
	 pop  arg1
406
	 pop  arg1
431
      else
407
      else
432
	 mov  arg1,arg2
408
	 mov  arg1,arg2
433
      end if
409
      end if
434
   else
410
   else
435
      mov arg1,arg2
411
      mov arg1,arg2
436
   end if
412
   end if
437
 }
413
 }
438
 
414
 
439
 
415
 
440
macro RGB [a] {
416
macro RGB [a] {
441
 common
417
 common
442
  match (r=,g=,b),a \{
418
  match (r=,g=,b),a \{
443
   \dd ((r) shl 16) or ((g) shl 8) or (b)
419
   \dd ((r) shl 16) or ((g) shl 8) or (b)
444
  \}
420
  \}
445
}
421
}
446
 
422
 
447
 
423
 
448
struc POINT _t,_dx,_dy {
424
struc POINT _t,_dx,_dy {
449
 .x _t _dx
425
 .x _t _dx
450
 .y _t _dy
426
 .y _t _dy
451
}
427
}
452
 
428
 
453
; structure definition helper
429
; structure definition helper
454
include 'struct.inc'
430
include 'struct.inc'
455
 
431
 
456
struct RECT
432
struct RECT
457
  left	 dd ?
433
  left	 dd ?
458
  top	 dd ?
434
  top	 dd ?
459
  right  dd ?
435
  right  dd ?
460
  bottom dd ?
436
  bottom dd ?
461
ends
437
ends
462
 
438
 
463
struct BOX
439
struct BOX
464
  left	 dd ?
440
  left	 dd ?
465
  top	 dd ?
441
  top	 dd ?
466
  width  dd ?
442
  width  dd ?
467
  height dd ?
443
  height dd ?
468
ends
444
ends
469
 
445
 
470
; structures used in MeOS
446
; structures used in MeOS
471
struct process_information
447
struct process_information
472
  cpu_usage		  dd ?	; +0
448
  cpu_usage		  dd ?	; +0
473
  window_stack_position   dw ?	; +4
449
  window_stack_position   dw ?	; +4
474
  window_stack_value	  dw ?	; +6
450
  window_stack_value	  dw ?	; +6
475
			  dw ?	; +8
451
			  dw ?	; +8
476
  process_name		  rb 12 ; +10
452
  process_name		  rb 12 ; +10
477
  memory_start		  dd ?	; +22
453
  memory_start		  dd ?	; +22
478
  used_memory		  dd ?	; +26
454
  used_memory		  dd ?	; +26
479
  PID			  dd ?	; +30
455
  PID			  dd ?	; +30
480
  box			  BOX	; +34
456
  box			  BOX	; +34
481
  slot_state		  dw ?	; +50
457
  slot_state		  dw ?	; +50
482
			  dw ?	; +52
458
			  dw ?	; +52
483
  client_box		  BOX	; +54
459
  client_box		  BOX	; +54
484
  wnd_state		  db ?	; +70
460
  wnd_state		  db ?	; +70
485
  rb (1024-71)
461
  rb (1024-71)
486
ends
462
ends
487
 
463
 
488
struct system_colors
464
struct system_colors
489
  frame 	   dd ?
465
  frame 	   dd ?
490
  grab		   dd ?
466
  grab		   dd ?
491
  grab_button	   dd ?
467
  grab_button	   dd ?
492
  grab_button_text dd ?
468
  grab_button_text dd ?
493
  grab_text	   dd ?
469
  grab_text	   dd ?
494
  work		   dd ?
470
  work		   dd ?
495
  work_button	   dd ?
471
  work_button	   dd ?
496
  work_button_text dd ?
472
  work_button_text dd ?
497
  work_text	   dd ?
473
  work_text	   dd ?
498
  work_graph	   dd ?
474
  work_graph	   dd ?
499
ends
475
ends
500
 
476
 
501
struct FILEDATE
477
struct FILEDATE
502
  Second db ?
478
  Second db ?
503
  Minute db ?
479
  Minute db ?
504
  Hour	 db ?
480
  Hour	 db ?
505
	 db ?
481
	 db ?
506
  Day	 db ?
482
  Day	 db ?
507
  Month  db ?
483
  Month  db ?
508
  Year	 dw ?
484
  Year	 dw ?
509
ends
485
ends
510
 
486
 
511
struct FILEINFO
487
struct FILEINFO
512
  Attributes dd ?
488
  Attributes dd ?
513
  IsUnicode  db ?
489
  IsUnicode  db ?
514
	     db 3 dup(?)
490
	     db 3 dup(?)
515
  DateCreate FILEDATE
491
  DateCreate FILEDATE
516
  DateAccess FILEDATE
492
  DateAccess FILEDATE
517
  DateModify FILEDATE
493
  DateModify FILEDATE
518
  Size	     dq ?
494
  Size	     dq ?
519
ends
495
ends
520
 
496
 
521
; constants
497
; constants
522
 
498
 
523
; events
499
; events
524
EV_IDLE        = 0
500
EV_IDLE        = 0
525
EV_TIMER       = 0
501
EV_TIMER       = 0
526
EV_REDRAW      = 1
502
EV_REDRAW      = 1
527
EV_KEY	       = 2
503
EV_KEY	       = 2
528
EV_BUTTON      = 3
504
EV_BUTTON      = 3
529
EV_EXIT        = 4
505
EV_EXIT        = 4
530
EV_BACKGROUND  = 5
506
EV_BACKGROUND  = 5
531
EV_MOUSE       = 6
507
EV_MOUSE       = 6
532
EV_IPC	       = 7
508
EV_IPC	       = 7
533
EV_STACK       = 8
509
EV_STACK       = 8
534
 
510
 
535
; event mask bits for function 40
511
; event mask bits for function 40
536
EVM_REDRAW     =	1b
512
EVM_REDRAW     =	1b
537
EVM_KEY        =       10b
513
EVM_KEY        =       10b
538
EVM_BUTTON     =      100b
514
EVM_BUTTON     =      100b
539
EVM_EXIT       =     1000b
515
EVM_EXIT       =     1000b
540
EVM_BACKGROUND =    10000b
516
EVM_BACKGROUND =    10000b
541
EVM_MOUSE      =   100000b
517
EVM_MOUSE      =   100000b
542
EVM_IPC        =  1000000b
518
EVM_IPC        =  1000000b
543
EVM_STACK      = 10000000b
519
EVM_STACK      = 10000000b