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

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x280
mov ecx, dword [0x4a7790]
push ebx
push ebp
push esi
mov ebp, dword [ecx]
xor esi, esi
push edi
mov dword [esp + 0x6c], esi
mov eax, dword [ebp + 4]
test eax, eax
jle 0x40645d
lea eax, [esi*8]
sub eax, esi
shl eax, 4
add eax, esi
lea eax, [eax + eax*2]
lea eax, [eax + eax*4]
lea eax, [eax + eax*4]
lea ebp, [ebp + eax*4 + 8]
mov al, byte [ecx + 8]
test al, al
je 0x406414
mov edx, dword [ecx + 0x10]
mov eax, dword [ecx + 0x14]
push str.Drive_Information
mov dword [ecx + edx*4 + 0x18], eax
mov eax, dword [0x4a7790]
mov ebx, dword [eax + 0x10]
inc ebx
mov dword [eax + 0x10], ebx
mov ecx, dword [0x4a7790]
xor ebx, ebx
mov dword [ecx + 0x14], ebx
call fcn.00405030
push str._________________
call fcn.00405030
lea edx, [ebp + 0x3d]
lea eax, [ebp + 0x35]
push edx
push eax
lea ecx, [esp + 0xa0]
push str.Drive:_.8s__.16s
push ecx
call fcn.00445f93
lea edx, [esp + 0xa8]
push edx
call fcn.00405030
lea eax, [ebp + 9]
lea ecx, [esp + 0xac]
push eax
push str.Type:_s
push ecx
call fcn.00445f93
lea edx, [esp + 0xb8]
push edx
call fcn.00405030
lea eax, [ebp + 0x4d]
lea ecx, [esp + 0xbc]
push eax
push str.Firmware_Version:_.4s
push ecx
call fcn.00445f93
lea edx, [esp + 0xc8]
push edx
call fcn.00405030
mov ax, word [ebp + 0x71]
push eax
call fcn.0040a810
and eax, 0xffff
add esp, 0x40
cmp eax, 0x400
jl 0x405314
test eax, 0x3ff
jne 0x405314
sar eax, 0xa
push eax
lea ecx, [esp + 0x94]
push str.Buffer_Size:_d_MB
push ecx
jmp 0x405322
push eax
lea edx, [esp + 0x94]
push str.Buffer_Size:_d_KB
push edx
call fcn.00445f93
add esp, 0xc
lea eax, [esp + 0x90]
push eax
call fcn.00405030
lea eax, [ebp + 0x51]
lea ecx, [esp + 0x94]
push eax
push str._.12s
push ecx
call fcn.00445f93
add esp, 0x10
xor edi, edi
lea esi, [esp + 0x90]
movsx edx, byte [esi]
push edx
call fcn.0044601f
add esp, 4
test eax, eax
jne 0x405377
mov al, byte [esi]
cmp al, 0x2f
je 0x405377
cmp al, 0x20
jne 0x405394
test edi, edi
jne 0x405394
cmp byte [esi], 0x2f
jne 0x405380
inc edi
mov byte [esi], 0x2d
movsx eax, byte [esi]
push eax
call fcn.0044601f
add esp, 4
test eax, eax
je 0x405391
inc ebx
inc esi
jmp 0x405359
cmp ebx, 6
mov byte [esi], 0
jne 0x4053cf
test edi, edi
jne 0x4053cf
lea ecx, [esp + 0x94]
lea edx, [esp + 0x92]
push ecx
lea eax, [esp + 0x94]
push edx
push eax
lea ecx, [esp + 0x19c]
push str._.2s__.2s__.2s
push ecx
call fcn.00445f93
add esp, 0x14
jmp 0x40540d
cmp edi, 2
jge 0x4053e2
lea edx, [esp + 0x190]
mov edi, 0x48c474
jmp 0x4053f0
lea edi, [esp + 0x90]
lea edx, [esp + 0x190]
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov edi, str.Date:
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
lea edx, [esp + 0x90]
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
xor eax, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea edi, [esp + 0x190]
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebx, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
lea eax, [esp + 0x90]
and ecx, 3
push eax
rep movsb byte es:[edi], byte [esi]
call fcn.00405030
mov edi, str.Serial_Number:
or ecx, 0xffffffff
xor eax, eax
add esp, 4
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
lea edx, [esp + 0x90]
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [ebp + 0x844f]
test eax, eax
je 0x4054e4
add eax, 4
push 0x1f
lea ecx, [esp + 0x194]
push eax
push ecx
call fcn.004460d0
mov edx, dword [ebp + 0x844f]
xor eax, eax
lea ecx, [esp + 0x19c]
mov al, byte [edx + 3]
push ecx
mov byte [esp + eax + 0x1a0], 0
call fcn.00402b00
add esp, 0x10
jmp 0x405520
mov byte [esp + 0x17], 1
xor esi, esi
mov bl, byte [esi + ebp + 0x5b]
movsx eax, bl
push eax
call fcn.0044609d
add esp, 4
test eax, eax
jne 0x405503
mov byte [esp + 0x17], al
mov byte [esp + esi + 0x190], bl
inc esi
cmp esi, 0xa
jl 0x4054eb
mov al, byte [esp + 0x17]
test al, al
je 0x405553
mov byte [esp + 0x19a], 0
lea edi, [esp + 0x190]
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebx, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea eax, [esp + 0x90]
push eax
call fcn.00405030
lea eax, [ebp + 0x51]
lea ecx, [esp + 0x94]
push eax
push str.Vendor_Specific:__.20s
push ecx
call fcn.00445f93
lea edx, [esp + 0xa0]
push edx
call fcn.00405030
mov eax, dword [ebp + 0x29]
lea ecx, [esp + 0xa4]
add eax, 0x41
push eax
push str.Drive_Letter:_c:_
push ecx
call fcn.00445f93
lea edx, [esp + 0xb0]
push edx
call fcn.00405030
mov eax, dword [ebp + 5]
mov ecx, dword [ebp + 1]
push eax
push ecx
lea edx, [esp + 0xbc]
push str.Location:_d:_d
push edx
call fcn.00445f93
lea eax, [esp + 0xc4]
push eax
call fcn.00405030
mov al, byte [ebp]
add esp, 0x38
test al, 2
je 0x40614f
mov cl, byte [ebp + 0x6b]
shr cl, 5
push ecx
call fcn.0040a7f0
push eax
lea edx, [esp + 0x98]
push str.Mechanism:_s
push edx
call fcn.00445f93
lea eax, [esp + 0xa0]
push eax
call fcn.00405030
mov eax, dword [ebp + 0x8b]
lea esi, [ebp + 0x8b]
add esp, 0x14
cmp eax, 0xffffffff
jne 0x405647
mov edi, str.Read_Speed:_n_a
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
jmp 0x4057d3
lea ecx, [esp + 0x90]
push str.Read_Speed:
push ecx
call fcn.00445f93
mov eax, dword [esi]
add esp, 8
xor ebx, ebx
cmp eax, 0xffffffff
mov byte [esp + 0x17], bl
mov dword [esp + 0x40], ebx
mov dword [esp + 0x44], 0x40660000
je 0x4057a7
mov eax, esi
mov ecx, dword [eax]
test ebx, ebx
mov dword [esp + 0x18], ecx
jne 0x4056df
mov eax, ecx
mov esi, 0x569
cdq
idiv esi
test edx, edx
je 0x4056c8
cmp ecx, 0xcfc
je 0x4056c8
mov eax, ecx
mov esi, 0x564
cdq
idiv esi
test edx, edx
je 0x4056b1
cmp ecx, 0xcf0
jne 0x4056df
mov dword [esp + 0x40], 0
mov dword [esp + 0x44], 0x40959000
mov byte [esp + 0x17], 1
jmp 0x4056e7
mov dword [esp + 0x40], 0
mov dword [esp + 0x44], 0x4095a400
mov byte [esp + 0x17], 1
jmp 0x4056e7
mov al, byte [esp + 0x17]
test al, al
je 0x405704
fild dword [esp + 0x18]
sub esp, 8
lea edx, [esp + 0x198]
fdiv qword [esp + 0x48]
fstp qword [esp]
push 0x48c3ec
push edx
jmp 0x40571f
fild dword [esp + 0x18]
sub esp, 8
lea eax, [esp + 0x198]
fdiv qword [esp + 0x48]
fstp qword [esp]
push 0x48c3e4
push eax
call fcn.00445f93
add esp, 0x10
test ebx, ebx
je 0x40575c
mov edi, 0x48c3e0
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea edi, [esp + 0x190]
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
inc ebx
rep movsb byte es:[edi], byte [esi]
mov ecx, dword [ebp + ebx*4 + 0x8b]
lea eax, [ebp + ebx*4 + 0x8b]
cmp ecx, 0xffffffff
jne 0x40567b
mov edi, 0x48c3dc
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebx, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
and ecx, 3
lea eax, [esp + 0x90]
rep movsb byte es:[edi], byte [esi]
push eax
call fcn.00405030
mov eax, dword [ebp + 0x21b]
lea esi, [ebp + 0x21b]
add esp, 4
cmp eax, 0xffffffff
jne 0x405822
mov edi, str.Write_Speed:_n_a
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
jmp 0x4059ae
lea ecx, [esp + 0x90]
push str.Write_Speed:
push ecx
call fcn.00445f93
mov eax, dword [esi]
add esp, 8
xor ebx, ebx
cmp eax, 0xffffffff
mov byte [esp + 0x17], bl
mov dword [esp + 0x38], ebx
mov dword [esp + 0x3c], 0x40660000
je 0x405982
mov eax, esi
mov ecx, dword [eax]
test ebx, ebx
mov dword [esp + 0x18], ecx
jne 0x4058ba
mov eax, ecx
mov esi, 0x569
cdq
idiv esi
test edx, edx
je 0x4058a3
cmp ecx, 0xcfc
je 0x4058a3
mov eax, ecx
mov esi, 0x564
cdq
idiv esi
test edx, edx
je 0x40588c
cmp ecx, 0xcf0
jne 0x4058ba
mov dword [esp + 0x38], 0
mov dword [esp + 0x3c], 0x40959000
mov byte [esp + 0x17], 1
jmp 0x4058c2
mov dword [esp + 0x38], 0
mov dword [esp + 0x3c], 0x4095a400
mov byte [esp + 0x17], 1
jmp 0x4058c2
mov al, byte [esp + 0x17]
test al, al
je 0x4058df
fild dword [esp + 0x18]
sub esp, 8
lea edx, [esp + 0x198]
fdiv qword [esp + 0x40]
fstp qword [esp]
push 0x48c3ec
push edx
jmp 0x4058fa
fild dword [esp + 0x18]
sub esp, 8
lea eax, [esp + 0x198]
fdiv qword [esp + 0x40]
fstp qword [esp]
push 0x48c3e4
push eax
call fcn.00445f93
add esp, 0x10
test ebx, ebx
je 0x405937
mov edi, 0x48c3e0
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea edi, [esp + 0x190]
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
inc ebx
rep movsb byte es:[edi], byte [esi]
mov ecx, dword [ebp + ebx*4 + 0x21b]
lea eax, [ebp + ebx*4 + 0x21b]
cmp ecx, 0xffffffff
jne 0x405856
mov edi, 0x48c3dc
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x90]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov ebx, ecx
mov edi, edx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
and ecx, 3
lea eax, [esp + 0x90]
rep movsb byte es:[edi], byte [esi]
push eax
call fcn.00405030
push 0x4a778c
call fcn.00405030
mov al, byte [ebp]
add esp, 8
test al, 8
je 0x405a1f
mov eax, dword [ebp + 0x83c3]
test eax, eax
je 0x405a66
mov cl, byte [eax + 4]
lea edx, [esp + 0x90]
and ecx, 1
push ecx
push str.Read_CD_Text
push edx
call fcn.004051c0
push eax
call fcn.00405030
mov eax, dword [ebp + 0x83c3]
lea edx, [esp + 0xa0]
mov cl, byte [eax + 4]
shr ecx, 1
and ecx, 1
push ecx
push str.Return_C2_Pointers
push edx
jmp 0x405a58
mov al, byte [ebp + 0x6c]
lea ecx, [esp + 0x90]
shr eax, 5
and eax, 1
push eax
push str.Read_CD_Text
push ecx
call fcn.004051c0
push eax
call fcn.00405030
mov dl, byte [ebp + 0x6a]
lea eax, [esp + 0xa0]
shr edx, 4
and edx, 1
push edx
push str.Return_C2_Pointers
push eax
call fcn.004051c0
push eax
call fcn.00405030
add esp, 0x20
mov al, byte [ebp]
xor ecx, ecx
xor ebx, ebx
xor edi, edi
test al, 0x10
mov dword [esp + 0x58], ecx
mov dword [esp + 0x48], ecx
mov dword [esp + 0x18], ecx
mov dword [esp + 0x60], ecx
mov dword [esp + 0x30], ecx
mov dword [esp + 0x7c], ecx
mov dword [esp + 0x24], ecx
mov dword [esp + 0x2c], ecx
mov dword [esp + 0x34], ecx
mov dword [esp + 0x80], ecx
mov dword [esp + 0x64], ecx
mov dword [esp + 0x28], ecx
mov dword [esp + 0x20], ecx
mov dword [esp + 0x68], ecx
mov dword [esp + 0x74], ecx
mov dword [esp + 0x88], ecx
mov dword [esp + 0x84], ecx
mov dword [esp + 0x50], ecx
mov dword [esp + 0x70], ecx
mov dword [esp + 0x4c], ecx
mov dword [esp + 0x78], ecx
mov dword [esp + 0x54], ecx
mov dword [esp + 0x5c], ecx
mov dword [esp + 0x1c], ecx
je 0x405b10
mov edx, dword [ebp + 0x8467]
mov esi, 1
test dh, 4
je 0x405af4
mov dword [esp + 0x24], esi
mov dword [esp + 0x48], esi
test dh, 0x20
je 0x405b01
mov dword [esp + 0x28], esi
mov dword [esp + 0x68], esi
test dh, 0x40
je 0x405b15
mov dword [esp + 0x20], esi
mov dword [esp + 0x74], esi
jmp 0x405b15
mov esi, 1
test al, 8
je 0x405c61
cmp dword [ebp + 0x8417], ecx
je 0x405b31
mov dword [esp + 0x64], esi
mov dword [esp + 0x28], esi
mov dword [esp + 0x20], esi
cmp dword [ebp + 0x8407], ecx
je 0x405b3f
mov ebx, esi
mov dword [esp + 0x58], esi
mov eax, dword [ebp + 0x83ef]
cmp eax, ecx
je 0x405b5d
mov dl, byte [eax + 4]
mov dword [esp + 0x2c], esi
test dl, 1
mov dword [esp + 0x34], esi
je 0x405b5d
mov dword [esp + 0x60], esi
mov eax, dword [ebp + 0x83f3]
cmp eax, ecx
je 0x405b7b
mov dl, byte [eax + 4]
mov dword [esp + 0x2c], esi
test dl, 1
mov dword [esp + 0x34], esi
je 0x405b7b
mov dword [esp + 0x18], esi
mov eax, dword [ebp + 0x8467]
test ah, 1
je 0x405b8a
mov dword [esp + 0x18], esi
mov eax, dword [ebp + 0x83f7]
cmp eax, ecx
je 0x405ba5
test byte [eax + 4], 1
je 0x405b9e
mov dword [esp + 0x7c], esi
mov dword [esp + 0x80], esi
mov eax, dword [ebp + 0x83c7]
cmp eax, ecx
je 0x405bb9
test byte [eax + 6], 1
je 0x405bb9
mov dword [esp + 0x24], esi
mov eax, dword [ebp + 0x841b]
cmp eax, ecx
je 0x405be3
mov dl, byte [eax + 4]
mov dword [esp + 0x88], esi
test dl, 1
je 0x405bd9
mov dword [esp + 0x84], esi
test byte [eax + 6], 1
je 0x405be3
mov dword [esp + 0x50], esi
mov eax, dword [ebp + 0x841f]
cmp eax, ecx
je 0x405c01
test byte [eax + 4], 1
je 0x405bf7
mov dword [esp + 0x70], esi
test byte [eax + 6], 1
je 0x405c01
mov dword [esp + 0x4c], esi
mov eax, dword [ebp + 0x83ff]
cmp eax, ecx
je 0x405c2f
mov al, byte [eax + 4]
mov dword [esp + 0x30], esi
mov dl, al
shr edx, 6
and edx, 1
test al, 0x40
mov edi, edx
jne 0x405c2a
xor eax, eax
mov al, byte [ebp + 0x69]
mov edi, eax
shr edi, 7
mov esi, 1
cmp dword [ebp + 0x83eb], ecx
je 0x405c3b
mov dword [esp + 0x1c], esi
cmp dword [ebp + 0x8423], ecx
je 0x405c47
mov dword [esp + 0x78], esi
cmp dword [ebp + 0x8427], ecx
je 0x405c53
mov dword [esp + 0x54], esi
cmp dword [ebp + 0x842b], ecx
je 0x405c7d
mov dword [esp + 0x5c], esi
jmp 0x405c7d
xor eax, eax
xor ecx, ecx
mov al, byte [ebp + 0x68]
mov cl, byte [ebp + 0x69]
mov ebx, eax
and eax, esi
shr ebx, 4
mov edi, ecx
and ebx, esi
mov dword [esp + 0x30], eax
shr edi, 7
mov al, byte [ebp + 0x67]
mov dl, byte [ebp + 0x68]
and eax, 1
lea ecx, [esp + 0x90]
shr edx, 1
push eax
and edx, 1
push str.Read_CD_R
push ecx
mov esi, edx
call fcn.004051c0
push eax
call fcn.00405030
mov dl, byte [ebp + 0x67]
lea eax, [esp + 0xa0]
shr edx, 1
and edx, 1
push edx
push str.Read_CD_RW
push eax
call fcn.004051c0
push eax
call fcn.00405030
mov cl, byte [ebp + 0x67]
lea edx, [esp + 0xb0]
shr ecx, 3
and ecx, 1
push ecx
push str.Read_DVD_ROM
push edx
call fcn.004051c0
push eax
call fcn.00405030
mov al, byte [ebp + 0x67]
lea ecx, [esp + 0xc0]
shr eax, 5
and eax, 1
push eax
push str.Read_DVD_RAM
push ecx
call fcn.004051c0
push eax
call fcn.00405030
mov dl, byte [ebp + 0x67]
add esp, 0x40
shr edx, 4
and edx, 1
lea eax, [esp + 0x90]
push edx
push str.Read_DVD_R
push eax
call fcn.004051c0
push eax
call fcn.00405030
mov cl, byte [ebp + 0x67]
lea edx, [esp + 0xa0]
shr ecx, 4
and ecx, 1
push ecx
push str.Read_DVD_RW
push edx
call fcn.004051c0
push eax
call fcn.00405030
mov eax, dword [esp + 0x44]
lea ecx, [esp + 0xb0]
push eax
push str.Read_DVD_R_DL
push ecx
call fcn.004051c0
push eax
call fcn.00405030
mov edx, dword [esp + 0x5c]
lea eax, [esp + 0xc0]
push edx
push str.Read_DVDR
push eax
call fcn.004051c0
push eax
call fcn.00405030
add esp, 0x40
mov ecx, dword [esp + 0x34]
lea edx, [esp + 0x90]
push ecx
push str.Read_DVDRW
push edx
call fcn.004051c0
push eax
call fcn.00405030
mov eax, dword [esp + 0x90]
lea ecx, [esp + 0xa0]
push eax
push str.Read_DVDR_DL
push ecx
call fcn.004051c0
push eax
call fcn.00405030
mov edx, dword [esp + 0x84]
lea eax, [esp + 0xb0]
push edx
push str.Read_BD_ROM
push eax
call fcn.004051c0
push eax
call fcn.00405030
mov ecx, dword [esp + 0x58]
lea edx, [esp + 0xc0]
push ecx
push str.Read_BD_R
push edx
call fcn.004051c0
push eax
call fcn.00405030
mov eax, dword [esp + 0x60]
add esp, 0x40
lea ecx, [esp + 0x90]
push eax
push str.Read_BD_RE
push ecx
call fcn.004051c0
push eax
call fcn.00405030
mov edx, dword [esp + 0x98]
lea eax, [esp + 0xa0]
push edx
push str.Read_HD_DVD_ROM
push eax
call fcn.004051c0
push eax
call fcn.00405030
mov ecx, dword [esp + 0xa4]
lea edx, [esp + 0xb0]
push ecx
push str.Read_HD_DVD_R
push edx
call fcn.004051c0
push eax
call fcn.00405030
mov eax, dword [esp + 0x80]
lea ecx, [esp + 0xc0]
push eax
push str.Read_HD_DVD_RW
push ecx
call fcn.004051c0
push eax
call fcn.00405030
mov edx, dword [esp + 0xb8]
add esp, 0x40
lea eax, [esp + 0x90]
push edx
push str.Read_HD_BURN
push eax
call fcn.004051c0
push eax
call fcn.00405030
mov cl, byte [ebp + 0x6a]
lea edx, [esp + 0xa0]
and ecx, 1
push ecx
push str.Read_Digital_Audio
push edx
call fcn.004051c0
push eax
call fcn.00405030
xor eax, eax
lea edx, [esp + 0xb0]
mov al, byte [ebp + 0x6a]
mov ecx, eax
and eax, 4
shr ecx, 1
and ecx, 4
or ecx, eax
shr ecx, 2
push ecx
push str.Read_CDG
push edx
call fcn.004051c0
push eax
call fcn.00405030
mov al, byte [ebp + 0x69]
lea ecx, [esp + 0xc0]
shr eax, 5
and eax, 1
push eax
push str.Read_VideoCD
push ecx
call fcn.004051c0
push eax
call fcn.00405030
add esp, 0x40
push 0x4a778c
call fcn.00405030
mov edx, dword [esp + 0x34]
lea eax, [esp + 0x94]
push edx
push str.Write_CD_R
push eax
call fcn.004051c0
push eax
call fcn.00405030
push esi
lea ecx, [esp + 0xa8]
push str.Write_CD_RW
push ecx
call fcn.004051c0
push eax
call fcn.00405030
push ebx
lea edx, [esp + 0xb8]
push str.Write_DVD_R
push edx
call fcn.004051c0
push eax
call fcn.00405030
mov eax, dword [esp + 0x8c]
lea ecx, [esp + 0xc4]
push eax
push str.Write_DVD_RW
push ecx
call fcn.004051c0
add esp, 0x40
push eax
call fcn.00405030
mov edx, dword [esp + 0x4c]
lea eax, [esp + 0x94]
push edx
push str.Write_DVD_R_DL
push eax
call fcn.004051c0
push eax
call fcn.00405030
mov ecx, dword [esp + 0x2c]
lea edx, [esp + 0xa4]
push ecx
push str.Write_DVDR
push edx
call fcn.004051c0
push eax
call fcn.00405030
mov eax, dword [esp + 0x84]
lea ecx, [esp + 0xb4]
push eax
push str.Write_DVDRW
push ecx
call fcn.004051c0
push eax
call fcn.00405030
mov edx, dword [esp + 0xb0]
lea eax, [esp + 0xc4]
push edx
push str.Write_DVDR_DL
push eax
call fcn.004051c0
add esp, 0x40
push eax
call fcn.00405030
mov cl, byte [ebp + 0x68]
lea edx, [esp + 0x94]
shr ecx, 5
and ecx, 1
push ecx
push str.Write_DVD_RAM
push edx
call fcn.004051c0
push eax
call fcn.00405030
mov eax, dword [esp + 0x7c]
lea ecx, [esp + 0xa4]
push eax
push str.Write_BD_R
push ecx
call fcn.004051c0
push eax
call fcn.00405030
mov edx, dword [esp + 0x98]
lea eax, [esp + 0xb4]
push edx
push str.Write_BD_RE
push eax
call fcn.004051c0
push eax
call fcn.00405030
mov ecx, dword [esp + 0xa4]
lea edx, [esp + 0xc4]
push ecx
push str.Write_HD_DVD_R
push edx
call fcn.004051c0
add esp, 0x40
push eax
call fcn.00405030
mov eax, dword [esp + 0x50]
lea ecx, [esp + 0x94]
push eax
push str.Write_HD_DVD_RW
push ecx
call fcn.004051c0
push eax
call fcn.00405030
mov edx, dword [esp + 0x68]
lea eax, [esp + 0xa4]
push edx
push str.Write_HD_BURN_R
push eax
call fcn.004051c0
push eax
call fcn.00405030
mov ecx, dword [esp + 0x80]
lea edx, [esp + 0xb4]
push ecx
push str.Write_HD_BURN_RW
push edx
call fcn.004051c0
push eax
call fcn.00405030
push edi
lea eax, [esp + 0xc8]
push str.Buffer_Underrun_Protection
push eax
call fcn.004051c0
add esp, 0x40
push eax
call fcn.00405030
mov ecx, dword [esp + 0x20]
push ecx
lea edx, [esp + 0x98]
push str.Mount_Rainier
push edx
call fcn.004051c0
push eax
call fcn.00405030
xor eax, eax
lea ecx, [esp + 0xa4]
mov al, byte [ebp + 0x846b]
push eax
push str.SolidBurn
push ecx
call fcn.004051c0
push eax
call fcn.00405030
add esp, 0x24
mov edi, 0x4a778c
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x190]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
xor al, al
and ecx, 3
xor ebx, ebx
rep movsb byte es:[edi], byte [esi]
mov dword [esp + 0x1c], ebx
mov edx, 1
mov ecx, ebx
shl edx, cl
test dword [ebp + 0x7f], edx
je 0x406207
test al, al
je 0x4061c7
mov edi, 0x48c3e0
or ecx, 0xffffffff
xor eax, eax
lea ebx, [esp + 0x190]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov esi, edi
mov edi, ebx
mov ebx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, ebx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, ebx
mov ebx, dword [esp + 0x1c]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
push edx
mov byte [esp + 0x1b], 1
call fcn.00409cd0
mov edi, eax
or ecx, 0xffffffff
xor eax, eax
add esp, 4
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
lea edx, [esp + 0x190]
mov esi, edi
mov edi, edx
mov edx, ecx
or ecx, 0xffffffff
repne scasb al, byte es:[edi]
mov ecx, edx
dec edi
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov al, byte [esp + 0x17]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
inc ebx
cmp ebx, 0xa
mov dword [esp + 0x1c], ebx
jl 0x406180
test al, al
jne 0x406242
mov edi, 0x48beac
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x190]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x190]
lea edx, [esp + 0x90]
push ecx
push str.Modes:_s
push edx
call fcn.00445f93
lea eax, [esp + 0x9c]
push eax
call fcn.00405030
push 0x4a778c
call fcn.00405030
mov al, byte [ebp]
add esp, 0x14
test al, 4
jne 0x406287
test byte [ebp + 0x67], 8
je 0x4063fd
xor ebx, ebx
mov eax, str.RPC_II
mov bl, byte [ebp + 0x89]
test ebx, ebx
jne 0x40629d
mov eax, str.RPC_I
push eax
lea ecx, [esp + 0x94]
push str.Region_Protection_Control:_s
push ecx
call fcn.00445f93
lea edx, [esp + 0x9c]
push edx
call fcn.00405030
mov al, byte [ebp + 0x88]
add esp, 0x10
and eax, 0x3f
jne 0x4062f6
mov edi, 0x48c124
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x190]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
jmp 0x40635e
cmp eax, 0x3f
jne 0x406326
mov edi, str.None
or ecx, 0xffffffff
xor eax, eax
lea edx, [esp + 0x190]
repne scasb al, byte es:[edi]
not ecx
sub edi, ecx
mov eax, ecx
mov esi, edi
mov edi, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
jmp 0x40635e
xor ecx, ecx
mov edx, eax
sar edx, cl
test dl, 1
je 0x406339
inc ecx
cmp ecx, 6
jl 0x406328
jmp 0x406341
inc ecx
mov dword [esp + 0x8c], ecx
mov eax, dword [esp + 0x8c]
lea ecx, [esp + 0x190]
push eax
push 0x48c118
push ecx
call fcn.00445f93
add esp, 0xc
lea edx, [esp + 0x190]
lea eax, [esp + 0x90]
push edx
push str.Region:_s
push eax
call fcn.00445f93
lea ecx, [esp + 0x9c]
push ecx
call fcn.00405030
add esp, 0x10
test ebx, ebx
jne 0x4063a5
push str.Changes_User:n_a
call fcn.00405030
push str.Changes_Vendor:n_a
call fcn.00405030
add esp, 8
jmp 0x4063fd
mov dl, byte [ebp + 0x87]
lea eax, [esp + 0x90]
and edx, 7
push edx
push str.Changes_User:_d
push eax
call fcn.00445f93
lea ecx, [esp + 0x9c]
push ecx
call fcn.00405030
mov dl, byte [ebp + 0x87]
lea eax, [esp + 0xa0]
shr edx, 3
and edx, 7
push edx
push str.Changes_Vendor:_d
push eax
call fcn.00445f93
lea ecx, [esp + 0xac]
push ecx
call fcn.00405030
add esp, 0x20
push 0x4a778c
call fcn.00405030
mov ecx, dword [0x4a7790]
mov esi, dword [esp + 0x70]
add esp, 4
mov al, byte [ecx + 9]
test al, al
je 0x40643a
mov edx, dword [ebp + 0x29]
mov ecx, dword [ecx]
lea eax, [esi + esi*8]
push edx
lea edx, [esi + eax*4]
lea eax, [esi + edx*4]
lea edx, [ecx + eax*8 + 0x108d88]
push edx
call fcn.00406470
add esp, 8
push 0x48c0bc
call fcn.00405030
mov ecx, dword [0x4a7790]
add esp, 4
inc esi
mov ebp, dword [ecx]
mov dword [esp + 0x6c], esi
cmp esi, dword [ebp + 4]
jl 0x405219
pop edi
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret