既に解決策が提示されているようですが、ちょっと気になったので1点だけ。 > > [Linuxのユーザモードから直接int15hを]なぜ呼べないのか, > > どうしたら呼べるのかについて情報がありましたら教えてください. > > 何故直接呼べないかというと、DOS が real mode で動いている > のに対し、Linux は protected mode で動いているからです。そし > て BIOS は一般に real mode を想定して書かれています。 : > 擬似的に real mode を用意してあげてから呼ぶ必要があります。 > この擬似的な環境を virtual 86 mode と言い、この用途のため > に wrapper として用意されている枠組みの例としては DPMI があ > ります。 > この DPMI と同じようなものを自分で作成してやることで、初め > て Linux から BIOS call が可能となります。 初期のBIOSコール(INT13 DiskBIOS等)はreal modeを前提にしたインタフェイス ですが、apmは比較的新しいBIOSコールなのでreal modeオンリーではありません。 APMBIOSにはリアルモードで動く側(AX=5301H INT15)と、プロテクトモードで 動く側(16Bit:AX=5302H INT15,32Bit:AX=5303H INT15)からのインタフェイスがあり、 Linuxは普通、APMBIOSのプロテクトモード側インタフェイスをアクセスします。 # 確か、BIOSコールでインタフェイスをチェーン状に登録する…といった方式で # 管理していたような…。(私も、詳しいことは忘れてしまったんですが…) そういや、APMが出たばかりのBuggyなBIOSだとプロテクトモード側の インタフェイスがタコで動かないため、Linuxにはそれに対応する カーネルコンフィギュレーションとして、 「General setup -> Use real mode APM BIOS call to power off」 なんていうメニューがありますね。こちらはDPMI的なことをしているかも。 P.S この他ACPIや、PCIBIOSとかもプロテクトモードに対応しています。 詳しくはPhoenixのサイトでダウンロードできる規格文書(英文PDF版)だとか、 AMDの486互換統合チップELAN SC400のマニュアル(日本語PDF版) なんかが参考になると思います。 確かACPIの資料ははIntelからダウンロードしたかな。 ちょっと古い資料でよければ、PC/AT互換機、もしくはMSDOSマシンの、 割り込みとそれを利用した各種OSのAPI、I/Oポート、一部チップセットの 内部レジスタやRTC等周辺機器の情報までまとめあげた英文の凄い資料が simtelnetにありました。 # Ralf BrownさんのInterrupt Listとか言ってたような気がする…。 # 多分今ならWebからでも参照できるんじゃないかな。 本格的にPC/ATをHackするなら是非、手元に置いておくといい資料ですよ。 あと…、MITのサイトにもPC/ATの各種BIOSを利用したプログラミング手法を 解説した文書のアーカイブがあったと思います。 ┏━┳┳┳┓┏━┳━┓┏━┳━┳━┓(以前にBochsのBIOSをいじってました) ┃┏┫┃┃┗┫ ┫┃┃┣┛┃┃┃━┫------------------------------------ ┃┗╋┓┃┃┃ ┫ ┓┃┏┫┃┣ ┃ cyber205 _at_ d3.dion.ne.jp ┗━┻━┻━┻━┻┻┛┗━┻━┻━┛------------------------------------
Follow-Ups: References:
- [linux-users:86917] Re: Linux でint 15hd60a0410
- [linux-users:86922] Re: Linux でint 15hTakashi SHIRAI
- Prev by Subject: [linux-users:87035] Re: Kondara 2.0 のAnaconda 不使用でのインストール
- Next by Subject: [linux-users:87037] Re: シェルスクリプトによる、世代管理しているLOGのエラー監視方法について。
- Previous by thread: [linux-users:86970] Re: Linux でint 15h
- Next by thread: [linux-users:87058] Re: Linux でint 15h
- Indexes:[Main][Thread]