現在地

マイコン

マイコン

マイクロプロセッサ・マイクロコントローラ等です。

パーソナルなコンピュータの数値演算事情 (第2回:8ビット前期)

カテゴリー:

今回からパーソナルということでマイコンの事情について見ていきましょう。

8080, MC6800, 6502といった初期の8ビットマイコンの直接扱える数値はもちろん8ビットの整数です。16ビットのレジスタを持ったものもありますが主にアドレス指定のためのもので使える演算が限られていたり自由度の低いものでした。

この頃になると数値のビット表現は2進で負数は2の補数に収束しています。ただ10進演算の需要自体は残っているため、8ビットを2つに分けて10進2桁として使用するための補正命令を持っているものもありました。通常の加算命令と組み合わせることで10進の加算ができるというものです。

演算は2項演算としては加算・減算・比較・AND・OR・XORあたり、単項演算では符号反転・ビット反転・シフト・ローテートくらいを持っているのが一般的でした。中には符号反転+加算で代用できるからと減算命令を持たないものがあったり、各社の考え方や想定している用途等で微妙に異なってはいます。

乗算や除算命令は無いのが普通で、必要とあらばソフトウェアで処理をします。

P8052AH-BASICを動かす(動作編)

テーマ:

カテゴリー:

ハード編に引き続き今回は動作編です。

P8052AH-BASICはリセットしてもシリアルに何も出力してこないのでちょっと不安になりますが、スペースを送ってあげるとオープニングのメッセージが返ってきます。このスペースでターミナル側のボーレートを検出して自動的に合わせるようになっています。

クロック周波数をテキトーに決められるのはありがたいです。

間違ってスペース以外を送るとボーレート検出に失敗して正常に表示されないことがあります。その場合はリセットし直すしか無いと思います。

画面
無事に立ち上がったところで簡単なプログラムを動かしてみました。

P8052AH-BASICを動かす(ハード編)

テーマ:

カテゴリー:

P8052AH-BASICでボード製作中と書いてから一月近く経ってしまいましたが、やっと出来上がりました。

P8052AH-BASIC搭載ボード
動作確認ができる最小限の構成といったところです。

データ用メモリ空間の0000H~7FFFHに32kBのRAMを配置しています。プログラム用メモリ空間には何も接続していない(内蔵ROMのみ)のでBASICを使用する分には問題ありませんがネイティブコードを書いて実行することはできません。簡単な改造で対応可能なのでそのうち追加するかもしれません。

続・SBC6303がM5L2764Kで動かなかった件

テーマ:

カテゴリー:

以前、SBC6303 が M5L2764K の個体差によって動いたり動かなかったりと書きました。

念のために n を増やしてみると、起動メッセージの途中で止まってしまう M5L2764K も見つかりました。リセットを繰り返すと止まる場所も一定していません。

動いたと思ったものも心配になってきます。試しにメモリダンプを実行してみると、案の定ダンプ中にハングアップしてしまいました。

ところで私の持っている 2764 は三菱の M5L2764K ばかりです。ふと他社のものでも同じだろうかと思って Intel の D2764 を調達して試してみました。するとどれも正常に動作するではないですか。64kB のメモリ空間全部をダンプさせてみても最後までいきます。

Intel のものと三菱のもので何かが違うようです。

Intel P8052AH-BASIC

テーマ:

カテゴリー:

BASIC内蔵マイコンで取り上げたものをもう一つ入手できました。

P8052AH-BASIC
IntelのP8052AH-BASIC、全体が梨地で表示部分だけツルツルなのは他社ではあまり見かけませんね。

8051のROM,RAM容量を増やした8052(これらからROMを取り除いたのが8031,8032です)のROMにBASICインタープリタを格納したものです。

Intel 8031, 8032

テーマ:

カテゴリー:

前にマニュアルを取り上げましたが、MCS-51の現物もいくつか入手できました。

D80C31BH
これはIntelのD80C31BH、ROM無しのCMOS版でセラミックのパッケージに入ったものです。

MCS-51は8741Aのところで書いたMCS-48の後継チップに当たります。シングルチップに基本機能を詰め込むというコンセプトはそのままに、命令体系等は大幅に拡張されました。

ROMのタイプや容量の違いによるラインナップはMCS-48とよく似ています。

MC6803を動かす

テーマ:

カテゴリー:

手配していたロジックICが到着したのでSBC6303ルーズキットMC6803を載せて試してみることにします。

SBC6303ルーズキット
そのままではMC6803を動かすのに支障があるので一部変更しています。

まずNMOSのMC6803と組み合わせるのに74HCシリーズはマズいので74HCTシリーズに換えます。キット資料によればLS/ALS/ASとありますが、VIHの問題なら74HCTでもいけるはずです。

Z8613を動かす (その5:私のハマった点)

テーマ:

前回私がハマったところの詳細を残しておきます。

Z8にはレジスタファイルと呼ばれる256バイトの空間があります。これは通常のメモリ空間とは別に存在し、内蔵ペリフェラルのレジスタや汎用レジスタなどが配置されています。Z8613ではアドレス0x80~0xEFまでは未実装になっていますが、デバイスによってはフル実装されていたりバンク切り替えによって拡張されているものもあります。

このレジスタファイルへのアクセスには2種類あり、命令によってどちらが使えるかあるいは両方かが決まっています。

一つは8ビットのアドレスを指定する方法で、どこにでもアクセス可能な代わりに命令長は最低でも2バイト必要です。アセンブリ言語での記述は単に8ビットのアドレスを書きます。

もう一つはアドレスを(下位)4ビットだけ命令の中で指定し、アドレスの上位は別途RP(Register Pointer)レジスタで指定しておく方法です。アセンブリ言語での記述はr0~r15と書きます。命令長が短くなるほか、RPレジスタを変更することで割り込みでの退避・復帰を高速に行なうことも可能です。

Z8613を動かす (その4:とりあえず動きました)

テーマ:

いろいろやっているうちに何とか動き始めました。

まずはシリアルポートです。

Z8のシリアルはちょっと変わっていてシリアルのステータスレジスタがありません。それでは受信完了などをどうやって知るのかというと、割り込み要因レジスタを読むのです。ここまではマニュアルを読んでわかっていたのですが...

マニュアルを読み直していると、たとえ割り込みを使わないでポーリング処理をする場合でも一度EI命令を実行しないと割り込み要因レジスタが有効にならないのだそうです。

ポーリングでやるつもりでマニュアルの割り込みの部分をちゃんと読んでいなかったので気付かなかったのでした。

指示通りに初期化するとあっさり動くようになりました。

パラレルの方はアセンブラが原因でした。

前回書いたようにタイマT0の設定は出来ていました。パラレルポートも試しにプルアップ・プルダウンしながら電圧を測ると出力に設定されているようです。それなのに出力すべきデータが設定できていませんでした。

何が違っているのでしょう?

Z8613を動かす (その3:苦戦中...)

テーマ:

カテゴリー:

ボードも出来たし、アセンブラも用意できたので、いざ動かそうとしているのですが...

予想外に苦戦中です。

まず簡単に動作すると思っていたシリアルが動かない。

ならばとパラレルポートに出力させようとしたのですが、これも出てこない。

こんな基本的なものが動かないとなるとプログラムが走っていないのではという疑いがでてきます。使っているZ8613はパッケージの隅が欠けているくらいなので生きていない可能性すらあります。

小さなことでも良いのでプログラムが走っている証が欲しいところです。

ROMから命令フェッチしているのがわかればCPUが生きていることがわかります。オシロスコープでもあれば良いのですが、持っているのは古いアナログのものだけ、それもすぐには出てきません。

ページ