GMC−4を使ってみる

 付録に4ビットマイコンがついた『大人の科学マガジン vol.24』は、税込み価格で2500円でした。その付録のGMC−4(4-bit Gakken Micro Commputerの略らしいそうです。)は、本当の中味は8ビットマイコンだそうですが、表面上は4ビットマイコンの仕様になっており、4ビットマイコンと同じ振る舞いをする小さな『おもちゃ』になっていました。
 私がそれを本屋さんの店頭で見つけた時は、あんなことやそんなことができやしないかと小さな夢を膨らませていました。ビニールハウスの防犯システムの制御(コントロール)装置に使えやしないかと、雑誌の中をよく読まずに、もう一冊買ったりしました。しかし、雑誌中のマニュアルを読んでみると、「使用していないときはスイッチを切り、電池をはずしておこう。」とか「衝撃に弱いので、取り扱いに注意してください。」とか書いてあったので、屋外などの使用には耐久性がないことがわかりました。故障したらもったいないので、あくまで部屋の中で趣味として使うことにしました。
 この付録は、1981年に発売された『電子ブロックFX−マイコン』とほぼ同じ動作をするもので、それとほぼ同じ命令コード(コンピュータを動作させるための機械語のこと。)が使えました。そこで、その『FX−マイコン』のマニュアル(vol24manual.pdf)を、学研の『大人の科学マガジン』のホームページで見てみると、100種類の実験プログラム例が載っていました。
 私がなぜそのことを紹介したかには、わけがあります。『大人の科学マガジン vol.24』を買ったほとんどの人にとっては、この4ビットマイコンの付録は、すごく面倒くさいシロモノに見えたと思われるからです。過去にワンボード・マイコンをいじったことのある、私に近い年代の人たちにとっては、操作が簡単であると思われたかもしれませんが、パソコンやゲーム機やインターネットに慣れ親しんできた若い世代の人たちにとっては、これほど操作が難解なおもちゃも珍しいことでしょう。ネットの質問箱を見ても、GMC−4で動くプログラムを探している人がいるくらいでした。ゲーム機世代やインターネット世代にとって、このGMC−4は、何にもできない『おもちゃ』に見えることでしょう。添付された雑誌を見てみると、サンプルプログラムがいくつも載ってはいますけれども、何となくとっつきにくいような不便なようなイメージを受けてしまったかもしれません。
 しかし、嶋正利さんがこの世に初めて生み出された4ビットマイコンシステムと比べてみると、このGMC−4という『おもちゃ』のマイコンシステムは、格段に使いやすくなっていると私には思えます。『1』という命令コード一つでAレジスタの中味を数字LEDに出してしまうなんてことは、他のマイコンではありえないことです。例えば、TK−80やTK−85の場合は、ROMのモニター・プログラムのサブルーチンの一つを(CALL命令)+(そのサブルーチンの先頭アドレス)で呼んで、Aレジスタの中味を所定の4つの数字LEDのどれかに表示します。その場合の命令コードは、『XX XX XX』と3バイトもかかります。一方、GMC−4は1ニブル(1バイトの半分)で済んでしまいます。
 この余りに単純で、余りに役に立ちそうにないGMC−4という『おもちゃ』をどのように使ったらいいか。実は、そのこと自体に答えがありました。例えば、添付雑誌のサンプルプログラムの一つに『電子サイコロ』というのがありました。それをまず、GMC−4に記憶させてみましょう。
 最初にRESETキーを押します。すると、数字LEDにプログラムメモリの0番地の中味が表示されます。『A』キーを押して、その数字LEDに『A』を入れます。すぐ次に、INCRキーを押します。数字LEDには、1番地の中味が表示されて、0番地には先に打ち込んだ『A』が記憶されます。この手順を、「RESET→A→INCR」と表しましょう。
 同様にして、『1』キーを押して数字LEDにその『1』を入れます。すぐ次に、またもINCRキーを押します。数字LEDには、2番地の中味が表示されて、1番地には先に打ち込んだ『1』が記憶されます。この手順を、「1→INCR」と表しましょう。
 かくして、「RESET→A→INCR→1→INCR→ … →INCR→ … →INCR」というキーを押す簡単な手順で、GMC−4にプログラムを記憶させることができます。その命令コードの順番は次のとおりです。

電子サイコロのプログラムの
     命令コードの順番→ A 1 3 1 3 B 1 D 7 F 0 E A 1 0 F 0 2 F 0 E

 その最後の『E』までをGMC−4に記憶させたら、RESETキーを押します。すると、0番地に戻って、0番地の中味になっている『A』が数字LEDに表示されます。そこで、INCRキーを押せば、次の番地の中味の『1』が表示されます。さらにINCRキーを押せば、次の番地の中味の『3』が…、というふうに、GMC−4に記憶させた内容を順番に見て確認することができます。つまり、「RESET→INCR→INCR→INCR→INCR→ … INCR→INCR」という操作を数字LEDを見ながら順におこなっていくのです。それで、電子サイコロプログラムの命令コードが正しく順番に記憶されているのかを確認します。
 もしも、その途中で数字LEDに間違った文字が入っていたら…、その時はあわてないことです。正しい命令コードをキーで押して、すぐ次にINCRキーを押すと、それが改められて記憶されます。最後まで行ったら、またRESETキーを押して、0番地の最初から命令コードが正しく並んでいるかを順番に確認していきます。またも、「RESET→INCR→INCR→INCR→INCR→ … INCR→INCR」という操作を数字LEDを見ながら繰り返します。
 そうやって、正しい順番で命令コードが並んでいることを確認できたら、RESETキーを押して、0番地に戻ります。それから、『1』キーを押して、次にRUNキーを押します。そのプログラムが正しければ、自動的に動き出して、数字LEDにサイコロに無い『8』のような数字が表示されます。なにかキーを押すと、キーを押している間は1から6までのサイコロの数字が一つだけ数字LEDに現れます。これが電子サイコロのサンプルプログラムです。RESETキーを押すと、そのプログラム自体が止まります。
 以上のように、このGMC−4というマイコンのおもちゃは、『1』キーから『F』キーまでのいわゆる16進数キーと、RESETキーとINCRキーとRUNキーの3つの動作制御キーの押し方を知っていれば、とりあえず遊べる機械なのです。4ビットマイコンという機械にプログラムを記憶させて実行させるという、コンピュータの基本的な使い方を学べます。
 それでは、マイコンにプログラムを記憶させる前に、どうやって新しいプログラムを作ったらよいか、ということが問題になることでしょう。基本的には、紙と鉛筆だけで、フローチャートというものを書けばいいだけなのですが、その後のハンドアセンブル(手作業でGMC−4の命令コードに直していく作業)が面倒くさいので、最低限アセンブラを持っていると良いと思います。ネット上でも、GMC−4用のアセンブラを作って提供している人もいます。私なんかも、自前のアセンブラVBScriptで作って、Windowsマシン上でHTMLアプリケーションとして動かして利用しています。
 ネットを見ると、GMC−4用のCコンパイラやBASICコンパイラを開発している方もいらっしゃいます。GMC−4の命令セットがシンプルで、使えるメモリ容量も少ないのに、そういうふうにプログラム開発をするなんてすごいなあと感心しました。けれどもその一方で、今の若い人たちアセンブリ言語はなじみが無くて苦手なのかな、とも思いました。自慢じゃないですが、若い頃の私は会社の業務では高級言語しか使わしてもらえなかったので、家で趣味として8ビットマイコンの8085や6809の命令コード、いわゆる低級言語をいじってアセンブラにかけられるプログラムを作っていました。
 GMC−4に載せる新しいプログラムを作るのも、もちろん良いことだと思います。しかし、私は、その前に既存のプログラムの改良や変更をおすすめしたいと思います。プログラムというものは、一回作って終わりというものではなく、それをちょっとアレンジしたり、さらにグレードアップしてこそ、本当の付加価値が与えられるものだと、私は確信しているからです。
 例えば、先に紹介した『電子サイコロ』のプログラムについて、私には不満がありました。電子サイコロが動作中に数字LEDに現れる『8』の数字が気に入らないのです。おそらく『1』から『6』までの数字が数字LED上でめまぐるしく変化しているのが、人間の目の残像現象で重なって『8』に見えるのでしょう。そこで、その数字の変化を少しゆっくりさせて、『1』から『6』までの数字がそれぞれ一瞬だけ見えるようにしました。実際サイコロというものは、ころころ転がっているうちは、人間がどの数字になるかなとサイコロを見ながら一瞬だけ考える余裕があるものです。その感じを数字LEDのアクションで表現してみました。プログラム上では、0.1秒のインターバル・タイマー(TIA 0 / CAL TIMR)を入れただけですが、人間がキーを押して数字が確定するまでのGMC−4の動作が『電子サイコロ』っぽくなったと思います。実は、「この動きが本当の『電子サイコロ』だ。」と私は思っていたのです。

改良した電子サイコロの
プログラムの命令コードの順番→ A 1 3 1 3 8 0 E C B 1 D 7 F 1 2 A 1 0 F 0 2 F 1 2

 実は、上の命令コード(つまり、GMC−4のプログラム)は、私がWindowsマシン上で自作したアセンブラを通して得たものでした。その『電子サイコロ』のソース・プログラムは以下のような簡単なものです。私の自作アセンブラでは、ラベルは★マークをつけた一行の日本文で表せます。コンピュータは、上から下へ命令を実行していきますが、JUMP命令でラベルの飛び先にジャンプして、次の命令の実行が移ります。(ただし、このソース・プログラムに直接は現れていない実行フラグというものがあります。それが0か1かによって、ジャンプをしたり、ジャンプしなかったりします。詳細は、GMC−4の命令コード表を参考されると良いと思います。)

        TIY 1
★数字を出す
        CY
        AO
        CY
        TIA 0
        CAL TIMR
        AIY 1
        CIY 7
        JUMP キー待ち
        TIY 1
★キー待ち
        KA
        JUMP 数字を出す
        JUMP キー待ち

 GMC−4の命令コードセットが簡単なため、アセンブリ言語で書いても、どこかで使われている簡易言語とそれほど変わらない感じで簡単なプログラムを書くことができます。マイコンをプログラムする技術というものは、もともとは、こんなちっぽけなものかもしれませんが、それがまた、小さな感動を呼び起こすということでよろしいのではないかと、私は思うのです。