今思えば1981年夏から1985年春にかけてS社の厚木工場に勤務した頃が私がプログラマーとして一番仕事が出来た時代だった。一般に20歳前後から27歳頃までが最も意志も記憶力も集中力も充実した年代だから当然だろうが、それ以降の30歳前頃からは年齢のせいかプログラマーとしてはお茶を濁すような仕事しかできなかった。

 

厚木工場で最初に担当したのはハンドヘルドコンピュータの試作機のタイマースケジューラというアプリ開発の仕事だった。ハンドヘルドコンピュータは片手で持てる程度の大きさで二行の液晶表示をもっていた。確かCPUはモトローラ6800でそのアセンブリ言語でアプリを書いていたように思う。そのアプリの概要と要求仕様は出来ていたので、比較的楽な仕事だった。

 

そのハンドヘルドコンピュータは試作機の段階で企画が潰れた。当時、インテル系のZ80CPUを使ったデスクトップ型コンピュータの開発設計が商品化に向けて大詰めを迎えており、そちらに集中したいという部のトップの意向もあったのだろう。

 

私にとっては試作機の段階でポシャルのは初めての経験だったが、S社では試作機の段階で中止になる場合も多かった。ただこの時は部のソフトウエア部隊のトップが慰労会と称してハンドヘルドコンピュータのソフトウエアに関わった三名を自宅に呼んで夕食をご馳走していただいた。それはS社でも最初で最後の経験だったが、ローストビーフと食後にはマティーニやアレクサンダーという名前のカクテルまで出た。私の他の二名はソフトウエア部隊全体のOSと開発環境担当の先輩とシステムソフト担当の先輩、二名とも有名大学の工学部情報系の大学院修士卒で中途採用は私一人。唯一の救いは一年二年とはいえ中途採用の私が年齢が一番下だったことだろう。

 

S社には大学院修士卒が多くいた。1981年4月の新卒入社組にも修士卒が多くて私も1981年入社組に入れたもらった場合は、私は経験が一年余りしかないので中途採用でも年齢が同じか一年下となる場合が多かった。修士は二年なので1981年入社組では修士卒で私が一年下、大学一浪で私と同じ歳、現役大卒で私が一年上となる。

 

さて私がC言語を覚えたのはS社に入ってからだが、開発環境担当の先輩は大学時代からC言語の専門家だったそうだ。当時、Z80CPU用のC言語コンパイラとしてBDS-Cを使っていたが、その先輩は関数の定義はC言語記法で内容はZ80のアセンブラ言語で記述したソースコードを処理できるアセンブラを開発されてもいた。勿論、アセンブルした後のオブジェクトコードはBDS-Cでリンクできた。私はそのアセンブラを使ってC言語の関数の内部をZ80のアセンブラ言語で記述したソースコードを多く作成した。ファイル操作はOSを使用するがそれ以外のハードウェアはI/Oポートを直接叩く場合が8bitCPUの時代はほとんどだったので、私はI/Oポートを叩く関数は基本的にこの方式で記述していた。

 

Z80CPUを使ったデスクトップ型コンピュータは、SMC70という名前で商品化された。ハンドヘルドコンピュータの仕事がなくなった私はその後SMC70のデモプログラムを書く仕事がまわってきて、いくつかのデモプログラムをBASICで作成した。

 

BASICと言えば統合開発環境Visual StudioやVisual Basicを思い浮かべる人が多いと思うが、当時はAppleⅡでCP/MというOSの上にMicrosoft製のBASICインタプリタが動作していた。Microsoftは最初BASICインタプリタのメーカーだった。その後、MicrosoftはIBM PC上にMS-DOSというOSを開発し、WindowsやOfficeへとつながっていくことになる。IBM PCはPC/ATへと進化してNECのPC98とともに1980年代中頃にはパソコンという名称が一般社会に定着した。

 

<追記開始>

この辺の事情に詳しい友人によると、AppleⅡのCPUはZ80ではなかったが、Z80を載せた拡張ボードをさすとCPUがZ80に置き換わり、CP/Mが動作したとのこと。

<追記終了>

 

SMC70はMicrosoft製のBASICではなく北海道のシステムハウスBUGが開発したBASICインタプリタを載せていた。SMC70の周辺機器の一つGPIB I/Fと測定機を組み合わせたデモプログラム作成を依頼された際、開発用の試作機の3.5インチフロッピーディスクの信頼性が低くかったので、仕方なくBASICデモプログラムを音声入出力端子につないだテープレコーダーにセーブしたこともあった。

 

SMC70デモプログラムの一つにレーザーディスクプレイヤー(LDP)と組み合わせて、LDPをRS232C経由で操作するというものがあった。当時、S社のLDPにはRS232C I/Fが付いていたので、SMC70のRS232C端子からLDPにコマンドを出力するだけでいい。そのBASICデモプログラムを作る為に私はまずBASIC拡張コマンドパッケージを作ることにした。BUG製BASICインタプリタにはコマンドを拡張できる機能があり、その機能に則してアセンブラ言語で拡張コマンド追加コードを書けばLDP用の拡張コマンドを簡単に追加出来たからだ。

 

このSMC70とLDPを組み合わせたデモは新たな要求を生んだらしい。LDPの画像の上にSMC70で作成したテロップをスーパーインポーズしたいという要求だった。その為に外部同期がかかるSMC70Gが開発されて、私は自然な流れでSMC70Gのグループに入った。

 

SMC70Gの仕事でまず手掛けたのが日本語のテロップ作成ソフトだった。既にSMC70上で日本語ワープロソフトが開発されていたのでそのかな漢字変換を移植する必要があったが、日本語ワープロのかな漢字変換部分の移植方法の調査はその当時中途採用で入社されたソフトウエア技術者の方に担当してもらった。

 

この日本語テロップ作成ソフトで考慮したのはその操作性だった。テロップは黒色で縁取りをする場合が多いので、テロップの文字自体はSMC70のグラフィック面に書く必要があるが、日本語メッセージやかな漢字変換の入力部分はキャラクタ面に表示したかった。SMC70のグラフィック面は表示更新に少々時間が必要でタラタラという感じで更新が目に見えるがキャラクタ面の更新は即時で表示を消すのも一瞬だったからだ。それにキャラクタ面を消去すればテロップをスーパーインポーズしたビデオ画面をグラフィック面の更新なしにすぐ録画できるという利点もあった。

 

ところがSMC70のキャラクタ面は縦横8dotx8dotのASCII文字しか表示できず最低でも縦横16dotx16dot必要な日本語を表示する機能はなかった。

 

ただ日本語メッセージやかな漢字変換の入力部分は1行で30文字もあれば足りるのは明らかだった。そこでキャラクタ面で縦横16dotx16dotの日本語を表示する方法を考えた。キャラクタ面にはASCII文字の縦横8dotx8dotのフォントを定義できる機能があったので、その機能を利用することを思いついた。

 

キャラクタ面の最下行の2行を使用するとして、例えば"漢字"という日本語をキャラクタ面に表示する場合は、まず"漢"の縦横16dotx16dotフォントデータを漢字ROMから読みだして縦横16dotx16dotの左上の8dotx8dotの部分をASCII文字コード080hのフォントとして定義する。次に縦横16dotx16dotの右上の8dotx8dot部分をASCII文字コード081hフォントとして定義する。同様に16dotx16dotの左下の8dotx8dot部分を082hフォントとして16dotx16dotの右下の8dotx8dot部分を083hフォントとして定義する。そしてキャラクタ面の最下行から1行上の最初の文字コードに080hを出力し、次の文字コードに081hを出力する。次に最下行の最初の文字コードに082hを次の文字コードに083hを出力すると、キャラクタ面の最下行の最初に日本語の"漢"が表示される結果となる。

 

つまりキャラクタ面の最下行の2行分に割り当てるASCII文字コードを決めておいてそのASCII文字コードのフォントイメージを書き換える方法で日本語を表示した。

 

フォントを書き換える文字コードは普通使わない半角カナの080h~0ffhまでの128文字を使うことにして日本語を1行30文字表示するにはその4倍の120文字のフォントイメージを書き換えればよい。実際にどのASCII文字コードを最下行の2行のどの部分に割り当てたかは忘れたが、こうして即時に表示更新ができるキャラクタ面での日本語表示機能が生まれた。

 

SMC70に続いて外部同期機能を加えたSMC70Gが商品化されて、私が担当した日本語テロップ作成ソフトもSMC70Gの周辺アプリソフトとして単独で商品化された。

 

日本語テロップ作成ソフトはかな漢字変換の入力部分の移植方法のみ他の人の協力を仰いだが、基本仕様から開発商品化まで一人で担当し私個人としても初の商品化ソフトとなった。派遣会社のC社からS社へ転職した甲斐があったと実感できた。

 

SMVC70GはNTSC仕様に加えてPAL仕様も商品化され、日本と米国、欧州で販売された。

 

プロポーショナルフォントを使用した英語版テロップ作成ソフトも同僚の人が開発商品化した。私はさらにSMC70GとLDPを組み合わせて店頭表示等に用いるBASIC拡張コマンドパッケージも開発商品化した。確かこれは日本語版と英語版があり日本語版は日本語テロップ作成ソフトで作成したデータファイルを表示できたし英語版は英語版テロップ作成ソフトで作成したデータファイルが表示可能だった。

 

その英語版BASIC拡張コマンドパッケージはプロポーショナルフォントを読み込むためのデータ領域を確保する必要があったが、拡張コマンドパッケージはあくまで拡張コマンドを加えるだけなので、そのプログラムサイズは出来るだけ小さくする必要があった。そこでBASICのDIM文を使ってアプリ側で必要なデータ領域を確保してもらいそのデータ領域にプロポーショナルフォントを読み込んで使用することにした。

 

また英語版テロップ作成ソフトで作成したデータファイルはその作成順にテロップが保存してあったが、作成順ではなく画面の上部から順に表示できるスイッチを加えて、そのデータファイルを小さいバッファにseekしながら読み込んで画面位置を取り出し位置でソートして表示する順番を決め、あらためて最初からseekしながら画面上部から順に表示できるような機能も追加した。

 

英語版BASIC拡張コマンドパッケージは欧米で発売されたが、ある時海外営業の方から雑誌のコピーを渡された。それは当時米国で発刊されていたコンピュータ雑誌BYTEの英語の記事のコピーで、私が担当した英語版BASIC拡張コマンドパッケージの内容を説明したものだった。プログラムサイズの小さい商品だったので拡張コマンドの仕様も自分一人で決め短期間で開発商品化したものだったが、雑誌の記事になっているとは意外だった。勿論、S社のソフトウエア商品だから取り上げてもらえたのだろうが、担当者としては非常に光栄なことと言える。

 

その後、私が担当したSMC70GアプリはS社のビデオ編集機のキュー信号を検出してテロップのスーパーインポーズ表示を切り替えるソフトだった。ビデオ編集機からのキュー信号は確か音声入出力端子に入力していたように思う。音声入出力端子の入力に該当するI/OポートのビットのOn/Off変化を検出するのだが、Z80CPUの動作クロックからnopを含む各命令の実行速度を計算してタイミングを計ることにした。

 

ただ対象となるビデオ編集機は複数ありそれぞれキュー信号の波形が異なるので、機種を特定するためにも編集用のタイムテーブルを作成する機能が必要で、タイムテーブルの作成と実行、さらにはテロップのワイプイン/ワイプアウト機能もキャラクタ面を使って実現した。キャラクタ面のワイプはキャラクタ面をすべて020hのASCII文字のスペースで埋め尽くして文字の背景色をスーパーインポーズの抜く色に指定するとキャラクタ面の背後にあるグラフィック面が消えて、文字の背景色を透明に指定すると背後のグラフィック面が見えるという特性を利用したものだった。

 

このワイプ機能のソフトは、同僚で先輩のハード屋さん(東大工学部卒)が作られたものを使っていて、オリジナルはLISPのような再帰呼び出し方式だったが商品化に際してスタック不足の可能性を排除する為に、私がループ方式に変更した。

 

S社にはハードもソフトで出来るハード屋さんが複数いて、私は尊敬していた。

 

そのタイムテーブルは確か時間、スーパーインポーズモード、操作の横3個の固定欄を持つもので、各欄の文字数も固定だったが、操作欄だけは表示する文字数より入力編集できる文字数の方が多くて文字を横スクロールして表示や入力編集できる仕様にしていた。時間の欄には指定時間待つ他にビデオ編集機のキュー信号を待つ指定も可能だった。

 

このタイムテーブル作成部分は簡単なテキストエディタであり、当初は各欄を上下左右に移動するカーソル移動モードと特定の欄の入力編集を行う入力編集モードを分けていたが、QA(品質管理部)の要望により表計算ソフトのように明確にカーソル移動モードと入力編集モードを分けない操作方法に変更した。つまりASCII文字キーを押せばそのカーソル位置に文字が入社もしくは置き換えられて、上下キーを押せばすぐ上下の行の同じ欄にカーソルが移動する。入力/置き換えモードはInsキーで変更可能で、左右キーで欄の内部のカーソル移動、Shift+左右キーで左右の欄の移動、またTabキーで下行を含めて次の欄に移動する。

 

そのファイルは欄をセミコロン(;)で区切った単なるASCII文字のテキストファイルだった。その内部処理ではタイムテーブルのテキストデータの内容を行単位に展開した内部データを持つ方法もあったが、出来るだけ大きなタイムテーブルを作成できるようにしたかったので、内部で行単位に展開しないでテキストデータの各行にポインタを付加しただけのデータ構造にして、テキストデータを部分的に移動伸縮させながら入力編集する処理とした。なおタイムテーブルの実行時にはテキストデータを1文字ずつ読んで解釈する方法をとった。

 

このSMC70Gアプリは、ワイプ機能以外はすべて私がゼロから開発したプログラムで、なかなか面白くて印象深いプログラミングだった。

 

また厚木工場時代にSMC70G関連で初めて中国に海外出張することになったが、その話は次回にまわしましょう。