-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCPU_ManufacturerID.asm
152 lines (135 loc) · 4.81 KB
/
CPU_ManufacturerID.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
;==============================================================================
;
; UASM64 Library
;
; https://github.com/mrfearless/UASM64-Library
;
;==============================================================================
.686
.MMX
.XMM
.x64
option casemap : none
IF @Platform EQ 1
option win64 : 11
ENDIF
option frame : auto
include UASM64.inc
.CODE
UASM64_ALIGN
;------------------------------------------------------------------------------
; CPU_ManufacturerID
;
; Return a constant value that is a reference to the CPU manufacturer.
;
; Parameters:
;
; There are no parameters.
;
; Returns:
;
; EAX contains a a constant value that is a reference to the CPU manufacturer
; or 0 (CPU_MANUFACTURER_NONE) if not supported, unknown or an error occurred.
;
; One of the following values if successful:
;
; * CPU_MANUFACTURER_INTEL
; * CPU_MANUFACTURER_IOTEL
; * CPU_MANUFACTURER_AMD
; * CPU_MANUFACTURER_CYRIX
; * CPU_MANUFACTURER_CENTAUR
; * CPU_MANUFACTURER_IDTWINCHIP
; * CPU_MANUFACTURER_TRANSMETACPU
; * CPU_MANUFACTURER_TRANSMETA
; * CPU_MANUFACTURER_NATSEMI
; * CPU_MANUFACTURER_NEXGEN
; * CPU_MANUFACTURER_RISE
; * CPU_MANUFACTURER_SIS
; * CPU_MANUFACTURER_UMC
; * CPU_MANUFACTURER_VORTEX
; * CPU_MANUFACTURER_ZHAOXIN
; * CPU_MANUFACTURER_HYGON
; * CPU_MANUFACTURER_RDCSEMI
; * CPU_MANUFACTURER_ELBRUS
; * CPU_MANUFACTURER_VIA
; * CPU_MANUFACTURER_AMDSAMPLE
; * CPU_MANUFACTURER_AO486
; * CPU_MANUFACTURER_MISTER
; * CPU_MANUFACTURER_V586s
; * CPU_MANUFACTURER_MSX86TOARM
; * CPU_MANUFACTURER_APPLEROSETTA2
; * CPU_MANUFACTURER_VIRTUALAPPLE
;
; See Also:
;
; CPU_Manufacturer, CPU_Brand
;
;------------------------------------------------------------------------------
CPU_ManufacturerID PROC FRAME USES RBX RCX RDX RDI
LOCAL lpszCPUManufacturer:DWORD
Invoke CPU_CPUID_Supported
.IF rax == FALSE
jmp CPU_ManufacturerID_Error
.ENDIF
xor rax, rax
xor rbx, rbx
xor rcx, rcx
xor rdx, rdx
mov eax, 0
cpuid
.IF ebx == 'uneG' && edx == 'Ieni' && ecx == 'letn' ; Genu ineI ntel
mov rax, CPU_MANUFACTURER_INTEL
.ELSEIF ebx == 'uneG' && edx == 'Ieni' && ecx == 'leto' ; Genu ineI otel
mov rax, CPU_MANUFACTURER_IOTEL
.ELSEIF ebx == 'htuA' && edx == 'itne' && ecx == 'DMAc' ; Auth enti cAMD
mov rax, CPU_MANUFACTURER_AMD
.ELSEIF ebx == 'iryC' && edx == 'snIx' && ecx == 'daet' ; Cyri xIns tead
mov rax, CPU_MANUFACTURER_CYRIX
.ELSEIF ebx == 'tneC' && edx == 'Hrua' && ecx == 'slua' ; Cent aurH auls
mov rax, CPU_MANUFACTURER_CENTAUR
.ELSEIF ebx == 'narT' && edx == 'tems' && ecx == 'UPCa' ; Tran smet aCPU
mov rax, CPU_MANUFACTURER_TRANSMETACPU
.ELSEIF ebx == 'uneG' && edx == 'Teni' && ecx == '68xM' ; Genu ineT Mx86
mov rax, CPU_MANUFACTURER_TRANSMETA
.ELSEIF ebx == 'doeG' && edx == 'yb e' && ecx == 'CSN ' ; Geod e by NSC
mov rax, CPU_MANUFACTURER_NATSEMI
.ELSEIF ebx == 'GxeN' && edx == 'rDne' && ecx == 'nevi' ; NexG enDr iven
mov rax, CPU_MANUFACTURER_NEXGEN
.ELSEIF ebx == 'esiR' && edx == 'esiR' && ecx == 'esiR' ; Rise Rise Rise
mov rax, CPU_MANUFACTURER_RISE
.ELSEIF ebx == ' SiS' && edx == ' SiS' && ecx == ' SiS' ; SiS SiS SiS
mov rax, CPU_MANUFACTURER_SIS
.ELSEIF ebx == ' CMU' && edx == ' CMU' && ecx == ' CMU' ; UMC UMC UMC
mov rax, CPU_MANUFACTURER_UMC
.ELSEIF ebx == 'troV' && edx == '68xe' && ecx == 'CoS ' ; Vort ex86 SoC
mov rax, CPU_MANUFACTURER_VORTEX
.ELSEIF ebx == 'hS ' && edx == 'hgna' && ecx == ' ia' ; Sh angh ai
mov rax, CPU_MANUFACTURER_ZHAOXIN
.ELSEIF ebx == 'ogyH' && edx == 'neGn' && ecx == 'eniu' ; Hygo nGen uine
mov rax, CPU_MANUFACTURER_HYGON
.ELSEIF ebx == 'uneG' && edx == ' eni' && ecx == 'CDR ' ; Genu ine RDC
mov rax, CPU_MANUFACTURER_RDCSEMI
.ELSEIF ebx == ' K2E' && edx == 'HCAM' && ecx == ' ENI' ; E2K MACH INE
mov rax, CPU_MANUFACTURER_ELBRUS
.ELSEIF ebx == ' AIV' && edx == ' AIV' && ecx == ' AIV' ; VIA VIA VIA
mov rax, CPU_MANUFACTURER_VIA
.ELSEIF ebx == ' DMA' && edx == 'EBSI' && ecx == 'RETT' ; AMD ISBE TTER
mov rax, CPU_MANUFACTURER_AMDSAMPLE
.ELSEIF ebx == 'uneG' && edx == 'Aeni' && ecx == '6840' ; Genu ineA O486
mov rax, CPU_MANUFACTURER_AO486
.ELSEIF ebx == 'TSiM' && edx == 'A re' && ecx == '6840' ; MiST er A O486
mov rax, CPU_MANUFACTURER_MISTER
.ELSEIF ebx == 'rciM' && edx == 'foso' && ecx == 'ATXt' ; Micr osof tXTA
mov rax, CPU_MANUFACTURER_MSX86TOARM
.ELSEIF ebx == 'triV' && edx == 'Alau' && ecx == 'elpp' ; Virt ualA pple
mov rax, CPU_MANUFACTURER_VIRTUALAPPLE
.ELSE
mov rax, CPU_MANUFACTURER_NONE
.ENDIF
jmp CPU_ManufacturerID_Exit
CPU_ManufacturerID_Error:
mov rax, 0
CPU_ManufacturerID_Exit:
ret
CPU_ManufacturerID ENDP
END