現在地

プログラミング

SBCZ8002(ソフトウェア編)

カテゴリー:

前回ハードウェアが無事に動作するようになったのでUniversal Monitorの移植してみました。

年末から初期化部分などを細々と書いていましたが、本格的に書き始めたのは年が明けてボードが動き始めてからです。それでも3日にはI(n)/O(ut), R(egister)コマンドまで動作しましたからこれまでの最速記録ですね。確かに慣れてきたという側面はありますが、Z8000がアセンブリ言語で書きやすいプロセッサだというのは間違いないでしょう。

今回はその過程で気になった点についていくつか書いてみたいと思います。

リセットの怪

シャープのマニュアルによるとZ8002のリセット時の動作について以下のように書かれています。

Z8002では,最初のサイクルで,0002H番地からFCWを読み出し,0004HH番地からPCを読み出し,つぎの最初の命令フェッチ・サイクルからプログラムがスタートする。

F8へUniversal Monitorを移植(その2)

カテゴリー:

前回サブルーチン呼び出しの方法で終わってしまったので、今回は実際にUniversal Monitorでどうしたか書いていきたいと思います。

前回書いたようにサブルーチン呼び出しが2段を超えると一気に大変になります。

それではUniversal Monitorで呼び出しが深い箇所をどう対処したか、いくつかの例を見てみます。

F8へUniversal Monitorを移植(その1)

カテゴリー:

SBCF8が動きましたので早速Universal Monitorを移植してみます。

以前のSC/MPも癖が強かったですが、このF8もそれに劣らず癖の強いプロセッサです。

  1. コードフェッチ以外のメモリアクセスはすべてDC0レジスタ間接でなくてはならず、常にポストインクリメントされます。もう一つあるDC1(アクセスには使えない)との間で値の交換が出来るのがせめてもの救いです。
  2. サブルーチン呼び出しはスタックではなく戻り番地はスタックレジスタPC1に退避されます。

TMP90C840ボード(ソフトウェア編)

ちょうどTMP90C840用にUniversal Monitorの修正をしている最中、F3850+F3853用の試作基板を貰えることになり組み立て・動作確認をしていたため、予想以上に遅くなってしまいました。

TMP90C840ボードは以前のTMP90P802ボード用に書かれているUniversal Monitor TLCS-90そのままでも動作し0000H~0FFFFHまでの64kBのメモリ空間が使えますが、TMP90C840は最大1MBまでのメモリ空間をサポートしていますのでそれを使えるように拡張します。

[UniMon] 内部ルーチンの新しい呼び方を試す(その1)

カテゴリー:

以前[UniMon] 固定エントリポイントで機能ごとに固定したエントリポイントを用意することでユーザプログラムから内部ルーチンを使えるようにする方法を用意しました。

でもよく考えるとこれはあまりよい方法ではなかった気がしてきました。

MC68000を考えるとサブルーチンコールではなくTRAPを使いたいですし、MC68000のTRAP命令は16通りしかありません。今のところ足りるとはいえ、できればエントリポイントは1つにしたいところです。

SBCZ80(その後)

カテゴリー:

SBCZ80について進展がありましたので記録しておきます。

メッセージ文字化け

電源ON時にメッセージの一部が化ける現象が発生していました。

CR,LF,"Universal Monitor Z80",CR,LF,00H

上記のメッセージ(最後の00Hは文字列の終端マークです)を表示しているはずなのになぜかLFと"U"の間に変な文字が挿入され次の"U"とともに化けてしまいます。電源ONのままリセットすれば問題はありません。

次にメッセージを少し変形しました。

CR,LF,CR,LF,"Universal Monitor Z80",CR,LF,00H

やはり2文字目のLFの後に挿入されると想像していましたが、実際は4文字目のLFの後"U"の前に挿入されました。

前回はここまで書きました。

さらにLF,"U"の組み合わせに何かあるのかと次を試してみます。

SBCZ80(ソフトウェア編)

カテゴリー:

前回に引き続いてSBCZ80、今回はソフトウェア編です。

いつものようにUniversal Monitorを移植するわけですが、これまでUniversal Monitor Z80を動かしてきたMAA-1ボードとSBCZ80は実はほとんど同じです。ソフトウェアから見た違いといえばROM/RAMの容量が半分になっているくらいで、SIOのアドレスなども一致しています。

となると0FF00H~0FFFFHに配置されていたワークエリア・スタックを0BF00H~0BFFFHに移動するだけで動きそうです。これならconfig.incの変更ですみます。

8031/8032ボード(ソフトウェア編)

カテゴリー:

8031/8032ボードはいくつかアドレスを変えながらループさせてアドレスバス確認が出来たところで一応完成ということにして、Universal Monitorの移植にかかります。

ターミナルはEMILY Board経由と内蔵UARTの両方に対応することにしますが、まずは簡単そうなEMILY Board経由で一通り動かしてみることにして一通りのコマンド(D(ump), G(o), S(et), H(bank), L(oad))を実装してみました。

これもまた癖のあるアーキテクチャですね。

ページ