Subversion Repositories Kolibri OS

Rev

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