借り初めのひみつきち

仮ブログです。

はりぼてOSをUEFIで起動する/4日目

どうしても起動時にフリーズしてしまう機種があったのですが、答えはシンプルでした。

さいきんのPCではPS/2コントローラーがない機種も珍しくありませんが、一般的にコンピュータのバスはデバイスが何も繋がっていないアドレスから読み出すと 0xFF (全てのビットが1) を返します。
そのため、PS/2コントローラーが存在しない機種でPS/2ポートから読み出したときに常に0xFFを返す機種があります。

一方、PS/2コントローラーにアクセスするときはPS/2コントローラーの準備ができたかどうか調べるためにステータスレジスタのビットの値が0になるまで待つことがあります。
そして、I/OポートはPS/2コントローラーが存在しないので0xFF、つまりすべてのビットが1であると返します。
その結果、永遠に0になることがないビットを待ち続ける事になってフリーズします。

そこで、はりぼてOS側のPS/2ポートの応答待ちをしてるプログラムを何もない処理に置き換えて試したところ、無事に画面が表示されるところまで動きました。
HSF ファイルでアプリを起動することもできましたが、当然操作はできません。

なお、PS/2コントローラーが存在しないときに常にステータス0x00を返す機種もあり、この場合は一見何事もなかったように起動しますが、結局PS/2ポートからデータが送られてくることはないので操作はできません。

ローダーの処理の問題ではなくはりぼてOS側の問題ということがわかりましたが、この問題を根本的に解決するにははりぼてOS側がUSBに対応するしかありません。

結局、UEFIではりぼてOSを起動するところまではできても、完全無修正でどんな機種でも動くような都合のいい話はありませんでした。。


そんなわけで制限はありつつも1プロジェクトとしてmegos関連から分離した方が今後都合がよさそうなので分離しました。

github.com

主な変更点は名称変更とともにロードするパスが変わっています。

バイナリもちゃんとした場所に置きたいところですが、どこかいいサービスないですかね・・・