前々回の記事で,PC-8801シリーズの第2水準漢字ROMはサードパーティ製品が先に発売され,NEC純正品もそれに追従する仕様になったと説明しました。実はNECはそれよりも遙か以前に,8801シリーズに採用された物とは異なる第2水準漢字の仕様を作成しておりました。BASICで標準サポートしています。前回の記事で,8801シリーズの第1水準漢字ROMへのアクセスはポート0E8H~0EBHを使用すると説明しました。KANJI命令の実行時に,0E8H~0EBHに加えてポート0ECHに値が出力されるのが確認できます。BASICでは,このポート0ECHを第1水準漢字/第2水準漢字の切り替えと想定してアクセスしているようです。P244に記載されている漢字ROMアクセス仕様に関する記述の抜粋です。0ECHへの出力値に「2:半角」という記述がありますが,これは間違いのようです。BASICでも半角文字の表示時には0を出力しています。8801用と異なるのはポートの指定だけではなく,漢字ROM内のデータ配置も異なっているようです。PC-8801用とPC-8001mkII/SR用の,第2水準漢字の文字コード→漢字ROMアドレス変換の違いを以下に示します。PC-8801用は,全てビットのマスク&シフト&合成だけで変換できる仕様となっています。5020H~6F7FHのビット13もシフトが必要になったりと,少し処理が増えそうに見えます。BASICのアドレス変換処理ではテーブル参照を使って第1水準漢字と共通化するような実装になっているので,第1水準漢字と同様のパフォーマンスで動作します。それにしても,ここまでソフトを作り込んでおきながらハードが未発売というのはなんとも残念です。BASICで第2水準漢字はサポートされていませんから,PC-8001mkIIの数少ない優位点となったかもしれません。このまま使われずに眠らせておくだけというのはなんだか悲しいので,この仕様に合わせて第2水準漢字アクセスを修正したX88000の改造版を作ってみました。BASICだけで第2水準漢字が表示できています。漢字BASIC」「マイレターmk2」はダメでした。ポート0ECHに全く値を出力していません。漢字BASICはNEC純正ソフトなのですから,サポートして欲しかったですね。続いて「P-漢」「thePC漢字」も試してみましたが,これらもダメでした。KANJI命令を使っているので行けると思ったのですが,文字コード入力を行う機能が存在しないので第2水準漢字を入力することができませんでした。唯一表示できたのは「80mkII簡易日本語ワードプロセッサ」です。見えづらいですが"髑髏"と表示しています。こんな部分までサポートしているとは驚きです。簡易などと名付けていますが80mkII用ワープロでは最上位クラスの完成度を誇るソフトなので,ある意味納得の結果でした。この改造版X88000はこちらに置いておきました。ノリで作ったお遊びプログラムなので今後のサポートなどは一切期待できませんが,興味のある方はお試しください。6.84でこの機能に公式で対応してくださいました。こんな対応ハードが未発売のネタまで拾ってくださるとは,HAL8999さん守備範囲広すぎです。88用第2水準漢字ROMのデータはそのままでは使えないので注意が必要です。上記の改造版X88000では88用のデータをそのまま使えるように内部で細工していますが,j80の方は実際のハードウェアに忠実な作りになっているので,ROM内部のデータが本記事で説明したアドレスで格納されている必要があります。試しに88用第2水準漢字ROMのデータからPC-8001mkII用のファイルを作成するツールを作成してこちらに置いておきましたので,必要な方はどうぞ。本アーカイブを展開して,同じフォルダにM88形式のKANJI2.ROMをコピーしてからConvertKanji2RomFor80mkII.exeを実行すると,同じフォルダにPC-8801-20.mod.romというファイルが作成されます。6.85では,88用第2水準漢字ROMのデータを内部でマッピングする機能(-n80オプション)が追加されました。よって,上記ツールは不要になります。ちなみに,上記ツールにも一部問題があるとHAL8999氏からご指摘&修正コードを頂いたので,新しいものに差し替えました。不要なツールとなってしまいましたが,参考として残しておきます。KANJIで文字コード表にある文字を表示する分には問題なさそうなのでそのままです。気になる方はj80を使うか,修正版ツールのソースを参考にして書き換えて使ってください。http://www5f.biglobe.ne.jp/~apaslothy/cgi_bin/adiary/adiary.cgi/068/tb/※お手数ですが、SPAM防止のためURLの後ろに「&#;&#;&#;」を追加してください。管理メニューログイン。