現在地

[UniMon] レジスタ命令追加


カテゴリー:

8080, Z80, 6809に続いて6800用でもCPU判別を追加しようと思っているのですが情報があまりありません。

わかった範囲ではMC6800 ⇒ MC6801/MC6803 ⇒ HD6301/HD6303と改良されるにしたがって命令は追加されていますが、既存命令の挙動は変化が無いようです。これは互換性という点では非常にありがたいのですが、判別という点では困ったことです。

追加された命令の存在が確認できれば良いのですが、そのオペコードは旧プロセッサでは未定義なので何が起こるかわかりません。データシートにも記載は無いので試してみるしかないのです。

レジスタを設定し、問題の命令を実行し、レジスタがどう変化したかを地道に見ていく必要があります。

そこでレジスタを任意に設定して実行する機能、レジスタの内容を表示する機能を追加することにしました。これはデバッグにも有効です。

  • R(egister)
    レジスタの値を設定・表示します。
    1. R
    2. R <reg>

    1の形式ではA, B, X, SP, PC, CCRの各レジスタの内容を一括表示します。2の形式では<reg>(A, B, X, S, P, C)で指定されたレジスタの内容を表示し、入力モードに移行します。16進で値を入力するとそれが指定されたレジスタに設定されます。空行を入力するとレジスタは変更されません。
    当然モニタ実行中のレジスタを設定・表示しても意味は無いので、Gコマンド実行時に実際のレジスタに設定されます。SWI命令を実行するとその時のレジスタの値が一括表示されます。

これはブレークポイントとして使用できます。

  1. ブレークしたい箇所の命令を$3F(SWI)に置き換えます。元の値はメモしておきます。
  2. プログラムを実行します。
  3. ブレークポイントに達するとモニタに制御が戻り、レジスタの内容が一括表示されます。
  4. 必要に応じてD, Sコマンドでメモリ内容を確認・変更できます。
  5. 実行を再開するときは置き換えた$3Fを元に戻し、PCを1減らしてGコマンドで実行します。

ちょっと面倒ですけどね。

判別ルーチンは MC6800, MC6801/MC6803, HD6301/HD6303 の判定の目処はついたのですが、未定義命令を使うので他の MB8861 とか MN1800 で何が起こるか心配ですね。

もう一つ

svn checkout https://electrelic.com/svn/unimon/trunk unimonでソースコードを取得できるようになりました。

参考文献・関連図書: 
MC6800データシート, Motorola.
MC6801,MC6803データシート, Motorola.
HD6303R,HD63A03R,HD63B03Rデータシート, Hitachi.
添付ファイル: 

コメント

今からやるなら、どうせならgitの方がいいんじゃないですか。(笑)
自分は、別にどうでもいいですけど。

それも考えたんですけどね、自分用にsvnは運用していたのでそこに追加するのが楽だったから。

なるほど、そういう考え方もありますね。

時代的にはもっと前の CVS, SCCS, RCS の方が適しているかも。
いや当時のアマチュアは構成管理なんてしていないな。

私は...
区切りごとに hoge.asm を hoge.002 などと通し番号をつけてコピーしていました。
# DISK BASIC や CP/M の時代は階層ディレクトリなんて無い。
ディスク容量も貴重だったので古いほうは消してしまっていて残っていません。

CVSなら現代のネットワーク上でも使えそうですが
この電話番号にトレイルブレイザーでuucp接続しろ
とか対応困難な悪ふざけも楽しいですね

UUCP、懐かしいですね。
高校の友人経由で外につながっていました。
で大学の友人はうちにつなぎに来ていたという。

ファイル配布は、コマンドメール送るとuuencodeされたファイルが複数メールに分割されて送り返されてくる、というのがありましたね。

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。