拡張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.EXEの実行でROMデータを作成】

 このMKROMプログラムでの問いは以下のとおりです。コマンドオプションなしの場合、入力ファイルはカレントディレクトリに存在する”PCIBOOT.ROM”になります(英語版PCIBOOTE.BINを使いたい場合はコマンド引数に指定してください)。実行例の画面で示します。黄色い文字のところが、ユーザが打ち込んだ部分です。

ACPI filename to merge ==>

この問いでは各自が用意したACPIデータのファイル名を答えます。ここではサンプル用のTEST.BINを与えています。

PCI board Vendor ID ==>

各自が用意したPCIボードのベンダコードを16進数で与えてください。例えばintelでは8086です。なお一部のマザーボードでは、ベンダコードやデバイスコードがボードと一致していなくてもブートROMが起動できてしまうものがありますが、なるべく正しい値を入れるべきでしょう。

PCI board Device ID ==>

各自が用意したPCIボードのベンダコードを16進数で与えてください。例えばintelのi82550ボードでは1229だったのでそのようにしています。

ACPI table name to be replaced(4 chars) ==>

各自が用意したデータを指すポインタがXSDT,RSDTというポインタテーブルの空きに入りきるとは限りません。空きスペースがない場合は、既存のものと置き換えるしかありません。その置き換え対象のACPIテーブルの名前を4文字で入力します。Windows7で試したところでは、WDTT, OEMB, ASF!, HPET などという名前のものを置き換えてもとくに問題はみられませんでした。しかしそれで本当に問題ないかはわかりません。もし問題を避けたい場合は、この入力で何も文字を入れずにenterキーを押します(空入力)。その場合は、強制的に既存のデータを移動して、XSDTのテーブルの最後に空きを作ります。したがって置き換えではなく必ず追加となりますが、これはこれでデータを移動したことによる問題が発生する可能性はあります。なおマザーボードによっては、強制的に移動しなくてもXSDTに十分な空きスペースがあります。

■ 【ROMプログラムの作成】

 さてこれで 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

■ 【ROMプログラムの実行結果】

 まずマザーボードの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を実行してみてください。

■ 【プログラムの出すメッセージの意味】

重要メッセージの意味のみ記載しておきます。

" このプログラムを中止しますか?[y/n]"

事前にSCROLL LOCKのシフト状態になっているとき表示され、キー入力となります。 Yで答えると、中止します。何の処理もされずにシステム起動は続行します。 Nで答えると、表示保持時間が長くなります。画面下方にバーが伸びてゆく のが見えるはずです。これが右端まで行く時間だけ表示を保持します。

"ACPI mod に失敗しました. 中止します."

最後に出るメッセージです。全く処理できなかったか XSDTの処理が全くできなかった場合に失敗に終わります。 またこのときはブザーが鳴動します(ブザースピーカが接続されている場合)。

"テーブルには追加できる空きがありません."

XSDTまたはRSDTのテーブルに追加のための空きがなかったことを示します。 このメッセージが出る場合は、 (1)置き換え先のACPIテーブル名が指定されているならそれと置き換え (2)置き換え先のACPIテーブル名が無指定なら強制的に空けることを試みる (3)どちらも失敗の場合は失敗であるとする のいずれかの処理に進みます。

"FACPテーブルを移動して,XSDTの余白を拡大しました."

上記で(2)の処理をする際に出るメッセージです。通常、XSDTの次に 32bit用のFACPというデータが存在するので、これを4バイト先にずらします。 しかしACPIのデータは基本的に8バイト境界に存在しなければならないので、 4バイトずらすことにより、32bit版OSでFACPが読めなくなる問題が 発生する可能性があります。

"XXXX へのポインタをリストに追加しました."

無事に成功して、ROMに入れたXXXXというACPIデータが追加されています。

"XXXX を指すポインタは YYYY と置き換わりました."

マザーボードのBIOS内にある XXXXの代わりに、拡張ROMに入れた YYYYというACPIデータと置き換えます。したがってXXXXが無くなった ことでOSの起動に問題が発生する可能性はあります。

"置き換対象ACPIテーブル XXXX はBIOSに存在していません."

上記のことを試みたが XXXXは存在しなかったことを示す。この場合、 追加も置き換えもできなかったわけですから、処理は失敗に終わります。

"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月末に延長
←元に戻る