見出し画像

ファンクションキーと割り込み

最初の海外製パソコン御三家のキーボードはPET2001にテンキーこそありましたが、基本的にはタイプライターと同じ最低限のアルファベットと記号しかありませんでした。日本製もCOMPO-BSやベーシックマスター、そしてMZ-80Kまではカナこそ打てましたが、似たりよったりです。PC-8001には5つのファンクションキーが加えられました。海外製ではVIC-1001からですね。

ファンクションキーは、いわゆる端末にはもう少し昔から使われていて、VT-100にもテンキーの最上段にありました。端末時代にどのように使われていたかはよく知らないのですが、どうやら決まりきった通信設定や画面幅の切り替えなどに割り当てていたり、ホストで実行するプログラムに対する固有の操作、例えば前フィールド、次フィールドみたいなもので使われていたようです。

ですからPC-8001にファンクションキーが追加されたのは、ある意味では自然なことで、端末として使うのであれば必須だと考えたのでしょう。ただ大部分の人はBASICしか使わないので、これらのキーをどう使うのかというと、よく使われるLISTとかRUNといったBASICのコマンドを割り当てたのですね。これはうまいこと考えたものです。この考え方は、その前からゲームコンソールなどキーというよりもボタンしか無かったような機種で、コマンドを1キーで入力させることがあったのがヒントになったのではと思います。ボタンといえばPET2001にも省略形入力という仕組みがあったような気もするのですが、思い出せません。

最初のうちは、それ以上の使い方の無かったファンクションキーですが、その後、プログラムを実行中にファンクションキーなどの特別なキーを押した時に、決まった動作をさせる仕組みがBASICに追加されました。
BASICによって、実に細かな差異がたくさんあるのですが、MSX-BASICでの例として使い方を挙げると

  • ON KEY GOSUB 行番号[, 行番号]…

でファンクションキーが押された時に実行されるサブルーチンを指定します(F1から順に一度にすべてのキーに対応するサブルーチンを指定する必要がある)。この後、

  • KEY(1) ON

とすることで、指定したファンクションキーの割り込みが有効になります(無効にするのは KEY(1) OFF)。これでファンクションキーを押した時点で指定したサブルーチンが呼ばれるようになります。サブルーチンですから最後はRETURNで終わり、元々実行していたところから再開されます。

そうです。いわゆる「割り込み処理」が実装されているわけです。BASICは全てがグローバル変数ですから、このサブルーチン内で変数の値を変更すれば、元々走っていた処理にも影響しますし、このサブルーチンの中でさらに割り込みが起こったらどうなるの?という問題もあるわけです。

MSX-BASICの場合はよく出来ていて、割り込み処理のサブルーチンを呼ぶ際には、他の割り込み処理は自動的に保留され(KEY(n) STOPなどと同等)、保留された割り込みはサブルーチンをRETURNした時点で有効になり、実行されます。もちろんサブルーチンで明示的に割り込みを有効にすれば、それは割り込み処理中でもさらに割り込みがかかるのです。

この辺りはBASICによって違いがあり、自力でSTOPを掛けて回らないと、次々割り込みが続いてエラーになる(割り込みの深さには制限がある)処理系もありました。割り込み処理の中でキー入力を待ったり、ディスクへのアクセスがあると、とても長い間、他の割り込みを待たせたり、割り込み中のエラー処理が必要になると、わけがわからないことになりがちなので、気を使うところでもありました。割り込み処理の注意点は、そういう意味ではマシン語の割り込みと何も変わらないわけです。

ちなみにMSXでは、ファンクションキー以外にもジョイスティックやSTOP(CTRL+STOP)、スプライト、そしてタイマーによる割り込みがありましたし、ソフトウェア割り込みに近いものとしてエラー処理もありました。割り込みを上手に使うと、いちいち細かく状態チェックをしなくても、必要な処理を書いていくことができるのですが、処理のパターンに慣れないと、良くわからないエラーに悩まされる場所でもありました。

こんなインタプリタの仕様をコンパイルするにはコンパイラは大変だったのだろうなとも思うわけです。でもBASICであっても割り込みの概念を覚えてしまえば、マシン語でも困らないですし、GUIな時代のイベントドリブンな処理の理解も深まるだろうとは思います。

ヘッダ画像は、PC-9801で使っていたASCII Boardの一部。

#キーボード #ファンクションキー #割り込み #MSX #BASIC  

この記事が気に入ったらサポートをしてみませんか?