工場で使われる計測機などを作る会社に就職しました。この会社は機械・電子回路・ソフトウェアの開発部門、さらに生産部門を持つ会社で、いろいろな装置を受託開発していました。私はキャッシュレジスター等に使われるプリンターを検査するための装置を作るチームにプログラマーとして入りました。
画像はイメージです
装置をコントロールするのは 8085やZ80といった8bitのCPUで、LinuxのようなOSはもちろん RTOS のような並行処理をハンドリングしてくれる基本ソフトも無く、センサーやタイマーからの割り込みを直接扱うプログラムをアセンブラーで書いていました。
センサーやタイマーからの割り込みは思いがけないタイミングでおきます、したがって状態等の変数はかなり注意深く考えて扱わないと、ときどき不思議な動作をするようになります。また機械を制御しているのでバグがあると、メカ思わぬ動作をし壊れてしまうこともありました。
私も初めて書いたプログラムを良くチェックせずにプリンターにつなぎ、いきなりモーターが凄い勢いで動き出しお客様のプリンターを壊してしまい、先輩にひどく怒られました。
デバッグのためのツールも ICE などの原始的なツールしかなくデバッグも大変でした。
したがって、その会社ではプログラムの開発には、
- フローチャートを書く
- フローチャートを先輩にレビューしてもらう
- 紙にコーディングする、コードの書き方はスマートさよりバグを起こしにくいコードを書くルールになっていました
- コーディングしたコードをタイプしてもらう
- アセンブルしオブジェクトを作成
- アセンブル時に印刷されたリストを自己レビュー
- オブジェクトをEPROMに焼く
- 実機にEPROMをさし、CPUソケットにICEを接続しデバッグを行う
- バグがあればICE上でプログラムに機械語レベルで修正し確認
- デバッグ結果をソースコードやフローチャートに反映
今では信じられないような大昔の開発スタイルですね !!
もうこのような開発スタイルに戻りたくはありませんが、OSも高級言語も無い環境でCPUやハードウェアに直接触れる開発経験は今から思うと貴重な体験だったかもしれません。