Subversion Repositories Kolibri OS

Rev

Rev 293 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 293 Rev 328
Line 31... Line 31...
31
OS_BASE          equ 0
31
OS_BASE          equ 0
32
new_app_base     equ 0x60400000
32
new_app_base     equ 0x60400000
33
PROC_BASE        equ OS_BASE+0x0080000
33
PROC_BASE        equ OS_BASE+0x0080000
Line 34... Line 34...
34
 
34
 
-
 
35
CAPS_SSE2        equ 26
Line 35... Line 36...
35
CAPS_SSE2        equ 26
36
PG_SW            equ 0x003
36
 
37
 
37
 
38
 
Line 111... Line 112...
111
                                           ;old 64-bit mmx
112
                                           ;old 64-bit mmx
112
           mov [mix_2_core], mmx_mix_2
113
           mov [mix_2_core], mmx_mix_2
113
           mov [mix_3_core], mmx_mix_3
114
           mov [mix_3_core], mmx_mix_3
114
           mov [mix_4_core], mmx_mix_4
115
           mov [mix_4_core], mmx_mix_4
115
           jmp @F
116
           jmp @F
116
.mmx128:                                   ;new 128-bit sse2 extensions
117
.mmx128:                                   ;128-bit integer sse2 extensions
117
           mov [mix_2_core], mmx128_mix_2
118
           mov [mix_2_core], mmx128_mix_2
118
           mov [mix_3_core], mmx128_mix_3
119
           mov [mix_3_core], mmx128_mix_3
119
           mov [mix_4_core], mmx128_mix_4
120
           mov [mix_4_core], mmx128_mix_4
120
@@:
121
@@:
121
end if
122
end if
Line 207... Line 208...
207
restore   out_size
208
restore   out_size
Line 208... Line 209...
208
 
209
 
209
TASK_COUNT    equ 0x0003004
210
TASK_COUNT    equ 0x0003004
Line 210... Line 211...
210
CURRENT_TASK  equ 0x0003000
211
CURRENT_TASK  equ 0x0003000
211
 
212
 
212
align 8
213
align 4
213
proc CreateBuffer stdcall, format:dword
214
proc CreateBuffer stdcall, format:dword
214
           locals
215
           locals
Line 237... Line 238...
237
           mov [eax+STREAM.str_bk], ebx
238
           mov [eax+STREAM.str_bk], ebx
238
           mov [ebx+STREAM.str_fd], eax
239
           mov [ebx+STREAM.str_fd], eax
239
           mov [edx+STREAM.str_bk], eax
240
           mov [edx+STREAM.str_bk], eax
240
           popf
241
           popf
Line 241... Line 242...
241
 
242
 
Line 242... Line 243...
242
           stdcall KernelAlloc, 168*1024
243
           stdcall KernelAlloc, dword 72*1024
243
 
244
 
244
           mov edi, [str]
245
           mov edi, [str]
245
           mov [edi+STREAM.base], eax
246
           mov [edi+STREAM.base], eax
Line 254... Line 255...
254
           mov [edi+STREAM.notify_off2], eax
255
           mov [edi+STREAM.notify_off2], eax
255
           add eax, 0x8000
256
           add eax, 0x8000
256
           mov [edi+STREAM.limit], eax
257
           mov [edi+STREAM.limit], eax
257
           mov [edi+STREAM.lim_1], eax
258
           mov [edi+STREAM.lim_1], eax
Line -... Line 259...
-
 
259
 
-
 
260
; create ring buffer
-
 
261
 
-
 
262
           stdcall AllocKernelSpace, dword 128*1024
-
 
263
 
258
 
264
           mov edi, [str]
259
           mov [edi+STREAM.work_buff], eax
265
           mov [edi+STREAM.work_buff], eax
260
           mov [edi+STREAM.work_read], eax
266
           mov [edi+STREAM.work_read], eax
261
           mov [edi+STREAM.work_write], eax
267
           mov [edi+STREAM.work_write], eax
262
           mov [edi+STREAM.work_count], 0
268
           mov [edi+STREAM.work_count], 0
263
           add eax, 0x10000
269
           add eax, 64*1024
Line -... Line 270...
-
 
270
           mov [edi+STREAM.work_top], eax
-
 
271
 
-
 
272
           stdcall AllocPages, dword 64/4
-
 
273
           mov edi, [str]
-
 
274
           mov ebx, [edi+STREAM.work_buff]
-
 
275
           mov ecx, 16
-
 
276
           or eax, PG_SW
-
 
277
           push eax
-
 
278
           push ebx
-
 
279
           call CommitPages ;eax, ebx, ecx
-
 
280
           mov ecx, 16
-
 
281
           pop ebx
-
 
282
           pop eax
-
 
283
           add ebx, 64*1024
-
 
284
           call CommitPages    ;double mapped
264
           mov [edi+STREAM.work_top], eax
285
 
265
 
286
           mov edi, [str]
266
           mov eax, [format]
287
           mov eax, [format]
Line 267... Line 288...
267
           mov [edi+STREAM.format], eax
288
           mov [edi+STREAM.format], eax
Line 295... Line 316...
295
           lea ebx, [edx+0x9000]
316
           lea ebx, [edx+0x9000]
296
           call GetPgAddr  ;eax
317
           call GetPgAddr  ;eax
297
           stdcall MapPage, ebx, eax, dword 3
318
           stdcall MapPage, ebx, eax, dword 3
Line 298... Line 319...
298
 
319
 
299
           mov edi, [edi+STREAM.base]
320
           mov edi, [edi+STREAM.base]
300
           mov ecx, (168*1024)/4
321
           mov ecx, (72*1024)/4
-
 
322
           xor eax, eax
-
 
323
           cld
-
 
324
           rep stosd
-
 
325
 
-
 
326
           mov edi, [str]
-
 
327
           mov edi, [edi+STREAM.work_buff]
301
           xor eax, eax
328
           mov ecx, (64*1024)/4
Line 302... Line 329...
302
           rep stosd
329
           rep stosd
303
 
330
 
304
           mov eax, [str]
331
           mov eax, [str]
305
           ret
332
           ret
306
.fail:
333
.fail:
307
           xor eax, eax
334
           xor eax, eax
Line -... Line 335...
-
 
335
           ret
308
           ret
336
endp
309
endp
337
 
Line 310... Line 338...
310
 
338
if 0
311
align 4
339
align 4
Line 335... Line 363...
335
           mov    eax,ecx
363
           mov    eax,ecx
336
           pop    ecx
364
           pop    ecx
337
           pop    ebx
365
           pop    ebx
338
           ret
366
           ret
Line -... Line 367...
-
 
367
 
-
 
368
end if
339
 
369
 
340
;param
370
;param
Line 341... Line 371...
341
; eax= buffer handle
371
; eax= buffer handle
342
 
372
 
-
 
373
align 4
Line 343... Line 374...
343
align 4
374
DestroyBuffer:
344
DestroyBuffer:
375
           .handle  equ esp       ;local
Line 345... Line 376...
345
 
376
 
346
           cmp [eax+STREAM.magic], 'WAVE'
377
           cmp [eax+STREAM.magic], 'WAVE'
347
           jne .fail
378
           jne .fail
-
 
379
 
-
 
380
           cmp [eax+STREAM.size], STREAM_SIZE
348
 
381
           jne .fail
349
           cmp [eax+STREAM.size], STREAM_SIZE
382
.destroy:
350
           jne .fail
383
           push eax
351
.destroy:
384
 
352
           pushf
385
           pushf
353
           cli
386
           cli
354
           mov ebx, [eax+STREAM.str_fd]
387
           mov ebx, [eax+STREAM.str_fd]
Line 355... Line -...
355
           mov ecx, [eax+STREAM.str_bk]
-
 
356
           mov [ebx+STREAM.str_bk], ecx
388
           mov ecx, [eax+STREAM.str_bk]
357
           mov [ecx+STREAM.str_fd], ebx
389
           mov [ebx+STREAM.str_bk], ecx
-
 
390
           mov [ecx+STREAM.str_fd], ebx
-
 
391
           popf
-
 
392
 
358
           popf
393
           stdcall KernelFree, [eax+STREAM.base]
359
 
-
 
360
           push eax
394
           mov eax, [.handle]
361
           stdcall KernelFree, [eax+STREAM.base]
395
           stdcall KernelFree, [eax+STREAM.work_buff]
Line 362... Line 396...
362
           pop eax
396
 
363
           call DestroyObject    ;eax
397
           pop eax               ;restore stack
Line 524... Line 558...
524
           jne .next
558
           jne .next
Line 525... Line 559...
525
 
559
 
526
           cmp [edi+STREAM.size], STREAM_SIZE
560
           cmp [edi+STREAM.size], STREAM_SIZE
Line 527... Line -...
527
           jne .next
-
 
528
 
-
 
529
;           mov eax,[edi+STREAM.pid]
-
 
530
;           cmp eax, -1
-
 
531
;           je .next
-
 
532
;           call pid_to_slot
-
 
533
;           test eax, eax
-
 
534
;           jz .next
561
           jne .next
535
 
562
 
536
           cmp [edi+STREAM.flags], SND_PLAY;
563
           cmp [edi+STREAM.flags], SND_PLAY;
537
           jne .next
564
           jne .next
Line 671... Line 698...
671
m7            dw 0x8000,0x8000,0x8000,0x8000
698
m7            dw 0x8000,0x8000,0x8000,0x8000
672
mm80          dq 0x8080808080808080
699
mm80          dq 0x8080808080808080
673
mm_mask       dq 0xFF00FF00FF00FF00
700
mm_mask       dq 0xFF00FF00FF00FF00
Line 674... Line 701...
674
 
701
 
675
;stream_map    dd 0xFFFF       ; 16
702
;stream_map    dd 0xFFFF       ; 16
Line 676... Line 703...
676
version       dd 0x00030003
703
version       dd 0x00030004
677
 
704
 
Line 678... Line 705...
678
szInfinity    db 'INFINITY',0
705
szInfinity    db 'INFINITY',0