レトロPCを Raspberry Pi Pico2 でパワーアップする その2
Pico2 でレトロPCをパワーアップする作戦第2弾
今回のターゲット
今回のターゲットは NEC の PC-6001mkII SR です。 パピコンこと PC-6001 シリーズの最終機種となります。
拡張方法として以下の物が想定されます。
- FDD コネクタを使った拡張
FDD コネクタには、PPI(i8255)を使って制御する、いわゆるインテリジェントタイプのフロッピードライブが接続できます。 ここにフロッピードライブをエミュレートするようなものを接続すると外部記憶装置として利用できます。
- カートリッジスロットを使った拡張
PC-6001 シリーズで互換のあるカートリッジスロットを用いた拡張方法です。 ここには Z80 の信号がほぼそのまま出ているので、Z80 バスに接続可能なように作ればハードウェア拡張が可能です。 ただし、PC-6001 ではモード2割り込みを使用していて、割り込みベクターはサブ CPU から発行するようになっています。 カートリッジスロットとその他の割り込みソースは区別されるので、カートリッジスロットを使っていない拡張(RS-232C など)は実装できません。
このカートリッジスロットの信号はのちに発表された MSX のスロットとほぼ同じになっています。
今回はこのカートリッジスロットを使った拡張を考えてみたいと思います。
カートリッジスロットを使った拡張
カートリッジスロットを使った既存の拡張機器には以下のようなものがあります。
- 拡張 RAM
本体のメモリを増設できます。しかし、BASIC では対応していません。
- 拡張 ROM
MSX のように、ソフトウェア供給メディアとして拡張 ROM が想定されます。 この拡張 ROM をさらに拡張した仕組みとして「戦士のカートリッジ」があります。
- 拡張漢字 ROM
PC-6001mkII/SR 本体には漢字の表示機能があるのですが、ROM の容量の関係で 1024 文字しか収録されていません。 拡張漢字 ROM は、当時一般的なパソコンのように JIS 第一水準の漢字を表示できるようにするものです。
今回はこれらの機能を実装していきます。
実装(物理)
今回使用したのはばくてんさんのPC-6001 シリーズ用ユニバーサル基板なのですが、 この基板には拡張 RAM のパターンが既に存在するので、これはこのまま使用します。
よって、作成するのは拡張漢字 ROM と戦士カートリッジ互換拡張 ROM の部分となります。
Z80バスの信号をそのまま取り込むので、Pico2 にはピン数の多い RP2350B のボードを(いつもの WeACT RP2350B)使用します。 5V の信号ですが例によって Pico2 に直結しています。
拡張漢字 ROM
拡張漢字 ROM は I/O 空間上の FCH ~ FFH の間にあります。 漢字の選択には、Z80 の Out 命令の 16bit アドレッシングを使っています。
基本的な動作は、IORQ と RD または WR がイネーブルになることをポーリングで待つことで行っています。
戦士カートリッジ互換メガロム
いわゆる「ベルーガカートリッジ」ともいわれる、バンク切り替えタイプのメガROMです。 容量は 128KiB になっています。
ネット上に回路図が存在していたようなのですが、すでにアクセス不能になっているので、最終的な仕様が不明になっています。 おそらくこうだろうと判断した仕様は以下の通りです。
- ROM の部分は 4000H ~ 5FFFH の間に存在して、ポート 70H でバンクを切り替える
- RAM の部分は 6000H ~ 7FFFH の間に存在する。読み込みは外部 ROM として扱い、書き込みはバンク切り替えがどんな状態でも書き込まれる。
なので、読み込みについては CS2 または CS3 信号が使用できます。 書き込みに対する処理は MERQ と WR をポーリング監視で行います。
おわりに
RP2350B マイコンボードを用いて、戦士のカートリッジもどき兼 PC-6007SR もどきの作成を行いました。
完成品は(https://github.com/shippoiincho/nisesenshi)にあります