Subversion Repositories Kolibri OS

Rev

Rev 223 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
223 Ghost 1
;******************************************************************************
2
; project name:    CPUID                                                      *
3
; target platform: KolibriOS, x86 (IA-32), x86-64 achitectures                *
4
; compiler:        flat assembler 1.67.5                                      *
318 heavyiron 5
; version:         2.17                                                       *
6
; last update:     3rd February  2007          1st 2nd 3rd 4th                *
223 Ghost 7
; maintained by:   Sergey Kuzmin aka Wildwest                                 *
8
; e-mail:          kuzmin_serg@list.ru                                        *
9
; site:            http://coolthemes.narod.ru/files.html                      *
318 heavyiron 10
; license:         Copyright 2004-2007 Sergey Kuzmin and co-authors           *
223 Ghost 11
;                  Rules:                                                     *
12
;                  1)you can use pieces of code in your project, but should   *
318 heavyiron 13
;                    mention the original author (include copyright notice);  *
223 Ghost 14
;                  2)if you modify CPUID (improve, port, translate, etc) send *
318 heavyiron 15
;                    your changes to the maintainer or make about post changes*
16
;                    at forum  http://meos.sysbin.com                         *
223 Ghost 17
;-----------------------------------------------------------------------------*
18
; English comments                                                            *
19
;------------------------------------------------------------------------------
20
use32
21
  org	 0x0
22
  db	 'MENUET01'
23
  dd	 0x01
24
  dd	 START
25
  dd	 I_END
26
  dd U_END+4096*8
27
  dd U_END+4096*8
28
 ; dd     0x100000+4096
29
 ; dd     0x100000+4096
30
  dd	 0x0
31
  dd	 0x0
32
 
33
macro udata
34
{
35
}
36
 
37
include 'mos_uzel.inc'
318 heavyiron 38
; useful macroses and Brand ID decoding
39
include 'caches.inc'
223 Ghost 40
;(L1 and L2 cashes decoding for Intel)
318 heavyiron 41
include 'multipli.inc'
42
;(multiplier decoding)
43
include 'features.inc'
44
;(features decoding)
223 Ghost 45
 
46
include 'gif2img.inc'
318 heavyiron 47
; include macros to convert gif to img
223 Ghost 48
 
49
include 'rsatest.inc'
50
include 'variable.inc'
51
 
318 heavyiron 52
 
53
 
223 Ghost 54
START:			;   LET'S GO!!!
55
;------------
56
CYCLES:
57
;    CPU speed
58
    mov eax, 18
59
    mov ebx,5
60
    int 0x40
318 heavyiron 61
    mov [total1],eax  ;in Hz,  example 1600490000
223 Ghost 62
    xor  edx,edx
63
    mov  ebx,1000000
64
    div  ebx
318 heavyiron 65
    mov [total], eax  ; in Mhz,  example 1600
223 Ghost 66
    xor edx, edx
67
    mov eax, [total1]
68
    mov ebx, 10000
69
    div ebx
70
    mov [ost], eax    ; example 160049
71
    mov eax, [total]
72
    imul eax, 100
73
    mov [sot], eax    ;  example 160000
74
    mov eax, [ost]
75
    sub eax, [sot]
76
    mov [sot], eax    ; example 49
77
;------------
78
cpu:		      ;is CPUID supported?
79
  pushfd	      ;push original EFLAGS
80
  pop eax	      ;get original EFLAGS
81
  mov ebx, eax	      ;save original EFLAGS
82
  xor eax, 00200000h  ;flip 21th bit in EFLAGS
83
  push eax	      ;save new EFLAGS value on stack
84
  popfd 	      ;replace current EFLAGS value
85
  pushfd	      ;get new EFLAGS
86
  pop eax	      ;store new EFLAGS in EAX
87
  cmp eax, ebx	      ;compare values of 21th bit
88
  jz NO_CPUID	      ;CPUID isn't supported
89
;------------
90
CPUNAME:	      ; VENDOR
91
    mov   eax,0       ; eax=0
92
    cpuid
93
 
94
    mov [stdc], eax   ; number of calls
95
    mov   [cpuname+ 12],ebx
96
    mov   [cpuname+ 16],edx
97
    mov   [cpuname+ 20],ecx
98
    mov   [smallvendor],ecx
99
 
100
; for various vendors we should later use different methods
101
 
102
;Decoding cache L1 and L2 for Intel
103
 
104
  cmp [smallvendor], 'ntel'
105
  jne cpu1     ;is not Intel
106
  je .detec
107
.detec:
108
 
109
;Starting L1, L2, L3 caches detection (Intel made it VERY HARD)
110
 
111
mov eax, 2
112
cpuid
113
 
114
mov [che], al	     ; number of calls
115
multik:
116
dec [che]
117
 
118
.eaxl:
119
test  eax, $80000000 ;    Test bit 31
318 heavyiron 120
jnz   .ebxl	     ;    <> 0 =>invalid values
223 Ghost 121
shr eax, 8
122
call decodecache
123
shr eax, 8
124
call decodecache
125
shr eax, 8
126
call decodecache
127
.ebxl:
128
test  ebx, $80000000
129
jnz   .ecxl
130
mov eax, ebx
131
call decodecache
132
shr eax, 8
133
call decodecache
134
shr eax, 8
135
call decodecache
136
shr eax, 8
137
call decodecache
138
.ecxl:
139
test  ecx, $80000000
140
jnz   .edxl
141
mov eax, ecx
142
call decodecache
143
shr eax, 8
144
call decodecache
145
shr eax, 8
146
call decodecache
147
shr eax, 8
148
call decodecache
149
.edxl:
150
test  edx, $80000000
151
jnz   cpu1
152
mov eax, edx
153
call decodecache
154
shr eax, 8
155
call decodecache
156
shr eax, 8
157
call decodecache
158
shr eax, 8
159
call decodecache
160
 
161
cmp [che], 0 ; we made all calls
162
je cpu1
163
 
164
multi: ; not yet
165
 
166
mov eax, 2  ; so we made call again
167
cpuid
168
 
169
jmp multik
170
 
171
;  FAMILY MODEL STEPPING
172
cpu1:
173
    xor eax, eax
174
    inc eax	  ; eax=1
175
    cpuid
176
 
177
mov ecx, eax
178
and ecx,00000F00h ;   get CPU family
179
shr ecx,8	  ;   shift it to the correct position
180
mov dword[f],ecx
181
 
182
mov ecx, eax
183
and ecx,000000F0h ;    get CPU model
184
shr ecx,4
185
mov dword[m],ecx
186
 
187
mov ecx, eax
188
and ecx,0000000Fh ;   get CPU stepping
189
mov dword[s],ecx
190
 
191
;-
192
mov ecx, eax	  ; get Type
193
shl ecx, 18
194
shr ecx,30
195
;and ecx, 0000000Fh ; only two lower bits can be nonzero
196
mov dword[t], ecx
197
;=======================================================
198
 
199
cmp dword[smallvendor], 'cAMD'
200
jz maybe_athlon
201
cmp dword[smallvendor], 'ntel'
202
jz detect_it
203
jmp no_full   ; if not AMD or Intel
204
 
205
detect_it:
206
cmp [f], 0Fh
207
jne no_full
208
 
209
full:
210
 
211
mov ecx, eax	      ; get Extended model
212
shr ecx,16	      ;shift it to the correct position
213
and ecx, 0000000Fh
214
shl ecx, 4
215
add ecx, [m]
216
mov dword[em],ecx     ;  effective    model
217
 
218
mov ecx, eax	      ; get Extended family
219
shr ecx, 20	      ;shift it to the correct position
220
and ecx, 000000FFh
221
add ecx, [f]
318 heavyiron 222
mov dword[ef],ecx     ; effective family
223 Ghost 223
 
224
 
225
jmp fut
226
 
227
no_full:
228
 
229
mov ecx, [m]
230
mov [em], ecx
231
 
232
mov ecx, [f]
233
mov [ef], ecx
234
 
235
jmp fut
236
 
237
maybe_athlon:
318 heavyiron 238
mov eax, 0x80000001		  ; CPUID ext. function 0x80000001
223 Ghost 239
cpuid
240
mov ecx, eax
241
and ecx,00000F00h ;   get CPU family
242
shr ecx,8	  ;   shift it to the correct position
243
mov dword[ef],ecx
244
 
245
mov ecx, eax
246
and ecx,000000F0h ;    get CPU model
247
shr ecx,4
248
mov dword[em],ecx
249
 
250
fut:
251
 
252
call decode_sse3
253
;-
254
    call decode_extended
255
 
256
    mov   eax,$80000000
257
    cpuid
258
 
259
    mov   [extc], eax  ; max number of calls
260
 
261
  test	eax, $80000000 ;// Test bit 31
262
  jz .noname
263
 
264
  cmp  eax,$80000003
265
  ja .mynameis
266
  jmp .noname
267
 
268
.mynameis:
269
    mov       eax,$80000002
270
    cpuid
271
    mov   [myname],eax
272
    mov   [myname+4],ebx
273
    mov   [myname+8],ecx
274
    mov   [myname+12],edx
275
    mov   eax,$80000003
276
    cpuid
277
    mov   [myname+16],eax
278
    mov   [myname+20],ebx
279
    mov   [myname+24],ecx
280
    mov   [myname+28],edx
281
    mov   eax,$80000004
282
    cpuid
283
    mov   [myname+32],eax
284
    mov   [myname+36],ebx
285
    mov   [myname+40],ecx
286
    mov   [myname+44],edx
287
    jmp   red
288
 
289
.noname:
290
mov  dword [myname], $612F6E
291
 
292
red:
293
 
294
xor ecx, ecx
295
xor eax, eax
296
xor edx, edx
297
xor ebx, ebx
298
 
299
;mov byte [multiplier], 115;     ; for testing
300
 
301
call multipl			      ; get multiplier
302
mov byte [multiplier], cl
303
 
304
xor eax, eax
305
xor ebx, ebx
306
xor ecx, ecx
307
xor edx, edx
308
 
309
cmp dword[multiplier], 0
310
jz contin
311
 
312
calc:
313
 
314
mov eax,dword [ost]   ; example 166474
315
imul eax, 10	      ; example 1664740
316
mov  ebx, dword [multiplier]   ; get system clock (if multiplier detected)
317
div ebx
318
mov dword [freqbb], eax  ;  16647
319
 
320
xor eax, eax
321
xor ebx, ebx
322
xor ecx, ecx
323
xor edx, edx
324
 
318 heavyiron 325
mov eax,dword [ost]  ;example  166474
223 Ghost 326
mov  ebx,10
318 heavyiron 327
div  ebx	     ;example  16647
223 Ghost 328
 
329
mov dword [temp], eax
330
 
331
xor eax, eax
332
xor ebx, ebx
333
xor ecx, ecx
334
xor edx, edx
335
 
336
mov eax, dword [temp]
337
 
338
mov  ebx, dword [multiplier]
339
div ebx 		       ; example 166
340
 
341
imul eax, 100
342
mov  dword[freqll], eax  ; example 16600
343
 
344
xor eax, eax
345
xor ebx, ebx
346
xor ecx, ecx
347
xor edx, edx
348
 
349
mov eax, dword[freqbb]; example  16647
350
sub eax, dword[freqll];  example   16600
351
mov dword[freqll], eax	  ;example  47
352
 
353
 
354
xor eax, eax
355
xor ebx, ebx
356
xor ecx, ecx
357
xor edx, edx
358
 
359
 
360
mov eax,dword [freqbb]; example 16647
361
mov  ebx, 100
362
div ebx
363
mov dword [freqbb], eax  ; example 166
364
 
365
xor eax, eax
366
xor ebx, ebx
367
xor ecx, ecx
368
xor edx, edx
369
 
370
    mov eax,dword[multiplier]  ; example 115
371
    mov  ebx,10
372
    div  ebx
373
    mov dword[multb], eax  ;   example 11
374
 
375
    imul eax, 10
376
    mov dword[multa], eax    ;  example 110
377
 
378
xor eax, eax
379
xor ebx, ebx
380
xor ecx, ecx
381
xor edx, edx
382
 
383
    mov eax, dword[multiplier]
384
    sub eax, dword[multa]
385
    mov dword[multa], eax    ; example 5
386
 
387
xor eax, eax
388
xor ebx, ebx
389
xor ecx, ecx
390
xor edx, edx
391
 
392
jmp output
393
 
394
contin:
395
 
396
mov   dword [freqbb], 0
397
mov   dword [freqll], 0
398
 
399
output:
400
 
401
   call draw_window    ;     Draw window
402
 
403
typedetect:
404
 
405
cmp [t], 00b
406
jne t2d
318 heavyiron 407
Text 295,270,0x00000000,t1, t1len-t1
223 Ghost 408
jmp PROCCORE
409
t2d:
410
cmp [t], 01b
411
jne t3d
318 heavyiron 412
Text 295,270,0x00000000,t2, t2len-t2
223 Ghost 413
jmp PROCCORE
414
t3d:
415
cmp [t], 11b
416
jne notype
318 heavyiron 417
Text 295,270,0x00000000,t3, t3len-t3
223 Ghost 418
jmp PROCCORE
419
notype:
318 heavyiron 420
Text 295,270,0x00000000,t4, t4len-t4
223 Ghost 421
 
422
PROCCORE:    ;   Who are you?
423
; Intel - "GenuineIntel"           +
424
; AMD - "AuthenticAMD"             +
425
; Cyrix - "CyrixInstead"           +
426
; UMC - "UMC UMC UMC "
427
; NexGen - "NexGenDriven"
428
; Centaur - "CentaurHauls"         +
429
; Rise Technology - "RiseRiseRise"
430
; SiS - "SiS SiS SiS "
431
; Transmeta - "GenuineTMx86"       +
432
; National Semiconductor - "Geode by NSC"
433
 
434
  cmp dword[smallvendor], 'ntel'
435
  jz Intel
436
  cmp dword[smallvendor], 'cAMD'
437
  jz AMD
438
  cmp dword[smallvendor], 'tead'
439
  jz Cyrix
440
  cmp dword[smallvendor], 'auls'
441
  jz Centaur
442
  cmp dword[smallvendor], 'Mx86'
443
  jz Transmeta
444
 
445
; cmp ecx, 'UMC '
446
; jz .UMC
447
; cmp ecx, 'iven'
448
; jz .NexGen
449
; cmp ecx, 'Rise'
450
;  jz .Rise
451
; cmp ecx, 'SiS '
452
; jz .SiS
453
; cmp ecx, ' NSC'
454
; jz .NSC
455
  jmp Other   ;  I don't know what to do with you...
456
Other:
457
Text 80,90,0x00000000,other, otherlen-other
458
    jmp MMXtest
459
;-------------------------
460
 
461
AMD:
462
 
463
Text 20, 210,0x00000000,cache, cachelen-cache
464
 
465
Text 80,90,0x00000000,AMDn, AMDnlen-AMDn
466
 
467
	mov	esi, amd
468
	call	load_gif
318 heavyiron 469
PutImage 130,127,201,49,img_area+8
470
;         place   size
223 Ghost 471
 
472
; Relax, man. AMD made PRETTY SIMPLE cache detection routine
473
;CACHE1:
474
mov eax, 80000005h
475
    cpuid
318 heavyiron 476
 
477
mov eax, ecx
478
;shl eax, 24
479
;shr eax, 24
480
 
481
and eax,000000FFh ;
482
mov [lineld], eax
483
 
484
mov eax, ecx
485
;shl eax, 8
486
;shr eax, 24
487
 
488
and eax,00FF0000h
489
shr eax, 16
490
mov [wayld], eax
491
 
223 Ghost 492
shr ecx, 24
493
mov [L1d], ecx
318 heavyiron 494
 
495
 
496
mov eax, edx
497
;shl eax, 24
498
;shr eax, 24
499
 
500
and eax,000000FFh ;
501
mov [lineli], eax
502
 
503
mov eax, edx
504
;shl eax, 8
505
;shr eax, 24
506
 
507
and eax,00FF0000h
508
shr eax, 16
509
mov [wayli], eax
510
 
511
 
223 Ghost 512
shr edx, 24
513
mov [L1i], edx
318 heavyiron 514
 
515
 
223 Ghost 516
;CACHE2:
517
mov eax, 80000006h
518
    cpuid
318 heavyiron 519
 
520
mov eax, ecx
521
;and eax,000000FFh ;
522
shl eax, 24
523
shr eax, 24
524
mov dword[linel2], eax
525
 
526
mov eax, ecx
527
shl eax, 16
528
shr eax, 28
529
 
530
cmp eax, 0010b
531
je way2
532
 
533
cmp eax, 0100b
534
je way4
535
 
536
cmp eax, 0110b
537
je way8
538
 
539
cmp eax, 1000b
540
je way16
541
 
542
jmp to_next
543
 
544
way2:
545
mov dword[wayl2], 2
546
jmp to_next
547
 
548
way4:
549
mov dword[wayl2], 4
550
jmp to_next
551
 
552
way8:
553
mov dword[wayl2], 8
554
jmp to_next
555
 
556
way16:
557
mov dword[wayl2], 16
558
jmp to_next
559
 
560
 
561
to_next:
562
 
223 Ghost 563
shr ecx, 16
564
mov [L2],ecx
318 heavyiron 565
 
223 Ghost 566
    cmp [f], $5
567
    jz .fiv
568
    cmp [f], $6
569
    jz .si
570
    cmp [f], $F
571
    jz fif
572
.fiv:	 ;     Family=5
573
    cmp [m],$0
574
    jz .A50
575
    cmp [m],$1
576
    jz .A51
577
    cmp [m],$2
578
    jz .A52
579
    cmp [m],$3
580
    jz .A53
581
    cmp [m],$6
582
    jz .A56
583
    cmp [m],$7
584
    jz .A57
585
    cmp [m],$8
586
    jz .A58
587
    cmp [m],$9
588
    jz .A59
589
    cmp [m],$D
590
    jz .A5D
591
.A50:
592
    mov [micron], 50   ; 0.35?
593
Text 105,90,0x00000000,A50, A50len-A50
594
    jmp MMXtest
595
.A51:
596
    mov [micron], 35
597
Text 105,90,0x00000000,A51, A51len-A51
598
    jmp MMXtest
599
.A52:
600
    mov [micron], 35
601
Text 105,90,0x00000000,A52, A52len-A52
602
    jmp MMXtest
603
.A53:
604
    mov [micron], 35
605
Text 105,90,0x00000000,A53, A53len-A53
606
    jmp MMXtest
607
.A56:
608
    mov [micron], 30
609
Text 105,90,0x00000000,A56, A56len-A56
610
    jmp MMXtest
611
.A57:
612
    mov [micron], 25
613
Text 105,90,0x00000000,A57, A57len-A57
614
    jmp MMXtest
615
.A58:
616
    mov [micron], 25
617
Text 105,90,0x00000000,A58, A58len-A58
618
    jmp MMXtest
619
.A59:
620
    mov [micron], 25
621
Text 105,90,0x00000000,A59, A59len-A59
622
    jmp MMXtest
623
.A5D:
624
    mov [micron], 18
625
Text 105,90,0x00000000,A5D, A5Dlen-A5D
626
    jmp MMXtest
627
.si:   ;    Family=6
628
 
629
    cmp [m],$1
630
    jz A1
631
    cmp [m],$2
632
    jz A2
633
    cmp [m],$3
634
    jz A3
635
    cmp [m],$4
636
    jz A4
637
    cmp [m],$6
638
    jz A6
639
    cmp [m],$7
640
    jz A7
641
    cmp [m],$8
642
    jz A8
643
    cmp [m],$A
644
    jz AA
645
A1:
646
    mov [micron], 25
647
Text 105,90,0x00000000,At1, At1len-At1
648
 jmp MMXtest
649
A2:
650
    mov [micron], 18
651
Text 105,90,0x00000000,At2, At2len-At2
652
 jmp MMXtest
653
A3:
654
    mov [micron], 18
655
 Text 105,90,0x00000000,At3, At3len-At3
656
 jmp MMXtest
657
A4:
658
    mov [micron], 18
659
Text 105,90,0x00000000,At4, At4len-At4
660
 jmp MMXtest
661
A6:
662
 
663
 mov [micron], 18
664
 Text 105,90,0x00000000,At6, At6len-At6
665
 
666
 mov [FRS], 266  ;!!!!!!
667
 
668
Number 320,110,0,3,dword [FRS],0x000000; MHz
669
 
670
 call newrating; !!!!
671
 
672
Text 250,90,0x00000000,pr, prlen-pr
673
 
674
 Number 315,90,0,4,dword [rating],0x000000
675
 jmp MMXtest
676
A7:
677
    mov [micron], 13
678
Text 105,90,0x00000000,At7, At7len-At7
679
 jmp MMXtest
680
 
681
A8:
682
 
683
 mov [micron], 13
684
mov [FRS], 266	;!!!!!!
685
 
686
   Number 320,110,0,3,dword [FRS],0x000000; MHz
687
 
688
 
689
 cmp [L2], 256
690
 jl .App  ; Applebred
691
Text 105,90,0x00000000,At8, At8len-At8
692
 
693
 
694
call newrating;!!!!
695
 
696
Text 250,90,0x00000000,pr, prlen-pr
697
Number 315,90,0,4,dword [rating],0x000000
698
jmp MMXtest
699
 
700
 .App:
701
Text 105,90,0x00000000,At8a, At8alen-At8a
702
jmp MMXtest
703
 
704
AA:
705
 
706
 mov [micron], 13
707
 
708
mov [FRS], 333; !!!!
709
Text 250,90,0x00000000,pr, prlen-pr
710
 
711
   Number 320,110,0,3,dword [FRS],0x000000; MHz
712
 
713
 cmp [L2], 256
714
 jl .Tho ; Thorton
715
 
716
call newrating;!!!!!
717
Text 105,90,0x00000000,Ata, Atalen-Ata
718
 
719
 Number 315,90,0,4,dword [rating],0x000000
720
 
721
jmp MMXtest
722
 .Tho:
723
call newrating;!!!!!
724
Text 105,90,0x00000000,Atat, Atatlen-Atat
725
 Number 315,90,0,4,dword [rating],0x000000
726
 jmp MMXtest
727
fif:  ;  AMD-64    Family=15
728
 
729
;here is a need to rewrite detection of AMD F-th family according to "Revision Guide for
730
;AMD AthlonTM 64 and  AMD OpteronTM  Processors" 25759.pdf
731
 
732
; checking sse3 for new AMD's is needed
733
    cmp [m],$1	; Dual-core Opteron
734
    jz .AF1
318 heavyiron 735
    cmp [m],$3	; Toledo 1024 0.09   // Manchester     ||Windsor Dual Core not supported
223 Ghost 736
    jz .AF3
737
    cmp [m],$4	;Athlon 64 Mobile Athlon 64 FX  ClawHammer (1024) 0.13
738
    jz .AF4
739
    cmp [m],$5	; Opteron     Athlon 64 FX 0.13 (1024)
740
    jz .AF5
318 heavyiron 741
    cmp [m],$7	;Athlon 64 Athlon 64 FX  Clawhammer(1024) 0.13   Sledgehammer(1024)  0.13  // SSE3+ SanDiego(1024)
223 Ghost 742
    jz .AF7
743
   cmp [m],$8 ; Athlon 64 Mobile Athlon 64 FX ClawHammer (1024) 0.13
744
    jz .AF8
745
   cmp [m],$B ; Athlon 64
746
    jz .AFB
747
   cmp [m],$C ;Athlon 64 Newcastle(512) 0.13  Sempron> Paris (256)   0.13  |SSE3+ Sempron >  Palermo FC0 0.09  // (Venice)
748
    jz .AFC
749
   cmp [m],$E  ; Athlon 64    //
750
    jz .AFE
751
	cmp [m],$F ; Athlon 64 Winchester(512) |SSE3+ SanDiego(1024)  Venice (512)  Palermo (256) 0.09
752
    jz .AFF
753
    jmp next_generation
754
.AF1:
755
    mov [micron], 09  ;?
756
Text 105,90,0x00000000,AF1, AF1len-AF1
757
 jmp MMXtest
758
.AF3:
759
    mov [micron], 09
760
Text 105,90,0x00000000,AF3, AF3len-AF3
761
 jmp MMXtest
762
.AF4:
763
    mov [micron], 13
764
Text 105,90,0x00000000,AF4, AF4len-AF4
765
 jmp MMXtest
766
.AF5:
767
    mov [micron], 13
768
Text 105,90,0x00000000,AF5, AF5len-AF5
769
 jmp MMXtest
770
.AF7:
771
    mov [micron], 13
772
Text 105,90,0x00000000,AF5, AF5len-AF5
773
 jmp MMXtest
774
.AF8:
775
    mov [micron], 13
776
Text 105,90,0x00000000,AF4, AF5len-AF4
777
 jmp MMXtest
778
.AFB:
779
    mov [micron], 13
780
Text 105,90,0x00000000,AF4, AF4len-AF4
781
 jmp MMXtest
782
 
783
.AFC:
784
cmp [L2], 512
785
je .AFCn
786
 
787
cmp [sse3sup], 1
788
je .AFCnpal
789
 
790
.AFCnpar:  ; paris
791
    mov [micron], 13
792
	Text 105,90,0x00000000,AFCs, AFCslen-AFCs
793
 jmp MMXtest
794
 
795
.AFCnpal: ; palermo
796
    mov [micron], 9
797
	Text 105,90,0x00000000,AFCsp, AFCsplen-AFCsp
798
 jmp MMXtest
799
 
800
 
801
.AFCn: ;newcastle
802
    mov [micron], 13
803
	Text 105,90,0x00000000,AFC, AFClen-AFC
804
 jmp MMXtest
805
 
806
 .AFE:	 ; error in cpu
807
 jmp .AFC
808
 
809
.AFF:
810
 
811
cmp [sse3sup], 1
812
je .AFFsse
813
 
814
.win:
815
mov [micron], 9    ; winchester
816
jmp MMXtest
817
 
818
.AFFsse:
318 heavyiron 819
mov [micron], 9
223 Ghost 820
cmp [L2], 1024
821
jz .AFs
822
cmp [L2], 512
823
jz .AFd
824
cmp [L2], 256
825
jz .AFp
826
 
827
.AFs:
828
Text 105,90,0x00000000,AFS, AFSlen-AFS
829
 jmp MMXtest
830
 
831
.AFd:
832
Text 105,90,0x00000000,AFV, AFVlen-AFV
833
 jmp MMXtest
834
 
835
.AFp:
836
Text 105,90,0x00000000,AFCsp, AFCsplen-AFCsp
837
 jmp MMXtest
838
;-----------------------------------------------
839
Intel:
840
Text 80,90,0x00000000,Inteln, Intelnlen-Inteln
841
 
842
	mov	esi, intel
843
	call	load_gif
318 heavyiron 844
PutImage 130,127,201,49,img_area+8
845
;         place   size
223 Ghost 846
 
847
det:
848
    cmp [f], $5
849
    jz .five
850
    cmp [f], $6
851
    jz .six
852
    cmp [f], $7
853
    jz .sev
854
    cmp [f], $F
855
    jz .fift
856
.five:	      ;Family=5
857
 
858
Text 20, 210,0x00000000,cache, cachelen-cache
859
 
860
    cmp [m],$0
861
    jz .I0
862
    cmp [m],$1
863
    jz .I1
864
    cmp [m],$2
865
    jz .I2
866
    cmp [m],$3
867
    jz .I3
868
    cmp [m],$4
869
    jz .I4
870
    cmp [m],$7
871
    jz .I7
872
    cmp [m],$8
873
    jz .I8
874
.I0:
875
Text 115,90,0x00000000,P50, P50len-P50
876
   mov [L1d], 8
877
   mov [L1i], 8
878
   mov [L2], 256
879
   mov [micron], 80
880
 jmp MMXtest
881
.I1:
882
Text 115,90,0x00000000,P5, P5len-P5
883
   mov [L1d], 8
884
   mov [L1i], 8
885
   mov [L2], 256
886
   mov [micron], 50
887
 jmp MMXtest
888
.I2:
889
Text 115,90,0x00000000,P54C, P54Clen-P54C
890
   mov [L1d], 8
891
   mov [L1i], 8
892
   mov [L2], 256
893
   mov [micron], 50
894
 jmp MMXtest
895
.I3:
896
Text 115,90,0x00000000,P54T, P54Tlen-P54T
897
   mov [L1d], 8
898
   mov [L1i], 8
899
   mov [L2], 256
900
   mov [micron], 50
901
 jmp MMXtest
902
.I4:
903
Text 115,90,0x00000000,P55C, P55Clen-P55C
904
   mov [L1d], 8
905
   mov [L1i], 8
906
   mov [L2], 256
907
   mov [micron], 35
908
 jmp MMXtest
909
.I7:
910
Text 115,90,0x00000000,P54C, P54Clen-P54C
911
   mov [L1d], 8
912
   mov [L1i], 8
913
   mov [L2], 256
914
   mov [micron], 35
915
 jmp MMXtest
916
.I8:
917
Text 115,90,0x00000000,P55C, P55Clen-P55C
918
   mov [L1d], 16
919
   mov [L1i], 16
920
   mov [L2], 256
921
   mov [micron], 35
922
 jmp MMXtest
923
.six:		   ;Family=6
924
 
925
Text 20, 210,0x00000000,cache, cachelen-cache
926
 
927
    cmp [m],$0
928
    jz .I60
929
    cmp [m],$1
930
    jz .I61
931
    cmp [m],$3
932
    jz .I63
933
    cmp [m],$5
934
    jz .I65
935
    cmp [m],$6
936
    jz .I66
937
    cmp [m],$7
938
    jz .I67
939
    cmp [m],$8
940
    jz .I68
941
    cmp [m],$9
942
    jz .I69
943
    cmp [m],$A
944
    jz .I6A
945
    cmp [m],$B
946
    jz .I6B
947
   cmp [m],$D
948
    jz .I6D
949
    cmp [m],$E
950
    jz .I6E
951
   cmp [m],$F
952
    jz .I6F
953
.I60:
954
    mov [micron], 50
955
Text 115,90,0x00000000,P60, P60len-P60
956
 jmp MMXtest
957
.I61:
958
    mov [micron], 35
959
Text 115,90,0x00000000,P61, P61len-P61
960
 jmp MMXtest
961
.I63:
962
    mov [micron], 28
963
Text 115,90,0x00000000,P63, P63len-P63
964
 jmp MMXtest
965
.I65:
966
    mov [micron], 25
967
    cmp [L2], 0
968
    jne .pp65  ; Pentium
969
Text 115,90,0x00000000,P65c, P65clen-P65c
970
    jmp MMXtest
971
.pp65:
972
Text 115,90,0x00000000,P65, P65len-P65
973
    jmp MMXtest
974
.I66:
975
    mov [micron], 25
976
Text 115,90,0x00000000,P66, P66len-P66
977
    jmp MMXtest
978
.I67:
979
    mov [micron], 25
980
Text 115,90,0x00000000,P67, P67len-P67
981
    jmp MMXtest
982
.I68:
983
    mov [micron], 18
984
    cmp [L2], 128
985
    jne .pp68  ; Pentium
986
Text 115,90,0x00000000,P68c, P68clen-P68c
987
    jmp MMXtest
988
 .pp68:
989
Text 115,90,0x00000000,P68, P68len-P68
990
    jmp MMXtest
991
.I69:
992
    mov [micron], 13
993
Text 115,90,0x00000000,P69 , P69len-P69
994
    jmp MMXtest
995
.I6A:
996
    mov [micron], 18
997
Text 115,90,0x00000000,P6A, P6Alen-P6A
998
    jmp MMXtest
999
.I6B:
1000
    mov [micron], 13
1001
    cmp [L2], 256
1002
    jne .pp6B  ; Pentium
1003
Text 115,90,0x00000000,P6Bc, P6Bclen-P6Bc
1004
    jmp MMXtest
1005
.pp6B:
1006
Text 115,90,0x00000000,P6B, P6Blen-P6B
1007
    jmp MMXtest
1008
.I6D:
1009
    mov [micron], 9
1010
Text 115,90,0x00000000,P6D, P6Dlen-P6D
1011
    jmp MMXtest
1012
.I6E:
1013
    mov [micron], 6
1014
Text 115,90,0x00000000,P6E, P6Elen-P6E
1015
    jmp MMXtest
1016
.I6F:
1017
    mov [micron], 6
1018
Text 115,90,0x00000000,P6F, P6Flen-P6F
1019
    jmp MMXtest
1020
 
1021
;06Ex - Pentium M Yonah 0.065
318 heavyiron 1022
;06Fx - Pentium D Conroe 0.065, Xeon Woodcrest, Celeron D AllenDale, Core 2 Kentsfield
223 Ghost 1023
 
1024
.sev:	 ;Family=7
1025
.IS0:
1026
 
1027
Text 20, 210,0x00000000,cache, cachelen-cache ;?
1028
 
1029
    mov [micron], 18
1030
Text 115,90,0x00000000,PS0, PS0len-PS0
1031
 jmp MMXtest
1032
 
1033
.fift:	  ;Family=15
1034
 
1035
Text 20, 210,0x00000000,cacheP4, cacheP4len-cacheP4
1036
 
1037
    cmp [m],$0
1038
    jz .IF0
1039
    cmp [m],$1
1040
    jz .IF1
1041
    cmp [m],$2
1042
    jz .IF2
1043
    cmp [m],$3
1044
    jz .IF3
1045
    cmp [m],$4
1046
    jz .IF3 ;identical to F3xh
1047
    cmp [m],$5
1048
    jz .IF5
1049
    cmp [m],$6
1050
    jz .IF6
1051
    jmp next_generation
1052
.IF0:
1053
    mov [micron], 18
1054
    cmp [L2], 128
1055
    jne .ppF0  ; Pentium
1056
Text 115,90,0x00000000,PF0c, PF0clen-PF0c
1057
    jmp MMXtest
1058
.ppF0:
1059
Text 115,90,0x00000000,PF0, PF0len-PF0
1060
    jmp MMXtest
1061
.IF1:
1062
    mov [micron], 18
1063
    cmp [L2], 128
1064
    je .IF0;jne.ppF1  ; Pentium
1065
  ;  mov   eax,dword 0x00000004
1066
  ;  mov   ebx,115*65536+80
1067
  ;  mov   ecx,dword 0x00000000
1068
  ;  mov   edx,PF0c
1069
  ;  mov   esi,PF0clen-PF0c
1070
  ;  int   0x40
1071
  ;jmp MMXtest
1072
;.ppF1:
1073
Text 115,90,0x00000000,PF0, PF0len-PF0
1074
 jmp MMXtest
1075
.IF2:
1076
    mov [micron], 13
1077
    cmp [L2], 128
1078
    jne .ppF2  ; Pentium
1079
Text 115,90,0x00000000,PF2c, PF2clen-PF2c
1080
 jmp MMXtest
1081
.ppF2:
1082
Text 115,90,0x00000000,PF2, PF2len-PF2
1083
 jmp MMXtest
1084
.IF3:
1085
    mov [micron], 09
1086
    cmp [L2], 256
1087
    jne .ppF3  ; Pentium
1088
Text 115,90,0x00000000,PF3c, PF3clen-PF3c
1089
 jmp MMXtest
1090
.ppF3:
1091
Text 115,90,0x00000000,PF3, PF3len-PF3
1092
 jmp MMXtest
1093
 
1094
.IF5:
1095
    mov [micron], 09
1096
    cmp [L2], 512
1097
    jae .ppF5  ; Pentium
1098
Text 115,90,0x00000000,PF5c, PF5clen-PF5c
1099
 jmp MMXtest
1100
.ppF5:
1101
Text 115,90,0x00000000,PF5, PF5len-PF5
1102
 jmp MMXtest
1103
 
1104
 .IF6:
1105
    mov [micron], 06  ; 065
1106
    cmp [L2], 512
1107
    ja .ppF6  ; Pentium
1108
Text 115,90,0x00000000,PF6c, PF6clen-PF6c
1109
 jmp MMXtest
1110
.ppF6:
1111
Text 115,90,0x00000000,PF6, PF6len-PF6
1112
 jmp MMXtest
1113
 
1114
 
1115
 next_generation:
1116
Text 115,90,0x00000000,NG, NGlen-NG
1117
  jmp MMXtest
1118
;----------------------------------
1119
Cyrix:
1120
 
1121
Text 20, 210,0x00000000,cache, cachelen-cache
1122
 
1123
	mov	esi, cyrix
1124
	call	load_gif
318 heavyiron 1125
PutImage 130,127,201,49,img_area+8
1126
;         place   size
223 Ghost 1127
 
1128
    cmp [f], $5
1129
    jz .fivv
1130
    cmp [f], $6
1131
    jz .sixx
1132
.fivv:	  ;Family=5
1133
    cmp [m],$2
1134
    jz .C52
1135
    cmp [m],$4
1136
    jz .C54
1137
.C52:
1138
    mov [micron], 50 ;35?
1139
    mov [L1i], 8
1140
    mov [L1d], 8
1141
    mov [L2], 512
1142
Text 80,90,0x00000000,Cyrixn, Cyrixnlen-Cyrixn
1143
Text 115,90,0x00000000,C52, C52len-C52
1144
    jmp MMXtest
1145
.C54:
1146
    mov [micron], 50
1147
    mov [L1i], 8
1148
    mov [L1d], 8
1149
    mov [L2], 512
1150
Text 80,90,0x00000000,Cyrixn, Cyrixnlen-Cyrixn
1151
Text 115,90,0x00000000,C54, C54len-C54
1152
    jmp MMXtest
1153
 
1154
.sixx:	   ;Family=6
1155
   cmp [m],$0
1156
   jz .C60
1157
   cmp [m],$5
1158
   jz .C65
1159
.C60:
1160
    mov [micron], 25
1161
    mov [L1i], 32
1162
    mov [L1d], 32
1163
    mov [L2], 512
1164
Text 80,90,0x00000000,Cyrixn, Cyrixnlen-Cyrixn
1165
Text 115,90,0x00000000,C60, C60len-C60
1166
    jmp MMXtest
1167
.C65:
1168
    mov [micron], 25 ;35?
1169
    mov [L1i], 32
1170
    mov [L1d], 32
1171
    mov [L2], 512
1172
Text 80,90,0x00000000,Centaurn, Centaurnlen-Centaurn
1173
Text 105,90,0x00000000,C65, C65len-C65
1174
    jmp MMXtest
1175
;---------------------
1176
Centaur:
1177
 
1178
Text 20, 210,0x00000000,cache, cachelen-cache
1179
 
1180
;CACHE1:
1181
mov eax, 80000005h
1182
    cpuid
1183
shr ecx, 24
1184
mov [L1d], ecx
1185
shr edx, 24
1186
mov [L1i], edx
318 heavyiron 1187
 
1188
 
1189
 
1190
; cache detection routine
1191
;CACHE1:
1192
mov eax, 80000005h
1193
    cpuid
1194
 
1195
mov eax, ecx
1196
 
1197
and eax,000000FFh ;
1198
mov [lineld], eax
1199
 
1200
mov eax, ecx
1201
 
1202
and eax,00FF0000h
1203
shr eax, 16
1204
mov [wayld], eax
1205
 
1206
shr ecx, 24
1207
mov [L1d], ecx
1208
 
1209
mov eax, edx
1210
 
1211
and eax,000000FFh ;
1212
mov [lineli], eax
1213
 
1214
mov eax, edx
1215
 
1216
and eax,00FF0000h
1217
shr eax, 16
1218
mov [wayli], eax
1219
 
1220
shr edx, 24
1221
mov [L1i], edx
1222
 
1223
 
223 Ghost 1224
;CACHE2:
1225
mov eax, 80000006h
1226
    cpuid
318 heavyiron 1227
 
1228
cmp [f], $6
1229
    jz vn
1230
    jmp vl2old	; if not then old identification
1231
vn:
1232
    cmp [m],$9
1233
    jl vl2old
1234
; else  new
1235
mov eax, ecx
1236
shl eax, 24
1237
shr eax, 24
1238
mov dword[linel2], eax
1239
 
1240
mov eax, ecx
1241
shl eax, 16
1242
shr eax, 28
1243
 
1244
mov dword[wayl2], eax
1245
 
1246
shr ecx, 16  ; it is 16 bits now
223 Ghost 1247
mov [L2],ecx
1248
 
318 heavyiron 1249
 
1250
 
1251
vl2old:
1252
mov eax, ecx
1253
shl eax, 24
1254
shr eax, 24
1255
mov dword[linel2], eax
1256
 
1257
mov eax, ecx
1258
shl eax, 8
1259
shr eax, 24
1260
 
1261
mov dword[wayl2], eax
1262
 
1263
shr ecx, 24  ; it was 8 bits earlier
1264
mov [L2],ecx
1265
 
1266
 
223 Ghost 1267
    cmp [f], $5
1268
    jz fivC
1269
    cmp [f], $6
1270
    jz sixC
1271
 
1272
fivC:		   ;Family=5
1273
 
1274
	mov	esi, idt
1275
	call	load_gif
318 heavyiron 1276
PutImage 130,127,201,49,img_area+8
1277
;         place   size
223 Ghost 1278
 
1279
Text 80,90,0x00000000,IDTn, IDTnlen-IDTn
1280
    cmp [m],$4
1281
    jz .V54
1282
    cmp [m],$8
1283
    jz .V58
1284
    cmp [m],$9
1285
    jz .V59
1286
.V54:
1287
   mov [micron], 35
1288
Text 105,90,0x00000000,V54, V54len-V54
1289
    jmp MMXtest
1290
.V58:
1291
    mov [micron], 25
1292
Text 105,90,0x00000000,V58, V58len-V58
1293
    jmp MMXtest
1294
.V59:
1295
    mov [micron], 25
1296
Text 105,90,0x00000000,V59, V59len-V59
1297
    jmp MMXtest
1298
 
1299
sixC:	;Family=6
1300
 
1301
	mov	esi, via
1302
	call	load_gif
318 heavyiron 1303
PutImage 130,127,201,49,img_area+8
1304
;         place   size
223 Ghost 1305
 
1306
Text 80,90,0x00000000,Centaurn, Centaurnlen-Centaurn
1307
    cmp [m],$6
1308
    jz .V66
1309
    cmp [m],$7
1310
    jz .V67
1311
    cmp [m],$8
1312
    jz .V68
1313
    cmp [m],$9
1314
    jz .V69
318 heavyiron 1315
    cmp [m],$A
223 Ghost 1316
    jz .V6A
1317
.V66:
1318
   mov [micron], 18 ; 25?
1319
Text 105,90,0x00000000,V66, V66len-V66
1320
    jmp MMXtest
1321
.V67:
1322
    mov [micron], 15
1323
Text 105,90,0x00000000,V67, V67len-V67
1324
    jmp MMXtest
1325
.V68:
1326
    mov [micron], 13
1327
Text 105,90,0x00000000,V68, V68len-V68
1328
    jmp MMXtest
1329
.V69:
1330
   mov [micron], 13
1331
Text 105,90,0x00000000,V69, V69len-V69
1332
    jmp MMXtest
1333
.V6A:
1334
   mov [micron], 9
1335
Text 105,90,0x00000000,VA, VAlen-VA
1336
    jmp MMXtest
1337
;-----------
1338
Transmeta:
1339
 
1340
Text 20, 210,0x00000000,cache, cachelen-cache
1341
 
1342
Text 80,90,0x00000000,Tranmsmetan, Tranmsmetanlen-Tranmsmetan
1343
 
1344
	mov	esi, transmeta
1345
	call	load_gif
318 heavyiron 1346
PutImage 130,127,201,49,img_area+8
1347
;         place   size
223 Ghost 1348
 
318 heavyiron 1349
; cache detection routine - it is the same as for AMD (almost)
223 Ghost 1350
;CACHE1:
1351
mov eax, 80000005h
1352
    cpuid
318 heavyiron 1353
 
1354
mov eax, ecx
1355
 
1356
and eax,000000FFh ;
1357
mov [lineld], eax
1358
 
1359
mov eax, ecx
1360
 
1361
and eax,00FF0000h
1362
shr eax, 16
1363
mov [wayld], eax
1364
 
223 Ghost 1365
shr ecx, 24
1366
mov [L1d], ecx
318 heavyiron 1367
 
1368
mov eax, edx
1369
 
1370
and eax,000000FFh ;
1371
mov [lineli], eax
1372
 
1373
mov eax, edx
1374
 
1375
and eax,00FF0000h
1376
shr eax, 16
1377
mov [wayli], eax
1378
 
223 Ghost 1379
shr edx, 24
1380
mov [L1i], edx
318 heavyiron 1381
 
1382
 
223 Ghost 1383
;CACHE2:
1384
mov eax, 80000006h
1385
    cpuid
318 heavyiron 1386
 
1387
mov eax, ecx
1388
shl eax, 24
1389
shr eax, 24
1390
mov dword[linel2], eax
1391
 
1392
mov eax, ecx
1393
shl eax, 16
1394
shr eax, 28
1395
 
1396
mov dword[wayl2], eax
1397
 
223 Ghost 1398
shr ecx, 16
318 heavyiron 1399
mov [L2],ecx
223 Ghost 1400
 
318 heavyiron 1401
 
223 Ghost 1402
    cmp [f], $5
1403
    jz .fivt
1404
    cmp [f], $F
1405
    jz .fift
1406
.fivt:	  ;     Family=5
1407
 
1408
    mov [micron], 13 ; ?
1409
Text 145,90,0x00000000,T5, T5len-T5
1410
    jmp MMXtest
1411
 
1412
.fift:	  ;     Family=F
1413
    mov [micron], 13 ;
1414
Text 145,90,0x00000000,TF, TFlen-TF
1415
    jmp MMXtest
1416
 
1417
;----
1418
MMXtest:	     ; MMX test and Brand ID decoding
1419
 
1420
call decodebrand  ; get Brand ID
1421
 
1422
call decode_standard_features
1423
 
1424
call decode_extended_features
1425
      xor eax,eax
1426
      inc eax
1427
      cpuid
1428
HTTtest:
1429
  test	edx, $10000000; ;Test bit 28
1430
  jnz	.EL   ;HTT technology is supported
1431
  jz .ELN
1432
 
1433
.EL:
1434
   and ebx,00FF0000h ; numbers of logical processors
1435
   shr ebx,16 ;        shift it to the correct position
1436
   cmp ebx, 1
318 heavyiron 1437
   ;   mov [number_of_log_cpus], ebx
223 Ghost 1438
   je .ELN  ; HHT not enabled (Celeron)
1439
 
1440
   mov	dword [HTTn+9], $736579
1441
   mov	dword [HTT+ 6], $736579
1442
   jmp TEXTOUT
1443
.ELN:
1444
 
1445
   mov	dword [HTTn+ 9],  $6F6E
1446
   mov	dword [HTT+ 6],  $6F6E
1447
   jmp	TEXTOUT
1448
 
1449
TEXTOUT:
1450
 
1451
Text 20,130,0x00000000,fam, famlen-fam
1452
Text 20,150,0x00000000,mode, modelen-mode
1453
Text 20,170,0x00000000,step, steplen-step
1454
;--------L1  L2
1455
Number 80,190,0,3,dword [L1d],0x000000;
1456
Number 80,210,0,3,dword [L1i],0x000000;
318 heavyiron 1457
Number 46,230,0,4,dword[L2],0x000000;
1458
Number 40,250,0,5,dword[L3],0x000000;
223 Ghost 1459
;-----------Features
1460
Number 263,70,0,2,dword [micron],0x000000  ; micron
1461
 
318 heavyiron 1462
Text 280,310,0x00000000,HTT, HTTlen-HTT
1463
Text 280,330,0x00000000,sse3, sse3len-sse3
223 Ghost 1464
 
1465
Text 20,90,0x00000000,name, namelen-name
1466
 
318 heavyiron 1467
Text 20,310,0x00000000,MMXs, MMXslen-MMXs
1468
Text 20,330,0x00000000,SSE, SSElen-SSE
1469
Text 100,330,0x00000000,SSE2, SSE2len-SSE2
223 Ghost 1470
 
318 heavyiron 1471
    Number 145,190,0,2,dword [wayld],0x000000
1472
    Number 223,190,0,2,dword [lineld],0x000000
1473
 
1474
    Number 145,210,0,2,dword [wayli],0x000000
1475
    Number 223,210,0,2,dword [lineli],0x000000
1476
 
1477
    Number 145,230,0,2,dword [wayl2],0x000000
1478
    Number 223,230,0,2,dword [linel2],0x000000
1479
 
1480
    Number 145,250,0,2,dword [wayl3],0x000000
1481
    Number 223,250,0,2,dword [linel3],0x000000
1482
 
223 Ghost 1483
    jmp TEST3DNOW
1484
;-------------------
1485
TEST3DNOW:
1486
 
1487
  cmp [smallvendor], 'ntel'
1488
  je .NOEXTENDED
1489
  jne .t
1490
 
1491
.t:
1492
 
1493
  mov	eax, $80000001 ;// Setup extended function 8000_0001h
1494
  cpuid
1495
 
1496
  test	edx, $80000000 ;// Test bit 31
1497
  jnz	.XIT
1498
 
1499
.NOEXTENDED: ;// 3DNow! technology is supported
1500
   mov	dword [now+ 9], $6F6E
1501
   jmp TEST3DNOWP
1502
.XIT:
1503
   mov	dword [now+ 9],  $736579
1504
   jmp TEST3DNOWP
1505
 
1506
TEST3DNOWP:
1507
 
1508
  cmp [smallvendor], 'ntel'
1509
  je .NOEXTENDEDP
1510
 
1511
.tp:
1512
 
1513
  mov	eax, $80000001 ;// Setup extended function 8000_0001h
1514
  cpuid
1515
 
1516
  test	edx, $40000000 ;// Test bit 30
1517
  jnz	.XITP  ;// 3DNow! technology is supported
1518
 
1519
.NOEXTENDEDP:
1520
   mov	dword [nowp+ 9], $6F6E
1521
   jmp TESTMMXP
1522
.XITP:
1523
   mov	dword [nowp+ 9],  $736579
1524
   jmp TESTMMXP
1525
 
1526
TESTMMXP:
1527
 
1528
    mov   eax,$80000000
1529
    cpuid
1530
 
1531
    test eax, 80000000h
1532
jna NOEXTENDEDM
1533
 
1534
  ;cmp   eax, $80000000 ;// Is 800_0001h supported?
1535
  ;jz   .NOEXTENDEDM    ;// If not, 3DNow! technology is not supported
1536
  mov	eax, $80000001 ;// Setup extended function 8000_0001h
1537
  cpuid
1538
  cmp [smallvendor], 'tead'
1539
  jne noCyr
1540
Cyrmx:
1541
  test	edx, $01000000 ;// Test bit 24
1542
  jnz	XITM  ;// 3DNow! technology is supported
1543
  jz NOEXTENDEDM
1544
noCyr:
1545
  test	edx, $00400000 ;// Test bit 22
1546
  jnz	XITM  ;// 3DNow! technology is supported
1547
  ;jz   .NOEXTENDEDM
1548
 
1549
NOEXTENDEDM:
1550
   mov	dword [mmxp+ 7], $6F6E
1551
   mov	dword [MMXPi+ 8], $6F6E
1552
   jmp text3d
1553
XITM:
1554
   mov	dword [mmxp+ 7],  $736579
1555
   mov	dword [MMXPi+ 8],  $736579
1556
   jmp text3d
1557
 
1558
text3d:
1559
 
318 heavyiron 1560
Text 180,310,0x00000000,now, nowlen-now
1561
Text 180,330,0x00000000,nowp, nowplen-nowp
1562
Text 100,310,0x00000000,mmxp, mmxplen-mmxp
223 Ghost 1563
 
1564
jmp still
1565
 
1566
;--------------------------
1567
NO_CPUID:
1568
 Text 20,70,0x00000000,oblom, oblomlen-oblom
1569
 jmp FREEZE
1570
 
1571
FREEZE:
1572
nop
318 heavyiron 1573
jmp FREEZE ; maybe we should close application or just made some Warning and jump to still:
223 Ghost 1574
;----------------
1575
still:
1576
    mov  eax,10
1577
    int  0x40		;
1578
    cmp  eax,1		;
1579
    je	 red		;  red
1580
    cmp  eax,2		;
1581
    je	 key		;  key
1582
    cmp  eax,3		;
1583
    je	 button 	;  button
1584
    jmp  still		;
1585
  key:			;
1586
    mov  eax,2		;  
1587
    int  0x40		;
1588
    jmp  still		;
1589
  button:		;
1590
    mov  eax,17 	;
1591
    int  0x40		;
1592
    cmp  ah,1		;  = 1 ?
1593
    je	close		; close
1594
 
1595
    cmp  ah,2		;  = 2 ?
1596
    je	thread_start	;
1597
			;
1598
    cmp  ah,3		;  = 3 ?
1599
    je	vybor		; vybor
1600
 
1601
    jne  noclose
1602
 
1603
vybor:
1604
 
1605
 Number 315,90,0,4,dword [rating],0xFFFFFF ;
1606
 
1607
 Number 320,110,0,3,dword [FRS],0xFFFFFF; MHz
1608
 
1609
cmp [FRS], 266
1610
jz .s1
1611
cmp [FRS], 333
1612
jz .s2
1613
cmp [FRS], 400
1614
jz .s3
1615
 
1616
.s1:
1617
mov [FRS], 333
1618
call newrating
1619
 Number 315,90,0,4,dword [rating],0x000000
1620
 
1621
 Number 320,110,0,3,dword [FRS],0x000000; MHz
1622
jmp  still
1623
 
1624
.s2:
1625
mov [FRS], 400
1626
 
1627
call newrating
1628
 
1629
 Number 315,90,0,4,dword [rating],0x000000
1630
 
1631
   Number 320,110,0,3,dword [FRS],0x000000; MHz
1632
jmp  still
1633
 
1634
.s3:
1635
mov [FRS], 266
1636
call newrating
1637
 
1638
 Number 315,90,0,4,dword [rating],0x000000
1639
 
1640
  Number 320,110,0,3,dword [FRS],0x000000; MHz
1641
 
1642
jmp  still
1643
 
1644
noclose:
1645
    jmp  still
1646
 
1647
close:
1648
    mov   eax,-1
1649
    int  0x40
1650
 
1651
;**************************** THREAD-SECOND WINDOW
1652
thread_start:
1653
 
1654
    cmp  [num_win2],0
1655
 
1656
    jne  still
1657
 
1658
;================================================RSA test
1659
  call init_test   ; start RSA code
1660
  call module_test
1661
  jmp somewhere
1662
 
1663
 module_test:
1664
;test rsa coding speed
1665
;length of module - 256 bit
1666
  mov  eax,26
1667
  mov  ebx,9
1668
  int  0x40
1669
  add  eax,100 ;test lasts 1 second.
1670
  push eax
1671
.loop:
1672
  mov  ecx,4 ;do 4 iterations
1673
  push ecx   ;this reduces number of calls int 0x40.
1674
.loop1:
1675
  call rsa_test   ;this procedure change all registers
1676
  dec  dword [esp]
1677
  jnz  .loop1
1678
  pop  ecx
1679
  mov  eax,26
1680
  mov  ebx,9
1681
  int  0x40
1682
  cmp  eax,dword [esp]	 ;Is time changed?
1683
  jl   .loop
1684
  pop  eax
1685
  shr  dword [iter],4 ;[iter] - speed in Kb/sec. (every iteration codes 64 bytes)
1686
  ret
1687
 
1688
   somewhere:
1689
;======================================================================
318 heavyiron 1690
CreateTread window_2,thread2_esp
223 Ghost 1691
 
1692
    jmp  still
1693
 
1694
window_2:
1695
    mov  [num_win2],1
1696
    call draw_window_2
1697
 
1698
still_2:
1699
 
1700
    mov  eax,10
1701
    int  0x40
1702
 
1703
    cmp  eax,1
1704
    je	 window_2	;  window_2
1705
    cmp  eax,2		;
1706
    je	 key_2		;  key_2
1707
    cmp  eax,3		;
1708
    je	 button_2	;  button_2
1709
 
1710
    jmp  still_2	;
1711
 
1712
  key_2:		;
1713
    mov  eax,2		;   2
1714
    int  0x40		;
1715
    jmp  still_2	;
1716
 
1717
  button_2:		;
1718
    mov  eax,17 	; 17
1719
    int  0x40		;
1720
 
1721
    cmp  ah,1		; = 1 ?
1722
    jne  noclose_2	; noclose
1723
 
1724
    mov  [num_win2],0	;
1725
 
1726
    or	 eax,-1 	;
1727
    int  0x40
1728
 
1729
  noclose_2:
1730
 
1731
    jmp  still_2	;
1732
 
1733
draw_window_2:
1734
    mov  eax,12 		   ; function 12:tell os about windowdraw
1735
    mov  ebx,1h 		    ; 1, start of draw
1736
    int  0x40
1737
 
1738
 
318 heavyiron 1739
  Window 250,250,419,390, 0x03FFFFFF, 0x805080d0, 0x005080d0
1740
	  ; place size
1741
 
1742
Text 8, 8,0x20000000, standard, standardlen-standard  ;ddeeff
1743
 
223 Ghost 1744
Text 20, 30,0x00000000, STDCA, STDCAlen-STDCA
1745
Text 220, 30,0x00000000, EXTCA, EXTCAlen-EXTCA
1746
 
1747
Number 140,30,1*256,8,dword [stdc],0x000000
1748
Number 340,30,1*256,8,dword [extc],0x000000
1749
 
1750
Text 20, 50,0x00000000, FPU, FPUlen-FPU
1751
Text 120, 50,0x00000000, VME, VMElen-VME
1752
Text 220, 50,0x00000000, DE,  DElen-DE
1753
Text 320, 50,0x00000000, PSE, PSElen-PSE
1754
 
1755
Text 20, 70,0x00000000,TSC, TSClen-TSC
1756
Text 120, 70,0x00000000,MSR, MSRlen-MSR
1757
Text 220,70,0x00000000,PAE, PAElen-PAE
1758
Text 320,70,0x00000000,MCE, MCElen-MCE
1759
 
1760
Text 20,90,0x00000000,CX8, CX8len-CX8
1761
Text 120,90,0x00000000,APIC, APIClen-APIC
1762
Text 220,90,0x00000000,Res, Reslen-Res
1763
Text 320,90,0x00000000,SEP, SEPlen-SEP
1764
 
1765
Text 20,110,0x00000000,MTRR, MTRRlen-MTRR
1766
Text 120,110,0x00000000,PGE, PGElen-PGE
1767
Text 220,110,0x00000000,MCA, MCAlen-MCA
1768
Text 320,110,0x00000000,CMOV, CMOVlen-CMOV
1769
 
1770
Text 20,130,0x00000000,PAT, PATlen-PAT
1771
Text 120,130,0x00000000,PSE36, PSE36len-PSE36
1772
Text 220,130,0x00000000,PSNUM, PSNUMlen-PSNUM
1773
Text 320,130,0x00000000,CLFLUSHn, CLFLUSHnlen-CLFLUSHn
1774
 
1775
Text 20,150,0x00000000,Res, Reslen-Res
1776
Text 120,150,0x00000000,DTS, DTSlen-DTS
1777
Text 220,150,0x00000000,ACPI, ACPIlen-ACPI
1778
Text 320,150,0x00000000,MMX, MMXlen-MMX
1779
 
1780
Text 20,170,0x00000000,FXSR, FXSRlen-FXSR
1781
Text 120,170,0x00000000,SSE, SSElen-SSE
1782
Text  220,170,0x00000000,SSE2, SSE2len-SSE2
1783
Text 320,170,0x00000000,SSn, SSnlen-SSn
1784
 
1785
Text 20,190,0x00000000,HTT, HTTnlen-HTTn
1786
Text 120,190,0x00000000,TM, TMlen-TM
1787
Text 220,190,0x00000000,IA64, IA64len-IA64
1788
Text 320,190,0x00000000,PBE, PBElen-PBE
1789
;---------------
318 heavyiron 1790
DrawLine 5,  415, 205,205,0x8080FF  ;10
223 Ghost 1791
 
1792
mov   eax,$80000000
1793
cpuid
1794
;mov eax, $03020101   for test of reaction
1795
test eax, 80000000h
1796
jnz goooddd
1797
 
1798
baaadd:
1799
Text 100,255,0x00000000,NEF, NEFlen-NEF
1800
jmp too
1801
 
1802
goooddd:
1803
Text 20,215,0x00000000,SS3, SS3len-SS3
1804
Text 20,235,0x00000000,MON, MONlen-MON
1805
Text 20,255,0x00000000,DS_CPL, DS_CPLlen-DS_CPL
1806
Text 20,275,0x00000000,EST, ESTlen-EST
1807
Text 20,295,0x00000000,TM2, TM2len-TM2
318 heavyiron 1808
Text 20,315,0x00000000,VMX, VMXlen-VMX
1809
Text 20,335,0x00000000,SVM, SVMlen-SVM
223 Ghost 1810
 
1811
Text 120,215,0x00000000,CNXT_ID, CNXT_IDlen-CNXT_ID
1812
Text 120,235,0x00000000,CX16, CX16len-CX16
1813
Text 120,255,0x00000000,ETPRD, ETPRDlen-ETPRD
1814
Text 120,275,0x00000000,SYS, SYSlen-SYS
1815
Text 120,295,0x00000000,LAF, LAFlen-LAF
318 heavyiron 1816
Text 120,315,0x00000000,SSSE3, SSSE3len-SSSE3
1817
Text 120,335,0x00000000,MCR8, MCR8len-MCR8
223 Ghost 1818
 
1819
Text 220,215,0x00000000,MP, MPlen-MP
1820
Text 220,235,0x00000000,NX, NXlen-NX
1821
Text 220,255,0x00000000,MMXPi, MMXPilen-MMXPi
1822
Text 220,275,0x00000000,MMXn, MMXnlen-MMXn
1823
Text 220,295,0x00000000,FXSRn, FXSRnlen-FXSRn
318 heavyiron 1824
Text 220,315,0x00000000,DCA,DCAlen-DCA
223 Ghost 1825
 
1826
Text 320,215,0x00000000,FFXSR, FFXSRlen-FFXSR
1827
Text 320,235,0x00000000,TSCP, TSCPlen-TSCP
1828
Text 320,255,0x00000000,LM, LMlen-LM
1829
Text 320,275,0x00000000,DNo, DNolen-DNo
1830
Text 320,295,0x00000000,DN, DNlen-DN
318 heavyiron 1831
Text 320,315,0x00000000,CMPL, CMPLlen-CMPL
1832
 
1833
 
223 Ghost 1834
too:
318 heavyiron 1835
DrawLine 5,  415, 355,355,0x8080FF  ;10
223 Ghost 1836
 
318 heavyiron 1837
Text 20,370,0x00000000,speed, speedlen-speed
1838
Text 135,370,0x00000000,kbpersec, kbperseclen-kbpersec
223 Ghost 1839
 
318 heavyiron 1840
Number 100,370,0,5,dword [iter],0x000000; RSA test results
223 Ghost 1841
 
1842
    mov  eax,12
1843
    mov  ebx,2h
1844
    int  0x40
1845
 
1846
    ret
1847
 
1848
num_win2 db 0
1849
 
1850
;   *******  main window *******
1851
 
1852
draw_window:
1853
   mov eax,12
1854
   mov	ebx,1h
1855
   int	0x40
1856
 
318 heavyiron 1857
  Window 150,150,349,385, 0x03FFFFFF, 0x805080d0, 0x005080d0
1858
	  ; place size
223 Ghost 1859
 
318 heavyiron 1860
  Button 20,350,92,23,2,0x03FFFFFF   ;  button "press for more"
223 Ghost 1861
 
1862
	mov	esi, knopka
1863
	mov	edi, img_area2
1864
	call	load_gif2
318 heavyiron 1865
PutImage 20,350,93,24,img_area2+8   ; image "press for more"
1866
;         place   size
223 Ghost 1867
 
1868
 
318 heavyiron 1869
    Text 8,8,0x20000000,zag,zaglen-zag	; application header
223 Ghost 1870
 
1871
    mov  eax,12
1872
    mov  ebx,2h
1873
    int  0x40
1874
 
318 heavyiron 1875
    Text 135,290,0x00000000,instruct, instructlen-instruct
223 Ghost 1876
 
318 heavyiron 1877
    DrawLine 15,  335, 345,345,0x8080FF
1878
    DrawLine 335,  335, 295,345,0x8080FF
1879
    DrawLine  15,   15, 295,345,0x8080FF
1880
    DrawLine  15,  130, 295,295,0x8080FF
1881
    DrawLine 235,  335, 295,295,0x8080FF
223 Ghost 1882
 
1883
  cmp dword[smallvendor], 'cAMD'
1884
  jne cont
1885
  cmp [f], $6
1886
  jne cont
1887
  cmp [f], $6
1888
  jl cont
1889
 
318 heavyiron 1890
   Button 245,105,69,15,3,0x030000FF  ;  button for rating
223 Ghost 1891
 
1892
    Text 250,110,0x00FFFFFF,FR, FRlen-FR
1893
 
1894
   call newrating; !!!!
1895
 
1896
     cont:
1897
;================_RAM_==============
1898
  mov eax, 18
1899
  mov ebx, 16
1900
  int 0x40
1901
 
1902
  shr eax, 10
1903
 
1904
  mov [ram_size_a], eax
1905
 
1906
  mov eax, 18
1907
  mov ebx, 17
1908
  int 0x40
1909
 
1910
  shr eax, 10
1911
 
1912
  mov [ram_size_t], eax
1913
 
318 heavyiron 1914
  Text 120,360,0x00000000,ram, ramlen-ram
1915
  Number 205,360,0,4,dword [ram_size_a],0x000000
223 Ghost 1916
 
318 heavyiron 1917
  Number 275,360,0,4,dword [ram_size_t],0x000000
1918
  Text 305,360,0x00000000,mb, mblen-mb
223 Ghost 1919
 
1920
;==============================
1921
 
1922
    Text 20,70,0x00000000,tsum, tsumlen-tsum   ;
1923
    Text 20,110,0x00000000,cpuname, cpunamelen-cpuname;
318 heavyiron 1924
    Text 260,270,0x00000000,typen, typenlen-typen;
223 Ghost 1925
    Text 180, 70,0x00000000,tech, techlen-tech;
1926
 
1927
    Number 87,70,0,4,dword [total],0x000000; MHz
1928
    Number 115,70,0,2,dword [sot],0x000000; KHz
318 heavyiron 1929
 
223 Ghost 1930
    Text 20,190,0x00000000,cache2, cache2len-cache2
318 heavyiron 1931
    Text 20,230,0x00000000,cache3, cache3len-cache3
1932
    Text 20,250,0x00000000,cache4, cache4len-cache4
1933
 
1934
 
223 Ghost 1935
    Number 80,130,1*256,1,dword [f],0x000000 ;
1936
    Number 80,150,1*256,1,dword [m],0x000000;
1937
    Number 80,170,1*256,1,dword [s],0x000000;
1938
 
1939
    Number 115,130,1*256,2,dword [ef],0x000000 ;
1940
    Number 115,150,1*256,2,dword [em],0x000000;
1941
 
1942
Text   20,50,0x00000000,multil, multillen-multil
1943
Number 90,50,0,2,dword [multb],0x000000;
1944
Number 110,50,0,1,dword [multa],0x000000;
1945
 
1946
Text   180,50,0x00000000,freql, freqllen-freql
1947
Number 264,50,0,4,dword [freqbb],0x000000;
318 heavyiron 1948
Number 294,50,0,2,dword [freqll],0x000000;
1949
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1950
;Text 120,300,0x00000000,logcpus, logcpuslen-logcpus
1951
;Number 255,300,0,2,dword [number_of_log_cpus],0x000000
223 Ghost 1952
 
318 heavyiron 1953
 
223 Ghost 1954
    Text 20,30,0x00000000,stm, stmlen-stm
1955
;  Fix for deleting leading whitespaces
1956
;  in Intel P4's internal name
1957
;  by Madis Calme
1958
;  23.12.2004 ver. 0.81
1959
    cld
1960
    mov  edi,myname
1961
    mov  al,20h
1962
    or	 ecx,-1
1963
    repe scasb
1964
    dec  edi
1965
    mov  esi,mynamelen
1966
    sub  esi,edi
1967
    Text 110, 30, 0x00000000, edi, esi
1968
;    Text 110,40,0x00000000,myname, mynamelen-myname
1969
;-
318 heavyiron 1970
Text 20,270,0x00000000,brandid, brandidlen-brandid
223 Ghost 1971
 
1972
    ret 		;
1973
 
1974
load_gif:
1975
	mov	edi, img_area
1976
load_gif2:
1977
	gif2img esi,edi
1978
	ret
1979
 
1980
; DATA AREA
1981
 
1982
zag:
318 heavyiron 1983
     db   'CPUID 2.17 by Sergey Kuzmin and the KolibriOS team'
223 Ghost 1984
zaglen:
1985
tsum:
1986
    db 'Frequency:     .   MHz'
1987
tsumlen:
1988
ost dd ?
1989
sot dd ?
1990
f dd ?
1991
m dd ?
1992
s dd ?
1993
t dd ?
1994
 
1995
ef dd ?
1996
em dd ?
1997
 
1998
multiplier dd ?
1999
multa dd ?
2000
multb dd ?
2001
 
2002
smallvendor dd ?
2003
L1d  dd ?
2004
L1i  dd ?
2005
L2   dd ?
2006
L3   dd ?
2007
total dd 0x0
2008
total1 dd 0x0
2009
rating dd 0x0
2010
rat dd 0x0  ;
2011
micron dd ?
2012
sse3sup dd ?
2013
brand dd ?
2014
 
2015
ram_size_a dd ?
2016
ram_size_t dd ?
2017
 
318 heavyiron 2018
stdc dd ?
2019
extc dd ?
2020
 
2021
FRS dd ?
2022
freqsel db ?
2023
 
2024
temp dd ?
2025
freqbb dd ?
2026
freqll dd ?
2027
 
2028
wayli dd ?
2029
lineli dd ?
2030
 
2031
wayld dd ?
2032
lineld dd ?
2033
 
2034
wayl2 dd ?
2035
linel2 dd ?
2036
 
2037
wayl3 dd ?
2038
linel3 dd ?
2039
 
2040
;number_of_log_cpus dd ?
2041
 
2042
che db ? ; numbers of calls for Intel caches detection
2043
 
223 Ghost 2044
ram:
2045
db 'Available RAM:     out of'
2046
ramlen:
2047
 
2048
NEF:
2049
db 'EXTENDED FEATURES ARE NOT AVAILABLE'
2050
NEFlen:
2051
 
2052
mb :
2053
db 'MB'
2054
mblen:
2055
 
318 heavyiron 2056
;logcpus :
2057
;db 'Number of logical CPU:'
2058
;logcpuslen:
2059
 
223 Ghost 2060
speed :
2061
db 'PERFORMANCE:'
2062
speedlen:
2063
 
2064
kbpersec:
2065
db 'KB/SEC'
2066
kbperseclen:
2067
 
2068
instruct:
2069
    db 'Instruction sets'
2070
instructlen:
2071
 
2072
standard:
2073
    db 'Standard and Extended features plus Performance test'
2074
standardlen:
2075
 
2076
FR:
2077
    db 'Choose FSB:'
2078
FRlen:
2079
 
2080
STDCA:
2081
    db 'Highest STD call is         '
2082
STDCAlen:
2083
 
2084
EXTCA:
2085
    db 'Highest EXT call is         h'
2086
EXTCAlen:
2087
 
2088
brandid:
2089
    db 'Brand:'
2090
brandidlen:
2091
 
2092
oblom:
2093
    db 'SORRY, CPUID IS NOT AVAILABLE'
2094
oblomlen:
2095
other:
2096
    db 'SORRY, THIS VENDOR IS NOT SUPPORTED YET'
2097
otherlen:
318 heavyiron 2098
 
223 Ghost 2099
cpuname:
2100
    db 'CPU VENDOR:             '
2101
cpunamelen:
2102
fam:
2103
    db 'FAMILY:     std    ext'
2104
famlen:
2105
mode:
2106
    db 'MODEL:      std    ext'
2107
modelen:
2108
step:
2109
    db 'STEPPING:'
2110
steplen:
318 heavyiron 2111
 
223 Ghost 2112
cache2:
2113
 
318 heavyiron 2114
    db 'L1(data):     KB       -way set     -byte line size'
223 Ghost 2115
cache2len:
2116
 
2117
cache:
318 heavyiron 2118
    db 'L1(inst):     KB       -way set     -byte line size'
223 Ghost 2119
cachelen:
2120
 
318 heavyiron 2121
cache3:
2122
 
2123
    db 'L2:      KB            -way set     -byte line size'
2124
cache3len:
2125
 
2126
cache4:
2127
    db 'L3:      KB            -way set     -byte line size'
2128
cache4len:
2129
 
223 Ghost 2130
cacheP4:
2131
 
318 heavyiron 2132
    db 'L1(inst):     Kuops    -way set     -byte line size'
223 Ghost 2133
cacheP4len:
2134
 
2135
tech:
2136
  db 'Technology: 0.   micron '
2137
techlen:
2138
 
2139
typen:
2140
  db 'Type:'
2141
typenlen:
2142
 
2143
pr:
2144
  db 'P-rating:'
2145
prlen:
2146
 
2147
multil:
2148
  db 'Multiplier:   .'
2149
multillen:
2150
 
2151
freql:
2152
  db 'System clock:     .   MHz'
2153
freqllen:
2154
 
2155
name:
2156
    db 'CODENAME:'
2157
namelen:
318 heavyiron 2158
 
223 Ghost 2159
AMDn:
2160
    db 'AMD'
2161
AMDnlen:
2162
Inteln:
2163
    db 'Intel'
2164
Intelnlen:
2165
Cyrixn:
2166
    db 'Cyrix'
2167
Cyrixnlen:
2168
IDTn:
2169
     db 'IDT/Centaur'
2170
IDTnlen:
2171
Centaurn:
2172
     db 'VIA'
2173
Centaurnlen:
2174
 
2175
Tranmsmetan:
2176
     db 'Transmeta'
2177
Tranmsmetanlen:
2178
 
2179
MMXs:
2180
    db 'MMX:         '
2181
MMXslen:
2182
 
2183
mmxp:
2184
    db 'MMX+:         '
2185
mmxplen:
2186
 
2187
HTT:
2188
    db 'HTT:          '
2189
HTTlen:
2190
 
2191
HTTn:
2192
    db 'HTT:         '
2193
HTTnlen:
2194
 
2195
sse3:
2196
    db 'SSE3:         '
2197
sse3len:
2198
now:
2199
    db '3DNOW!:         '
2200
nowlen:
2201
nowp:
2202
    db '3DNOW!+:         '
2203
nowplen:
2204
 
2205
;-Type
2206
 
2207
t1:
2208
    db 'OEM'
2209
t1len:
2210
 
2211
t2:
2212
    db 'Overdrive'
2213
t2len:
2214
 
2215
t3:
2216
    db 'Dual'
2217
t3len:
2218
 
2219
t4:
2220
    db 'Unknown'
2221
t4len:
2222
 
2223
;----------Intel
2224
P50:
2225
db 'P5 A-step'
2226
P50len:
2227
P5:
2228
db 'P5'
2229
P5len:
2230
P54T:
2231
db 'P24T Overdrive'
2232
P54Tlen:
2233
P54C:
2234
db 'P54C'
2235
P54Clen:
2236
P55C:
2237
db 'P55C (with MMX)'
2238
P55Clen:
2239
; ---
2240
P60:
2241
db 'Pentium Pro A-step'
2242
P60len:
2243
P61:
2244
db 'Pentium Pro'
2245
P61len:
2246
P63:
2247
db 'Pentium II (Klamath)'
2248
P63len:
2249
P65:
2250
db 'Pentium II (Deschutes)'
2251
P65len:
2252
P66:
2253
db 'Celeron (Medocino)'
2254
P66len:
2255
P67:
2256
db 'Pentium III (Katmai)'
2257
P67len:
2258
P68:
2259
db 'Pentium III (Coppermine)'
2260
P68len:
2261
P69:
2262
db 'Pentium M (Banias)'
2263
P69len:
2264
P6A:
2265
db 'Pentium III Xeon (Cascades)'
2266
P6Alen:
2267
P6B:
2268
db 'Pentium III (Tualatin)'
2269
P6Blen:
2270
P6D:
2271
db 'Pentium M (Dothan)'
2272
P6Dlen:
2273
P6E:
318 heavyiron 2274
db 'Pentium M (Yonah)/ Core'
223 Ghost 2275
P6Elen:
2276
P6F:
318 heavyiron 2277
db 'Pentium D (Conroe)/ Core 2 (Kentsfield)'
223 Ghost 2278
P6Flen:
2279
;---
2280
PS0:
2281
db 'Itanium (IA-64)'
2282
PS0len:
2283
;------------
2284
PF0:
2285
db 'Pentium 4 (Willamete)'
2286
PF0len:
2287
PF2:
2288
db 'Pentium 4 (Northwood)'
2289
PF2len:
2290
PF3:
2291
db 'Pentium 4 (Prescott)'
2292
PF3len:
2293
PF5:
2294
db 'Pentium 4 (Tejas)'
2295
PF5len:
2296
PF6:
2297
db 'Pentium 4 (Presler)'
2298
PF6len:
2299
;----------------Intel Celerons
2300
P65c:
2301
db 'Celeron (Covington)'
2302
P65clen:
2303
P68c:
2304
db 'Celeron (Coppermine)'
2305
P68clen:
2306
P6Bc:
2307
db 'Celeron (Tualatin)'
2308
P6Bclen:
2309
PF0c:
2310
db 'Celeron (Willamete)'
2311
PF0clen:
2312
PF2c:
2313
db 'Celeron (Northwood)'
2314
PF2clen:
2315
PF3c:
2316
db 'Celeron (Prescott)'
2317
PF3clen:
2318
PF5c:
2319
db 'Celeron D (Texas)'
2320
PF5clen:
2321
PF6c:
2322
db 'Celeron D (Presler)'
2323
PF6clen:
2324
;---------AMD
2325
A50:
2326
db 'K5 (PR75, PR90, PR100)'
2327
A50len:
2328
A51:
2329
db '5k86 (PR120, PR133)'
2330
A51len:
2331
A52:
2332
db '5k86 (PR166)'
2333
A52len:
2334
A53:
2335
db '5k86 (PR200)'
2336
A53len:
2337
A56:
2338
db 'K6'
2339
A56len:
2340
A57:
2341
db 'K6'
2342
A57len:
2343
A58:
2344
db 'K6-2'
2345
A58len:
2346
A59:
2347
db 'K6-III'
2348
A59len:
2349
A5D:
2350
db 'K6-2+ or K6-III+'
2351
A5Dlen:
2352
;-------------------
2353
At1:
2354
db 'Athlon'
2355
At1len:
2356
At2:
2357
db 'Athlon'
2358
At2len:
2359
At3:
2360
db 'Duron (Spitfire)'
2361
At3len:
2362
At4:
2363
db 'Athlon (Thunderbird)'
2364
At4len:
2365
At6:
2366
db 'AthlonXP (Palomino)'
2367
At6len:
2368
At7:
2369
db 'Duron (Morgan)'
2370
At7len:
2371
At8:
2372
db 'AthlonXP (Thoroughbred)'
2373
At8len:
2374
At8a:
2375
db 'Duron (Applebred)'
2376
At8alen:
2377
Ata:
2378
db 'AthlonXP (Barton)'
2379
Atalen:
2380
Atat:
2381
db 'AthlonXP (Thorton)'
2382
Atatlen:
2383
;-------------------
2384
AF1:
2385
db 'Dual-core Opteron'
2386
AF1len:
2387
AF3:
2388
db 'Athlon 64 (Toledo)'
2389
AF3len:
2390
AF4:
2391
db 'Athlon 64 (ClawHammer)'
2392
AF4len:
2393
AF5:
2394
db 'Opteron/Athlon 64 FX (SledgeHammer)'
2395
AF5len:
2396
 
2397
AFC:
2398
db 'Athlon 64 (Newcastle)'
2399
AFClen:
2400
 
2401
AFF:
2402
db 'Athlon 64 (Winchester)'
2403
AFFlen:
2404
 
2405
AFS:
2406
db 'Athlon 64 (San Diego)'
2407
AFSlen:
2408
 
2409
AFV:
2410
db 'Athlon 64 (Venice)'
2411
AFVlen:
2412
 
2413
AFCs:
2414
db 'Sempron (Paris)'
2415
AFCslen:
2416
 
2417
AFCsp:
2418
db 'Sempron (Palermo)'
2419
AFCsplen:
2420
 
2421
;---------Cyrix
2422
C52:
2423
db '6x86 M1'
2424
C52len:
2425
C54:
2426
db 'MediaGX'
2427
C54len:
2428
C60:
2429
db '6x86MX M2'
2430
C60len:
2431
C65:
2432
db 'C3 (Cyrix M2)' ;?
2433
C65len:
2434
;--------IDT
2435
V54:
2436
db 'WinChip C6'
2437
V54len:
2438
V58:
2439
db 'WinChip 2'
2440
V58len:
2441
V59:
2442
db 'WinChip 3'
2443
V59len:
2444
;-------VIA
2445
V66:
2446
db 'C3 (Samuel)'  ; Joshua is unreleased 065
2447
V66len:
2448
V67:
2449
db 'C3 (Samuel2/Ezra)' ; ?
2450
V67len:
2451
V68:
2452
db 'C3 (Ezra-T/Eden)' ;?
2453
V68len:
2454
V69:
2455
db 'C3 (Antaur/Nehemiah)' ;?
2456
V69len:
2457
VA:
2458
db 'C7 (Esther)' ;?
2459
VAlen:
2460
;---------Transmeta
2461
T5:
2462
db 'Crusoe' ;
2463
T5len:
2464
TF:
2465
db 'Efficeon' ;
2466
TFlen:
2467
;---------
2468
NG:
2469
    db 'Next generation CPU'
2470
NGlen:
2471
 
2472
stm:
2473
    db 'Internal name:'
2474
stmlen:
2475
 
318 heavyiron 2476
athloncoef	db	110, 115, 120, 125, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 120
2477
		db	190, 120, 200, 130, 135, 140, 210, 150, 220, 160, 165, 170, 180, 230, 240
2478
athlonmcoef:	db	110, 115, 120, 125, 50, 55, 60, 65,  70, 75, 80, 85, 90, 95, 100, 105
2479
		db	30, 190, 40, 200, 130, 135, 14, 210, 150, 220, 160, 165, 170, 230, 240
2480
athloncoef3	db	45, 50, 40, 55, 25, 30, 60, 35
2481
p4coef		db	160, 170, 180, 190, 200, 210, 220, 230, 80, 90, 100, 110, 120, 130, 140, 150	; Pentium 4 (Willamete)
2482
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
223 Ghost 2483
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
2484
 
2485
myname:
2486
   db '                                                '
2487
mynamelen:
2488
 
2489
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2490
;
2491
;  include images and unpacking- and hasharea
2492
;
2493
include 'logos.inc' ; include file where gif's are stored
2494
img_area:	   ; image is going to be unpacked to here
2495
rb 201*49*3+8	   ; image resolution (bits to reserve)
2496
 
2497
img_area2:	   ; image is going to be unpacked to here
2498
rb 93*24*3+8	   ; image resolution (bits to reserve)
2499
 
2500
gif_hash_area:
2501
rd 4096+1	   ;hash area size for unpacking gif
2502
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2503
 
2504
I_END:
2505
align 4
2506
  udata
2507
  thread2_stack_area rb 64
2508
  thread2_esp = $
2509
U_END: