/programs/system/gmon/abou_tab.inc |
---|
0,0 → 1,21 |
mov edx, msg_about |
mov ebx, 17 * 65536 + 265 |
call show_text |
jmp end_drow_tab |
msg_about mls \ ; äîëæíà áûòü õîòÿáû îäíà ñòðîêà |
' Ghost Monitor',\ |
'',\ |
' tool for testing and monitoring hardware',\ |
'',\ |
'Supported SuperIO : W83627HF,W83697HF',\ |
' W83627THF,W83627THF-A,W83627EHF-A,',\ |
' W83637THF,IT8705F,IT8712F,SiS950',\ |
'',\ |
'Tests based on R.J.Redelmeier CPUBurn',\ |
'',\ |
'Mailto : ghost.nsk@mail.ru',\ |
'',\ |
'',\ |
' *** Use at YOUR own RISK ***' |
/programs/system/gmon/build.bat |
---|
0,0 → 1,2 |
@fasm gmon.asm gmon |
@pause |
/programs/system/gmon/conf_tab.inc |
---|
0,0 → 1,49 |
; |
; |
; Âêëàäêà íàñòðîåê |
; |
; Âðåìÿ îáíîâëåíèÿ |
mov eax, 8 |
mov ebx, 200 * 65536 + 15 |
mov ecx, 260 * 65536 + 15 |
mov edx, 11 |
mov esi, tcol |
int 0x40 |
mov ebx, 217 * 65536 + 15 |
inc edx |
int 0x40 |
mov eax, 4 |
mov ebx, 17 * 65536 + 265 |
mov edx, msg_cf_utime |
mov ecx, 0x10000000 |
mov esi, 11 |
int 0x40 |
mov ebx, 205 * 65536 + 265 |
mov edx, msg_cf_pm |
xor ecx, ecx |
mov esi, 4 |
int 0x40 |
mov ecx, [update_time] |
call digit_len |
mov edx, 160 * 65536 + 265 |
xor esi, esi |
mov eax, 47 |
int 0x40 |
; Ðàññòàâëÿåì äâîåòî÷èÿ |
mov eax, 4 |
mov ebx, 152 * 65536 + 265 |
mov edx, dub_p |
mov esi, 1 |
mov ecx, 0x10000000 |
int 0x40 |
jmp end_drow_tab |
msg_cf_utime db 'Update time' ; 11 |
msg_cf_pm db '+ -' ; 4 |
/programs/system/gmon/config.inc |
---|
0,0 → 1,8 |
nl equ 0x0d, 0x0a |
; 0x00xx - Menuet 0.xx |
; 0x0400 - Kolibi 4 (íîâîå çàâåðøåíèå ïðîöåññà) |
; 0x0510 - MSR -> ìíîæèòåëü |
; 0x0530 - âñåãî/ñâîáîäíî ïàìÿòè |
; 0x0580 - íîâîå çàâåðøåíèå ïðîöåññà |
OS_version equ 0x0580 |
/programs/system/gmon/diag.inc |
---|
0,0 → 1,58 |
; struc DiagramData size,color |
; { |
; .color dd color |
; times size db 0 ;;change to value > 100 |
; } |
;------------------------------------------------------ |
d_show: |
; esi - pointer to struct |
; åñëè öâåò ôîíà, òî íå ðèñóåì |
cmp dword[esi], tcol |
jne @f |
ret |
@@: pusha |
mov edx, [esi] |
add esi, 4 |
mov edi, esi |
add edi, 285 |
mov ebx, 12 * 65536 + 13 |
xor eax, eax |
lodsb |
mov cx, 220 |
sub ecx, eax |
@@: shl ecx, 16 |
mov cx, 220 |
lodsb |
sub ecx, eax |
mov eax, 38 |
int 0x40 |
add ebx, 0x10001 |
cmp esi, edi |
jle @b |
popa |
ret |
;------------------------------------------------------ |
d_add: |
; esi - pointer to struct |
; al - value |
pusha |
cmp byte [diag_add_v], 0 ; äîáàâëÿåì òîëüêî ïî òàéìåðó |
je d_add_end |
cld |
mov ecx, 285 |
add esi, 4 |
mov edi, esi |
inc esi |
rep movsb |
cmp al, 100 |
jbe @f |
mov al, 100 |
@@: mov [edi], al |
d_add_end: |
popa |
ret |
/programs/system/gmon/gmon.asm |
---|
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 |
/programs/system/gmon/hwm.inc |
---|
0,0 → 1,80 |
include 'hwm_wb.inc' |
include 'hwm_it87.inc' |
uglobal |
hwm_enable:db 0 ; 0 - no, 1 - Winbond, 2 - ITE |
temps db 0,0, 0,0, 0,0 ; ãðàäóñ, äåñÿòûå, ãðàäóñ, ... |
rpms dd 0, 0, 0 ; fan1, fan2, fan3 |
Vcore dd 0.0 |
Vin0 dd 0.0 |
Vin1 dd 0.0 |
AVcc dd 0.0 |
Vin2 dd 0.0 |
V12 dd 0.0 |
V5 dd 0.0 |
endg |
hwm_unk db 9, 'Not found' |
hwm_chip_name dd hwm_unk |
hwm_init: |
; Ïðîâåðêà íàëè÷èÿ è èíèöèàëèçàöèÿ |
pusha |
mov eax, 46 ; ðåçåðâèðóåì 0x295 è 0x296 ïîðòû |
xor ebx, ebx |
mov ecx, 0x295 |
mov edx, 0x296 |
int 0x40 |
test eax, eax |
jz hwm_ports_ok |
hwm_no: |
mov eax, 46 ; îñâîáîæäàåì 0x295 è 0x296 ïîðòû |
xor ebx, ebx |
inc ebx |
mov ecx, 0x295 |
mov edx, 0x296 |
int 0x40 |
popa |
ret |
hwm_ports_ok: |
call wb_init |
jc not_wb |
mov byte [hwm_enable], 1 |
call wb_get_name |
jmp hwm_ok |
not_wb: call it87_init |
jc hwm_no |
mov byte [hwm_enable], 2 |
call it87_get_name |
hwm_ok: mov [hwm_chip_name], edx |
popa |
ret |
;---------------------------------------------------- |
hwm_get_params: |
; Âûçûâàòü òîëüêî åñëè íàéäåí |
pusha |
mov al, [hwm_enable] |
dec al |
jnz @f |
call wb_get_temp |
call wb_get_fan_speed |
mov edi, wb_coeff |
call wb_get_volt |
fld dword[V12] |
fld dword[wb_n12v_const] |
faddp st1, st0 |
fstp dword[V12] |
popa |
ret |
@@: call it87_get_temp |
call it87_get_fan_speed |
mov edi, ite_coeff |
call wb_get_volt |
popa |
ret |
;---------------------------------------------------- |
/programs/system/gmon/hwm_it87.inc |
---|
0,0 → 1,117 |
; Integrated Technology Express |
; Chip Temp Volt Fan |
; it8705 3 8 3 |
; it8712 3 8 3 |
; SiS |
; Chip Temp Volt Fan |
; sis950 3 8 3 |
IT87_REGCHIP equ 0x58 |
IT87_CHIPID equ 0x90 |
IT87_FANDIV equ 0x0B |
uglobal |
it_chip_id db 0 |
endg |
it8705 db 15, 'IT8705F/SiS 950' |
it8712 db 7, 'IT8712F' |
it8716 db 7, 'IT8716F' |
ite_unk db 11, 'Unknown ITE' |
ite_coeff: dd 0.016 ; Vcore |
dd 0.016 ; Vin0 |
dd 0.016 ; Vin1 (+3.3V) |
dd 0.02688 ; AVcc (+5V) |
dd 0.0608 ; Vin2 (+12V) |
dd -0.055632 ; -12V |
dd -0.02408 ; -5V |
;----------------------------------- |
it87_init: |
; Ïðîâåðêà íàëè÷èÿ è èíèöèàëèçàöèÿ |
; OUT - CF = 1 - error |
;--- Ïðîâåðÿåì IT87* -------- |
mov dx, 0x295 |
mov al, IT87_REGCHIP |
out dx, al |
inc edx |
in al, dx |
cmp al, IT87_CHIPID |
jne it87_no ; ýòî íå it87 !!! |
; -~- not tested ~-~- |
dec edx ; --- óçíà¸ì èäåíòèôèêàòîð ÷èïà -- |
mov al, 0x21 |
out dx, al |
inc edx |
in al, dx |
mov byte[it_chip_id], al |
; -~-~-~-~-~-~-~-~-~- |
clc |
ret |
it87_no:stc |
ret |
;----------------------------------- |
it87_get_temp: |
mov dx, 0x296 |
xor ecx, ecx |
mov esi, temps |
@@: dec edx |
mov eax, ecx |
add al, 0x29 |
out dx, al |
inc edx |
in al, dx |
mov [esi + ecx * 2], al |
inc ecx |
cmp ecx, 3 |
jb @b |
ret |
;----------------------------------- |
it87_fan_div db 1, 1, 1 |
it87_get_fan_speed: |
; ÷èòàåì äåëèòåëè |
mov dx, 0x295 |
mov al, IT87_FANDIV |
out dx, al |
inc dx |
in al, dx |
mov ah, al |
and al, 0x07 |
mov [it87_fan_div], al |
shr ah, 3 |
and ah, 0x07 |
mov [it87_fan_div + 1], ah |
xor ecx, ecx |
@@: mov dx, 0x295 |
mov al, 0x0D |
add al, cl |
out dx, al |
inc edx |
in al, dx |
movzx ebx, al |
push ecx |
mov cl, [it87_fan_div + ecx] |
shl ebx, cl |
pop ecx |
mov eax, 1350000 |
xor edx, edx |
div ebx |
mov [rpms + 4 * ecx], eax |
inc ecx |
cmp ecx, 3 |
jb @b |
ret |
;-------------------------------------------------------------------------- |
it87_get_name: |
mov edx, it8705 |
cmp byte[it_chip_id], 0x05 |
je @f |
mov edx, it8712 |
cmp byte[it_chip_id], 0x12 |
je @f |
mov edx, it8716 |
cmp byte[it_chip_id], 0x16 |
je @f |
mov edx, ite_unk |
@@: ret |
/programs/system/gmon/hwm_wb.inc |
---|
0,0 → 1,254 |
; |
; Áèáëèîòåêà äëÿ ÷èïîâ WinBond |
; |
; |
; Äîïèñàòü ïîëó÷åíèå èíôû ñ äðóãèõ äàò÷èêîâ |
; + 16.03.06 Èñïðàâëåíà îøèáêà â wb_get_cpu_temper ñ äåñÿòûõ ãðàäóñà (áûëî 30.5 30.0 31.5 ...) |
; |
; |
uglobal |
wb_chip_id: db 0 ; Èäåíòèôèêàòîð ÷èïà (åñëè íàøëè) |
endg |
; | Chip name | ID Vin Fanin PWM Temp |
msg_wb27HF: db 8, 'W83627HF' ; 0x20|0x21 9 3 2 3 |
msg_wb27THF: db 9, 'W83627THF' ; 0x90|0x91 7 3 3 3 |
msg_wb37THF: db 9, 'W83637THF' ; 0x80 7 3 3 3 |
msg_wb97HF: db 8, 'W83697HF' ; 0x60|0x61 8 2 2 2 |
msg_wb27EHF: db 11,'W83627EHF-A' ; 0x88 |
msg_wb27THFA: db 11,'W83627THF-A' ; 0x1A |
; db 7, 'W83781D' ; 0x10|0x11 7 3 3 |
; db 7, 'W83782D' ; 0x30 9 3 3 |
; db 8, 'AS99127F' ; 0x31 |
; db 7, 'W83783S' ; 0x40|0x41 5-6 3 1-2 |
; db 7, 'W83791D' ; 0x70|0x71 10 5 3 |
msg_wbunk: db 15,'Unknown Winbond' ; other, non zero ;-) |
;----------------------------------- |
wb_init: |
; Ïðîâåðêà íàëè÷èÿ è èíèöèàëèçàöèÿ |
; OUT - CF = 1 - error |
mov dx, 0x295 |
mov al, 0x4e |
out dx, al |
inc edx |
xor al, al |
out dx, al |
dec edx |
mov al, 0x4f |
out dx, al |
inc edx |
in al, dx |
mov ah, al ;! |
dec edx |
mov al, 0x4e |
out dx, al |
inc edx |
mov al, 0x80 |
out dx, al |
dec edx |
mov al, 0x4f |
out dx, al |
inc edx |
in al, dx |
cmp ax, 0xa35c |
jne wb_no ; ýòî íå Winbond !!! |
dec edx ; --- óçíà¸ì èäåíòèôèêàòîð ÷èïà -- |
mov al, 0x58 |
out dx, al |
inc edx |
in al, dx |
mov byte[wb_chip_id], al |
clc |
ret |
wb_no: stc |
ret |
;----------------------------------- |
wb_get_temp: |
; temp 1 |
mov dx, 0x295 ; Âûáèðàåì bank 1 |
mov al, 0x4e |
out dx, al |
inc edx |
mov al, 1 |
out dx, al |
dec edx ; Ïîëó÷àåì ñòàðøèé áàéò òåìïåðàòóðû (ãðàäóñû) |
mov al, 0x50 |
out dx, al |
inc edx |
in al, dx |
mov [temps], al |
dec edx ; Ïîëó÷àåì ìëàäøèé áàéò òåìïåðàòóðû (0.5`C) |
mov al, 0x51 |
out dx, al |
inc edx |
in al, dx ; if al == 0 then 0.0, else 0.5 |
cmp al, 0 |
je @f |
mov al, 5 |
@@: mov [temps + 1], al |
; temp 2 (3 SYSTIN) |
dec edx ; Âûáèðàåì bank 0 |
mov al, 0x4e |
out dx, al |
inc edx |
mov al, 0 |
out dx, al |
dec edx ; Ïîëó÷àåì ñòàðøèé áàéò òåìïåðàòóðû (ãðàäóñû) |
mov al, 0x27 |
out dx, al |
inc edx |
in al, dx |
mov [temps + 2], al |
; temp 3 (VTIN) |
dec edx ; Âûáèðàåì bank 2 |
mov al, 0x4e |
out dx, al |
inc edx |
mov al, 2 |
out dx, al |
dec edx ; Ïîëó÷àåì ñòàðøèé áàéò òåìïåðàòóðû (ãðàäóñû) |
mov al, 0x50 |
out dx, al |
inc edx |
in al, dx |
mov [temps + 4], al |
dec edx ; Ïîëó÷àåì ìëàäøèé áàéò òåìïåðàòóðû (0.5`C) |
mov al, 0x51 |
out dx, al |
inc edx |
in al, dx ; if al == 0 then 0.0, else 0.5 |
cmp al, 0 |
je @f |
mov al, 5 |
@@: mov [temps + 5], al |
; Ïðîâåðêà òåìïåðàòóðû, äàò÷èêè ñ 127.5`C íå èñïîëüçóþòñÿ |
mov ecx, 3 |
mov esi, temps |
wb_check_temp: |
cmp word[esi + ecx * 2 - 2], 0x057F |
jne wb_temp_ok |
mov word[esi + ecx * 2 - 2], 0 |
wb_temp_ok: |
loop wb_check_temp |
ret |
;----------------------------------- |
wb_get_fan_speed: |
; fan1 |
mov al, 0x47 |
mov dx, 0x295 |
out dx, al |
inc edx |
in al, dx |
and al, 0x30 |
shr al, 4 |
mov ebx, 1 |
mov cl, al |
shl ebx, cl ; <- div1 |
dec edx |
mov al, 0x28 |
out dx, al |
inc edx |
xor eax, eax |
in al, dx |
cmp al, 255 |
jne @f |
xor eax, eax |
ret |
@@: mul ebx |
mov ebx, eax |
mov eax, 1350000 |
xor edx, edx |
div ebx |
mov [rpms], eax |
mov al, 0x47 |
mov dx, 0x295 |
out dx, al |
inc edx |
in al, dx |
shr al, 6 |
mov ebx, 1 |
mov cl, al |
shl ebx, cl ; <- div2 |
dec edx |
mov al, 0x29 |
out dx, al |
inc edx |
xor eax, eax |
in al, dx |
cmp al, 255 |
jne @f |
xor eax, eax |
ret |
@@: mul ebx |
mov ebx, eax |
mov eax, 1350000 |
xor edx, edx |
div ebx |
mov [rpms + 4], eax |
ret |
;----------------------------------- |
wb_get_volt: |
mov dx, 0x295 |
;mov edi, vcoeff ; <-- possible differences for miscellaneous chip |
mov esi, Vcore |
xor ecx, ecx |
@@: mov eax, ecx |
add al, 0x20 |
out dx, al |
inc edx |
in al, dx |
fld dword [edi + ecx * 4] |
push eax |
fild dword [esp] |
fmulp st1, st0 |
fstp dword [esi + ecx * 4] |
pop eax |
inc ecx |
dec edx |
cmp ecx, 7 |
jb @b |
ret |
wb_coeff: dd 0.016 ; Vcore |
dd 0.016 ; Vin0 |
dd 0.016 ; Vin1 (+3.3V) |
dd 0.02688 ; AVcc (+5V) |
dd 0.0608 ; Vin2 (+12V) |
dd 0.0822857142857145 ; -12V |
dd -0.02408 ; -5V ; false |
wb_n12v_const dd -14.9142857142857 |
;----------------------------------- |
wb_get_name: |
; Âîçâðàùàåò èìÿ ÷èïà |
; Out : EDX - pointer to string (size:string - Pascal style) |
mov al, [wb_chip_id] |
and al, 0xFE ; 0x20 = 0x21, 0x60 = 0x61, etc |
mov edx, msg_wb27HF |
cmp al, 0x20 |
je @f |
mov edx, msg_wb27THF |
cmp al, 0x90 |
je @f |
mov edx, msg_wb37THF |
cmp al, 0x80 |
je @f |
mov edx, msg_wb97HF |
cmp al, 0x60 |
je @f |
mov edx, msg_wb27EHF |
cmp al, 0x88 |
je @f |
mov edx, msg_wb27THFA |
cmp al, 0x1A |
je @f |
mov edx, msg_wbunk |
@@: ret |
/programs/system/gmon/info_tab.inc |
---|
0,0 → 1,103 |
; |
; |
; Âêëàäêà èíôîðìàöèè î ñèñòåìå |
; |
; Äîïèñàòü åù¸ ÷òîèòü (ìàëîâàòî áóäåò) |
; |
; |
; Ïèøåì ïàðàìåòðû |
mov edx, lab_info_tab |
mov ebx, 17 * 65536 + 265 |
call show_text |
; Ïèøåì ïðîèçâîäèòåëÿ ïðîöåññîðà |
mov edx, Vendor |
mov esi, 12 |
mov ebx, 160 * 65536 + 265 |
int 0x40 |
; Ïîääåðæêà MMX |
mov ebx, 160 * 65536 + 275 |
mov esi, 3 |
mov edx, msg_yes |
cmp byte[CPU_mmx], 1 |
je mmx_en |
mov edx, msg_no |
mmx_en: int 0x40 |
; ×èï ìîíèòîðèíãà |
int 0x40 |
mov edx, [hwm_chip_name] |
mov al, byte[edx] |
movzx esi, al |
inc edx |
mov ebx, 160 * 65536 + 285 |
mov al, 4 |
int 0x40 |
; Ñåìåéñòâî è ìîäåëü ïðîöåññîðà |
mov eax, 47 |
mov ebx, 0x10100 |
xor ecx, ecx |
mov cl, [CPU_fam] |
mov edx, 250 * 65536 + 265 |
xor esi, esi |
int 0x40 |
mov cl, [CPU_mod] |
add edx, 10 * 65536 |
int 0x40 |
; êîýôôèöèåíò óìíîæåíèÿ |
call multiplier |
test ecx, ecx |
jz @f |
movzx ecx, cl |
push ecx |
fild dword[esp] |
push 10 |
fidiv dword[esp] |
fstp dword[esp] |
mov esi, esp |
call ftoa |
mov ebx, 160 * 65536 + 295 |
mov edx, Data_String |
mov eax, 4 |
mov esi, eax |
xor ecx, ecx |
int 0x40 |
pop eax |
pop eax |
@@: |
; Ñâîáîäíàÿ ïàìÿòü |
if (OS_version >= 0x0530) |
mov eax, 18 |
mov ebx, 16 |
int 0x40 |
mov ecx, eax |
call digit_len |
mov eax, 47 |
mov edx, 160 * 65536 + 305 |
xor esi, esi |
int 0x40 |
end if |
; Ðàññòàâëÿåì äâîåòî÷èÿ |
mov eax, 4 |
mov ebx, 152 * 65536 + 265 |
mov edx, dub_p |
mov esi, 1 |
mov ecx, 5 ; <- êîëè÷åñòâî ñòðîê |
nxt_dp: push ecx |
mov ecx, 0x10000000 |
int 0x40 |
add ebx, 10 |
pop ecx |
loop nxt_dp |
;--------------------------------------------------------------------- |
jmp end_drow_tab |
dub_p db ':' |
lab_info_tab mls \ |
'CPU Vendor',\ |
'MMX tehnology',\ |
'Monitoring chip',\ |
'Multiplier',\ |
'Free memory (Kb)' |
/programs/system/gmon/macros.inc |
---|
0,0 → 1,365 |
; language for programs |
lang fix en ; ru en fr ge fi |
@^ fix macro comment { |
^@ fix } |
;~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- |
macro uglobal { |
UGlobals equ UGlobals, |
macro __UGlobalBlock { } |
endg fix } ; Use endg for ending iglobal and uglobal blocks. |
macro IncludeUGlobals{ |
macro UGlobals dummy,[n] \{ |
\common |
\local begin, size |
begin = $ |
virtual at $ |
\forward |
__UGlobalBlock |
purge __UGlobalBlock |
\common |
size = $ - begin |
end virtual |
rb size |
\} |
match U, UGlobals \{ U \} } |
uglobal |
endg |
;~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- |
; new application structure |
macro meos_app_start |
{ |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd __start |
dd __end |
dd __memory |
dd __stack |
if used __params & ~defined __params |
dd __params |
else |
dd 0x0 |
end if |
dd 0x0 |
} |
MEOS_APP_START fix meos_app_start |
macro code |
{ |
__start: |
} |
CODE fix code |
macro data |
{ |
__data: |
} |
DATA fix data |
macro udata |
{ |
if used __params & ~defined __params |
__params: |
db 0 |
__end: |
rb 255 |
else |
__end: |
end if |
__udata: |
IncludeUGlobals |
} |
UDATA fix udata |
macro meos_app_end |
{ |
align 32 |
rb 2048 |
__stack: |
__memory: |
display nl, ' ' |
} |
MEOS_APP_END fix meos_app_end |
; macro for defining multiline text data |
struc mls [sstring] { |
forward |
local ssize |
virtual at 0 |
db sstring ; mod |
ssize = $ |
end virtual |
db ssize |
db sstring |
common |
db -1 ; mod |
} |
; strings |
macro sz name,[data] { ; from MFAR [mike.dld] |
common |
if used name |
name db data |
.size = $-name |
end if |
} |
macro lsz name,[lng,data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
forward |
if lang eq lng |
db data |
end if |
common |
.size = $-name |
end if |
} |
macro szc name,elsz,[data] { ; from MFAR [mike.dld] |
common |
local s,m |
m = 0 |
if used name |
label name |
virtual at 0 |
db data |
s = $ |
end virtual |
d#elsz s |
if m < s |
m = s |
end if |
db data |
.size = $-name |
.maxl = m |
end if |
} |
macro lszc name,elsz,[lng,data] { ; from MFAR [mike.dld] |
common |
local s,m |
m = 0 |
if used name |
label name |
forward |
if lang eq lng |
virtual at 0 |
db data |
s = $ |
end virtual |
d#elsz s |
if m < s |
m = s |
end if |
db data |
end if |
common |
.size = $-name |
.maxl = m |
end if |
} |
; easy system call macro |
macro mpack dest, hsrc, lsrc |
{ |
if (hsrc eqtype 0) & (lsrc eqtype 0) |
mov dest, (hsrc) shl 16 + lsrc |
else |
if (hsrc eqtype 0) & (~lsrc eqtype 0) |
mov dest, (hsrc) shl 16 |
add dest, lsrc |
else |
mov dest, hsrc |
shl dest, 16 |
add dest, lsrc |
end if |
end if |
} |
;macro __mov reg,a { ; mike.dld |
; if ~a eq |
; mov reg,a |
; end if |
;} |
macro __mov reg,a,b { ; mike.dld |
if (~a eq)&(~b eq) |
mpack reg,a,b |
else if (~a eq)&(b eq) |
mov reg,a |
end if |
} |
macro mcall a,b,c,d,e,f { ; mike.dld |
__mov eax,a |
__mov ebx,b |
__mov ecx,c |
__mov edx,d |
__mov esi,e |
__mov edi,f |
int 0x40 |
} |
; ------------------------- |
macro header a,[b] { |
common |
use32 |
org 0 |
db 'MENUET',a |
forward |
if b eq |
dd 0 |
else |
dd b |
end if } |
macro section name { align 16 |
label name } |
macro func name { |
if ~used name |
display 'FUNC NOT USED: ',`name,13,10 |
else |
align 4 |
name: |
;pushad |
;pushfd |
;dps `name |
;newline |
;mcall 5,1 |
;popfd |
;popad |
} |
macro endf { end if } |
macro diff16 title,l1,l2 |
{ |
local s,d |
s = l2-l1 |
display title,': 0x' |
repeat 8 |
d = '0' + s shr ((8-%) shl 2) and $0F |
if d > '9' |
d = d + 'A'-'9'-1 |
end if |
display d |
end repeat |
display 13,10 |
} |
macro diff10 title,l1,l2 |
{ |
local s,d,z,m |
s = l2-l1 |
z = 0 |
m = 1000000000 |
display title,': ' |
repeat 10 |
d = '0' + s / m |
s = s - (s/m)*m |
m = m / 10 |
if d <> '0' |
z = 1 |
end if |
if z <> 0 |
display d |
end if |
end repeat |
display 13,10 |
} |
; optimize the code for size |
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
macro add arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
inc arg1 |
else |
add arg1,arg2 |
end if |
else |
add arg1,arg2 |
end if |
} |
macro sub arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
dec arg1 |
else |
sub arg1,arg2 |
end if |
else |
sub arg1,arg2 |
end if |
} |
macro mov arg1,arg2 |
{ |
if (arg1 in __regs) & (arg2 eqtype 0) |
if (arg2) = 0 |
xor arg1,arg1 |
else if (arg2) = 1 |
xor arg1,arg1 |
inc arg1 |
else if (arg2) = -1 |
or arg1,-1 |
else if (arg2) > -128 & (arg2) < 128 |
push arg2 |
pop arg1 |
else |
mov arg1,arg2 |
end if |
else |
mov arg1,arg2 |
end if |
} |
struc POINT _t,_dx,_dy { |
.x _t _dx |
.y _t _dy |
} |
; constants |
; events |
EV_IDLE = 0 |
EV_TIMER = 0 |
EV_REDRAW = 1 |
EV_KEY = 2 |
EV_BUTTON = 3 |
EV_EXIT = 4 |
EV_BACKGROUND = 5 |
EV_MOUSE = 6 |
EV_IPC = 7 |
EV_STACK = 8 |
; event mask bits for function 40 |
EVM_REDRAW = 1b |
EVM_KEY = 10b |
EVM_BUTTON = 100b |
EVM_EXIT = 1000b |
EVM_BACKGROUND = 10000b |
EVM_MOUSE = 100000b |
EVM_IPC = 1000000b |
EVM_STACK = 10000000b |
/programs/system/gmon/readme.txt |
---|
0,0 → 1,99 |
==[CP1251]======================================== |
Ghost Monitor |
Àâòîð : Ìèõàéëîâ Èëüÿ Àíäðååâè÷ aka Ghost |
Âåðñèÿ : 0.3 îò 30/07/06 |
ÎÑ : äëÿ ïîëíîãî ôóíêöèîíèðîâàíèÿ Kolibri 0.5.8.0 è ñòàðøå |
forum : meos.sysbin.com -> Ïðîãðàììû -> GMon |
file : http://iam.gorodok.net/Gmon.zip |
mailto : ghost.nsk@mail.ru |
Íàçíà÷åíèå : |
Ìîíèòîðèíã òåìïåðàòóðû è ñêîðîñòè âðàøåíèÿ âåíòèëÿòîðîâ ïðîöåññîðà è |
ìàòåðèíñêîé ïëàòû, ñòðåññ òåñòèðîâàíèå íàä¸æíîñòè ñèñòåìû îõëàæäåíèÿ è áëîêà |
ïèòàíèÿ êîìïüþòåðà. |
Ìîíèòîðèíã : |
 íàñòîÿùåå âðåìÿ îòîáðàæàþòñÿ çàãðóçêà ïðîöåññîðà, çàãðóçêà ïàìÿòè, òåìïåðàòóðà, ñêîðîñòè |
âðàøåíèÿ âåíòèëÿòîðîâ è íàïðÿæåíèå. Ïîääåðæèâàåìûå ÷èïû ìîíèòîðèíãà : |
WinBond chip : W83627HF/THF/THF-A/EHF-A, W83637THF, W83697HF, è àíàëîãè. |
Integrated Technology Express : IT8705F, IT8712F, IT8716F, è àíàëîãè. |
SiS : sis950 (àíàëîã IT8705F) |
Ôóíêöèè ìîíèòîðèíãà òåìïåðàòóðû ìîæíî ïðîâåðèòü â Windows íà ýìóëÿòîðå KlbrInWin, äëÿ ýòîãî |
íåîáõîäèìî â ôàéëå íàñòðîåê íàïèñàòü EnablePorts 295 296 |
Òåñòû : |
Òåñòû îðèåíòèðîâàíû íà ïðîöåññîðû P5, P6, K6 è K7, îñíîâàíû íà Robert Redelmeier's CPUburn |
[http://pages.sbcglobal.net/redelm/]. Öëÿ òåñòèðîâàíèÿ Pentium 4, ðåêîìåíäóþ òåñò äëÿ K7, äëÿ |
îñòàëüíûõ ïðîöåññîðîâ ïîäáåðèòå ïî ìàêñèìàëüíîé òåìïåðàòóðå (íàïèøèòå ìíå îá ýòîì). |
Âíèìàíèå! Ïðîãðàììà íå ðåàãèðóåò íà êðèòè÷åñêèé ïîðîã òåìïåðàòóðû, ïîýòîìó äëÿ èçáåæàíèÿ |
ïîð÷è îáîðóäîâàíèÿ íå îñòàâëÿéòå çàïóøåííûé òåñò áåç ïðèñìîòðà!  ñâÿçè ñ ðàçëè÷èåì â |
ðåàëèçàöèè ôóíêöèè 18-2, äëÿ Menuet è Kolibri íåîáõîäèìû ðàçëè÷íûå ðåàëèçàöèè ïðîãðàììû, ïî |
óìîë÷àíèþ êîìïèëèðóåòñÿ äëÿ Kolibri 0.5.8.0, ïðè íåîáõîäèìîñòè èçìåíèòå ïðîöåäóðó stop_test â |
system.inc. Òåñòû ðàáîòàþò îäèíàêîâî ýôôåêòèâíî êàê íà ðåàëüíîì îáîðóäîâàíèè, òàê è íà |
âèðòóàëüíûõ ìàøèíàõ. |
Íà áóäóùåå : |
Íîâûå ÷èïû |
Ðåàêöèÿ íà êðèòè÷åñêèé ïîðîã òåìïåðàòóðû |
Ïðîâåêà íàä¸æíîñòè ñõåì ïèòàíèÿ |
Îñîáàÿ áëàãîäàðíîñòü âñåì ó÷àñòíèêàì ôîðóìà. |
Íàéäåííûå îøèáêè è ïðåäëîæåíèÿ ïèøèòå â ôîðóì èëè íà ïî÷òó. |
ÂÍÈÌÀÍÈÅ !!! ÂÎÇÌÎÆÍÀ ÏÎÐ×À ÎÁÎÐÓÖÎÂÀÍÈß! |
ÈÑÏÎËÜÇÓÉÒÅ ÍÀ ÑÂÎÉ ÑÒÐÀÕ È ÐÈÑÊ! |
Ïðîãðàììà ðàñïîñòðàíÿåòñÿ "as is", è àâòîð íå íåñåò îòâåòñòâåííîñòè çà âîçìîæíûé óùåðá, ïðè÷èíåííûé |
ïðîãðàììîé. |
==[CP866]========================================= |
Ghost Monitor |
¢â®à : ¨å ©«®¢ «ìï ¤à¥¥¢¨ç aka Ghost |
¥àá¨ï : 0.3 ®â 30/07/06 |
: ¤«ï ¯®«®£® äãªæ¨®¨à®¢ ¨ï Kolibri 0.5.8.0 ¨ áâ àè¥ |
forum : meos.sysbin.com -> à®£à ¬¬ë -> GMon |
file : http://iam.gorodok.net/Gmon.zip |
mailto : ghost.nsk@mail.ru |
§ 票¥ : |
®¨â®à¨£ ⥬¯¥à âãàë ¨ ᪮à®á⨠¢à è¥¨ï ¢¥â¨«ïâ®à®¢ ¯à®æ¥áá®à ¨ |
¬ â¥à¨áª®© ¯« âë, áâà¥áá â¥áâ¨à®¢ ¨¥ ¤ñ¦®á⨠á¨áâ¥¬ë ®å« ¦¤¥¨ï ¨ ¡«®ª |
¯¨â ¨ï ª®¬¯ìîâ¥à . |
®¨â®à¨£ : |
áâ®ï饥 ¢à¥¬ï ®â®¡à ¦ îâáï § £à㧪 ¯à®æ¥áá®à , § £à㧪 ¯ ¬ïâ¨, ⥬¯¥à âãà , ᪮à®á⨠|
¢à è¥¨ï ¢¥â¨«ïâ®à®¢ ¨ ¯à殮¨¥. ®¤¤¥à¦¨¢ ¥¬ë¥ ç¨¯ë ¬®¨â®à¨£ : |
WinBond chip : W83627HF/THF/THF-A/EHF-A, W83637THF, W83697HF, ¨ «®£¨. |
Integrated Technology Express : IT8705F, IT8712F, IT8716F, ¨ «®£¨. |
SiS : sis950 ( «®£ IT8705F) |
ãªæ¨¨ ¬®¨â®à¨£ ⥬¯¥à âãàë ¬®¦® ¯à®¢¥à¨âì ¢ Windows í¬ã«ïâ®à¥ KlbrInWin, ¤«ï í⮣® |
¥®¡å®¤¨¬® ¢ ä ©«¥ áâ஥ª ¯¨á âì EnablePorts 295 296 |
¥áâë : |
¥áâë ®à¨¥â¨à®¢ ë ¯à®æ¥áá®àë P5, P6, K6 ¨ K7, ®á®¢ ë Robert Redelmeier's CPUburn |
[http://pages.sbcglobal.net/redelm/]. «ï â¥áâ¨à®¢ ¨ï Pentium 4, ४®¬¥¤ãî â¥áâ ¤«ï K7, ¤«ï |
®áâ «ìëå ¯à®æ¥áá®à®¢ ¯®¤¡¥à¨â¥ ¯® ¬ ªá¨¬ «ì®© ⥬¯¥à âãॠ( ¯¨è¨â¥ ¬¥ ®¡ í⮬). |
¨¬ ¨¥! à®£à ¬¬ ¥ ॠ£¨àã¥â ªà¨â¨ç¥áª¨© ¯®à®£ ⥬¯¥à âãàë, ¯®í⮬㠤«ï ¨§¡¥¦ ¨ï |
¯®àç¨ ®¡®à㤮¢ ¨ï ¥ ®áâ ¢«ï©â¥ § ¯ãè¥ë© â¥áâ ¡¥§ ¯à¨á¬®âà ! á¢ï§¨ á à §«¨ç¨¥¬ ¢ |
ॠ«¨§ 樨 äãªæ¨¨ 18-2, ¤«ï Menuet ¨ Kolibri ¥®¡å®¤¨¬ë à §«¨çë¥ à¥ «¨§ 樨 ¯à®£à ¬¬ë, ¯® |
㬮«ç ¨î ª®¬¯¨«¨àã¥âáï ¤«ï Kolibri 0.5.8.0, ¯à¨ ¥®¡å®¤¨¬®á⨠¨§¬¥¨â¥ ¯à®æ¥¤ãàã stop_test ¢ |
system.inc. ¥áâë à ¡®â îâ ®¤¨ ª®¢® íä䥪⨢® ª ª ॠ«ì®¬ ®¡®à㤮¢ ¨¨, â ª ¨ |
¢¨àâã «ìëå ¬ è¨ å. |
¡ã¤ã饥 : |
®¢ë¥ 稯ë |
¥ ªæ¨ï ªà¨â¨ç¥áª¨© ¯®à®£ ⥬¯¥à âãàë |
஢¥ª ¤ñ¦®á⨠á奬 ¯¨â ¨ï |
ᮡ ï ¡« £®¤ à®áâì ¢á¥¬ ãç á⨪ ¬ ä®à㬠. |
©¤¥ë¥ ®è¨¡ª¨ ¨ ¯à¥¤«®¦¥¨ï ¯¨è¨â¥ ¢ ä®à㬠¨«¨ ¯®çâã. |
!!! ! |
! |
à®£à ¬¬ à ᯮáâà ï¥âáï "as is", ¨ ¢â®à ¥ ¥á¥â ®â¢¥âá⢥®á⨠§ ¢®§¬®¦ë© ãé¥à¡, ¯à¨ç¨¥ë© |
¯à®£à ¬¬®©. |
/programs/system/gmon/system.inc |
---|
0,0 → 1,371 |
;-------------------------------------------------------------------- |
; Çàãðóçêà ïðîöåññîðà |
; OUT : AL - çàãðóçêà â ïðîöåíòàõ |
cpu_usage: |
pusha |
mov byte [c_u_t], 0 |
mov eax, 18 ; TSC / SEC |
mov ebx, 5 |
int 0x40 |
shr eax, 20 |
push eax |
mov eax, 18 ; IDLE / SEC |
mov ebx, 4 |
int 0x40 ; eax - ïóñòûõ öèêëîâ â ñåêóíäó |
shr eax, 20 ; eax = IDLE / 1048576 |
pop ebx |
cmp eax, ebx ; BUG : time to time ICPS > TSCPS |
jnl c_u_o |
push ebx |
xor edx, edx |
mov ebx, 100 |
mul ebx ; eax =(IDLE / 1048576) * 100 |
xor edx, edx |
pop ebx ; ebx = (TSC/1048576)+1 |
inc ebx |
div ebx ; eax = ((IDLE / 1048576) * 100) / ((TSC/1048576)+1) |
mov bl, 100 |
sub bl, al |
cmp bl, 101 |
jnl c_u_o |
mov [c_u_t], bl |
c_u_o: popa |
mov al, [c_u_t] |
ret |
uglobal |
c_u_t: db 0 |
endg |
;-------------------------------------------------------------------- |
mem_usage: |
; Èñïðîëüçîâàíèå ïàìÿòè |
; OUT : al - ïðîöåòí èñïðîëüçóåìîé ïàìÿòè |
display nl, 'Memory usage : ' |
if (OS_version >= 0x0530) |
display 'yes' |
pusha |
mov byte [m_u_t], 0 |
mov eax, 18 ; full mem |
mov ebx, 17 |
int 0x40 |
shr eax, 10 |
push eax |
mov eax, 18 ; free mem |
mov ebx, 16 |
int 0x40 ; eax - free mem |
shr eax, 10 ; eax = fmem / 1024 |
xor edx, edx |
mov ebx, 100 |
mul ebx ; eax =(free mem / 1024) * 100 |
xor edx, edx |
pop ebx ; ebx = (full mem/1024)+1 |
inc ebx |
div ebx ; eax = ((free mem / 1024) * 100) / ((full mem/1024)+1) |
mov bl, 100 |
sub bl, al |
cmp bl, 101 |
jnb m_u_o |
mov [m_u_t], bl |
m_u_o: popa |
mov al, [m_u_t] |
ret |
uglobal |
m_u_t: db 0 |
endg |
else |
display 'no' |
xor eax, eax |
ret |
end if |
;####################################################################### |
stop_test: |
; ïîðòÿòñÿ ðåãèñòðû |
display nl, 'Kill process type : ' |
if (OS_version < 0x0400) |
; êîä äëÿ Menuet |
display 'Menuet' |
mov eax, 18 |
mov ebx, 2 |
mov ecx, [test_pid] |
int 0x40 |
mov byte[test_id], 0 |
ret |
; ------------------------------- |
else if (OS_version >= 0x0400) |
if (OS_version < 0x0580) |
display 'old Kolibri' |
; -- ñëåäóéøèé êîä óáèâàåò ïðîöåññ â Kolibri 4 è ñòàðøå |
mov ebx, Buf |
xor ecx, ecx |
find_th:mov eax, 9 |
int 0x40 |
mov edx, dword [Buf + 30] |
cmp edx, dword [test_pid] |
je kill_t |
inc ecx |
cmp ecx, eax ; eax - êîëè÷åñòâî ïðîöåññîâ |
jle find_th |
jmp cl_tinf ; ÎØÈÁÊÀ !!!! ïîòîê íå íàéäåí !!!! |
kill_t: mov ebx, 2 ; óáèâàåì òåñòîâûé ïîòîê |
mov eax, 18 |
int 0x40 |
cl_tinf: |
mov byte[test_id], 0 |
ret |
uglobal |
Buf: times 1024 db ? ; Áóôåð äëÿ íàõîæäåíèÿ PID`à çàïóùåííîãî òåñòà |
endg |
else |
; ------------------------------- |
; êîä äëÿ Kolibri 0.5.8.0 è ñòàðøå |
display 'Kolibri 0.5.8.0' |
mov eax, 18 |
mov ebx, 18 |
mov ecx, [test_pid] |
int 0x40 |
mov byte [test_id], 0 |
ret |
; ------------------------------- |
end if |
end if |
;####################################################################### |
; Âûâîäèò ñòðîêè òåêñòà |
; in : edx - óêàçàòåëü íà mls |
; ebx - êîîðäèíàòû : X << 16 + Y |
show_text: |
mov eax, 4 |
mov ecx, 0x10000000 |
@@: |
movzx esi, byte[edx] |
inc edx |
int 0x40 |
add ebx, 10 |
add edx, esi |
cmp byte[edx], -1 |
jne @b |
ret |
;--------------------------------------------------------------------- |
multiplier: |
;--- âû÷èñëåíèå êîýôôèöèåíòà óìíîæåíèÿ - |
; ïîðòèò ðåãèñòðû |
; out : CL = êîýôô.óìíîæåíèÿ * 10, èëè 0 |
xor ecx, ecx |
if (OS_version >= 0x0510) |
display nl, 'Multiplier : yes' |
cmp dword [Vendor + 8], 'cAMD' ; Check for Advanced Micro Devices CPU |
jne noAMD |
cmp byte [CPU_fam], 5 |
jne noAMDK6 |
mov eax, 68 ; AMD-K6 (p.30) |
mov ebx, 3 |
mov edx, 0x0C0000087 |
int 0x40 ; eax - low dword |
and eax, 111b |
mov cl, [athloncoef3 + eax] |
cmp eax, 6 |
jne @f |
cmp byte[CPU_mod], 8 |
jae @f |
mov cl, 20 |
@@: ret |
noAMDK6:cmp byte [CPU_fam], 6 |
jne noAMDK7 |
mov eax, 68 ; Athlon/AthlonXP |
mov ebx, 3 |
mov edx, 0x0C0010015 |
int 0x40 |
mov ebx, eax |
shr ebx, 24 |
and ebx, 0x0F |
shr eax, 20 |
jc @f |
mov cl, [athloncoef + ebx] |
ret |
@@: mov cl, [athloncoef2 + ebx] |
ret |
noAMD: cmp dword [Vendor + 8], 'ntel' ; Check for International Electronics CPU |
jne noIntel |
cmp byte[CPU_fam], 0x0F |
jne noIntelP4 |
cmp byte [CPU_type], 6 |
jne @f |
mov eax, 68 ; Pentium M |
mov ebx, 3 |
mov edx, 0x2A |
int 0x40 |
shr eax, 22 |
and eax, 0x1F |
mov dl, 10 |
mul dl |
mov cl, al |
ret |
@@: cmp byte [CPU_mod], 2 |
jae @f |
mov eax, 68 ; Pentium 4 / Xeon (model < 2) |
mov ebx, 3 |
mov edx, 0x2A |
int 0x40 |
shr eax, 8 |
and eax, 0x0F |
mov cl, [p4coef + eax] |
ret |
@@: mov eax, 68 ; Pentium 4 / Xeon (model >= 2) |
mov ebx, 3 |
mov edx, 0x2C |
int 0x40 |
; shr eax, 24 |
; and eax, 0x1F |
shr eax, 27 |
and al, 0Fh |
add al, 8 |
mov dl, 10 |
mul dl |
mov cl, al |
ret |
noIntelP4: |
cmp byte[CPU_fam], 6 |
jne noIntelP6 |
mov eax, 68 ; Pentium Pro / Pentium II / Pentium III |
mov ebx, 3 |
mov edx, 0x2A |
int 0x40 |
shr eax, 22 |
test al, 0x20 |
jz @f |
or al, 0x10 |
@@: and eax, 0x1f |
cmp byte[CPU_mod], 0x06 ; ? 7 |
ja @f |
and al, 0x0f |
@@: |
mov cl, [coppercoeff + eax] |
cmp byte[CPU_mod], 0x0B |
jb @f |
mov cl, [tualatcoeff + eax] |
@@: ret |
noIntel: |
noIntelP6: |
noAMDK7: |
ret |
athloncoef db 110, 115, 120, 125, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105 |
athloncoef2 db 120, 190, 120, 200, 130, 135, 140, 210, 150, 220, 160, 165, 170, 180, 230, 240 |
athloncoef3 db 45, 50, 40, 55, 25, 30, 60, 35 |
p4coef db 160, 170, 180, 190, 200, 210, 220, 230, 80, 90, 100, 110, 120, 130, 140, 150 ; Pentium 4 |
coppercoeff db 50, 30, 40, 20, 55, 35, 45, 25, 35, 70, 80, 60, 20, 75, 15, 65, 90, 110, 120, 20, 95, 115, 85, 25, 35, 70, 80, 100, 20, 75, 15, 105 |
tualatcoeff db 120, 35, 35, 40, 55, 35, 115, 35, 160, 70, 80, 60, 40, 75, 35, 65, 90, 110, 35, 35, 95, 35, 85, 35, 35, 35, 130, 100, 140, 35, 150, 105 |
else |
display nl, 'Multiplier : no' |
ret |
end if |
;--------------------------------------------------------------------- |
digit_len: |
; Âû÷èñëåíèå äëèííû ÷èñëà äëÿ ôóíê. 47 |
; ecx - ÷èñëî |
; ebx - äëèííà * 65536 |
pusha |
xor ebx, ebx |
mov eax, ecx |
mov esi, 10 |
@@: xor edx, edx |
inc ebx |
div esi |
test eax, eax |
jnz @b |
mov [tdl], ebx |
popa |
mov ebx, [tdl] |
shl ebx, 16 |
ret |
uglobal |
tdl dd 0 |
endg |
;-------------------------------------------------------------------- |
ftoa: |
; esi - ïðåîáðàçóåìîå ÷èñëî; |
; Data_String - ñòðîêà-ðåçóëüòàò. |
pusha |
mov edi, Data_String |
fninit |
fld dword [esi] |
fmul dword [MConst] |
fbstp [Data_BCD] |
mov ax, word[Data_BCD + 8] |
cmp ax, 0xFFFF |
je @@Overflow |
mov al, byte[Data_BCD + 9] |
and al, al |
jz @@NoSign |
mov AL,'-' |
stosb |
@@NoSign: |
mov ebx, 8 |
mov ecx, 9 |
mov edx, 18 - 2 ; 2 çíàêà ïîñëå çàïÿòîé |
@@NextPair: |
mov al, byte[Data_BCD + ebx] |
mov AH,AL |
shr AL,4 |
add AL,'0' |
stosb |
dec edx |
jnz @@N0 |
mov AL,'.' |
stosb |
@@N0: mov AL,AH |
and AL,0Fh |
add AL,'0' |
stosb |
dec edx |
jnz @@N1 |
mov AL,'.' |
stosb |
@@N1: dec ebx |
loop @@NextPair |
xor al, al |
stosb |
mov edi, Data_String |
mov esi, Data_String |
cmp byte[esi], '-' |
jne @@N2 |
inc esi |
inc edi |
@@N2: mov ecx, 18+1+1 |
@@N3: cmp byte[esi], '0' |
jne @@N4 |
inc esi |
loop @@N3 |
jmp @@Error |
@@N4: rep movsb |
jmp @@End |
@@Overflow: |
@@Error:mov eax, 'ERR' |
stosd |
@@End: popa |
ret |
MConst: dd 1.0E2 ; 2 çíàêà ïîñëå çàïÿòîé |
uglobal |
Data_BCD: DT ? |
Data_String: times 20 db 0 ; ASCIIZ ñòîðêà ñ ïðåîáðàçîâàííûì ÷èñëîì |
endg |
;-------------------------------------------------------------------- |
/programs/system/gmon/test_tab.inc |
---|
0,0 → 1,139 |
; |
; |
; |
; Âêëàäêà òåñòîâ |
; |
; |
; |
; |
; "GenuineIntel" - International Electronics |
; "GenuineTMx86" - Transmeta Processor |
; "AuthenticAMD" - Advanced Micro Devices |
; "AMD ISBETTER" - Advanced Micro Devices |
; "UMC UMC UMC " - United Microelectronics Corporation |
; "CyrixInstead" - Cyrix Processor |
; "Geode by NSC" - National Semiconductor Processor |
; "SiS SiS SiS " - SiS Processor |
; "RiseRiseRise" - Rise Processor |
; "NexGenDriven" - NexGen Processor (acquired by AMD) |
; "CentaurHauls" - IDT/Centaur, now VIA Processor |
; Pentium (P5) button |
mov eax, 8 |
mov ebx, 17 * 65536 + 145 |
mov ecx, 277 * 65536 + 25 |
mov edx, 6 |
mov esi, tcol |
cmp byte[Vendor + 11], 'l' |
jne p5n |
cmp byte[CPU_fam], 5 |
jne p5n |
mov esi, atcol |
p5n: int 0x40 |
; Pentium Pro / II / III (P6) button |
add ecx, 27 * 65536 |
inc edx |
mov esi, tcol |
cmp byte[Vendor + 11], 'l' |
jne p6n |
cmp byte[CPU_fam], 6 |
jne p6n |
mov esi, atcol |
p6n: int 0x40 |
; AMD K6 button |
add ecx, 27 * 65536 |
inc edx |
mov esi, tcol |
cmp byte[Vendor], 'A' |
jne k6n |
cmp byte[CPU_fam], 5 |
jne k6n |
mov esi, atcol |
k6n: int 0x40 |
; AMD K7 (Athlon / Duron) |
add ecx, 27 * 65536 |
inc edx |
mov esi, tcol |
cmp byte[Vendor], 'A' |
jne k7n |
cmp byte[CPU_fam], 6 |
jne k7n |
mov esi, atcol |
k7n: int 0x40 |
; MMX òåñò |
; add ecx, 27 * 65536 |
; inc edx |
; mov esi, tcol |
; cmp byte[CPU_mmx], 1 |
; jne mmxn |
; mov esi, atcol |
; mmxn: int 0x40 |
; Ïèøåì íàçâàíèÿ êíîïîê |
mov eax, 4 |
mov ebx, 30 * 65536 + 287 |
mov esi, 7 |
mov edx, tmsg_p ; P5 |
mov ecx, 0x10000000 |
cmp byte[test_id], 6 |
jne nr1 |
mov ecx, 0x10FF0000 |
nr1: int 0x40 |
mov ebx, 30 * 65536 + 287 + 27 |
mov esi, 20 ; P6 |
mov ecx, 0x10000000 |
cmp byte[test_id], 7 |
jne nr2 |
mov ecx, 0x10FF0000 |
nr2: int 0x40 |
mov ebx, 30 * 65536 + 287 + 27 + 27 |
mov edx, tmsg_k6 ; K6 |
mov esi, 13 |
mov ecx, 0x10000000 |
cmp byte[test_id], 8 |
jne nr3 |
mov ecx, 0x10FF0000 |
nr3: int 0x40 |
mov ebx, 30 * 65536 + 287 + 27 + 27 + 27 |
mov edx, tmsg_k7 ; K7 |
mov esi, 15 |
mov ecx, 0x10000000 |
cmp byte[test_id], 9 |
jne nr4 |
mov ecx, 0x10FF0000 |
nr4: int 0x40 |
; mov ebx, 30 * 65536 + 287 + 27 + 27 + 27 + 27 |
; mov edx, tmsg_mmx ; MMX |
; mov esi, 12 |
; mov ecx, 0x10000000 |
; cmp byte[test_id], 10 |
; jne nr5 |
; mov ecx, 0x10FF0000 |
; nr5: int 0x40 |
; recommendate |
mov ecx, 0x10000000 |
mov ebx, 190 * 65536 + 400 |
mov edx, tmsg_rec |
mov esi, 14 |
int 0x40 |
; read about |
mov ebx, 30 * 65536 + 262 |
mov edx, tmsg_war |
mov esi, 34 |
mov ecx, 0x10FF0000 |
int 0x40 |
; recommendate color |
mov eax, 13 |
mov ebx, 170 * 65536 + 10 |
mov ecx, 398 * 65536 + 10 |
mov edx, atcol |
int 0x40 |
jmp end_drow_tab |
tmsg_p db 'Pentium (Pro/II/III)' ; 7/20 |
tmsg_k6 db 'K6 (I/II/III)' ; 13 |
tmsg_k7 db 'K7/Athlon/Duron' ; 15 |
;tmsg_mmx db 'MMX (memory)' ; 12 |
tmsg_rec db '- recommendate' ; 14 |
tmsg_war db 'May permanent damage to electronic' ; 34 |
/programs/system/gmon/tests.inc |
---|
0,0 → 1,236 |
; |
; |
; k6, k7, p5 & p6 based on Robert Redelmeier's burnCPU tests |
; ported by Ghost |
; |
; Çàìåòêè : |
; ïåðåïèñòü ðåàêöèþ íà îøèáêè |
k6: |
finit |
push ebp |
mov ebp, esp |
and ebp, -32 |
sub esp, 96 |
fldpi |
fld qword [rtt] |
fstp qword [ebp - 24] |
fld qword [e] |
fstp qword [ebp - 32] |
mov edx, [half] |
mov [ebp - 8], edx |
k6_after_check: |
xor eax, eax |
mov ebx, eax |
lea esi, [eax - 1] |
mov ecx, 400000000 |
mov [ebp - 4], ecx |
align 32 |
;rev. eng. win. ver. (lea esi, [esi]) ; Ghost |
k6_crunch: |
fld qword [ebp+esi*8-16] ; CALC BLOCK |
fmul qword [ebp+esi*8-24] |
add edx, [half + 9 + esi + esi * 8] ;!!! |
jnz $ + 2 |
faddp |
fld qword [ebp+esi*8-16] |
dec ebx |
sub edx, [half + 9 + esi + esi * 8] ;!!! |
jmp $ + 2 |
fmul qword [ebp+esi*8-24] |
inc ebx |
dec dword [ebp+esi*8+4] |
fsubp |
jnz k6_crunch ; time for testing ? |
test ebx, ebx ; TEST BLOCK |
jnz k6_int_exit |
cmp edx, [half] |
jnz k6_int_exit |
fldpi |
fcomp st1 |
fstsw ax |
sahf |
jz k6_after_check |
dec ebx |
k6_int_exit: |
dec ebx |
add esp, 96 |
pop ebp |
mov eax, -1 |
int 0x40 |
;####################################################################### |
;####################################################################### |
k7: finit |
mov ebp, esp |
and ebp,-32 |
sub esp,96 |
fld qword [rtt] |
fstp qword [ebp-40] |
fld qword [e] |
fstp qword [ebp-32] |
fldpi |
fldpi |
xor eax, eax |
xor ebx, ebx |
xor ecx, ecx |
mov edx, half |
lea esi,[eax-1] |
mov [ebp-12], eax |
mov [ebp-8], edx |
k7_after_check: |
mov dword[ebp-4], 0x32A9F880;0x850000000 ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
ALIGN 16 |
k7_crunch: |
fxch ; CALC BLOCK |
fld qword [ebp+esi*8-24] ; 17 instr / 6.0 cycles |
fmul qword [ebp+esi*8-32] |
faddp |
dec ecx |
fld qword [ebp+esi*8-24] |
dec ebx |
inc dword [ebp+esi*8-12] |
inc ecx |
fmul qword [ebp+esi*8-32] |
inc ebx |
dec dword [ebp+esi*8-4] |
jmp $+2 |
fsubp st2, st0 |
jnz k7_crunch ; time for testing ? |
test ebx, ebx ; TEST BLOCK |
jnz k7_int_exit |
test ecx, ecx |
jnz k7_int_exit |
cmp edx, half |
jnz k7_int_exit |
fcom st1 |
fstsw ax |
sahf |
jz k7_after_check |
dec ebx |
k7_int_exit: |
dec ebx |
add esp,96 |
mov eax, -1 |
int 0x40 |
;####################################################################### |
;####################################################################### |
p5: finit |
push ebp |
mov ebp, esp |
and ebp, -32 |
sub esp, 96 |
fld qword [half] |
fstp qword [ebp - 24] |
fld qword [rtt] |
fst qword [ebp - 16] |
fld st |
fld st |
p5_after_check: |
xor eax, eax |
mov eax, ebx |
mov ecx, 200000000 |
align 32 |
;# MAIN LOOP 16 flops / 18 cycles |
p5_crunch: |
fmul qword [ebp - 24] |
fxch st1 |
fadd qword [ebp - 16] |
fxch st2 |
fmul qword [ebp - 24] |
fxch st1 |
fadd qword [ebp - 16] |
fxch st2 |
fmul qword [ebp - 24] |
fxch st1 |
fadd qword [ebp - 16] |
fxch st2 |
fmul qword [ebp - 24] |
fxch st1 |
fadd qword [ebp - 16] |
fxch st2 |
fmul qword [ebp - 24] |
fxch st1 |
fadd qword [ebp - 16] |
fxch st2 |
fmul qword [ebp - 24] |
fxch st1 |
fadd qword [ebp - 16] |
fxch st2 |
fmul qword [ebp - 24] |
fxch st1 |
fadd qword [ebp - 16] |
fxch st2 |
fmul qword [ebp - 24] |
fxch st1 |
fadd qword [ebp - 16] |
fxch st2 |
dec ecx |
jnz p5_crunch |
jmp p5_after_check |
;####################################################################### |
;####################################################################### |
p6: finit |
push ebp |
mov ebp, esp |
and ebp, -32 |
sub esp, 96 |
fldpi |
fld qword [rtt] |
fstp qword [ebp - 24] |
fld qword [e] |
fstp qword [ebp - 32] |
mov edx, [half] |
mov [ebp - 8], edx |
p6_after_check: |
xor eax, eax |
mov ebx, eax |
lea esi, [eax - 1] |
mov ecx, 539000000 ;# check after this count |
mov [ebp - 4], ecx |
align 32 |
p6_crunch: ;# MAIN LOOP 21uops / 8.0 clocks |
fld qword [ebp+esi*8-16] |
fmul qword [ebp+esi*8-24] |
add edx, [half] |
jnz $ + 2 |
faddp |
fld qword [ebp - 24] |
dec ebx |
sub edx, [half + 9 + esi + esi*8] |
jmp $ + 2 |
fmul qword [ebp+esi*8-24] |
inc ebx |
dec dword [ebp+esi*8+4] |
fsubp |
jnz p6_crunch |
test ebx, ebx ;# Testing block |
mov ebx, 0 |
jnz p6_int_exit |
cmp edx, [half] |
jnz p6_int_exit |
fldpi |
fcomp st1 |
fstsw ax |
sahf |
jz p6_after_check ;# fp result = pi ? |
dec ebx |
p6_int_exit: ;# error abort |
dec ebx |
add esp, 96 |
pop ebp |
mov eax, -1 |
int 0x40 |
;--------------------------------------------- |
align 32 |
half dd 0x7fffffff, 0 |
e dd 0xffffffff, 0x3fdfffff |
rtt dd 0xffffffff, 0x3fefffff |