0,0 → 1,583 |
; |
; Ghost Monitor - óòèëèòà (ñòðåññ) òåñòèðîâàíèÿ è ìîíèòîðèíãà ñèñòåìû |
; ÂÎÇÌÎÆÍÀ ÏÎÐ×À ÎÁÎÐÓÄÎÂÀÍÈß! |
; ÈÑÏÎËÜÇÓÉÒÅ ÍÀ ÑÂÎÉ ÑÒÐÀÕ È ÐÈÑÊ! |
; |
; Çàìåòêè : |
; Äîïèñàòü çàïóñê òåñòîâ (rtst) (íåò ðåàêöèè íà îøèáêó çàïóñêà) |
; Ïåðåäåëàòü îáíîâëåíèå ãðàôèêà (ñäåëàòü îòäåëüíûì ïðîöåññîì) |
; Äîáàâèòü ðåàêöèþ íà ïàðàìåòðû äàò÷èêîâ |
; |
; Èñòîðèÿ : |
; 09/2005 - íà÷àëî |
; 04/10/2005 - îòêîììåíòèðîâàë êîä |
; 09/11/2005 - äîïèñàíû òåñòû (ïîêà íåò òåñòà ïàìÿòè) |
; 30/01/2006 - äîáàâëåííû ãðàôèêè |
; 02/02/2006 - Äîáàâëåíà íàñòðîéêà âðåìåíè îáíîâëåíèÿ |
; 10/02/2006 - äîáàâëåííà åùå èíôîðìàöèÿ ñ äàò÷èêîâ, îïò. wb_get_chip_name |
; 01/03/2006 - äîáàâëåííà åùå èíôîðìàöèÿ ñ äàò÷èêîâ |
; 16/03/2006 - îïòèìèçèðîâàíà ïî ðàçìåðó |
; 17/03/2006 - ïîäñâåòêà èçìåí¸ííûõ ïàðàìåòðîâ, îïòèìèçàöèÿ, about |
; 20/03/2006 - Ïóáëèêàöèÿ |
; --- v 0.2 --- |
; 24/03/2006 - Äîáàâëåííà ïîääåðæêà IT8705F, IT8712F è SIS950 |
; 25/03/2006 - Âûâîä òð¸õ òåìïåðàòóð è òð¸õ âåíòèëåé |
; 28/03/2006 - Ãðàôèê temp3 è èçìåíåíèå öâåòà ãðàôèêîâ, îáðàáîòêà îòðèöàòåëüíûõ çíà÷åíèé ãðàôèêà |
; 30/03/2006 - Îïòèìèçàöèÿ ïî ðàçìåðó âåðñèè îò 28/03/2006, ïåðåïèñàë ðèñîâàíèå ãðàôèêà |
; 14/04/2006 - Èñïðàâèë ãðàôèê (jle -> jbe), äîáàâèë mem usage, âû÷èñëåíèå äëèííû ÷èñåë, çàêðûòèå ïî Esc |
; 19/04/2006 - Î÷èñòêà íåèíèöèàëèçèðîâàííûõ äàííûõ |
; --- v 0.3 --- |
; 01/07/2006 - Ðàçëè÷èå ITE 8705F, ITE 8712F è IT8716F |
; 04/07/2006 - Äîáàâëåííû íàïðóãè äëÿ ÷èïîâ Winbond |
; 10/07/2006 - äîáàâëåííû íàïðóãè äëÿ ÷èïîâ ITE, ìíîæèòåëè äëÿ AMD K6, Intel P6, P7, îïòèìèçàöèÿ ïî ðàçìåðó |
; 11/07/2006 - Ðåàêöèÿ íà èçìåíåíèå íàïðóãè, îïòèìèçàöèÿ ïî ðàçìåðó |
; 12/07/2006 - it87_get_fan_speed bug fix, çàâåðøåíèå òåñòà ïî 18/18 |
; 13/07/2006 - it87_get_fan_speed bug fix, èñïðàâëåí âûâîä ÷èñåë ñ ïëàâàþùåé òî÷êîé |
; 14/07/2006 - èñïðàâëåííû ïîêàçàíèÿ -12V äëÿ Winbond, îñòàëàñü ïðîáëåíìà ñ -5V |
; 17/07/2006 - èñïðàâëåííà îøèáêà îïðåäåëåíèÿ ìíîæèòåëÿ äëÿ P6, äîáàâëåííû ìíîæèòåëè |
; 18/07/2006 - Óëè÷øèë âûâîä ìíîæèòåëÿ, èñïðàâëåííû ìíîæèòåëè äëÿ P6 Tualatin, config.inc |
; 22/07/2006 - P6 multiplier bugfix |
; 30/07/2006 - P6 multiplier bugfix |
; |
; Ýé! Ó ìåíÿ íåò ìíîãî âðåìåíè. |
|
; Âíåøíèå ôàéëû : |
; hwm*.inc - ïðîöåäóðû ðàáîòû ñ äàò÷èêàìè ìîíèòîðèíãà |
; system.inc - âû÷èñëåíèå çàãðóçêè ïðîöåññîðà, çàâåðøåíèå òåñòà, etc... |
; tests.inc - òåñòû ;-) |
; diag.inc - ïîääåðæêà äèàãðàì |
; *_tab.inc - ïðîöåäóðû îòðèñîâêè ñîîòâåòñòâóþøèõ âêëàäîê |
|
|
; Èäåíòèôèêàòîðû êíîïîê : |
; 01 - Exit |
; 02 - Info tab |
; 03 - Tests tab |
; 04 - Config tab |
; 05 - About tab |
; 06 - P5 test |
; 07 - P6 test |
; 08 - K6 test |
; 09 - K7 test |
; 10 - MMX test - not used |
; 11 - Update time increment |
; 12 - Update time decriment |
; 13..17 - Èçìåíåíèå öâåòà CPU_load, Mem_usage, Temp1, Temp2, Temp3 |
|
include 'config.inc' |
include 'macros.inc' |
|
tcol equ 0x5080d0 |
atcol equ 0x4070c0 |
val_mod equ 0x3090 |
|
MEOS_APP_START |
include "tests.inc" ; <-- Ìíîãî âûðàâíèâàíèé, ëó÷øå çäåñü |
CODE |
;--- Init ------------------------------------------------------------ |
; Î÷èùàåì íåèíèöèàëèçèðîâàííûå äàííûå |
mov ecx, __memory - __udata |
mov edi, __udata |
xor eax, eax |
rep stosb |
|
xor eax, eax |
cpuid ; Óçíà¸ì ïðîèçâîäèòåëÿ ïðîöà |
mov [Vendor + 0], ebx |
mov [Vendor + 4], edx |
mov [Vendor + 8], ecx |
mov eax, 1 |
cpuid ; Åñòü ëè MMX ? |
mov ecx, eax |
shr al, 4 |
and ax, 0x0F0F |
mov [CPU_fam], ah |
mov [CPU_mod], al |
shr edx, 23 |
and dl, 1 |
mov [CPU_mmx], dl |
shr ecx, 12 |
and cl, 11b |
mov [CPU_type], cl |
|
; ! Öâåòà èç ìàññèâà colors |
mov dword[d_cpu_load], 0xFF00 ; èíèöèàëèçèðóåì ãðàôèê çàãðóçêè ÀËÓ |
mov dword[d_mem_usage], 0x8BA169 ; -- mem usega |
mov dword[d_temp1], 0xFF0000 ; -- ãðàôèê òåìïåðàòóðû ÖÏÓ |
mov dword[d_temp2], 0xFF ; -- ãðàôèê òåìïåðàòóðû ÌÏ |
mov dword[d_temp3], 0xFF7E23 |
|
call hwm_init ; Èíèöèàëèçèðóåì ÷èï ìîíèòîðèíãà |
|
jmp draw_window |
;--- Wait & translate event ------------------------------------------ |
wait_for_event: |
mov byte[diag_add_v], 0 ; äîáàâëÿåì äàííûå ê ãðàôèêó òîëüêî ïî òàéìåðó |
mov ebx, [update_time] |
mov eax, 23 |
int 0x40 |
test eax, eax |
jnz @f |
inc byte [diag_add_v] |
inc eax ; ïåðåðèñóåì îêíî (eax := 1) |
@@: dec eax ; redraw request ? |
jz draw_window |
dec eax ; key in buffer ? |
jz key |
dec eax ; button in buffer ? |
jz button |
jmp wait_for_event |
;--- Key pressed ----------------------------------------------------- |
key: |
mov eax, 2 |
int 0x40 |
cmp ah, 27 ; Esc - çàâåðøåíèå ðàáîòû |
je exit |
jmp wait_for_event |
;--- Button down ----------------------------------------------------- |
button: |
mov eax, 17 ; get id |
int 0x40 |
cmp ah, 1 ; button id == 1 ? |
jne noexit |
exit: cmp byte[test_id], 0 |
je @f |
call stop_test |
@@: mov eax, -1 ; close this program |
int 0x40 |
noexit: |
; êíîïêè âêëàäîê (2 .. 5) |
cmp ah, 5 |
jg no_tabs |
mov byte[act_tab], ah |
jmp draw_window |
no_tabs: |
; êíîïêè çàïóñêà òåñòâî (6 .. 10) |
cmp ah, 10 |
jg no_test_bt |
; åñëè íåò çàïóùåíûõ òåñòîâ - çàïóñêàåì âûáðàííûé |
cmp byte[test_id], 0 |
je run_test |
; åñëè êíîïêà àêòèâíîãî òåñòà - îñòàíàâëèâàåì òåñò, èíà÷å íè÷åãî íå äåëàåì |
cmp [test_id], ah |
jne wait_for_event |
call stop_test |
jmp draw_window |
|
tsts: dd p5, p6, k6, k7 |
run_test: |
push eax |
movzx ecx, ah |
mov ecx, [tsts + (ecx * 4) - (6 * 4)] |
rtst: mov eax, 51 |
mov edx, stp |
mov ebx, 1 |
int 0x40 |
cmp eax, 0xFFFFFFF0 ; -16 |
je wait_for_event ; <-- îøèáêà çàïóñêà òåñòà, ÏÅÐÅÏÈÑÀÒÜ |
mov [test_pid], eax |
pop eax |
mov byte [test_id], ah |
jmp draw_window |
;------------------------- |
; êíîïêè èçìåíåíèÿ âðåìåíè îáíîâëåíèÿ |
no_test_bt: |
cmp ah, 11 |
jne no_ut_inc |
add dword[update_time], 10 |
jmp draw_window |
no_ut_inc: |
cmp ah, 12 |
jne no_ut_dec |
cmp dword[update_time], 10 |
jng wait_for_event |
sub dword[update_time], 10 |
jmp draw_window |
no_ut_dec: |
;------------------------- |
; êíîïêè èçìåíåíèÿ öâåòà ãðàôèêîâ (13..17) |
cmp ah, 17 |
jg no_change_color |
sub ah, 13 |
movzx ecx, ah |
mov esi, [d_colors + ecx * 4] |
mov eax, [esi] |
call next_color |
mov [esi], ebx |
jmp draw_window |
no_change_color: |
|
jmp wait_for_event |
;--------------------------------------------------------------------- |
; Öâåòà ãðàôèêîâ |
colors: dd 0xff0000, 0xff00, 0xff, 0xffffff, tcol, 0xFF7E23, 0x8BA169, 0xff0000 ; ïåðâûé è ïîñëåäíèé ðàâíû |
next_color: |
mov ecx, (next_color - colors) / 4 ; êîëè÷åñòâî öâåòîâ |
@@: dec ecx |
cmp eax, [colors + ecx * 4] |
jne @b |
mov ebx, [colors + ecx * 4 - 4] |
ret |
;--------------------------------------------------------------------- |
draw_window: |
mov eax,12 |
mov ebx,1 |
int 0x40 |
; Ñîçäà¸ì îêíî |
xor eax, eax |
mov ebx, 300 * 65536 + 309 |
mov ecx, 150 * 65536 + 430 |
mov edx, tcol + 0x3000000 ; color of work area RRGGBB,8->color |
mov esi, 0x805080d0 ; color of grab bar RRGGBB,8->color |
mov edi, 0x005080d0 ; color of frames RRGGBB |
int 0x40 |
; Ñîçäà¸ì ðàìêó ãðàôèêà |
mov eax, 13 |
mov ebx, 10 * 65536 + 290 |
mov ecx, 118 * 65536 + 105 |
mov edx, atcol |
int 0x40 |
mov ebx, 12 * 65536 + 286 |
mov ecx, 120 * 65536 + 101 |
mov edx, tcol |
int 0x40 |
mov eax, 38 |
mov edx, atcol |
mov ebx, 12 * 65536 + 286 + 12 |
mov ecx, 120 * 65536 + 120 |
@@: add ecx, 10 * 65536 + 10 |
int 0x40 |
cmp cx, 210 ; ïðèâÿçàíî ê êîîðäèíàòàì îêíà |
jl @b |
; Ïèøèì çàãîëîâîê |
mov eax, 4 |
mov ebx, 8 * 65536 + 8 |
mov edx, title |
mov ecx, 0x10FFFFFF |
mov esi, 29 |
int 0x40 |
|
; Ïèøèì íàçâàíèÿ ïàðàìåòðîâ (Cpu load, temper, etc...) |
mov edx, msgs_mon |
mov ebx, 17 * 65536 + 30 |
call show_text |
|
mov edx, msgs_mon2 |
mov ebx, 156 * 65536 + 30 |
call show_text |
|
; Ðèñóåì êíîïêè ñìåíû öâåòà |
mov eax, 8 |
mov ebx, 112 * 65536 + 5 |
mov ecx, 30 * 65536 + 6 |
mov edx, 13 |
@@: mov esi, [d_colors - 13 * 4 + edx * 4] |
mov esi, [esi] |
int 0x40 |
add ecx, 10 * 65536 |
inc edx |
cmp edx, 13 + 5 ; 5 êíîïîê |
jne @b |
|
; Ïèøèì çàãðóçêó ïðîöåññîðà |
call cpu_usage |
;--- äîáàâëÿåì íà ãðàôèê --- |
mov esi, d_cpu_load |
call d_add |
call d_show |
;--------------------------- |
movzx ecx, al |
mov eax, 47 |
mov edx, 121 * 65536 + 30 |
xor esi, esi |
call digit_len |
int 0x40 |
|
; Ïèøèì èñïîëüçóåìóþ ïàìÿòü |
call mem_usage |
;--- äîáàâëÿåì íà ãðàôèê --- |
mov esi, d_mem_usage |
call d_add |
call d_show |
;--------------------------- |
movzx ecx, al |
mov eax, 47 |
mov edx, 121 * 65536 + 40 |
xor esi, esi |
call digit_len |
int 0x40 |
|
cmp byte[hwm_enable], 0 |
jne show_mon |
; Íåò äàò÷èêîâ - ïèøåì NO |
mov ecx, 6 ;<- êîëè÷åñòâî ïàðàìåòðîâ |
mov eax, 4 |
mov ebx, 121 * 65536 + 50 |
mov edx, msg_no |
mov esi, 3 |
@@: int 0x40 |
add ebx, 10 |
loop @b |
|
mov ecx, 7 ;<- êîëè÷åñòâî ïàðàìåòðîâ |
mov ebx, 260 * 65536 + 30 |
@@: int 0x40 |
add ebx, 10 |
loop @b |
|
jmp no_monitor |
show_mon: |
;Åñòü äàò÷èêè ïèøèì èíôó |
call hwm_get_params |
;--------------------------- |
; Òåìïåðàòóðó |
mov ecx, 3 |
mov esi, temps |
mov edx, 121 * 65536 + 50 |
xor eax, eax |
sh_temp:push ecx |
lodsw |
push esi |
; ðåàêöèÿ íà èçìåíåíèÿ |
xor esi, esi |
cmp [old_t1 + ecx * 4 - 4], eax |
je @f |
mov [old_t1 + ecx * 4 - 4], eax |
mov esi, val_mod |
@@: movzx ecx, al |
push eax |
mov eax, 47 |
mov ebx, 0x20000 |
int 0x40 |
pop eax |
mov cl, ah |
mov eax, 47 |
mov ebx, 0x10000 |
add edx, 15 * 65536 |
int 0x40 |
sub edx, 15 * 65536 - 10 |
pop esi |
pop ecx |
loop sh_temp |
;;--- äîáàâëÿåì íà ãðàôèê temp1 --- |
movzx eax, word[temps] |
mov esi, d_temp1 |
call d_add |
call d_show |
;;--- äîáàâëÿåì íà ãðàôèê temp2 --- |
movzx eax, word[temps + 2] |
mov esi, d_temp2 |
call d_add |
call d_show |
;;--- äîáàâëÿåì íà ãðàôèê temp3 --- |
movzx eax, word[temps + 4] |
mov esi, d_temp3 |
call d_add |
call d_show |
|
;--------------------------- |
; Ñêîðîñòè âðàøåíèÿ âåíòèëåé |
mov ecx, 3 |
mov esi, rpms |
mov edx, 121 * 65536 + 80 |
sh_fan: push ecx |
lodsd |
push esi |
;ðåàêöèÿ íà èçìåíåíèÿ |
xor esi, esi |
cmp [old_f1 + ecx * 4 - 4], eax |
je @f |
mov [old_f1 + ecx * 4 - 4], eax |
mov esi, val_mod |
@@: mov ecx, eax |
call digit_len |
mov eax, 47 |
int 0x40 |
add edx, 10 |
pop esi |
pop ecx |
loop sh_fan |
|
;--------------------------- |
; Íàïðóãè |
mov esi, Vcore |
mov edi, old_volts |
mov ecx, 7 |
mov ebx, 260 * 65536 + 30 |
mov edx, Data_String |
volt_nxt: |
push ecx |
push esi |
call ftoa |
;ðåàêöèÿ íà èçìåíåíèÿ |
xor ecx, ecx |
fld dword [esi] |
fsub dword [edi] |
fabs |
|
; fcomp dword [c_eps] ; bug in MeOsEmul |
; fstsw ax |
fcom dword [c_eps] ; 0xBADCODE |
fstsw ax |
finit |
|
sahf |
jc @f |
mov ecx, val_mod |
@@: mov esi, Data_String ; ñ÷èòàåì êîë-âî ñèìâîëîâ |
@@: lodsb |
test al, al |
jnz @b |
sub esi, Data_String |
|
mov eax, 4 |
int 0x40 |
add ebx, 10 |
pop esi |
pop ecx |
movsd |
loop volt_nxt |
|
no_monitor: |
;--------------------------- |
; Ñîçäà¸ì êíîïêè âêëàäîê |
mov edi, 230 * 65536 + 25 |
mov ecx, 4 |
mov eax, 8 |
mov ebx, 10 * 65536 + 70 |
mov edx, 2 |
n_bt: push ecx |
mov ecx, edi |
mov esi, tcol |
cmp byte [act_tab], dl |
jne na1 |
mov esi, atcol |
na1: int 0x40 |
inc edx |
add ebx, 73 * 65536 |
pop ecx |
loop n_bt |
; Ïèøèì íàçâàíèÿ âêëàäîê |
mov eax, 4 |
mov ebx, 35 * 65536 + 240 |
mov edx, tab_lab |
mov ecx, 0x10000000 |
mov esi, 39 |
int 0x40 |
; ñîçäà¸ì ðàìêó âíèçó ýêðàíà |
mov eax, 13 |
mov ebx, 10 * 65536 + 290 |
mov ecx, 255 * 65536 + 160 |
mov edx, atcol |
int 0x40 |
mov ebx, 12 * 65536 + 286 |
mov ecx, 257 * 65536 + 156 |
mov edx, tcol |
int 0x40 |
; ðèñóåì âûáðàííóþ âêëàäêó |
mov al, [act_tab] |
cmp al, 2 |
je info_tab |
cmp al, 3 |
je test_tab |
cmp al, 4 |
je config_tab |
jmp about_tab |
end_drow_tab: |
mov eax, 12 |
mov ebx, 2 |
int 0x40 |
jmp wait_for_event |
;--- Drow Info tab --------------- |
info_tab: |
include "info_tab.inc" |
;--- Drow test tab --------------- |
test_tab: |
include "test_tab.inc" |
;--- Drow Config tab ------------- |
config_tab: |
include "conf_tab.inc" |
;--- Drow About tab -------------- |
about_tab: |
include "abou_tab.inc" |
;--------------------------------------------------------------------- |
include "system.inc" |
include "hwm.inc" |
include "diag.inc" |
|
|
DATA |
act_tab db 2 ; Íîìåð àêòèâíîé âêëàäêè |
tab_lab db 'Info Tests Configs About' |
title db 'Ghost Monitor v0.3 [30/07/06]' |
|
msgs_mon mls \ |
'CPU Load (%)',\ |
'Mem Usage(%)',\ |
'Temp1',\ |
'Temp2',\ |
'Temp3',\ |
'Fan1',\ |
'Fan2',\ |
'Fan3' |
|
msgs_mon2 mls \ |
'Vcore',\ |
'AGP',\ |
'+3.3V',\ |
'AVcc (+5V)',\ |
'+12V',\ |
'-12V',\ |
'-5V' |
|
msg_yes db 'Yes' |
msg_no db 'N/A' |
|
update_time dd 300 ; ïåðèîä îáíîâëåíèÿ â ñîòûõ äîëÿõ ñåêóíäû |
d_colors dd d_cpu_load, d_mem_usage, d_temp1, d_temp2, d_temp3 |
c_eps dd 0.01 |
;--------------------------------------------------------------------- |
UDATA |
|
test_pid dd ? ; åñëè test_id == 0 - íå èìååò ñìûñëà |
test_id db ? ; 0 - òåñò íå çàïóøåí (ñîîòâåòñòâóåò ¹ êíîïêè 6..10) |
diag_add_v db ? ; 0 - íå äîáàâëÿòü äàííûå íà ãðàôèê, !0 - äîáàâëÿòü |
|
Vendor: times 12 db ? |
CPU_fam: db ? |
CPU_mod: db ? |
CPU_type: db ? |
CPU_mmx: db ? |
|
; Äëÿ ðåàêöèè íà èçìåíåíèÿ |
old_t1: dd ? ; ïîñëåäíåå çíà÷åíèå temp1 |
old_t2: dd ? ; ... |
old_t3: dd ? |
old_f1: dd ? |
old_f2: dd ? |
old_f3: dd ? |
old_volts: times 7 dd ? |
|
; Ãðôèêè |
diag_beg: |
d_cpu_load: dd ? |
times 286 db ? |
|
d_mem_usage: dd ? |
times 286 db ? |
|
d_temp1: dd ? |
times 286 db ? |
|
d_temp2: dd ? |
times 286 db ? |
|
d_temp3: dd ? |
times 286 db ? |
diag_end: |
|
; --- ñòåê òåñòà, âîèçáåæàíèå ãëþêîâ íå ïåðåíîñèòü â äðóãîå ìåñòî ---- |
th_stack: times 1024 db ? |
stp: |
;--------------------------------------------------------------------- |
MEOS_APP_END |