FrontPage
New
Index
SignIn
Edit
HW/A20/A20TEST
no archive mode
// <<{a20test_20060321.zip} !!! つかいかた * まっさらな(何もドライバをインストールしていない)DOS 上で A20.EXE を実行。 拡張メモリにアクセスするドライバ(HIMEM.SYS、日本語フォントドライバなど)が入っている環境では正しい結果が得られません(ハングアップする可能性があります)。 * まっさらな DOS 環境が手元にない場合は、同梱のディスクイメージ a20tstfd.img を適当なツールで 1.44M ディスケットに書き込んで、そのディスケットを使って FreeDOS をブートしてください。 * というか、FreeDOS と MS(PC)DOS とでは結果が異なる場合がある(FMV-4100NL/T の説明を参照)ので、FreeDOS のほうをお使いいただくことをおすすめいたします。 !!! 実行結果 !! VMWare Player いちおう guestOS = "dos" で。 <pre> int 15h,ax=2402h is supported. int 15h,ax=2403h is supported. (bx=0003) initial value int15-2402:0000(0) KBDout:00(0), port92:00(0) A20:disabled A20(Keyboard) on int15-2402:0001(1) KBDout:02(1), port92:00(0) A20:enabled A20(Keyboard) off int15-2402:0000(0) KBDout:00(0), port92:00(0) A20:disabled A20(port92h) on int15-2402:0001(1) KBDout:00(0), port92:02(1) A20:enabled A20(port92h) off int15-2402:0000(0) KBDout:00(0), port92:00(0) A20:disabled A20(Keyboard) off -> A20(port92h) on int15-2402:0001(1) KBDout:00(0), port92:02(1) A20:enabled A20(Keyboard) on -> A20(port92h) off int15-2402:0001(1) KBDout:02(1), port92:00(0) A20:enabled A20(Keyboard) on -> A20(port92h) on int15-2402:0001(1) KBDout:02(1), port92:02(1) A20:enabled A20(Keyboard) off -> A20(port92h) off int15-2402:0000(0) KBDout:00(0), port92:00(0) A20:disabled int 15h,ax=2401h (A20 on)...success int15-2402:0001(1) KBDout:02(1), port92:00(0) A20:enabled int 15h,ax=2400h (A20 off)...success int15-2402:0000(0) KBDout:00(0), port92:00(0) A20:disabled </pre> * GATE_A20 はキーボードコントローラ出力ポートの bit1 とポート 92h の bit1 の OR。どちらかが 1 なら A20 はイネーブル。 * int 15h, ax=2400h〜2403h がすべてサポートされている。 * int 15h, ax=2400h〜2401h はキーボードコントローラ側を制御する。 * int 15h, ax=2402h はキーボードコントローラとポート 92h 双方の状態をチェックし、妥当な値を返している。 int 15h, ax=2403h を呼び出す前に bx = 0 を設定しておいたほうがいいかもしれない。VMware は bl しか変更しないようだ。(あらかじめ bx に ffffh を突っ込んでから呼び出したら bx = ff03h になっていた) !! Fujitsu FMV-4100NL/T model5Z (FMV41NLTZ5) かなり古めの富士通のノートPC。CPU は AMD486DX-100。 <pre> int 15h,ax=2402h is not supported. int 15h,ax=2403h is not supported. initial value int15-2402:8602(?) KBDout:cd(0), port92:d2(1) A20:enabled A20(Keyboard) on int15-2402:8602(?) KBDout:cf(1), port92:d2(1) A20:enabled A20(Keyboard) off int15-2402:8602(?) KBDout:cd(0), port92:d2(1) A20:enabled A20(port92h) on int15-2402:8602(?) KBDout:cd(0), port92:d2(1) A20:enabled A20(port92h) off int15-2402:8602(?) KBDout:cd(0), port92:d0(0) A20:disabled A20(Keyboard) off -> A20(port92h) on int15-2402:8602(?) KBDout:cd(0), port92:d2(1) A20:enabled A20(Keyboard) on -> A20(port92h) off int15-2402:8602(?) KBDout:cf(1), port92:d0(0) A20:enabled A20(Keyboard) on -> A20(port92h) on int15-2402:8602(?) KBDout:cf(1), port92:d2(1) A20:enabled A20(Keyboard) off -> A20(port92h) off int15-2402:8602(?) KBDout:cd(0), port92:d0(0) A20:disabled int 15h,ax=2401h (A20 on)...failure (86h...not supported) int15-2402:8602(?) KBDout:cd(0), port92:d0(0) A20:disabled int 15h,ax=2400h (A20 off)...failure (86h...not supported) int15-2402:8602(?) KBDout:cd(0), port92:d0(0) A20:disabled </pre> * GATE_A20 はキーボードコントローラ出力ポートの bit1 とポート 92h の bit1 の OR。どちらかが 1 なら A20 はイネーブル。 * ポート 92h の bit1 が初期状態でセットされており、A20 がマスクされていない。これは PS/2 と非互換の挙動。((br))ちなみに、FreeDOS ではなく MS-DOS 6.2 上で実行した場合、ポート 92h の bit1 は最初からクリアされていた。どうやら MS-DOS は起動時にポート 92h の bit1 を明示的にクリアするようだ。 * int 15h, ax=2400h〜2403h はサポートされていない。 !! GIGABYTE GA-7ZX SocketA マザボ。((br)) VIA KT133 (VT8363,VT82C686A), AMIBIOS。 <pre> int 15h,ax=2402h is not supported. int 15h,ax=2403h is supported. (bx=0001) initial value int15-2402:8602(?) KBDout:0b(1), port92:02(1) A20:enabled A20(Keyboard) on int15-2402:8602(?) KBDout:0b(1), port92:02(1) A20:enabled A20(Keyboard) off int15-2402:8602(?) KBDout:09(0), port92:00(0) A20:disabled A20(port92h) on int15-2402:8602(?) KBDout:09(0), port92:02(1) A20:enabled A20(port92h) off int15-2402:8602(?) KBDout:09(0), port92:00(0) A20:disabled A20(Keyboard) off -> A20(port92h) on int15-2402:8602(?) KBDout:09(0), port92:02(1) A20:enabled A20(Keyboard) on -> A20(port92h) off int15-2402:8602(?) KBDout:0b(1), port92:02(1) A20:enabled A20(Keyboard) on -> A20(port92h) on int15-2402:8602(?) KBDout:0b(1), port92:02(1) A20:enabled A20(Keyboard) off -> A20(port92h) off int15-2402:8602(?) KBDout:09(0), port92:00(0) A20:disabled int 15h,ax=2401h (A20 on)...failure (86h...not supported) int15-2402:8602(?) KBDout:09(0), port92:00(0) A20:disabled int 15h,ax=2400h (A20 off)...failure (86h...not supported) int15-2402:8602(?) KBDout:09(0), port92:00(0) A20:disabled </pre> * キーボードコントローラ出力ポートの bit1 が初期状態でセットされており、A20 がマスクされていない。(キーボードコントローラの仕様としては PC/AT や PS/2 と同じだが、ふつう BIOS が起動時にリセットすると思う…) * ポート 92h を読み出したとき、bit 1 の値は、キーボードコントローラ出力ポートの bit1 と、ポート 92h に以前書き込んだときの bit1 の OR になる。 * ポート 92h の bit1 の初期値はどうやら 0 らしい(しかし、キーボードコントローラ側がセットされているため、ポート 92h を読み出したときの bit1 は 1 になる)。 * int 15h,ax=2400h〜2402h はサポートされていない。((br))int 15h,ax=2403h は BX=1(キーボードコントローラのみ)を返す。 * GATE_A20 はキーボードコントローラ出力ポートの bit1 とポート 92h の bit1 の OR。どちらかが 1 なら A20 はイネーブル。 えーと、つまり、キーボードコントローラ出力ポートの bit1 とポート 92h の bit1 は内部的にはちゃんと個別に保持されていますが、ポート 92h の bit1 の内容だけを CPU 側が個別に取得することはできない…ということみたいです。 その場合はキーボードコントローラ出力ポートの bit1 を 0 にしておく必要がある。 ((br)) (逆に言うと、GATE_A20 の状態を知りたいときはポート 92h だけリードすればわかる。他の環境のようにキーボードコントローラ側と手動で OR する必要がない) !! Albatron PX845PEV-800 Socket478 マザボ。((br)) Intel 82845PE (845PE), 82801DB (ICH4), Phoenix-Award BIOS。 <pre> int 15h,ax=2402h is not supported. int 15h,ax=2403h is supported. (bx=0003) initial value int15-2402:8602(?) KBDout:49(0), port92:02(1) A20:enabled A20(Keyboard) on int15-2402:8602(?) KBDout:4b(1), port92:02(1) A20:enabled A20(Keyboard) off int15-2402:8602(?) KBDout:49(0), port92:02(1) A20:enabled A20(port92h) on int15-2402:8602(?) KBDout:49(0), port92:02(1) A20:enabled A20(port92h) off int15-2402:8602(?) KBDout:49(0), port92:00(0) A20:disabled A20(Keyboard) off -> A20(port92h) on int15-2402:8602(?) KBDout:49(0), port92:02(1) A20:enabled A20(Keyboard) on -> A20(port92h) off int15-2402:8602(?) KBDout:4b(1), port92:00(0) A20:enabled A20(Keyboard) on -> A20(port92h) on int15-2402:8602(?) KBDout:4b(1), port92:02(1) A20:enabled A20(Keyboard) off -> A20(port92h) off int15-2402:8602(?) KBDout:49(0), port92:00(0) A20:disabled int 15h,ax=2401h (A20 on)...failure (86h...not supported) int15-2402:8602(?) KBDout:49(0), port92:00(0) A20:disabled int 15h,ax=2400h (A20 off)...failure (86h...not supported) int15-2402:8602(?) KBDout:49(0), port92:00(0) A20:disabled </pre> * GATE_A20 はキーボードコントローラ出力ポートの bit1 とポート 92h の bit1 の OR。どちらかが 1 なら A20 はイネーブル。((br))→参考:[ICH4 のデータシート|http://www.intel.com/design/chipsets/845pe/documentation845pe.htm] * ポート 92h の bit1 が初期状態でセットされており、A20 がマスクされていない。これは PS/2 と非互換の挙動(FMV-4100NL/T の項も参照)。 * int 15h,ax=2400h〜2402h はサポートされていない。((br))int 15h,ax=2403h は BX=3(キーボードコントローラとポート 92h)を返す。
Attachment
New:
(
download
: 130938 bytes, at 2006/03/21 03:54:52 )