スパイス  組み込み制御装置の受注製作

関連情報(ブログ)


   はじめに
 HPを立ち上げるにあたって、単にこちらのPRだけを書いても対象とする人たちに見てもらうことは難しいだろうと考えていました。やはり何らかの情報を求めている人に対してある程度の情報提供ができることが必要と考え関連情報を少しずつでも書いていくことにしました。
  では何について書いていくか?
 当然、業務に関連した内容を書くべきです。しばらく時間をおいて考えたのですが、比較的新しい情報は多くのHPに記載があります。PICやARMといった組み込み用CPUに関するブログや電子回路に関する記事は、私よりも遥かに上手な説明がなされています。私の出る幕は無いでしょう。

 そこで最初は、20〜30年程前の汎用マイコンを使用した設計方法について書くことにします。z80(i8080, i8085などを含む)やi8086(V40, V50などを含む)は比較的多く使用され、一部は現在も現役で動作しているようです。これらシステムの一部修正や新規に基板を起こすときには当時の開発環境が必要になります。少数でしょうが古いシステムの維持管理を任された(押し付けられた??)人には参考になると思います。
 この当時の汎用マイコンを使った設計手法は現在のようなワンチップマイコンを前提とした設計手法とは異なります。当時の汎用マイコンの主用途は組み込み装置ではなく、PCなどのOA機器でした。PC上ではC言語でのプログラムが広まる一方で、組み込み装置でC言語が使えるようになったのは随分と後になってからです。多くはアセンブラ言語が使用され一部でForth言語などの高級言語??が使用されていました。一部の人はPC用のC言語を組み込み向けにROM化できるように移植した環境を作って使用していました。当時この移植作業を行うだけの知識を習得するのは非常に大変であったろうと思います。現在のインターネットのような自由に情報を得る手段がなかった当時はミニコン由来のCコンパイラの基本的な構造をある意味で最下層のマイコンアプリケーションプログラマが知る術は極めて限定的であったと思われます。組み込み向けを謳ったCコンパイラが入手できるようになった(ある程度の知名度を得た)のは、更に後になってからです。
 現在、当時の汎用マイコンの多くでROM化を謳うCコンパイラを入手可能です。しかし、その選択肢は思った以上に狭く、今現在でも入手できるものは限られています。i8086向けではLSI JAPAN社製LSIC-86が有名でしたが、既に販売終了しています(なお、同社にはi8080向けのLSIC-80もあったのですが、同じく販売終了です)。多摩ソフトウェア社製Light Cはまだ入手可能なようです。z80向けには秋月電子通商よりガイオテクノロジー社製Cコンパイラが入手できます。
 他にはSDCCのようなフリーのCコンパイラもありますが、一部にバグが残っているとのネット書き込みもあるため考慮には入れていません。となるとi8086, z80向けで各々1種類しか選択肢が無いのです。無いよりは遥かにましですが、これではあまりにも寂しい。デバッグ途中でどうしてもバグの原因が分からずに悩むときには他のコンパイラを試したくなるときがあります。大部分は自分の書いたプログラムが悪いのですが、選択肢があればすぐに実行できることが選択肢が無いために出来ず悩み続けるのは辛いものです。そして、むしろこちらのほうがより重要なのですが、複数のコンパイラを通すことでより正確なC言語の理解につながります。かつてlintというC言語用の構文検査プログラムがあったそうです。私は使える立場には無かった(当時は回路設計の専任だった)のでどの程度依存できたかは不明ですが、基本部分で誤った認識を持っていると非常に単純なミスでさえ気がつかないものです。

 そこでz80向けの開発環境を実際に作って、その経緯を記録していくことにします。z80を選んだ理由はz80用の開発環境を持っていないためです。i8086向けにはLSIC-86を保有しているので困ることは無い(非常に出来のいいコンパイラです)のですが、何故かz80とはこの10年以上縁がなく必要性が無かった。
 具体的には、秋月電子通商製SuperAKI-80を購入し、これにデバッグ用のリモートモニタプログラム(以下モニタプログラムと略す)を移植します。SuperAKI-80にはAKI-80モニタROMと上記のCコンパイラが付属しています。しかし、このモニタROMはシステムロード社製のBASIC用らしく、通信仕様やコマンド内容の記載がありませんので使い方が分からないのです。手間隙かけて調べるよりは、他のマイコンで実績のあるモニタプログラムを移植する方が後々便利です。何よりも複数のマイコンで操作方法が統一できるのは大きなメリットです。

 これと平行してPC用Cコンパイラの移植を検討します。上記のCコンパイラは比較的新しい(とはいえ2000年頃のもの)のでバグを心配するのは老婆心かもしれません。しかし保険的な意味合いから別の選択肢も持っておきたい。コンパイラの金額から見てメーカーの技術サポートは望めないでしょう。調べた所CP/M用のCコンパイラならここから多数入手できます。大半が非常に古いので使い物になるかどうかから検討が必要です。最終的にあきらるしかない可能性も高いのですが、これらの検討過程にも多少の有意性はあるでしょう。
 従って、最初の課題は旧世代の組み込みCPU開発環境環境とします。

(平成26年5月1日 追記)
 最低限の開発環境が出来たので、次はマルチタスク機能を実装します。組み込み装置では何らかの方法でマルチタスクを実装しないとプログラムが非常に読み難いものになってしまいます。マルチタスクといってもRTOSと呼ばれるような多機能なものである必要は無く、むしろ単に複数のタスクを単純に切り替えてくれるだけの機能で十分です。特に旧世代のCPUではCPU自体の性能が高くは無いので出来るだけ単純でCPU負荷の小さなものの方が向いています。
(追記ここまで)

1.旧世代の組み込みCPU開発環境環境
 上記の検討によってz80 CPU用にモニタプログラムとCコンパイラの移植を検討します。出来るだけ市販製品を見つけて購入した方がいいのですが、既に入手困難であったり組み込み向けではないOS向けCコンパイラしか入手できない場合に参考になりそうな情報を書いていきます。関連情報をご覧ください。

(平成26年5月1日 追記)
2.マルチタスク機能の実装
 マルチタスク機能の実装では通常、ある時点でのタスクコンテキスト(CPU内部状態のコピー)を保存することで実現します。しかし、この方法以外にも実装の手段はあります。コルーチンと呼ばれる方法ですが、両者には一長一短がありどちらかのみを使用するよりも両者を組み合わせて使用する方が有利です。このため両方を実装してみます。
(追記ここまで)

旧世代の組み込みCPU開発へ              関連情報(ブログ)目次