forked from KolibriOS/kolibrios
GMon: simple precautions against division-by-zero error
git-svn-id: svn://kolibrios.org@2429 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
ba28bfb5a8
commit
d955a6bf75
@ -167,6 +167,8 @@ it87_get_fan_speed:
|
||||
pop ecx
|
||||
mov eax, 1350000
|
||||
xor edx, edx
|
||||
test ebx, ebx
|
||||
jz @f
|
||||
div ebx
|
||||
mov [hwm_rpms + 4 * ecx], eax
|
||||
inc ecx
|
||||
|
@ -1,18 +1,18 @@
|
||||
;
|
||||
; Ghost Monitor - утилита (стресс) тестирования и мониторинга системы
|
||||
; Ghost Monitor - ã⨫¨â (áâà¥áá) â¥áâ¨à®¢ ¨ï ¨ ¬®¨â®à¨£ á¨á⥬ë
|
||||
; Copyright (C) 2005, 2006, 2007 Mihailov Ilia (ghost.nsk@mail.ru)
|
||||
; All Right Reserved
|
||||
|
||||
;
|
||||
; Библиотека для чипов WinBond
|
||||
; <EFBFBD>¨¡«¨®â¥ª ¤«ï 稯®¢ WinBond
|
||||
;
|
||||
;
|
||||
; Дописать получение инфы с других датчиков
|
||||
; W83627DHG мониторинг аналогичен W83627EHF, дописать учёт DIV_B2
|
||||
; + 16.03.06 Исправлена ошибка в wb_get_cpu_temper с десятых градуса (было 30.5 30.0 31.5 ...)
|
||||
; „®¯¨á âì ¯®«ã票¥ ¨äë á ¤àã£¨å ¤ â稪®¢
|
||||
; W83627DHG ¬®¨â®à¨£ «®£¨ç¥ W83627EHF, ¤®¯¨á âì ãçñâ DIV_B2
|
||||
; + 16.03.06 ˆá¯à ¢«¥ ®è¨¡ª ¢ wb_get_cpu_temper á ¤¥áïâëå £à ¤ãá (¡ë«® 30.5 30.0 31.5 ...)
|
||||
;
|
||||
;
|
||||
; О маркировке (?) : H - H/W Monitor, G - Pb-free package, T - ACPI, S - Smart Card Reader Interface
|
||||
; Ž ¬ ન஢ª¥ (?) : H - H/W Monitor, G - Pb-free package, T - ACPI, S - Smart Card Reader Interface
|
||||
; D - SuperIO supporting Intel* PECI* & SST* interfaces, U - UART
|
||||
;
|
||||
; | Chip name | ID Vin Fanin PWM Temp ISA SMBus
|
||||
@ -40,7 +40,7 @@ endg
|
||||
|
||||
;-----------------------------------
|
||||
wb_init:
|
||||
; Проверка наличия и инициализация
|
||||
; <EFBFBD>஢¥àª «¨ç¨ï ¨ ¨¨æ¨ «¨§ æ¨ï
|
||||
; OUT - CF = 1 - error
|
||||
cmp byte[acc_type], 2 ; Only ISA and SMBus
|
||||
jae wb_no
|
||||
@ -57,9 +57,9 @@ wb_init:
|
||||
mov al, 0x4f
|
||||
call [IO_Read]
|
||||
cmp ax, 0xa35c
|
||||
jne wb_no ; это не Winbond !!!
|
||||
jne wb_no ; íâ® ¥ Winbond !!!
|
||||
|
||||
; --- узнаём идентификатор чипа --
|
||||
; --- 㧠ñ¬ ¨¤¥â¨ä¨ª â®à 稯 --
|
||||
mov al, 0x58
|
||||
call [IO_Read]
|
||||
and al, 0xFE ; 0x20 = 0x21, 0x60 = 0x61, etc
|
||||
@ -111,13 +111,13 @@ wb_getparam:
|
||||
;-----------------------------------
|
||||
wb_get_temp:
|
||||
; temp 1
|
||||
mov al, 0x4e ; Выбираем bank 1
|
||||
mov al, 0x4e ; ‚ë¡¨à ¥¬ bank 1
|
||||
mov bl, 1
|
||||
call [IO_Write]
|
||||
mov al, 0x50 ; Получаем старший байт температуры (градусы)
|
||||
mov al, 0x50 ; <EFBFBD>®«ãç ¥¬ áâ à訩 ¡ ©â ⥬¯¥à âãàë (£à ¤ãáë)
|
||||
call [IO_Read]
|
||||
mov [hwm_temps], al
|
||||
mov al, 0x51 ; Получаем младший байт температуры (x.5`C)
|
||||
mov al, 0x51 ; <EFBFBD>®«ãç ¥¬ ¬« ¤è¨© ¡ ©â ⥬¯¥à âãàë (x.5`C)
|
||||
call [IO_Read]
|
||||
cmp al, 0 ; if al == 0 then x.0, else x.5
|
||||
je @f
|
||||
@ -125,28 +125,28 @@ wb_get_temp:
|
||||
@@: mov [hwm_temps + 1], al
|
||||
|
||||
; temp 2 (3 SYSTIN)
|
||||
mov al, 0x4e ; Выбираем bank 0
|
||||
mov al, 0x4e ; ‚ë¡¨à ¥¬ bank 0
|
||||
xor bl, bl
|
||||
call [IO_Write]
|
||||
mov al, 0x27 ; Получаем старший байт температуры (градусы)
|
||||
mov al, 0x27 ; <EFBFBD>®«ãç ¥¬ áâ à訩 ¡ ©â ⥬¯¥à âãàë (£à ¤ãáë)
|
||||
call [IO_Read]
|
||||
mov [hwm_temps + 2], al
|
||||
|
||||
; temp 3 (VTIN)
|
||||
mov al, 0x4e ; Выбираем bank 2
|
||||
mov al, 0x4e ; ‚ë¡¨à ¥¬ bank 2
|
||||
mov bl, 2
|
||||
call [IO_Write]
|
||||
mov al, 0x50 ; Получаем старший байт температуры (градусы)
|
||||
mov al, 0x50 ; <EFBFBD>®«ãç ¥¬ áâ à訩 ¡ ©â ⥬¯¥à âãàë (£à ¤ãáë)
|
||||
call [IO_Read]
|
||||
mov [hwm_temps + 4], al
|
||||
mov al, 0x51 ; Получаем младший байт температуры (x.5`C)
|
||||
mov al, 0x51 ; <EFBFBD>®«ãç ¥¬ ¬« ¤è¨© ¡ ©â ⥬¯¥à âãàë (x.5`C)
|
||||
call [IO_Read]
|
||||
cmp al, 0 ; if al == 0 then x.0, else x.5
|
||||
je @f
|
||||
mov al, 5
|
||||
@@: mov [hwm_temps + 5], al
|
||||
|
||||
; Проверка температуры, датчики с 127.5`C не используются
|
||||
; <EFBFBD>஢¥àª ⥬¯¥à âãàë, ¤ â稪¨ á 127.5`C ¥ ¨á¯®«ì§ãîâáï
|
||||
mov ecx, 3
|
||||
mov esi, hwm_temps
|
||||
wb_check_temp:
|
||||
@ -178,6 +178,8 @@ wb_get_fan_speed:
|
||||
mov ebx, eax
|
||||
mov eax, 1350000
|
||||
xor edx, edx
|
||||
test ebx, ebx
|
||||
jz .div0
|
||||
div ebx
|
||||
mov [hwm_rpms], eax
|
||||
|
||||
@ -193,11 +195,14 @@ wb_get_fan_speed:
|
||||
cmp al, 255
|
||||
jne @f
|
||||
xor eax, eax
|
||||
.div0:
|
||||
ret
|
||||
@@: mul ebx
|
||||
mov ebx, eax
|
||||
mov eax, 1350000
|
||||
xor edx, edx
|
||||
test ebx, ebx
|
||||
jz .div0
|
||||
div ebx
|
||||
mov [hwm_rpms + 4], eax
|
||||
|
||||
@ -218,6 +223,8 @@ wb_get_fan_speed:
|
||||
mov ebx, eax
|
||||
mov eax, 1350000
|
||||
xor edx, edx
|
||||
test ebx, ebx
|
||||
jz .div0
|
||||
div ebx
|
||||
mov [hwm_rpms + 8], eax
|
||||
|
||||
@ -229,7 +236,7 @@ wb_get_fan_speed:
|
||||
and al, 3
|
||||
mov ebx, 1
|
||||
mov cl, al
|
||||
shl ebx, cl ; <- div4, дописать учёт DIV_B2
|
||||
shl ebx, cl ; <- div4, ¤®¯¨á âì ãçñâ DIV_B2
|
||||
xor eax, eax
|
||||
mov al, 0x3F
|
||||
call [IO_Read]
|
||||
@ -241,6 +248,8 @@ wb_get_fan_speed:
|
||||
mov ebx, eax
|
||||
mov eax, 1350000
|
||||
xor edx, edx
|
||||
test ebx, ebx
|
||||
jz .div0
|
||||
div ebx
|
||||
mov [hwm_rpms + 12], eax
|
||||
|
||||
@ -250,9 +259,9 @@ wb_get_fan_speed:
|
||||
and al, 3
|
||||
mov ebx, 1
|
||||
mov cl, al
|
||||
shl ebx, cl ; <- div5, дописать учёт DIV_B2
|
||||
shl ebx, cl ; <- div5, ¤®¯¨á âì ãçñâ DIV_B2
|
||||
xor eax, eax
|
||||
mov al, 0x4e ; Выбираем bank 5
|
||||
mov al, 0x4e ; ‚ë¡¨à ¥¬ bank 5
|
||||
mov bl, 5
|
||||
call [IO_Write]
|
||||
mov al, 0x53
|
||||
@ -265,6 +274,8 @@ wb_get_fan_speed:
|
||||
mov ebx, eax
|
||||
mov eax, 1350000
|
||||
xor edx, edx
|
||||
test ebx, ebx
|
||||
jz .wb_f_e
|
||||
div ebx
|
||||
mov [hwm_rpms + 16], eax
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user