Subversion Repositories Kolibri OS

Rev

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

  1. format MS COFF
  2.  
  3. include "snd.inc"
  4. include "proc32.inc"
  5.  
  6. section '.text' align 16 code readable executable
  7.  
  8. public _test_wav@4
  9.  
  10. ; convert WAVEHEADER into PCM_x_xx_xx constant
  11.  
  12. align 4
  13. proc _test_wav@4 stdcall, hdr:dword
  14.  
  15.            mov eax, [hdr]
  16.            cmp dword [eax], 0x46464952
  17.            jne .fail
  18.  
  19.            cmp dword [eax+8], 0x45564157
  20.            jne .fail
  21.  
  22.            cmp word [eax+20], 1
  23.            jne .fail
  24.  
  25.            mov ecx, dword [eax+24]
  26.            mov edx, 22050
  27.            cmp ecx, edx
  28.            ja .high
  29.            je .l_22
  30.  
  31.            cmp ecx, 8000
  32.            je .l_8
  33.  
  34.            cmp ecx, 11025
  35.            je .l_11
  36.  
  37.            cmp ecx, 12000
  38.            je .l_12
  39.  
  40.            cmp ecx, 16000
  41.            je .l_16
  42. .fail:
  43.            xor eax, eax
  44.            ret
  45. .high:
  46.            cmp ecx, 24000
  47.            je .LN56
  48.            cmp ecx, 32000
  49.            je .LN65
  50.            cmp ecx, 44100
  51.            je .LN74
  52.            cmp ecx, 48000
  53.            jne .fail
  54.  
  55.            movzx ecx, word [eax+22]
  56.            dec ecx
  57.            je .LN79
  58.            dec ecx
  59.            jne .LN74
  60.  
  61.            mov edx, 19
  62.            jmp .done
  63. .LN79:
  64.            mov edx, 20
  65.            jmp .done
  66. .LN74:
  67.            movzx ecx, word [eax+22]
  68.            dec ecx
  69.            je .LN70
  70.            dec ecx
  71.            jne .LN65
  72.  
  73.            mov edx, 21
  74.            jmp .done
  75. .LN70:
  76.            mov edx, 22
  77.            jmp .done
  78. .LN65:
  79.            movzx ecx, word [eax+22]
  80.            dec ecx
  81.            je .LN61
  82.            dec ecx
  83.            jne .LN56
  84.  
  85.            mov edx, 23
  86.            jmp .done
  87. .LN61:
  88.            mov edx, 24
  89.            jmp .done
  90. .LN56:
  91.            movzx ecx, word [eax+22]
  92.            dec ecx
  93.            je .LN52
  94.            dec ecx
  95.            je .LN50
  96. .l_22:
  97.            movzx ecx, word [eax+22]
  98.            dec ecx
  99.            je .LN43
  100.            dec ecx
  101.            je .LN41
  102. .l_16:
  103.            movzx ecx, word [eax+22]
  104.            dec ecx
  105.            je .LN34
  106.            dec ecx
  107.            je .LN32
  108. .l_12:
  109.            movzx ecx, word [eax+22]
  110.            dec ecx
  111.            je .LN25
  112.            dec ecx
  113.            je .LN23
  114. .l_11:
  115.            movzx ecx, word [eax+22]
  116.            dec ecx
  117.            je .LN16
  118.            dec ecx
  119.            je .LN14
  120. .l_8:
  121.            movzx ecx, word [eax+22]
  122.            dec ecx
  123.            je .LN7
  124.            dec ecx
  125.            jne .fail
  126.  
  127.            mov edx, 35
  128.            jmp .done
  129. .LN7:
  130.            mov edx, 36
  131.            jmp .done
  132. .LN14:
  133.            mov edx, 33
  134.            jmp .done
  135. .LN16:
  136.            mov edx, 34
  137.            jmp .done
  138. .LN23:
  139.            mov edx, 31
  140.            jmp .done
  141. .LN25:
  142.            mov edx, 32
  143.            jmp .done
  144. .LN32:
  145.            mov edx, 29
  146.            jmp .done
  147. .LN34:
  148.            mov edx, 30
  149.            jmp .done
  150. .LN41:
  151.            mov edx, 27
  152.            jmp .done
  153. .LN43:
  154.            mov edx, 28
  155.            jmp .done
  156. .LN50:
  157.            mov edx, 25
  158.            jmp .done
  159. .LN52:
  160.            mov edx, 26
  161. .done:
  162.            xor ecx, ecx
  163.            cmp word [eax+34], 16
  164.            setne cl
  165.            dec ecx
  166.            and ecx, -18
  167.            add ecx, edx
  168.            mov eax, ecx
  169.            ret
  170. endp
  171.