kolibrios-fun/programs/system/cpuid/trunk/features.inc
heavyiron 577eed1321 *CPUID 2.17 from Wildwest
*skinsel from diamond
*end, menu, @panel - more stable with different system colors
*@rb - new menu
*@panel - fixed drawing cpu usage in QEMU and maybe on some real comps

git-svn-id: svn://kolibrios.org@318 a494cfbc-eb01-0410-851d-a64ba20cac60
2007-02-04 01:47:46 +00:00

744 lines
11 KiB
PHP
Raw Blame History

;Addresses for bits
FPU_FLAG equ 0001h ;Floating-point unit on-Chip
VME_FLAG equ 0002h ;Virtual Mode Extension
DE_FLAG equ 0004h ;Debugging Extension
PSE_FLAG equ 0008h ;Page Size Extension
TSC_FLAG equ 0010h ;Time-Stamp Counter
MSR_FLAG equ 0020h ;Model Specific Registers
PAE_FLAG equ 0040h ;Physical Address Extension
MCE_FLAG equ 0080h ;Machine Check Exception
CX8_FLAG equ 0100h ;CMPXCHG8 Instruction Supported
APIC_FLAG equ 0200h ;On-chip APIC Hardware Supported
;10_FLAG equ 0400h ;Reserved
SEP_FLAG equ 0800h ;Fast System Call
MTRR_FLAG equ 1000h ;Memory Type Range Registers
PGE_FLAG equ 2000h ;Page Global Enable
MCA_FLAG equ 4000h ;Machine Check Architecture
CMOV_FLAG equ 8000h ;Conditional Move Instruction Supported
PAT_FLAG equ 10000h ;Page Attribute Table
PSE36_FLAG equ 20000h ;36-bit Page Size Extension
PSNUM_FLAG equ 40000h ;Processor serial number present and enabled
CLFLUSH_FLAG equ 80000h ;CLFLUSH Instruction supported
;20_FLAG equ 100000h ;Reserved
DTS_FLAG equ 200000h ;Debug Store
ACPI_FLAG equ 400000h ;Thermal Monitor and Software Controlled Clock Facilities supported
MMX_FLAG equ 800000h ;Intel Architecture MMX technology supported
FXSR_FLAG equ 1000000h ;Fast floating point save and restore
SSE_FLAG equ 2000000h ;Streaming SIMD Extensions supported
SSE2_FLAG equ 4000000h ;Streaming SIMD Extensions 2
SS_FLAG equ 8000000h ;Self-Snoop
;HTT_FLAG equ 10000000h ;Hyper-Threading Technology
TM_FLAG equ 20000000h ;Thermal Monitor supported
IA64_FLAG equ 40000000h ; IA-64
PBE_FLAG equ 80000000h ;Pending Break Enable
; ecx cpuid(1)
SSE3_FLAG equ 0001h ;SSE3 0
MON_FLAG equ 0008h ;MON -3
DS_CPL_FLAG equ 0010h ;DS-CPL -4
VMX_FLAG equ 0020h ;VMX -5
EST_FLAG equ 0080h ; EST-7
TM2_FLAG equ 0100h ; TM2-8
SSSE3_FLAG equ 0200h ;SSSE3 -9
CNXT_ID_FLAG equ 0400h ;CID -10
CX16_FLAG equ 2000h ;CX16 - 13
ETPRD_FLAG equ 4000h ;xTPR - 14
DCA_FLAG equ 40000h ;DCA - 18
; edx cpuid(8000_0001h)
SYS_FLAG equ 0800h ;11
MP_FLAG equ 80000h ;19
NX_FLAG equ 100000h ;20
MMXPi_FLAG equ 400000h ;22
MMXn_FLAG equ 800000h ;23
FXSRn_FLAG equ 1000000h ;24 it is <EFBFBD><EFBFBD><EFBFBD>+ for Cyrix
FFXSR_FLAG equ 2000000h ;25
TSCP_FLAG equ 8000000h ;27
LM_FLAG equ 20000000h ;29 EM64T
DNo_FLAG equ 40000000h ;30
DN_FLAG equ 80000000h ;31
; ecx cpuid(8000_0001h)
LAHF_FLAG equ 0001h ; LAHF 0
CMPL_FLAG equ 0002h ; core multi-processing legacy mode 1
SVM_FLAG equ 0004h ; secure virtual machine 2
MOVCR8_FLAG equ 0010h ;AltMovCr8 4
;decoding standard features
decode_standard_features:
xor eax,eax
inc eax
cpuid
Test0:
test edx, FPU_FLAG
jnz Test0e
mov dword [FPU+6], $6F6E
jmp Test1
Test0e:
mov dword [FPU+6], $736579
;;;;;;
Test1:
test edx, VME_FLAG
jnz Test1e
mov dword [VME+ 7], $6F6E
jmp Test2
Test1e:
mov dword [VME+ 7], $736579
;;;;;;
Test2:
test edx, DE_FLAG
jnz Test2e
mov dword [DE+ 7], $6F6E
jmp Test3
Test2e:
mov dword [DE+ 7], $736579
;;;;;;
Test3:
test edx, PSE_FLAG
jnz Test3e
mov dword [PSE+ 8], $6F6E
jmp Test4
Test3e:
mov dword [PSE+ 8], $736579
;;;;
Test4:
test edx, TSC_FLAG
jnz Test4e
mov dword [TSC+ 6], $6F6E
jmp Test5
Test4e:
mov dword [TSC+ 6], $736579
;;;;
Test5:
test edx, MSR_FLAG
jnz Test5e
mov dword [MSR+ 7], $6F6E
jmp Test6
Test5e:
mov dword [MSR+ 7], $736579
;;;;
Test6:
test edx, PAE_FLAG
jnz Test6e
mov dword [PAE+ 7], $6F6E
jmp Test7
Test6e:
mov dword [PAE+ 7], $736579
;;;;
Test7:
test edx, MCE_FLAG
jnz Test7e
mov dword [MCE+ 8], $6F6E
jmp Test8
Test7e:
mov dword [MCE+ 8], $736579
;;;;
Test8:
test edx, CX8_FLAG
jnz Test8e
mov dword [CX8+ 6], $6F6E
jmp Test9
Test8e:
mov dword [CX8+ 6], $736579
;;;;
Test9:
test edx, APIC_FLAG
jnz Test9e
mov dword [APIC+ 7], $6F6E
jmp Test11
Test9e:
mov dword [APIC+ 7], $736579
;;;;;
Test11:
test edx, SEP_FLAG
jnz Test11e
mov dword [SEP+ 8], $6F6E
jmp Test12
Test11e:
mov dword [SEP+ 8], $736579
;;;;
Test12:
test edx, MTRR_FLAG
jnz Test12e
mov dword [MTRR+ 6], $6F6E
jmp Test13
Test12e:
mov dword [MTRR+ 6], $736579
;;;;
Test13:
test edx, PGE_FLAG
jnz Test13e
mov dword [PGE+ 7], $6F6E
jmp Test14
Test13e:
mov dword [PGE+ 7], $736579
;;;;;
Test14:
test edx, MCA_FLAG
jnz Test14e
mov dword [MCA+ 7], $6F6E
jmp Test15
Test14e:
mov dword [MCA+ 7], $736579
;;;;
Test15:
test edx, CMOV_FLAG
jnz Test15e
mov dword [CMOV+ 8], $6F6E
jmp Test16
Test15e:
mov dword [CMOV+ 8], $736579
;;;;
Test16:
test edx, PAT_FLAG
jnz Test16e
mov dword [PAT+ 6], $6F6E
jmp Test17
Test16e:
mov dword [PAT+ 6], $736579
;;;;
Test17:
test edx, PSE36_FLAG
jnz Test17e
mov dword [PSE36+ 7], $6F6E
jmp Test18
Test17e:
mov dword [PSE36+ 7], $736579
;;;;
Test18:
test edx, PSNUM_FLAG
jnz Test18e
mov dword [PSNUM+ 7], $6F6E
jmp Test19
Test18e:
mov dword [PSNUM+ 7], $736579
;;;;
Test19:
test edx, CLFLUSH_FLAG
jnz Test19e
mov dword [CLFLUSHn + 8], $6F6E
jmp Test21
Test19e:
mov dword [CLFLUSHn + 8], $736579
;;;;
Test21:
test edx, DTS_FLAG
jnz Test21e
mov dword [DTS+ 7], $6F6E
jmp Test22
Test21e:
mov dword [DTS+ 7], $736579
;;;;
Test22:
test edx, ACPI_FLAG
jnz Test22e
mov dword [ACPI+ 7], $6F6E
jmp Test23
Test22e:
mov dword [ACPI+ 7], $736579
;;;;;
Test23:
test edx, MMX_FLAG
jnz Test23e
mov dword [MMX+ 8], $6F6E
mov dword [MMXs+ 7], $6F6E
jmp Test24
Test23e:
mov dword [MMX+ 8], $736579
mov dword [MMXs+ 7], $736579
;;;;;
Test24:
test edx, FXSR_FLAG
jnz Test24e
mov dword [FXSR+ 6], $6F6E
jmp Test25
Test24e:
mov dword [FXSR+ 6], $736579
;;;;;
Test25:
test edx, SSE_FLAG
jnz Test25e
mov dword [SSE+ 7], $6F6E
jmp Test26
Test25e:
mov dword [SSE+ 7], $736579
;;;;
Test26:
test edx, SSE2_FLAG
jnz Test26e
mov dword [SSE2+ 7], $6F6E
jmp Test27
Test26e:
mov dword [SSE2+ 7], $736579
;;;;
Test27:
test edx, SS_FLAG
jnz Test27e
mov dword [SSn+ 8], $6F6E
jmp Test29;28
Test27e:
mov dword [SSn+ 8], $736579
;;;;
;Test28:
;test edx, HTT_FLAG
;jnz Test28e
;
;mov dword [HTT+ 8], $6F6E
;jmp Test29
;
;Test28e:
;mov dword [HTT+ 8], $736579
;;;;
Test29:
test edx, TM_FLAG
jnz Test29e
mov dword [TM+ 7], $6F6E
jmp Test30
Test29e:
mov dword [TM+ 7], $736579
;;;;
Test30:
test edx, IA64_FLAG
jnz Test30e
mov dword [IA64+ 7], $6F6E
jmp Test31
Test30e:
mov dword [IA64+ 7], $736579
;;;;
Test31:
test edx, PBE_FLAG
jnz Test31e
mov dword [PBE+ 8], $6F6E
jmp Standart_out
Test31e:
mov dword [PBE+ 8], $736579
Standart_out:
ret
;//////////////////////////////////////////////
decode_sse3: ; is SS3 supported
xor eax,eax
inc eax
cpuid
test ecx, $1 ; Test bit 1
jnz .EX; SSE3 technology is supported
jz .EXN
.EX:
mov dword [sse3+ 6], $736579
mov [sse3sup], 1
jmp exitter
.EXN:
mov dword [sse3+ 6], $6F6E
mov [sse3sup],0
exitter:
ret
;//////////////////////////////////////////////
decode_extended_features:
xor eax,eax
inc eax
cpuid
Tes1:
test ecx, SSE3_FLAG
jnz Tes1e
mov dword [SS3+ 8], $6F6E
jmp Tes2
Tes1e:
mov dword [SS3+ 8], $736579
Tes2:
test ecx, MON_FLAG
jnz Tes2e
mov dword [MON+ 8], $6F6E
jmp Tes3
Tes2e:
mov dword [MON+ 8], $736579
Tes3:
test ecx, DS_CPL_FLAG
jnz Tes3e
mov dword [DS_CPL+ 8], $6F6E
jmp Tes4
Tes3e:
mov dword [DS_CPL+ 8], $736579
Tes4:
test ecx, EST_FLAG
jnz Tes4e
mov dword [EST+ 8], $6F6E
jmp Tes5
Tes4e:
mov dword [EST+ 8], $736579
Tes5:
test ecx, TM2_FLAG
jnz Tes5e
mov dword [TM2+ 8], $6F6E
jmp Tes6
Tes5e:
mov dword [TM2+ 8], $736579
Tes6:
test ecx, CNXT_ID_FLAG
jnz Tes6e
mov dword [CNXT_ID+ 12], $6F6E
jmp Tes7
Tes6e:
mov dword [CNXT_ID+ 12], $736579
Tes7:
test ecx, CX16_FLAG
jnz Tes7e
mov dword [CX16+ 12], $6F6E
jmp Tes8
Tes7e:
mov dword [CX16+ 12], $736579
Tes8:
test ecx, ETPRD_FLAG
jnz Tes8e
mov dword [ETPRD+ 12], $6F6E
jmp Tes9
Tes8e:
mov dword [ETPRD+ 12], $736579
Tes9:
test ecx, VMX_FLAG
jnz Tes9e
mov dword [VMX+ 8], $6F6E
jmp Tes10
Tes9e:
mov dword [VMX+ 8], $736579
Tes10:
test ecx, SSSE3_FLAG
jnz Tes10e
mov dword [SSSE3+ 12], $6F6E
jmp Tes11
Tes10e:
mov dword [SSSE3+ 12], $736579
Tes11:
test ecx, DCA_FLAG
jnz Tes11e
mov dword [DCA+ 8], $6F6E
jmp Tes12
Tes11e:
mov dword [DCA+ 8], $736579
Tes12:
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
decode_extended:
xor eax, eax
mov eax,$80000000
cpuid
test eax, 80000000h
jnz gooodd
jmp baaad
baaad:
jmp Tez13
gooodd:
xor eax, eax
mov eax, $80000001 ;// Setup extended function 8000_0001h
cpuid
Tez1:
test edx, MP_FLAG
jnz Tez1e
mov dword [MP+8], $6F6E
jmp Tez2
Tez1e:
mov dword [MP+ 8], $736579
Tez2:
test edx, NX_FLAG
jnz Tez2e
mov dword [NX+ 8], $6F6E
jmp Tez4
;jmp Tez3 we do detection in another place, because of Cyrix specific MMX+ detection
Tez2e:
mov dword [NX+ 8], $736579
;Tez3:
;test edx, MMXPi_FLAG
;jnz Tez3e
;mov dword [MMXPi+ 8], $6F6E
;jmp Tez4
;Tez3e:
;mov dword [MMXPi+ 8], $736579
Tez4:
test edx, MMXn_FLAG
jnz Tez4e
mov dword [MMXn+ 8], $6F6E
jmp Tez5
Tez4e:
mov dword [MMXn+ 8], $736579
Tez5:
test edx, FXSRn_FLAG
jnz Tez5e
mov dword [FXSRn+ 8], $6F6E
jmp Tez6
Tez5e:
mov dword [FXSRn+ 8], $736579
Tez6:
test edx, FFXSR_FLAG
jnz Tez6e
mov dword [FFXSR+ 12], $6F6E
jmp Tez7
Tez6e:
mov dword [FFXSR+ 12], $736579
Tez7:
test edx, TSCP_FLAG
jnz Tez7e
mov dword [TSCP+ 12], $6F6E
jmp Tez8
Tez7e:
mov dword [TSCP+ 12], $736579
Tez8:
test edx, LM_FLAG
jnz Tez8e
mov dword [LM+ 12], $6F6E
jmp Tez9
Tez8e:
mov dword [LM+ 12], $736579
Tez9:
test edx, DNo_FLAG
jnz Tez9e
mov dword [DNo+ 12], $6F6E
jmp Tez10
Tez9e:
mov dword [DNo+ 12], $736579
Tez10:
test edx, DN_FLAG
jnz Tez10e
mov dword [DN+ 12], $6F6E
jmp Tez11
Tez10e:
mov dword [DN+ 12], $736579
;Intel
Tez11:
test edx, SYS_FLAG
jnz Tez11e
mov dword [SYS+ 12], $6F6E
jmp Tez12
Tez11e:
mov dword [SYS+ 12], $736579
Tez12:
test ecx, LAHF_FLAG
jnz Tez12e
mov dword [LAF+ 12], $6F6E
jmp Tez13
Tez12e:
mov dword [LAF+ 12], $736579
Tez13:
test ecx, CMPL_FLAG
jnz Tez13e
mov dword [CMPL+ 12], $6F6E
jmp Tez14
Tez13e:
mov dword [CMPL+ 12], $736579
Tez14:
test ecx, SVM_FLAG
jnz Tez14e
mov dword [SVM+ 8], $6F6E
jmp Tez15
Tez14e:
mov dword [SVM+ 8], $736579
Tez15:
test ecx, MOVCR8_FLAG
jnz Tez15e
mov dword [MCR8+ 12], $6F6E
jmp Tez16
Tez15e:
mov dword [MCR8+ 12], $736579
Tez16:
ret