--------------------------------------- スクリーンエディタFE version 1.02 Programmed By こぺる Nazca SOFTWARE 1991-1992 --------------------------------------- ★対応機種 PC-E500/1480Uシリーズ ★タイトル スクリーンエディタFE version 1.02 ★説明書 ☆”スクリーンエディタFE”って何?  FEは、テキストファイルを作成・編集するときに使用する、ツールプログラムです。簡易メモとして使ったり、以前PJに掲載されたESPRITやCLARAなどのソースプログラムの作成に使ったりすることができます。 ☆特長 FEは次のような特長を備えています。 ●キーの操作方法はBASICの編集時と似せてあるので(通常の操作に関してはほとんど同じ)、違和感なく使うことができます。 ●一行の文字数がどんなに多くても、メモリ(とスピード)の許す限り編集することができます。 ●切り張り用のカットバッファが用意されており、テキストのカット&ペーストを行うことができます。 ●テキストの編集中に他のファイルを挿入したり追加したりすることができます。 ●TY-DOS上でも動作します。もちろん、TY-DOSにはまったく依存していないので、TY-DOSがなくても動かすことができます。 ●タブコードに対応しています。(タブストップはBASICと同様8文字おきに固定です。) ●シフトJISコードの全角文字に対応しています。(グラフィックキャラクタのみの入力はできません。) ●近成人氏の提唱したFPコントロールに対応しています。 ☆動作環境について  全ての機種で実際に動作テストを行ったわけではありませんが、このプログラム中の全ての入出力はE500シリーズの標準規格ともいえるIOCSとFCSを利用しているので、E500シリーズの全てのバージョンで動作すると思います。  特に必要な周辺機器はありません。すでに述べた通り、ファイルの入出力にはFCSを使用しているので、FCSで使用可能なデバイスには全て対応しています。(と、いうことは、カセットテープやSIO、近成人氏作のポケット・リンクなどもファイルの保存に使えるということです。なお、ポケットディスクはFCSで対応していないので、使用できないと思います。残念。)  FEは2つのプログラムで構成されています。ひとつはFEのメインプログラムをメモリに常駐させるプログラム(FES)で、もうひとつは常駐しているプログラムを呼び出して実行するプログラム(FE)です。  FESの実行にはマシン語領域が11キロバイト必要です。そして、FEの実行時には、マシン語領域を約1.5キロバイト以上確保しなければなりません。(なお、この中にはTY-DOSの領域も含まれています。FE自身が必要とする最小のマシン語領域の大きさは、約0.5キロバイト弱ほどです。)でも、これだけでは文章のエディットはできません。実際には、エディットしたい文書の大きさ+1.5キロバイト以上のマシン語領域を確保してください。要は、メモリがたくさんあればある程よいというわけで、ノーマルのE500では少々メモリ不足気味に感じるかもしれません。(でも、ノーマルのE500でも十分に使えるようにしたつもりです。) ☆入力しよう! FEは、メモリの節約のため、デバイスドライバなどのブロックとそうではないブロックの間にメモリブロックを作り、そこへ常駐します。常駐のためのメモリ確保等はFESが自動的に行ないます。 1.マシン語領域の確保  FESの入力・実行・アセンブルを行なうために11キロバイト以上のマシン語領域を確保します。 例)$BD000から11キロバイトのマシン語領域を確保する POKE &BFE03,&1A,&FD,&B,&,&2C,&:CALL &FFFD8 2.プログラムの入力 FEを入力してもらうために、ダンプリストとソースリストの2種類を用意しました。マシン語領域を確保してから、A,B,Cのいずれかの操作を行ってください。 A…ダンプリストから入力する場合  適当なマシン語モニタを使ってリスト2のFESのダンプリストとリスト3のFEのダンプリストを入力してください。マシン語モニタを持っていない人は、リスト1の簡易モニタを使うといいでしょう。入力したら、テープの場合、 リスト2:CSAVE M"FES",&BD000,&BEAEF リスト3:CSAVE M"FE",&BF700,&BF72F と入力して必ずセーブしておきましょう。  なお、リスト3のFEは実行する度に必要となるので、RAMディスクにもセーブしておいてください。 SAVE M"FE",&BF700,&BF72F B…ソースリストから入力する場合  まず始めにいっておきます。FESのソースリスト(NASフォーマットで書かれている)の大きさは約25キロバイトです。ノーマルのE500ではアセンブルできません。  覚悟ができたら、リスト4のソースリストを入力してください。入力したら、NASをロードしてアセンブルしてください。約1分ほどでアセンブルが終了します。アセンブルが終了したら、作成されたオブジェクトを$2000ずらします(LOAD M,SAVE M命令を使用すると楽)。ダンプリストと見比べて、同じオブジェクトが生成されているかどうか必ずチェックしてください。 これで、ダンプリストを入力した時と同じ状態になるので、&BD000から&BEAEFまでをセーブすればOKです。  リスト5のFEのソースリストも同様にアセンブルしてください。 C…すでに入力してあるものをロードする場合  ちゃんとマシン語エリアを確保したかどうかを確認したら、プログラムをロードするだけです。リスト3のFEはRAMディスクにセーブしておきましょう。 ☆インストールの方法  初めに一回だけFESを実行してメインプログラムをインストールする必要があります。 CALL &BD000["スロット番号(複数指定可)"] 例) CALL &BD000"321  なお、TY-DOS上でも実行可能です。スロット番号を指定すると、それらのなかで最初に常駐可能なスロットに常駐します。特に何も指定しなかった場合はスロット1(S1:)にインストールします。  実行すると、スロット名と以下のメッセージが出てきます。 --- OK,Installed.  常駐しました。これでFEを実行することができます。 Out of memory.  メモリ不足です。RAMディスクの容量を減らしたりしてそのスロットのフリーエリアを大きくしてください。 Existed.  すでにそのスロットにプログラムが常駐しています。 Skipped.  そのスロットはIOCSに認識されていません。 Protected.  そのスロットは書き込み禁止属性が出ているか、またはハードウエア的に書き込み禁止状態(ROM)になっています。 ---  もし、上記のメッセージのいずれも出ずに、変な文字が出てきたり、いきなりリセットがかかってしまった場合は、一度オールリセットして、ダンプリストとプログラムをみなおしてください。  インストールが完了すると、表示されたスロットに "FEDEXEC . "という名前のファイルが作成されます。このメモリブロックが移動しない限り、もうFESは必要ありません。  なお、 KILL"S?:FEDEXEC (?は常駐したスロット番号) で、簡単に常駐解除を行なうことができます。常駐解除の前に、LZFCSの後ろにデバイスドライバ等の移動しては困るメモリブロックがないことを確認しておいてください。 ☆動かしてみよう!  インストールしたら、早速起動してみましょう。 1.BASICから起動する場合 LOAD M"FE":CALL &BF700"[ファイルネーム]|[/R]"  ファイル名のかわりに /R もしくは -R のオプションを指定することができます。(詳しくは後述) 例) LOAD M"FE":CALL &BF700"RANDAM ※この操作はFEを起動する毎に行なうので、以下のようにファンクションキーに登録しておくといいでしょう。 KEY &1,CHR$ &3+"LoadM"+CHR$ &22+"FE"+CHR$ &22+":Ca.&BF700"+CHR$ &22 2.TY-DOSから起動する場合 FE [ファイルネーム] 例) FE F:SNAKE  起動する時には、必ずファンクションキーの表示を消しておいてください。表示を消さなかった場合の動作の保証はできません。(画面が変になってしまう)  ためしに何かBASICのプログラムをアスキーセーブして、そのファイルをエディットしてみてください。FEを起動して、ファイルネームの入力を終えると、画面は図1のようになっているはずです。この時に表示される特殊キャラクタの意味については同じく図1を見てください。え?何も表示されない?変な音がする?キーを押しても何も反応しない、そーゆー時はオールリセットしてダンプリストを見直したほうがいいでしょう。 --- 図1) ┌────────────────────┐ │int I=0; /*こんな風には出ないってば*/↓ │ │void main(){↓ │ │→ for(I=0;I<9;I++){↓ │ │→ → → put("いきなりク-│ └────────────────────┘ 『↓』:改行マーク 『→』:タブマーク 『-』:漢字が2行にまたがった時のダミーキャラクタ --- ☆/Rオプションについて  FEの起動時にファイル名のかわりに /R もしくは -R のオプションを指定すると、前回のFEの終了する直前の状態に復帰します。文書の編集中にちょっと計算などがしたくなったときなどに、[MENU],[E](または[Q])でエディタをいったん終了して、計算などを済ませてから、/Rオプションをつけて起動すれば、終了する直前の状態に戻ることができるわけです。また、動作中にRAMカードを付け替えたり、まちがってリセットしてしまった場合などの復帰にも使えます。  このオプションは、うまく使えばとても便利なのですが、初めてFEを起動する場合や、マシン語エリアの内容が書き換えられてしまったあと、TY-DOS上で指定した場合などに、このオプションを指定すると、暴走してしまう可能性があります。注意してください。 ☆キー操作について  基本的なキー操作は、BASICの編集時と似ているので、この説明を読まなくても、ちょっと表1を見るだけで結構使いこなせると思います。 1.カーソル移動/文字の入力/削除などの基本操作  カーソルキーで、上下左右に移動します。[SHIFT]+[←][→]で行頭、行末へ移動、[SHIFT]+[↑][↓]で1画面(4行)単位での移動、[CTRL]+[↑][↓]でテキストの先頭、末尾へ移動します。  キーを押せば、それに対応するキャラクタを入力できます。タブキャラクタの入力は、[RCL]([CTRL]+[I])で行います。コントロールコードは、[EXP]を押した後にコントロールキーを使って入力します。ただし、[CTRL]+[M]と[CTRL]+[J](改行コード)の単独入力と[CTRL]+[Z](ファイルの終了コード)の入力はできません。  [DEL],[BS]([CTRL]+[H])はBASIC編集時と同じ動作を行います。改行キャラクタも1文字として扱うので、複数の行を1行にまとめることなどが簡単に行えます。[CTRL]+[E]でカーソル以降の文字列の削除、[CTRL]+[Y]でカーソルのある1行全部を削除します。  [INS]([CTRL]+[R])で、挿入/上書きモードの切り替えを行います。カーソル形状はBASICと同じです。なお、起動直後は挿入モードになっています。 2.アンドゥ/リドゥ  [CL]([CTRL]+[L])を押すと、変更したテキストをもとに戻すことができます。もう一度押すとアンドゥのアンドゥ(リドゥ)ができます。 3.検索  [PF1]([CTRL]+[W])を押すと、検索する文字列を聞いてくるので、入力します。改行のキャラクタを入力する場合は[EXP]を押してから[RETURN]を押します。そして、[RETURN]や[↓]を押せばファイルの末尾(以下、前方と書く)方向へ、[↑]を押せば、ファイルの先頭(以下、後方と書く)方向へ向かって検索を開始します。次の候補を捜すときは、[CTRL]+[←][→]です。 4.置換  [PF2]([CTRL]+[T])を押すと、置換する文字列を聞いてくるので、入力して[RETURN]を押します。すると次に何に変換するかを聞いてくるので入力します。ここで、[RETURN]や[↓]を押せば前方へ、[↑]を押せば、後方へ向かって置換を開始します。次の候補を置換するときは、[CTRL]+[,][;]です。置換せずに検索するだけなら、[CTRL]+[←][→]です。文字列のサーチの部分で手抜きをしたので、置換する前と後の文字列が似ていると、何度も同じ位置を置換してしまうことがあります。注意してください。なお、間違って置換してしまった場合は、その直後なら、[CL]でのアンドゥが使用できます。 5.カット(コピー)&ペースト  カットまたはコピーしたいテキストの先頭へカーソルを移動して、[PF3]([CTRL]+[B])を押してから、末尾までカーソルを移動させます。このとき、カーソルの動いた範囲は反転して表示されます。そして、その範囲をコピーする場合は再び[PF3]([CTRL]+[B])を、カットする場合は[PF4]([CTRL]+[O])を押します(範囲指定は[CL]でキャンセルできます)。これで、さっき反転したところがバッファに取り込まれたので、カーソルをペーストしたい場所に持っていき、[PF5]([CTRL]+[P])を押せばバッファの内容がそこへ書き込まれます。ここでまた手抜きをしたために、カット及びペーストにはアンドゥが効きません。カット&ペーストを行うときは十分に注意をしてください。 6.メニュー  [MENU],[BASIC]([CTRL]+[=])を押すと、画面下に5つのメニューが現れます。それぞれに対応するファンクションキーか、またはそのメニューの頭文字のキーを押せば、選択することができます。  各メニューの機能は以下の通りです。 [Exit]  ファイルをセーブしてからプログラムを終了します。ただし、ファイルの編集を行なわなかった場合はセーブしません。また、セーブ時に何らかのエラーが発生した場合は、終了しません。 [Save]  ファイルが編集された場合のみ、現在設定されているファイル名でセーブを行います。セーブを中止する場合は[BREAK]を押してください。 [Name]  セーブ時のファイルネームを設定します。RAMディスクの容量が足りなくなってテープにセーブしたい場合などに使用します。名前を変えたくない時は、[MENU],[BASIC]を押すか、[CL]を2回押せばキャンセルされます。 [Link]  現在カーソルのある位置へ、指定したファイルをロードして挿入します。キャンセルは[MENU],[BASIC]または[CL]です。ロードを中止する場合は[BREAK]を押してください。 [Quit]  ファイルをセーブせずに強制終了します。メモリ上には終了時の状況が残っているので、/Rオプションをつけて再起動すれば、終了する直前の状態に戻ることができます。 7.その他の操作 ◇大文字・小文字変換  [±]([CTRL]+[C])で、カーソルの直前の単語の大文字と小文字を入れ替えます。ただし、入れ替えを行うのは半角文字のみです。 ◇オートインデントモードの切り替え  [TITLE]([CTRL]+[J])で、オートインデントモードのON/OFFを切り替えます。オートインデントとは、文字の字下げ(行の始まりの空白)を自動的に行う機能のことです。オートインデントモードON時はPRINTシンボルが点灯し、[RETURN]を押した時に直前の行の字下げと同じだけの数のスペースとタブを自動的に入力します。(オートインデントモード時にインデントを行わずに改行したい場合は[EXP]を押してから[RETURN]を押してください。)なお、起動直後はオートインデントOFFになっています。 ◇ファンクションキーの切り替え  FEはファンクションキーを無効にして単独のキーとして判別しています。しかし、場合によってはファンクションキーをBASICと同じように扱いたい場合があるかもしれません。それを切り替えるには[XCHG]を使います。ファンクションキーの内容が有効になっている時はDBLシンボルが点灯します。 ◇パワーオン/オフ  [ON]/[OFF]で、パワーのオン/オフを行います。オートパワーオフにも対応しています。 ☆FEの動作について  FEは、どんなファイルでも読めるので、マシン語ファイルやシステムのファイルを読み込むこともできてしまいます。もし、間違ってそれらのファイルを読み込んでしまった場合は、速やかにQuitしてください。間違ってセーブしてしまうと、元のファイルが破壊されてしまいます。  また、FEはETX($1A)コードの無いファイルも編集できますが、セーブするとETXコードがくっついてしまいます。  メニューを開いた時、ファイル名の入力を行なう時、FEを終了する時にはFPコントロールを用いてFPをオフにしています。JFPなどのFPコントロール対応のプログラムとの併用をお勧めします。  FE実行中にファイルのロードや編集(文章の入力や、カット&ペーストなど)の途中でメモリが足りなくなった場合、Eシンボルが点灯します。結構気がつかないことが多いので、何か変な動作をした場合はEシンボルの確認を行うといいでしょう。もしこうなってしまったら、編集中のファイルを保存して、FEの作業用領域を増やしてからもう一度起動しなおしてください。  FE実行中は[BREAK]を無効にしています。[BREAK]が有効になっていると、[BREAK]を押した直後のキー入力で、変なコードが帰ってくることがあったからです(FCSの仕様?)。ただし、セーブ/ロード時だけは[BREAK]を有効にしてあります。  ファイル名を変更せず、ファイルを書き換えていない場合は、ファイルのセーブは行いません。  ファイルのセーブ/ロードに失敗した時は、エラーメッセージを表示してキー入力待ちを行いますが、エラーメッセージは1つだけしかありません。これは、例えばRAMディスクでのエラーはメモリ不足ぐらいだし、テープやSIOなら、ノイズが入ったなど、それぞれのデバイスで発生するエラーなどたかが知れていると思ったからです(要は手抜き ^^;)。  FEを終了した時、DBL,BUSY,Eのシンボルは消灯してしまいます。起動前のシンボルの状態を保存しておけばよかったのですが、メモリ節約(またの名を手抜き)のため、保存はおこなっていません。  現在、KNJSCRN,EXTSCRN(漢字表示ドライバ),EXTKYBD(全角文字入力ドライバ),EOLLA(日本語フロントプロセッサ),JFP(日本語フロントプロセッサ)という、なんとE500シリーズで漢字の表示及び日本語の入力を行ってしまおうという素晴らしいプログラムが公開されています。E500はこれらのプログラムを組み込むことで100%威力を発揮します。これらのプログラムは、JUNETのメイリングリストや、ポケット通信v2にあるので、パソ通やってる人に頼んで入手しましょう! ☆注意!  基本的に、FE実行中はリセットをしないでください。(オールリセットなら大丈夫ですが…。)  FEはオリジナルフォントを使用しているため、そのフォントを表示する際に、IOCSのフォントのアドレスのワークエリアを書き換えています。もし、オリジナルフォントを表示する瞬間にリセットしてしまうと、$00〜$1Fまでのキャラクタが変になってしまいます。(でも、そんなうまいタイミングでリセットする方が難しいと思いますが。)  FEの実行中で、ファンクションキーが無効になっている時にリセットしてしまうと、ファンクションキーが無効になったままになってしまい、以後のファンクションキーの入力を正常に行えなくなってしまいます。プログラムの入力ミスや、未知のFEのバグ(ないことを祈ろう…)で、暴走してリセットがかかってしまったときなども同様です。注意してください。  どうしてもリセットしたい人(?)は、[XCHG]を押してファンクションキーを元に戻すか、[OFF]を押してパワーオフしてからリセットしてください。これなら大丈夫です。([OFF]を押すと、ファンクションキーを元に戻してからパワーオフするので、いきなりRAMカードを付け替えてリセットがかかっても、/Rオプションで復帰できます。)  もし、動作中にリセットをしてしまった場合は、/Rオプションをつけて起動して何もせずに終了([MENU],[Q])してみてください。FEは各処理の所々(プログラムの終了,ファイルのロード/セーブ,電源オフ時など)でレジスタ等の情報を保存するので、その後ならば復活できるハズです。が、運が悪いと、起動できずに暴走してしまうこともあります。そうなったら、最後の手段、 POKE &BFC46,ASC("F") と、やってみてください(ファンクションキーファイルの名前を変えている人は、"F"をファイル名の最初の1文字にしてください)。これでもダメなら諦めましょう(^^;)。 ☆プログラムについて  FEのプログラムに関することを書きたいと思います。こんなこと知らなくたって、FEを使うことはできるので、FEのプログラムを理解したい人以外は読み飛ばしてくださって構いません。  最初このプログラムは、 「漢字エディタ作るなんて言っちゃったけど、そんなもん作れっこないよなぁー。よーし、”漢字対応エディタ”なんてのはただのハッタリで、”漢字のテキストをスクロールさせて見るだけ”のプログラムを作ろー」 という考えでスタートしたのでした。で、その表示プログラムがうまく動いたので調子にのってガンガン作ってたら、ホントのエディタになってしまった、というシロモノなので、メモリ効率とスピードのバランスが取れているとは思えません。でも、後に「スクリーンエディタを作ってやるぜ!」という人のために、FEのプログラムについて書き残しておきたいと思います。  編集する文書は、頭に$0Aをつけてマシン語領域の先頭から読み込まれた後(メモリが足りないときは読めるところまで読んだ後)、しっぽに$1Aをつけてコードチェックを行ってメモリに収まります。CR+LFはそのままで変換しません。(CRやLFのみの場合はスペースに変換してしまいます。)  ワークエリアはTY-DOSのプログラムの直前にとってあります。よってTY-DOSを使用しない時は、$400バイトのメモリの無駄になります。これはソースリスト中のラベル"MEND"の値を書き換えて再アセンブルすることで解決できます。  具体的なメモリマップは図2を参照してください。 --- 図2) ┣━━━━━━━━━━━┫$80000 ┃ スロットヘッダ ┃ ┣━━━━━━━━━━━┫ ┃ ┃ ┃ デバイスドライバなど ┃ ┃ ┃ ┣━━━━━━━━━━━┫$????? ┃FEDEXEC ┃ ┃ FEメインプログラム ┃←S1: に常駐した場合 ┃ (5678バイト) ┃ ┃ ┃ ┣━━━━━━━━━━━┫$????? ┃ ┃ 〜〜〜〜〜〜〜〜〜〜〜〜〜 BASICのフリーエリア 〜〜〜〜〜〜〜〜〜〜〜〜〜 ┃ ┃ ┣━━━━━━━━━━━┫マシン語領域先頭(MTOP) ┃ テキストバッファ ┃ ┃ ↓↓↓↓↓ ┃ ┃ ┃ 〜〜〜〜〜〜〜〜〜〜〜〜〜 FEのフリーエリア  ←空になるまで編集できる 〜〜〜〜〜〜〜〜〜〜〜〜〜 ┃ ┃ ┃ ↑↑↑↑↑ ┃ ┃ カットバッファ ┃ ┣━━━━━━━━━━━┫$BF65A(FREBTM) ┃ ワークエリア ┃ ┣━━━━━━━━━━━┫$BF700 ┃ 1行編集用バッファ ┃ ┃ +その他作業領域 ┃ ┣━━━━━━━━━━━┫$BF800(MEND) ┃ TYDOS用のエリア ┃ ┣━━━━━━━━━━━┫$BFC00 ---  FEでは、テキストの書き換えに以下のような方法を使用しています。 1.文字のキーが押されたら、カーソルのある行からCR+LFのあるところまで(以下、変更前のエリアと呼ぶ)を編集用バッファに転送します。(編集用バッファは$100バイトしかないので、長い行の場合は$C8バイト以上は読み込みません。) 2.編集する文書の途中に編集用バッファが埋め込まれたようにして(以下、リンクという)以降の処理を行います(図3参照)。書き換えは編集用バッファに対して行われます。この間は変更前のエリアは全く変化しません。この間に[CL]を押すと、編集用バッファのリンクを解除します(アンドゥ処理)。 3.デリートなどで編集用バッファの大きさが0になってしまった場合は、また再び1.の処理を行い、変更前のエリアを大きくします。 4.編集用バッファからカーソルが外に出るか、編集用バッファの大きさが$FCバイトを越えるか、またはメニューを表示したり、サーチやリプレースを行うなど、編集用バッファを別の用途で使う場合は、変更前のエリアへ編集用バッファの内容を転送します。変更前のエリアの大きさと編集用バッファの内容の大きさが違う場合は、変更前のエリア以降の文書を移動させて編集用バッファの内容がきちんと転送できるように調整を行います。転送中はBUSYシンボルが点灯します。もし、メモリが足りなかった場合は、アンドゥの処理を行い、Eシンボルを点灯してメモリがないことを知らせます。転送が終了したら、リンクを解除します。  だいたいこんな感じでやっています。バイト数とかはビミョーに違うかもしれません。  この方法だと、いちいち転送を行うので、処理が遅くなるのですが、バッファが小さくてすみ、1行がどんな長さになっても編集できるし、アンドゥ(もどき)も使用できるという利点があると思います。  文字の表示にはIOCSを使って1文字ずつ表示しています。しかし、【1文字表示ルーチン】は呼び出される度に座標のチェックを行うらしく、かなり遅かったので、半角文字の表示には【表示座標を無視して1文字表示】のルーチンを呼び出しています。改行コードの右側の空白の表示にはIOCSの【n文字消去のルーチン】を使用しています。文字の表示は比較的遅いため、文字が多い行は表示が”ちょっと(かなり、ともいう。)”遅くなります。  表示は最小限の書き換えで行う(…はずだったのですが、反転表示を行っている時は手抜きでちょっと余計に書き換えを行ってしまうかもしれません)ので、表示スピードはかなり速い方だと思います。しかし、1文字表示する度にリンクのチェック、文字反転のチェック等を行っているのでまず遅くなってしまうし、タブや改行等のキャラクタには、オリジナルキャラクタを使用しているので、IOCSの【n文字表示】のルーチンは使用できないし…まあ、メモリを$C0バイト食い潰せば可能だとは思いますが、そこまでスピードにこだわらなくても現在のままで十分に速い(BASICのエディタより”ちょっと”遅いくらい?)ので、変更する予定はありません(遅い!と思ったら、クロックアップ改造だ!やはり、4.8MHzは基本でしょう ^^;)。  FEはファンクションキーを単独のキーとして認識させようと涙ぐましい苦労をしてきました。最初はIOCSのキー入力を解析して、同じようなルーチンを組み、ファンクションキーだけは別処理を行って単独キーとして判別していました。そして次にはキーマトリクスを変更して、ファンクションキーを別のキーに割り当てる方法を思いつき(友人がキーマトリクスを変更して、[OFF]のコードを[CTRL]+[OFF]のコードに割り当てていたのがヒントになった)、これで大丈夫!と思ったら、ファンクションキーを直接読むことができないので、困ってしまったところで、近成人氏にファンクションキーの内容を直接読む方法を教えていただいたのでした。  具体的には、キーIOCSのワークエリアの、ファンクションキーの内容の入っているファイル名を一時的に書き換えて、存在しないファイル名にしてしまいます(実際は$BFC46に0を書き込む)。こうすると、ファンクションキーファイルを見つけられないIOCSは困ってしまって、何とファンクションキー本来のコード($00+$13〜$17)を返すようになるのです。  電源OFFのIOCS(システムコントロールドライバの$41)をコールすると、内部RAMの内容が破壊されてしまうことがあるようです(電源をOFF→ONした後に変な動作をすることがあった)。このため、このIOCSをコールする前に使用している内部RAMをすべて保存しておくようにしてあります。IOCSを解析したわけではないので、本当にIOCSがおかしいのかどうか自信はなかったのですが、PJプラザ(1992年10月号,84ページ)に、藤沢純一氏の詳しい解説がのっていたので、きっとIOCSのバグでしょう。  あと、活研には「LCDをOFFにし…」と書かれていましたが、どうもOFFにしないみたいなので、LCDをOFFにしてから(LCDドライバの$50)電源をOFFにしています。  該当するファイル名の検索(FCSコールの$0D)で、COM: CAS: のデバイスに対して行なうと、かえってくるファイル名文字列の、デバイス名(先頭6バイト)が、変になっています(普通なら前に詰められているデバイス名が後ろに詰められてしまうようです)。さらにその後の調査で、ファイル名文字列のデバイス名の部分は、6バイトにしておいた方がいいらしいということが判明しました。 --- つまり、いままでは以下のようにしていたものを、 'CAS:SAMPLE .DAT'00 以下のようにする。 'CAS: SAMPLE .DAT'00 ↑↑↑ここが6バイト! ---  このようにすると、該当するファイル名の検索でもきちんとしたファイル名文字列を返してくれるようです。FCSにファイル名を渡すときは、デバイス名の部分は6バイトにしておいた方がいいのかもしれません。  なお、このルーチンが返すファイル名文字列は、しっぽに$00が付いていません。  シンボルの表示(LCDドライバの$46)で、現在のシンボルの点灯/消灯状態の保存されているアドレスは、$0BFC97(SYMST)です(ラベル名はテキトー)。多分すべてのE500系のマシンはこのワークエリアを使用しているはずです。(自信はない… ^^;)  最後にアクセスを行なったドライブ名は $0BFC7D(DFLT)から記録してあります。(モニタをいじっていて偶然見つけた…。これも自信はない…)  n行スクロール・アップ/ダウン(LCDドライバの$47/$48)で、BXレジスタ($D4,$D5)は、0でなくても動きます。(ちょっとマズかったかな?)  キー読み出し(Keyドライバの$43)ではカナ文字の入力ができません。とても困ったのですが、あっけなく解決しました。リードバイト・データ(Keyドライバの$0C)をつかえば、BASICのINPUT $&1とまったく同じ動作をするようです。  ただし、[BREAK]を押したつぎのキーコードがメチャクチャな値になってしまうことがあるようです。困ったのですが、[BREAK]を無効にすることで解決しました。なお、[BREAK]を無効にするには、($EA)のビット3を0にすればOKです。ただし、このままBASICにもどると、[BREAK]が効かなくなってしまうので、BASICに戻る前には($EA)のビット3を1に戻しています。あとファイルの入出力中にも[BREAK]が有効になるようにしてあります。  ちなみに、私のE500のROMバージョンは7です。他のバージョンのROMでは、動作が異なることがあるかもしれません。 ☆配布・転載について  このプログラムは、無保証のフリーウェアです。著作権はこぺるが保持しています。内容を改変せずに、営利を目的とせずに、作者の持つ著作上の権利を侵害しないようにするなら、配布・転載は自由に行なってくださって結構です。 不明な点などは作者までお問い合わせください。 E-mail: copel@coins.is.tsukuba.ac.jp ML: pocket@fem.info.gifu-u.ac.jp ☆Special Thanks to  プログラム作成にあたり、不安定なFEを使ってバグ出しをしてくれたり、アドバイスをしてくれたり、貴重な情報を教えてくれた方々へ。この場を借りて感謝します。ありがとうございました! ☆参考文献・資料・プログラム  FEのプログラム及び各ドキュメントの作成の際に参考にした文献、資料、及びプログラムを書いておきます。(順不同、敬称略。なお、プログラムのバージョンナンバーは"v"に続けて書きました。) ○Human68K v2.0 ユーザーズマニュアル  第2部 スクリーンエディタED SHARP ○PC-E500/1480U 活用研究 工学社 ○EXTKYBD v1.12 あさそら ○EOLLA v1.04 あさそら ○EXTSCRN v1.41 加古英児 ○KNJSCRN v1.32 加古英児,Ryu ○TRED v1.04 Ryu ○JFP v1.05T 近成人 ○ポケット・リンク(PJ 1990年6月号) 近成人 ○TY-DOS(PJ 1988年8月号) 山口敏郎 ○TY-ED(PJ 1988年9月号) 山口敏郎 ○LED(PJ 1991年11月号) ALPHA ○EXHED(PJ 1991年11月号) Au ○PJプラザ(PJ 1992年10月号) 藤沢純一 ☆終わりに  ここまで読んでくれて、ありがとう!では、バグが出ないことを祈りつつ… -- BGM:『冒険百連発!(Theme of Edward Randy)』 By こぺる