Function at 0x629ccee8
Capabilities:
Resolve function by parsing pe exports

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x5c
mov eax, dword [esp + 0x74]
mov edi, dword [esp + 0x7c]
mov dword [esp + 0x44], edi
mov word [esp + 0x2e], ax
mov edi, dword [esp + 0x80]
mov esi, dword [esp + 0x70]
movzx eax, ax
mov dword [esp + 0x48], edi
mov dword [esp + 0x18], eax
imul edi, eax, 0x368
mov bl, byte [esp + 0x78]
mov dword [esp + 0x14], ecx
lea eax, [esi + edi + 0x268]
mov byte [esp + 0x43], bl
mov dword [esp + 0x28], eax
lea eax, [esi + edi]
mov bl, byte [esp + 0x88]
mov dword [esp + 0x20], 0
mov byte [esp + 0x2d], bl
mov ebp, dword [eax + 0x4f8]
mov bl, byte [esp + 0x8c]
mov al, byte [eax + 0x5ba]
mov byte [esp + 0x41], bl
mov byte [esp + 0x42], al
xor ebx, ebx
mov byte [esp + 0x2c], 1
mov byte [esp + 0x1e], 0xff
mov ecx, dword [esp + 0x48]
cmp dword [esp + 0x20], ecx
jae 0x629ccf9a
mov eax, dword [esp + 0x84]
cmp ebx, dword [eax + 4]
jae 0x629ccf9a
mov eax, dword [esp + 0x44]
mov edx, dword [esp + 0x20]
mov al, byte [eax + edx]
cmp al, 0x2f
jg 0x629ccfc5
jmp 0x629cd0e2
cmp byte [esp + 0x2c], 1
adc ebx, 0
cmp byte [esp + 0x1e], 0
js 0x629cd3f5
imul eax, dword [esp + 0x18], 0x368
mov cl, byte [esp + 0x1e]
mov byte [esi + eax + 0x5ba], cl
jmp 0x629cd3f5
cmp al, 0x39
jle 0x629ccfd2
cmp al, 0x40
jg 0x629ccfda
jmp 0x629cd0b2
sub eax, 0x30
jmp 0x629cd3d4
cmp al, 0x46
jle 0x629ccfe7
cmp al, 0x63
je 0x629ccfef
jmp 0x629cd0b2
sub eax, 0x37
jmp 0x629cd3d4
mov al, byte [esp + 0x41]
test al, al
jne 0x629cd01e
mov eax, dword [esp + 0x18]
mov dword [esp + 0xc], 0
mov dword [esp + 8], 3
mov dword [esp + 4], eax
mov dword [esp], esi
mov ecx, dword [esp + 0x14]
call method.OpenMPT::CSoundFile.GetBestPlugin_OpenMPT::CSoundFile::PlayState_const__unsigned_short__OpenMPT::PluginPriority__OpenMPT::PluginMutePriority__const
sub esp, 0x10
lea edx, [eax - 1]
cmp dl, 0xf9
jbe 0x629cd04d
xor eax, eax
test ebp, ebp
je 0x629cd3d4
mov eax, dword [esp + 0x18]
mov ecx, ebp
mov dword [esp + 4], eax
mov eax, dword [esp + 0x28]
mov dword [esp], eax
call method.OpenMPT::ModInstrument.GetMIDIChannel_OpenMPT::ModChannel_const__unsigned_short__const
push edx
push edx
jmp 0x629cd3d4
movzx eax, al
dec eax
mov ecx, dword [esp + 0x14]
imul eax, eax, 0xa0
mov eax, dword [ecx + eax + 0xdd43c]
test eax, eax
je 0x629cd026
mov dword [esp + 0xc], 0
mov dword [esp + 8], 0x62b356cc
mov dword [esp + 4], 0x62b356b8
mov dword [esp], eax
call sym.___dynamic_cast
mov ecx, eax
test eax, eax
je 0x629cd026
mov edx, dword [esp + 0x18]
mov eax, dword [eax]
mov dword [esp + 4], edx
mov edx, dword [esp + 0x28]
mov dword [esp], edx
call dword [eax + 0xc0]
cmp al, 0xff
push ecx
push ecx
jne 0x629cd3d4
jmp 0x629cd026
cmp al, 0x6e
jne 0x629cd0e2
movzx eax, byte [esi + edi + 0x587]
mov dword [esp], eax
mov byte [esp + 0x24], al
call method.OpenMPT::ModCommand.IsNote_unsigned_char_
mov cl, al
xor eax, eax
test cl, cl
je 0x629cd409
mov dl, byte [esp + 0x24]
lea eax, [edx - 1]
jmp 0x629cd409
cmp al, 0x76
jne 0x629cd14b
mov ecx, dword [esp + 0x14]
xor eax, eax
test dword [ecx + 0x106488], 0x10000002
je 0x629cd100
movsx eax, word [esi + edi + 0x570]
lea ecx, [esi + edi]
mov edx, dword [esp + 0x14]
mov dword [esp + 0x34], 0
add eax, dword [ecx + 0x518]
imul eax, dword [edx + 0x106518]
mov edx, dword [ecx + 0x554]
imul edx, dword [ecx + 0x558]
imul edx
mov ecx, edx
sar ecx, 0x1f
and ecx, 0xfffff
mov dword [esp + 0x30], ecx
add eax, dword [esp + 0x30]
adc edx, dword [esp + 0x34]
shrd eax, edx, 0x14
sar edx, 0x14
jmp 0x629cd19e
cmp al, 0x75
jne 0x629cd1d4
lea ecx, [esi + edi]
mov dword [esp + 0x3c], 0
mov eax, dword [ecx + 0x554]
imul eax, dword [ecx + 0x558]
mov edx, eax
mov eax, dword [ecx + 0x538]
mov ecx, dword [esp + 0x14]
imul eax, dword [ecx + 0x106518]
imul edx
mov ecx, edx
sar ecx, 0x1f
and ecx, 0x3ffffff
mov dword [esp + 0x38], ecx
add eax, dword [esp + 0x38]
adc edx, dword [esp + 0x3c]
shrd eax, edx, 0x1a
sar edx, 0x1a
mov dword [esp + 4], edx
mov dword [esp], eax
call method.int_mpt::mpt_libopenmpt.saturate_cast_int__long_long__long_long_
mov edx, eax
mov eax, 1
cmp edx, 1
jle 0x629cd409
mov eax, 0x7f
cmp edx, 0xff
jg 0x629cd409
mov eax, edx
sar eax, 1
jmp 0x629cd409
cmp al, 0x78
jne 0x629cd1e1
mov edx, dword [esi + edi + 0x51c]
jmp 0x629cd1ec
cmp al, 0x79
jne 0x629cd20c
mov edx, dword [esi + edi + 0x514]
mov eax, 0x7f
cmp edx, 0xff
jg 0x629cd409
mov eax, edx
mov ecx, 2
cdq
idiv ecx
jmp 0x629cd409
cmp al, 0x61
jne 0x629cd22f
xor eax, eax
test ebp, ebp
je 0x629cd409
mov edx, dword [ebp + 0x1c]
test dx, dx
je 0x629cd409
movzx eax, dx
dec eax
sar eax, 7
jmp 0x629cd24c
cmp al, 0x62
jne 0x629cd254
xor eax, eax
test ebp, ebp
je 0x629cd409
mov edx, dword [ebp + 0x1c]
test dx, dx
je 0x629cd409
lea eax, [edx - 1]
and eax, 0x7f
jmp 0x629cd409
cmp al, 0x6f
jne 0x629cd265
movzx eax, byte [esi + edi + 0x501]
jmp 0x629cd409
cmp al, 0x68
jne 0x629cd28f
mov ecx, dword [esp + 0x14]
mov al, byte [esp + 0x2e]
mov dx, word [esp + 0x2e]
and eax, 0x7f
cmp dx, word [ecx + 0x753bc]
jb 0x629cd409
mov al, byte [esi + edi + 0x57a]
jmp 0x629cd2bb
cmp al, 0x6d
jne 0x629cd2a2
mov al, byte [esi + edi + 0x2c0]
shr al, 7
jmp 0x629cd409
cmp al, 0x70
jne 0x629cd2be
xor eax, eax
test ebp, ebp
je 0x629cd409
mov al, byte [ebp + 0x1e]
test al, al
je 0x629cd409
dec eax
jmp 0x629cd24c
cmp al, 0x7a
jne 0x629cd370
cmp byte [esp + 0x43], 0
je 0x629cd358
cmp byte [esi + edi + 0x5ba], 0
js 0x629cd358
cmp ebx, 2
jbe 0x629cd2f7
mov eax, dword [esp + 0x84]
mov eax, dword [eax]
cmp byte [eax + ebx - 3], 0xf0
jne 0x629cd2f7
cmp byte [eax + ebx - 2], 0xef
ja 0x629cd358
movzx eax, byte [esp + 0x2d]
mov word [esp + 0x1e], ax
mov dword [esp], esi
fild word [esp + 0x1e]
movzx eax, byte [esp + 0x42]
fstp dword [esp + 8]
mov word [esp + 0x1e], ax
fild word [esp + 0x1e]
fstp dword [esp + 4]
call method.OpenMPT::CSoundFile.CalculateSmoothParamChange_OpenMPT::CSoundFile::PlayState_const__float__float_
fnstcw word [esp + 0x4e]
mov ax, word [esp + 0x4e]
or ah, 0xc
mov word [esp + 0x4c], ax
fldcw word [esp + 0x4c]
fistp word [esp + 0x1e]
fldcw word [esp + 0x4e]
mov dx, word [esp + 0x1e]
mov byte [esp + 0x1e], pe_nt_image_headers32
mov al, dl
mov byte [esi + edi + 0x5ba], dl
jmp 0x629cd409
cmp byte [esp + 0x1e], 0xff
mov al, byte [esp + 0x2d]
jne 0x629cd409
mov byte [esp + 0x1e], al
jmp 0x629cd409
cmp al, 0x73
jne 0x629cd3ec
mov edx, ebx
test edx, edx
je 0x629cd38a
mov eax, dword [esp + 0x84]
dec edx
mov eax, dword [eax]
cmp byte [eax + edx], 0xf0
jne 0x629cd376
mov eax, ebx
sub eax, edx
mov dword [esp + 0x24], eax
cmp eax, 2
jbe 0x629cd3ec
mov eax, dword [esp + 0x84]
mov ecx, dword [eax]
cmp byte [ecx + edx], 0xf0
jne 0x629cd3ec
cmp byte [ecx + edx + 3], 1
sbb eax, eax
not eax
add eax, 6
movzx eax, al
cmp dword [esp + 0x24], eax
jb 0x629cd3ec
add eax, edx
lea edx, [ecx + eax]
add ecx, ebx
xor eax, eax
cmp edx, ecx
je 0x629cd3cd
add al, byte [edx]
inc edx
jmp 0x629cd3c4
neg eax
jmp 0x629cd24c
mov edx, dword [esp + 0x84]
cmp byte [esp + 0x2c], 0
mov edx, dword [edx]
je 0x629cd425
mov byte [edx + ebx], al
xor byte [esp + 0x2c], 1
inc dword [esp + 0x20]
jmp 0x629ccf70
mov eax, dword [esp + 0x84]
mov dword [eax + 4], ebx
add esp, 0x5c
pop ebx
pop esi
pop edi
pop ebp
ret 0x20
cmp byte [esp + 0x2c], 1
mov ecx, dword [esp + 0x84]
mov byte [esp + 0x2c], 1
adc ebx, 0
mov edx, dword [ecx]
mov byte [edx + ebx], al
inc ebx
jmp 0x629cd3ec
add edx, ebx
inc ebx
movzx ecx, byte [edx]
shl ecx, 4
or eax, ecx
mov byte [edx], al
jmp 0x629cd3e7