だいぶ間が開いてしまいましたがV60版Universal MonitorでもR(egister)コマンドを使用できるようにしました。
基本的に他のアーキテクチャと同様ですが、気になる点を何点か記しておきます。
一点目はレジスタ名のテーブルです。
Universal MonitorではRコマンドでレジスタ名を認識するためツリー構造のテーブルを使用しています。今回もそれを踏襲していますがr0~r31をそのまま持つと無駄にテーブルが大きくなるので、プレフィックス部分(個々の例では「r」)のみを登録して後ろの数字によって切り替える仕組みを導入しました。
二つ目はr31(SP)の扱いです。
例えば実行レベル3(EL=3)でユーザプログラム実行中にBRKを実行したとします。例外の発生により実行レベルが0に切り替わるのでr31の内容はL3SPに保存され、L0SPの内容が新たにr31にロードされます。
その後、例外ハンドラ内でr0~r31を保存しますが、ここで保存されるr31の値はユーザプログラムのr31ではなくモニタのためのr31です。
ならr31としてL3SPを表示すればいいのかというとそうもいかず、スタックに保存されたPSW内のELフィールドを参照する必要があるでしょう。
さらに元々実行レベル0だったらどうなるのか、さらにはISPビットが立っていた場合はどうなるのか、いろいろ考えると頭が混乱してきます。
現状は特に何もせずモニタ用のr31を表示しています。L0SP~L3SP, ISPも表示しているので解釈をユーザに委ねた形です。
三つ目はメモリマップの問題です。
今回16ビットバスのEMILY Board対応なので実装メモリは8kBしかありません。便宜上前4kBをRAMエリア・後4kBをROMエリアとしていましたが、モニタが4kBに収まらなくなってしまいました。
やむなく4kB+4kBから3kB+5kBに変更しましたが、困ったのはSystem Base Table(いわゆる例外ベクタ)です。
これは4kB境界にしか置けないのでROMエリアの先頭に置いていたのですが、コードの途中になると追加・修正のたびに位置調整が必要になってしまいます。やむなく初期化時にRAMエリア先頭にコピーすることにしました。ただでさえ少ないメモリを無駄にしてしまいますが256バイトなので目を瞑ります。
とはいえこれ以外にスタックやワークも必要なのでユーザプログラムが使えるのは2kBとちょっとしか残りません。これではTiny BASICすら動かせないでしょう。
もっとメモリ積んだボードを作り直すしかないか……
でもそれならV70にしたいし……
eBayに出たの買っておけば良かったなぁ……
国内ショップにもあるけど高いし……
その前にデータシート類を入手しなくちゃいけないし……
V70ボード
すごいV70ボードを製作中の方がいらっしゃいました。Universal Monitorも移植されたようです。
NEC uPD70632(V70) 挑戦記
https://note.com/4sun5bu/m/ma72bec2ba8d7
Re: V70ボード
実はこの方とは先日のMI68で少しお話をさせていただきました。
ピン配置など最低限の資料をお持ちのようで、やはりeBayのV70見送ったの後悔……
コメントを追加