Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
318 heavyiron 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