Subversion Repositories Kolibri OS

Rev

Rev 451 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ;******************************************************************************
  2. ; project name:    CPUID                                                      *
  3. ; target platform: KolibriOS, x86 (IA-32), x86-64 achitectures                *
  4. ; compiler:        flat assembler 1.67.21                                     *
  5. ; version:         2.18                                                       *
  6. ; last update:     1st April  2007          1st 2nd 3rd 4th                   *
  7. ; maintained by:   Sergey Kuzmin aka Wildwest                                 *
  8. ; e-mail:          kuzmin_serg@list.ru                                        *
  9. ; site:            http://coolthemes.narod.ru/files.html                      *
  10. ; license:         Copyright 2004-2007 Sergey Kuzmin and co-authors           *
  11. ;                  Rules:                                                     *
  12. ;                  1)you can use pieces of code in your project, but should   *
  13. ;                    mention the original author (include copyright notice);  *
  14. ;                  2)if you modify CPUID (improve, port, translate, etc) send *
  15. ;                    your changes to the maintainer or make about post changes*
  16. ;                    at forum  http://meos.sysbin.com                         *
  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
  27.   dd U_END+4096
  28.   dd     0x0
  29.   dd     0x0
  30.  
  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)
  37.  
  38. include 'gif2img.inc'         ;macros to convert gif to img
  39.  
  40. include 'rsatest.inc'
  41. include 'variable.inc'
  42.  
  43.  
  44.  
  45. START:                  ;   LET'S GO!!!
  46. ;------------
  47. CYCLES:
  48. ;    CPU speed
  49.     mov eax, 18
  50.     mov ebx,5
  51.     mcall
  52.     mov [total1],eax  ;in Hz,  example 1600490000
  53.     xor  edx,edx
  54.     mov  ebx,1000000
  55.     div  ebx
  56.     mov [total], eax  ; in Mhz,  example 1600
  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
  111. jnz   .ebxl          ;    <> 0 =>invalid values
  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]
  213. mov dword[ef],ecx     ; effective family
  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:
  229. mov eax, 0x80000001               ; CPUID ext. function 0x80000001
  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.  
  316. mov eax,dword [ost]  ;example  166474
  317. mov  ebx,10
  318. div  ebx             ;example  16647
  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
  398. Text 290,250,0x00000000,t1, t1len-t1
  399. jmp PROCCORE
  400. t2d:
  401. cmp [t], 01b
  402. jne t3d
  403. Text 290,250,0x00000000,t2, t2len-t2
  404. jmp PROCCORE
  405. t3d:
  406. cmp [t], 11b
  407. jne notype
  408. Text 290,250,0x00000000,t3, t3len-t3
  409. jmp PROCCORE
  410. notype:
  411. Text 290,250,0x00000000,t4, t4len-t4
  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:
  448. Text 75,70,0x00000000,other, otherlen-other
  449.     jmp MMXtest
  450. ;-------------------------
  451.  
  452. AMD:
  453.  
  454. Text 15, 190,0x00000000,cache, cachelen-cache
  455.  
  456. Text 75,70,0x00000000,AMDn, AMDnlen-AMDn
  457.  
  458.         mov     esi, amd
  459.         call    load_gif
  460. PutImage 135,97,201,49,img_area+8
  461. ;         place   size
  462.  
  463. ; Relax, man. AMD made PRETTY SIMPLE cache detection routine
  464. ;CACHE1:
  465. mov eax, 80000005h
  466.     cpuid
  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.  
  483. shr ecx, 24
  484. mov [L1d], ecx
  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.  
  503. shr edx, 24
  504. mov [L1i], edx
  505.  
  506.  
  507. ;CACHE2:
  508. mov eax, 80000006h
  509.     cpuid
  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.  
  554. shr ecx, 16
  555. mov [L2],ecx
  556.  
  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?
  584. Text 100,70,0x00000000,A50, A50len-A50
  585.     jmp MMXtest
  586. .A51:
  587.     mov [micron], 35
  588. Text 100,70,0x00000000,A51, A51len-A51
  589.     jmp MMXtest
  590. .A52:
  591.     mov [micron], 35
  592. Text 100,70,0x00000000,A52, A52len-A52
  593.     jmp MMXtest
  594. .A53:
  595.     mov [micron], 35
  596. Text 100,70,0x00000000,A53, A53len-A53
  597.     jmp MMXtest
  598. .A56:
  599.     mov [micron], 30
  600. Text 100,70,0x00000000,A56, A56len-A56
  601.     jmp MMXtest
  602. .A57:
  603.     mov [micron], 25
  604. Text 100,70,0x00000000,A57, A57len-A57
  605.     jmp MMXtest
  606. .A58:
  607.     mov [micron], 25
  608. Text 100,70,0x00000000,A58, A58len-A58
  609.     jmp MMXtest
  610. .A59:
  611.     mov [micron], 25
  612. Text 100,70,0x00000000,A59, A59len-A59
  613.     jmp MMXtest
  614. .A5D:
  615.     mov [micron], 18
  616. Text 100,70,0x00000000,A5D, A5Dlen-A5D
  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
  638. Text 100,70,0x00000000,At1, At1len-At1
  639.  jmp MMXtest
  640. A2:
  641.     mov [micron], 18
  642. Text 100,70,0x00000000,At2, At2len-At2
  643.  jmp MMXtest
  644. A3:
  645.     mov [micron], 18
  646.  Text 100,70,0x00000000,At3, At3len-At3
  647.  jmp MMXtest
  648. A4:
  649.     mov [micron], 18
  650. Text 100,70,0x00000000,At4, At4len-At4
  651.  jmp MMXtest
  652. A6:
  653.  
  654.  mov [micron], 18
  655.  Text 100,70,0x00000000,At6, At6len-At6
  656.  
  657.  mov [FRS], 266  ;!!!!!!
  658.  
  659. Number 315,90,0,3,dword [FRS],0x000000; MHz
  660.  
  661.  call newrating; !!!!
  662.  
  663. Text 245,70,0x00000000,pr, prlen-pr
  664.  
  665.  Number 310,70,0,4,dword [rating],0x000000
  666.  jmp MMXtest
  667. A7:
  668.     mov [micron], 13
  669. Text 100,70,0x00000000,At7, At7len-At7
  670.  jmp MMXtest
  671.  
  672. A8:
  673.  
  674.  mov [micron], 13
  675. mov [FRS], 266  ;!!!!!!
  676.  
  677.    Number 315,90,0,3,dword [FRS],0x000000; MHz
  678.  
  679.  
  680.  cmp [L2], 256
  681.  jl .App  ; Applebred
  682. Text 100,70,0x00000000,At8, At8len-At8
  683.  
  684.  
  685. call newrating;!!!!
  686.  
  687. Text 245,70,0x00000000,pr, prlen-pr
  688. Number 310,70,0,4,dword [rating],0x000000
  689. jmp MMXtest
  690.  
  691.  .App:
  692. Text 100,70,0x00000000,At8a, At8alen-At8a
  693. jmp MMXtest
  694.  
  695. AA:
  696.  
  697.  mov [micron], 13
  698.  
  699. mov [FRS], 333; !!!!
  700. Text 245,70,0x00000000,pr, prlen-pr
  701.  
  702.    Number 315,90,0,3,dword [FRS],0x000000; MHz
  703.  
  704.  cmp [L2], 256
  705.  jl .Tho ; Thorton
  706.  
  707. call newrating;!!!!!
  708. Text 100,70,0x00000000,Ata, Atalen-Ata
  709.  
  710.  Number 310,70,0,4,dword [rating],0x000000
  711.  
  712. jmp MMXtest
  713.  .Tho:
  714. call newrating;!!!!!
  715. Text 100,70,0x00000000,Atat, Atatlen-Atat
  716.  Number 310,70,0,4,dword [rating],0x000000
  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
  726.     cmp [m],$3  ; Toledo 1024 0.09   // Manchester     ||Windsor Dual Core not supported
  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
  732.     cmp [m],$7  ;Athlon 64 Athlon 64 FX  Clawhammer(1024) 0.13   Sledgehammer(1024)  0.13  // SSE3+ SanDiego(1024)
  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  ;?
  747. Text 100,70,0x00000000,AF1, AF1len-AF1
  748.  jmp MMXtest
  749. .AF3:
  750.     mov [micron], 09
  751. Text 100,70,0x00000000,AF3, AF3len-AF3
  752.  jmp MMXtest
  753. .AF4:
  754.     mov [micron], 13
  755. Text 100,70,0x00000000,AF4, AF4len-AF4
  756.  jmp MMXtest
  757. .AF5:
  758.     mov [micron], 13
  759. Text 100,70,0x00000000,AF5, AF5len-AF5
  760.  jmp MMXtest
  761. .AF7:
  762.     mov [micron], 13
  763. Text 100,70,0x00000000,AF5, AF5len-AF5
  764.  jmp MMXtest
  765. .AF8:
  766.     mov [micron], 13
  767. Text 100,70,0x00000000,AF4, AF5len-AF4
  768.  jmp MMXtest
  769. .AFB:
  770.     mov [micron], 13
  771. Text 100,70,0x00000000,AF4, AF4len-AF4
  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
  783.         Text 100,70,0x00000000,AFCs, AFCslen-AFCs
  784.  jmp MMXtest
  785.  
  786. .AFCnpal: ; palermo
  787.     mov [micron], 9
  788.         Text 100,70,0x00000000,AFCsp, AFCsplen-AFCsp
  789.  jmp MMXtest
  790.  
  791.  
  792. .AFCn: ;newcastle
  793.     mov [micron], 13
  794.         Text 100,70,0x00000000,AFC, AFClen-AFC
  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:
  810. mov [micron], 9
  811. cmp [L2], 1024
  812. jz .AFs
  813. cmp [L2], 512
  814. jz .AFd
  815. cmp [L2], 256
  816. jz .AFp
  817.  
  818. .AFs:
  819. Text 100,70,0x00000000,AFS, AFSlen-AFS
  820.  jmp MMXtest
  821.  
  822. .AFd:
  823. Text 100,70,0x00000000,AFV, AFVlen-AFV
  824.  jmp MMXtest
  825.  
  826. .AFp:
  827. Text 100,70,0x00000000,AFCsp, AFCsplen-AFCsp
  828.  jmp MMXtest
  829. ;-----------------------------------------------
  830. Intel:
  831. Text 75,70,0x00000000,Inteln, Intelnlen-Inteln
  832.  
  833.         mov     esi, intel
  834.         call    load_gif
  835. PutImage 125,107,201,49,img_area+8
  836. ;         place   size
  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.  
  849. Text 15, 190,0x00000000,cache, cachelen-cache
  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:
  866. Text 110,70,0x00000000,P50, P50len-P50
  867.    mov [L1d], 8
  868.    mov [L1i], 8
  869.    mov [L2], 256
  870.    mov [micron], 80
  871.  jmp MMXtest
  872. .I1:
  873. Text 110,70,0x00000000,P5, P5len-P5
  874.    mov [L1d], 8
  875.    mov [L1i], 8
  876.    mov [L2], 256
  877.    mov [micron], 50
  878.  jmp MMXtest
  879. .I2:
  880. Text 110,70,0x00000000,P54C, P54Clen-P54C
  881.    mov [L1d], 8
  882.    mov [L1i], 8
  883.    mov [L2], 256
  884.    mov [micron], 50
  885.  jmp MMXtest
  886. .I3:
  887. Text 110,70,0x00000000,P54T, P54Tlen-P54T
  888.    mov [L1d], 8
  889.    mov [L1i], 8
  890.    mov [L2], 256
  891.    mov [micron], 50
  892.  jmp MMXtest
  893. .I4:
  894. Text 110,70,0x00000000,P55C, P55Clen-P55C
  895.    mov [L1d], 8
  896.    mov [L1i], 8
  897.    mov [L2], 256
  898.    mov [micron], 35
  899.  jmp MMXtest
  900. .I7:
  901. Text 110,70,0x00000000,P54C, P54Clen-P54C
  902.    mov [L1d], 8
  903.    mov [L1i], 8
  904.    mov [L2], 256
  905.    mov [micron], 35
  906.  jmp MMXtest
  907. .I8:
  908. Text 110,70,0x00000000,P55C, P55Clen-P55C
  909.    mov [L1d], 16
  910.    mov [L1i], 16
  911.    mov [L2], 256
  912.    mov [micron], 35
  913.  jmp MMXtest
  914. .six:              ;Family=6
  915.  
  916. Text 15, 190,0x00000000,cache, cachelen-cache
  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
  946. Text 110,70,0x00000000,P60, P60len-P60
  947.  jmp MMXtest
  948. .I61:
  949.     mov [micron], 35
  950. Text 110,70,0x00000000,P61, P61len-P61
  951.  jmp MMXtest
  952. .I63:
  953.     mov [micron], 28
  954. Text 110,70,0x00000000,P63, P63len-P63
  955.  jmp MMXtest
  956. .I65:
  957.     mov [micron], 25
  958.     cmp [L2], 0
  959.     jne .pp65  ; Pentium
  960. Text 110,70,0x00000000,P65c, P65clen-P65c
  961.     jmp MMXtest
  962. .pp65:
  963. Text 110,70,0x00000000,P65, P65len-P65
  964.     jmp MMXtest
  965. .I66:
  966.     mov [micron], 25
  967. Text 110,70,0x00000000,P66, P66len-P66
  968.     jmp MMXtest
  969. .I67:
  970.     mov [micron], 25
  971. Text 110,70,0x00000000,P67, P67len-P67
  972.     jmp MMXtest
  973. .I68:
  974.     mov [micron], 18
  975.     cmp [L2], 128
  976.     jne .pp68  ; Pentium
  977. Text 110,70,0x00000000,P68c, P68clen-P68c
  978.     jmp MMXtest
  979.  .pp68:
  980. Text 110,70,0x00000000,P68, P68len-P68
  981.     jmp MMXtest
  982. .I69:
  983.     mov [micron], 13
  984. Text 110,70,0x00000000,P69 , P69len-P69
  985.     jmp MMXtest
  986. .I6A:
  987.     mov [micron], 18
  988. Text 110,70,0x00000000,P6A, P6Alen-P6A
  989.     jmp MMXtest
  990. .I6B:
  991.     mov [micron], 13
  992.     cmp [L2], 256
  993.     jne .pp6B  ; Pentium
  994. Text 110,70,0x00000000,P6Bc, P6Bclen-P6Bc
  995.     jmp MMXtest
  996. .pp6B:
  997. Text 110,70,0x00000000,P6B, P6Blen-P6B
  998.     jmp MMXtest
  999. .I6D:
  1000.     mov [micron], 9
  1001. Text 110,70,0x00000000,P6D, P6Dlen-P6D
  1002.     jmp MMXtest
  1003. .I6E:
  1004.     mov [micron], 6
  1005. Text 110,70,0x00000000,P6E, P6Elen-P6E
  1006.     jmp MMXtest
  1007. .I6F:
  1008.     mov [micron], 6
  1009. Text 110,70,0x00000000,P6F, P6Flen-P6F
  1010.     jmp MMXtest
  1011.  
  1012. ;06Ex - Pentium M Yonah 0.065
  1013. ;06Fx - Pentium D Conroe 0.065, Xeon Woodcrest, Celeron D AllenDale, Core 2 Kentsfield
  1014.  
  1015. .sev:    ;Family=7
  1016. .IS0:
  1017.  
  1018. Text 15, 190,0x00000000,cache, cachelen-cache ;?
  1019.  
  1020.     mov [micron], 18
  1021. Text 110,70,0x00000000,PS0, PS0len-PS0
  1022.  jmp MMXtest
  1023.  
  1024. .fift:    ;Family=15
  1025.  
  1026. Text 15, 190,0x00000000,cacheP4, cacheP4len-cacheP4
  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
  1047. Text 110,70,0x00000000,PF0c, PF0clen-PF0c
  1048.     jmp MMXtest
  1049. .ppF0:
  1050. Text 110,70,0x00000000,PF0, PF0len-PF0
  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
  1061.   ;  mcall
  1062.   ;jmp MMXtest
  1063. ;.ppF1:
  1064. Text 110,70,0x00000000,PF0, PF0len-PF0
  1065.  jmp MMXtest
  1066. .IF2:
  1067.     mov [micron], 13
  1068.     cmp [L2], 128
  1069.     jne .ppF2  ; Pentium
  1070. Text 110,70,0x00000000,PF2c, PF2clen-PF2c
  1071.  jmp MMXtest
  1072. .ppF2:
  1073. Text 110,70,0x00000000,PF2, PF2len-PF2
  1074.  jmp MMXtest
  1075. .IF3:
  1076.     mov [micron], 09
  1077.     cmp [L2], 256
  1078.     jne .ppF3  ; Pentium
  1079. Text 110,70,0x00000000,PF3c, PF3clen-PF3c
  1080.  jmp MMXtest
  1081. .ppF3:
  1082. Text 110,70,0x00000000,PF3, PF3len-PF3
  1083.  jmp MMXtest
  1084.  
  1085. .IF5:
  1086.     mov [micron], 09
  1087.     cmp [L2], 512
  1088.     jae .ppF5  ; Pentium
  1089. Text 110,70,0x00000000,PF5c, PF5clen-PF5c
  1090.  jmp MMXtest
  1091. .ppF5:
  1092. Text 110,70,0x00000000,PF5, PF5len-PF5
  1093.  jmp MMXtest
  1094.  
  1095.  .IF6:
  1096.     mov [micron], 06  ; 065
  1097.     cmp [L2], 512
  1098.     ja .ppF6  ; Pentium
  1099. Text 110,70,0x00000000,PF6c, PF6clen-PF6c
  1100.  jmp MMXtest
  1101. .ppF6:
  1102. Text 110,70,0x00000000,PF6, PF6len-PF6
  1103.  jmp MMXtest
  1104.  
  1105.  
  1106.  next_generation:
  1107. Text 110,70,0x00000000,NG, NGlen-NG
  1108.   jmp MMXtest
  1109. ;----------------------------------
  1110. Cyrix:
  1111.  
  1112. Text 15, 190,0x00000000,cache, cachelen-cache
  1113.  
  1114.         mov     esi, cyrix
  1115.         call    load_gif
  1116. PutImage 130,127,201,49,img_area+8
  1117. ;         place   size
  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
  1133. Text 75,70,0x00000000,Cyrixn, Cyrixnlen-Cyrixn
  1134. Text 110,70,0x00000000,C52, C52len-C52
  1135.     jmp MMXtest
  1136. .C54:
  1137.     mov [micron], 50
  1138.     mov [L1i], 8
  1139.     mov [L1d], 8
  1140.     mov [L2], 512
  1141. Text 75,70,0x00000000,Cyrixn, Cyrixnlen-Cyrixn
  1142. Text 110,70,0x00000000,C54, C54len-C54
  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
  1155. Text 75,70,0x00000000,Cyrixn, Cyrixnlen-Cyrixn
  1156. Text 110,70,0x00000000,C60, C60len-C60
  1157.     jmp MMXtest
  1158. .C65:
  1159.     mov [micron], 25 ;35?
  1160.     mov [L1i], 32
  1161.     mov [L1d], 32
  1162.     mov [L2], 512
  1163. Text 75,70,0x00000000,Centaurn, Centaurnlen-Centaurn
  1164. Text 100,70,0x00000000,C65, C65len-C65
  1165.     jmp MMXtest
  1166. ;---------------------
  1167. Centaur:
  1168.  
  1169. Text 15, 190,0x00000000,cache, cachelen-cache
  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
  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.  
  1215. ;CACHE2:
  1216. mov eax, 80000006h
  1217.     cpuid
  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
  1238. mov [L2],ecx
  1239.  
  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.  
  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
  1267. PutImage 125,107,201,49,img_area+8
  1268. ;         place   size
  1269.  
  1270. Text 75,70,0x00000000,IDTn, IDTnlen-IDTn
  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
  1279. Text 100,70,0x00000000,V54, V54len-V54
  1280.     jmp MMXtest
  1281. .V58:
  1282.     mov [micron], 25
  1283. Text 100,70,0x00000000,V58, V58len-V58
  1284.     jmp MMXtest
  1285. .V59:
  1286.     mov [micron], 25
  1287. Text 100,70,0x00000000,V59, V59len-V59
  1288.     jmp MMXtest
  1289.  
  1290. sixC:   ;Family=6
  1291.  
  1292.         mov     esi, via
  1293.         call    load_gif
  1294. PutImage 125,107,201,49,img_area+8
  1295. ;         place   size
  1296.  
  1297. Text 75,70,0x00000000,Centaurn, Centaurnlen-Centaurn
  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
  1306.     cmp [m],$A
  1307.     jz .V6A
  1308. .V66:
  1309.    mov [micron], 18 ; 25?
  1310. Text 100,70,0x00000000,V66, V66len-V66
  1311.     jmp MMXtest
  1312. .V67:
  1313.     mov [micron], 15
  1314. Text 100,70,0x00000000,V67, V67len-V67
  1315.     jmp MMXtest
  1316. .V68:
  1317.     mov [micron], 13
  1318. Text 100,70,0x00000000,V68, V68len-V68
  1319.     jmp MMXtest
  1320. .V69:
  1321.    mov [micron], 13
  1322. Text 100,70,0x00000000,V69, V69len-V69
  1323.     jmp MMXtest
  1324. .V6A:
  1325.    mov [micron], 9
  1326. Text 100,70,0x00000000,VA, VAlen-VA
  1327.     jmp MMXtest
  1328. ;-----------
  1329. Transmeta:
  1330.  
  1331. Text 15, 190,0x00000000,cache, cachelen-cache
  1332.  
  1333. Text 75,70,0x00000000,Tranmsmetan, Tranmsmetanlen-Tranmsmetan
  1334.  
  1335.         mov     esi, transmeta
  1336.         call    load_gif
  1337. PutImage 125,107,201,49,img_area+8
  1338. ;         place   size
  1339.  
  1340. ; cache detection routine - it is the same as for AMD (almost)
  1341. ;CACHE1:
  1342. mov eax, 80000005h
  1343.     cpuid
  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.  
  1356. shr ecx, 24
  1357. mov [L1d], ecx
  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.  
  1370. shr edx, 24
  1371. mov [L1i], edx
  1372.  
  1373.  
  1374. ;CACHE2:
  1375. mov eax, 80000006h
  1376.     cpuid
  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.  
  1389. shr ecx, 16
  1390. mov [L2],ecx
  1391.  
  1392.  
  1393.     cmp [f], $5
  1394.     jz .fivt
  1395.     cmp [f], $F
  1396.     jz .fift
  1397. .fivt:    ;     Family=5
  1398.  
  1399.     mov [micron], 13 ; ?
  1400. Text 140,70,0x00000000,T5, T5len-T5
  1401.     jmp MMXtest
  1402.  
  1403. .fift:    ;     Family=F
  1404.     mov [micron], 13 ;
  1405. Text 140,70,0x00000000,TF, TFlen-TF
  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
  1428.    ;   mov [number_of_log_cpus], ebx
  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.  
  1442. Text 15,110,0x00000000,fam, famlen-fam
  1443. Text 15,130,0x00000000,mode, modelen-mode
  1444. Text 15,150,0x00000000,step, steplen-step
  1445. ;--------L1  L2
  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;
  1450. ;-----------Features
  1451. Number 258,50,0,2,dword [micron],0x000000  ; micron
  1452.  
  1453. Text 275,290,0x00000000,HTT, HTTlen-HTT
  1454. Text 275,310,0x00000000,sse3, sse3len-sse3
  1455.  
  1456. Text 15,70,0x00000000,name, namelen-name
  1457.  
  1458. Text 15,290,0x00000000,MMXs, MMXslen-MMXs
  1459. Text 15,310,0x00000000,SSE, SSElen-SSE
  1460. Text 95,310,0x00000000,SSE2, SSE2len-SSE2
  1461.  
  1462.     Number 140,170,0,2,dword [wayld],0x000000
  1463.     Number 218,170,0,2,dword [lineld],0x000000
  1464.  
  1465.     Number 140,190,0,2,dword [wayli],0x000000
  1466.     Number 218,190,0,2,dword [lineli],0x000000
  1467.  
  1468.     Number 140,210,0,2,dword [wayl2],0x000000
  1469.     Number 218,210,0,2,dword [linel2],0x000000
  1470.  
  1471.     Number 140,230,0,2,dword [wayl3],0x000000
  1472.     Number 218,230,0,2,dword [linel3],0x000000
  1473.  
  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.  
  1551. Text 175,290,0x00000000,now, nowlen-now
  1552. Text 175,310,0x00000000,nowp, nowplen-nowp
  1553. Text 95,290,0x00000000,mmxp, mmxplen-mmxp
  1554.  
  1555. jmp still
  1556.  
  1557. ;--------------------------
  1558. NO_CPUID:
  1559.  Text 15,50,0x00000000,oblom, oblomlen-oblom
  1560.  jmp FREEZE
  1561.  
  1562. FREEZE:
  1563. nop
  1564. jmp FREEZE ; maybe we should close application or just made some Warning and jump to still:
  1565. ;----------------
  1566. still:
  1567.  
  1568. ; çàòåì ïåðåõîäèì â öèêë îæèäàíèÿ ñîáûòèé
  1569. event_wait:
  1570.  
  1571.     ;================_RAM_==============
  1572.   Number 200,340,0,4,dword [ram_size_a],0xFFFFFF
  1573.  
  1574.   mov eax, 18
  1575.   mov ebx, 16
  1576.   mcall
  1577.  
  1578.   shr eax, 10
  1579.  
  1580.   mov [ram_size_a], eax
  1581.  
  1582.   mov eax, 18
  1583.   mov ebx, 17
  1584.   mcall
  1585.  
  1586.   shr eax, 10
  1587.  
  1588.   mov [ram_size_t], eax
  1589.  
  1590.   Text 115,340,0x00000000,ram, ramlen-ram
  1591.  
  1592.   Number 200,340,0,4,dword [ram_size_a],0x000000
  1593.  
  1594.   Number 270,340,0,4,dword [ram_size_t],0x000000
  1595.   Text 300,340,0x00000000,mb, mblen-mb
  1596.  
  1597. ;==============================
  1598.  
  1599.         mov     eax,23       ; ôóíêöèÿ 23: îæèäàíèå ñîáûòèÿ
  1600.         mov     ebx,50       ; æäåìñ 0.5 ñåê
  1601.         mcall
  1602.  
  1603.     cmp  eax,1          ;
  1604.     je   red            ;  redraw
  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          ;  
  1612.     mcall               ;
  1613.     jmp  still          ;
  1614.   button:               ;
  1615.     mov  eax,17         ;
  1616.     mcall               ;
  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.  
  1628.     jmp     event_wait
  1629. vybor:
  1630.  
  1631.  Number 310,70,0,4,dword [rating],0xFFFFFF ;
  1632.  
  1633.  Number 315,90,0,3,dword [FRS],0xFFFFFF; MHz
  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
  1645.  Number 310,70,0,4,dword [rating],0x000000
  1646.  
  1647.  Number 315,90,0,3,dword [FRS],0x000000; MHz
  1648. jmp  still
  1649.  
  1650. .s2:
  1651. mov [FRS], 400
  1652.  
  1653. call newrating
  1654.  
  1655.  Number 310,70,0,4,dword [rating],0x000000
  1656.  
  1657.    Number 315,90,0,3,dword [FRS],0x000000; MHz
  1658. jmp  still
  1659.  
  1660. .s3:
  1661. mov [FRS], 266
  1662. call newrating
  1663.  
  1664.  Number 310,70,0,4,dword [rating],0x000000
  1665.  
  1666.   Number 315,90,0,3,dword [FRS],0x000000; MHz
  1667.  
  1668. jmp  still
  1669.  
  1670. noclose:
  1671.     jmp  still         
  1672.  
  1673. close:
  1674.     mov   eax,-1       
  1675.     mcall              
  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
  1694.   mcall
  1695.   add  eax,100 ;test lasts 1 second.
  1696.   push eax
  1697. .loop:
  1698.   mov  ecx,4 ;do 4 iterations
  1699.   push ecx   ;this reduces number of calls mcall.
  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
  1707.   mcall
  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. ;======================================================================
  1716. CreateTread window_2,thread2_esp
  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        
  1727.     mcall              
  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
  1740.     mcall               ;
  1741.     jmp  still_2        ;
  1742.  
  1743.   button_2:             ;
  1744.     mov  eax,17         ; 17
  1745.     mcall               ;
  1746.  
  1747.     cmp  ah,1           ; = 1 ?
  1748.     jne  noclose_2      ; noclose
  1749.  
  1750.     mov  [num_win2],0   ;
  1751.  
  1752.     or   eax,-1         ;
  1753.     mcall
  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
  1762.     mcall
  1763.  
  1764.  
  1765.   Window 250,250,420,390, 0x33FFFFFF, 0x805080d0, standard
  1766.           ; place size
  1767.  
  1768. Text 15, 10,0x00000000, STDCA, STDCAlen-STDCA
  1769. Text 215, 10,0x00000000, EXTCA, EXTCAlen-EXTCA
  1770.  
  1771. Number 135,10,1*256,8,dword [stdc],0x000000
  1772. Number 335,10,1*256,8,dword [extc],0x000000
  1773.  
  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
  1778.  
  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
  1783.  
  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
  1788.  
  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
  1793.  
  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
  1798.  
  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
  1803.  
  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
  1808.  
  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
  1813. ;---------------
  1814. DrawLine 0,  410, 185,185,0x8080FF  ;10
  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:
  1823. Text 95,235,0x00000000,NEF, NEFlen-NEF
  1824. jmp too
  1825.  
  1826. goooddd:
  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
  1834.  
  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
  1842.  
  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
  1849.  
  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
  1856.  
  1857.  
  1858. too:
  1859. DrawLine 0,  410, 335,335,0x8080FF  ;10
  1860.  
  1861. Text 15,350,0x00000000,speed, speedlen-speed
  1862. Text 130,350,0x00000000,kbpersec, kbperseclen-kbpersec
  1863.  
  1864. Number 95,350,0,5,dword [iter],0x000000; RSA test results
  1865.  
  1866.     mov  eax,12
  1867.     mov  ebx,2h
  1868.     mcall
  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
  1879.    mcall
  1880.  
  1881.   Window 150,150,350,385, 0x33FFFFFF, 0x805080d0, title
  1882.           ; place size
  1883.  
  1884.   Button 15,330,92,23,2,0x03FFFFFF   ;  button "press for more"
  1885.  
  1886.         mov     esi, knopka
  1887.         mov     edi, img_area2
  1888.         call    load_gif2
  1889. PutImage 15,330,93,24,img_area2+8   ; image "press for more"
  1890. ;         place   size
  1891.  
  1892.  
  1893.     mov  eax,12
  1894.     mov  ebx,2h
  1895.     mcall
  1896.  
  1897.     Text 130,270,0x00000000,instruct, instructlen-instruct
  1898.  
  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
  1904.  
  1905.   cmp dword[smallvendor], 'cAMD'
  1906.   jne cont
  1907.   cmp [f], $6
  1908.   jne cont
  1909.   cmp [f], $6
  1910.   jl cont
  1911.  
  1912.    Button 240,85,69,15,3,0x030000FF  ;  button for rating
  1913.  
  1914.     Text 245,90,0x00FFFFFF,FR, FRlen-FR
  1915.  
  1916.    call newrating; !!!!
  1917.  
  1918.      cont:
  1919.  
  1920.  
  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;
  1925.  
  1926.     Number 82,50,0,4,dword [total],0x000000; MHz
  1927.     Number 110,50,0,2,dword [sot],0x000000; KHz
  1928.  
  1929.     Text 15,170,0x00000000,cache2, cache2len-cache2
  1930.     Text 15,210,0x00000000,cache3, cache3len-cache3
  1931.     Text 15,230,0x00000000,cache4, cache4len-cache4
  1932.  
  1933.  
  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;
  1937.  
  1938.     Number 110,110,1*256,2,dword [ef],0x000000 ;
  1939.     Number 110,130,1*256,2,dword [em],0x000000;
  1940.  
  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;
  1944.  
  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;
  1948. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1949. ;Text 115,280,0x00000000,logcpus, logcpuslen-logcpus
  1950. ;Number 250,280,0,2,dword [number_of_log_cpus],0x000000
  1951.  
  1952.  
  1953.     Text 15,10,0x00000000,stm, stmlen-stm
  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
  1966.     Text 105, 10, 0x00000000, edi, esi
  1967. ;    Text 105,20,0x00000000,myname, mynamelen-myname
  1968. ;-
  1969. Text 15,250,0x00000000,brandid, brandidlen-brandid
  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.  
  1981. title    db   'CPUID 2.2 by S.Kuzmin & the KolibriOS team',0
  1982.  
  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.  
  2004. ;logcpus :
  2005. ;db 'Number of logical CPU:'
  2006. ;logcpuslen:
  2007.  
  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.  
  2020. standard    db 'Standard and Extended features plus Performance test',0
  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:
  2044.  
  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:
  2057.  
  2058. cache2:
  2059.  
  2060.     db 'L1(data):     KB       -way set     -byte line size'
  2061. cache2len:
  2062.  
  2063. cache:
  2064.     db 'L1(inst):     KB       -way set     -byte line size'
  2065. cachelen:
  2066.  
  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.  
  2076. cacheP4:
  2077.  
  2078.     db 'L1(inst):     Kuops    -way set     -byte line size'
  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:
  2104.  
  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:
  2220. db 'Pentium M (Yonah)/ Core'
  2221. P6Elen:
  2222. P6F:
  2223. db 'Pentium D (Conroe)/ Core 2 (Kentsfield)'
  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.  
  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
  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:
  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.  
  2505. align 4
  2506.  
  2507.   thread2_stack_area rb 64
  2508.   thread2_esp = $
  2509. U_END:
  2510.