2017年8月7日月曜日

番外編〜8bit MPUの時代・どうして半導体屋になったのか?

はじめに

2016年6月にスタートしたこのブログ、2017年7月末に10万アクセスを頂きました。非常にありがたいことです。いつもありがとうございます。感激しています。

今回は、10万アクセス記念というわけでもありませんが、いつもと毛色を変えて、番外編として、筆者が半導体メーカーに就職することを決めたきっかけを書こうと思います。

筆者が半導体に興味を持ち始めたのは、学生時代のパーソナルコンピューターとの関わりがきっかけでした。


1980年代のコンピューター環境

父親が仕事で大型計算機を扱っていたこともあって、子どもの頃からコンピューターという機械には漠然としたあこがれを持っていましたが、筆者が大学生になった1980年代、日本でも色んなメーカーからパーソナルコンピューター(以下パソコンと記します)が出始めて、パソコンを個人で持つ人達が増えていったように思います。

大学生協にも色んな機種が置いてありました。16ビット機としてはNECのPC-9801シリーズ、富士通のFM-16βシリーズ、8ビット機ではNECのPC-8001シリーズやPC-8801シリーズ、富士通のFM-7シリーズ、シャープのMZシリーズやX1シリーズが人気機種でした。

そんな中、筆者が持っていた(買ってもらった)のは富士通のFM-77L2という機種でした。

富士通のパソコンと他社のパソコンの決定的な違いは、他社製ではCPUとしてザイログ社のZ80が使われていたのに対して、富士通の機種はモトローラ社のMC6809が使われていたことでした。(細かいことを言うと、セカンドソース品であるMBL68B09EだとかHD68B09Eとかでしたけど、ここではMC6809と統一して書いておきます。)

実は、もっと大きなコンピューターとしてのアーキテクチャ上の違いがあるのですが、それはまた別の機会に書こうと思います。

その頃のほとんどのパソコンにはBASICが搭載されていて、電源と投入するとすぐにBASICのプログラミングが出来たり、フロッピーディスク、カセットテープに保管してあるプログラムを呼び出して実行させたりすることができました。

この、BASICの範囲内で使っている分にはCPUに何が使われているかというのはあまり問題になりません。

しかし、8ビットパソコンを使っていると、BASICの世界では飽き足らず、機械語でプログラミングをする世界に入っていくことになります。そうなると、CPUに何が使われているかが、とても大きな問題となります。なぜなら、CPUが違うと、プログラムは全く違うものになるからです。

「FMマシン語活用レクチャー : ビギナーズプログラミング&アセンブラ FM-7/NEW7/77/8 川合宏之 著」

と言う本を入手して、しばらく勉強しました。

MC6809の大きな特徴


MC6809は、レジスタ構成は16ビットCPUのような汎用レジスタの構成ではなく、アキュムレーター、インデクスレジスタ、スタックポインターなど、用途の定まった構成になっていましたが、アドレッシングモードの豊富さ、多機能な命令セットなどから当時、究極の8ビットCPUと呼ばれていました。

たとえば、MC6809には、16ビット以上のCPUなら普通に持っている、インデクスアドレッシングの自動インクリメント/デクリメント 機能を持っています。近年の8ビットCPUは持っている機能ですが、1979年当時にこの機能を持っていたCPUは他にないのではないでしょうか。

このように高機能なMC6809ですが、プログラムコーディングに関連した2つの大きな特徴がありました。

リロケータブルなプログラムを作ることが出来る


同じプログラムをメモリー上のどこに置いても正しく動くようなプログラムを、リロケータブルなプログラムといいます。プログラムをメモリーのどこに置くか、ということは、BASICやその他の高級言語では全く意識しなくても良いものですが、機械語のプログラムではとても重要です。

リロケータブルなプログラムを書くためには、分岐命令の飛び先を相対的に指定できること、アクセス先のメモリーのアドレスを相対的に指定できること、という機能がCPUに要求されます。もしもこれがなければ、プログラムの格納場所を引っ越すたびにプログラムの再アセンブルが必要になります。

MC6809では、分岐命令の分岐先の指定として符号付き8ビット相対アドレス、符号付き16ビット相対アドレスの指定ができるようになっています。アクセス先のメモリーのアドレスを相対的に指定する方法として、プログラムカウンター相対アドレッシングというものがあります。もちろん絶対アドレスの指定も可能です。


リエントラントなプログラムを作ることが出来る


マルチタスクOS下でプログラムを動かす場合、もしくは再帰呼び出しで自分自身を呼び出すようなプログラムを書く場合、プログラムがまだ動作している途中で、そのプログラムを再び頭から動作させ、これが終了したら、また何事もなかったように元の動作を再開する、というようなことができるような書き方をしたい場合があります。

このような動きが出来るプログラムを、リエントラント(再入可能)なプログラムと言います。

リエントラントなプログラムを構成するためには、データ領域(変数)をスタック上に取るのが一般的で、MC6809にはスタックポインターをインデックスレジスタとして使うアドレッシングモードがあるので、簡単にこれが実現出来ました。

これらの特徴が、自分でプログラムを書くときにどの程度役に立ったかは難しいところですが、なんかとっても高尚なCPUを使っている気分にひたりながら、プログラムを書いて遊んでいたものでした。

その後


あまり大きなプログラムを書いたことはありませんが、その昔コンピューター雑誌(たしかI/O誌だったと記憶しています)に載った、BASE-09という高級マクロアセンブラのフロッピーディスクI/Oルーチンを書いたのが一番大きなプログラムだったと思います。

このBASE-09は、今は亡きキャリーラボが開発した、高級言語並みに書きやすい記法のマクロアセンブラで、Z80用のBASE-80とMC6809用のBASE-09があったのですが、BASE-09は外部記憶媒体がカセットテープしか準備されておらず、外部記憶媒体を呼び出す場所と、そのインターフェイス仕様が公開されていて、自分で書いてみてください、というようなことになっていました。カセットテープは非常に扱いにくいので、フロッピーディスクが何とか使えるようにしたいと思って、かなり真剣に取り組んだのでした。大きさは覚えてませんが、ソースが1000行を超えていたような覚えがあります。

このように、MC6809のプログラミングの世界に魅了されていったのですが、就職の時期が近づき、ソフトウエアは趣味でやるにとどめて、就職先はできればハードウエアメーカーに行きたい、という気持ちを持つようになったのでした。好きなことは趣味にとどめておかないと、壁にぶつかったときに逃げ場がないよ、というような話だったと思いますけど・・・

ソフトウエアの知識は、このブログにも何度か書いている実装機評価の話やスクリプト言語、正規表現の話などでもわかるように、就職してから色んな場面で自分を助けてくれました。これが逆だったら、自分を助けてくれるハードウエアの知識なんていうものはなかったわけで、間違った選択ではなかったんだろうと今でも思っています。

0 件のコメント:

コメントを投稿