Super AKI-80 を使ってみる(2)
Super AKI-80 + CH32V203 で Lチカまで
実装
Super AKI-80 メインボードはこんな風になりました。
- メモリ周り
元々載ってた 32KB の SRAM を取り外して、128KB の SRAM を実装して、メモリ空間をすべて RAM にします。 ROM ソケットから信号線を取り出しています。ROM ソケットに来ていない MEWR 信号は近くにあるピンポストから拾います。 なお、アドレスの A8-A15 をプルダウンしています。
- リセット関連
もともとは RESET IC を付ける予定だったのですが、マイコン側から ~RESET の制御ができなかったので外しました。 なお、マイコン側で RESETIN を PullDown しているので、明示的に H にしない限り Z80 はリセット状態のままです。 これは、CH32V203 の起動に 20msec程必要なので、そのあいだ Z80 を停止させておく必要があるためです。
一方 CH32V203 側はこんな感じです。 載ってる IC は、レベルコンバーター兼バスバッファの 74LCX245 と、制御マイコンの CH32V203C8T6、および 5V → 3.3V の LDO です。 空きソケットはのちに使用する予定ですが、未配線です。
Super AKI-80 との接続は以下のようになっています。Super AKI-80 の CN2 を経由して接続されています。
- Data Bus
CH32V203 の FT ピンが足りないこともあって、データバスは 74LCX245 を経由して操作します。
- アドレスバス
- MERQ/IORQ/WR/RD/BUSREQ/BUSACK
CH32V203 の FT ピンに直結します。 出力時は BUSREQ のみオープンドレイン、他はプッシュプルにしています。
- RESET
プルダウンして、AKI-80 の RESETIN に接続します。
書き込み手順
手順的には以下の動作を行います。
- GPIO の設定
- ~RESET の解除
- ~BUSREQ の送信
- ~BUSACK を待つ
- Z80 バスに出力するように GPIO を設定
- DMA で Z80 のプログラムを書き込む
- 書き込みが終わったら、BUSREQ を解放
- GPIO バス入力用に設定
- Z80 を再リセット
CH32V203 のサンプルコードは https://github.com/shippoiincho/CH32VZ80 になります。
とりあえず L チカまで動かすことができました。
Super AKI-80 の CN2 には A8 以上の信号が出ていないために、現時点では $0000 ~ $00ff までの領域にしか書き込むことができません。 次は、CH32V203 を IO エミュレーションとして用いて、もっと大きなプログラムをロードできるようにします。