Subversion Repositories Kolibri OS

Rev

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

  1. ;------------------------------------------------------------------------------
  2. ; init.obj
  3. ;       _InitSound@4            Èíèò,
  4. ;       _CreateBuffer@12        ñîçäàòü áóôåð,
  5. ;       _DestroyBuffer@4        óäàëèòü áóôåð
  6. ;
  7. ; sndgetsize.obj
  8. ;       _GetBufferSize@8        âçÿòü ðàçìåð áóôåðà,
  9. ;       _GetBufferFree@8        WTF???
  10. ;
  11. ; setbuf.obj
  12. ;       _SetBuffer@16           óñòàíîâèòü áóôåð,
  13. ;       _PlayBuffer@8           èãðàòü áóôåð,
  14. ;
  15. ; stopbuf.obj
  16. ;       _StopBuffer@4           îñòàíîâèòü áóôåð,
  17. ;------------------------------------------------------------------------------
  18. initialize_sound_system:
  19.         mov     [sound_flag],1
  20.  
  21.         stdcall _InitSound@4,version
  22.         cmp     eax,-1
  23.         je      snd_init_fail
  24.        
  25. ;       DEBUGF  1, "Sound init successful %x\n",eax
  26.         mov     eax,[version]
  27.         and     eax,0xffff
  28.         cmp     eax,SOUND_VERSION
  29.         jne     snd_version_fail
  30.  
  31. ;       DEBUGF  1, "Sound version successful %x\n",eax
  32.  
  33.         stdcall _test_wav@4,dword [wav_for_test]        ;letter_1a
  34.         test    eax,eax
  35.         jz      snd_test_wav_fail
  36.        
  37.         or      eax,PCM_OUT
  38.         mov     [snd_format],eax
  39.  
  40. ;       DEBUGF  1, "Test wav successful %x\n",eax
  41.  
  42.         call    find_data_offset
  43.        
  44.         mov     al,[sound_flag]
  45.         test    al,al
  46.         jz      .exit
  47.        
  48.         stdcall _CreateBuffer@12,[snd_format],0,hBuff1
  49.         cmp     eax,-1
  50.         je      snd_create_buffer_fail
  51.        
  52. ;       DEBUGF  1, "Create Buffer 1 successful %x\n",eax
  53.  
  54.         stdcall _CreateBuffer@12,[snd_format],0,hBuff2
  55.         cmp     eax,-1
  56.         je      snd_create_buffer_fail
  57.  
  58. ;       DEBUGF  1, "Create Buffer 1 successful %x\n",eax
  59. ;--------------------------------------
  60. .exit:
  61.         ret
  62. ;------------------------------------------------------------------------------
  63. find_data_offset:
  64.         mov     esi,[wav_for_test]      ;letter_1a
  65. ;--------------------------------------
  66. @@:
  67.         cmp     [esi],dword 'data'
  68.         je      @f
  69.  
  70.         inc     esi
  71.         cmp     esi,[wav_for_test_end]  ;letter_1a + letter_2b
  72.         jne     @b
  73.        
  74. ;       DEBUGF  1, "find data offset fail\n"
  75.         mov     [sound_flag],0
  76.         ret
  77. ;--------------------------------------
  78. @@:
  79.         sub     esi,[wav_for_test]      ;letter_1a
  80.         add     esi,4
  81.         mov     [data_offset],esi
  82.         ret
  83. ;------------------------------------------------------------------------------
  84. wave_out:
  85. ; in:
  86. ; eax - adress of wav sample
  87. ; ebp - hBuff   ; hardware buffer
  88.         pusha
  89. ;       DEBUGF  1, "Wave out\n"
  90. ; check for correct data_offset
  91.         push    eax
  92.         add     eax,[data_offset]      
  93.         sub     eax,4
  94.         cmp     [eax],dword 'data'
  95.         pop     eax
  96.         je      @f
  97.  
  98.         mov     [wav_for_test],eax
  99.         mov     ebx,eax
  100.         add     ebx,1024
  101.         mov     [wav_for_test_end],ebx
  102.         call    find_data_offset
  103.         cmp     [sound_flag],0
  104.         jz      .exit
  105. ;--------------------------------------
  106. @@:
  107.         add     eax,[data_offset]
  108.         mov     ebx,[eax]
  109.         add     eax,4
  110. ;       DEBUGF  1, "src EAX: %x size EBX: %x\n",eax,ebx
  111. ;       stdcall _WaveOut@12,[hBuff],eax,ebx
  112.         stdcall _WaveOut@12,ebp,eax,ebx
  113. ;       DEBUGF  1, "return EAX: %x\n",eax
  114.         cmp     eax,-1
  115.         popa
  116.         je      snd_wave_out_fail
  117. ;--------------------------------------
  118. .exit:
  119.         ret
  120. ;------------------------------------------------------------------------------
  121. snd_init_fail:
  122. ;       DEBUGF  1, "Sound init fail %x\n",eax
  123.         mov     [sound_flag],0
  124.         ret
  125. ;------------------------------------------------------------------------------
  126. snd_version_fail:
  127. ;       DEBUGF  1, "Sound version fail %x\n",eax
  128.         mov     [sound_flag],0
  129.         ret
  130. ;------------------------------------------------------------------------------
  131. snd_test_wav_fail:
  132. ;       DEBUGF  1, "Test wav fail %x\n",eax
  133.         mov     [sound_flag],0
  134.         ret
  135. ;------------------------------------------------------------------------------
  136. snd_create_buffer_fail:
  137. ;       DEBUGF  1, "Create Buffer fail %x\n",eax
  138.         mov     [sound_flag],0
  139.         ret
  140. ;------------------------------------------------------------------------------
  141. snd_wave_out_fail:
  142. ;       DEBUGF  1, "Wave Out fail\n"
  143.         mov     [sound_flag],0
  144.         ret
  145. ;------------------------------------------------------------------------------
  146. snd_background_music_thread_start:
  147.         mov     eax,[background_music]
  148.         mov     ebp,[hBuff1]
  149.         call    wave_out
  150.         jmp     snd_background_music_thread_start
  151. ;       mcall   -1
  152. ;------------------------------------------------------------------------------
  153. snd_kick_action:
  154.         cmp     [snd_kick_flag],1
  155.         je      @f
  156.  
  157.         mcall   51,1,snd_kick_action_thread_start,snd_kick_action_thread_stack
  158. ;--------------------------------------
  159. @@:
  160.         ret
  161. ;------------------------------------------------------------------------------
  162. snd_kick_action_thread_start:
  163.         mov     [snd_kick_flag],1
  164.         mov     eax,[stone_kick_sound]
  165.         mov     ebp,[hBuff2]
  166.         call    wave_out
  167.         mov     [snd_kick_flag],0
  168.         mcall   -1
  169. ;------------------------------------------------------------------------------