Subversion Repositories Kolibri OS

Rev

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