見出し画像

N88BASICの日本語コード

1981年末に登場したPC-8801では、オプションではありますが漢字ROMが搭載可能になっていて、このデータを使ってグラフィック画面に漢字を表示することが出来るようになりました。

PC-8801 - 8ビットの頂点

この機能を活かすために、漢字を含む日本語の文字列を扱えるようにNECとシステムソフトから、それぞれ漢字BASICが発売されました。

N88-BASIC

既にJISで漢字コード自身は規定されていましたが、JISで規定されているのはあくまで「交換用コード」であって、BASICで漢字を扱う際には、そこコードだけを借用して、ASCIIと漢字の切り替えに関してはKI/KO(KanjiIn/KanjiOut)と呼ばれる1バイトの制御コードで行っていました(KIとKOは異なるコードとは限らない)。

ややこしいのはBASICによって、この切り替えに用いる制御コードが異なるのと、漢字コードも本来であれば7ビットなのですが、最上位ビットを1にして使うこともあったり、コードのバイト順を逆転して使ったりするケースもあったようです。

BASIC とその漢字コードについて

これらは、あくまでBASICで日本語文字列を処理するための内部コードなので、通信するときや印刷するときには、それぞれの相手側の都合に合わせた文字コードに変換して使えば構わないものです。とはいえファイルに書き出すときも、このコードをそのまま使って書き出すので、BASICで作ったファイルを他の機種で読み出すのであれば、そこで変換が必要になります。

まあPC-8801の時代は、漢字ROMを読み出すのも8ビットCPUですから、コードを調べて該当するフォントが入っているROMを読み出すためにメモリバンクを切り替えて、そこからせっせと描画する必要もあって、漢字を使う頻度は少なかったようです。テキストとしての漢字コードが無いので、具体的な文字セットとコード体系を調べようとしたのですが、挫折しているところです。

参考:PC‐8801 N88‐BASIC解析マニュアル 川村清.pdf

https://ia800702.us.archive.org/4/items/PC-8801N88-BASIC/PC‐8801 N88‐BASIC解析マニュアル 川村清.pdf

これがPC-9801の登場で、一気に重要性が高まります。PC-9801は漢字ROMがオプションの場合があるものの、テキスト画面で漢字を扱うことが出来、もはや日本語が扱えることが当たり前となりました。N88-BASICもCPUが新しく16ビットになったこともありBASICのソースコード・レベルでの互換性は高かったものの内部構造は大幅に変更され、日本語文字列の扱いも変わってしまいました。KI/KOの考え方は同じですが、それぞれのコードが1バイトの制御文字からESC+K/ESC+Hの2バイトになりました(純正プリンタのコードに合わせたという話もある)。

このように日本語を扱う際にモードを持つ処理が必要となったわけですが、モードがあると文字の挿入 削除の際に、常に正規化とも呼べる処理が必要となります。1バイト文字列の中に漢字を挿入する際には、前後にKI/KOを付加すれば良いのですが、既に混在している文字列に漢字を挿入するのであれば、そこにKI/KOが必要なのかは前後を見て決めなければなりません。漢字を削除する際も前後に漢字がなければKI/KOも消さなくてはなりません。要は意味のないKI/KOが残らないように常に前後を確認する必要があるのです。

悪いことにはPC-9801には漢字扱いなのに表示上は半角分のスペースしかとらない半角2バイト文字というのもあるので、ややこしさはさらに増えています。このため文字列データと表示上の文字数の関係は複雑で、例えば文字列の長さを返すKLEN関数には数え方を指定するオプションがあって、このオプションを見るだけでも、どんなに面倒な処理が必要なのか想像できると思います。

N88-BASIC(86) KLEN関数

なお、メモリスイッチにKI/KOコードの切り替えというものがあるのですが、これはおそらく端末として動作するときのものでBASICが扱う文字列自身のコードはそのままだと思います。

PC-9801も当初はDISK-BASICを使うことが多く、販売されているソフトもDISK-BASIC上で動作するものが大多数だったのですが、徐々にMS-DOSが普及し、MS-DOS上のDISK-BASICを使うことが増えていきました。ここでMS-DOSでは日本語コードとしてシフトJISを使うので、同じDISK-BASICでも内部コードがシフトJISになりました。そうなるとKI/KOは消滅し、処理の上ではだいぶラクになりましたが(まだ半角2バイト問題は残っています)、DISK-BASIC間でのデータコンバートが必要になっただけではなく、関連する文字列処理のコードも直すことなってしまいました。

ということで、シフトJISの登場で煩雑なモード切替からは解放されたのですが、今度はまた別の問題も出てきたりします。その話は、あらためて。

ヘッダ画像は、以下のものを使わせていただきました。
https://commons.wikimedia.org/wiki/File:88SRBASIC.png
Chihoukou - 投稿者自身による著作物, CC 表示-継承 3.0, https://commons.wikimedia.org/w/index.php?curid=15943461による

#文字コード #日本語コード #NEC #PC8801 #PC9801 #N88BASIC #シフトJIS #JIS #文字列関数  

いいなと思ったら応援しよう!