Function at 0x6c9425a0
Capabilities:
Create thread

Disassembly:
push ebp
mov ebp, esp
push edi
mov edi, ecx
push esi
mov esi, edx
push ebx
sub esp, 0x3dc
mov dword [ebp - 0x3bc], eax
call sym._MCICDA_GetOpenDrv
mov ebx, eax
test byte [0x6c946018], 8
jne 0x6c942a30
test edi, edi
je 0x6c942a6e
test ebx, ebx
je 0x6c942a80
mov eax, dword [ebx + 0x18]
lea ecx, [ebp - 0x3ac]
lea edx, [ebp - 0x33c]
call sym._MCICDA_ReadTOC.isra.0
test eax, eax
je 0x6c942a20
test esi, 4
je 0x6c942930
mov edx, dword [edi + 4]
mov eax, ebx
call dbg.MCICDA_CalcFrame
lea edx, [ebp - 0x3b4]
mov dword [ebp - 0x3b4], eax
mov eax, dword [ebx + 0x18]
call sym._MCICDA_SkipDataTracks.isra.0
test eax, eax
jne 0x6c942920
test byte [0x6c946018], 8
jne 0x6c942af0
test esi, 8
jne 0x6c9429bf
movzx eax, byte [ebp - 0x339]
movzx edx, byte [ebp - 0x33a]
add eax, 1
sub eax, edx
movzx edx, byte [ebp + eax*8 - 0x333]
movzx ecx, byte [ebp + eax*8 - 0x332]
movzx eax, byte [ebp + eax*8 - 0x331]
imul edx, edx, 0x1194
imul ecx, ecx, 0x4b
add edx, ecx
lea edx, [edx + eax - 1]
mov dword [ebp - 0x3b0], edx
mov eax, dword [ebp - 0x3b4]
cmp edx, eax
jb 0x6c942a10
test byte [0x6c946018], 8
je 0x6c9426c4
mov dword [esp + 0x14], edx
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Playing_from__lu_to__lu_n
mov dword [esp + 8], str.MCICDA_Play
mov dword [esp + 4], 0x6c946018
mov dword [esp], 3
call sym._wine_dbg_log.constprop.0
xor eax, eax
and esi, 1
mov dword [ebp - 0x3c4], esi
je 0x6c9426d4
movzx eax, word [edi]
lea esi, [ebx + 0x10]
xchg dword [esi], eax
test eax, eax
jne 0x6c942ad0
mov eax, dword [ebp - 0x3b0]
mov edi, dword [ebp - 0x3b4]
mov dword [ebp - 0x3c0], eax
cmp edi, eax
je 0x6c942a90
movzx eax, byte [ebp - 0x339]
movzx edx, byte [ebp - 0x33a]
add eax, 1
sub eax, edx
movzx ecx, byte [ebp + eax*8 - 0x333]
movzx edx, byte [ebp + eax*8 - 0x332]
movzx eax, byte [ebp + eax*8 - 0x331]
imul ecx, ecx, 0x1194
imul edx, edx, 0x4b
add edx, ecx
lea eax, [edx + eax - 1]
cmp eax, edi
je 0x6c942a90
mov edx, dword [ebx + 0x1c]
test edx, edx
je 0x6c9427d0
mov eax, dword [ebx + 0x20]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_SetEvent]
sub esp, 4
mov dword [esp + 4], 0xffffffff
mov eax, dword [ebx + 0x1c]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_WaitForSingleObject]
mov eax, dword [ebx + 0x1c]
mov esi, dword [sym.imp.kernel32.dll_CloseHandle]
sub esp, 8
mov dword [esp], eax
call esi
mov eax, dword [ebx + 0x20]
mov dword [ebx + 0x1c], 0
sub esp, 4
mov dword [esp], eax
call esi
mov eax, dword [ebx + 0x30]
mov dword [ebx + 0x20], 0
sub esp, 4
mov edx, dword [eax]
mov dword [esp], eax
call dword [edx + 0x48]
mov eax, dword [ebx + 0x30]
sub esp, 4
mov edx, dword [eax]
mov dword [esp], eax
call dword [edx + 8]
mov eax, dword [ebx + 0x2c]
mov dword [ebx + 0x30], 0
sub esp, 4
mov edx, dword [eax]
mov dword [esp], eax
call dword [edx + 8]
mov dword [ebx + 0x2c], 0
sub esp, 4
mov eax, dword [0x6c949004]
test eax, eax
je 0x6c942e58
lea edx, [ebx + 0x2c]
mov dword [esp + 8], 0
mov dword [esp + 4], edx
mov dword [esp], 0
call eax
sub esp, 0xc
test eax, eax
jns 0x6c942b90
lea eax, [ebp - 0x360]
mov dword [ebp - 0x3bc], eax
mov eax, dword [ebx + 0x20]
test eax, eax
je 0x6c942826
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_CloseHandle]
mov dword [ebx + 0x20], 0
sub esp, 4
mov eax, dword [ebx + 0x30]
test eax, eax
je 0x6c94283f
mov edx, dword [eax]
mov dword [esp], eax
call dword [edx + 8]
mov dword [ebx + 0x30], 0
sub esp, 4
mov eax, dword [ebx + 0x2c]
test eax, eax
je 0x6c942858
mov edx, dword [eax]
mov dword [esp], eax
call dword [edx + 8]
mov dword [ebx + 0x2c], 0
sub esp, 4
mov eax, 0xe90452d5
xor ecx, ecx
mul edi
mov eax, 0x1b4e81b5
shr edx, 0xc
mov cl, dl
mul edi
mov eax, 0x88888889
mov esi, edx
shr esi, 3
mul esi
mov eax, esi
imul esi, esi, 0x4b
shr edx, 5
imul edx, edx, 0x3c
sub edi, esi
mov esi, dword [ebp - 0x3c0]
sub eax, edx
mov ch, al
mov eax, edi
movzx edi, al
mov eax, 0xe90452d5
movzx ecx, cx
mul esi
shl edi, 0x10
mov eax, 0x1b4e81b5
or ecx, edi
lea edi, [ebp - 0x3ac]
shr edx, 0xc
shl edx, 0x18
or ecx, edx
mul esi
mov eax, 0x88888889
mov dword [ebp - 0x360], ecx
mov ecx, edx
shr ecx, 3
mul ecx
mov eax, ecx
imul ecx, ecx, 0x4b
shr edx, 5
imul edx, edx, 0x3c
sub eax, edx
mov edx, 0x24018
mov byte [ebp - 0x35c], al
mov eax, esi
sub eax, ecx
mov byte [ebp - 0x35b], al
mov eax, dword [ebx + 0x18]
mov dword [esp + 0xc], edi
mov dword [esp + 8], 0
mov dword [esp + 4], 0
mov dword [esp], 6
mov ecx, dword [ebp - 0x3bc]
call sym._device_io.constprop.0
test eax, eax
je 0x6c942b30
xor eax, eax
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
lea ecx, [ebp - 0x3ac]
lea edx, [ebp - 0x378]
mov byte [ebp - 0x3b6], 1
mov eax, dword [ebx + 0x18]
mov dword [esp + 0xc], ecx
lea ecx, [ebp - 0x3b6]
mov dword [esp + 4], edx
mov edx, 0x2402c
mov dword [esp + 8], 0x18
mov dword [esp], 2
call sym._device_io.constprop.0
test eax, eax
je 0x6c942a20
movzx eax, byte [ebp - 0x36f]
movzx edx, byte [ebp - 0x36e]
imul eax, eax, 0x1194
imul edx, edx, 0x4b
add eax, edx
movzx edx, byte [ebp - 0x36d]
add eax, edx
lea edx, [ebp - 0x3b4]
mov dword [ebp - 0x3b4], eax
mov eax, dword [ebx + 0x18]
call sym._MCICDA_SkipDataTracks.isra.0
test eax, eax
jne 0x6c942920
test esi, 8
je 0x6c942641
mov edx, dword [edi + 8]
mov eax, ebx
call dbg.MCICDA_CalcFrame
lea edx, [ebp - 0x3b0]
mov dword [ebp - 0x3b0], eax
mov eax, dword [ebx + 0x18]
call sym._MCICDA_SkipDataTracks.isra.0
test eax, eax
jne 0x6c942920
mov edx, dword [ebp - 0x3b0]
mov eax, dword [ebp - 0x3b4]
test byte [0x6c946018], 8
jne 0x6c942b48
cmp edx, eax
jae 0x6c9426c4
lea esi, [esi]
lea esi, [esi]
mov eax, 0x11a
jmp 0x6c942920
call sym._MCICDA_GetError.isra.0
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
mov dword [esp + 0x18], edi
mov dword [esp + 0x14], esi
mov eax, dword [ebp - 0x3bc]
mov dword [esp + 0xc], str.__04X___08lX___p___n
mov dword [esp + 0x10], eax
mov dword [esp + 8], str.MCICDA_Play
mov dword [esp + 4], 0x6c946018
mov dword [esp], 3
call sym._wine_dbg_log.constprop.0
test edi, edi
jne 0x6c9425d2
lea esp, [ebp - 0xc]
mov eax, 0x129
pop ebx
pop esi
pop edi
pop ebp
ret
lea esp, [ebp - 0xc]
mov eax, 0x101
pop ebx
pop esi
pop edi
pop ebp
ret
mov ecx, dword [ebp - 0x3c4]
test ecx, ecx
je 0x6c94291e
xor eax, eax
xchg dword [esi], eax
test eax, eax
je 0x6c94291e
mov dword [esp + 8], 1
mov edi, dword [ebp - 0x3bc]
mov dword [esp], eax
mov dword [esp + 4], edi
call sym._mciDriverNotify_12
xor eax, eax
sub esp, 0xc
jmp 0x6c942920
mov dword [esp + 8], 4
mov edx, dword [ebx + 0xc]
mov dword [esp], eax
mov dword [esp + 4], edx
call sym._mciDriverNotify_12
sub esp, 0xc
jmp 0x6c9426e1
mov eax, dword [ebp - 0x3b4]
mov dword [esp + 0x14], eax
mov eax, dword [edi + 4]
mov dword [esp + 0xc], str.MCI_FROM_08lX_____lu_n
mov dword [esp + 0x10], eax
mov dword [esp + 8], str.MCICDA_Play
mov dword [esp + 4], 0x6c946018
mov dword [esp], 3
call sym._wine_dbg_log.constprop.0
jmp 0x6c942635
mov dword [ebx + 0x10], 0
mov eax, 0x106
jmp 0x6c942920
mov dword [esp + 0x14], edx
mov eax, dword [edi + 8]
mov dword [ebp - 0x3c0], edx
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.MCI_TO_08lX_____lu_n
mov dword [esp + 8], str.MCICDA_Play
mov dword [esp + 4], 0x6c946018
mov dword [esp], 3
call sym._wine_dbg_log.constprop.0
mov edx, dword [ebp - 0x3c0]
jmp 0x6c942681
mov eax, dword [ebx + 0x2c]
mov eax, dword [eax]
mov esi, dword [eax + 0x18]
call sym._GetDesktopWindow_0
mov dword [esp + 8], 2
mov dword [esp + 4], eax
mov eax, dword [ebx + 0x2c]
mov dword [esp], eax
call esi
movzx eax, byte [ebp - 0x333]
movzx edx, byte [ebp - 0x332]
mov dword [ebp - 0x38c], 0x20001
mov dword [ebp - 0x388], 0xac44
sub esp, 0xc
mov dword [ebp - 0x380], 0x100004
imul edx, edx, 0x4b
mov dword [ebp - 0x384], 0x2b110
imul eax, eax, 0x1194
add eax, edx
movzx edx, byte [ebp - 0x331]
add eax, edx
mov edx, edi
sub edx, eax
mov dword [ebx + 0x24], edx
mov edx, dword [ebp - 0x3c0]
sub edx, eax
xor eax, eax
mov dword [ebx + 0x28], edx
xor edx, edx
mov word [ebp - 0x37c], ax
xor eax, eax
mov dword [ebp + eax - 0x354], edx
mov dword [ebp + eax - 0x350], edx
add eax, 8
cmp eax, 0x18
jb 0x6c942c1d
lea eax, [ebp - 0x38c]
lea ecx, [ebx + 0x30]
mov dword [ebp - 0x360], 0x24
mov dword [ebp - 0x35c], 0x18000
lea esi, [ebp - 0x360]
mov dword [ebp - 0x358], 0x16650
mov dword [ebp - 0x350], eax
mov eax, dword [ebx + 0x2c]
mov edx, dword [eax]
mov dword [esp + 0xc], 0
mov dword [esp + 8], ecx
mov dword [ebp - 0x3bc], esi
mov dword [esp + 4], esi
mov dword [esp], eax
call dword [edx + 0xc]
sub esp, 0x10
test eax, eax
js 0x6c94280c
mov eax, dword [ebx + 0x30]
lea ecx, [ebp - 0x3a8]
mov edx, dword [eax]
mov dword [esp + 0x10], ecx
lea ecx, [ebp - 0x3a4]
mov dword [esp + 0x1c], 2
mov dword [esp + 0x18], 0
mov dword [esp + 0x14], 0
mov dword [esp + 0xc], ecx
mov dword [esp + 8], 0
mov dword [esp + 4], 0
mov dword [esp], eax
call dword [edx + 0x2c]
sub esp, 0x20
test eax, eax
js 0x6c94280c
mov eax, dword [ebx + 0x24]
mov ecx, dword [ebx + 0x28]
lea esi, [ebp - 0x3ac]
mov dword [ebp - 0x39c], 0
mov dword [ebp - 0x394], 2
mov edx, eax
sub ecx, eax
mov eax, 0xdee95c4d
shl edx, 0xb
mov dword [ebp - 0x3a0], edx
mul dword [ebp - 0x358]
mov eax, dword [ebx + 0x18]
shr edx, 0xb
cmp ecx, edx
cmova ecx, edx
mov dword [ebp - 0x398], ecx
lea ecx, [ebp - 0x3a0]
mov dword [esp + 0xc], esi
mov edx, dword [ebp - 0x3a8]
mov dword [esp + 8], edx
mov edx, dword [ebp - 0x3a4]
mov dword [esp], 0x10
mov dword [esp + 4], edx
mov edx, 0x2403e
call sym._device_io.constprop.0
mov esi, eax
mov eax, dword [ebx + 0x30]
mov edx, dword [eax]
mov dword [esp + 0x10], 0
mov dword [esp + 0xc], 0
mov ecx, dword [ebp - 0x3a8]
mov dword [esp + 8], ecx
mov ecx, dword [ebp - 0x3a4]
mov dword [esp], eax
mov dword [esp + 4], ecx
call dword [edx + 0x4c]
sub esp, 0x14
test esi, esi
jne 0x6c942e80
mov eax, dword [ebx + 0x20]
test eax, eax
je 0x6c942e70
lea eax, [ebp - 0x3ac]
mov dword [esp + 0x10], 0
mov dword [esp + 0x14], eax
mov dword [esp + 0xc], ebx
mov dword [esp + 8], dbg.MCICDA_playLoop
mov dword [esp + 4], 0
mov dword [esp], 0
call dword [sym.imp.kernel32.dll_CreateThread]
mov dword [ebx + 0x1c], eax
sub esp, 0x18
test eax, eax
je 0x6c94280c
mov eax, dword [ebx + 0x30]
mov edx, dword [eax]
mov dword [esp + 0xc], 1
mov dword [esp + 8], 0
mov dword [esp + 4], 0
mov dword [esp], eax
call dword [edx + 0x30]
sub esp, 0x10
test eax, eax
jns 0x6c94291e
mov eax, dword [ebx + 0x20]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_SetEvent]
sub esp, 4
mov dword [esp + 4], 0xffffffff
mov eax, dword [ebx + 0x1c]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_WaitForSingleObject]
mov eax, dword [ebx + 0x1c]
sub esp, 8
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_CloseHandle]
mov dword [ebx + 0x1c], 0
sub esp, 4
jmp 0x6c94280c
lea eax, [ebp - 0x360]
mov dword [ebp - 0x3bc], eax
jmp 0x6c942858
mov eax, dword [ebx + 0x1c]
jmp 0x6c942ddc
mov eax, dword [ebp - 0x398]
add dword [ebx + 0x24], eax
mov dword [esp + 0xc], 0
mov dword [esp + 8], 0
mov dword [esp + 4], 1
mov dword [esp], 0
call dword [sym.imp.kernel32.dll_CreateEventA]
mov dword [ebx + 0x20], eax
sub esp, 0x10
jmp 0x6c942d9b