SC/MP使いの憂鬱
SC/MPボードにUniversal Monitorの移植を始めたのですが、前にも書いたように癖が強くて大変です。
そこで移植をしていて「げっ」と思ったことを書いてみたいと思います。
SC/MPボードにUniversal Monitorの移植を始めたのですが、前にも書いたように癖が強くて大変です。
そこで移植をしていて「げっ」と思ったことを書いてみたいと思います。
メモリ基板、確かにメモリではあるのですがそれだけでもないので「EMILY Board」と名付けました。
Environment for Microprocessor Introduction ... の略というのはもちろん後からのこじつけで、二式大型飛行艇の連合国側コードネームからの命名です。
これだけではなんなのでこれまで書かなかった資料編をお送りします。
まずは基板上部のCPUボードへのコネクタです。
ハードウェア編に続いて今回はソフトウェア編です。
最初のテストはJMPでループを作ってみます。これは3バイト命令なのできりの良いアドレスに配置すればA0, A1が変化しA2以降のアドレスは変化しません。
これでメモリ基板から読んで実行できていることがわかります。メモリ基板のターゲット側ポートはこれまで未確認だったのですが、ここで確認が取れました。
この後はメモリへの書き込みなど一つずつ確認していくのが堅実だとは思いますが、一気にUniversal Monitorの移植に進むことにしました。
実はこの時点ではR65C51 ACIAは未搭載だったのでメモリ基板のコンソール機能を利用します。この機能も未確認なのでまずはオープニングメッセージを表示するところまで移植してみます。
6502のアセンブリ言語を書くのは初めてです。
昔使っていたXサーバのマニュアルも出てきました。
386bsd, FreeBSD, Linux などのPCのUNIX系OSのグラフィック環境としてはX Window Systemを使用するのが一般的です。X Window System自体はオープンソースで、PC用の実装であるX386, XFree86ももちろんオープンソースです。
私も386bsdを使い始めた時からX386 ⇒ XFree86を使用していました。
これ(正確にはその中のXサーバ)はグラフィックスハードウェアに依存したソフトウェアです。最初のころはPCのグラフィックスハードウェアの仕様は公開されていたので問題はありませんでした。
しかしグラフィックアクセラレータが進化するにしたがって仕様を秘匿するメーカが出てきました。そのようなメーカ製のグラフィックボードでは動作しなかったり、動作してもアクセラレータ機能が使えなかったりします。
68編に引き続き80編をお送りします。
8080系とZ80系の区別は『I/O』誌の記事を参考にしました。i8080/μPD8080AF, μPD8080A, i8085の判別法は一般的なものがあれば利用するつもりでしたが、見当たらなかったのでデータシートを元に独自に書いたものです。
現在のCPUではその種類や対応する命令の範囲などを取得する命令(例えばx86系のCPUID命令)がありますが、以前は微妙な挙動の違いなどから判別していました。
自作のUniversal Monitorのソースコードを例に解説してみます。
まずは昨日目処が立ったと書いたMC6800系からです。
該当部分のソースは次のようになっています。
Universal Monitor Z8の基本機能が現在対応している全プロセッサで使用可能になりました。
前回はコマンドの概要のみを書きましたが、今回はコマンドラインの形式も書いておきます。
コマンドは原則1文字ですが、PIなどのように2文字のものも一部あります。
<addr>,<offset>といった数値パラメータは16進表記で必要以上の桁数を入力した場合は末尾が使用されます。
英字の大文字小文字は区別されません。
コマンドとパラメータの間・パラメータとカンマの間には空白を入れても構いません。ただし行入力バッファは短いので注意してください。