Skip to content

Instantly share code, notes, and snippets.

@ao-kenji
Last active July 18, 2021 14:20
Show Gist options
  • Save ao-kenji/7843096 to your computer and use it in GitHub Desktop.
Save ao-kenji/7843096 to your computer and use it in GitHub Desktop.
How to use PC-98 extension bus (C-bus) on OMRON LUNA-88K / OMRON LUNA-88KのPC-98拡張バス(Cバス)についてのメモ

LUNA-88K2のPC-98拡張バス(Cバス)についてのメモ

-- How to use PC-98 extension bus (C-bus) on OMRON LUNA-88K2 --

0.概要

LUNA-88K2にはNEC PC-9801用の拡張ボードを装着することができるPC-98拡張バス(Cバス)が搭載されています。その(OSからの)使い方を説明します。

※重要※

この内容は、私(青山)がマニュアルやヘッダファイル、実機での動きなどから独自に調べたものです。この件について、オムロンさんへ問い合わせなどを行うことはしないでください。また、内容についてもABSOLUTELY NO WARRANTYです。

1.LUNA本体から見た物理アドレスマップ

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ビットアドレス

2.割り込みの処理

物理アドレス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

3.実装例

この情報を元にし、いくつかのC-busボードのドライバをOpenBSD/luna88kで実装しています。

man page

ソースファイル

4.作者

Kenji Aoyama / 青山 健治

ABSOLUTELY NO WARRANTY

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment