1
0
kolibrios/programs/system/cpuid/trunk/features.inc

331 lines
8.2 KiB
PHP
Raw Normal View 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
;//////////////////////////////////////////////
decode_sse3: ; is SS3 supported
xor eax, eax
inc eax
cpuid
test ecx, 1
setnz [sse3sup]
mov eax, sse3+6
write_yes_no:
mov dword [eax], 'no'
jz @f
mov dword [eax], 'yes'
@@:
ret
show_next_bit:
shr edx, 1
write_yes_no_cf:
mov dword [eax], 'no'
jnc @f
mov dword [eax], 'yes'
@@:
ret
;decoding standard features
decode_standard_features:
xor eax,eax
inc eax
cpuid
mov eax, FPU+6
call show_next_bit
mov eax, VME+7
call show_next_bit
mov eax, DE+7
call show_next_bit
mov eax, PSE+8
call show_next_bit
mov eax, TSC+6
call show_next_bit
mov eax, MSR+7
call show_next_bit
mov eax, PAE+7
call show_next_bit
mov eax, MCE+8
call show_next_bit
mov eax, CX8+6
call show_next_bit
mov eax, APIC+7
call show_next_bit
shr edx, 1 ; skip reserved bit
mov eax, SEP+8
call show_next_bit
mov eax, MTRR+6
call show_next_bit
mov eax, PGE+7
call show_next_bit
mov eax, MCA+7
call show_next_bit
mov eax, CMOV+8
call show_next_bit
mov eax, PAT+6
call show_next_bit
mov eax, PSE36+7
call show_next_bit
mov eax, PSNUM+7
call show_next_bit
mov eax, CLFLUSHn+8
call show_next_bit
shr edx, 1 ; skip reserved bit
mov eax, DTS+7
call show_next_bit
mov eax, ACPI+7
call show_next_bit
mov eax, MMX+8
call show_next_bit
mov eax, [eax]
mov [MMXs+7], eax
mov eax, FXSR+6
call show_next_bit
mov eax, SSE+7
call show_next_bit
mov eax, SSE2+7
call show_next_bit
mov eax, SSn+8
call show_next_bit
shr edx, 1
; mov eax, HTT+8
; test edx, HTT_FLAG
; call write_yes_no
mov eax, TM+7
call show_next_bit
mov eax, IA64+7
call show_next_bit
mov eax, PBE+8
call show_next_bit
ret
;//////////////////////////////////////////////
decode_extended_features:
; is called immediately after decode_standard_features
; xor eax, eax
; inc eax
; cpuid
mov eax, SS3+8
test ecx, SSE3_FLAG
call write_yes_no
mov eax, MON+8
test ecx, MON_FLAG
call write_yes_no
mov eax, DS_CPL+8
test ecx, DS_CPL_FLAG
call write_yes_no
mov eax, EST+8
test ecx, EST_FLAG
call write_yes_no
mov eax, TM2+8
test ecx, TM2_FLAG
call write_yes_no
mov eax, CNXT_ID+12
test ecx, CNXT_ID_FLAG
call write_yes_no
mov eax, CX16+12
test ecx, CX16_FLAG
call write_yes_no
mov eax, ETPRD+12
test ecx, ETPRD_FLAG
call write_yes_no
mov eax, VMX+8
test ecx, VMX_FLAG
call write_yes_no
mov eax, SSSE3+12
test ecx, SSSE3_FLAG
call write_yes_no
mov eax, DCA+8
test ecx, DCA_FLAG
call write_yes_no
@@:
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
decode_extended:
mov eax, $80000000
cpuid
mov [extc], eax ; max number of calls
test eax, eax
jns @b
mov eax, $80000001 ;// Setup extended function 8000_0001h
cpuid
mov eax, MP+8
test edx, MP_FLAG
call write_yes_no
mov eax, NX+8
test edx, NX_FLAG
call write_yes_no
;jmp Tez3 we do detection in another place, because of Cyrix specific MMX+ detection
; mov eax, MMXPi+8
; test edx, MMXPi_FLAG
; call write_yes_no
mov eax, MMXn+8
test edx, MMXn_FLAG
call write_yes_no
mov eax, FXSRn+8
test edx, FXSRn_FLAG
call write_yes_no
mov eax, FFXSR+12
test edx, FFXSR_FLAG
call write_yes_no
mov eax, TSCP+12
test edx, TSCP_FLAG
call write_yes_no
mov eax, LM+12
test edx, LM_FLAG
call write_yes_no
mov eax, DNo+12
test edx, DNo_FLAG
call write_yes_no
mov eax, DN+12
test edx, DN_FLAG
call write_yes_no
;Intel
mov eax, SYS+12
test edx, SYS_FLAG
call write_yes_no
mov eax, LAF+12
test ecx, LAHF_FLAG
call write_yes_no
mov eax, CMPL+12
test ecx, CMPL_FLAG
call write_yes_no
mov eax, SVM+8
test ecx, SVM_FLAG
call write_yes_no
mov eax, MCR8+12
test ecx, MOVCR8_FLAG
call write_yes_no
ret