レトロPCを Raspberry Pi Pico2 でパワーアップする その1
はじめに
最近またレトロPC収集にハマっているのですが、 せっかくオークションなどで入手できても、 当時よく使われていた周辺機器がついていなかったり、 別でものすごい値段がついていて手が出ないことがあります。
このシリーズでは、そんなレトロPCをモダンなマイコンを使ってパワーアップしてみたいと思います。
Raspberry Pi Pico2
強化には Pico2 (または RP2350B)を使います。 Pico2 はデジタルピン(ADC のついていないピン)に 5V 耐性があるので、 5V で動いているレトロPCのバス等に直結ですることが可能です。
さらにピンの数が必要な場合は、RP2350B のボードを使うことも可能で、 8bit CPU のバスの全信号を扱うこともできます。
パソピア7
パソピア7 は 1983 年に発売されたパソコンです。 当時としてはめづらしい 27色(タイルペイント…)と 6 重和音という表現機能が特徴で、 “SOUND & GRAPHICS” というロゴがついています。
パソピア7の拡張方法として以下の方法があります。
- 拡張バス
Z80 の全信号が出ている拡張コネクタです。 実機の場合、フロッピーインターフェースが接続できます。
- PAC1
BASIC などのシステムソフトが接続できるスロットです。 しかし、ここに接続できるのは T-BASIC くらいしかありません。 (初代 PASOPIA には MINI PASCAL とかもあったのに)
- PAC2
漢字ROM やメモリーカートリッジを接続するためのスロットです。
今回は拡張の意味が一番大きい PAC2 のエミュレーションを行います。
PAC2
PAC2 は I/O 空間の 18H ~ 1BH の間に配置されます。 信号線も 13 本しかありません。
基本的に 1BH でどの PAC2 の機能を使うかどうかを選択して、 他のポートでアドレス指定&データの読み書きを行います。
この辺は PASOPIA エミュレータで作ったので、 サクッと持ってきます。
実装機能は以下の通りです
- Slot 1
ジョイスティックを接続する JOYPAC のエミュレーションをします。
- Slot 2
漢字 PAC として漢字ROM をエミュレーションします
- Slot 3
- Slot 4
どちらも 64KiB の RAMPAC をエミュレーションします。 T-BASIC7 からは、ドライブ 6 & 5 として見えます。 (Slot 4 がドライブ 5)
I/O エミュレーション
PAC2 は Z80 の I/O 空間に接続されています。 Z80 では I/O アクセス時に自動的に 1 Wait 挿入されるので、 4MHz で動作しているパソピア7では、読み書きに 750nsec の余裕があります。
Pico2 を定格で動かした時でも、150nsec で応答できるので、 今回は PIO を使わず全部ソフトウェアで処理します。
読み出し動作の基本としては CSELP2 信号と RD 信号がイネーブルになるのをポーリングで待って、 必要なデータを集めて、バスにセットするだけです。その際に GPIO0-7 の向きを入力から出力に切り替えます。 CSELP2 と RD 信号がディスエーブルされたら、GPIO の向きを入力に戻して次の処理を待ちます。
Pico2 のデフォルトの周波数(150MHz) でおおよそ 160nsec で処理が可能です。 ここでは、300MHz にオーバークロックして使用しています。
高速化について
Pico2 では一般的にデータをフラッシュ上におくことが多いと思います。 フラッシュ上におかれたデータは特別な処理をしなくても、 読み出すことができますがこれは XIP という仕組みが自動的に処理しています。
ところが、XIP がキャッシュ上にないデータをフラッシュからデータ取得すると、 処理が 1μs 程度待たされます。
これでは Z80 の処理に対応できないので、一般的には WAIT# 信号で待たせるのですが、 PAC2 スロットには WAIT 信号が来ていません。
よって、すべてのデータは起動時に SRAM 上に転送しておくこととします。
またバスを制御するプログラムの方も、フラッシュ上におかずに SRAM 上に配置します。
コア一つをバスの監視に張り付かせて、 もう一つのコアの方で USB やフラッシュの読み書きを行います。
拡張
Pico2 にはフラッシュが4MB載っていますので、RAMPAC のエミュレーションをやるとフラッシュが余ります。 そこで、RAMPAC の切り替え機能を実装しました。
IO もソフトウェアで実装していますので、拡張は簡単です。
おわりに
レトロPCの拡張のテストとし単純なパソピアの PAC2 もどきの作成を行いました。
完成品は(https://github.com/shippoiincho/nisepac2)にあります