Subversion Repositories Kolibri OS

Rev

Rev 376 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
165 serge 1
format MS COFF
2
 
3
include "proc32.inc"
4
 
5
section '.text' code readable executable
6
 
7
public _InitHeap@4
8
public _UserAlloc@4
9
public _CreateThread@8
10
public _GetMousePos@4
11
public _get_fileinfo@8
12
public _read_file@20
376 serge 13
public _get_key@4
165 serge 14
public _get_button_id
15
public _DrawWindow@36
16
public _make_button@24
17
public _draw_bar@20
18
public _write_text@20
19
public _debug_out@4
20
public _debug_out_hex@4
570 serge 21
public _create_thread@12
165 serge 22
 
570 serge 23
 
165 serge 24
public _memset
25
 
26
struc FILEIO
27
{   .cmd            dd ?
28
    .offset         dd ?
29
                    dd ?
30
    .count          dd ?
31
    .buff           dd ?
32
                    db ?
33
    .name           dd ?
34
};
35
 
36
align 4
570 serge 37
_create_thread@12:
38
.thr_proc    equ esp+4
39
.param       equ esp+8
40
.stack_size  equ esp+12
41
 
42
           mov eax, 68
43
           mov ebx, 12
44
           mov ecx, [.stack_size]
45
           add ecx, 4095
46
           and ecx, -4096
47
           int 0x40
48
           test eax, eax
49
           jz .fail
50
 
51
           lea edx, [eax+ecx-12]
52
           mov [edx], dword .exit_point
53
           mov ebx, [.param]
54
           mov [edx+4], ebx
55
           mov [edx+8], ecx
56
 
57
           mov eax, 51
58
           mov ebx, 1
59
           mov ecx, [.thr_proc]
60
           int 0x40
61
           ret 12
62
.fail:
63
           not eax
64
           ret 12
65
align 4
66
.exit_point:
67
           pop ecx
68
           mov eax, 68
69
           mov ebx, 13
70
           int 0x40
71
           mov eax, -1
72
           int 0x40
73
 
74
restore .thr_proc
75
restore .param
76
restore .stack_size
77
 
78
 
79
align 4
165 serge 80
proc _get_button_id
81
           mov   eax,17
82
           int   0x40
83
           test  al,al
84
           jnz   @F
85
           shr   eax,8
86
           ret
87
@@:
88
           xor   eax,eax
89
           dec   eax
90
           ret
91
endp
92
 
93
align 4
94
proc _get_fileinfo@8 stdcall, name:dword, info:dword
95
           push ebx
96
           push esi
97
           push edi
98
           xor eax, eax
99
           mov ebx, [name]
100
           mov ecx, [info]
101
 
102
           mov [fileio.cmd], 5
103
           mov [fileio.offset], eax
104
           mov [fileio.offset+4], eax
105
           mov [fileio.count], eax
106
           mov [fileio.buff], ecx
107
           mov byte [fileio.buff+4], al
108
           mov [fileio.name], ebx
109
 
110
           mov eax, 70
111
           lea ebx, [fileio]
112
           int 0x40
113
           pop edi
114
           pop esi
115
           pop ebx
116
           ret
117
endp
118
 
119
align 4
120
proc _read_file@20 stdcall,name:dword, buff:dword, offset:dword,\
121
                                     count:dword,reads:dword
122
           push ebx
123
           push esi
124
           push edi
125
           xor eax, eax
126
           mov ebx, [name]
127
           mov edx, [offset]
128
           mov esi, [buff]
129
           mov edi, [count]
130
 
131
           mov [fileio.cmd], eax
132
           mov [fileio.offset], edx
133
           mov [fileio.offset+4], eax
134
           mov [fileio.count], edi
135
           mov [fileio.buff], esi
136
           mov byte [fileio.buff+4], al
137
           mov [fileio.name], ebx
138
 
139
           mov eax, 70
140
           lea ebx, [fileio]
141
           int 0x40
142
           mov esi, [reads]
143
           test esi, esi
144
           jz @f
145
           mov [esi], ebx
146
@@:
147
           pop edi
148
           pop esi
149
           pop ebx
150
           ret
151
endp
152
 
153
align 4
376 serge 154
proc _get_key@4 stdcall, key:dword
155
           push ebx
156
           push ecx
165 serge 157
           mov eax, 2
158
           int 0x40
376 serge 159
           mov ebx, [key]
160
           mov ecx, eax
161
           shr ecx, 8
162
           mov [ebx], ecx
163
           movzx eax, al
164
           pop ecx
165
           pop ebx
165 serge 166
           ret
167
endp
168
 
376 serge 169
 
165 serge 170
align 4
171
proc _InitHeap@4 stdcall, heap_size:dword
228 serge 172
                  push ebx
173
                  mov eax, 68
174
                  mov ebx, 11
165 serge 175
              mov ecx, [heap_size]
228 serge 176
                  int 0x40
177
                  pop ebx
178
                  ret
165 serge 179
endp
180
 
181
align 4
182
proc _UserAlloc@4 stdcall, alloc_size:dword
228 serge 183
                  push ebx
184
                  mov eax, 68
185
                  mov ebx, 12
165 serge 186
              mov ecx, [alloc_size]
228 serge 187
                  int 0x40
188
                  pop ebx
189
                  ret
165 serge 190
endp
191
 
192
align 4
193
proc _CreateThread@8 stdcall, fn:dword, p_stack:dword
194
              push ebx
195
              mov eax, 51
196
              mov ebx, 1
197
              mov ecx, [fn]
198
              mov edx,[p_stack]
228 serge 199
                  int 0x40
200
                  pop ebx
201
                  ret
165 serge 202
endp
203
 
204
align 4
205
proc _GetMousePos@4 stdcall,rel_type:dword
570 serge 206
           push ebx
165 serge 207
           mov eax, 37
208
           mov ebx, [rel_type]
376 serge 209
           int 0x40
165 serge 210
           pop ebx
376 serge 211
           ret
165 serge 212
endp
213
 
214
 
215
align 4
216
proc _DrawWindow@36 stdcall, x:dword, y:dword, sx:dword, sy:dword,\
217
                               workcolor:dword, style:dword, captioncolor:dword,\
570 serge 218
                               windowtype:dword, bordercolor:dword
165 serge 219
           push ebx edi esi
220
           mov ebx, [x]
221
           mov ecx, [y]
222
           shl ebx, 16
223
           shl ecx, 16
224
           mov bx, word [sx]
225
           mov cx,  word [sy]
226
           mov  edx,[style]
227
           shl  edx,24
228
           add  edx,[workcolor]
229
           mov  esi,[windowtype]
230
           shl  esi,24
231
           add  esi,[captioncolor]
232
           mov  edi,[bordercolor]
233
           xor  eax,eax
234
           int  0x40
235
           pop esi edi ebx
236
           ret
237
endp
238
 
239
align 4
240
_make_button@24:
241
;arg1 - x
242
;arg2 - y
243
;arg3 - xsize
244
;arg4 - ysize
245
;arg5 - id
246
;arg6 - color
570 serge 247
 
165 serge 248
  push  ebx esi
249
  mov   ebx,[esp+12]
250
  shl   ebx,16
251
  mov   bx,[esp+20]
252
  mov   ecx,[esp+16]
253
  shl   ecx,16
254
  mov   cx,[esp+24]
255
  mov   edx,[esp+28]
256
  mov   esi,[esp+32]
257
  mov   eax,8
258
  int   0x40
259
  pop   esi ebx
260
  ret   24
261
 
262
align 4
263
_draw_bar@20:
264
;arg1 - x
265
;arg2 - y
266
;arg3 - xsize
267
;arg4 - ysize
268
;arg5 - color
269
  push  ebx
270
  mov   eax,13
271
  mov   ebx,[esp+8]
272
  shl   ebx,16
273
  mov   bx,[esp+16]
274
  mov   ecx,[esp+12]
275
  shl   ecx,16
276
  mov   cx,[esp+20]
277
  mov   edx,[esp+24]
278
  int   0x40
279
  pop   ebx
280
  ret   20
281
 
282
_write_text@20:
283
;arg1 - x
284
;arg2 - y
285
;arg3 - color
286
;arg4 - text
287
;arg5 - len
288
  push  ebx esi
289
  mov   eax,4
290
  mov   ebx,[esp+12]
291
  shl   ebx,16
292
  mov   bx,[esp+16]
293
  mov   ecx,[esp+20]
294
  mov   edx,[esp+24]
295
  mov   esi,[esp+28]
296
  int   0x40
297
  pop   esi ebx
298
  ret   20
299
 
300
align 4
301
proc _debug_out@4 stdcall, val:dword
302
           push ebx
228 serge 303
           mov  ecx,[val]
304
           mov  ebx,1
305
           mov  eax,63
306
           int  0x40
165 serge 307
           pop ebx
308
           ret
570 serge 309
endp
165 serge 310
 
311
align 4
312
proc _debug_out_hex@4 stdcall val:dword
313
           locals
314
             count dd ?
315
           endl
316
 
317
           mov [count], 8
318
.new_char:
319
           rol [val], 4
320
           mov ecx, [val]
321
           and ecx, 0x0f
322
           mov cl,byte [__hexdigits+ecx]
323
           mov eax, 63
324
           mov ebx, 1
325
           int 0x40
326
           dec [count]
327
           jnz .new_char
328
           ret
329
endp
570 serge 330
 
165 serge 331
align 4
332
_memset:
333
           mov     edx,[esp + 0ch]
570 serge 334
           mov     ecx,[esp + 4]
165 serge 335
 
570 serge 336
           test    edx,edx
337
           jz      short toend
338
 
165 serge 339
           xor     eax,eax
340
           mov     al,[esp + 8]
341
 
570 serge 342
           push    edi
343
           mov     edi,ecx
165 serge 344
 
345
           cmp     edx,4
570 serge 346
           jb      tail
347
 
165 serge 348
           neg     ecx
570 serge 349
           and     ecx,3
350
           jz      short dwords
351
 
352
           sub     edx,ecx
165 serge 353
adjust_loop:
354
           mov     [edi],al
355
           add     edi,1
356
           sub     ecx,1
357
           jnz     adjust_loop
358
 
359
dwords:
570 serge 360
        mov     ecx,eax
361
        shl     eax,8
362
        add     eax,ecx
363
        mov     ecx,eax
364
        shl     eax,10h
365
        add     eax,ecx
165 serge 366
 
570 serge 367
        mov     ecx,edx
368
        and     edx,3
369
        shr     ecx,2
370
        jz      tail
371
 
372
                cld
165 serge 373
        rep     stosd
374
main_loop_tail:
570 serge 375
        test    edx,edx
376
        jz      finish
165 serge 377
 
378
 
379
tail:
570 serge 380
        mov     [edi],al
165 serge 381
        add     edi,1
382
 
570 serge 383
        sub     edx,1
384
        jnz     tail
165 serge 385
 
386
finish:
570 serge 387
        mov     eax,[esp + 8]
388
        pop     edi
165 serge 389
 
390
        ret
391
 
392
toend:
570 serge 393
        mov     eax,[esp + 4]
165 serge 394
 
395
        ret
396
 
228 serge 397
public _allmul
398
 
570 serge 399
_allmul:
228 serge 400
        mov eax, [esp+8]
401
        mov ecx, [esp+16]
570 serge 402
        or ecx,eax
228 serge 403
        mov ecx, [esp+12]
570 serge 404
        jnz .hard
228 serge 405
        mov eax, [esp+4]
406
        mul ecx
570 serge 407
        ret 16
228 serge 408
.hard:
409
        push ebx
570 serge 410
        mul ecx
228 serge 411
        mov ebx,eax
412
        mov eax, [esp+8]
413
        mul dword [esp+20]
570 serge 414
        add ebx,eax
228 serge 415
        mov eax,[esp+8]
570 serge 416
        mul ecx
417
        add edx,ebx
228 serge 418
        pop ebx
570 serge 419
        ret 16
228 serge 420
 
421
align 4
422
_allshr:
423
        cmp cl,64
424
        jae .sign
425
 
426
        cmp cl, 32
427
        jae .MORE32
428
        shrd eax,edx,cl
429
        sar edx,cl
430
        ret
431
.MORE32:
432
        mov     eax,edx
433
        sar     edx,31
434
        and     cl,31
435
        sar     eax,cl
436
        ret
437
.sign:
438
        sar     edx,31
439
        mov     eax,edx
440
        ret
441
 
165 serge 442
public __ftol2_sse
443
 
444
align 4
445
__ftol2_sse:
446
           push ebp
447
           mov ebp, esp
448
           sub esp, 20
449
           and esp, 0xFFFFFFF0
450
           fld st0
451
           fst dword [esp+18]
452
           fistp qword [esp+10]
453
           fild qword [esp+10]
454
           mov edx, [esp+18]
455
           mov eax, [esp+10]
456
           test eax, eax
457
           jz .QnaNZ
570 serge 458
 
165 serge 459
.not_QnaNZ:
460
           fsubp st1, st0
461
           test edx, edx
462
           jns .pos
463
           fstp dword [esp]
464
           mov ecx, [esp]
465
           xor ecx, 0x80000000
466
           add ecx, 0x7FFFFFFF
467
           adc eax, 0
468
           mov edx, [esp+14]
469
           adc edx, 0
470
           jmp .exit
471
.pos:
472
           fstp dword [esp]
473
           mov ecx, [esp]
474
           add ecx, 0x7FFFFFFF
475
           sbb eax, 0
476
           jmp .exit
477
.QnaNZ:
478
           mov edx, [esp+14]
479
           test edx, 0x7FFFFFFF
480
           jne .not_QnaNZ
481
           fstp dword [esp+18]
482
           fstp dword [esp+18]
570 serge 483
.exit:
165 serge 484
           leave
485
           ret
486
 
487
public __fltused
488
__fltused    dd 0
570 serge 489
 
165 serge 490
align 4
491
__hexdigits db '0123456789ABCDEF'
492
 
493
align 4
494
fileio FILEIO
495