forked from KolibriOS/kolibrios
e626668c98
git-svn-id: svn://kolibrios.org@3007 a494cfbc-eb01-0410-851d-a64ba20cac60
565 lines
12 KiB
NASM
565 lines
12 KiB
NASM
;
|
||
; Ghost Monitor - ã⨫¨â (áâà¥áá) â¥áâ¨à®¢ ¨ï ¨ ¬®¨â®à¨£ á¨á⥬ë
|
||
; Copyright (C) 2005, 2006, 2007 Mihailov Ilia (ghost.nsk@mail.ru)
|
||
; AMD fusion version 2012
|
||
; All Right Reserved
|
||
;
|
||
; ‚Ž‡ŒŽ†<C5BD>€ <20>Ž<EFBFBD>—€ Ž<>Ž<EFBFBD>“„Ž‚€<E2809A>ˆŸ!
|
||
; ˆ‘<CB86>Ž‹œ‡“‰’… <20>€ ‘‚Ž‰ ‘’<E28098>€• ˆ <20>ˆ‘Š!
|
||
;
|
||
; ‡ ¬¥âª¨ :
|
||
; „®¯¨á âì § ¯ã᪠â¥á⮢ (rtst) (¥â ॠªæ¨¨ ®è¨¡ªã § ¯ã᪠)
|
||
; <20>¥à¥¤¥« âì ®¡®¢«¥¨¥ £à 䨪 (ᤥ« âì ®â¤¥«ìë¬ ¯à®æ¥áᮬ)
|
||
; „®¡ ¢¨âì ॠªæ¨î ¯ à ¬¥âàë ¤ â稪®¢
|
||
;
|
||
|
||
; ‚¥è¨¥ ä ©«ë :
|
||
; 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 (tab_test.inc)
|
||
; 07 - P6 test (tab_test.inc)
|
||
; 08 - K6 test (tab_test.inc)
|
||
; 09 - K7 test (tab_test.inc)
|
||
; 10 - MMX test - not used (tab_test.inc)
|
||
; 11 - Update time increment (tab_conf.inc)
|
||
; 12 - Update time decriment (tab_conf.inc)
|
||
; 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 ; <-- ®è¨¡ª § ¯ã᪠â¥áâ , <20>…<EFBFBD>…<EFBFBD>ˆ‘€’œ
|
||
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]
|
||
mov ecx, (colors_end - colors) / 4 ; ª®«¨ç¥á⢮ 梥⮢
|
||
@@: dec ecx
|
||
cmp eax, [colors + ecx * 4]
|
||
jne @b
|
||
mov ebx, [colors + ecx * 4 - 4]
|
||
mov [esi], ebx
|
||
jmp draw_window
|
||
no_change_color:
|
||
jmp wait_for_event
|
||
;---------------------------------------------------------------------
|
||
draw_window:
|
||
mov eax,12
|
||
mov ebx,1
|
||
int 0x40
|
||
; ‘®§¤ ñ¬ ®ª®
|
||
xor eax, eax
|
||
mov ebx, 300 * 65536 + 309
|
||
mov ecx, 150 * 65536 + 450
|
||
mov edx, tcol + 0x14000000 ; color of work area RRGGBB,8->color
|
||
mov edi, title ; color of frames RRGGBB
|
||
int 0x40
|
||
; ‘®§¤ ñ¬ à ¬ªã £à 䨪
|
||
mov eax, 13
|
||
mov ebx, 10 * 65536 + 290
|
||
mov ecx, 138 * 65536 + 105
|
||
mov edx, atcol
|
||
int 0x40
|
||
mov ebx, 12 * 65536 + 286
|
||
mov ecx, 140 * 65536 + 101
|
||
mov edx, tcol
|
||
int 0x40
|
||
mov eax, 38
|
||
mov edx, atcol
|
||
mov ebx, 12 * 65536 + 286 + 12
|
||
mov ecx, 140 * 65536 + 140
|
||
@@: add ecx, 10 * 65536 + 10
|
||
int 0x40
|
||
cmp cx, 230 ; ¯à¨¢ï§ ® ª ª®®à¤¨ â ¬ ®ª
|
||
jl @b
|
||
|
||
; <20>¨è¨¬ §¢ ¨ï ¯ à ¬¥â஢ (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
|
||
|
||
; <20>¨á㥬 ª®¯ª¨ ᬥë 梥â
|
||
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
|
||
|
||
; <20>¨è¨¬ § £à㧪㠯à®æ¥áá®à
|
||
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
|
||
|
||
; <20>¨è¨¬ ¨á¯®«ì§ã¥¬ãî ¯ ¬ïâì
|
||
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
|
||
; <20>¥â ¤ â稪®¢ - ¯¨è¥¬ NO
|
||
mov ecx, 8 ;<- ª®«¨ç¥á⢮ ¯ à ¬¥â஢
|
||
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, hwm_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[hwm_temps]
|
||
sub al, 25
|
||
shl al, 1
|
||
cmp ah, 5
|
||
jb @f
|
||
or al, 1
|
||
@@:
|
||
mov esi, d_temp1
|
||
call d_add
|
||
call d_show
|
||
;;--- ¤®¡ ¢«ï¥¬ £à 䨪 temp2 ---
|
||
movzx eax, word[hwm_temps + 2]
|
||
sub al, 25
|
||
shl al, 1
|
||
cmp ah, 5
|
||
jb @f
|
||
or al, 1
|
||
@@:
|
||
mov esi, d_temp2
|
||
call d_add
|
||
call d_show
|
||
;;--- ¤®¡ ¢«ï¥¬ £à 䨪 temp3 ---
|
||
movzx eax, word[hwm_temps + 4]
|
||
sub al, 25
|
||
shl al, 1
|
||
cmp ah, 5
|
||
jb @f
|
||
or al, 1
|
||
@@:
|
||
mov esi, d_temp3
|
||
call d_add
|
||
call d_show
|
||
|
||
;---------------------------
|
||
; ‘ª®à®á⨠¢à è¥¨ï ¢¥â¨«¥©
|
||
mov ecx, 5
|
||
mov esi, hwm_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
|
||
|
||
;---------------------------
|
||
; <20> ¯à㣨
|
||
mov esi, hwm_voltages
|
||
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, 250 * 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
|
||
; <20>¨è¨¬ §¢ ¨ï ¢ª« ¤®ª
|
||
mov eax, 4
|
||
mov ebx, 35 * 65536 + 260
|
||
mov edx, tab_lab
|
||
mov ecx, 0x10000000
|
||
mov esi, 39
|
||
int 0x40
|
||
; ᮧ¤ ñ¬ à ¬ªã ¢¨§ã íªà
|
||
mov eax, 13
|
||
mov ebx, 10 * 65536 + 290
|
||
mov ecx, 275 * 65536 + 160
|
||
mov edx, atcol
|
||
int 0x40
|
||
mov ebx, 12 * 65536 + 286
|
||
mov ecx, 277 * 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 "tab_info.inc"
|
||
;--- Drow test tab ---------------
|
||
test_tab:
|
||
include "tab_test.inc"
|
||
;--- Drow Config tab -------------
|
||
config_tab:
|
||
include "tab_conf.inc"
|
||
;--- Drow About tab --------------
|
||
about_tab:
|
||
include "tab_about.inc"
|
||
;---------------------------------------------------------------------
|
||
include "system.inc"
|
||
include "hwm.inc"
|
||
include "diag.inc"
|
||
|
||
|
||
DATA
|
||
act_tab db 2 ; <20>®¬¥à ªâ¨¢®© ¢ª« ¤ª¨
|
||
tab_lab db 'Info Tests Configs About'
|
||
title db 'Ghost Monitor v0.4 [23/05/07]',0
|
||
|
||
msgs_mon mls \
|
||
'CPU Load (%)',\
|
||
'Mem Usage(%)',\
|
||
'Temp1',\
|
||
'Temp2',\
|
||
'Temp3',\
|
||
'Fan1',\
|
||
'Fan2',\
|
||
'Fan3',\
|
||
'Fan4',\
|
||
'Fan5'
|
||
|
||
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
|
||
|
||
; –¢¥â £à 䨪®¢
|
||
colors: dd 0xff0000, 0xff00, 0xff, 0xffffff, tcol, 0xFF7E23, 0x8BA169, 0xff0000 ; ¯¥à¢ë© ¨ ¯®á«¥¤¨© à ¢ë
|
||
colors_end:
|
||
;---------------------------------------------------------------------
|
||
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
|