forked from KolibriOS/kolibrios
827172f6c0
* @ss: decrease used memory & time requirements, size optimization * @panel: if there is only one window, Alt+[Shift+]Tab activates it * jpegview: IPC service to unpack JPEG data for other apps * chess: bmp-file is now inlined * @ss, chess moved to more appropriate place in file structure git-svn-id: svn://kolibrios.org@532 a494cfbc-eb01-0410-851d-a64ba20cac60
331 lines
8.2 KiB
PHP
331 lines
8.2 KiB
PHP
;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
|