;****************************************************************************** ; project name: CPUID * ; target platform: KolibriOS, x86 (IA-32), x86-64 achitectures * ; compiler: flat assembler 1.67.21 * ; version: 2.18 * ; last update: 1st April 2007 1st 2nd 3rd 4th * ; maintained by: Sergey Kuzmin aka Wildwest * ; e-mail: kuzmin_serg@list.ru * ; site: http://coolthemes.narod.ru/files.html * ; license: Copyright 2004-2007 Sergey Kuzmin and co-authors * ; Rules: * ; 1)you can use pieces of code in your project, but should * ; mention the original author (include copyright notice); * ; 2)if you modify CPUID (improve, port, translate, etc) send * ; your changes to the maintainer or make about post changes* ; at forum http://meos.sysbin.com * ;-----------------------------------------------------------------------------* ; English comments * ;------------------------------------------------------------------------------ use32 org 0x0 db 'MENUET01' dd 0x01 dd START dd I_END dd U_END+4096*8 dd U_END+4096*8 ; dd 0x100000+4096 ; dd 0x100000+4096 dd 0x0 dd 0x0 macro udata { } include 'mos_uzel.inc' ; useful macroses and Brand ID decoding include 'caches.inc' ;(L1 and L2 cashes decoding for Intel) include 'multipli.inc' ;(multiplier decoding) include 'features.inc' ;(features decoding) include 'gif2img.inc' ; include macros to convert gif to img include 'rsatest.inc' include 'variable.inc' START: ; LET'S GO!!! ;------------ CYCLES: ; CPU speed mov eax, 18 mov ebx,5 int 0x40 mov [total1],eax ;in Hz, example 1600490000 xor edx,edx mov ebx,1000000 div ebx mov [total], eax ; in Mhz, example 1600 xor edx, edx mov eax, [total1] mov ebx, 10000 div ebx mov [ost], eax ; example 160049 mov eax, [total] imul eax, 100 mov [sot], eax ; example 160000 mov eax, [ost] sub eax, [sot] mov [sot], eax ; example 49 ;------------ cpu: ;is CPUID supported? pushfd ;push original EFLAGS pop eax ;get original EFLAGS mov ebx, eax ;save original EFLAGS xor eax, 00200000h ;flip 21th bit in EFLAGS push eax ;save new EFLAGS value on stack popfd ;replace current EFLAGS value pushfd ;get new EFLAGS pop eax ;store new EFLAGS in EAX cmp eax, ebx ;compare values of 21th bit jz NO_CPUID ;CPUID isn't supported ;------------ CPUNAME: ; VENDOR mov eax,0 ; eax=0 cpuid mov [stdc], eax ; number of calls mov [cpuname+ 12],ebx mov [cpuname+ 16],edx mov [cpuname+ 20],ecx mov [smallvendor],ecx ; for various vendors we should later use different methods ;Decoding cache L1 and L2 for Intel cmp [smallvendor], 'ntel' jne cpu1 ;is not Intel je .detec .detec: ;Starting L1, L2, L3 caches detection (Intel made it VERY HARD) mov eax, 2 cpuid mov [che], al ; number of calls multik: dec [che] .eaxl: test eax, $80000000 ; Test bit 31 jnz .ebxl ; <> 0 =>invalid values shr eax, 8 call decodecache shr eax, 8 call decodecache shr eax, 8 call decodecache .ebxl: test ebx, $80000000 jnz .ecxl mov eax, ebx call decodecache shr eax, 8 call decodecache shr eax, 8 call decodecache shr eax, 8 call decodecache .ecxl: test ecx, $80000000 jnz .edxl mov eax, ecx call decodecache shr eax, 8 call decodecache shr eax, 8 call decodecache shr eax, 8 call decodecache .edxl: test edx, $80000000 jnz cpu1 mov eax, edx call decodecache shr eax, 8 call decodecache shr eax, 8 call decodecache shr eax, 8 call decodecache cmp [che], 0 ; we made all calls je cpu1 multi: ; not yet mov eax, 2 ; so we made call again cpuid jmp multik ; FAMILY MODEL STEPPING cpu1: xor eax, eax inc eax ; eax=1 cpuid mov ecx, eax and ecx,00000F00h ; get CPU family shr ecx,8 ; shift it to the correct position mov dword[f],ecx mov ecx, eax and ecx,000000F0h ; get CPU model shr ecx,4 mov dword[m],ecx mov ecx, eax and ecx,0000000Fh ; get CPU stepping mov dword[s],ecx ;- mov ecx, eax ; get Type shl ecx, 18 shr ecx,30 ;and ecx, 0000000Fh ; only two lower bits can be nonzero mov dword[t], ecx ;======================================================= cmp dword[smallvendor], 'cAMD' jz maybe_athlon cmp dword[smallvendor], 'ntel' jz detect_it jmp no_full ; if not AMD or Intel detect_it: cmp [f], 0Fh jne no_full full: mov ecx, eax ; get Extended model shr ecx,16 ;shift it to the correct position and ecx, 0000000Fh shl ecx, 4 add ecx, [m] mov dword[em],ecx ; effective model mov ecx, eax ; get Extended family shr ecx, 20 ;shift it to the correct position and ecx, 000000FFh add ecx, [f] mov dword[ef],ecx ; effective family jmp fut no_full: mov ecx, [m] mov [em], ecx mov ecx, [f] mov [ef], ecx jmp fut maybe_athlon: mov eax, 0x80000001 ; CPUID ext. function 0x80000001 cpuid mov ecx, eax and ecx,00000F00h ; get CPU family shr ecx,8 ; shift it to the correct position mov dword[ef],ecx mov ecx, eax and ecx,000000F0h ; get CPU model shr ecx,4 mov dword[em],ecx fut: call decode_sse3 ;- call decode_extended mov eax,$80000000 cpuid mov [extc], eax ; max number of calls test eax, $80000000 ;// Test bit 31 jz .noname cmp eax,$80000003 ja .mynameis jmp .noname .mynameis: mov eax,$80000002 cpuid mov [myname],eax mov [myname+4],ebx mov [myname+8],ecx mov [myname+12],edx mov eax,$80000003 cpuid mov [myname+16],eax mov [myname+20],ebx mov [myname+24],ecx mov [myname+28],edx mov eax,$80000004 cpuid mov [myname+32],eax mov [myname+36],ebx mov [myname+40],ecx mov [myname+44],edx jmp red .noname: mov dword [myname], $612F6E red: xor ecx, ecx xor eax, eax xor edx, edx xor ebx, ebx ;mov byte [multiplier], 115; ; for testing call multipl ; get multiplier mov byte [multiplier], cl xor eax, eax xor ebx, ebx xor ecx, ecx xor edx, edx cmp dword[multiplier], 0 jz contin calc: mov eax,dword [ost] ; example 166474 imul eax, 10 ; example 1664740 mov ebx, dword [multiplier] ; get system clock (if multiplier detected) div ebx mov dword [freqbb], eax ; 16647 xor eax, eax xor ebx, ebx xor ecx, ecx xor edx, edx mov eax,dword [ost] ;example 166474 mov ebx,10 div ebx ;example 16647 mov dword [temp], eax xor eax, eax xor ebx, ebx xor ecx, ecx xor edx, edx mov eax, dword [temp] mov ebx, dword [multiplier] div ebx ; example 166 imul eax, 100 mov dword[freqll], eax ; example 16600 xor eax, eax xor ebx, ebx xor ecx, ecx xor edx, edx mov eax, dword[freqbb]; example 16647 sub eax, dword[freqll]; example 16600 mov dword[freqll], eax ;example 47 xor eax, eax xor ebx, ebx xor ecx, ecx xor edx, edx mov eax,dword [freqbb]; example 16647 mov ebx, 100 div ebx mov dword [freqbb], eax ; example 166 xor eax, eax xor ebx, ebx xor ecx, ecx xor edx, edx mov eax,dword[multiplier] ; example 115 mov ebx,10 div ebx mov dword[multb], eax ; example 11 imul eax, 10 mov dword[multa], eax ; example 110 xor eax, eax xor ebx, ebx xor ecx, ecx xor edx, edx mov eax, dword[multiplier] sub eax, dword[multa] mov dword[multa], eax ; example 5 xor eax, eax xor ebx, ebx xor ecx, ecx xor edx, edx jmp output contin: mov dword [freqbb], 0 mov dword [freqll], 0 output: call draw_window ; Draw window typedetect: cmp [t], 00b jne t2d Text 295,270,0x00000000,t1, t1len-t1 jmp PROCCORE t2d: cmp [t], 01b jne t3d Text 295,270,0x00000000,t2, t2len-t2 jmp PROCCORE t3d: cmp [t], 11b jne notype Text 295,270,0x00000000,t3, t3len-t3 jmp PROCCORE notype: Text 295,270,0x00000000,t4, t4len-t4 PROCCORE: ; Who are you? ; Intel - "GenuineIntel" + ; AMD - "AuthenticAMD" + ; Cyrix - "CyrixInstead" + ; UMC - "UMC UMC UMC " ; NexGen - "NexGenDriven" ; Centaur - "CentaurHauls" + ; Rise Technology - "RiseRiseRise" ; SiS - "SiS SiS SiS " ; Transmeta - "GenuineTMx86" + ; National Semiconductor - "Geode by NSC" cmp dword[smallvendor], 'ntel' jz Intel cmp dword[smallvendor], 'cAMD' jz AMD cmp dword[smallvendor], 'tead' jz Cyrix cmp dword[smallvendor], 'auls' jz Centaur cmp dword[smallvendor], 'Mx86' jz Transmeta ; cmp ecx, 'UMC ' ; jz .UMC ; cmp ecx, 'iven' ; jz .NexGen ; cmp ecx, 'Rise' ; jz .Rise ; cmp ecx, 'SiS ' ; jz .SiS ; cmp ecx, ' NSC' ; jz .NSC jmp Other ; I don't know what to do with you... Other: Text 80,90,0x00000000,other, otherlen-other jmp MMXtest ;------------------------- AMD: Text 20, 210,0x00000000,cache, cachelen-cache Text 80,90,0x00000000,AMDn, AMDnlen-AMDn mov esi, amd call load_gif PutImage 130,127,201,49,img_area+8 ; place size ; Relax, man. AMD made PRETTY SIMPLE cache detection routine ;CACHE1: mov eax, 80000005h cpuid mov eax, ecx ;shl eax, 24 ;shr eax, 24 and eax,000000FFh ; mov [lineld], eax mov eax, ecx ;shl eax, 8 ;shr eax, 24 and eax,00FF0000h shr eax, 16 mov [wayld], eax shr ecx, 24 mov [L1d], ecx mov eax, edx ;shl eax, 24 ;shr eax, 24 and eax,000000FFh ; mov [lineli], eax mov eax, edx ;shl eax, 8 ;shr eax, 24 and eax,00FF0000h shr eax, 16 mov [wayli], eax shr edx, 24 mov [L1i], edx ;CACHE2: mov eax, 80000006h cpuid mov eax, ecx ;and eax,000000FFh ; shl eax, 24 shr eax, 24 mov dword[linel2], eax mov eax, ecx shl eax, 16 shr eax, 28 cmp eax, 0010b je way2 cmp eax, 0100b je way4 cmp eax, 0110b je way8 cmp eax, 1000b je way16 jmp to_next way2: mov dword[wayl2], 2 jmp to_next way4: mov dword[wayl2], 4 jmp to_next way8: mov dword[wayl2], 8 jmp to_next way16: mov dword[wayl2], 16 jmp to_next to_next: shr ecx, 16 mov [L2],ecx cmp [f], $5 jz .fiv cmp [f], $6 jz .si cmp [f], $F jz fif .fiv: ; Family=5 cmp [m],$0 jz .A50 cmp [m],$1 jz .A51 cmp [m],$2 jz .A52 cmp [m],$3 jz .A53 cmp [m],$6 jz .A56 cmp [m],$7 jz .A57 cmp [m],$8 jz .A58 cmp [m],$9 jz .A59 cmp [m],$D jz .A5D .A50: mov [micron], 50 ; 0.35? Text 105,90,0x00000000,A50, A50len-A50 jmp MMXtest .A51: mov [micron], 35 Text 105,90,0x00000000,A51, A51len-A51 jmp MMXtest .A52: mov [micron], 35 Text 105,90,0x00000000,A52, A52len-A52 jmp MMXtest .A53: mov [micron], 35 Text 105,90,0x00000000,A53, A53len-A53 jmp MMXtest .A56: mov [micron], 30 Text 105,90,0x00000000,A56, A56len-A56 jmp MMXtest .A57: mov [micron], 25 Text 105,90,0x00000000,A57, A57len-A57 jmp MMXtest .A58: mov [micron], 25 Text 105,90,0x00000000,A58, A58len-A58 jmp MMXtest .A59: mov [micron], 25 Text 105,90,0x00000000,A59, A59len-A59 jmp MMXtest .A5D: mov [micron], 18 Text 105,90,0x00000000,A5D, A5Dlen-A5D jmp MMXtest .si: ; Family=6 cmp [m],$1 jz A1 cmp [m],$2 jz A2 cmp [m],$3 jz A3 cmp [m],$4 jz A4 cmp [m],$6 jz A6 cmp [m],$7 jz A7 cmp [m],$8 jz A8 cmp [m],$A jz AA A1: mov [micron], 25 Text 105,90,0x00000000,At1, At1len-At1 jmp MMXtest A2: mov [micron], 18 Text 105,90,0x00000000,At2, At2len-At2 jmp MMXtest A3: mov [micron], 18 Text 105,90,0x00000000,At3, At3len-At3 jmp MMXtest A4: mov [micron], 18 Text 105,90,0x00000000,At4, At4len-At4 jmp MMXtest A6: mov [micron], 18 Text 105,90,0x00000000,At6, At6len-At6 mov [FRS], 266 ;!!!!!! Number 320,110,0,3,dword [FRS],0x000000; MHz call newrating; !!!! Text 250,90,0x00000000,pr, prlen-pr Number 315,90,0,4,dword [rating],0x000000 jmp MMXtest A7: mov [micron], 13 Text 105,90,0x00000000,At7, At7len-At7 jmp MMXtest A8: mov [micron], 13 mov [FRS], 266 ;!!!!!! Number 320,110,0,3,dword [FRS],0x000000; MHz cmp [L2], 256 jl .App ; Applebred Text 105,90,0x00000000,At8, At8len-At8 call newrating;!!!! Text 250,90,0x00000000,pr, prlen-pr Number 315,90,0,4,dword [rating],0x000000 jmp MMXtest .App: Text 105,90,0x00000000,At8a, At8alen-At8a jmp MMXtest AA: mov [micron], 13 mov [FRS], 333; !!!! Text 250,90,0x00000000,pr, prlen-pr Number 320,110,0,3,dword [FRS],0x000000; MHz cmp [L2], 256 jl .Tho ; Thorton call newrating;!!!!! Text 105,90,0x00000000,Ata, Atalen-Ata Number 315,90,0,4,dword [rating],0x000000 jmp MMXtest .Tho: call newrating;!!!!! Text 105,90,0x00000000,Atat, Atatlen-Atat Number 315,90,0,4,dword [rating],0x000000 jmp MMXtest fif: ; AMD-64 Family=15 ;here is a need to rewrite detection of AMD F-th family according to "Revision Guide for ;AMD AthlonTM 64 and AMD OpteronTM Processors" 25759.pdf ; checking sse3 for new AMD's is needed cmp [m],$1 ; Dual-core Opteron jz .AF1 cmp [m],$3 ; Toledo 1024 0.09 // Manchester ||Windsor Dual Core not supported jz .AF3 cmp [m],$4 ;Athlon 64 Mobile Athlon 64 FX ClawHammer (1024) 0.13 jz .AF4 cmp [m],$5 ; Opteron Athlon 64 FX 0.13 (1024) jz .AF5 cmp [m],$7 ;Athlon 64 Athlon 64 FX Clawhammer(1024) 0.13 Sledgehammer(1024) 0.13 // SSE3+ SanDiego(1024) jz .AF7 cmp [m],$8 ; Athlon 64 Mobile Athlon 64 FX ClawHammer (1024) 0.13 jz .AF8 cmp [m],$B ; Athlon 64 jz .AFB cmp [m],$C ;Athlon 64 Newcastle(512) 0.13 Sempron> Paris (256) 0.13 |SSE3+ Sempron > Palermo FC0 0.09 // (Venice) jz .AFC cmp [m],$E ; Athlon 64 // jz .AFE cmp [m],$F ; Athlon 64 Winchester(512) |SSE3+ SanDiego(1024) Venice (512) Palermo (256) 0.09 jz .AFF jmp next_generation .AF1: mov [micron], 09 ;? Text 105,90,0x00000000,AF1, AF1len-AF1 jmp MMXtest .AF3: mov [micron], 09 Text 105,90,0x00000000,AF3, AF3len-AF3 jmp MMXtest .AF4: mov [micron], 13 Text 105,90,0x00000000,AF4, AF4len-AF4 jmp MMXtest .AF5: mov [micron], 13 Text 105,90,0x00000000,AF5, AF5len-AF5 jmp MMXtest .AF7: mov [micron], 13 Text 105,90,0x00000000,AF5, AF5len-AF5 jmp MMXtest .AF8: mov [micron], 13 Text 105,90,0x00000000,AF4, AF5len-AF4 jmp MMXtest .AFB: mov [micron], 13 Text 105,90,0x00000000,AF4, AF4len-AF4 jmp MMXtest .AFC: cmp [L2], 512 je .AFCn cmp [sse3sup], 1 je .AFCnpal .AFCnpar: ; paris mov [micron], 13 Text 105,90,0x00000000,AFCs, AFCslen-AFCs jmp MMXtest .AFCnpal: ; palermo mov [micron], 9 Text 105,90,0x00000000,AFCsp, AFCsplen-AFCsp jmp MMXtest .AFCn: ;newcastle mov [micron], 13 Text 105,90,0x00000000,AFC, AFClen-AFC jmp MMXtest .AFE: ; error in cpu jmp .AFC .AFF: cmp [sse3sup], 1 je .AFFsse .win: mov [micron], 9 ; winchester jmp MMXtest .AFFsse: mov [micron], 9 cmp [L2], 1024 jz .AFs cmp [L2], 512 jz .AFd cmp [L2], 256 jz .AFp .AFs: Text 105,90,0x00000000,AFS, AFSlen-AFS jmp MMXtest .AFd: Text 105,90,0x00000000,AFV, AFVlen-AFV jmp MMXtest .AFp: Text 105,90,0x00000000,AFCsp, AFCsplen-AFCsp jmp MMXtest ;----------------------------------------------- Intel: Text 80,90,0x00000000,Inteln, Intelnlen-Inteln mov esi, intel call load_gif PutImage 130,127,201,49,img_area+8 ; place size det: cmp [f], $5 jz .five cmp [f], $6 jz .six cmp [f], $7 jz .sev cmp [f], $F jz .fift .five: ;Family=5 Text 20, 210,0x00000000,cache, cachelen-cache cmp [m],$0 jz .I0 cmp [m],$1 jz .I1 cmp [m],$2 jz .I2 cmp [m],$3 jz .I3 cmp [m],$4 jz .I4 cmp [m],$7 jz .I7 cmp [m],$8 jz .I8 .I0: Text 115,90,0x00000000,P50, P50len-P50 mov [L1d], 8 mov [L1i], 8 mov [L2], 256 mov [micron], 80 jmp MMXtest .I1: Text 115,90,0x00000000,P5, P5len-P5 mov [L1d], 8 mov [L1i], 8 mov [L2], 256 mov [micron], 50 jmp MMXtest .I2: Text 115,90,0x00000000,P54C, P54Clen-P54C mov [L1d], 8 mov [L1i], 8 mov [L2], 256 mov [micron], 50 jmp MMXtest .I3: Text 115,90,0x00000000,P54T, P54Tlen-P54T mov [L1d], 8 mov [L1i], 8 mov [L2], 256 mov [micron], 50 jmp MMXtest .I4: Text 115,90,0x00000000,P55C, P55Clen-P55C mov [L1d], 8 mov [L1i], 8 mov [L2], 256 mov [micron], 35 jmp MMXtest .I7: Text 115,90,0x00000000,P54C, P54Clen-P54C mov [L1d], 8 mov [L1i], 8 mov [L2], 256 mov [micron], 35 jmp MMXtest .I8: Text 115,90,0x00000000,P55C, P55Clen-P55C mov [L1d], 16 mov [L1i], 16 mov [L2], 256 mov [micron], 35 jmp MMXtest .six: ;Family=6 Text 20, 210,0x00000000,cache, cachelen-cache cmp [m],$0 jz .I60 cmp [m],$1 jz .I61 cmp [m],$3 jz .I63 cmp [m],$5 jz .I65 cmp [m],$6 jz .I66 cmp [m],$7 jz .I67 cmp [m],$8 jz .I68 cmp [m],$9 jz .I69 cmp [m],$A jz .I6A cmp [m],$B jz .I6B cmp [m],$D jz .I6D cmp [m],$E jz .I6E cmp [m],$F jz .I6F .I60: mov [micron], 50 Text 115,90,0x00000000,P60, P60len-P60 jmp MMXtest .I61: mov [micron], 35 Text 115,90,0x00000000,P61, P61len-P61 jmp MMXtest .I63: mov [micron], 28 Text 115,90,0x00000000,P63, P63len-P63 jmp MMXtest .I65: mov [micron], 25 cmp [L2], 0 jne .pp65 ; Pentium Text 115,90,0x00000000,P65c, P65clen-P65c jmp MMXtest .pp65: Text 115,90,0x00000000,P65, P65len-P65 jmp MMXtest .I66: mov [micron], 25 Text 115,90,0x00000000,P66, P66len-P66 jmp MMXtest .I67: mov [micron], 25 Text 115,90,0x00000000,P67, P67len-P67 jmp MMXtest .I68: mov [micron], 18 cmp [L2], 128 jne .pp68 ; Pentium Text 115,90,0x00000000,P68c, P68clen-P68c jmp MMXtest .pp68: Text 115,90,0x00000000,P68, P68len-P68 jmp MMXtest .I69: mov [micron], 13 Text 115,90,0x00000000,P69 , P69len-P69 jmp MMXtest .I6A: mov [micron], 18 Text 115,90,0x00000000,P6A, P6Alen-P6A jmp MMXtest .I6B: mov [micron], 13 cmp [L2], 256 jne .pp6B ; Pentium Text 115,90,0x00000000,P6Bc, P6Bclen-P6Bc jmp MMXtest .pp6B: Text 115,90,0x00000000,P6B, P6Blen-P6B jmp MMXtest .I6D: mov [micron], 9 Text 115,90,0x00000000,P6D, P6Dlen-P6D jmp MMXtest .I6E: mov [micron], 6 Text 115,90,0x00000000,P6E, P6Elen-P6E jmp MMXtest .I6F: mov [micron], 6 Text 115,90,0x00000000,P6F, P6Flen-P6F jmp MMXtest ;06Ex - Pentium M Yonah 0.065 ;06Fx - Pentium D Conroe 0.065, Xeon Woodcrest, Celeron D AllenDale, Core 2 Kentsfield .sev: ;Family=7 .IS0: Text 20, 210,0x00000000,cache, cachelen-cache ;? mov [micron], 18 Text 115,90,0x00000000,PS0, PS0len-PS0 jmp MMXtest .fift: ;Family=15 Text 20, 210,0x00000000,cacheP4, cacheP4len-cacheP4 cmp [m],$0 jz .IF0 cmp [m],$1 jz .IF1 cmp [m],$2 jz .IF2 cmp [m],$3 jz .IF3 cmp [m],$4 jz .IF3 ;identical to F3xh cmp [m],$5 jz .IF5 cmp [m],$6 jz .IF6 jmp next_generation .IF0: mov [micron], 18 cmp [L2], 128 jne .ppF0 ; Pentium Text 115,90,0x00000000,PF0c, PF0clen-PF0c jmp MMXtest .ppF0: Text 115,90,0x00000000,PF0, PF0len-PF0 jmp MMXtest .IF1: mov [micron], 18 cmp [L2], 128 je .IF0;jne.ppF1 ; Pentium ; mov eax,dword 0x00000004 ; mov ebx,115*65536+80 ; mov ecx,dword 0x00000000 ; mov edx,PF0c ; mov esi,PF0clen-PF0c ; int 0x40 ;jmp MMXtest ;.ppF1: Text 115,90,0x00000000,PF0, PF0len-PF0 jmp MMXtest .IF2: mov [micron], 13 cmp [L2], 128 jne .ppF2 ; Pentium Text 115,90,0x00000000,PF2c, PF2clen-PF2c jmp MMXtest .ppF2: Text 115,90,0x00000000,PF2, PF2len-PF2 jmp MMXtest .IF3: mov [micron], 09 cmp [L2], 256 jne .ppF3 ; Pentium Text 115,90,0x00000000,PF3c, PF3clen-PF3c jmp MMXtest .ppF3: Text 115,90,0x00000000,PF3, PF3len-PF3 jmp MMXtest .IF5: mov [micron], 09 cmp [L2], 512 jae .ppF5 ; Pentium Text 115,90,0x00000000,PF5c, PF5clen-PF5c jmp MMXtest .ppF5: Text 115,90,0x00000000,PF5, PF5len-PF5 jmp MMXtest .IF6: mov [micron], 06 ; 065 cmp [L2], 512 ja .ppF6 ; Pentium Text 115,90,0x00000000,PF6c, PF6clen-PF6c jmp MMXtest .ppF6: Text 115,90,0x00000000,PF6, PF6len-PF6 jmp MMXtest next_generation: Text 115,90,0x00000000,NG, NGlen-NG jmp MMXtest ;---------------------------------- Cyrix: Text 20, 210,0x00000000,cache, cachelen-cache mov esi, cyrix call load_gif PutImage 130,127,201,49,img_area+8 ; place size cmp [f], $5 jz .fivv cmp [f], $6 jz .sixx .fivv: ;Family=5 cmp [m],$2 jz .C52 cmp [m],$4 jz .C54 .C52: mov [micron], 50 ;35? mov [L1i], 8 mov [L1d], 8 mov [L2], 512 Text 80,90,0x00000000,Cyrixn, Cyrixnlen-Cyrixn Text 115,90,0x00000000,C52, C52len-C52 jmp MMXtest .C54: mov [micron], 50 mov [L1i], 8 mov [L1d], 8 mov [L2], 512 Text 80,90,0x00000000,Cyrixn, Cyrixnlen-Cyrixn Text 115,90,0x00000000,C54, C54len-C54 jmp MMXtest .sixx: ;Family=6 cmp [m],$0 jz .C60 cmp [m],$5 jz .C65 .C60: mov [micron], 25 mov [L1i], 32 mov [L1d], 32 mov [L2], 512 Text 80,90,0x00000000,Cyrixn, Cyrixnlen-Cyrixn Text 115,90,0x00000000,C60, C60len-C60 jmp MMXtest .C65: mov [micron], 25 ;35? mov [L1i], 32 mov [L1d], 32 mov [L2], 512 Text 80,90,0x00000000,Centaurn, Centaurnlen-Centaurn Text 105,90,0x00000000,C65, C65len-C65 jmp MMXtest ;--------------------- Centaur: Text 20, 210,0x00000000,cache, cachelen-cache ;CACHE1: mov eax, 80000005h cpuid shr ecx, 24 mov [L1d], ecx shr edx, 24 mov [L1i], edx ; cache detection routine ;CACHE1: mov eax, 80000005h cpuid mov eax, ecx and eax,000000FFh ; mov [lineld], eax mov eax, ecx and eax,00FF0000h shr eax, 16 mov [wayld], eax shr ecx, 24 mov [L1d], ecx mov eax, edx and eax,000000FFh ; mov [lineli], eax mov eax, edx and eax,00FF0000h shr eax, 16 mov [wayli], eax shr edx, 24 mov [L1i], edx ;CACHE2: mov eax, 80000006h cpuid cmp [f], $6 jz vn jmp vl2old ; if not then old identification vn: cmp [m],$9 jl vl2old ; else new mov eax, ecx shl eax, 24 shr eax, 24 mov dword[linel2], eax mov eax, ecx shl eax, 16 shr eax, 28 mov dword[wayl2], eax shr ecx, 16 ; it is 16 bits now mov [L2],ecx vl2old: mov eax, ecx shl eax, 24 shr eax, 24 mov dword[linel2], eax mov eax, ecx shl eax, 8 shr eax, 24 mov dword[wayl2], eax shr ecx, 24 ; it was 8 bits earlier mov [L2],ecx cmp [f], $5 jz fivC cmp [f], $6 jz sixC fivC: ;Family=5 mov esi, idt call load_gif PutImage 130,127,201,49,img_area+8 ; place size Text 80,90,0x00000000,IDTn, IDTnlen-IDTn cmp [m],$4 jz .V54 cmp [m],$8 jz .V58 cmp [m],$9 jz .V59 .V54: mov [micron], 35 Text 105,90,0x00000000,V54, V54len-V54 jmp MMXtest .V58: mov [micron], 25 Text 105,90,0x00000000,V58, V58len-V58 jmp MMXtest .V59: mov [micron], 25 Text 105,90,0x00000000,V59, V59len-V59 jmp MMXtest sixC: ;Family=6 mov esi, via call load_gif PutImage 130,127,201,49,img_area+8 ; place size Text 80,90,0x00000000,Centaurn, Centaurnlen-Centaurn cmp [m],$6 jz .V66 cmp [m],$7 jz .V67 cmp [m],$8 jz .V68 cmp [m],$9 jz .V69 cmp [m],$A jz .V6A .V66: mov [micron], 18 ; 25? Text 105,90,0x00000000,V66, V66len-V66 jmp MMXtest .V67: mov [micron], 15 Text 105,90,0x00000000,V67, V67len-V67 jmp MMXtest .V68: mov [micron], 13 Text 105,90,0x00000000,V68, V68len-V68 jmp MMXtest .V69: mov [micron], 13 Text 105,90,0x00000000,V69, V69len-V69 jmp MMXtest .V6A: mov [micron], 9 Text 105,90,0x00000000,VA, VAlen-VA jmp MMXtest ;----------- Transmeta: Text 20, 210,0x00000000,cache, cachelen-cache Text 80,90,0x00000000,Tranmsmetan, Tranmsmetanlen-Tranmsmetan mov esi, transmeta call load_gif PutImage 130,127,201,49,img_area+8 ; place size ; cache detection routine - it is the same as for AMD (almost) ;CACHE1: mov eax, 80000005h cpuid mov eax, ecx and eax,000000FFh ; mov [lineld], eax mov eax, ecx and eax,00FF0000h shr eax, 16 mov [wayld], eax shr ecx, 24 mov [L1d], ecx mov eax, edx and eax,000000FFh ; mov [lineli], eax mov eax, edx and eax,00FF0000h shr eax, 16 mov [wayli], eax shr edx, 24 mov [L1i], edx ;CACHE2: mov eax, 80000006h cpuid mov eax, ecx shl eax, 24 shr eax, 24 mov dword[linel2], eax mov eax, ecx shl eax, 16 shr eax, 28 mov dword[wayl2], eax shr ecx, 16 mov [L2],ecx cmp [f], $5 jz .fivt cmp [f], $F jz .fift .fivt: ; Family=5 mov [micron], 13 ; ? Text 145,90,0x00000000,T5, T5len-T5 jmp MMXtest .fift: ; Family=F mov [micron], 13 ; Text 145,90,0x00000000,TF, TFlen-TF jmp MMXtest ;---- MMXtest: ; MMX test and Brand ID decoding call decodebrand ; get Brand ID call decode_standard_features call decode_extended_features xor eax,eax inc eax cpuid HTTtest: test edx, $10000000; ;Test bit 28 jnz .EL ;HTT technology is supported jz .ELN .EL: and ebx,00FF0000h ; numbers of logical processors shr ebx,16 ; shift it to the correct position cmp ebx, 1 ; mov [number_of_log_cpus], ebx je .ELN ; HHT not enabled (Celeron) mov dword [HTTn+9], $736579 mov dword [HTT+ 6], $736579 jmp TEXTOUT .ELN: mov dword [HTTn+ 9], $6F6E mov dword [HTT+ 6], $6F6E jmp TEXTOUT TEXTOUT: Text 20,130,0x00000000,fam, famlen-fam Text 20,150,0x00000000,mode, modelen-mode Text 20,170,0x00000000,step, steplen-step ;--------L1 L2 Number 80,190,0,3,dword [L1d],0x000000; Number 80,210,0,3,dword [L1i],0x000000; Number 46,230,0,4,dword[L2],0x000000; Number 40,250,0,5,dword[L3],0x000000; ;-----------Features Number 263,70,0,2,dword [micron],0x000000 ; micron Text 280,310,0x00000000,HTT, HTTlen-HTT Text 280,330,0x00000000,sse3, sse3len-sse3 Text 20,90,0x00000000,name, namelen-name Text 20,310,0x00000000,MMXs, MMXslen-MMXs Text 20,330,0x00000000,SSE, SSElen-SSE Text 100,330,0x00000000,SSE2, SSE2len-SSE2 Number 145,190,0,2,dword [wayld],0x000000 Number 223,190,0,2,dword [lineld],0x000000 Number 145,210,0,2,dword [wayli],0x000000 Number 223,210,0,2,dword [lineli],0x000000 Number 145,230,0,2,dword [wayl2],0x000000 Number 223,230,0,2,dword [linel2],0x000000 Number 145,250,0,2,dword [wayl3],0x000000 Number 223,250,0,2,dword [linel3],0x000000 jmp TEST3DNOW ;------------------- TEST3DNOW: cmp [smallvendor], 'ntel' je .NOEXTENDED jne .t .t: mov eax, $80000001 ;// Setup extended function 8000_0001h cpuid test edx, $80000000 ;// Test bit 31 jnz .XIT .NOEXTENDED: ;// 3DNow! technology is supported mov dword [now+ 9], $6F6E jmp TEST3DNOWP .XIT: mov dword [now+ 9], $736579 jmp TEST3DNOWP TEST3DNOWP: cmp [smallvendor], 'ntel' je .NOEXTENDEDP .tp: mov eax, $80000001 ;// Setup extended function 8000_0001h cpuid test edx, $40000000 ;// Test bit 30 jnz .XITP ;// 3DNow! technology is supported .NOEXTENDEDP: mov dword [nowp+ 9], $6F6E jmp TESTMMXP .XITP: mov dword [nowp+ 9], $736579 jmp TESTMMXP TESTMMXP: mov eax,$80000000 cpuid test eax, 80000000h jna NOEXTENDEDM ;cmp eax, $80000000 ;// Is 800_0001h supported? ;jz .NOEXTENDEDM ;// If not, 3DNow! technology is not supported mov eax, $80000001 ;// Setup extended function 8000_0001h cpuid cmp [smallvendor], 'tead' jne noCyr Cyrmx: test edx, $01000000 ;// Test bit 24 jnz XITM ;// 3DNow! technology is supported jz NOEXTENDEDM noCyr: test edx, $00400000 ;// Test bit 22 jnz XITM ;// 3DNow! technology is supported ;jz .NOEXTENDEDM NOEXTENDEDM: mov dword [mmxp+ 7], $6F6E mov dword [MMXPi+ 8], $6F6E jmp text3d XITM: mov dword [mmxp+ 7], $736579 mov dword [MMXPi+ 8], $736579 jmp text3d text3d: Text 180,310,0x00000000,now, nowlen-now Text 180,330,0x00000000,nowp, nowplen-nowp Text 100,310,0x00000000,mmxp, mmxplen-mmxp jmp still ;-------------------------- NO_CPUID: Text 20,70,0x00000000,oblom, oblomlen-oblom jmp FREEZE FREEZE: nop jmp FREEZE ; maybe we should close application or just made some Warning and jump to still: ;---------------- still: ; затем переходим в цикл ожидания событий event_wait: ;================_RAM_============== Number 205,360,0,4,dword [ram_size_a],0xFFFFFF mov eax, 18 mov ebx, 16 int 0x40 shr eax, 10 mov [ram_size_a], eax mov eax, 18 mov ebx, 17 int 0x40 shr eax, 10 mov [ram_size_t], eax Text 120,360,0x00000000,ram, ramlen-ram Number 205,360,0,4,dword [ram_size_a],0x000000 Number 275,360,0,4,dword [ram_size_t],0x000000 Text 305,360,0x00000000,mb, mblen-mb ;============================== mov ebx,50 ; ждемс 1 сек mov eax,23 ; функция 23: ожидание события int 0x40 ; mov eax,10 ; int 0x40 ; cmp eax,1 ; je red ; redraw cmp eax,2 ; je key ; key cmp eax,3 ; je button ; button jmp still ; key: ; mov eax,2 ;   int 0x40 ; jmp still ; button: ; mov eax,17 ; int 0x40 ; cmp ah,1 ; = 1 ? je close ; close cmp ah,2 ; = 2 ? je thread_start ; ; cmp ah,3 ; = 3 ? je vybor ; vybor jne noclose jmp event_wait vybor: Number 315,90,0,4,dword [rating],0xFFFFFF ; Number 320,110,0,3,dword [FRS],0xFFFFFF; MHz cmp [FRS], 266 jz .s1 cmp [FRS], 333 jz .s2 cmp [FRS], 400 jz .s3 .s1: mov [FRS], 333 call newrating Number 315,90,0,4,dword [rating],0x000000 Number 320,110,0,3,dword [FRS],0x000000; MHz jmp still .s2: mov [FRS], 400 call newrating Number 315,90,0,4,dword [rating],0x000000 Number 320,110,0,3,dword [FRS],0x000000; MHz jmp still .s3: mov [FRS], 266 call newrating Number 315,90,0,4,dword [rating],0x000000 Number 320,110,0,3,dword [FRS],0x000000; MHz jmp still noclose: jmp still close: mov eax,-1 int 0x40 ;**************************** THREAD-SECOND WINDOW thread_start: cmp [num_win2],0 jne still ;================================================RSA test call init_test ; start RSA code call module_test jmp somewhere module_test: ;test rsa coding speed ;length of module - 256 bit mov eax,26 mov ebx,9 int 0x40 add eax,100 ;test lasts 1 second. push eax .loop: mov ecx,4 ;do 4 iterations push ecx ;this reduces number of calls int 0x40. .loop1: call rsa_test ;this procedure change all registers dec dword [esp] jnz .loop1 pop ecx mov eax,26 mov ebx,9 int 0x40 cmp eax,dword [esp] ;Is time changed? jl .loop pop eax shr dword [iter],4 ;[iter] - speed in Kb/sec. (every iteration codes 64 bytes) ret somewhere: ;====================================================================== CreateTread window_2,thread2_esp jmp still window_2: mov [num_win2],1 call draw_window_2 still_2: mov eax,10 int 0x40 cmp eax,1 je window_2 ; window_2 cmp eax,2 ; je key_2 ; key_2 cmp eax,3 ; je button_2 ; button_2 jmp still_2 ; key_2: ; mov eax,2 ;   2 int 0x40 ; jmp still_2 ; button_2: ; mov eax,17 ; 17 int 0x40 ; cmp ah,1 ; = 1 ? jne noclose_2 ; noclose mov [num_win2],0 ; or eax,-1 ; int 0x40 noclose_2: jmp still_2 ; draw_window_2: mov eax,12 ; function 12:tell os about windowdraw mov ebx,1h ; 1, start of draw int 0x40 Window 250,250,419,390, 0x03FFFFFF, 0x805080d0, 0x005080d0 ; place size Text 8, 8,0x20000000, standard, standardlen-standard ;ddeeff Text 20, 30,0x00000000, STDCA, STDCAlen-STDCA Text 220, 30,0x00000000, EXTCA, EXTCAlen-EXTCA Number 140,30,1*256,8,dword [stdc],0x000000 Number 340,30,1*256,8,dword [extc],0x000000 Text 20, 50,0x00000000, FPU, FPUlen-FPU Text 120, 50,0x00000000, VME, VMElen-VME Text 220, 50,0x00000000, DE, DElen-DE Text 320, 50,0x00000000, PSE, PSElen-PSE Text 20, 70,0x00000000,TSC, TSClen-TSC Text 120, 70,0x00000000,MSR, MSRlen-MSR Text 220,70,0x00000000,PAE, PAElen-PAE Text 320,70,0x00000000,MCE, MCElen-MCE Text 20,90,0x00000000,CX8, CX8len-CX8 Text 120,90,0x00000000,APIC, APIClen-APIC Text 220,90,0x00000000,Res, Reslen-Res Text 320,90,0x00000000,SEP, SEPlen-SEP Text 20,110,0x00000000,MTRR, MTRRlen-MTRR Text 120,110,0x00000000,PGE, PGElen-PGE Text 220,110,0x00000000,MCA, MCAlen-MCA Text 320,110,0x00000000,CMOV, CMOVlen-CMOV Text 20,130,0x00000000,PAT, PATlen-PAT Text 120,130,0x00000000,PSE36, PSE36len-PSE36 Text 220,130,0x00000000,PSNUM, PSNUMlen-PSNUM Text 320,130,0x00000000,CLFLUSHn, CLFLUSHnlen-CLFLUSHn Text 20,150,0x00000000,Res, Reslen-Res Text 120,150,0x00000000,DTS, DTSlen-DTS Text 220,150,0x00000000,ACPI, ACPIlen-ACPI Text 320,150,0x00000000,MMX, MMXlen-MMX Text 20,170,0x00000000,FXSR, FXSRlen-FXSR Text 120,170,0x00000000,SSE, SSElen-SSE Text 220,170,0x00000000,SSE2, SSE2len-SSE2 Text 320,170,0x00000000,SSn, SSnlen-SSn Text 20,190,0x00000000,HTT, HTTnlen-HTTn Text 120,190,0x00000000,TM, TMlen-TM Text 220,190,0x00000000,IA64, IA64len-IA64 Text 320,190,0x00000000,PBE, PBElen-PBE ;--------------- DrawLine 5, 415, 205,205,0x8080FF ;10 mov eax,$80000000 cpuid ;mov eax, $03020101  for test of reaction test eax, 80000000h jnz goooddd baaadd: Text 100,255,0x00000000,NEF, NEFlen-NEF jmp too goooddd: Text 20,215,0x00000000,SS3, SS3len-SS3 Text 20,235,0x00000000,MON, MONlen-MON Text 20,255,0x00000000,DS_CPL, DS_CPLlen-DS_CPL Text 20,275,0x00000000,EST, ESTlen-EST Text 20,295,0x00000000,TM2, TM2len-TM2 Text 20,315,0x00000000,VMX, VMXlen-VMX Text 20,335,0x00000000,SVM, SVMlen-SVM Text 120,215,0x00000000,CNXT_ID, CNXT_IDlen-CNXT_ID Text 120,235,0x00000000,CX16, CX16len-CX16 Text 120,255,0x00000000,ETPRD, ETPRDlen-ETPRD Text 120,275,0x00000000,SYS, SYSlen-SYS Text 120,295,0x00000000,LAF, LAFlen-LAF Text 120,315,0x00000000,SSSE3, SSSE3len-SSSE3 Text 120,335,0x00000000,MCR8, MCR8len-MCR8 Text 220,215,0x00000000,MP, MPlen-MP Text 220,235,0x00000000,NX, NXlen-NX Text 220,255,0x00000000,MMXPi, MMXPilen-MMXPi Text 220,275,0x00000000,MMXn, MMXnlen-MMXn Text 220,295,0x00000000,FXSRn, FXSRnlen-FXSRn Text 220,315,0x00000000,DCA,DCAlen-DCA Text 320,215,0x00000000,FFXSR, FFXSRlen-FFXSR Text 320,235,0x00000000,TSCP, TSCPlen-TSCP Text 320,255,0x00000000,LM, LMlen-LM Text 320,275,0x00000000,DNo, DNolen-DNo Text 320,295,0x00000000,DN, DNlen-DN Text 320,315,0x00000000,CMPL, CMPLlen-CMPL too: DrawLine 5, 415, 355,355,0x8080FF ;10 Text 20,370,0x00000000,speed, speedlen-speed Text 135,370,0x00000000,kbpersec, kbperseclen-kbpersec Number 100,370,0,5,dword [iter],0x000000; RSA test results mov eax,12 mov ebx,2h int 0x40 ret num_win2 db 0 ; ******* main window ******* draw_window: mov eax,12 mov ebx,1h int 0x40 Window 150,150,349,385, 0x03FFFFFF, 0x805080d0, 0x005080d0 ; place size Button 20,350,92,23,2,0x03FFFFFF ; button "press for more" mov esi, knopka mov edi, img_area2 call load_gif2 PutImage 20,350,93,24,img_area2+8 ; image "press for more" ; place size Text 8,8,0x20000000,zag,zaglen-zag ; application header mov eax,12 mov ebx,2h int 0x40 Text 135,290,0x00000000,instruct, instructlen-instruct DrawLine 15, 335, 345,345,0x8080FF DrawLine 335, 335, 295,345,0x8080FF DrawLine 15, 15, 295,345,0x8080FF DrawLine 15, 130, 295,295,0x8080FF DrawLine 235, 335, 295,295,0x8080FF cmp dword[smallvendor], 'cAMD' jne cont cmp [f], $6 jne cont cmp [f], $6 jl cont Button 245,105,69,15,3,0x030000FF ; button for rating Text 250,110,0x00FFFFFF,FR, FRlen-FR call newrating; !!!! cont: Text 20,70,0x00000000,tsum, tsumlen-tsum ; Text 20,110,0x00000000,cpuname, cpunamelen-cpuname; Text 260,270,0x00000000,typen, typenlen-typen; Text 180, 70,0x00000000,tech, techlen-tech; Number 87,70,0,4,dword [total],0x000000; MHz Number 115,70,0,2,dword [sot],0x000000; KHz Text 20,190,0x00000000,cache2, cache2len-cache2 Text 20,230,0x00000000,cache3, cache3len-cache3 Text 20,250,0x00000000,cache4, cache4len-cache4 Number 80,130,1*256,1,dword [f],0x000000 ; Number 80,150,1*256,1,dword [m],0x000000; Number 80,170,1*256,1,dword [s],0x000000; Number 115,130,1*256,2,dword [ef],0x000000 ; Number 115,150,1*256,2,dword [em],0x000000; Text 20,50,0x00000000,multil, multillen-multil Number 90,50,0,2,dword [multb],0x000000; Number 110,50,0,1,dword [multa],0x000000; Text 180,50,0x00000000,freql, freqllen-freql Number 264,50,0,4,dword [freqbb],0x000000; Number 294,50,0,2,dword [freqll],0x000000; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Text 120,300,0x00000000,logcpus, logcpuslen-logcpus ;Number 255,300,0,2,dword [number_of_log_cpus],0x000000 Text 20,30,0x00000000,stm, stmlen-stm ; Fix for deleting leading whitespaces ; in Intel P4's internal name ; by Madis Calme ; 23.12.2004 ver. 0.81 cld mov edi,myname mov al,20h or ecx,-1 repe scasb dec edi mov esi,mynamelen sub esi,edi Text 110, 30, 0x00000000, edi, esi ; Text 110,40,0x00000000,myname, mynamelen-myname ;- Text 20,270,0x00000000,brandid, brandidlen-brandid ret ; load_gif: mov edi, img_area load_gif2: gif2img esi,edi ret ; DATA AREA zag: db 'CPUID 2.17 by Sergey Kuzmin and the KolibriOS team' zaglen: tsum: db 'Frequency: . MHz' tsumlen: ost dd ? sot dd ? f dd ? m dd ? s dd ? t dd ? ef dd ? em dd ? multiplier dd ? multa dd ? multb dd ? smallvendor dd ? L1d dd ? L1i dd ? L2 dd ? L3 dd ? total dd 0x0 total1 dd 0x0 rating dd 0x0 rat dd 0x0 ; micron dd ? sse3sup dd ? brand dd ? ram_size_a dd ? ram_size_t dd ? stdc dd ? extc dd ? FRS dd ? freqsel db ? temp dd ? freqbb dd ? freqll dd ? wayli dd ? lineli dd ? wayld dd ? lineld dd ? wayl2 dd ? linel2 dd ? wayl3 dd ? linel3 dd ? ;number_of_log_cpus dd ? che db ? ; numbers of calls for Intel caches detection ram: db 'Available RAM: out of' ramlen: NEF: db 'EXTENDED FEATURES ARE NOT AVAILABLE' NEFlen: mb : db 'MB' mblen: ;logcpus : ;db 'Number of logical CPU:' ;logcpuslen: speed : db 'PERFORMANCE:' speedlen: kbpersec: db 'KB/SEC' kbperseclen: instruct: db 'Instruction sets' instructlen: standard: db 'Standard and Extended features plus Performance test' standardlen: FR: db 'Choose FSB:' FRlen: STDCA: db 'Highest STD call is ' STDCAlen: EXTCA: db 'Highest EXT call is h' EXTCAlen: brandid: db 'Brand:' brandidlen: oblom: db 'SORRY, CPUID IS NOT AVAILABLE' oblomlen: other: db 'SORRY, THIS VENDOR IS NOT SUPPORTED YET' otherlen: cpuname: db 'CPU VENDOR: ' cpunamelen: fam: db 'FAMILY: std ext' famlen: mode: db 'MODEL: std ext' modelen: step: db 'STEPPING:' steplen: cache2: db 'L1(data): KB -way set -byte line size' cache2len: cache: db 'L1(inst): KB -way set -byte line size' cachelen: cache3: db 'L2: KB -way set -byte line size' cache3len: cache4: db 'L3: KB -way set -byte line size' cache4len: cacheP4: db 'L1(inst): Kuops -way set -byte line size' cacheP4len: tech: db 'Technology: 0. micron ' techlen: typen: db 'Type:' typenlen: pr: db 'P-rating:' prlen: multil: db 'Multiplier: .' multillen: freql: db 'System clock: . MHz' freqllen: name: db 'CODENAME:' namelen: AMDn: db 'AMD' AMDnlen: Inteln: db 'Intel' Intelnlen: Cyrixn: db 'Cyrix' Cyrixnlen: IDTn: db 'IDT/Centaur' IDTnlen: Centaurn: db 'VIA' Centaurnlen: Tranmsmetan: db 'Transmeta' Tranmsmetanlen: MMXs: db 'MMX: ' MMXslen: mmxp: db 'MMX+: ' mmxplen: HTT: db 'HTT: ' HTTlen: HTTn: db 'HTT: ' HTTnlen: sse3: db 'SSE3: ' sse3len: now: db '3DNOW!: ' nowlen: nowp: db '3DNOW!+: ' nowplen: ;-Type t1: db 'OEM' t1len: t2: db 'Overdrive' t2len: t3: db 'Dual' t3len: t4: db 'Unknown' t4len: ;----------Intel P50: db 'P5 A-step' P50len: P5: db 'P5' P5len: P54T: db 'P24T Overdrive' P54Tlen: P54C: db 'P54C' P54Clen: P55C: db 'P55C (with MMX)' P55Clen: ; --- P60: db 'Pentium Pro A-step' P60len: P61: db 'Pentium Pro' P61len: P63: db 'Pentium II (Klamath)' P63len: P65: db 'Pentium II (Deschutes)' P65len: P66: db 'Celeron (Medocino)' P66len: P67: db 'Pentium III (Katmai)' P67len: P68: db 'Pentium III (Coppermine)' P68len: P69: db 'Pentium M (Banias)' P69len: P6A: db 'Pentium III Xeon (Cascades)' P6Alen: P6B: db 'Pentium III (Tualatin)' P6Blen: P6D: db 'Pentium M (Dothan)' P6Dlen: P6E: db 'Pentium M (Yonah)/ Core' P6Elen: P6F: db 'Pentium D (Conroe)/ Core 2 (Kentsfield)' P6Flen: ;--- PS0: db 'Itanium (IA-64)' PS0len: ;------------ PF0: db 'Pentium 4 (Willamete)' PF0len: PF2: db 'Pentium 4 (Northwood)' PF2len: PF3: db 'Pentium 4 (Prescott)' PF3len: PF5: db 'Pentium 4 (Tejas)' PF5len: PF6: db 'Pentium 4 (Presler)' PF6len: ;----------------Intel Celerons P65c: db 'Celeron (Covington)' P65clen: P68c: db 'Celeron (Coppermine)' P68clen: P6Bc: db 'Celeron (Tualatin)' P6Bclen: PF0c: db 'Celeron (Willamete)' PF0clen: PF2c: db 'Celeron (Northwood)' PF2clen: PF3c: db 'Celeron (Prescott)' PF3clen: PF5c: db 'Celeron D (Texas)' PF5clen: PF6c: db 'Celeron D (Presler)' PF6clen: ;---------AMD A50: db 'K5 (PR75, PR90, PR100)' A50len: A51: db '5k86 (PR120, PR133)' A51len: A52: db '5k86 (PR166)' A52len: A53: db '5k86 (PR200)' A53len: A56: db 'K6' A56len: A57: db 'K6' A57len: A58: db 'K6-2' A58len: A59: db 'K6-III' A59len: A5D: db 'K6-2+ or K6-III+' A5Dlen: ;------------------- At1: db 'Athlon' At1len: At2: db 'Athlon' At2len: At3: db 'Duron (Spitfire)' At3len: At4: db 'Athlon (Thunderbird)' At4len: At6: db 'AthlonXP (Palomino)' At6len: At7: db 'Duron (Morgan)' At7len: At8: db 'AthlonXP (Thoroughbred)' At8len: At8a: db 'Duron (Applebred)' At8alen: Ata: db 'AthlonXP (Barton)' Atalen: Atat: db 'AthlonXP (Thorton)' Atatlen: ;------------------- AF1: db 'Dual-core Opteron' AF1len: AF3: db 'Athlon 64 (Toledo)' AF3len: AF4: db 'Athlon 64 (ClawHammer)' AF4len: AF5: db 'Opteron/Athlon 64 FX (SledgeHammer)' AF5len: AFC: db 'Athlon 64 (Newcastle)' AFClen: AFF: db 'Athlon 64 (Winchester)' AFFlen: AFS: db 'Athlon 64 (San Diego)' AFSlen: AFV: db 'Athlon 64 (Venice)' AFVlen: AFCs: db 'Sempron (Paris)' AFCslen: AFCsp: db 'Sempron (Palermo)' AFCsplen: ;---------Cyrix C52: db '6x86 M1' C52len: C54: db 'MediaGX' C54len: C60: db '6x86MX M2' C60len: C65: db 'C3 (Cyrix M2)' ;? C65len: ;--------IDT V54: db 'WinChip C6' V54len: V58: db 'WinChip 2' V58len: V59: db 'WinChip 3' V59len: ;-------VIA V66: db 'C3 (Samuel)' ; Joshua is unreleased 065 V66len: V67: db 'C3 (Samuel2/Ezra)' ; ? V67len: V68: db 'C3 (Ezra-T/Eden)' ;? V68len: V69: db 'C3 (Antaur/Nehemiah)' ;? V69len: VA: db 'C7 (Esther)' ;? VAlen: ;---------Transmeta T5: db 'Crusoe' ; T5len: TF: db 'Efficeon' ; TFlen: ;--------- NG: db 'Next generation CPU' NGlen: stm: db 'Internal name:' stmlen: athloncoef db 110, 115, 120, 125, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 120 db 190, 120, 200, 130, 135, 140, 210, 150, 220, 160, 165, 170, 180, 230, 240 athlonmcoef: db 110, 115, 120, 125, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105 db 30, 190, 40, 200, 130, 135, 14, 210, 150, 220, 160, 165, 170, 230, 240 athloncoef3 db 45, 50, 40, 55, 25, 30, 60, 35 p4coef db 160, 170, 180, 190, 200, 210, 220, 230, 80, 90, 100, 110, 120, 130, 140, 150 ; Pentium 4 (Willamete) coppercoeff db 50, 30, 40, 20, 55, 35, 45, 25, 35, 70, 80, 60, 20, 75, 15, 65, 90, 110, 120, 20, 95, 115, 85, 25, 35, 70, 80, 100, 20, 75, 15, 105 tualatcoeff db 120, 35, 35, 40, 55, 35, 115, 35, 160, 70, 80, 60, 40, 75, 35, 65, 90, 110, 35, 35, 95, 35, 85, 35, 35, 35, 130, 100, 140, 35, 150, 105 myname: db ' ' mynamelen: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; include images and unpacking- and hasharea ; include 'logos.inc' ; include file where gif's are stored img_area: ; image is going to be unpacked to here rb 201*49*3+8 ; image resolution (bits to reserve) img_area2: ; image is going to be unpacked to here rb 93*24*3+8 ; image resolution (bits to reserve) gif_hash_area: rd 4096+1 ;hash area size for unpacking gif ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; I_END: align 4 udata thread2_stack_area rb 64 thread2_esp = $ U_END: