_cpuid_set_info proc near ; CODE XREF: _cpu_init+Ep __text:0019883C ; _i386_vm_init+101p ... __text:0019883C __text:0019883C var_F8 = dword ptr -0F8h __text:0019883C var_F4 = dword ptr -0F4h __text:0019883C var_F0 = dword ptr -0F0h __text:0019883C var_E8 = dword ptr -0E8h __text:0019883C var_E4 = dword ptr -0E4h __text:0019883C var_E0 = dword ptr -0E0h __text:0019883C var_DC = dword ptr -0DCh __text:0019883C var_D8 = dword ptr -0D8h __text:0019883C var_D4 = dword ptr -0D4h __text:0019883C var_D0 = dword ptr -0D0h __text:0019883C var_CC = dword ptr -0CCh __text:0019883C var_C8 = dword ptr -0C8h __text:0019883C var_C4 = dword ptr -0C4h __text:0019883C var_C0 = dword ptr -0C0h __text:0019883C var_BC = dword ptr -0BCh __text:0019883C var_B8 = dword ptr -0B8h __text:0019883C var_B0 = dword ptr -0B0h __text:0019883C var_AC = dword ptr -0ACh __text:0019883C var_A8 = dword ptr -0A8h __text:0019883C var_98 = dword ptr -98h __text:0019883C var_38 = dword ptr -38h __text:0019883C var_34 = dword ptr -34h __text:0019883C var_30 = dword ptr -30h __text:0019883C var_2C = dword ptr -2Ch __text:0019883C var_28 = dword ptr -28h __text:0019883C var_24 = dword ptr -24h __text:0019883C var_20 = dword ptr -20h __text:0019883C var_1C = dword ptr -1Ch __text:0019883C __text:0019883C push ebp __text:0019883D mov ebp, esp __text:0019883F push edi __text:00198840 push esi __text:00198841 push ebx __text:00198842 sub esp, 0ECh __text:00198848 mov [esp+0F8h+var_F4], 0E4h __text:00198850 mov [esp+0F8h+var_F8], offset unk_4B2980 __text:00198857 call _bzero __text:0019885C xor eax, eax __text:0019885E cpuid __text:00198860 mov [ebp+var_28], eax __text:00198863 lea eax, [ebp+var_24] __text:00198866 mov [ebp+var_20], ecx __text:00198869 mov [ebp+var_1C], edx __text:0019886C mov [ebp+var_24], ebx __text:0019886F mov [esp+0F8h+var_F8], eax __text:00198872 mov [esp+0F8h+var_F0], 4 __text:0019887A mov [esp+0F8h+var_F4], offset unk_4B2980 __text:00198882 call _bcopy __text:00198887 lea eax, [ebp+var_20] __text:0019888A mov [esp+0F8h+var_F8], eax __text:0019888D mov [esp+0F8h+var_F0], 4 __text:00198895 mov [esp+0F8h+var_F4], offset unk_4B2988 __text:0019889D call _bcopy __text:001988A2 lea eax, [ebp+var_1C] __text:001988A5 mov [esp+0F8h+var_F8], eax __text:001988A8 mov [esp+0F8h+var_F0], 4 __text:001988B0 mov [esp+0F8h+var_F4], offset unk_4B2984 __text:001988B8 call _bcopy __text:001988BD mov edx, 80000000h __text:001988C2 mov eax, edx __text:001988C4 cpuid __text:001988C6 cmp eax, 80000003h __text:001988CB mov ds:byte_4B298C, 0 __text:001988D2 mov [ebp+var_D0], eax __text:001988D8 mov [ebp+var_28], eax __text:001988DB mov [ebp+var_24], ebx __text:001988DE mov [ebp+var_20], ecx __text:001988E1 mov [ebp+var_1C], edx __text:001988E4 jbe loc_1989D5 __text:001988EA mov eax, 80000002h __text:001988EF cpuid __text:001988F1 mov [ebp+var_20], ecx __text:001988F4 lea ecx, [ebp+var_28] __text:001988F7 mov [ebp+var_1C], edx __text:001988FA lea edx, [ebp+var_B8] __text:00198900 mov [ebp+var_28], eax __text:00198903 mov [ebp+var_24], ebx __text:00198906 mov [esp+0F8h+var_F4], edx __text:0019890A mov [esp+0F8h+var_F8], ecx __text:0019890D mov [esp+0F8h+var_F0], 10h __text:00198915 call _bcopy __text:0019891A mov eax, 80000003h __text:0019891F cpuid __text:00198921 mov [ebp+var_28], eax __text:00198924 lea eax, [ebp+var_A8] __text:0019892A mov [ebp+var_24], ebx __text:0019892D lea ebx, [ebp+var_28] __text:00198930 mov [ebp+var_20], ecx __text:00198933 mov [ebp+var_1C], edx __text:00198936 mov [esp+0F8h+var_F4], eax __text:0019893A mov [esp+0F8h+var_F8], ebx __text:0019893D mov [esp+0F8h+var_F0], 10h __text:00198945 call _bcopy __text:0019894A mov eax, 80000004h __text:0019894F cpuid __text:00198951 mov [ebp+var_28], eax __text:00198954 lea eax, [ebp+var_98] __text:0019895A mov [esp+0F8h+var_F4], eax __text:0019895E lea eax, [ebp+var_28] __text:00198961 mov [ebp+var_1C], edx __text:00198964 mov [ebp+var_24], ebx __text:00198967 mov [ebp+var_20], ecx __text:0019896A mov [esp+0F8h+var_F0], 10h __text:00198972 mov [esp+0F8h+var_F8], eax __text:00198975 call _bcopy __text:0019897A lea edx, [ebp+var_B8] __text:00198980 jmp short loc_198987 __text:00198982 ; --------------------------------------------------------------------------- __text:00198982 __text:00198982 loc_198982: ; CODE XREF: _cpuid_set_info+150j __text:00198982 cmp al, 20h __text:00198984 jnz short loc_19898E __text:00198986 inc edx __text:00198987 __text:00198987 loc_198987: ; CODE XREF: _cpuid_set_info+144j __text:00198987 movzx eax, byte ptr [edx] __text:0019898A test al, al __text:0019898C jnz short loc_198982 __text:0019898E __text:0019898E loc_19898E: ; CODE XREF: _cpuid_set_info+148j __text:0019898E mov [esp+0F8h+var_F4], edx __text:00198992 mov [esp+0F8h+var_F0], 2Fh __text:0019899A mov [esp+0F8h+var_F8], offset byte_4B2990 __text:001989A1 call _strncpy __text:001989A6 mov ds:byte_4B29BF, 0 __text:001989AD mov [esp+0F8h+var_F4], offset aUnknownCpuTyp ; "Unknown CPU Typ" __text:001989B5 mov [esp+0F8h+var_F8], offset byte_4B2990 __text:001989BC call _strcmp __text:001989C1 xor edx, edx __text:001989C3 test eax, eax __text:001989C5 movzx eax, ds:byte_4B2990 __text:001989CC cmovnz edx, eax __text:001989CF mov ds:byte_4B2990, dl __text:001989D5 __text:001989D5 loc_1989D5: ; CODE XREF: _cpuid_set_info+A8j __text:001989D5 mov ecx, 1 __text:001989DA mov eax, ecx __text:001989DC cpuid __text:001989DE mov edi, eax __text:001989E0 mov [ebp+var_28], eax __text:001989E3 mov ds:dword_4B29E0, eax __text:001989E8 and eax, 0Fh __text:001989EB mov ds:byte_4B29CC, al __text:001989F0 mov eax, edi __text:001989F2 and eax, 0F0h __text:001989F7 shr eax, 4 __text:001989FA mov ds:byte_4B29C9, al __text:001989FF mov eax, edi __text:00198A01 and eax, 0F00h __text:00198A06 shr eax, 8 __text:00198A09 mov ds:byte_4B29C8, al __text:00198A0E mov eax, edi __text:00198A10 and eax, 3000h __text:00198A15 shr eax, 0Ch __text:00198A18 mov ds:dword_4B29C4, eax __text:00198A1D mov eax, edi __text:00198A1F and eax, 0F0000h __text:00198A24 mov [ebp+var_24], ebx __text:00198A27 shr eax, 10h __text:00198A2A mov ds:byte_4B29E4, bl __text:00198A30 and ebx, 0FF0000h __text:00198A36 shr ebx, 10h __text:00198A39 shr edi, 14h __text:00198A3C mov [ebp+var_20], ecx __text:00198A3F mov ds:byte_4B29CA, al __text:00198A44 mov eax, edi __text:00198A46 mov ds:dword_4B2A44, ebx __text:00198A4C mov ebx, ecx __text:00198A4E mov ecx, 0 __text:00198A53 mov ds:byte_4B29CB, al __text:00198A58 mov eax, ecx __text:00198A5A or eax, edx __text:00198A5C cmp [ebp+var_D0], 80000000h __text:00198A66 mov [ebp+var_1C], edx __text:00198A69 mov ds:dword_4B29D0, eax __text:00198A6E mov ds:dword_4B29D4, ebx __text:00198A74 jbe short loc_198A9F __text:00198A76 mov eax, 80000001h __text:00198A7B cpuid __text:00198A7D mov [ebp+var_24], ebx __text:00198A80 mov ebx, ecx __text:00198A82 mov [ebp+var_20], ecx __text:00198A85 mov ecx, 0 __text:00198A8A mov [ebp+var_28], eax __text:00198A8D mov eax, ecx __text:00198A8F or eax, edx __text:00198A91 mov [ebp+var_1C], edx __text:00198A94 mov ds:dword_4B29D8, eax __text:00198A99 mov ds:dword_4B29DC, ebx __text:00198A9F __text:00198A9F loc_198A9F: ; CODE XREF: _cpuid_set_info+238j __text:00198A9F mov [esp+0F8h+var_F4], offset unk_4B2980 __text:00198AA7 mov [esp+0F8h+var_F8], offset aGenuineintel ; "GenuineIntel" __text:00198AAE call _strcmp __text:00198AB3 test eax, eax __text:00198AB5 jnz short loc_198AC9 __text:00198AB7 cmp ds:byte_4B29C8, 6 __text:00198ABE jnz short loc_198AC9 __text:00198AC0 cmp ds:byte_4B29C9, 0Ch __text:00198AC7 nop __text:00198AC8 nop __text:00198AC9 __text:00198AC9 loc_198AC9: ; CODE XREF: _cpuid_set_info+279j __text:00198AC9 ; _cpuid_set_info+282j __text:00198AC9 nop __text:00198ACA nop __text:00198ACB nop __text:00198ACC nop __text:00198ACD nop __text:00198ACE nop __text:00198ACF nop __text:00198AD0 nop __text:00198AD1 nop __text:00198AD2 nop __text:00198AD3 nop __text:00198AD4 nop __text:00198AD5 nop __text:00198AD6 nop __text:00198AD7 nop __text:00198AD8 nop __text:00198AD9 nop __text:00198ADA nop __text:00198ADB nop __text:00198ADC nop __text:00198ADD nop __text:00198ADE nop __text:00198ADF nop __text:00198AE0 nop __text:00198AE1 nop __text:00198AE2 nop __text:00198AE3 nop __text:00198AE4 nop __text:00198AE5 lea edx, [ebp+var_B8] __text:00198AEB mov [esp+0F8h+var_F8], edx __text:00198AEE mov ds:dword_4B2A5C, 7 __text:00198AF8 mov ds:dword_4B2A60, 4 __text:00198B02 mov [esp+0F8h+var_F4], 14h __text:00198B0A call _bzero __text:00198B0F mov eax, 2 __text:00198B14 cpuid __text:00198B16 mov [ebp+var_1C], edx __text:00198B19 xor edx, edx __text:00198B1B mov [ebp+var_28], eax __text:00198B1E mov [ebp+var_24], ebx __text:00198B21 mov [ebp+var_20], ecx __text:00198B24 __text:00198B24 loc_198B24: ; CODE XREF: _cpuid_set_info+2FCj __text:00198B24 mov eax, [edx+ebp-28h] __text:00198B28 test eax, eax __text:00198B2A js short loc_198B32 __text:00198B2C mov ds:dword_4B2A00[edx], eax __text:00198B32 __text:00198B32 loc_198B32: ; CODE XREF: _cpuid_set_info+2EEj __text:00198B32 add edx, 4 __text:00198B35 cmp edx, 10h __text:00198B38 jnz short loc_198B24 __text:00198B3A mov edi, 1 __text:00198B3F mov esi, 2 __text:00198B44 jmp short loc_198B7D __text:00198B46 ; --------------------------------------------------------------------------- __text:00198B46 __text:00198B46 loc_198B46: ; CODE XREF: _cpuid_set_info+34Aj __text:00198B46 cmp edi, 5 __text:00198B49 jz short loc_198B88 __text:00198B4B mov eax, esi __text:00198B4D cpuid __text:00198B4F mov [ebp+var_1C], edx __text:00198B52 mov edx, edi __text:00198B54 mov [ebp+var_20], ecx __text:00198B57 shl edx, 4 __text:00198B5A mov ecx, 1 __text:00198B5F mov [ebp+var_28], eax __text:00198B62 mov [ebp+var_24], ebx __text:00198B65 __text:00198B65 loc_198B65: ; CODE XREF: _cpuid_set_info+33Ej __text:00198B65 mov eax, [ebp+ecx*4+var_2C] __text:00198B69 test eax, eax __text:00198B6B js short loc_198B73 __text:00198B6D mov ds:dword_4B2A00[edx], eax __text:00198B73 __text:00198B73 loc_198B73: ; CODE XREF: _cpuid_set_info+32Fj __text:00198B73 inc ecx __text:00198B74 add edx, 4 __text:00198B77 cmp ecx, 5 __text:00198B7A jnz short loc_198B65 __text:00198B7C inc edi __text:00198B7D __text:00198B7D loc_198B7D: ; CODE XREF: _cpuid_set_info+308j __text:00198B7D movzx eax, byte ptr ds:dword_4B2A00 __text:00198B84 cmp edi, eax __text:00198B86 jb short loc_198B46 __text:00198B88 __text:00198B88 loc_198B88: ; CODE XREF: _cpuid_set_info+30Dj __text:00198B88 mov edx, ds:_vm_cache_geometry_colors __text:00198B8E xor edi, edi __text:00198B90 mov ecx, [ebp+var_2C] __text:00198B93 mov ebx, ds:dword_4B2A40 __text:00198B99 mov esi, [ebp+var_34] __text:00198B9C mov [ebp+var_BC], edx __text:00198BA2 mov [ebp+var_E8], ecx __text:00198BA8 mov [ebp+var_D8], ebx __text:00198BAE __text:00198BAE loc_198BAE: ; CODE XREF: _cpuid_set_info+490j __text:00198BAE mov ebx, esi __text:00198BB0 mov edx, [ebp+var_E8] __text:00198BB6 mov eax, 4 __text:00198BBB mov ecx, edi __text:00198BBD cpuid __text:00198BBF mov [ebp+var_E0], eax __text:00198BC5 and eax, 1Fh __text:00198BC8 mov esi, ebx __text:00198BCA mov [ebp+var_DC], edx __text:00198BD0 mov [ebp+var_D4], ecx __text:00198BD6 mov [ebp+var_E4], ebx __text:00198BDC mov [ebp+var_E8], edx __text:00198BE2 mov [ebp+var_CC], eax __text:00198BE8 jz loc_198CD1 __text:00198BEE mov eax, [ebp+var_E0] __text:00198BF4 inc ecx __text:00198BF5 mov [ebp+var_C0], ecx __text:00198BFB and eax, 3FFC000h __text:00198C00 shr eax, 0Eh __text:00198C03 inc eax __text:00198C04 mov [ebp+var_C8], eax __text:00198C0A mov eax, ebx __text:00198C0C and eax, 0FFFh __text:00198C11 inc eax __text:00198C12 mov [ebp+var_C4], eax __text:00198C18 mov eax, [ebp+var_E0] __text:00198C1E shr ebx, 16h __text:00198C21 mov [ebp+var_E4], ebx __text:00198C27 inc ebx __text:00198C28 shr eax, 1Ah __text:00198C2B inc eax __text:00198C2C mov [ebp+var_D8], eax __text:00198C32 mov eax, [ebp+var_E0] __text:00198C38 and eax, 0E0h __text:00198C3D shr eax, 5 __text:00198C40 cmp eax, 2 __text:00198C43 jz short loc_198C66 __text:00198C45 cmp eax, 3 __text:00198C48 jz short loc_198C76 __text:00198C4A dec eax __text:00198C4B jnz short loc_198CCB __text:00198C4D cmp [ebp+var_CC], 1 __text:00198C54 mov edx, 2 __text:00198C59 jz short loc_198C84 __text:00198C5B cmp [ebp+var_CC], 2 __text:00198C62 mov dl, 1 __text:00198C64 jmp short loc_198C72 __text:00198C66 ; --------------------------------------------------------------------------- __text:00198C66 __text:00198C66 loc_198C66: ; CODE XREF: _cpuid_set_info+407j __text:00198C66 cmp [ebp+var_CC], 3 __text:00198C6D mov edx, 3 __text:00198C72 __text:00198C72 loc_198C72: ; CODE XREF: _cpuid_set_info+428j __text:00198C72 jnz short loc_198CCB __text:00198C74 jmp short loc_198C84 __text:00198C76 ; --------------------------------------------------------------------------- __text:00198C76 __text:00198C76 loc_198C76: ; CODE XREF: _cpuid_set_info+40Cj __text:00198C76 cmp [ebp+var_CC], 3 __text:00198C7D jnz short loc_198CCB __text:00198C7F mov edx, 4 __text:00198C84 __text:00198C84 loc_198C84: ; CODE XREF: _cpuid_set_info+41Dj __text:00198C84 ; _cpuid_set_info+438j __text:00198C84 mov eax, [ebp+var_C4] __text:00198C8A imul eax, [ebp+var_C0] __text:00198C91 mov ecx, [ebp+var_C8] __text:00198C97 imul ebx, eax __text:00198C9A shr eax, 0Ch __text:00198C9D mov ds:dword_4B2A48[edx*4], ecx __text:00198CA4 mov ds:dword_4B29E8[edx*4], ebx __text:00198CAB mov ebx, [ebp+var_C4] __text:00198CB1 mov [ebp+edx*4+var_B8], ebx __text:00198CB8 cmp eax, [ebp+var_BC] __text:00198CBE cmovbe eax, [ebp+var_BC] __text:00198CC5 mov [ebp+var_BC], eax __text:00198CCB __text:00198CCB loc_198CCB: ; CODE XREF: _cpuid_set_info+40Fj __text:00198CCB ; _cpuid_set_info:loc_198C72j ... __text:00198CCB inc edi __text:00198CCC jmp loc_198BAE __text:00198CD1 ; --------------------------------------------------------------------------- __text:00198CD1 __text:00198CD1 loc_198CD1: ; CODE XREF: _cpuid_set_info+3ACj __text:00198CD1 mov eax, [ebp+var_D8] __text:00198CD7 mov edx, [ebp+var_DC] __text:00198CDD mov ecx, [ebp+var_E4] __text:00198CE3 mov ebx, [ebp+var_D4] __text:00198CE9 mov ds:dword_4B2A40, eax __text:00198CEE mov eax, [ebp+var_E0] __text:00198CF4 mov [ebp+var_2C], edx __text:00198CF7 mov edx, [ebp+var_BC] __text:00198CFD mov [ebp+var_34], ecx __text:00198D00 mov [ebp+var_30], ebx __text:00198D03 mov [ebp+var_38], eax __text:00198D06 mov eax, [ebp+var_AC] __text:00198D0C mov ds:_vm_cache_geometry_colors, edx __text:00198D12 test eax, eax __text:00198D14 jnz short loc_198D20 __text:00198D16 mov eax, [ebp+var_B0] __text:00198D1C test eax, eax __text:00198D1E nop __text:00198D1F nop __text:00198D20 __text:00198D20 loc_198D20: ; CODE XREF: _cpuid_set_info+4D8j __text:00198D20 mov ds:dword_4B29FC, eax __text:00198D25 jmp short loc_198D43 __text:00198D25 ; --------------------------------------------------------------------------- __text:00198D27 db 0C7h ; Ã __text:00198D28 db 44h ; D __text:00198D29 db 24h ; $ __text:00198D2A db 8 __text:00198D2B db 0BAh ; ¦ __text:00198D2C db 0 __text:00198D2D db 0 __text:00198D2E db 0 __text:00198D2F db 0C7h ; Ã __text:00198D30 db 44h ; D __text:00198D31 db 24h ; $ __text:00198D32 db 4 __text:00198D33 db 98h ; ÿ __text:00198D34 db 0D3h ; Ë __text:00198D35 db 40h ; @ __text:00198D36 db 0 __text:00198D37 db 0C7h ; Ã __text:00198D38 db 4 __text:00198D39 db 24h ; $ __text:00198D3A db 0DCh ; _ __text:00198D3B db 0D3h ; Ë __text:00198D3C db 40h ; @ __text:00198D3D db 0 __text:00198D3E db 0E8h ; Þ __text:00198D3F db 89h ; ë __text:00198D40 db 6 __text:00198D41 db 0F9h ; ¨ __text:00198D42 db 0FFh __text:00198D43 ; --------------------------------------------------------------------------- __text:00198D43 __text:00198D43 loc_198D43: ; CODE XREF: _cpuid_set_info+4E9j __text:00198D43 mov ds:dword_4B29C0, 4075E0h __text:00198D4D add esp, 0ECh __text:00198D53 pop ebx __text:00198D54 pop esi __text:00198D55 pop edi __text:00198D56 leave __text:00198D57 retn __text:00198D57 _cpuid_set_info endp