#0084/9999 Q&A集
★タイトル (88VAUSER) 95/11/01 00:00 ( 61)
9.9 プログラムで98とVAを判別するには?
★内容
ここでは2つの方法を紹介します。
3.フォーラム − 9.質問・レポート − #7761(93/4/5) から引用
============================================================================
A>98とVAの判別方法・・・ アマルテア
ROMの内容を見て確認してみます。
リセット直後のROMへのジャンプアドレスはVAと98とでは違うので、そ
れで確認しています。
============================================================================
ということで、具体的には次の様にします。
----------------------------------------------------------------------------
FFFF:0003 から1ワード読む
↓
その値が 0F000h か???
↓Yes ↓No
VAです 98です
----------------------------------------------------------------------------
8086系のCPUはリセットがかかるとFFFF:0000からプログラムを実
行するので、普通ここにはJMP命令がかかれています。上の方法では、このJMP
命令のジャンプ先がVAと98では異なることを利用しています。
もう1つ、マイクロキャビンが「幻影都市」「Xak?」といった98/VA両用
のゲームの起動ディスクのIPLで使用している方法を紹介します。
----------------------------------------------------------------------------
FFFF:000F から1バイト読む
↓
その値が 0FFh か????
|Yes ↓No
| 98です
↓
I/Oポート 00h から1バイト読む
↓
その値が 0 か? ????
↓Yes ↓No
98です VAです
----------------------------------------------------------------------------
I/Oポート00hは、98では割り込みコントローラ(μPD8259)のマス
タのポート0が割り当てられています。(VAではI/Oポート188hに相当しま
す。) このポートに対する読出はIRR/ISRの読み込みなので、割り込みを許
可し、割り込みルーチン以外から読めば0が読みだされるはずです。
VAではI/Oポート00hは、テンキーのキーマトリクスに割り当てられていま
す。上の方法では、テンキーの0から7まですべてが押されていると98であると判
断されてしまいます。(そういうことは普通は起こらないでしょうが。)
<<< end of article >>>