拡張ROMに入れたプログラムでBIOSのACPIテーブルを追加・変更する
ACPI mod 使用説明書 0.9821
Copyright(C) 2012-2016 DOSsoft
ブート機能を備えた拡張PCI/PCIeボードの(遊んでいる/不要な)ROMに置いたプログラムにより、ブートプロセスに介入します。それによりシステム起動前にACPIテーブルの追加または入替えがなされます。なおRSDT/XSDTのOEMID, OEM table IDも、用意したデータの物と置き換わります。 ACPIテーブルというものがどういうものであるかについては解説しません。ネットで検索するなどしてください。
ACPIテーブルの追加や差し替えで何ができるか、どんなメリットがあるかも、ここでは詳しく説明はしません。既によく知っている方を対象としています。一例としては以下のようなものがあるでしょう。
こんなときに、本ソフトウェアを使って、事前に抜き出していたACPIのデータの一部を、システム起動時に動的にACPIテーブルに追加することで、もとのメーカ製PCのBIOSのときと同様に使用できるようになります。もし不都合が発生した場合でも、ROMボードを取り外すか、後述のようにキーボード操作で実行回避するだけで元に戻せます。
すなわち用意する必要があるのは以下のようなものです。
自分のPCのことをより詳しく知るための実験用、あるいはメーカー製PC自力保守用プログラムです。ご利用は自己責任でお願いします。
対応するマザーボードは第2世代Core i の頃以降のもの(だいたいuEFI搭載のもの)です。本ツールで作ったROMがブートができないマザーボードは古い物に限られると思います。
ZIPアーカイブを解凍すると以下のようなファイルが得られます。
MKROM.EXE | ROMデータ生成プログラム |
PCIBOOT.ROM | ソースデータ | PCIBOOTE.ROM | ソースデータ(英語のみ表示、サイズが小さい) |
TEST.BIN | テスト用ACPIデータ(名前文字列はTEST) |
まずMS-DOS上(WindowsのDOSプロンプトでもよい)で 、カレントディレクトリにPCIBOOT.BINと、ACPIのバイナリファイルを置いた状態で、MKROMを実行します。あとは質問に答えるだけで、ACPIMOD.ROMというファイルが出力されます。このACPIMOD.ROMを何らかの手段で 拡張ROMに書き込んで(焼き込んで)ください。
ACPIのバイナリファイルを取り出す方法は各自でお調べください。このサイトには、ACPIVIEWというDOSプログラムがあり、-sオプションを付けることでファイルに取り出せます。
このMKROMプログラムでの問いは以下のとおりです。コマンドオプションなしの場合、入力ファイルはカレントディレクトリに存在する”PCIBOOT.ROM”になります(英語版PCIBOOTE.BINを使いたい場合はコマンド引数に指定してください)。実行例の画面で示します。黄色い文字のところが、ユーザが打ち込んだ部分です。
さてこれで ACPIMOD.ROM というファイルがカレントディレクトリに作成されます。このデータを、ブートROMのあるPCI/PCIexpressボードに書き込みます。例えばintelのNICではintelにROM書き込みユーティリティがあるのでそれを使います。SATAやPATA、SCSIボードでしたらそのボード/チップのベンダが用意した書き込みプログラムがあるはずです。ただしデータが想定外ですから書き込みする前にチェックではねられてしまうかもしれません。本サイトには、次のいくつかのボードへの書き込み用のDOSプログラムもあるので、対応ボードをお持ちであれば使えるでしょう。 <
Acard社チップ使用の SATA/PATA/SCSIストレージボード全般 | Silicon Imaged社チップ使用のSATA/PATAストレージボード全般 | jMicron社のJMB363チップ搭載SATA/PATAボード | intel社の古いnetwork チップ i82557,82558,82559,82550 |
まずマザーボードのBIOS設定のブート順位に関するところ確認する必要があります(そのための手順やメニュー画面の構成はマザーボードによって異なります)。ブートしたいディスクドライブ(HDDやSSDのデバイス名)は表示されるかと思いますが、本プログラムのROMが組み込まれたボードが拡張スロットに装着されている場合は、"ACPI MOD ROM" という名前のデバイスもブート優先順位のメニューに存在するようになります。マザーボードによっては "ACPI MOD ROM" という名前のデバイス(すなわちこのブートROM)を最優先の起動デバイスに設定しないと、ROMルーチンが実行されないことがあります。
問題なく実行されているときは待ち時間を取りませんので、メッセージの表示が出ても一瞬で終わってしまいます。本プログラムが起動する直前、BIOSロゴ画面が出る頃にSCROLL LOCKキーを押しておくと、表示時間を長くとるようになります。SCROLL LOCKを押しておくタイミングは、起動時に鳴るBEEPの直後が最適です(BEEP用スピーカが接続されている場合)。
初めて本プログラムを起動させるときはSCROLL LOCKシフト状態にして、状況を確認しておいたほうがよいでしょう。なお、最近のマザーボードでは、BIOS画面出現前後の段階でキーを押すタイミングがシビアになっているものがあります。とくにUSBキーボードや変換器を通している場合にはうまくキーボードが反応しないことがあります。
重要なメッセージは日本語で表示されます。BIOSレベルのプログラムで日本語表示を行うのはかなり面倒ですが、対応しました。どうでもよい情報は英語表示です。
画面の下半分に、RSDTというテーブルとXSDTというテーブルのリストが表示されます。このROMプログラムに組み込んだACPIデータの名前が、赤字で表示されます。追加または既存のどれかと置き換わっている(最初はハイライト表示でそれが変化する)ことを確認してください。次の図は、システム起動中における本プログラムの実行画面の例です。 このときはSLIC という名前の374バイトのデータを用意し、既存のHPETというデータと置き換えるという設定でMKROMを走らせ、プログラムデータACPIMOD.ROMを作成しています。
RSDTについてはテーブルの最後の続きに空きがあったので、SLICというデータへのポインタを追加しています。いぽうXSDTにいてはテーブルに空きがありませんでしたので、既存のHPETをつぶしてそこにSLICへのポインタが置かれました。SLICのデータは拡張ROMにあるので、その32bitアドレスが000CE000h(16:16bit表記ではCE00:0000)となっていることがわかります。XSDTとRSDTのOEMID, OEM revision IDは、拡張ROMで加えたSLICと同じとなるように変更が加えられます。
既存のACPIテーブルをつぶしたくない場合は、MKROMでの設定でその名前を空入力とすることができます。このときは、XSDTの次に存在しているFACPというデータを4バイト先に移動させて、XSDTの空きを8バイト作り出します。その空き部分に、ROMデータで用意したACPIのデータを追加します。次の図はその例です。
まったく対応していないマザーボードで実行させた場合、ROMに入れたプログラムが実行されません。したがってエラーメッセージなども表示されません。いっぽう既に述べたように、正常に処理がされている場合も通常は表示がされません(されていますが一瞬なのでおそらく見られません)。正常に動作したのか全く対応していなかったかは、まず最初に確かめるようにしてください。何度試しても、SCROLL LOCKキーを押したのに実行画面表示保持がされないならば、まったく対応していないマザーボードであると考えられます。なおDOSを起動して本プログラムの適用結果を確認する場合は、本サイトにあるACPIVIEWを実行してみてください。
重要メッセージの意味のみ記載しておきます。
事前にSCROLL LOCKのシフト状態になっているとき表示され、キー入力となります。 Yで答えると、中止します。何の処理もされずにシステム起動は続行します。 Nで答えると、表示保持時間が長くなります。画面下方にバーが伸びてゆく のが見えるはずです。これが右端まで行く時間だけ表示を保持します。
最後に出るメッセージです。全く処理できなかったか XSDTの処理が全くできなかった場合に失敗に終わります。 またこのときはブザーが鳴動します(ブザースピーカが接続されている場合)。
XSDTまたはRSDTのテーブルに追加のための空きがなかったことを示します。 このメッセージが出る場合は、 (1)置き換え先のACPIテーブル名が指定されているならそれと置き換え (2)置き換え先のACPIテーブル名が無指定なら強制的に空けることを試みる (3)どちらも失敗の場合は失敗であるとする のいずれかの処理に進みます。
上記で(2)の処理をする際に出るメッセージです。通常、XSDTの次に 32bit用のFACPというデータが存在するので、これを4バイト先にずらします。 しかしACPIのデータは基本的に8バイト境界に存在しなければならないので、 4バイトずらすことにより、32bit版OSでFACPが読めなくなる問題が 発生する可能性があります。
無事に成功して、ROMに入れたXXXXというACPIデータが追加されています。
マザーボードのBIOS内にある XXXXの代わりに、拡張ROMに入れた YYYYというACPIデータと置き換えます。したがってXXXXが無くなった ことでOSの起動に問題が発生する可能性はあります。
上記のことを試みたが XXXXは存在しなかったことを示す。この場合、 追加も置き換えもできなかったわけですから、処理は失敗に終わります。
拡張ROMに入れた、XXXXという名前のACPIデータは、マザーボードの BIOS内に同じ名前のデータあった場合は、必ずそれと置き換わります。 他のACPIデータを削除していないので副作用は起きないと考えられます。
このプログラムおよびデータには、改良などのため 2020年3月31日までの使用期限を設けます。期限後には使用しないでください。ただしROMに書き込んだプログラムについては使用期限なく動作します。使用期限があるのは配布されたファイルのみです。
ACPIテーブルを書き換えるという非常に高度なことを行うプログラムです。どのような不具合不都合が起こるかはわかっていません。そのような不具合・不都合・派生する損害について、作者はいっさい責任を負いません。そのことを了承のうえ、自己責任にて使う場合に限り、本プログラムの使用を認めるものとします。
さまざまなデータには著作権が存在する場合があります。著作権を侵害しない範囲でお使いください。
年月日 版数 内容 2012-04-01 0.9800 初版公開(使用期限 2012-7-31まで). 2012-04-20 0.9801 対応しないBIOSのマザーボードで実行してもハングアップしないよう修正 2012-06-23 0.9821 日本語版が一部の機種でROM出現しない問題を修正(使用期限 2012-12-31まで) 2013- 1- 1 使用期限を2013年末に延長 2014- 1- 1 使用期限を2014年末に延長 2015- 1- 1 使用期限を2015年末に延長 2016- 4- 1 使用期限を2017年3月末に延長 2017- 4- 1 使用期限を2020年3月末に延長←元に戻る