fixed CPUID extended Family/Model detection for modern CPUs

git-svn-id: svn://kolibrios.org@7676 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Artem Jerdev (art_zh) 2019-08-23 20:12:13 +00:00
parent e1a519a379
commit f16345a714

View File

@ -7,47 +7,47 @@
; ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК! ; ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК!
; ;
; Заметки : ; Заметки :
; Дописать запуск тестов (rtst) (нет реакции на ошибку запуска) ; Дописать запуск тестов (rtst) (нет реакции на ошибку запуска)
; Переделать обновление графика (сделать отдельным процессом) ; Переделать обновление графика (сделать отдельным процессом)
; Добавить реакцию на параметры датчиков ; Добавить реакцию на параметры датчиков
; ;
; Внешние файлы : ; Внешние файлы :
; hwm*.inc - процедуры работы с датчиками мониторинга ; hwm*.inc - процедуры работы с датчиками мониторинга
; system.inc - вычисление загрузки процессора, завершение теста, etc... ; system.inc - вычисление загрузки процессора, завершение теста, etc...
; tests.inc - тесты ;-) ; tests.inc - тесты ;-)
; diag.inc - поддержка диаграм ; diag.inc - поддержка диаграм
; tab_*.inc - процедуры отрисовки соответствуюших вкладок ; tab_*.inc - процедуры отрисовки соответствуюших вкладок
; Identifier buttons : ; Identifier buttons :
; 01 - Exit ; 01 - Exit
; 02 - Info tab ; 02 - Info tab
; 03 - Tests tab ; 03 - Tests tab
; 04 - Config tab ; 04 - Config tab
; 05 - About tab ; 05 - About tab
; 06 - P5 test (tab_test.inc) ; 06 - P5 test (tab_test.inc)
; 07 - P6 test (tab_test.inc) ; 07 - P6 test (tab_test.inc)
; 08 - K6 test (tab_test.inc) ; 08 - K6 test (tab_test.inc)
; 09 - K7 test (tab_test.inc) ; 09 - K7 test (tab_test.inc)
; 10 - MMX test - not used (tab_test.inc) ; 10 - MMX test - not used (tab_test.inc)
; 11 - Update time increment (tab_conf.inc) ; 11 - Update time increment (tab_conf.inc)
; 12 - Update time decriment (tab_conf.inc) ; 12 - Update time decriment (tab_conf.inc)
; 13..17 - Color Changing buttons CPU_load, Mem_usage, Temp1, Temp2, Temp3 ; 13..17 - Color Changing buttons CPU_load, Mem_usage, Temp1, Temp2, Temp3
include 'config.inc' include 'config.inc'
include 'macros.inc' include 'macros.inc'
macro clear_prev_no arg1 ; clears previous number printed at arg1 macro clear_prev_no arg1 ; clears previous number printed at arg1
{ {
pusha pusha
mov ebx, 0x00070000 mov ebx, 0x00070000
mov ecx, 1000000 ; dummy value mov ecx, 1000000 ; dummy value
mov edx, arg1 mov edx, arg1
mov esi, 0x40000000 + tcol mov esi, 0x40000000 + tcol
mov edi, tcol ; bg col mov edi, tcol ; bg col
mov eax, 47 mov eax, 47
int 0x40 int 0x40
popa popa
} }
@ -80,6 +80,15 @@ CODE
and ax, 0x0F0F and ax, 0x0F0F
mov [CPU_fam], ah mov [CPU_fam], ah
mov [CPU_mod], al mov [CPU_mod], al
mov eax, ecx
shr eax, 12
and eax, 0x0FFF0 ; Extended Family/Model bits
or [CPU_mod], al
mov al, [CPU_fam] ; will not work on AMD fam.20h -- fix it later!!
cmp al, 0x0F
jne @f
add [CPU_fam], ah
@@:
shr edx, 23 shr edx, 23
and dl, 1 and dl, 1
mov [CPU_mmx], dl mov [CPU_mmx], dl
@ -218,9 +227,9 @@ draw_window:
int 0x40 int 0x40
; write parameter names (Cpu load, temper, etc ...) ; write parameter names (Cpu load, temper, etc ...)
mov edx, msgs_mon ; text for indicators mov edx, msgs_mon ; text for indicators
mov ebx, 17 * 65536 + 30 mov ebx, 17 * 65536 + 30
call show_text call show_text
mov edx, msgs_mon2 mov edx, msgs_mon2
mov ebx, 166 * 65536 + 30 mov ebx, 166 * 65536 + 30
@ -244,7 +253,7 @@ del_tabs:
@@: @@:
int 0x40 int 0x40
inc edx inc edx
cmp edx, 0x80000000 + 13 + 5 ; 5 (buttons) cmp edx, 0x80000000 + 13 + 5 ; 5 (buttons)
jne @b jne @b
draw_tabs: draw_tabs:
@ -261,7 +270,7 @@ draw_tabs:
int 0x40 int 0x40
add ecx, 10 * 65536 add ecx, 10 * 65536
inc edx inc edx
cmp edx, 13 + 5 ; 5 (buttons) cmp edx, 13 + 5 ; 5 (buttons)
jne @b jne @b
; info, test, config, about buttons ; info, test, config, about buttons
@ -271,19 +280,19 @@ draw_tabs:
mov eax, 8 mov eax, 8
mov ebx, 10 * 65536 + 70 mov ebx, 10 * 65536 + 70
mov edx, 2 mov edx, 2
n_bt: n_bt:
push ecx push ecx
mov ecx, edi mov ecx, edi
mov esi, tcol mov esi, tcol
cmp byte [act_tab], dl cmp byte [act_tab], dl
jne na1 jne na1
mov esi, atcol mov esi, atcol
na1: na1:
int 0x40 int 0x40
inc edx inc edx
add ebx, 73 * 65536 add ebx, 73 * 65536
pop ecx pop ecx
loop n_bt loop n_bt
; write name tabs ; write name tabs
mov eax, 4 mov eax, 4
@ -319,25 +328,25 @@ na1:
; draw the selected tab ; draw the selected tab
mov al, [act_tab] mov al, [act_tab]
cmp al, 2 cmp al, 2
je info_tab je info_tab
cmp al, 3 cmp al, 3
je test_tab je test_tab
cmp al, 4 cmp al, 4
je config_tab je config_tab
jmp about_tab jmp about_tab
;--- Drow Info tab --------------- ;--- Drow Info tab ---------------
info_tab: info_tab:
include "tab_info.inc" include "tab_info.inc"
;--- Drow test tab --------------- ;--- Drow test tab ---------------
test_tab: test_tab:
include "tab_test.inc" include "tab_test.inc"
;--- Drow Config tab ------------- ;--- Drow Config tab -------------
config_tab: config_tab:
include "tab_conf.inc" include "tab_conf.inc"
;--- Drow About tab -------------- ;--- Drow About tab --------------
about_tab: about_tab:
include "tab_about.inc" include "tab_about.inc"
redraw: redraw:
@ -358,11 +367,11 @@ redraw:
jl @b jl @b
; write CPU usage ; write CPU usage
call cpu_usage call cpu_usage
;--- добавляем на график --- ;--- добавляем на график ---
mov esi, d_cpu_load mov esi, d_cpu_load
call d_add call d_add
call d_show call d_show
;--------------------------- ;---------------------------
movzx ecx, al movzx ecx, al
mov eax, 47 mov eax, 47
@ -497,7 +506,7 @@ volt_nxt:
fsub dword [edi] fsub dword [edi]
fabs fabs
; fcomp dword [c_eps] ; bug in MeOsEmul ; fcomp dword [c_eps] ; bug in MeOsEmul
; fstsw ax ; fstsw ax
fcom dword [c_eps] ; 0xBADCODE fcom dword [c_eps] ; 0xBADCODE
fstsw ax fstsw ax
@ -522,7 +531,7 @@ volt_nxt:
no_monitor: no_monitor:
;--------------------------- ;---------------------------
mov al, [act_tab] ; check if info tab is active mov al, [act_tab] ; check if info tab is active
cmp al, 2 cmp al, 2
jne end_drow_tab jne end_drow_tab
jmp free_mem ; in tab_info.inc jmp free_mem ; in tab_info.inc