-- How to use PC-98 extension bus (C-bus) on OMRON LUNA-88K2 --
LUNA-88K2にはNEC PC-9801用の拡張ボードを装着することができるPC-98拡張バス(Cバス)が搭載されています。その(OSからの)使い方を説明します。
※重要※
この内容は、私(青山)がマニュアルやヘッダファイル、実機での動きなどから独自に調べたものです。この件について、オムロンさんへ問い合わせなどを行うことはしないでください。また、内容についてもABSOLUTELY NO WARRANTYです。
LUNA-88Kに装着されたPC-9801用拡張ボードのメモリ領域・I/Oポート領域は、以下の物理アドレスにマッピングされる。
0x90000000 - 0x90ffffff 拡張ボードのメモリ領域(最大16M bytes)
0x91000000 - 0x9100ffff 拡張ボードのI/Oポート領域(64k bytes)
拡張ボード用サブ基板の上(2つのボード用スロットの間)にジャンパピンがあり、アドレスデコードするビット数を設定できる。 JT1が上側のスロット、JT2が下側のスロットに対応しており、以下のように設定する。
ジャンパ設定
1-2をショート = 24ビットアドレス
2-3をショート = 20ビットアドレス
物理アドレス0x91100000の1バイトが、PC-98拡張バスの割り込み状態を示している。 (以降、CISR : C-bus Interrupt Status Register(仮称)とする)
拡張ボードで割り込みが発生すると、LUNA-88K本体ではlevel 4割り込みとして認識される。 そのときに割り込みを発生させた拡張ボードに設定されているINT値により、CISRの以下のbitが0になる。 (NMIについては推測)
bit 7(MSB) = NMI(?)
bit 6 = INT 0
bit 5 = INT 1
bit 4 = INT 2
bit 3 = INT 3
bit 2 = INT 4
bit 1 = INT 5
bit 0(LSB) = INT 6
割り込み処理が終わったら、以下の値をCISRに書き込むことで、上記の割り込みフラグがクリアされる(推測)。
NMI → 書き込み値 7(?)
INT 0 → 書き込み値 6
INT 1 → 書き込み値 5
INT 2 → 書き込み値 4
INT 3 → 書き込み値 3
INT 4 → 書き込み値 2
INT 5 → 書き込み値 1
INT 6 → 書き込み値 0
この情報を元にし、いくつかのC-busボードのドライバをOpenBSD/luna88kで実装しています。
man page
ソースファイル
Kenji Aoyama / 青山 健治
ABSOLUTELY NO WARRANTY