Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. struc CTRL_INFO
  2. {   .pci_cmd        dd  ?
  3.     .irq            dd  ?
  4.     .glob_cntrl     dd  ?
  5.     .glob_sta       dd  ?
  6.     .codec_io_base  dd  ?
  7.     .ctrl_io_base   dd  ?
  8.     .codec_mem_base dd  ?
  9.     .ctrl_mem_base  dd  ?
  10.     .codec_id       dd  ?
  11. }
  12. CTRL_INFO_SIZE          equ 9*4
  13.  
  14. SRV_GETVERSION          equ 0
  15. SND_CREATE_BUFF         equ 1
  16. SND_DESTROY_BUFF        equ 2
  17. SND_SETFORMAT           equ 3
  18. SND_GETFORMAT           equ 4
  19. SND_RESET               equ 5
  20. SND_SETPOS              equ 6
  21. SND_GETPOS              equ 7
  22. SND_SETBUFF             equ 8
  23. SND_OUT                 equ 9
  24. SND_PLAY                equ 10
  25. SND_STOP                equ 11
  26. SND_SETVOLUME           equ 12
  27. SND_GETVOLUME           equ 13
  28. SND_SETPAN              equ 14
  29. SND_GETPAN              equ 15
  30. SND_GETBUFFSIZE         equ 16
  31. SND_GETFREESPACE        equ 17
  32. SND_SETTIMEBASE         equ 18
  33. SND_GETTIMESTAMP        equ 19
  34.  
  35. DEV_SET_BUFF            equ  4
  36. DEV_NOTIFY              equ  5
  37. DEV_SET_MASTERVOL       equ  6
  38. DEV_GET_MASTERVOL       equ  7
  39. DEV_GET_INFO            equ  8
  40.  
  41. SOUND_VERSION   equ 0x0101
  42. PCM_ALL         equ 0
  43.  
  44. PCM_OUT         equ 0x08000000
  45. PCM_RING        equ 0x10000000
  46. PCM_STATIC      equ 0x20000000
  47. PCM_FLOAT       equ 0x40000000
  48. PCM_FILTER      equ 0x80000000
  49.  
  50. PCM_2_16_48     equ 1
  51. PCM_1_16_48     equ 2
  52. PCM_2_16_44     equ 3
  53. PCM_1_16_44     equ 4
  54. PCM_2_16_32     equ 5
  55. PCM_1_16_32     equ 6
  56. PCM_2_16_24     equ 7
  57. PCM_1_16_24     equ 8
  58. PCM_2_16_22     equ 9
  59. PCM_1_16_22     equ 10
  60. PCM_2_16_16     equ 11
  61. PCM_1_16_16     equ 12
  62. PCM_2_16_12     equ 13
  63. PCM_1_16_12     equ 14
  64. PCM_2_16_11     equ 15
  65. PCM_1_16_11     equ 16
  66. PCM_2_16_8      equ 17
  67. PCM_1_16_8      equ 18
  68. PCM_2_8_48      equ 19
  69. PCM_1_8_48      equ 20
  70. PCM_2_8_44      equ 21
  71. PCM_1_8_44      equ 22
  72. PCM_2_8_32      equ 23
  73. PCM_1_8_32      equ 24
  74. PCM_2_8_24      equ 25
  75. PCM_1_8_24      equ 26
  76. PCM_2_8_22      equ 27
  77. PCM_1_8_22      equ 28
  78. PCM_2_8_16      equ 29
  79. PCM_1_8_16      equ 30
  80. PCM_2_8_12      equ 31
  81. PCM_1_8_12      equ 32
  82. PCM_2_8_11      equ 33
  83. PCM_1_8_11      equ 34
  84. PCM_2_8_8       equ 35
  85. PCM_1_8_8       equ 36
  86.  
  87. ; i_data
  88. szInfinity      db 'INFINITY',0
  89. szSound         db 'SOUND',0
  90. ; u_data
  91. hSound          dd ?
  92. hrdwSound       dd ?
  93. ;------------------------------------------------------------------------------
  94. align 4
  95. _InitSound@4:       ;p_ver:dword
  96.        
  97.         push    ebx ecx
  98.         mcall   68,16,szInfinity
  99.         mov     [hSound],eax
  100.         test    eax,eax
  101.         jz      .fail
  102.        
  103.         mcall   68,16,szSound
  104.         mov     [hrdwSound],eax
  105.         test    eax,eax
  106.         jz      .fail
  107.        
  108.         lea     eax,[esp+12]   ;p_ver
  109.         xor     ebx,ebx
  110.        
  111.         push    4              ;.out_size
  112.         push    eax            ;.output
  113.         push    ebx            ;.inp_size
  114.         push    ebx            ;.input
  115.         push    SRV_GETVERSION ;.code
  116.         push    [hSound]       ;.handle
  117.        
  118.         mov     ecx,esp        ;[handle]
  119.         mcall   68,17
  120.         add     esp,24
  121.         jmp     .exit
  122. ;--------------------------------------
  123. align 4
  124. .fail:
  125.         or      eax, -1
  126. ;--------------------------------------
  127. align 4
  128. .exit:
  129.         pop     ecx ebx
  130.         ret     4
  131. ;------------------------------------------------------------------------------
  132. align 4
  133. _CreateBuffer@12:   ;format:dword,size:dword,p_str:dword
  134.         push    ebx ecx
  135.         lea     eax,[esp+20]   ;p_str
  136.         lea     ebx,[esp+12]   ;format
  137.  
  138.         push    4              ;.out_size
  139.         push    eax            ;.output
  140.         push    8              ;.inp_size
  141.         push    ebx            ;.input
  142.         push    SND_CREATE_BUFF;.code
  143.         push    [hSound]       ;.handle
  144.  
  145.         mov     ecx,esp
  146.         mcall   68,17
  147.         add     esp,24       ;io_cintrol
  148.         pop     ecx ebx
  149.         ret     12
  150. ;------------------------------------------------------------------------------
  151. align 4
  152. _DestroyBuffer@4:     ;str:dword
  153.         push    ebx ecx
  154.         xor     eax,eax
  155.         lea     ebx,[esp+12]   ;[stream]
  156.        
  157.         push    eax            ;.out_size
  158.         push    eax            ;.output
  159.         push    4              ;.inp_size
  160.         push    ebx            ;.input
  161.         push    SND_DESTROY_BUFF;.code
  162.         push    [hSound]       ;.handle
  163.        
  164.         mov     ecx, esp        ;[handle]
  165.         mcall   68,17
  166.         add     esp,24
  167.         pop     ecx ebx
  168.         ret     4
  169. ;------------------------------------------------------------------------------
  170. align 4
  171. _WaveOut@12:        ;str:dword, src:dword, size:dword
  172.         push    ebx ecx
  173.         xor     eax,eax
  174.         lea     ebx,[esp+12]   ;[stream]
  175.        
  176.         push    eax            ;.out_size
  177.         push    eax            ;.output
  178.         push    12             ;.inp_size
  179.         push    ebx            ;.input
  180.         push    SND_OUT        ;.code
  181.         push    dword [hSound] ;.handle
  182.        
  183.         mov     ecx,esp
  184.         mcall   68,17
  185.         add     esp,24
  186.         pop     ecx ebx
  187.         ret     12
  188. ;------------------------------------------------------------------------------
  189. align 4
  190. proc _test_wav@4 stdcall, hdr:dword
  191.         mov     eax,[hdr]
  192.         cmp     dword [eax],0x46464952
  193.         jne     .fail
  194.        
  195.         cmp     dword [eax+8],0x45564157
  196.         jne     .fail
  197.        
  198.         cmp     word [eax+20],1
  199.         jne     .fail
  200.        
  201.         mov     ecx,dword [eax+24]
  202.         mov     edx,22050
  203.         cmp     ecx,edx
  204.         ja      .high
  205.         je      .l_22
  206.        
  207.         cmp     ecx,8000
  208.         je      .l_8
  209.        
  210.         cmp     ecx,11025
  211.         je      .l_11
  212.        
  213.         cmp     ecx,12000
  214.         je      .l_12
  215.        
  216.         cmp     ecx,16000
  217.         je      .l_16
  218. ;--------------------------------------
  219. align 4
  220. .fail:
  221.         xor     eax,eax
  222.         ret
  223. ;--------------------------------------
  224. align 4
  225. .high:
  226.         cmp     ecx,24000
  227.         je      .LN56
  228.  
  229.         cmp     ecx,32000
  230.         je      .LN65
  231.  
  232.         cmp     ecx,44100
  233.         je      .LN74
  234.  
  235.         cmp     ecx,48000
  236.         jne     .fail
  237.        
  238.         movzx   ecx,word [eax+22]
  239.         dec     ecx
  240.         je      .LN79
  241.  
  242.         dec     ecx
  243.         jne     .LN74
  244.        
  245.         mov     edx,19
  246.         jmp     .done
  247. ;--------------------------------------
  248. align 4
  249. .LN79:
  250.         mov     edx,20
  251.         jmp     .done
  252. ;--------------------------------------
  253. align 4
  254. .LN74:
  255.         movzx   ecx,word [eax+22]
  256.         dec     ecx
  257.         je      .LN70
  258.  
  259.         dec     ecx
  260.         jne     .LN65
  261.        
  262.         mov     edx,21
  263.         jmp     .done
  264. ;--------------------------------------
  265. align 4
  266. .LN70:
  267.         mov     edx,22
  268.         jmp     .done
  269. ;--------------------------------------
  270. align 4
  271. .LN65:
  272.         movzx   ecx,word [eax+22]
  273.         dec     ecx
  274.         je      .LN61
  275.  
  276.         dec     ecx
  277.         jne     .LN56
  278.        
  279.         mov     edx,23
  280.         jmp     .done
  281. ;--------------------------------------
  282. align 4
  283. .LN61:
  284.         mov     edx,24
  285.         jmp     .done
  286. ;--------------------------------------
  287. align 4
  288. .LN56:
  289.         movzx   ecx,word [eax+22]
  290.         dec     ecx
  291.         je      .LN52
  292.  
  293.         dec     ecx
  294.         je      .LN50
  295. ;--------------------------------------
  296. align 4
  297. .l_22:
  298.         movzx   ecx,word [eax+22]
  299.         dec     ecx
  300.         je      .LN43
  301.  
  302.         dec     ecx
  303.         je      .LN41
  304. ;--------------------------------------
  305. align 4
  306. .l_16:
  307.         movzx   ecx,word [eax+22]
  308.         dec     ecx
  309.         je      .LN34
  310.  
  311.         dec     ecx
  312.         je      .LN32
  313. ;--------------------------------------
  314. align 4
  315. .l_12:
  316.         movzx   ecx,word [eax+22]
  317.         dec     ecx
  318.         je      .LN25
  319.  
  320.         dec     ecx
  321.         je      .LN23
  322. ;--------------------------------------
  323. align 4
  324. .l_11:
  325.         movzx   ecx,word [eax+22]
  326.         dec     ecx
  327.         je      .LN16
  328.  
  329.         dec     ecx
  330.         je      .LN14
  331. ;--------------------------------------
  332. align 4
  333. .l_8:
  334.         movzx   ecx,word [eax+22]
  335.         dec     ecx
  336.         je      .LN7
  337.  
  338.         dec     ecx
  339.         jne     .fail
  340.        
  341.         mov     edx,35
  342.         jmp     .done
  343. ;--------------------------------------
  344. align 4
  345. .LN7:
  346.         mov     edx,36
  347.         jmp     .done
  348. ;--------------------------------------
  349. align 4
  350. .LN14:
  351.         mov     edx,33
  352.         jmp     .done
  353. ;--------------------------------------
  354. align 4
  355. .LN16:
  356.         mov     edx,34
  357.         jmp     .done
  358. ;--------------------------------------
  359. align 4
  360. .LN23:
  361.         mov     edx,31
  362.         jmp     .done
  363. ;--------------------------------------
  364. align 4
  365. .LN25:
  366.         mov     edx,32
  367.         jmp     .done
  368. ;--------------------------------------
  369. align 4
  370. .LN32:
  371.         mov     edx,29
  372.         jmp     .done
  373. ;--------------------------------------
  374. align 4
  375. .LN34:
  376.         mov     edx,30
  377.         jmp     .done
  378. ;--------------------------------------
  379. align 4
  380. .LN41:
  381.         mov     edx,27
  382.         jmp     .done
  383. ;--------------------------------------
  384. align 4
  385. .LN43:
  386.         mov     edx,28
  387.         jmp     .done
  388. ;--------------------------------------
  389. align 4
  390. .LN50:
  391.         mov     edx,25
  392.         jmp     .done
  393. ;--------------------------------------
  394. align 4
  395. .LN52:
  396.         mov     edx,26
  397. ;--------------------------------------
  398. align 4
  399. .done:
  400.         xor     ecx,ecx
  401.         cmp     word [eax+34],16
  402.         setne   cl
  403.         dec     ecx
  404.         and     ecx,-18
  405.         add     ecx,edx
  406.         mov     eax,ecx
  407.         ret
  408. endp
  409. ;------------------------------------------------------------------------------