Subversion Repositories Kolibri OS

Rev

Rev 532 | Blame | Last modification | View Log | Download | RSS feed

  1. ;Addresses for bits
  2. ; edx cpuid(1)
  3. FPU_FLAG equ 0001h    ;Floating-point unit on-Chip                                            
  4. VME_FLAG equ 0002h    ;Virtual Mode Extension
  5. DE_FLAG equ 0004h     ;Debugging Extension
  6. PSE_FLAG equ 0008h    ;Page Size Extension
  7. TSC_FLAG equ 0010h    ;Time-Stamp Counter
  8. MSR_FLAG equ 0020h    ;Model Specific Registers
  9. PAE_FLAG equ 0040h    ;Physical Address Extension
  10. MCE_FLAG equ 0080h    ;Machine Check Exception
  11. CX8_FLAG equ 0100h    ;CMPXCHG8 Instruction Supported
  12. APIC_FLAG equ 0200h   ;On-chip APIC Hardware Supported
  13. ;10_FLAG equ 0400h   ;Reserved
  14. SEP_FLAG equ 0800h       ;Fast System Call
  15. MTRR_FLAG equ 1000h      ;Memory Type Range Registers
  16. PGE_FLAG equ 2000h       ;Page Global Enable
  17. MCA_FLAG equ 4000h       ;Machine Check Architecture
  18. CMOV_FLAG equ 8000h      ;Conditional Move Instruction Supported
  19. PAT_FLAG equ 10000h      ;Page Attribute Table
  20. PSE36_FLAG equ 20000h    ;36-bit Page Size Extension
  21. PSNUM_FLAG equ 40000h    ;Processor serial number present and enabled
  22. CLFLUSH_FLAG equ 80000h  ;CLFLUSH Instruction supported
  23. ;20_FLAG equ 100000h  ;Reserved
  24. DTS_FLAG equ 200000h     ;Debug Store
  25. ACPI_FLAG equ 400000h    ;Thermal Monitor and Software Controlled Clock Facilities supported
  26. MMX_FLAG equ 800000h     ;Intel Architecture MMX technology supported
  27. FXSR_FLAG equ 1000000h   ;Fast floating point save and restore
  28. SSE_FLAG equ 2000000h    ;Streaming SIMD Extensions supported
  29. SSE2_FLAG equ 4000000h   ;Streaming SIMD Extensions 2
  30. SS_FLAG equ 8000000h     ;Self-Snoop
  31. ;HTT_FLAG equ 10000000h   ;Hyper-Threading Technology
  32. TM_FLAG equ 20000000h    ;Thermal Monitor supported
  33. IA64_FLAG equ 40000000h  ; IA-64  
  34. PBE_FLAG equ 80000000h    ;Pending Break Enable
  35.  
  36. ; ecx cpuid(1)
  37. SSE3_FLAG equ 0001h       ;SSE3 0
  38. MON_FLAG equ 0008h        ;MON -3
  39. DS_CPL_FLAG equ 0010h     ;DS-CPL -4
  40. VMX_FLAG equ 0020h        ;VMX -5    
  41. SMX_FLAG equ 0040h        ;SMX -6                  to  add
  42. EST_FLAG equ 0080h        ; EST-7
  43. TM2_FLAG equ 0100h        ; TM2-8
  44. SSSE3_FLAG equ 0200h      ;SSSE3 -9  
  45. CNXT_ID_FLAG equ 0400h    ;CID -10
  46. CX16_FLAG equ 2000h       ;CX16 - 13
  47. ETPRD_FLAG equ 4000h      ;xTPR - 14
  48. PDCM_FLAG equ 8000h       ;PDCM - 15                to  add
  49. DCA_FLAG equ 40000h       ;DCA - 18   Direct Cache Access
  50. SSE41_FLAG equ 80000h     ;SSE41 - 19               to  add
  51. SSE42_FLAG equ 100000h    ;SSE42 - 20               to  add
  52. x2APIC_FLAG equ 200000h   ;x2APIC - 21               to  add
  53. PPCNT_FLAG equ 800000h    ;PPCNT - 23              to  add
  54.  
  55. ; edx cpuid(8000_0001h)
  56. SYS_FLAG equ 0800h      ;11       - may be we already detect it as SEP_FLAG
  57. MP_FLAG equ 80000h      ;19       ???? not found in recent guides from AMD and Intel
  58. NX_FLAG equ 100000h     ;20
  59. MMXPi_FLAG equ 400000h  ;22
  60. MMXn_FLAG equ 800000h   ;23
  61. FXSRn_FLAG equ 1000000h ;24   it is ÌÌÕ+ for Cyrix
  62. FFXSR_FLAG equ 2000000h ;25
  63. PAGE_FLAG equ 4000000h  ;26 Page1Gb                to  add
  64. TSCP_FLAG equ 8000000h  ;27  
  65. LM_FLAG equ 20000000h   ;29  EM64T
  66. DNo_FLAG equ 40000000h  ;30   3dNow! Ext
  67. DN_FLAG equ 80000000h   ;31   3dNow!
  68.  
  69.  
  70. ; ecx cpuid(8000_0001h)
  71. LAHF_FLAG equ 0001h  ; LAHF   0
  72. CMPL_FLAG equ 0002h    ; core multi-processing legacy mode 1
  73. SVM_FLAG equ 0004h     ; secure virtual machine 2
  74. EAS_FLAG equ 0008h     ; ExtApicSpace  3         to  add
  75. MOVCR8_FLAG equ 0010h  ; AltMovCr8  4
  76. ABM_FLAG equ 0020h     ; ABM -5                  to  add
  77. SSE4A_FLAG equ 0040h   ; SSE4A -6                to  add
  78. MIS_FLAG equ 0080h     ; MissAlignSSE -7         to  add
  79. 3DNP_FLAG equ 0100h    ; 3DNowPrefetch-8         to  add
  80. OSVW_FLAG equ 0200h    ; OS visible workaround -9    to  add
  81. SSE5_FLAG equ 0800h     ;SSE5 - 11               to  add
  82. SKINIT_FLAG equ 1000h  ;SKINIT- 12               to  add
  83. WDT_FLAG equ 2000h     ;Watchdog timer - 13      to  add
  84.  
  85.  
  86. ;decoding standard features
  87.  
  88. decode_standard_features:
  89.  
  90.  xor eax,eax
  91.  inc eax
  92.  cpuid
  93.  
  94.  
  95. Test0:
  96. test edx, FPU_FLAG
  97. jnz Test0e
  98.  
  99. mov dword  [FPU+6], $6F6E
  100. jmp Test1
  101.  
  102. Test0e:
  103. mov  dword [FPU+6], $736579
  104.  
  105. ;;;;;;
  106. Test1:
  107. test edx, VME_FLAG
  108. jnz Test1e
  109.  
  110. mov   dword [VME+ 7], $6F6E
  111. jmp Test2
  112.  
  113. Test1e:
  114. mov   dword [VME+ 7], $736579
  115.  
  116. ;;;;;;
  117. Test2:
  118. test edx, DE_FLAG
  119. jnz Test2e
  120.  
  121. mov   dword [DE+ 7], $6F6E
  122. jmp Test3
  123.  
  124. Test2e:
  125. mov   dword [DE+ 7], $736579
  126. ;;;;;;
  127.  
  128. Test3:
  129. test edx, PSE_FLAG
  130. jnz Test3e
  131.  
  132. mov   dword [PSE+ 8], $6F6E
  133. jmp Test4
  134.  
  135. Test3e:
  136. mov   dword [PSE+ 8], $736579
  137.  
  138. ;;;;
  139. Test4:
  140. test edx, TSC_FLAG
  141. jnz Test4e
  142.  
  143. mov   dword [TSC+ 6], $6F6E
  144. jmp Test5
  145.  
  146. Test4e:
  147. mov   dword [TSC+ 6], $736579
  148.  
  149. ;;;;
  150. Test5:
  151. test edx, MSR_FLAG
  152. jnz Test5e
  153.  
  154. mov   dword [MSR+ 7], $6F6E
  155. jmp Test6
  156.  
  157. Test5e:
  158. mov   dword [MSR+ 7], $736579
  159.  
  160. ;;;;
  161. Test6:
  162. test edx, PAE_FLAG
  163. jnz Test6e
  164.  
  165. mov   dword [PAE+ 7], $6F6E
  166. jmp Test7
  167.  
  168. Test6e:
  169. mov   dword [PAE+ 7], $736579
  170.  
  171. ;;;;
  172. Test7:
  173. test edx, MCE_FLAG
  174. jnz Test7e
  175.  
  176. mov   dword [MCE+ 8], $6F6E
  177. jmp Test8
  178.  
  179. Test7e:
  180. mov   dword [MCE+ 8], $736579
  181.  
  182. ;;;;
  183. Test8:
  184. test edx, CX8_FLAG
  185. jnz Test8e
  186.  
  187. mov   dword [CX8+ 6], $6F6E
  188. jmp Test9
  189.  
  190. Test8e:
  191. mov   dword [CX8+ 6], $736579
  192. ;;;;
  193.  
  194. Test9:
  195. test edx, APIC_FLAG
  196. jnz Test9e
  197.  
  198. mov   dword [APIC+ 7], $6F6E
  199. jmp Test11
  200.  
  201. Test9e:
  202. mov   dword [APIC+ 7], $736579
  203. ;;;;;
  204.  
  205. Test11:
  206. test edx, SEP_FLAG
  207. jnz Test11e
  208.  
  209. mov   dword [SEP+ 8], $6F6E
  210. jmp Test12
  211.  
  212. Test11e:
  213. mov   dword [SEP+ 8], $736579
  214. ;;;;
  215.  
  216. Test12:
  217. test edx, MTRR_FLAG
  218. jnz Test12e
  219.  
  220. mov   dword [MTRR+ 6], $6F6E
  221. jmp Test13
  222.  
  223. Test12e:
  224. mov   dword [MTRR+ 6], $736579
  225. ;;;;
  226.  
  227. Test13:
  228. test edx, PGE_FLAG
  229. jnz Test13e
  230.  
  231. mov   dword [PGE+ 7], $6F6E
  232. jmp Test14
  233.  
  234. Test13e:
  235. mov   dword [PGE+ 7], $736579
  236. ;;;;;
  237.  
  238. Test14:
  239. test edx, MCA_FLAG
  240. jnz Test14e
  241.  
  242. mov   dword [MCA+ 7], $6F6E
  243. jmp Test15
  244.  
  245. Test14e:
  246. mov   dword [MCA+ 7], $736579
  247. ;;;;
  248.  
  249. Test15:
  250. test edx, CMOV_FLAG
  251. jnz Test15e
  252.  
  253. mov   dword [CMOV+ 8], $6F6E
  254. jmp Test16
  255.  
  256. Test15e:
  257. mov   dword [CMOV+ 8], $736579
  258. ;;;;
  259.  
  260. Test16:
  261. test edx, PAT_FLAG
  262. jnz Test16e
  263.  
  264. mov   dword [PAT+ 6], $6F6E
  265. jmp Test17
  266.  
  267. Test16e:
  268. mov   dword [PAT+ 6], $736579
  269. ;;;;
  270.  
  271. Test17:
  272. test edx, PSE36_FLAG
  273. jnz Test17e
  274.  
  275. mov   dword [PSE36+ 7], $6F6E
  276. jmp Test18
  277.  
  278. Test17e:
  279. mov   dword [PSE36+ 7], $736579
  280. ;;;;
  281.  
  282. Test18:
  283. test edx, PSNUM_FLAG
  284. jnz Test18e
  285.  
  286. mov   dword [PSNUM+ 7], $6F6E
  287. jmp Test19
  288.  
  289. Test18e:
  290. mov   dword [PSNUM+ 7], $736579
  291. ;;;;
  292.  
  293. Test19:
  294. test edx, CLFLUSH_FLAG
  295. jnz Test19e
  296.  
  297. mov   dword [CLFLUSHn + 8], $6F6E
  298. jmp Test21
  299.  
  300. Test19e:
  301. mov   dword [CLFLUSHn + 8], $736579
  302. ;;;;
  303.  
  304. Test21:
  305. test edx, DTS_FLAG
  306. jnz Test21e
  307.  
  308. mov   dword [DTS+ 7], $6F6E
  309. jmp Test22
  310.  
  311. Test21e:
  312. mov   dword [DTS+ 7], $736579
  313. ;;;;
  314.  
  315. Test22:
  316. test edx, ACPI_FLAG
  317. jnz Test22e
  318.  
  319. mov   dword [ACPI+ 7], $6F6E
  320. jmp Test23
  321.  
  322. Test22e:
  323. mov   dword [ACPI+ 7], $736579
  324. ;;;;;
  325.  
  326. Test23:
  327. test edx, MMX_FLAG
  328. jnz Test23e
  329.  
  330. mov   dword [MMX+ 8], $6F6E
  331. mov   dword [MMXs+ 7], $6F6E
  332. jmp Test24
  333.  
  334. Test23e:
  335. mov   dword [MMX+ 8], $736579
  336. mov   dword [MMXs+ 7], $736579
  337. ;;;;;
  338.  
  339. Test24:
  340. test edx, FXSR_FLAG
  341. jnz Test24e
  342.  
  343. mov   dword [FXSR+ 6], $6F6E
  344. jmp Test25
  345.  
  346. Test24e:
  347. mov   dword [FXSR+ 6], $736579
  348. ;;;;;
  349.  
  350. Test25:
  351. test edx, SSE_FLAG
  352. jnz Test25e
  353.  
  354. mov   dword [SSE+ 7], $6F6E
  355. jmp Test26
  356.  
  357. Test25e:
  358. mov   dword [SSE+ 7], $736579
  359.  
  360. ;;;;
  361. Test26:
  362. test edx, SSE2_FLAG
  363. jnz Test26e
  364.  
  365. mov   dword [SSE2+ 7], $6F6E
  366. jmp Test27
  367.  
  368. Test26e:
  369. mov   dword [SSE2+ 7], $736579
  370.  
  371. ;;;;
  372.  
  373. Test27:
  374. test edx, SS_FLAG
  375. jnz Test27e
  376.  
  377. mov   dword [SSn+ 8], $6F6E
  378. jmp Test29;28
  379.  
  380. Test27e:
  381. mov   dword [SSn+ 8], $736579
  382.  
  383. ;;;;
  384.  
  385. ;Test28:
  386. ;test edx, HTT_FLAG
  387. ;jnz Test28e
  388. ;
  389. ;mov   dword [HTT+ 8], $6F6E
  390. ;jmp Test29
  391. ;
  392. ;Test28e:
  393. ;mov   dword [HTT+ 8], $736579
  394.  
  395. ;;;;
  396.  
  397. Test29:
  398. test edx, TM_FLAG
  399. jnz Test29e
  400.  
  401. mov   dword [TM+ 7], $6F6E
  402. jmp Test30
  403.  
  404. Test29e:
  405. mov   dword [TM+ 7], $736579
  406.  
  407. ;;;;
  408.  
  409. Test30:
  410. test edx, IA64_FLAG
  411. jnz Test30e
  412.  
  413. mov   dword [IA64+ 7], $6F6E
  414. jmp Test31
  415.  
  416. Test30e:
  417. mov   dword [IA64+ 7], $736579
  418.  
  419. ;;;;
  420. Test31:
  421. test edx, PBE_FLAG
  422. jnz Test31e
  423.  
  424. mov   dword [PBE+ 8], $6F6E
  425. jmp Standart_out
  426.  
  427. Test31e:
  428. mov   dword [PBE+ 8], $736579
  429.  
  430. Standart_out:
  431.  
  432. ret
  433. ;//////////////////////////////////////////////
  434. decode_sse3_5:   ; is SS3-5 supported
  435.       xor eax,eax
  436.       inc eax
  437.       cpuid
  438.   test  ecx, $1 ; Test bit 1
  439.   jnz   .EX; SSE3 technology is  supported
  440.   jz .EXN
  441.  
  442. .EX:
  443.    mov dword  [sse3+ 6],  $736579
  444.    mov [sse3sup], 1
  445.    jmp exitter
  446. .EXN:
  447.     mov dword [sse3+ 6], $6F6E
  448.     mov [sse3sup],0
  449.  
  450. exitter:
  451.  
  452.  
  453.   test  ecx, $80000 ; Test bit 19
  454.   jnz   .EX1; SSE41 technology is  supported
  455.   jz .EXN1
  456.  
  457. .EX1:
  458.    mov dword  [SSE41+ 11],  $736579
  459.    mov [sse41sup], 1
  460.    jmp exitter1
  461. .EXN1:
  462.     mov dword [SSE41+ 11], $6F6E
  463.     mov [sse41sup],0
  464.  
  465. exitter1:
  466.  
  467.  
  468.   test  ecx, $100000 ; Test bit 20
  469.   jnz   .EX2; SSE42 technology is  supported
  470.   jz .EXN2
  471.  
  472. .EX2:
  473.    mov dword  [SSE42+ 10],  $736579
  474.    mov dword  [SS42+ 11],  $736579
  475.    mov [sse42sup], 1
  476.    jmp exitter2
  477. .EXN2:
  478.    mov dword [SSE42+ 10], $6F6E
  479.    mov dword [SS42+ 11], $6F6E
  480.    mov [sse42sup],0
  481.  
  482. exitter2:
  483.  
  484.  
  485.       xor eax,eax
  486.       mov eax, 80000001h
  487.       cpuid
  488.   test  ecx, $800 ; Test bit 11
  489.   jnz   .EX3; SS5 technology is  supported
  490.   jz .EXN3
  491.  
  492. .EX3:
  493.    mov dword  [SSE5+ 12],  $736579
  494.    mov [sse5sup], 1
  495.    jmp exitter3
  496. .EXN3:
  497.     mov dword [SSE5+ 12], $6F6E
  498.     mov [sse5sup],0
  499.  
  500. exitter3:
  501.  
  502. ret
  503.  
  504.  
  505. decode_extended_features:
  506.       xor eax,eax
  507.       inc eax
  508.       cpuid
  509. Tes1:
  510. test ecx, SSE3_FLAG
  511. jnz Tes1e
  512.  
  513. mov   dword [SS3+ 8], $6F6E
  514. jmp Tes2
  515.  
  516. Tes1e:
  517. mov   dword [SS3+ 8], $736579
  518.  
  519.  
  520. Tes2:
  521. test ecx, MON_FLAG
  522. jnz Tes2e
  523.  
  524. mov   dword [MON+ 8], $6F6E
  525. jmp Tes3
  526.  
  527. Tes2e:
  528. mov   dword [MON+ 8], $736579
  529.  
  530.  
  531. Tes3:
  532. test ecx, DS_CPL_FLAG
  533. jnz Tes3e
  534.  
  535. mov   dword [DS_CPL+ 8], $6F6E
  536. jmp Tes4
  537.  
  538. Tes3e:
  539. mov   dword [DS_CPL+ 8], $736579
  540.  
  541. Tes4:
  542. test ecx, EST_FLAG
  543. jnz Tes4e
  544.  
  545. mov   dword [EST+ 8], $6F6E
  546. jmp Tes5
  547.  
  548. Tes4e:
  549. mov   dword [EST+ 8], $736579
  550.  
  551.  
  552. Tes5:
  553. test ecx, TM2_FLAG
  554. jnz Tes5e
  555.  
  556. mov   dword [TM2+ 8], $6F6E
  557. jmp Tes6
  558.  
  559. Tes5e:
  560. mov   dword [TM2+ 8], $736579
  561.  
  562.  
  563. Tes6:
  564. test ecx, CNXT_ID_FLAG
  565. jnz Tes6e
  566.  
  567. mov   dword [CNXT_ID+ 12], $6F6E
  568. jmp Tes7
  569.  
  570. Tes6e:
  571. mov   dword [CNXT_ID+ 12], $736579
  572.  
  573.  
  574. Tes7:
  575. test ecx, CX16_FLAG
  576. jnz Tes7e
  577.  
  578. mov   dword [CX16+ 12], $6F6E
  579. jmp Tes8
  580.  
  581. Tes7e:
  582. mov   dword [CX16+ 12], $736579
  583.  
  584.  
  585. Tes8:
  586. test ecx, ETPRD_FLAG
  587. jnz Tes8e
  588.  
  589. mov   dword [ETPRD+ 12], $6F6E
  590. jmp Tes9
  591.  
  592. Tes8e:
  593. mov   dword [ETPRD+ 12], $736579
  594.  
  595. Tes9:
  596. test ecx, VMX_FLAG
  597. jnz Tes9e
  598.  
  599. mov   dword [VMX+ 8], $6F6E
  600. jmp Tes10
  601.  
  602. Tes9e:
  603. mov   dword [VMX+ 8], $736579
  604.  
  605. Tes10:
  606. test ecx, SSSE3_FLAG
  607. jnz Tes10e
  608.  
  609. mov   dword [SSSE3+ 12], $6F6E
  610. jmp Tes11
  611.  
  612. Tes10e:
  613. mov   dword [SSSE3+ 12], $736579
  614.  
  615. Tes11:
  616. test ecx, DCA_FLAG
  617. jnz Tes11e
  618.  
  619. mov   dword [DCA+ 8], $6F6E
  620. jmp Tes12
  621.  
  622. Tes11e:
  623. mov   dword [DCA+ 8], $736579
  624.  
  625. Tes12:
  626. test ecx, SMX_FLAG
  627. jnz Tes12e
  628.  
  629. mov   dword [SMX+ 8], $6F6E
  630. jmp Tes13
  631.  
  632. Tes12e:
  633. mov   dword [SMX+ 8], $736579
  634.  
  635. Tes13:
  636. test ecx, PDCM_FLAG
  637. jnz Tes13e
  638.  
  639. mov   dword [newLabel+ 8], $6F6E
  640. jmp Tes14
  641.  
  642. Tes13e:
  643. mov   dword [newLabel+ 8], $736579
  644.  
  645. Tes14:
  646. test ecx, x2APIC_FLAG
  647. jnz Tes14e
  648.  
  649. mov   dword [x2APIC+ 8], $6F6E
  650. jmp Tes15
  651.  
  652. Tes14e:
  653. mov   dword [x2APIC+ 8], $736579
  654.  
  655. Tes15:
  656. test ecx, PPCNT_FLAG
  657. jnz Tes15e
  658.  
  659. mov   dword [PPCNT+ 12], $6F6E
  660. jmp Tes16
  661.  
  662. Tes15e:
  663. mov   dword [PPCNT+ 12], $736579
  664.  
  665. Tes16:
  666.  
  667. ret
  668.  
  669. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  670. decode_extended:
  671.     xor   eax, eax
  672.     mov   eax,$80000000
  673.     cpuid
  674.  
  675. test eax, 80000000h
  676. jnz gooodd
  677.  
  678. jmp baaad
  679.  
  680. baaad:
  681.  
  682. jmp Tez13
  683.  
  684. gooodd:
  685.   xor eax, eax
  686.   mov   eax, $80000001 ;// Setup extended function 8000_0001h
  687.   cpuid
  688.  
  689. Tez1:
  690. test edx, MP_FLAG
  691. jnz Tez1e
  692.  
  693. mov   dword [MP+8], $6F6E
  694. jmp Tez2
  695.  
  696. Tez1e:
  697. mov   dword [MP+ 8], $736579
  698.  
  699. Tez2:
  700. test edx, NX_FLAG
  701. jnz Tez2e
  702.  
  703. mov   dword [NX+ 8], $6F6E
  704. jmp Tez4
  705. ;jmp Tez3 we do detection in another place, because of Cyrix specific MMX+ detection
  706.  
  707. Tez2e:
  708. mov   dword [NX+ 8], $736579
  709.  
  710. ;Tez3:
  711. ;test edx, MMXPi_FLAG
  712. ;jnz Tez3e
  713.  
  714. ;mov   dword [MMXPi+ 8], $6F6E
  715. ;jmp Tez4
  716.  
  717.  
  718. ;Tez3e:
  719. ;mov   dword [MMXPi+ 8], $736579
  720.  
  721. Tez4:
  722. test edx, MMXn_FLAG
  723. jnz Tez4e
  724.  
  725. mov   dword [MMXn+ 8], $6F6E
  726. jmp Tez5
  727.  
  728. Tez4e:
  729. mov   dword [MMXn+ 8], $736579
  730.  
  731. Tez5:
  732. test edx, FXSRn_FLAG
  733. jnz Tez5e
  734.  
  735. mov   dword [FXSRn+ 8], $6F6E
  736. jmp Tez6
  737.  
  738. Tez5e:
  739. mov   dword [FXSRn+ 8], $736579
  740.  
  741. Tez6:
  742. test edx, FFXSR_FLAG
  743. jnz Tez6e
  744.  
  745. mov   dword [FFXSR+ 12], $6F6E
  746. jmp Tez7
  747.  
  748. Tez6e:
  749. mov   dword [FFXSR+ 12], $736579
  750.  
  751. Tez7:
  752. test edx, TSCP_FLAG
  753. jnz Tez7e
  754.  
  755. mov   dword [TSCP+ 12], $6F6E
  756. jmp Tez8
  757.  
  758. Tez7e:
  759. mov   dword [TSCP+ 12], $736579
  760.  
  761.  
  762. Tez8:
  763. test edx, LM_FLAG
  764. jnz Tez8e
  765.  
  766. mov   dword [LM+ 12], $6F6E
  767. jmp Tez9
  768.  
  769. Tez8e:
  770. mov   dword [LM+ 12], $736579
  771.  
  772. Tez9:
  773. test edx, DNo_FLAG
  774. jnz Tez9e
  775.  
  776. mov   dword [DNo+ 12], $6F6E
  777. jmp Tez10
  778.  
  779. Tez9e:
  780. mov   dword [DNo+ 12], $736579
  781.  
  782.  
  783. Tez10:
  784. test edx, DN_FLAG
  785. jnz Tez10e
  786.  
  787. mov   dword [DN+ 12], $6F6E
  788. jmp Tez11
  789.  
  790. Tez10e:
  791. mov   dword [DN+ 12], $736579
  792.  
  793. ;Intel
  794.  
  795. Tez11:
  796. test edx, SYS_FLAG
  797. jnz Tez11e
  798.  
  799. mov   dword [SYS+ 12], $6F6E
  800. jmp Tez12
  801.  
  802. Tez11e:
  803. mov   dword [SYS+ 12], $736579
  804.  
  805.  
  806. Tez12:
  807. test ecx, LAHF_FLAG
  808. jnz Tez12e
  809.  
  810. mov   dword [LAF+ 12], $6F6E
  811. jmp Tez13
  812.  
  813. Tez12e:
  814. mov   dword [LAF+ 12], $736579
  815.  
  816. Tez13:
  817. test ecx, CMPL_FLAG
  818. jnz Tez13e
  819.  
  820. mov   dword [CMPL+ 8], $6F6E
  821. jmp Tez14
  822.  
  823. Tez13e:
  824. mov   dword [CMPL+ 8], $736579
  825.  
  826. Tez14:
  827. test ecx, SVM_FLAG
  828. jnz Tez14e
  829.  
  830. mov   dword [SVM+ 8], $6F6E
  831. jmp Tez15
  832.  
  833. Tez14e:
  834. mov   dword [SVM+ 8], $736579
  835.  
  836. Tez15:
  837. test ecx, MOVCR8_FLAG
  838. jnz Tez15e
  839.  
  840. mov   dword [MCR8+ 12], $6F6E
  841. jmp Tez16
  842.  
  843. Tez15e:
  844. mov   dword [MCR8+ 12], $736579
  845.  
  846. Tez16:
  847. test edx, PAGE_FLAG
  848. jnz Tez16e
  849.  
  850. mov   dword [PAGE+ 8], $6F6E
  851. jmp Tez17
  852.  
  853. Tez16e:
  854. mov   dword [PAGE+ 8], $736579
  855.  
  856. Tez17:
  857. test ecx, EAS_FLAG
  858. jnz Tez17e
  859.  
  860. mov   dword [EAS+ 12], $6F6E
  861. jmp Tez18
  862.  
  863. Tez17e:
  864. mov   dword [EAS+ 12], $736579
  865.  
  866. Tez18:
  867. test ecx, ABM_FLAG
  868. jnz Tez18e
  869.  
  870. mov   dword [ABM+ 8], $6F6E
  871. jmp Tez19
  872.  
  873. Tez18e:
  874. mov   dword [ABM+ 8], $736579
  875.  
  876. Tez19:
  877. test ecx, SSE4A_FLAG
  878. jnz Tez19e
  879.  
  880. mov   dword [SSE4A+ 8], $6F6E
  881. jmp Tez20
  882.  
  883. Tez19e:
  884. mov   dword [SSE4A+ 8], $736579
  885.  
  886. Tez20:
  887. test ecx, MIS_FLAG
  888. jnz Tez20e
  889.  
  890. mov   dword [MIS+ 8], $6F6E
  891. jmp Tez21
  892.  
  893. Tez20e:
  894. mov   dword [MIS+ 8], $736579
  895.  
  896. Tez21:
  897. test ecx, 3DNP_FLAG
  898. jnz Tez21e
  899.  
  900. ;mov   dword [DNP+ 8], $6F6E
  901. ;jmp Tez22
  902.  
  903. Tez21e:
  904. ;mov   dword [DNP+ 8], $736579
  905.  
  906. Tez22:
  907. test ecx, OSVW_FLAG
  908. jnz Tez22e
  909.  
  910. mov   dword [OSVW+ 8], $6F6E
  911. jmp Tez23
  912.  
  913. Tez22e:
  914. mov   dword [OSVW+ 8], $736579
  915.  
  916. Tez23:
  917. test ecx, SKINIT_FLAG
  918. jnz Tez23e
  919.  
  920. mov   dword [SKINIT_+ 12], $6F6E
  921. jmp Tez24
  922.  
  923. Tez23e:
  924. mov   dword [SKINIT_+ 12], $736579
  925.  
  926. Tez24:
  927. test ecx, WDT_FLAG
  928. jnz Tez24e
  929.  
  930. mov   dword [WDT+ 12], $6F6E
  931. jmp Tez25
  932.  
  933. Tez24e:
  934. mov   dword [WDT+ 12], $736579
  935.  
  936. Tez25:
  937.  
  938. ret
  939.  
  940. ;//////////////////////////////////////////////
  941. decode_sse3:   ; is SS3 supported
  942.         xor     eax, eax
  943.         inc     eax
  944.         cpuid
  945.         test    ecx, 1
  946.         setnz   [sse3sup]
  947.         mov     eax, sse3+6
  948.  
  949. write_yes_no:
  950.         mov     dword [eax], 'no'
  951.         jz      @f
  952.         mov     dword [eax], 'yes'
  953. @@:
  954.         ret
  955.  
  956. show_next_bit:
  957.         shr     edx, 1
  958. write_yes_no_cf:
  959.         mov     dword [eax], 'no'
  960.         jnc     @f
  961.         mov     dword [eax], 'yes'
  962. @@:
  963.         ret
  964.