Code: Alles auswählen
;- CPU-Info, PB 4.40 Beta5 (x86/x64)
;- "Helle" Klaus Helbing, 27.10.2009
;- Achtung: Ist "optisch anfällig" für Änderungen von Schrift-Art/-Größe! Kann aber jeder notfalls anpassen.
Global AES.l = $0000D0 ;für CPUID erstmal Rot für nicht vorhanden
Global AMDLM.l = $0000D0
Global AMDMISAL16.l = $0000D0
Global AVX.l = $0000D0
Global CLFSH.l = $0000D0
Global CMOV.l = $0000D0
Global CX16.l = $0000D0
Global CX8.l = $0000D0
Global CVT16.l = $0000D0
Global DNOW.l = $0000D0
Global EDNOW.l = $0000D0
Global EMMX.l = $0000D0
Global FMA.l = $0000D0
Global FMA4.l = $0000D0
Global FXSR.l = $0000D0
Global LZCNT.l = $0000D0
Global MMX.l = $0000D0
Global MONITOR.l = $0000D0
Global MOVBE.l = $0000D0
Global MSR.l = $0000D0
Global OSXSAVE.l = $0000D0
Global PCLMULQDQ.l = $0000D0
Global POPCNT.l = $0000D0
Global RDTSC.l = $0000D0
Global RDTSCP.l = $0000D0
Global SEP.l = $0000D0
Global SMX.l = $0000D0
Global SSE.l = $0000D0
Global SSE2.l = $0000D0
Global SSE3.l = $0000D0
Global SSSE3.l = $0000D0
Global SSE41.l = $0000D0
Global SSE42.l = $0000D0
Global SSE4A.l = $0000D0
Global VMX.l = $0000D0
Global SVM.l = $0000D0
Global XOP.l = $0000D0
Global XSAVE.l = $0000D0
Global Bit0.l = $1 ;für SSE3
Global Bit1.l = $2 ;für PCLMULQDQ
Global Bit2.l = $4 ;für MONITOR, SVM
Global Bit4.l = $10 ;für RDTSC
Global Bit5.l = $20 ;für VMX, MSR, LZCNT
Global Bit6.l = $40 ;für SMX, SSE4A
Global Bit7.l = $80 ;für AMDMISAL16
Global Bit8.l = $100 ;für CMPXCHG8B
Global Bit9.l = $200 ;für SSSE3
Global Bit11.l = $800 ;für SEP, XOP
Global Bit12.l = $1000 ;für FMA
Global Bit13.l = $2000 ;für CMPXCHG16B
Global Bit15.l = $8000 ;für (F)CMOVcc
Global Bit16.l = $10000 ;für FMA4
Global Bit18.l = $40000 ;für CVT16
Global Bit19.l = $80000 ;für SSE4.1, CLFSH
Global Bit20.l = $100000 ;für SSE4.2
Global Bit21.i = $200000 ;für EFlag
Global Bit22.l = $400000 ;für MOVBE, EMMX
Global Bit23.l = $800000 ;für MMX, POPCNT
Global Bit24.l = $1000000 ;für FXSR
Global Bit25.l = $2000000 ;für SSE, AES
Global Bit26.l = $4000000 ;für SSE2, XSAVE
Global Bit27.l = $8000000 ;für OSXSAVE, RDTSCP
Global Bit28.l = $10000000 ;für AVX
Global Bit29.l = $20000000 ;für AMDLM
Global Bit30.l = $40000000 ;für Extended 3DNow!
Global Bit31.l = $80000000 ;für 3DNow!
Global AES$ = "AES"
Global AMDLM$ = "AMDLM"
Global AMDMISAL16$ = "AMDMISAL16"
Global AVX$ = "AVX"
Global CLFSH$ = "CLFSH"
Global CMOV$ = "(F)CMOV"
Global CX16$ = "CX16"
Global CX8$ = "CX8"
Global CVT16$ = "CVT16"
Global DNOW$ = "3DNow!"
Global EDNOW$ = "Ext3DNow!"
Global EMMX$ = "(E)MMX"
Global FMA$ = "FMA"
Global FMA4$ = "FMA4"
Global FXSR$ = "FXSR"
Global LZCNT$ = "LZCNT"
Global MMX$ = "MMX"
Global MONITOR$ = "MONITOR"
Global MOVBE$ = "MOVBE"
Global MSR$ = "MSR"
Global OSXSAVE$ = "OSXSAVE"
Global PCLMULQDQ$ = "PCLMULQDQ"
Global POPCNT$ = "POPCNT"
Global RDTSC$ = "RDTSC"
Global RDTSCP$ = "RDTSCP"
Global SEP$ = "SEP"
Global SMX$ = "SMX"
Global SSE$ = "SSE"
Global SSE2$ = "SSE2"
Global SSE3$ = "SSE3"
Global SSSE3$ = "SSSE3"
Global SSE41$ = "SSE4.1"
Global SSE42$ = "SSE4.2"
Global SSE4A$ = "SSE4A"
Global SVM$ = "SVM"
Global VMX$ = "VMX"
Global XOP$ = "XOP"
Global XSAVE$ = "XSAVE"
Global ProzessorString$ = Space(48) ;der String kann max.48 Zeichen lang sein
Global CPUInfo.i
Global ProzStrAdr.l
Procedure CPUID_Info()
;Instruction/Group CPUID (EAX) Register Bit Intel AMD Remarks
;--------------------------------------------------------------------------------------------------------
;3DNOW! 80000001h EDX 31 - x
;AES 00000001h ECX 25 x -
;AMDLM 80000001h EDX 29 - x AMD Long Mode
;AMDMISAL16 80000001h ECX 7 - x Misaligned 16-Byte Memory Access
;AVX 00000001h ECX 28 x -
;CLFSH 00000001h EDX 19 x x CLFLUSH
;(F)CMOV 00000001h EDX 15 x x CMOVcc, FCMOVcc
;CMPXCHG8B 00000001h EDX 8 x x
;CMPXCHG16B 00000001h ECX 13 x x
;CVT16 80000001h ECX 18 - x Floating-Point Fraction Extract and Half-Precision Conversion
;EMMX 80000001h EDX 22 - x AMD Extensions to MMX
;EXT3DNOW! 80000001h EDX 30 - x Extensions to 3DNOW!
;FMA 00000001h ECX 12 x - Fused Multiply Add
;FMA4 80000001h ECX 16 - x Floating-Point Multiply Accumulate (4 Operands)
;FXSR 00000001h EDX 24 x x FXSAVE, FXRSTOR
;LZCNT 80000001h ECX 5 - x
;MMX 00000001h EDX 23 x x
;MONITOR 00000001h ECX 3 x x MONITOR, MWAIT
;MOVBE 00000001h ECX 22 x -
;MSR 00000001h EDX 5 x x RDMSR, WRMSR
;OSXSAVE 00000001h ECX 27 x -
;PCLMULQDQ 00000001h ECX 1 x - Carryless Multiplication
;POPCNT 00000001h ECX 23 x -
;RDTSC 00000001h EDX 4 x x
;RDTSCP 80000001h EDX 27 x x
;SEP 00000001h EDX 11 x x SYSENTER, SYSEXIT
;SMX 00000001h ECX 6 x - Safer Mode Extensions
;SSE 00000001h EDX 25 x x
;SSE2 00000001h EDX 26 x x
;SSE3 00000001h ECX 0 x x
;SSSE3 00000001h ECX 9 x -
;SSE4.1 00000001h ECX 19 x -
;SSE4.2 00000001h ECX 20 x -
;SSE4A 80000001h ECX 6 - x
;SVM 80000001h ECX 2 - x Secure Virtual Machine
;VMX 00000001h ECX 5 x - Virtual Machine Extensions
;XOP 80000001h ECX 11 - x Extended Operations
;XSAVE 00000001h ECX 26 x -
;No check for CPUID!
!mov eax,1h
!cpuid
!test edx,[v_Bit23] ;MMX
!jz l_nommx
!mov [v_MMX],0D000h ;Grün für vorhanden
NOMMX:
!test edx,[v_Bit25] ;SSE
!jz l_nosse
!mov [v_SSE],0D000h
NOSSE:
!test edx,[v_Bit26] ;SSE2
!jz l_nosse2
!mov [v_SSE2],0D000h
NOSSE2:
!test ecx,[v_Bit0] ;SSE3
!jz l_nosse3
!mov [v_SSE3],0D000h
NOSSE3:
!test ecx,[v_Bit9] ;SSSE3
!jz l_nossse3
!mov [v_SSSE3],0D000h
NOSSSE3:
!test ecx,[v_Bit19] ;SSE4.1
!jz l_nosse41
!mov [v_SSE41],0D000h
NOSSE41:
!test ecx,[v_Bit20] ;SSE4.2
!jz l_nosse42
!mov [v_SSE42],0D000h
NOSSE42:
!test ecx,[v_Bit23] ;POPCNT
!jz l_nopopcnt
!mov [v_POPCNT],0D000h
NOPOPCNT:
!test ecx,[v_Bit1] ;PCLMULQDQ
!jz l_nopclmulqdq
!mov [v_PCLMULQDQ],0D000h
NOPCLMULQDQ:
!test ecx,[v_Bit2] ;MONITOR
!jz l_nomonitor
!mov [v_MONITOR],0D000h
NOMONITOR:
!test ecx,[v_Bit5] ;VMX
!jz l_novmx
!mov [v_VMX],0D000h
NOVMX:
!test ecx,[v_Bit6] ;SMX
!jz l_nosmx
!mov [v_SMX],0D000h
NOSMX:
!test ecx,[v_Bit12] ;FMA
!jz l_nofma
!mov [v_FMA],0D000h
NOFMA:
!test edx,[v_Bit11] ;SEP
!jz l_nosep
!mov [v_SEP],0D000h
NOSEP:
!test edx,[v_Bit24] ;FXSR
!jz l_nofxsr
!mov [v_FXSR],0D000h
NOFXSR:
!test edx,[v_Bit8] ;CMPXCHG8B
!jz l_nocx8
!mov [v_CX8],0D000h
NOCX8:
!test ecx,[v_Bit13] ;CMPXCHG16B
!jz l_nocx16
!mov [v_CX16],0D000h
NOCX16:
!test ecx,[v_Bit25] ;AES
!jz l_noaes
!mov [v_AES],0D000h
NOAES:
!test ecx,[v_Bit26] ;XSAVE
!jz l_noxsave
!mov [v_XSAVE],0D000h
NOXSAVE:
!test ecx,[v_Bit27] ;OSXSAVE
!jz l_noosxsave
!mov [v_OSXSAVE],0D000h
NOOSXSAVE:
!test ecx,[v_Bit28] ;AVX
!jz l_noavx
!mov [v_AVX],0D000h
NOAVX:
!test ecx,[v_Bit22] ;MOVBE
!jz l_nomovbe
!mov [v_MOVBE],0D000h
NOMOVBE:
!test edx,[v_Bit15] ;(F)CMOVcc
!jz l_nocmov
!mov [v_CMOV],0D000h
NOCMOV:
!test edx,[v_Bit19] ;CLFSH
!jz l_noclfsh
!mov [v_CLFSH],0D000h
NOCLFSH:
!test edx,[v_Bit5] ;MSR
!jz l_nomsr
!mov [v_MSR],0D000h
NOMSR:
!test edx,[v_Bit4] ;RDTSC
!jz l_nordtsc
!mov [v_RDTSC],0D000h
NORDTSC:
;-------- Anzahl der vorhandenen Extended Levels ermitteln als Vorstufe für 3DNow!-Test
;-------- Rückgabewert in EAX (-80000000h) gibt Anzahl der Extended Level an
!mov eax,80000000h
!cpuid
!cmp eax,80000000h ;hat nichts mit einem Bit zu tun!
!jbe l_noexte ;keine Extended Levels, Ende
!mov eax,80000001h
!cpuid ;Intel-Prozessoren liefern hier EAX=0 zurück
!or eax,eax
!je l_noamd ;ist Intel-Prozessor
!test edx,[v_Bit31] ;AMD 3DNow!
!jz l_noext
!mov [v_DNOW],0D000h
!test edx,[v_Bit30] ;AMD Extended 3DNow! DSP: PF2IW, PFNACC, PFPNACC, PI2FW, PSWAPD
!jz l_noext
!mov [v_EDNOW],0D000h
NOEXT:
!test ecx,[v_Bit6] ;AMD SSE4A EXTRQ, INSERTQ, MOVNTSD, MOVNTSS
!jz l_nosse4a
!mov [v_SSE4A],0D000h
NOSSE4A:
!test edx,[v_Bit29] ;AMDLM AMD Long Mode
!jz l_noamdlm
!mov [v_AMDLM],0D000h
NOAMDLM:
!test ecx,[v_Bit7] ;AMDMISAL16
!jz l_noamdmisal16
!mov [v_AMDMISAL16],0D000h
NOAMDMISAL16:
!test ecx,[v_Bit18] ;CVT16
!jz l_nocvt16
!mov [v_CVT16],0D000h
NOCVT16:
!test edx,[v_Bit22] ;EMMX
!jz l_noemmx
!mov [v_EMMX],0D000h
NOEMMX:
!test ecx,[v_Bit16] ;FMA4
!jz l_nofma4
!mov [v_FMA4],0D000h
NOFMA4:
!test ecx,[v_Bit5] ;LZCNT
!jz l_nolzcnt
!mov [v_LZCNT],0D000h
NOLZCNT:
!test ecx,[v_Bit2] ;SVM
!jz l_nosvm
!mov [v_SVM],0D000h
NOSVM:
!test ecx,[v_Bit11] ;XOP
!jz l_noamd
!mov [v_XOP],0D000h
NOAMD:
!test edx,[v_Bit27] ;RDTSCP
!jz l_noexte
!mov [v_RDTSCP],0D000h
NOEXTE:
TextGadget(80, 10, 15, 38, 13, DNOW$)
SetGadgetColor(80, #PB_Gadget_FrontColor, DNOW)
TextGadget(81, 58, 15, 53, 13, EDNOW$)
SetGadgetColor(81, #PB_Gadget_FrontColor, EDNOW)
TextGadget(82, 121, 15, 20, 13, AES$)
SetGadgetColor(82, #PB_Gadget_FrontColor, AES)
TextGadget(83, 151, 15, 40, 13, AMDLM$)
SetGadgetColor(83, #PB_Gadget_FrontColor, AMDLM)
TextGadget(84, 200, 15, 70, 13, AMDMISAL16$)
SetGadgetColor(84, #PB_Gadget_FrontColor, AMDMISAL16)
TextGadget(85, 279, 15, 23, 13, AVX$)
SetGadgetColor(85, #PB_Gadget_FrontColor, AVX)
TextGadget(86, 312, 15, 33, 13, CLFSH$)
SetGadgetColor(86, #PB_Gadget_FrontColor, CLFSH)
TextGadget(87, 355, 15, 43, 13, CMOV$)
SetGadgetColor(87, #PB_Gadget_FrontColor, CMOV)
TextGadget(88, 408, 15, 33, 13, CVT16$)
SetGadgetColor(88, #PB_Gadget_FrontColor, CVT16)
TextGadget(89, 451, 15, 20, 13, CX8$)
SetGadgetColor(89, #PB_Gadget_FrontColor, CX8)
TextGadget(90, 481, 15, 26, 13, CX16$)
SetGadgetColor(90, #PB_Gadget_FrontColor, CX16)
TextGadget(91, 517, 15, 22, 13, FMA$)
SetGadgetColor(91, #PB_Gadget_FrontColor, FMA)
TextGadget(92, 549, 15, 28, 13, FMA4$)
SetGadgetColor(92, #PB_Gadget_FrontColor, FMA4)
TextGadget(93, 587, 15, 27, 13, FXSR$)
SetGadgetColor(93, #PB_Gadget_FrontColor, FXSR)
TextGadget(94, 624, 15, 35, 13, LZCNT$)
SetGadgetColor(94, #PB_Gadget_FrontColor, LZCNT)
TextGadget(95, 669, 15, 25, 13, MMX$)
SetGadgetColor(95, #PB_Gadget_FrontColor, MMX)
TextGadget(96, 703, 15, 38, 13, EMMX$)
SetGadgetColor(96, #PB_Gadget_FrontColor, EMMX)
TextGadget(97, 750, 15, 50, 13, MONITOR$)
SetGadgetColor(97, #PB_Gadget_FrontColor, MONITOR)
TextGadget(98, 809, 15, 38, 13, MOVBE$)
SetGadgetColor(98, #PB_Gadget_FrontColor, MOVBE)
TextGadget(99, 857, 15, 23, 13, MSR$)
SetGadgetColor(99, #PB_Gadget_FrontColor, MSR)
TextGadget(100, 10, 28, 50, 13, OSXSAVE$)
SetGadgetColor(100, #PB_Gadget_FrontColor, OSXSAVE)
TextGadget(101, 70, 28, 67, 13, PCLMULQDQ$)
SetGadgetColor(101, #PB_Gadget_FrontColor, PCLMULQDQ)
TextGadget(102, 147, 28, 43, 13, POPCNT$)
SetGadgetColor(102, #PB_Gadget_FrontColor, POPCNT)
TextGadget(103, 200, 28, 37, 13, RDTSC$)
SetGadgetColor(103, #PB_Gadget_FrontColor, RDTSC)
TextGadget(104, 247, 28, 45, 13, RDTSCP$)
SetGadgetColor(104, #PB_Gadget_FrontColor, RDTSCP)
TextGadget(105, 302, 28, 22, 13, SEP$)
SetGadgetColor(105, #PB_Gadget_FrontColor, SEP)
TextGadget(106, 334, 28, 23, 13, SMX$)
SetGadgetColor(106, #PB_Gadget_FrontColor, SMX)
TextGadget(107, 367, 28, 20, 13, SSE$)
SetGadgetColor(107, #PB_Gadget_FrontColor, SSE)
TextGadget(108, 397, 28, 27, 13, SSE2$)
SetGadgetColor(108, #PB_Gadget_FrontColor, SSE2)
TextGadget(109, 434, 28, 27, 13, SSE3$)
SetGadgetColor(109, #PB_Gadget_FrontColor, SSE3)
TextGadget(110, 471, 28, 35, 13, SSSE3$)
SetGadgetColor(110, #PB_Gadget_FrontColor, SSSE3)
TextGadget(111, 516, 28, 35, 13, SSE41$)
SetGadgetColor(111, #PB_Gadget_FrontColor, SSE41)
TextGadget(112, 561, 28, 36, 13, SSE42$)
SetGadgetColor(112, #PB_Gadget_FrontColor, SSE42)
TextGadget(113, 607, 28, 35, 13, SSE4A$)
SetGadgetColor(113, #PB_Gadget_FrontColor, SSE4A)
TextGadget(114, 652, 28, 25, 13, SVM$)
SetGadgetColor(114, #PB_Gadget_FrontColor, SVM)
TextGadget(115, 686, 28, 23, 13, VMX$)
SetGadgetColor(115, #PB_Gadget_FrontColor, VMX)
TextGadget(116, 719, 28, 25, 13, XOP$)
SetGadgetColor(116, #PB_Gadget_FrontColor, XOP)
TextGadget(117, 753, 28, 35, 13, XSAVE$)
SetGadgetColor(117, #PB_Gadget_FrontColor, XSAVE)
;Prozessor-String
ProzStrAdr = @ProzessorString$
!mov eax,80000000h ;Test, ob CPU aktuell genug ist um den String zu liefern
!cpuid
!cmp eax,80000004h
!jb l_nocpustr
!mov esi,[v_ProzStrAdr]
!xor edi,edi
!@@:
!mov eax,80000002h
!add eax,edi
!cpuid
!mov [esi],eax
!mov [esi+4],ebx
!mov [esi+8],ecx
!mov [esi+12],edx
!inc edi
!cmp edi,3
!je l_nocpustr
!add esi,16
!jmp @b
NOCPUSTR:
TextGadget(119, 10, 2, 400, 13, "Current CPU : " + ProzessorString$)
EndProcedure
Procedure CPUInfo(Title$, Text$)
CPUInfo = CreateWindowEx_(#WS_EX_TOPMOST, #TOOLTIPS_CLASS, #Null, #WS_POPUP | #TTS_ALWAYSTIP | #TTS_BALLOON, 0, 0, 0, 0, 0, 0, 0, 0)
SendMessage_(CPUInfo, #TTM_SETTITLE, #TOOLTIP_INFO_ICON, @Title$)
Balloon.TOOLINFO\cbSize = SizeOf(TOOLINFO)
Balloon\lpszText = @Text$
SendMessage_(CPUInfo, #TTM_ADDTOOL, 0, @Balloon)
SendMessage_(CPUInfo, #TTM_TRACKACTIVATE, 1, @Balloon)
ProcedureReturn CPUInfo
EndProcedure
If OpenWindow(0, 0, 0, 900, 50, "CPU-Info Grün = wird unterstützt, Rot = wird nicht unterstützt Linker Maus-Klick auf Erweiterung ergibt mehr Infos! ", #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
CompilerSelect #PB_Compiler_Processor
CompilerCase #PB_Processor_x86
!pushfd ;das EFlag-Register (32-Bit) auf den Stack
!pop eax ;rein in EAX
!mov edx,eax ;EAX unverändert lassen
!xor edx,[v_Bit21] ;Bit21 kippen
!push edx
!popfd ;in EFlag schreiben
!pushfd ;wieder auf Stack
!pop edx
!push eax ;der Ordnung halber alten Wert wieder herstellen
!popfd
!cmp eax,edx
!jne @f ;sind nicht gleich -> CPUID ist möglich
MessageRequester("Status", "Der getestete Prozessor unterstützt den CPUID-Befehl nicht!")
End
!@@:
CompilerCase #PB_Processor_x64
!pushfq ;das RFlag-Register (64-Bit) auf den Stack
!pop rax ;rein in RAX
!mov rdx,rax ;RAX unverändert lassen
!xor rdx,[v_Bit21] ;Bit21 kippen
!push rdx
!popfq ;in RFlag schreiben
!pushfq ;wieder auf Stack
!pop rdx
!push rax ;der Ordnung halber alten Wert wieder herstellen
!popfq
!cmp rax,rdx
!jne @f ;sind nicht gleich -> CPUID ist möglich
MessageRequester("Status", "Der getestete Prozessor unterstützt den CPUID-Befehl nicht!")
End
!@@:
CompilerEndSelect
CPUID_Info()
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #WM_LBUTTONDOWN ;CPU-Info
If CPUInfo
DestroyWindow_(CPUInfo)
Title$ = ""
EndIf
If WindowMouseY(0) >= 17 And WindowMouseY(0) <= 25 ;obere Zeile
If WindowMouseX(0) >= 10 And WindowMouseX(0) <= 48
Title$ = "3DNow!"
Text$ = "AMD only"
ElseIf WindowMouseX(0) >= 58 And WindowMouseX(0) <= 111
Title$ = "Ext3DNow!"
Text$ = "PF2IW, PFNACC, PFPNACC, PI2FW, PSWAPD" + #LFCR$ + "AMD only"
ElseIf WindowMouseX(0) >= 121 And WindowMouseX(0) <= 141
Title$ = "AES"
Text$ = "Intel only"
ElseIf WindowMouseX(0) >= 151 And WindowMouseX(0) <= 191
Title$ = "AMDLM"
Text$ = "AMD Long Mode" + #LFCR$ + "AMD only"
ElseIf WindowMouseX(0) >= 200 And WindowMouseX(0) <= 270
Title$ = "AMDMISAL16"
Text$ = "Misaligned 16-Byte Memory Access" + #LFCR$ + "AMD only"
ElseIf WindowMouseX(0) >= 279 And WindowMouseX(0) <= 302
Title$ = "AVX"
Text$ = "Intel only"
ElseIf WindowMouseX(0) >= 312 And WindowMouseX(0) <= 345
Title$ = "CLFSH"
Text$ = "CLFLUSH" + #LFCR$ + "Intel and AMD"
ElseIf WindowMouseX(0) >= 355 And WindowMouseX(0) <= 398
Title$ = "(F)CMOVE"
Text$ = "CMOVcc, FCMOVcc" + #LFCR$ + "Intel and AMD"
ElseIf WindowMouseX(0) >= 408 And WindowMouseX(0) <= 441
Title$ = "CVT16"
Text$ = "Floating-Point Fraction Extract and Half-Precision Conversion" + #LFCR$ + "AMD only"
ElseIf WindowMouseX(0) >= 451 And WindowMouseX(0) <= 471
Title$ = "CX8"
Text$ = "CMPXCHG8B" + #LFCR$ + "Intel and AMD"
ElseIf WindowMouseX(0) >= 481 And WindowMouseX(0) <= 507
Title$ = "CX16"
Text$ = "CMPXCHG16B" + #LFCR$ + "Intel and AMD"
ElseIf WindowMouseX(0) >= 517 And WindowMouseX(0) <= 539
Title$ = "FMA"
Text$ = "Fused Multiply Add" + #LFCR$ + "Intel only"
ElseIf WindowMouseX(0) >= 549 And WindowMouseX(0) <= 577
Title$ = "FMA4"
Text$ = "Floating-Point Multiply Accumulate (4 Operands)" + #LFCR$ + "AMD only"
ElseIf WindowMouseX(0) >= 587 And WindowMouseX(0) <= 614
Title$ = "FXSR"
Text$ = "FXSAVE, FXRSTOR" + #LFCR$ + "Intel and AMD"
ElseIf WindowMouseX(0) >= 624 And WindowMouseX(0) <= 659
Title$ = "LZCNT"
Text$ = "AMD only"
ElseIf WindowMouseX(0) >= 669 And WindowMouseX(0) <= 694
Title$ = "MMX"
Text$ = "Multi Media Extension" + #LFCR$ + "Intel and AMD"
ElseIf WindowMouseX(0) >= 703 And WindowMouseX(0) <= 741
Title$ = "(E)MMX"
Text$ = "AMD Extensions to MMX" + #LFCR$ + "AMD only"
ElseIf WindowMouseX(0) >= 750 And WindowMouseX(0) <= 800
Title$ = "MONITOR"
Text$ = "MONITOR, MWAIT" + #LFCR$ + "Intel and AMD"
ElseIf WindowMouseX(0) >= 809 And WindowMouseX(0) <= 847
Title$ = "MOVBE"
Text$ = "Intel only"
ElseIf WindowMouseX(0) >= 857 And WindowMouseX(0) <= 880
Title$ = "MSR"
Text$ = "RDMSR, WRMSR" + #LFCR$ + "Intel and AMD"
EndIf
ElseIf WindowMouseY(0) >= 30 And WindowMouseY(0) <= 38 ;untere Zeile
If WindowMouseX(0) >= 10 And WindowMouseX(0) <= 60
Title$ = "OSXSAVE"
Text$ = "OS Support for Processor extended State Management using XSAVE/XRSTOR" + #LFCR$ + "Intel only"
ElseIf WindowMouseX(0) >= 70 And WindowMouseX(0) <= 137
Title$ = "PCLMULQDQ"
Text$ = "Carryless Multiplication" + #LFCR$ + "Intel only"
ElseIf WindowMouseX(0) >= 147 And WindowMouseX(0) <= 190
Title$ = "POPCNT"
Text$ = "Intel only"
ElseIf WindowMouseX(0) >= 200 And WindowMouseX(0) <= 237
Title$ = "RDTSC"
Text$ = "Intel and AMD"
ElseIf WindowMouseX(0) >= 247 And WindowMouseX(0) <= 292
Title$ = "RDTSCP"
Text$ = "Intel and AMD"
ElseIf WindowMouseX(0) >= 302 And WindowMouseX(0) <= 324
Title$ = "SEP"
Text$ = "SYSENTER, SYSEXIT" + #LFCR$ + "Intel and AMD"
ElseIf WindowMouseX(0) >= 334 And WindowMouseX(0) <= 357
Title$ = "SMX"
Text$ = "Safer Mode Extensions" + #LFCR$ + "Intel only"
ElseIf WindowMouseX(0) >= 367 And WindowMouseX(0) <= 387
Title$ = "SSE"
Text$ = "Intel and AMD"
ElseIf WindowMouseX(0) >= 397 And WindowMouseX(0) <= 424
Title$ = "SSE2"
Text$ = "Intel and AMD"
ElseIf WindowMouseX(0) >= 434 And WindowMouseX(0) <= 461
Title$ = "SSE3"
Text$ = "Intel and AMD"
ElseIf WindowMouseX(0) >= 471 And WindowMouseX(0) <= 506
Title$ = "SSSE3"
Text$ = "Intel only"
ElseIf WindowMouseX(0) >= 516 And WindowMouseX(0) <= 551
Title$ = "SSE4.1"
Text$ = "Intel only"
ElseIf WindowMouseX(0) >= 561 And WindowMouseX(0) <= 596
Title$ = "SSE4.2"
Text$ = "Intel only"
ElseIf WindowMouseX(0) >= 607 And WindowMouseX(0) <= 642
Title$ = "SSE4A"
Text$ = "EXTRQ, INSERTQ, MOVNTSD, MOVNTSS" + #LFCR$ + "AMD only"
ElseIf WindowMouseX(0) >= 652 And WindowMouseX(0) <= 676
Title$ = "SVM"
Text$ = "Secure Virtual Machine" + #LFCR$ + "AMD only"
ElseIf WindowMouseX(0) >= 686 And WindowMouseX(0) <= 709
Title$ = "VMX"
Text$ = "Virtual Machine Extensions" + #LFCR$ + "Intel only"
ElseIf WindowMouseX(0) >= 719 And WindowMouseX(0) <= 744
Title$ = "XOP"
Text$ = "Extended Operations" + #LFCR$ + "AMD only"
ElseIf WindowMouseX(0) >= 753 And WindowMouseX(0) <= 788
Title$ = "XSAVE"
Text$ = "XRSTOR, XSAVE" + #LFCR$ + "Intel only"
EndIf
EndIf
If Title$ <> ""
CPUInfo(Title$, Text$)
EndIf
EndSelect
ForEver
EndIf
Helle