初歩のラジオに連載したアナログシンセの製作記事(1977年1月号~1978年3月号)に続いて、当時まだ黎明期(1977年創刊)でありながらこの分野ではI/O誌と双璧をなしていたASCII誌に連載(1979年4月号~7月号)した「NAKAMOZU Tiny Basic」と呼ぶTiny Basic インタプリタの製作記事を紹介します。
「なぜアナログシンセ連載の直後にTiny Basicなのか」と言うと、
初ラ連載の前には既に山西一啓氏製作のアナログシーケンサを使用しており、次はマイコンを使って一曲丸ごと演奏できるシーケンサを作りたいと考えていました。
初ラ連載が終わり本格的にマイコンの開発を始めると、それはそれは刺激的で面白く、当初の目的はさておきマイコンのハード・ソフトの開発に突っ走ってしまいました。(結果的にシーケンサはできておりません)
その結果、アナログシンセに関しては長い長いブランクになりました。
ASCII誌への私の連載は4回で終わりましたが、大阪府立大学仲間の乾謙一氏が私のTiny Basicのデバッグをかねて様々なアプリソフトを作成してくれており、ASCII誌の「Tiny Basic News letter」というコーナーにその後も続々と素晴らしいゲームソフトを公開されました。(NAKAMOZU Tiny Basicそのものよりもこちらの方が注目されるようになった程です)
私の方はASCII連載後には、次はコンパイラという意気込みで1年くらいで構造化Basicのコンパイラが完成、仲間内ではグラフィックを使ったゲームや、アセンブラの代わりに使われておりましたが、既に社会人の身のため雑誌に発表する時間も無く、残念ながらその存在そのものが消えてしまいました。(時間があれば発掘したいとは思いますが・・)
1970年代後半、NMOSプロセスの8bit CPUの双璧(Intel 8080とMotorola 6800)が日本橋のパーツ店でも入手可能になり、80系、68系と呼ばれそれぞれ信者を獲得していました。それらのCPUにSRAM や I/O(PIAやACIA他)を配線してコンピュータが自作できる時代になり、そうして完成したコンピュータのことは「マイコン」、作る人たちはホビーストと呼ばれていました。
いちから自作する以外に、CPUのチップメーカが評価用に開発したワンボードマイコンを拡張する方法もありました。(後に、各社から登場する完成したパーソナルコンピュータは、32KB程度のMicro Soft のBASICインタプリタがROMに搭載され電源オンですぐ使える製品でしたが、その少し前の時代です)
当時のマイコンでは、機械語よくてアセンブリ言語でプログラムを作るのが普通でしたが、プログラムサイズが僅か2KB程度で当時のマイコンのリソースにフィトしたTiny Basicと呼ばれる高級(?)言語が登場し注目を集めていました。当時ミニコンで作られていたスタートレックのようなゲームが作れる最小限の仕様(16bit 整数固定)でした。
Tiny Basic は開発された地域名を冠することが通例で、
元々ユーザの多い80系では、米DDJ誌にソースが載ったPalo Alto Tiny BASICが有名で、日本ではこれを東大が移植して東大版として公開、68系では少し遅れて電気通信大学が電大版を開発しました。
また、ASCII誌の創刊号で紹介されたVTL (Very Tiny Language)[http://middleriver.chagasi.com/electronics/vtl.html]
と呼ばれるさらに小さな記号言語(768 Byte)やこれをベースにしたGameと呼ばれる言語なども紹介され、多くの人がこの範疇の言語創造を競いを活発に開発し雑誌に発表するという時代でした。
当時大阪府立大学の学生で、初歩のラジオの連載が(大学4回生~M1)で、ASCII連載は松下電機産業に勤務開始と同時(4月から)でした。当然 NAKAMOZU Tiny Basic の開発は、その前ですのでM2のときです。(今考えるとちゃんと学業をしているとは思えないですね)
大学院で電子工学を専攻していた私は、友人数名と6800 CPUを使ったAltair680のようなミニコンタイプのマシンを製作し研究室に置いていました。
もちろん学業とは無関係で、日々研究室でマイコンばかり触っていました。(モジュラーシンセは自宅です)
最初の内は、パネルのスイッチを使って(DMAでSRAMに)機械語を書き込み実行していましたが、暫くしてキーボード、CRTディスプレイ、カセットテープインターフェースも作り、高級言語が使える環境になりました。
写真が残ってないのでモデルにしていたAltair680の写真です。
最初はASCII誌のVTLを移植しVTL版のスタートレックなどを動かしたり、
ASCII誌にソノシートで付録に付いたSWTPC 4K BASIC(68系)を移植して動かしていました。
このBasic はたった4KBで実数演算の本格的なもので数値演算などの数学的な用途に使える素晴らしいものでしたが、エクセルと同じように実数表現に効率の悪いBCD(10進数)が採用されており、また大型コンピュータからの移植と思われるおおらかな内部構造のため大変遅く、ゲームには全く不向なものでした。
このコードの逆アセンブルリストを通学中に読解しインタプリタの仕組みを勉強させて頂き、これを反面教師としてより高速なTiny Basicを作ることになりました。
私が開発したこの言語は、同じ68系で当時速いと言われていた電大版を解析して(当時は他人のソフトを解析して参考にすることは気にしておりませんでした。)大いに参考にして開発しました。大阪府立大学のある堺市中百舌鳥(ナカモズ)の地名をとって名付けました。
名前が長いため、知られるようになるにつれ"NTB"と略されることが普通になりました。
ASCII誌上で、しばしば各Tiny Basicのベンチマークが行われており、
開発の目標を、「最速」「多機能」「グラフィックサポート」を目指したもので、当時存在したTiny Basicの中では最高速だったと思います。
ソフトウエアを発表するには、そのハードウエア・プラットフォームが決まっていることが前提になりますが、当時プラットフォームと呼べるものは自作や評価ボードを含めてバラバラで、特定のプラットフォームに限定することは難しい状況でした。 その代わりにプロセッサは80系と68系の二択で、それまで公表されたものは、プロセッサは限定されますが、自分のプラットフォームに合わす部分は自分でコードを作って移植するのが普通でした。(BASICの場合、I/Oルーチンは自分で作るものでした。)
NTBは、私の自宅の環境であり当時68系ではユーザが多かった日立のワンボードであるH68TRを仮のプラットフォームとしました。(当然移植のための情報を公開) しかし、H68TRは当初ディスプレイ・インタフェースが無く、私のシステムでは専業メーカーのキャラクタVRAM(ビデオRAM)を改造して使用していましたので、表示ルーチンは私のシステム依存のものになってしまうのが、発表に際しての悩みでした。
発表時点では、日立のH68純正のVRAMであるH68TVが発売されていたので、それをプラットフォームにすればよかったのですが、私が持っていないのとCPUアクセスに制限がある設計であるため好きではなかったので、H68TVのユーヘザー向けの移植記事は編集部にお任せしました。
特にTiny Basicのなかでは後から発表し、高速高機能に加えてグラフィック機能を持つことが売りでしたので、ディスプレイ・ハードウエアとの関係が密になり、ハードウエアの改造方法などと一体のわかりにくい記事になってしまい、ハードもソフトも分かる人しか相手にしない物になってしまいました。(当時はそれで何が悪いと思っていましたが)そのせいで結果的には、あまり多くの人に使ってもらうことができなかったように思います。
・NAKAMOZU Tiny Basic(NTB)とは? / NTBを走らす方法 / 特徴 /
移植のための変更箇所 / インタプリタの構造と高速化 / I/Oルーチンの作り方
NTBの特徴のアピールのためにグラフィック系の多くのサンプルプログラムを編集部に送りました。それらが記事の周りに散りばめられたチープな誌面になりました。
・NAKAMOZU Tiny Basic ユーザーズ・マニュアル
変数・配列・定数 / COMMAND / STATEMENT / FUNCTION / FORMATTER / ERROR MESSAGE
他のTinyBasicと同様の変数に加えてIX変数(ポインタ)が使えます。
定数は、10進に加え16進数とASCIIコードが使え、16進数でのプリントもできます。
FOR-NEXTループ以外に、DO-UNTILループを追加し、IFとGOTOを使用するループを不要にし少しだけ構造化し速度UPしました。
グラフィック関係の関数を追加し、ゲーム用にリアルタイムのキー入力関数を設けました。
・DUMP LIST ( Object Code)
DUMPリストはこのようなソフトを入力する普通の形態でした。私のすべてのリストは、自作の放電プリンタでプリントしたものです。8とBなどの読み違えが起こりがちなのでチェックサムを付けています。
・H68/TR・TV用シンプルI/Oルーチン
純正のディスプレイボードH68・TVのユーザのための移植方法の説明で、私のI/Oルーチンをそのまま使い、純正のTVモニタルーチンに直結するもの。
・NTBインタプリタの構造
インタプリタの構造 / 上位管理ルーチン / 代入処理ルーチン / GOSUB RETURN, DO UNTIL処理 / FOR NEXT処理 / グラフィック用ハードウエア
スタック処理が弱い代りにメモリアクセスが強い68系の特徴を活かして、ハードウエアスタックの他に、演算用スタック、リターンスタック、FOR-NEXTスタックなどをソフトで構成しています。そのためエラー処理が容易になっています。80系ではひとつのハードウエアスタックですべて処理をすることが多いです。
・H68/TR・TV用I/Oルーチン
グラフィックを含めて純正のH68・TV用に移植したI/Oルーチンです。
・プログラミングとグラフィック・エディタ
グラフィック用ソフトウエア / NTBによるプログラミング / GRAPHIC EDITOR
グラフィックキャラクタでありながらドット単位で描画できるグラフィックハードを活かし、ドット単位で描画した画像から自動でグラフィックキャラクタをのプリント文を生成します。
・H68用I/Oルーチン ソースコード
私が作成した高機能I/Oルーチンです。編集部のミスでこれの掲載が遅れました。
・ファイル入出力ルーチンとプログラム例
カセット入出力 / (Sample)バリケードゲーム / (Sample)πの計算 / 最後に
NTBアプリケーションとして開発された乾氏のゲームソフトは、あまりのできの良かったため、後のASCII誌上で「乾氏に挑戦」と銘打ってNTB以外に移植するのが流行りました。
・NAKAMOZU TinyChess ( 1979/5 )
・The Othello 必勝手順探索ルーチン付き( 1979/6 )
・NTBゲーム4種 / Space Invader / 3D-MAZE / バレーボール / 無限次ドラゴンカーブ ( 1979/8 )
・NTB 2D-4M HAMLET ( 1979/11 )
・NTBによる連珠 人間に全勝しています( 1980/2 )