SetFSB.hsp [SetFSBメインスクリプト]

;--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
;  SetFSB Version 2.0b Copyright (C) 2001-2007 by abo
;   Current Platform - Windows Vista/2003/XP/2000/NT4/Me/98  [x86/x64]
;   Programmed in HSP Ver3.1 ONION software (http://hsp.tv/)
;       SysInfo.sys/SysInfoX64.sys Mr.hiyohiyo (http://crystalmark.info/)
;           based on PCI Debug Library [kashiwano masahiro] (http://www.otto.to/~kasiwano/)
;
;/File
;       SetFSB.hsp [SetFSB main script]
;           |
;           |-- SetfsbHeader.as [SetFSB header script]
;           |       |-- sysval.as [System Value]
;           |       |-- gblconst.as [Global Constance]
;           |       |-- chipconst.as [Chipset Constance]
;           | 
;           |-- colorfulobject.as [colorful object module]
;           |-- exobject.as [extension object module]
;           |-- extabctl.as [tab control module]
;           |-- miniasm32.as [mini assembler module]
;           |-- cpufreq.as [CPU frequency module]
;           |-- sysinfo.as [SysInfo module]
;           |-- smbus.as [SMBus module]
;           |-- ExeWrightMod25k.as [Execution file Wright Module]
;           | 
;           |-- SetfsbGlobalDeffunc.as [SetFSB Global Space Definition Function]
;                   |-- GlobalDeffuncPrm.hsp [Global Space Definition Function for Prameter]
;                   |-- GlobalDeffuncInit.as [Global Space Definition Function for Initialize]
;                   |-- GlobalDeffuncWinMes.as [Global Space Definition Function for Window Message]
;                   |-- GlobalDeffuncCmd.as [Global Space Definition Function for Command Line Switch]
;
;       Initialize_exemodoki25k.hsp [Initialize _exemodoki25k]
;       _exemodoki25k [Execution file for debug]
;
;       hsp3c_vista28k.hrt [HSP runtime for SetFSB]
;
;       SysInfo.sys [WindowsNT X86 device driver]
;       SysInfoX64.sys [WindowsNT X64 device driver]
;
;--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
;/History
;   2.0b1   /*** Programmed in HSP Ver3.1b5 ***/
;               11/08/2006  ICS952607EF(ASUS P4C800)                    20b1
;                           ICS9LPRS587AGLF(GIGABYTE GA-965P)           20b1
;                               Control/Customize/Diagnosis/(Creator)
;               11/12/2006  ICS954141CFLF(ASUS P5LP-LE rev1.05)         20b2
;               11/19/2006  CY28551LFXC(ASUS P5B Deluxe)                20b3
;               02/05/2006  ICS9LPRS511EGLF(Foxconn G9657MA-8EKRS2H)    20b4
;                           *ICS9LPRS552AGLF(Asus P5B non-deluxe)       20b4 - NG
;               02/09/2007  ICS9514618GLF(DFI ICFX3200)                 20b5
;                           SLG505YC56DT(Intel D975XBX2)                20b5
;                               Supported ATI Xpress 3200 Intel (RD600/SB600) chipset
;                               Supported Windows Vista/2003/XP [x64]
;               02/15/2007  ICS954108CFLF(Intel D975XBX)                20b6
;                           ICS950703BF(ASUS P4T533)                    20b6
;                               Corrected SMBus bug
;                               Added manifest for Windows Vista
;               02/16/2007  CV122C(ASUS P5LD2-VM SE)                    20b7c
;               02/18/2007  ICS954123CGLF(ASUS P5W-DH)                  20b7g
;                           RTM876-660(GA-TG965MP-RH) ME-B01barebone    20b7
;               02/27/2007  ICS94225AF (EPoX EP-8K7A, GIGABYTE GA-7DXR, ASUS A7M266)    20b8e
;                               Fixed Windows Me/98 bug.
;                               Supported AMD-960(VIA VT82C686/A/B) chipset.
;                               Improved SMBus stability.
;                               Corrected CPU Frequency xxxx.xMHz [x64].
;               03/05/2007  CV174CPAG(Intel DG965LV/DQ965GF/DG965RY) Gateway GT5238E    20b8f
;                           ICS9514618GLF->ICS951461BGLF
;               03/07/2007  ICS950405AF(ASUS K8V)                       20b8g
;               03/17/2007  ICS9LPR501HGLF(ABIT IB9)                    20b8i
;                               Fixed SLG505YC56DT bug.(Intel DQ965COE)
;               03/25/2007  RTM520-39D(EPoX EP-BX6, Chaintech CT-6ASA4) 20b8m
;               03/29/2007  *CY505YC56DT(Dell optiplex 745)             20b8q - NG
;               03/31/2007  ICS952001AF(MSI 645U)                       20b8r
;               04/01/2007  ICS9248D/EF-199(Biostar M7SUA)              20b8t
;               04/03/2007  *ICS954310BGLFT(ACER Aspire 3682) 20b8x - NG
;               04/08/2007  ICS951403CF(FIC AT31)                       20b8y
;                           ICS950812BG(Compaq Presario 2201AP, Toshiba dynabook SS 2110)
;                           *SLG8LP462BF(HP Compaq nx7400 notebook) - NG
;               04/29/2007  ICS954227CGLF(Sony VAIO VGN-S460/S580P)     20b9g
;               05/02/2007  ICS9LPRS509HGLF(DFI Infinity P965-S)        20b9j
;               05/09/2007  ICS9LPRS918BKL(ASUS P5K(3) Deluxe)          20b12
;               05/31/2007  ICS9LPRS916BGLF(ASUS P5K)                   20b15f
;                           ICS952623CG (Toshiba Satellite P10-554)
;                           Fixed CV174CPAG bug. (Intel DG965WH)
;               08/28/2007  ICS9LPRS906CGLF (MSI P35 Platinum)          20b15o
;                           ICS953002DFLF (ABIT IP95)
;                           Fixed CY28551LFXC bug. (DFI LANPARTY UT P35-T2R)
;               08/28/2007  RTM866-485 (ECS 945GCT-M2)                  20b15r

;               09/10/2007  /*** Programmed in HSP Ver3.1 ***/

;               09/17/2007  Released SetFSB programming.                20b15v

;               09/23/2007  ICS9LPRS919BKL(Foxconn Mars)                20b15w
;                           Fixed Biostar TP35D2-A7(BIOS P35BA817).

;               Unconfirmed
;                           ICS952803AF (ECS 755-A(2))
;                           W83115RG_BW (?) 
;                           W83195BG_101 (ASRock ConRoeXFire-eSATA2)
;               Developing
;                           W83194BR-SD (Asrock 775I65G)
;                           ICS9LPR604AGLF(Intel D201GLY)   SMBus SIS964
;                           *ICS9LPRS552AGLF(Asus P5B non-deluxe) aCR(0x17)..,aCR(0x14)
;                           *ICS954105BF (HP xw4400 Workstation)

;   2007/xx/xx : 2.0.0.1    U版    

#define SoftName    "SetFSB"
#define VerNo       " 2.0.b.15w"                            ;version
#define Copyright   "Copyright (C) 2001-07 By abo"

#define TEST    0           ;0=normal/1=test

#define global nPLL_PRMSIZE 25              ;nPLL=nPLL_PRMSIZE*2

#define nMainScreen 0
#define nCaptureScreen  1
#define nTabControl 2
#define nChildCustomize 3
#define nChildDiagnosis 4
#define nTabCreator 5
#define nAsmScreen  6


#const  nIndexControl   nTabControl-2
#const  nIndexCustomize nChildCustomize-2
#const  nIndexDiagnosis nChildDiagnosis-2
#const  nIndexCreator   nTabCreator-2

#define TabScreenW          500             ;Tab Child Screen Width
#define TabControlScreenH   200             ;Tab Control Child Screen Height
#define TabDiagnosisScreenH 480             ;Tab Diagnosis Child Child Screen Height
#define TabCreatorScreenH   400             ;Tab Creator Child Screen Height
#define TabCustomizeScreenH 480             ;Tab Customize Child Screen Height

#define ScrnDifX                12
#define ScrnDifY                32
#const  MainScreenW             TabScreenW+ScrnDifX             ;Main Screen Width
#const  MainControlScreenH      TabControlScreenH+ScrnDifY      ;Main Screen Height [Control]
#const  MainDiagnosisScreenH    TabDiagnosisScreenH+ScrnDifY    ;Main Screen Height [Diagnosis]
#const  MainCreatorScreenH      TabCreatorScreenH+ScrnDifY      ;Main Screen Height [Creator]
#const  MainCustomizeScreenH    TabCustomizeScreenH+ScrnDifY    ;Main Screen Height [Customize]
#const  MainScreenHmax          MainCustomizeScreenH            ;Main Screen Height [Max]

#define global ErrChipset   0x01
#define global ErrSMBus     0x02
#define global ErrPLLbyte   0x04
#define global ErrPLLid     0x08
#define global ErrIDT       0x20
#define global ErrRTM       0x40
#define global CmdCansel    0x10

#define ErrSysinfo          0x100
#define ErrCrc32            0x200

#define CmdCompleted        0x400
#define CmdFailed           0x800


#define global CONFIG_ADDRESS   0xCF8   ;Configuration Address Register
#define global CONFIG_DATA      0xCFC   ;Configuration Data Register

#cmpopt optcode 1
#cmpopt ppout 1

;/実行ファイル自動作成オプション指定
; type=0(EXEファイル), orgpath=0(初期ディレクトリ移動)
#packopt name "SetFSB"                  ;実行ファイル名
#packopt runtime "hsp3c_vista28k.hrt"   ;ランタイム
#packopt xsize MainScreenW              ;初期ウィンドウXサイズ
#packopt ysize MainControlScreenH       ;初期ウィンドウYサイズ
#packopt hide 1                         ;初期ウィンドウ非表示

#include "SetfsbHeader.as"              ;SetFSB header
#include "colorfulobject.as"            ;colorful object module [tu-sa]
#include "exobject.as"                  ;extension object module
#include "extabctl.as"                  ;tab control module [stdlib]
#include "miniasm32.as"                 ;mini assembler module
#include "cpufreq.as"                   ;CPU frequency module
#include "sysinfo.as"                   ;SysInfo module
#include "smbus.as"                     ;SMBus module
#include "ExeWrightMod25k.as"           ;Execution file Wright Module [puma]
#include "SetfsbGlobalDeffunc.as"       ;SetFSB Global Space Definition Function

/* Initialize Routine */
    gsel nMainScreen,-1 ;nMainScreen_hide
    onexit goto *exit   ;終了時呼び出し

    do
        ;/Initialize Memory
        sdim szClkGenName,nPLL_PRMSIZE*2*nPLL_STRLEN
        szTmrTxtTbl="SLP","MMT","QPC"
        iCrSelLst=-1 : iSmbSelLst=-1
        DataLoad aPLLprm    ;PLL Parameter
        DupPtrPrm
        if wSizScn {
            if iIniCrc=-1 : iIniCrc=CRC32(aPLLprm,nPLL_PRMSIZE*1024+512) : else : iSetFsbFlg|=ErrCrc32 : _break
        } else {
            InitPLLprm
        }
        GetClockGeneratorName   ; szClkGenName
        DupPtrPLL iClkGenCmb

        ;/WindowsNT Device Driver Start
        StartSysInfo    ; X86 Device Driver Start
        if (stat!0)&(stat!(SYSINFO_OPEN|SYSINFO_START|SYSINFO_INSTALL)) {
            _InitSysInfo 1 : StartSysInfo   ; X64 Device Driver Start
            if stat!(SYSINFO_OPEN|SYSINFO_START|SYSINFO_INSTALL) : iSetFsbFlg|=ErrSysinfo : _break
            fX64++
        }

        ;/Configuration Register
        ConfigurationRegister

        ;/Initialize Screen[Control/Customize/Diagnosis]
        InitializeScreen

        ;/Initialize Window Message
        gsel nChildDiagnosis                ;nChildDiagnosis
        oncmd gosub *command,WM_COMMAND
        gsel nChildCustomize                ;nChildCustomize
        oncmd gosub *vscroll,WM_VSCROLL
        oncmd gosub *command,WM_COMMAND
        gsel nTabControl                    ;nTabControl
        oncmd gosub *hscroll,WM_HSCROLL
        oncmd gosub *vscroll,WM_VSCROLL
        oncmd gosub *command,WM_COMMAND
        gsel nMainScreen,1                  ;nMainScreen_show
        oncmd gosub *notify,WM_NOTIFY

        ;/Initialize Tab Control
        tabselset hwTabWnd,iTabIdx                  ;Tab Index [Control/Customize/Diagnosis/(Creator)]
        gosub *InitWinID                            ;
        tabstyset hwTabWnd,fTabSty                  ;Tab Style [Normal Button/Flat Button]

        ;/Initialize Object
        SetfsbObjDisable nAllDis
        SetfsbObjEnable 1
        aSleep 100
        settext hwCurCpuStc,strf("%0.1f",Getfreq(Getupdnpos(hwSelTmrUpd)))+"MHz"
        objenable hwCurCpuStc,1         ;"Current CPU" static control
    until

/* Command Line Switch Routine */
    CommandLineSwitch

/* Main Routine */
    do
        wait 10
        if iSetFsbFlg&ErrChipset : dialog "Chipset Error",1,"SetFSB !!! "+VERno : iSetFsbFlg&=(ErrChipset^0xFF) ;Chipset Error
        if iSetFsbFlg&ErrPLLbyte : dialog "PLL Byte Error",1,"SetFSB !!! "+VERno : iSetFsbFlg&=(ErrPLLbyte^0xFF)    ;PLLbyte Error
        if iSetFsbFlg&ErrSMBus : dialog "SMBus Error",1,"SetFSB !!! "+VERno : iSetFsbFlg&=(ErrSMBus^0xFF)   ;SMBus Error
        if iSetFsbFlg&ErrPLLid : dialog "PLL ID Error",1,"SetFSB !!! "+VERno : iSetFsbFlg&=(ErrPLLid^0xFF)  ;PLLid Error
        if iSetFsbFlg&ErrIDT : dialog "IDT Error",1,"SetFSB !!! "+VERno : iSetFsbFlg&=(ErrIDT^0xFF) ;IDT Error
        if iSetFsbFlg&ErrRTM : dialog "RTM Error",1,"SetFSB !!! "+VERno : iSetFsbFlg&=(ErrRTM^0xFF) ;RTM Error
    until (iSetFsbFlg&0xFF00)

    switch iSetFsbFlg
        case CmdCompleted
            title2 SoftName+VerNo+"   Completed" : aSleep 1000 : swbreak
        case CmdFailed
            title2 SoftName+VerNo+"   Failed" : aSleep 1000 : swbreak
        case ErrSysinfo
            dialog "SysInfo(X64).sys Error",1,"SetFSB !!! "+VERno : swbreak ;Sysinfo Error
        case ErrCrc32
            dialog "Crc32 Error",1,"SetFSB !!! "+VERno : swbreak    ;Crc32 Error
    swend

/* Exit Routine */
*exit
    gsel nMainScreen,-1                     ;画面非表示
    StopSysInfo
    xPosScn=ginfo_wx1,ginfo_wy1,ginfo_winx,ginfo_winy
    if iIniCrc=-1 : iExtCrc32=(CRC32(aPLLprm,nPLL_PRMSIZE*1024+508)^0xFFFFFFFF)
    DataSave aPLLprm                                        ;自分に書き込み命令

    end

;--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
; Button Routine
;--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
;/Button[Get FSB]
*btn_getfsb
    iSetFsbFlg|=CmdCansel
    ButtonFSB nGetFSB
    return
;/Button[Set FSB]
*btn_setfsb
    ButtonFSB nSetFSB
    return
;/Button[Auto]
*btn_auto
    do
        iAutoEnd=Gettrackpos(hwFsbTrb)
        ButtonFSB nGetFSB : if iSetFsbFlg&0xFF : _break
        iAutoSta=Gettrackpos(hwFsbTrb)
        if iAutoSta>iAutoEnd : iAutoSta=iAutoEnd
        wait 30
        repeat iAutoEnd-iAutoSta+1,iAutoSta
            settrackpos hwFsbTrb,cnt
            SetCulationData 1,Gettrackpos(hwFsbTrb),iNumPci
            settext hwSelFrqStc,strf("%3.1f",dCalcFsbFrq)+"/"+strf("%3.1f",dCalcDdrFrq)+"/"+strf("%3.1f",dCalcAgpFrq)+"/"+strf("%3.1f",dCalcPciFrq)+"MHz"
            wait 50
            ButtonFSB nSetFSB : if iSetFsbFlg&0xFF : break
            szBmpName="capture\\a"+strf("%05.1f",dCalcFsbFrq)

            screencapture 0,0,ginfo_sizex,ginfo_sizey,ginfo_wx1,ginfo_wy1

            chdir dir_exe : dirlist szDirLst,"*.*",5
            if instr(szDirLst,0,"capture")=-1 : mkdir "capture"
            szBmpName+="MHz.bmp" : bmpsave szBmpName
            gsel nMainScreen                    ;画面表示
            wait 50
        loop
    until
    
    return

;/Button[capture]
*btn_capture
    objenable hwCaptureBtn,0 : wait 50 : objenable hwCaptureBtn,1   ;[capture]使用可

    szBmpName="capture\\m"
    if dCalcFsbFrq : szBmpName+=strf("%05.1f",dCalcFsbFrq) : else : szBmpName+="   . "

    screencapture 0,0,ginfo_sizex,ginfo_sizey,ginfo_wx1,ginfo_wy1

    chdir dir_exe : dirlist szDirLst,"*.*",5
    if instr(szDirLst,0,"capture")=-1 : mkdir "capture"
    szBmpName+="MHz.bmp" : bmpsave szBmpName

    gsel nMainScreen                    ;画面表示
    objenable hwCaptureBtn,0 : wait 50 : objenable hwCaptureBtn,1   ;[capture]使用可

    return

;/Button[update/inp]
*btn_update
    if iCrSelLst!-1 {
        lstreset hwCrLst(iCrSelLst)
        szCrHex=Gettext(hwHexEdt,3)
        if szCrHex!"" {
            lstaddstring hwCrLst(iCrSelLst),StrUpper(strf("%02x",HEX(szCrHex)))
            lstcursel hwCrLst(iCrSelLst),0
            settext hwHexEdt,Getlsttext(hwCrLst(iCrSelLst))
            if Getlsttext(hwCrLst(iCrSelLst))!"" : settext hwBinEdt,STRBIN(HEX(Getlsttext(hwCrLst(iCrSelLst)))) : else : settext hwBinEdt,""
        } else {
            lstaddstring hwCrLst(iCrSelLst),StrUpper(strf("%02x",aCR(iCrSelLst)))
            settext hwOfsStc,""
            settext hwHexEdt,""
            settext hwBinEdt,""
        }
    }
    if iSmbSelLst!-1 {
        lstreset hwSmbLst(iSmbSelLst)
        lstaddstring hwSmbLst(iSmbSelLst),StrUpper(strf("%02x",io_inp(iSMBadr+iSmbSelLst)))
        lstcursel hwSmbLst(iSmbSelLst),0
        settext hwHexEdt,Getlsttext(hwSmbLst(iSmbSelLst))
        if Getlsttext(hwSmbLst(iSmbSelLst))!"" : settext hwBinEdt,STRBIN(HEX(Getlsttext(hwSmbLst(iSmbSelLst)))) : else : settext hwBinEdt,""
    }

    return

;/Button[apply/out]
*btn_apply
    if iCrSelLst!-1 {
        ButtonFSB nApplyFSB
    }
    if iSmbSelLst!-1 {
        lstreset hwSmbLst(iSmbSelLst)
        szCrHex=Gettext(hwHexEdt,3)
        if szCrHex!"" {
            io_out (iSMBadr+iSmbSelLst),HEX(szCrHex)
            lstaddstring hwSmbLst(iSmbSelLst),StrUpper(strf("%02x",io_inp(iSMBadr+iSmbSelLst)))
            lstcursel hwSmbLst(iSmbSelLst),0
            settext hwHexEdt,Getlsttext(hwSmbLst(iSmbSelLst))
            if Getlsttext(hwSmbLst(iSmbSelLst))!"" : settext hwBinEdt,STRBIN(HEX(Getlsttext(hwSmbLst(iSmbSelLst)))) : else : settext hwBinEdt,""
        } else {
            lstaddstring hwSmbLst(iSmbSelLst),StrUpper(strf("%02x",io_inp(iSMBadr+iSmbSelLst)))
            settext hwOfsStc,""
            settext hwHexEdt,""
            settext hwBinEdt,""
        }
    }
    return

;--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
; Window Message Routine
;--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
;/horizontal scroll [Updown/Trackbar]
; 水平アップダウンコントロールとトラックバーの内容が変わったときの処理
;-------------------------------------------------------------------------------
;#define    SB_LINELEFT         0   ;左へ1単位スクロール
;#define    SB_LINERIGHT        1   ;右へ1単位スクロール
;#define    SB_PAGELEFT         2   ;左へウィンドウの幅だけスクロール
;#define    SB_PAGERIGHT        3   ;右へウィンドウの幅だけスクロール
;#define    SB_THUMBPOSITION    4   ;スクロールボックスを操作した
#define SB_THUMTRACK        5   ;スクロールボックスを操作中
;#define    SB_LEFT             6   ;左にスクロール
;#define    SB_RIGHT            7   ;右にスクロール
;#define    SB_ENDSCROLL        8   ;スクロールを終了
;-------------------------------------------------------------------------------
*hscroll
    switch wparam&0x0F
    case SB_PAGELEFT
    case SB_PAGERIGHT
    case SB_THUMTRACK
        switch lparam
        case hwFsbTrb   ; FSB Trackbar control
            setupdnpos hwFsbUpd,Gettrackpos(hwFsbTrb)
            settext hwNumFsbStc,str(Gettrackpos(hwFsbTrb)-CND(fUltra,iFsbTrbMin-iFsbTrbOfsU,iFsbTrbMin-iFsbTrbOfsN))+"/"+str(iFsbTrbMax-iFsbTrbMin)
            SetCulationData 1,Gettrackpos(hwFsbTrb),Gettrackpos(hwPciTrb)
            settext hwSelFrqStc,strf("%3.1f",dCalcFsbFrq)+"/"+strf("%3.1f",dCalcDdrFrq)+"/"+strf("%3.1f",dCalcAgpFrq)+"/"+strf("%3.1f",dCalcPciFrq)+"MHz"
            SetFocus hwFsbTrb
            swbreak
        case hwPciTrb   ; PCI Trackbar control
            setupdnpos hwPciUpd,Gettrackpos(hwPciTrb)
            settext hwNumPciStc,str(Gettrackpos(hwPciTrb)-(iPciTrbMin-iPciTrbOfs))+"/"+str(iPciTrbMax-iPciTrbMin)
            SetCulationData 1,Gettrackpos(hwFsbTrb),Gettrackpos(hwPciTrb)
            settext hwSelFrqStc,strf("%3.1f",dCalcFsbFrq)+"/"+strf("%3.1f",dCalcDdrFrq)+"/"+strf("%3.1f",dCalcAgpFrq)+"/"+strf("%3.1f",dCalcPciFrq)+"MHz"
            SetFocus hwPciTrb
            swbreak
        swend
        swbreak
    case SB_THUMBPOSITION
        switch lparam
        case hwFsbUpd   ; FSB Updown control
            settrackpos hwFsbTrb,Getupdnpos(hwFsbUpd)
            settext hwNumFsbStc,str(Getupdnpos(hwFsbUpd)-CND(fUltra,iFsbTrbMin-iFsbTrbOfsU,iFsbTrbMin-iFsbTrbOfsN))+"/"+str(iFsbTrbMax-iFsbTrbMin)
            SetCulationData 1,Getupdnpos(hwFsbUpd),Getupdnpos(hwPciUpd)
            settext hwSelFrqStc,strf("%3.1f",dCalcFsbFrq)+"/"+strf("%3.1f",dCalcDdrFrq)+"/"+strf("%3.1f",dCalcAgpFrq)+"/"+strf("%3.1f",dCalcPciFrq)+"MHz"
            SetFocus hwFsbTrb
            swbreak
        case hwPciUpd   ; PCI Updown control
            settrackpos hwPciTrb,Getupdnpos(hwPciUpd)
            settext hwNumPciStc,str(Getupdnpos(hwPciUpd)-(iPciTrbMin-iPciTrbOfs))+"/"+str(iPciTrbMax-iPciTrbMin)
            SetCulationData 1,Getupdnpos(hwFsbUpd),Getupdnpos(hwPciUpd)
            settext hwSelFrqStc,strf("%3.1f",dCalcFsbFrq)+"/"+strf("%3.1f",dCalcDdrFrq)+"/"+strf("%3.1f",dCalcAgpFrq)+"/"+strf("%3.1f",dCalcPciFrq)+"MHz"
            SetFocus hwPciTrb
            swbreak
        swend
        swbreak
    swend
    
    return

;/Vertical scroll [Updown]
; 垂直アップダウンコントロールの内容が変わったときの処理
;-------------------------------------------------------------------------------
;#define    SB_LINEUP           0   ;上矢印を押した
;#define    SB_LINEDOWN         1   ;下矢印を押した
;#define    SB_PAGEUP           2   ;上ページアップを押した
;#define    SB_PAGEDOWN         3   ;下ページアップを押した
;#define    SB_THUMBPOSITION    4   ;lParamの下位ワードにサムの位置を示す
;#define    SB_THUMTRACK        5   ;サム移動中
;#define    SB_TOP              6   ;[HOME]キーが押された
#define SB_BOTTMOM          7   ;右にスクロール
;#define    SB_ENDSCROLL        8   ;[END]キーが押された
;-------------------------------------------------------------------------------
*vscroll
    switch wparam&0x0F
    case SB_TOP
    case SB_BOTTMOM
    case SB_THUMBPOSITION
    case SB_THUMTRACK
        switch lparam
        case hwSelTmrUpd    ; Select Timer Updown control
            iSelTmr=Getupdnpos(hwSelTmrUpd)
            settext hwSelTmrStc,szTmrTxtTbl(iSelTmr)    ; "Select Timer" static control
            swbreak
        case hwColTxtUpd    ; Color Text  Updown control
        case hwColBkgUpd    ; Color Back  Updown control
            SetColorStyle 1
            swbreak
        case hwPllRefUpd
        case hwTrbFsbMaxUpdn
            SetFreqRange 1, iRngCmb
            ButtonFSB nRefresh
            swbreak
        swend
        swbreak
    swend
    return

;/Command [editbox/combobox/chkbox]
; エディットボックス/コンボボックス/チェックボックスの内容が変わったときの処理
;-------------------------------------------------------------------------------
#define EN_UPDATE       0x400   ;内容が変わった直後
#define CBN_SELCHANGE   1       ;選択項目が変更されたとき 
#define BN_CLICKED      0       ;ボタン(チェックボックス)がクリックされたとき
;#define    LBN_SELCHANGE       1   ;選択状態が変更された
#define LBN_SETFOCUS        4       ;キーボードフォーカスを受け取った
;-------------------------------------------------------------------------------
*command
    switch wparam>>16&0xFFFF
    case CBN_SELCHANGE
        switch lparam
        case hwColStyCmb        ;"Color Style"コンボボックス
            SetColorStyle 0
            swbreak
        case hwTabStyCmb        ;"Tab Control Style"コンボボックス
            tabstyset hwTabWnd,fTabSty          ;スタイル変更(gsel 0)
            objreshow hwCaptureBtn
            swbreak
        case hwClkGenCmb        ;"Clock Generator"コンボボックス
            DupPtrPLL iClkGenCmb
            #if TEST
                DupPtrCRdata iClkGenCmb

                settext hwSmbGbx," SMBus I/O Registers  --- Base Address "+StrUpper(strf("%x",iSMBadr))+"h --- "
                settext hwChpGbx," Chipset Information  --- Host Bridge Device/Vender "+StrUpper(strf("%08x",iHostBridge))+"h --- "

                lstreset hwChpInfLst
                ChipsetInfo
            #endif

            settext hwCurFrqStrStc,"Current "+StrFreq()
            settext hwSelFrqStrStc,"Select "+StrFreq()
            if szPLLmodel="PLL diagnosis" { ;PLL diagnosis
                objenable hwTrbFsbMaxUpdn,0
                objenable hwPllRefUpd,0
                settext hwRngFsbMinStc,""
                settext hwRngFsbMaxStc,""
                settext hwTrbFsbMaxStc,""
                settext hwPllRefStc,""
                settext hwPllGearStc,""
            } 
            swbreak
        case hwRngCmb
            if szPLLmodel="PLL diagnosis" { ;PLL diagnosis
                objenable hwTrbFsbMaxUpdn,0
                objenable hwPllRefUpd,0
            } else {
                SetFreqRange 0, iRngCmb
                if iRngCmb!2 : fUltra=iRngCmb&1 : setchkbox hwUltChk,fUltra
                ButtonFSB nRefresh
                if iRngCmb=2 & iPciRefMin=iPciRefMax : objenable hwPllRefUpd,0 : else : objenable hwPllRefUpd : objreshow hwPllRefUpd
                if iRngCmb=2 & iPciTrbMin=iPciTrbMax : objenable hwTrbFsbMaxUpdn,0 : else : objenable hwTrbFsbMaxUpdn : objreshow hwTrbFsbMaxUpdn
            }
            swbreak
;       case hwSmbCmb
;           swbreak
        swend
        SetFocus hwTabWnd
        swbreak
    case LBN_SETFOCUS
        repeat 0x30
            switch lparam
            case hwCrLst(cnt)       ;""リストボックス
                iCrSelLst=cnt : iSmbSelLst=-1
                settext hwOfsStc,StrUpper(strf("%02x",cnt))+"h("+strf("%02d",cnt)+")"
                settext hwHexEdt,Getlsttext(hwCrLst(cnt))
                if Getlsttext(hwCrLst(cnt))!"" : settext hwBinEdt,STRBIN(HEX(Getlsttext(hwCrLst(cnt)))) : else : settext hwBinEdt,""
                settext hwUpdateBtn,"Update"
                settext hwApplyBtn,"Apply"
                swbreak
            swend
        loop
        repeat 0x10
            switch lparam
            case hwSmbLst(cnt)      ;""リストボックス
                iSmbSelLst=cnt : iCrSelLst=-1
                settext hwOfsStc,StrUpper(strf("%02x",cnt))+"h("+strf("%02d",cnt)+")"
                settext hwHexEdt,Getlsttext(hwSmbLst(cnt))
                if Getlsttext(hwSmbLst(cnt))!"" : settext hwBinEdt,STRBIN(HEX(Getlsttext(hwSmbLst(cnt)))) : else : settext hwBinEdt,""
                settext hwUpdateBtn,"Inp"
                settext hwApplyBtn,"Out"
                swbreak
            swend
        loop
        repeat 0x30
            if iCrSelLst=-1 {
                lstcursel hwCrLst(cnt),-1
            } else {
                if hwCrLst(cnt)!hwCrLst(iCrSelLst) : lstcursel hwCrLst(cnt),-1
            }
        loop
        repeat 0x10
            if iSmbSelLst=-1 {
                lstcursel hwSmbLst(cnt),-1
            } else {
                if hwSmbLst(cnt)!hwSmbLst(iSmbSelLst) : lstcursel hwSmbLst(cnt),-1
            }
        loop
        swbreak
    case EN_UPDATE
        switch lparam
        case hwHexEdt       ;エディットボックス
            if hwHexEdt=_GetFocus() {
                szCrHex=Gettext(hwHexEdt,3)
                if szCrHex!"" : settext hwBinEdt,STRBIN(HEX(szCrHex)) : else : settext hwBinEdt,""
            }
            swbreak
        case hwBinEdt       ;エディットボックス
            if hwBinEdt=_GetFocus() {
                szCrBin=Gettext(hwBinEdt,9)
                if szCrBin!"" : settext hwHexEdt,StrUpper(strf("%02x",BIN(szCrBin))) : else : settext hwHexEdt,""
            }
            swbreak
        swend
        swbreak
    case BN_CLICKED
        switch lparam
        case hwUltChk
            fUltra=Getchkbox(hwUltChk)
            if iRngCmb!2 : iRngCmb=fUltra : cmbcursel hwRngCmb,iRngCmb
            if iCpuDiv : SetFreqRange 0, iRngCmb : ButtonFSB nRefresh
            swbreak
        swend
        swbreak
    swend
    return

;/Notify [Tab]
; タブコントロルの切替判定処理
;-------------------------------------------------------------------------------
;#define    TCN_SELCHANGE       0x400   ;内容が変わった直後
;-------------------------------------------------------------------------------
*notify
    ;NMHDR構造体
    dupptr aNmhdr,lparam,12
    if aNmhdr(2)=TCN_SELCHANGE | aNmhdr(0)=hwTabWnd {
        iTabIdx=Tabselget(hwTabWnd)
        gsel iWinID,-1
        gosub *InitWinID
    }
    return

*InitWinID
            iWinID=CND(iTabIdx=nIndexCreator,nTabCreator,nTabControl) : gsel iWinID,1
            gsel nChildDiagnosis,-1
            gsel nChildCustomize,-1
            gsel nMainScreen
            switch iTabIdx 
            case nIndexControl
                width MainScreenW,MainControlScreenH
                swbreak
            case nIndexCustomize
                width MainScreenW,MainCustomizeScreenH
                gsel nChildCustomize,1
                swbreak
            case nIndexDiagnosis
                width MainScreenW,MainDiagnosisScreenH
                gsel nChildDiagnosis,1
                swbreak
            case nIndexCreator
                width MainScreenW,MainCreatorScreenH
                swbreak
            swend
            gsel nMainScreen
    return


;eof "setfsb20.hsp"