現在地
マイコン
マイコン
マイクロプロセッサ・マイクロコントローラ等です。
RXの命令を眺めて
カテゴリー:
アセンブラを書いているとどんな命令があるのか全体が見えてきます。
アセンブリ言語で書いても同じではと思うかもしれませんが、その場合はこんな命令無いのかなと探しに行くことはあってもどんな命令があるのか見ることはあまりないように思います。少なくとも私はそうで、新しいプロセッサを初めて触るときはニーモニック一覧を眺めて使い慣れたプロセッサの命令に相当するのはどれかといった探し方をしてしまいます。
そうすると汎用的な命令はわかりますが、知らなくてもプログラムは書けるけど使えば便利(速い)命令は置き去りになります。
一方でアセンブラを書いていると全部の命令に一通り目を通すことになります。動作は知らなくても書けますが、マニュアルに一緒に載っていれば目に入りますし、今回のRXのように別になっていても気になって調べてしまいます。まぁ好奇心の少ない人が仕事として黙々とやったらだめかもしれませんが......
そんなわけでRXの命令を見ているとつくづくC言語(とその派生)を意識した命令セットだなぁと思えるものがあります。
RX621ボード
カテゴリー:
秋月に寄ったらルネサスRX621のボードが安かったんで深く考えずに買ってしまいました。
ハンダブリッジをリワークした訳アリ品ということで1000円でした。マイコン単体より安いです。
開発セットではないので基板1枚だけでソフトウェアなどは一切ないですが、Universal Monitorの移植をしたいだけなので問題ありません。
H8/532ボード(ソフトウェア編)
カテゴリー:
ボードが出来たら動作確認です。
まずはφに1/2のクロック(8MHz)が出てくるのを確認します。これで電源が正しく供給され、デバイスも生きているらしいことがわかります。
続いてバスにLED繋いだ状態で短い無限ループを実行してみます。最短2バイトでループできますが、アドレスバスのLEDを見ているとかなり先(4バイト?)までプリフェッチしているらしいのがわかります。
ここまで来たらいつものようにUniversal Monitorの移植に入ります。
最初はコンソールとしてEMILY Boardの仮想UARTで書き始めましたが、文字列表示までできたところで内蔵SCIにも対応しました。日立のSCIは共通なのでH8/300用をそのまま移植して動きました。
H8/300とH8/500は同じH8ファミリで似ていますが、大きく異なる点もあり同一ソースから条件アセンブルは無理と思います。
H8/532ボード(ハードウェア編)
カテゴリー:
PLLが途中ですが、並行して作っていたマイコンボードが動き始めましたのでそちらを取り上げようと思います。
H8シリーズの最初のH8/532のボード、もちろんEMILY Boardで動かします。
幸いノンマルチプレクスバスなので通常のユニバーサル基板を使用します。配線も一対一接続なので厄介なところはありません。
一応未使用ポートをピンヘッダに出して、SCIもTTL-232R-5Vを接続できるようにしてあります。
MC68EC020
カテゴリー:
MC68030, MC68040, MC68060にはMMUやFPUの有無によってMC68EC030などの廉価版が存在します。MC68020には外せるユニットがないので廉価版は無いと思っていましたが...
MC68EC020はありました。これは1999年製の16MHz版、日本製なんですね。
MC68020との機能的な違いはメモリ空間が16MBしかないことです。
機能以外ではパッケージがプラスチックPGAになっています。
TMPZ8003
Z8001を動かす
カテゴリー:
Universal Monitor Z8000は現在のところZ8002のみの対応です。これは実行環境がSBCZ8002しかないためですが、Z8001は持っているので何とか動かしてみようというのが今回のお話です。
アドレスエラー・バスエラー (その4)
カテゴリー:
アドレスエラー・バスエラーについて今度こそ終わりにするつもりです。
MC68040
MC68040からは大きな方向転換があったように感じます。
複雑度は増しているはずなのにスタックに積まれる情報は減っているのです。前にもMC68010の判別(補足)に書きましたが、命令の再開を諦めて頭からやり直す方針のようです。
まずはアドレスエラーの場合です。
アドレスエラー・バスエラー (その3)
カテゴリー:
3回目は残りですが書ききれるかなぁ。さらに1回増えてしまうかもしれません。
ここからは自分の手で動かしたことはないのでマニュアルを元にざっくり書いていきます。
MC68020 / MC68030
この両者はソフトウェアから見た例外処理はほぼ共通のようなのでまとめて書きます。
これらではエラー発生時の状況によってスタックに積まれる情報量に違いがあるようです。キリの悪いところで発生すると保存しないといけない項目が増えるということなのかな。
どちらが使われたかはSP+6の上位4ビットでわかります。
Universal MonitorではこれまでMC68010までの対応だったので0000なら4ワード、それ以外なら29ワードとしていました。それをMC68020以降で実行するとスタックがおかしなことになります。今回MC68010, MC68020, MC68030, MC68040, MC68060, SCC68070で使われているフォーマットとその長さをテーブルにして引くようにしました。
まずは少ない場合から。