2019-11-28 23:17 — asano
大昔の懐かしいメモを見つけました。
「INT 9H
」ということはPC-9801シリーズのキーボード割り込みですね。
FD80:0E44
はエントリアドレスかな。エンディアン間違えて訂正していますが、MC68000系から8086系に移った直後だったと思うので一瞬勘違いしたのでしょう。
この頃はフロッピーを2ドライブ積んでいるのが一般的だった時代、ノートPCには1台しかないのでBIOSからフロッピーに見えるドライブがありました。それのアクセス方法ではないかと思います。
個人的にPC-9801シリーズ(EPSONの互換機でしたが)を初めて買ったのは大学生のときでした。最初はPC-286note Fで、次がPC-386note Aです。
PC-286のときも買って早々に、PC-386のときは買って帰ったその日だったと思いますが、やったのはROMの解析でした。
当時NECのPC-9801Nシリーズの情報はThe BASIC誌などに発表されていましたが、EPSON関係の情報はあまりありませんでした。もちろんPC-9801シリーズ一般の情報は互換機なので調べるまでもありませんが、液晶のモード切替・RAMドライブの直接アクセスの方法など通常のアプリケーションから必要ない部分はEPSON独自だったので調べる価値はありました。
とはいってもFFFF:0000
のリセット処理から読んでいったのではいつ目的の箇所に到達するのかわかりません。
それで目を付けたのがキーボード割り込みのINT 9H
です。特定のキーの組み合わせで液晶モードを切り替えられるのですが、NEC純正のMS-DOS(SIPによるパッチは必要でしたが)でもこの機能は働きます。ということはキーボード割り込み処理の中で行なっている可能性が高いと予想したわけです。
割り込みの処理ルーチンはそう長くは無いので逆アセンブルして読むのは比較的楽でした。液晶の2階調/8階調の切り替え・反転の処理が見つかり、PC-9801シリーズでは使われていないはずのI/Oへのアクセスが発見されます。
これで見つかったI/Oアドレスは探しているものの一部ですが、おそらく他も近くのアドレスにあるはずです。見つかったアドレスは16ビットアドレスだったのですが、幸い8086系でI/Oアドレスを16ビットで指定するためにはDX
レジスタ経由で行なうしかありません。そこでDX
レジスタに付近のアドレスを代入する命令をROM全体からサーチしました。
あとはその前後を逆アセンブルするだけです。上記のRAMドライブのアクセス法や増設メモリのバンク切り替えなどが芋づる式に発見されたと記憶しています。
今回見つかったメモはこの時のモノでしょう。
こんな断片ではなくI/Oポートの一覧のようなものも作った覚えがあるので発見できたらまた取り上げるつもりです。
またこの情報を元に書いた変り種のデバイスドライバもどこかのフロッピーに残っているかもしれません。
Add new comment