2019-07-01 18:50 — asano
カテゴリー:
Universal MonitorをZ280のI/Oページレジスタに対応させました。
先日のI/O命令追加はそもそもZ280ボードで内蔵UARTの検討用に始めたのですが、あのままではZ280内蔵デバイスへのアクセスには使えません。
Z280内蔵デバイスはI/Oページ0FEH, 0FFHに配置されています。I/OページレジスタはOS 8,FE
などとすれば変更できますが、0FEH, 0FFHに切り替えたとたんに外部I/Oデバイスへのアクセスができなくなります。現状コンソールを外部のZ80 SIOに頼っているのでこれではキー入力・画面出力が不能になってしまいます。
そこで"I", "O"コマンドで実際にI/Oアクセスする直前にI/Oページレジスタを変更し終わったら元に戻す必要があります。
ここまでは簡単ですが、コマンドをどうするのかは悩みました。
- "OS"コマンドでI/Oページレジスタの08が指定されたとき例外としてレジスタへの書き込みを行わず値を保存しておく。
- I/Oページを指定するコマンドを専用に用意する。
- ページFEとFFへアクセスする専用コマンドを用意する。
- I/Oアドレスを24ビット指定できるようにする。
- 上と同様だが
O FE:E8,00
のようにページとアドレスを指定できるようにする。
1の例外扱いは悪くない考えだとは思うのですが、IS 08
で読むときにレジスタの値を表示するのか保存してある値を表示するのかという問題があります。またモニタのようなものではたとえ危険な操作でもできるだけ素直な動作をするべきだとも思っているので少し引っかかります。
3の場合はページ0FEHと0FFHそれぞれに8ビット幅と16ビット幅の入力と出力のコマンドを用意しなくてはなりません。
4,5は毎回フルアドレスを入力しないといけないことと、特に4ではRDHEXルーチン(16進パーサ)を24ビット対応に拡張せねばならず変更規模が大きくなります。5は将来8086系やZ8000系などに対応する際のセグメントの扱いと同等な表記にできるメリットがあります。
今回は変更規模も小さい2を選びましたが、5も捨てきれないなと思っています。
- Z
I
,IW
,O
,OW
コマンドの実行時に使用するI/Oページを指定・表示します。この機能は起動時のCPU判別でZ280と判定されたときのみ使用できます。Z
Z <page>
1の形式では設定されているI/Oページを表示します。2の形式ではI/Oページを<page>に変更します。
コメントを追加