Monitorを移植しようと組み立てたMUTIF09、他の石も載せてからと思っていましたが時間かかりそうなのでとりあえず現状です。YOSHINO(JA1UMI)氏のシングルボードコンピュータボードで、資料はBOOTH・プリント基板はオレンジピコショップにて入手可能です。Monitor移植に最低限必要なもの(と手持ちがあって迷いのないものの一部)を搭載しています。メモリに退避されている内容をレジスタに戻しユーザプログラムに制御を渡す」です。コマンドで値を変更したらその状態でユーザプログラムを実行できなくては意味がありません。要はレジスタに値を設定して目的の番地にブランチすれば良いだけなのですが、すでに設定済みのレジスタを壊さないようにしなくてはいけないので進むにつれ制約が増えていきます。比較的多くのプロセッサで使える手は、「スタックに積んでおいてPOP,...,POP,RET」です。スタックを使った割り込みに対応しているプロセッサなら大抵これが使えます。割り込み時にはレジスタの状態を元に戻す必要があるからです。スタックが専用空間にあって自由にアクセスできないなど使えないプロセッサもありますが...MC6800を例に見てみましょう。メモリに退避されている値を表示・変更する」についてです。レジスタ内容をメモリに退避するのはプロセッサ固有の書き方が必要でしたが、すでにメモリ上にある値を表示・変更するだけであれば特殊なプログラミングは必要ありません。いえレジスタの名称や個数はプロセッサ毎に異なりますからそれなりの工夫は要ります。全レジスタの一覧表示は簡単です。ループとテーブルで書いてもいいのですが、レジスタ数が少ないうちは「レジスタ名を表示・メモリから値をロード・16進表示」を必要数分並べてしまっても大したことはありません。レジスタの変更はそうはいきませんので、以下のようなテーブルを用意しました。MC6809についてもレジスタ命令を追加しましたので、その内側について書いてみたいと思います。レジスタ命令とはレジスタの値を表示・変更する機能なわけですが、CPUがある瞬間に実行できるプログラムは1つですからユーザプログラム実行中はモニタプログラムは実行できません。モニタプログラム自身の動作にもレジスタは必要です。するか?モニタプログラムには次の3つの機能が必要になります。Monitorを移植することにします。ボードを動かしていなかったので念のためにもう一度小さなプログラムを試してみましたが、何故か動作が変というかいきなり暴走している感じです。原因はいくつか考えられます。ボードかCPUが壊れてしまった(リセット動作には不明な点が多いので)以前動いたのは偶然だったアセンブラが誤ったコードを吐いているハンドアセンブルと比較したり、以前と同じコードを試したりで3.で無いことはすぐに判明しました。Board」と名付けました。略というのはもちろん後からのこじつけで、二式大型飛行艇の連合国側コードネームからの命名です。現存する機体のはずです。これだけではなんなのでこれまで書かなかった資料編をお送りします。配置まずは基板上部のCPUボードへのコネクタです。Monitorですが、まだまだ対応プロセッサは増やすつもりでいます。完成したボードがあって動かせるMC68000、SBC8088ボード購入済みであとは組み立てるだけの8086/8088、6502/65C816あたりが次の候補ですね。これだけの多プロセッサ展開を前提としているのになぜC言語を使わないのか不思議に思われるかもしれません。そこで今回は何故オールアセンブリ言語なのか書いてみようと思います。MC6800の相当品ですが、いくつか独自の命令が追加されています。これは1979年製のようですね。パッケージは中央に大きな円と下側に溝のある富士通独特の特徴あるスタイルです。今回は国内調達したのであまり心配はないのですが、海外からだとこのパッケージは(ニセモノの可能性が低いということで)安心材料の一つといえそうです。追加された命令の詳細を知りたいところなのですが、富士通のデバイスはデータシートの入手が難しいことが多く、このMB8861も入手できていません。ハード的にはMC6800と差し替え可能ということで、「リンク」に挙げたサイトの情報と実験をもとに動かしていきます。6809に続いて6800用でもCPU判別を追加しようと思っているのですが情報があまりありません。HD6301/HD6303と改良されるにしたがって命令は追加されていますが、既存命令の挙動は変化が無いようです。これは互換性という点では非常にありがたいのですが、判別という点では困ったことです。追加された命令の存在が確認できれば良いのですが、そのオペコードは旧プロセッサでは未定義なので何が起こるかわかりません。データシートにも記載は無いので試してみるしかないのです。レジスタを設定し、問題の命令を実行し、レジスタがどう変化したかを地道に見ていく必要があります。そこでレジスタを任意に設定して実行する機能、レジスタの内容を表示する機能を追加することにしました。これはデバッグにも有効です。MonitorをZ280のI/Oページレジスタに対応させました。先日のI/O命令追加はそもそもZ280ボードで内蔵UARTの検討用に始めたのですが、あのままではZ280内蔵デバイスへのアクセスには使えません。0FFHに配置されています。0FFHに切り替えたとたんに外部I/Oデバイスへのアクセスができなくなります。SIOに頼っているのでこれではキー入力・画面出力が不能になってしまいます。"O"コマンドで実際にI/Oアクセスする直前にI/Oページレジスタを変更し終わったら元に戻す必要があります。ここまでは簡単ですが、コマンドをどうするのかは悩みました。