Subversion Repositories Kolibri OS

Rev

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

  1. ;Addresses for bits
  2.  
  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. EST_FLAG equ 0080h        ; EST-7
  42. TM2_FLAG equ 0100h        ; TM2-8
  43. SSSE3_FLAG equ 0200h      ;SSSE3 -9  
  44. CNXT_ID_FLAG equ 0400h    ;CID -10
  45. CX16_FLAG equ 2000h       ;CX16 - 13
  46. ETPRD_FLAG equ 4000h      ;xTPR - 14
  47. DCA_FLAG equ 40000h       ;DCA - 18  
  48.  
  49.  
  50. ; edx cpuid(8000_0001h)
  51.  
  52. SYS_FLAG equ 0800h       ;11
  53.  
  54. MP_FLAG equ 80000h       ;19
  55. NX_FLAG equ 100000h      ;20
  56. MMXPi_FLAG equ 400000h    ;22
  57. MMXn_FLAG equ 800000h     ;23
  58. FXSRn_FLAG equ 1000000h   ;24   it is ÌÌÕ+ for Cyrix
  59. FFXSR_FLAG equ 2000000h  ;25
  60. TSCP_FLAG equ 8000000h   ;27
  61. LM_FLAG equ 20000000h    ;29  EM64T
  62. DNo_FLAG equ 40000000h  ;30
  63. DN_FLAG equ 80000000h   ;31
  64.  
  65. ; ecx cpuid(8000_0001h)
  66. LAHF_FLAG equ 0001h  ; LAHF   0
  67. CMPL_FLAG equ 0002h    ; core multi-processing legacy mode 1
  68. SVM_FLAG equ 0004h     ; secure virtual machine 2
  69. MOVCR8_FLAG equ 0010h    ;AltMovCr8  4
  70.  
  71.  
  72. ;decoding standard features
  73.  
  74. decode_standard_features:
  75.  
  76.  xor eax,eax
  77.  inc eax
  78.  cpuid
  79.  
  80. Test0:
  81. test edx, FPU_FLAG
  82. jnz Test0e
  83.  
  84. mov dword  [FPU+6], $6F6E
  85. jmp Test1
  86.  
  87. Test0e:
  88. mov  dword [FPU+6], $736579
  89.  
  90. ;;;;;;
  91. Test1:
  92. test edx, VME_FLAG
  93. jnz Test1e
  94.  
  95. mov   dword [VME+ 7], $6F6E
  96. jmp Test2
  97.  
  98. Test1e:
  99. mov   dword [VME+ 7], $736579
  100.  
  101. ;;;;;;
  102. Test2:
  103. test edx, DE_FLAG
  104. jnz Test2e
  105.  
  106. mov   dword [DE+ 7], $6F6E
  107. jmp Test3
  108.  
  109. Test2e:
  110. mov   dword [DE+ 7], $736579
  111. ;;;;;;
  112.  
  113. Test3:
  114. test edx, PSE_FLAG
  115. jnz Test3e
  116.  
  117. mov   dword [PSE+ 8], $6F6E
  118. jmp Test4
  119.  
  120. Test3e:
  121. mov   dword [PSE+ 8], $736579
  122.  
  123. ;;;;
  124. Test4:
  125. test edx, TSC_FLAG
  126. jnz Test4e
  127.  
  128. mov   dword [TSC+ 6], $6F6E
  129. jmp Test5
  130.  
  131. Test4e:
  132. mov   dword [TSC+ 6], $736579
  133.  
  134. ;;;;
  135. Test5:
  136. test edx, MSR_FLAG
  137. jnz Test5e
  138.  
  139. mov   dword [MSR+ 7], $6F6E
  140. jmp Test6
  141.  
  142. Test5e:
  143. mov   dword [MSR+ 7], $736579
  144.  
  145. ;;;;
  146. Test6:
  147. test edx, PAE_FLAG
  148. jnz Test6e
  149.  
  150. mov   dword [PAE+ 7], $6F6E
  151. jmp Test7
  152.  
  153. Test6e:
  154. mov   dword [PAE+ 7], $736579
  155.  
  156. ;;;;
  157. Test7:
  158. test edx, MCE_FLAG
  159. jnz Test7e
  160.  
  161. mov   dword [MCE+ 8], $6F6E
  162. jmp Test8
  163.  
  164. Test7e:
  165. mov   dword [MCE+ 8], $736579
  166.  
  167. ;;;;
  168. Test8:
  169. test edx, CX8_FLAG
  170. jnz Test8e
  171.  
  172. mov   dword [CX8+ 6], $6F6E
  173. jmp Test9
  174.  
  175. Test8e:
  176. mov   dword [CX8+ 6], $736579
  177. ;;;;
  178.  
  179. Test9:
  180. test edx, APIC_FLAG
  181. jnz Test9e
  182.  
  183. mov   dword [APIC+ 7], $6F6E
  184. jmp Test11
  185.  
  186. Test9e:
  187. mov   dword [APIC+ 7], $736579
  188. ;;;;;
  189.  
  190. Test11:
  191. test edx, SEP_FLAG
  192. jnz Test11e
  193.  
  194. mov   dword [SEP+ 8], $6F6E
  195. jmp Test12
  196.  
  197. Test11e:
  198. mov   dword [SEP+ 8], $736579
  199. ;;;;
  200.  
  201. Test12:
  202. test edx, MTRR_FLAG
  203. jnz Test12e
  204.  
  205. mov   dword [MTRR+ 6], $6F6E
  206. jmp Test13
  207.  
  208. Test12e:
  209. mov   dword [MTRR+ 6], $736579
  210. ;;;;
  211.  
  212. Test13:
  213. test edx, PGE_FLAG
  214. jnz Test13e
  215.  
  216. mov   dword [PGE+ 7], $6F6E
  217. jmp Test14
  218.  
  219. Test13e:
  220. mov   dword [PGE+ 7], $736579
  221. ;;;;;
  222.  
  223. Test14:
  224. test edx, MCA_FLAG
  225. jnz Test14e
  226.  
  227. mov   dword [MCA+ 7], $6F6E
  228. jmp Test15
  229.  
  230. Test14e:
  231. mov   dword [MCA+ 7], $736579
  232. ;;;;
  233.  
  234. Test15:
  235. test edx, CMOV_FLAG
  236. jnz Test15e
  237.  
  238. mov   dword [CMOV+ 8], $6F6E
  239. jmp Test16
  240.  
  241. Test15e:
  242. mov   dword [CMOV+ 8], $736579
  243. ;;;;
  244.  
  245. Test16:
  246. test edx, PAT_FLAG
  247. jnz Test16e
  248.  
  249. mov   dword [PAT+ 6], $6F6E
  250. jmp Test17
  251.  
  252. Test16e:
  253. mov   dword [PAT+ 6], $736579
  254. ;;;;
  255.  
  256. Test17:
  257. test edx, PSE36_FLAG
  258. jnz Test17e
  259.  
  260. mov   dword [PSE36+ 7], $6F6E
  261. jmp Test18
  262.  
  263. Test17e:
  264. mov   dword [PSE36+ 7], $736579
  265. ;;;;
  266.  
  267. Test18:
  268. test edx, PSNUM_FLAG
  269. jnz Test18e
  270.  
  271. mov   dword [PSNUM+ 7], $6F6E
  272. jmp Test19
  273.  
  274. Test18e:
  275. mov   dword [PSNUM+ 7], $736579
  276. ;;;;
  277.  
  278. Test19:
  279. test edx, CLFLUSH_FLAG
  280. jnz Test19e
  281.  
  282. mov   dword [CLFLUSHn + 8], $6F6E
  283. jmp Test21
  284.  
  285. Test19e:
  286. mov   dword [CLFLUSHn + 8], $736579
  287. ;;;;
  288.  
  289. Test21:
  290. test edx, DTS_FLAG
  291. jnz Test21e
  292.  
  293. mov   dword [DTS+ 7], $6F6E
  294. jmp Test22
  295.  
  296. Test21e:
  297. mov   dword [DTS+ 7], $736579
  298. ;;;;
  299.  
  300. Test22:
  301. test edx, ACPI_FLAG
  302. jnz Test22e
  303.  
  304. mov   dword [ACPI+ 7], $6F6E
  305. jmp Test23
  306.  
  307. Test22e:
  308. mov   dword [ACPI+ 7], $736579
  309. ;;;;;
  310.  
  311. Test23:
  312. test edx, MMX_FLAG
  313. jnz Test23e
  314.  
  315. mov   dword [MMX+ 8], $6F6E
  316. mov   dword [MMXs+ 7], $6F6E
  317. jmp Test24
  318.  
  319. Test23e:
  320. mov   dword [MMX+ 8], $736579
  321. mov   dword [MMXs+ 7], $736579
  322. ;;;;;
  323.  
  324. Test24:
  325. test edx, FXSR_FLAG
  326. jnz Test24e
  327.  
  328. mov   dword [FXSR+ 6], $6F6E
  329. jmp Test25
  330.  
  331. Test24e:
  332. mov   dword [FXSR+ 6], $736579
  333. ;;;;;
  334.  
  335. Test25:
  336. test edx, SSE_FLAG
  337. jnz Test25e
  338.  
  339. mov   dword [SSE+ 7], $6F6E
  340. jmp Test26
  341.  
  342. Test25e:
  343. mov   dword [SSE+ 7], $736579
  344.  
  345. ;;;;
  346. Test26:
  347. test edx, SSE2_FLAG
  348. jnz Test26e
  349.  
  350. mov   dword [SSE2+ 7], $6F6E
  351. jmp Test27
  352.  
  353. Test26e:
  354. mov   dword [SSE2+ 7], $736579
  355.  
  356. ;;;;
  357.  
  358. Test27:
  359. test edx, SS_FLAG
  360. jnz Test27e
  361.  
  362. mov   dword [SSn+ 8], $6F6E
  363. jmp Test29;28
  364.  
  365. Test27e:
  366. mov   dword [SSn+ 8], $736579
  367.  
  368. ;;;;
  369.  
  370. ;Test28:
  371. ;test edx, HTT_FLAG
  372. ;jnz Test28e
  373. ;
  374. ;mov   dword [HTT+ 8], $6F6E
  375. ;jmp Test29
  376. ;
  377. ;Test28e:
  378. ;mov   dword [HTT+ 8], $736579
  379.  
  380. ;;;;
  381.  
  382. Test29:
  383. test edx, TM_FLAG
  384. jnz Test29e
  385.  
  386. mov   dword [TM+ 7], $6F6E
  387. jmp Test30
  388.  
  389. Test29e:
  390. mov   dword [TM+ 7], $736579
  391.  
  392. ;;;;
  393.  
  394. Test30:
  395. test edx, IA64_FLAG
  396. jnz Test30e
  397.  
  398. mov   dword [IA64+ 7], $6F6E
  399. jmp Test31
  400.  
  401. Test30e:
  402. mov   dword [IA64+ 7], $736579
  403.  
  404. ;;;;
  405. Test31:
  406. test edx, PBE_FLAG
  407. jnz Test31e
  408.  
  409. mov   dword [PBE+ 8], $6F6E
  410. jmp Standart_out
  411.  
  412. Test31e:
  413. mov   dword [PBE+ 8], $736579
  414.  
  415. Standart_out:
  416.  
  417. ret
  418. ;//////////////////////////////////////////////
  419. decode_sse3:   ; is SS3 supported
  420.       xor eax,eax
  421.       inc eax
  422.       cpuid
  423.   test  ecx, $1 ; Test bit 1
  424.   jnz   .EX; SSE3 technology is  supported
  425.   jz .EXN
  426.  
  427. .EX:
  428.    mov dword  [sse3+ 6],  $736579
  429.    mov [sse3sup], 1
  430.    jmp exitter
  431. .EXN:
  432.     mov dword [sse3+ 6], $6F6E
  433.     mov [sse3sup],0
  434.  
  435. exitter:
  436.  
  437. ret
  438. ;//////////////////////////////////////////////
  439. decode_extended_features:
  440.       xor eax,eax
  441.       inc eax
  442.       cpuid
  443. Tes1:
  444. test ecx, SSE3_FLAG
  445. jnz Tes1e
  446.  
  447. mov   dword [SS3+ 8], $6F6E
  448. jmp Tes2
  449.  
  450. Tes1e:
  451. mov   dword [SS3+ 8], $736579
  452.  
  453.  
  454. Tes2:
  455. test ecx, MON_FLAG
  456. jnz Tes2e
  457.  
  458. mov   dword [MON+ 8], $6F6E
  459. jmp Tes3
  460.  
  461. Tes2e:
  462. mov   dword [MON+ 8], $736579
  463.  
  464.  
  465. Tes3:
  466. test ecx, DS_CPL_FLAG
  467. jnz Tes3e
  468.  
  469. mov   dword [DS_CPL+ 8], $6F6E
  470. jmp Tes4
  471.  
  472. Tes3e:
  473. mov   dword [DS_CPL+ 8], $736579
  474.  
  475. Tes4:
  476. test ecx, EST_FLAG
  477. jnz Tes4e
  478.  
  479. mov   dword [EST+ 8], $6F6E
  480. jmp Tes5
  481.  
  482. Tes4e:
  483. mov   dword [EST+ 8], $736579
  484.  
  485.  
  486. Tes5:
  487. test ecx, TM2_FLAG
  488. jnz Tes5e
  489.  
  490. mov   dword [TM2+ 8], $6F6E
  491. jmp Tes6
  492.  
  493. Tes5e:
  494. mov   dword [TM2+ 8], $736579
  495.  
  496.  
  497. Tes6:
  498. test ecx, CNXT_ID_FLAG
  499. jnz Tes6e
  500.  
  501. mov   dword [CNXT_ID+ 12], $6F6E
  502. jmp Tes7
  503.  
  504. Tes6e:
  505. mov   dword [CNXT_ID+ 12], $736579
  506.  
  507.  
  508. Tes7:
  509. test ecx, CX16_FLAG
  510. jnz Tes7e
  511.  
  512. mov   dword [CX16+ 12], $6F6E
  513. jmp Tes8
  514.  
  515. Tes7e:
  516. mov   dword [CX16+ 12], $736579
  517.  
  518.  
  519. Tes8:
  520. test ecx, ETPRD_FLAG
  521. jnz Tes8e
  522.  
  523. mov   dword [ETPRD+ 12], $6F6E
  524. jmp Tes9
  525.  
  526. Tes8e:
  527. mov   dword [ETPRD+ 12], $736579
  528.  
  529. Tes9:
  530. test ecx, VMX_FLAG
  531. jnz Tes9e
  532.  
  533. mov   dword [VMX+ 8], $6F6E
  534. jmp Tes10
  535.  
  536. Tes9e:
  537. mov   dword [VMX+ 8], $736579
  538.  
  539. Tes10:
  540. test ecx, SSSE3_FLAG
  541. jnz Tes10e
  542.  
  543. mov   dword [SSSE3+ 12], $6F6E
  544. jmp Tes11
  545.  
  546. Tes10e:
  547. mov   dword [SSSE3+ 12], $736579
  548.  
  549. Tes11:
  550. test ecx, DCA_FLAG
  551. jnz Tes11e
  552.  
  553. mov   dword [DCA+ 8], $6F6E
  554. jmp Tes12
  555.  
  556. Tes11e:
  557. mov   dword [DCA+ 8], $736579
  558.  
  559. Tes12:
  560.  
  561.  
  562. ret
  563.  
  564. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  565. decode_extended:
  566.     xor   eax, eax
  567.     mov   eax,$80000000
  568.     cpuid
  569.  
  570. test eax, 80000000h
  571. jnz gooodd
  572.  
  573. jmp baaad
  574.  
  575. baaad:
  576.  
  577.  
  578. jmp Tez13
  579.  
  580. gooodd:
  581.   xor eax, eax
  582.   mov   eax, $80000001 ;// Setup extended function 8000_0001h
  583.   cpuid
  584.  
  585. Tez1:
  586. test edx, MP_FLAG
  587. jnz Tez1e
  588.  
  589. mov   dword [MP+8], $6F6E
  590. jmp Tez2
  591.  
  592. Tez1e:
  593. mov   dword [MP+ 8], $736579
  594.  
  595. Tez2:
  596. test edx, NX_FLAG
  597. jnz Tez2e
  598.  
  599. mov   dword [NX+ 8], $6F6E
  600. jmp Tez4
  601. ;jmp Tez3 we do detection in another place, because of Cyrix specific MMX+ detection
  602.  
  603. Tez2e:
  604. mov   dword [NX+ 8], $736579
  605.  
  606. ;Tez3:
  607. ;test edx, MMXPi_FLAG
  608. ;jnz Tez3e
  609.  
  610. ;mov   dword [MMXPi+ 8], $6F6E
  611. ;jmp Tez4
  612.  
  613.  
  614. ;Tez3e:
  615. ;mov   dword [MMXPi+ 8], $736579
  616.  
  617. Tez4:
  618. test edx, MMXn_FLAG
  619. jnz Tez4e
  620.  
  621. mov   dword [MMXn+ 8], $6F6E
  622. jmp Tez5
  623.  
  624. Tez4e:
  625. mov   dword [MMXn+ 8], $736579
  626.  
  627. Tez5:
  628. test edx, FXSRn_FLAG
  629. jnz Tez5e
  630.  
  631. mov   dword [FXSRn+ 8], $6F6E
  632. jmp Tez6
  633.  
  634. Tez5e:
  635. mov   dword [FXSRn+ 8], $736579
  636.  
  637. Tez6:
  638. test edx, FFXSR_FLAG
  639. jnz Tez6e
  640.  
  641. mov   dword [FFXSR+ 12], $6F6E
  642. jmp Tez7
  643.  
  644. Tez6e:
  645. mov   dword [FFXSR+ 12], $736579
  646.  
  647. Tez7:
  648. test edx, TSCP_FLAG
  649. jnz Tez7e
  650.  
  651. mov   dword [TSCP+ 12], $6F6E
  652. jmp Tez8
  653.  
  654. Tez7e:
  655. mov   dword [TSCP+ 12], $736579
  656.  
  657.  
  658. Tez8:
  659. test edx, LM_FLAG
  660. jnz Tez8e
  661.  
  662. mov   dword [LM+ 12], $6F6E
  663. jmp Tez9
  664.  
  665. Tez8e:
  666. mov   dword [LM+ 12], $736579
  667.  
  668. Tez9:
  669. test edx, DNo_FLAG
  670. jnz Tez9e
  671.  
  672. mov   dword [DNo+ 12], $6F6E
  673. jmp Tez10
  674.  
  675. Tez9e:
  676. mov   dword [DNo+ 12], $736579
  677.  
  678.  
  679. Tez10:
  680. test edx, DN_FLAG
  681. jnz Tez10e
  682.  
  683. mov   dword [DN+ 12], $6F6E
  684. jmp Tez11
  685.  
  686. Tez10e:
  687. mov   dword [DN+ 12], $736579
  688.  
  689. ;Intel
  690.  
  691. Tez11:
  692. test edx, SYS_FLAG
  693. jnz Tez11e
  694.  
  695. mov   dword [SYS+ 12], $6F6E
  696. jmp Tez12
  697.  
  698. Tez11e:
  699. mov   dword [SYS+ 12], $736579
  700.  
  701.  
  702. Tez12:
  703. test ecx, LAHF_FLAG
  704. jnz Tez12e
  705.  
  706. mov   dword [LAF+ 12], $6F6E
  707. jmp Tez13
  708.  
  709. Tez12e:
  710. mov   dword [LAF+ 12], $736579
  711.  
  712. Tez13:
  713. test ecx, CMPL_FLAG
  714. jnz Tez13e
  715.  
  716. mov   dword [CMPL+ 12], $6F6E
  717. jmp Tez14
  718.  
  719. Tez13e:
  720. mov   dword [CMPL+ 12], $736579
  721.  
  722. Tez14:
  723. test ecx, SVM_FLAG
  724. jnz Tez14e
  725.  
  726. mov   dword [SVM+ 8], $6F6E
  727. jmp Tez15
  728.  
  729. Tez14e:
  730. mov   dword [SVM+ 8], $736579
  731.  
  732. Tez15:
  733. test ecx, MOVCR8_FLAG
  734. jnz Tez15e
  735.  
  736. mov   dword [MCR8+ 12], $6F6E
  737. jmp Tez16
  738.  
  739. Tez15e:
  740. mov   dword [MCR8+ 12], $736579
  741.  
  742. Tez16:
  743.  
  744. ret