いきさつ
 今使っているマザーボードSY6BAにはLM78がのっている。LM75もある。LM78は電源の電圧、FANの回転数、温度がわかり、設定値になったときに割り込みをかけたりできる。またLM75は温度の測定と監視ができる。だが、このマザーではBIOSでしか温度などを見ることができなかった。その手のツールが付いていないのだ。それらしきツールを5〜6個見つけて実行してみてもうまく表示されない。ASUSなんかとは仕様が違っているようである。そこでLM78、LM75の仕様書を取り寄せ、Internetからも情報を得て研究し、何とかなりそうになったので、ここにまとめる。 
 実のところたまに見られればいいやって感じなので、ちゃんとしたツールにする気はない。なんか作ったら私にもください。 
になる。みたい。 
        ちなみにLM78では1.0℃単位で、LM75は0.5℃単位で温度がわかる。 
である。なぜこんな簡単なのに出回っているツールが使えないのかはわからない。そのうち適当なツールを作ろうかと思ったが、私のマシンではCPU温度が正確に測れていない。というのはセンサーがCPUから離れているため。私の場合は特にヒートシンクからも外れてしまっている。これを改善しないと温度センサーの絶対値の意味がない。

#include <conio.h> #include <winbase.h> #define LM78ISAAddr	0x295 #define	PIIX4SMBAddr	0x5000
#define LM75No		0x4C //更新処理 void CSMBUSDlg::OnQuery() {
	// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください int	vol1,vol2,vol3,vol4,vol5,vol6,vol7; int	fan1,fan2,fan3;
int temp; //新しい値を得る 	_outp( LM78ISAAddr, 0x60);
	Sleep(100); 	vol1 = (unsigned char )(_inp( LM78ISAAddr+1) & 0xFF); 	vol2 = (unsigned char )(_inp( LM78ISAAddr+1) & 0xFF); 	vol3 = (unsigned char )(_inp( LM78ISAAddr+1) & 0xFF);
	vol4 = (unsigned char )(_inp( LM78ISAAddr+1) & 0xFF); 	vol5 = (unsigned char )(_inp( LM78ISAAddr+1) & 0xFF); 	vol6 = (unsigned char )(_inp( LM78ISAAddr+1) & 0xFF); 	vol7 = (unsigned char )(_inp( LM78ISAAddr+1) & 0xFF);
	temp = (unsigned char )(_inp( LM78ISAAddr+1) & 0xFF); 	fan1 = (unsigned char )(_inp( LM78ISAAddr+1) & 0xFF); 	fan2 = (unsigned char )(_inp( LM78ISAAddr+1) & 0xFF); 	fan3 = (unsigned char )(_inp( LM78ISAAddr+1) & 0xFF);
	m_vol1 = vol1*16; 	m_vol2 = vol2*16; 	m_vol3 = vol3*16; 	m_vol4 = vol4 *16*5000/3000;
	m_vol5 = vol5 *16*12000/3175; 	m_vol6 = -vol6 *16*12000/3446; 	m_vol7 = -vol7 *16*5000/3283;
/* 	m_vol1 = vol1; 	m_vol2 = vol2; 	m_vol3 = vol3;
	m_vol4 = vol4; 	m_vol5 = vol5; 	m_vol6 = vol6; 	m_vol7 = vol7;
*/ 	m_lm78_temp = temp; 	m_fan1 = (fan1 != 255) ? (1350000/fan1/2) : 0; 	m_fan2 = (fan2 != 255) ? (1350000/fan2/2) : 0;
	m_fan3 = (fan3 != 255) ? (1350000/fan3/2) : 0; 	_outp( PIIX4SMBAddr+4, (LM75No<<1)|0x01); 	_outp( PIIX4SMBAddr+3, 00);
	_outp( PIIX4SMBAddr+2, 0x4c); 	Sleep( 100); 	if( _inp( PIIX4SMBAddr) & 2){ 		m_lm75_temp1 = _inp( PIIX4SMBAddr+5)*10 + _inp( PIIX4SMBAddr+6)/128*5;
		_outp( PIIX4SMBAddr, 2); 	}else 	if( _inp( PIIX4SMBAddr) & 4){ 		m_lm75_temp1 = 0;
		_outp( PIIX4SMBAddr, 4); 	} 	//新しい値で描画 	UpdateData( FALSE);
 }
        
    坂井瑞穂 
