Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 204 → Rev 205

/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