Now I'm interested in communication via SMBus which is present in most of modern PCs. SMBus host controller can communicate with various kind of peripheral devices on motherboard such as PLL clock generator (BTW it controls your FSB and PCI speed), SPD EEPROM on DIMM module or various sensor/monitor circuits. Problem is that every chipset has its own SMB controller implementation so individual access is needed. This is the reason why my program supports only motherboards with southbridge intel 82371 (PIIX4) used on most of iTX,LX,BX,ZX,GX boards for which I can debug it. The same problem is with SMB slave devices - everyone has specific registers and supports various transfer modes.


      Since 10.1.2003 SMB program supports southbridge intel 82801 (ICHx) so it should work on newest i8xx based motherboards.

      SMB program can read information about installed DIMM modules (including manufacturer, capacity, organisation, signal levels, refresh and timing modes, access time...). I can read and set FSB/PCI speed and spread spectrum on few supported PLL chips: Winbond 83194R-02/04/39/39A, 83195R-08, ICS 9148-26 and CY 28349. And finally it can read temperature from sensors MAX1617 and LM75. I tested it only with my Winbond 83194R-39A PLL. I use this for "adaptive overclocking" when CPU is overclocked only if really need (rendering, compression, games...) anyway there's no reason to burn 850 MHz CPU for writing this HTML and listening Norther-Mirror Of Maddness MP3z ;-)

      4.7.2003 SMB version 1.13 includes some new features:
-tested support of southbridges intel ICH - ICH5 (ICH6)
-information about DIMM modules are now correct for DDR, updated JEDEC manufacturers database
-full support for PLL Cypress CY28349 with ~1 MHz FSB stepping from 50 to 248 MHz
-the program SCANSMB is now integrated to SMB and it's available with /s commandline parameter.

      12.2.2005 into SMB version 1.15 was added support for HW monitor circuit ADT7463 and a experimental support for PLL Realtek RTM520-39D (motherboards Abit BX133 and BF6). FSB can be adjusted by 8 steps only because I don't know how to unlock PLL's extended configuration registers which contains M,N division factor for 1 MHz step adjusting. If somebody knows please drop me a mail. JEDEC manufacturers IDs database was also updated.

      18.2.2005 since SMB version 1.17 there will be two versions available. One classic for DOS and Win9x compiled under DJGPP and second for Win9x/NT/2K/XP compiled under MinGW32. Windows version would never born without project IO.DLL which is a system library allowing direct I/O port access using standard inport/outport-like functions. The library doesn't need to be installed, just copy it somewhere in system path or leave it in same directory as SMB.EXE and it should be loaded automatically. I made quite simple modification of my source code to be able to compile it under both compilers without any further change. I reached it using #ifdef __MINGW32__ ... directive and replacing some functions from conio.h by WinAPI functions).
New version have full support of popular HW monitor Winbond W83782D. Then I added experimental debug console feature which can be entered by SMB /dbg. It allows you to call internal C-funcstions for handling PCI and SMBus. So then you can communicate with yet unsupported slave devices. Due to great C ability of I/O redirecting you can write commands into a text file and then execute it as script SMB /dbg script.txt. But I give you warning it's need to be very careful! Only one wrong write can freeze your PC and performing HW-reset will not help you (use hard power off). Or it can cause hardware damage.

      5.3.2005 IDE/ATA support was implemented into new SMB version 1.18. Using parameter SMB /ide [hexdump] you can get a lot of interesting informations about your IDE harddisk drives including the S.M.A.R.T. statistics and drive temperature if supported (most of newest HDD support it). SMB program also work with tertiary and quaternary IDE channel of controller HighPoint HPT37x, that's not usual in other similar programs (but unfortunately only under DOS/W9X coz NT suxx). The debug console was also updated to allow you to call new functions for: setting AAM (Automatic Acoustic Management), APM, drive motor spin-down, sector read/write, change drive configuration and more... In principle you can execute every ATA command, the parameters can be found in appropriated documentation (ATA-7a, ATA-7b, ATA-7c). If command needs to read/write some data they are stored in 512B sector buffer which can be modified, cleared and displayed. To demonstrate how to utilize abilities of debug console I wrote this demo script: smbdemo.txt which can be run by following command: SMB /dbg smbdemo.txt.

      5.6.2007 Most of code of new SMB 2.xx line was rewritten and employed the ioperm.dll 0.5 driver/library (same as I use for CPUID) to provide Windows NT based OS compatability. The new is also binary for Linux. I rewrote modules for handling PCI bus, SMBus (better timing and faster transfer + support for new intel ICH7, ICH8 and 631x/632x chipsets), IDE (support for ITE8211/8212, ICH7, ICH8 IDE/ATAPI controller and ATAPI devices listing added). IDE support under Windows NT based OSes is experimental. There I cannot disable interrupts to prevent IDE communication jam. So I strongly suggest to try it only when HDD is inactive (HDD LED is not flashing). It was successfully tested on ITE2811 and HPT370 controllers under Windows XP. SPD module was extended to support DDR II memory modules and also the JEDEC manufacturers database was updated. I also add PCI scanner function which you can execute by command SMB /pci. It will displays short info about all installed PCI devices. A small PCI vendor ID database is built it but if you prefer more verbose info (including device name) you can download big database from http://members.datafast.net.au/dft0802. Many people contribute there to keep it updated (discontinued). Copy the file PCIDEVS.TXT to the same directory where you executing SMB.EXE from and it should find it and search there for VID, DID and description. Also some dobeg console commands was changed.

      16.9.2007 Version 2.05 brings experimantal support for intel ICH9 and fix a bug in linux version - SMB crashed when you tried to save DIMM SPD data to file.

      16.3.2008 Version 2.06 has new support for HW monitor which is a part of LPC SuperIO Winbond W83627. You can also set fan speed via command line parameter: SMB /t fan_type pwm_duty_cycle, where fan_type is 'a'-auxfan|'c'-cpufan|'s'-systemfan and pwm_duty_cycle is a number in range [0-255] determining the PWM regulator duty cycle. Also JEDEC manufacturers database was updated.

      23.3.2008 new PLL ICS 954128 was added to version 2.07. You can set 23 fixed FSB steps in range 100 - 400 MHz. But on my system even a small FSB change caused SATA unstability or system hangs so I cannot do further testing. I also optimized PLL code so binary files are now slightly smaller.

      8.4.2008 I add a new feature into version 2.08 which enables you, together with /pci [file] parameter, using external PDT (PCI Device Template) text file. This file describes PCI registers in one PCI device and allows you to use custom printing format suitable for specific PCI device. As an example I included a simple template for intel (G)MCH 82P31.

      7.9.2009 Version 2.09 has new support for SMBus controller intel ICH10(R). I succesfully tested it on Gigabyte GA-P43-ES3G mainboard.



