Subversion Repositories Kolibri OS

Rev

Rev 318 | 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
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
;----------------
450 Ghost 1575
still:
1576
 
1577
; çàòåì ïåðåõîäèì â öèêë îæèäàíèÿ ñîáûòèé
1578
event_wait:
1579
 
1580
    ;================_RAM_==============
1581
  Number 205,360,0,4,dword [ram_size_a],0xFFFFFF
1582
 
1583
  mov eax, 18
1584
  mov ebx, 16
1585
  int 0x40
1586
 
1587
  shr eax, 10
1588
 
1589
  mov [ram_size_a], eax
1590
 
1591
  mov eax, 18
1592
  mov ebx, 17
1593
  int 0x40
1594
 
1595
  shr eax, 10
1596
 
1597
  mov [ram_size_t], eax
1598
 
1599
  Text 120,360,0x00000000,ram, ramlen-ram
1600
 
1601
  Number 205,360,0,4,dword [ram_size_a],0x000000
1602
 
1603
  Number 275,360,0,4,dword [ram_size_t],0x000000
1604
  Text 305,360,0x00000000,mb, mblen-mb
1605
 
1606
;==============================
1607
 
1608
	mov	ebx,50	     ; æäåìñ 1 ñåê
1609
	mov	eax,23	     ; ôóíêöèÿ 23: îæèäàíèå ñîáûòèÿ
1610
	int	0x40
1611
 
1612
;    mov  eax,10
1613
;    int  0x40           ;
223 Ghost 1614
    cmp  eax,1		;
450 Ghost 1615
    je	 red		;  redraw
223 Ghost 1616
    cmp  eax,2		;
1617
    je	 key		;  key
1618
    cmp  eax,3		;
1619
    je	 button 	;  button
1620
    jmp  still		;
1621
  key:			;
1622
    mov  eax,2		;  
1623
    int  0x40		;
1624
    jmp  still		;
1625
  button:		;
1626
    mov  eax,17 	;
1627
    int  0x40		;
1628
    cmp  ah,1		;  = 1 ?
1629
    je	close		; close
1630
 
1631
    cmp  ah,2		;  = 2 ?
1632
    je	thread_start	;
1633
			;
1634
    cmp  ah,3		;  = 3 ?
1635
    je	vybor		; vybor
1636
 
1637
    jne  noclose
1638
 
450 Ghost 1639
    jmp     event_wait
223 Ghost 1640
vybor:
1641
 
1642
 Number 315,90,0,4,dword [rating],0xFFFFFF ;
1643
 
1644
 Number 320,110,0,3,dword [FRS],0xFFFFFF; MHz
1645
 
1646
cmp [FRS], 266
1647
jz .s1
1648
cmp [FRS], 333
1649
jz .s2
1650
cmp [FRS], 400
1651
jz .s3
1652
 
1653
.s1:
1654
mov [FRS], 333
1655
call newrating
1656
 Number 315,90,0,4,dword [rating],0x000000
1657
 
1658
 Number 320,110,0,3,dword [FRS],0x000000; MHz
1659
jmp  still
1660
 
1661
.s2:
1662
mov [FRS], 400
1663
 
1664
call newrating
1665
 
1666
 Number 315,90,0,4,dword [rating],0x000000
1667
 
1668
   Number 320,110,0,3,dword [FRS],0x000000; MHz
1669
jmp  still
1670
 
1671
.s3:
1672
mov [FRS], 266
1673
call newrating
1674
 
1675
 Number 315,90,0,4,dword [rating],0x000000
1676
 
1677
  Number 320,110,0,3,dword [FRS],0x000000; MHz
1678
 
1679
jmp  still
1680
 
1681
noclose:
1682
    jmp  still
1683
 
1684
close:
1685
    mov   eax,-1
1686
    int  0x40
1687
 
1688
;**************************** THREAD-SECOND WINDOW
1689
thread_start:
1690
 
1691
    cmp  [num_win2],0
1692
 
1693
    jne  still
1694
 
1695
;================================================RSA test
1696
  call init_test   ; start RSA code
1697
  call module_test
1698
  jmp somewhere
1699
 
1700
 module_test:
1701
;test rsa coding speed
1702
;length of module - 256 bit
1703
  mov  eax,26
1704
  mov  ebx,9
1705
  int  0x40
1706
  add  eax,100 ;test lasts 1 second.
1707
  push eax
1708
.loop:
1709
  mov  ecx,4 ;do 4 iterations
1710
  push ecx   ;this reduces number of calls int 0x40.
1711
.loop1:
1712
  call rsa_test   ;this procedure change all registers
1713
  dec  dword [esp]
1714
  jnz  .loop1
1715
  pop  ecx
1716
  mov  eax,26
1717
  mov  ebx,9
1718
  int  0x40
1719
  cmp  eax,dword [esp]	 ;Is time changed?
1720
  jl   .loop
1721
  pop  eax
1722
  shr  dword [iter],4 ;[iter] - speed in Kb/sec. (every iteration codes 64 bytes)
1723
  ret
1724
 
1725
   somewhere:
1726
;======================================================================
318 heavyiron 1727
CreateTread window_2,thread2_esp
223 Ghost 1728
 
1729
    jmp  still
1730
 
1731
window_2:
1732
    mov  [num_win2],1
1733
    call draw_window_2
1734
 
1735
still_2:
1736
 
1737
    mov  eax,10
1738
    int  0x40
1739
 
1740
    cmp  eax,1
1741
    je	 window_2	;  window_2
1742
    cmp  eax,2		;
1743
    je	 key_2		;  key_2
1744
    cmp  eax,3		;
1745
    je	 button_2	;  button_2
1746
 
1747
    jmp  still_2	;
1748
 
1749
  key_2:		;
1750
    mov  eax,2		;   2
1751
    int  0x40		;
1752
    jmp  still_2	;
1753
 
1754
  button_2:		;
1755
    mov  eax,17 	; 17
1756
    int  0x40		;
1757
 
1758
    cmp  ah,1		; = 1 ?
1759
    jne  noclose_2	; noclose
1760
 
1761
    mov  [num_win2],0	;
1762
 
1763
    or	 eax,-1 	;
1764
    int  0x40
1765
 
1766
  noclose_2:
1767
 
1768
    jmp  still_2	;
1769
 
1770
draw_window_2:
1771
    mov  eax,12 		   ; function 12:tell os about windowdraw
1772
    mov  ebx,1h 		    ; 1, start of draw
1773
    int  0x40
1774
 
1775
 
318 heavyiron 1776
  Window 250,250,419,390, 0x03FFFFFF, 0x805080d0, 0x005080d0
1777
	  ; place size
1778
 
1779
Text 8, 8,0x20000000, standard, standardlen-standard  ;ddeeff
1780
 
223 Ghost 1781
Text 20, 30,0x00000000, STDCA, STDCAlen-STDCA
1782
Text 220, 30,0x00000000, EXTCA, EXTCAlen-EXTCA
1783
 
1784
Number 140,30,1*256,8,dword [stdc],0x000000
1785
Number 340,30,1*256,8,dword [extc],0x000000
1786
 
1787
Text 20, 50,0x00000000, FPU, FPUlen-FPU
1788
Text 120, 50,0x00000000, VME, VMElen-VME
1789
Text 220, 50,0x00000000, DE,  DElen-DE
1790
Text 320, 50,0x00000000, PSE, PSElen-PSE
1791
 
1792
Text 20, 70,0x00000000,TSC, TSClen-TSC
1793
Text 120, 70,0x00000000,MSR, MSRlen-MSR
1794
Text 220,70,0x00000000,PAE, PAElen-PAE
1795
Text 320,70,0x00000000,MCE, MCElen-MCE
1796
 
1797
Text 20,90,0x00000000,CX8, CX8len-CX8
1798
Text 120,90,0x00000000,APIC, APIClen-APIC
1799
Text 220,90,0x00000000,Res, Reslen-Res
1800
Text 320,90,0x00000000,SEP, SEPlen-SEP
1801
 
1802
Text 20,110,0x00000000,MTRR, MTRRlen-MTRR
1803
Text 120,110,0x00000000,PGE, PGElen-PGE
1804
Text 220,110,0x00000000,MCA, MCAlen-MCA
1805
Text 320,110,0x00000000,CMOV, CMOVlen-CMOV
1806
 
1807
Text 20,130,0x00000000,PAT, PATlen-PAT
1808
Text 120,130,0x00000000,PSE36, PSE36len-PSE36
1809
Text 220,130,0x00000000,PSNUM, PSNUMlen-PSNUM
1810
Text 320,130,0x00000000,CLFLUSHn, CLFLUSHnlen-CLFLUSHn
1811
 
1812
Text 20,150,0x00000000,Res, Reslen-Res
1813
Text 120,150,0x00000000,DTS, DTSlen-DTS
1814
Text 220,150,0x00000000,ACPI, ACPIlen-ACPI
1815
Text 320,150,0x00000000,MMX, MMXlen-MMX
1816
 
1817
Text 20,170,0x00000000,FXSR, FXSRlen-FXSR
1818
Text 120,170,0x00000000,SSE, SSElen-SSE
1819
Text  220,170,0x00000000,SSE2, SSE2len-SSE2
1820
Text 320,170,0x00000000,SSn, SSnlen-SSn
1821
 
1822
Text 20,190,0x00000000,HTT, HTTnlen-HTTn
1823
Text 120,190,0x00000000,TM, TMlen-TM
1824
Text 220,190,0x00000000,IA64, IA64len-IA64
1825
Text 320,190,0x00000000,PBE, PBElen-PBE
1826
;---------------
318 heavyiron 1827
DrawLine 5,  415, 205,205,0x8080FF  ;10
223 Ghost 1828
 
1829
mov   eax,$80000000
1830
cpuid
1831
;mov eax, $03020101   for test of reaction
1832
test eax, 80000000h
1833
jnz goooddd
1834
 
1835
baaadd:
1836
Text 100,255,0x00000000,NEF, NEFlen-NEF
1837
jmp too
1838
 
1839
goooddd:
1840
Text 20,215,0x00000000,SS3, SS3len-SS3
1841
Text 20,235,0x00000000,MON, MONlen-MON
1842
Text 20,255,0x00000000,DS_CPL, DS_CPLlen-DS_CPL
1843
Text 20,275,0x00000000,EST, ESTlen-EST
1844
Text 20,295,0x00000000,TM2, TM2len-TM2
318 heavyiron 1845
Text 20,315,0x00000000,VMX, VMXlen-VMX
1846
Text 20,335,0x00000000,SVM, SVMlen-SVM
223 Ghost 1847
 
1848
Text 120,215,0x00000000,CNXT_ID, CNXT_IDlen-CNXT_ID
1849
Text 120,235,0x00000000,CX16, CX16len-CX16
1850
Text 120,255,0x00000000,ETPRD, ETPRDlen-ETPRD
1851
Text 120,275,0x00000000,SYS, SYSlen-SYS
1852
Text 120,295,0x00000000,LAF, LAFlen-LAF
318 heavyiron 1853
Text 120,315,0x00000000,SSSE3, SSSE3len-SSSE3
1854
Text 120,335,0x00000000,MCR8, MCR8len-MCR8
223 Ghost 1855
 
1856
Text 220,215,0x00000000,MP, MPlen-MP
1857
Text 220,235,0x00000000,NX, NXlen-NX
1858
Text 220,255,0x00000000,MMXPi, MMXPilen-MMXPi
1859
Text 220,275,0x00000000,MMXn, MMXnlen-MMXn
1860
Text 220,295,0x00000000,FXSRn, FXSRnlen-FXSRn
318 heavyiron 1861
Text 220,315,0x00000000,DCA,DCAlen-DCA
223 Ghost 1862
 
1863
Text 320,215,0x00000000,FFXSR, FFXSRlen-FFXSR
1864
Text 320,235,0x00000000,TSCP, TSCPlen-TSCP
1865
Text 320,255,0x00000000,LM, LMlen-LM
1866
Text 320,275,0x00000000,DNo, DNolen-DNo
1867
Text 320,295,0x00000000,DN, DNlen-DN
318 heavyiron 1868
Text 320,315,0x00000000,CMPL, CMPLlen-CMPL
1869
 
1870
 
223 Ghost 1871
too:
318 heavyiron 1872
DrawLine 5,  415, 355,355,0x8080FF  ;10
223 Ghost 1873
 
318 heavyiron 1874
Text 20,370,0x00000000,speed, speedlen-speed
1875
Text 135,370,0x00000000,kbpersec, kbperseclen-kbpersec
223 Ghost 1876
 
318 heavyiron 1877
Number 100,370,0,5,dword [iter],0x000000; RSA test results
223 Ghost 1878
 
1879
    mov  eax,12
1880
    mov  ebx,2h
1881
    int  0x40
1882
 
1883
    ret
1884
 
1885
num_win2 db 0
1886
 
1887
;   *******  main window *******
1888
 
1889
draw_window:
1890
   mov eax,12
1891
   mov	ebx,1h
1892
   int	0x40
1893
 
318 heavyiron 1894
  Window 150,150,349,385, 0x03FFFFFF, 0x805080d0, 0x005080d0
1895
	  ; place size
223 Ghost 1896
 
318 heavyiron 1897
  Button 20,350,92,23,2,0x03FFFFFF   ;  button "press for more"
223 Ghost 1898
 
1899
	mov	esi, knopka
1900
	mov	edi, img_area2
1901
	call	load_gif2
318 heavyiron 1902
PutImage 20,350,93,24,img_area2+8   ; image "press for more"
1903
;         place   size
223 Ghost 1904
 
1905
 
318 heavyiron 1906
    Text 8,8,0x20000000,zag,zaglen-zag	; application header
223 Ghost 1907
 
1908
    mov  eax,12
1909
    mov  ebx,2h
1910
    int  0x40
1911
 
318 heavyiron 1912
    Text 135,290,0x00000000,instruct, instructlen-instruct
223 Ghost 1913
 
318 heavyiron 1914
    DrawLine 15,  335, 345,345,0x8080FF
1915
    DrawLine 335,  335, 295,345,0x8080FF
1916
    DrawLine  15,   15, 295,345,0x8080FF
1917
    DrawLine  15,  130, 295,295,0x8080FF
1918
    DrawLine 235,  335, 295,295,0x8080FF
223 Ghost 1919
 
1920
  cmp dword[smallvendor], 'cAMD'
1921
  jne cont
1922
  cmp [f], $6
1923
  jne cont
1924
  cmp [f], $6
1925
  jl cont
1926
 
318 heavyiron 1927
   Button 245,105,69,15,3,0x030000FF  ;  button for rating
223 Ghost 1928
 
1929
    Text 250,110,0x00FFFFFF,FR, FRlen-FR
1930
 
1931
   call newrating; !!!!
1932
 
1933
     cont:
1934
 
1935
 
1936
    Text 20,70,0x00000000,tsum, tsumlen-tsum   ;
1937
    Text 20,110,0x00000000,cpuname, cpunamelen-cpuname;
318 heavyiron 1938
    Text 260,270,0x00000000,typen, typenlen-typen;
223 Ghost 1939
    Text 180, 70,0x00000000,tech, techlen-tech;
1940
 
1941
    Number 87,70,0,4,dword [total],0x000000; MHz
1942
    Number 115,70,0,2,dword [sot],0x000000; KHz
318 heavyiron 1943
 
223 Ghost 1944
    Text 20,190,0x00000000,cache2, cache2len-cache2
318 heavyiron 1945
    Text 20,230,0x00000000,cache3, cache3len-cache3
1946
    Text 20,250,0x00000000,cache4, cache4len-cache4
1947
 
1948
 
223 Ghost 1949
    Number 80,130,1*256,1,dword [f],0x000000 ;
1950
    Number 80,150,1*256,1,dword [m],0x000000;
1951
    Number 80,170,1*256,1,dword [s],0x000000;
1952
 
1953
    Number 115,130,1*256,2,dword [ef],0x000000 ;
1954
    Number 115,150,1*256,2,dword [em],0x000000;
1955
 
1956
Text   20,50,0x00000000,multil, multillen-multil
1957
Number 90,50,0,2,dword [multb],0x000000;
1958
Number 110,50,0,1,dword [multa],0x000000;
1959
 
1960
Text   180,50,0x00000000,freql, freqllen-freql
1961
Number 264,50,0,4,dword [freqbb],0x000000;
318 heavyiron 1962
Number 294,50,0,2,dword [freqll],0x000000;
1963
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1964
;Text 120,300,0x00000000,logcpus, logcpuslen-logcpus
1965
;Number 255,300,0,2,dword [number_of_log_cpus],0x000000
223 Ghost 1966
 
318 heavyiron 1967
 
223 Ghost 1968
    Text 20,30,0x00000000,stm, stmlen-stm
1969
;  Fix for deleting leading whitespaces
1970
;  in Intel P4's internal name
1971
;  by Madis Calme
1972
;  23.12.2004 ver. 0.81
1973
    cld
1974
    mov  edi,myname
1975
    mov  al,20h
1976
    or	 ecx,-1
1977
    repe scasb
1978
    dec  edi
1979
    mov  esi,mynamelen
1980
    sub  esi,edi
1981
    Text 110, 30, 0x00000000, edi, esi
1982
;    Text 110,40,0x00000000,myname, mynamelen-myname
1983
;-
318 heavyiron 1984
Text 20,270,0x00000000,brandid, brandidlen-brandid
223 Ghost 1985
 
1986
    ret 		;
1987
 
1988
load_gif:
1989
	mov	edi, img_area
1990
load_gif2:
1991
	gif2img esi,edi
1992
	ret
1993
 
1994
; DATA AREA
1995
 
1996
zag:
318 heavyiron 1997
     db   'CPUID 2.17 by Sergey Kuzmin and the KolibriOS team'
223 Ghost 1998
zaglen:
1999
tsum:
2000
    db 'Frequency:     .   MHz'
2001
tsumlen:
2002
ost dd ?
2003
sot dd ?
2004
f dd ?
2005
m dd ?
2006
s dd ?
2007
t dd ?
2008
 
2009
ef dd ?
2010
em dd ?
2011
 
2012
multiplier dd ?
2013
multa dd ?
2014
multb dd ?
2015
 
2016
smallvendor dd ?
2017
L1d  dd ?
2018
L1i  dd ?
2019
L2   dd ?
2020
L3   dd ?
2021
total dd 0x0
2022
total1 dd 0x0
2023
rating dd 0x0
2024
rat dd 0x0  ;
2025
micron dd ?
2026
sse3sup dd ?
2027
brand dd ?
2028
 
2029
ram_size_a dd ?
2030
ram_size_t dd ?
2031
 
318 heavyiron 2032
stdc dd ?
2033
extc dd ?
2034
 
2035
FRS dd ?
2036
freqsel db ?
2037
 
2038
temp dd ?
2039
freqbb dd ?
2040
freqll dd ?
2041
 
2042
wayli dd ?
2043
lineli dd ?
2044
 
2045
wayld dd ?
2046
lineld dd ?
2047
 
2048
wayl2 dd ?
2049
linel2 dd ?
2050
 
2051
wayl3 dd ?
2052
linel3 dd ?
2053
 
2054
;number_of_log_cpus dd ?
2055
 
2056
che db ? ; numbers of calls for Intel caches detection
2057
 
223 Ghost 2058
ram:
2059
db 'Available RAM:     out of'
2060
ramlen:
2061
 
2062
NEF:
2063
db 'EXTENDED FEATURES ARE NOT AVAILABLE'
2064
NEFlen:
2065
 
2066
mb :
2067
db 'MB'
2068
mblen:
2069
 
318 heavyiron 2070
;logcpus :
2071
;db 'Number of logical CPU:'
2072
;logcpuslen:
2073
 
223 Ghost 2074
speed :
2075
db 'PERFORMANCE:'
2076
speedlen:
2077
 
2078
kbpersec:
2079
db 'KB/SEC'
2080
kbperseclen:
2081
 
2082
instruct:
2083
    db 'Instruction sets'
2084
instructlen:
2085
 
2086
standard:
2087
    db 'Standard and Extended features plus Performance test'
2088
standardlen:
2089
 
2090
FR:
2091
    db 'Choose FSB:'
2092
FRlen:
2093
 
2094
STDCA:
2095
    db 'Highest STD call is         '
2096
STDCAlen:
2097
 
2098
EXTCA:
2099
    db 'Highest EXT call is         h'
2100
EXTCAlen:
2101
 
2102
brandid:
2103
    db 'Brand:'
2104
brandidlen:
2105
 
2106
oblom:
2107
    db 'SORRY, CPUID IS NOT AVAILABLE'
2108
oblomlen:
2109
other:
2110
    db 'SORRY, THIS VENDOR IS NOT SUPPORTED YET'
2111
otherlen:
318 heavyiron 2112
 
223 Ghost 2113
cpuname:
2114
    db 'CPU VENDOR:             '
2115
cpunamelen:
2116
fam:
2117
    db 'FAMILY:     std    ext'
2118
famlen:
2119
mode:
2120
    db 'MODEL:      std    ext'
2121
modelen:
2122
step:
2123
    db 'STEPPING:'
2124
steplen:
318 heavyiron 2125
 
223 Ghost 2126
cache2:
2127
 
318 heavyiron 2128
    db 'L1(data):     KB       -way set     -byte line size'
223 Ghost 2129
cache2len:
2130
 
2131
cache:
318 heavyiron 2132
    db 'L1(inst):     KB       -way set     -byte line size'
223 Ghost 2133
cachelen:
2134
 
318 heavyiron 2135
cache3:
2136
 
2137
    db 'L2:      KB            -way set     -byte line size'
2138
cache3len:
2139
 
2140
cache4:
2141
    db 'L3:      KB            -way set     -byte line size'
2142
cache4len:
2143
 
223 Ghost 2144
cacheP4:
2145
 
318 heavyiron 2146
    db 'L1(inst):     Kuops    -way set     -byte line size'
223 Ghost 2147
cacheP4len:
2148
 
2149
tech:
2150
  db 'Technology: 0.   micron '
2151
techlen:
2152
 
2153
typen:
2154
  db 'Type:'
2155
typenlen:
2156
 
2157
pr:
2158
  db 'P-rating:'
2159
prlen:
2160
 
2161
multil:
2162
  db 'Multiplier:   .'
2163
multillen:
2164
 
2165
freql:
2166
  db 'System clock:     .   MHz'
2167
freqllen:
2168
 
2169
name:
2170
    db 'CODENAME:'
2171
namelen:
318 heavyiron 2172
 
223 Ghost 2173
AMDn:
2174
    db 'AMD'
2175
AMDnlen:
2176
Inteln:
2177
    db 'Intel'
2178
Intelnlen:
2179
Cyrixn:
2180
    db 'Cyrix'
2181
Cyrixnlen:
2182
IDTn:
2183
     db 'IDT/Centaur'
2184
IDTnlen:
2185
Centaurn:
2186
     db 'VIA'
2187
Centaurnlen:
2188
 
2189
Tranmsmetan:
2190
     db 'Transmeta'
2191
Tranmsmetanlen:
2192
 
2193
MMXs:
2194
    db 'MMX:         '
2195
MMXslen:
2196
 
2197
mmxp:
2198
    db 'MMX+:         '
2199
mmxplen:
2200
 
2201
HTT:
2202
    db 'HTT:          '
2203
HTTlen:
2204
 
2205
HTTn:
2206
    db 'HTT:         '
2207
HTTnlen:
2208
 
2209
sse3:
2210
    db 'SSE3:         '
2211
sse3len:
2212
now:
2213
    db '3DNOW!:         '
2214
nowlen:
2215
nowp:
2216
    db '3DNOW!+:         '
2217
nowplen:
2218
 
2219
;-Type
2220
 
2221
t1:
2222
    db 'OEM'
2223
t1len:
2224
 
2225
t2:
2226
    db 'Overdrive'
2227
t2len:
2228
 
2229
t3:
2230
    db 'Dual'
2231
t3len:
2232
 
2233
t4:
2234
    db 'Unknown'
2235
t4len:
2236
 
2237
;----------Intel
2238
P50:
2239
db 'P5 A-step'
2240
P50len:
2241
P5:
2242
db 'P5'
2243
P5len:
2244
P54T:
2245
db 'P24T Overdrive'
2246
P54Tlen:
2247
P54C:
2248
db 'P54C'
2249
P54Clen:
2250
P55C:
2251
db 'P55C (with MMX)'
2252
P55Clen:
2253
; ---
2254
P60:
2255
db 'Pentium Pro A-step'
2256
P60len:
2257
P61:
2258
db 'Pentium Pro'
2259
P61len:
2260
P63:
2261
db 'Pentium II (Klamath)'
2262
P63len:
2263
P65:
2264
db 'Pentium II (Deschutes)'
2265
P65len:
2266
P66:
2267
db 'Celeron (Medocino)'
2268
P66len:
2269
P67:
2270
db 'Pentium III (Katmai)'
2271
P67len:
2272
P68:
2273
db 'Pentium III (Coppermine)'
2274
P68len:
2275
P69:
2276
db 'Pentium M (Banias)'
2277
P69len:
2278
P6A:
2279
db 'Pentium III Xeon (Cascades)'
2280
P6Alen:
2281
P6B:
2282
db 'Pentium III (Tualatin)'
2283
P6Blen:
2284
P6D:
2285
db 'Pentium M (Dothan)'
2286
P6Dlen:
2287
P6E:
318 heavyiron 2288
db 'Pentium M (Yonah)/ Core'
223 Ghost 2289
P6Elen:
2290
P6F:
318 heavyiron 2291
db 'Pentium D (Conroe)/ Core 2 (Kentsfield)'
223 Ghost 2292
P6Flen:
2293
;---
2294
PS0:
2295
db 'Itanium (IA-64)'
2296
PS0len:
2297
;------------
2298
PF0:
2299
db 'Pentium 4 (Willamete)'
2300
PF0len:
2301
PF2:
2302
db 'Pentium 4 (Northwood)'
2303
PF2len:
2304
PF3:
2305
db 'Pentium 4 (Prescott)'
2306
PF3len:
2307
PF5:
2308
db 'Pentium 4 (Tejas)'
2309
PF5len:
2310
PF6:
2311
db 'Pentium 4 (Presler)'
2312
PF6len:
2313
;----------------Intel Celerons
2314
P65c:
2315
db 'Celeron (Covington)'
2316
P65clen:
2317
P68c:
2318
db 'Celeron (Coppermine)'
2319
P68clen:
2320
P6Bc:
2321
db 'Celeron (Tualatin)'
2322
P6Bclen:
2323
PF0c:
2324
db 'Celeron (Willamete)'
2325
PF0clen:
2326
PF2c:
2327
db 'Celeron (Northwood)'
2328
PF2clen:
2329
PF3c:
2330
db 'Celeron (Prescott)'
2331
PF3clen:
2332
PF5c:
2333
db 'Celeron D (Texas)'
2334
PF5clen:
2335
PF6c:
2336
db 'Celeron D (Presler)'
2337
PF6clen:
2338
;---------AMD
2339
A50:
2340
db 'K5 (PR75, PR90, PR100)'
2341
A50len:
2342
A51:
2343
db '5k86 (PR120, PR133)'
2344
A51len:
2345
A52:
2346
db '5k86 (PR166)'
2347
A52len:
2348
A53:
2349
db '5k86 (PR200)'
2350
A53len:
2351
A56:
2352
db 'K6'
2353
A56len:
2354
A57:
2355
db 'K6'
2356
A57len:
2357
A58:
2358
db 'K6-2'
2359
A58len:
2360
A59:
2361
db 'K6-III'
2362
A59len:
2363
A5D:
2364
db 'K6-2+ or K6-III+'
2365
A5Dlen:
2366
;-------------------
2367
At1:
2368
db 'Athlon'
2369
At1len:
2370
At2:
2371
db 'Athlon'
2372
At2len:
2373
At3:
2374
db 'Duron (Spitfire)'
2375
At3len:
2376
At4:
2377
db 'Athlon (Thunderbird)'
2378
At4len:
2379
At6:
2380
db 'AthlonXP (Palomino)'
2381
At6len:
2382
At7:
2383
db 'Duron (Morgan)'
2384
At7len:
2385
At8:
2386
db 'AthlonXP (Thoroughbred)'
2387
At8len:
2388
At8a:
2389
db 'Duron (Applebred)'
2390
At8alen:
2391
Ata:
2392
db 'AthlonXP (Barton)'
2393
Atalen:
2394
Atat:
2395
db 'AthlonXP (Thorton)'
2396
Atatlen:
2397
;-------------------
2398
AF1:
2399
db 'Dual-core Opteron'
2400
AF1len:
2401
AF3:
2402
db 'Athlon 64 (Toledo)'
2403
AF3len:
2404
AF4:
2405
db 'Athlon 64 (ClawHammer)'
2406
AF4len:
2407
AF5:
2408
db 'Opteron/Athlon 64 FX (SledgeHammer)'
2409
AF5len:
2410
 
2411
AFC:
2412
db 'Athlon 64 (Newcastle)'
2413
AFClen:
2414
 
2415
AFF:
2416
db 'Athlon 64 (Winchester)'
2417
AFFlen:
2418
 
2419
AFS:
2420
db 'Athlon 64 (San Diego)'
2421
AFSlen:
2422
 
2423
AFV:
2424
db 'Athlon 64 (Venice)'
2425
AFVlen:
2426
 
2427
AFCs:
2428
db 'Sempron (Paris)'
2429
AFCslen:
2430
 
2431
AFCsp:
2432
db 'Sempron (Palermo)'
2433
AFCsplen:
2434
 
2435
;---------Cyrix
2436
C52:
2437
db '6x86 M1'
2438
C52len:
2439
C54:
2440
db 'MediaGX'
2441
C54len:
2442
C60:
2443
db '6x86MX M2'
2444
C60len:
2445
C65:
2446
db 'C3 (Cyrix M2)' ;?
2447
C65len:
2448
;--------IDT
2449
V54:
2450
db 'WinChip C6'
2451
V54len:
2452
V58:
2453
db 'WinChip 2'
2454
V58len:
2455
V59:
2456
db 'WinChip 3'
2457
V59len:
2458
;-------VIA
2459
V66:
2460
db 'C3 (Samuel)'  ; Joshua is unreleased 065
2461
V66len:
2462
V67:
2463
db 'C3 (Samuel2/Ezra)' ; ?
2464
V67len:
2465
V68:
2466
db 'C3 (Ezra-T/Eden)' ;?
2467
V68len:
2468
V69:
2469
db 'C3 (Antaur/Nehemiah)' ;?
2470
V69len:
2471
VA:
2472
db 'C7 (Esther)' ;?
2473
VAlen:
2474
;---------Transmeta
2475
T5:
2476
db 'Crusoe' ;
2477
T5len:
2478
TF:
2479
db 'Efficeon' ;
2480
TFlen:
2481
;---------
2482
NG:
2483
    db 'Next generation CPU'
2484
NGlen:
2485
 
2486
stm:
2487
    db 'Internal name:'
2488
stmlen:
2489
 
318 heavyiron 2490
athloncoef	db	110, 115, 120, 125, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 120
2491
		db	190, 120, 200, 130, 135, 140, 210, 150, 220, 160, 165, 170, 180, 230, 240
2492
athlonmcoef:	db	110, 115, 120, 125, 50, 55, 60, 65,  70, 75, 80, 85, 90, 95, 100, 105
2493
		db	30, 190, 40, 200, 130, 135, 14, 210, 150, 220, 160, 165, 170, 230, 240
2494
athloncoef3	db	45, 50, 40, 55, 25, 30, 60, 35
2495
p4coef		db	160, 170, 180, 190, 200, 210, 220, 230, 80, 90, 100, 110, 120, 130, 140, 150	; Pentium 4 (Willamete)
2496
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 2497
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
2498
 
2499
myname:
2500
   db '                                                '
2501
mynamelen:
2502
 
2503
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2504
;
2505
;  include images and unpacking- and hasharea
2506
;
2507
include 'logos.inc' ; include file where gif's are stored
2508
img_area:	   ; image is going to be unpacked to here
2509
rb 201*49*3+8	   ; image resolution (bits to reserve)
2510
 
2511
img_area2:	   ; image is going to be unpacked to here
2512
rb 93*24*3+8	   ; image resolution (bits to reserve)
2513
 
2514
gif_hash_area:
2515
rd 4096+1	   ;hash area size for unpacking gif
2516
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2517
 
2518
I_END:
2519
align 4
2520
  udata
2521
  thread2_stack_area rb 64
2522
  thread2_esp = $
2523
U_END: