Subversion Repositories Kolibri OS

Rev

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

Rev 7134 Rev 7672
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 szZ name,[data] {      ; same as sz, but for zero terminated string [dunkaist]
193
macro szZ name,[data] {      ; same as sz, but for zero terminated string [dunkaist]
194
 common
194
 common
195
  if used name
195
  if used name
196
   name db data,0
196
   name db data,0
197
   .size = $-name-1
197
   .size = $-name-1
198
  end if
198
  end if
199
}
199
}
200
sz0 fix szZ
200
sz0 fix szZ
201
 
201
 
202
macro lsz name,[lng,data] {  ; from MFAR [mike.dld]
202
macro lsz name,[lng,data] {  ; from MFAR [mike.dld]
203
 common
203
 common
204
  if used name
204
  if used name
205
   label name
205
   label name
206
 forward
206
 forward
207
  if lang eq lng
207
  if lang eq lng
208
   db data
208
   db data
209
  end if
209
  end if
210
 common
210
 common
211
   .size = $-name
211
   .size = $-name
212
  end if
212
  end if
213
}
213
}
214
 
214
 
215
macro szc name,elsz,[data] {         ; from MFAR [mike.dld]
215
macro szc name,elsz,[data] {         ; from MFAR [mike.dld]
216
 common
216
 common
217
  local s,m
217
  local s,m
218
  m = 0
218
  m = 0
219
  if used name
219
  if used name
220
   label name
220
   label name
221
 forward
221
 forward
222
   virtual at 0
222
   virtual at 0
223
    db data
223
    db data
224
    s = $
224
    s = $
225
   end virtual
225
   end virtual
226
   d#elsz s
226
   d#elsz s
227
   if m < s
227
   if m < s
228
    m = s
228
    m = s
229
   end if
229
   end if
230
   db data
230
   db data
231
 common
231
 common
232
   .size = $-name
232
   .size = $-name
233
   .maxl = m
233
   .maxl = m
234
  end if
234
  end if
235
}
235
}
236
 
236
 
237
macro lszc name,elsz,[lng,data] {  ; from MFAR [mike.dld]
237
macro lszc name,elsz,[lng,data] {  ; from MFAR [mike.dld]
238
 common
238
 common
239
  local s,m,c
239
  local s,m,c
240
  m = 0
240
  m = 0
241
  c = 0
241
  c = 0
242
  if used name
242
  if used name
243
   label name
243
   label name
244
 forward
244
 forward
245
  if lang eq lng
245
  if lang eq lng
246
   virtual at 0
246
   virtual at 0
247
    db data
247
    db data
248
    s = $
248
    s = $
249
   end virtual
249
   end virtual
250
   d#elsz s
250
   d#elsz s
251
   if m < s
251
   if m < s
252
    m = s
252
    m = s
253
   end if
253
   end if
254
   db data
254
   db data
255
   c = c+1
255
   c = c+1
256
  end if
256
  end if
257
 common
257
 common
258
   .size  = $-name
258
   .size  = $-name
259
   .maxl  = m
259
   .maxl  = m
260
   .count = c
260
   .count = c
261
  end if
261
  end if
262
}
262
}
263
 
263
 
264
 
264
 
265
; easy system call macro
265
; easy system call macro
266
macro mpack dest, hsrc, lsrc
266
macro mpack dest, hsrc, lsrc
267
{
267
{
268
  if (hsrc eqtype 0) & (lsrc eqtype 0)
268
  if (hsrc eqtype 0) & (lsrc eqtype 0)
269
    mov dest, (hsrc) shl 16 + lsrc
269
    mov dest, (hsrc) shl 16 + lsrc
270
  else
270
  else
271
    if (hsrc eqtype 0) & (~lsrc eqtype 0)
271
    if (hsrc eqtype 0) & (~lsrc eqtype 0)
272
      mov dest, (hsrc) shl 16
272
      mov dest, (hsrc) shl 16
273
      add dest, lsrc
273
      add dest, lsrc
274
    else
274
    else
275
      mov dest, hsrc
275
      mov dest, hsrc
276
      shl dest, 16
276
      shl dest, 16
277
      add dest, lsrc
277
      add dest, lsrc
278
    end if
278
    end if
279
  end if
279
  end if
280
}
280
}
281
 
281
 
282
macro __mov reg,a,b {       ; mike.dld
282
macro __mov reg,a,b {       ; mike.dld
283
 if (~a eq)&(~b eq)
283
 if (~a eq)&(~b eq)
284
   mpack reg,a,b
284
   mpack reg,a,b
285
 else if (~a eq)&(b eq)
285
 else if (~a eq)&(b eq)
286
   mov reg,a
286
   mov reg,a
287
 end if
287
 end if
288
}
288
}
289
 
289
 
290
 
290
 
291
include 'config.inc'
291
include 'config.inc'
292
;__CPU_type equ p5
292
;__CPU_type equ p5
293
SYSENTER_VAR    equ 0
293
SYSENTER_VAR    equ 0
294
 
294
 
295
macro mcall a,b,c,d,e,f {   ; mike.dld, updated by Ghost for Fast System Calls
295
macro mcall a,b,c,d,e,f,g {   ; mike.dld, updated by Ghost for Fast System Calls
296
 local  ..ret_point
296
 local  ..ret_point
297
 __mov eax,a
297
 __mov eax,a
298
 __mov ebx,b
298
 __mov ebx,b
299
 __mov ecx,c
299
 __mov ecx,c
300
 __mov edx,d
300
 __mov edx,d
301
 __mov esi,e
301
 __mov esi,e
302
 __mov edi,f
302
 __mov edi,f
-
 
303
 __mov ebp,g
303
 
304
 
304
 if __CPU_type eq p5
305
 if __CPU_type eq p5
305
        int     0x40
306
        int     0x40
306
 else
307
 else
307
  if __CPU_type eq p6
308
  if __CPU_type eq p6
308
        push    ebp
309
        push    ebp
309
        mov     ebp, esp
310
        mov     ebp, esp
310
        push    ..ret_point     ; it may be 2 or 5 byte
311
        push    ..ret_point     ; it may be 2 or 5 byte
311
        sysenter
312
        sysenter
312
 ..ret_point:
313
 ..ret_point:
313
        pop     edx
314
        pop     edx
314
        pop     ecx
315
        pop     ecx
315
 
316
 
316
  else
317
  else
317
   if __CPU_type eq k6
318
   if __CPU_type eq k6
318
        push    ecx
319
        push    ecx
319
        syscall
320
        syscall
320
        pop     ecx
321
        pop     ecx
321
   else
322
   else
322
        display 'ERROR : unknown CPU type (set to p5)', 10, 13
323
        display 'ERROR : unknown CPU type (set to p5)', 10, 13
323
        __CPU_type equ p5
324
        __CPU_type equ p5
324
        int     0x40
325
        int     0x40
325
   end if
326
   end if
326
  end if
327
  end if
327
 end if
328
 end if
328
}
329
}
329
 
330
 
330
 
331
 
331
; -------------------------
332
; -------------------------
332
macro __header a,[b] {
333
macro __header a,[b] {
333
 common
334
 common
334
  use32
335
  use32
335
  org 0
336
  org 0
336
  db 'MENUET',a
337
  db 'MENUET',a
337
 forward
338
 forward
338
  if b eq
339
  if b eq
339
   dd 0
340
   dd 0
340
  else
341
  else
341
   dd b
342
   dd b
342
  end if
343
  end if
343
}
344
}
344
 
345
 
345
macro __section name {
346
macro __section name {
346
 align 16
347
 align 16
347
 label name
348
 label name
348
}
349
}
349
 
350
 
350
macro __func name {
351
macro __func name {
351
 if ~used name
352
 if ~used name
352
  display 'FUNC NOT USED: ',`name,13,10
353
  display 'FUNC NOT USED: ',`name,13,10
353
 else
354
 else
354
  align 4
355
  align 4
355
  name:
356
  name:
356
  ;diff16 `name,0,name
357
  ;diff16 `name,0,name
357
}
358
}
358
 
359
 
359
macro endf { end if }
360
macro endf { end if }
360
 
361
 
361
macro diff16 title,l1,l2
362
macro diff16 title,l1,l2
362
 {
363
 {
363
  local s,d
364
  local s,d
364
  s = l2-l1
365
  s = l2-l1
365
  display title,': 0x'
366
  display title,': 0x'
366
  repeat 8
367
  repeat 8
367
   d = '0' + s shr ((8-%) shl 2) and $0F
368
   d = '0' + s shr ((8-%) shl 2) and $0F
368
   if d > '9'
369
   if d > '9'
369
    d = d + 'A'-'9'-1
370
    d = d + 'A'-'9'-1
370
   end if
371
   end if
371
   display d
372
   display d
372
  end repeat
373
  end repeat
373
  display 13,10
374
  display 13,10
374
 }
375
 }
375
 
376
 
376
macro diff10 title,l1,l2
377
macro diff10 title,l1,l2
377
 {
378
 {
378
  local s,d,z,m
379
  local s,d,z,m
379
  s = l2-l1
380
  s = l2-l1
380
  z = 0
381
  z = 0
381
  m = 1000000000
382
  m = 1000000000
382
  display title,': '
383
  display title,': '
383
  repeat 10
384
  repeat 10
384
   d = '0' + s / m
385
   d = '0' + s / m
385
   s = s - (s/m)*m
386
   s = s - (s/m)*m
386
   m = m / 10
387
   m = m / 10
387
   if d <> '0'
388
   if d <> '0'
388
    z = 1
389
    z = 1
389
   end if
390
   end if
390
   if z <> 0
391
   if z <> 0
391
    display d
392
    display d
392
   end if
393
   end if
393
  end repeat
394
  end repeat
394
  display 13,10
395
  display 13,10
395
 }
396
 }
396
 
397
 
397
 
398
 
398
macro movi arg1,arg2
399
macro movi arg1,arg2
399
{
400
{
400
if (arg1 in ) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
401
if (arg1 in ) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
401
  if (arg2) = 0
402
  if (arg2) = 0
402
    xor arg1,arg1
403
    xor arg1,arg1
403
  else if (arg2) = 1
404
  else if (arg2) = 1
404
    xor arg1,arg1
405
    xor arg1,arg1
405
    inc arg1
406
    inc arg1
406
  else if (arg2) = -1
407
  else if (arg2) = -1
407
    or arg1,-1
408
    or arg1,-1
408
  else if (arg2) >= -128 & (arg2) <= 127
409
  else if (arg2) >= -128 & (arg2) <= 127
409
    push arg2
410
    push arg2
410
    pop arg1
411
    pop arg1
411
  else
412
  else
412
    mov arg1,arg2
413
    mov arg1,arg2
413
  end if
414
  end if
414
else
415
else
415
  mov arg1,arg2
416
  mov arg1,arg2
416
end if
417
end if
417
}
418
}
418
 
419
 
419
 
420
 
420
macro RGB [a] {
421
macro RGB [a] {
421
 common
422
 common
422
  match (r=,g=,b),a \{
423
  match (r=,g=,b),a \{
423
   \dd ((r) shl 16) or ((g) shl 8) or (b)
424
   \dd ((r) shl 16) or ((g) shl 8) or (b)
424
  \}
425
  \}
425
}
426
}
426
 
427
 
427
 
428
 
428
struc POINT _t,_dx,_dy {
429
struc POINT _t,_dx,_dy {
429
 .x _t _dx
430
 .x _t _dx
430
 .y _t _dy
431
 .y _t _dy
431
}
432
}
432
 
433
 
433
; structure definition helper
434
; structure definition helper
434
include 'struct.inc'
435
include 'struct.inc'
435
 
436
 
436
struct RECT
437
struct RECT
437
  left   dd ?
438
  left   dd ?
438
  top    dd ?
439
  top    dd ?
439
  right  dd ?
440
  right  dd ?
440
  bottom dd ?
441
  bottom dd ?
441
ends
442
ends
442
 
443
 
443
struct BOX
444
struct BOX
444
  left   dd ?
445
  left   dd ?
445
  top    dd ?
446
  top    dd ?
446
  width  dd ?
447
  width  dd ?
447
  height dd ?
448
  height dd ?
448
ends
449
ends
449
 
450
 
450
; structures used in KolibriOS
451
; structures used in KolibriOS
451
struct process_information
452
struct process_information
452
  cpu_usage               dd ?  ; +0
453
  cpu_usage               dd ?  ; +0
453
  window_stack_position   dw ?  ; +4
454
  window_stack_position   dw ?  ; +4
454
  window_stack_value      dw ?  ; +6
455
  window_stack_value      dw ?  ; +6
455
                          dw ?  ; +8
456
                          dw ?  ; +8
456
  process_name            rb 12 ; +10
457
  process_name            rb 12 ; +10
457
  memory_start            dd ?  ; +22
458
  memory_start            dd ?  ; +22
458
  used_memory             dd ?  ; +26
459
  used_memory             dd ?  ; +26
459
  PID                     dd ?  ; +30
460
  PID                     dd ?  ; +30
460
  box                     BOX   ; +34
461
  box                     BOX   ; +34
461
  slot_state              dw ?  ; +50
462
  slot_state              dw ?  ; +50
462
                          dw ?  ; +52
463
                          dw ?  ; +52
463
  client_box              BOX   ; +54
464
  client_box              BOX   ; +54
464
  wnd_state               db ?  ; +70
465
  wnd_state               db ?  ; +70
465
  rb (1024-71)
466
  rb (1024-71)
466
ends
467
ends
467
 
468
 
468
struct system_colors
469
struct system_colors
469
  frame            dd ? ;nonset1
470
  frame            dd ? ;nonset1
470
  grab             dd ? ;nonset2
471
  grab             dd ? ;nonset2
471
  work_3d_dark     dd ?
472
  work_3d_dark     dd ?
472
  work_3d_light    dd ?
473
  work_3d_light    dd ?
473
  grab_text        dd ? ;window_title
474
  grab_text        dd ? ;window_title
474
  work             dd ?
475
  work             dd ?
475
  work_button      dd ?
476
  work_button      dd ?
476
  work_button_text dd ?
477
  work_button_text dd ?
477
  work_text        dd ?
478
  work_text        dd ?
478
  work_graph       dd ?
479
  work_graph       dd ?
479
ends
480
ends
480
 
481
 
481
struct FILEDATE
482
struct FILEDATE
482
  Second db ?
483
  Second db ?
483
  Minute db ?
484
  Minute db ?
484
  Hour   db ?
485
  Hour   db ?
485
         db ?
486
         db ?
486
  Day    db ?
487
  Day    db ?
487
  Month  db ?
488
  Month  db ?
488
  Year   dw ?
489
  Year   dw ?
489
ends
490
ends
490
 
491
 
491
struct FILEINFO
492
struct FILEINFO
492
  Attributes dd ?
493
  Attributes dd ?
493
  IsUnicode  db ?
494
  IsUnicode  db ?
494
             db 3 dup(?)
495
             db 3 dup(?)
495
  DateCreate FILEDATE
496
  DateCreate FILEDATE
496
  DateAccess FILEDATE
497
  DateAccess FILEDATE
497
  DateModify FILEDATE
498
  DateModify FILEDATE
498
  Size       dq ?
499
  Size       dq ?
499
ends
500
ends
500
 
501
 
501
cmove   fix     cmovz
502
cmove   fix     cmovz
502
 
503
 
503
macro cmovz reg1, reg2 {
504
macro cmovz reg1, reg2 {
504
 
505
 
505
        local   ..jumpaddr
506
        local   ..jumpaddr
506
 
507
 
507
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
508
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
508
        jnz     ..jumpaddr
509
        jnz     ..jumpaddr
509
        mov     reg1, reg2
510
        mov     reg1, reg2
510
  ..jumpaddr:
511
  ..jumpaddr:
511
else
512
else
512
        cmovz   reg1, reg2
513
        cmovz   reg1, reg2
513
end if
514
end if
514
 
515
 
515
}
516
}
516
 
517
 
517
cmovne  fix     cmovnz
518
cmovne  fix     cmovnz
518
 
519
 
519
macro cmovnz reg1, reg2 {
520
macro cmovnz reg1, reg2 {
520
 
521
 
521
        local   ..jumpaddr
522
        local   ..jumpaddr
522
 
523
 
523
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
524
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
524
        jz      ..jumpaddr
525
        jz      ..jumpaddr
525
        mov     reg1, reg2
526
        mov     reg1, reg2
526
  ..jumpaddr:
527
  ..jumpaddr:
527
else
528
else
528
        cmovnz  reg1, reg2
529
        cmovnz  reg1, reg2
529
end if
530
end if
530
 
531
 
531
}
532
}
532
 
533
 
533
macro cmovg reg1, reg2 {
534
macro cmovg reg1, reg2 {
534
 
535
 
535
        local   ..jumpaddr
536
        local   ..jumpaddr
536
 
537
 
537
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
538
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
538
        jle     ..jumpaddr
539
        jle     ..jumpaddr
539
        mov     reg1, reg2
540
        mov     reg1, reg2
540
  ..jumpaddr:
541
  ..jumpaddr:
541
else
542
else
542
        cmovg   reg1, reg2
543
        cmovg   reg1, reg2
543
end if
544
end if
544
}
545
}
545
 
546
 
546
macro cmovl reg1, reg2 {
547
macro cmovl reg1, reg2 {
547
 
548
 
548
        local   ..jumpaddr
549
        local   ..jumpaddr
549
 
550
 
550
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
551
if __CPU_type eq p5             ; CMOVcc isnt supported on the P5
551
        jge     ..jumpaddr
552
        jge     ..jumpaddr
552
        mov     reg1, reg2
553
        mov     reg1, reg2
553
  ..jumpaddr:
554
  ..jumpaddr:
554
else
555
else
555
        cmovl   reg1, reg2
556
        cmovl   reg1, reg2
556
end if
557
end if
557
}
558
}
558
 
559
 
559
; replaces /programs/cmp.inc
560
; replaces /programs/cmp.inc
560
irp cond, e, ne, g, ng, l, nl, ge, le {
561
irp cond, e, ne, g, ng, l, nl, ge, le {
561
  macro cmp#cond a, b, c\{
562
  macro cmp#cond a, b, c\{
562
    cmp a, b
563
    cmp a, b
563
    j#cond c
564
    j#cond c
564
  \}
565
  \}
565
}
566
}
566
 
567
 
567
; constants
568
; constants
568
 
569
 
569
; events
570
; events
570
EV_IDLE        = 0
571
EV_IDLE        = 0
571
EV_TIMER       = 0
572
EV_TIMER       = 0
572
EV_REDRAW      = 1
573
EV_REDRAW      = 1
573
EV_KEY         = 2
574
EV_KEY         = 2
574
EV_BUTTON      = 3
575
EV_BUTTON      = 3
575
EV_EXIT        = 4
576
EV_EXIT        = 4
576
EV_BACKGROUND  = 5
577
EV_BACKGROUND  = 5
577
EV_MOUSE       = 6
578
EV_MOUSE       = 6
578
EV_IPC         = 7
579
EV_IPC         = 7
579
EV_STACK       = 8
580
EV_STACK       = 8
580
 
581
 
581
; event mask bits for function 40
582
; event mask bits for function 40
582
EVM_REDRAW     =          1b
583
EVM_REDRAW     =          1b
583
EVM_KEY        =         10b
584
EVM_KEY        =         10b
584
EVM_BUTTON     =        100b
585
EVM_BUTTON     =        100b
585
EVM_EXIT       =       1000b
586
EVM_EXIT       =       1000b
586
EVM_BACKGROUND =      10000b
587
EVM_BACKGROUND =      10000b
587
EVM_MOUSE      =     100000b
588
EVM_MOUSE      =     100000b
588
EVM_IPC        =    1000000b
589
EVM_IPC        =    1000000b
589
EVM_STACK      =   10000000b
590
EVM_STACK      =   10000000b
590
EVM_DEBUG      =  100000000b
591
EVM_DEBUG      =  100000000b
591
EVM_STACK2     = 1000000000b
592
EVM_STACK2     = 1000000000b
592
 
593
 
593
EVM_MOUSE_FILTER = 0x80000000
594
EVM_MOUSE_FILTER = 0x80000000
594
EVM_CURSOR_FILTER = 0x40000000
595
EVM_CURSOR_FILTER = 0x40000000