カテゴリー
前回書いたようにモニタ移植して例外処理を調べていたのですが、先日遂にコロナに罹ってしまいあまり進捗していません。
そこで現時点でのまとめを書いておこうと思います。
Universal Monitorの移植は基本MC68000用をベースにL(oad), P(unch)コマンドについてはH8/300H用を元にしています。この辺りの事情はNS32016のときと一緒です。早くMC68000用も長いアドレス対応しなくては。
いつものように移植にあたって気付いたV60の特徴を挙げてみます。
- 汎用レジスタ
汎用レジスタは32ビット長のものがR0~R31まで32本もあります。レジスタの上下分割はできませんが数は十分なので困ることはありませんでした。モニタでは半分も使っていません。 - アドレッシングモード
MC68020のものと同様のものは大体揃っている感じですが、ディスプレースメントもイミディエイトも32ビット対応で必要に応じて8ビットや16ビットのエンコードを用いて命令長を抑える仕組みです。イミディエイトにはさらに4ビットの形式もあります。
これらのアドレッシングはほとんどの命令で使用できます。例えばMC68000のTRAP
命令のベクタは定数のみですが、V60ではどのアドレッシングも使用可能です。 - サブルーチン命令
サブルーチン呼び出しは2種類あります。
一つはBSR
,JSR
⇔RSR
で、戻り番地をスタックに積んで飛んでいきます。モニタではこちらを使用しています。
もう一つはCALL
⇔RET
、戻り番地以外にAP(Argument Pointer)もスタックに積まれます。これはFP(Frame Pointer)とは別です。 - 文字列命令
8ビットまたは16ビットの文字列を扱う命令があります。アドレスと長さで管理する形式なのがちょっと残念(コピーだけならMove Character with Stopper命令が使えそう)です。モニタでもSKIPSPに使えそう(現在使ってはいません)です。 - Processor ID
PIR(Processor ID Register)を持っておりデコードするだけでプロセッサ判別が可能です。手持ちのものでは00006008Hが入っていました。上16ビットは将来の予約、次の8ビットの60HはV60を表し、下8ビットはNECの予約になっていますがリビジョンかな。
ハードウェアの確認で起動メッセージまで動いた後、D, S, G, L, Pとコマンドを実装していきましたが特にハマることもなくさくさく進みました。アセンブラの表記はMC68000系っぽさとIntelっぽさが混在した変な感じでしたがすぐに慣れます。
それでR(egister)コマンド実装の前に例外発生時の処理を書き始めたのですが……
デバッグしようとちょっと変更すると想定外の動作が変わってしまう現象が出てしまい、落ち着いて一歩ずつ追おうとしたところで停滞中といったところなのです。
参考文献・関連図書
”μPD70616 Programmer's Reference Manual", NEC Electronics.
関連項目
コメントを追加