マイコン

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

Intel 8031, 8032

2018-07-15 22:56 — asano

テーマ

カテゴリー

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

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

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

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

MC6803を動かす

2018-07-11 23:56 — asano

テーマ

カテゴリー

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

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

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

次にMC6803はクロック上限が1MHzなのでクロックを下げなくてはなりません。シリアルのボーレートも変わってしまうので半分の0.6144MHzにすることにします。これならボーレートも半分の4800bpsになるのでROMのソフトウェアを変更する必要がありません。

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

2018-07-10 16:21 — asano

テーマ

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

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

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

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

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

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

2018-07-09 22:48 — asano

テーマ

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

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

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

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

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

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

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

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

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

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

2018-07-07 21:21 — asano

テーマ

カテゴリー

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

予想外に苦戦中です。

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

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

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

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

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

Z8613を動かす (その2:クロスアセンブラ)

2018-07-05 22:41 — asano

テーマ

ハードウェアが出来たら次はソフトウェアです。

Z8はハンドアセンブルできないほど複雑ではありませんが、アセンブラくらいは欲しいところです。今回のZ8だけでなくSBC6303ボードのHD63C03やMC6803、さらには手持ちのいろいろなプロセッサにも使いたいので出来れば多くのプロセッサに対応しているとありがたい。

ということで候補に挙がったのが「The Macroassembler AS」です。

開発ペースは遅い(というか止まっている?)ようですが、現時点でかなりの数のプロセッサに対応しています。8ビットが中心ですが、16ビット以上にも一部対応といったところでしょうか。マクロは使えますが、リロケータブルオブジェクトの出力は出来ません。

GNU binutils(の中の「as」)にも期待していたのですが、こちらは上とは逆で32ビットが中心で残念ながらZ8には非対応でした。

Z8613を動かす (その1:ハードウェア)

2018-07-04 22:41 — asano

テーマ

カテゴリー

Z8613でパッケージの一部が欠けていると書きました。ただ心配していてもしょうがないので実際に動かしてみることにします。

Z8613 テストボード
とりあえず簡単なテストが出来るボードを作ってみました。

クロックは8MHzの発振器、それにリセット回路を付けています。

何かするたびにROMを書き直すのは面倒なのでシリアルポートも用意しました。パラレルポートにキーとLEDを付ける手もありますが、動かすまでが大変なので...

シリアルなら次のように順を追って試すことが出来ます。

  1. 固定文字の出力(いわゆるHello, worldのようなもの)
  2. エコーバック
  3. モニタプログラム

1なら数十バイトのプログラムで出来るはずです。モニタまで動けばROMを書き直すことなくポートを弄ったりできるようになります。

HD63A03RP と SBC6303ルーズキット

2018-06-27 23:00 — asano

テーマ

カテゴリー

MC6803との比較用に国内のショップからHD63A03RPを入手しました。

HD63A03RP
日立がMC6803をCMOS化したもので、これは1.5MHz版です。

日立のデートコード(3桁)は年が1桁しかないので製造年が特定できません。1985年か1995年か、日立ロゴがあるので2005年や2015年ではないのでしょう。

自分で回路作って確認したいところですが、ちょうど良さそうなキットがありました。「電脳伝説」のvintagechipsさんのSBC6303ルーズキット、スイッチサイエンスで購入できます。

これは基板のみなので部品は全て別途調達する必要があります。

マイナーなZ80周辺LSI

2018-06-17 22:25 — asano

テーマ

カテゴリー

昔のプロセッサ誌を調べていたらZ80の面白い周辺LSIの紹介記事「Z80 GLU と Z80 SPCT」を見つけましたので、今回はこれについて書きたいと思います。現物を持っていないので写真は無しです。

まずはZ84C80, Z84C81 Z80 GLU(General Logic Unit)です。

これはよく使われる以下の機能をまとめたものです。

  • クロック発振器
  • DRAMコントローラ(アドレスのマルチプレクサも含む)
  • ROM用のアドレスデコーダ
  • メモリあるいはI/O用のアドレスデコーダ
  • リセット回路・ウォッチドッグタイマ
  • WAIT挿入回路
  • Z8500系デバイスとのインターフェイス(Z84C80のみ)
  • パワーダウンモードへの移行(Z84C80のみ)
  • GPIO

一部のピンは共有になっているので同時に全てが使えるわけではありません。