format MS COFF include "snd.inc" include "proc32.inc" section '.text' align 16 code readable executable public _InitSound@4 public _CreateBuffer@12 public _DestroyBuffer@4 align 4 _InitSound@4: ;p_ver:dword push ebx push ecx mov eax, 68 mov ebx, 16 mov ecx, szInfinity int 0x40 mov [hSound], eax test eax, eax jz .fail mov eax, 68 mov ebx, 16 mov ecx, szSound int 0x40 mov [hrdwSound], eax lea eax, [esp+12] ;p_ver xor ebx, ebx push 4 ;.out_size push eax ;.output push ebx ;.inp_size push ebx ;.input push SRV_GETVERSION ;.code push [hSound] ;.handle mov eax, 68 mov ebx, 17 mov ecx, esp ;[handle] int 0x40 add esp, 24 pop ecx pop ebx ret 4 .fail: or eax, -1 pop ecx pop ebx ret 4 align 4 _CreateBuffer@12: ;format:dword,size:dword,p_str:dword push ebx push ecx lea eax, [esp+20] ;p_str lea ebx, [esp+12] ;format push 4 ;.out_size push eax ;.output push 8 ;.inp_size push ebx ;.input push SND_CREATE_BUFF;.code push [hSound] ;.handle mov eax, 68 mov ebx, 17 mov ecx, esp int 0x40 add esp, 24 ;io_cintrol pop ecx pop ebx ret 12 align 4 _DestroyBuffer@4: ;str:dword push ebx push ecx xor eax, eax lea ebx, [esp+12] ;[stream] push eax ;.out_size push eax ;.output push 4 ;.inp_size push ebx ;.input push SND_DESTROY_BUFF;.code push [hSound] ;.handle mov eax, 68 mov ebx, 17 mov ecx, esp ;[handle] int 0x40 add esp, 24 pop ecx pop ebx ret 4 section '.data' align 16 data readable writable public hSound public hrdwSound hSound dd ? hrdwSound dd ? szInfinity db 'INFINITY',0 szSound db 'SOUND',0