Subversion Repositories Kolibri OS

Rev

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